shithub: pokecrystal

Download patch

ref: 794410352fd92ccf06974763e4b3be0b807641ab
parent: 9c5473e965520f672640daf4ee76622640e0de15
parent: 4bcd71e3227181baa536357af3d87a8d02af3890
author: yenatch <yenatch@gmail.com>
date: Sat Nov 28 15:15:35 EST 2015

Merge pull request #328 from PikalaxALT/master

Split out most of main.asm

--- a/Makefile
+++ b/Makefile
@@ -1,9 +1,8 @@
 PYTHON := python
 MD5 := md5sum -c --quiet
 
-.SUFFIXES:
 .SUFFIXES: .asm .o .gbc .png .2bpp .1bpp .lz .pal .bin .blk .tilemap
-.PHONY: all clean crystal pngs
+.PHONY: all clean crystal crystal11 pngs
 .SECONDEXPANSION:
 
 poketools := extras/pokemontools
@@ -53,6 +52,8 @@
 
 all: $(roms)
 crystal: pokecrystal.gbc
+
+crystal11: pokecrystal11.gbc
 
 clean:
 	rm -f $(roms) $(all_obj) $(roms:.gbc=.map) $(roms:.gbc=.sym)
--- a/battle/anim_commands.asm
+++ b/battle/anim_commands.asm
@@ -1172,7 +1172,7 @@
 .done
 	pop af
 	ld [CurPartySpecies], a ; CurPartySpecies
-	ld b, $1
+	ld b, SCGB_01
 	call GetSGBLayout
 	pop af
 	ld [rSVBK], a
@@ -1437,13 +1437,13 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, BGPals
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld a, [rBGP]
 	ld b, a
 	ld c, $7
 	call CopyPals
 	ld hl, OBPals
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld a, [rBGP]
 	ld b, a
 	ld c, $2
@@ -1465,7 +1465,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, OBPals + $10
-	ld de, Unkn2Pals + $10
+	ld de, UnknOBPals + $10
 	ld a, [rOBP0]
 	ld b, a
 	ld c, $2
--- a/battle/bg_effects.asm
+++ b/battle/bg_effects.asm
@@ -2571,12 +2571,12 @@
 	push bc
 	push af
 	ld hl, BGPals ; BGPals
-	ld de, wMapPals ; wd000
+	ld de, UnknBGPals ; wd000
 	ld b, a
 	ld c, $1
 	call CopyPals
 	ld hl, OBPals + 8
-	ld de, Unkn2Pals + 8
+	ld de, UnknOBPals + 8
 	pop af
 	ld b, a
 	ld c, $1
@@ -2598,12 +2598,12 @@
 	push bc
 	push af
 	ld hl, BGPals + 8
-	ld de, wMapPals + 8
+	ld de, UnknBGPals + 8
 	ld b, a
 	ld c, $1
 	call CopyPals
 	ld hl, OBPals ; OBPals
-	ld de, Unkn2Pals ; wd040
+	ld de, UnknOBPals ; wd040
 	pop af
 	ld b, a
 	ld c, $1
--- a/battle/core.asm
+++ b/battle/core.asm
@@ -7,7 +7,7 @@
 	xor a
 	ld [wBattleParticipantsNotFainted], a
 	ld [wc6fc], a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ld [BattleEnded], a
 	inc a
 	ld [wd264], a
@@ -302,7 +302,7 @@
 	call HandleHealingItems
 	call UpdateBattleMonInParty
 	call LoadTileMapToTempTileMap
-	jp Function3c4df
+	jp HandleEncore
 ; 3c23c
 
 CheckFaint_PlayerThenEnemy: ; 3c23c
@@ -461,7 +461,7 @@
 	jr z, .use_move
 	sub BATTLEACTION_SWITCH1
 	jr c, .use_move
-	ld a, [wd0ec]
+	ld a, [wPlayerAction]
 	cp $2
 	jr nz, .switch
 	ld a, [hLinkPlayerNumber]
@@ -486,7 +486,7 @@
 	jp .enemy_first
 
 .use_move
-	ld a, [wd0ec]
+	ld a, [wPlayerAction]
 	and a
 	jp nz, .player_first
 	call CompareMovePriority
@@ -629,7 +629,7 @@
 	jr .encored
 
 .not_encored
-	ld a, [wd0ec]
+	ld a, [wPlayerAction]
 	cp $2
 	jr z, .reset_rage
 	and a
@@ -638,7 +638,7 @@
 	and 1 << SUBSTATUS_BIDE
 	jr nz, .locked_in
 	xor a
-	ld [wd235], a
+	ld [wMoveSelectionMenuType], a
 	inc a ; POUND
 	ld [FXAnimIDLo], a
 	call MoveSelectionScreen
@@ -714,16 +714,16 @@
 	ret
 ; 3c4df
 
-Function3c4df: ; 3c4df
+HandleEncore: ; 3c4df
 	ld a, [hLinkPlayerNumber]
 	cp $1
-	jr z, .asm_3c4ea
-	call .asm_3c4ed
-	jr .asm_3c518
+	jr z, .player_1
+	call .do_player
+	jr .do_enemy
 
-.asm_3c4ea
-	call .asm_3c518
-.asm_3c4ed
+.player_1
+	call .do_enemy
+.do_player
 	ld hl, PlayerSubStatus5
 	bit SUBSTATUS_ENCORED, [hl]
 	ret z
@@ -730,7 +730,7 @@
 	ld a, [PlayerEncoreCount]
 	dec a
 	ld [PlayerEncoreCount], a
-	jr z, .asm_3c50a
+	jr z, .end_player_encore
 	ld hl, BattleMonPP
 	ld a, [CurMoveNum]
 	ld c, a
@@ -740,7 +740,7 @@
 	and $3f
 	ret nz
 
-.asm_3c50a
+.end_player_encore
 	ld hl, PlayerSubStatus5
 	res SUBSTATUS_ENCORED, [hl]
 	call SetEnemyTurn
@@ -747,7 +747,7 @@
 	ld hl, BattleText_TargetsEncoreEnded
 	jp StdBattleTextBox
 
-.asm_3c518
+.do_enemy
 	ld hl, EnemySubStatus5
 	bit SUBSTATUS_ENCORED, [hl]
 	ret z
@@ -754,7 +754,7 @@
 	ld a, [EnemyEncoreCount]
 	dec a
 	ld [EnemyEncoreCount], a
-	jr z, .asm_3c535
+	jr z, .end_enemy_encore
 	ld hl, EnemyMonPP
 	ld a, [CurEnemyMoveNum]
 	ld c, a
@@ -764,7 +764,7 @@
 	and $3f
 	ret nz
 
-.asm_3c535
+.end_enemy_encore
 	ld hl, EnemySubStatus5
 	res SUBSTATUS_ENCORED, [hl]
 	call SetPlayerTurn
@@ -972,7 +972,7 @@
 	jp z, HandlePlayerMonFaint
 	call RefreshBattleHuds
 	xor a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ret
 ; 3c664
 
@@ -1022,7 +1022,7 @@
 	jp z, HandleEnemyMonFaint
 	call RefreshBattleHuds
 	xor a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ret
 ; 3c6cf
 
@@ -2004,7 +2004,8 @@
 	ret
 ; 3ccc2
 
-Function3ccc2: ; 3ccc2
+GetHalfHP: ; 3ccc2
+; unreferenced
 	ld hl, BattleMonHP
 	ld a, [hBattleTurn]
 	and a
@@ -2160,22 +2161,22 @@
 	jp c, WildFled_EnemyFled_LinkBattleCanceled
 
 	ld a, $1
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	call Function3cf4a
 	jp z, WildFled_EnemyFled_LinkBattleCanceled
-	jr Function3cdca
+	jr DoubleSwitch
 
 .player_mon_not_fainted
 	ld a, $1
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	call Function3cf4a
 	jp z, WildFled_EnemyFled_LinkBattleCanceled
 	xor a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ret
 ; 3cdca
 
-Function3cdca: ; 3cdca
+DoubleSwitch: ; 3cdca
 	ld a, [hLinkPlayerNumber]
 	cp $1
 	jr z, .player_1
@@ -2201,7 +2202,7 @@
 
 .done
 	xor a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ret
 ; 3ce01
 
@@ -2412,7 +2413,7 @@
 Function3cf4a: ; 3cf4a
 	ld hl, EnemyHPPal
 	ld e, HP_BAR_LENGTH_PX
-	call Function3e12e
+	call UpdateHPPal
 	call WaitBGMap
 	callba Function2c012
 	ld a, [wLinkMode]
@@ -2419,7 +2420,7 @@
 	and a
 	jr z, .not_linked
 
-	call Function3e8e4
+	call LinkBattleSendReceiveAction
 	ld a, [wBattleAction]
 	cp BATTLEACTION_FORFEIT
 	ret z
@@ -2459,7 +2460,7 @@
 	call SpikesDamage
 	xor a
 	ld [wEnemyMoveStruct + MOVE_ANIM], a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	inc a
 	ret
 ; 3cfa4
@@ -2532,48 +2533,48 @@
 ; 3d02b
 
 Function3d02b: ; 3d02b
-	ld a, [wc73d]
+	ld a, [wAmuletCoin]
 	and a
-	call nz, Function3d099
-	call Function3d0b1
+	call nz, .DoubleReward
+	call .CheckMaxedOutMomMoney
 	push af
 	ld a, $0
-	jr nc, .asm_3d044
+	jr nc, .okay
 	ld a, [wMomSavingMoney]
 	and $7
 	cp $3
-	jr nz, .asm_3d044
+	jr nz, .okay
 	inc a
 
-.asm_3d044
+.okay
 	ld b, a
 	ld c, $4
-.asm_3d047
+.loop
 	ld a, b
 	and a
-	jr z, .asm_3d052
-	call Function3d081
+	jr z, .loop2
+	call .SendMoneyToMom
 	dec c
 	dec b
-	jr .asm_3d047
+	jr .loop
 
-.asm_3d052
+.loop2
 	ld a, c
 	and a
-	jr z, .asm_3d05c
-	call Function3d08d
+	jr z, .done
+	call .AddMoneyToWallet
 	dec c
-	jr .asm_3d052
+	jr .loop2
 
-.asm_3d05c
-	call Function3d099
-	call Function3d099
+.done
+	call .DoubleReward
+	call .DoubleReward
 	pop af
 	jr nc, .KeepItAll
 	ld a, [wMomSavingMoney]
 	and $7
 	jr z, .KeepItAll
-	ld hl, SentToMomTexts
+	ld hl, .SentToMomTexts
 	dec a
 	ld c, a
 	ld b, 0
@@ -2590,26 +2591,26 @@
 	jp StdBattleTextBox
 ; 3d081
 
-Function3d081: ; 3d081
+.SendMoneyToMom: ; 3d081
 	push bc
-	ld hl, wc688
+	ld hl, wBattleReward + 2
 	ld de, wMomsMoney + 2
-	call Function3d0be
+	call AddBattleMoneyToAccount
 	pop bc
 	ret
 ; 3d08d
 
-Function3d08d: ; 3d08d
+.AddMoneyToWallet: ; 3d08d
 	push bc
-	ld hl, wc688
+	ld hl, wBattleReward + 2
 	ld de, Money + 2
-	call Function3d0be
+	call AddBattleMoneyToAccount
 	pop bc
 	ret
 ; 3d099
 
-Function3d099: ; 3d099
-	ld hl, wc688
+.DoubleReward: ; 3d099
+	ld hl, wBattleReward + 2
 	sla [hl]
 	dec hl
 	rl [hl]
@@ -2624,7 +2625,7 @@
 	ret
 ; 3d0ab
 
-SentToMomTexts: ; 3d0ab
+.SentToMomTexts: ; 3d0ab
 	dw SentSomeToMomText
 	dw SentHalfToMomText
 	dw SentAllToMomText
@@ -2631,7 +2632,7 @@
 ; 3d0b1
 
 
-Function3d0b1: ; 3d0b1
+.CheckMaxedOutMomMoney: ; 3d0b1
 	ld hl, wMomsMoney + 2
 	ld a, [hld]
 	cp 999999 % $100
@@ -2642,7 +2643,7 @@
 	ret
 ; 3d0be
 
-Function3d0be: ; 3d0be
+AddBattleMoneyToAccount: ; 3d0be
 	ld c, $3
 	and a
 	push de
@@ -2653,7 +2654,7 @@
 	callba MobileFn_106008
 	pop bc
 	pop hl
-.asm_3d0ce
+.loop
 	ld a, [de]
 	adc [hl]
 	ld [de], a
@@ -2660,7 +2661,7 @@
 	dec de
 	dec hl
 	dec c
-	jr nz, .asm_3d0ce
+	jr nz, .loop
 	pop hl
 	ld a, [hld]
 	cp 999999 % $100
@@ -2813,10 +2814,10 @@
 	and a
 	ret nz
 	ld a, $1
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	call Function3cf4a
 	jp z, WildFled_EnemyFled_LinkBattleCanceled
-	jp Function3cdca
+	jp DoubleSwitch
 ; 3d1aa
 
 PlayerMonFaintHappinessMod: ; 3d1aa
@@ -2823,7 +2824,7 @@
 	ld a, [CurBattleMon]
 	ld c, a
 	ld hl, wBattleParticipantsNotFainted
-	ld b, $0
+	ld b, RESET_FLAG
 	predef FlagPredef
 	ld hl, EnemySubStatus3
 	res SUBSTATUS_IN_LOOP, [hl]
@@ -2896,12 +2897,12 @@
 	and a
 	jr z, .skip_link
 	ld a, $1
-	ld [wd0ec], a
-	call Function3e8e4
+	ld [wPlayerAction], a
+	call LinkBattleSendReceiveAction
 
 .skip_link
 	xor a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	call CheckMobileBattleError
 	jr c, .enemy_fainted_mobile_error
 	ld hl, EnemyMonHP
@@ -2916,7 +2917,7 @@
 	call ExitMenu
 	call LoadTileMapToTempTileMap
 	call WaitBGMap
-	call ClearSGB
+	call GetMemSGBLayout
 	call SetPalettes
 	xor a
 	ld c, a
@@ -2935,7 +2936,7 @@
 	call DelayFrame
 	call _LoadHPBar
 	call WriteBackup
-	call ClearSGB
+	call GetMemSGBLayout
 	call SetPalettes
 	call SendOutPkmnText
 	call NewBattleMonStatus
@@ -2997,10 +2998,10 @@
 Function3d2f7: ; 3d2f7
 	call ClearBGPalettes
 Function3d2fa: ; switch to fullscreen menu?
-	callba Function5004f
-	callba Function50405
+	callba LoadPartyMenuGFX
+	callba InitPartyMenuWithCancel
 	callba Function8e85
-	callba Function503e0
+	callba InitPartyMenuGFX
 	ret
 ; 3d313
 
@@ -3146,7 +3147,7 @@
 	jr nz, .LostLinkBattle
 
 ; Greyscale
-	ld b, 0
+	ld b, SCGB_00
 	call GetSGBLayout
 	call SetPalettes
 	jr .end
@@ -3344,7 +3345,7 @@
 	xor a
 	ld [wBattleParticipantsNotFainted], a
 	ld [wc6fc], a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	inc a
 	ld [wEnemyIsSwitching], a
 	call LoadTileMapToTempTileMap
@@ -3938,9 +3939,9 @@
 	jp .can_escape
 
 .no_flee_item
-	ld a, [wd267]
+	ld a, [wNumFleeAttempts]
 	inc a
-	ld [wd267], a
+	ld [wNumFleeAttempts], a
 	ld a, [hli]
 	ld [hStringCmpString2 + 0], a
 	ld a, [hl]
@@ -3981,12 +3982,12 @@
 	ld a, [hQuotient + 1]
 	and a
 	jr nz, .can_escape
-	ld a, [wd267]
+	ld a, [wNumFleeAttempts]
 	ld c, a
 .loop
 	dec c
 	jr z, .cant_escape_2
-	ld b, $1e
+	ld b, 30
 	ld a, [hQuotient + 2]
 	add b
 	ld [hQuotient + 2], a
@@ -4000,7 +4001,7 @@
 	cp b
 	jr nc, .can_escape
 	ld a, $1
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ld hl, BattleText_CantEscape2
 	jr .print_inescapable_text
 
@@ -4014,7 +4015,7 @@
 .print_inescapable_text
 	call StdBattleTextBox
 	ld a, $1
-	ld [wd266], a
+	ld [wFailedToFlee], a
 	call LoadTileMapToTempTileMap
 	and a
 	ret
@@ -4026,12 +4027,12 @@
 	jr z, .fled
 	call LoadTileMapToTempTileMap
 	xor a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ld a, $f
 	ld [CurMoveNum], a
 	xor a
 	ld [CurPlayerMove], a
-	call Function3e8e4
+	call LinkBattleSendReceiveAction
 	call Call_LoadTempTileMapToTileMap
 	call CheckMobileBattleError
 	jr c, .mobile
@@ -4886,7 +4887,7 @@
 
 UpdatePlayerHPPal: ; 3df98
 	ld hl, PlayerHPPal
-	jp Function3e12e
+	jp UpdateHPPal
 ; 3df9e
 
 CheckDanger: ; 3df9e
@@ -4917,7 +4918,7 @@
 PrintPlayerHUD: ; 3dfbf
 	ld de, BattleMonNick
 	hlcoord 10, 7
-	call Function3e138
+	call ret_3e138
 	call PlaceString
 
 	push bc
@@ -5005,7 +5006,7 @@
 	call GetBaseData
 	ld de, EnemyMonNick
 	hlcoord 1, 0
-	call Function3e138
+	call ret_3e138
 	call PlaceString
 	ld h, b
 	ld l, c
@@ -5028,12 +5029,12 @@
 	ld [MonType], a
 	callab GetGender
 	ld a, " "
-	jr c, .asm_3e09a
+	jr c, .got_gender
 	ld a, "♂"
-	jr nz, .asm_3e09a
+	jr nz, .got_gender
 	ld a, "♀"
 
-.asm_3e09a
+.got_gender
 	hlcoord 9, 1
 	ld [hl], a
 
@@ -5044,16 +5045,16 @@
 	predef PlaceNonFaintStatus
 	pop hl
 	pop bc
-	jr nz, .asm_3e0be
+	jr nz, .skip_level
 	ld a, b
 	cp " "
-	jr nz, .asm_3e0b5
+	jr nz, .print_level
 	dec hl
-.asm_3e0b5
+.print_level
 	ld a, [EnemyMonLevel]
 	ld [TempMonLevel], a
 	call PrintLevel
-.asm_3e0be
+.skip_level
 
 	ld hl, EnemyMonHP
 	ld a, [hli]
@@ -5061,14 +5062,14 @@
 	ld a, [hld]
 	ld [hMultiplicand + 2], a
 	or [hl]
-	jr nz, .asm_3e0d1
+	jr nz, .not_fainted
 
 	ld c, a
 	ld e, a
 	ld d, HP_BAR_LENGTH
-	jp .asm_3e11a
+	jp .draw_bar
 
-.asm_3e0d1
+.not_fainted
 	xor a
 	ld [hMultiplicand], a
 	ld a, HP_BAR_LENGTH_PX
@@ -5081,7 +5082,7 @@
 	ld [hMultiplier], a
 	ld a, b
 	and a
-	jr z, .asm_3e105
+	jr z, .less_than_256_max
 	ld a, [hMultiplier]
 	srl b
 	rr a
@@ -5099,12 +5100,12 @@
 	ld a, b
 	ld [hProduct + 2], a
 
-.asm_3e105
+.less_than_256_max
 	ld a, [hProduct + 2]
 	ld [hDividend + 0], a
 	ld a, [hProduct + 3]
 	ld [hDividend + 1], a
-	ld a, $2
+	ld a, 2
 	ld b, a
 	call Divide
 	ld a, [hQuotient + 2]
@@ -5113,7 +5114,7 @@
 	ld d, a
 	ld c, a
 
-.asm_3e11a
+.draw_bar
 	xor a
 	ld [wd10a], a
 	hlcoord 2, 2
@@ -5124,11 +5125,11 @@
 
 UpdateEnemyHPPal: ; 3e127
 	ld hl, EnemyHPPal
-	call Function3e12e
+	call UpdateHPPal
 	ret
 ; 3e12e
 
-Function3e12e: ; 3e12e
+UpdateHPPal: ; 3e12e
 	ld b, [hl]
 	call SetHPPal
 	ld a, [hl]
@@ -5137,7 +5138,7 @@
 	jp FinishBattleAnim
 ; 3e138
 
-Function3e138: ; 3e138
+ret_3e138: ; 3e138
 	ret
 ; 3e139
 
@@ -5192,7 +5193,7 @@
 
 BattleMenu_Fight: ; 3e192
 	xor a
-	ld [wd267], a
+	ld [wNumFleeAttempts], a
 	call Call_LoadTempTileMapToTileMap
 	and a
 	ret
@@ -5242,13 +5243,13 @@
 	jr z, .contest
 
 	callba BattlePack
-	ld a, [wd0ec]
+	ld a, [wPlayerAction]
 	and a
 	jr z, .didnt_use_item
 	jr .got_item
 
 .tutorial
-	callba Function107bb
+	callba TutorialPack
 	ld a, POKE_BALL
 	ld [CurItem], a
 	call DoItemEffect
@@ -5372,7 +5373,7 @@
 	call _LoadHPBar
 	call WriteBackup
 	call LoadTileMapToTempTileMap
-	call ClearSGB
+	call GetMemSGBLayout
 	call SetPalettes
 	jp BattleMenu
 ; 3e2f5
@@ -5448,13 +5449,13 @@
 	ld a, [CurBattleMon]
 	ld [LastPlayerMon], a
 	ld a, $2
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	call ClearPalettes
 	call DelayFrame
 	call ClearSprites
 	call _LoadHPBar
 	call WriteBackup
-	call ClearSGB
+	call GetMemSGBLayout
 	call SetPalettes
 	ld a, [CurPartyMon]
 	ld [CurBattleMon], a
@@ -5468,7 +5469,7 @@
 	and a
 	jr z, .not_linked
 	call LoadStandardMenuDataHeader
-	call Function3e8e4
+	call LinkBattleSendReceiveAction
 	call WriteBackup
 
 .not_linked
@@ -5585,9 +5586,9 @@
 	ld de, EnemyMonSpeed
 	call TryToRunAwayFromBattle
 	ld a, $0
-	ld [wd266], a
+	ld [wFailedToFlee], a
 	ret c
-	ld a, [wd0ec]
+	ld a, [wPlayerAction]
 	and a
 	ret nz
 	jp BattleMenu
@@ -5602,33 +5603,33 @@
 	cp HELD_AMULET_COIN
 	ret nz
 	ld a, 1
-	ld [wc73d], a
+	ld [wAmuletCoin], a
 	ret
 ; 3e4bc
 
 MoveSelectionScreen: ; 3e4bc
 	call IsMobileBattle
-	jr nz, .asm_3e4c8
-	callba Function100b9f
+	jr nz, .not_mobile
+	callba MobileMoveSelectionScreen
 	ret
 
-.asm_3e4c8
+.not_mobile
 	ld hl, EnemyMonMoves
-	ld a, [wd235]
+	ld a, [wMoveSelectionMenuType]
 	dec a
-	jr z, .asm_3e4e2
+	jr z, .got_menu_type
 	dec a
-	jr z, .asm_3e4dd
-	call Function3e786
-	ret z
+	jr z, .ether_elixer_menu
+	call CheckPlayerHasUsableMoves
+	ret z ; use Struggle
 	ld hl, BattleMonMoves
-	jr .asm_3e4e2
+	jr .got_menu_type
 
-.asm_3e4dd
+.ether_elixer_menu
 	ld a, MON_MOVES
 	call GetPartyParamLocation
 
-.asm_3e4e2
+.got_menu_type
 	ld de, wListMoves_MoveIndicesBuffer
 	ld bc, NUM_MOVES
 	call CopyBytes
@@ -5638,44 +5639,44 @@
 	hlcoord 4, 17 - NUM_MOVES - 1
 	ld b, 4
 	ld c, 14
-	ld a, [wd235]
+	ld a, [wMoveSelectionMenuType]
 	cp $2
-	jr nz, .asm_3e503
+	jr nz, .got_dims
 	hlcoord 4, 17 - NUM_MOVES - 1 - 4
 	ld b, 4
 	ld c, 14
-.asm_3e503
+.got_dims
 	call TextBox
 
 	hlcoord 6, 17 - NUM_MOVES
-	ld a, [wd235]
+	ld a, [wMoveSelectionMenuType]
 	cp $2
-	jr nz, .asm_3e513
+	jr nz, .got_start_coord
 	hlcoord 6, 17 - NUM_MOVES - 4
-.asm_3e513
+.got_start_coord
 	ld a, SCREEN_WIDTH
 	ld [Buffer1], a
 	predef ListMoves
 
 	ld b, 5
-	ld a, [wd235]
+	ld a, [wMoveSelectionMenuType]
 	cp $2
 	ld a, 17 - NUM_MOVES
-	jr nz, .asm_3e52c
+	jr nz, .got_default_coord
 	ld b, 5
 	ld a, 17 - NUM_MOVES - 4
 
-.asm_3e52c
+.got_default_coord
 	ld [wcfa1], a
 	ld a, b
 	ld [wcfa2], a
-	ld a, [wd235]
+	ld a, [wMoveSelectionMenuType]
 	cp $1
-	jr z, .asm_3e53e
+	jr z, .skip_inc
 	ld a, [CurMoveNum]
 	inc a
 
-.asm_3e53e
+.skip_inc
 	ld [MenuSelection2], a
 	ld a, $1
 	ld [wcfaa], a
@@ -5685,19 +5686,19 @@
 	ld a, $1
 	ld [wcfa4], a
 	ld c, $2c
-	ld a, [wd235]
+	ld a, [wMoveSelectionMenuType]
 	dec a
 	ld b, $c1
-	jr z, .asm_3e569
+	jr z, .okay
 	dec a
 	ld b, $c3
-	jr z, .asm_3e569
+	jr z, .okay
 	ld a, [wLinkMode]
 	and a
-	jr nz, .asm_3e569
+	jr nz, .okay
 	ld b, $c7
 
-.asm_3e569
+.okay
 	ld a, b
 	ld [wcfa8], a
 	ld a, c
@@ -5706,22 +5707,22 @@
 	ld [wcfa6], a
 	ld a, $10
 	ld [wcfa7], a
-.asm_3e57a
-	ld a, [wd235]
+.menu_loop
+	ld a, [wMoveSelectionMenuType]
 	and a
-	jr z, .asm_3e58e
+	jr z, .battle_player_moves
 	dec a
-	jr nz, .asm_3e5a3
+	jr nz, .interpret_joypad
 	hlcoord 11, 14
 	ld de, .string_3e61c
 	call PlaceString
-	jr .asm_3e5a3
+	jr .interpret_joypad
 
-.asm_3e58e
+.battle_player_moves
 	call MoveInfoBox
-	ld a, [wd0e3]
+	ld a, [wMoveSwapBuffer]
 	and a
-	jr z, .asm_3e5a3
+	jr z, .interpret_joypad
 	hlcoord 5, 13
 	ld bc, SCREEN_WIDTH
 	dec a
@@ -5728,42 +5729,42 @@
 	call AddNTimes
 	ld [hl], "▷"
 
-.asm_3e5a3
+.interpret_joypad
 	ld a, $1
 	ld [hBGMapMode], a
 	call Function1bd3
-	bit 6, a ; D_UP
-	jp nz, .asm_3e61d
-	bit 7, a ; D_DOWN
-	jp nz, .asm_3e62e
-	bit 2, a ; B_BUTTON
-	jp nz, .asm_3e643
-	bit 1, a ; A_BUTTON
+	bit D_UP_F, a
+	jp nz, .pressed_up
+	bit D_DOWN_F, a
+	jp nz, .pressed_down
+	bit SELECT_F, a
+	jp nz, .pressed_select
+	bit B_BUTTON_F, a
 	push af
 
 	xor a
-	ld [wd0e3], a
+	ld [wMoveSwapBuffer], a
 	ld a, [MenuSelection2]
 	dec a
 	ld [MenuSelection2], a
 	ld b, a
-	ld a, [wd235]
+	ld a, [wMoveSelectionMenuType]
 	dec a
-	jr nz, .asm_3e5d0
+	jr nz, .not_enemy_moves_process_b
 
 	pop af
 	ret
 
-.asm_3e5d0
+.not_enemy_moves_process_b
 	dec a
 	ld a, b
 	ld [CurMoveNum], a
-	jr nz, .asm_3e5d9
+	jr nz, .use_move
 
 	pop af
 	ret
 
-.asm_3e5d9
+.use_move
 	pop af
 	ret nz
 
@@ -5774,16 +5775,16 @@
 	add hl, bc
 	ld a, [hl]
 	and $3f
-	jr z, .asm_3e610
+	jr z, .no_pp_left
 	ld a, [PlayerDisableCount]
 	swap a
 	and $f
 	dec a
 	cp c
-	jr z, .asm_3e60b
+	jr z, .move_disabled
 	ld a, [wc6e1]
 	and a
-	jr nz, .asm_3e606
+	jr nz, .skip2
 	ld a, [MenuSelection2]
 	ld hl, BattleMonMoves
 	ld c, a
@@ -5791,19 +5792,19 @@
 	add hl, bc
 	ld a, [hl]
 
-.asm_3e606
+.skip2
 	ld [CurPlayerMove], a
 	xor a
 	ret
 
-.asm_3e60b
+.move_disabled
 	ld hl, BattleText_TheMoveIsDisabled
-	jr .asm_3e613
+	jr .place_textbox_start_over
 
-.asm_3e610
+.no_pp_left
 	ld hl, BattleText_TheresNoPPLeftForThisMove
 
-.asm_3e613
+.place_textbox_start_over
 	call StdBattleTextBox
 	call Call_LoadTempTileMapToTileMap
 	jp MoveSelectionScreen
@@ -5813,17 +5814,17 @@
 	db "@"
 ; 3e61d
 
-.asm_3e61d
+.pressed_up
 	ld a, [MenuSelection2]
 	and a
-	jp nz, .asm_3e57a
+	jp nz, .menu_loop
 	ld a, [wd0eb]
 	inc a
 	ld [MenuSelection2], a
-	jp .asm_3e57a
+	jp .menu_loop
 ; 3e62e
 
-.asm_3e62e ; 3e62e
+.pressed_down ; 3e62e
 	ld a, [MenuSelection2]
 	ld b, a
 	ld a, [wd0eb]
@@ -5831,20 +5832,20 @@
 	inc a
 endr
 	cp b
-	jp nz, .asm_3e57a
+	jp nz, .menu_loop
 	ld a, $1
 	ld [MenuSelection2], a
-	jp .asm_3e57a
+	jp .menu_loop
 ; 3e643
 
-.asm_3e643 ; 3e643
-	ld a, [wd0e3]
+.pressed_select ; 3e643
+	ld a, [wMoveSwapBuffer]
 	and a
-	jr z, .asm_3e6bf
+	jr z, .start_swap
 	ld hl, BattleMonMoves
-	call .asm_3e6a5
+	call .swap_bytes
 	ld hl, BattleMonPP
-	call .asm_3e6a5
+	call .swap_bytes
 	ld hl, PlayerDisableCount
 	ld a, [hl]
 	swap a
@@ -5852,20 +5853,20 @@
 	ld b, a
 	ld a, [MenuSelection2]
 	cp b
-	jr nz, .asm_3e671
+	jr nz, .not_swapping_disabled_move
 	ld a, [hl]
 	and $f
 	ld b, a
-	ld a, [wd0e3]
+	ld a, [wMoveSwapBuffer]
 	swap a
 	add b
 	ld [hl], a
-	jr .asm_3e682
+	jr .swap_moves_in_party_struct
 
-.asm_3e671
-	ld a, [wd0e3]
+.not_swapping_disabled_move
+	ld a, [wMoveSwapBuffer]
 	cp b
-	jr nz, .asm_3e682
+	jr nz, .swap_moves_in_party_struct
 	ld a, [hl]
 	and $f
 	ld b, a
@@ -5874,28 +5875,29 @@
 	add b
 	ld [hl], a
 
-.asm_3e682
+.swap_moves_in_party_struct
+; Fixes the COOLTRAINER glitch
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_TRANSFORMED, a
-	jr nz, .asm_3e69e
+	jr nz, .transformed
 	ld hl, PartyMon1Moves
 	ld a, [CurBattleMon]
 	call GetPartyLocation
 	push hl
-	call .asm_3e6a5
+	call .swap_bytes
 	pop hl
 	ld bc, MON_PP - MON_MOVES
 	add hl, bc
-	call .asm_3e6a5
+	call .swap_bytes
 
-.asm_3e69e
+.transformed
 	xor a
-	ld [wd0e3], a
+	ld [wMoveSwapBuffer], a
 	jp MoveSelectionScreen
 
-.asm_3e6a5
+.swap_bytes
 	push hl
-	ld a, [wd0e3]
+	ld a, [wMoveSwapBuffer]
 	dec a
 	ld c, a
 	ld b, 0
@@ -5915,9 +5917,9 @@
 	ld [de], a
 	ret
 
-.asm_3e6bf
+.start_swap
 	ld a, [MenuSelection2]
-	ld [wd0e3], a
+	ld [wMoveSwapBuffer], a
 	jp MoveSelectionScreen
 ; 3e6c8
 
@@ -5933,7 +5935,7 @@
 
 	ld a, [PlayerDisableCount]
 	and a
-	jr z, .asm_3e6f4
+	jr z, .not_disabled
 
 	swap a
 	and $f
@@ -5940,7 +5942,7 @@
 	ld b, a
 	ld a, [MenuSelection2]
 	cp b
-	jr nz, .asm_3e6f4
+	jr nz, .not_disabled
 
 	hlcoord 1, 10
 	ld de, .Disabled
@@ -5947,7 +5949,7 @@
 	call PlaceString
 	jr .done
 
-.asm_3e6f4
+.not_disabled
 	ld hl, MenuSelection2
 	dec [hl]
 	call SetPlayerTurn
@@ -5974,7 +5976,7 @@
 	ld a, [hl]
 	and $3f
 	ld [StringBuffer1], a
-	call Function3e75f
+	call .PrintPP
 
 	hlcoord 1, 9
 	ld de, .Type
@@ -6000,7 +6002,7 @@
 ; 3e75f
 
 
-Function3e75f: ; 3e75f
+.PrintPP: ; 3e75f
 	hlcoord 5, 11
 	ld a, [wLinkMode] ; What's the point of this check?
 	cp LINK_MOBILE
@@ -6023,13 +6025,13 @@
 	ret
 ; 3e786
 
-Function3e786: ; 3e786
+CheckPlayerHasUsableMoves: ; 3e786
 	ld a, STRUGGLE
 	ld [CurPlayerMove], a
 	ld a, [PlayerDisableCount]
 	and a
 	ld hl, BattleMonPP
-	jr nz, .asm_3e79f
+	jr nz, .disabled
 
 	ld a, [hli]
 	or [hl]
@@ -6039,29 +6041,29 @@
 	or [hl]
 	and $3f
 	ret nz
-	jr .asm_3e7b4
+	jr .force_struggle
 
-.asm_3e79f
+.disabled
 	swap a
 	and $f
 	ld b, a
 	ld d, $5
 	xor a
-.asm_3e7a7
+.loop
 	dec d
-	jr z, .asm_3e7b2
+	jr z, .done
 	ld c, [hl]
 	inc hl
 	dec b
-	jr z, .asm_3e7a7
+	jr z, .loop
 	or c
-	jr .asm_3e7a7
+	jr .loop
 
-.asm_3e7b2
+.done
 	and a
 	ret nz
 
-.asm_3e7b4
+.force_struggle
 	ld hl, BattleText_PkmnHasNoMovesLeft
 	call StdBattleTextBox
 	ld c, 60
@@ -6081,9 +6083,9 @@
 	jr z, .not_linked
 	call EmptyBattleTextBox
 	call LoadTileMapToTempTileMap
-	ld a, [wd0ec]
+	ld a, [wPlayerAction]
 	and a
-	call z, Function3e8e4
+	call z, LinkBattleSendReceiveAction
 	call Call_LoadTempTileMapToTileMap
 	ld a, [wBattleAction]
 	cp BATTLEACTION_E
@@ -6247,8 +6249,8 @@
 	ret
 ; 3e8e4
 
-Function3e8e4: ; 3e8e4
-	callba Function100a09
+LinkBattleSendReceiveAction: ; 3e8e4
+	callba _LinkBattleSendReceiveAction
 	ret
 ; 3e8eb
 
@@ -6569,13 +6571,13 @@
 	xor a
 	ld [hli], a
 
-; Full HP...
+; Full HP..
 	ld a, [EnemyMonMaxHP]
 	ld [hli], a
 	ld a, [EnemyMonMaxHP + 1]
 	ld [hl], a
 
-; ...unless it's a RoamMon
+; ..unless it's a RoamMon
 	ld a, [BattleType]
 	cp a, BATTLETYPE_ROAMING
 	jr nz, .Moves
@@ -6678,7 +6680,7 @@
 	call CopyBytes
 
 .Finish
-; Only the first five base stats are copied...
+; Only the first five base stats are copied..
 	ld hl, BaseStats
 	ld de, EnemyMonBaseStats
 	ld b, BaseSpecialDefense - BaseStats
@@ -6716,7 +6718,7 @@
 	ld a, [TempEnemyMonSpecies]
 	dec a
 	ld c, a
-	ld b, 1 ; set
+	ld b, SET_FLAG
 	ld hl, PokedexSeen
 	predef FlagPredef
 
@@ -7375,7 +7377,7 @@
 	push bc
 	push de
 	push hl
-	ld b, $1
+	ld b, SCGB_01
 	call GetSGBLayout
 	call SetPalettes
 	call DelayFrame
@@ -7741,7 +7743,7 @@
 	ld hl, EvolvableFlags
 	ld a, [CurPartyMon]
 	ld c, a
-	ld b, $1
+	ld b, SET_FLAG
 	predef FlagPredef
 	pop af
 	ld [CurPartyLevel], a
@@ -8450,7 +8452,7 @@
 	ld hl, EnemyMonDVs
 	predef GetUnownLetter
 	ld de, VTiles2
-	predef Function5108b
+	predef FrontpicPredef
 	pop af
 	ld [CurPartySpecies], a
 	ret
@@ -8510,7 +8512,7 @@
 	callba ClearBattleRAM
 	call InitEnemy
 	call BackUpVBGMap2
-	ld b, $0
+	ld b, SCGB_00
 	call GetSGBLayout
 	ld hl, rLCDC
 	res 6, [hl]
@@ -8569,7 +8571,7 @@
 	ld a, $1
 	ld [rVBK], a
 	ld de, w6_d000
-	ld hl, VBGMap0 ; VBGMap2
+	hlbgcoord 0, 0 ; VBGMap2
 	lb bc, BANK(BackUpVBGMap2), $40
 	call Request2bpp
 	pop af
@@ -8659,7 +8661,7 @@
 	ld [wdef4], a
 .skip_unown
 	ld de, VTiles2
-	predef Function5108b
+	predef FrontpicPredef
 	xor a
 	ld [TrainerClass], a
 	ld [hFillBox], a
@@ -8745,7 +8747,7 @@
 	call CheckPayDay
 	xor a
 	ld [wd1e9], a
-	predef Function421e6
+	predef EvolveAfterBattle
 	callba Function2ed44
 	ret
 ; 3f6d0
@@ -8759,8 +8761,8 @@
 	ld [AttackMissed], a
 	ld [TempWildMonSpecies], a
 	ld [OtherTrainerClass], a
-	ld [wd266], a
-	ld [wd267], a
+	ld [wFailedToFlee], a
+	ld [wNumFleeAttempts], a
 	ld [wForcedSwitch], a
 	ld [wd0d8], a
 	ld [wKeyItemsPocketCursor], a
@@ -8768,13 +8770,13 @@
 	ld [wd0d2], a
 	ld [CurMoveNum], a
 	ld [wBallsPocketCursor], a
-	ld [wd0d6], a
-	ld [wd0e4], a
-	ld [wd0e0], a
-	ld [wd0df], a
-	ld [wd0e1], a
+	ld [wLastPocket], a
+	ld [wMenuScrollPosition], a
+	ld [wKeyItemsPocketScrollPosition], a
+	ld [wItemsPocketScrollPosition], a
+	ld [wBallsPocketScrollPosition], a
 	ld hl, PlayerSubStatus1
-	ld b, $18
+	ld b, EnemyFuryCutterCount - PlayerSubStatus1
 .loop
 	ld [hli], a
 	dec b
@@ -8790,7 +8792,7 @@
 	inc hl
 	or [hl]
 	ret z
-	ld a, [wc73d]
+	ld a, [wAmuletCoin]
 	and a
 	jr z, .okay
 	ld hl, wPayDayMoney + 2
@@ -8809,7 +8811,7 @@
 .okay
 	ld hl, wPayDayMoney + 2
 	ld de, Money + 2
-	call Function3d0be
+	call AddBattleMoneyToAccount
 	ld hl, BattleText_PlayerPickuedUpPayDayMoney
 	call StdBattleTextBox
 	ld a, [InBattleTowerBattle]
@@ -8924,7 +8926,7 @@
 ; 3f836
 
 
-Function3f836: ; 3f836
+DisplayLinkRecord: ; 3f836
 	ld a, BANK(sLinkBattleStats)
 	call GetSRAMBank
 
@@ -8936,7 +8938,7 @@
 	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
 	call ByteFill
 	call Function3200
-	ld b, $8
+	ld b, SCGB_08
 	call GetSGBLayout
 	call SetPalettes
 	ld c, $8
@@ -9438,7 +9440,7 @@
 	ld [rWY], a
 	call WaitBGMap
 	call HideSprites
-	ld b, $1
+	ld b, SCGB_01
 	call GetSGBLayout
 	call SetPalettes
 	ld a, $90
@@ -9460,7 +9462,7 @@
 	call ByteFill
 
 	ld de, w6_d000
-	ld hl, VBGMap0
+	hlbgcoord 0, 0
 	lb bc, BANK(.BlankBGMap), $40
 	call Request2bpp
 
@@ -9488,7 +9490,7 @@
 
 ; What gender are we?
 	ld a, [wPlayerSpriteSetupFlags]
-	bit 2, a
+	bit 2, a ; transformed to male
 	jr nz, .Chris
 	ld a, [PlayerGender]
 	bit 0, a
--- a/battle/effect_commands.asm
+++ b/battle/effect_commands.asm
@@ -8966,7 +8966,7 @@
 	hlcoord 1, 0
 	lb bc, 4, 10
 	call ClearBox
-	ld b, 1
+	ld b, SCGB_01
 	call GetSGBLayout
 	call SetPalettes
 	call BatonPass_LinkPlayerSwitch
@@ -9028,7 +9028,7 @@
 	ld [wd0ec], a
 
 	call LoadStandardMenuDataHeader
-	ld hl, Function3e8e4
+	ld hl, LinkBattleSendReceiveAction
 	call CallBattleCore
 	call WriteBackup
 
@@ -9044,7 +9044,7 @@
 	ret z
 
 	call LoadStandardMenuDataHeader
-	ld hl, Function3e8e4
+	ld hl, LinkBattleSendReceiveAction
 	call CallBattleCore
 
 	ld a, [OTPartyCount]
--- /dev/null
+++ b/battle/used_move_text.asm
@@ -1,0 +1,349 @@
+DisplayUsedMoveText: ; 105db0
+; battle command 03
+	ld hl, UsedMoveText
+	call BattleTextBox
+	jp WaitBGMap
+; 105db9
+
+
+UsedMoveText: ; 105db9
+; this is a stream of text and asm from 105db9 to 105ef6
+
+	text_jump _ActorNameText
+	start_asm
+
+	ld a, [hBattleTurn]
+	and a
+	jr nz, .start
+
+	ld a, [wPlayerMoveStruct + MOVE_ANIM]
+	call UpdateUsedMoves
+
+.start
+	ld a, BATTLE_VARS_LAST_MOVE
+	call GetBattleVarAddr
+	ld d, h
+	ld e, l
+
+	ld a, BATTLE_VARS_LAST_COUNTER_MOVE
+	call GetBattleVarAddr
+
+	ld a, BATTLE_VARS_MOVE_ANIM
+	call GetBattleVar
+	ld [wd265], a
+
+	push hl
+	callba CheckUserIsCharging
+	pop hl
+	jr nz, .grammar
+
+	; update last move
+	ld a, [wd265]
+	ld [hl], a
+	ld [de], a
+
+.grammar
+	call GetMoveGrammar
+; wd265 now contains MoveGrammar
+
+
+; everything except 'instead' made redundant in localization
+
+	; check obedience
+	ld a, [AlreadyDisobeyed]
+	and a
+	ld hl, UsedMove2Text
+	ret nz
+
+	; check move grammar
+	ld a, [wd265]
+	cp $3
+	ld hl, UsedMove2Text
+	ret c
+	ld hl, UsedMove1Text
+	ret
+; 105e04
+
+UsedMove1Text: ; 105e04
+	text_jump _UsedMove1Text
+	start_asm
+	jr Function105e10
+; 105e0b
+
+UsedMove2Text: ; 105e0b
+	text_jump _UsedMove2Text
+	start_asm
+; 105e10
+
+Function105e10: ; 105e10
+; check obedience
+	ld a, [AlreadyDisobeyed]
+	and a
+	jr z, GetMoveNameText
+; print "instead,"
+	ld hl, UsedInsteadText
+	ret
+; 105e1a
+
+UsedInsteadText: ; 105e1a
+	text_jump _UsedInsteadText
+	start_asm
+; 105e1f
+
+GetMoveNameText: ; 105e1f
+	ld hl, MoveNameText
+	ret
+; 105e23
+
+MoveNameText: ; 105e23
+	text_jump _MoveNameText
+	start_asm
+; 105e28
+
+GetUsedMoveTextEnder: ; 105e28
+; get start address
+	ld hl, .endusedmovetexts
+
+; get move id
+	ld a, [wd265]
+
+; 2-byte pointer
+	add a
+
+; seek
+	push bc
+	ld b, $0
+	ld c, a
+	add hl, bc
+	pop bc
+
+; get pointer to usedmovetext ender
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ret
+; 105e39
+
+.endusedmovetexts ; 105e39
+	dw EndUsedMove1Text
+	dw EndUsedMove2Text
+	dw EndUsedMove3Text
+	dw EndUsedMove4Text
+	dw EndUsedMove5Text
+; 105e43
+
+EndUsedMove1Text: ; 105e43
+	text_jump _EndUsedMove1Text
+	db "@"
+; 105e48
+EndUsedMove2Text: ; 105e48
+	text_jump _EndUsedMove2Text
+	db "@"
+; 105e4d
+EndUsedMove3Text: ; 105e4d
+	text_jump _EndUsedMove3Text
+	db "@"
+; 105e52
+EndUsedMove4Text: ; 105e52
+	text_jump _EndUsedMove4Text
+	db "@"
+; 105e57
+EndUsedMove5Text: ; 105e57
+	text_jump _EndUsedMove5Text
+	db "@"
+; 105e5c
+
+
+GetMoveGrammar: ; 105e5c
+; store move grammar type in wd265
+
+	push bc
+; c = move id
+	ld a, [wd265]
+	ld c, a
+	ld b, $0
+
+; read grammar table
+	ld hl, MoveGrammar
+.loop
+	ld a, [hli]
+; end of table?
+	cp $ff
+	jr z, .end
+; match?
+	cp c
+	jr z, .end
+; advance grammar type at $00
+	and a
+	jr nz, .loop
+; next grammar type
+	inc b
+	jr .loop
+
+.end
+; wd265 now contains move grammar
+	ld a, b
+	ld [wd265], a
+
+; we're done
+	pop bc
+	ret
+; 105e7a
+
+MoveGrammar: ; 105e7a
+; made redundant in localization
+; each move is given an identifier for what usedmovetext to use (0-4):
+
+; 0
+	db SWORDS_DANCE
+	db GROWTH
+	db STRENGTH
+	db HARDEN
+	db MINIMIZE
+	db SMOKESCREEN
+	db WITHDRAW
+	db DEFENSE_CURL
+	db EGG_BOMB
+	db SMOG
+	db BONE_CLUB
+	db FLASH
+	db SPLASH
+	db ACID_ARMOR
+	db BONEMERANG
+	db REST
+	db SHARPEN
+	db SUBSTITUTE
+	db MIND_READER
+	db SNORE
+	db PROTECT
+	db SPIKES
+	db ENDURE
+	db ROLLOUT
+	db SWAGGER
+	db SLEEP_TALK
+	db HIDDEN_POWER
+	db PSYCH_UP
+	db EXTREMESPEED
+	db 0 ; end set
+
+; 1
+	db RECOVER
+	db TELEPORT
+	db BIDE
+	db SELFDESTRUCT
+	db AMNESIA
+	db FLAIL
+	db 0 ; end set
+
+; 2
+	db MEDITATE
+	db AGILITY
+	db MIMIC
+	db DOUBLE_TEAM
+	db BARRAGE
+	db TRANSFORM
+	db STRUGGLE
+	db SCARY_FACE
+	db 0 ; end set
+
+; 3
+	db POUND
+	db SCRATCH
+	db VICEGRIP
+	db WING_ATTACK
+	db FLY
+	db BIND
+	db SLAM
+	db HORN_ATTACK
+	db WRAP
+	db THRASH
+	db TAIL_WHIP
+	db LEER
+	db BITE
+	db GROWL
+	db ROAR
+	db SING
+	db PECK
+	db ABSORB
+	db STRING_SHOT
+	db EARTHQUAKE
+	db FISSURE
+	db DIG
+	db TOXIC
+	db SCREECH
+	db METRONOME
+	db LICK
+	db CLAMP
+	db CONSTRICT
+	db POISON_GAS
+	db BUBBLE
+	db SLASH
+	db SPIDER_WEB
+	db NIGHTMARE
+	db CURSE
+	db FORESIGHT
+	db CHARM
+	db ATTRACT
+	db ROCK_SMASH
+	db 0 ; end set
+
+; all other moves = 4
+	db $ff ; end
+; 105ed0
+
+
+UpdateUsedMoves: ; 105ed0
+; append move a to PlayerUsedMoves unless it has already been used
+
+	push bc
+; start of list
+	ld hl, PlayerUsedMoves
+; get move id
+	ld b, a
+; next count
+	ld c, NUM_MOVES
+
+.loop
+; get move from the list
+	ld a, [hli]
+; not used yet?
+	and a
+	jr z, .add
+; already used?
+	cp b
+	jr z, .quit
+; next byte
+	dec c
+	jr nz, .loop
+
+; if the list is full and the move hasn't already been used
+; shift the list back one byte, deleting the first move used
+; this can occur with struggle or a new learned move
+	ld hl, PlayerUsedMoves + 1
+; 1 = 2
+	ld a, [hld]
+	ld [hli], a
+; 2 = 3
+	inc hl
+	ld a, [hld]
+	ld [hli], a
+; 3 = 4
+	inc hl
+	ld a, [hld]
+	ld [hl], a
+; 4 = new move
+	ld a, b
+	ld [PlayerUsedMoves + 3], a
+	jr .quit
+
+.add
+; go back to the byte we just inced from
+	dec hl
+; add the new move
+	ld [hl], b
+
+.quit
+; list updated
+	pop bc
+	ret
+; 105ef6
--- a/constants.asm
+++ b/constants.asm
@@ -28,4 +28,5 @@
 INCLUDE "constants/radio_constants.asm"
 INCLUDE "constants/sprite_constants.asm"
 INCLUDE "constants/tilemap_constants.asm"
+INCLUDE "constants/cgb_constants.asm"
 INCLUDE "constants/battle_tower_constants.asm"
--- /dev/null
+++ b/constants/cgb_constants.asm
@@ -1,0 +1,35 @@
+	const_def
+	const SCGB_00
+	const SCGB_01
+	const SCGB_02
+	const SCGB_03
+	const SCGB_04
+	const SCGB_05
+	const SCGB_06
+	const SCGB_07
+	const SCGB_08
+	const SCGB_09
+	const SCGB_0A
+	const SCGB_0B
+	const SCGB_0C
+	const SCGB_0D
+	const SCGB_0E
+	const SCGB_0F
+	const SCGB_10
+	const SCGB_11
+	const SCGB_12
+	const SCGB_13
+	const SCGB_14
+	const SCGB_15
+	const SCGB_16
+	const SCGB_17
+	const SCGB_18
+	const SCGB_19
+	const SCGB_1A
+	const SCGB_1B
+	const SCGB_1C
+	const SCGB_1D
+	const SCGB_1E
+
+SCGB_FC  EQU -4
+SCGB_RAM EQU -1
--- a/constants/deco_constants.asm
+++ b/constants/deco_constants.asm
@@ -52,12 +52,12 @@
 	const PUT_AWAY_ORNAMENT
 
 const_value = 1
-	const DECO_01
+	const DECO_BEDS
 	const DECO_FEATHERY_BED ; 2
 	const DECO_PINK_BED ; 3
 	const DECO_POLKADOT_BED ; 4
 	const DECO_PIKACHU_BED ; 5
-	const DECO_06
+	const DECO_CARPETS
 	const DECO_RED_CARPET ; 7
 	const DECO_BLUE_CARPET ; 8
 	const DECO_YELLOW_CARPET ; 9
@@ -66,21 +66,21 @@
 	const DECO_MAGNAPLANT ; c
 	const DECO_TROPICPLANT ; d
 	const DECO_JUMBOPLANT ; e
-	const DECO_0F
+	const DECO_POSTERS
 	const DECO_TOWN_MAP ; 10
 	const DECO_PIKACHU_POSTER ; 11
 	const DECO_CLEFAIRY_POSTER ; 12
 	const DECO_JIGGLYPUFF_POSTER ; 13
-	const DECO_14
+	const DECO_CONSOLES
 	const DECO_FAMICOM ; 15
 	const DECO_SNES ; 16
 	const DECO_N64 ; 17
 	const DECO_VIRTUAL_BOY ; 18
-	const DECO_19
+	const DECO_BIG_DOLLS
 	const DECO_BIG_SNORLAX_DOLL ; 1a
 	const DECO_BIG_ONIX_DOLL ; 1b
 	const DECO_BIG_LAPRAS_DOLL ; 1c
-	const DECO_1D
+	const DECO_DOLLS
 	const DECO_PIKACHU_DOLL ; 1e
 	const DECO_SURF_PIKACHU_DOLL ; 1f
 	const DECO_CLEFAIRY_DOLL ; 20
@@ -104,3 +104,6 @@
 	const DECO_TENTACOOL_DOLL ; 32
 	const DECO_GOLD_TROPHY_DOLL ; 33
 	const DECO_SILVER_TROPHY_DOLL ; 34
+
+NUM_NON_TROPHY_DECOS EQU $2b
+NUM_DECOS EQU $2d
--- a/constants/map_constants.asm
+++ b/constants/map_constants.asm
@@ -527,20 +527,20 @@
 	const OBJECT_PALETTE
 	const OBJECT_DIRECTION_WALKING
 	const OBJECT_FACING
-	const OBJECT_09
+	const OBJECT_STEP_TYPE
 	const OBJECT_STEP_DURATION
-	const OBJECT_11
-	const OBJECT_12
+	const OBJECT_ACTION
+	const OBJECT_STEP_FRAME
 	const OBJECT_FACING_STEP
-	const OBJECT_STANDING_TILE
 	const OBJECT_NEXT_TILE
-	const OBJECT_MAP_X
-	const OBJECT_MAP_Y
+	const OBJECT_STANDING_TILE
 	const OBJECT_NEXT_MAP_X
 	const OBJECT_NEXT_MAP_Y
-	const OBJECT_20
-	const OBJECT_21
-	const OBJECT_22
+	const OBJECT_MAP_X
+	const OBJECT_MAP_Y
+	const OBJECT_INIT_X
+	const OBJECT_INIT_Y
+	const OBJECT_RADIUS
 	const OBJECT_SPRITE_X
 	const OBJECT_SPRITE_Y
 	const OBJECT_SPRITE_X_OFFSET
@@ -550,7 +550,7 @@
 	const OBJECT_29
 	const OBJECT_30
 	const OBJECT_31
-	const OBJECT_32
+	const OBJECT_RANGE
 ; 33-39 are not used
 
 ; map object struct
@@ -590,9 +590,9 @@
 	const EMOTE_BOLT ; 5
 	const EMOTE_SLEEP ; 6
 	const EMOTE_FISH ; 7
-	const EMOTE_08 ; 8
-	const EMOTE_09 ; 9
-	const EMOTE_0A ; 10
+	const EMOTE_SHADOW ; 8
+	const EMOTE_ROD ; 9
+	const EMOTE_BOULDER_DUST ; 10
 	const EMOTE_0B ; 11
 EMOTE_MEM EQU -1
 
@@ -651,3 +651,58 @@
 	const PALETTE_NITE
 	const PALETTE_MORN
 	const PALETTE_DARK
+
+INVISIBLE    EQU 0
+FIXED_FACING EQU 2
+SLIDING      EQU 3
+EMOTE_OBJECT EQU 7
+
+	const_def
+	const PERSONTYPE_SCRIPT
+	const PERSONTYPE_ITEMFRAGMENT
+	const PERSONTYPE_TRAINER
+	const PERSONTYPE_3
+	const PERSONTYPE_4
+	const PERSONTYPE_5
+	const PERSONTYPE_6
+
+; fruit trees
+const_value SET 1
+	const FRUITTREE_ROUTE_29
+	const FRUITTREE_ROUTE_30_1
+	const FRUITTREE_ROUTE_38
+	const FRUITTREE_ROUTE_46_1
+	const FRUITTREE_ROUTE_30_2
+	const FRUITTREE_ROUTE_33
+	const FRUITTREE_ROUTE_31
+	const FRUITTREE_ROUTE_43
+	const FRUITTREE_VIOLET_CITY
+	const FRUITTREE_ROUTE_46_2
+	const FRUITTREE_ROUTE_35
+	const FRUITTREE_ROUTE_45
+	const FRUITTREE_ROUTE_36
+	const FRUITTREE_ROUTE_26
+	const FRUITTREE_ROUTE_39
+	const FRUITTREE_ROUTE_44
+	const FRUITTREE_ROUTE_37_1
+	const FRUITTREE_ROUTE_37_2
+	const FRUITTREE_ROUTE_37_3
+	const FRUITTREE_AZALEA_TOWN
+	const FRUITTREE_ROUTE_42_1
+	const FRUITTREE_ROUTE_42_2
+	const FRUITTREE_ROUTE_42_3
+	const FRUITTREE_ROUTE_11
+	const FRUITTREE_ROUTE_2
+	const FRUITTREE_ROUTE_1
+	const FRUITTREE_ROUTE_8
+	const FRUITTREE_PEWTER_CITY_1
+	const FRUITTREE_PEWTER_CITY_2
+	const FRUITTREE_FUCHSIA_CITY
+
+CMDQUEUE_TYPE  EQU 0
+CMDQUEUE_ADDR  EQU 1
+CMDQUEUE_03    EQU 3
+CMDQUEUE_04    EQU 4
+CMDQUEUE_05    EQU 5
+CMDQUEUE_ENTRY_SIZE EQU 6
+CMDQUEUE_CAPACITY EQU 4
--- a/constants/misc_constants.asm
+++ b/constants/misc_constants.asm
@@ -32,6 +32,11 @@
 MONS_PER_BOX EQU 20
 NUM_BOXES    EQU 14
 
+; mail
+MAIL_STRUCT_LENGTH EQU $2f
+MAILBOX_CAPACITY   EQU 10
+MAIL_MSG_LENGTH    EQU $20
+
 ; hall of fame
 HOF_MON_LENGTH = 1 + 2 + 2 + 1 + (PKMN_NAME_LENGTH +- 1) ; species, id, dvs, level, nick
 HOF_LENGTH = 1 + HOF_MON_LENGTH * PARTY_LENGTH + 1 ; win count, party, terminator
@@ -46,15 +51,25 @@
 
 ; joypad
 
+	const_def
+	const A_BUTTON_F
+	const B_BUTTON_F
+	const SELECT_F
+	const START_F
+	const D_RIGHT_F
+	const D_LEFT_F
+	const D_UP_F
+	const D_DOWN_F
+
 NO_INPUT   EQU %00000000
-A_BUTTON   EQU %00000001
-B_BUTTON   EQU %00000010
-SELECT     EQU %00000100
-START      EQU %00001000
-D_RIGHT    EQU %00010000
-D_LEFT     EQU %00100000
-D_UP       EQU %01000000
-D_DOWN     EQU %10000000
+A_BUTTON   EQU 1 << A_BUTTON_F
+B_BUTTON   EQU 1 << B_BUTTON_F
+SELECT     EQU 1 << SELECT_F
+START      EQU 1 << START_F
+D_RIGHT    EQU 1 << D_RIGHT_F
+D_LEFT     EQU 1 << D_LEFT_F
+D_UP       EQU 1 << D_UP_F
+D_DOWN     EQU 1 << D_DOWN_F
 
 BUTTONS    EQU A_BUTTON | B_BUTTON | SELECT | START
 D_PAD      EQU D_RIGHT | D_LEFT | D_UP | D_DOWN
@@ -70,8 +85,8 @@
 
 SCREEN_WIDTH EQU 20
 SCREEN_HEIGHT EQU 18
-SCREEN_WIDTH_PX EQU 160
-SCREEN_HEIGHT_PX EQU 144
+SCREEN_WIDTH_PX EQU SCREEN_WIDTH * 8
+SCREEN_HEIGHT_PX EQU SCREEN_HEIGHT * 8
 
 BG_MAP_WIDTH  EQU 32
 BG_MAP_HEIGHT EQU 32
@@ -161,6 +176,10 @@
 	const LINK_COLOSSEUM
 	const LINK_MOBILE
 
+SERIAL_TIMECAPSULE EQU $60
+SERIAL_TRADECENTER EQU $70
+SERIAL_BATTLE      EQU $80
+
 HMENURETURN_SCRIPT EQU %10000000
 HMENURETURN_ASM    EQU %11111111
 
@@ -189,38 +208,87 @@
 NUM_BADGES EQU NUM_JOHTO_BADGES + NUM_KANTO_BADGES
 
 	const_def
-	const JUMPTABLE_8D24B_FUNCTION_00
-	const JUMPTABLE_8D24B_FUNCTION_01
-	const JUMPTABLE_8D24B_FUNCTION_02
-	const JUMPTABLE_8D24B_FUNCTION_03
-	const JUMPTABLE_8D24B_FUNCTION_04
-	const JUMPTABLE_8D24B_FUNCTION_05
-	const JUMPTABLE_8D24B_FUNCTION_06
-	const JUMPTABLE_8D24B_FUNCTION_07
-	const JUMPTABLE_8D24B_FUNCTION_08
-	const JUMPTABLE_8D24B_FUNCTION_09
-	const JUMPTABLE_8D24B_FUNCTION_0A
-	const JUMPTABLE_8D24B_FUNCTION_0B
-	const JUMPTABLE_8D24B_FUNCTION_0C
-	const JUMPTABLE_8D24B_FUNCTION_0D
-	const JUMPTABLE_8D24B_FUNCTION_0E
-	const JUMPTABLE_8D24B_FUNCTION_0F
-	const JUMPTABLE_8D24B_FUNCTION_10
-	const JUMPTABLE_8D24B_FUNCTION_11
-	const JUMPTABLE_8D24B_FUNCTION_12
-	const JUMPTABLE_8D24B_FUNCTION_13
-	const JUMPTABLE_8D24B_FUNCTION_14
-	const JUMPTABLE_8D24B_FUNCTION_15
-	const JUMPTABLE_8D24B_FUNCTION_16
-	const JUMPTABLE_8D24B_FUNCTION_17
-	const JUMPTABLE_8D24B_FUNCTION_18
-	const JUMPTABLE_8D24B_FUNCTION_19
-	const JUMPTABLE_8D24B_FUNCTION_1A
-	const JUMPTABLE_8D24B_FUNCTION_1B
-	const JUMPTABLE_8D24B_FUNCTION_1C
-	const JUMPTABLE_8D24B_FUNCTION_1D
-	const JUMPTABLE_8D24B_FUNCTION_1E
-	const JUMPTABLE_8D24B_FUNCTION_1F
-	const JUMPTABLE_8D24B_FUNCTION_20
-	const JUMPTABLE_8D24B_FUNCTION_21
-	const JUMPTABLE_8D24B_FUNCTION_22
+	const SPRITE_ANIM_SEQ_00
+	const SPRITE_ANIM_SEQ_01
+	const SPRITE_ANIM_SEQ_02
+	const SPRITE_ANIM_SEQ_03
+	const SPRITE_ANIM_SEQ_04
+	const SPRITE_ANIM_SEQ_05
+	const SPRITE_ANIM_SEQ_06
+	const SPRITE_ANIM_SEQ_07
+	const SPRITE_ANIM_SEQ_08
+	const SPRITE_ANIM_SEQ_09
+	const SPRITE_ANIM_SEQ_0A
+	const SPRITE_ANIM_SEQ_0B
+	const SPRITE_ANIM_SEQ_0C
+	const SPRITE_ANIM_SEQ_0D
+	const SPRITE_ANIM_SEQ_0E
+	const SPRITE_ANIM_SEQ_0F
+	const SPRITE_ANIM_SEQ_10
+	const SPRITE_ANIM_SEQ_11
+	const SPRITE_ANIM_SEQ_12
+	const SPRITE_ANIM_SEQ_13
+	const SPRITE_ANIM_SEQ_14
+	const SPRITE_ANIM_SEQ_15
+	const SPRITE_ANIM_SEQ_16
+	const SPRITE_ANIM_SEQ_17
+	const SPRITE_ANIM_SEQ_18
+	const SPRITE_ANIM_SEQ_19
+	const SPRITE_ANIM_SEQ_1A
+	const SPRITE_ANIM_SEQ_1B
+	const SPRITE_ANIM_SEQ_1C
+	const SPRITE_ANIM_SEQ_1D
+	const SPRITE_ANIM_SEQ_1E
+	const SPRITE_ANIM_SEQ_1F
+	const SPRITE_ANIM_SEQ_20
+	const SPRITE_ANIM_SEQ_21
+	const SPRITE_ANIM_SEQ_22
+
+	const_def
+	const SPRITE_ANIM_INDEX_00
+	const SPRITE_ANIM_INDEX_01
+	const SPRITE_ANIM_INDEX_02
+	const SPRITE_ANIM_INDEX_03
+	const SPRITE_ANIM_INDEX_04
+	const SPRITE_ANIM_INDEX_05
+	const SPRITE_ANIM_INDEX_06
+	const SPRITE_ANIM_INDEX_07
+	const SPRITE_ANIM_INDEX_08
+	const SPRITE_ANIM_INDEX_09
+	const SPRITE_ANIM_INDEX_0A
+	const SPRITE_ANIM_INDEX_0B
+	const SPRITE_ANIM_INDEX_0C
+	const SPRITE_ANIM_INDEX_0D
+	const SPRITE_ANIM_INDEX_0E
+	const SPRITE_ANIM_INDEX_0F
+	const SPRITE_ANIM_INDEX_10
+	const SPRITE_ANIM_INDEX_11
+	const SPRITE_ANIM_INDEX_12
+	const SPRITE_ANIM_INDEX_13
+	const SPRITE_ANIM_INDEX_14
+	const SPRITE_ANIM_INDEX_15
+	const SPRITE_ANIM_INDEX_16
+	const SPRITE_ANIM_INDEX_17
+	const SPRITE_ANIM_INDEX_18
+	const SPRITE_ANIM_INDEX_19
+	const SPRITE_ANIM_INDEX_1A
+	const SPRITE_ANIM_INDEX_1B
+	const SPRITE_ANIM_INDEX_1C
+	const SPRITE_ANIM_INDEX_1D
+	const SPRITE_ANIM_INDEX_1E
+	const SPRITE_ANIM_INDEX_1F
+	const SPRITE_ANIM_INDEX_20
+	const SPRITE_ANIM_INDEX_21
+	const SPRITE_ANIM_INDEX_22
+	const SPRITE_ANIM_INDEX_23
+	const SPRITE_ANIM_INDEX_24
+	const SPRITE_ANIM_INDEX_25
+	const SPRITE_ANIM_INDEX_26
+	const SPRITE_ANIM_INDEX_27
+	const SPRITE_ANIM_INDEX_28
+	const SPRITE_ANIM_INDEX_29
+	const SPRITE_ANIM_INDEX_2A
+	const SPRITE_ANIM_INDEX_2B
+	const SPRITE_ANIM_INDEX_2C
+
+NUM_KANA EQU $2d
--- a/constants/pokemon_constants.asm
+++ b/constants/pokemon_constants.asm
@@ -291,7 +291,6 @@
 MON_SDF                  EQUS "(PartyMon1SpclDef - PartyMon1)"
 BOXMON_STRUCT_LENGTH     EQUS "(PartyMon1End - PartyMon1)"
 PARTYMON_STRUCT_LENGTH   EQUS "(PartyMon1StatsEnd - PartyMon1)"
-SCRATCHMON_STRUCT_LENGTH EQUS "(PartyMon1StatsEnd - PartyMon1Item)"
 
 const_value SET 1
 	const MONMENU_CUT        ; 1
--- a/constants/script_constants.asm
+++ b/constants/script_constants.asm
@@ -3,34 +3,34 @@
 LAST_TALKED EQU -2
 
 	const_def
-	const VAR_STRINGBUFFER2
-	const VAR_PARTYCOUNT
-	const VAR_BATTLERESULT
-	const VAR_BATTLETYPE
-	const VAR_TIMEOFDAY
-	const VAR_DEXCAUGHT
-	const VAR_DEXSEEN
-	const VAR_BADGES
-	const VAR_MOVEMENT
-	const VAR_FACING
-	const VAR_HOUR
-	const VAR_WEEKDAY
-	const VAR_MAPGROUP
-	const VAR_MAPNUMBER
-	const VAR_UNOWNCOUNT
-	const VAR_ROOFPALETTE
-	const VAR_BOXSPACE
-	const VAR_CONTESTMINUTES
-	const VAR_XCOORD
-	const VAR_YCOORD
-	const VAR_SPECIALPHONECALL
-	const VAR_15
-	const VAR_KURT_APRICORNS
-	const VAR_CALLERID
-	const VAR_BLUECARDBALANCE
-	const VAR_BUENASPASSWORD
-	const VAR_KENJI_BREAK
-NUM_VARS EQU const_value
+	const VAR_STRINGBUFFER2    ; 00
+	const VAR_PARTYCOUNT       ; 01
+	const VAR_BATTLERESULT     ; 02
+	const VAR_BATTLETYPE       ; 03
+	const VAR_TIMEOFDAY        ; 04
+	const VAR_DEXCAUGHT        ; 05
+	const VAR_DEXSEEN          ; 06
+	const VAR_BADGES           ; 07
+	const VAR_MOVEMENT         ; 08
+	const VAR_FACING           ; 09
+	const VAR_HOUR             ; 0a
+	const VAR_WEEKDAY          ; 0b
+	const VAR_MAPGROUP         ; 0c
+	const VAR_MAPNUMBER        ; 0d
+	const VAR_UNOWNCOUNT       ; 0e
+	const VAR_ROOFPALETTE      ; 0f
+	const VAR_BOXSPACE         ; 10
+	const VAR_CONTESTMINUTES   ; 11
+	const VAR_XCOORD           ; 12
+	const VAR_YCOORD           ; 13
+	const VAR_SPECIALPHONECALL ; 14
+	const VAR_15               ; 15
+	const VAR_KURT_APRICORNS   ; 16
+	const VAR_CALLERID         ; 17
+	const VAR_BLUECARDBALANCE  ; 18
+	const VAR_BUENASPASSWORD   ; 19
+	const VAR_KENJI_BREAK      ; 1a
+NUM_VARS EQU const_value       ; 1b
 
 RETVAR_STRBUF2 EQU (0 << 6)
 RETVAR_ADDR_DE EQU (1 << 6)
--- a/constants/sprite_constants.asm
+++ b/constants/sprite_constants.asm
@@ -220,15 +220,15 @@
 	const SPRITEMOVEDATA_SMASHABLE_ROCK
 	const SPRITEMOVEDATA_STRENGTH_BOULDER
 	const SPRITEMOVEDATA_FOLLOWNOTEXACT
-	const SPRITEMOVEDATA_1B
-	const SPRITEMOVEDATA_1C
-	const SPRITEMOVEDATA_1D
+	const SPRITEMOVEDATA_SHADOW
+	const SPRITEMOVEDATA_EMOTE
+	const SPRITEMOVEDATA_SCREENSHAKE
 	const SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE
 	const SPRITEMOVEDATA_SPINCLOCKWISE
 	const SPRITEMOVEDATA_20
 	const SPRITEMOVEDATA_BIGDOLL
-	const SPRITEMOVEDATA_22
-	const SPRITEMOVEDATA_23
+	const SPRITEMOVEDATA_BOULDERDUST
+	const SPRITEMOVEDATA_GRASS
 	const SPRITEMOVEDATA_LAPRAS
 	const SPRITEMOVEDATA_25
 NUM_SPRITEMOVEDATA EQU const_value +- 1
@@ -255,14 +255,95 @@
 	const SPRITEMOVEFN_SCRIPTED
 	const SPRITEMOVEFN_STRENGTH
 	const SPRITEMOVEFN_FOLLOWNOTEXACT
-	const SPRITEMOVEFN_13
-	const SPRITEMOVEFN_14
+	const SPRITEMOVEFN_SHADOW
+	const SPRITEMOVEFN_EMOTE
 	const SPRITEMOVEFN_BIG_SNORLAX
 	const SPRITEMOVEFN_BOUNCE
-	const SPRITEMOVEFN_17
+	const SPRITEMOVEFN_SCREENSHAKE
 	const SPRITEMOVEFN_SPIN_CLOCKWISE
 	const SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE
-	const SPRITEMOVEFN_1A
-	const SPRITEMOVEFN_1B
+	const SPRITEMOVEFN_BOULDERDUST
+	const SPRITEMOVEFN_GRASS
 
 MAX_OUTDOOR_SPRITES EQU 23
+
+	const_def
+	const STEP_TYPE_00
+	const STEP_TYPE_STANDING
+	const STEP_TYPE_NPC_WALK
+	const STEP_TYPE_03
+	const STEP_TYPE_04
+	const STEP_TYPE_05
+	const STEP_TYPE_PLAYER_WALK
+	const STEP_TYPE_07
+	const STEP_TYPE_NPC_JUMP
+	const STEP_TYPE_PLAYER_JUMP
+	const STEP_TYPE_HALF_STEP
+	const STEP_TYPE_BUMP
+	const STEP_TYPE_TELEPORT_FROM
+	const STEP_TYPE_TELEPORT_TO
+	const STEP_TYPE_SKYFALL
+	const STEP_TYPE_0F
+	const STEP_TYPE_GOT_BITE
+	const STEP_TYPE_ROCK_SMASH
+	const STEP_TYPE_RETURN_DIG
+	const STEP_TYPE_13
+	const STEP_TYPE_14
+	const STEP_TYPE_15
+	const STEP_TYPE_16
+	const STEP_TYPE_17
+	const STEP_TYPE_18
+	const STEP_TYPE_19
+
+	const_def
+	const PERSON_ACTION_00
+	const PERSON_ACTION_STAND
+	const PERSON_ACTION_STEP
+	const PERSON_ACTION_BUMP
+	const PERSON_ACTION_SPIN
+	const PERSON_ACTION_SPIN_FLICKER
+	const PERSON_ACTION_FISHING
+	const PERSON_ACTION_07
+	const PERSON_ACTION_EMOTE
+	const PERSON_ACTION_09
+	const PERSON_ACTION_0A
+	const PERSON_ACTION_0B
+	const PERSON_ACTION_0C
+	const PERSON_ACTION_0D
+	const PERSON_ACTION_0E
+	const PERSON_ACTION_0F
+	const PERSON_ACTION_10
+
+	const_def
+	const FACING_00
+	const FACING_01
+	const FACING_02
+	const FACING_03
+	const FACING_04
+	const FACING_05
+	const FACING_06
+	const FACING_07
+	const FACING_08
+	const FACING_09
+	const FACING_0A
+	const FACING_0B
+	const FACING_0C
+	const FACING_0D
+	const FACING_0E
+	const FACING_0F
+	const FACING_10
+	const FACING_11
+	const FACING_12
+	const FACING_13
+	const FACING_EMOTE
+	const FACING_15
+	const FACING_16
+	const FACING_17
+	const FACING_18
+	const FACING_19
+	const FACING_1A
+	const FACING_1B
+	const FACING_1C
+	const FACING_1D
+	const FACING_1E
+	const FACING_1F
--- a/constants/tilemap_constants.asm
+++ b/constants/tilemap_constants.asm
@@ -5,39 +5,39 @@
 TALK     EQU  1 << 4
 
 const_value SET 1
-	const TILESET_JOHTO_OUTSIDE_1                    ; 01
-	const TILESET_JOHTO_OUTSIDE_2                    ; 02
-	const TILESET_KANTO_OUTSIDE                      ; 03
-	const TILESET_BATTLE_TOWER_OUTSIDE               ; 04
-	const TILESET_HOUSE_1                            ; 05
-	const TILESET_KRISS_HOUSE                        ; 06
-	const TILESET_POKECENTER                         ; 07
-	const TILESET_GATE                               ; 08
-	const TILESET_PORT                               ; 09
-	const TILESET_LAB                                ; 0a
-	const TILESET_POWER_PLANT                        ; 0b
-	const TILESET_MART                               ; 0c
-	const TILESET_CELADON_MANSION                    ; 0d
-	const TILESET_GAME_CORNER                        ; 0e
-	const TILESET_GYM_1                              ; 0f
-	const TILESET_KURT_HOUSE                         ; 10
-	const TILESET_TRAIN_STATION                      ; 11
-	const TILESET_OLIVINE_GYM                        ; 12
-	const TILESET_LIGHTHOUSE                         ; 13
-	const TILESET_KRISS_HOUSE_2F                     ; 14
-	const TILESET_GOLDENROD_POKECOM_CENTER_2F_MOBILE ; 15
-	const TILESET_BATTLE_TOWER                       ; 16
-	const TILESET_SPROUT_TOWER                       ; 17
-	const TILESET_CAVE                               ; 18
-	const TILESET_PARK                               ; 19
-	const TILESET_RUINS_OF_ALPH                      ; 1a
-	const TILESET_RADIO_TOWER                        ; 1b
-	const TILESET_UNDERGROUND                        ; 1c
-	const TILESET_ICE_PATH                           ; 1d
-	const TILESET_WHIRL_ISLANDS                      ; 1e
-	const TILESET_ILEX_FOREST                        ; 1f
-	const TILESET_20                                 ; 20
-	const TILESET_HO_OH_WORD_ROOM                    ; 21
-	const TILESET_KABUTO_WORD_ROOM                   ; 22
-	const TILESET_OMANYTE_WORD_ROOM                  ; 23
-	const TILESET_AERODACTYL_WORD_ROOM               ; 24
+	const TILESET_JOHTO_1              ; 01
+	const TILESET_JOHTO_2              ; 02
+	const TILESET_KANTO                ; 03
+	const TILESET_BATTLE_TOWER_OUTSIDE ; 04
+	const TILESET_HOUSE_1              ; 05
+	const TILESET_KRISS_HOUSE          ; 06
+	const TILESET_POKECENTER           ; 07
+	const TILESET_GATE                 ; 08
+	const TILESET_PORT                 ; 09
+	const TILESET_LAB                  ; 0a
+	const TILESET_POWER_PLANT          ; 0b
+	const TILESET_MART                 ; 0c
+	const TILESET_CELADON_MANSION      ; 0d
+	const TILESET_GAME_CORNER          ; 0e
+	const TILESET_GYM_1                ; 0f
+	const TILESET_KURT_HOUSE           ; 10
+	const TILESET_TRAIN_STATION        ; 11
+	const TILESET_OLIVINE_GYM          ; 12
+	const TILESET_LIGHTHOUSE           ; 13
+	const TILESET_KRISS_HOUSE_2F       ; 14
+	const TILESET_POKECOM_CENTER       ; 15
+	const TILESET_BATTLE_TOWER         ; 16
+	const TILESET_SPROUT_TOWER         ; 17
+	const TILESET_CAVE                 ; 18
+	const TILESET_PARK                 ; 19
+	const TILESET_RUINS_OF_ALPH        ; 1a
+	const TILESET_RADIO_TOWER          ; 1b
+	const TILESET_UNDERGROUND          ; 1c
+	const TILESET_ICE_PATH             ; 1d
+	const TILESET_WHIRL_ISLANDS        ; 1e
+	const TILESET_ILEX_FOREST          ; 1f
+	const TILESET_20                   ; 20
+	const TILESET_HO_OH_WORD_ROOM      ; 21
+	const TILESET_KABUTO_WORD_ROOM     ; 22
+	const TILESET_OMANYTE_WORD_ROOM    ; 23
+	const TILESET_AERODACTYL_WORD_ROOM ; 24
--- a/constants/wram_constants.asm
+++ b/constants/wram_constants.asm
@@ -7,9 +7,24 @@
 WILDMON    EQU 4
 
 ; Options: ; cfcc
+FAST_TEXT      EQU 0
+MED_TEXT       EQU 1
+SLOW_TEXT      EQU 2
 NO_TEXT_SCROLL EQU 4
+; bits
+STEREO         EQU 5
 BATTLE_SHIFT   EQU 6
 BATTLE_SCENE   EQU 7
+
+; Options2:
+MENU_ACCOUNT EQU 0
+
+; GBPrinter:
+PRINT_LIGHTEST EQU $00
+PRINT_LIGHTER  EQU $20
+PRINT_NORMAL   EQU $40
+PRINT_DARKER   EQU $60
+PRINT_DARKEST  EQU $7f
 
 ; WalkingDirection: ; d043
 STANDING EQU -1
--- a/contents.asm
+++ b/contents.asm
@@ -48,6 +48,8 @@
 UNOWN_PIC_POINTERS        EQU $49
 TRAINER_PIC_POINTERS      EQU $4A
 
+PICS_FIX                  EQU $36
+
 PICS_1                    EQU $48
 PICS_2                    EQU $49
 PICS_3                    EQU $4A
--- a/data/battle_tower.asm
+++ b/data/battle_tower.asm
@@ -208,6 +208,9 @@
 ; 1f814e
 
 BattleTowerTrainers: ; 1f814e
+; The trainer class is not used in Crystal 1.0 due to a bug.
+; Instead, the sixth character in the trainer's name is used.
+; See misc/battle_tower_47.asm
 	db "HANSON@@@@", FISHER
 	db "SAWYER@@@@", POKEMANIAC
 	db "MASUDA@@@@", GUITARIST
--- a/data/battle_tower_2.asm
+++ b/data/battle_tower_2.asm
@@ -1,72 +1,1405 @@
+
 BattleTowerTrainerData:: ; What exactly it is, I don't know
 ; Size is 70 (Nr of Trainers in BattleTower) * 0x24 (Nr of Bytes that are copied)
-	db $37, $03, $0e, $09, $25, $0b, $1c, $0d, $12, $0d, $00, $05, $0e, $09, $1a, $0b, $30, $04, $3f, $06, $20, $04, $21, $0d, $0e, $09, $30, $04, $20, $04, $0b, $06, $34, $03, $06, $05
-	db $36, $03, $ca, $00, $22, $08, $20, $04, $33, $0d, $11, $0d, $37, $05, $06, $05, $3f, $06, $ca, $00, $20, $04, $06, $0d, $ca, $00, $21, $03, $09, $06, $12, $04, $28, $0b, $0c, $0d
-	db $32, $06, $31, $04, $02, $02, $03, $04, $22, $02, $00, $05, $40, $04, $2d, $06, $13, $0d, $18, $03, $3f, $04, $13, $0d, $1a, $0c, $33, $04, $32, $0d, $09, $06, $22, $02, $13, $0d
-	db $22, $0c, $22, $0c, $0a, $09, $0b, $08, $2f, $06, $22, $07, $22, $06, $2c, $04, $1a, $06, $0d, $07, $3f, $0d, $00, $05, $0b, $08, $09, $06, $2c, $04, $1f, $0e, $1c, $0b, $41, $0b
-	db $a3, $00, $41, $03, $1f, $04, $29, $00, $1c, $04, $03, $02, $3d, $05, $38, $06, $71, $00, $18, $03, $30, $06, $53, $00, $1e, $05, $b9, $00, $21, $0d, $30, $06, $d1, $00, $0a, $06
-	db $13, $02, $31, $06, $04, $02, $1c, $04, $0d, $0d, $31, $0d, $39, $07, $31, $06, $24, $07, $3d, $04, $40, $04, $30, $0d, $03, $06, $08, $05, $02, $05, $14, $07, $08, $05, $1a, $0d
-	db $0d, $02, $07, $02, $00, $05, $22, $02, $10, $0b, $0a, $0d, $16, $02, $01, $02, $08, $0d, $2c, $04, $23, $07, $23, $0d, $16, $02, $01, $02, $08, $0d, $02, $03, $20, $04, $23, $0d
-	db $1e, $02, $22, $02, $00, $05, $20, $08, $2c, $04, $03, $02, $1d, $05, $41, $08, $41, $08, $35, $05, $40, $0b, $00, $05, $0b, $05, $0b, $02, $00, $05, $04, $04, $14, $08, $00, $05
-	db $06, $0c, $09, $06, $00, $00, $0b, $09, $1e, $0c, $37, $0d, $41, $03, $06, $04, $34, $06, $22, $0c, $15, $09, $23, $0d, $02, $03, $22, $08, $41, $0d, $26, $04, $31, $0d, $01, $05
-	db $22, $0c, $30, $04, $01, $05, $2c, $04, $23, $07, $01, $05, $37, $03, $3d, $04, $3c, $0d, $1c, $03, $29, $08, $3c, $0d, $18, $04, $30, $0d, $06, $05, $14, $07, $30, $0d, $06, $05
-	db $0e, $06, $04, $05, $2c, $04, $1e, $0c, $38, $0d, $00, $05, $3f, $03, $3f, $06, $20, $04, $33, $0d, $04, $0d, $00, $00, $20, $04, $26, $0d, $04, $05, $0c, $04, $26, $0d, $04, $05
-	db $18, $02, $33, $03, $28, $04, $2c, $04, $09, $07, $03, $05, $30, $04, $08, $09, $00, $05, $1a, $02, $32, $03, $00, $05, $3f, $05, $26, $07, $01, $05, $26, $05, $0f, $02, $00, $05
-	db $3a, $0b, $3a, $0b, $00, $05, $42, $03, $19, $08, $30, $04, $39, $03, $13, $06, $13, $06, $19, $08, $21, $0d, $00, $00, $39, $03, $09, $02, $00, $05, $40, $03, $3a, $08, $2a, $0d
-	db $31, $05, $11, $0e, $30, $04, $1b, $08, $07, $08, $0c, $0d, $1b, $02, $1b, $02, $01, $05, $15, $02, $0a, $04, $0e, $0d, $22, $05, $31, $06, $02, $05, $1d, $06, $3b, $07, $0e, $0d
-	db $1b, $02, $2c, $04, $0d, $0d, $34, $03, $00, $03, $11, $0d, $1b, $08, $31, $04, $0b, $0d, $2f, $08, $01, $05, $00, $00, $06, $05, $10, $05, $0f, $06, $11, $0d, $06, $05, $00, $00
-	db $42, $03, $30, $04, $1f, $0b, $16, $0e, $10, $07, $34, $0d, $17, $0e, $04, $0d, $00, $00, $42, $03, $19, $08, $30, $04, $0c, $05, $35, $05, $01, $05, $1e, $06, $36, $08, $41, $0d
-	db $18, $03, $42, $03, $43, $04, $3a, $0b, $3b, $0b, $03, $05, $2c, $05, $06, $05, $1b, $03, $43, $04, $39, $0b, $3c, $04, $14, $0b, $0f, $05, $06, $05, $40, $03, $3f, $04, $20, $0e
-	db $0c, $05, $36, $07, $30, $04, $27, $0b, $10, $08, $31, $0d, $11, $0e, $30, $04, $41, $03, $07, $0d, $2f, $08, $03, $05, $06, $05, $3f, $06, $11, $0e, $30, $04, $30, $07, $06, $05
-	db $36, $03, $06, $06, $44, $04, $0b, $0e, $16, $0d, $00, $05, $32, $0d, $08, $06, $09, $0e, $44, $04, $09, $08, $22, $0d, $04, $0e, $09, $0e, $44, $04, $29, $08, $05, $0d, $00, $00
-	db $3f, $06, $2c, $04, $34, $0d, $14, $05, $13, $02, $04, $02, $0c, $05, $3f, $04, $38, $0d, $02, $03, $29, $08, $32, $0d, $35, $05, $15, $06, $40, $05, $02, $03, $34, $07, $04, $0d
-	db $12, $03, $02, $04, $07, $07, $28, $04, $2c, $0d, $00, $05, $2c, $03, $12, $03, $2b, $06, $0a, $04, $06, $0d, $31, $0d, $2c, $03, $12, $03, $06, $04, $0d, $06, $28, $0b, $02, $05
-	db $41, $04, $3c, $0b, $34, $0d, $40, $03, $00, $03, $0d, $0d, $13, $0c, $33, $08, $31, $0d, $1e, $09, $27, $07, $3b, $0d, $22, $08, $15, $04, $11, $0d, $2c, $03, $0c, $04, $3b, $0d
-	db $03, $0a, $3a, $0d, $2c, $04, $1c, $0b, $35, $07, $26, $0d, $24, $09, $43, $04, $26, $0d, $0f, $03, $1f, $07, $04, $05, $02, $03, $24, $08, $26, $0d, $3f, $03, $13, $04, $04, $05
-	db $06, $05, $06, $05, $06, $05, $06, $05, $2c, $04, $03, $05, $06, $05, $06, $05, $06, $05, $06, $05, $07, $04, $03, $05, $06, $05, $06, $05, $06, $05, $06, $05, $33, $04, $03, $05
-	db $27, $05, $01, $05, $00, $00, $18, $04, $19, $0d, $01, $05, $41, $05, $00, $00, $00, $00, $16, $06, $3d, $04, $19, $0d, $20, $04, $05, $05, $00, $00, $21, $03, $0c, $04, $19, $0d
-	db $03, $02, $43, $03, $27, $04, $28, $04, $2d, $0d, $00, $05, $30, $05, $04, $05, $02, $03, $38, $06, $3e, $04, $41, $0d, $16, $0e, $04, $05, $02, $03, $38, $06, $20, $04, $41, $0d
-	db $34, $03, $00, $03, $11, $0d, $03, $04, $1c, $0b, $07, $0d, $29, $05, $00, $05, $00, $00, $40, $04, $11, $0d, $3e, $0d, $03, $06, $11, $0d, $00, $05, $16, $0e, $0d, $06, $20, $06
-	db $19, $03, $17, $0b, $20, $06, $1b, $0b, $06, $0c, $1a, $0b, $34, $03, $06, $04, $20, $06, $1b, $0b, $06, $0c, $1a, $0b, $34, $03, $36, $04, $20, $06, $1b, $0b, $06, $0c, $1a, $0b
-	db $0a, $03, $0c, $0c, $25, $0a, $21, $0e, $2c, $04, $03, $02, $10, $09, $03, $08, $09, $06, $0a, $03, $31, $04, $16, $0d, $27, $05, $17, $07, $04, $05, $02, $0c, $0a, $09, $2f, $0d
-	db $15, $02, $2c, $04, $03, $02, $24, $04, $39, $04, $0f, $0d, $1e, $02, $11, $02, $01, $05, $0d, $04, $39, $08, $05, $0d, $29, $05, $08, $02, $00, $05, $43, $03, $0c, $04, $3b, $0d
-	db $10, $0b, $04, $04, $00, $05, $05, $08, $21, $0d, $00, $00, $1f, $05, $01, $02, $00, $05, $18, $03, $3c, $08, $31, $0d, $02, $06, $23, $0b, $31, $03, $43, $03, $13, $07, $16, $0d
-	db $0f, $0e, $19, $0d, $00, $05, $0b, $0e, $2c, $04, $19, $0d, $0e, $0e, $2c, $04, $06, $05, $1f, $07, $19, $0d, $01, $05, $06, $05, $37, $03, $29, $04, $32, $0d, $19, $0d, $01, $05
-	db $35, $03, $06, $04, $0d, $06, $29, $0b, $05, $0d, $00, $00, $16, $0e, $30, $04, $0b, $0d, $29, $08, $16, $0d, $00, $05, $11, $0e, $30, $04, $30, $07, $06, $05, $29, $08, $03, $05
-	db $18, $04, $03, $05, $0b, $0d, $2c, $04, $1e, $0c, $01, $05, $1f, $05, $1d, $07, $1d, $07, $2c, $04, $21, $07, $01, $05, $0a, $05, $12, $02, $32, $0d, $11, $0c, $0c, $06, $1a, $0d
-	db $0c, $0c, $37, $03, $1a, $03, $40, $04, $23, $0b, $26, $0a, $3f, $06, $09, $04, $1b, $07, $37, $03, $22, $08, $27, $06, $04, $0e, $03, $05, $00, $00, $26, $0a, $3b, $08, $1b, $07
-	db $18, $03, $1b, $08, $29, $0b, $40, $08, $32, $0d, $00, $05, $2f, $06, $29, $0b, $0b, $0d, $2f, $08, $23, $0d, $02, $0d, $35, $05, $13, $0e, $2e, $06, $22, $06, $2f, $08, $27, $06
-	db $1c, $03, $02, $0e, $31, $03, $2a, $0d, $24, $0d, $00, $00, $18, $03, $0b, $0d, $30, $08, $40, $08, $04, $05, $00, $00, $1c, $05, $01, $05, $03, $03, $02, $0e, $27, $04, $34, $0d
-	db $33, $03, $30, $04, $2c, $04, $1c, $0b, $35, $07, $00, $05, $30, $04, $2c, $04, $20, $06, $1e, $09, $40, $06, $40, $04, $30, $04, $2c, $04, $20, $06, $1e, $09, $40, $06, $22, $07
-	db $22, $0c, $22, $0c, $16, $0a, $35, $0d, $1c, $0b, $3f, $0d, $13, $05, $16, $0a, $40, $06, $23, $07, $06, $0d, $06, $05, $3f, $06, $16, $0a, $16, $0d, $37, $03, $2c, $04, $26, $07
-	db $0e, $06, $05, $08, $04, $0d, $00, $00, $00, $00, $00, $00, $14, $05, $06, $05, $12, $02, $00, $00, $00, $00, $00, $00, $23, $05, $01, $06, $18, $0d, $00, $00, $00, $00, $00, $00
-	db $18, $03, $27, $03, $03, $05, $20, $0b, $27, $06, $06, $05, $20, $0e, $12, $07, $2b, $0d, $2c, $03, $0e, $08, $35, $07, $37, $03, $27, $03, $03, $05, $42, $07, $2f, $08, $06, $05
-	db $36, $03, $30, $04, $17, $04, $2c, $03, $0c, $04, $3b, $0d, $18, $03, $32, $07, $15, $0d, $35, $05, $0d, $07, $07, $0d, $09, $05, $06, $05, $0f, $0c, $09, $04, $07, $0d, $3b, $0d
-	db $0b, $05, $14, $06, $24, $04, $0a, $0d, $3c, $0d, $00, $05, $14, $05, $09, $02, $32, $0d, $1e, $06, $04, $07, $06, $0d, $1a, $05, $33, $04, $03, $05, $16, $02, $00, $02, $07, $05
-	db $0a, $03, $32, $07, $0b, $0e, $22, $06, $2c, $04, $29, $0b, $0a, $03, $12, $0d, $24, $04, $1a, $0b, $33, $0d, $03, $0d, $0a, $03, $35, $04, $1b, $07, $06, $05, $1e, $06, $14, $07
-	db $0e, $06, $2c, $04, $00, $0d, $06, $03, $31, $04, $04, $0d, $0c, $05, $12, $02, $00, $05, $40, $03, $09, $04, $01, $0d, $35, $05, $36, $08, $00, $05, $02, $03, $31, $04, $21, $0d
-	db $22, $05, $07, $0e, $30, $04, $c5, $00, $10, $02, $01, $05, $0c, $0c, $00, $01, $30, $04, $82, $00, $21, $04, $01, $05, $10, $01, $11, $05, $30, $04, $c3, $00, $3f, $04, $06, $05
-	db $3a, $07, $3b, $07, $36, $03, $30, $04, $21, $04, $06, $0d, $17, $0e, $03, $05, $00, $00, $3f, $06, $21, $04, $21, $0d, $36, $05, $36, $03, $30, $04, $33, $06, $3f, $04, $0c, $0d
-	db $43, $03, $20, $04, $41, $0d, $17, $06, $06, $03, $0a, $04, $3a, $06, $13, $04, $04, $0d, $08, $06, $3f, $04, $31, $0d, $43, $03, $39, $04, $04, $05, $17, $06, $39, $04, $41, $0d
-	db $36, $03, $16, $04, $08, $06, $09, $08, $06, $0d, $00, $00, $1f, $0b, $03, $05, $12, $0e, $0f, $0e, $2c, $0d, $00, $05, $3a, $06, $16, $04, $38, $06, $38, $06, $2c, $0d, $00, $05
-	db $11, $05, $25, $03, $33, $04, $2f, $08, $19, $0d, $00, $05, $11, $05, $25, $03, $3f, $06, $26, $04, $19, $0d, $00, $05, $11, $05, $21, $03, $35, $04, $14, $07, $19, $0d, $06, $05
-	db $2c, $04, $0a, $0d, $04, $05, $33, $03, $29, $0b, $05, $0d, $00, $06, $04, $05, $09, $02, $33, $03, $07, $04, $35, $07, $33, $03, $3a, $08, $05, $0d, $3f, $06, $29, $08, $05, $0d
-	db $05, $03, $1b, $04, $41, $03, $39, $0b, $3a, $0b, $01, $05, $2c, $04, $03, $05, $00, $00, $40, $07, $3e, $0d, $00, $05, $00, $0e, $09, $05, $04, $05, $19, $09, $1d, $0b, $03, $05
-	db $1c, $0c, $20, $06, $05, $08, $3e, $0d, $00, $05, $00, $00, $18, $03, $1f, $0e, $11, $0a, $1c, $0b, $15, $0b, $1c, $06, $03, $0e, $06, $0c, $21, $0c, $14, $0d, $06, $05, $1f, $08
-	db $37, $03, $0e, $01, $08, $01, $19, $06, $27, $0b, $03, $02, $0e, $01, $08, $01, $1b, $08, $05, $08, $21, $0d, $00, $00, $36, $03, $33, $04, $04, $05, $00, $04, $41, $08, $3b, $0d
-	db $06, $02, $00, $05, $34, $03, $00, $03, $0d, $0d, $00, $05, $3c, $06, $05, $08, $16, $04, $2f, $08, $33, $0d, $02, $0d, $1c, $05, $00, $05, $18, $03, $05, $08, $1b, $04, $0c, $0d
-	db $2c, $04, $13, $09, $20, $06, $39, $03, $20, $04, $3c, $0d, $05, $03, $43, $04, $0b, $0d, $22, $04, $06, $0d, $31, $0d, $24, $08, $00, $05, $02, $03, $09, $08, $06, $0d, $3b, $0d
-	db $06, $03, $20, $04, $24, $0d, $24, $04, $10, $0b, $00, $05, $39, $07, $00, $05, $2a, $06, $04, $04, $3c, $04, $00, $00, $24, $04, $1c, $0b, $07, $0d, $2f, $08, $09, $06, $06, $05
-	db $44, $07, $23, $0b, $33, $0d, $2c, $04, $20, $06, $24, $08, $24, $08, $00, $05, $0e, $0e, $12, $08, $09, $0b, $28, $06, $24, $08, $00, $05, $02, $03, $13, $06, $11, $08, $41, $0d
-	db $36, $03, $06, $06, $30, $04, $0f, $0b, $02, $0b, $3b, $0d, $31, $0d, $00, $05, $39, $03, $20, $04, $21, $0d, $00, $00, $04, $0e, $02, $05, $06, $06, $20, $0e, $0b, $06, $27, $06
-	db $14, $05, $04, $02, $09, $0e, $08, $08, $2e, $08, $41, $0d, $34, $05, $2e, $08, $21, $0d, $3f, $03, $18, $08, $00, $05, $36, $05, $05, $02, $00, $05, $17, $06, $39, $04, $00, $05
-	db $34, $03, $00, $03, $11, $0d, $41, $08, $0b, $06, $06, $04, $39, $07, $00, $05, $00, $00, $36, $03, $30, $04, $07, $08, $10, $05, $15, $08, $00, $05, $3a, $06, $1e, $06, $14, $0d
-	db $37, $05, $37, $05, $00, $05, $38, $05, $38, $05, $41, $05, $25, $05, $04, $05, $32, $05, $31, $05, $41, $05, $41, $05, $0f, $05, $04, $05, $0f, $05, $0f, $05, $16, $05, $01, $05
-	db $1f, $0e, $36, $04, $40, $0d, $2f, $08, $1a, $0d, $00, $05, $21, $06, $35, $05, $24, $06, $1a, $06, $12, $0e, $00, $00, $1b, $05, $31, $06, $02, $05, $28, $0d, $27, $0d, $00, $00
-	db $41, $08, $0b, $06, $37, $03, $08, $06, $20, $04, $3b, $0d, $15, $02, $16, $06, $26, $07, $13, $0c, $33, $08, $32, $0d, $2d, $07, $00, $05, $35, $03, $0b, $04, $28, $06, $06, $05
-	db $0c, $08, $2c, $04, $1c, $0b, $06, $07, $0a, $0d, $03, $05, $30, $06, $06, $07, $00, $05, $2c, $04, $20, $06, $24, $07, $30, $06, $0b, $07, $00, $05, $2c, $04, $20, $06, $22, $07
-	db $22, $0c, $22, $0c, $0a, $09, $04, $0b, $02, $07, $27, $06, $0f, $0c, $0a, $0a, $22, $06, $02, $07, $27, $06, $04, $05, $3a, $06, $0e, $0a, $22, $06, $05, $08, $02, $07, $04, $05
-	db $2d, $0b, $02, $08, $37, $0d, $10, $05, $29, $07, $03, $05, $20, $0e, $0e, $0e, $0d, $06, $42, $07, $30, $08, $28, $06, $10, $05, $04, $05, $04, $05, $10, $05, $10, $05, $04, $05
-	db $3f, $03, $16, $0e, $3f, $08, $0b, $0d, $2f, $08, $41, $0d, $34, $05, $00, $05, $02, $03, $3a, $06, $31, $07, $31, $0d, $21, $0e, $03, $05, $3f, $03, $16, $0e, $26, $07, $03, $05
-	db $3a, $06, $2c, $03, $12, $03, $17, $0c, $28, $0b, $06, $0d, $3a, $06, $17, $0c, $23, $0b, $0d, $06, $2f, $08, $22, $0d, $14, $07, $04, $05, $17, $0c, $1c, $0b, $1b, $07, $00, $05
-	db $1b, $02, $00, $05, $0c, $08, $2c, $04, $23, $0b, $32, $0d, $2b, $07, $1f, $04, $3b, $0d, $09, $07, $09, $07, $00, $05, $26, $05, $00, $05, $3f, $03, $22, $07, $d1, $00, $32, $0d
+; Second argument points to an entry in Unknown_170470, to which the first argument is compared.
+
+BattleTowerTrainer1DataTable:
+	db $37,  3
+	db $0e,  9
+	db $25, 11
+	db $1c, 13
+	db $12, 13
+	db $00,  5
+	db $0e,  9
+	db $1a, 11
+	db $30,  4
+	db $3f,  6
+	db $20,  4
+	db $21, 13
+	db $0e,  9
+	db $30,  4
+	db $20,  4
+	db $0b,  6
+	db $34,  3
+	db $06,  5
+
+BattleTowerTrainer2DataTable:
+	db $36,  3
+	db $ca,  0
+	db $22,  8
+	db $20,  4
+	db $33, 13
+	db $11, 13
+	db $37,  5
+	db $06,  5
+	db $3f,  6
+	db $ca,  0
+	db $20,  4
+	db $06, 13
+	db $ca,  0
+	db $21,  3
+	db $09,  6
+	db $12,  4
+	db $28, 11
+	db $0c, 13
+
+BattleTowerTrainer3DataTable:
+	db $32,  6
+	db $31,  4
+	db $02,  2
+	db $03,  4
+	db $22,  2
+	db $00,  5
+	db $40,  4
+	db $2d,  6
+	db $13, 13
+	db $18,  3
+	db $3f,  4
+	db $13, 13
+	db $1a, 12
+	db $33,  4
+	db $32, 13
+	db $09,  6
+	db $22,  2
+	db $13, 13
+
+BattleTowerTrainer4DataTable:
+	db $22, 12
+	db $22, 12
+	db $0a,  9
+	db $0b,  8
+	db $2f,  6
+	db $22,  7
+	db $22,  6
+	db $2c,  4
+	db $1a,  6
+	db $0d,  7
+	db $3f, 13
+	db $00,  5
+	db $0b,  8
+	db $09,  6
+	db $2c,  4
+	db $1f, 14
+	db $1c, 11
+	db $41, 11
+
+BattleTowerTrainer5DataTable:
+	db $a3,  0
+	db $41,  3
+	db $1f,  4
+	db $29,  0
+	db $1c,  4
+	db $03,  2
+	db $3d,  5
+	db $38,  6
+	db $71,  0
+	db $18,  3
+	db $30,  6
+	db $53,  0
+	db $1e,  5
+	db $b9,  0
+	db $21, 13
+	db $30,  6
+	db $d1,  0
+	db $0a,  6
+
+BattleTowerTrainer6DataTable:
+	db $13,  2
+	db $31,  6
+	db $04,  2
+	db $1c,  4
+	db $0d, 13
+	db $31, 13
+	db $39,  7
+	db $31,  6
+	db $24,  7
+	db $3d,  4
+	db $40,  4
+	db $30, 13
+	db $03,  6
+	db $08,  5
+	db $02,  5
+	db $14,  7
+	db $08,  5
+	db $1a, 13
+
+BattleTowerTrainer7DataTable:
+	db $0d,  2
+	db $07,  2
+	db $00,  5
+	db $22,  2
+	db $10, 11
+	db $0a, 13
+	db $16,  2
+	db $01,  2
+	db $08, 13
+	db $2c,  4
+	db $23,  7
+	db $23, 13
+	db $16,  2
+	db $01,  2
+	db $08, 13
+	db $02,  3
+	db $20,  4
+	db $23, 13
+
+BattleTowerTrainer8DataTable:
+	db $1e,  2
+	db $22,  2
+	db $00,  5
+	db $20,  8
+	db $2c,  4
+	db $03,  2
+	db $1d,  5
+	db $41,  8
+	db $41,  8
+	db $35,  5
+	db $40, 11
+	db $00,  5
+	db $0b,  5
+	db $0b,  2
+	db $00,  5
+	db $04,  4
+	db $14,  8
+	db $00,  5
+
+BattleTowerTrainer9DataTable:
+	db $06, 12
+	db $09,  6
+	db $00,  0
+	db $0b,  9
+	db $1e, 12
+	db $37, 13
+	db $41,  3
+	db $06,  4
+	db $34,  6
+	db $22, 12
+	db $15,  9
+	db $23, 13
+	db $02,  3
+	db $22,  8
+	db $41, 13
+	db $26,  4
+	db $31, 13
+	db $01,  5
+
+BattleTowerTrainer10DataTable:
+	db $22, 12
+	db $30,  4
+	db $01,  5
+	db $2c,  4
+	db $23,  7
+	db $01,  5
+	db $37,  3
+	db $3d,  4
+	db $3c, 13
+	db $1c,  3
+	db $29,  8
+	db $3c, 13
+	db $18,  4
+	db $30, 13
+	db $06,  5
+	db $14,  7
+	db $30, 13
+	db $06,  5
+
+BattleTowerTrainer11DataTable:
+	db $0e,  6
+	db $04,  5
+	db $2c,  4
+	db $1e, 12
+	db $38, 13
+	db $00,  5
+	db $3f,  3
+	db $3f,  6
+	db $20,  4
+	db $33, 13
+	db $04, 13
+	db $00,  0
+	db $20,  4
+	db $26, 13
+	db $04,  5
+	db $0c,  4
+	db $26, 13
+	db $04,  5
+
+BattleTowerTrainer12DataTable:
+	db $18,  2
+	db $33,  3
+	db $28,  4
+	db $2c,  4
+	db $09,  7
+	db $03,  5
+	db $30,  4
+	db $08,  9
+	db $00,  5
+	db $1a,  2
+	db $32,  3
+	db $00,  5
+	db $3f,  5
+	db $26,  7
+	db $01,  5
+	db $26,  5
+	db $0f,  2
+	db $00,  5
+
+BattleTowerTrainer13DataTable:
+	db $3a, 11
+	db $3a, 11
+	db $00,  5
+	db $42,  3
+	db $19,  8
+	db $30,  4
+	db $39,  3
+	db $13,  6
+	db $13,  6
+	db $19,  8
+	db $21, 13
+	db $00,  0
+	db $39,  3
+	db $09,  2
+	db $00,  5
+	db $40,  3
+	db $3a,  8
+	db $2a, 13
+
+BattleTowerTrainer14DataTable:
+	db $31,  5
+	db $11, 14
+	db $30,  4
+	db $1b,  8
+	db $07,  8
+	db $0c, 13
+	db $1b,  2
+	db $1b,  2
+	db $01,  5
+	db $15,  2
+	db $0a,  4
+	db $0e, 13
+	db $22,  5
+	db $31,  6
+	db $02,  5
+	db $1d,  6
+	db $3b,  7
+	db $0e, 13
+
+BattleTowerTrainer15DataTable:
+	db $1b,  2
+	db $2c,  4
+	db $0d, 13
+	db $34,  3
+	db $00,  3
+	db $11, 13
+	db $1b,  8
+	db $31,  4
+	db $0b, 13
+	db $2f,  8
+	db $01,  5
+	db $00,  0
+	db $06,  5
+	db $10,  5
+	db $0f,  6
+	db $11, 13
+	db $06,  5
+	db $00,  0
+
+BattleTowerTrainer16DataTable:
+	db $42,  3
+	db $30,  4
+	db $1f, 11
+	db $16, 14
+	db $10,  7
+	db $34, 13
+	db $17, 14
+	db $04, 13
+	db $00,  0
+	db $42,  3
+	db $19,  8
+	db $30,  4
+	db $0c,  5
+	db $35,  5
+	db $01,  5
+	db $1e,  6
+	db $36,  8
+	db $41, 13
+
+BattleTowerTrainer17DataTable:
+	db $18,  3
+	db $42,  3
+	db $43,  4
+	db $3a, 11
+	db $3b, 11
+	db $03,  5
+	db $2c,  5
+	db $06,  5
+	db $1b,  3
+	db $43,  4
+	db $39, 11
+	db $3c,  4
+	db $14, 11
+	db $0f,  5
+	db $06,  5
+	db $40,  3
+	db $3f,  4
+	db $20, 14
+
+BattleTowerTrainer18DataTable:
+	db $0c,  5
+	db $36,  7
+	db $30,  4
+	db $27, 11
+	db $10,  8
+	db $31, 13
+	db $11, 14
+	db $30,  4
+	db $41,  3
+	db $07, 13
+	db $2f,  8
+	db $03,  5
+	db $06,  5
+	db $3f,  6
+	db $11, 14
+	db $30,  4
+	db $30,  7
+	db $06,  5
+
+BattleTowerTrainer19DataTable:
+	db $36,  3
+	db $06,  6
+	db $44,  4
+	db $0b, 14
+	db $16, 13
+	db $00,  5
+	db $32, 13
+	db $08,  6
+	db $09, 14
+	db $44,  4
+	db $09,  8
+	db $22, 13
+	db $04, 14
+	db $09, 14
+	db $44,  4
+	db $29,  8
+	db $05, 13
+	db $00,  0
+
+BattleTowerTrainer20DataTable:
+	db $3f,  6
+	db $2c,  4
+	db $34, 13
+	db $14,  5
+	db $13,  2
+	db $04,  2
+	db $0c,  5
+	db $3f,  4
+	db $38, 13
+	db $02,  3
+	db $29,  8
+	db $32, 13
+	db $35,  5
+	db $15,  6
+	db $40,  5
+	db $02,  3
+	db $34,  7
+	db $04, 13
+
+BattleTowerTrainer21DataTable:
+	db $12,  3
+	db $02,  4
+	db $07,  7
+	db $28,  4
+	db $2c, 13
+	db $00,  5
+	db $2c,  3
+	db $12,  3
+	db $2b,  6
+	db $0a,  4
+	db $06, 13
+	db $31, 13
+	db $2c,  3
+	db $12,  3
+	db $06,  4
+	db $0d,  6
+	db $28, 11
+	db $02,  5
+
+BattleTowerTrainer22DataTable:
+	db $41,  4
+	db $3c, 11
+	db $34, 13
+	db $40,  3
+	db $00,  3
+	db $0d, 13
+	db $13, 12
+	db $33,  8
+	db $31, 13
+	db $1e,  9
+	db $27,  7
+	db $3b, 13
+	db $22,  8
+	db $15,  4
+	db $11, 13
+	db $2c,  3
+	db $0c,  4
+	db $3b, 13
+
+BattleTowerTrainer23DataTable:
+	db $03, 10
+	db $3a, 13
+	db $2c,  4
+	db $1c, 11
+	db $35,  7
+	db $26, 13
+	db $24,  9
+	db $43,  4
+	db $26, 13
+	db $0f,  3
+	db $1f,  7
+	db $04,  5
+	db $02,  3
+	db $24,  8
+	db $26, 13
+	db $3f,  3
+	db $13,  4
+	db $04,  5
+
+BattleTowerTrainer24DataTable:
+	db $06,  5
+	db $06,  5
+	db $06,  5
+	db $06,  5
+	db $2c,  4
+	db $03,  5
+	db $06,  5
+	db $06,  5
+	db $06,  5
+	db $06,  5
+	db $07,  4
+	db $03,  5
+	db $06,  5
+	db $06,  5
+	db $06,  5
+	db $06,  5
+	db $33,  4
+	db $03,  5
+
+BattleTowerTrainer25DataTable:
+	db $27,  5
+	db $01,  5
+	db $00,  0
+	db $18,  4
+	db $19, 13
+	db $01,  5
+	db $41,  5
+	db $00,  0
+	db $00,  0
+	db $16,  6
+	db $3d,  4
+	db $19, 13
+	db $20,  4
+	db $05,  5
+	db $00,  0
+	db $21,  3
+	db $0c,  4
+	db $19, 13
+
+BattleTowerTrainer26DataTable:
+	db $03,  2
+	db $43,  3
+	db $27,  4
+	db $28,  4
+	db $2d, 13
+	db $00,  5
+	db $30,  5
+	db $04,  5
+	db $02,  3
+	db $38,  6
+	db $3e,  4
+	db $41, 13
+	db $16, 14
+	db $04,  5
+	db $02,  3
+	db $38,  6
+	db $20,  4
+	db $41, 13
+
+BattleTowerTrainer27DataTable:
+	db $34,  3
+	db $00,  3
+	db $11, 13
+	db $03,  4
+	db $1c, 11
+	db $07, 13
+	db $29,  5
+	db $00,  5
+	db $00,  0
+	db $40,  4
+	db $11, 13
+	db $3e, 13
+	db $03,  6
+	db $11, 13
+	db $00,  5
+	db $16, 14
+	db $0d,  6
+	db $20,  6
+
+BattleTowerTrainer28DataTable:
+	db $19,  3
+	db $17, 11
+	db $20,  6
+	db $1b, 11
+	db $06, 12
+	db $1a, 11
+	db $34,  3
+	db $06,  4
+	db $20,  6
+	db $1b, 11
+	db $06, 12
+	db $1a, 11
+	db $34,  3
+	db $36,  4
+	db $20,  6
+	db $1b, 11
+	db $06, 12
+	db $1a, 11
+
+BattleTowerTrainer29DataTable:
+	db $0a,  3
+	db $0c, 12
+	db $25, 10
+	db $21, 14
+	db $2c,  4
+	db $03,  2
+	db $10,  9
+	db $03,  8
+	db $09,  6
+	db $0a,  3
+	db $31,  4
+	db $16, 13
+	db $27,  5
+	db $17,  7
+	db $04,  5
+	db $02, 12
+	db $0a,  9
+	db $2f, 13
+
+BattleTowerTrainer30DataTable:
+	db $15,  2
+	db $2c,  4
+	db $03,  2
+	db $24,  4
+	db $39,  4
+	db $0f, 13
+	db $1e,  2
+	db $11,  2
+	db $01,  5
+	db $0d,  4
+	db $39,  8
+	db $05, 13
+	db $29,  5
+	db $08,  2
+	db $00,  5
+	db $43,  3
+	db $0c,  4
+	db $3b, 13
+
+BattleTowerTrainer31DataTable:
+	db $10, 11
+	db $04,  4
+	db $00,  5
+	db $05,  8
+	db $21, 13
+	db $00,  0
+	db $1f,  5
+	db $01,  2
+	db $00,  5
+	db $18,  3
+	db $3c,  8
+	db $31, 13
+	db $02,  6
+	db $23, 11
+	db $31,  3
+	db $43,  3
+	db $13,  7
+	db $16, 13
+
+BattleTowerTrainer32DataTable:
+	db $0f, 14
+	db $19, 13
+	db $00,  5
+	db $0b, 14
+	db $2c,  4
+	db $19, 13
+	db $0e, 14
+	db $2c,  4
+	db $06,  5
+	db $1f,  7
+	db $19, 13
+	db $01,  5
+	db $06,  5
+	db $37,  3
+	db $29,  4
+	db $32, 13
+	db $19, 13
+	db $01,  5
+
+BattleTowerTrainer33DataTable:
+	db $35,  3
+	db $06,  4
+	db $0d,  6
+	db $29, 11
+	db $05, 13
+	db $00,  0
+	db $16, 14
+	db $30,  4
+	db $0b, 13
+	db $29,  8
+	db $16, 13
+	db $00,  5
+	db $11, 14
+	db $30,  4
+	db $30,  7
+	db $06,  5
+	db $29,  8
+	db $03,  5
+
+BattleTowerTrainer34DataTable:
+	db $18,  4
+	db $03,  5
+	db $0b, 13
+	db $2c,  4
+	db $1e, 12
+	db $01,  5
+	db $1f,  5
+	db $1d,  7
+	db $1d,  7
+	db $2c,  4
+	db $21,  7
+	db $01,  5
+	db $0a,  5
+	db $12,  2
+	db $32, 13
+	db $11, 12
+	db $0c,  6
+	db $1a, 13
+
+BattleTowerTrainer35DataTable:
+	db $0c, 12
+	db $37,  3
+	db $1a,  3
+	db $40,  4
+	db $23, 11
+	db $26, 10
+	db $3f,  6
+	db $09,  4
+	db $1b,  7
+	db $37,  3
+	db $22,  8
+	db $27,  6
+	db $04, 14
+	db $03,  5
+	db $00,  0
+	db $26, 10
+	db $3b,  8
+	db $1b,  7
+
+BattleTowerTrainer36DataTable:
+	db $18,  3
+	db $1b,  8
+	db $29, 11
+	db $40,  8
+	db $32, 13
+	db $00,  5
+	db $2f,  6
+	db $29, 11
+	db $0b, 13
+	db $2f,  8
+	db $23, 13
+	db $02, 13
+	db $35,  5
+	db $13, 14
+	db $2e,  6
+	db $22,  6
+	db $2f,  8
+	db $27,  6
+
+BattleTowerTrainer37DataTable:
+	db $1c,  3
+	db $02, 14
+	db $31,  3
+	db $2a, 13
+	db $24, 13
+	db $00,  0
+	db $18,  3
+	db $0b, 13
+	db $30,  8
+	db $40,  8
+	db $04,  5
+	db $00,  0
+	db $1c,  5
+	db $01,  5
+	db $03,  3
+	db $02, 14
+	db $27,  4
+	db $34, 13
+
+BattleTowerTrainer38DataTable:
+	db $33,  3
+	db $30,  4
+	db $2c,  4
+	db $1c, 11
+	db $35,  7
+	db $00,  5
+	db $30,  4
+	db $2c,  4
+	db $20,  6
+	db $1e,  9
+	db $40,  6
+	db $40,  4
+	db $30,  4
+	db $2c,  4
+	db $20,  6
+	db $1e,  9
+	db $40,  6
+	db $22,  7
+
+BattleTowerTrainer39DataTable:
+	db $22, 12
+	db $22, 12
+	db $16, 10
+	db $35, 13
+	db $1c, 11
+	db $3f, 13
+	db $13,  5
+	db $16, 10
+	db $40,  6
+	db $23,  7
+	db $06, 13
+	db $06,  5
+	db $3f,  6
+	db $16, 10
+	db $16, 13
+	db $37,  3
+	db $2c,  4
+	db $26,  7
+
+BattleTowerTrainer40DataTable:
+	db $0e,  6
+	db $05,  8
+	db $04, 13
+	db $00,  0
+	db $00,  0
+	db $00,  0
+	db $14,  5
+	db $06,  5
+	db $12,  2
+	db $00,  0
+	db $00,  0
+	db $00,  0
+	db $23,  5
+	db $01,  6
+	db $18, 13
+	db $00,  0
+	db $00,  0
+	db $00,  0
+
+BattleTowerTrainer41DataTable:
+	db $18,  3
+	db $27,  3
+	db $03,  5
+	db $20, 11
+	db $27,  6
+	db $06,  5
+	db $20, 14
+	db $12,  7
+	db $2b, 13
+	db $2c,  3
+	db $0e,  8
+	db $35,  7
+	db $37,  3
+	db $27,  3
+	db $03,  5
+	db $42,  7
+	db $2f,  8
+	db $06,  5
+
+BattleTowerTrainer42DataTable:
+	db $36,  3
+	db $30,  4
+	db $17,  4
+	db $2c,  3
+	db $0c,  4
+	db $3b, 13
+	db $18,  3
+	db $32,  7
+	db $15, 13
+	db $35,  5
+	db $0d,  7
+	db $07, 13
+	db $09,  5
+	db $06,  5
+	db $0f, 12
+	db $09,  4
+	db $07, 13
+	db $3b, 13
+
+BattleTowerTrainer43DataTable:
+	db $0b,  5
+	db $14,  6
+	db $24,  4
+	db $0a, 13
+	db $3c, 13
+	db $00,  5
+	db $14,  5
+	db $09,  2
+	db $32, 13
+	db $1e,  6
+	db $04,  7
+	db $06, 13
+	db $1a,  5
+	db $33,  4
+	db $03,  5
+	db $16,  2
+	db $00,  2
+	db $07,  5
+
+BattleTowerTrainer44DataTable:
+	db $0a,  3
+	db $32,  7
+	db $0b, 14
+	db $22,  6
+	db $2c,  4
+	db $29, 11
+	db $0a,  3
+	db $12, 13
+	db $24,  4
+	db $1a, 11
+	db $33, 13
+	db $03, 13
+	db $0a,  3
+	db $35,  4
+	db $1b,  7
+	db $06,  5
+	db $1e,  6
+	db $14,  7
+
+BattleTowerTrainer45DataTable:
+	db $0e,  6
+	db $2c,  4
+	db $00, 13
+	db $06,  3
+	db $31,  4
+	db $04, 13
+	db $0c,  5
+	db $12,  2
+	db $00,  5
+	db $40,  3
+	db $09,  4
+	db $01, 13
+	db $35,  5
+	db $36,  8
+	db $00,  5
+	db $02,  3
+	db $31,  4
+	db $21, 13
+
+BattleTowerTrainer46DataTable:
+	db $22,  5
+	db $07, 14
+	db $30,  4
+	db $c5,  0
+	db $10,  2
+	db $01,  5
+	db $0c, 12
+	db $00,  1
+	db $30,  4
+	db $82,  0
+	db $21,  4
+	db $01,  5
+	db $10,  1
+	db $11,  5
+	db $30,  4
+	db $c3,  0
+	db $3f,  4
+	db $06,  5
+
+BattleTowerTrainer47DataTable:
+	db $3a,  7
+	db $3b,  7
+	db $36,  3
+	db $30,  4
+	db $21,  4
+	db $06, 13
+	db $17, 14
+	db $03,  5
+	db $00,  0
+	db $3f,  6
+	db $21,  4
+	db $21, 13
+	db $36,  5
+	db $36,  3
+	db $30,  4
+	db $33,  6
+	db $3f,  4
+	db $0c, 13
+
+BattleTowerTrainer48DataTable:
+	db $43,  3
+	db $20,  4
+	db $41, 13
+	db $17,  6
+	db $06,  3
+	db $0a,  4
+	db $3a,  6
+	db $13,  4
+	db $04, 13
+	db $08,  6
+	db $3f,  4
+	db $31, 13
+	db $43,  3
+	db $39,  4
+	db $04,  5
+	db $17,  6
+	db $39,  4
+	db $41, 13
+
+BattleTowerTrainer49DataTable:
+	db $36,  3
+	db $16,  4
+	db $08,  6
+	db $09,  8
+	db $06, 13
+	db $00,  0
+	db $1f, 11
+	db $03,  5
+	db $12, 14
+	db $0f, 14
+	db $2c, 13
+	db $00,  5
+	db $3a,  6
+	db $16,  4
+	db $38,  6
+	db $38,  6
+	db $2c, 13
+	db $00,  5
+
+BattleTowerTrainer50DataTable:
+	db $11,  5
+	db $25,  3
+	db $33,  4
+	db $2f,  8
+	db $19, 13
+	db $00,  5
+	db $11,  5
+	db $25,  3
+	db $3f,  6
+	db $26,  4
+	db $19, 13
+	db $00,  5
+	db $11,  5
+	db $21,  3
+	db $35,  4
+	db $14,  7
+	db $19, 13
+	db $06,  5
+
+BattleTowerTrainer51DataTable:
+	db $2c,  4
+	db $0a, 13
+	db $04,  5
+	db $33,  3
+	db $29, 11
+	db $05, 13
+	db $00,  6
+	db $04,  5
+	db $09,  2
+	db $33,  3
+	db $07,  4
+	db $35,  7
+	db $33,  3
+	db $3a,  8
+	db $05, 13
+	db $3f,  6
+	db $29,  8
+	db $05, 13
+
+BattleTowerTrainer52DataTable:
+	db $05,  3
+	db $1b,  4
+	db $41,  3
+	db $39, 11
+	db $3a, 11
+	db $01,  5
+	db $2c,  4
+	db $03,  5
+	db $00,  0
+	db $40,  7
+	db $3e, 13
+	db $00,  5
+	db $00, 14
+	db $09,  5
+	db $04,  5
+	db $19,  9
+	db $1d, 11
+	db $03,  5
+
+BattleTowerTrainer53DataTable:
+	db $1c, 12
+	db $20,  6
+	db $05,  8
+	db $3e, 13
+	db $00,  5
+	db $00,  0
+	db $18,  3
+	db $1f, 14
+	db $11, 10
+	db $1c, 11
+	db $15, 11
+	db $1c,  6
+	db $03, 14
+	db $06, 12
+	db $21, 12
+	db $14, 13
+	db $06,  5
+	db $1f,  8
+
+BattleTowerTrainer54DataTable:
+	db $37,  3
+	db $0e,  1
+	db $08,  1
+	db $19,  6
+	db $27, 11
+	db $03,  2
+	db $0e,  1
+	db $08,  1
+	db $1b,  8
+	db $05,  8
+	db $21, 13
+	db $00,  0
+	db $36,  3
+	db $33,  4
+	db $04,  5
+	db $00,  4
+	db $41,  8
+	db $3b, 13
+
+BattleTowerTrainer55DataTable:
+	db $06,  2
+	db $00,  5
+	db $34,  3
+	db $00,  3
+	db $0d, 13
+	db $00,  5
+	db $3c,  6
+	db $05,  8
+	db $16,  4
+	db $2f,  8
+	db $33, 13
+	db $02, 13
+	db $1c,  5
+	db $00,  5
+	db $18,  3
+	db $05,  8
+	db $1b,  4
+	db $0c, 13
+
+BattleTowerTrainer56DataTable:
+	db $2c,  4
+	db $13,  9
+	db $20,  6
+	db $39,  3
+	db $20,  4
+	db $3c, 13
+	db $05,  3
+	db $43,  4
+	db $0b, 13
+	db $22,  4
+	db $06, 13
+	db $31, 13
+	db $24,  8
+	db $00,  5
+	db $02,  3
+	db $09,  8
+	db $06, 13
+	db $3b, 13
+
+BattleTowerTrainer57DataTable:
+	db $06,  3
+	db $20,  4
+	db $24, 13
+	db $24,  4
+	db $10, 11
+	db $00,  5
+	db $39,  7
+	db $00,  5
+	db $2a,  6
+	db $04,  4
+	db $3c,  4
+	db $00,  0
+	db $24,  4
+	db $1c, 11
+	db $07, 13
+	db $2f,  8
+	db $09,  6
+	db $06,  5
+
+BattleTowerTrainer58DataTable:
+	db $44,  7
+	db $23, 11
+	db $33, 13
+	db $2c,  4
+	db $20,  6
+	db $24,  8
+	db $24,  8
+	db $00,  5
+	db $0e, 14
+	db $12,  8
+	db $09, 11
+	db $28,  6
+	db $24,  8
+	db $00,  5
+	db $02,  3
+	db $13,  6
+	db $11,  8
+	db $41, 13
+
+BattleTowerTrainer59DataTable:
+	db $36,  3
+	db $06,  6
+	db $30,  4
+	db $0f, 11
+	db $02, 11
+	db $3b, 13
+	db $31, 13
+	db $00,  5
+	db $39,  3
+	db $20,  4
+	db $21, 13
+	db $00,  0
+	db $04, 14
+	db $02,  5
+	db $06,  6
+	db $20, 14
+	db $0b,  6
+	db $27,  6
+
+BattleTowerTrainer60DataTable:
+	db $14,  5
+	db $04,  2
+	db $09, 14
+	db $08,  8
+	db $2e,  8
+	db $41, 13
+	db $34,  5
+	db $2e,  8
+	db $21, 13
+	db $3f,  3
+	db $18,  8
+	db $00,  5
+	db $36,  5
+	db $05,  2
+	db $00,  5
+	db $17,  6
+	db $39,  4
+	db $00,  5
+
+BattleTowerTrainer61DataTable:
+	db $34,  3
+	db $00,  3
+	db $11, 13
+	db $41,  8
+	db $0b,  6
+	db $06,  4
+	db $39,  7
+	db $00,  5
+	db $00,  0
+	db $36,  3
+	db $30,  4
+	db $07,  8
+	db $10,  5
+	db $15,  8
+	db $00,  5
+	db $3a,  6
+	db $1e,  6
+	db $14, 13
+
+BattleTowerTrainer62DataTable:
+	db $37,  5
+	db $37,  5
+	db $00,  5
+	db $38,  5
+	db $38,  5
+	db $41,  5
+	db $25,  5
+	db $04,  5
+	db $32,  5
+	db $31,  5
+	db $41,  5
+	db $41,  5
+	db $0f,  5
+	db $04,  5
+	db $0f,  5
+	db $0f,  5
+	db $16,  5
+	db $01,  5
+
+BattleTowerTrainer63DataTable:
+	db $1f, 14
+	db $36,  4
+	db $40, 13
+	db $2f,  8
+	db $1a, 13
+	db $00,  5
+	db $21,  6
+	db $35,  5
+	db $24,  6
+	db $1a,  6
+	db $12, 14
+	db $00,  0
+	db $1b,  5
+	db $31,  6
+	db $02,  5
+	db $28, 13
+	db $27, 13
+	db $00,  0
+
+BattleTowerTrainer64DataTable:
+	db $41,  8
+	db $0b,  6
+	db $37,  3
+	db $08,  6
+	db $20,  4
+	db $3b, 13
+	db $15,  2
+	db $16,  6
+	db $26,  7
+	db $13, 12
+	db $33,  8
+	db $32, 13
+	db $2d,  7
+	db $00,  5
+	db $35,  3
+	db $0b,  4
+	db $28,  6
+	db $06,  5
+
+BattleTowerTrainer65DataTable:
+	db $0c,  8
+	db $2c,  4
+	db $1c, 11
+	db $06,  7
+	db $0a, 13
+	db $03,  5
+	db $30,  6
+	db $06,  7
+	db $00,  5
+	db $2c,  4
+	db $20,  6
+	db $24,  7
+	db $30,  6
+	db $0b,  7
+	db $00,  5
+	db $2c,  4
+	db $20,  6
+	db $22,  7
+
+BattleTowerTrainer66DataTable:
+	db $22, 12
+	db $22, 12
+	db $0a,  9
+	db $04, 11
+	db $02,  7
+	db $27,  6
+	db $0f, 12
+	db $0a, 10
+	db $22,  6
+	db $02,  7
+	db $27,  6
+	db $04,  5
+	db $3a,  6
+	db $0e, 10
+	db $22,  6
+	db $05,  8
+	db $02,  7
+	db $04,  5
+
+BattleTowerTrainer67DataTable:
+	db $2d, 11
+	db $02,  8
+	db $37, 13
+	db $10,  5
+	db $29,  7
+	db $03,  5
+	db $20, 14
+	db $0e, 14
+	db $0d,  6
+	db $42,  7
+	db $30,  8
+	db $28,  6
+	db $10,  5
+	db $04,  5
+	db $04,  5
+	db $10,  5
+	db $10,  5
+	db $04,  5
+
+BattleTowerTrainer68DataTable:
+	db $3f,  3
+	db $16, 14
+	db $3f,  8
+	db $0b, 13
+	db $2f,  8
+	db $41, 13
+	db $34,  5
+	db $00,  5
+	db $02,  3
+	db $3a,  6
+	db $31,  7
+	db $31, 13
+	db $21, 14
+	db $03,  5
+	db $3f,  3
+	db $16, 14
+	db $26,  7
+	db $03,  5
+
+BattleTowerTrainer69DataTable:
+	db $3a,  6
+	db $2c,  3
+	db $12,  3
+	db $17, 12
+	db $28, 11
+	db $06, 13
+	db $3a,  6
+	db $17, 12
+	db $23, 11
+	db $0d,  6
+	db $2f,  8
+	db $22, 13
+	db $14,  7
+	db $04,  5
+	db $17, 12
+	db $1c, 11
+	db $1b,  7
+	db $00,  5
+
+BattleTowerTrainer70DataTable:
+	db $1b,  2
+	db $00,  5
+	db $0c,  8
+	db $2c,  4
+	db $23, 11
+	db $32, 13
+	db $2b,  7
+	db $1f,  4
+	db $3b, 13
+	db $09,  7
+	db $09,  7
+	db $00,  5
+	db $26,  5
+	db $00,  5
+	db $3f,  3
+	db $22,  7
+	db $d1,  0
+	db $32, 13
+BattleTowerTrainerDataEnd:
--- a/engine/battle_start.asm
+++ b/engine/battle_start.asm
@@ -26,8 +26,8 @@
 	ld a, $5
 	ld [rSVBK], a
 
-	ld hl, wMapPals
-	ld bc, $0040
+	ld hl, UnknBGPals
+	ld bc, 8 palettes
 	xor a
 	call ByteFill
 
@@ -84,7 +84,7 @@
 
 Function8c2a0: ; 8c2a0
 	call LoadTrainerBattlePokeballTiles
-	ld hl, VBGMap0
+	hlbgcoord 0, 0
 	call Function8c2cf
 	ret
 ; 8c2aa
@@ -308,9 +308,11 @@
 
 StartTrainerBattle_SetUpForWavyOutro: ; 8c3e8 (23:43e8)
 	callba Function5602
-	ld a, $5
+	ld a, $5 ; BANK(LYOverrides)
 	ld [rSVBK], a
+
 	call StartTrainerBattle_NextScene
+
 	ld a, $43
 	ld [hLCDStatCustom], a
 	xor a
@@ -342,8 +344,8 @@
 	ld d, [hl]
 	add [hl]
 	ld [hl], a
-	ld a, $90
-	ld bc, wd100
+	ld a, LYOverridesEnd - LYOverrides
+	ld bc, LYOverrides
 	ld e, $0
 
 .loop
@@ -364,7 +366,7 @@
 
 StartTrainerBattle_SetUpForSpinOutro: ; 8c43d (23:443d)
 	callba Function5602
-	ld a, $5
+	ld a, $5 ; BANK(LYOverrides)
 	ld [rSVBK], a
 	call StartTrainerBattle_NextScene
 	xor a
@@ -507,7 +509,7 @@
 
 StartTrainerBattle_SetUpForRandomScatterOutro: ; 8c578 (23:4578)
 	callba Function5602
-	ld a, $5
+	ld a, $5 ; BANK(LYOverrides)
 	ld [rSVBK], a
 	call StartTrainerBattle_NextScene
 	ld a, $10
@@ -659,7 +661,7 @@
 	ld [rSVBK], a
 	call .copypals
 	push hl
-	ld de, wMapPals + 8 * 7
+	ld de, UnknBGPals + 8 * 7
 	ld bc, $8
 	call CopyBytes
 	pop hl
@@ -678,15 +680,15 @@
 	ret
 
 .copypals: ; 8c677 (23:4677)
-	ld de, wMapPals + 8 * 7
+	ld de, UnknBGPals + 8 * 7
 	call .copy
 	ld de, BGPals + 8 * 7
 	call .copy
-	ld de, Unkn2Pals + 8 * 6
+	ld de, UnknOBPals + 8 * 6
 	call .copy
 	ld de, OBPals + 8 * 6
 	call .copy
-	ld de, Unkn2Pals + 8 * 7
+	ld de, UnknOBPals + 8 * 7
 	call .copy
 	ld de, OBPals + 8 * 7
 
@@ -739,10 +741,12 @@
 	push af
 	ld a, $5
 	ld [rSVBK], a
+
 	ld hl, LYOverrides
 	call .wipe
 	ld hl, LYOverridesBackup
 	call .wipe
+
 	pop af
 	ld [rSVBK], a
 	ret
--- a/engine/billspc.asm
+++ b/engine/billspc.asm
@@ -1165,13 +1165,13 @@
 	cp $f
 	jr z, .asm_e2bf5
 	ld b, a
-	call Functione3396
+	call GetBoxPointer
 	ld a, b
 	call GetSRAMBank
 	push hl
-	ld bc, $35
+	ld bc, sBoxMon1Level - sBox
 	add hl, bc
-	ld bc, $20
+	ld bc, BOXMON_STRUCT_LENGTH
 	ld a, e
 	call AddNTimes
 	ld a, [hl]
@@ -1178,17 +1178,17 @@
 	ld [TempMonLevel], a
 	pop hl
 	push hl
-	ld bc, $17
+	ld bc, sBoxMon1Item - sBox
 	add hl, bc
-	ld bc, $20
+	ld bc, BOXMON_STRUCT_LENGTH
 	ld a, e
 	call AddNTimes
 	ld a, [hl]
 	ld [TempMonItem], a
 	pop hl
-	ld bc, $2b
+	ld bc, sBoxMon1DVs - sBox
 	add hl, bc
-	ld bc, $20
+	ld bc, BOXMON_STRUCT_LENGTH
 	ld a, e
 	call AddNTimes
 	ld de, TempMonDVs
@@ -1201,19 +1201,19 @@
 	ret
 .asm_e2bc6
 	ld hl, PartyMon1Level
-	ld bc, $30
+	ld bc, PARTYMON_STRUCT_LENGTH
 	ld a, e
 	call AddNTimes
 	ld a, [hl]
 	ld [TempMonLevel], a
 	ld hl, PartyMon1Item
-	ld bc, $30
+	ld bc, PARTYMON_STRUCT_LENGTH
 	ld a, e
 	call AddNTimes
 	ld a, [hl]
 	ld [TempMonItem], a
 	ld hl, PartyMon1DVs
-	ld bc, $30
+	ld bc, PARTYMON_STRUCT_LENGTH
 	ld a, e
 	call AddNTimes
 	ld de, TempMonDVs
@@ -1228,7 +1228,7 @@
 	ld a, BANK(sBox)
 	call GetSRAMBank
 	ld hl, sBoxMon1Level
-	ld bc, $20
+	ld bc, BOXMON_STRUCT_LENGTH
 	ld a, e
 	call AddNTimes
 	ld a, [hl]
@@ -1235,7 +1235,7 @@
 	ld [TempMonLevel], a
 
 	ld hl, sBoxMon1Item
-	ld bc, $20
+	ld bc, BOXMON_STRUCT_LENGTH
 	ld a, e
 	call AddNTimes
 	ld a, [hl]
@@ -1242,7 +1242,7 @@
 	ld [TempMonItem], a
 
 	ld hl, sBoxMon1DVs
-	ld bc, $20
+	ld bc, BOXMON_STRUCT_LENGTH
 	ld a, e
 	call AddNTimes
 	ld de, TempMonDVs
@@ -1307,6 +1307,7 @@
 	ld de, String_e2c67
 	call PlaceString
 	ret
+
 .asm_e2c7c
 	inc de
 	ld a, [de]
@@ -1320,13 +1321,13 @@
 	cp $f
 	jr z, .asm_e2cf1
 	push hl
-	call Functione3396
+	call GetBoxPointer
 	ld a, b
 	call GetSRAMBank
 	push hl
-	ld bc, $16
+	ld bc, sBoxMons - sBox
 	add hl, bc
-	ld bc, $20
+	ld bc, BOXMON_STRUCT_LENGTH
 	ld a, e
 	call AddNTimes
 	ld a, [hl]
@@ -1333,13 +1334,13 @@
 	pop hl
 	and a
 	jr z, .asm_e2cc2
-	ld bc, $372
+	ld bc, sBoxMonNicknames - sBox
 	add hl, bc
-	ld bc, $b
+	ld bc, PKMN_NAME_LENGTH
 	ld a, e
 	call AddNTimes
 	ld de, StringBuffer1
-	ld bc, $b
+	ld bc, PKMN_NAME_LENGTH
 	call CopyBytes
 	call CloseSRAM
 	pop hl
@@ -1346,10 +1347,12 @@
 	ld de, StringBuffer1
 	call PlaceString
 	ret
+
 .asm_e2cc2
 	call CloseSRAM
 	pop hl
 	jr .asm_e2d23
+
 .asm_e2cc8
 	push hl
 	ld hl, PartySpecies
@@ -1359,19 +1362,21 @@
 	and a
 	jr z, .asm_e2cee
 	ld hl, PartyMonNicknames
-	ld bc, $b
+	ld bc, PKMN_NAME_LENGTH
 	ld a, e
 	call AddNTimes
 	ld de, StringBuffer1
-	ld bc, $b
+	ld bc, PKMN_NAME_LENGTH
 	call CopyBytes
 	pop hl
 	ld de, StringBuffer1
 	call PlaceString
 	ret
+
 .asm_e2cee
 	pop hl
 	jr .asm_e2d23
+
 .asm_e2cf1
 	push hl
 	ld a, BANK(sBox)
@@ -1394,6 +1399,7 @@
 	ld de, StringBuffer1
 	call PlaceString
 	ret
+
 .asm_e2d1f
 	call CloseSRAM
 	pop hl
@@ -1422,7 +1428,7 @@
 	cp $f
 	jr z, .asm_e2db7
 	ld b, a
-	call Functione3396
+	call GetBoxPointer
 	ld a, b
 	call GetSRAMBank
 	inc hl
@@ -1447,6 +1453,7 @@
 	inc a
 	ld [wd004], a
 	jr .asm_e2d57
+
 .asm_e2d79
 	call CloseSRAM
 	ld a, $ff
@@ -1455,6 +1462,7 @@
 	inc a
 	ld [wcb2c], a
 	ret
+
 .asm_e2d87
 	ld hl, PartySpecies
 .asm_e2d8a
@@ -1478,6 +1486,7 @@
 	inc a
 	ld [wd004], a
 	jr .asm_e2d8a
+
 .asm_e2dac
 	ld a, $ff
 	ld [de], a
@@ -1485,6 +1494,7 @@
 	inc a
 	ld [wcb2c], a
 	ret
+
 .asm_e2db7
 	ld a, BANK(sBox)
 	call GetSRAMBank
@@ -1510,6 +1520,7 @@
 	inc a
 	ld [wd004], a
 	jr .asm_e2dbf
+
 .asm_e2de1
 	call CloseSRAM
 	ld a, $ff
@@ -1538,10 +1549,11 @@
 	jr nz, .asm_e2e0b
 	call ClearSprites
 	ret
+
 .asm_e2e0b
 	ld hl, Unknown_e2e2b
 	ld de, Sprites
-.done1
+.loop
 	ld a, [hl]
 	cp $ff
 	ret z
@@ -1561,7 +1573,7 @@
 	ld a, [hli]
 	ld [de], a
 	inc de
-	jr .done1
+	jr .loop
 ; e2e2b (38:6e2b)
 
 Unknown_e2e2b: ; e2e2b
@@ -1795,11 +1807,11 @@
 	ld a, BANK(sBox)
 	call GetSRAMBank
 	ld hl, sBoxSpecies
-	call Functione3357
+	call CopySpeciesToTemp
 	ld hl, sBoxMonNicknames
-	call Functione3363
+	call CopyNicknameToTemp
 	ld hl, sBoxMonOT
-	call Functione3376
+	call CopyOTNameToTemp
 	ld hl, sBoxMons
 	ld bc, BOXMON_STRUCT_LENGTH
 	ld a, [CurPartyMon]
@@ -1813,11 +1825,11 @@
 
 .asm_e3020
 	ld hl, PartySpecies
-	call Functione3357
+	call CopySpeciesToTemp
 	ld hl, PartyMonNicknames
-	call Functione3363
+	call CopyNicknameToTemp
 	ld hl, PartyMonOT
-	call Functione3376
+	call CopyOTNameToTemp
 	ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species)
 	ld bc, PARTYMON_STRUCT_LENGTH
 	ld a, [CurPartyMon]
@@ -1829,27 +1841,27 @@
 
 .asm_e3048
 	ld b, a
-	call Functione3396
+	call GetBoxPointer
 	ld a, b
 	call GetSRAMBank
 	push hl
 	inc hl
-	call Functione3357
+	call CopySpeciesToTemp
 	pop hl
 	push hl
-	ld bc, $372
+	ld bc, sBoxMonNicknames - sBox
 	add hl, bc
-	call Functione3363
+	call CopyNicknameToTemp
 	pop hl
 	push hl
-	ld bc, $296
+	ld bc, sBoxMonOT - sBox
 	add hl, bc
-	call Functione3376
+	call CopyOTNameToTemp
 	pop hl
-	ld bc, $16
+	ld bc, sBoxMons - sBox
 	add hl, bc
-	ld bc, $20
-	call Functione3389
+	ld bc, BOXMON_STRUCT_LENGTH
+	call CopyMonToTemp
 	call CloseSRAM
 	callba Function5088b
 	ret
@@ -2141,7 +2153,7 @@
 	ld a, [wcb31]
 	dec a
 	ld e, a
-	callba Function14ac2
+	callba MovePkmnWOMail_SaveGame
 	ld a, [wcb30]
 	ld hl, wcb2f
 	add [hl]
@@ -2149,14 +2161,14 @@
 	ld a, $1
 	call GetSRAMBank
 	ld hl, sBoxSpecies
-	call Functione3357
+	call CopySpeciesToTemp
 	ld hl, sBoxMonNicknames
-	call Functione3363
+	call CopyNicknameToTemp
 	ld hl, sBoxMonOT
-	call Functione3376
+	call CopyOTNameToTemp
 	ld hl, sBoxMons
 	ld bc, BOXMON_STRUCT_LENGTH
-	call Functione3389
+	call CopyMonToTemp
 	call CloseSRAM
 	callba Function5088b
 	ld a, PC_DEPOSIT
@@ -2169,7 +2181,7 @@
 	ld a, [wcb2e]
 	dec a
 	ld e, a
-	callba Function14ac2
+	callba MovePkmnWOMail_SaveGame
 	ld a, [wcb2b]
 	ld hl, wcb2a
 	add [hl]
@@ -2184,14 +2196,14 @@
 	add [hl]
 	ld [CurPartyMon], a
 	ld hl, PartySpecies
-	call Functione3357
+	call CopySpeciesToTemp
 	ld hl, PartyMonNicknames
-	call Functione3363
+	call CopyNicknameToTemp
 	ld hl, PartyMonOT
-	call Functione3376
+	call CopyOTNameToTemp
 	ld hl, PartyMon1Species
 	ld bc, PARTYMON_STRUCT_LENGTH
-	call Functione3389
+	call CopyMonToTemp
 	xor a
 	ld [wPokemonWithdrawDepositParameter], a
 	callba Functione039
@@ -2207,7 +2219,7 @@
 	ret
 ; e3357
 
-Functione3357: ; e3357 (38:7357)
+CopySpeciesToTemp: ; e3357 (38:7357)
 	ld a, [CurPartyMon]
 	ld c, a
 	ld b, $0
@@ -2216,36 +2228,36 @@
 	ld [CurPartySpecies], a
 	ret
 
-Functione3363: ; e3363 (38:7363)
-	ld bc, $b
+CopyNicknameToTemp: ; e3363 (38:7363)
+	ld bc, PKMN_NAME_LENGTH
 	ld a, [CurPartyMon]
 	call AddNTimes
 	ld de, wd002
-	ld bc, $b
+	ld bc, PKMN_NAME_LENGTH
 	call CopyBytes
 	ret
 
-Functione3376: ; e3376 (38:7376)
-	ld bc, $b
+CopyOTNameToTemp: ; e3376 (38:7376)
+	ld bc, NAME_LENGTH
 	ld a, [CurPartyMon]
 	call AddNTimes
 	ld de, wd00d
-	ld bc, $b
+	ld bc, NAME_LENGTH
 	call CopyBytes
 	ret
 
-Functione3389: ; e3389 (38:7389)
+CopyMonToTemp: ; e3389 (38:7389)
 	ld a, [CurPartyMon]
 	call AddNTimes
-	ld de, wd018
+	ld de, wd018_Mon
 	call CopyBytes
 	ret
 
-Functione3396: ; e3396 (38:7396)
+GetBoxPointer: ; e3396 (38:7396)
 	dec b
 	ld c, b
 	ld b, 0
-	ld hl, Unknown_e33a6
+	ld hl, .boxes
 rept 3
 	add hl, bc
 endr
@@ -2257,7 +2269,7 @@
 	ret
 ; e33a6 (38:73a6)
 
-Unknown_e33a6: ; e33a6
+.boxes: ; e33a6
 	;  bank, address
 	dba sBox1
 	dba sBox2
@@ -2350,7 +2362,7 @@
 	ld hl, _ChangeBox_menudataheader
 	call CopyMenuDataHeader
 	xor a
-	ld [wd0e4], a
+	ld [wMenuScrollPosition], a
 	hlcoord 0, 4
 	lb bc, 8, 9
 	call TextBox
@@ -2535,7 +2547,7 @@
 ; e36f9
 
 Functione36f9: ; e36f9 (38:76f9)
-	ld hl, MenuDataHeader_0xe377b
+	ld hl, .MenuDataHeader
 	call LoadMenuDataHeader
 	call InterpretMenu2
 	call ExitMenu
@@ -2542,34 +2554,34 @@
 	ret c
 	ld a, [MenuSelection2]
 	cp $1
-	jr z, .asm_e3734
+	jr z, .Switch
 	cp $2
-	jr z, .asm_e3745
+	jr z, .Name
 	cp $3
-	jr z, .asm_e3717
+	jr z, .Print
 	and a
 	ret
 
-.asm_e3717
+.Print
 	call GetBoxCount
 	and a
-	jr z, .asm_e372f
+	jr z, .EmptyBox
 	ld e, l
 	ld d, h
 	ld a, [MenuSelection]
 	dec a
 	ld c, a
-	callba Function844bc
+	callba PrintPCBox
 	call Functione35e2
 	and a
 	ret
 
-.asm_e372f
+.EmptyBox
 	call Functione37be
 	and a
 	ret
 
-.asm_e3734
+.Switch
 	ld a, [MenuSelection]
 	dec a
 	ld e, a
@@ -2576,11 +2588,11 @@
 	ld a, [wCurBox]
 	cp e
 	ret z
-	callba Function14a83
+	callba ChangeBoxSaveGame
 	ret
 
-.asm_e3745
-	ld b, $4
+.Name
+	ld b, $4 ; box
 	ld de, wd002
 	callba NamingScreen
 	call ClearTileMap
@@ -2604,15 +2616,15 @@
 
 	hlcoord 11, 7 ; XXX
 
-MenuDataHeader_0xe377b: ; 0xe377b
+.MenuDataHeader: ; 0xe377b
 	db $40 ; flags
 	db 04, 11 ; start coords
 	db 13, 19 ; end coords
-	dw MenuData2_0xe3783
+	dw .MenuData2
 	db 1 ; default option
 ; 0xe3783
 
-MenuData2_0xe3783: ; 0xe3783
+.MenuData2: ; 0xe3783
 	db $80 ; flags
 	db 4 ; items
 	db "SWITCH@"
--- a/engine/breeding/egg.asm
+++ b/engine/breeding/egg.asm
@@ -192,7 +192,7 @@
 	call ResetWindow
 	call LoadStandardMenuDataHeader
 	call Function16f70
-	call Function2b4d
+	call ExitAllMenus
 	call RestartMapMusic
 	jp LoadMoveSprites
 ; 16f70
@@ -219,7 +219,7 @@
 
 	push de
 
-	callba Function4dbb8
+	callba SetEggMonCaughtData
 	callba MobileFn_10608d
 	ld a, [CurPartyMon]
 	ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species)
@@ -650,7 +650,7 @@
 	ld hl, BattleMonDVs
 	predef GetUnownLetter
 	pop de
-	predef_jump Function5108b
+	predef_jump FrontpicPredef
 
 Function17254: ; 17254 (5:7254)
 	push af
@@ -775,7 +775,7 @@
 
 Function17363: ; 17363 (5:7363)
 	ld [PlayerHPPal], a
-	ld b, $b
+	ld b, SCGB_0B
 	ld c, $0
 	jp GetSGBLayout
 
@@ -792,8 +792,8 @@
 	add $4c
 	ld d, a
 	ld e, $58
-	ld a, $19
-	call Function3b2a
+	ld a, SPRITE_ANIM_INDEX_19
+	call _InitSpriteAnimStruct
 	ld hl, $3
 	add hl, bc
 	ld [hl], $0
@@ -821,8 +821,8 @@
 	ld b, a
 	push hl
 	push bc
-	ld a, $1c
-	call Function3b2a
+	ld a, SPRITE_ANIM_INDEX_1C
+	call _InitSpriteAnimStruct
 	ld hl, $3
 	add hl, bc
 	ld [hl], $0
--- a/engine/buena_phone_scripts.asm
+++ b/engine/buena_phone_scripts.asm
@@ -1,168 +1,170 @@
 BuenaPhoneScript1:
 	checkflag ENGINE_ROCKETS_IN_RADIO_TOWER
-	iftrue UnknownScript_0xa0b73
+	iftrue BuenaPhoneScript_Rocket
 	checkcode VAR_HOUR
-	if_greater_than 17, UnknownScript_0xa0b4b
-	scall UnknownScript_0xa0b32
-	jump UnknownScript_0xa0c0e
+	if_greater_than 17, BuenaPhoneScript_AfterMidnight1
+	scall BuenaPhoneScript_CheckTimeOfDay1
+	jump BuenaPhoneScript_Random1
 
 BuenaPhoneScript2:
 	checkflag ENGINE_ROCKETS_IN_RADIO_TOWER
-	iftrue UnknownScript_0xa0b73
-	scall UnknownScript_0xa0b4f
-	jump UnknownScript_0xa0b77
+	iftrue BuenaPhoneScript_Rocket
+	scall BuenaPhoneScript_CheckTimeOfDay2
+	jump BuenaPhoneScript_Random2
 
-UnknownScript_0xa0b32:
+BuenaPhoneScript_CheckTimeOfDay1:
 	checkmorn
-	iftrue UnknownScript_0xa0b41
+	iftrue .morn
 	checkday
-	iftrue UnknownScript_0xa0b46
+	iftrue .day
 	writetext UnknownText_0xa0d42
 	keeptextopen
 	end
 
-UnknownScript_0xa0b41:
+.morn:
 	writetext UnknownText_0xa0c28
 	keeptextopen
 	end
 
-UnknownScript_0xa0b46:
+.day:
 	writetext UnknownText_0xa0c72
 	keeptextopen
 	end
 
-UnknownScript_0xa0b4b:
+BuenaPhoneScript_AfterMidnight1:
 	writetext UnknownText_0xa0caf
 	end
 
-UnknownScript_0xa0b4f:
+BuenaPhoneScript_CheckTimeOfDay2:
 	checkcode VAR_HOUR
-	if_greater_than 17, UnknownScript_0xa0b6e
+	if_greater_than 17, BuenaPhoneScript_AfterMidnight2
 	checkmorn
-	iftrue UnknownScript_0xa0b64
+	iftrue .morn
 	checkday
-	iftrue UnknownScript_0xa0b69
+	iftrue .day
 	writetext UnknownText_0xa0e29
 	keeptextopen
 	end
 
-UnknownScript_0xa0b64:
+.morn:
 	writetext UnknownText_0xa0d96
 	keeptextopen
 	end
 
-UnknownScript_0xa0b69:
+.day:
 	writetext UnknownText_0xa0dcf
 	keeptextopen
 	end
 
-UnknownScript_0xa0b6e:
+BuenaPhoneScript_AfterMidnight2:
 	writetext UnknownText_0xa0e01
 	keeptextopen
 	end
 
-UnknownScript_0xa0b73:
+BuenaPhoneScript_Rocket:
 	writetext UnknownText_0xa0e5e
 	end
 
-UnknownScript_0xa0b77:
+BuenaPhoneScript_Random2:
 	checkevent EVENT_BEAT_ELITE_FOUR
-	iftrue UnknownScript_0xa0b82
+	iftrue .PostE4
 	random 11
-	jump UnknownScript_0xa0b84
+	jump .Jumptable
 
-UnknownScript_0xa0b82:
+.PostE4:
 	random 14
 
-UnknownScript_0xa0b84:
-	if_equal 0, UnknownScript_0xa0bbc
-	if_equal 1, UnknownScript_0xa0bc2
-	if_equal 2, UnknownScript_0xa0bc8
-	if_equal 3, UnknownScript_0xa0bce
-	if_equal 4, UnknownScript_0xa0bd4
-	if_equal 5, UnknownScript_0xa0bda
-	if_equal 6, UnknownScript_0xa0be0
-	if_equal 7, UnknownScript_0xa0be6
-	if_equal 8, UnknownScript_0xa0bec
-	if_equal 9, UnknownScript_0xa0bf2
-	if_equal 10, UnknownScript_0xa0bf8
-	if_equal 11, UnknownScript_0xa0bfe
-	if_equal 12, UnknownScript_0xa0c04
-	if_equal 13, UnknownScript_0xa0c0a
+.Jumptable:
+	if_equal 0, .zero
+	if_equal 1, .one
+	if_equal 2, .two
+	if_equal 3, .three
+	if_equal 4, .four
+	if_equal 5, .five
+	if_equal 6, .six
+	if_equal 7, .seven
+	if_equal 8, .eight
+	if_equal 9, .nine
+	if_equal 10, .ten
+	if_equal 11, .eleven
+	if_equal 12, .twelve
+	if_equal 13, .thirteen
 
-UnknownScript_0xa0bbc:
+.zero:
 	writetext UnknownText_0xa0efb
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0bc2:
+.one:
 	writetext UnknownText_0xa0fcf
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0bc8:
+.two:
 	writetext UnknownText_0xa109d
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0bce:
+.three:
 	writetext UnknownText_0xa1143
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0bd4:
+.four:
 	writetext UnknownText_0xa1244
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0bda:
+.five:
 	writetext UnknownText_0xa1318
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0be0:
+.six:
 	writetext UnknownText_0xa13d8
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0be6:
+.seven:
 	writetext UnknownText_0xa1488
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0bec:
+.eight:
 	writetext UnknownText_0xa15de
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0bf2:
+.nine:
 	writetext UnknownText_0xa1717
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0bf8:
+.ten:
 	writetext UnknownText_0xa183d
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0bfe:
+.eleven:
 	writetext UnknownText_0xa19b1
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0c04:
+.twelve:
 	writetext UnknownText_0xa1ac0
-	jump UnknownScript_0xa0c0d
+	jump .finish
 
-UnknownScript_0xa0c0a:
+.thirteen:
 	writetext UnknownText_0xa1bed
 
-UnknownScript_0xa0c0d:
+.finish:
 	end
 
-UnknownScript_0xa0c0e:
+BuenaPhoneScript_Random1:
 	random 3
-	if_equal 0, UnknownScript_0xa0c1c
-	if_equal 1, UnknownScript_0xa0c20
-	if_equal 2, UnknownScript_0xa0c24
+	if_equal 0, .zero
+	if_equal 1, .one
+	if_equal 2, .two
 
-UnknownScript_0xa0c1c:
+.zero:
 	writetext UnknownText_0xa1c88
 	end
 
-UnknownScript_0xa0c20:
+.one:
 	writetext UnknownText_0xa1d5f
 	end
 
-UnknownScript_0xa0c24:
+.two:
 	writetext UnknownText_0xa1e2f
 	end
 ; a0c28
+
+INCLUDE "text/phone/buena.asm"
--- a/engine/card_flip.asm
+++ b/engine/card_flip.asm
@@ -1621,7 +1621,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, Palette_e0c93
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $48
 	call CopyBytes
 	pop af
@@ -1751,7 +1751,7 @@
 	ld a, $93
 	ld [rLCDC], a
 	call WaitBGMap
-	ld b, $18
+	ld b, SCGB_18
 	call GetSGBLayout
 	ld a, $e4
 	call DmgToCgbBGPals
--- a/engine/color.asm
+++ b/engine/color.asm
@@ -1,4 +1,4 @@
-
+PALPACKET_LENGTH EQU $10
 INCLUDE "predef/sgb.asm"
 
 SHINY_ATK_BIT EQU 5
@@ -89,7 +89,7 @@
 	push bc
 	ld hl, PalPacket_9ce6
 	ld de, wcda9
-	ld bc, PalPacket_9cf6 - PalPacket_9ce6
+	ld bc, PALPACKET_LENGTH
 	call CopyBytes
 	pop bc
 	pop de
@@ -117,7 +117,7 @@
 	ret
 ; 8ade
 
-Function8ade: ; 8ade
+Function8ade: ; 8ade SGB layout $fc
 	ld hl, wcd9b
 	ld a, [wcda9]
 	ld e, a
@@ -149,7 +149,7 @@
 	call CheckCGB
 	ret z
 	ld hl, Palette8b2f
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0008
 	ld a, $5
 	call FarCopyWRAM
@@ -200,7 +200,7 @@
 	jp Function9809
 
 .asm_8b5c
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld a, $3b
 	call GetAthPalletFromPalettes9df6
 	jp LoadHLPaletteIntoDE
@@ -216,7 +216,7 @@
 	jp Function9809
 
 .asm_8b76
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld a, $3c
 	call GetAthPalletFromPalettes9df6
 	jp LoadHLPaletteIntoDE
@@ -232,7 +232,7 @@
 	push af
 	ld hl, PalPacket_9ce6
 	ld de, wcda9
-	ld bc, $0010
+	ld bc, PALPACKET_LENGTH
 	call CopyBytes
 	pop af
 	call Function9775
@@ -248,7 +248,7 @@
 	jp Function9809
 
 .asm_8bb2
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld a, c
 	call Function9775
 	call Function9643
@@ -275,7 +275,7 @@
 
 asm_8bd7
 	push hl
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	ld de, $0008
 .asm_8bde
 	and a
@@ -318,8 +318,8 @@
 	lb bc, 6, 4
 	ld a, [EnemySafeguardCount]
 	and $3
-	call Function9663
-	call LoadDETile
+	call FillBoxCGB
+	call LoadEDTile
 	ret
 ; 8c1d
 
@@ -338,7 +338,7 @@
 	call Function976b
 
 .asm_8c33
-	ld de, wMapPals
+	ld de, UnknBGPals
 	call Function9643
 	call Function9699
 	call Function96b3
@@ -394,7 +394,7 @@
 .asm_8c82
 	lb bc, 2, 8
 	ld a, e
-	call Function9663
+	call FillBoxCGB
 	ret
 ; 8c8a
 
@@ -412,11 +412,11 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld a, [hli]
-	ld [wMapPals], a
-	ld [wMapPals + 8 * 2], a
+	ld [UnknBGPals], a
+	ld [UnknBGPals + 8 * 2], a
 	ld a, [hl]
-	ld [wMapPals + 1], a
-	ld [wMapPals + 8 * 2 + 1], a
+	ld [UnknBGPals + 1], a
+	ld [UnknBGPals + 8 * 2 + 1], a
 	pop af
 	ld [rSVBK], a
 	call Function96a4
@@ -437,7 +437,7 @@
 	push hl
 	ld hl, PalPacket_9ce6
 	ld de, wcda9
-	ld bc, $0010
+	ld bc, PALPACKET_LENGTH
 	call CopyBytes
 	pop hl
 rept 2
@@ -458,7 +458,7 @@
 	ret
 
 .asm_8cf0
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0008
 	ld a, $5
 	call FarCopyWRAM
@@ -525,7 +525,7 @@
 
 Function95f0: ; 95f0
 	ld hl, Palette_9608
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, 8
 	ld a, $5
 	call FarCopyWRAM
@@ -544,7 +544,7 @@
 
 
 CopyFourPalettes: ; 9610
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld c, $4
 
 CopyPalettes: ; 9615
@@ -618,7 +618,7 @@
 	ret
 ; 9663
 
-Function9663: ; 9663
+FillBoxCGB: ; 9663
 .row
 	push bc
 	push hl
@@ -644,9 +644,9 @@
 	push af
 	ld a, $5
 	ld [rSVBK], a
-	ld hl, wMapPals
-	ld c, $8
-.asm_9683
+	ld hl, UnknBGPals
+	ld c, 8
+.loop
 	ld a, $ff
 rept 4
 	ld [hli], a
@@ -656,7 +656,7 @@
 	ld [hli], a
 endr
 	dec c
-	jr nz, .asm_9683
+	jr nz, .loop
 	pop af
 	ld [rSVBK], a
 	pop hl
@@ -676,7 +676,7 @@
 ; 96a4
 
 Function96a4: ; 96a4
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	ld de, BGPals
 	ld bc, $0080
 	ld a, $5
@@ -702,7 +702,7 @@
 
 .asm_96d0
 	hlcoord 0, 0, AttrMap
-	ld de, VBGMap0
+	debgcoord 0, 0
 	ld b, $12
 	ld a, $1
 	ld [rVBK], a
@@ -728,7 +728,7 @@
 	ret
 ; 96f3
 
-Function96f3: ; 96f3
+Function96f3: ; 96f3 CGB layout $fc
 	ld hl, wcd9b
 	ld a, [wcda9]
 	ld e, a
@@ -752,7 +752,7 @@
 .asm_9712
 	lb bc, 2, 8
 	ld a, e
-	call Function9663
+	call FillBoxCGB
 	ret
 ; 971a
 
@@ -759,7 +759,7 @@
 
 Function971a: ; 971a
 	ld hl, Palettes_b681
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, $0010
 	ld a, $5
 	call FarCopyWRAM
@@ -792,7 +792,7 @@
 	and a
 	jp nz, Function97f9
 	ld a, [wPlayerSpriteSetupFlags]
-	bit 2, a
+	bit 2, a ; transformed to male
 	jr nz, .male
 	ld a, [PlayerGender]
 	and a
@@ -843,7 +843,7 @@
 	dec c
 	jr nz, .asm_9787
 	ld hl, Palettes_979c
-	ld de, Unkn2Pals + 8 * 2
+	ld de, UnknOBPals + 8 * 2
 	ld bc, $0010
 	ld a, $5
 	call FarCopyWRAM
@@ -1047,7 +1047,7 @@
 	push af
 	ld a, $5
 	ld [rSVBK], a
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function98df
 	ld hl, BGPals
 	call Function98df
@@ -1058,13 +1058,13 @@
 
 Function98df: ; 98df
 	ld c, $40
-.asm_98e1
+.loop
 	ld a, $ff
 	ld [hli], a
 	ld a, $7f
 	ld [hli], a
 	dec c
-	jr nz, .asm_98e1
+	jr nz, .loop
 	ret
 ; 98eb
 
@@ -1212,7 +1212,7 @@
 	ld a, $e4
 	ld [rBGP], a
 	ld de, VTiles1
-	ld bc, $0140
+	ld bc, 20 tiles
 	call CopyData
 	ld b, $12
 .asm_99ea
@@ -1293,7 +1293,7 @@
 
 DrawDefaultTiles: ; 0x9a64
 ; Draw 240 tiles (2/3 of the screen) from tiles in VRAM
-	ld hl, VBGMap0 ; BG Map 0
+	hlbgcoord 0, 0 ; BG Map 0
 	ld de, 32 - 20
 	ld a, $80 ; starting tile
 	ld c, 12 + 1
@@ -1367,6 +1367,7 @@
 ; 9b96
 
 ; 9b96
+
 PalPacket_9b96:	db $51, $48, $00, $49, $00, $4a, $00, $4b, $00, $00, $00, $00, $00, $00, $00, $00
 PalPacket_9ba6:	db $51, $2b, $00, $24, $00, $20, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00
 PalPacket_9bb6:	db $51, $41, $00, $42, $00, $43, $00, $44, $00, $00, $00, $00, $00, $00, $00, $00
@@ -1973,7 +1974,7 @@
 	push af
 	ld a, $5
 	ld [rSVBK], a
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	ld b, $8
 .asm_b210
 	ld a, [de]
@@ -2009,9 +2010,9 @@
 	ld bc, $40
 	ld hl, MapObjectPals
 	call AddNTimes
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, $40
-	ld a, $5 ; BANK(Unkn2Pals)
+	ld a, $5 ; BANK(UnknOBPals)
 	call FarCopyWRAM
 
 	ld a, [wPermission]
@@ -2036,7 +2037,7 @@
 	inc hl
 endr
 .asm_b26d
-	ld de, wMapPals + 8 * 6 + 2
+	ld de, UnknBGPals + 8 * 6 + 2
 	ld bc, 4
 	ld a, $5
 	call FarCopyWRAM
--- /dev/null
+++ b/engine/compose_mail.asm
@@ -1,0 +1,498 @@
+_ComposeMailMessage: ; 11e75 (mail?)
+	ld hl, wc6d0
+	ld [hl], e
+	inc hl
+	ld [hl], d
+	ld a, [hMapAnims]
+	push af
+	xor a
+	ld [hMapAnims], a
+	ld a, [hInMenu]
+	push af
+	ld a, $1
+	ld [hInMenu], a
+	call .InitBlankMail
+	call DelayFrame
+
+.loop
+	call .DoMailEntry
+	jr nc, .loop
+
+	pop af
+	ld [hInMenu], a
+	pop af
+	ld [hMapAnims], a
+	ret
+
+.InitBlankMail: ; 11e9a (4:5e9a)
+	call ClearBGPalettes
+	call DisableLCD
+	call Function11c51
+	ld de, VTiles0 tile $00
+	ld hl, .MailIcon
+	ld bc, 8 tiles
+	ld a, BANK(.MailIcon)
+	call FarCopyBytes
+	xor a
+	ld hl, wc300
+	ld [hli], a
+	ld [hl], a
+
+	; init mail icon
+	depixel 3, 2
+	ld a, SPRITE_ANIM_INDEX_00
+	call _InitSpriteAnimStruct
+
+	ld hl, $2
+	add hl, bc
+	ld [hl], $0
+	call .InitCharset
+	ld a, $e3
+	ld [rLCDC], a
+	call .initwc6d3
+	ld b, SCGB_08
+	call GetSGBLayout
+	call WaitBGMap
+	call WaitTop
+	ld a, %11100100
+	call DmgToCgbBGPals
+	ld a, %11100100
+	call Functioncf8
+	call Function11be0
+	ld hl, wc6d0
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	ld hl, $10
+	add hl, de
+	ld [hl], $4e
+	ret
+; 11ef4 (4:5ef4)
+
+.MailIcon: ; 11ef4
+INCBIN "gfx/icon/mail2.2bpp"
+; 11f74
+
+.initwc6d3: ; 11f74 (4:5f74)
+	ld a, $21
+	ld [wc6d3], a
+	ret
+; 11f7a (4:5f7a)
+
+.Dummy: ; dummied out
+	db "メールを かいてね@"
+; 11f84
+
+.InitCharset: ; 11f84 (4:5f84)
+	call WaitTop
+	hlcoord 0, 0
+	ld bc, 6 * SCREEN_WIDTH
+	ld a, $60 ; border
+	call ByteFill
+	hlcoord 0, 6
+	ld bc, 12 * SCREEN_WIDTH
+	ld a, " "
+	call ByteFill
+	hlcoord 1, 1
+	lb bc, 4, SCREEN_WIDTH - 2
+	call ClearBox
+	ld de, MailEntry_Uppercase
+
+.PlaceMailCharset: ; 11fa9 (4:5fa9)
+	hlcoord 1, 7
+	ld b, 6
+.next
+	ld c, SCREEN_WIDTH - 1
+.loop_
+	ld a, [de]
+	ld [hli], a
+	inc de
+	dec c
+	jr nz, .loop_
+	push de
+	ld de, SCREEN_WIDTH + 1
+	add hl, de
+	pop de
+	dec b
+	jr nz, .next
+	ret
+
+.DoMailEntry: ; 11fc0 (4:5fc0)
+	call JoyTextDelay
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .exit_mail
+	call .DoJumptable
+	callba Function8cf62
+	call .Update
+	call DelayFrame
+	and a
+	ret
+.exit_mail
+	callab Function8cf53
+	call ClearSprites
+	xor a
+	ld [hSCX], a
+	ld [hSCY], a
+	scf
+	ret
+
+.Update: ; 11feb (4:5feb)
+	xor a
+	ld [hBGMapMode], a
+	hlcoord 1, 1
+	lb bc, 4, 18
+	call ClearBox
+	ld hl, wc6d0
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	hlcoord 2, 2
+	call PlaceString
+	ld a, $1
+	ld [hBGMapMode], a
+	ret
+
+.DoJumptable: ; 12008 (4:6008)
+	ld a, [wJumptableIndex]
+	ld e, a
+	ld d, 0
+	ld hl, .Jumptable
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+
+.Jumptable: ; 12017 (4:6017)
+	dw .init_blinking_cursor
+	dw .process_joypad
+
+
+.init_blinking_cursor: ; 1201b (4:601b)
+	depixel 9, 2
+	ld a, SPRITE_ANIM_INDEX_09
+	call _InitSpriteAnimStruct
+	ld a, c
+	ld [wc6d5], a
+	ld a, b
+	ld [wc6d6], a
+	ld hl, $1
+	add hl, bc
+	ld a, [hl]
+	ld hl, $e
+	add hl, bc
+	ld [hl], a
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+
+.process_joypad: ; 1203a (4:603a)
+	ld hl, hJoyPressed ; $ffa7
+	ld a, [hl]
+	and A_BUTTON
+	jr nz, .a
+	ld a, [hl]
+	and B_BUTTON
+	jr nz, .b
+	ld a, [hl]
+	and START
+	jr nz, .start
+	ld a, [hl]
+	and SELECT
+	jr nz, .select
+	ret
+
+.a
+	call Function12185
+	cp $1
+	jr z, .select
+	cp $2
+	jr z, .b
+	cp $3
+	jr z, .finished
+	call Function11c11
+	call Function121ac
+	jr c, .start
+	ld hl, wc6d2
+	ld a, [hl]
+	cp $10
+	ret nz
+	inc [hl]
+	call Function11bd0
+	ld [hl], $f2
+	dec hl
+	ld [hl], $4e
+	ret
+
+.start
+	ld hl, wc6d5
+	ld c, [hl]
+	inc hl
+	ld b, [hl]
+	ld hl, $c
+	add hl, bc
+	ld [hl], $9
+	ld hl, $d
+	add hl, bc
+	ld [hl], $5
+	ret
+
+.b
+	call Function11bbc
+	ld hl, wc6d2
+	ld a, [hl]
+	cp $10
+	ret nz
+	dec [hl]
+	call Function11bd0
+	ld [hl], $f2
+	inc hl
+	ld [hl], $4e
+	ret
+
+.finished
+	call Function11bf7
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+.select
+	ld hl, wcf64
+	ld a, [hl]
+	xor $1
+	ld [hl], a
+	jr nz, .switch_to_lowercase
+	ld de, MailEntry_Uppercase
+	call .PlaceMailCharset
+	ret
+.switch_to_lowercase
+	ld de, MailEntry_Lowercase
+	call .PlaceMailCharset
+	ret
+
+Function120c1: ; 120c1 (4:60c1)
+	call Function1210c
+	ld hl, SpriteAnim1Sprite0d - SpriteAnim1
+	add hl, bc
+	ld a, [hl]
+	ld e, a
+	swap e
+	ld hl, SpriteAnim1YOffset - SpriteAnim1
+	add hl, bc
+	ld [hl], e
+	cp $5
+	ld de, Unknown_120f8
+	ld a, $0
+	jr nz, .asm_120df
+	ld de, Unknown_12102
+	ld a, $1
+.asm_120df
+	ld hl, SpriteAnim1Sprite0e - SpriteAnim1
+	add hl, bc
+	add [hl]
+	ld hl, SpriteAnim1Sprite01 - SpriteAnim1
+	add hl, bc
+	ld [hl], a
+	ld hl, SpriteAnim1Sprite0c - SpriteAnim1
+	add hl, bc
+	ld l, [hl]
+	ld h, SpriteAnim1Index - SpriteAnim1
+	add hl, de
+	ld a, [hl]
+	ld hl, SpriteAnim1XOffset - SpriteAnim1
+	add hl, bc
+	ld [hl], a
+	ret
+; 120f8 (4:60f8)
+
+Unknown_120f8: ; 120f8
+	db $00, $10, $20, $30, $40, $50, $60, $70, $80, $90
+Unknown_12102: ; 12102
+	db $00, $00, $00, $30, $30, $30, $60, $60, $60, $60
+; 1210c
+
+Function1210c: ; 1210c (4:610c)
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, .up
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .down
+	ld a, [hl]
+	and D_LEFT
+	jr nz, .left
+	ld a, [hl]
+	and D_RIGHT
+	jr nz, .right
+	ret
+.right
+	call Function1218b
+	and a
+	jr nz, .asm_12138
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	cp $9
+	jr nc, .asm_12135
+	inc [hl]
+	ret
+.asm_12135
+	ld [hl], $0
+	ret
+.asm_12138
+	cp $3
+	jr nz, .asm_1213d
+	xor a
+.asm_1213d
+	ld e, a
+	add a
+	add e
+	ld hl, $c
+	add hl, bc
+	ld [hl], a
+	ret
+.left
+	call Function1218b
+	and a
+	jr nz, .asm_12159
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	and a
+	jr z, .asm_12156
+	dec [hl]
+	ret
+.asm_12156
+	ld [hl], $9
+	ret
+.asm_12159
+	cp $1
+	jr nz, .asm_1215f
+	ld a, $4
+.asm_1215f
+rept 2
+	dec a
+endr
+	ld e, a
+	add a
+	add e
+	ld hl, $c
+	add hl, bc
+	ld [hl], a
+	ret
+.down
+	ld hl, $d
+	add hl, bc
+	ld a, [hl]
+	cp $5
+	jr nc, .asm_12175
+	inc [hl]
+	ret
+.asm_12175
+	ld [hl], $0
+	ret
+.up
+	ld hl, $d
+	add hl, bc
+	ld a, [hl]
+	and a
+	jr z, .asm_12182
+	dec [hl]
+	ret
+.asm_12182
+	ld [hl], $5
+	ret
+
+Function12185: ; 12185 (4:6185)
+	ld hl, wc6d5
+	ld c, [hl]
+	inc hl
+	ld b, [hl]
+
+Function1218b: ; 1218b (4:618b)
+	ld hl, $d
+	add hl, bc
+	ld a, [hl]
+	cp $5
+	jr nz, .asm_121aa
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	cp $3
+	jr c, .asm_121a4
+	cp $6
+	jr c, .asm_121a7
+	ld a, $3
+	ret
+.asm_121a4
+	ld a, $1
+	ret
+.asm_121a7
+	ld a, $2
+	ret
+.asm_121aa
+	xor a
+	ret
+
+Function121ac: ; 121ac (4:61ac)
+	ld a, [wc6d7]
+	jp Function11b17
+; 121b2 (4:61b2)
+
+Function121b2: ; unreferenced
+	ld a, [wc6d2]
+	and a
+	ret z
+	cp $11
+	jr nz, .asm_121c3
+	push hl
+	ld hl, wc6d2
+rept 2
+	dec [hl]
+endr
+	jr .asm_121c8
+
+.asm_121c3
+	push hl
+	ld hl, wc6d2
+	dec [hl]
+
+.asm_121c8
+	call Function11bd0
+	ld c, [hl]
+	pop hl
+.asm_121cd
+	ld a, [hli]
+	cp $ff
+	jp z, Function11b27
+	cp c
+	jr z, .asm_121d9
+	inc hl
+	jr .asm_121cd
+
+.asm_121d9
+	ld a, [hl]
+	jp Function11b23
+; 121dd
+
+MailEntry_Uppercase: ; 122dd
+	db "A B C D E F G H I J"
+	db "K L M N O P Q R S T"
+	db "U V W X Y Z   , ? !"
+	db "1 2 3 4 5 6 7 8 9 0"
+	db "<PK> <MN> <PO> <KE> é ♂ ♀ ¥ … ×"
+	db "lower  DEL   END   "
+; 1224f
+
+MailEntry_Lowercase: ; 1224f
+	db "a b c d e f g h i j"
+	db "k l m n o p q r s t"
+	db "u v w x y z   . - /"
+	db "'d 'l 'm 'r 's 't 'v & ( )"
+	db "<``> <''> [ ] ' : ;      "
+	db "UPPER  DEL   END   "
+; 122c1
--- a/engine/credits.asm
+++ b/engine/credits.asm
@@ -637,10 +637,10 @@
 	
 	push af
 	push hl
-	add wMapPals % $100
+	add UnknBGPals % $100
 	ld e, a
 	ld a, 0
-	adc wMapPals / $100
+	adc UnknBGPals / $100
 	ld d, a
 	ld bc, 24
 	call CopyBytes
--- /dev/null
+++ b/engine/crystal_intro.asm
@@ -1,0 +1,2531 @@
+Functione455c: ; e455c
+	hlcoord 1, 1
+	ld de, SCREEN_WIDTH
+	ld c, $10
+.asm_e4564
+	ld [hl], $7f
+	add hl, de
+	dec c
+	jr nz, .asm_e4564
+	hlcoord 1, 2
+	ld bc, $28
+	ld a, [wJumptableIndex]
+	call AddNTimes
+	ld [hl], $ed
+	ret
+; e4579
+
+
+Functione4579: ; e4579
+	ld de, MUSIC_NONE
+	call PlayMusic
+	call ClearBGPalettes
+	call ClearTileMap
+	ld a, VBGMap0 / $100
+	ld [hBGMapAddress + 1], a
+	xor a
+	ld [hBGMapAddress], a
+	ld [hJoyDown], a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $90
+	ld [hWY], a
+	call WaitBGMap
+	ld b, SCGB_19
+	call GetSGBLayout
+	call SetPalettes
+	ld c, 10
+	call DelayFrames
+	callab Copyright
+	call WaitBGMap
+	ld c, 100
+	call DelayFrames
+	call ClearTileMap
+	callba GBCOnlyScreen
+	call Functione45e8
+.joy_loop
+	call JoyTextDelay
+	ld a, [hJoyLast]
+	and BUTTONS
+	jr nz, .pressed_button
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .finish
+	call PlaceGameFreakPresents
+	callba Function8cf69
+	call DelayFrame
+	jr .joy_loop
+
+.pressed_button
+	call Functione465e
+	scf
+	ret
+
+.finish
+	call Functione465e
+	and a
+	ret
+; e45e8
+
+Functione45e8: ; e45e8
+	ld de, GameFreakLogo
+	ld hl, VTiles2
+	lb bc, BANK(GameFreakLogo), $1c
+	call Get1bpp
+
+	ld a, [rSVBK]
+	push af
+	ld a, $6
+	ld [rSVBK], a
+
+	ld hl, IntroLogoGFX
+	ld de, w6_d000
+	ld a, BANK(IntroLogoGFX)
+	call FarDecompress
+
+	ld hl, VTiles0
+	ld de, w6_d000
+	lb bc, 1, 8 tiles
+	call Request2bpp
+
+	ld hl, VTiles1
+	ld de, w6_d000 + $80 tiles
+	lb bc, 1, 8 tiles
+	call Request2bpp
+
+	pop af
+	ld [rSVBK], a
+
+	callba Function8cf53
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_03
+	call _InitSpriteAnimStruct
+	ld hl, $7
+	add hl, bc
+	ld [hl], $a0
+	ld hl, $c
+	add hl, bc
+	ld [hl], $60
+	ld hl, $d
+	add hl, bc
+	ld [hl], $30
+	xor a
+	ld [wJumptableIndex], a
+	ld [wcf64], a
+	ld [wcf65], a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $1
+	ld [hBGMapMode], a
+	ld a, $90
+	ld [hWY], a
+	ld de, $e4e4
+	call DmgToCgbObjPals
+	ret
+; e465e
+
+Functione465e: ; e465e
+	callba Function8cf53
+	call ClearTileMap
+	call ClearSprites
+	ld c, 16
+	call DelayFrames
+	ret
+; e4670
+
+PlaceGameFreakPresents: ; e4670
+	ld a, [wJumptableIndex]
+	ld e, a
+	ld d, 0
+	ld hl, .jumptable
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; e467f
+
+.jumptable: ; e467f
+	dw PlaceGameFreakPresents_0
+	dw PlaceGameFreakPresents_1
+	dw PlaceGameFreakPresents_2
+	dw PlaceGameFreakPresents_3
+; e4687
+
+PlaceGameFreakPresents_AdvanceIndex: ; e4687
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+; e468c
+
+PlaceGameFreakPresents_0: ; e468c
+	ret
+; e468d
+
+PlaceGameFreakPresents_1: ; e468d
+	ld hl, wcf65
+	ld a, [hl]
+	cp $20
+	jr nc, .PlaceGameFreak
+	inc [hl]
+	ret
+
+.PlaceGameFreak
+	ld [hl], 0
+	ld hl, .GAME_FREAK
+	decoord 5, 10
+	ld bc, .end - .GAME_FREAK
+	call CopyBytes
+	call PlaceGameFreakPresents_AdvanceIndex
+	ld de, SFX_GAME_FREAK_PRESENTS
+	call PlaySFX
+	ret
+; e46af
+
+.GAME_FREAK
+	;  G  A  M  E   _  F  R  E  A  K
+	db 0, 1, 2, 3, 13, 4, 5, 3, 1, 6
+.end
+	db "@"
+; e46ba
+
+PlaceGameFreakPresents_2: ; e46ba
+	ld hl, wcf65
+	ld a, [hl]
+	cp $40
+	jr nc, .place_presents
+	inc [hl]
+	ret
+
+.place_presents
+	ld [hl], 0
+	ld hl, .presents
+	decoord 7,11
+	ld bc, .end - .presents
+	call CopyBytes
+	call PlaceGameFreakPresents_AdvanceIndex
+	ret
+; e46d6
+
+.presents
+	db 7, 8, 9, 10, 11, 12
+.end
+	db "@"
+; e46dd
+
+PlaceGameFreakPresents_3: ; e46dd
+	ld hl, wcf65
+	ld a, [hl]
+	cp $80
+	jr nc, .finish
+	inc [hl]
+	ret
+
+.finish
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+; e46ed
+
+
+
+GameFreakLogoJumper: ; e46ed (39:46ed)
+	ld hl, $b
+	add hl, bc
+	ld e, [hl]
+	ld d, 0
+	ld hl, GameFreakLogoScenes
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+
+GameFreakLogoScenes: ; e46fd (39:46fd)
+	dw GameFreakLogoScene1
+	dw GameFreakLogoScene2
+	dw GameFreakLogoScene3
+	dw GameFreakLogoScene4
+	dw GameFreakLogoScene5
+
+
+GameFreakLogoScene1: ; e4707 (39:4707)
+	ld hl, $b
+	add hl, bc
+	inc [hl]
+	ret
+
+GameFreakLogoScene2: ; e470d (39:470d)
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	and a
+	jr z, .asm_e4747
+	ld d, a
+	ld hl, $d
+	add hl, bc
+	ld a, [hl]
+	and $3f
+	cp $20
+	jr nc, .asm_e4723
+	add $20
+.asm_e4723
+	ld e, a
+	callba Functionce765
+	ld hl, $7
+	add hl, bc
+	ld [hl], e
+	ld hl, $d
+	add hl, bc
+	ld a, [hl]
+	dec [hl]
+	and $1f
+	ret nz
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	sub $30
+	ld [hl], a
+	ld de, SFX_DITTO_BOUNCE
+	call PlaySFX
+	ret
+.asm_e4747
+	ld hl, $b
+	add hl, bc
+	inc [hl]
+	ld hl, $d
+	add hl, bc
+	ld [hl], $0
+	ld de, SFX_DITTO_POP_UP
+	call PlaySFX
+	ret
+
+GameFreakLogoScene3: ; e4759 (39:4759)
+	ld hl, $d
+	add hl, bc
+	ld a, [hl]
+	cp $20
+	jr nc, .asm_e4764
+	inc [hl]
+	ret
+.asm_e4764
+	ld hl, $b
+	add hl, bc
+	inc [hl]
+	ld hl, $d
+	add hl, bc
+	ld [hl], $0
+	ld de, SFX_DITTO_TRANSFORM
+	call PlaySFX
+	ret
+
+GameFreakLogoScene4: ; e4776 (39:4776)
+	ld hl, $d
+	add hl, bc
+	ld a, [hl]
+	cp $40
+	jr z, .asm_e47a3
+	inc [hl]
+	srl a
+	srl a
+	ld e, a
+	ld d, $0
+	ld hl, GameFreakLogoPalettes
+rept 2
+	add hl, de
+endr
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld a, [hli]
+	ld [OBPals + 12], a
+	ld a, [hli]
+	ld [OBPals + 13], a
+	pop af
+	ld [rSVBK], a
+	ld a, $1
+	ld [hCGBPalUpdate], a
+	ret
+.asm_e47a3
+	ld hl, $b
+	add hl, bc
+	inc [hl]
+	call PlaceGameFreakPresents_AdvanceIndex
+
+GameFreakLogoScene5: ; e47ab (39:47ab)
+	ret
+; e47ac (39:47ac)
+
+GameFreakLogoPalettes: ; e47ac
+; Ditto's color as it turns into the Game Freak logo.
+; Fade from pink to orange.
+; One color per step.
+	RGB 23, 12, 28
+	RGB 23, 12, 27
+	RGB 23, 13, 26
+	RGB 23, 13, 24
+	RGB 24, 14, 22
+	RGB 24, 14, 20
+	RGB 24, 15, 18
+	RGB 24, 15, 16
+	RGB 25, 16, 14
+	RGB 25, 16, 12
+	RGB 25, 17, 10
+	RGB 25, 17, 08
+	RGB 26, 18, 06
+	RGB 26, 18, 04
+	RGB 26, 19, 02
+	RGB 26, 19, 00
+;' e47cc
+
+GameFreakLogo: ; e47cc
+INCBIN "gfx/splash/logo.1bpp"
+; e48ac
+
+CrystalIntro: ; e48ac
+	ld a, [rSVBK]
+	push af
+	ld a, 5
+	ld [rSVBK], a
+	ld a, [hInMenu]
+	push af
+	ld a, [hVBlank]
+	push af
+	call Functione4901
+.loop: ; e48bc
+	call JoyTextDelay
+	ld a, [hJoyLast]
+	and BUTTONS
+	jr nz, .ShutOffMusic
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .done
+	call IntroSceneJumper
+	callba Function8cf69
+	call DelayFrame
+	jp .loop
+
+.ShutOffMusic
+	ld de, MUSIC_NONE
+	call PlayMusic
+
+.done
+	call ClearBGPalettes
+	call ClearSprites
+	call ClearTileMap
+	xor a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	pop af
+	ld [hVBlank], a
+	pop af
+	ld [hInMenu], a
+	pop af
+	ld [rSVBK], a
+	ret
+; e4901
+
+Functione4901: ; e4901
+	xor a
+	ld [hVBlank], a
+	ld a, $1
+	ld [hInMenu], a
+	xor a
+	ld [hMapAnims], a
+	ld [wJumptableIndex], a
+	ret
+; e490f
+
+IntroSceneJumper: ; e490f
+	ld a, [wJumptableIndex]
+	ld e, a
+	ld d, 0
+	ld hl, IntroScenes
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; e491e
+
+
+IntroScenes: ; e491e (39:491e)
+	dw IntroScene1
+	dw IntroScene2
+	dw IntroScene3
+	dw IntroScene4
+	dw IntroScene5
+	dw IntroScene6
+	dw IntroScene7
+	dw IntroScene8
+	dw IntroScene9
+	dw IntroScene10
+	dw IntroScene11
+	dw IntroScene12
+	dw IntroScene13
+	dw IntroScene14
+	dw IntroScene15
+	dw IntroScene16
+	dw IntroScene17
+	dw IntroScene18
+	dw IntroScene19
+	dw IntroScene20
+	dw IntroScene21
+	dw IntroScene22
+	dw IntroScene23
+	dw IntroScene24
+	dw IntroScene25
+	dw IntroScene26
+	dw IntroScene27
+	dw IntroScene28
+
+
+NextIntroScene: ; e4956 (39:4956)
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+
+IntroScene1: ; e495b (39:495b)
+; Setup the next scene.
+	call Functione54a3
+	call ClearSprites
+	call ClearTileMap
+	xor a
+	ld [hBGMapMode], a
+	ld a, $1
+	ld [rVBK], a
+	ld hl, IntroTilemap001
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, $0
+	ld [rVBK], a
+	ld hl, IntroUnownsGFX
+	ld de, VTiles2 tile $00
+	call Functione54c2
+	ld hl, IntroPulseGFX
+	ld de, VTiles0 tile $00
+	call Functione54c2
+	ld hl, IntroTilemap002
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, Palette_365ad
+	ld de, UnknBGPals
+	ld bc, $80
+	call CopyBytes
+	ld hl, Palette_365ad
+	ld de, BGPals
+	ld bc, $80
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	xor a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	callba Function8cf53
+	call Functione549e
+	xor a
+	ld [wIntroSceneFrameCounter], a
+	ld [wcf65], a
+	call NextIntroScene
+	ret
+
+IntroScene2: ; e49d6 (39:49d6)
+; First Unown (A) fades in, pulses, then fades out.
+	ld hl, wIntroSceneFrameCounter
+	ld a, [hl]
+	inc [hl]
+	cp $80
+	jr nc, .endscene
+	cp $60
+	jr nz, .DontPlaySound
+	push af
+	ld de, $5858
+	call Functione51dc
+	ld de, SFX_INTRO_UNOWN_1
+	call PlaySFX
+	pop af
+.DontPlaySound
+	ld [wcf65], a
+	xor a
+	call Functione5223
+	ret
+.endscene
+	call NextIntroScene
+	ret
+
+IntroScene3: ; e49fd (39:49fd)
+; More setup. Transition to the outdoor scene.
+	call Functione54a3
+	call ClearSprites
+	call ClearTileMap
+	xor a
+	ld [hBGMapMode], a
+	ld a, $1
+	ld [rVBK], a
+	ld hl, IntroTilemap003
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, $0
+	ld [rVBK], a
+	ld hl, IntroBackgroundGFX
+	ld de, VTiles2 tile $00
+	call Functione54c2
+	ld hl, IntroTilemap004
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, Palette_e5edd
+	ld de, UnknBGPals
+	ld bc, $80
+	call CopyBytes
+	ld hl, Palette_e5edd
+	ld de, BGPals
+	ld bc, $80
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	xor a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	call Functione5516
+	call Functione549e
+	xor a
+	ld [wIntroSceneFrameCounter], a
+	call NextIntroScene
+	ret
+
+IntroScene4: ; e4a69 (39:4a69)
+; Scroll the outdoor panorama for a bit.
+	call Functione552f
+	ld hl, wIntroSceneFrameCounter
+	ld a, [hl]
+	cp $80
+	jr z, .endscene
+	inc [hl]
+	ret
+.endscene
+	call NextIntroScene
+	ret
+
+IntroScene5: ; e4a7a (39:4a7a)
+; Go back to the Unown.
+	call Functione54a3
+	call ClearSprites
+	call ClearTileMap
+	xor a
+	ld [hBGMapMode], a
+	ld [hLCDStatCustom], a
+	ld a, $1
+	ld [rVBK], a
+	ld hl, IntroTilemap005
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, $0
+	ld [rVBK], a
+	ld hl, IntroUnownsGFX
+	ld de, VTiles2 tile $00
+	call Functione54c2
+	ld hl, IntroPulseGFX
+	ld de, VTiles0 tile $00
+	call Functione54c2
+	ld hl, IntroTilemap006
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, Palette_365ad
+	ld de, UnknBGPals
+	ld bc, $80
+	call CopyBytes
+	ld hl, Palette_365ad
+	ld de, BGPals
+	ld bc, $80
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	xor a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	callba Function8cf53
+	call Functione549e
+	xor a
+	ld [wcf64], a
+	ld [wcf65], a
+	call NextIntroScene
+	ret
+
+IntroScene6: ; e4af7 (39:4af7)
+; Two more Unown (I, H) fade in.
+	ld hl, wcf64
+	ld a, [hl]
+	inc [hl]
+	cp $80
+	jr nc, .endscene
+	cp $60
+	jr z, .SecondUnown
+	cp $40
+	jr nc, .StopUnown
+	cp $20
+	jr z, .FirstUnown
+	jr .NoUnown
+.FirstUnown
+	push af
+	ld de, $3878
+	call Functione51dc
+	ld de, SFX_INTRO_UNOWN_2
+	call PlaySFX
+	pop af
+.NoUnown
+	ld [wcf65], a
+	xor a
+	call Functione5223
+	ret
+.SecondUnown
+	push af
+	ld de, $7030
+	call Functione51dc
+	ld de, SFX_INTRO_UNOWN_1
+	call PlaySFX
+	pop af
+.StopUnown
+	ld [wcf65], a
+	ld a, $1
+	call Functione5223
+	ret
+.endscene
+	call NextIntroScene
+	ret
+
+IntroScene7: ; e4b3f (39:4b3f)
+; Back to the outdoor scene.
+	call Functione54a3
+	call ClearSprites
+	call ClearTileMap
+	xor a
+	ld [hBGMapMode], a
+	ld a, $1
+	ld [rVBK], a
+	ld hl, IntroTilemap003
+	debgcoord 0, 0
+	call Functione54fa
+	ld hl, IntroPichuWooperGFX
+	ld de, VTiles0 tile $00
+	call Functione54c2
+	ld a, $0
+	ld [rVBK], a
+	ld hl, IntroSuicuneRunGFX
+	ld de, VTiles0 tile $00
+	call Functione54de
+	ld hl, IntroBackgroundGFX
+	ld de, VTiles2 tile $00
+	call Functione54c2
+	ld hl, IntroTilemap004
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, Palette_e5edd
+	ld de, UnknBGPals
+	ld bc, $80
+	call CopyBytes
+	ld hl, Palette_e5edd
+	ld de, BGPals
+	ld bc, $80
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	xor a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	call Functione5516
+	callba Function8cf53
+	depixel 13, 27, 4, 0
+	ld a, SPRITE_ANIM_INDEX_26
+	call _InitSpriteAnimStruct
+	ld a, $f0
+	ld [wc3c0], a
+	call Functione549e
+	xor a
+	ld [wIntroSceneFrameCounter], a
+	ld [wcf65], a
+	call NextIntroScene
+	ret
+
+IntroScene8: ; e4bd3 (39:4bd3)
+; Scroll the scene, then show Suicune running across the screen.
+	ld hl, wIntroSceneFrameCounter
+	ld a, [hl]
+	inc [hl]
+	cp $40
+	jr z, .asm_e4be2
+	jr nc, .asm_e4be8
+	call Functione552f
+	ret
+.asm_e4be2
+	ld de, SFX_INTRO_SUICUNE_3
+	call PlaySFX
+.asm_e4be8
+	ld a, [wc3c0]
+	and a
+	jr z, .asm_e4bf4
+	sub $8
+	ld [wc3c0], a
+	ret
+.asm_e4bf4
+	ld de, SFX_INTRO_SUICUNE_2
+	call PlaySFX
+	callba Function8d03d
+	call NextIntroScene
+	ret
+
+IntroScene9: ; e4c04 (39:4c04)
+; Set up the next scene (same bg).
+	xor a
+	ld [hLCDStatCustom], a
+	call ClearSprites
+	hlcoord 0, 0, AttrMap
+	ld bc, $f0
+	ld a, $1
+	call ByteFill
+	ld bc, $3c
+	ld a, $2
+	call ByteFill
+	ld bc, $3c
+	ld a, $3
+	call ByteFill
+	ld a, $2
+	ld [hBGMapMode], a
+	call DelayFrame
+	call DelayFrame
+	call DelayFrame
+	ld a, $c
+	ld [hBGMapAddress], a
+	call DelayFrame
+	call DelayFrame
+	call DelayFrame
+	xor a
+	ld [hBGMapMode], a
+	ld [hBGMapAddress], a
+	ld [wc3c0], a
+	xor a
+	ld [wcf64], a
+	call NextIntroScene
+	ret
+
+IntroScene10: ; e4c4f (39:4c4f)
+; Wooper and Pichu enter.
+	call Functione546d
+	ld hl, wcf64
+	ld a, [hl]
+	inc [hl]
+	cp $c0
+	jr z, .done
+	cp $20
+	jr z, .wooper
+	cp $40
+	jr z, .pichu
+	ret
+
+.pichu
+	depixel 21, 16, 1, 0
+	ld a, SPRITE_ANIM_INDEX_27
+	call _InitSpriteAnimStruct
+	ld de, SFX_INTRO_PICHU
+	call PlaySFX
+	ret
+
+.wooper
+	depixel 22, 6
+	ld a, SPRITE_ANIM_INDEX_28
+	call _InitSpriteAnimStruct
+	ld de, SFX_INTRO_PICHU
+	call PlaySFX
+	ret
+.done
+	call NextIntroScene
+	ret
+
+IntroScene11: ; e4c86 (39:4c86)
+; Back to Unown again.
+	call Functione54a3
+	call ClearSprites
+	call ClearTileMap
+	xor a
+	ld [hBGMapMode], a
+	ld [hLCDStatCustom], a
+	ld a, $1
+	ld [rVBK], a
+	ld hl, IntroTilemap007
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, $0
+	ld [rVBK], a
+	ld hl, IntroUnownsGFX
+	ld de, VTiles2 tile $00
+	call Functione54c2
+	ld hl, IntroTilemap008
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, Palette_365ad
+	ld de, UnknBGPals
+	ld bc, $80
+	call CopyBytes
+	ld hl, Palette_365ad
+	ld de, BGPals
+	ld bc, $80
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	xor a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	callba Function8cf53
+	call Functione549e
+	xor a
+	ld [wIntroSceneFrameCounter], a
+	ld [wcf65], a
+	call NextIntroScene
+	ret
+
+IntroScene12: ; e4cfa (39:4cfa)
+; Even more Unown.
+	call Functione4d36
+	ld hl, wIntroSceneFrameCounter
+	ld a, [hl]
+	inc [hl]
+	cp $c0
+	jr nc, .asm_e4d32
+	cp $80
+	jr nc, .asm_e4d1d
+	ld c, a
+	and $1f
+	sla a
+	ld [wcf65], a
+	ld a, c
+	and $e0
+	srl a
+	swap a
+	call Functione5223
+	ret
+.asm_e4d1d
+	ld c, a
+	and $f
+	sla a
+	sla a
+	ld [wcf65], a
+	ld a, c
+	and $70
+	or $40
+	swap a
+	call Functione5223
+	ret
+.asm_e4d32
+	call NextIntroScene
+	ret
+
+Functione4d36: ; e4d36 (39:4d36)
+	ld a, [wIntroSceneFrameCounter]
+	ld c, a
+	ld hl, .UnownSounds
+.loop
+	ld a, [hli]
+	cp -1
+	ret z
+	cp c
+	jr z, .playsound
+rept 2
+	inc hl
+endr
+	jr .loop
+.playsound
+	ld a, [hli]
+	ld d, [hl]
+	ld e, a
+	push de
+	call SFXChannelsOff
+	pop de
+	call PlaySFX
+	ret
+; e4d54 (39:4d54)
+
+.UnownSounds: ; e4d54
+	dbw $00, SFX_INTRO_UNOWN_3
+	dbw $20, SFX_INTRO_UNOWN_2
+	dbw $40, SFX_INTRO_UNOWN_1
+	dbw $60, SFX_INTRO_UNOWN_2
+	dbw $80, SFX_INTRO_UNOWN_3
+	dbw $90, SFX_INTRO_UNOWN_2
+	dbw $a0, SFX_INTRO_UNOWN_1
+	dbw $b0, SFX_INTRO_UNOWN_2
+	db $ff
+; e4d6d
+
+IntroScene13: ; e4d6d (39:4d6d)
+; Switch scenes again.
+	call Functione54a3
+	call ClearSprites
+	call ClearTileMap
+	xor a
+	ld [hBGMapMode], a
+	ld a, $1
+	ld [rVBK], a
+	ld hl, IntroTilemap003
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, $0
+	ld [rVBK], a
+	ld hl, IntroSuicuneRunGFX
+	ld de, VTiles0 tile $00
+	call Functione54de
+	ld hl, IntroBackgroundGFX
+	ld de, VTiles2 tile $00
+	call Functione54c2
+	ld hl, IntroTilemap004
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, Palette_e5edd
+	ld de, UnknBGPals
+	ld bc, $80
+	call CopyBytes
+	ld hl, Palette_e5edd
+	ld de, BGPals
+	ld bc, $80
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	xor a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	callba Function8cf53
+	depixel 13, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_26
+	call _InitSpriteAnimStruct
+	ld de, MUSIC_CRYSTAL_OPENING
+	call PlayMusic
+	xor a
+	ld [wc3c0], a
+	call Functione549e
+	xor a
+	ld [wcf64], a
+	ld [wcf65], a
+	call NextIntroScene
+	ret
+
+IntroScene14: ; e4dfa (39:4dfa)
+; Suicune runs then jumps.
+	ld a, [hSCX]
+	sub 10
+	ld [hSCX], a
+	ld hl, wcf64
+	ld a, [hl]
+	inc [hl]
+	cp $80
+	jr z, .done
+	cp $60
+	jr z, .jump
+	jr nc, .asm_e4e1a
+	cp $40
+	jr nc, .asm_e4e33
+	ret
+
+.jump
+	ld de, SFX_INTRO_SUICUNE_4
+	call PlaySFX
+
+.asm_e4e1a
+	ld a, $1
+	ld [wcf65], a
+	ld a, [wc3c0]
+	cp $88
+	jr c, .asm_e4e2c
+	sub $8
+	ld [wc3c0], a
+	ret
+
+.asm_e4e2c
+	callba Function8d03d
+	ret
+
+.asm_e4e33
+	ld a, [wc3c0]
+	sub $2
+	ld [wc3c0], a
+	ret
+
+.done
+	call NextIntroScene
+	ret
+
+IntroScene15: ; e4e40 (39:4e40)
+; Transition to a new scene.
+	call Functione54a3
+	call ClearSprites
+	call ClearTileMap
+	xor a
+	ld [hBGMapMode], a
+	ld a, $1
+	ld [rVBK], a
+	ld hl, IntroTilemap009
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, $0
+	ld [rVBK], a
+	ld hl, IntroSuicuneJumpGFX
+	ld de, VTiles2 tile $00
+	call Functione54c2
+	ld hl, IntroUnownBackGFX
+	ld de, VTiles0 tile $00
+	call Functione54c2
+	ld de, GFX_e7a5d
+	ld hl, VTiles1 tile $00
+	lb bc, BANK(GFX_e7a5d), 1
+	call Request2bpp
+	ld hl, IntroTilemap010
+	debgcoord 0, 0
+	call Functione54fa
+	call Functione541b
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, Palette_e77dd
+	ld de, UnknBGPals
+	ld bc, $80
+	call CopyBytes
+	ld hl, Palette_e77dd
+	ld de, BGPals
+	ld bc, $80
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	xor a
+	ld [hSCX], a
+	ld a, $90
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	callba Function8cf53
+	call Functione549e
+	depixel 8, 5
+	ld a, SPRITE_ANIM_INDEX_2A
+	call _InitSpriteAnimStruct
+	depixel 12, 0
+	ld a, SPRITE_ANIM_INDEX_2B
+	call _InitSpriteAnimStruct
+	xor a
+	ld [wcf64], a
+	ld [wcf65], a
+	call NextIntroScene
+	ret
+
+IntroScene16: ; e4edc (39:4edc)
+; Suicune shows its face. An Unown appears in front.
+	ld hl, wcf64
+	ld a, [hl]
+	inc [hl]
+	cp $80
+	jr nc, .done
+	call Functione5441
+	ld a, [hSCY]
+	and a
+	ret z
+	add 8
+	ld [hSCY], a
+	ret
+.done
+	call NextIntroScene
+	ret
+
+IntroScene17: ; e4ef5 (39:4ef5)
+; ...
+	call Functione54a3
+	call ClearSprites
+	call ClearTileMap
+	xor a
+	ld [hBGMapMode], a
+	ld a, $1
+	ld [rVBK], a
+	ld hl, IntroTilemap011
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, $0
+	ld [rVBK], a
+	ld hl, IntroSuicuneCloseGFX
+	ld de, VTiles1 tile $00
+	call Functione54de
+	ld hl, IntroTilemap012
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, Palette_e6d6d
+	ld de, UnknBGPals
+	ld bc, $80
+	call CopyBytes
+	ld hl, Palette_e6d6d
+	ld de, BGPals
+	ld bc, $80
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	xor a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	callba Function8cf53
+	call Functione549e
+	xor a
+	ld [wcf64], a
+	ld [wcf65], a
+	call NextIntroScene
+	ret
+
+IntroScene18: ; e4f67 (39:4f67)
+; Suicune close up.
+	ld hl, wcf64
+	ld a, [hl]
+	inc [hl]
+	cp $60
+	jr nc, .done
+	ld a, [hSCX]
+	cp $60
+	ret z
+	add 8
+	ld [hSCX], a
+	ret
+.done
+	call NextIntroScene
+	ret
+
+IntroScene19: ; e4f7e (39:4f7e)
+; More setup.
+	call Functione54a3
+	call ClearSprites
+	call ClearTileMap
+	xor a
+	ld [hBGMapMode], a
+	ld a, $1
+	ld [rVBK], a
+	ld hl, IntroTilemap013
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, $0
+	ld [rVBK], a
+	ld hl, IntroSuicuneBackGFX
+	ld de, VTiles2 tile $00
+	call Functione54c2
+	ld hl, IntroUnownsGFX
+	ld de, VTiles1 tile $00
+	call Functione54c2
+	ld de, GFX_e7a5d
+	ld hl, VTiles1 tile $7f
+	lb bc, BANK(GFX_e7a5d), 1
+	call Request2bpp
+	ld hl, IntroTilemap014
+	debgcoord 0, 0
+	call Functione54fa
+	call Functione541b
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, Palette_e77dd
+	ld de, UnknBGPals
+	ld bc, $80
+	call CopyBytes
+	ld hl, Palette_e77dd
+	ld de, BGPals
+	ld bc, $80
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	xor a
+	ld [hSCX], a
+	ld a, $d8
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	callba Function8cf53
+	ld hl, wc300
+	xor a
+	ld [hli], a
+	ld [hl], $7f
+	call Functione549e
+	depixel 12, 0
+	ld a, SPRITE_ANIM_INDEX_2B
+	call _InitSpriteAnimStruct
+	xor a
+	ld [wcf64], a
+	ld [wcf65], a
+	call NextIntroScene
+	ret
+
+IntroScene20: ; e5019 (39:5019)
+; Suicune running away. A bunch of Unown appear.
+	ld hl, wcf64
+	ld a, [hl]
+	inc [hl]
+	cp $98
+	jr nc, .asm_e5059
+	cp $58
+	ret nc
+	cp $40
+	jr nc, .asm_e5032
+	cp $28
+	ret nc
+	ld a, [hSCY]
+	inc a
+	ld [hSCY], a
+	ret
+
+.asm_e5032
+	sub $18
+	ld c, a
+	and $3
+	cp $3
+	ret nz
+	ld a, c
+	and $1c
+	srl a
+	srl a
+	ld [wcf65], a
+	xor a
+	call Functione5348
+	ret
+; e5049 (39:5049)
+
+	ld a, c
+	and $1c
+	srl a
+	srl a
+	ld [wcf65], a
+	ld a, 1
+	call Functione5348
+	ret
+
+.asm_e5059
+	call NextIntroScene
+	ret
+
+IntroScene21: ; e505d (39:505d)
+; Suicune gets more distant and turns black.
+	call Functione5451
+	ld c, 3
+	call DelayFrames
+	xor a
+	ld [hBGMapMode], a
+	ld [wcf64], a
+	ld [wcf65], a
+	call NextIntroScene
+	ret
+
+IntroScene22: ; e5072 (39:5072)
+	ld hl, wcf64
+	ld a, [hl]
+	inc [hl]
+	cp $8
+	jr nc, .done
+	ret
+.done
+	callba Function8d03d
+	call NextIntroScene
+	ret
+
+IntroScene23: ; e5086 (39:5086)
+	xor a
+	ld [wcf64], a
+	call NextIntroScene
+	ret
+
+IntroScene24: ; e508e (39:508e)
+; Fade to white.
+	ld hl, wcf64
+	ld a, [hl]
+	inc [hl]
+	cp $20
+	jr nc, .done
+
+	ld c, a
+	and $3
+	ret nz
+	ld a, c
+	and $1c
+	sla a
+	call Functione5172
+	ret
+
+.done
+	ld a, $40
+	ld [wcf64], a
+	call NextIntroScene
+	ret
+
+IntroScene25: ; e50ad (39:50ad)
+; Wait around a bit.
+	ld a, [wcf64]
+	dec a
+	jr z, .done
+	ld [wcf64], a
+	ret
+.done
+	call NextIntroScene
+	ret
+
+IntroScene26: ; e50bb (39:50bb)
+; Load the final scene.
+	call ClearBGPalettes
+	call ClearSprites
+	call ClearTileMap
+	xor a
+	ld [hBGMapMode], a
+	ld a, $1
+	ld [rVBK], a
+	ld hl, IntroTilemap015
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, $0
+	ld [rVBK], a
+	ld hl, IntroCrystalUnownsGFX
+	ld de, VTiles2 tile $00
+	call Functione54c2
+	ld hl, IntroTilemap017
+	debgcoord 0, 0
+	call Functione54fa
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, Palette_e679d
+	ld de, UnknBGPals
+	ld bc, $80
+	call CopyBytes
+	ld hl, Palette_e679d
+	ld de, BGPals
+	ld bc, $80
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	xor a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	callba Function8cf53
+	call Functione549e
+	xor a
+	ld [wcf64], a
+	ld [wcf65], a
+	call NextIntroScene
+	ret
+
+IntroScene27: ; e512d (39:512d)
+; Spell out C R Y S T A L with Unown.
+	ld hl, wcf65
+	inc [hl]
+	ld hl, wcf64
+	ld a, [hl]
+	inc [hl]
+	cp $80
+	jr nc, .done
+
+	ld c, a
+	and $f
+	ld [wcf65], a
+	ld a, c
+	and $70
+	swap a
+	call Functione539d
+	ret
+
+.done
+	call NextIntroScene
+	ld a, $80
+	ld [wcf64], a
+	ret
+
+IntroScene28: ; e5152 (39:5152)
+; Cut out when the music ends, and lead into the title screen.
+	ld hl, wcf64
+	ld a, [hl]
+	and a
+	jr z, .done
+	dec [hl]
+	cp $18
+	jr z, .clear
+	cp $8
+	ret nz
+
+	ld de, SFX_UNKNOWN_CB
+	call PlaySFX
+	ret
+
+.clear
+	call ClearBGPalettes
+	ret
+
+.done
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+
+Functione5172: ; e5172 (39:5172)
+	ld hl, Unknown_e519c
+	add l
+	ld l, a
+	ld a, $0
+	adc h
+	ld h, a
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld de, BGPals
+	ld b, $8
+.asm_e5187
+	push hl
+	ld c, $8
+.asm_e518a
+	ld a, [hli]
+	ld [de], a
+	inc de
+	dec c
+	jr nz, .asm_e518a
+	pop hl
+	dec b
+	jr nz, .asm_e5187
+	pop af
+	ld [rSVBK], a
+	ld a, $1
+	ld [hCGBPalUpdate], a
+	ret
+; e519c (39:519c)
+
+Unknown_e519c: ; e519c
+; Fade to white.
+	RGB 24, 12, 09
+	RGB 31, 31, 31
+	RGB 12, 00, 31
+	RGB 00, 00, 00
+
+	RGB 31, 19, 05
+	RGB 31, 31, 31
+	RGB 15, 05, 31
+	RGB 07, 07, 07
+
+	RGB 31, 21, 09
+	RGB 31, 31, 31
+	RGB 18, 09, 31
+	RGB 11, 11, 11
+
+	RGB 31, 23, 13
+	RGB 31, 31, 31
+	RGB 21, 13, 31
+	RGB 15, 15, 15
+
+	RGB 31, 25, 17
+	RGB 31, 31, 31
+	RGB 25, 17, 31
+	RGB 19, 19, 19
+
+	RGB 31, 27, 21
+	RGB 31, 31, 31
+	RGB 27, 21, 31
+	RGB 23, 23, 23
+
+	RGB 31, 29, 25
+	RGB 31, 31, 31
+	RGB 29, 26, 31
+	RGB 27, 27, 27
+
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+; e51dc
+
+Functione51dc: ; e51dc (39:51dc)
+	push de
+	ld a, SPRITE_ANIM_INDEX_29
+	call _InitSpriteAnimStruct
+	ld hl, $c
+	add hl, bc
+	ld [hl], $8
+	ld a, $3c
+	call Function3b3c
+	pop de
+
+	push de
+	ld a, SPRITE_ANIM_INDEX_29
+	call _InitSpriteAnimStruct
+	ld hl, $c
+	add hl, bc
+	ld [hl], $18
+	ld a, $3b
+	call Function3b3c
+	pop de
+
+	push de
+	ld a, SPRITE_ANIM_INDEX_29
+	call _InitSpriteAnimStruct
+	ld hl, $c
+	add hl, bc
+	ld [hl], $28
+	ld a, $39
+	call Function3b3c
+	pop de
+
+	ld a, SPRITE_ANIM_INDEX_29
+	call _InitSpriteAnimStruct
+	ld hl, $c
+	add hl, bc
+	ld [hl], $38
+	ld a, $3a
+	call Function3b3c
+	ret
+
+Functione5223: ; e5223 (39:5223)
+rept 3
+	add a
+endr
+	ld e, a
+	ld d, $0
+	ld hl, BGPals
+	add hl, de
+rept 2
+	inc hl
+endr
+	ld a, [wcf65]
+	and $3f
+	cp $1f
+	jr z, .asm_e523e
+	jr c, .asm_e523e
+	ld c, a
+	ld a, $3f
+	sub c
+.asm_e523e
+	ld c, a
+	ld b, $0
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	push hl
+	push bc
+	ld hl, BGPals
+	ld bc, $40
+	xor a
+	call ByteFill
+	pop bc
+	pop hl
+	push hl
+	ld hl, Unknown_e5288
+rept 2
+	add hl, bc
+endr
+	ld a, [hli]
+	ld d, [hl]
+	ld e, a
+	pop hl
+	ld a, e
+	ld [hli], a
+	ld a, d
+	ld [hli], a
+	push hl
+	ld hl, Unknown_e52c8
+rept 2
+	add hl, bc
+endr
+	ld a, [hli]
+	ld d, [hl]
+	ld e, a
+	pop hl
+	ld a, e
+	ld [hli], a
+	ld a, d
+	ld [hli], a
+	push hl
+	ld hl, Unknown_e5308
+rept 2
+	add hl, bc
+endr
+	ld a, [hli]
+	ld d, [hl]
+	ld e, a
+	pop hl
+	ld a, e
+	ld [hli], a
+	ld a, d
+	ld [hli], a
+	pop af
+	ld [rSVBK], a
+	ld a, $1
+	ld [hCGBPalUpdate], a
+	ret
+; e5288 (39:5288)
+
+Unknown_e5288: ; e5288
+; Fade between black and white.
+hue = 0
+rept 32
+	RGB hue, hue, hue
+hue = hue + 1
+endr
+; e52c8
+
+Unknown_e52c8: ; e52c8
+; Fade between black and light blue.
+hue = 0
+rept 32
+	RGB 0, hue / 2, hue
+hue = hue + 1
+endr
+; e5308
+
+Unknown_e5308: ; e5308
+; Fade between black and blue.
+hue = 0
+rept 32
+	RGB 0, 0, hue
+hue = hue + 1
+endr
+; e5348
+
+Functione5348: ; e5348 (39:5348)
+	and a
+	jr nz, .asm_e5350
+	ld hl, Palette_e538d
+	jr .asm_e5353
+.asm_e5350
+	ld hl, Palette_e5395
+.asm_e5353
+	ld a, [wcf65]
+	and $7
+rept 3
+	add a
+endr
+	ld c, a
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	push bc
+	ld de, BGPals
+	ld a, c
+	add e
+	ld e, a
+	ld a, $0
+	adc d
+	ld d, a
+	ld bc, $8
+	call CopyBytes
+	pop bc
+	ld de, UnknBGPals
+	ld a, c
+	add e
+	ld e, a
+	ld a, $0
+	adc d
+	ld d, a
+	ld bc, $8
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	ld a, $1
+	ld [hCGBPalUpdate], a
+	ret
+; e538d (39:538d)
+
+Palette_e538d: ; e538d
+	RGB 24, 12, 09
+	RGB 31, 31, 31
+	RGB 12, 00, 31
+	RGB 00, 00, 00
+; e5395
+
+Palette_e5395: ; e5395
+	RGB 24, 12, 09
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+; e539d
+
+Functione539d: ; e539d (39:539d)
+rept 3
+	add a
+endr
+	ld e, a
+	ld d, $0
+	ld hl, BGPals
+	add hl, de
+rept 4
+	inc hl
+endr
+	ld a, [wcf65]
+	add a
+	ld c, a
+	ld b, $0
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	push hl
+	ld hl, Palette_e53db
+	add hl, bc
+	ld a, [hli]
+	ld d, [hl]
+	ld e, a
+	pop hl
+	ld a, e
+	ld [hli], a
+	ld a, d
+	ld [hli], a
+	push hl
+	ld hl, Palette_e53fb
+	add hl, bc
+	ld a, [hli]
+	ld d, [hl]
+	ld e, a
+	pop hl
+	ld a, e
+	ld [hli], a
+	ld a, d
+	ld [hli], a
+	pop af
+	ld [rSVBK], a
+	ld a, $1
+	ld [hCGBPalUpdate], a
+	ret
+; e53db (39:53db)
+
+Palette_e53db: ; e53db
+hue = 31
+rept 8
+	RGB hue, hue, hue
+hue = hue + -1
+	RGB hue, hue, hue
+hue = hue + -2
+endr
+; e53fb
+
+Palette_e53fb: ; e53fb
+hue = 31
+rept 16
+	RGB hue, hue, hue
+hue = hue + -1
+endr
+; e541b
+
+Functione541b: ; e541b (39:541b)
+	ld a, [rSVBK]
+	push af
+	ld a, $6
+	ld [rSVBK], a
+	ld hl, w6_d000
+	decoord 0, 0
+	ld b, SCREEN_HEIGHT
+.asm_e542a
+	ld c, SCREEN_WIDTH
+.asm_e542c
+	ld a, [hli]
+	ld [de], a
+	inc de
+	dec c
+	jr nz, .asm_e542c
+	ld a, $c
+	add l
+	ld l, a
+	ld a, $0
+	adc h
+	ld h, a
+	dec b
+	jr nz, .asm_e542a
+	pop af
+	ld [rSVBK], a
+	ret
+
+Functione5441: ; e5441 (39:5441)
+	ld a, [wcf64]
+	and $3
+	jr z, Functione5451
+	cp $3
+	jr z, .asm_e544d
+	ret
+.asm_e544d
+	xor a
+	ld [hBGMapMode], a
+	ret
+
+Functione5451: ; e5451 (39:5451)
+	hlcoord 0, 0
+	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+.asm_e5457
+	ld a, [hl]
+	and a
+	jr z, .asm_e5462
+	cp $80
+	jr nc, .asm_e5462
+	xor $8
+	ld [hl], a
+.asm_e5462
+	inc hl
+	dec bc
+	ld a, c
+	or b
+	jr nz, .asm_e5457
+	ld a, $1
+	ld [hBGMapMode], a
+	ret
+
+Functione546d: ; e546d (39:546d)
+	ld a, [wcf64]
+	cp $24
+	ret nc
+	and $c
+	srl a
+	ld e, a
+	ld d, $0
+	ld hl, Unknown_e5496
+	add hl, de
+	ld a, [hli]
+	ld [Requested2bppSource], a
+	ld a, [hli]
+	ld [Requested2bppSource + 1], a
+	ld a, (VTiles2 tile $09) % $100
+	ld [Requested2bppDest], a
+	ld a, (VTiles2 tile $09) / $100
+	ld [Requested2bppDest + 1], a
+	ld a, $4
+	ld [Requested2bpp], a
+	ret
+; e5496 (39:5496)
+
+Unknown_e5496: ; e5496
+	dw GFX_e799d
+	dw GFX_e79dd
+	dw GFX_e7a1d
+	dw GFX_e79dd
+; e549e
+
+Functione549e: ; e549e (39:549e)
+	ld a, $1
+	ld [hCGBPalUpdate], a
+	ret
+
+Functione54a3: ; e54a3 (39:54a3)
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, BGPals
+	ld bc, $80
+	xor a
+	call ByteFill
+	pop af
+	ld [rSVBK], a
+	ld a, $1
+	ld [hCGBPalUpdate], a
+	call DelayFrame
+	call DelayFrame
+	ret
+
+Functione54c2: ; e54c2 (39:54c2)
+	ld a, [rSVBK]
+	push af
+	ld a, $6
+	ld [rSVBK], a
+	push de
+	ld de, w6_d000
+	call Decompress
+	pop hl
+	ld de, w6_d000
+	ld bc, $180
+	call Request2bpp
+	pop af
+	ld [rSVBK], a
+	ret
+
+Functione54de: ; e54de (39:54de)
+	ld a, [rSVBK]
+	push af
+	ld a, $6
+	ld [rSVBK], a
+	push de
+	ld de, w6_d000
+	call Decompress
+	pop hl
+	ld de, w6_d000
+	ld bc, $1ff
+	call Request2bpp
+	pop af
+	ld [rSVBK], a
+	ret
+
+Functione54fa: ; e54fa (39:54fa)
+	ld a, [rSVBK]
+	push af
+	ld a, $6
+	ld [rSVBK], a
+	push de
+	ld de, w6_d000
+	call Decompress
+	pop hl
+	ld de, w6_d000
+	ld bc, $140
+	call Request2bpp
+	pop af
+	ld [rSVBK], a
+	ret
+
+Functione5516: ; e5516 (39:5516)
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, LYOverrides
+	ld bc, $90
+	xor a
+	call ByteFill
+	pop af
+	ld [rSVBK], a
+	ld a, $43
+	ld [hLCDStatCustom], a
+	ret
+
+Functione552f: ; e552f (39:552f)
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld a, [wcf64]
+	and $1
+	jr z, .asm_e5548
+	ld hl, LYOverrides
+	ld a, [hl]
+	inc a
+	ld bc, $5f
+	call ByteFill
+.asm_e5548
+	ld hl, LYOverrides + $5f
+	ld a, [hl]
+rept 2
+	inc a
+endr
+	ld bc, $31
+	call ByteFill
+	ld a, [LYOverrides + 0]
+	ld [hSCX], a
+	pop af
+	ld [rSVBK], a
+	ret
+
+IntroSuicuneRunGFX: ; e555d
+INCBIN "gfx/intro/suicune_run.2bpp.lz"
+; e592d
+
+IntroPichuWooperGFX: ; e592d
+INCBIN "gfx/intro/pichu_wooper.2bpp.lz"
+; e5c7d
+
+IntroBackgroundGFX: ; e5c7d
+INCBIN "gfx/intro/background.2bpp.lz"
+; e5e6d
+
+IntroTilemap004: ; e5e6d
+INCBIN "gfx/intro/004.tilemap.lz"
+; e5ecd
+
+IntroTilemap003: ; e5ecd
+INCBIN "gfx/intro/003.tilemap.lz"
+; e5edd
+
+Palette_e5edd: ; e5edd
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB  0,  4,  5
+	RGB  1,  8,  5
+	RGB  4, 12,  9
+	RGB 24, 12,  9
+	RGB  0,  4,  5
+	RGB  9,  6,  8
+	RGB  8, 16,  5
+	RGB  5, 10,  4
+	RGB 31, 31, 31
+	RGB  9,  6,  8
+	RGB 18,  9,  9
+	RGB 13,  8,  9
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB  2,  5, 22
+	RGB  1,  5, 12
+	RGB 31, 31, 31
+	RGB 31, 10, 25
+	RGB 31, 21,  0
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 21, 31
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+
+IntroUnownsGFX: ; e5f5d
+INCBIN "gfx/intro/unowns.2bpp.lz"
+; e634d
+
+IntroPulseGFX: ; e634d
+INCBIN "gfx/intro/pulse.2bpp.lz"
+; e63dd
+
+IntroTilemap002: ; e63dd
+INCBIN "gfx/intro/002.tilemap.lz"
+; e641d
+
+IntroTilemap001: ; e641d
+INCBIN "gfx/intro/001.tilemap.lz"
+; e642d
+
+IntroTilemap006: ; e642d
+INCBIN "gfx/intro/006.tilemap.lz"
+; e647d
+
+IntroTilemap005: ; e647d
+INCBIN "gfx/intro/005.tilemap.lz"
+; e649d
+
+IntroTilemap008: ; e649d
+INCBIN "gfx/intro/008.tilemap.lz"
+; e655d
+
+IntroTilemap007: ; e655d
+INCBIN "gfx/intro/007.tilemap.lz"
+; e65ad
+
+Palette_365ad: ; e65ad
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 10,  0, 10
+	RGB 19,  0, 19
+	RGB 31,  0, 31
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+
+IntroCrystalUnownsGFX: ; e662d
+INCBIN "gfx/intro/crystal_unowns.2bpp.lz"
+; e672d
+
+IntroTilemap017: ; e672d
+INCBIN "gfx/intro/017.tilemap.lz"
+; e676d
+
+IntroTilemap015: ; e676d
+INCBIN "gfx/intro/015.tilemap.lz"
+; e679d
+
+Palette_e679d: ; e679d
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+
+IntroSuicuneCloseGFX: ; e681d
+INCBIN "gfx/intro/suicune_close.2bpp.lz"
+; e6c3d
+
+IntroTilemap012: ; e6c3d
+INCBIN "gfx/intro/012.tilemap.lz"
+; e6d0d
+
+IntroTilemap011: ; e6d0d
+INCBIN "gfx/intro/011.tilemap.lz"
+; e6d6d
+
+Palette_e6d6d: ; e6d6d
+	RGB 24, 12,  9
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 24, 12,  9
+	RGB 31, 31, 31
+	RGB  8,  9, 31
+	RGB  0,  0,  0
+	RGB 24, 12,  9
+	RGB 12, 20, 31
+	RGB 19,  8, 31
+	RGB  0,  0,  0
+	RGB 12, 20, 31
+	RGB  8,  9, 31
+	RGB 19,  8, 31
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 12, 20, 31
+	RGB  8,  9, 31
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+
+IntroSuicuneJumpGFX: ; e6ded
+INCBIN "gfx/intro/suicune_jump.2bpp.lz"
+; e72ad
+
+IntroSuicuneBackGFX: ; e72ad
+INCBIN "gfx/intro/suicune_back.2bpp.lz"
+; e764d
+
+IntroTilemap010: ; e764d
+INCBIN "gfx/intro/010.tilemap.lz"
+; e76ad
+
+IntroTilemap009: ; e76ad
+INCBIN "gfx/intro/009.tilemap.lz"
+; e76bd
+
+IntroTilemap014: ; e76bd
+INCBIN "gfx/intro/014.tilemap.lz"
+; e778d
+
+IntroTilemap013: ; e778d
+INCBIN "gfx/intro/013.tilemap.lz"
+; e77dd
+
+Palette_e77dd: ; e77dd
+	RGB 24, 12,  9
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 24, 12,  9
+	RGB 31, 31, 31
+	RGB  8,  9, 31
+	RGB  0,  0,  0
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 24, 12,  9
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 12,  0, 31
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 21,  9,  0
+	RGB 21,  9,  0
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+	RGB 31, 31, 31
+	RGB 20, 20, 20
+	RGB 11, 11, 11
+	RGB  0,  0,  0
+
+IntroUnownBackGFX: ; e785d
+INCBIN "gfx/intro/unown_back.2bpp.lz"
+; e799d
+
+GFX_e799d: ; e799d
+INCBIN "gfx/unknown/0e799d.2bpp"
+GFX_e79dd: ; e79dd
+INCBIN "gfx/unknown/0e79dd.2bpp"
+GFX_e7a1d: ; e7a1d
+INCBIN "gfx/unknown/0e7a1d.2bpp"
+
+GFX_e7a5d: ; e7a5d
+INCBIN "gfx/unknown/0e7a5d.2bpp"
+
+
--- /dev/null
+++ b/engine/debug.asm
@@ -1,0 +1,1517 @@
+ColorTest: ; 818ac
+; A debug menu to test monster and trainer palettes at runtime.
+
+	ld a, [hCGB]
+	and a
+	jr nz, .asm_818b5
+	ld a, [hSGB]
+	and a
+	ret z
+
+.asm_818b5
+	ld a, [hInMenu]
+	push af
+	ld a, $1
+	ld [hInMenu], a
+	call DisableLCD
+	call Function81948
+	call Function8197c
+	call Function819a7
+	call Function818f4
+	call EnableLCD
+	ld de, MUSIC_NONE
+	call PlayMusic
+	xor a
+	ld [wJumptableIndex], a
+	ld [wcf66], a
+	ld [wd003], a
+.asm_818de
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .asm_818f0
+	call Function81a74
+	call Function81f5e
+	call DelayFrame
+	jr .asm_818de
+
+.asm_818f0
+	pop af
+	ld [hInMenu], a
+	ret
+; 818f4
+
+Function818f4: ; 818f4
+	ld a, [wd002]
+	and a
+	jr nz, Function81911
+	ld hl, PokemonPalettes
+
+Function818fd: ; 818fd
+	ld de, OverworldMap
+	ld c, NUM_POKEMON + 1
+.asm_81902
+	push bc
+	push hl
+	call Function81928
+	pop hl
+	ld bc, 8
+	add hl, bc
+	pop bc
+	dec c
+	jr nz, .asm_81902
+	ret
+
+Function81911: ; 81911
+	ld hl, TrainerPalettes
+	ld de, OverworldMap
+	ld c, NUM_TRAINER_CLASSES
+.asm_81919
+	push bc
+	push hl
+	call Function81928
+	pop hl
+	ld bc, 4
+	add hl, bc
+	pop bc
+	dec c
+	jr nz, .asm_81919
+	ret
+; 81928
+
+Function81928: ; 81928
+	ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes)
+	call GetFarByte
+	ld [de], a
+	inc de
+	inc hl
+	ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes)
+	call GetFarByte
+	ld [de], a
+	inc de
+	inc hl
+	ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes)
+	call GetFarByte
+	ld [de], a
+	inc de
+	inc hl
+	ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes)
+	call GetFarByte
+	ld [de], a
+	inc de
+	ret
+; 81948
+
+Function81948: ; 81948
+	ld a, $1
+	ld [rVBK], a
+	ld hl, VTiles0
+	ld bc, sScratch - VTiles0
+	xor a
+	call ByteFill
+	ld a, $0
+	ld [rVBK], a
+	ld hl, VTiles0
+	ld bc, sScratch - VTiles0
+	xor a
+	call ByteFill
+	hlcoord 0, 0, AttrMap
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	xor a
+	call ByteFill
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	xor a
+	call ByteFill
+	call ClearSprites
+	ret
+; 8197c
+
+Function8197c: ; 8197c
+	ld hl, DebugColorTestGFX + $10
+	ld de, VTiles2 tile $6a
+	ld bc, $160
+	call CopyBytes
+	ld hl, DebugColorTestGFX
+	ld de, VTiles0
+	ld bc, $10
+	call CopyBytes
+	call LoadStandardFont
+	ld hl, VTiles1
+	lb bc, 8, 0
+.asm_8199d
+	ld a, [hl]
+	xor $ff
+	ld [hli], a
+	dec bc
+	ld a, c
+	or b
+	jr nz, .asm_8199d
+	ret
+; 819a7
+
+Function819a7: ; 819a7
+	ld a, [hCGB]
+	and a
+	ret z
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, Palette_819f4
+	ld de, BGPals
+	ld bc, $80
+	call CopyBytes
+	ld a, $80
+	ld [rBGPI], a
+	ld hl, Palette_819f4
+	ld c, $40
+	xor a
+.asm_819c8
+	ld [rBGPD], a
+	dec c
+	jr nz, .asm_819c8
+	ld a, $80
+	ld [rOBPI], a
+	ld hl, Palette_81a34
+	ld c, $40
+.asm_819d6
+	ld a, [hli]
+	ld [rOBPD], a
+	dec c
+	jr nz, .asm_819d6
+	ld a, $94
+	ld [wc608], a
+	ld a, $52
+	ld [wc608 + 1], a
+	ld a, $4a
+	ld [wc608 + 2], a
+	ld a, $29
+	ld [wc608 + 3], a
+	pop af
+	ld [rSVBK], a
+	ret
+; 819f4
+
+Palette_819f4: ; 819f4
+	; white
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+
+	; red
+	RGB 31, 00, 00
+	RGB 31, 00, 00
+	RGB 31, 00, 00
+	RGB 00, 00, 00
+
+	; green
+	RGB 00, 31, 00
+	RGB 00, 31, 00
+	RGB 00, 31, 00
+	RGB 00, 00, 00
+
+	; blue
+	RGB 00, 00, 31
+	RGB 00, 00, 31
+	RGB 00, 00, 31
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+
+Palette_81a34: ; 81a34
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+
+	; red
+	RGB 31, 31, 31
+	RGB 31, 00, 00
+	RGB 31, 00, 00
+	RGB 00, 00, 00
+
+	; green
+	RGB 31, 31, 31
+	RGB 00, 31, 00
+	RGB 00, 31, 00
+	RGB 00, 00, 00
+
+	; blue
+	RGB 31, 31, 31
+	RGB 00, 00, 31
+	RGB 00, 00, 31
+	RGB 00, 00, 00
+; 81a74
+
+Function81a74: ; 81a74
+	call JoyTextDelay
+	ld a, [wJumptableIndex]
+	cp $4
+	jr nc, .asm_81a8b
+	ld hl, hJoyLast
+	ld a, [hl]
+	and SELECT
+	jr nz, .asm_81a9a
+	ld a, [hl]
+	and START
+	jr nz, .asm_81aab
+
+.asm_81a8b
+	ld a, [wJumptableIndex]
+	ld e, a
+	ld d, 0
+	ld hl, Jumptable_81acf
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+
+.asm_81a9a
+	call Function81eca
+	call Function81ac3
+	ld e, a
+	ld a, [wcf66]
+	inc a
+	cp e
+	jr c, .asm_81aba
+	xor a
+	jr .asm_81aba
+
+.asm_81aab
+	call Function81eca
+	ld a, [wcf66]
+	dec a
+	cp $ff
+	jr nz, .asm_81aba
+	call Function81ac3
+	dec a
+
+.asm_81aba
+	ld [wcf66], a
+	ld a, $0
+	ld [wJumptableIndex], a
+	ret
+; 81ac3
+
+Function81ac3: ; 81ac3
+; Looping back around the pic set.
+	ld a, [wd002]
+	and a
+	jr nz, .asm_81acc
+	ld a, NUM_POKEMON ; CELEBI
+	ret
+
+.asm_81acc
+	ld a, NUM_TRAINER_CLASSES - 1 ; MYSTICALMAN
+	ret
+; 81acf
+
+Jumptable_81acf: ; 81acf
+	dw Function81adb
+	dw Function81c18
+	dw Function81c33
+	dw Function81cc2
+	dw Function81d8e
+	dw Function81daf
+; 81adb
+
+Function81adb: ; 81adb
+	xor a
+	ld [hBGMapMode], a
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	ld a, $6f
+	call ByteFill
+	hlcoord 1, 3
+	lb bc, 7, 18
+	ld a, $6c
+	call Bank20_FillBoxWithByte
+	hlcoord 11, 0
+	lb bc, 2, 3
+	ld a, $6d
+	call Bank20_FillBoxWithByte
+	hlcoord 16, 0
+	lb bc, 2, 3
+	ld a, $6e
+	call Bank20_FillBoxWithByte
+	call Function81bc0
+	call Function81bf4
+	ld a, [wcf66]
+	inc a
+	ld [CurPartySpecies], a
+	ld [wd265], a
+	hlcoord 0, 1
+	ld de, wd265
+	lb bc, PRINTNUM_LEADINGZEROS | 1, 3
+	call PrintNum
+	ld a, [wd002]
+	and a
+	jr nz, .asm_81b7a
+	ld a, $1
+	ld [UnownLetter], a
+	call GetPokemonName
+	hlcoord 4, 1
+	call PlaceString
+	xor a
+	ld [wc2c6], a
+	hlcoord 12, 3
+	call _PrepMonFrontpic
+	ld de, VTiles2 tile $31
+	predef GetBackpic
+	ld a, $31
+	ld [hFillBox], a
+	hlcoord 2, 4
+	lb bc, 6, 6
+	predef FillBox
+	ld a, [wd003]
+	and a
+	jr z, .asm_81b66
+	ld de, String_81baf
+	jr .asm_81b69
+
+.asm_81b66
+	ld de, String_81bb4
+
+.asm_81b69
+	hlcoord 7, 17
+	call PlaceString
+	hlcoord 0, 17
+	ld de, String_81bb9
+	call PlaceString
+	jr .asm_81ba9
+
+.asm_81b7a
+	ld a, [wd265]
+	ld [TrainerClass], a
+	callab Function3957b
+	ld de, StringBuffer1
+	hlcoord 4, 1
+	call PlaceString
+	ld de, VTiles2
+	callab GetTrainerPic
+	xor a
+	ld [TempEnemyMonSpecies], a
+	ld [hFillBox], a
+	hlcoord 2, 3
+	lb bc, 7, 7
+	predef FillBox
+
+.asm_81ba9
+	ld a, $1
+	ld [wJumptableIndex], a
+	ret
+; 81baf
+
+String_81baf: db "レア", $6f, $6f, "@" ; rare (shiny)
+String_81bb4: db "ノーマル@" ; normal
+String_81bb9: db $7a, "きりかえ▶@" ; (A) switches
+; 81bc0
+
+Function81bc0: ; 81bc0
+	decoord 0, 11, AttrMap
+	hlcoord 2, 11
+	ld a, $1
+	call Function81bde
+	decoord 0, 13, AttrMap
+	hlcoord 2, 13
+	ld a, $2
+	call Function81bde
+	decoord 0, 15, AttrMap
+	hlcoord 2, 15
+	ld a, $3
+
+Function81bde: ; 81bde
+	push af
+	ld a, $6a
+	ld [hli], a
+	ld bc, $f
+	ld a, $6b
+	call ByteFill
+	ld l, e
+	ld h, d
+	pop af
+	ld bc, $28
+	call ByteFill
+	ret
+; 81bf4
+
+Function81bf4: ; 81bf4
+	ld a, [wcf66]
+	inc a
+	ld l, a
+	ld h, $0
+rept 2
+	add hl, hl
+endr
+	ld de, OverworldMap
+	add hl, de
+	ld de, wc608
+	ld bc, 4
+	call CopyBytes
+	xor a
+	ld [wcf64], a
+	ld [wcf65], a
+	ld de, wc608
+	call Function81ea5
+	ret
+; 81c18
+
+Function81c18: ; 81c18
+	ld a, [hCGB]
+	and a
+	jr z, .asm_81c2a
+	ld a, $2
+	ld [hBGMapMode], a
+	call DelayFrame
+	call DelayFrame
+	call DelayFrame
+
+.asm_81c2a
+	call WaitBGMap
+	ld a, $2
+	ld [wJumptableIndex], a
+	ret
+; 81c33
+
+Function81c33: ; 81c33
+	ld a, [hCGB]
+	and a
+	jr z, .asm_81c69
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, BGPals
+	ld de, wc608
+	ld c, $1
+	call Function81ee3
+	hlcoord 10, 2
+	ld de, wc608
+	call Function81ca7
+	hlcoord 15, 2
+	ld de, wc608 + 2
+	call Function81ca7
+	ld a, $1
+	ld [hCGBPalUpdate], a
+	ld a, $3
+	ld [wJumptableIndex], a
+	pop af
+	ld [rSVBK], a
+	ret
+
+.asm_81c69
+	ld hl, wcda9
+	ld a, $1
+	ld [hli], a
+	ld a, $ff
+	ld [hli], a
+	ld a, $7f
+	ld [hli], a
+	ld a, [wc608]
+	ld [hli], a
+	ld a, [wc608 + 1]
+	ld [hli], a
+	ld a, [wc608 + 2]
+	ld [hli], a
+	ld a, [wc608 + 3]
+	ld [hli], a
+	xor a
+rept 2
+	ld [hli], a
+endr
+	ld [hl], a
+	ld hl, wcda9
+	call Function81f0c
+	hlcoord 10, 2
+	ld de, wc608
+	call Function81ca7
+	hlcoord 15, 2
+	ld de, wc608 + 2
+	call Function81ca7
+	ld a, $3
+	ld [wJumptableIndex], a
+	ret
+; 81ca7
+
+Function81ca7: ; 81ca7
+rept 3
+	inc hl
+endr
+	ld a, [de]
+	call Function81cbc
+	ld a, [de]
+	swap a
+	call Function81cbc
+	inc de
+	ld a, [de]
+	call Function81cbc
+	ld a, [de]
+	swap a
+
+Function81cbc: ; 81cbc
+	and $f
+	add $70
+	ld [hld], a
+	ret
+; 81cc2
+
+Function81cc2: ; 81cc2
+	ld a, [hJoyLast]
+	and B_BUTTON
+	jr nz, .asm_81cdf
+	ld a, [hJoyLast]
+	and A_BUTTON
+	jr nz, .asm_81ce5
+	ld a, [wcf64]
+	and $3
+	ld e, a
+	ld d, 0
+	ld hl, Jumptable_81d02
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+
+.asm_81cdf
+	ld a, $4
+	ld [wJumptableIndex], a
+	ret
+
+.asm_81ce5
+	ld a, [wd002]
+	and a
+	ret nz
+	ld a, [wd003]
+	xor $4
+	ld [wd003], a
+	ld c, a
+	ld b, 0
+	ld hl, PokemonPalettes
+	add hl, bc
+	call Function818fd
+	ld a, $0
+	ld [wJumptableIndex], a
+	ret
+; 81d02
+
+Jumptable_81d02: ; 81d02
+	dw Function81d0a
+	dw Function81d34
+	dw Function81d46
+	dw Function81d58
+; 81d0a
+
+Function81d0a: ; 81d0a
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_DOWN
+	jr nz, Function81d89
+	ld a, [hl]
+	and D_LEFT
+	jr nz, .asm_81d1d
+	ld a, [hl]
+	and D_RIGHT
+	jr nz, .asm_81d28
+	ret
+
+.asm_81d1d
+	xor a
+	ld [wcf65], a
+	ld de, wc608
+	call Function81ea5
+	ret
+
+.asm_81d28
+	ld a, $1
+	ld [wcf65], a
+	ld de, wc608 + 2
+	call Function81ea5
+	ret
+
+Function81d34: ; 81d34
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_DOWN
+	jr nz, Function81d89
+	ld a, [hl]
+	and D_UP
+	jr nz, Function81d84
+	ld hl, wc608 + 10
+	jr Function81d63
+
+Function81d46: ; 81d46
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_DOWN
+	jr nz, Function81d89
+	ld a, [hl]
+	and D_UP
+	jr nz, Function81d84
+	ld hl, wc608 + 11
+	jr Function81d63
+
+Function81d58: ; 81d58
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, Function81d84
+	ld hl, wc608 + 12
+
+Function81d63: ; 81d63
+	ld a, [hJoyLast]
+	and D_RIGHT
+	jr nz, Function81d70
+	ld a, [hJoyLast]
+	and D_LEFT
+	jr nz, Function81d77
+	ret
+
+Function81d70: ; 81d70
+	ld a, [hl]
+	cp $1f
+	ret nc
+	inc [hl]
+	jr Function81d7b
+
+Function81d77: ; 81d77
+	ld a, [hl]
+	and a
+	ret z
+	dec [hl]
+
+Function81d7b: ; 81d7b
+	call Function81e67
+	ld a, $2
+	ld [wJumptableIndex], a
+	ret
+
+Function81d84: ; 81d84
+	ld hl, wcf64
+	dec [hl]
+	ret
+
+Function81d89: ; 81d89
+	ld hl, wcf64
+	inc [hl]
+	ret
+; 81d8e
+
+Function81d8e: ; 81d8e
+	hlcoord 0, 10
+	ld bc, $a0
+	ld a, $6f
+	call ByteFill
+	hlcoord 2, 12
+	ld de, String_81fcd
+	call PlaceString
+	xor a
+	ld [wd004], a
+	call Function81df4
+	ld a, $5
+	ld [wJumptableIndex], a
+	ret
+; 81daf
+
+Function81daf: ; 81daf
+	ld hl, hJoyPressed
+	ld a, [hl]
+	and B_BUTTON
+	jr nz, .asm_81dbb
+	call Function81dc7
+	ret
+
+.asm_81dbb
+	ld a, $0
+	ld [wJumptableIndex], a
+	ret
+; 81dc1
+
+Function81dc1: ; 81dc1
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+; 81dc7
+
+Function81dc7: ; 81dc7
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, .asm_81dd5
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .asm_81de2
+	ret
+
+.asm_81dd5
+	ld a, [wd004]
+	cp $3b
+	jr z, .asm_81ddf
+	inc a
+	jr .asm_81ded
+
+.asm_81ddf
+	xor a
+	jr .asm_81ded
+
+.asm_81de2
+	ld a, [wd004]
+	and a
+	jr z, .asm_81deb
+	dec a
+	jr .asm_81ded
+
+.asm_81deb
+	ld a, $3b
+
+.asm_81ded
+	ld [wd004], a
+	call Function81df4
+	ret
+; 81df4
+
+Function81df4: ; 81df4
+	hlcoord 10, 11
+	call Function81e5e
+	hlcoord 10, 12
+	call Function81e5e
+	hlcoord 10, 13
+	call Function81e5e
+	hlcoord 10, 14
+	call Function81e5e
+	ld a, [wd004]
+	inc a
+	ld [wd265], a
+	predef GetTMHMMove
+	ld a, [wd265]
+	ld [wd262], a
+	call GetMoveName
+	hlcoord 10, 12
+	call PlaceString
+	ld a, [wd004]
+	call Function81e55
+	ld [CurItem], a
+	predef CanLearnTMHMMove
+	ld a, c
+	and a
+	ld de, String_81e46
+	jr nz, .asm_81e3f
+	ld de, String_81e4d
+
+.asm_81e3f
+	hlcoord 10, 14
+	call PlaceString
+	ret
+; 81e46
+
+String_81e46: db "おぼえられる@" ; can be taught
+String_81e4d: db "おぼえられない@" ; cannot be taught
+; 81e55
+
+Function81e55: ; 81e55
+	cp $32
+	jr c, .asm_81e5b
+rept 2
+	inc a
+endr
+
+.asm_81e5b
+	add $bf
+	ret
+; 81e5e
+
+Function81e5e: ; 81e5e
+	ld bc, $a
+	ld a, $6f
+	call ByteFill
+	ret
+; 81e67
+
+Function81e67: ; 81e67
+	ld a, [wc608 + 10]
+	and $1f
+	ld e, a
+	ld a, [wc608 + 11]
+	and $7
+	sla a
+	swap a
+	or e
+	ld e, a
+	ld a, [wc608 + 11]
+	and $18
+	sla a
+	swap a
+	ld d, a
+	ld a, [wc608 + 12]
+	and $1f
+	sla a
+	sla a
+	or d
+	ld d, a
+	ld a, [wcf65]
+	and a
+	jr z, .asm_81e9c
+	ld a, e
+	ld [wc608 + 2], a
+	ld a, d
+	ld [wc608 + 3], a
+	ret
+
+.asm_81e9c
+	ld a, e
+	ld [wc608], a
+	ld a, d
+	ld [wc608 + 1], a
+	ret
+; 81ea5
+
+Function81ea5: ; 81ea5
+	ld a, [de]
+	and $1f
+	ld [wc608 + 10], a
+	ld a, [de]
+	and $e0
+	swap a
+	srl a
+	ld b, a
+	inc de
+	ld a, [de]
+	and $3
+	swap a
+	srl a
+	or b
+	ld [wc608 + 11], a
+	ld a, [de]
+	and $7c
+	srl a
+	srl a
+	ld [wc608 + 12], a
+	ret
+; 81eca
+
+Function81eca: ; 81eca
+	ld a, [wcf66]
+	inc a
+	ld l, a
+	ld h, $0
+rept 2
+	add hl, hl
+endr
+	ld de, OverworldMap
+	add hl, de
+	ld e, l
+	ld d, h
+	ld hl, wc608
+	ld bc, 4
+	call CopyBytes
+	ret
+; 81ee3
+
+Function81ee3: ; 81ee3
+.asm_81ee3
+	ld a, $ff
+	ld [hli], a
+	ld a, $7f
+	ld [hli], a
+	ld a, [de]
+	inc de
+	ld [hli], a
+	ld a, [de]
+	inc de
+	ld [hli], a
+	ld a, [de]
+	inc de
+	ld [hli], a
+	ld a, [de]
+	inc de
+	ld [hli], a
+	xor a
+rept 2
+	ld [hli], a
+endr
+	dec c
+	jr nz, .asm_81ee3
+	ret
+; 81efc
+
+Bank20_FillBoxWithByte: ; 81efc
+; For some reason, we have another copy of FillBoxWithByte here
+.row
+	push bc
+	push hl
+.col
+	ld [hli], a
+	dec c
+	jr nz, .col
+	pop hl
+	ld bc, SCREEN_WIDTH
+	add hl, bc
+	pop bc
+	dec b
+	jr nz, .row
+	ret
+; 81f0c
+
+Function81f0c: ; 81f0c
+	ld a, [wcfbe]
+	push af
+	set 7, a
+	ld [wcfbe], a
+	call Function81f1d
+	pop af
+	ld [wcfbe], a
+	ret
+; 81f1d
+
+Function81f1d: ; 81f1d
+	ld a, [hl]
+	and $7
+	ret z
+	ld b, a
+.asm_81f22
+	push bc
+	xor a
+	ld [rJOYP], a
+	ld a, $30
+	ld [rJOYP], a
+	ld b, $10
+.asm_81f2c
+	ld e, $8
+	ld a, [hli]
+	ld d, a
+.asm_81f30
+	bit 0, d
+	ld a, $10
+	jr nz, .asm_81f38
+	ld a, $20
+
+.asm_81f38
+	ld [rJOYP], a
+	ld a, $30
+	ld [rJOYP], a
+	rr d
+	dec e
+	jr nz, .asm_81f30
+	dec b
+	jr nz, .asm_81f2c
+	ld a, $20
+	ld [rJOYP], a
+	ld a, $30
+	ld [rJOYP], a
+	ld de, 7000
+.asm_81f51
+	nop
+	nop
+	nop
+	dec de
+	ld a, d
+	or e
+	jr nz, .asm_81f51
+	pop bc
+	dec b
+	jr nz, .asm_81f22
+	ret
+; 81f5e
+
+Function81f5e: ; 81f5e
+	ld a, $6f
+	hlcoord 10, 0
+	ld [hl], a
+	hlcoord 15, 0
+	ld [hl], a
+	hlcoord 1, 11
+	ld [hl], a
+	hlcoord 1, 13
+	ld [hl], a
+	hlcoord 1, 15
+	ld [hl], a
+	ld a, [wJumptableIndex]
+	cp $3
+	jr nz, .asm_81fc9
+	ld a, [wcf64]
+	and a
+	jr z, .asm_81f8d
+	dec a
+	hlcoord 1, 11
+	ld bc, 2 * SCREEN_WIDTH
+	call AddNTimes
+	ld [hl], $ed
+
+.asm_81f8d
+	ld a, [wcf65]
+	and a
+	jr z, .asm_81f98
+	hlcoord 15, 0
+	jr .asm_81f9b
+
+.asm_81f98
+	hlcoord 10, 0
+
+.asm_81f9b
+	ld [hl], $ed
+	ld b, $70
+	ld c, $5
+	ld hl, Sprites
+	ld de, wc608 + 10
+	call .asm_81fb7
+	ld de, wc608 + 11
+	call .asm_81fb7
+	ld de, wc608 + 12
+	call .asm_81fb7
+	ret
+
+.asm_81fb7
+	ld a, b
+	ld [hli], a
+	ld a, [de]
+rept 2
+	add a
+endr
+	add $18
+	ld [hli], a
+	xor a
+	ld [hli], a
+	ld a, c
+	ld [hli], a
+	ld a, $10
+	add b
+	ld b, a
+	inc c
+	ret
+
+.asm_81fc9
+	call ClearSprites
+	ret
+; 81fcd
+
+String_81fcd: ; 81fcd
+	db   "おわりますか?" ; Are you finished?
+	next "はい", $f2, $f2, $f2, $7a ; YES (A)
+	next "いいえ",    $f2, $f2, $7b ; NO  (B)
+	db   "@"
+; 81fe3
+
+DebugColorTestGFX:
+INCBIN "gfx/debug/color_test.2bpp"
+
+
+TilesetColorTest:
+	ret
+	xor a
+	ld [wJumptableIndex], a
+	ld [wcf64], a
+	ld [wcf65], a
+	ld [wcf66], a
+	ld [hMapAnims], a
+	call ClearSprites
+	call OverworldTextModeSwitch
+	call Function3200
+	xor a
+	ld [hBGMapMode], a
+	ld de, DebugColorTestGFX + $10
+	ld hl, VTiles2 tile $6a
+	lb bc, BANK(DebugColorTestGFX), $16
+	call Request2bpp
+	ld de, DebugColorTestGFX
+	ld hl, VTiles1
+	lb bc, BANK(DebugColorTestGFX), 1
+	call Request2bpp
+	ld a, VBGMap1 / $100
+	ld [hBGMapAddress + 1], a
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	ld a, $6f
+	call ByteFill
+	hlcoord 0, 0, AttrMap
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	ld a, $7
+	call ByteFill
+	ld de, $15
+	ld a, $6c
+	call Function821d2
+	ld de, $1a
+	ld a, $6d
+	call Function821d2
+	ld de, $1f
+	ld a, $6e
+	call Function821d2
+	ld de, $24
+	ld a, $6f
+	call Function821d2
+	call Function821f4
+	call Function8220f
+	call Function3200
+	ld [wJumptableIndex], a
+	ld a, $40
+	ld [hWY], a
+	ret
+; 821d2
+
+Function821d2: ; 821d2
+	hlcoord 0, 0
+	call Function821de
+
+Function821d8: ; 821d8
+	ld a, [wcf64]
+	hlcoord 0, 0, AttrMap
+
+Function821de: ; 821de
+	add hl, de
+rept 4
+	ld [hli], a
+endr
+	ld bc, $10
+	add hl, bc
+rept 4
+	ld [hli], a
+endr
+	ld bc, $10
+	add hl, bc
+rept 4
+	ld [hli], a
+endr
+	ret
+; 821f4
+
+Function821f4: ; 821f4
+	hlcoord 2, 4
+	call Function82203
+	hlcoord 2, 6
+	call Function82203
+	hlcoord 2, 8
+
+Function82203: ; 82203
+	ld a, $6a
+	ld [hli], a
+	ld bc, $10 - 1
+	ld a, $6b
+	call ByteFill
+	ret
+; 8220f
+
+Function8220f: ; 8220f
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld a, [wcf64]
+	ld l, a
+	ld h, $0
+rept 3
+	add hl, hl
+endr
+	ld de, UnknBGPals
+	add hl, de
+	ld de, wc608
+	ld bc, 8
+	call CopyBytes
+	ld de, wc608
+	call Function81ea5
+	pop af
+	ld [rSVBK], a
+	ret
+; 82236
+
+
+Function82236: ; 82236
+	ld hl, hJoyLast
+	ld a, [hl]
+	and SELECT
+	jr nz, .loop7
+	ld a, [hl]
+	and B_BUTTON
+	jr nz, .asm_82299
+	call Function822f0
+	ret
+
+.loop7
+	ld hl, wcf64
+	ld a, [hl]
+	inc a
+	and $7
+	cp $7
+	jr nz, .asm_82253
+	xor a
+
+.asm_82253
+	ld [hl], a
+	ld de, $15
+	call Function821d8
+	ld de, $1a
+	call Function821d8
+	ld de, $1f
+	call Function821d8
+	ld de, $24
+	call Function821d8
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, BGPals
+	ld a, [wcf64]
+	ld bc, 8
+	call AddNTimes
+	ld de, wc608
+	ld bc, 8
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	ld a, $2
+	ld [hBGMapMode], a
+	ld c, 3
+	call DelayFrames
+	ld a, $1
+	ld [hBGMapMode], a
+	ret
+
+.asm_82299
+	call ClearSprites
+	ld a, [hWY]
+	xor $d0
+	ld [hWY], a
+	ret
+; 822a3
+
+Function822a3: ; 822a3
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, BGPals
+	ld a, [wcf64]
+	ld bc, 8
+	call AddNTimes
+	ld e, l
+	ld d, h
+	ld hl, wc608
+	ld bc, 8
+	call CopyBytes
+	hlcoord 1, 0
+	ld de, wc608
+	call Function81ca7
+	hlcoord 6, 0
+	ld de, wc608 + 2
+	call Function81ca7
+	hlcoord 11, 0
+	ld de, wc608 + 4
+	call Function81ca7
+	hlcoord 16, 0
+	ld de, wc608 + 6
+	call Function81ca7
+	pop af
+	ld [rSVBK], a
+	ld a, $1
+	ld [hCGBPalUpdate], a
+	call DelayFrame
+	ret
+; 822f0
+
+Function822f0: ; 822f0
+	ld a, [wcf65]
+	and 3
+	ld e, a
+	ld d, 0
+	ld hl, .jumptable
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 82301
+
+.jumptable: ; 82301
+	dw Function82309
+	dw Function82339
+	dw Function8234b
+	dw Function8235d
+; 82309
+
+Function82309: ; 82309
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_DOWN
+	jr nz, Function8238c
+	ld a, [hl]
+	and D_LEFT
+	jr nz, .asm_8231c
+	ld a, [hl]
+	and D_RIGHT
+	jr nz, .asm_82322
+	ret
+
+.asm_8231c
+	ld a, [wcf66]
+	dec a
+	jr .asm_82326
+
+.asm_82322
+	ld a, [wcf66]
+	inc a
+
+.asm_82326
+	and $3
+	ld [wcf66], a
+	ld e, a
+	ld d, $0
+	ld hl, wc608
+rept 2
+	add hl, de
+endr
+	ld e, l
+	ld d, h
+	call Function81ea5
+	ret
+
+Function82339: ; 82338
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_DOWN
+	jr nz, Function8238c
+	ld a, [hl]
+	and D_UP
+	jr nz, Function82387
+	ld hl, wc608 + 10
+	jr Function82368
+
+Function8234b: ; 8234b
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_DOWN
+	jr nz, Function8238c
+	ld a, [hl]
+	and D_UP
+	jr nz, Function82387
+	ld hl, wc608 + 11
+	jr Function82368
+
+Function8235d: ; 8235d
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, Function82387
+	ld hl, wc608 + 12
+
+Function82368: ; 82368
+	ld a, [hJoyLast]
+	and D_RIGHT
+	jr nz, .asm_82375
+	ld a, [hJoyLast]
+	and D_LEFT
+	jr nz, .asm_8237c
+	ret
+
+.asm_82375
+	ld a, [hl]
+	cp $1f
+	ret nc
+	inc [hl]
+	jr .asm_82380
+
+.asm_8237c
+	ld a, [hl]
+	and a
+	ret z
+	dec [hl]
+
+.asm_82380
+	call Function82391
+	call Function822a3
+	ret
+
+Function82387: ; 82387
+	ld hl, wcf65
+	dec [hl]
+	ret
+
+Function8238c: ; 8238c
+	ld hl, wcf65
+	inc [hl]
+	ret
+; 82391
+
+Function82391: ; 82391
+	ld a, [wc608 + 10]
+	and $1f
+	ld e, a
+	ld a, [wc608 + 11]
+	and $7
+	sla a
+	swap a
+	or e
+	ld e, a
+	ld a, [wc608 + 11]
+	and $18
+	sla a
+	swap a
+	ld d, a
+	ld a, [wc608 + 12]
+	and $1f
+	sla a
+	sla a
+	or d
+	ld d, a
+	ld a, [wcf66]
+	ld c, a
+	ld b, $0
+	ld hl, wc608
+rept 2
+	add hl, bc
+endr
+	ld a, e
+	ld [hli], a
+	ld [hl], d
+	ret
+; 823c6
+
+Function823c6: ; 823c6
+	ret
+
+Function823c7: ; 823c7
+	ret
+; 823c8
--- /dev/null
+++ b/engine/decorations.asm
@@ -1,0 +1,1438 @@
+InitDecorations: ; 26751 (9:6751)
+	ld a, DECO_FEATHERY_BED
+	ld [Bed], a
+	ld a, DECO_TOWN_MAP
+	ld [Poster], a
+	ret
+
+_KrisDecorationMenu: ; 0x2675c
+	ld a, [wcf76]
+	push af
+	ld hl, .MenuDataHeader
+	call LoadMenuDataHeader
+	xor a
+	ld [wd1ee], a
+	ld a, $1
+	ld [wd1ef], a
+.top_loop
+	ld a, [wd1ef]
+	ld [wMenuCursorBuffer], a
+	call .FindCategoriesWithOwnedDecos
+	call DoNthMenu
+	ld a, [MenuSelection2]
+	ld [wd1ef], a
+	jr c, .exit_menu
+	ld a, [MenuSelection]
+	ld hl, .pointers
+	call MenuJumptable
+	jr nc, .top_loop
+
+.exit_menu
+	call ExitMenu
+	pop af
+	ld [wcf76], a
+	ld a, [wd1ee]
+	ld c, a
+	ret
+; 0x2679a
+
+.MenuDataHeader: ; 0x2679a
+	db $40 ; flags
+	db 00, 05 ; start coords
+	db 17, 19 ; end coords
+	dw .MenuData2
+	db 1 ; default option
+; 0x267a2
+
+.MenuData2: ; 0x267a2
+	db $a0 ; flags
+	db 0 ; items
+	dw wd002
+	dw PlaceNthMenuStrings
+	dw .pointers
+; 0x267aa
+
+.pointers: ; 267aa
+	dw DecoBedMenu, .bed
+	dw DecoCarpetMenu, .carpet
+	dw DecoPlantMenu, .plant
+	dw DecoPosterMenu, .poster
+	dw DecoConsoleMenu, .game
+	dw DecoOrnamentMenu, .ornament
+	dw DecoBigDollMenu, .big_doll
+	dw DecoExitMenu, .exit
+
+.bed      db "BED@"
+.carpet   db "CARPET@"
+.plant    db "PLANT@"
+.poster   db "POSTER@"
+.game     db "GAME CONSOLE@"
+.ornament db "ORNAMENT@"
+.big_doll db "BIG DOLL@"
+.exit     db "EXIT@"
+; 26806
+
+.FindCategoriesWithOwnedDecos: ; 26806
+	xor a
+	ld [wcf76], a
+	call .ClearStringBuffer2
+	call .FindOwndDecos
+	ld a, 7
+	call .AppendToStringBuffer2
+	ld hl, StringBuffer2
+	ld de, wd002
+	ld bc, ITEM_NAME_LENGTH
+	call CopyBytes
+	ret
+
+.ClearStringBuffer2: ; 26822 (9:6822)
+	ld hl, StringBuffer2
+	xor a
+	ld [hli], a
+	ld bc, ITEM_NAME_LENGTH - 1
+	ld a, -1
+	call ByteFill
+	ret
+
+.AppendToStringBuffer2: ; 26830 (9:6830)
+	ld hl, StringBuffer2
+	inc [hl]
+	ld e, [hl]
+	ld d, 0
+	add hl, de
+	ld [hl], a
+	ret
+
+.FindOwndDecos: ; 2683a (9:683a)
+	ld hl, .jumptable
+.loop
+	ld a, [hli]
+	ld e, a
+	ld a, [hli]
+	ld d, a
+	or e
+	jr z, .done
+	push hl
+	call _de_
+	pop hl
+	jr nc, .next
+	ld a, [hl]
+	push hl
+	call .AppendToStringBuffer2
+	pop hl
+.next
+	inc hl
+	jr .loop
+.done
+	ret
+; 26855 (9:6855)
+
+.jumptable: ; 26855
+	dwb FindOwnedBeds, 0 ; bed
+	dwb FindOwnedCarpets, 1 ; carpet
+	dwb FindOwnedPlants, 2 ; plant
+	dwb FindOwnedPosters, 3 ; poster
+	dwb FindOwnedConsoles, 4 ; game console
+	dwb FindOwnedOrnaments, 5 ; ornament
+	dwb FindOwnedBigDolls, 6 ; big doll
+	dw 0 ; end
+; 2686c
+
+Deco_FillTempWithMinusOne: ; 2686c
+	xor a
+	ld hl, wd002
+	ld [hli], a
+	ld a, -1
+	ld bc, $10
+	call ByteFill
+	ret
+; 2687a
+
+CheckAllDecorationFlags: ; 2687a
+.loop
+	ld a, [hli]
+	cp -1
+	jr z, .done
+	push hl
+	push af
+	ld b, CHECK_FLAG
+	call DecorationFlagAction
+	ld a, c
+	and a
+	pop bc
+	ld a, b
+	call nz, AppendDecoIndex
+	pop hl
+	jr .loop
+
+.done
+	ret
+; 26891
+
+AppendDecoIndex: ; 26891
+	ld hl, wd002
+	inc [hl]
+	ld e, [hl]
+	ld d, $0
+	add hl, de
+	ld [hl], a
+	ret
+; 2689b
+
+FindOwnedDecosInCategory: ; 2689b
+	push bc
+	push hl
+	call Deco_FillTempWithMinusOne
+	pop hl
+	call CheckAllDecorationFlags
+	pop bc
+	ld a, [wd002]
+	and a
+	ret z
+
+	ld a, c
+	call AppendDecoIndex
+	ld a, 0
+	call AppendDecoIndex
+	scf
+	ret
+; 268b5
+
+DecoBedMenu: ; 268b5
+	call FindOwnedBeds
+	call PopulateDecoCategoryMenu
+	xor a
+	ret
+; 268bd
+
+FindOwnedBeds: ; 268bd
+	ld hl, .beds
+	ld c, DECO_BEDS
+	jp FindOwnedDecosInCategory
+; 268c5
+
+.beds: ; 268c5
+	db DECO_FEATHERY_BED ; 2
+	db DECO_PINK_BED ; 3
+	db DECO_POLKADOT_BED ; 4
+	db DECO_PIKACHU_BED ; 5
+	db -1
+; 268ca
+
+DecoCarpetMenu: ; 268ca
+	call FindOwnedCarpets
+	call PopulateDecoCategoryMenu
+	xor a
+	ret
+; 268d2
+
+FindOwnedCarpets: ; 268d2
+	ld hl, .carpets
+	ld c, DECO_CARPETS
+	jp FindOwnedDecosInCategory
+; 268da
+
+.carpets: ; 268da
+	db DECO_RED_CARPET ; 7
+	db DECO_BLUE_CARPET ; 8
+	db DECO_YELLOW_CARPET ; 9
+	db DECO_GREEN_CARPET ; a
+	db -1
+; 268df
+
+DecoPlantMenu: ; 268df
+	call FindOwnedPlants
+	call PopulateDecoCategoryMenu
+	xor a
+	ret
+; 268e7
+
+FindOwnedPlants: ; 268e7
+	ld hl, .plants
+	ld c, DECO_0B
+	jp FindOwnedDecosInCategory
+; 268ef
+
+.plants: ; 268ef
+	db DECO_MAGNAPLANT ; c
+	db DECO_TROPICPLANT ; d
+	db DECO_JUMBOPLANT ; e
+	db -1
+; 268f3
+
+DecoPosterMenu: ; 268f3
+	call FindOwnedPosters
+	call PopulateDecoCategoryMenu
+	xor a
+	ret
+; 268fb
+
+FindOwnedPosters: ; 268fb
+	ld hl, .posters
+	ld c, DECO_POSTERS
+	jp FindOwnedDecosInCategory
+; 26903
+
+.posters: ; 26903
+	db DECO_TOWN_MAP ; 10
+	db DECO_PIKACHU_POSTER ; 11
+	db DECO_CLEFAIRY_POSTER ; 12
+	db DECO_JIGGLYPUFF_POSTER ; 13
+	db -1
+; 26908
+
+DecoConsoleMenu: ; 26908
+	call FindOwnedConsoles
+	call PopulateDecoCategoryMenu
+	xor a
+	ret
+; 26910
+
+FindOwnedConsoles: ; 26910
+	ld hl, .consoles
+	ld c, DECO_CONSOLES
+	jp FindOwnedDecosInCategory
+; 26918
+
+.consoles: ; 26918
+	db DECO_FAMICOM ; 15
+	db DECO_SNES ; 16
+	db DECO_N64 ; 17
+	db DECO_VIRTUAL_BOY ; 18
+	db -1
+; 2691d
+
+DecoOrnamentMenu: ; 2691d
+	call FindOwnedOrnaments
+	call PopulateDecoCategoryMenu
+	xor a
+	ret
+; 26925
+
+FindOwnedOrnaments: ; 26925
+	ld hl, .ornaments
+	ld c, DECO_DOLLS
+	jp FindOwnedDecosInCategory
+; 2692d
+
+.ornaments: ; 2692d
+	db DECO_PIKACHU_DOLL ; 1e
+	db DECO_SURF_PIKACHU_DOLL ; 1f
+	db DECO_CLEFAIRY_DOLL ; 20
+	db DECO_JIGGLYPUFF_DOLL ; 21
+	db DECO_BULBASAUR_DOLL ; 22
+	db DECO_CHARMANDER_DOLL ; 23
+	db DECO_SQUIRTLE_DOLL ; 24
+	db DECO_POLIWAG_DOLL ; 25
+	db DECO_DIGLETT_DOLL ; 26
+	db DECO_STARMIE_DOLL ; 27
+	db DECO_MAGIKARP_DOLL ; 28
+	db DECO_ODDISH_DOLL ; 29
+	db DECO_GENGAR_DOLL ; 2a
+	db DECO_SHELLDER_DOLL ; 2b
+	db DECO_GRIMER_DOLL ; 2c
+	db DECO_VOLTORB_DOLL ; 2d
+	db DECO_WEEDLE_DOLL ; 2e
+	db DECO_UNOWN_DOLL ; 2f
+	db DECO_GEODUDE_DOLL ; 30
+	db DECO_MACHOP_DOLL ; 31
+	db DECO_TENTACOOL_DOLL ; 32
+	db DECO_GOLD_TROPHY_DOLL ; 33
+	db DECO_SILVER_TROPHY_DOLL ; 34
+	db -1
+; 26945
+
+DecoBigDollMenu: ; 26945
+	call FindOwnedBigDolls
+	call PopulateDecoCategoryMenu
+	xor a
+	ret
+; 2694d
+
+FindOwnedBigDolls: ; 2694d
+	ld hl, .big_dolls
+	ld c, DECO_BIG_DOLLS
+	jp FindOwnedDecosInCategory
+; 26955
+
+.big_dolls: ; 26955
+	db DECO_BIG_SNORLAX_DOLL ; 1a
+	db DECO_BIG_ONIX_DOLL ; 1b
+	db DECO_BIG_LAPRAS_DOLL ; 1c
+	db -1
+; 26959
+
+DecoExitMenu: ; 26959
+	scf
+	ret
+; 2695b
+
+PopulateDecoCategoryMenu: ; 2695b
+	ld a, [wd002]
+	and a
+	jr z, .empty
+	cp 8
+	jr nc, .beyond_eight
+	xor a
+	ld [wcf76], a
+	ld hl, .NonscrollingMenuDataHeader
+	call LoadMenuDataHeader
+	call DoNthMenu
+	jr c, .no_action_1
+	call DoDecorationAction2
+
+.no_action_1
+	call ExitMenu
+	ret
+
+.beyond_eight
+	ld hl, wd002
+	ld e, [hl]
+	dec [hl]
+	ld d, 0
+	add hl, de
+	ld [hl], -1
+	call LoadStandardMenuDataHeader
+	ld hl, .ScrollingMenuDataHeader
+	call CopyMenuDataHeader
+	xor a
+	ld [hBGMapMode], a
+	call InitScrollingMenu
+	xor a
+	ld [wMenuScrollPosition], a
+	call HandleScrollingMenu
+	ld a, [wcf73]
+	cp 2
+	jr z, .no_action_2
+	call DoDecorationAction2
+
+.no_action_2
+	call ExitMenu
+	ret
+
+.empty
+	ld hl, .Text_nothing_to_choose
+	call MenuTextBoxBackup
+	ret
+; 269b0
+
+.Text_nothing_to_choose: ; 0x269b0
+	; There's nothing to choose.
+	text_jump UnknownText_0x1bc471
+	db "@"
+; 0x269b5
+
+.NonscrollingMenuDataHeader: ; 0x269b5
+	db $40 ; flags
+	db 00, 00 ; start coords
+	db 17, 19 ; end coords
+	dw .NonscrollingMenuData2
+	db 1 ; default option
+; 0x269bd
+
+.NonscrollingMenuData2: ; 0x269bd
+	db $a0 ; flags
+	db 0 ; items
+	dw wd002
+	dw DecorationMenuFunction
+	dw DecorationAttributes
+; 0x269c5
+
+.ScrollingMenuDataHeader: ; 0x269c5
+	db $40 ; flags
+	db 01, 01 ; start coords
+	db 16, 18 ; end coords
+	dw .ScrollingMenuData2
+	db 1 ; default option
+; 0x269cd
+
+.ScrollingMenuData2: ; 0x269cd
+	db $10 ; flags
+	db 8, 0 ; rows, columns
+	db 1 ; horizontal spacing
+	dbw 0, wd002 ; text pointer
+	dba DecorationMenuFunction
+	dbw 0, 0
+	dbw 0, 0
+; 269dd
+
+
+GetDecorationData: ; 269dd
+	ld hl, DecorationAttributes
+	ld bc, 6
+	call AddNTimes
+	ret
+; 269e7
+
+GetDecorationName: ; 269e7
+	push hl
+	call GetDecorationData
+	call GetDecoName
+	pop hl
+	call CopyName2
+	ret
+; 269f3
+
+DecorationMenuFunction: ; 269f3
+	ld a, [MenuSelection]
+	push de
+	call GetDecorationData
+	call GetDecoName
+	pop hl
+	call PlaceString
+	ret
+; 26a02
+
+DoDecorationAction2: ; 26a02
+	ld a, [MenuSelection]
+	call GetDecorationData
+	ld de, 2 ; function 2
+	add hl, de
+	ld a, [hl]
+	ld hl, .DecoActions
+	rst JumpTable
+	ret
+; 26a12
+
+.DecoActions: ; 26a12
+	dw DecoAction_nothing
+	dw DecoAction_setupbed
+	dw DecoAction_putawaybed
+	dw DecoAction_setupcarpet
+	dw DecoAction_putawaycarpet
+	dw DecoAction_setupplant
+	dw DecoAction_putawayplant
+	dw DecoAction_setupposter
+	dw DecoAction_putawayposter
+	dw DecoAction_setupconsole
+	dw DecoAction_putawayconsole
+	dw DecoAction_setupbigdoll
+	dw DecoAction_putawaybigdoll
+	dw DecoAction_setupornament
+	dw DecoAction_putawayornament
+; 26a30
+
+
+GetDecorationFlag: ; 26a30
+	call GetDecorationData
+	ld de, 3 ; event flag
+	add hl, de
+	ld a, [hli]
+	ld d, [hl]
+	ld e, a
+	ret
+; 26a3b
+
+DecorationFlagAction: ; 26a3b
+	push bc
+	call GetDecorationFlag
+	pop bc
+	call EventFlagAction
+	ret
+; 26a44
+
+GetDecorationSprite: ; 26a44
+	ld a, c
+	call GetDecorationData
+	ld de, 5 ; sprite
+	add hl, de
+	ld a, [hl]
+	ld c, a
+	ret
+; 26a4f
+
+decoration: MACRO
+	; type, name, command, event flag, tile/sprite
+	db \1, \2, \3
+	dw \4
+	db \5
+ENDM
+
+DecorationAttributes: ; 26a4f
+	decoration DECO_PLANT,    $00,               $0,                 EVENT_GAVE_KURT_APRICORNS,                         $00
+	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_BED,       EVENT_GAVE_KURT_APRICORNS,                         $00
+	decoration DECO_BED,      FEATHERY_BED,      SET_UP_BED,         EVENT_DECO_BED_1,                  $1b
+	decoration DECO_BED,      PINK_BED,          SET_UP_BED,         EVENT_DECO_BED_2,                  $1c
+	decoration DECO_BED,      POLKADOT_BED,      SET_UP_BED,         EVENT_DECO_BED_3,                  $1d
+	decoration DECO_BED,      PIKACHU_BED,       SET_UP_BED,         EVENT_DECO_BED_4,                  $1e
+	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_CARPET,    EVENT_GAVE_KURT_APRICORNS,                         $00
+	decoration DECO_CARPET,   RED_CARPET,        SET_UP_CARPET,      EVENT_DECO_CARPET_1,               $08
+	decoration DECO_CARPET,   BLUE_CARPET,       SET_UP_CARPET,      EVENT_DECO_CARPET_2,               $0b
+	decoration DECO_CARPET,   YELLOW_CARPET,     SET_UP_CARPET,      EVENT_DECO_CARPET_3,               $0e
+	decoration DECO_CARPET,   GREEN_CARPET,      SET_UP_CARPET,      EVENT_DECO_CARPET_4,               $11
+	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_PLANT,     EVENT_GAVE_KURT_APRICORNS,                         $00
+	decoration DECO_PLANT,    MAGNAPLANT,        SET_UP_PLANT,       EVENT_DECO_PLANT_1,                $20
+	decoration DECO_PLANT,    TROPICPLANT,       SET_UP_PLANT,       EVENT_DECO_PLANT_2,                $21
+	decoration DECO_PLANT,    JUMBOPLANT,        SET_UP_PLANT,       EVENT_DECO_PLANT_3,                $22
+	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_POSTER,    EVENT_GAVE_KURT_APRICORNS,                         $00
+	decoration DECO_PLANT,    TOWN_MAP_D,        SET_UP_POSTER,      EVENT_DECO_PLANT_4,                $1f
+	decoration DECO_POSTER,   PIKACHU,           SET_UP_POSTER,      EVENT_DECO_POSTER_1,               $23
+	decoration DECO_POSTER,   CLEFAIRY,          SET_UP_POSTER,      EVENT_DECO_POSTER_2,               $24
+	decoration DECO_POSTER,   JIGGLYPUFF,        SET_UP_POSTER,      EVENT_DECO_POSTER_3,               $25
+	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_CONSOLE,   EVENT_GAVE_KURT_APRICORNS,                         $00
+	decoration DECO_PLANT,    FAMICOM,           SET_UP_CONSOLE,     EVENT_DECO_FAMICOM,                SPRITE_FAMICOM
+	decoration DECO_PLANT,    SUPER_NES,         SET_UP_CONSOLE,     EVENT_DECO_SNES,                   SPRITE_SNES
+	decoration DECO_PLANT,    NINTENDO_64,       SET_UP_CONSOLE,     EVENT_DECO_N64,                    SPRITE_N64
+	decoration DECO_PLANT,    VIRTUAL_BOY,       SET_UP_CONSOLE,     EVENT_DECO_VIRTUAL_BOY,            SPRITE_VIRTUAL_BOY
+	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_BIG_DOLL,  EVENT_GAVE_KURT_APRICORNS,                         $00
+	decoration DECO_BIGDOLL,  SNORLAX,           SET_UP_BIG_DOLL,    EVENT_DECO_BIG_SNORLAX_DOLL,       SPRITE_BIG_SNORLAX
+	decoration DECO_BIGDOLL,  ONIX,              SET_UP_BIG_DOLL,    EVENT_DECO_BIG_ONIX_DOLL,          SPRITE_BIG_ONIX
+	decoration DECO_BIGDOLL,  LAPRAS,            SET_UP_BIG_DOLL,    EVENT_DECO_BIG_LAPRAS_DOLL,        SPRITE_BIG_LAPRAS
+	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_DOLL,      EVENT_GAVE_KURT_APRICORNS,                         $00
+	decoration DECO_DOLL,     PIKACHU,           SET_UP_DOLL,        EVENT_DECO_PIKACHU_DOLL,           SPRITE_PIKACHU
+	decoration DECO_PLANT,    SURF_PIKA_DOLL,    SET_UP_DOLL,        EVENT_DECO_SURFING_PIKACHU_DOLL,   SPRITE_SURFING_PIKACHU
+	decoration DECO_DOLL,     CLEFAIRY,          SET_UP_DOLL,        EVENT_DECO_CLEFAIRY_DOLL,          SPRITE_CLEFAIRY
+	decoration DECO_DOLL,     JIGGLYPUFF,        SET_UP_DOLL,        EVENT_DECO_JIGGLYPUFF_DOLL,        SPRITE_JIGGLYPUFF
+	decoration DECO_DOLL,     BULBASAUR,         SET_UP_DOLL,        EVENT_DECO_BULBASAUR_DOLL,         SPRITE_BULBASAUR
+	decoration DECO_DOLL,     CHARMANDER,        SET_UP_DOLL,        EVENT_DECO_CHARMANDER_DOLL,        SPRITE_CHARMANDER
+	decoration DECO_DOLL,     SQUIRTLE,          SET_UP_DOLL,        EVENT_DECO_SQUIRTLE_DOLL,          SPRITE_SQUIRTLE
+	decoration DECO_DOLL,     POLIWAG,           SET_UP_DOLL,        EVENT_DECO_POLIWAG_DOLL,           SPRITE_POLIWAG
+	decoration DECO_DOLL,     DIGLETT,           SET_UP_DOLL,        EVENT_DECO_DIGLETT_DOLL,           SPRITE_DIGLETT
+	decoration DECO_DOLL,     STARYU,            SET_UP_DOLL,        EVENT_DECO_STARMIE_DOLL,           SPRITE_STARMIE
+	decoration DECO_DOLL,     MAGIKARP,          SET_UP_DOLL,        EVENT_DECO_MAGIKARP_DOLL,          SPRITE_MAGIKARP
+	decoration DECO_DOLL,     ODDISH,            SET_UP_DOLL,        EVENT_DECO_ODDISH_DOLL,            SPRITE_ODDISH
+	decoration DECO_DOLL,     GENGAR,            SET_UP_DOLL,        EVENT_DECO_GENGAR_DOLL,            SPRITE_GENGAR
+	decoration DECO_DOLL,     SHELLDER,          SET_UP_DOLL,        EVENT_DECO_SHELLDER_DOLL,          SPRITE_SHELLDER
+	decoration DECO_DOLL,     GRIMER,            SET_UP_DOLL,        EVENT_DECO_GRIMER_DOLL,            SPRITE_GRIMER
+	decoration DECO_DOLL,     VOLTORB,           SET_UP_DOLL,        EVENT_DECO_VOLTORB_DOLL,           SPRITE_VOLTORB
+	decoration DECO_DOLL,     WEEDLE,            SET_UP_DOLL,        EVENT_DECO_WEEDLE_DOLL,            SPRITE_WEEDLE
+	decoration DECO_DOLL,     UNOWN,             SET_UP_DOLL,        EVENT_DECO_UNOWN_DOLL,             SPRITE_UNOWN
+	decoration DECO_DOLL,     GEODUDE,           SET_UP_DOLL,        EVENT_DECO_GEODUDE_DOLL,           SPRITE_GEODUDE
+	decoration DECO_DOLL,     MACHOP,            SET_UP_DOLL,        EVENT_DECO_MACHOP_DOLL,            SPRITE_MACHOP
+	decoration DECO_DOLL,     TENTACOOL,         SET_UP_DOLL,        EVENT_DECO_TENTACOOL_DOLL,         SPRITE_TENTACOOL
+	decoration DECO_PLANT,    GOLD_TROPHY,       SET_UP_DOLL,        EVENT_DECO_GOLD_TROPHY,            SPRITE_GOLD_TROPHY
+	decoration DECO_PLANT,    SILVER_TROPHY,     SET_UP_DOLL,        EVENT_DECO_SILVER_TROPHY,          SPRITE_SILVER_TROPHY
+; 26b8d
+
+
+DecorationNames: ; 26b8d
+	db "CANCEL@"
+	db "PUT IT AWAY@"
+	db "MAGNAPLANT@"
+	db "TROPICPLANT@"
+	db "JUMBOPLANT@"
+	db "TOWN MAP@"
+	db "NES@"
+	db "SUPER NES@"
+	db "NINTENDO 64@"
+	db "VIRTUAL BOY@"
+	db "GOLD TROPHY@"
+	db "SILVER TROPHY@"
+	db "SURF PIKACHU DOLL@"
+	db " BED@"
+	db " CARPET@"
+	db " POSTER@"
+	db " DOLL@"
+	db "BIG @"
+	db "FEATHERY@"
+	db "PIKACHU@"
+	db "PINK@"
+	db "POLKADOT@"
+	db "RED@"
+	db "BLUE@"
+	db "YELLOW@"
+	db "GREEN@"
+; 26c72
+
+GetDecoName: ; 26c72
+	ld a, [hli]
+	ld e, [hl]
+	ld bc, StringBuffer2
+	push bc
+	ld hl, .NameFunctions
+	rst JumpTable
+	pop de
+	ret
+; 26c7e
+
+.NameFunctions: ; 26c7e
+	dw .invalid
+	dw .plant
+	dw .bed
+	dw .carpet
+	dw .poster
+	dw .doll
+	dw .bigdoll
+; 26c8c
+
+
+.invalid: ; 26c8c
+	ret
+; 26c8d
+
+.plant: ; 26c8d
+	ld a, e
+	jr .getdeconame
+
+.bed: ; 26c90
+	call .plant
+	ld a, _BED
+	jr .getdeconame
+
+.carpet: ; 26c97
+	call .plant
+	ld a, _CARPET
+	jr .getdeconame
+
+.poster: ; 26c9e
+	ld a, e
+	call .getpokename
+	ld a, _POSTER
+	jr .getdeconame
+
+.doll: ; 26ca6
+	ld a, e
+	call .getpokename
+	ld a, _DOLL
+	jr .getdeconame
+
+.bigdoll: ; 26cae
+	push de
+	ld a, BIG_
+	call .getdeconame
+	pop de
+	ld a, e
+	jr .getpokename
+
+.unused: ; 26cb8
+	push de
+	call .getdeconame
+	pop de
+	ld a, e
+	jr .getdeconame
+
+.getpokename: ; 26cc0
+	push bc
+	ld [wd265], a
+	call GetPokemonName
+	pop bc
+	jr .copy
+
+.getdeconame: ; 26cca
+	call ._getdeconame
+	jr .copy
+
+._getdeconame: ; 26ccf
+	push bc
+	ld hl, DecorationNames
+	call GetNthString
+	ld d, h
+	ld e, l
+	pop bc
+	ret
+
+.copy: ; 26cda
+	ld h, b
+	ld l, c
+	call CopyName2
+	dec hl
+	ld b, h
+	ld c, l
+	ret
+; 26ce3
+
+DecoAction_nothing: ; 26ce3
+	scf
+	ret
+; 26ce5
+
+DecoAction_setupbed: ; 26ce5
+	ld hl, Bed
+	jp DecoAction_TrySetItUp
+; 26ceb
+
+DecoAction_putawaybed: ; 26ceb
+	ld hl, Bed
+	jp DecoAction_TryPutItAway
+; 26cf1
+
+DecoAction_setupcarpet: ; 26cf1
+	ld hl, Carpet
+	jp DecoAction_TrySetItUp
+; 26cf7
+
+DecoAction_putawaycarpet: ; 26cf7
+	ld hl, Carpet
+	jp DecoAction_TryPutItAway
+; 26cfd
+
+DecoAction_setupplant: ; 26cfd
+	ld hl, Plant
+	jp DecoAction_TrySetItUp
+; 26d03
+
+DecoAction_putawayplant: ; 26d03
+	ld hl, Plant
+	jp DecoAction_TryPutItAway
+; 26d09
+
+DecoAction_setupposter: ; 26d09
+	ld hl, Poster
+	jp DecoAction_TrySetItUp
+; 26d0f
+
+DecoAction_putawayposter: ; 26d0f
+	ld hl, Poster
+	jp DecoAction_TryPutItAway
+; 26d15
+
+DecoAction_setupconsole: ; 26d15
+	ld hl, Console
+	jp DecoAction_TrySetItUp
+; 26d1b
+
+DecoAction_putawayconsole: ; 26d1b
+	ld hl, Console
+	jp DecoAction_TryPutItAway
+; 26d21
+
+DecoAction_setupbigdoll: ; 26d21
+	ld hl, BigDoll
+	jp DecoAction_TrySetItUp
+; 26d27
+
+DecoAction_putawaybigdoll: ; 26d27
+	ld hl, BigDoll
+	jp DecoAction_TryPutItAway
+; 26d2d
+
+DecoAction_TrySetItUp: ; 26d2d
+	ld a, [hl]
+	ld [Buffer1], a
+	push hl
+	call DecoAction_SetItUp
+	jr c, .failed
+	ld a, 1
+	ld [wd1ee], a
+	pop hl
+	ld a, [MenuSelection]
+	ld [hl], a
+	xor a
+	ret
+
+.failed
+	pop hl
+	xor a
+	ret
+; 26d46
+
+DecoAction_SetItUp: ; 26d46
+; See if there's anything of the same type already out
+	ld a, [Buffer1]
+	and a
+	jr z, .nothingthere
+; See if that item is already out
+	ld b, a
+	ld a, [MenuSelection]
+	cp b
+	jr z, .alreadythere
+; Put away the item that's already out, and set up the new one
+	ld a, [MenuSelection]
+	ld hl, StringBuffer4
+	call GetDecorationName
+	ld a, [Buffer1]
+	ld hl, StringBuffer3
+	call GetDecorationName
+	ld hl, DecoText_PutAwayAndSetUp
+	call MenuTextBoxBackup
+	xor a
+	ret
+
+.nothingthere
+	ld a, [MenuSelection]
+	ld hl, StringBuffer3
+	call GetDecorationName
+	ld hl, DecoText_SetUpTheDeco
+	call MenuTextBoxBackup
+	xor a
+	ret
+
+.alreadythere
+	ld hl, DecoText_AlreadySetUp
+	call MenuTextBoxBackup
+	scf
+	ret
+; 26d86
+
+DecoAction_TryPutItAway: ; 26d86
+; If there is no item of that type already set, there is nothing to put away.
+	ld a, [hl]
+	ld [Buffer1], a
+	xor a
+	ld [hl], a
+	ld a, [Buffer1]
+	and a
+	jr z, .nothingthere
+; Put it away.
+	ld a, $1
+	ld [wd1ee], a
+	ld a, [Buffer1]
+	ld [MenuSelection], a
+	ld hl, StringBuffer3
+	call GetDecorationName
+	ld hl, DecoText_PutAwayTheDeco
+	call MenuTextBoxBackup
+	xor a
+	ret
+
+.nothingthere
+	ld hl, DecoText_NothingToPutAway
+	call MenuTextBoxBackup
+	xor a
+	ret
+; 26db3
+
+DecoAction_setupornament: ; 26db3
+	ld hl, UnknownText_0x26e41
+	call DecoAction_AskWhichSide
+	jr c, .cancel
+	call DecoAction_SetItUp_Ornament
+	jr c, .cancel
+	ld a, $1
+	ld [wd1ee], a
+	jr DecoAction_FinishUp_Ornament
+
+.cancel
+	xor a
+	ret
+
+DecoAction_putawayornament: ; 26dc9
+	ld hl, DecoText_WhichSide
+	call DecoAction_AskWhichSide
+	jr nc, .incave
+	xor a
+	ret
+
+.incave
+	call DecoAction_PutItAway_Ornament
+
+DecoAction_FinishUp_Ornament: ; 26dd6
+	call QueryWhichSide
+	ld a, [wd1ec]
+	ld [hl], a
+	ld a, [wd1ed]
+	ld [de], a
+	xor a
+	ret
+; 26de3
+
+DecoAction_SetItUp_Ornament: ; 26de3
+	ld a, [wd1ec]
+	and a
+	jr z, .nothingthere
+	ld b, a
+	ld a, [MenuSelection]
+	cp b
+	jr z, .failed
+	ld a, b
+	ld hl, StringBuffer3
+	call GetDecorationName
+	ld a, [MenuSelection]
+	ld hl, StringBuffer4
+	call GetDecorationName
+	ld a, [MenuSelection]
+	ld [wd1ec], a
+	call .getwhichside
+	ld hl, DecoText_PutAwayAndSetUp
+	call MenuTextBoxBackup
+	xor a
+	ret
+
+.nothingthere
+	ld a, [MenuSelection]
+	ld [wd1ec], a
+	call .getwhichside
+	ld a, [MenuSelection]
+	ld hl, StringBuffer3
+	call GetDecorationName
+	ld hl, DecoText_SetUpTheDeco
+	call MenuTextBoxBackup
+	xor a
+	ret
+
+.failed
+	ld hl, DecoText_AlreadySetUp
+	call MenuTextBoxBackup
+	scf
+	ret
+; 26e33
+
+.getwhichside: ; 26e33
+	ld a, [MenuSelection]
+	ld b, a
+	ld a, [wd1ed]
+	cp b
+	ret nz
+	xor a
+	ld [wd1ed], a
+	ret
+; 26e41
+
+UnknownText_0x26e41: ; 0x26e41
+	; Which side do you want to put it on?
+	text_jump UnknownText_0x1bc48c
+	db "@"
+; 0x26e46
+
+DecoAction_PutItAway_Ornament: ; 26e46
+	ld a, [wd1ec]
+	and a
+	jr z, .nothingthere
+	ld hl, StringBuffer3
+	call GetDecorationName
+	ld a, $1
+	ld [wd1ee], a
+	xor a
+	ld [wd1ec], a
+	ld hl, DecoText_PutAwayTheDeco
+	call MenuTextBoxBackup
+	xor a
+	ret
+
+.nothingthere
+	ld hl, DecoText_NothingToPutAway
+	call MenuTextBoxBackup
+	xor a
+	ret
+; 26e6b
+
+DecoText_WhichSide: ; 0x26e6b
+	; Which side do you want to put away?
+	text_jump UnknownText_0x1bc4b2
+	db "@"
+; 0x26e70
+
+DecoAction_AskWhichSide: ; 26e70
+	call MenuTextBox
+	ld hl, MenuDataHeader_0x26eab
+	call GetMenu2
+	call ExitMenu
+	call CopyMenuData2
+	jr c, .nope
+	ld a, [MenuSelection2]
+	cp 3
+	jr z, .nope
+	ld [Buffer2], a
+	call QueryWhichSide
+	ld a, [hl]
+	ld [wd1ec], a
+	ld a, [de]
+	ld [wd1ed], a
+	xor a
+	ret
+
+.nope
+	scf
+	ret
+; 26e9a
+
+QueryWhichSide: ; 26e9a
+	ld hl, RightOrnament
+	ld de, LeftOrnament
+	ld a, [Buffer2]
+	cp 1
+	ret z
+	push hl
+	ld h, d
+	ld l, e
+	pop de
+	ret
+; 26eab
+
+MenuDataHeader_0x26eab: ; 0x26eab
+	db $40 ; flags
+	db 00, 00 ; start coords
+	db 07, 13 ; end coords
+	dw MenuData2_0x26eb3
+	db 1 ; default option
+; 0x26eb3
+
+MenuData2_0x26eb3: ; 0x26eb3
+	db $80 ; flags
+	db 3 ; items
+	db "RIGHT SIDE@"
+	db "LEFT SIDE@"
+	db "CANCEL@"
+; 0x26ed1
+
+DecoText_PutAwayTheDeco: ; 0x26ed1
+	; Put away the @ .
+	text_jump UnknownText_0x1bc4d7
+	db "@"
+; 0x26ed6
+
+DecoText_NothingToPutAway: ; 0x26ed6
+	; There's nothing to put away.
+	text_jump UnknownText_0x1bc4ec
+	db "@"
+; 0x26edb
+
+DecoText_SetUpTheDeco: ; 0x26edb
+	; Set up the @ .
+	text_jump UnknownText_0x1bc509
+	db "@"
+; 0x26ee0
+
+DecoText_PutAwayAndSetUp: ; 0x26ee0
+	; Put away the @ and set up the @ .
+	text_jump UnknownText_0x1bc51c
+	db "@"
+; 0x26ee5
+
+DecoText_AlreadySetUp: ; 0x26ee5
+	; That's already set up.
+	text_jump UnknownText_0x1bc546
+	db "@"
+; 0x26eea
+
+GetDecorationName_c_de: ; 26eea
+	ld a, c
+	ld h, d
+	ld l, e
+	call GetDecorationName
+	ret
+; 26ef1
+
+DecorationFlagAction_c: ; 26ef1
+	ld a, c
+	jp DecorationFlagAction
+; 26ef5
+
+
+GetDecorationName_c: ; 26ef5 (9:6ef5)
+	ld a, c
+	call GetDecorationID
+	ld hl, StringBuffer1
+	push hl
+	call GetDecorationName
+	pop de
+	ret
+
+
+SetSpecificDecorationFlag: ; 26f02
+	ld a, c
+	call GetDecorationID
+	ld b, SET_FLAG
+	call DecorationFlagAction
+	ret
+; 26f0c
+
+GetDecorationID: ; 26f0c
+	push hl
+	push de
+	ld e, a
+	ld d, 0
+	ld hl, DecorationIDs
+	add hl, de
+	ld a, [hl]
+	pop de
+	pop hl
+	ret
+; 26f19
+
+SetAllDecorationFlags: ; 26f19
+	ld hl, DecorationIDs
+.loop
+	ld a, [hli]
+	cp -1
+	jr z, .done
+	push hl
+	ld b, SET_FLAG
+	call DecorationFlagAction
+	pop hl
+	jr .loop
+
+.done
+	ret
+; 26f2b
+
+DecorationIDs: ; 26f2b
+	db DECO_FEATHERY_BED ; 2
+	db DECO_PINK_BED ; 3
+	db DECO_POLKADOT_BED ; 4
+	db DECO_PIKACHU_BED ; 5
+
+	db DECO_RED_CARPET ; 7
+	db DECO_BLUE_CARPET ; 8
+	db DECO_YELLOW_CARPET ; 9
+	db DECO_GREEN_CARPET ; a
+
+	db DECO_MAGNAPLANT ; c
+	db DECO_TROPICPLANT ; d
+	db DECO_JUMBOPLANT ; e
+
+	db DECO_TOWN_MAP ; 10
+	db DECO_PIKACHU_POSTER ; 11
+	db DECO_CLEFAIRY_POSTER ; 12
+	db DECO_JIGGLYPUFF_POSTER ; 13
+
+	db DECO_FAMICOM ; 15
+	db DECO_SNES ; 16
+	db DECO_N64 ; 17
+	db DECO_VIRTUAL_BOY ; 18
+
+	db DECO_PIKACHU_DOLL ; 1e
+	db DECO_SURF_PIKACHU_DOLL ; 1f
+	db DECO_CLEFAIRY_DOLL ; 20
+	db DECO_JIGGLYPUFF_DOLL ; 21
+	db DECO_BULBASAUR_DOLL ; 22
+	db DECO_CHARMANDER_DOLL ; 23
+	db DECO_SQUIRTLE_DOLL ; 24
+	db DECO_POLIWAG_DOLL ; 25
+	db DECO_DIGLETT_DOLL ; 26
+	db DECO_STARMIE_DOLL ; 27
+	db DECO_MAGIKARP_DOLL ; 28
+	db DECO_ODDISH_DOLL ; 29
+	db DECO_GENGAR_DOLL ; 2a
+	db DECO_SHELLDER_DOLL ; 2b
+	db DECO_GRIMER_DOLL ; 2c
+	db DECO_VOLTORB_DOLL ; 2d
+	db DECO_WEEDLE_DOLL ; 2e
+	db DECO_UNOWN_DOLL ; 2f
+	db DECO_GEODUDE_DOLL ; 30
+	db DECO_MACHOP_DOLL ; 31
+	db DECO_TENTACOOL_DOLL ; 32
+	db DECO_BIG_SNORLAX_DOLL ; 1a
+	db DECO_BIG_ONIX_DOLL ; 1b
+	db DECO_BIG_LAPRAS_DOLL ; 1c
+Trophys:
+	db DECO_GOLD_TROPHY_DOLL ; 33
+	db DECO_SILVER_TROPHY_DOLL ; 34
+	db -1
+; 26f59
+
+DescribeDecoration:: ; 26f59
+	ld a, b
+	ld hl, JumpTable_DecorationDesc
+	rst JumpTable
+	ret
+; 26f5f
+
+JumpTable_DecorationDesc: ; 26f5f
+	dw DecorationDesc_Poster
+	dw DecorationDesc_LeftOrnament
+	dw DecorationDesc_RightOrnament
+	dw DecorationDesc_GiantOrnament
+	dw DecorationDesc_Console
+; 26f69
+
+DecorationDesc_Poster: ; 26f69
+	ld a, [Poster]
+	ld hl, DecorationDesc_PosterPointers
+	ld de, 3
+	call IsInArray
+	jr c, .nope
+	ld de, DecorationDesc_NullPoster
+	ld b, BANK(DecorationDesc_NullPoster)
+	ret
+
+.nope
+	ld b, BANK(DecorationDesc_TownMapPoster)
+	inc hl
+	ld a, [hli]
+	ld d, [hl]
+	ld e, a
+	ret
+; 26f84
+
+DecorationDesc_PosterPointers: ; 26f84
+	dbw DECO_TOWN_MAP, DecorationDesc_TownMapPoster
+	dbw DECO_PIKACHU_POSTER, DecorationDesc_PikachuPoster
+	dbw DECO_CLEFAIRY_POSTER, DecorationDesc_ClefairyPoster
+	dbw DECO_JIGGLYPUFF_POSTER, DecorationDesc_JigglypuffPoster
+	db -1
+; 26f91
+
+DecorationDesc_TownMapPoster: ; 0x26f91
+	loadfont
+	writetext .TownMapText
+	closetext
+	special Special_TownMap
+	loadmovesprites
+	end
+; 0x26f9b
+
+.TownMapText: ; 0x26f9b
+	; It's the TOWN MAP.
+	text_jump UnknownText_0x1bc55d
+	db "@"
+; 0x26fa0
+
+DecorationDesc_PikachuPoster: ; 0x26fa0
+	jumptext .PikaPosterText
+; 0x26fa3
+
+.PikaPosterText: ; 0x26fa3
+	; It's a poster of a cute PIKACHU.
+	text_jump UnknownText_0x1bc570
+	db "@"
+; 0x26fa8
+
+DecorationDesc_ClefairyPoster: ; 0x26fa8
+	jumptext .ClefairyPosterText
+; 0x26fab
+
+.ClefairyPosterText: ; 0x26fab
+	; It's a poster of a cute CLEFAIRY.
+	text_jump UnknownText_0x1bc591
+	db "@"
+; 0x26fb0
+
+DecorationDesc_JigglypuffPoster: ; 0x26fb0
+	jumptext .JigglypuffPosterText
+; 0x26fb3
+
+.JigglypuffPosterText: ; 0x26fb3
+	; It's a poster of a cute JIGGLYPUFF.
+	text_jump UnknownText_0x1bc5b3
+	db "@"
+; 0x26fb8
+
+DecorationDesc_NullPoster: ; 26fb8
+	end
+; 26fb9
+
+DecorationDesc_LeftOrnament: ; 26fb9
+	ld a, [LeftOrnament]
+	jr DecorationDesc_OrnamentOrConsole
+
+DecorationDesc_RightOrnament: ; 26fbe
+	ld a, [RightOrnament]
+	jr DecorationDesc_OrnamentOrConsole
+
+DecorationDesc_Console: ; 26fc3
+	ld a, [Console]
+	jr DecorationDesc_OrnamentOrConsole
+
+DecorationDesc_OrnamentOrConsole: ; 26fc8
+	ld c, a
+	ld de, StringBuffer3
+	call GetDecorationName_c_de
+	ld b, BANK(.OrnamentConsoleScript)
+	ld de, .OrnamentConsoleScript
+	ret
+; 26fd5
+
+.OrnamentConsoleScript: ; 26fd5
+	jumptext .OrnamentConsoleText
+; 26fd8
+
+.OrnamentConsoleText: ; 0x26fd8
+	; It's an adorable @ .
+	text_jump UnknownText_0x1bc5d7
+	db "@"
+; 0x26fdd
+
+DecorationDesc_GiantOrnament: ; 26fdd
+	ld b, BANK(.BigDollScript)
+	ld de, .BigDollScript
+	ret
+; 26fe3
+
+.BigDollScript: ; 26fe3
+	jumptext .BigDollText
+; 26fe6
+
+.BigDollText: ; 0x26fe6
+	; A giant doll! It's fluffy and cuddly.
+	text_jump UnknownText_0x1bc5ef
+	db "@"
+; 0x26feb
+
+ToggleMaptileDecorations: ; 26feb
+	lb de, 0, 4
+	ld a, [Bed]
+	call SetDecorationTile
+	lb de, 7, 4
+	ld a, [Plant]
+	call SetDecorationTile
+	lb de, 6, 0
+	ld a, [Poster]
+	call SetDecorationTile
+	call SetPosterVisibility
+	lb de, 0, 0
+	call PadCoords_de
+	ld a, [Carpet]
+	and a
+	ret z
+	call _GetDecorationSprite
+	ld [hl], a
+	push af
+	lb de, 0, 2
+	call PadCoords_de
+	pop af
+	inc a
+	ld [hli], a
+	inc a
+	ld [hli], a
+	dec a
+	ld [hl], a
+	ret
+; 27027
+
+SetPosterVisibility: ; 27027
+	ld b, SET_FLAG
+	ld a, [Poster]
+	and a
+	jr nz, .ok
+	ld b, RESET_FLAG
+
+.ok
+	ld de, EVENT_KRISS_ROOM_POSTER
+	jp EventFlagAction
+; 27037
+
+SetDecorationTile: ; 27037
+	push af
+	call PadCoords_de
+	pop af
+	and a
+	ret z
+	call _GetDecorationSprite
+	ld [hl], a
+	ret
+; 27043
+
+ToggleDecorationsVisibility: ; 27043
+	ld de, EVENT_KRISS_HOUSE_2F_CONSOLE
+	ld hl, VariableSprites + SPRITE_CONSOLE - SPRITE_VARS
+	ld a, [Console]
+	call ToggleDecorationVisibility
+	ld de, EVENT_KRISS_HOUSE_2F_DOLL_1
+	ld hl, VariableSprites + SPRITE_DOLL_1 - SPRITE_VARS
+	ld a, [LeftOrnament]
+	call ToggleDecorationVisibility
+	ld de, EVENT_KRISS_HOUSE_2F_DOLL_2
+	ld hl, VariableSprites + SPRITE_DOLL_2 - SPRITE_VARS
+	ld a, [RightOrnament]
+	call ToggleDecorationVisibility
+	ld de, EVENT_KRISS_HOUSE_2F_BIG_DOLL
+	ld hl, VariableSprites + SPRITE_BIG_DOLL - SPRITE_VARS
+	ld a, [BigDoll]
+	call ToggleDecorationVisibility
+	ret
+; 27074
+
+ToggleDecorationVisibility: ; 27074
+	and a
+	jr z, .hide
+	call _GetDecorationSprite
+	ld [hl], a
+	ld b, RESET_FLAG
+	jp EventFlagAction
+
+.hide
+	ld b, SET_FLAG
+	jp EventFlagAction
+; 27085
+
+_GetDecorationSprite: ; 27085
+	ld c, a
+	push de
+	push hl
+	callba GetDecorationSprite
+	pop hl
+	pop de
+	ld a, c
+	ret
+; 27092
--- a/engine/diploma.asm
+++ b/engine/diploma.asm
@@ -1,5 +1,5 @@
 
-Function1dd702: ; 1dd702
+_Diploma: ; 1dd702
 	call Function1dd709
 	call WaitPressAorB_BlinkCursor
 	ret
@@ -31,7 +31,7 @@
 	call PlaceString
 	call EnableLCD
 	call WaitBGMap
-	ld b, $8
+	ld b, SCGB_08
 	call GetSGBLayout
 	call SetPalettes
 	call DelayFrame
--- a/engine/dummy_game.asm
+++ b/engine/dummy_game.asm
@@ -8,7 +8,7 @@
 
 Functione1e67: ; e1e67 (38:5e67)
 	call DisableLCD
-	ld b, $8
+	ld b, SCGB_08
 	call GetSGBLayout
 	callab Function8cf53
 	ld hl, LZ_e2221
@@ -123,7 +123,7 @@
 .asm_e1f30
 	ld de, $341c
 	ld a, $c
-	call Function3b2a
+	call _InitSpriteAnimStruct
 	ld a, $5
 	ld [wc702], a
 	ld hl, wJumptableIndex
--- a/engine/engine_flags.asm
+++ b/engine/engine_flags.asm
@@ -1,3 +1,90 @@
+EngineFlagAction:: ; 80430
+; Do action b on engine flag de
+;
+;   b = 0: reset flag
+;     = 1: set flag
+;     > 1: check flag, result in c
+;
+; Setting/resetting does not return a result.
+
+
+; 16-bit flag ids are considered invalid, but it's nice
+; to know that the infrastructure is there.
+
+	ld a, d
+	cp 0
+	jr z, .ceiling
+	jr c, .read ; cp 0 can't set carry!
+	jr .invalid
+
+; There are only $a2 engine flags, so
+; anything beyond that is invalid too.
+
+.ceiling
+	ld a, e
+	cp NUM_ENGINE_FLAGS
+	jr c, .read
+
+; Invalid flags are treated as flag 00.
+
+.invalid
+	xor a
+	ld e, a
+	ld d, a
+
+; Get this flag's location.
+
+.read
+	ld hl, EngineFlags
+; location
+rept 2
+	add hl, de
+endr
+; bit
+	add hl, de
+
+; location
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	inc hl
+; bit
+	ld c, [hl]
+
+; What are we doing with this flag?
+
+	ld a, b
+	cp 1
+	jr c, .reset ; b = 0
+	jr z, .set   ; b = 1
+
+; Return the given flag in c.
+.check
+	ld a, [de]
+	and c
+	ld c, a
+	ret
+
+; Set the given flag.
+.set
+	ld a, [de]
+	or c
+	ld [de], a
+	ret
+
+; Reset the given flag.
+.reset
+	ld a, c
+	cpl ; AND all bits except the one in question
+	ld c, a
+	ld a, [de]
+	and c
+	ld [de], a
+	ret
+; 80462
+
+
+EngineFlags: ; 80462
 ; All locations are in WRAM bank 1.
 engine_flag: MACRO
 	dwb \1, 1 << \2
@@ -22,7 +109,7 @@
 	engine_flag wMomSavingMoney, 0 ; mom saving money ; $8
 	engine_flag wMomSavingMoney, 7 ; dst
 
-	engine_flag wdc39, 0
+	engine_flag wdc39, 0 ; unused, possibly related to a 2-day timer
 
 	engine_flag StatusFlags, 0 ; pokedex
 	engine_flag StatusFlags, 1 ; unown dex
@@ -31,7 +118,7 @@
 	engine_flag StatusFlags, 6 ; credits skip
 	engine_flag StatusFlags, 7 ; bug contest on   ; $10
 	engine_flag StatusFlags2, 2 ; bug contest timer
-	engine_flag StatusFlags2, 1
+	engine_flag StatusFlags2, 1 ; ???
 	engine_flag StatusFlags2, 0 ; rockets in radio tower
 	engine_flag StatusFlags2, 4 ; bike shop call enabled (1024 bike steps reqd)
 	engine_flag StatusFlags2, 5 ; give pokerus
@@ -71,14 +158,14 @@
 	engine_flag UnlockedUnowns, 7 ; 8
 
 	; fly
-	engine_flag VisitedSpawns, 0 ; your house
-	engine_flag VisitedSpawns, 1 ; viridian pokecenter
-	engine_flag VisitedSpawns, 2 ; pallet
-	engine_flag VisitedSpawns, 3 ; viridian
-	engine_flag VisitedSpawns, 4 ; pewter
-	engine_flag VisitedSpawns, 5 ; cerulean ; $38
-	engine_flag VisitedSpawns, 6 ; rock tunnel
-	engine_flag VisitedSpawns, 7 ; vermilion
+	engine_flag VisitedSpawns, 0     ; your house
+	engine_flag VisitedSpawns, 1     ; viridian pokecenter
+	engine_flag VisitedSpawns, 2     ; pallet
+	engine_flag VisitedSpawns, 3     ; viridian
+	engine_flag VisitedSpawns, 4     ; pewter
+	engine_flag VisitedSpawns, 5     ; cerulean ; $38
+	engine_flag VisitedSpawns, 6     ; rock tunnel
+	engine_flag VisitedSpawns, 7     ; vermilion
 	engine_flag VisitedSpawns + 1, 0 ; lavender
 	engine_flag VisitedSpawns + 1, 1 ; saffron
 	engine_flag VisitedSpawns + 1, 2 ; celadon
@@ -88,6 +175,7 @@
 	engine_flag VisitedSpawns + 1, 6 ; new bark
 	engine_flag VisitedSpawns + 1, 7 ; cherrygrove
 	engine_flag VisitedSpawns + 2, 0 ; violet
+	                                 ; union cave
 	engine_flag VisitedSpawns + 2, 2 ; azalea
 	engine_flag VisitedSpawns + 2, 3 ; cianwood
 	engine_flag VisitedSpawns + 2, 4 ; goldenrod
@@ -97,6 +185,7 @@
 	engine_flag VisitedSpawns + 3, 0 ; lake of rage
 	engine_flag VisitedSpawns + 3, 1 ; blackthorn
 	engine_flag VisitedSpawns + 3, 2 ; silver cave
+	                                 ; fast ship
 	engine_flag VisitedSpawns + 3, 4 ; unused
 
 	engine_flag wLuckyNumberShowFlag, 0 ; lucky number show
@@ -157,7 +246,7 @@
 
 	engine_flag wDailyPhoneItemFlags, 0 ; beverly has nugget
 	engine_flag wDailyPhoneItemFlags, 1 ; jose has star piece
-	engine_flag wDailyPhoneItemFlags, 2 ; wade has item (see bittable1 $032b-e)
+	engine_flag wDailyPhoneItemFlags, 2 ; wade has item (see EVENT_WADE_HAS_*** in constants/event_flags.asm)
 	engine_flag wDailyPhoneItemFlags, 3 ; gina has leaf stone  ; $80
 	engine_flag wDailyPhoneItemFlags, 4 ; alan has fire stone
 	engine_flag wDailyPhoneItemFlags, 5 ; liz has thunderstone
@@ -165,7 +254,7 @@
 	engine_flag wDailyPhoneItemFlags, 7 ; tully has water stone
 
 	engine_flag wDailyPhoneItemFlags + 1, 0 ; tiffany has pink bow
-	engine_flag wDailyPhoneItemFlags + 1, 1 ; wilton has item (see bittable1 $032f-31)
+	engine_flag wDailyPhoneItemFlags + 1, 1 ; wilton has item (see EVENT_WILTON_HAS_*** in constants/event_flags.asm)
 
 	engine_flag wDailyPhoneTimeOfDayFlags, 0
 	engine_flag wDailyPhoneTimeOfDayFlags, 1  ; $88
--- a/engine/events.asm
+++ b/engine/events.asm
@@ -24,13 +24,13 @@
 ; 966cb
 
 
-ClearAllScriptFlags3: ; 966cb
+DisableEvents: ; 966cb
 	xor a
 	ld [ScriptFlags3], a
 	ret
 ; 966d0
 
-SetAll_ScriptFlags3:: ; 966d0
+EnableEvents:: ; 966d0
 	ld a, $ff
 	ld [ScriptFlags3], a
 	ret
@@ -42,73 +42,73 @@
 	ret
 ; 966dc
 
-ResetBit2_ScriptFlags3: ; 966dc
+DisableWarpsConnxns: ; 966dc
 	ld hl, ScriptFlags3
 	res 2, [hl]
 	ret
 ; 966e2
 
-ResetBit1_ScriptFlags3: ; 966e2
+DisableCoordEvents: ; 966e2
 	ld hl, ScriptFlags3
 	res 1, [hl]
 	ret
 ; 966e8
 
-ResetBit0_ScriptFlags3: ; 966e8
+DisableStepCount: ; 966e8
 	ld hl, ScriptFlags3
 	res 0, [hl]
 	ret
 ; 966ee
 
-ResetBit4_ScriptFlags3: ; 966ee
+DisableWildEncounters: ; 966ee
 	ld hl, ScriptFlags3
 	res 4, [hl]
 	ret
 ; 966f4
 
-SetBit2_ScriptFlags3: ; 966f4
+EnableWarpsConnxns: ; 966f4
 	ld hl, ScriptFlags3
 	set 2, [hl]
 	ret
 ; 966fa
 
-SetBit1_ScriptFlags3: ; 966fa
+EnableCoordEvents: ; 966fa
 	ld hl, ScriptFlags3
 	set 1, [hl]
 	ret
 ; 96700
 
-SetBit0_ScriptFlags3: ; 96700
+EnableStepCount: ; 96700
 	ld hl, ScriptFlags3
 	set 0, [hl]
 	ret
 ; 96706
 
-SetBit4_ScriptFlags3: ; 96706
+EnableWildEncounters: ; 96706
 	ld hl, ScriptFlags3
 	set 4, [hl]
 	ret
 ; 9670c
 
-CheckBit2_ScriptFlags3: ; 9670c
+CheckWarpConnxnScriptFlag: ; 9670c
 	ld hl, ScriptFlags3
 	bit 2, [hl]
 	ret
 ; 96712
 
-CheckBit1_ScriptFlags3: ; 96712
+CheckCoordEventScriptFlag: ; 96712
 	ld hl, ScriptFlags3
 	bit 1, [hl]
 	ret
 ; 96718
 
-CheckBit0_ScriptFlags3: ; 96718
+CheckStepCountScriptFlag: ; 96718
 	ld hl, ScriptFlags3
 	bit 0, [hl]
 	ret
 ; 9671e
 
-CheckBit4_ScriptFlags3: ; 9671e
+CheckWildEncountersScriptFlag: ; 9671e
 	ld hl, ScriptFlags3
 	bit 4, [hl]
 	ret
@@ -135,13 +135,13 @@
 	ld [wd454], a
 	call SetUpFiveStepWildEncounterCooldown
 	callba RunMapSetupScript
-	call ClearAllScriptFlags3
+	call DisableEvents
 
 	ld a, [hMapEntryMethod]
 	cp MAPSETUP_CONNECTION
-	jr nz, .dontset
-	call SetAll_ScriptFlags3
-.dontset
+	jr nz, .dont_enable
+	call EnableEvents
+.dont_enable
 
 	ld a, [hMapEntryMethod]
 	cp MAPSETUP_RELOADMAP
@@ -168,7 +168,7 @@
 HandleMap: ; 96773
 	call ResetOverworldDelay
 	call Function967c1
-	callba Function97e08
+	callba HandleCmdQueue ; no need to farcall
 	call MapEvents
 
 ; Not immediately entering a connected map will cause problems.
@@ -197,7 +197,7 @@
 
 .events ; 967a1
 	call PlayerEvents
-	call ClearAllScriptFlags3
+	call DisableEvents
 	callba ScriptEvents
 	ret
 ; 967ae
@@ -238,7 +238,7 @@
 ; 967d1
 
 Function967d1: ; 967d1
-	callba Function576a
+	callba Function576a ; engine/map_objects.asm
 	callba Functiond497
 	call Function96812
 	ret
@@ -245,7 +245,7 @@
 ; 967e1
 
 Function967e1: ; 967e1
-	callba RefreshMapAppearDisappear
+	callba _UpdateSprites
 	callba Functiond4d2
 	callba PlaceMapNameSign
 	ret
@@ -252,7 +252,7 @@
 ; 967f4
 
 Function967f4: ; 967f4
-	ld a, [wd150]
+	ld a, [wPlayerStepFlags]
 	bit 5, a
 	jr z, .events
 	bit 6, a
@@ -259,7 +259,7 @@
 	jr z, .noevents
 	bit 4, a
 	jr nz, .noevents
-	call SetAll_ScriptFlags3
+	call EnableEvents
 
 .events
 	ld a, 0 ; events
@@ -273,7 +273,7 @@
 ; 96812
 
 Function96812: ; 96812
-	ld hl, wd150
+	ld hl, wPlayerStepFlags
 	bit 6, [hl]
 	ret z
 
@@ -355,8 +355,8 @@
 CheckTileEvent: ; 96874
 ; Check for warps, tile triggers or wild battles.
 
-	call CheckBit2_ScriptFlags3
-	jr z, .bit2
+	call CheckWarpConnxnScriptFlag
+	jr z, .connections_disabled
 
 	callba CheckMovingOffEdgeOfMap
 	jr c, .map_connection
@@ -364,22 +364,22 @@
 	call CheckWarpTile
 	jr c, .warp_tile
 
-.bit2
-	call CheckBit1_ScriptFlags3
-	jr z, .bit1
+.connections_disabled
+	call CheckCoordEventScriptFlag
+	jr z, .coord_events_disabled
 
-	call CheckCurrentMapXYTriggers
-	jr c, .movement
+	call CheckCurrentNextMapXYTriggers
+	jr c, .coord_event
 
-.bit1
-	call CheckBit0_ScriptFlags3
-	jr z, .bit0
+.coord_events_disabled
+	call CheckStepCountScriptFlag
+	jr z, .step_count_disabled
 
 	call CountStep
 	ret c
 
-.bit0
-	call CheckBit4_ScriptFlags3
+.step_count_disabled
+	call CheckWildEncountersScriptFlag
 	jr z, .ok
 
 	call RandomEncounter
@@ -396,7 +396,7 @@
 	ret
 
 .warp_tile
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	call CheckPitTile
 	jr nz, .not_pit
 	ld a, PLAYEREVENT_FALL
@@ -408,8 +408,8 @@
 	scf
 	ret
 
-.movement
-	ld hl, MovementAnimation
+.coord_event
+	ld hl, EngineBuffer5
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
@@ -511,7 +511,7 @@
 	jr nz, .nothing
 
 	ld hl, StatusFlags2
-	bit 2, [hl]
+	bit 2, [hl] ; bug contest
 	jr z, .do_daily
 
 	callba CheckBugContestTimer
@@ -552,7 +552,7 @@
 	jr nz, .NoAction
 
 ; Can't perform button actions while sliding on ice.
-	callba Function80404
+	callba CheckStandingOnIce
 	jr c, .NoAction
 
 	call CheckAPressOW
@@ -635,21 +635,23 @@
 	jp [hl]
 
 .nope_bugged
+	; pop bc
 	xor a
 	ret
 
 .pointers
-	dbw 0, .zero
-	dbw 1, .one
-	dbw 2, .two
-	dbw 3, .three
-	dbw 4, .four
-	dbw 5, .five
-	dbw 6, .six
+	dbw PERSONTYPE_SCRIPT, .script
+	dbw PERSONTYPE_ITEMFRAGMENT, .itemfragment
+	dbw PERSONTYPE_TRAINER, .trainer
+	; the remaining four are dummy events
+	dbw PERSONTYPE_3, .three
+	dbw PERSONTYPE_4, .four
+	dbw PERSONTYPE_5, .five
+	dbw PERSONTYPE_6, .six
 	db -1
 ; 96a04
 
-.zero ; 96a04
+.script ; 96a04
 	ld hl, MAPOBJECT_SCRIPT_POINTER
 	add hl, bc
 	ld a, [hli]
@@ -657,11 +659,10 @@
 	ld l, a
 	call GetMapScriptHeaderBank
 	call CallScript
-;	ld a, -1
 	ret
 ; 96a12
 
-.one ; 96a12
+.itemfragment ; 96a12
 	ld hl, MAPOBJECT_SCRIPT_POINTER
 	add hl, bc
 	ld a, [hli]
@@ -671,14 +672,14 @@
 	ld de, EngineBuffer1
 	ld bc, 2
 	call FarCopyBytes
-	ld a, 3
+	ld a, PLAYEREVENT_ITEMBALL
 	scf
 	ret
 ; 96a29
 
-.two ; 96a29
-	call Function3674
-	ld a, 2
+.trainer ; 96a29
+	call TalkToTrainer
+	ld a, PLAYEREVENT_TALKTOTRAINER
 	scf
 	ret
 ; 96a30
@@ -729,16 +730,16 @@
 ; 96a59
 
 .up
-	ld b, UP << 2
+	ld b, OW_UP
 	jr .checkdir
 .down
-	ld b, DOWN << 2
+	ld b, OW_DOWN
 	jr .checkdir
 .right
-	ld b, RIGHT << 2
+	ld b, OW_RIGHT
 	jr .checkdir
 .left
-	ld b, LEFT << 2
+	ld b, OW_LEFT
 	jr .checkdir
 
 .checkdir
@@ -1077,12 +1078,12 @@
 	dba SeenByTrainerScript      ; 1
 	dba TalkToTrainerScript      ; 2
 	dba FindItemInBallScript     ; 3
-	dba UnknownScript_0x96c4d    ; 4
+	dba EdgeWarpScript           ; 4
 	dba WarpToNewMapScript       ; 5
 	dba FallIntoMapScript        ; 6
 	dba Script_OverworldWhiteout ; 7
 	dba HatchEggScript           ; 8
-	dba UnknownScript_0x96c4f    ; 9
+	dba ChangeDirectionScript    ; 9
 	dba Invalid_0x96c2d          ; 10
 ; 96c2d
 
@@ -1124,13 +1125,13 @@
 	end
 ; 96c4d
 
-UnknownScript_0x96c4d: ; 4
+EdgeWarpScript: ; 4
 	reloadandreturn MAPSETUP_CONNECTION
 ; 96c4f
 
-UnknownScript_0x96c4f: ; 9
-	deactivatefacing $3
-	callasm SetBit4_ScriptFlags3
+ChangeDirectionScript: ; 9
+	deactivatefacing 3
+	callasm EnableWildEncounters
 	end
 ; 96c56
 
--- a/engine/events_2.asm
+++ b/engine/events_2.asm
@@ -3,8 +3,8 @@
 
 WarpToSpawnPoint:: ; 97c28
 	ld hl, StatusFlags2
-	res 1, [hl]
-	res 2, [hl]
+	res 1, [hl] ; ??
+	res 2, [hl] ; bug contest
 	ret
 ; 97c30
 
@@ -161,7 +161,7 @@
 	jr nc, .no
 
 .ice_check
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	call CheckIceTile
 	jr z, .no
 	scf
@@ -235,7 +235,7 @@
 ; 97d64
 
 TryWildEncounter_BugContest: ; 97d64
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	call CheckSuperTallGrassTile
 	ld b, 40 percent
 	jr z, .ok
@@ -275,7 +275,7 @@
 	; if we've already gotten the call, we don't have to
 	; be here.
 	ld hl, StatusFlags2
-	bit 4, [hl]
+	bit 4, [hl] ; bike shop call
 	jr z, .NoCall
 
 	; If we're not on the bike, we don't have to be here.
@@ -326,7 +326,7 @@
 	xor a
 	ld [wSpecialPhoneCallID + 1], a
 	ld hl, StatusFlags2
-	res 4, [hl]
+	res 4, [hl] ; bike shop call
 	scf
 	ret
 
@@ -335,8 +335,8 @@
 	ret
 ; 97df9
 
-Function97df9:: ; 97df9
-	ld hl, wd6de
+ClearCmdQueue:: ; 97df9
+	ld hl, wCmdQueue
 	ld de, 6
 	ld c, 4
 	xor a
@@ -348,8 +348,8 @@
 	ret
 ; 97e08
 
-Function97e08:: ; 97e08
-	ld hl, wd6de
+HandleCmdQueue:: ; 97e08
+	ld hl, wCmdQueue
 	xor a
 .loop
 	ld [hMapObjectIndexBuffer], a
@@ -359,22 +359,22 @@
 	push hl
 	ld b, h
 	ld c, l
-	call Function97e79
+	call HandleQueuedCommand
 	pop hl
 
 .skip
-	ld de, $0006
+	ld de, CMDQUEUE_ENTRY_SIZE
 	add hl, de
 	ld a, [hMapObjectIndexBuffer]
 	inc a
-	cp $4
+	cp CMDQUEUE_CAPACITY
 	jr nz, .loop
 	ret
 ; 97e25
 
-Function97e25: ; 97e25
-	ld hl, wd6de
-	ld bc, 6
+GetNthCmdQueueEntry: ; 97e25 unreferenced
+	ld hl, wCmdQueue
+	ld bc, CMDQUEUE_ENTRY_SIZE
 	call AddNTimes
 	ld b, h
 	ld c, l
@@ -381,10 +381,10 @@
 	ret
 ; 97e31
 
-Function97e31:: ; 97e31
+WriteCmdQueue:: ; 97e31
 	push bc
 	push de
-	call Function97e45
+	call .GetNextEmptyEntry
 	ld d, h
 	ld e, l
 	pop hl
@@ -391,7 +391,7 @@
 	pop bc
 	ret c
 	ld a, b
-	ld bc, $0005
+	ld bc, CMDQUEUE_ENTRY_SIZE - 1
 	call FarCopyBytes
 	xor a
 	ld [hl], a
@@ -398,42 +398,42 @@
 	ret
 ; 97e45
 
-Function97e45: ; 97e45
-	ld hl, wd6de
-	ld de, $0006
-	ld c, $4
-.asm_97e4d
+.GetNextEmptyEntry: ; 97e45
+	ld hl, wCmdQueue
+	ld de, CMDQUEUE_ENTRY_SIZE
+	ld c, CMDQUEUE_CAPACITY
+.loop
 	ld a, [hl]
 	and a
-	jr z, .asm_97e57
+	jr z, .done
 	add hl, de
 	dec c
-	jr nz, .asm_97e4d
+	jr nz, .loop
 	scf
 	ret
 
-.asm_97e57
-	ld a, $4
+.done
+	ld a, CMDQUEUE_CAPACITY
 	sub c
 	and a
 	ret
 ; 97e5c
 
-Function97e5c:: ; 97e5c
-	ld hl, wd6de
-	ld de, $0006
-	ld c, $4
-.asm_97e64
+DelCmdQueue:: ; 97e5c
+	ld hl, wCmdQueue
+	ld de, CMDQUEUE_ENTRY_SIZE
+	ld c, CMDQUEUE_CAPACITY
+.loop
 	ld a, [hl]
 	cp b
-	jr z, .asm_97e6e
+	jr z, .done
 	add hl, de
 	dec c
-	jr nz, .asm_97e64
+	jr nz, .loop
 	and a
 	ret
 
-.asm_97e6e
+.done
 	xor a
 	ld [hl], a
 	scf
@@ -440,25 +440,25 @@
 	ret
 ; 97e72
 
-Function97e72: ; 97e72
-	ld hl, 0
+_DelCmdQueue: ; 97e72
+	ld hl, CMDQUEUE_TYPE
 	add hl, bc
 	ld [hl], 0
 	ret
 ; 97e79
 
-Function97e79: ; 97e79
-	ld hl, 0
+HandleQueuedCommand: ; 97e79
+	ld hl, CMDQUEUE_TYPE
 	add hl, bc
 	ld a, [hl]
 	cp 5
-	jr c, .asm_97e83
+	jr c, .okay
 	xor a
 
-.asm_97e83
+.okay
 	ld e, a
 	ld d, 0
-	ld hl, Table97e94
+	ld hl, .Jumptable_ba
 rept 3
 	add hl, de
 endr
@@ -472,16 +472,16 @@
 	ret
 ; 97e94
 
-Table97e94: ; 97e94
-	dba Function97eb7
-	dba Function97eb8
-	dba Function97f42
-	dba Function97ef9
-	dba Function97ebc
+.Jumptable_ba: ; 97e94
+	dba CmdQueue_Null
+	dba CmdQueue_Null2
+	dba CmdQueue_StoneTable
+	dba CmdQueue_Type3
+	dba CmdQueue_Type4
 ; 97ea3
 
-Function97ea3: ; 97ea3
-	ld hl, $0005
+CmdQueueAnonymousJumptable: ; 97ea3
+	ld hl, CMDQUEUE_05
 	add hl, bc
 	ld a, [hl]
 	pop hl
@@ -489,45 +489,44 @@
 	ret
 ; 97eab
 
-Function97eab: ; 97eab
-	ld hl, $0005
+CmdQueueAnonJT_Increment: ; 97eab
+	ld hl, CMDQUEUE_05
 	add hl, bc
 	inc [hl]
 	ret
 ; 97eb1
 
-Function97eb1: ; 97eb1
-	ld hl, $0005
+CmdQueueAnonJT_Decrement: ; 97eb1
+	ld hl, CMDQUEUE_05
 	add hl, bc
 	dec [hl]
 	ret
 ; 97eb7
 
-Function97eb7: ; 97eb7
+CmdQueue_Null: ; 97eb7
 	ret
 ; 97eb8
 
-Function97eb8: ; 97eb8
+CmdQueue_Null2: ; 97eb8
 	call ret_2f3e
 	ret
 ; 97ebc
 
-Function97ebc: ; 97ebc
-	call Function97ea3
-	dw Function97ec3
-	dw Function97ecd
+CmdQueue_Type4: ; 97ebc
+	call CmdQueueAnonymousJumptable
+	; anonymous jumptable
+	dw .zero
+	dw .one
 ; 97ec3
 
-Function97ec3: ; 97ec3
+.zero: ; 97ec3
 	ld a, [hSCY]
-	ld hl, $0004
+	ld hl, 4
 	add hl, bc
 	ld [hl], a
-	call Function97eab
-; 97ecd
-
-Function97ecd: ; 97ecd
-	ld hl, $0001
+	call CmdQueueAnonJT_Increment
+.one: ; 97ecd
+	ld hl, 1
 	add hl, bc
 	ld a, [hl]
 	dec a
@@ -535,7 +534,7 @@
 	jr z, .asm_97eee
 	and $1
 	jr z, .asm_97ee4
-	ld hl, $0002
+	ld hl, 2
 	add hl, bc
 	ld a, [hSCY]
 	sub [hl]
@@ -543,7 +542,7 @@
 	ret
 
 .asm_97ee4
-	ld hl, $0002
+	ld hl, 2
 	add hl, bc
 	ld a, [hSCY]
 	add [hl]
@@ -551,33 +550,32 @@
 	ret
 
 .asm_97eee
-	ld hl, $0004
+	ld hl, 4
 	add hl, bc
 	ld a, [hl]
 	ld [hSCY], a
-	call Function97e72
+	call _DelCmdQueue
 	ret
 ; 97ef9
 
-Function97ef9: ; 97ef9
-	call Function97ea3
-	dw Function97f02
-	dw Function97f0a
-	dw Function97f1b
+CmdQueue_Type3: ; 97ef9
+	call CmdQueueAnonymousJumptable
+	; anonymous jumptable
+	dw .zero
+	dw .one
+	dw .two
 ; 97f02
 
-Function97f02: ; 97f02
-	call Function97f38
-	jr z, Function97f2c
-	call Function97eab
-; 97f0a
+.zero: ; 97f02
+	call .IsPlayerFacingDown
+	jr z, .PlayerNotFacingDown
+	call CmdQueueAnonJT_Increment
+.one: ; 97f0a
+	call .IsPlayerFacingDown
+	jr z, .PlayerNotFacingDown
+	call CmdQueueAnonJT_Increment
 
-Function97f0a: ; 97f0a
-	call Function97f38
-	jr z, Function97f2c
-	call Function97eab
-
-	ld hl, $0002
+	ld hl, 2
 	add hl, bc
 	ld a, [hl]
 	ld [wd173], a
@@ -584,12 +582,12 @@
 	ret
 ; 97f1b
 
-Function97f1b: ; 97f1b
-	call Function97f38
-	jr z, Function97f2c
-	call Function97eb1
+.two: ; 97f1b
+	call .IsPlayerFacingDown
+	jr z, .PlayerNotFacingDown
+	call CmdQueueAnonJT_Decrement
 
-	ld hl, $0003
+	ld hl, 3
 	add hl, bc
 	ld a, [hl]
 	ld [wd173], a
@@ -596,16 +594,16 @@
 	ret
 ; 97f2c
 
-Function97f2c: ; 97f2c
+.PlayerNotFacingDown: ; 97f2c
 	ld a, $7f
 	ld [wd173], a
-	ld hl, $0005
+	ld hl, 5
 	add hl, bc
 	ld [hl], 0
 	ret
 ; 97f38
 
-Function97f38: ; 97f38
+.IsPlayerFacingDown: ; 97f38
 	push bc
 	ld bc, PlayerStruct
 	call GetSpriteDirection
@@ -614,40 +612,40 @@
 	ret
 ; 97f42
 
-Function97f42: ; 97f42
+CmdQueue_StoneTable: ; 97f42
 	ld de, PlayerStruct
-	ld a, $d
-.asm_97f47
+	ld a, NUM_OBJECT_STRUCTS
+.loop
 	push af
 
-	ld hl, 0
+	ld hl, OBJECT_SPRITE
 	add hl, de
 	ld a, [hl]
 	and a
-	jr z, .asm_97f71
+	jr z, .next
 
-	ld hl, $0003
+	ld hl, OBJECT_MOVEMENTTYPE
 	add hl, de
 	ld a, [hl]
-	cp $19
-	jr nz, .asm_97f71
+	cp STEP_TYPE_19
+	jr nz, .next
 
-	ld hl, $000e
+	ld hl, OBJECT_NEXT_TILE
 	add hl, de
 	ld a, [hl]
 	call CheckPitTile
-	jr nz, .asm_97f71
+	jr nz, .next
 
-	ld hl, $0007
+	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, de
 	ld a, [hl]
-	cp $ff
-	jr nz, .asm_97f71
-	call Function3567
-	jr c, .asm_97f7c
+	cp STANDING
+	jr nz, .next
+	call HandleStoneQueue
+	jr c, .fall_down_hole
 
-.asm_97f71
-	ld hl, $0028
+.next
+	ld hl, OBJECT_STRUCT_LENGTH
 	add hl, de
 	ld d, h
 	ld e, l
@@ -654,10 +652,10 @@
 
 	pop af
 	dec a
-	jr nz, .asm_97f47
+	jr nz, .loop
 	ret
 
-.asm_97f7c
+.fall_down_hole
 	pop af
 	ret
 ; 97f7e
--- a/engine/evolution_animation.asm
+++ b/engine/evolution_animation.asm
@@ -52,11 +52,11 @@
 	ld [PlayerHPPal], a
 
 	ld c, $0
-	call Function4e703
+	call .GetSGBLayout
 	ld a, [Buffer1]
 	ld [CurPartySpecies], a
 	ld [CurSpecies], a
-	call Function4e708
+	call .PlaceFrontpic
 
 	ld de, VTiles2
 	ld hl, VTiles2 tile $31
@@ -65,11 +65,11 @@
 
 	ld a, $31
 	ld [wd1ec], a
-	call Evolution_FlashFrontpics
+	call .ReplaceFrontpic
 	ld a, [Buffer2]
 	ld [CurPartySpecies], a
 	ld [CurSpecies], a
-	call Function4e711
+	call .LoadFrontpic
 	ld a, [Buffer1]
 	ld [CurPartySpecies], a
 	ld [CurSpecies], a
@@ -90,14 +90,14 @@
 	call DelayFrames
 
 	ld c, $1
-	call Function4e703
-	call Function4e726
-	jr c, .pressed_b
+	call .GetSGBLayout
+	call .AnimationSequence
+	jr c, .cancel_evo
 
-	ld a, $cf
+	ld a, -7 * 7
 	ld [wd1ec], a
 
-	call Evolution_FlashFrontpics
+	call .ReplaceFrontpic
 	xor a
 	ld [wd1ed], a
 
@@ -105,7 +105,7 @@
 	ld [PlayerHPPal], a
 
 	ld c, $0
-	call Function4e703
+	call .GetSGBLayout
 	call Function4e7a6
 	callba Function8cf53
 	call Function4e794
@@ -134,7 +134,7 @@
 .asm_4e6de
 	ret
 
-.pressed_b
+.cancel_evo
 	ld a, $1
 	ld [wd1ed], a
 
@@ -142,7 +142,7 @@
 	ld [PlayerHPPal], a
 
 	ld c, $0
-	call Function4e703
+	call .GetSGBLayout
 	call Function4e7a6
 	callba Function8cf53
 	call Function4e794
@@ -153,38 +153,38 @@
 	ret
 ; 4e703
 
-Function4e703: ; 4e703
-	ld b, $b
+.GetSGBLayout: ; 4e703
+	ld b, SCGB_0B
 	jp GetSGBLayout
 ; 4e708
 
-Function4e708: ; 4e708
+.PlaceFrontpic: ; 4e708
 	call GetBaseData
 	hlcoord 7, 2
 	jp PrepMonFrontpic
 ; 4e711
 
-Function4e711: ; 4e711
+.LoadFrontpic: ; 4e711
 	call GetBaseData
 	ld a, $1
 	ld [wc2c6], a
 	ld de, VTiles2
-	predef Function5108b
+	predef FrontpicPredef
 	xor a
 	ld [wc2c6], a
 	ret
 ; 4e726
 
-Function4e726: ; 4e726
+.AnimationSequence: ; 4e726
 	call ClearJoypad
-	lb bc, 1, 14
+	lb bc, 1, 2 * 7 ; flash b times, wait c frames in between
 .loop
 	push bc
-	call Evolution_CheckPressedB
+	call .WaitFrames_CheckPressedB
 	pop bc
-	jr c, .pressed_b
+	jr c, .exit_sequence
 	push bc
-	call Evolution_NextFrame
+	call .Flash
 	pop bc
 	inc b
 rept 2
@@ -194,31 +194,30 @@
 	and a
 	ret
 
-.pressed_b
+.exit_sequence
 	scf
 	ret
 ; 4e741
 
-Evolution_NextFrame: ; 4e741
-.loop
-	ld a, -49
+.Flash: ; 4e741
+	ld a, -7 * 7 ; new stage
 	ld [wd1ec], a
-	call Evolution_FlashFrontpics
-	ld a, 49
+	call .ReplaceFrontpic
+	ld a, 7 * 7 ; previous stage
 	ld [wd1ec], a
-	call Evolution_FlashFrontpics
+	call .ReplaceFrontpic
 	dec b
-	jr nz, .loop
+	jr nz, .Flash
 	ret
 ; 4e755
 
-Evolution_FlashFrontpics: ; 4e755
+.ReplaceFrontpic: ; 4e755
 	push bc
 	xor a
 	ld [hBGMapMode], a
 	hlcoord 7, 2
 	lb bc, 7, 7
-	ld de, $d
+	ld de, SCREEN_WIDTH - 7
 .loop1
 	push bc
 .loop2
@@ -238,8 +237,7 @@
 	ret
 ; 4e779
 
-Evolution_CheckPressedB: ; 4e779
-.loop
+.WaitFrames_CheckPressedB: ; 4e779
 	call DelayFrame
 	push bc
 	call JoyTextDelay
@@ -247,9 +245,9 @@
 	pop bc
 	and B_BUTTON
 	jr nz, .pressed_b
-.loop2
+.loop3
 	dec c
-	jr nz, .loop
+	jr nz, .WaitFrames_CheckPressedB
 	and a
 	ret
 
@@ -256,7 +254,7 @@
 .pressed_b
 	ld a, [wd1e9]
 	and a
-	jr nz, .loop2
+	jr nz, .loop3
 	scf
 	ret
 ; 4e794
@@ -281,18 +279,18 @@
 	ld a, [hl]
 	push af
 	ld [hl], $0
-.asm_4e7b8
+.loop
 	call Function4e7cf
-	jr nc, .asm_4e7c2
+	jr nc, .done
 	call Function4e80c
-	jr .asm_4e7b8
+	jr .loop
 
-.asm_4e7c2
+.done
 	ld c, $20
-.asm_4e7c4
+.loop2
 	call Function4e80c
 	dec c
-	jr nz, .asm_4e7c4
+	jr nz, .loop2
 	pop af
 	ld [wJumptableIndex], a
 	ret
@@ -319,9 +317,9 @@
 
 Function4e7e8: ; 4e7e8
 	push de
-	ld de, $4858
+	lb de, $48, $58
 	ld a, $13
-	call Function3b2a
+	call _InitSpriteAnimStruct
 	ld hl, $b
 	add hl, bc
 	ld a, [wJumptableIndex]
@@ -342,6 +340,7 @@
 Function4e80c: ; 4e80c
 	push bc
 	callab Function8cf69
+	; a = (([hVBlankCounter] + 4) / 2) % NUM_PALETTES
 	ld a, [hVBlankCounter]
 	and $e
 	srl a
@@ -350,9 +349,9 @@
 endr
 	and $7
 	ld b, a
-	ld hl, Sprites + 3
-	ld c, $28
-.asm_4e823
+	ld hl, Sprites + 3 ; attributes
+	ld c, 40
+.loop
 	ld a, [hl]
 	or b
 	ld [hli], a
@@ -360,7 +359,7 @@
 	inc hl
 endr
 	dec c
-	jr nz, .asm_4e823
+	jr nz, .loop
 	pop bc
 	call DelayFrame
 	ret
@@ -378,7 +377,7 @@
 	call DisableLCD
 	call LoadStandardFont
 	call LoadFontsBattleExtra
-	ld hl, VBGMap0
+	hlbgcoord 0, 0
 	ld bc, VBGMap1 - VBGMap0
 	ld a, " "
 	call ByteFill
@@ -411,7 +410,7 @@
 	call DisableLCD
 	call LoadStandardFont
 	call LoadFontsBattleExtra
-	ld hl, VBGMap0
+	hlbgcoord 0, 0
 	ld bc, VBGMap1 - VBGMap0
 	ld a, " "
 	call ByteFill
@@ -446,7 +445,7 @@
 	ld bc, w6_d400 - w6_d000
 	ld a, " "
 	call ByteFill
-	ld hl, VBGMap0
+	hlbgcoord 0, 0
 	ld de, w6_d000
 	ld b, $0
 	ld c, $40
--- /dev/null
+++ b/engine/evolve.asm
@@ -1,0 +1,682 @@
+EvolvePokemon: ; 421d8
+	ld hl, EvolvableFlags
+	xor a
+	ld [hl], a
+	ld a, [CurPartyMon]
+	ld c, a
+	ld b, SET_FLAG
+	call EvoFlagAction
+
+EvolveAfterBattle: ; 421e6
+	xor a
+	ld [wMonTriedToEvolve], a
+	dec a
+	ld [CurPartyMon], a
+	push hl
+	push bc
+	push de
+	ld hl, PartyCount
+
+	push hl
+
+CheckForEvolvablePokemon: ; 421f5
+	ld hl, CurPartyMon
+	inc [hl]
+
+	pop hl
+
+	inc hl
+	ld a, [hl]
+	cp $ff
+	jp z, Evolution_ReturnToMap
+
+	ld [Buffer1], a
+
+	push hl
+	ld a, [CurPartyMon]
+	ld c, a
+	ld hl, EvolvableFlags
+	ld b, CHECK_FLAG
+	call EvoFlagAction
+	ld a, c
+	and a
+	jp z, CheckForEvolvablePokemon
+
+	ld a, [Buffer1]
+	dec a
+	ld b, 0
+	ld c, a
+	ld hl, EvosAttacksPointers
+rept 2
+	add hl, bc
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+
+	push hl
+	xor a
+	ld [MonType], a
+	predef CopyPkmnToTempMon
+	pop hl
+
+.loop
+	ld a, [hli]
+	and a
+	jr z, CheckForEvolvablePokemon
+
+	ld b, a
+
+	cp EVOLVE_TRADE
+	jr z, .trade
+
+	ld a, [wLinkMode]
+	and a
+	jp nz, .dont_evolve_2
+
+	ld a, b
+	cp EVOLVE_ITEM
+	jp z, .item
+
+	ld a, [wd1e9]
+	and a
+	jp nz, .dont_evolve_2
+
+	ld a, b
+	cp EVOLVE_LEVEL
+	jp z, .level
+
+	cp EVOLVE_HAPPINESS
+	jr z, .happiness
+
+
+; EVOLVE_STAT
+	ld a, [TempMonLevel]
+	cp [hl]
+	jp c, .dont_evolve_1
+
+	call IsMonHoldingEverstone
+	jp z, .dont_evolve_1
+
+	push hl
+	ld de, TempMonAttack
+	ld hl, TempMonDefense
+	ld c, 2
+	call StringCmp
+	ld a, ATK_EQ_DEF
+	jr z, .got_tyrogue_evo
+	ld a, ATK_LT_DEF
+	jr c, .got_tyrogue_evo
+	ld a, ATK_GT_DEF
+.got_tyrogue_evo
+	pop hl
+
+	inc hl
+	cp [hl]
+	jp nz, .dont_evolve_2
+
+	inc hl
+	jr .proceed
+
+
+.happiness
+	ld a, [TempMonHappiness]
+	cp 220
+	jp c, .dont_evolve_2
+
+	call IsMonHoldingEverstone
+	jp z, .dont_evolve_2
+
+	ld a, [hli]
+	cp TR_ANYTIME
+	jr z, .proceed
+	cp TR_MORNDAY
+	jr z, .happiness_daylight
+
+; TR_NITE
+	ld a, [TimeOfDay]
+	cp NITE
+	jp nz, .dont_evolve_3
+	jr .proceed
+
+.happiness_daylight
+	ld a, [TimeOfDay]
+	cp NITE
+	jp z, .dont_evolve_3
+	jr .proceed
+
+
+.trade
+	ld a, [wLinkMode]
+	and a
+	jp z, .dont_evolve_2
+
+	call IsMonHoldingEverstone
+	jp z, .dont_evolve_2
+
+	ld a, [hli]
+	ld b, a
+	inc a
+	jr z, .proceed
+
+	ld a, [wLinkMode]
+	cp LINK_TIMECAPSULE
+	jp z, .dont_evolve_3
+
+	ld a, [TempMonItem]
+	cp b
+	jp nz, .dont_evolve_3
+
+	xor a
+	ld [TempMonItem], a
+	jr .proceed
+
+
+.item
+	ld a, [hli]
+	ld b, a
+	ld a, [CurItem]
+	cp b
+	jp nz, .dont_evolve_3
+
+	ld a, [wd1e9]
+	and a
+	jp z, .dont_evolve_3
+	ld a, [wLinkMode]
+	and a
+	jp nz, .dont_evolve_3
+	jr .proceed
+
+
+.level
+	ld a, [hli]
+	ld b, a
+	ld a, [TempMonLevel]
+	cp b
+	jp c, .dont_evolve_3
+	call IsMonHoldingEverstone
+	jp z, .dont_evolve_3
+
+.proceed
+	ld a, [TempMonLevel]
+	ld [CurPartyLevel], a
+	ld a, $1
+	ld [wMonTriedToEvolve], a
+
+	push hl
+
+	ld a, [hl]
+	ld [Buffer2], a
+	ld a, [CurPartyMon]
+	ld hl, PartyMonNicknames
+	call GetNick
+	call CopyName1
+	ld hl, Text_WhatEvolving
+	call PrintText
+
+	ld c, 50
+	call DelayFrames
+
+	xor a
+	ld [hBGMapMode], a
+	hlcoord 0, 0
+	lb bc, 12, 20
+	call ClearBox
+
+	ld a, $1
+	ld [hBGMapMode], a
+	call ClearSprites
+
+	callba EvolutionAnimation
+
+	push af
+	call ClearSprites
+	pop af
+	jp c, CancelEvolution
+
+	ld hl, Text_CongratulationsYourPokemon
+	call PrintText
+
+	pop hl
+
+	ld a, [hl]
+	ld [CurSpecies], a
+	ld [TempMonSpecies], a
+	ld [Buffer2], a
+	ld [wd265], a
+	call GetPokemonName
+
+	push hl
+	ld hl, Text_EvolvedIntoPKMN
+	call PrintTextBoxText
+	callba MobileFn_106094
+
+	ld de, MUSIC_NONE
+	call PlayMusic
+	ld de, SFX_CAUGHT_MON
+	call PlaySFX
+	call WaitSFX
+
+	ld c, 40
+	call DelayFrames
+
+	call ClearTileMap
+	call UpdateSpeciesNameIfNotNicknamed
+	call GetBaseData
+
+	ld hl, TempMonExp + 2
+	ld de, TempMonMaxHP
+	ld b, $1
+	predef CalcPkmnStats
+
+	ld a, [CurPartyMon]
+	ld hl, PartyMons
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call AddNTimes
+	ld e, l
+	ld d, h
+	ld bc, MON_MAXHP
+	add hl, bc
+	ld a, [hli]
+	ld b, a
+	ld c, [hl]
+	ld hl, TempMonMaxHP + 1
+	ld a, [hld]
+	sub c
+	ld c, a
+	ld a, [hl]
+	sbc b
+	ld b, a
+	ld hl, TempMonHP + 1
+	ld a, [hl]
+	add c
+	ld [hld], a
+	ld a, [hl]
+	adc b
+	ld [hl], a
+
+	ld hl, TempMonSpecies
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call CopyBytes
+
+	ld a, [CurSpecies]
+	ld [wd265], a
+	xor a
+	ld [MonType], a
+	call LearnLevelMoves
+	ld a, [wd265]
+	dec a
+	call SetSeenAndCaughtMon
+
+	ld a, [wd265]
+	cp UNOWN
+	jr nz, .skip_unown
+
+	ld hl, TempMonDVs
+	predef GetUnownLetter
+	callab UpdateUnownDex
+
+.skip_unown
+	pop de
+	pop hl
+	ld a, [TempMonSpecies]
+	ld [hl], a
+	push hl
+	ld l, e
+	ld h, d
+	jp CheckForEvolvablePokemon
+; 423f8
+
+.dont_evolve_1
+	inc hl
+.dont_evolve_2
+	inc hl
+.dont_evolve_3
+	inc hl
+	jp .loop
+; 423fe
+
+; dummy pop
+	pop hl
+
+Evolution_ReturnToMap: ; 423ff
+	pop de
+	pop bc
+	pop hl
+	ld a, [wLinkMode]
+	and a
+	ret nz
+	ld a, [wBattleMode]
+	and a
+	ret nz
+	ld a, [wMonTriedToEvolve]
+	and a
+	call nz, RestartMapMusic
+	ret
+; 42414
+
+UpdateSpeciesNameIfNotNicknamed: ; 42414
+	ld a, [CurSpecies]
+	push af
+	ld a, [BaseDexNo]
+	ld [wd265], a
+	call GetPokemonName
+	pop af
+	ld [CurSpecies], a
+	ld hl, StringBuffer1
+	ld de, StringBuffer2
+.loop
+	ld a, [de]
+	inc de
+	cp [hl]
+	inc hl
+	ret nz
+	cp "@"
+	jr nz, .loop
+
+	ld a, [CurPartyMon]
+	ld bc, PKMN_NAME_LENGTH
+	ld hl, PartyMonNicknames
+	call AddNTimes
+	push hl
+	ld a, [CurSpecies]
+	ld [wd265], a
+	call GetPokemonName
+	ld hl, StringBuffer1
+	pop de
+	ld bc, PKMN_NAME_LENGTH
+	jp CopyBytes
+; 42454
+
+CancelEvolution: ; 42454
+	ld hl, Text_StoppedEvolving
+	call PrintText
+	call ClearTileMap
+	pop hl
+	jp CheckForEvolvablePokemon
+; 42461
+
+IsMonHoldingEverstone: ; 42461
+	push hl
+	ld a, [CurPartyMon]
+	ld hl, PartyMon1Item
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call AddNTimes
+	ld a, [hl]
+	cp EVERSTONE
+	pop hl
+	ret
+; 42473
+
+Text_CongratulationsYourPokemon: ; 0x42473
+	; Congratulations! Your @ @
+	text_jump UnknownText_0x1c4b92
+	db "@"
+; 0x42478
+
+Text_EvolvedIntoPKMN: ; 0x42478
+	; evolved into @ !
+	text_jump UnknownText_0x1c4baf
+	db "@"
+; 0x4247d
+
+Text_StoppedEvolving: ; 0x4247d
+	; Huh? @ stopped evolving!
+	text_jump UnknownText_0x1c4bc5
+	db "@"
+; 0x42482
+
+Text_WhatEvolving: ; 0x42482
+	; What? @ is evolving!
+	text_jump UnknownText_0x1c4be3
+	db "@"
+; 0x42487
+
+
+LearnLevelMoves: ; 42487
+	ld a, [wd265]
+	ld [CurPartySpecies], a
+	dec a
+	ld b, 0
+	ld c, a
+	ld hl, EvosAttacksPointers
+rept 2
+	add hl, bc
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+
+.skip_evos
+	ld a, [hli]
+	and a
+	jr nz, .skip_evos
+
+.find_move
+	ld a, [hli]
+	and a
+	jr z, .done
+
+	ld b, a
+	ld a, [CurPartyLevel]
+	cp b
+	ld a, [hli]
+	jr nz, .find_move
+
+	push hl
+	ld d, a
+	ld hl, PartyMon1Moves
+	ld a, [CurPartyMon]
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call AddNTimes
+
+	ld b, NUM_MOVES
+.check_move
+	ld a, [hli]
+	cp d
+	jr z, .has_move
+	dec b
+	jr nz, .check_move
+	jr .learn
+.has_move
+
+	pop hl
+	jr .find_move
+
+.learn
+	ld a, d
+	ld [wd262], a
+	ld [wd265], a
+	call GetMoveName
+	call CopyName1
+	predef LearnMove
+	pop hl
+	jr .find_move
+
+.done
+	ld a, [CurPartySpecies]
+	ld [wd265], a
+	ret
+; 424e1
+
+
+FillMoves: ; 424e1
+; Fill in moves at de for CurPartySpecies at CurPartyLevel
+
+	push hl
+	push de
+	push bc
+	ld hl, EvosAttacksPointers
+	ld b, 0
+	ld a, [CurPartySpecies]
+	dec a
+	add a
+	rl b
+	ld c, a
+	add hl, bc
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+.GoToAttacks
+	ld a, [hli]
+	and a
+	jr nz, .GoToAttacks
+	jr .GetLevel
+
+.NextMove
+	pop de
+.GetMove
+	inc hl
+.GetLevel
+	ld a, [hli]
+	and a
+	jp z, .done
+	ld b, a
+	ld a, [CurPartyLevel]
+	cp b
+	jp c, .done
+	ld a, [Buffer1]
+	and a
+	jr z, .CheckMove
+	ld a, [wd002]
+	cp b
+	jr nc, .GetMove
+
+.CheckMove
+	push de
+	ld c, NUM_MOVES
+.CheckRepeat
+	ld a, [de]
+	inc de
+	cp [hl]
+	jr z, .NextMove
+	dec c
+	jr nz, .CheckRepeat
+	pop de
+	push de
+	ld c, NUM_MOVES
+.CheckSlot
+	ld a, [de]
+	and a
+	jr z, .LearnMove
+	inc de
+	dec c
+	jr nz, .CheckSlot
+	pop de
+	push de
+	push hl
+	ld h, d
+	ld l, e
+	call ShiftMoves
+	ld a, [Buffer1]
+	and a
+	jr z, .ShiftedMove
+	push de
+	ld bc, PartyMon1PP - (PartyMon1Moves + NUM_MOVES - 1)
+	add hl, bc
+	ld d, h
+	ld e, l
+	call ShiftMoves
+	pop de
+
+.ShiftedMove
+	pop hl
+
+.LearnMove
+	ld a, [hl]
+	ld [de], a
+	ld a, [Buffer1]
+	and a
+	jr z, .NextMove
+	push hl
+	ld a, [hl]
+	ld hl, MON_PP - MON_MOVES
+	add hl, de
+	push hl
+	dec a
+	ld hl, Moves + MOVE_PP
+	ld bc, MOVE_LENGTH
+	call AddNTimes
+	ld a, BANK(Moves)
+	call GetFarByte
+	pop hl
+	ld [hl], a
+	pop hl
+	jr .NextMove
+
+.done
+	pop bc
+	pop de
+	pop hl
+	ret
+; 4256e
+
+ShiftMoves: ; 4256e
+	ld c, NUM_MOVES - 1
+.loop
+	inc de
+	ld a, [de]
+	ld [hli], a
+	dec c
+	jr nz, .loop
+	ret
+; 42577
+
+
+EvoFlagAction: ; 42577
+	push de
+	ld d, $0
+	predef FlagPredef
+	pop de
+	ret
+; 42581
+
+GetPreEvolution: ; 42581
+; Find the first mon to evolve into CurPartySpecies.
+
+; Return carry and the new species in CurPartySpecies
+; if a pre-evolution is found.
+
+	ld c, 0
+.loop ; For each Pokemon...
+	ld hl, EvosAttacksPointers
+	ld b, 0
+rept 2
+	add hl, bc
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+.loop2 ; For each evolution...
+	ld a, [hli]
+	and a
+	jr z, .no_evolve ; If we jump, this Pokemon does not evolve into CurPartySpecies.
+	cp EVOLVE_STAT ; This evolution type has the extra parameter of stat comparison.
+	jr nz, .not_tyrogue
+	inc hl
+
+.not_tyrogue
+	inc hl
+	ld a, [CurPartySpecies]
+	cp [hl]
+	jr z, .found_preevo
+	inc hl
+	ld a, [hl]
+	and a
+	jr nz, .loop2
+
+.no_evolve
+	inc c
+	ld a, c
+	cp NUM_POKEMON
+	jr c, .loop
+	and a
+	ret
+
+.found_preevo
+	inc c
+	ld a, c
+	ld [CurPartySpecies], a
+	scf
+	ret
+; 425b1
--- a/engine/facings.asm
+++ b/engine/facings.asm
@@ -50,7 +50,7 @@
 Facing00:
 Facing02:
 Facing24:
-Facing26: ; 408b
+Facing26: ; standing down
 	db 4 ; #
 	db  0,  0, 0, $00
 	db  0,  8, 0, $01
@@ -58,7 +58,7 @@
 	db  8,  8, 2, $03
 ; 409c
 
-Facing01: ; 409c
+Facing01: ; walking down 1
 	db 4 ; #
 	db  0,  0, 0, $80
 	db  0,  8, 0, $81
@@ -66,7 +66,7 @@
 	db  8,  8, 2, $83
 ; 40ad
 
-Facing03: ; 40ad
+Facing03: ; walking down 2
 	db 4 ; #
 	db  0,  8, X_FLIP, $80
 	db  0,  0, X_FLIP, $81
@@ -75,7 +75,7 @@
 ; 40be
 
 Facing04:
-Facing06: ; 40be
+Facing06: ; standing up
 	db 4 ; #
 	db  0,  0, 0, $04
 	db  0,  8, 0, $05
@@ -83,7 +83,7 @@
 	db  8,  8, 2, $07
 ; 40cf
 
-Facing05: ; 40cf
+Facing05: ; walking up 1
 	db 4 ; #
 	db  0,  0, 0, $84
 	db  0,  8, 0, $85
@@ -91,7 +91,7 @@
 	db  8,  8, 2, $87
 ; 40e0
 
-Facing07: ; 40e0
+Facing07: ; walking up 2
 	db 4 ; #
 	db  0,  8, X_FLIP, $84
 	db  0,  0, X_FLIP, $85
@@ -100,7 +100,7 @@
 ; 40f1
 
 Facing08:
-Facing10: ; 40f1
+Facing10: ; standing left
 	db 4 ; #
 	db  0,  0, 0, $08
 	db  0,  8, 0, $09
@@ -109,7 +109,7 @@
 ; 4102
 
 Facing12:
-Facing14: ; 4102
+Facing14: ; standing right
 	db 4 ; #
 	db  0,  8, X_FLIP, $08
 	db  0,  0, X_FLIP, $09
@@ -118,7 +118,7 @@
 ; 4113
 
 Facing09:
-Facing11: ; 4113
+Facing11: ; walking left
 	db 4 ; #
 	db  0,  0, 0, $88
 	db  0,  8, 0, $89
@@ -127,7 +127,7 @@
 ; 4124
 
 Facing13:
-Facing15: ; 4124
+Facing15: ; walking right
 	db 4 ; #
 	db  0,  8, X_FLIP, $88
 	db  0,  0, X_FLIP, $89
@@ -135,7 +135,7 @@
 	db  8,  0, 2 | X_FLIP, $8b
 ; 4135
 
-Facing16: ; 4135
+Facing16: ; fishing down
 	db 5 ; #
 	db  0,  0, 0, $00
 	db  0,  8, 0, $01
@@ -144,7 +144,7 @@
 	db 16,  0, 4, $fc
 ; 414a
 
-Facing17: ; 414a
+Facing17: ; fishing up
 	db 5 ; #
 	db  0,  0, 0, $04
 	db  0,  8, 0, $05
@@ -153,7 +153,7 @@
 	db -8,  0, 4, $fc
 ; 415f
 
-Facing18: ; 415f
+Facing18: ; fishing left
 	db 5 ; #
 	db  0,  0, 0, $08
 	db  0,  8, 0, $09
@@ -162,7 +162,7 @@
 	db  5, -8, 4 | X_FLIP, $fd
 ; 4174
 
-Facing19: ; 4174
+Facing19: ; fishing right
 	db 5 ; #
 	db  0,  8, X_FLIP, $08
 	db  0,  0, X_FLIP, $09
@@ -171,7 +171,7 @@
 	db  5, 16, 4, $fd
 ; 4189
 
-Facing20: ; 4189
+Facing20: ; emote
 	db 4 ; #
 	db  0,  0, 4, $f8
 	db  0,  8, 4, $f9
@@ -179,13 +179,13 @@
 	db  8,  8, 4, $fb
 ; 419a
 
-Facing21: ; 419a
+Facing21: ; shadow
 	db 2 ; #
 	db  0,  0, 4, $fc
 	db  0,  8, 4 | X_FLIP, $fc
 ; 41a3
 
-Facing23: ; 41a3
+Facing23: ; big snorlax or lapras doll
 	db 16 ; #
 	db  0,  0, 0, $00
 	db  0,  8, 0, $01
@@ -221,7 +221,7 @@
 	db  8,  0, X_FLIP, $07
 ; 4206
 
-Facing22: ; 4206
+Facing22: ; big doll other than snorlax or lapras
 	db 14 ; #
 	db  0,  0, 0, $00
 	db  0,  8, 0, $01
@@ -239,7 +239,7 @@
 	db 24, 16, 0, $0b
 ; 423f
 
-Facing28: ; 423f
+Facing28: ; boulder dust 1
 	db 4 ; #
 	db  0,  0, 4, $fe
 	db  0,  8, 4, $fe
@@ -247,7 +247,7 @@
 	db  8,  8, 4, $fe
 ; 4250
 
-Facing29: ; 4250
+Facing29: ; boulder dust 2
 	db 4 ; #
 	db  0,  0, 4, $ff
 	db  0,  8, 4, $ff
--- a/engine/flypoints.asm
+++ /dev/null
@@ -1,916 +1,0 @@
-_FlyMap: ; 91af3
-	call ClearBGPalettes
-	call ClearTileMap
-	call ClearSprites
-	ld hl, hInMenu
-	ld a, [hl]
-	push af
-	ld [hl], $1
-	xor a
-	ld [hBGMapMode], a
-	callba Function8cf53
-	call Function91ff2
-	ld de, GFX_922e1
-	ld hl, VTiles2 tile $30
-	lb bc, BANK(GFX_922e1), 6
-	call Request1bpp
-	call FlyMap
-	call Function91c8f
-	ld b, $2
-	call GetSGBLayout
-	call SetPalettes
-.loop
-	call JoyTextDelay
-	ld hl, hJoyPressed
-	ld a, [hl]
-	and B_BUTTON
-	jr nz, .pressedB
-	ld a, [hl]
-	and A_BUTTON
-	jr nz, .pressedA
-	call FlyMapScroll
-	call GetMapCursorCoordinates
-	callba Function8cf69
-	call DelayFrame
-	jr .loop
-
-.pressedB
-	ld a, -1
-	jr .exit
-
-.pressedA
-	ld a, [wd002]
-	ld l, a
-	ld h, 0
-	add hl, hl
-	ld de, Flypoints + 1
-	add hl, de
-	ld a, [hl]
-
-.exit
-	ld [wd002], a
-	pop af
-	ld [hInMenu], a
-	call ClearBGPalettes
-	ld a, $90
-	ld [hWY], a
-	xor a
-	ld [hBGMapAddress], a
-	ld a, VBGMap0 / $100
-	ld [hBGMapAddress + 1], a
-	ld a, [wd002]
-	ld e, a
-	ret
-; 91b73
-
-FlyMapScroll: ; 91b73
-	ld a, [StartFlypoint]
-	ld e, a
-	ld a, [EndFlypoint]
-	ld d, a
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, .ScrollNext
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .ScrollPrev
-	ret
-
-.ScrollNext
-	ld hl, wd002
-	ld a, [hl]
-	cp d
-	jr nz, .NotAtEndYet
-	ld a, e
-	dec a
-	ld [hl], a
-
-.NotAtEndYet
-	inc [hl]
-	call CheckIfVisitedFlypoint
-	jr z, .ScrollNext
-	jr .Finally
-
-.ScrollPrev
-	ld hl, wd002
-	ld a, [hl]
-	cp e
-	jr nz, .NotAtStartYet
-	ld a, d
-	inc a
-	ld [hl], a
-
-.NotAtStartYet
-	dec [hl]
-	call CheckIfVisitedFlypoint
-	jr z, .ScrollPrev
-
-.Finally
-	call TownMapBubble
-	call WaitBGMap
-	xor a
-	ld [hBGMapMode], a
-	ret
-; 91bb5
-
-TownMapBubble: ; 91bb5
-; Draw the bubble containing the location text in the town map HUD
-
-; Top-left corner
-	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	
-	ret
-
-.Where
-	db "Where?@"
-
-.Name
-; We need the map location of the default flypoint
-	ld a, [wd002]
-	ld l, a
-	ld h, 0
-	add hl, hl ; two bytes per flypoint
-	ld de, Flypoints
-	add hl, de
-	ld e, [hl]
-
-	callba GetLandmarkName
-
-	hlcoord 2, 1
-	ld de, StringBuffer1
-	call PlaceString
-	ret
-; 91c17
-
-GetMapCursorCoordinates: ; 91c17
-	ld a, [wd002]
-	ld l, a
-	ld h, $0
-	add hl, hl
-	ld de, Flypoints
-	add hl, de
-	ld e, [hl]
-	callba GetLandmarkCoords
-	ld a, [wd003]
-	ld c, a
-	ld a, [wd004]
-	ld b, a
-	ld hl, $4
-	add hl, bc
-	ld [hl], e
-	ld hl, $5
-	add hl, bc
-	ld [hl], d
-	ret
-; 91c3c
-
-CheckIfVisitedFlypoint: ; 91c3c
-; Check if the flypoint loaded in [hl] has been visited yet.
-	push bc
-	push de
-	push hl
-	ld l, [hl]
-	ld h, 0
-	add hl, hl
-	ld de, Flypoints + 1
-	add hl, de
-	ld c, [hl]
-	call HasVisitedSpawn
-	pop hl
-	pop de
-	pop bc
-	and a
-	ret
-; 91c50
-
-HasVisitedSpawn: ; 91c50
-; Check if spawn point c has been visited.
-	ld hl, VisitedSpawns
-	ld b, CHECK_FLAG
-	ld d, 0
-	predef FlagPredef
-	ld a, c
-	ret
-; 91c5e
-
-Flypoints: ; 91c5e
-; landmark, spawn point
-
-	const_def
-
-flypoint: MACRO
-; \1\@FLY   EQUS "FLY_\1"
-; \1\@SPAWN EQUS "SPAWN_\1"
-	; const \1\@FLY
-	; db \2, \1\@SPAWN
-	const FLY_\1
-	db \2, SPAWN_\1
-ENDM
-
-; Johto
-	flypoint NEW_BARK,    NEW_BARK_TOWN
-	flypoint CHERRYGROVE, CHERRYGROVE_CITY
-	flypoint VIOLET,      VIOLET_CITY
-	flypoint AZALEA,      AZALEA_TOWN
-	flypoint GOLDENROD,   GOLDENROD_CITY
-	flypoint ECRUTEAK,    ECRUTEAK_CITY
-	flypoint OLIVINE,     OLIVINE_CITY
-	flypoint CIANWOOD,    CIANWOOD_CITY
-	flypoint MAHOGANY,    MAHOGANY_TOWN
-	flypoint LAKE,        LAKE_OF_RAGE
-	flypoint BLACKTHORN,  BLACKTHORN_CITY
-	flypoint MT_SILVER,   SILVER_CAVE
-
-; Kanto
-KANTO_FLYPOINT EQU const_value
-
-	flypoint PALLET,      PALLET_TOWN
-	flypoint VIRIDIAN,    VIRIDIAN_CITY
-	flypoint PEWTER,      PEWTER_CITY
-	flypoint CERULEAN,    CERULEAN_CITY
-	flypoint VERMILION,   VERMILION_CITY
-	flypoint ROCK_TUNNEL, ROCK_TUNNEL
-	flypoint LAVENDER,    LAVENDER_TOWN
-	flypoint CELADON,     CELADON_CITY
-	flypoint SAFFRON,     SAFFRON_CITY
-	flypoint FUCHSIA,     FUCHSIA_CITY
-	flypoint CINNABAR,    CINNABAR_ISLAND
-	flypoint INDIGO,      INDIGO_PLATEAU
-
-	db -1
-; 91c8f
-
-Function91c8f: ; 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
-
-	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
-	pop af
-	call TownMapPlayerIcon
-	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
-
-	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...
-	ld a, FLY_PALLET
-	ld [StartFlypoint], a
-; ...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
-	pop af
-	call TownMapPlayerIcon
-	ret
-
-.NoKanto
-; If Indigo Plateau hasn't been visited, we use Johto's map instead
-
-; 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
-
-	ld hl, VBGMap0 ; BG Map 0
-	call TownMapBGUpdate
-
-	call TownMapMon
-	ld a, c
-	ld [wd003], a
-	ld a, b
-	ld [wd004], a
-	ret
-; 91d11
-
-Function91d11: ; 91d11
-	ld a, [wd002]
-	push af
-	ld a, [wd003]
-	push af
-	ld a, e
-	ld [wd002], a
-	call ClearSprites
-	xor a
-	ld [hBGMapMode], a
-	ld a, $1
-	ld [hInMenu], a
-	ld de, GFX_922d1
-	ld hl, VTiles0 tile $7f
-	lb bc, BANK(GFX_922d1), 1
-	call Request2bpp ; actually 1bpp
-	call Function91ed0
-	ld hl, VTiles0 tile $78
-	ld c, $4
-	call Request2bpp
-	call Function91ff2
-	call FillKantoMap
-	call Function91de9
-	call TownMapPals
-	ld hl, VBGMap1
-	call TownMapBGUpdate
-	call FillJohtoMap
-	call Function91de9
-	call TownMapPals
-	ld hl, VBGMap0
-	call TownMapBGUpdate
-	ld b, $2
-	call GetSGBLayout
-	call SetPalettes
-	xor a
-	ld [hBGMapMode], a
-	xor a
-	call Function91e1e
-.asm_91d6e
-	call JoyTextDelay
-	ld hl, hJoyPressed
-	ld a, [hl]
-	and A_BUTTON | B_BUTTON
-	jr nz, .asm_91d8f
-	ld a, [hJoypadDown]
-	and SELECT
-	jr nz, .asm_91d87
-	call Function91d9b
-	call Function91dcd
-	jr .asm_91d8a
-
-.asm_91d87
-	call Function91e5a
-
-.asm_91d8a
-	call DelayFrame
-	jr .asm_91d6e
-
-.asm_91d8f
-	call ClearSprites
-	pop af
-	ld [wd003], a
-	pop af
-	ld [wd002], a
-	ret
-; 91d9b
-
-Function91d9b: ; 91d9b
-	ld a, [hl]
-	and $20
-	jr nz, .asm_91da6
-	ld a, [hl]
-	and $10
-	jr nz, .asm_91db7
-	ret
-
-.asm_91da6
-	ld a, [hWY]
-	cp $90
-	ret z
-	call ClearSprites
-	ld a, $90
-	ld [hWY], a
-	xor a
-	call Function91e1e
-	ret
-
-.asm_91db7
-	ld a, [StatusFlags]
-	bit 6, a
-	ret z
-	ld a, [hWY]
-	and a
-	ret z
-	call ClearSprites
-	xor a
-	ld [hWY], a
-	ld a, $1
-	call Function91e1e
-	ret
-; 91dcd
-
-Function91dcd: ; 91dcd
-	ld a, [hVBlankCounter]
-	ld e, a
-	and $f
-	ret nz
-	ld a, e
-	and $10
-	jr nz, .asm_91ddc
-	call ClearSprites
-	ret
-
-.asm_91ddc
-	hlcoord 0, 0
-	ld de, Sprites
-	ld bc, $a0
-	call CopyBytes
-	ret
-; 91de9
-
-Function91de9: ; 91de9
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH
-	ld a, $7f
-	call ByteFill
-	hlcoord 0, 1
-	ld a, $6
-	ld [hli], a
-	ld bc, SCREEN_HEIGHT
-	ld a, $7
-	call ByteFill
-	ld [hl], $17
-	call GetPokemonName
-	hlcoord 2, 0
-	call PlaceString
-	ld h, b
-	ld l, c
-	ld de, String_91e16
-	call PlaceString
-	ret
-; 91e16
-
-String_91e16:
-	db "'S NEST@"
-; 91e1e
-
-Function91e1e: ; 91e1e
-	ld [wd003], a
-	ld e, a
-	callba Function2a01f
-	decoord 0, 0
-	ld hl, Sprites
-.asm_91e2e
-	ld a, [de]
-	and a
-	jr z, .asm_91e4d
-	push de
-	ld e, a
-	push hl
-	callba GetLandmarkCoords
-	pop hl
-	ld a, d
-	sub $4
-	ld [hli], a
-	ld a, e
-	sub $4
-	ld [hli], a
-	ld a, $7f
-	ld [hli], a
-	xor a
-	ld [hli], a
-	pop de
-	inc de
-	jr .asm_91e2e
-
-.asm_91e4d
-	ld hl, Sprites
-	decoord 0, 0
-	ld bc, $a0
-	call CopyBytes
-	ret
-; 91e5a
-
-Function91e5a: ; 91e5a
-	call Function91ea9
-	ret c
-
-	ld a, [wd002]
-	ld e, a
-	callba GetLandmarkCoords
-	ld c, e
-	ld b, d
-	ld de, Unknown_91e9c
-	ld hl, Sprites
-.asm_91e70
-	ld a, [de]
-	cp $80
-	jr z, .asm_91e91
-
-	add b
-	ld [hli], a
-	inc de
-
-	ld a, [de]
-	add c
-	ld [hli], a
-	inc de
-
-	ld a, [de]
-	add $78
-	ld [hli], a
-	inc de
-
-	push bc
-	ld c, 0
-	ld a, [PlayerGender]
-	bit 0, a
-	jr z, .asm_91e8c
-	inc c
-.asm_91e8c
-	ld a, c
-	ld [hli], a
-	pop bc
-
-	jr .asm_91e70
-
-.asm_91e91
-	ld hl, Sprites + $10
-	ld bc, SpritesEnd - (Sprites + $10)
-	xor a
-	call ByteFill
-	ret
-; 91e9c
-
-Unknown_91e9c: ; 91e9c
-	db -8, -8,  0
-	db -8,  0,  1
-	db  0, -8,  2
-	db  0,  0,  3
-	db $80 ; terminator
-; 91ea9
-
-Function91ea9: ; 91ea9
-	ld a, [wd002]
-	cp FAST_SHIP
-	jr z, .johto
-	cp KANTO_LANDMARK
-	jr c, .johto
-
-.kanto
-	ld a, [wd003]
-	and a
-	jr z, .clear
-	jr .ok
-
-.johto
-	ld a, [wd003]
-	and a
-	jr nz, .clear
-
-.ok
-	and a
-	ret
-
-.clear
-	ld hl, Sprites
-	ld bc, SpritesEnd - Sprites
-	xor a
-	call ByteFill
-	scf
-	ret
-; 91ed0
-
-Function91ed0: ; 91ed0
-	ld a, [wd002]
-	cp FAST_SHIP
-	jr z, .asm_91ede
-	callba GetPlayerIcon
-	ret
-
-.asm_91ede
-	ld de, FastShipGFX
-	ld b, BANK(FastShipGFX)
-	ret
-; 91ee4
-
-TownMapBGUpdate: ; 91ee4
-; Update BG Map tiles and attributes
-
-; BG Map address
-	ld a, l
-	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
-	ld de, JohtoMap
-	jr FillTownMap
-
-FillKantoMap: ; 91f04
-	ld de, KantoMap
-
-FillTownMap: ; 91f07
-	hlcoord 0, 0
-.loop
-	ld a, [de]
-	cp $ff
-	ret z
-	ld a, [de]
-	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, 360
-.loop
-; 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
-	ld a, h
-	adc 0
-	ld h, a
-	ld a, [hl]
-	and %111
-	jr .update
-
-.odd
-; ...and odd ids take the top.
-	add l
-	ld l, a
-	ld a, h
-	adc 0
-	ld h, a
-	ld a, [hl]
-	swap a
-	and %111
-	jr .update
-
-.pal0
-	xor a
-
-.update
-	pop hl
-	ld [de], a
-	inc de
-	dec bc
-	ld a, b
-	or c
-	jr nz, .loop
-	ret
-
-TownMapPalMap:
-	db $11, $21, $22, $00, $11, $13, $54, $54, $11, $21, $22, $00
-	db $11, $10, $01, $00, $11, $21, $22, $00, $00, $00, $00, $00
-	db $00, $00, $44, $04, $00, $00, $00, $00, $33, $33, $33, $33
-	db $33, $33, $33, $03, $33, $33, $33, $33, $00, $00, $00, $00
-; 91f7b
-
-TownMapMon: ; 91f7b
-; Draw the FlyMon icon at town map location in
-
-; Get FlyMon species
-	ld a, [CurPartyMon]
-	ld hl, PartySpecies
-	ld e, a
-	ld d, $0
-	add hl, de
-	ld a, [hl]
-	ld [wd265], a
-
-; Get FlyMon icon
-	ld e, 8 ; starting tile in VRAM
-	callba GetSpeciesIcon
-
-; Animation/palette
-	ld de, 0
-	ld a, $0
-	call Function3b2a
-
-	ld hl, 3
-	add hl, bc
-	ld [hl], 8
-	ld hl, 2
-	add hl, bc
-	ld [hl], 0
-	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
-	ld d, h
-	ld e, l
-	ld hl, VTiles0 tile $14
-	ld c, 4 ; # tiles
-	ld a, BANK(ChrisSpriteGFX) ; does nothing
-	call Request2bpp
-
-; Animation/palette
-	ld de, 0
-	ld b, $0a ; Male
-	ld a, [PlayerGender]
-	bit 0, a
-	jr z, .asm_91fd3
-	ld b, $1e ; Female
-.asm_91fd3
-	ld a, b
-	call Function3b2a
-
-	ld hl, $3
-	add hl, bc
-	ld [hl], $10
-
-	pop af
-	ld e, a
-	push bc
-	callba GetLandmarkCoords
-	pop bc
-
-	ld hl, 4
-	add hl, bc
-	ld [hl], e
-	ld hl, 5
-	add hl, bc
-	ld [hl], d
-	ret
-; 0x91ff2
-
-Function91ff2: ; 91ff2
-	ld hl, TownMapGFX
-	ld de, VTiles2
-	lb bc, BANK(TownMapGFX), $30
-	call DecompressRequest2bpp
-	ret
-; 91fff
-
-
-JohtoMap: ; 91fff
-INCBIN "gfx/misc/johto.bin"
-; 92168
-
-KantoMap: ; 92168
-INCBIN "gfx/misc/kanto.bin"
-; 922d1
-
-
-GFX_922d1: ; 922d1
-INCBIN "gfx/unknown/0922d1.2bpp"
-GFX_922e1: ; 922e1
-INCBIN "gfx/unknown/0922e1.2bpp"
-GFX_92301: ; 92301
-INCBIN "gfx/unknown/092301.2bpp"
--- /dev/null
+++ b/engine/intro_menu.asm
@@ -1,0 +1,1427 @@
+_MainMenu: ; 5ae8
+	ld de, MUSIC_NONE
+	call PlayMusic
+	call DelayFrame
+	ld de, MUSIC_MAIN_MENU
+	ld a, e
+	ld [wMapMusic], a
+	call PlayMusic
+	callba MainMenu
+	jp Function6219
+; 5b04
+
+; unreferenced
+	ret
+; 5b05
+
+PrintDayOfWeek: ; 5b05
+	push de
+	ld hl, .Days
+	ld a, b
+	call GetNthString
+	ld d, h
+	ld e, l
+	pop hl
+	call PlaceString
+	ld h, b
+	ld l, c
+	ld de, .Day
+	call PlaceString
+	ret
+; 5b1c
+
+.Days ; 5b1c
+	db "SUN@"
+	db "MON@"
+	db "TUES@"
+	db "WEDNES@"
+	db "THURS@"
+	db "FRI@"
+	db "SATUR@"
+; 5b40
+
+.Day ; 5b40
+	db "DAY@"
+; 5b44
+
+NewGame_ClearTileMapEtc: ; 5b44
+	xor a
+	ld [hMapAnims], a
+	call ClearTileMap
+	call LoadFontsExtra
+	call LoadStandardFont
+	call ResetTextRelatedRAM
+	ret
+; 5b54
+
+MysteryGift: ; 5b54
+	call UpdateTime
+	callba DoMysteryGiftIfDayHasPassed
+	callba DoMysteryGift
+	ret
+; 5b64
+
+OptionsMenu: ; 5b64
+	callba _OptionsMenu
+	ret
+; 5b6b
+
+NewGame: ; 5b6b
+	xor a
+	ld [wc2cc], a
+	call ResetWRAM
+	call NewGame_ClearTileMapEtc
+	call AreYouABoyOrAreYouAGirl
+	call OakSpeech
+	call InitializeWorld
+	ld a, 1
+	ld [wPreviousLandmark], a
+
+	ld a, SPAWN_HOME
+	ld [DefaultSpawnpoint], a
+
+	ld a, MAPSETUP_WARP
+	ld [hMapEntryMethod], a
+	jp FinishContinueFunction
+; 5b8f
+
+AreYouABoyOrAreYouAGirl: ; 5b8f
+	callba Function10632f ; some mobile stuff
+	jr c, .ok
+	callba InitGender
+	ret
+
+.ok
+	ld c, 0
+	callba InitMobileProfile ; mobile
+	ret
+; 5ba7
+
+ResetWRAM: ; 5ba7
+	xor a
+	ld [hBGMapMode], a
+	call _ResetWRAM
+	ret
+; 5bae
+
+_ResetWRAM: ; 5bae
+
+	ld hl, Sprites
+	ld bc, Options - Sprites
+	xor a
+	call ByteFill
+
+	ld hl, wd000
+	ld bc, wGameData - wd000
+	xor a
+	call ByteFill
+
+	ld hl, wGameData
+	ld bc, wGameDataEnd - wGameData
+	xor a
+	call ByteFill
+
+	ld a, [rLY]
+	ld [hSecondsBackup], a
+	call DelayFrame
+	ld a, [hRandomSub]
+	ld [PlayerID], a
+
+	ld a, [rLY]
+	ld [hSecondsBackup], a
+	call DelayFrame
+	ld a, [hRandomAdd]
+	ld [PlayerID + 1], a
+
+	call Random
+	ld [wSecretID], a
+	call DelayFrame
+	call Random
+	ld [wSecretID + 1], a
+
+	ld hl, PartyCount
+	call InitList
+
+	xor a
+	ld [wCurBox], a
+	ld [wSavedAtLeastOnce], a
+
+	call SetDefaultBoxNames
+
+	ld a, BANK(sBoxCount)
+	call GetSRAMBank
+	ld hl, sBoxCount
+	call InitList
+	call CloseSRAM
+
+	ld hl, NumItems
+	call InitList
+
+	ld hl, NumKeyItems
+	call InitList
+
+	ld hl, NumBalls
+	call InitList
+
+	ld hl, PCItems
+	call InitList
+
+	xor a
+	ld [wRoamMon1Species], a
+	ld [wRoamMon2Species], a
+	ld [wRoamMon3Species], a
+	ld a, -1
+	ld [wRoamMon1MapGroup], a
+	ld [wRoamMon2MapGroup], a
+	ld [wRoamMon3MapGroup], a
+	ld [wRoamMon1MapNumber], a
+	ld [wRoamMon2MapNumber], a
+	ld [wRoamMon3MapNumber], a
+
+	ld a, BANK(sMysteryGiftItem)
+	call GetSRAMBank
+	ld hl, sMysteryGiftItem
+	xor a
+	ld [hli], a
+	dec a
+	ld [hl], a
+	call CloseSRAM
+
+	call LoadOrRegenerateLuckyIDNumber
+	call InitializeMagikarpHouse
+
+	xor a
+	ld [MonType], a
+
+	ld [JohtoBadges], a
+	ld [KantoBadges], a
+
+	ld [Coins], a
+	ld [Coins + 1], a
+
+START_MONEY EQU 3000
+
+IF START_MONEY / $10000
+	ld a, START_MONEY / $10000
+ENDC
+	ld [Money], a
+	ld a, START_MONEY / $100 % $100
+	ld [Money + 1], a
+	ld a, START_MONEY % $100
+	ld [Money + 2], a
+
+	xor a
+	ld [wdc17], a
+
+	ld hl, wdc19
+	ld [hl], 2300 / $10000
+	inc hl
+	ld [hl], 2300 / $100 % $100
+	inc hl
+	ld [hl], 2300 % $100
+
+	call InitializeNPCNames
+
+	callba InitDecorations
+
+	callba DeletePartyMonMail
+
+	callba DeleteMobileEventIndex
+
+	call ResetGameTime
+	ret
+; 5ca1
+
+InitList: ; 5ca1
+; Loads 0 in the count and -1 in the first item or mon slot.
+	xor a
+	ld [hli], a
+	dec a
+	ld [hl], a
+	ret
+; 5ca6
+
+SetDefaultBoxNames: ; 5ca6
+	ld hl, wBoxNames
+	ld c, 0
+.loop
+	push hl
+	ld de, .Box
+	call CopyName2
+	dec hl
+	ld a, c
+	inc a
+	cp 10
+	jr c, .less
+	sub 10
+	ld [hl], "1"
+	inc hl
+
+.less
+	add "0"
+	ld [hli], a
+	ld [hl], "@"
+	pop hl
+	ld de, 9
+	add hl, de
+	inc c
+	ld a, c
+	cp NUM_BOXES
+	jr c, .loop
+	ret
+
+.Box
+	db "BOX@"
+; 5cd3
+
+InitializeMagikarpHouse: ; 5cd3
+	ld hl, wBestMagikarpLengthFeet
+	ld a, $3
+	ld [hli], a
+	ld a, $6
+	ld [hli], a
+	ld de, .Ralph
+	call CopyName2
+	ret
+; 5ce3
+
+.Ralph ; 5ce3
+	db "RALPH@"
+; 5ce9
+
+InitializeNPCNames: ; 5ce9
+	ld hl, .Rival
+	ld de, RivalName
+	call .Copy
+
+	ld hl, .Mom
+	ld de, MomsName
+	call .Copy
+
+	ld hl, .Red
+	ld de, RedsName
+	call .Copy
+
+	ld hl, .Green
+	ld de, GreensName
+
+.Copy
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	ret
+
+.Rival  db "???@"
+.Red    db "RED@"
+.Green  db "GREEN@"
+.Mom    db "MOM@"
+; 5d23
+
+InitializeWorld: ; 5d23
+	call ShrinkPlayer
+	callba GetSpawnCoord
+	callba _InitializeStartDay
+	ret
+; 5d33
+
+LoadOrRegenerateLuckyIDNumber: ; 5d33
+	ld a, BANK(sLuckyIDNumber)
+	call GetSRAMBank
+	ld a, [CurDay]
+	inc a
+	ld b, a
+	ld a, [sLuckyNumberDay]
+	cp b
+	ld a, [sLuckyIDNumber + 1]
+	ld c, a
+	ld a, [sLuckyIDNumber]
+	jr z, .skip
+	ld a, b
+	ld [sLuckyNumberDay], a
+	call Random
+	ld c, a
+	call Random
+
+.skip
+	ld [wLuckyIDNumber], a
+	ld [sLuckyIDNumber], a
+	ld a, c
+	ld [wLuckyIDNumber + 1], a
+	ld [sLuckyIDNumber + 1], a
+	jp CloseSRAM
+; 5d65
+
+Continue: ; 5d65
+	callba TryLoadSaveFile
+	jr c, .FailToLoad
+	callba Function150b9
+	call LoadStandardMenuDataHeader
+	call DisplaySaveInfoOnContinue
+	ld a, $1
+	ld [hBGMapMode], a
+	ld c, 20
+	call DelayFrames
+	call ConfirmContinue
+	jr nc, .Check1Pass
+	call WriteBackup
+	jr .FailToLoad
+
+.Check1Pass
+	call Continue_CheckRTC_RestartClock
+	jr nc, .Check2Pass
+	call WriteBackup
+	jr .FailToLoad
+
+.Check2Pass
+	ld a, $8
+	ld [MusicFade], a
+	ld a, MUSIC_NONE % $100
+	ld [MusicFadeIDLo], a
+	ld a, MUSIC_NONE / $100
+	ld [MusicFadeIDHi], a
+	call ClearBGPalettes
+	call Continue_MobileAdapterMenu
+	call WriteBackup
+	call ClearTileMap
+	ld c, 20
+	call DelayFrames
+	callba JumpRoamMons
+	callba Function105091 ; Mystery Gift
+	callba Function140ae ; time-related
+	ld a, [wSpawnAfterChampion]
+	cp SPAWN_LANCE
+	jr z, .SpawnAfterE4
+	ld a, MAPSETUP_CONTINUE
+	ld [hMapEntryMethod], a
+	jp FinishContinueFunction
+
+.FailToLoad
+	ret
+
+.SpawnAfterE4
+	ld a, SPAWN_NEW_BARK
+	ld [wd001], a
+	call PostCreditsSpawn
+	jp FinishContinueFunction
+; 5de2
+
+SpawnAfterRed: ; 5de2
+	ld a, SPAWN_MT_SILVER
+	ld [wd001], a
+; 5de7
+
+PostCreditsSpawn: ; 5de7
+	xor a
+	ld [wSpawnAfterChampion], a
+	ld a, MAPSETUP_WARP
+	ld [hMapEntryMethod], a
+	ret
+; 5df0
+
+Continue_MobileAdapterMenu: ; 5df0
+	callba Function10632f ; mobile check
+	ret nc
+	ld hl, wd479
+	bit 1, [hl]
+	ret nz
+	ld a, 5
+	ld [MusicFade], a
+	ld a, MUSIC_MOBILE_ADAPTER_MENU % $100
+	ld [MusicFadeIDLo], a
+	ld a, MUSIC_MOBILE_ADAPTER_MENU / $100
+	ld [MusicFadeIDHi], a
+	ld c, 20
+	call DelayFrames
+	ld c, $1
+	callba InitMobileProfile ; mobile
+	callba _SaveData
+	ld a, 8
+	ld [MusicFade], a
+	ld a, MUSIC_NONE % $100
+	ld [MusicFadeIDLo], a
+	ld a, MUSIC_NONE / $100
+	ld [MusicFadeIDHi], a
+	ld c, 35
+	call DelayFrames
+	ret
+; 5e34
+
+ConfirmContinue: ; 5e34
+.loop
+	call DelayFrame
+	call GetJoypad
+	ld hl, hJoyPressed
+	bit 0, [hl]
+	jr nz, .PressA
+	bit 1, [hl]
+	jr z, .loop
+	scf
+	ret
+
+.PressA
+	ret
+; 5e48
+
+Continue_CheckRTC_RestartClock: ; 5e48
+	call CheckRTCStatus
+	and %10000000 ; Day count exceeded 16383
+	jr z, .pass
+	callba RestartClock
+	ld a, c
+	and a
+	jr z, .pass
+	scf
+	ret
+
+.pass
+	xor a
+	ret
+; 5e5d
+
+FinishContinueFunction: ; 5e5d
+.loop
+	xor a
+	ld [wc2c1], a
+	ld [wLinkMode], a
+	ld hl, GameTimerPause
+	set 0, [hl]
+	res 7, [hl]
+	ld hl, wEnteredMapFromContinue
+	set 1, [hl]
+	callba OverworldLoop
+	ld a, [wSpawnAfterChampion]
+	cp SPAWN_RED
+	jr z, .AfterRed
+	jp Reset
+
+.AfterRed
+	call SpawnAfterRed
+	jr .loop
+; 5e85
+
+DisplaySaveInfoOnContinue: ; 5e85
+	call CheckRTCStatus
+	and %10000000
+	jr z, .clock_ok
+	lb de, 4, 8
+	call DisplayContinueDataWithRTCError
+	ret
+
+.clock_ok
+	lb de, 4, 8
+	call DisplayNormalContinueData
+	ret
+; 5e9a
+
+DisplaySaveInfoOnSave: ; 5e9a
+	lb de, 4, 0
+	jr DisplayNormalContinueData
+; 5e9f
+
+DisplayNormalContinueData: ; 5e9f
+	call Continue_LoadMenuHeader
+	call Continue_DisplayBadgesDexPlayerName
+	call Continue_PrintGameTime
+	call LoadFontsExtra
+	call UpdateSprites
+	ret
+; 5eaf
+
+DisplayContinueDataWithRTCError: ; 5eaf
+	call Continue_LoadMenuHeader
+	call Continue_DisplayBadgesDexPlayerName
+	call Continue_UnknownGameTime
+	call LoadFontsExtra
+	call UpdateSprites
+	ret
+; 5ebf
+
+Continue_LoadMenuHeader: ; 5ebf
+	xor a
+	ld [hBGMapMode], a
+	ld hl, .MenuDataHeader_Dex
+	ld a, [StatusFlags]
+	bit 0, a ; pokedex
+	jr nz, .pokedex_header
+	ld hl, .MenuDataHeader_NoDex
+
+.pokedex_header
+	call Function1e35
+	call MenuBox
+	call Function1c89
+	ret
+; 5ed9
+
+.MenuDataHeader_Dex: ; 5ed9
+	db $40 ; flags
+	db 00, 00 ; start coords
+	db 09, 15 ; end coords
+	dw .MenuData2_Dex
+	db 1 ; default option
+; 5ee1
+
+.MenuData2_Dex: ; 5ee1
+	db $00 ; flags
+	db 4 ; items
+	db "PLAYER@"
+	db "BADGES@"
+	db "#DEX@"
+	db "TIME@"
+; 5efb
+
+.MenuDataHeader_NoDex: ; 5efb
+	db $40 ; flags
+	db 00, 00 ; start coords
+	db 09, 15 ; end coords
+	dw .MenuData2_NoDex
+	db 1 ; default option
+; 5f03
+
+.MenuData2_NoDex: ; 5f03
+	db $00 ; flags
+	db 4 ; items
+	db "PLAYER <PLAYER>@"
+	db "BADGES@"
+	db " @"
+	db "TIME@"
+; 5f1c
+
+
+Continue_DisplayBadgesDexPlayerName: ; 5f1c
+	call MenuBoxCoord2Tile
+	push hl
+	decoord 13, 4, 0
+	add hl, de
+	call Continue_DisplayBadgeCount
+	pop hl
+	push hl
+	decoord 12, 6, 0
+	add hl, de
+	call Continue_DisplayPokedexNumCaught
+	pop hl
+	push hl
+	decoord 8, 2, 0
+	add hl, de
+	ld de, .Player
+	call PlaceString
+	pop hl
+	ret
+
+.Player
+	db "<PLAYER>@"
+; 5f40
+
+Continue_PrintGameTime: ; 5f40
+	decoord 9, 8, 0
+	add hl, de
+	call Continue_DisplayGameTime
+	ret
+; 5f48
+
+Continue_UnknownGameTime: ; 5f48
+	decoord 9, 8, 0
+	add hl, de
+	ld de, .three_question_marks
+	call PlaceString
+	ret
+
+.three_question_marks
+	db " ???@"
+; 5f58
+
+Continue_DisplayBadgeCount: ; 5f58
+	push hl
+	ld hl, JohtoBadges
+	ld b, 2
+	call CountSetBits
+	pop hl
+	ld de, wd265
+	lb bc, 1, 2
+	jp PrintNum
+; 5f6b
+
+Continue_DisplayPokedexNumCaught: ; 5f6b
+	ld a, [StatusFlags]
+	bit 0, a
+	ret z
+	push hl
+	ld hl, PokedexCaught
+IF NUM_POKEMON % 8
+	ld b, NUM_POKEMON / 8 + 1
+ELSE
+	ld b, NUM_POKEMON / 8
+ENDC
+	call CountSetBits
+	pop hl
+	ld de, wd265
+	lb bc, 1, 3
+	jp PrintNum
+; 5f84
+
+Continue_DisplayGameTime: ; 5f84
+	ld de, GameTimeHours
+	lb bc, 2, 3
+	call PrintNum
+	ld [hl], "<COLON>"
+	inc hl
+	ld de, GameTimeMinutes
+	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+	jp PrintNum
+; 5f99
+
+
+OakSpeech: ; 0x5f99
+	callba InitClock
+	call RotateFourPalettesLeft
+	call ClearTileMap
+
+	ld de, MUSIC_ROUTE_30
+	call PlayMusic
+
+	call RotateFourPalettesRight
+	call RotateThreePalettesRight
+	xor a
+	ld [CurPartySpecies], a
+	ld a, POKEMON_PROF
+	ld [TrainerClass], a
+	call Intro_PrepTrainerPic
+
+	ld b, SCGB_1C
+	call GetSGBLayout
+	call Intro_RotatePalettesLeftFrontpic
+
+	ld hl, OakText1
+	call PrintText
+	call RotateThreePalettesRight
+	call ClearTileMap
+
+	ld a, WOOPER
+	ld [CurSpecies], a
+	ld [CurPartySpecies], a
+	call GetBaseData
+
+	hlcoord 6, 4
+	call PrepMonFrontpic
+
+	xor a
+	ld [TempMonDVs], a
+	ld [TempMonDVs + 1], a
+
+	ld b, SCGB_1C
+	call GetSGBLayout
+	call Intro_WipeInFrontpic
+
+	ld hl, OakText2
+	call PrintText
+	ld hl, OakText4
+	call PrintText
+	call RotateThreePalettesRight
+	call ClearTileMap
+
+	xor a
+	ld [CurPartySpecies], a
+	ld a, POKEMON_PROF
+	ld [TrainerClass], a
+	call Intro_PrepTrainerPic
+
+	ld b, SCGB_1C
+	call GetSGBLayout
+	call Intro_RotatePalettesLeftFrontpic
+
+	ld hl, OakText5
+	call PrintText
+	call RotateThreePalettesRight
+	call ClearTileMap
+
+	xor a
+	ld [CurPartySpecies], a
+	callba DrawIntroPlayerPic
+
+	ld b, SCGB_1C
+	call GetSGBLayout
+	call Intro_RotatePalettesLeftFrontpic
+
+	ld hl, OakText6
+	call PrintText
+	call NamePlayer
+	ld hl, OakText7
+	call PrintText
+	ret
+
+OakText1: ; 0x6045
+	text_jump _OakText1
+	db "@"
+
+OakText2: ; 0x604a
+	text_jump _OakText2
+	start_asm
+	ld a, WOOPER
+	call PlayCry
+	call WaitSFX
+	ld hl, OakText3
+	ret
+
+OakText3: ; 0x605b
+	text_jump _OakText3
+	db "@"
+
+OakText4: ; 0x6060
+	text_jump _OakText4
+	db "@"
+
+OakText5: ; 0x6065
+	text_jump _OakText5
+	db "@"
+
+OakText6: ; 0x606a
+	text_jump _OakText6
+	db "@"
+
+OakText7: ; 0x606f
+	text_jump _OakText7
+	db "@"
+
+NamePlayer: ; 0x6074
+	callba MovePlayerPicRight
+	callba ShowPlayerNamingChoices
+	ld a, [MenuSelection2]
+	dec a
+	jr z, .NewName
+	call StorePlayerName
+	callba Function8c1d
+	callba MovePlayerPicLeft
+	ret
+
+.NewName
+	ld b, 1
+	ld de, PlayerName
+	callba NamingScreen
+
+	call RotateThreePalettesRight
+	call ClearTileMap
+
+	call LoadFontsExtra
+	call WaitBGMap
+
+	xor a
+	ld [CurPartySpecies], a
+	callba DrawIntroPlayerPic
+
+	ld b, SCGB_1C
+	call GetSGBLayout
+	call RotateThreePalettesLeft
+
+	ld hl, PlayerName
+	ld de, .Chris
+	ld a, [PlayerGender]
+	bit 0, a
+	jr z, .Male
+	ld de, .Kris
+.Male
+	call InitName
+	ret
+
+.Chris
+	db "CHRIS@@@@@@"
+.Kris
+	db "KRIS@@@@@@@"
+; 60e9
+
+Function60e9: ; Unreferenced
+	call LoadMenuDataHeader
+	call InterpretMenu2
+	ld a, [MenuSelection2]
+	dec a
+	call CopyNameFromMenu
+	call WriteBackup
+	ret
+; 60fa
+
+StorePlayerName: ; 60fa
+	ld a, "@"
+	ld bc, NAME_LENGTH
+	ld hl, PlayerName
+	call ByteFill
+	ld hl, PlayerName
+	ld de, StringBuffer2
+	call CopyName2
+	ret
+; 610f
+
+ShrinkPlayer: ; 610f
+
+	ld a, [hROMBank]
+	push af
+
+	ld a, 0 << 7 | 32 ; fade out
+	ld [MusicFade], a
+	ld de, MUSIC_NONE
+	ld a, e
+	ld [MusicFadeIDLo], a
+	ld a, d
+	ld [MusicFadeIDHi], a
+
+	ld de, SFX_ESCAPE_ROPE
+	call PlaySFX
+	pop af
+	rst Bankswitch
+
+	ld c, 8
+	call DelayFrames
+
+	ld hl, Shrink1Pic
+	ld b, BANK(Shrink1Pic)
+	call ShrinkFrame
+
+	ld c, 8
+	call DelayFrames
+
+	ld hl, Shrink2Pic
+	ld b, BANK(Shrink2Pic)
+	call ShrinkFrame
+
+	ld c, 8
+	call DelayFrames
+
+	hlcoord 6, 5
+	ld b, 7
+	ld c, 7
+	call ClearBox
+
+	ld c, 3
+	call DelayFrames
+
+	call Intro_PlacePlayerSprite
+	call LoadFontsExtra
+
+	ld c, 50
+	call DelayFrames
+
+	call RotateThreePalettesRight
+	call ClearTileMap
+	ret
+; 616a
+
+Intro_RotatePalettesLeftFrontpic: ; 616a
+	ld hl, IntroFadePalettes
+	ld b, IntroFadePalettesEnd - IntroFadePalettes
+.loop
+	ld a, [hli]
+	call DmgToCgbBGPals
+	ld c, 10
+	call DelayFrames
+	dec b
+	jr nz, .loop
+	ret
+; 617c
+
+IntroFadePalettes: ; 0x617c
+	db %01010100
+	db %10101000
+	db %11111100
+	db %11111000
+	db %11110100
+	db %11100100
+IntroFadePalettesEnd
+; 6182
+
+Intro_WipeInFrontpic: ; 6182
+	ld a, $77
+	ld [hWX], a
+	call DelayFrame
+	ld a, %11100100
+	call DmgToCgbBGPals
+.loop
+	call DelayFrame
+	ld a, [hWX]
+	sub $8
+	cp -1
+	ret z
+	ld [hWX], a
+	jr .loop
+; 619c
+
+Intro_PrepTrainerPic: ; 619c
+	ld de, VTiles2
+	callba GetTrainerPic
+	xor a
+	ld [hFillBox], a
+	hlcoord 6, 4
+	lb bc, 7, 7
+	predef FillBox
+	ret
+; 61b4
+
+ShrinkFrame: ; 61b4
+	ld de, VTiles2
+	ld c, $31
+	predef DecompressPredef
+	xor a
+	ld [hFillBox], a
+	hlcoord 6, 4
+	lb bc, 7, 7
+	predef FillBox
+	ret
+; 61cd
+
+Intro_PlacePlayerSprite: ; 61cd
+
+	callba GetPlayerIcon
+	ld c, $c
+	ld hl, VTiles0
+	call Request2bpp
+
+	ld hl, Sprites
+	ld de, .sprites
+	ld a, [de]
+	inc de
+
+	ld c, a
+.loop
+	ld a, [de]
+	inc de
+	ld [hli], a
+	ld a, [de]
+	inc de
+	ld [hli], a
+	ld a, [de]
+	inc de
+	ld [hli], a
+
+	ld b, 0
+	ld a, [PlayerGender]
+	bit 0, a
+	jr z, .male
+	ld b, 1
+.male
+	ld a, b
+
+	ld [hli], a
+	dec c
+	jr nz, .loop
+	ret
+; 61fe
+
+.sprites ; 61fe
+	db 4
+	db $4c, $48, 0
+	db $4c, $50, 1
+	db $54, $48, 2
+	db $54, $50, 3
+; 620b
+
+
+Function620b: ; 620b
+	callab Functione4579
+	jr c, Function6219
+	callba CrystalIntro
+
+Function6219: ; 6219
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+
+	call .TitleScreen
+	call DelayFrame
+.loop
+	call Function627b
+	jr nc, .loop
+
+	call ClearSprites
+	call ClearBGPalettes
+
+	pop af
+	ld [rSVBK], a
+
+	ld hl, rLCDC
+	res 2, [hl]
+	call ClearScreen
+	call Function3200
+	xor a
+	ld [hLCDStatCustom], a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	ld b, SCGB_08
+	call GetSGBLayout
+	call UpdateTimePals
+	ld a, [wcf64]
+	cp $5
+	jr c, .ok
+	xor a
+.ok
+	ld e, a
+	ld d, 0
+	ld hl, .jumptable
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 626a
+
+.jumptable
+	dw _MainMenu
+	dw Function6389
+	dw Function620b
+	dw Function620b
+	dw ResetClock
+; 6274
+
+
+.TitleScreen: ; 6274
+	callba _TitleScreen
+	ret
+; 627b
+
+Function627b: ; 627b
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .done_title
+	call TitleScreenScene
+	callba SuicuneFrameIterator
+	call DelayFrame
+	and a
+	ret
+
+.done_title
+	scf
+	ret
+; 6292
+
+Function6292: ; 6292 ; unreferenced
+	ld a, [hVBlankCounter]
+	and $7
+	ret nz
+	ld hl, LYOverrides + $5f
+	ld a, [hl]
+	dec a
+	ld bc, 2 * SCREEN_WIDTH
+	call ByteFill
+	ret
+; 62a3
+
+TitleScreenScene: ; 62a3
+	ld e, a
+	ld d, 0
+	ld hl, .scenes
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 62af
+
+.scenes
+	dw TitleScreenEntrance
+	dw TitleScreenTimer
+	dw TitleScreenMain
+	dw TitleScreenEnd
+; 62b7
+
+Function62b7: ; Unreferenced
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+; 62bc
+
+
+TitleScreenEntrance: ; 62bc
+
+; Animate the logo:
+; Move each line by 4 pixels until our count hits 0.
+	ld a, [hSCX]
+	and a
+	jr z, .done
+	sub 4
+	ld [hSCX], a
+
+; Lay out a base (all lines scrolling together).
+	ld e, a
+	ld hl, LYOverrides
+	ld bc, 8 * 10 ; logo height
+	call ByteFill
+
+; Reversed signage for every other line's position.
+; This is responsible for the interlaced effect.
+	ld a, e
+	xor -1
+	inc a
+
+	ld b, 8 * 10 / 2 ; logo height / 2
+	ld hl, LYOverrides + 1
+.loop
+	ld [hli], a
+	inc hl
+	dec b
+	jr nz, .loop
+
+	callba AnimateTitleCrystal
+	ret
+
+.done
+; Next scene
+	ld hl, wJumptableIndex
+	inc [hl]
+	xor a
+	ld [hLCDStatCustom], a
+
+; Play the title screen music.
+	ld de, MUSIC_TITLE
+	call PlayMusic
+
+	ld a, $88
+	ld [hWY], a
+	ret
+; 62f6
+
+
+TitleScreenTimer: ; 62f6
+
+; Next scene
+	ld hl, wJumptableIndex
+	inc [hl]
+
+; Start a timer
+	ld hl, wcf65
+	ld de, $1140 ; 73.6 seconds
+	ld [hl], e
+	inc hl
+	ld [hl], d
+	ret
+; 6304
+
+TitleScreenMain: ; 6304
+
+; Run the timer down.
+	ld hl, wcf65
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	ld a, e
+	or d
+	jr z, .end
+
+	dec de
+	ld [hl], d
+	dec hl
+	ld [hl], e
+
+; Save data can be deleted by pressing Up + B + Select.
+	call GetJoypad
+	ld hl, hJoyDown
+	ld a, [hl]
+	and D_UP + B_BUTTON + SELECT
+	cp  D_UP + B_BUTTON + SELECT
+	jr z, .delete_save_data
+
+; To bring up the clock reset dialog:
+
+; Hold Down + B + Select to initiate the sequence.
+	ld a, [$ffeb]
+	cp $34
+	jr z, .check_clock_reset
+
+	ld a, [hl]
+	and D_DOWN + B_BUTTON + SELECT
+	cp  D_DOWN + B_BUTTON + SELECT
+	jr nz, .check_start
+
+	ld a, $34
+	ld [$ffeb], a
+	jr .check_start
+
+; Keep Select pressed, and hold Left + Up.
+; Then let go of Select.
+.check_clock_reset
+	bit 2, [hl] ; SELECT
+	jr nz, .check_start
+
+	xor a
+	ld [$ffeb], a
+
+	ld a, [hl]
+	and D_LEFT + D_UP
+	cp  D_LEFT + D_UP
+	jr z, .clock_reset
+
+; Press Start or A to start the game.
+.check_start
+	ld a, [hl]
+	and START | A_BUTTON
+	jr nz, .incave
+	ret
+
+.incave
+	ld a, 0
+	jr .done
+
+.delete_save_data
+	ld a, 1
+
+.done
+	ld [wcf64], a
+
+; Return to the intro sequence.
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+.end
+; Next scene
+	ld hl, wJumptableIndex
+	inc [hl]
+
+; Fade out the title screen music
+	xor a
+	ld [MusicFadeIDLo], a
+	ld [MusicFadeIDHi], a
+	ld hl, MusicFade
+	ld [hl], 8 ; 1 second
+
+	ld hl, wcf65
+	inc [hl]
+	ret
+
+.clock_reset
+	ld a, 4
+	ld [wcf64], a
+
+; Return to the intro sequence.
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+; 6375
+
+TitleScreenEnd: ; 6375
+
+; Wait until the music is done fading.
+
+	ld hl, wcf65
+	inc [hl]
+
+	ld a, [MusicFade]
+	and a
+	ret nz
+
+	ld a, 2
+	ld [wcf64], a
+
+; Back to the intro.
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+; 6389
+
+Function6389: ; 6389
+	callba Function4d54c
+	jp Init
+; 6392
+
+ResetClock: ; 6392
+	callba _ResetClock
+	jp Init
+; 639b
+
+Function639b: ; unreferenced
+	; If bit 0 or 1 of [wcf65] is set, we don't need to be here.
+	ld a, [wcf65]
+	and $3
+	ret nz
+	ld bc, SpriteAnim10
+	ld hl, SpriteAnim10FrameIndex - SpriteAnim10
+	add hl, bc ; over-the-top compicated way to load wc3ae into hl
+	ld l, [hl]
+	ld h, 0
+rept 2
+	add hl, hl
+endr
+	ld de, Data63ca
+	add hl, de
+	; If bit 2 of [wcf65] is set, get the second dw; else, get the first dw
+	ld a, [wcf65]
+	and %00000100
+rept 2
+	srl a
+endr
+	ld e, a
+	ld d, 0
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	and a
+	ret z
+	ld e, a
+	ld d, [hl]
+	ld a, SPRITE_ANIM_INDEX_01
+	call _InitSpriteAnimStruct
+	ret
+; 63ca
+
+Data63ca: ; 63ca
+; frame 0 y, x; frame 1 y, x
+	db $5c, $50, $00, $00
+	db $5c, $68, $5c, $58
+	db $5c, $68, $5c, $78
+	db $5c, $88, $5c, $78
+	db $00, $00, $5c, $78
+	db $00, $00, $5c, $58
+; 63e2
+
+Copyright: ; 63e2
+	call ClearTileMap
+	call LoadFontsExtra
+	ld de, CopyrightGFX
+	ld hl, VTiles2 tile $60
+	lb bc, BANK(CopyrightGFX), $1d
+	call Request2bpp
+	hlcoord 2, 7
+	ld de, CopyrightString
+	jp PlaceString
+; 63fd
+
+CopyrightString: ; 63fd
+	; ©1995-2001 Nintendo
+	db $60, $61, $62, $63, $64, $65, $66
+	db $67, $68, $69, $6a, $6b, $6c
+
+	db $4e
+
+	; ©1995-2001 Creatures inc.
+	db $60, $61, $62, $63, $64, $65, $66, $6d
+	db $6e, $6f, $70, $71, $72, $7a, $7b, $7c
+
+	db $4e
+
+	; ©1995-2001 GAME FREAK inc.
+	db $60, $61, $62, $63, $64, $65, $66, $73, $74
+	db $75, $76, $77, $78, $79, $7a, $7b, $7c
+
+	db "@"
+; 642e
+
+GameInit:: ; 642e
+	callba TryLoadSaveData
+	call ResetTextRelatedRAM
+	call ClearBGPalettes
+	call ClearTileMap
+	ld a, VBGMap0 / $100
+	ld [hBGMapAddress + 1], a
+	xor a
+	ld [hBGMapAddress], a
+	ld [hJoyDown], a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $90
+	ld [hWY], a
+	call WaitBGMap
+	jp Function620b
+; 6454
--- a/engine/link.asm
+++ b/engine/link.asm
@@ -40,7 +40,7 @@
 	call Function28499
 	call Function28434
 	xor a
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	call Function87d
 	ld a, [hLinkPlayerNumber]
 	cp $2
@@ -83,8 +83,8 @@
 	ld a, $fe
 	ld [de], a
 	ld hl, wc608
-	ld de, wc6d0
-	ld bc, $c8
+	ld de, wPlayerTrademonSpecies
+	ld bc, wPlayerTrademonSpecies - wc608
 	call Function75f
 	xor a
 	ld [rIF], a
@@ -105,7 +105,7 @@
 	ld de, OverworldMap
 	ld bc, $1a2
 	call Function2879e
-	ld de, wc6d0
+	ld de, wPlayerTrademonSpecies
 	ld hl, wc813
 	ld c, $2
 .asm_280fe
@@ -226,7 +226,7 @@
 	ld a, $fe
 	ld [de], a
 	ld hl, wc608
-	ld de, wc6d0
+	ld de, wPlayerTrademonSpecies
 	ld bc, $c8
 	call Function75f
 	ld a, [wLinkMode]
@@ -250,7 +250,7 @@
 	ld de, OverworldMap
 	ld bc, $1b9
 	call Function2879e
-	ld de, wc6d0
+	ld de, wPlayerTrademonSpecies
 	ld hl, wc813
 	ld c, $2
 .asm_28224
@@ -363,23 +363,23 @@
 .asm_282cc
 	push bc
 	push de
-	callba Function1de5c8
+	callba IsMailEuropean
 	ld a, c
 	or a
-	jr z, .asm_282ee
+	jr z, .next
 	sub $3
-	jr nc, .asm_282e4
-	callba Function1df203
-	jr .asm_282ee
+	jr nc, .skip
+	callba DeutenEnglischenPost
+	jr .next
 
-.asm_282e4
+.skip
 	cp $2
-	jr nc, .asm_282ee
-	callba Function1df220
+	jr nc, .next
+	callba HandleSpanishItalianMail
 
-.asm_282ee
+.next
 	pop de
-	ld hl, $2f
+	ld hl, MAIL_STRUCT_LENGTH
 	add hl, de
 	ld d, h
 	ld e, l
@@ -474,7 +474,7 @@
 	ld b, $a
 .asm_283b7
 	call DelayFrame
-	call Function908
+	call LinkCommunicationsSignalDataReceived
 	dec b
 	jr nz, .asm_283b7
 	xor a
@@ -493,9 +493,9 @@
 	pop hl
 	bccoord 1, 14
 	call PlaceWholeStringInBoxAtOnce
-	call FadeToWhite
+	call RotateThreePalettesRight
 	call ClearScreen
-	ld b, $8
+	ld b, SCGB_08
 	call GetSGBLayout
 	call Function3200
 	ret
@@ -802,64 +802,79 @@
 ; 28595
 
 Function28595: ; 28595
-	ld de, OverworldMap
-	ld a, $fd
-	ld b, $6
+	ld de, wc800
+	ld a, EGG
+	ld b, PARTY_LENGTH
 .loop1
 	ld [de], a
 	inc de
 	dec b
 	jr nz, .loop1
+	; de = $c806
 	ld hl, PlayerName
 	ld bc, NAME_LENGTH
 	call CopyBytes
+	; de = $c811
 	ld hl, PartyCount
-	ld bc, 8
+	ld bc, 1 + PARTY_LENGTH + 1
 	call CopyBytes
+	; de = $c819
 	ld hl, PlayerID
 	ld bc, 2
 	call CopyBytes
+	; de = $c81b
 	ld hl, PartyMon1Species
-	ld bc, $120
+	ld bc, PARTY_LENGTH * PARTYMON_STRUCT_LENGTH
 	call CopyBytes
+	; de = $c93b
 	ld hl, PartyMonOT
-	ld bc, $42
+	ld bc, PARTY_LENGTH * NAME_LENGTH
 	call CopyBytes
+	; de = $c97d
 	ld hl, PartyMonNicknames
-	ld bc, $42
+	ld bc, PARTY_LENGTH * PKMN_NAME_LENGTH
 	call CopyBytes
+	; de = $c9bf
+
+; Okay, we did all that.  Now, are we in the trade center?
 	ld a, [wLinkMode]
 	cp LINK_TRADECENTER
 	ret nz
+
+; Fill 5 bytes at wc9f4 with $20
 	ld de, wc9f4
 	ld a, $20
 	call Function28682
-	ld a, BANK(sPartyScratch1)
+
+; Copy all the mail messages to wc9f9
+	ld a, BANK(sPartyMail)
 	call GetSRAMBank
-	ld hl, sPartyScratch1
+	ld hl, sPartyMail
 	ld b, PARTY_LENGTH
 .loop2
 	push bc
-	ld bc, $21
+	ld bc, MAIL_MSG_LENGTH + 1
 	call CopyBytes
-	ld bc, $e
+	ld bc, sPartyMon1MailEnd - sPartyMon1MailAuthor
 	add hl, bc
 	pop bc
 	dec b
 	jr nz, .loop2
-	ld hl, sPartyScratch1
+; Copy the mail metadata to wcabf
+	ld hl, sPartyMail
 	ld b, PARTY_LENGTH
 .loop3
 	push bc
-	ld bc, $21
+	ld bc, MAIL_MSG_LENGTH + 1
 	add hl, bc
-	ld bc, $e
+	ld bc, sPartyMon1MailEnd - sPartyMon1MailAuthor
 	call CopyBytes
 	pop bc
 	dec b
 	jr nz, .loop3
+
 	ld b, PARTY_LENGTH
-	ld de, sPartyScratch1
+	ld de, sPartyMail
 	ld hl, wc9f9
 .loop4
 	push bc
@@ -866,29 +881,29 @@
 	push hl
 	push de
 	push hl
-	callba Function1de5c8
+	callba IsMailEuropean
 	pop de
 	ld a, c
 	or a
 	jr z, .next
 	sub $3
-	jr nc, .skip
-	callba Function1df1e6
+	jr nc, .italian_spanish
+	callba HandleFrenchGermanMail
 	jr .next
 
-.skip
+.italian_spanish
 	cp $2
 	jr nc, .next
-	callba Function1df220
+	callba HandleSpanishItalianMail
 
 .next
 	pop de
-	ld hl, SCRATCHMON_STRUCT_LENGTH
+	ld hl, MAIL_STRUCT_LENGTH
 	add hl, de
 	ld d, h
 	ld e, l
 	pop hl
-	ld bc, $21
+	ld bc, sPartyMon1MailAuthor - sPartyMon1Mail
 	add hl, bc
 	pop bc
 	dec b
@@ -895,12 +910,12 @@
 	jr nz, .loop4
 	call CloseSRAM
 	ld hl, wc9f9
-	ld bc, $c6
+	ld bc, PARTY_LENGTH * (sPartyMon1MailAuthor - sPartyMon1Mail)
 .loop5
 	ld a, [hl]
 	cp $fe
 	jr nz, .skip2
-	ld [hl], $21
+	ld [hl], sPartyMon1MailAuthor - sPartyMon1Mail
 
 .skip2
 	inc hl
@@ -910,7 +925,7 @@
 	jr nz, .loop5
 	ld hl, wcabf
 	ld de, wcb13
-	ld b, $54
+	ld b, PARTY_LENGTH * (sPartyMon1MailEnd - sPartyMon1MailAuthor)
 	ld c, $0
 .loop6
 	inc c
@@ -1198,7 +1213,7 @@
 	call Function28ef8
 	callba Function16d673
 	xor a
-	ld hl, wcf51
+	ld hl, wOtherPlayerLinkMode
 rept 3
 	ld [hli], a
 endr
@@ -1206,7 +1221,7 @@
 	ld a, $1
 	ld [MenuSelection2], a
 	inc a
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	jp Function2888b
 ; 28803
 
@@ -1363,7 +1378,7 @@
 	hlcoord 0, 15
 	ld b, $1
 	ld c, $12
-	call Function28eef
+	call Predef_LinkTextbox
 	hlcoord 2, 16
 	ld de, String28ab4
 	call PlaceString
@@ -1453,9 +1468,9 @@
 	ld [MenuSelection2], a
 	dec a
 	ld [wd002], a
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	callba Function16d6ce
-	ld a, [wcf51]
+	ld a, [wOtherPlayerLinkMode]
 	cp $f
 	jp z, Function287e3
 	ld [wd003], a
@@ -1468,11 +1483,11 @@
 	jp nc, Function28b87
 	xor a
 	ld [wcf57], a
-	ld [wcf52], a
+	ld [wOtherPlayerLinkAction], a
 	hlcoord 0, 12
 	ld b, $4
 	ld c, $12
-	call Function28eef
+	call Predef_LinkTextbox
 	callba Function4d354
 	ld hl, UnknownText_0x28aaf
 	bccoord 1, 14
@@ -1482,7 +1497,7 @@
 .asm_28a58
 	xor a
 	ld [wcf57], a
-	ld [wcf52], a
+	ld [wOtherPlayerLinkAction], a
 	ld a, [wd003]
 	ld hl, OTPartySpecies
 	ld c, a
@@ -1494,7 +1509,7 @@
 	hlcoord 0, 12
 	ld b, $4
 	ld c, $12
-	call Function28eef
+	call Predef_LinkTextbox
 	callba Function4d354
 	ld hl, UnknownText_0x28ac4
 	bccoord 1, 14
@@ -1504,12 +1519,12 @@
 	hlcoord 0, 12
 	ld b, $4
 	ld c, $12
-	call Function28eef
+	call Predef_LinkTextbox
 	hlcoord 1, 14
 	ld de, String28ece
 	call PlaceString
 	ld a, $1
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	callba Function16d6ce
 	ld c, $64
 	call DelayFrames
@@ -1576,16 +1591,16 @@
 	ld a, $ec
 	ldcoord_a 9, 17
 	ld a, $f
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	callba Function16d6ce
-	ld a, [wcf51]
+	ld a, [wOtherPlayerLinkMode]
 	cp $f
 	jr nz, .asm_28ade
 
 Function28b22: ; 28b22
-	call FadeToWhite
+	call RotateThreePalettesRight
 	call ClearScreen
-	ld b, $8
+	ld b, SCGB_08
 	call GetSGBLayout
 	call Function3200
 	xor a
@@ -1619,7 +1634,7 @@
 ; 28b68
 
 Function28b68: ; 28b68
-	ld a, [wcf51]
+	ld a, [wOtherPlayerLinkMode]
 	hlcoord 6, 9
 	ld bc, SCREEN_WIDTH
 	call AddNTimes
@@ -1647,11 +1662,11 @@
 Function28b87: ; 28b87
 	xor a
 	ld [wcf57], a
-	ld [wcf52], a
+	ld [wOtherPlayerLinkAction], a
 	hlcoord 0, 12
 	ld b, $4
 	ld c, $12
-	call Function28eef
+	call Predef_LinkTextbox
 	callba Function4d354
 	ld a, [wd002]
 	ld hl, PartySpecies
@@ -1680,7 +1695,7 @@
 	hlcoord 10, 7
 	ld b, $3
 	ld c, $7
-	call Function28eef
+	call Predef_LinkTextbox
 	ld de, String28eab
 	hlcoord 12, 8
 	call PlaceString
@@ -1716,11 +1731,11 @@
 
 .asm_28c33
 	ld a, $1
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	hlcoord 0, 12
 	ld b, 4
 	ld c, 18
-	call Function28eef
+	call Predef_LinkTextbox
 	hlcoord 1, 14
 	ld de, String28ece
 	call PlaceString
@@ -1729,15 +1744,15 @@
 
 .asm_28c54
 	ld a, $2
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	callba Function16d6ce
-	ld a, [wcf51]
+	ld a, [wOtherPlayerLinkMode]
 	dec a
 	jr nz, .asm_28c7b
 	hlcoord 0, 12
 	ld b, 4
 	ld c, 18
-	call Function28eef
+	call Predef_LinkTextbox
 	hlcoord 1, 14
 	ld de, String28ece
 	call PlaceString
@@ -1744,15 +1759,15 @@
 	jp Function28ea3
 
 .asm_28c7b
-	ld hl, sPartyScratch1
+	ld hl, sPartyMail
 	ld a, [wd002]
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld bc, MAIL_STRUCT_LENGTH
 	call AddNTimes
-	ld a, BANK(sPartyScratch1)
+	ld a, BANK(sPartyMail)
 	call GetSRAMBank
 	ld d, h
 	ld e, l
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld bc, MAIL_STRUCT_LENGTH
 	add hl, bc
 	ld a, [wd002]
 	ld c, a
@@ -1762,28 +1777,28 @@
 	cp $6
 	jr z, .asm_28ca6
 	push bc
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld bc, MAIL_STRUCT_LENGTH
 	call CopyBytes
 	pop bc
 	jr .asm_28c96
 
 .asm_28ca6
-	ld hl, sPartyScratch1
+	ld hl, sPartyMail
 	ld a, [PartyCount]
 	dec a
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld bc, MAIL_STRUCT_LENGTH
 	call AddNTimes
 	push hl
 	ld hl, wc9f4
 	ld a, [wd003]
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld bc, MAIL_STRUCT_LENGTH
 	call AddNTimes
 	pop de
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld bc, MAIL_STRUCT_LENGTH
 	call CopyBytes
 	call CloseSRAM
 	ld hl, PlayerName
-	ld de, wc6e7
+	ld de, wPlayerTrademonSenderName
 	ld bc, NAME_LENGTH
 	call CopyBytes
 	ld a, [wd002]
@@ -1792,12 +1807,12 @@
 	ld c, a
 	add hl, bc
 	ld a, [hl]
-	ld [wc6d0], a
+	ld [wPlayerTrademonSpecies], a
 	push af
 	ld a, [wd002]
 	ld hl, PartyMonOT
 	call SkipNames
-	ld de, wc6f2
+	ld de, wPlayerTrademonOTName
 	ld bc, NAME_LENGTH
 	call CopyBytes
 	ld hl, PartyMon1ID
@@ -1804,16 +1819,16 @@
 	ld a, [wd002]
 	call GetPartyLocation
 	ld a, [hli]
-	ld [PlayerScreens], a
+	ld [wPlayerTrademonID], a
 	ld a, [hl]
-	ld [EnemyScreens], a
+	ld [wPlayerTrademonID + 1], a
 	ld hl, PartyMon1DVs
 	ld a, [wd002]
 	call GetPartyLocation
 	ld a, [hli]
-	ld [wc6fd], a
+	ld [wPlayerTrademonDVs], a
 	ld a, [hl]
-	ld [wPlayerMinimized], a
+	ld [wPlayerTrademonDVs + 1], a
 	ld a, [wd002]
 	ld hl, PartyMon1Species
 	call GetPartyLocation
@@ -1821,9 +1836,9 @@
 	ld c, l
 	callba GetCaughtGender
 	ld a, c
-	ld [wc701], a
+	ld [wPlayerTrademonCaughtData], a
 	ld hl, wd26b
-	ld de, wc719
+	ld de, wOTTrademonSenderName
 	ld bc, NAME_LENGTH
 	call CopyBytes
 	ld a, [wd003]
@@ -1832,11 +1847,11 @@
 	ld c, a
 	add hl, bc
 	ld a, [hl]
-	ld [wc702], a
+	ld [wOTTrademonSpecies], a
 	ld a, [wd003]
 	ld hl, OTPartyMonOT
 	call SkipNames
-	ld de, wc724
+	ld de, wOTTrademonOTName
 	ld bc, NAME_LENGTH
 	call CopyBytes
 	ld hl, OTPartyMon1ID
@@ -1843,16 +1858,16 @@
 	ld a, [wd003]
 	call GetPartyLocation
 	ld a, [hli]
-	ld [wEnemyWrapCount], a
+	ld [wOTTrademonID], a
 	ld a, [hl]
-	ld [wPlayerCharging], a
+	ld [wOTTrademonID + 1], a
 	ld hl, OTPartyMon1DVs
 	ld a, [wd003]
 	call GetPartyLocation
 	ld a, [hli]
-	ld [wEnemyTrappingMove], a
+	ld [wOTTrademonDVs], a
 	ld a, [hl]
-	ld [wPlayerWrapCount], a
+	ld [wOTTrademonDVs + 1], a
 	ld a, [wd003]
 	ld hl, OTPartyMon1Species
 	call GetPartyLocation
@@ -1860,7 +1875,7 @@
 	ld c, l
 	callba GetCaughtGender
 	ld a, c
-	ld [wEnemyCharging], a
+	ld [wOTTrademonCaughtData], a
 	ld a, [wd002]
 	ld [CurPartyMon], a
 	ld hl, PartySpecies
@@ -1889,18 +1904,18 @@
 	call DelayFrames
 	call ClearTileMap
 	call LoadFontsBattleExtra
-	ld b, $8
+	ld b, SCGB_08
 	call GetSGBLayout
 	ld a, [hLinkPlayerNumber]
 	cp $1
-	jr z, .asm_28de4
-	predef Function28f24
-	jr .asm_28de9
+	jr z, .player_2
+	predef TradeAnimation
+	jr .done_animation
 
-.asm_28de4
-	predef Function28f63
+.player_2
+	predef TradeAnimationPlayer2
 
-.asm_28de9
+.done_animation
 	pop af
 	ld c, a
 	ld [CurPartyMon], a
@@ -1916,11 +1931,11 @@
 	ld de, TempMonSpecies
 	ld bc, PARTYMON_STRUCT_LENGTH
 	call CopyBytes
-	predef Functionda96
+	predef AddTempmonToParty
 	ld a, [PartyCount]
 	dec a
 	ld [CurPartyMon], a
-	callab Function421d8
+	callab EvolvePokemon
 	call ClearScreen
 	call Function28ef8
 	call Function28eff
@@ -1944,7 +1959,7 @@
 
 .asm_28e49
 	ld a, b
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	push bc
 	call Function862
 	pop bc
@@ -1954,7 +1969,7 @@
 	ld a, b
 	and a
 	jr z, .asm_28e63
-	ld a, [wcf52]
+	ld a, [wOtherPlayerLinkAction]
 	cp b
 	jr nz, .asm_28e49
 
@@ -1967,7 +1982,7 @@
 	hlcoord 0, 12
 	ld b, 4
 	ld c, 18
-	call Function28eef
+	call Predef_LinkTextbox
 	hlcoord 1, 14
 	ld de, String28ebd
 	call PlaceString
@@ -2004,10 +2019,10 @@
 	next "was canceled!@"
 
 
-Function28eef: ; 28eef
+Predef_LinkTextbox: ; 28eef
 	ld d, h
 	ld e, l
-	callba Function16d6ca
+	callba LinkTextbox
 	ret
 ; 28ef8
 
@@ -2026,1552 +2041,17 @@
 	hlcoord 0, 0
 	ld b, 6
 	ld c, 18
-	call Function28eef
+	call Predef_LinkTextbox
 	hlcoord 0, 8
 	ld b, 6
 	ld c, 18
-	call Function28eef
+	call Predef_LinkTextbox
 	callba Functionfb60d
 	ret
 ; 28f24
 
-Function28f24: ; 28f24
-	xor a
-	ld [wcf66], a
-	ld hl, wc6e7
-	ld de, wc719
-	call Function297ff
-	ld hl, wc6d0
-	ld de, wc702
-	call Function29814
-	ld de, .data_28f3f
-	jr Function28fa1
+INCLUDE "engine/trade/animation.asm"
 
-.data_28f3f
-	db $1b
-	db $1
-	db $1c
-	db $21
-	db $2d
-	db $27
-	db $23
-	db $3
-	db $25
-	db $28
-	db $25
-	db $1e
-	db $29
-	db $6
-	db $16
-	db $1f
-	db $19
-	db $17
-	db $22
-	db $1f
-	db $2a
-	db $e
-	db $3
-	db $24
-	db $5
-	db $25
-	db $2
-	db $27
-	db $25
-	db $1d
-	db $2c
-	db $2e
-	db $1e
-	db $18
-	db $1f
-	db $2b
-
-Function28f63: ; 28f63
-	xor a
-	ld [wcf66], a
-	ld hl, wc719
-	ld de, wc6e7
-	call Function297ff
-	ld hl, wc702
-	ld de, wc6d0
-	call Function29814
-	ld de, .data_28f7e
-	jr Function28fa1
-
-.data_28f7e
-	db $1a
-	db $17
-	db $22
-	db $1f
-	db $2a
-	db $6
-	db $3
-	db $24
-	db $5
-	db $25
-	db $2
-	db $27
-	db $25
-	db $1d
-	db $2c
-	db $2f
-	db $1e
-	db $18
-	db $1f
-	db $1b
-	db $1
-	db $1c
-	db $22
-	db $27
-	db $23
-	db $3
-	db $25
-	db $28
-	db $25
-	db $1e
-	db $29
-	db $e
-	db $16
-	db $1f
-	db $2b
-
-Function28fa1: ; 28fa1
-	ld hl, BattleEnded
-	ld [hl], e
-	inc hl
-	ld [hl], d
-	ld a, [hMapAnims]
-	push af
-	xor a
-	ld [hMapAnims], a
-	ld hl, VramState
-	ld a, [hl]
-	push af
-	res 0, [hl]
-	ld hl, Options
-	ld a, [hl]
-	push af
-	set 4, [hl]
-	call Function28fdb
-	ld a, [wcf66]
-	and a
-	jr nz, .asm_28fca
-	ld de, MUSIC_EVOLUTION
-	call PlayMusic2
-.asm_28fca
-	call Function29082
-	jr nc, .asm_28fca
-	pop af
-	ld [Options], a
-	pop af
-	ld [VramState], a
-	pop af
-	ld [hMapAnims], a
-	ret
-; 28fdb
-
-Function28fdb: ; 28fdb
-	xor a
-	ld [wJumptableIndex], a
-	call ClearBGPalettes
-	call ClearSprites
-	call ClearTileMap
-	call DisableLCD
-	call LoadFontsBattleExtra
-	callab Function8cf53
-	ld a, [hCGB]
-	and a
-	jr z, .asm_2900b
-	ld a, $1
-	ld [rVBK], a
-	ld hl, VTiles0
-	ld bc, sScratch - VTiles0
-	xor a
-	call ByteFill
-	ld a, $0
-	ld [rVBK], a
-
-.asm_2900b
-	ld hl, VBGMap0
-	ld bc, sScratch - VBGMap0
-	ld a, " "
-	call ByteFill
-	ld hl, TradeGameBoyLZ
-	ld de, VTiles2 tile $31
-	call Decompress
-	ld hl, TradeArrowGFX
-	ld de, VTiles1 tile $6d
-	ld bc, $10
-	ld a, BANK(TradeArrowGFX)
-	call FarCopyBytes
-	ld hl, TradeArrowGFX + $10
-	ld de, VTiles1 tile $6e
-	ld bc, $10
-	ld a, BANK(TradeArrowGFX)
-	call FarCopyBytes
-	xor a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	callba Function4d7fd
-	call EnableLCD
-	call Function2982b
-	ld a, [wc6d0]
-	ld hl, wc6fd
-	ld de, VTiles0
-	call Function29491
-	ld a, [wc702]
-	ld hl, wEnemyTrappingMove
-	ld de, VTiles0 tile $31
-	call Function29491
-	ld a, [wc6d0]
-	ld de, wc6d1
-	call Function294a9
-	ld a, [wc702]
-	ld de, wc703
-	call Function294a9
-	call Function297ed
-	ret
-; 29082
-
-Function29082: ; 29082
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .asm_2909b
-	call Function290a0
-	callab Function8cf69
-	ld hl, wcf65
-	inc [hl]
-	call DelayFrame
-	and a
-	ret
-
-.asm_2909b
-	call LoadStandardFont
-	scf
-	ret
-; 290a0
-
-Function290a0: ; 290a0
-	ld a, [wJumptableIndex]
-	ld e, a
-	ld d, 0
-	ld hl, JumpTable290af
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 290af
-
-JumpTable290af: ; 290af
-	dw Function29114
-	dw Function2942e
-	dw Function29461
-	dw Function29348
-	dw Function2937e
-	dw Function29391
-	dw Function29129
-	dw Function291af
-	dw Function291c4
-	dw Function291d9
-	dw Function2925d
-	dw Function29220
-	dw Function2925d
-	dw Function29229
-	dw Function2913c
-	dw Function2925d
-	dw Function291e8
-	dw Function291fd
-	dw Function29211
-	dw Function29220
-	dw Function2925d
-	dw Function29229
-	dw Function29701
-	dw Function2973c
-	dw Function2975c
-	dw Function2977f
-	dw Function297a4
-	dw Function293a6
-	dw Function293b6
-	dw Function293d2
-	dw Function293de
-	dw Function293ea
-	dw Function2940c
-	dw Function294e7
-	dw Function294f0
-	dw Function2961b
-	dw Function2962c
-	dw Function29879
-	dw Function29886
-	dw Function29649
-	dw Function29660
-	dw Function2926d
-	dw Function29277
-	dw Function29123
-	dw Function29487
-	dw Function294f9
-	dw Function29502
-	dw Function2950c
-; 2910f
-
-Function2910f: ; 2910f
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-; 29114
-
-Function29114: ; 29114
-	ld hl, BattleEnded
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	ld a, [de]
-	ld [wJumptableIndex], a
-	inc de
-	ld [hl], d
-	dec hl
-	ld [hl], e
-	ret
-; 29123
-
-Function29123: ; 29123
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-; 29129
-
-Function29129: ; 29129
-	ld a, $ed
-	call Function292f6
-	ld a, [wc74c]
-	ld [wd265], a
-	xor a
-	ld de, $2c58
-	ld b, $0
-	jr Function2914e
-
-Function2913c: ; 2913c
-	ld a, $ee
-	call Function292f6
-	ld a, [wc74d]
-	ld [wd265], a
-	ld a, $2
-	lb de, $4c, $94
-	ld b, $4
-
-Function2914e: ; 2914e
-	push bc
-	push de
-	push bc
-	push de
-	push af
-	call DisableLCD
-	callab Function8cf53
-	ld hl, $9874
-	ld bc, $c
-	ld a, $60
-	call ByteFill
-	pop af
-	call Function29281
-	xor a
-	ld [hSCX], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $70
-	ld [hWY], a
-	call EnableLCD
-	call Function2985a
-	pop de
-	ld a, $11
-	call Function3b2a
-	ld hl, $b
-	add hl, bc
-	pop bc
-	ld [hl], b
-	pop de
-	ld a, $12
-	call Function3b2a
-	ld hl, $b
-	add hl, bc
-	pop bc
-	ld [hl], b
-	call WaitBGMap
-	ld b, $1b
-	call GetSGBLayout
-	ld a, $e4
-	call DmgToCgbBGPals
-	ld a, $d0
-	call Functioncf8
-	call Function2910f
-	ld a, $5c
-	ld [wcf64], a
-	ret
-; 291af
-
-Function291af: ; 291af
-	call Function2981d
-	ld a, [hSCX]
-	add $2
-	ld [hSCX], a
-	cp $50
-	ret nz
-	ld a, $1
-	call Function29281
-	call Function2910f
-	ret
-; 291c4
-
-Function291c4: ; 291c4
-	call Function2981d
-	ld a, [hSCX]
-	add $2
-	ld [hSCX], a
-	cp $a0
-	ret nz
-	ld a, $2
-	call Function29281
-	call Function2910f
-	ret
-; 291d9
-
-Function291d9: ; 291d9
-	call Function2981d
-	ld a, [hSCX]
-	add $2
-	ld [hSCX], a
-	and a
-	ret nz
-	call Function2910f
-	ret
-; 291e8
-
-Function291e8: ; 291e8
-	call Function2981d
-	ld a, [hSCX]
-	sub $2
-	ld [hSCX], a
-	cp $b0
-	ret nz
-	ld a, $1
-	call Function29281
-	call Function2910f
-	ret
-; 291fd
-
-Function291fd: ; 291fd
-	call Function2981d
-	ld a, [hSCX]
-	sub $2
-	ld [hSCX], a
-	cp $60
-	ret nz
-	xor a
-	call Function29281
-	call Function2910f
-	ret
-; 29211
-
-Function29211: ; 29211
-	call Function2981d
-	ld a, [hSCX]
-	sub $2
-	ld [hSCX], a
-	and a
-	ret nz
-	call Function2910f
-	ret
-; 29220
-
-Function29220: ; 29220
-	ld a, $80
-	ld [wcf64], a
-	call Function2910f
-	ret
-; 29229
-
-Function29229: ; 29229
-	call ClearBGPalettes
-	call ClearTileMap
-	call ClearSprites
-	call DisableLCD
-	callab Function8cf53
-	ld hl, VBGMap0
-	ld bc, sScratch - VBGMap0
-	ld a, " "
-	call ByteFill
-	xor a
-	ld [hSCX], a
-	ld a, $90
-	ld [hWY], a
-	call EnableLCD
-	call Function2982b
-	call WaitBGMap
-	call Function297ed
-	call Function29114
-	ret
-; 2925d
-
-Function2925d: ; 2925d
-	call Function2981d
-	ld hl, wcf64
-	ld a, [hl]
-	and a
-	jr z, .asm_29269
-	dec [hl]
-	ret
-
-.asm_29269
-	call Function2910f
-	ret
-; 2926d
-
-Function2926d: ; 2926d
-	call Function29114
-	ld de, SFX_GIVE_TRADEMON
-	call PlaySFX
-	ret
-; 29277
-
-Function29277: ; 29277
-	call Function29114
-	ld de, SFX_GET_TRADEMON
-	call PlaySFX
-	ret
-; 29281
-
-Function29281: ; 29281
-	and 3
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_2928f
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 2928f
-
-Jumptable_2928f: ; 2928f
-	dw Function29297
-	dw Function292af
-	dw Function292be
-	dw Function29297
-; 29297
-
-Function29297: ; 29297
-	call Function297cf
-	hlcoord 9, 3
-	ld [hl], $5b
-	inc hl
-	ld bc, $a
-	ld a, $60
-	call ByteFill
-	hlcoord 3, 2
-	call Function292ec
-	ret
-; 292af
-
-Function292af: ; 292af
-	call Function297cf
-	hlcoord 0, 3
-	ld bc, SCREEN_WIDTH
-	ld a, $60
-	call ByteFill
-	ret
-; 292be
-
-Function292be: ; 292be
-	call Function297cf
-	hlcoord 0, 3
-	ld bc, $11
-	ld a, $60
-	call ByteFill
-	hlcoord 17, 3
-	ld a, $5d
-	ld [hl], a
-	ld a, $61
-	ld de, SCREEN_WIDTH
-	ld c, $3
-.asm_292d9
-	add hl, de
-	ld [hl], a
-	dec c
-	jr nz, .asm_292d9
-	add hl, de
-	ld a, $5f
-	ld [hld], a
-	ld a, $5b
-	ld [hl], a
-	hlcoord 10, 6
-	call Function292ec
-	ret
-; 292ec
-
-Function292ec: ; 292ec
-	ld de, TradeGameBoyTilemap
-	lb bc, 8, 6
-	call Function297db
-	ret
-; 292f6
-
-Function292f6: ; 292f6
-	push af
-	call ClearBGPalettes
-	call WaitTop
-	ld a, VBGMap1 / $100
-	ld [hBGMapAddress + 1], a
-	call ClearTileMap
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH
-	ld a, "─"
-	call ByteFill
-	hlcoord 0, 1
-	ld de, wc736
-	call PlaceString
-	ld hl, wc741
-	ld de, 0
-.asm_2931e
-	ld a, [hli]
-	cp "@"
-	jr z, .asm_29326
-	dec de
-	jr .asm_2931e
-
-.asm_29326
-	hlcoord 0, 4
-	add hl, de
-	ld de, wc741
-	call PlaceString
-	hlcoord 7, 2
-	ld bc, 6
-	pop af
-	call ByteFill
-	call WaitBGMap
-	call WaitTop
-	ld a, VBGMap0 / $100
-	ld [hBGMapAddress + 1], a
-	call ClearTileMap
-	ret
-; 29348
-
-Function29348: ; 29348
-	call ClearTileMap
-	call WaitTop
-	ld a, $a0
-	ld [hSCX], a
-	call DelayFrame
-	hlcoord 8, 2
-	ld de, Tilemap_298f7
-	lb bc, 3, 12
-	call Function297db
-	call WaitBGMap
-	ld b, $1b
-	call GetSGBLayout
-	ld a, $e4
-	call DmgToCgbBGPals
-	ld de, $e4e4
-	call DmgToCgbObjPals
-	ld de, SFX_POTION
-	call PlaySFX
-	call Function2910f
-	ret
-; 2937e
-
-Function2937e: ; 2937e
-	ld a, [hSCX]
-	and a
-	jr z, .asm_29388
-	add $4
-	ld [hSCX], a
-	ret
-
-.asm_29388
-	ld c, $50
-	call DelayFrames
-	call Function29114
-	ret
-; 29391
-
-Function29391: ; 29391
-	ld a, [hSCX]
-	cp $a0
-	jr z, .asm_2939c
-	sub $4
-	ld [hSCX], a
-	ret
-
-.asm_2939c
-	call ClearTileMap
-	xor a
-	ld [hSCX], a
-	call Function29114
-	ret
-; 293a6
-
-Function293a6: ; 293a6
-	ld a, $8f
-	ld [hWX], a
-	ld a, $88
-	ld [hSCX], a
-	ld a, $50
-	ld [hWY], a
-	call Function29114
-	ret
-; 293b6
-
-Function293b6: ; 293b6
-	ld a, [hWX]
-	cp $7
-	jr z, .asm_293c7
-	sub $4
-	ld [hWX], a
-	ld a, [hSCX]
-	sub $4
-	ld [hSCX], a
-	ret
-
-.asm_293c7
-	ld a, $7
-	ld [hWX], a
-	xor a
-	ld [hSCX], a
-	call Function29114
-	ret
-; 293d2
-
-Function293d2: ; 293d2
-	ld a, $7
-	ld [hWX], a
-	ld a, $50
-	ld [hWY], a
-	call Function29114
-	ret
-; 293de
-
-Function293de: ; 293de
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	call Function29114
-	ret
-; 293ea
-
-Function293ea: ; 293ea
-	call WaitTop
-	ld a, VBGMap1 / $100
-	ld [hBGMapAddress + 1], a
-	call WaitBGMap
-	ld a, $7
-	ld [hWX], a
-	xor a
-	ld [hWY], a
-	call DelayFrame
-	call WaitTop
-	ld a, VBGMap0 / $100
-	ld [hBGMapAddress + 1], a
-	call ClearTileMap
-	call Function2910f
-	ret
-; 2940c
-
-Function2940c: ; 2940c
-	ld a, [hWX]
-	cp $a1
-	jr nc, .asm_29417
-	add $4
-	ld [hWX], a
-	ret
-
-.asm_29417
-	ld a, VBGMap1 / $100
-	ld [hBGMapAddress + 1], a
-	call WaitBGMap
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	ld a, VBGMap0 / $100
-	ld [hBGMapAddress + 1], a
-	call Function29114
-	ret
-; 2942e
-
-Function2942e: ; 2942e
-	call Function2951f
-	ld a, [wc6d0]
-	ld [CurPartySpecies], a
-	ld a, [wc6fd]
-	ld [TempMonDVs], a
-	ld a, [wPlayerMinimized]
-	ld [TempMonDVs + 1], a
-	ld b, $1a
-	call GetSGBLayout
-	ld a, $e4
-	call DmgToCgbBGPals
-	call Function294bb
-
-	ld a, [wc6d0]
-	call GetCryIndex
-	jr c, .asm_2945d
-	ld e, c
-	ld d, b
-	call PlayCryHeader
-.asm_2945d
-
-	call Function29114
-	ret
-; 29461
-
-Function29461: ; 29461
-	call Function29549
-	ld a, [wc702]
-	ld [CurPartySpecies], a
-	ld a, [wEnemyTrappingMove]
-	ld [TempMonDVs], a
-	ld a, [wPlayerWrapCount]
-	ld [TempMonDVs + 1], a
-	ld b, $1a
-	call GetSGBLayout
-	ld a, $e4
-	call DmgToCgbBGPals
-	call Function294c0
-	call Function29114
-	ret
-; 29487
-
-Function29487: ; 29487
-	callba Function4d81e
-	call Function29114
-	ret
-; 29491
-
-Function29491: ; 29491
-	push de
-	push af
-	predef GetUnownLetter
-	pop af
-	ld [CurPartySpecies], a
-	ld [CurSpecies], a
-	call GetBaseData
-	pop de
-	predef GetFrontpic
-	ret
-; 294a9
-
-Function294a9: ; 294a9
-	push de
-	ld [wd265], a
-	call GetPokemonName
-	ld hl, StringBuffer1
-	pop de
-	ld bc, NAME_LENGTH
-	call CopyBytes
-	ret
-; 294bb
-
-Function294bb: ; 294bb
-	ld de, VTiles0
-	jr Function294c3
-
-Function294c0: ; 294c0
-	ld de, VTiles0 tile $31
-
-Function294c3: ; 294c3
-	call DelayFrame
-	ld hl, VTiles2
-	ld bc, $a31
-	call Request2bpp
-	call WaitTop
-	call Function297cf
-	hlcoord 7, 2
-	xor a
-	ld [hFillBox], a
-	lb bc, 7, 7
-	predef FillBox
-	call WaitBGMap
-	ret
-; 294e7
-
-Function294e7: ; 294e7
-	ld c, $50
-	call DelayFrames
-	call Function29114
-	ret
-; 294f0
-
-Function294f0: ; 294f0
-	ld c, $28
-	call DelayFrames
-	call Function29114
-	ret
-; 294f9
-
-Function294f9: ; 294f9
-	ld c, $60
-	call DelayFrames
-	call Function29114
-	ret
-; 29502
-
-Function29502: ; 29502
-	call Function29516
-	ret nz
-	ld c, $50
-	call DelayFrames
-	ret
-; 2950c
-
-Function2950c: ; 2950c
-	call Function29516
-	ret nz
-	ld c, $b4
-	call DelayFrames
-	ret
-; 29516
-
-Function29516: ; 29516
-	call Function29114
-	ld a, [wc702]
-	cp $fd
-	ret
-; 2951f
-
-Function2951f: ; 2951f
-	ld de, wc6d0
-	ld a, [de]
-	cp $fd
-	jr z, Function295a1
-	call Function29573
-	ld de, wc6d0
-	call Function295e3
-	ld de, wc6d1
-	call Function295ef
-	ld a, [wc701]
-	ld de, wc6f2
-	call Function295f6
-	ld de, PlayerScreens
-	call Function29611
-	call Function295d8
-	ret
-; 29549
-
-Function29549: ; 29549
-	ld de, wc702
-	ld a, [de]
-	cp $fd
-	jr z, Function295a1
-	call Function29573
-	ld de, wc702
-	call Function295e3
-	ld de, wc703
-	call Function295ef
-	ld a, [wEnemyCharging]
-	ld de, wc724
-	call Function295f6
-	ld de, wEnemyWrapCount
-	call Function29611
-	call Function295d8
-	ret
-; 29573
-
-Function29573: ; 29573
-	call WaitTop
-	call Function297cf
-	ld a, VBGMap1 / $100
-	ld [hBGMapAddress + 1], a
-	hlcoord 3, 0
-	ld b, $6
-	ld c, $d
-	call TextBox
-	hlcoord 4, 0
-	ld de, String29591
-	call PlaceString
-	ret
-; 29591
-
-String29591: ; 29591
-	db   "─── №."
-	next ""
-	next "OT/"
-	next $73, "№.@"
-; 295a1
-
-Function295a1: ; 295a1
-	call WaitTop
-	call Function297cf
-	ld a, VBGMap1 / $100
-	ld [hBGMapAddress + 1], a
-	hlcoord 3, 0
-	ld b, $6
-	ld c, $d
-	call TextBox
-	hlcoord 4, 2
-	ld de, String295c2
-	call PlaceString
-	call Function295d8
-	ret
-; 295c2
-
-String295c2: ; 295c2
-	db   "EGG"
-	next "OT/?????"
-	next $73, "№.?????@"
-; 295d8
-
-Function295d8: ; 295d8
-	call WaitBGMap
-	call WaitTop
-	ld a, VBGMap0 / $100
-	ld [hBGMapAddress + 1], a
-	ret
-; 295e3
-
-Function295e3: ; 295e3
-	hlcoord 10, 0
-	lb bc, PRINTNUM_LEADINGZEROS | 1, 3
-	call PrintNum
-	ld [hl], $7f
-	ret
-; 295ef
-
-Function295ef: ; 295ef
-	hlcoord 4, 2
-	call PlaceString
-	ret
-; 295f6
-
-Function295f6: ; 295f6
-	cp 3
-	jr c, .asm_295fb
-	xor a
-
-.asm_295fb
-	push af
-	hlcoord 7, 4
-	call PlaceString
-	inc bc
-	pop af
-	ld hl, Unknown_2960e
-	ld d, 0
-	ld e, a
-	add hl, de
-	ld a, [hl]
-	ld [bc], a
-	ret
-; 2960e
-
-Unknown_2960e: ; 2960e
-	db " ", "♂", "♀"
-; 29611
-
-Function29611: ; 29611
-	hlcoord 7, 6
-	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
-	call PrintNum
-	ret
-; 2961b
-
-Function2961b: ; 2961b
-	lb de, $54, $58
-	ld a, $e
-	call Function3b2a
-	call Function29114
-	ld a, $20
-	ld [wcf64], a
-	ret
-; 2962c
-
-Function2962c: ; 2962c
-	lb de, $54, $58
-	ld a, $e
-	call Function3b2a
-	ld hl, $b
-	add hl, bc
-	ld [hl], $1
-	ld hl, $7
-	add hl, bc
-	ld [hl], $dc
-	call Function29114
-	ld a, $38
-	ld [wcf64], a
-	ret
-; 29649
-
-Function29649: ; 29649
-	lb de, $54, $58
-	ld a, $f
-	call Function3b2a
-	call Function29114
-	ld a, $10
-	ld [wcf64], a
-	ld de, SFX_BALL_POOF
-	call PlaySFX
-	ret
-; 29660
-
-Function29660: ; 29660
-	ld a, $e4
-	call Functioncf8
-	lb de, $28, $58
-	ld a, $10
-	call Function3b2a
-	call Function29114
-	ld a, $40
-	ld [wcf64], a
-	ret
-; 29676
-
-Function29676: ; 29676 (a:5676)
-	ld hl, $b
-	add hl, bc
-	ld e, [hl]
-	ld d, 0
-	ld hl, Jumptable_29686
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 29686
-
-Jumptable_29686: ; 29686 (a:5686)
-	dw Function2969a
-	dw Function296a4
-	dw Function296af
-	dw Function296bd
-	dw Function296cf
-	dw Function296dd
-	dw Function296f2
-; 2969a
-
-Function29694: ; 29694 (a:5694)
-	ld hl, $b
-	add hl, bc
-	inc [hl]
-	ret
-
-Function2969a: ; 2969a (a:569a)
-	call Function29694
-	ld hl, $c
-	add hl, bc
-	ld [hl], $80
-	ret
-
-Function296a4: ; 296a4 (a:56a4)
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	dec [hl]
-	and a
-	ret nz
-	call Function29694
-
-Function296af: ; 296af (a:56af)
-	ld hl, $4
-	add hl, bc
-	ld a, [hl]
-	cp $94
-	jr nc, .asm_296ba
-	inc [hl]
-	ret
-.asm_296ba
-	call Function29694
-
-Function296bd: ; 296bd (a:56bd)
-	ld hl, $5
-	add hl, bc
-	ld a, [hl]
-	cp $4c
-	jr nc, .asm_296c8
-	inc [hl]
-	ret
-.asm_296c8
-	ld hl, $
-	add hl, bc
-	ld [hl], $0
-	ret
-
-Function296cf: ; 296cf (a:56cf)
-	ld hl, $5
-	add hl, bc
-	ld a, [hl]
-	cp $2c
-	jr z, .asm_296da
-	dec [hl]
-	ret
-.asm_296da
-	call Function29694
-
-Function296dd: ; 296dd (a:56dd)
-	ld hl, $4
-	add hl, bc
-	ld a, [hl]
-	cp $58
-	jr z, .asm_296e8
-	dec [hl]
-	ret
-.asm_296e8
-	call Function29694
-	ld hl, $c
-	add hl, bc
-	ld [hl], $80
-	ret
-
-Function296f2: ; 296f2 (a:56f2)
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	dec [hl]
-	and a
-	ret nz
-	ld hl, $
-	add hl, bc
-	ld [hl], $0
-	ret
-; 29701 (a:5701)
-
-Function29701: ; 29701
-	ld a, [wLinkMode]
-	cp LINK_TIMECAPSULE
-	jr z, .asm_29725
-	ld hl, UnknownText_0x29737
-	call PrintText
-	ld c, $bd
-	call DelayFrames
-	ld hl, UnknownText_0x29732
-	call PrintText
-	call Function297c9
-	ld c, $80
-	call DelayFrames
-	call Function29114
-	ret
-
-.asm_29725
-	ld hl, UnknownText_0x29732
-	call PrintText
-	call Function297c9
-	call Function29114
-	ret
-; 29732
-
-UnknownText_0x29732: ; 0x29732
-	; was sent to @ .
-	text_jump UnknownText_0x1bc6e9
-	db "@"
-; 0x29737
-
-UnknownText_0x29737: ; 0x29737
-	;
-	text_jump UnknownText_0x1bc701
-	db "@"
-; 0x2973c
-
-Function2973c: ; 2973c
-	ld hl, UnknownText_0x29752
-	call PrintText
-	call Function297c9
-	ld hl, UnknownText_0x29757
-	call PrintText
-	call Function297c9
-	call Function29114
-	ret
-; 29752
-
-UnknownText_0x29752: ; 0x29752
-	; bids farewell to
-	text_jump UnknownText_0x1bc703
-	db "@"
-; 0x29757
-
-UnknownText_0x29757: ; 0x29757
-	; .
-	text_jump UnknownText_0x1bc719
-	db "@"
-; 0x2975c
-
-Function2975c: ; 2975c
-	call WaitTop
-	hlcoord 0, 10
-	ld bc, 8 * SCREEN_WIDTH
-	ld a, " "
-	call ByteFill
-	call WaitBGMap
-	ld hl, UnknownText_0x2977a
-	call PrintText
-	call Function297c9
-	call Function29114
-	ret
-; 2977a
-
-UnknownText_0x2977a: ; 0x2977a
-	; Take good care of @ .
-	text_jump UnknownText_0x1bc71f
-	db "@"
-; 0x2977f
-
-Function2977f: ; 2977f
-	ld hl, UnknownText_0x2979a
-	call PrintText
-	call Function297c9
-	ld hl, UnknownText_0x2979f
-	call PrintText
-	call Function297c9
-	ld c, $e
-	call DelayFrames
-	call Function29114
-	ret
-; 2979a
-
-UnknownText_0x2979a: ; 0x2979a
-	; For @ 's @ ,
-	text_jump UnknownText_0x1bc739
-	db "@"
-; 0x2979f
-
-UnknownText_0x2979f: ; 0x2979f
-	; sends @ .
-	text_jump UnknownText_0x1bc74c
-	db "@"
-; 0x297a4
-
-Function297a4: ; 297a4
-	ld hl, UnknownText_0x297bf
-	call PrintText
-	call Function297c9
-	ld hl, UnknownText_0x297c4
-	call PrintText
-	call Function297c9
-	ld c, $e
-	call DelayFrames
-	call Function29114
-	ret
-; 297bf
-
-UnknownText_0x297bf: ; 0x297bf
-	; will trade @ @
-	text_jump UnknownText_0x1bc75e
-	db "@"
-; 0x297c4
-
-UnknownText_0x297c4: ; 0x297c4
-	; for @ 's @ .
-	text_jump UnknownText_0x1bc774
-	db "@"
-; 0x297c9
-
-Function297c9: ; 297c9
-	ld c, $50
-	call DelayFrames
-	ret
-; 297cf
-
-Function297cf: ; 297cf
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	ld a, " "
-	call ByteFill
-	ret
-; 297db
-
-Function297db: ; 297db
-.asm_297db
-	push bc
-	push hl
-.asm_297dd
-	ld a, [de]
-	inc de
-	ld [hli], a
-	dec c
-	jr nz, .asm_297dd
-	pop hl
-	ld bc, SCREEN_WIDTH
-	add hl, bc
-	pop bc
-	dec b
-	jr nz, .asm_297db
-	ret
-; 297ed
-
-Function297ed: ; 297ed
-	ld a, [hSGB]
-	and a
-	ld a, $e4
-	jr z, .asm_297f6
-	ld a, $f0
-
-.asm_297f6
-	call Functioncf8
-	ld a, $e4
-	call DmgToCgbBGPals
-	ret
-; 297ff
-
-Function297ff: ; 297ff
-	push de
-	ld de, wc736
-	ld bc, NAME_LENGTH
-	call CopyBytes
-	pop hl
-	ld de, wc741
-	ld bc, NAME_LENGTH
-	call CopyBytes
-	ret
-; 29814
-
-Function29814: ; 29814
-	ld a, [hl]
-	ld [wc74c], a
-	ld a, [de]
-	ld [wc74d], a
-	ret
-; 2981d
-
-Function2981d: ; 2981d
-	ld a, [wcf65]
-	and $7
-	ret nz
-	ld a, [rBGP]
-	xor $3c
-	call DmgToCgbBGPals
-	ret
-; 2982b
-
-Function2982b: ; 2982b
-	call DelayFrame
-	ld de, TradeBallGFX
-	ld hl, VTiles0 tile $62
-	lb bc, BANK(TradeBallGFX), $6
-	call Request2bpp
-	ld de, TradePoofGFX
-	ld hl, VTiles0 tile $68
-	lb bc, BANK(TradePoofGFX), $c
-	call Request2bpp
-	ld de, TradeCableGFX
-	ld hl, VTiles0 tile $74
-	lb bc, BANK(TradeCableGFX), $4
-	call Request2bpp
-	xor a
-	ld hl, wc300
-	ld [hli], a
-	ld [hl], $62
-	ret
-; 2985a
-
-Function2985a: ; 2985a
-	call DelayFrame
-	ld e, $3
-	callab Function8e83f
-	ld de, TradeBubbleGFX
-	ld hl, VTiles0 tile $72
-	lb bc, BANK(TradeBubbleGFX), $4
-	call Request2bpp
-	xor a
-	ld hl, wc300
-	ld [hli], a
-	ld [hl], $62
-	ret
-; 29879
-
-Function29879: ; 29879
-	ld hl, wcf64
-	ld a, [hl]
-	and a
-	jr z, .asm_29882
-	dec [hl]
-	ret
-
-.asm_29882
-	call Function29114
-	ret
-; 29886
-
-Function29886: ; 29886
-	ld hl, wcf64
-	ld a, [hl]
-	and a
-	jr z, .asm_2988f
-	dec [hl]
-	ret
-
-.asm_2988f
-	call Function29114
-	ret
-; 29893
-
-
-Function29893: ; 29893
-; This function is unreferenced.
-; It was meant for use in Japanese versions, so the
-; constant used for copy length was changed by accident.
-
-	ld hl, Unknown_298b5
-
-	ld a, [hli]
-	ld [wc6d0], a
-	ld de, wc6e7
-	ld c, 13 ; jp: 8
-.asm_2989f
-	ld a, [hli]
-	ld [de], a
-	inc de
-	dec c
-	jr nz, .asm_2989f
-
-	ld a, [hli]
-	ld [wc702], a
-	ld de, wc719
-	ld c, 13 ; jp: 8
-.asm_298ae
-	ld a, [hli]
-	ld [de], a
-	inc de
-	dec c
-	jr nz, .asm_298ae
-	ret
-; 298b5
-
-Unknown_298b5: ; 298b5
-	db $03, "ゲーフり@@", $23, $01 ; GAME FREAK
-	db $06, "クりーチャ@", $56, $04 ; Creatures Inc.
-; 298c7
-
-
-TradeGameBoyTilemap: ; 298c7
-; 6x8
-	db $31, $32, $32, $32, $32, $33
-	db $34, $35, $36, $36, $37, $38
-	db $34, $39, $3a, $3a, $3b, $38
-	db $3c, $3d, $3e, $3e, $3f, $40
-	db $41, $42, $43, $43, $44, $45
-	db $46, $47, $43, $48, $49, $4a
-	db $41, $43, $4b, $4c, $4d, $4e
-	db $4f, $50, $50, $50, $51, $52
-; 297f7
-
-Tilemap_298f7: ; 297f7
-; 12x3
-	db $43, $55, $56, $53, $53, $53, $53, $53, $53, $53, $53, $53
-	db $43, $57, $58, $54, $54, $54, $54, $54, $54, $54, $54, $54
-	db $43, $59, $5a, $43, $43, $43, $43, $43, $43, $43, $43, $43
-; 2991b
-
-TradeArrowGFX:  INCBIN "gfx/trade/arrow.2bpp"
-TradeCableGFX:  INCBIN "gfx/trade/cable.2bpp"
-TradeBubbleGFX: INCBIN "gfx/trade/bubble.2bpp"
-TradeGameBoyLZ: INCBIN "gfx/trade/game_boy.2bpp.lz"
-TradeBallGFX:   INCBIN "gfx/trade/ball.2bpp"
-TradePoofGFX:   INCBIN "gfx/trade/poof.2bpp"
-
 Special_CheckTimeCapsuleCompatibility: ; 29bfb
 ; Checks to see if your Party is compatible with the generation 1 games.  Returns the following in ScriptVar:
 ; 0: Party is okay
@@ -3668,11 +2148,11 @@
 ; 29c7b
 
 Special_EnterTimeCapsule: ; 29c7b
-	ld c, $a
+	ld c, 10
 	call DelayFrames
 	ld a, $4
 	call Function29f17
-	ld c, $28
+	ld c, 40
 	call DelayFrames
 	xor a
 	ld [hVBlank], a
@@ -3730,15 +2210,15 @@
 ; 29ce8
 
 Special_SetBitsForLinkTradeRequest: ; 29ce8
-	ld a, $1
-	ld [wcf56], a
+	ld a, LINK_TRADECENTER - 1
+	ld [wPlayerLinkAction], a
 	ld [wd265], a
 	ret
 ; 29cf1
 
 Special_SetBitsForBattleRequest: ; 29cf1
-	ld a, $2
-	ld [wcf56], a
+	ld a, LINK_COLOSSEUM - 1
+	ld [wPlayerLinkAction], a
 	ld [wd265], a
 	ret
 ; 29cfa
@@ -3752,14 +2232,14 @@
 	ld [rSC], a
 	ld a, $80
 	ld [rSC], a
-	xor a
-	ld [wcf56], a
+	xor a ; LINK_TIMECAPSULE - 1
+	ld [wPlayerLinkAction], a
 	ld [wd265], a
 	ret
 ; 29d11
 
 Special_WaitForLinkedFriend: ; 29d11
-	ld a, [wcf56]
+	ld a, [wPlayerLinkAction]
 	and a
 	jr z, .asm_29d2f
 	ld a, $2
@@ -3815,9 +2295,9 @@
 	jr .asm_29d39
 
 .asm_29d79
-	call Function908
+	call LinkCommunicationsSignalDataReceived
 	call DelayFrame
-	call Function908
+	call LinkCommunicationsSignalDataReceived
 	ld c, $32
 	call DelayFrames
 	ld a, $1
@@ -3832,7 +2312,7 @@
 
 Special_CheckLinkTimeout: ; 29d92
 	ld a, $1
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	ld hl, wcf5b
 	ld a, $3
 	ld [hli], a
@@ -3854,7 +2334,7 @@
 
 Function29dba: ; 29dba
 	ld a, $5
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	ld hl, wcf5b
 	ld a, $3
 	ld [hli], a
@@ -3875,17 +2355,17 @@
 	ld a, b
 	or c
 	jr nz, .asm_29de0
-	ld a, [wcf51]
+	ld a, [wOtherPlayerLinkMode]
 	cp $5
 	jr nz, .asm_29e03
 	ld a, $6
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	ld hl, wcf5b
 	ld a, $1
 	ld [hli], a
 	ld [hl], $32
 	call Function29e0c
-	ld a, [wcf51]
+	ld a, [wOtherPlayerLinkMode]
 	cp $6
 	jr z, .asm_29e08
 
@@ -3946,7 +2426,7 @@
 	ld b, $a
 .asm_29e49
 	call DelayFrame
-	call Function908
+	call LinkCommunicationsSignalDataReceived
 	dec b
 	jr nz, .asm_29e49
 	ret
@@ -3969,7 +2449,7 @@
 Special_TryQuickSave: ; 29e66
 	ld a, [wd265]
 	push af
-	callba Function14ab2
+	callba Link_SaveGame
 	ld a, $1
 	jr nc, .asm_29e75
 	xor a
@@ -3987,14 +2467,14 @@
 	ld a, [wd265]
 	call Function29f17
 	push af
-	call Function908
+	call LinkCommunicationsSignalDataReceived
 	call DelayFrame
-	call Function908
+	call LinkCommunicationsSignalDataReceived
 	pop af
 	ld b, a
 	ld a, [wd265]
 	cp b
-	jr nz, .asm_29eaa
+	jr nz, .fail
 	ld a, [wd265]
 	inc a
 	ld [wLinkMode], a
@@ -4004,7 +2484,7 @@
 	ld [ScriptVar], a
 	ret
 
-.asm_29eaa
+.fail
 	xor a
 	ld [ScriptVar], a
 	ret
@@ -4052,7 +2532,7 @@
 ; 29efa
 
 Special_FailedLinkToPast: ; 29efa
-	ld c, $28
+	ld c, 40
 	call DelayFrames
 	ld a, $e
 	jp Function29f17
@@ -4059,7 +2539,7 @@
 ; 29f04
 
 Function29f04: ; 29f04
-	ld c, $3
+	ld c, 3
 	call DelayFrames
 	ld a, -1
 	ld [hLinkPlayerNumber], a
@@ -4073,26 +2553,26 @@
 
 Function29f17: ; 29f17
 	add $d0
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	ld [wcf57], a
 	ld a, $2
 	ld [hVBlank], a
 	call DelayFrame
 	call DelayFrame
-.asm_29f29
+.receive_loop
 	call Function83b
-	ld a, [wcf51]
+	ld a, [wOtherPlayerLinkMode]
 	ld b, a
 	and $f0
 	cp $d0
-	jr z, .asm_29f40
-	ld a, [wcf52]
+	jr z, .done
+	ld a, [wOtherPlayerLinkAction]
 	ld b, a
 	and $f0
 	cp $d0
-	jr nz, .asm_29f29
+	jr nz, .receive_loop
 
-.asm_29f40
+.done
 	xor a
 	ld [hVBlank], a
 	ld a, b
--- /dev/null
+++ b/engine/mail.asm
@@ -1,0 +1,589 @@
+SendMailToPC: ; 4456e
+	ld a, MON_ITEM
+	call GetPartyParamLocation
+	ld d, [hl]
+	callba ItemIsMail
+	jr nc, .full
+	call GetMailboxCount
+	cp MAILBOX_CAPACITY
+	jr nc, .full
+	ld bc, MAIL_STRUCT_LENGTH
+	ld hl, sMailbox
+	call AddNTimes
+	ld d, h
+	ld e, l
+	ld a, [CurPartyMon]
+	ld bc, MAIL_STRUCT_LENGTH
+	ld hl, sPartyMail
+	call AddNTimes
+	push hl
+	ld a, BANK(sMailboxCount)
+	call GetSRAMBank
+	ld bc, MAIL_STRUCT_LENGTH
+	call CopyBytes
+	pop hl
+	xor a
+	ld bc, MAIL_STRUCT_LENGTH
+	call ByteFill
+	ld a, MON_ITEM
+	call GetPartyParamLocation
+	ld [hl], $0
+	ld hl, sMailboxCount
+	inc [hl]
+	call CloseSRAM
+	xor a
+	ret
+
+.full
+	scf
+	ret
+; 445c0
+
+DeleteMailFromPC: ; 445c0 (11:45c0)
+; Shift all mail messages in the mailbox
+	ld a, BANK(sMailboxCount)
+	call GetSRAMBank
+	ld a, b
+	push bc
+	ld hl, sMailbox
+	ld bc, MAIL_STRUCT_LENGTH
+	call AddNTimes
+	push hl
+	add hl, bc
+	pop de
+	pop bc
+.loop
+	ld a, b
+	cp MAILBOX_CAPACITY - 1
+	jr z, .done
+	push bc
+	ld bc, MAIL_STRUCT_LENGTH
+	call CopyBytes
+	pop bc
+	inc b
+	jr .loop
+.done
+	ld h, d
+	ld l, e
+	xor a
+	ld bc, MAIL_STRUCT_LENGTH
+	call ByteFill
+	ld hl, sMailboxCount
+	dec [hl]
+	jp CloseSRAM
+; 445f4 (11:45f4)
+
+ReadMailMessage: ; 445f4
+	ld a, b
+	ld hl, sMailbox
+	ld bc, MAIL_STRUCT_LENGTH
+	call AddNTimes
+	ld d, h
+	ld e, l
+	callba ReadAnyMail
+	ret
+
+MoveMailFromPCToParty: ; 44607
+	ld a, BANK(sMailboxCount)
+	call GetSRAMBank
+	push bc
+	ld a, b
+	ld bc, MAIL_STRUCT_LENGTH
+	ld hl, sMailbox
+	call AddNTimes
+	push hl
+	ld a, [CurPartyMon]
+	ld bc, MAIL_STRUCT_LENGTH
+	ld hl, sPartyMail
+	call AddNTimes
+	ld d, h
+	ld e, l
+	pop hl
+	push hl
+	ld bc, MAIL_STRUCT_LENGTH
+	call CopyBytes
+	pop hl
+	ld de, PARTYMON_STRUCT_LENGTH - MON_MOVES
+	add hl, de
+	ld d, [hl]
+	ld a, [CurPartyMon]
+	ld hl, PartyMon1Item
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call AddNTimes
+	ld [hl], d
+	call CloseSRAM
+	pop bc
+	jp DeleteMailFromPC
+; 44648 (11:4648)
+
+GetMailboxCount: ; 44648
+	ld a, BANK(sMailboxCount)
+	call GetSRAMBank
+	ld a, [sMailboxCount]
+	ld c, a
+	jp CloseSRAM
+; 44654
+
+CheckPokeItem:: ; 44654
+	push bc
+	push de
+	callba SelectMonFromParty
+	ld a, $2
+	jr c, .pop_return
+
+	ld a, [CurPartyMon]
+	ld hl, PartyMon1Item
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call AddNTimes
+	ld d, [hl]
+	callba ItemIsMail
+	ld a, $3
+	jr nc, .pop_return
+
+	ld a, BANK(sPartyMail)
+	call GetSRAMBank
+	ld a, [CurPartyMon]
+	ld hl, sPartyMail
+	ld bc, MAIL_STRUCT_LENGTH
+	call AddNTimes
+	ld d, h
+	ld e, l
+	pop hl
+	pop bc
+
+; Compare the mail message, byte for byte, with the expected message.
+	ld a, MAIL_MSG_LENGTH
+	ld [wd265], a
+.loop
+	ld a, [de]
+	ld c, a
+	ld a, b
+	call GetFarByte
+	cp "@"
+	jr z, .done
+	cp c
+	ld a, $0
+	jr nz, .close_sram_return
+	inc hl
+	inc de
+	ld a, [wd265]
+	dec a
+	ld [wd265], a
+	jr nz, .loop
+
+.done
+	callba CheckCurPartyMonFainted
+	ld a, $4
+	jr c, .close_sram_return
+	xor a
+	ld [wPokemonWithdrawDepositParameter], a
+	callba Functione039
+	ld a, $1
+
+.close_sram_return
+	call CloseSRAM
+	jr .return
+
+.pop_return
+	pop de
+	pop bc
+
+.return
+	ld [ScriptVar], a
+	ret
+; 446cc
+
+
+GivePokeItem:: ; 446cc
+	ld a, [PartyCount]
+	dec a
+	push af
+	push bc
+	ld hl, PartyMon1Item
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call AddNTimes
+	pop bc
+	ld [hl], b
+	pop af
+	push bc
+	push af
+	ld hl, sPartyMail
+	ld bc, $2f
+	call AddNTimes
+	ld d, h
+	ld e, l
+	ld hl, wd002
+	ld bc, $21
+	ld a, BANK(sPartyMail)
+	call GetSRAMBank
+	call CopyBytes
+	pop af
+	push af
+	ld hl, PartyMonOT
+	ld bc, NAME_LENGTH
+	call AddNTimes
+	ld bc, $a
+	call CopyBytes
+	pop af
+	ld hl, PartyMon1ID
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call AddNTimes
+	ld a, [hli]
+	ld [de], a
+	inc de
+	ld a, [hl]
+	ld [de], a
+	inc de
+	ld a, [CurPartySpecies]
+	ld [de], a
+	inc de
+	pop bc
+	ld a, b
+	ld [de], a
+	jp CloseSRAM
+; 44725
+
+
+BackupPartyMonMail: ; 44725
+	ld a, BANK(sPartyMail)
+	call GetSRAMBank
+	ld hl, sPartyMail
+	ld de, sPartyMailBackup
+	ld bc, 6 * MAIL_STRUCT_LENGTH
+	call CopyBytes
+	ld hl, sMailboxCount
+	ld de, sMailboxCountBackup
+	ld bc, 1 + 10 * MAIL_STRUCT_LENGTH
+	call CopyBytes
+	jp CloseSRAM
+; 44745
+
+RestorePartyMonMail: ; 44745 (11:4745)
+	ld a, BANK(sPartyMail)
+	call GetSRAMBank
+	ld hl, sPartyMailBackup
+	ld de, sPartyMail
+	ld bc, 6 * MAIL_STRUCT_LENGTH
+	call CopyBytes
+	ld hl, sMailboxCountBackup
+	ld de, sMailboxCount
+	ld bc, 1 + 10 * MAIL_STRUCT_LENGTH
+	call CopyBytes
+	jp CloseSRAM
+
+DeletePartyMonMail: ; 44765 (11:4765)
+	ld a, BANK(sPartyMail)
+	call GetSRAMBank
+	xor a
+	ld hl, sPartyMail
+	ld bc, 6 * MAIL_STRUCT_LENGTH
+	call ByteFill
+	xor a
+	ld hl, sMailboxCount
+	ld bc, 1 + 10 * MAIL_STRUCT_LENGTH
+	call ByteFill
+	jp CloseSRAM
+; 44781 (11:4781)
+
+
+IsAnyMonHoldingMail: ; 44781
+	ld a, [PartyCount]
+	and a
+	jr z, .no_mons
+	ld e, a
+	ld hl, PartyMon1Item
+.loop
+	ld d, [hl]
+	push hl
+	push de
+	callba ItemIsMail
+	pop de
+	pop hl
+	ret c
+	ld bc, PARTYMON_STRUCT_LENGTH
+	add hl, bc
+	dec e
+	jr nz, .loop
+
+.no_mons
+	and a
+	ret
+; 447a0
+
+_KrisMailBoxMenu: ; 0x447a0
+	call InitMail
+	jr z, .nomail
+	call LoadStandardMenuDataHeader
+	call MailboxPC
+	jp WriteBackup
+
+.nomail
+	ld hl, .EmptyMailboxText
+	jp MenuTextBoxBackup
+; 0x447b4
+
+.EmptyMailboxText ; 0x447b4
+	text_jump _EmptyMailboxText
+	db "@"
+
+InitMail: ; 0x447b9
+; initialize wMailboxCount and beyond with incrementing values, one per mail
+; set z if no mail
+	ld a, BANK(sMailboxCount)
+	call GetSRAMBank
+	ld a, [sMailboxCount]
+	call CloseSRAM
+	ld hl, wMailboxCount
+	ld [hli], a
+	and a
+
+	jr z, .done ; if no mail, we're done
+
+	; load values in memory with incrementing values starting at wMailboxCount
+	ld b, a
+	ld a, 1
+.loop
+	ld [hli], a
+	inc a
+	dec b
+	jr nz, .loop
+.done
+	ld [hl], -1 ; terminate
+
+	ld a, [wMailboxCount]
+	and a
+	ret
+; 0x447da
+
+Function447da: ; 0x447da
+	dec a
+	ld hl, sMailbox1Author
+	ld bc, MAIL_STRUCT_LENGTH
+	call AddNTimes
+	ld a, BANK(sMailboxCount)
+	call GetSRAMBank
+	ld de, StringBuffer2
+	push de
+	ld bc, NAME_LENGTH - 1
+	call CopyBytes
+	ld a, "@"
+	ld [de], a
+	call CloseSRAM
+	pop de
+	ret
+; 0x447fb
+
+Function447fb: ; 0x447fb
+	push de
+	ld a, [MenuSelection]
+	call Function447da
+	pop hl
+	jp PlaceString
+; 0x44806
+
+MailboxPC: ; 0x44806
+	xor a
+	ld [OBPals + 8 * 6], a
+	ld a, $1
+	ld [wCurMessageIndex], a
+.loop
+	call InitMail
+	ld hl, MenuData4494c
+	call CopyMenuDataHeader
+	xor a
+	ld [hBGMapMode], a
+	call InitScrollingMenu
+	call UpdateSprites
+
+	ld a, [wCurMessageIndex]
+	ld [wMenuCursorBuffer], a
+	ld a, [OBPals + 8 * 6]
+	ld [wMenuScrollPosition], a
+	call HandleScrollingMenu
+	ld a, [wMenuScrollPosition]
+	ld [OBPals + 8 * 6], a
+	ld a, [MenuSelection2]
+	ld [wCurMessageIndex], a
+
+	ld a, [wcf73]
+	cp $2
+	jr z, .exit
+	call Function4484a
+	jr .loop
+
+.exit
+	xor a
+	ret
+; 0x4484a
+
+Function4484a: ; 0x4484a
+	ld hl, MenuData44964
+	call LoadMenuDataHeader
+	call InterpretMenu2
+	call ExitMenu
+	jr c, .exit
+	ld a, [MenuSelection2]
+	dec a
+	ld hl, .JumpTable
+	rst JumpTable
+
+.exit
+	ret
+; 0x44861
+
+.JumpTable
+	dw .ReadMail
+	dw .PutInPack
+	dw .AttachMail
+	dw .Cancel
+
+.ReadMail ; 0x44869
+	call FadeToMenu
+	ld a, [MenuSelection]
+	dec a
+	ld b, a
+	call ReadMailMessage
+	jp ReturnToCallingMenu
+; 0x44877
+
+.PutInPack ; 0x44877
+	ld hl, .MessageLostText
+	call MenuTextBox
+	call YesNoBox
+	call ExitMenu
+	ret c
+	ld a, [MenuSelection]
+	dec a
+	call .GetMailType
+	ld a, $1
+	ld [wItemQuantityChangeBuffer], a
+	ld hl, NumItems
+	call ReceiveItem
+	jr c, .put_in_bag
+	ld hl, .PackFullText
+	jp MenuTextBoxBackup
+
+.put_in_bag
+	ld a, [MenuSelection]
+	dec a
+	ld b, a
+	call DeleteMailFromPC
+	ld hl, .PutAwayText
+	jp MenuTextBoxBackup
+; 0x448ac
+
+.PutAwayText ; 0x448ac
+	text_jump ClearedMailPutAwayText
+	db "@"
+
+.PackFullText ; 0x448b1
+	text_jump MailPackFullText
+	db "@"
+
+.MessageLostText ; 0x448b6
+	text_jump MailMessageLostText
+	db "@"
+
+.GetMailType: ; 0x448bb
+	push af
+	ld a, BANK(sMailboxCount)
+	call GetSRAMBank
+	pop af
+	ld hl, sMailbox1Type
+	ld bc, MAIL_STRUCT_LENGTH
+	call AddNTimes
+	ld a, [hl]
+	ld [CurItem], a
+	jp CloseSRAM
+; 0x448d2
+
+.AttachMail ; 0x448d2
+	call FadeToMenu
+	xor a
+	ld [PartyMenuActionText], a
+	call ClearBGPalettes
+.try_again
+	callba LoadPartyMenuGFX
+	callba InitPartyMenuWithCancel
+	callba InitPartyMenuGFX
+	callba WritePartyMenuTilemap
+	callba PrintPartyMenuText
+	call WaitBGMap
+	call SetPalettes
+	call DelayFrame
+	callba PartyMenuSelect
+	jr c, .exit2
+	ld a, [CurPartySpecies]
+	cp EGG
+	jr z, .egg
+	ld a, MON_ITEM
+	call GetPartyParamLocation
+	ld a, [hl]
+	and a
+	jr z, .attach_mail
+	ld hl, .HoldingMailText
+	call PrintText
+	jr .try_again
+
+.egg
+	ld hl, .EggText
+	call PrintText
+	jr .try_again
+
+.attach_mail
+	ld a, [MenuSelection]
+	dec a
+	ld b, a
+	call MoveMailFromPCToParty
+	ld hl, .MailMovedText
+	call PrintText
+
+.exit2
+	jp ReturnToCallingMenu
+; 0x4493c
+
+.HoldingMailText ; 0x4493c
+	text_jump MailAlreadyHoldingItemText
+	db "@"
+
+.EggText ; 0x44941
+	text_jump MailEggText
+	db "@"
+
+.MailMovedText ; 0x44946
+	text_jump MailMovedFromBoxText
+	db "@"
+
+.Cancel
+	ret
+
+MenuData4494c: ; 0x4494c
+	db %01000000 ; flags
+	db 1, 8 ; start coords
+	db 10, 18 ; end coords
+	dw .MenuData2
+	db 1 ; default option
+
+.MenuData2
+	db %00010000 ; flags
+	db 4, 0 ; rows/columns?
+	db 1 ; horizontal spacing?
+	dbw 0, wMailboxCount ; text pointer
+	dba Function447fb
+	dbw 0,0
+	dbw 0,0
+
+MenuData44964: ; 0x44964
+	db %01000000 ; flags
+	db 0, 0 ; start coords
+	db 9, $d ; end coords
+	dw .MenuData2
+	db 1 ; default option
+
+.MenuData2
+	db %10000000 ; flags
+	db 4 ; items
+	db "READ MAIL@"
+	db "PUT IN PACK@"
+	db "ATTACH MAIL@"
+	db "CANCEL@"
--- /dev/null
+++ b/engine/main_menu.asm
@@ -1,0 +1,1242 @@
+GFX_49c0c: ; 49c0c
+INCBIN "gfx/unknown/049c0c.2bpp"
+; 49cdc
+
+MainMenu: ; 49cdc
+	xor a
+	ld [wc2d7], a
+	call Function49ed0
+	ld b, SCGB_08
+	call GetSGBLayout
+	call SetPalettes
+	ld hl, GameTimerPause
+	res 0, [hl]
+	call Function49da4
+	ld [wcf76], a
+	call Function49e09
+	ld hl, MenuDataHeader_0x49d14
+	call LoadMenuDataHeader
+	call Function49de4
+	call WriteBackup
+	jr c, .quit
+	call ClearTileMap
+	ld a, [MenuSelection]
+	ld hl, Jumptable_49d60
+	rst JumpTable
+	jr MainMenu
+
+.quit
+	ret
+; 49d14
+
+MenuDataHeader_0x49d14: ; 49d14
+	db $40 ; flags
+	db 00, 00 ; start coords
+	db 07, 16 ; end coords
+	dw MenuData2_0x49d1c
+	db 1 ; default option
+; 49d1c
+
+MenuData2_0x49d1c: ; 49d1c
+	db $80 ; flags
+	db 0 ; items
+	dw MainMenuItems
+	dw Function1f79
+	dw MainMenuText
+; 49d20
+
+MainMenuText: ; 49d24
+	db "CONTINUE@"
+	db "NEW GAME@"
+	db "OPTION@"
+	db "MYSTERY GIFT@"
+	db "MOBILE@"
+	db "MOBILE STUDIUM@"
+
+Jumptable_49d60: ; 0x49d60
+	dw MainMenu_Continue
+	dw MainMenu_NewGame
+	dw MainMenu_Options
+	dw MainMenu_MysteryGift
+	dw MainMenu_Mobile
+	dw MainMenu_MobileStudium
+; 0x49d6c
+
+CONTINUE       EQU 0
+NEW_GAME       EQU 1
+OPTION         EQU 2
+MYSTERY_GIFT   EQU 3
+MOBILE         EQU 4
+MOBILE_STUDIUM EQU 5
+
+MainMenuItems:
+
+NewGameMenu: ; 0x49d6c
+	db 2
+	db NEW_GAME
+	db OPTION
+	db $ff
+
+ContinueMenu: ; 0x49d70
+	db 3
+	db CONTINUE
+	db NEW_GAME
+	db OPTION
+	db $ff
+
+MobileMysteryMenu: ; 0x49d75
+	db 5
+	db CONTINUE
+	db NEW_GAME
+	db OPTION
+	db MYSTERY_GIFT
+	db MOBILE
+	db $ff
+
+MobileMenu: ; 0x49d7c
+	db 4
+	db CONTINUE
+	db NEW_GAME
+	db OPTION
+	db MOBILE
+	db $ff
+
+MobileStudiumMenu: ; 0x49d82
+	db 5
+	db CONTINUE
+	db NEW_GAME
+	db OPTION
+	db MOBILE
+	db MOBILE_STUDIUM
+	db $ff
+
+MysteryMobileStudiumMenu: ; 0x49d89
+	db 6
+	db CONTINUE
+	db NEW_GAME
+	db OPTION
+	db MYSTERY_GIFT
+	db MOBILE
+	db MOBILE_STUDIUM
+	db $ff
+
+MysteryMenu: ; 0x49d91
+	db 4
+	db CONTINUE
+	db NEW_GAME
+	db OPTION
+	db MYSTERY_GIFT
+	db $ff
+
+MysteryStudiumMenu: ; 0x49d97
+	db 5
+	db CONTINUE
+	db NEW_GAME
+	db OPTION
+	db MYSTERY_GIFT
+	db MOBILE_STUDIUM
+	db $ff
+
+StudiumMenu: ; 0x49d9e
+	db 4
+	db CONTINUE
+	db NEW_GAME
+	db OPTION
+	db MOBILE_STUDIUM
+	db $ff
+
+
+Function49da4: ; 49da4
+	nop
+	nop
+	nop
+	ld a, [wSaveFileExists]
+	and a
+	jr nz, .next
+	ld a, $0
+	ret
+
+.next
+	ld a, [hCGB]
+	cp $1
+	ld a, $1
+	ret nz
+	ld a, BANK(sNumDailyMysteryGiftPartnerIDs)
+	call GetSRAMBank
+	ld a, [sNumDailyMysteryGiftPartnerIDs]
+	cp $ff
+	call CloseSRAM
+	jr nz, .done
+	ld a, [StatusFlags]
+	bit 7, a
+	ld a, $1
+	jr z, .ok
+	jr .ok
+
+.ok
+	jr .ok2
+
+.ok2
+	ld a, $1
+	ret
+
+.done
+	ld a, [StatusFlags]
+	bit 7, a
+	jr z, .ok3
+	jr .ok3
+
+.ok3
+	jr .ok4
+
+.ok4
+	ld a, $6
+	ret
+; 49de4
+
+Function49de4: ; 49de4
+	call SetUpMenu
+.asm_49de7
+	call Function49e09
+	ld a, [wcfa5]
+	set 5, a
+	ld [wcfa5], a
+	call Function1f1a
+	ld a, [wcf73]
+	cp $2
+	jr z, .asm_49e07
+	cp $1
+	jr z, .asm_49e02
+	jr .asm_49de7
+
+.asm_49e02
+	call PlayClickSFX
+	and a
+	ret
+
+.asm_49e07
+	scf
+	ret
+; 49e09
+
+Function49e09: ; 49e09
+	ld a, [wSaveFileExists]
+	and a
+	ret z
+	xor a
+	ld [hBGMapMode], a
+	call Function49e27
+	ld hl, Options
+	ld a, [hl]
+	push af
+	set 4, [hl]
+	call Function49e3d
+	pop af
+	ld [Options], a
+	ld a, $1
+	ld [hBGMapMode], a
+	ret
+; 49e27
+
+
+Function49e27: ; 49e27
+	call CheckRTCStatus
+	and $80
+	jr nz, .asm_49e39
+	hlcoord 0, 14
+	ld b, $2
+	ld c, $12
+	call TextBox
+	ret
+
+.asm_49e39
+	call SpeechTextBox
+	ret
+; 49e3d
+
+
+Function49e3d: ; 49e3d
+	ld a, [wSaveFileExists]
+	and a
+	ret z
+	call CheckRTCStatus
+	and $80
+	jp nz, Function49e75
+	call UpdateTime
+	call GetWeekday
+	ld b, a
+	decoord 1, 15
+	call Function49e91
+	decoord 4, 16
+	ld a, [hHours]
+	ld c, a
+	callba PrintHour
+	ld [hl], ":"
+	inc hl
+	ld de, hMinutes
+	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+	call PrintNum
+	ret
+; 49e70
+
+; 49e70
+	db "min.@"
+; 49e75
+
+Function49e75: ; 49e75
+	hlcoord 1, 14
+	ld de, .TimeNotSet
+	call PlaceString
+	ret
+; 49e7f
+
+.TimeNotSet ; 49e7f
+	db "TIME NOT SET@"
+; 49e8c
+
+UnknownText_0x49e8c: ; 49e8c
+	text_jump UnknownText_0x1c5182
+	db "@"
+; 49e91
+
+Function49e91: ; 49e91
+	push de
+	ld hl, .Days
+	ld a, b
+	call GetNthString
+	ld d, h
+	ld e, l
+	pop hl
+	call PlaceString
+	ld h, b
+	ld l, c
+	ld de, .Day
+	call PlaceString
+	ret
+; 49ea8
+
+.Days
+	db "SUN@"
+	db "MON@"
+	db "TUES@"
+	db "WEDNES@"
+	db "THURS@"
+	db "FRI@"
+	db "SATUR@"
+.Day
+	db "DAY@"
+; 49ed0
+
+Function49ed0: ; 49ed0
+	xor a
+	ld [hMapAnims], a
+	call ClearTileMap
+	call LoadFontsExtra
+	call LoadStandardFont
+	call ResetTextRelatedRAM
+	ret
+; 49ee0
+
+
+MainMenu_NewGame: ; 49ee0
+	callba NewGame
+	ret
+; 49ee7
+
+MainMenu_Options: ; 49ee7
+	callba OptionsMenu
+	ret
+; 49eee
+
+MainMenu_Continue: ; 49eee
+	callba Continue
+	ret
+; 49ef5
+
+MainMenu_MysteryGift: ; 49ef5
+	callba MysteryGift
+	ret
+; 49efc
+
+MainMenu_Mobile: ; 49efc
+	call ClearBGPalettes
+	ld a, MUSIC_MOBILE_ADAPTER_MENU
+	ld [wMapMusic], a
+	ld de, MUSIC_MOBILE_ADAPTER_MENU
+	call Function4a6c5
+Function49f0a: ; 49f0a
+	call ClearBGPalettes
+	call Function4a3a7
+	call Function4a492
+	call ClearBGPalettes
+Function49f16: ; 49f16
+	call Function4a071
+	ld c, 12
+	call DelayFrames
+	hlcoord 4, 0
+	ld b, $a
+	ld c, $a
+	call Function48cdc
+	hlcoord 6, 2
+	ld de, MobileString1
+	call PlaceString
+	hlcoord 0, 12
+	ld b, $4
+	ld c, $12
+	call TextBox
+	xor a
+	ld de, String_0x49fe9
+	hlcoord 1, 14
+	call PlaceString
+	call Function3200
+	call SetPalettes
+	call Function1bc9
+	ld hl, MenuSelection2
+	ld b, [hl]
+	push bc
+	jr .asm_49f5d
+
+.asm_49f55
+	call Function1bd3
+	ld hl, MenuSelection2
+	ld b, [hl]
+	push bc
+
+.asm_49f5d
+	bit 0, a
+	jr nz, .asm_49f67
+	bit 1, a
+	jr nz, .asm_49f84
+	jr .asm_49f97
+
+.asm_49f67
+	ld hl, MenuSelection2
+	ld a, [hl]
+	cp $1
+	jp z, Function4a098
+	cp $2
+	jp z, Function4a0b9
+	cp $3
+	jp z, Function4a0c2
+	cp $4
+	jp z, Function4a100
+	ld a, $1
+	call Function1ff8
+
+.asm_49f84
+	pop bc
+	call ClearBGPalettes
+	call ClearTileMap
+	ld a, MUSIC_MAIN_MENU
+	ld [wMapMusic], a
+	ld de, MUSIC_MAIN_MENU
+	call Function4a6c5
+	ret
+
+.asm_49f97
+	ld hl, MenuSelection2
+	ld a, [hl]
+	dec a
+	ld hl, MobileStrings2
+	call GetNthString
+	ld d, h
+	ld e, l
+	hlcoord 1, 13
+	ld b, $4
+	ld c, $12
+	call ClearBox
+	hlcoord 1, 14
+	call PlaceString
+	jp .asm_49fb7
+
+.asm_49fb7
+	call Function4a071
+	pop bc
+	ld hl, MenuSelection2
+	ld [hl], b
+	ld b, $a
+	ld c, $1
+	hlcoord 5, 1
+	call ClearBox
+	jp .asm_49f55
+; 49fcc
+
+
+MobileString1: ; 49fcc
+	db   "めいしフ,ルダー"
+	next "あいさつ"
+	next "プロフィール"
+	next "せ", $1e, "い"
+	next "もどる"
+	db   "@"
+; 49fe9
+
+
+MobileStrings2:
+
+String_0x49fe9: ; 49fe9
+	db   "めいし¯つくったり"
+	next "ほぞんしておける フ,ルダーです@"
+; 4a004
+
+String_0x4a004: ; 4a004
+	db   "モバイルたいせんや じぶんのめいしで"
+	next "つかう あいさつ¯つくります@"
+; 4a026
+
+String_0x4a026: ; 4a026
+	db   "あなた%じゅうしょや ねんれいの"
+	next "せ", $1e, "い¯かえられます@"
+; 4a042
+
+String_0x4a042: ; 4a042
+	db  "モバイルセンター", $1d, "せつぞくするとき"
+	next "ひつような こと¯きめます@"
+; 4a062
+
+String_0x4a062: ; 4a062
+	db   "まえ%がめん ", $1d, "もどります"
+	next "@"
+; 4a071
+
+Function4a071: ; 4a071 (12:6071)
+	ld hl, wcfa1
+	ld a, $2
+	ld [hli], a
+	ld a, $5
+	ld [hli], a
+	ld a, $5
+	ld [hli], a
+	ld a, $1
+	ld [hli], a
+	ld [hl], $0
+	set 5, [hl]
+	inc hl
+	xor a
+	ld [hli], a
+	ld a, $20
+	ld [hli], a
+	ld a, $1
+	add $40
+	add $80
+	add $2
+	ld [hli], a
+	ld a, $1
+rept 2
+	ld [hli], a
+endr
+	ret
+
+Function4a098: ; 4a098 (12:6098)
+	ld a, $2
+	call Function1ff8
+	call Function1bee
+	call WaitBGMap
+	call LoadStandardMenuDataHeader
+	callba Function89de0
+	call Call_ExitMenu
+	call Function49351
+	call Function4a485
+	pop bc
+	jp Function49f16
+
+Function4a0b9: ; 4a0b9 (12:60b9)
+	ld a, $2
+	call Function1ff8
+	pop bc
+	jp Function4a4c4
+
+Function4a0c2: ; 4a0c2 (12:60c2)
+	ld a, $2
+	call Function1ff8
+	ld a, BANK(sPlayerData)
+	call GetSRAMBank
+	ld hl, sPlayerData + PlayerName - wPlayerData
+	ld de, PlayerName
+	ld bc, $6
+	call CopyBytes
+	call CloseSRAM
+	callba Function150b9
+	ld c, 2
+	call DelayFrames
+	ld c, $1
+	call InitMobileProfile
+	push af
+	call ClearBGPalettes
+	pop af
+	and a
+	jr nz, .asm_4a0f9
+	callba _SaveData
+.asm_4a0f9
+	ld c, 5
+	call DelayFrames
+	jr asm_4a111
+
+Function4a100: ; 4a100 (12:6100)
+	ld a, $2
+	call Function1ff8
+	call ClearBGPalettes
+	call Function4a13b
+	call ClearBGPalettes
+	call ClearTileMap
+
+asm_4a111: ; 4a111 (12:6111)
+	pop bc
+	call LoadFontsExtra
+	jp Function49f0a
+
+Function4a118: ; 4a118 (12:6118)
+	ld hl, wcfa1
+	ld a, $1
+	ld [hli], a
+	ld a, $d
+	ld [hli], a
+	ld a, $3
+	ld [hli], a
+	ld a, $1
+	ld [hli], a
+	ld [hl], $0
+	set 5, [hl]
+	inc hl
+	xor a
+	ld [hli], a
+	ld a, $20
+	ld [hli], a
+	ld a, $1
+	add $2
+	ld [hli], a
+	ld a, $1
+rept 2
+	ld [hli], a
+endr
+	ret
+
+Function4a13b: ; 4a13b (12:613b)
+	call Function4a3a7
+	call Function4a492
+	call Function4a373
+	ld c, 10
+	call DelayFrames
+
+Function4a149: ; 4a149 (12:6149)
+	hlcoord 1, 2
+	ld b, $6
+	ld c, $10
+	call Function48cdc
+	hlcoord 3, 4
+	ld de, String_4a1ef
+	call PlaceString
+	hlcoord 0, 12
+	ld b, $4
+	ld c, $12
+	call TextBox
+	ld a, [MenuSelection2]
+	dec a
+	ld hl, Strings_4a23d
+	call GetNthString
+	ld d, h
+	ld e, l
+	hlcoord 1, 13
+	ld b, $4
+	ld c, $12
+	call ClearBox
+	hlcoord 1, 14
+	call PlaceString
+	callba Function104148
+	call SetPalettes
+	call Function1bc9
+	ld hl, MenuSelection2
+	ld b, [hl]
+	push bc
+	jr asm_4a19d
+
+Function4a195: ; 4a195 (12:6195)
+	call Function1bd3
+	ld hl, MenuSelection2
+	ld b, [hl]
+	push bc
+
+asm_4a19d: ; 4a19d (12:619d)
+	bit 0, a
+	jr nz, .asm_4a1a7
+	bit 1, a
+	jr nz, .asm_4a1ba
+	jr .asm_4a1bc
+.asm_4a1a7
+	ld hl, MenuSelection2
+	ld a, [hl]
+	cp $1
+	jp z, Function4a20e
+	cp $2
+	jp z, Function4a221
+	ld a, $1
+	call Function1ff8
+.asm_4a1ba
+	pop bc
+	ret
+.asm_4a1bc
+	ld hl, MenuSelection2
+	ld a, [hl]
+	dec a
+	ld hl, Strings_4a23d
+	call GetNthString
+	ld d, h
+	ld e, l
+	hlcoord 1, 13
+	ld b, $4
+	ld c, $12
+	call ClearBox
+	hlcoord 1, 14
+	call PlaceString
+	jr .asm_4a1db
+.asm_4a1db
+	call Function4a373
+	pop bc
+	ld hl, MenuSelection2
+	ld [hl], b
+	lb bc, 6, 1
+	hlcoord 2, 3
+	call ClearBox
+	jp Function4a195
+; 4a1ef (12:61ef)
+
+String_4a1ef: ; 4a1ef
+	db   "モバイルセンター¯えらぶ"
+	next "ログインパスワード¯いれる"
+	next "もどる@"
+; 4a20e
+
+Function4a20e: ; 4a20e (12:620e)
+	ld a, $1
+	call Function1ff8
+	callba Function1719c8
+	call ClearBGPalettes
+	call DelayFrame
+	jr Function4a239
+
+Function4a221: ; 4a221 (12:6221)
+	ld a, $1
+	call Function1ff8
+	call Function4a28a
+	jr c, Function4a239
+	call Function4a373
+	ld a, $2
+	ld [MenuSelection2], a
+	jr .asm_4a235
+.asm_4a235
+	pop bc
+	jp Function4a149
+
+Function4a239: ; 4a239 (12:6239)
+	pop bc
+	jp Function4a13b
+; 4a23d (12:623d)
+
+Strings_4a23d: ; 4a23d
+	db   "いつも せつぞく¯する"
+	next "モバイルセンター¯えらびます@"
+
+	db   "モバイルセンター", $1d, "せつぞくするとき"
+	next "つかうパスワード¯ほぞんできます@"
+
+	db   "まえ%がめん ", $1d, "もどります@"
+
+	db   "@"
+; 4a28a
+
+Function4a28a: ; 4a28a (12:628a)
+	hlcoord 2, 3
+	lb bc, 6, 1
+	ld a, " "
+	call Function4a6d8
+	call Function1bee
+	call WaitBGMap
+	call LoadStandardMenuDataHeader
+	ld a, $5
+	call GetSRAMBank
+	ld a, [$aa4b]
+	call CloseSRAM
+	and a
+	jr z, .asm_4a2df
+	hlcoord 12, 0
+	ld b, $5
+	ld c, $6
+	call Function48cdc
+	hlcoord 14, 1
+	ld de, String_4a34b
+	call PlaceString
+	callba Function104148
+	call Function4a118
+	call Function1bd3
+	push af
+	call PlayClickSFX
+	pop af
+	bit 1, a
+	jr nz, .asm_4a33b
+	ld a, [MenuSelection2]
+	cp $2
+	jr z, .asm_4a2f0
+	cp $3
+	jr z, .asm_4a33b
+.asm_4a2df
+	callba Function11765d
+	call ClearBGPalettes
+	call Call_ExitMenu
+	call LoadFontsExtra
+	scf
+	ret
+.asm_4a2f0
+	call Function1bee
+	ld hl, UnknownText_0x4a358
+	call PrintText
+	hlcoord 14, 7
+	ld b, $3
+	ld c, $4
+	call TextBox
+	callba Function104148
+	ld hl, MenuDataHeader_0x4a362
+	call LoadMenuDataHeader
+	call InterpretMenu2
+	bit 1, a
+	jr nz, .asm_4a338
+	ld a, [MenuSelection2]
+	cp $2
+	jr z, .asm_4a338
+	ld a, $5
+	call GetSRAMBank
+	ld hl, $aa4b
+	xor a
+	ld bc, $11
+	call ByteFill
+	call CloseSRAM
+	ld hl, UnknownText_0x4a35d
+	call PrintText
+	call JoyWaitAorB
+.asm_4a338
+	call ExitMenu
+.asm_4a33b
+	call Call_ExitMenu
+	callba Function104148
+	xor a
+	ret
+; 4a346 (12:6346)
+
+MenuDataHeader_0x4a346: ; 0x4a346
+	db $40 ; flags
+	db 00, 12 ; start coords
+	db 06, 19 ; end coords
+
+String_4a34b: ; 4a34b
+	db   "いれなおす"
+	next "けす"
+	next "もどる@"
+; 4a358
+
+UnknownText_0x4a358: ; 0x4a358
+	; Delete the saved LOG-IN PASSWORD?
+	text_jump UnknownText_0x1c5196
+	db "@"
+; 0x4a35d
+
+UnknownText_0x4a35d: ; 0x4a35d
+	; Deleted the LOG-IN PASSWORD.
+	text_jump UnknownText_0x1c51b9
+	db "@"
+; 0x4a362
+
+MenuDataHeader_0x4a362: ; 0x4a362
+	db $40 ; flags
+	db 07, 14 ; start coords
+	db 11, 19 ; end coords
+	dw MenuData2_0x4a36a
+	db 2 ; default option
+; 0x4a36a
+
+MenuData2_0x4a36a: ; 0x4a36a
+	db $e0 ; flags
+	db 2 ; items
+	db "はい@"
+	db "いいえ@"
+; 0x4a373
+
+Function4a373: ; 4a373 (12:6373)
+	ld hl, wcfa1
+	ld a, $4
+	ld [hli], a
+	ld a, $2
+	ld [hli], a
+	ld a, $3
+	ld [hli], a
+	ld a, $1
+	ld [hli], a
+	ld [hl], $0
+	set 5, [hl]
+	inc hl
+	xor a
+	ld [hli], a
+	ld a, $20
+	ld [hli], a
+	ld a, $1
+	add $40
+	add $80
+	add $2
+	ld [hli], a
+	ld a, $1
+rept 2
+	ld [hli], a
+endr
+	ret
+; 4a39a (12:639a)
+
+Function4a39a: ; 4a39a
+	call Function4a485
+	call Function4a492
+	call Function4a3aa
+	call SetPalettes
+	ret
+; 4a3a7
+
+Function4a3a7: ; 4a3a7 (12:63a7)
+	call Function4a485
+Function4a3aa: ; 4a3aa
+	hlcoord 0, 0
+	lb bc, 3, 1
+	xor a
+	call Function4a6d8
+	lb bc, 1, 1
+	ld a, $1
+	call Function4a6d8
+	lb bc, 1, 1
+	xor a
+	call Function4a6d8
+	lb bc, 1, 1
+	ld a, $1
+	call Function4a6d8
+	lb bc, 4, 1
+	ld a, $2
+	call Function4a6d8
+	lb bc, 1, 1
+	ld a, $3
+	call Function4a6d8
+	lb bc, 1, 1
+	ld a, " "
+	call Function4a6d8
+	hlcoord 1, 0
+	ld a, $1
+	lb bc, 3, 18
+	call Function4a6d8
+	lb bc, 1, 18
+	ld a, $0
+	call Function4a6d8
+	lb bc, 1, 18
+	ld a, $1
+	call Function4a6d8
+	lb bc, 1, 18
+	ld a, $2
+	call Function4a6d8
+	lb bc, 11, 18
+	ld a, " "
+	call Function4a6d8
+	hlcoord 19, 0
+	lb bc, 3, 1
+	ld a, $0
+	call Function4a6d8
+	lb bc, 1, 1
+	ld a, $1
+	call Function4a6d8
+	lb bc, 1, 1
+	xor a
+	call Function4a6d8
+	lb bc, 1, 1
+	ld a, $1
+	call Function4a6d8
+	lb bc, 4, 1
+	ld a, $2
+	call Function4a6d8
+	lb bc, 1, 1
+	ld a, $3
+	call Function4a6d8
+	lb bc, 1, 1
+	ld a, " "
+	call Function4a6d8
+	ret
+; 4a449 (12:6449)
+
+Function4a449: ; 4a449
+	ld bc, 3 * SCREEN_WIDTH
+	ld a, $0
+	hlcoord 0, 0
+	call ByteFill
+	ld bc, 2 * SCREEN_WIDTH
+	ld a, $1
+	call ByteFill
+	ld bc, 2 * SCREEN_WIDTH
+	ld a, $0
+	call ByteFill
+	ld bc, 2 * SCREEN_WIDTH
+	ld a, $1
+	call ByteFill
+	ld bc, SCREEN_WIDTH
+	ld a, $2
+	call ByteFill
+	ld bc, SCREEN_WIDTH
+	ld a, $3
+	call ByteFill
+	ld bc, SCREEN_WIDTH
+	ld a, " "
+	call ByteFill
+	ret
+; 4a485
+
+Function4a485: ; 4a485 (12:6485)
+	ld de, GFX_49c0c
+	ld hl, VTiles2 tile $00
+	lb bc, BANK(GFX_49c0c), $d
+	call Get2bpp
+	ret
+
+Function4a492: ; 4a492 (12:6492)
+	call Function4936e
+	ret
+
+
+MainMenu_MobileStudium: ; 4a496
+	ld a, [StartDay]
+	ld b, a
+	ld a, [StartHour]
+	ld c, a
+	ld a, [StartMinute]
+	ld d, a
+	ld a, [StartSecond]
+	ld e, a
+	push bc
+	push de
+	callba MobileStudium
+	call ClearBGPalettes
+	pop de
+	pop bc
+	ld a, b
+	ld [StartDay], a
+	ld a, c
+	ld [StartHour], a
+	ld a, d
+	ld [StartMinute], a
+	ld a, e
+	ld [StartSecond], a
+	ret
+; 4a4c4
+
+
+Function4a4c4: ; 4a4c4 (12:64c4)
+	call ClearBGPalettes
+	call Function4a3a7
+	call Function4a492
+	call Function4a680
+	call ClearBGPalettes
+	ld c, 20
+	call DelayFrames
+	hlcoord 2, 0
+	ld b, $a
+	ld c, $e
+	call Function48cdc
+	hlcoord 4, 2
+	ld de, String_4a5c5
+	call PlaceString
+	hlcoord 4, 4
+	ld de, String_4a5cd
+	call PlaceString
+	hlcoord 4, 6
+	ld de, String_4a5da
+	call PlaceString
+	hlcoord 4, 8
+	ld de, String_4a5e6
+	call PlaceString
+	hlcoord 4, 10
+	ld de, String_4a5f2
+	call PlaceString
+	hlcoord 0, 12
+	ld b, $4
+	ld c, $12
+	call TextBox
+	xor a
+	ld hl, Strings_4a5f6
+	ld d, h
+	ld e, l
+	hlcoord 1, 14
+	call PlaceString
+	ld a, $1
+	ld hl, Strings_4a5f6
+	call GetNthString
+	ld d, h
+	ld e, l
+	hlcoord 1, 16
+	call PlaceString
+	call Function3200
+	call SetPalettes
+	call Function1bc9
+	ld hl, MenuSelection2
+	ld b, [hl]
+	push bc
+	jr asm_4a54d
+
+Function4a545: ; 4a545 (12:6545)
+	call Function1bd3
+	ld hl, MenuSelection2
+	ld b, [hl]
+	push bc
+
+asm_4a54d: ; 4a54d (12:654d)
+	bit 0, a
+	jr nz, .asm_4a557
+	bit 1, a
+	jr nz, .asm_4a574
+	jr .asm_4a57e
+.asm_4a557
+	ld hl, MenuSelection2
+	ld a, [hl]
+	cp $1
+	jp z, Function4a6ab
+	cp $2
+	jp z, Function4a6ab
+	cp $3
+	jp z, Function4a6ab
+	cp $4
+	jp z, Function4a6ab
+	ld a, $1
+	call Function1ff8
+.asm_4a574
+	pop bc
+	call ClearBGPalettes
+	call ClearTileMap
+	jp Function49f0a
+.asm_4a57e
+	ld hl, MenuSelection2
+	ld a, [hl]
+	dec a
+	add a
+	push af
+	ld hl, Strings_4a5f6
+	call GetNthString
+	ld d, h
+	ld e, l
+	hlcoord 1, 13
+	ld b, $4
+	ld c, $12
+	call ClearBox
+	hlcoord 1, 14
+	call PlaceString
+	pop af
+	inc a
+	ld hl, Strings_4a5f6
+	call GetNthString
+	ld d, h
+	ld e, l
+	hlcoord 1, 16
+	call PlaceString
+	jp Function4a5b0
+
+Function4a5b0: ; 4a5b0 (12:65b0)
+	call Function4a680
+	pop bc
+	ld hl, MenuSelection2
+	ld [hl], b
+	ld b, $a
+	ld c, $1
+	hlcoord 3, 1
+	call ClearBox
+	jp Function4a545
+; 4a5c5 (12:65c5)
+
+String_4a5c5: ; 4a5c5
+	db "じこしょうかい@"
+String_4a5cd: ; 4a5cd
+	db "たいせん ", $4a, "はじまるとき@"
+String_4a5da: ; 4a5da
+	db "たいせん ", $1d, "かったとき@"
+String_4a5e6: ; 4a5e6
+	db "たいせん ", $1d, "まけたとき@"
+String_4a5f2: ; 4a5f2
+	db "もどる@"
+; 4a5f6
+
+Strings_4a5f6: ; 4a5f6
+	db "めいし や ニュース ", $1d, "のせる@"
+	db "あなた%あいさつです@"
+	db "モバイル たいせん", $4a, "はじまるとき@"
+	db "あいて", $1d, "みえる あいさつです@"
+	db "モバイル たいせんで かったとき@"
+	db "あいて", $1d, "みえる あいさつです@"
+	db "モバイル たいせんで まけたとき@"
+	db "あいて", $1d, "みえる あいさつです@"
+	db "まえ%がめん ", $1d, "もどります@"
+	db "@"
+; 4a680
+
+Function4a680: ; 4a680 (12:6680)
+	ld hl, wcfa1
+	ld a, $2
+	ld [hli], a
+	ld a, $3
+	ld [hli], a
+	ld a, $5
+	ld [hli], a
+	ld a, $1
+	ld [hli], a
+	ld [hl], $0
+	set 5, [hl]
+	inc hl
+	xor a
+	ld [hli], a
+	ld a, $20
+	ld [hli], a
+	ld a, $1
+	add $40
+	add $80
+	add $2
+	ld [hli], a
+	ld a, $1
+rept 2
+	ld [hli], a
+endr
+	xor a
+rept 3
+	ld [hli], a
+endr
+	ret
+
+Function4a6ab: ; 4a6ab (12:66ab)
+	ld a, $2
+	call Function1ff8
+	call ClearBGPalettes
+	ld b, SCGB_08
+	call GetSGBLayout
+	callba Function11c1ab
+	pop bc
+	call LoadFontsExtra
+	jp Function4a4c4
+
+Function4a6c5: ; 4a6c5 (12:66c5)
+	ld a, $5
+	ld [MusicFade], a
+	ld a, e
+	ld [MusicFadeIDLo], a
+	ld a, d
+	ld [MusicFadeIDHi], a
+	ld c, 22
+	call DelayFrames
+	ret
+
+Function4a6d8: ; 4a6d8 (12:66d8)
+	push bc
+	push hl
+.asm_4a6da
+	ld [hli], a
+	dec c
+	jr nz, .asm_4a6da
+	pop hl
+	ld bc, $14
+	add hl, bc
+	pop bc
+	dec b
+	jr nz, Function4a6d8
+	ret
--- a/engine/map_objects.asm
+++ b/engine/map_objects.asm
@@ -2,45 +2,50 @@
 INCLUDE "engine/facings.asm"
 
 SpriteMovementData:: ; 4273
-	; function,         facing, ?, ?, ?, ?
-	db SPRITEMOVEFN_00, DOWN,  $01, $02, $00, $00 ; 00
-	db SPRITEMOVEFN_STANDING, DOWN,  $01, $0c, $00, $00 ; 01
-	db SPRITEMOVEFN_RANDOM_WALK_XY, DOWN,  $01, $00, $00, $00 ; 02
-	db SPRITEMOVEFN_SLOW_RANDOM_SPIN, DOWN,  $01, $00, $00, $00 ; 03
-	db SPRITEMOVEFN_RANDOM_WALK_Y, DOWN,  $01, $00, $00, $00 ; 04
-	db SPRITEMOVEFN_RANDOM_WALK_X, DOWN,  $01, $00, $00, $00 ; 05
-	db SPRITEMOVEFN_STANDING, DOWN,  $01, $00, $00, $00 ; 06
-	db SPRITEMOVEFN_STANDING, UP,    $01, $00, $00, $00 ; 07
-	db SPRITEMOVEFN_STANDING, LEFT,  $01, $00, $00, $00 ; 08
-	db SPRITEMOVEFN_STANDING, RIGHT, $01, $00, $00, $00 ; 09
-	db SPRITEMOVEFN_FAST_RANDOM_SPIN, DOWN,  $01, $00, $00, $00 ; 0a
-	db SPRITEMOVEFN_OBEY_DPAD, DOWN,  $01, $02, $00, $00 ; 0b
-	db SPRITEMOVEFN_08, DOWN,  $01, $00, $00, $00 ; 0c
-	db SPRITEMOVEFN_09, DOWN,  $01, $00, $00, $00 ; 0d
-	db SPRITEMOVEFN_0A, DOWN,  $01, $00, $00, $00 ; 0e
-	db SPRITEMOVEFN_0B, DOWN,  $01, $00, $00, $00 ; 0f
-	db SPRITEMOVEFN_0C, DOWN,  $01, $00, $00, $00 ; 10
-	db SPRITEMOVEFN_0D, DOWN,  $01, $00, $00, $00 ; 11
-	db SPRITEMOVEFN_0E, DOWN,  $01, $00, $00, $00 ; 12
-	db SPRITEMOVEFN_FOLLOW, DOWN,  $01, $02, $00, $00 ; 13
-	db SPRITEMOVEFN_SCRIPTED, DOWN,  $01, $02, $00, $00 ; 14
-	db SPRITEMOVEFN_BIG_SNORLAX, DOWN,  $09, $2e, $01, $c0 ; 15
-	db SPRITEMOVEFN_BOUNCE, DOWN,  $0a, $2e, $00, $00 ; 16
-	db SPRITEMOVEFN_STANDING, DOWN,  $01, $0c, $00, $00 ; 17
-	db SPRITEMOVEFN_STANDING, DOWN,  $01, $2e, $10, $00 ; 18
-	db SPRITEMOVEFN_STRENGTH, DOWN,  $01, $2e, $00, $40 ; 19
-	db SPRITEMOVEFN_FOLLOWNOTEXACT, DOWN,  $01, $02, $00, $00 ; 1a
-	db SPRITEMOVEFN_13, DOWN,  $00, $8e, $01, $00 ; 1b
-	db SPRITEMOVEFN_14, DOWN,  $08, $8e, $02, $00 ; 1c
-	db SPRITEMOVEFN_17, DOWN,  $00, $82, $00, $00 ; 1d
-	db SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE, LEFT,  $01, $00, $00, $00 ; 1e
-	db SPRITEMOVEFN_SPIN_CLOCKWISE, RIGHT, $01, $00, $00, $00 ; 1f
-	db SPRITEMOVEFN_STRENGTH, DOWN,  $0c, $2e, $01, $c0 ; 20
-	db SPRITEMOVEFN_STRENGTH, DOWN,  $0d, $2e, $01, $c0 ; 21
-	db SPRITEMOVEFN_1A, DOWN,  $0e, $8e, $01, $00 ; 22
-	db SPRITEMOVEFN_1B, DOWN,  $0f, $8e, $02, $00 ; 23
-	db SPRITEMOVEFN_RANDOM_WALK_XY, DOWN,  $01, $00, $00, $20 ; 24
-	db SPRITEMOVEFN_00, DOWN,  $01, $00, $00, $00 ; 25
+
+sprite_movement_data: macro
+	db \1, \2, \3, \4, \5
+	dn \6, 0
+	endm
+	; function,                                              facing, action,              flags1, flags2, palette flags
+	sprite_movement_data SPRITEMOVEFN_00,                    DOWN,   PERSON_ACTION_STAND,    $02,    $00,    %0000 ; 00
+	sprite_movement_data SPRITEMOVEFN_STANDING,              DOWN,   PERSON_ACTION_STAND,    $0c,    $00,    %0000 ; 01
+	sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY,        DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 02
+	sprite_movement_data SPRITEMOVEFN_SLOW_RANDOM_SPIN,      DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 03
+	sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_Y,         DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 04
+	sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_X,         DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 05
+	sprite_movement_data SPRITEMOVEFN_STANDING,              DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 06
+	sprite_movement_data SPRITEMOVEFN_STANDING,              UP,     PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 07
+	sprite_movement_data SPRITEMOVEFN_STANDING,              LEFT,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 08
+	sprite_movement_data SPRITEMOVEFN_STANDING,              RIGHT,  PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 09
+	sprite_movement_data SPRITEMOVEFN_FAST_RANDOM_SPIN,      DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 0a
+	sprite_movement_data SPRITEMOVEFN_OBEY_DPAD,             DOWN,   PERSON_ACTION_STAND,    $02,    $00,    %0000 ; 0b
+	sprite_movement_data SPRITEMOVEFN_08,                    DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 0c
+	sprite_movement_data SPRITEMOVEFN_09,                    DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 0d
+	sprite_movement_data SPRITEMOVEFN_0A,                    DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 0e
+	sprite_movement_data SPRITEMOVEFN_0B,                    DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 0f
+	sprite_movement_data SPRITEMOVEFN_0C,                    DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 10
+	sprite_movement_data SPRITEMOVEFN_0D,                    DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 11
+	sprite_movement_data SPRITEMOVEFN_0E,                    DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 12
+	sprite_movement_data SPRITEMOVEFN_FOLLOW,                DOWN,   PERSON_ACTION_STAND,    $02,    $00,    %0000 ; 13
+	sprite_movement_data SPRITEMOVEFN_SCRIPTED,              DOWN,   PERSON_ACTION_STAND,    $02,    $00,    %0000 ; 14
+	sprite_movement_data SPRITEMOVEFN_BIG_SNORLAX,           DOWN,   PERSON_ACTION_09,    $2e,    $01,    %1100 ; 15
+	sprite_movement_data SPRITEMOVEFN_BOUNCE,                DOWN,   PERSON_ACTION_0A,    $2e,    $00,    %0000 ; 16
+	sprite_movement_data SPRITEMOVEFN_STANDING,              DOWN,   PERSON_ACTION_STAND,    $0c,    $00,    %0000 ; 17
+	sprite_movement_data SPRITEMOVEFN_STANDING,              DOWN,   PERSON_ACTION_STAND,    $2e,    $10,    %0000 ; 18
+	sprite_movement_data SPRITEMOVEFN_STRENGTH,              DOWN,   PERSON_ACTION_STAND,    $2e,    $00,    %0100 ; 19
+	sprite_movement_data SPRITEMOVEFN_FOLLOWNOTEXACT,        DOWN,   PERSON_ACTION_STAND,    $02,    $00,    %0000 ; 1a
+	sprite_movement_data SPRITEMOVEFN_SHADOW,                DOWN,   PERSON_ACTION_00,    $8e,    $01,    %0000 ; 1b
+	sprite_movement_data SPRITEMOVEFN_EMOTE,                 DOWN,   PERSON_ACTION_EMOTE,    $8e,    $02,    %0000 ; 1c
+	sprite_movement_data SPRITEMOVEFN_SCREENSHAKE,           DOWN,   PERSON_ACTION_00,    $82,    $00,    %0000 ; 1d
+	sprite_movement_data SPRITEMOVEFN_SPIN_COUNTERCLOCKWISE, LEFT,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 1e
+	sprite_movement_data SPRITEMOVEFN_SPIN_CLOCKWISE,        RIGHT,  PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 1f
+	sprite_movement_data SPRITEMOVEFN_STRENGTH,              DOWN,   PERSON_ACTION_0C,    $2e,    $01,    %1100 ; 20
+	sprite_movement_data SPRITEMOVEFN_STRENGTH,              DOWN,   PERSON_ACTION_0D,    $2e,    $01,    %1100 ; 21
+	sprite_movement_data SPRITEMOVEFN_BOULDERDUST,           DOWN,   PERSON_ACTION_0E,    $8e,    $01,    %0000 ; 22
+	sprite_movement_data SPRITEMOVEFN_GRASS,                 DOWN,   PERSON_ACTION_0F,    $8e,    $02,    %0000 ; 23
+	sprite_movement_data SPRITEMOVEFN_RANDOM_WALK_XY,        DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0010 ; 24
+	sprite_movement_data SPRITEMOVEFN_00,                    DOWN,   PERSON_ACTION_STAND,    $00,    $00,    %0000 ; 25
 ; 4357
 
 
@@ -84,7 +89,7 @@
 	res 6, [hl]
 	ld a, [XCoord]
 	ld e, a
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld a, [hl]
 	add 1
@@ -94,7 +99,7 @@
 	jr nc, .ok
 	ld a, [YCoord]
 	ld e, a
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld a, [hl]
 	add 1
@@ -110,7 +115,7 @@
 	set 6, [hl]
 	ld a, [XCoord]
 	ld e, a
-	ld hl, OBJECT_20
+	ld hl, OBJECT_INIT_X
 	add hl, bc
 	ld a, [hl]
 	add 1
@@ -120,7 +125,7 @@
 	jr nc, .ok2
 	ld a, [YCoord]
 	ld e, a
-	ld hl, OBJECT_21
+	ld hl, OBJECT_INIT_Y
 	add hl, bc
 	ld a, [hl]
 	add 1
@@ -151,16 +156,18 @@
 ; 43f3
 
 Function43f3: ; 43f3
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
 	ld a, [hl]
 	and a
 	jr z, .zero
+
 	ld hl, OBJECT_FLAGS2
 	add hl, bc
 	bit 5, [hl]
 	jr nz, .bit5
-	cp 1
+
+	cp STEP_TYPE_STANDING
 	jr z, .one
 	jr .ok
 
@@ -173,12 +180,13 @@
 
 .one
 	call Function47dd
-	ld hl, OBJECT_09
+
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
 	ld a, [hl]
 	and a
 	ret z
-	cp 1
+	cp STEP_TYPE_STANDING
 	ret z
 
 .ok
@@ -193,13 +201,13 @@
 Function4427: ; 4427
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	bit 0, [hl]
-	jr nz, Function44a3
+	bit INVISIBLE, [hl]
+	jr nz, SetFacingStanding
 
 	ld hl, OBJECT_FLAGS2
 	add hl, bc
 	bit 6, [hl]
-	jr nz, Function44a3
+	jr nz, SetFacingStanding
 
 	bit 5, [hl]
 	jr nz, Function4448
@@ -211,11 +219,8 @@
 Function4440: ; 4440
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	bit 0, [hl]
-	jr nz, Function44a3
-	; fallthrough
-; 4448
-
+	bit INVISIBLE, [hl]
+	jr nz, SetFacingStanding
 Function4448: ; 4448
 	ld de, Pointers445f + 2
 	jr Function444d
@@ -222,7 +227,8 @@
 ; 444d
 
 Function444d: ; 444d
-	ld hl, OBJECT_11
+; call [4 * ObjectStructs[ObjInd, OBJECT_ACTION] + de]
+	ld hl, OBJECT_ACTION
 	add hl, bc
 	ld a, [hl]
 	ld l, a
@@ -239,52 +245,35 @@
 ; 445f
 
 Pointers445f: ; 445f
-	dw Function44a3 ; 00
-	dw Function44a3 ; 01
-	dw Function44b5 ; 02
-	dw Function44aa ; 03
-	dw Function44c1 ; 04
-	dw Function44aa ; 05
-	dw Function4508 ; 06
-	dw Function44aa ; 07
-	dw Function4529 ; 08
-	dw Function44aa ; 09
-	dw Function4539 ; 0a
-	dw Function44a3 ; 0b
-	dw Function456e ; 0c
-	dw Function456e ; 0d
-	dw Function457b ; 0e
-	dw Function44a3 ; 0f
-	dw Function4582 ; 10
-	dw Function4582 ; 11
-	dw Function4589 ; 12
-	dw Function4589 ; 13
-	dw Function4590 ; 14
-	dw Function45a4 ; 15
-	dw Function45ab ; 16
-	dw Function44aa ; 17
-	dw Function45be ; 18
-	dw Function45be ; 19
-	dw Function45c5 ; 1a
-	dw Function45c5 ; 1b
-	dw Function45da ; 1c
-	dw Function44a3 ; 1d
-	dw Function45ed ; 1e
-	dw Function44a3 ; 1f
-	dw Function44e4 ; 20
-	dw Function44aa ; 21
+	dw SetFacingStanding, SetFacingStanding ; 00
+	dw Function44b5,      SetFacingCurrent ; 01 standing?
+	dw Function44c1,      SetFacingCurrent ; 02 walking?
+	dw Function4508,      SetFacingCurrent ; 03 bumping?
+	dw Function4529,      SetFacingCurrent ; 04
+	dw Function4539,      SetFacingStanding ; 05
+	dw Function456e,      Function456e ; 06
+	dw Function457b,      SetFacingStanding ; 07
+	dw Function4582,      Function4582 ; 08
+	dw Function4589,      Function4589 ; 09
+	dw Function4590,      Function45a4 ; 0a
+	dw Function45ab,      SetFacingCurrent ; 0c
+	dw Function45be,      Function45be ; 0b
+	dw Function45c5,      Function45c5 ; 0d
+	dw Function45da,      SetFacingStanding ; 0e
+	dw Function45ed,      SetFacingStanding ; 0f
+	dw Function44e4,      SetFacingCurrent ; 10
 ; 44a3
 
-Function44a3: ; 44a3
+SetFacingStanding: ; 44a3
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
-	ld [hl], -1
+	ld [hl], STANDING
 	ret
 ; 44aa
 
-Function44aa: ; 44aa
+SetFacingCurrent: ; 44aa
 	call GetSpriteDirection
-	or 0
+	or 0 ; useless
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
 	ld [hl], a
@@ -297,26 +286,29 @@
 	ld a, [hl]
 	and 1
 	jr nz, Function44c1
-	jp Function44aa
+	jp SetFacingCurrent
 ; 44c1
 
 Function44c1: ; 44c1
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	bit 3, [hl]
-	jp nz, Function44aa
-	ld hl, OBJECT_12
+	bit SLIDING, [hl]
+	jp nz, SetFacingCurrent
+
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld a, [hl]
 	inc a
 	and %00001111
 	ld [hl], a
+
 	rrca
 	rrca
 	and %00000011
 	ld d, a
+
 	call GetSpriteDirection
-	or 0
+	or 0 ; useless
 	or d
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
@@ -327,20 +319,23 @@
 Function44e4: ; 44e4
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	bit 3, [hl]
-	jp nz, Function44aa
-	ld hl, OBJECT_12
+	bit SLIDING, [hl]
+	jp nz, SetFacingCurrent
+
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld a, [hl]
 	add 2
 	and %00001111
 	ld [hl], a
+
 	rrca
 	rrca
 	and %00000011
 	ld d, a
+
 	call GetSpriteDirection
-	or 0
+	or 0 ; useless
 	or d
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
@@ -351,11 +346,13 @@
 Function4508: ; 4508
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	bit 3, [hl]
-	jp nz, Function44aa
-	ld hl, OBJECT_12
+	bit SLIDING, [hl]
+	jp nz, SetFacingCurrent
+
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	inc [hl]
+
 	ld a, [hl]
 	rrca
 	rrca
@@ -362,8 +359,9 @@
 	rrca
 	and %00000011
 	ld d, a
+
 	call GetSpriteDirection
-	or 0
+	or 0 ; useless
 	or d
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
@@ -376,7 +374,7 @@
 	ld hl, OBJECT_FACING
 	add hl, bc
 	ld a, [hl]
-	or 0
+	or 0 ; useless
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
 	ld [hl], a
@@ -385,15 +383,16 @@
 
 Function4539: ; 4539
 	call Function453f
-	jp Function44a3
+	jp SetFacingStanding
 ; 453f
 
 Function453f: ; 453f
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld a, [hl]
 	and %11110000
 	ld e, a
+
 	ld a, [hl]
 	inc a
 	and %00001111
@@ -400,6 +399,7 @@
 	ld d, a
 	cp 4
 	jr c, .ok
+
 	ld d, 0
 	ld a, e
 	add $10
@@ -410,6 +410,7 @@
 	ld a, d
 	or e
 	ld [hl], a
+
 	swap e
 	ld d, 0
 	ld hl, .Directions
@@ -422,7 +423,7 @@
 ; 456a
 
 .Directions ; 456a
-	db DOWN << 2, RIGHT << 2, UP << 2, LEFT << 2
+	db OW_DOWN, OW_RIGHT, OW_UP, OW_LEFT
 ; 456e
 
 Function456e: ; 456e
@@ -439,14 +440,14 @@
 Function457b: ; 457b
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
-	ld [hl], $15
+	ld [hl], FACING_15
 	ret
 ; 4582
 
-Function4582: ; 4582
+Function4582: ; 4582 emote
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
-	ld [hl], $14
+	ld [hl], FACING_EMOTE
 	ret
 ; 4589
 
@@ -453,12 +454,12 @@
 Function4589: ; 4589
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
-	ld [hl], $17
+	ld [hl], FACING_17
 	ret
 ; 4590
 
 Function4590: ; 4590
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld a, [hl]
 	inc a
@@ -468,7 +469,7 @@
 	jr z, Function45a4
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
-	ld [hl], $4
+	ld [hl], FACING_04
 	ret
 ; 45a4
 
@@ -480,7 +481,7 @@
 ; 45ab
 
 Function45ab: ; 45ab
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld a, [hl]
 	inc a
@@ -498,18 +499,18 @@
 Function45be: ; 45be
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
-	ld [hl], $16
+	ld [hl], FACING_16
 	ret
 ; 45c5
 
 Function45c5: ; 45c5
 	ld a, [VariableSprites + SPRITE_BIG_DOLL - SPRITE_VARS]
-	ld d, $17
+	ld d, FACING_17
 	cp SPRITE_BIG_SNORLAX
 	jr z, .ok
 	cp SPRITE_BIG_LAPRAS
 	jr z, .ok
-	ld d, $16
+	ld d, FACING_16
 
 .ok
 	ld hl, OBJECT_FACING_STEP
@@ -519,7 +520,7 @@
 ; 45da
 
 Function45da: ; 45da
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	inc [hl]
 	ld a, [hl]
@@ -527,9 +528,9 @@
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
 	and 2
-	ld a, $1c
+	ld a, FACING_1C
 	jr z, .ok
-	inc a
+	inc a ; FACING_1D
 .ok
 	ld [hl], a
 	ret
@@ -536,7 +537,7 @@
 ; 45ed
 
 Function45ed: ; 45ed
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	inc [hl]
 	ld a, [hl]
@@ -543,9 +544,9 @@
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
 	and 4
-	ld a, $1e
+	ld a, FACING_1E
 	jr z, .ok
-	inc a
+	inc a ; FACING_1F
 
 .ok
 	ld [hl], a
@@ -554,49 +555,49 @@
 
 Function4600: ; 4600
 
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld a, [hl]
-	ld hl, OBJECT_NEXT_MAP_X
+	ld hl, OBJECT_MAP_X
 	add hl, bc
 	ld [hl], a
 
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld a, [hl]
-	ld hl, OBJECT_NEXT_MAP_Y
+	ld hl, OBJECT_MAP_Y
 	add hl, bc
 	ld [hl], a
 
-	ld hl, OBJECT_STANDING_TILE
+	ld hl, OBJECT_NEXT_TILE
 	add hl, bc
 	ld a, [hl]
-	ld hl, OBJECT_NEXT_TILE
+	ld hl, OBJECT_STANDING_TILE
 	add hl, bc
 	ld [hl], a
 
-	call Function4661
-	ld hl, OBJECT_STANDING_TILE
+	call SetTallGrassFlags
+	ld hl, OBJECT_NEXT_TILE
 	add hl, bc
 	ld a, [hl]
 
-	call Function4679
+	call UselessAndA
 	ret
 ; 462a
 
 Function462a: ; 462a
 
-	ld hl, OBJECT_NEXT_MAP_X
+	ld hl, OBJECT_MAP_X
 	add hl, bc
 	ld a, [hl]
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld [hl], a
 
-	ld hl, OBJECT_NEXT_MAP_Y
+	ld hl, OBJECT_MAP_Y
 	add hl, bc
 	ld a, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld [hl], a
 
@@ -606,30 +607,30 @@
 Function463f: ; 463f
 	ld hl, OBJECT_FLAGS2
 	add hl, bc
-	bit 3, [hl]
+	bit 3, [hl] ; is current tile grass?
 	jr z, .ok
-	ld hl, OBJECT_STANDING_TILE
+	ld hl, OBJECT_NEXT_TILE
 	add hl, bc
 	ld a, [hl]
-	call Function4661
+	call SetTallGrassFlags
 
 .ok
-	ld hl, OBJECT_STANDING_TILE
+	ld hl, OBJECT_NEXT_TILE
 	add hl, bc
 	ld a, [hl]
-	call Function4679
-	ret c
-	ld hl, OBJECT_NEXT_TILE
+	call UselessAndA
+	ret c ; never happens
+	ld hl, OBJECT_STANDING_TILE
 	add hl, bc
 	ld a, [hl]
-	call Function4679
+	call UselessAndA
 	ret
 ; 4661
 
-Function4661: ; 4661
+SetTallGrassFlags: ; 4661
 	call CheckSuperTallGrassTile
 	jr z, .set
-	call Function1875
+	call CheckGrassTile
 	jr c, .reset
 
 .set
@@ -645,7 +646,7 @@
 	ret
 ; 4679
 
-Function4679: ; 4679
+UselessAndA: ; 4679
 	and a
 	ret
 ; 467b
@@ -652,7 +653,7 @@
 
 Function467b: ; 467b
 	xor a
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld [hl], a
 	ld hl, OBJECT_MOVEMENT_BYTE_INDEX
@@ -660,7 +661,7 @@
 rept 3
 	ld [hli], a
 endr
-	ld [hl], a
+	ld [hl], a ; OBJECT_30
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
@@ -673,8 +674,8 @@
 	ld [hl], a
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	bit 2, [hl]
-	jr nz, .ok
+	bit FIXED_FACING, [hl]
+	jr nz, GetNextTile
 
 rept 2
 	add a
@@ -684,12 +685,7 @@
 	add hl, bc
 	ld [hl], a
 
-.ok
-	; fallthrough
-; 46a6
-
-Function46a6: ; 46a6
-
+GetNextTile: ; 46a6
 	call GetStepVector
 
 	ld hl, OBJECT_STEP_DURATION
@@ -697,30 +693,30 @@
 	ld [hl], a
 
 	ld a, d
-	call Function4730
-	ld hl, OBJECT_NEXT_MAP_X
+	call GetStepVectorSign
+	ld hl, OBJECT_MAP_X
 	add hl, bc
 	add [hl]
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld [hl], a
 	ld d, a
 
 	ld a, e
-	call Function4730
-	ld hl, OBJECT_NEXT_MAP_Y
+	call GetStepVectorSign
+	ld hl, OBJECT_MAP_Y
 	add hl, bc
 	add [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld [hl], a
 	ld e, a
 
 	push bc
-	call Function2a3c
+	call GetCoordTile
 	pop bc
 
-	ld hl, OBJECT_STANDING_TILE
+	ld hl, OBJECT_NEXT_TILE
 	add hl, bc
 	ld [hl], a
 
@@ -727,7 +723,7 @@
 	ret
 ; 46d7
 
-Function46d7: ; 46d7
+AddStepVector: ; 46d7
 
 	call GetStepVector
 
@@ -787,13 +783,15 @@
 	db  4,  0,  4, 4
 ; 4730
 
-Function4730: ; 4730
+GetStepVectorSign: ; 4730
 	add a
-	ret z
+	ret z  ; 0 or 128
+
 	ld a, 1
-	ret nc
+	ret nc ; 1 - 127
+
 	ld a, -1
-	ret
+	ret    ; 129 - 255
 ; 4738
 
 Function4738: ; 4738
@@ -801,15 +799,15 @@
 	add hl, bc
 	ld a, [hl]
 	and %00000011
-	ld [wd151], a
-	call Function46d7
-	ld a, [wd14e]
+	ld [wPlayerStepDirection], a
+	call AddStepVector
+	ld a, [wPlayerStepVectorX]
 	add d
-	ld [wd14e], a
-	ld a, [wd14f]
+	ld [wPlayerStepVectorX], a
+	ld a, [wPlayerStepVectorY]
 	add e
-	ld [wd14f], a
-	ld hl, wd150
+	ld [wPlayerStepVectorY], a
+	ld hl, wPlayerStepFlags
 	set 5, [hl]
 	ret
 ; 4759
@@ -847,7 +845,7 @@
 	ret
 ; 4780
 
-ClearObjectStructField27: ; 4780
+ClearObjectMovementByteIndex: ; 4780
 	ld hl, OBJECT_MOVEMENT_BYTE_INDEX
 	add hl, bc
 	ld [hl], 0
@@ -854,7 +852,7 @@
 	ret
 ; 4787
 
-IncrementObjectStructField27: ; 4787
+IncrementObjectMovementByteIndex: ; 4787
 	ld hl, OBJECT_MOVEMENT_BYTE_INDEX
 	add hl, bc
 	inc [hl]
@@ -861,7 +859,7 @@
 	ret
 ; 478d
 
-DecrementObjectStructField27: ; 478d
+DecrementObjectMovementByteIndex: ; 478d
 	ld hl, OBJECT_MOVEMENT_BYTE_INDEX
 	add hl, bc
 	dec [hl]
@@ -868,7 +866,7 @@
 	ret
 ; 4793
 
-JumptoObjectStructField27: ; 4793
+MovementAnonymousJumptable: ; 4793
 	ld hl, OBJECT_MOVEMENT_BYTE_INDEX
 	add hl, bc
 	ld a, [hl]
@@ -891,7 +889,8 @@
 	ret
 ; 47a8
 
-JumptoObjectStructField28: ; 47a8
+Object28AnonymousJumptable: ; 47a8
+; anonymous jumptable
 	ld hl, OBJECT_28
 	add hl, bc
 	ld a, [hl]
@@ -915,23 +914,23 @@
 ; 47bc
 
 Function47bc: ; 47bc
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld d, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld e, [hl]
 	push bc
-	call Function2a3c
+	call GetCoordTile
 	pop bc
-	ld hl, OBJECT_STANDING_TILE
+	ld hl, OBJECT_NEXT_TILE
 	add hl, bc
 	ld [hl], a
 	call Function4600
 	call Function467b
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 47dd
 
@@ -964,15 +963,15 @@
 	dw .Script ; 10
 	dw .Strength ; 11
 	dw .FollowNotExact ; 12
-	dw .Movement13 ; 13
-	dw .Movement14 ; 14
+	dw .MovementShadow ; 13
+	dw .MovementEmote ; 14
 	dw .MovementBigStanding ; 15
 	dw .MovementBouncing ; 16
-	dw .Movement17 ; 17
+	dw .MovementScreenShake ; 17
 	dw .MovementSpinClockwise ; 18
 	dw .MovementSpinCounterclockwise ; 19
-	dw .Movement1a ; 1a
-	dw .Movement1b ; 1b
+	dw .MovementBoulderDust ; 1a
+	dw .MovementShakingGrass ; 1b
 ; 4821
 
 .Null_00: ; 4821
@@ -1008,7 +1007,7 @@
 	ld hl, OBJECT_FACING
 	add hl, bc
 	ld [hl], a
-	jp Function4b1d
+	jp RandomStepDuration_Slow
 ; 4851
 
 .RandomSpin2: ; 4851
@@ -1026,18 +1025,18 @@
 
 .keep
 	ld [hl], a
-	jp Function4b26
+	jp RandomStepDuration_Fast
 ; 4869
 
 .Standing: ; 4869
 	call Function462a
 	call Function467b
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 1
-	ld hl, OBJECT_09
+	ld [hl], PERSON_ACTION_STAND
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 5
+	ld [hl], STEP_TYPE_05
 	ret
 ; 487c
 
@@ -1088,13 +1087,13 @@
 ; 48ac
 
 .Strength: ; 48ac
-	call JumptoObjectStructField27
+	call MovementAnonymousJumptable
 	dw .Strength_Start
 	dw .Strength_Stop
 ; 48b3
 
 .Strength_Start: ; 48b3
-	ld hl, OBJECT_STANDING_TILE
+	ld hl, OBJECT_NEXT_TILE
 	add hl, bc
 	ld a, [hl]
 	call CheckPitTile
@@ -1106,7 +1105,7 @@
 	res 2, [hl]
 	jr z, .ok
 
-	ld hl, OBJECT_32
+	ld hl, OBJECT_RANGE
 	add hl, bc
 	ld a, [hl]
 	and %00000011
@@ -1117,11 +1116,11 @@
 
 	ld de, SFX_STRENGTH
 	call PlaySFX
-	call Function5538
+	call SpawnStrengthBoulderDust
 	call Function463f
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $f
+	ld [hl], STEP_TYPE_0F
 	ret
 
 .ok2
@@ -1134,9 +1133,7 @@
 	ret
 
 .on_pit
-	call IncrementObjectStructField27
-	; fallthrough
-; 48f8
+	call IncrementObjectMovementByteIndex
 
 .Strength_Stop: ; 48f8
 	ld hl, OBJECT_DIRECTION_WALKING
@@ -1146,15 +1143,15 @@
 ; 48ff
 
 .FollowNotExact: ; 48ff
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld d, [hl]
 
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld e, [hl]
 
-	ld hl, OBJECT_32
+	ld hl, OBJECT_RANGE
 	add hl, bc
 	ld a, [hl]
 
@@ -1166,7 +1163,7 @@
 	cp STANDING
 	jr z, .standing
 
-	ld hl, OBJECT_NEXT_MAP_X
+	ld hl, OBJECT_MAP_X
 	add hl, bc
 	ld a, [hl]
 	cp d
@@ -1180,7 +1177,7 @@
 	jr .done
 
 .equal
-	ld hl, OBJECT_NEXT_MAP_Y
+	ld hl, OBJECT_MAP_Y
 	add hl, bc
 	ld a, [hl]
 	cp e
@@ -1207,9 +1204,9 @@
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 1
+	ld [hl], PERSON_ACTION_STAND
 	ret
 ; 4958
 
@@ -1218,12 +1215,12 @@
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 9
-	ld hl, OBJECT_09
+	ld [hl], PERSON_ACTION_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 4
+	ld [hl], STEP_TYPE_04
 	ret
 ; 496e
 
@@ -1232,17 +1229,17 @@
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 10
-	ld hl, OBJECT_09
+	ld [hl], PERSON_ACTION_0A
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 4
+	ld [hl], STEP_TYPE_04
 	ret
 ; 4984
 
 .MovementSpinCounterclockwise: ; 4984
-	call JumptoObjectStructField27
+	call MovementAnonymousJumptable
 	dw .MovementSpinInit
 	dw .MovementSpinRepeat
 	dw .MovementSpinTurnLeft
@@ -1249,7 +1246,7 @@
 ; 498d
 
 .MovementSpinClockwise: ; 498d
-	call JumptoObjectStructField27
+	call MovementAnonymousJumptable
 	dw .MovementSpinInit
 	dw .MovementSpinRepeat
 	dw .MovementSpinTurnRight
@@ -1257,15 +1254,12 @@
 
 .MovementSpinInit: ; 4996
 	call Function467b
-	call IncrementObjectStructField27
-	; fallthrough
-; 499c
-
+	call IncrementObjectMovementByteIndex
 .MovementSpinRepeat: ; 499c
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 1
-	ld hl, OBJECT_32
+	ld [hl], PERSON_ACTION_STAND
+	ld hl, OBJECT_RANGE
 	add hl, bc
 	ld a, [hl]
 	ld a, $10
@@ -1272,10 +1266,10 @@
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	ld [hl], a
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 3
-	call IncrementObjectStructField27
+	ld [hl], STEP_TYPE_03
+	call IncrementObjectMovementByteIndex
 	ret
 ; 49b8
 
@@ -1286,7 +1280,7 @@
 ; 49c0
 
 .DirectionData_Counterclockwise ; 49c0
-	db RIGHT << 2, LEFT << 2, DOWN << 2, UP << 2
+	db OW_RIGHT, OW_LEFT, OW_DOWN, OW_UP
 ; 49c4
 
 .MovementSpinTurnRight: ; 49c4
@@ -1296,7 +1290,7 @@
 ; 49cc
 
 .DirectionData_Clockwise ; 49cc
-	db LEFT << 2, RIGHT << 2, UP << 2, DOWN << 2
+	db OW_LEFT, OW_RIGHT, OW_UP, OW_DOWN
 ; 49d0
 
 .MovementSpinNextFacing: ; 49d0
@@ -1313,15 +1307,15 @@
 	ld a, [hl]
 	pop hl
 	ld [hl], a
-	call DecrementObjectStructField27
+	call DecrementObjectMovementByteIndex
 	ret
 ; 49e5
 
-.Movement13: ; 49e5
-	call ._Movement13_14_1a_1b
-	ld hl, OBJECT_11
+.MovementShadow: ; 49e5
+	call ._MovementShadow_Grass_Emote_BoulderDust
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $7
+	ld [hl], PERSON_ACTION_07
 	ld hl, OBJECT_STEP_DURATION
 	add hl, de
 	ld a, [hl]
@@ -1349,39 +1343,39 @@
 	ld hl, OBJECT_SPRITE_X_OFFSET
 	add hl, bc
 	ld [hl], 0
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $13
+	ld [hl], STEP_TYPE_13
 	ret
 ; 4a21
 
-.Movement14: ; 4a21
+.MovementEmote: ; 4a21
 	call Function467b
-	call ._Movement13_14_1a_1b
-	ld hl, OBJECT_11
+	call ._MovementShadow_Grass_Emote_BoulderDust
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 8
+	ld [hl], PERSON_ACTION_EMOTE
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	ld [hl], 0
 	ld hl, OBJECT_SPRITE_Y_OFFSET
 	add hl, bc
-	ld [hl], $f0
+	ld [hl], -$10
 	ld hl, OBJECT_SPRITE_X_OFFSET
 	add hl, bc
 	ld [hl], 0
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $13
+	ld [hl], STEP_TYPE_13
 	ret
 ; 4a46
 
-.Movement1a: ; 4a46
+.MovementBoulderDust: ; 4a46
 	call Function467b
-	call ._Movement13_14_1a_1b
-	ld hl, OBJECT_11
+	call ._MovementShadow_Grass_Emote_BoulderDust
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $e
+	ld [hl], PERSON_ACTION_0E
 	ld hl, OBJECT_STEP_DURATION
 	add hl, de
 	ld a, [hl]
@@ -1409,9 +1403,9 @@
 	ld hl, OBJECT_SPRITE_Y_OFFSET
 	add hl, bc
 	ld [hl], e
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $13
+	ld [hl], STEP_TYPE_13
 	ret
 ; 4a81
 
@@ -1423,12 +1417,12 @@
 	db -6,  2
 ; 4a89
 
-.Movement1b: ; 4a89
+.MovementShakingGrass: ; 4a89
 	call Function467b
-	call ._Movement13_14_1a_1b
-	ld hl, OBJECT_11
+	call ._MovementShadow_Grass_Emote_BoulderDust
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $f
+	ld [hl], PERSON_ACTION_0F
 	ld hl, OBJECT_STEP_DURATION
 	add hl, de
 	ld a, [hl]
@@ -1436,14 +1430,14 @@
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	ld [hl], a
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $13
+	ld [hl], STEP_TYPE_13
 	ret
 ; 4aa8
 
-._Movement13_14_1a_1b: ; 4aa8
-	ld hl, OBJECT_32
+._MovementShadow_Grass_Emote_BoulderDust: ; 4aa8
+	ld hl, OBJECT_RANGE
 	add hl, bc
 	ld a, [hl]
 	push bc
@@ -1459,15 +1453,15 @@
 	ret
 ; 4abc
 
-.Movement17: ; 4abc
+.MovementScreenShake: ; 4abc
 	call Function467b
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 0
-	ld hl, OBJECT_32
+	ld [hl], PERSON_ACTION_00
+	ld hl, OBJECT_RANGE
 	add hl, bc
 	ld a, [hl]
-	call ._Movement17
+	call ._MovementScreenShake
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	ld [hl], e
@@ -1474,13 +1468,13 @@
 	ld hl, OBJECT_30
 	add hl, bc
 	ld [hl], a
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $15
+	ld [hl], STEP_TYPE_15
 	ret
 ; 4ade
 
-._Movement17: ; 4ade
+._MovementScreenShake: ; 4ade
 	ld d, a
 	and %00111111
 	ld e, a
@@ -1500,48 +1494,45 @@
 
 .RandomWalkContinue: ; 4af0
 	call Function4690
-	call Function6ec1
-	jr c, Function4b17
+	call Function6ec1 ; check whether the object can move in that direction
+	jr c, .NewDuration
+
 	call Function463f
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 2
-	ld hl, wd4cf
+	ld [hl], PERSON_ACTION_STEP
+
+	ld hl, wCenteredObject
 	ld a, [hMapObjectIndexBuffer]
 	cp [hl]
 	jr z, .load_6
-	ld hl, OBJECT_09
+
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 7
+	ld [hl], STEP_TYPE_07
 	ret
 
 .load_6
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 6
+	ld [hl], STEP_TYPE_PLAYER_WALK
 	ret
 
-Function4b17: ; 4b17
+.NewDuration: ; 4b17
 	call Function467b
 	call Function462a
-	; fallthrough
-; 4b1d
-
-Function4b1d: ; 4b1d
+RandomStepDuration_Slow: ; 4b1d
 	call Random
 	ld a, [hRandomAdd]
 	and %01111111
-	jr Function4b2d
+	jr SetRandomStepDuration
 ; 4b26
 
-Function4b26: ; 4b26
+RandomStepDuration_Fast: ; 4b26
 	call Random
 	ld a, [hRandomAdd]
 	and %00011111
-	; fallthrough
-; 4b2d
-
-Function4b2d: ; 4b2d
+SetRandomStepDuration: ; 4b2d
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	ld [hl], a
@@ -1548,42 +1539,43 @@
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 1
-	ld hl, OBJECT_09
+	ld [hl], PERSON_ACTION_STAND
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 3
+	ld [hl], STEP_TYPE_03
 	ret
 ; 4b45
 
 Pointers4b45: ; 4b45
-	dw Function47bc
-	dw Function47dd
-	dw Function4e2b
-	dw Function4ddd
-	dw Function4e21
-	dw Function4e0c
-	dw Function4e56
-	dw Function4e47
-	dw Function4b86
-	dw Function4bbf
-	dw Function4e83
-	dw Function4dff
-	dw Function4c18
-	dw Function4c89
-	dw Function4d14
-	dw Function4ecd
-	dw Function4d7e
-	dw Function4daf
-	dw Function4dc8
-	dw Function4f04
-	dw Function4f33
-	dw Function4f33
-	dw Function4f77
-	dw Function4f7a
-	dw Function4df0
-	dw Function4f83
+; These pointers use OBJECT_STEP_TYPE.  See constants/sprite_constants.asm
+	dw Function47bc ; 00
+	dw Function47dd ; 01
+	dw Function4e2b ; 02 npc walk
+	dw Function4ddd ; 03
+	dw Function4e21 ; 04
+	dw Function4e0c ; 05
+	dw Function4e56 ; 06 player walk
+	dw Function4e47 ; 07
+	dw Function4b86 ; 08 npc jump step
+	dw Function4bbf ; 09 player jump step
+	dw Function4e83 ; 0a half step
+	dw Function4dff ; 0b
+	dw Function4c18 ; 0c teleport from
+	dw Function4c89 ; 0d teleport to
+	dw Function4d14 ; 0e skyfall
+	dw Function4ecd ; 0f
+	dw Function4d7e ; 10
+	dw Function4daf ; 11
+	dw Function4dc8 ; 12
+	dw Function4f04 ; 13
+	dw Function4f33 ; 14
+	dw Function4f33 ; 15
+	dw Function4f77 ; 16
+	dw Function4f7a ; 17
+	dw Function4df0 ; 18
+	dw Function4f83 ; 19
 ; 4b79
 
 Function4b79: ; 4b79
@@ -1591,20 +1583,21 @@
 	add hl, bc
 	dec [hl]
 	ret nz
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4b86
 
 Function4b86: ; 4b86
-	call JumptoObjectStructField28
+	call Object28AnonymousJumptable
+; anonymous jumptable
 	dw Function4b8d
 	dw Function4ba9
 ; 4b8d
 
 Function4b8d: ; 4b8d
-	call Function46d7
+	call AddStepVector
 	call UpdateJumpPosition
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
@@ -1611,7 +1604,7 @@
 	dec [hl]
 	ret nz
 	call Function4600
-	call Function46a6
+	call GetNextTile
 	ld hl, OBJECT_FLAGS2
 	add hl, bc
 	res 3, [hl]
@@ -1620,7 +1613,7 @@
 ; 4ba9
 
 Function4ba9: ; 4ba9
-	call Function46d7
+	call AddStepVector
 	call UpdateJumpPosition
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
@@ -1627,14 +1620,15 @@
 	dec [hl]
 	ret nz
 	call Function4600
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4bbf
 
 Function4bbf: ; 4bbf
-	call JumptoObjectStructField28
+	call Object28AnonymousJumptable
+; anonymous jumptable
 	dw Function4bca
 	dw Function4bd2
 	dw Function4bf2
@@ -1642,12 +1636,9 @@
 ; 4bca
 
 Function4bca: ; 4bca
-	ld hl, wd150
+	ld hl, wPlayerStepFlags
 	set 7, [hl]
 	call IncrementObjectStructField28
-;	fallthrough
-; 4bd2
-
 Function4bd2: ; 4bd2
 	call UpdateJumpPosition
 	call Function4738
@@ -1659,7 +1650,7 @@
 	ld hl, OBJECT_FLAGS2
 	add hl, bc
 	res 3, [hl]
-	ld hl, wd150
+	ld hl, wPlayerStepFlags
 	set 6, [hl]
 	set 4, [hl]
 	call IncrementObjectStructField28
@@ -1667,13 +1658,10 @@
 ; 4bf2
 
 Function4bf2: ; 4bf2
-	call Function46a6
-	ld hl, wd150
+	call GetNextTile
+	ld hl, wPlayerStepFlags
 	set 7, [hl]
 	call IncrementObjectStructField28
-;	fallthrough
-; 4bfd
-
 Function4bfd: ; 4bfd
 	call UpdateJumpPosition
 	call Function4738
@@ -1681,17 +1669,18 @@
 	add hl, bc
 	dec [hl]
 	ret nz
-	ld hl, wd150
+	ld hl, wPlayerStepFlags
 	set 6, [hl]
 	call Function4600
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4c18
 
 Function4c18: ; 4c18
-	call JumptoObjectStructField28
+	call Object28AnonymousJumptable
+; anonymous jumptable
 	dw Function4c23
 	dw Function4c32
 	dw Function4c42
@@ -1699,7 +1688,7 @@
 ; 4c23
 
 Function4c23: ; 4c23
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld [hl], 0
 	ld hl, OBJECT_STEP_DURATION
@@ -1706,13 +1695,10 @@
 	add hl, bc
 	ld [hl], $10
 	call IncrementObjectStructField28
-;	fallthrough
-; 4c32
-
 Function4c32: ; 4c32
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 4
+	ld [hl], PERSON_ACTION_SPIN
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	dec [hl]
@@ -1722,7 +1708,7 @@
 ; 4c42
 
 Function4c42: ; 4c42
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld [hl], 0
 	ld hl, OBJECT_31
@@ -1735,13 +1721,10 @@
 	add hl, bc
 	res 3, [hl]
 	call IncrementObjectStructField28
-;	fallthrough
-; 4c5d
-
 Function4c5d: ; 4c5d
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 4
+	ld [hl], PERSON_ACTION_SPIN
 	ld hl, OBJECT_31
 	add hl, bc
 	inc [hl]
@@ -1757,17 +1740,18 @@
 	add hl, bc
 	dec [hl]
 	ret nz
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld [hl], 0
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4c89
 
 Function4c89: ; 4c89
-	call JumptoObjectStructField28
+	call Object28AnonymousJumptable
+; anonymous jumptable
 	dw Function4c9a
 	dw Function4caa
 	dw Function4cb3
@@ -1778,9 +1762,9 @@
 ; 4c9a
 
 Function4c9a: ; 4c9a
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 0
+	ld [hl], PERSON_ACTION_00
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	ld [hl], $10
@@ -1794,11 +1778,8 @@
 	dec [hl]
 	ret nz
 	call IncrementObjectStructField28
-;	fallthrough
-; 4cb3
-
 Function4cb3: ; 4cb3
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld [hl], 0
 	ld hl, OBJECT_31
@@ -1812,9 +1793,9 @@
 ; 4cc9
 
 Function4cc9: ; 4cc9
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 4
+	ld [hl], PERSON_ACTION_SPIN
 	ld hl, OBJECT_31
 	add hl, bc
 	inc [hl]
@@ -1831,9 +1812,6 @@
 	dec [hl]
 	ret nz
 	call IncrementObjectStructField28
-;	fallthrough
-; 4ceb
-
 Function4ceb: ; 4ceb
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
@@ -1843,30 +1821,29 @@
 ; 4cf5
 
 Function4cf5: ; 4cf5
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 4
+	ld [hl], PERSON_ACTION_SPIN
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	dec [hl]
 	ret nz
-; 4d01
-
 Function4d01: ; 4d01
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld [hl], 0
 	ld hl, OBJECT_SPRITE_Y_OFFSET
 	add hl, bc
 	ld [hl], 0
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4d14
 
 Function4d14: ; 4d14
-	call JumptoObjectStructField28
+	call Object28AnonymousJumptable
+; anonymous jumptable
 	dw Function4d1f
 	dw Function4d2e
 	dw Function4d4f
@@ -1874,25 +1851,22 @@
 ; 4d1f
 
 Function4d1f: ; 4d1f
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 0
+	ld [hl], PERSON_ACTION_00
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	ld [hl], $10
 	call IncrementObjectStructField28
-;	fallthrough
-; 4d2e
-
 Function4d2e: ; 4d2e
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	dec [hl]
 	ret nz
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], 2
-	ld hl, OBJECT_12
+	ld [hl], PERSON_ACTION_STEP
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld [hl], 0
 	ld hl, OBJECT_31
@@ -1902,9 +1876,6 @@
 	add hl, bc
 	ld [hl], $10
 	call IncrementObjectStructField28
-;	fallthrough
-; 4d4f
-
 Function4d4f: ; 4d4f
 	ld hl, OBJECT_31
 	add hl, bc
@@ -1922,24 +1893,22 @@
 	dec [hl]
 	ret nz
 	call IncrementObjectStructField28
-;	fallthrough
-; 4d6b
-
 Function4d6b: ; 4d6b
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld [hl], 0
 	ld hl, OBJECT_SPRITE_Y_OFFSET
 	add hl, bc
 	ld [hl], 0
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4d7e
 
 Function4d7e: ; 4d7e
-	call JumptoObjectStructField28
+	call Object28AnonymousJumptable
+; anonymous jumptable
 	dw Function4d85
 	dw Function4d94
 ; 4d85
@@ -1952,9 +1921,6 @@
 	add hl, bc
 	ld [hl], 0
 	call IncrementObjectStructField28
-	; fallthrough
-; 4d94
-
 Function4d94: ; 4d94
 	ld hl, OBJECT_SPRITE_Y_OFFSET
 	add hl, bc
@@ -1968,9 +1934,9 @@
 	ld hl, OBJECT_SPRITE_Y_OFFSET
 	add hl, bc
 	ld [hl], 0
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4daf
 
@@ -1984,12 +1950,12 @@
 	add hl, bc
 	ld a, [hl]
 	and %00000001
-	ld a, 1
+	ld a, PERSON_ACTION_STAND
 	jr z, .yes
-	ld a, 0
+	ld a, PERSON_ACTION_00
 
 .yes
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
 	ld [hl], a
 	ret
@@ -2000,12 +1966,12 @@
 	add hl, bc
 	ld a, [hl]
 	and %00000001
-	ld a, 4
+	ld a, PERSON_ACTION_SPIN
 	jr z, .yes
-	ld a, 5
+	ld a, PERSON_ACTION_SPIN_FLICKER
 
 .yes
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
 	ld [hl], a
 	jp Function4b79
@@ -2019,9 +1985,9 @@
 	add hl, bc
 	dec [hl]
 	ret nz
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4df0
 
@@ -2041,14 +2007,15 @@
 	add hl, bc
 	dec [hl]
 	ret nz
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4e0c
 
 Function4e0c: ; 4e0c
-	call JumptoObjectStructField28
+	call Object28AnonymousJumptable
+; anonymous jumptable
 	dw Function4e13
 	dw Function4e21
 ; 4e13
@@ -2055,14 +2022,11 @@
 
 Function4e13: ; 4e13
 	call RestoreDefaultMovement
-	call Function1a47
+	call GetInitialFacing
 	ld hl, OBJECT_FACING
 	add hl, bc
 	ld [hl], a
 	call IncrementObjectStructField28
-	; fallthrough
-; 4e21
-
 Function4e21: ; 4e21
 	call Function4fb2
 	ld hl, OBJECT_DIRECTION_WALKING
@@ -2073,7 +2037,7 @@
 
 Function4e2b: ; 4e2b
 	call Function4fb2
-	call Function46d7
+	call AddStepVector
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	dec [hl]
@@ -2082,36 +2046,34 @@
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4e47
 
 Function4e47: ; 4e47
-	call Function46d7
+	call AddStepVector
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	dec [hl]
 	ret nz
 	call Function4600
-	jp Function4b1d
+	jp RandomStepDuration_Slow
 ; 4e56
 
 Function4e56: ; 4e56
 ; AnimateStep?
-	call JumptoObjectStructField28
+	call Object28AnonymousJumptable
+; anonymous jumptable
 	dw Function4e5d
 	dw Function4e65
 ; 4e5d
 
 Function4e5d: ; 4e5d
-	ld hl, wd150
+	ld hl, wPlayerStepFlags
 	set 7, [hl]
 	call IncrementObjectStructField28
-	; fallthrough
-; 4e65
-
 Function4e65: ; 4e65
 	call Function4738
 	ld hl, OBJECT_STEP_DURATION
@@ -2118,20 +2080,22 @@
 	add hl, bc
 	dec [hl]
 	ret nz
-	ld hl, wd150
+
+	ld hl, wPlayerStepFlags
 	set 6, [hl]
 	call Function4600
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4e83
 
 Function4e83: ; 4e83
-	call JumptoObjectStructField28
+	call Object28AnonymousJumptable
+; anonymous jumptable
 	dw Function4e8e
 	dw Function4ea4
 	dw Function4ead
@@ -2142,7 +2106,7 @@
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld a, [hl]
 	ld [hl], 2
@@ -2150,9 +2114,6 @@
 	add hl, bc
 	ld [hl], 2
 	call IncrementObjectStructField28
-	; fallthrough
-; 4ea4
-
 Function4ea4: ; 4ea4
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
@@ -2159,9 +2120,6 @@
 	dec [hl]
 	ret nz
 	call IncrementObjectStructField28
-	; fallthrough
-; 4ead
-
 Function4ead: ; 4ead
 	ld hl, OBJECT_29
 	add hl, bc
@@ -2173,31 +2131,28 @@
 	add hl, bc
 	ld [hl], $2
 	call IncrementObjectStructField28
-	; fallthrough
-; 4ec0
-
 Function4ec0: ; 4ec0
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	dec [hl]
 	ret nz
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4ecd
 
 Function4ecd: ; 4ecd
-	call Function46d7
+	call AddStepVector
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	dec [hl]
 	ret nz
 	push bc
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld d, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld e, [hl]
 	ld hl, OBJECT_MAP_OBJECT_INDEX
@@ -2213,9 +2168,9 @@
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4f04
 
@@ -2255,7 +2210,8 @@
 ; 4f33
 
 Function4f33: ; 4f33
-	call JumptoObjectStructField28
+	call Object28AnonymousJumptable
+; anonymous jumptable
 	dw Function4f3a
 	dw Function4f43
 ; 4f3a
@@ -2266,16 +2222,13 @@
 	add hl, bc
 	ld [hl], a
 	call IncrementObjectStructField28
-	; fallthrough
-; 4f43
-
 Function4f43: ; 4f43
 	ld hl, OBJECT_29
 	add hl, bc
 	ld d, [hl]
-	ld a, [wd14f]
+	ld a, [wPlayerStepVectorY]
 	sub d
-	ld [wd14f], a
+	ld [wPlayerStepVectorY], a
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	dec [hl]
@@ -2286,9 +2239,9 @@
 	add hl, bc
 	ld [hl], a
 	ld d, a
-	ld a, [wd14f]
+	ld a, [wPlayerStepVectorY]
 	add d
-	ld [wd14f], a
+	ld [wPlayerStepVectorY], a
 	ret
 
 .ok
@@ -2308,11 +2261,12 @@
 ; 4f77
 
 Function4f77: ; 4f77
-	call JumptoObjectStructField28 ; ????
+	call Object28AnonymousJumptable ; ????
 ; 4f7a
 
 Function4f7a: ; 4f7a
-	call JumptoObjectStructField28
+	call Object28AnonymousJumptable
+; anonymous jumptable
 	dw Function4f83
 	dw Function4f83
 	dw Function4f83
@@ -2319,18 +2273,19 @@
 ; 4f83
 
 Function4f83: ; 4f83
-	call JumptoObjectStructField28
+	call Object28AnonymousJumptable
+; anonymous jumptable
 	dw Function4f8a
 	dw Function4f99
 ; 4f8a
 
 Function4f8a: ; 4f8a
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $10
+	ld [hl], PERSON_ACTION_10
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
-	ld [hl], $10
+	ld [hl], 16
 	call IncrementObjectStructField28
 ; 4f99
 
@@ -2342,12 +2297,12 @@
 	ld hl, OBJECT_SPRITE_Y_OFFSET
 	add hl, bc
 	ld [hl], $60
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld [hl], 0
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 4fb2
 
@@ -2404,7 +2359,7 @@
 ; 5000
 
 Function5000: ; unscripted?
-; copy [wc3de] to [wc2df]
+; copy [wc2de] to [wc2df]
 	ld a, [wc2de]
 	ld hl, wc2df
 	ld [hl], a
@@ -2598,79 +2553,80 @@
 	ret
 ; 5529
 
-Function5529: ; 5529
+SpawnShadow: ; 5529
 	push bc
-	ld de, .data_5535
-	call Function55b9
-	call Function55ac
+	ld de, .ShadowObject
+	call CopyTempObjectData
+	call InitTempObject
 	pop bc
 	ret
 
-.data_5535
-	db $00, $05, $1b
+.ShadowObject
+	; vtile, palette, movement
+	db $00, PAL_OW_SILVER, SPRITEMOVEDATA_SHADOW
 ; 5538
 
-Function5538: ; 5538
+SpawnStrengthBoulderDust: ; 5538
 	push bc
-	ld de, .data_5544
-	call Function55b9
-	call Function55ac
+	ld de, .BoulderDustObject
+	call CopyTempObjectData
+	call InitTempObject
 	pop bc
 	ret
 
-.data_5544
-	db $00, $05, $22
+.BoulderDustObject
+	db $00, PAL_OW_SILVER, SPRITEMOVEDATA_BOULDERDUST
 ; 5547
 
-Function5547: ; 5547
+SpawnEmote: ; 5547
 	push bc
-	ld de, .data_5553
-	call Function55b9
-	call Function55ac
+	ld de, .EmoteObject
+	call CopyTempObjectData
+	call InitTempObject
 	pop bc
 	ret
 
-.data_5553
-	db $00, $05, $1c
+.EmoteObject
+	db $00, PAL_OW_SILVER, SPRITEMOVEDATA_EMOTE
 ; 5556
 
-Function5556: ; 5556
+ShakeGrass: ; 5556
 	push bc
 	ld de, .data_5562
-	call Function55b9
-	call Function55ac
+	call CopyTempObjectData
+	call InitTempObject
 	pop bc
 	ret
 
 .data_5562
-	db $00, $06, $23
+	db $00, PAL_OW_TREE, SPRITEMOVEDATA_GRASS
 ; 5565
 
-Function5565: ; 5565
+ShakeScreen: ; 5565
 	push bc
 	push af
-	ld de, .data_5576
-	call Function55b9
+	ld de, .ScreenShakeObject
+	call CopyTempObjectData
 	pop af
-	ld [wc2f5], a
-	call Function55ac
+	ld [wTempObjectCopyRange], a
+	call InitTempObject
 	pop bc
 	ret
 
-.data_5576
-	db $00, $05, $1d
+.ScreenShakeObject
+	db $00, PAL_OW_SILVER, SPRITEMOVEDATA_SCREENSHAKE
 ; 5579
 
-Function5579: ; 5579
+DespawnEmote: ; 5579
 	push bc
 	ld a, [hMapObjectIndexBuffer]
 	ld c, a
-	call Function5582
+	call .DeleteEmote
 	pop bc
 	ret
 ; 5582
 
-Function5582: ; 5582
+.DeleteEmote: ; 5582
 	ld de, ObjectStructs
 	ld a, NUM_OBJECT_STRUCTS
 .loop
@@ -2677,7 +2633,7 @@
 	push af
 	ld hl, OBJECT_FLAGS1
 	add hl, de
-	bit 7, [hl]
+	bit EMOTE_OBJECT, [hl]
 	jr z, .next
 	ld hl, OBJECT_SPRITE
 	add hl, de
@@ -2701,20 +2657,21 @@
 	ret
 ; 55ac
 
-Function55ac: ; 55ac
+InitTempObject: ; 55ac
 	call FindFirstEmptyObjectStruct
 	ret nc
 
 	ld d, h
 	ld e, l
-	callba Function8286
+	callba CopyTempObjectToObjectStruct
 	ret
 ; 55b9
 
-Function55b9: ; 55b9
-; load into wc2f0:
-; -1, -1, [de], [de + 1], [de + 2], [hMapObjectIndexBuffer], [MapX], [MapY], -1
-	ld hl, wc2f0
+CopyTempObjectData: ; 55b9
+; load into wTempObjectCopy:
+; -1, -1, [de], [de + 1], [de + 2], [hMapObjectIndexBuffer], [NextMapX], [NextMapY], -1
+; This spawns the object at the same place as whichever object is loaded into bc.
+	ld hl, wTempObjectCopyMapObjectIndex
 	ld [hl], -1
 	inc hl
 	ld [hl], -1
@@ -2733,10 +2690,10 @@
 	ld [hli], a
 
 	push hl
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld d, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld e, [hl]
 	pop hl
@@ -2753,6 +2710,7 @@
 	ld a, [VramState]
 	bit 0, a
 	ret z
+
 	ld bc, ObjectStructs
 	xor a
 .loop
@@ -2773,28 +2731,30 @@
 	ret
 ; 5602
 
-Function5602: ; 5602
-	call Function5645
-	ld a, 0
-	call Function5629
-	ld a, [wd459]
+Function5602: ; 5602, called at battle start
+	call Function5645 ; clear sprites
+	ld a, PLAYER
+	call Function5629 ; respawn player
+
+	ld a, [wBattleScriptFlags]
 	bit 7, a
 	jr z, .ok
+
 	ld a, [hLastTalked]
 	and a
 	jr z, .ok
-	call Function5629
+	call Function5629 ; respawn opponent
 
 .ok
-	call RefreshMapAppearDisappear
+	call _UpdateSprites
 	ret
 ; 561d
 
 Function561d: ; 561d
-	call Function5645
-	ld a, 0
-	call Function5629
-	call RefreshMapAppearDisappear
+	call Function5645 ; clear sprites
+	ld a, PLAYER
+	call Function5629 ; respawn player
+	call _UpdateSprites
 	ret
 ; 5629
 
@@ -2825,7 +2785,7 @@
 	ld bc, ObjectStructs
 .loop
 	ld [hMapObjectIndexBuffer], a
-	call Function5680
+	call SetFacing_Standing
 	ld hl, OBJECT_STRUCT_LENGTH
 	add hl, bc
 	ld b, h
@@ -2841,9 +2801,9 @@
 	push bc
 	call Function56cd
 	pop bc
-	jr c, Function5680
+	jr c, SetFacing_Standing
 	call Function56a3
-	jr c, Function5680
+	jr c, SetFacing_Standing
 	call Function5688
 	callba Function4440
 	xor a
@@ -2852,13 +2812,13 @@
 
 Function5673: ; 5673
 	call Function56a3
-	jr c, Function5680
-	callba Function4440
+	jr c, SetFacing_Standing
+	callba Function4440 ; no need to farcall
 	xor a
 	ret
 ; 5680
 
-Function5680: ; 5680
+SetFacing_Standing: ; 5680
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
 	ld [hl], STANDING
@@ -2868,26 +2828,26 @@
 
 Function5688: ; 5688
 	push bc
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld d, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld e, [hl]
-	call Function2a3c
+	call GetCoordTile
 	pop bc
-	ld hl, OBJECT_STANDING_TILE
+	ld hl, OBJECT_NEXT_TILE
 	add hl, bc
 	ld [hl], a
-	callba Function463f
+	callba Function463f ; no need to farcall
 	ret
 ; 56a3
 
 Function56a3: ; 56a3
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld d, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld e, [hl]
 	inc d
@@ -3043,11 +3003,11 @@
 
 Function5771: ; 5771
 	xor a
-	ld [wd14e], a
-	ld [wd14f], a
-	ld [wd150], a
+	ld [wPlayerStepVectorX], a
+	ld [wPlayerStepVectorY], a
+	ld [wPlayerStepFlags], a
 	ld a, -1
-	ld [wd151], a
+	ld [wPlayerStepDirection], a
 	ret
 ; 5781
 
@@ -3078,11 +3038,11 @@
 	ld [wc2df], a
 	xor a
 	ld [wd04e], a
-	ld [PlayerObject12], a
+	ld [PlayerObjectStepFrame], a
 	call Function57bc
 	callba CheckWarpCollision
 	call c, SpawnInFacingDown
-	call Function57ca
+	call SpawnInCustomFacing
 	ret
 ; 57bc
 
@@ -3093,12 +3053,12 @@
 	ret
 
 .ok
-	ld a, 0
+	ld a, PERSON_ACTION_00
 	ld [PlayerAction], a
 	ret
 ; 57ca
 
-Function57ca: ; 57ca
+SpawnInCustomFacing: ; 57ca
 	ld hl, wPlayerSpriteSetupFlags
 	bit 5, [hl]
 	ret z
@@ -3107,24 +3067,22 @@
 rept 2
 	add a
 endr
-	jr Function57db
+	jr ContinueSpawnFacing
 ; 57d9
 
 SpawnInFacingDown: ; 57d9
 	ld a, 0
-	; fallthrough
-; 57db
-
-Function57db: ; 57db
+ContinueSpawnFacing: ; 57db
 	ld bc, PlayerStruct
 	call SetSpriteDirection
 	ret
 ; 57e2
 
-Function57e2: ; 57e2
+SetPlayerPalette: ; 57e2
 	ld a, d
 	and %10000000
 	ret z
+
 	ld bc, 0 ; debug?
 	ld hl, OBJECT_FACING
 	add hl, bc
@@ -3131,6 +3089,7 @@
 	ld a, [hl]
 	or d
 	ld [hl], a
+
 	ld a, d
 	swap a
 	and %00000111
@@ -3186,9 +3145,9 @@
 	ld hl, OBJECT_MOVEMENTTYPE
 	add hl, bc
 	ld [hl], SPRITEMOVEDATA_FOLLOWING
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 0
+	ld [hl], STEP_TYPE_00
 	ld a, [hObjectStructIndexBuffer]
 	ld [wObjectFollow_Follower], a
 	ret
@@ -3326,9 +3285,9 @@
 	add hl, bc
 	ld [hl], a
 
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 0
+	ld [hl], STEP_TYPE_00
 	ret
 ; 5903
 
@@ -3345,9 +3304,9 @@
 	add hl, bc
 	ld [hl], a
 
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], 0
+	ld [hl], STEP_TYPE_00
 	ret
 
 .standing_movefns
@@ -3357,7 +3316,7 @@
 	db SPRITEMOVEDATA_STANDING_RIGHT
 ; 5920
 
-RefreshMapAppearDisappear:: ; 5920
+_UpdateSprites:: ; 5920
 	ld a, [VramState]
 	bit 0, a
 	ret z
@@ -3367,19 +3326,19 @@
 	push af
 	ld a, 1
 	ld [hOAMUpdate], a
-	call Function5991
-	call Function593a
+	call InitSprites
+	call .fill
 	pop af
 	ld [hOAMUpdate], a
 	ret
 ; 593a
 
-Function593a: ; 593a
+.fill: ; 593a
 	ld a, [VramState]
 	bit 1, a
-	ld b, $a0
+	ld b, SpritesEnd % $100
 	jr z, .ok
-	ld b, $70
+	ld b, 28 * 4
 
 .ok
 	ld a, [hUsedSpriteIndex]
@@ -3386,10 +3345,10 @@
 	cp b
 	ret nc
 	ld l, a
-	ld h, $c4
-	ld de, OBJECT_FLAGS1
+	ld h, Sprites / $100
+	ld de, 4
 	ld a, b
-	ld c, $a0
+	ld c, SCREEN_HEIGHT_PX + 16
 .loop
 	ld [hl], c
 	add hl, de
@@ -3444,26 +3403,29 @@
 	ret
 ; 5991
 
-Function5991: ; 5991
-	call Function59a4
-	ld c, $30
-	call Function59f3
-	ld c, $20
-	call Function59f3
-	ld c, $10
-	call Function59f3
+InitSprites: ; 5991
+PRIORITY_LOW  EQU $10
+PRIORITY_NORM EQU $20
+PRIORITY_HIGH EQU $30
+	call .DeterminePriorities
+	ld c, PRIORITY_HIGH
+	call .InitSpritesByPriority
+	ld c, PRIORITY_NORM
+	call .InitSpritesByPriority
+	ld c, PRIORITY_LOW
+	call .InitSpritesByPriority
 	ret
 ; 59a4
 
-Function59a4: ; 59a4
+.DeterminePriorities: ; 59a4
 	xor a
-	ld hl, wMovementPointer
-	ld bc, 13
+	ld hl, wc2eb
+	ld bc, NUM_OBJECT_STRUCTS
 	call ByteFill
 
 	ld d, 0
 	ld bc, ObjectStructs
-	ld hl, wMovementPointer
+	ld hl, wc2eb
 .loop
 	push hl
 	call GetObjectSprite
@@ -3472,19 +3434,19 @@
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
 	ld a, [hl]
-	cp -1
+	cp STANDING
 	jr z, .skip
 
 ; Define the sprite priority.
-	ld e, $10
+	ld e, PRIORITY_LOW
 	ld hl, OBJECT_FLAGS2
 	add hl, bc
 	bit 0, [hl]
 	jr nz, .add
-	ld e, $20
+	ld e, PRIORITY_NORM
 	bit 1, [hl]
 	jr z, .add
-	ld e, $30
+	ld e, PRIORITY_HIGH
 	jr .add
 
 .skip
@@ -3513,15 +3475,15 @@
 	ret
 ; 59f3
 
-Function59f3: ; 59f3
+.InitSpritesByPriority: ; 59f3
 	ld hl, wMovementPointer
-.next
+.next_sprite
 	ld a, [hli]
 	ld d, a
 	and $f0
 	ret z
 	cp c
-	jr nz, .next
+	jr nz, .next_sprite
 
 	push bc
 	push hl
@@ -3528,13 +3490,13 @@
 	ld a, d
 	and $f
 	call .GetObjectStructPointer
-	call .asm_5a0d
+	call .InitSprite
 	pop hl
 	pop bc
-	jr .next
+	jr .next_sprite
 ; 5a0d
 
-.asm_5a0d: ; 5a0d
+.InitSprite: ; 5a0d
 	ld hl, OBJECT_SPRITE_TILE
 	add hl, bc
 	ld a, [hl]
@@ -3608,7 +3570,7 @@
 	ld hl, OBJECT_FACING_STEP
 	add hl, bc
 	ld a, [hl]
-	cp -1
+	cp STANDING
 	jp z, .done
 	cp NUM_FACINGS
 	jp nc, .done
--- a/engine/map_setup.asm
+++ b/engine/map_setup.asm
@@ -249,10 +249,10 @@
 	dba PlayMapMusic ; 03
 	dba RestartMapMusic ; 04
 	dba FadeToMapMusic ; 05
-	dba FadeOutMapAndMusic ; 06
+	dba RotatePalettesRightMapAndMusic ; 06
 	dba EnterMapMusic ; 07
 	dba ForceMapMusic ; 08
-	dba FadeInMusic ; 09
+	dba RotatePalettesLeftMusic ; 09
 	dba LoadBlockData ; 0a
 	dba LoadNeighboringBlockData ; 0b
 	dba SaveScreen ; 0c
@@ -311,10 +311,10 @@
 ; 154d7
 
 LoadObjectsRunCallback_02: ; 154d7
-	ld a, $2
+	ld a, 2
 	call RunMapCallback
 	callba LoadObjectMasks
-	callba Function8177
+	callba InitializeVisibleSprites
 	ret
 ; 154ea (5:54ea)
 
@@ -417,7 +417,7 @@
 	callba _UpdateTimePals
 	ret
 
-FadeOutMapAndMusic: ; 15574
+RotatePalettesRightMapAndMusic: ; 15574
 	ld e, 0
 	ld a, [MusicFadeIDLo]
 	ld d, 0
@@ -424,7 +424,7 @@
 	ld a, [MusicFadeIDHi]
 	ld a, $4
 	ld [MusicFade], a
-	call FadeToWhite
+	call RotateThreePalettesRight
 	ret
 ; 15587
 
--- a/engine/mart.asm
+++ b/engine/mart.asm
@@ -29,7 +29,7 @@
 	ld a, 0
 	ld [EngineBuffer1], a
 	xor a
-	ld [MovementAnimation], a
+	ld [EngineBuffer5], a
 	call StandardMart
 	ret
 ; 15a6e
@@ -129,7 +129,7 @@
 	ld bc, 16
 	call ByteFill
 	xor a
-	ld [MovementAnimation], a
+	ld [EngineBuffer5], a
 	ld [wBargainShopFlags], a
 	ld [FacingDirection], a
 	ret
@@ -157,10 +157,10 @@
 
 StandardMart: ; 15b47
 .loop
-	ld a, [MovementAnimation]
+	ld a, [EngineBuffer5]
 	ld hl, .MartFunctions
 	rst JumpTable
-	ld [MovementAnimation], a
+	ld [EngineBuffer5], a
 	cp $ff
 	jr nz, .loop
 	ret
@@ -377,7 +377,7 @@
 .loop
 	call BuyMenuLoop ; menu loop
 	jr nc, .loop
-	call Function2b3c
+	call ReturnToCallingMenu
 	ret
 ; 15c7d
 
@@ -470,7 +470,7 @@
 
 
 BuyMenuLoop: ; 15cef
-	callba Function24ae8
+	callba PlaceMoneyTopRightOW
 	call UpdateSprites
 	ld hl, MenuDataHeader_Buy
 	call CopyMenuDataHeader
@@ -477,9 +477,9 @@
 	ld a, [wd045]
 	ld [wMenuCursorBuffer], a
 	ld a, [wd045 + 1]
-	ld [wd0e4], a
+	ld [wMenuScrollPosition], a
 	call HandleScrollingMenu
-	ld a, [wd0e4]
+	ld a, [wMenuScrollPosition]
 	ld [wd045 + 1], a
 	ld a, [MenuSelection2]
 	ld [wd045], a
@@ -658,7 +658,7 @@
 	dbw 0, CurMart
 	dba PlaceMenuItemName
 	dba .PrintBCDPrices
-	dba Function244c3
+	dba UpdateItemDescription
 ; 15e30
 
 .PrintBCDPrices: ; 15e30
@@ -875,7 +875,7 @@
 .okay_to_sell
 	ld hl, Text_Mart_SellHowMany
 	call PrintText
-	callba Function24af8
+	callba PlaceMoneyTopRightMenu
 	callba Function24fe1
 	call ExitMenu
 	jr c, .declined
@@ -899,7 +899,7 @@
 	ld hl, Text_Mart_SoldForAmount
 	call PrintTextBoxText
 	call PlayTransactionSound
-	callba Function24af0
+	callba PlaceMoneyBottomLeftOW
 	call JoyWaitAorB
 
 .declined
--- a/engine/menu.asm
+++ b/engine/menu.asm
@@ -4,7 +4,7 @@
 	rst FarCall
 	call Function24085
 	call UpdateSprites
-	call Function321c
+	call ApplyTilemap
 	call Function2408f
 	ret
 ; 24022
@@ -16,7 +16,7 @@
 	call Function24085
 	callba MobileTextBorder
 	call UpdateSprites
-	call Function321c
+	call ApplyTilemap
 	call Function2408f
 	ret
 ; 2403c
@@ -28,7 +28,7 @@
 	call Function24085
 	callba MobileTextBorder
 	call UpdateSprites
-	call Function321c
+	call ApplyTilemap
 	call Function2411a
 	ld hl, wcfa5
 	set 7, [hl]
--- /dev/null
+++ b/engine/money.asm
@@ -1,0 +1,209 @@
+GiveMoney:: ; 15fd7
+	ld a, $3
+	call AddMoney
+	ld bc, MaxMoney
+	ld a, $3
+	call CompareMoney
+	jr z, .asm_15ff5
+	jr c, .asm_15ff5
+	ld hl, MaxMoney
+	ld a, [hli]
+	ld [de], a
+	inc de
+	ld a, [hli]
+	ld [de], a
+	inc de
+	ld a, [hli]
+	ld [de], a
+	scf
+	ret
+
+.asm_15ff5
+	and a
+	ret
+; 15ff7
+
+MaxMoney: ; 15ff7
+	dt 999999
+; 15ffa
+
+
+TakeMoney:: ; 15ffa
+	ld a, 3
+	call SubtractMoney
+	jr nc, .asm_16009
+	xor a
+	ld [de], a
+	inc de
+	ld [de], a
+	inc de
+	ld [de], a
+	scf
+	ret
+
+.asm_16009
+	and a
+	ret
+; 1600b
+
+CompareMoney:: ; 1600b
+	ld a, $3
+CompareFunds: ; 1600d
+	push hl
+	push de
+	push bc
+	ld h, b
+	ld l, c
+	ld c, $0
+	ld b, a
+.loop1
+	dec a
+	jr z, .done
+	inc de
+	inc hl
+	jr .loop1
+
+.done
+	and a
+.loop2
+	ld a, [de]
+	sbc [hl]
+	jr z, .okay
+	inc c
+
+.okay
+	dec de
+	dec hl
+	dec b
+	jr nz, .loop2
+	jr c, .set_carry
+	ld a, c
+	and a
+	jr .skip_carry
+
+.set_carry
+	ld a, $1
+	and a
+	scf
+
+.skip_carry
+	pop bc
+	pop de
+	pop hl
+	ret
+; 16035
+
+SubtractMoney: ; 16035
+	ld a, 3
+SubtractFunds: ; 16037
+	push hl
+	push de
+	push bc
+	ld h, b
+	ld l, c
+	ld b, a
+	ld c, 0
+.loop
+	dec a
+	jr z, .done
+	inc de
+	inc hl
+	jr .loop
+
+.done
+	and a
+.loop2
+	ld a, [de]
+	sbc [hl]
+	ld [de], a
+	dec de
+	dec hl
+	dec b
+	jr nz, .loop2
+	pop bc
+	pop de
+	pop hl
+	ret
+; 16053
+
+AddMoney: ; 16053
+	ld a, $3
+AddFunds: ; 16055
+	push hl
+	push de
+	push bc
+	ld h, b
+	ld l, c
+	ld b, a
+.loop1
+	dec a
+	jr z, .done
+	inc de
+	inc hl
+	jr .loop1
+
+.done
+	and a
+.loop2
+	ld a, [de]
+	adc [hl]
+	ld [de], a
+	dec de
+	dec hl
+	dec b
+	jr nz, .loop2
+	pop bc
+	pop de
+	pop hl
+	ret
+; 1606f
+
+GiveCoins:: ; 1606f
+	ld a, 2
+	ld de, Coins
+	call AddFunds
+	ld a, 2
+	ld bc, .maxcoins
+	call CompareFunds
+	jr c, .not_maxed
+	ld hl, .maxcoins
+	ld a, [hli]
+	ld [de], a
+	inc de
+	ld a, [hli]
+	ld [de], a
+	scf
+	ret
+
+.not_maxed
+	and a
+	ret
+; 1608d
+
+.maxcoins: ; 1608d
+	bigdw 9999
+; 1608f
+
+
+TakeCoins:: ; 1608f
+	ld a, 2
+	ld de, Coins
+	call SubtractFunds
+	jr nc, .asm_1609f
+	xor a
+	ld [de], a
+	inc de
+	ld [de], a
+	scf
+	ret
+
+.asm_1609f
+	and a
+	ret
+; 160a1
+
+CheckCoins:: ; 160a1
+	ld a, $2
+	ld de, Coins
+	jp CompareFunds
+; 160a9
--- a/engine/more_phone_scripts.asm
+++ b/engine/more_phone_scripts.asm
@@ -56,105 +56,105 @@
 
 UnknownScript_0xa007c:
 	checkcode VAR_CALLERID
-	if_equal $5, UnknownScript_0xa00c2
-	if_equal $b, UnknownScript_0xa00c8
-	if_equal $d, UnknownScript_0xa00ce
-	if_equal $f, UnknownScript_0xa00d4
-	if_equal $10, UnknownScript_0xa00da
-	if_equal $11, UnknownScript_0xa00e0
-	if_equal $13, UnknownScript_0xa00e6
-	if_equal $14, UnknownScript_0xa00ec
-	if_equal $17, UnknownScript_0xa00f2
-	if_equal $18, UnknownScript_0xa00f8
-	if_equal $1b, UnknownScript_0xa00fe
-	if_equal $1c, UnknownScript_0xa0104
-	if_equal $1d, UnknownScript_0xa010a
-	if_equal $1e, UnknownScript_0xa0110
-	if_equal $20, UnknownScript_0xa0116
-	if_equal $21, UnknownScript_0xa011c
-	if_equal $23, UnknownScript_0xa0122
+	if_equal PHONE_SCHOOLBOY_JACK, .Jack
+	if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_YOUNGSTER_JOEY, .Joey
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_FISHER_RALPH, .Ralph
+	if_equal PHONE_HIKER_ANTHONY, .Anthony
+	if_equal PHONE_CAMPER_TODD, .Todd
+	if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+	if_equal PHONE_POKEFANM_DEREK, .Derek
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_POKEMANIAC_BRENT, .Brent
+	if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+	if_equal PHONE_FISHER_WILTON, .Wilton
+	if_equal PHONE_HIKER_PARRY, .Parry
 
-UnknownScript_0xa00c2:
+.Jack:
 	farwritetext UnknownText_0x1740c0
 	keeptextopen
 	end
 
-UnknownScript_0xa00c8:
+.Gaven:
 	farwritetext UnknownText_0x174a24
 	keeptextopen
 	end
 
-UnknownScript_0xa00ce:
+.Jose:
 	farwritetext UnknownText_0x174f2f
 	keeptextopen
 	end
 
-UnknownScript_0xa00d4:
+.Joey:
 	farwritetext UnknownText_0x175530
 	keeptextopen
 	end
 
-UnknownScript_0xa00da:
+.Wade:
 	farwritetext UnknownText_0x1757d4
 	keeptextopen
 	end
 
-UnknownScript_0xa00e0:
+.Ralph:
 	farwritetext UnknownText_0x175bc4
 	keeptextopen
 	end
 
-UnknownScript_0xa00e6:
+.Anthony:
 	farwritetext UnknownText_0x176a2f
 	keeptextopen
 	end
 
-UnknownScript_0xa00ec:
+.Todd:
 	farwritetext UnknownText_0x176e5d
 	keeptextopen
 	end
 
-UnknownScript_0xa00f2:
+.Arnie:
 	farwritetext UnknownText_0x649dc
 	keeptextopen
 	end
 
-UnknownScript_0xa00f8:
+.Alan:
 	farwritetext UnknownText_0x64cbd
 	keeptextopen
 	end
 
-UnknownScript_0xa00fe:
+.Chad:
 	farwritetext UnknownText_0x65271
 	keeptextopen
 	end
 
-UnknownScript_0xa0104:
+.Derek:
 	farwritetext UnknownText_0x65ab2
 	keeptextopen
 	end
 
-UnknownScript_0xa010a:
+.Tully:
 	farwritetext UnknownText_0x65de4
 	keeptextopen
 	end
 
-UnknownScript_0xa0110:
+.Brent:
 	farwritetext UnknownText_0x660be
 	keeptextopen
 	end
 
-UnknownScript_0xa0116:
+.Vance:
 	farwritetext UnknownText_0x66980
 	keeptextopen
 	end
 
-UnknownScript_0xa011c:
+.Wilton:
 	farwritetext UnknownText_0x66afc
 	keeptextopen
 	end
 
-UnknownScript_0xa0122:
+.Parry:
 	farwritetext UnknownText_0x66f9f
 	keeptextopen
 	end
@@ -161,51 +161,51 @@
 
 UnknownScript_0xa0128:
 	checkcode VAR_CALLERID
-	if_equal $6, UnknownScript_0xa014a
-	if_equal $c, UnknownScript_0xa0150
-	if_equal $e, UnknownScript_0xa0156
-	if_equal $12, UnknownScript_0xa015c
-	if_equal $15, UnknownScript_0xa0162
-	if_equal $1a, UnknownScript_0xa0168
-	if_equal $1f, UnknownScript_0xa016e
-	if_equal $24, UnknownScript_0xa0174
+	if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+	if_equal PHONE_COOLTRAINERF_BETH, .Beth
+	if_equal PHONE_COOLTRAINERF_REENA, .Reena
+	if_equal PHONE_PICNICKER_LIZ, .Liz
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+	if_equal PHONE_PICNICKER_ERIN, .Erin
 
-UnknownScript_0xa014a:
+.Beverly:
 	farwritetext UnknownText_0x174688
 	keeptextopen
 	end
 
-UnknownScript_0xa0150:
+.Beth:
 	farwritetext UnknownText_0x174c7f
 	keeptextopen
 	end
 
-UnknownScript_0xa0156:
+.Reena:
 	farwritetext UnknownText_0x1752f5
 	keeptextopen
 	end
 
-UnknownScript_0xa015c:
+.Liz:
 	farwritetext UnknownText_0x175fda
 	keeptextopen
 	end
 
-UnknownScript_0xa0162:
+.Gina:
 	farwritetext UnknownText_0x1771fd
 	keeptextopen
 	end
 
-UnknownScript_0xa0168:
+.Dana:
 	farwritetext UnknownText_0x64f74
 	keeptextopen
 	end
 
-UnknownScript_0xa016e:
+.Tiffany:
 	farwritetext UnknownText_0x665ad
 	keeptextopen
 	end
 
-UnknownScript_0xa0174:
+.Erin:
 	farwritetext UnknownText_0x6717a
 	keeptextopen
 	end
@@ -212,105 +212,105 @@
 
 UnknownScript_0xa017a:
 	checkcode VAR_CALLERID
-	if_equal $5, UnknownScript_0xa01c0
-	if_equal $b, UnknownScript_0xa01c6
-	if_equal $d, UnknownScript_0xa01cc
-	if_equal $f, UnknownScript_0xa01d2
-	if_equal $10, UnknownScript_0xa01d8
-	if_equal $11, UnknownScript_0xa01de
-	if_equal $13, UnknownScript_0xa01e4
-	if_equal $14, UnknownScript_0xa01ea
-	if_equal $17, UnknownScript_0xa01f0
-	if_equal $18, UnknownScript_0xa01f6
-	if_equal $1b, UnknownScript_0xa01fc
-	if_equal $1c, UnknownScript_0xa0202
-	if_equal $1d, UnknownScript_0xa0208
-	if_equal $1e, UnknownScript_0xa020e
-	if_equal $20, UnknownScript_0xa0214
-	if_equal $21, UnknownScript_0xa021a
-	if_equal $23, UnknownScript_0xa0220
+	if_equal PHONE_SCHOOLBOY_JACK, .Jack
+	if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_YOUNGSTER_JOEY, .Joey
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_FISHER_RALPH, .Ralph
+	if_equal PHONE_HIKER_ANTHONY, .Anthony
+	if_equal PHONE_CAMPER_TODD, .Todd
+	if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+	if_equal PHONE_POKEFANM_DEREK, .Derek
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_POKEMANIAC_BRENT, .Brent
+	if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+	if_equal PHONE_FISHER_WILTON, .Wilton
+	if_equal PHONE_HIKER_PARRY, .Parry
 
-UnknownScript_0xa01c0:
+.Jack:
 	farwritetext UnknownText_0x174106
 	keeptextopen
 	end
 
-UnknownScript_0xa01c6:
+.Gaven:
 	farwritetext UnknownText_0x174a80
 	keeptextopen
 	end
 
-UnknownScript_0xa01cc:
+.Jose:
 	farwritetext UnknownText_0x174f90
 	keeptextopen
 	end
 
-UnknownScript_0xa01d2:
+.Joey:
 	farwritetext UnknownText_0x175591
 	keeptextopen
 	end
 
-UnknownScript_0xa01d8:
+.Wade:
 	farwritetext UnknownText_0x175869
 	keeptextopen
 	end
 
-UnknownScript_0xa01de:
+.Ralph:
 	farwritetext UnknownText_0x175c24
 	keeptextopen
 	end
 
-UnknownScript_0xa01e4:
+.Anthony:
 	farwritetext UnknownText_0x176aef
 	keeptextopen
 	end
 
-UnknownScript_0xa01ea:
+.Todd:
 	farwritetext UnknownText_0x176e9c
 	keeptextopen
 	end
 
-UnknownScript_0xa01f0:
+.Arnie:
 	farwritetext UnknownText_0x64a13
 	keeptextopen
 	end
 
-UnknownScript_0xa01f6:
+.Alan:
 	farwritetext UnknownText_0x64cf3
 	keeptextopen
 	end
 
-UnknownScript_0xa01fc:
+.Chad:
 	farwritetext UnknownText_0x65318
 	keeptextopen
 	end
 
-UnknownScript_0xa0202:
+.Derek:
 	farwritetext UnknownText_0x65b29
 	keeptextopen
 	end
 
-UnknownScript_0xa0208:
+.Tully:
 	farwritetext UnknownText_0x65e42
 	keeptextopen
 	end
 
-UnknownScript_0xa020e:
+.Brent:
 	farwritetext UnknownText_0x6613c
 	keeptextopen
 	end
 
-UnknownScript_0xa0214:
+.Vance:
 	farwritetext UnknownText_0x669b2
 	keeptextopen
 	end
 
-UnknownScript_0xa021a:
+.Wilton:
 	farwritetext UnknownText_0x66b3e
 	keeptextopen
 	end
 
-UnknownScript_0xa0220:
+.Parry:
 	farwritetext UnknownText_0x66fc0
 	keeptextopen
 	end
@@ -317,51 +317,51 @@
 
 UnknownScript_0xa0226:
 	checkcode VAR_CALLERID
-	if_equal $6, UnknownScript_0xa0248
-	if_equal $c, UnknownScript_0xa024e
-	if_equal $e, UnknownScript_0xa0254
-	if_equal $12, UnknownScript_0xa025a
-	if_equal $15, UnknownScript_0xa0260
-	if_equal $1a, UnknownScript_0xa0266
-	if_equal $1f, UnknownScript_0xa026c
-	if_equal $24, UnknownScript_0xa0272
+	if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+	if_equal PHONE_COOLTRAINERF_BETH, .Beth
+	if_equal PHONE_COOLTRAINERF_REENA, .Reena
+	if_equal PHONE_PICNICKER_LIZ, .Liz
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+	if_equal PHONE_PICNICKER_ERIN, .Erin
 
-UnknownScript_0xa0248:
+.Beverly:
 	farwritetext UnknownText_0x1746c3
 	keeptextopen
 	end
 
-UnknownScript_0xa024e:
+.Beth:
 	farwritetext UnknownText_0x174cf6
 	keeptextopen
 	end
 
-UnknownScript_0xa0254:
+.Reena:
 	farwritetext UnknownText_0x17536b
 	keeptextopen
 	end
 
-UnknownScript_0xa025a:
+.Liz:
 	farwritetext UnknownText_0x17602d
 	keeptextopen
 	end
 
-UnknownScript_0xa0260:
+.Gina:
 	farwritetext UnknownText_0x177237
 	keeptextopen
 	end
 
-UnknownScript_0xa0266:
+.Dana:
 	farwritetext UnknownText_0x64fb2
 	keeptextopen
 	end
 
-UnknownScript_0xa026c:
+.Tiffany:
 	farwritetext UnknownText_0x66605
 	keeptextopen
 	end
 
-UnknownScript_0xa0272:
+.Erin:
 	farwritetext UnknownText_0x671a4
 	keeptextopen
 	end
@@ -368,105 +368,105 @@
 
 UnknownScript_0xa0278:
 	checkcode VAR_CALLERID
-	if_equal $5, UnknownScript_0xa02be
-	if_equal $b, UnknownScript_0xa02c4
-	if_equal $d, UnknownScript_0xa02ca
-	if_equal $f, UnknownScript_0xa02d0
-	if_equal $10, UnknownScript_0xa02d6
-	if_equal $11, UnknownScript_0xa02dc
-	if_equal $13, UnknownScript_0xa02e2
-	if_equal $14, UnknownScript_0xa02e8
-	if_equal $17, UnknownScript_0xa02ee
-	if_equal $18, UnknownScript_0xa02f4
-	if_equal $1b, UnknownScript_0xa02fa
-	if_equal $1c, UnknownScript_0xa0300
-	if_equal $1d, UnknownScript_0xa0306
-	if_equal $1e, UnknownScript_0xa030c
-	if_equal $20, UnknownScript_0xa0312
-	if_equal $21, UnknownScript_0xa0318
-	if_equal $23, UnknownScript_0xa031e
+	if_equal PHONE_SCHOOLBOY_JACK, .Jack
+	if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_YOUNGSTER_JOEY, .Joey
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_FISHER_RALPH, .Ralph
+	if_equal PHONE_HIKER_ANTHONY, .Anthony
+	if_equal PHONE_CAMPER_TODD, .Todd
+	if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+	if_equal PHONE_POKEFANM_DEREK, .Derek
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_POKEMANIAC_BRENT, .Brent
+	if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+	if_equal PHONE_FISHER_WILTON, .Wilton
+	if_equal PHONE_HIKER_PARRY, .Parry
 
-UnknownScript_0xa02be:
+.Jack:
 	farwritetext UnknownText_0x174165
 	keeptextopen
 	end
 
-UnknownScript_0xa02c4:
+.Gaven:
 	farwritetext UnknownText_0x174b2d
 	keeptextopen
 	end
 
-UnknownScript_0xa02ca:
+.Jose:
 	farwritetext UnknownText_0x174ffd
 	keeptextopen
 	end
 
-UnknownScript_0xa02d0:
+.Joey:
 	farwritetext UnknownText_0x175611
 	keeptextopen
 	end
 
-UnknownScript_0xa02d6:
+.Wade:
 	farwritetext UnknownText_0x1758e4
 	keeptextopen
 	end
 
-UnknownScript_0xa02dc:
+.Ralph:
 	farwritetext UnknownText_0x175c9f
 	keeptextopen
 	end
 
-UnknownScript_0xa02e2:
+.Anthony:
 	farwritetext UnknownText_0x176b45
 	keeptextopen
 	end
 
-UnknownScript_0xa02e8:
+.Todd:
 	farwritetext UnknownText_0x176eee
 	keeptextopen
 	end
 
-UnknownScript_0xa02ee:
+.Arnie:
 	farwritetext UnknownText_0x64a71
 	keeptextopen
 	end
 
-UnknownScript_0xa02f4:
+.Alan:
 	farwritetext UnknownText_0x64d4f
 	keeptextopen
 	end
 
-UnknownScript_0xa02fa:
+.Chad:
 	farwritetext UnknownText_0x65399
 	keeptextopen
 	end
 
-UnknownScript_0xa0300:
+.Derek:
 	farwritetext UnknownText_0x65bc8
 	keeptextopen
 	end
 
-UnknownScript_0xa0306:
+.Tully:
 	farwritetext UnknownText_0x65eac
 	keeptextopen
 	end
 
-UnknownScript_0xa030c:
+.Brent:
 	farwritetext UnknownText_0x6618c
 	keeptextopen
 	end
 
-UnknownScript_0xa0312:
+.Vance:
 	farwritetext UnknownText_0x669ed
 	keeptextopen
 	end
 
-UnknownScript_0xa0318:
+.Wilton:
 	farwritetext UnknownText_0x66b8f
 	keeptextopen
 	end
 
-UnknownScript_0xa031e:
+.Parry:
 	farwritetext UnknownText_0x67001
 	keeptextopen
 	end
@@ -473,51 +473,51 @@
 
 UnknownScript_0xa0324:
 	checkcode VAR_CALLERID
-	if_equal $6, UnknownScript_0xa0346
-	if_equal $c, UnknownScript_0xa034c
-	if_equal $e, UnknownScript_0xa0352
-	if_equal $12, UnknownScript_0xa0358
-	if_equal $15, UnknownScript_0xa035e
-	if_equal $1a, UnknownScript_0xa0364
-	if_equal $1f, UnknownScript_0xa036a
-	if_equal $24, UnknownScript_0xa0370
+	if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+	if_equal PHONE_COOLTRAINERF_BETH, .Beth
+	if_equal PHONE_COOLTRAINERF_REENA, .Reena
+	if_equal PHONE_PICNICKER_LIZ, .Liz
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+	if_equal PHONE_PICNICKER_ERIN, .Erin
 
-UnknownScript_0xa0346:
+.Beverly:
 	farwritetext UnknownText_0x174734
 	keeptextopen
 	end
 
-UnknownScript_0xa034c:
+.Beth:
 	farwritetext UnknownText_0x174d86
 	keeptextopen
 	end
 
-UnknownScript_0xa0352:
+.Reena:
 	farwritetext UnknownText_0x1753c5
 	keeptextopen
 	end
 
-UnknownScript_0xa0358:
+.Liz:
 	farwritetext UnknownText_0x176095
 	keeptextopen
 	end
 
-UnknownScript_0xa035e:
+.Gina:
 	farwritetext UnknownText_0x177297
 	keeptextopen
 	end
 
-UnknownScript_0xa0364:
+.Dana:
 	farwritetext UnknownText_0x6501c
 	keeptextopen
 	end
 
-UnknownScript_0xa036a:
+.Tiffany:
 	farwritetext UnknownText_0x66688
 	keeptextopen
 	end
 
-UnknownScript_0xa0370:
+.Erin:
 	farwritetext UnknownText_0x671eb
 	keeptextopen
 	end
@@ -532,105 +532,105 @@
 
 UnknownScript_0xa0386:
 	checkcode VAR_CALLERID
-	if_equal $5, UnknownScript_0xa03cc
-	if_equal $7, UnknownScript_0xa03d2
-	if_equal $b, UnknownScript_0xa03d8
-	if_equal $d, UnknownScript_0xa03de
-	if_equal $f, UnknownScript_0xa03e4
-	if_equal $10, UnknownScript_0xa03ea
-	if_equal $11, UnknownScript_0xa03f0
-	if_equal $13, UnknownScript_0xa03f6
-	if_equal $14, UnknownScript_0xa03fc
-	if_equal $17, UnknownScript_0xa0402
-	if_equal $18, UnknownScript_0xa0408
-	if_equal $1b, UnknownScript_0xa040e
-	if_equal $1d, UnknownScript_0xa0414
-	if_equal $1e, UnknownScript_0xa041a
-	if_equal $20, UnknownScript_0xa0420
-	if_equal $21, UnknownScript_0xa0426
-	if_equal $23, UnknownScript_0xa042c
+	if_equal PHONE_SCHOOLBOY_JACK, .Jack
+	if_equal PHONE_SAILOR_HUEY, .Huey
+	if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_YOUNGSTER_JOEY, .Joey
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_FISHER_RALPH, .Ralph
+	if_equal PHONE_HIKER_ANTHONY, .Anthony
+	if_equal PHONE_CAMPER_TODD, .Todd
+	if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_POKEMANIAC_BRENT, .Brent
+	if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+	if_equal PHONE_FISHER_WILTON, .Wilton
+	if_equal PHONE_HIKER_PARRY, .Parry
 
-UnknownScript_0xa03cc:
+.Jack:
 	farwritetext UnknownText_0x1741e1
 	keeptextopen
 	end
 
-UnknownScript_0xa03d2:
+.Huey:
 	farwritetext UnknownText_0x1748ea
 	keeptextopen
 	end
 
-UnknownScript_0xa03d8:
+.Gaven:
 	farwritetext UnknownText_0x174bc5
 	keeptextopen
 	end
 
-UnknownScript_0xa03de:
+.Jose:
 	farwritetext UnknownText_0x17507d
 	keeptextopen
 	end
 
-UnknownScript_0xa03e4:
+.Joey:
 	farwritetext UnknownText_0x175693
 	keeptextopen
 	end
 
-UnknownScript_0xa03ea:
+.Wade:
 	farwritetext UnknownText_0x175976
 	keeptextopen
 	end
 
-UnknownScript_0xa03f0:
+.Ralph:
 	farwritetext UnknownText_0x175d40
 	keeptextopen
 	end
 
-UnknownScript_0xa03f6:
+.Anthony:
 	farwritetext UnknownText_0x176bee
 	keeptextopen
 	end
 
-UnknownScript_0xa03fc:
+.Todd:
 	farwritetext UnknownText_0x176f60
 	keeptextopen
 	end
 
-UnknownScript_0xa0402:
+.Arnie:
 	farwritetext UnknownText_0x64ada
 	keeptextopen
 	end
 
-UnknownScript_0xa0408:
+.Alan:
 	farwritetext UnknownText_0x64da4
 	keeptextopen
 	end
 
-UnknownScript_0xa040e:
+.Chad:
 	farwritetext UnknownText_0x65419
 	keeptextopen
 	end
 
-UnknownScript_0xa0414:
+.Tully:
 	farwritetext UnknownText_0x65f17
 	keeptextopen
 	end
 
-UnknownScript_0xa041a:
+.Brent:
 	farwritetext UnknownText_0x66214
 	keeptextopen
 	end
 
-UnknownScript_0xa0420:
+.Vance:
 	farwritetext UnknownText_0x66a3a
 	keeptextopen
 	end
 
-UnknownScript_0xa0426:
+.Wilton:
 	farwritetext UnknownText_0x66bf3
 	keeptextopen
 	end
 
-UnknownScript_0xa042c:
+.Parry:
 	farwritetext UnknownText_0x67096
 	keeptextopen
 	end
@@ -637,45 +637,45 @@
 
 UnknownScript_0xa0432:
 	checkcode VAR_CALLERID
-	if_equal $c, UnknownScript_0xa0450
-	if_equal $e, UnknownScript_0xa0456
-	if_equal $12, UnknownScript_0xa045c
-	if_equal $15, UnknownScript_0xa0462
-	if_equal $1a, UnknownScript_0xa0468
-	if_equal $1f, UnknownScript_0xa046e
-	if_equal $24, UnknownScript_0xa0474
+	if_equal PHONE_COOLTRAINERF_BETH, .Beth
+	if_equal PHONE_COOLTRAINERF_REENA, .Reena
+	if_equal PHONE_PICNICKER_LIZ, .Liz
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+	if_equal PHONE_PICNICKER_ERIN, .Erin
 
-UnknownScript_0xa0450:
+.Beth:
 	farwritetext UnknownText_0x174e4e
 	keeptextopen
 	end
 
-UnknownScript_0xa0456:
+.Reena:
 	farwritetext UnknownText_0x17543a
 	keeptextopen
 	end
 
-UnknownScript_0xa045c:
+.Liz:
 	farwritetext UnknownText_0x17610a
 	keeptextopen
 	end
 
-UnknownScript_0xa0462:
+.Gina:
 	farwritetext UnknownText_0x1772e2
 	keeptextopen
 	end
 
-UnknownScript_0xa0468:
+.Dana:
 	farwritetext UnknownText_0x65091
 	keeptextopen
 	end
 
-UnknownScript_0xa046e:
+.Tiffany:
 	farwritetext UnknownText_0x66730
 	keeptextopen
 	end
 
-UnknownScript_0xa0474:
+.Erin:
 	farwritetext UnknownText_0x6722e
 	keeptextopen
 	end
@@ -690,147 +690,147 @@
 
 UnknownScript_0xa0484:
 	checkcode VAR_CALLERID
-	if_equal $5, UnknownScript_0xa04d6
-	if_equal $7, UnknownScript_0xa04db
-	if_equal $b, UnknownScript_0xa04e0
-	if_equal $d, UnknownScript_0xa04e5
-	if_equal $f, UnknownScript_0xa04ea
-	if_equal $10, UnknownScript_0xa04ef
-	if_equal $11, UnknownScript_0xa04f4
-	if_equal $13, UnknownScript_0xa04f9
-	if_equal $14, UnknownScript_0xa04fe
-	if_equal $16, UnknownScript_0xa0503
-	if_equal $17, UnknownScript_0xa0508
-	if_equal $18, UnknownScript_0xa050d
-	if_equal $1b, UnknownScript_0xa0512
-	if_equal $1c, UnknownScript_0xa0517
-	if_equal $1d, UnknownScript_0xa051c
-	if_equal $1e, UnknownScript_0xa0521
-	if_equal $20, UnknownScript_0xa0526
-	if_equal $21, UnknownScript_0xa052b
-	if_equal $22, UnknownScript_0xa0530
-	if_equal $23, UnknownScript_0xa0535
+	if_equal PHONE_SCHOOLBOY_JACK, .Jack
+	if_equal PHONE_SAILOR_HUEY, .Huey
+	if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_YOUNGSTER_JOEY, .Joey
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_FISHER_RALPH, .Ralph
+	if_equal PHONE_HIKER_ANTHONY, .Anthony
+	if_equal PHONE_CAMPER_TODD, .Todd
+	if_equal PHONE_JUGGLER_IRWIN, .Irwin
+	if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+	if_equal PHONE_POKEFANM_DEREK, .Derek
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_POKEMANIAC_BRENT, .Brent
+	if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+	if_equal PHONE_FISHER_WILTON, .Wilton
+	if_equal PHONE_BLACKBELT_KENJI, .Kenji
+	if_equal PHONE_HIKER_PARRY, .Parry
 
-UnknownScript_0xa04d6:
+.Jack:
 	farwritetext UnknownText_0x174251
 	end
 
-UnknownScript_0xa04db:
+.Huey:
 	farwritetext UnknownText_0x174962
 	end
 
-UnknownScript_0xa04e0:
+.Gaven:
 	farwritetext UnknownText_0x174c0e
 	end
 
-UnknownScript_0xa04e5:
+.Jose:
 	farwritetext UnknownText_0x175106
 	end
 
-UnknownScript_0xa04ea:
+.Joey:
 	farwritetext UnknownText_0x17570a
 	end
 
-UnknownScript_0xa04ef:
+.Wade:
 	farwritetext UnknownText_0x1759e7
 	end
 
-UnknownScript_0xa04f4:
+.Ralph:
 	farwritetext UnknownText_0x175db7
 	end
 
-UnknownScript_0xa04f9:
+.Anthony:
 	farwritetext UnknownText_0x176c47
 	end
 
-UnknownScript_0xa04fe:
+.Todd:
 	farwritetext UnknownText_0x176fdb
 	end
 
-UnknownScript_0xa0503:
+.Irwin:
 	farwritetext UnknownText_0x64000
 	end
 
-UnknownScript_0xa0508:
+.Arnie:
 	farwritetext UnknownText_0x64b48
 	end
 
-UnknownScript_0xa050d:
+.Alan:
 	farwritetext UnknownText_0x64e1f
 	end
 
-UnknownScript_0xa0512:
+.Chad:
 	farwritetext UnknownText_0x65471
 	end
 
-UnknownScript_0xa0517:
+.Derek:
 	farwritetext UnknownText_0x65c4e
 	end
 
-UnknownScript_0xa051c:
+.Tully:
 	farwritetext UnknownText_0x65f6e
 	end
 
-UnknownScript_0xa0521:
+.Brent:
 	farwritetext UnknownText_0x662a9
 	end
 
-UnknownScript_0xa0526:
+.Vance:
 	farwritetext UnknownText_0x66a93
 	end
 
-UnknownScript_0xa052b:
+.Wilton:
 	farwritetext UnknownText_0x66c58
 	end
 
-UnknownScript_0xa0530:
+.Kenji:
 	farwritetext UnknownText_0x66dab
 	end
 
-UnknownScript_0xa0535:
+.Parry:
 	farwritetext UnknownText_0x670eb
 	end
 
 UnknownScript_0xa053a:
 	checkcode VAR_CALLERID
-	if_equal $6, UnknownScript_0xa055c
-	if_equal $c, UnknownScript_0xa0561
-	if_equal $e, UnknownScript_0xa0566
-	if_equal $12, UnknownScript_0xa056b
-	if_equal $15, UnknownScript_0xa0570
-	if_equal $1a, UnknownScript_0xa0575
-	if_equal $1f, UnknownScript_0xa057a
-	if_equal $24, UnknownScript_0xa057f
+	if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+	if_equal PHONE_COOLTRAINERF_BETH, .Beth
+	if_equal PHONE_COOLTRAINERF_REENA, .Reena
+	if_equal PHONE_PICNICKER_LIZ, .Liz
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+	if_equal PHONE_PICNICKER_ERIN, .Erin
 
-UnknownScript_0xa055c:
+.Beverly:
 	farwritetext UnknownText_0x1747ac
 	end
 
-UnknownScript_0xa0561:
+.Beth:
 	farwritetext UnknownText_0x174eb7
 	end
 
-UnknownScript_0xa0566:
+.Reena:
 	farwritetext UnknownText_0x175488
 	end
 
-UnknownScript_0xa056b:
+.Liz:
 	farwritetext UnknownText_0x17620a
 	end
 
-UnknownScript_0xa0570:
+.Gina:
 	farwritetext UnknownText_0x177361
 	end
 
-UnknownScript_0xa0575:
+.Dana:
 	farwritetext UnknownText_0x650e2
 	end
 
-UnknownScript_0xa057a:
+.Tiffany:
 	farwritetext UnknownText_0x667f7
 	end
 
-UnknownScript_0xa057f:
+.Erin:
 	farwritetext UnknownText_0x67281
 	end
 
@@ -856,15 +856,15 @@
 
 UnknownScript_0xa05a4:
 	checkcode VAR_CALLERID
-	if_equal $10, UnknownScript_0xa05ae
-	if_equal $1c, UnknownScript_0xa05b6
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_POKEFANM_DEREK, .Derek
 
-UnknownScript_0xa05ae:
+.Wade:
 	farwritetext UnknownText_0x1759f7
 	keeptextopen
 	jump UnknownScript_0xa0484
 
-UnknownScript_0xa05b6:
+.Derek:
 	farwritetext UnknownText_0x65c66
 	keeptextopen
 	jump UnknownScript_0xa0484
@@ -896,57 +896,57 @@
 
 UnknownScript_0xa05e6:
 	checkcode VAR_CALLERID
-	if_equal $d, UnknownScript_0xa0600
-	if_equal $10, UnknownScript_0xa0605
-	if_equal $18, UnknownScript_0xa060a
-	if_equal $1c, UnknownScript_0xa060f
-	if_equal $1d, UnknownScript_0xa0614
-	if_equal $21, UnknownScript_0xa0619
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_POKEFANM_DEREK, .Derek
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_FISHER_WILTON, .Wilton
 
-UnknownScript_0xa0600:
+.Jose:
 	farwritetext UnknownText_0x175116
 	end
 
-UnknownScript_0xa0605:
+.Wade:
 	farwritetext UnknownText_0x175a60
 	end
 
-UnknownScript_0xa060a:
+.Alan:
 	farwritetext UnknownText_0x64e2f
 	end
 
-UnknownScript_0xa060f:
+.Derek:
 	farwritetext UnknownText_0x65cf9
 	end
 
-UnknownScript_0xa0614:
+.Tully:
 	farwritetext UnknownText_0x65f88
 	end
 
-UnknownScript_0xa0619:
+.Wilton:
 	farwritetext UnknownText_0x66c6b
 	end
 
 UnknownScript_0xa061e:
 	checkcode VAR_CALLERID
-	if_equal $6, UnknownScript_0xa0630
-	if_equal $15, UnknownScript_0xa0635
-	if_equal $1a, UnknownScript_0xa063a
-	if_equal $1f, UnknownScript_0xa063f
+	if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
 
-UnknownScript_0xa0630:
+.Beverly:
 	farwritetext UnknownText_0x1747cc
 	end
 
-UnknownScript_0xa0635:
+.Gina:
 	farwritetext UnknownText_0x1773e7
 	end
 
-UnknownScript_0xa063a:
+.Dana:
 	farwritetext UnknownText_0x650ec
 	end
 
-UnknownScript_0xa063f:
+.Tiffany:
 	farwritetext UnknownText_0x66801
 	end
 
--- a/engine/movement.asm
+++ b/engine/movement.asm
@@ -59,7 +59,7 @@
 	dw Movement_39                    ; 39
 	dw Movement_remove_fixed_facing   ; 3a
 	dw Movement_fix_facing            ; 3b
-	dw Movement_3c                    ; 3c
+	dw Movement_show_person           ; 3c
 	dw Movement_hide_person           ; 3d
 	dw Movement_step_sleep_1          ; 3e
 	dw Movement_step_sleep_2          ; 3f
@@ -78,8 +78,8 @@
 	dw Movement_teleport_from         ; 4c
 	dw Movement_teleport_to           ; 4d
 	dw Movement_skyfall               ; 4e
-	dw Movement_step_wait5            ; 4f
-	dw Movement_50                    ; 50
+	dw Movement_step_dig              ; 4f
+	dw Movement_step_bump             ; 50
 	dw Movement_fish_got_bite         ; 51
 	dw Movement_fish_cast_rod         ; 52
 	dw Movement_hide_emote            ; 53
@@ -87,56 +87,56 @@
 	dw Movement_step_shake            ; 55
 	dw Movement_56                    ; 56
 	dw Movement_rock_smash            ; 57
-	dw Movement_58                    ; 58
+	dw Movement_return_dig            ; 58
 	dw Movement_59                    ; 59
 ; 5129
 
 
 Movement_teleport_from: ; 5129
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $c
+	ld [hl], STEP_TYPE_TELEPORT_FROM
 	ret
 ; 5130
 
 Movement_teleport_to: ; 5130
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $d
+	ld [hl], STEP_TYPE_TELEPORT_TO
 	ret
 ; 5137
 
 Movement_skyfall: ; 5137
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $e
+	ld [hl], STEP_TYPE_SKYFALL
 	ret
 ; 513e
 
 Movement_59: ; 513e
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $19
+	ld [hl], STEP_TYPE_19
 	ret
 ; 5145
 
-Movement_step_wait5: ; 5145
+Movement_step_dig: ; 5145
 	call GetSpriteDirection
 	rlca
 	rlca
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld [hl], a
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $4
+	ld [hl], PERSON_ACTION_SPIN
 	call GetMovementByte
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	ld [hl], a
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $3
+	ld [hl], STEP_TYPE_03
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
@@ -143,11 +143,11 @@
 	ret
 ; 516a
 
-Movement_58: ; 516a
+Movement_return_dig: ; 516a
 	call GetSpriteDirection
 	rlca
 	rlca
-	ld hl, OBJECT_12
+	ld hl, OBJECT_STEP_FRAME
 	add hl, bc
 	ld [hl], a
 	call GetMovementByte
@@ -157,19 +157,19 @@
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $12
+	ld [hl], STEP_TYPE_RETURN_DIG
 	ret
 ; 5189
 
 Movement_fish_got_bite: ; 5189
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $6
-	ld hl, OBJECT_09
+	ld [hl], PERSON_ACTION_FISHING
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $10
+	ld [hl], STEP_TYPE_GOT_BITE
 	ret
 ; 5196
 
@@ -178,22 +178,22 @@
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	ld [hl], a
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $1
-	ld hl, OBJECT_09
+	ld [hl], PERSON_ACTION_STAND
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $11
+	ld [hl], STEP_TYPE_ROCK_SMASH
 	ret
 ; 51ab
 
 Movement_fish_cast_rod: ; 51ab
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $6
-	ld hl, OBJECT_09
+	ld [hl], PERSON_ACTION_FISHING
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 51b8
 
@@ -217,9 +217,9 @@
 	ld hl, VramState
 	res 7, [hl]
 
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $1
+	ld [hl], STEP_TYPE_STANDING
 	ret
 ; 51db
 
@@ -238,9 +238,9 @@
 	add hl, bc
 	ld [hl], a
 
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $3
+	ld [hl], STEP_TYPE_03
 
 	ld hl, VramState
 	res 7, [hl]
@@ -262,13 +262,13 @@
 ; 5210
 
 Movement_4b: ; 5210
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $1
+	ld [hl], PERSON_ACTION_STAND
 
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $4
+	ld [hl], STEP_TYPE_04
 
 	ld hl, VramState
 	res 7, [hl]
@@ -276,36 +276,36 @@
 ; 5222
 
 Movement_step_sleep_1: ; 5222
-	ld a, $1
-	jr Function5247
+	ld a, 1
+	jr Movement_step_sleep_common
 
 Movement_step_sleep_2: ; 5226
-	ld a, $2
-	jr Function5247
+	ld a, 2
+	jr Movement_step_sleep_common
 
 Movement_step_sleep_3: ; 522a
-	ld a, $3
-	jr Function5247
+	ld a, 3
+	jr Movement_step_sleep_common
 
 Movement_step_sleep_4: ; 522e
-	ld a, $4
-	jr Function5247
+	ld a, 4
+	jr Movement_step_sleep_common
 
 Movement_step_sleep_5: ; 5232
-	ld a, $5
-	jr Function5247
+	ld a, 5
+	jr Movement_step_sleep_common
 
 Movement_step_sleep_6: ; 5236
-	ld a, $6
-	jr Function5247
+	ld a, 6
+	jr Movement_step_sleep_common
 
 Movement_step_sleep_7: ; 523a
-	ld a, $7
-	jr Function5247
+	ld a, 7
+	jr Movement_step_sleep_common
 
 Movement_step_sleep_8: ; 523e
-	ld a, $8
-	jr Function5247
+	ld a, 8
+	jr Movement_step_sleep_common
 
 Movement_step_sleep: ; 5242
 ; parameters:
@@ -312,20 +312,20 @@
 ;	duration (DecimalParam)
 
 	call GetMovementByte
-	jr Function5247
+	jr Movement_step_sleep_common
 
-Function5247: ; 5247
+Movement_step_sleep_common: ; 5247
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	ld [hl], a
 
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $3
+	ld [hl], STEP_TYPE_03
 
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $1
+	ld [hl], PERSON_ACTION_STAND
 
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
@@ -333,17 +333,20 @@
 	ret
 ; 525f
 
-Movement_50: ; 525f
-	ld a, $1
+Movement_step_bump: ; 525f
+	ld a, 1
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	ld [hl], a
-	ld hl, OBJECT_09
+
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $b
-	ld hl, OBJECT_11
+	ld [hl], STEP_TYPE_BUMP
+
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $3
+	ld [hl], PERSON_ACTION_BUMP
+
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
@@ -351,16 +354,19 @@
 ; 5279
 
 Movement_56: ; 5279
-	ld a, $18
+	ld a, 24
 	ld hl, OBJECT_STEP_DURATION
 	add hl, bc
 	ld [hl], a
-	ld hl, OBJECT_09
+
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $3
-	ld hl, OBJECT_11
+	ld [hl], STEP_TYPE_03
+
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $b
+	ld [hl], PERSON_ACTION_0B
+
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
@@ -370,7 +376,7 @@
 Movement_38: ; 5293
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	res 3, [hl]
+	res SLIDING, [hl]
 	jp ContinueReadingMovement
 ; 529c
 
@@ -377,7 +383,7 @@
 Movement_39: ; 529c
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	set 3, [hl]
+	set SLIDING, [hl]
 	jp ContinueReadingMovement
 ; 52a5
 
@@ -384,7 +390,7 @@
 Movement_remove_fixed_facing: ; 52a5
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	res 2, [hl]
+	res FIXED_FACING, [hl]
 	jp ContinueReadingMovement
 ; 52ae
 
@@ -391,14 +397,14 @@
 Movement_fix_facing: ; 52ae
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	set 2, [hl]
+	set FIXED_FACING, [hl]
 	jp ContinueReadingMovement
 ; 52b7
 
-Movement_3c: ; 52b7
+Movement_show_person: ; 52b7
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	res 0, [hl]
+	res INVISIBLE, [hl]
 	jp ContinueReadingMovement
 ; 52c0
 
@@ -405,17 +411,17 @@
 Movement_hide_person: ; 52c0
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	set 0, [hl]
+	set INVISIBLE, [hl]
 	jp ContinueReadingMovement
 ; 52c9
 
 Movement_hide_emote: ; 52c9
-	call Function5579
+	call DespawnEmote
 	jp ContinueReadingMovement
 ; 52cf
 
 Movement_show_emote: ; 52cf
-	call Function5547
+	call SpawnEmote
 	jp ContinueReadingMovement
 ; 52d5
 
@@ -424,7 +430,7 @@
 ;	displacement (DecimalParam)
 
 	call GetMovementByte
-	call Function5565
+	call ShakeScreen
 	jp ContinueReadingMovement
 ; 52de
 
@@ -448,9 +454,11 @@
 	ld hl, OBJECT_FACING
 	add hl, bc
 	ld [hl], a
-	ld hl, OBJECT_11
+
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $1
+	ld [hl], PERSON_ACTION_STAND
+
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld [hl], STANDING
@@ -721,12 +729,14 @@
 	ld hl, OBJECT_29
 	add hl, bc
 	ld [hl], a
-	ld hl, OBJECT_11
+
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $2
-	ld hl, OBJECT_09
+	ld [hl], PERSON_ACTION_STEP
+
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $a
+	ld [hl], STEP_TYPE_HALF_STEP
 	ret
 ; 5412
 
@@ -733,36 +743,37 @@
 NormalStep: ; 5412
 	call Function4690
 	call Function463f
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $2
-	ld hl, OBJECT_STANDING_TILE
+	ld [hl], PERSON_ACTION_STEP
+
+	ld hl, OBJECT_NEXT_TILE
 	add hl, bc
 	ld a, [hl]
 	call CheckSuperTallGrassTile
-	jr z, .asm_542d
+	jr z, .shake_grass
 
-	call Function1875
-	jr c, .asm_5430
+	call CheckGrassTile
+	jr c, .skip_grass
 
-.asm_542d
-	call Function5556
+.shake_grass
+	call ShakeGrass
 
-.asm_5430
-	ld hl, wd4cf
+.skip_grass
+	ld hl, wCenteredObject
 	ld a, [hMapObjectIndexBuffer]
 	cp [hl]
-	jr z, .asm_543f
+	jr z, .player
 
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $2
+	ld [hl], STEP_TYPE_NPC_WALK
 	ret
 
-.asm_543f
-	ld hl, OBJECT_09
+.player
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $6
+	ld [hl], STEP_TYPE_PLAYER_WALK
 	ret
 ; 5446
 
@@ -769,22 +780,25 @@
 TurningStep: ; 5446
 	call Function4690
 	call Function463f
-	ld hl, OBJECT_11
+
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $4
-	ld hl, wd4cf
+	ld [hl], PERSON_ACTION_SPIN
+
+	ld hl, wCenteredObject
 	ld a, [hMapObjectIndexBuffer]
 	cp [hl]
-	jr z, .asm_5461
-	ld hl, OBJECT_09
+	jr z, .player
+
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $2
+	ld [hl], STEP_TYPE_NPC_WALK
 	ret
 
-.asm_5461
-	ld hl, OBJECT_09
+.player
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $6
+	ld [hl], STEP_TYPE_PLAYER_WALK
 	ret
 ; 5468
 
@@ -792,22 +806,25 @@
 SlideStep: ; 5468
 	call Function4690
 	call Function463f
-	ld hl, OBJECT_11
+
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $1
-	ld hl, wd4cf
+	ld [hl], PERSON_ACTION_STAND
+
+	ld hl, wCenteredObject
 	ld a, [hMapObjectIndexBuffer]
 	cp [hl]
-	jr z, .asm_5483
-	ld hl, OBJECT_09
+	jr z, .player
+
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $2
+	ld [hl], STEP_TYPE_NPC_WALK
 	ret
 
-.asm_5483
-	ld hl, OBJECT_09
+.player
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $6
+	ld [hl], STEP_TYPE_PLAYER_WALK
 	ret
 ; 548a
 
@@ -817,25 +834,30 @@
 	ld hl, OBJECT_31
 	add hl, bc
 	ld [hl], $0
+
 	ld hl, OBJECT_FLAGS2
 	add hl, bc
 	res 3, [hl]
-	ld hl, OBJECT_11
+
+	ld hl, OBJECT_ACTION
 	add hl, bc
-	ld [hl], $2
-	call Function5529
-	ld hl, wd4cf
+	ld [hl], PERSON_ACTION_STEP
+
+	call SpawnShadow
+
+	ld hl, wCenteredObject
 	ld a, [hMapObjectIndexBuffer]
 	cp [hl]
-	jr z, .asm_54b1
-	ld hl, OBJECT_09
+	jr z, .player
+
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $8
+	ld [hl], STEP_TYPE_NPC_JUMP
 	ret
 
-.asm_54b1
-	ld hl, OBJECT_09
+.player
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
-	ld [hl], $9
+	ld [hl], STEP_TYPE_PLAYER_JUMP
 	ret
 ; 54b8
--- /dev/null
+++ b/engine/mysterygift.asm
@@ -1,0 +1,1702 @@
+DoMysteryGift: ; 1048ba (41:48ba)
+	call ClearTileMap
+	call ClearSprites
+	call WaitBGMap
+	call Function105153
+	hlcoord 3, 8
+	ld de, .String_PressAToLink_BToCancel
+	call PlaceString
+	call WaitBGMap
+	callba Function2c642
+	call Function1050fb
+	ld a, $2
+	ld [wca01], a
+	ld a, $14
+	ld [wca02], a
+	ld a, [rIE]
+	push af
+	call Function104a95
+	ld d, a
+	xor a
+	ld [rIF], a
+	pop af
+	ld [rIE], a
+	push de
+	call ClearTileMap
+	call EnableLCD
+	call WaitBGMap
+	ld b, SCGB_08
+	call GetSGBLayout
+	call SetPalettes
+	pop de
+	hlcoord 2, 8
+	ld a, d
+	ld de, .Text_LinkCanceled ; Link has been canceled
+	cp $10
+	jp z, .LinkCanceled
+	cp $6c
+	jp nz, .CommunicationError
+	ld a, [wc900]
+	cp $3
+	jr z, .skip_checks
+	call .CheckAlreadyGotFiveGiftsToday
+	ld hl, .Text_MaxFiveGifts ; Only 5 gifts a day
+	jp nc, .PrintTextAndExit
+	call .CheckAlreadyGotAGiftFromThatPerson
+	ld hl, .Text_MaxOneGiftPerPerson ; Only one gift a day per person
+	jp c, .PrintTextAndExit
+.skip_checks
+	ld a, [wc962]
+	and a
+	jp nz, .GiftWaiting
+	ld a, [wc912]
+	and a
+	jp nz, .FriendNotReady
+	ld a, [wc900]
+	cp $3
+	jr z, .skip_append_save
+	call .AddMysteryGiftPartnerID
+	ld a, [wc900]
+	cp $4
+	jr z, .skip_append_save
+	call .SaveMysteryGiftTrainerName
+	callba RestoreMobileEventIndex
+	callba MobileFn_1060a9
+	callba BackupMobileEventIndex
+.skip_append_save
+	ld a, [wc90f]
+	and a
+	jr z, .item
+	ld a, [wc911]
+	ld c, a
+	callba MysteryGiftGetDecoration
+	push bc
+	call Function105069
+	pop bc
+	jr nz, .item
+	callab GetDecorationName_c
+	ld h, d
+	ld l, e
+	ld de, StringBuffer1
+	ld bc, ITEM_NAME_LENGTH
+	call CopyBytes
+	ld hl, .Text_SentToHome ; sent decoration to home
+	jr .PrintTextAndExit
+
+.item
+	call GetMysteryGiftBank
+	ld a, [wc910]
+	ld c, a
+	callba MysteryGiftGetItemHeldEffect
+	ld a, c
+	ld [sBackupMysteryGiftItem], a
+	ld [wNamedObjectIndexBuffer], a
+	call CloseSRAM
+	call GetItemName
+	ld hl, .Text_Sent ; sent item
+	jr .PrintTextAndExit
+
+.LinkCanceled: ; 1049af (41:49af)
+	ld hl, .Text_LinkCanceled ; Link has been canceled
+	jr .PrintTextAndExit
+
+.CommunicationError: ; 1049b4 (41:49b4)
+	ld hl, .Text_CommunicationError ; Communication error
+	call PrintText
+	jp DoMysteryGift
+
+.GiftWaiting: ; 1049bd (41:49bd)
+	ld hl, .Text_ReceiveGiftAtCounter ; receive gift at counter
+	jr .PrintTextAndExit
+
+.FriendNotReady: ; 1049c2 (41:49c2)
+	ld hl, .Text_FriendNotReady ; friend not ready
+
+.PrintTextAndExit: ; 1049c5 (41:49c5)
+	call PrintText
+	ld a, $e3
+	ld [rLCDC], a
+	ret
+; 1049cd (41:49cd)
+
+.String_PressAToLink_BToCancel: ; 1049cd
+	db   "Press A to"
+	next "link IR-Device"
+	next "Press B to"
+	next "cancel it."
+	db   "@"
+; 1049fd
+
+.Text_LinkCanceled: ; 1049fd
+	text_jump UnknownText_0x1c0436
+	db "@"
+; 104a02
+
+.Text_CommunicationError: ; 104a02
+	text_jump UnknownText_0x1c0454
+	db "@"
+; 104a07
+
+.Text_ReceiveGiftAtCounter: ; 104a07
+	text_jump UnknownText_0x1c046a
+	db "@"
+; 104a0c
+
+.Text_FriendNotReady: ; 104a0c
+	text_jump UnknownText_0x1c048e
+	db "@"
+; 104a11
+
+.Text_MaxFiveGifts: ; 104a11
+	text_jump UnknownText_0x1c04a7
+	db "@"
+; 104a16
+
+.Text_MaxOneGiftPerPerson: ; 104a16
+	text_jump UnknownText_0x1c04c6
+	db "@"
+; 104a1b
+
+.Text_Sent: ; 104a1b
+	text_jump UnknownText_0x1c04e9
+	db "@"
+; 104a20
+
+.Text_SentToHome: ; 104a20
+	text_jump UnknownText_0x1c04fa
+	db "@"
+; 104a25
+
+.CheckAlreadyGotFiveGiftsToday: ; 104a25 (41:4a25)
+	call GetMysteryGiftBank
+	ld a, [sNumDailyMysteryGiftPartnerIDs]
+	cp $5
+	jp CloseSRAM
+
+.CheckAlreadyGotAGiftFromThatPerson: ; 104a30 (41:4a30)
+	call GetMysteryGiftBank
+	ld a, [wMysteryGiftPartnerID]
+	ld b, a
+	ld a, [wMysteryGiftPartnerID + 1]
+	ld c, a
+	ld a, [sNumDailyMysteryGiftPartnerIDs]
+	ld d, a
+	ld hl, sDailyMysteryGiftPartnerIDs
+.loop
+	ld a, d
+	and a
+	jr z, .No
+	ld a, [hli]
+	cp b
+	jr nz, .skip
+	ld a, [hl]
+	cp c
+	jr z, .Yes
+.skip
+	inc hl
+	dec d
+	jr .loop
+.Yes
+	scf
+.No
+	jp CloseSRAM
+
+.AddMysteryGiftPartnerID: ; 104a56 (41:4a56)
+	call GetMysteryGiftBank
+	ld hl, sNumDailyMysteryGiftPartnerIDs
+	ld a, [hl]
+	inc [hl]
+	ld hl, sDailyMysteryGiftPartnerIDs ; inc hl
+	ld e, a
+	ld d, $0
+rept 2
+	add hl, de
+endr
+	ld a, [wMysteryGiftPartnerID]
+	ld [hli], a
+	ld a, [wMysteryGiftPartnerID + 1]
+	ld [hl], a
+	jp CloseSRAM
+
+.SaveMysteryGiftTrainerName: ; 104a71 (41:4a71)
+	call GetMysteryGiftBank
+	ld a, $1
+	ld [sMysteryGiftTrainerHouseFlag], a
+	ld hl, wMysteryGiftPartnerName
+	ld de, sMysteryGiftPartnerName
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	ld a, $1
+	ld [de], a
+	inc de
+	ld hl, wMysteryGiftTrainerData
+	ld bc, (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2
+	call CopyBytes
+	jp CloseSRAM
+
+Function104a95: ; 104a95 (41:4a95)
+	di
+	callba ClearChannels
+	call Function104d5e
+.loop2
+	call Function104d96
+	call Function104ddd
+	ld a, [hPrintNum10]
+	cp $10
+	jp z, Function104bd0
+	cp $6c
+	jr nz, .loop2
+	ld a, [hPrintNum9]
+	cp $2
+	jr z, Function104b22
+	ld hl, $ffb3
+	ld b, $1
+	call Function104d56
+	jr nz, .ly_loop
+	call Function104b49
+	jp nz, Function104bd0
+	jr asm_104b0a
+.ly_loop
+	ld a, [rLY]
+	cp $90
+	jr c, .ly_loop
+	ld c, rRP % $100
+	ld a, $c0
+	ld [$ff00+c], a
+	ld b, $f0
+.loop3
+	push bc
+	call Function105038
+	ld b, $2
+	ld c, rRP % $100
+.ly_loop2
+	ld a, [$ff00+c]
+	and b
+	ld b, a
+	ld a, [rLY]
+	cp $90
+	jr nc, .ly_loop2
+.ly_loop3
+	ld a, [$ff00+c]
+	and b
+	ld b, a
+	ld a, [rLY]
+	cp $90
+	jr c, .ly_loop3
+	ld a, b
+	pop bc
+	dec b
+	jr z, .loop2
+	or a
+	jr nz, .loop2
+	ld a, [hMoneyTemp + 1]
+	bit 1, a
+	jr z, .loop3
+	ld a, $10
+	ld [hPrintNum10], a
+	jp Function104bd0
+
+Function104b04: ; 104b04 (41:4b04)
+	call Function104b40
+	jp nz, Function104bd0
+
+asm_104b0a: ; 104b0a (41:4b0a)
+	call Function104d38
+	jp nz, Function104bd0
+	call Function104b88
+	jp nz, Function104bd0
+	call Function104d43
+	jp nz, Function104bd0
+	call Function105033
+	jp Function104bd0
+
+Function104b22: ; 104b22 (41:4b22)
+	call Function104b88
+	jp nz, Function104bd0
+	call Function104d43
+	jp nz, Function104bd0
+	call Function104b40
+	jp nz, Function104bd0
+	call Function104d38
+	jp nz, Function104bd0
+	call Function10502e
+	jp Function104bd0
+
+Function104b40: ; 104b40 (41:4b40)
+	ld hl, $ffb3
+	ld b, $1
+	call Function104d56
+	ret nz
+
+Function104b49: ; 104b49 (41:4b49)
+	call Function105033
+	ld a, [hPrintNum10]
+	cp $6c
+	ret nz
+	ld a, [$ffb3]
+	cp $96
+	jp nz, Function104d32
+	ld a, $90
+	ld [$ffb3], a
+	call Function104d38
+	ret nz
+	ld hl, $ffb3
+	ld b, $1
+	call Function104d4e
+	ret nz
+	call Function10502e
+	ld a, [hPrintNum10]
+	cp $6c
+	ret nz
+	call Function104d43
+	ret nz
+	ld hl, wMysteryGiftTrainerData
+	ld a, [wca02]
+	ld b, a
+	call Function104d56
+	ret nz
+	call Function105033
+	ld a, [hPrintNum10]
+	cp $6c
+	ret
+
+Function104b88: ; 104b88 (41:4b88)
+	ld a, $96
+	ld [$ffb3], a
+	ld hl, $ffb3
+	ld b, $1
+	call Function104d4e
+	ret nz
+	call Function10502e
+	ld a, [hPrintNum10]
+	cp $6c
+	ret nz
+	call Function104d43
+	ret nz
+	ld hl, $ffb3
+	ld b, $1
+	call Function104d56
+	ret nz
+	call Function105033
+	ld a, [hPrintNum10]
+	cp $6c
+	ret nz
+	ld a, [$ffb3]
+	cp $90
+	jp nz, Function104d32
+	call Function104d38
+	ret nz
+	ld hl, OverworldMap
+	ld a, [wca02]
+	ld b, a
+	call Function104d4e
+	ret nz
+	call Function10502e
+	ld a, [hPrintNum10]
+	cp $6c
+	ret
+
+Function104bd0: ; 104bd0 (41:4bd0)
+	nop
+	ld a, [hPrintNum10]
+	cp $10
+	jr z, .asm_104c18
+	cp $6c
+	jr nz, .asm_104c18
+	ld hl, wca01
+	dec [hl]
+	jr z, .asm_104c18
+	ld hl, wMysteryGiftTrainerData
+	ld de, wc900
+	ld bc, $14
+	call CopyBytes
+	ld a, [wMysteryGiftTrainerData]
+	cp $3
+	jr nc, .asm_104c18
+	callba Function10510b
+	call Function1050fb
+	ld a, $26
+	ld [wca02], a
+	ld a, [hPrintNum9]
+	cp $2
+	jr z, .asm_104c10
+	call Function104d43
+	jr nz, Function104bd0
+	jp Function104b04
+.asm_104c10
+	call Function104d38
+	jr nz, Function104bd0
+	jp Function104b22
+.asm_104c18
+	ld a, [hPrintNum10]
+	push af
+	call Function104da0
+	xor a
+	ld [rIF], a
+	ld a, [rIE]
+	or $1
+	ld [rIE], a
+	ei
+	call DelayFrame
+	pop af
+	ret
+
+Function104c2d: ; 104c2d (41:4c2d)
+	di
+	callba ClearChannels
+	call Function104d5e
+.asm_104c37
+	call Function104d96
+	call Function104ddd
+	ld a, [hPrintNum10]
+	cp $10
+	jp z, Function104d1c
+	cp $6c
+	jr nz, .asm_104c37
+	ld a, [hPrintNum9]
+	cp $2
+	jr z, .asm_104c6c
+	call Function104c8a
+	jp nz, Function104d1c
+	call Function104d38
+	jp nz, Function104d1c
+	call Function104cd2
+	jp nz, Function104d1c
+	call Function104d43
+	jp nz, Function104d1c
+	call Function105033
+	jp Function104d1c
+.asm_104c6c
+	call Function104cd2
+	jp nz, Function104d1c
+	call Function104d43
+	jp nz, Function104d1c
+	call Function104c8a
+	jp nz, Function104d1c
+	call Function104d38
+	jp nz, Function104d1c
+	call Function10502e
+	jp Function104d1c
+
+Function104c8a: ; 104c8a (41:4c8a)
+	ld hl, $ffb3
+	ld b, $1
+	call Function104d56
+	ret nz
+	call Function105033
+	ld a, [hPrintNum10]
+	cp $6c
+	ret nz
+	ld a, [$ffb3]
+	cp $3c
+	jp nz, Function104d32
+	swap a
+	ld [$ffb3], a
+	call Function104d38
+	ret nz
+	ld hl, $ffb3
+	ld b, $1
+	call Function104d4e
+	ret nz
+	call Function10502e
+	ld a, [hPrintNum10]
+	cp $6c
+	ret nz
+	call Function104d43
+	ret nz
+	ld hl, wMysteryGiftTrainerData
+	ld a, [wca02]
+	ld b, a
+	call Function104d56
+	ret nz
+	call Function105033
+	ld a, [hPrintNum10]
+	cp $6c
+	ret
+
+Function104cd2: ; 104cd2 (41:4cd2)
+	ld a, $3c
+	ld [$ffb3], a
+	ld hl, $ffb3
+	ld b, $1
+	call Function104d4e
+	ret nz
+	call Function10502e
+	ld a, [hPrintNum10]
+	cp $6c
+	ret nz
+	call Function104d43
+	ret nz
+	ld hl, $ffb3
+	ld b, $1
+	call Function104d56
+	ret nz
+	call Function105033
+	ld a, [hPrintNum10]
+	cp $6c
+	ret nz
+	ld a, [$ffb3]
+	swap a
+	cp $3c
+	jp nz, Function104d32
+	call Function104d38
+	ret nz
+	ld hl, OverworldMap
+	ld a, [wca02]
+	ld b, a
+	call Function104d4e
+	ret nz
+	call Function10502e
+	ld a, [hPrintNum10]
+	cp $6c
+	ret
+
+Function104d1c: ; 104d1c (41:4d1c)
+	nop
+	ld a, [hPrintNum10]
+	push af
+	call Function104da0
+	xor a
+	ld [rIF], a
+	ld a, [rIE]
+	or $1
+	ld [rIE], a
+	ei
+	call DelayFrame
+	pop af
+	ret
+
+Function104d32: ; 104d32 (41:4d32)
+	ld a, $80
+	ld [hPrintNum10], a
+	and a
+	ret
+
+Function104d38: ; 104d38 (41:4d38)
+	call Function104d96
+	call Function104e46
+	ld a, [hPrintNum10]
+	cp $6c
+	ret
+
+Function104d43: ; 104d43 (41:4d43)
+	call Function104d96
+	call Function104dfe
+	ld a, [hPrintNum10]
+	cp $6c
+	ret
+
+Function104d4e: ; 104d4e (41:4d4e)
+	call Function104e93
+	ld a, [hPrintNum10]
+	cp $6c
+	ret
+
+Function104d56: ; 104d56 (41:4d56)
+	call Function104f57
+	ld a, [hPrintNum10]
+	cp $6c
+	ret
+
+Function104d5e: ; 104d5e (41:4d5e)
+	call Function104d74
+	ld a, $4
+	ld [rIE], a
+	xor a
+	ld [rIF], a
+	call Function104d96
+	xor a
+	ld b, a
+.asm_104d6d
+	inc a
+	jr nz, .asm_104d6d
+	inc b
+	jr nz, .asm_104d6d
+	ret
+
+Function104d74: ; 104d74 (41:4d74)
+	xor a
+	ld [rTAC], a
+	ld a, $fe
+	ld [rTMA], a
+	ld [rTIMA], a
+	ld a, $2
+	ld [rTAC], a
+	or $4
+	ld [rTAC], a
+	ret
+
+Function104d86: ; 104d86 (41:4d86)
+	xor a
+	ld [rTAC], a
+	ld [rTMA], a
+	ld [rTIMA], a
+	ld a, $2
+	ld [rTAC], a
+	or $4
+	ld [rTAC], a
+	ret
+
+Function104d96: ; 104d96 (41:4d96)
+	ld a, $c0
+	call Function104e8c
+	ld a, $1
+	ld [hPrintNum9], a
+	ret
+
+Function104da0: ; 104da0 (41:4da0)
+	xor a
+	call Function104e8c
+	ld a, $2
+	ld [rTAC], a
+	ret
+
+Function104da9: ; 104da9 (41:4da9)
+	inc d
+	ret z
+	xor a
+	ld [rIF], a
+	halt
+	ld a, [$ff00+c]
+	bit 1, a
+	jr z, Function104da9
+	or a
+	ret
+
+Function104db7: ; 104db7 (41:4db7)
+	inc d
+	ret z
+	xor a
+	ld [rIF], a
+	halt
+	ld a, [$ff00+c]
+	bit 1, a
+	jr nz, Function104db7
+	or a
+	ret
+
+Function104dc5: ; 104dc5 (41:4dc5)
+	ld a, $c1
+	ld [$ff00+c], a
+.asm_104dc8
+	dec d
+	ret z
+	xor a
+	ld [rIF], a
+	halt
+	jr .asm_104dc8
+
+Function104dd1: ; 104dd1 (41:4dd1)
+	ld a, $c0
+	ld [$ff00+c], a
+.asm_104dd4
+	dec d
+	ret z
+	xor a
+	ld [rIF], a
+	halt
+	jr .asm_104dd4
+
+Function104ddd: ; 104ddd (41:4ddd)
+	ld d, $0
+	ld e, d
+	ld a, $1
+	ld [hPrintNum9], a
+.asm_104de4
+	call Function105038
+	ld b, $2
+	ld c, rRP % $100
+	ld a, [hMoneyTemp + 1]
+	bit 1, a
+	jr z, .asm_104df6
+	ld a, $10
+	ld [hPrintNum10], a
+	ret
+.asm_104df6
+	bit 0, a
+	jr nz, asm_104e3a
+	ld a, [$ff00+c]
+	and b
+	jr nz, .asm_104de4
+
+Function104dfe: ; 104dfe (41:4dfe)
+	ld c, rRP % $100
+	ld d, $0
+	ld e, d
+	call Function104db7
+	jp z, Function104f42
+	ld d, e
+	call Function104da9
+	jp z, Function104f42
+	call Function104db7
+	jp z, Function104f42
+	call Function104da9
+	jp z, Function104f42
+	ld a, $6c
+	ld [hPrintNum10], a
+	ld d, $3d
+	call Function104dd1
+	ld d, $5
+	call Function104dc5
+	ld d, $15
+	call Function104dd1
+	ld d, $5
+	call Function104dc5
+	ld d, $5
+	call Function104dd1
+	ret
+
+asm_104e3a: ; 104e3a (41:4e3a)
+	call Random
+	ld e, a
+	and $f
+	ld d, a
+.asm_104e41
+	dec de
+	ld a, d
+	or e
+	jr nz, .asm_104e41
+
+Function104e46: ; 104e46 (41:4e46)
+	ld a, $2
+	ld [hPrintNum9], a
+	ld c, $56
+	ld d, $0
+	ld e, d
+	ld d, $3d
+	call Function104dd1
+	ld d, $5
+	call Function104dc5
+	ld d, $15
+	call Function104dd1
+	ld d, $5
+	call Function104dc5
+	ld d, $5
+	call Function104dd1
+	ld d, e
+	call Function104db7
+	jp z, Function104f42
+	ld d, e
+	call Function104da9
+	jp z, Function104f42
+	call Function104db7
+	jp z, Function104f42
+	call Function104da9
+	jp z, Function104f42
+	ld d, $3d
+	call Function104dd1
+	ld a, $6c
+	ld [hPrintNum10], a
+	ret
+
+Function104e8c: ; 104e8c (41:4e8c)
+	ld [rRP], a
+	ld a, $ff
+	ld [hPrintNum10], a
+	ret
+
+Function104e93: ; 104e93 (41:4e93)
+	xor a
+	ld [hDivisor], a
+	ld [hMathBuffer], a
+	push hl
+	push bc
+	ld c, $56
+	ld d, $3d
+	call Function104dd1
+	ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
+	ld a, $5a
+	ld [hli], a
+	ld [hl], b
+	dec hl
+	ld b, $2
+	call Function104ed6
+	pop bc
+	pop hl
+	call Function104ed6
+	ld a, [hDivisor]
+	ld [hQuotient], a
+	ld a, [hMathBuffer]
+	ld [$ffb5], a
+	push hl
+	ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
+	ld b, $2
+	call Function104ed6
+	ld hl, hPrintNum10
+	ld b, $1
+	call Function104faf
+	ld a, [hQuotient]
+	ld [hDivisor], a
+	ld a, [$ffb5]
+	ld [hMathBuffer], a
+	pop hl
+	ret
+
+Function104ed6: ; 104ed6 (41:4ed6)
+	ld c, $56
+	ld d, $5
+	call Function104dd1
+	ld d, $5
+	call Function104dc5
+	ld d, $15
+	call Function104dd1
+	ld a, b
+	cpl
+	ld b, a
+	ld a, $f4
+	ld [rTMA], a
+.asm_104eee
+	inc b
+	jr z, .asm_104f2e
+	ld a, $8
+	ld [$ffb6], a
+	ld a, [hli]
+	ld e, a
+	ld a, [hDivisor]
+	add e
+	ld [hDivisor], a
+	ld a, [hMathBuffer]
+	adc $0
+	ld [hMathBuffer], a
+.asm_104f02
+	xor a
+	ld [rIF], a
+	halt
+	ld a, $c1
+	ld [rRP], a
+	ld d, $1
+	ld a, e
+	rlca
+	ld e, a
+	jr nc, .asm_104f13
+	inc d
+.asm_104f13
+	ld a, [rTIMA]
+	cp $f8
+	jr c, .asm_104f13
+	ld a, $c0
+	ld [rRP], a
+	dec d
+	jr z, .asm_104f25
+	xor a
+	ld [rIF], a
+	halt
+.asm_104f25
+	ld a, [$ffb6]
+	dec a
+	jr z, .asm_104eee
+	ld [$ffb6], a
+	jr .asm_104f02
+.asm_104f2e
+	ld a, $fe
+	ld [rTMA], a
+	xor a
+	ld [rIF], a
+	halt
+	ld d, $5
+	call Function104dc5
+	ld d, $11
+	call Function104dd1
+	ret
+
+Function104f42: ; 104f42 (41:4f42)
+	ld a, [hPrintNum10]
+	or $2
+	ld [hPrintNum10], a
+	ret
+
+Function104f49: ; 104f49 (41:4f49)
+	ld a, [hPrintNum10]
+	or $1
+	ld [hPrintNum10], a
+	ret
+
+Function104f50: ; 104f50 (41:4f50)
+	ld a, [hPrintNum10]
+	or $80
+	ld [hPrintNum10], a
+	ret
+
+Function104f57: ; 104f57 (41:4f57)
+	xor a
+	ld [hDivisor], a
+	ld [hMathBuffer], a
+	push bc
+	push hl
+	ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
+	ld b, $2
+	call Function104faf
+	ld a, [$ffb5]
+	ld [$ffba], a
+	ld b, a
+	pop hl
+	pop af
+	cp b
+	jp c, Function104f50
+	ld a, [hQuotient]
+	cp $5a
+	jp nz, Function104f50
+	call Function104faf
+	ld a, [hDivisor]
+	ld d, a
+	ld a, [hMathBuffer]
+	ld e, a
+	push hl
+	push de
+	ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
+	ld b, $2
+	call Function104faf
+	pop de
+	ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
+	ld a, [hli]
+	xor d
+	ld b, a
+	ld a, [hl]
+	xor e
+	or b
+	call nz, Function104f49
+	push de
+	ld d, $3d
+	call Function104dd1
+	ld hl, hPrintNum10
+	ld b, $1
+	call Function104ed6
+	pop de
+	pop hl
+	ld a, d
+	ld [hDivisor], a
+	ld a, e
+	ld [hMathBuffer], a
+	ret
+
+Function104faf: ; 104faf (41:4faf)
+	ld c, rRP % $100
+	ld d, $0
+	call Function104db7
+	jp z, Function104f42
+	ld d, $0
+	call Function104da9
+	jp z, Function104f42
+	ld d, $0
+	call Function104db7
+	jp z, Function104f42
+	ld a, b
+	cpl
+	ld b, a
+	xor a
+	ld [hMoneyTemp + 2], a
+	call Function104d86
+.asm_104fd2
+	inc b
+	jr z, .asm_10501a
+	ld a, $8
+	ld [$ffb6], a
+.asm_104fd9
+	ld d, $0
+.asm_104fdb
+	inc d
+	jr z, .asm_104fe5
+	ld a, [$ff00+c]
+	bit 1, a
+	jr z, .asm_104fdb
+	ld d, $0
+.asm_104fe5
+	inc d
+	jr z, .asm_104fed
+	ld a, [$ff00+c]
+	bit 1, a
+	jr nz, .asm_104fe5
+.asm_104fed
+	ld a, [hMoneyTemp + 2]
+	ld d, a
+	ld a, [rTIMA]
+	ld [hMoneyTemp + 2], a
+	sub d
+	cp $12
+	jr c, .asm_104ffd
+	set 0, e
+	jr .asm_104fff
+.asm_104ffd
+	res 0, e
+.asm_104fff
+	ld a, [$ffb6]
+	dec a
+	ld [$ffb6], a
+	jr z, .asm_10500b
+	ld a, e
+	rlca
+	ld e, a
+	jr .asm_104fd9
+.asm_10500b
+	ld a, e
+	ld [hli], a
+	ld a, [hDivisor]
+	add e
+	ld [hDivisor], a
+	ld a, [hMathBuffer]
+	adc $0
+	ld [hMathBuffer], a
+	jr .asm_104fd2
+.asm_10501a
+	call Function104d74
+	xor a
+	ld [rIF], a
+	ld d, $0
+	call Function104da9
+	jp z, Function104f42
+	ld d, $10
+	call Function104dd1
+	ret
+
+Function10502e: ; 10502e (41:502e)
+	ld b, $0
+	jp Function104e93
+
+Function105033: ; 105033 (41:5033)
+	ld b, $0
+	jp Function104f57
+
+Function105038: ; 105038 (41:5038)
+	ld a, $20
+	ld [rJOYP], a
+rept 2
+	ld a, [rJOYP]
+endr
+	cpl
+	and $f
+	swap a
+	ld b, a
+	ld a, $10
+	ld [rJOYP], a
+rept 6
+	ld a, [rJOYP]
+endr
+	cpl
+	and $f
+	or b
+	ld c, a
+	ld a, [hMoneyTemp]
+	xor c
+	and c
+	ld [hMoneyTemp + 1], a
+	ld a, c
+	ld [hMoneyTemp], a
+	ld a, $30
+	ld [rJOYP], a
+	ret
+
+Function105069: ; 105069 (41:5069)
+	call GetMysteryGiftBank
+	ld d, $0
+	ld b, CHECK_FLAG
+	ld hl, sMysteryGiftDecorationsReceived
+	predef_id FlagPredef
+	push hl
+	push bc
+	call Predef
+	call CloseSRAM
+	ld a, c
+	and a
+	pop bc
+	pop hl
+	ret nz
+	call GetMysteryGiftBank
+	ld b, SET_FLAG
+	predef FlagPredef
+	call CloseSRAM
+	xor a
+	ret
+
+Function105091: ; 105091 (41:5091)
+	call GetMysteryGiftBank
+	ld c, $0
+.loop
+	push bc
+	ld d, $0
+	ld b, CHECK_FLAG
+	ld hl, sMysteryGiftDecorationsReceived
+	predef FlagPredef
+	ld a, c
+	and a
+	pop bc
+	jr z, .skip
+	push bc
+	callab SetSpecificDecorationFlag
+	pop bc
+.skip
+	inc c
+	ld a, c
+	cp Trophys - DecorationIDs
+	jr c, .loop
+	jp CloseSRAM
+
+Special_UnlockMysteryGift: ; 1050b9
+	call GetMysteryGiftBank
+	ld hl, sMysteryGiftUnlocked
+	ld a, [hl]
+	inc a
+	jr nz, .ok
+	ld [hld], a
+	ld [hl], a
+.ok
+	jp CloseSRAM
+; 1050c8
+
+Function1050c8: ; 1050c8
+	call GetMysteryGiftBank
+	ld a, [sNumDailyMysteryGiftPartnerIDs]
+	cp $ff
+	jr z, .okay
+	xor a
+	ld [sNumDailyMysteryGiftPartnerIDs], a
+.okay
+	jp CloseSRAM
+; 1050d9
+
+
+BackupMysteryGift: ; 1050d9
+	call GetMysteryGiftBank
+	ld hl, sMysteryGiftItem
+	ld de, sBackupMysteryGiftItem
+	ld a, [hli]
+	ld [de], a
+	inc de
+	ld a, [hl]
+	ld [de], a
+	jp CloseSRAM
+; 1050ea
+
+
+RestoreMysteryGift: ; 1050ea (41:50ea)
+	call GetMysteryGiftBank
+	ld hl, sBackupMysteryGiftItem
+	ld de, sMysteryGiftItem
+	ld a, [hli]
+	ld [de], a
+	inc de
+	ld a, [hl]
+	ld [de], a
+	jp CloseSRAM
+
+Function1050fb: ; 1050fb (41:50fb)
+	ld hl, wMysteryGiftTrainerData
+	xor a
+	ld b, $26
+.asm_105101
+	ld [hli], a
+	dec b
+	jr nz, .asm_105101
+	ret
+
+
+GetMysteryGiftBank: ; 105106
+	ld a, BANK(sBackupMysteryGiftItem)
+	jp GetSRAMBank
+; 10510b
+
+
+Function10510b: ; 10510b (41:510b)
+	ld a, BANK(sPokemonData)
+	call GetSRAMBank
+	ld de, OverworldMap
+	ld bc, sPokemonData + PartyMons - wPokemonData
+	ld hl, sPokemonData + PartySpecies - wPokemonData
+.asm_105119
+	ld a, [hli]
+	cp $ff
+	jr z, .asm_105148
+	cp EGG
+	jr z, .asm_10513e
+	push hl
+	ld hl, MON_LEVEL
+	add hl, bc
+	ld a, [hl]
+	ld [de], a
+	inc de
+	ld hl, MON_SPECIES
+	add hl, bc
+	ld a, [hl]
+	ld [de], a
+	inc de
+	ld hl, MON_MOVES
+	add hl, bc
+	push bc
+	ld bc, NUM_MOVES
+	call CopyBytes
+	pop bc
+	pop hl
+.asm_10513e
+	push hl
+	ld hl, PARTYMON_STRUCT_LENGTH
+	add hl, bc
+	ld b, h
+	ld c, l
+	pop hl
+	jr .asm_105119
+.asm_105148
+	ld a, $ff
+	ld [de], a
+	ld a, $26
+	ld [wca00], a
+	jp CloseSRAM
+
+Function105153: ; 105153 (41:5153)
+	call ClearBGPalettes
+	call DisableLCD
+	ld hl, MysteryGiftGFX
+	ld de, VTiles2 tile $00
+	ld a, BANK(MysteryGiftGFX)
+	ld bc, Function105688 - MysteryGiftGFX
+	call FarCopyBytes
+	hlcoord 0, 0
+	ld a, $42
+	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+	call ByteFill
+	hlcoord 3, 7
+	lb bc, 9, 15
+	call ClearBox
+	hlcoord 0, 0
+	ld a, $0
+	ld [hli], a
+	inc a
+	ld [hl], a
+	hlcoord 0, 1
+	inc a
+	ld [hli], a
+	inc a
+	ld [hl], a
+	hlcoord 7, 1
+	ld a, $12
+	call Function10522e
+	hlcoord 2, 2
+	ld a, $17
+	call Function105236
+	hlcoord 2, 3
+	ld a, $27
+	call Function105236
+	hlcoord 9, 4
+	ld a, $37
+	ld [hli], a
+	inc a
+	ld [hl], a
+	hlcoord 1, 2
+	ld [hl], $4
+	hlcoord 1, 3
+	ld a, $5
+	call Function105246
+	ld a, $9
+	hlcoord 18, 5
+	call Function105242
+	hlcoord 2, 5
+	ld a, $b
+	call Function105251
+	hlcoord 2, 16
+	ld a, $7
+	call Function105251
+	hlcoord 2, 5
+	ld a, $d
+	call Function10522e
+	hlcoord 7, 5
+	ld [hl], $c
+	hlcoord 18, 5
+	ld [hl], $a
+	hlcoord 18, 16
+	ld [hl], $8
+	hlcoord 1, 16
+	ld [hl], $6
+	hlcoord 2, 6
+	ld a, $3a
+	call Function105251
+	hlcoord 2, 15
+	ld a, $40
+	call Function105251
+	hlcoord 2, 6
+	ld a, $3c
+	call Function10523e
+	hlcoord 17, 6
+	ld a, $3e
+	call Function10523e
+	hlcoord 2, 6
+	ld [hl], $39
+	hlcoord 17, 6
+	ld [hl], $3b
+	hlcoord 2, 15
+	ld [hl], $3f
+	hlcoord 17, 15
+	ld [hl], $41
+	call EnableLCD
+	call WaitBGMap
+	ld b, SCGB_1D
+	call GetSGBLayout
+	call SetPalettes
+	ret
+
+Function10522e: ; 10522e (41:522e)
+	ld b, $5
+	jr asm_105238
+; 105232 (41:5232)
+
+Function105232: ; unreferenced
+	ld b, 6
+	jr asm_105238
+
+Function105236: ; 105236 (41:5236)
+	ld b, $10
+
+asm_105238: ; 105238 (41:5238)
+	ld [hli], a
+	inc a
+	dec b
+	jr nz, asm_105238
+	ret
+
+Function10523e: ; 10523e (41:523e)
+	ld b, $9
+	jr asm_105248
+
+Function105242: ; 105242 (41:5242)
+	ld b, $b
+	jr asm_105248
+
+Function105246: ; 105246 (41:5246)
+	ld b, $e
+
+asm_105248: ; 105248 (41:5248)
+	ld [hl], a
+	ld de, $14
+	add hl, de
+	dec b
+	jr nz, asm_105248
+	ret
+
+Function105251: ; 105251 (41:5251)
+	ld b, $10
+.asm_105253
+	ld [hli], a
+	dec b
+	jr nz, .asm_105253
+	ret
+
+MysteryGiftGFX: ; 105258
+INCBIN "gfx/misc/mystery_gift.2bpp"
+
+
+Function105688: ; 105688 (41:5688)
+	call ClearTileMap
+	call ClearSprites
+	call WaitBGMap
+	call Function1057d7
+	hlcoord 3, 8
+	ld de, String_10572e
+	call PlaceString
+	call WaitBGMap
+	call Function10578c
+	call Function1050fb
+	ld a, $24
+	ld [wca02], a
+	ld a, [rIE]
+	push af
+	call Function104c2d
+	ld d, a
+	xor a
+	ld [rIF], a
+	pop af
+	ld [rIE], a
+	ld a, d
+	cp $10
+	jp z, Function105712
+	cp $6c
+	jp nz, Function10571a
+	call Function1056eb
+	ld c, 60
+	call DelayFrames
+	call Function105777
+	ld hl, Text_10575e
+	call PrintText
+	ld de, wMysteryGiftTrainerData
+	callba Function8ac70
+	ld a, c
+	ld [wd265], a
+	ld hl, Text_105768
+	jr c, asm_105726
+	ld hl, Text_105763
+	jr asm_105726
+
+Function1056eb: ; 1056eb (41:56eb)
+	ld c, $10
+.asm_1056ed
+	ld hl, Sprites
+	ld b, $8
+.asm_1056f2
+	dec [hl]
+rept 4
+	inc hl
+endr
+	dec b
+	jr nz, .asm_1056f2
+	ld hl, Sprites + $20
+	ld b, $8
+.asm_1056ff
+	inc [hl]
+rept 4
+	inc hl
+endr
+	dec b
+	jr nz, .asm_1056ff
+	dec c
+	ret z
+	push bc
+	ld c, 4
+	call DelayFrames
+	pop bc
+	jr .asm_1056ed
+
+Function105712: ; 105712 (41:5712)
+	call Function105777
+	ld hl, Text_10576d
+	jr asm_105726
+
+Function10571a: ; 10571a (41:571a)
+	call Function105777
+	ld hl, Text_105772
+	call PrintText
+	jp Function105688
+
+asm_105726: ; 105726 (41:5726)
+	call PrintText
+	ld a, $e3
+	ld [rLCDC], a
+	ret
+; 10572e (41:572e)
+
+String_10572e: ; 10572e
+	db   "エーボタン¯おすと"
+	next "つうしん",   $4a, "おこなわれるよ!"
+	next "ビーボタン¯おすと"
+	next "つうしん¯ちゅうし します"
+	db   "@"
+
+; 10575e
+
+Text_10575e: ; 10575e
+	text_jump UnknownText_0x1c051a
+	db "@"
+
+Text_105763: ; 105763
+	text_jump UnknownText_0x1c0531
+	db "@"
+
+Text_105768: ; 105768
+	text_jump UnknownText_0x1c0555
+	db "@"
+
+Text_10576d: ; 10576d
+	text_jump UnknownText_0x1c0573
+	db "@"
+
+Text_105772: ; 105772
+	text_jump UnknownText_0x1c0591
+	db "@"
+; 105777
+
+Function105777: ; 105777 (41:5777)
+	call ClearSprites
+	call ClearTileMap
+	call EnableLCD
+	call WaitBGMap
+	ld b, SCGB_08
+	call GetSGBLayout
+	call SetPalettes
+	ret
+
+Function10578c: ; 10578c (41:578c)
+	ld de, OverworldMap
+	ld a, BANK(sPlayerData)
+	call GetSRAMBank
+	ld hl, sPlayerData + PlayerName - wPlayerData
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	ld hl, sPlayerData + PlayerID - wPlayerData
+	ld bc, 2
+	call CopyBytes
+	ld hl, sPlayerData + wSecretID - wPlayerData
+	ld bc, 2
+	call CopyBytes
+	call CloseSRAM
+	ld a, BANK(sCrystalData)
+	call GetSRAMBank
+	ld a, [sCrystalData + 0]
+	ld [de], a
+	inc de
+	ld a, $4
+	call GetSRAMBank
+	ld hl, $a603
+	ld bc, $8
+	call CopyBytes
+	ld hl, $a007
+	ld bc, $c
+	call CopyBytes
+	call CloseSRAM
+	ret
+
+Function1057d7: ; 1057d7 (41:57d7)
+	call ClearBGPalettes
+	call DisableLCD
+	ld hl, MysteryGiftJP_GFX
+	ld de, VTiles2 tile $00
+	ld a, BANK(MysteryGiftJP_GFX)
+	lb bc, 4, 0
+	call FarCopyBytes
+	ld hl, MysteryGiftJP_GFX + $400
+	ld de, VTiles0 tile $00
+	ld a, BANK(MysteryGiftJP_GFX)
+	ld bc, $80
+	call FarCopyBytes
+	hlcoord 0, 0
+	ld a, $3f
+	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+	call ByteFill
+	hlcoord 3, 7
+	lb bc, 9, 15
+	call ClearBox
+	hlcoord 0, 0
+	ld a, $0
+	ld [hli], a
+	inc a
+	ld [hl], a
+	hlcoord 0, 1
+	inc a
+	ld [hli], a
+	inc a
+	ld [hl], a
+	hlcoord 4, 2
+	ld a, $13
+	call Function1058ca
+	hlcoord 4, 3
+	ld a, $1e
+	call Function1058ce
+	hlcoord 4, 4
+	ld a, $2a
+	call Function1058ce
+	hlcoord 1, 2
+	ld [hl], $4
+	hlcoord 1, 3
+	ld a, $5
+	call Function1058de
+	ld a, $9
+	hlcoord 18, 5
+	call Function1058da
+	hlcoord 2, 5
+	ld a, $b
+	call Function1058e9
+	hlcoord 2, 16
+	ld a, $7
+	call Function1058e9
+	hlcoord 2, 5
+	ld a, $d
+	call Function1058c6
+	hlcoord 8, 5
+	ld [hl], $c
+	hlcoord 18, 5
+	ld [hl], $a
+	hlcoord 18, 16
+	ld [hl], $8
+	hlcoord 1, 16
+	ld [hl], $6
+	hlcoord 2, 6
+	ld a, $37
+	call Function1058e9
+	hlcoord 2, 15
+	ld a, $3d
+	call Function1058e9
+	hlcoord 2, 6
+	ld a, $39
+	call Function1058d6
+	hlcoord 17, 6
+	ld a, $3b
+	call Function1058d6
+	hlcoord 2, 6
+	ld [hl], $36
+	hlcoord 17, 6
+	ld [hl], $38
+	hlcoord 2, 15
+	ld [hl], $3c
+	hlcoord 17, 15
+	ld [hl], $3e
+	ld de, Sprites
+	ld hl, OAM_1058f0
+	ld bc, $40
+	call CopyBytes
+	call EnableLCD
+	call WaitBGMap
+	ld b, $2
+	callba Function4930f
+	jp SetPalettes
+
+Function1058c6: ; 1058c6 (41:58c6)
+	ld b, $6
+	jr asm_1058d0
+
+Function1058ca: ; 1058ca (41:58ca)
+	ld b, $b
+	jr asm_1058d0
+
+Function1058ce: ; 1058ce (41:58ce)
+	ld b, $c
+
+asm_1058d0: ; 1058d0 (41:58d0)
+	ld [hli], a
+	inc a
+	dec b
+	jr nz, asm_1058d0
+	ret
+
+Function1058d6: ; 1058d6 (41:58d6)
+	ld b, $9
+	jr asm_1058e0
+
+Function1058da: ; 1058da (41:58da)
+	ld b, $b
+	jr asm_1058e0
+
+Function1058de: ; 1058de (41:58de)
+	ld b, $e
+
+asm_1058e0: ; 1058e0 (41:58e0)
+	ld [hl], a
+	ld de, SCREEN_WIDTH
+	add hl, de
+	dec b
+	jr nz, asm_1058e0
+	ret
+
+Function1058e9: ; 1058e9 (41:58e9)
+	ld b, $10
+.asm_1058eb
+	ld [hli], a
+	dec b
+	jr nz, .asm_1058eb
+	ret
+; 1058f0 (41:58f0)
+
+OAM_1058f0: ; 1058f0
+	db $11, $34, $00, $00
+	db $11, $3c, $01, $00
+	db $11, $44, $02, $00
+	db $11, $4c, $03, $00
+	db $19, $34, $04, $00
+	db $19, $3c, $05, $00
+	db $19, $44, $06, $00
+	db $19, $4c, $07, $00
+	db $01, $5c, $00, $00
+	db $01, $64, $01, $00
+	db $01, $6c, $02, $00
+	db $01, $74, $03, $00
+	db $09, $5c, $04, $00
+	db $09, $64, $05, $00
+	db $09, $6c, $06, $00
+	db $09, $74, $07, $00
+
+; japanese mystery gift gfx
+MysteryGiftJP_GFX: ; 105930
+INCBIN "gfx/misc/mystery_gift_jp.2bpp"
--- a/engine/namingscreen.asm
+++ b/engine/namingscreen.asm
@@ -41,7 +41,7 @@
 
 Function116f8: ; 116f8
 	call ClearBGPalettes
-	ld b, $8
+	ld b, SCGB_08
 	call GetSGBLayout
 	call DisableLCD
 	call Function11c51
@@ -173,9 +173,9 @@
 	ld hl, wc300
 	ld [hli], a
 	ld [hl], a
-	ld de, $2420
-	ld a, $a
-	call Function3b2a
+	depixel 4, 4, 4, 0
+	ld a, SPRITE_ANIM_INDEX_0A
+	call _InitSpriteAnimStruct
 	ld hl, $1
 	add hl, bc
 	ld [hl], $0
@@ -220,7 +220,7 @@
 	ld [hli], a
 	ld [hl], a
 	pop de
-	ld b, $a
+	ld b, SPRITE_ANIM_INDEX_0A
 	ld a, d
 	cp $7a
 	jr nz, .asm_11873
@@ -227,11 +227,11 @@
 	ld a, e
 	cp $40
 	jr nz, .asm_11873
-	ld b, $1e
+	ld b, SPRITE_ANIM_INDEX_1E
 .asm_11873
 	ld a, b
-	ld de, $2420
-	call Function3b2a
+	depixel 4, 4, 4, 0
+	call _InitSpriteAnimStruct
 	ret
 
 Function1187b: ; 1187b (4:587b)
@@ -400,13 +400,13 @@
 
 
 Function1197b: ; 1197b (4:597b)
-	lb de, $50, $18
+	depixel 10, 3
 	call Function1189c
 	jr nz, .asm_11985
-	ld d, $40
+	ld d, 8 * 8
 .asm_11985
-	ld a, $2
-	call Function3b2a
+	ld a, SPRITE_ANIM_INDEX_02
+	call _InitSpriteAnimStruct
 	ld a, c
 	ld [wc6d5], a
 	ld a, b
--- /dev/null
+++ b/engine/npctrade.asm
@@ -1,0 +1,635 @@
+
+; Trade struct
+TRADE_DIALOG  EQU 0
+TRADE_GIVEMON EQU 1
+TRADE_GETMON  EQU 2
+TRADE_NICK    EQU 3
+TRADE_DVS     EQU 14
+TRADE_ITEM    EQU 16
+TRADE_OT_ID   EQU 17
+TRADE_OT_NAME EQU 19
+TRADE_GENDER  EQU 30
+TRADE_PADDING EQU 31
+
+; Trade dialogs
+TRADE_INTRO    EQU 0
+TRADE_CANCEL   EQU 1
+TRADE_WRONG    EQU 2
+TRADE_COMPLETE EQU 3
+TRADE_AFTER    EQU 4
+
+TRADE_EITHER_GENDER EQU 0
+TRADE_MALE_ONLY EQU 1
+TRADE_FEMALE_ONLY EQU 2
+
+NPCTrade:: ; fcba8
+	ld a, e
+	ld [wJumptableIndex], a
+	call Trade_GetDialog
+	ld b, CHECK_FLAG
+	call TradeFlagAction
+	ld a, TRADE_AFTER
+	jr nz, .done
+
+	ld a, TRADE_INTRO
+	call PrintTradeText
+
+	call YesNoBox
+	ld a, TRADE_CANCEL
+	jr c, .done
+
+; Select givemon from party
+	ld b, 6
+	callba Function5001d
+	ld a, TRADE_CANCEL
+	jr c, .done
+
+	ld e, TRADE_GIVEMON
+	call GetTradeAttribute
+	ld a, [CurPartySpecies]
+	cp [hl]
+	ld a, TRADE_WRONG
+	jr nz, .done
+
+	call CheckTradeGender
+	ld a, TRADE_WRONG
+	jr c, .done
+
+	ld b, SET_FLAG
+	call TradeFlagAction
+
+	ld hl, ConnectLinkCableText
+	call PrintText
+
+	call DoNPCTrade
+	call .TradeAnimation
+	call GetTradeMonNames
+
+	ld hl, TradedForText
+	call PrintText
+
+	call RestartMapMusic
+
+	ld a, TRADE_COMPLETE
+
+.done
+	call PrintTradeText
+	ret
+; fcc07
+
+.TradeAnimation: ; fcc07
+	call DisableSpriteUpdates
+	ld a, [wJumptableIndex]
+	push af
+	ld a, [wcf64]
+	push af
+	predef TradeAnimation
+	pop af
+	ld [wcf64], a
+	pop af
+	ld [wJumptableIndex], a
+	call Function2b74
+	ret
+; fcc23
+
+CheckTradeGender: ; fcc23
+	xor a
+	ld [MonType], a
+
+	ld e, TRADE_GENDER
+	call GetTradeAttribute
+	ld a, [hl]
+	and a
+	jr z, .asm_fcc46
+	cp 1
+	jr z, .asm_fcc3e
+
+	callba GetGender
+	jr nz, .asm_fcc48
+	jr .asm_fcc46
+
+.asm_fcc3e
+	callba GetGender
+	jr z, .asm_fcc48
+
+.asm_fcc46
+	and a
+	ret
+
+.asm_fcc48
+	scf
+	ret
+; fcc4a
+
+TradeFlagAction: ; fcc4a
+	ld hl, wTradeFlags
+	ld a, [wJumptableIndex]
+	ld c, a
+	predef FlagPredef
+	ld a, c
+	and a
+	ret
+; fcc59
+
+Trade_GetDialog: ; fcc59
+	ld e, TRADE_DIALOG
+	call GetTradeAttribute
+	ld a, [hl]
+	ld [wcf64], a
+	ret
+; fcc63
+
+DoNPCTrade: ; fcc63
+	ld e, TRADE_GIVEMON
+	call GetTradeAttribute
+	ld a, [hl]
+	ld [wPlayerTrademonSpecies], a
+
+	ld e, TRADE_GETMON
+	call GetTradeAttribute
+	ld a, [hl]
+	ld [wOTTrademonSpecies], a
+
+	ld a, [wPlayerTrademonSpecies]
+	ld de, wPlayerTrademonSpeciesName
+	call GetTradeMonName
+	call CopyTradeName
+
+	ld a, [wOTTrademonSpecies]
+	ld de, wOTTrademonSpeciesName
+	call GetTradeMonName
+	call CopyTradeName
+
+	ld hl, PartyMonOT
+	ld bc, NAME_LENGTH
+	call Trade_GetAttributeOfCurrentPartymon
+	ld de, wPlayerTrademonOTName
+	call CopyTradeName
+
+	ld hl, PlayerName
+	ld de, wPlayerTrademonSenderName
+	call CopyTradeName
+
+	ld hl, PartyMon1ID
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call Trade_GetAttributeOfCurrentPartymon
+	ld de, wPlayerTrademonID
+	call Trade_CopyTwoBytes
+
+	ld hl, PartyMon1DVs
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call Trade_GetAttributeOfCurrentPartymon
+	ld de, wPlayerTrademonDVs
+	call Trade_CopyTwoBytes
+
+	ld hl, PartyMon1Species
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call Trade_GetAttributeOfCurrentPartymon
+	ld b, h
+	ld c, l
+	callba GetCaughtGender
+	ld a, c
+	ld [wPlayerTrademonCaughtData], a
+
+	ld e, TRADE_DIALOG
+	call GetTradeAttribute
+	ld a, [hl]
+	cp 3
+	ld a, 1
+	jr c, .okay
+	ld a, 2
+.okay
+	ld [wOTTrademonCaughtData], a
+
+	ld hl, PartyMon1Level
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call Trade_GetAttributeOfCurrentPartymon
+	ld a, [hl]
+	ld [CurPartyLevel], a
+	ld a, [wOTTrademonSpecies]
+	ld [CurPartySpecies], a
+	xor a
+	ld [MonType], a
+	ld [wPokemonWithdrawDepositParameter], a
+	callab Functione039
+	predef TryAddMonToParty
+
+	ld e, TRADE_DIALOG
+	call GetTradeAttribute
+	ld a, [hl]
+	cp TRADE_COMPLETE
+	ld b, RESET_FLAG
+	jr c, .asm_fcd1c
+	ld b, SET_FLAG
+.asm_fcd1c
+	callba SetGiftPartyMonCaughtData
+
+	ld e, TRADE_NICK
+	call GetTradeAttribute
+	ld de, wOTTrademonNickname
+	call CopyTradeName
+
+	ld hl, PartyMonNicknames
+	ld bc, PKMN_NAME_LENGTH
+	call Trade_GetAttributeOfLastPartymon
+	ld hl, wOTTrademonNickname
+	call CopyTradeName
+
+	ld e, TRADE_OT_NAME
+	call GetTradeAttribute
+	push hl
+	ld de, wOTTrademonOTName
+	call CopyTradeName
+	pop hl
+	ld de, wOTTrademonSenderName
+	call CopyTradeName
+
+	ld hl, PartyMonOT
+	ld bc, NAME_LENGTH
+	call Trade_GetAttributeOfLastPartymon
+	ld hl, wOTTrademonOTName
+	call CopyTradeName
+
+	ld e, TRADE_DVS
+	call GetTradeAttribute
+	ld de, wOTTrademonDVs
+	call Trade_CopyTwoBytes
+
+	ld hl, PartyMon1DVs
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call Trade_GetAttributeOfLastPartymon
+	ld hl, wOTTrademonDVs
+	call Trade_CopyTwoBytes
+
+	ld e, TRADE_OT_ID
+	call GetTradeAttribute
+	ld de, wOTTrademonID + 1
+	call Trade_CopyTwoBytesReverseEndian
+
+	ld hl, PartyMon1ID
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call Trade_GetAttributeOfLastPartymon
+	ld hl, wOTTrademonID
+	call Trade_CopyTwoBytes
+
+	ld e, TRADE_ITEM
+	call GetTradeAttribute
+	push hl
+	ld hl, PartyMon1Item
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call Trade_GetAttributeOfLastPartymon
+	pop hl
+	ld a, [hl]
+	ld [de], a
+
+	push af
+	push bc
+	push de
+	push hl
+	ld a, [CurPartyMon]
+	push af
+	ld a, [PartyCount]
+	dec a
+	ld [CurPartyMon], a
+	callba Functione134
+	pop af
+	ld [CurPartyMon], a
+	pop hl
+	pop de
+	pop bc
+	pop af
+	ret
+; fcdc2
+
+
+GetTradeAttribute: ; 0xfcdc2
+	ld d, 0
+	push de
+	ld a, [wJumptableIndex]
+	and $f
+	swap a
+	ld e, a
+	ld d, 0
+	ld hl, NPCTrades
+rept 2
+	add hl, de
+endr
+	pop de
+	add hl, de
+	ret
+; 0xfcdd7
+
+Trade_GetAttributeOfCurrentPartymon: ; fcdd7
+	ld a, [CurPartyMon]
+	call AddNTimes
+	ret
+; fcdde
+
+Trade_GetAttributeOfLastPartymon: ; fcdde
+	ld a, [PartyCount]
+	dec a
+	call AddNTimes
+	ld e, l
+	ld d, h
+	ret
+; fcde8
+
+GetTradeMonName: ; fcde8
+	push de
+	ld [wd265], a
+	call GetBasePokemonName
+	ld hl, StringBuffer1
+	pop de
+	ret
+; fcdf4
+
+CopyTradeName: ; fcdf4
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	ret
+; fcdfb
+
+Functionfcdfb: ; fcdfb
+; unreferenced
+	ld bc, 4
+	call CopyBytes
+	ld a, "@"
+	ld [de], a
+	ret
+; fce05
+
+Functionfce05: ; fce05
+; unreferenced
+	ld bc, 3
+	call CopyBytes
+	ld a, "@"
+	ld [de], a
+	ret
+; fce0f
+
+Trade_CopyTwoBytes: ; fce0f
+	ld a, [hli]
+	ld [de], a
+	inc de
+	ld a, [hl]
+	ld [de], a
+	ret
+; fce15
+
+Trade_CopyTwoBytesReverseEndian: ; fce15
+	ld a, [hli]
+	ld [de], a
+	dec de
+	ld a, [hl]
+	ld [de], a
+	ret
+; fce1b
+
+GetTradeMonNames: ; fce1b
+	ld e, TRADE_GETMON
+	call GetTradeAttribute
+	ld a, [hl]
+	call GetTradeMonName
+
+	ld de, StringBuffer2
+	call CopyTradeName
+
+	ld e, TRADE_GIVEMON
+	call GetTradeAttribute
+	ld a, [hl]
+	call GetTradeMonName
+
+	ld de, wd050
+	call CopyTradeName
+
+	ld hl, StringBuffer1
+.loop
+	ld a, [hli]
+	cp "@"
+	jr nz, .loop
+
+	dec hl
+	push hl
+	ld e, TRADE_GENDER
+	call GetTradeAttribute
+	ld a, [hl]
+	pop hl
+	and a
+	ret z
+
+	cp 1
+	ld a, "♂"
+	jr z, .done
+	ld a, "♀"
+.done
+	ld [hli], a
+	ld [hl], "@"
+	ret
+; fce58
+
+
+NPCTrades: ; fce58
+npctrade: MACRO
+	db \1, \2, \3, \4
+	dw \5
+	db \6
+	dw \7
+	db \8, \9, 0
+ENDM
+
+
+	npctrade 0, ABRA,       MACHOP,     "MUSCLE@@@@@", $6637, GOLD_BERRY,   37460, "MIKE@@@@@@@", TRADE_EITHER_GENDER
+	npctrade 0, BELLSPROUT, ONIX,       "ROCKY@@@@@@", $6696, BITTER_BERRY, 48926, "KYLE@@@@@@@", TRADE_EITHER_GENDER
+	npctrade 1, KRABBY,     VOLTORB,    "VOLTY@@@@@@", $8898, PRZCUREBERRY, 29189, "TIM@@@@@@@@", TRADE_EITHER_GENDER
+	npctrade 3, DRAGONAIR,  DODRIO,     "DORIS@@@@@@", $6677, SMOKE_BALL,   00283, "EMY@@@@@@@@", TRADE_FEMALE_ONLY
+	npctrade 2, HAUNTER,    XATU,       "PAUL@@@@@@@", $8696, MYSTERYBERRY, 15616, "CHRIS@@@@@@", TRADE_EITHER_GENDER
+	npctrade 3, CHANSEY,    AERODACTYL, "AEROY@@@@@@", $6696, GOLD_BERRY,   26491, "KIM@@@@@@@@", TRADE_EITHER_GENDER
+	npctrade 0, DUGTRIO,    MAGNETON,   "MAGGIE@@@@@", $6696, METAL_COAT,   50082, "FOREST@@@@@", TRADE_EITHER_GENDER
+; fcf38
+
+
+PrintTradeText: ; fcf38
+	push af
+	call GetTradeMonNames
+	pop af
+	ld bc, 2 * 4
+	ld hl, TradeTexts
+	call AddNTimes
+	ld a, [wcf64]
+	ld c, a
+rept 2
+	add hl, bc
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	call PrintText
+	ret
+; fcf53
+
+TradeTexts: ; fcf53
+; intro
+	dw TradeIntroText1
+	dw TradeIntroText2
+	dw TradeIntroText3
+	dw TradeIntroText4
+
+; cancel
+	dw TradeCancelText1
+	dw TradeCancelText2
+	dw TradeCancelText3
+	dw TradeCancelText4
+
+; wrong mon
+	dw TradeWrongText1
+	dw TradeWrongText2
+	dw TradeWrongText3
+	dw TradeWrongText4
+
+; completed
+	dw TradeCompleteText1
+	dw TradeCompleteText2
+	dw TradeCompleteText3
+	dw TradeCompleteText4
+
+; after
+	dw TradeAfterText1
+	dw TradeAfterText2
+	dw TradeAfterText3
+	dw TradeAfterText4
+; fcf7b
+
+
+ConnectLinkCableText: ; 0xfcf7b
+	; OK, connect the Game Link Cable.
+	text_jump UnknownText_0x1bd407
+	db "@"
+; 0xfcf80
+
+
+TradedForText: ; 0xfcf80
+	; traded givemon for getmon
+	text_jump UnknownText_0x1bd429
+	start_asm
+
+	ld de, MUSIC_NONE
+	call PlayMusic
+	call DelayFrame
+	ld hl, .done
+	ret
+
+.done
+	; sound_dex_fanfare_80_109
+	; interpret_data
+	text_jump UnknownText_0x1bd445
+	db "@"
+; 0xfcf97
+
+
+TradeIntroText1: ; 0xfcf97
+	; I collect #MON. Do you have @ ? Want to trade it for my @ ?
+	text_jump UnknownText_0x1bd449
+	db "@"
+; 0xfcf9c
+
+TradeCancelText1: ; 0xfcf9c
+	; You don't want to trade? Aww…
+	text_jump UnknownText_0x1bd48c
+	db "@"
+; 0xfcfa1
+
+TradeWrongText1: ; 0xfcfa1
+	; Huh? That's not @ .  What a letdown…
+	text_jump UnknownText_0x1bd4aa
+	db "@"
+; 0xfcfa6
+
+TradeCompleteText1: ; 0xfcfa6
+	; Yay! I got myself @ ! Thanks!
+	text_jump UnknownText_0x1bd4d2
+	db "@"
+; 0xfcfab
+
+TradeAfterText1: ; 0xfcfab
+	; Hi, how's my old @  doing?
+	text_jump UnknownText_0x1bd4f4
+	db "@"
+; 0xfcfb0
+
+
+TradeIntroText2:
+TradeIntroText3: ; 0xfcfb0
+	; Hi, I'm looking for this #MON. If you have @ , would you trade it for my @ ?
+	text_jump UnknownText_0x1bd512
+	db "@"
+; 0xfcfb5
+
+TradeCancelText2:
+TradeCancelText3: ; 0xfcfb5
+	; You don't have one either? Gee, that's really disappointing…
+	text_jump UnknownText_0x1bd565
+	db "@"
+; 0xfcfba
+
+TradeWrongText2:
+TradeWrongText3: ; 0xfcfba
+	; You don't have @ ? That's too bad, then.
+	text_jump UnknownText_0x1bd5a1
+	db "@"
+; 0xfcfbf
+
+TradeCompleteText2: ; 0xfcfbf
+	; Great! Thank you! I finally got @ .
+	text_jump UnknownText_0x1bd5cc
+	db "@"
+; 0xfcfc4
+
+TradeAfterText2: ; 0xfcfc4
+	; Hi! The @ you traded me is doing great!
+	text_jump UnknownText_0x1bd5f4
+	db "@"
+; 0xfcfc9
+
+
+TradeIntroText4: ; 0xfcfc9
+	; 's cute, but I don't have it. Do you have @ ? Want to trade it for my @ ?
+	text_jump UnknownText_0x1bd621
+	db "@"
+; 0xfcfce
+
+TradeCancelText4: ; 0xfcfce
+	; You don't want to trade? Oh, darn…
+	text_jump UnknownText_0x1bd673
+	db "@"
+; 0xfcfd3
+
+TradeWrongText4: ; 0xfcfd3
+	; That's not @ . Please trade with me if you get one.
+	text_jump UnknownText_0x1bd696
+	db "@"
+; 0xfcfd8
+
+TradeCompleteText4: ; 0xfcfd8
+	; Wow! Thank you! I always wanted @ !
+	text_jump UnknownText_0x1bd6cd
+	db "@"
+; 0xfcfdd
+
+TradeAfterText4: ; 0xfcfdd
+	; How is that @  I traded you doing? Your @ 's so cute!
+	text_jump UnknownText_0x1bd6f5
+	db "@"
+; 0xfcfe2
+
+
+TradeCompleteText3: ; 0xfcfe2
+	; Uh? What happened?
+	text_jump UnknownText_0x1bd731
+	db "@"
+; 0xfcfe7
+
+TradeAfterText3: ; 0xfcfe7
+	; Trading is so odd… I still have a lot to learn about it.
+	text_jump UnknownText_0x1bd745
+	db "@"
+; 0xfcfec
--- /dev/null
+++ b/engine/options_menu.asm
@@ -1,0 +1,565 @@
+_OptionsMenu: ; e41d0
+	ld hl, hInMenu
+	ld a, [hl]
+	push af
+	ld [hl], $1
+	call ClearBGPalettes
+	hlcoord 0, 0
+	ld b, $10
+	ld c, $12
+	call TextBox
+	hlcoord 2, 2
+	ld de, StringOptions
+	call PlaceString
+	xor a
+	ld [wJumptableIndex], a
+	ld c, $6 ; number of items on the menu minus 1 (for cancel)
+
+.print_text_loop ; this next will display the settings of each option when the menu is opened
+	push bc
+	xor a
+	ld [hJoyLast], a
+	call GetOptionPointer
+	pop bc
+	ld hl, wJumptableIndex
+	inc [hl]
+	dec c
+	jr nz, .print_text_loop
+
+	call UpdateFrame
+	xor a
+	ld [wJumptableIndex], a
+	inc a
+	ld [hBGMapMode], a
+	call WaitBGMap
+	ld b, SCGB_08
+	call GetSGBLayout
+	call SetPalettes
+
+.joypad_loop
+	call JoyTextDelay
+	ld a, [hJoyPressed]
+	and START | B_BUTTON
+	jr nz, .ExitOptions
+	call OptionsControl
+	jr c, .dpad
+	call GetOptionPointer
+	jr c, .ExitOptions
+
+.dpad
+	call Functione455c
+	ld c, 3
+	call DelayFrames
+	jr .joypad_loop
+
+.ExitOptions
+	ld de, SFX_TRANSACTION
+	call PlaySFX
+	call WaitSFX
+	pop af
+	ld [hInMenu], a
+	ret
+; e4241
+
+StringOptions: ; e4241
+	db "TEXT SPEED<LNBRK>"
+	db "        :<LNBRK>"
+	db "BATTLE SCENE<LNBRK>"
+	db "        :<LNBRK>"
+	db "BATTLE STYLE<LNBRK>"
+	db "        :<LNBRK>"
+	db "SOUND<LNBRK>"
+	db "        :<LNBRK>"
+	db "PRINT<LNBRK>"
+	db "        :<LNBRK>"
+	db "MENU ACCOUNT<LNBRK>"
+	db "        :<LNBRK>"
+	db "FRAME<LNBRK>"
+	db "        :TYPE<LNBRK>"
+	db "CANCEL@"
+; e42d6
+
+
+GetOptionPointer: ; e42d6
+	ld a, [wJumptableIndex] ; load the cursor position to a
+	ld e, a ; copy it to de
+	ld d, 0
+	ld hl, .Pointers
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl] ; jump to the code of the current highlighted item
+; e42e5
+
+.Pointers
+	dw Options_TextSpeed
+	dw Options_BattleScene
+	dw Options_BattleStyle
+	dw Options_Sound
+	dw Options_Print
+	dw Options_MenuAccount
+	dw Options_Frame
+	dw Options_Cancel
+; e42f5
+
+
+Options_TextSpeed: ; e42f5
+	call GetTextSpeed
+	ld a, [hJoyPressed]
+	bit D_LEFT_F, a
+	jr nz, .LeftPressed
+	bit D_RIGHT_F, a
+	jr z, .NonePressed
+	ld a, c ; right pressed
+	cp SLOW_TEXT
+	jr c, .Increase
+	ld c, FAST_TEXT +- 1
+
+.Increase
+	inc c
+	ld a, e
+	jr .Save
+
+.LeftPressed
+	ld a, c
+	and a
+	jr nz, .Decrease
+	ld c, SLOW_TEXT + 1
+
+.Decrease
+	dec c
+	ld a, d
+
+.Save
+	ld b, a
+	ld a, [Options]
+	and $f0
+	or b
+	ld [Options], a
+
+.NonePressed
+	ld b, 0
+	ld hl, .Strings
+rept 2
+	add hl, bc
+endr
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	hlcoord 11, 3
+	call PlaceString
+	and a
+	ret
+; e4331
+
+.Strings
+	dw .Fast
+	dw .Mid
+	dw .Slow
+
+.Fast
+	db "FAST@"
+.Mid
+	db "MID @"
+.Slow
+	db "SLOW@"
+; e4346
+
+
+GetTextSpeed: ; e4346
+	ld a, [Options] ; This converts the number of frames, to 0, 1, 2 representing speed
+	and 7
+	cp 5 ; 5 frames of delay is slow
+	jr z, .slow
+	cp 1 ; 1 frame of delay is fast
+	jr z, .fast
+	ld c, MED_TEXT ; set it to mid if not one of the above
+	lb de, 1, 5
+	ret
+
+.slow
+	ld c, SLOW_TEXT
+	lb de, 3, 1
+	ret
+
+.fast
+	ld c, FAST_TEXT
+	lb de, 5, 3
+	ret
+; e4365
+
+
+Options_BattleScene: ; e4365
+	ld hl, Options
+	ld a, [hJoyPressed]
+	bit D_LEFT_F, a
+	jr nz, .LeftPressed
+	bit D_RIGHT_F, a
+	jr z, .NonePressed
+	bit BATTLE_SCENE, [hl]
+	jr nz, .ToggleOn
+	jr .ToggleOff
+
+.LeftPressed
+	bit BATTLE_SCENE, [hl]
+	jr z, .ToggleOff
+	jr .ToggleOn
+
+.NonePressed
+	bit BATTLE_SCENE, [hl]
+	jr z, .ToggleOn
+	jr .ToggleOff
+
+.ToggleOn
+	res BATTLE_SCENE, [hl]
+	ld de, .On
+	jr .Display
+
+.ToggleOff
+	set BATTLE_SCENE, [hl]
+	ld de, .Off
+
+.Display
+	hlcoord 11, 5
+	call PlaceString
+	and a
+	ret
+; e4398
+
+.On
+	db "ON @"
+.Off
+	db "OFF@"
+; e43a0
+
+
+Options_BattleStyle: ; e43a0
+	ld hl, Options
+	ld a, [hJoyPressed]
+	bit D_LEFT_F, a
+	jr nz, .LeftPressed
+	bit D_RIGHT_F, a
+	jr z, .NonePressed
+	bit BATTLE_SHIFT, [hl]
+	jr nz, .ToggleShift
+	jr .ToggleSet
+
+.LeftPressed
+	bit BATTLE_SHIFT, [hl]
+	jr z, .ToggleSet
+	jr .ToggleShift
+
+.NonePressed
+	bit BATTLE_SHIFT, [hl]
+	jr nz, .ToggleSet
+
+.ToggleShift
+	res BATTLE_SHIFT, [hl]
+	ld de, .Shift
+	jr .Display
+
+.ToggleSet
+	set BATTLE_SHIFT, [hl]
+	ld de, .Set
+
+.Display
+	hlcoord 11, 7
+	call PlaceString
+	and a
+	ret
+; e43d1
+
+.Shift
+	db "SHIFT@"
+.Set
+	db "SET  @"
+; e43dd
+
+
+Options_Sound: ; e43dd
+	ld hl, Options
+	ld a, [hJoyPressed]
+	bit D_LEFT_F, a
+	jr nz, .LeftPressed
+	bit D_RIGHT_F, a
+	jr z, .NonePressed
+	bit STEREO, [hl]
+	jr nz, .SetMono
+	jr .SetStereo
+
+.LeftPressed
+	bit STEREO, [hl]
+	jr z, .SetStereo
+	jr .SetMono
+
+.NonePressed
+	bit STEREO, [hl]
+	jr nz, .ToggleStereo
+	jr .ToggleMono
+
+.SetMono
+	res STEREO, [hl]
+	call RestartMapMusic
+
+.ToggleMono
+	ld de, .Mono
+	jr .Display
+
+.SetStereo
+	set STEREO, [hl]
+	call RestartMapMusic
+
+.ToggleStereo
+	ld de, .Stereo
+
+.Display
+	hlcoord 11, 9
+	call PlaceString
+	and a
+	ret
+; e4416
+
+.Mono
+	db "MONO  @"
+.Stereo
+	db "STEREO@"
+; e4424
+
+
+Options_Print: ; e4424
+	call GetPrinterSetting
+	ld a, [hJoyPressed]
+	bit D_LEFT_F, a
+	jr nz, .LeftPressed
+	bit D_RIGHT_F, a
+	jr z, .NonePressed
+	ld a, c
+	cp 4
+	jr c, .Increase
+	ld c, -1
+
+.Increase
+	inc c
+	ld a, e
+	jr .Save
+
+.LeftPressed
+	ld a, c
+	and a
+	jr nz, .Decrease
+	ld c, 5
+
+.Decrease
+	dec c
+	ld a, d
+
+.Save
+	ld b, a
+	ld [GBPrinter], a
+
+.NonePressed
+	ld b, $0
+	ld hl, .Strings
+rept 2
+	add hl, bc
+endr
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	hlcoord 11, 11
+	call PlaceString
+	and a
+	ret
+; e445a
+
+.Strings
+	dw .Lightest
+	dw .Lighter
+	dw .Normal
+	dw .Darker
+	dw .Darkest
+
+.Lightest
+	db "LIGHTEST@"
+.Lighter
+	db "LIGHTER @"
+.Normal
+	db "NORMAL  @"
+.Darker
+	db "DARKER  @"
+.Darkest
+	db "DARKEST @"
+; e4491
+
+
+GetPrinterSetting: ; e4491
+	ld a, [GBPrinter] ; converts from the stored printer setting to 0,1,2,3,4
+	and a
+	jr z, .IsLightest
+	cp PRINT_LIGHTER
+	jr z, .IsLight
+	cp PRINT_DARKER
+	jr z, .IsDark
+	cp PRINT_DARKEST
+	jr z, .IsDarkest
+	ld c, 2 ; normal if none of the above
+	lb de, PRINT_LIGHTER, PRINT_DARKER ; the 2 values next to this setting
+	ret
+
+.IsLightest
+	ld c, 0
+	lb de, PRINT_DARKEST, PRINT_LIGHTER ; the 2 values next to this setting
+	ret
+
+.IsLight
+	ld c, 1
+	lb de, PRINT_LIGHTEST, PRINT_NORMAL ; the 2 values next to this setting
+	ret
+
+.IsDark
+	ld c, 3
+	lb de, PRINT_NORMAL, PRINT_DARKEST ; the 2 values next to this setting
+	ret
+
+.IsDarkest
+	ld c, 4
+	lb de, PRINT_DARKER, PRINT_LIGHTEST ; the 2 values next to this setting
+	ret
+; e44c1
+
+Options_MenuAccount: ; e44c1
+	ld hl, Options2
+	ld a, [hJoyPressed]
+	bit D_LEFT_F, a
+	jr nz, .LeftPressed
+	bit D_RIGHT_F, a
+	jr z, .NonePressed
+	bit MENU_ACCOUNT, [hl]
+	jr nz, .ToggleOff
+	jr .ToggleOn
+
+.LeftPressed
+	bit MENU_ACCOUNT, [hl]
+	jr z, .ToggleOn
+	jr .ToggleOff
+
+.NonePressed
+	bit MENU_ACCOUNT, [hl]
+	jr nz, .ToggleOn
+
+.ToggleOff
+	res MENU_ACCOUNT, [hl]
+	ld de, .Off
+	jr .Display
+
+.ToggleOn
+	set MENU_ACCOUNT, [hl]
+	ld de, .On
+
+.Display
+	hlcoord 11, 13
+	call PlaceString
+	and a
+	ret
+; e44f2
+
+.Off
+	db "OFF@"
+.On
+	db "ON @"
+; e44fa
+
+
+Options_Frame: ; e44fa
+	ld hl, TextBoxFrame
+	ld a, [hJoyPressed]
+	bit D_LEFT_F, a
+	jr nz, .LeftPressed
+	bit D_RIGHT_F, a
+	jr nz, .RightPressed
+	and a
+	ret
+
+.RightPressed
+	ld a, [hl]
+	inc a
+	jr .Save
+
+.LeftPressed
+	ld a, [hl]
+	dec a
+
+.Save
+	and $7
+	ld [hl], a
+UpdateFrame: ; e4512
+	ld a, [TextBoxFrame]
+	hlcoord 16, 15 ; where on the screen the number is drawn
+	add "1"
+	ld [hl], a
+	call LoadFontsExtra
+	and a
+	ret
+; e4520
+
+Options_Cancel: ; e4520
+	ld a, [hJoyPressed]
+	and A_BUTTON
+	jr nz, .Exit
+	and a
+	ret
+
+.Exit
+	scf
+	ret
+; e452a
+
+OptionsControl: ; e452a
+	ld hl, wJumptableIndex
+	ld a, [hJoyLast]
+	cp D_DOWN
+	jr z, .DownPressed
+	cp D_UP
+	jr z, .UpPressed
+	and a
+	ret
+
+.DownPressed
+	ld a, [hl] ; load the cursor position to a
+	cp $7 ; maximum number of items in option menu
+	jr nz, .CheckFive
+	ld [hl], $0
+	scf
+	ret
+
+.CheckFive ; I have no idea why this exists...
+	cp $5
+	jr nz, .Increase
+	ld [hl], $5
+
+.Increase
+	inc [hl]
+	scf
+	ret
+
+.UpPressed
+	ld a, [hl]
+	cp $6
+	jr nz, .NotSix
+	ld [hl], $5 ; Another thing where I'm not sure why it exists
+	scf
+	ret
+
+.NotSix
+	and a
+	jr nz, .Decrease
+	ld [hl], $8 ; number of option items +1
+
+.Decrease
+	dec [hl]
+	scf
+	ret
+; e455c
--- /dev/null
+++ b/engine/overworld.asm
@@ -1,0 +1,1488 @@
+GetEmote2bpp: ; 1412a
+	ld a, $1
+	ld [rVBK], a
+	call Get2bpp
+	xor a
+	ld [rVBK], a
+	ret
+; 14135
+
+_ReplaceKrisSprite:: ; 14135
+	call GetPlayerSprite
+	ld a, [UsedSprites]
+	ld [hUsedSpriteIndex], a
+	ld a, [UsedSprites + 1]
+	ld [hUsedSpriteTile], a
+	call GetUsedSprite
+	ret
+; 14146
+
+Function14146: ; mobile
+	ld hl, wSpriteFlags
+	ld a, [hl]
+	push af
+	res 7, [hl]
+	set 6, [hl]
+	call RunCallback_04
+	pop af
+	ld [wSpriteFlags], a
+	ret
+; 14157
+
+Function14157: ; mobile
+	ld hl, wSpriteFlags
+	ld a, [hl]
+	push af
+	set 7, [hl]
+	res 6, [hl]
+	call RunCallback_04
+	pop af
+	ld [wSpriteFlags], a
+	ret
+; 14168
+
+RefreshSprites:: ; 14168
+	call .Refresh
+	call RunCallback_04
+	ret
+; 1416f
+
+.Refresh: ; 1416f
+	xor a
+	ld bc, UsedSpritesEnd - UsedSprites
+	ld hl, UsedSprites
+	call ByteFill
+	call GetPlayerSprite
+	call AddMapSprites
+	call LoadAndSortSprites
+	ret
+; 14183
+
+GetPlayerSprite: ; 14183
+; Get Chris or Kris's sprite.
+	ld hl, .Chris
+	ld a, [wPlayerSpriteSetupFlags]
+	bit 2, a
+	jr nz, .go
+	ld a, [PlayerGender]
+	bit 0, a
+	jr z, .go
+	ld hl, .Kris
+
+.go
+	ld a, [PlayerState]
+	ld c, a
+.loop
+	ld a, [hli]
+	cp c
+	jr z, .good
+	inc hl
+	cp $ff
+	jr nz, .loop
+
+; Any player state not in the array defaults to Chris's sprite.
+	xor a ; ld a, PLAYER_NORMAL
+	ld [PlayerState], a
+	ld a, SPRITE_CHRIS
+	jr .finish
+
+.good
+	ld a, [hl]
+
+.finish
+	ld [UsedSprites + 0], a
+	ld [PlayerSprite], a
+	ld [PlayerObjectSprite], a
+	ret
+
+.Chris
+	db PLAYER_NORMAL,    SPRITE_CHRIS
+	db PLAYER_BIKE,      SPRITE_CHRIS_BIKE
+	db PLAYER_SURF,      SPRITE_SURF
+	db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
+	db $ff
+
+.Kris
+	db PLAYER_NORMAL,    SPRITE_KRIS
+	db PLAYER_BIKE,      SPRITE_KRIS_BIKE
+	db PLAYER_SURF,      SPRITE_SURF
+	db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
+	db $ff
+; 141c9
+
+
+AddMapSprites: ; 141c9
+	call GetMapPermission
+	call CheckOutdoorMap
+	jr z, .outdoor
+	call AddIndoorSprites
+	ret
+
+.outdoor
+	call AddOutdoorSprites
+	ret
+; 141d9
+
+
+AddIndoorSprites: ; 141d9
+	ld hl, Map1ObjectSprite
+	ld a, 1
+.loop
+	push af
+	ld a, [hl]
+	call AddSpriteGFX
+	ld de, OBJECT_LENGTH
+	add hl, de
+	pop af
+	inc a
+	cp NUM_OBJECTS
+	jr nz, .loop
+	ret
+; 141ee
+
+
+AddOutdoorSprites: ; 141ee
+	ld a, [MapGroup]
+	dec a
+	ld c, a
+	ld b, 0
+	ld hl, OutdoorSprites
+rept 2
+	add hl, bc
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld c, MAX_OUTDOOR_SPRITES
+.loop
+	push bc
+	ld a, [hli]
+	call AddSpriteGFX
+	pop bc
+	dec c
+	jr nz, .loop
+	ret
+; 14209
+
+
+RunCallback_04: ; 14209
+	ld a, $4
+	call RunMapCallback
+	call GetUsedSprites
+	call .LoadMiscTiles
+	ret
+; 14215
+
+.LoadMiscTiles: ; 14215
+	ld a, [wSpriteFlags]
+	bit 6, a
+	ret nz
+
+	ld c, EMOTE_SHADOW
+	callba LoadEmote
+	call GetMapPermission
+	call CheckOutdoorMap
+	ld c, EMOTE_0B
+	jr z, .outdoor
+	ld c, EMOTE_BOULDER_DUST
+.outdoor
+	callba LoadEmote
+	ret
+; 14236
+
+
+
+SafeGetSprite: ; 14236
+	push hl
+	call GetSprite
+	pop hl
+	ret
+; 1423c
+
+GetSprite: ; 1423c
+	call GetMonSprite
+	ret c
+
+	ld hl, SpriteHeaders ; address
+	dec a
+	ld c, a
+	ld b, 0
+	ld a, 6
+	call AddNTimes
+	; load the address into de
+	ld a, [hli]
+	ld e, a
+	ld a, [hli]
+	ld d, a
+	; load the length into c
+	ld a, [hli]
+	swap a
+	ld c, a
+	; load the sprite bank into both b and h
+	ld b, [hl]
+	ld a, [hli]
+	; load the sprite type into l
+	ld l, [hl]
+	ld h, a
+	ret
+; 14259
+
+
+GetMonSprite: ; 14259
+; Return carry if a monster sprite was loaded.
+
+	cp SPRITE_POKEMON
+	jr c, .Normal
+	cp SPRITE_DAYCARE_MON_1
+	jr z, .wBreedMon1
+	cp SPRITE_DAYCARE_MON_2
+	jr z, .wBreedMon2
+	cp SPRITE_VARS
+	jr nc, .Variable
+	jr .Icon
+
+.Normal
+	and a
+	ret
+
+.Icon
+	sub SPRITE_POKEMON
+	ld e, a
+	ld d, 0
+	ld hl, SpriteMons
+	add hl, de
+	ld a, [hl]
+	jr .Mon
+
+.wBreedMon1
+	ld a, [wBreedMon1Species]
+	jr .Mon
+
+.wBreedMon2
+	ld a, [wBreedMon2Species]
+
+.Mon
+	ld e, a
+	and a
+	jr z, .NoBreedmon
+
+	callba Function8e82b
+
+	ld l, 1
+	ld h, 0
+	scf
+	ret
+
+.Variable
+	sub SPRITE_VARS
+	ld e, a
+	ld d, 0
+	ld hl, VariableSprites
+	add hl, de
+	ld a, [hl]
+	and a
+	jp nz, GetMonSprite
+
+.NoBreedmon
+	ld a, 1
+	ld l, 1
+	ld h, 0
+	and a
+	ret
+; 142a7
+
+
+_DoesSpriteHaveFacings:: ; 142a7
+; Checks to see whether we can apply a facing to a sprite.
+; Returns carry unless the sprite is a Pokemon or a Still Sprite.
+	cp SPRITE_POKEMON
+	jr nc, .only_down
+
+	push hl
+	push bc
+	ld hl, SpriteHeaders + SPRITEHEADER_TYPE ; type
+	dec a
+	ld c, a
+	ld b, 0
+	ld a, NUM_SPRITEHEADER_FIELDS
+	call AddNTimes
+	ld a, [hl]
+	pop bc
+	pop hl
+	cp STILL_SPRITE
+	jr nz, .only_down
+	scf
+	ret
+
+.only_down
+	and a
+	ret
+; 142c4
+
+
+_GetSpritePalette:: ; 142c4
+	ld a, c
+	call GetMonSprite
+	jr c, .is_pokemon
+
+	ld hl, SpriteHeaders + 5 ; palette
+	dec a
+	ld c, a
+	ld b, 0
+	ld a, 6
+	call AddNTimes
+	ld c, [hl]
+	ret
+
+.is_pokemon
+	xor a
+	ld c, a
+	ret
+; 142db
+
+
+LoadAndSortSprites: ; 142db
+	call LoadSpriteGFX
+	call SortUsedSprites
+	call ArrangeUsedSprites
+	ret
+; 142e5
+
+
+AddSpriteGFX: ; 142e5
+; Add any new sprite ids to a list of graphics to be loaded.
+; Return carry if the list is full.
+
+	push hl
+	push bc
+	ld b, a
+	ld hl, UsedSprites + 2
+	ld c, SPRITE_GFX_LIST_CAPACITY - 1
+.loop
+	ld a, [hl]
+	cp b
+	jr z, .exists
+	and a
+	jr z, .new
+rept 2
+	inc hl
+endr
+	dec c
+	jr nz, .loop
+
+	pop bc
+	pop hl
+	scf
+	ret
+
+.exists
+	pop bc
+	pop hl
+	and a
+	ret
+
+.new
+	ld [hl], b
+	pop bc
+	pop hl
+	and a
+	ret
+; 14306
+
+
+LoadSpriteGFX: ; 14306
+; Bug: b is not preserved, so
+; it's useless as a next count.
+
+	ld hl, UsedSprites
+	ld b, SPRITE_GFX_LIST_CAPACITY
+.loop
+	ld a, [hli]
+	and a
+	jr z, .done
+	push hl
+	call .LoadSprite
+	pop hl
+	ld [hli], a
+	dec b
+	jr nz, .loop
+
+.done
+	ret
+
+.LoadSprite
+	call GetSprite
+	ld a, l
+	ret
+; 1431e
+
+
+SortUsedSprites: ; 1431e
+; Bubble-sort sprites by type.
+
+; Run backwards through UsedSprites to find the last one.
+
+	ld c, SPRITE_GFX_LIST_CAPACITY
+	ld de, UsedSprites + (SPRITE_GFX_LIST_CAPACITY - 1) * 2
+.FindLastSprite
+	ld a, [de]
+	and a
+	jr nz, .FoundLastSprite
+rept 2
+	dec de
+endr
+	dec c
+	jr nz, .FindLastSprite
+.FoundLastSprite
+	dec c
+	jr z, .quit
+
+; If the length of the current sprite is
+; higher than a later one, swap them.
+
+	inc de
+	ld hl, UsedSprites + 1
+
+.CheckSprite
+	push bc
+	push de
+	push hl
+
+.CheckFollowing
+	ld a, [de]
+	cp [hl]
+	jr nc, .loop
+
+; Swap the two sprites.
+
+	ld b, a
+	ld a, [hl]
+	ld [hl], b
+	ld [de], a
+	dec de
+	dec hl
+	ld a, [de]
+	ld b, a
+	ld a, [hl]
+	ld [hl], b
+	ld [de], a
+	inc de
+	inc hl
+
+; Keep doing this until everything's in order.
+
+.loop
+rept 2
+	dec de
+endr
+	dec c
+	jr nz, .CheckFollowing
+
+	pop hl
+rept 2
+	inc hl
+endr
+	pop de
+	pop bc
+	dec c
+	jr nz, .CheckSprite
+
+.quit
+	ret
+; 14355
+
+
+ArrangeUsedSprites: ; 14355
+; Get the length of each sprite and space them out in VRAM.
+; Crystal introduces a second table in VRAM bank 0.
+
+	ld hl, UsedSprites
+	ld c, SPRITE_GFX_LIST_CAPACITY
+	ld b, 0
+.FirstTableLength
+; Keep going until the end of the list.
+	ld a, [hli]
+	and a
+	jr z, .quit
+
+	ld a, [hl]
+	call GetSpriteLength
+
+; Spill over into the second table after $80 tiles.
+	add b
+	cp $80
+	jr z, .loop
+	jr nc, .SecondTable
+
+.loop
+	ld [hl], b
+	inc hl
+	ld b, a
+
+; Assumes the next table will be reached before c hits 0.
+	dec c
+	jr nz, .FirstTableLength
+
+.SecondTable
+; The second tile table starts at tile $80.
+	ld b, $80
+	dec hl
+.SecondTableLength
+; Keep going until the end of the list.
+	ld a, [hli]
+	and a
+	jr z, .quit
+
+	ld a, [hl]
+	call GetSpriteLength
+
+; There are only two tables, so don't go any further than that.
+	add b
+	jr c, .quit
+
+	ld [hl], b
+	ld b, a
+	inc hl
+
+	dec c
+	jr nz, .SecondTableLength
+
+.quit
+	ret
+; 14386
+
+
+GetSpriteLength: ; 14386
+; Return the length of sprite type a in tiles.
+
+	cp WALKING_SPRITE
+	jr z, .AnyDirection
+	cp STANDING_SPRITE
+	jr z, .AnyDirection
+	cp STILL_SPRITE
+	jr z, .OneDirection
+
+	ld a, 12
+	ret
+
+.AnyDirection
+	ld a, 12
+	ret
+
+.OneDirection
+	ld a, 4
+	ret
+; 1439b
+
+
+GetUsedSprites: ; 1439b
+	ld hl, UsedSprites
+	ld c, SPRITE_GFX_LIST_CAPACITY
+
+.loop
+	ld a, [wSpriteFlags]
+	res 5, a
+	ld [wSpriteFlags], a
+
+	ld a, [hli]
+	and a
+	jr z, .done
+	ld [hUsedSpriteIndex], a
+
+	ld a, [hli]
+	ld [hUsedSpriteTile], a
+
+	bit 7, a
+	jr z, .dont_set
+
+	ld a, [wSpriteFlags]
+	set 5, a ; load VBank0
+	ld [wSpriteFlags], a
+
+.dont_set
+	push bc
+	push hl
+	call GetUsedSprite
+	pop hl
+	pop bc
+	dec c
+	jr nz, .loop
+
+.done
+	ret
+; 143c8
+
+GetUsedSprite: ; 143c8
+	ld a, [hUsedSpriteIndex]
+	call SafeGetSprite
+	ld a, [hUsedSpriteTile]
+	call .GetTileAddr
+	push hl
+	push de
+	push bc
+	ld a, [wSpriteFlags]
+	bit 7, a
+	jr nz, .skip
+	call .CopyToVram
+
+.skip
+	pop bc
+	ld l, c
+	ld h, $0
+rept 4
+	add hl, hl
+endr
+	pop de
+	add hl, de
+	ld d, h
+	ld e, l
+	pop hl
+
+	ld a, [wSpriteFlags]
+	bit 5, a
+	jr nz, .done
+	bit 6, a
+	jr nz, .done
+
+	ld a, [hUsedSpriteIndex]
+	call _DoesSpriteHaveFacings
+	jr c, .done
+
+	ld a, h
+	add $8
+	ld h, a
+	call .CopyToVram
+
+.done
+	ret
+; 14406
+
+.GetTileAddr: ; 14406
+; Return the address of tile (a) in (hl).
+	and $7f
+	ld l, a
+	ld h, 0
+rept 4
+	add hl, hl
+endr
+	ld a, l
+	add VTiles0 % $100
+	ld l, a
+	ld a, h
+	adc VTiles0 / $100
+	ld h, a
+	ret
+; 14418
+
+.CopyToVram: ; 14418
+	ld a, [rVBK]
+	push af
+	ld a, [wSpriteFlags]
+	bit 5, a
+	ld a, $1
+	jr z, .bankswitch
+	ld a, $0
+
+.bankswitch
+	ld [rVBK], a
+	call Get2bpp
+	pop af
+	ld [rVBK], a
+	ret
+; 1442f
+
+LoadEmote:: ; 1442f
+; Get the address of the pointer to emote c.
+	ld a, c
+	ld bc, 6
+	ld hl, EmotesPointers
+	call AddNTimes
+; Load the emote address into de
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+; load the length of the emote (in tiles) into c
+	inc hl
+	ld c, [hl]
+	swap c
+; load the emote pointer bank into b
+	inc hl
+	ld b, [hl]
+; load the VRAM destination into hl
+	inc hl
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+; if the emote has a length of 0, do not proceed (error handling)
+	ld a, c
+	and a
+	ret z
+	call GetEmote2bpp
+	ret
+; 1444d
+
+emote_header: MACRO
+	dw \1
+	db \2 tiles, BANK(\1)
+	dw VTiles1 tile \3
+ENDM
+
+EmotesPointers: ; 144d
+; dw source address
+; db length, bank
+; dw dest address
+
+	emote_header ShockEmote,     4, $78
+	emote_header QuestionEmote,  4, $78
+	emote_header HappyEmote,     4, $78
+	emote_header SadEmote,       4, $78
+	emote_header HeartEmote,     4, $78
+	emote_header BoltEmote,      4, $78
+	emote_header SleepEmote,     4, $78
+	emote_header FishEmote,      4, $78
+	emote_header JumpShadowGFX,  1, $7c
+	emote_header FishingRodGFX2, 2, $7c
+	emote_header BoulderDustGFX, 2, $7e
+	emote_header FishingRodGFX4, 1, $7e
+; 14495
+
+
+SpriteMons: ; 14495
+	db UNOWN
+	db GEODUDE
+	db GROWLITHE
+	db WEEDLE
+	db SHELLDER
+	db ODDISH
+	db GENGAR
+	db ZUBAT
+	db MAGIKARP
+	db SQUIRTLE
+	db TOGEPI
+	db BUTTERFREE
+	db DIGLETT
+	db POLIWAG
+	db PIKACHU
+	db CLEFAIRY
+	db CHARMANDER
+	db JYNX
+	db STARMIE
+	db BULBASAUR
+	db JIGGLYPUFF
+	db GRIMER
+	db EKANS
+	db PARAS
+	db TENTACOOL
+	db TAUROS
+	db MACHOP
+	db VOLTORB
+	db LAPRAS
+	db RHYDON
+	db MOLTRES
+	db SNORLAX
+	db GYARADOS
+	db LUGIA
+	db HO_OH
+; 144b8
+
+
+OutdoorSprites: ; 144b8
+; Valid sprite IDs for each map group.
+
+	dw Group1Sprites
+	dw Group2Sprites
+	dw Group3Sprites
+	dw Group4Sprites
+	dw Group5Sprites
+	dw Group6Sprites
+	dw Group7Sprites
+	dw Group8Sprites
+	dw Group9Sprites
+	dw Group10Sprites
+	dw Group11Sprites
+	dw Group12Sprites
+	dw Group13Sprites
+	dw Group14Sprites
+	dw Group15Sprites
+	dw Group16Sprites
+	dw Group17Sprites
+	dw Group18Sprites
+	dw Group19Sprites
+	dw Group20Sprites
+	dw Group21Sprites
+	dw Group22Sprites
+	dw Group23Sprites
+	dw Group24Sprites
+	dw Group25Sprites
+	dw Group26Sprites
+; 144ec
+
+
+Group13Sprites: ; 144ec
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_BLUE
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_SWIMMER_GIRL
+	db SPRITE_SWIMMER_GUY
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 14503
+
+Group23Sprites: ; 14503
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_BLUE
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_SWIMMER_GIRL
+	db SPRITE_SWIMMER_GUY
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 1451a
+
+Group14Sprites: ; 1451a
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_BLUE
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_SWIMMER_GIRL
+	db SPRITE_SWIMMER_GUY
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 14531
+
+Group6Sprites: ; 14531
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_BLUE
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_SWIMMER_GIRL
+	db SPRITE_SWIMMER_GUY
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 14548
+
+Group7Sprites: ; 14548
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_SUPER_NERD
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_FISHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_LASS
+	db SPRITE_POKEFAN_M
+	db SPRITE_ROCKET
+	db SPRITE_MISTY
+	db SPRITE_POKE_BALL
+	db SPRITE_SLOWPOKE
+; 1455f
+
+Group25Sprites: ; 1455f
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_SUPER_NERD
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_FISHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_LASS
+	db SPRITE_POKEFAN_M
+	db SPRITE_ROCKET
+	db SPRITE_MISTY
+	db SPRITE_POKE_BALL
+	db SPRITE_SLOWPOKE
+; 14576
+
+Group21Sprites: ; 14576
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_FISHER
+	db SPRITE_POLIWAG
+	db SPRITE_TEACHER
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_LASS
+	db SPRITE_BIKER
+	db SPRITE_SILVER
+	db SPRITE_BLUE
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 1458d
+
+Group18Sprites: ; 1458d
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_POKEFAN_M
+	db SPRITE_MACHOP
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_FISHER
+	db SPRITE_TEACHER
+	db SPRITE_SUPER_NERD
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_BIKER
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 145a4
+
+Group12Sprites: ; 145a4
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_POKEFAN_M
+	db SPRITE_MACHOP
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_FISHER
+	db SPRITE_TEACHER
+	db SPRITE_SUPER_NERD
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_BIKER
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 145bb
+
+Group17Sprites: ; 145bb
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_POKEFAN_M
+	db SPRITE_MACHOP
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_FISHER
+	db SPRITE_TEACHER
+	db SPRITE_SUPER_NERD
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_BIKER
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 145d2
+
+Group16Sprites: ; 145d2
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_POKEFAN_M
+	db SPRITE_BUENA
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_FISHER
+	db SPRITE_TEACHER
+	db SPRITE_SUPER_NERD
+	db SPRITE_MACHOP
+	db SPRITE_BIKER
+	db SPRITE_POKE_BALL
+	db SPRITE_BOULDER
+; 145e9
+
+Group24Sprites: ; 145e9
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_SILVER
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_YOUNGSTER
+	db SPRITE_MONSTER
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 14600
+
+Group26Sprites: ; 14600
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_SILVER
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_YOUNGSTER
+	db SPRITE_MONSTER
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 14617
+
+Group19Sprites: ; 14617
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_SILVER
+	db SPRITE_TEACHER
+	db SPRITE_FISHER
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_YOUNGSTER
+	db SPRITE_MONSTER
+	db SPRITE_GRAMPS
+	db SPRITE_BUG_CATCHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 1462e
+
+Group10Sprites: ; 1462e
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_FISHER
+	db SPRITE_LASS
+	db SPRITE_OFFICER
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_BUG_CATCHER
+	db SPRITE_SUPER_NERD
+	db SPRITE_WEIRD_TREE
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 14645
+
+Group4Sprites: ; 14645
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_FISHER
+	db SPRITE_LASS
+	db SPRITE_OFFICER
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_BUG_CATCHER
+	db SPRITE_SUPER_NERD
+	db SPRITE_WEIRD_TREE
+	db SPRITE_POKE_BALL
+	db SPRITE_FRUIT_TREE
+; 1465c
+
+Group8Sprites: ; 1465c
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_KURT_OUTSIDE
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_OFFICER
+	db SPRITE_POKEFAN_M
+	db SPRITE_BLACK_BELT
+	db SPRITE_TEACHER
+	db SPRITE_AZALEA_ROCKET
+	db SPRITE_LASS
+	db SPRITE_SILVER
+	db SPRITE_FRUIT_TREE
+	db SPRITE_SLOWPOKE
+; 14673
+
+Group11Sprites: ; 14673
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_POKE_BALL
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_OFFICER
+	db SPRITE_POKEFAN_M
+	db SPRITE_DAYCARE_MON_1
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_ROCKET
+	db SPRITE_LASS
+	db SPRITE_DAYCARE_MON_2
+	db SPRITE_FRUIT_TREE
+	db SPRITE_SLOWPOKE
+; 1468a
+
+Group22Sprites: ; 1468a
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_STANDING_YOUNGSTER
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_OLIVINE_RIVAL
+	db SPRITE_POKEFAN_M
+	db SPRITE_LASS
+	db SPRITE_BUENA
+	db SPRITE_SWIMMER_GIRL
+	db SPRITE_SAILOR
+	db SPRITE_POKEFAN_F
+	db SPRITE_SUPER_NERD
+	db SPRITE_TAUROS
+	db SPRITE_FRUIT_TREE
+	db SPRITE_ROCK
+; 146a1
+
+Group1Sprites: ; 146a1
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_STANDING_YOUNGSTER
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_OLIVINE_RIVAL
+	db SPRITE_POKEFAN_M
+	db SPRITE_LASS
+	db SPRITE_BUENA
+	db SPRITE_SWIMMER_GIRL
+	db SPRITE_SAILOR
+	db SPRITE_POKEFAN_F
+	db SPRITE_SUPER_NERD
+	db SPRITE_TAUROS
+	db SPRITE_FRUIT_TREE
+	db SPRITE_ROCK
+; 146b8
+
+Group9Sprites: ; 146b8
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_LANCE
+	db SPRITE_GRAMPS
+	db SPRITE_SUPER_NERD
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_FISHER
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_LASS
+	db SPRITE_YOUNGSTER
+	db SPRITE_GYARADOS
+	db SPRITE_FRUIT_TREE
+	db SPRITE_POKE_BALL
+; 146cf
+
+Group2Sprites: ; 146cf
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_LASS
+	db SPRITE_SUPER_NERD
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_POKEFAN_M
+	db SPRITE_BLACK_BELT
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_FISHER
+	db SPRITE_FRUIT_TREE
+	db SPRITE_POKE_BALL
+; 146e6
+
+Group5Sprites: ; 146e6
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_GRAMPS
+	db SPRITE_YOUNGSTER
+	db SPRITE_LASS
+	db SPRITE_SUPER_NERD
+	db SPRITE_COOLTRAINER_M
+	db SPRITE_POKEFAN_M
+	db SPRITE_BLACK_BELT
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_FISHER
+	db SPRITE_FRUIT_TREE
+	db SPRITE_POKE_BALL
+; 146fd
+
+Group3Sprites: ; 146fd
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_GAMEBOY_KID
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_LASS
+	db SPRITE_POKEFAN_F
+	db SPRITE_TEACHER
+	db SPRITE_YOUNGSTER
+	db SPRITE_GROWLITHE
+	db SPRITE_POKEFAN_M
+	db SPRITE_ROCKER
+	db SPRITE_FISHER
+	db SPRITE_SCIENTIST
+	db SPRITE_POKE_BALL
+	db SPRITE_BOULDER
+; 14714
+
+Group15Sprites: ; 14714
+	db SPRITE_SUICUNE
+	db SPRITE_SILVER_TROPHY
+	db SPRITE_FAMICOM
+	db SPRITE_POKEDEX
+	db SPRITE_WILL
+	db SPRITE_KAREN
+	db SPRITE_NURSE
+	db SPRITE_OLD_LINK_RECEPTIONIST
+	db SPRITE_BIG_LAPRAS
+	db SPRITE_BIG_ONIX
+	db SPRITE_SUDOWOODO
+	db SPRITE_BIG_SNORLAX
+	db SPRITE_SAILOR
+	db SPRITE_FISHING_GURU
+	db SPRITE_GENTLEMAN
+	db SPRITE_SUPER_NERD
+	db SPRITE_HO_OH
+	db SPRITE_TEACHER
+	db SPRITE_COOLTRAINER_F
+	db SPRITE_YOUNGSTER
+	db SPRITE_FAIRY
+	db SPRITE_POKE_BALL
+	db SPRITE_ROCK
+; 1472b
+
+Group20Sprites: ; 1472b
+	db SPRITE_OAK
+	db SPRITE_FISHER
+	db SPRITE_TEACHER
+	db SPRITE_TWIN
+	db SPRITE_POKEFAN_M
+	db SPRITE_GRAMPS
+	db SPRITE_FAIRY
+	db SPRITE_SILVER
+	db SPRITE_FISHING_GURU
+	db SPRITE_POKE_BALL
+	db SPRITE_POKEDEX
+; 14736
+
+
+SpriteHeaders: ; 14736
+INCLUDE "gfx/overworld/sprite_headers.asm"
+; 1499a
--- a/engine/pack.asm
+++ b/engine/pack.asm
@@ -1,7 +1,7 @@
 
 Pack: ; 10000
 	ld hl, Options
-	set 4, [hl]
+	set NO_TEXT_SCROLL, [hl]
 	call Function1068a
 .loop
 	call JoyTextDelay
@@ -14,9 +14,9 @@
 
 .done
 	ld a, [wcf65]
-	ld [wd0d6], a
+	ld [wLastPocket], a
 	ld hl, Options
-	res 4, [hl]
+	res NO_TEXT_SCROLL, [hl]
 	ret
 ; 10026
 
@@ -65,11 +65,11 @@
 	call CopyMenuDataHeader
 	ld a, [wItemsPocketCursor]
 	ld [wMenuCursorBuffer], a
-	ld a, [wd0df]
-	ld [wd0e4], a
+	ld a, [wItemsPocketScrollPosition]
+	ld [wMenuScrollPosition], a
 	call HandleScrollingMenu
-	ld a, [wd0e4]
-	ld [wd0df], a
+	ld a, [wMenuScrollPosition]
+	ld [wItemsPocketScrollPosition], a
 	ld a, [MenuSelection2]
 	ld [wItemsPocketCursor], a
 	ld b, $7
@@ -93,11 +93,11 @@
 	call CopyMenuDataHeader
 	ld a, [wKeyItemsPocketCursor]
 	ld [wMenuCursorBuffer], a
-	ld a, [wd0e0]
-	ld [wd0e4], a
+	ld a, [wKeyItemsPocketScrollPosition]
+	ld [wMenuScrollPosition], a
 	call HandleScrollingMenu
-	ld a, [wd0e4]
-	ld [wd0e0], a
+	ld a, [wMenuScrollPosition]
+	ld [wKeyItemsPocketScrollPosition], a
 	ld a, [MenuSelection2]
 	ld [wKeyItemsPocketCursor], a
 	ld b, $3
@@ -164,7 +164,7 @@
 
 Jumptable_10137: ; 10137
 	dw Function10159
-	dw Function10492_ret
+	dw QuitItemSubmenu
 ; 1013b
 
 MenuDataHeader_0x1013b: ; 0x1013b
@@ -185,8 +185,8 @@
 
 Jumptable_10153: ; 10153
 	dw Function10159
-	dw Function103fd
-	dw Function10492_ret
+	dw GiveItem
+	dw QuitItemSubmenu
 ; 10159
 
 Function10159: ; 10159
@@ -223,11 +223,11 @@
 	call CopyMenuDataHeader
 	ld a, [wBallsPocketCursor]
 	ld [wMenuCursorBuffer], a
-	ld a, [wd0e1]
-	ld [wd0e4], a
+	ld a, [wBallsPocketScrollPosition]
+	ld [wMenuScrollPosition], a
 	call HandleScrollingMenu
-	ld a, [wd0e4]
-	ld [wd0e1], a
+	ld a, [wMenuScrollPosition]
+	ld [wBallsPocketScrollPosition], a
 	ld a, [MenuSelection2]
 	ld [wBallsPocketCursor], a
 	ld b, $1
@@ -267,32 +267,32 @@
 	jr .tossable_unselectable
 
 .usable
-	ld hl, MenuDataHeader_0x10249
+	ld hl, MenuDataHeader_UsableKeyItem
 	ld de, Jumptable_1026a
 	jr .build_menu
 
 .selectable_usable
-	ld hl, MenuDataHeader_0x10274
+	ld hl, MenuDataHeader_UsableItem
 	ld de, Jumptable_10291
 	jr .build_menu
 
 .tossable_selectable
-	ld hl, MenuDataHeader_0x10299
+	ld hl, MenuDataHeader_UnusableItem
 	ld de, Jumptable_102ac
 	jr .build_menu
 
 .tossable_unselectable
-	ld hl, MenuDataHeader_0x102b0
+	ld hl, MenuDataHeader_UnusableKeyItem
 	ld de, Jumptable_102c7
 	jr .build_menu
 
 .unusable
-	ld hl, MenuDataHeader_0x102cd
+	ld hl, MenuDataHeader_HoldableKeyItem
 	ld de, Jumptable_102ea
 	jr .build_menu
 
 .selectable_unusable
-	ld hl, MenuDataHeader_0x102f2
+	ld hl, MenuDataHeader_HoldableItem
 	ld de, Jumptable_1030b
 .build_menu
 	push de
@@ -307,15 +307,15 @@
 	jp [hl]
 ; 10249 (4:4249)
 
-MenuDataHeader_0x10249: ; 0x10249
+MenuDataHeader_UsableKeyItem: ; 0x10249
 	db $40 ; flags
 	db 01, 13 ; start coords
 	db 11, 19 ; end coords
-	dw MenuData2_0x10251
+	dw .MenuData2
 	db 1 ; default option
 ; 0x10251
 
-MenuData2_0x10251: ; 0x10251
+.MenuData2: ; 0x10251
 	db $c0 ; flags
 	db 5 ; items
 	db "USE@"
@@ -326,22 +326,22 @@
 ; 0x1026a
 
 Jumptable_1026a: ; 1026a
-	dw Function10311
-	dw Function103fd
-	dw Function10364
-	dw Function103c2
-	dw Function10492_ret
+	dw UseItem
+	dw GiveItem
+	dw TossMenu
+	dw RegisterItem
+	dw QuitItemSubmenu
 ; 10274
 
-MenuDataHeader_0x10274: ; 0x10274
+MenuDataHeader_UsableItem: ; 0x10274
 	db $40 ; flags
 	db 03, 13 ; start coords
 	db 11, 19 ; end coords
-	dw MenuData2_0x1027c
+	dw .MenuData2
 	db 1 ; default option
 ; 0x1027c
 
-MenuData2_0x1027c: ; 0x1027c
+.MenuData2: ; 0x1027c
 	db $c0 ; flags
 	db 4 ; items
 	db "USE@"
@@ -351,21 +351,21 @@
 ; 0x10291
 
 Jumptable_10291: ; 10291
-	dw Function10311
-	dw Function103fd
-	dw Function10364
-	dw Function10492_ret
+	dw UseItem
+	dw GiveItem
+	dw TossMenu
+	dw QuitItemSubmenu
 ; 10299
 
-MenuDataHeader_0x10299: ; 0x10299
+MenuDataHeader_UnusableItem: ; 0x10299
 	db %01000000 ; flags
 	db 07, 13 ; start coords
 	db 11, 19 ; end coords
-	dw MenuData2_0x102a1
+	dw .MenuData2
 	db 1 ; default option
 ; 0x102a1
 
-MenuData2_0x102a1: ; 0x102a1
+.MenuData2: ; 0x102a1
 	db $c0 ; flags
 	db 2 ; items
 	db "USE@"
@@ -373,19 +373,19 @@
 ; 0x102ac
 
 Jumptable_102ac: ; 102ac
-	dw Function10311
-	dw Function10492_ret
+	dw UseItem
+	dw QuitItemSubmenu
 ; 102b0
 
-MenuDataHeader_0x102b0: ; 0x102b0
+MenuDataHeader_UnusableKeyItem: ; 0x102b0
 	db %01000000 ; flags
 	db 05, 13 ; start coords
 	db 11, 19 ; end coords
-	dw MenuData2_0x102b8
+	dw .MenuData2
 	db 1 ; default option
 ; 0x102b8
 
-MenuData2_0x102b8: ; 0x102b8
+.MenuData2: ; 0x102b8
 	db $c0 ; flags
 	db 3 ; items
 	db "USE@"
@@ -394,20 +394,20 @@
 ; 0x102c7
 
 Jumptable_102c7: ; 102c7
-	dw Function10311
-	dw Function103c2
-	dw Function10492_ret
+	dw UseItem
+	dw RegisterItem
+	dw QuitItemSubmenu
 ; 102cd
 
-MenuDataHeader_0x102cd: ; 0x102cd
+MenuDataHeader_HoldableKeyItem: ; 0x102cd
 	db $40 ; flags
 	db 03, 13 ; start coords
 	db 11, 19 ; end coords
-	dw MenuData2_0x102d5
+	dw .MenuData2
 	db 1 ; default option
 ; 0x102d5
 
-MenuData2_0x102d5: ; 0x102d5
+.MenuData2: ; 0x102d5
 	db $c0 ; flags
 	db 4 ; items
 	db "GIVE@"
@@ -417,21 +417,21 @@
 ; 0x102ea
 
 Jumptable_102ea: ; 102ea
-	dw Function103fd
-	dw Function10364
-	dw Function103c2
-	dw Function10492_ret
+	dw GiveItem
+	dw TossMenu
+	dw RegisterItem
+	dw QuitItemSubmenu
 ; 102f2
 
-MenuDataHeader_0x102f2: ; 0x102f2
+MenuDataHeader_HoldableItem: ; 0x102f2
 	db $40 ; flags
 	db 05, 13 ; start coords
 	db 11, 19 ; end coords
-	dw MenuData2_0x102fa
+	dw .MenuData2
 	db 1 ; default option
 ; 0x102fa
 
-MenuData2_0x102fa: ; 0x102fa
+.MenuData2: ; 0x102fa
 	db $c0 ; flags
 	db 3 ; items
 	db "GIVE@"
@@ -440,12 +440,12 @@
 ; 0x1030b
 
 Jumptable_1030b: ; 1030b
-	dw Function103fd
-	dw Function10364
-	dw Function10492_ret
+	dw GiveItem
+	dw TossMenu
+	dw QuitItemSubmenu
 ; 10311
 
-Function10311: ; 10311
+UseItem: ; 10311
 	callba CheckItemMenu
 	ld a, [wItemAttributeParamBuffer]
 	ld hl, .jumptable
@@ -464,7 +464,7 @@
 ; 1035c
 
 .Oak: ; 1032d (4:432d)
-	ld hl, UnknownText_0x10af3
+	ld hl, Text_ThisIsntTheTime
 	call Function10889
 	ret
 
@@ -498,30 +498,30 @@
 	ret
 ; 10364 (4:4364)
 
-Function10364: ; 10364
-	ld hl, UnknownText_0x10ae4
+TossMenu: ; 10364
+	ld hl, Text_ThrowAwayHowMany
 	call Function10889
 	callba Function24fbf
 	push af
 	call ExitMenu
 	pop af
-	jr c, .asm_1039c
-	call Function10a1d
-	ld hl, UnknownText_0x10ae9
+	jr c, .finish
+	call Pack_GetItemName
+	ld hl, Text_ConfirmThrowAway
 	call MenuTextBox
 	call YesNoBox
 	push af
 	call ExitMenu
 	pop af
-	jr c, .asm_1039c
+	jr c, .finish
 	ld hl, NumItems
-	ld a, [wd107]
+	ld a, [ItemCountBuffer]
 	call TossItem
-	call Function10a1d
-	ld hl, UnknownText_0x10aee
+	call Pack_GetItemName
+	ld hl, Text_ThrewAway
 	call Function10889
 
-.asm_1039c
+.finish
 	ret
 ; 1039d
 
@@ -538,23 +538,23 @@
 .asm_103aa
 	xor a
 	ld [wBallsPocketCursor], a
-	ld [wd0e1], a
+	ld [wBallsPocketScrollPosition], a
 	ret
 
 .asm_103b2
 	xor a
 	ld [wItemsPocketCursor], a
-	ld [wd0df], a
+	ld [wItemsPocketScrollPosition], a
 	ret
 
 .asm_103ba
 	xor a
 	ld [wKeyItemsPocketCursor], a
-	ld [wd0e0], a
+	ld [wKeyItemsPocketScrollPosition], a
 	ret
 ; 103c2
 
-Function103c2: ; 103c2
+RegisterItem: ; 103c2
 	callba CheckSelectableItem
 	ld a, [wItemAttributeParamBuffer]
 	and a
@@ -564,7 +564,7 @@
 	rrca
 	and $c0
 	ld b, a
-	ld a, [wd107]
+	ld a, [ItemCountBuffer]
 	inc a
 	and $3f
 	or b
@@ -571,20 +571,20 @@
 	ld [WhichRegisteredItem], a
 	ld a, [CurItem]
 	ld [RegisteredItem], a
-	call Function10a1d
+	call Pack_GetItemName
 	ld de, SFX_FULL_HEAL
 	call WaitPlaySFX
-	ld hl, UnknownText_0x10afd
+	ld hl, Text_RegisteredItem
 	call Function10889
 	ret
 
 .asm_103f6
-	ld hl, UnknownText_0x10b02
+	ld hl, Text_CantRegister
 	call Function10889
 	ret
 ; 103fd
 
-Function103fd: ; 103fd
+GiveItem: ; 103fd
 	ld a, [PartyCount]
 	and a
 	jp z, Function10486
@@ -595,9 +595,9 @@
 	ld a, $8
 	ld [PartyMenuActionText], a
 	call ClearBGPalettes
-	callba Function5004f
-	callba Function50405
-	callba Function503e0
+	callba LoadPartyMenuGFX
+	callba InitPartyMenuWithCancel
+	callba InitPartyMenuGFX
 .asm_10427
 	callba WritePartyMenuTilemap
 	callba PrintPartyMenuText
@@ -652,7 +652,7 @@
 	db "@"
 ; 0x10492
 
-Function10492_ret: ; 10492
+QuitItemSubmenu: ; 10492
 	ret
 ; 10493
 
@@ -661,18 +661,18 @@
 	ld hl, Options
 	set 4, [hl]
 	call Function1068a
-.asm_1049b
+.loop
 	call JoyTextDelay
 	ld a, [wJumptableIndex]
 	bit 7, a
-	jr nz, .asm_104ad
+	jr nz, .end
 	call Function104b9
 	call DelayFrame
-	jr .asm_1049b
+	jr .loop
 
-.asm_104ad
+.end
 	ld a, [wcf65]
-	ld [wd0d6], a
+	ld [wLastPocket], a
 	ld hl, Options
 	res 4, [hl]
 	ret
@@ -723,11 +723,11 @@
 	call CopyMenuDataHeader
 	ld a, [wItemsPocketCursor]
 	ld [wMenuCursorBuffer], a
-	ld a, [wd0df]
-	ld [wd0e4], a
+	ld a, [wItemsPocketScrollPosition]
+	ld [wMenuScrollPosition], a
 	call HandleScrollingMenu
-	ld a, [wd0e4]
-	ld [wd0df], a
+	ld a, [wMenuScrollPosition]
+	ld [wItemsPocketScrollPosition], a
 	ld a, [MenuSelection2]
 	ld [wItemsPocketCursor], a
 	ld b, $7
@@ -751,11 +751,11 @@
 	call CopyMenuDataHeader
 	ld a, [wKeyItemsPocketCursor]
 	ld [wMenuCursorBuffer], a
-	ld a, [wd0e0]
-	ld [wd0e4], a
+	ld a, [wKeyItemsPocketScrollPosition]
+	ld [wMenuScrollPosition], a
 	call HandleScrollingMenu
-	ld a, [wd0e4]
-	ld [wd0e0], a
+	ld a, [wMenuScrollPosition]
+	ld [wKeyItemsPocketScrollPosition], a
 	ld a, [MenuSelection2]
 	ld [wKeyItemsPocketCursor], a
 	ld b, $3
@@ -773,7 +773,7 @@
 	xor a
 	ld [hBGMapMode], a
 	call WaitBGMap_DrawPackGFX
-	ld hl, UnknownText_0x10b0c
+	ld hl, Text_PackEmptyString
 	call Function10889
 	call Function10866
 	ret
@@ -802,11 +802,11 @@
 	call CopyMenuDataHeader
 	ld a, [wBallsPocketCursor]
 	ld [wMenuCursorBuffer], a
-	ld a, [wd0e1]
-	ld [wd0e4], a
+	ld a, [wBallsPocketScrollPosition]
+	ld [wMenuScrollPosition], a
 	call HandleScrollingMenu
-	ld a, [wd0e4]
-	ld [wd0e1], a
+	ld a, [wMenuScrollPosition]
+	ld [wBallsPocketScrollPosition], a
 	ld a, [MenuSelection2]
 	ld [wBallsPocketCursor], a
 	ld b, $1
@@ -898,7 +898,7 @@
 
 
 .Oak: ; 10645 (4:4645)
-	ld hl, UnknownText_0x10af3
+	ld hl, Text_ThisIsntTheTime
 	call Function10889
 	ret
 
@@ -951,7 +951,7 @@
 Function1068a: ; 1068a
 	xor a
 	ld [wJumptableIndex], a
-	ld a, [wd0d6]
+	ld a, [wLastPocket]
 	and $3
 	ld [wcf65], a
 	inc a
@@ -1008,33 +1008,33 @@
 	call CopyMenuDataHeader
 	ld a, [wItemsPocketCursor]
 	ld [wMenuCursorBuffer], a
-	ld a, [wd0df]
-	ld [wd0e4], a
+	ld a, [wItemsPocketScrollPosition]
+	ld [wMenuScrollPosition], a
 	call HandleScrollingMenu
-	ld a, [wd0e4]
-	ld [wd0df], a
+	ld a, [wMenuScrollPosition]
+	ld [wItemsPocketScrollPosition], a
 	ld a, [MenuSelection2]
 	ld [wItemsPocketCursor], a
 	ret
 
 .KeyItemsPocket: ; 106ff (4:46ff)
-	ld a, $2
+	ld a, 2
 	call InitPocket
 	ld hl, MenuDataHeader_0x10a97
 	call CopyMenuDataHeader
 	ld a, [wKeyItemsPocketCursor]
 	ld [wMenuCursorBuffer], a
-	ld a, [wd0e0]
-	ld [wd0e4], a
+	ld a, [wKeyItemsPocketScrollPosition]
+	ld [wMenuScrollPosition], a
 	call HandleScrollingMenu
-	ld a, [wd0e4]
-	ld [wd0e0], a
+	ld a, [wMenuScrollPosition]
+	ld [wKeyItemsPocketScrollPosition], a
 	ld a, [MenuSelection2]
 	ld [wKeyItemsPocketCursor], a
 	ret
 
 .TMHMPocket: ; 10726 (4:4726)
-	ld a, $3
+	ld a, 3
 	call InitPocket
 	call WaitBGMap_DrawPackGFX
 	callba Function2c76f
@@ -1043,17 +1043,17 @@
 	ret
 
 .BallsPocket: ; 1073b (4:473b)
-	ld a, $1
+	ld a, 1
 	call InitPocket
 	ld hl, MenuDataHeader_0x10ac7
 	call CopyMenuDataHeader
 	ld a, [wBallsPocketCursor]
 	ld [wMenuCursorBuffer], a
-	ld a, [wd0e1]
-	ld [wd0e4], a
+	ld a, [wBallsPocketScrollPosition]
+	ld [wMenuScrollPosition], a
 	call HandleScrollingMenu
-	ld a, [wd0e4]
-	ld [wd0e1], a
+	ld a, [wMenuScrollPosition]
+	ld [wBallsPocketScrollPosition], a
 	ld a, [MenuSelection2]
 	ld [wBallsPocketCursor], a
 	ret
@@ -1120,17 +1120,17 @@
 	ret
 ; 107bb
 
-Function107bb: ; 107bb
+TutorialPack: ; 107bb
 	call Function106a5
 	ld a, [InputType]
 	or a
-	jr z, .asm_107ca
+	jr z, .loop
 	callba _DudeAutoInput_RightA
 
-.asm_107ca
+.loop
 	call Function107d7
 	call Function1076f
-	jr c, .asm_107ca
+	jr c, .loop
 	xor a
 	ld [wcf66], a
 	ret
@@ -1138,13 +1138,13 @@
 
 Function107d7: ; 107d7
 	ld a, [wJumptableIndex]
-	ld hl, Jumptable_107e1
+	ld hl, .jumptable
 	call Function1086b
 	jp [hl]
 ; 107e1
 
 
-Jumptable_107e1: ; 107e1 (4:47e1)
+.jumptable: ; 107e1 (4:47e1)
 	dw Function107e9
 	dw Function1083b
 	dw Function10807
@@ -1161,11 +1161,11 @@
 	db $40 ; flags
 	db 01, 07 ; start coords
 	db 11, 19 ; end coords
-	dw MenuData2_0x107f7
+	dw .MenuData2
 	db 1 ; default option
 ; 0x107f7
 
-MenuData2_0x107f7: ; 0x107f7
+.MenuData2: ; 0x107f7
 	db $ae ; flags
 	db 5, 8 ; rows, columns
 	db 2 ; horizontal spacing
@@ -1172,11 +1172,11 @@
 	dbw 0, OTPartyMons
 	dba PlaceMenuItemName
 	dba PlaceMenuItemQuantity
-	dba Function244c3
+	dba UpdateItemDescription
 ; 10807
 
 Function10807: ; 10807 (4:4807)
-	ld a, $2
+	ld a, 2
 	ld hl, MenuDataHeader_0x1080e
 	jr Function1085a
 ; 1080e (4:480e)
@@ -1185,11 +1185,11 @@
 	db $40 ; flags
 	db 01, 07 ; start coords
 	db 11, 19 ; end coords
-	dw MenuData2_0x10816
+	dw .MenuData2
 	db 1 ; default option
 ; 0x10816
 
-MenuData2_0x10816: ; 0x10816
+.MenuData2: ; 0x10816
 	db $ae ; flags
 	db 5, 8 ; rows, columns
 	db 1 ; horizontal spacing
@@ -1196,11 +1196,11 @@
 	dbw 0, OTPartyMon1Exp + 2
 	dba PlaceMenuItemName
 	dba PlaceMenuItemQuantity
-	dba Function244c3
+	dba UpdateItemDescription
 ; 10826
 
 Function10826: ; 10826 (4:4826)
-	ld a, $3
+	ld a, 3
 	call InitPocket
 	call WaitBGMap_DrawPackGFX
 	callba Function2c76f
@@ -1209,7 +1209,7 @@
 	ret
 
 Function1083b: ; 1083b (4:483b)
-	ld a, $1
+	ld a, 1
 	ld hl, MenuDataHeader_0x10842
 	jr Function1085a
 ; 10842 (4:4842)
@@ -1218,11 +1218,11 @@
 	db $40 ; flags
 	db 01, 07 ; start coords
 	db 11, 19 ; end coords
-	dw MenuData2_0x1084a
+	dw .MenuData2
 	db 1 ; default option
 ; 0x1084a
 
-MenuData2_0x1084a: ; 0x1084a
+.MenuData2: ; 0x1084a
 	db $ae ; flags
 	db 5, 8 ; rows, columns
 	db 2 ; horizontal spacing
@@ -1229,7 +1229,7 @@
 	dbw 0, OTPartyMon1CaughtGender
 	dba PlaceMenuItemName
 	dba PlaceMenuItemQuantity
-	dba Function244c3
+	dba UpdateItemDescription
 ; 1085a
 
 Function1085a: ; 1085a (4:485a)
@@ -1374,7 +1374,7 @@
 	ret
 .asm_10923
 	callba Function2490c
-	ld hl, UnknownText_0x10b07
+	ld hl, Text_MoveItemWhere
 	call Function10889
 	scf
 	ret
@@ -1410,13 +1410,19 @@
 	ld bc, $60 tiles
 	ld a, BANK(PackMenuGFX)
 	call FarCopyBytes
+
+; Background (blue if male, pink if female)
 	hlcoord 0, 1
 	ld bc, 11 * SCREEN_WIDTH
 	ld a, $24
 	call ByteFill
+
+; This is where the items themselves will be listed.
 	hlcoord 5, 1
 	lb bc, 11, 15
 	call ClearBox
+
+; ◀▶ POCKET       ▼▲ ITEMS
 	hlcoord 0, 0
 	ld a, $28
 	ld c, SCREEN_WIDTH
@@ -1425,10 +1431,13 @@
 	inc a
 	dec c
 	jr nz, .loop
+
 	call DrawPocketName
-	call Function109a5
-	hlcoord 0, 12
-	lb bc, 4, 18
+	call PlacePackGFX
+
+; Place the textbox for displaying the item description
+	hlcoord 0, SCREEN_HEIGHT - 4 - 2
+	lb bc, 4, SCREEN_WIDTH - 2
 	call TextBox
 	call EnableLCD
 	call DrawPackGFX
@@ -1435,21 +1444,21 @@
 	ret
 ; 109a5
 
-Function109a5: ; 109a5
+PlacePackGFX: ; 109a5
 	hlcoord 0, 3
 	ld a, $50
-	ld de, 15
+	ld de, SCREEN_WIDTH - 5
 	ld b, 3
-.asm_109af
+.row
 	ld c, 5
-.asm_109b1
+.column
 	ld [hli], a
 	inc a
 	dec c
-	jr nz, .asm_109b1
+	jr nz, .column
 	add hl, de
 	dec b
-	jr nz, .asm_109af
+	jr nz, .row
 	ret
 ; 109bb
 
@@ -1487,21 +1496,33 @@
 ; 109e1
 
 .tilemap: ; 109e1
-	db $00, $04, $04, $04, $01,  $06, $07, $08, $09, $0a,  $02, $05, $05, $05, $03
-	db $00, $04, $04, $04, $01,  $15, $16, $17, $18, $19,  $02, $05, $05, $05, $03
-	db $00, $04, $04, $04, $01,  $0b, $0c, $0d, $0e, $0f,  $02, $05, $05, $05, $03
-	db $00, $04, $04, $04, $01,  $10, $11, $12, $13, $14,  $02, $05, $05, $05, $03
+	db $00, $04, $04, $04, $01 ; top border
+	db $06, $07, $08, $09, $0a ; Items
+	db $02, $05, $05, $05, $03 ; bottom border
+
+	db $00, $04, $04, $04, $01 ; top border
+	db $15, $16, $17, $18, $19 ; Balls
+	db $02, $05, $05, $05, $03 ; bottom border
+
+	db $00, $04, $04, $04, $01 ; top border
+	db $0b, $0c, $0d, $0e, $0f ; Key Items
+	db $02, $05, $05, $05, $03 ; bottom border
+
+	db $00, $04, $04, $04, $01 ; top border
+	db $10, $11, $12, $13, $14 ; TM/HM
+	db $02, $05, $05, $05, $03 ; bottom border
 ; 10a1d
 
-Function10a1d: ; 10a1d
+Pack_GetItemName: ; 10a1d
 	ld a, [CurItem]
-	ld [wd265], a
+	ld [wNamedObjectIndexBuffer], a
 	call GetItemName
 	call CopyName1
 	ret
 ; 10a2a
 
-Function10a2a: ; 10a2a
+Pack_ClearTilemap: ; 10a2a
+; unreferenced
 	hlcoord 0, 0
 	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
 	ld a, " "
@@ -1540,7 +1561,7 @@
 	dbw 0, NumItems
 	dba PlaceMenuItemName
 	dba PlaceMenuItemQuantity
-	dba Function244c3
+	dba UpdateItemDescription
 ; 10a67
 
 MenuDataHeader_0x10a67: ; 0x10a67
@@ -1558,7 +1579,7 @@
 	dbw 0, NumItems
 	dba PlaceMenuItemName
 	dba PlaceMenuItemQuantity
-	dba Function244c3
+	dba UpdateItemDescription
 ; 10a7f
 
 MenuDataHeader_0x10a7f: ; 0x10a7f
@@ -1576,7 +1597,7 @@
 	dbw 0, NumKeyItems
 	dba PlaceMenuItemName
 	dba PlaceMenuItemQuantity
-	dba Function244c3
+	dba UpdateItemDescription
 ; 10a97
 
 MenuDataHeader_0x10a97: ; 0x10a97
@@ -1594,7 +1615,7 @@
 	dbw 0, NumKeyItems
 	dba PlaceMenuItemName
 	dba PlaceMenuItemQuantity
-	dba Function244c3
+	dba UpdateItemDescription
 ; 10aaf
 
 MenuDataHeader_0x10aaf: ; 0x10aaf
@@ -1612,7 +1633,7 @@
 	dbw 0, NumBalls
 	dba PlaceMenuItemName
 	dba PlaceMenuItemQuantity
-	dba Function244c3
+	dba UpdateItemDescription
 ; 10ac7
 
 MenuDataHeader_0x10ac7: ; 0x10ac7
@@ -1630,34 +1651,34 @@
 	dbw 0, NumBalls
 	dba PlaceMenuItemName
 	dba PlaceMenuItemQuantity
-	dba Function244c3
+	dba UpdateItemDescription
 ; 10adf
 
-UnknownText_0x10adf: ; 0x10adf
+Text_PackNoItems: ; 0x10adf
 	; No items.
 	text_jump UnknownText_0x1c0b9a
 	db "@"
 ; 0x10ae4
 
-UnknownText_0x10ae4: ; 0x10ae4
+Text_ThrowAwayHowMany: ; 0x10ae4
 	; Throw away how many?
 	text_jump UnknownText_0x1c0ba5
 	db "@"
 ; 0x10ae9
 
-UnknownText_0x10ae9: ; 0x10ae9
+Text_ConfirmThrowAway: ; 0x10ae9
 	; Throw away @ @ (S)?
 	text_jump UnknownText_0x1c0bbb
 	db "@"
 ; 0x10aee
 
-UnknownText_0x10aee: ; 0x10aee
+Text_ThrewAway: ; 0x10aee
 	; Threw away @ (S).
 	text_jump UnknownText_0x1c0bd8
 	db "@"
 ; 0x10af3
 
-UnknownText_0x10af3: ; 0x10af3
+Text_ThisIsntTheTime: ; 0x10af3
 	; OAK:  ! This isn't the time to use that!
 	text_jump UnknownText_0x1c0bee
 	db "@"
@@ -1669,25 +1690,25 @@
 	db "@"
 ; 0x10afd
 
-UnknownText_0x10afd: ; 0x10afd
+Text_RegisteredItem: ; 0x10afd
 	; Registered the @ .
 	text_jump UnknownText_0x1c0c2e
 	db "@"
 ; 0x10b02
 
-UnknownText_0x10b02: ; 0x10b02
+Text_CantRegister: ; 0x10b02
 	; You can't register that item.
 	text_jump UnknownText_0x1c0c45
 	db "@"
 ; 0x10b07
 
-UnknownText_0x10b07: ; 0x10b07
+Text_MoveItemWhere: ; 0x10b07
 	; Where should this be moved to?
 	text_jump UnknownText_0x1c0c63
 	db "@"
 ; 0x10b0c
 
-UnknownText_0x10b0c: ; 0x10b0c
+Text_PackEmptyString: ; 0x10b0c
 	;
 	text_jump UnknownText_0x1c0c83
 	db "@"
--- a/engine/party_menu.asm
+++ b/engine/party_menu.asm
@@ -20,7 +20,7 @@
 	call ClearBGPalettes
 	call Function5003f
 	call WaitBGMap
-	ld b, $a
+	ld b, SCGB_0A
 	call GetSGBLayout
 	call SetPalettes
 	call DelayFrame
@@ -30,18 +30,18 @@
 ; 5003f
 
 Function5003f: ; 5003f
-	call Function5004f
-	call Function50405
-	call Function503e0
+	call LoadPartyMenuGFX
+	call InitPartyMenuWithCancel
+	call InitPartyMenuGFX
 	call WritePartyMenuTilemap
 	call PrintPartyMenuText
 	ret
 ; 5004f
 
-Function5004f: ; 5004f
+LoadPartyMenuGFX: ; 5004f
 	call LoadFontsBattleExtra
 	callab Function8ad1 ; engine/color.asm
-	callab InefficientlyClear121BytesAtwc300
+	callab ClearSpriteAnims
 	ret
 ; 5005f
 
@@ -149,7 +149,7 @@
 	ld b, $0
 	add hl, bc
 	call SetHPPal
-	ld b, $fc
+	ld b, SCGB_FC
 	call GetSGBLayout
 
 .skip
@@ -162,7 +162,7 @@
 	inc b
 	dec c
 	jr nz, .loop
-	ld b, $a
+	ld b, SCGB_0A
 	call GetSGBLayout
 	ret
 ; 50117
@@ -648,7 +648,7 @@
 ; 503e0
 
 
-Function503e0: ; 503e0
+InitPartyMenuGFX: ; 503e0
 	ld hl, PartyCount
 	ld a, [hli]
 	and a
@@ -656,7 +656,7 @@
 	ld c, a
 	xor a
 	ld [hObjectStructIndexBuffer], a
-.asm_503ea
+.loop
 	push bc
 	push hl
 	ld hl, Function8e83f
@@ -669,60 +669,62 @@
 	pop hl
 	pop bc
 	dec c
-	jr nz, .asm_503ea
+	jr nz, .loop
 	callab Function8cf69
 	ret
 ; 50405
 
-Function50405: ; 50405
+InitPartyMenuWithCancel: ; 50405
+; with cancel
 	xor a
-	ld [wd0e3], a
-	ld de, Unknown_5044f
-	call Function1bb1
+	ld [wSwitchMon], a
+	ld de, PartyMenuAttributes
+	call InitMenu3
 	ld a, [PartyCount]
 	inc a
-	ld [wcfa3], a
+	ld [wcfa3], a ; list length
 	dec a
 	ld b, a
-	ld a, [wd0d8]
+	ld a, [wPartyMenuCursor]
 	and a
-	jr z, .asm_50422
+	jr z, .skip
 	inc b
 	cp b
-	jr c, .asm_50424
+	jr c, .done
 
-.asm_50422
+.skip
 	ld a, $1
 
-.asm_50424
+.done
 	ld [MenuSelection2], a
-	ld a, $3
+	ld a, A_BUTTON | B_BUTTON
 	ld [wcfa8], a
 	ret
 ; 5042d
 
-Function5042d: ; 0x5042d
-	ld de, Unknown_5044f
-	call Function1bb1
+InitPartyMenuNoCancel: ; 0x5042d
+; no cancel
+	ld de, PartyMenuAttributes
+	call InitMenu3
 	ld a, [PartyCount]
-	ld [wcfa3], a
+	ld [wcfa3], a ; list length
 	ld b, a
-	ld a, [wd0d8]
+	ld a, [wPartyMenuCursor]
 	and a
-	jr z, .asm_50444
+	jr z, .skip
 	inc b
 	cp b
-	jr c, .asm_50446
-.asm_50444
+	jr c, .done
+.skip
 	ld a, $1
-.asm_50446
+.done
 	ld [MenuSelection2], a
-	ld a, $3
+	ld a, A_BUTTON | B_BUTTON
 	ld [wcfa8], a
 	ret
 ; 5044f (14:444f)
 
-Unknown_5044f: ; 5044f
+PartyMenuAttributes: ; 5044f
 ; cursor y
 ; cursor x
 ; list length
@@ -744,7 +746,7 @@
 	ld a, [MenuSelection2] ; menu selection?
 	cp b
 	jr z, .exitmenu ; CANCEL
-	ld [wd0d8], a
+	ld [wPartyMenuCursor], a
 	ld a, [hJoyLast]
 	ld b, a
 	bit 1, b
@@ -839,85 +841,85 @@
 	db "You have no <PK><MN>!@"
 
 
-Function50566: ; 50566
+PrintPartyMenuActionText: ; 50566
 	ld a, [CurPartyMon]
 	ld hl, PartyMonNicknames
 	call GetNick
 	ld a, [PartyMenuActionText]
 	and $f
-	ld hl, Unknown_5057b
-	call Function505c1
+	ld hl, .MenuActionTexts
+	call .PrintText
 	ret
 ; 5057b
 
-Unknown_5057b: ; 5057b
-	dw UnknownText_0x50594
-	dw UnknownText_0x5059e
-	dw UnknownText_0x505a3
-	dw UnknownText_0x505a8
-	dw UnknownText_0x50599
-	dw UnknownText_0x5058f
-	dw UnknownText_0x505ad
-	dw UnknownText_0x505b2
-	dw UnknownText_0x505b7
-	dw UnknownText_0x505bc
+.MenuActionTexts: ; 5057b
+	dw .Text_CuredOfPoison
+	dw .Text_BurnWasHealed
+	dw .Text_Defrosted
+	dw .Text_WokeUp
+	dw .Text_RidOfParalysis
+	dw .Text_RecoveredSomeHP
+	dw .Text_HealthReturned
+	dw .Text_Revitalized
+	dw .Text_GrewToLevel
+	dw .Text_CameToItsSenses
 ; 5058f
 
-UnknownText_0x5058f: ; 0x5058f
+.Text_RecoveredSomeHP: ; 0x5058f
 	; recovered @ HP!
 	text_jump UnknownText_0x1bc0a2
 	db "@"
 ; 0x50594
 
-UnknownText_0x50594: ; 0x50594
+.Text_CuredOfPoison: ; 0x50594
 	; 's cured of poison.
 	text_jump UnknownText_0x1bc0bb
 	db "@"
 ; 0x50599
 
-UnknownText_0x50599: ; 0x50599
+.Text_RidOfParalysis: ; 0x50599
 	; 's rid of paralysis.
 	text_jump UnknownText_0x1bc0d2
 	db "@"
 ; 0x5059e
 
-UnknownText_0x5059e: ; 0x5059e
+.Text_BurnWasHealed: ; 0x5059e
 	; 's burn was healed.
 	text_jump UnknownText_0x1bc0ea
 	db "@"
 ; 0x505a3
 
-UnknownText_0x505a3: ; 0x505a3
+.Text_Defrosted: ; 0x505a3
 	; was defrosted.
 	text_jump UnknownText_0x1bc101
 	db "@"
 ; 0x505a8
 
-UnknownText_0x505a8: ; 0x505a8
+.Text_WokeUp: ; 0x505a8
 	; woke up.
 	text_jump UnknownText_0x1bc115
 	db "@"
 ; 0x505ad
 
-UnknownText_0x505ad: ; 0x505ad
+.Text_HealthReturned: ; 0x505ad
 	; 's health returned.
 	text_jump UnknownText_0x1bc123
 	db "@"
 ; 0x505b2
 
-UnknownText_0x505b2: ; 0x505b2
+.Text_Revitalized: ; 0x505b2
 	; is revitalized.
 	text_jump UnknownText_0x1bc13a
 	db "@"
 ; 0x505b7
 
-UnknownText_0x505b7: ; 0x505b7
+.Text_GrewToLevel: ; 0x505b7
 	; grew to level @ !@ @
 	text_jump UnknownText_0x1bc14f
 	db "@"
 ; 0x505bc
 
-UnknownText_0x505bc: ; 0x505bc
+.Text_CameToItsSenses: ; 0x505bc
 	; came to its senses.
 	text_jump UnknownText_0x1bc16e
 	db "@"
@@ -924,7 +926,7 @@
 ; 0x505c1
 
 
-Function505c1: ; 505c1
+.PrintText: ; 505c1
 	ld e, a
 	ld d, 0
 rept 2
@@ -935,7 +937,7 @@
 	ld l, a
 	ld a, [Options]
 	push af
-	set 4, a
+	set NO_TEXT_SCROLL, a
 	ld [Options], a
 	call PrintText
 	pop af
--- a/engine/phone.asm
+++ b/engine/phone.asm
@@ -604,7 +604,7 @@
 	call PlaySFX
 	call Phone_CallerTextbox
 	call UpdateSprites
-	callba Function4d188
+	callba PhoneRing_LoadEDTile
 	ret
 ; 90355
 
@@ -614,7 +614,7 @@
 Phone_Wait20Frames
 	ld c, 20
 	call DelayFrames
-	callba Function4d188
+	callba PhoneRing_LoadEDTile
 	ret
 ; 90363
 
--- a/engine/phone_scripts.asm
+++ b/engine/phone_scripts.asm
@@ -1914,123 +1914,123 @@
 	checknite
 	iftrue UnknownScript_0xbdfec
 	checkcode VAR_CALLERID
-	if_equal PHONE_SCHOOLBOY_JACK,       UnknownScript_0xbdeaa
-	if_equal PHONE_SAILOR_HUEY,          UnknownScript_0xbdeb0
-	if_equal PHONE_COOLTRAINERM_GAVEN,   UnknownScript_0xbdeb6
-	if_equal PHONE_BIRDKEEPER_JOSE,      UnknownScript_0xbdebc
-	if_equal PHONE_YOUNGSTER_JOEY,       UnknownScript_0xbdec2
-	if_equal PHONE_BUG_CATCHER_WADE,     UnknownScript_0xbdec8
-	if_equal PHONE_FISHER_RALPH,         UnknownScript_0xbdece
-	if_equal PHONE_HIKER_ANTHONY,        UnknownScript_0xbded4
-	if_equal PHONE_CAMPER_TODD,          UnknownScript_0xbdeda
-	if_equal PHONE_JUGGLER_IRWIN,        UnknownScript_0xbdee0
-	if_equal PHONE_BUG_CATCHER_ARNIE,    UnknownScript_0xbdee6
-	if_equal PHONE_SCHOOLBOY_ALAN,       UnknownScript_0xbdeec
-	if_equal PHONE_SCHOOLBOY_CHAD,       UnknownScript_0xbdef2
-	if_equal PHONE_POKEFANM_DEREK,       UnknownScript_0xbdef8
-	if_equal PHONE_FISHER_TULLY,         UnknownScript_0xbdefe
-	if_equal PHONE_POKEMANIAC_BRENT,     UnknownScript_0xbdf04
-	if_equal PHONE_BIRDKEEPER_VANCE,     UnknownScript_0xbdf0a
-	if_equal PHONE_FISHER_WILTON,        UnknownScript_0xbdf10
-	if_equal PHONE_BLACKBELT_KENJI,      UnknownScript_0xbdf16
-	if_equal PHONE_HIKER_PARRY,          UnknownScript_0xbdf1c
+	if_equal PHONE_SCHOOLBOY_JACK, .Jack
+	if_equal PHONE_SAILOR_HUEY, .Huey
+	if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_YOUNGSTER_JOEY, .Joey
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_FISHER_RALPH, .Ralph
+	if_equal PHONE_HIKER_ANTHONY, .Anthony
+	if_equal PHONE_CAMPER_TODD, .Todd
+	if_equal PHONE_JUGGLER_IRWIN, .Irwin
+	if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+	if_equal PHONE_POKEFANM_DEREK, .Derek
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_POKEMANIAC_BRENT, .Brent
+	if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+	if_equal PHONE_FISHER_WILTON, .Wilton
+	if_equal PHONE_BLACKBELT_KENJI, .Kenji
+	if_equal PHONE_HIKER_PARRY, .Parry
 
-UnknownScript_0xbdeaa:
+.Jack:
 	farwritetext UnknownText_0x1b4dc5
 	keeptextopen
 	end
 
-UnknownScript_0xbdeb0:
+.Huey:
 	farwritetext UnknownText_0x1b5073
 	keeptextopen
 	end
 
-UnknownScript_0xbdeb6:
+.Gaven:
 	farwritetext UnknownText_0x1b5270
 	keeptextopen
 	end
 
-UnknownScript_0xbdebc:
+.Jose:
 	farwritetext UnknownText_0x1b55ae
 	keeptextopen
 	end
 
-UnknownScript_0xbdec2:
+.Joey:
 	farwritetext UnknownText_0x1b589a
 	keeptextopen
 	end
 
-UnknownScript_0xbdec8:
+.Wade:
 	farwritetext UnknownText_0x1b5a3b
 	keeptextopen
 	end
 
-UnknownScript_0xbdece:
+.Ralph:
 	farwritetext UnknownText_0x1b5c10
 	keeptextopen
 	end
 
-UnknownScript_0xbded4:
+.Anthony:
 	farwritetext UnknownText_0x1b5f7a
 	keeptextopen
 	end
 
-UnknownScript_0xbdeda:
+.Todd:
 	farwritetext UnknownText_0x1b60f5
 	keeptextopen
 	end
 
-UnknownScript_0xbdee0:
+.Irwin:
 	farwritetext UnknownText_0x1b638c
 	keeptextopen
 	end
 
-UnknownScript_0xbdee6:
+.Arnie:
 	farwritetext UnknownText_0x1b6454
 	keeptextopen
 	end
 
-UnknownScript_0xbdeec:
+.Alan:
 	farwritetext UnknownText_0x1b659d
 	keeptextopen
 	end
 
-UnknownScript_0xbdef2:
+.Chad:
 	farwritetext UnknownText_0x1b67e2
 	keeptextopen
 	end
 
-UnknownScript_0xbdef8:
+.Derek:
 	farwritetext UnknownText_0x1b69a8
 	keeptextopen
 	end
 
-UnknownScript_0xbdefe:
+.Tully:
 	farwritetext UnknownText_0x1b6b39
 	keeptextopen
 	end
 
-UnknownScript_0xbdf04:
+.Brent:
 	farwritetext UnknownText_0x1b6c96
 	keeptextopen
 	end
 
-UnknownScript_0xbdf0a:
+.Vance:
 	farwritetext UnknownText_0x1b7019
 	keeptextopen
 	end
 
-UnknownScript_0xbdf10:
+.Wilton:
 	farwritetext UnknownText_0x1b71d5
 	keeptextopen
 	end
 
-UnknownScript_0xbdf16:
+.Kenji:
 	farwritetext UnknownText_0x1b730b
 	keeptextopen
 	end
 
-UnknownScript_0xbdf1c:
+.Parry:
 	farwritetext UnknownText_0x1b73c7
 	keeptextopen
 	end
@@ -2037,123 +2037,123 @@
 
 UnknownScript_0xbdf22:
 	checkcode VAR_CALLERID
-	if_equal PHONE_SCHOOLBOY_JACK,       UnknownScript_0xbdf74
-	if_equal PHONE_SAILOR_HUEY,          UnknownScript_0xbdf7a
-	if_equal PHONE_COOLTRAINERM_GAVEN,   UnknownScript_0xbdf80
-	if_equal PHONE_BIRDKEEPER_JOSE,      UnknownScript_0xbdf86
-	if_equal PHONE_YOUNGSTER_JOEY,       UnknownScript_0xbdf8c
-	if_equal PHONE_BUG_CATCHER_WADE,     UnknownScript_0xbdf92
-	if_equal PHONE_FISHER_RALPH,         UnknownScript_0xbdf98
-	if_equal PHONE_HIKER_ANTHONY,        UnknownScript_0xbdf9e
-	if_equal PHONE_CAMPER_TODD,          UnknownScript_0xbdfa4
-	if_equal PHONE_JUGGLER_IRWIN,        UnknownScript_0xbdfaa
-	if_equal PHONE_BUG_CATCHER_ARNIE,    UnknownScript_0xbdfb0
-	if_equal PHONE_SCHOOLBOY_ALAN,       UnknownScript_0xbdfb6
-	if_equal PHONE_SCHOOLBOY_CHAD,       UnknownScript_0xbdfbc
-	if_equal PHONE_POKEFANM_DEREK,       UnknownScript_0xbdfc2
-	if_equal PHONE_FISHER_TULLY,         UnknownScript_0xbdfc8
-	if_equal PHONE_POKEMANIAC_BRENT,     UnknownScript_0xbdfce
-	if_equal PHONE_BIRDKEEPER_VANCE,     UnknownScript_0xbdfd4
-	if_equal PHONE_FISHER_WILTON,        UnknownScript_0xbdfda
-	if_equal PHONE_BLACKBELT_KENJI,      UnknownScript_0xbdfe0
-	if_equal PHONE_HIKER_PARRY,          UnknownScript_0xbdfe6
+	if_equal PHONE_SCHOOLBOY_JACK, .Jack
+	if_equal PHONE_SAILOR_HUEY, .Huey
+	if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_YOUNGSTER_JOEY, .Joey
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_FISHER_RALPH, .Ralph
+	if_equal PHONE_HIKER_ANTHONY, .Anthony
+	if_equal PHONE_CAMPER_TODD, .Todd
+	if_equal PHONE_JUGGLER_IRWIN, .Irwin
+	if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+	if_equal PHONE_POKEFANM_DEREK, .Derek
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_POKEMANIAC_BRENT, .Brent
+	if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+	if_equal PHONE_FISHER_WILTON, .Wilton
+	if_equal PHONE_BLACKBELT_KENJI, .Kenji
+	if_equal PHONE_HIKER_PARRY, .Parry
 
-UnknownScript_0xbdf74:
+.Jack:
 	farwritetext UnknownText_0x1b4ded
 	keeptextopen
 	end
 
-UnknownScript_0xbdf7a:
+.Huey:
 	farwritetext UnknownText_0x1b509b
 	keeptextopen
 	end
 
-UnknownScript_0xbdf80:
+.Gaven:
 	farwritetext UnknownText_0x1b52a5
 	keeptextopen
 	end
 
-UnknownScript_0xbdf86:
+.Jose:
 	farwritetext UnknownText_0x1b55da
 	keeptextopen
 	end
 
-UnknownScript_0xbdf8c:
+.Joey:
 	farwritetext UnknownText_0x1b58c2
 	keeptextopen
 	end
 
-UnknownScript_0xbdf92:
+.Wade:
 	farwritetext UnknownText_0x1b5a74
 	keeptextopen
 	end
 
-UnknownScript_0xbdf98:
+.Ralph:
 	farwritetext UnknownText_0x1b5c63
 	keeptextopen
 	end
 
-UnknownScript_0xbdf9e:
+.Anthony:
 	farwritetext UnknownText_0x1b5f9e
 	keeptextopen
 	end
 
-UnknownScript_0xbdfa4:
+.Todd:
 	farwritetext UnknownText_0x1b611b
 	keeptextopen
 	end
 
-UnknownScript_0xbdfaa:
+.Irwin:
 	farwritetext UnknownText_0x1b63a8
 	keeptextopen
 	end
 
-UnknownScript_0xbdfb0:
+.Arnie:
 	farwritetext UnknownText_0x1b647e
 	keeptextopen
 	end
 
-UnknownScript_0xbdfb6:
+.Alan:
 	farwritetext UnknownText_0x1b65c7
 	keeptextopen
 	end
 
-UnknownScript_0xbdfbc:
+.Chad:
 	farwritetext UnknownText_0x1b680e
 	keeptextopen
 	end
 
-UnknownScript_0xbdfc2:
+.Derek:
 	farwritetext UnknownText_0x1b69d2
 	keeptextopen
 	end
 
-UnknownScript_0xbdfc8:
+.Tully:
 	farwritetext UnknownText_0x1b6b65
 	keeptextopen
 	end
 
-UnknownScript_0xbdfce:
+.Brent:
 	farwritetext UnknownText_0x1b6cc6
 	keeptextopen
 	end
 
-UnknownScript_0xbdfd4:
+.Vance:
 	farwritetext UnknownText_0x1b7057
 	keeptextopen
 	end
 
-UnknownScript_0xbdfda:
+.Wilton:
 	farwritetext UnknownText_0x1b71fc
 	keeptextopen
 	end
 
-UnknownScript_0xbdfe0:
+.Kenji:
 	farwritetext UnknownText_0x1b7331
 	keeptextopen
 	end
 
-UnknownScript_0xbdfe6:
+.Parry:
 	farwritetext UnknownText_0x1b73ef
 	keeptextopen
 	end
@@ -2160,123 +2160,123 @@
 
 UnknownScript_0xbdfec:
 	checkcode VAR_CALLERID
-	if_equal PHONE_SCHOOLBOY_JACK,       UnknownScript_0xbe03e
-	if_equal PHONE_SAILOR_HUEY,          UnknownScript_0xbe044
-	if_equal PHONE_COOLTRAINERM_GAVEN,   UnknownScript_0xbe04a
-	if_equal PHONE_BIRDKEEPER_JOSE,      UnknownScript_0xbe050
-	if_equal PHONE_YOUNGSTER_JOEY,       UnknownScript_0xbe056
-	if_equal PHONE_BUG_CATCHER_WADE,     UnknownScript_0xbe05c
-	if_equal PHONE_FISHER_RALPH,         UnknownScript_0xbe062
-	if_equal PHONE_HIKER_ANTHONY,        UnknownScript_0xbe068
-	if_equal PHONE_CAMPER_TODD,          UnknownScript_0xbe06e
-	if_equal PHONE_JUGGLER_IRWIN,        UnknownScript_0xbe074
-	if_equal PHONE_BUG_CATCHER_ARNIE,    UnknownScript_0xbe07a
-	if_equal PHONE_SCHOOLBOY_ALAN,       UnknownScript_0xbe080
-	if_equal PHONE_SCHOOLBOY_CHAD,       UnknownScript_0xbe086
-	if_equal PHONE_POKEFANM_DEREK,       UnknownScript_0xbe08c
-	if_equal PHONE_FISHER_TULLY,         UnknownScript_0xbe092
-	if_equal PHONE_POKEMANIAC_BRENT,     UnknownScript_0xbe098
-	if_equal PHONE_BIRDKEEPER_VANCE,     UnknownScript_0xbe09e
-	if_equal PHONE_FISHER_WILTON,        UnknownScript_0xbe0a4
-	if_equal PHONE_BLACKBELT_KENJI,      UnknownScript_0xbe0aa
-	if_equal PHONE_HIKER_PARRY,          UnknownScript_0xbe0b0
+	if_equal PHONE_SCHOOLBOY_JACK, .Jack
+	if_equal PHONE_SAILOR_HUEY, .Huey
+	if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_YOUNGSTER_JOEY, .Joey
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_FISHER_RALPH, .Ralph
+	if_equal PHONE_HIKER_ANTHONY, .Anthony
+	if_equal PHONE_CAMPER_TODD, .Todd
+	if_equal PHONE_JUGGLER_IRWIN, .Irwin
+	if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+	if_equal PHONE_POKEFANM_DEREK, .Derek
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_POKEMANIAC_BRENT, .Brent
+	if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+	if_equal PHONE_FISHER_WILTON, .Wilton
+	if_equal PHONE_BLACKBELT_KENJI, .Kenji
+	if_equal PHONE_HIKER_PARRY, .Parry
 
-UnknownScript_0xbe03e:
+.Jack:
 	farwritetext UnknownText_0x1b4e16
 	keeptextopen
 	end
 
-UnknownScript_0xbe044:
+.Huey:
 	farwritetext UnknownText_0x1b50c2
 	keeptextopen
 	end
 
-UnknownScript_0xbe04a:
+.Gaven:
 	farwritetext UnknownText_0x1b52cc
 	keeptextopen
 	end
 
-UnknownScript_0xbe050:
+.Jose:
 	farwritetext UnknownText_0x1b55fc
 	keeptextopen
 	end
 
-UnknownScript_0xbe056:
+.Joey:
 	farwritetext UnknownText_0x1b58ea
 	keeptextopen
 	end
 
-UnknownScript_0xbe05c:
+.Wade:
 	farwritetext UnknownText_0x1b5a9f
 	keeptextopen
 	end
 
-UnknownScript_0xbe062:
+.Ralph:
 	farwritetext UnknownText_0x1b5cb6
 	keeptextopen
 	end
 
-UnknownScript_0xbe068:
+.Anthony:
 	farwritetext UnknownText_0x1b5fc9
 	keeptextopen
 	end
 
-UnknownScript_0xbe06e:
+.Todd:
 	farwritetext UnknownText_0x1b6149
 	keeptextopen
 	end
 
-UnknownScript_0xbe074:
+.Irwin:
 	farwritetext UnknownText_0x1b63c4
 	keeptextopen
 	end
 
-UnknownScript_0xbe07a:
+.Arnie:
 	farwritetext UnknownText_0x1b64a8
 	keeptextopen
 	end
 
-UnknownScript_0xbe080:
+.Alan:
 	farwritetext UnknownText_0x1b65e3
 	keeptextopen
 	end
 
-UnknownScript_0xbe086:
+.Chad:
 	farwritetext UnknownText_0x1b6836
 	keeptextopen
 	end
 
-UnknownScript_0xbe08c:
+.Derek:
 	farwritetext UnknownText_0x1b69f8
 	keeptextopen
 	end
 
-UnknownScript_0xbe092:
+.Tully:
 	farwritetext UnknownText_0x1b6b92
 	keeptextopen
 	end
 
-UnknownScript_0xbe098:
+.Brent:
 	farwritetext UnknownText_0x1b6cf6
 	keeptextopen
 	end
 
-UnknownScript_0xbe09e:
+.Vance:
 	farwritetext UnknownText_0x1b7092
 	keeptextopen
 	end
 
-UnknownScript_0xbe0a4:
+.Wilton:
 	farwritetext UnknownText_0x1b722a
 	keeptextopen
 	end
 
-UnknownScript_0xbe0aa:
+.Kenji:
 	farwritetext UnknownText_0x1b7357
 	keeptextopen
 	end
 
-UnknownScript_0xbe0b0:
+.Parry:
 	farwritetext UnknownText_0x1b7417
 	keeptextopen
 	end
@@ -2287,51 +2287,51 @@
 	checknite
 	iftrue UnknownScript_0xbe164
 	checkcode VAR_CALLERID
-	if_equal PHONE_POKEFAN_BEVERLY,       UnknownScript_0xbe0e2
-	if_equal PHONE_COOLTRAINERF_BETH,     UnknownScript_0xbe0e8
-	if_equal PHONE_COOLTRAINERF_REENA,    UnknownScript_0xbe0ee
-	if_equal PHONE_PICNICKER_LIZ,         UnknownScript_0xbe0f4
-	if_equal PHONE_PICNICKER_GINA,        UnknownScript_0xbe0fa
-	if_equal PHONE_LASS_DANA,             UnknownScript_0xbe100
-	if_equal PHONE_PICNICKER_TIFFANY,     UnknownScript_0xbe106
-	if_equal PHONE_PICNICKER_ERIN,        UnknownScript_0xbe10c
+	if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+	if_equal PHONE_COOLTRAINERF_BETH, .Beth
+	if_equal PHONE_COOLTRAINERF_REENA, .Reena
+	if_equal PHONE_PICNICKER_LIZ, .Liz
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+	if_equal PHONE_PICNICKER_ERIN, .Erin
 
-UnknownScript_0xbe0e2:
+.Beverly:
 	farwritetext UnknownText_0x1b4f21
 	keeptextopen
 	end
 
-UnknownScript_0xbe0e8:
+.Beth:
 	farwritetext UnknownText_0x1b53f7
 	keeptextopen
 	end
 
-UnknownScript_0xbe0ee:
+.Reena:
 	farwritetext UnknownText_0x1b5702
 	keeptextopen
 	end
 
-UnknownScript_0xbe0f4:
+.Liz:
 	farwritetext UnknownText_0x1b5d9f
 	keeptextopen
 	end
 
-UnknownScript_0xbe0fa:
+.Gina:
 	farwritetext UnknownText_0x1b626a
 	keeptextopen
 	end
 
-UnknownScript_0xbe100:
+.Dana:
 	farwritetext UnknownText_0x1b66c8
 	keeptextopen
 	end
 
-UnknownScript_0xbe106:
+.Tiffany:
 	farwritetext UnknownText_0x1b6e7c
 	keeptextopen
 	end
 
-UnknownScript_0xbe10c:
+.Erin:
 	farwritetext UnknownText_0x1b751a
 	keeptextopen
 	end
@@ -2338,51 +2338,51 @@
 
 UnknownScript_0xbe112:
 	checkcode VAR_CALLERID
-	if_equal PHONE_POKEFAN_BEVERLY,       UnknownScript_0xbe134
-	if_equal PHONE_COOLTRAINERF_BETH,     UnknownScript_0xbe13a
-	if_equal PHONE_COOLTRAINERF_REENA,    UnknownScript_0xbe140
-	if_equal PHONE_PICNICKER_LIZ,         UnknownScript_0xbe146
-	if_equal PHONE_PICNICKER_GINA,        UnknownScript_0xbe14c
-	if_equal PHONE_LASS_DANA,             UnknownScript_0xbe152
-	if_equal PHONE_PICNICKER_TIFFANY,     UnknownScript_0xbe158
-	if_equal PHONE_PICNICKER_ERIN,        UnknownScript_0xbe15e
+	if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+	if_equal PHONE_COOLTRAINERF_BETH, .Beth
+	if_equal PHONE_COOLTRAINERF_REENA, .Reena
+	if_equal PHONE_PICNICKER_LIZ, .Liz
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+	if_equal PHONE_PICNICKER_ERIN, .Erin
 
-UnknownScript_0xbe134:
+.Beverly:
 	farwritetext UnknownText_0x1b4f4d
 	keeptextopen
 	end
 
-UnknownScript_0xbe13a:
+.Beth:
 	farwritetext UnknownText_0x1b5424
 	keeptextopen
 	end
 
-UnknownScript_0xbe140:
+.Reena:
 	farwritetext UnknownText_0x1b572e
 	keeptextopen
 	end
 
-UnknownScript_0xbe146:
+.Liz:
 	farwritetext UnknownText_0x1b5dcc
 	keeptextopen
 	end
 
-UnknownScript_0xbe14c:
+.Gina:
 	farwritetext UnknownText_0x1b6296
 	keeptextopen
 	end
 
-UnknownScript_0xbe152:
+.Dana:
 	farwritetext UnknownText_0x1b66ec
 	keeptextopen
 	end
 
-UnknownScript_0xbe158:
+.Tiffany:
 	farwritetext UnknownText_0x1b6ea6
 	keeptextopen
 	end
 
-UnknownScript_0xbe15e:
+.Erin:
 	farwritetext UnknownText_0x1b7548
 	keeptextopen
 	end
@@ -2389,51 +2389,51 @@
 
 UnknownScript_0xbe164:
 	checkcode VAR_CALLERID
-	if_equal PHONE_POKEFAN_BEVERLY,       UnknownScript_0xbe186
-	if_equal PHONE_COOLTRAINERF_BETH,     UnknownScript_0xbe18c
-	if_equal PHONE_COOLTRAINERF_REENA,    UnknownScript_0xbe192
-	if_equal PHONE_PICNICKER_LIZ,         UnknownScript_0xbe198
-	if_equal PHONE_PICNICKER_GINA,        UnknownScript_0xbe19e
-	if_equal PHONE_LASS_DANA,             UnknownScript_0xbe1a4
-	if_equal PHONE_PICNICKER_TIFFANY,     UnknownScript_0xbe1aa
-	if_equal PHONE_PICNICKER_ERIN,        UnknownScript_0xbe1b0
+	if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+	if_equal PHONE_COOLTRAINERF_BETH, .Beth
+	if_equal PHONE_COOLTRAINERF_REENA, .Reena
+	if_equal PHONE_PICNICKER_LIZ, .Liz
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+	if_equal PHONE_PICNICKER_ERIN, .Erin
 
-UnknownScript_0xbe186:
+.Beverly:
 	farwritetext UnknownText_0x1b4f75
 	keeptextopen
 	end
 
-UnknownScript_0xbe18c:
+.Beth:
 	farwritetext UnknownText_0x1b5446
 	keeptextopen
 	end
 
-UnknownScript_0xbe192:
+.Reena:
 	farwritetext UnknownText_0x1b575a
 	keeptextopen
 	end
 
-UnknownScript_0xbe198:
+.Liz:
 	farwritetext UnknownText_0x1b5df8
 	keeptextopen
 	end
 
-UnknownScript_0xbe19e:
+.Gina:
 	farwritetext UnknownText_0x1b62c5
 	keeptextopen
 	end
 
-UnknownScript_0xbe1a4:
+.Dana:
 	farwritetext UnknownText_0x1b6713
 	keeptextopen
 	end
 
-UnknownScript_0xbe1aa:
+.Tiffany:
 	farwritetext UnknownText_0x1b6ec9
 	keeptextopen
 	end
 
-UnknownScript_0xbe1b0:
+.Erin:
 	farwritetext UnknownText_0x1b756f
 	keeptextopen
 	end
@@ -2444,123 +2444,123 @@
 	checknite
 	iftrue UnknownScript_0xbe354
 	checkcode VAR_CALLERID
-	if_equal PHONE_SCHOOLBOY_JACK,       UnknownScript_0xbe212
-	if_equal PHONE_SAILOR_HUEY,          UnknownScript_0xbe218
-	if_equal PHONE_COOLTRAINERM_GAVEN,   UnknownScript_0xbe21e
-	if_equal PHONE_BIRDKEEPER_JOSE,      UnknownScript_0xbe224
-	if_equal PHONE_YOUNGSTER_JOEY,       UnknownScript_0xbe22a
-	if_equal PHONE_BUG_CATCHER_WADE,     UnknownScript_0xbe230
-	if_equal PHONE_FISHER_RALPH,         UnknownScript_0xbe236
-	if_equal PHONE_HIKER_ANTHONY,        UnknownScript_0xbe23c
-	if_equal PHONE_CAMPER_TODD,          UnknownScript_0xbe242
-	if_equal PHONE_JUGGLER_IRWIN,        UnknownScript_0xbe248
-	if_equal PHONE_BUG_CATCHER_ARNIE,    UnknownScript_0xbe24e
-	if_equal PHONE_SCHOOLBOY_ALAN,       UnknownScript_0xbe254
-	if_equal PHONE_SCHOOLBOY_CHAD,       UnknownScript_0xbe25a
-	if_equal PHONE_POKEFANM_DEREK,       UnknownScript_0xbe260
-	if_equal PHONE_FISHER_TULLY,         UnknownScript_0xbe266
-	if_equal PHONE_POKEMANIAC_BRENT,     UnknownScript_0xbe26c
-	if_equal PHONE_BIRDKEEPER_VANCE,     UnknownScript_0xbe272
-	if_equal PHONE_FISHER_WILTON,        UnknownScript_0xbe278
-	if_equal PHONE_BLACKBELT_KENJI,      UnknownScript_0xbe27e
-	if_equal PHONE_HIKER_PARRY,          UnknownScript_0xbe284
+	if_equal PHONE_SCHOOLBOY_JACK, .Jack
+	if_equal PHONE_SAILOR_HUEY, .Huey
+	if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_YOUNGSTER_JOEY, .Joey
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_FISHER_RALPH, .Ralph
+	if_equal PHONE_HIKER_ANTHONY, .Anthony
+	if_equal PHONE_CAMPER_TODD, .Todd
+	if_equal PHONE_JUGGLER_IRWIN, .Irwin
+	if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+	if_equal PHONE_POKEFANM_DEREK, .Derek
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_POKEMANIAC_BRENT, .Brent
+	if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+	if_equal PHONE_FISHER_WILTON, .Wilton
+	if_equal PHONE_BLACKBELT_KENJI, .Kenji
+	if_equal PHONE_HIKER_PARRY, .Parry
 
-UnknownScript_0xbe212:
+.Jack:
 	farwritetext UnknownText_0x1b4e3e
 	keeptextopen
 	end
 
-UnknownScript_0xbe218:
+.Huey:
 	farwritetext UnknownText_0x1b50e9
 	keeptextopen
 	end
 
-UnknownScript_0xbe21e:
+.Gaven:
 	farwritetext UnknownText_0x1b5301
 	keeptextopen
 	end
 
-UnknownScript_0xbe224:
+.Jose:
 	farwritetext UnknownText_0x1b5628
 	keeptextopen
 	end
 
-UnknownScript_0xbe22a:
+.Joey:
 	farwritetext UnknownText_0x1b5912
 	keeptextopen
 	end
 
-UnknownScript_0xbe230:
+.Wade:
 	farwritetext UnknownText_0x1b5ad8
 	keeptextopen
 	end
 
-UnknownScript_0xbe236:
+.Ralph:
 	farwritetext UnknownText_0x1b5d09
 	keeptextopen
 	end
 
-UnknownScript_0xbe23c:
+.Anthony:
 	farwritetext UnknownText_0x1b5ff6
 	keeptextopen
 	end
 
-UnknownScript_0xbe242:
+.Todd:
 	farwritetext UnknownText_0x1b616e
 	keeptextopen
 	end
 
-UnknownScript_0xbe248:
+.Irwin:
 	farwritetext UnknownText_0x1b63e3
 	keeptextopen
 	end
 
-UnknownScript_0xbe24e:
+.Arnie:
 	farwritetext UnknownText_0x1b64d2
 	keeptextopen
 	end
 
-UnknownScript_0xbe254:
+.Alan:
 	farwritetext UnknownText_0x1b660d
 	keeptextopen
 	end
 
-UnknownScript_0xbe25a:
+.Chad:
 	farwritetext UnknownText_0x1b6862
 	keeptextopen
 	end
 
-UnknownScript_0xbe260:
+.Derek:
 	farwritetext UnknownText_0x1b6a22
 	keeptextopen
 	end
 
-UnknownScript_0xbe266:
+.Tully:
 	farwritetext UnknownText_0x1b6bb9
 	keeptextopen
 	end
 
-UnknownScript_0xbe26c:
+.Brent:
 	farwritetext UnknownText_0x1b6d26
 	keeptextopen
 	end
 
-UnknownScript_0xbe272:
+.Vance:
 	farwritetext UnknownText_0x1b70e7
 	keeptextopen
 	end
 
-UnknownScript_0xbe278:
+.Wilton:
 	farwritetext UnknownText_0x1b725c
 	keeptextopen
 	end
 
-UnknownScript_0xbe27e:
+.Kenji:
 	farwritetext UnknownText_0x1b737f
 	keeptextopen
 	end
 
-UnknownScript_0xbe284:
+.Parry:
 	farwritetext UnknownText_0x1b743f
 	keeptextopen
 	end
@@ -2567,123 +2567,123 @@
 
 UnknownScript_0xbe28a:
 	checkcode VAR_CALLERID
-	if_equal PHONE_SCHOOLBOY_JACK,       UnknownScript_0xbe2dc
-	if_equal PHONE_SAILOR_HUEY,          UnknownScript_0xbe2e2
-	if_equal PHONE_COOLTRAINERM_GAVEN,   UnknownScript_0xbe2e8
-	if_equal PHONE_BIRDKEEPER_JOSE,      UnknownScript_0xbe2ee
-	if_equal PHONE_YOUNGSTER_JOEY,       UnknownScript_0xbe2f4
-	if_equal PHONE_BUG_CATCHER_WADE,     UnknownScript_0xbe2fa
-	if_equal PHONE_FISHER_RALPH,         UnknownScript_0xbe300
-	if_equal PHONE_HIKER_ANTHONY,        UnknownScript_0xbe306
-	if_equal PHONE_CAMPER_TODD,          UnknownScript_0xbe30c
-	if_equal PHONE_JUGGLER_IRWIN,        UnknownScript_0xbe312
-	if_equal PHONE_BUG_CATCHER_ARNIE,    UnknownScript_0xbe318
-	if_equal PHONE_SCHOOLBOY_ALAN,       UnknownScript_0xbe31e
-	if_equal PHONE_SCHOOLBOY_CHAD,       UnknownScript_0xbe324
-	if_equal PHONE_POKEFANM_DEREK,       UnknownScript_0xbe32a
-	if_equal PHONE_FISHER_TULLY,         UnknownScript_0xbe330
-	if_equal PHONE_POKEMANIAC_BRENT,     UnknownScript_0xbe336
-	if_equal PHONE_BIRDKEEPER_VANCE,     UnknownScript_0xbe33c
-	if_equal PHONE_FISHER_WILTON,        UnknownScript_0xbe342
-	if_equal PHONE_BLACKBELT_KENJI,      UnknownScript_0xbe348
-	if_equal PHONE_HIKER_PARRY,          UnknownScript_0xbe34e
+	if_equal PHONE_SCHOOLBOY_JACK, .Jack
+	if_equal PHONE_SAILOR_HUEY, .Huey
+	if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_YOUNGSTER_JOEY, .Joey
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_FISHER_RALPH, .Ralph
+	if_equal PHONE_HIKER_ANTHONY, .Anthony
+	if_equal PHONE_CAMPER_TODD, .Todd
+	if_equal PHONE_JUGGLER_IRWIN, .Irwin
+	if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+	if_equal PHONE_POKEFANM_DEREK, .Derek
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_POKEMANIAC_BRENT, .Brent
+	if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+	if_equal PHONE_FISHER_WILTON, .Wilton
+	if_equal PHONE_BLACKBELT_KENJI, .Kenji
+	if_equal PHONE_HIKER_PARRY, .Parry
 
-UnknownScript_0xbe2dc:
+.Jack:
 	farwritetext UnknownText_0x1b4e72
 	keeptextopen
 	end
 
-UnknownScript_0xbe2e2:
+.Huey:
 	farwritetext UnknownText_0x1b511a
 	keeptextopen
 	end
 
-UnknownScript_0xbe2e8:
+.Gaven:
 	farwritetext UnknownText_0x1b5335
 	keeptextopen
 	end
 
-UnknownScript_0xbe2ee:
+.Jose:
 	farwritetext UnknownText_0x1b564c
 	keeptextopen
 	end
 
-UnknownScript_0xbe2f4:
+.Joey:
 	farwritetext UnknownText_0x1b5948
 	keeptextopen
 	end
 
-UnknownScript_0xbe2fa:
+.Wade:
 	farwritetext UnknownText_0x1b5b0b
 	keeptextopen
 	end
 
-UnknownScript_0xbe300:
+.Ralph:
 	farwritetext UnknownText_0x1b5d21
 	keeptextopen
 	end
 
-UnknownScript_0xbe306:
+.Anthony:
 	farwritetext UnknownText_0x1b6017
 	keeptextopen
 	end
 
-UnknownScript_0xbe30c:
+.Todd:
 	farwritetext UnknownText_0x1b618f
 	keeptextopen
 	end
 
-UnknownScript_0xbe312:
+.Irwin:
 	farwritetext UnknownText_0x1b6407
 	keeptextopen
 	end
 
-UnknownScript_0xbe318:
+.Arnie:
 	farwritetext UnknownText_0x1b6506
 	keeptextopen
 	end
 
-UnknownScript_0xbe31e:
+.Alan:
 	farwritetext UnknownText_0x1b6624
 	keeptextopen
 	end
 
-UnknownScript_0xbe324:
+.Chad:
 	farwritetext UnknownText_0x1b6890
 	keeptextopen
 	end
 
-UnknownScript_0xbe32a:
+.Derek:
 	farwritetext UnknownText_0x1b6a56
 	keeptextopen
 	end
 
-UnknownScript_0xbe330:
+.Tully:
 	farwritetext UnknownText_0x1b6bef
 	keeptextopen
 	end
 
-UnknownScript_0xbe336:
+.Brent:
 	farwritetext UnknownText_0x1b6d57
 	keeptextopen
 	end
 
-UnknownScript_0xbe33c:
+.Vance:
 	farwritetext UnknownText_0x1b7112
 	keeptextopen
 	end
 
-UnknownScript_0xbe342:
+.Wilton:
 	farwritetext UnknownText_0x1b7283
 	keeptextopen
 	end
 
-UnknownScript_0xbe348:
+.Kenji:
 	farwritetext UnknownText_0x1b7397
 	keeptextopen
 	end
 
-UnknownScript_0xbe34e:
+.Parry:
 	farwritetext UnknownText_0x1b746f
 	keeptextopen
 	end
@@ -2690,123 +2690,123 @@
 
 UnknownScript_0xbe354:
 	checkcode VAR_CALLERID
-	if_equal PHONE_SCHOOLBOY_JACK,       UnknownScript_0xbe3a6
-	if_equal PHONE_SAILOR_HUEY,          UnknownScript_0xbe3ac
-	if_equal PHONE_COOLTRAINERM_GAVEN,   UnknownScript_0xbe3b2
-	if_equal PHONE_BIRDKEEPER_JOSE,      UnknownScript_0xbe3b8
-	if_equal PHONE_YOUNGSTER_JOEY,       UnknownScript_0xbe3be
-	if_equal PHONE_BUG_CATCHER_WADE,     UnknownScript_0xbe3c4
-	if_equal PHONE_FISHER_RALPH,         UnknownScript_0xbe3ca
-	if_equal PHONE_HIKER_ANTHONY,        UnknownScript_0xbe3d0
-	if_equal PHONE_CAMPER_TODD,          UnknownScript_0xbe3d6
-	if_equal PHONE_JUGGLER_IRWIN,        UnknownScript_0xbe3dc
-	if_equal PHONE_BUG_CATCHER_ARNIE,    UnknownScript_0xbe3e2
-	if_equal PHONE_SCHOOLBOY_ALAN,       UnknownScript_0xbe3e8
-	if_equal PHONE_SCHOOLBOY_CHAD,       UnknownScript_0xbe3ee
-	if_equal PHONE_POKEFANM_DEREK,       UnknownScript_0xbe3f4
-	if_equal PHONE_FISHER_TULLY,         UnknownScript_0xbe3fa
-	if_equal PHONE_POKEMANIAC_BRENT,     UnknownScript_0xbe400
-	if_equal PHONE_BIRDKEEPER_VANCE,     UnknownScript_0xbe406
-	if_equal PHONE_FISHER_WILTON,        UnknownScript_0xbe40c
-	if_equal PHONE_BLACKBELT_KENJI,      UnknownScript_0xbe412
-	if_equal PHONE_HIKER_PARRY,          UnknownScript_0xbe418
+	if_equal PHONE_SCHOOLBOY_JACK, .Jack
+	if_equal PHONE_SAILOR_HUEY, .Huey
+	if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_YOUNGSTER_JOEY, .Joey
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_FISHER_RALPH, .Ralph
+	if_equal PHONE_HIKER_ANTHONY, .Anthony
+	if_equal PHONE_CAMPER_TODD, .Todd
+	if_equal PHONE_JUGGLER_IRWIN, .Irwin
+	if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+	if_equal PHONE_POKEFANM_DEREK, .Derek
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_POKEMANIAC_BRENT, .Brent
+	if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+	if_equal PHONE_FISHER_WILTON, .Wilton
+	if_equal PHONE_BLACKBELT_KENJI, .Kenji
+	if_equal PHONE_HIKER_PARRY, .Parry
 
-UnknownScript_0xbe3a6:
+.Jack:
 	farwritetext UnknownText_0x1b4e9e
 	keeptextopen
 	end
 
-UnknownScript_0xbe3ac:
+.Huey:
 	farwritetext UnknownText_0x1b5154
 	keeptextopen
 	end
 
-UnknownScript_0xbe3b2:
+.Gaven:
 	farwritetext UnknownText_0x1b535f
 	keeptextopen
 	end
 
-UnknownScript_0xbe3b8:
+.Jose:
 	farwritetext UnknownText_0x1b5670
 	keeptextopen
 	end
 
-UnknownScript_0xbe3be:
+.Joey:
 	farwritetext UnknownText_0x1b597c
 	keeptextopen
 	end
 
-UnknownScript_0xbe3c4:
+.Wade:
 	farwritetext UnknownText_0x1b5b37
 	keeptextopen
 	end
 
-UnknownScript_0xbe3ca:
+.Ralph:
 	farwritetext UnknownText_0x1b5d39
 	keeptextopen
 	end
 
-UnknownScript_0xbe3d0:
+.Anthony:
 	farwritetext UnknownText_0x1b6041
 	keeptextopen
 	end
 
-UnknownScript_0xbe3d6:
+.Todd:
 	farwritetext UnknownText_0x1b61bd
 	keeptextopen
 	end
 
-UnknownScript_0xbe3dc:
+.Irwin:
 	farwritetext UnknownText_0x1b642c
 	keeptextopen
 	end
 
-UnknownScript_0xbe3e2:
+.Arnie:
 	farwritetext UnknownText_0x1b6539
 	keeptextopen
 	end
 
-UnknownScript_0xbe3e8:
+.Alan:
 	farwritetext UnknownText_0x1b663b
 	keeptextopen
 	end
 
-UnknownScript_0xbe3ee:
+.Chad:
 	farwritetext UnknownText_0x1b68ba
 	keeptextopen
 	end
 
-UnknownScript_0xbe3f4:
+.Derek:
 	farwritetext UnknownText_0x1b6a8b
 	keeptextopen
 	end
 
-UnknownScript_0xbe3fa:
+.Tully:
 	farwritetext UnknownText_0x1b6c23
 	keeptextopen
 	end
 
-UnknownScript_0xbe400:
+.Brent:
 	farwritetext UnknownText_0x1b6d88
 	keeptextopen
 	end
 
-UnknownScript_0xbe406:
+.Vance:
 	farwritetext UnknownText_0x1b7132
 	keeptextopen
 	end
 
-UnknownScript_0xbe40c:
+.Wilton:
 	farwritetext UnknownText_0x1b72a5
 	keeptextopen
 	end
 
-UnknownScript_0xbe412:
+.Kenji:
 	farwritetext UnknownText_0x1b73af
 	keeptextopen
 	end
 
-UnknownScript_0xbe418:
+.Parry:
 	farwritetext UnknownText_0x1b749b
 	keeptextopen
 	end
@@ -2817,51 +2817,51 @@
 	checknite
 	iftrue UnknownScript_0xbe4cc
 	checkcode VAR_CALLERID
-	if_equal PHONE_POKEFAN_BEVERLY,       UnknownScript_0xbe44a
-	if_equal PHONE_COOLTRAINERF_BETH,     UnknownScript_0xbe450
-	if_equal PHONE_COOLTRAINERF_REENA,    UnknownScript_0xbe456
-	if_equal PHONE_PICNICKER_LIZ,         UnknownScript_0xbe45c
-	if_equal PHONE_PICNICKER_GINA,        UnknownScript_0xbe462
-	if_equal PHONE_LASS_DANA,             UnknownScript_0xbe468
-	if_equal PHONE_PICNICKER_TIFFANY,     UnknownScript_0xbe46e
-	if_equal PHONE_PICNICKER_ERIN,        UnknownScript_0xbe474
+	if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+	if_equal PHONE_COOLTRAINERF_BETH, .Beth
+	if_equal PHONE_COOLTRAINERF_REENA, .Reena
+	if_equal PHONE_PICNICKER_LIZ, .Liz
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+	if_equal PHONE_PICNICKER_ERIN, .Erin
 
-UnknownScript_0xbe44a:
+.Beverly:
 	farwritetext UnknownText_0x1b4fa1
 	keeptextopen
 	end
 
-UnknownScript_0xbe450:
+.Beth:
 	farwritetext UnknownText_0x1b5472
 	keeptextopen
 	end
 
-UnknownScript_0xbe456:
+.Reena:
 	farwritetext UnknownText_0x1b5786
 	keeptextopen
 	end
 
-UnknownScript_0xbe45c:
+.Liz:
 	farwritetext UnknownText_0x1b5e25
 	keeptextopen
 	end
 
-UnknownScript_0xbe462:
+.Gina:
 	farwritetext UnknownText_0x1b62f1
 	keeptextopen
 	end
 
-UnknownScript_0xbe468:
+.Dana:
 	farwritetext UnknownText_0x1b6738
 	keeptextopen
 	end
 
-UnknownScript_0xbe46e:
+.Tiffany:
 	farwritetext UnknownText_0x1b6ef3
 	keeptextopen
 	end
 
-UnknownScript_0xbe474:
+.Erin:
 	farwritetext UnknownText_0x1b758f
 	keeptextopen
 	end
@@ -2868,51 +2868,51 @@
 
 UnknownScript_0xbe47a:
 	checkcode VAR_CALLERID
-	if_equal PHONE_POKEFAN_BEVERLY,       UnknownScript_0xbe49c
-	if_equal PHONE_COOLTRAINERF_BETH,     UnknownScript_0xbe4a2
-	if_equal PHONE_COOLTRAINERF_REENA,    UnknownScript_0xbe4a8
-	if_equal PHONE_PICNICKER_LIZ,         UnknownScript_0xbe4ae
-	if_equal PHONE_PICNICKER_GINA,        UnknownScript_0xbe4b4
-	if_equal PHONE_LASS_DANA,             UnknownScript_0xbe4ba
-	if_equal PHONE_PICNICKER_TIFFANY,     UnknownScript_0xbe4c0
-	if_equal PHONE_PICNICKER_ERIN,        UnknownScript_0xbe4c6
+	if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+	if_equal PHONE_COOLTRAINERF_BETH, .Beth
+	if_equal PHONE_COOLTRAINERF_REENA, .Reena
+	if_equal PHONE_PICNICKER_LIZ, .Liz
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+	if_equal PHONE_PICNICKER_ERIN, .Erin
 
-UnknownScript_0xbe49c:
+.Beverly:
 	farwritetext UnknownText_0x1b4fda
 	keeptextopen
 	end
 
-UnknownScript_0xbe4a2:
+.Beth:
 	farwritetext UnknownText_0x1b54a6
 	keeptextopen
 	end
 
-UnknownScript_0xbe4a8:
+.Reena:
 	farwritetext UnknownText_0x1b57b7
 	keeptextopen
 	end
 
-UnknownScript_0xbe4ae:
+.Liz:
 	farwritetext UnknownText_0x1b5e59
 	keeptextopen
 	end
 
-UnknownScript_0xbe4b4:
+.Gina:
 	farwritetext UnknownText_0x1b630e
 	keeptextopen
 	end
 
-UnknownScript_0xbe4ba:
+.Dana:
 	farwritetext UnknownText_0x1b6757
 	keeptextopen
 	end
 
-UnknownScript_0xbe4c0:
+.Tiffany:
 	farwritetext UnknownText_0x1b6f1c
 	keeptextopen
 	end
 
-UnknownScript_0xbe4c6:
+.Erin:
 	farwritetext UnknownText_0x1b75ac
 	keeptextopen
 	end
@@ -2919,51 +2919,51 @@
 
 UnknownScript_0xbe4cc:
 	checkcode VAR_CALLERID
-	if_equal PHONE_POKEFAN_BEVERLY,       UnknownScript_0xbe4ee
-	if_equal PHONE_COOLTRAINERF_BETH,     UnknownScript_0xbe4f4
-	if_equal PHONE_COOLTRAINERF_REENA,    UnknownScript_0xbe4fa
-	if_equal PHONE_PICNICKER_LIZ,         UnknownScript_0xbe500
-	if_equal PHONE_PICNICKER_GINA,        UnknownScript_0xbe506
-	if_equal PHONE_LASS_DANA,             UnknownScript_0xbe50c
-	if_equal PHONE_PICNICKER_TIFFANY,     UnknownScript_0xbe512
-	if_equal PHONE_PICNICKER_ERIN,        UnknownScript_0xbe518
+	if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+	if_equal PHONE_COOLTRAINERF_BETH, .Beth
+	if_equal PHONE_COOLTRAINERF_REENA, .Reena
+	if_equal PHONE_PICNICKER_LIZ, .Liz
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+	if_equal PHONE_PICNICKER_ERIN, .Erin
 
-UnknownScript_0xbe4ee:
+.Beverly:
 	farwritetext UnknownText_0x1b5004
 	keeptextopen
 	end
 
-UnknownScript_0xbe4f4:
+.Beth:
 	farwritetext UnknownText_0x1b54d4
 	keeptextopen
 	end
 
-UnknownScript_0xbe4fa:
+.Reena:
 	farwritetext UnknownText_0x1b57e8
 	keeptextopen
 	end
 
-UnknownScript_0xbe500:
+.Liz:
 	farwritetext UnknownText_0x1b5e8e
 	keeptextopen
 	end
 
-UnknownScript_0xbe506:
+.Gina:
 	farwritetext UnknownText_0x1b6331
 	keeptextopen
 	end
 
-UnknownScript_0xbe50c:
+.Dana:
 	farwritetext UnknownText_0x1b6776
 	keeptextopen
 	end
 
-UnknownScript_0xbe512:
+.Tiffany:
 	farwritetext UnknownText_0x1b6f37
 	keeptextopen
 	end
 
-UnknownScript_0xbe518:
+.Erin:
 	farwritetext UnknownText_0x1b75c9
 	keeptextopen
 	end
@@ -2970,110 +2970,110 @@
 
 UnknownScript_0xbe51e:
 	checkcode VAR_CALLERID
-	if_equal PHONE_SCHOOLBOY_JACK,       UnknownScript_0xbe564
-	if_equal PHONE_COOLTRAINERM_GAVEN,   UnknownScript_0xbe570
-	if_equal PHONE_BIRDKEEPER_JOSE,      UnknownScript_0xbe576
-	if_equal PHONE_YOUNGSTER_JOEY,       UnknownScript_0xbe57c
-	if_equal PHONE_BUG_CATCHER_WADE,     UnknownScript_0xbe582
-	if_equal PHONE_FISHER_RALPH,         UnknownScript_0xbe588
-	if_equal PHONE_HIKER_ANTHONY,        UnknownScript_0xbe58e
-	if_equal PHONE_CAMPER_TODD,          UnknownScript_0xbe594
-	if_equal PHONE_BUG_CATCHER_ARNIE,    UnknownScript_0xbe59a
-	if_equal PHONE_SCHOOLBOY_ALAN,       UnknownScript_0xbe5a0
-	if_equal PHONE_SCHOOLBOY_CHAD,       UnknownScript_0xbe5a6
-	if_equal PHONE_POKEFANM_DEREK,       UnknownScript_0xbe5ac
-	if_equal PHONE_FISHER_TULLY,         UnknownScript_0xbe5b2
-	if_equal PHONE_POKEMANIAC_BRENT,     UnknownScript_0xbe5b8
-	if_equal PHONE_BIRDKEEPER_VANCE,     UnknownScript_0xbe5be
-	if_equal PHONE_FISHER_WILTON,        UnknownScript_0xbe5c4
-	if_equal PHONE_HIKER_PARRY,          UnknownScript_0xbe5ca
+	if_equal PHONE_SCHOOLBOY_JACK, .Jack
+	if_equal PHONE_COOLTRAINERM_GAVEN, .Gaven
+	if_equal PHONE_BIRDKEEPER_JOSE, .Jose
+	if_equal PHONE_YOUNGSTER_JOEY, .Joey
+	if_equal PHONE_BUG_CATCHER_WADE, .Wade
+	if_equal PHONE_FISHER_RALPH, .Ralph
+	if_equal PHONE_HIKER_ANTHONY, .Anthony
+	if_equal PHONE_CAMPER_TODD, .Todd
+	if_equal PHONE_BUG_CATCHER_ARNIE, .Arnie
+	if_equal PHONE_SCHOOLBOY_ALAN, .Alan
+	if_equal PHONE_SCHOOLBOY_CHAD, .Chad
+	if_equal PHONE_POKEFANM_DEREK, .Derek
+	if_equal PHONE_FISHER_TULLY, .Tully
+	if_equal PHONE_POKEMANIAC_BRENT, .Brent
+	if_equal PHONE_BIRDKEEPER_VANCE, .Vance
+	if_equal PHONE_FISHER_WILTON, .Wilton
+	if_equal PHONE_HIKER_PARRY, .Parry
 
-UnknownScript_0xbe564:
+.Jack:
 	farwritetext UnknownText_0x1b4ecd
 	keeptextopen
 	end
 
-UnknownScript_0xbe56a:
+.Unknown:
 	farwritetext UnknownText_0x1b518b
 	keeptextopen
 	end
 
-UnknownScript_0xbe570:
+.Gaven:
 	farwritetext UnknownText_0x1b5393
 	keeptextopen
 	end
 
-UnknownScript_0xbe576:
+.Jose:
 	farwritetext UnknownText_0x1b5694
 	keeptextopen
 	end
 
-UnknownScript_0xbe57c:
+.Joey:
 	farwritetext UnknownText_0x1b59b2
 	keeptextopen
 	end
 
-UnknownScript_0xbe582:
+.Wade:
 	farwritetext UnknownText_0x1b5b68
 	keeptextopen
 	end
 
-UnknownScript_0xbe588:
+.Ralph:
 	farwritetext UnknownText_0x1b5d51
 	keeptextopen
 	end
 
-UnknownScript_0xbe58e:
+.Anthony:
 	farwritetext UnknownText_0x1b606f
 	keeptextopen
 	end
 
-UnknownScript_0xbe594:
+.Todd:
 	farwritetext UnknownText_0x1b61f2
 	keeptextopen
 	end
 
-UnknownScript_0xbe59a:
+.Arnie:
 	farwritetext UnknownText_0x1b656c
 	keeptextopen
 	end
 
-UnknownScript_0xbe5a0:
+.Alan:
 	farwritetext UnknownText_0x1b6652
 	keeptextopen
 	end
 
-UnknownScript_0xbe5a6:
+.Chad:
 	farwritetext UnknownText_0x1b68e8
 	keeptextopen
 	end
 
-UnknownScript_0xbe5ac:
+.Derek:
 	farwritetext UnknownText_0x1b6ac2
 	keeptextopen
 	end
 
-UnknownScript_0xbe5b2:
+.Tully:
 	farwritetext UnknownText_0x1b6c56
 	keeptextopen
 	end
 
-UnknownScript_0xbe5b8:
+.Brent:
 	farwritetext UnknownText_0x1b6db9
 	keeptextopen
 	end
 
-UnknownScript_0xbe5be:
+.Vance:
 	farwritetext UnknownText_0x1b7161
 	keeptextopen
 	end
 
-UnknownScript_0xbe5c4:
+.Wilton:
 	farwritetext UnknownText_0x1b72d0
 	keeptextopen
 	end
 
-UnknownScript_0xbe5ca:
+.Parry:
 	farwritetext UnknownText_0x1b74c8
 	keeptextopen
 	end
@@ -3080,51 +3080,51 @@
 
 UnknownScript_0xbe5d0:
 	checkcode VAR_CALLERID
-	if_equal PHONE_POKEFAN_BEVERLY,       UnknownScript_0xbe5f2
-	if_equal PHONE_COOLTRAINERF_BETH,     UnknownScript_0xbe5f8
-	if_equal PHONE_COOLTRAINERF_REENA,    UnknownScript_0xbe5fe
-	if_equal PHONE_PICNICKER_LIZ,         UnknownScript_0xbe604
-	if_equal PHONE_PICNICKER_GINA,        UnknownScript_0xbe60a
-	if_equal PHONE_LASS_DANA,             UnknownScript_0xbe610
-	if_equal PHONE_PICNICKER_TIFFANY,     UnknownScript_0xbe616
-	if_equal PHONE_PICNICKER_ERIN,        UnknownScript_0xbe61c
+	if_equal PHONE_POKEFAN_BEVERLY, .Beverly
+	if_equal PHONE_COOLTRAINERF_BETH, .Beth
+	if_equal PHONE_COOLTRAINERF_REENA, .Reena
+	if_equal PHONE_PICNICKER_LIZ, .Liz
+	if_equal PHONE_PICNICKER_GINA, .Gina
+	if_equal PHONE_LASS_DANA, .Dana
+	if_equal PHONE_PICNICKER_TIFFANY, .Tiffany
+	if_equal PHONE_PICNICKER_ERIN, .Erin
 
-UnknownScript_0xbe5f2:
+.Beverly:
 	farwritetext UnknownText_0x1b502b
 	keeptextopen
 	end
 
-UnknownScript_0xbe5f8:
+.Beth:
 	farwritetext UnknownText_0x1b5510
 	keeptextopen
 	end
 
-UnknownScript_0xbe5fe:
+.Reena:
 	farwritetext UnknownText_0x1b5819
 	keeptextopen
 	end
 
-UnknownScript_0xbe604:
+.Liz:
 	farwritetext UnknownText_0x1b5ebe
 	keeptextopen
 	end
 
-UnknownScript_0xbe60a:
+.Gina:
 	farwritetext UnknownText_0x1b6352
 	keeptextopen
 	end
 
-UnknownScript_0xbe610:
+.Dana:
 	farwritetext UnknownText_0x1b6795
 	keeptextopen
 	end
 
-UnknownScript_0xbe616:
+.Tiffany:
 	farwritetext UnknownText_0x1b6f60
 	keeptextopen
 	end
 
-UnknownScript_0xbe61c:
+.Erin:
 	farwritetext UnknownText_0x1b75e5
 	keeptextopen
 	end
--- /dev/null
+++ b/engine/pokecenter_pc.asm
@@ -1,0 +1,705 @@
+PokemonCenterPC: ; 1559a
+	call PC_CheckPartyForPokemon
+	ret c
+	call PC_PlayBootSound
+	ld hl, UnknownText_0x15a27
+	call PC_DisplayText
+	ld hl, UnknownText_0x15a2c
+	call PC_DisplayTextWaitMenu
+	ld hl, .TopMenu
+	call LoadMenuDataHeader
+.loop
+	xor a
+	ld [hBGMapMode], a
+	call .ChooseWhichPCListToUse
+	ld [wcf76], a
+	call DoNthMenu
+	jr c, .shutdown
+	ld a, [MenuSelection]
+	ld hl, .JumpTable
+	call MenuJumptable
+	jr nc, .loop
+
+.shutdown
+	call PC_PlayShutdownSound
+	call ExitMenu
+	call WriteBackup
+	ret
+; 155d6
+
+.TopMenu: ; 0x155d6
+	db $48 ; flags
+	db 00, 00 ; start coords
+	db 12, 15 ; end coords
+	dw .MenuData2
+	db 1 ; default option
+; 0x155de
+
+.MenuData2: ; 0x155de
+	db $a0 ; flags
+	db 0 ; items
+	dw .WhichPC
+	dw PlaceNthMenuStrings
+	dw .JumpTable
+; 0x155e6
+
+.JumpTable: ; 155e6
+	dw PlayersPC, .String_PlayersPC
+	dw BillsPC, .String_BillsPC
+	dw OaksPC, .String_OaksPC
+	dw HallOfFamePC, .String_HallOfFame
+	dw TurnOffPC, .String_TurnOff
+; 155fa
+
+.String_PlayersPC:	db "<PLAYER>'s PC@"
+.String_BillsPC:	db "BILL's PC@"
+.String_OaksPC:	    db "PROF.OAK's PC@"
+.String_HallOfFame:	db "HALL OF FAME@"
+.String_TurnOff:	db "TURN OFF@"
+; 1562c
+
+.WhichPC: ; 1562c
+	; before pokedex
+	db  3 ; items
+	db  1, 0, 4 ; bill's, player's, turn off
+	db -1
+
+	; before Hall Of Fame
+	db  4 ; items
+	db  1, 0, 2, 4 ; bill's, player's, oak's, turn off
+	db -1
+
+	; postgame
+	db  5 ; items
+	db  1, 0, 2, 3, 4 ; bill's, player's, oak's, hall of fame, turn off
+	db -1
+; 1563e
+
+.ChooseWhichPCListToUse: ; 1563e
+	call CheckReceivedDex
+	jr nz, .got_dex
+	ld a, $0
+	ret
+
+.got_dex
+	ld a, [wHallOfFameCount]
+	and a
+	ld a, $1
+	ret z
+	ld a, $2
+	ret
+; 15650
+
+PC_CheckPartyForPokemon: ; 15650
+	ld a, [PartyCount]
+	and a
+	ret nz
+	ld de, SFX_CHOOSE_PC_OPTION
+	call PlaySFX
+	ld hl, UnknownText_0x15663
+	call PC_DisplayText
+	scf
+	ret
+; 15663
+
+UnknownText_0x15663: ; 0x15663
+	; Bzzzzt! You must have a #MON to use this!
+	text_jump UnknownText_0x1c1328
+	db "@"
+; 0x15668
+
+BillsPC: ; 15668
+	call PC_PlayChoosePCSound
+	ld hl, UnknownText_0x15a31
+	call PC_DisplayText
+	callba _BillsPC
+	and a
+	ret
+; 15679 (5:5679)
+
+PlayersPC: ; 15679
+	call PC_PlayChoosePCSound
+	ld hl, UnknownText_0x15a36
+	call PC_DisplayText
+	ld b, $0
+	call _PlayersPC
+	and a
+	ret
+; 15689
+
+OaksPC: ; 15689
+	call PC_PlayChoosePCSound
+	ld hl, UnknownText_0x15a3b
+	call PC_DisplayText
+	callba ProfOaksPC
+	and a
+	ret
+; 1569a
+
+HallOfFamePC: ; 1569a
+	call PC_PlayChoosePCSound
+	call FadeToMenu
+	callba _HallOfFamePC
+	call ReturnToCallingMenu
+	and a
+	ret
+; 156ab
+
+TurnOffPC: ; 156ab
+	ld hl, UnknownText_0x15a40
+	call PrintText
+	scf
+	ret
+; 156b3
+
+PC_PlayBootSound: ; 156b3
+	ld de, SFX_BOOT_PC
+	jr PC_WaitPlaySFX
+
+PC_PlayShutdownSound: ; 156b8
+	ld de, SFX_SHUT_DOWN_PC
+	call PC_WaitPlaySFX
+	call WaitSFX
+	ret
+
+PC_PlayChoosePCSound: ; 156c2
+	ld de, SFX_CHOOSE_PC_OPTION
+	jr PC_WaitPlaySFX
+
+Function156c7: ; 156c7
+	ld de, SFX_SWITCH_POKEMON
+	call PC_WaitPlaySFX
+	ld de, SFX_SWITCH_POKEMON
+
+PC_WaitPlaySFX: ; 156d0
+	push de
+	call WaitSFX
+	pop de
+	call PlaySFX
+	ret
+; 156d9
+
+_KrissHousePC: ; 156d9
+	call PC_PlayBootSound
+	ld hl, UnknownText_0x156ff
+	call PC_DisplayText
+	ld b, $1
+	call _PlayersPC
+	and a
+	jr nz, .asm_156f9
+	call OverworldTextModeSwitch
+	call ApplyTilemap
+	call UpdateSprites
+	call PC_PlayShutdownSound
+	ld c, $0
+	ret
+
+.asm_156f9
+	call ClearBGPalettes
+	ld c, $1
+	ret
+; 156ff
+
+UnknownText_0x156ff: ; 0x156ff
+	; turned on the PC.
+	text_jump UnknownText_0x1c1353
+	db "@"
+; 0x15704
+
+_PlayersPC: ; 15704
+	ld a, b
+	ld [wcf76], a
+	ld hl, UnknownText_0x157cc
+	call PC_DisplayTextWaitMenu
+	call Function15715
+	call ExitMenu
+	ret
+; 15715
+
+Function15715: ; 15715
+	xor a
+	ld [wd0d7], a
+	ld [wd0dd], a
+	ld hl, KrissPCMenuData
+	call LoadMenuDataHeader
+.asm_15722
+	call UpdateTimePals
+	call DoNthMenu
+	jr c, .asm_15731
+	call MenuJumptable
+	jr nc, .asm_15722
+	jr .asm_15732
+
+.asm_15731
+	xor a
+
+.asm_15732
+	call ExitMenu
+	ret
+; 15736
+
+KrissPCMenuData: ; 0x15736
+	db %01000000
+	db  0,  0 ; top left corner coords (y, x)
+	db 12, 15 ; bottom right corner coords (y, x)
+	dw .KrissPCMenuData2
+	db 1 ; default selected option
+
+.KrissPCMenuData2
+	db %10100000 ; bit7
+	db 0 ; # items?
+	dw .KrissPCMenuList1
+	dw PlaceNthMenuStrings
+	dw .KrissPCMenuPointers
+
+.KrissPCMenuPointers ; 0x15746
+	dw KrisWithdrawItemMenu, .WithdrawItem
+	dw KrisDepositItemMenu,  .DepositItem
+	dw KrisTossItemMenu,     .TossItem
+	dw KrisMailBoxMenu,      .MailBox
+	dw KrisDecorationMenu,   .Decoration
+	dw KrisLogOffMenu,       .LogOff
+	dw KrisLogOffMenu,       .TurnOff
+
+.WithdrawItem db "WITHDRAW ITEM@"
+.DepositItem  db "DEPOSIT ITEM@"
+.TossItem     db "TOSS ITEM@"
+.MailBox      db "MAIL BOX@"
+.Decoration   db "DECORATION@"
+.TurnOff      db "TURN OFF@"
+.LogOff       db "LOG OFF@"
+
+WITHDRAW_ITEM EQU 0
+DEPOSIT_ITEM  EQU 1
+TOSS_ITEM     EQU 2
+MAIL_BOX      EQU 3
+DECORATION    EQU 4
+TURN_OFF      EQU 5
+LOG_OFF       EQU 6
+
+.KrissPCMenuList1
+	db 5
+	db WITHDRAW_ITEM
+	db DEPOSIT_ITEM
+	db TOSS_ITEM
+	db MAIL_BOX
+	db TURN_OFF
+	db -1
+
+.KrissPCMenuList2
+	db 6
+	db WITHDRAW_ITEM
+	db DEPOSIT_ITEM
+	db TOSS_ITEM
+	db MAIL_BOX
+	db DECORATION
+	db LOG_OFF
+	db -1
+
+PC_DisplayTextWaitMenu: ; 157bb
+	ld a, [Options]
+	push af
+	set NO_TEXT_SCROLL, a
+	ld [Options], a
+	call MenuTextBox
+	pop af
+	ld [Options], a
+	ret
+; 157cc
+
+UnknownText_0x157cc: ; 0x157cc
+	; What do you want to do?
+	text_jump UnknownText_0x1c1368
+	db "@"
+; 0x157d1
+
+KrisWithdrawItemMenu: ; 0x157d1
+	call LoadStandardMenuDataHeader
+	callba ClearPCItemScreen
+.asm_157da
+	call Function15985
+	jr c, .asm_157e4
+	call Function157e9
+	jr .asm_157da
+
+.asm_157e4
+	call ReturnToCallingMenu
+	xor a
+	ret
+; 0x157e9
+
+Function157e9: ; 0x157e9
+	; check if the item has a quantity
+	callba _CheckTossableItem
+	ld a, [wItemAttributeParamBuffer]
+	and a
+	jr z, .askquantity
+
+	; items without quantity are always ×1
+	ld a, 1
+	ld [wItemQuantityChangeBuffer], a
+	jr .withdraw
+
+.askquantity
+	ld hl, .HowManyText
+	call MenuTextBox
+	callba Function24fbf
+	call ExitMenu
+	call ExitMenu
+	jr c, .done
+
+.withdraw
+	ld a, [wItemQuantityChangeBuffer]
+	ld [Buffer1], a ; quantity
+	ld a, [wd107]
+	ld [Buffer2], a
+	ld hl, NumItems
+	call ReceiveItem
+	jr nc, .PackFull
+	ld a, [Buffer1]
+	ld [wItemQuantityChangeBuffer], a
+	ld a, [Buffer2]
+	ld [wd107], a
+	ld hl, PCItems
+	call TossItem
+	predef PartyMonItemName
+	ld hl, .WithdrewText
+	call MenuTextBox
+	xor a
+	ld [hBGMapMode], a
+	call ExitMenu
+	ret
+
+.PackFull
+	ld hl, .NoRoomText
+	call MenuTextBoxBackup
+	ret
+
+.done
+	ret
+; 0x15850
+
+.HowManyText ; 0x15850
+	text_jump _KrissPCHowManyWithdrawText
+	db "@"
+
+.WithdrewText ; 0x15855
+	text_jump _KrissPCWithdrewItemsText
+	db "@"
+
+.NoRoomText ; 0x1585a
+	text_jump _KrissPCNoRoomWithdrawText
+	db "@"
+
+
+KrisTossItemMenu: ; 0x1585f
+	call LoadStandardMenuDataHeader
+	callba ClearPCItemScreen
+.asm_15868
+	call Function15985
+	jr c, .asm_15878
+	ld de, PCItems
+	callba Function129f4
+	jr .asm_15868
+
+.asm_15878
+	call ReturnToCallingMenu
+	xor a
+	ret
+; 0x1587d
+
+
+KrisDecorationMenu: ; 0x1587d
+	callba _KrisDecorationMenu
+	ld a, c
+	and a
+	ret z
+	scf
+	ret
+; 0x15888
+
+
+KrisLogOffMenu: ; 0x15888
+	xor a
+	scf
+	ret
+; 0x1588b
+
+
+KrisDepositItemMenu: ; 0x1588b
+	call Function158b8
+	jr c, .asm_158b6
+	call DisableSpriteUpdates
+	call LoadStandardMenuDataHeader
+	callba Function106a5
+.asm_1589c
+	callba Function106be
+	ld a, [wcf66]
+	and a
+	jr z, .asm_158b3
+	call Function158cc
+	callba CheckRegisteredItem
+	jr .asm_1589c
+
+.asm_158b3
+	call ReturnToCallingMenu
+
+.asm_158b6
+	xor a
+	ret
+; 0x158b8
+
+Function158b8: ; 0x158b8
+	callba HasNoItems
+	ret nc
+	ld hl, UnknownText_0x158c7
+	call MenuTextBoxBackup
+	scf
+	ret
+; 0x158c7
+
+UnknownText_0x158c7: ; 0x158c7
+	; No items here!
+	text_jump UnknownText_0x1c13df
+	db "@"
+; 0x158cc
+
+
+Function158cc: ; 0x158cc
+	ld a, [wSpriteUpdatesEnabled]
+	push af
+	ld a, $0
+	ld [wSpriteUpdatesEnabled], a
+	callba CheckItemMenu
+	ld a, [wItemAttributeParamBuffer]
+	ld hl, .jumptable
+	rst JumpTable
+	pop af
+	ld [wSpriteUpdatesEnabled], a
+	ret
+; 0x158e7
+
+.jumptable: ; 0x158e7
+	dw .tossable
+	dw .no_toss
+	dw .no_toss
+	dw .no_toss
+	dw .tossable
+	dw .tossable
+	dw .tossable
+
+.no_toss:
+	ret
+
+.tossable:
+	ld a, [Buffer1]
+	push af
+	ld a, [Buffer2]
+	push af
+	call Function1590a
+	pop af
+	ld [Buffer2], a
+	pop af
+	ld [Buffer1], a
+	ret
+; 0x1590a
+
+Function1590a: ; 0x1590a
+	callba _CheckTossableItem
+	ld a, [wItemAttributeParamBuffer]
+	and a
+	jr z, .asm_1591d
+	ld a, $1
+	ld [wItemQuantityChangeBuffer], a
+	jr .asm_15933
+
+.asm_1591d
+	ld hl, .HowManyText
+	call MenuTextBox
+	callba Function24fbf
+	push af
+	call ExitMenu
+	call ExitMenu
+	pop af
+	jr c, .asm_1596c
+
+.asm_15933
+	ld a, [wItemQuantityChangeBuffer]
+	ld [Buffer1], a
+	ld a, [wd107]
+	ld [Buffer2], a
+	ld hl, PCItems
+	call ReceiveItem
+	jr nc, .asm_15965
+	ld a, [Buffer1]
+	ld [wItemQuantityChangeBuffer], a
+	ld a, [Buffer2]
+	ld [wd107], a
+	ld hl, NumItems
+	call TossItem
+	predef PartyMonItemName
+	ld hl, .DepositText
+	call PrintText
+	ret
+
+.asm_15965
+	ld hl, .NoRoomText
+	call PrintText
+	ret
+
+.asm_1596c
+	and a
+	ret
+; 0x1596e
+
+
+.HowManyText ; 0x1596e
+	text_jump _KrissPCHowManyDepositText
+	db "@"
+
+.DepositText ; 0x15973
+	text_jump _KrissPCDepositItemsText
+	db "@"
+
+.NoRoomText ; 0x15978
+	text_jump _KrissPCNoRoomDepositText
+	db "@"
+
+
+KrisMailBoxMenu: ; 0x1597d
+	callba _KrisMailBoxMenu
+	xor a
+	ret
+; 0x15985
+
+
+Function15985: ; 0x15985
+	xor a
+	ld [wd0e3], a
+.asm_15989
+	ld a, [wSpriteUpdatesEnabled]
+	push af
+	ld a, $0
+	ld [wSpriteUpdatesEnabled], a
+	ld hl, MenuData15a08
+	call CopyMenuDataHeader
+	hlcoord 0, 0
+	ld b, $a
+	ld c, $12
+	call TextBox
+	ld a, [wd0d7]
+	ld [wMenuCursorBuffer], a
+	ld a, [wd0dd]
+	ld [wMenuScrollPosition], a
+	call HandleScrollingMenu
+	ld a, [wMenuScrollPosition]
+	ld [wd0dd], a
+	ld a, [MenuSelection2]
+	ld [wd0d7], a
+	pop af
+	ld [wSpriteUpdatesEnabled], a
+	ld a, [wd0e3]
+	and a
+	jr nz, .asm_159d8
+	ld a, [wcf73]
+	cp $2
+	jr z, .asm_15a06
+	cp $1
+	jr z, .asm_159fb
+	cp $4
+	jr z, .asm_159f2
+	jr .asm_159f8
+
+.asm_159d8
+	ld a, [wcf73]
+	cp $2
+	jr z, .asm_159e9
+	cp $1
+	jr z, .asm_159ef
+	cp $4
+	jr z, .asm_159ef
+	jr .asm_159f8
+
+.asm_159e9
+	xor a
+	ld [wd0e3], a
+	jr .asm_159f8
+
+.asm_159ef
+	call Function156c7
+
+.asm_159f2
+	callba Function2490c
+
+.asm_159f8
+	jp .asm_15989
+
+.asm_159fb
+	callba Function24706
+	call Function1bee
+	and a
+	ret
+
+.asm_15a06
+	scf
+	ret
+; 0x15a08
+
+MenuData15a08: ; 0x15a08
+	db %01000000
+	db  1,  4 ; start coords
+	db 10, 18 ; end coords
+	dw .MenuData2
+	db 1 ; default option
+
+.MenuData2
+	db %10110000
+	db 4, 8 ; rows/cols?
+	db 2 ; horizontal spacing?
+	dbw 0, PCItems
+	dba PlaceMenuItemName
+	dba PlaceMenuItemQuantity
+	dba UpdateItemDescription
+
+PC_DisplayText: ; 15a20
+	call MenuTextBox
+	call ExitMenu
+	ret
+; 15a27
+
+
+UnknownText_0x15a27: ; 0x15a27
+	; turned on the PC.
+	text_jump UnknownText_0x1c144d
+	db "@"
+; 0x15a2c
+
+UnknownText_0x15a2c: ; 0x15a2c
+	; Access whose PC?
+	text_jump UnknownText_0x1c1462
+	db "@"
+; 0x15a31
+
+UnknownText_0x15a31: ; 0x15a31
+	; BILL's PC accessed. #MON Storage System opened.
+	text_jump UnknownText_0x1c1474
+	db "@"
+; 0x15a36
+
+UnknownText_0x15a36: ; 0x15a36
+	; Accessed own PC. Item Storage System opened.
+	text_jump UnknownText_0x1c14a4
+	db "@"
+; 0x15a3b
+
+UnknownText_0x15a3b: ; 0x15a3b
+	; PROF.OAK's PC accessed. #DEX Rating System opened.
+	text_jump UnknownText_0x1c14d2
+	db "@"
+; 0x15a40
+
+UnknownText_0x15a40: ; 0x15a40
+	; … Link closed…
+	text_jump UnknownText_0x1c1505
+	db "@"
+; 0x15a45
--- a/engine/pokedex.asm
+++ b/engine/pokedex.asm
@@ -65,12 +65,8 @@
 	call ClearTileMap
 	call Function414b7
 
-	ld hl, wc6d0
-IF DEF(CRYSTAL11)
-	ld bc, $0116
-ELSE
-	ld bc, $0115
-ENDC
+	ld hl, wPokedexDataStart
+	ld bc, wPokedexDataEnd - wPokedexDataStart
 	xor a
 	call ByteFill
 
@@ -480,7 +476,7 @@
 	push af
 	ld a, [wJumptableIndex]
 	push af
-	callba Function8442c
+	callba PrintDexEntry
 	pop af
 	ld [wJumptableIndex], a
 	pop af
@@ -2367,7 +2363,7 @@
 	push af
 	ld a, $5
 	ld [rSVBK], a
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	ld bc, $40
 	xor a
 	call ByteFill
--- /dev/null
+++ b/engine/pokegear.asm
@@ -1,0 +1,2990 @@
+PokeGear: ; 90b8d (24:4b8d)
+	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 Function90bea
+	call DelayFrame
+
+.loop
+	call UpdateTime
+	call JoyTextDelay
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .done
+	call Function90f04
+	callba Function8cf69
+	call DelayFrame
+	jr .loop
+
+.done
+	ld de, SFX_READ_TEXT_2
+	call PlaySFX
+	call WaitSFX
+	pop af
+	ld [VramState], a
+	pop af
+	ld [hInMenu], a
+	pop af
+	ld [Options], a
+	call ClearBGPalettes
+	xor a
+	ld [hBGMapAddress], a
+	ld a, VBGMap0 / $100
+	ld [hBGMapAddress + 1], a
+	ld a, $90
+	ld [hWY], a
+	call Function91492
+	ret
+
+Function90bea: ; 90bea (24:4bea)
+	call ClearBGPalettes
+	call ClearTileMap
+	call ClearSprites
+	call DisableLCD
+	xor a
+	ld [hSCY], a
+	ld [hSCX], a
+	ld a, $7
+	ld [hWX], a
+	call Function90c4e
+	callba Function8cf53
+	call Function90d32
+	ld a, 8
+	call SkipMusic
+	ld a, $e3
+	ld [rLCDC], a
+	call Function90d70
+	xor a
+	ld [wJumptableIndex], a
+	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 b, SCGB_02
+	call GetSGBLayout
+	call SetPalettes
+	ld a, [hCGB]
+	and a
+	ret z
+	ld a, $e4
+	call Functioncf8
+	ret
+
+Function90c4e: ; 90c4e
+	call ClearVBank1
+	ld hl, TownMapGFX
+	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]
+	ld c, a
+	call GetWorldMapLocation
+	cp FAST_SHIP
+	jr z, .ssaqua
+
+	callba GetPlayerIcon
+
+	push de
+	ld h, d
+	ld l, e
+	ld a, b
+
+	push af
+	ld de, VTiles0 tile $10
+	ld bc, 4 tiles
+	call FarCopyBytes
+	pop af
+
+	pop hl
+
+	ld de, $c0
+	add hl, de
+	ld de, VTiles0 tile $14
+	ld bc, 4 tiles
+	call FarCopyBytes
+	ret
+
+.ssaqua
+	ld hl, FastShipGFX
+	ld de, VTiles0 tile $10
+	ld bc, 8 tiles
+	call CopyBytes
+	ret
+; 90cb2
+
+FastShipGFX: ; 90cb2
+INCBIN "gfx/misc/fast_ship.2bpp"
+; 90d32
+
+Function90d32: ; 90d32 (24:4d32)
+	depixel 4, 2, 4, 0
+	ld a, SPRITE_ANIM_INDEX_0D
+	call _InitSpriteAnimStruct
+	ld hl, $3
+	add hl, bc
+	ld [hl], $0
+	ret
+
+Function90d41: ; 90d41 (24:4d41)
+	ld hl, wcf64
+	ld e, [hl]
+	ld d, 0
+	ld hl, Unknown_90d52
+	add hl, de
+	ld a, [hl]
+	ld hl, $6
+	add hl, bc
+	ld [hl], a
+	ret
+; 90d52 (24:4d52)
+
+Unknown_90d52: ; 90d52
+	db $00, $10, $20, $30
+; 90d56
+
+Function90d56: ; 90d56
+	ld a, [MapGroup]
+	ld b, a
+	ld a, [MapNumber]
+	ld c, a
+	call GetWorldMapLocation
+	cp SPECIAL_MAP
+	ret nz
+	ld a, [BackupMapGroup]
+	ld b, a
+	ld a, [BackupMapNumber]
+	ld c, a
+	call GetWorldMapLocation
+	ret
+; 90d70
+
+
+Function90d70: ; 90d70 (24:4d70)
+	ld a, [MapGroup]
+	ld b, a
+	ld a, [MapNumber]
+	ld c, a
+	call GetWorldMapLocation
+
+	cp FAST_SHIP
+	jr z, .asm_90d95
+
+	cp SPECIAL_MAP
+	jr nz, .asm_90d8e
+
+	ld a, [BackupMapGroup]
+	ld b, a
+	ld a, [BackupMapNumber]
+	ld c, a
+	call GetWorldMapLocation
+
+.asm_90d8e
+	ld [wc6d8], a
+	ld [wc6d7], a
+	ret
+
+.asm_90d95
+	ld [wc6d8], a
+	ld a, NEW_BARK_TOWN
+	ld [wc6d7], a
+	ret
+
+Function90d9e: ; 90d9e (24:4d9e)
+	ld a, $0
+	ld [wJumptableIndex], a
+	xor a
+	ld [wcf64], a
+	ret
+
+Function90da8: ; 90da8 (24:4da8)
+	xor a
+	ld [hBGMapMode], a
+	hlcoord 0, 0
+	ld bc, TileMapEnd - TileMap
+	ld a, $4f
+	call ByteFill
+	ld a, [wcf64]
+	and $3
+	add a
+	ld e, a
+	ld d, 0
+	ld hl, Jumptable_90e12
+	add hl, de
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld de, .asm_90dcb
+	push de
+	jp [hl]
+
+.asm_90dcb
+	call Function90eb0
+	callba TownMapPals
+	ld a, [wcf65]
+	and a
+	jr nz, .asm_90de8
+
+	xor a
+	ld [hBGMapAddress], a
+	ld a, VBGMap0 / $100
+	ld [hBGMapAddress + 1], a
+	call Function90e00
+	ld a, $90
+	jr .asm_90df3
+
+.asm_90de8
+	xor a
+	ld [hBGMapAddress], a
+	ld a, VBGMap1 / $100
+	ld [hBGMapAddress + 1], a
+	call Function90e00
+	xor a
+
+.asm_90df3
+	ld [hWY], a
+	ld a, [wcf65]
+	and 1
+	xor 1
+	ld [wcf65], a
+	ret
+
+Function90e00: ; 90e00 (24:4e00)
+	ld a, [hCGB]
+	and a
+	jr z, .asm_90e0e
+	ld a, $2
+	ld [hBGMapMode], a
+	ld c, 3
+	call DelayFrames
+.asm_90e0e
+	call WaitBGMap
+	ret
+; 90e12 (24:4e12)
+
+Jumptable_90e12: ; 90e12
+	dw Function90e1a
+	dw Function90e3f
+	dw Function90e82
+	dw Function90e72
+; 90e1a
+
+Function90e1a: ; 90e1a
+	ld de, ClockTilemapRLE
+	call Function914bb
+	hlcoord 12, 1
+	ld de, .switch
+	call PlaceString
+	hlcoord 0, 12
+	lb bc, 4, 18
+	call TextBox
+	call Function90f86
+	ret
+; 90e36 (24:4e36)
+
+.switch
+	db " SWITCH▶@"
+; 90e3f
+
+Function90e3f: ; 90e3f
+
+	ld a, [wc6d8]
+	cp FAST_SHIP
+	jr z, .johto
+	cp KANTO_LANDMARK
+	jr nc, .kanto
+.johto
+	ld e, 0
+	jr .ok
+.kanto
+	ld e, 1
+.ok
+	callba PokegearMap
+	ld a, $7
+	ld bc, $12
+	hlcoord 1, 2
+	call ByteFill
+	hlcoord 0, 2
+	ld [hl], $6
+	hlcoord 19, 2
+	ld [hl], $17
+	ld a, [wc6d7]
+	call Function910b4
+	ret
+; 90e72
+
+Function90e72: ; 90e72
+	ld de, RadioTilemapRLE
+	call Function914bb
+	hlcoord 0, 12
+	lb bc, 4, 18
+	call TextBox
+	ret
+; 90e82
+
+Function90e82: ; 90e82
+	ld de, PhoneTilemapRLE
+	call Function914bb
+	hlcoord 0, 12
+	lb bc, 4, 18
+	call TextBox
+	call Function90e98
+	call Function912d8
+	ret
+; 90e98
+
+Function90e98: ; 90e98 (24:4e98)
+	hlcoord 17, 1
+	ld a, $3c
+	ld [hli], a
+	inc a
+	ld [hl], a
+	hlcoord 17, 2
+	inc a
+	ld [hli], a
+	call GetMapHeaderPhoneServiceNybble
+	and a
+	ret nz
+	hlcoord 18, 2
+	ld [hl], $3f
+	ret
+
+Function90eb0: ; 90eb0 (24:4eb0)
+	hlcoord 0, 0
+	ld bc, $8
+	ld a, $4f
+	call ByteFill
+	hlcoord 0, 1
+	ld bc, $8
+	ld a, $4f
+	call ByteFill
+	ld de, wPokegearFlags
+	ld a, [de]
+	bit 0, a
+	call nz, Function90ee4
+	ld a, [de]
+	bit 2, a
+	call nz, Function90eeb
+	ld a, [de]
+	bit 1, a
+	call nz, Function90ef2
+	hlcoord 0, 0
+	ld a, $46
+	call Function90ef7
+	ret
+
+Function90ee4: ; 90ee4 (24:4ee4)
+	hlcoord 2, 0
+	ld a, $40
+	jr Function90ef7
+
+Function90eeb: ; 90eeb (24:4eeb)
+	hlcoord 4, 0
+	ld a, $44
+	jr Function90ef7
+
+Function90ef2: ; 90ef2 (24:4ef2)
+	hlcoord 6, 0
+	ld a, $42
+
+Function90ef7: ; 90ef7 (24:4ef7)
+	ld [hli], a
+	inc a
+	ld [hld], a
+	ld bc, $14
+	add hl, bc
+	add $f
+	ld [hli], a
+	inc a
+	ld [hld], a
+	ret
+
+Function90f04: ; 90f04 (24:4f04)
+	ld a, [wJumptableIndex]
+	ld e, a
+	ld d, 0
+	ld hl, Jumptable_90f13
+rept 2
+	add hl, de
+endr
+	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
+
+
+Function90f2d: ; 90f2d (24:4f2d)
+	call Function90da8
+	ld hl, UnknownText_0x914d3
+	call PrintText
+	ld hl, wJumptableIndex
+	inc [hl]
+	call Function91492
+	ret
+
+Function90f3e: ; 90f3e (24:4f3e)
+	call Function90f7b
+	ld hl, hJoyLast
+
+	ld a, [hl]
+	and A_BUTTON + B_BUTTON + START + SELECT
+	jr nz, .asm_90f75
+
+	ld a, [hl]
+	and D_RIGHT
+	ret z
+
+	ld a, [wPokegearFlags]
+	bit 0, a
+	jr z, .asm_90f5a
+	ld c, $2
+	ld b, $1
+	jr .asm_90f71
+.asm_90f5a
+
+	ld a, [wPokegearFlags]
+	bit 2, a
+	jr z, .asm_90f67
+	ld c, $7
+	ld b, $2
+	jr .asm_90f71
+.asm_90f67
+
+	ld a, [wPokegearFlags]
+	bit 1, a
+	ret z
+
+	ld c, $b
+	ld b, $3
+
+.asm_90f71
+	call Function91480
+	ret
+
+.asm_90f75
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+Function90f7b: ; 90f7b (24:4f7b)
+	xor a
+	ld [hBGMapMode], a
+	call Function90f86
+	ld a, $1
+	ld [hBGMapMode], a
+	ret
+
+Function90f86: ; 90f86 (24:4f86)
+	hlcoord 3, 5
+	lb bc, 5, 14
+	call ClearBox
+	ld a, [hHours]
+	ld b, a
+	ld a, [hMinutes]
+	ld c, a
+	decoord 6, 8
+	callba PrintHoursMins
+	ld hl, UnknownText_0x90faf
+	bccoord 6, 6
+	call PlaceWholeStringInBoxAtOnce
+	ret
+; 90fa8 (24:4fa8)
+
+String_90fa8: db "ごぜん@"
+String_90fac: db "ごご@"
+
+UnknownText_0x90faf: ; 0x90faf
+	text_jump UnknownText_0x1c5821
+	db "@"
+; 0x90fb4
+
+Function90fb4: ; 90fb4 (24:4fb4)
+	ld a, [wc6d8]
+	cp FAST_SHIP
+	jr z, .johto
+	cp KANTO_LANDMARK
+	jr nc, .kanto
+.johto
+	ld a, 3
+	jr .done
+
+	ret
+
+.kanto
+	ld a, 5
+.done
+	ld [wJumptableIndex], a
+	call Function91492
+	ret
+
+Function90fcd: ; 90fcd (24:4fcd)
+	call Function90da8
+	ld a, [wc6d8]
+	call Function9106a
+	ld a, [wc6d7]
+	call Function91098
+	ld a, c
+	ld [wc6d5], a
+	ld a, b
+	ld [wc6d6], a
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+
+Function90fe9: ; 90fe9 (24:4fe9)
+	call Function910e8
+	jr Function90ff2
+
+Function90fee: ; 90fee (24:4fee)
+	ld d, $2e
+	ld e, $1
+Function90ff2: ; 90ff2 (24:4ff2)
+	ld hl, hJoyLast
+	ld a, [hl]
+	and B_BUTTON
+	jr nz, .cancel
+	ld a, [hl]
+	and D_RIGHT
+	jr nz, .right
+	ld a, [hl]
+	and D_LEFT
+	jr nz, .left
+	call Function9102f
+	ret
+
+.right
+	ld a, [wPokegearFlags]
+	bit 2, a
+	jr z, .asm_91015
+	ld c, $7
+	ld b, $2
+	jr .done
+
+.asm_91015
+	ld a, [wPokegearFlags]
+	bit 1, a
+	ret z
+	ld c, $b
+	ld b, $3
+	jr .done
+
+.left
+	ld c, $0
+	ld b, $0
+.done
+	call Function91480
+	ret
+.cancel
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+Function9102f: ; 9102f (24:502f)
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, .up
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .down
+	ret
+.up
+	ld hl, wc6d7
+	ld a, [hl]
+	cp d
+	jr c, .asm_91047
+	ld a, e
+	dec a
+	ld [hl], a
+.asm_91047
+	inc [hl]
+	jr .done
+
+.down
+	ld hl, wc6d7
+	ld a, [hl]
+	cp e
+	jr nz, .asm_91054
+	ld a, d
+	inc a
+	ld [hl], a
+.asm_91054
+	dec [hl]
+
+.done
+	ld a, [wc6d7]
+	call Function910b4
+	ld a, [wc6d5]
+	ld c, a
+	ld a, [wc6d6]
+	ld b, a
+	ld a, [wc6d7]
+	call Function910d4
+	ret
+
+Function9106a: ; 9106a
+	push af
+	ld de, 0
+	ld b, SPRITE_ANIM_INDEX_0A
+	ld a, [PlayerGender]
+	bit 0, a
+	jr z, .asm_91079
+	ld b, SPRITE_ANIM_INDEX_1E
+
+.asm_91079
+	ld a, b
+	call _InitSpriteAnimStruct
+	ld hl, $3
+	add hl, bc
+	ld [hl], $10
+	pop af
+	ld e, a
+	push bc
+	callba GetLandmarkCoords
+	pop bc
+	ld hl, $4
+	add hl, bc
+	ld [hl], e
+	ld hl, $5
+	add hl, bc
+	ld [hl], d
+	ret
+; 91098
+
+Function91098: ; 91098
+	push af
+	ld de, 0
+	ld a, SPRITE_ANIM_INDEX_0D
+	call _InitSpriteAnimStruct
+	ld hl, $3
+	add hl, bc
+	ld [hl], $4
+	ld hl, $2
+	add hl, bc
+	ld [hl], $0
+	pop af
+	push bc
+	call Function910d4
+	pop bc
+	ret
+; 910b4
+
+Function910b4: ; 910b4
+	push af
+	hlcoord 8, 0
+	lb bc, 2, 12
+	call ClearBox
+	pop af
+	ld e, a
+	push de
+	callba GetLandmarkName
+	pop de
+	callba Function1de2c5
+	hlcoord 8, 0
+	ld [hl], $34
+	ret
+; 910d4
+
+Function910d4: ; 910d4
+	push bc
+	ld e, a
+	callba GetLandmarkCoords
+	pop bc
+	ld hl, $4
+	add hl, bc
+	ld [hl], e
+	ld hl, $5
+	add hl, bc
+	ld [hl], d
+	ret
+; 910e8
+
+Function910e8: ; 910e8
+	ld a, [StatusFlags]
+	bit 6, a
+	jr z, .asm_910f4
+	ld d, $5e
+	ld e, $2f
+	ret
+
+.asm_910f4
+	ld d, $5e
+	ld e, $58
+	ret
+; 910f9
+
+
+Function910f9: ; 910f9 (24:50f9)
+	call Function90da8
+	depixel 4, 10, 4, 4
+	ld a, SPRITE_ANIM_INDEX_14
+	call _InitSpriteAnimStruct
+	ld hl, $3
+	add hl, bc
+	ld [hl], $8
+	call _UpdateRadioStation
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+
+Function91112: ; 91112 (24:5112)
+	ld hl, hJoyLast
+	ld a, [hl]
+	and B_BUTTON
+	jr nz, .cancel
+	ld a, [hl]
+	and D_LEFT
+	jr nz, .left
+	ld a, [wc6da]
+	ld l, a
+	ld a, [wc6db]
+	ld h, a
+	ld a, [wc6d9]
+	and a
+	ret z
+	rst FarCall
+	ret
+
+.left
+	ld a, [wPokegearFlags]
+	bit 2, a
+	jr z, .asm_9113b
+	ld c, $7
+	ld b, $2
+	jr .asm_9114c
+
+.asm_9113b
+	ld a, [wPokegearFlags]
+	bit 0, a
+	jr z, .asm_91148
+	ld c, $2
+	ld b, $1
+	jr .asm_9114c
+
+.asm_91148
+	ld c, $0
+	ld b, $0
+.asm_9114c
+	call Function91480
+	ret
+
+.cancel
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+Function91156: ; 91156 (24:5156)
+	ld hl, wJumptableIndex
+	inc [hl]
+	xor a
+	ld [wc6d2], a
+	ld [wc6d1], a
+	ld [wc6d3], a
+	call Function90da8
+	call Function91492
+	ld hl, UnknownText_0x914ce
+	call PrintText
+	ret
+
+Function91171: ; 91171 (24:5171)
+	ld hl, hJoyPressed
+	ld a, [hl]
+	and B_BUTTON
+	jr nz, .b
+	ld a, [hl]
+	and A_BUTTON
+	jr nz, .a
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_LEFT
+	jr nz, .left
+	ld a, [hl]
+	and D_RIGHT
+	jr nz, .right
+	call Function9126d
+	ret
+
+.left
+	ld a, [wPokegearFlags]
+	bit 0, a
+	jr z, .asm_9119c
+	ld c, $2
+	ld b, $1
+	jr .asm_911ac
+.asm_9119c
+	ld c, $0
+	ld b, $0
+	jr .asm_911ac
+
+.right
+	ld a, [wPokegearFlags]
+	bit 1, a
+	ret z
+	ld c, $b
+	ld b, $3
+.asm_911ac
+	call Function91480
+	ret
+
+.b
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+.a
+	ld hl, wPhoneList
+	ld a, [wc6d2]
+	ld e, a
+	ld d, 0
+	add hl, de
+	ld a, [wc6d1]
+	ld e, a
+	ld d, 0
+	add hl, de
+	ld a, [hl]
+	and a
+	ret z
+
+	ld [wc6d3], a
+	hlcoord 1, 4
+	ld a, [wc6d1]
+	ld bc, 20 * 2
+	call AddNTimes
+	ld [hl], "▷"
+	call Function91342
+	jr c, .asm_911e5
+
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+
+.asm_911e5
+	ld a, $8
+	ld [wJumptableIndex], a
+	ret
+
+Function911eb: ; 911eb (24:51eb)
+	call GetMapHeaderPhoneServiceNybble
+	and a
+	jr nz, .asm_91234
+	ld hl, Options
+	res NO_TEXT_SCROLL, [hl]
+	xor a
+	ld [hInMenu], a
+	ld de, SFX_CALL
+	call PlaySFX
+	ld hl, UnknownText_0x9124c
+	call PrintText
+	call WaitSFX
+	ld de, SFX_CALL
+	call PlaySFX
+	ld hl, UnknownText_0x9124c
+	call PrintText
+	call WaitSFX
+	ld a, [wc6d3]
+	ld b, a
+	call Function90199
+	ld c, 10
+	call DelayFrames
+	ld hl, Options
+	set NO_TEXT_SCROLL, [hl]
+	ld a, $1
+	ld [hInMenu], a
+	call Function912b7
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+.asm_91234
+	callba Phone_NoSignal
+	ld hl, OutOfServiceAreaText
+	call PrintText
+	ld a, $8
+	ld [wJumptableIndex], a
+	ld hl, UnknownText_0x914ce
+	call PrintText
+	ret
+; 9124c (24:524c)
+
+UnknownText_0x9124c: ; 0x9124c
+	;
+	text_jump UnknownText_0x1c5824
+	db "@"
+; 0x91251
+
+OutOfServiceAreaText: ; 0x91251
+	; You're out of the service area.
+	text_jump UnknownText_0x1c5827
+	db "@"
+; 0x91256
+
+Function91256: ; 91256 (24:5256)
+	ld a, [hJoyPressed]
+	and A_BUTTON | B_BUTTON
+	ret z
+	callba HangUp
+	ld a, $8
+	ld [wJumptableIndex], a
+	ld hl, UnknownText_0x914ce
+	call PrintText
+	ret
+
+Function9126d: ; 9126d (24:526d)
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, .up
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .down
+	ret
+
+.up
+	ld hl, wc6d1
+	ld a, [hl]
+	and a
+	jr z, .asm_91285
+	dec [hl]
+	jr .asm_912a3
+
+.asm_91285
+	ld hl, wc6d2
+	ld a, [hl]
+	and a
+	ret z
+	dec [hl]
+	jr .asm_912ad
+
+.down
+	ld hl, wc6d1
+	ld a, [hl]
+	cp $3
+	jr nc, .asm_91299
+	inc [hl]
+	jr .asm_912a3
+
+.asm_91299
+	ld hl, wc6d2
+	ld a, [hl]
+	cp $6
+	ret nc
+	inc [hl]
+	jr .asm_912ad
+
+.asm_912a3
+	xor a
+	ld [hBGMapMode], a
+	call Function912b7
+	call WaitBGMap
+	ret
+
+.asm_912ad
+	xor a
+	ld [hBGMapMode], a
+	call Function912d8
+	call WaitBGMap
+	ret
+
+Function912b7: ; 912b7 (24:52b7)
+	ld a, " "
+	hlcoord 1, 4
+	ld [hl], a
+	hlcoord 1, 6
+	ld [hl], a
+	hlcoord 1, 8
+	ld [hl], a
+	hlcoord 1, 10
+	ld [hl], a
+	hlcoord 1, 4
+	ld a, [wc6d1]
+	ld bc, $28
+	call AddNTimes
+	ld [hl], "▶"
+	ret
+
+Function912d8: ; 912d8 (24:52d8)
+	hlcoord 1, 3
+	ld b, $9
+	ld a, $7f
+.asm_912df
+	ld c, $12
+.asm_912e1
+	ld [hli], a
+	dec c
+	jr nz, .asm_912e1
+rept 2
+	inc hl
+endr
+	dec b
+	jr nz, .asm_912df
+	ld a, [wc6d2]
+	ld e, a
+	ld d, $0
+	ld hl, wPhoneList
+	add hl, de
+	xor a
+	ld [wc6d0], a
+.asm_912f8
+	ld a, [hli]
+	push hl
+	push af
+	hlcoord 2, 4
+	ld a, [wc6d0]
+	ld bc, $28
+	call AddNTimes
+	ld d, h
+	ld e, l
+	pop af
+	ld b, a
+	call Function90380
+	pop hl
+	ld a, [wc6d0]
+	inc a
+	ld [wc6d0], a
+	cp $4
+	jr c, .asm_912f8
+	call Function912b7
+	ret
+; 9131e (24:531e)
+
+Function9131e: ; 9131e
+	ld hl, wPhoneList
+	ld a, [wc6d2]
+	ld e, a
+	ld d, 0
+	add hl, de
+	ld a, [wc6d1]
+	ld e, a
+	ld d, 0
+	add hl, de
+	ld [hl], 0
+	ld hl, wPhoneList
+	ld c, $a
+.asm_91336
+	ld a, [hli]
+	and a
+	jr nz, .asm_9133e
+	ld a, [hld]
+	ld [hli], a
+	ld [hl], 0
+.asm_9133e
+	dec c
+	jr nz, .asm_91336
+	ret
+; 91342
+
+Function91342: ; 91342 (24:5342)
+	ld hl, wPhoneList
+	ld a, [wc6d2]
+	ld e, a
+	ld d, 0
+	add hl, de
+	ld a, [wc6d1]
+	ld e, a
+	ld d, 0
+	add hl, de
+	ld c, [hl]
+	callba Function9038a
+	ld a, c
+	and a
+	jr z, .asm_91366
+
+	ld hl, Jumptable_91455
+	ld de, Unknown_9143f
+	jr .asm_9136c
+
+.asm_91366
+	ld hl, Jumptable_9146a
+	ld de, Unknown_9145b
+
+.asm_9136c
+	xor a
+	ld [hBGMapMode], a
+	push hl
+	push de
+	ld a, [de]
+	ld l, a
+	inc de
+	ld a, [de]
+	ld h, a
+	inc de
+	push hl
+	ld bc, hBGMapAddress + 1
+	add hl, bc
+	ld a, [de]
+	inc de
+	sla a
+	ld b, a
+	ld c, 8
+	push de
+	call TextBox
+	pop de
+	pop hl
+	inc hl
+	call PlaceString
+	pop de
+	xor a
+	ld [wc6d4], a
+	call Function9141d
+	call WaitBGMap
+
+.asm_91398
+	push de
+	call JoyTextDelay
+	pop de
+	ld hl, hJoyPressed
+	ld a, [hl]
+	and D_UP
+	jr nz, .asm_913b4
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .asm_913c1
+	ld a, [hl]
+	and A_BUTTON | B_BUTTON
+	jr nz, .asm_913d4
+	call DelayFrame
+	jr .asm_91398
+
+.asm_913b4
+	ld hl, wc6d4
+	ld a, [hl]
+	and a
+	jr z, .asm_91398
+	dec [hl]
+	call Function9141d
+	jr .asm_91398
+
+.asm_913c1
+	ld hl, 2
+	add hl, de
+	ld a, [wc6d4]
+	inc a
+	cp [hl]
+	jr nc, .asm_91398
+	ld [wc6d4], a
+	call Function9141d
+	jr .asm_91398
+
+.asm_913d4
+	xor a
+	ld [hBGMapMode], a
+	call Function912d8
+	ld a, $1
+	ld [hBGMapMode], a
+	pop hl
+	ld a, [hJoyPressed]
+	and B_BUTTON
+	jr nz, Function913f1
+
+	ld a, [wc6d4]
+	ld e, a
+	ld d, 0
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+
+Function913f1: ; 913f1
+	ld hl, UnknownText_0x914ce
+	call PrintText
+	scf
+	ret
+; 913f9 (24:53f9)
+
+Function913f9: ; 913f9
+	ld hl, UnknownText_0x914d8
+	call MenuTextBox
+	call YesNoBox
+	call ExitMenu
+	jr c, .asm_91419
+	call Function9131e
+	xor a
+	ld [hBGMapMode], a
+	call Function912d8
+	ld hl, UnknownText_0x914ce
+	call PrintText
+	call WaitBGMap
+.asm_91419
+	scf
+	ret
+; 9141b
+
+Function9141b: ; 9141b
+	and a
+	ret
+; 9141d
+
+Function9141d: ; 9141d (24:541d)
+	push de
+	ld a, [de]
+	inc de
+	ld l, a
+	ld a, [de]
+	inc de
+	ld h, a
+	ld a, [de]
+	ld c, a
+	push hl
+	ld a, " "
+	ld de, 20 * 2
+.asm_9142c
+	ld [hl], a
+	add hl, de
+	dec c
+	jr nz, .asm_9142c
+	pop hl
+	ld a, [wc6d4]
+	ld bc, 20 * 2
+	call AddNTimes
+	ld [hl], "▶"
+	pop de
+	ret
+; 9143f (24:543f)
+
+Unknown_9143f: ; 9143f
+	dwcoord 10, 6
+	db 3
+	db   "CALL"
+	next "DELETE"
+	next "CANCEL"
+	db   "@"
+; 91455
+
+Jumptable_91455: ; 91455
+	dw Function9141b
+	dw Function913f9
+	dw Function913f1
+; 9145b
+
+Unknown_9145b: ; 9145b
+	dwcoord 10, 8
+	db 2
+	db   "CALL"
+	next "CANCEL"
+	db   "@"
+; 9146a
+
+Jumptable_9146a: ; 9146a
+	dw Function9141b
+	dw Function913f1
+; 9146e
+
+
+Function9146e: ; 9146e
+	ld a, [hHours]
+	cp 12
+	jr c, .asm_9147b
+	sub 12
+	ld [wd265], a
+	scf
+	ret
+
+.asm_9147b
+	ld [wd265], a
+	and a
+	ret
+; 91480
+
+
+Function91480: ; 91480 (24:5480)
+	ld de, SFX_READ_TEXT_2
+	call PlaySFX
+	ld a, c
+	ld [wJumptableIndex], a
+	ld a, b
+	ld [wcf64], a
+	call DeleteSpriteAnimStruct2ToEnd
+	ret
+
+Function91492: ; 91492
+	ld a, [wc6dc]
+	cp $fe
+	jr z, .asm_914a3
+	cp $ff
+	call z, EnterMapMusic
+	xor a
+	ld [wc6dc], a
+	ret
+
+.asm_914a3
+	call RestartMapMusic
+	xor a
+	ld [wc6dc], a
+	ret
+; 914ab
+
+
+DeleteSpriteAnimStruct2ToEnd: ; 914ab (24:54ab)
+	ld hl, SpriteAnim2
+	ld bc, wSpriteAnimationStructsEnd - SpriteAnim2
+	xor a
+	call ByteFill
+	ld a, 2
+	ld [wSpriteAnimCount], a
+	ret
+
+Function914bb: ; 914bb (24:54bb)
+	hlcoord 0, 0
+.asm_914be
+	ld a, [de]
+	cp $ff
+	ret z
+	ld b, a
+	inc de
+	ld a, [de]
+	ld c, a
+	inc de
+	ld a, b
+.asm_914c8
+	ld [hli], a
+	dec c
+	jr nz, .asm_914c8
+	jr .asm_914be
+; 914ce (24:54ce)
+
+UnknownText_0x914ce: ; 0x914ce
+	; Whom do you want to call?
+	text_jump UnknownText_0x1c5847
+	db "@"
+; 0x914d3
+
+UnknownText_0x914d3: ; 0x914d3
+	; Press any button to exit.
+	text_jump UnknownText_0x1c5862
+	db "@"
+; 0x914d8
+
+UnknownText_0x914d8: ; 0x914d8
+	; Delete this stored phone number?
+	text_jump UnknownText_0x1c587d
+	db "@"
+; 0x914dd
+
+
+PokegearSpritesGFX: ; 914dd
+INCBIN "gfx/misc/pokegear_sprites.2bpp.lz"
+; 9150d
+
+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
+
+Function91640: ; 91640 (24:5640)
+	push bc
+	call .TuningKnob
+	pop bc
+	ld a, [wRadioTuningKnob]
+	ld hl, $6
+	add hl, bc
+	ld [hl], a
+	ret
+
+.TuningKnob: ; 9164e (24:564e)
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .down
+	ld a, [hl]
+	and D_UP
+	jr nz, .up
+	ret
+
+.down
+	ld hl, wRadioTuningKnob
+	ld a, [hl]
+	and a
+	ret z
+rept 2
+	dec [hl]
+endr
+	jr .update
+
+.up
+	ld hl, wRadioTuningKnob
+	ld a, [hl]
+	cp 80
+	ret nc
+rept 2
+	inc [hl]
+endr
+
+.update
+
+UpdateRadioStation: ; 9166f (24:566f)
+	ld hl, wRadioTuningKnob
+	ld d, [hl]
+	ld hl, RadioChannels
+.loop
+	ld a, [hli]
+	cp -1
+	jr z, .nostation
+	cp d
+	jr z, .foundstation
+rept 2
+	inc hl
+endr
+	jr .loop
+
+.nostation
+	call NoRadioStation
+	ret
+
+.foundstation
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld de, .returnafterstation
+	push de
+	jp [hl]
+.returnafterstation
+	ld a, [wc6d9]
+	and a
+	ret z
+	xor a
+	ld [hBGMapMode], a
+	hlcoord 2, 9
+	call PlaceString
+	ld a, $1
+	ld [hBGMapMode], a
+	ret
+; 916a1 (24:56a1)
+
+Function916a1: ; 916a1
+	ld [wc6d9], a
+	ld a, [hli]
+	ld [wc6da], a
+	ld a, [hli]
+	ld [wc6db], 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
+	dbw 32, .LuckyChannel
+	dbw 40, .BuenasPassword
+	dbw 52, .RuinsOfAlphRadio
+	dbw 64, .PlacesAndPeople
+	dbw 72, .LetsAllSing
+	dbw 78, .PokeFluteRadio
+	dbw 80, .EvolutionRadio
+	db $ff
+
+.PkmnTalkAndPokedexShow
+; Pokédex Show in the morning
+; Oak's Pokémon Talk in the afternoon and evening
+	call .InJohto
+	jr nc, .NoSignal
+	ld a, [TimeOfDay]
+	and a
+	jp z, LoadStation_PokedexShow
+	jp LoadStation_OaksPokemonTalk
+
+.PokemonMusic
+	call .InJohto
+	jr nc, .NoSignal
+	jp LoadStation_PokemonMusic
+
+.LuckyChannel
+	call .InJohto
+	jr nc, .NoSignal
+	jp LoadStation_LuckyChannel
+
+.BuenasPassword
+	call .InJohto
+	jr nc, .NoSignal
+	jp LoadStation_BuenasPassword
+
+.RuinsOfAlphRadio
+	ld a, [wc6d8]
+	cp RUINS_OF_ALPH
+	jr nz, .NoSignal
+	jp LoadStation_UnownRadio
+
+.PlacesAndPeople
+	call .InJohto
+	jr c, .NoSignal
+	ld a, [wPokegearFlags]
+	bit 3, a
+	jr z, .NoSignal
+	jp LoadStation_PlacesAndPeople
+
+.LetsAllSing
+	call .InJohto
+	jr c, .NoSignal
+	ld a, [wPokegearFlags]
+	bit 3, a
+	jr z, .NoSignal
+	jp LoadStation_LetsAllSing
+
+.PokeFluteRadio
+	call .InJohto
+	jr c, .NoSignal
+	ld a, [wPokegearFlags]
+	bit 3, a
+	jr z, .NoSignal
+	jp LoadStation_PokeFluteRadio
+
+.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, [wc6d8]
+	cp MAHOGANY_TOWN
+	jr z, .ok
+	cp ROUTE_43
+	jr z, .ok
+	cp LAKE_OF_RAGE
+	jr nz, .NoSignal
+.ok
+	jp LoadStation_EvolutionRadio
+
+.NoSignal
+	call NoRadioStation
+	ret
+
+.InJohto
+; if in Johto or on the S.S. Aqua, set carry
+; otherwise clear carry
+	ld a, [wc6d8]
+	cp FAST_SHIP
+	jr z, .johto
+	cp KANTO_LANDMARK
+	jr c, .johto
+.kanto
+	and a
+	ret
+.johto
+	scf
+	ret
+
+
+
+LoadStation_OaksPokemonTalk: ; 91753 (24:5753)
+	xor a ; OAKS_POKEMON_TALK
+	ld [wd002], a
+	ld [wd005], a
+	ld a, BANK(PlayRadioShow)
+	ld hl, PlayRadioShow
+	call Radio_BackUpFarCallParams
+	ld de, OaksPkmnTalkName
+	ret
+
+LoadStation_PokedexShow: ; 91766 (24:5766)
+	ld a, POKEDEX_SHOW
+	ld [wd002], a
+	xor a
+	ld [wd005], a
+	ld a, BANK(PlayRadioShow)
+	ld hl, PlayRadioShow
+	call Radio_BackUpFarCallParams
+	ld de, PokedexShowName
+	ret
+
+LoadStation_PokemonMusic: ; 9177b (24:577b)
+	ld a, POKEMON_MUSIC
+	ld [wd002], a
+	xor a
+	ld [wd005], a
+	ld a, BANK(PlayRadioShow)
+	ld hl, PlayRadioShow
+	call Radio_BackUpFarCallParams
+	ld de, PokemonMusicName
+	ret
+
+LoadStation_LuckyChannel: ; 91790 (24:5790)
+	ld a, LUCKY_CHANNEL
+	ld [wd002], a
+	xor a
+	ld [wd005], a
+	ld a, BANK(PlayRadioShow)
+	ld hl, PlayRadioShow
+	call Radio_BackUpFarCallParams
+	ld de, LuckyChannelName
+	ret
+
+LoadStation_BuenasPassword: ; 917a5 (24:57a5)
+	ld a, BUENAS_PASSWORD
+	ld [wd002], a
+	xor a
+	ld [wd005], a
+	ld a, BANK(PlayRadioShow)
+	ld hl, PlayRadioShow
+	call Radio_BackUpFarCallParams
+	ld de, NotBuenasPasswordName
+	ld a, [StatusFlags2]
+	bit 0, a
+	ret z
+	ld de, BuenasPasswordName
+	ret
+; 917c3 (24:57c3)
+
+BuenasPasswordName:    db "BUENA'S PASSWORD@"
+NotBuenasPasswordName: db "@"
+
+LoadStation_UnownRadio: ; 917d5 (24:57d5)
+	ld a, UNOWN_RADIO
+	ld [wd002], a
+	xor a
+	ld [wd005], a
+	ld a, BANK(PlayRadioShow)
+	ld hl, PlayRadioShow
+	call Radio_BackUpFarCallParams
+	ld de, UnknownStationName
+	ret
+
+LoadStation_PlacesAndPeople: ; 917ea (24:57ea)
+	ld a, PLACES_AND_PEOPLE
+	ld [wd002], a
+	xor a
+	ld [wd005], a
+	ld a, BANK(PlayRadioShow)
+	ld hl, PlayRadioShow
+	call Radio_BackUpFarCallParams
+	ld de, PlacesAndPeopleName
+	ret
+
+LoadStation_LetsAllSing: ; 917ff (24:57ff)
+	ld a, LETS_ALL_SING
+	ld [wd002], a
+	xor a
+	ld [wd005], a
+	ld a, BANK(PlayRadioShow)
+	ld hl, PlayRadioShow
+	call Radio_BackUpFarCallParams
+	ld de, LetsAllSingName
+	ret
+; 91814 (24:5814)
+
+LoadStation_RocketRadio: ; 91814
+	ld a, ROCKET_RADIO
+	ld [wd002], a
+	xor a
+	ld [wd005], a
+	ld a, BANK(PlayRadioShow)
+	ld hl, PlayRadioShow
+	call Radio_BackUpFarCallParams
+	ld de, LetsAllSingName
+	ret
+; 91829
+
+LoadStation_PokeFluteRadio: ; 91829 (24:5829)
+	ld a, POKE_FLUTE_RADIO
+	ld [wd002], a
+	xor a
+	ld [wd005], a
+	ld a, BANK(PlayRadioShow)
+	ld hl, PlayRadioShow
+	call Radio_BackUpFarCallParams
+	ld de, PokeFluteStationName
+	ret
+
+LoadStation_EvolutionRadio: ; 9183e (24:583e)
+	ld a, EVOLUTION_RADIO
+	ld [wd002], a
+	xor a
+	ld [wd005], a
+	ld a, BANK(PlayRadioShow)
+	ld hl, PlayRadioShow
+	call Radio_BackUpFarCallParams
+	ld de, UnknownStationName
+	ret
+; 91853 (24:5853)
+
+LoadStation_Dummy: ; 91853
+	ret
+
+RadioMusicRestartDE: ; 91854 (24:5854)
+	push de
+	ld a, e
+	ld [wc6dc], a
+	ld de, MUSIC_NONE
+	call PlayMusic
+	pop de
+	ld a, e
+	ld [wMapMusic], a
+	call PlayMusic
+	ret
+
+RadioMusicRestartPokemonChannel: ; 91868 (24:5868)
+	push de
+	ld a, $fe
+	ld [wc6dc], a
+	ld de, MUSIC_NONE
+	call PlayMusic
+	pop de
+	ld de, MUSIC_POKEMON_CHANNEL
+	call PlayMusic
+	ret
+
+Radio_BackUpFarCallParams: ; 9187c (24:587c)
+	ld [wc6d9], a
+	ld a, l
+	ld [wc6da], a
+	ld a, h
+	ld [wc6db], a
+	ret
+
+NoRadioStation: ; 91888 (24:5888)
+	call NoRadioMusic
+	call NoRadioName
+	xor a
+	ld [wc6d9], a
+	ld [wc6da], a
+	ld [wc6db], a
+	ld a, $1
+	ld [hBGMapMode], a
+	ret
+
+NoRadioMusic: ; 9189d (24:589d)
+	ld de, MUSIC_NONE
+	call PlayMusic
+	ld a, $ff
+	ld [wc6dc], a
+	ret
+
+NoRadioName: ; 918a9 (24:58a9)
+	xor a
+	ld [hBGMapMode], a
+	hlcoord 1, 8
+	lb bc, 3, 18
+	call ClearBox
+	hlcoord 0, 12
+	ld bc, $412
+	call TextBox
+	ret
+; 918bf
+
+OaksPkmnTalkName:     db "OAK's <PK><MN> Talk@"
+PokedexShowName:      db "#DEX Show@"
+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"
+
+PlayRadio: ; 91a53
+	ld hl, Options
+	ld a, [hl]
+	push af
+	set 4, [hl]
+	call .PlayStation
+	ld c, 100
+	call DelayFrames
+.loop
+	call JoyTextDelay
+	ld a, [hJoyPressed]
+	and A_BUTTON | B_BUTTON
+	jr nz, .stop
+	ld a, [wc6da]
+	ld l, a
+	ld a, [wc6db]
+	ld h, a
+	ld a, [wc6d9]
+	and a
+	jr z, .zero
+	rst FarCall
+
+.zero
+	call DelayFrame
+	jr .loop
+
+.stop
+	pop af
+	ld [Options], a
+	call Function91492
+	ret
+; 91a87
+
+.PlayStation: ; 91a87
+	ld a, -1
+	ld [EnemyTurnsTaken], a
+	ld hl, .StationPointers
+	ld d, $0
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld de, .jump_return
+	push de
+	jp [hl]
+
+.jump_return
+	push de
+	hlcoord 0, 12
+	lb bc, 4, 18
+	call TextBox
+	hlcoord 1, 14
+	ld [hl], $72
+	pop de
+	hlcoord 2, 14
+	call PlaceString
+	ld h, b
+	ld l, c
+	ld [hl], $73
+	call WaitBGMap
+	ret
+; 91ab9
+
+.StationPointers: ; 91ab9
+	dw .OakOrPnP
+	dw LoadStation_OaksPokemonTalk
+	dw LoadStation_PokedexShow
+	dw LoadStation_PokemonMusic
+	dw LoadStation_LuckyChannel
+	dw LoadStation_UnownRadio
+	dw LoadStation_PlacesAndPeople
+	dw LoadStation_LetsAllSing
+	dw LoadStation_RocketRadio
+; 91acb
+
+.OakOrPnP: ; 91acb
+	call IsInJohto
+	and a
+	jr nz, .kanto
+	call UpdateTime
+	ld a, [TimeOfDay]
+	and a
+	jp z, LoadStation_PokedexShow
+	jp LoadStation_OaksPokemonTalk
+
+.kanto
+	jp LoadStation_PlacesAndPeople
+; 91ae1
+
+PokegearMap: ; 91ae1
+	ld a, e
+	and a
+	jr nz, .kanto
+	call Function91ff2
+	call FillJohtoMap
+	ret
+
+.kanto
+	call Function91ff2
+	call FillKantoMap
+	ret
+; 91af3
+
+_FlyMap: ; 91af3
+	call ClearBGPalettes
+	call ClearTileMap
+	call ClearSprites
+	ld hl, hInMenu
+	ld a, [hl]
+	push af
+	ld [hl], $1
+	xor a
+	ld [hBGMapMode], a
+	callba Function8cf53
+	call Function91ff2
+	ld de, GFX_922e1
+	ld hl, VTiles2 tile $30
+	lb bc, BANK(GFX_922e1), 6
+	call Request1bpp
+	call FlyMap
+	call Function91c8f
+	ld b, SCGB_02
+	call GetSGBLayout
+	call SetPalettes
+.loop
+	call JoyTextDelay
+	ld hl, hJoyPressed
+	ld a, [hl]
+	and B_BUTTON
+	jr nz, .pressedB
+	ld a, [hl]
+	and A_BUTTON
+	jr nz, .pressedA
+	call FlyMapScroll
+	call GetMapCursorCoordinates
+	callba Function8cf69
+	call DelayFrame
+	jr .loop
+
+.pressedB
+	ld a, -1
+	jr .exit
+
+.pressedA
+	ld a, [wd002]
+	ld l, a
+	ld h, 0
+	add hl, hl
+	ld de, Flypoints + 1
+	add hl, de
+	ld a, [hl]
+
+.exit
+	ld [wd002], a
+	pop af
+	ld [hInMenu], a
+	call ClearBGPalettes
+	ld a, $90
+	ld [hWY], a
+	xor a
+	ld [hBGMapAddress], a
+	ld a, VBGMap0 / $100
+	ld [hBGMapAddress + 1], a
+	ld a, [wd002]
+	ld e, a
+	ret
+; 91b73
+
+FlyMapScroll: ; 91b73
+	ld a, [StartFlypoint]
+	ld e, a
+	ld a, [EndFlypoint]
+	ld d, a
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, .ScrollNext
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .ScrollPrev
+	ret
+
+.ScrollNext
+	ld hl, wd002
+	ld a, [hl]
+	cp d
+	jr nz, .NotAtEndYet
+	ld a, e
+	dec a
+	ld [hl], a
+
+.NotAtEndYet
+	inc [hl]
+	call CheckIfVisitedFlypoint
+	jr z, .ScrollNext
+	jr .Finally
+
+.ScrollPrev
+	ld hl, wd002
+	ld a, [hl]
+	cp e
+	jr nz, .NotAtStartYet
+	ld a, d
+	inc a
+	ld [hl], a
+
+.NotAtStartYet
+	dec [hl]
+	call CheckIfVisitedFlypoint
+	jr z, .ScrollPrev
+
+.Finally
+	call TownMapBubble
+	call WaitBGMap
+	xor a
+	ld [hBGMapMode], a
+	ret
+; 91bb5
+
+TownMapBubble: ; 91bb5
+; Draw the bubble containing the location text in the town map HUD
+
+; Top-left corner
+	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	
+	ret
+
+.Where
+	db "Where?@"
+
+.Name
+; We need the map location of the default flypoint
+	ld a, [wd002]
+	ld l, a
+	ld h, 0
+	add hl, hl ; two bytes per flypoint
+	ld de, Flypoints
+	add hl, de
+	ld e, [hl]
+
+	callba GetLandmarkName
+
+	hlcoord 2, 1
+	ld de, StringBuffer1
+	call PlaceString
+	ret
+; 91c17
+
+GetMapCursorCoordinates: ; 91c17
+	ld a, [wd002]
+	ld l, a
+	ld h, $0
+	add hl, hl
+	ld de, Flypoints
+	add hl, de
+	ld e, [hl]
+	callba GetLandmarkCoords
+	ld a, [wd003]
+	ld c, a
+	ld a, [wd004]
+	ld b, a
+	ld hl, $4
+	add hl, bc
+	ld [hl], e
+	ld hl, $5
+	add hl, bc
+	ld [hl], d
+	ret
+; 91c3c
+
+CheckIfVisitedFlypoint: ; 91c3c
+; Check if the flypoint loaded in [hl] has been visited yet.
+	push bc
+	push de
+	push hl
+	ld l, [hl]
+	ld h, 0
+	add hl, hl
+	ld de, Flypoints + 1
+	add hl, de
+	ld c, [hl]
+	call HasVisitedSpawn
+	pop hl
+	pop de
+	pop bc
+	and a
+	ret
+; 91c50
+
+HasVisitedSpawn: ; 91c50
+; Check if spawn point c has been visited.
+	ld hl, VisitedSpawns
+	ld b, CHECK_FLAG
+	ld d, 0
+	predef FlagPredef
+	ld a, c
+	ret
+; 91c5e
+
+Flypoints: ; 91c5e
+; landmark, spawn point
+
+	const_def
+
+flypoint: MACRO
+; \1\@FLY   EQUS "FLY_\1"
+; \1\@SPAWN EQUS "SPAWN_\1"
+	; const \1\@FLY
+	; db \2, \1\@SPAWN
+	const FLY_\1
+	db \2, SPAWN_\1
+ENDM
+
+; Johto
+	flypoint NEW_BARK,    NEW_BARK_TOWN
+	flypoint CHERRYGROVE, CHERRYGROVE_CITY
+	flypoint VIOLET,      VIOLET_CITY
+	flypoint AZALEA,      AZALEA_TOWN
+	flypoint GOLDENROD,   GOLDENROD_CITY
+	flypoint ECRUTEAK,    ECRUTEAK_CITY
+	flypoint OLIVINE,     OLIVINE_CITY
+	flypoint CIANWOOD,    CIANWOOD_CITY
+	flypoint MAHOGANY,    MAHOGANY_TOWN
+	flypoint LAKE,        LAKE_OF_RAGE
+	flypoint BLACKTHORN,  BLACKTHORN_CITY
+	flypoint MT_SILVER,   SILVER_CAVE
+
+; Kanto
+KANTO_FLYPOINT EQU const_value
+
+	flypoint PALLET,      PALLET_TOWN
+	flypoint VIRIDIAN,    VIRIDIAN_CITY
+	flypoint PEWTER,      PEWTER_CITY
+	flypoint CERULEAN,    CERULEAN_CITY
+	flypoint VERMILION,   VERMILION_CITY
+	flypoint ROCK_TUNNEL, ROCK_TUNNEL
+	flypoint LAVENDER,    LAVENDER_TOWN
+	flypoint CELADON,     CELADON_CITY
+	flypoint SAFFRON,     SAFFRON_CITY
+	flypoint FUCHSIA,     FUCHSIA_CITY
+	flypoint CINNABAR,    CINNABAR_ISLAND
+	flypoint INDIGO,      INDIGO_PLATEAU
+
+	db -1
+; 91c8f
+
+Function91c8f: ; 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
+
+	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
+	pop af
+	call TownMapPlayerIcon
+	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
+
+	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...
+	ld a, FLY_PALLET
+	ld [StartFlypoint], a
+; ...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
+	pop af
+	call TownMapPlayerIcon
+	ret
+
+.NoKanto
+; If Indigo Plateau hasn't been visited, we use Johto's map instead
+
+; 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
+	ld a, b
+	ld [wd004], a
+	ret
+; 91d11
+
+Function91d11: ; 91d11
+	ld a, [wd002]
+	push af
+	ld a, [wd003]
+	push af
+	ld a, e
+	ld [wd002], a
+	call ClearSprites
+	xor a
+	ld [hBGMapMode], a
+	ld a, $1
+	ld [hInMenu], a
+
+	ld de, GFX_922d1
+	ld hl, VTiles0 tile $7f
+	lb bc, BANK(GFX_922d1), 1
+	call Request2bpp ; actually 1bpp
+
+	call Function91ed0
+
+	ld hl, VTiles0 tile $78
+	ld c, $4
+	call Request2bpp
+
+	call Function91ff2
+	call FillKantoMap
+	call Function91de9
+	call TownMapPals
+	hlbgcoord 0, 0, VBGMap1
+	call TownMapBGUpdate
+	call FillJohtoMap
+	call Function91de9
+	call TownMapPals
+	hlbgcoord 0, 0
+	call TownMapBGUpdate
+	ld b, SCGB_02
+	call GetSGBLayout
+	call SetPalettes
+	xor a
+	ld [hBGMapMode], a
+	xor a
+	call Function91e1e
+.loop
+	call JoyTextDelay
+	ld hl, hJoyPressed
+	ld a, [hl]
+	and A_BUTTON | B_BUTTON
+	jr nz, .a_b
+	ld a, [hJoypadDown]
+	and SELECT
+	jr nz, .select
+	call Function91d9b
+	call Function91dcd
+	jr .next
+
+.select
+	call Function91e5a
+
+.next
+	call DelayFrame
+	jr .loop
+
+.a_b
+	call ClearSprites
+	pop af
+	ld [wd003], a
+	pop af
+	ld [wd002], a
+	ret
+; 91d9b
+
+Function91d9b: ; 91d9b
+	ld a, [hl]
+	and $20
+	jr nz, .asm_91da6
+	ld a, [hl]
+	and $10
+	jr nz, .asm_91db7
+	ret
+
+.asm_91da6
+	ld a, [hWY]
+	cp $90
+	ret z
+	call ClearSprites
+	ld a, $90
+	ld [hWY], a
+	xor a
+	call Function91e1e
+	ret
+
+.asm_91db7
+	ld a, [StatusFlags]
+	bit 6, a ; hall of fame
+	ret z
+	ld a, [hWY]
+	and a
+	ret z
+	call ClearSprites
+	xor a
+	ld [hWY], a
+	ld a, $1
+	call Function91e1e
+	ret
+; 91dcd
+
+Function91dcd: ; 91dcd
+	ld a, [hVBlankCounter]
+	ld e, a
+	and $f
+	ret nz
+	ld a, e
+	and $10
+	jr nz, .asm_91ddc
+	call ClearSprites
+	ret
+
+.asm_91ddc
+	hlcoord 0, 0
+	ld de, Sprites
+	ld bc, $a0
+	call CopyBytes
+	ret
+; 91de9
+
+Function91de9: ; 91de9
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH
+	ld a, $7f
+	call ByteFill
+	hlcoord 0, 1
+	ld a, $6
+	ld [hli], a
+	ld bc, SCREEN_HEIGHT
+	ld a, $7
+	call ByteFill
+	ld [hl], $17
+	call GetPokemonName
+	hlcoord 2, 0
+	call PlaceString
+	ld h, b
+	ld l, c
+	ld de, String_91e16
+	call PlaceString
+	ret
+; 91e16
+
+String_91e16:
+	db "'S NEST@"
+; 91e1e
+
+Function91e1e: ; 91e1e
+	ld [wd003], a
+	ld e, a
+	callba Function2a01f
+	decoord 0, 0
+	ld hl, Sprites
+.asm_91e2e
+	ld a, [de]
+	and a
+	jr z, .asm_91e4d
+	push de
+	ld e, a
+	push hl
+	callba GetLandmarkCoords
+	pop hl
+	ld a, d
+	sub $4
+	ld [hli], a
+	ld a, e
+	sub $4
+	ld [hli], a
+	ld a, $7f
+	ld [hli], a
+	xor a
+	ld [hli], a
+	pop de
+	inc de
+	jr .asm_91e2e
+
+.asm_91e4d
+	ld hl, Sprites
+	decoord 0, 0
+	ld bc, $a0
+	call CopyBytes
+	ret
+; 91e5a
+
+Function91e5a: ; 91e5a
+	call Function91ea9
+	ret c
+
+	ld a, [wd002]
+	ld e, a
+	callba GetLandmarkCoords
+	ld c, e
+	ld b, d
+	ld de, Unknown_91e9c
+	ld hl, Sprites
+.asm_91e70
+	ld a, [de]
+	cp $80
+	jr z, .asm_91e91
+
+	add b
+	ld [hli], a
+	inc de
+
+	ld a, [de]
+	add c
+	ld [hli], a
+	inc de
+
+	ld a, [de]
+	add $78
+	ld [hli], a
+	inc de
+
+	push bc
+	ld c, 0
+	ld a, [PlayerGender]
+	bit 0, a
+	jr z, .asm_91e8c
+	inc c
+.asm_91e8c
+	ld a, c
+	ld [hli], a
+	pop bc
+
+	jr .asm_91e70
+
+.asm_91e91
+	ld hl, Sprites + $10
+	ld bc, SpritesEnd - (Sprites + $10)
+	xor a
+	call ByteFill
+	ret
+; 91e9c
+
+Unknown_91e9c: ; 91e9c
+	db -8, -8,  0
+	db -8,  0,  1
+	db  0, -8,  2
+	db  0,  0,  3
+	db $80 ; terminator
+; 91ea9
+
+Function91ea9: ; 91ea9
+	ld a, [wd002]
+	cp FAST_SHIP
+	jr z, .johto
+	cp KANTO_LANDMARK
+	jr c, .johto
+
+.kanto
+	ld a, [wd003]
+	and a
+	jr z, .clear
+	jr .ok
+
+.johto
+	ld a, [wd003]
+	and a
+	jr nz, .clear
+
+.ok
+	and a
+	ret
+
+.clear
+	ld hl, Sprites
+	ld bc, SpritesEnd - Sprites
+	xor a
+	call ByteFill
+	scf
+	ret
+; 91ed0
+
+Function91ed0: ; 91ed0
+	ld a, [wd002]
+	cp FAST_SHIP
+	jr z, .asm_91ede
+	callba GetPlayerIcon
+	ret
+
+.asm_91ede
+	ld de, FastShipGFX
+	ld b, BANK(FastShipGFX)
+	ret
+; 91ee4
+
+TownMapBGUpdate: ; 91ee4
+; Update BG Map tiles and attributes
+
+; BG Map address
+	ld a, l
+	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
+	ld de, JohtoMap
+	jr FillTownMap
+
+FillKantoMap: ; 91f04
+	ld de, KantoMap
+
+FillTownMap: ; 91f07
+	hlcoord 0, 0
+.loop
+	ld a, [de]
+	cp $ff
+	ret z
+	ld a, [de]
+	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, 360
+.loop
+; 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
+	ld a, h
+	adc 0
+	ld h, a
+	ld a, [hl]
+	and %111
+	jr .update
+
+.odd
+; ...and odd ids take the top.
+	add l
+	ld l, a
+	ld a, h
+	adc 0
+	ld h, a
+	ld a, [hl]
+	swap a
+	and %111
+	jr .update
+
+.pal0
+	xor a
+
+.update
+	pop hl
+	ld [de], a
+	inc de
+	dec bc
+	ld a, b
+	or c
+	jr nz, .loop
+	ret
+
+TownMapPalMap:
+	db $11, $21, $22, $00, $11, $13, $54, $54, $11, $21, $22, $00
+	db $11, $10, $01, $00, $11, $21, $22, $00, $00, $00, $00, $00
+	db $00, $00, $44, $04, $00, $00, $00, $00, $33, $33, $33, $33
+	db $33, $33, $33, $03, $33, $33, $33, $33, $00, $00, $00, $00
+; 91f7b
+
+TownMapMon: ; 91f7b
+; Draw the FlyMon icon at town map location in
+
+; Get FlyMon species
+	ld a, [CurPartyMon]
+	ld hl, PartySpecies
+	ld e, a
+	ld d, $0
+	add hl, de
+	ld a, [hl]
+	ld [wd265], a
+
+; Get FlyMon icon
+	ld e, 8 ; starting tile in VRAM
+	callba GetSpeciesIcon
+
+; Animation/palette
+	ld de, 0
+	ld a, $0
+	call _InitSpriteAnimStruct
+
+	ld hl, 3
+	add hl, bc
+	ld [hl], 8
+	ld hl, 2
+	add hl, bc
+	ld [hl], 0
+	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
+	ld d, h
+	ld e, l
+	ld hl, VTiles0 tile $14
+	ld c, 4 ; # tiles
+	ld a, BANK(ChrisSpriteGFX) ; does nothing
+	call Request2bpp
+
+; Animation/palette
+	ld de, 0
+	ld b, $0a ; Male
+	ld a, [PlayerGender]
+	bit 0, a
+	jr z, .asm_91fd3
+	ld b, $1e ; Female
+.asm_91fd3
+	ld a, b
+	call _InitSpriteAnimStruct
+
+	ld hl, $3
+	add hl, bc
+	ld [hl], $10
+
+	pop af
+	ld e, a
+	push bc
+	callba GetLandmarkCoords
+	pop bc
+
+	ld hl, 4
+	add hl, bc
+	ld [hl], e
+	ld hl, 5
+	add hl, bc
+	ld [hl], d
+	ret
+; 0x91ff2
+
+Function91ff2: ; 91ff2
+	ld hl, TownMapGFX
+	ld de, VTiles2
+	lb bc, BANK(TownMapGFX), $30
+	call DecompressRequest2bpp
+	ret
+; 91fff
+
+
+JohtoMap: ; 91fff
+INCBIN "gfx/misc/johto.bin"
+; 92168
+
+KantoMap: ; 92168
+INCBIN "gfx/misc/kanto.bin"
+; 922d1
+
+
+GFX_922d1: ; 922d1
+INCBIN "gfx/unknown/0922d1.2bpp"
+GFX_922e1: ; 922e1
+INCBIN "gfx/unknown/0922e1.2bpp"
+GFX_92301: ; 92301
+INCBIN "gfx/unknown/092301.2bpp"
+Function92311: ; unreferenced
+	xor a
+	ld [wd002], a
+	call ClearBGPalettes
+	call ClearTileMap
+	call ClearSprites
+	ld hl, hInMenu
+	ld a, [hl]
+	push af
+	ld [hl], $1
+	xor a
+	ld [hBGMapMode], a
+	callba Function8cf53
+	call Function91ff2
+	ld de, GFX_922e1
+	ld hl, VTiles2 tile $30
+	lb bc, BANK(GFX_922e1), 6
+	call Request1bpp
+	call FillKantoMap
+	call TownMapBubble
+	call TownMapPals
+	hlbgcoord 0, 0, VBGMap1
+	call TownMapBGUpdate
+	call FillJohtoMap
+	call TownMapBubble
+	call TownMapPals
+	hlbgcoord 0, 0
+	call TownMapBGUpdate
+	call TownMapMon
+	ld a, c
+	ld [wd003], a
+	ld a, b
+	ld [wd004], a
+	ld b, SCGB_02
+	call GetSGBLayout
+	call SetPalettes
+.loop
+	call JoyTextDelay
+	ld hl, hJoyPressed
+	ld a, [hl]
+	and B_BUTTON
+	jr nz, .pressedB
+	ld a, [hl]
+	and A_BUTTON
+	jr nz, .pressedA
+	call Function923b8
+	call GetMapCursorCoordinates
+	callba Function8cf69
+	call DelayFrame
+	jr .loop
+
+.pressedB
+	ld a, -1
+	jr .asm_9239f
+
+.pressedA
+	ld a, [wd002]
+	ld l, a
+	ld h, 0
+	add hl, hl
+	ld de, Flypoints + 1
+	add hl, de
+	ld a, [hl]
+
+.asm_9239f
+	ld [wd002], a
+	pop af
+	ld [hInMenu], a
+	call ClearBGPalettes
+	ld a, $90
+	ld [hWY], a
+	xor a
+	ld [hBGMapAddress], a
+	ld a, VBGMap0 / $100
+	ld [hBGMapAddress + 1], a
+	ld a, [wd002]
+	ld e, a
+	ret
+; 923b8
+
+Function923b8: ; 923b8
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_DOWN | D_RIGHT
+	jr nz, .asm_923c6
+	ld a, [hl]
+	and D_UP | D_LEFT
+	jr nz, .asm_923d3
+	ret
+
+.asm_923c6
+	ld hl, wd002
+	ld a, [hl]
+	cp FLY_INDIGO
+	jr c, .asm_923d0
+	ld [hl], -1
+.asm_923d0
+	inc [hl]
+	jr .asm_923dd
+
+.asm_923d3
+	ld hl, wd002
+	ld a, [hl]
+	and a
+	jr nz, .asm_923dc
+	ld [hl], FLY_INDIGO + 1
+.asm_923dc
+	dec [hl]
+
+.asm_923dd
+	ld a, [wd002]
+	cp KANTO_FLYPOINT
+	jr c, .johto
+
+	call FillKantoMap
+	xor a
+	ld b, $9c
+	jr .asm_923f3
+
+.johto
+	call FillJohtoMap
+	ld a, $90
+	ld b, $98
+
+.asm_923f3
+	ld [hWY], a
+	ld a, b
+	ld [hBGMapAddress + 1], a
+	call TownMapBubble
+	call WaitBGMap
+	xor a
+	ld [hBGMapMode], a
+	ret
+; 92402
--- a/engine/predef.asm
+++ b/engine/predef.asm
@@ -37,7 +37,7 @@
 	add_predef DrawPartyMenuHPBar
 	add_predef FillPP
 	add_predef TryAddMonToParty
-	add_predef Functionda96
+	add_predef AddTempmonToParty
 	add_predef SentGetPkmnIntoFromBox
 	add_predef SentPkmnIntoBox
 	add_predef GiveEgg
@@ -46,7 +46,7 @@
 	add_predef CalcPkmnStatC
 	add_predef CanLearnTMHMMove
 	add_predef GetTMHMMove
-	add_predef Function28eef ; $ 10
+	add_predef Predef_LinkTextbox ; $ 10
 	add_predef PrintMoveDesc
 	add_predef UpdatePlayerHUD
 	add_predef FillBox
@@ -58,9 +58,9 @@
 	add_predef GetMonFrontpic
 	add_predef LearnLevelMoves
 	add_predef FillMoves
-	add_predef Function421e6
-	add_predef Function28f63
-	add_predef Function28f24
+	add_predef EvolveAfterBattle
+	add_predef TradeAnimationPlayer2
+	add_predef TradeAnimation
 	add_predef CopyPkmnToTempMon
 	add_predef ListMoves ; $20
 	add_predef PlaceNonFaintStatus
@@ -92,12 +92,12 @@
 	add_predef PartyMonItemName
 	add_predef GetFrontpic
 	add_predef GetBackpic
-	add_predef Function5108b
+	add_predef FrontpicPredef
 	add_predef GetTrainerPic
 	add_predef DecompressPredef ; $40
 	add_predef CheckTypeMatchup
 	add_predef ConvertMon_1to2
-	add_predef Functionfb877
+	add_predef NewPokedexEntry
 	add_predef AnimateMon_Slow_Normal
 	add_predef PlaceStatusString
 	add_predef LoadMonAnimation
--- /dev/null
+++ b/engine/printer.asm
@@ -1,0 +1,1493 @@
+Function84000: ; 84000
+	ld hl, OverworldMap
+	lb bc, 4, 12
+	xor a
+	call Function842ab
+	xor a
+	ld [rSB], a
+	ld [rSC], a
+	ld [wc2d5], a
+	ld hl, wc2d4
+	set 0, [hl]
+	ld a, [GBPrinter]
+	ld [wcbfb], a
+	xor a
+	ld [wJumptableIndex], a
+	ret
+; 84022
+
+Function84022: ; 84022
+	ld a, [wJumptableIndex]
+	ld e, a
+	ld d, 0
+	ld hl, Jumptable_84031
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 84031
+
+
+Jumptable_84031: ; 84031 (21:4031)
+	dw Function84077
+	dw Function84143
+	dw Function84120
+	dw Function84099
+	dw Function84180
+	dw Function8412e
+	dw Function840c5
+	dw Function84180
+	dw Function84120
+	dw Function840de
+	dw Function84180
+	dw Function84120
+	dw Function841a1
+	dw Function84063
+	dw Function8406d
+	dw Function84120
+	dw Function84103
+	dw Function84071
+	dw Function841b0
+	dw Function841b3
+
+
+Function84059: ; 84059 (21:4059)
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+
+Function8405e: ; 8405e (21:405e)
+	ld hl, wJumptableIndex
+	dec [hl]
+	ret
+
+Function84063: ; 84063 (21:4063)
+	xor a
+	ld [wca89], a
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+Function8406d: ; 8406d (21:406d)
+	call Function84059
+	ret
+
+Function84071: ; 84071 (21:4071)
+	ld a, $1
+	ld [wJumptableIndex], a
+	ret
+
+Function84077: ; 84077 (21:4077)
+	call Function841fb
+	ld hl, Unknown_842b7
+	call Function841e2
+	xor a
+	ld [wca8e], a
+	ld [wca8f], a
+	ld a, [wcf65]
+	ld [wca81], a
+	call Function84059
+	call Function841c3
+	ld a, $1
+	ld [wcbf8], a
+	ret
+
+Function84099: ; 84099 (21:4099)
+	call Function841fb
+	ld hl, wca81
+	ld a, [hl]
+	and a
+	jr z, Function840c5
+	ld hl, Unknown_842c3
+	call Function841e2
+	call Function84260
+	ld a, $80
+	ld [wca8e], a
+	ld a, $2
+	ld [wca8f], a
+	call Function84219
+	call Function84059
+	call Function841c3
+	ld a, $2
+	ld [wcbf8], a
+	ret
+
+Function840c5: ; 840c5 (21:40c5)
+	ld a, $6
+	ld [wJumptableIndex], a
+	ld hl, Unknown_842c9
+	call Function841e2
+	xor a
+	ld [wca8e], a
+	ld [wca8f], a
+	call Function84059
+	call Function841c3
+	ret
+
+Function840de: ; 840de (21:40de)
+	call Function841fb
+	ld hl, Unknown_842bd
+	call Function841e2
+	call Function84249
+	ld a, $4
+	ld [wca8e], a
+	ld a, $0
+	ld [wca8f], a
+	call Function84219
+	call Function84059
+	call Function841c3
+	ld a, $3
+	ld [wcbf8], a
+	ret
+
+Function84103: ; 84103 (21:4103)
+	call Function841fb
+	ld hl, Unknown_842b7
+	call Function841e2
+	xor a
+	ld [wca8e], a
+	ld [wca8f], a
+	ld a, [wcf65]
+	ld [wca81], a
+	call Function84059
+	call Function841c3
+	ret
+
+Function84120: ; 84120 (21:4120)
+	ld hl, wca8b
+	inc [hl]
+	ld a, [hl]
+	cp $6
+	ret c
+	xor a
+	ld [hl], a
+	call Function84059
+	ret
+
+Function8412e: ; 8412e (21:412e)
+	ld hl, wca8b
+	inc [hl]
+	ld a, [hl]
+	cp $6
+	ret c
+	xor a
+	ld [hl], a
+	ld hl, wca81
+	dec [hl]
+	call Function8405e
+	call Function8405e
+	ret
+
+Function84143: ; 84143 (21:4143)
+	ld a, [wc2d5]
+	and a
+	ret nz
+	ld a, [wca88]
+	cp $ff
+	jr nz, .printer_connected
+	ld a, [wca89]
+	cp $ff
+	jr z, .printer_error
+
+.printer_connected
+	ld a, [wca88]
+	cp $81
+	jr nz, .printer_error
+	ld a, [wca89]
+	cp $0
+	jr nz, .printer_error
+	ld hl, wc2d4
+	set 1, [hl]
+	ld a, $5
+	ld [wca8a], a
+	call Function84059
+	ret
+
+.printer_error
+	ld a, $ff
+	ld [wca88], a
+	ld [wca89], a
+	ld a, $e
+	ld [wJumptableIndex], a
+	ret
+
+Function84180: ; 84180 (21:4180)
+	ld a, [wc2d5]
+	and a
+	ret nz
+	ld a, [wca89]
+	and $f0
+	jr nz, .asm_8419b
+	ld a, [wca89]
+	and $1
+	jr nz, .asm_84197
+	call Function84059
+	ret
+.asm_84197
+	call Function8405e
+	ret
+.asm_8419b
+	ld a, $12
+	ld [wJumptableIndex], a
+	ret
+
+Function841a1: ; 841a1 (21:41a1)
+	ld a, [wc2d5]
+	and a
+	ret nz
+	ld a, [wca89]
+	and $f3
+	ret nz
+	call Function84059
+	ret
+
+Function841b0: ; 841b0 (21:41b0)
+	call Function84059
+
+Function841b3: ; 841b3 (21:41b3)
+	ld a, [wc2d5]
+	and a
+	ret nz
+	ld a, [wca89]
+	and $f0
+	ret nz
+	xor a
+	ld [wJumptableIndex], a
+	ret
+
+Function841c3: ; 841c3 (21:41c3)
+	ld a, [wc2d5]
+	and a
+	jr nz, Function841c3
+	xor a
+	ld [wca8c], a
+	ld [wca8d], a
+	ld a, $1
+	ld [wc2d5], a
+	ld a, $88
+	ld [rSB], a
+	ld a, $1
+	ld [rSC], a
+	ld a, $81
+	ld [rSC], a
+	ret
+
+Function841e2: ; 841e2 (21:41e2)
+	ld a, [hli]
+	ld [wca82], a
+	ld a, [hli]
+	ld [wca83], a
+	ld a, [hli]
+	ld [wca84], a
+	ld a, [hli]
+	ld [wca85], a
+	ld a, [hli]
+	ld [wca86], a
+	ld a, [hl]
+	ld [wca87], a
+	ret
+
+Function841fb: ; 841fb (21:41fb)
+	xor a
+	ld hl, wca82
+rept 3
+	ld [hli], a
+endr
+	ld [hl], a
+	ld hl, wca86
+	ld [hli], a
+	ld [hl], a
+	xor a
+	ld [wca8e], a
+	ld [wca8f], a
+	ld hl, OverworldMap
+	ld bc, $280
+	call Function842ab
+	ret
+
+Function84219: ; 84219 (21:4219)
+	ld hl, 0
+	ld bc, $4
+	ld de, wca82
+	call Function8423c
+	ld a, [wca8e]
+	ld c, a
+	ld a, [wca8f]
+	ld b, a
+	ld de, OverworldMap
+	call Function8423c
+	ld a, l
+	ld [wca86], a
+	ld a, h
+	ld [wca87], a
+	ret
+
+Function8423c: ; 8423c (21:423c)
+	ld a, [de]
+	inc de
+	add l
+	jr nc, .asm_84242
+	inc h
+.asm_84242
+	ld l, a
+	dec bc
+	ld a, c
+	or b
+	jr nz, Function8423c
+	ret
+
+Function84249: ; 84249 (21:4249)
+	ld a, $1
+	ld [OverworldMap], a
+	ld a, [wcbfa]
+	ld [wc801], a
+	ld a, $e4
+	ld [wc802], a
+	ld a, [wcbfb]
+	ld [wc803], a
+	ret
+
+Function84260: ; 84260 (21:4260)
+	ld a, [wca81]
+	xor $ff
+	ld d, a
+	ld a, [wcf65]
+	inc a
+	add d
+	ld hl, wca90
+	ld de, $28
+.asm_84271
+	and a
+	jr z, .asm_84278
+	add hl, de
+	dec a
+	jr .asm_84271
+.asm_84278
+	ld e, l
+	ld d, h
+	ld hl, OverworldMap
+	ld c, $28
+.asm_8427f
+	ld a, [de]
+	inc de
+	push bc
+	push de
+	push hl
+	swap a
+	ld d, a
+	and $f0
+	ld e, a
+	ld a, d
+	and $f
+	ld d, a
+	and $8
+	ld a, d
+	jr nz, .asm_84297
+	or $90
+	jr .asm_84299
+.asm_84297
+	or $80
+.asm_84299
+	ld d, a
+	lb bc, $21, 1
+	call Request2bpp
+	pop hl
+	ld de, $10
+	add hl, de
+	pop de
+	pop bc
+	dec c
+	jr nz, .asm_8427f
+	ret
+
+Function842ab: ; 842ab
+	push de
+	ld e, a
+.asm_842ad
+	ld [hl], e
+	inc hl
+	dec bc
+	ld a, c
+	or b
+	jr nz, .asm_842ad
+	ld a, e
+	pop de
+	ret
+; 842b7
+
+Unknown_842b7: db  1, 0, $00, 0,  1, 0
+Unknown_842bd: db  2, 0, $04, 0,  0, 0
+Unknown_842c3: db  4, 0, $80, 2,  0, 0
+Unknown_842c9: db  4, 0, $00, 0,  4, 0
+Unknown_842cf: db  8, 0, $00, 0,  8, 0 ; unused
+Unknown_842d5: db 15, 0, $00, 0, 15, 0 ; unused
+; 842db
+
+
+Function842db:: ; 842db
+	ld a, [wc2d5]
+	add a
+	ld e, a
+	ld d, 0
+	ld hl, Jumptable_842ea
+	add hl, de
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 842ea
+
+
+Jumptable_842ea: ; 842ea (21:42ea)
+	dw Function8432f
+	dw Function84330
+	dw Function84339
+	dw Function84343
+	dw Function8434d
+	dw Function84357
+	dw Function84361
+	dw Function8438b
+	dw Function84395
+	dw Function8439f
+	dw Function843a8
+	dw Function843b6
+	dw Function84330
+	dw Function843c0
+	dw Function843c9
+	dw Function843c9
+	dw Function843c9
+	dw Function843c0
+	dw Function843c9
+	dw Function8439f
+	dw Function843a8
+	dw Function843e6
+	dw Function84330
+	dw Function843d2
+	dw Function843c9
+	dw Function843c9
+	dw Function843c9
+	dw Function843d2
+	dw Function843c9
+	dw Function8439f
+	dw Function843a8
+	dw Function843b6
+
+
+Function8432a: ; 8432a (21:432a)
+	ld hl, wc2d5
+	inc [hl]
+	ret
+
+Function8432f: ; 8432f (21:432f)
+	ret
+
+Function84330: ; 84330 (21:4330)
+	ld a, $33
+	call Function843db
+	call Function8432a
+	ret
+
+Function84339: ; 84339 (21:4339)
+	ld a, [wca82]
+	call Function843db
+	call Function8432a
+	ret
+
+Function84343: ; 84343 (21:4343)
+	ld a, [wca83]
+	call Function843db
+	call Function8432a
+	ret
+
+Function8434d: ; 8434d (21:434d)
+	ld a, [wca84]
+	call Function843db
+	call Function8432a
+	ret
+
+Function84357: ; 84357 (21:4357)
+	ld a, [wca85]
+	call Function843db
+	call Function8432a
+	ret
+
+Function84361: ; 84361 (21:4361)
+	ld hl, wca8e
+	ld a, [hli]
+	ld d, [hl]
+	ld e, a
+	or d
+	jr z, .asm_84388
+	dec de
+	ld [hl], d
+	dec hl
+	ld [hl], e
+	ld a, [wca8c]
+	ld e, a
+	ld a, [wca8d]
+	ld d, a
+	ld hl, OverworldMap
+	add hl, de
+	inc de
+	ld a, e
+	ld [wca8c], a
+	ld a, d
+	ld [wca8d], a
+	ld a, [hl]
+	call Function843db
+	ret
+.asm_84388
+	call Function8432a
+
+Function8438b: ; 8438b (21:438b)
+	ld a, [wca86]
+	call Function843db
+	call Function8432a
+	ret
+
+Function84395: ; 84395 (21:4395)
+	ld a, [wca87]
+	call Function843db
+	call Function8432a
+	ret
+
+Function8439f: ; 8439f (21:439f)
+	ld a, $0
+	call Function843db
+	call Function8432a
+	ret
+
+Function843a8: ; 843a8 (21:43a8)
+	ld a, [rSB]
+	ld [wca88], a
+	ld a, $0
+	call Function843db
+	call Function8432a
+	ret
+
+Function843b6: ; 843b6 (21:43b6)
+	ld a, [rSB]
+	ld [wca89], a
+	xor a
+	ld [wc2d5], a
+	ret
+
+Function843c0: ; 843c0 (21:43c0)
+	ld a, $f
+	call Function843db
+	call Function8432a
+	ret
+
+Function843c9: ; 843c9 (21:43c9)
+	ld a, $0
+	call Function843db
+	call Function8432a
+	ret
+
+Function843d2: ; 843d2 (21:43d2)
+	ld a, $8
+	call Function843db
+	call Function8432a
+	ret
+
+Function843db: ; 843db (21:43db)
+	ld [rSB], a
+	ld a, $1
+	ld [rSC], a
+	ld a, $81
+	ld [rSC], a
+	ret
+
+Function843e6: ; 843e6 (21:43e6)
+	ld a, [rSB]
+	ld [wca89], a
+	xor a
+	ld [wc2d5], a
+	ret
+
+Function843f0: ; 843f0
+.asm_843f0
+	call JoyTextDelay
+	call Function846f6
+	jr c, .asm_8440f
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .asm_8440d
+	call Function84022
+	call Function84757
+	call Function84785
+	call DelayFrame
+	jr .asm_843f0
+
+.asm_8440d
+	and a
+	ret
+
+.asm_8440f
+	scf
+	ret
+; 84411
+
+Function84411: ; 84411
+	xor a
+	ld [wc2d4], a
+	ld [wc2d5], a
+	ret
+; 84419
+
+Function84419: ; 84419
+	push af
+	call Function84000
+	pop af
+	ld [wcbfa], a
+	call Function84728
+	ret
+; 84425
+
+Function84425: ; 84425
+	call ReturnToMapFromSubmenu
+	call Function84753
+	ret
+; 8442c
+
+PrintDexEntry: ; 8442c
+	ld a, [wcf65]
+	push af
+	ld hl, VTiles1
+	ld de, FontInversed
+	lb bc, BANK(FontInversed), $80
+	call Request1bpp
+	xor a
+	ld [hPrinter], a
+	call Function8474c
+	ld a, [rIE]
+	push af
+	xor a
+	ld [rIF], a
+	ld a, $9
+	ld [rIE], a
+	call Function84000
+	ld a, $10
+	ld [wcbfa], a
+	callba Function1dc1b0
+	call ClearTileMap
+	ld a, $e4
+	call DmgToCgbBGPals
+	call DelayFrame
+	ld hl, hVBlank
+	ld a, [hl]
+	push af
+	ld [hl], $4
+	ld a, $8
+	ld [wcf65], a
+	call Function84742
+	call Function843f0
+	jr c, .asm_8449d
+	call Function84411
+	ld c, 12
+	call DelayFrames
+	xor a
+	ld [hBGMapMode], a
+	call Function84000
+	ld a, $3
+	ld [wcbfa], a
+	callba Function1dc213
+	call Function84742
+	ld a, $4
+	ld [wcf65], a
+	call Function843f0
+
+.asm_8449d
+	pop af
+	ld [hVBlank], a
+	call Function84411
+	xor a
+	ld [rIF], a
+	pop af
+	ld [rIE], a
+	call Function84425
+	ld c, $8
+.asm_844ae
+	call LowVolume
+	call DelayFrame
+	dec c
+	jr nz, .asm_844ae
+	pop af
+	ld [wcf65], a
+	ret
+; 844bc
+
+PrintPCBox: ; 844bc (21:44bc)
+	ld a, [wcf65]
+	push af
+	ld a, $9
+	ld [wcf65], a
+	ld a, e
+	ld [wd004], a
+	ld a, d
+	ld [wd005], a
+	ld a, b
+	ld [wd006], a
+	ld a, c
+	ld [wd007], a
+	xor a
+	ld [hPrinter], a
+	ld [wd003], a
+	call Function8474c
+	ld a, [rIE]
+	push af
+	xor a
+	ld [rIF], a
+	ld a, $9
+	ld [rIE], a
+	ld hl, hVBlank
+	ld a, [hl]
+	push af
+	ld [hl], $4
+	xor a
+	ld [hBGMapMode], a
+	call Function84817
+	ld a, $10
+	call Function84419
+	call Function84559
+	jr c, .asm_84545
+	call Function84411
+	ld c, 12
+	call DelayFrames
+	xor a
+	ld [hBGMapMode], a
+	call Function8486f
+	ld a, $0
+	call Function84419
+	call Function84559
+	jr c, .asm_84545
+	call Function84411
+	ld c, 12
+	call DelayFrames
+	xor a
+	ld [hBGMapMode], a
+	call Function84893
+	ld a, $0
+	call Function84419
+	call Function84559
+	jr c, .asm_84545
+	call Function84411
+	ld c, 12
+	call DelayFrames
+	xor a
+	ld [hBGMapMode], a
+	call Function848b7
+	ld a, $3
+	call Function84419
+	call Function84559
+.asm_84545
+	pop af
+	ld [hVBlank], a
+	call Function84411
+	xor a
+	ld [rIF], a
+	pop af
+	ld [rIE], a
+	call Function84425
+	pop af
+	ld [wcf65], a
+	ret
+
+Function84559: ; 84559 (21:4559)
+	call Function84742
+	call Function843f0
+	ret
+
+PrintUnownStamp: ; 84560
+	ld a, [wcf65]
+	push af
+	xor a
+	ld [hPrinter], a
+	call Function8474c
+	ld a, [rIE]
+	push af
+	xor a
+	ld [rIF], a
+	ld a, $9
+	ld [rIE], a
+	ld hl, hVBlank
+	ld a, [hl]
+	push af
+	ld [hl], $4
+	xor a
+	ld [hBGMapMode], a
+	call LoadTileMapToTempTileMap
+	callba Function16dac
+	ld a, $0
+	call Function84419
+	call Call_LoadTempTileMapToTileMap
+	call Function84742
+	ld a, $9
+	ld [wcf65], a
+.asm_84597
+	call JoyTextDelay
+	call Function846f6
+	jr c, .asm_845c0
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .asm_845c0
+	call Function84022
+	ld a, [wJumptableIndex]
+	cp $2
+	jr nc, .asm_845b5
+	ld a, $3
+	ld [wca81], a
+
+.asm_845b5
+	call Function84757
+	call Function84785
+	call DelayFrame
+	jr .asm_84597
+
+.asm_845c0
+	pop af
+	ld [hVBlank], a
+	call Function84411
+	call Call_LoadTempTileMapToTileMap
+	xor a
+	ld [rIF], a
+	pop af
+	ld [rIE], a
+	pop af
+	ld [wcf65], a
+	ret
+; 845d4
+
+PrintMail: ; 845d4
+	call Function845db
+	call Function84425
+	ret
+; 845db
+
+Function845db: ; 845db
+	ld a, [wcf65]
+	push af
+	xor a
+	ld [hPrinter], a
+	call Function8474c
+	ld a, [rIE]
+	push af
+	xor a
+	ld [rIF], a
+	ld a, $9
+	ld [rIE], a
+	xor a
+	ld [hBGMapMode], a
+	ld a, $13
+	call Function84419
+	ld hl, hVBlank
+	ld a, [hl]
+	push af
+	ld [hl], $4
+	ld a, $9
+	ld [wcf65], a
+	call Function843f0
+	pop af
+	ld [hVBlank], a
+	call Function84411
+	call Function84735
+	xor a
+	ld [rIF], a
+	pop af
+	ld [rIE], a
+	pop af
+	ld [wcf65], a
+	ret
+; 8461a
+
+PrintPartymon: ; 8461a
+	ld a, [wcf65]
+	push af
+	xor a
+	ld [hPrinter], a
+	call Function8474c
+	ld a, [rIE]
+	push af
+	xor a
+	ld [rIF], a
+	ld a, $9
+	ld [rIE], a
+	xor a
+	ld [hBGMapMode], a
+	callba Function1dc381
+	ld a, $10
+	call Function84419
+	ld hl, hVBlank
+	ld a, [hl]
+	push af
+	ld [hl], $4
+	ld a, $8
+	ld [wcf65], a
+	call Function84742
+	call Function843f0
+	jr c, .asm_84671
+	call Function84411
+	ld c, 12
+	call DelayFrames
+	xor a
+	ld [hBGMapMode], a
+	callba Function1dc47b
+	ld a, $3
+	call Function84419
+	ld a, $9
+	ld [wcf65], a
+	call Function84742
+	call Function843f0
+
+.asm_84671
+	pop af
+	ld [hVBlank], a
+	call Function84411
+	call Function84735
+	xor a
+	ld [rIF], a
+	pop af
+	ld [rIE], a
+	call Function84425
+	pop af
+	ld [wcf65], a
+	ret
+; 84688
+
+_PrintDiploma: ; 84688
+	ld a, [wcf65]
+	push af
+	callba Function1dd709
+	xor a
+	ld [hPrinter], a
+	call Function8474c
+	ld a, [rIE]
+	push af
+	xor a
+	ld [rIF], a
+	ld a, $9
+	ld [rIE], a
+	ld hl, hVBlank
+	ld a, [hl]
+	push af
+	ld [hl], $4
+	ld a, $10
+	call Function84419
+	call Function84742
+	ld a, $9
+	ld [wcf65], a
+	call Function843f0
+	jr c, .asm_846e2
+	call Function84411
+	ld c, 12
+	call DelayFrames
+	call LoadTileMapToTempTileMap
+	xor a
+	ld [hBGMapMode], a
+	callba Function1dd7ae
+	ld a, $3
+	call Function84419
+	call Call_LoadTempTileMapToTileMap
+	call Function84742
+	ld a, $9
+	ld [wcf65], a
+	call Function843f0
+
+.asm_846e2
+	pop af
+	ld [hVBlank], a
+	call Function84411
+	xor a
+	ld [rIF], a
+	pop af
+	ld [rIE], a
+	call Function84425
+	pop af
+	ld [wcf65], a
+	ret
+; 846f6
+
+Function846f6: ; 846f6
+	ld a, [hJoyDown]
+	and B_BUTTON
+	jr nz, .asm_846fe
+	and a
+	ret
+
+.asm_846fe
+	ld a, [wca80]
+	cp $c
+	jr nz, .asm_84722
+.asm_84705
+	ld a, [wc2d5]
+	and a
+	jr nz, .asm_84705
+	ld a, $16
+	ld [wc2d5], a
+	ld a, $88
+	ld [rSB], a
+	ld a, $1
+	ld [rSC], a
+	ld a, $81
+	ld [rSC], a
+.asm_8471c
+	ld a, [wc2d5]
+	and a
+	jr nz, .asm_8471c
+
+.asm_84722
+	ld a, $1
+	ld [hPrinter], a
+	scf
+	ret
+; 84728
+
+Function84728: ; 84728
+	hlcoord 0, 0
+	ld de, wca90
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	call CopyBytes
+	ret
+; 84735
+
+Function84735: ; 84735
+	ld hl, wca90
+	decoord 0, 0
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	call CopyBytes
+	ret
+; 84742
+
+Function84742: ; 84742
+	xor a
+	ld [hJoyReleased], a
+	ld [hJoyPressed], a
+	ld [hJoyDown], a
+	ld [hJoyLast], a
+	ret
+; 8474c
+
+Function8474c: ; 8474c
+	ld de, MUSIC_PRINTER
+	call PlayMusic2
+	ret
+; 84753
+
+Function84753: ; 84753
+	call RestartMapMusic
+	ret
+; 84757
+
+Function84757: ; 84757
+	ld a, [wca88]
+	cp -1
+	jr nz, .printer_connected
+	ld a, [wca89]
+	cp -1
+	jr z, .error_2
+
+.printer_connected
+	ld a, [wca89]
+	and %11100000
+	ret z ; no error
+
+	bit 7, a
+	jr nz, .error_1
+	bit 6, a
+	jr nz, .error_4
+	ld a, 6 ; error 3
+	jr .load_text_index
+
+.error_4
+	ld a, 7 ; error 4
+	jr .load_text_index
+
+.error_1
+	ld a, 4 ; error 1
+	jr .load_text_index
+
+.error_2
+	ld a, 5 ; error 2
+
+.load_text_index
+	ld [wcbf8], a
+	ret
+; 84785
+
+Function84785: ; 84785
+	ld a, [wcbf8]
+	and a
+	ret z
+	push af
+	xor a
+	ld [hBGMapMode], a
+	hlcoord 0, 5
+	lb bc, 10, 18
+	call TextBox
+	pop af
+	ld e, a
+	ld d, 0
+	ld hl, PrinterStatusStringPointers
+rept 2
+	add hl, de
+endr
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	hlcoord 1, 7
+	ld a, BANK(GBPrinterStrings)
+	call FarString
+	hlcoord 2, 15
+	ld de, String_PressBToCancel
+	call PlaceString
+	ld a, $1
+	ld [hBGMapMode], a
+	xor a
+	ld [wcbf8], a
+	ret
+; 847bd
+
+Function847bd: ; 847bd
+	ld a, [wcbf8]
+	and a
+	ret z
+	push af
+	xor a
+	ld [hBGMapMode], a
+	hlcoord 2, 4
+	lb bc, 13, 16
+	call ClearBox
+	pop af
+	ld e, a
+	ld d, 0
+	ld hl, PrinterStatusStringPointers
+rept 2
+	add hl, de
+endr
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	hlcoord 4, 7
+	ld a, BANK(GBPrinterStrings)
+	call FarString
+	hlcoord 4, 15
+	ld de, String_PressBToCancel
+	call PlaceString
+	ld a, $1
+	ld [hBGMapMode], a
+	xor a
+	ld [wcbf8], a
+	ret
+; 847f5
+
+String_PressBToCancel:
+	db "Press B to Cancel@"
+; 84807
+
+PrinterStatusStringPointers: ; 84807
+	dw String_1dc275 ; @
+	dw String_1dc276 ; CHECKING LINK
+	dw String_1dc289 ; TRANSMITTING
+	dw String_1dc29c ; PRINTING
+	dw String_1dc2ad ; error 1
+	dw String_1dc2e2 ; error 2
+	dw String_1dc317 ; error 3
+	dw String_1dc34c ; error 4
+; 84817
+
+Function84817: ; 84817 (21:4817)
+	xor a
+	ld [wd002], a
+	hlcoord 0, 0
+	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+	ld a, " "
+	call ByteFill
+	call Printer_PlaceEmptyBoxSlotString
+	hlcoord 0, 0
+	ld bc, 9 * SCREEN_WIDTH
+	ld a, " "
+	call ByteFill
+	call Printer_PlaceSideBorders
+	call Printer_PlaceTopBorder
+	hlcoord 4, 3
+	ld de, .String_PokemonList
+	call PlaceString
+	ld a, [wd007]
+	ld bc, BOX_NAME_LENGTH
+	ld hl, wBoxNames
+	call AddNTimes
+	ld d, h
+	ld e, l
+	hlcoord 6, 5
+	call PlaceString
+	ld a, $1
+	call Function849c6
+	hlcoord 2, 9
+	ld c, $3
+	call Function848e7
+	ret
+; 84865 (21:4865)
+
+.String_PokemonList:
+	db "#MON LIST@"
+; 8486f
+
+Function8486f: ; 8486f (21:486f)
+	hlcoord 0, 0
+	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+	ld a, " "
+	call ByteFill
+	call Printer_PlaceEmptyBoxSlotString
+	call Printer_PlaceSideBorders
+	ld a, [wd003]
+	and a
+	ret nz
+	ld a, $4
+	call Function849c6
+	hlcoord 2, 0
+	ld c, $6
+	call Function848e7
+	ret
+
+Function84893: ; 84893 (21:4893)
+	hlcoord 0, 0
+	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+	ld a, " "
+	call ByteFill
+	call Printer_PlaceEmptyBoxSlotString
+	call Printer_PlaceSideBorders
+	ld a, [wd003]
+	and a
+	ret nz
+	ld a, $a
+	call Function849c6
+	hlcoord 2, 0
+	ld c, $6
+	call Function848e7
+	ret
+
+Function848b7: ; 848b7 (21:48b7)
+	hlcoord 0, 0
+	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+	ld a, " "
+	call ByteFill
+	call Printer_PlaceEmptyBoxSlotString
+	hlcoord 1, 15
+	lb bc, 2, 18
+	call ClearBox
+	call Printer_PlaceSideBorders
+	call Printer_PlaceBottomBorders
+	ld a, [wd003]
+	and a
+	ret nz
+	ld a, $10
+	call Function849c6
+	hlcoord 2, 0
+	ld c, $5
+	call Function848e7
+	ret
+
+Function848e7: ; 848e7 (21:48e7)
+	ld a, [wd006]
+	call GetSRAMBank
+
+Function848ed: ; 848ed (21:48ed)
+	ld a, c
+	and a
+	jp z, Function84986
+	dec c
+	ld a, [de]
+	cp $ff
+	jp z, Function84981
+	ld [wd265], a
+	ld [CurPartySpecies], a
+	push bc
+	push hl
+	push de
+	push hl
+	ld bc, $10
+	ld a, " "
+	call ByteFill
+	pop hl
+	push hl
+	call GetBasePokemonName
+	pop hl
+	push hl
+	call PlaceString
+	ld a, [CurPartySpecies]
+	cp EGG
+	pop hl
+	jr z, .ok2
+	ld bc, $b
+	add hl, bc
+	call Function8498a
+	ld bc, $9
+	add hl, bc
+	ld a, "/"
+	ld [hli], a
+	push hl
+	ld bc, $e
+	ld a, " "
+	call ByteFill
+	pop hl
+	push hl
+	ld a, [wd004]
+	ld l, a
+	ld a, [wd005]
+	ld h, a
+	ld bc, $372
+	add hl, bc
+	ld bc, $b
+	ld a, [wd002]
+	call AddNTimes
+	ld e, l
+	ld d, h
+	pop hl
+	push hl
+	call PlaceString
+	pop hl
+	ld bc, $b
+	add hl, bc
+	push hl
+	ld a, [wd004]
+	ld l, a
+	ld a, [wd005]
+	ld h, a
+	ld bc, $35
+	add hl, bc
+	ld bc, $20
+	ld a, [wd002]
+	call AddNTimes
+	ld a, [hl]
+	pop hl
+	call Function383d
+.ok2
+	ld hl, wd002
+	inc [hl]
+	pop de
+	pop hl
+	ld bc, $3c
+	add hl, bc
+	pop bc
+	inc de
+	jp Function848ed
+
+Function84981: ; 84981 (21:4981)
+	ld a, $1
+	ld [wd003], a
+
+Function84986: ; 84986 (21:4986)
+	call CloseSRAM
+	ret
+
+Function8498a: ; 8498a (21:498a)
+	push hl
+	ld a, [wd004]
+	ld l, a
+	ld a, [wd005]
+	ld h, a
+	ld bc, $2b
+	add hl, bc
+	ld bc, $20
+	ld a, [wd002]
+	call AddNTimes
+	ld de, TempMonDVs
+	ld a, [hli]
+	ld [de], a
+	inc de
+	ld a, [hli]
+	ld [de], a
+	ld a, [wd002]
+	ld [CurPartyMon], a
+	ld a, $3
+	ld [MonType], a
+	callba GetGender
+	ld a, $7f
+	jr c, .asm_849c3
+	ld a, $ef
+	jr nz, .asm_849c3
+	ld a, $f5
+.asm_849c3
+	pop hl
+	ld [hli], a
+	ret
+
+Function849c6: ; 849c6 (21:49c6)
+	push hl
+	ld e, a
+	ld d, $0
+	ld a, [wd004]
+	ld l, a
+	ld a, [wd005]
+	ld h, a
+	add hl, de
+	ld e, l
+	ld d, h
+	pop hl
+	ret
+
+Printer_PlaceTopBorder: ; 849d7 (21:49d7)
+	hlcoord 0, 0
+	ld a, "┌"
+	ld [hli], a
+	ld a, "─"
+	ld c, SCREEN_WIDTH - 2
+.loop
+	ld [hli], a
+	dec c
+	jr nz, .loop
+	ld a, "┐"
+	ld [hl], a
+	ret
+
+Printer_PlaceSideBorders: ; 849e9 (21:49e9)
+	hlcoord 0, 0
+	ld de, SCREEN_WIDTH - 1
+	ld c, SCREEN_HEIGHT
+.loop
+	ld a, "│"
+	ld [hl], a
+	add hl, de
+	ld a, "│"
+	ld [hli], a
+	dec c
+	jr nz, .loop
+	ret
+
+Printer_PlaceBottomBorders: ; 849fc (21:49fc)
+	hlcoord 0, 17
+	ld a, "└"
+	ld [hli], a
+	ld a, "─"
+	ld c, SCREEN_WIDTH - 2
+.loop
+	ld [hli], a
+	dec c
+	jr nz, .loop
+	ld a, "┘"
+	ld [hl], a
+	ret
+
+Printer_PlaceEmptyBoxSlotString: ; 84a0e (21:4a0e)
+	hlcoord 2, 0
+	ld c, $6
+.loop
+	push bc
+	push hl
+	ld de, String84a25
+	call PlaceString
+	pop hl
+	ld bc, 3 * SCREEN_WIDTH
+	add hl, bc
+	pop bc
+	dec c
+	jr nz, .loop
+	ret
+; 84a25 (21:4a25)
+
+String84a25: ; 84a25
+	db "  ------@"
+; 84a2e
--- a/engine/radio2.asm
+++ /dev/null
@@ -1,404 +1,0 @@
-_UpdateRadioStation: ; 9163e (24:563e)
-	jr UpdateRadioStation
-
-Function91640: ; 91640 (24:5640)
-	push bc
-	call .TuningKnob
-	pop bc
-	ld a, [wRadioTuningKnob]
-	ld hl, $6
-	add hl, bc
-	ld [hl], a
-	ret
-
-.TuningKnob: ; 9164e (24:564e)
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .down
-	ld a, [hl]
-	and D_UP
-	jr nz, .up
-	ret
-
-.down
-	ld hl, wRadioTuningKnob
-	ld a, [hl]
-	and a
-	ret z
-rept 2
-	dec [hl]
-endr
-	jr .update
-
-.up
-	ld hl, wRadioTuningKnob
-	ld a, [hl]
-	cp 80
-	ret nc
-rept 2
-	inc [hl]
-endr
-
-.update
-
-UpdateRadioStation: ; 9166f (24:566f)
-	ld hl, wRadioTuningKnob
-	ld d, [hl]
-	ld hl, RadioChannels
-.loop
-	ld a, [hli]
-	cp -1
-	jr z, .nostation
-	cp d
-	jr z, .foundstation
-rept 2
-	inc hl
-endr
-	jr .loop
-
-.nostation
-	call NoRadioStation
-	ret
-
-.foundstation
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld de, .returnafterstation
-	push de
-	jp [hl]
-.returnafterstation
-	ld a, [wc6d9]
-	and a
-	ret z
-	xor a
-	ld [hBGMapMode], a
-	hlcoord 2, 9
-	call PlaceString
-	ld a, $1
-	ld [hBGMapMode], a
-	ret
-; 916a1 (24:56a1)
-
-Function916a1: ; 916a1
-	ld [wc6d9], a
-	ld a, [hli]
-	ld [wc6da], a
-	ld a, [hli]
-	ld [wc6db], 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
-	dbw 32, .LuckyChannel
-	dbw 40, .BuenasPassword
-	dbw 52, .RuinsOfAlphRadio
-	dbw 64, .PlacesAndPeople
-	dbw 72, .LetsAllSing
-	dbw 78, .PokeFluteRadio
-	dbw 80, .EvolutionRadio
-	db $ff
-
-.PkmnTalkAndPokedexShow
-; Pokédex Show in the morning
-; Oak's Pokémon Talk in the afternoon and evening
-	call .InJohto
-	jr nc, .NoSignal
-	ld a, [TimeOfDay]
-	and a
-	jp z, LoadStation_PokedexShow
-	jp LoadStation_OaksPokemonTalk
-
-.PokemonMusic
-	call .InJohto
-	jr nc, .NoSignal
-	jp LoadStation_PokemonMusic
-
-.LuckyChannel
-	call .InJohto
-	jr nc, .NoSignal
-	jp LoadStation_LuckyChannel
-
-.BuenasPassword
-	call .InJohto
-	jr nc, .NoSignal
-	jp LoadStation_BuenasPassword
-
-.RuinsOfAlphRadio
-	ld a, [wc6d8]
-	cp RUINS_OF_ALPH
-	jr nz, .NoSignal
-	jp LoadStation_UnownRadio
-
-.PlacesAndPeople
-	call .InJohto
-	jr c, .NoSignal
-	ld a, [wPokegearFlags]
-	bit 3, a
-	jr z, .NoSignal
-	jp LoadStation_PlacesAndPeople
-
-.LetsAllSing
-	call .InJohto
-	jr c, .NoSignal
-	ld a, [wPokegearFlags]
-	bit 3, a
-	jr z, .NoSignal
-	jp LoadStation_LetsAllSing
-
-.PokeFluteRadio
-	call .InJohto
-	jr c, .NoSignal
-	ld a, [wPokegearFlags]
-	bit 3, a
-	jr z, .NoSignal
-	jp LoadStation_PokeFluteRadio
-
-.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, [wc6d8]
-	cp MAHOGANY_TOWN
-	jr z, .ok
-	cp ROUTE_43
-	jr z, .ok
-	cp LAKE_OF_RAGE
-	jr nz, .NoSignal
-.ok
-	jp LoadStation_EvolutionRadio
-
-.NoSignal
-	call NoRadioStation
-	ret
-
-.InJohto
-; if in Johto or on the S.S. Aqua, set carry
-; otherwise clear carry
-	ld a, [wc6d8]
-	cp FAST_SHIP
-	jr z, .johto
-	cp KANTO_LANDMARK
-	jr c, .johto
-.kanto
-	and a
-	ret
-.johto
-	scf
-	ret
-
-
-
-LoadStation_OaksPokemonTalk: ; 91753 (24:5753)
-	xor a ; OAKS_POKEMON_TALK
-	ld [wd002], a
-	ld [wd005], a
-	ld a, BANK(PlayRadioShow)
-	ld hl, PlayRadioShow
-	call Radio_BackUpFarCallParams
-	ld de, OaksPkmnTalkName
-	ret
-
-LoadStation_PokedexShow: ; 91766 (24:5766)
-	ld a, POKEDEX_SHOW
-	ld [wd002], a
-	xor a
-	ld [wd005], a
-	ld a, BANK(PlayRadioShow)
-	ld hl, PlayRadioShow
-	call Radio_BackUpFarCallParams
-	ld de, PokedexShowName
-	ret
-
-LoadStation_PokemonMusic: ; 9177b (24:577b)
-	ld a, POKEMON_MUSIC
-	ld [wd002], a
-	xor a
-	ld [wd005], a
-	ld a, BANK(PlayRadioShow)
-	ld hl, PlayRadioShow
-	call Radio_BackUpFarCallParams
-	ld de, PokemonMusicName
-	ret
-
-LoadStation_LuckyChannel: ; 91790 (24:5790)
-	ld a, LUCKY_CHANNEL
-	ld [wd002], a
-	xor a
-	ld [wd005], a
-	ld a, BANK(PlayRadioShow)
-	ld hl, PlayRadioShow
-	call Radio_BackUpFarCallParams
-	ld de, LuckyChannelName
-	ret
-
-LoadStation_BuenasPassword: ; 917a5 (24:57a5)
-	ld a, BUENAS_PASSWORD
-	ld [wd002], a
-	xor a
-	ld [wd005], a
-	ld a, BANK(PlayRadioShow)
-	ld hl, PlayRadioShow
-	call Radio_BackUpFarCallParams
-	ld de, NotBuenasPasswordName
-	ld a, [StatusFlags2]
-	bit 0, a
-	ret z
-	ld de, BuenasPasswordName
-	ret
-; 917c3 (24:57c3)
-
-BuenasPasswordName:    db "BUENA'S PASSWORD@"
-NotBuenasPasswordName: db "@"
-
-LoadStation_UnownRadio: ; 917d5 (24:57d5)
-	ld a, UNOWN_RADIO
-	ld [wd002], a
-	xor a
-	ld [wd005], a
-	ld a, BANK(PlayRadioShow)
-	ld hl, PlayRadioShow
-	call Radio_BackUpFarCallParams
-	ld de, UnknownStationName
-	ret
-
-LoadStation_PlacesAndPeople: ; 917ea (24:57ea)
-	ld a, PLACES_AND_PEOPLE
-	ld [wd002], a
-	xor a
-	ld [wd005], a
-	ld a, BANK(PlayRadioShow)
-	ld hl, PlayRadioShow
-	call Radio_BackUpFarCallParams
-	ld de, PlacesAndPeopleName
-	ret
-
-LoadStation_LetsAllSing: ; 917ff (24:57ff)
-	ld a, LETS_ALL_SING
-	ld [wd002], a
-	xor a
-	ld [wd005], a
-	ld a, BANK(PlayRadioShow)
-	ld hl, PlayRadioShow
-	call Radio_BackUpFarCallParams
-	ld de, LetsAllSingName
-	ret
-; 91814 (24:5814)
-
-LoadStation_RocketRadio: ; 91814
-	ld a, ROCKET_RADIO
-	ld [wd002], a
-	xor a
-	ld [wd005], a
-	ld a, BANK(PlayRadioShow)
-	ld hl, PlayRadioShow
-	call Radio_BackUpFarCallParams
-	ld de, LetsAllSingName
-	ret
-; 91829
-
-LoadStation_PokeFluteRadio: ; 91829 (24:5829)
-	ld a, POKE_FLUTE_RADIO
-	ld [wd002], a
-	xor a
-	ld [wd005], a
-	ld a, BANK(PlayRadioShow)
-	ld hl, PlayRadioShow
-	call Radio_BackUpFarCallParams
-	ld de, PokeFluteStationName
-	ret
-
-LoadStation_EvolutionRadio: ; 9183e (24:583e)
-	ld a, EVOLUTION_RADIO
-	ld [wd002], a
-	xor a
-	ld [wd005], a
-	ld a, BANK(PlayRadioShow)
-	ld hl, PlayRadioShow
-	call Radio_BackUpFarCallParams
-	ld de, UnknownStationName
-	ret
-; 91853 (24:5853)
-
-LoadStation_Dummy: ; 91853
-	ret
-
-RadioMusicRestartDE: ; 91854 (24:5854)
-	push de
-	ld a, e
-	ld [wc6dc], a
-	ld de, MUSIC_NONE
-	call PlayMusic
-	pop de
-	ld a, e
-	ld [wMapMusic], a
-	call PlayMusic
-	ret
-
-RadioMusicRestartPokemonChannel: ; 91868 (24:5868)
-	push de
-	ld a, $fe
-	ld [wc6dc], a
-	ld de, MUSIC_NONE
-	call PlayMusic
-	pop de
-	ld de, MUSIC_POKEMON_CHANNEL
-	call PlayMusic
-	ret
-
-Radio_BackUpFarCallParams: ; 9187c (24:587c)
-	ld [wc6d9], a
-	ld a, l
-	ld [wc6da], a
-	ld a, h
-	ld [wc6db], a
-	ret
-
-NoRadioStation: ; 91888 (24:5888)
-	call NoRadioMusic
-	call NoRadioName
-	xor a
-	ld [wc6d9], a
-	ld [wc6da], a
-	ld [wc6db], a
-	ld a, $1
-	ld [hBGMapMode], a
-	ret
-
-NoRadioMusic: ; 9189d (24:589d)
-	ld de, MUSIC_NONE
-	call PlayMusic
-	ld a, $ff
-	ld [wc6dc], a
-	ret
-
-NoRadioName: ; 918a9 (24:58a9)
-	xor a
-	ld [hBGMapMode], a
-	hlcoord 1, 8
-	lb bc, 3, 18
-	call ClearBox
-	hlcoord 0, 12
-	ld bc, $412
-	call TextBox
-	ret
-; 918bf
-
-OaksPkmnTalkName:     db "OAK's <PK><MN> Talk@"
-PokedexShowName:      db "#DEX Show@"
-PokemonMusicName:     db "#MON Music@"
-LuckyChannelName:     db "Lucky Channel@"
-UnknownStationName:   db "?????@"
-PlacesAndPeopleName:  db "Places & People@"
-LetsAllSingName:      db "Let's All Sing!@"
-PokeFluteStationName: db "# FLUTE@"
-; 9191c
--- a/engine/save.asm
+++ b/engine/save.asm
@@ -1,13 +1,13 @@
-Function14a1a: ; 14a1a
+SaveMenu: ; 14a1a
 	call LoadStandardMenuDataHeader
-	callba Function5e9a
+	callba DisplaySaveInfoOnSave
 	call SpeechTextBox
 	call UpdateSprites
-	callba Function4cf45
+	callba SaveMenu_LoadEDTile
 	ld hl, UnknownText_0x15283
 	call SaveTheGame_yesorno
 	jr nz, .refused
-	call CheckForExistingSaveFile
+	call AskOverwriteSaveFile
 	jr c, .refused
 	call SetWRAMStateForSave
 	call _SavingDontTurnOffThePower
@@ -15,29 +15,30 @@
 	call ExitMenu
 	and a
 	ret
+
 .refused
 	call ExitMenu
 	call Functiond90
-	callba Function4cf45
+	callba SaveMenu_LoadEDTile
 	scf
 	ret
 
 Function14a58: ; 14a58
 	call SetWRAMStateForSave
-	callba Function14056
-	callba Function1050d9
+	callba StageRTCTimeForSave
+	callba BackupMysteryGift
 	call SavePokemonData
-	call Function14e13
+	call SaveChecksum
 	call SaveBackupPokemonData
 	call SaveBackupChecksum
-	callba BackupScratchmons
-	callba Function1406a
+	callba BackupPartyMonMail
+	callba SaveRTC
 	call ClearWRAMStateAfterSave
 	ret
 ; 14a83
 
 
-Function14a83: ; 14a83 (5:4a83)
+ChangeBoxSaveGame: ; 14a83 (5:4a83)
 	push de
 	ld hl, UnknownText_0x152a1
 	call MenuTextBox
@@ -44,7 +45,7 @@
 	call YesNoBox
 	call ExitMenu
 	jr c, .refused
-	call CheckForExistingSaveFile
+	call AskOverwriteSaveFile
 	jr c, .refused
 	call SetWRAMStateForSave
 	call SavingDontTurnOffThePower
@@ -61,8 +62,8 @@
 	pop de
 	ret
 
-Function14ab2: ; 14ab2
-	call CheckForExistingSaveFile
+Link_SaveGame: ; 14ab2
+	call AskOverwriteSaveFile
 	jr c, .refused
 	call SetWRAMStateForSave
 	call _SavingDontTurnOffThePower
@@ -73,7 +74,7 @@
 	ret
 ; 14ac2
 
-Function14ac2: ; 14ac2
+MovePkmnWOMail_SaveGame: ; 14ac2
 	call SetWRAMStateForSave
 	push de
 	call SaveBox
@@ -93,39 +94,39 @@
 	ld a, e
 	ld [wCurBox], a
 	ld a, $1
-	ld [wcfcd], a
-	callba Function14056
-	callba Function1050d9
+	ld [wSaveFileExists], a
+	callba StageRTCTimeForSave
+	callba BackupMysteryGift
 	call ValidateSave
 	call SaveOptions
 	call SavePlayerData
 	call SavePokemonData
-	call Function14e13
+	call SaveChecksum
 	call ValidateBackupSave
 	call SaveBackupOptions
 	call SaveBackupPlayerData
 	call SaveBackupPokemonData
 	call SaveBackupChecksum
-	callba BackupScratchmons
+	callba BackupPartyMonMail
 	callba BackupMobileEventIndex
-	callba Function1406a
+	callba SaveRTC
 	call LoadBox
 	call ClearWRAMStateAfterSave
 	ld de, SFX_SAVE
 	call PlaySFX
-	ld c, $18
+	ld c, 24
 	call DelayFrames
 	ret
 ; 14b34
 
-Function14b34: ; 14b34
+StartMovePkmnWOMail_SaveGame: ; 14b34
 	ld hl, UnknownText_0x152a6
 	call MenuTextBox
 	call YesNoBox
 	call ExitMenu
-	jr c, .asm_14b52
-	call CheckForExistingSaveFile
-	jr c, .asm_14b52
+	jr c, .refused
+	call AskOverwriteSaveFile
+	jr c, .refused
 	call SetWRAMStateForSave
 	call _SavingDontTurnOffThePower
 	call ClearWRAMStateAfterSave
@@ -132,7 +133,7 @@
 	and a
 	ret
 
-.asm_14b52
+.refused
 	scf
 	ret
 ; 14b54
@@ -177,8 +178,8 @@
 	ret
 ; 14b89
 
-CheckForExistingSaveFile: ; 14b89
-	ld a, [wcfcd]
+AskOverwriteSaveFile: ; 14b89
+	ld a, [wSaveFileExists]
 	and a
 	jr z, .erase
 	call Function14bcb
@@ -269,15 +270,15 @@
 
 SaveGameData_: ; 14c10
 	ld a, 1
-	ld [wcfcd], a
-	callba Function14056
-	callba Function1050d9
+	ld [wSaveFileExists], a
+	callba StageRTCTimeForSave
+	callba BackupMysteryGift
 	call ValidateSave
 	call SaveOptions
 	call SavePlayerData
 	call SavePokemonData
 	call SaveBox
-	call Function14e13
+	call SaveChecksum
 	call ValidateBackupSave
 	call SaveBackupOptions
 	call SaveBackupPlayerData
@@ -284,16 +285,16 @@
 	call SaveBackupPokemonData
 	call SaveBackupChecksum
 	call UpdateStackTop
-	callba BackupScratchmons
+	callba BackupPartyMonMail
 	callba BackupMobileEventIndex
-	callba Function1406a
-	ld a, BANK(s1_be45)
+	callba SaveRTC
+	ld a, BANK(sBattleTowerChallengeState)
 	call GetSRAMBank
-	ld a, [s1_be45]
+	ld a, [sBattleTowerChallengeState]
 	cp $4
 	jr nz, .ok
 	xor a
-	ld [s1_be45], a
+	ld [sBattleTowerChallengeState], a
 .ok
 	call CloseSRAM
 	ret
@@ -371,7 +372,7 @@
 	call EraseHallOfFame
 	call EraseLinkBattleStats
 	call EraseMysteryGift
-	call Function14d68
+	call SaveData
 	call Function14d5c
 	ld a, BANK(sStackTop)
 	call GetSRAMBank
@@ -395,10 +396,10 @@
 ; 14cf4
 
 EraseMysteryGift: ; 14cf4
-	ld a, BANK(s0_abe4)
+	ld a, BANK(sBackupMysteryGiftItem)
 	call GetSRAMBank
-	ld hl, s0_abe4
-	ld bc, s0_abe4End - s0_abe4
+	ld hl, sBackupMysteryGiftItem
+	ld bc, sBackupMysteryGiftItemEnd - sBackupMysteryGiftItem
 	xor a
 	call ByteFill
 	jp CloseSRAM
@@ -437,15 +438,15 @@
 ; 14d5c
 
 Function14d5c: ; 14d5c
-	ld a, BANK(s1_be45)
+	ld a, BANK(sBattleTowerChallengeState)
 	call GetSRAMBank
 	xor a
-	ld [s1_be45], a
+	ld [sBattleTowerChallengeState], a
 	jp CloseSRAM
 ; 14d68
 
-Function14d68: ; 14d68
-	call Function1509a
+SaveData: ; 14d68
+	call _SaveData
 	ret
 ; 14d6c
 
@@ -496,9 +497,9 @@
 ValidateSave: ; 14da9
 	ld a, BANK(s1_a008)
 	call GetSRAMBank
-	ld a, $63
+	ld a, 99
 	ld [s1_a008], a
-	ld a, $7f
+	ld a, " "
 	ld [s1_ad0f], a
 	jp CloseSRAM
 ; 14dbb
@@ -547,7 +548,7 @@
 	ret
 ; 14e13
 
-Function14e13: ; 14e13
+SaveChecksum: ; 14e13
 	ld hl, sGameData
 	ld bc, sGameDataEnd - sGameData
 	ld a, BANK(sGameData)
@@ -564,9 +565,9 @@
 ValidateBackupSave: ; 14e2d
 	ld a, BANK(s0_b208)
 	call GetSRAMBank
-	ld a, $63
+	ld a, 99
 	ld [s0_b208], a
-	ld a, $7f
+	ld a, " "
 	ld [s0_bf0f], a
 	call CloseSRAM
 	ret
@@ -630,9 +631,9 @@
 	call LoadPlayerData
 	call LoadPokemonData
 	call LoadBox
-	callba RestoreScratchmons
+	callba RestorePartyMonMail
 	callba RestoreMobileEventIndex
-	callba Function1050ea
+	callba RestoreMysteryGift
 	call ValidateBackupSave
 	call SaveBackupOptions
 	call SaveBackupPlayerData
@@ -647,14 +648,14 @@
 	call LoadBackupPlayerData
 	call LoadBackupPokemonData
 	call LoadBox
-	callba RestoreScratchmons
+	callba RestorePartyMonMail
 	callba RestoreMobileEventIndex
-	callba Function1050ea
+	callba RestoreMysteryGift
 	call ValidateSave
 	call SaveOptions
 	call SavePlayerData
 	call SavePokemonData
-	call Function14e13
+	call SaveChecksum
 	and a
 	ret
 
@@ -661,7 +662,7 @@
 .corrupt
 	ld a, [Options]
 	push af
-	set 4, a
+	set NO_TEXT_SCROLL, a
 	ld [Options], a
 	ld hl, UnknownText_0x1529c
 	call PrintText
@@ -671,11 +672,11 @@
 	ret
 
 
-Function14f1c: ; 14f1c
+TryLoadSaveData: ; 14f1c
 	xor a
-	ld [wcfcd], a
-	call Function14f84
-	ld a, [wcfcd]
+	ld [wSaveFileExists], a
+	call CheckPrimarySaveFile
+	ld a, [wSaveFileExists]
 	and a
 	jr z, .backup
 
@@ -693,8 +694,8 @@
 	ret
 
 .backup
-	call Function14faf
-	ld a, [wcfcd]
+	call CheckBackupSaveFile
+	ld a, [wSaveFileExists]
 	and a
 	jr z, .corrupt
 
@@ -716,7 +717,7 @@
 	ld de, Options
 	ld bc, OptionsEnd - Options
 	call CopyBytes
-	call Function67e
+	call PanicResetClock
 	ret
 ; 14f7c
 
@@ -731,14 +732,14 @@
 	db $00
 ; 14f84
 
-Function14f84: ; 14f84
+CheckPrimarySaveFile: ; 14f84
 	ld a, BANK(s1_a008)
 	call GetSRAMBank
 	ld a, [s1_a008]
-	cp $63
+	cp 99
 	jr nz, .nope
 	ld a, [s1_ad0f]
-	cp $7f
+	cp " "
 	jr nz, .nope
 	ld hl, sOptions
 	ld de, Options
@@ -746,7 +747,7 @@
 	call CopyBytes
 	call CloseSRAM
 	ld a, $1
-	ld [wcfcd], a
+	ld [wSaveFileExists], a
 
 .nope
 	call CloseSRAM
@@ -753,14 +754,14 @@
 	ret
 ; 14faf
 
-Function14faf: ; 14faf
+CheckBackupSaveFile: ; 14faf
 	ld a, BANK(s0_b208)
 	call GetSRAMBank
 	ld a, [s0_b208]
-	cp $63
+	cp 99
 	jr nz, .nope
 	ld a, [s0_bf0f]
-	cp $7f
+	cp " "
 	jr nz, .nope
 	ld hl, sBackupOptions
 	ld de, Options
@@ -767,7 +768,7 @@
 	ld bc, OptionsEnd - Options
 	call CopyBytes
 	ld a, $2
-	ld [wcfcd], a
+	ld [wSaveFileExists], a
 
 .nope
 	call CloseSRAM
@@ -787,14 +788,14 @@
 	ld bc, wMapDataEnd - wMapData
 	call CopyBytes
 	call CloseSRAM
-	ld a, BANK(s1_be45)
+	ld a, BANK(sBattleTowerChallengeState)
 	call GetSRAMBank
-	ld a, [s1_be45]
+	ld a, [sBattleTowerChallengeState]
 	cp $4
-	jr nz, .asm_15008
+	jr nz, .not_4
 	ld a, $3
-	ld [s1_be45], a
-.asm_15008
+	ld [sBattleTowerChallengeState], a
+.not_4
 	call CloseSRAM
 	ret
 
@@ -822,10 +823,10 @@
 	call Checksum
 	ld a, [sChecksum + 0]
 	cp e
-	jr nz, .asm_15040
+	jr nz, .fail
 	ld a, [sChecksum + 1]
 	cp d
-.asm_15040
+.fail
 	push af
 	call CloseSRAM
 	pop af
@@ -863,10 +864,10 @@
 	call Checksum
 	ld a, [sBackupChecksum + 0]
 	cp e
-	jr nz, .asm_15094
+	jr nz, .fail
 	ld a, [sBackupChecksum + 1]
 	cp d
-.asm_15094
+.fail
 	push af
 	call CloseSRAM
 	pop af
@@ -873,7 +874,7 @@
 	ret
 
 
-Function1509a: ; 1509a
+_SaveData: ; 1509a
 	ld a, BANK(sCrystalData)
 	call GetSRAMBank
 	ld hl, wCrystalData
--- a/engine/scripting.asm
+++ b/engine/scripting.asm
@@ -69,13 +69,13 @@
 ; 96cb1
 
 
-ScriptCommandTable: ; 0x96cb1
-	dw Script_2call
-	dw Script_3call
-	dw Script_2ptcall
-	dw Script_2jump
-	dw Script_3jump
-	dw Script_2ptjump
+ScriptCommandTable: ; 96cb1
+	dw Script_scall
+	dw Script_farscall
+	dw Script_ptcall
+	dw Script_jump
+	dw Script_farjump
+	dw Script_ptjump
 	dw Script_if_equal
 	dw Script_if_not_equal
 	dw Script_iffalse
@@ -84,9 +84,9 @@
 	dw Script_if_less_than
 	dw Script_jumpstd
 	dw Script_callstd
-	dw Script_3callasm
+	dw Script_callasm
 	dw Script_special
-	dw Script_2ptcallasm
+	dw Script_ptcallasm
 	dw Script_checkmaptriggers
 	dw Script_domaptrigger
 	dw Script_checktriggers
@@ -144,9 +144,9 @@
 	dw Script_loadfont
 	dw Script_refreshscreen
 	dw Script_loadmovesprites
-	dw Script_loadbytec1ce
-	dw Script_3writetext
-	dw Script_2writetext
+	dw Script_loadbytec2cf
+	dw Script_farwritetext
+	dw Script_writetext
 	dw Script_repeattext
 	dw Script_yesorno
 	dw Script_loadmenudata
@@ -153,7 +153,7 @@
 	dw Script_writebackup
 	dw Script_jumptextfaceplayer
 IF _CRYSTAL
-	dw Script_3jumptext
+	dw Script_farjumptext
 ENDC
 	dw Script_jumptext
 	dw Script_closetext
@@ -241,28 +241,28 @@
 	dw Script_trainerclassname
 	dw Script_name
 	dw Script_wait
-	dw Script_unknown0xa9
-; 0x96e05
+	dw Script_check_save
+; 96e05
 
-StartScript: ; 0x96e05
+StartScript: ; 96e05
 	ld hl, ScriptFlags
 	set SCRIPT_RUNNING, [hl]
 	ret
-; 0x96e0b
+; 96e0b
 
-CheckScript: ; 0x96e0b
+CheckScript: ; 96e0b
 	ld hl, ScriptFlags
 	bit SCRIPT_RUNNING, [hl]
 	ret
-; 0x96e11
+; 96e11
 
-StopScript: ; 0x96e11
+StopScript: ; 96e11
 	ld hl, ScriptFlags
 	res SCRIPT_RUNNING, [hl]
 	ret
-; 0x96e17
+; 96e17
 
-Script_3callasm: ; 0x96e17
+Script_callasm: ; 96e17
 ; script command 0xe
 ; parameters:
 ;     asm (AsmPointerParam)
@@ -276,9 +276,9 @@
 	ld a, b
 	rst FarCall
 	ret
-; 0x96e26
+; 96e26
 
-Script_special: ; 0x96e26
+Script_special: ; 96e26
 ; script command 0xf
 ; parameters:
 ;     predefined_script (MultiByteParam)
@@ -289,9 +289,9 @@
 	ld d, a
 	callba Special
 	ret
-; 0x96e35
+; 96e35
 
-Script_2ptcallasm: ; 0x96e35
+Script_ptcallasm: ; 96e35
 ; script command 0x10
 ; parameters:
 ;     asm (PointerToAsmPointerParam)
@@ -308,9 +308,9 @@
 	ld a, b
 	rst FarCall
 	ret
-; 0x96e45
+; 96e45
 
-Script_jumptextfaceplayer: ; 0x96e45
+Script_jumptextfaceplayer: ; 96e45
 ; script command 0x51
 ; parameters:
 ;     text_pointer (RawTextPointerLabelParam)
@@ -324,9 +324,9 @@
 	ld b, BANK(JumpTextFacePlayerScript)
 	ld hl, JumpTextFacePlayerScript
 	jp ScriptJump
-; 0x96e5f
+; 96e5f
 
-Script_jumptext: ; 0x96e5f
+Script_jumptext: ; 96e5f
 ; script command 0x53
 ; parameters:
 ;     text_pointer (RawTextPointerLabelParam)
@@ -340,22 +340,22 @@
 	ld b, BANK(JumpTextScript)
 	ld hl, JumpTextScript
 	jp ScriptJump
-; 0x96e79
+; 96e79
 
-JumpTextFacePlayerScript: ; 0x96e79
+JumpTextFacePlayerScript: ; 96e79
 	faceplayer
-JumpTextScript: ; 0x96e7a
+JumpTextScript: ; 96e7a
 	loadfont
 	repeattext -1, -1
 	closetext
 	loadmovesprites
 	end
-; 0x96e81
+; 96e81
 
 
 IF _CRYSTAL
 
-Script_3jumptext: ; 0x96e81
+Script_farjumptext: ; 96e81
 ; script command 0x52
 ; parameters:
 ;     text_pointer (PointerLabelBeforeBank)
@@ -369,12 +369,12 @@
 	ld b, BANK(JumpTextScript)
 	ld hl, JumpTextScript
 	jp ScriptJump
-; 0x96e9b
+; 96e9b
 
 ENDC
 
 
-Script_2writetext: ; 0x96e9b
+Script_writetext: ; 96e9b
 ; script command 0x4c
 ; parameters:
 ;     text_pointer (RawTextPointerLabelParam)
@@ -387,9 +387,9 @@
 	ld b, a
 	call MapTextbox
 	ret
-; 0x96eab
+; 96eab
 
-Script_3writetext: ; 0x96eab
+Script_farwritetext: ; 96eab
 ; script command 0x4b
 ; parameters:
 ;     text_pointer (PointerLabelBeforeBank)
@@ -402,9 +402,9 @@
 	ld h, a
 	call MapTextbox
 	ret
-; 0x96ebb
+; 96ebb
 
-Script_repeattext: ; 0x96ebb
+Script_repeattext: ; 96ebb
 ; script command 0x4d
 ; parameters:
 ;     byte (SingleByteParam)
@@ -415,10 +415,10 @@
 	call GetScriptByte
 	ld h, a
 	cp -1
-	jr nz, .done ; 0x96ec5 $11
+	jr nz, .done
 	ld a, l
 	cp -1
-	jr nz, .done ; 0x96eca $c
+	jr nz, .done
 	ld hl, wd44e
 	ld a, [hli]
 	ld b, a
@@ -429,15 +429,15 @@
 	ret
 .done
 	ret
-; 0x96ed9
+; 96ed9
 
-Script_closetext: ; 0x96ed9
+Script_closetext: ; 96ed9
 ; script command 0x54
 
 	jp CloseText
-; 0x96edc
+; 96edc
 
-Script_keeptextopen: ; 0x96edc
+Script_keeptextopen: ; 96edc
 ; script command 0x55
 
 	ld a, [hOAMUpdate]
@@ -449,21 +449,21 @@
 	pop af
 	ld [hOAMUpdate], a
 	ret
-; 0x96eed
+; 96eed
 
-Script_yesorno: ; 0x96eed
+Script_yesorno: ; 96eed
 ; script command 0x4e
 
 	call YesNoBox
 	ld a, 0
-	jr c, .no ; 0x96ef2 $2
+	jr c, .no
 	ld a, 1
 .no
 	ld [ScriptVar], a
 	ret
-; 0x96efa
+; 96efa
 
-Script_loadmenudata: ; 0x96efa
+Script_loadmenudata: ; 96efa
 ; script command 0x4f
 ; parameters:
 ;     data (MenuDataPointerParam)
@@ -477,17 +477,17 @@
 	call Call_a_de
 	call UpdateSprites
 	ret
-; 0x96f0f
+; 96f0f
 
-Script_writebackup: ; 0x96f0f
+Script_writebackup: ; 96f0f
 ; script command 0x50
 
 	call WriteBackup
 	call UpdateSprites
 	ret
-; 0x96f16
+; 96f16
 
-Script_pokepic: ; 0x96f16
+Script_pokepic: ; 96f16
 ; script command 0x56
 ; parameters:
 ;     pokemon (PokemonParam)
@@ -500,16 +500,16 @@
 	ld [CurPartySpecies], a
 	callba Pokepic
 	ret
-; 0x96f29
+; 96f29
 
-Script_pokepicyesorno: ; 0x96f29
+Script_pokepicyesorno: ; 96f29
 ; script command 0x57
 
 	callba PokepicYesOrNo
 	ret
-; 0x96f30
+; 96f30
 
-Script_interpretmenu2: ; 0x96f30
+Script_interpretmenu2: ; 96f30
 ; script command 0x59
 
 	ld a, [ScriptBank]
@@ -521,9 +521,9 @@
 .ok
 	ld [ScriptVar], a
 	ret
-; 0x96f41
+; 96f41
 
-Script_interpretmenu: ; 0x96f41
+Script_interpretmenu: ; 96f41
 ; script command 0x58
 
 	ld a, [ScriptBank]
@@ -535,9 +535,9 @@
 .ok
 	ld [ScriptVar], a
 	ret
-; 0x96f52
+; 96f52
 
-Script_battletowertext: ; 0x96f52
+Script_battletowertext: ; 96f52
 ; script command 0xa4
 ; parameters:
 ;     pointer (PointerLabelBeforeBank)
@@ -548,9 +548,9 @@
 	ld c, a
 	callba BattleTowerText
 	ret
-; 0x96f60
+; 96f60
 
-Script_verbosegiveitem: ; 0x96f60
+Script_verbosegiveitem: ; 96f60
 ; script command 0x9e
 ; parameters:
 ;     item (ItemLabelByte)
@@ -564,15 +564,15 @@
 	ld b, BANK(GiveItemScript)
 	ld de, GiveItemScript
 	jp ScriptCall
-; 0x96f76
+; 96f76
 
 
-Function96f76: ; 96f76
+ret_96f76: ; 96f76
 	ret
 ; 96f77
 
 GiveItemScript: ; 96f77
-	callasm Function96f76
+	callasm ret_96f76
 	writetext ReceivedItemText
 	iffalse .Full
 	waitbutton
@@ -593,7 +593,7 @@
 ; 96f8e
 
 
-Script_verbosegiveitem2: ; 0x96f8e
+Script_verbosegiveitem2: ; 96f8e
 ; script command 0x9f
 ; parameters:
 ;     item (ItemLabelByte)
@@ -623,9 +623,9 @@
 	ld b, BANK(GiveItemScript)
 	ld de, GiveItemScript
 	jp ScriptCall
-; 0x96fc6
+; 96fc6
 
-Script_itemnotify: ; 0x96fc6
+Script_itemnotify: ; 96fc6
 ; script command 0x45
 
 	call GetPocketName
@@ -634,9 +634,9 @@
 	ld hl, PutItemInPocketText
 	call MapTextbox
 	ret
-; 0x96fd5
+; 96fd5
 
-Script_pocketisfull: ; 0x96fd5
+Script_pocketisfull: ; 96fd5
 ; script command 0x46
 
 	call GetPocketName
@@ -645,9 +645,9 @@
 	ld hl, PocketIsFullText
 	call MapTextbox
 	ret
-; 0x96fe4
+; 96fe4
 
-Script_specialsound: ; 0x96fe4
+Script_specialsound: ; 96fe4
 ; script command 0x88
 
 	callba CheckItemPocket
@@ -660,7 +660,7 @@
 	call PlaySFX
 	call WaitSFX
 	ret
-; 0x96ffe
+; 96ffe
 
 
 GetPocketName: ; 96ffe
@@ -715,7 +715,7 @@
 ; 97065
 
 
-Script_pokemart: ; 0x97065
+Script_pokemart: ; 97065
 ; script command 0x94
 ; parameters:
 ;     dialog_id (SingleByteParam)
@@ -731,9 +731,9 @@
 	ld b, a
 	callba OpenMartDialog
 	ret
-; 0x9707c
+; 9707c
 
-Script_elevator: ; 0x9707c
+Script_elevator: ; 9707c
 ; script command 0x95
 ; parameters:
 ;     floor_list_pointer (PointerLabelParam)
@@ -751,9 +751,9 @@
 	ld a, $1
 	ld [ScriptVar], a
 	ret
-; 0x97099
+; 97099
 
-Script_trade: ; 0x97099
+Script_trade: ; 97099
 ; script command 0x96
 ; parameters:
 ;     trade_id (SingleByteParam)
@@ -762,9 +762,9 @@
 	ld e, a
 	callba NPCTrade
 	ret
-; 0x970a4
+; 970a4
 
-Script_phonecall: ; 0x970a4
+Script_phonecall: ; 970a4
 ; script command 0x98
 ; parameters:
 ;     caller_name (RawTextPointerLabelParam)
@@ -777,31 +777,31 @@
 	ld b, a
 	callba PhoneCall
 	ret
-; 0x970b7
+; 970b7
 
-Script_hangup: ; 0x970b7
+Script_hangup: ; 970b7
 ; script command 0x99
 
 	callba HangUp
 	ret
-; 0x970be
+; 970be
 
-Script_askforphonenumber: ; 0x970be
+Script_askforphonenumber: ; 970be
 ; script command 0x97
 ; parameters:
 ;     number (SingleByteParam)
 
 	call YesNoBox
-	jr c, .refused ; 0x970c1 $13
+	jr c, .refused
 	call GetScriptByte
 	ld c, a
 	callba AddPhoneNumber
-	jr c, .phonefull ; 0x970cd $3
+	jr c, .phonefull
 	xor a
-	jr .done ; 0x970d0 $9
+	jr .done
 .phonefull
 	ld a, 1
-	jr .done ; 0x970d4 $5
+	jr .done
 .refused
 	call GetScriptByte
 	ld a, 2
@@ -808,9 +808,9 @@
 .done
 	ld [ScriptVar], a
 	ret
-; 0x970df
+; 970df
 
-Script_describedecoration: ; 0x970df
+Script_describedecoration: ; 970df
 ; script command 0x9a
 ; parameters:
 ;     byte (SingleByteParam)
@@ -821,9 +821,9 @@
 	ld h, d
 	ld l, e
 	jp ScriptJump
-; 0x970ee
+; 970ee
 
-Script_fruittree: ; 0x970ee
+Script_fruittree: ; 970ee
 ; script command 0x9b
 ; parameters:
 ;     tree_id (SingleByteParam)
@@ -833,9 +833,9 @@
 	ld b, BANK(FruitTreeScript)
 	ld hl, FruitTreeScript
 	jp ScriptJump
-; 0x970fc
+; 970fc
 
-Script_loadwilddata: ; 0x970fc
+Script_loadwilddata: ; 970fc
 ; script command 0xa0
 ; parameters:
 ;     flag (SingleByteParam)
@@ -850,9 +850,9 @@
 	ld e, a
 	callba LoadWildData
 	ret
-; 0x9710f
+; 9710f
 
-Script_trainertext: ; 0x9710f
+Script_trainertext: ; 9710f
 ; script command 0x62
 ; parameters:
 ;     which_text (SingleByteParam)
@@ -871,9 +871,9 @@
 	ld b, a
 	call MapTextbox
 	ret
-; 0x97125
+; 97125
 
-Script_scripttalkafter: ; 0x97125
+Script_scripttalkafter: ; 97125
 ; script command 0x65
 
 	ld hl, wd04b
@@ -883,9 +883,9 @@
 	ld a, [EngineBuffer1]
 	ld b, a
 	jp ScriptJump
-; 0x97132
+; 97132
 
-Script_trainerstatus: ; 0x97132
+Script_trainerstatus: ; 97132
 ; script command 0x63
 ; parameters:
 ;     action (SingleByteParam)
@@ -905,9 +905,9 @@
 	ld a, 1
 	ld [ScriptVar], a
 	ret
-; 0x9714c
+; 9714c
 
-Script_winlosstext: ; 0x9714c
+Script_winlosstext: ; 9714c
 ; script command 0x64
 ; parameters:
 ;     win_text_pointer (TextPointerLabelParam)
@@ -924,31 +924,31 @@
 	call GetScriptByte
 	ld [hli], a
 	ret
-; 0x97163
+; 97163
 
-Script_talkaftercancel: ; 0x97163
+Script_talkaftercancel: ; 97163
 ; script command 0x66
 
-	ld a, [wd04d]
+	ld a, [wRunningTrainerBattleScript]
 	and a
 	ret z
 	jp Script_end
-; 0x9716b
+; 9716b
 
-Script_talkaftercheck: ; 0x9716b
+Script_talkaftercheck: ; 9716b
 ; script command 0x67
 
 	ld a, 1
 	ld [ScriptVar], a
-	ld a, [wd04d]
+	ld a, [wRunningTrainerBattleScript]
 	and a
 	ret nz
 	xor a
 	ld [ScriptVar], a
 	ret
-; 0x9717a
+; 9717a
 
-Script_playrammusic: ; 0x9717a
+Script_playrammusic: ; 9717a
 ; script command 0x80
 
 	ld a, [OtherTrainerClass]
@@ -955,16 +955,16 @@
 	ld e, a
 	callba PlayTrainerEncounterMusic
 	ret
-; 0x97185
+; 97185
 
-Script_playmapmusic: ; 0x97185
+Script_playmapmusic: ; 97185
 ; script command 0x82
 
 	call PlayMapMusic
 	ret
-; 0x97189
+; 97189
 
-Script_playmusic: ; 0x97189
+Script_playmusic: ; 97189
 ; script command 0x7f
 ; parameters:
 ;     music_pointer (MultiByteParam)
@@ -980,9 +980,9 @@
 	ld d, a
 	call PlayMusic
 	ret
-; 0x971a2
+; 971a2
 
-Script_musicfadeout: ; 0x971a2
+Script_musicfadeout: ; 971a2
 ; script command 0x81
 ; parameters:
 ;     music (MultiByteParam)
@@ -996,9 +996,9 @@
 	and $7f
 	ld [MusicFade], a
 	ret
-; 0x971b7
+; 971b7
 
-Script_playsound: ; 0x971b7
+Script_playsound: ; 971b7
 ; script command 0x85
 ; parameters:
 ;     sound_pointer (MultiByteParam)
@@ -1009,24 +1009,24 @@
 	ld d, a
 	call PlaySFX
 	ret
-; 0x971c3
+; 971c3
 
-Script_waitbutton: ; 0x971c3
+Script_waitbutton: ; 971c3
 ; script command 0x86
 
 	call WaitSFX
 	ret
-; 0x971c7
+; 971c7
 
-Script_warpsound: ; 0x971c7
+Script_warpsound: ; 971c7
 ; script command 0x87
 
 	callba Function14a07
 	call PlaySFX
 	ret
-; 0x971d1
+; 971d1
 
-Script_cry: ; 0x971d1
+Script_cry: ; 971d1
 ; script command 0x84
 ; parameters:
 ;     cry_id (MultiByteParam)
@@ -1041,9 +1041,9 @@
 .ok
 	call PlayCry
 	ret
-; 0x971e3
+; 971e3
 
-GetScriptPerson: ; 0x971e3
+GetScriptPerson: ; 971e3
 	and a
 	ret z
 	cp LAST_TALKED
@@ -1050,9 +1050,9 @@
 	ret z
 	dec a
 	ret
-; 0x971ea
+; 971ea
 
-Script_setlasttalked: ; 0x971ea
+Script_setlasttalked: ; 971ea
 ; script command 0x68
 ; parameters:
 ;     person (SingleByteParam)
@@ -1061,9 +1061,9 @@
 	call GetScriptPerson
 	ld [hLastTalked], a
 	ret
-; 0x971f3
+; 971f3
 
-Script_applymovement: ; 0x971f3
+Script_applymovement: ; 971f3
 ; script command 0x69
 ; parameters:
 ;     person (SingleByteParam)
@@ -1097,14 +1097,14 @@
 	ld [ScriptMode], a
 	call StopScript
 	ret
-; 0x97221
+; 97221
 
-SetFlagsForMovement_2: ; 0x97221
+SetFlagsForMovement_2: ; 97221
 	callba _SetFlagsForMovement_2
 	ret
-; 0x97228
+; 97228
 
-Script_applymovement2: ; 0x97228
+Script_applymovement2: ; 97228
 ; apply movement to last talked
 ; script command 0x6a
 ; parameters:
@@ -1113,9 +1113,9 @@
 	ld a, [hLastTalked]
 	ld c, a
 	jp ApplyMovement
-; 0x9722e
+; 9722e
 
-Script_faceplayer: ; 0x9722e
+Script_faceplayer: ; 9722e
 ; script command 0x6b
 
 	ld a, [hLastTalked]
@@ -1134,9 +1134,9 @@
 	ld d, a
 	call ApplyPersonFacing
 	ret
-; 0x97248
+; 97248
 
-Script_faceperson: ; 0x97248
+Script_faceperson: ; 97248
 ; script command 0x6c
 ; parameters:
 ;     person1 (SingleByteParam)
@@ -1168,9 +1168,9 @@
 	ld d, c
 	call ApplyPersonFacing
 	ret
-; 0x97274
+; 97274
 
-Script_spriteface: ; 0x97274
+Script_spriteface: ; 97274
 ; script command 0x76
 ; parameters:
 ;     person (SingleByteParam)
@@ -1190,13 +1190,13 @@
 	ld e, a
 	call ApplyPersonFacing
 	ret
-; 0x9728b
+; 9728b
 
-ApplyPersonFacing: ; 0x9728b
+ApplyPersonFacing: ; 9728b
 	ld a, d
 	push de
 	call CheckObjectVisibility
-	jr c, .not_visible ; 0x97290 $27
+	jr c, .not_visible
 	ld hl, OBJECT_SPRITE
 	add hl, bc
 	ld a, [hl]
@@ -1207,13 +1207,13 @@
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
 	bit 2, [hl]
-	jr nz, .not_visible ; 0x972a4 $13
+	jr nz, .not_visible
 	pop de
 	ld a, e
 	call SetSpriteDirection
 	ld hl, VramState
 	bit 6, [hl]
-	jr nz, .text_state ; 0x972b0 $3
+	jr nz, .text_state
 	call .DisableTextTiles
 .text_state
 	call UpdateSprites
@@ -1223,9 +1223,9 @@
 	pop de
 	scf
 	ret
-; 0x972bc
+; 972bc
 
-.DisableTextTiles: ; 0x972bc
+.DisableTextTiles: ; 972bc
 	call LoadMapPart
 	hlcoord 0, 0
 	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
@@ -1235,11 +1235,11 @@
 	dec bc
 	ld a, b
 	or c
-	jr nz, .loop ; 0x972cb $f8
+	jr nz, .loop
 	ret
-; 0x972ce
+; 972ce
 
-Script_variablesprite: ; 0x972ce
+Script_variablesprite: ; 972ce
 ; script command 0x6d
 ; parameters:
 ;     byte (SingleByteParam)
@@ -1253,9 +1253,9 @@
 	call GetScriptByte
 	ld [hl], a
 	ret
-; 0x972dd
+; 972dd
 
-Script_appear: ; 0x972dd
+Script_appear: ; 972dd
 ; script command 0x6f
 ; parameters:
 ;     person (SingleByteParam)
@@ -1267,9 +1267,9 @@
 	ld b, 0 ; clear
 	call ApplyEventActionAppearDisappear
 	ret
-; 0x972ee
+; 972ee
 
-Script_disappear: ; 0x972ee
+Script_disappear: ; 972ee
 ; script command 0x6e
 ; parameters:
 ;     person (SingleByteParam)
@@ -1284,11 +1284,11 @@
 	ld a, [hMapObjectIndexBuffer]
 	ld b, 1 ; set
 	call ApplyEventActionAppearDisappear
-	callba RefreshMapAppearDisappear
+	callba _UpdateSprites
 	ret
-; 0x9730b
+; 9730b
 
-ApplyEventActionAppearDisappear: ; 0x9730b
+ApplyEventActionAppearDisappear: ; 9730b
 	push bc
 	call GetMapObject
 	ld hl, MAPOBJECT_EVENT_FLAG
@@ -1299,17 +1299,17 @@
 	ld d, [hl]
 	ld a, -1
 	cp e
-	jr nz, .okay ; 0x9731a $5
+	jr nz, .okay
 	cp d
-	jr nz, .okay ; 0x9731d $2
+	jr nz, .okay
 	xor a
 	ret
 .okay
 	call EventFlagAction
 	ret
-; 0x97325
+; 97325
 
-Script_follow: ; 0x97325
+Script_follow: ; 97325
 ; script command 0x70
 ; parameters:
 ;     person2 (SingleByteParam)
@@ -1323,16 +1323,16 @@
 	ld c, a
 	callba StartFollow
 	ret
-; 0x9733a
+; 9733a
 
-Script_stopfollow: ; 0x9733a
+Script_stopfollow: ; 9733a
 ; script command 0x71
 
 	callba StopFollow
 	ret
-; 0x97341
+; 97341
 
-Script_moveperson: ; 0x97341
+Script_moveperson: ; 97341
 ; script command 0x72
 ; parameters:
 ;     person (SingleByteParam)
@@ -1350,9 +1350,9 @@
 	ld e, a
 	callba CopyDECoordsToMapObject
 	ret
-; 0x9735b
+; 9735b
 
-Script_writepersonxy: ; 0x9735b
+Script_writepersonxy: ; 9735b
 ; script command 0x73
 ; parameters:
 ;     person (SingleByteParam)
@@ -1366,9 +1366,9 @@
 	ld b, a
 	callba WritePersonXY
 	ret
-; 0x9736f
+; 9736f
 
-Script_follownotexact: ; 0x9736f
+Script_follownotexact: ; 9736f
 ; script command 0x77
 ; parameters:
 ;     person2 (SingleByteParam)
@@ -1382,9 +1382,9 @@
 	ld c, a
 	callba FollowNotExact
 	ret
-; 0x97384
+; 97384
 
-Script_loademote: ; 0x97384
+Script_loademote: ; 97384
 ; script command 0x74
 ; parameters:
 ;     bubble (SingleByteParam)
@@ -1391,15 +1391,15 @@
 
 	call GetScriptByte
 	cp -1
-	jr nz, .not_var_emote ; 0x97389 $3
+	jr nz, .not_var_emote
 	ld a, [ScriptVar]
 .not_var_emote
 	ld c, a
 	callba LoadEmote
 	ret
-; 0x97396
+; 97396
 
-Script_showemote: ; 0x97396
+Script_showemote: ; 97396
 ; script command 0x75
 ; parameters:
 ;     bubble (SingleByteParam)
@@ -1419,7 +1419,7 @@
 	ld b, BANK(ShowEmoteScript)
 	ld de, ShowEmoteScript
 	jp ScriptCall
-; 0x973b6
+; 973b6
 
 ShowEmoteScript: ; 973b6
 	loademote EMOTE_MEM
@@ -1440,7 +1440,7 @@
 ; 973c7
 
 
-Script_earthquake: ; 0x973c7
+Script_earthquake: ; 973c7
 ; script command 0x78
 ; parameters:
 ;     param (DecimalParam)
@@ -1456,7 +1456,7 @@
 	ld b, BANK(.script)
 	ld de, .script
 	jp ScriptCall
-; 0x973e6
+; 973e6
 
 .script: ; 973e6
 	applymovement PLAYER, wd002
@@ -1471,7 +1471,7 @@
 ; 973f0
 
 
-Script_loadpikachudata: ; 0x973f0
+Script_loadpikachudata: ; 973f0
 ; script command 0x5a
 
 	ld a, PIKACHU
@@ -1479,29 +1479,29 @@
 	ld a, 5
 	ld [CurPartyLevel], a
 	ret
-; 0x973fb
+; 973fb
 
-Script_battlecheck: ; 0x973fb
+Script_battlecheck: ; 973fb
 ; script command 0x5b
 
 	xor a
-	ld [wd459], a
+	ld [wBattleScriptFlags], a
 	ret
-; 0x97400
+; 97400
 
-Script_loadtrainerdata: ; 0x97400
+Script_loadtrainerdata: ; 97400
 ; script command 0x5c
 
 	ld a, (1 << 7) | 1
-	ld [wd459], a
+	ld [wBattleScriptFlags], a
 	ld a, [WalkingDirection]
 	ld [OtherTrainerClass], a
 	ld a, [FacingDirection]
 	ld [OtherTrainerID], a
 	ret
-; 0x97412
+; 97412
 
-Script_loadpokedata: ; 0x97412
+Script_loadpokedata: ; 97412
 ; script command 0x5d
 ; parameters:
 ;     pokemon (PokemonParam)
@@ -1508,15 +1508,15 @@
 ;     level (DecimalParam)
 
 	ld a, (1 << 7)
-	ld [wd459], a
+	ld [wBattleScriptFlags], a
 	call GetScriptByte
 	ld [TempWildMonSpecies], a
 	call GetScriptByte
 	ld [CurPartyLevel], a
 	ret
-; 0x97424
+; 97424
 
-Script_loadtrainer: ; 0x97424
+Script_loadtrainer: ; 97424
 ; script command 0x5e
 ; parameters:
 ;     trainer_group (TrainerGroupParam)
@@ -1523,15 +1523,15 @@
 ;     trainer_id (TrainerIdParam)
 
 	ld a, (1 << 7) | 1
-	ld [wd459], a
+	ld [wBattleScriptFlags], a
 	call GetScriptByte
 	ld [OtherTrainerClass], a
 	call GetScriptByte
 	ld [OtherTrainerID], a
 	ret
-; 0x97436
+; 97436
 
-Script_startbattle: ; 0x97436
+Script_startbattle: ; 97436
 ; script command 0x5f
 
 	call BufferScreen
@@ -1540,9 +1540,9 @@
 	and $3f
 	ld [ScriptVar], a
 	ret
-; 0x97447
+; 97447
 
-Script_catchtutorial: ; 0x97447
+Script_catchtutorial: ; 97447
 ; script command 0x61
 ; parameters:
 ;     byte (SingleByteParam)
@@ -1552,18 +1552,18 @@
 	call BufferScreen
 	callba CatchTutorial
 	jp Script_reloadmap
-; 0x97459
+; 97459
 
-Script_returnafterbattle: ; 0x97459
+Script_returnafterbattle: ; 97459
 ; script command 0x60
 
-	ld hl, wd459
+	ld hl, wBattleScriptFlags
 	ld d, [hl]
 	ld [hl], $0
 	ld a, [wBattleResult]
 	and $3f
 	cp $1
-	jr nz, .notblackedout ; 0x97466 $8
+	jr nz, .notblackedout
 	ld b, BANK(Script_BattleWhiteout)
 	ld hl, Script_BattleWhiteout
 	jp ScriptJump
@@ -1570,26 +1570,26 @@
 
 .notblackedout
 	bit 0, d
-	jr z, .was_wild ; 0x97472 $8
+	jr z, .was_wild
 	callba MomTriesToBuySomething
-	jr .done ; 0x9747a $12
+	jr .done
 
 .was_wild
 	ld a, [wBattleResult]
 	bit 7, a
-	jr z, .done ; 0x97481 $b
+	jr z, .done
 	ld b, BANK(Script_SpecialBillCall)
 	ld de, Script_SpecialBillCall
 	callba LoadScriptBDE
 .done
 	jp Script_reloadmap
-; 0x97491
+; 97491
 
-Script_reloadmap: ; 0x97491
+Script_reloadmap: ; 97491
 ; script command 0x7b
 
 	xor a
-	ld [wd459], a
+	ld [wBattleScriptFlags], a
 	ld a, MAPSETUP_RELOADMAP
 	ld [hMapEntryMethod], a
 	ld a, $1
@@ -1596,9 +1596,9 @@
 	call LoadMapStatus
 	call StopScript
 	ret
-; 0x974a2
+; 974a2
 
-Script_2call: ; 0x974a2
+Script_scall: ; 974a2
 ; script command 0x0
 ; parameters:
 ;     pointer (ScriptPointerLabelParam)
@@ -1610,9 +1610,9 @@
 	call GetScriptByte
 	ld d, a
 	jr ScriptCall
-; 0x974b0
+; 974b0
 
-Script_3call: ; 0x974b0
+Script_farscall: ; 974b0
 ; script command 0x1
 ; parameters:
 ;     pointer (ScriptPointerLabelBeforeBank)
@@ -1624,9 +1624,9 @@
 	call GetScriptByte
 	ld d, a
 	jr ScriptCall
-; 0x974be
+; 974be
 
-Script_2ptcall: ; 0x974be
+Script_ptcall: ; 974be
 ; script command 0x2
 ; parameters:
 ;     pointer (PointerLabelToScriptPointer)
@@ -1642,13 +1642,19 @@
 	ld d, [hl]
 	; fallthrough
 
-ScriptCall: ; 0x974cb
+ScriptCall: ; 974cb
+; Bug: The script stack has a capacity of 5 scripts, yet there is
+; nothing to stop you from pushing a sixth script.  The high part
+; of the script address can then be overwritten by modifications
+; to ScriptDelay, causing the script to return to the rst/interrupt
+; space.
+
 	push de
-	ld hl, wd43c
+	ld hl, wScriptStackSize
 	ld e, [hl]
 	inc [hl]
 	ld d, $0
-	ld hl, wd43d
+	ld hl, wScriptStackBA1
 rept 3
 	add hl, de
 endr
@@ -1666,16 +1672,16 @@
 	ld a, d
 	ld [ScriptPos + 1], a
 	ret
-; 0x974f3
+; 974f3
 
-CallCallback:: ; 0x974f3
+CallCallback:: ; 974f3
 	ld a, [ScriptBank]
 	or $80
 	ld [ScriptBank], a
 	jp ScriptCall
-; 0x974fe
+; 974fe
 
-Script_2jump: ; 0x974fe
+Script_jump: ; 974fe
 ; script command 0x3
 ; parameters:
 ;     pointer (ScriptPointerLabelParam)
@@ -1687,9 +1693,9 @@
 	ld a, [ScriptBank]
 	ld b, a
 	jp ScriptJump
-; 0x9750d
+; 9750d
 
-Script_3jump: ; 0x9750d
+Script_farjump: ; 9750d
 ; script command 0x4
 ; parameters:
 ;     pointer (ScriptPointerLabelBeforeBank)
@@ -1701,9 +1707,9 @@
 	call GetScriptByte
 	ld h, a
 	jp ScriptJump
-; 0x9751c
+; 9751c
 
-Script_2ptjump: ; 0x9751c
+Script_ptjump: ; 9751c
 ; script command 0x5
 ; parameters:
 ;     pointer (PointerLabelToScriptPointer)
@@ -1718,9 +1724,9 @@
 	ld h, [hl]
 	ld l, a
 	jp ScriptJump
-; 0x9752c
+; 9752c
 
-Script_iffalse: ; 0x9752c
+Script_iffalse: ; 9752c
 ; script command 0x8
 ; parameters:
 ;     pointer (ScriptPointerLabelParam)
@@ -1728,10 +1734,10 @@
 	ld a, [ScriptVar]
 	and a
 	jp nz, SkipTwoScriptBytes
-	jp Script_2jump
-; 0x97536
+	jp Script_jump
+; 97536
 
-Script_iftrue: ; 0x97536
+Script_iftrue: ; 97536
 ; script command 0x9
 ; parameters:
 ;     pointer (ScriptPointerLabelParam)
@@ -1738,11 +1744,11 @@
 
 	ld a, [ScriptVar]
 	and a
-	jp nz, Script_2jump
+	jp nz, Script_jump
 	jp SkipTwoScriptBytes
-; 0x97540
+; 97540
 
-Script_if_equal: ; 0x97540
+Script_if_equal: ; 97540
 ; script command 0x6
 ; parameters:
 ;     byte (SingleByteParam)
@@ -1751,11 +1757,11 @@
 	call GetScriptByte
 	ld hl, ScriptVar
 	cp [hl]
-	jr z, Script_2jump ; 0x97547 $b5
-	jr SkipTwoScriptBytes ; 0x97549 $4b
-; 0x9754b
+	jr z, Script_jump
+	jr SkipTwoScriptBytes
+; 9754b
 
-Script_if_not_equal: ; 0x9754b
+Script_if_not_equal: ; 9754b
 ; script command 0x7
 ; parameters:
 ;     byte (SingleByteParam)
@@ -1764,11 +1770,11 @@
 	call GetScriptByte
 	ld hl, ScriptVar
 	cp [hl]
-	jr nz, Script_2jump ; 0x97552 $aa
-	jr SkipTwoScriptBytes ; 0x97554 $40
-; 0x97556
+	jr nz, Script_jump
+	jr SkipTwoScriptBytes
+; 97556
 
-Script_if_greater_than: ; 0x97556
+Script_if_greater_than: ; 97556
 ; script command 0xa
 ; parameters:
 ;     byte (SingleByteParam)
@@ -1778,11 +1784,11 @@
 	ld b, a
 	call GetScriptByte
 	cp b
-	jr c, Script_2jump ; 0x9755e $9e
-	jr SkipTwoScriptBytes ; 0x97560 $34
-; 0x97562
+	jr c, Script_jump
+	jr SkipTwoScriptBytes
+; 97562
 
-Script_if_less_than: ; 0x97562
+Script_if_less_than: ; 97562
 ; script command 0xb
 ; parameters:
 ;     byte (SingleByteParam)
@@ -1792,20 +1798,20 @@
 	ld b, a
 	ld a, [ScriptVar]
 	cp b
-	jr c, Script_2jump ; 0x9756a $92
-	jr SkipTwoScriptBytes ; 0x9756c $28
-; 0x9756e
+	jr c, Script_jump
+	jr SkipTwoScriptBytes
+; 9756e
 
-Script_jumpstd: ; 0x9756e
+Script_jumpstd: ; 9756e
 ; script command 0xc
 ; parameters:
 ;     predefined_script (MultiByteParam)
 
 	call StdScript
-	jr ScriptJump ; 0x97571 $2a
-; 0x97573
+	jr ScriptJump
+; 97573
 
-Script_callstd: ; 0x97573
+Script_callstd: ; 97573
 ; script command 0xd
 ; parameters:
 ;     predefined_script (MultiByteParam)
@@ -1814,9 +1820,9 @@
 	ld d, h
 	ld e, l
 	jp ScriptCall
-; 0x9757b
+; 9757b
 
-StdScript: ; 0x9757b
+StdScript: ; 9757b
 	call GetScriptByte
 	ld e, a
 	call GetScriptByte
@@ -1832,15 +1838,15 @@
 	ld a, BANK(StdScripts)
 	call GetFarHalfword
 	ret
-; 0x97596
+; 97596
 
-SkipTwoScriptBytes: ; 0x97596
+SkipTwoScriptBytes: ; 97596
 	call GetScriptByte
 	call GetScriptByte
 	ret
-; 0x9759d
+; 9759d
 
-ScriptJump: ; 0x9759d
+ScriptJump: ; 9759d
 	ld a, b
 	ld [ScriptBank], a
 	ld a, l
@@ -1848,9 +1854,9 @@
 	ld a, h
 	ld [ScriptPos + 1], a
 	ret
-; 0x975aa
+; 975aa
 
-Script_priorityjump: ; 0x975aa
+Script_priorityjump: ; 975aa
 ; script command 0x8d
 ; parameters:
 ;     pointer (ScriptPointerLabelParam)
@@ -1864,22 +1870,23 @@
 	ld hl, ScriptFlags
 	set 3, [hl]
 	ret
-; 0x975c2
+; 975c2
 
-Script_checktriggers: ; 0x975c2
+Script_checktriggers: ; 975c2
 ; script command 0x13
 
 	call CheckTriggers
-	jr z, .asm_975cb ; 0x975c5 $4
+	jr z, .no_triggers
 	ld [ScriptVar], a
 	ret
-.asm_975cb
+
+.no_triggers
 	ld a, $ff
 	ld [ScriptVar], a
 	ret
-; 0x975d1
+; 975d1
 
-Script_checkmaptriggers: ; 0x975d1
+Script_checkmaptriggers: ; 975d1
 ; script command 0x11
 ; parameters:
 ;     map_group (SingleByteParam)
@@ -1892,17 +1899,18 @@
 	call GetMapTrigger
 	ld a, d
 	or e
-	jr z, .asm_975e5 ; 0x975de $5
+	jr z, .no_triggers
 	ld a, [de]
 	ld [ScriptVar], a
 	ret
-.asm_975e5
+
+.no_triggers
 	ld a, $ff
 	ld [ScriptVar], a
 	ret
-; 0x975eb
+; 975eb
 
-Script_dotrigger: ; 0x975eb
+Script_dotrigger: ; 975eb
 ; script command 0x14
 ; parameters:
 ;     trigger_id (SingleByteParam)
@@ -1911,10 +1919,10 @@
 	ld b, a
 	ld a, [MapNumber]
 	ld c, a
-	jr Unknown_975fd ; 0x975f3 $8
-; 0x975f5
+	jr DoTrigger
+; 975f5
 
-Script_domaptrigger: ; 0x975f5
+Script_domaptrigger: ; 975f5
 ; script command 0x12
 ; parameters:
 ;     map_group (MapGroupParam)
@@ -1925,20 +1933,18 @@
 	ld b, a
 	call GetScriptByte
 	ld c, a
-	; fallthrough
-
-Unknown_975fd: ; 0x975fd
+DoTrigger: ; 975fd
 	call GetMapTrigger
 	ld a, d
 	or e
-	jr z, .asm_97608 ; 0x97602 $4
+	jr z, .no_trigger
 	call GetScriptByte
 	ld [de], a
-.asm_97608
+.no_trigger
 	ret
-; 0x97609
+; 97609
 
-Script_copybytetovar: ; 0x97609
+Script_copybytetovar: ; 97609
 ; script command 0x19
 ; parameters:
 ;     address (RAMAddressParam)
@@ -1950,9 +1956,9 @@
 	ld a, [hl]
 	ld [ScriptVar], a
 	ret
-; 0x97616
+; 97616
 
-Script_copyvartobyte: ; 0x97616
+Script_copyvartobyte: ; 97616
 ; script command 0x1a
 ; parameters:
 ;     address (RAMAddressParam)
@@ -1964,9 +1970,9 @@
 	ld a, [ScriptVar]
 	ld [hl], a
 	ret
-; 0x97623
+; 97623
 
-Script_loadvar: ; 0x97623
+Script_loadvar: ; 97623
 ; script command 0x1b
 ; parameters:
 ;     address (RAMAddressParam)
@@ -1979,9 +1985,9 @@
 	call GetScriptByte
 	ld [hl], a
 	ret
-; 0x97630
+; 97630
 
-Script_writebyte: ; 0x97630
+Script_writebyte: ; 97630
 ; script command 0x15
 ; parameters:
 ;     value (SingleByteParam)
@@ -1989,9 +1995,9 @@
 	call GetScriptByte
 	ld [ScriptVar], a
 	ret
-; 0x97637
+; 97637
 
-Script_addvar: ; 0x97637
+Script_addvar: ; 97637
 ; script command 0x16
 ; parameters:
 ;     value (SingleByteParam)
@@ -2001,9 +2007,9 @@
 	add [hl]
 	ld [hl], a
 	ret
-; 0x97640
+; 97640
 
-Script_random: ; 0x97640
+Script_random: ; 97640
 ; script command 0x17
 ; parameters:
 ;     input (SingleByteParam)
@@ -2012,28 +2018,31 @@
 	ld [ScriptVar], a
 	and a
 	ret z
+
 	ld c, a
-	call Function97673
+	call .Divide256byC
 	and a
-	jr z, .asm_9765f ; 0x9764d $10
+	jr z, .no_restriction ; 256 % b == 0
 	ld b, a
 	xor a
 	sub b
 	ld b, a
-.asm_97653
+.loop
 	push bc
 	call Random
 	pop bc
-	ld a, [$ffe1]
+	ld a, [hRandomAdd]
 	cp b
-	jr nc, .asm_97653 ; 0x9765b $f6
-	jr .asm_97666 ; 0x9765d $7
-.asm_9765f
+	jr nc, .loop
+	jr .finish
+
+.no_restriction
 	push bc
 	call Random
 	pop bc
-	ld a, [$ffe1]
-.asm_97666
+	ld a, [hRandomAdd]
+
+.finish
 	push af
 	ld a, [ScriptVar]
 	ld c, a
@@ -2041,22 +2050,22 @@
 	call SimpleDivide
 	ld [ScriptVar], a
 	ret
-; 0x97673
+; 97673
 
-Function97673: ; 0x97673
+.Divide256byC: ; 97673
 	xor a
 	ld b, a
 	sub c
-.asm_97676
+.mod_loop
 	inc b
 	sub c
-	jr nc, .asm_97676 ; 0x97678 $fc
+	jr nc, .mod_loop
 	dec b
 	add c
 	ret
-; 0x9767d
+; 9767d
 
-Script_checkcode: ; 0x9767d
+Script_checkcode: ; 9767d
 ; script command 0x1c
 ; parameters:
 ;     variable_id (SingleByteParam)
@@ -2066,9 +2075,9 @@
 	ld a, [de]
 	ld [ScriptVar], a
 	ret
-; 0x97688
+; 97688
 
-Script_writevarcode: ; 0x97688
+Script_writevarcode: ; 97688
 ; script command 0x1d
 ; parameters:
 ;     variable_id (SingleByteParam)
@@ -2078,9 +2087,9 @@
 	ld a, [ScriptVar]
 	ld [de], a
 	ret
-; 0x97693
+; 97693
 
-Script_writecode: ; 0x97693
+Script_writecode: ; 97693
 ; script command 0x1e
 ; parameters:
 ;     variable_id (SingleByteParam)
@@ -2091,27 +2100,27 @@
 	call GetScriptByte
 	ld [de], a
 	ret
-; 0x9769e
+; 9769e
 
-GetVarAction: ; 0x9769e
+GetVarAction: ; 9769e
 	ld c, a
 	callba _GetVarAction
 	ret
-; 0x976a6
+; 976a6
 
-Script_checkver: ; 0x976a6
+Script_checkver: ; 976a6
 ; script command 0x18
 
 	ld a, [Version]
 	ld [ScriptVar], a
 	ret
-; 0x976ad
+; 976ad
 
 Version: ; 976ad
 	db VERSION
 ; 976ae
 
-Script_pokenamemem: ; 0x976ae
+Script_pokenamemem: ; 976ae
 ; script command 0x40
 ; parameters:
 ;     pokemon (PokemonParam); leave $0 to draw from script var
@@ -2119,7 +2128,7 @@
 
 	call GetScriptByte
 	and a
-	jr nz, .gotit ; 0x976b2 $3
+	jr nz, .gotit
 	ld a, [ScriptVar]
 .gotit
 	ld [wd265], a
@@ -2126,7 +2135,7 @@
 	call GetPokemonName
 	ld de, StringBuffer1
 
-ConvertMemToText: ; 0x976c0
+ConvertMemToText: ; 976c0
 	call GetScriptByte
 	cp 3
 	jr c, .ok
@@ -2139,26 +2148,26 @@
 	call AddNTimes
 	call CopyName2
 	ret
-; 0x976d5
+; 976d5
 
-Script_itemtotext: ; 0x976d5
+Script_itemtotext: ; 976d5
 ; script command 0x41
 ; parameters:
-;     item (ItemLabelByte)
+;     item (ItemLabelByte); use 0 to draw from ScriptVar
 ;     memory (SingleByteParam)
 
 	call GetScriptByte
 	and a
-	jr nz, .ok ; 0x976d9 $3
+	jr nz, .ok
 	ld a, [ScriptVar]
 .ok
 	ld [wd265], a
 	call GetItemName
 	ld de, StringBuffer1
-	jr ConvertMemToText ; 0x976e7 $d7
-; 0x976e9
+	jr ConvertMemToText
+; 976e9
 
-Script_mapnametotext: ; 0x976e9
+Script_mapnametotext: ; 976e9
 ; script command 0x42
 ; parameters:
 ;     memory (SingleByteParam)
@@ -2169,14 +2178,14 @@
 	ld c, a
 	call GetWorldMapLocation
 
-ConvertLandmarkToText: ; 0x976f4
+ConvertLandmarkToText: ; 976f4
 	ld e, a
 	callba GetLandmarkName
 	ld de, StringBuffer1
 	jp ConvertMemToText
-; 0x97701
+; 97701
 
-Script_displaylocation: ; 0x97701
+Script_displaylocation: ; 97701
 ; script command 0xa5
 ; parameters:
 ;     id (SingleByteParam)
@@ -2183,10 +2192,10 @@
 ;     memory (SingleByteParam)
 
 	call GetScriptByte
-	jr ConvertLandmarkToText ; 0x97704 $ee
-; 0x97706
+	jr ConvertLandmarkToText
+; 97706
 
-Script_trainertotext: ; 0x97706
+Script_trainertotext: ; 97706
 ; script command 0x43
 ; parameters:
 ;     trainer_id (TrainerGroupParam)
@@ -2198,10 +2207,10 @@
 	call GetScriptByte
 	ld b, a
 	callba GetTrainerName
-	jr ConvertMemToText ; 0x97714 $aa
-; 0x97716
+	jr ConvertMemToText
+; 97716
 
-Script_name: ; 0x97716
+Script_name: ; 97716
 ; script command 0xa7
 ; parameters:
 ;     type (SingleByteParam)
@@ -2211,15 +2220,15 @@
 	call GetScriptByte
 	ld [wNamedObjectTypeBuffer], a
 
-ContinueToGetName: ; 0x9771c
+ContinueToGetName: ; 9771c
 	call GetScriptByte
 	ld [CurSpecies], a
 	call GetName
 	ld de, StringBuffer1
 	jp ConvertMemToText
-; 0x9772b
+; 9772b
 
-Script_trainerclassname: ; 0x9772b
+Script_trainerclassname: ; 9772b
 ; script command 0xa6
 ; parameters:
 ;     id (SingleByteParam)
@@ -2227,10 +2236,10 @@
 
 	ld a, TRAINER_NAME
 	ld [wNamedObjectTypeBuffer], a
-	jr ContinueToGetName ; 0x97730 $ea
-; 0x97732
+	jr ContinueToGetName
+; 97732
 
-Script_readmoney: ; 0x97732
+Script_readmoney: ; 97732
 ; script command 0x3d
 ; parameters:
 ;     account (SingleByteParam)
@@ -2243,9 +2252,9 @@
 	call PrintNum
 	ld de, StringBuffer1
 	jp ConvertMemToText
-; 0x97747
+; 97747
 
-Script_readcoins: ; 0x97747
+Script_readcoins: ; 97747
 ; script command 0x3e
 ; parameters:
 ;     memory (SingleByteParam)
@@ -2257,9 +2266,9 @@
 	call PrintNum
 	ld de, StringBuffer1
 	jp ConvertMemToText
-; 0x9775c
+; 9775c
 
-Script_RAM2MEM: ; 0x9775c
+Script_RAM2MEM: ; 9775c
 ; script command 0x3f
 ; parameters:
 ;     memory (SingleByteParam)
@@ -2271,17 +2280,17 @@
 	call PrintNum
 	ld de, StringBuffer1
 	jp ConvertMemToText
-; 0x97771
+; 97771
 
-ResetStringBuffer1: ; 0x97771
+ResetStringBuffer1: ; 97771
 	ld hl, StringBuffer1
 	ld bc, NAME_LENGTH
 	ld a, "@"
 	call ByteFill
 	ret
-; 0x9777d
+; 9777d
 
-Script_stringtotext: ; 0x9777d
+Script_stringtotext: ; 9777d
 ; script command 0x44
 ; parameters:
 ;     text_pointer (EncodedTextLabelParam)
@@ -2296,9 +2305,9 @@
 	rst FarCall
 	ld de, StringBuffer2
 	jp ConvertMemToText
-; 0x97792
+; 97792
 
-Script_givepokeitem: ; 0x97792
+Script_givepokeitem: ; 97792
 ; script command 0x2f
 ; parameters:
 ;     pointer (PointerParamToItemAndLetter)
@@ -2319,9 +2328,9 @@
 	pop bc
 	callba GivePokeItem
 	ret
-; 0x977b7
+; 977b7
 
-Script_checkpokeitem: ; 0x977b7
+Script_checkpokeitem: ; 977b7
 ; script command 0x30
 ; parameters:
 ;     pointer (PointerParamToItemAndLetter)
@@ -2332,11 +2341,11 @@
 	ld d, a
 	ld a, [ScriptBank]
 	ld b, a
-	callba Function44654
+	callba CheckPokeItem
 	ret
-; 0x977ca
+; 977ca
 
-Script_giveitem: ; 0x977ca
+Script_giveitem: ; 977ca
 ; script command 0x1f
 ; parameters:
 ;     item (ItemLabelByte)
@@ -2344,7 +2353,7 @@
 
 	call GetScriptByte
 	cp ITEM_FROM_MEM
-	jr nz, .ok ; 0x977cf $3
+	jr nz, .ok
 	ld a, [ScriptVar]
 .ok
 	ld [CurItem], a
@@ -2352,7 +2361,7 @@
 	ld [wItemQuantityChangeBuffer], a
 	ld hl, NumItems
 	call ReceiveItem
-	jr nc, .full ; 0x977e3 $6
+	jr nc, .full
 	ld a, $1
 	ld [ScriptVar], a
 	ret
@@ -2360,9 +2369,9 @@
 	xor a
 	ld [ScriptVar], a
 	ret
-; 0x977f0
+; 977f0
 
-Script_takeitem: ; 0x977f0
+Script_takeitem: ; 977f0
 ; script command 0x20
 ; parameters:
 ;     item (ItemLabelByte)
@@ -2382,9 +2391,9 @@
 	ld a, $1
 	ld [ScriptVar], a
 	ret
-; 0x97812
+; 97812
 
-Script_checkitem: ; 0x97812
+Script_checkitem: ; 97812
 ; script command 0x21
 ; parameters:
 ;     item (ItemLabelByte)
@@ -2399,9 +2408,9 @@
 	ld a, 1
 	ld [ScriptVar], a
 	ret
-; 0x97829
+; 97829
 
-Script_givemoney: ; 0x97829
+Script_givemoney: ; 97829
 ; script command 0x22
 ; parameters:
 ;     account (SingleByteParam)
@@ -2411,9 +2420,9 @@
 	call LoadMoneyAmountToMem
 	callba GiveMoney
 	ret
-; 0x97836
+; 97836
 
-Script_takemoney: ; 0x97836
+Script_takemoney: ; 97836
 ; script command 0x23
 ; parameters:
 ;     account (SingleByteParam)
@@ -2423,9 +2432,9 @@
 	call LoadMoneyAmountToMem
 	callba TakeMoney
 	ret
-; 0x97843
+; 97843
 
-Script_checkmoney: ; 0x97843
+Script_checkmoney: ; 97843
 ; script command 0x24
 ; parameters:
 ;     account (SingleByteParam)
@@ -2434,9 +2443,9 @@
 	call GetMoneyAccount
 	call LoadMoneyAmountToMem
 	callba CompareMoney
-; 0x9784f
+; 9784f
 
-CompareMoneyAction: ; 0x9784f
+CompareMoneyAction: ; 9784f
 	jr c, .two
 	jr z, .one
 	ld a, 0
@@ -2449,9 +2458,9 @@
 .done
 	ld [ScriptVar], a
 	ret
-; 0x97861
+; 97861
 
-GetMoneyAccount: ; 0x97861
+GetMoneyAccount: ; 97861
 	call GetScriptByte
 	and a
 	ld de, Money
@@ -2458,9 +2467,9 @@
 	ret z
 	ld de, wMomsMoney
 	ret
-; 0x9786d
+; 9786d
 
-LoadMoneyAmountToMem: ; 0x9786d
+LoadMoneyAmountToMem: ; 9786d
 	ld bc, hMoneyTemp
 	push bc
 	call GetScriptByte
@@ -2473,9 +2482,9 @@
 	ld [bc], a
 	pop bc
 	ret
-; 0x97881
+; 97881
 
-Script_givecoins: ; 0x97881
+Script_givecoins: ; 97881
 ; script command 0x25
 ; parameters:
 ;     coins (CoinByteParam)
@@ -2483,9 +2492,9 @@
 	call LoadCoinAmountToMem
 	callba GiveCoins
 	ret
-; 0x9788b
+; 9788b
 
-Script_takecoins: ; 0x9788b
+Script_takecoins: ; 9788b
 ; script command 0x26
 ; parameters:
 ;     coins (CoinByteParam)
@@ -2493,9 +2502,9 @@
 	call LoadCoinAmountToMem
 	callba TakeCoins
 	ret
-; 0x97895
+; 97895
 
-Script_checkcoins: ; 0x97895
+Script_checkcoins: ; 97895
 ; script command 0x27
 ; parameters:
 ;     coins (CoinByteParam)
@@ -2512,9 +2521,9 @@
 	ld [hMoneyTemp], a
 	ld bc, hMoneyTemp
 	ret
-; 0x978ae
+; 978ae
 
-Script_checktime: ; 0x978ae
+Script_checktime: ; 978ae
 ; script command 0x2b
 ; parameters:
 ;     time (SingleByteParam)
@@ -2528,9 +2537,9 @@
 	ld a, $1
 	ld [ScriptVar], a
 	ret
-; 0x978c3
+; 978c3
 
-Script_checkpoke: ; 0x978c3
+Script_checkpoke: ; 978c3
 ; script command 0x2c
 ; parameters:
 ;     pkmn (PokemonParam)
@@ -2545,9 +2554,9 @@
 	ld a, 1
 	ld [ScriptVar], a
 	ret
-; 0x978da
+; 978da
 
-Script_addcellnum: ; 0x978da
+Script_addcellnum: ; 978da
 ; script command 0x28
 ; parameters:
 ;     person (SingleByteParam)
@@ -2561,9 +2570,9 @@
 	ld a, $1
 	ld [ScriptVar], a
 	ret
-; 0x978ef
+; 978ef
 
-Script_delcellnum: ; 0x978ef
+Script_delcellnum: ; 978ef
 ; script command 0x29
 ; parameters:
 ;     person (SingleByteParam)
@@ -2577,9 +2586,9 @@
 	ld a, $1
 	ld [ScriptVar], a
 	ret
-; 0x97904
+; 97904
 
-Script_checkcellnum: ; 0x97904
+Script_checkcellnum: ; 97904
 ; script command 0x2a
 ; parameters:
 ;     person (SingleByteParam)
@@ -2594,9 +2603,9 @@
 	ld a, $1
 	ld [ScriptVar], a
 	ret
-; 0x97919
+; 97919
 
-Script_specialphonecall: ; 0x97919
+Script_specialphonecall: ; 97919
 ; script command 0x9c
 ; parameters:
 ;     call_id (MultiByteParam)
@@ -2606,9 +2615,9 @@
 	call GetScriptByte
 	ld [wSpecialPhoneCallID + 1], a
 	ret
-; 0x97926
+; 97926
 
-Script_checkphonecall: ; 0x97926
+Script_checkphonecall: ; 97926
 ; script command 0x9d
 ; returns false if no special phone call is stored
 
@@ -2619,9 +2628,9 @@
 .ok
 	ld [ScriptVar], a
 	ret
-; 0x97932
+; 97932
 
-Script_givepoke: ; 0x97932
+Script_givepoke: ; 97932
 ; script command 0x2d
 ; parameters:
 ;     pokemon (PokemonParam)
@@ -2654,9 +2663,9 @@
 	ld a, b
 	ld [ScriptVar], a
 	ret
-; 0x97968
+; 97968
 
-Script_giveegg: ; 0x97968
+Script_giveegg: ; 97968
 ; script command 0x2e
 ; parameters:
 ;     pkmn (PokemonParam)
@@ -2675,9 +2684,9 @@
 	ld a, 2
 	ld [ScriptVar], a
 	ret
-; 0x97988
+; 97988
 
-Script_setevent: ; 0x97988
+Script_setevent: ; 97988
 ; script command 0x33
 ; parameters:
 ;     bit_number (MultiByteParam)
@@ -2689,9 +2698,9 @@
 	ld b, SET_FLAG
 	call EventFlagAction
 	ret
-; 0x97996
+; 97996
 
-Script_clearevent: ; 0x97996
+Script_clearevent: ; 97996
 ; script command 0x32
 ; parameters:
 ;     bit_number (MultiByteParam)
@@ -2703,9 +2712,9 @@
 	ld b, RESET_FLAG
 	call EventFlagAction
 	ret
-; 0x979a4
+; 979a4
 
-Script_checkevent: ; 0x979a4
+Script_checkevent: ; 979a4
 ; script command 0x31
 ; parameters:
 ;     bit_number (MultiByteParam)
@@ -2718,14 +2727,14 @@
 	call EventFlagAction
 	ld a, c
 	and a
-	jr z, .false ; 0x979b3 $2
+	jr z, .false
 	ld a, 1
 .false
 	ld [ScriptVar], a
 	ret
-; 0x979bb
+; 979bb
 
-Script_setflag: ; 0x979bb
+Script_setflag: ; 979bb
 ; script command 0x36
 ; parameters:
 ;     bit_number (MultiByteParam)
@@ -2737,9 +2746,9 @@
 	ld b, 1 ; set
 	call _EngineFlagAction
 	ret
-; 0x979c9
+; 979c9
 
-Script_clearflag: ; 0x979c9
+Script_clearflag: ; 979c9
 ; script command 0x35
 ; parameters:
 ;     bit_number (MultiByteParam)
@@ -2751,9 +2760,9 @@
 	ld b, 0 ; clear
 	call _EngineFlagAction
 	ret
-; 0x979d7
+; 979d7
 
-Script_checkflag: ; 0x979d7
+Script_checkflag: ; 979d7
 ; script command 0x34
 ; parameters:
 ;     bit_number (MultiByteParam)
@@ -2766,35 +2775,35 @@
 	call _EngineFlagAction
 	ld a, c
 	and a
-	jr z, .false ; 0x979e6 $2
+	jr z, .false
 	ld a, 1
 .false
 	ld [ScriptVar], a
 	ret
-; 0x979ee
+; 979ee
 
-_EngineFlagAction: ; 0x979ee
+_EngineFlagAction: ; 979ee
 	callba EngineFlagAction
 	ret
-; 0x979f5
+; 979f5
 
-Script_wildoff: ; 0x979f5
+Script_wildoff: ; 979f5
 ; script command 0x38
 
 	ld hl, StatusFlags
 	set 5, [hl]
 	ret
-; 0x979fb
+; 979fb
 
-Script_wildon: ; 0x979fb
+Script_wildon: ; 979fb
 ; script command 0x37
 
 	ld hl, StatusFlags
 	res 5, [hl]
 	ret
-; 0x97a01
+; 97a01
 
-Script_xycompare: ; 0x97a01
+Script_xycompare: ; 97a01
 ; script command 0x39
 ; parameters:
 ;     pointer (MultiByteParam)
@@ -2804,9 +2813,9 @@
 	call GetScriptByte
 	ld [wd454], a
 	ret
-; 0x97a0e
+; 97a0e
 
-Script_warpfacing: ; 0x97a0e
+Script_warpfacing: ; 97a0e
 ; script command 0xa3
 ; parameters:
 ;     facing (SingleByteParam)
@@ -2824,7 +2833,7 @@
 	ld [wPlayerSpriteSetupFlags], a
 ; fall through
 
-Script_warp: ; 0x97a1d
+Script_warp: ; 97a1d
 ; script command 0x3c
 ; parameters:
 ;     map_group (MapGroupParam)
@@ -2835,7 +2844,7 @@
 ; This seems to be some sort of error handling case.
 	call GetScriptByte
 	and a
-	jr z, .not_ok ; 0x97a21 $27
+	jr z, .not_ok
 	ld [MapGroup], a
 	call GetScriptByte
 	ld [MapNumber], a
@@ -2864,9 +2873,9 @@
 	call LoadMapStatus
 	call StopScript
 	ret
-; 0x97a65
+; 97a65
 
-Script_warpmod: ; 0x97a65
+Script_warpmod: ; 97a65
 ; script command 0x3a
 ; parameters:
 ;     warp_id (SingleByteParam)
@@ -2880,9 +2889,9 @@
 	call GetScriptByte
 	ld [BackupMapNumber], a
 	ret
-; 0x97a78
+; 97a78
 
-Script_blackoutmod: ; 0x97a78
+Script_blackoutmod: ; 97a78
 ; script command 0x3b
 ; parameters:
 ;     map_group (MapGroupParam)
@@ -2893,17 +2902,17 @@
 	call GetScriptByte
 	ld [wLastSpawnMapNumber], a
 	ret
-; 0x97a85
+; 97a85
 
-Script_reloadmapmusic: ; 0x97a85
+Script_reloadmapmusic: ; 97a85
 ; script command 0x83
 
 	ld a, 1
 	ld [wc2c1], a
 	ret
-; 0x97a8b
+; 97a8b
 
-Script_writecmdqueue: ; 0x97a8b
+Script_writecmdqueue: ; 97a8b
 ; script command 0x7d
 ; parameters:
 ;     queue_pointer (MultiByteParam)
@@ -2914,11 +2923,11 @@
 	ld d, a
 	ld a, [ScriptBank]
 	ld b, a
-	callba Function97e31
+	callba WriteCmdQueue ; no need to farcall
 	ret
-; 0x97a9e
+; 97a9e
 
-Script_delcmdqueue: ; 0x97a9e
+Script_delcmdqueue: ; 97a9e
 ; script command 0x7e
 ; parameters:
 ;     byte (SingleByteParam)
@@ -2927,14 +2936,14 @@
 	ld [ScriptVar], a
 	call GetScriptByte
 	ld b, a
-	callba Function97e5c
+	callba DelCmdQueue ; no need to farcall
 	ret c
 	ld a, 1
 	ld [ScriptVar], a
 	ret
-; 0x97ab3
+; 97ab3
 
-Script_changemap: ; 0x97ab3
+Script_changemap: ; 97ab3
 ; script command 0x79
 ; parameters:
 ;     map_data_pointer (MapDataPointerParam)
@@ -2948,9 +2957,9 @@
 	call ChangeMap
 	call BufferScreen
 	ret
-; 0x97acc
+; 97acc
 
-Script_changeblock: ; 0x97acc
+Script_changeblock: ; 97acc
 ; script command 0x7a
 ; parameters:
 ;     x (SingleByteParam)
@@ -2968,35 +2977,35 @@
 	ld [hl], a
 	call BufferScreen
 	ret
-; 0x97ae3
+; 97ae3
 
-Script_reloadmappart:: ; 0x97ae3
+Script_reloadmappart:: ; 97ae3
 ; script command 0x7c
 
 	xor a
 	ld [hBGMapMode], a
 	call OverworldTextModeSwitch
-	call Function2914
-	callba Function104061
+	call GetMovementPermissions
+	callba ReloadMapPart
 	call UpdateSprites
 	ret
-; 0x97af6
+; 97af6
 
-Script_warpcheck: ; 0x97af6
+Script_warpcheck: ; 97af6
 ; script command 0x8e
 
 	call WarpCheck
 	ret nc
-	callba SetAll_ScriptFlags3
+	callba EnableEvents
 	ret
-; 0x97b01
+; 97b01
 
-Function97b01: ; 0x97b01
-	callba SetAll_ScriptFlags3
+Script_enableevents: ; unreferenced
+	callba EnableEvents
 	ret
-; 0x97b08
+; 97b08
 
-Script_newloadmap: ; 0x97b08
+Script_newloadmap: ; 97b08
 ; script command 0x8a
 ; parameters:
 ;     which_method (SingleByteParam)
@@ -3007,23 +3016,23 @@
 	call LoadMapStatus
 	call StopScript
 	ret
-; 0x97b16
+; 97b16
 
-Script_reloadandreturn: ; 0x97b16
+Script_reloadandreturn: ; 97b16
 ; script command 0x92
 
 	call Script_newloadmap
 	jp Script_end
-; 0x97b1c
+; 97b1c
 
-Script_loadfont: ; 0x97b1c
+Script_loadfont: ; 97b1c
 ; script command 0x47
 
 	call LoadFont
 	ret
-; 0x97b20
+; 97b20
 
-Script_refreshscreen: ; 0x97b20
+Script_refreshscreen: ; 97b20
 ; script command 0x48
 ; parameters:
 ;     dummy (SingleByteParam)
@@ -3031,9 +3040,9 @@
 	call ResetWindow
 	call GetScriptByte
 	ret
-; 0x97b27
+; 97b27
 
-Script_loadbytec1ce: ; 0x97b27
+Script_loadbytec2cf: ; 97b27
 ; script command 0x4a
 ; parameters:
 ;     byte (SingleByteParam)
@@ -3041,7 +3050,7 @@
 	call GetScriptByte
 	ld [wc2cf], a
 	ret
-; 0x97b2e
+; 97b2e
 
 
 LoadMoveSpritesScript: ; 97b2e
@@ -3048,16 +3057,16 @@
 	loadmovesprites
 ; 97b2f
 
-Script_loadmovesprites: ; 0x97b2f
+Script_loadmovesprites: ; 97b2f
 ; script command 0x49
 
 	call Function2e20
 	call LoadMoveSprites
 	ret
-; 0x97b36
+; 97b36
 
 
-Script_passtoengine: ; 0x97b36
+Script_passtoengine: ; 97b36
 ; script command 0x89
 ; parameters:
 ;     data_pointer (PointerLabelBeforeBank)
@@ -3071,9 +3080,9 @@
 	pop af
 	call StartAutoInput
 	ret
-; 0x97b47
+; 97b47
 
-Script_pause: ; 0x97b47
+Script_pause: ; 97b47
 ; script command 0x8b
 ; parameters:
 ;     length (DecimalParam)
@@ -3080,7 +3089,7 @@
 
 	call GetScriptByte
 	and a
-	jr z, .loop ; 0x97b4b $3
+	jr z, .loop
 	ld [ScriptDelay], a
 .loop
 	ld c, 2
@@ -3087,11 +3096,11 @@
 	call DelayFrames
 	ld hl, ScriptDelay
 	dec [hl]
-	jr nz, .loop ; 0x97b59 $f5
+	jr nz, .loop
 	ret
-; 0x97b5c
+; 97b5c
 
-Script_deactivatefacing: ; 0x97b5c
+Script_deactivatefacing: ; 97b5c
 ; script command 0x8c
 ; parameters:
 ;     time (SingleByteParam)
@@ -3098,7 +3107,7 @@
 
 	call GetScriptByte
 	and a
-	jr z, .no_time ; 0x97b60 $3
+	jr z, .no_time
 	ld [ScriptDelay], a
 .no_time
 	ld a, SCRIPT_WAIT
@@ -3105,18 +3114,18 @@
 	ld [ScriptMode], a
 	call StopScript
 	ret
-; 0x97b6e
+; 97b6e
 
-Script_ptpriorityjump: ; 0x97b6e
+Script_ptpriorityjump: ; 97b6e
 ; script command 0x8f
 ; parameters:
 ;     pointer (ScriptPointerLabelParam)
 
 	call StopScript
-	jp Script_2jump
-; 0x97b74
+	jp Script_jump
+; 97b74
 
-Script_end: ; 0x97b74
+Script_end: ; 97b74
 ; script command 0x91
 
 	call ExitScriptSubroutine
@@ -3132,9 +3141,9 @@
 	res 0, [hl]
 	call StopScript
 	ret
-; 0x97b8c
+; 97b8c
 
-Script_return: ; 0x97b8c
+Script_return: ; 97b8c
 ; script command 0x90
 
 	call ExitScriptSubroutine
@@ -3144,19 +3153,19 @@
 	res 0, [hl]
 	call StopScript
 	ret
-; 0x97b9a
+; 97b9a
 
-ExitScriptSubroutine: ; 0x97b9a
+ExitScriptSubroutine: ; 97b9a
 ; Return carry if there's no parent to return to.
 
-	ld hl, wd43c
+	ld hl, wScriptStackSize
 	ld a, [hl]
 	and a
-	jr z, .done ; 0x97b9f $1d
+	jr z, .done
 	dec [hl]
 	ld e, [hl]
 	ld d, $0
-	ld hl, wd43d
+	ld hl, wScriptStackBA1
 rept 3
 	add hl,de
 endr
@@ -3175,13 +3184,13 @@
 .done
 	scf
 	ret
-; 0x97bc0
+; 97bc0
 
-Script_resetfuncs: ; 0x97bc0
+Script_resetfuncs: ; 97bc0
 ; script command 0x93
 
 	xor a
-	ld [wd43c], a
+	ld [wScriptStackSize], a
 	ld [ScriptRunning], a
 	ld a, SCRIPT_OFF
 	ld [ScriptMode], a
@@ -3189,9 +3198,9 @@
 	res 0, [hl]
 	call StopScript
 	ret
-; 0x97bd5
+; 97bd5
 
-Script_halloffame: ; 0x97bd5
+Script_halloffame: ; 97bd5
 ; script command 0xa1
 
 	ld hl, GameTimerPause
@@ -3202,9 +3211,9 @@
 	ld hl, GameTimerPause
 	set 0, [hl]
 	jr DisplayCredits
-; 0x97bf3
+; 97bf3
 
-Script_credits: ; 0x97bf3
+Script_credits: ; 97bf3
 ; script command 0xa2
 
 	callba RedCredits
@@ -3216,9 +3225,9 @@
 	call LoadMapStatus
 	call StopScript
 	ret
-; 0x97c051
+; 97c051
 
-Script_wait: ; 0x97c05
+Script_wait: ; 97c05
 ; script command 0xa8
 ; parameters:
 ;     unknown (SingleByteParam)
@@ -3231,22 +3240,22 @@
 	call DelayFrames
 	pop af
 	dec a
-	jr nz, .loop ; 0x97c11 $f6
+	jr nz, .loop
 	pop bc
 	ret
-; 0x97c15
+; 97c15
 
-Script_unknown0xa9: ; 0x97c15
+Script_check_save: ; 97c15
 ; script command 0xa9
 
-	callba Function4cffe
+	callba CheckSave
 	ld a, c
 	ld [ScriptVar], a
 	ret
-; 0x97c20
+; 97c20
 
 
-Function97c20: ; 97c20 unreferenced
+; 97c20 unreferenced
 	ld a, [.byte]
 	ld [ScriptVar], a
 	ret
--- a/engine/selectmenu.asm
+++ b/engine/selectmenu.asm
@@ -158,7 +158,7 @@
 	call ResetWindow
 	call FadeToMenu
 	call DoItemEffect
-	call Function2b3c
+	call ReturnToCallingMenu
 	call LoadMoveSprites
 	and a
 	ret
--- a/engine/slot_machine.asm
+++ b/engine/slot_machine.asm
@@ -26,11 +26,11 @@
 	call PlayMusic
 	call DelayFrame
 	call DisableLCD
-	ld hl, VBGMap0 tile $00
+	hlbgcoord 0, 0
 	lb bc, 4, 0
-	ld a, $7f
+	ld a, " "
 	call ByteFill
-	ld b, $5
+	ld b, SCGB_05
 	call GetSGBLayout
 	callab Function8cf53
 	ld hl, wc6d0
@@ -1037,9 +1037,9 @@
 	call Function92fc0
 	push bc
 	push af
-	ld de, $6068
-	ld a, $6
-	call Function3b2a
+	depixel 12, 13
+	ld a, SPRITE_ANIM_INDEX_06
+	call _InitSpriteAnimStruct
 	ld hl, $e
 	add hl, bc
 	pop af
@@ -1096,9 +1096,9 @@
 	add hl, bc
 	ld [hl], $0
 	push bc
-	ld de, $6000
-	ld a, $7
-	call Function3b2a
+	depixel 12, 0
+	ld a, SPRITE_ANIM_INDEX_07
+	call _InitSpriteAnimStruct
 	pop bc
 	xor a
 	ld [wcf64], a
@@ -2063,9 +2063,9 @@
 	add hl, bc
 	dec [hl]
 	push bc
-	ld de, $606c
-	ld a, $8
-	call Function3b2a
+	depixel 12, 13, 0, 4
+	ld a, SPRITE_ANIM_INDEX_08
+	call _InitSpriteAnimStruct
 	pop bc
 	ret
 ; 93316 (24:7316)
--- a/engine/specials.asm
+++ b/engine/specials.asm
@@ -101,7 +101,7 @@
 	add_special SpecialCheckPokerus
 	add_special Special_DisplayCoinCaseBalance
 	add_special Special_DisplayMoneyAndCoinBalance
-	add_special Function24ae8
+	add_special PlaceMoneyTopRightOW
 	add_special Special_CheckForLuckyNumberWinners
 	add_special Special_CheckLuckyNumberShowFlag
 	add_special Special_ResetLuckyNumberShowFlag
@@ -108,7 +108,7 @@
 	add_special Special_PrintTodaysLuckyNumber
 	add_special Special_SelectApricornForKurt
 	add_special SpecialNameRater
-	add_special Functionc2da
+	add_special Special_DisplayLinkRecord
 	add_special GetFirstPokemonHappiness
 	add_special CheckFirstMonIsEgg
 	add_special RandomPhoneRareWildMon
@@ -120,15 +120,17 @@
 	add_special Special_YoungerHaircutBrother
 	add_special Special_OlderHaircutBrother
 	add_special Special_DaisyMassage
-	add_special Functionc472
+	add_special PlayCurMonCry
 	add_special ProfOaksPCBoot
 	add_special SpecialGameboyCheck
 	add_special SpecialTrainerHouse
 	add_special PhotoStudio
 	add_special InitRoamMons
-	add_special Functionc48f
-	add_special Functionc49f
-	add_special Functionc4ac
+	add_special Special_RotatePalettesRightMusic
+	add_special Diploma
+	add_special PrintDiploma
+
+	; Crystal
 	add_special Function11ac3e
 	add_special Function11b444
 	add_special Function11b5e8
@@ -151,7 +153,7 @@
 	add_special Function101220
 	add_special Function101225
 	add_special Function101231
-	add_special Function4925b
+	add_special Special_MoveTutor
 	add_special SpecialOmanyteChamber
 	add_special Function11c1ab
 	add_special BattleTowerAction
@@ -160,11 +162,11 @@
 	add_special Function17d2b6
 	add_special Function17d2ce
 	add_special Function17f53d
-	add_special Function103612
+	add_special AskMobileOrCable
 	add_special SpecialHoOhChamber
 	add_special Function102142
 	add_special Special_CelebiShrineEvent
-	add_special Function49bf9
+	add_special CheckCaughtCelebi
 	add_special SpecialPokeSeer
 	add_special SpecialBuenasPassword
 	add_special SpecialBuenaPrize
@@ -172,7 +174,7 @@
 	add_special Special_SampleKenjiBreakCountdown
 	add_special SpecialBeastsCheck
 	add_special SpecialMonCheck
-	add_special Functionc225
+	add_special Special_SetPlayerPalette
 	add_special Function170bd2
 	add_special Mobile_SelectThreeMons
 	add_special Function1037eb
@@ -180,12 +182,12 @@
 	add_special Mobile_HealParty
 	add_special RefreshSprites
 	add_special Function1037c2
-	add_special Function10630f
+	add_special Mobile_DummyReturnFalse
 	add_special Function103780
 	add_special Function10387b
-	add_special Function4ae12
+	add_special AskRememberPassword
 	add_special LoadMapPalettes
-	add_special Function4a927
+	add_special FindItemInPCOrBag
 	add_special Special_InitialSetDSTFlag
 	add_special Special_InitialClearDSTFlag
 	add_special SpecialNone
@@ -195,10 +197,10 @@
 	ret
 ; c225
 
-Functionc225: ; c225
+Special_SetPlayerPalette: ; c225
 	ld a, [ScriptVar]
 	ld d, a
-	callba Function57e2
+	callba SetPlayerPalette
 	ret
 ; c230
 
@@ -213,8 +215,8 @@
 	call FadeToMenu
 	ld a, [ScriptVar]
 	ld [wd265], a
-	callba Functionfb877
-	call Function2b4d
+	callba NewPokedexEntry
+	call ExitAllMenus
 	ret
 ; c252
 
@@ -285,22 +287,22 @@
 
 Special_TownMap: ; c2c0
 	call FadeToMenu
-	callba Function9191c
-	call Function2b4d
+	callba _TownMap
+	call ExitAllMenus
 	ret
 ; c2cd
 
 Special_UnownPrinter: ; c2cd
 	call FadeToMenu
-	callba Function16be4
-	call Function2b4d
+	callba UnownPrinter
+	call ExitAllMenus
 	ret
 ; c2da
 
-Functionc2da: ; c2da
+Special_DisplayLinkRecord: ; c2da
 	call FadeToMenu
-	callba Function3f836
-	call Function2b4d
+	callba DisplayLinkRecord
+	call ExitAllMenus
 	ret
 ; c2e7
 
@@ -307,7 +309,7 @@
 Special_KrissHousePC: ; c2e7
 	xor a
 	ld [ScriptVar], a
-	callba Function156d9
+	callba _KrissHousePC
 	ld a, c
 	ld [ScriptVar], a
 	ret
@@ -381,7 +383,7 @@
 	callba Functione1190
 	ld a, [wd0ec]
 	ld [ScriptVar], a
-	call Function2b4d
+	call ExitAllMenus
 	ret
 ; c373
 
@@ -423,7 +425,7 @@
 	ld l, a
 	pop af
 	rst FarCall
-	call Function2b4d
+	call ExitAllMenus
 	ret
 ; c3ae
 
@@ -586,7 +588,7 @@
 	db $ff
 
 
-Functionc472: ; c472
+PlayCurMonCry: ; c472
 	ld a, [CurPartySpecies]
 	jp PlayCry
 ; c478
@@ -614,7 +616,7 @@
 	ret
 
 
-Functionc48f: ; c48f
+Special_RotatePalettesRightMusic: ; c48f
 	ld a, MUSIC_NONE % $100
 	ld [MusicFadeIDLo], a
 	ld a, MUSIC_NONE / $100
@@ -624,17 +626,17 @@
 	ret
 ; c49f
 
-Functionc49f: ; c49f
+Diploma: ; c49f
 	call FadeToMenu
-	callba Function1dd702
-	call Function2b4d
+	callba _Diploma
+	call ExitAllMenus
 	ret
 ; c4ac
 
-Functionc4ac: ; c4ac
+PrintDiploma: ; c4ac
 	call FadeToMenu
-	callba Function84688
-	call Function2b4d
+	callba _PrintDiploma
+	call ExitAllMenus
 	ret
 ; c4b9
 
--- a/engine/sprites.asm
+++ b/engine/sprites.asm
@@ -1,1480 +1,3424 @@
-GetEmote2bpp: ; 1412a
-	ld a, $1
-	ld [rVBK], a
-	call Get2bpp
-	xor a
-	ld [rVBK], a
+Function8cf53: ; 8cf53
+	ld hl, wc300
+	ld bc, wc3c1 - wc300
+.loop
+	ld [hl], $0
+	inc hl
+	dec bc
+	ld a, c
+	or b
+	jr nz, .loop
 	ret
-; 14135
+; 8cf62
 
-_ReplaceKrisSprite:: ; 14135
-	call GetPlayerSprite
-	ld a, [UsedSprites]
-	ld [hUsedSpriteIndex], a
-	ld a, [UsedSprites + 1]
-	ld [hUsedSpriteTile], a
-	call Function143c8
+Function8cf62: ; 8cf62
+	call Function8cf69
+	call DelayFrame
 	ret
-; 14146
+; 8cf69
 
-Function14146: ; 14146
-	ld hl, wSpriteFlags
-	ld a, [hl]
+Function8cf69: ; 8cf69
+	push hl
+	push de
+	push bc
 	push af
-	res 7, [hl]
-	set 6, [hl]
-	call RunCallback_04
+
+	ld a, $0
+	ld [wc3b5], a
+	call Function8cf7a
+
 	pop af
-	ld [wSpriteFlags], a
+	pop bc
+	pop de
+	pop hl
 	ret
-; 14157
+; 8cf7a
 
-Function14157: ; 14157
-	ld hl, wSpriteFlags
+Function8cf7a: ; 8cf7a
+	ld hl, wc314
+	ld e, 10 ; There are 10 structs here.
+
+.loop
 	ld a, [hl]
-	push af
-	set 7, [hl]
-	res 6, [hl]
-	call RunCallback_04
-	pop af
-	ld [wSpriteFlags], a
-	ret
-; 14168
+	and a
+	jr z, .next ; This struct is deinitialized.
+	ld c, l
+	ld b, h
+	push hl
+	push de
+	call Function8d24b ; Uses a massive jumptable
+	call Function8d04c
+	pop de
+	pop hl
+	jr c, .done
 
-RefreshSprites:: ; 14168
-	call .Refresh
-	call RunCallback_04
-	ret
-; 1416f
+.next
+	ld bc, $10
+	add hl, bc
+	dec e
+	jr nz, .loop
 
-.Refresh: ; 1416f
+	ld a, [wc3b5]
+	ld l, a
+	ld h, Sprites / $0100
+
+.loop2 ; Clear (Sprites + [wc3b5] --> SpritesEnd)
+	ld a, l
+	cp SpritesEnd % $100
+	jr nc, .done
 	xor a
-	ld bc, UsedSpritesEnd - UsedSprites
-	ld hl, UsedSprites
-	call ByteFill
-	call GetPlayerSprite
-	call AddMapSprites
-	call LoadAndSortSprites
+	ld [hli], a
+	jr .loop2
+
+.done
 	ret
-; 14183
+; 8cfa8
 
-GetPlayerSprite: ; 14183
-; Get Chris or Kris's sprite.
-	ld hl, .Chris
-	ld a, [wPlayerSpriteSetupFlags]
-	bit 2, a
-	jr nz, .go
-	ld a, [PlayerGender]
-	bit 0, a
-	jr z, .go
-	ld hl, .Kris
+Function8cfa8: ; 8cfa8 (23:4fa8)
+	ld hl, wSpriteAnimationStructs
+	ld e, 10
 
-.go
-	ld a, [PlayerState]
-	ld c, a
 .loop
-	ld a, [hli]
-	cp c
-	jr z, .good
-	inc hl
-	cp $ff
+	ld a, [hl]
+	and a
+	jr z, .next
+	ld c, l
+	ld b, h
+	push hl
+	push de
+	call Function8d24b ; Uses a massive jumptable
+	call Function8d04c
+	pop de
+	pop hl
+	jr c, .done
+
+.next
+	ld bc, $10
+	add hl, bc
+	dec e
 	jr nz, .loop
 
-; Any player state not in the array defaults to Chris's sprite.
-	xor a ; ld a, PLAYER_NORMAL
-	ld [PlayerState], a
-	ld a, SPRITE_CHRIS
-	jr .finish
+	ld a, [wc3b5]
+	ld l, a
+	ld h, (Sprites + $40) / $100
 
-.good
-	ld a, [hl]
+.loop2 ; Clear (Sprites + [wc3b5] --> Sprites + $40)
+	ld a, l
+	cp (Sprites + $40) % $100
+	jr nc, .done
+	xor a
+	ld [hli], a
+	jr .loop2
 
-.finish
-	ld [UsedSprites + 0], a
-	ld [PlayerSprite], a
-	ld [PlayerObjectSprite], a
+.done
 	ret
 
-.Chris
-	db PLAYER_NORMAL,    SPRITE_CHRIS
-	db PLAYER_BIKE,      SPRITE_CHRIS_BIKE
-	db PLAYER_SURF,      SPRITE_SURF
-	db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
-	db $ff
+InitSpriteAnimStruct:: ; 8cfd6
+; Find if there's any room in the wc314 array, which is 10x16
+	push de
+	push af
+	ld hl, wc314
+	ld e, 10
+.loop
+	ld a, [hl]
+	and a
+	jr z, .found
+	ld bc, $10
+	add hl, bc
+	dec e
+	jr nz, .loop
+; We've reached the end.  There is no more room here.
+; Return carry.
+	pop af
+	pop de
+	scf
+	ret
 
-.Kris
-	db PLAYER_NORMAL,    SPRITE_KRIS
-	db PLAYER_BIKE,      SPRITE_KRIS_BIKE
-	db PLAYER_SURF,      SPRITE_SURF
-	db PLAYER_SURF_PIKA, SPRITE_SURFING_PIKACHU
-	db $ff
-; 141c9
+.found
+; Back up the structure address to bc.
+	ld c, l
+	ld b, h
+; Value [wc3b4] is initially set to -1. Set it to
+; the number of objects loaded into this array.
+	ld hl, wc3b4
+	inc [hl]
+	ld a, [hl]
+	and a
+	jr nz, .initialized
+	inc [hl]
 
-
-AddMapSprites: ; 141c9
-	call GetMapPermission
-	call CheckOutdoorMap
-	jr z, .outdoor
-	call AddIndoorSprites
+.initialized
+; Get row a of Unknown_8d1c4, copy the pointer into de
+	pop af
+	ld e, a
+	ld d, 0
+	ld hl, Unknown_8d1c4
+rept 3
+	add hl, de
+endr
+	ld e, l
+	ld d, h
+; Set hl to the first field (field 0) in the current structure.
+	ld hl, 0
+	add hl, bc
+; Load the index.
+	ld a, [wc3b4]
+	ld [hli], a
+; Copy the table entry to the next two fields.
+	ld a, [de]
+	ld [hli], a
+	inc de
+	ld a, [de]
+	ld [hli], a
+	inc de
+; Look up the third field from the table in the wc300 array (10x2).
+; Take the value and load it in 
+	ld a, [de]
+	call LookUpInwSpriteAnimDict
+	ld [hli], a
+	pop de
+; Set hl to field 4.  Kinda pointless, because we're presumably already here.
+	ld hl, $4
+	add hl, bc
+; Load the original value of de into here.
+	ld a, e
+	ld [hli], a
+	ld a, d
+	ld [hli], a
+; load 0 into the next four fields
+	xor a
+rept 2
+	ld [hli], a
+endr
+	xor a
+rept 2
+	ld [hli], a
+endr
+; load -1 into the next field
+	dec a
+	ld [hli], a
+; load 0 into the last five fields
+	xor a
+rept 4
+	ld [hli], a
+endr
+	ld [hl], a
+; back up the address of the first field to wc3b8
+	ld a, c
+	ld [wc3b8], a
+	ld a, b
+	ld [wc3b8 + 1], a
 	ret
+; 8d036
 
-.outdoor
-	call AddOutdoorSprites
+Function8d036: ; 8d036
+; Clear the index field of the struct in bc.
+	ld hl, 0
+	add hl, bc
+	ld [hl], $0
 	ret
-; 141d9
+; 8d03d
 
 
-AddIndoorSprites: ; 141d9
-	ld hl, Map1ObjectSprite
-	ld a, 1
+Function8d03d: ; 8d03d (23:503d)
+; Clear the index field of every struct in the wc314 array.
+	ld hl, wc314
+	ld bc, $10
+	ld e, 10
+	xor a
 .loop
-	push af
-	ld a, [hl]
-	call AddSpriteGFX
-	ld de, OBJECT_LENGTH
-	add hl, de
-	pop af
-	inc a
-	cp NUM_OBJECTS
+	ld [hl], a
+	add hl, bc
+	dec e
 	jr nz, .loop
 	ret
-; 141ee
 
 
-AddOutdoorSprites: ; 141ee
-	ld a, [MapGroup]
-	dec a
-	ld c, a
-	ld b, 0
-	ld hl, OutdoorSprites
-rept 2
-	add hl, bc
-endr
+Function8d04c: ; 8d04c
+	call Function8d0ec ; init WRAM
+	call Function8d132 ; read from a memory array
+	cp -3
+	jr z, .done
+	cp -4
+	jr z, .almost
+	call Function8d1a2 ; read from a pointer table
+	ld a, [wc3ba]
+	add [hl]
+	ld [wc3ba], a
+	inc hl
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
-	ld c, MAX_OUTDOOR_SPRITES
-.loop
 	push bc
+	ld a, [wc3b5]
+	ld e, a
+	ld d, Sprites / $100
 	ld a, [hli]
-	call AddSpriteGFX
-	pop bc
+	ld c, a
+.loop
+	ld a, [wc3bc]
+	ld b, a
+	ld a, [wc3be]
+	add b
+	ld b, a
+	ld a, [wc3bf]
+	add b
+	ld b, a
+	call Function8d0be
+	add b
+	ld [de], a
+	inc hl
+	inc de
+	ld a, [wc3bb]
+	ld b, a
+	ld a, [wc3bd]
+	add b
+	ld b, a
+	ld a, [wc3c0]
+	add b
+	ld b, a
+	call Function8d0ce
+	add b
+	ld [de], a
+	inc hl
+	inc de
+	ld a, [wc3ba]
+	add [hl]
+	ld [de], a
+	inc hl
+	inc de
+	call Function8d0de
+	ld [de], a
+	inc hl
+	inc de
+	ld a, e
+	ld [wc3b5], a
+	cp SpritesEnd % $100
+	jr nc, .outofroom
 	dec c
 	jr nz, .loop
-	ret
-; 14209
+	pop bc
+	jr .done
 
+.almost
+	call Function8d036
 
-RunCallback_04: ; 14209
-	ld a, $4
-	call RunMapCallback
-	call Function1439b
-	call Function14215
+.done
+	and a
 	ret
-; 14215
 
-Function14215: ; 14215
-	ld a, [wSpriteFlags]
-	bit 6, a
-	ret nz
-	ld c, EMOTE_08
-	callba LoadEmote
-	call GetMapPermission
-	call CheckOutdoorMap
-	ld c, EMOTE_0B
-	jr z, .outdoor
-	ld c, EMOTE_0A
-
-.outdoor
-	callba LoadEmote
+.outofroom
+	pop bc
+	scf
 	ret
-; 14236
+; 8d0be
 
+Function8d0be: ; 8d0be
+	push hl
+	ld a, [hl]
+	ld hl, wc3b8
+	bit 6, [hl]
+	jr z, .ok
+	add $8
+	xor $ff
+	inc a
 
+.ok
+	pop hl
+	ret
+; 8d0ce
 
-SafeGetSprite: ; 14236
+Function8d0ce: ; 8d0ce
 	push hl
-	call GetSprite
+	ld a, [hl]
+	ld hl, wc3b8
+	bit 5, [hl]
+	jr z, .ok
+	add $8
+	xor $ff
+	inc a
+
+.ok
 	pop hl
 	ret
-; 1423c
+; 8d0de
 
-GetSprite: ; 1423c
-	call GetMonSprite
-	ret c
+Function8d0de: ; 8d0de
+	ld a, [wc3b8]
+	ld b, a
+	ld a, [hl]
+	xor b
+	and $e0
+	ld b, a
+	ld a, [hl]
+	and $1f
+	or b
+	ret
+; 8d0ec
 
-	ld hl, SpriteHeaders ; address
-	dec a
-	ld c, a
-	ld b, 0
-	ld a, 6
-	call AddNTimes
-	; load the address into de
+Function8d0ec: ; 8d0ec
+	xor a
+	ld [wc3b8], a
+	ld hl, $3
+	add hl, bc
 	ld a, [hli]
-	ld e, a
+	ld [wc3ba], a
 	ld a, [hli]
-	ld d, a
-	; load the length into c
+	ld [wc3bb], a
 	ld a, [hli]
-	swap a
-	ld c, a
-	; load the sprite bank into both b and h
-	ld b, [hl]
+	ld [wc3bc], a
 	ld a, [hli]
-	; load the sprite type into l
-	ld l, [hl]
-	ld h, a
+	ld [wc3bd], a
+	ld a, [hli]
+	ld [wc3be], a
 	ret
-; 14259
+; 8d109
 
+LookUpInwSpriteAnimDict: ; 8d109
+; a = wSpriteAnimDict[a] if a in wSpriteAnimDict else 0
+	push hl
+	push bc
+	ld hl, wSpriteAnimDict
+	ld b, a
+	ld c, 10
+.loop
+	ld a, [hli]
+	cp b
+	jr z, .ok
+	inc hl
+	dec c
+	jr nz, .loop
+	xor a
+	jr .done
 
-GetMonSprite: ; 14259
-; Return carry if a monster sprite was loaded.
+.ok
+	ld a, [hl]
 
-	cp SPRITE_POKEMON
-	jr c, .Normal
-	cp SPRITE_DAYCARE_MON_1
-	jr z, .wBreedMon1
-	cp SPRITE_DAYCARE_MON_2
-	jr z, .wBreedMon2
-	cp SPRITE_VARS
-	jr nc, .Variable
-	jr .Icon
+.done
+	pop bc
+	pop hl
+	ret
+; 8d120
 
-.Normal
-	and a
+Function8d120:: ; 8d120
+	ld hl, $1
+	add hl, bc
+	ld [hl], a
+	ld hl, $8
+	add hl, bc
+	ld [hl], $0
+	ld hl, $a
+	add hl, bc
+	ld [hl], $ff
 	ret
+; 8d132
 
-.Icon
-	sub SPRITE_POKEMON
-	ld e, a
-	ld d, 0
-	ld hl, SpriteMons
-	add hl, de
+
+Function8d132: ; 8d132
+.loop
+	ld hl, $8
+	add hl, bc
 	ld a, [hl]
-	jr .Mon
+	and a
+	jr z, .ok
+	dec [hl]
+	call Function8d189
+	ld a, [hli]
+	push af
+	jr .skip
 
-.wBreedMon1
-	ld a, [wBreedMon1Species]
-	jr .Mon
+.ok
+	ld hl, $a
+	add hl, bc
+	inc [hl]
+	call Function8d189
+	ld a, [hli]
+	cp $fe
+	jr z, .minus_2
+	cp $ff
+	jr z, .minus_1
+	push af
+	ld a, [hl]
+	push hl
+	and $3f
+	ld hl, $9
+	add hl, bc
+	add [hl]
+	ld hl, $8
+	add hl, bc
+	ld [hl], a
+	pop hl
 
-.wBreedMon2
-	ld a, [wBreedMon2Species]
+.skip
+	ld a, [hl]
+	and $c0
+	srl a
+	ld [wc3b8], a
+	pop af
+	ret
 
-.Mon
-	ld e, a
-	and a
-	jr z, .NoBreedmon
+.minus_1
+	xor a
+	ld hl, $8
+	add hl, bc
+	ld [hl], a
+	ld hl, $a
+	add hl, bc
+rept 2
+	dec [hl]
+endr
+	jr .loop
 
-	callba Function8e82b
+.minus_2
+	xor a
+	ld hl, $8
+	add hl, bc
+	ld [hl], a
+	dec a
+	ld hl, $a
+	add hl, bc
+	ld [hl], a
+	jr .loop
+; 8d189
 
-	ld l, 1
+Function8d189: ; 8d189
+	; Get the [bc+10]th entry in the data table
+	; indexed at [bc+1] in Unknown_8d6e6
+	ld hl, $1
+	add hl, bc
+	ld e, [hl]
+	ld d, 0
+	ld hl, Unknown_8d6e6
+rept 2
+	add hl, de
+endr
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	ld hl, $a
+	add hl, bc
+	ld l, [hl]
 	ld h, 0
-	scf
+	add hl, hl
+	add hl, de
 	ret
+; 8d1a2
 
-.Variable
-	sub SPRITE_VARS
+Function8d1a2: ; 8d1a2
 	ld e, a
 	ld d, 0
-	ld hl, VariableSprites
+	ld hl, Unknown_8d94d
+rept 3
 	add hl, de
-	ld a, [hl]
-	and a
-	jp nz, GetMonSprite
+endr
+	ret
+; 8d1ac
 
-.NoBreedmon
-	ld a, 1
-	ld l, 1
+Function8d1ac: ; unreferenced
+	push hl
+	ld l, a
 	ld h, 0
-	and a
+rept 2
+	add hl, hl
+endr
+	ld de, Unknown_8e706 ; broken 2bpp pointers
+	add hl, de
+	ld c, [hl]
+	inc hl
+	ld b, [hl]
+	inc hl
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	pop hl
+	push bc
+	call Request2bpp
+	pop bc
 	ret
-; 142a7
+; 8d1c4
 
+Unknown_8d1c4: ; 8d1c4
+	db $01, SPRITE_ANIM_SEQ_01, $00 ; 00
+	db $07, SPRITE_ANIM_SEQ_04, $00 ; 01
+	db $08, SPRITE_ANIM_SEQ_05, $05 ; 02
+	db $0a, SPRITE_ANIM_SEQ_06, $00 ; 03
+	db $0b, SPRITE_ANIM_SEQ_07, $06 ; 04
+	db $0c, SPRITE_ANIM_SEQ_08, $06 ; 05
+	db $0d, SPRITE_ANIM_SEQ_09, $07 ; 06
+	db $0e, SPRITE_ANIM_SEQ_0A, $07 ; 07
+	db $10, SPRITE_ANIM_SEQ_0B, $07 ; 08
+	db $08, SPRITE_ANIM_SEQ_0C, $05 ; 09
+	db $11, SPRITE_ANIM_SEQ_00, $00 ; 0a
+	db $12, SPRITE_ANIM_SEQ_0D, $08 ; 0b
+	db $12, SPRITE_ANIM_SEQ_0E, $08 ; 0c
+	db $12, SPRITE_ANIM_SEQ_0F, $08 ; 0d
+	db $13, SPRITE_ANIM_SEQ_10, $00 ; 0e
+	db $15, SPRITE_ANIM_SEQ_00, $00 ; 0f
+	db $16, SPRITE_ANIM_SEQ_11, $00 ; 10
+	db $17, SPRITE_ANIM_SEQ_12, $00 ; 11
+	db $18, SPRITE_ANIM_SEQ_12, $00 ; 12
+	db $19, SPRITE_ANIM_SEQ_13, $00 ; 13
+	db $1a, SPRITE_ANIM_SEQ_14, $00 ; 14
+	db $1b, SPRITE_ANIM_SEQ_00, $00 ; 15
+	db $1d, SPRITE_ANIM_SEQ_15, $00 ; 16
+	db $1e, SPRITE_ANIM_SEQ_00, $00 ; 17
+	db $1d, SPRITE_ANIM_SEQ_17, $00 ; 18
+	db $1f, SPRITE_ANIM_SEQ_00, $00 ; 19
+	db $24, SPRITE_ANIM_SEQ_19, $00 ; 1a
+	db $25, SPRITE_ANIM_SEQ_00, $00 ; 1b
+	db $20, SPRITE_ANIM_SEQ_13, $00 ; 1c
+	db $26, SPRITE_ANIM_SEQ_1A, $00 ; 1d
+	db $2d, SPRITE_ANIM_SEQ_00, $00 ; 1e
+	db $2e, SPRITE_ANIM_SEQ_00, $00 ; 1f
+	db $2f, SPRITE_ANIM_SEQ_00, $00 ; 20
+	db $30, SPRITE_ANIM_SEQ_00, $00 ; 21
+	db $31, SPRITE_ANIM_SEQ_00, $00 ; 22
+	db $32, SPRITE_ANIM_SEQ_1B, $00 ; 23
+	db $33, SPRITE_ANIM_SEQ_1C, $00 ; 24
+	db $34, SPRITE_ANIM_SEQ_00, $00 ; 25
+	db $35, SPRITE_ANIM_SEQ_1D, $00 ; 26
+	db $37, SPRITE_ANIM_SEQ_1E, $00 ; 27
+	db $38, SPRITE_ANIM_SEQ_1E, $00 ; 28
+	db $39, SPRITE_ANIM_SEQ_20, $00 ; 29
+	db $3f, SPRITE_ANIM_SEQ_21, $00 ; 2a
+	db $3e, SPRITE_ANIM_SEQ_22, $00 ; 2b
+	db $40, SPRITE_ANIM_SEQ_00, $00 ; 2c
+; 8d24b
 
-_DoesSpriteHaveFacings:: ; 142a7
-; Checks to see whether we can apply a facing to a sprite.
-; Returns carry unless the sprite is a Pokemon or a Still Sprite.
-	cp SPRITE_POKEMON
-	jr nc, .only_down
 
-	push hl
-	push bc
-	ld hl, SpriteHeaders + SPRITEHEADER_TYPE ; type
-	dec a
-	ld c, a
-	ld b, 0
-	ld a, NUM_SPRITEHEADER_FIELDS
-	call AddNTimes
-	ld a, [hl]
-	pop bc
-	pop hl
-	cp STILL_SPRITE
-	jr nz, .only_down
-	scf
+Function8d24b: ; 8d24b
+	ld hl, $2 ; field 2, see the second column in the above table
+	add hl, bc
+	ld e, [hl]
+	ld d, 0
+	ld hl, .Jumptable
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 8d25b
+
+
+.Jumptable: ; 8d25b (23:525b)
+	dw .zero        ; town map
+	dw .one         ; bouncing mon icons
+	dw .two
+	dw .three
+	dw .four
+	dw .five
+	dw .six         ; Game Freak logo
+	dw .seven
+	dw .eight
+	dw .nine
+	dw .ten
+	dw .eleven
+	dw .twelve      ; blinking cursor
+	dw .thirteen
+	dw .fourteen
+	dw .fifteen
+	dw .sixteen
+	dw .seventeen
+	dw .eighteen
+	dw .nineteen
+	dw .twenty
+	dw .twentyone
+	dw .twentytwo   ; flying sprite
+	dw .twentythree ; flying leaves
+	dw .twentyfour
+	dw .twentyfive
+	dw .twentysix
+	dw .twentyseven
+	dw .twentyeight
+	dw .twentynine  ; intro suicune
+	dw .thirty      ; intro pichu wooper
+	dw .thirtyone
+	dw .thirtytwo   ; intro unown
+	dw .thirtythree ; intro unown F with suicune leaping up
+	dw .thirtyfour  ; intro suicune facing away from us
+
+
+.zero: ; 8d2a1 (23:52a1)
 	ret
 
-.only_down
+.one: ; 8d2a2 (23:52a2)
+	ld a, [MenuSelection2]
+	ld hl, 0
+	add hl, bc
+	cp [hl]
+	jr z, .two
+	ld hl, $4
+	add hl, bc
+	ld [hl], $10
+	ld hl, $7
+	add hl, bc
+	ld [hl], $0
+	ret
+
+.two: ; 8d2b9 (23:52b9)
+	ld hl, $4
+	add hl, bc
+	ld [hl], $18
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	ld d, a
+	inc [hl]
+	and $f
+	ret nz
+	ld hl, $d
+	add hl, bc
+	ld e, [hl]
+	ld hl, $7
+	add hl, bc
+	ld a, d
+	and $10 ; bit 4
+	jr z, .asm_8d2df
+	ld a, e
 	and a
+	jr z, .asm_8d2e6
+	cp $1
+	jr z, .asm_8d2e2
+.asm_8d2df
+	xor a
+	ld [hl], a
 	ret
-; 142c4
+.asm_8d2e2
+	ld a, $ff
+	ld [hl], a
+	ret
+.asm_8d2e6
+	ld a, $fe
+	ld [hl], a
+	ret
 
+.three: ; 8d2ea (23:52ea)
+	ld a, [MenuSelection2]
+	ld hl, 0
+	add hl, bc
+	cp [hl]
+	jr z, .asm_8d2fb
+	ld hl, $4
+	add hl, bc
+	ld [hl], $10
+	ret
+.asm_8d2fb
+	ld hl, $4
+	add hl, bc
+	ld [hl], $18
+	ret
 
-_GetSpritePalette:: ; 142c4
-	ld a, c
-	call GetMonSprite
-	jr c, .is_pokemon
+.four: ; 8d302 (23:5302)
+	call .anonymous_jumptable
+	jp [hl]
+; 8d306 (23:5306)
 
-	ld hl, SpriteHeaders + 5 ; palette
-	dec a
-	ld c, a
-	ld b, 0
-	ld a, 6
-	call AddNTimes
-	ld c, [hl]
+; Anonymous jumptable (see .anonymous_jumptable)
+	dw .four_zero
+	dw .four_one
+; 8d30a
+
+.four_zero: ; 8d30a
+	call .asm_8d6d8
+	ld hl, 0
+	add hl, bc
+	ld a, [hl]
+	ld hl, $d
+	add hl, bc
+	and $3
+	ld [hl], a
+	inc [hl]
+	swap a
+	ld hl, $c
+	add hl, bc
+	ld [hl], a
+
+.four_one: ; 8d321
+	ld hl, $4
+	add hl, bc
+	ld a, [hl]
+	cp $a4
+	jr nc, .asm_8d356
+	ld hl, $d
+	add hl, bc
+	add $4
+	ld hl, $4
+	add hl, bc
+	ld [hl], a
+	ld hl, $5
+	add hl, bc
+	inc [hl]
+	ld hl, $d
+	add hl, bc
+	ld a, [hl]
+	sla a
+	sla a
+	ld d, $2
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	add $3
+	ld [hl], a
+	call .asm_8d6de
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
 	ret
 
-.is_pokemon
-	xor a
-	ld c, a
+.asm_8d356
+	call Function8d036
 	ret
-; 142db
+; 8d35a
 
+.twentyfive: ; 8d35a (23:535a)
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	inc a
+	ld [hl], a
+	ld d, $2
+	call .asm_8d6de
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+	ret
 
-LoadAndSortSprites: ; 142db
-	call LoadSpriteGFX
-	call SortUsedSprites
-	call ArrangeUsedSprites
+.five: ; 8d36c (23:536c)
+	callab Function11a3b
 	ret
-; 142e5
 
+.twelve: ; 8d373 (23:5373)
+	callab Function120c1
+	ret
 
-AddSpriteGFX: ; 142e5
-; Add any new sprite ids to a list of graphics to be loaded.
-; Return carry if the list is full.
+.six: ; 8d37a (23:537a)
+	callab GameFreakLogoJumper
+	ret
 
-	push hl
-	push bc
-	ld b, a
-	ld hl, UsedSprites + 2
-	ld c, SPRITE_GFX_LIST_CAPACITY - 1
-.loop
+.seven: ; 8d381 (23:5381)
+	ld hl, $c
+	add hl, bc
 	ld a, [hl]
-	cp b
-	jr z, .exists
 	and a
-	jr z, .new
+	jr z, .asm_8d3ba
 rept 2
-	inc hl
+	dec [hl]
 endr
-	dec c
-	jr nz, .loop
+	ld d, a
+	and $1f
+	jr nz, .asm_8d395
+	ld hl, $d
+	add hl, bc
+	dec [hl]
+.asm_8d395
+	ld hl, $b
+	add hl, bc
+	ld a, [hl]
+	push af
+	push de
+	call .asm_8d6de
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+	pop de
+	pop af
+	call .asm_8d6e2
+	ld hl, $6
+	add hl, bc
+	ld [hl], a
+	ld hl, $d
+	add hl, bc
+	ld a, [hl]
+	ld hl, $b
+	add hl, bc
+	add [hl]
+	ld [hl], a
+	ret
+.asm_8d3ba
+	ld a, $1
+	ld [wcf64], a
+	call Function8d036
+	ret
 
-	pop bc
-	pop hl
-	scf
+.eight: ; 8d3c3 (23:53c3)
+	ld hl, $c
+	add hl, bc
+	ld a, [hli]
+	or [hl]
+	jr z, .asm_8d41e
+	ld hl, $f
+	add hl, bc
+	ld d, [hl]
+	ld hl, $b
+	add hl, bc
+	ld a, [hl]
+	push af
+	push de
+	call .asm_8d6de
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+	pop de
+	pop af
+	call .asm_8d6e2
+	ld hl, $6
+	add hl, bc
+	ld [hl], a
+	ld hl, $c
+	add hl, bc
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	ld hl, $e
+	add hl, bc
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	add hl, de
+	ld e, l
+	ld d, h
+	ld hl, $e
+	add hl, bc
+	ld [hl], e
+	inc hl
+	ld [hl], d
+	ld hl, $c
+	add hl, bc
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld de, -$10
+	add hl, de
+	ld e, l
+	ld d, h
+	ld hl, $c
+	add hl, bc
+	ld [hl], e
+	inc hl
+	ld [hl], d
+	ld hl, $b
+	add hl, bc
+	ld a, [hl]
+	xor $20
+	ld [hl], a
 	ret
+.asm_8d41e
+	call Function8d036
+	ret
 
-.exists
-	pop bc
-	pop hl
-	and a
+.nine: ; 8d422 (23:5422)
+	callab Function9321d
 	ret
 
-.new
-	ld [hl], b
-	pop bc
-	pop hl
-	and a
+.ten: ; 8d429 (23:5429)
+	callab Function932ac
+	ld hl, wcf64
+	ld a, [hl]
+	cp $2
+	ret nz
+	ld [hl], $3
+	ld a, $f
+	call Function8d120
 	ret
-; 14306
 
+.eleven: ; 8d43e (23:543e)
+	ld hl, $b
+	add hl, bc
+	ld a, [hl]
+	dec [hl]
+	ld e, a
+	and $1
+	jr z, .asm_8d462
+	ld hl, $4
+	add hl, bc
+	ld a, [hl]
+	cp $78
+	jr c, .asm_8d461
+	call Function8d036
+	ld a, $4
+	ld [wcf64], a
+	ld de, SFX_PLACE_PUZZLE_PIECE_DOWN
+	call PlaySFX
+	ret
+.asm_8d461
+	inc [hl]
+.asm_8d462
+	ld a, e
+	ld d, $20
+	call .asm_8d6de
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+	ret
 
-LoadSpriteGFX: ; 14306
-; Bug: b is not preserved, so
-; it's useless as a next count.
+.thirteen: ; 8d46e (23:546e)
+	callab Functione00ed
+	ret
 
-	ld hl, UsedSprites
-	ld b, SPRITE_GFX_LIST_CAPACITY
-.loop
-	ld a, [hli]
-	and a
-	jr z, .done
-	push hl
-	call .LoadSprite
-	pop hl
-	ld [hli], a
-	dec b
-	jr nz, .loop
+.fifteen: ; 8d475 (23:5475)
+	callab Function90d41
+	ret
 
-.done
+.fourteen: ; 8d47c (23:547c)
+	callab Functione21a1
 	ret
 
-.LoadSprite
-	call GetSprite
-	ld a, l
+.sixteen: ; 8d483 (23:5483)
+	call .anonymous_jumptable
+	jp [hl]
+; 8d487 (23:5487)
+
+; Anonymous jumptable (see .anonymous_jumptable)
+	dw .sixteen_zero
+	dw .sixteen_one
+	dw .sixteen_two
+	dw .sixteen_three
+	dw .sixteen_four
+	dw .sixteen_five
+; 8d493
+
+.sixteen_zero: ; 8d493
+	ld a, $14
+	call Function8d120
+	ld hl, $b
+	add hl, bc
+	ld [hl], $2
+	ld hl, $c
+	add hl, bc
+	ld [hl], $20
 	ret
-; 1431e
+; 8d4a5
 
+.sixteen_two: ; 8d4a5
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	and a
+	jr z, .asm_8d4af
+	dec [hl]
+	ret
 
-SortUsedSprites: ; 1431e
-; Bubble-sort sprites by type.
+.asm_8d4af
+	call .asm_8d6d8
+	ld hl, $c
+	add hl, bc
+	ld [hl], $40
 
-; Run backwards through UsedSprites to find the last one.
+.sixteen_three: ; 8d4b8
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	cp $30
+	jr c, .asm_8d4cd
+	dec [hl]
+	ld d, $28
+	call .asm_8d6de
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+	ret
 
-	ld c, SPRITE_GFX_LIST_CAPACITY
-	ld de, UsedSprites + (SPRITE_GFX_LIST_CAPACITY - 1) * 2
-.FindLastSprite
-	ld a, [de]
+.asm_8d4cd
+	ld de, SFX_GOT_SAFARI_BALLS
+	call PlaySFX
+	jr .sixteen_five
+; 8d4d5
+
+.sixteen_one: ; 8d4d5
+	ld hl, $b
+	add hl, bc
+	ld [hl], $4
+	ld hl, $c
+	add hl, bc
+	ld [hl], $30
+	ld hl, $d
+	add hl, bc
+	ld [hl], $24
+	ret
+; 8d4e8
+
+.sixteen_four: ; 8d4e8
+	ld hl, $d
+	add hl, bc
+	ld a, [hl]
 	and a
-	jr nz, .FoundLastSprite
+	jr z, .asm_8d51c
+	ld d, a
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	call Function8e72c
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+	ld hl, $c
+	add hl, bc
+	inc [hl]
+	ld a, [hl]
+	and $3f
+	ret nz
+	ld hl, $c
+	add hl, bc
+	ld [hl], $20
+	ld hl, $d
+	add hl, bc
+	ld a, [hl]
+	sub $c
+	ld [hl], a
+	ld de, SFX_SWITCH_POKEMON
+	call PlaySFX
+	ret
+
+.asm_8d51c
+	xor a
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+	call .asm_8d6d8
+	ret
+
+.sixteen_five: ; 8d526
+	call Function8d036
+	ret
+; 8d52a
+
+.seventeen: ; 8d52a (23:552a)
+	ld hl, $4
+	add hl, bc
+	ld a, [hl]
 rept 2
-	dec de
+	inc [hl]
 endr
-	dec c
-	jr nz, .FindLastSprite
-.FoundLastSprite
-	dec c
-	jr z, .quit
+	cp $b0
+	jr nc, .asm_8d53f
+	and $3
+	ret nz
+	ld de, SFX_POKEBALLS_PLACED_ON_TABLE
+	call PlaySFX
+	ret
 
-; If the length of the current sprite is
-; higher than a later one, swap them.
+.asm_8d53f
+	call Function8d036
+	ret
 
-	inc de
-	ld hl, UsedSprites + 1
+.eighteen: ; 8d543 (23:5543)
+	callab Function29676
+	ret
 
-.CheckSprite
-	push bc
+.nineteen: ; 8d54a (23:554a)
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	cp $80
+	jr nc, .asm_8d574
+	ld d, a
+	add $8
+	ld [hl], a
+	ld hl, $b
+	add hl, bc
+	ld a, [hl]
+	xor $20
+	ld [hl], a
+	push af
 	push de
-	push hl
+	call .asm_8d6de
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+	pop de
+	pop af
+	call .asm_8d6e2
+	ld hl, $6
+	add hl, bc
+	ld [hl], a
+	ret
+.asm_8d574
+	call Function8d036
+	ret
 
-.CheckFollowing
-	ld a, [de]
-	cp [hl]
-	jr nc, .loop
+.twenty: ; 8d578 (23:5578)
+	callab Function91640
+	ret
 
-; Swap the two sprites.
+.twentyone: ; 8d57f (23:557f)
+	ld hl, $d
+	add hl, bc
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	ld hl, $80
+	add hl, de
+	ld e, l
+	ld d, h
+	ld hl, $d
+	add hl, bc
+	ld [hl], e
+	inc hl
+	ld [hl], d
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+rept 3
+	inc [hl]
+endr
+	push af
+	push de
+	call .asm_8d6de
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+	pop de
+	pop af
+	call .asm_8d6e2
+	ld hl, $6
+	add hl, bc
+	ld [hl], a
+	ret
 
-	ld b, a
+.twentytwo: ; 8d5b0 (23:55b0)
+	ld hl, $5
+	add hl, bc
 	ld a, [hl]
-	ld [hl], b
-	ld [de], a
-	dec de
-	dec hl
-	ld a, [de]
-	ld b, a
+	and a
+	ret z
+	ld hl, $d
+	add hl, bc
 	ld a, [hl]
-	ld [hl], b
-	ld [de], a
-	inc de
-	inc hl
+	inc [hl]
+	cp $40
+	ret c
+	ld hl, $5
+	add hl, bc
+rept 2
+	dec [hl]
+endr
+	ld hl, $f
+	add hl, bc
+	ld a, [hl]
+	ld d, a
+	cp $40
+	jr nc, .asm_8d5d3
+	add $8
+	ld [hl], a
+.asm_8d5d3
+	ld hl, $e
+	add hl, bc
+	ld a, [hl]
+	inc [hl]
+	call .asm_8d6e2
+	ld hl, $6
+	add hl, bc
+	ld [hl], a
+	ret
 
-; Keep doing this until everything's in order.
-
-.loop
+.twentythree: ; 8d5e2 (23:55e2)
+	ld hl, $4
+	add hl, bc
+	ld a, [hl]
+	cp $b8
+	jr nc, .asm_8d603
 rept 2
-	dec de
+	inc [hl]
 endr
-	dec c
-	jr nz, .CheckFollowing
+	ld hl, $5
+	add hl, bc
+	dec [hl]
+	ld d, $40
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	inc [hl]
+	call .asm_8d6e2
+	ld hl, $6
+	add hl, bc
+	ld [hl], a
+	ret
+.asm_8d603
+	call Function8d036
+	ret
 
-	pop hl
+.twentyfour: ; 8d607 (23:5607)
+	ld hl, $5
+	add hl, bc
+	ld a, [hl]
+	cp $54
+	ret z
+	ld hl, $5
+	add hl, bc
 rept 2
-	inc hl
+	inc [hl]
 endr
-	pop de
-	pop bc
-	dec c
-	jr nz, .CheckSprite
+	ld hl, $f
+	add hl, bc
+	ld a, [hl]
+	ld d, a
+	and a
+	jr z, .asm_8d621
+	sub $2
+	ld [hl], a
+.asm_8d621
+	ld hl, $e
+	add hl, bc
+	ld a, [hl]
+	inc [hl]
+	call .asm_8d6e2
+	ld hl, $6
+	add hl, bc
+	ld [hl], a
+	ret
 
-.quit
+.twentyseven: ; 8d630 (23:5630)
+	callba Function108bc7
 	ret
-; 14355
 
+.twentyeight: ; 8d637 (23:5637)
+	callba Function108be0
+	ret
 
-ArrangeUsedSprites: ; 14355
-; Get the length of each sprite and space them out in VRAM.
-; Crystal introduces a second table in VRAM bank 0.
-
-	ld hl, UsedSprites
-	ld c, SPRITE_GFX_LIST_CAPACITY
-	ld b, 0
-.FirstTableLength
-; Keep going until the end of the list.
-	ld a, [hli]
+.twentynine: ; 8d63e (23:563e)
+	ld a, [wcf65]
 	and a
-	jr z, .quit
+	jr nz, .asm_8d645
+	ret
+.asm_8d645
+	ld hl, $7
+	add hl, bc
+	ld [hl], $0
+	ld hl, $d
+	add hl, bc
+	ld a, [hl]
+	add $2
+	ld [hl], a
+	xor $ff
+	inc a
+	ld d, $20
+	call .asm_8d6de
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+	ld a, $36
+	call Function8d120
+	ret
 
+.thirty: ; 8d666 (23:5666)
+	ld hl, $c
+	add hl, bc
 	ld a, [hl]
-	call GetSpriteLength
+	cp $14
+	jr nc, .asm_8d67f
+	add $2
+	ld [hl], a
+	xor $ff
+	inc a
+	ld d, $20
+	call .asm_8d6de
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+.asm_8d67f
+	ret
 
-; Spill over into the second table after $80 tiles.
-	add b
-	cp $80
-	jr z, .loop
-	jr nc, .SecondTable
+.thirtytwo: ; 8d680 (23:5680)
+	ld hl, $b
+	add hl, bc
+	ld d, [hl]
+rept 3
+	inc [hl]
+endr
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	push af
+	push de
+	call .asm_8d6de
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+	pop de
+	pop af
+	call .asm_8d6e2
+	ld hl, $6
+	add hl, bc
+	ld [hl], a
+	ret
 
-.loop
-	ld [hl], b
+.thirtythree: ; 8d6a2 (23:56a2)
+	ld a, [wcf64]
+	cp $40
+	ret nz
+	ld a, $3d
+	call Function8d120
+	ret
+
+.thirtyfour: ; 8d6ae (23:56ae)
+	ld hl, $5
+	add hl, bc
+	ld a, [hl]
+	add $10
+	ld [hl], a
+	ret
+
+.twentysix: ; 8d6b7 (23:56b7)
+	callba Function11d0b6
+	ret
+
+.thirtyone: ; 8d6be (23:56be)
+	callba Function49aa2
+	ret
+
+.anonymous_jumptable: ; 8d6c5 (23:56c5)
+	ld hl, [sp+$0]
+	ld e, [hl]
 	inc hl
-	ld b, a
+	ld d, [hl]
+	inc de
+	ld hl, $b
+	add hl, bc
+	ld l, [hl]
+	ld h, $0
+	add hl, hl
+	add hl, de
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ret
+; 8d6d8 (23:56d8)
 
-; Assumes the next table will be reached before c hits 0.
-	dec c
-	jr nz, .FirstTableLength
+.asm_8d6d8: ; 8d6d8
+	ld hl, $b
+	add hl, bc
+	inc [hl]
+	ret
+; 8d6de
 
-.SecondTable
-; The second tile table starts at tile $80.
-	ld b, $80
-	dec hl
-.SecondTableLength
-; Keep going until the end of the list.
-	ld a, [hli]
-	and a
-	jr z, .quit
+.asm_8d6de: ; 8d6de (23:56de)
+	call Function8e72c
+	ret
+
+.asm_8d6e2: ; 8d6e2 (23:56e2)
+	call Function8e72a
+	ret
+; 8d6e6 (23:56e6)
+
+Unknown_8d6e6: ; 8d6e6
+	dw Unknown_8d76a
+	dw Unknown_8d76d
+	dw Unknown_8d772
+	dw Unknown_8d777
+	dw Unknown_8d77c
+	dw Unknown_8d781
+	dw Unknown_8d786
+	dw Unknown_8d7a6
+	dw Unknown_8d7ab
+	dw Unknown_8d7b0
+	dw Unknown_8d7b5
+	dw Unknown_8d7d4
+	dw Unknown_8d7d9
+	dw Unknown_8d7e2
+	dw Unknown_8d7eb
+	dw Unknown_8d7f4
+	dw Unknown_8d7ff
+	dw Unknown_8d78b
+	dw Unknown_8d802
+	dw Unknown_8d805
+	dw Unknown_8d808
+	dw Unknown_8d811
+	dw Unknown_8d818
+	dw Unknown_8d81d
+	dw Unknown_8d822
+	dw Unknown_8d825
+	dw Unknown_8d82c
+	dw Unknown_8d82f
+	dw Unknown_8d861
+	dw Unknown_8d864
+	dw Unknown_8d867
+	dw Unknown_8d874
+	dw Unknown_8d877
+	dw Unknown_8d87a
+	dw Unknown_8d87d
+	dw Unknown_8d880
+	dw Unknown_8d883
+	dw Unknown_8d890
+	dw Unknown_8d899
+	dw Unknown_8d89c
+	dw Unknown_8d89f
+	dw Unknown_8d8a2
+	dw Unknown_8d8a5
+	dw Unknown_8d8a8
+	dw Unknown_8d8ab
+	dw Unknown_8d794
+	dw Unknown_8d79d
+	dw Unknown_8d8ae
+	dw Unknown_8d8cd
+	dw Unknown_8d8ec
+	dw Unknown_8d8f1
+	dw Unknown_8d8f4
+	dw Unknown_8d8f7
+	dw Unknown_8d8fe
+	dw Unknown_8d907
+	dw Unknown_8d90c
+	dw Unknown_8d913
+	dw Unknown_8d916
+	dw Unknown_8d91d
+	dw Unknown_8d924
+	dw Unknown_8d92b
+	dw Unknown_8d932
+	dw Unknown_8d93d
+	dw Unknown_8d940
+	dw Unknown_8d943
+	dw Unknown_8d948
+; 8d76a
+
+Unknown_8d76a: 	dw $2000
+                db -1
+Unknown_8d76d: 	dw $0800, $0801
+                db -2
+Unknown_8d772: 	dw $083d, $083e
+                db -2
+Unknown_8d777: 	dw $083f, $0840
+                db -2
+Unknown_8d77c: 	dw $0400, $0401
+                db -2
+Unknown_8d781: 	dw $043d, $043e
+                db -2
+Unknown_8d786: 	dw $043f, $0440
+                db -2
+Unknown_8d78b: 	dw $0800, $0801, $0800, $4801
+                db -2
+Unknown_8d794: 	dw $0863, $0864, $0863, $4864
+                db -2
+Unknown_8d79d: 	dw $0865, $0866, $0865, $4866
+                db -2
+Unknown_8d7a6: 	dw $011e, $011f
+                db -2
+Unknown_8d7ab: 	dw $0120, $01fd
+                db -2
+Unknown_8d7b0: 	dw $0121, $01fd
+                db -2
+Unknown_8d7b5: 	dw $0c81, $0182, $0183, $0482, $0c81, $0c82, $0483, $2084, $0385, $0386, $0487, $0488, $0489, $0a8a, $078b
+                db -1
+Unknown_8d7d4: 	dw $0323, $8323
+                db -2
+Unknown_8d7d9: 	dw $0224, $0225, $0226, $0225
+                db -2
+Unknown_8d7e2: 	dw $0727, $0728, $8727, $4728
+                db -2
+Unknown_8d7eb: 	dw $0729, $072a, $0729, $072b
+                db -2
+Unknown_8d7f4: 	dw $0729, $072c, $072d, $072c, $0729
+                db -1
+Unknown_8d7ff: 	dw $142e
+                db -1
+Unknown_8d802: 	dw $202f
+                db -1
+Unknown_8d805: 	dw $2030
+                db -1
+Unknown_8d808: 	dw $0330, $0331, $0330, $4331
+                db -2
+Unknown_8d811: 	dw $0432, $0433, $0434
+                db -4
+Unknown_8d818: 	dw $0335, $0336
+                db -2
+Unknown_8d81d: 	dw $0737, $0738
+                db -2
+Unknown_8d822: 	dw $2039
+                db -1
+Unknown_8d825: 	dw $023b, $023a, $023b
+                db -1
+Unknown_8d82c: 	dw $203c
+                db -1
+Unknown_8d82f: 	dw $0841, $0842, $0841, $4842
+                db -2
+                dw $0843, $0844
+                db -2
+                dw $0845, $0846
+                db -2
+                dw $0847, $0848
+                db -2
+                dw $0149, $4149, $c149, $8149
+                db -2
+                dw $204a
+                db -1
+                dw $204b
+                db -1
+                dw $204c
+                db -1
+                dw $204d
+                db -1
+                dw $034e, $03fd
+                db -2
+Unknown_8d861: 	dw $20fd
+                db -1
+Unknown_8d864: 	dw $204f
+                db -1
+Unknown_8d867: 	dw $0250, $1051, $01fd, $0152, $01fd, $0153
+                db -4
+Unknown_8d874: 	dw $2054
+                db -1
+Unknown_8d877: 	dw $2055
+                db -1
+Unknown_8d87a: 	dw $6055
+                db -1
+Unknown_8d87d: 	dw $a055
+                db -1
+Unknown_8d880: 	dw $e055
+                db -1
+Unknown_8d883: 	dw $0a56, $0957, $0a58, $0a59, $0958, $0a5a
+                db -2
+Unknown_8d890: 	dw $0250, $025b, $0250, $425b
+                db -2
+Unknown_8d899: 	dw $025c
+                db -1
+Unknown_8d89c: 	dw $025d
+                db -1
+Unknown_8d89f: 	dw $025e
+                db -1
+Unknown_8d8a2: 	dw $025f
+                db -1
+Unknown_8d8a5: 	dw $0260
+                db -1
+Unknown_8d8a8: 	dw $0261
+                db -1
+Unknown_8d8ab: 	dw $0262
+                db -1
+Unknown_8d8ae: 	dw $0332, $0333, $0334, $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331
+                db -1
+Unknown_8d8cd: 	dw $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331, $0332, $0333, $0334
+                db -4
+Unknown_8d8ec: 	dw $0367, $0368
+                db -2
+Unknown_8d8f1: 	dw $036c
+                db -1
+Unknown_8d8f4: 	dw $036d
+                db -1
+Unknown_8d8f7: 	dw $0269, $026a, $026b
+                db -4
+Unknown_8d8fe: 	dw $036e, $036f, $0370, $0371
+                db -2
+Unknown_8d907: 	dw $0371, $076e
+                db -1
+Unknown_8d90c: 	dw $2072, $0773, $0774
+                db -1
+Unknown_8d913: 	dw $0375
+                db -1
+Unknown_8d916: 	dw $0376, $0377, $0778
+                db -4
+Unknown_8d91d: 	dw $4376, $4377, $4778
+                db -4
+Unknown_8d924: 	dw $8376, $8377, $8778
+                db -4
+Unknown_8d92b: 	dw $c376, $c377, $c778
+                db -4
+Unknown_8d932: 	dw $0379, $037a, $037b, $077c, $077d
+                db -1
+Unknown_8d93d: 	dw $037e
+                db -1
+Unknown_8d940: 	dw $00fd
+                db -1
+Unknown_8d943: 	dw $087f, $0880
+                db -1
+Unknown_8d948: 	dw $487f, $4880
+                db -1
+; 8d94d
+
+Unknown_8d94d: ; 8d94d
+	dbw $00, Unknown_8dd8a ; 00
+	dbw $04, Unknown_8dd8a ; 01
+	dbw $4c, Unknown_8daf1 ; 02
+	dbw $5c, Unknown_8daf1 ; 03
+	dbw $6c, Unknown_8daf6 ; 04
+	dbw $6e, Unknown_8daf6 ; 05
+	dbw $2d, Unknown_8ddf0 ; 06
+	dbw $4d, Unknown_8ddf0 ; 07
+	dbw $60, Unknown_8de09 ; 08
+	dbw $00, Unknown_8de09 ; 09
+	dbw $00, Unknown_8de09 ; 0a
+	dbw $06, Unknown_8de09 ; 0b
+	dbw $0c, Unknown_8de7e ; 0c
+	dbw $0d, Unknown_8daf1 ; 0d
+	dbw $00, Unknown_8dc53 ; 0e
+	dbw $04, Unknown_8dc53 ; 0f
+	dbw $08, Unknown_8dc53 ; 10
+	dbw $40, Unknown_8dc53 ; 11
+	dbw $44, Unknown_8dc53 ; 12
+	dbw $48, Unknown_8dc53 ; 13
+	dbw $4c, Unknown_8dc53 ; 14
+	dbw $80, Unknown_8de87 ; 15
+	dbw $85, Unknown_8de87 ; 16
+	dbw $8a, Unknown_8de87 ; 17
+	dbw $00, Unknown_8db29 ; 18
+	dbw $01, Unknown_8db5c ; 19
+	dbw $09, Unknown_8db9d ; 1a
+	dbw $10, Unknown_8dc94 ; 1b
+	dbw $29, Unknown_8dc94 ; 1c
+	dbw $42, Unknown_8dc94 ; 1d
+	dbw $f8, Unknown_8e17e ; 1e
+	dbw $fa, Unknown_8e17e ; 1f
+	dbw $00, Unknown_8deb2 ; 20
+	dbw $00, Unknown_8dec3 ; 21
+	dbw $00, Unknown_8deec ; 22
+	dbw $0f, Unknown_8db07 ; 23
+	dbw $11, Unknown_8daf1 ; 24
+	dbw $12, Unknown_8daf1 ; 25
+	dbw $13, Unknown_8daf1 ; 26
+	dbw $00, Unknown_8df29 ; 27
+	dbw $08, Unknown_8df29 ; 28
+	dbw $10, Unknown_8df42 ; 29
+	dbw $10, Unknown_8df5b ; 2a
+	dbw $10, Unknown_8df74 ; 2b
+	dbw $10, Unknown_8df8d ; 2c
+	dbw $10, Unknown_8dfa6 ; 2d
+	dbw $3a, Unknown_8daf1 ; 2e
+	dbw $00, Unknown_8dd8a ; 2f
+	dbw $00, Unknown_8db18 ; 30
+	dbw $02, Unknown_8dd9b ; 31
+	dbw $06, Unknown_8db5c ; 32
+	dbw $0a, Unknown_8db5c ; 33
+	dbw $0e, Unknown_8db5c ; 34
+	dbw $12, Unknown_8db3a ; 35
+	dbw $13, Unknown_8db3a ; 36
+	dbw $00, Unknown_8dd8a ; 37
+	dbw $04, Unknown_8dd8a ; 38
+	dbw $10, Unknown_8db5c ; 39
+	dbw $00, Unknown_8dd9b ; 3a
+	dbw $04, Unknown_8daf1 ; 3b
+	dbw $00, Unknown_8dfbf ; 3c
+	dbw $00, Unknown_8ddac ; 3d
+	dbw $00, Unknown_8ddbd ; 3e
+	dbw $00, Unknown_8ddce ; 3f
+	dbw $00, Unknown_8dddf ; 40
+	dbw $00, Unknown_8dd9b ; 41
+	dbw $04, Unknown_8dd9b ; 42
+	dbw $00, Unknown_8dc2e ; 43
+	dbw $30, Unknown_8dc2e ; 44
+	dbw $03, Unknown_8dc2e ; 45
+	dbw $33, Unknown_8dc2e ; 46
+	dbw $06, Unknown_8dc2e ; 47
+	dbw $36, Unknown_8dc2e ; 48
+	dbw $09, Unknown_8dc2e ; 49
+	dbw $39, Unknown_8dc2e ; 4a
+	dbw $0c, Unknown_8dfcc ; 4b
+	dbw $0c, Unknown_8dfe5 ; 4c
+	dbw $3c, Unknown_8daf1 ; 4d
+	dbw $3e, Unknown_8daf1 ; 4e
+	dbw $00, Unknown_8de9c ; 4f
+	dbw $00, Unknown_8dea1 ; 50
+	dbw $00, Unknown_8dff6 ; 51
+	dbw $00, Unknown_8e007 ; 52
+	dbw $00, Unknown_8e018 ; 53
+	dbw $00, Unknown_8daf1 ; 54
+	dbw $01, Unknown_8daf1 ; 55
+	dbw $00, Unknown_8e029 ; 56
+	dbw $00, Unknown_8e076 ; 57
+	dbw $00, Unknown_8e0b7 ; 58
+	dbw $00, Unknown_8e0f4 ; 59
+	dbw $00, Unknown_8e139 ; 5a
+	dbw $04, Unknown_8dea1 ; 5b
+	dbw $00, Unknown_8e183 ; 5c
+	dbw $00, Unknown_8e1b4 ; 5d
+	dbw $00, Unknown_8e1b9 ; 5e
+	dbw $00, Unknown_8e1ca ; 5f
+	dbw $00, Unknown_8e1eb ; 60
+	dbw $00, Unknown_8e1f0 ; 61
+	dbw $00, Unknown_8e1f9 ; 62
+	dbw $00, Unknown_8e202 ; 63
+	dbw $04, Unknown_8e202 ; 64
+	dbw $00, Unknown_8e213 ; 65
+	dbw $04, Unknown_8e213 ; 66
+	dbw $20, Unknown_8e224 ; 67
+	dbw $21, Unknown_8e224 ; 68
+	dbw $22, Unknown_8e24b ; 69
+	dbw $23, Unknown_8e25c ; 6a
+	dbw $27, Unknown_8e27d ; 6b
+	dbw $2a, Unknown_8e229 ; 6c
+	dbw $2a, Unknown_8e23a ; 6d
+	dbw $00, Unknown_8e2ae ; 6e
+	dbw $08, Unknown_8e33f ; 6f
+	dbw $60, Unknown_8e3b0 ; 70
+	dbw $68, Unknown_8e429 ; 71
+	dbw $00, Unknown_8e4a6 ; 72
+	dbw $05, Unknown_8e4a6 ; 73
+	dbw $0a, Unknown_8e4a6 ; 74
+	dbw $50, Unknown_8e50b ; 75
+	dbw $00, Unknown_8e54c ; 76
+	dbw $01, Unknown_8e551 ; 77
+	dbw $04, Unknown_8e55e ; 78
+	dbw $00, Unknown_8db29 ; 79
+	dbw $01, Unknown_8e57b ; 7a
+	dbw $03, Unknown_8e59c ; 7b
+	dbw $08, Unknown_8e5cd ; 7c
+	dbw $1c, Unknown_8e5cd ; 7d
+	dbw $80, Unknown_8e61e ; 7e
+	dbw $00, Unknown_8e66f ; 7f
+	dbw $04, Unknown_8e66f ; 80
+	dbw $d0, Unknown_8e680 ; 81
+	dbw $d3, Unknown_8e680 ; 82
+	dbw $d6, Unknown_8e680 ; 83
+	dbw $6c, Unknown_8e6a5 ; 84
+	dbw $68, Unknown_8e6a5 ; 85
+	dbw $64, Unknown_8e6a5 ; 86
+	dbw $60, Unknown_8e6a5 ; 87
+	dbw $0c, Unknown_8e6a5 ; 88
+	dbw $08, Unknown_8e6a5 ; 89
+	dbw $04, Unknown_8e6a5 ; 8a
+	dbw $00, Unknown_8e6a5 ; 8b
+; 8daf1
 
-	ld a, [hl]
-	call GetSpriteLength
 
-; There are only two tables, so don't go any further than that.
-	add b
-	jr c, .quit
+Unknown_8daf1: ; 8daf1
+	db 1
+	db $fc, $fc, $00, $00
+; 8daf6
 
-	ld [hl], b
-	ld b, a
-	inc hl
+Unknown_8daf6: ; 8daf6
+	db 4
+	db $f8, $f8, $00, $00
+	db $f8, $00, $01, $00
+	db $00, $f8, $10, $00
+	db $00, $00, $11, $00
+; 8db07
 
-	dec c
-	jr nz, .SecondTableLength
+Unknown_8db07: ; 8db07
+	db 4
+	db $f8, $f8, $00, $00
+	db $f8, $00, $00, $20
+	db $00, $f8, $01, $00
+	db $00, $00, $01, $20
+; 8db18
 
-.quit
-	ret
-; 14386
+Unknown_8db18: ; 8db18
+	db 4
+	db $f8, $f8, $00, $80
+	db $f8, $00, $00, $a0
+	db $00, $f8, $01, $80
+	db $00, $00, $01, $a0
+; 8db29
 
+Unknown_8db29: ; 8db29
+	db 4
+	db $f8, $f8, $00, $00
+	db $f8, $00, $00, $20
+	db $00, $f8, $00, $40
+	db $00, $00, $00, $60
+; 8db3a
 
-GetSpriteLength: ; 14386
-; Return the length of sprite type a in tiles.
+Unknown_8db3a: ; 8db3a
+	db 4
+	db $f8, $f8, $00, $07
+	db $f8, $00, $00, $27
+	db $00, $f8, $00, $47
+	db $00, $00, $00, $67
+; 8db4b
 
-	cp WALKING_SPRITE
-	jr z, .AnyDirection
-	cp STANDING_SPRITE
-	jr z, .AnyDirection
-	cp STILL_SPRITE
-	jr z, .OneDirection
+; 8db4b
+	db 4
+	db $f8, $f8, $00, $80
+	db $f8, $00, $00, $a0
+	db $00, $f8, $00, $c0
+	db $00, $00, $00, $e0
+; 8db5c
 
-	ld a, 12
+Unknown_8db5c: ; 8db5c
+	db 16
+	db $f0, $f0, $00, $00
+	db $f0, $f8, $01, $00
+	db $f8, $f0, $02, $00
+	db $f8, $f8, $03, $00
+	db $f0, $00, $01, $20
+	db $f0, $08, $00, $20
+	db $f8, $00, $03, $20
+	db $f8, $08, $02, $20
+	db $00, $f0, $02, $40
+	db $00, $f8, $03, $40
+	db $08, $f0, $00, $40
+	db $08, $f8, $01, $40
+	db $00, $00, $03, $60
+	db $00, $08, $02, $60
+	db $08, $00, $01, $60
+	db $08, $08, $00, $60
+; 8db9d
+
+Unknown_8db9d: ; 8db9d
+	db 36
+	db $e8, $e8, $00, $00
+	db $e8, $f0, $01, $00
+	db $e8, $f8, $02, $00
+	db $f0, $e8, $03, $00
+	db $f0, $f0, $04, $00
+	db $f0, $f8, $05, $00
+	db $f8, $e8, $06, $00
+	db $f8, $f0, $05, $00
+	db $f8, $f8, $05, $00
+	db $e8, $00, $02, $20
+	db $e8, $08, $01, $20
+	db $e8, $10, $00, $20
+	db $f0, $00, $05, $20
+	db $f0, $08, $04, $20
+	db $f0, $10, $03, $20
+	db $f8, $00, $05, $20
+	db $f8, $08, $05, $20
+	db $f8, $10, $06, $20
+	db $00, $e8, $06, $40
+	db $00, $f0, $05, $40
+	db $00, $f8, $05, $40
+	db $08, $e8, $03, $40
+	db $08, $f0, $04, $40
+	db $08, $f8, $05, $40
+	db $10, $e8, $00, $40
+	db $10, $f0, $01, $40
+	db $10, $f8, $02, $40
+	db $00, $00, $05, $60
+	db $00, $08, $05, $60
+	db $00, $10, $06, $60
+	db $08, $00, $05, $60
+	db $08, $08, $04, $60
+	db $08, $10, $03, $60
+	db $10, $00, $02, $60
+	db $10, $08, $01, $60
+	db $10, $10, $00, $60
+; 8dc2e
+
+Unknown_8dc2e: ; 8dc2e
+	db 9
+	db $f4, $f4, $00, $00
+	db $f4, $fc, $01, $00
+	db $f4, $04, $02, $00
+	db $fc, $f4, $10, $00
+	db $fc, $fc, $11, $00
+	db $fc, $04, $12, $00
+	db $04, $f4, $20, $00
+	db $04, $fc, $21, $00
+	db $04, $04, $22, $00
+; 8dc53
+
+Unknown_8dc53: ; 8dc53
+	db 16
+	db $f0, $f0, $00, $00
+	db $f0, $f8, $01, $00
+	db $f0, $00, $02, $00
+	db $f0, $08, $03, $00
+	db $f8, $f0, $10, $00
+	db $f8, $f8, $11, $00
+	db $f8, $00, $12, $00
+	db $f8, $08, $13, $00
+	db $00, $f0, $20, $00
+	db $00, $f8, $21, $00
+	db $00, $00, $22, $00
+	db $00, $08, $23, $00
+	db $08, $f0, $30, $00
+	db $08, $f8, $31, $00
+	db $08, $00, $32, $00
+	db $08, $08, $33, $00
+; 8dc94
+
+Unknown_8dc94: ; 8dc94
+	db 25
+	db $ec, $ec, $00, $00
+	db $f4, $ec, $01, $00
+	db $fc, $ec, $02, $00
+	db $04, $ec, $03, $00
+	db $0c, $ec, $04, $00
+	db $ec, $f4, $05, $00
+	db $f4, $f4, $06, $00
+	db $fc, $f4, $07, $00
+	db $04, $f4, $08, $00
+	db $0c, $f4, $09, $00
+	db $ec, $fc, $0a, $00
+	db $f4, $fc, $0b, $00
+	db $fc, $fc, $0c, $00
+	db $04, $fc, $0d, $00
+	db $0c, $fc, $0e, $00
+	db $ec, $04, $0f, $00
+	db $f4, $04, $10, $00
+	db $fc, $04, $11, $00
+	db $04, $04, $12, $00
+	db $0c, $04, $13, $00
+	db $ec, $0c, $14, $00
+	db $f4, $0c, $15, $00
+	db $fc, $0c, $16, $00
+	db $04, $0c, $17, $00
+	db $0c, $0c, $18, $00
+; 8dcf9
+
+; 8dcf9
+	db 36
+	db $e8, $e8, $00, $00
+	db $e8, $f0, $01, $00
+	db $e8, $f8, $02, $00
+	db $e8, $00, $03, $00
+	db $e8, $08, $04, $00
+	db $e8, $10, $05, $00
+	db $f0, $e8, $06, $00
+	db $f0, $f0, $07, $00
+	db $f0, $f8, $08, $00
+	db $f0, $00, $09, $00
+	db $f0, $08, $0a, $00
+	db $f0, $10, $0b, $00
+	db $f8, $e8, $0c, $00
+	db $f8, $f0, $0d, $00
+	db $f8, $f8, $0e, $00
+	db $f8, $00, $0f, $00
+	db $f8, $08, $10, $00
+	db $f8, $10, $11, $00
+	db $00, $e8, $12, $00
+	db $00, $f0, $13, $00
+	db $00, $f8, $14, $00
+	db $00, $00, $15, $00
+	db $00, $08, $16, $00
+	db $00, $10, $17, $00
+	db $08, $e8, $18, $00
+	db $08, $f0, $19, $00
+	db $08, $f8, $1a, $00
+	db $08, $00, $1b, $00
+	db $08, $08, $1c, $00
+	db $08, $10, $1d, $00
+	db $10, $e8, $1e, $00
+	db $10, $f0, $1f, $00
+	db $10, $f8, $20, $00
+	db $10, $00, $21, $00
+	db $10, $08, $22, $00
+	db $10, $10, $23, $00
+; 8dd8a
+
+Unknown_8dd8a: ; 8dd8a
+	db 4
+	db $f8, $f8, $00, $00
+	db $f8, $00, $01, $00
+	db $00, $f8, $02, $00
+	db $00, $00, $03, $00
+; 8dd9b
+
+Unknown_8dd9b: ; 8dd9b
+	db 4
+	db $f8, $f8, $00, $80
+	db $f8, $00, $01, $80
+	db $00, $f8, $02, $80
+	db $00, $00, $03, $80
+; 8ddac
+
+Unknown_8ddac: ; 8ddac
+	db 4
+	db $f8, $f8, $00, $00
+	db $f8, $00, $01, $00
+	db $00, $f8, $08, $00
+	db $00, $00, $03, $00
+; 8ddbd
+
+Unknown_8ddbd: ; 8ddbd
+	db 4
+	db $f8, $f8, $04, $00
+	db $f8, $00, $05, $00
+	db $00, $f8, $08, $00
+	db $00, $00, $07, $00
+; 8ddce
+
+Unknown_8ddce: ; 8ddce
+	db 4
+	db $f8, $f8, $00, $00
+	db $f8, $00, $01, $00
+	db $00, $f8, $09, $00
+	db $00, $00, $03, $00
+; 8dddf
+
+Unknown_8dddf: ; 8dddf
+	db 4
+	db $f8, $f8, $04, $00
+	db $f8, $00, $05, $00
+	db $00, $f8, $09, $00
+	db $00, $00, $07, $00
+; 8ddf0
+
+Unknown_8ddf0: ; 8ddf0
+	db 6
+	db $f8, $f4, $00, $01
+	db $f8, $fc, $01, $01
+	db $f8, $04, $02, $01
+	db $00, $f4, $10, $01
+	db $00, $fc, $11, $01
+	db $00, $04, $12, $01
+; 8de09
+
+Unknown_8de09: ; 8de09
+	db 29
+	db $e8, $e8, $00, $00
+	db $e8, $f0, $01, $00
+	db $e8, $f8, $02, $00
+	db $e8, $00, $03, $00
+	db $f0, $e8, $10, $00
+	db $f0, $f0, $11, $00
+	db $f0, $f8, $12, $00
+	db $f0, $00, $13, $00
+	db $f8, $e8, $20, $00
+	db $f8, $f0, $21, $00
+	db $f8, $f8, $22, $00
+	db $f8, $00, $23, $00
+	db $f8, $08, $24, $00
+	db $00, $e8, $30, $80
+	db $00, $f0, $31, $80
+	db $00, $f8, $32, $80
+	db $00, $00, $33, $80
+	db $00, $08, $34, $80
+	db $08, $e8, $40, $80
+	db $08, $f0, $41, $80
+	db $08, $f8, $42, $80
+	db $08, $00, $43, $80
+	db $08, $08, $44, $80
+	db $08, $10, $45, $80
+	db $10, $f0, $51, $80
+	db $10, $f8, $52, $80
+	db $10, $00, $53, $80
+	db $10, $08, $54, $80
+	db $10, $10, $55, $80
+; 8de7e
+
+Unknown_8de7e: ; 8de7e
+	db 2
+	db $f8, $fc, $00, $00
+	db $00, $fc, $10, $00
+; 8de87
+
+Unknown_8de87: ; 8de87
+	db 5
+	db $f0, $18, $00, $00
+	db $f0, $20, $01, $00
+	db $f8, $10, $02, $00
+	db $f8, $18, $03, $00
+	db $00, $10, $04, $00
+; 8de9c
+
+Unknown_8de9c: ; 8de9c
+	db 1
+	db $fc, $fc, $00, $06
+; 8dea1
+
+Unknown_8dea1: ; 8dea1
+	db 4
+	db $f8, $f8, $00, $06
+	db $f8, $00, $01, $06
+	db $00, $f8, $02, $06
+	db $00, $00, $03, $06
+; 8deb2
+
+Unknown_8deb2: ; 8deb2
+	db 4
+	db $ff, $ff, $00, $00
+	db $ff, $00, $00, $20
+	db $00, $ff, $00, $40
+	db $00, $00, $00, $60
+; 8dec3
+
+Unknown_8dec3: ; 8dec3
+	db 10
+	db $ff, $00, $00, $00
+	db $ff, $08, $01, $00
+	db $ff, $10, $01, $00
+	db $ff, $18, $01, $00
+	db $ff, $20, $00, $20
+	db $00, $00, $00, $40
+	db $00, $08, $01, $40
+	db $00, $10, $01, $40
+	db $00, $18, $01, $40
+	db $00, $20, $00, $60
+; 8deec
+
+Unknown_8deec: ; 8deec
+	db 15
+	db $ec, $f4, $00, $11
+	db $ec, $fc, $01, $11
+	db $ec, $04, $02, $11
+	db $f4, $f4, $03, $11
+	db $f4, $fc, $04, $11
+	db $f4, $04, $05, $11
+	db $fc, $f4, $06, $11
+	db $fc, $fc, $07, $11
+	db $fc, $04, $08, $11
+	db $04, $f4, $09, $11
+	db $04, $fc, $0a, $11
+	db $04, $04, $0b, $11
+	db $0c, $f4, $0c, $11
+	db $0c, $fc, $0d, $11
+	db $0c, $04, $0e, $11
+; 8df29
+
+Unknown_8df29: ; 8df29
+	db 6
+	db $f4, $f4, $00, $15
+	db $f4, $fc, $02, $15
+	db $f4, $04, $00, $35
+	db $04, $f4, $04, $15
+	db $04, $fc, $06, $15
+	db $04, $04, $04, $35
+; 8df42
+
+Unknown_8df42: ; 8df42
+	db 6
+	db $f4, $f4, $00, $16
+	db $f4, $fc, $02, $16
+	db $f4, $04, $04, $16
+	db $04, $f4, $06, $16
+	db $04, $fc, $08, $16
+	db $04, $04, $0a, $16
+; 8df5b
+
+Unknown_8df5b: ; 8df5b
+	db 6
+	db $f4, $f4, $00, $16
+	db $f4, $fc, $02, $16
+	db $f4, $04, $04, $16
+	db $04, $f4, $0c, $16
+	db $04, $fc, $0e, $16
+	db $04, $04, $10, $16
+; 8df74
+
+Unknown_8df74: ; 8df74
+	db 6
+	db $f4, $f4, $00, $16
+	db $f4, $fc, $02, $16
+	db $f4, $04, $04, $16
+	db $04, $f4, $12, $16
+	db $04, $fc, $14, $16
+	db $04, $04, $16, $16
+; 8df8d
+
+Unknown_8df8d: ; 8df8d
+	db 6
+	db $f4, $f4, $00, $16
+	db $f4, $fc, $02, $16
+	db $f4, $04, $04, $16
+	db $04, $f4, $18, $16
+	db $04, $fc, $1a, $16
+	db $04, $04, $1c, $16
+; 8dfa6
+
+Unknown_8dfa6: ; 8dfa6
+	db 6
+	db $f4, $f4, $1e, $16
+	db $f4, $fc, $20, $16
+	db $f4, $04, $22, $16
+	db $04, $f4, $24, $16
+	db $04, $fc, $26, $16
+	db $04, $04, $28, $16
+; 8dfbf
+
+Unknown_8dfbf: ; 8dfbf
+	db 3
+	db $f4, $fc, $00, $10
+	db $fc, $fc, $00, $10
+	db $04, $fc, $00, $10
+; 8dfcc
+
+Unknown_8dfcc: ; 8dfcc
+	db 6
+	db $00, $00, $00, $00
+	db $00, $08, $01, $00
+	db $00, $10, $01, $00
+	db $00, $18, $01, $00
+	db $00, $20, $02, $00
+	db $00, $28, $03, $00
+; 8dfe5
+
+Unknown_8dfe5: ; 8dfe5
+	db 4
+	db $00, $00, $00, $00
+	db $00, $08, $01, $00
+	db $00, $10, $02, $00
+	db $00, $18, $03, $00
+; 8dff6
+
+Unknown_8dff6: ; 8dff6
+	db 4
+	db $f8, $f6, $00, $06
+	db $f8, $02, $01, $06
+	db $00, $f6, $02, $06
+	db $00, $02, $03, $06
+; 8e007
+
+Unknown_8e007: ; 8e007
+	db 4
+	db $f8, $f4, $00, $06
+	db $f8, $04, $01, $06
+	db $00, $f4, $02, $06
+	db $00, $04, $03, $06
+; 8e018
+
+Unknown_8e018: ; 8e018
+	db 4
+	db $f8, $f0, $00, $06
+	db $f8, $08, $01, $06
+	db $00, $f0, $02, $06
+	db $00, $08, $03, $06
+; 8e029
+
+Unknown_8e029: ; 8e029
+	db 19
+	db $f8, $e0, $00, $00
+	db $f0, $e8, $02, $00
+	db $00, $e8, $04, $00
+	db $e8, $f0, $06, $00
+	db $f8, $f0, $08, $00
+	db $08, $f0, $0a, $00
+	db $e8, $f8, $0c, $00
+	db $f8, $f8, $0e, $00
+	db $08, $f8, $10, $00
+	db $e8, $00, $12, $00
+	db $f8, $00, $14, $00
+	db $08, $00, $16, $00
+	db $e8, $08, $18, $00
+	db $f8, $08, $1a, $00
+	db $08, $08, $1c, $00
+	db $f8, $10, $1e, $00
+	db $08, $10, $20, $00
+	db $f0, $18, $22, $00
+	db $00, $18, $24, $00
+; 8e076
+
+Unknown_8e076: ; 8e076
+	db 16
+	db $f8, $e0, $00, $00
+	db $f0, $e8, $02, $00
+	db $00, $e8, $04, $00
+	db $f8, $f0, $26, $00
+	db $08, $f0, $0a, $00
+	db $e8, $f8, $28, $00
+	db $f8, $f8, $2a, $00
+	db $08, $f8, $10, $00
+	db $f8, $00, $2c, $00
+	db $08, $00, $16, $00
+	db $f8, $08, $30, $00
+	db $08, $08, $1c, $00
+	db $f8, $10, $1e, $00
+	db $08, $10, $20, $00
+	db $f0, $18, $22, $00
+	db $00, $18, $24, $00
+; 8e0b7
+
+Unknown_8e0b7: ; 8e0b7
+	db 15
+	db $f8, $e0, $00, $00
+	db $f0, $e8, $02, $00
+	db $00, $e8, $32, $00
+	db $f8, $f0, $34, $00
+	db $08, $f0, $36, $00
+	db $f8, $f8, $38, $00
+	db $08, $f8, $3a, $00
+	db $f8, $00, $3c, $00
+	db $08, $00, $3e, $00
+	db $f8, $08, $30, $00
+	db $08, $08, $1c, $00
+	db $f8, $10, $1e, $00
+	db $08, $10, $20, $00
+	db $f0, $18, $22, $00
+	db $00, $18, $24, $00
+; 8e0f4
+
+Unknown_8e0f4: ; 8e0f4
+	db 17
+	db $f8, $e0, $00, $00
+	db $f0, $e8, $02, $00
+	db $00, $e8, $04, $00
+	db $f8, $f0, $40, $00
+	db $08, $f0, $42, $00
+	db $18, $f0, $44, $00
+	db $f8, $f8, $46, $00
+	db $08, $f8, $48, $00
+	db $18, $f8, $4a, $00
+	db $f8, $00, $4c, $00
+	db $08, $00, $4e, $00
+	db $f8, $08, $30, $00
+	db $08, $08, $1c, $00
+	db $f8, $10, $1e, $00
+	db $08, $10, $20, $00
+	db $f0, $18, $22, $00
+	db $00, $18, $24, $00
+; 8e139
+
+Unknown_8e139: ; 8e139
+	db 17
+	db $f8, $e0, $00, $00
+	db $f0, $e8, $02, $00
+	db $00, $e8, $04, $00
+	db $f8, $f0, $50, $00
+	db $08, $f0, $0a, $00
+	db $e8, $f8, $52, $00
+	db $f8, $f8, $54, $00
+	db $08, $f8, $10, $00
+	db $e8, $00, $56, $00
+	db $f8, $00, $2e, $00
+	db $08, $00, $16, $00
+	db $f8, $08, $30, $00
+	db $08, $08, $1c, $00
+	db $f8, $10, $1e, $00
+	db $08, $10, $20, $00
+	db $f0, $18, $22, $00
+	db $00, $18, $24, $00
+; 8e17e
+
+Unknown_8e17e: ; 8e17e
+	db 1
+	db $fc, $fc, $00, $11
+; 8e183
+
+Unknown_8e183: ; 8e183
+	db 12
+	db $00, $00, $30, $00
+	db $00, $08, $31, $00
+	db $00, $10, $31, $00
+	db $00, $18, $31, $00
+	db $00, $20, $31, $00
+	db $00, $28, $32, $00
+	db $08, $00, $33, $00
+	db $08, $08, $34, $00
+	db $08, $10, $34, $00
+	db $08, $18, $34, $00
+	db $08, $20, $34, $00
+	db $08, $28, $35, $00
+; 8e1b4
+
+Unknown_8e1b4: ; 8e1b4
+	db 1
+	db $00, $00, $ed, $00
+; 8e1b9
+
+Unknown_8e1b9: ; 8e1b9
+	db 4
+	db $ff, $ff, $30, $00
+	db $ff, $01, $32, $00
+	db $01, $ff, $33, $00
+	db $01, $01, $35, $00
+; 8e1ca
+
+Unknown_8e1ca: ; 8e1ca
+	db 8
+	db $ff, $ff, $30, $00
+	db $ff, $04, $31, $00
+	db $ff, $0c, $31, $00
+	db $ff, $11, $32, $00
+	db $01, $ff, $33, $00
+	db $01, $04, $34, $00
+	db $01, $0c, $34, $00
+	db $01, $11, $35, $00
+; 8e1eb
+
+Unknown_8e1eb: ; 8e1eb
+	db 1
+	db $00, $00, $34, $00
+; 8e1f0
+
+Unknown_8e1f0: ; 8e1f0
+	db 2
+	db $00, $00, $30, $00
+	db $08, $00, $33, $00
+; 8e1f9
+
+Unknown_8e1f9: ; 8e1f9
+	db 2
+	db $00, $00, $32, $00
+	db $08, $00, $35, $00
+; 8e202
+
+Unknown_8e202: ; 8e202
+	db 4
+	db $f8, $f8, $00, $01
+	db $f8, $00, $01, $01
+	db $00, $f8, $02, $01
+	db $00, $00, $03, $01
+; 8e213
+
+Unknown_8e213: ; 8e213
+	db 4
+	db $f8, $f8, $00, $81
+	db $f8, $00, $01, $81
+	db $00, $f8, $02, $81
+	db $00, $00, $03, $81
+; 8e224
+
+Unknown_8e224: ; 8e224
+	db 1
+	db $fc, $fc, $00, $02
+; 8e229
+
+Unknown_8e229: ; 8e229
+	db 4
+	db $f0, $fc, $00, $03
+	db $f8, $fc, $01, $03
+	db $00, $fc, $02, $03
+	db $08, $fc, $03, $03
+; 8e23a
+
+Unknown_8e23a: ; 8e23a
+	db 4
+	db $f0, $fc, $03, $44
+	db $f8, $fc, $02, $44
+	db $00, $fc, $01, $44
+	db $08, $fc, $00, $44
+; 8e24b
+
+Unknown_8e24b: ; 8e24b
+	db 4
+	db $f8, $f8, $00, $01
+	db $f8, $00, $00, $21
+	db $00, $f8, $00, $41
+	db $00, $00, $00, $61
+; 8e25c
+
+Unknown_8e25c: ; 8e25c
+	db 8
+	db $f4, $f4, $00, $01
+	db $f4, $fc, $01, $01
+	db $f4, $04, $00, $21
+	db $fc, $f4, $02, $01
+	db $fc, $04, $02, $21
+	db $04, $f4, $00, $41
+	db $04, $fc, $01, $41
+	db $04, $04, $00, $61
+; 8e27d
+
+Unknown_8e27d: ; 8e27d
+	db 12
+	db $f0, $f0, $00, $01
+	db $f0, $f8, $01, $01
+	db $f8, $f0, $02, $01
+	db $f0, $00, $01, $21
+	db $f0, $08, $00, $21
+	db $f8, $08, $02, $21
+	db $00, $f0, $02, $41
+	db $08, $f0, $00, $41
+	db $08, $f8, $01, $41
+	db $00, $08, $02, $61
+	db $08, $00, $01, $61
+	db $08, $08, $00, $61
+; 8e2ae
+
+Unknown_8e2ae: ; 8e2ae
+	db 36
+	db $e8, $08, $05, $00
+	db $e8, $10, $06, $00
+	db $e8, $18, $07, $00
+	db $f0, $e8, $11, $00
+	db $f0, $f0, $12, $00
+	db $f0, $f8, $13, $00
+	db $f0, $00, $14, $00
+	db $f0, $08, $15, $00
+	db $f0, $10, $16, $00
+	db $f0, $18, $17, $00
+	db $f8, $e0, $20, $00
+	db $f8, $e8, $21, $00
+	db $f8, $f0, $22, $00
+	db $f8, $f8, $23, $00
+	db $f8, $00, $24, $00
+	db $f8, $08, $25, $00
+	db $f8, $10, $26, $00
+	db $f8, $18, $27, $00
+	db $00, $e0, $30, $00
+	db $00, $e8, $31, $00
+	db $00, $f0, $32, $00
+	db $00, $f8, $33, $00
+	db $00, $00, $34, $00
+	db $00, $08, $35, $00
+	db $00, $10, $36, $00
+	db $08, $e0, $40, $00
+	db $08, $e8, $41, $00
+	db $08, $f0, $42, $00
+	db $08, $f8, $43, $00
+	db $08, $00, $44, $00
+	db $08, $08, $45, $00
+	db $08, $10, $46, $00
+	db $08, $18, $47, $00
+	db $10, $e0, $50, $00
+	db $10, $e8, $51, $00
+	db $10, $18, $57, $00
+; 8e33f
+
+Unknown_8e33f: ; 8e33f
+	db 28
+	db $e8, $00, $04, $00
+	db $e8, $08, $05, $00
+	db $e8, $10, $06, $00
+	db $f0, $e8, $11, $00
+	db $f0, $f0, $12, $00
+	db $f0, $f8, $13, $00
+	db $f0, $00, $14, $00
+	db $f0, $08, $15, $00
+	db $f0, $10, $16, $00
+	db $f8, $e8, $21, $00
+	db $f8, $f0, $22, $00
+	db $f8, $f8, $23, $00
+	db $f8, $00, $24, $00
+	db $f8, $08, $25, $00
+	db $f8, $10, $26, $00
+	db $00, $e0, $30, $00
+	db $00, $e8, $31, $00
+	db $00, $f0, $32, $00
+	db $00, $f8, $33, $00
+	db $00, $00, $34, $00
+	db $00, $08, $35, $00
+	db $08, $f0, $42, $00
+	db $08, $f8, $43, $00
+	db $08, $00, $44, $00
+	db $08, $08, $45, $00
+	db $10, $f8, $53, $00
+	db $10, $00, $54, $00
+	db $10, $08, $55, $00
+; 8e3b0
+
+Unknown_8e3b0: ; 8e3b0
+	db 30
+	db $e8, $00, $04, $00
+	db $e8, $08, $05, $00
+	db $f0, $e8, $11, $00
+	db $f0, $f0, $12, $00
+	db $f0, $f8, $13, $00
+	db $f0, $00, $14, $00
+	db $f0, $08, $15, $00
+	db $f0, $10, $16, $00
+	db $f0, $18, $17, $00
+	db $f8, $e0, $20, $00
+	db $f8, $e8, $21, $00
+	db $f8, $f0, $22, $00
+	db $f8, $f8, $23, $00
+	db $f8, $00, $24, $00
+	db $f8, $08, $25, $00
+	db $f8, $10, $26, $00
+	db $00, $e0, $30, $00
+	db $00, $e8, $31, $00
+	db $00, $f0, $32, $00
+	db $00, $f8, $33, $00
+	db $00, $00, $34, $00
+	db $00, $08, $35, $00
+	db $08, $f0, $42, $00
+	db $08, $f8, $43, $00
+	db $08, $00, $44, $00
+	db $08, $08, $45, $00
+	db $10, $f0, $52, $00
+	db $10, $f8, $53, $00
+	db $10, $00, $54, $00
+	db $10, $08, $55, $00
+; 8e429
+
+Unknown_8e429: ; 8e429
+	db 31
+	db $f0, $e8, $11, $00
+	db $f0, $f0, $12, $00
+	db $f0, $f8, $13, $00
+	db $f0, $00, $14, $00
+	db $f0, $08, $15, $00
+	db $f0, $10, $16, $00
+	db $f0, $18, $17, $00
+	db $f8, $e0, $20, $00
+	db $f8, $e8, $21, $00
+	db $f8, $f0, $22, $00
+	db $f8, $f8, $23, $00
+	db $f8, $00, $24, $00
+	db $f8, $08, $25, $00
+	db $f8, $10, $26, $00
+	db $f8, $18, $27, $00
+	db $00, $e0, $30, $00
+	db $00, $e8, $31, $00
+	db $00, $f0, $32, $00
+	db $00, $f8, $33, $00
+	db $00, $00, $34, $00
+	db $00, $08, $35, $00
+	db $00, $10, $36, $00
+	db $08, $e8, $41, $00
+	db $08, $f0, $42, $00
+	db $08, $f8, $43, $00
+	db $08, $00, $44, $00
+	db $08, $08, $45, $00
+	db $10, $e8, $51, $00
+	db $10, $f0, $52, $00
+	db $10, $00, $54, $00
+	db $10, $08, $55, $00
+; 8e4a6
+
+Unknown_8e4a6: ; 8e4a6
+	db 25
+	db $ec, $ec, $00, $09
+	db $ec, $f4, $01, $09
+	db $ec, $fc, $02, $09
+	db $ec, $04, $03, $09
+	db $ec, $0c, $04, $09
+	db $f4, $ec, $10, $09
+	db $f4, $f4, $11, $09
+	db $f4, $fc, $12, $09
+	db $f4, $04, $13, $09
+	db $f4, $0c, $14, $09
+	db $fc, $ec, $20, $09
+	db $fc, $f4, $21, $09
+	db $fc, $fc, $22, $09
+	db $fc, $04, $23, $09
+	db $fc, $0c, $24, $09
+	db $04, $ec, $30, $09
+	db $04, $f4, $31, $09
+	db $04, $fc, $32, $09
+	db $04, $04, $33, $09
+	db $04, $0c, $34, $09
+	db $0c, $ec, $40, $09
+	db $0c, $f4, $41, $09
+	db $0c, $fc, $42, $09
+	db $0c, $04, $43, $09
+	db $0c, $0c, $44, $09
+; 8e50b
+
+Unknown_8e50b: ; 8e50b
+	db 16
+	db $f0, $ec, $00, $0a
+	db $f0, $f4, $01, $0a
+	db $f0, $fc, $02, $0a
+	db $f0, $04, $03, $0a
+	db $f8, $ec, $04, $0a
+	db $f8, $f4, $05, $0a
+	db $f8, $fc, $06, $0a
+	db $f8, $04, $07, $0a
+	db $00, $ec, $08, $0a
+	db $00, $f4, $09, $0a
+	db $00, $fc, $0a, $0a
+	db $00, $04, $0b, $0a
+	db $08, $ec, $0c, $0a
+	db $08, $f4, $0d, $0a
+	db $08, $fc, $0e, $0a
+	db $08, $04, $0f, $0a
+; 8e54c
+
+Unknown_8e54c: ; 8e54c
+	db 1
+	db $fc, $fc, $00, $00
+; 8e551
+
+Unknown_8e551: ; 8e551
+	db 3
+	db $00, $f8, $00, $00
+	db $f8, $f8, $01, $00
+	db $f8, $00, $02, $00
+; 8e55e
+
+Unknown_8e55e: ; 8e55e
+	db 7
+	db $08, $f0, $00, $00
+	db $00, $f0, $01, $00
+	db $f8, $f0, $02, $00
+	db $f8, $f8, $03, $00
+	db $f0, $f8, $04, $00
+	db $f0, $00, $05, $00
+	db $f0, $08, $06, $00
+; 8e57b
+
+Unknown_8e57b: ; 8e57b
+	db 8
+	db $f8, $f0, $00, $00
+	db $f8, $f8, $01, $00
+	db $f8, $00, $01, $20
+	db $f8, $08, $00, $20
+	db $00, $f0, $00, $40
+	db $00, $f8, $01, $40
+	db $00, $00, $01, $60
+	db $00, $08, $00, $60
+; 8e59c
+
+Unknown_8e59c: ; 8e59c
+	db 12
+	db $e8, $f8, $00, $00
+	db $f0, $f8, $01, $00
+	db $f8, $f8, $02, $00
+	db $e8, $00, $00, $20
+	db $f0, $00, $01, $20
+	db $f8, $00, $02, $20
+	db $00, $f8, $02, $40
+	db $08, $f8, $01, $40
+	db $10, $f8, $00, $40
+	db $00, $00, $02, $60
+	db $08, $00, $01, $60
+	db $10, $00, $00, $60
+; 8e5cd
+
+Unknown_8e5cd: ; 8e5cd
+	db 20
+	db $ec, $f0, $00, $00
+	db $ec, $f8, $01, $00
+	db $ec, $00, $02, $00
+	db $ec, $08, $03, $00
+	db $f4, $f0, $04, $00
+	db $f4, $f8, $05, $00
+	db $f4, $00, $06, $00
+	db $f4, $08, $07, $00
+	db $fc, $f0, $08, $00
+	db $fc, $f8, $09, $00
+	db $fc, $00, $0a, $00
+	db $fc, $08, $0b, $00
+	db $04, $f0, $0c, $00
+	db $04, $f8, $0d, $00
+	db $04, $00, $0e, $00
+	db $04, $08, $0f, $00
+	db $0c, $f0, $10, $00
+	db $0c, $f8, $11, $00
+	db $0c, $00, $12, $00
+	db $0c, $08, $13, $00
+; 8e61e
+
+Unknown_8e61e: ; 8e61e
+	db 20
+	db $00, $08, $00, $81
+	db $08, $10, $00, $81
+	db $10, $18, $00, $81
+	db $18, $20, $00, $81
+	db $20, $28, $00, $81
+	db $18, $30, $00, $81
+	db $10, $38, $00, $81
+	db $08, $40, $00, $81
+	db $00, $48, $00, $81
+	db $08, $50, $00, $81
+	db $10, $58, $00, $81
+	db $18, $60, $00, $81
+	db $20, $68, $00, $81
+	db $18, $70, $00, $81
+	db $10, $78, $00, $81
+	db $08, $80, $00, $81
+	db $00, $88, $00, $81
+	db $08, $90, $00, $81
+	db $10, $98, $00, $81
+	db $18, $a0, $00, $81
+; 8e66f
+
+Unknown_8e66f: ; 8e66f
+	db 4
+	db $f8, $f8, $00, $02
+	db $f8, $00, $01, $02
+	db $00, $f8, $02, $02
+	db $00, $00, $03, $02
+; 8e680
+
+Unknown_8e680: ; 8e680
+	db 9
+	db $f0, $f4, $00, $01
+	db $f0, $fc, $01, $01
+	db $f0, $04, $02, $01
+	db $f8, $f4, $10, $01
+	db $f8, $fc, $11, $01
+	db $f8, $04, $12, $01
+	db $00, $f4, $20, $01
+	db $00, $fc, $21, $01
+	db $00, $04, $22, $01
+; 8e6a5
+
+Unknown_8e6a5: ; 8e6a5
+	db 24
+	db $d8, $f4, $00, $01
+	db $d8, $fc, $01, $01
+	db $d8, $04, $02, $01
+	db $d8, $0c, $03, $01
+	db $e0, $f4, $10, $01
+	db $e0, $fc, $11, $01
+	db $e0, $04, $12, $01
+	db $e0, $0c, $13, $01
+	db $e8, $f4, $20, $01
+	db $e8, $fc, $21, $01
+	db $e8, $04, $22, $01
+	db $e8, $0c, $23, $01
+	db $f0, $f4, $30, $01
+	db $f0, $fc, $31, $01
+	db $f0, $04, $32, $01
+	db $f0, $0c, $33, $01
+	db $f8, $f4, $40, $01
+	db $f8, $fc, $41, $01
+	db $f8, $04, $42, $01
+	db $f8, $0c, $43, $01
+	db $00, $f4, $50, $01
+	db $00, $fc, $51, $01
+	db $00, $04, $52, $01
+	db $00, $0c, $53, $01
+; 8e706
+Unknown_8e706: ; Broken 2bpp pointers
+	dbbw $80, $01, $672a ; 128-tile 2bpp at 1:672a (inside Multiply)
+	dbbw $80, $01, $672a
+	dbbw $80, $01, $672a
+	dbbw $80, $01, $672a
+	dbbw $10, $37, $672a ; 16-tile 2bpp at 37:672a (within Tileset11GFX)
+	dbbw $10, $11, $672a ; 16-tile 2bpp at 11:672a (empty data)
+	dbbw $10, $39, $672a ; 16-tile 2bpp at 39:672a (empty data)
+	dbbw $10, $24, $672a ; 16-tile 2bpp at 24:672a (inside Function926f7)
+	dbbw $10, $21, $672a ; 16-tile 2bpp at 21:672a (inside Function8671c)
+
+Function8e72a: ; 8e72a
+	add $10
+Function8e72c: ; 8e72c
+	and $3f
+	cp $20
+	jr nc, .asm_8e737
+	call Function8e741
+	ld a, h
 	ret
 
-.AnyDirection
-	ld a, 12
+.asm_8e737
+	and $1f
+	call Function8e741
+	ld a, h
+	xor $ff ; cpl
+	inc a
 	ret
+; 8e741
 
-.OneDirection
-	ld a, 4
+Function8e741: ; 8e741
+	ld e, a
+	ld a, d
+	ld d, 0
+	ld hl, Unknown_8e75d
+rept 2
+	add hl, de
+endr
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	ld hl, 0
+.asm_8e750
+	srl a
+	jr nc, .asm_8e755
+	add hl, de
+
+.asm_8e755
+	sla e
+	rl d
+	and a
+	jr nz, .asm_8e750
 	ret
-; 1439b
+; 8e75d
 
+Unknown_8e75d: ; 8e75d
+	sine_wave $100
 
-Function1439b: ; 1439b
-	ld hl, UsedSprites
-	ld c, SPRITE_GFX_LIST_CAPACITY
-.loop
-	ld a, [wSpriteFlags]
-	res 5, a
-	ld [wSpriteFlags], a
-	ld a, [hli]
+
+Function8e79d: ; 8e79d
+	ld a, [hSGB]
+	ld de, GFX_8e7f4
 	and a
-	jr z, .done
-	ld [hUsedSpriteIndex], a
-	ld a, [hli]
-	ld [hUsedSpriteTile], a
-	bit 7, a
-	jr z, .dont_set
-	ld a, [wSpriteFlags]
-	set 5, a
-	ld [wSpriteFlags], a
+	jr z, .asm_8e7a8
+	ld de, GFX_8e804
 
-.dont_set
+.asm_8e7a8
+	ld hl, VTiles0
+	lb bc, BANK(GFX_8e7f4), 1
+	call Request2bpp
+	ld c, $8
+	ld d, $0
+.asm_8e7b5
 	push bc
-	push hl
-	call Function143c8
-	pop hl
+	call Function8e7c6
+	call DelayFrame
 	pop bc
+rept 2
+	inc d
+endr
 	dec c
-	jr nz, .loop
-
-.done
+	jr nz, .asm_8e7b5
+	call ClearSprites
 	ret
-; 143c8
+; 8e7c6
 
-Function143c8: ; 143c8
-	ld a, [hUsedSpriteIndex]
-	call SafeGetSprite
-	ld a, [hUsedSpriteTile]
-	call .GetTileAddr
+Function8e7c6: ; 8e7c6
+	ld hl, Sprites
+	ld c, $8
+.asm_8e7cb
+	ld a, c
+	and a
+	ret z
+	dec c
+	ld a, c
+	sla a
+	sla a
+	sla a
+	push af
+	push de
 	push hl
+	call Function8e72c
+	pop hl
+	pop de
+	add $68
+	ld [hli], a
+	pop af
 	push de
-	push bc
-	ld a, [wSpriteFlags]
-	bit 7, a
-	jr nz, .skip
-	call .CopyToVram
+	push hl
+	call Function8e72a
+	pop hl
+	pop de
+	add $54
+	ld [hli], a
+	ld a, $0
+	ld [hli], a
+	ld a, $6
+	ld [hli], a
+	jr .asm_8e7cb
+; 8e7f4
 
-.skip
+GFX_8e7f4: ; 8e7f4
+INCBIN "gfx/unknown/08e7f4.2bpp"
+GFX_8e804: ; 8e804
+INCBIN "gfx/unknown/08e804.2bpp"
+
+ClearSpriteAnims: ; 8e814
+	push hl
+	push de
+	push bc
+	push af
+	ld hl, wSpriteAnimDict
+	ld bc, wSpriteAnimsEnd - wSpriteAnimDict
+.loop
+	ld [hl], $0
+	inc hl
+	dec bc
+	ld a, c
+	or b
+	jr nz, .loop
+	pop af
 	pop bc
-	ld l, c
-	ld h, $0
-rept 4
-	add hl, hl
-endr
 	pop de
-	add hl, de
-	ld d, h
-	ld e, l
 	pop hl
-	ld a, [wSpriteFlags]
-	bit 5, a
-	jr nz, .done
-	bit 6, a
-	jr nz, .done
-	ld a, [hUsedSpriteIndex]
-	call _DoesSpriteHaveFacings
-	jr c, .done
-	ld a, h
-	add $8
-	ld h, a
-	call .CopyToVram
-
-.done
 	ret
-; 14406
+; 8e82b
 
-.GetTileAddr: ; 14406
-; Return the address of tile (a) in (hl).
-	and $7f
+Function8e82b: ; 8e82b
+	ld a, e
+	call ReadMonMenuIcon
 	ld l, a
 	ld h, 0
-rept 4
 	add hl, hl
-endr
-	ld a, l
-	add VTiles0 % $100
-	ld l, a
-	ld a, h
-	adc VTiles0 / $100
-	ld h, a
+	ld de, IconPointers
+	add hl, de
+	ld a, [hli]
+	ld e, a
+	ld d, [hl]
+	ld b, BANK(Icons)
+	ld c, 8
 	ret
-; 14418
+; 8e83f
 
-.CopyToVram: ; 14418
-	ld a, [rVBK]
-	push af
-	ld a, [wSpriteFlags]
-	bit 5, a
-	ld a, $1
-	jr z, .bankswitch
-	ld a, $0
-
-.bankswitch
-	ld [rVBK], a
-	call Get2bpp
-	pop af
-	ld [rVBK], a
+Function8e83f: ; 8e83f
+	push hl
+	push de
+	push bc
+	call Function8e849
+	pop bc
+	pop de
+	pop hl
 	ret
-; 1442f
+; 8e849
 
-LoadEmote:: ; 1442f
-; Get the address of the pointer to emote c.
-	ld a, c
-	ld bc, 6
-	ld hl, EmotesPointers
-	call AddNTimes
-; Load the emote address into de
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-; load the length of the emote (in tiles) into c
-	inc hl
-	ld c, [hl]
-	swap c
-; load the emote pointer bank into b
-	inc hl
-	ld b, [hl]
-; load the VRAM destination into hl
-	inc hl
+Function8e849: ; 8e849
+	ld d, 0
+	ld hl, Jumptable_8e854
+rept 2
+	add hl, de
+endr
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
-; if the emote has a length of 0, do not proceed (error handling)
-	ld a, c
-	and a
-	ret z
-	call GetEmote2bpp
-	ret
-; 1444d
+	jp [hl]
+; 8e854
 
-emote_header: MACRO
-	dw \1
-	db \2 tiles, BANK(\1)
-	dw \3
-ENDM
 
-EmotesPointers: ; 144d
-; dw source address
-; db length, bank
-; dw dest address
+Jumptable_8e854: ; 8e854 (23:6854)
+	dw Function8e8d5
+	dw Function8e961
+	dw Function8e97d
+	dw Function8e99a
+	dw Function8e898
+	dw Function8e8b1
+	dw Function8e862
 
-	emote_header ShockEmote, 4, VTiles1 tile $78
-	emote_header QuestionEmote, 4, VTiles1 tile $78
-	emote_header HappyEmote, 4, VTiles1 tile $78
-	emote_header SadEmote, 4, VTiles1 tile $78
-	emote_header HeartEmote, 4, VTiles1 tile $78
-	emote_header BoltEmote, 4, VTiles1 tile $78
-	emote_header SleepEmote, 4, VTiles1 tile $78
-	emote_header FishEmote, 4, VTiles1 tile $78
-	emote_header FishingRodGFX1, 1, VTiles1 tile $7c
-	emote_header FishingRodGFX2, 2, VTiles1 tile $7c
-	emote_header FishingRodGFX3, 2, VTiles1 tile $7e
-	emote_header FishingRodGFX4, 1, VTiles1 tile $7e
-; 14495
 
+Function8e862: ; 8e862 (23:6862)
+	call Function8e908
+	call Function8e86c
+	call Function8e936
+	ret
 
-SpriteMons: ; 14495
-	db UNOWN
-	db GEODUDE
-	db GROWLITHE
-	db WEEDLE
-	db SHELLDER
-	db ODDISH
-	db GENGAR
-	db ZUBAT
-	db MAGIKARP
-	db SQUIRTLE
-	db TOGEPI
-	db BUTTERFREE
-	db DIGLETT
-	db POLIWAG
-	db PIKACHU
-	db CLEFAIRY
-	db CHARMANDER
-	db JYNX
-	db STARMIE
-	db BULBASAUR
-	db JIGGLYPUFF
-	db GRIMER
-	db EKANS
-	db PARAS
-	db TENTACOOL
-	db TAUROS
-	db MACHOP
-	db VOLTORB
-	db LAPRAS
-	db RHYDON
-	db MOLTRES
-	db SNORLAX
-	db GYARADOS
-	db LUGIA
-	db HO_OH
-; 144b8
+Function8e86c: ; 8e86c (23:686c)
+	push bc
+	ld a, [hObjectStructIndexBuffer]
+	ld hl, PartyMon1Item
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call AddNTimes
+	pop bc
+	ld a, [hl]
+	and a
+	jr z, .asm_8e890
+	push hl
+	push bc
+	ld d, a
+	callab ItemIsMail
+	pop bc
+	pop hl
+	jr c, .asm_8e88e
+	ld a, $6
+	jr .asm_8e892
+.asm_8e88e
+	ld a, $5
+.asm_8e890
+	ld a, $4
+.asm_8e892
+	ld hl, $1
+	add hl, bc
+	ld [hl], a
+	ret
 
+Function8e898: ; 8e898 (23:6898)
+	call Function8e8d5
+	ld hl, $2
+	add hl, bc
+	ld a, $0
+	ld [hl], a
+	ld hl, $4
+	add hl, bc
+	ld a, $48
+	ld [hl], a
+	ld hl, $5
+	add hl, bc
+	ld a, $48
+	ld [hl], a
+	ret
 
-OutdoorSprites: ; 144b8
-; Valid sprite IDs for each map group.
+Function8e8b1: ; 8e8b1 (23:68b1)
+	call Function8e908
+	call Function8e936
+	ld hl, $2
+	add hl, bc
+	ld a, $0
+	ld [hl], a
+	ld hl, $4
+	add hl, bc
+	ld a, $18
+	ld [hl], a
+	ld hl, $5
+	add hl, bc
+	ld a, $60
+	ld [hl], a
+	ld a, c
+	ld [wc608], a
+	ld a, b
+	ld [wc608 + 1], a
+	ret
 
-	dw Group1Sprites
-	dw Group2Sprites
-	dw Group3Sprites
-	dw Group4Sprites
-	dw Group5Sprites
-	dw Group6Sprites
-	dw Group7Sprites
-	dw Group8Sprites
-	dw Group9Sprites
-	dw Group10Sprites
-	dw Group11Sprites
-	dw Group12Sprites
-	dw Group13Sprites
-	dw Group14Sprites
-	dw Group15Sprites
-	dw Group16Sprites
-	dw Group17Sprites
-	dw Group18Sprites
-	dw Group19Sprites
-	dw Group20Sprites
-	dw Group21Sprites
-	dw Group22Sprites
-	dw Group23Sprites
-	dw Group24Sprites
-	dw Group25Sprites
-	dw Group26Sprites
-; 144ec
+Function8e8d5: ; 8e8d5 (23:68d5)
+	call Function8e908
+	call Function8e8df
+	call Function8e936
+	ret
 
+Function8e8df: ; 8e8df (23:68df)
+	push bc
+	ld a, [hObjectStructIndexBuffer]
+	ld hl, PartyMon1Item
+	ld bc, $30
+	call AddNTimes
+	pop bc
+	ld a, [hl]
+	and a
+	ret z
+	push hl
+	push bc
+	ld d, a
+	callab ItemIsMail
+	pop bc
+	pop hl
+	jr c, .asm_8e900
+	ld a, $3
+	jr .asm_8e902
+.asm_8e900
+	ld a, $2
+.asm_8e902
+	ld hl, $1
+	add hl, bc
+	ld [hl], a
+	ret
 
-Group13Sprites: ; 144ec
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_BLUE
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_SWIMMER_GIRL
-	db SPRITE_SWIMMER_GUY
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 14503
+Function8e908: ; 8e908 (23:6908)
+	ld a, [wc3b7]
+	push af
+	ld a, [hObjectStructIndexBuffer]
+	ld hl, PartySpecies
+	ld e, a
+	ld d, $0
+	add hl, de
+	ld a, [hl]
+	call ReadMonMenuIcon
+	ld [CurIcon], a
+	call Function8e9db
+	ld a, [hObjectStructIndexBuffer]
+; y coord
+rept 4
+	add a
+endr
+	add $1c
+	ld d, a
+; x coord
+	ld e, $10
+; type is partymon icon
+	ld a, SPRITE_ANIM_INDEX_00
+	call InitSpriteAnimStruct
+	pop af
+	ld hl, $3
+	add hl, bc
+	ld [hl], a
+	ret
 
-Group23Sprites: ; 14503
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_BLUE
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_SWIMMER_GIRL
-	db SPRITE_SWIMMER_GUY
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 1451a
+Function8e936: ; 8e936 (23:6936)
+	push bc
+	ld a, [hObjectStructIndexBuffer]
+	ld b, a
+	call Function8e94c
+	ld a, b
+	pop bc
+	ld hl, $9
+	add hl, bc
+	ld [hl], a
+	rlca
+	rlca
+	ld hl, $d
+	add hl, bc
+	ld [hl], a
+	ret
 
-Group14Sprites: ; 1451a
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_BLUE
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_SWIMMER_GIRL
-	db SPRITE_SWIMMER_GUY
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 14531
+Function8e94c: ; 8e94c (23:694c)
+	callba PlacePartymonHPBar
+	call GetHPPal
+	ld e, d
+	ld d, 0
+	ld hl, Unknown_8e95e
+	add hl, de
+	ld b, [hl]
+	ret
+; 8e95e (23:695e)
 
-Group6Sprites: ; 14531
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_BLUE
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_SWIMMER_GIRL
-	db SPRITE_SWIMMER_GUY
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 14548
+Unknown_8e95e: ; 8e95e
+	db $00, $40, $80
+; 8e961
 
-Group7Sprites: ; 14548
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_SUPER_NERD
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_FISHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_LASS
-	db SPRITE_POKEFAN_M
-	db SPRITE_ROCKET
-	db SPRITE_MISTY
-	db SPRITE_POKE_BALL
-	db SPRITE_SLOWPOKE
-; 1455f
+Function8e961: ; 8e961 (23:6961)
+	ld a, [wd265]
+	call ReadMonMenuIcon
+	ld [CurIcon], a
+	xor a
+	call GetIconGFX
+	lb de, $24, $20
+	ld a, SPRITE_ANIM_INDEX_00
+	call InitSpriteAnimStruct
+	ld hl, $2
+	add hl, bc
+	ld [hl], $0
+	ret
 
-Group25Sprites: ; 1455f
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_SUPER_NERD
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_FISHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_LASS
-	db SPRITE_POKEFAN_M
-	db SPRITE_ROCKET
-	db SPRITE_MISTY
-	db SPRITE_POKE_BALL
-	db SPRITE_SLOWPOKE
-; 14576
+Function8e97d: ; 8e97d (23:697d)
+	ld a, [wd265]
+	call ReadMonMenuIcon
+	ld [CurIcon], a
+	xor a
+	call GetIconGFX
+	ld d, $1a
+	ld e, $24
+	ld a, SPRITE_ANIM_INDEX_00
+	call InitSpriteAnimStruct
+	ld hl, $2
+	add hl, bc
+	ld [hl], $0
+	ret
 
-Group21Sprites: ; 14576
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_FISHER
-	db SPRITE_POLIWAG
-	db SPRITE_TEACHER
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_LASS
-	db SPRITE_BIKER
-	db SPRITE_SILVER
-	db SPRITE_BLUE
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 1458d
+Function8e99a: ; 8e99a (23:699a)
+	ld a, [wd265]
+	call ReadMonMenuIcon
+	ld [CurIcon], a
+	ld a, $62
+	ld [wc3b7], a
+	call Function8e9db
+	ret
 
-Group18Sprites: ; 1458d
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_POKEFAN_M
-	db SPRITE_MACHOP
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_FISHER
-	db SPRITE_TEACHER
-	db SPRITE_SUPER_NERD
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_BIKER
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 145a4
+GetSpeciesIcon: ; 8e9ac
+; Load species icon into VRAM at tile a
+	push de
+	ld a, [wd265]
+	call ReadMonMenuIcon
+	ld [CurIcon], a
+	pop de
+	ld a, e
+	call GetIconGFX
+	ret
+; 8e9bc
 
-Group12Sprites: ; 145a4
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_POKEFAN_M
-	db SPRITE_MACHOP
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_FISHER
-	db SPRITE_TEACHER
-	db SPRITE_SUPER_NERD
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_BIKER
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 145bb
 
-Group17Sprites: ; 145bb
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_POKEFAN_M
-	db SPRITE_MACHOP
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_FISHER
-	db SPRITE_TEACHER
-	db SPRITE_SUPER_NERD
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_BIKER
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 145d2
+Function8e9bc: ; 8e9bc (23:69bc)
+	push de
+	ld a, [wd265]
+	call ReadMonMenuIcon
+	ld [CurIcon], a
+	pop de
+	ld a, e
+	call GetIcon_a
+	ret
+; 8e9cc (23:69cc)
 
-Group16Sprites: ; 145d2
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_POKEFAN_M
-	db SPRITE_BUENA
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_FISHER
-	db SPRITE_TEACHER
-	db SPRITE_SUPER_NERD
-	db SPRITE_MACHOP
-	db SPRITE_BIKER
-	db SPRITE_POKE_BALL
-	db SPRITE_BOULDER
-; 145e9
+Function8e9cc: ; 8e9cc
+	push de
+	ld a, [wd265]
+	call ReadMonMenuIcon
+	ld [CurIcon], a
+	pop de
+	call GetIcon_de
+	ret
+; 8e9db
 
-Group24Sprites: ; 145e9
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_SILVER
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_YOUNGSTER
-	db SPRITE_MONSTER
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 14600
+Function8e9db: ; 8e9db (23:69db)
+	ld a, [wc3b7]
 
-Group26Sprites: ; 14600
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_SILVER
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_YOUNGSTER
-	db SPRITE_MONSTER
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 14617
+GetIconGFX: ; 8e9de
+	call GetIcon_a
+	ld de, $80 ; 8 tiles
+	add hl, de
+	ld de, HeldItemIcons
+	lb bc, BANK(HeldItemIcons), 2
+	call GetGFXUnlessMobile
+	ld a, [wc3b7]
+	add 10
+	ld [wc3b7], a
+	ret
 
-Group19Sprites: ; 14617
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_SILVER
-	db SPRITE_TEACHER
-	db SPRITE_FISHER
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_YOUNGSTER
-	db SPRITE_MONSTER
-	db SPRITE_GRAMPS
-	db SPRITE_BUG_CATCHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 1462e
+HeldItemIcons:
+INCBIN "gfx/icon/mail.2bpp"
+INCBIN "gfx/icon/item.2bpp"
+; 8ea17
 
-Group10Sprites: ; 1462e
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_FISHER
-	db SPRITE_LASS
-	db SPRITE_OFFICER
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_BUG_CATCHER
-	db SPRITE_SUPER_NERD
-	db SPRITE_WEIRD_TREE
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 14645
+GetIcon_de: ; 8ea17
+; Load icon graphics into VRAM starting from tile de.
+	ld l, e
+	ld h, d
+	jr GetIcon
 
-Group4Sprites: ; 14645
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_FISHER
-	db SPRITE_LASS
-	db SPRITE_OFFICER
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_BUG_CATCHER
-	db SPRITE_SUPER_NERD
-	db SPRITE_WEIRD_TREE
-	db SPRITE_POKE_BALL
-	db SPRITE_FRUIT_TREE
-; 1465c
+GetIcon_a: ; 8ea1b
+; Load icon graphics into VRAM starting from tile a.
+	ld l, a
+	ld h, 0
 
-Group8Sprites: ; 1465c
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_KURT_OUTSIDE
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_OFFICER
-	db SPRITE_POKEFAN_M
-	db SPRITE_BLACK_BELT
-	db SPRITE_TEACHER
-	db SPRITE_AZALEA_ROCKET
-	db SPRITE_LASS
-	db SPRITE_SILVER
-	db SPRITE_FRUIT_TREE
-	db SPRITE_SLOWPOKE
-; 14673
+GetIcon: ; 8ea1e
+; Load icon graphics into VRAM starting from tile hl.
 
-Group11Sprites: ; 14673
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_POKE_BALL
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_OFFICER
-	db SPRITE_POKEFAN_M
-	db SPRITE_DAYCARE_MON_1
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_ROCKET
-	db SPRITE_LASS
-	db SPRITE_DAYCARE_MON_2
-	db SPRITE_FRUIT_TREE
-	db SPRITE_SLOWPOKE
-; 1468a
+; One tile is 16 bytes long.
+rept 4
+	add hl, hl
+endr
 
-Group22Sprites: ; 1468a
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_STANDING_YOUNGSTER
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_OLIVINE_RIVAL
-	db SPRITE_POKEFAN_M
-	db SPRITE_LASS
-	db SPRITE_BUENA
-	db SPRITE_SWIMMER_GIRL
-	db SPRITE_SAILOR
-	db SPRITE_POKEFAN_F
-	db SPRITE_SUPER_NERD
-	db SPRITE_TAUROS
-	db SPRITE_FRUIT_TREE
-	db SPRITE_ROCK
-; 146a1
+	ld de, VTiles0
+	add hl, de
+	push hl
 
-Group1Sprites: ; 146a1
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_STANDING_YOUNGSTER
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_OLIVINE_RIVAL
-	db SPRITE_POKEFAN_M
-	db SPRITE_LASS
-	db SPRITE_BUENA
-	db SPRITE_SWIMMER_GIRL
-	db SPRITE_SAILOR
-	db SPRITE_POKEFAN_F
-	db SPRITE_SUPER_NERD
-	db SPRITE_TAUROS
-	db SPRITE_FRUIT_TREE
-	db SPRITE_ROCK
-; 146b8
+; The icons are contiguous, in order and of the same
+; size, so the pointer table is somewhat redundant.
+	ld a, [CurIcon]
+	push hl
+	ld l, a
+	ld h, 0
+	add hl, hl
+	ld de, IconPointers
+	add hl, de
+	ld a, [hli]
+	ld e, a
+	ld d, [hl]
+	pop hl
 
-Group9Sprites: ; 146b8
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_LANCE
-	db SPRITE_GRAMPS
-	db SPRITE_SUPER_NERD
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_FISHER
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_LASS
-	db SPRITE_YOUNGSTER
-	db SPRITE_GYARADOS
-	db SPRITE_FRUIT_TREE
-	db SPRITE_POKE_BALL
-; 146cf
+	lb bc, BANK(Icons), 8
+	call GetGFXUnlessMobile
 
-Group2Sprites: ; 146cf
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_LASS
-	db SPRITE_SUPER_NERD
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_POKEFAN_M
-	db SPRITE_BLACK_BELT
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_FISHER
-	db SPRITE_FRUIT_TREE
-	db SPRITE_POKE_BALL
-; 146e6
+	pop hl
+	ret
+; 8ea3f
 
-Group5Sprites: ; 146e6
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_GRAMPS
-	db SPRITE_YOUNGSTER
-	db SPRITE_LASS
-	db SPRITE_SUPER_NERD
-	db SPRITE_COOLTRAINER_M
-	db SPRITE_POKEFAN_M
-	db SPRITE_BLACK_BELT
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_FISHER
-	db SPRITE_FRUIT_TREE
-	db SPRITE_POKE_BALL
-; 146fd
+GetGFXUnlessMobile: ; 8ea3f
+	ld a, [wLinkMode]
+	cp LINK_MOBILE
+	jp nz, Request2bpp
+	jp Get2bpp_2
+; 8ea4a
 
-Group3Sprites: ; 146fd
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_GAMEBOY_KID
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_LASS
-	db SPRITE_POKEFAN_F
-	db SPRITE_TEACHER
-	db SPRITE_YOUNGSTER
-	db SPRITE_GROWLITHE
-	db SPRITE_POKEFAN_M
-	db SPRITE_ROCKER
-	db SPRITE_FISHER
-	db SPRITE_SCIENTIST
-	db SPRITE_POKE_BALL
-	db SPRITE_BOULDER
-; 14714
+Function8ea4a: ; 8ea4a
+	ld hl, wSpriteAnimationStructs
+	ld e, $6
+	ld a, [MenuSelection2]
+	ld d, a
+.loop
+	ld a, [hl]
+	and a
+	jr z, .next
+	cp d
+	jr z, .loadwithtwo
+	ld a, $0
+	jr .ok
 
-Group15Sprites: ; 14714
-	db SPRITE_SUICUNE
-	db SPRITE_SILVER_TROPHY
-	db SPRITE_FAMICOM
-	db SPRITE_POKEDEX
-	db SPRITE_WILL
-	db SPRITE_KAREN
-	db SPRITE_NURSE
-	db SPRITE_OLD_LINK_RECEPTIONIST
-	db SPRITE_BIG_LAPRAS
-	db SPRITE_BIG_ONIX
-	db SPRITE_SUDOWOODO
-	db SPRITE_BIG_SNORLAX
-	db SPRITE_SAILOR
-	db SPRITE_FISHING_GURU
-	db SPRITE_GENTLEMAN
-	db SPRITE_SUPER_NERD
-	db SPRITE_HO_OH
-	db SPRITE_TEACHER
-	db SPRITE_COOLTRAINER_F
-	db SPRITE_YOUNGSTER
-	db SPRITE_FAIRY
-	db SPRITE_POKE_BALL
-	db SPRITE_ROCK
-; 1472b
+.loadwithtwo
+	ld a, $2
 
-Group20Sprites: ; 1472b
-	db SPRITE_OAK
-	db SPRITE_FISHER
-	db SPRITE_TEACHER
-	db SPRITE_TWIN
-	db SPRITE_POKEFAN_M
-	db SPRITE_GRAMPS
-	db SPRITE_FAIRY
-	db SPRITE_SILVER
-	db SPRITE_FISHING_GURU
-	db SPRITE_POKE_BALL
-	db SPRITE_POKEDEX
-; 14736
+.ok
+	push hl
+	ld c, l
+	ld b, h
+	ld hl, $2
+	add hl, bc
+	ld [hl], a
+	pop hl
 
+.next
+	ld bc, $10
+	add hl, bc
+	dec e
+	jr nz, .loop
+	ret
+; 8ea71
 
-SpriteHeaders: ; 14736
-INCLUDE "gfx/overworld/sprite_headers.asm"
-; 1499a
+Function8ea71: ; 8ea71
+	ld hl, wSpriteAnimationStructs
+	ld e, $6
+.loop
+	ld a, [hl]
+	and a
+	jr z, .zero
+	push hl
+	ld c, l
+	ld b, h
+	ld hl, $2
+	add hl, bc
+	ld [hl], $1
+	pop hl
+.zero
+	ld bc, $10
+	add hl, bc
+	dec e
+	jr nz, .loop
+	ret
+; 8ea8c (23:6a8c)
+
+Function8ea8c: ; 8ea8c
+	ld hl, wSpriteAnimationStructs
+	ld e, $6
+	ld a, [wd0e3]
+	ld d, a
+.asm_8ea95
+	ld a, [hl]
+	and a
+	jr z, .asm_8eaab
+	cp d
+	jr z, .asm_8eaa0
+	ld a, $3
+	jr .asm_8eaa2
+.asm_8eaa0
+	ld a, $2
+.asm_8eaa2
+	push hl
+	ld c, l
+	ld b, h
+	ld hl, $2
+	add hl, bc
+	ld [hl], a
+	pop hl
+.asm_8eaab
+	ld bc, $10
+	add hl, bc
+	dec e
+	jr nz, .asm_8ea95
+	ret
+
+INCLUDE "menu/mon_icons.asm"
--- a/engine/startmenu.asm
+++ b/engine/startmenu.asm
@@ -422,7 +422,7 @@
 ; Retire from the bug catching contest.
 
 	ld hl, .EndTheContestText
-	call Function12cf5
+	call StartMenuYesNo
 	jr c, .DontEndContest
 	ld a, BANK(BugCatchingContestReturnToGateScript)
 	ld hl, BugCatchingContestReturnToGateScript
@@ -444,7 +444,7 @@
 ; Save the game.
 
 	call BufferScreen
-	callba Function14a1a
+	callba SaveMenu
 	jr nc, .asm_12919
 	ld a, 0
 	ret
@@ -468,8 +468,8 @@
 ; Player status.
 
 	call FadeToMenu
-	callba Function25105
-	call Function2b3c
+	callba TrainerCard
+	call ReturnToCallingMenu
 	ld a, 0
 	ret
 ; 12937
@@ -483,7 +483,7 @@
 
 	call FadeToMenu
 	callba Pokedex
-	call Function2b3c
+	call ReturnToCallingMenu
 
 .asm_12949
 	ld a, 0
@@ -494,8 +494,8 @@
 StartMenu_Pokegear: ; 1294c
 
 	call FadeToMenu
-	callba Function90b8d
-	call Function2b3c
+	callba PokeGear
+	call ReturnToCallingMenu
 	ld a, 0
 	ret
 ; 1295b
@@ -507,12 +507,13 @@
 	callba Pack
 	ld a, [wcf66]
 	and a
-	jr nz, .asm_12970
-	call Function2b3c
+	jr nz, .used_item
+	call ReturnToCallingMenu
 	ld a, 0
 	ret
-.asm_12970
-	call Function2b4d
+
+.used_item
+	call ExitAllMenus
 	ld a, 4
 	ret
 ; 12976
@@ -532,9 +533,9 @@
 	call ClearBGPalettes
 
 .menu
-	callba Function5004f
-	callba Function50405
-	callba Function503e0
+	callba LoadPartyMenuGFX
+	callba InitPartyMenuWithCancel
+	callba InitPartyMenuGFX
 
 .menunoreload
 	callba WritePartyMenuTilemap
@@ -556,7 +557,7 @@
 	jr z, .quit
 
 .return
-	call Function2b3c
+	call ReturnToCallingMenu
 	ld a, 0
 	ret
 
@@ -563,12 +564,12 @@
 .quit
 	ld a, b
 	push af
-	call Function2b4d
+	call ExitAllMenus
 	pop af
 	ret
 ; 129d5
 
-Function129d5: ; 129d5
+HasNoItems: ; 129d5
 	ld a, [NumItems]
 	and a
 	ret nz
@@ -580,15 +581,15 @@
 	ret nz
 	ld hl, TMsHMs
 	ld b, NUM_TMS + NUM_HMS
-.asm_129e9
+.loop
 	ld a, [hli]
 	and a
-	jr nz, .asm_129f2
+	jr nz, .done
 	dec b
-	jr nz, .asm_129e9
+	jr nz, .loop
 	scf
 	ret
-.asm_129f2
+.done
 	and a
 	ret
 
@@ -663,7 +664,7 @@
 
 CantUseItem: ; 12a60
 	ld hl, CantUseItemText
-	call Function2012
+	call MenuTextBoxWaitButton
 	ret
 ; 12a67
 
@@ -683,7 +684,7 @@
 
 
 CancelPokemonAction: ; 12a79
-	callba Function50405
+	callba InitPartyMenuWithCancel
 	callba Function8ea71
 	ld a, 1
 	ret
@@ -745,10 +746,10 @@
 
 	ld a, [CurPartyMon]
 	inc a
-	ld [wd0e3], a
+	ld [wSwitchMon], a
 
 	callba Function8ea8c
-	callba Function5042d
+	callba InitPartyMenuNoCancel
 
 	ld a, 4
 	ld [PartyMenuActionText], a
@@ -757,7 +758,7 @@
 
 	hlcoord 0, 1
 	ld bc, 20 * 2
-	ld a, [wd0e3]
+	ld a, [wSwitchMon]
 	dec a
 	call AddNTimes
 	ld [hl], "▷"
@@ -774,9 +775,9 @@
 	xor a
 	ld [PartyMenuActionText], a
 
-	callba Function5004f
-	callba Function50405
-	callba Function503e0
+	callba LoadPartyMenuGFX
+	callba InitPartyMenuWithCancel
+	callba InitPartyMenuGFX
 
 	ld a, 1
 	ret
@@ -882,7 +883,7 @@
 	jr .asm_12c08
 
 .asm_12bf4
-	call Function12cea
+	call GiveItemToPokemon
 	ld hl, MadeHoldText
 	call MenuTextBoxBackup
 	call GivePartyItem
@@ -897,10 +898,10 @@
 	ld [wd265], a
 	call GetItemName
 	ld hl, SwitchAlreadyHoldingText
-	call Function12cf5
+	call StartMenuYesNo
 	jr c, .asm_12c4b
 
-	call Function12cea
+	call GiveItemToPokemon
 	ld a, [wd265]
 	push af
 	ld a, [CurItem]
@@ -907,7 +908,7 @@
 	ld [wd265], a
 	pop af
 	ld [CurItem], a
-	call Function12cdf
+	call ReceiveItemFromPokemon
 	jr nc, .asm_12c3c
 
 	ld hl, TookAndMadeHoldText
@@ -920,7 +921,7 @@
 .asm_12c3c
 	ld a, [wd265]
 	ld [CurItem], a
-	call Function12cdf
+	call ReceiveItemFromPokemon
 	ld hl, ItemStorageIsFullText
 	call MenuTextBoxBackup
 
@@ -936,10 +937,10 @@
 	ld [hl], a
 	ld d, a
 	callba ItemIsMail
-	jr nc, .asm_12c5f
-	call Function12cfe
+	jr nc, .done
+	call ComposeMailMessage
 
-.asm_12c5f
+.done
 	ret
 ; 12c60
 
@@ -953,7 +954,7 @@
 	jr z, .asm_12c8c
 
 	ld [CurItem], a
-	call Function12cdf
+	call ReceiveItemFromPokemon
 	jr nc, .asm_12c94
 
 	callba ItemIsMail
@@ -1045,7 +1046,7 @@
 ; 12cdf
 
 
-Function12cdf: ; 12cdf
+ReceiveItemFromPokemon: ; 12cdf
 	ld a, $1
 	ld [wItemQuantityChangeBuffer], a
 	ld hl, NumItems
@@ -1053,13 +1054,13 @@
 ; 12cea
 
 
-Function12cea: ; 12cea (4:6cea)
+GiveItemToPokemon: ; 12cea (4:6cea)
 	ld a, $1
 	ld [wItemQuantityChangeBuffer], a
 	ld hl, NumItems
 	jp TossItem
 
-Function12cf5: ; 12cf5
+StartMenuYesNo: ; 12cf5
 	call MenuTextBox
 	call YesNoBox
 	jp ExitMenu
@@ -1066,15 +1067,15 @@
 ; 12cfe
 
 
-Function12cfe: ; 12cfe (4:6cfe)
-	ld de, wd002
-	callba Function11e75
+ComposeMailMessage: ; 12cfe (4:6cfe)
+	ld de, wTempMailMessage
+	callba _ComposeMailMessage
 	ld hl, PlayerName
-	ld de, wd023
-	ld bc, $a
+	ld de, wTempMailAuthor
+	ld bc, NAME_LENGTH - 1
 	call CopyBytes
 	ld hl, PlayerID
-	ld bc, $2
+	ld bc, 2
 	call CopyBytes
 	ld a, [CurPartySpecies]
 	ld [de], a
@@ -1082,14 +1083,14 @@
 	ld a, [CurItem]
 	ld [de], a
 	ld a, [CurPartyMon]
-	ld hl, sPartyScratch1
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld hl, sPartyMail
+	ld bc, MAIL_STRUCT_LENGTH
 	call AddNTimes
 	ld d, h
 	ld e, l
-	ld hl, wd002
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	ld a, BANK(sPartyScratch1)
+	ld hl, wTempMail
+	ld bc, MAIL_STRUCT_LENGTH
+	ld a, BANK(sPartyMail)
 	call GetSRAMBank
 	call CopyBytes
 	call CloseSRAM
@@ -1127,11 +1128,11 @@
 
 .take
 	ld hl, .sendmailtopctext
-	call Function12cf5
+	call StartMenuYesNo
 	jr c, .RemoveMailToBag
 	ld a, [CurPartyMon]
 	ld b, a
-	callba Function4456e
+	callba SendMailToPC
 	jr c, .MailboxFull
 	ld hl, .sentmailtopctext
 	call MenuTextBoxBackup
@@ -1144,12 +1145,12 @@
 
 .RemoveMailToBag
 	ld hl, .mailwilllosemessagetext
-	call Function12cf5
+	call StartMenuYesNo
 	jr c, .done
 	call GetPartyItemLocation
 	ld a, [hl]
 	ld [CurItem], a
-	call Function12cdf
+	call ReceiveItemFromPokemon
 	jr nc, .BagIsFull
 	call GetPartyItemLocation
 	ld [hl], $0
@@ -1240,14 +1241,14 @@
 
 MonMenu_Cut: ; 12e1b
 	callba CutFunction
-	ld a, [wd0ec]
+	ld a, [wFieldMoveSucceeded]
 	cp $1
-	jr nz, .asm_12e2d
+	jr nz, .Fail
 	ld b, $4
 	ld a, $2
 	ret
 
-.asm_12e2d
+.Fail
 	ld a, $3
 	ret
 ; 12e30
@@ -1255,25 +1256,25 @@
 
 MonMenu_Fly: ; 12e30
 	callba FlyFunction
-	ld a, [wd0ec]
+	ld a, [wFieldMoveSucceeded]
 	cp $2
-	jr z, .asm_12e4c
+	jr z, .Fail
 	cp $0
-	jr z, .asm_12e4f
+	jr z, .Error
 	callba MobileFn_1060b5
 	ld b, $4
 	ld a, $2
 	ret
 
-.asm_12e4c
+.Fail
 	ld a, $3
 	ret
 
-.asm_12e4f
+.Error
 	ld a, $0
 	ret
 
-.asm_12e52
+.Unused
 	ld a, $1
 	ret
 ; 12e55
@@ -1280,14 +1281,14 @@
 
 MonMenu_Flash: ; 12e55
 	callba Functionc8ac
-	ld a, [wd0ec]
+	ld a, [wFieldMoveSucceeded]
 	cp $1
-	jr nz, .asm_12e67
+	jr nz, .Fail
 	ld b, $4
 	ld a, $2
 	ret
 
-.asm_12e67
+.Fail
 	ld a, $3
 	ret
 ; 12e6a
@@ -1294,14 +1295,14 @@
 
 MonMenu_Strength: ; 12e6a
 	callba StrengthFunction
-	ld a, [wd0ec]
+	ld a, [wFieldMoveSucceeded]
 	cp $1
-	jr nz, .asm_12e7c
+	jr nz, .Fail
 	ld b, $4
 	ld a, $2
 	ret
 
-.asm_12e7c
+.Fail
 	ld a, $3
 	ret
 ; 12e7f
@@ -1308,14 +1309,14 @@
 
 MonMenu_Whirlpool: ; 12e7f
 	callba WhirlpoolFunction
-	ld a, [wd0ec]
+	ld a, [wFieldMoveSucceeded]
 	cp $1
-	jr nz, .asm_12e91
+	jr nz, .Fail
 	ld b, $4
 	ld a, $2
 	ret
 
-.asm_12e91
+.Fail
 	ld a, $3
 	ret
 ; 12e94
@@ -1322,14 +1323,14 @@
 
 MonMenu_Waterfall: ; 12e94
 	callba Functioncade
-	ld a, [wd0ec]
+	ld a, [wFieldMoveSucceeded]
 	cp $1
-	jr nz, .asm_12ea6
+	jr nz, .Fail
 	ld b, $4
 	ld a, $2
 	ret
 
-.asm_12ea6
+.Fail
 	ld a, $3
 	ret
 ; 12ea9
@@ -1336,14 +1337,14 @@
 
 MonMenu_Teleport: ; 12ea9
 	callba TeleportFunction
-	ld a, [wd0ec]
+	ld a, [wFieldMoveSucceeded]
 	and a
-	jr z, .asm_12eba
+	jr z, .Fail
 	ld b, $4
 	ld a, $2
 	ret
 
-.asm_12eba
+.Fail
 	ld a, $3
 	ret
 ; 12ebd
@@ -1350,14 +1351,14 @@
 
 MonMenu_Surf: ; 12ebd
 	callba SurfFunction
-	ld a, [wd0ec]
+	ld a, [wFieldMoveSucceeded]
 	and a
-	jr z, .asm_12ece
+	jr z, .Fail
 	ld b, $4
 	ld a, $2
 	ret
 
-.asm_12ece
+.Fail
 	ld a, $3
 	ret
 ; 12ed1
@@ -1364,29 +1365,29 @@
 
 MonMenu_Dig: ; 12ed1
 	callba DigFunction
-	ld a, [wd0ec]
+	ld a, [wFieldMoveSucceeded]
 	cp $1
-	jr nz, .asm_12ee3
+	jr nz, .Fail
 	ld b, $4
 	ld a, $2
 	ret
 
-.asm_12ee3
+.Fail
 	ld a, $3
 	ret
 ; 12ee6
 
 MonMenu_Softboiled_MilkDrink: ; 12ee6
-	call Function12f05
-	jr nc, .asm_12ef3
-	callba Functionf3df
-	jr .asm_12ef9
+	call .CheckMonHasEnoughHP
+	jr nc, .NotEnoughHP
+	callba Softboiled_MilkDrinkFunction
+	jr .finish
 
-.asm_12ef3
-	ld hl, UnknownText_0x12f00
+.NotEnoughHP
+	ld hl, .Text_NotEnoughHP
 	call PrintText
 
-.asm_12ef9
+.finish
 	xor a
 	ld [PartyMenuActionText], a
 	ld a, $3
@@ -1393,13 +1394,14 @@
 	ret
 ; 12f00
 
-UnknownText_0x12f00: ; 0x12f00
+.Text_NotEnoughHP: ; 0x12f00
 	; Not enough HP!
 	text_jump UnknownText_0x1c1ce3
 	db "@"
 ; 0x12f05
 
-Function12f05: ; 12f05
+.CheckMonHasEnoughHP: ; 12f05
+; Need to have at least (MaxHP / 5) HP left.
 	ld a, MON_MAXHP
 	call GetPartyParamLocation
 	ld a, [hli]
@@ -1406,9 +1408,9 @@
 	ld [hDividend + 0], a
 	ld a, [hl]
 	ld [hDividend + 1], a
-	ld a, $5
+	ld a, 5
 	ld [hDivisor], a
-	ld b, $2
+	ld b, 2
 	call Divide
 	ld a, MON_HP + 1
 	call GetPartyParamLocation
@@ -1422,14 +1424,14 @@
 
 MonMenu_Headbutt: ; 12f26
 	callba HeadbuttFunction
-	ld a, [wd0ec]
+	ld a, [wFieldMoveSucceeded]
 	cp $1
-	jr nz, .asm_12f38
+	jr nz, .Fail
 	ld b, $4
 	ld a, $2
 	ret
 
-.asm_12f38
+.Fail
 	ld a, $3
 	ret
 ; 12f3b
@@ -1436,14 +1438,14 @@
 
 MonMenu_RockSmash: ; 12f3b
 	callba RockSmashFunction
-	ld a, [wd0ec]
+	ld a, [wFieldMoveSucceeded]
 	cp $1
-	jr nz, .asm_12f4d
+	jr nz, .Fail
 	ld b, $4
 	ld a, $2
 	ret
 
-.asm_12f4d
+.Fail
 	ld a, $3
 	ret
 ; 12f50
@@ -1474,7 +1476,7 @@
 Function12f73: ; 12f73
 	call SetUpMoveScreenBG
 	ld de, Unknown_12fb2
-	call Function1bb1
+	call InitMenu3
 	call Function131ef
 	ld hl, wcfa5
 	set 6, [hl]
@@ -1503,7 +1505,7 @@
 Function12fa0: ; 12fa0
 	push af
 	xor a
-	ld [wd0e3], a
+	ld [wSwitchMon], a
 	ld hl, wcfa5
 	res 6, [hl]
 	call ClearSprites
@@ -1541,7 +1543,7 @@
 	call SetUpMoveScreenBG
 	call Function132d3
 	ld de, Unknown_13163
-	call Function1bb1
+	call InitMenu3
 .loop
 	call Function131ef
 	ld hl, wcfa5
@@ -1759,7 +1761,7 @@
 	xor a
 	ld [hBGMapMode], a
 	callba Functionfb571
-	callba InefficientlyClear121BytesAtwc300
+	callba ClearSpriteAnims
 	ld a, [CurPartyMon]
 	ld e, a
 	ld d, $0
@@ -1793,7 +1795,7 @@
 	call PrintLevel
 	ld hl, PlayerHPPal
 	call SetHPPal
-	ld b, $e
+	ld b, SCGB_0E
 	call GetSGBLayout
 	hlcoord 16, 0
 	lb bc, 1, 3
--- /dev/null
+++ b/engine/stats_screen.asm
@@ -1,0 +1,1150 @@
+Function4dc7b: ; 4dc7b (13:5c7b)
+	ld a, [wLinkMode]
+	cp LINK_MOBILE
+	jr nz, StatsScreenInit
+
+	ld a, [wBattleMode] ; wd22d (aliases: EnemyMonEnd)
+	and a
+	jr z, StatsScreenInit
+	jr Function4dc8f
+
+StatsScreenInit: ; 4dc8a
+	ld hl, StatsScreenMain
+	jr StatsScreenInit_gotaddress
+
+Function4dc8f: ; 4dc8f
+	ld hl, StatsScreenBattle
+	jr StatsScreenInit_gotaddress
+
+StatsScreenInit_gotaddress: ; 4dc94
+	ld a, [hMapAnims]
+	push af
+	xor a
+	ld [hMapAnims], a ; disable overworld tile animations
+	ld a, [wc2c6] ; whether sprite is to be mirrorred
+	push af
+	ld a, [wJumptableIndex]
+	ld b, a
+	ld a, [wcf64]
+	ld c, a
+
+	push bc
+	push hl
+	call ClearBGPalettes
+	call ClearTileMap
+	call UpdateSprites
+	callba Functionfb53e
+	pop hl
+	call _hl_
+	call ClearBGPalettes
+	call ClearTileMap
+	pop bc
+
+	; restore old values
+	ld a, b
+	ld [wJumptableIndex], a
+	ld a, c
+	ld [wcf64], a
+	pop af
+	ld [wc2c6], a
+	pop af
+	ld [hMapAnims], a
+	ret
+; 0x4dcd2
+
+StatsScreenMain: ; 0x4dcd2
+	xor a
+	ld [wJumptableIndex], a
+	; stupid interns
+	ld [wcf64], a
+	ld a, [wcf64]
+	and $fc
+	or $1
+	ld [wcf64], a
+.loop ; 4dce3
+	ld a, [wJumptableIndex]
+	and $7f
+	ld hl, StatsScreenPointerTable
+	rst JumpTable
+	call Function4dd3a ; check for keys?
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr z, .loop
+	ret
+; 0x4dcf7
+
+StatsScreenBattle: ; 4dcf7
+	xor a
+	ld [wJumptableIndex], a
+	; stupid interns
+	ld [wcf64], a
+	ld a, [wcf64]
+	and $fc
+	or $1
+	ld [wcf64], a
+.loop
+	callba Function100dd2
+	ld a, [wJumptableIndex]
+	and $7f
+	ld hl, StatsScreenPointerTable
+	rst JumpTable
+	call Function4dd3a
+	callba Function100dfd
+	jr c, .exit
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr z, .loop
+
+.exit
+	ret
+; 4dd2a
+
+StatsScreenPointerTable: ; 4dd2a
+	dw MonStatsInit ; regular pokémon
+	dw EggStatsInit ; egg
+	dw StatsScreenWaitCry
+	dw Function4ddac
+	dw Function4ddc6
+	dw StatsScreenWaitCry
+	dw Function4ddd6
+	dw Function4dd6c
+; 4dd3a
+
+
+Function4dd3a: ; 4dd3a (13:5d3a)
+	ld hl, wcf64
+	bit 6, [hl]
+	jr nz, .asm_4dd49
+	bit 5, [hl]
+	jr nz, .asm_4dd56
+	call DelayFrame
+	ret
+.asm_4dd49
+	callba Functiond00b4
+	jr nc, .asm_4dd56
+	ld hl, wcf64
+	res 6, [hl]
+.asm_4dd56
+	ld hl, wcf64
+	res 5, [hl]
+	callba Function10402d
+	ret
+
+Function4dd62: ; 4dd62 (13:5d62)
+	ld a, [wJumptableIndex]
+	and $80
+	or h
+	ld [wJumptableIndex], a
+	ret
+
+Function4dd6c: ; 4dd6c (13:5d6c)
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+MonStatsInit: ; 4dd72 (13:5d72)
+	ld hl, wcf64
+	res 6, [hl]
+	call ClearBGPalettes
+	call ClearTileMap
+	callba Function10402d
+	call Function4ddf2
+	ld a, [CurPartySpecies]
+	cp EGG
+	jr z, .asm_4dd9b
+	call Function4deea
+	ld hl, wcf64
+	set 4, [hl]
+	ld h, $4
+	call Function4dd62
+	ret
+.asm_4dd9b
+	ld h, $1
+	call Function4dd62
+	ret
+
+EggStatsInit: ; 4dda1
+	call EggStatsScreen
+	ld a, [wJumptableIndex]
+	inc a
+	ld [wJumptableIndex], a
+	ret
+; 0x4ddac
+
+
+Function4ddac: ; 4ddac (13:5dac)
+	call Function4de2c
+	jr nc, .asm_4ddb7
+	ld h, $0
+	call Function4dd62
+	ret
+.asm_4ddb7
+	bit 0, a
+	jr nz, .asm_4ddc0
+	and $c3
+	jp Function4de54
+.asm_4ddc0
+	ld h, $7
+	call Function4dd62
+	ret
+
+Function4ddc6: ; 4ddc6 (13:5dc6)
+	call Function4dfb6
+	ld hl, wcf64
+	res 4, [hl]
+	ld a, [wJumptableIndex]
+	inc a
+	ld [wJumptableIndex], a
+	ret
+
+Function4ddd6: ; 4ddd6 (13:5dd6)
+	call Function4de2c
+	jr nc, .asm_4dde1
+	ld h, $0
+	call Function4dd62
+	ret
+
+.asm_4dde1
+	and $f3
+	jp Function4de54
+
+StatsScreenWaitCry: ; 4dde6 (13:5de6)
+	call IsSFXPlaying
+	ret nc
+	ld a, [wJumptableIndex]
+	inc a
+	ld [wJumptableIndex], a
+	ret
+
+Function4ddf2: ; 4ddf2 (13:5df2)
+	ld a, [MonType]
+	cp BREEDMON
+	jr nz, .asm_4de10
+	ld a, [wd018_Mon]
+	ld [CurSpecies], a
+	call GetBaseData
+	ld hl, wd018_Mon
+	ld de, TempMon
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call CopyBytes
+	jr .asm_4de2a
+.asm_4de10
+	callba CopyPkmnToTempMon
+	ld a, [CurPartySpecies]
+	cp EGG
+	jr z, .asm_4de2a
+	ld a, [MonType]
+	cp BOXMON
+	jr c, .asm_4de2a
+	callba Function50890
+.asm_4de2a
+	and a
+	ret
+
+Function4de2c: ; 4de2c (13:5e2c)
+	call GetJoypad
+	ld a, [MonType]
+	cp BREEDMON
+	jr nz, .notbreedmon
+	push hl
+	push de
+	push bc
+	callba Functione2f95
+	pop bc
+	pop de
+	pop hl
+	ld a, [wcf73]
+	and $c0
+	jr nz, .set_carry
+	ld a, [wcf73]
+	jr .clear_flags
+
+.notbreedmon
+	ld a, [hJoyPressed]
+.clear_flags
+	and a
+	ret
+
+.set_carry
+	scf
+	ret
+
+Function4de54: ; 4de54 (13:5e54)
+	push af
+	ld a, [wcf64]
+	and $3
+	ld c, a
+	pop af
+	bit 1, a
+	jp nz, Function4dee4
+	bit 5, a
+	jr nz, .asm_4dec7
+	bit 4, a
+	jr nz, .asm_4debd
+	bit 0, a
+	jr nz, .asm_4deb8
+	bit 6, a
+	jr nz, .asm_4dea0
+	bit 7, a
+	jr nz, .asm_4de77
+	jr .asm_4dece
+.asm_4de77
+	ld a, [MonType]
+	cp BOXMON
+	jr nc, .asm_4dece
+	and a
+	ld a, [PartyCount]
+	jr z, .asm_4de87
+	ld a, [OTPartyCount]
+.asm_4de87
+	ld b, a
+	ld a, [CurPartyMon]
+	inc a
+	cp b
+	jr z, .asm_4dece
+	ld [CurPartyMon], a
+	ld b, a
+	ld a, [MonType]
+	and a
+	jr nz, .asm_4dede
+	ld a, b
+	inc a
+	ld [wd0d8], a
+	jr .asm_4dede
+.asm_4dea0
+	ld a, [CurPartyMon]
+	and a
+	jr z, .asm_4dece
+	dec a
+	ld [CurPartyMon], a
+	ld b, a
+	ld a, [MonType]
+	and a
+	jr nz, .asm_4dede
+	ld a, b
+	inc a
+	ld [wd0d8], a
+	jr .asm_4dede
+.asm_4deb8
+	ld a, c
+	cp $3
+	jr z, Function4dee4
+.asm_4debd
+	inc c
+	ld a, $3
+	cp c
+	jr nc, .asm_4decf
+	ld c, $1
+	jr .asm_4decf
+.asm_4dec7
+	dec c
+	jr nz, .asm_4decf
+	ld c, $3
+	jr .asm_4decf
+.asm_4dece
+	ret
+.asm_4decf
+	ld a, [wcf64]
+	and $fc
+	or c
+	ld [wcf64], a
+	ld h, $4
+	call Function4dd62
+	ret
+.asm_4dede
+	ld h, $0
+	call Function4dd62
+	ret
+
+Function4dee4: ; 4dee4 (13:5ee4)
+	ld h, $7
+	call Function4dd62
+	ret
+
+Function4deea: ; 4deea (13:5eea)
+	call Function4df45
+	xor a
+	ld [hBGMapMode], a
+	ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
+	ld [wd265], a
+	ld [CurSpecies], a
+	hlcoord 8, 0
+	ld [hl], "№"
+	inc hl
+	ld [hl], "."
+	inc hl
+	hlcoord 10, 0
+	lb bc, PRINTNUM_LEADINGZEROS | 1, 3
+	ld de, wd265
+	call PrintNum
+	hlcoord 14, 0
+	call PrintLevel
+	ld hl, Unknown_4df77
+	call Function4e528
+	call Function4e505
+	hlcoord 8, 2
+	call PlaceString
+	hlcoord 18, 0
+	call Function4df66
+	hlcoord 9, 4
+	ld a, "/"
+	ld [hli], a
+	ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
+	ld [wd265], a
+	call GetPokemonName
+	call PlaceString
+	call Function4df8f
+	call Function4df9b
+	call Function4dfa6
+	ret
+
+Function4df45: ; 4df45 (13:5f45)
+	ld hl, TempMonHP
+	ld a, [hli]
+	ld b, a
+	ld c, [hl]
+	ld hl, TempMonMaxHP
+	ld a, [hli]
+	ld d, a
+	ld e, [hl]
+	callba DrawPartyMenuHPBar
+	ld hl, wcda1
+	call SetHPPal
+	ld b, SCGB_03
+	call GetSGBLayout
+	call DelayFrame
+	ret
+
+Function4df66: ; 4df66 (13:5f66)
+	push hl
+	callba GetGender
+	pop hl
+	ret c
+	ld a, "♂"
+	jr nz, .got_gender
+	ld a, "♀"
+.got_gender
+	ld [hl], a
+	ret
+; 4df77 (13:5f77)
+
+Unknown_4df77: ; 4df77
+	dw PartyMonNicknames
+	dw OTPartyMonNicknames
+	dw sBoxMonNicknames
+	dw wd002
+; 4df7f
+
+Function4df7f: ; 4df7f
+	hlcoord 7, 0
+	ld bc, SCREEN_WIDTH
+	ld d, SCREEN_HEIGHT
+.loop
+	ld a, $31
+	ld [hl], a
+	add hl, bc
+	dec d
+	jr nz, .loop
+	ret
+; 4df8f
+
+Function4df8f: ; 4df8f (13:5f8f)
+	hlcoord 0, 7
+	ld b, SCREEN_WIDTH
+	ld a, "_"
+.loop
+	ld [hli], a
+	dec b
+	jr nz, .loop
+	ret
+
+Function4df9b: ; 4df9b (13:5f9b)
+	hlcoord 12, 6
+	ld [hl], "◀"
+	hlcoord 19, 6
+	ld [hl], "▶"
+	ret
+
+Function4dfa6: ; 4dfa6 (13:5fa6)
+	ld bc, TempMonDVs
+	callba CheckShininess
+	ret nc
+	hlcoord 19, 0
+	ld [hl], "<SHINY>"
+	ret
+
+Function4dfb6: ; 4dfb6 (13:5fb6)
+	ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
+	ld [wd265], a
+	ld [CurSpecies], a
+	xor a
+	ld [hBGMapMode], a
+	call Function4dfda
+	call Function4e002
+	call Function4dfed
+	ld hl, wcf64
+	bit 4, [hl]
+	jr nz, .asm_4dfd6
+	call SetPalettes
+	ret
+
+.asm_4dfd6
+	call Function4e226
+	ret
+
+Function4dfda: ; 4dfda (13:5fda)
+	ld a, [wcf64]
+	and $3
+	ld c, a
+	call Function4e4cd
+	hlcoord 0, 8
+	lb bc, 10, 20
+	call ClearBox
+	ret
+
+Function4dfed: ; 4dfed (13:5fed)
+	ld a, [wcf64]
+	and $3
+	ld c, a
+	callba Function8c8a
+	call DelayFrame
+	ld hl, wcf64
+	set 5, [hl]
+	ret
+
+Function4e002: ; 4e002 (13:6002)
+	ld a, [wcf64]
+	and $3
+	dec a
+	ld hl, Jumptable_4e00d
+	rst JumpTable
+	ret
+
+Jumptable_4e00d: ; 4e00d (13:600d)
+	dw Function4e013
+	dw Function4e147
+	dw Function4e1ae
+
+
+Function4e013: ; 4e013 (13:6013)
+	hlcoord 0, 9
+	ld b, $0
+	predef DrawPlayerHP
+	hlcoord 8, 9
+	ld [hl], $41
+	ld de, String_4e119
+	hlcoord 0, 12
+	call PlaceString
+	ld a, [TempMonPokerusStatus]
+	ld b, a
+	and $f
+	jr nz, .asm_4e055
+	ld a, b
+	and $f0
+	jr z, .asm_4e03d
+	hlcoord 8, 8
+	ld [hl], $e8
+.asm_4e03d
+	ld a, [MonType]
+	cp $2
+	jr z, .asm_4e060
+	hlcoord 6, 13
+	push hl
+	ld de, TempMonStatus
+	predef PlaceStatusString
+	pop hl
+	jr nz, .asm_4e066
+	jr .asm_4e060
+.asm_4e055
+	ld de, String_4e142
+	hlcoord 1, 13
+	call PlaceString
+	jr .asm_4e066
+.asm_4e060
+	ld de, String_4e127
+	call PlaceString
+.asm_4e066
+	hlcoord 1, 15
+	predef PrintMonTypes
+	hlcoord 9, 8
+	ld de, $14
+	ld b, $a
+	ld a, $31
+.asm_4e078
+	ld [hl], a
+	add hl, de
+	dec b
+	jr nz, .asm_4e078
+	ld de, String_4e12b
+	hlcoord 10, 9
+	call PlaceString
+	hlcoord 17, 14
+	call Function4e0d3
+	hlcoord 13, 10
+	lb bc, 3, 7
+	ld de, TempMonExp
+	call PrintNum
+	call Function4e0e7
+	hlcoord 13, 13
+	lb bc, 3, 7
+	ld de, Buffer1 ; wd1ea (aliases: MagikarpLength)
+	call PrintNum
+	ld de, String_4e136
+	hlcoord 10, 12
+	call PlaceString
+	ld de, String_4e13f
+	hlcoord 14, 14
+	call PlaceString
+	hlcoord 11, 16
+	ld a, [TempMonLevel]
+	ld b, a
+	ld de, TempMonExp + 2
+	predef FillInExpBar
+	hlcoord 10, 16
+	ld [hl], $40
+	hlcoord 19, 16
+	ld [hl], $41
+	ret
+
+Function4e0d3: ; 4e0d3 (13:60d3)
+	ld a, [TempMonLevel]
+	push af
+	cp MAX_LEVEL
+	jr z, .asm_4e0df
+	inc a
+	ld [TempMonLevel], a
+.asm_4e0df
+	call PrintLevel
+	pop af
+	ld [TempMonLevel], a
+	ret
+
+Function4e0e7: ; 4e0e7 (13:60e7)
+	ld a, [TempMonLevel]
+	cp MAX_LEVEL
+	jr z, .asm_4e111
+	inc a
+	ld d, a
+	callba CalcExpAtLevel
+rept 2
+	ld hl, TempMonExp + 2
+endr
+	ld a, [$ffb6]
+	sub [hl]
+	dec hl
+	ld [wd1ec], a
+	ld a, [$ffb5]
+	sbc [hl]
+	dec hl
+	ld [Buffer2], a ; wd1eb (aliases: MovementType)
+	ld a, [hQuotient]
+	sbc [hl]
+	ld [Buffer1], a ; wd1ea (aliases: MagikarpLength)
+	ret
+.asm_4e111
+	ld hl, Buffer1 ; wd1ea (aliases: MagikarpLength)
+	xor a
+rept 2
+	ld [hli], a
+endr
+	ld [hl], a
+	ret
+; 4e119 (13:6119)
+
+String_4e119: ; 4e119
+	db   "STATUS/"
+	next "TYPE/@"
+; 4e127
+
+String_4e127: ; 4e127
+	db "OK @"
+; 4e12b
+
+String_4e12b: ; 4e12b
+	db "EXP POINTS@"
+; 4e136
+
+String_4e136: ; 4e136
+	db "LEVEL UP@"
+; 4e13f
+
+String_4e13f: ; 4e13f
+	db "TO@"
+; 4e142
+
+String_4e142: ; 4e142
+	db "#RUS@"
+; 4e147
+
+Function4e147: ; 4e147 (13:6147)
+	ld de, String_4e1a0
+	hlcoord 0, 8
+	call PlaceString
+	call Function4e189
+	hlcoord 8, 8
+	call PlaceString
+	ld de, String_4e1a9
+	hlcoord 0, 10
+	call PlaceString
+	ld hl, TempMonMoves
+	ld de, wListMoves_MoveIndicesBuffer
+	ld bc, NUM_MOVES
+	call CopyBytes
+	hlcoord 8, 10
+	ld a, SCREEN_WIDTH * 2
+	ld [Buffer1], a
+	predef ListMoves
+	hlcoord 12, 11
+	ld a, $28
+	ld [Buffer1], a
+	predef Function50c50
+	ret
+
+Function4e189: ; 4e189 (13:6189)
+	ld de, String_4e1a5
+	ld a, [TempMonItem]
+	and a
+	ret z
+	ld b, a
+	callba Function28771
+	ld a, b
+	ld [wd265], a
+	call GetItemName
+	ret
+; 4e1a0 (13:61a0)
+
+String_4e1a0: ; 4e1a0
+	db "ITEM@"
+; 4e1a5
+
+String_4e1a5: ; 4e1a5
+	db "---@"
+; 4e1a9
+
+String_4e1a9: ; 4e1a9
+	db "MOVE@"
+; 4e1ae
+
+Function4e1ae: ; 4e1ae (13:61ae)
+	call Function4e1cc
+	hlcoord 10, 8
+	ld de, $14
+	ld b, $a
+	ld a, $31
+.asm_4e1bb
+	ld [hl], a
+	add hl, de
+	dec b
+	jr nz, .asm_4e1bb
+	hlcoord 11, 8
+	ld bc, $6
+	predef PrintTempMonStats
+	ret
+
+Function4e1cc: ; 4e1cc (13:61cc)
+	ld de, IDNoString
+	hlcoord 0, 9
+	call PlaceString
+	ld de, OTString
+	hlcoord 0, 12
+	call PlaceString
+	hlcoord 2, 10
+	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
+	ld de, TempMonID
+	call PrintNum
+	ld hl, Unknown_4e216
+	call Function4e528
+	call Function4e505
+	callba CheckNickErrors
+	hlcoord 2, 13
+	call PlaceString
+	ld a, [TempMonCaughtGender]
+	and a
+	jr z, .asm_4e215
+	cp $7f
+	jr z, .asm_4e215
+	and $80
+	ld a, "♂"
+	jr z, .asm_4e211
+	ld a, "♀"
+.asm_4e211
+	hlcoord 9, 13
+	ld [hl], a
+.asm_4e215
+	ret
+; 4e216 (13:6216)
+
+Unknown_4e216: ; 4e216
+	dw PartyMonOT
+	dw OTPartyMonOT
+	dw sBoxMonOT
+	dw wd00d
+; 4e21e
+
+IDNoString: ; 4e21e
+	db $73, "№.@"
+
+OTString: ; 4e222
+	db "OT/@"
+; 4e226
+
+
+Function4e226: ; 4e226 (13:6226)
+	ld hl, TempMonDVs
+	predef GetUnownLetter
+	call Function4e2ad
+	jr c, .asm_4e238
+	and a
+	jr z, .asm_4e23f
+	jr .asm_4e246
+.asm_4e238
+	call Function4e271
+	call SetPalettes
+	ret
+.asm_4e23f
+	call Function4e253
+	call SetPalettes
+	ret
+.asm_4e246
+	call SetPalettes
+	call Function4e253
+	ld a, [CurPartySpecies]
+	call PlayCry2
+	ret
+
+Function4e253: ; 4e253 (13:6253)
+	ld hl, wcf64
+	set 5, [hl]
+	ld a, [CurPartySpecies]
+	cp UNOWN
+	jr z, .asm_4e266
+	hlcoord 0, 0
+	call PrepMonFrontpic
+	ret
+.asm_4e266
+	xor a
+	ld [wc2c6], a
+	hlcoord 0, 0
+	call _PrepMonFrontpic
+	ret
+
+Function4e271: ; 4e271 (13:6271)
+	ld a, [CurPartySpecies]
+	cp UNOWN
+	jr z, .asm_4e281
+	ld a, $1
+	ld [wc2c6], a
+	call Function4e289
+	ret
+.asm_4e281
+	xor a
+	ld [wc2c6], a
+	call Function4e289
+	ret
+
+Function4e289: ; 4e289 (13:6289)
+	ld a, [CurPartySpecies]
+	call IsAPokemon
+	ret c
+	call Function4e307
+	ld de, VTiles2 tile $00
+	predef FrontpicPredef
+	hlcoord 0, 0
+	ld d, $0
+	ld e, $2
+	predef LoadMonAnimation
+	ld hl, wcf64
+	set 6, [hl]
+	ret
+
+Function4e2ad: ; 4e2ad (13:62ad)
+	ld a, [MonType]
+	ld hl, .Jumptable
+	rst JumpTable
+	ret
+
+.Jumptable: ; 4e2b5 (13:62b5)
+	dw Function4e2bf
+	dw Function4e2cf
+	dw Function4e2d1
+	dw Function4e2ed
+	dw Function4e301
+
+
+Function4e2bf: ; 4e2bf (13:62bf)
+	ld a, [CurPartyMon]
+	ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species)
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call AddNTimes
+	ld b, h
+	ld c, l
+	jr Function4e2f2
+
+Function4e2cf: ; 4e2cf (13:62cf)
+	xor a
+	ret
+
+Function4e2d1: ; 4e2d1 (13:62d1)
+	ld hl, sBoxMons
+	ld bc, PARTYMON_STRUCT_LENGTH
+	ld a, [CurPartyMon]
+	call AddNTimes
+	ld b, h
+	ld c, l
+	ld a, BANK(sBoxMons)
+	call GetSRAMBank
+	call Function4e2f2
+	push af
+	call CloseSRAM
+	pop af
+	ret
+
+Function4e2ed: ; 4e2ed (13:62ed)
+	ld bc, TempMonSpecies ; wd10e (aliases: TempMon)
+	jr Function4e2f2 ; utterly pointless
+
+Function4e2f2: ; 4e2f2 (13:62f2)
+	ld a, [CurPartySpecies]
+	cp EGG
+	jr z, .egg
+	call CheckFaintedFrzSlp
+	jr c, Function4e305
+.egg
+	xor a
+	scf
+	ret
+
+Function4e301: ; 4e301 (13:6301)
+	ld a, $1
+	and a
+	ret
+Function4e305: ; 4e305 (13:6305)
+	xor a
+	ret
+
+Function4e307: ; 4e307 (13:6307)
+	nop
+	push hl
+	push de
+	push bc
+	push af
+	call DelayFrame
+	ld a, [rVBK]
+	push af
+	ld a, $1
+	ld [rVBK], a
+	ld de, TextBoxSpaceGFX
+	lb bc, BANK(TextBoxSpaceGFX), 1
+	ld hl, VTiles2 tile $7f
+	call Get2bpp
+	pop af
+	ld [rVBK], a
+	pop af
+	pop bc
+	pop de
+	pop hl
+	ret
+; 4e32a (13:632a)
+
+Unknown_4e32a: ; 4e32a
+; A blank tile?
+	ds 16
+; 4e33a
+
+EggStatsScreen: ; 4e33a
+	xor a
+	ld [hBGMapMode], a
+	ld hl, wcda1
+	call SetHPPal
+	ld b, SCGB_03
+	call GetSGBLayout
+	call Function4df8f
+	ld de, EggString
+	hlcoord 8, 1
+	call PlaceString
+	ld de, IDNoString
+	hlcoord 8, 3
+	call PlaceString
+	ld de, OTString
+	hlcoord 8, 5
+	call PlaceString
+	ld de, FiveQMarkString
+	hlcoord 11, 3
+	call PlaceString
+	ld de, FiveQMarkString
+	hlcoord 11, 5
+	call PlaceString
+	ld a, [TempMonHappiness] ; egg status
+	ld de, EggSoonString
+	cp $6
+	jr c, .picked
+	ld de, EggCloseString
+	cp $b
+	jr c, .picked
+	ld de, EggMoreTimeString
+	cp $29
+	jr c, .picked
+	ld de, EggALotMoreTimeString
+.picked
+	hlcoord 1, 9
+	call PlaceString
+	ld hl, wcf64
+	set 5, [hl]
+	call SetPalettes ; pals
+	call DelayFrame
+	hlcoord 0, 0
+	call PrepMonFrontpic
+	callba Function10402d
+	call Function4e497
+
+	ld a, [TempMonHappiness]
+	cp 6
+	ret nc
+	ld de, SFX_2_BOOPS
+	call PlaySFX
+	ret
+; 0x4e3c0
+
+EggString: ; 4e3c0
+	db "EGG@"
+
+FiveQMarkString: ; 4e3c4
+	db "?????@"
+
+EggSoonString: ; 0x4e3ca
+	db   "It's making sounds"
+	next "inside. It's going"
+	next "to hatch soon!@"
+
+EggCloseString: ; 0x4e3fd
+	db   "It moves around"
+	next "inside sometimes."
+	next "It must be close"
+	next "to hatching.@"
+
+EggMoreTimeString: ; 0x4e43d
+	db   "Wonder what's"
+	next "inside? It needs"
+	next "more time, though.@"
+
+EggALotMoreTimeString: ; 0x4e46e
+	db   "This EGG needs a"
+	next "lot more time to"
+	next "hatch.@"
+; 0x4e497
+
+
+Function4e497: ; 4e497 (13:6497)
+	call Function4e2ad
+	ret nc
+	ld a, [TempMonHappiness]
+	ld e, $7
+	cp $6
+	jr c, .asm_4e4ab
+	ld e, $8
+	cp $b
+	jr c, .asm_4e4ab
+	ret
+.asm_4e4ab
+	push de
+	ld a, $1
+	ld [wc2c6], a
+	call Function4e307
+	ld de, VTiles2 tile $00
+	predef FrontpicPredef
+	pop de
+	hlcoord 0, 0
+	ld d, $0
+	predef LoadMonAnimation
+	ld hl, wcf64
+	set 6, [hl]
+	ret
+
+Function4e4cd: ; 4e4cd (13:64cd)
+	hlcoord 13, 5
+	ld a, $36
+	call .load_square
+	hlcoord 15, 5
+	ld a, $36
+	call .load_square
+	hlcoord 17, 5
+	ld a, $36
+	call .load_square
+	ld a, c
+	cp $2
+	ld a, $3a
+	hlcoord 13, 5
+	jr c, .load_square
+	hlcoord 15, 5
+	jr z, .load_square
+	hlcoord 17, 5
+.load_square: ; 4e4f7 (13:64f7)
+	push bc
+	ld [hli], a
+	inc a
+	ld [hld], a
+	ld bc, SCREEN_WIDTH
+	add hl, bc
+	inc a
+	ld [hli], a
+	inc a
+	ld [hl], a
+	pop bc
+	ret
+
+Function4e505: ; 4e505 (13:6505)
+	ld de, StringBuffer1
+	ld bc, PKMN_NAME_LENGTH
+	jr .okay ; uuterly pointless
+.okay
+	ld a, [MonType]
+	cp BOXMON
+	jr nz, .partymon
+	ld a, BANK(sBoxMonNicknames)
+	call GetSRAMBank
+	push de
+	call CopyBytes
+	pop de
+	call CloseSRAM
+	ret
+
+.partymon
+	push de
+	call CopyBytes
+	pop de
+	ret
+
+Function4e528: ; 4e528 (13:6528)
+	ld a, [MonType]
+	add a
+	ld c, a
+	ld b, 0
+	add hl, bc
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld a, [MonType]
+	cp $3
+	ret z
+	ld a, [CurPartyMon]
+	jp SkipNames
+
+
+CheckFaintedFrzSlp: ; 4e53f
+	ld hl, MON_HP
+	add hl, bc
+	ld a, [hli]
+	or [hl]
+	jr z, .fainted_frz_slp
+	ld hl, MON_STATUS
+	add hl, bc
+	ld a, [hl]
+	and (1 << FRZ) | SLP
+	jr nz, .fainted_frz_slp
+	and a
+	ret
+
+.fainted_frz_slp
+	scf
+	ret
+; 4e554
--- /dev/null
+++ b/engine/time_capsule/conversion.asm
@@ -1,0 +1,684 @@
+; These functions seem to be related to backwards compatibility
+
+Functionfb57e: ; fb57e
+	ld a, [wd003]
+	ld hl, OTPartyMon1Species
+	call GetPartyLocation
+	push hl
+	ld a, [wd003]
+	inc a
+	ld c, a
+	ld b, 0
+	ld hl, OTPartyCount
+	add hl, bc
+	ld a, [hl]
+	pop hl
+	cp EGG
+	jr z, .asm_fb59c
+	cp [hl]
+	jr nz, .asm_fb5db
+
+.asm_fb59c
+	ld b, h
+	ld c, l
+	ld hl, MON_LEVEL
+	add hl, bc
+	ld a, [hl]
+	cp 101
+	jr nc, .asm_fb5db
+	ld a, [wLinkMode]
+	cp LINK_TIMECAPSULE
+	jr nz, .asm_fb5d9
+	ld hl, OTPartySpecies
+	ld a, [wd003]
+	ld c, a
+	ld b, 0
+	add hl, bc
+	ld a, [hl]
+
+	; Magnemite and Magneton's types changed
+	; from Electric to Electric/Steel.
+	cp MAGNEMITE
+	jr z, .asm_fb5d9
+	cp MAGNETON
+	jr z, .asm_fb5d9
+
+	ld [CurSpecies], a
+	call GetBaseData
+	ld hl, wcbea
+rept 2
+	add hl, bc
+endr
+	ld a, [BaseType1]
+	cp [hl]
+	jr nz, .asm_fb5db
+	inc hl
+	ld a, [BaseType2]
+	cp [hl]
+	jr nz, .asm_fb5db
+
+.asm_fb5d9
+	and a
+	ret
+
+.asm_fb5db
+	scf
+	ret
+; fb5dd
+
+Functionfb5dd: ; fb5dd
+	ld a, [wd002]
+	ld d, a
+	ld a, [PartyCount]
+	ld b, a
+	ld c, $0
+.asm_fb5e7
+	ld a, c
+	cp d
+	jr z, .asm_fb5f8
+	push bc
+	ld a, c
+	ld hl, PartyMon1HP
+	call GetPartyLocation
+	pop bc
+	ld a, [hli]
+	or [hl]
+	jr nz, .asm_fb60b
+
+.asm_fb5f8
+	inc c
+	dec b
+	jr nz, .asm_fb5e7
+	ld a, [wd003]
+	ld hl, OTPartyMon1HP
+	call GetPartyLocation
+	ld a, [hli]
+	or [hl]
+	jr nz, .asm_fb60b
+	scf
+	ret
+
+.asm_fb60b
+	and a
+	ret
+; fb60d
+
+Functionfb60d: ; fb60d
+	hlcoord 4, 0
+	ld de, PlayerName
+	call PlaceString
+	ld a, $14
+	ld [bc], a
+	hlcoord 4, 8
+	ld de, wd26b
+	call PlaceString
+	ld a, $14
+	ld [bc], a
+	hlcoord 7, 1
+	ld de, PartySpecies
+	call Functionfb634
+	hlcoord 7, 9
+	ld de, OTPartySpecies
+
+Functionfb634: ; fb634
+	ld c, $0
+.asm_fb636
+	ld a, [de]
+	cp $ff
+	ret z
+	ld [wd265], a
+	push bc
+	push hl
+	push de
+	push hl
+	ld a, c
+	ld [hProduct], a
+	call GetPokemonName
+	pop hl
+	call PlaceString
+	pop de
+	inc de
+	pop hl
+	ld bc, SCREEN_WIDTH
+	add hl, bc
+	pop bc
+	inc c
+	jr .asm_fb636
+; fb656
+
+KantoMonSpecials: ; fb656
+; The original special base stat for
+; each Kanto monster from Red/Blue.
+	db  65 ; BULBASAUR
+	db  80 ; IVYSAUR
+	db 100 ; VENUSAUR
+	db  50 ; CHARMANDER
+	db  65 ; CHARMELEON
+	db  85 ; CHARIZARD
+	db  50 ; SQUIRTLE
+	db  65 ; WARTORTLE
+	db  85 ; BLASTOISE
+	db  20 ; CATERPIE
+	db  25 ; METAPOD
+	db  80 ; BUTTERFREE
+	db  20 ; WEEDLE
+	db  25 ; KAKUNA
+	db  45 ; BEEDRILL
+	db  35 ; PIDGEY
+	db  50 ; PIDGEOTTO
+	db  70 ; PIDGEOT
+	db  25 ; RATTATA
+	db  50 ; RATICATE
+	db  31 ; SPEAROW
+	db  61 ; FEAROW
+	db  40 ; EKANS
+	db  65 ; ARBOK
+	db  50 ; PIKACHU
+	db  90 ; RAICHU
+	db  30 ; SANDSHREW
+	db  55 ; SANDSLASH
+	db  40 ; NIDORAN_F
+	db  55 ; NIDORINA
+	db  75 ; NIDOQUEEN
+	db  40 ; NIDORAN_M
+	db  55 ; NIDORINO
+	db  75 ; NIDOKING
+	db  60 ; CLEFAIRY
+	db  85 ; CLEFABLE
+	db  65 ; VULPIX
+	db 100 ; NINETALES
+	db  25 ; JIGGLYPUFF
+	db  50 ; WIGGLYTUFF
+	db  40 ; ZUBAT
+	db  75 ; GOLBAT
+	db  75 ; ODDISH
+	db  85 ; GLOOM
+	db 100 ; VILEPLUME
+	db  55 ; PARAS
+	db  80 ; PARASECT
+	db  40 ; VENONAT
+	db  90 ; VENOMOTH
+	db  45 ; DIGLETT
+	db  70 ; DUGTRIO
+	db  40 ; MEOWTH
+	db  65 ; PERSIAN
+	db  50 ; PSYDUCK
+	db  80 ; GOLDUCK
+	db  35 ; MANKEY
+	db  60 ; PRIMEAPE
+	db  50 ; GROWLITHE
+	db  80 ; ARCANINE
+	db  40 ; POLIWAG
+	db  50 ; POLIWHIRL
+	db  70 ; POLIWRATH
+	db 105 ; ABRA
+	db 120 ; KADABRA
+	db 135 ; ALAKAZAM
+	db  35 ; MACHOP
+	db  50 ; MACHOKE
+	db  65 ; MACHAMP
+	db  70 ; BELLSPROUT
+	db  85 ; WEEPINBELL
+	db 100 ; VICTREEBEL
+	db 100 ; TENTACOOL
+	db 120 ; TENTACRUEL
+	db  30 ; GEODUDE
+	db  45 ; GRAVELER
+	db  55 ; GOLEM
+	db  65 ; PONYTA
+	db  80 ; RAPIDASH
+	db  40 ; SLOWPOKE
+	db  80 ; SLOWBRO
+	db  95 ; MAGNEMITE
+	db 120 ; MAGNETON
+	db  58 ; FARFETCH_D
+	db  35 ; DODUO
+	db  60 ; DODRIO
+	db  70 ; SEEL
+	db  95 ; DEWGONG
+	db  40 ; GRIMER
+	db  65 ; MUK
+	db  45 ; SHELLDER
+	db  85 ; CLOYSTER
+	db 100 ; GASTLY
+	db 115 ; HAUNTER
+	db 130 ; GENGAR
+	db  30 ; ONIX
+	db  90 ; DROWZEE
+	db 115 ; HYPNO
+	db  25 ; KRABBY
+	db  50 ; KINGLER
+	db  55 ; VOLTORB
+	db  80 ; ELECTRODE
+	db  60 ; EXEGGCUTE
+	db 125 ; EXEGGUTOR
+	db  40 ; CUBONE
+	db  50 ; MAROWAK
+	db  35 ; HITMONLEE
+	db  35 ; HITMONCHAN
+	db  60 ; LICKITUNG
+	db  60 ; KOFFING
+	db  85 ; WEEZING
+	db  30 ; RHYHORN
+	db  45 ; RHYDON
+	db 105 ; CHANSEY
+	db 100 ; TANGELA
+	db  40 ; KANGASKHAN
+	db  70 ; HORSEA
+	db  95 ; SEADRA
+	db  50 ; GOLDEEN
+	db  80 ; SEAKING
+	db  70 ; STARYU
+	db 100 ; STARMIE
+	db 100 ; MR__MIME
+	db  55 ; SCYTHER
+	db  95 ; JYNX
+	db  85 ; ELECTABUZZ
+	db  85 ; MAGMAR
+	db  55 ; PINSIR
+	db  70 ; TAUROS
+	db  20 ; MAGIKARP
+	db 100 ; GYARADOS
+	db  95 ; LAPRAS
+	db  48 ; DITTO
+	db  65 ; EEVEE
+	db 110 ; VAPOREON
+	db 110 ; JOLTEON
+	db 110 ; FLAREON
+	db  75 ; PORYGON
+	db  90 ; OMANYTE
+	db 115 ; OMASTAR
+	db  45 ; KABUTO
+	db  70 ; KABUTOPS
+	db  60 ; AERODACTYL
+	db  65 ; SNORLAX
+	db 125 ; ARTICUNO
+	db 125 ; ZAPDOS
+	db 125 ; MOLTRES
+	db  50 ; DRATINI
+	db  70 ; DRAGONAIR
+	db 100 ; DRAGONITE
+	db 154 ; MEWTWO
+	db 100 ; MEW
+; fb6ed
+
+
+INCLUDE "event/name_rater.asm"
+
+
+PlaySlowCry: ; fb841
+	ld a, [ScriptVar]
+	call LoadCryHeader
+	jr c, .done
+
+	ld hl, CryPitch
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld bc, -$140
+	add hl, bc
+	ld a, l
+	ld [CryPitch], a
+	ld a, h
+	ld [CryPitch + 1], a
+	ld hl, CryLength
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld bc, $60
+	add hl, bc
+	ld a, l
+	ld [CryLength], a
+	ld a, h
+	ld [CryLength + 1], a
+	callba _PlayCryHeader
+	call WaitSFX
+
+.done
+	ret
+; fb877
+
+NewPokedexEntry: ; fb877
+	ld a, [hMapAnims]
+	push af
+	xor a
+	ld [hMapAnims], a
+	call LowVolume
+	call ClearBGPalettes
+	call ClearTileMap
+	call UpdateSprites
+	call ClearSprites
+	ld a, [wPokedexStatus]
+	push af
+	ld a, [hSCX]
+	add $5
+	ld [hSCX], a
+	xor a
+	ld [wPokedexStatus], a
+	callba Function41a7f
+	call WaitPressAorB_BlinkCursor
+	ld a, $1
+	ld [wPokedexStatus], a
+	callba Function4424d
+	call WaitPressAorB_BlinkCursor
+	pop af
+	ld [wPokedexStatus], a
+	call MaxVolume
+	call RotateThreePalettesRight
+	ld a, [hSCX]
+	add $fb
+	ld [hSCX], a
+	call Functionfb8c8
+	pop af
+	ld [hMapAnims], a
+	ret
+; fb8c8
+
+Functionfb8c8: ; fb8c8
+	call ClearTileMap
+	call LoadFontsExtra
+	call LoadStandardFont
+	callba Function40ab2
+	call Function3200
+	callba GetEnemyMonDVs
+	ld a, [hli]
+	ld [TempMonDVs], a
+	ld a, [hl]
+	ld [TempMonDVs + 1], a
+	ld b, SCGB_1C
+	call GetSGBLayout
+	call SetPalettes
+	ret
+; fb8f1
+
+ConvertMon_2to1: ; fb8f1
+; Takes the Gen-2 Pokemon number stored in wd265, finds it in the Pokered_MonIndices table, and returns its index in wd265.
+	push bc
+	push hl
+	ld a, [wd265]
+	ld b, a
+	ld c, 0
+	ld hl, Pokered_MonIndices
+.loop
+	inc c
+	ld a, [hli]
+	cp b
+	jr nz, .loop
+	ld a, c
+	ld [wd265], a
+	pop hl
+	pop bc
+	ret
+; fb908
+
+ConvertMon_1to2: ; fb908
+; Takes the Gen-1 Pokemon number stored in wd265 and returns the corresponding value from Pokered_MonIndices in wd265.
+	push bc
+	push hl
+	ld a, [wd265]
+	dec a
+	ld hl, Pokered_MonIndices
+	ld b, 0
+	ld c, a
+	add hl, bc
+	ld a, [hl]
+	ld [wd265], a
+	pop hl
+	pop bc
+	ret
+; fb91c
+
+Pokered_MonIndices: ; fb91c
+	db RHYDON
+	db KANGASKHAN
+	db NIDORAN_M
+	db CLEFAIRY
+	db SPEAROW
+	db VOLTORB
+	db NIDOKING
+	db SLOWBRO
+	db IVYSAUR
+	db EXEGGUTOR
+	db LICKITUNG
+	db EXEGGCUTE
+	db GRIMER
+	db GENGAR
+	db NIDORAN_F
+	db NIDOQUEEN
+	db CUBONE
+	db RHYHORN
+	db LAPRAS
+	db ARCANINE
+	db MEW
+	db GYARADOS
+	db SHELLDER
+	db TENTACOOL
+	db GASTLY
+	db SCYTHER
+	db STARYU
+	db BLASTOISE
+	db PINSIR
+	db TANGELA
+	db SCIZOR
+	db SHUCKLE
+	db GROWLITHE
+	db ONIX
+	db FEAROW
+	db PIDGEY
+	db SLOWPOKE
+	db KADABRA
+	db GRAVELER
+	db CHANSEY
+	db MACHOKE
+	db MR__MIME
+	db HITMONLEE
+	db HITMONCHAN
+	db ARBOK
+	db PARASECT
+	db PSYDUCK
+	db DROWZEE
+	db GOLEM
+	db HERACROSS
+	db MAGMAR
+	db HO_OH
+	db ELECTABUZZ
+	db MAGNETON
+	db KOFFING
+	db SNEASEL
+	db MANKEY
+	db SEEL
+	db DIGLETT
+	db TAUROS
+	db TEDDIURSA
+	db URSARING
+	db SLUGMA
+	db FARFETCH_D
+	db VENONAT
+	db DRAGONITE
+	db MAGCARGO
+	db SWINUB
+	db PILOSWINE
+	db DODUO
+	db POLIWAG
+	db JYNX
+	db MOLTRES
+	db ARTICUNO
+	db ZAPDOS
+	db DITTO
+	db MEOWTH
+	db KRABBY
+	db CORSOLA
+	db REMORAID
+	db OCTILLERY
+	db VULPIX
+	db NINETALES
+	db PIKACHU
+	db RAICHU
+	db DELIBIRD
+	db MANTINE
+	db DRATINI
+	db DRAGONAIR
+	db KABUTO
+	db KABUTOPS
+	db HORSEA
+	db SEADRA
+	db SKARMORY
+	db HOUNDOUR
+	db SANDSHREW
+	db SANDSLASH
+	db OMANYTE
+	db OMASTAR
+	db JIGGLYPUFF
+	db WIGGLYTUFF
+	db EEVEE
+	db FLAREON
+	db JOLTEON
+	db VAPOREON
+	db MACHOP
+	db ZUBAT
+	db EKANS
+	db PARAS
+	db POLIWHIRL
+	db POLIWRATH
+	db WEEDLE
+	db KAKUNA
+	db BEEDRILL
+	db HOUNDOOM
+	db DODRIO
+	db PRIMEAPE
+	db DUGTRIO
+	db VENOMOTH
+	db DEWGONG
+	db KINGDRA
+	db PHANPY
+	db CATERPIE
+	db METAPOD
+	db BUTTERFREE
+	db MACHAMP
+	db DONPHAN
+	db GOLDUCK
+	db HYPNO
+	db GOLBAT
+	db MEWTWO
+	db SNORLAX
+	db MAGIKARP
+	db PORYGON2
+	db STANTLER
+	db MUK
+	db SMEARGLE
+	db KINGLER
+	db CLOYSTER
+	db TYROGUE
+	db ELECTRODE
+	db CLEFABLE
+	db WEEZING
+	db PERSIAN
+	db MAROWAK
+	db HITMONTOP
+	db HAUNTER
+	db ABRA
+	db ALAKAZAM
+	db PIDGEOTTO
+	db PIDGEOT
+	db STARMIE
+	db BULBASAUR
+	db VENUSAUR
+	db TENTACRUEL
+	db SMOOCHUM
+	db GOLDEEN
+	db SEAKING
+	db ELEKID
+	db MAGBY
+	db MILTANK
+	db BLISSEY
+	db PONYTA
+	db RAPIDASH
+	db RATTATA
+	db RATICATE
+	db NIDORINO
+	db NIDORINA
+	db GEODUDE
+	db PORYGON
+	db AERODACTYL
+	db RAIKOU
+	db MAGNEMITE
+	db ENTEI
+	db SUICUNE
+	db CHARMANDER
+	db SQUIRTLE
+	db CHARMELEON
+	db WARTORTLE
+	db CHARIZARD
+	db LARVITAR
+	db PUPITAR
+	db TYRANITAR
+	db LUGIA
+	db ODDISH
+	db GLOOM
+	db VILEPLUME
+	db BELLSPROUT
+	db WEEPINBELL
+	db VICTREEBEL
+	db CHIKORITA
+	db BAYLEEF
+	db MEGANIUM
+	db CYNDAQUIL
+	db QUILAVA
+	db TYPHLOSION
+	db TOTODILE
+	db CROCONAW
+	db FERALIGATR
+	db SENTRET
+	db FURRET
+	db HOOTHOOT
+	db NOCTOWL
+	db LEDYBA
+	db LEDIAN
+	db SPINARAK
+	db ARIADOS
+	db CROBAT
+	db CHINCHOU
+	db LANTURN
+	db PICHU
+	db CLEFFA
+	db IGGLYBUFF
+	db TOGEPI
+	db TOGETIC
+	db NATU
+	db XATU
+	db MAREEP
+	db FLAAFFY
+	db AMPHAROS
+	db BELLOSSOM
+	db MARILL
+	db AZUMARILL
+	db SUDOWOODO
+	db POLITOED
+	db HOPPIP
+	db SKIPLOOM
+	db JUMPLUFF
+	db AIPOM
+	db SUNKERN
+	db SUNFLORA
+	db YANMA
+	db WOOPER
+	db QUAGSIRE
+	db ESPEON
+	db UMBREON
+	db MURKROW
+	db SLOWKING
+	db MISDREAVUS
+	db UNOWN
+	db WOBBUFFET
+	db GIRAFARIG
+	db PINECO
+	db FORRETRESS
+	db DUNSPARCE
+	db GLIGAR
+	db STEELIX
+	db SNUBBULL
+	db GRANBULL
+	db QWILFISH
+	db WOBBUFFET
+	db WOBBUFFET
+; fba18
--- a/engine/timeofdaypals.asm
+++ b/engine/timeofdaypals.asm
@@ -39,7 +39,7 @@
 
 
 ; save bg palette 8
-	ld hl, wMapPals + 8 * 7 ; wMapPals + 7 pals
+	ld hl, UnknBGPals + 8 * 7 ; UnknBGPals + 7 pals
 
 ; save wram bank
 	ld a, [rSVBK]
@@ -65,12 +65,12 @@
 
 
 ; update sgb pals
-	ld b, $9
+	ld b, SCGB_09
 	call GetSGBLayout
 
 
 ; restore bg palette 8
-	ld hl, Unkn2Pals - 1 ; last byte in wMapPals
+	ld hl, UnknOBPals - 1 ; last byte in UnknBGPals
 
 ; save wram bank
 	ld a, [rSVBK]
@@ -172,12 +172,12 @@
 	push af
 	ld a, $5
 	ld [rSVBK], a
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	ld a, [hli]
 	ld e, a
 	ld a, [hli]
 	ld d, a
-	ld hl, wMapPals + 8
+	ld hl, UnknBGPals + 8
 	ld c, $6
 .asm_8c0d4
 	ld a, e
--- /dev/null
+++ b/engine/timeset.asm
@@ -1,0 +1,771 @@
+InitClock: ; 90672 (24:4672)
+; Ask the player to set the time.
+	ld a, [hInMenu]
+	push af
+	ld a, $1
+	ld [hInMenu], a
+
+	ld a, $0
+	ld [wSpriteUpdatesEnabled], a
+	ld a, $10
+	ld [MusicFade], a
+	ld a, MUSIC_NONE % $100
+	ld [MusicFadeIDLo], a
+	ld a, MUSIC_NONE / $100
+	ld [MusicFadeIDHi], a
+	ld c, 8
+	call DelayFrames
+	call RotateFourPalettesLeft
+	call ClearTileMap
+	call ClearSprites
+	ld b, SCGB_08
+	call GetSGBLayout
+	xor a
+	ld [hBGMapMode], a
+	call LoadStandardFont
+	ld de, GFX_908fb
+	ld hl, VTiles2 tile $00
+	lb bc, BANK(GFX_908fb), 1
+	call Request1bpp
+	ld de, GFX_90903
+	ld hl, VTiles2 tile $01
+	lb bc, BANK(GFX_90903), 1
+	call Request1bpp
+	ld de, GFX_9090b
+	ld hl, VTiles2 tile $02
+	lb bc, BANK(GFX_9090b), 1
+	call Request1bpp
+	call .ClearScreen
+	call WaitBGMap
+	call RotateFourPalettesRight
+	ld hl, UnknownText_0x90874
+	call PrintText
+	ld hl, wc608
+	ld bc, 50
+	xor a
+	call ByteFill
+	ld a, $a
+	ld [wInitHourBuffer], a
+
+.loop
+	ld hl, UnknownText_0x90879
+	call PrintText
+	hlcoord 3, 7
+	ld b, 2
+	ld c, 15
+	call TextBox
+	hlcoord 11, 7
+	ld [hl], $1
+	hlcoord 11, 10
+	ld [hl], $2
+	hlcoord 4, 9
+	call DisplayHourOClock
+	ld c, 10
+	call DelayFrames
+
+.SetHourLoop
+	call JoyTextDelay
+	call SetHour
+	jr nc, .SetHourLoop
+
+	ld a, [wInitHourBuffer]
+	ld [StringBuffer2 + 1], a
+	call .ClearScreen
+	ld hl, UnknownText_0x90886
+	call PrintText
+	call YesNoBox
+	jr nc, .HourIsSet
+	call .ClearScreen
+	jr .loop
+
+.HourIsSet
+	ld hl, UnknownText_0x9089a
+	call PrintText
+	hlcoord 11, 7
+	lb bc, 2, 7
+	call TextBox
+	hlcoord 15, 7
+	ld [hl], $1
+	hlcoord 15, 10
+	ld [hl], $2
+	hlcoord 12, 9
+	call DisplayMinutesWithMinString
+	ld c, 10
+	call DelayFrames
+
+.SetMinutesLoop
+	call JoyTextDelay
+	call SetMinutes
+	jr nc, .SetMinutesLoop
+
+	ld a, [BattleMonNick + 5]
+	ld [StringBuffer2 + 2], a
+	call .ClearScreen
+	ld hl, UnknownText_0x908a4
+	call PrintText
+	call YesNoBox
+	jr nc, .MinutesAreSet
+	call .ClearScreen
+	jr .HourIsSet
+
+.MinutesAreSet
+	call Function658
+	ld hl, OakText_ResponseToSetTime
+	call PrintText
+	call WaitPressAorB_BlinkCursor
+	pop af
+	ld [hInMenu], a
+	ret
+
+.ClearScreen: ; 90783 (24:4783)
+	xor a
+	ld [hBGMapMode], a
+	hlcoord 0, 0
+	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
+	xor a
+	call ByteFill
+	ld a, $1
+	ld [hBGMapMode], a
+	ret
+
+SetHour: ; 90795 (24:4795)
+	ld a, [hJoyPressed]
+	and A_BUTTON
+	jr nz, .Confirm
+
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, .up
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .down
+	call DelayFrame
+	and a
+	ret
+
+.down
+	ld hl, wInitHourBuffer
+	ld a, [hl]
+	and a
+	jr nz, .DecreaseThroughMidnight
+	ld a, 23 + 1
+.DecreaseThroughMidnight
+	dec a
+	ld [hl], a
+	jr .okay
+
+.up
+	ld hl, wInitHourBuffer
+	ld a, [hl]
+	cp 23
+	jr c, .AdvanceThroughMidnight
+	ld a, -1
+.AdvanceThroughMidnight
+	inc a
+	ld [hl], a
+
+.okay
+	hlcoord 4, 9
+	ld a, " "
+	ld bc, 15
+	call ByteFill
+	hlcoord 4, 9
+	call DisplayHourOClock
+	call WaitBGMap
+	and a
+	ret
+
+.Confirm
+	scf
+	ret
+
+DisplayHourOClock: ; 907de (24:47de)
+	push hl
+	ld a, [wInitHourBuffer]
+	ld c, a
+	ld e, l
+	ld d, h
+	call PrintHour
+	inc hl
+	ld de, String_oclock
+	call PlaceString
+	pop hl
+	ret
+; 907f1 (24:47f1)
+
+Function907f1: ; 907f1
+	ld h, d
+	ld l, e
+	push hl
+	call DisplayHourOClock
+	pop de
+rept 2
+	inc de
+endr
+	ld a, $9c
+	ld [de], a
+	inc de
+	push de
+	ld hl, $3
+	add hl, de
+	ld a, [de]
+	inc de
+	ld [hli], a
+	ld a, [de]
+	ld [hl], a
+	pop hl
+	call DisplayMinutesWithMinString
+rept 3
+	inc hl
+endr
+	ret
+; 90810
+
+SetMinutes: ; 90810 (24:4810)
+	ld a, [hJoyPressed]
+	and A_BUTTON
+	jr nz, .asm_90857
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, .asm_90835
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .asm_90828
+	call DelayFrame
+	and a
+	ret
+.asm_90828
+	ld hl, BattleMonNick + 5
+	ld a, [hl]
+	and a
+	jr nz, .asm_90831
+	ld a, 59 + 1
+.asm_90831
+	dec a
+	ld [hl], a
+	jr .asm_90841
+.asm_90835
+	ld hl, BattleMonNick + 5
+	ld a, [hl]
+	cp 59
+	jr c, .asm_9083f
+	ld a, -1
+.asm_9083f
+	inc a
+	ld [hl], a
+.asm_90841
+	hlcoord 12, 9
+	ld a, " "
+	ld bc, 7
+	call ByteFill
+	hlcoord 12, 9
+	call DisplayMinutesWithMinString
+	call WaitBGMap
+	and a
+	ret
+.asm_90857
+	scf
+	ret
+
+DisplayMinutesWithMinString: ; 90859 (24:4859)
+	ld de, BattleMonNick + 5
+	call PrintTwoDigitNumberRightAlign
+	inc hl
+	ld de, String_min
+	call PlaceString
+	ret
+
+PrintTwoDigitNumberRightAlign: ; 90867 (24:4867)
+	push hl
+	ld a, " "
+	ld [hli], a
+	ld [hl], a
+	pop hl
+	lb bc, PRINTNUM_RIGHTALIGN | 1, 2
+	call PrintNum
+	ret
+; 90874 (24:4874)
+
+UnknownText_0x90874: ; 0x90874
+	; Zzz… Hm? Wha…? You woke me up! Will you check the clock for me?
+	text_jump UnknownText_0x1bc29c
+	db "@"
+; 0x90879
+
+UnknownText_0x90879: ; 0x90879
+	; What time is it?
+	text_jump UnknownText_0x1bc2eb
+	db "@"
+; 0x9087e
+
+String_oclock:
+	db "o'clock@"
+; 90886
+
+UnknownText_0x90886: ; 0x90886
+	; What?@ @
+	text_jump UnknownText_0x1bc2fd
+	start_asm
+	hlcoord 1, 16
+	call DisplayHourOClock
+	ld hl, UnknownText_0x90895
+	ret
+; 90895 (24:4895)
+
+UnknownText_0x90895: ; 0x90895
+	; ?
+	text_jump UnknownText_0x1bc305
+	db "@"
+; 0x9089a
+
+UnknownText_0x9089a: ; 0x9089a
+	; How many minutes?
+	text_jump UnknownText_0x1bc308
+	db "@"
+; 0x9089f
+
+String_min:
+	db "min.@"
+; 908a4
+
+UnknownText_0x908a4: ; 0x908a4
+	; Whoa!@ @
+	text_jump UnknownText_0x1bc31b
+	start_asm
+; 0x908a9
+	hlcoord 7, 14
+	call DisplayMinutesWithMinString
+	ld hl, UnknownText_0x908b3
+	ret
+; 908b3 (24:48b3)
+
+UnknownText_0x908b3: ; 0x908b3
+	; ?
+	text_jump UnknownText_0x1bc323
+	db "@"
+; 0x908b8
+
+OakText_ResponseToSetTime: ; 0x908b8
+	start_asm
+	decoord 1, 14
+	ld a, [wInitHourBuffer]
+	ld c, a
+	call PrintHour
+	ld [hl], ":"
+	inc hl
+	ld de, BattleMonNick + 5
+	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+	call PrintNum
+	ld b, h
+	ld c, l
+	ld a, [wInitHourBuffer]
+	cp 4
+	jr c, .NITE
+	cp 11
+	jr c, .MORN
+	cp 18
+	jr c, .DAY
+.NITE
+	ld hl, .sodark
+	ret
+.MORN
+	ld hl, .overslept
+	ret
+.DAY
+	ld hl, .yikes
+	ret
+; 908ec (24:48ec)
+
+.overslept: ; 0x908ec
+	; ! I overslept!
+	text_jump UnknownText_0x1bc326
+	db "@"
+; 0x908f1
+
+.yikes: ; 0x908f1
+	; ! Yikes! I over- slept!
+	text_jump UnknownText_0x1bc336
+	db "@"
+; 0x908f6
+
+.sodark: ; 0x908f6
+	; ! No wonder it's so dark!
+	text_jump UnknownText_0x1bc34f
+	db "@"
+; 0x908fb
+
+GFX_908fb: ; 908fb
+INCBIN "gfx/unknown/0908fb.2bpp"
+GFX_90903: ; 90903
+INCBIN "gfx/unknown/090903.2bpp"
+GFX_9090b: ; 9090b
+INCBIN "gfx/unknown/09090b.2bpp"
+; 90913
+
+Special_SetDayOfWeek: ; 90913
+	ld a, [hInMenu]
+	push af
+	ld a, $1
+	ld [hInMenu], a
+	ld de, GFX_90903
+	ld hl, VTiles1 tile $6f
+	lb bc, BANK(GFX_90903), 1
+	call Request1bpp
+	ld de, GFX_9090b
+	ld hl, VTiles1 tile $75
+	lb bc, BANK(GFX_9090b), 1
+	call Request1bpp
+	xor a
+	ld [wd002], a
+.asm_90936
+	hlcoord 0, 12
+	lb bc, 4, 18
+	call TextBox
+	call LoadStandardMenuDataHeader
+	ld hl, UnknownText_0x90a3f
+	call PrintText
+	hlcoord 9, 3
+	ld b, 2
+	ld c, 9
+	call TextBox
+	hlcoord 14, 3
+	ld [hl], $ef
+	hlcoord 14, 6
+	ld [hl], $f5
+	hlcoord 10, 5
+	call Function909de
+	call ApplyTilemap
+	ld c, 10
+	call DelayFrames
+.asm_9096a
+	call JoyTextDelay
+	call Function90993
+	jr nc, .asm_9096a
+	call ExitMenu
+	call UpdateSprites
+	ld hl, UnknownText_0x90a44
+	call PrintText
+	call YesNoBox
+	jr c, .asm_90936
+	ld a, [wd002]
+	ld [StringBuffer2], a
+	call Function663
+	call LoadStandardFont
+	pop af
+	ld [hInMenu], a
+	ret
+; 90993
+
+Function90993: ; 90993
+	ld a, [hJoyPressed]
+	and A_BUTTON
+	jr z, .asm_9099b
+	scf
+	ret
+
+.asm_9099b
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, .asm_909ba
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .asm_909ad
+	call DelayFrame
+	and a
+	ret
+
+.asm_909ad
+	ld hl, wd002
+	ld a, [hl]
+	and a
+	jr nz, .asm_909b6
+	ld a, 6 + 1
+
+.asm_909b6
+	dec a
+	ld [hl], a
+	jr .asm_909c6
+
+.asm_909ba
+	ld hl, wd002
+	ld a, [hl]
+	cp 6
+	jr c, .asm_909c4
+	ld a, -1
+
+.asm_909c4
+	inc a
+	ld [hl], a
+
+.asm_909c6
+	xor a
+	ld [hBGMapMode], a
+	hlcoord 10, 4
+	ld b, $2
+	ld c, $9
+	call ClearBox
+	hlcoord 10, 5
+	call Function909de
+	call WaitBGMap
+	and a
+	ret
+; 909de
+
+Function909de: ; 909de
+	push hl
+	ld a, [wd002]
+	ld e, a
+	ld d, 0
+	ld hl, WeekdaysStrings
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld d, [hl]
+	ld e, a
+	pop hl
+	call PlaceString
+	ret
+; 909f2
+
+WeekdaysStrings: ; 909f2
+	dw Sunday
+	dw Monday
+	dw Tuesday
+	dw Wednesday
+	dw Thursday
+	dw Friday
+	dw Saturday
+	dw Sunday
+
+Sunday:    db " SUNDAY@"
+Monday:    db " MONDAY@"
+Tuesday:   db " TUESDAY@"
+Wednesday: db "WEDNESDAY@"
+Thursday:  db "THURSDAY@"
+Friday:    db " FRIDAY@"
+Saturday:  db "SATURDAY@"
+
+
+UnknownText_0x90a3f: ; 0x90a3f
+	; What day is it?
+	text_jump UnknownText_0x1bc369
+	db "@"
+; 0x90a44
+
+UnknownText_0x90a44: ; 0x90a44
+	start_asm
+	hlcoord 1, 14
+	call Function909de
+	ld hl, UnknownText_0x90a4f
+	ret
+; 90a4f (24:4a4f)
+
+UnknownText_0x90a4f: ; 0x90a4f
+	; , is it?
+	text_jump UnknownText_0x1bc37a
+	db "@"
+; 0x90a54
+
+Special_InitialSetDSTFlag: ; 90a54
+	ld a, [wDST]
+	set 7, a
+	ld [wDST], a
+	hlcoord 1, 14
+	lb bc, 3, 18
+	call ClearBox
+	ld hl, UnknownText_0x90a6c
+	call PlaceWholeStringInBoxAtOnce
+	ret
+; 90a6c
+
+UnknownText_0x90a6c: ; 90a6c
+	start_asm
+	call UpdateTime
+	ld a, [hHours]
+	ld b, a
+	ld a, [hMinutes]
+	ld c, a
+	decoord 1, 14
+	callba PrintHoursMins
+	ld hl, TextJump_DSTIsThatOK
+	ret
+; 90a83 (24:4a83)
+
+TextJump_DSTIsThatOK: ; 0x90a83
+	; DST, is that OK?
+	text_jump Text_DSTIsThatOK
+	db "@"
+; 0x90a88
+
+Special_InitialClearDSTFlag: ; 90a88
+	ld a, [wDST]
+	res 7, a
+	ld [wDST], a
+	hlcoord 1, 14
+	lb bc, 3, 18
+	call ClearBox
+	ld hl, UnknownText_0x90aa0
+	call PlaceWholeStringInBoxAtOnce
+	ret
+; 90aa0
+
+UnknownText_0x90aa0: ; 90aa0
+	start_asm
+	call UpdateTime
+	ld a, [hHours]
+	ld b, a
+	ld a, [hMinutes]
+	ld c, a
+	decoord 1, 14
+	callba PrintHoursMins
+	ld hl, UnknownText_0x90ab7
+	ret
+; 90ab7
+
+UnknownText_0x90ab7: ; 0x90ab7
+	; , is that OK?
+	text_jump UnknownText_0x1c5ff1
+	db "@"
+; 0x90abc
+
+Function90abc: ; 90abc
+	hlcoord 1, 14
+	lb bc, 3, SCREEN_WIDTH - 2
+	call ClearBox
+	ld hl, UnknownText_0x90acc
+	call PlaceWholeStringInBoxAtOnce
+	ret
+; 90acc
+
+UnknownText_0x90acc: ; 0x90acc
+	start_asm
+
+	call UpdateTime
+
+	hlcoord 1, 14
+	ld [hl], "R"
+	inc hl
+	ld [hl], "T"
+	inc hl
+	ld [hl], " "
+	inc hl
+
+	ld de, hRTCDayLo
+	call Function90b23
+
+	hlcoord 1, 16
+	ld [hl], "D"
+	inc hl
+	ld [hl], "F"
+	inc hl
+	ld [hl], " "
+	inc hl
+
+	ld de, StartDay
+	call Function90b23
+
+	ld [hl], " "
+	inc hl
+
+	ld a, [wDST]
+	bit 7, a
+	jr z, .off
+
+	ld [hl], "O"
+	inc hl
+	ld [hl], "N"
+	inc hl
+	jr .done
+
+.off
+	ld [hl], "O"
+	inc hl
+	ld [hl], "F"
+	inc hl
+	ld [hl], "F"
+	inc hl
+
+.done
+	ld hl, UnknownText_0x90b13
+	ret
+; 90b13
+
+UnknownText_0x90b13: ; 0x90b13
+	text "<PARA>Now on DEBUG…"
+	prompt
+; 0x90b23
+
+Function90b23: ; 90b23
+	lb bc, 1, 3
+	call PrintNum
+	ld [hl], "."
+	inc hl
+	inc de
+	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+	call PrintNum
+	ld [hl], ":"
+	inc hl
+	inc de
+	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+	call PrintNum
+	ret
+; 90b3e
+
+PrintHour: ; 90b3e (24:4b3e)
+	ld l, e
+	ld h, d
+	push bc
+	call GetTimeOfDayString
+	call PlaceString
+	ld l, c
+	ld h, b
+	inc hl
+	pop bc
+	call AdjustHourForAMorPM
+	ld [wd265], a
+	ld de, wd265
+	call PrintTwoDigitNumberRightAlign
+	ret
+
+GetTimeOfDayString: ; 90b58 (24:4b58)
+	ld a, c
+	cp 4
+	jr c, .nite
+	cp 10
+	jr c, .morn
+	cp 18
+	jr c, .day
+.nite
+	ld de, .NITE
+	ret
+.morn
+	ld de, .MORN
+	ret
+.day
+	ld de, .DAY
+	ret
+; 90b71 (24:4b71)
+
+.NITE: db "NITE@"
+.MORN: db "MORN@"
+.DAY: db "DAY@"
+; 90b7f
+
+AdjustHourForAMorPM:
+; Convert the hour stored in c (0-23) to a 1-12 value
+	ld a, c
+	or a
+	jr z, .midnight
+	cp 12
+	ret c
+	ret z
+	sub 12
+	ret
+
+.midnight
+	ld a, 12
+	ret
--- a/engine/title.asm
+++ b/engine/title.asm
@@ -31,8 +31,8 @@
 	
 	
 ; Clear screen palettes
-	ld hl, VBGMap0
-	ld bc, $0280
+	hlbgcoord 0, 0
+	ld bc, 20 bgrows
 	xor a
 	call ByteFill
 	
@@ -42,8 +42,8 @@
 ; BG Map 1:
 
 ; line 0 (copyright)
-	ld hl, VBGMap1
-	ld bc, $0020 ; one row
+	hlbgcoord 0, 0, VBGMap1
+	ld bc, 1 bgrows
 	ld a, 7 ; palette
 	call ByteFill
 
@@ -53,41 +53,41 @@
 ; Apply logo gradient:
 
 ; lines 3-4
-	ld hl, VBGMap0 tile $06 ; (0,3)
-	ld bc, $0040 ; 2 rows
+	hlbgcoord 0, 3
+	ld bc, 2 bgrows
 	ld a, 2
 	call ByteFill
 ; line 5
-	ld hl, VBGMap0 tile $0a ; (0,5)
-	ld bc, $0020 ; 1 row
+	hlbgcoord 0, 5
+	ld bc, 1 bgrows
 	ld a, 3
 	call ByteFill
 ; line 6
-	ld hl, VBGMap0 tile $0c ; (0,6)
-	ld bc, $0020 ; 1 row
+	hlbgcoord 0, 6
+	ld bc, 1 bgrows
 	ld a, 4
 	call ByteFill
 ; line 7
-	ld hl, VBGMap0 tile $0e ; (0,7)
-	ld bc, $0020 ; 1 row
+	hlbgcoord 0, 7
+	ld bc, 1 bgrows
 	ld a, 5
 	call ByteFill
 ; lines 8-9
-	ld hl, VBGMap0 tile $10 ; (0,8)
-	ld bc, $0040 ; 2 rows
+	hlbgcoord 0, 8
+	ld bc, 2 bgrows
 	ld a, 6
 	call ByteFill
 	
 
 ; 'CRYSTAL VERSION'
-	ld hl, $9925 ; (5,9)
-	ld bc, $000b ; length of version text
+	hlbgcoord 5, 9
+	ld bc, NAME_LENGTH ; length of version text
 	ld a, 1
 	call ByteFill
 	
 ; Suicune gfx
-	ld hl, VBGMap0 tile $18 ; (0,12)
-	ld bc, $00c0 ; the rest of the screen
+	hlbgcoord 0, 12
+	ld bc, 6 bgrows ; the rest of the screen
 	ld a, 8
 	call ByteFill
 	
@@ -109,9 +109,9 @@
 	
 	
 ; Clear screen tiles
-	ld hl, VBGMap0
-	ld bc, $0800
-	ld a, $7f
+	hlbgcoord 0, 0
+	ld bc, 64 bgrows
+	ld a, " "
 	call ByteFill
 	
 ; Draw Pokemon logo
@@ -122,7 +122,7 @@
 	call DrawTitleGraphic
 	
 ; Draw copyright text
-	ld hl, $9c03 ; BGMap1(3,0)
+	hlbgcoord 3, 0, VBGMap1
 	lb bc, 1, 13
 	ld d, $c
 	ld e, $10
@@ -144,7 +144,7 @@
 	
 ; Update palette colors
 	ld hl, TitleScreenPalettes
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, 4 * 32
 	call CopyBytes
 	
@@ -220,7 +220,7 @@
 	ld [hBGMapMode], a
 	
 	xor a
-	ld [wMapPals + 2], a
+	ld [UnknBGPals + 2], a
 	
 ; Play starting sound effect
 	call SFXChannelsOff
@@ -231,7 +231,7 @@
 ; 10eea7
 
 SuicuneFrameIterator: ; 10eea7
-	ld hl, wMapPals + 2
+	ld hl, UnknBGPals + 2
 	ld a, [hl]
 	ld c, a
 	inc [hl]
@@ -270,7 +270,7 @@
 LoadSuicuneFrame: ; 10eed2
 	hlcoord 6, 12
 	ld b, 6
-.row
+.bgrows
 	ld c, 8
 .col
 	ld a, d
@@ -288,7 +288,7 @@
 	add d
 	ld d, a
 	dec b
-	jr nz, .row
+	jr nz, .bgrows
 	ret
 ; 10eeef
 
@@ -298,8 +298,8 @@
 ;   b: height
 ;   c: width
 ;   d: tile to start drawing from
-;   e: number of tiles to advance for each row
-.row
+;   e: number of tiles to advance for each bgrows
+.bgrows
 	push de
 	push bc
 	push hl
@@ -318,7 +318,7 @@
 	add d
 	ld d, a
 	dec b
-	jr nz, .row
+	jr nz, .bgrows
 	ret
 ; 10ef06
 
--- /dev/null
+++ b/engine/town_map.asm
@@ -1,0 +1,173 @@
+
+_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 Function8cf53
+	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 Function3200
+	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_02
+	call GetSGBLayout
+	call SetPalettes
+	ld a, [hCGB]
+	and a
+	jr z, .sgb
+	ld a, $e4
+	call Functioncf8
+	call DelayFrame
+
+.sgb
+	ld a, [wd002]
+	cp KANTO_LANDMARK
+	jr nc, .kanto
+	ld d, KANTO_LANDMARK - 1
+	ld e, 1
+	call Function919b0
+	jr .resume
+
+.kanto
+	call Function910e8
+	call Function919b0
+
+.resume
+	pop af
+	ld [VramState], a
+	pop af
+	ld [hInMenu], a
+	pop af
+	ld [Options], a
+	call ClearBGPalettes
+	ret
+; 919b0
+
+Function919b0: ; 919b0
+.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 Function8cf69
+	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
--- /dev/null
+++ b/engine/trade/animation.asm
@@ -1,0 +1,1542 @@
+TradeAnimation: ; 28f24
+	xor a
+	ld [wcf66], a
+	ld hl, wPlayerTrademonSenderName
+	ld de, wOTTrademonSenderName
+	call Function297ff
+	ld hl, wPlayerTrademonSpecies
+	ld de, wOTTrademonSpecies
+	call Function29814
+	ld de, .data_28f3f
+	jr Function28fa1
+
+.data_28f3f
+	tradeanim_setup_givemon_scroll
+	tradeanim_show_givemon_data
+	tradeanim_do_givemon_scroll
+	tradeanim_wait_80
+	tradeanim_wait_96
+	tradeanim_poof
+	tradeanim_rocking_ball
+	tradeanim_enter_link_tube
+	tradeanim_wait_anim
+	tradeanim_bulge_through_tube
+	tradeanim_wait_anim
+	tradeanim_1e
+	tradeanim_give_trademon_sfx
+	tradeanim_tube_to_ot
+	tradeanim_sent_to_ot_text
+	tradeanim_scroll_out_right
+
+	tradeanim_ot_sends_text_1
+	tradeanim_ot_bids_farewell
+	tradeanim_wait_40
+	tradeanim_scroll_out_right
+	tradeanim_get_trademon_sfx
+	tradeanim_tube_to_player
+	tradeanim_enter_link_tube
+	tradeanim_drop_ball
+	tradeanim_exit_link_tube
+	tradeanim_wait_anim
+	tradeanim_show_getmon_data
+	tradeanim_poof
+	tradeanim_wait_anim
+	tradeanim_1d
+	tradeanim_animate_frontpic
+	tradeanim_wait_80_if_ot_egg
+	tradeanim_1e
+	tradeanim_take_care_of_text
+	tradeanim_scroll_out_right
+	tradeanim_end
+
+TradeAnimationPlayer2: ; 28f63
+	xor a
+	ld [wcf66], a
+	ld hl, wOTTrademonSenderName
+	ld de, wPlayerTrademonSenderName
+	call Function297ff
+	ld hl, wOTTrademonSpecies
+	ld de, wPlayerTrademonSpecies
+	call Function29814
+	ld de, .data_28f7e
+	jr Function28fa1
+
+.data_28f7e
+	tradeanim_ot_sends_text_2
+	tradeanim_ot_bids_farewell
+	tradeanim_wait_40
+	tradeanim_scroll_out_right
+	tradeanim_get_trademon_sfx
+	tradeanim_tube_to_ot
+	tradeanim_enter_link_tube
+	tradeanim_drop_ball
+	tradeanim_exit_link_tube
+	tradeanim_wait_anim
+	tradeanim_show_getmon_data
+	tradeanim_poof
+	tradeanim_wait_anim
+	tradeanim_1d
+	tradeanim_animate_frontpic
+	tradeanim_wait_180_if_ot_egg
+	tradeanim_1e
+	tradeanim_take_care_of_text
+	tradeanim_scroll_out_right
+
+	tradeanim_setup_givemon_scroll
+	tradeanim_show_givemon_data
+	tradeanim_do_givemon_scroll
+	tradeanim_wait_40
+	tradeanim_poof
+	tradeanim_rocking_ball
+	tradeanim_enter_link_tube
+	tradeanim_wait_anim
+	tradeanim_bulge_through_tube
+	tradeanim_wait_anim
+	tradeanim_1e
+	tradeanim_give_trademon_sfx
+	tradeanim_tube_to_player
+	tradeanim_sent_to_ot_text
+	tradeanim_scroll_out_right
+	tradeanim_end
+
+Function28fa1: ; 28fa1
+	ld hl, wTradeAnimPointer
+	ld [hl], e
+	inc hl
+	ld [hl], d
+	ld a, [hMapAnims]
+	push af
+	xor a
+	ld [hMapAnims], a
+	ld hl, VramState
+	ld a, [hl]
+	push af
+	res 0, [hl]
+	ld hl, Options
+	ld a, [hl]
+	push af
+	set 4, [hl]
+	call Function28fdb
+	ld a, [wcf66]
+	and a
+	jr nz, .anim_loop
+	ld de, MUSIC_EVOLUTION
+	call PlayMusic2
+.anim_loop
+	call DoTradeAnimation
+	jr nc, .anim_loop
+	pop af
+	ld [Options], a
+	pop af
+	ld [VramState], a
+	pop af
+	ld [hMapAnims], a
+	ret
+; 28fdb
+
+Function28fdb: ; 28fdb
+	xor a
+	ld [wJumptableIndex], a
+	call ClearBGPalettes
+	call ClearSprites
+	call ClearTileMap
+	call DisableLCD
+	call LoadFontsBattleExtra
+	callab Function8cf53
+	ld a, [hCGB]
+	and a
+	jr z, .asm_2900b
+	ld a, $1
+	ld [rVBK], a
+	ld hl, VTiles0
+	ld bc, sScratch - VTiles0
+	xor a
+	call ByteFill
+	ld a, $0
+	ld [rVBK], a
+
+.asm_2900b
+	hlbgcoord 0, 0
+	ld bc, sScratch - VBGMap0
+	ld a, " "
+	call ByteFill
+	ld hl, TradeGameBoyLZ
+	ld de, VTiles2 tile $31
+	call Decompress
+	ld hl, TradeArrowGFX
+	ld de, VTiles1 tile $6d
+	ld bc, $10
+	ld a, BANK(TradeArrowGFX)
+	call FarCopyBytes
+	ld hl, TradeArrowGFX + $10
+	ld de, VTiles1 tile $6e
+	ld bc, $10
+	ld a, BANK(TradeArrowGFX)
+	call FarCopyBytes
+	xor a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	callba Function4d7fd
+	call EnableLCD
+	call Function2982b
+	ld a, [wPlayerTrademonSpecies]
+	ld hl, wPlayerTrademonDVs
+	ld de, VTiles0
+	call Function29491
+	ld a, [wOTTrademonSpecies]
+	ld hl, wOTTrademonDVs
+	ld de, VTiles0 tile $31
+	call Function29491
+	ld a, [wPlayerTrademonSpecies]
+	ld de, wPlayerTrademonSpeciesName
+	call Function294a9
+	ld a, [wOTTrademonSpecies]
+	ld de, wOTTrademonSpeciesName
+	call Function294a9
+	call Function297ed
+	ret
+; 29082
+
+DoTradeAnimation: ; 29082
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .finished
+	call .DoTradeAnimCommand
+	callab Function8cf69
+	ld hl, wcf65
+	inc [hl]
+	call DelayFrame
+	and a
+	ret
+
+.finished
+	call LoadStandardFont
+	scf
+	ret
+; 290a0
+
+.DoTradeAnimCommand: ; 290a0
+	ld a, [wJumptableIndex]
+	ld e, a
+	ld d, 0
+	ld hl, .JumpTable
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 290af
+
+.JumpTable: ; 290af
+	dw TradeAnim_Next ; 00
+	dw TradeAnim_ShowGivemonData     ; 01
+	dw TradeAnim_ShowGetmonData     ; 02
+	dw TradeAnim_EnterLinkTube     ; 03
+	dw TradeAnim_04     ; 04
+	dw TradeAnim_ExitLinkTube     ; 05
+	dw TradeAnim_TubeToOT1     ; 06
+	dw TradeAnim_TubeToOT2     ; 07
+	dw TradeAnim_TubeToOT3     ; 08
+	dw TradeAnim_TubeToOT4     ; 09
+	dw TradeAnim_TubeToOT5     ; 0a
+	dw TradeAnim_TubeToOT6     ; 0b
+	dw TradeAnim_TubeToOT7     ; 0c
+	dw TradeAnim_TubeToOT8     ; 0d
+	dw TradeAnim_TubeToPlayer1     ; 0e
+	dw TradeAnim_TubeToPlayer2     ; 0f
+	dw TradeAnim_TubeToPlayer3     ; 10
+	dw TradeAnim_TubeToPlayer4     ; 11
+	dw TradeAnim_TubeToPlayer5     ; 12
+	dw TradeAnim_TubeToPlayer6     ; 13
+	dw TradeAnim_TubeToPlayer7     ; 14
+	dw TradeAnim_TubeToPlayer8     ; 15
+	dw TradeAnim_SentToOTText     ; 16
+	dw TradeAnim_OTBidsFarewell     ; 17
+	dw TradeAnim_TakeCareOfText     ; 18
+	dw TradeAnim_OTSendsText1     ; 19
+	dw TradeAnim_OTSendsText2     ; 1a
+	dw TradeAnim_SetupGivemonScroll     ; 1b
+	dw TradeAnim_DoGivemonScroll     ; 1c
+	dw TradeAnim_1d     ; 1d
+	dw TradeAnim_1e     ; 1e
+	dw TradeAnim_ScrollOutRight     ; 1f
+	dw TradeAnim_ScrollOutRight2     ; 20
+	dw TraideAnim_Wait80     ; 21
+	dw TraideAnim_Wait40     ; 22
+	dw TradeAnim_RockingBall     ; 23
+	dw TradeAnim_DropBall     ; 24
+	dw TradeAnim_WaitAnim     ; 25
+	dw TradeAnim_WaitAnim2     ; 26
+	dw TradeAnim_Poof     ; 27
+	dw TradeAnim_BulgeThroughTube     ; 28
+	dw TradeAnim_GiveTrademonSFX     ; 29
+	dw TradeAnim_GetTrademonSFX     ; 2a
+	dw TradeAnim_End     ; 2b
+	dw TradeAnim_AnimateFrontpic     ; 2c
+	dw TraideAnim_Wait96     ; 2d
+	dw TraideAnim_Wait80IfOTEgg     ; 2e
+	dw TraideAnim_Wait180IfOTEgg     ; 2f
+; 2910f
+
+NextTradeAnim: ; 2910f
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+; 29114
+
+TradeAnim_Next: ; 29114
+	ld hl, wTradeAnimPointer
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	ld a, [de]
+	ld [wJumptableIndex], a
+	inc de
+	ld [hl], d
+	dec hl
+	ld [hl], e
+	ret
+; 29123
+
+TradeAnim_End: ; 29123
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+; 29129
+
+TradeAnim_TubeToOT1: ; 29129
+	ld a, $ed
+	call Function292f6
+	ld a, [wc74c]
+	ld [wd265], a
+	xor a
+	depixel 5, 11, 4, 0
+	ld b, $0
+	jr Function2914e
+
+TradeAnim_TubeToPlayer1: ; 2913c
+	ld a, $ee
+	call Function292f6
+	ld a, [wc74d]
+	ld [wd265], a
+	ld a, $2
+	depixel 9, 18, 4, 4
+	ld b, $4
+
+Function2914e: ; 2914e
+	push bc
+	push de
+	push bc
+	push de
+	push af
+	call DisableLCD
+	callab Function8cf53
+	hlbgcoord 20, 3
+	ld bc, $c
+	ld a, $60
+	call ByteFill
+	pop af
+	call Function29281
+	xor a
+	ld [hSCX], a
+	ld a, $7
+	ld [hWX], a
+	ld a, $70
+	ld [hWY], a
+	call EnableLCD
+	call Function2985a
+	pop de
+	ld a, SPRITE_ANIM_INDEX_11
+	call _InitSpriteAnimStruct
+	ld hl, $b
+	add hl, bc
+	pop bc
+	ld [hl], b
+	pop de
+	ld a, SPRITE_ANIM_INDEX_12
+	call _InitSpriteAnimStruct
+	ld hl, $b
+	add hl, bc
+	pop bc
+	ld [hl], b
+	call WaitBGMap
+	ld b, SCGB_1B
+	call GetSGBLayout
+	ld a, $e4
+	call DmgToCgbBGPals
+	ld a, $d0
+	call Functioncf8
+	call NextTradeAnim
+	ld a, $5c
+	ld [wcf64], a
+	ret
+; 291af
+
+TradeAnim_TubeToOT2: ; 291af
+	call Function2981d
+	ld a, [hSCX]
+	add $2
+	ld [hSCX], a
+	cp $50
+	ret nz
+	ld a, $1
+	call Function29281
+	call NextTradeAnim
+	ret
+; 291c4
+
+TradeAnim_TubeToOT3: ; 291c4
+	call Function2981d
+	ld a, [hSCX]
+	add $2
+	ld [hSCX], a
+	cp $a0
+	ret nz
+	ld a, $2
+	call Function29281
+	call NextTradeAnim
+	ret
+; 291d9
+
+TradeAnim_TubeToOT4: ; 291d9
+	call Function2981d
+	ld a, [hSCX]
+	add $2
+	ld [hSCX], a
+	and a
+	ret nz
+	call NextTradeAnim
+	ret
+; 291e8
+
+TradeAnim_TubeToPlayer3: ; 291e8
+	call Function2981d
+	ld a, [hSCX]
+	sub $2
+	ld [hSCX], a
+	cp $b0
+	ret nz
+	ld a, $1
+	call Function29281
+	call NextTradeAnim
+	ret
+; 291fd
+
+TradeAnim_TubeToPlayer4: ; 291fd
+	call Function2981d
+	ld a, [hSCX]
+	sub $2
+	ld [hSCX], a
+	cp $60
+	ret nz
+	xor a
+	call Function29281
+	call NextTradeAnim
+	ret
+; 29211
+
+TradeAnim_TubeToPlayer5: ; 29211
+	call Function2981d
+	ld a, [hSCX]
+	sub $2
+	ld [hSCX], a
+	and a
+	ret nz
+	call NextTradeAnim
+	ret
+; 29220
+
+TradeAnim_TubeToOT6:
+TradeAnim_TubeToPlayer6: ; 29220
+	ld a, $80
+	ld [wcf64], a
+	call NextTradeAnim
+	ret
+; 29229
+
+TradeAnim_TubeToOT8:
+TradeAnim_TubeToPlayer8: ; 29229
+	call ClearBGPalettes
+	call ClearTileMap
+	call ClearSprites
+	call DisableLCD
+	callab Function8cf53
+	hlbgcoord 0, 0
+	ld bc, sScratch - VBGMap0
+	ld a, " "
+	call ByteFill
+	xor a
+	ld [hSCX], a
+	ld a, $90
+	ld [hWY], a
+	call EnableLCD
+	call Function2982b
+	call WaitBGMap
+	call Function297ed
+	call TradeAnim_Next
+	ret
+; 2925d
+
+TradeAnim_TubeToOT5:
+TradeAnim_TubeToOT7:
+TradeAnim_TubeToPlayer2:
+TradeAnim_TubeToPlayer7: ; 2925d
+	call Function2981d
+	ld hl, wcf64
+	ld a, [hl]
+	and a
+	jr z, .done
+	dec [hl]
+	ret
+
+.done
+	call NextTradeAnim
+	ret
+; 2926d
+
+TradeAnim_GiveTrademonSFX: ; 2926d
+	call TradeAnim_Next
+	ld de, SFX_GIVE_TRADEMON
+	call PlaySFX
+	ret
+; 29277
+
+TradeAnim_GetTrademonSFX: ; 29277
+	call TradeAnim_Next
+	ld de, SFX_GET_TRADEMON
+	call PlaySFX
+	ret
+; 29281
+
+Function29281: ; 29281
+	and 3
+	ld e, a
+	ld d, 0
+	ld hl, Jumptable_2928f
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 2928f
+
+Jumptable_2928f: ; 2928f
+	dw Function29297
+	dw Function292af
+	dw Function292be
+	dw Function29297
+; 29297
+
+Function29297: ; 29297
+	call Function297cf
+	hlcoord 9, 3
+	ld [hl], $5b
+	inc hl
+	ld bc, 10
+	ld a, $60
+	call ByteFill
+	hlcoord 3, 2
+	call Function292ec
+	ret
+; 292af
+
+Function292af: ; 292af
+	call Function297cf
+	hlcoord 0, 3
+	ld bc, SCREEN_WIDTH
+	ld a, $60
+	call ByteFill
+	ret
+; 292be
+
+Function292be: ; 292be
+	call Function297cf
+	hlcoord 0, 3
+	ld bc, $11
+	ld a, $60
+	call ByteFill
+	hlcoord 17, 3
+	ld a, $5d
+	ld [hl], a
+	ld a, $61
+	ld de, SCREEN_WIDTH
+	ld c, $3
+.loop
+	add hl, de
+	ld [hl], a
+	dec c
+	jr nz, .loop
+	add hl, de
+	ld a, $5f
+	ld [hld], a
+	ld a, $5b
+	ld [hl], a
+	hlcoord 10, 6
+	call Function292ec
+	ret
+; 292ec
+
+Function292ec: ; 292ec
+	ld de, TradeGameBoyTilemap
+	lb bc, 8, 6
+	call Function297db
+	ret
+; 292f6
+
+Function292f6: ; 292f6
+	push af
+	call ClearBGPalettes
+	call WaitTop
+	ld a, VBGMap1 / $100
+	ld [hBGMapAddress + 1], a
+	call ClearTileMap
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH
+	ld a, "─"
+	call ByteFill
+	hlcoord 0, 1
+	ld de, wLinkPlayer1Name
+	call PlaceString
+	ld hl, wLinkPlayer2Name
+	ld de, 0
+.find_name_end_loop
+	ld a, [hli]
+	cp "@"
+	jr z, .done
+	dec de
+	jr .find_name_end_loop
+
+.done
+	hlcoord 0, 4
+	add hl, de
+	ld de, wLinkPlayer2Name
+	call PlaceString
+	hlcoord 7, 2
+	ld bc, 6
+	pop af
+	call ByteFill
+	call WaitBGMap
+	call WaitTop
+	ld a, VBGMap0 / $100
+	ld [hBGMapAddress + 1], a
+	call ClearTileMap
+	ret
+; 29348
+
+TradeAnim_EnterLinkTube: ; 29348
+	call ClearTileMap
+	call WaitTop
+	ld a, $a0
+	ld [hSCX], a
+	call DelayFrame
+	hlcoord 8, 2
+	ld de, Tilemap_298f7
+	lb bc, 3, 12
+	call Function297db
+	call WaitBGMap
+	ld b, SCGB_1B
+	call GetSGBLayout
+	ld a, $e4
+	call DmgToCgbBGPals
+	ld de, $e4e4
+	call DmgToCgbObjPals
+	ld de, SFX_POTION
+	call PlaySFX
+	call NextTradeAnim
+	ret
+; 2937e
+
+TradeAnim_04: ; 2937e
+	ld a, [hSCX]
+	and a
+	jr z, .done
+	add $4
+	ld [hSCX], a
+	ret
+
+.done
+	ld c, 80
+	call DelayFrames
+	call TradeAnim_Next
+	ret
+; 29391
+
+TradeAnim_ExitLinkTube: ; 29391
+	ld a, [hSCX]
+	cp $a0
+	jr z, .asm_2939c
+	sub $4
+	ld [hSCX], a
+	ret
+
+.asm_2939c
+	call ClearTileMap
+	xor a
+	ld [hSCX], a
+	call TradeAnim_Next
+	ret
+; 293a6
+
+TradeAnim_SetupGivemonScroll: ; 293a6
+	ld a, $8f
+	ld [hWX], a
+	ld a, $88
+	ld [hSCX], a
+	ld a, $50
+	ld [hWY], a
+	call TradeAnim_Next
+	ret
+; 293b6
+
+TradeAnim_DoGivemonScroll: ; 293b6
+	ld a, [hWX]
+	cp $7
+	jr z, .done
+	sub $4
+	ld [hWX], a
+	ld a, [hSCX]
+	sub $4
+	ld [hSCX], a
+	ret
+
+.done
+	ld a, $7
+	ld [hWX], a
+	xor a
+	ld [hSCX], a
+	call TradeAnim_Next
+	ret
+; 293d2
+
+TradeAnim_1d: ; 293d2
+	ld a, $7
+	ld [hWX], a
+	ld a, $50
+	ld [hWY], a
+	call TradeAnim_Next
+	ret
+; 293de
+
+TradeAnim_1e: ; 293de
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	call TradeAnim_Next
+	ret
+; 293ea
+
+TradeAnim_ScrollOutRight: ; 293ea
+	call WaitTop
+	ld a, VBGMap1 / $100
+	ld [hBGMapAddress + 1], a
+	call WaitBGMap
+	ld a, $7
+	ld [hWX], a
+	xor a
+	ld [hWY], a
+	call DelayFrame
+	call WaitTop
+	ld a, VBGMap0 / $100
+	ld [hBGMapAddress + 1], a
+	call ClearTileMap
+	call NextTradeAnim
+	ret
+; 2940c
+
+TradeAnim_ScrollOutRight2: ; 2940c
+	ld a, [hWX]
+	cp $a1
+	jr nc, .done
+	add $4
+	ld [hWX], a
+	ret
+
+.done
+	ld a, VBGMap1 / $100
+	ld [hBGMapAddress + 1], a
+	call WaitBGMap
+	ld a, $7
+	ld [hWX], a
+	ld a, $90
+	ld [hWY], a
+	ld a, VBGMap0 / $100
+	ld [hBGMapAddress + 1], a
+	call TradeAnim_Next
+	ret
+; 2942e
+
+TradeAnim_ShowGivemonData: ; 2942e
+	call Function2951f
+	ld a, [wPlayerTrademonSpecies]
+	ld [CurPartySpecies], a
+	ld a, [wPlayerTrademonDVs]
+	ld [TempMonDVs], a
+	ld a, [wPlayerTrademonDVs + 1]
+	ld [TempMonDVs + 1], a
+	ld b, SCGB_1A
+	call GetSGBLayout
+	ld a, $e4
+	call DmgToCgbBGPals
+	call Function294bb
+
+	ld a, [wPlayerTrademonSpecies]
+	call GetCryIndex
+	jr c, .skip_cry
+	ld e, c
+	ld d, b
+	call PlayCryHeader
+.skip_cry
+
+	call TradeAnim_Next
+	ret
+; 29461
+
+TradeAnim_ShowGetmonData: ; 29461
+	call Function29549
+	ld a, [wOTTrademonSpecies]
+	ld [CurPartySpecies], a
+	ld a, [wOTTrademonDVs]
+	ld [TempMonDVs], a
+	ld a, [wOTTrademonDVs + 1]
+	ld [TempMonDVs + 1], a
+	ld b, SCGB_1A
+	call GetSGBLayout
+	ld a, $e4
+	call DmgToCgbBGPals
+	call Function294c0
+	call TradeAnim_Next
+	ret
+; 29487
+
+TradeAnim_AnimateFrontpic: ; 29487
+	callba Function4d81e
+	call TradeAnim_Next
+	ret
+; 29491
+
+Function29491: ; 29491
+	push de
+	push af
+	predef GetUnownLetter
+	pop af
+	ld [CurPartySpecies], a
+	ld [CurSpecies], a
+	call GetBaseData
+	pop de
+	predef GetFrontpic
+	ret
+; 294a9
+
+Function294a9: ; 294a9
+	push de
+	ld [wd265], a
+	call GetPokemonName
+	ld hl, StringBuffer1
+	pop de
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	ret
+; 294bb
+
+Function294bb: ; 294bb
+	ld de, VTiles0
+	jr Function294c3
+
+Function294c0: ; 294c0
+	ld de, VTiles0 tile $31
+
+Function294c3: ; 294c3
+	call DelayFrame
+	ld hl, VTiles2
+	lb bc, 10, $31
+	call Request2bpp
+	call WaitTop
+	call Function297cf
+	hlcoord 7, 2
+	xor a
+	ld [hFillBox], a
+	lb bc, 7, 7
+	predef FillBox
+	call WaitBGMap
+	ret
+; 294e7
+
+TraideAnim_Wait80: ; 294e7
+	ld c, 80
+	call DelayFrames
+	call TradeAnim_Next
+	ret
+; 294f0
+
+TraideAnim_Wait40: ; 294f0
+	ld c, 40
+	call DelayFrames
+	call TradeAnim_Next
+	ret
+; 294f9
+
+TraideAnim_Wait96: ; 294f9
+	ld c, 96
+	call DelayFrames
+	call TradeAnim_Next
+	ret
+; 29502
+
+TraideAnim_Wait80IfOTEgg: ; 29502
+	call IsOTTrademonEgg
+	ret nz
+	ld c, 80
+	call DelayFrames
+	ret
+; 2950c
+
+TraideAnim_Wait180IfOTEgg: ; 2950c
+	call IsOTTrademonEgg
+	ret nz
+	ld c, 180
+	call DelayFrames
+	ret
+; 29516
+
+IsOTTrademonEgg: ; 29516
+	call TradeAnim_Next
+	ld a, [wOTTrademonSpecies]
+	cp EGG
+	ret
+; 2951f
+Function2951f: ; 2951f
+	ld de, wPlayerTrademonSpecies
+	ld a, [de]
+	cp EGG
+	jr z, Function295a1
+	call Function29573
+	ld de, wPlayerTrademonSpecies
+	call Function295e3
+	ld de, wPlayerTrademonSpeciesName
+	call Function295ef
+	ld a, [wPlayerTrademonCaughtData]
+	ld de, wPlayerTrademonOTName
+	call Function295f6
+	ld de, PlayerScreens
+	call Function29611
+	call Function295d8
+	ret
+; 29549
+
+Function29549: ; 29549
+	ld de, wOTTrademonSpecies
+	ld a, [de]
+	cp EGG
+	jr z, Function295a1
+	call Function29573
+	ld de, wOTTrademonSpecies
+	call Function295e3
+	ld de, wOTTrademonSpeciesName
+	call Function295ef
+	ld a, [wOTTrademonCaughtData]
+	ld de, wOTTrademonOTName
+	call Function295f6
+	ld de, wOTTrademonID
+	call Function29611
+	call Function295d8
+	ret
+; 29573
+
+Function29573: ; 29573
+	call WaitTop
+	call Function297cf
+	ld a, VBGMap1 / $100
+	ld [hBGMapAddress + 1], a
+	hlcoord 3, 0
+	ld b, $6
+	ld c, $d
+	call TextBox
+	hlcoord 4, 0
+	ld de, String29591
+	call PlaceString
+	ret
+; 29591
+
+String29591: ; 29591
+	db   "─── №."
+	next ""
+	next "OT/"
+	next "<ID>№.@"
+; 295a1
+
+Function295a1: ; 295a1
+	call WaitTop
+	call Function297cf
+	ld a, VBGMap1 / $100
+	ld [hBGMapAddress + 1], a
+	hlcoord 3, 0
+	ld b, $6
+	ld c, $d
+	call TextBox
+	hlcoord 4, 2
+	ld de, String295c2
+	call PlaceString
+	call Function295d8
+	ret
+; 295c2
+
+String295c2: ; 295c2
+	db   "EGG"
+	next "OT/?????"
+	next "<ID>№.?????@"
+; 295d8
+
+Function295d8: ; 295d8
+	call WaitBGMap
+	call WaitTop
+	ld a, VBGMap0 / $100
+	ld [hBGMapAddress + 1], a
+	ret
+; 295e3
+
+Function295e3: ; 295e3
+	hlcoord 10, 0
+	lb bc, PRINTNUM_LEADINGZEROS | 1, 3
+	call PrintNum
+	ld [hl], " "
+	ret
+; 295ef
+
+Function295ef: ; 295ef
+	hlcoord 4, 2
+	call PlaceString
+	ret
+; 295f6
+
+Function295f6: ; 295f6
+	cp 3
+	jr c, .asm_295fb
+	xor a
+
+.asm_295fb
+	push af
+	hlcoord 7, 4
+	call PlaceString
+	inc bc
+	pop af
+	ld hl, Unknown_2960e
+	ld d, 0
+	ld e, a
+	add hl, de
+	ld a, [hl]
+	ld [bc], a
+	ret
+; 2960e
+
+Unknown_2960e: ; 2960e
+	db " ", "♂", "♀"
+; 29611
+
+Function29611: ; 29611
+	hlcoord 7, 6
+	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
+	call PrintNum
+	ret
+; 2961b
+
+TradeAnim_RockingBall: ; 2961b
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_0E
+	call _InitSpriteAnimStruct
+	call TradeAnim_Next
+	ld a, $20
+	ld [wcf64], a
+	ret
+; 2962c
+
+TradeAnim_DropBall: ; 2962c
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_0E
+	call _InitSpriteAnimStruct
+	ld hl, $b
+	add hl, bc
+	ld [hl], $1
+	ld hl, $7
+	add hl, bc
+	ld [hl], $dc
+	call TradeAnim_Next
+	ld a, $38
+	ld [wcf64], a
+	ret
+; 29649
+
+TradeAnim_Poof: ; 29649
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_0F
+	call _InitSpriteAnimStruct
+	call TradeAnim_Next
+	ld a, $10
+	ld [wcf64], a
+	ld de, SFX_BALL_POOF
+	call PlaySFX
+	ret
+; 29660
+
+TradeAnim_BulgeThroughTube: ; 29660
+	ld a, $e4
+	call Functioncf8
+	depixel 5, 11
+	ld a, SPRITE_ANIM_INDEX_10
+	call _InitSpriteAnimStruct
+	call TradeAnim_Next
+	ld a, $40
+	ld [wcf64], a
+	ret
+; 29676
+
+Function29676: ; 29676 (a:5676)
+	ld hl, $b
+	add hl, bc
+	ld e, [hl]
+	ld d, 0
+	ld hl, Jumptable_29686
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 29686
+
+Jumptable_29686: ; 29686 (a:5686)
+	dw Function2969a
+	dw Function296a4
+	dw Function296af
+	dw Function296bd
+	dw Function296cf
+	dw Function296dd
+	dw Function296f2
+; 2969a
+
+Function29694: ; 29694 (a:5694)
+	ld hl, $b
+	add hl, bc
+	inc [hl]
+	ret
+
+Function2969a: ; 2969a (a:569a)
+	call Function29694
+	ld hl, $c
+	add hl, bc
+	ld [hl], $80
+	ret
+
+Function296a4: ; 296a4 (a:56a4)
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	dec [hl]
+	and a
+	ret nz
+	call Function29694
+
+Function296af: ; 296af (a:56af)
+	ld hl, $4
+	add hl, bc
+	ld a, [hl]
+	cp $94
+	jr nc, .asm_296ba
+	inc [hl]
+	ret
+.asm_296ba
+	call Function29694
+
+Function296bd: ; 296bd (a:56bd)
+	ld hl, $5
+	add hl, bc
+	ld a, [hl]
+	cp $4c
+	jr nc, .asm_296c8
+	inc [hl]
+	ret
+.asm_296c8
+	ld hl, $
+	add hl, bc
+	ld [hl], $0
+	ret
+
+Function296cf: ; 296cf (a:56cf)
+	ld hl, $5
+	add hl, bc
+	ld a, [hl]
+	cp $2c
+	jr z, .asm_296da
+	dec [hl]
+	ret
+.asm_296da
+	call Function29694
+
+Function296dd: ; 296dd (a:56dd)
+	ld hl, $4
+	add hl, bc
+	ld a, [hl]
+	cp $58
+	jr z, .asm_296e8
+	dec [hl]
+	ret
+.asm_296e8
+	call Function29694
+	ld hl, $c
+	add hl, bc
+	ld [hl], $80
+	ret
+
+Function296f2: ; 296f2 (a:56f2)
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	dec [hl]
+	and a
+	ret nz
+	ld hl, $
+	add hl, bc
+	ld [hl], $0
+	ret
+; 29701 (a:5701)
+
+TradeAnim_SentToOTText: ; 29701
+	ld a, [wLinkMode]
+	cp LINK_TIMECAPSULE
+	jr z, .time_capsule
+	ld hl, UnknownText_0x29737
+	call PrintText
+	ld c, 189
+	call DelayFrames
+	ld hl, UnknownText_0x29732
+	call PrintText
+	call Function297c9
+	ld c, 128
+	call DelayFrames
+	call TradeAnim_Next
+	ret
+
+.time_capsule
+	ld hl, UnknownText_0x29732
+	call PrintText
+	call Function297c9
+	call TradeAnim_Next
+	ret
+; 29732
+
+UnknownText_0x29732: ; 0x29732
+	; was sent to @ .
+	text_jump UnknownText_0x1bc6e9
+	db "@"
+; 0x29737
+
+UnknownText_0x29737: ; 0x29737
+	;
+	text_jump UnknownText_0x1bc701
+	db "@"
+; 0x2973c
+
+TradeAnim_OTBidsFarewell: ; 2973c
+	ld hl, UnknownText_0x29752
+	call PrintText
+	call Function297c9
+	ld hl, UnknownText_0x29757
+	call PrintText
+	call Function297c9
+	call TradeAnim_Next
+	ret
+; 29752
+
+UnknownText_0x29752: ; 0x29752
+	; bids farewell to
+	text_jump UnknownText_0x1bc703
+	db "@"
+; 0x29757
+
+UnknownText_0x29757: ; 0x29757
+	; .
+	text_jump UnknownText_0x1bc719
+	db "@"
+; 0x2975c
+
+TradeAnim_TakeCareOfText: ; 2975c
+	call WaitTop
+	hlcoord 0, 10
+	ld bc, 8 * SCREEN_WIDTH
+	ld a, " "
+	call ByteFill
+	call WaitBGMap
+	ld hl, UnknownText_0x2977a
+	call PrintText
+	call Function297c9
+	call TradeAnim_Next
+	ret
+; 2977a
+
+UnknownText_0x2977a: ; 0x2977a
+	; Take good care of @ .
+	text_jump UnknownText_0x1bc71f
+	db "@"
+; 0x2977f
+
+TradeAnim_OTSendsText1: ; 2977f
+	ld hl, UnknownText_0x2979a
+	call PrintText
+	call Function297c9
+	ld hl, UnknownText_0x2979f
+	call PrintText
+	call Function297c9
+	ld c, 14
+	call DelayFrames
+	call TradeAnim_Next
+	ret
+; 2979a
+
+UnknownText_0x2979a: ; 0x2979a
+	; For @ 's @ ,
+	text_jump UnknownText_0x1bc739
+	db "@"
+; 0x2979f
+
+UnknownText_0x2979f: ; 0x2979f
+	; sends @ .
+	text_jump UnknownText_0x1bc74c
+	db "@"
+; 0x297a4
+
+TradeAnim_OTSendsText2: ; 297a4
+	ld hl, UnknownText_0x297bf
+	call PrintText
+	call Function297c9
+	ld hl, UnknownText_0x297c4
+	call PrintText
+	call Function297c9
+	ld c, 14
+	call DelayFrames
+	call TradeAnim_Next
+	ret
+; 297bf
+
+UnknownText_0x297bf: ; 0x297bf
+	; will trade @ @
+	text_jump UnknownText_0x1bc75e
+	db "@"
+; 0x297c4
+
+UnknownText_0x297c4: ; 0x297c4
+	; for @ 's @ .
+	text_jump UnknownText_0x1bc774
+	db "@"
+; 0x297c9
+
+Function297c9: ; 297c9
+	ld c, 80
+	call DelayFrames
+	ret
+; 297cf
+
+Function297cf: ; 297cf
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	ld a, " "
+	call ByteFill
+	ret
+; 297db
+
+Function297db: ; 297db
+.asm_297db
+	push bc
+	push hl
+.asm_297dd
+	ld a, [de]
+	inc de
+	ld [hli], a
+	dec c
+	jr nz, .asm_297dd
+	pop hl
+	ld bc, SCREEN_WIDTH
+	add hl, bc
+	pop bc
+	dec b
+	jr nz, .asm_297db
+	ret
+; 297ed
+
+Function297ed: ; 297ed
+	ld a, [hSGB]
+	and a
+	ld a, $e4
+	jr z, .asm_297f6
+	ld a, $f0
+
+.asm_297f6
+	call Functioncf8
+	ld a, $e4
+	call DmgToCgbBGPals
+	ret
+; 297ff
+
+Function297ff: ; 297ff
+	push de
+	ld de, wLinkPlayer1Name
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	pop hl
+	ld de, wLinkPlayer2Name
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	ret
+; 29814
+
+Function29814: ; 29814
+	ld a, [hl]
+	ld [wc74c], a
+	ld a, [de]
+	ld [wc74d], a
+	ret
+; 2981d
+
+Function2981d: ; 2981d
+	ld a, [wcf65]
+	and $7
+	ret nz
+	ld a, [rBGP]
+	xor $3c
+	call DmgToCgbBGPals
+	ret
+; 2982b
+
+Function2982b: ; 2982b
+	call DelayFrame
+	ld de, TradeBallGFX
+	ld hl, VTiles0 tile $62
+	lb bc, BANK(TradeBallGFX), $6
+	call Request2bpp
+	ld de, TradePoofGFX
+	ld hl, VTiles0 tile $68
+	lb bc, BANK(TradePoofGFX), $c
+	call Request2bpp
+	ld de, TradeCableGFX
+	ld hl, VTiles0 tile $74
+	lb bc, BANK(TradeCableGFX), $4
+	call Request2bpp
+	xor a
+	ld hl, wc300
+	ld [hli], a
+	ld [hl], $62
+	ret
+; 2985a
+
+Function2985a: ; 2985a
+	call DelayFrame
+	ld e, $3
+	callab Function8e83f
+	ld de, TradeBubbleGFX
+	ld hl, VTiles0 tile $72
+	lb bc, BANK(TradeBubbleGFX), $4
+	call Request2bpp
+	xor a
+	ld hl, wc300
+	ld [hli], a
+	ld [hl], $62
+	ret
+; 29879
+
+TradeAnim_WaitAnim: ; 29879
+	ld hl, wcf64
+	ld a, [hl]
+	and a
+	jr z, .done
+	dec [hl]
+	ret
+
+.done
+	call TradeAnim_Next
+	ret
+; 29886
+
+TradeAnim_WaitAnim2: ; 29886
+	ld hl, wcf64
+	ld a, [hl]
+	and a
+	jr z, .done
+	dec [hl]
+	ret
+
+.done
+	call TradeAnim_Next
+	ret
+; 29893
+
+
+DebugTrade: ; 29893
+; This function is unreferenced.
+; It was meant for use in Japanese versions, so the
+; constant used for copy length was changed by accident.
+
+	ld hl, Unknown_298b5
+
+	ld a, [hli]
+	ld [wPlayerTrademonSpecies], a
+	ld de, wPlayerTrademonSenderName
+	ld c, 11 + 2 ; jp: 6 + 2
+.loop1
+	ld a, [hli]
+	ld [de], a
+	inc de
+	dec c
+	jr nz, .loop1
+
+	ld a, [hli]
+	ld [wOTTrademonSpecies], a
+	ld de, wOTTrademonSenderName
+	ld c, 11 + 2 ; jp: 6 + 2
+.loop2
+	ld a, [hli]
+	ld [de], a
+	inc de
+	dec c
+	jr nz, .loop2
+	ret
+; 298b5
+
+Unknown_298b5: ; 298b5
+	db VENUSAUR, "ゲーフり@@", $23, $01 ; GAME FREAK
+	db CHARIZARD, "クりーチャ@", $56, $04 ; Creatures Inc.
+; 298c7
+
+
+TradeGameBoyTilemap: ; 298c7
+; 6x8
+	db $31, $32, $32, $32, $32, $33
+	db $34, $35, $36, $36, $37, $38
+	db $34, $39, $3a, $3a, $3b, $38
+	db $3c, $3d, $3e, $3e, $3f, $40
+	db $41, $42, $43, $43, $44, $45
+	db $46, $47, $43, $48, $49, $4a
+	db $41, $43, $4b, $4c, $4d, $4e
+	db $4f, $50, $50, $50, $51, $52
+; 297f7
+
+Tilemap_298f7: ; 297f7
+; 12x3
+	db $43, $55, $56, $53, $53, $53, $53, $53, $53, $53, $53, $53
+	db $43, $57, $58, $54, $54, $54, $54, $54, $54, $54, $54, $54
+	db $43, $59, $5a, $43, $43, $43, $43, $43, $43, $43, $43, $43
+; 2991b
+
+TradeArrowGFX:  INCBIN "gfx/trade/arrow.2bpp"
+TradeCableGFX:  INCBIN "gfx/trade/cable.2bpp"
+TradeBubbleGFX: INCBIN "gfx/trade/bubble.2bpp"
+TradeGameBoyLZ: INCBIN "gfx/trade/game_boy.2bpp.lz"
+TradeBallGFX:   INCBIN "gfx/trade/ball.2bpp"
+TradePoofGFX:   INCBIN "gfx/trade/poof.2bpp"
--- /dev/null
+++ b/engine/trainer_card.asm
@@ -1,0 +1,619 @@
+TrainerCard: ; 25105
+	ld a, [VramState]
+	push af
+	xor a
+	ld [VramState], a
+	ld hl, Options
+	ld a, [hl]
+	push af
+	set 4, [hl]
+	call Function2513b
+.asm_25117
+	call UpdateTime
+	call JoyTextDelay
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .asm_25132
+	ld a, [hJoyLast]
+	and B_BUTTON
+	jr nz, .asm_25132
+	call Function2518e
+	call DelayFrame
+	jr .asm_25117
+.asm_25132
+	pop af
+	ld [Options], a
+	pop af
+	ld [VramState], a
+	ret
+
+Function2513b: ; 2513b (9:513b)
+	call ClearBGPalettes
+	call ClearSprites
+	call ClearTileMap
+	call DisableLCD
+
+	callba Function8833e
+
+	ld hl, CardRightCornerGFX
+	ld de, VTiles2 tile $1c
+	ld bc, 1 tiles
+	ld a, BANK(CardRightCornerGFX)
+	call FarCopyBytes
+
+	ld hl, CardStatusGFX
+	ld de, VTiles2 tile $29
+	ld bc, $56 tiles
+	ld a, BANK(CardStatusGFX)
+	call FarCopyBytes
+
+	call Function25299
+
+	hlcoord 0, 8
+	ld d, $6
+	call Function253b0
+
+	call EnableLCD
+	call WaitBGMap
+	ld b, SCGB_15
+	call GetSGBLayout
+	call SetPalettes
+	call WaitBGMap
+	ld hl, wJumptableIndex
+	xor a
+rept 3
+	ld [hli], a
+endr
+	ld [hl], a
+	ret
+
+Function2518e: ; 2518e (9:518e)
+	ld a, [wJumptableIndex]
+	ld e, a
+	ld d, $0
+	ld hl, Jumptable_2519d
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+
+Jumptable_2519d: ; 2519d (9:519d)
+	dw Function251b6
+	dw Function251d7
+	dw Function251f4
+	dw Function25221
+	dw Function2524c
+	dw Function25279
+	dw Function251b0
+
+
+Function251ab: ; 251ab (9:51ab)
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+
+Function251b0: ; 251b0 (9:51b0)
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+Function251b6: ; 251b6 (9:51b6)
+	call ClearSprites
+	hlcoord 0, 8
+	ld d, $6
+	call Function253b0
+	call WaitBGMap
+	ld de, CardStatusGFX
+	ld hl, VTiles2 tile $29
+	lb bc, BANK(CardStatusGFX), $56
+	call Request2bpp
+	call Function2530a
+	call Function251ab
+	ret
+
+Function251d7: ; 251d7 (9:51d7)
+	call Function25415
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_RIGHT | A_BUTTON
+	jr nz, .pressed_right_a
+	ret
+
+.pressed_right_a
+	ld a, $2
+	ld [wJumptableIndex], a
+	ret
+; 251e9 (9:51e9)
+
+Function251e9: ; 251e9
+	ld a, [KantoBadges]
+	and a
+	ret z
+
+	ld a, $4
+	ld [wJumptableIndex], a
+	ret
+; 251f4
+
+Function251f4: ; 251f4 (9:51f4)
+	call ClearSprites
+	hlcoord 0, 8
+	ld d, $6
+	call Function253b0
+	call WaitBGMap
+	ld de, LeaderGFX
+	ld hl, VTiles2 tile $29
+	lb bc, BANK(LeaderGFX), $56
+	call Request2bpp
+	ld de, BadgeGFX
+	ld hl, VTiles0 tile $00
+	lb bc, BANK(BadgeGFX), $2c
+	call Request2bpp
+	call Function2536c
+	call Function251ab
+	ret
+
+Function25221: ; 25221 (9:5221)
+	ld hl, Unknown_254c9
+	call Function25438
+	ld hl, hJoyLast
+	ld a, [hl]
+	and A_BUTTON
+	jr nz, Function25246
+	ld a, [hl]
+	and D_LEFT
+	jr nz, .asm_25235
+	ret
+.asm_25235
+	ld a, $0
+	ld [wJumptableIndex], a
+	ret
+; 2523b (9:523b)
+
+Function2523b: ; 2523b
+	ld a, [KantoBadges]
+	and a
+	ret z
+	ld a, $4
+	ld [wJumptableIndex], a
+	ret
+; 25246
+
+Function25246: ; 25246
+	ld a, $6
+	ld [wJumptableIndex], a
+	ret
+
+Function2524c: ; 2524c (9:524c)
+	call ClearSprites
+	hlcoord 0, 8
+	ld d, $6
+	call Function253b0
+	call WaitBGMap
+	ld de, LeaderGFX2
+	ld hl, VTiles2 tile $29
+	lb bc, BANK(LeaderGFX2), $56
+	call Request2bpp
+	ld de, BadgeGFX2
+	ld hl, VTiles0 tile $00
+	lb bc, BANK(BadgeGFX2), $2c
+	call Request2bpp
+	call Function2536c
+	call Function251ab
+	ret
+
+Function25279: ; 25279 (9:5279)
+	ld hl, Unknown_254c9
+	call Function25438
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_LEFT
+	jr nz, .left
+	ld a, [hl]
+	and D_RIGHT
+	jr nz, .right
+	ret
+
+.left
+	ld a, $2
+	ld [wJumptableIndex], a
+	ret
+
+.right
+	ld a, $0
+	ld [wJumptableIndex], a
+	ret
+
+Function25299: ; 25299 (9:5299)
+	hlcoord 0, 0
+	ld d, $5
+	call Function253b0
+	hlcoord 2, 2
+	ld de, String_252ec
+	call PlaceString
+	hlcoord 2, 4
+	ld de, Tilemap_252f9
+	call Function253a8
+	hlcoord 7, 2
+	ld de, PlayerName
+	call PlaceString
+	hlcoord 5, 4
+	ld de, PlayerID
+	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
+	call PrintNum
+	hlcoord 7, 6
+	ld de, Money
+	lb bc, PRINTNUM_MONEY | 3, 6
+	call PrintNum
+	hlcoord 1, 3
+	ld de, Tilemap_252fc
+	call Function253a8
+	hlcoord 14, 1
+	lb bc, 5, 7
+	xor a
+	ld [hFillBox], a
+	predef FillBox
+	ret
+; 252ec (9:52ec)
+
+String_252ec: ; 252ec
+	db   "NAME/"
+	next ""
+	next "MONEY@"
+
+Tilemap_252f9: ; 252f9
+	db $27, $28, $ff ; ID NO
+
+Tilemap_252fc: ; 252fc
+	db $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $26, $ff ; ____________>
+; 2530a
+
+Function2530a: ; 2530a (9:530a)
+	hlcoord 2, 10
+	ld de, String_2534c
+	call PlaceString
+	hlcoord 10, 15
+	ld de, String_2535c
+	call PlaceString
+	ld hl, PokedexCaught
+	ld b, $20
+	call CountSetBits
+	ld de, wd265
+	hlcoord 15, 10
+	lb bc, 1, 3
+	call PrintNum
+	call Function25415
+	hlcoord 2, 8
+	ld de, Tilemap_25366
+	call Function253a8
+	ld a, [StatusFlags] ; pokedex
+	bit 0, a
+	ret nz
+	hlcoord 1, 9
+	lb bc, 2, 17
+	call ClearBox
+	ret
+; 2534c (9:534c)
+
+String_2534c: ; 2534c
+	db   "#DEX"
+	next "PLAY TIME"
+	db   "@"
+
+String_2535b: ; 2535b
+	db "@"
+
+String_2535c: ; 2535c
+	db "  BADGES▶@"
+
+Tilemap_25366: ; 25366
+	db $29, $2a, $2b, $2c, $2d, $ff
+; 2536c
+
+Function2536c: ; 2536c (9:536c)
+	hlcoord 2, 8
+	ld de, Tilemap_253a2
+	call Function253a8
+	hlcoord 2, 10
+	ld a, $29
+	ld c, $4
+.asm_2537c
+	call Function253f4
+rept 4
+	inc hl
+endr
+	dec c
+	jr nz, .asm_2537c
+	hlcoord 2, 13
+	ld a, $51
+	ld c, $4
+.asm_2538d
+	call Function253f4
+rept 4
+	inc hl
+endr
+	dec c
+	jr nz, .asm_2538d
+	xor a
+	ld [wcf64], a
+	ld hl, Unknown_254c9
+	call Function25448
+	ret
+; 253a2 (9:53a2)
+
+Tilemap_253a2: ; 253a2
+	db $79, $7a, $7b, $7c, $7d, $ff ; "BADGES"
+; 253a8
+
+Function253a8: ; 253a8 (9:53a8)
+	ld a, [de]
+	cp $ff
+	ret z
+	ld [hli], a
+	inc de
+	jr Function253a8
+
+Function253b0: ; 253b0 (9:53b0)
+	ld e, $14
+.asm_253b2
+	ld a, $23
+	ld [hli], a
+	dec e
+	jr nz, .asm_253b2
+	ld a, $23
+	ld [hli], a
+	ld e, $11
+	ld a, $7f
+.asm_253bf
+	ld [hli], a
+	dec e
+	jr nz, .asm_253bf
+	ld a, $1c
+	ld [hli], a
+	ld a, $23
+	ld [hli], a
+.asm_253c9
+	ld a, $23
+	ld [hli], a
+	ld e, $12
+	ld a, $7f
+.asm_253d0
+	ld [hli], a
+	dec e
+	jr nz, .asm_253d0
+	ld a, $23
+	ld [hli], a
+	dec d
+	jr nz, .asm_253c9
+	ld a, $23
+	ld [hli], a
+	ld a, $24
+	ld [hli], a
+	ld e, $11
+	ld a, $7f
+.asm_253e4
+	ld [hli], a
+	dec e
+	jr nz, .asm_253e4
+	ld a, $23
+	ld [hli], a
+	ld e, $14
+.asm_253ed
+	ld a, $23
+	ld [hli], a
+	dec e
+	jr nz, .asm_253ed
+	ret
+
+Function253f4: ; 253f4 (9:53f4)
+	push de
+	push hl
+	ld [hli], a
+	inc a
+	ld [hli], a
+	inc a
+	ld [hli], a
+	inc a
+	ld [hli], a
+	inc a
+	ld de, $11
+	add hl, de
+	ld [hli], a
+	inc a
+	ld [hli], a
+	inc a
+	ld [hli], a
+	inc a
+	ld de, $11
+	add hl, de
+	ld [hli], a
+	inc a
+	ld [hli], a
+	inc a
+	ld [hli], a
+	inc a
+	pop hl
+	pop de
+	ret
+
+Function25415: ; 25415 (9:5415)
+	hlcoord 11, 12
+	ld de, GameTimeHours
+	lb bc, 2, 4
+	call PrintNum
+	inc hl
+	ld de, GameTimeMinutes
+	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+	call PrintNum
+	ld a, [hVBlankCounter]
+	and $1f
+	ret nz
+	hlcoord 15, 12
+	ld a, [hl]
+	xor $51
+	ld [hl], a
+	ret
+
+Function25438: ; 25438 (9:5438)
+	ld a, [hVBlankCounter]
+	and $7
+	ret nz
+	ld a, [wcf64]
+	inc a
+	and $7
+	ld [wcf64], a
+	jr Function25448
+
+Function25448: ; 25448 (9:5448)
+; copy flag array pointer
+	ld a, [hli]
+	ld e, a
+	ld a, [hli]
+; get flag array
+	ld d, a
+	ld a, [de]
+	ld c, a
+	ld de, Sprites
+	ld b, 8
+.loop
+	srl c
+	push bc
+	jr nc, .skip_badge
+	push hl
+	ld a, [hli] ; y
+	ld b, a
+	ld a, [hli] ; x
+	ld c, a
+	ld a, [hli] ; pal
+	ld [wcf66], a
+	ld a, [wcf64]
+	add l
+	ld l, a
+	ld a, 0
+	adc h
+	ld h, a
+	ld a, [hl]
+	ld [wcf65], a
+	call Function2547b
+	pop hl
+.skip_badge
+	ld bc, $b ; 3 + 2 * 4
+	add hl, bc
+	pop bc
+	dec b
+	jr nz, .loop
+	ret
+
+Function2547b: ; 2547b (9:547b)
+	ld a, [wcf65]
+	and $80
+	jr nz, .xflip
+	ld hl, .facing1
+	jr .loop
+.xflip
+	ld hl, .facing2
+.loop
+	ld a, [hli]
+	cp $ff
+	ret z
+	add b
+	ld [de], a
+	inc de
+
+	ld a, [hli]
+	add c
+	ld [de], a
+	inc de
+
+	ld a, [wcf65]
+	and $7f
+	add [hl]
+	ld [de], a
+	inc hl
+	inc de
+
+	ld a, [wcf66]
+	add [hl]
+	ld [de], a
+	inc hl
+	inc de
+	jr .loop
+; 254a7 (9:54a7)
+
+.facing1: ; 254a7
+	; y, x, tile, OAM attributes
+	db 0, 0, 0, 0
+	db 0, 8, 1, 0
+	db 8, 0, 2, 0
+	db 8, 8, 3, 0
+	db -1
+
+.facing2: ; 254b8
+	db 0, 0, 1, X_FLIP
+	db 0, 8, 0, X_FLIP
+	db 8, 0, 3, X_FLIP
+	db 8, 8, 2, X_FLIP
+	db -1
+
+Unknown_254c9: ; 254c9
+; Template OAM data for each badge on the trainer card.
+; Format:
+	; y, x, palette
+	; cycle 1: face tile, in1 tile, in2 tile, in3 tile
+	; cycle 2: face tile, in1 tile, in2 tile, in3 tile
+
+	dw JohtoBadges
+
+	; Zephyrbadge
+	db $68, $18, 0
+	db $00, $20, $24, $20 | $80
+	db $00, $20, $24, $20 | $80
+
+	; Hivebadge
+	db $68, $38, 0
+	db $04, $20, $24, $20 | $80
+	db $04, $20, $24, $20 | $80
+
+	; Plainbadge
+	db $68, $58, 0
+	db $08, $20, $24, $20 | $80
+	db $08, $20, $24, $20 | $80
+
+	; Fogbadge
+	db $68, $78, 0
+	db $0c, $20, $24, $20 | $80
+	db $0c, $20, $24, $20 | $80
+
+	; Mineralbadge
+	db $80, $38, 0
+	db $10, $20, $24, $20 | $80
+	db $10, $20, $24, $20 | $80
+
+	; Stormbadge
+	db $80, $18, 0
+	db $14, $20, $24, $20 | $80
+	db $14, $20, $24, $20 | $80
+
+	; Glacierbadge
+	db $80, $58, 0
+	db $18, $20, $24, $20 | $80
+	db $18, $20, $24, $20 | $80
+
+	; Risingbadge
+	; X-flips on alternate cycles.
+	db $80, $78, 0
+	db $1c, $20, $24, $20 | $80
+	db $1c | $80, $20, $24, $20 | $80
+; 25523
+
+CardStatusGFX: INCBIN "gfx/misc/card_status.2bpp"
+
+LeaderGFX:  INCBIN "gfx/misc/leaders.w24.2bpp"
+LeaderGFX2: INCBIN "gfx/misc/leaders.w24.2bpp"
+BadgeGFX:   INCBIN "gfx/misc/badges.2bpp"
+BadgeGFX2:  INCBIN "gfx/misc/badges.2bpp"
+
+CardRightCornerGFX: INCBIN "gfx/misc/card_right_corner.2bpp"
--- /dev/null
+++ b/engine/variables.asm
@@ -1,0 +1,150 @@
+_GetVarAction:: ; 80648 (20:4648)
+	ld a, c
+	cp NUM_VARS
+	jr c, .valid
+	xor a
+.valid
+	ld c, a
+	ld b, 0
+	ld hl, .VarActionTable
+rept 3
+	add hl, bc
+endr
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	inc hl
+	ld b, [hl]
+	ld a, b
+	and RETVAR_EXECUTE
+	jr nz, .call
+	ld a, b
+	and RETVAR_ADDR_DE
+	ret nz
+	ld a, [de]
+	jr .loadstringbuffer2
+
+.call
+	call _de_
+	ret
+
+.loadstringbuffer2: ; 8066c (20:466c)
+	ld de, StringBuffer2
+	ld [de], a
+	ret
+; 80671 (20:4671)
+
+.VarActionTable: ; 80671
+; $00: copy [de] to StringBuffer2
+; $40: return address in de
+; $80: call function
+	dwb StringBuffer2,         RETVAR_STRBUF2
+	dwb PartyCount,            RETVAR_STRBUF2
+	dwb .BattleResult,         RETVAR_EXECUTE
+	dwb BattleType,            RETVAR_ADDR_DE
+	dwb TimeOfDay,             RETVAR_STRBUF2
+	dwb .CountCaughtMons,      RETVAR_EXECUTE
+	dwb .CountSeenMons,        RETVAR_EXECUTE
+	dwb .CountBadges,          RETVAR_EXECUTE
+	dwb PlayerState,           RETVAR_ADDR_DE
+	dwb .PlayerFacing,         RETVAR_EXECUTE
+	dwb hHours,                RETVAR_STRBUF2
+	dwb .DayOfWeek,            RETVAR_EXECUTE
+	dwb MapGroup,              RETVAR_STRBUF2
+	dwb MapNumber,             RETVAR_STRBUF2
+	dwb .UnownCaught,          RETVAR_EXECUTE
+	dwb wPermission,           RETVAR_STRBUF2
+	dwb .BoxFreeSpace,         RETVAR_EXECUTE
+	dwb wBugContestMinsRemaining,                 RETVAR_STRBUF2
+	dwb XCoord,                RETVAR_STRBUF2
+	dwb YCoord,                RETVAR_STRBUF2
+	dwb wSpecialPhoneCallID,   RETVAR_STRBUF2
+	dwb wcf64,                 RETVAR_STRBUF2
+	dwb wKurtApricornQuantity, RETVAR_STRBUF2
+	dwb wCurrentCaller,        RETVAR_ADDR_DE
+	dwb wBlueCardBalance,      RETVAR_ADDR_DE
+	dwb wBuenasPassword,       RETVAR_ADDR_DE
+	dwb wdc58,                 RETVAR_STRBUF2
+	dwb NULL,                  RETVAR_STRBUF2
+; 806c5
+
+.CountCaughtMons: ; 806c5
+; Caught mons.
+	ld hl, PokedexCaught
+	ld b, EndPokedexCaught - PokedexCaught
+	call CountSetBits
+	ld a, [wd265]
+	jp .loadstringbuffer2
+; 806d3
+
+.CountSeenMons: ; 806d3
+; Seen mons.
+	ld hl, PokedexSeen
+	ld b, EndPokedexSeen - PokedexSeen
+	call CountSetBits
+	ld a, [wd265]
+	jp .loadstringbuffer2
+; 806e1
+
+.CountBadges: ; 806e1
+; Number of owned badges.
+	ld hl, Badges
+	ld b, 2
+	call CountSetBits
+	ld a, [wd265]
+	jp .loadstringbuffer2
+; 806ef
+
+.PlayerFacing: ; 806ef
+; The direction the player is facing.
+	ld a, [PlayerDirection]
+	and $c
+	rrca
+	rrca
+	jp .loadstringbuffer2
+; 806f9
+
+.DayOfWeek: ; 806f9
+; The day of the week.
+	call GetWeekday
+	jp .loadstringbuffer2
+; 806ff
+
+.UnownCaught: ; 806ff
+; Number of unique Unown caught.
+	call .count
+	ld a, b
+	jp .loadstringbuffer2
+
+.count
+	ld hl, UnownDex
+	ld b, 0
+.loop
+	ld a, [hli]
+	and a
+	ret z
+	inc b
+	ld a, b
+	cp 26
+	jr c, .loop
+	ret
+; 80715
+
+.BoxFreeSpace: ; 80715
+; Remaining slots in the current box.
+	ld a, BANK(sBoxCount)
+	call GetSRAMBank
+	ld hl, sBoxCount
+	ld a, MONS_PER_BOX
+	sub [hl]
+	ld b, a
+	call CloseSRAM
+	ld a, b
+	jp .loadstringbuffer2
+; 80728
+
+.BattleResult: ; 80728
+	ld a, [wBattleResult]
+	and $3f
+	jp .loadstringbuffer2
+; 80730
--- /dev/null
+++ b/engine/wildmons.asm
@@ -1,0 +1,1057 @@
+LoadWildMonData: ; 29ff8
+	call _GrassWildmonLookup
+	jr c, .copy
+	ld hl, wd25a
+	xor a
+	ld [hli], a
+	ld [hli], a
+	ld [hl], a
+	jr .done_copy
+.copy
+	inc hl
+	inc hl
+	ld de, wd25a
+	ld bc, $3
+	call CopyBytes
+.done_copy
+	call _WaterWildmonLookup
+	ld a, $0
+	jr nc, .no_copy
+	inc hl
+	inc hl
+	ld a, [hl]
+.no_copy
+	ld [wd25d], a
+	ret
+
+Function2a01f: ; 2a01f
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	xor a
+	call ByteFill
+	ld a, e
+	and a
+	jr nz, .kanto
+	decoord 0, 0
+	ld hl, JohtoGrassWildMons
+	call Function2a052
+	ld hl, JohtoWaterWildMons
+	call Function2a06e
+	call Function2a0b7
+	call Function2a0cf
+	ret
+
+.kanto
+	decoord 0, 0
+	ld hl, KantoGrassWildMons
+	call Function2a052
+	ld hl, KantoWaterWildMons
+	jp Function2a06e
+; 2a052
+
+Function2a052: ; 2a052
+.loop
+	ld a, [hl]
+	cp $ff
+	ret z
+	push hl
+	ld a, [hli]
+	ld b, a
+	ld a, [hli]
+	ld c, a
+rept 3
+	inc hl
+endr
+	ld a, $15
+	call Function2a088
+	jr nc, .next
+	ld [de], a
+	inc de
+
+.next
+	pop hl
+	ld bc, $2f
+	add hl, bc
+	jr .loop
+; 2a06e
+
+Function2a06e: ; 2a06e
+.loop
+	ld a, [hl]
+	cp $ff
+	ret z
+	push hl
+	ld a, [hli]
+	ld b, a
+	ld a, [hli]
+	ld c, a
+	inc hl
+	ld a, $3
+	call Function2a088
+	jr nc, .next
+	ld [de], a
+	inc de
+
+.next
+	pop hl
+	ld bc, 9
+	add hl, bc
+	jr .loop
+; 2a088
+
+Function2a088: ; 2a088
+	inc hl
+.loop
+	push af
+	ld a, [wd265]
+	cp [hl]
+	jr z, .found
+rept 2
+	inc hl
+endr
+	pop af
+	dec a
+	jr nz, .loop
+	and a
+	ret
+
+.found
+	pop af
+	jp Function2a09c
+; 2a09c
+
+Function2a09c: ; 2a09c
+	push de
+	call GetWorldMapLocation
+	ld c, a
+	hlcoord 0, 0
+	ld de, SCREEN_WIDTH * SCREEN_HEIGHT
+.loop
+	ld a, [hli]
+	cp c
+	jr z, .found
+	dec de
+	ld a, e
+	or d
+	jr nz, .loop
+	ld a, c
+	pop de
+	scf
+	ret
+
+.found
+	pop de
+	and a
+	ret
+; 2a0b7
+
+Function2a0b7: ; 2a0b7
+	ld a, [wRoamMon1Species]
+	ld b, a
+	ld a, [wd265]
+	cp b
+	ret nz
+	ld a, [wRoamMon1MapGroup]
+	ld b, a
+	ld a, [wRoamMon1MapNumber]
+	ld c, a
+	call Function2a09c
+	ret nc
+	ld [de], a
+	inc de
+	ret
+; 2a0cf
+
+Function2a0cf: ; 2a0cf
+	ld a, [wRoamMon2Species]
+	ld b, a
+	ld a, [wd265]
+	cp b
+	ret nz
+	ld a, [wRoamMon2MapGroup]
+	ld b, a
+	ld a, [wRoamMon2MapNumber]
+	ld c, a
+	call Function2a09c
+	ret nc
+	ld [de], a
+	inc de
+	ret
+; 2a0e7
+
+TryWildEncounter:: ; 2a0e7
+; Try to trigger a wild encounter.
+	call .EncounterRate
+	jr nc, .no_battle
+	call ChooseWildEncounter
+	jr nz, .no_battle
+	call CheckRepelEffect
+	jr nc, .no_battle
+	xor a
+	ret
+
+.no_battle
+	xor a ; BATTLETYPE_NORMAL
+	ld [TempWildMonSpecies], a
+	ld [BattleType], a
+	ld a, 1
+	and a
+	ret
+; 2a103
+
+.EncounterRate: ; 2a103
+	call GetMapEncounterRate
+	call ApplyMusicEffectOnEncounterRate
+	call ApplyCleanseTagEffectOnEncounterRate
+	call Random
+	cp b
+	ret
+; 2a111
+
+GetMapEncounterRate: ; 2a111
+	ld hl, wd25a
+	call CheckOnWater
+	ld a, 3
+	jr z, .ok
+	ld a, [TimeOfDay]
+.ok
+	ld c, a
+	ld b, 0
+	add hl, bc
+	ld b, [hl]
+	ret
+; 2a124
+
+ApplyMusicEffectOnEncounterRate:: ; 2a124
+; Pokemon March and Ruins of Alph signal double encounter rate.
+; Pokemon Lullaby halves encounter rate.
+	ld a, [wMapMusic]
+	cp MUSIC_POKEMON_MARCH
+	jr z, .double
+	cp MUSIC_RUINS_OF_ALPH_RADIO
+	jr z, .double
+	cp MUSIC_POKEMON_LULLABY
+	ret nz
+	srl b
+	ret
+
+.double
+	sla b
+	ret
+; 2a138
+
+ApplyCleanseTagEffectOnEncounterRate:: ; 2a138
+; Cleanse Tag halves encounter rate.
+	ld hl, PartyMon1Item
+	ld de, PARTYMON_STRUCT_LENGTH
+	ld a, [PartyCount]
+	ld c, a
+.loop
+	ld a, [hl]
+	cp CLEANSE_TAG
+	jr z, .cleansetag
+	add hl, de
+	dec c
+	jr nz, .loop
+	ret
+
+.cleansetag
+	srl b
+	ret
+; 2a14f
+
+ChooseWildEncounter: ; 2a14f
+	call LoadWildMonDataPointer
+	jp nc, .nowildbattle
+	call CheckEncounterRoamMon
+	jp c, .startwildbattle
+
+rept 3
+	inc hl
+endr
+	call CheckOnWater
+	ld de, .WaterMonTable
+	jr z, .watermon
+rept 2
+	inc hl
+endr
+	ld a, [TimeOfDay]
+	ld bc, $e
+	call AddNTimes
+	ld de, .GrassMonTable
+
+.watermon
+; hl contains the pointer to the wild mon data, let's save that to the stack
+	push hl
+.randomloop
+	call Random
+	cp 100
+	jr nc, .randomloop
+	inc a ; 1 <= a <= 100
+	ld b, a
+	ld h, d
+	ld l, e
+; This next loop chooses which mon to load up.
+.prob_bracket_loop
+	ld a, [hli]
+	cp b
+	jr nc, .got_it
+	inc hl
+	jr .prob_bracket_loop
+
+.got_it
+	ld c, [hl]
+	ld b, 0
+	pop hl
+	add hl, bc ; this selects our mon
+	ld a, [hli]
+	ld b, a
+; If the Pokemon is encountered by surfing, we need to give the levels some variety.
+	call CheckOnWater
+	jr nz, .ok
+; Check if we buff the wild mon, and by how much.
+	call Random
+	cp 35 percent
+	jr c, .ok
+	inc b
+	cp 65 percent
+	jr c, .ok
+	inc b
+	cp 85 percent
+	jr c, .ok
+	inc b
+	cp 95 percent
+	jr c, .ok
+	inc b
+; Store the level
+.ok
+	ld a, b
+	ld [CurPartyLevel], a
+	ld b, [hl]
+	; ld a, b
+	call ValidateTempWildMonSpecies
+	jr c, .nowildbattle
+
+	ld a, b ; This is in the wrong place.
+	cp UNOWN
+	jr nz, .done
+
+	ld a, [UnlockedUnowns]
+	and a
+	jr z, .nowildbattle
+
+.done
+	jr .loadwildmon
+
+.nowildbattle
+	ld a, 1
+	and a
+	ret
+
+.loadwildmon
+	ld a, b
+	ld [TempWildMonSpecies], a
+
+.startwildbattle
+	xor a
+	ret
+; 2a1cb
+
+.GrassMonTable: ; 2a1cb
+	db 30,  $0 ; 30% chance
+	db 60,  $2 ; 30% chance
+	db 80,  $4 ; 20% chance
+	db 90,  $6 ; 10% chance
+	db 95,  $8 ;  5% chance
+	db 99,  $a ;  4% chance
+	db 100, $c ;  1% chance
+; 2a1d9
+
+.WaterMonTable: ; 2a1d9
+	db 60,  $0 ; 60% chance
+	db 90,  $2 ; 30% chance
+	db 100, $4 ; 10% chance
+; 2a1df
+
+CheckRepelEffect:: ; 2a1df
+; If there is no active Repel, there's no need to be here.
+	ld a, [wRepelEffect]
+	and a
+	jr z, .encounter
+; Get the first Pokemon in your party that isn't fainted.
+	ld hl, PartyMon1HP
+	ld bc, PARTYMON_STRUCT_LENGTH - 1
+.loop
+	ld a, [hli]
+	or [hl]
+	jr nz, .ok
+	add hl, bc
+	jr .loop
+
+.ok
+; to PartyMonLevel
+rept 4
+	dec hl
+endr
+
+	ld a, [CurPartyLevel]
+	cp [hl]
+	jr nc, .encounter
+	and a
+	ret
+
+.encounter
+	scf
+	ret
+; 2a200
+
+LoadWildMonDataPointer: ; 2a200
+	call CheckOnWater
+	jr z, _WaterWildmonLookup
+
+_GrassWildmonLookup: ; 2a205
+	ld hl, SwarmGrassWildMons
+	ld bc, GRASS_WILDDATA_LENGTH
+	call _SwarmWildmonCheck
+	ret c
+	ld hl, JohtoGrassWildMons
+	ld de, KantoGrassWildMons
+	call _JohtoWildmonCheck
+	ld bc, GRASS_WILDDATA_LENGTH
+	jr _NormalWildmonOK
+
+_WaterWildmonLookup: ; 2a21d
+	ld hl, SwarmWaterWildMons
+	ld bc, WATER_WILDDATA_LENGTH
+	call _SwarmWildmonCheck
+	ret c
+	ld hl, JohtoWaterWildMons
+	ld de, KantoWaterWildMons
+	call _JohtoWildmonCheck
+	ld bc, WATER_WILDDATA_LENGTH
+	jr _NormalWildmonOK
+
+_JohtoWildmonCheck
+	call IsInJohto
+	and a
+	ret z
+	ld h, d
+	ld l, e
+	ret
+
+_SwarmWildmonCheck
+	call CopyCurrMapDE
+	push hl
+	ld hl, SwarmFlags
+	bit 2, [hl]
+	pop hl
+	jr z, .CheckYanma
+	ld a, [wdfcc]
+	cp d
+	jr nz, .CheckYanma
+	ld a, [wdfcd]
+	cp e
+	jr nz, .CheckYanma
+	call LookUpWildmonsForMapDE
+	jr nc, _NoSwarmWildmon
+	scf
+	ret
+
+.CheckYanma
+	push hl
+	ld hl, SwarmFlags
+	bit 3, [hl]
+	pop hl
+	jr z, _NoSwarmWildmon
+	ld a, [wdc5a]
+	cp d
+	jr nz, _NoSwarmWildmon
+	ld a, [wdc5b]
+	cp e
+	jr nz, _NoSwarmWildmon
+	call LookUpWildmonsForMapDE
+	jr nc, _NoSwarmWildmon
+	scf
+	ret
+
+_NoSwarmWildmon
+	and a
+	ret
+
+_NormalWildmonOK
+	call CopyCurrMapDE
+	jr LookUpWildmonsForMapDE
+; 2a27f
+
+CopyCurrMapDE: ; 2a27f
+	ld a, [MapGroup]
+	ld d, a
+	ld a, [MapNumber]
+	ld e, a
+	ret
+; 2a288
+
+LookUpWildmonsForMapDE: ; 2a288
+	push hl
+	ld a, [hl]
+	inc a
+	jr z, .nope
+	ld a, d
+	cp [hl]
+	jr nz, .next
+	inc hl
+	ld a, e
+	cp [hl]
+	jr z, .yup
+
+.next
+	pop hl
+	add hl, bc
+	jr LookUpWildmonsForMapDE
+
+.nope
+	pop hl
+	and a
+	ret
+
+.yup
+	pop hl
+	scf
+	ret
+; 2a2a0
+
+
+InitRoamMons: ; 2a2a0
+; initialize wRoamMon structs
+
+; species
+	ld a, RAIKOU
+	ld [wRoamMon1Species], a
+	ld a, ENTEI
+	ld [wRoamMon2Species], a
+;	ld a, SUICUNE
+;	ld [wRoamMon3Species], a
+
+; level
+	ld a, 40
+	ld [wRoamMon1Level], a
+	ld [wRoamMon2Level], a
+;	ld [wRoamMon3Level], a
+
+; raikou starting map
+	ld a, GROUP_ROUTE_42
+	ld [wRoamMon1MapGroup], a
+	ld a, MAP_ROUTE_42
+	ld [wRoamMon1MapNumber], a
+
+; entei starting map
+	ld a, GROUP_ROUTE_37
+	ld [wRoamMon2MapGroup], a
+	ld a, MAP_ROUTE_37
+	ld [wRoamMon2MapNumber], a
+
+; suicune starting map
+;	ld a, GROUP_ROUTE_38
+;	ld [wRoamMon3MapGroup], a
+;	ld a, MAP_ROUTE_38
+;	ld [wRoamMon3MapNumber], a
+
+; hp
+	xor a ; generate new stats
+	ld [wRoamMon1HP], a
+	ld [wRoamMon2HP], a
+;	ld [wRoamMon3HP], a
+
+	ret
+; 2a2ce
+
+
+CheckEncounterRoamMon: ; 2a2ce
+	push hl
+; Don't trigger an encounter if we're on water.
+	call CheckOnWater
+	jr z, .DontEncounterRoamMon
+; Load the current map group and number to de
+	call CopyCurrMapDE
+; Randomly select a beast.
+	call Random
+	cp 100 ; 25/64 chance
+	jr nc, .DontEncounterRoamMon
+	and %00000011 ; Of that, a 3/4 chance.  Running total: 75/256, or around 29.3%.
+	jr z, .DontEncounterRoamMon
+	dec a ; 1/3 chance that it's Entei, 1/3 chance that it's Raikou
+; Compare its current location with yours
+	ld hl, wRoamMon1MapGroup
+	ld c, a
+	ld b, 0
+	ld a, 7 ; length of the RoamMon struct
+	call AddNTimes
+	ld a, d
+	cp [hl]
+	jr nz, .DontEncounterRoamMon
+	inc hl
+	ld a, e
+	cp [hl]
+	jr nz, .DontEncounterRoamMon
+; We've decided to take on a beast, so stage its information for battle.
+rept 3
+	dec hl
+endr
+	ld a, [hli]
+	ld [TempWildMonSpecies], a
+	ld a, [hl]
+	ld [CurPartyLevel], a
+	ld a, BATTLETYPE_ROAMING
+	ld [BattleType], a
+
+	pop hl
+	scf
+	ret
+
+.DontEncounterRoamMon
+	pop hl
+	and a
+	ret
+; 2a30d
+
+
+UpdateRoamMons: ; 2a30d
+	ld a, [wRoamMon1MapGroup]
+	cp GROUP_N_A
+	jr z, .SkipRaikou
+	ld b, a
+	ld a, [wRoamMon1MapNumber]
+	ld c, a
+	call .Update
+	ld a, b
+	ld [wRoamMon1MapGroup], a
+	ld a, c
+	ld [wRoamMon1MapNumber], a
+
+.SkipRaikou
+	ld a, [wRoamMon2MapGroup]
+	cp GROUP_N_A
+	jr z, .SkipEntei
+	ld b, a
+	ld a, [wRoamMon2MapNumber]
+	ld c, a
+	call .Update
+	ld a, b
+	ld [wRoamMon2MapGroup], a
+	ld a, c
+	ld [wRoamMon2MapNumber], a
+
+.SkipEntei
+	ld a, [wRoamMon3MapGroup]
+	cp GROUP_N_A
+	jr z, .SkipSuicune
+	ld b, a
+	ld a, [wRoamMon3MapNumber]
+	ld c, a
+	call .Update
+	ld a, b
+	ld [wRoamMon3MapGroup], a
+	ld a, c
+	ld [wRoamMon3MapNumber], a
+
+.SkipSuicune
+	jp _BackUpMapIndices
+; 2a355
+
+
+.Update: ; 2a355
+	ld hl, RoamMaps
+.loop
+; Are we at the end of the table?
+	ld a, [hl]
+	cp -1
+	ret z
+; Is this the correct entry?
+	ld a, b
+	cp [hl]
+	jr nz, .next
+	inc hl
+	ld a, c
+	cp [hl]
+	jr z, .yes
+; We don't have the correct entry yet, so let's continue.  A 0 terminates each entry.
+.next
+	ld a, [hli]
+	and a
+	jr nz, .next
+	jr .loop
+
+; We have the correct entry now, so let's choose a random map from it.
+.yes
+	inc hl
+	ld d, h
+	ld e, l
+.update_loop
+	ld h, d
+	ld l, e
+; Choose which map to warp to.
+	call Random
+	and $1f ; 1/8n chance it moves to a completely random map, where n is the number of roaming connections from the current map.
+	jr z, JumpRoamMon
+	and 3
+	cp [hl]
+	jr nc, .update_loop ; invalid index, try again
+	inc hl
+	ld c, a
+	ld b, $0
+rept 2
+	add hl, bc
+endr
+	ld a, [wdfe7]
+	cp [hl]
+	jr nz, .done
+	inc hl
+	ld a, [wdfe6]
+	cp [hl]
+	jr z, .update_loop
+	dec hl
+
+.done
+	ld a, [hli]
+	ld b, a
+	ld c, [hl]
+	ret
+
+JumpRoamMons: ; 2a394
+	ld a, [wRoamMon1MapGroup]
+	cp GROUP_N_A
+	jr z, .SkipRaikou
+	call JumpRoamMon
+	ld a, b
+	ld [wRoamMon1MapGroup], a
+	ld a, c
+	ld [wRoamMon1MapNumber], a
+.SkipRaikou
+
+	ld a, [wRoamMon2MapGroup]
+	cp GROUP_N_A
+	jr z, .SkipEntei
+	call JumpRoamMon
+	ld a, b
+	ld [wRoamMon2MapGroup], a
+	ld a, c
+	ld [wRoamMon2MapNumber], a
+.SkipEntei
+
+	ld a, [wRoamMon3MapGroup]
+	cp GROUP_N_A
+	jr z, .SkipSuicune
+	call JumpRoamMon
+	ld a, b
+	ld [wRoamMon3MapGroup], a
+	ld a, c
+	ld [wRoamMon3MapNumber], a
+.SkipSuicune
+
+	jp _BackUpMapIndices
+
+JumpRoamMon: ; 2a3cd
+.loop
+	ld hl, RoamMaps
+.innerloop1 ; This loop is completely unnecessary.
+	call Random ; Choose a random number
+	and $f ; Take the lower nybble only.  This gives a number between 0 and 15.
+	cp $10 ; If the number is greater than or equal to 16, loop back and try again.
+	jr nc, .innerloop1 ; I'm sure you can guess why this check is bogus.
+	inc a
+	ld b, a
+.innerloop2 ; Loop to get hl to the address of the chosen roam map.
+	dec b
+	jr z, .ok
+.innerloop3 ; Loop to skip the current roam map, which is terminated by a 0.
+	ld a, [hli]
+	and a
+	jr nz, .innerloop3
+	jr .innerloop2
+; Check to see if the selected map is the one the player is currently in.  If so, try again.
+.ok
+	ld a, [MapGroup]
+	cp [hl]
+	jr nz, .done
+	inc hl
+	ld a, [MapNumber]
+	cp [hl]
+	jr z, .loop
+	dec hl
+; Return the map group and number in bc.
+.done
+	ld a, [hli]
+	ld b, a
+	ld c, [hl]
+	ret
+; 2a3f6
+
+_BackUpMapIndices: ; 2a3f6
+	ld a, [wdfe4]
+	ld [wdfe6], a
+	ld a, [wdfe5]
+	ld [wdfe7], a
+	ld a, [MapNumber]
+	ld [wdfe4], a
+	ld a, [MapGroup]
+	ld [wdfe5], a
+	ret
+; 2a40f
+
+RoamMaps: ; 2a40f
+; Maps that roaming monsters can be on,
+; and possible maps they can jump to.
+; Notably missing are Route 40 and
+; Route 41, which are water routes.
+	roam_map ROUTE_29, 2, ROUTE_30, ROUTE_46
+	roam_map ROUTE_30, 2, ROUTE_29, ROUTE_31
+	roam_map ROUTE_31, 3, ROUTE_30, ROUTE_32, ROUTE_36
+	roam_map ROUTE_32, 3, ROUTE_36, ROUTE_31, ROUTE_33
+	roam_map ROUTE_33, 2, ROUTE_32, ROUTE_34
+	roam_map ROUTE_34, 2, ROUTE_33, ROUTE_35
+	roam_map ROUTE_35, 2, ROUTE_34, ROUTE_36
+	roam_map ROUTE_36, 4, ROUTE_35, ROUTE_31, ROUTE_32, ROUTE_37
+	roam_map ROUTE_37, 3, ROUTE_36, ROUTE_38, ROUTE_42
+	roam_map ROUTE_38, 3, ROUTE_37, ROUTE_39, ROUTE_42
+	roam_map ROUTE_39, 1, ROUTE_38
+	roam_map ROUTE_42, 4, ROUTE_43, ROUTE_44, ROUTE_37, ROUTE_38
+	roam_map ROUTE_43, 2, ROUTE_42, ROUTE_44
+	roam_map ROUTE_44, 3, ROUTE_42, ROUTE_43, ROUTE_45
+	roam_map ROUTE_45, 2, ROUTE_44, ROUTE_46
+	roam_map ROUTE_46, 2, ROUTE_45, ROUTE_29
+	db -1
+; 2a4a0
+
+ValidateTempWildMonSpecies: ; 2a4a0
+; Due to a development oversight, this function is called with the wild Pokemon's level, not its species, in a.
+	and a
+	jr z, .nowildmon ; = 0
+	cp NUM_POKEMON + 1 ; 252
+	jr nc, .nowildmon ; >= 252
+	and a ; 1 <= Species <= 251
+	ret
+
+.nowildmon
+	scf
+	ret
+; 2a4ab
+
+RandomPhoneRareWildMon: ; 2a4ab
+; Related to the phone?
+	callba GetCallerLocation
+	ld d, b
+	ld e, c
+	ld hl, JohtoGrassWildMons
+	ld bc, GRASS_WILDDATA_LENGTH
+	call LookUpWildmonsForMapDE
+	jr c, .GetGrassmon
+	ld hl, KantoGrassWildMons
+	call LookUpWildmonsForMapDE
+	jr nc, .done
+
+.GetGrassmon
+	push hl
+	ld bc, 5 + 4 * 2 ; Location of the level of the 5th wild Pokemon in that map
+	add hl, bc
+	ld a, [TimeOfDay]
+	ld bc, 7 * 2
+	call AddNTimes
+.randloop1
+	call Random
+	and $3
+	jr z, .randloop1
+	dec a
+	ld c, a
+	ld b, $0
+rept 2
+	add hl, bc
+endr
+; We now have the pointer to one of the last (rarest) three wild Pokemon found in that area.
+	inc hl
+	ld c, [hl] ; Contains the species index of this rare Pokemon
+	pop hl
+	ld de, 5 + 0 * 2
+	add hl, de
+	inc hl ; Species index of the most common Pokemon on that route
+	ld b, 4
+.loop2
+	ld a, [hli]
+	cp c ; Compare this most common Pokemon with the rare one stored in c.
+	jr z, .done
+	inc hl
+	dec b
+	jr nz, .loop2
+; This Pokemon truly is rare.
+	push bc
+	dec c
+	ld a, c
+	call CheckSeenMon
+	pop bc
+	jr nz, .done
+; Since we haven't seen it, have the caller tell us about it.
+	ld de, StringBuffer1
+	call CopyName1
+	ld a, c
+	ld [wd265], a
+	call GetPokemonName
+	ld hl, UnknownText_0x2a51a
+	call PrintText
+	xor a
+	ld [ScriptVar], a
+	ret
+
+.done
+	ld a, $1
+	ld [ScriptVar], a
+	ret
+; 2a51a
+
+UnknownText_0x2a51a: ; 0x2a51a
+	; I just saw some rare @  in @ . I'll call you if I see another rare #MON, OK?
+	text_jump UnknownText_0x1bd34b
+	db "@"
+; 0x2a51f
+
+RandomPhoneWildMon: ; 2a51f
+	callba GetCallerLocation
+	ld d, b
+	ld e, c
+	ld hl, JohtoGrassWildMons
+	ld bc, GRASS_WILDDATA_LENGTH
+	call LookUpWildmonsForMapDE
+	jr c, .ok
+	ld hl, KantoGrassWildMons
+	call LookUpWildmonsForMapDE
+
+.ok
+	ld bc, 5 + 0 * 2
+	add hl, bc
+	ld a, [TimeOfDay]
+	inc a
+	ld bc, 7 * 2
+.loop
+	dec a
+	jr z, .done
+	add hl, bc
+	jr .loop
+
+.done
+	call Random
+	and $3
+	ld c, a
+	ld b, $0
+rept 2
+	add hl, bc
+endr
+	inc hl
+	ld a, [hl]
+	ld [wd265], a
+	call GetPokemonName
+	ld hl, StringBuffer1
+	ld de, StringBuffer4
+	ld bc, PKMN_NAME_LENGTH
+	jp CopyBytes
+; 2a567
+
+RandomPhoneMon: ; 2a567
+; Get a random monster owned by the trainer who's calling.
+	callba GetCallerLocation
+	ld hl, TrainerGroups
+	ld a, d
+	dec a
+	ld c, a
+	ld b, 0
+rept 2
+	add hl, bc
+endr
+	ld a, BANK(TrainerGroups)
+	call GetFarHalfword
+
+.skip_trainer
+	dec e
+	jr z, .skipped
+.skip
+	ld a, BANK(Trainers)
+	call GetFarByte
+	inc hl
+	cp -1
+	jr nz, .skip
+	jr .skip_trainer
+.skipped
+
+.skip_name
+	ld a, BANK(Trainers)
+	call GetFarByte
+	inc hl
+	cp "@"
+	jr nz, .skip_name
+
+	ld a, BANK(Trainers)
+	call GetFarByte
+	inc hl
+	ld bc, 2
+	cp 0
+	jr z, .got_mon_length
+	ld bc, 2 + NUM_MOVES
+	cp 1
+	jr z, .got_mon_length
+	ld bc, 2 + 1
+	cp 2
+	jr z, .got_mon_length
+	ld bc, 2 + 1 + NUM_MOVES
+.got_mon_length
+
+	ld e, 0
+	push hl
+.count_mon
+	inc e
+	add hl, bc
+	ld a, BANK(Trainers)
+	call GetFarByte
+	cp -1
+	jr nz, .count_mon
+	pop hl
+
+.rand
+	call Random
+	and 7
+	cp e
+	jr nc, .rand
+
+	inc a
+.get_mon
+	dec a
+	jr z, .got_mon
+	add hl, bc
+	jr .get_mon
+.got_mon
+
+	inc hl ; species
+	ld a, BANK(Trainers)
+	call GetFarByte
+	ld [wd265], a
+	call GetPokemonName
+	ld hl, StringBuffer1
+	ld de, StringBuffer4
+	ld bc, PKMN_NAME_LENGTH
+	jp CopyBytes
+; 2a5e9
+
+
+JohtoGrassWildMons: ; 0x2a5e9
+INCLUDE "data/wild/johto_grass.asm"
+
+JohtoWaterWildMons: ; 0x2b11d
+INCLUDE "data/wild/johto_water.asm"
+
+KantoGrassWildMons: ; 0x2b274
+INCLUDE "data/wild/kanto_grass.asm"
+
+KantoWaterWildMons: ; 0x2b7f7
+INCLUDE "data/wild/kanto_water.asm"
+
+SwarmGrassWildMons: ; 0x2b8d0
+INCLUDE "data/wild/swarm_grass.asm"
+
+SwarmWaterWildMons: ; 0x2b92f
+INCLUDE "data/wild/swarm_water.asm"
--- a/event/buena.asm
+++ b/event/buena.asm
@@ -11,8 +11,8 @@
 	add $2
 	ld [wMenuBorderRightCoord], a
 	call BackUpTiles
-	call Function1e5d ; menu
-	callba Function4ae5e
+	call DoNthMenu ; menu
+	callba Buena_ExitMenu
 	ld b, $0
 	ld a, [MenuSelection]
 	ld c, a
@@ -66,7 +66,7 @@
 
 SpecialBuenaPrize: ; 8afd4
 	xor a
-	ld [wd0e4], a
+	ld [wMenuScrollPosition], a
 	ld a, $1
 	ld [MenuSelection], a
 	call Function8b0d6
@@ -250,7 +250,7 @@
 	xor a
 	ld [wcf76], a
 	ld [hBGMapMode], a
-	call Function352f
+	call InitScrollingMenu
 	call UpdateSprites
 	call HandleScrollingMenu
 	ld a, [MenuSelection]
--- a/event/bug_contest_judging.asm
+++ b/event/bug_contest_judging.asm
@@ -2,24 +2,24 @@
 	call ContestScore
 	callba MobileFn_105f79
 	call Function13819
-	ld a, [wd00a]
+	ld a, [wBugContestThirdPlacePersonID]
 	call LoadContestantName
-	ld a, [wd00b]
-	ld [wd265], a
+	ld a, [wBugContestThirdPlaceMon]
+	ld [wNamedObjectIndexBuffer], a
 	call GetPokemonName
 	ld hl, BugContest_ThirdPlaceText
 	call PrintText
-	ld a, [EndFlypoint]
+	ld a, [wBugContestSecondPlacePersonID]
 	call LoadContestantName
-	ld a, [MovementBuffer]
-	ld [wd265], a
+	ld a, [wBugContestSecondPlaceMon]
+	ld [wNamedObjectIndexBuffer], a
 	call GetPokemonName
 	ld hl, BugContest_SecondPlaceText
 	call PrintText
-	ld a, [wd002]
+	ld a, [wBugContestFirstPlacePersonID]
 	call LoadContestantName
-	ld a, [wd003]
-	ld [wd265], a
+	ld a, [wBugContestFirstPlaceMon]
+	ld [wNamedObjectIndexBuffer], a
 	call GetPokemonName
 	ld hl, BugContest_FirstPlaceText
 	call PrintText
@@ -85,7 +85,7 @@
 
 ; If a = 0, get your name.
 	dec a
-	jr z, .done
+	jr z, .player
 ; Find the pointer for the trainer class of the Bug Catching Contestant whose ID is in a.
 	ld c, a
 	ld b, 0
@@ -102,13 +102,13 @@
 ; Save hl and bc for later.
 	push hl
 	push bc
-; Get the Trainer Class name and copy it into wd016.
+; Get the Trainer Class name and copy it into wBugContestWinnerName.
 	callab GetTrainerClassName
 	ld hl, StringBuffer1
-	ld de, wd016
+	ld de, wBugContestWinnerName
 	ld bc, TRAINER_CLASS_NAME_LENGTH
 	call CopyBytes
-	ld hl, wd016
+	ld hl, wBugContestWinnerName
 ; Delete the trailing terminator and replace it with a space.
 .next
 	ld a, [hli]
@@ -127,15 +127,15 @@
 	ld a, [hl]
 	ld b, a
 	callab GetTrainerName
-; Append the name to wd016.
+; Append the name to wBugContestWinnerName.
 	ld hl, StringBuffer1
 	pop de
 	ld bc, NAME_LENGTH - 1
 	jp CopyBytes
 
-.done
+.player
 	ld hl, PlayerName
-	ld de, wd016
+	ld de, wBugContestWinnerName
 	ld bc, NAME_LENGTH
 	jp CopyBytes
 ; 13783
@@ -216,7 +216,7 @@
 ; 13807
 
 Function13807: ; 13807
-	ld hl, wd00a
+	ld hl, wBugContestThirdPlacePersonID
 	ld de, -4
 	ld b, 3
 .loop
@@ -232,9 +232,9 @@
 ; 13819
 
 Function13819: ; 13819
-	call Function13833
-	call Function138b0
-	ld hl, wd00e
+	call ClearContestResults
+	call ComputeAIContestantScores
+	ld hl, wBugContestTempPersonID
 	ld a, 1
 	ld [hli], a
 	ld a, [wContestMon]
@@ -243,12 +243,12 @@
 	ld [hli], a
 	ld a, [hMultiplicand]
 	ld [hl], a
-	call Function1383e
+	call DetermineContestWinners
 	ret
 ; 13833
 
-Function13833: ; 13833
-	ld hl, wd002
+ClearContestResults: ; 13833
+	ld hl, wBugContestFirstPlacePersonID
 	ld b, 12
 	xor a
 .loop
@@ -258,69 +258,66 @@
 	ret
 ; 1383e
 
-Function1383e: ; 1383e
-	ld de, wd010
-	ld hl, wd004
+DetermineContestWinners: ; 1383e
+	ld de, wBugContestTempScore
+	ld hl, wBugContestFirstPlaceScore
 	ld c, 2
 	call StringCmp
-	jr c, .next
-	ld hl, EndFlypoint
-	ld de, wd00a
+	jr c, .not_first_place
+	ld hl, wBugContestSecondPlacePersonID
+	ld de, wBugContestThirdPlacePersonID
 	ld bc, 4
 	call CopyBytes
-	ld hl, wd002
-	ld de, EndFlypoint
+	ld hl, wBugContestFirstPlacePersonID
+	ld de, wBugContestSecondPlacePersonID
 	ld bc, 4
 	call CopyBytes
-	ld hl, wd002
-	call Function138a0
+	ld hl, wBugContestFirstPlacePersonID
+	call CopyTempContestant
 	jr .done
 
-.next
-	ld de, wd010
-	ld hl, wd008
+.not_first_place
+	ld de, wBugContestTempScore
+	ld hl, wBugContestSecondPlaceScore
 	ld c, 2
 	call StringCmp
-	jr c, .next2
-	ld hl, EndFlypoint
-	ld de, wd00a
+	jr c, .not_second_place
+	ld hl, wBugContestSecondPlacePersonID
+	ld de, wBugContestThirdPlacePersonID
 	ld bc, 4
 	call CopyBytes
-	ld hl, EndFlypoint
-	call Function138a0
+	ld hl, wBugContestSecondPlacePersonID
+	call CopyTempContestant
 	jr .done
 
-.next2
-	ld de, wd010
-	ld hl, wd00c
+.not_second_place
+	ld de, wBugContestTempScore
+	ld hl, wBugContestThirdPlaceScore
 	ld c, 2
 	call StringCmp
 	jr c, .done
-	ld hl, wd00a
-	call Function138a0
+	ld hl, wBugContestThirdPlacePersonID
+	call CopyTempContestant
 
 .done
 	ret
 ; 138a0
 
-Function138a0: ; 138a0
-	ld de, wd00e
+CopyTempContestant: ; 138a0
+; Could've just called CopyBytes.
+	ld de, wBugContestTempPersonID
+rept 3
 	ld a, [de]
 	inc de
 	ld [hli], a
+endr
 	ld a, [de]
 	inc de
-	ld [hli], a
-	ld a, [de]
-	inc de
-	ld [hli], a
-	ld a, [de]
-	inc de
 	ld [hl], a
 	ret
 ; 138b0
 
-Function138b0: ; 138b0
+ComputeAIContestantScores: ; 138b0
 	ld e, 0
 .loop
 	push de
@@ -331,7 +328,7 @@
 rept 2
 	inc a
 endr
-	ld [wd00e], a
+	ld [wBugContestTempPersonID], a
 	dec a
 	ld c, a
 	ld b, 0
@@ -356,7 +353,7 @@
 	add hl, bc
 endr
 	ld a, [hli]
-	ld [wd00f], a
+	ld [wBugContestTempMon], a
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
@@ -366,11 +363,11 @@
 	ld b, 0
 	add hl, bc
 	ld a, h
-	ld [wd010], a
+	ld [wBugContestTempScore], a
 	ld a, l
-	ld [wd011], a
+	ld [wBugContestTempScore + 1], a
 	push de
-	call Function1383e
+	call DetermineContestWinners
 	pop de
 
 .done
--- /dev/null
+++ b/event/celebi.asm
@@ -1,0 +1,354 @@
+Special_CelebiShrineEvent: ; 4989a
+	call DelayFrame
+	ld a, [VramState]
+	push af
+	xor a
+	ld [VramState], a
+	call LoadCelebiGFX
+	depixel 0, 10, 7, 0
+	ld a, SPRITE_ANIM_INDEX_2C
+	call _InitSpriteAnimStruct
+	ld hl, $3
+	add hl, bc
+	ld [hl], $84
+	ld hl, $2
+	add hl, bc
+	ld [hl], $1f
+	ld hl, $f
+	add hl, bc
+	ld a, $80
+	ld [hl], a
+	ld a, $a0
+	ld [wcf64], a
+	ld d, $0
+.loop
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .done
+	push bc
+	call Function49bae
+	inc d
+	push de
+	ld a, $90
+	ld [wc3b5], a
+	callba Function8cf7a
+	call Function49935
+	ld c, 2
+	call DelayFrames
+	pop de
+	pop bc
+	jr .loop
+
+.done
+	pop af
+	ld [VramState], a
+	call Function498f9
+	call Function49bf3
+	ret
+; 498f9
+
+Function498f9: ; 498f9
+	ld hl, Sprites + 2
+	xor a
+	ld c, $4
+.loop
+	ld [hli], a
+rept 3
+	inc hl
+endr
+	inc a
+	dec c
+	jr nz, .loop
+	ld hl, Sprites + $10
+	ld bc, $90
+	xor a
+	call ByteFill
+	ret
+; 49912
+
+LoadCelebiGFX: ; 49912
+	callba Function8cf53
+	ld de, SpecialCelebiLeafGFX
+	ld hl, VTiles1
+	lb bc, BANK(SpecialCelebiLeafGFX), 4
+	call Request2bpp
+	ld de, SpecialCelebiGFX
+	ld hl, VTiles1 tile $04
+	lb bc, BANK(SpecialCelebiGFX), $10
+	call Request2bpp
+	xor a
+	ld [wJumptableIndex], a
+	ret
+; 49935
+
+Function49935: ; 49935
+	ld hl, wcf64
+	ld a, [hl]
+	and a
+	jr z, .asm_4993e
+	dec [hl]
+	ret
+
+.asm_4993e
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+; 49944
+
+Function49944: ; 49944
+	ld hl, wcf65
+	ld a, [hl]
+	inc [hl]
+	and $7
+	ret nz
+	ld a, [hl]
+	and $18
+	sla a
+	add $40
+	ld d, a
+	ld e, $0
+	ld a, SPRITE_ANIM_INDEX_18 ; fly land
+	call _InitSpriteAnimStruct
+	ld hl, $3
+	add hl, bc
+	ld [hl], $80
+	ret
+; 49962
+
+SpecialCelebiLeafGFX: ; 49962
+INCBIN "gfx/special/celebi/leaf.2bpp"
+SpecialCelebiGFX: ; 499a2
+INCBIN "gfx/special/celebi/1.2bpp"
+INCBIN "gfx/special/celebi/2.2bpp"
+INCBIN "gfx/special/celebi/3.2bpp"
+INCBIN "gfx/special/celebi/4.2bpp"
+
+
+Function49aa2: ; 49aa2 (12:5aa2)
+	ld hl, $6
+	add hl, bc
+	ld a, [hl]
+	push af
+	ld hl, $5
+	add hl, bc
+	ld a, [hl]
+	cp $52
+	jp nc, Function49b30
+	ld hl, $5
+	add hl, bc
+	inc [hl]
+	ld hl, $f
+	add hl, bc
+	ld a, [hl]
+	ld d, a
+	cp $3a
+	jr c, .asm_49ac6
+	jr z, .asm_49ac6
+	sub $3
+	ld [hl], a
+.asm_49ac6
+	ld hl, $e
+	add hl, bc
+	ld a, [hl]
+	inc [hl]
+	call Function49b3b
+	ld hl, $6
+	add hl, bc
+	ld [hl], a
+	ld d, a
+	ld hl, $4
+	add hl, bc
+	add [hl]
+	cp $5c
+	jr nc, .asm_49ae2
+	cp $44
+	jr nc, .asm_49b0d
+.asm_49ae2
+	pop af
+	push af
+	cp d
+	jr nc, .asm_49af2
+	ld hl, $4
+	add hl, bc
+	add [hl]
+	cp $50
+	jr c, .asm_49b05
+	jr .asm_49afb
+.asm_49af2
+	ld hl, $4
+	add hl, bc
+	add [hl]
+	cp $50
+	jr nc, .asm_49b05
+.asm_49afb
+	ld hl, $5
+	add hl, bc
+	ld a, [hl]
+	sub $2
+	ld [hl], a
+	jr .asm_49b0d
+.asm_49b05
+	ld hl, $5
+	add hl, bc
+	ld a, [hl]
+	add $1
+	ld [hl], a
+.asm_49b0d
+	pop af
+	ld hl, $4
+	add hl, bc
+	add [hl]
+	cp $50
+	jr c, .asm_49b26
+	cp $e6
+	jr nc, .asm_49b26
+	ld hl, $1
+	add hl, bc
+	ld a, $41
+	call Function3b3c
+	jr .asm_49b2f
+.asm_49b26
+	ld hl, $1
+	add hl, bc
+	ld a, $40
+	call Function3b3c
+.asm_49b2f
+	ret
+
+Function49b30: ; 49b30 (12:5b30)
+	pop af
+	ld hl, $1
+	add hl, bc
+	ld a, $40
+	call Function3b3c
+	ret
+
+Function49b3b: ; 49b3b (12:5b3b)
+	add $10
+	and $3f
+	cp $20
+	jr nc, .asm_49b48
+	call Function49b52
+	ld a, h
+	ret
+.asm_49b48
+	and $1f
+	call Function49b52
+	ld a, h
+	xor $ff
+	inc a
+	ret
+
+Function49b52: ; 49b52 (12:5b52)
+	ld e, a
+	ld a, d
+	ld d, $0
+	ld hl, Unknown_49b6e
+rept 2
+	add hl, de
+endr
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	ld hl, 0
+.asm_49b61
+	srl a
+	jr nc, .asm_49b66
+	add hl, de
+.asm_49b66
+	sla e
+	rl d
+	and a
+	jr nz, .asm_49b61
+	ret
+; 49b6e (12:5b6e)
+
+Unknown_49b6e: ; 49b6e
+	sine_wave $100
+; 49bae
+
+Function49bae: ; 49bae
+	push hl
+	push bc
+	push de
+	ld a, d
+	ld d, $3
+	ld e, d
+	cp $0
+	jr z, .asm_49bd0
+	cp d
+	jr z, .asm_49bd4
+	call Function49bed
+	cp d
+	jr z, .asm_49bd8
+	call Function49bed
+	cp d
+	jr z, .asm_49bdc
+	call Function49bed
+	cp d
+	jr c, .asm_49be9
+	jr .asm_49be5
+
+.asm_49bd0
+	ld a, $84
+	jr .asm_49bde
+
+.asm_49bd4
+	ld a, $88
+	jr .asm_49bde
+
+.asm_49bd8
+	ld a, $8c
+	jr .asm_49bde
+
+.asm_49bdc
+	ld a, $90
+
+.asm_49bde
+	ld hl, $3
+	add hl, bc
+	ld [hl], a
+	jr .asm_49be9
+
+.asm_49be5
+	pop de
+	ld d, $ff
+	push de
+
+.asm_49be9
+	pop de
+	pop bc
+	pop hl
+	ret
+; 49bed
+
+Function49bed: ; 49bed
+	push af
+	ld a, d
+	add e
+	ld d, a
+	pop af
+	ret
+; 49bf3
+
+Function49bf3: ; 49bf3
+	ld a, BATTLETYPE_CELEBI
+	ld [BattleType], a
+	ret
+; 49bf9
+
+CheckCaughtCelebi: ; 49bf9
+	ld a, [wBattleResult]
+	bit 6, a
+	jr z, .false
+	ld a, $1
+	ld [ScriptVar], a
+	jr .done
+
+.false
+	xor a
+	ld [ScriptVar], a
+
+.done
+	ret
+; 49c0c
--- /dev/null
+++ b/event/daycare.asm
@@ -1,0 +1,768 @@
+Special_DayCareMan: ; 166d6
+	ld hl, wDaycareMan
+	bit 0, [hl]
+	jr nz, .asm_166fe
+	ld hl, wDaycareMan
+	ld a, $0
+	call Function1678f
+	jr c, .asm_16724
+	call Function16798
+	jr c, .asm_16721
+	callba Functionde2a
+	ld hl, wDaycareMan
+	set 0, [hl]
+	call Function167f6
+	call Function16a3b
+	ret
+
+.asm_166fe
+	callba Functione698
+	ld hl, wBreedMon1Nick
+	call Function1686d
+	call Function16807
+	jr c, .asm_16721
+	callba Functiondd21
+	call Function16850
+	ld hl, wDaycareMan
+	res 0, [hl]
+	res 5, [hl]
+	jr .asm_16724
+
+.asm_16721
+	call Function1689b
+
+.asm_16724
+	ld a, $13
+	call Function1689b
+	ret
+; 1672a
+
+Special_DayCareLady: ; 1672a
+	ld hl, wDaycareLady
+	bit 0, [hl]
+	jr nz, .asm_16752
+	ld hl, wDaycareLady
+	ld a, $2
+	call Function16781
+	jr c, .asm_1677b
+	call Function16798
+	jr c, .asm_16778
+	callba Functionde37
+	ld hl, wDaycareLady
+	set 0, [hl]
+	call Function167f6
+	call Function16a3b
+	ret
+
+.asm_16752
+	callba Functione6b3
+	ld hl, wBreedMon2Nick
+	call Function1686d
+	call Function16807
+	jr c, .asm_16778
+	callba Functiondd42
+	call Function16850
+	ld hl, wDaycareLady
+	res 0, [hl]
+	ld hl, wDaycareMan
+	res 5, [hl]
+	jr .asm_1677b
+
+.asm_16778
+	call Function1689b
+
+.asm_1677b
+	ld a, $13
+	call Function1689b
+	ret
+; 16781
+
+Function16781: ; 16781
+	bit 7, [hl]
+	jr nz, .asm_16788
+	set 7, [hl]
+	inc a
+
+.asm_16788
+	call Function1689b
+	call YesNoBox
+	ret
+; 1678f
+
+Function1678f: ; 1678f
+	set 7, [hl]
+	call Function1689b
+	call YesNoBox
+	ret
+; 16798
+
+Function16798: ; 16798
+	ld a, [PartyCount]
+	cp 2
+	jr c, .asm_167e5
+	ld a, 4
+	call Function1689b
+	ld b, 6
+	callba Function5001d
+	jr c, .asm_167dd
+	ld a, [CurPartySpecies]
+	cp EGG
+	jr z, .asm_167e1
+	callba CheckCurPartyMonFainted
+	jr c, .asm_167e9
+	ld hl, PartyMon1Item
+	ld bc, PARTYMON_STRUCT_LENGTH
+	ld a, [CurPartyMon]
+	call AddNTimes
+	ld d, [hl]
+	callba ItemIsMail
+	jr c, .asm_167ed
+	ld hl, PartyMonNicknames
+	ld a, [CurPartyMon]
+	call GetNick
+	and a
+	ret
+
+.asm_167dd
+	ld a, $12
+	scf
+	ret
+
+.asm_167e1
+	ld a, $6
+	scf
+	ret
+
+.asm_167e5
+	ld a, $7
+	scf
+	ret
+
+.asm_167e9
+	ld a, $8
+	scf
+	ret
+
+.asm_167ed
+	ld a, $a
+	scf
+	ret
+; 167f1
+
+UnknownText_0x167f1: ; 0x167f1
+	;
+	text_jump UnknownText_0x1bdaa7
+	db "@"
+; 0x167f6
+
+Function167f6: ; 167f6
+	ld a, $5
+	call Function1689b
+	ld a, [CurPartySpecies]
+	call PlayCry
+	ld a, $9
+	call Function1689b
+	ret
+; 16807
+
+Function16807: ; 16807
+	ld a, [StringBuffer2 + 1]
+	and a
+	jr nz, .asm_16819
+	ld a, $f
+	call Function1689b
+	call YesNoBox
+	jr c, .asm_16844
+	jr .asm_1682d
+
+.asm_16819
+	ld a, $b
+	call Function1689b
+	call YesNoBox
+	jr c, .asm_16844
+	ld a, $c
+	call Function1689b
+	call YesNoBox
+	jr c, .asm_16844
+
+.asm_1682d
+	ld de, Money
+	ld bc, StringBuffer2 + 2
+	callba CompareMoney
+	jr c, .asm_16848
+	ld a, [PartyCount]
+	cp $6
+	jr nc, .asm_1684c
+	and a
+	ret
+
+.asm_16844
+	ld a, $12
+	scf
+	ret
+
+.asm_16848
+	ld a, $11
+	scf
+	ret
+
+.asm_1684c
+	ld a, $10
+	scf
+	ret
+; 16850
+
+Function16850: ; 16850
+	ld bc, StringBuffer2 + 2
+	ld de, Money
+	callba TakeMoney
+	ld a, $d
+	call Function1689b
+	ld a, [CurPartySpecies]
+	call PlayCry
+	ld a, $e
+	call Function1689b
+	ret
+; 1686d
+
+Function1686d: ; 1686d
+	ld a, b
+	ld [StringBuffer2], a
+	ld a, d
+	ld [StringBuffer2 + 1], a
+	ld de, StringBuffer1
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	ld hl, 0
+	ld bc, $64
+	ld a, [StringBuffer2 + 1]
+	call AddNTimes
+	ld de, $64
+	add hl, de
+	xor a
+	ld [StringBuffer2 + 2], a
+	ld a, h
+	ld [StringBuffer2 + 3], a
+	ld a, l
+	ld [StringBuffer2 + 4], a
+	ret
+; 1689b
+
+Function1689b: ; 1689b
+	ld e, a
+	ld d, 0
+	ld hl, TextTable_168aa
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	call PrintText
+	ret
+; 168aa
+
+TextTable_168aa: ; 168aa
+	dw UnknownText_0x168d2
+	dw UnknownText_0x168d7
+	dw UnknownText_0x168dc
+	dw UnknownText_0x168e1
+	dw UnknownText_0x168e6
+	dw UnknownText_0x168ff
+	dw UnknownText_0x168f0
+	dw UnknownText_0x168eb
+	dw UnknownText_0x168fa
+	dw UnknownText_0x16904
+	dw UnknownText_0x168f5
+	dw UnknownText_0x16909
+	dw UnknownText_0x1690e
+	dw UnknownText_0x16913
+	dw UnknownText_0x16918
+	dw UnknownText_0x1691d
+	dw UnknownText_0x16922
+	dw UnknownText_0x16927
+	dw UnknownText_0x1692c
+	dw UnknownText_0x16931
+; 168d2
+
+UnknownText_0x168d2: ; 0x168d2
+	; I'm the DAY-CARE MAN. Want me to raise a #MON?
+	text_jump UnknownText_0x1bdaa9
+	db "@"
+; 0x168d7
+
+UnknownText_0x168d7: ; 0x168d7
+	; I'm the DAY-CARE MAN. Do you know about EGGS? I was raising #MON with my wife, you see. We were shocked to find an EGG! How incredible is that? So, want me to raise a #MON?
+	text_jump UnknownText_0x1bdad8
+	db "@"
+; 0x168dc
+
+UnknownText_0x168dc: ; 0x168dc
+	; I'm the DAY-CARE LADY. Should I raise a #MON for you?
+	text_jump UnknownText_0x1bdb85
+	db "@"
+; 0x168e1
+
+UnknownText_0x168e1: ; 0x168e1
+	; I'm the DAY-CARE LADY. Do you know about EGGS? My husband and I were raising some #MON, you see. We were shocked to find an EGG! How incredible could that be? Should I raise a #MON for you?
+	text_jump UnknownText_0x1bdbbb
+	db "@"
+; 0x168e6
+
+UnknownText_0x168e6: ; 0x168e6
+	; What should I raise for you?
+	text_jump UnknownText_0x1bdc79
+	db "@"
+; 0x168eb
+
+UnknownText_0x168eb: ; 0x168eb
+	; Oh? But you have just one #MON.
+	text_jump UnknownText_0x1bdc97
+	db "@"
+; 0x168f0
+
+UnknownText_0x168f0: ; 0x168f0
+	; Sorry, but I can't accept an EGG.
+	text_jump UnknownText_0x1bdcb8
+	db "@"
+; 0x168f5
+
+UnknownText_0x168f5: ; 0x168f5
+	; Remove MAIL before you come see me.
+	text_jump UnknownText_0x1bdcda
+	db "@"
+; 0x168fa
+
+UnknownText_0x168fa: ; 0x168fa
+	; If you give me that, what will you battle with?
+	text_jump UnknownText_0x1bdcff
+	db "@"
+; 0x168ff
+
+UnknownText_0x168ff: ; 0x168ff
+	; OK. I'll raise your @ .
+	text_jump UnknownText_0x1bdd30
+	db "@"
+; 0x16904
+
+UnknownText_0x16904: ; 0x16904
+	; Come back for it later.
+	text_jump UnknownText_0x1bdd4b
+	db "@"
+; 0x16909
+
+UnknownText_0x16909: ; 0x16909
+	; Are we geniuses or what? Want to see your @ ?
+	text_jump UnknownText_0x1bdd64
+	db "@"
+; 0x1690e
+
+UnknownText_0x1690e: ; 0x1690e
+	; Your @ has grown a lot. By level, it's grown by @ . If you want your #MON back, it will cost ¥@ .
+	text_jump UnknownText_0x1bdd96
+	db "@"
+; 0x16913
+
+UnknownText_0x16913: ; 0x16913
+	; Perfect! Here's your #MON.
+	text_jump UnknownText_0x1bde04
+	db "@"
+; 0x16918
+
+UnknownText_0x16918: ; 0x16918
+	; got back @ .
+	text_jump UnknownText_0x1bde1f
+	db "@"
+; 0x1691d
+
+UnknownText_0x1691d: ; 0x1691d
+	; Huh? Back already? Your @ needs a little more time with us. If you want your #MON back, it will cost ¥100.
+	text_jump UnknownText_0x1bde32
+	db "@"
+; 0x16922
+
+UnknownText_0x16922: ; 0x16922
+	; You have no room for it.
+	text_jump UnknownText_0x1bdea2
+	db "@"
+; 0x16927
+
+UnknownText_0x16927: ; 0x16927
+	; You don't have enough money.
+	text_jump UnknownText_0x1bdebc
+	db "@"
+; 0x1692c
+
+UnknownText_0x1692c: ; 0x1692c
+	; Oh, fine then.
+	text_jump UnknownText_0x1bded9
+	db "@"
+; 0x16931
+
+UnknownText_0x16931: ; 0x16931
+	; Come again.
+	text_jump UnknownText_0x1bdee9
+	db "@"
+; 0x16936
+
+Special_DayCareManOutside: ; 16936
+	ld hl, wDaycareMan
+	bit 6, [hl]
+	jr nz, Function16949
+	ld hl, UnknownText_0x16944
+	call PrintText
+	ret
+
+UnknownText_0x16944: ; 0x16944
+	; Not yet…
+	text_jump UnknownText_0x1bdef6
+	db "@"
+; 0x16949
+
+Function16949: ; 16949
+	ld hl, UnknownText_0x16993
+	call PrintText
+	call YesNoBox
+	jr c, .asm_1697c
+	ld a, [PartyCount]
+	cp PARTY_LENGTH
+	jr nc, .asm_16987
+	call Function169ac
+	ld hl, wDaycareMan
+	res 6, [hl]
+	call Function16a3b
+	ld hl, UnknownText_0x16998
+	call PrintText
+	ld de, SFX_GET_EGG_FROM_DAYCARE_LADY
+	call PlaySFX
+	ld c, 120
+	call DelayFrames
+	ld hl, UnknownText_0x1699d
+	jr .asm_1697f
+
+.asm_1697c
+	ld hl, UnknownText_0x169a2
+
+.asm_1697f
+	call PrintText
+	xor a
+	ld [ScriptVar], a
+	ret
+
+.asm_16987
+	ld hl, UnknownText_0x169a7
+	call PrintText
+	ld a, $1
+	ld [ScriptVar], a
+	ret
+; 16993
+
+UnknownText_0x16993: ; 0x16993
+	; Ah, it's you! We were raising your #MON, and my goodness, were we surprised! Your #MON had an EGG! We don't know how it got there, but your #MON had it. You want it?
+	text_jump UnknownText_0x1bdf00
+	db "@"
+; 0x16998
+
+UnknownText_0x16998: ; 0x16998
+	; received the EGG!
+	text_jump UnknownText_0x1bdfa5
+	db "@"
+; 0x1699d
+
+UnknownText_0x1699d: ; 0x1699d
+	; Take good care of it.
+	text_jump UnknownText_0x1bdfba
+	db "@"
+; 0x169a2
+
+UnknownText_0x169a2: ; 0x169a2
+	; Well then, I'll keep it. Thanks!
+	text_jump UnknownText_0x1bdfd1
+	db "@"
+; 0x169a7
+
+UnknownText_0x169a7: ; 0x169a7
+	; You have no room in your party. Come back later.
+	text_jump UnknownText_0x1bdff2
+	db "@"
+; 0x169ac
+
+Function169ac: ; 169ac
+	ld a, [wEggMonLevel]
+	ld [CurPartyLevel], a
+	ld hl, PartyCount
+	ld a, [hl]
+	cp PARTY_LENGTH
+	jr nc, .asm_16a2f
+	inc a
+	ld [hl], a
+	ld c, a
+	ld b, 0
+	add hl, bc
+	ld a, EGG
+	ld [hli], a
+	ld a, [wEggMonSpecies]
+	ld [CurSpecies], a
+	ld [CurPartySpecies], a
+	ld a, $ff
+	ld [hl], a
+	ld hl, PartyMonNicknames
+	ld bc, PKMN_NAME_LENGTH
+	call Function16a31
+	ld hl, wEggNick
+	call CopyBytes
+	ld hl, PartyMonOT
+	ld bc, NAME_LENGTH
+	call Function16a31
+	ld hl, wEggOT
+	call CopyBytes
+	ld hl, PartyMon1
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call Function16a31
+	ld hl, wEggMon
+	ld bc, wEggMonEnd - wEggMon
+	call CopyBytes
+	call GetBaseData
+	ld a, [PartyCount]
+	dec a
+	ld hl, PartyMon1
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call AddNTimes
+	ld b, h
+	ld c, l
+	ld hl, MON_ID + 1
+	add hl, bc
+	push hl
+	ld hl, MON_MAXHP
+	add hl, bc
+	ld d, h
+	ld e, l
+	pop hl
+	push bc
+	ld b, $0
+	predef CalcPkmnStats
+	pop bc
+	ld hl, MON_HP
+	add hl, bc
+	xor a
+	ld [hli], a
+	ld [hl], a
+	and a
+	ret
+
+.asm_16a2f
+	scf
+	ret
+; 16a31
+
+Function16a31: ; 16a31
+	ld a, [PartyCount]
+	dec a
+	call AddNTimes
+	ld d, h
+	ld e, l
+	ret
+; 16a3b
+
+Function16a3b: ; 16a3b
+	ld a, [wDaycareLady]
+	bit 0, a
+	ret z
+	ld a, [wDaycareMan]
+	bit 0, a
+	ret z
+	callab Function16e1d
+	ld a, [wd265]
+	and a
+	ret z
+	inc a
+	ret z
+	ld hl, wDaycareMan
+	set 5, [hl]
+.asm_16a59
+	call Random
+	cp 150
+	jr c, .asm_16a59
+	ld [wStepsToEgg], a
+	jp Function16a66
+; 16a66
+
+Function16a66: ; 16a66
+	xor a
+	ld hl, wEggMon
+	ld bc, wEggMonEnd - wEggMon
+	call ByteFill
+	ld hl, wEggNick
+	ld bc, PKMN_NAME_LENGTH
+	call ByteFill
+	ld hl, wEggOT
+	ld bc, NAME_LENGTH
+	call ByteFill
+	ld a, [wBreedMon1DVs]
+	ld [TempMonDVs], a
+	ld a, [wBreedMon1DVs + 1]
+	ld [TempMonDVs + 1], a
+	ld a, [wBreedMon1Species]
+	ld [CurPartySpecies], a
+	ld a, $3
+	ld [MonType], a
+	ld a, [wBreedMon1Species]
+	cp DITTO
+	ld a, $1
+	jr z, .asm_16ab6
+	ld a, [wBreedMon2Species]
+	cp DITTO
+	ld a, $0
+	jr z, .asm_16ab6
+	callba GetGender
+	ld a, $0
+	jr z, .asm_16ab6
+	inc a
+
+.asm_16ab6
+	ld [wDittoInDaycare], a
+	and a
+	ld a, [wBreedMon1Species]
+	jr z, .asm_16ac2
+	ld a, [wBreedMon2Species]
+
+.asm_16ac2
+	ld [CurPartySpecies], a
+	callab GetPreEvolution
+	callab GetPreEvolution
+	ld a, EGG_LEVEL
+	ld [CurPartyLevel], a
+
+	ld a, [CurPartySpecies]
+	cp NIDORAN_F
+	jr nz, .asm_16ae8
+	call Random
+	cp $80
+	ld a, NIDORAN_F
+	jr c, .asm_16ae8
+	ld a, NIDORAN_M
+.asm_16ae8
+	ld [CurPartySpecies], a
+	ld [CurSpecies], a
+	ld [wEggMonSpecies], a
+
+	call GetBaseData
+	ld hl, wEggNick
+	ld de, String_16be0
+	call CopyName2
+	ld hl, PlayerName
+	ld de, wEggOT
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	xor a
+	ld [wEggMonItem], a
+	ld de, wEggMonMoves
+	xor a
+	ld [Buffer1], a
+	predef FillMoves
+	callba Function170bf
+	ld hl, wEggMonID
+	ld a, [PlayerID]
+	ld [hli], a
+	ld a, [PlayerID + 1]
+	ld [hl], a
+	ld a, [CurPartyLevel]
+	ld d, a
+	callab CalcExpAtLevel
+	ld hl, wEggMonExp
+	ld a, [hMultiplicand]
+	ld [hli], a
+	ld a, [$ffb5]
+	ld [hli], a
+	ld a, [$ffb6]
+	ld [hl], a
+	xor a
+	ld b, $a
+	ld hl, wEggMonStatExp
+.asm_16b46
+	ld [hli], a
+	dec b
+	jr nz, .asm_16b46
+	ld hl, wEggMonDVs
+	call Random
+	ld [hli], a
+	ld [TempMonDVs], a
+	call Random
+	ld [hld], a
+	ld [TempMonDVs + 1], a
+	ld de, wBreedMon1DVs
+	ld a, [wBreedMon1Species]
+	cp DITTO
+	jr z, .asm_16b98
+	ld de, wBreedMon2DVs
+	ld a, [wBreedMon2Species]
+	cp DITTO
+	jr z, .asm_16b98
+	ld a, $3
+	ld [MonType], a
+	push hl
+	callba GetGender
+	pop hl
+	ld de, wBreedMon1DVs
+	ld bc, wBreedMon2DVs
+	jr c, .asm_16bab
+	jr z, .asm_16b90
+	ld a, [wDittoInDaycare]
+	and a
+	jr z, .asm_16b98
+	ld d, b
+	ld e, c
+	jr .asm_16b98
+
+.asm_16b90
+	ld a, [wDittoInDaycare]
+	and a
+	jr nz, .asm_16b98
+	ld d, b
+	ld e, c
+
+.asm_16b98
+	ld a, [de]
+	inc de
+	and $f
+	ld b, a
+	ld a, [hl]
+	and $f0
+	add b
+	ld [hli], a
+	ld a, [de]
+	and $7
+	ld b, a
+	ld a, [hl]
+	and $f8
+	add b
+	ld [hl], a
+
+.asm_16bab
+	ld hl, StringBuffer1
+	ld de, wd050
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	ld hl, wEggMonMoves
+	ld de, wEggMonPP
+	predef FillPP
+	ld hl, wd050
+	ld de, StringBuffer1
+	ld bc, NAME_LENGTH
+	call CopyBytes
+	ld a, [BaseEggSteps]
+	ld hl, wEggMonHappiness
+	ld [hli], a
+	xor a
+rept 2
+	ld [hli], a
+endr
+	ld [hl], a
+	ld a, [CurPartyLevel]
+	ld [wEggMonLevel], a
+	ret
+; 16be0
+
+String_16be0: ; 16be0
+	db "EGG@"
+; 16be4
--- a/event/elevator.asm
+++ b/event/elevator.asm
@@ -127,10 +127,10 @@
 	call Elevator_GetCurrentFloorText
 	ld hl, Elevator_MenuDataHeader
 	call CopyMenuDataHeader
-	call Function352f
+	call InitScrollingMenu
 	call UpdateSprites
 	xor a
-	ld [wd0e4], a
+	ld [wMenuScrollPosition], a
 	call HandleScrollingMenu
 	call WriteBackup
 	ld a, [wcf73]
--- /dev/null
+++ b/event/field_moves.asm
@@ -1,0 +1,312 @@
+PlayWhirlpoolSound: ; 8c7d4
+	call WaitSFX
+	ld de, SFX_SURF
+	call PlaySFX
+	call WaitSFX
+	ret
+; 8c7e1
+
+BlindingFlash: ; 8c7e1
+	callba FadeOutPalettes
+	ld hl, StatusFlags
+	set 2, [hl]
+	callba Function8c0e5
+	callba Function8c001
+	ld b, SCGB_09
+	call GetSGBLayout
+	callba Function49409
+	callba FadeInPalettes
+	ret
+; 8c80a
+
+ShakeHeadbuttTree: ; 8c80a
+	callba Function8cf53
+	ld de, CutGrassGFX
+	ld hl, VTiles1
+	lb bc, BANK(CutGrassGFX), 4
+	call Request2bpp
+	ld de, HeadbuttTreeGFX
+	ld hl, VTiles1 tile $04
+	lb bc, BANK(HeadbuttTreeGFX), 8
+	call Request2bpp
+	call Function8cad3
+	ld a, SPRITE_ANIM_INDEX_1B
+	call _InitSpriteAnimStruct
+	ld hl, $3
+	add hl, bc
+	ld [hl], $84
+	ld a, $90
+	ld [wc3b5], a
+	callba Function8cf7a
+	call GetHeadbuttTreeRelativeLocation
+	ld a, $20
+	ld [wcf64], a
+	call WaitSFX
+	ld de, SFX_SANDSTORM
+	call PlaySFX
+.loop
+	ld hl, wcf64
+	ld a, [hl]
+	and a
+	jr z, .done
+	dec [hl]
+	ld a, $90
+	ld [wc3b5], a
+	callba Function8cf7a
+	call DelayFrame
+	jr .loop
+
+.done
+	call OverworldTextModeSwitch
+	call WaitBGMap
+	xor a
+	ld [hBGMapMode], a
+	callba Function8cf53
+	ld hl, Sprites + $90
+	ld bc, $10
+	xor a
+	call ByteFill
+	ld de, Font
+	ld hl, VTiles1
+	lb bc, BANK(Font), $c
+	call Get1bpp
+	call ReplaceKrisSprite
+	ret
+; 8c893
+
+HeadbuttTreeGFX: ; 8c893
+INCBIN "gfx/unknown/08c893.2bpp"
+; 8c913
+
+GetHeadbuttTreeRelativeLocation: ; 8c913
+	xor a
+	ld [hBGMapMode], a
+	ld a, [PlayerDirection]
+	and %00001100
+	srl a
+	ld e, a
+	ld d, 0
+	ld hl, TreeRelativeLocationTable
+	add hl, de
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+
+	ld a, $5
+	ld [hli], a
+	ld [hld], a
+	ld bc, SCREEN_WIDTH
+	add hl, bc
+	ld [hli], a
+	ld [hld], a
+	call WaitBGMap
+	xor a
+	ld [hBGMapMode], a
+	ret
+; 8c938
+
+TreeRelativeLocationTable: ; 8c938
+	dwcoord 8,     8 + 2 ; RIGHT
+	dwcoord 8,     8 - 2 ; LEFT
+	dwcoord 8 - 2, 8     ; DOWN
+	dwcoord 8 + 2, 8     ; UP
+; 8c940
+
+OWCutAnimation: ; 8c940
+	ld a, e
+	and $1
+	ld [wJumptableIndex], a
+	call .LoadCutGFX
+	call WaitSFX
+	ld de, SFX_PLACE_PUZZLE_PIECE_DOWN
+	call PlaySFX
+.loop
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .finish
+	ld a, $90
+	ld [wc3b5], a
+	callab Function8cf7a
+	call OWCutJumptable
+	call DelayFrame
+	jr .loop
+
+.finish
+	ret
+; 8c96d
+
+.LoadCutGFX: ; 8c96d
+	callab Function8cf53 ; pointless to farcall
+	ld de, CutGrassGFX
+	ld hl, VTiles1
+	lb bc, BANK(CutGrassGFX), 4
+	call Request2bpp
+	ld de, CutTreeGFX
+	ld hl, VTiles1 tile $4
+	lb bc, BANK(CutTreeGFX), 4
+	call Request2bpp
+	ret
+; 8c98c
+
+CutTreeGFX: ; c898c
+INCBIN "gfx/misc/cut_tree.2bpp"
+; c89cc
+
+CutGrassGFX: ; 8c9cc
+INCBIN "gfx/misc/cut_grass.2bpp"
+; 8ca0c
+
+OWCutJumptable: ; 8ca0c
+	ld a, [wJumptableIndex]
+	ld e, a
+	ld d, 0
+	ld hl, .jumptable
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 8ca1b
+
+
+.jumptable: ; 8ca1b (23:4a1b)
+	dw Function8ca23
+	dw Function8ca3c
+	dw Function8ca5c
+	dw Function8ca64
+
+
+Function8ca23: ; 8ca23 (23:4a23)
+	call Function8cad3
+	ld a, SPRITE_ANIM_INDEX_17 ; leaf
+	call _InitSpriteAnimStruct
+	ld hl, $3
+	add hl, bc
+	ld [hl], $84
+	ld a, $20
+	ld [wcf64], a
+	ld hl, wJumptableIndex
+rept 2
+	inc [hl]
+endr
+	ret
+
+Function8ca3c: ; 8ca3c (23:4a3c)
+	call Function8ca8e
+	xor a
+	call Function8ca73
+	ld a, $10
+	call Function8ca73
+	ld a, $20
+	call Function8ca73
+	ld a, $30
+	call Function8ca73
+	ld a, $20
+	ld [wcf64], a
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+
+Function8ca5c: ; 8ca5c (23:4a5c)
+	ld a, $1
+	ld [hBGMapMode], a
+	ld hl, wJumptableIndex
+	inc [hl]
+
+Function8ca64: ; 8ca64 (23:4a64)
+	ld hl, wcf64
+	ld a, [hl]
+	and a
+	jr z, .asm_8ca6d
+	dec [hl]
+	ret
+.asm_8ca6d
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+Function8ca73: ; 8ca73 (23:4a73)
+	push de
+	push af
+	ld a, SPRITE_ANIM_INDEX_16 ; fly takeoff
+	call _InitSpriteAnimStruct
+	ld hl, $3
+	add hl, bc
+	ld [hl], $80
+	ld hl, $e
+	add hl, bc
+	ld [hl], $4
+	pop af
+	ld hl, $c
+	add hl, bc
+	ld [hl], a
+	pop de
+	ret
+
+Function8ca8e: ; 8ca8e (23:4a8e)
+	ld de, 0
+	ld a, [wd197]
+	bit 0, a
+	jr z, .asm_8ca9a
+	set 0, e
+.asm_8ca9a
+	ld a, [wd196]
+	bit 0, a
+	jr z, .asm_8caa3
+	set 1, e
+.asm_8caa3
+	ld a, [PlayerDirection]
+	and $c
+	add e
+	ld e, a
+	ld hl, Unknown_8cab3
+rept 2
+	add hl, de
+endr
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	ret
+; 8cab3 (23:4ab3)
+
+Unknown_8cab3: ; 8cab3
+	db $58, $60
+	db $48, $60
+	db $58, $70
+	db $48, $70
+	db $58, $40
+	db $48, $40
+	db $58, $50
+	db $48, $50
+	db $38, $60
+	db $48, $60
+	db $38, $50
+	db $48, $50
+	db $58, $60
+	db $68, $60
+	db $58, $50
+	db $68, $50
+; 8cad3
+
+Function8cad3: ; 8cad3 (23:4ad3)
+	ld a, [PlayerDirection]
+	and $c
+	srl a
+	ld e, a
+	ld d, 0
+	ld hl, Unknown_8cae5
+	add hl, de
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	ret
+; 8cae5 (23:4ae5)
+
+Unknown_8cae5: ; 8cae5
+	db $50, $68
+	db $50, $48
+	db $40, $58
+	db $60, $58
+; 8caed
--- a/event/forced_movement.asm
+++ b/event/forced_movement.asm
@@ -28,41 +28,33 @@
 ; 0x12564
 
 .MovementData_up: ; 0x12564
-	step_wait5
-	big_step_down
+	step_dig 16
 	turn_in_down
-	step_wait5
-	big_step_down
+	step_dig 16
 	turn_head_down
 	step_end
 ; 0x1256b
 
 .MovementData_down: ; 0x1256b
-	step_wait5
-	big_step_down
+	step_dig 16
 	turn_in_up
-	step_wait5
-	big_step_down
+	step_dig 16
 	turn_head_up
 	step_end
 ; 0x12572
 
 .MovementData_right: ; 0x12572
-	step_wait5
-	big_step_down
+	step_dig 16
 	turn_in_left
-	step_wait5
-	big_step_down
+	step_dig 16
 	turn_head_left
 	step_end
 ; 0x12579
 
 .MovementData_left: ; 0x12579
-	step_wait5
-	big_step_down
+	step_dig 16
 	turn_in_right
-	step_wait5
-	big_step_down
+	step_dig 16
 	turn_head_right
 	step_end
 ; 0x12580
--- /dev/null
+++ b/event/halloffame.asm
@@ -1,0 +1,628 @@
+HallOfFame:: ; 0x8640e
+	call Function8648e
+	ld a, [StatusFlags]
+	push af
+	ld a, 1
+	ld [wc2cd], a
+	call DisableSpriteUpdates
+	ld a, SPAWN_LANCE
+	ld [wSpawnAfterChampion], a
+
+	; Enable the Pokégear map to cycle through all of Kanto
+	ld hl, StatusFlags
+	set 6, [hl] ; hall of fame
+
+	callba Function14da0
+
+	ld hl, wHallOfFameCount
+	ld a, [hl]
+	cp 200
+	jr nc, .ok
+	inc [hl]
+.ok
+	callba SaveGameData
+	call GetHallOfFameParty
+	callba AddHallOfFameEntry
+
+	xor a
+	ld [wc2cd], a
+	call Function864c3
+	pop af
+	ld b, a
+	callba Function109847
+	ret
+; 0x86455
+
+RedCredits:: ; 86455
+	ld a, MUSIC_NONE % $100
+	ld [MusicFadeIDLo], a
+	ld a, MUSIC_NONE / $100
+	ld [MusicFadeIDHi], a
+	ld a, $a
+	ld [MusicFade], a
+	callba FadeOutPalettes
+	xor a
+	ld [VramState], a
+	ld [hMapAnims], a
+	callba Function4e8c2
+	ld c, 8
+	call DelayFrames
+	call DisableSpriteUpdates
+	ld a, SPAWN_RED
+	ld [wSpawnAfterChampion], a
+	ld a, [StatusFlags]
+	ld b, a
+	callba Function109847
+	ret
+; 8648e
+
+Function8648e: ; 8648e
+	ld a, MUSIC_NONE % $100
+	ld [MusicFadeIDLo], a
+	ld a, MUSIC_NONE / $100
+	ld [MusicFadeIDHi], a
+	ld a, 10
+	ld [MusicFade], a
+	callba FadeOutPalettes
+	xor a
+	ld [VramState], a
+	ld [hMapAnims], a
+	callba Function4e881
+	ld c, 100
+	jp DelayFrames
+; 864b4
+
+Function864b4: ; 864b4
+	push de
+	ld de, MUSIC_NONE
+	call PlayMusic
+	call DelayFrame
+	pop de
+	call PlayMusic
+	ret
+; 864c3
+
+Function864c3: ; 864c3
+	xor a
+	ld [wJumptableIndex], a
+	call Function8671c
+	jr c, .done
+	ld de, SCREEN_WIDTH
+	call Function864b4
+	xor a
+	ld [wcf64], a
+.loop
+	ld a, [wcf64]
+	cp 6
+	jr nc, .done
+	ld hl, wc608 + 1
+	ld bc, $10
+	call AddNTimes
+	ld a, [hl]
+	cp -1
+	jr z, .done
+	push hl
+	call Function865b5
+	pop hl
+	call Function8650c
+	jr c, .done
+	ld hl, wcf64
+	inc [hl]
+	jr .loop
+
+.done
+	call Function86810
+	ld a, $4
+	ld [MusicFade], a
+	call RotateThreePalettesRight
+	ld c, 8
+	call DelayFrames
+	ret
+; 8650c
+
+Function8650c: ; 8650c
+	call Function86748
+	ld de, String_8652c
+	hlcoord 1, 2
+	call PlaceString
+	call WaitBGMap
+	decoord 6, 5
+	ld c, $6
+	predef Functiond066e
+	ld c, 60
+	call DelayFrames
+	and a
+	ret
+; 8652c
+
+String_8652c:
+	db "New Hall of Famer!@"
+; 8653f
+
+
+GetHallOfFameParty: ; 8653f
+	ld hl, OverworldMap
+	ld bc, HOF_LENGTH
+	xor a
+	call ByteFill
+	ld a, [wHallOfFameCount]
+	ld de, OverworldMap
+	ld [de], a
+	inc de
+	ld hl, PartySpecies
+	ld c, 0
+.next
+	ld a, [hli]
+	cp -1
+	jr z, .done
+	cp EGG
+	jr nz, .mon
+	inc c
+	jr .next
+
+.mon
+	push hl
+	push de
+	push bc
+
+	ld a, c
+	ld hl, PartyMons
+	ld bc, PARTYMON_STRUCT_LENGTH
+	call AddNTimes
+	ld c, l
+	ld b, h
+
+	ld hl, MON_SPECIES
+	add hl, bc
+	ld a, [hl]
+	ld [de], a
+	inc de
+
+	ld hl, MON_ID
+	add hl, bc
+	ld a, [hli]
+	ld [de], a
+	inc de
+	ld a, [hl]
+	ld [de], a
+	inc de
+
+	ld hl, MON_DVS
+	add hl, bc
+	ld a, [hli]
+	ld [de], a
+	inc de
+	ld a, [hl]
+	ld [de], a
+	inc de
+
+	ld hl, MON_LEVEL
+	add hl, bc
+	ld a, [hl]
+	ld [de], a
+	inc de
+
+	pop bc
+	push bc
+	ld a, c
+	ld hl, PartyMonNicknames
+	ld bc, PKMN_NAME_LENGTH
+	call AddNTimes
+	ld bc, PKMN_NAME_LENGTH - 1
+	call CopyBytes
+
+	pop bc
+	inc c
+	pop de
+	ld hl, HOF_MON_LENGTH
+	add hl, de
+	ld e, l
+	ld d, h
+	pop hl
+	jr .next
+
+.done
+	ld a, $ff
+	ld [de], a
+	ret
+; 865b5
+
+Function865b5: ; 865b5
+	push hl
+	call ClearBGPalettes
+	callba Function4e906
+	pop hl
+	ld a, [hli]
+	ld [TempMonSpecies], a
+	ld [CurPartySpecies], a
+rept 2
+	inc hl
+endr
+	ld a, [hli]
+	ld [TempMonDVs], a
+	ld a, [hli]
+	ld [TempMonDVs + 1], a
+	ld hl, TempMonDVs
+	predef GetUnownLetter
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	ld a, " "
+	call ByteFill
+	ld de, VTiles2 tile $31
+	predef GetBackpic
+	ld a, $31
+	ld [hFillBox], a
+	hlcoord 6, 6
+	lb bc, 6, 6
+	predef FillBox
+	ld a, $d0
+	ld [hSCY], a
+	ld a, $90
+	ld [hSCX], a
+	call WaitBGMap
+	xor a
+	ld [hBGMapMode], a
+	ld b, SCGB_1A
+	call GetSGBLayout
+	call SetPalettes
+	call Function86635
+	xor a
+	ld [wc2c6], a
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	ld a, " "
+	call ByteFill
+	hlcoord 6, 5
+	call _PrepMonFrontpic
+	call WaitBGMap
+	xor a
+	ld [hBGMapMode], a
+	ld [hSCY], a
+	call Function86643
+	ret
+; 86635
+
+Function86635: ; 86635
+.loop
+	ld a, [hSCX]
+	cp $70
+	ret z
+	add $4
+	ld [hSCX], a
+	call DelayFrame
+	jr .loop
+; 86643
+
+Function86643: ; 86643
+.loop
+	ld a, [hSCX]
+	and a
+	ret z
+rept 2
+	dec a
+endr
+	ld [hSCX], a
+	call DelayFrame
+	jr .loop
+; 86650
+
+_HallOfFamePC: ; 86650
+	call LoadFontsBattleExtra
+	xor a
+	ld [wJumptableIndex], a
+.loop
+	call Function8671c
+	ret c
+	call Function86665
+	ret c
+	ld hl, wJumptableIndex
+	inc [hl]
+	jr .loop
+; 86665
+
+Function86665: ; 86665
+	xor a
+	ld [wcf64], a
+.next
+	call Function86692
+	jr c, .start_button
+.loop
+	call JoyTextDelay
+	ld hl, hJoyLast
+	ld a, [hl]
+	and B_BUTTON
+	jr nz, .b_button
+	ld a, [hl]
+	and A_BUTTON
+	jr nz, .a_button
+	ld a, [hl]
+	and START
+	jr nz, .start_button
+	call DelayFrame
+	jr .loop
+
+.a_button
+	ld hl, wcf64
+	inc [hl]
+	jr .next
+
+.b_button
+	scf
+	ret
+
+.start_button
+	and a
+	ret
+; 86692
+
+Function86692: ; 86692
+; Print the number of times the player has entered the Hall of Fame.
+; If that number is above 200, print "HOF Master!" instead.
+	ld a, [wcf64]
+	cp $6
+	jr nc, .fail
+	ld hl, wc608 + 1
+	ld bc, $10
+	call AddNTimes
+	ld a, [hl]
+	cp $ff
+	jr nz, .okay
+
+.fail
+	scf
+	ret
+
+.okay
+	push hl
+	call ClearBGPalettes
+	pop hl
+	call Function86748
+	ld a, [wc608]
+	cp 200 + 1
+	jr c, .print_num_hof
+	ld de, String_866fc
+	hlcoord 1, 2
+	call PlaceString
+	hlcoord 13, 2
+	jr .finish
+
+.print_num_hof
+	ld de, String_8670c
+	hlcoord 1, 2
+	call PlaceString
+	hlcoord 2, 2
+	ld de, wc608
+	lb bc, 1, 3
+	call PrintNum
+	hlcoord 11, 2
+
+.finish
+	ld de, String_866fb
+	call PlaceString
+	call WaitBGMap
+	ld b, SCGB_1A
+	call GetSGBLayout
+	call SetPalettes
+	decoord 6, 5
+	ld c, $6
+	predef Functiond066e
+	and a
+	ret
+; 866fb
+
+String_866fb:
+	db "@"
+; 866fc
+
+String_866fc:
+	db "    HOF Master!@"
+; 8670c
+
+String_8670c:
+	db "    -Time Famer@"
+; 8671c
+
+
+Function8671c: ; 8671c
+	ld a, [wJumptableIndex]
+	cp NUM_HOF_TEAMS
+	jr nc, .full
+	ld hl, sHallOfFame
+	ld bc, HOF_LENGTH
+	call AddNTimes
+	ld a, BANK(sHallOfFame)
+	call GetSRAMBank
+	ld a, [hl]
+	and a
+	jr z, .fail
+	ld de, wc608
+	ld bc, HOF_LENGTH
+	call CopyBytes
+	call CloseSRAM
+	and a
+	ret
+
+.fail
+	call CloseSRAM
+
+.full
+	scf
+	ret
+; 86748
+
+Function86748: ; 86748
+	xor a
+	ld [hBGMapMode], a
+	ld a, [hli]
+	ld [TempMonSpecies], a
+	ld a, [hli]
+	ld [TempMonID], a
+	ld a, [hli]
+	ld [TempMonID + 1], a
+	ld a, [hli]
+	ld [TempMonDVs], a
+	ld a, [hli]
+	ld [TempMonDVs + 1], a
+	ld a, [hli]
+	ld [TempMonLevel], a
+	ld de, StringBuffer2
+	ld bc, 10
+	call CopyBytes
+	ld a, "@"
+	ld [StringBuffer2 + 10], a
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	ld a, " "
+	call ByteFill
+	hlcoord 0, 0
+	lb bc, 3, SCREEN_WIDTH - 2
+	call TextBox
+	hlcoord 0, 12
+	lb bc, 4, SCREEN_WIDTH - 2
+	call TextBox
+	ld a, [TempMonSpecies]
+	ld [CurPartySpecies], a
+	ld [wd265], a
+	ld hl, TempMonDVs
+	predef GetUnownLetter
+	xor a
+	ld [wc2c6], a
+	hlcoord 6, 5
+	call _PrepMonFrontpic
+	ld a, [CurPartySpecies]
+	cp EGG
+	jr z, .print_id_no
+	hlcoord 1, 13
+	ld a, "№"
+	ld [hli], a
+	ld [hl], "·"
+	hlcoord 3, 13
+	ld de, wd265
+	lb bc, PRINTNUM_LEADINGZEROS | 1, 3
+	call PrintNum
+	call GetBasePokemonName
+	hlcoord 7, 13
+	call PlaceString
+	ld a, BREEDMON
+	ld [MonType], a
+	callba GetGender
+	ld a, " "
+	jr c, .got_gender
+	ld a, "♂"
+	jr nz, .got_gender
+	ld a, "♀"
+
+.got_gender
+	hlcoord 18, 13
+	ld [hli], a
+	hlcoord 8, 14
+	ld a, "/"
+	ld [hli], a
+	ld de, StringBuffer2
+	call PlaceString
+	hlcoord 1, 16
+	call PrintLevel
+
+.print_id_no
+	hlcoord 7, 16
+	ld a, "<ID>"
+	ld [hli], a
+	ld a, "№"
+	ld [hli], a
+	ld [hl], "/"
+	hlcoord 10, 16
+	ld de, TempMonID
+	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
+	call PrintNum
+	ret
+; 86810
+
+Function86810: ; 86810
+	call ClearBGPalettes
+	ld hl, VTiles2 tile $63
+	ld de, FontExtra + $d0
+	lb bc, BANK(FontExtra), 1
+	call Request2bpp
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	ld a, " "
+	call ByteFill
+	callba GetPlayerBackpic
+	ld a, $31
+	ld [hFillBox], a
+	hlcoord 6, 6
+	lb bc, 6, 6
+	predef FillBox
+	ld a, $d0
+	ld [hSCY], a
+	ld a, $90
+	ld [hSCX], a
+	call WaitBGMap
+	xor a
+	ld [hBGMapMode], a
+	ld [CurPartySpecies], a
+	ld b, SCGB_1A
+	call GetSGBLayout
+	call SetPalettes
+	call Function86635
+	xor a
+	ld [wc2c6], a
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	ld a, " "
+	call ByteFill
+	callba Function88840
+	xor a
+	ld [hFillBox], a
+	hlcoord 12, 5
+	lb bc, 7, 7
+	predef FillBox
+	ld a, $c0
+	ld [hSCX], a
+	call WaitBGMap
+	xor a
+	ld [hBGMapMode], a
+	ld [hSCY], a
+	call Function86643
+	xor a
+	ld [hBGMapMode], a
+	hlcoord 0, 2
+	lb bc, 8, 9
+	call TextBox
+	hlcoord 0, 12
+	lb bc, 4, 18
+	call TextBox
+	hlcoord 2, 4
+	ld de, PlayerName
+	call PlaceString
+	hlcoord 1, 6
+	ld a, "<ID>"
+	ld [hli], a
+	ld a, "№"
+	ld [hli], a
+	ld [hl], "/"
+	hlcoord 4, 6
+	ld de, PlayerID
+	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
+	call PrintNum
+	hlcoord 1, 8
+	ld de, .PlayTime
+	call PlaceString
+	hlcoord 3, 9
+	ld de, GameTimeHours
+	lb bc, 2, 3
+	call PrintNum
+	ld [hl], 99
+	inc hl
+	ld de, GameTimeMinutes
+	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
+	call PrintNum
+	call WaitBGMap
+	callba Function26601
+	ret
+; 868ed
+
+.PlayTime
+	db "PLAY TIME@"
+; 868f7
+
--- a/event/kurt.asm
+++ b/event/kurt.asm
@@ -26,7 +26,7 @@
 	call LoadStandardMenuDataHeader
 	ld c, $1
 	xor a
-	ld [wd0e4], a
+	ld [wMenuScrollPosition], a
 	ld [wKurtApricornQuantity], a
 .loop
 	push bc
@@ -65,7 +65,7 @@
 	ld [wMenuCursorBuffer], a
 	xor a
 	ld [hBGMapMode], a
-	call Function352f
+	call InitScrollingMenu
 	call UpdateSprites
 	call HandleScrollingMenu
 	ld a, [wcf73]
@@ -139,7 +139,7 @@
 	call UpdateSprites
 	call .PlaceApricornName
 	call PlaceApricornQuantity
-	call Function321c
+	call ApplyTilemap
 	callba Function27a28
 	jr nc, .loop
 
--- /dev/null
+++ b/event/magnet_train.asm
@@ -1,0 +1,485 @@
+Special_MagnetTrain: ; 8cc04
+	ld a, [ScriptVar]
+	and a
+	jr nz, .ToGoldenrod
+	ld a, 1 ; forwards
+	lb bc, $40, $60
+	ld de, $fca0
+	jr .continue
+
+.ToGoldenrod
+	ld a, -1 ; backwards
+	lb bc, $c0, $a0
+	ld de, $b460
+
+.continue
+	ld h, a
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld a, h
+	ld [w5_d191], a
+	ld a, c
+	ld [w5_d192], a
+	ld a, b
+	ld [w5_d193], a
+	ld a, e
+	ld [w5_d194], a
+	ld a, d
+	ld [w5_d195], a
+	ld a, [hSCX]
+	push af
+	ld a, [hSCY]
+	push af
+	call Function8ccc9
+	ld hl, hVBlank
+	ld a, [hl]
+	push af
+	ld [hl], $1
+.loop
+	ld a, [wJumptableIndex]
+	and a
+	jr z, .initialize
+	bit 7, a
+	jr nz, .done
+	callab Function8cf69
+	call Function8cdf7
+	call Function8cc99
+	call Function3b0c
+	call DelayFrame
+	jr .loop
+
+.initialize
+	call Function8ceae
+	jr .loop
+
+.done
+	pop af
+	ld [hVBlank], a
+	call ClearBGPalettes
+	xor a
+	ld [hLCDStatCustom], a
+	ld [hLCDStatCustom + 1], a
+	ld [hLCDStatCustom + 2], a
+	ld [hSCX], a
+	ld [Requested2bppSource], a
+	ld [Requested2bppSource + 1], a
+	ld [Requested2bppDest], a
+	ld [Requested2bppDest + 1], a
+	ld [Requested2bpp], a
+	call ClearTileMap
+	pop af
+	ld [hSCY], a
+	pop af
+	ld [hSCX], a
+	xor a
+	ld [hBGMapMode], a
+	pop af
+	ld [rSVBK], a
+	ret
+; 8cc99
+
+Function8cc99: ; 8cc99
+	ld hl, LYOverridesBackup
+	ld c, $2f
+	ld a, [wcf64]
+	add a
+	ld [hSCX], a
+	call Function8ccc4
+	ld c, $30
+	ld a, [wcf65]
+	call Function8ccc4
+	ld c, $31
+	ld a, [wcf64]
+	add a
+	call Function8ccc4
+	ld a, [wd191]
+	ld d, a
+	ld hl, wcf64
+	ld a, [hl]
+rept 2
+	add d
+endr
+	ld [hl], a
+	ret
+; 8ccc4
+
+Function8ccc4: ; 8ccc4
+.asm_8ccc4
+	ld [hli], a
+	dec c
+	jr nz, .asm_8ccc4
+	ret
+; 8ccc9
+
+Function8ccc9: ; 8ccc9
+	call ClearBGPalettes
+	call ClearSprites
+	call DisableLCD
+	callab Function8cf53
+	call SetMagnetTrainPals
+	call DrawMagnetTrain
+	ld a, $90
+	ld [hWY], a
+	call EnableLCD
+	xor a
+	ld [hBGMapMode], a
+	ld [hSCX], a
+	ld [hSCY], a
+	ld a, [rSVBK]
+	push af
+	ld a, $1
+	ld [rSVBK], a
+	callba GetPlayerIcon
+	pop af
+	ld [rSVBK], a
+	ld hl, VTiles0
+	ld c, $4
+	call Request2bpp
+	ld hl, $c0
+	add hl, de
+	ld d, h
+	ld e, l
+	ld hl, VTiles0 tile $04
+	ld c, $4
+	call Request2bpp
+	call Function8cda6
+	ld hl, wJumptableIndex
+	xor a
+	ld [hli], a
+	ld a, [wd192]
+rept 3
+	ld [hli], a
+endr
+	ld de, MUSIC_MAGNET_TRAIN
+	call PlayMusic2
+	ret
+; 8cd27
+
+DrawMagnetTrain: ; 8cd27
+	hlbgcoord 0, 0
+	xor a
+.asm_8cd2b
+	call GetMagnetTrainBGTiles
+	ld b, 32 / 2
+	call .FillAlt
+	inc a
+	cp $12
+	jr c, .asm_8cd2b
+	hlbgcoord 0, 6
+	ld de, MagnetTrainTilemap1
+	ld c, 20
+	call .FillLine
+	hlbgcoord 0, 7
+	ld de, MagnetTrainTilemap2
+	ld c, 20
+	call .FillLine
+	hlbgcoord 0, 8
+	ld de, MagnetTrainTilemap3
+	ld c, 20
+	call .FillLine
+	hlbgcoord 0, 9
+	ld de, MagnetTrainTilemap4
+	ld c, 20
+	call .FillLine
+	ret
+; 8cd65
+
+.FillLine ; 8cd65
+	ld a, [de]
+	inc de
+	ld [hli], a
+	dec c
+	jr nz, .FillLine
+	ret
+; 8cd6c
+
+.FillAlt ; 8cd6c
+	ld [hl], e
+	inc hl
+	ld [hl], d
+	inc hl
+	dec b
+	jr nz, .FillAlt
+	ret
+; 8cd74
+
+GetMagnetTrainBGTiles: ; 8cd74
+	push hl
+	ld e, a
+	ld d, 0
+	ld hl, MagnetTrainBGTiles
+rept 2
+	add hl, de
+endr
+	ld e, [hl]
+	inc hl
+	ld d, [hl]
+	pop hl
+	ret
+; 8cd82
+
+MagnetTrainBGTiles: ; 8cd82
+; Alternating tiles for each line
+; of the Magnet Train tilemap.
+	db $4c, $4d ; bush
+	db $5c, $5d ; bush
+	db $4c, $4d ; bush
+	db $5c, $5d ; bush
+	db $08, $08 ; fence
+	db $18, $18 ; fence
+	db $1f, $1f ; track
+	db $31, $31 ; track
+	db $11, $11 ; track
+	db $11, $11 ; track
+	db $0d, $0d ; track
+	db $31, $31 ; track
+	db $04, $04 ; fence
+	db $18, $18 ; fence
+	db $4c, $4d ; bush
+	db $5c, $5d ; bush
+	db $4c, $4d ; bush
+	db $5c, $5d ; bush
+; 8cda6
+
+Function8cda6: ; 8cda6
+	ld hl, LYOverrides
+	ld bc, $90
+	ld a, [wd192]
+	call ByteFill
+	ld hl, LYOverridesBackup
+	ld bc, $90
+	ld a, [wd192]
+	call ByteFill
+	ld a, $43
+	ld [hLCDStatCustom], a
+	ret
+; 8cdc3
+
+SetMagnetTrainPals: ; 8cdc3
+	ld a, $1
+	ld [rVBK], a
+
+	; bushes
+	hlbgcoord 0, 0
+	ld bc, 4 bgrows
+	ld a, $2
+	call ByteFill
+
+	; train
+	hlbgcoord 0, 4
+	ld bc, 10 bgrows
+	xor a
+	call ByteFill
+
+	; more bushes
+	hlbgcoord 0, 14
+	ld bc, 4 bgrows
+	ld a, $2
+	call ByteFill
+
+	; train window
+	hlbgcoord 7, 8
+	ld bc, 6
+	ld a, $4
+	call ByteFill
+
+	ld a, $0
+	ld [rVBK], a
+	ret
+; 8cdf7
+
+Function8cdf7: ; 8cdf7
+	ld a, [wJumptableIndex]
+	ld e, a
+	ld d, 0
+	ld hl, Jumptable_8ce06
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 8ce06
+
+Jumptable_8ce06: ; 8ce06
+	dw Function8ce19
+	dw Function8ce6d
+	dw Function8ce47
+	dw Function8ce6d
+	dw Function8ce7a
+	dw Function8ce6d
+	dw Function8cea2
+; 8ce14
+
+Function8ce14: ; 8ce14
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+; 8ce19
+
+Function8ce19: ; 8ce19
+	ld d, $55
+	ld a, [wd194 + 1]
+	ld e, a
+	ld b, SPRITE_ANIM_INDEX_15
+	ld a, [rSVBK]
+	push af
+	ld a, $1
+	ld [rSVBK], a
+	ld a, [PlayerGender]
+	bit 0, a
+	jr z, .asm_8ce31
+	ld b, SPRITE_ANIM_INDEX_1F
+
+.asm_8ce31
+	pop af
+	ld [rSVBK], a
+	ld a, b
+	call _InitSpriteAnimStruct
+	ld hl, $3
+	add hl, bc
+	ld [hl], $0
+	call Function8ce14
+	ld a, $80
+	ld [wcf66], a
+	ret
+; 8ce47
+
+Function8ce47: ; 8ce47
+	ld hl, wd193
+	ld a, [wcf65]
+	cp [hl]
+	jr z, .asm_8ce64
+	ld e, a
+	ld a, [wd191]
+	xor $ff
+	inc a
+	add e
+	ld [wcf65], a
+	ld hl, wc3c0
+	ld a, [wd191]
+	add [hl]
+	ld [hl], a
+	ret
+
+.asm_8ce64
+	call Function8ce14
+	ld a, $80
+	ld [wcf66], a
+	ret
+; 8ce6d
+
+Function8ce6d: ; 8ce6d
+	ld hl, wcf66
+	ld a, [hl]
+	and a
+	jr z, .asm_8ce76
+	dec [hl]
+	ret
+
+.asm_8ce76
+	call Function8ce14
+	ret
+; 8ce7a
+
+Function8ce7a: ; 8ce7a
+	ld hl, wd194
+	ld a, [wcf65]
+	cp [hl]
+	jr z, .asm_8ce9e
+	ld e, a
+	ld a, [wd191]
+	xor $ff
+	inc a
+	ld d, a
+	ld a, e
+rept 2
+	add d
+endr
+	ld [wcf65], a
+	ld hl, wc3c0
+	ld a, [wd191]
+	ld d, a
+	ld a, [hl]
+rept 2
+	add d
+endr
+	ld [hl], a
+	ret
+
+	ret
+
+.asm_8ce9e
+	call Function8ce14
+	ret
+; 8cea2
+
+Function8cea2: ; 8cea2
+	ld a, $80
+	ld [wJumptableIndex], a
+	ld de, SFX_TRAIN_ARRIVED
+	call PlaySFX
+	ret
+; 8ceae
+
+Function8ceae: ; 8ceae
+	callba Function8cf69
+	call Function8cdf7
+	call Function8cc99
+	call Function3b0c
+	call DelayFrame
+	ld a, [rSVBK]
+	push af
+	ld a, $1
+	ld [rSVBK], a
+	ld a, [TimeOfDayPal]
+	push af
+	ld a, [wPermission]
+	push af
+	ld a, [TimeOfDay]
+	and $3
+	ld [TimeOfDayPal], a
+	ld a, $1
+	ld [wPermission], a
+	ld b, SCGB_09
+	call GetSGBLayout
+	call UpdateTimePals
+	ld a, [rBGP]
+	ld [wcfc7], a
+	ld a, [rOBP0]
+	ld [wcfc8], a
+	ld a, [rOBP1]
+	ld [wcfc9], a
+	pop af
+	ld [wPermission], a
+	pop af
+	ld [TimeOfDayPal], a
+	pop af
+	ld [rSVBK], a
+	ret
+; 8ceff
+
+MagnetTrainTilemap1:
+	db $1f, $05, $06, $0a, $0a
+	db $0a, $09, $0a, $0a, $0a
+	db $0a, $0a, $0a, $09, $0a
+	db $0a, $0a, $0b, $0c, $1f
+MagnetTrainTilemap2:
+	db $14, $15, $16, $1a, $1a
+	db $1a, $19, $1a, $1a, $1a
+	db $1a, $1a, $1a, $19, $1a
+	db $1a, $1a, $1b, $1c, $1d
+MagnetTrainTilemap3:
+	db $24, $25, $26, $27, $07
+	db $2f, $29, $28, $28, $28
+	db $28, $28, $28, $29, $07
+	db $2f, $2a, $2b, $2c, $2d
+MagnetTrainTilemap4:
+	db $20, $1f, $2e, $1f, $17
+	db $00, $2e, $1f, $1f, $1f
+	db $1f, $1f, $1f, $2e, $17
+	db $00, $1f, $2e, $1f, $0f
+; 8cf4f
--- a/event/mom.asm
+++ b/event/mom.asm
@@ -45,11 +45,11 @@
 ; 16254
 
 .CheckIfBankInitialized: ; 16254
-	ld a, [wBankOfMomMode]
+	ld a, [wMomSavingMoney]
 	bit 7, a
 	jr nz, .savingmoneyalready
 	set 7, a
-	ld [wBankOfMomMode], a
+	ld [wMomSavingMoney], a
 	ld a, $1
 	jr .done_0
 
@@ -75,7 +75,7 @@
 	ld a, %10000000
 
 .done_1
-	ld [wBankOfMomMode], a
+	ld [wMomSavingMoney], a
 	ld hl, UnknownText_0x16653
 	call PrintText
 	ld a, $8
@@ -168,7 +168,7 @@
 	ld de, StringBuffer2 + 3
 	ld bc, 3
 	call CopyBytes
-	ld bc, wd851
+	ld bc, wMomsMoney
 	ld de, StringBuffer2
 	callba GiveMoney
 	jr c, .CantDepositThatMuch
@@ -176,7 +176,7 @@
 	ld de, Money
 	callba TakeMoney
 	ld hl, StringBuffer2
-	ld de, wd851
+	ld de, wMomsMoney
 	ld bc, 3
 	call CopyBytes
 	ld de, SFX_TRANSACTION
@@ -232,7 +232,7 @@
 	ld de, StringBuffer2 + 3
 	ld bc, 3
 	call CopyBytes
-	ld de, wd851
+	ld de, wMomsMoney
 	ld bc, StringBuffer2
 	callba CompareMoney
 	jr c, .InsufficientFundsInBank
@@ -241,7 +241,7 @@
 	callba GiveMoney
 	jr c, .NotEnoughRoomInWallet
 	ld bc, StringBuffer2 + 3
-	ld de, wd851
+	ld de, wMomsMoney
 	callba TakeMoney
 	ld hl, StringBuffer2
 	ld de, Money
@@ -279,7 +279,7 @@
 	call YesNoBox
 	jr c, .StopSavingMoney
 	ld a, $81
-	ld [wBankOfMomMode], a
+	ld [wMomSavingMoney], a
 	ld hl, UnknownText_0x16685
 	call PrintText
 	ld a, $8
@@ -288,7 +288,7 @@
 
 .StopSavingMoney
 	ld a, $80
-	ld [wBankOfMomMode], a
+	ld [wMomSavingMoney], a
 	ld a, $7
 	ld [wJumptableIndex], a
 	ret
@@ -461,7 +461,7 @@
 	ld de, String_16699
 	call PlaceString
 	hlcoord 12, 2
-	ld de, wd851
+	ld de, wMomsMoney
 	lb bc, PRINTNUM_MONEY | 3, 6
 	call PrintNum
 	hlcoord 1, 4
--- /dev/null
+++ b/event/mom_phone.asm
@@ -1,0 +1,285 @@
+MomTriesToBuySomething:: ; fcfec
+	ld a, [wMapReentryScriptQueueFlag]
+	and a
+	ret nz
+	call GetMapHeaderPhoneServiceNybble
+	and a
+	ret nz
+	xor a
+	ld [wdc18], a
+	call CheckBalance_MomItem2
+	ret nc
+	call Functionfd0c3
+	ret nc
+	ld b, BANK(UnknownScript_0xfd00f)
+	ld de, UnknownScript_0xfd00f
+	callba LoadScriptBDE
+	scf
+	ret
+; fd00f
+
+UnknownScript_0xfd00f: ; 0xfd00f
+	callasm Functionfd017
+	farjump Script_ReceivePhoneCall
+; 0xfd017
+
+Functionfd017: ; fd017
+	call MomBuysItem_DeductFunds
+	call Functionfd0eb
+	ld a, [wdc18]
+	and a
+	jr nz, .ok
+	ld hl, wdc17
+	inc [hl]
+.ok
+	ld a, 1
+	ld [wCurrentCaller], a
+	ld bc, wd03f
+	ld hl, 0
+	add hl, bc
+	ld [hl], 0
+	inc hl
+	ld [hl], 1
+	ld hl, 9
+	add hl, bc
+	ld a, $3f
+	ld [hli], a
+	ld a, e
+	ld [hli], a
+	ld a, d
+	ld [hl], a
+	ret
+; fd044
+
+CheckBalance_MomItem2: ; fd044
+	ld a, [wdc17]
+	cp 10
+	jr nc, .nope
+	call GetItemFromMom
+	ld a, [hli]
+	ld [hMoneyTemp], a
+	ld a, [hli]
+	ld [hMoneyTemp + 1], a
+	ld a, [hli]
+	ld [hMoneyTemp + 2], a
+	ld de, wMomsMoney
+	ld bc, hMoneyTemp
+	callba CompareMoney
+	jr nc, .have_enough_money
+
+.nope
+	jr .check_have_2300
+
+.have_enough_money
+	scf
+	ret
+
+.check_have_2300
+	ld hl, hMoneyTemp
+	ld [hl], (2300 / $10000) ; $00
+	inc hl
+	ld [hl], ((2300 % $10000) / $100) ; $08
+	inc hl
+	ld [hl], (2300 % $100) ; $fc
+.loop
+	ld de, wdc19
+	ld bc, wMomsMoney
+	callba CompareMoney
+	jr z, .exact
+	jr nc, .less_than
+	call Functionfd099
+	jr .loop
+
+.less_than
+	xor a
+	ret
+
+.exact
+	call Functionfd099
+	ld a, 5
+	call RandomRange
+	inc a
+	ld [wdc18], a
+	scf
+	ret
+; fd099
+
+Functionfd099: ; fd099
+	ld de, wdc19
+	ld bc, hMoneyTemp
+	callba AddMoney
+	ret
+; fd0a6
+
+
+MomBuysItem_DeductFunds: ; fd0a6 (3f:50a6)
+	call GetItemFromMom
+	ld de, 3
+	add hl, de
+	ld a, [hli]
+	ld [hMoneyTemp], a
+	ld a, [hli]
+	ld [hMoneyTemp + 1], a
+	ld a, [hli]
+	ld [hMoneyTemp + 2], a
+	ld de, wMomsMoney
+	ld bc, hMoneyTemp
+	callba TakeMoney
+	ret
+
+
+Functionfd0c3: ; fd0c3
+	call GetItemFromMom
+	ld de, 6
+	add hl, de
+	ld a, [hli]
+	cp 1
+	jr z, .not_doll
+	ld a, [hl]
+	ld c, a
+	ld b, 1
+	callba DecorationFlagAction_c
+	scf
+	ret
+
+.not_doll
+	ld a, [hl]
+	ld [CurItem], a
+	ld a, $1
+	ld [wItemQuantityChangeBuffer], a
+	ld hl, PCItems
+	call ReceiveItem
+	ret
+; fd0eb
+
+
+Functionfd0eb: ; fd0eb (3f:50eb)
+	call GetItemFromMom
+	ld de, 6 ; field
+	add hl, de
+	ld a, [hli]
+	ld de, Script_MomBoughtItem
+	cp 1
+	ret z
+	ld de, Script_MomBoughtDoll
+	ret
+; fd0fd (3f:50fd)
+
+Script_MomBoughtItem: ; 0xfd0fd
+	writetext _MomText_HiHowAreYou
+	writetext _MomText_FoundAnItem
+	writetext _MomText_BoughtWithYourMoney
+	writetext _MomText_ItsInPC
+	end
+; 0xfd10a
+
+Script_MomBoughtDoll: ; 0xfd10a
+	writetext _MomText_HiHowAreYou
+	writetext _MomText_FoundADoll
+	writetext _MomText_BoughtWithYourMoney
+	writetext _MomText_ItsInRoom
+	end
+; 0xfd117
+
+
+GetItemFromMom: ; fd117
+	ld a, [wdc18]
+	and a
+	jr z, .zero
+	dec a
+	ld de, MomItems_1
+	jr .incave
+
+.zero
+	ld a, [wdc17]
+	cp 10 ; length of MomItems_2
+	jr c, .ok
+	xor a
+
+.ok
+	ld de, MomItems_2
+
+.incave
+	ld l, a
+	ld h, 0
+rept 3 ; multiply hl by 8
+	add hl, hl
+endr
+	add hl, de
+	ret
+; fd136
+
+momitem: macro
+; money to trigger, cost, kind, item
+	dt \1
+	dt \2
+	db \3, \4
+ENDM
+
+
+MomItems_1: ; fd136
+	momitem      0,   600, MOM_ITEM, SUPER_POTION
+	momitem      0,    90, MOM_ITEM, ANTIDOTE
+	momitem      0,   180, MOM_ITEM, POKE_BALL
+	momitem      0,   450, MOM_ITEM, ESCAPE_ROPE
+	momitem      0,   500, MOM_ITEM, GREAT_BALL
+; fd15e
+
+MomItems_2: ; fd15e
+	momitem    900,   600, MOM_ITEM, SUPER_POTION
+	momitem   4000,   270, MOM_ITEM, REPEL
+	momitem   7000,   600, MOM_ITEM, SUPER_POTION
+	momitem  10000,  1800, MOM_DOLL, DECO_CHARMANDER_DOLL
+	momitem  15000,  3000, MOM_ITEM, MOON_STONE
+	momitem  19000,   600, MOM_ITEM, SUPER_POTION
+	momitem  30000,  4800, MOM_DOLL, DECO_CLEFAIRY_DOLL
+	momitem  40000,   900, MOM_ITEM, HYPER_POTION
+	momitem  50000,  8000, MOM_DOLL, DECO_PIKACHU_DOLL
+	momitem 100000, 22800, MOM_DOLL, DECO_BIG_SNORLAX_DOLL
+; fd1ae
+
+	db 0, 0, 0 ; XXX
+
+_MomText_HiHowAreYou: ; 0xfd1b1
+	; Hi,  ! How are you?
+	text_jump UnknownText_0x1bc615
+	db "@"
+; 0xfd1b6
+
+_MomText_FoundAnItem: ; 0xfd1b6
+	; I found a useful item shopping, so
+	text_jump UnknownText_0x1bc62a
+	db "@"
+; 0xfd1bb
+
+_MomText_BoughtWithYourMoney: ; 0xfd1bb
+	; I bought it with your money. Sorry!
+	text_jump UnknownText_0x1bc64e
+	db "@"
+; 0xfd1c0
+
+_MomText_ItsInPC: ; 0xfd1c0
+	; It's in your PC. You'll like it!
+	text_jump UnknownText_0x1bc673
+	db "@"
+; 0xfd1c5
+
+_MomText_FoundADoll: ; 0xfd1c5
+	; While shopping today, I saw this adorable doll, so
+	text_jump UnknownText_0x1bc693
+	db "@"
+; 0xfd1ca
+
+_MomText_ItsInRoom: ; 0xfd1ca
+	; It's in your room. You'll love it!
+	text_jump UnknownText_0x1bc6c7
+	db "@"
+; 0xfd1cf
+
+	db 0 ; XXX
+
+Functionfd1d0: ; fd1d0
+	ret
+; fd1d1
+
+	ret ; XXX
--- /dev/null
+++ b/event/photo.asm
@@ -1,0 +1,299 @@
+UnownPrinter: ; 16be4
+	ld a, [UnownDex]
+	and a
+	ret z
+
+	ld a, [hInMenu]
+	push af
+	ld a, $1
+	ld [hInMenu], a
+	ld a, [Options]
+	push af
+	set NO_TEXT_SCROLL, a
+	ld [Options], a
+	call ClearBGPalettes
+	call ClearTileMap
+
+	ld de, UnownDexATile
+	ld hl, VTiles1 tile $6f
+	lb bc, BANK(UnownDexBTile), 1
+	call Request1bpp
+
+	ld de, UnownDexBTile
+	ld hl, VTiles1 tile $75
+	lb bc, BANK(UnownDexBTile), 1
+	call Request1bpp
+
+	hlcoord 0, 0
+	lb bc, 3, 18
+	call TextBox
+
+	hlcoord 0, 5
+	lb bc, 7, 7
+	call TextBox
+
+	hlcoord 0, 14
+	lb bc, 2, 18
+	call TextBox
+
+	hlcoord 1, 2
+	ld de, AlphRuinsStampString
+	call PlaceString
+
+	hlcoord 1, 16
+	ld de, UnownDexDoWhatString
+	call PlaceString
+
+	hlcoord 10, 6
+	ld de, UnownDexMenuString
+	call PlaceString
+
+	xor a
+	ld [wJumptableIndex], a
+	call Function16cc8
+	call WaitBGMap
+
+	ld a, UNOWN
+	ld [CurPartySpecies], a
+	xor a
+	ld [TempMonDVs], a
+	ld [TempMonDVs + 1], a
+
+	ld b, SCGB_1C
+	call GetSGBLayout
+	call SetPalettes
+
+.joy_loop
+	call JoyTextDelay
+
+	ld a, [hJoyPressed]
+	and B_BUTTON
+	jr nz, .pressed_b
+
+	ld a, [hJoyPressed]
+	and A_BUTTON
+	jr nz, .pressed_a
+
+	call Function16ca0
+	call DelayFrame
+	jr .joy_loop
+
+.pressed_a
+	ld a, [wJumptableIndex]
+	push af
+	callba PrintUnownStamp
+	call RestartMapMusic
+	pop af
+	ld [wJumptableIndex], a
+	jr .joy_loop
+
+.pressed_b
+	pop af
+	ld [Options], a
+	pop af
+	ld [hInMenu], a
+	call ReturnToMapFromSubmenu
+	ret
+; 16ca0
+
+Function16ca0: ; 16ca0
+	ld a, [hJoyLast]
+	and D_RIGHT
+	jr nz, .press_right
+	ld a, [hJoyLast]
+	and D_LEFT
+	jr nz, .press_left
+	ret
+
+.press_left
+	ld hl, wJumptableIndex
+	ld a, [hl]
+	and a
+	jr nz, .wrap_around_left
+	ld [hl], $1b
+
+.wrap_around_left
+	dec [hl]
+	jr .return
+
+.press_right
+	ld hl, wJumptableIndex
+	ld a, [hl]
+	cp $1a
+	jr c, .wrap_around_right
+	ld [hl], $ff
+
+.wrap_around_right
+	inc [hl]
+
+.return
+	call Function16cc8
+	ret
+; 16cc8
+
+Function16cc8: ; 16cc8
+	ld a, [wJumptableIndex]
+	cp 26
+	jr z, Function16d20
+	inc a
+	ld [UnownLetter], a
+	ld a, UNOWN
+	ld [CurPartySpecies], a
+	xor a
+	ld [wc2c6], a
+	ld de, VTiles2
+	predef GetFrontpic
+	call Function16cff
+	hlcoord 1, 6
+	xor a
+	ld [hFillBox], a
+	lb bc, 7, 7
+	predef FillBox
+	ld de, VTiles2 tile $31
+	callba Functione0000
+	ret
+; 16cff
+
+Function16cff: ; 16cff
+	ld a, [rSVBK]
+	push af
+	ld a, $6
+	ld [rSVBK], a
+
+	ld a, BANK(sScratch)
+	call GetSRAMBank
+	ld de, w6_d000
+	ld hl, sScratch
+	ld a, [hROMBank]
+	ld b, a
+	ld c, $31
+	call Get2bpp
+	call CloseSRAM
+
+	pop af
+	ld [rSVBK], a
+	ret
+; 16d20
+
+Function16d20: ; 16d20
+	hlcoord 1, 6
+	lb bc, 7, 7
+	call ClearBox
+	hlcoord 1, 9
+	ld de, UnownDexVacantString
+	call PlaceString
+	xor a
+	call GetSRAMBank
+	ld hl, sScratch
+	ld bc, $31 tiles
+	xor a
+	call ByteFill
+	ld hl, VTiles2 tile $31
+	ld de, sScratch
+	ld c, $31
+	ld a, [hROMBank]
+	ld b, a
+	call Get2bpp
+	call CloseSRAM
+	ld c, 20
+	call DelayFrames
+	ret
+; 16d57
+
+AlphRuinsStampString:
+	db " ALPH RUINS STAMP@"
+
+UnownDexDoWhatString:
+	db "Do what?@"
+
+UnownDexMenuString:
+	db   "♂ PRINT"
+	next "♀ CANCEL"
+	next "← PREVIOUS"
+	next "→ NEXT"
+	db   "@"
+
+UnownDexVacantString:
+	db "VACANT@"
+; 16d9c
+
+UnownDexATile: ; 16d9c
+INCBIN "gfx/unknown/016d9c.1bpp"
+UnownDexBTile: ; 16da4
+INCBIN "gfx/unknown/016da4.1bpp"
+; 16dac
+
+Function16dac: ; 16dac
+	hlcoord 0, 0
+	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+	ld a, " "
+	call ByteFill
+	hlcoord 7, 11
+	ld a, $31
+	ld [hFillBox], a
+	lb bc, 7, 7
+	predef FillBox
+	ret
+; 16dc7
+
+PhotoStudio: ; 16dc7
+	ld hl, .Text_AskWhichMon
+	call PrintText
+	callba SelectMonFromParty
+	jr c, .cancel
+	ld a, [CurPartySpecies]
+	cp EGG
+	jr z, .egg
+
+	ld hl, .Text_HoldStill
+	call PrintText
+	call DisableSpriteUpdates
+	callba PrintPartymon
+	call Function2b74
+	ld a, [hPrinter]
+	and a
+	jr nz, .cancel
+	ld hl, .Text_Presto
+	jr .print_text
+
+.cancel
+	ld hl, .Text_NoPicture
+	jr .print_text
+
+.egg
+	ld hl, .Text_Egg
+
+.print_text
+	call PrintText
+	ret
+; 16e04
+
+.Text_AskWhichMon: ; 0x16e04
+	; Which #MON should I photo- graph?
+	text_jump UnknownText_0x1be024
+	db "@"
+; 0x16e09
+
+.Text_HoldStill: ; 0x16e09
+	; All righty. Hold still for a bit.
+	text_jump UnknownText_0x1be047
+	db "@"
+; 0x16e0e
+
+.Text_Presto: ; 0x16e0e
+	; Presto! All done. Come again, OK?
+	text_jump UnknownText_0x1be06a
+	db "@"
+; 0x16e13
+
+.Text_NoPicture: ; 0x16e13
+	; Oh, no picture? Come again, OK?
+	text_jump UnknownText_0x1c0000
+	db "@"
+; 0x16e18
+
+.Text_Egg: ; 0x16e18
+	; An EGG? My talent is worth more…
+	text_jump UnknownText_0x1c0021
+	db "@"
+; 0x16e1d
--- a/event/poke_seer.asm
+++ b/event/poke_seer.asm
@@ -1,12 +1,19 @@
-SEER_INTRO      EQU 0
-SEER_CANT_TELL  EQU 1
-SEER_MET_AT     EQU 2
-SEER_TIME_LEVEL EQU 3
-SEER_TRADED     EQU 4
-SEER_CANCEL     EQU 5
-SEER_EGG        EQU 6
-SEER_LEVEL_ONLY EQU 7
+	const_def
+	const SEER_INTRO
+	const SEER_CANT_TELL
+	const SEER_MET_AT
+	const SEER_TIME_LEVEL
+	const SEER_TRADED
+	const SEER_CANCEL
+	const SEER_EGG
+	const SEER_LEVEL_ONLY
 
+	const_def
+	const SEERACTION_MET
+	const SEERACTION_TRADED
+	const SEERACTION_CANT_TELL_1
+	const SEERACTION_CANT_TELL_2
+	const SEERACTION_LEVEL_ONLY
 
 SpecialPokeSeer: ; 4f0bc
 	ld a, SEER_INTRO
@@ -44,7 +51,7 @@
 
 
 SeerAction: ; 4f0ee
-	ld a, [wd002]
+	ld a, [wSeerAction]
 	ld hl, SeerActions
 	rst JumpTable
 	ret
@@ -100,29 +107,30 @@
 	ld a, MON_CAUGHTDATA
 	call GetPartyParamLocation
 	ld a, [hli]
-	ld [wd03b], a
+	ld [wSeerCaughtData], a
 	ld a, [hld]
-	ld [wd03b + 1], a
+	ld [wSeerCaughtGender], a
 	or [hl]
-	jr z, .asm_4f170
+	jr z, .error
 
-	ld a, 1
-	ld [wd002], a
+	ld a, SEERACTION_TRADED
+	ld [wSeerAction], a
 
 	ld a, MON_ID
 	call GetPartyParamLocation
 	ld a, [PlayerID]
 	cp [hl]
-	jr nz, .asm_4f15f
+	jr nz, .traded
 
 	inc hl
 	ld a, [PlayerID + 1]
-	jr nz, .asm_4f15f
+	; cp [hl]
+	jr nz, .traded
 
-	ld a, 0
-	ld [wd002], a
+	ld a, SEERACTION_MET
+	ld [wSeerAction], a
 
-.asm_4f15f
+.traded
 	call GetCaughtLevel
 	call GetCaughtOT
 	call GetCaughtName
@@ -131,9 +139,9 @@
 	and a
 	ret
 
-.asm_4f170
-	ld a, 2
-	ld [wd002], a
+.error
+	ld a, SEERACTION_CANT_TELL_1
+	ld [wSeerAction], a
 	ret
 ; 4f176
 
@@ -142,7 +150,7 @@
 	ld hl, PartyMonNicknames
 	ld bc, PKMN_NAME_LENGTH
 	call AddNTimes
-	ld de, wd003
+	ld de, wSeerNickname
 	ld bc, PKMN_NAME_LENGTH
 	call CopyBytes
 	ret
@@ -150,12 +158,12 @@
 
 GetCaughtLevel: ; 4f18c
 	ld a, "@"
-	ld hl, wd036
+	ld hl, wSeerCaughtLevelString
 	ld bc, 4
 	call ByteFill
 
 	; caught level
-	ld a, [wd03b]
+	ld a, [wSeerCaughtData]
 	and $3f
 	jr z, .unknown
 	cp 1 ; hatched from an egg
@@ -163,15 +171,15 @@
 	ld a, 5 ; egg hatch level
 
 .print
-	ld [wd038 + 2], a
-	ld hl, wd036
-	ld de, wd038 + 2
+	ld [wSeerCaughtLevel], a
+	ld hl, wSeerCaughtLevelString
+	ld de, wSeerCaughtLevel
 	lb bc, PRINTNUM_RIGHTALIGN | 1, 3
 	call PrintNum
 	ret
 
 .unknown
-	ld de, wd036
+	ld de, wSeerCaughtLevelString
 	ld hl, .unknown_level
 	ld bc, 4
 	call CopyBytes
@@ -183,7 +191,7 @@
 ; 4f1c5
 
 GetCaughtTime: ; 4f1c5
-	ld a, [wd03b]
+	ld a, [wSeerCaughtData]
 	and $c0
 	jr z, .none
 
@@ -194,13 +202,13 @@
 	call GetNthString
 	ld d, h
 	ld e, l
-	ld hl, wd01f
+	ld hl, wSeerTimeOfDay
 	call CopyName2
 	and a
 	ret
 
 .none
-	ld de, wd01f
+	ld de, wSeerTimeOfDay
 	call UnknownCaughtData
 	ret
 ; 4f1e6
@@ -213,7 +221,7 @@
 
 UnknownCaughtData: ; 4f1f8
 	ld hl, .unknown
-	ld bc, $000b
+	ld bc, NAME_LENGTH
 	call CopyBytes
 	ret
 ; 4f202
@@ -223,35 +231,35 @@
 ; 4f20a
 
 GetCaughtLocation: ; 4f20a
-	ld a, [wd03b + 1]
+	ld a, [wSeerCaughtGender]
 	and $7f
-	jr z, .asm_4f22e
+	jr z, .Unknown
 	cp $7f
-	jr z, .asm_4f234
+	jr z, .event
 	cp $7e
-	jr z, .asm_4f23b
+	jr z, .fail
 	ld e, a
 	callba GetLandmarkName
 	ld hl, StringBuffer1
-	ld de, wd00e
-	ld bc, $0011
+	ld de, wSeerCaughtLocation
+	ld bc, 17
 	call CopyBytes
 	and a
 	ret
 
-.asm_4f22e
-	ld de, wd00e
+.Unknown
+	ld de, wSeerCaughtLocation
 	jp UnknownCaughtData
 
-.asm_4f234
-	ld a, $4
-	ld [wd002], a
+.event
+	ld a, SEERACTION_LEVEL_ONLY
+	ld [wSeerAction], a
 	scf
 	ret
 
-.asm_4f23b
-	ld a, $3
-	ld [wd002], a
+.fail
+	ld a, SEERACTION_CANT_TELL_2
+	ld [wSeerAction], a
 	scf
 	ret
 ; 4f242
@@ -261,17 +269,19 @@
 	ld hl, PartyMonOT
 	ld bc, NAME_LENGTH
 	call AddNTimes
-	ld de, wd02a
-	ld bc, $000b
+	ld de, wSeerOTName
+	ld bc, NAME_LENGTH
 	call CopyBytes
+
+; this routine is useless in Western localizations
 	ld hl, .male
-	ld a, [wd03b + 1]
+	ld a, [wSeerCaughtGender]
 	bit 7, a
-	jr z, .asm_4f264
+	jr z, .got_grammar
 	ld hl, .female
 
-.asm_4f264
-	ld de, wd034 + 1
+.got_grammar
+	ld de, wSeerOTNameGrammar
 	ld a, "@"
 	ld [de], a
 	ret
@@ -360,7 +370,7 @@
 SeerAdvice: ; 4f2b4
 	ld a, MON_LEVEL
 	call GetPartyParamLocation
-	ld a, [wd038 + 2]
+	ld a, [wSeerCaughtLevel]
 	ld c, a
 	ld a, [hl]
 	sub c
--- a/event/unown.asm
+++ b/event/unown.asm
@@ -124,7 +124,7 @@
 	ld [hBGMapMode], a
 	call MenuBox
 	call UpdateSprites
-	call Function321c
+	call ApplyTilemap
 	call MenuBoxCoord2Tile
 	inc hl
 	ld d, $0
--- a/event/whiteout.asm
+++ b/event/whiteout.asm
@@ -37,12 +37,12 @@
 	call ClearScreen
 	call Function3200
 	call HideSprites
-	call Function4f0
+	call RotateThreePalettesLeft
 	ret
 ; 1250a
 
 BattleBGMap: ; 1250a
-	ld b, $0
+	ld b, SCGB_00
 	call GetSGBLayout
 	call SetPalettes
 	ret
--- /dev/null
+++ b/gfx/font.asm
@@ -1,0 +1,236 @@
+FontExtra:
+INCBIN "gfx/misc/font_extra.2bpp"
+
+Font:
+INCBIN "gfx/misc/font.1bpp"
+
+FontBattleExtra:
+INCBIN "gfx/misc/font_battle_extra.2bpp"
+
+Frames: ; f8800
+INCBIN "gfx/frames/1.1bpp"
+INCBIN "gfx/frames/2.1bpp"
+INCBIN "gfx/frames/3.1bpp"
+INCBIN "gfx/frames/4.1bpp"
+INCBIN "gfx/frames/5.1bpp"
+INCBIN "gfx/frames/6.1bpp"
+INCBIN "gfx/frames/7.1bpp"
+INCBIN "gfx/frames/8.1bpp"
+INCBIN "gfx/frames/9.1bpp"
+; f89b0
+
+; TODO: Various misc graphics here.
+
+GFX_f89b0: ; f89b0
+INCBIN "gfx/unknown/0f89b0.2bpp"
+; f8a90
+
+ShinyIcon: ; f8a90
+INCBIN "gfx/stats/shiny.2bpp"
+
+GFX_f8aa0: ; f8aa0
+INCBIN "gfx/unknown/0f8aa0.2bpp"
+; f8ac0
+
+EnemyHPBarBorderGFX: ; f8ac0
+INCBIN "gfx/battle/enemy_hp_bar_border.1bpp"
+; f8ae0
+
+HPExpBarBorderGFX: ; f8ae0
+INCBIN "gfx/battle/hp_exp_bar_border.1bpp"
+; f8b10
+
+ExpBarGFX: ; f8b10
+INCBIN "gfx/battle/expbar.2bpp"
+; f8ba0
+
+TownMapGFX: ; f8ba0
+INCBIN "gfx/misc/town_map.2bpp.lz"
+; f8ea4
+
+GFX_f8ea4: ; unused
+INCBIN "gfx/unknown/0f8ea4.2bpp"
+; f8f24
+
+OverworldPhoneIconGFX: ; f8f24
+INCBIN "gfx/mobile/overworld_phone_icon.2bpp"
+; f8f34
+
+GFX_f8f34: ; unused
+INCBIN "gfx/unknown/0f8f34.2bpp"
+; f9204
+
+TextBoxSpaceGFX: ; f9204
+INCBIN "gfx/frames/space.2bpp"
+; f9214
+
+MobilePhoneTilesGFX: ; f9214
+INCBIN "gfx/mobile/phone_tiles.2bpp"
+; f9344
+
+MapEntryFrameGFX: ; f9344
+INCBIN "gfx/frames/map_entry_sign.2bpp"
+; f9424
+
+GFX_f9424: ; f9424
+INCBIN "gfx/unknown/0f9424.2bpp"
+; f9434
+
+Footprints: ; f9434
+INCBIN "gfx/misc/footprints.1bpp"
+; fb434
+
+; This and the following two functions are unreferenced.
+Unknown_fb434:
+	db 0
+
+Functionfb435: ; 4b435
+	ld a, [Unknown_fb434]
+	and a
+	jp nz, Get1bpp_2
+	jp Get1bpp
+; fb43f
+
+Functionfb43f: ; fb43f
+	ld a, [Unknown_fb434]
+	and a
+	jp nz, Get2bpp_2
+	jp Get2bpp
+; End unreferenced block
+; fb449
+
+_LoadStandardFont:: ; fb449
+	ld de, Font
+	ld hl, VTiles1
+	lb bc, BANK(Font), $80
+	ld a, [rLCDC]
+	bit 7, a
+	jp z, Copy1bpp
+
+	ld de, Font
+	ld hl, VTiles1
+	lb bc, BANK(Font), $20
+	call Get1bpp_2
+	ld de, Font + $20 * LEN_1BPP_TILE
+	ld hl, VTiles1 tile $20
+	lb bc, BANK(Font), $20
+	call Get1bpp_2
+	ld de, Font + $40 * LEN_1BPP_TILE
+	ld hl, VTiles1 tile $40
+	lb bc, BANK(Font), $20
+	call Get1bpp_2
+	ld de, Font + $60 * LEN_1BPP_TILE
+	ld hl, VTiles1 tile $60
+	lb bc, BANK(Font), $20
+	call Get1bpp_2
+	ret
+; fb48a
+
+_LoadFontsExtra1:: ; fb48a
+	ld de, MobilePhoneTilesGFX
+	ld hl, VTiles2 tile $60
+	lb bc, BANK(MobilePhoneTilesGFX), 1
+	call Get1bpp_2
+	ld de, OverworldPhoneIconGFX
+	ld hl, VTiles2 tile $62
+	lb bc, BANK(OverworldPhoneIconGFX), 1
+	call Get2bpp_2
+	ld de, FontExtra + 3 * LEN_2BPP_TILE
+	ld hl, VTiles2 tile $63
+	lb bc, BANK(FontExtra), $16
+	call Get2bpp_2
+	jr LoadFrame
+; fb4b0
+
+_LoadFontsExtra2:: ; fb4b0
+	ld de, GFX_f9424
+	ld hl, VTiles2 tile $61
+	ld b, BANK(GFX_f9424)
+	ld c, 1
+	call Get2bpp_2
+	ret
+; fb4be
+
+_LoadFontsBattleExtra:: ; fb4be
+	ld de, FontBattleExtra
+	ld hl, VTiles2 tile $60
+	lb bc, BANK(FontBattleExtra), $19
+	call Get2bpp_2
+	jr LoadFrame
+; fb4cc
+
+LoadFrame: ; fb4cc
+	ld a, [TextBoxFrame]
+	and 7
+	ld bc, TILES_PER_FRAME * LEN_1BPP_TILE
+	ld hl, Frames
+	call AddNTimes
+	ld d, h
+	ld e, l
+	ld hl, VTiles2 tile $79
+	lb bc, BANK(Frames), TILES_PER_FRAME
+	call Get1bpp_2
+	ld hl, VTiles2 tile $7f
+	ld de, TextBoxSpaceGFX
+	lb bc, BANK(TextBoxSpaceGFX), 1
+	call Get1bpp_2
+	ret
+; fb4f2
+
+LoadBattleFontsHPBar: ; fb4f2
+	ld de, FontBattleExtra
+	ld hl, VTiles2 tile $60
+	lb bc, BANK(FontBattleExtra), $c
+	call Get2bpp_2
+	ld hl, VTiles2 tile $70
+	ld de, FontBattleExtra + $10 * LEN_2BPP_TILE
+	lb bc, BANK(FontBattleExtra), 3
+	call Get2bpp_2
+	call LoadFrame
+
+LoadHPBar: ; fb50d
+	ld de, EnemyHPBarBorderGFX
+	ld hl, VTiles2 tile $6c
+	lb bc, BANK(EnemyHPBarBorderGFX), 4
+	call Get1bpp_2
+	ld de, HPExpBarBorderGFX
+	ld hl, VTiles2 tile $73
+	lb bc, BANK(HPExpBarBorderGFX), 6
+	call Get1bpp_2
+	ld de, ExpBarGFX
+	ld hl, VTiles2 tile $55
+	lb bc, BANK(ExpBarGFX), 9
+	call Get2bpp_2
+	ld de, MobilePhoneTilesGFX + 9 * LEN_2BPP_TILE
+	ld hl, VTiles2 tile $5e
+	lb bc, BANK(MobilePhoneTilesGFX), 2
+	call Get2bpp_2
+	ret
+; fb53e
+
+Functionfb53e: ; fb53e
+	call _LoadFontsBattleExtra
+	ld de, EnemyHPBarBorderGFX
+	ld hl, VTiles2 tile $6c
+	lb bc, BANK(EnemyHPBarBorderGFX), 4
+	call Get1bpp_2
+	ld de, HPExpBarBorderGFX
+	ld hl, VTiles2 tile $78
+	lb bc, BANK(HPExpBarBorderGFX), 1
+	call Get1bpp_2
+	ld de, HPExpBarBorderGFX + 3 * LEN_1BPP_TILE
+	ld hl, VTiles2 tile $76
+	lb bc, BANK(HPExpBarBorderGFX), 2
+	call Get1bpp_2
+	ld de, ExpBarGFX
+	ld hl, VTiles2 tile $55
+	lb bc, BANK(ExpBarGFX), 8
+	call Get2bpp_2
+
+Functionfb571: ; fb571
+	ld de, GFX_f89b0
+	ld hl, VTiles2 tile $31
+	lb bc, BANK(GFX_f89b0), $11
+	call Get2bpp_2
+	ret
+; fb57e
binary files /dev/null b/gfx/font/english.1bpp differ
binary files /dev/null b/gfx/font/french_german.1bpp differ
binary files /dev/null b/gfx/font/spanish_italian.1bpp differ
binary files /dev/null b/gfx/icon/mail2.2bpp differ
--- /dev/null
+++ b/gfx/mail.asm
@@ -1,0 +1,1098 @@
+ReadPartyMonMail: ; b9229
+	ld a, [CurPartyMon]
+	ld hl, sPartyMail
+	ld bc, MAIL_STRUCT_LENGTH
+	call AddNTimes
+	ld d, h
+	ld e, l
+ReadAnyMail: ; b9237
+	push de
+	call ClearBGPalettes
+	call ClearSprites
+	call ClearTileMap
+	call DisableLCD
+	call LoadFontsExtra
+	pop de
+	push de
+	ld a, BANK(sPartyMail)
+	call GetSRAMBank
+	callba IsMailEuropean
+	call CloseSRAM
+	ld a, c
+	ld de, StandardEnglishFont
+	or a
+	jr z, .got_font
+	ld de, FrenchGermanFont
+	sub $3
+	jr c, .got_font
+	ld de, SpanishItalianFont
+
+.got_font
+	ld hl, VTiles1
+	lb bc, BANK(StandardEnglishFont), $80
+	call Get1bpp
+	pop de
+	call Functionb92b8
+	call EnableLCD
+	call WaitBGMap
+	ld a, [Buffer3]
+	ld e, a
+	callba Function8cb4
+	call SetPalettes
+	xor a
+	ld [hJoyPressed], a
+	call .loop
+	call ClearBGPalettes
+	call DisableLCD
+	call LoadStandardFont
+	jp EnableLCD
+
+.loop
+	call GetJoypad
+	ld a, [hJoyPressed]
+	and A_BUTTON | B_BUTTON | START
+	jr z, .loop
+	and START
+	jr nz, .pressed_start
+	ret
+
+.pressed_start
+	ld a, [wJumptableIndex]
+	push af
+	callab PrintMail ; printer
+	pop af
+	ld [wJumptableIndex], a
+	jr .loop
+; b92b8
+
+Functionb92b8: ; b92b8
+	ld h, d
+	ld l, e
+	push hl
+	ld a, $0
+	call GetSRAMBank
+	ld de, sPartyMon1MailAuthorID - sPartyMon1Mail
+	add hl, de
+	ld a, [hli]
+	ld [Buffer1], a
+	ld a, [hli]
+	ld [Buffer2], a
+	ld a, [hli]
+	ld [CurPartySpecies], a
+	ld b, [hl]
+	call CloseSRAM
+	ld hl, MailGFXPointers
+	ld c, 0
+.loop
+	ld a, [hli]
+	cp b
+	jr z, .got_pointer
+	cp -1
+	jr z, .invalid
+	inc c
+rept 2
+	inc hl
+endr
+	jr .loop
+
+.invalid
+	ld hl, MailGFXPointers
+	inc hl
+
+.got_pointer
+	ld a, c
+	ld [Buffer3], a
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld de, .done
+	pop bc
+	push de
+	jp [hl]
+.done
+	ret
+; b92f8
+
+MailGFXPointers: ; b92f8
+	dbw FLOWER_MAIL,  LoadFlowerMailGFX
+	dbw SURF_MAIL,    LoadSurfMailGFX
+	dbw LITEBLUEMAIL, LoadLiteBlueMailGFX
+	dbw PORTRAITMAIL, LoadPortraitMailGFX
+	dbw LOVELY_MAIL,  LoadLovelyMailGFX
+	dbw EON_MAIL,     LoadEonMailGFX
+	dbw MORPH_MAIL,   LoadMorphMailGFX
+	dbw BLUESKY_MAIL, LoadBlueSkyMailGFX
+	dbw MUSIC_MAIL,   LoadMusicMailGFX
+	dbw MIRAGE_MAIL,  LoadMirageMailGFX
+	db -1
+; b9317
+
+LoadSurfMailGFX: ; b9317
+	push bc
+	ld hl, VTiles2 tile $31
+	ld de, SurfMailBorderGFX
+	ld c, 8 * 8
+	call LoadMailGFX_Color2
+	ld de, MailLaprasGFX
+	ld c, 6 * 8
+	call LoadMailGFX_Color3
+	ld de, SurfMailWaveGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	jr FinishLoadingSurfLiteBlueMailGFX
+
+LoadLiteBlueMailGFX: ; b9335
+	push bc
+	ld hl, VTiles2 tile $31
+	ld de, LiteBlueMailBorderGFX
+	ld c, 8 * 8
+	call LoadMailGFX_Color2
+	ld de, MailDratiniGFX
+	ld c, 6 * 8
+	call LoadMailGFX_Color3
+	ld de, PortraitMailUnderlineGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+
+FinishLoadingSurfLiteBlueMailGFX: ; b9351
+	ld de, SurfLiteBlueMailSmallShapesGFX
+	ld c, 2 * 8
+	call LoadMailGFX_Color2
+	ld c, 2 * 8
+	call LoadMailGFX_Color1
+	ld de, SurfLiteBlueMailLargeShapesGFX
+	ld c, 8 * 8
+	call LoadMailGFX_Color1
+	ld c, 8 * 8
+	call LoadMailGFX_Color2
+
+	call DrawMailBorder
+	hlcoord 2, 15
+	ld a, $3f
+	call Mail_Draw16TileRow
+	ld a, $39
+	hlcoord 15, 14
+	call Mail_Draw3x2Graphic
+	ld a, $44
+	hlcoord 2, 2
+	call Mail_Draw2x2Graphic
+	hlcoord 15, 11
+	call Mail_Draw2x2Graphic
+	ld a, $4c
+	hlcoord 3, 12
+	call Mail_Draw2x2Graphic
+	hlcoord 15, 2
+	call Mail_Draw2x2Graphic
+	ld a, $50
+	hlcoord 6, 3
+	call Mail_Draw2x2Graphic
+	ld a, $40
+	hlcoord 13, 2
+	ld [hli], a
+	hlcoord 6, 14
+	ld [hl], a
+	ld a, $41
+	hlcoord 4, 5
+	ld [hli], a
+	hlcoord 17, 5
+	ld [hli], a
+	hlcoord 13, 12
+	ld [hl], a
+	ld a, $42
+	hlcoord 9, 2
+	ld [hli], a
+	hlcoord 14, 5
+	ld [hli], a
+	hlcoord 3, 10
+	ld [hl], a
+	ld a, $43
+	hlcoord 6, 11
+	ld [hli], a
+	pop hl
+	jp MailGFX_PlaceMessage
+; b93d2
+
+LoadEonMailGFX: ; b93d2
+	push bc
+	ld hl, VTiles2 tile $31
+	ld de, EonMailBorder1GFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	ld de, EonMailBorder2GFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color1
+	ld de, EonMailBorder2GFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color1
+	ld de, EonMailBorder1GFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	ld de, EonMailBorder3GFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	ld de, MailEeveeGFX
+	ld c, 6 * 8
+	call LoadMailGFX_Color3
+	ld hl, VTiles2 tile $3d
+	ld de, MailLargeCircleGFX
+	ld c, 4 * 8
+	call LoadMailGFX_Color1
+	ld de, EonMailBorder2GFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+
+	ld a, $31
+	hlcoord 0, 0
+	call Mail_Place18TileAlternatingRow
+	hlcoord 1, 17
+	call Mail_Place18TileAlternatingRow
+	ld a, $33
+	hlcoord 0, 1
+	call Mail_Place16TileAlternatingColumn
+	hlcoord 19, 0
+	call Mail_Place16TileAlternatingColumn
+	hlcoord 2, 15
+	ld a, $35
+	call Mail_Draw16TileRow
+	inc a
+	hlcoord 15, 14
+	call Mail_Draw3x2Graphic
+	call LovelyEonMail_PlaceIcons
+	pop hl
+	jp MailGFX_PlaceMessage
+; b944b
+
+LoadLovelyMailGFX: ; b944b
+	push bc
+	ld hl, VTiles2 tile $31
+	ld de, LovelyMailBorderGFX
+	ld c, 5 * 8
+	call LoadMailGFX_Color2
+	ld de, MailPoliwagGFX
+	ld c, 6 * 8
+	call LoadMailGFX_Color3
+	ld de, LovelyMailUnderlineGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	ld de, LovelyMailLargeHeartGFX
+	ld c, 4 * 8
+	call LoadMailGFX_Color2
+	ld de, LovelyMailSmallHeartGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color1
+
+	call DrawMailBorder2
+	hlcoord 2, 15
+	ld a, $3c
+	call Mail_Draw16TileRow
+	ld a, $36
+	hlcoord 15, 14
+	call Mail_Draw3x2Graphic
+	call LovelyEonMail_PlaceIcons
+	pop hl
+	jp MailGFX_PlaceMessage
+; b9491
+
+LovelyEonMail_PlaceIcons: ; b9491
+	ld a, $3d
+	hlcoord 2, 2
+	call Mail_Draw2x2Graphic
+	hlcoord 16, 2
+	call Mail_Draw2x2Graphic
+	hlcoord 9, 4
+	call Mail_Draw2x2Graphic
+	hlcoord 2, 11
+	call Mail_Draw2x2Graphic
+	hlcoord 6, 12
+	call Mail_Draw2x2Graphic
+	hlcoord 12, 11
+	call Mail_Draw2x2Graphic
+	ld a, $41
+	hlcoord 5, 4
+	ld [hl], a
+	hlcoord 6, 2
+	ld [hl], a
+	hlcoord 12, 4
+	ld [hl], a
+	hlcoord 14, 2
+	ld [hl], a
+	hlcoord 3, 13
+	ld [hl], a
+	hlcoord 9, 11
+	ld [hl], a
+	hlcoord 16, 12
+	ld [hl], a
+	ret
+; b94d6
+
+LoadMorphMailGFX: ; b94d6
+	push bc
+	ld hl, VTiles2 tile $31
+	ld bc, 5 * 8
+	call MailGFX_GenerateMonochromeTilesColor2
+	ld de, MorphMailBorderGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	ld de, MorphMailBorderCorner1GFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	ld de, MorphMailBorderCorner2GFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	ld de, EonMailBorder1GFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color1
+	ld de, MorphMailDividerGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	ld de, MailDittoGFX
+	ld c, 6 * 8
+	call LoadMailGFX_Color3
+	call DrawMailBorder2
+	ld a, $31
+	hlcoord 1, 1
+	call Mail_Draw2x2Graphic
+	hlcoord 17, 15
+	call Mail_Draw2x2Graphic
+	hlcoord 1, 3
+	ld [hl], a
+	hlcoord 3, 1
+	ld [hl], a
+	hlcoord 16, 16
+	ld [hl], a
+	hlcoord 18, 14
+	ld [hl], a
+	ld a, $36
+	hlcoord 1, 4
+	ld [hl], a
+	hlcoord 2, 3
+	ld [hl], a
+	hlcoord 3, 2
+	ld [hl], a
+	hlcoord 4, 1
+	ld [hl], a
+	inc a
+	hlcoord 15, 16
+	ld [hl], a
+	hlcoord 16, 15
+	ld [hl], a
+	hlcoord 17, 14
+	ld [hl], a
+	hlcoord 18, 13
+	ld [hl], a
+	inc a
+	hlcoord 2, 15
+	ld b, $e
+	call Mail_DrawRowLoop
+	inc a
+	hlcoord 2, 11
+	call Mail_Draw16TileRow
+	hlcoord 2, 5
+	call Mail_Draw16TileRow
+	inc a
+	hlcoord 6, 1
+	call Mail_Draw13TileRow
+	hlcoord 1, 16
+	call Mail_Draw13TileRow
+	inc a
+	hlcoord 3, 13
+	call Mail_Draw3x2Graphic
+	pop hl
+	jp MailGFX_PlaceMessage
+; b9582
+
+LoadBlueSkyMailGFX: ; b9582
+	push bc
+	ld hl, VTiles2 tile $31
+	ld de, EonMailBorder1GFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	ld a, $ff
+	ld bc, 1 tiles
+	call ByteFill
+	ld de, BlueSkyMailGrassGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color3
+	ld de, MailDragoniteGFX
+	ld c, 23 * 8
+	call LoadMailGFX_Color3
+	ld de, MailCloudGFX
+	ld c, 6 * 8
+	call LoadMailGFX_Color1
+	ld de, FlowerMailSenderUnderlineGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color1
+	ld de, MailCloudGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color1
+	ld de, MailCloud2GFX
+	ld c, 2 * 8
+	call LoadMailGFX_Color1
+	ld de, MailCloud3GFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color1
+
+	ld a, $31
+	hlcoord 0, 0
+	call Mail_DrawFullWidthBorder
+	hlcoord 0, 1
+	call Mail_DrawLeftRightBorder
+	hlcoord 19, 1
+	call Mail_DrawLeftRightBorder
+	inc a
+	hlcoord 0, 17
+	call Mail_DrawFullWidthBorder
+	inc a
+	hlcoord 0, 16
+	call Mail_DrawFullWidthBorder
+	inc a
+	hlcoord 2, 2
+	call Mail_Place6TileRow
+	hlcoord 3, 3
+	call Mail_Place6TileRow
+	hlcoord 4, 4
+	call Mail_Place6TileRow
+	dec hl
+	ld [hl], $7f
+	dec a
+	hlcoord 15, 14
+	call Mail_Draw2x2Graphic
+	add $4
+	hlcoord 15, 16
+	ld [hli], a
+	inc a
+	ld [hl], a
+	inc a
+	push af
+	hlcoord 12, 1
+	call Mail_Draw3x2Graphic
+	pop af
+	hlcoord 15, 4
+	call Mail_Draw3x2Graphic
+	inc a
+	hlcoord 2, 11
+	call Mail_Draw16TileRow
+	inc a
+	hlcoord 10, 3
+	call Mail_Draw2x2Graphic
+	pop hl
+	jp MailGFX_PlaceMessage
+; b9636
+
+Mail_Place6TileRow: ; b9636
+	ld b, $6
+.loop
+	ld [hli], a
+	inc a
+	dec b
+	jr nz, .loop
+	ret
+; b963e
+
+LoadFlowerMailGFX: ; b963e
+	push bc
+	ld hl, VTiles2 tile $31
+	ld de, FlowerMailBorderGFX
+	ld c, 8 * 8
+	call LoadMailGFX_Color1
+	ld de, MailOddishGFX
+	ld c, 4 * 8
+	call LoadMailGFX_Color3
+	ld de, FlowerMailSenderUnderlineGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	ld de, FlowerMailLargeFlowerGFX
+	ld c, 4 * 8
+	call LoadMailGFX_Color1
+	ld c, 4 * 8
+	call LoadMailGFX_Color2
+
+	call DrawMailBorder
+	hlcoord 2, 15
+	ld a, $3d ; underline
+	call Mail_Draw16TileRow
+	ld a, $39 ; oddish
+	hlcoord 16, 13
+	call Mail_Draw2x2Graphic
+	hlcoord 2, 13
+	call Mail_Draw2x2Graphic
+	ld a, $3e
+	hlcoord 2, 2
+	call Mail_Draw2x2Graphic
+	hlcoord 5, 3
+	call Mail_Draw2x2Graphic
+	hlcoord 10, 2
+	call Mail_Draw2x2Graphic
+	hlcoord 16, 3
+	call Mail_Draw2x2Graphic
+	hlcoord 5, 11
+	call Mail_Draw2x2Graphic
+	hlcoord 16, 10
+	call Mail_Draw2x2Graphic
+	ld a, $42
+	hlcoord 3, 4
+	call Mail_Draw2x2Graphic
+	hlcoord 12, 3
+	call Mail_Draw2x2Graphic
+	hlcoord 14, 2
+	call Mail_Draw2x2Graphic
+	hlcoord 2, 10
+	call Mail_Draw2x2Graphic
+	hlcoord 14, 11
+	call Mail_Draw2x2Graphic
+	pop hl
+	jp MailGFX_PlaceMessage
+; b96ca
+
+LoadPortraitMailGFX: ; b96ca
+	push bc
+	ld hl, VTiles2 tile $31
+	ld de, PortraitMailBorderGFX
+	ld c, 5 * 8
+	call LoadMailGFX_Color2
+	ld de, PortraitMailUnderlineGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	ld hl, VTiles2 tile $3d
+	ld de, PortraitMailLargePokeballGFX
+	ld c, 4 * 8
+	call LoadMailGFX_Color1
+	ld de, PortraitMailSmallPokeballGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+
+	call DrawMailBorder2
+	hlcoord 8, 15
+	ld a, $36
+	ld b, $a
+	call Mail_DrawRowLoop
+	call LovelyEonMail_PlaceIcons
+	ld a, $1
+	ld [UnownLetter], a
+	hlcoord 1, 10
+	call PrepMonFrontpic
+	pop hl
+	jp MailGFX_PlaceMessage
+; b9710
+
+LoadMusicMailGFX: ; b9710
+	push bc
+	ld hl, VTiles2 tile $31
+	ld de, MusicMailBorderGFX
+	ld c, 4 * 8
+	call LoadMailGFX_Color2
+	ld de, MorphMailBorderCorner2GFX
+	ld c, 2 * 8
+	call LoadMailGFX_Color2
+	ld de, MailNatuGFX
+	ld c, 6 * 8
+	call LoadMailGFX_Color3
+	xor a
+	ld bc, 1 tiles
+	call ByteFill
+	ld de, MusicMailLargeNoteGFX
+	ld c, 3 * 8
+	call LoadMailGFX_Color1
+	ld de, MusicMailSmallNoteGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color1
+
+	ld a, $31
+	hlcoord 0, 0
+	call Mail_Place18TileAlternatingRow
+	hlcoord 1, 17
+	call Mail_Place18TileAlternatingRow
+	ld a, $33
+	hlcoord 0, 1
+	call Mail_Place16TileAlternatingColumn
+	hlcoord 19, 0
+	call Mail_Place16TileAlternatingColumn
+	ld a, $35
+	hlcoord 2, 15
+	call Mail_Place14TileAlternatingRow
+	ld a, $37
+	hlcoord 15, 14
+	call Mail_Draw3x2Graphic
+	call LovelyEonMail_PlaceIcons
+	pop hl
+	jp MailGFX_PlaceMessage
+; b9776
+
+LoadMirageMailGFX: ; b9776
+	push bc
+	ld hl, VTiles2 tile $31
+	ld bc, 5 * 8
+	call MailGFX_GenerateMonochromeTilesColor2
+	ld de, BlueSkyMailGrassGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color2
+	ld de, MailMewGFX
+	ld c, 18 * 8
+	call LoadMailGFX_Color2
+	ld de, MirageMailTopDividerGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color1
+	ld de, MirageMailBottomDividerGFX
+	ld c, 1 * 8
+	call LoadMailGFX_Color1
+
+	call DrawMailBorder2
+	ld a, $36
+	hlcoord 1, 16
+	call Mail_DrawTopBottomBorder
+	inc a
+	hlcoord 15, 14
+	call Mail_Draw3x2Graphic
+	inc a
+	hlcoord 15, 16
+	ld [hli], a
+	inc a
+	ld [hl], a
+	ld a, $3f
+	hlcoord 1, 1
+	call Mail_Place18TileAlternatingRow
+	ld a, $41
+	hlcoord 0, 2
+	call Mail_Place14TileAlternatingColumn
+	ld a, $43
+	hlcoord 19, 2
+	call Mail_Place14TileAlternatingColumn
+	ld a, $45
+	hlcoord 0, 1
+	ld [hl], a
+	inc a
+	hlcoord 19, 1
+	ld [hl], a
+	inc a
+	hlcoord 0, 16
+	ld [hl], a
+	inc a
+	hlcoord 19, 16
+	ld [hl], a
+	inc a
+	hlcoord 2, 5
+	call Mail_Draw16TileRow
+	inc a
+	hlcoord 2, 11
+	call Mail_Draw16TileRow
+	pop hl
+	jp MailGFX_PlaceMessage
+; b97f8
+
+MailGFX_GenerateMonochromeTilesColor2: ; b97f8
+.loop
+	xor a
+	ld [hli], a
+	ld a, $ff
+	ld [hli], a
+	dec bc
+	ld a, b
+	or c
+	jr nz, .loop
+	ret
+; b9803
+
+MailGFX_PlaceMessage: ; b9803
+	ld bc, MAIL_STRUCT_LENGTH
+	ld de, wd002
+	ld a, $0
+	call GetSRAMBank
+	call CopyBytes
+	call CloseSRAM
+	ld hl, wd002 + sPartyMon1MailAuthor - sPartyMon1Mail
+	ld de, wd050
+	ld bc, NAME_LENGTH - 1
+	call CopyBytes
+	ld a, "@"
+	ld [wd002 + sPartyMon1MailAuthor - sPartyMon1Mail], a
+	ld [wd050 + NAME_LENGTH - 1], a
+	ld de, wd002
+	hlcoord 2, 7
+	call PlaceString
+	ld de, wd050
+	ld a, [de]
+	and a
+	ret z
+	ld a, [Buffer3]
+	hlcoord 8, 14
+	cp $3 ; PORTRAITMAIL
+	jr z, .place_author
+	hlcoord 6, 14
+	cp $6 ; MORPH_MAIL
+	jr z, .place_author
+	hlcoord 5, 14
+
+.place_author
+	jp PlaceString
+; b984e
+
+Functionb984e: ; b984e
+.loop
+	ld a, [hl]
+	xor $ff
+	ld [hli], a
+	dec bc
+	ld a, b
+	or c
+	jr nz, .loop
+	ret
+; b9858
+
+DrawMailBorder: ; b9858
+	hlcoord 0, 0
+	ld a, $31
+	ld [hli], a
+	inc a
+	call Mail_DrawTopBottomBorder
+	inc a
+	ld [hli], a
+	inc a
+	call Mail_DrawLeftRightBorder
+	ld a, $36
+	ld [hli], a
+	inc a
+	call Mail_DrawTopBottomBorder
+	hlcoord 19, 1
+	ld a, $35
+	call Mail_DrawLeftRightBorder
+	ld a, $38
+	ld [hl], a
+	ret
+; b987b
+
+DrawMailBorder2: ; b987b
+	hlcoord 0, 0
+	ld a, $31
+	ld [hli], a
+	inc a
+	call Mail_DrawTopBottomBorder
+	ld [hl], $31
+	inc hl
+	inc a
+	call Mail_DrawLeftRightBorder
+	ld [hl], $31
+	inc hl
+	inc a
+	call Mail_DrawTopBottomBorder
+	hlcoord 19, 1
+	ld a, $35
+	call Mail_DrawLeftRightBorder
+	ld [hl], $31
+	ret
+; b989e
+
+Mail_Place14TileAlternatingRow: ; b989e
+	push af
+	ld b, 14 / 2
+	jr Mail_PlaceAlternatingRow
+
+Mail_Place16TileAlternatingRow: ; b98a3
+	push af
+	ld b, 16 / 2
+	jr Mail_PlaceAlternatingRow
+
+Mail_Place18TileAlternatingRow: ; b98a8
+	push af
+	ld b, 18 / 2
+
+Mail_PlaceAlternatingRow: ; b98ab
+.loop
+	ld [hli], a
+	inc a
+	ld [hli], a
+	dec a
+	dec b
+	jr nz, .loop
+	ld [hl], a
+	pop af
+	ret
+; b98b5
+
+Mail_Place14TileAlternatingColumn: ; b98b5
+	push af
+	ld b, 14 / 2
+	jr Mail_PlaceAlternatingColumn
+
+Mail_Place16TileAlternatingColumn: ; b98ba
+	push af
+	ld b, 16 / 2
+
+Mail_PlaceAlternatingColumn: ; b98bd
+.loop
+	ld [hl], a
+	ld de, SCREEN_WIDTH
+	add hl, de
+	inc a
+	ld [hl], a
+	add hl, de
+	dec a
+	dec b
+	jr nz, .loop
+	ld [hl], a
+	pop af
+	ret
+; b98cc
+
+Mail_Draw7TileRow: ; b98cc
+	ld b, $7
+	jr Mail_DrawRowLoop
+
+Mail_Draw13TileRow: ; b98d0
+	ld b, $d
+	jr Mail_DrawRowLoop
+
+Mail_Draw16TileRow: ; b98d4
+	ld b, $10
+	jr Mail_DrawRowLoop
+
+Mail_DrawTopBottomBorder: ; b98d8
+	ld b, SCREEN_WIDTH - 2
+	jr Mail_DrawRowLoop
+
+Mail_DrawFullWidthBorder: ; b98dc
+	ld b, SCREEN_WIDTH
+
+Mail_DrawRowLoop: ; b98de
+.loop
+	ld [hli], a
+	dec b
+	jr nz, .loop
+	ret
+; b98e3
+
+Mail_DrawLeftRightBorder: ; b98e3
+	ld b, SCREEN_HEIGHT - 2
+	ld de, SCREEN_WIDTH
+.loop
+	ld [hl], a
+	add hl, de
+	dec b
+	jr nz, .loop
+	ret
+; b98ee
+
+Mail_Draw2x2Graphic: ; b98ee
+	push af
+	ld [hli], a
+	inc a
+	ld [hl], a
+	ld bc, SCREEN_WIDTH - 1
+	add hl, bc
+	inc a
+	ld [hli], a
+	inc a
+	ld [hl], a
+	pop af
+	ret
+; b98fc
+
+Mail_Draw3x2Graphic: ; b98fc
+	ld [hli], a
+	inc a
+	ld [hli], a
+	inc a
+	ld [hl], a
+	ld bc, SCREEN_WIDTH - 2
+	add hl, bc
+	inc a
+	ld [hli], a
+	inc a
+	ld [hli], a
+	inc a
+	ld [hl], a
+	ret
+; b990c
+
+LoadMailGFX_Color1: ; b990c
+.loop
+	ld a, [de]
+	inc de
+	ld [hli], a
+	xor a
+	ld [hli], a
+	dec c
+	jr nz, .loop
+	ret
+; b9915
+
+LoadMailGFX_Color2: ; b9915
+.loop
+	xor a
+	ld [hli], a
+	ld a, [de]
+	inc de
+	ld [hli], a
+	dec c
+	jr nz, .loop
+	ret
+; b991e
+
+LoadMailGFX_Color3: ; b991e
+.loop
+	ld a, [de]
+	inc de
+rept 2
+	ld [hli], a
+endr
+	dec c
+	jr nz, .loop
+	ret
+; b9926
+
+MorphMailDividerGFX: ; b9926
+INCBIN "gfx/mail/0b9926.1bpp"
+
+BlueSkyMailGrassGFX: ; b992e
+INCBIN "gfx/mail/0b992e.1bpp"
+
+PortraitMailSmallPokeballGFX: ; b9936
+INCBIN "gfx/mail/0b9936.1bpp"
+
+MorphMailBorderCorner2GFX: ; b993e
+INCBIN "gfx/mail/0b993e.1bpp"
+
+MusicMailSmallNoteGFX: ; b9946
+INCBIN "gfx/mail/0b9946.1bpp"
+
+SurfMailWaveGFX: ; b994e
+INCBIN "gfx/mail/0b994e.1bpp"
+
+PortraitMailUnderlineGFX: ; b995e
+INCBIN "gfx/mail/0b995e.1bpp"
+
+LovelyMailUnderlineGFX: ; b9966
+INCBIN "gfx/mail/0b9966.1bpp"
+
+LovelyMailSmallHeartGFX: ; b996e
+INCBIN "gfx/mail/0b996e.1bpp"
+
+SurfLiteBlueMailSmallShapesGFX: ; b9976
+INCBIN "gfx/mail/0b9976.1bpp"
+
+EonMailBorder1GFX: ; b997e
+INCBIN "gfx/mail/0b997e.1bpp"
+
+EonMailBorder2GFX: ; b998e
+INCBIN "gfx/mail/0b998e.1bpp"
+
+MailNatuGFX: ; b9996
+INCBIN "gfx/mail/0b9996.1bpp"
+
+MailDratiniGFX: ; b99c6
+INCBIN "gfx/mail/0b99c6.1bpp"
+
+MailPoliwagGFX: ; b99f6
+INCBIN "gfx/mail/0b99f6.1bpp"
+
+MailLaprasGFX: ; b9a26
+INCBIN "gfx/mail/0b9a26.1bpp"
+
+MailEeveeGFX: ; b9a56
+INCBIN "gfx/mail/0b9a56.1bpp"
+
+MailDittoGFX: ; b9a86
+INCBIN "gfx/mail/0b9a86.1bpp"
+
+MailMewGFX: ; b9ab6
+INCBIN "gfx/mail/0b9ab6.1bpp"
+
+MailDragoniteGFX: ; b9b46
+INCBIN "gfx/mail/0b9b46.1bpp"
+
+MailSentretGFX: ; b9bce
+INCBIN "gfx/mail/0b9bce.1bpp"
+
+MailUnusedGrassGFX: ; b9bee
+INCBIN "gfx/mail/0b9bee.1bpp"
+
+PortraitMailLargePokeballGFX: ; b9bfe
+INCBIN "gfx/mail/0b9bfe.1bpp"
+
+MailOddishGFX: ; b9c1e
+INCBIN "gfx/mail/0b9c1e.1bpp"
+
+SurfLiteBlueMailLargeShapesGFX: ; b9c3e
+INCBIN "gfx/mail/0b9c3e.1bpp"
+
+LovelyMailLargeHeartGFX: ; b9c5e
+INCBIN "gfx/mail/0b9c5e.1bpp"
+
+MorphMailBorderCorner1GFX: ; b9c7e
+INCBIN "gfx/mail/0b9c7e.1bpp"
+
+MorphMailBorderGFX: ; b9c96
+INCBIN "gfx/mail/0b9c96.1bpp"
+
+MailLargeCircleGFX: ; b9c9e
+INCBIN "gfx/mail/0b9c9e.1bpp"
+
+FlowerMailLargeFlowerGFX: ; b9cbe
+INCBIN "gfx/mail/0b9cbe.1bpp"
+
+FlowerMailSmallFlowerGFX: ; b9cde
+; indirectly referenced
+INCBIN "gfx/mail/0b9cde.1bpp"
+
+MusicMailLargeNoteGFX: ; b9cfe
+INCBIN "gfx/mail/0b9cfe.1bpp"
+
+MailCloudGFX: ; b9d16
+INCBIN "gfx/mail/0b9d16.1bpp"
+
+MailCloud2GFX: ; b9d26
+INCBIN "gfx/mail/0b9d26.1bpp"
+
+MailCloud3GFX: ; b9d3e
+INCBIN "gfx/mail/0b9d3e.1bpp"
+
+SurfMailBorderGFX: ; b9d46
+INCBIN "gfx/mail/0b9d46.1bpp"
+
+EonMailBorder3GFX: ; b9d76
+INCBIN "gfx/mail/0b9d76.1bpp"
+
+FlowerMailBorderGFX: ; b9d86
+INCBIN "gfx/mail/0b9d86.1bpp"
+
+FlowerMailSenderUnderlineGFX: ; b9db6
+INCBIN "gfx/mail/0b9db6.1bpp"
+
+LiteBlueMailBorderGFX: ; b9dc6
+INCBIN "gfx/mail/0b9dc6.1bpp"
+
+MirageMailTopDividerGFX: ; b9dce
+INCBIN "gfx/mail/0b9dce.1bpp"
+
+MirageMailBottomDividerGFX: ; b9df6
+INCBIN "gfx/mail/0b9df6.1bpp"
+
+MusicMailBorderGFX: ; b9e06
+INCBIN "gfx/mail/0b9e06.1bpp"
+
+LovelyMailBorderGFX: ; b9e26
+INCBIN "gfx/mail/0b9e26.1bpp"
+
+PortraitMailBorderGFX: ; b9e4e
+INCBIN "gfx/mail/0b9e4e.1bpp"
+
+
+ItemIsMail: ; b9e76
+	ld a, d
+	ld hl, .items
+	ld de, 1
+	jp IsInArray
+; b9e80
+
+.items
+	db FLOWER_MAIL
+	db SURF_MAIL
+	db LITEBLUEMAIL
+	db PORTRAITMAIL
+	db LOVELY_MAIL
+	db EON_MAIL
+	db MORPH_MAIL
+	db BLUESKY_MAIL
+	db MUSIC_MAIL
+	db MIRAGE_MAIL
+	db -1
+; b9e8b
binary files /dev/null b/gfx/mail/0b9926.1bpp differ
--- /dev/null
+++ b/gfx/mail/0b992e.1bpp
@@ -1,0 +1,1 @@
+�HLm}
\ No newline at end of file
--- /dev/null
+++ b/gfx/mail/0b9936.1bpp
@@ -1,0 +1,1 @@
+<~���~<
\ No newline at end of file
binary files /dev/null b/gfx/mail/0b993e.1bpp differ
--- /dev/null
+++ b/gfx/mail/0b9946.1bpp
@@ -1,0 +1,1 @@
+p
\ No newline at end of file
binary files /dev/null b/gfx/mail/0b994e.1bpp differ
binary files /dev/null b/gfx/mail/0b995e.1bpp differ
binary files /dev/null b/gfx/mail/0b9966.1bpp differ
binary files /dev/null b/gfx/mail/0b996e.1bpp differ
binary files /dev/null b/gfx/mail/0b9976.1bpp differ
binary files /dev/null b/gfx/mail/0b997e.1bpp differ
--- /dev/null
+++ b/gfx/mail/0b998e.1bpp
@@ -1,0 +1,1 @@
+<~���
\ No newline at end of file
binary files /dev/null b/gfx/mail/0b9996.1bpp differ
binary files /dev/null b/gfx/mail/0b99c6.1bpp differ
binary files /dev/null b/gfx/mail/0b99f6.1bpp differ
binary files /dev/null b/gfx/mail/0b9a26.1bpp differ
binary files /dev/null b/gfx/mail/0b9a56.1bpp differ
binary files /dev/null b/gfx/mail/0b9a86.1bpp differ
binary files /dev/null b/gfx/mail/0b9ab6.1bpp differ
binary files /dev/null b/gfx/mail/0b9b46.1bpp differ
binary files /dev/null b/gfx/mail/0b9bce.1bpp differ
--- /dev/null
+++ b/gfx/mail/0b9bee.1bpp
@@ -1,0 +1,1 @@
+�KKm}�������
\ No newline at end of file
binary files /dev/null b/gfx/mail/0b9bfe.1bpp differ
binary files /dev/null b/gfx/mail/0b9c1e.1bpp differ
binary files /dev/null b/gfx/mail/0b9c3e.1bpp differ
binary files /dev/null b/gfx/mail/0b9c5e.1bpp differ
binary files /dev/null b/gfx/mail/0b9c7e.1bpp differ
--- /dev/null
+++ b/gfx/mail/0b9c96.1bpp
@@ -1,0 +1,1 @@
+������
\ No newline at end of file
binary files /dev/null b/gfx/mail/0b9c9e.1bpp differ
binary files /dev/null b/gfx/mail/0b9cbe.1bpp differ
binary files /dev/null b/gfx/mail/0b9cde.1bpp differ
binary files /dev/null b/gfx/mail/0b9cfe.1bpp differ
binary files /dev/null b/gfx/mail/0b9d16.1bpp differ
binary files /dev/null b/gfx/mail/0b9d26.1bpp differ
binary files /dev/null b/gfx/mail/0b9d3e.1bpp differ
binary files /dev/null b/gfx/mail/0b9d46.1bpp differ
binary files /dev/null b/gfx/mail/0b9d76.1bpp differ
binary files /dev/null b/gfx/mail/0b9d86.1bpp differ
binary files /dev/null b/gfx/mail/0b9db6.1bpp differ
--- /dev/null
+++ b/gfx/mail/0b9dc6.1bpp
@@ -1,0 +1,1 @@
+�������
\ No newline at end of file
binary files /dev/null b/gfx/mail/0b9dce.1bpp differ
binary files /dev/null b/gfx/mail/0b9df6.1bpp differ
binary files /dev/null b/gfx/mail/0b9e06.1bpp differ
--- /dev/null
+++ b/gfx/mail/0b9e26.1bpp
@@ -1,0 +1,1 @@
+�Ù������������<��������<�������χ��
\ No newline at end of file
binary files /dev/null b/gfx/mail/0b9e4e.1bpp differ
binary files /dev/null b/gfx/misc/boulderdust.2bpp differ
--- a/gfx/misc/fishing1.2bpp
+++ /dev/null
@@ -1,1 +1,0 @@
-????
\ No newline at end of file
binary files a/gfx/misc/fishing3.2bpp /dev/null differ
--- /dev/null
+++ b/gfx/misc/shadow.2bpp
@@ -1,0 +1,1 @@
+????
\ No newline at end of file
--- a/gfx/pics/animation.asm
+++ b/gfx/pics/animation.asm
@@ -1113,7 +1113,7 @@
 	push bc
 	push hl
 	ld de, VTiles2
-	predef Function5108b
+	predef FrontpicPredef
 	pop hl
 	pop bc
 	ld d, 0
binary files a/gfx/unknown/011ef4.2bpp /dev/null differ
binary files a/gfx/unknown/0b9926.1bpp /dev/null differ
--- a/gfx/unknown/0b992e.1bpp
+++ /dev/null
@@ -1,1 +1,0 @@
-�HLm}
\ No newline at end of file
--- a/gfx/unknown/0b9936.1bpp
+++ /dev/null
@@ -1,1 +1,0 @@
-<~���~<
\ No newline at end of file
binary files a/gfx/unknown/0b993e.1bpp /dev/null differ
--- a/gfx/unknown/0b9946.1bpp
+++ /dev/null
@@ -1,1 +1,0 @@
-p
\ No newline at end of file
binary files a/gfx/unknown/0b994e.1bpp /dev/null differ
binary files a/gfx/unknown/0b995e.1bpp /dev/null differ
binary files a/gfx/unknown/0b9966.1bpp /dev/null differ
binary files a/gfx/unknown/0b996e.1bpp /dev/null differ
binary files a/gfx/unknown/0b9976.1bpp /dev/null differ
binary files a/gfx/unknown/0b997e.1bpp /dev/null differ
--- a/gfx/unknown/0b998e.1bpp
+++ /dev/null
@@ -1,1 +1,0 @@
-<~���
\ No newline at end of file
binary files a/gfx/unknown/0b9996.1bpp /dev/null differ
binary files a/gfx/unknown/0b99c6.1bpp /dev/null differ
binary files a/gfx/unknown/0b99f6.1bpp /dev/null differ
binary files a/gfx/unknown/0b9a26.1bpp /dev/null differ
binary files a/gfx/unknown/0b9a56.1bpp /dev/null differ
binary files a/gfx/unknown/0b9a86.1bpp /dev/null differ
binary files a/gfx/unknown/0b9ab6.1bpp /dev/null differ
binary files a/gfx/unknown/0b9b46.1bpp /dev/null differ
binary files a/gfx/unknown/0b9bce.1bpp /dev/null differ
--- a/gfx/unknown/0b9bee.1bpp
+++ /dev/null
@@ -1,1 +1,0 @@
-�KKm}�������
\ No newline at end of file
binary files a/gfx/unknown/0b9bfe.1bpp /dev/null differ
binary files a/gfx/unknown/0b9c1e.1bpp /dev/null differ
binary files a/gfx/unknown/0b9c3e.1bpp /dev/null differ
binary files a/gfx/unknown/0b9c5e.1bpp /dev/null differ
binary files a/gfx/unknown/0b9c7e.1bpp /dev/null differ
--- a/gfx/unknown/0b9c96.1bpp
+++ /dev/null
@@ -1,1 +1,0 @@
-������
\ No newline at end of file
binary files a/gfx/unknown/0b9c9e.1bpp /dev/null differ
binary files a/gfx/unknown/0b9cbe.1bpp /dev/null differ
binary files a/gfx/unknown/0b9cde.1bpp /dev/null differ
binary files a/gfx/unknown/0b9cfe.1bpp /dev/null differ
binary files a/gfx/unknown/0b9d16.1bpp /dev/null differ
binary files a/gfx/unknown/0b9d26.1bpp /dev/null differ
binary files a/gfx/unknown/0b9d3e.1bpp /dev/null differ
binary files a/gfx/unknown/0b9d46.1bpp /dev/null differ
binary files a/gfx/unknown/0b9d76.1bpp /dev/null differ
binary files a/gfx/unknown/0b9d86.1bpp /dev/null differ
binary files a/gfx/unknown/0b9db6.1bpp /dev/null differ
--- a/gfx/unknown/0b9dc6.1bpp
+++ /dev/null
@@ -1,1 +1,0 @@
-�������
\ No newline at end of file
binary files a/gfx/unknown/0b9dce.1bpp /dev/null differ
binary files a/gfx/unknown/0b9df6.1bpp /dev/null differ
binary files a/gfx/unknown/0b9e06.1bpp /dev/null differ
--- a/gfx/unknown/0b9e26.1bpp
+++ /dev/null
@@ -1,1 +1,0 @@
-�Ù������������<��������<�������χ��
\ No newline at end of file
binary files a/gfx/unknown/0b9e4e.1bpp /dev/null differ
binary files a/gfx/unknown/1de5e6.2bpp /dev/null differ
binary files a/gfx/unknown/1de9e6.2bpp /dev/null differ
binary files a/gfx/unknown/1dede6.2bpp /dev/null differ
--- a/home.asm
+++ b/home.asm
@@ -104,13 +104,13 @@
 	res 0, a
 	ld [VramState], a
 	ld a, $0
-	ld [wc2ce], a
+	ld [wSpriteUpdatesEnabled], a
 	ret
 ; 0x2ee4
 
 EnableSpriteUpdates:: ; 2ee4
 	ld a, $1
-	ld [wc2ce], a
+	ld [wSpriteUpdatesEnabled], a
 	ld a, [VramState]
 	set 0, a
 	ld [VramState], a
@@ -568,18 +568,18 @@
 ; 321c
 
 
-Function321c:: ; 321c
+ApplyTilemap:: ; 321c
 	ld a, [hCGB]
 	and a
 	jr z, .dmg
 
-	ld a, [wc2ce]
+	ld a, [wSpriteUpdatesEnabled]
 	cp 0
 	jr z, .dmg
 
 	ld a, 1
 	ld [hBGMapMode], a
-	jr LoadDETile
+	jr LoadEDTile
 
 .dmg
 ; WaitBGMap
@@ -595,8 +595,8 @@
 	and a
 	jr z, WaitBGMap
 
-LoadDETile:: ; 323d
-	jr .LoadDETile
+LoadEDTile:: ; 323d
+	jr .LoadEDTile
 ; 323f
 
 .unreferenced_323f ; 323f
@@ -604,7 +604,7 @@
 	ret
 ; 3246
 
-.LoadDETile ; 3246
+.LoadEDTile ; 3246
 	ld a, [hBGMapMode]
 	push af
 	xor a
@@ -748,9 +748,8 @@
 ; 333e
 
 
-ClearSGB:: ; 333e
-	ld b, $ff
-
+GetMemSGBLayout:: ; 333e
+	ld b, SCGB_RAM
 GetSGBLayout:: ; 3340
 ; load sgb packets unless dmg
 
@@ -1173,7 +1172,7 @@
 	jp SetPalettes
 ; 352f
 
-Function352f:: ; 352f
+InitScrollingMenu:: ; 352f
 	ld a, [wMenuBorderTopCoord]
 	dec a
 	ld b, a
@@ -1192,7 +1191,7 @@
 	jp TextBox
 ; 354b
 
-Function354b:: ; 354b
+Function354b:: ; 354b joypad
 	call DelayFrame
 
 	ld a, [hInMenu]
@@ -1214,12 +1213,12 @@
 ; 3567
 
 
-Function3567:: ; 3567
+HandleStoneQueue:: ; 3567
 	ld a, [hROMBank]
 	push af
 
 	call SwitchToMapScriptHeaderBank
-	call Function3574
+	call .WarpAction
 
 	pop bc
 	ld a, b
@@ -1227,39 +1226,39 @@
 	ret
 ; 3574
 
-Function3574:: ; 3574
-	ld hl, $0001
+.WarpAction ; 3574
+	ld hl, OBJECT_MAP_OBJECT_INDEX
 	add hl, de
 	ld a, [hl]
 	cp $ff
-	jr z, .asm_3597
+	jr z, .nope
 
 	ld l, a
 	push hl
-	call Function3599
+	call .IsPersonOnWarp
 	pop hl
-	jr nc, .asm_3597
+	jr nc, .nope
 	ld d, a
 	ld e, l
-	call Function35de
-	jr nc, .asm_3597
+	call .IsObjectInStoneTable
+	jr nc, .nope
 	call CallMapScript
 	callba EnableScriptMode
 	scf
 	ret
 
-.asm_3597
+.nope
 	and a
 	ret
 ; 3599
 
-Function3599:: ; 3599
+.IsPersonOnWarp ; 3599
 	push de
 
-	ld hl, $0010
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, de
 	ld a, [hl]
-	ld hl, $0011
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, de
 	ld e, [hl]
 
@@ -1268,52 +1267,52 @@
 	ld a, e
 	sub 4
 	ld e, a
-	call Function35b0
+	call .check_on_warp
 
 	pop de
 	ret
 ; 35b0
 
-Function35b0:: ; 35b0
-	ld hl, wCurrentCaller + 3
+.check_on_warp ; 35b0
+	ld hl, wCurrMapWarpHeaderPointer
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
-	ld a, [wCurrentCaller + 2]
+	ld a, [wCurrMapWarpCount]
 	and a
-	jr z, .asm_35d3
+	jr z, .nope2
 
 .loop
 	push af
 	ld a, [hl]
 	cp e
-	jr nz, .asm_35c8
+	jr nz, .not_on_warp
 	inc hl
 	ld a, [hld]
 	cp d
-	jr nz, .asm_35c8
-	jr .asm_35d5
+	jr nz, .not_on_warp
+	jr .found_warp
 
-.asm_35c8
-	ld a, $5
+.not_on_warp
+	ld a, 5
 	add l
 	ld l, a
-	jr nc, .asm_35cf
+	jr nc, .no_carry
 	inc h
-.asm_35cf
+.no_carry
 
 	pop af
 	dec a
 	jr nz, .loop
 
-.asm_35d3
+.nope2
 	and a
 	ret
 
-.asm_35d5
+.found_warp
 	pop af
 	ld d, a
-	ld a, [wCurrentCaller + 2]
+	ld a, [wCurrMapWarpCount]
 	sub d
 	inc a
 	scf
@@ -1320,41 +1319,41 @@
 	ret
 ; 35de
 
-Function35de:: ; 35de
+.IsObjectInStoneTable ; 35de
 	inc e
-	ld hl, $0001
+	ld hl, CMDQUEUE_ADDR
 	add hl, bc
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
-.asm_35e6
+.loop2
 	ld a, [hli]
 	cp $ff
-	jr z, .asm_35fc
+	jr z, .nope3
 	cp d
-	jr nz, .asm_35f7
+	jr nz, .next_inc3
 	ld a, [hli]
 	cp e
-	jr nz, .asm_35f8
+	jr nz, .next_inc2
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
-	jr .asm_35fe
+	jr .yes
 
-.asm_35f7
+.next_inc3
 	inc hl
 
-.asm_35f8
+.next_inc2
 rept 2
 	inc hl
 endr
-	jr .asm_35e6
+	jr .loop2
 
-.asm_35fc
+.nope3
 	and a
 	ret
 
-.asm_35fe
+.yes
 	scf
 	ret
 ; 3600
@@ -1464,30 +1463,32 @@
 	ld [EngineBuffer2], a
 	ld a, c
 	ld [EngineBuffer3], a
-	jr Function367e
+	jr LoadTrainer_continue
 ; 3674
 
-Function3674:: ; 3674
+TalkToTrainer:: ; 3674
 	ld a, 1
 	ld [EngineBuffer2], a
 	ld a, -1
 	ld [EngineBuffer3], a
 
-Function367e:: ; 367e
+LoadTrainer_continue:: ; 367e
 	call GetMapScriptHeaderBank
 	ld [EngineBuffer1], a
+
 	ld a, [hLastTalked]
 	call GetMapObject
+
 	ld hl, MAPOBJECT_SCRIPT_POINTER
 	add hl, bc
 	ld a, [EngineBuffer1]
 	call GetFarHalfword
-	ld de, wd041
-	ld bc, $000d
+	ld de, wTempTrainerHeader
+	ld bc, wTempTrainerHeaderEnd - wTempTrainerHeader
 	ld a, [EngineBuffer1]
 	call FarCopyBytes
 	xor a
-	ld [wd04d], a
+	ld [wRunningTrainerBattleScript], a
 	scf
 	ret
 ; 36a5
@@ -1508,19 +1509,19 @@
 ; Return carry if the sprite at bc is facing the player,
 ; and its distance in d.
 
-	ld hl, OBJECT_MAP_X ; x
+	ld hl, OBJECT_NEXT_MAP_X ; x
 	add hl, bc
 	ld d, [hl]
 
-	ld hl, OBJECT_MAP_Y ; y
+	ld hl, OBJECT_NEXT_MAP_Y ; y
 	add hl, bc
 	ld e, [hl]
 
-	ld a, [PlayerMapX]
+	ld a, [PlayerNextMapX]
 	cp d
 	jr z, .CheckY
 
-	ld a, [PlayerMapY]
+	ld a, [PlayerNextMapY]
 	cp e
 	jr z, .CheckX
 
@@ -1528,7 +1529,7 @@
 	ret
 
 .CheckY
-	ld a, [PlayerMapY]
+	ld a, [PlayerNextMapY]
 	sub e
 	jr z, .NotFacing
 	jr nc, .Above
@@ -1537,16 +1538,16 @@
 	cpl
 	inc a
 	ld d, a
-	ld e, UP << 2
+	ld e, OW_UP
 	jr .CheckFacing
 
 .Above
 	ld d, a
-	ld e, DOWN << 2
+	ld e, OW_DOWN
 	jr .CheckFacing
 
 .CheckX
-	ld a, [PlayerMapX]
+	ld a, [PlayerNextMapX]
 	sub d
 	jr z, .NotFacing
 	jr nc, .Left
@@ -1555,12 +1556,12 @@
 	cpl
 	inc a
 	ld d, a
-	ld e, LEFT << 2
+	ld e, OW_LEFT
 	jr .CheckFacing
 
 .Left
 	ld d, a
-	ld e, RIGHT << 2
+	ld e, OW_RIGHT
 
 .CheckFacing
 	call GetSpriteDirection
@@ -2016,17 +2017,17 @@
 
 
 
-Function3b2a:: ; 3b2a
+_InitSpriteAnimStruct:: ; 3b2a
 
 	ld [wc3b8], a
 	ld a, [hROMBank]
 	push af
 
-	ld a, BANK(Function8cfd6)
+	ld a, BANK(InitSpriteAnimStruct)
 	rst Bankswitch
 	ld a, [wc3b8]
 
-	call Function8cfd6
+	call InitSpriteAnimStruct
 
 	pop af
 	rst Bankswitch
--- a/home/audio.asm
+++ b/home/audio.asm
@@ -312,13 +312,13 @@
 	ret
 ; 3ca8
 
-FadeOutMusic:: ; 3ca8
+Unused_RotatePalettesRightMusic:: ; 3ca8
 	ld a, 4
 	ld [MusicFade], a
 	ret
 ; 3cae
 
-FadeInMusic:: ; 3cae
+RotatePalettesLeftMusic:: ; 3cae
 	ld a, 4 | 1 << 7
 	ld [MusicFade], a
 	ret
--- a/home/battle.asm
+++ b/home/battle.asm
@@ -285,7 +285,7 @@
 	call SpeechTextBox
 	call MobileTextBorder
 	call UpdateSprites
-	call Function321c
+	call ApplyTilemap
 	pop hl
 	call PrintTextBoxText
 	ret
--- a/home/fade.asm
+++ b/home/fade.asm
@@ -8,10 +8,10 @@
 	ld a, l
 	sub b
 	ld l, a
-	jr nc, .asm_499
+	jr nc, .okay
 	dec h
 
-.asm_499
+.okay
 	ld a, [hli]
 	ld [rBGP], a
 	ld a, [hli]
@@ -22,34 +22,34 @@
 ; 4a3
 
 
-Function4a3:: ; 4a3
+RotateFourPalettesRight:: ; 4a3
 	ld a, [hCGB]
 	and a
-	jr z, .asm_4af
+	jr z, .dmg
 	ld hl, IncGradGBPalTable_00
 	ld b, 4
-	jr FadeOut
+	jr RotatePalettesRight
 
-.asm_4af
+.dmg
 	ld hl, IncGradGBPalTable_08
 	ld b, 4
-	jr FadeOut
+	jr RotatePalettesRight
 ; 4b6
 
-FadeToWhite:: ; 4b6
+RotateThreePalettesRight:: ; 4b6
 	ld a, [hCGB]
 	and a
-	jr z, .asm_4c2
+	jr z, .dmg
 	ld hl, IncGradGBPalTable_05
 	ld b, 3
-	jr FadeOut
+	jr RotatePalettesRight
 
-.asm_4c2
+.dmg
 	ld hl, IncGradGBPalTable_13
 	ld b, 3
-; 4c7
-
-FadeOut:: ; 4c7
+RotatePalettesRight:: ; 4c7
+; Rotate palettes to the right and fill with loaded colors from the left
+; If we're already at the leftmost color, fill with the leftmost color
 	push de
 	ld a, [hli]
 	call DmgToCgbBGPals
@@ -62,39 +62,38 @@
 	call DelayFrames
 	pop de
 	dec b
-	jr nz, FadeOut
+	jr nz, RotatePalettesRight
 	ret
 ; 4dd
 
-Function4dd:: ; 4dd
+RotateFourPalettesLeft:: ; 4dd
 	ld a, [hCGB]
 	and a
-	jr z, .asm_4e9
+	jr z, .dmg
 	ld hl, IncGradGBPalTable_04 - 1
 	ld b, 4
-	jr FadeIn
+	jr RotatePalettesLeft
 
-.asm_4e9
+.dmg
 	ld hl, IncGradGBPalTable_12 - 1
 	ld b, 4
-	jr FadeIn
+	jr RotatePalettesLeft
 ; 4f0
 
-Function4f0:: ; 4f0
+RotateThreePalettesLeft:: ; 4f0
 	ld a, [hCGB]
 	and a
-	jr z, .asm_4fc
+	jr z, .dmg
 	ld hl, IncGradGBPalTable_07 - 1
 	ld b, 3
-	jr FadeIn
+	jr RotatePalettesLeft
 
-.asm_4fc
+.dmg
 	ld hl, IncGradGBPalTable_15 - 1
 	ld b, 3
-	; fallthrough
-; 501
-
-FadeIn:: ; 501
+RotatePalettesLeft:: ; 501
+; Rotate palettes to the left and fill with loaded colors from the right
+; If we're already at the rightmost color, fill with the rightmost color
 	push de
 	ld a, [hld]
 	ld d, a
@@ -107,7 +106,7 @@
 	call DelayFrames
 	pop de
 	dec b
-	jr nz, FadeIn
+	jr nz, RotatePalettesLeft
 	ret
 ; 517
 
@@ -117,9 +116,11 @@
 IncGradGBPalTable_01:: db %11111110, %11111110, %11111110
 IncGradGBPalTable_02:: db %11111001, %11111001, %11111001
 IncGradGBPalTable_03:: db %11100100, %11100100, %11100100
+
 IncGradGBPalTable_04:: db %11100100, %11100100, %11100100
 IncGradGBPalTable_05:: db %10010000, %10010000, %10010000
 IncGradGBPalTable_06:: db %01000000, %01000000, %01000000
+
 IncGradGBPalTable_07:: db %00000000, %00000000, %00000000
 ;                           bgp       obp1       obp2
 IncGradGBPalTable_08:: db %11111111, %11111111, %11111111
@@ -126,8 +127,10 @@
 IncGradGBPalTable_09:: db %11111110, %11111110, %11111000
 IncGradGBPalTable_10:: db %11111001, %11100100, %11100100
 IncGradGBPalTable_11:: db %11100100, %11010000, %11100000
+
 IncGradGBPalTable_12:: db %11100100, %11010000, %11100000
 IncGradGBPalTable_13:: db %10010000, %10000000, %10010000
 IncGradGBPalTable_14:: db %01000000, %01000000, %01000000
+
 IncGradGBPalTable_15:: db %00000000, %00000000, %00000000
 ; 547
--- a/home/map.asm
+++ b/home/map.asm
@@ -258,10 +258,10 @@
 ; 2266
 
 .GetDestinationWarpNumber ; 2266
-	ld a, [PlayerMapY]
+	ld a, [PlayerNextMapY]
 	sub $4
 	ld e, a
-	ld a, [PlayerMapX]
+	ld a, [PlayerNextMapX]
 	sub $4
 	ld d, a
 	ld a, [wCurrMapWarpCount]
@@ -570,11 +570,11 @@
 ReadCoordEvents:: ; 23f1
 	ld a, [hli]
 	ld c, a
-	ld [wCurrentMapXYTriggerCount], a
+	ld [wCurrentNextMapXYTriggerCount], a
 	ld a, l
-	ld [wCurrentMapXYTriggerHeaderPointer], a
+	ld [wCurrentNextMapXYTriggerHeaderPointer], a
 	ld a, h
-	ld [wCurrentMapXYTriggerHeaderPointer + 1], a
+	ld [wCurrentNextMapXYTriggerHeaderPointer + 1], a
 
 	ld a, c
 	and a
@@ -1091,7 +1091,7 @@
 	call Function2e31
 	ld a, 1
 	ld [hOAMUpdate], a
-	call Function321c
+	call ApplyTilemap
 	pop hl
 	call PrintTextBoxText
 	xor a
@@ -1232,98 +1232,99 @@
 ; 272a
 
 
-Function272a:: ; 272a
+ScrollMapDown:: ; 272a
 	hlcoord 0, 0
 	ld de, BGMapBuffer
-	call Function27b7
-	ld c, $28
+	call BackupBGMapRow
+	ld c, 2 * SCREEN_WIDTH
 	call FarCallScrollBGMapPalettes
-	ld a, [wd152]
+	ld a, [wBGMapAnchor]
 	ld e, a
-	ld a, [wd153]
+	ld a, [wBGMapAnchor + 1]
 	ld d, a
-	call Function27d3
+	call UpdateBGMapRow
 	ld a, $1
 	ld [hBGMapUpdate], a
 	ret
 ; 2748
 
-Function2748:: ; 2748
-	hlcoord 0, 16
+ScrollMapUp:: ; 2748
+	hlcoord 0, SCREEN_HEIGHT - 2
 	ld de, BGMapBuffer
-	call Function27b7
-	ld c, $28
+	call BackupBGMapRow
+	ld c, 2 * SCREEN_WIDTH
 	call FarCallScrollBGMapPalettes
-	ld a, [wd152]
+	ld a, [wBGMapAnchor]
 	ld l, a
-	ld a, [wd153]
+	ld a, [wBGMapAnchor + 1]
 	ld h, a
 	ld bc, $0200
 	add hl, bc
+; cap d at VBGMap1 / $100
 	ld a, h
-	and $3
-	or $98
+	and %00000011
+	or VBGMap0 / $100
 	ld e, l
 	ld d, a
-	call Function27d3
+	call UpdateBGMapRow
 	ld a, $1
 	ld [hBGMapUpdate], a
 	ret
 ; 2771
 
-Function2771:: ; 2771
+ScrollMapLeft:: ; 2771
 	hlcoord 0, 0
 	ld de, BGMapBuffer
-	call Function27c0
-	ld c, $24
+	call BackupBGMapColumn
+	ld c, 2 * SCREEN_HEIGHT
 	call FarCallScrollBGMapPalettes
-	ld a, [wd152]
+	ld a, [wBGMapAnchor]
 	ld e, a
-	ld a, [wd153]
+	ld a, [wBGMapAnchor + 1]
 	ld d, a
-	call Function27f8
+	call UpdateBGMapColumn
 	ld a, $1
 	ld [hBGMapUpdate], a
 	ret
 ; 278f
 
-Function278f:: ; 278f
-	hlcoord 18, 0
+ScrollMapRight:: ; 278f
+	hlcoord SCREEN_WIDTH - 2, 0
 	ld de, BGMapBuffer
-	call Function27c0
-	ld c, $24
+	call BackupBGMapColumn
+	ld c, 2 * SCREEN_HEIGHT
 	call FarCallScrollBGMapPalettes
-	ld a, [wd152]
+	ld a, [wBGMapAnchor]
 	ld e, a
-	and $e0
+	and %11100000
 	ld b, a
 	ld a, e
-	add $12
-	and $1f
+	add SCREEN_HEIGHT
+	and %00011111
 	or b
 	ld e, a
-	ld a, [wd153]
+	ld a, [wBGMapAnchor + 1]
 	ld d, a
-	call Function27f8
+	call UpdateBGMapColumn
 	ld a, $1
 	ld [hBGMapUpdate], a
 	ret
 ; 27b7
 
-Function27b7:: ; 27b7
-	ld c, $28
-.asm_27b9
+BackupBGMapRow:: ; 27b7
+	ld c, 2 * SCREEN_WIDTH
+.loop
 	ld a, [hli]
 	ld [de], a
 	inc de
 	dec c
-	jr nz, .asm_27b9
+	jr nz, .loop
 	ret
 ; 27c0
 
-Function27c0:: ; 27c0
-	ld c, $12
-.asm_27c2
+BackupBGMapColumn:: ; 27c0
+	ld c, SCREEN_HEIGHT
+.loop
 	ld a, [hli]
 	ld [de], a
 	inc de
@@ -1330,30 +1331,30 @@
 	ld a, [hl]
 	ld [de], a
 	inc de
-	ld a, $13
+	ld a, SCREEN_WIDTH - 1
 	add l
 	ld l, a
-	jr nc, .asm_27cf
+	jr nc, .skip
 	inc h
 
-.asm_27cf
+.skip
 	dec c
-	jr nz, .asm_27c2
+	jr nz, .loop
 	ret
 ; 27d3
 
-Function27d3:: ; 27d3
+UpdateBGMapRow:: ; 27d3
 	ld hl, BGMapBufferPtrs
 	push de
-	call .asm_27df
+	call .iteration
 	pop de
 	ld a, $20
 	add e
 	ld e, a
 
-.asm_27df
-	ld c, $a
-.asm_27e1
+.iteration
+	ld c, 10
+.loop
 	ld a, e
 	ld [hli], a
 	ld a, d
@@ -1369,16 +1370,16 @@
 	or b
 	ld e, a
 	dec c
-	jr nz, .asm_27e1
-	ld a, $14
-	ld [$ffdc], a
+	jr nz, .loop
+	ld a, SCREEN_WIDTH
+	ld [hFFDC], a
 	ret
 ; 27f8
 
-Function27f8:: ; 27f8
+UpdateBGMapColumn:: ; 27f8
 	ld hl, BGMapBufferPtrs
-	ld c, $12
-.asm_27fd
+	ld c, SCREEN_HEIGHT
+.loop
 	ld a, e
 	ld [hli], a
 	ld a, d
@@ -1386,30 +1387,31 @@
 	ld a, $20
 	add e
 	ld e, a
-	jr nc, .asm_280e
+	jr nc, .skip
 	inc d
+; cap d at VBGMap1 / $100
 	ld a, d
 	and $3
-	or $98
+	or VBGMap0 / $100
 	ld d, a
 
-.asm_280e
+.skip
 	dec c
-	jr nz, .asm_27fd
-	ld a, $12
-	ld [$ffdc], a
+	jr nz, .loop
+	ld a, SCREEN_HEIGHT
+	ld [hFFDC], a
 	ret
 ; 2816
 
-Function2816:: ; 2816
+; unreferenced
 	ld hl, BGMapBuffer
-	ld bc, $0078
+	ld bc, SGBPredef - BGMapBuffer
 	xor a
 	call ByteFill
 	ret
 ; 2821
 
-Function2821:: ; 2821
+LoadTileset:: ; 2821
 	ld hl, TilesetAddress
 	ld a, [hli]
 	ld h, [hl]
@@ -1416,42 +1418,50 @@
 	ld l, a
 	ld a, [TilesetBank]
 	ld e, a
+
 	ld a, [rSVBK]
 	push af
 	ld a, $6
 	ld [rSVBK], a
+
 	ld a, e
 	ld de, w6_d000
 	call FarDecompress
+
 	ld hl, w6_d000
 	ld de, VTiles2
 	ld bc, $60 tiles
 	call CopyBytes
+
 	ld a, [rVBK]
 	push af
 	ld a, $1
 	ld [rVBK], a
+
 	ld hl, w6_d600
 	ld de, VTiles2
 	ld bc, $60 tiles
 	call CopyBytes
+
 	pop af
 	ld [rVBK], a
+
 	pop af
 	ld [rSVBK], a
+
 	ld a, [wTileset]
-	cp $1
-	jr z, .asm_286f
-	cp $2
-	jr z, .asm_286f
-	cp $4
-	jr z, .asm_286f
-	jr .asm_2875
+	cp TILESET_JOHTO_1
+	jr z, .load_roof
+	cp TILESET_JOHTO_2
+	jr z, .load_roof
+	cp TILESET_BATTLE_TOWER_OUTSIDE
+	jr z, .load_roof
+	jr .skip_roof
 
-.asm_286f
+.load_roof
 	callba LoadMapGroupRoof
 
-.asm_2875
+.skip_roof
 	xor a
 	ld [hTileAnimFrame], a
 	ret
@@ -1495,42 +1505,42 @@
 	ld a, [MapWidth]
 	add $6
 	ld [hMapObjectIndexBuffer], a
-	ld a, [wd151]
+	ld a, [wPlayerStepDirection]
 	and a
-	jr z, .asm_28cb
-	cp $1
-	jr z, .asm_28c0
-	cp $2
-	jr z, .asm_28d4
-	cp $3
-	jr z, .asm_28da
+	jr z, .down
+	cp UP
+	jr z, .up
+	cp LEFT
+	jr z, .left
+	cp RIGHT
+	jr z, .right
 	ret
 
-.asm_28c0
+.up
 	ld de, wdcbf
 	ld a, [hMapObjectIndexBuffer]
 	ld c, a
 	ld b, $0
 	add hl, bc
-	jr .asm_28ce
+	jr .vertical
 
-.asm_28cb
+.down
 	ld de, XCoord + 1
 
-.asm_28ce
+.vertical
 	ld b, $6
 	ld c, $4
 	jr Function28f7
 
-.asm_28d4
+.left
 	ld de, XCoord + 2
 	inc hl
-	jr .asm_28dd
+	jr .horizontal
 
-.asm_28da
+.right
 	ld de, XCoord + 1
 
-.asm_28dd
+.horizontal
 	ld b, $5
 	ld c, $5
 	jr Function28f7
@@ -1543,55 +1553,57 @@
 	ld l, a
 	ld a, [MapWidth]
 	add $6
-	ld [hMapObjectIndexBuffer], a
+	ld [hConnectionStripLength], a
 	ld de, XCoord + 1
 	ld b, $6
 	ld c, $5
 
 Function28f7:: ; 28f7
-.asm_28f7
+.loop1
 	push bc
 	push hl
 	push de
-.asm_28fa
+.loop2
 	ld a, [de]
 	inc de
 	ld [hli], a
 	dec b
-	jr nz, .asm_28fa
+	jr nz, .loop2
 	pop de
 	ld a, e
 	add $6
 	ld e, a
-	jr nc, .asm_2908
+	jr nc, .okay
 	inc d
 
-.asm_2908
+.okay
 	pop hl
-	ld a, [hMapObjectIndexBuffer]
+	ld a, [hConnectionStripLength]
 	ld c, a
 	ld b, $0
 	add hl, bc
 	pop bc
 	dec c
-	jr nz, .asm_28f7
+	jr nz, .loop1
 	ret
 ; 2914
 
-Function2914:: ; 2914
+GetMovementPermissions:: ; 2914
 	xor a
 	ld [TilePermissions], a
-	call Function296c
-	call Function294d
-	ld a, [PlayerMapX]
+	call GetLeftRightCollision
+	call GetUpDownCollision
+; get coords of current tile
+	ld a, [PlayerNextMapX]
 	ld d, a
-	ld a, [PlayerMapY]
+	ld a, [PlayerNextMapY]
 	ld e, a
-	call Function2a3c
-	ld [PlayerStandingTile], a
+	call GetCoordTile
+	ld [PlayerNextTile], a
 	call Function29ff
 	ret nz
-	ld a, [PlayerStandingTile]
+
+	ld a, [PlayerNextTile]
 	and 7
 	ld hl, .data_2945
 	add l
@@ -1610,37 +1622,41 @@
 	db 1, 2, 4, 8, 9, 10, 5, 6
 ; 294d
 
-Function294d:: ; 294d
-	ld a, [PlayerMapX]
+GetUpDownCollision:: ; 294d
+	ld a, [PlayerNextMapX]
 	ld d, a
-	ld a, [PlayerMapY]
+	ld a, [PlayerNextMapY]
 	ld e, a
+
 	push de
 	inc e
-	call Function2a3c
+	call GetCoordTile
 	ld [TileDown], a
 	call Function298b
+
 	pop de
 	dec e
-	call Function2a3c
+	call GetCoordTile
 	ld [TileUp], a
 	call Function29a8
 	ret
 ; 296c
 
-Function296c:: ; 296c
-	ld a, [PlayerMapX]
+GetLeftRightCollision:: ; 296c
+	ld a, [PlayerNextMapX]
 	ld d, a
-	ld a, [PlayerMapY]
+	ld a, [PlayerNextMapY]
 	ld e, a
+
 	push de
 	dec d
-	call Function2a3c
+	call GetCoordTile
 	ld [TileLeft], a
 	call Function29e2
+
 	pop de
 	inc d
-	call Function2a3c
+	call GetCoordTile
 	ld [TileRight], a
 	call Function29c5
 	ret
@@ -1650,7 +1666,7 @@
 	call Function29ff
 	ret nz
 	ld a, [TileDown]
-	and $7
+	and 7
 	cp $2
 	jr z, .ok
 	cp $6
@@ -1660,7 +1676,7 @@
 
 .ok
 	ld a, [TilePermissions]
-	or $8
+	or FACE_DOWN
 	ld [TilePermissions], a
 	ret
 ; 29a8
@@ -1669,7 +1685,7 @@
 	call Function29ff
 	ret nz
 	ld a, [TileUp]
-	and $7
+	and 7
 	cp $3
 	jr z, .ok
 	cp $4
@@ -1679,7 +1695,7 @@
 
 .ok
 	ld a, [TilePermissions]
-	or $4
+	or FACE_UP
 	ld [TilePermissions], a
 	ret
 ; 29c5
@@ -1688,7 +1704,7 @@
 	call Function29ff
 	ret nz
 	ld a, [TileRight]
-	and $7
+	and 7
 	cp $1
 	jr z, .ok
 	cp $5
@@ -1698,7 +1714,7 @@
 
 .ok
 	ld a, [TilePermissions]
-	or $1
+	or FACE_RIGHT
 	ld [TilePermissions], a
 	ret
 ; 29e2
@@ -1707,7 +1723,7 @@
 	call Function29ff
 	ret nz
 	ld a, [TileLeft]
-	and $7
+	and 7
 	cp $0
 	jr z, .ok
 	cp $4
@@ -1717,7 +1733,7 @@
 
 .ok
 	ld a, [TilePermissions]
-	or $2
+	or FACE_LEFT
 	ld [TilePermissions], a
 	ret
 ; 29ff
@@ -1756,10 +1772,10 @@
 	ld h, [hl]
 	ld l, a
 
-	ld a, [PlayerMapX]
+	ld a, [PlayerNextMapX]
 	add d
 	ld d, a
-	ld a, [PlayerMapY]
+	ld a, [PlayerNextMapY]
 	add e
 	ld e, a
 	ld a, [hl]
@@ -1778,7 +1794,8 @@
 ; 2a3c
 
 
-Function2a3c:: ; 2a3c
+GetCoordTile:: ; 2a3c
+; Get the collision byte for tile d, e
 	call GetBlockLocation
 	ld a, [hl]
 	and a
@@ -1911,9 +1928,9 @@
 	ret
 ; 2ad4
 
-CheckCurrentMapXYTriggers:: ; 2ad4
+CheckCurrentNextMapXYTriggers:: ; 2ad4
 ; If there are no xy triggers, we don't need to be here.
-	ld a, [wCurrentMapXYTriggerCount]
+	ld a, [wCurrentNextMapXYTriggerCount]
 	and a
 	ret z
 ; Copy the trigger count into c.
@@ -1930,7 +1947,7 @@
 
 CheckStandingOnXYTrigger:: ; 2ae7
 ; Checks to see if you are standing on an xy-trigger.  If yes, copies the trigger to EngineBuffer1 and sets carry.
-	ld hl, wCurrentMapXYTriggerHeaderPointer
+	ld hl, wCurrentNextMapXYTriggerHeaderPointer
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
@@ -1938,10 +1955,10 @@
 	call CheckTriggers
 	ld b, a
 ; Load your current coordinates into de.  This will be used to check if your position is in the xy-trigger table for the current map.
-	ld a, [PlayerMapX]
+	ld a, [PlayerNextMapX]
 	sub 4
 	ld d, a
-	ld a, [PlayerMapY]
+	ld a, [PlayerNextMapY]
 	sub 4
 	ld e, a
 
@@ -1997,7 +2014,7 @@
 ; 2b3c
 
 
-Function2b3c:: ; 2b3c
+ReturnToCallingMenu:: ; 2b3c
 	call ClearBGPalettes
 	call Function2bae
 	call UpdateSprites
@@ -2006,16 +2023,14 @@
 	jr Function2b5c
 ; 2b4d
 
-Function2b4d:: ; 2b4d
+ExitAllMenus:: ; 2b4d
 	call ClearBGPalettes
 	call Call_ExitMenu
 	call Function2bae
 	call UpdateSprites
 	call Functiond90
-; 2b5c
-
 Function2b5c:: ; 2b5c
-	ld b, $9
+	ld b, SCGB_09
 	call GetSGBLayout
 	callba Function49409
 	call Function3200
@@ -2028,7 +2043,7 @@
 Function2b74:: ; 0x2b74
 	push af
 	ld a, $1
-	ld [wc2ce], a
+	ld [wSpriteUpdatesEnabled], a
 	call ClearBGPalettes
 	call ClearSprites
 	call Function2bae
@@ -2039,7 +2054,7 @@
 	set 0, [hl]
 	call UpdateSprites
 	call Function3200
-	ld b, $9
+	ld b, SCGB_09
 	call GetSGBLayout
 	callba Function49409
 	call UpdateTimePals
@@ -2065,7 +2080,7 @@
 	call SwitchToAnyMapBank
 	callba Function8c001
 	call OverworldTextModeSwitch
-	call Function2821
+	call LoadTileset
 	ld a, 9
 	call SkipMusic
 	pop af
--- a/home/map_objects.asm
+++ b/home/map_objects.asm
@@ -6,7 +6,9 @@
 	push de
 	push bc
 	ld c, a
+
 	callba _GetSpritePalette
+
 	ld a, c
 	pop bc
 	pop de
@@ -15,7 +17,7 @@
 ; 180e
 
 
-Function180e:: ; 180e
+GetSpriteVTile:: ; 180e
 	push hl
 	push bc
 	ld hl, UsedSprites + 2
@@ -78,7 +80,7 @@
 
 
 Function184a:: ; 184a
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	call GetTileCollision
 	ld b, a
 	ret
@@ -85,7 +87,7 @@
 ; 1852
 
 CheckOnWater:: ; 1852
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	call GetTileCollision
 	sub 1
 	ret z
@@ -122,7 +124,18 @@
 ; 1875
 
 
-Function1875:: ; 1875
+CheckGrassTile:: ; 1875
+	; and %00110111
+	; cp $10
+	; ret c
+	; cp $30
+	; jr nc, .okay
+	; scf
+	; ret
+	; .okay
+	; xor a
+	; ret
+
 	ld d, a
 	and $f0
 	cp $10
@@ -138,7 +151,7 @@
 	ret z
 	scf
 	ret
-
+; For some reason, the above code is duplicated down here.
 .ok_20
 	ld a, d
 	and 7
@@ -209,7 +222,7 @@
 ; 18c3
 
 CheckStandingOnEntrance:: ; 18c3
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	cp $71 ; door
 	ret z
 	cp $79
@@ -445,7 +458,7 @@
 	add hl, bc
 	ld [hl], SPRITEMOVEDATA_SCRIPTED
 
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, bc
 	ld [hl], 0
 
@@ -508,7 +521,7 @@
 	ret
 ; 1a47
 
-Function1a47:: ; 1a47
+GetInitialFacing:: ; 1a47
 	push bc
 	push de
 	ld e, a
@@ -529,7 +542,7 @@
 ; 1a61
 
 
-Function1a61:: ; 1a61
+CopySpriteMovementData:: ; 1a61
 	ld l, a
 	ld a, [hROMBank]
 	push af
@@ -538,7 +551,7 @@
 	ld a, l
 	push bc
 
-	call Function1a71
+	call .CopyData
 
 	pop bc
 	pop af
@@ -547,10 +560,11 @@
 	ret
 ; 1a71
 
-Function1a71:: ; 1a71
+.CopyData ; 1a71
 	ld hl, OBJECT_MOVEMENTTYPE
 	add hl, de
 	ld [hl], a
+
 	push de
 	ld e, a
 	ld d, 0
@@ -561,29 +575,34 @@
 	ld b, h
 	ld c, l
 	pop de
+
 	ld a, [bc]
 	inc bc
 	rlca
 	rlca
-	and $c
+	and %00001100
 	ld hl, OBJECT_FACING
 	add hl, de
 	ld [hl], a
+
 	ld a, [bc]
 	inc bc
-	ld hl, OBJECT_11
+	ld hl, OBJECT_ACTION
 	add hl, de
 	ld [hl], a
+
 	ld a, [bc]
 	inc bc
 	ld hl, OBJECT_FLAGS1
 	add hl, de
 	ld [hl], a
+
 	ld a, [bc]
 	inc bc
 	ld hl, OBJECT_FLAGS2
 	add hl, de
 	ld [hl], a
+
 	ld a, [bc]
 	inc bc
 	ld hl, OBJECT_PALETTE
@@ -635,8 +654,9 @@
 	ld a, [VramState]
 	bit 0, a
 	ret z
+
 	callba Function55e0
-	callba RefreshMapAppearDisappear
+	callba _UpdateSprites
 	ret
 ; 1ae5
 
@@ -659,6 +679,7 @@
 ; 1af8
 
 SetSpriteDirection:: ; 1af8
+	; preserves other flags
 	push af
 	ld hl, OBJECT_FACING
 	add hl, bc
--- a/home/menu.asm
+++ b/home/menu.asm
@@ -77,7 +77,7 @@
 	call MenuBox
 	call UpdateSprites
 	call Function1c89
-	call Function321c
+	call ApplyTilemap
 	call CopyMenuData2
 	ld a, [wMenuData2Flags]
 	bit 7, a
@@ -227,7 +227,7 @@
 	ret
 ; 1e5d
 
-Function1e5d:: ; 1e5d
+DoNthMenu:: ; 1e5d
 	call MenuFunc_1e7f
 	call MenuWriteText
 	call Function1eff
@@ -262,7 +262,7 @@
 	push af
 	ld a, $1
 	ld [hOAMUpdate], a
-	call Function321c
+	call ApplyTilemap
 	pop af
 	ld [hOAMUpdate], a
 	ret
@@ -438,7 +438,7 @@
 	ret
 ; 1f8d
 
-Function1f8d:: ; 1f8d
+PlaceNthMenuStrings:: ; 1f8d
 	push de
 	ld a, [MenuSelection]
 	call Function1fb1
@@ -464,7 +464,7 @@
 	ret
 ; 1fa7
 
-Function1fa7:: ; 1fa7
+MenuJumptable:: ; 1fa7
 	ld a, [MenuSelection]
 	call Function1fb1
 	ld a, [hli]
@@ -546,7 +546,7 @@
 	ret
 ; 0x2012
 
-Function2012:: ; 2012
+MenuTextBoxWaitButton:: ; 2012
 	call MenuTextBox
 	call CloseText
 	call ExitMenu
--- a/home/movement.asm
+++ b/home/movement.asm
@@ -136,17 +136,17 @@
 	big_step_right
 ; 1bb1
 
-Function1bb1:: ; 1bb1
+InitMenu3:: ; 1bb1
 	push hl
 	push bc
 	ld hl, wcfa1
 	ld b, $8
-.asm_1bb8
+.loop
 	ld a, [de]
 	inc de
 	ld [hli], a
 	dec b
-	jr nz, .asm_1bb8
+	jr nz, .loop
 	ld a, $1
 rept 2
 	ld [hli], a
--- a/home/palettes.asm
+++ b/home/palettes.asm
@@ -95,7 +95,7 @@
 
 ; copy & reorder bg pal buffer
 	ld hl, BGPals ; to
-	ld de, wMapPals ; from
+	ld de, UnknBGPals ; from
 ; order
 	ld a, [rBGP]
 	ld b, a
@@ -143,7 +143,7 @@
 
 ; copy & reorder obj pal buffer
 	ld hl, OBPals ; to
-	ld de, Unkn2Pals ; from
+	ld de, UnknOBPals ; from
 ; order
 	ld a, [rOBP0]
 	ld b, a
@@ -182,7 +182,7 @@
 	ld [rSVBK], a
 
 	ld hl, OBPals
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld a, [rOBP0]
 	ld b, a
 	ld c, $1
@@ -216,7 +216,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, OBPals + 8
-	ld de, Unkn2Pals + 8
+	ld de, UnknOBPals + 8
 	ld a, [rOBP1]
 	ld b, a
 	ld c, $1
@@ -289,16 +289,19 @@
 ; d79
 
 
-Functiond79:: ; d79
+ClearVBank1:: ; d79
 	ld a, [hCGB]
 	and a
 	ret z
+
 	ld a, 1
 	ld [rVBK], a
+
 	ld hl, VTiles0
-	ld bc, $2000
+	ld bc, VRAM_End - VTiles0
 	xor a
 	call ByteFill
+
 	ld a, 0
 	ld [rVBK], a
 	ret
@@ -347,7 +350,9 @@
 	push af
 	ld a, BANK(ScrollBGMapPalettes)
 	rst Bankswitch
+
 	call ScrollBGMapPalettes
+
 	pop af
 	rst Bankswitch
 	ret
--- a/home/rtc.asm
+++ b/home/rtc.asm
@@ -2,7 +2,7 @@
 ; update time and time-sensitive palettes
 
 ; rtc enabled?
-	ld a, [wc2ce]
+	ld a, [wSpriteUpdatesEnabled]
 	cp 0
 	ret z
 	
--- a/home/serial.asm
+++ b/home/serial.asm
@@ -247,8 +247,8 @@
 ; 83b
 
 Function83b:: ; 83b
-	ld hl, wcf56
-	ld de, wcf51
+	ld hl, wPlayerLinkAction
+	ld de, wOtherPlayerLinkMode
 	ld c, $2
 	ld a, $1
 	ld [hFFCC], a
@@ -274,7 +274,7 @@
 
 Function862:: ; 862
 	call LoadTileMapToTempTileMap
-	callab Function4000
+	callab PlaceWaitingText
 	call Function87d
 	jp Call_LoadTempTileMapToTileMap
 ; 871
@@ -282,102 +282,106 @@
 
 Function871:: ; 871
 	call LoadTileMapToTempTileMap
-	callab Function4000
+	callab PlaceWaitingText
 	jp Function87d
 ; 87d
 
+; One "giant" leap for machinekind
 
-
 Function87d:: ; 87d
 	ld a, $ff
-	ld [wcf52], a
-.asm_882
-	call Function8c1
+	ld [wOtherPlayerLinkAction], a
+.loop
+	call LinkCommunicationsSendReceive
 	call DelayFrame
 	call Function82b
-	jr z, .asm_89e
+	jr z, .check
 	push hl
 	ld hl, wcf5c
 	dec [hl]
-	jr nz, .asm_89d
+	jr nz, .skip
 	dec hl
 	dec [hl]
-	jr nz, .asm_89d
+	jr nz, .skip
 	pop hl
 	xor a
 	jp Function833
 
-.asm_89d
+.skip
 	pop hl
 
-.asm_89e
-	ld a, [wcf52]
+.check
+	ld a, [wOtherPlayerLinkAction]
 	inc a
-	jr z, .asm_882
-	ld b, $a
-.asm_8a6
+	jr z, .loop
+
+	ld b, 10
+.receive
 	call DelayFrame
-	call Function8c1
+	call LinkCommunicationsSendReceive
 	dec b
-	jr nz, .asm_8a6
-	ld b, $a
-.asm_8b1
+	jr nz, .receive
+
+	ld b, 10
+.acknowledge
 	call DelayFrame
-	call Function908
+	call LinkCommunicationsSignalDataReceived
 	dec b
-	jr nz, .asm_8b1
-	ld a, [wcf52]
-	ld [wcf51], a
+	jr nz, .acknowledge
+
+	ld a, [wOtherPlayerLinkAction]
+	ld [wOtherPlayerLinkMode], a
 	ret
 ; 8c1
 
-Function8c1:: ; 8c1
+LinkCommunicationsSendReceive:: ; 8c1
 	push bc
-	ld b, $60
+	ld b, SERIAL_TIMECAPSULE
 	ld a, [wLinkMode]
-	cp $1
-	jr z, .asm_8d7
-	ld b, $60
-	jr c, .asm_8d7
-	cp $2
-	ld b, $70
-	jr z, .asm_8d7
-	ld b, $80
+	cp LINK_TIMECAPSULE
+	jr z, .got_high_nybble
+	ld b, SERIAL_TIMECAPSULE
+	jr c, .got_high_nybble
+	cp LINK_TRADECENTER
+	ld b, SERIAL_TRADECENTER
+	jr z, .got_high_nybble
+	ld b, SERIAL_BATTLE
 
-.asm_8d7
-	call Function8f3
-	ld a, [wcf56]
+.got_high_nybble
+	call .Receive
+	ld a, [wPlayerLinkAction]
 	add b
 	ld [hSerialSend], a
 	ld a, [hLinkPlayerNumber]
 	cp $2
-	jr nz, .asm_8ee
+	jr nz, .player_1
 	ld a, $1
 	ld [rSC], a
 	ld a, $81
 	ld [rSC], a
 
-.asm_8ee
-	call Function8f3
+.player_1
+	call .Receive
 	pop bc
 	ret
 ; 8f3
 
-Function8f3:: ; 8f3
+.Receive ; 8f3
 	ld a, [hSerialReceive]
-	ld [wcf51], a
+	ld [wOtherPlayerLinkMode], a
 	and $f0
 	cp b
 	ret nz
 	xor a
 	ld [hSerialReceive], a
-	ld a, [wcf51]
+	ld a, [wOtherPlayerLinkMode]
 	and $f
-	ld [wcf52], a
+	ld [wOtherPlayerLinkAction], a
 	ret
 ; 908
 
-Function908:: ; 908
+LinkCommunicationsSignalDataReceived:: ; 908
+; Let the other system know that the data has been received.
 	xor a
 	ld [hSerialSend], a
 	ld a, [hLinkPlayerNumber]
--- a/home/text.asm
+++ b/home/text.asm
@@ -192,7 +192,7 @@
 	push hl
 	call SpeechTextBox
 	call UpdateSprites
-	call Function321c
+	call ApplyTilemap
 	pop hl
 	ret
 ; 1078
@@ -714,7 +714,7 @@
 	ret
 ; 13e0
 
-Function13e0:: ; 13e0
+PokeFluteTerminatorCharacter:: ; 13e0
 	ld hl, .stop
 	ret
 
@@ -880,10 +880,10 @@
 ; [$03][addr]
 
 	ld a, [hli]
-	ld [wd0e4 + 2], a
+	ld [wMenuScrollPosition + 2], a
 	ld c, a
 	ld a, [hli]
-	ld [wd0e4 + 2 + 1], a
+	ld [wMenuScrollPosition + 2 + 1], a
 	ld b, a
 	ret
 ; 148b
--- a/home/tilemap.asm
+++ b/home/tilemap.asm
@@ -16,7 +16,7 @@
 WriteBackup:: ; 0x1c17
 	push af
 	call ExitMenu
-	call Function321c
+	call ApplyTilemap
 	call UpdateSprites
 	pop af
 	ret
--- a/home/time.asm
+++ b/home/time.asm
@@ -5,10 +5,10 @@
 	push af
 	ld a, [hMobile]
 	and a
-	jr z, .asm_59a
+	jr z, .not_mobile
 	call Timer
 
-.asm_59a
+.not_mobile
 	pop af
 	reti
 ; 59c
@@ -101,7 +101,7 @@
 ; update dl
 	ld [hRTCDayLo], a ; DL
 
-; flag for s0_ac60
+; flag for sRTCStatusFlags
 	ld a, %01000000
 	jr .set
 
@@ -120,7 +120,7 @@
 ; update dl
 	ld [hRTCDayLo], a ; DL
 	
-; flag for s0_ac60
+; flag for sRTCStatusFlags
 	ld a, %00100000
 	
 .set
@@ -190,7 +190,7 @@
 Function658:: ; 658
 	xor a
 	ld [StringBuffer2], a
-	ld a, $0
+	ld a, $0 ; useless
 	ld [StringBuffer2 + 3], a
 	jr Function677
 
@@ -202,7 +202,7 @@
 	ld [StringBuffer2 + 2], a
 	ld a, [hSeconds]
 	ld [StringBuffer2 + 3], a
-	jr Function677
+	jr Function677 ; useless
 
 Function677:: ; 677
 	callba Function140ed
@@ -211,13 +211,13 @@
 
 
 
-Function67e:: ; 67e
-	call Function685
+PanicResetClock:: ; 67e
+	call .ClearhRTC
 	call SetClock
 	ret
 ; 685
 
-Function685:: ; 685
+.ClearhRTC ; 685
 	xor a
 	ld [hRTCSeconds], a
 	ld [hRTCMinutes], a
@@ -277,23 +277,23 @@
 ; 6c4
 
 
-Function6c4:: ; 6c4
-; clear s0_ac60
+ClearRTCStatus:: ; 6c4
+; clear sRTCStatusFlags
 	xor a
 	push af
-	ld a, BANK(s0_ac60)
+	ld a, BANK(sRTCStatusFlags)
 	call GetSRAMBank
 	pop af
-	ld [s0_ac60], a
+	ld [sRTCStatusFlags], a
 	call CloseSRAM
 	ret
 ; 6d3
 
-Function6d3:: ; 6d3
-; append flags to s0_ac60
-	ld hl, s0_ac60
+RecordRTCStatus:: ; 6d3
+; append flags to sRTCStatusFlags
+	ld hl, sRTCStatusFlags
 	push af
-	ld a, BANK(s0_ac60)
+	ld a, BANK(sRTCStatusFlags)
 	call GetSRAMBank
 	pop af
 	or [hl]
@@ -302,11 +302,11 @@
 	ret
 ; 6e3
 
-Function6e3:: ; 6e3
-; check s0_ac60
-	ld a, BANK(s0_ac60)
+CheckRTCStatus:: ; 6e3
+; check sRTCStatusFlags
+	ld a, BANK(sRTCStatusFlags)
 	call GetSRAMBank
-	ld a, [s0_ac60]
+	ld a, [sRTCStatusFlags]
 	call CloseSRAM
 	ret
 ; 6ef
--- a/hram.asm
+++ b/hram.asm
@@ -32,6 +32,7 @@
 hJoyLast           EQU $ffa9
 hInMenu            EQU $ffaa
 
+hPrinter           EQU $ffac
 hFillBox           EQU $ffad
 
 hMapObjectIndexBuffer EQU $ffaf
@@ -96,6 +97,7 @@
 hSPBuffer          EQU $ffd9
 
 hBGMapUpdate       EQU $ffdb
+hFFDC              EQU $ffdc
 
 hMapAnims          EQU $ffde
 hTileAnimFrame     EQU $ffdf
--- a/items/item_effects.asm
+++ b/items/item_effects.asm
@@ -4,7 +4,7 @@
 	call GetItemName
 	call CopyName1
 	ld a, 1
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ld a, [CurItem]
 	dec a
 	ld hl, ItemEffects
@@ -228,7 +228,7 @@
 	ld [wWildMon], a
 	ld a, [CurItem]
 	cp PARK_BALL
-	call nz, Functionedfa
+	call nz, ReturnToBattle_UseBall
 
 	ld hl, Options
 	res NO_TEXT_SCROLL, [hl]
@@ -421,16 +421,16 @@
 	jr nz, .caught
 	ld a, [Buffer2]
 	cp $1
-	ld hl, UnknownText_0xedb5
+	ld hl, Text_NoShake
 	jp z, .shake_and_break_free
 	cp $2
-	ld hl, UnknownText_0xedba
+	ld hl, Text_OneShake
 	jp z, .shake_and_break_free
 	cp $3
-	ld hl, UnknownText_0xedbf
+	ld hl, Text_TwoShakes
 	jp z, .shake_and_break_free
 	cp $4
-	ld hl, UnknownText_0xedc4
+	ld hl, Text_ThreeShakes
 	jp z, .shake_and_break_free
 .caught
 
@@ -535,7 +535,7 @@
 	call CheckReceivedDex
 	jr z, .skip_pokedex
 
-	ld hl, UnknownText_0xedf0
+	ld hl, Text_AddedToPokedex
 	call PrintText
 
 	call ClearSprites
@@ -542,7 +542,7 @@
 
 	ld a, [EnemyMonSpecies]
 	ld [wd265], a
-	predef Functionfb877
+	predef NewPokedexEntry
 
 .skip_pokedex
 	ld a, [BattleType]
@@ -564,7 +564,7 @@
 
 	predef TryAddMonToParty
 
-	callba Function4db49
+	callba SetCaughtData
 
 	ld a, [CurItem]
 	cp FRIEND_BALL
@@ -580,7 +580,7 @@
 	ld [hl], a
 .SkipPartyMonFriendBall
 
-	ld hl, UnknownText_0xedf5
+	ld hl, Text_AskNicknameNewlyCaughtMon
 	call PrintText
 
 	ld a, [CurPartySpecies]
@@ -605,7 +605,7 @@
 	ld b, 0
 	callba NamingScreen
 
-	call FadeToWhite
+	call RotateThreePalettesRight
 
 	call LoadStandardFont
 
@@ -620,7 +620,7 @@
 
 	predef SentPkmnIntoBox
 
-	callba Function4db83
+	callba SetBoxMonCaughtData
 
 	ld a, BANK(sBoxCount)
 	call GetSRAMBank
@@ -640,7 +640,7 @@
 .SkipBoxMonFriendBall
 	call CloseSRAM
 
-	ld hl, UnknownText_0xedf5
+	ld hl, Text_AskNicknameNewlyCaughtMon
 	call PrintText
 
 	ld a, [CurPartySpecies]
@@ -683,10 +683,10 @@
 
 	call CloseSRAM
 
-	ld hl, UnknownText_0xedeb
+	ld hl, Text_SentToBillsPC
 	call PrintText
 
-	call FadeToWhite
+	call RotateThreePalettesRight
 	call LoadStandardFont
 	jr .return_from_capture
 
@@ -1092,37 +1092,40 @@
 	ld b, $ff
 	ret
 
-UnknownText_0xedab: ; 0xedab
+; These two texts were carried over from gen 1.
+; They are not used in gen 2, and are dummied out.
+
+Text_RBY_CatchMarowak: ; 0xedab
 	; It dodged the thrown BALL! This #MON can't be caught!
 	text_jump UnknownText_0x1c5a5a
 	db "@"
 ; 0xedb0
 
-UnknownText_0xedb0: ; 0xedb0
+Text_RBY_NoShake: ; 0xedb0
 	; You missed the #MON!
 	text_jump UnknownText_0x1c5a90
 	db "@"
 ; 0xedb5
 
-UnknownText_0xedb5: ; 0xedb5
+Text_NoShake: ; 0xedb5
 	; Oh no! The #MON broke free!
 	text_jump UnknownText_0x1c5aa6
 	db "@"
 ; 0xedba
 
-UnknownText_0xedba: ; 0xedba
+Text_OneShake: ; 0xedba
 	; Aww! It appeared to be caught!
 	text_jump UnknownText_0x1c5ac3
 	db "@"
 ; 0xedbf
 
-UnknownText_0xedbf: ; 0xedbf
+Text_TwoShakes: ; 0xedbf
 	; Aargh! Almost had it!
 	text_jump UnknownText_0x1c5ae3
 	db "@"
 ; 0xedc4
 
-UnknownText_0xedc4: ; 0xedc4
+Text_ThreeShakes: ; 0xedc4
 	; Shoot! It was so close too!
 	text_jump UnknownText_0x1c5afa
 	db "@"
@@ -1132,9 +1135,6 @@
 	; Gotcha! @ was caught!@ @
 	text_jump UnknownText_0x1c5b17
 	start_asm
-; 0xedce
-
-Functionedce: ; edce
 	call WaitSFX
 	push bc
 	ld de, MUSIC_NONE
@@ -1153,30 +1153,30 @@
 	db "@"
 ; 0xedeb
 
-UnknownText_0xedeb: ; 0xedeb
+Text_SentToBillsPC: ; 0xedeb
 	; was sent to BILL's PC.
 	text_jump UnknownText_0x1c5b38
 	db "@"
 ; 0xedf0
 
-UnknownText_0xedf0: ; 0xedf0
+Text_AddedToPokedex: ; 0xedf0
 	; 's data was newly added to the #DEX.@ @
 	text_jump UnknownText_0x1c5b53
 	db "@"
 ; 0xedf5
 
-UnknownText_0xedf5: ; 0xedf5
+Text_AskNicknameNewlyCaughtMon: ; 0xedf5
 	; Give a nickname to @ ?
 	text_jump UnknownText_0x1c5b7f
 	db "@"
 ; 0xedfa
 
-Functionedfa: ; edfa (3:6dfa)
-	callba Function2715c
+ReturnToBattle_UseBall: ; edfa (3:6dfa)
+	callba _ReturnToBattle_UseBall
 	ret
 
 TownMap: ; ee01
-	callba Function91ae1
+	callba PokegearMap
 	ret
 ; ee08
 
@@ -1196,7 +1196,7 @@
 	ld b, PARTYMENUACTION_EVO_STONE
 	call UseItem_SelectMon
 
-	jp c, .asm_ee38
+	jp c, .DecidedNotToUse
 
 	ld a, MON_ITEM
 	call GetPartyParamLocation
@@ -1203,24 +1203,24 @@
 
 	ld a, [hl]
 	cp EVERSTONE
-	jr z, .asm_ee35
+	jr z, .NoEffect
 
 	ld a, $1
 	ld [wd1e9], a
-	callba Function421d8
+	callba EvolvePokemon
 
-	ld a, [wd268]
+	ld a, [wMonTriedToEvolve]
 	and a
-	jr z, .asm_ee35
+	jr z, .NoEffect
 
 	jp UseDisposableItem
 
-.asm_ee35
+.NoEffect
 	call WontHaveAnyEffectMessage
 
-.asm_ee38
+.DecidedNotToUse
 	xor a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ret
 ; ee3d
 
@@ -1233,11 +1233,11 @@
 	ld b, PARTYMENUACTION_HEALING_ITEM
 	call UseItem_SelectMon
 
-	jp c, Functionee9f
+	jp c, RareCandy_StatBooster_ExitMenu
 
-	call Functioneef5
+	call RareCandy_StatBooster_GetParameters
 
-	call Functioneed9
+	call GetStatExpRelativePointer
 
 	ld a, MON_STAT_EXP
 	call GetPartyParamLocation
@@ -1245,15 +1245,15 @@
 	add hl, bc
 	ld a, [hl]
 	cp 100
-	jr nc, Functionee83
+	jr nc, NoEffectMessage
 
 	add 10
 	ld [hl], a
-	call Functionee8c
+	call UpdateStatsAfterItem
 
-	call Functioneed9
+	call GetStatExpRelativePointer
 
-	ld hl, Strings_eeab
+	ld hl, StatStrings
 	add hl, bc
 	ld a, [hli]
 	ld h, [hl]
@@ -1264,7 +1264,7 @@
 
 	call Play_SFX_FULL_HEAL
 
-	ld hl, UnknownText_0xeea6
+	ld hl, Text_StatRose
 	call PrintText
 
 	ld c, HAPPINESS_USEDITEM
@@ -1273,7 +1273,7 @@
 	jp UseDisposableItem
 
 
-Functionee83: ; ee83
+NoEffectMessage: ; ee83
 	ld hl, WontHaveAnyEffectText
 	call PrintText
 	jp ClearPalettes
@@ -1280,7 +1280,7 @@
 ; ee8c
 
 
-Functionee8c: ; ee8c
+UpdateStatsAfterItem: ; ee8c
 	ld a, MON_MAXHP
 	call GetPartyParamLocation
 	ld d, h
@@ -1291,14 +1291,14 @@
 	predef_jump CalcPkmnStats
 ; ee9f
 
-Functionee9f: ; ee9f
+RareCandy_StatBooster_ExitMenu: ; ee9f
 	xor a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	jp ClearPalettes
 ; eea6
 
 
-UnknownText_0xeea6: ; 0xeea6
+Text_StatRose: ; 0xeea6
 	; 's @  rose.
 	text_jump UnknownText_0x1c5b9a
 	db "@"
@@ -1305,7 +1305,7 @@
 ; 0xeeab
 
 
-Strings_eeab: ; eeab
+StatStrings: ; eeab
 	dw .health
 	dw .attack
 	dw .defense
@@ -1320,17 +1320,17 @@
 ; eed9
 
 
-Functioneed9: ; eed9
+GetStatExpRelativePointer: ; eed9
 	ld a, [CurItem]
 	ld hl, Table_eeeb
 .next
 	cp [hl]
 	inc hl
-	jr z, .asm_eee6
+	jr z, .got_it
 	inc hl
 	jr .next
 
-.asm_eee6
+.got_it
 	ld a, [hl]
 	ld c, a
 	ld b, 0
@@ -1346,7 +1346,7 @@
 ; eef5
 
 
-Functioneef5: ; eef5
+RareCandy_StatBooster_GetParameters: ; eef5
 	ld a, [CurPartySpecies]
 	ld [CurSpecies], a
 	ld [wd265], a
@@ -1366,9 +1366,9 @@
 	ld b, PARTYMENUACTION_HEALING_ITEM
 	call UseItem_SelectMon
 
-	jp c, Functionee9f
+	jp c, RareCandy_StatBooster_ExitMenu
 
-	call Functioneef5
+	call RareCandy_StatBooster_GetParameters
 
 	ld a, MON_LEVEL
 	call GetPartyParamLocation
@@ -1375,7 +1375,7 @@
 
 	ld a, [hl]
 	cp MAX_LEVEL
-	jp nc, Functionee83
+	jp nc, NoEffectMessage
 
 	inc a
 	ld [hl], a
@@ -1390,9 +1390,9 @@
 
 	ld a, [hMultiplicand]
 	ld [hli], a
-	ld a, [$ffb5]
+	ld a, [hMultiplicand + 1]
 	ld [hli], a
-	ld a, [$ffb6]
+	ld a, [hMultiplicand + 2]
 	ld [hl], a
 
 	ld a, MON_MAXHP
@@ -1401,7 +1401,7 @@
 	ld b, a
 	ld c, [hl]
 	push bc
-	call Functionee8c
+	call UpdateStatsAfterItem
 
 	ld a, MON_MAXHP + 1
 	call GetPartyParamLocation
@@ -1423,7 +1423,7 @@
 	callba LevelUpHappinessMod
 
 	ld a, PARTYMENUTEXT_LEVEL_UP
-	call Functionf24a
+	call ItemActionText
 
 	xor a ; PARTYMON
 	ld [MonType], a
@@ -1448,7 +1448,7 @@
 
 	xor a
 	ld [wd1e9], a
-	callba Function421d8
+	callba EvolvePokemon
 
 	jp UseDisposableItem
 ; efad
@@ -1458,9 +1458,9 @@
 	ld b, PARTYMENUACTION_HEALING_ITEM
 	call UseItem_SelectMon
 
-	jp c, Functionf29e
+	jp c, StatusHealer_ExitMenu
 
-	call Functionefda
+	call UseStatusHealer
 
 	cp $0
 	jr nz, .asm_efc9
@@ -1472,7 +1472,7 @@
 	ld a, $0
 
 .asm_efc9
-	jp Functionf09e
+	jp StatusHealer_Jumptable
 ; efcc
 
 
@@ -1490,16 +1490,16 @@
 Miracleberry: ; efcc
 	ld b, PARTYMENUACTION_HEALING_ITEM
 	call UseItem_SelectMon
-	jp c, Functionf29e
+	jp c, StatusHealer_ExitMenu
 
-Functionefd4: ; efd4
-	call Functionefda
-	jp Functionf09e
+FullyHealStatus: ; efd4
+	call UseStatusHealer
+	jp StatusHealer_Jumptable
 ; efda
 
 
-Functionefda: ; efda (3:6fda)
-	call Functionf30d
+UseStatusHealer: ; efda (3:6fda)
+	call IsMonFainted
 	ld a, $1
 	ret z
 	call GetItemHealingAction
@@ -1508,7 +1508,7 @@
 	ld a, [hl]
 	and c
 	jr nz, .good
-	call Functionf009
+	call IsItemUsedOnConfusedMon
 	ld a, $1
 	ret nc
 	ld b, PARTYMENUTEXT_HEAL_CONFUSION
@@ -1519,13 +1519,13 @@
 	ld [PartyMenuActionText], a
 	call HealStatus
 	call Play_SFX_FULL_HEAL
-	call Functionf279
+	call ItemActionTextWaitButton
 	call UseDisposableItem
 	ld a, $0
 	ret
 
-Functionf009: ; f009 (3:7009)
-	call Functionf2a6
+IsItemUsedOnConfusedMon: ; f009 (3:7009)
+	call IsItemUsedOnBattleMon
 	jr nc, .nope
 	ld a, [PlayerSubStatus3]
 	bit SUBSTATUS_CONFUSED, a
@@ -1535,12 +1535,13 @@
 	jr nz, .nope
 	scf
 	ret
+
 .nope
 	and a
 	ret
 
-Functionf01e: ; f01e (3:701e)
-	call Functionf2a6
+BattlemonRestoreHealth: ; f01e (3:701e)
+	call IsItemUsedOnBattleMon
 	ret nc
 	ld a, MON_HP
 	call GetPartyParamLocation
@@ -1551,7 +1552,7 @@
 	ret
 
 HealStatus: ; f030 (3:7030)
-	call Functionf2a6
+	call IsItemUsedOnBattleMon
 	ret nc
 	xor a
 	ld [BattleMonStatus], a
@@ -1612,23 +1613,23 @@
 	db -1, 0, 0
 ; f09e
 
-Functionf09e: ; f09e (3:709e)
+StatusHealer_Jumptable: ; f09e (3:709e)
 	ld hl, .jumptable
 	rst JumpTable
 	ret
 
 .jumptable: ; f0a3 (3:70a3)
-	dw Functionf2a2
-	dw Functionf299
-	dw Functionf29e
+	dw StatusHealer_ClearPalettes
+	dw StatusHealer_NoEffect
+	dw StatusHealer_ExitMenu
 
 
 RevivalHerb: ; f0a9
 	ld b, PARTYMENUACTION_HEALING_ITEM
 	call UseItem_SelectMon
-	jp c, Functionf29e
+	jp c, StatusHealer_ExitMenu
 
-	call Functionf0d6
+	call RevivePokemon
 	cp 0
 	jr nz, .asm_f0c5
 
@@ -1638,7 +1639,7 @@
 	ld a, 0
 
 .asm_f0c5
-	jp Functionf09e
+	jp StatusHealer_Jumptable
 ; f0c8
 
 
@@ -1646,20 +1647,20 @@
 MaxRevive: ; f0c8
 	ld b, PARTYMENUACTION_HEALING_ITEM
 	call UseItem_SelectMon
-	jp c, Functionf29e
+	jp c, StatusHealer_ExitMenu
 
-	call Functionf0d6
-	jp Functionf09e
+	call RevivePokemon
+	jp StatusHealer_Jumptable
 ; f0d6
 
 
-Functionf0d6: ; f0d6
-	call Functionf30d
+RevivePokemon: ; f0d6
+	call IsMonFainted
 	ld a, 1
 	ret nz
 	ld a, [wBattleMode]
 	and a
-	jr z, .asm_f104
+	jr z, .skip_to_revive
 
 	ld a, [CurPartyMon]
 	ld c, a
@@ -1669,7 +1670,7 @@
 	predef FlagPredef
 	ld a, c
 	and a
-	jr z, .asm_f104
+	jr z, .skip_to_revive
 
 	ld a, [CurPartyMon]
 	ld c, a
@@ -1677,24 +1678,24 @@
 	ld b, SET_FLAG
 	predef FlagPredef
 
-.asm_f104
+.skip_to_revive
 	xor a
 	ld [Danger], a
 	ld a, [CurItem]
 	cp REVIVE
-	jr z, .asm_f114
+	jr z, .revive_half_hp
 
-	call Functionf2c3
-	jr .asm_f117
+	call ReviveFullHP
+	jr .finish_revive
 
-.asm_f114
-	call Functionf2ba
+.revive_half_hp
+	call ReviveHalfHP
 
-.asm_f117
-	call Functionf1db
+.finish_revive
+	call HealHP_SFX_GFX
 	ld a, PARTYMENUTEXT_REVIVE
 	ld [PartyMenuActionText], a
-	call Functionf279
+	call ItemActionTextWaitButton
 	call UseDisposableItem
 	ld a, 0
 	ret
@@ -1704,26 +1705,26 @@
 FullRestore: ; f128
 	ld b, PARTYMENUACTION_HEALING_ITEM
 	call UseItem_SelectMon
-	jp c, Functionf29e
+	jp c, StatusHealer_ExitMenu
 
-	call Functionf30d
-	jp z, Functionf299
+	call IsMonFainted
+	jp z, StatusHealer_NoEffect
 
-	call Functionf31b
-	jr c, .asm_f13e
+	call IsMonAtFullHealth
+	jr c, .NotAtFullHealth
 
-	jp Functionefd4
+	jp FullyHealStatus
 
-.asm_f13e
-	call Functionf144
-	jp Functionf09e
+.NotAtFullHealth
+	call .FullRestore
+	jp StatusHealer_Jumptable
 ; f144
 
 
-Functionf144: ; f144
+.FullRestore: ; f144
 	xor a
 	ld [Danger], a
-	call Functionf2c3
+	call ReviveFullHP
 	ld a, MON_STATUS
 	call GetPartyParamLocation
 	xor a
@@ -1730,11 +1731,11 @@
 	ld [hli], a
 	ld [hl], a
 	call HealStatus
-	call Functionf01e
-	call Functionf1db
+	call BattlemonRestoreHealth
+	call HealHP_SFX_GFX
 	ld a, PARTYMENUTEXT_HEAL_HP
 	ld [PartyMenuActionText], a
-	call Functionf279
+	call ItemActionTextWaitButton
 	call UseDisposableItem
 	ld a, 0
 	ret
@@ -1750,7 +1751,7 @@
 	res SUBSTATUS_CONFUSED, [hl]
 	xor a
 	ld [hBattleTurn], a
-	call Functionf789
+	call UseItemText
 
 	ld hl, ConfusedNoMoreText
 	call StdBattleTextBox
@@ -1758,7 +1759,7 @@
 	ld a, 0
 
 .done
-	jp Functionf09e
+	jp StatusHealer_Jumptable
 ; f186
 
 
@@ -1774,14 +1775,14 @@
 BerryJuice:
 Berry:
 GoldBerry: ; f186
-	call Functionf1a9
-	jp Functionf09e
+	call ItemRestoreHP
+	jp StatusHealer_Jumptable
 ; f18c
 
 
 Energypowder: ; f18c
 	ld c, HAPPINESS_BITTERPOWDER
-	jr Functionf192
+	jr EnergypowderEnergyRootCommon
 ; f190
 
 EnergyRoot: ; f190
@@ -1788,50 +1789,50 @@
 	ld c, HAPPINESS_ENERGYROOT
 ; f192
 
-Functionf192: ; f192
+EnergypowderEnergyRootCommon: ; f192
 	push bc
-	call Functionf1a9
+	call ItemRestoreHP
 	pop bc
 	cp 0
-	jr nz, .asm_f1a6
+	jr nz, .skip_happiness
 
 	callba ChangeHappiness
 	call LooksBitterMessage
 	ld a, 0
 
-.asm_f1a6
-	jp Functionf09e
+.skip_happiness
+	jp StatusHealer_Jumptable
 ; f1a9
 
 
-Functionf1a9: ; f1a9 (3:71a9)
+ItemRestoreHP: ; f1a9 (3:71a9)
 	ld b, PARTYMENUACTION_HEALING_ITEM
 	call UseItem_SelectMon
 	ld a, 2
 	ret c
 
-	call Functionf30d
+	call IsMonFainted
 	ld a, 1
 	ret z
 
-	call Functionf31b
+	call IsMonAtFullHealth
 	ld a, 1
 	ret nc
 
 	xor a
 	ld [Danger], a
-	call Functionf395
-	call Functionf2d1
-	call Functionf01e
-	call Functionf1db
+	call GetHealingItemAmount
+	call RestoreHealth
+	call BattlemonRestoreHealth
+	call HealHP_SFX_GFX
 	ld a, PARTYMENUTEXT_HEAL_HP
 	ld [PartyMenuActionText], a
-	call Functionf279
+	call ItemActionTextWaitButton
 	call UseDisposableItem
 	ld a, 0
 	ret
 
-Functionf1db: ; f1db (3:71db)
+HealHP_SFX_GFX: ; f1db (3:71db)
 	push de
 	ld de, SFX_POTION
 	call WaitPlaySFX
@@ -1867,16 +1868,16 @@
 	push de
 	push bc
 	call ClearBGPalettes
-	call Functionf21c
+	call ChoosePkmnToUseItemOn
 	pop bc
 	pop de
 	pop hl
 	ret
 
-Functionf21c: ; f21c (3:721c)
-	callba Function5004f
-	callba Function50405
-	callba Function503e0
+ChoosePkmnToUseItemOn: ; f21c (3:721c)
+	callba LoadPartyMenuGFX
+	callba InitPartyMenuWithCancel
+	callba InitPartyMenuGFX
 	callba WritePartyMenuTilemap
 	callba PrintPartyMenuText
 	call WaitBGMap
@@ -1885,7 +1886,7 @@
 	callba PartyMenuSelect
 	ret
 
-Functionf24a: ; f24a (3:724a)
+ItemActionText: ; f24a (3:724a)
 	ld [PartyMenuActionText], a
 	ld a, [CurPartySpecies]
 	push af
@@ -1895,7 +1896,7 @@
 	push de
 	push bc
 	callba WritePartyMenuTilemap
-	callba Function50566
+	callba PrintPartyMenuActionText
 	call WaitBGMap
 	call SetPalettes
 	call DelayFrame
@@ -1908,7 +1909,7 @@
 	ld [CurPartySpecies], a
 	ret
 
-Functionf279: ; f279 (3:7279)
+ItemActionTextWaitButton: ; f279 (3:7279)
 	xor a
 	ld [hBGMapMode], a
 	hlcoord 0, 0
@@ -1916,26 +1917,25 @@
 	ld a, " "
 	call ByteFill
 	ld a, [PartyMenuActionText]
-	call Functionf24a
+	call ItemActionText
 	ld a, $1
 	ld [hBGMapMode], a
-	ld c, $32
+	ld c, 50
 	call DelayFrames
 	jp WaitPressAorB_BlinkCursor
 
-Functionf299: ; f299 (3:7299)
+StatusHealer_NoEffect: ; f299 (3:7299)
 	call WontHaveAnyEffectMessage
-	jr Functionf2a2
+	jr StatusHealer_ClearPalettes
 
-Functionf29e: ; f29e (3:729e)
+StatusHealer_ExitMenu: ; f29e (3:729e)
 	xor a
-	ld [wd0ec], a
-
-Functionf2a2: ; f2a2 (3:72a2)
+	ld [wPlayerAction], a
+StatusHealer_ClearPalettes: ; f2a2 (3:72a2)
 	call ClearPalettes
 	ret
 
-Functionf2a6: ; f2a6 (3:72a6)
+IsItemUsedOnBattleMon: ; f2a6 (3:72a6)
 	ld a, [wBattleMode]
 	and a
 	ret z
@@ -1944,30 +1944,31 @@
 	ld hl, CurBattleMon
 	cp [hl]
 	pop hl
-	jr nz, .asm_f2b8
+	jr nz, .nope
 	scf
 	ret
-.asm_f2b8
+
+.nope
 	xor a
 	ret
 
-Functionf2ba: ; f2ba (3:72ba)
-	call Functionf36f
+ReviveHalfHP: ; f2ba (3:72ba)
+	call LoadHPFromBuffer1
 	srl d
 	rr e
-	jr asm_f2c6
+	jr ContinueRevive
 
-Functionf2c3: ; f2c3 (3:72c3)
-	call Functionf36f
-asm_f2c6: ; f2c6 (3:72c6)
+ReviveFullHP: ; f2c3 (3:72c3)
+	call LoadHPFromBuffer1
+ContinueRevive: ; f2c6 (3:72c6)
 	ld a, MON_HP
 	call GetPartyParamLocation
 	ld [hl], d
 	inc hl
 	ld [hl], e
-	jp Functionf328
+	jp LoadCurHPIntoBuffer5
 
-Functionf2d1: ; f2d1 (3:72d1)
+RestoreHealth: ; f2d1 (3:72d1)
 	ld a, MON_HP + 1
 	call GetPartyParamLocation
 	ld a, [hl]
@@ -1976,8 +1977,8 @@
 	ld a, [hl]
 	adc d
 	ld [hl], a
-	jr c, .asm_f2f5
-	call Functionf328
+	jr c, .full_hp
+	call LoadCurHPIntoBuffer5
 	ld a, MON_HP + 1
 	call GetPartyParamLocation
 	ld d, h
@@ -1990,13 +1991,13 @@
 	dec hl
 	ld a, [de]
 	sbc [hl]
-	jr c, .asm_f2f8
-.asm_f2f5
-	call Functionf2c3
-.asm_f2f8
+	jr c, .finish
+.full_hp
+	call ReviveFullHP
+.finish
 	ret
 
-Functionf2f9: ; f2f9 (3:72f9)
+RemoveHP: ; f2f9 (3:72f9)
 	ld a, MON_HP + 1
 	call GetPartyParamLocation
 	ld a, [hl]
@@ -2005,29 +2006,29 @@
 	ld a, [hl]
 	sbc d
 	ld [hl], a
-	jr nc, .asm_f309
+	jr nc, .okay
 	xor a
 	ld [hld], a
 	ld [hl], a
-.asm_f309
-	call Functionf328
+.okay
+	call LoadCurHPIntoBuffer5
 	ret
 
-Functionf30d: ; f30d (3:730d)
+IsMonFainted: ; f30d (3:730d)
 	push de
-	call Functionf35f
-	call Functionf348
-	call Functionf356
+	call LoadMaxHPToBuffer1
+	call LoadCurHPToBuffer3
+	call LoadHPFromBuffer3
 	ld a, d
 	or e
 	pop de
 	ret
 
-Functionf31b: ; f31b (3:731b)
-	call Functionf356
+IsMonAtFullHealth: ; f31b (3:731b)
+	call LoadHPFromBuffer3
 	ld h, d
 	ld l, e
-	call Functionf36f
+	call LoadHPFromBuffer1
 	ld a, l
 	sub e
 	ld a, h
@@ -2034,49 +2035,49 @@
 	sbc d
 	ret
 
-Functionf328: ; f328 (3:7328)
+LoadCurHPIntoBuffer5: ; f328 (3:7328)
 	ld a, MON_HP
 	call GetPartyParamLocation
 	ld a, [hli]
-	ld [wd1ef], a
+	ld [Buffer6], a
 	ld a, [hl]
-	ld [wd1ee], a
+	ld [Buffer5], a
 	ret
 ; f336 (3:7336)
 
-Functionf336: ; f336
+LoadHPIntoBuffer5: ; f336
 	ld a, d
-	ld [wd1ef], a
+	ld [Buffer6], a
 	ld a, e
-	ld [wd1ee], a
+	ld [Buffer5], a
 	ret
 ; f33f
 
-Functionf33f: ; f33f
-	ld a, [wd1ef]
+LoadHPFromBuffer5: ; f33f
+	ld a, [Buffer6]
 	ld d, a
-	ld a, [wd1ee]
+	ld a, [Buffer5]
 	ld e, a
 	ret
 ; f348
 
-Functionf348: ; f348 (3:7348)
+LoadCurHPToBuffer3: ; f348 (3:7348)
 	ld a, MON_HP
 	call GetPartyParamLocation
 	ld a, [hli]
-	ld [wd1ed], a
+	ld [Buffer4], a
 	ld a, [hl]
-	ld [wd1ec], a
+	ld [Buffer3], a
 	ret
 
-Functionf356: ; f356 (3:7356)
-	ld a, [wd1ed]
+LoadHPFromBuffer3: ; f356 (3:7356)
+	ld a, [Buffer4]
 	ld d, a
-	ld a, [wd1ec]
+	ld a, [Buffer3]
 	ld e, a
 	ret
 
-Functionf35f: ; f35f (3:735f)
+LoadMaxHPToBuffer1: ; f35f (3:735f)
 	push hl
 	ld a, MON_MAXHP
 	call GetPartyParamLocation
@@ -2087,7 +2088,7 @@
 	pop hl
 	ret
 
-Functionf36f: ; f36f (3:736f)
+LoadHPFromBuffer1: ; f36f (3:736f)
 	ld a, [Buffer2]
 	ld d, a
 	ld a, [Buffer1]
@@ -2094,7 +2095,7 @@
 	ld e, a
 	ret
 
-Functionf378: ; f378 (3:7378)
+GetOneFifthMaxHP: ; f378 (3:7378)
 	push bc
 	ld a, MON_MAXHP
 	call GetPartyParamLocation
@@ -2113,15 +2114,15 @@
 	pop bc
 	ret
 
-Functionf395: ; f395 (3:7395)
+GetHealingItemAmount: ; f395 (3:7395)
 	push hl
 	ld a, [CurItem]
-	ld hl, Tablef3af
+	ld hl, .Healing
 	ld d, a
 .next
 	ld a, [hli]
 	cp -1
-	jr z, .asm_f3a9
+	jr z, .NotFound
 	cp d
 	jr z, .done
 rept 2
@@ -2129,7 +2130,7 @@
 endr
 	jr .next
 
-.asm_f3a9
+.NotFound
 	scf
 .done
 	ld e, [hl]
@@ -2139,7 +2140,7 @@
 	ret
 ; f3af (3:73af)
 
-Tablef3af: ; f3af
+.Healing: ; f3af
 	dbw FRESH_WATER,   50
 	dbw SODA_POP,      60
 	dbw LEMONADE,      80
@@ -2158,42 +2159,42 @@
 	dbw -1,             0
 ; f3df
 
-Functionf3df: ; f3df (3:73df)
+Softboiled_MilkDrinkFunction: ; f3df (3:73df)
 ; Softboiled/Milk Drink in the field
 	ld a, [wd0d8]
 	dec a
 	ld b, a
-	call Functionf419
-	jr c, .asm_f413
+	call .SelectMilkDrinkRecipient ; select pokemon
+	jr c, .skip
 	ld a, b
 	ld [CurPartyMon], a
-	call Functionf30d
-	call Functionf378
-	call Functionf2f9
+	call IsMonFainted
+	call GetOneFifthMaxHP
+	call RemoveHP
 	push bc
-	call Functionf1db
+	call HealHP_SFX_GFX
 	pop bc
-	call Functionf378
+	call GetOneFifthMaxHP
 	ld a, c
 	ld [CurPartyMon], a
-	call Functionf30d
-	call Functionf2d1
-	call Functionf1db
+	call IsMonFainted
+	call RestoreHealth
+	call HealHP_SFX_GFX
 	ld a, PARTYMENUTEXT_HEAL_HP
-	call Functionf24a
+	call ItemActionText
 	call JoyWaitAorB
-.asm_f413
+.skip
 	ld a, b
 	inc a
 	ld [wd0d8], a
 	ret
 
-Functionf419: ; f419 (3:7419)
+.SelectMilkDrinkRecipient: ; f419 (3:7419)
 .loop
 	push bc
 	ld a, PARTYMENUACTION_HEALING_ITEM
 	ld [PartyMenuActionText], a
-	call Functionf21c
+	call ChoosePkmnToUseItemOn
 	pop bc
 	jr c, .set_carry
 	ld a, [wd0d8]
@@ -2201,13 +2202,13 @@
 	ld c, a
 	ld a, b
 	cp c
-	jr z, .loopback
+	jr z, .cant_use ; chose the same mon as user
 	ld a, c
 	ld [CurPartyMon], a
-	call Functionf30d
-	jr z, .loopback
-	call Functionf31b
-	jr nc, .loopback
+	call IsMonFainted
+	jr z, .cant_use
+	call IsMonAtFullHealth
+	jr nc, .cant_use
 	xor a
 	ret
 
@@ -2215,15 +2216,15 @@
 	scf
 	ret
 
-.loopback
+.cant_use
 	push bc
-	ld hl, UnknownText_0xf44a
+	ld hl, .Text_CantBeUsed
 	call MenuTextBoxBackup
 	pop bc
 	jr .loop
 ; f44a (3:744a)
 
-UnknownText_0xf44a: ; 0xf44a
+.Text_CantBeUsed: ; 0xf44a
 	; That can't be used on this #MON.
 	text_jump UnknownText_0x1c5bac
 	db "@"
@@ -2232,10 +2233,10 @@
 
 EscapeRope: ; f44f
 	xor a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	callba EscapeRopeFunction
 
-	ld a, [wd0ec]
+	ld a, [wPlayerAction]
 	cp 1
 	call z, UseDisposableItem
 	ret
@@ -2244,12 +2245,12 @@
 
 SuperRepel: ; f462
 	ld b, 200
-	jr Function_0xf46c
+	jr UseRepel
 ; f466
 
 MaxRepel: ; f466
 	ld b, 250
-	jr Function_0xf46c
+	jr UseRepel
 ; f466
 
 Repel: ; f46a
@@ -2256,7 +2257,7 @@
 	ld b, 100
 ; f46c
 
-Function_0xf46c: ; f46c
+UseRepel: ; f46c
 	ld a, [wRepelEffect]
 	and a
 	ld hl, TextJump_RepelUsedEarlierIsStillInEffect
@@ -2264,7 +2265,7 @@
 
 	ld a, b
 	ld [wRepelEffect], a
-	jp Functionf789
+	jp UseItemText
 
 
 TextJump_RepelUsedEarlierIsStillInEffect: ; 0xf47d
@@ -2279,7 +2280,7 @@
 	bit SUBSTATUS_X_ACCURACY, [hl]
 	jp nz, WontHaveAnyEffect_NotUsedMessage
 	set SUBSTATUS_X_ACCURACY, [hl]
-	jp Functionf789
+	jp UseItemText
 ; f48f
 
 
@@ -2293,11 +2294,11 @@
 	and 3 << 6
 	or $2
 	ld [wBattleResult], a
-	jp Functionf789
+	jp UseItemText
 
 .asm_f4a6
 	xor a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ret
 ; f4ab
 
@@ -2307,7 +2308,7 @@
 	bit SUBSTATUS_MIST, [hl]
 	jp nz, WontHaveAnyEffect_NotUsedMessage
 	set SUBSTATUS_MIST, [hl]
-	jp Functionf789
+	jp UseItemText
 ; f4b8
 
 
@@ -2316,7 +2317,7 @@
 	bit SUBSTATUS_FOCUS_ENERGY, [hl]
 	jp nz, WontHaveAnyEffect_NotUsedMessage
 	set SUBSTATUS_FOCUS_ENERGY, [hl]
-	jp Functionf789
+	jp UseItemText
 ; f4c5
 
 
@@ -2324,7 +2325,7 @@
 XDefend:
 XSpeed:
 XSpecial: ; f4c5
-	call Functionf789
+	call UseItemText
 
 	ld a, [CurItem]
 	ld hl, .x_item_table
@@ -2368,8 +2369,8 @@
 PokeFlute: ; f50c
 	ld a, [wBattleMode]
 	and a
-	jr nz, .asm_f512
-.asm_f512
+	jr nz, .dummy
+.dummy
 
 	xor a
 	ld [wd002], a
@@ -2377,14 +2378,14 @@
 	ld b, $ff ^ SLP
 
 	ld hl, PartyMon1Status
-	call .Functionf554
+	call .CureSleep
 
 	ld a, [wBattleMode]
 	cp WILD_BATTLE
-	jr z, .asm_f52b
+	jr z, .skip_otrainer
 	ld hl, OTPartyMon1Status
-	call .Functionf554
-.asm_f52b
+	call .CureSleep
+.skip_otrainer
 
 	ld hl, BattleMonStatus
 	ld a, [hl]
@@ -2397,20 +2398,20 @@
 
 	ld a, [wd002]
 	and a
-	ld hl, UnknownText_0xf56c
+	ld hl, .CatchyTune
 	jp z, PrintText
-	ld hl, UnknownText_0xf576
+	ld hl, .PlayedTheFlute
 	call PrintText
 
 	ld a, [Danger]
 	and $80
-	jr nz, .asm_f54e
-.asm_f54e
-	ld hl, UnknownText_0xf571
+	jr nz, .dummy2
+.dummy2
+	ld hl, .AllSleepingMonWokeUp
 	jp PrintText
 
 
-.Functionf554
+.CureSleep
 	ld de, PARTYMON_STRUCT_LENGTH
 	ld c, PARTY_LENGTH
 
@@ -2418,10 +2419,10 @@
 	ld a, [hl]
 	push af
 	and SLP
-	jr z, .asm_f564
+	jr z, .not_asleep
 	ld a, 1
 	ld [wd002], a
-.asm_f564
+.not_asleep
 	pop af
 	and b
 	ld [hl], a
@@ -2432,29 +2433,25 @@
 ; f56c
 
 
-UnknownText_0xf56c: ; 0xf56c
+.CatchyTune: ; 0xf56c
 	; Played the # FLUTE. Now, that's a catchy tune!
 	text_jump UnknownText_0x1c5bf9
 	db "@"
 ; 0xf571
 
-UnknownText_0xf571: ; 0xf571
+.AllSleepingMonWokeUp: ; 0xf571
 	; All sleeping #MON woke up.
 	text_jump UnknownText_0x1c5c28
 	db "@"
 ; 0xf576
 
-UnknownText_0xf576: ; 0xf576
+.PlayedTheFlute: ; 0xf576
 	; played the # FLUTE.@ @
 	text_jump UnknownText_0x1c5c44
 	start_asm
-; 0xf57b
-
-
-Function_0xf57b: ; f57b
 	ld a, [wBattleMode]
 	and a
-	jr nz, .asm_f58c
+	jr nz, .battle
 
 	push de
 	ld de, SFX_POKEFLUTE
@@ -2462,14 +2459,14 @@
 	call WaitSFX
 	pop de
 
-.asm_f58c
-	jp Function13e0
+.battle
+	jp PokeFluteTerminatorCharacter
 ; f58f
 
 
 BlueCard: ; f58f
 	ld hl, .bluecardtext
-	jp Function2012
+	jp MenuTextBoxWaitButton
 
 .bluecardtext
 	text_jump UnknownText_0x1c5c5e
@@ -2479,7 +2476,7 @@
 
 CoinCase: ; f59a
 	ld hl, .coincasetext
-	jp Function2012
+	jp MenuTextBoxWaitButton
 
 .coincasetext
 	text_jump UnknownText_0x1c5c7b
@@ -2527,7 +2524,7 @@
     ; Party Screen opens to choose on which Pkmn to use the Item
 	ld b, PARTYMENUACTION_HEALING_ITEM
 	call UseItem_SelectMon
-	jp c, Functionf6e0
+	jp c, PPRestoreItem_Cancel
 
 .loop2
 	ld a, [wd002]
@@ -2550,7 +2547,7 @@
 	xor a
 	ld [CurMoveNum], a
 	ld a, $2
-	ld [wd235], a
+	ld [wMoveSelectionMenuType], a
 	callba MoveSelectionScreen
 	pop bc
 
@@ -2570,7 +2567,7 @@
 
 	ld a, [wd002]
 	cp PP_UP
-	jp nz, Functionf6a7
+	jp nz, Not_PP_Up
 
 	ld a, [hl]
 	cp SKETCH
@@ -2594,38 +2591,38 @@
 	ld [hl], a
 	ld a, $1
 	ld [wd265], a
-	call Functionf84c
+	call ApplyPPUp
 	call Play_SFX_FULL_HEAL
 
 	ld hl, TextJump_PPsIncreased
 	call PrintText
 
-Functionf64c: ; f64c
+FinishPPRestore: ; f64c
 	call ClearPalettes
 	jp UseDisposableItem
 ; f652
 
-Functionf652: ; f652
+BattleRestorePP: ; f652
 	ld a, [wBattleMode]
 	and a
-	jr z, .asm_f66c
+	jr z, .not_in_battle
 	ld a, [CurPartyMon]
 	ld b, a
 	ld a, [CurBattleMon]
 	cp b
-	jr nz, .asm_f66c
+	jr nz, .not_in_battle
 	ld a, [PlayerSubStatus5]
 	bit SUBSTATUS_TRANSFORMED, a
-	jr nz, .asm_f66c
-	call .asm_f677
+	jr nz, .not_in_battle
+	call .UpdateBattleMonPP
 
-.asm_f66c
+.not_in_battle
 	call Play_SFX_FULL_HEAL
 	ld hl, UnknownText_0xf739
 	call PrintText
-	jr Functionf64c
+	jr FinishPPRestore
 
-.asm_f677
+.UpdateBattleMonPP
 	ld a, [CurPartyMon]
 	ld hl, PartyMon1Moves
 	ld bc, PARTYMON_STRUCT_LENGTH
@@ -2632,12 +2629,12 @@
 	call AddNTimes
 	ld de, BattleMonMoves
 	ld b, NUM_MOVES
-.asm_f688
+.loop
 	ld a, [de]
 	and a
-	jr z, .asm_f6a6
+	jr z, .done
 	cp [hl]
-	jr nz, .asm_f6a1
+	jr nz, .next
 	push hl
 	push de
 	push bc
@@ -2652,20 +2649,20 @@
 	pop de
 	pop hl
 
-.asm_f6a1
+.next
 	inc hl
 	inc de
 	dec b
-	jr nz, .asm_f688
+	jr nz, .loop
 
-.asm_f6a6
+.done
 	ret
 ; f6a7
 
-Functionf6a7: ; f6a7
+Not_PP_Up: ; f6a7
 	call RestorePP
-	jr nz, Functionf652
-	jp Functionf6dd
+	jr nz, BattleRestorePP
+	jp PPRestoreItem_NoEffect
 ; f6af
 
 Elixer_RestorePPofAllMoves: ; f6af
@@ -2681,14 +2678,14 @@
 	call GetMthMoveOfNthPartymon
 	ld a, [hl]
 	and a
-	jr z, .cant_restore_pp
+	jr z, .next
 
 	call RestorePP
-	jr z, .cant_restore_pp
+	jr z, .next
 	ld hl, wcfaa
 	inc [hl]
 
-.cant_restore_pp
+.next
 	ld hl, MenuSelection2
 	inc [hl]
 	pop bc
@@ -2696,15 +2693,15 @@
 	jr nz, .moveLoop
 	ld a, [wcfaa]
 	and a
-	jp nz, Functionf652
+	jp nz, BattleRestorePP
 
-Functionf6dd: ; f6dd
+PPRestoreItem_NoEffect: ; f6dd
 	call WontHaveAnyEffectMessage
 
-Functionf6e0: ; f6e0
+PPRestoreItem_Cancel: ; f6e0
 	call ClearPalettes
 	xor a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ret
 ; f6e8
 
@@ -2805,7 +2802,7 @@
 
 SacredAsh: ; f753
 	callba _SacredAsh
-	ld a, [wd0ec]
+	ld a, [wPlayerAction]
 	cp $1
 	ret nz
 	call UseDisposableItem
@@ -2939,14 +2936,11 @@
 	ret
 ; f789
 
-Functionf789: ; f789
+UseItemText ; f789
 	ld hl, UsedItemText
 	call PrintText
 	call Play_SFX_FULL_HEAL
 	call WaitPressAorB_BlinkCursor
-	; fallthrough
-; f795
-
 UseDisposableItem: ; f795
 	ld hl, NumItems
 	ld a, 1
@@ -2955,7 +2949,7 @@
 ; f7a0
 
 UseBallInTrainerBattle: ; f7a0
-	call Functionedfa
+	call ReturnToBattle_UseBall
 	ld de, ANIM_THROW_POKE_BALL
 	ld a, e
 	ld [FXAnimIDLo], a
@@ -2979,7 +2973,7 @@
 
 	; Item wasn't used.
 	ld a, $2
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ret
 ; f7d6
 
@@ -2994,7 +2988,7 @@
 
 	; Item wasn't used.
 	ld a, $2
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	ret
 ; f7e8
 
@@ -3024,7 +3018,7 @@
 CantUseItemMessage: ; f804
 ; Item couldn't be used.
 	xor a
-	ld [wd0ec], a
+	ld [wPlayerAction], a
 	jp PrintText
 ; f80b
 
@@ -3107,7 +3101,7 @@
 ; 0xf84c
 
 
-Functionf84c: ; f84c
+ApplyPPUp: ; f84c
 	ld a, MON_MOVES
 	call GetPartyParamLocation
 	push hl
@@ -3118,7 +3112,7 @@
 	add hl, bc
 	ld de, Buffer1
 	ld b, 0
-.asm_f864
+.loop
 	inc b
 	ld a, b
 	cp NUM_MOVES + 1
@@ -3125,22 +3119,22 @@
 	ret z
 	ld a, [wd265]
 	dec a
-	jr nz, .asm_f876
+	jr nz, .use
 	ld a, [MenuSelection2]
 	inc a
 	cp b
-	jr nz, .asm_f87d
+	jr nz, .skip
 
-.asm_f876
+.use
 	ld a, [hl]
 	and 3 << 6
 	ld a, [de] ; wasted cycle
 	call nz, ComputeMaxPP
 
-.asm_f87d
+.skip
 	inc hl
 	inc de
-	jr .asm_f864
+	jr .loop
 ; f881
 
 
@@ -3195,7 +3189,7 @@
 	ret
 ; f8b9
 
-Functionf8b9: ; f8b9
+RestoreAllPP: ; f8b9
 	ld a, MON_PP
 	call GetPartyParamLocation
 	push hl
--- a/macros.asm
+++ b/macros.asm
@@ -14,9 +14,9 @@
 INCLUDE "macros/rst.asm"
 INCLUDE "macros/mobile.asm"
 INCLUDE "macros/trainer.asm"
+INCLUDE "macros/trade_anim.asm"
 
 
-
 RGB: MACRO
 	dw ((\3) << 10) + ((\2) << 5) + (\1)
 	ENDM
@@ -211,3 +211,26 @@
 ENDM
 
 palettes EQUS "* 8"
+
+ldpixel: MACRO
+if _NARG == 5
+	lb \1, \2 * 8 + \4, \3 * 8 + \5
+else
+	lb \1, \2 * 8, \3 * 8
+endc
+	endm
+
+depixel EQUS "ldpixel de,"
+
+bgcoord: MACRO
+IF _NARG == 4
+	ld \1, \3 * $20 + \2 + \4
+ELSE
+	ld \1, \3 * $20 + \2 + VBGMap0
+ENDC
+ENDM
+
+hlbgcoord EQUS "bgcoord hl,"
+debgcoord EQUS "bgcoord de,"
+bcbgcoord EQUS "bgcoord bc,"
+bgrows EQUS "* $20"
--- a/macros/charmap.asm
+++ b/macros/charmap.asm
@@ -35,6 +35,7 @@
 ; Actual characters
 	charmap "▲",        $61
 	charmap "_",        $62
+	charmap "<COLON>",  $6d ; necessary because ":" is already used
 	charmap "′",        $6e
 	charmap "<LV>",     $6e
 	charmap "″",        $6f
--- a/macros/event.asm
+++ b/macros/event.asm
@@ -293,9 +293,9 @@
 	db \1 ; time
 	endm
 
-checkmorn EQUS "checktime 1"
-checkday  EQUS "checktime 2"
-checknite EQUS "checktime 4"
+checkmorn EQUS "checktime 1 << MORN"
+checkday  EQUS "checktime 1 << DAY"
+checknite EQUS "checktime 1 << NITE"
 
 	enum checkpoke_command
 checkpoke: macro
@@ -496,9 +496,9 @@
 	db loadmovesprites_command
 	endm
 
-	enum loadbytec1ce_command
-loadbytec1ce: macro
-	db loadbytec1ce_command
+	enum loadbytec2cf_command
+loadbytec2cf: macro
+	db loadbytec2cf_command
 	db \1 ; byte
 	endm
 
@@ -544,6 +544,7 @@
 	dw \1 ; text_pointer
 	endm
 
+; IF _CRYSTAL
 	enum farjumptext_command
 farjumptext: macro
 	db farjumptext_command
@@ -550,6 +551,7 @@
 	db BANK(\1)
 	dw \1
 	endm
+; ENDC
 
 	enum jumptext_command
 jumptext: macro
@@ -1068,7 +1070,7 @@
 	db \1 ; duration
 	endm
 
-	enum unknown0xa9_command
-unknown0xa9: macro
-	db unknown0xa9_command
+	enum check_save_command
+check_save: macro
+	db check_save_command
 	endm
--- a/macros/movement.asm
+++ b/macros/movement.asm
@@ -292,10 +292,9 @@
 	db movement_fix_facing ; $3b
 	endm
 
-	enum movement_return_dig
-return_dig: macro
-	db movement_return_dig
-	db \1
+	enum movement_show_person
+show_person: macro
+	db movement_show_person ; $3c
 	endm
 
 	enum movement_hide_person
@@ -354,6 +353,8 @@
 	db movement_step_end ; $47
 	endm
 
+; Whatever Movement_48 is, it takes a one-byte parameter
+
 __enum__ = $49
 
 	enum movement_remove_person
@@ -383,12 +384,16 @@
 	db movement_skyfall ; $4e
 	endm
 
-	enum movement_step_wait5
-step_wait5: macro
-	db movement_step_wait5 ; $4f
+	enum movement_step_dig
+step_dig: macro
+	db movement_step_dig ; $4f
+	db \1
 	endm
 
-__enum__ = $51
+	enum movement_step_bump
+step_bump: macro
+	db movement_step_bump ; $50
+	endm
 
 	enum movement_fish_got_bite
 fish_got_bite: macro
@@ -420,5 +425,11 @@
 	enum movement_rock_smash
 rock_smash: macro
 	db movement_rock_smash ; $57
+	db \1
+	endm
+
+	enum movement_return_dig
+return_dig: macro
+	db movement_return_dig ; $58
 	db \1
 	endm
--- a/macros/text.asm
+++ b/macros/text.asm
@@ -73,7 +73,7 @@
 	endm
 
 	enum TX_SOUND_0B
-sound0: macro
+sound_dex_fanfare_50_79: macro
 	db TX_SOUND_0B
 	endm
 
@@ -89,33 +89,33 @@
 	endm
 
 	enum TX_SOUND_0E
-sound1: macro
+sound_dex_fanfare_20_49: macro
 	db TX_SOUND_0E
 	endm
 
 	enum TX_SOUND_0F
-sound0x0F: macro
+sound_item: macro
 	db TX_SOUND_0F
 	endm
 
 	enum TX_SOUND_10
-sound0x02: macro
+sound_caught_mon: macro
 	db TX_SOUND_10
 	endm
 
 	enum TX_SOUND_11
-sound0x0A: macro
+sound_dex_fanfare_80_109: macro
 	db TX_SOUND_11
 	endm
 
 	enum TX_SOUND_12
-sound0x12: macro
+sound_fanfare: macro
 	db TX_SOUND_12
 	endm
 
 	enum TX_SOUND_13
-sound0x2C: macro
-	db $13
+sound_slot_machine_start: macro
+	db TX_SOUND_13
 	endm
 
 	enum TX_STRINGBUFFER
--- /dev/null
+++ b/macros/trade_anim.asm
@@ -1,0 +1,166 @@
+	enum_start
+	enum tradeanim_next_command
+tradeanim_next: macro
+	db tradeanim_next_command
+endm
+
+	enum tradeanim_show_givemon_data_command
+tradeanim_show_givemon_data: macro
+	db tradeanim_show_givemon_data_command
+endm
+
+	enum tradeanim_show_getmon_data_command
+tradeanim_show_getmon_data: macro
+	db tradeanim_show_getmon_data_command
+endm
+
+	enum tradeanim_enter_link_tube_command
+tradeanim_enter_link_tube: macro
+	db tradeanim_enter_link_tube_command
+endm
+
+__enum__ set $5
+
+	enum tradeanim_exit_link_tube_command
+tradeanim_exit_link_tube: macro
+	db tradeanim_exit_link_tube_command
+endm
+
+	enum tradeanim_tube_to_ot_command
+tradeanim_tube_to_ot: macro
+	db tradeanim_tube_to_ot_command
+endm
+
+__enum__ set $e
+
+	enum tradeanim_tube_to_player_command
+tradeanim_tube_to_player: macro
+	db tradeanim_tube_to_player_command
+endm
+
+__enum__ set $16
+
+	enum tradeanim_sent_to_ot_text_command
+tradeanim_sent_to_ot_text: macro
+	db tradeanim_sent_to_ot_text_command
+endm
+
+	enum tradeanim_ot_bids_farewell_command
+tradeanim_ot_bids_farewell: macro
+	db tradeanim_ot_bids_farewell_command
+endm
+
+	enum tradeanim_take_care_of_text_command
+tradeanim_take_care_of_text: macro
+	db tradeanim_take_care_of_text_command
+endm
+
+	enum tradeanim_ot_sends_text_1_command
+tradeanim_ot_sends_text_1: macro
+	db tradeanim_ot_sends_text_1_command
+endm
+
+	enum tradeanim_ot_sends_text_2_command
+tradeanim_ot_sends_text_2: macro
+	db tradeanim_ot_sends_text_2_command
+endm
+
+	enum tradeanim_setup_givemon_scroll_command
+tradeanim_setup_givemon_scroll: macro
+	db tradeanim_setup_givemon_scroll_command
+endm
+
+	enum tradeanim_do_givemon_scroll_command
+tradeanim_do_givemon_scroll: macro
+	db tradeanim_do_givemon_scroll_command
+endm
+
+	enum tradeanim_1d_command
+tradeanim_1d: macro
+	db tradeanim_1d_command
+endm
+
+	enum tradeanim_1e_command
+tradeanim_1e: macro
+	db tradeanim_1e_command
+endm
+
+	enum tradeanim_scroll_out_right_command
+tradeanim_scroll_out_right: macro
+	db tradeanim_scroll_out_right_command
+endm
+
+__enum__ set $21
+
+	enum tradeanim_wait_80_command
+tradeanim_wait_80: macro
+	db tradeanim_wait_80_command
+endm
+
+	enum tradeanim_wait_40_command
+tradeanim_wait_40: macro
+	db tradeanim_wait_40_command
+endm
+
+	enum tradeanim_rocking_ball_command
+tradeanim_rocking_ball: macro
+	db tradeanim_rocking_ball_command
+endm
+
+	enum tradeanim_drop_ball_command
+tradeanim_drop_ball: macro
+	db tradeanim_drop_ball_command
+endm
+
+	enum tradeanim_wait_anim_command
+tradeanim_wait_anim: macro
+	db tradeanim_wait_anim_command
+endm
+
+__enum__ set $27
+
+	enum tradeanim_poof_command
+tradeanim_poof: macro
+	db tradeanim_poof_command
+endm
+
+	enum tradeanim_bulge_through_tube_command
+tradeanim_bulge_through_tube: macro
+	db tradeanim_bulge_through_tube_command
+endm
+
+	enum tradeanim_give_trademon_sfx_command
+tradeanim_give_trademon_sfx: macro
+	db tradeanim_give_trademon_sfx_command
+endm
+
+	enum tradeanim_get_trademon_sfx_command
+tradeanim_get_trademon_sfx: macro
+	db tradeanim_get_trademon_sfx_command
+endm
+
+	enum tradeanim_end_command
+tradeanim_end: macro
+	db tradeanim_end_command
+endm
+
+	enum tradeanim_animate_frontpic_command
+tradeanim_animate_frontpic: macro
+	db tradeanim_animate_frontpic_command
+endm
+
+	enum tradeanim_wait_96_command
+tradeanim_wait_96: macro
+	db tradeanim_wait_96_command
+endm
+
+	enum tradeanim_wait_80_if_ot_egg_command
+tradeanim_wait_80_if_ot_egg: macro
+	db tradeanim_wait_80_if_ot_egg_command
+endm
+
+	enum tradeanim_wait_180_if_ot_egg_command
+tradeanim_wait_180_if_ot_egg: macro
+	db tradeanim_wait_180_if_ot_egg_command
+endm
+
--- a/main.asm
+++ b/main.asm
@@ -4,7 +4,7 @@
 SECTION "bank1", ROMX, BANK[$1]
 
 
-Function4000:: ; 4000
+PlaceWaitingText:: ; 4000
 	hlcoord 3, 10
 	ld b, 1
 	ld c, 11
@@ -14,12 +14,12 @@
 	jr z, .notinbattle
 
 	call TextBox
-	jr .incave
+	jr .proceed
 
 .notinbattle
-	predef Function28eef
+	predef Predef_LinkTextbox
 
-.incave
+.proceed
 	hlcoord 4, 11
 	ld de, .Waiting
 	call PlaceString
@@ -58,1430 +58,8 @@
 
 INCLUDE "engine/map_objects.asm"
 
+INCLUDE "engine/intro_menu.asm"
 
-Function5ae8: ; 5ae8
-	ld de, MUSIC_NONE
-	call PlayMusic
-	call DelayFrame
-	ld de, MUSIC_MAIN_MENU
-	ld a, e
-	ld [wMapMusic], a
-	call PlayMusic
-	callba MainMenu
-	jp Function6219
-; 5b04
-
-; unreferenced
-	ret
-; 5b05
-
-PrintDayOfWeek: ; 5b05
-	push de
-	ld hl, .Days
-	ld a, b
-	call GetNthString
-	ld d, h
-	ld e, l
-	pop hl
-	call PlaceString
-	ld h, b
-	ld l, c
-	ld de, .Day
-	call PlaceString
-	ret
-; 5b1c
-
-.Days ; 5b1c
-	db "SUN@"
-	db "MON@"
-	db "TUES@"
-	db "WEDNES@"
-	db "THURS@"
-	db "FRI@"
-	db "SATUR@"
-; 5b40
-
-.Day ; 5b40
-	db "DAY@"
-; 5b44
-
-NewGame_ClearTileMapEtc: ; 5b44
-	xor a
-	ld [hMapAnims], a
-	call ClearTileMap
-	call LoadFontsExtra
-	call LoadStandardFont
-	call ResetTextRelatedRAM
-	ret
-; 5b54
-
-MysteryGift: ; 5b54
-	call UpdateTime
-	callba DoMysteryGiftIfDayHasPassed
-	callba DoMysteryGift
-	ret
-; 5b64
-
-OptionsMenu: ; 5b64
-	callba _OptionsMenu
-	ret
-; 5b6b
-
-NewGame: ; 5b6b
-	xor a
-	ld [wc2cc], a
-	call ResetWRAM
-	call NewGame_ClearTileMapEtc
-	call AreYouABoyOrAreYouAGirl
-	call OakSpeech
-	call InitializeWorld
-	ld a, 1
-	ld [wPreviousLandmark], a
-
-	ld a, SPAWN_HOME
-	ld [DefaultSpawnpoint], a
-
-	ld a, MAPSETUP_WARP
-	ld [hMapEntryMethod], a
-	jp FinishContinueFunction
-; 5b8f
-
-AreYouABoyOrAreYouAGirl: ; 5b8f
-	callba Function10632f ; some mobile stuff
-	jr c, .ok
-	callba InitGender
-	ret
-
-.ok
-	ld c, 0
-	callba Function4802f
-	ret
-; 5ba7
-
-ResetWRAM: ; 5ba7
-	xor a
-	ld [hBGMapMode], a
-	call _ResetWRAM
-	ret
-; 5bae
-
-_ResetWRAM: ; 5bae
-
-	ld hl, Sprites
-	ld bc, Options - Sprites
-	xor a
-	call ByteFill
-
-	ld hl, wd000
-	ld bc, wGameData - wd000
-	xor a
-	call ByteFill
-
-	ld hl, wGameData
-	ld bc, wGameDataEnd - wGameData
-	xor a
-	call ByteFill
-
-	ld a, [rLY]
-	ld [hSecondsBackup], a
-	call DelayFrame
-	ld a, [hRandomSub]
-	ld [PlayerID], a
-
-	ld a, [rLY]
-	ld [hSecondsBackup], a
-	call DelayFrame
-	ld a, [hRandomAdd]
-	ld [PlayerID + 1], a
-
-	call Random
-	ld [wSecretID], a
-	call DelayFrame
-	call Random
-	ld [wSecretID + 1], a
-
-	ld hl, PartyCount
-	call InitList
-
-	xor a
-	ld [wCurBox], a
-	ld [wSavedAtLeastOnce], a
-
-	call SetDefaultBoxNames
-
-	ld a, BANK(sBoxCount)
-	call GetSRAMBank
-	ld hl, sBoxCount
-	call InitList
-	call CloseSRAM
-
-	ld hl, NumItems
-	call InitList
-
-	ld hl, NumKeyItems
-	call InitList
-
-	ld hl, NumBalls
-	call InitList
-
-	ld hl, PCItems
-	call InitList
-
-	xor a
-	ld [wRoamMon1Species], a
-	ld [wRoamMon2Species], a
-	ld [wRoamMon3Species], a
-	ld a, -1
-	ld [wRoamMon1MapGroup], a
-	ld [wRoamMon2MapGroup], a
-	ld [wRoamMon3MapGroup], a
-	ld [wRoamMon1MapNumber], a
-	ld [wRoamMon2MapNumber], a
-	ld [wRoamMon3MapNumber], a
-
-	ld a, BANK(sMysteryGiftItem)
-	call GetSRAMBank
-	ld hl, sMysteryGiftItem
-	xor a
-	ld [hli], a
-	dec a
-	ld [hl], a
-	call CloseSRAM
-
-	call LoadOrRegenerateLuckyIDNumber
-	call InitializeMagikarpHouse
-
-	xor a
-	ld [MonType], a
-
-	ld [JohtoBadges], a
-	ld [KantoBadges], a
-
-	ld [Coins], a
-	ld [Coins + 1], a
-
-START_MONEY EQU 3000
-
-IF START_MONEY / $10000
-	ld a, START_MONEY / $10000
-ENDC
-	ld [Money], a
-	ld a, START_MONEY / $100 % $100
-	ld [Money + 1], a
-	ld a, START_MONEY % $100
-	ld [Money + 2], a
-
-	xor a
-	ld [wdc17], a
-
-	ld hl, wdc19
-	ld [hl], 2300 / $10000
-	inc hl
-	ld [hl], 2300 / $100 % $100
-	inc hl
-	ld [hl], 2300 % $100
-
-	call InitializeNPCNames
-
-	callba InitDecorations
-
-	callba DeleteScratchmons
-
-	callba DeleteMobileEventIndex
-
-	call ResetGameTime
-	ret
-; 5ca1
-
-InitList: ; 5ca1
-; Loads 0 in the count and -1 in the first item or mon slot.
-	xor a
-	ld [hli], a
-	dec a
-	ld [hl], a
-	ret
-; 5ca6
-
-SetDefaultBoxNames: ; 5ca6
-	ld hl, wBoxNames
-	ld c, 0
-.loop
-	push hl
-	ld de, .Box
-	call CopyName2
-	dec hl
-	ld a, c
-	inc a
-	cp 10
-	jr c, .less
-	sub 10
-	ld [hl], "1"
-	inc hl
-
-.less
-	add "0"
-	ld [hli], a
-	ld [hl], "@"
-	pop hl
-	ld de, 9
-	add hl, de
-	inc c
-	ld a, c
-	cp NUM_BOXES
-	jr c, .loop
-	ret
-
-.Box
-	db "BOX@"
-; 5cd3
-
-InitializeMagikarpHouse: ; 5cd3
-	ld hl, wBestMagikarpLengthFeet
-	ld a, $3
-	ld [hli], a
-	ld a, $6
-	ld [hli], a
-	ld de, .Ralph
-	call CopyName2
-	ret
-; 5ce3
-
-.Ralph ; 5ce3
-	db "RALPH@"
-; 5ce9
-
-InitializeNPCNames: ; 5ce9
-	ld hl, .Rival
-	ld de, RivalName
-	call .Copy
-
-	ld hl, .Mom
-	ld de, MomsName
-	call .Copy
-
-	ld hl, .Red
-	ld de, RedsName
-	call .Copy
-
-	ld hl, .Green
-	ld de, GreensName
-
-.Copy
-	ld bc, NAME_LENGTH
-	call CopyBytes
-	ret
-
-.Rival  db "???@"
-.Red    db "RED@"
-.Green  db "GREEN@"
-.Mom    db "MOM@"
-; 5d23
-
-InitializeWorld: ; 5d23
-	call ShrinkPlayer
-	callba GetSpawnCoord
-	callba _InitializeStartDay
-	ret
-; 5d33
-
-LoadOrRegenerateLuckyIDNumber: ; 5d33
-	ld a, BANK(sLuckyIDNumber)
-	call GetSRAMBank
-	ld a, [CurDay]
-	inc a
-	ld b, a
-	ld a, [sLuckyNumberDay]
-	cp b
-	ld a, [sLuckyIDNumber + 1]
-	ld c, a
-	ld a, [sLuckyIDNumber]
-	jr z, .skip
-	ld a, b
-	ld [sLuckyNumberDay], a
-	call Random
-	ld c, a
-	call Random
-
-.skip
-	ld [wLuckyIDNumber], a
-	ld [sLuckyIDNumber], a
-	ld a, c
-	ld [wLuckyIDNumber + 1], a
-	ld [sLuckyIDNumber + 1], a
-	jp CloseSRAM
-; 5d65
-
-Continue: ; 5d65
-	callba TryLoadSaveFile
-	jr c, .FailToLoad
-	callba Function150b9
-	call LoadStandardMenuDataHeader
-	call Function5e85
-	ld a, $1
-	ld [hBGMapMode], a
-	ld c, 20
-	call DelayFrames
-	call ConfirmContinue
-	jr nc, .Check1Pass
-	call WriteBackup
-	jr .FailToLoad
-
-.Check1Pass
-	call Function5e48
-	jr nc, .Check2Pass
-	call WriteBackup
-	jr .FailToLoad
-
-.Check2Pass
-	ld a, $8
-	ld [MusicFade], a
-	ld a, MUSIC_NONE % $100
-	ld [MusicFadeIDLo], a
-	ld a, MUSIC_NONE / $100
-	ld [MusicFadeIDHi], a
-	call ClearBGPalettes
-	call Function5df0
-	call WriteBackup
-	call ClearTileMap
-	ld c, 20
-	call DelayFrames
-	callba JumpRoamMons
-	callba Function105091
-	callba Function140ae ; time-related
-	ld a, [wSpawnAfterChampion]
-	cp SPAWN_LANCE
-	jr z, .SpawnAfterE4
-	ld a, MAPSETUP_CONTINUE
-	ld [hMapEntryMethod], a
-	jp FinishContinueFunction
-
-.FailToLoad
-	ret
-
-.SpawnAfterE4
-	ld a, SPAWN_NEW_BARK
-	ld [wd001], a
-	call PostCreditsSpawn
-	jp FinishContinueFunction
-; 5de2
-
-SpawnAfterRed: ; 5de2
-	ld a, SPAWN_MT_SILVER
-	ld [wd001], a
-; 5de7
-
-PostCreditsSpawn: ; 5de7
-	xor a
-	ld [wSpawnAfterChampion], a
-	ld a, MAPSETUP_WARP
-	ld [hMapEntryMethod], a
-	ret
-; 5df0
-
-Function5df0: ; 5df0
-	callba Function10632f
-	ret nc
-	ld hl, wd479
-	bit 1, [hl]
-	ret nz
-	ld a, $5
-	ld [MusicFade], a
-	ld a, MUSIC_MOBILE_ADAPTER_MENU % $100
-	ld [MusicFadeIDLo], a
-	ld a, MUSIC_MOBILE_ADAPTER_MENU / $100
-	ld [MusicFadeIDHi], a
-	ld c, 20
-	call DelayFrames
-	ld c, $1
-	callba Function4802f
-	callba Function1509a
-	ld a, $8
-	ld [MusicFade], a
-	ld a, MUSIC_NONE % $100
-	ld [MusicFadeIDLo], a
-	ld a, MUSIC_NONE / $100
-	ld [MusicFadeIDHi], a
-	ld c, 35
-	call DelayFrames
-	ret
-; 5e34
-
-ConfirmContinue: ; 5e34
-.loop
-	call DelayFrame
-	call GetJoypad
-	ld hl, hJoyPressed
-	bit 0, [hl]
-	jr nz, .PressA
-	bit 1, [hl]
-	jr z, .loop
-	scf
-	ret
-
-.PressA
-	ret
-; 5e48
-
-Function5e48: ; 5e48
-	call Function6e3
-	and %10000000 ; Day count exceeded 16383
-	jr z, .pass
-	callba RestartClock
-	ld a, c
-	and a
-	jr z, .pass
-	scf
-	ret
-
-.pass
-	xor a
-	ret
-; 5e5d
-
-FinishContinueFunction: ; 5e5d
-.loop
-	xor a
-	ld [wc2c1], a
-	ld [wLinkMode], a
-	ld hl, GameTimerPause
-	set 0, [hl]
-	res 7, [hl]
-	ld hl, wEnteredMapFromContinue
-	set 1, [hl]
-	callba OverworldLoop
-	ld a, [wSpawnAfterChampion]
-	cp SPAWN_RED
-	jr z, .AfterRed
-	jp Reset
-
-.AfterRed
-	call SpawnAfterRed
-	jr .loop
-; 5e85
-
-Function5e85: ; 5e85
-	call Function6e3
-	and $80
-	jr z, .asm_5e93
-	lb de, 4, 8
-	call Function5eaf
-	ret
-
-.asm_5e93
-	lb de, 4, 8
-	call Function5e9f
-	ret
-; 5e9a
-
-Function5e9a: ; 5e9a
-	lb de, 4, 0
-	jr Function5e9f
-; 5e9f
-
-Function5e9f: ; 5e9f
-	call Function5ebf
-	call Function5f1c
-	call Function5f40
-	call LoadFontsExtra
-	call UpdateSprites
-	ret
-; 5eaf
-
-Function5eaf: ; 5eaf
-	call Function5ebf
-	call Function5f1c
-	call Function5f48
-	call LoadFontsExtra
-	call UpdateSprites
-	ret
-; 5ebf
-
-Function5ebf: ; 5ebf
-	xor a
-	ld [hBGMapMode], a
-	ld hl, MenuDataHeader_0x5ed9
-	ld a, [StatusFlags]
-	bit 0, a ; pokedex
-	jr nz, .asm_5ecf
-	ld hl, MenuDataHeader_0x5efb
-
-.asm_5ecf
-	call Function1e35
-	call MenuBox
-	call Function1c89
-	ret
-; 5ed9
-
-MenuDataHeader_0x5ed9: ; 5ed9
-	db $40 ; flags
-	db 00, 00 ; start coords
-	db 09, 15 ; end coords
-	dw MenuData2_0x5ee1
-	db 1 ; default option
-; 5ee1
-
-MenuData2_0x5ee1: ; 5ee1
-	db $00 ; flags
-	db 4 ; items
-	db "PLAYER@"
-	db "BADGES@"
-	db "#DEX@"
-	db "TIME@"
-; 5efb
-
-MenuDataHeader_0x5efb: ; 5efb
-	db $40 ; flags
-	db 00, 00 ; start coords
-	db 09, 15 ; end coords
-	dw MenuData2_0x5f03
-	db 1 ; default option
-; 5f03
-
-MenuData2_0x5f03: ; 5f03
-	db $00 ; flags
-	db 4 ; items
-	db "PLAYER <PLAYER>@"
-	db "BADGES@"
-	db " @"
-	db "TIME@"
-; 5f1c
-
-
-Function5f1c: ; 5f1c
-	call MenuBoxCoord2Tile
-	push hl
-	ld de, $5d
-	add hl, de
-	call DisplayBadgeCount
-	pop hl
-	push hl
-	ld de, $84
-	add hl, de
-	call DisplayPokedexNumCaught
-	pop hl
-	push hl
-	ld de, $30
-	add hl, de
-	ld de, .Player
-	call PlaceString
-	pop hl
-	ret
-
-.Player
-	db "<PLAYER>@"
-; 5f40
-
-Function5f40: ; 5f40
-	ld de, $a9
-	add hl, de
-	call DisplayGameTime
-	ret
-; 5f48
-
-Function5f48: ; 5f48
-	ld de, $a9
-	add hl, de
-	ld de, .text_5f53
-	call PlaceString
-	ret
-
-.text_5f53
-	db " ???@"
-; 5f58
-
-DisplayBadgeCount: ; 5f58
-	push hl
-	ld hl, JohtoBadges
-	ld b, $2
-	call CountSetBits
-	pop hl
-	ld de, wd265
-	lb bc, 1, 2
-	jp PrintNum
-; 5f6b
-
-DisplayPokedexNumCaught: ; 5f6b
-	ld a, [StatusFlags]
-	bit 0, a
-	ret z
-	push hl
-	ld hl, PokedexCaught
-	ld b, $20
-	call CountSetBits
-	pop hl
-	ld de, wd265
-	lb bc, 1, 3
-	jp PrintNum
-; 5f84
-
-DisplayGameTime: ; 5f84
-	ld de, GameTimeHours
-	lb bc, 2, 3
-	call PrintNum
-	ld [hl], $6d
-	inc hl
-	ld de, GameTimeMinutes
-	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
-	jp PrintNum
-; 5f99
-
-
-OakSpeech: ; 0x5f99
-	callba InitClock
-	call Function4dd
-	call ClearTileMap
-
-	ld de, MUSIC_ROUTE_30
-	call PlayMusic
-
-	call Function4a3
-	call FadeToWhite
-	xor a
-	ld [CurPartySpecies], a
-	ld a, POKEMON_PROF
-	ld [TrainerClass], a
-	call Intro_PrepTrainerPic
-
-	ld b, $1c
-	call GetSGBLayout
-	call Intro_FadeInFrontpic
-
-	ld hl, OakText1
-	call PrintText
-	call FadeToWhite
-	call ClearTileMap
-
-	ld a, WOOPER
-	ld [CurSpecies], a
-	ld [CurPartySpecies], a
-	call GetBaseData
-
-	hlcoord 6, 4
-	call PrepMonFrontpic
-
-	xor a
-	ld [TempMonDVs], a
-	ld [TempMonDVs + 1], a
-
-	ld b, $1c
-	call GetSGBLayout
-	call Intro_WipeInFrontpic
-
-	ld hl, OakText2
-	call PrintText
-	ld hl, OakText4
-	call PrintText
-	call FadeToWhite
-	call ClearTileMap
-
-	xor a
-	ld [CurPartySpecies], a
-	ld a, POKEMON_PROF
-	ld [TrainerClass], a
-	call Intro_PrepTrainerPic
-
-	ld b, $1c
-	call GetSGBLayout
-	call Intro_FadeInFrontpic
-
-	ld hl, OakText5
-	call PrintText
-	call FadeToWhite
-	call ClearTileMap
-
-	xor a
-	ld [CurPartySpecies], a
-	callba DrawIntroPlayerPic
-
-	ld b, $1c
-	call GetSGBLayout
-	call Intro_FadeInFrontpic
-
-	ld hl, OakText6
-	call PrintText
-	call NamePlayer
-	ld hl, OakText7
-	call PrintText
-	ret
-
-OakText1: ; 0x6045
-	text_jump _OakText1
-	db "@"
-
-OakText2: ; 0x604a
-	text_jump _OakText2
-	start_asm
-	ld a, WOOPER
-	call PlayCry
-	call WaitSFX
-	ld hl, OakText3
-	ret
-
-OakText3: ; 0x605b
-	text_jump _OakText3
-	db "@"
-
-OakText4: ; 0x6060
-	text_jump _OakText4
-	db "@"
-
-OakText5: ; 0x6065
-	text_jump _OakText5
-	db "@"
-
-OakText6: ; 0x606a
-	text_jump _OakText6
-	db "@"
-
-OakText7: ; 0x606f
-	text_jump _OakText7
-	db "@"
-
-NamePlayer: ; 0x6074
-	callba MovePlayerPicRight
-	callba ShowPlayerNamingChoices
-	ld a, [MenuSelection2]
-	dec a
-	jr z, .NewName
-	call StorePlayerName
-	callba Function8c1d
-	callba MovePlayerPicLeft
-	ret
-
-.NewName
-	ld b, 1
-	ld de, PlayerName
-	callba NamingScreen
-
-	call FadeToWhite
-	call ClearTileMap
-
-	call LoadFontsExtra
-	call WaitBGMap
-
-	xor a
-	ld [CurPartySpecies], a
-	callba DrawIntroPlayerPic
-
-	ld b, $1c
-	call GetSGBLayout
-	call Function4f0
-
-	ld hl, PlayerName
-	ld de, .Chris
-	ld a, [PlayerGender]
-	bit 0, a
-	jr z, .Male
-	ld de, .Kris
-.Male
-	call InitName
-	ret
-
-.Chris
-	db "CHRIS@@@@@@"
-.Kris
-	db "KRIS@@@@@@@"
-; 60e9
-
-Function60e9: ; Unreferenced
-	call LoadMenuDataHeader
-	call InterpretMenu2
-	ld a, [MenuSelection2]
-	dec a
-	call CopyNameFromMenu
-	call WriteBackup
-	ret
-; 60fa
-
-StorePlayerName: ; 60fa
-	ld a, "@"
-	ld bc, NAME_LENGTH
-	ld hl, PlayerName
-	call ByteFill
-	ld hl, PlayerName
-	ld de, StringBuffer2
-	call CopyName2
-	ret
-; 610f
-
-ShrinkPlayer: ; 610f
-
-	ld a, [hROMBank]
-	push af
-
-	ld a, 0 << 7 | 32 ; fade out
-	ld [MusicFade], a
-	ld de, MUSIC_NONE
-	ld a, e
-	ld [MusicFadeIDLo], a
-	ld a, d
-	ld [MusicFadeIDHi], a
-
-	ld de, SFX_ESCAPE_ROPE
-	call PlaySFX
-	pop af
-	rst Bankswitch
-
-	ld c, 8
-	call DelayFrames
-
-	ld hl, Shrink1Pic
-	ld b, BANK(Shrink1Pic)
-	call ShrinkFrame
-
-	ld c, 8
-	call DelayFrames
-
-	ld hl, Shrink2Pic
-	ld b, BANK(Shrink2Pic)
-	call ShrinkFrame
-
-	ld c, 8
-	call DelayFrames
-
-	hlcoord 6, 5
-	ld b, 7
-	ld c, 7
-	call ClearBox
-
-	ld c, 3
-	call DelayFrames
-
-	call Intro_PlacePlayerSprite
-	call LoadFontsExtra
-
-	ld c, 50
-	call DelayFrames
-
-	call FadeToWhite
-	call ClearTileMap
-	ret
-; 616a
-
-Intro_FadeInFrontpic: ; 616a
-	ld hl, IntroFadePalettes
-	ld b, IntroFadePalettesEnd - IntroFadePalettes
-.loop
-	ld a, [hli]
-	call DmgToCgbBGPals
-	ld c, 10
-	call DelayFrames
-	dec b
-	jr nz, .loop
-	ret
-; 617c
-
-IntroFadePalettes: ; 0x617c
-	db %01010100
-	db %10101000
-	db %11111100
-	db %11111000
-	db %11110100
-	db %11100100
-IntroFadePalettesEnd
-; 6182
-
-Intro_WipeInFrontpic: ; 6182
-	ld a, $77
-	ld [hWX], a
-	call DelayFrame
-	ld a, %11100100
-	call DmgToCgbBGPals
-.loop
-	call DelayFrame
-	ld a, [hWX]
-	sub $8
-	cp -1
-	ret z
-	ld [hWX], a
-	jr .loop
-; 619c
-
-Intro_PrepTrainerPic: ; 619c
-	ld de, VTiles2
-	callba GetTrainerPic
-	xor a
-	ld [hFillBox], a
-	hlcoord 6, 4
-	lb bc, 7, 7
-	predef FillBox
-	ret
-; 61b4
-
-ShrinkFrame: ; 61b4
-	ld de, VTiles2
-	ld c, $31
-	predef DecompressPredef
-	xor a
-	ld [hFillBox], a
-	hlcoord 6, 4
-	lb bc, 7, 7
-	predef FillBox
-	ret
-; 61cd
-
-Intro_PlacePlayerSprite: ; 61cd
-
-	callba GetPlayerIcon
-	ld c, $c
-	ld hl, VTiles0
-	call Request2bpp
-
-	ld hl, Sprites
-	ld de, .sprites
-	ld a, [de]
-	inc de
-
-	ld c, a
-.loop
-	ld a, [de]
-	inc de
-	ld [hli], a
-	ld a, [de]
-	inc de
-	ld [hli], a
-	ld a, [de]
-	inc de
-	ld [hli], a
-
-	ld b, 0
-	ld a, [PlayerGender]
-	bit 0, a
-	jr z, .male
-	ld b, 1
-.male
-	ld a, b
-
-	ld [hli], a
-	dec c
-	jr nz, .loop
-	ret
-; 61fe
-
-.sprites ; 61fe
-	db 4
-	db $4c, $48, 0
-	db $4c, $50, 1
-	db $54, $48, 2
-	db $54, $50, 3
-; 620b
-
-
-Function620b: ; 620b
-	callab Functione4579
-	jr c, Function6219
-	callba CrystalIntro
-
-Function6219: ; 6219
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-
-	call TitleScreen
-	call DelayFrame
-.loop
-	call Function627b
-	jr nc, .loop
-
-	call ClearSprites
-	call ClearBGPalettes
-
-	pop af
-	ld [rSVBK], a
-
-	ld hl, rLCDC
-	res 2, [hl]
-	call ClearScreen
-	call Function3200
-	xor a
-	ld [hLCDStatCustom], a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	ld b, $8
-	call GetSGBLayout
-	call UpdateTimePals
-	ld a, [wcf64]
-	cp $5
-	jr c, .ok
-	xor a
-.ok
-	ld e, a
-	ld d, 0
-	ld hl, .jumptable_626a
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 626a
-
-.jumptable_626a
-	dw Function5ae8
-	dw Function6389
-	dw Function620b
-	dw Function620b
-	dw ResetClock
-; 6274
-
-
-TitleScreen: ; 6274
-	callba _TitleScreen
-	ret
-; 627b
-
-Function627b: ; 627b
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .done_title
-	call TitleScreenScene
-	callba SuicuneFrameIterator
-	call DelayFrame
-	and a
-	ret
-
-.done_title
-	scf
-	ret
-; 6292
-
-Function6292: ; 6292 ; unreferenced
-	ld a, [hVBlankCounter]
-	and $7
-	ret nz
-	ld hl, LYOverrides + $5f
-	ld a, [hl]
-	dec a
-	ld bc, 2 * SCREEN_WIDTH
-	call ByteFill
-	ret
-; 62a3
-
-TitleScreenScene: ; 62a3
-	ld e, a
-	ld d, 0
-	ld hl, .scenes
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 62af
-
-.scenes
-	dw TitleScreenEntrance
-	dw TitleScreenTimer
-	dw TitleScreenMain
-	dw TitleScreenEnd
-; 62b7
-
-Function62b7: ; Unreferenced
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-; 62bc
-
-
-TitleScreenEntrance: ; 62bc
-
-; Animate the logo:
-; Move each line by 4 pixels until our count hits 0.
-	ld a, [hSCX]
-	and a
-	jr z, .done
-	sub 4
-	ld [hSCX], a
-
-; Lay out a base (all lines scrolling together).
-	ld e, a
-	ld hl, LYOverrides
-	ld bc, 8 * 10 ; logo height
-	call ByteFill
-
-; Reversed signage for every other line's position.
-; This is responsible for the interlaced effect.
-	ld a, e
-	xor -1
-	inc a
-
-	ld b, 8 * 10 / 2 ; logo height / 2
-	ld hl, LYOverrides + 1
-.loop
-	ld [hli], a
-	inc hl
-	dec b
-	jr nz, .loop
-
-	callba AnimateTitleCrystal
-	ret
-
-.done
-; Next scene
-	ld hl, wJumptableIndex
-	inc [hl]
-	xor a
-	ld [hLCDStatCustom], a
-
-; Play the title screen music.
-	ld de, MUSIC_TITLE
-	call PlayMusic
-
-	ld a, $88
-	ld [hWY], a
-	ret
-; 62f6
-
-
-TitleScreenTimer: ; 62f6
-
-; Next scene
-	ld hl, wJumptableIndex
-	inc [hl]
-
-; Start a timer
-	ld hl, wcf65
-	ld de, $1140 ; 73.6 seconds
-	ld [hl], e
-	inc hl
-	ld [hl], d
-	ret
-; 6304
-
-TitleScreenMain: ; 6304
-
-; Run the timer down.
-	ld hl, wcf65
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	ld a, e
-	or d
-	jr z, .end
-
-	dec de
-	ld [hl], d
-	dec hl
-	ld [hl], e
-
-; Save data can be deleted by pressing Up + B + Select.
-	call GetJoypad
-	ld hl, hJoyDown
-	ld a, [hl]
-	and D_UP + B_BUTTON + SELECT
-	cp  D_UP + B_BUTTON + SELECT
-	jr z, .delete_save_data
-
-; To bring up the clock reset dialog:
-
-; Hold Down + B + Select to initiate the sequence.
-	ld a, [$ffeb]
-	cp $34
-	jr z, .check_clock_reset
-
-	ld a, [hl]
-	and D_DOWN + B_BUTTON + SELECT
-	cp  D_DOWN + B_BUTTON + SELECT
-	jr nz, .check_start
-
-	ld a, $34
-	ld [$ffeb], a
-	jr .check_start
-
-; Keep Select pressed, and hold Left + Up.
-; Then let go of Select.
-.check_clock_reset
-	bit 2, [hl] ; SELECT
-	jr nz, .check_start
-
-	xor a
-	ld [$ffeb], a
-
-	ld a, [hl]
-	and D_LEFT + D_UP
-	cp  D_LEFT + D_UP
-	jr z, .clock_reset
-
-; Press Start or A to start the game.
-.check_start
-	ld a, [hl]
-	and START | A_BUTTON
-	jr nz, .incave
-	ret
-
-.incave
-	ld a, 0
-	jr .done
-
-.delete_save_data
-	ld a, 1
-
-.done
-	ld [wcf64], a
-
-; Return to the intro sequence.
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-.end
-; Next scene
-	ld hl, wJumptableIndex
-	inc [hl]
-
-; Fade out the title screen music
-	xor a
-	ld [MusicFadeIDLo], a
-	ld [MusicFadeIDHi], a
-	ld hl, MusicFade
-	ld [hl], 8 ; 1 second
-
-	ld hl, wcf65
-	inc [hl]
-	ret
-
-.clock_reset
-	ld a, 4
-	ld [wcf64], a
-
-; Return to the intro sequence.
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-; 6375
-
-TitleScreenEnd: ; 6375
-
-; Wait until the music is done fading.
-
-	ld hl, wcf65
-	inc [hl]
-
-	ld a, [MusicFade]
-	and a
-	ret nz
-
-	ld a, 2
-	ld [wcf64], a
-
-; Back to the intro.
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-; 6389
-
-Function6389: ; 6389
-	callba Function4d54c
-	jp Init
-; 6392
-
-ResetClock: ; 6392
-	callba _ResetClock
-	jp Init
-; 639b
-
-Function639b: ; unreferenced
-	; If bit 0 or 1 of [wcf65] is set, we don't need to be here.
-	ld a, [wcf65]
-	and $3
-	ret nz
-	ld bc, wc3a4
-	ld hl, $a
-	add hl, bc ; over-the-top compicated way to load wc3ae into hl
-	ld l, [hl]
-	ld h, 0
-rept 2
-	add hl, hl
-endr
-	ld de, Data63ca
-	add hl, de
-	; If bit 2 of [wcf65] is set, get the second dw; else, get the first dw
-	ld a, [wcf65]
-	and %00000100
-rept 2
-	srl a
-endr
-	ld e, a
-	ld d, 0
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	and a
-	ret z
-	ld e, a
-	ld d, [hl]
-	ld a, $1
-	call Function3b2a
-	ret
-; 63ca
-
-Data63ca: ; 63ca
-	dw $505c, 0
-	dw $685c, $585c
-	dw $685c, $785c
-	dw $885c, $785c
-	dw 0, $785c
-	dw 0, $585c
-; 63e2
-
-Copyright: ; 63e2
-	call ClearTileMap
-	call LoadFontsExtra
-	ld de, CopyrightGFX
-	ld hl, VTiles2 tile $60
-	lb bc, BANK(CopyrightGFX), $1d
-	call Request2bpp
-	hlcoord 2, 7
-	ld de, CopyrightString
-	jp PlaceString
-; 63fd
-
-CopyrightString: ; 63fd
-	; ©1995-2001 Nintendo
-	db $60, $61, $62, $63, $64, $65, $66
-	db $67, $68, $69, $6a, $6b, $6c
-
-	db $4e
-
-	; ©1995-2001 Creatures inc.
-	db $60, $61, $62, $63, $64, $65, $66, $6d
-	db $6e, $6f, $70, $71, $72, $7a, $7b, $7c
-
-	db $4e
-
-	; ©1995-2001 GAME FREAK inc.
-	db $60, $61, $62, $63, $64, $65, $66, $73, $74
-	db $75, $76, $77, $78, $79, $7a, $7b, $7c
-
-	db "@"
-; 642e
-
-GameInit:: ; 642e
-	callba Function14f1c
-	call ResetTextRelatedRAM
-	call ClearBGPalettes
-	call ClearTileMap
-	ld a, VBGMap0 / $100
-	ld [hBGMapAddress + 1], a
-	xor a
-	ld [hBGMapAddress], a
-	ld [hJoyDown], a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $90
-	ld [hWY], a
-	call WaitBGMap
-	jp Function620b
-; 6454
-
 Function6454:: ; 6454
 	call DelayFrame
 	ld a, [hOAMUpdate]
@@ -1521,13 +99,13 @@
 	xor a
 	ld [hBGMapMode], a
 	ld [hWY], a
-	callba Function64db ; no need to callba
+	callba Function64db ; no need to farcall
 	ld a, VBGMap0 / $100
 	call Function64b9
 	xor a
-	ld [wd152], a
-	ld a, $98
-	ld [wd153], a
+	ld [wBGMapAnchor], a
+	ld a, VBGMap0 / $100
+	ld [wBGMapAnchor + 1], a
 	xor a
 	ld [hSCX], a
 	ld [hSCY], a
@@ -1597,7 +175,7 @@
 	ld hl, PartyMonNicknames
 	call GetNick
 	ld hl, StringBuffer1
-	ld de, wd050
+	ld de, wd050_MonNick
 	ld bc, PKMN_NAME_LENGTH
 	call CopyBytes
 
@@ -1609,6 +187,10 @@
 	ld d, h
 	ld e, l
 	ld b, NUM_MOVES
+; Get the first empty move slot.  This routine also serves to
+; determine whether the Pokemon learning the moves already has
+; all four slots occupied, in which case one would need to be
+; deleted.
 .next
 	ld a, [hl]
 	and a
@@ -1616,7 +198,8 @@
 	inc hl
 	dec b
 	jr nz, .next
-
+; If we're here, we enter the routine for forgetting a move
+; to make room for the new move we're trying to learn.
 	push de
 	call ForgetMove
 	pop de
@@ -1639,7 +222,7 @@
 .not_disabled
 
 	call GetMoveName
-	ld hl, UnknownText_0x6684
+	ld hl, UnknownText_0x6684 ; 1, 2 and…
 	call PrintText
 	pop de
 	pop hl
@@ -1690,18 +273,18 @@
 	jp .learned
 
 .cancel
-	ld hl, UnknownText_0x6675
+	ld hl, UnknownText_0x6675 ; Stop learning <MOVE>?
 	call PrintText
 	call YesNoBox
 	jp c, .loop
 
-	ld hl, UnknownText_0x667a
+	ld hl, UnknownText_0x667a ; <MON> did not learn <MOVE>.
 	call PrintText
 	ld b, 0
 	ret
 
 .learned
-	ld hl, UnknownText_0x666b
+	ld hl, UnknownText_0x666b ; <MON> learned <MOVE>!
 	call PrintText
 	ld b, 1
 	ret
@@ -1733,6 +316,7 @@
 	ld a, SCREEN_WIDTH * 2
 	ld [Buffer1], a
 	predef ListMoves
+	; wMenuData3
 	ld a, $4
 	ld [wcfa1], a
 	ld a, $6
@@ -1790,32 +374,38 @@
 ; 666b
 
 UnknownText_0x666b: ; 666b
+; <MON> learned <MOVE>!
 	text_jump UnknownText_0x1c5660
 	db "@"
 ; 6670
 
 UnknownText_0x6670: ; 6670
+; Which move should be forgotten?
 	text_jump UnknownText_0x1c5678
 	db "@"
 ; 6675
 
 UnknownText_0x6675: ; 6675
+; Stop learning <MOVE>?
 	text_jump UnknownText_0x1c5699
 	db "@"
 ; 667a
 
 UnknownText_0x667a: ; 667a
+; <MON> did not learn <MOVE>.
 	text_jump UnknownText_0x1c56af
 	db "@"
 ; 667f
 
 UnknownText_0x667f: ; 667f
+; <MON> is trying to learn <MOVE>. But <MON> can't learn more than
+; four moves. Delete an older move to make room for <MOVE>?
 	text_jump UnknownText_0x1c56c9
 	db "@"
 ; 6684
 
 UnknownText_0x6684: ; 6684
-	text_jump UnknownText_0x1c5740
+	text_jump UnknownText_0x1c5740 ; 1, 2 and…
 	start_asm
 	push de
 	ld de, SFX_SWITCH_POKEMON
@@ -1826,11 +416,13 @@
 ; 6695
 
 UnknownText_0x6695: ; 6695
+; Poof! <MON> forgot <MOVE>. And…
 	text_jump UnknownText_0x1c574e
 	db "@"
 ; 669a
 
 UnknownText_0x669a: ; 669a
+; HM moves can't be forgotten now.
 	text_jump UnknownText_0x1c5772
 	db "@"
 ; 669f
@@ -2122,10 +714,11 @@
 	ld hl, OBJECT_PALETTE
 	add hl, bc
 	bit 5, [hl]
-	jr z, .asm_6ed9
+	jr z, .not_bit_5
+
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
-	bit 4, [hl]
+	bit 4, [hl] ; lost
 	push hl
 	push bc
 	call Function6f2c
@@ -2132,13 +725,13 @@
 	pop bc
 	pop hl
 	ret c
-	jr .asm_6ee9
+	jr .resume
 
-.asm_6ed9
+.not_bit_5
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
 	bit 4, [hl]
-	jr nz, .asm_6ee9
+	jr nz, .resume
 	push hl
 	push bc
 	call Function6f07
@@ -2146,29 +739,31 @@
 	pop hl
 	ret c
 
-.asm_6ee9
+.resume
 	bit 6, [hl]
-	jr nz, .asm_6ef5
+	jr nz, .bit_6
 
 	push hl
 	push bc
-	call Function7009
+	call WillPersonBumpIntoSomeoneElse
 	pop bc
 	pop hl
 	ret c
 
-.asm_6ef5
+.bit_6
 	bit 5, [hl]
-	jr nz, .asm_6f05
+	jr nz, .bit_5
 	push hl
-	call Function70a4
+	call HasPersonReachedMovementLimit
 	pop hl
 	ret c
+
 	push hl
-	call Function70ed
+	call IsPersonMovingOffEdgeOfScreen
 	pop hl
 	ret c
-.asm_6f05
+
+.bit_5
 	and a
 	ret
 ; 6f07
@@ -2177,10 +772,10 @@
 Function6f07: ; 6f07
 	call Function6f5f
 	ret c
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld d, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld e, [hl]
 	ld hl, OBJECT_PALETTE
@@ -2187,7 +782,7 @@
 	add hl, bc
 	bit 7, [hl]
 	jp nz, Function6fa1
-	ld hl, OBJECT_STANDING_TILE
+	ld hl, OBJECT_NEXT_TILE
 	add hl, bc
 	ld a, [hl]
 	ld d, a
@@ -2201,7 +796,7 @@
 Function6f2c: ; 6f2c
 	call Function6f5f
 	ret c
-	ld hl, OBJECT_STANDING_TILE
+	ld hl, OBJECT_NEXT_TILE
 	add hl, bc
 	ld a, [hl]
 	call GetTileCollision
@@ -2212,7 +807,7 @@
 ; 6f3e
 
 Function6f3e: ; 6f3e
-	ld hl, OBJECT_STANDING_TILE
+	ld hl, OBJECT_NEXT_TILE
 	add hl, bc
 	ld a, [hl]
 	call Function6f7f
@@ -2238,7 +833,7 @@
 ; 6f5f
 
 Function6f5f: ; 6f5f
-	ld hl, OBJECT_NEXT_TILE
+	ld hl, OBJECT_STANDING_TILE
 	add hl, bc
 	ld a, [hl]
 	call Function6f7f
@@ -2323,12 +918,12 @@
 	inc e
 
 .asm_6fc2
-	call Function2a3c
+	call GetCoordTile
 	call GetTileCollision
 	pop de
 	and a
 	jr nz, .asm_6fd7
-	call Function2a3c
+	call GetCoordTile
 	call GetTileCollision
 	and a
 	jr nz, .asm_6fd7
@@ -2350,7 +945,7 @@
 	call CheckCounterTile
 	jr nz, .asm_6ff1
 
-	ld a, [PlayerMapX]
+	ld a, [PlayerNextMapX]
 	sub d
 	cpl
 	inc a
@@ -2357,7 +952,7 @@
 	add d
 	ld d, a
 
-	ld a, [PlayerMapY]
+	ld a, [PlayerNextMapY]
 	sub e
 	cpl
 	inc a
@@ -2368,7 +963,7 @@
 	ld bc, ObjectStructs ; redundant
 	ld a, 0
 	ld [hMapObjectIndexBuffer], a
-	call Function7041
+	call IsNPCAtCoord
 	ret nc
 	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
@@ -2384,28 +979,28 @@
 ; 7009
 
 
-Function7009: ; 7009
-	ld hl, OBJECT_MAP_X
+WillPersonBumpIntoSomeoneElse: ; 7009
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld d, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld e, [hl]
-	jr Function7041
+	jr IsNPCAtCoord
 ; 7015
 
 Function7015: ; unreferenced
 	ld a, [hMapObjectIndexBuffer]
 	call GetObjectStruct
-	call Function7021
-	call Function7041
+	call .CheckWillBeFacingNPC
+	call IsNPCAtCoord
 	ret
 
-Function7021: ; 7021
-	ld hl, OBJECT_MAP_X
+.CheckWillBeFacingNPC: ; 7021
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld d, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld e, [hl]
 	call GetSpriteDirection
@@ -2431,7 +1026,7 @@
 	ret
 ; 7041
 
-Function7041: ; 7041
+IsNPCAtCoord: ; 7041
 	ld bc, ObjectStructs
 	xor a
 .loop
@@ -2438,25 +1033,28 @@
 	ld [hObjectStructIndexBuffer], a
 	call GetObjectSprite
 	jr z, .next
+
 	ld hl, OBJECT_FLAGS1
 	add hl, bc
 	bit 7, [hl]
 	jr nz, .next
+
 	ld hl, OBJECT_PALETTE
 	add hl, bc
 	bit 7, [hl]
 	jr z, .got
+
 	call Function7171
 	jr nc, .ok
 	jr .ok2
 
 .got
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld a, [hl]
 	cp d
 	jr nz, .ok
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld a, [hl]
 	cp e
@@ -2470,12 +1068,12 @@
 	jr nz, .setcarry
 
 .ok
-	ld hl, OBJECT_NEXT_MAP_X
+	ld hl, OBJECT_MAP_X
 	add hl, bc
 	ld a, [hl]
 	cp d
 	jr nz, .next
-	ld hl, OBJECT_NEXT_MAP_Y
+	ld hl, OBJECT_MAP_Y
 	add hl, bc
 	ld a, [hl]
 	cp e
@@ -2503,17 +1101,17 @@
 	ret
 ; 70a4
 
-Function70a4: ; 70a4
-	ld hl, OBJECT_22
+HasPersonReachedMovementLimit: ; 70a4
+	ld hl, OBJECT_RADIUS
 	add hl, bc
 	ld a, [hl]
 	and a
-	jr z, .asm_70e9
+	jr z, .nope
 	and $f
-	jr z, .asm_70c7
+	jr z, .check_y
 	ld e, a
 	ld d, a
-	ld hl, OBJECT_20
+	ld hl, OBJECT_INIT_X
 	add hl, bc
 	ld a, [hl]
 	sub d
@@ -2521,24 +1119,24 @@
 	ld a, [hl]
 	add e
 	ld e, a
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld a, [hl]
 	cp d
-	jr z, .asm_70eb
+	jr z, .yes
 	cp e
-	jr z, .asm_70eb
+	jr z, .yes
 
-.asm_70c7
-	ld hl, OBJECT_22
+.check_y
+	ld hl, OBJECT_RADIUS
 	add hl, bc
 	ld a, [hl]
 	swap a
 	and $f
-	jr z, .asm_70e9
+	jr z, .nope
 	ld e, a
 	ld d, a
-	ld hl, OBJECT_21
+	ld hl, OBJECT_INIT_Y
 	add hl, bc
 	ld a, [hl]
 	sub d
@@ -2546,58 +1144,58 @@
 	ld a, [hl]
 	add e
 	ld e, a
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld a, [hl]
 	cp d
-	jr z, .asm_70eb
+	jr z, .yes
 	cp e
-	jr z, .asm_70eb
+	jr z, .yes
 
-.asm_70e9
+.nope
 	xor a
 	ret
 
-.asm_70eb
+.yes
 	scf
 	ret
 ; 70ed
 
-Function70ed: ; 70ed
-	ld hl, OBJECT_MAP_X
+IsPersonMovingOffEdgeOfScreen: ; 70ed
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld a, [XCoord]
 	cp [hl]
-	jr z, .asm_70fe
-	jr nc, .asm_7111
+	jr z, .check_y
+	jr nc, .yes
 	add $9
 	cp [hl]
-	jr c, .asm_7111
+	jr c, .yes
 
-.asm_70fe
-	ld hl, OBJECT_MAP_Y
+.check_y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld a, [YCoord]
 	cp [hl]
-	jr z, .asm_710f
-	jr nc, .asm_7111
+	jr z, .nope
+	jr nc, .yes
 	add $8
 	cp [hl]
-	jr c, .asm_7111
+	jr c, .yes
 
-.asm_710f
+.nope
 	and a
 	ret
 
-.asm_7111
+.yes
 	scf
 	ret
 ; 7113
 
 Function7113: ; unreferenced
-	ld a, [PlayerMapX]
+	ld a, [PlayerNextMapX]
 	ld d, a
-	ld a, [PlayerMapY]
+	ld a, [PlayerNextMapY]
 	ld e, a
 	ld bc, ObjectStructs
 	xor a
@@ -2604,46 +1202,46 @@
 .loop
 	ld [hObjectStructIndexBuffer], a
 	call GetObjectSprite
-	jr z, .asm_7160
+	jr z, .next
 	ld hl, OBJECT_MOVEMENTTYPE
 	add hl, bc
 	ld a, [hl]
 	cp SPRITEMOVEDATA_SNORLAX
-	jr nz, .asm_7136
+	jr nz, .not_snorlax
 	call Function7171
-	jr c, .asm_716f
-	jr .asm_7160
+	jr c, .yes
+	jr .next
 
-.asm_7136
-	ld hl, OBJECT_MAP_Y
+.not_snorlax
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld a, [hl]
 	cp e
-	jr nz, .asm_714e
-	ld hl, OBJECT_MAP_X
+	jr nz, .check_current_coords
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld a, [hl]
 	cp d
-	jr nz, .asm_714e
+	jr nz, .check_current_coords
 	ld a, [hObjectStructIndexBuffer]
 	cp $0
-	jr z, .asm_7160
-	jr .asm_716f
+	jr z, .next
+	jr .yes
 
-.asm_714e
-	ld hl, OBJECT_NEXT_MAP_Y
+.check_current_coords
+	ld hl, OBJECT_MAP_Y
 	add hl, bc
 	ld a, [hl]
 	cp e
-	jr nz, .asm_7160
-	ld hl, OBJECT_NEXT_MAP_X
+	jr nz, .next
+	ld hl, OBJECT_MAP_X
 	add hl, bc
 	ld a, [hl]
 	cp d
-	jr nz, .asm_7160
-	jr .asm_716f
+	jr nz, .next
+	jr .yes
 
-.asm_7160
+.next
 	ld hl, OBJECT_STRUCT_LENGTH
 	add hl, bc
 	ld b, h
@@ -2655,7 +1253,7 @@
 	xor a
 	ret
 
-.asm_716f
+.yes
 	scf
 	ret
 ; 7171
@@ -2662,24 +1260,24 @@
 
 
 Function7171: ; 7171
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld a, d
 	sub [hl]
-	jr c, .asm_718b
+	jr c, .nope
 	cp $2
-	jr nc, .asm_718b
-	ld hl, OBJECT_MAP_Y
+	jr nc, .nope
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld a, e
 	sub [hl]
-	jr c, .asm_718b
+	jr c, .nope
 	cp $2
-	jr nc, .asm_718b
+	jr nc, .nope
 	scf
 	ret
 
-.asm_718b
+.nope
 	and a
 	ret
 ; 718d
@@ -2950,7 +1548,7 @@
 
 ; Caught data.
 	ld b, 0
-	callba SetPartymonCaughtData
+	callba SetGiftPartyMonCaughtData
 
 ; Holding a Berry.
 	ld bc, PARTYMON_STRUCT_LENGTH
@@ -3214,7 +1812,7 @@
 	call GetMapObject
 	ld hl, MAPOBJECT_COLOR
 	add hl, bc
-	ln e, (1 << 3) | PAL_OW_RED, $0
+	ln e, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT
 	ld a, [wPlayerSpriteSetupFlags]
 	bit 2, a
 	jr nz, .ok
@@ -3221,7 +1819,7 @@
 	ld a, [PlayerGender]
 	bit 0, a
 	jr z, .ok
-	ln e, (1 << 3) | PAL_OW_BLUE, $0
+	ln e, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT
 
 .ok
 	ld [hl], e
@@ -3231,9 +1829,9 @@
 	ld a, $0
 	ld [hObjectStructIndexBuffer], a
 	ld de, ObjectStructs
-	call Function8116
-	ld a, $0
-	ld [wd4cf], a
+	call CopyMapObjectToObjectStruct
+	ld a, PLAYER
+	ld [wCenteredObject], a
 	ret
 ; 8071
 
@@ -3241,7 +1839,7 @@
 ; A dummy map object used to initialize the player object.
 ; Shorter than the actual amount copied by two bytes.
 ; Said bytes seem to be unused.
-	person_event SPRITE_CHRIS, -4, -4, SPRITEMOVEDATA_PLAYER, 15, 15, -1, -1, 0, 0, 0, 0, -1
+	person_event SPRITE_CHRIS, -4, -4, SPRITEMOVEDATA_PLAYER, 15, 15, -1, -1, 0, PERSONTYPE_SCRIPT, 0, 0, -1
 ; 807e
 
 CopyDECoordsToMapObject:: ; 807e
@@ -3277,10 +1875,10 @@
 	call CheckObjectVisibility
 	ret c
 
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld d, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld e, [hl]
 	ld a, [hMapObjectIndexBuffer]
@@ -3294,28 +1892,28 @@
 	ld a, [XCoord]
 	add 4
 	ld d, a
-	ld hl, PlayerMapX
+	ld hl, PlayerNextMapX
 	sub [hl]
 	ld [hl], d
 	ld hl, MapObjects + MAPOBJECT_X_COORD
 	ld [hl], d
-	ld hl, PlayerNextMapX
+	ld hl, PlayerMapX
 	ld [hl], d
 	ld d, a
 	ld a, [YCoord]
 	add 4
 	ld e, a
-	ld hl, PlayerMapY
+	ld hl, PlayerNextMapY
 	sub [hl]
 	ld [hl], e
 	ld hl, MapObjects + MAPOBJECT_Y_COORD
 	ld [hl], e
-	ld hl, PlayerNextMapY
+	ld hl, PlayerMapY
 	ld [hl], e
 	ld e, a
 	ld a, [wObjectFollow_Leader]
 	cp $0
-	ret nz
+	ret nz ; wtf
 	ret
 ; 80e7
 
@@ -3324,6 +1922,7 @@
 	call CheckObjectMask
 	and a
 	ret nz ; masked
+
 	ld hl, ObjectStructs + OBJECT_STRUCT_LENGTH * 1
 	ld a, 1
 	ld de, OBJECT_STRUCT_LENGTH
@@ -3338,15 +1937,16 @@
 	cp NUM_OBJECT_STRUCTS
 	jr nz, .loop
 	scf
-	ret
+	ret ; overflow
 
 .done
 	ld d, h
 	ld e, l
-	call Function8116
+	call CopyMapObjectToObjectStruct
 	ld hl, VramState
 	bit 7, [hl]
 	ret z
+
 	ld hl, OBJECT_FLAGS2
 	add hl, de
 	set 5, [hl]
@@ -3353,62 +1953,71 @@
 	ret
 ; 8116
 
-Function8116: ; 8116
-	call Function811d
-	call Function8286
+CopyMapObjectToObjectStruct: ; 8116
+	call .CopyMapObjectToTempObject
+	call CopyTempObjectToObjectStruct
 	ret
 ; 811d
 
-Function811d: ; 811d
+.CopyMapObjectToTempObject: ; 811d
 	ld a, [hObjectStructIndexBuffer]
 	ld hl, MAPOBJECT_OBJECT_STRUCT_ID
 	add hl, bc
 	ld [hl], a
+
 	ld a, [hMapObjectIndexBuffer]
-	ld [wc2f0], a
+	ld [wTempObjectCopyMapObjectIndex], a
+
 	ld hl, MAPOBJECT_SPRITE
 	add hl, bc
 	ld a, [hl]
-	ld [wc2f1], a
-	call Function180e
-	ld [wc2f2], a
+	ld [wTempObjectCopySprite], a
+
+	call GetSpriteVTile
+	ld [wTempObjectCopySpriteVTile], a
+
 	ld a, [hl]
 	call GetSpritePalette
-	ld [wc2f3], a
+	ld [wTempObjectCopyPalette], a
+
 	ld hl, MAPOBJECT_COLOR
 	add hl, bc
 	ld a, [hl]
 	and $f0
-	jr z, .no_color
+	jr z, .skip_color_override
 	swap a
-	and $7
-	ld [wc2f3], a
+	and $7 ; OAM_PALETTE
+	ld [wTempObjectCopyPalette], a
 
-.no_color
+.skip_color_override
 	ld hl, MAPOBJECT_MOVEMENT
 	add hl, bc
 	ld a, [hl]
-	ld [wc2f4], a
+	ld [wTempObjectCopyMovement], a
+
 	ld hl, MAPOBJECT_RANGE
 	add hl, bc
 	ld a, [hl]
-	ld [wc2f5], a
+	ld [wTempObjectCopyRange], a
+
 	ld hl, MAPOBJECT_X_COORD
 	add hl, bc
 	ld a, [hl]
-	ld [wc2f6], a
+	ld [wTempObjectCopyX], a
+
 	ld hl, MAPOBJECT_Y_COORD
 	add hl, bc
 	ld a, [hl]
-	ld [wc2f7], a
+	ld [wTempObjectCopyY], a
+
 	ld hl, MAPOBJECT_RADIUS
 	add hl, bc
 	ld a, [hl]
-	ld [wc2f8], a
+	ld [wTempObjectCopyRadius], a
 	ret
 ; 8177
 
-Function8177: ; 8177
+InitializeVisibleSprites: ; 8177
 	ld bc, MapObjects + OBJECT_LENGTH
 	ld a, 1
 .loop
@@ -3418,15 +2027,18 @@
 	ld a, [hl]
 	and a
 	jr z, .next
+
 	ld hl, MAPOBJECT_OBJECT_STRUCT_ID
 	add hl, bc
 	ld a, [hl]
 	cp -1
 	jr nz, .next
+
 	ld a, [XCoord]
 	ld d, a
 	ld a, [YCoord]
 	ld e, a
+
 	ld hl, MAPOBJECT_X_COORD
 	add hl, bc
 	ld a, [hl]
@@ -3433,8 +2045,10 @@
 	add 1
 	sub d
 	jr c, .next
+
 	cp MAPOBJECT_SCREEN_WIDTH
 	jr nc, .next
+
 	ld hl, MAPOBJECT_Y_COORD
 	add hl, bc
 	ld a, [hl]
@@ -3441,12 +2055,14 @@
 	add 1
 	sub e
 	jr c, .next
+
 	cp MAPOBJECT_SCREEN_HEIGHT
 	jr nc, .next
+
 	push bc
 	call CopyObjectStruct
 	pop bc
-	jp c, Function81c9
+	jp c, .ret
 
 .next
 	ld hl, OBJECT_LENGTH
@@ -3460,21 +2076,21 @@
 	ret
 ; 81c9
 
-Function81c9: ; 81c9
+.ret: ; 81c9
 	ret
 ; 81ca
 
 Function81ca:: ; 81ca
 	nop
-	ld a, [wd151]
+	ld a, [wPlayerStepDirection]
 	cp $ff
 	ret z
-	ld hl, Table81d6
+	ld hl, .jumptable
 	rst JumpTable
 	ret
 ; 81d6
 
-Table81d6: ; 81d6
+.jumptable: ; 81d6
 	dw Function81e5
 	dw Function81de
 	dw Function8232
@@ -3598,49 +2214,50 @@
 ; 8286
 
 
-Function8286: ; 8286
-	ld a, [wc2f0]
+CopyTempObjectToObjectStruct: ; 8286
+	ld a, [wTempObjectCopyMapObjectIndex]
 	ld hl, OBJECT_MAP_OBJECT_INDEX
 	add hl, de
 	ld [hl], a
 
-	ld a, [wc2f4]
-	call Function1a61
-	ld a, [wc2f3]
+	ld a, [wTempObjectCopyMovement]
+	call CopySpriteMovementData
+
+	ld a, [wTempObjectCopyPalette]
 	ld hl, OBJECT_PALETTE
 	add hl, de
 	or [hl]
 	ld [hl], a
 
-	ld a, [wc2f7]
-	call Function82d5
+	ld a, [wTempObjectCopyY]
+	call .InitYCoord
 
-	ld a, [wc2f6]
-	call Function82f1
+	ld a, [wTempObjectCopyX]
+	call .InitXCoord
 
-	ld a, [wc2f1]
+	ld a, [wTempObjectCopySprite]
 	ld hl, OBJECT_SPRITE
 	add hl, de
 	ld [hl], a
 
-	ld a, [wc2f2]
+	ld a, [wTempObjectCopySpriteVTile]
 	ld hl, OBJECT_SPRITE_TILE
 	add hl, de
 	ld [hl], a
 
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, de
-	ld [hl], $0
+	ld [hl], STEP_TYPE_00
 
 	ld hl, OBJECT_FACING_STEP
 	add hl, de
-	ld [hl], $ff
+	ld [hl], STANDING
 
-	ld a, [wc2f8]
-	call Function830d
+	ld a, [wTempObjectCopyRadius]
+	call .InitRadius
 
-	ld a, [wc2f5]
-	ld hl, OBJECT_32
+	ld a, [wTempObjectCopyRange]
+	ld hl, OBJECT_RANGE
 	add hl, de
 	ld [hl], a
 
@@ -3648,13 +2265,15 @@
 	ret
 ; 82d5
 
-Function82d5: ; 82d5
-	ld hl, OBJECT_21
+.InitYCoord: ; 82d5
+	ld hl, OBJECT_INIT_Y
 	add hl, de
 	ld [hl], a
-	ld hl, OBJECT_MAP_Y
+
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, de
 	ld [hl], a
+
 	ld hl, YCoord
 	sub [hl]
 	and $f
@@ -3667,11 +2286,11 @@
 	ret
 ; 82f1
 
-Function82f1: ; 82f1
-	ld hl, OBJECT_20
+.InitXCoord: ; 82f1
+	ld hl, OBJECT_INIT_X
 	add hl, de
 	ld [hl], a
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, de
 	ld [hl], a
 	ld hl, XCoord
@@ -3686,7 +2305,7 @@
 	ret
 ; 830d
 
-Function830d: ; 830d
+.InitRadius: ; 830d
 	ld h, a
 	inc a
 	and $f
@@ -3695,7 +2314,7 @@
 	add $10
 	and $f0
 	or l
-	ld hl, OBJECT_22
+	ld hl, OBJECT_RADIUS
 	add hl, de
 	ld [hl], a
 	ret
@@ -3745,19 +2364,19 @@
 	call GetObjectStruct
 
 ; get last talked coords, load to bc
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld a, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld c, [hl]
 	ld b, a
 
 ; get player coords, load to de
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, de
 	ld a, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, de
 	ld e, [hl]
 	ld d, a
@@ -3811,15 +2430,15 @@
 	ret c
 
 ; Person 2 is now in bc, person 1 is now in de
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld a, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld c, [hl]
 	ld b, a
 
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, de
 	ld a, [hl]
 	cp b
@@ -3833,7 +2452,7 @@
 	jr .continue
 
 .same_x
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, de
 	ld a, [hl]
 	cp c
@@ -3846,7 +2465,7 @@
 	dec c
 
 .continue
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, de
 	ld [hl], b
 	ld a, b
@@ -3859,7 +2478,7 @@
 	ld hl, OBJECT_SPRITE_X
 	add hl, de
 	ld [hl], a
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, de
 	ld [hl], c
 	ld a, c
@@ -3873,15 +2492,15 @@
 	add hl, de
 	ld [hl], a
 	ld a, [hObjectStructIndexBuffer]
-	ld hl, OBJECT_32
+	ld hl, OBJECT_RANGE
 	add hl, de
 	ld [hl], a
 	ld hl, OBJECT_MOVEMENTTYPE
 	add hl, de
 	ld [hl], SPRITEMOVEDATA_FOLLOWNOTEXACT
-	ld hl, OBJECT_09
+	ld hl, OBJECT_STEP_TYPE
 	add hl, de
-	ld [hl], $0
+	ld [hl], STEP_TYPE_00
 	ret
 ; 8417
 
@@ -3916,10 +2535,10 @@
 ; load the coordinates of object d into bc
 	ld a, d
 	call GetObjectStruct
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld a, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld c, [hl]
 	ld b, a
@@ -3927,10 +2546,10 @@
 ; load the coordinates of object e into de
 	ld a, e
 	call GetObjectStruct
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld d, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld e, [hl]
 	pop bc
@@ -4010,15 +2629,15 @@
 Function849d: ; 849d
 	ld a, [wObjectFollow_Leader]
 	call GetObjectStruct
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld d, [hl]
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld e, [hl]
 	ld a, [wObjectFollow_Follower]
 	call GetObjectStruct
-	ld hl, OBJECT_MAP_X
+	ld hl, OBJECT_NEXT_MAP_X
 	add hl, bc
 	ld a, d
 	cp [hl]
@@ -4034,7 +2653,7 @@
 	ret
 
 .check_y
-	ld hl, OBJECT_MAP_Y
+	ld hl, OBJECT_NEXT_MAP_Y
 	add hl, bc
 	ld a, e
 	cp [hl]
@@ -4502,7 +3121,7 @@
 	ld a, [hl]
 	ld [bc], a
 
-	callba Functionf8b9
+	callba RestoreAllPP
 	ret
 ; c699
 
@@ -4811,7 +3430,7 @@
 	ld e, a
 	callba OWCutAnimation
 	call BufferScreen
-	call Function2914
+	call GetMovementPermissions
 	call UpdateSprites
 	call DelayFrame
 	call LoadStandardFont
@@ -4847,42 +3466,42 @@
 
 CutTreeBlockPointers: ; c862
 ; Which tileset are we in?
-	dbw $01, .one
-	dbw $02, .two
-	dbw $03, .three
-	dbw $19, .twentyfive
-	dbw $1f, .thirtyone
+	dbw TILESET_JOHTO_1, .one
+	dbw TILESET_JOHTO_2, .two
+	dbw TILESET_KANTO, .three
+	dbw TILESET_PARK, .twentyfive
+	dbw TILESET_ILEX_FOREST, .thirtyone
 	db -1
 ; c872
 
 .one: ; Johto OW
 ; Which meta tile are we facing, which should we replace it with, and does it affect encounters?
-	db $03, $02, $01
-	db $5b, $3c, $00
-	db $5f, $3d, $00
-	db $63, $3f, $00
-	db $67, $3e, $00
+	db $03, $02, $01 ; grass
+	db $5b, $3c, $00 ; tree
+	db $5f, $3d, $00 ; tree
+	db $63, $3f, $00 ; tree
+	db $67, $3e, $00 ; tree
 	db -1
 ; c882
 
 .two: ; Goldenrod area
-	db $03, $02, $01
+	db $03, $02, $01 ; grass
 	db -1
 ; c886
 
 .three: ; Kanto OW
-	db $0b, $0a, $01
-	db $32, $6d, $00
-	db $33, $6c, $00
-	db $34, $6f, $00
-	db $35, $4c, $00
-	db $60, $6e, $00
+	db $0b, $0a, $01 ; grass
+	db $32, $6d, $00 ; tree
+	db $33, $6c, $00 ; tree
+	db $34, $6f, $00 ; tree
+	db $35, $4c, $00 ; tree
+	db $60, $6e, $00 ; tree
 	db -1
 ; c899
 
 .twentyfive: ; National Park
-	db $13, $03, $01
-	db $03, $04, $01
+	db $13, $03, $01 ; grass
+	db $03, $04, $01 ; grass
 	db -1
 ; c8a0
 
@@ -4892,7 +3511,7 @@
 ; c8a4
 
 WhirlpoolBlockPointers: ; c8a4
-	dbw $01, .one
+	dbw TILESET_JOHTO_1, .one
 	db -1
 ; c8a8
 
@@ -5278,15 +3897,15 @@
 	farscall Script_AbortBugContest
 	special WarpToSpawnPoint
 	callasm DelayLoadingNewSprites
-	writecode VAR_MOVEMENT, $0
+	writecode VAR_MOVEMENT, PLAYER_NORMAL
 	newloadmap MAPSETUP_FLY
 	callasm Function8cb33
 	special WaitSFX
-	callasm Functioncacb
+	callasm .ReturnFromFly
 	end
 ; 0xcacb
 
-Functioncacb: ; cacb
+.ReturnFromFly: ; cacb
 	callba Function561d
 	call DelayFrame
 	call ReplaceKrisSprite
@@ -5356,7 +3975,7 @@
 CheckContinueWaterfall: ; cb38
 	xor a
 	ld [ScriptVar], a
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	call CheckWaterfallTile
 	ret z
 	callba MobileFn_1060c1
@@ -5543,26 +4162,25 @@
 	closetext
 	loadmovesprites
 	playsound SFX_WARP_TO
-	applymovement PLAYER, MovementData_0xcc59
+	applymovement PLAYER, .DigOut
 	farscall Script_AbortBugContest
 	special WarpToSpawnPoint
-	writecode VAR_MOVEMENT, $0
+	writecode VAR_MOVEMENT, PLAYER_NORMAL
 	newloadmap MAPSETUP_DOOR
 	playsound SFX_WARP_FROM
-	applymovement PLAYER, MovementData_0xcc5d
+	applymovement PLAYER, .DigReturn
 	end
 ; 0xcc59
 
-MovementData_0xcc59: ; 0xcc59
-	step_wait5
-	turn_away_down
+.DigOut: ; 0xcc59
+	step_dig 32
 	hide_person
 	step_end
 ; 0xcc5d
 
-MovementData_0xcc5d: ; 0xcc5d
-	return_dig $58
-	turn_away_down
+.DigReturn: ; 0xcc5d
+	show_person
+	return_dig 32
 	step_end
 ; 0xcc61
 
@@ -5641,22 +4259,22 @@
 	reloadmappart
 	loadmovesprites
 	playsound SFX_WARP_TO
-	applymovement PLAYER, MovementData_0xcce1
+	applymovement PLAYER, .TeleportFrom
 	farscall Script_AbortBugContest
 	special WarpToSpawnPoint
-	writecode VAR_MOVEMENT, $0
+	writecode VAR_MOVEMENT, PLAYER_NORMAL
 	newloadmap MAPSETUP_TELEPORT
 	playsound SFX_WARP_FROM
-	applymovement PLAYER, MovementData_0xcce3
+	applymovement PLAYER, .TeleportTo
 	end
 ; 0xcce1
 
-MovementData_0xcce1: ; cce1
+.TeleportFrom: ; cce1
 	teleport_from
 	step_end
 ; cce3
 
-MovementData_0xcce3: ; cce3
+.TeleportTo: ; cce3
 	teleport_to
 	step_end
 ; cce5
@@ -5925,7 +4543,7 @@
 	ld e, a
 	callba PlayWhirlpoolSound
 	call BufferScreen
-	call Function2914
+	call GetMovementPermissions
 	ret
 ; ce3e
 
@@ -6300,7 +4918,7 @@
 	writetext UnknownText_0xd0a9
 
 Script_NotEvenANibble_FallThrough: ; 0xd02d
-	loademote EMOTE_08
+	loademote EMOTE_SHADOW
 	callasm PutTheRodAway
 	loadmovesprites
 	end
@@ -6309,17 +4927,17 @@
 Script_GotABite: ; 0xd035
 	scall Script_FishCastRod
 	callasm Fishing_CheckFacingUp
-	iffalse .FacingUp
-	applymovement PLAYER, MovementData_0xd062
+	iffalse .NotFacingUp
+	applymovement PLAYER, .Movement_FacingUp
 	jump .FightTheHookedPokemon
 ; 0xd046
 
-.FacingUp: ; 0xd046
-	applymovement PLAYER, MovementData_0xd05c
+.NotFacingUp: ; 0xd046
+	applymovement PLAYER, .Movement_NotFacingUp
 
 .FightTheHookedPokemon: ; 0xd04a
 	pause 40
-	applymovement PLAYER, MovementData_0xd069
+	applymovement PLAYER, .Movement_RestoreRod
 	writetext UnknownText_0xd0a4
 	callasm PutTheRodAway
 	loadmovesprites
@@ -6329,7 +4947,7 @@
 	end
 ; 0xd05c
 
-MovementData_0xd05c: ; d05c
+.Movement_NotFacingUp: ; d05c
 	fish_got_bite
 	fish_got_bite
 	fish_got_bite
@@ -6338,7 +4956,7 @@
 	step_end
 ; d062
 
-MovementData_0xd062: ; d062
+.Movement_FacingUp: ; d062
 	fish_got_bite
 	fish_got_bite
 	fish_got_bite
@@ -6348,7 +4966,7 @@
 	step_end
 ; d069
 
-MovementData_0xd069: ; d069
+.Movement_RestoreRod: ; d069
 	hide_emote
 	fish_cast_rod
 	step_end
@@ -6357,7 +4975,7 @@
 Fishing_CheckFacingUp: ; d06c
 	ld a, [PlayerDirection]
 	and $c
-	cp $4
+	cp OW_UP
 	ld a, $1
 	jr z, .up
 	xor a
@@ -6371,7 +4989,7 @@
 	reloadmappart
 	loadvar hBGMapMode, $0
 	special UpdateTimePals
-	loademote EMOTE_09
+	loademote EMOTE_ROD
 	callasm LoadFishingGFX
 	loademote EMOTE_SHOCK
 	applymovement PLAYER, MovementData_0xd093
@@ -6505,7 +5123,7 @@
 Script_GetOnBike: ; 0xd13e
 	reloadmappart
 	special UpdateTimePals
-	writecode VAR_MOVEMENT, $1
+	writecode VAR_MOVEMENT, PLAYER_BIKE
 	writetext UnknownText_0xd17c
 	closetext
 	loadmovesprites
@@ -6514,7 +5132,7 @@
 ; 0xd14e
 
 Script_GetOnBike_Register: ; 0xd14e
-	writecode VAR_MOVEMENT, $1
+	writecode VAR_MOVEMENT, PLAYER_BIKE
 	loadmovesprites
 	special ReplaceKrisSprite
 	end
@@ -6527,11 +5145,11 @@
 Script_GetOffBike: ; 0xd158
 	reloadmappart
 	special UpdateTimePals
-	writecode VAR_MOVEMENT, $0
+	writecode VAR_MOVEMENT, PLAYER_NORMAL
 	writetext UnknownText_0xd181
 	closetext
 
-UnknownScript_0xd163:
+FinishGettingOffBike:
 	loadmovesprites
 	special ReplaceKrisSprite
 	special PlayMapMusic
@@ -6539,8 +5157,8 @@
 ; 0xd16b
 
 Script_GetOffBike_Register: ; 0xd16b
-	writecode VAR_MOVEMENT, $0
-	jump UnknownScript_0xd163
+	writecode VAR_MOVEMENT, PLAYER_NORMAL
+	jump FinishGettingOffBike
 ; 0xd171
 
 UnknownScript_0xd171: ; 0xd171
@@ -7092,11 +5710,11 @@
 	ld [hl], a
 	ld [wItemQuantityBuffer], a
 	jr nz, .yup
-	ld a, [wd0e2]
+	ld a, [wTMHMPocketScrollPosition]
 	and a
 	jr z, .yup
 	dec a
-	ld [wd0e2], a
+	ld [wTMHMPocketScrollPosition], a
 
 .yup
 	scf
@@ -7266,7 +5884,7 @@
 
 
 Functiond497:: ; d497 (3:5497)
-	ld a, [wd150]
+	ld a, [wPlayerStepFlags]
 	and a
 	ret z
 	bit 7, a
@@ -7286,9 +5904,9 @@
 	jr .asm_d4b8
 .asm_d4b8
 	call Functiond4e5
-	ld a, [wd14e]
+	ld a, [wPlayerStepVectorX]
 	ld d, a
-	ld a, [wd14f]
+	ld a, [wPlayerStepVectorY]
 	ld e, a
 	ld a, [wd14c]
 	sub d
@@ -7299,9 +5917,9 @@
 	ret
 
 Functiond4d2:: ; d4d2 (3:54d2)
-	ld a, [wd14e]
+	ld a, [wPlayerStepVectorX]
 	ld d, a
-	ld a, [wd14f]
+	ld a, [wPlayerStepVectorY]
 	ld e, a
 	ld a, [hSCX]
 	add d
@@ -7323,31 +5941,31 @@
 	ret
 
 Jumptable_d4f2: ; d4f2 (3:54f2)
-	dw Function2914
+	dw GetMovementPermissions
 	dw BufferScreen
-	dw Functiond509
-	dw Functiond510
-	dw Functiond508
-	dw Functiond508
-	dw Functiond508
-	dw Functiond508
-	dw Functiond508
-	dw Functiond508
-	dw Functiond508
+	dw .mobile
+	dw .fail2
+	dw .fail1
+	dw .fail1
+	dw .fail1
+	dw .fail1
+	dw .fail1
+	dw .fail1
+	dw .fail1
 
 
-Functiond508: ; d508 (3:5508)
+.fail1: ; d508 (3:5508)
 	ret
 
-Functiond509: ; d509 (3:5509)
+.mobile: ; d509 (3:5509)
 	callba MobileFn_10602e
 	ret
 
-Functiond510: ; d510 (3:5510)
+.fail2: ; d510 (3:5510)
 	ret
 
 Functiond511: ; d511 (3:5511)
-	ld a, [wd151]
+	ld a, [wPlayerStepDirection]
 	and a
 	jr nz, .asm_d51c
 	ld hl, YCoord
@@ -7373,7 +5991,7 @@
 	ret
 
 Functiond536: ; d536 (3:5536)
-	ld a, [wd151]
+	ld a, [wPlayerStepDirection]
 	and a
 	jr z, .asm_d549
 	cp $1
@@ -7383,46 +6001,50 @@
 	cp $3
 	jr z, .asm_d567
 	ret
+
 .asm_d549
 	call Functiond571
 	call LoadMapPart
-	call Function2748
+	call ScrollMapUp
 	ret
+
 .asm_d553
 	call Functiond5a2
 	call LoadMapPart
-	call Function272a
+	call ScrollMapDown
 	ret
+
 .asm_d55d
 	call Functiond5d5
 	call LoadMapPart
-	call Function2771
+	call ScrollMapLeft
 	ret
+
 .asm_d567
 	call Functiond5fe
 	call LoadMapPart
-	call Function278f
+	call ScrollMapRight
 	ret
 
 Functiond571: ; d571 (3:5571)
-	ld a, [wd152]
+	ld a, [wBGMapAnchor]
 	add $40
-	ld [wd152], a
-	jr nc, .asm_d586
-	ld a, [wd153]
+	ld [wBGMapAnchor], a
+	jr nc, .not_overflowed
+	ld a, [wBGMapAnchor + 1]
 	inc a
 	and $3
-	or $98
-	ld [wd153], a
-.asm_d586
+	or VBGMap0 / $100
+	ld [wBGMapAnchor + 1], a
+.not_overflowed
 	ld hl, wd196
 	inc [hl]
 	ld a, [hl]
-	cp $2
-	jr nz, .asm_d594
+	cp $2 ; was 1
+	jr nz, .skip
 	ld [hl], $0
 	call Functiond595
-.asm_d594
+.skip
 	ret
 
 Functiond595: ; d595 (3:5595)
@@ -7436,24 +6058,24 @@
 	ret
 
 Functiond5a2: ; d5a2 (3:55a2)
-	ld a, [wd152]
+	ld a, [wBGMapAnchor]
 	sub $40
-	ld [wd152], a
-	jr nc, .asm_d5b7
-	ld a, [wd153]
+	ld [wBGMapAnchor], a
+	jr nc, .not_underflowed
+	ld a, [wBGMapAnchor + 1]
 	dec a
 	and $3
-	or $98
-	ld [wd153], a
-.asm_d5b7
+	or VBGMap0 / $100
+	ld [wBGMapAnchor + 1], a
+.not_underflowed
 	ld hl, wd196
 	dec [hl]
 	ld a, [hl]
-	cp $ff
-	jr nz, .asm_d5c5
+	cp $ff ; was 0
+	jr nz, .skip
 	ld [hl], $1
 	call Functiond5c6
-.asm_d5c5
+.skip
 	ret
 
 Functiond5c6: ; d5c6 (3:55c6)
@@ -7469,7 +6091,7 @@
 	ret
 
 Functiond5d5: ; d5d5 (3:55d5)
-	ld a, [wd152]
+	ld a, [wBGMapAnchor]
 	ld e, a
 	and $e0
 	ld d, a
@@ -7477,7 +6099,7 @@
 	sub $2
 	and $1f
 	or d
-	ld [wd152], a
+	ld [wBGMapAnchor], a
 	ld hl, wd197
 	dec [hl]
 	ld a, [hl]
@@ -7498,7 +6120,7 @@
 	ret
 
 Functiond5fe: ; d5fe (3:55fe)
-	ld a, [wd152]
+	ld a, [wBGMapAnchor]
 	ld e, a
 	and $e0
 	ld d, a
@@ -7506,7 +6128,7 @@
 	add $2
 	and $1f
 	or d
-	ld [wd152], a
+	ld [wBGMapAnchor], a
 	ld hl, wd197
 	inc [hl]
 	ld a, [hl]
@@ -8277,7 +6899,7 @@
 	ld bc, PARTYMON_STRUCT_LENGTH
 	call AddNTimes
 	predef GetUnownLetter
-	callab Functionfba18
+	callab UpdateUnownDex
 
 .done
 	scf ; When this function returns, the carry flag indicates success vs failure.
@@ -8316,7 +6938,7 @@
 	ret
 ; da96
 
-Functionda96: ; da96
+AddTempmonToParty: ; da96
 	ld hl, PartyCount
 	ld a, [hl]
 	cp PARTY_LENGTH
@@ -8331,6 +6953,7 @@
 	ld a, [CurPartySpecies]
 	ld [hli], a
 	ld [hl], $ff
+
 	ld hl, PartyMon1Species
 	ld a, [PartyCount]
 	dec a
@@ -8340,6 +6963,7 @@
 	ld d, h
 	ld hl, TempMonSpecies
 	call CopyBytes
+
 	ld hl, PartyMonOT
 	ld a, [PartyCount]
 	dec a
@@ -8351,6 +6975,7 @@
 	call SkipNames
 	ld bc, NAME_LENGTH
 	call CopyBytes
+
 	ld hl, PartyMonNicknames
 	ld a, [PartyCount]
 	dec a
@@ -8366,7 +6991,7 @@
 	ld a, [CurPartySpecies]
 	ld [wNamedObjectIndexBuffer], a
 	cp EGG
-	jr z, .owned
+	jr z, .egg
 	dec a
 	call SetSeenAndCaughtMon
 	ld hl, PartyMon1Happiness
@@ -8375,7 +7000,7 @@
 	ld bc, PARTYMON_STRUCT_LENGTH
 	call AddNTimes
 	ld [hl], BASE_HAPPINESS
-.owned
+.egg
 
 	ld a, [CurPartySpecies]
 	cp UNOWN
@@ -8386,7 +7011,7 @@
 	ld bc, PARTYMON_STRUCT_LENGTH
 	call AddNTimes
 	predef GetUnownLetter
-	callab Functionfba18
+	callab UpdateUnownDex
 	ld a, [wdef4]
 	and a
 	jr nz, .done
@@ -8980,7 +7605,7 @@
 	jr nz, .asm_df20
 	ld hl, sBoxMon1DVs
 	predef GetUnownLetter
-	callab Functionfba18
+	callab UpdateUnownDex
 
 .asm_df20
 	ld hl, sBoxMon1Moves
@@ -9063,6 +7688,10 @@
 	callab GetPreEvolution
 	ld a, [CurPartySpecies]
 	dec a
+
+; TryAddMonToParty sets Seen and Caught flags
+; when it is successful.  This routine will make
+; sure that we aren't newly setting flags.
 	push af
 	call CheckCaughtMon
 	pop af
@@ -9069,33 +7698,41 @@
 	push bc
 	call CheckSeenMon
 	push bc
+
 	call TryAddMonToParty
+
+; If we haven't caught this Pokemon before receiving
+; the Egg, reset the flag that was just set by
+; TryAddMonToParty.
 	pop bc
 	ld a, c
 	and a
-	jr nz, .asm_dfc3
+	jr nz, .skip_caught_flag
 	ld a, [CurPartySpecies]
 	dec a
 	ld c, a
 	ld d, $0
 	ld hl, PokedexCaught
-	ld b, $0
+	ld b, RESET_FLAG
 	predef FlagPredef
 
-.asm_dfc3
+.skip_caught_flag
+; If we haven't seen this Pokemon before receiving
+; the Egg, reset the flag that was just set by
+; TryAddMonToParty.
 	pop bc
 	ld a, c
 	and a
-	jr nz, .asm_dfd9
+	jr nz, .skip_seen_flag
 	ld a, [CurPartySpecies]
 	dec a
 	ld c, a
 	ld d, $0
 	ld hl, PokedexSeen
-	ld b, $0
+	ld b, RESET_FLAG
 	predef FlagPredef
 
-.asm_dfd9
+.skip_seen_flag
 	pop af
 	ld [CurPartySpecies], a
 	ld a, [PartyCount]
@@ -9263,14 +7900,14 @@
 	ld a, [wLinkMode]
 	and a
 	ret nz
-	ld a, BANK(sPartyScratch1)
+	ld a, BANK(sPartyMail)
 	call GetSRAMBank
 	ld hl, PartyCount
 	ld a, [CurPartyMon]
 	cp [hl]
 	jr z, .asm_e131
-	ld hl, sPartyScratch1
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld hl, sPartyMail
+	ld bc, MAIL_STRUCT_LENGTH
 	call AddNTimes
 	push hl
 	add hl, bc
@@ -9280,11 +7917,11 @@
 .asm_e11a
 	push bc
 	push hl
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld bc, MAIL_STRUCT_LENGTH
 	call CopyBytes
 	pop hl
 	push hl
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld bc, MAIL_STRUCT_LENGTH
 	add hl, bc
 	pop de
 	pop bc
@@ -9663,7 +8300,7 @@
 	ld [hli], a
 	ld [hl], 01001 % $100
 	pop bc
-	callba SetPartymonCaughtData
+	callba SetGiftPartyMonCaughtData
 	jr .skip_nickname
 
 .asm_e35e
@@ -9687,7 +8324,7 @@
 	call Random
 	ld [hl], a
 	call CloseSRAM
-	callba SetBoxMonCaughtData
+	callba SetGiftBoxMonCaughtData
 	jr .skip_nickname
 
 .asm_e390
@@ -9698,11 +8335,11 @@
 	ld a, b
 	and a
 	jr z, .asm_e3a0
-	callba Function4db83
+	callba SetBoxMonCaughtData
 	jr .asm_e3a6
 
 .asm_e3a0
-	callba Function4db49
+	callba SetCaughtData
 
 .asm_e3a6
 	callba GiveANickname_YesNo
@@ -9755,35 +8392,35 @@
 	ld de, StringBuffer1
 	call InitName
 	ld a, $4 ; XXX could this be in bank 4 in pokered?
-	ld hl, Function2b4d
+	ld hl, ExitAllMenus
 	rst FarCall
 	ret
 ; e3fd
 
-Functione3fd: ; e3fd
-	call Functione40a
+_BillsPC: ; e3fd
+	call .CheckCanUsePC
 	ret c
-	call Functione41c
-	call Functione443
-	jp Functione43f
+	call .LogIn
+	call .UseBillsPC
+	jp .LogOut
 
-Functione40a: ; e40a (3:640a)
+.CheckCanUsePC: ; e40a (3:640a)
 	ld a, [PartyCount]
 	and a
 	ret nz
-	ld hl, UnknownText_0xe417
+	ld hl, .Text_GottaHavePokemon
 	call MenuTextBoxBackup
 	scf
 	ret
 ; e417 (3:6417)
 
-UnknownText_0xe417: ; 0xe417
+.Text_GottaHavePokemon: ; 0xe417
 	; You gotta have #MON to call!
 	text_jump UnknownText_0x1c1006
 	db "@"
 ; 0xe41c
 
-Functione41c: ; e41c (3:641c)
+.LogIn: ; e41c (3:641c)
 	xor a
 	ld [hBGMapMode], a
 	call LoadStandardMenuDataHeader
@@ -9792,7 +8429,7 @@
 	ld a, [hl]
 	push af
 	set NO_TEXT_SCROLL, [hl]
-	ld hl, UnknownText_0xe43a
+	ld hl, .Text_What
 	call PrintText
 	pop af
 	ld [Options], a
@@ -9800,17 +8437,17 @@
 	ret
 ; e43a (3:643a)
 
-UnknownText_0xe43a: ; 0xe43a
+.Text_What: ; 0xe43a
 	; What?
 	text_jump UnknownText_0x1c1024
 	db "@"
 ; 0xe43f
 
-Functione43f: ; e43f (3:643f)
-	call Function2b3c
+.LogOut: ; e43f (3:643f)
+	call ReturnToCallingMenu
 	ret
 
-Functione443: ; e443 (3:6443)
+.UseBillsPC: ; e443 (3:6443)
 	ld hl, .MenuDataHeader
 	call LoadMenuDataHeader
 	ld a, $1
@@ -9820,7 +8457,7 @@
 	xor a
 	ld [wcf76], a
 	ld [hBGMapMode], a
-	call Function1e5d
+	call DoNthMenu
 	jr c, .cancel
 	ld a, [wMenuCursorBuffer]
 	push af
@@ -9883,14 +8520,14 @@
 
 BillsPC_MovePKMNMenu: ; e4cd
 	call LoadStandardMenuDataHeader
-	callba Function44781
+	callba IsAnyMonHoldingMail
 	jr nc, .no_mail
-	ld hl, UnknownText_0xe4f9
+	ld hl, .Text_MonHoldingMail
 	call PrintText
 	jr .quit
 
 .no_mail
-	callba Function14b34
+	callba StartMovePkmnWOMail_SaveGame
 	jr c, .quit
 	callba _MovePKMNWithoutMail
 	call ReturnToMapFromSubmenu
@@ -9902,7 +8539,7 @@
 	ret
 ; e4f9
 
-UnknownText_0xe4f9: ; 0xe4f9
+.Text_MonHoldingMail: ; 0xe4f9
 	; There is a #MON holding MAIL. Please remove the MAIL.
 	text_jump UnknownText_0x1c102b
 	db "@"
@@ -9921,32 +8558,32 @@
 Functione512: ; unused
 	ld a, [PartyCount]
 	and a
-	jr z, .asm_e51e
+	jr z, .no_pkmn
 	cp 2
-	jr c, .asm_e526
+	jr c, .only_one_pkmn
 	and a
 	ret
 
-.asm_e51e
-	ld hl, UnknownText_0xe52e
+.no_pkmn
+	ld hl, .Text_NoPKMN
 	call MenuTextBoxBackup
 	scf
 	ret
 
-.asm_e526
-	ld hl, UnknownText_0xe533
+.only_one_pkmn
+	ld hl, .Text_ItsYourLastPKMN
 	call MenuTextBoxBackup
 	scf
 	ret
 ; e52e
 
-UnknownText_0xe52e: ; 0xe52e
+.Text_NoPKMN: ; 0xe52e
 	; You don't have a single #MON!
 	text_jump UnknownText_0x1c1062
 	db "@"
 ; 0xe533
 
-UnknownText_0xe533: ; 0xe533
+.Text_ItsYourLastPKMN: ; 0xe533
 	; You can't deposit your last #MON!
 	text_jump UnknownText_0x1c1080
 	db "@"
@@ -10373,507 +9010,11 @@
 SECTION "bank4", ROMX, BANK[$4]
 
 INCLUDE "engine/pack.asm"
-
 INCLUDE "engine/time.asm"
-
 INCLUDE "engine/tmhm.asm"
-
 INCLUDE "engine/namingscreen.asm"
+INCLUDE "engine/compose_mail.asm"
 
-Function11e75: ; 11e75 (4:5e75)
-	ld hl, wc6d0
-	ld [hl], e
-	inc hl
-	ld [hl], d
-	ld a, [hMapAnims]
-	push af
-	xor a
-	ld [hMapAnims], a
-	ld a, [hInMenu]
-	push af
-	ld a, $1
-	ld [hInMenu], a
-	call Function11e9a
-	call DelayFrame
-.asm_11e8e
-	call Function11fc0
-	jr nc, .asm_11e8e
-	pop af
-	ld [hInMenu], a
-	pop af
-	ld [hMapAnims], a
-	ret
-
-Function11e9a: ; 11e9a (4:5e9a)
-	call ClearBGPalettes
-	call DisableLCD
-	call Function11c51
-	ld de, VTiles0 tile $00
-	ld hl, GFX_11ef4
-	ld bc, $80
-	ld a, BANK(GFX_11ef4)
-	call FarCopyBytes
-	xor a
-	ld hl, wc300
-	ld [hli], a
-	ld [hl], a
-	ld de, $1810
-	ld a, $0
-	call Function3b2a
-	ld hl, $2
-	add hl, bc
-	ld [hl], $0
-	call Function11f84
-	ld a, $e3
-	ld [rLCDC], a
-	call Function11f74
-	ld b, $8
-	call GetSGBLayout
-	call WaitBGMap
-	call WaitTop
-	ld a, %11100100
-	call DmgToCgbBGPals
-	ld a, %11100100
-	call Functioncf8
-	call Function11be0
-	ld hl, wc6d0
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	ld hl, $10
-	add hl, de
-	ld [hl], $4e
-	ret
-; 11ef4 (4:5ef4)
-
-GFX_11ef4: ; 11ef4
-INCBIN "gfx/unknown/011ef4.2bpp"
-; 11f74
-
-Function11f74: ; 11f74 (4:5f74)
-	ld a, $21
-	ld [wc6d3], a
-	ret
-; 11f7a (4:5f7a)
-
-String_11f7a: ; dummied out
-	db "メールを かいてね@"
-; 11f84
-
-Function11f84: ; 11f84 (4:5f84)
-	call WaitTop
-	hlcoord 0, 0
-	ld bc, 6 * SCREEN_WIDTH
-	ld a, $60
-	call ByteFill
-	hlcoord 0, 6
-	ld bc, 12 * SCREEN_WIDTH
-	ld a, " "
-	call ByteFill
-	hlcoord 1, 1
-	lb bc, 4, SCREEN_WIDTH - 2
-	call ClearBox
-	ld de, String_121dd
-
-Function11fa9: ; 11fa9 (4:5fa9)
-	hlcoord 1, 7
-	ld b, 6
-.next
-	ld c, SCREEN_WIDTH - 1
-.loop
-	ld a, [de]
-	ld [hli], a
-	inc de
-	dec c
-	jr nz, .loop
-	push de
-	ld de, 21
-	add hl, de
-	pop de
-	dec b
-	jr nz, .next
-	ret
-
-Function11fc0: ; 11fc0 (4:5fc0)
-	call JoyTextDelay
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .asm_11fdb
-	call Function12008
-	callba Function8cf62
-	call Function11feb
-	call DelayFrame
-	and a
-	ret
-.asm_11fdb
-	callab Function8cf53
-	call ClearSprites
-	xor a
-	ld [hSCX], a
-	ld [hSCY], a
-	scf
-	ret
-
-Function11feb: ; 11feb (4:5feb)
-	xor a
-	ld [hBGMapMode], a
-	hlcoord 1, 1
-	lb bc, 4, 18
-	call ClearBox
-	ld hl, wc6d0
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	hlcoord 2, 2
-	call PlaceString
-	ld a, $1
-	ld [hBGMapMode], a
-	ret
-
-Function12008: ; 12008 (4:6008)
-	ld a, [wJumptableIndex]
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_12017
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-
-Jumptable_12017: ; 12017 (4:6017)
-	dw Function1201b
-	dw Function1203a
-
-
-Function1201b: ; 1201b (4:601b)
-	lb de, $48, $10
-	ld a, $9
-	call Function3b2a
-	ld a, c
-	ld [wc6d5], a
-	ld a, b
-	ld [wc6d6], a
-	ld hl, $1
-	add hl, bc
-	ld a, [hl]
-	ld hl, $e
-	add hl, bc
-	ld [hl], a
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-
-Function1203a: ; 1203a (4:603a)
-	ld hl, hJoyPressed ; $ffa7
-	ld a, [hl]
-	and A_BUTTON
-	jr nz, .a
-	ld a, [hl]
-	and B_BUTTON
-	jr nz, .b
-	ld a, [hl]
-	and START
-	jr nz, .start
-	ld a, [hl]
-	and SELECT
-	jr nz, .select
-	ret
-
-.a
-	call Function12185
-	cp $1
-	jr z, .select
-	cp $2
-	jr z, .b
-	cp $3
-	jr z, .asm_120a1
-	call Function11c11
-	call Function121ac
-	jr c, .start
-	ld hl, wc6d2
-	ld a, [hl]
-	cp $10
-	ret nz
-	inc [hl]
-	call Function11bd0
-	ld [hl], $f2
-	dec hl
-	ld [hl], $4e
-	ret
-
-.start
-	ld hl, wc6d5
-	ld c, [hl]
-	inc hl
-	ld b, [hl]
-	ld hl, $c
-	add hl, bc
-	ld [hl], $9
-	ld hl, $d
-	add hl, bc
-	ld [hl], $5
-	ret
-
-.b
-	call Function11bbc
-	ld hl, wc6d2
-	ld a, [hl]
-	cp $10
-	ret nz
-	dec [hl]
-	call Function11bd0
-	ld [hl], $f2
-	inc hl
-	ld [hl], $4e
-	ret
-
-.asm_120a1
-	call Function11bf7
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-.select
-	ld hl, wcf64
-	ld a, [hl]
-	xor $1
-	ld [hl], a
-	jr nz, .asm_120ba
-	ld de, String_121dd
-	call Function11fa9
-	ret
-.asm_120ba
-	ld de, String_1224f
-	call Function11fa9
-	ret
-
-Function120c1: ; 120c1 (4:60c1)
-	call Function1210c
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	ld e, a
-	swap e
-	ld hl, $7
-	add hl, bc
-	ld [hl], e
-	cp $5
-	ld de, Unknown_120f8
-	ld a, $0
-	jr nz, .asm_120df
-	ld de, Unknown_12102
-	ld a, $1
-.asm_120df
-	ld hl, $e
-	add hl, bc
-	add [hl]
-	ld hl, $1
-	add hl, bc
-	ld [hl], a
-	ld hl, $c
-	add hl, bc
-	ld l, [hl]
-	ld h, $0
-	add hl, de
-	ld a, [hl]
-	ld hl, $6
-	add hl, bc
-	ld [hl], a
-	ret
-; 120f8 (4:60f8)
-
-Unknown_120f8: ; 120f8
-	db $00, $10, $20, $30, $40, $50, $60, $70, $80, $90
-Unknown_12102: ; 12102
-	db $00, $00, $00, $30, $30, $30, $60, $60, $60, $60
-; 1210c
-
-Function1210c: ; 1210c (4:610c)
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, .up
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .down
-	ld a, [hl]
-	and D_LEFT
-	jr nz, .left
-	ld a, [hl]
-	and D_RIGHT
-	jr nz, .right
-	ret
-.right
-	call Function1218b
-	and a
-	jr nz, .asm_12138
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	cp $9
-	jr nc, .asm_12135
-	inc [hl]
-	ret
-.asm_12135
-	ld [hl], $0
-	ret
-.asm_12138
-	cp $3
-	jr nz, .asm_1213d
-	xor a
-.asm_1213d
-	ld e, a
-	add a
-	add e
-	ld hl, $c
-	add hl, bc
-	ld [hl], a
-	ret
-.left
-	call Function1218b
-	and a
-	jr nz, .asm_12159
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	and a
-	jr z, .asm_12156
-	dec [hl]
-	ret
-.asm_12156
-	ld [hl], $9
-	ret
-.asm_12159
-	cp $1
-	jr nz, .asm_1215f
-	ld a, $4
-.asm_1215f
-rept 2
-	dec a
-endr
-	ld e, a
-	add a
-	add e
-	ld hl, $c
-	add hl, bc
-	ld [hl], a
-	ret
-.down
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	cp $5
-	jr nc, .asm_12175
-	inc [hl]
-	ret
-.asm_12175
-	ld [hl], $0
-	ret
-.up
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	and a
-	jr z, .asm_12182
-	dec [hl]
-	ret
-.asm_12182
-	ld [hl], $5
-	ret
-
-Function12185: ; 12185 (4:6185)
-	ld hl, wc6d5
-	ld c, [hl]
-	inc hl
-	ld b, [hl]
-
-Function1218b: ; 1218b (4:618b)
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	cp $5
-	jr nz, .asm_121aa
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	cp $3
-	jr c, .asm_121a4
-	cp $6
-	jr c, .asm_121a7
-	ld a, $3
-	ret
-.asm_121a4
-	ld a, $1
-	ret
-.asm_121a7
-	ld a, $2
-	ret
-.asm_121aa
-	xor a
-	ret
-
-Function121ac: ; 121ac (4:61ac)
-	ld a, [wc6d7]
-	jp Function11b17
-; 121b2 (4:61b2)
-
-Function121b2: ; unreferenced
-	ld a, [wc6d2]
-	and a
-	ret z
-	cp $11
-	jr nz, .asm_121c3
-	push hl
-	ld hl, wc6d2
-rept 2
-	dec [hl]
-endr
-	jr .asm_121c8
-
-.asm_121c3
-	push hl
-	ld hl, wc6d2
-	dec [hl]
-
-.asm_121c8
-	call Function11bd0
-	ld c, [hl]
-	pop hl
-.asm_121cd
-	ld a, [hli]
-	cp $ff
-	jp z, Function11b27
-	cp c
-	jr z, .asm_121d9
-	inc hl
-	jr .asm_121cd
-
-.asm_121d9
-	ld a, [hl]
-	jp Function11b23
-; 121dd
-
-String_121dd: ; 122dd
-	db "A B C D E F G H I J"
-	db "K L M N O P Q R S T"
-	db "U V W X Y Z   , ? !"
-	db "1 2 3 4 5 6 7 8 9 0"
-	db "<PK> <MN> <PO> <KE> é ♂ ♀ ¥ … ×"
-	db "lower  DEL   END   "
-; 1224f
-
-String_1224f: ; 1224f
-	db "a b c d e f g h i j"
-	db "k l m n o p q r s t"
-	db "u v w x y z   . - /"
-	db "'d 'l 'm 'r 's 't 'v & ( )"
-	db "<``> <''> [ ] ' : ;      "
-	db "UPPER  DEL   END   "
-; 122c1
-
 Script_AbortBugContest: ; 0x122c1
 	checkflag ENGINE_BUG_CONTEST_TIMER
 	iffalse .finish
@@ -11185,7 +9326,7 @@
 ; 14056
 
 
-Function14056: ; 14056
+StageRTCTimeForSave: ; 14056
 	call UpdateTime
 	ld hl, wRTC
 	ld a, [CurDay]
@@ -11199,7 +9340,7 @@
 	ret
 ; 1406a
 
-Function1406a: ; 1406a
+SaveRTC: ; 1406a
 	ld a, $a
 	ld [MBC3SRamEnable], a
 	call LatchClock
@@ -11207,10 +9348,10 @@
 	ld a, $c
 	ld [MBC3SRamBank], a
 	res 7, [hl]
-	ld a, BANK(s0_ac60)
+	ld a, BANK(sRTCStatusFlags)
 	ld [MBC3SRamBank], a
 	xor a
-	ld [s0_ac60], a
+	ld [sRTCStatusFlags], a
 	call CloseSRAM
 	ret
 ; 14089
@@ -11224,7 +9365,7 @@
 	jr nc, .skip_set
 	; bit 5: Day count exceeds 139
 	; bit 6: Day count exceeds 255
-	call Function6d3 ; set flag on s0_ac60
+	call RecordRTCStatus ; set flag on sRTCStatusFlags
 
 .skip_set
 	call StartRTC
@@ -11243,12 +9384,12 @@
 .set_bit_7
 	; Day count exceeds 16383
 	ld a, %10000000
-	call Function6d3 ; set bit 7 on s0_ac60
+	call RecordRTCStatus ; set bit 7 on sRTCStatusFlags
 	ret
 ; 140ae
 
 Function140ae: ; 140ae
-	call Function6e3
+	call CheckRTCStatus
 	ld c, a
 	and %11000000 ; Day count exceeded 255 or 16383
 	jr nz, .time_overflow
@@ -11295,9 +9436,9 @@
 	ld a, [StringBuffer2 + 3]
 	sub [hl]
 	dec hl
-	jr nc, .asm_14102
+	jr nc, .okay_secs
 	add 60
-.asm_14102
+.okay_secs
 	ld [de], a
 	dec de
 
@@ -11304,9 +9445,9 @@
 	ld a, [StringBuffer2 + 2]
 	sbc [hl]
 	dec hl
-	jr nc, .asm_1410d
+	jr nc, .okay_mins
 	add 60
-.asm_1410d
+.okay_mins
 	ld [de], a
 	dec de
 
@@ -11313,9 +9454,9 @@
 	ld a, [StringBuffer2 + 1]
 	sbc [hl]
 	dec hl
-	jr nc, .asm_14118
+	jr nc, .okay_hrs
 	add 24
-.asm_14118
+.okay_hrs
 	ld [de], a
 	dec de
 
@@ -11322,49 +9463,49 @@
 	ld a, [StringBuffer2]
 	sbc [hl]
 	dec hl
-	jr nc, .asm_14128
+	jr nc, .okay_days
 	add 140
 	ld c, 7
 	call SimpleDivide
 
-.asm_14128
+.okay_days
 	ld [de], a
 	ret
 ; 1412a
 
-INCLUDE "engine/sprites.asm"
+INCLUDE "engine/overworld.asm"
 
 Function1499a:: ; 1499a
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	cp $60
-	jr z, .asm_149ad
+	jr z, .warp
 	cp $68
-	jr z, .asm_149ad
+	jr z, .warp
 	and $f0
 	cp $70
-	jr z, .asm_149ad
+	jr z, .warp
 	and a
 	ret
 
-.asm_149ad
+.warp
 	scf
 	ret
 ; 149af
 
 Function149af:: ; 149af
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	cp $70
-	jr z, .asm_149c4
+	jr z, .not_warp
 	cp $76
-	jr z, .asm_149c4
+	jr z, .not_warp
 	cp $78
-	jr z, .asm_149c4
+	jr z, .not_warp
 	cp $7e
-	jr z, .asm_149c4
+	jr z, .not_warp
 	scf
 	ret
 
-.asm_149c4
+.not_warp
 	xor a
 	ret
 ; 149c6
@@ -11372,7 +9513,7 @@
 CheckWarpCollision: ; 149c6
 	ld de, 1
 	ld hl, .blocks
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	call IsInArray
 	ret
 ; 149d3
@@ -11391,7 +9532,7 @@
 ; 149dd
 
 CheckGrassCollision:: ; 149dd
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	ld hl, .blocks
 	ld de, 1
 	call IsInArray
@@ -11431,7 +9572,7 @@
 ; 14a07
 
 Function14a07:: ; 14a07
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	ld de, $1f
 	cp $71 ; door
 	ret z
@@ -11448,1999 +9589,20 @@
 
 INCLUDE "engine/map_setup.asm"
 
-PokemonCenterPC: ; 1559a
-	call PC_CheckPartyForPokemon
-	ret c
-	call PC_PlayBootSound
-	ld hl, UnknownText_0x15a27
-	call PC_DisplayText
-	ld hl, UnknownText_0x15a2c
-	call PC_DisplayTextWaitMenu
-	ld hl, .TopMenu
-	call LoadMenuDataHeader
-.loop
-	xor a
-	ld [hBGMapMode], a
-	call Function1563e
-	ld [wcf76], a
-	call Function1e5d
-	jr c, .shutdown
-	ld a, [MenuSelection]
-	ld hl, .JumpTable
-	call Function1fa7
-	jr nc, .loop
+INCLUDE "engine/pokecenter_pc.asm"
 
-.shutdown
-	call Function156b8
-	call ExitMenu
-	call WriteBackup
-	ret
-; 155d6
-
-.TopMenu: ; 0x155d6
-	db $48 ; flags
-	db 00, 00 ; start coords
-	db 12, 15 ; end coords
-	dw .MenuData2
-	db 1 ; default option
-; 0x155de
-
-.MenuData2: ; 0x155de
-	db $a0 ; flags
-	db 0 ; items
-	dw .WhichPC
-	dw Function1f8d
-	dw .JumpTable
-; 0x155e6
-
-.JumpTable: ; 155e6
-	dw Function15679, .String_PlayersPC
-	dw Function15668, .String_BillsPC
-	dw Function15689, .String_OaksPC
-	dw Function1569a, .String_HallOfFame
-	dw Function156ab, .String_TurnOff
-; 155fa
-
-.String_PlayersPC:	db "<PLAYER>'s PC@"
-.String_BillsPC:	db "BILL's PC@"
-.String_OaksPC:	    db "PROF.OAK's PC@"
-.String_HallOfFame:	db "HALL OF FAME@"
-.String_TurnOff:	db "TURN OFF@"
-; 1562c
-
-.WhichPC: ; 1562c
-	; before pokedex
-	db  3 ; items
-	db  1, 0, 4 ; bill's, player's, turn off
-	db -1
-
-	; before Hall Of Fame
-	db  4 ; items
-	db  1, 0, 2, 4 ; bill's, player's, oak's, turn off
-	db -1
-
-	; postgame
-	db  5 ; items
-	db  1, 0, 2, 3, 4 ; bill's, player's, oak's, hall of fame, turn off
-	db -1
-; 1563e
-
-Function1563e: ; 1563e
-	call CheckReceivedDex
-	jr nz, .asm_15646
-	ld a, $0
-	ret
-
-.asm_15646
-	ld a, [wd95e]
-	and a
-	ld a, $1
-	ret z
-	ld a, $2
-	ret
-; 15650
-
-PC_CheckPartyForPokemon: ; 15650
-	ld a, [PartyCount]
-	and a
-	ret nz
-	ld de, SFX_CHOOSE_PC_OPTION
-	call PlaySFX
-	ld hl, UnknownText_0x15663
-	call PC_DisplayText
-	scf
-	ret
-; 15663
-
-UnknownText_0x15663: ; 0x15663
-	; Bzzzzt! You must have a #MON to use this!
-	text_jump UnknownText_0x1c1328
-	db "@"
-; 0x15668
-
-Function15668: ; 15668
-	call Function156c2
-	ld hl, UnknownText_0x15a31
-	call PC_DisplayText
-	callba Functione3fd
-	and a
-	ret
-; 15679 (5:5679)
-
-Function15679: ; 15679
-	call Function156c2
-	ld hl, UnknownText_0x15a36
-	call PC_DisplayText
-	ld b, $0
-	call Function15704
-	and a
-	ret
-; 15689
-
-Function15689: ; 15689
-	call Function156c2
-	ld hl, UnknownText_0x15a3b
-	call PC_DisplayText
-	callba ProfOaksPC
-	and a
-	ret
-; 1569a
-
-Function1569a: ; 1569a
-	call Function156c2
-	call FadeToMenu
-	callba Function86650
-	call Function2b3c
-	and a
-	ret
-; 156ab
-
-Function156ab: ; 156ab
-	ld hl, UnknownText_0x15a40
-	call PrintText
-	scf
-	ret
-; 156b3
-
-PC_PlayBootSound: ; 156b3
-	ld de, SFX_BOOT_PC
-	jr Function156d0
-
-Function156b8: ; 156b8
-	ld de, SFX_SHUT_DOWN_PC
-	call Function156d0
-	call WaitSFX
-	ret
-
-Function156c2: ; 156c2
-	ld de, SFX_CHOOSE_PC_OPTION
-	jr Function156d0
-
-Function156c7: ; 156c7
-	ld de, SFX_SWITCH_POKEMON
-	call Function156d0
-	ld de, SFX_SWITCH_POKEMON
-
-Function156d0: ; 156d0
-	push de
-	call WaitSFX
-	pop de
-	call PlaySFX
-	ret
-; 156d9
-
-Function156d9: ; 156d9
-	call PC_PlayBootSound
-	ld hl, UnknownText_0x156ff
-	call PC_DisplayText
-	ld b, $1
-	call Function15704
-	and a
-	jr nz, .asm_156f9
-	call OverworldTextModeSwitch
-	call Function321c
-	call UpdateSprites
-	call Function156b8
-	ld c, $0
-	ret
-
-.asm_156f9
-	call ClearBGPalettes
-	ld c, $1
-	ret
-; 156ff
-
-UnknownText_0x156ff: ; 0x156ff
-	; turned on the PC.
-	text_jump UnknownText_0x1c1353
-	db "@"
-; 0x15704
-
-Function15704: ; 15704
-	ld a, b
-	ld [wcf76], a
-	ld hl, UnknownText_0x157cc
-	call PC_DisplayTextWaitMenu
-	call Function15715
-	call ExitMenu
-	ret
-; 15715
-
-Function15715: ; 15715
-	xor a
-	ld [wd0d7], a
-	ld [wd0dd], a
-	ld hl, KrissPCMenuData
-	call LoadMenuDataHeader
-.asm_15722
-	call UpdateTimePals
-	call Function1e5d
-	jr c, .asm_15731
-	call Function1fa7
-	jr nc, .asm_15722
-	jr .asm_15732
-
-.asm_15731
-	xor a
-
-.asm_15732
-	call ExitMenu
-	ret
-; 15736
-
-KrissPCMenuData: ; 0x15736
-	db %01000000
-	db  0,  0 ; top left corner coords (y, x)
-	db 12, 15 ; bottom right corner coords (y, x)
-	dw .KrissPCMenuData2
-	db 1 ; default selected option
-
-.KrissPCMenuData2
-	db %10100000 ; bit7
-	db 0 ; # items?
-	dw .KrissPCMenuList1
-	dw Function1f8d
-	dw .KrissPCMenuPointers
-
-.KrissPCMenuPointers ; 0x15746
-	dw KrisWithdrawItemMenu, .WithdrawItem
-	dw KrisDepositItemMenu,  .DepositItem
-	dw KrisTossItemMenu,     .TossItem
-	dw KrisMailBoxMenu,      .MailBox
-	dw KrisDecorationMenu,   .Decoration
-	dw KrisLogOffMenu,       .LogOff
-	dw KrisLogOffMenu,       .TurnOff
-
-.WithdrawItem db "WITHDRAW ITEM@"
-.DepositItem  db "DEPOSIT ITEM@"
-.TossItem     db "TOSS ITEM@"
-.MailBox      db "MAIL BOX@"
-.Decoration   db "DECORATION@"
-.TurnOff      db "TURN OFF@"
-.LogOff       db "LOG OFF@"
-
-WITHDRAW_ITEM EQU 0
-DEPOSIT_ITEM  EQU 1
-TOSS_ITEM     EQU 2
-MAIL_BOX      EQU 3
-DECORATION    EQU 4
-TURN_OFF      EQU 5
-LOG_OFF       EQU 6
-
-.KrissPCMenuList1
-	db 5
-	db WITHDRAW_ITEM
-	db DEPOSIT_ITEM
-	db TOSS_ITEM
-	db MAIL_BOX
-	db TURN_OFF
-	db -1
-
-.KrissPCMenuList2
-	db 6
-	db WITHDRAW_ITEM
-	db DEPOSIT_ITEM
-	db TOSS_ITEM
-	db MAIL_BOX
-	db DECORATION
-	db LOG_OFF
-	db -1
-
-PC_DisplayTextWaitMenu: ; 157bb
-	ld a, [Options]
-	push af
-	set NO_TEXT_SCROLL, a
-	ld [Options], a
-	call MenuTextBox
-	pop af
-	ld [Options], a
-	ret
-; 157cc
-
-UnknownText_0x157cc: ; 0x157cc
-	; What do you want to do?
-	text_jump UnknownText_0x1c1368
-	db "@"
-; 0x157d1
-
-KrisWithdrawItemMenu: ; 0x157d1
-	call LoadStandardMenuDataHeader
-	callba ClearPCItemScreen
-.asm_157da
-	call Function15985
-	jr c, .asm_157e4
-	call Function157e9
-	jr .asm_157da
-
-.asm_157e4
-	call Function2b3c
-	xor a
-	ret
-; 0x157e9
-
-Function157e9: ; 0x157e9
-	; check if the item has a quantity
-	callba _CheckTossableItem
-	ld a, [wItemAttributeParamBuffer]
-	and a
-	jr z, .askquantity
-
-	; items without quantity are always ×1
-	ld a, 1
-	ld [wItemQuantityChangeBuffer], a
-	jr .withdraw
-
-.askquantity
-	ld hl, .HowManyText
-	call MenuTextBox
-	callba Function24fbf
-	call ExitMenu
-	call ExitMenu
-	jr c, .done
-
-.withdraw
-	ld a, [wItemQuantityChangeBuffer]
-	ld [Buffer1], a ; quantity
-	ld a, [wd107]
-	ld [Buffer2], a
-	ld hl, NumItems
-	call ReceiveItem
-	jr nc, .PackFull
-	ld a, [Buffer1]
-	ld [wItemQuantityChangeBuffer], a
-	ld a, [Buffer2]
-	ld [wd107], a
-	ld hl, PCItems
-	call TossItem
-	predef PartyMonItemName
-	ld hl, .WithdrewText
-	call MenuTextBox
-	xor a
-	ld [hBGMapMode], a
-	call ExitMenu
-	ret
-
-.PackFull
-	ld hl, .NoRoomText
-	call MenuTextBoxBackup
-	ret
-
-.done
-	ret
-; 0x15850
-
-.HowManyText ; 0x15850
-	text_jump _KrissPCHowManyWithdrawText
-	db "@"
-
-.WithdrewText ; 0x15855
-	text_jump _KrissPCWithdrewItemsText
-	db "@"
-
-.NoRoomText ; 0x1585a
-	text_jump _KrissPCNoRoomWithdrawText
-	db "@"
-
-
-KrisTossItemMenu: ; 0x1585f
-	call LoadStandardMenuDataHeader
-	callba ClearPCItemScreen
-.asm_15868
-	call Function15985
-	jr c, .asm_15878
-	ld de, PCItems
-	callba Function129f4
-	jr .asm_15868
-
-.asm_15878
-	call Function2b3c
-	xor a
-	ret
-; 0x1587d
-
-
-KrisDecorationMenu: ; 0x1587d
-	callba _KrisDecorationMenu
-	ld a, c
-	and a
-	ret z
-	scf
-	ret
-; 0x15888
-
-
-KrisLogOffMenu: ; 0x15888
-	xor a
-	scf
-	ret
-; 0x1588b
-
-
-KrisDepositItemMenu: ; 0x1588b
-	call Function158b8
-	jr c, .asm_158b6
-	call DisableSpriteUpdates
-	call LoadStandardMenuDataHeader
-	callba Function106a5
-.asm_1589c
-	callba Function106be
-	ld a, [wcf66]
-	and a
-	jr z, .asm_158b3
-	call Function158cc
-	callba CheckRegisteredItem
-	jr .asm_1589c
-
-.asm_158b3
-	call Function2b3c
-
-.asm_158b6
-	xor a
-	ret
-; 0x158b8
-
-Function158b8: ; 0x158b8
-	callba Function129d5
-	ret nc
-	ld hl, UnknownText_0x158c7
-	call MenuTextBoxBackup
-	scf
-	ret
-; 0x158c7
-
-UnknownText_0x158c7: ; 0x158c7
-	; No items here!
-	text_jump UnknownText_0x1c13df
-	db "@"
-; 0x158cc
-
-
-Function158cc: ; 0x158cc
-	ld a, [wc2ce]
-	push af
-	ld a, $0
-	ld [wc2ce], a
-	callba CheckItemMenu
-	ld a, [wItemAttributeParamBuffer]
-	ld hl, .jumptable
-	rst JumpTable
-	pop af
-	ld [wc2ce], a
-	ret
-; 0x158e7
-
-.jumptable: ; 0x158e7
-	dw .maybe_use
-	dw .no_use
-	dw .no_use
-	dw .no_use
-	dw .maybe_use
-	dw .maybe_use
-	dw .maybe_use
-
-.no_use:
-	ret
-
-.maybe_use:
-	ld a, [Buffer1]
-	push af
-	ld a, [Buffer2]
-	push af
-	call Function1590a
-	pop af
-	ld [Buffer2], a
-	pop af
-	ld [Buffer1], a
-	ret
-; 0x1590a
-
-Function1590a: ; 0x1590a
-	callba _CheckTossableItem
-	ld a, [wItemAttributeParamBuffer]
-	and a
-	jr z, .asm_1591d
-	ld a, $1
-	ld [wItemQuantityChangeBuffer], a
-	jr .asm_15933
-
-.asm_1591d
-	ld hl, .HowManyText
-	call MenuTextBox
-	callba Function24fbf
-	push af
-	call ExitMenu
-	call ExitMenu
-	pop af
-	jr c, .asm_1596c
-
-.asm_15933
-	ld a, [wItemQuantityChangeBuffer]
-	ld [Buffer1], a
-	ld a, [wd107]
-	ld [Buffer2], a
-	ld hl, PCItems
-	call ReceiveItem
-	jr nc, .asm_15965
-	ld a, [Buffer1]
-	ld [wItemQuantityChangeBuffer], a
-	ld a, [Buffer2]
-	ld [wd107], a
-	ld hl, NumItems
-	call TossItem
-	predef PartyMonItemName
-	ld hl, .DepositText
-	call PrintText
-	ret
-
-.asm_15965
-	ld hl, .NoRoomText
-	call PrintText
-	ret
-
-.asm_1596c
-	and a
-	ret
-; 0x1596e
-
-
-.HowManyText ; 0x1596e
-	text_jump _KrissPCHowManyDepositText
-	db "@"
-
-.DepositText ; 0x15973
-	text_jump _KrissPCDepositItemsText
-	db "@"
-
-.NoRoomText ; 0x15978
-	text_jump _KrissPCNoRoomDepositText
-	db "@"
-
-
-KrisMailBoxMenu: ; 0x1597d
-	callba _KrisMailBoxMenu
-	xor a
-	ret
-; 0x15985
-
-
-Function15985: ; 0x15985
-	xor a
-	ld [wd0e3], a
-.asm_15989
-	ld a, [wc2ce]
-	push af
-	ld a, $0
-	ld [wc2ce], a
-	ld hl, MenuData15a08
-	call CopyMenuDataHeader
-	hlcoord 0, 0
-	ld b, $a
-	ld c, $12
-	call TextBox
-	ld a, [wd0d7]
-	ld [wMenuCursorBuffer], a
-	ld a, [wd0dd]
-	ld [wd0e4], a
-	call HandleScrollingMenu
-	ld a, [wd0e4]
-	ld [wd0dd], a
-	ld a, [MenuSelection2]
-	ld [wd0d7], a
-	pop af
-	ld [wc2ce], a
-	ld a, [wd0e3]
-	and a
-	jr nz, .asm_159d8
-	ld a, [wcf73]
-	cp $2
-	jr z, .asm_15a06
-	cp $1
-	jr z, .asm_159fb
-	cp $4
-	jr z, .asm_159f2
-	jr .asm_159f8
-
-.asm_159d8
-	ld a, [wcf73]
-	cp $2
-	jr z, .asm_159e9
-	cp $1
-	jr z, .asm_159ef
-	cp $4
-	jr z, .asm_159ef
-	jr .asm_159f8
-
-.asm_159e9
-	xor a
-	ld [wd0e3], a
-	jr .asm_159f8
-
-.asm_159ef
-	call Function156c7
-
-.asm_159f2
-	callba Function2490c
-
-.asm_159f8
-	jp .asm_15989
-
-.asm_159fb
-	callba Function24706
-	call Function1bee
-	and a
-	ret
-
-.asm_15a06
-	scf
-	ret
-; 0x15a08
-
-MenuData15a08: ; 0x15a08
-	db %01000000
-	db  1,  4 ; start coords
-	db 10, 18 ; end coords
-	dw .MenuData2
-	db 1 ; default option
-
-.MenuData2
-	db %10110000
-	db 4, 8 ; rows/cols?
-	db 2 ; horizontal spacing?
-	dbw 0, PCItems
-	dba PlaceMenuItemName
-	dba PlaceMenuItemQuantity
-	dba Function244c3
-
-PC_DisplayText: ; 15a20
-	call MenuTextBox
-	call ExitMenu
-	ret
-; 15a27
-
-
-UnknownText_0x15a27: ; 0x15a27
-	; turned on the PC.
-	text_jump UnknownText_0x1c144d
-	db "@"
-; 0x15a2c
-
-UnknownText_0x15a2c: ; 0x15a2c
-	; Access whose PC?
-	text_jump UnknownText_0x1c1462
-	db "@"
-; 0x15a31
-
-UnknownText_0x15a31: ; 0x15a31
-	; BILL's PC accessed. #MON Storage System opened.
-	text_jump UnknownText_0x1c1474
-	db "@"
-; 0x15a36
-
-UnknownText_0x15a36: ; 0x15a36
-	; Accessed own PC. Item Storage System opened.
-	text_jump UnknownText_0x1c14a4
-	db "@"
-; 0x15a3b
-
-UnknownText_0x15a3b: ; 0x15a3b
-	; PROF.OAK's PC accessed. #DEX Rating System opened.
-	text_jump UnknownText_0x1c14d2
-	db "@"
-; 0x15a40
-
-UnknownText_0x15a40: ; 0x15a40
-	; … Link closed…
-	text_jump UnknownText_0x1c1505
-	db "@"
-; 0x15a45
-
-
 INCLUDE "engine/mart.asm"
 
-GiveMoney:: ; 15fd7
-	ld a, $3
-	call AddMoney
-	ld bc, MaxMoney
-	ld a, $3
-	call CompareMoney
-	jr z, .asm_15ff5
-	jr c, .asm_15ff5
-	ld hl, MaxMoney
-	ld a, [hli]
-	ld [de], a
-	inc de
-	ld a, [hli]
-	ld [de], a
-	inc de
-	ld a, [hli]
-	ld [de], a
-	scf
-	ret
+INCLUDE "engine/money.asm"
 
-.asm_15ff5
-	and a
-	ret
-; 15ff7
-
-MaxMoney: ; 15ff7
-	dt 999999
-; 15ffa
-
-
-TakeMoney:: ; 15ffa
-	ld a, 3
-	call SubtractMoney
-	jr nc, .asm_16009
-	xor a
-	ld [de], a
-	inc de
-	ld [de], a
-	inc de
-	ld [de], a
-	scf
-	ret
-
-.asm_16009
-	and a
-	ret
-; 1600b
-
-CompareMoney:: ; 1600b
-	ld a, $3
-CompareFunds: ; 1600d
-	push hl
-	push de
-	push bc
-	ld h, b
-	ld l, c
-	ld c, $0
-	ld b, a
-.loop1
-	dec a
-	jr z, .done
-	inc de
-	inc hl
-	jr .loop1
-
-.done
-	and a
-.loop2
-	ld a, [de]
-	sbc [hl]
-	jr z, .okay
-	inc c
-
-.okay
-	dec de
-	dec hl
-	dec b
-	jr nz, .loop2
-	jr c, .set_carry
-	ld a, c
-	and a
-	jr .skip_carry
-
-.set_carry
-	ld a, $1
-	and a
-	scf
-
-.skip_carry
-	pop bc
-	pop de
-	pop hl
-	ret
-; 16035
-
-SubtractMoney: ; 16035
-	ld a, 3
-SubtractFunds: ; 16037
-	push hl
-	push de
-	push bc
-	ld h, b
-	ld l, c
-	ld b, a
-	ld c, 0
-.loop
-	dec a
-	jr z, .done
-	inc de
-	inc hl
-	jr .loop
-
-.done
-	and a
-.loop2
-	ld a, [de]
-	sbc [hl]
-	ld [de], a
-	dec de
-	dec hl
-	dec b
-	jr nz, .loop2
-	pop bc
-	pop de
-	pop hl
-	ret
-; 16053
-
-AddMoney: ; 16053
-	ld a, $3
-AddFunds: ; 16055
-	push hl
-	push de
-	push bc
-	ld h, b
-	ld l, c
-	ld b, a
-.loop1
-	dec a
-	jr z, .done
-	inc de
-	inc hl
-	jr .loop1
-
-.done
-	and a
-.loop2
-	ld a, [de]
-	adc [hl]
-	ld [de], a
-	dec de
-	dec hl
-	dec b
-	jr nz, .loop2
-	pop bc
-	pop de
-	pop hl
-	ret
-; 1606f
-
-GiveCoins:: ; 1606f
-	ld a, 2
-	ld de, Coins
-	call AddFunds
-	ld a, 2
-	ld bc, .maxcoins
-	call CompareFunds
-	jr c, .not_maxed
-	ld hl, .maxcoins
-	ld a, [hli]
-	ld [de], a
-	inc de
-	ld a, [hli]
-	ld [de], a
-	scf
-	ret
-
-.not_maxed
-	and a
-	ret
-; 1608d
-
-.maxcoins: ; 1608d
-	bigdw 9999
-; 1608f
-
-
-TakeCoins:: ; 1608f
-	ld a, 2
-	ld de, Coins
-	call SubtractFunds
-	jr nc, .asm_1609f
-	xor a
-	ld [de], a
-	inc de
-	ld [de], a
-	scf
-	ret
-
-.asm_1609f
-	and a
-	ret
-; 160a1
-
-CheckCoins:: ; 160a1
-	ld a, $2
-	ld de, Coins
-	jp CompareFunds
-; 160a9
-
-
 INCLUDE "items/marts.asm"
 
 INCLUDE "event/mom.asm"
 
-Special_DayCareMan: ; 166d6
-	ld hl, wDaycareMan
-	bit 0, [hl]
-	jr nz, .asm_166fe
-	ld hl, wDaycareMan
-	ld a, $0
-	call Function1678f
-	jr c, .asm_16724
-	call Function16798
-	jr c, .asm_16721
-	callba Functionde2a
-	ld hl, wDaycareMan
-	set 0, [hl]
-	call Function167f6
-	call Function16a3b
-	ret
-
-.asm_166fe
-	callba Functione698
-	ld hl, wBreedMon1Nick
-	call Function1686d
-	call Function16807
-	jr c, .asm_16721
-	callba Functiondd21
-	call Function16850
-	ld hl, wDaycareMan
-	res 0, [hl]
-	res 5, [hl]
-	jr .asm_16724
-
-.asm_16721
-	call Function1689b
-
-.asm_16724
-	ld a, $13
-	call Function1689b
-	ret
-; 1672a
-
-Special_DayCareLady: ; 1672a
-	ld hl, wDaycareLady
-	bit 0, [hl]
-	jr nz, .asm_16752
-	ld hl, wDaycareLady
-	ld a, $2
-	call Function16781
-	jr c, .asm_1677b
-	call Function16798
-	jr c, .asm_16778
-	callba Functionde37
-	ld hl, wDaycareLady
-	set 0, [hl]
-	call Function167f6
-	call Function16a3b
-	ret
-
-.asm_16752
-	callba Functione6b3
-	ld hl, wBreedMon2Nick
-	call Function1686d
-	call Function16807
-	jr c, .asm_16778
-	callba Functiondd42
-	call Function16850
-	ld hl, wDaycareLady
-	res 0, [hl]
-	ld hl, wDaycareMan
-	res 5, [hl]
-	jr .asm_1677b
-
-.asm_16778
-	call Function1689b
-
-.asm_1677b
-	ld a, $13
-	call Function1689b
-	ret
-; 16781
-
-Function16781: ; 16781
-	bit 7, [hl]
-	jr nz, .asm_16788
-	set 7, [hl]
-	inc a
-
-.asm_16788
-	call Function1689b
-	call YesNoBox
-	ret
-; 1678f
-
-Function1678f: ; 1678f
-	set 7, [hl]
-	call Function1689b
-	call YesNoBox
-	ret
-; 16798
-
-Function16798: ; 16798
-	ld a, [PartyCount]
-	cp 2
-	jr c, .asm_167e5
-	ld a, 4
-	call Function1689b
-	ld b, 6
-	callba Function5001d
-	jr c, .asm_167dd
-	ld a, [CurPartySpecies]
-	cp EGG
-	jr z, .asm_167e1
-	callba CheckCurPartyMonFainted
-	jr c, .asm_167e9
-	ld hl, PartyMon1Item
-	ld bc, PARTYMON_STRUCT_LENGTH
-	ld a, [CurPartyMon]
-	call AddNTimes
-	ld d, [hl]
-	callba ItemIsMail
-	jr c, .asm_167ed
-	ld hl, PartyMonNicknames
-	ld a, [CurPartyMon]
-	call GetNick
-	and a
-	ret
-
-.asm_167dd
-	ld a, $12
-	scf
-	ret
-
-.asm_167e1
-	ld a, $6
-	scf
-	ret
-
-.asm_167e5
-	ld a, $7
-	scf
-	ret
-
-.asm_167e9
-	ld a, $8
-	scf
-	ret
-
-.asm_167ed
-	ld a, $a
-	scf
-	ret
-; 167f1
-
-UnknownText_0x167f1: ; 0x167f1
-	;
-	text_jump UnknownText_0x1bdaa7
-	db "@"
-; 0x167f6
-
-Function167f6: ; 167f6
-	ld a, $5
-	call Function1689b
-	ld a, [CurPartySpecies]
-	call PlayCry
-	ld a, $9
-	call Function1689b
-	ret
-; 16807
-
-Function16807: ; 16807
-	ld a, [StringBuffer2 + 1]
-	and a
-	jr nz, .asm_16819
-	ld a, $f
-	call Function1689b
-	call YesNoBox
-	jr c, .asm_16844
-	jr .asm_1682d
-
-.asm_16819
-	ld a, $b
-	call Function1689b
-	call YesNoBox
-	jr c, .asm_16844
-	ld a, $c
-	call Function1689b
-	call YesNoBox
-	jr c, .asm_16844
-
-.asm_1682d
-	ld de, Money
-	ld bc, StringBuffer2 + 2
-	callba CompareMoney
-	jr c, .asm_16848
-	ld a, [PartyCount]
-	cp $6
-	jr nc, .asm_1684c
-	and a
-	ret
-
-.asm_16844
-	ld a, $12
-	scf
-	ret
-
-.asm_16848
-	ld a, $11
-	scf
-	ret
-
-.asm_1684c
-	ld a, $10
-	scf
-	ret
-; 16850
-
-Function16850: ; 16850
-	ld bc, StringBuffer2 + 2
-	ld de, Money
-	callba TakeMoney
-	ld a, $d
-	call Function1689b
-	ld a, [CurPartySpecies]
-	call PlayCry
-	ld a, $e
-	call Function1689b
-	ret
-; 1686d
-
-Function1686d: ; 1686d
-	ld a, b
-	ld [StringBuffer2], a
-	ld a, d
-	ld [StringBuffer2 + 1], a
-	ld de, StringBuffer1
-	ld bc, NAME_LENGTH
-	call CopyBytes
-	ld hl, 0
-	ld bc, $64
-	ld a, [StringBuffer2 + 1]
-	call AddNTimes
-	ld de, $64
-	add hl, de
-	xor a
-	ld [StringBuffer2 + 2], a
-	ld a, h
-	ld [StringBuffer2 + 3], a
-	ld a, l
-	ld [StringBuffer2 + 4], a
-	ret
-; 1689b
-
-Function1689b: ; 1689b
-	ld e, a
-	ld d, 0
-	ld hl, TextTable_168aa
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	call PrintText
-	ret
-; 168aa
-
-TextTable_168aa: ; 168aa
-	dw UnknownText_0x168d2
-	dw UnknownText_0x168d7
-	dw UnknownText_0x168dc
-	dw UnknownText_0x168e1
-	dw UnknownText_0x168e6
-	dw UnknownText_0x168ff
-	dw UnknownText_0x168f0
-	dw UnknownText_0x168eb
-	dw UnknownText_0x168fa
-	dw UnknownText_0x16904
-	dw UnknownText_0x168f5
-	dw UnknownText_0x16909
-	dw UnknownText_0x1690e
-	dw UnknownText_0x16913
-	dw UnknownText_0x16918
-	dw UnknownText_0x1691d
-	dw UnknownText_0x16922
-	dw UnknownText_0x16927
-	dw UnknownText_0x1692c
-	dw UnknownText_0x16931
-; 168d2
-
-UnknownText_0x168d2: ; 0x168d2
-	; I'm the DAY-CARE MAN. Want me to raise a #MON?
-	text_jump UnknownText_0x1bdaa9
-	db "@"
-; 0x168d7
-
-UnknownText_0x168d7: ; 0x168d7
-	; I'm the DAY-CARE MAN. Do you know about EGGS? I was raising #MON with my wife, you see. We were shocked to find an EGG! How incredible is that? So, want me to raise a #MON?
-	text_jump UnknownText_0x1bdad8
-	db "@"
-; 0x168dc
-
-UnknownText_0x168dc: ; 0x168dc
-	; I'm the DAY-CARE LADY. Should I raise a #MON for you?
-	text_jump UnknownText_0x1bdb85
-	db "@"
-; 0x168e1
-
-UnknownText_0x168e1: ; 0x168e1
-	; I'm the DAY-CARE LADY. Do you know about EGGS? My husband and I were raising some #MON, you see. We were shocked to find an EGG! How incredible could that be? Should I raise a #MON for you?
-	text_jump UnknownText_0x1bdbbb
-	db "@"
-; 0x168e6
-
-UnknownText_0x168e6: ; 0x168e6
-	; What should I raise for you?
-	text_jump UnknownText_0x1bdc79
-	db "@"
-; 0x168eb
-
-UnknownText_0x168eb: ; 0x168eb
-	; Oh? But you have just one #MON.
-	text_jump UnknownText_0x1bdc97
-	db "@"
-; 0x168f0
-
-UnknownText_0x168f0: ; 0x168f0
-	; Sorry, but I can't accept an EGG.
-	text_jump UnknownText_0x1bdcb8
-	db "@"
-; 0x168f5
-
-UnknownText_0x168f5: ; 0x168f5
-	; Remove MAIL before you come see me.
-	text_jump UnknownText_0x1bdcda
-	db "@"
-; 0x168fa
-
-UnknownText_0x168fa: ; 0x168fa
-	; If you give me that, what will you battle with?
-	text_jump UnknownText_0x1bdcff
-	db "@"
-; 0x168ff
-
-UnknownText_0x168ff: ; 0x168ff
-	; OK. I'll raise your @ .
-	text_jump UnknownText_0x1bdd30
-	db "@"
-; 0x16904
-
-UnknownText_0x16904: ; 0x16904
-	; Come back for it later.
-	text_jump UnknownText_0x1bdd4b
-	db "@"
-; 0x16909
-
-UnknownText_0x16909: ; 0x16909
-	; Are we geniuses or what? Want to see your @ ?
-	text_jump UnknownText_0x1bdd64
-	db "@"
-; 0x1690e
-
-UnknownText_0x1690e: ; 0x1690e
-	; Your @ has grown a lot. By level, it's grown by @ . If you want your #MON back, it will cost ¥@ .
-	text_jump UnknownText_0x1bdd96
-	db "@"
-; 0x16913
-
-UnknownText_0x16913: ; 0x16913
-	; Perfect! Here's your #MON.
-	text_jump UnknownText_0x1bde04
-	db "@"
-; 0x16918
-
-UnknownText_0x16918: ; 0x16918
-	; got back @ .
-	text_jump UnknownText_0x1bde1f
-	db "@"
-; 0x1691d
-
-UnknownText_0x1691d: ; 0x1691d
-	; Huh? Back already? Your @ needs a little more time with us. If you want your #MON back, it will cost ¥100.
-	text_jump UnknownText_0x1bde32
-	db "@"
-; 0x16922
+INCLUDE "event/daycare.asm"
 
-UnknownText_0x16922: ; 0x16922
-	; You have no room for it.
-	text_jump UnknownText_0x1bdea2
-	db "@"
-; 0x16927
+INCLUDE "event/photo.asm"
 
-UnknownText_0x16927: ; 0x16927
-	; You don't have enough money.
-	text_jump UnknownText_0x1bdebc
-	db "@"
-; 0x1692c
-
-UnknownText_0x1692c: ; 0x1692c
-	; Oh, fine then.
-	text_jump UnknownText_0x1bded9
-	db "@"
-; 0x16931
-
-UnknownText_0x16931: ; 0x16931
-	; Come again.
-	text_jump UnknownText_0x1bdee9
-	db "@"
-; 0x16936
-
-Special_DayCareManOutside: ; 16936
-	ld hl, wDaycareMan
-	bit 6, [hl]
-	jr nz, Function16949
-	ld hl, UnknownText_0x16944
-	call PrintText
-	ret
-
-UnknownText_0x16944: ; 0x16944
-	; Not yet…
-	text_jump UnknownText_0x1bdef6
-	db "@"
-; 0x16949
-
-Function16949: ; 16949
-	ld hl, UnknownText_0x16993
-	call PrintText
-	call YesNoBox
-	jr c, .asm_1697c
-	ld a, [PartyCount]
-	cp PARTY_LENGTH
-	jr nc, .asm_16987
-	call Function169ac
-	ld hl, wDaycareMan
-	res 6, [hl]
-	call Function16a3b
-	ld hl, UnknownText_0x16998
-	call PrintText
-	ld de, SFX_GET_EGG_FROM_DAYCARE_LADY
-	call PlaySFX
-	ld c, 120
-	call DelayFrames
-	ld hl, UnknownText_0x1699d
-	jr .asm_1697f
-
-.asm_1697c
-	ld hl, UnknownText_0x169a2
-
-.asm_1697f
-	call PrintText
-	xor a
-	ld [ScriptVar], a
-	ret
-
-.asm_16987
-	ld hl, UnknownText_0x169a7
-	call PrintText
-	ld a, $1
-	ld [ScriptVar], a
-	ret
-; 16993
-
-UnknownText_0x16993: ; 0x16993
-	; Ah, it's you! We were raising your #MON, and my goodness, were we surprised! Your #MON had an EGG! We don't know how it got there, but your #MON had it. You want it?
-	text_jump UnknownText_0x1bdf00
-	db "@"
-; 0x16998
-
-UnknownText_0x16998: ; 0x16998
-	; received the EGG!
-	text_jump UnknownText_0x1bdfa5
-	db "@"
-; 0x1699d
-
-UnknownText_0x1699d: ; 0x1699d
-	; Take good care of it.
-	text_jump UnknownText_0x1bdfba
-	db "@"
-; 0x169a2
-
-UnknownText_0x169a2: ; 0x169a2
-	; Well then, I'll keep it. Thanks!
-	text_jump UnknownText_0x1bdfd1
-	db "@"
-; 0x169a7
-
-UnknownText_0x169a7: ; 0x169a7
-	; You have no room in your party. Come back later.
-	text_jump UnknownText_0x1bdff2
-	db "@"
-; 0x169ac
-
-Function169ac: ; 169ac
-	ld a, [wEggMonLevel]
-	ld [CurPartyLevel], a
-	ld hl, PartyCount
-	ld a, [hl]
-	cp PARTY_LENGTH
-	jr nc, .asm_16a2f
-	inc a
-	ld [hl], a
-	ld c, a
-	ld b, 0
-	add hl, bc
-	ld a, EGG
-	ld [hli], a
-	ld a, [wEggMonSpecies]
-	ld [CurSpecies], a
-	ld [CurPartySpecies], a
-	ld a, $ff
-	ld [hl], a
-	ld hl, PartyMonNicknames
-	ld bc, PKMN_NAME_LENGTH
-	call Function16a31
-	ld hl, wEggNick
-	call CopyBytes
-	ld hl, PartyMonOT
-	ld bc, NAME_LENGTH
-	call Function16a31
-	ld hl, wEggOT
-	call CopyBytes
-	ld hl, PartyMon1
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call Function16a31
-	ld hl, wEggMon
-	ld bc, wEggMonEnd - wEggMon
-	call CopyBytes
-	call GetBaseData
-	ld a, [PartyCount]
-	dec a
-	ld hl, PartyMon1
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call AddNTimes
-	ld b, h
-	ld c, l
-	ld hl, MON_ID + 1
-	add hl, bc
-	push hl
-	ld hl, MON_MAXHP
-	add hl, bc
-	ld d, h
-	ld e, l
-	pop hl
-	push bc
-	ld b, $0
-	predef CalcPkmnStats
-	pop bc
-	ld hl, MON_HP
-	add hl, bc
-	xor a
-	ld [hli], a
-	ld [hl], a
-	and a
-	ret
-
-.asm_16a2f
-	scf
-	ret
-; 16a31
-
-Function16a31: ; 16a31
-	ld a, [PartyCount]
-	dec a
-	call AddNTimes
-	ld d, h
-	ld e, l
-	ret
-; 16a3b
-
-Function16a3b: ; 16a3b
-	ld a, [wDaycareLady]
-	bit 0, a
-	ret z
-	ld a, [wDaycareMan]
-	bit 0, a
-	ret z
-	callab Function16e1d
-	ld a, [wd265]
-	and a
-	ret z
-	inc a
-	ret z
-	ld hl, wDaycareMan
-	set 5, [hl]
-.asm_16a59
-	call Random
-	cp 150
-	jr c, .asm_16a59
-	ld [wStepsToEgg], a
-	jp Function16a66
-; 16a66
-
-Function16a66: ; 16a66
-	xor a
-	ld hl, wEggMon
-	ld bc, wEggMonEnd - wEggMon
-	call ByteFill
-	ld hl, wEggNick
-	ld bc, PKMN_NAME_LENGTH
-	call ByteFill
-	ld hl, wEggOT
-	ld bc, NAME_LENGTH
-	call ByteFill
-	ld a, [wBreedMon1DVs]
-	ld [TempMonDVs], a
-	ld a, [wBreedMon1DVs + 1]
-	ld [TempMonDVs + 1], a
-	ld a, [wBreedMon1Species]
-	ld [CurPartySpecies], a
-	ld a, $3
-	ld [MonType], a
-	ld a, [wBreedMon1Species]
-	cp DITTO
-	ld a, $1
-	jr z, .asm_16ab6
-	ld a, [wBreedMon2Species]
-	cp DITTO
-	ld a, $0
-	jr z, .asm_16ab6
-	callba GetGender
-	ld a, $0
-	jr z, .asm_16ab6
-	inc a
-
-.asm_16ab6
-	ld [wDittoInDaycare], a
-	and a
-	ld a, [wBreedMon1Species]
-	jr z, .asm_16ac2
-	ld a, [wBreedMon2Species]
-
-.asm_16ac2
-	ld [CurPartySpecies], a
-	callab GetPreEvolution
-	callab GetPreEvolution
-	ld a, EGG_LEVEL
-	ld [CurPartyLevel], a
-
-	ld a, [CurPartySpecies]
-	cp NIDORAN_F
-	jr nz, .asm_16ae8
-	call Random
-	cp $80
-	ld a, NIDORAN_F
-	jr c, .asm_16ae8
-	ld a, NIDORAN_M
-.asm_16ae8
-	ld [CurPartySpecies], a
-	ld [CurSpecies], a
-	ld [wEggMonSpecies], a
-
-	call GetBaseData
-	ld hl, wEggNick
-	ld de, String_16be0
-	call CopyName2
-	ld hl, PlayerName
-	ld de, wEggOT
-	ld bc, NAME_LENGTH
-	call CopyBytes
-	xor a
-	ld [wEggMonItem], a
-	ld de, wEggMonMoves
-	xor a
-	ld [Buffer1], a
-	predef FillMoves
-	callba Function170bf
-	ld hl, wEggMonID
-	ld a, [PlayerID]
-	ld [hli], a
-	ld a, [PlayerID + 1]
-	ld [hl], a
-	ld a, [CurPartyLevel]
-	ld d, a
-	callab CalcExpAtLevel
-	ld hl, wEggMonExp
-	ld a, [hMultiplicand]
-	ld [hli], a
-	ld a, [$ffb5]
-	ld [hli], a
-	ld a, [$ffb6]
-	ld [hl], a
-	xor a
-	ld b, $a
-	ld hl, wEggMonStatExp
-.asm_16b46
-	ld [hli], a
-	dec b
-	jr nz, .asm_16b46
-	ld hl, wEggMonDVs
-	call Random
-	ld [hli], a
-	ld [TempMonDVs], a
-	call Random
-	ld [hld], a
-	ld [TempMonDVs + 1], a
-	ld de, wBreedMon1DVs
-	ld a, [wBreedMon1Species]
-	cp DITTO
-	jr z, .asm_16b98
-	ld de, wBreedMon2DVs
-	ld a, [wBreedMon2Species]
-	cp DITTO
-	jr z, .asm_16b98
-	ld a, $3
-	ld [MonType], a
-	push hl
-	callba GetGender
-	pop hl
-	ld de, wBreedMon1DVs
-	ld bc, wBreedMon2DVs
-	jr c, .asm_16bab
-	jr z, .asm_16b90
-	ld a, [wDittoInDaycare]
-	and a
-	jr z, .asm_16b98
-	ld d, b
-	ld e, c
-	jr .asm_16b98
-
-.asm_16b90
-	ld a, [wDittoInDaycare]
-	and a
-	jr nz, .asm_16b98
-	ld d, b
-	ld e, c
-
-.asm_16b98
-	ld a, [de]
-	inc de
-	and $f
-	ld b, a
-	ld a, [hl]
-	and $f0
-	add b
-	ld [hli], a
-	ld a, [de]
-	and $7
-	ld b, a
-	ld a, [hl]
-	and $f8
-	add b
-	ld [hl], a
-
-.asm_16bab
-	ld hl, StringBuffer1
-	ld de, wd050
-	ld bc, NAME_LENGTH
-	call CopyBytes
-	ld hl, wEggMonMoves
-	ld de, wEggMonPP
-	predef FillPP
-	ld hl, wd050
-	ld de, StringBuffer1
-	ld bc, NAME_LENGTH
-	call CopyBytes
-	ld a, [BaseEggSteps]
-	ld hl, wEggMonHappiness
-	ld [hli], a
-	xor a
-rept 2
-	ld [hli], a
-endr
-	ld [hl], a
-	ld a, [CurPartyLevel]
-	ld [wEggMonLevel], a
-	ret
-; 16be0
-
-String_16be0: ; 16be0
-	db "EGG@"
-; 16be4
-
-Function16be4: ; 16be4
-	ld a, [UnownDex]
-	and a
-	ret z
-
-	ld a, [hInMenu]
-	push af
-	ld a, $1
-	ld [hInMenu], a
-	ld a, [Options]
-	push af
-	set NO_TEXT_SCROLL, a
-	ld [Options], a
-	call ClearBGPalettes
-	call ClearTileMap
-
-	ld de, UnownDexATile
-	ld hl, VTiles1 tile $6f
-	lb bc, BANK(UnownDexBTile), 1
-	call Request1bpp
-
-	ld de, UnownDexBTile
-	ld hl, VTiles1 tile $75
-	lb bc, BANK(UnownDexBTile), 1
-	call Request1bpp
-
-	hlcoord 0, 0
-	lb bc, 3, 18
-	call TextBox
-
-	hlcoord 0, 5
-	lb bc, 7, 7
-	call TextBox
-
-	hlcoord 0, 14
-	lb bc, 2, 18
-	call TextBox
-
-	hlcoord 1, 2
-	ld de, AlphRuinsStampString
-	call PlaceString
-
-	hlcoord 1, 16
-	ld de, UnownDexDoWhatString
-	call PlaceString
-
-	hlcoord 10, 6
-	ld de, UnownDexMenuString
-	call PlaceString
-
-	xor a
-	ld [wJumptableIndex], a
-	call Function16cc8
-	call WaitBGMap
-
-	ld a, UNOWN
-	ld [CurPartySpecies], a
-	xor a
-	ld [TempMonDVs], a
-	ld [TempMonDVs + 1], a
-
-	ld b, $1c
-	call GetSGBLayout
-	call SetPalettes
-
-.joy_loop
-	call JoyTextDelay
-
-	ld a, [hJoyPressed]
-	and B_BUTTON
-	jr nz, .pressed_b
-
-	ld a, [hJoyPressed]
-	and A_BUTTON
-	jr nz, .pressed_a
-
-	call Function16ca0
-	call DelayFrame
-	jr .joy_loop
-
-.pressed_a
-	ld a, [wJumptableIndex]
-	push af
-	callba Function84560
-	call RestartMapMusic
-	pop af
-	ld [wJumptableIndex], a
-	jr .joy_loop
-
-.pressed_b
-	pop af
-	ld [Options], a
-	pop af
-	ld [hInMenu], a
-	call ReturnToMapFromSubmenu
-	ret
-; 16ca0
-
-Function16ca0: ; 16ca0
-	ld a, [hJoyLast]
-	and D_RIGHT
-	jr nz, .press_right
-	ld a, [hJoyLast]
-	and D_LEFT
-	jr nz, .press_left
-	ret
-
-.press_left
-	ld hl, wJumptableIndex
-	ld a, [hl]
-	and a
-	jr nz, .wrap_around_left
-	ld [hl], $1b
-
-.wrap_around_left
-	dec [hl]
-	jr .return
-
-.press_right
-	ld hl, wJumptableIndex
-	ld a, [hl]
-	cp $1a
-	jr c, .wrap_around_right
-	ld [hl], $ff
-
-.wrap_around_right
-	inc [hl]
-
-.return
-	call Function16cc8
-	ret
-; 16cc8
-
-Function16cc8: ; 16cc8
-	ld a, [wJumptableIndex]
-	cp 26
-	jr z, Function16d20
-	inc a
-	ld [UnownLetter], a
-	ld a, UNOWN
-	ld [CurPartySpecies], a
-	xor a
-	ld [wc2c6], a
-	ld de, VTiles2
-	predef GetFrontpic
-	call Function16cff
-	hlcoord 1, 6
-	xor a
-	ld [hFillBox], a
-	lb bc, 7, 7
-	predef FillBox
-	ld de, VTiles2 tile $31
-	callba Functione0000
-	ret
-; 16cff
-
-Function16cff: ; 16cff
-	ld a, [rSVBK]
-	push af
-	ld a, $6
-	ld [rSVBK], a
-
-	ld a, BANK(sScratch)
-	call GetSRAMBank
-	ld de, w6_d000
-	ld hl, sScratch
-	ld a, [hROMBank]
-	ld b, a
-	ld c, $31
-	call Get2bpp
-	call CloseSRAM
-
-	pop af
-	ld [rSVBK], a
-	ret
-; 16d20
-
-Function16d20: ; 16d20
-	hlcoord 1, 6
-	lb bc, 7, 7
-	call ClearBox
-	hlcoord 1, 9
-	ld de, UnownDexVacantString
-	call PlaceString
-	xor a
-	call GetSRAMBank
-	ld hl, sScratch
-	ld bc, $31 tiles
-	xor a
-	call ByteFill
-	ld hl, VTiles2 tile $31
-	ld de, sScratch
-	ld c, $31
-	ld a, [hROMBank]
-	ld b, a
-	call Get2bpp
-	call CloseSRAM
-	ld c, 20
-	call DelayFrames
-	ret
-; 16d57
-
-AlphRuinsStampString:
-	db " ALPH RUINS STAMP@"
-
-UnownDexDoWhatString:
-	db "Do what?@"
-
-UnownDexMenuString:
-	db   "♂ PRINT"
-	next "♀ CANCEL"
-	next "← PREVIOUS"
-	next "→ NEXT"
-	db   "@"
-
-UnownDexVacantString:
-	db "VACANT@"
-; 16d9c
-
-UnownDexATile: ; 16d9c
-INCBIN "gfx/unknown/016d9c.1bpp"
-UnownDexBTile: ; 16da4
-INCBIN "gfx/unknown/016da4.1bpp"
-; 16dac
-
-Function16dac: ; 16dac
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	ld a, " "
-	call ByteFill
-	hlcoord 7, 11
-	ld a, $31
-	ld [hFillBox], a
-	lb bc, 7, 7
-	predef FillBox
-	ret
-; 16dc7
-
-PhotoStudio: ; 16dc7
-	ld hl, .Text_AskWhichMon
-	call PrintText
-	callba SelectMonFromParty
-	jr c, .cancel
-	ld a, [CurPartySpecies]
-	cp EGG
-	jr z, .egg
-
-	ld hl, .Text_HoldStill
-	call PrintText
-	call DisableSpriteUpdates
-	callba Function8461a
-	call Function2b74
-	ld a, [$ffac]
-	and a
-	jr nz, .cancel
-	ld hl, .Text_Presto
-	jr .print_text
-
-.cancel
-	ld hl, .Text_NoPicture
-	jr .print_text
-
-.egg
-	ld hl, .Text_Egg
-
-.print_text
-	call PrintText
-	ret
-; 16e04
-
-.Text_AskWhichMon: ; 0x16e04
-	; Which #MON should I photo- graph?
-	text_jump UnknownText_0x1be024
-	db "@"
-; 0x16e09
-
-.Text_HoldStill: ; 0x16e09
-	; All righty. Hold still for a bit.
-	text_jump UnknownText_0x1be047
-	db "@"
-; 0x16e0e
-
-.Text_Presto: ; 0x16e0e
-	; Presto! All done. Come again, OK?
-	text_jump UnknownText_0x1be06a
-	db "@"
-; 0x16e13
-
-.Text_NoPicture: ; 0x16e13
-	; Oh, no picture? Come again, OK?
-	text_jump UnknownText_0x1c0000
-	db "@"
-; 0x16e18
-
-.Text_Egg: ; 0x16e18
-	; An EGG? My talent is worth more…
-	text_jump UnknownText_0x1c0021
-	db "@"
-; 0x16e1d
-
 INCLUDE "engine/breeding/egg.asm"
 
 SECTION "Tileset Data 1", ROMX, BANK[TILESETS_1]
@@ -13739,7 +9901,7 @@
 ; 244c3
 
 
-Function244c3: ; 0x244c3
+UpdateItemDescription: ; 0x244c3
 	ld a, [MenuSelection]
 	ld [CurSpecies], a
 	hlcoord 0, 12
@@ -13759,8 +9921,8 @@
 	call CopyMenuDataHeader
 	call MenuBox
 	call UpdateSprites
-	call Function321c
-	ld b, $12
+	call ApplyTilemap
+	ld b, SCGB_12
 	call GetSGBLayout
 	xor a
 	ld [hBGMapMode], a
@@ -13789,11 +9951,11 @@
 	call CopyMenuDataHeader
 	call ClearMenuBoxInterior
 	call WaitBGMap
-	call ClearSGB
+	call GetMemSGBLayout
 	xor a
 	ld [hBGMapMode], a
 	call OverworldTextModeSwitch
-	call Function321c
+	call ApplyTilemap
 	call UpdateSprites
 	call LoadStandardFont
 	ret
@@ -13889,7 +10051,7 @@
 	call Function24764
 	call Function247dd
 	call Function245f1
-	call Function321c
+	call ApplyTilemap
 	xor a
 	ld [hBGMapMode], a
 	ret
@@ -14054,7 +10216,7 @@
 	ld hl, wcfa6
 	bit 7, [hl]
 	jp z, xor_a
-	ld hl, wd0e4
+	ld hl, wMenuScrollPosition
 	ld a, [hl]
 	and a
 	jr z, .xor_dec_up
@@ -14069,7 +10231,7 @@
 	ld hl, wcfa6
 	bit 7, [hl]
 	jp z, xor_a
-	ld hl, wd0e4
+	ld hl, wMenuScrollPosition
 	ld a, [wMenuData2Items]
 	add [hl]
 	ld b, a
@@ -14084,7 +10246,7 @@
 ; 246fc
 
 Function246fc: ; 246fc
-	ld a, [wd0e4]
+	ld a, [wMenuScrollPosition]
 	ld c, a
 	ld a, [MenuSelection2]
 	add c
@@ -14114,10 +10276,10 @@
 	ld a, [wcf95]
 	call GetFarByte
 	ld [wd144], a
-; if ([wd144] + 1) < [wMenuData2Items] + [wd0e4]: [wd0e4] = max(([wd144] + 1) - [wMenuData2Items], 0)
+; if ([wd144] + 1) < [wMenuData2Items] + [wMenuScrollPosition]: [wMenuScrollPosition] = max(([wd144] + 1) - [wMenuData2Items], 0)
 	ld a, [wMenuData2Items]
 	ld c, a
-	ld a, [wd0e4]
+	ld a, [wMenuScrollPosition]
 	add c
 	ld c, a
 	ld a, [wd144]
@@ -14133,10 +10295,10 @@
 	xor a
 
 .store
-	ld [wd0e4], a
+	ld [wMenuScrollPosition], a
 
 .skip
-	ld a, [wd0e4]
+	ld a, [wMenuScrollPosition]
 	ld c, a
 	ld a, [wMenuCursorBuffer]
 	add c
@@ -14149,7 +10311,7 @@
 
 .asm_2475a
 	xor a
-	ld [wd0e4], a
+	ld [wMenuScrollPosition], a
 	ld a, $1
 	ld [wMenuCursorBuffer], a
 
@@ -14251,7 +10413,7 @@
 	ld a, [wMenuData2Flags]
 	bit 4, a
 	jr z, .asm_2480d
-	ld a, [wd0e4]
+	ld a, [wMenuScrollPosition]
 	and a
 	jr z, .asm_2480d
 	ld a, [wMenuBorderTopCoord]
@@ -14269,7 +10431,7 @@
 	ld b, a
 	ld c, $0
 .asm_2481a
-	ld a, [wd0e4]
+	ld a, [wMenuScrollPosition]
 	add c
 	ld [wcf77], a
 	ld a, c
@@ -14346,7 +10508,7 @@
 	and a
 	jr z, .asm_248b7
 	ld b, a
-	ld a, [wd0e4]
+	ld a, [wMenuScrollPosition]
 	cp b
 	jr nc, .asm_248b7
 	ld c, a
@@ -14396,7 +10558,7 @@
 	push de
 	push hl
 	ld e, a
-	ld a, [wd0e4]
+	ld a, [wMenuScrollPosition]
 	add e
 	ld e, a
 	ld d, $0
@@ -14726,17 +10888,17 @@
 	ret
 ; 0x24ae8
 
-Function24ae8: ; 24ae8
+PlaceMoneyTopRightOW: ; 24ae8
 	ld hl, MenuDataHeader_0x24b15
 	call CopyMenuDataHeader
 	jr Function24b01
 
-Function24af0: ; 24af0
+PlaceMoneyBottomLeftOW: ; 24af0
 	ld hl, MenuDataHeader_0x24b1d
 	call CopyMenuDataHeader
 	jr Function24b01
 
-Function24af8: ; 24af8
+PlaceMoneyTopRightMenu: ; 24af8
 	ld hl, MenuDataHeader_0x24b15
 	ld de, $b
 	call Function1e2e
@@ -15374,12 +11536,12 @@
 	dn 2, 2 ; rows, columns
 	db 6 ; spacing
 	dba Strings24f3d
-	dbw $09, 0
+	dbw BANK(MenuData_0x24f34), 0
 ; 0x24f3d
 
 Strings24f3d: ; 0x24f3d
 	db "FIGHT@"
-	db $4a, "@"
+	db "<PKMN>@"
 	db "PACK@"
 	db "RUN@"
 ; 24f4e
@@ -15485,95 +11647,95 @@
 Function24ff9: ; 24ff9
 	ld a, $1
 	ld [wItemQuantityChangeBuffer], a
-.asm_24ffe
-	call Function25072
-	call Function2500e
-	jr nc, .asm_24ffe
-	cp $ff
-	jr nz, .asm_2500c
+.loop
+	call Function25072 ; update display
+	call Function2500e ; joy action
+	jr nc, .loop
+	cp -1
+	jr nz, .nope
 	scf
 	ret
 
-.asm_2500c
+.nope
 	and a
 	ret
 ; 2500e
 
 Function2500e: ; 2500e
-	call Function354b
-	bit 1, c
-	jr nz, .asm_2502b
-	bit 0, c
-	jr nz, .asm_2502f
-	bit 7, c
-	jr nz, .asm_25033
-	bit 6, c
-	jr nz, .asm_2503f
-	bit 5, c
-	jr nz, .asm_2504d
-	bit 4, c
-	jr nz, .asm_2505f
+	call Function354b ; get joypad
+	bit B_BUTTON_F, c
+	jr nz, .b
+	bit A_BUTTON_F, c
+	jr nz, .a
+	bit D_DOWN_F, c
+	jr nz, .down
+	bit D_UP_F, c
+	jr nz, .up
+	bit D_LEFT_F, c
+	jr nz, .left
+	bit D_RIGHT_F, c
+	jr nz, .right
 	and a
 	ret
 
-.asm_2502b
-	ld a, $ff
+.b
+	ld a, -1
 	scf
 	ret
 
-.asm_2502f
-	ld a, $0
+.a
+	ld a, 0
 	scf
 	ret
 
-.asm_25033
+.down
 	ld hl, wItemQuantityChangeBuffer
 	dec [hl]
-	jr nz, .asm_2503d
+	jr nz, .finish_down
 	ld a, [wItemQuantityBuffer]
 	ld [hl], a
 
-.asm_2503d
+.finish_down
 	and a
 	ret
 
-.asm_2503f
+.up
 	ld hl, wItemQuantityChangeBuffer
 	inc [hl]
 	ld a, [wItemQuantityBuffer]
 	cp [hl]
-	jr nc, .asm_2504b
+	jr nc, .finish_up
 	ld [hl], $1
 
-.asm_2504b
+.finish_up
 	and a
 	ret
 
-.asm_2504d
+.left
 	ld a, [wItemQuantityChangeBuffer]
 	sub $a
-	jr c, .asm_25058
-	jr z, .asm_25058
-	jr .asm_2505a
+	jr c, .load_1
+	jr z, .load_1
+	jr .finish_left
 
-.asm_25058
+.load_1
 	ld a, $1
 
-.asm_2505a
+.finish_left
 	ld [wItemQuantityChangeBuffer], a
 	and a
 	ret
 
-.asm_2505f
+.right
 	ld a, [wItemQuantityChangeBuffer]
 	add $a
 	ld b, a
 	ld a, [wItemQuantityBuffer]
 	cp b
-	jr nc, .asm_2506c
+	jr nc, .finish_right
 	ld b, a
 
-.asm_2506c
+.finish_right
 	ld a, b
 	ld [wItemQuantityChangeBuffer], a
 	and a
@@ -15690,611 +11852,8 @@
 	db 0 ; default option
 ; 0x25105
 
-Function25105: ; 25105
-	ld a, [VramState]
-	push af
-	xor a
-	ld [VramState], a
-	ld hl, Options
-	ld a, [hl]
-	push af
-	set 4, [hl]
-	call Function2513b
-.asm_25117
-	call UpdateTime
-	call JoyTextDelay
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .asm_25132
-	ld a, [hJoyLast]
-	and B_BUTTON
-	jr nz, .asm_25132
-	call Function2518e
-	call DelayFrame
-	jr .asm_25117
-.asm_25132
-	pop af
-	ld [Options], a
-	pop af
-	ld [VramState], a
-	ret
+INCLUDE "engine/trainer_card.asm"
 
-Function2513b: ; 2513b (9:513b)
-	call ClearBGPalettes
-	call ClearSprites
-	call ClearTileMap
-	call DisableLCD
-	callba Function8833e
-	ld hl, CardRightCornerGFX
-	ld de, VTiles2 tile $1c
-	ld bc, $10
-	ld a, BANK(CardRightCornerGFX)
-	call FarCopyBytes
-	ld hl, CardStatusGFX
-	ld de, VTiles2 tile $29
-	ld bc, $60 + $500
-	ld a, BANK(CardStatusGFX)
-	call FarCopyBytes
-	call Function25299
-	hlcoord 0, 8
-	ld d, $6
-	call Function253b0
-	call EnableLCD
-	call WaitBGMap
-	ld b, $15
-	call GetSGBLayout
-	call SetPalettes
-	call WaitBGMap
-	ld hl, wJumptableIndex
-	xor a
-rept 3
-	ld [hli], a
-endr
-	ld [hl], a
-	ret
-
-Function2518e: ; 2518e (9:518e)
-	ld a, [wJumptableIndex]
-	ld e, a
-	ld d, $0
-	ld hl, Jumptable_2519d
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-
-Jumptable_2519d: ; 2519d (9:519d)
-	dw Function251b6
-	dw Function251d7
-	dw Function251f4
-	dw Function25221
-	dw Function2524c
-	dw Function25279
-	dw Function251b0
-
-
-Function251ab: ; 251ab (9:51ab)
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-
-Function251b0: ; 251b0 (9:51b0)
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-Function251b6: ; 251b6 (9:51b6)
-	call ClearSprites
-	hlcoord 0, 8
-	ld d, $6
-	call Function253b0
-	call WaitBGMap
-	ld de, CardStatusGFX
-	ld hl, VTiles2 tile $29
-	lb bc, BANK(CardStatusGFX), $6 + $50
-	call Request2bpp
-	call Function2530a
-	call Function251ab
-	ret
-
-Function251d7: ; 251d7 (9:51d7)
-	call Function25415
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_RIGHT | A_BUTTON
-	jr nz, .asm_251e3
-	ret
-.asm_251e3
-	ld a, $2
-	ld [wJumptableIndex], a
-	ret
-; 251e9 (9:51e9)
-
-Function251e9: ; 251e9
-	ld a, [KantoBadges]
-	and a
-	ret z
-	ld a, $4
-	ld [wJumptableIndex], a
-	ret
-; 251f4
-
-Function251f4: ; 251f4 (9:51f4)
-	call ClearSprites
-	hlcoord 0, 8
-	ld d, $6
-	call Function253b0
-	call WaitBGMap
-	ld de, LeaderGFX
-	ld hl, VTiles2 tile $29
-	lb bc, BANK(LeaderGFX), $56
-	call Request2bpp
-	ld de, BadgeGFX
-	ld hl, VTiles0 tile $00
-	lb bc, BANK(BadgeGFX), $2c
-	call Request2bpp
-	call Function2536c
-	call Function251ab
-	ret
-
-Function25221: ; 25221 (9:5221)
-	ld hl, Unknown_254c9
-	call Function25438
-	ld hl, hJoyLast
-	ld a, [hl]
-	and A_BUTTON
-	jr nz, Function25246
-	ld a, [hl]
-	and D_LEFT
-	jr nz, .asm_25235
-	ret
-.asm_25235
-	ld a, $0
-	ld [wJumptableIndex], a
-	ret
-; 2523b (9:523b)
-
-Function2523b: ; 2523b
-	ld a, [KantoBadges]
-	and a
-	ret z
-	ld a, $4
-	ld [wJumptableIndex], a
-	ret
-; 25246
-
-Function25246: ; 25246
-	ld a, $6
-	ld [wJumptableIndex], a
-	ret
-
-Function2524c: ; 2524c (9:524c)
-	call ClearSprites
-	hlcoord 0, 8
-	ld d, $6
-	call Function253b0
-	call WaitBGMap
-	ld de, LeaderGFX2
-	ld hl, VTiles2 tile $29
-	lb bc, BANK(LeaderGFX2), $56
-	call Request2bpp
-	ld de, BadgeGFX2
-	ld hl, VTiles0 tile $00
-	lb bc, BANK(BadgeGFX2), $2c
-	call Request2bpp
-	call Function2536c
-	call Function251ab
-	ret
-
-Function25279: ; 25279 (9:5279)
-	ld hl, Unknown_254c9
-	call Function25438
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_LEFT
-	jr nz, .asm_2528d
-	ld a, [hl]
-	and D_RIGHT
-	jr nz, .asm_25293
-	ret
-.asm_2528d
-	ld a, $2
-	ld [wJumptableIndex], a
-	ret
-.asm_25293
-	ld a, $0
-	ld [wJumptableIndex], a
-	ret
-
-Function25299: ; 25299 (9:5299)
-	hlcoord 0, 0
-	ld d, $5
-	call Function253b0
-	hlcoord 2, 2
-	ld de, String_252ec
-	call PlaceString
-	hlcoord 2, 4
-	ld de, Tilemap_252f9
-	call Function253a8
-	hlcoord 7, 2
-	ld de, PlayerName
-	call PlaceString
-	hlcoord 5, 4
-	ld de, PlayerID
-	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
-	call PrintNum
-	hlcoord 7, 6
-	ld de, Money
-	lb bc, PRINTNUM_MONEY | 3, 6
-	call PrintNum
-	hlcoord 1, 3
-	ld de, Tilemap_252fc
-	call Function253a8
-	hlcoord 14, 1
-	lb bc, 5, 7
-	xor a
-	ld [hFillBox], a
-	predef FillBox
-	ret
-; 252ec (9:52ec)
-
-String_252ec: ; 252ec
-	db   "NAME/"
-	next ""
-	next "MONEY@"
-
-Tilemap_252f9: ; 252f9
-	db $27, $28, $ff ; ID NO
-
-Tilemap_252fc: ; 252fc
-	db $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $25, $26, $ff ; ____________>
-; 2530a
-
-Function2530a: ; 2530a (9:530a)
-	hlcoord 2, 10
-	ld de, String_2534c
-	call PlaceString
-	hlcoord 10, 15
-	ld de, String_2535c
-	call PlaceString
-	ld hl, PokedexCaught
-	ld b, $20
-	call CountSetBits
-	ld de, wd265
-	hlcoord 15, 10
-	lb bc, 1, 3
-	call PrintNum
-	call Function25415
-	hlcoord 2, 8
-	ld de, Tilemap_25366
-	call Function253a8
-	ld a, [StatusFlags] ; pokedex
-	bit 0, a
-	ret nz
-	hlcoord 1, 9
-	lb bc, 2, 17
-	call ClearBox
-	ret
-; 2534c (9:534c)
-
-String_2534c: ; 2534c
-	db   "#DEX"
-	next "PLAY TIME"
-	db   "@"
-
-String_2535b: ; 2535b
-	db "@"
-
-String_2535c: ; 2535c
-	db "  BADGES▶@"
-
-Tilemap_25366: ; 25366
-	db $29, $2a, $2b, $2c, $2d, $ff
-; 2536c
-
-Function2536c: ; 2536c (9:536c)
-	hlcoord 2, 8
-	ld de, Tilemap_253a2
-	call Function253a8
-	hlcoord 2, 10
-	ld a, $29
-	ld c, $4
-.asm_2537c
-	call Function253f4
-rept 4
-	inc hl
-endr
-	dec c
-	jr nz, .asm_2537c
-	hlcoord 2, 13
-	ld a, $51
-	ld c, $4
-.asm_2538d
-	call Function253f4
-rept 4
-	inc hl
-endr
-	dec c
-	jr nz, .asm_2538d
-	xor a
-	ld [wcf64], a
-	ld hl, Unknown_254c9
-	call Function25448
-	ret
-; 253a2 (9:53a2)
-
-Tilemap_253a2: ; 253a2
-	db $79, $7a, $7b, $7c, $7d, $ff ; "BADGES"
-; 253a8
-
-Function253a8: ; 253a8 (9:53a8)
-	ld a, [de]
-	cp $ff
-	ret z
-	ld [hli], a
-	inc de
-	jr Function253a8
-
-Function253b0: ; 253b0 (9:53b0)
-	ld e, $14
-.asm_253b2
-	ld a, $23
-	ld [hli], a
-	dec e
-	jr nz, .asm_253b2
-	ld a, $23
-	ld [hli], a
-	ld e, $11
-	ld a, $7f
-.asm_253bf
-	ld [hli], a
-	dec e
-	jr nz, .asm_253bf
-	ld a, $1c
-	ld [hli], a
-	ld a, $23
-	ld [hli], a
-.asm_253c9
-	ld a, $23
-	ld [hli], a
-	ld e, $12
-	ld a, $7f
-.asm_253d0
-	ld [hli], a
-	dec e
-	jr nz, .asm_253d0
-	ld a, $23
-	ld [hli], a
-	dec d
-	jr nz, .asm_253c9
-	ld a, $23
-	ld [hli], a
-	ld a, $24
-	ld [hli], a
-	ld e, $11
-	ld a, $7f
-.asm_253e4
-	ld [hli], a
-	dec e
-	jr nz, .asm_253e4
-	ld a, $23
-	ld [hli], a
-	ld e, $14
-.asm_253ed
-	ld a, $23
-	ld [hli], a
-	dec e
-	jr nz, .asm_253ed
-	ret
-
-Function253f4: ; 253f4 (9:53f4)
-	push de
-	push hl
-	ld [hli], a
-	inc a
-	ld [hli], a
-	inc a
-	ld [hli], a
-	inc a
-	ld [hli], a
-	inc a
-	ld de, $11
-	add hl, de
-	ld [hli], a
-	inc a
-	ld [hli], a
-	inc a
-	ld [hli], a
-	inc a
-	ld de, $11
-	add hl, de
-	ld [hli], a
-	inc a
-	ld [hli], a
-	inc a
-	ld [hli], a
-	inc a
-	pop hl
-	pop de
-	ret
-
-Function25415: ; 25415 (9:5415)
-	hlcoord 11, 12
-	ld de, GameTimeHours
-	lb bc, 2, 4
-	call PrintNum
-	inc hl
-	ld de, GameTimeMinutes
-	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
-	call PrintNum
-	ld a, [hVBlankCounter]
-	and $1f
-	ret nz
-	hlcoord 15, 12
-	ld a, [hl]
-	xor $51
-	ld [hl], a
-	ret
-
-Function25438: ; 25438 (9:5438)
-	ld a, [hVBlankCounter]
-	and $7
-	ret nz
-	ld a, [wcf64]
-	inc a
-	and $7
-	ld [wcf64], a
-	jr Function25448
-
-Function25448: ; 25448 (9:5448)
-	ld a, [hli]
-	ld e, a
-	ld a, [hli]
-	ld d, a
-	ld a, [de]
-	ld c, a
-	ld de, Sprites
-	ld b, 8
-.asm_25453
-	srl c
-	push bc
-	jr nc, .asm_25472
-	push hl
-	ld a, [hli]
-	ld b, a
-	ld a, [hli]
-	ld c, a
-	ld a, [hli]
-	ld [wcf66], a
-	ld a, [wcf64]
-	add l
-	ld l, a
-	ld a, 0
-	adc h
-	ld h, a
-	ld a, [hl]
-	ld [wcf65], a
-	call Function2547b
-	pop hl
-.asm_25472
-	ld bc, $b
-	add hl, bc
-	pop bc
-	dec b
-	jr nz, .asm_25453
-	ret
-
-Function2547b: ; 2547b (9:547b)
-	ld a, [wcf65]
-	and $80
-	jr nz, .asm_25487
-	ld hl, Unknown_254a7
-	jr .asm_2548a
-.asm_25487
-	ld hl, Unknown_254b8
-.asm_2548a
-	ld a, [hli]
-	cp $ff
-	ret z
-	add b
-	ld [de], a
-	inc de
-	ld a, [hli]
-	add c
-	ld [de], a
-	inc de
-	ld a, [wcf65]
-	and $7f
-	add [hl]
-	ld [de], a
-	inc hl
-	inc de
-	ld a, [wcf66]
-	add [hl]
-	ld [de], a
-	inc hl
-	inc de
-	jr .asm_2548a
-; 254a7 (9:54a7)
-
-Unknown_254a7: ; 254a7
-	db $00, $00, $00, $00
-	db $00, $08, $01, $00
-	db $08, $00, $02, $00
-	db $08, $08, $03, $00
-	db $ff
-
-Unknown_254b8: ; 254b8
-	db $00, $00, $01, $20
-	db $00, $08, $00, $20
-	db $08, $00, $03, $20
-	db $08, $08, $02, $20
-	db $ff
-
-Unknown_254c9: ; 254c9
-; Template OAM data for each badge on the trainer card.
-; Format:
-	; y, x, palette
-	; cycle 1: face tile, in1 tile, in2 tile, in3 tile
-	; cycle 2: face tile, in1 tile, in2 tile, in3 tile
-
-	dw JohtoBadges
-
-	; Zephyrbadge
-	db $68, $18, $00
-	db $00, $20, $24, $20 | $80
-	db $00, $20, $24, $20 | $80
-
-	; Hivebadge
-	db $68, $38, $00
-	db $04, $20, $24, $20 | $80
-	db $04, $20, $24, $20 | $80
-
-	; Plainbadge
-	db $68, $58, $00
-	db $08, $20, $24, $20 | $80
-	db $08, $20, $24, $20 | $80
-
-	; Fogbadge
-	db $68, $78, $00
-	db $0c, $20, $24, $20 | $80
-	db $0c, $20, $24, $20 | $80
-
-	; Mineralbadge
-	db $80, $38, $00
-	db $10, $20, $24, $20 | $80
-	db $10, $20, $24, $20 | $80
-
-	; Stormbadge
-	db $80, $18, $00
-	db $14, $20, $24, $20 | $80
-	db $14, $20, $24, $20 | $80
-
-	; Glacierbadge
-	db $80, $58, $00
-	db $18, $20, $24, $20 | $80
-	db $18, $20, $24, $20 | $80
-
-	; Risingbadge
-	; X-flips on alternate cycles.
-	db $80, $78, $00
-	db $1c, $20, $24, $20 | $80
-	db $1c | $80, $20, $24, $20 | $80
-; 25523
-
-CardStatusGFX: INCBIN "gfx/misc/card_status.2bpp"
-
-LeaderGFX:  INCBIN "gfx/misc/leaders.w24.2bpp"
-LeaderGFX2: INCBIN "gfx/misc/leaders.w24.2bpp"
-BadgeGFX:   INCBIN "gfx/misc/badges.2bpp"
-BadgeGFX2:  INCBIN "gfx/misc/badges.2bpp"
-
-CardRightCornerGFX: INCBIN "gfx/misc/card_right_corner.2bpp"
-
-
 ProfOaksPC: ; 0x265d3
 	ld hl, OakPCText1
 	call MenuTextBox
@@ -16575,1401 +12134,8 @@
 	text_jump _OakPCText4
 	db "@"
 
+INCLUDE "engine/decorations.asm"
 
-InitDecorations: ; 26751 (9:6751)
-	ld a, DECO_FEATHERY_BED
-	ld [Bed], a
-	ld a, DECO_TOWN_MAP
-	ld [Poster], a
-	ret
-
-_KrisDecorationMenu: ; 0x2675c
-	ld a, [wcf76]
-	push af
-	ld hl, MenuDataHeader_0x2679a
-	call LoadMenuDataHeader
-	xor a
-	ld [wd1ee], a
-	ld a, $1
-	ld [wd1ef], a
-.asm_2676f
-	ld a, [wd1ef]
-	ld [wMenuCursorBuffer], a
-	call Function26806
-	call Function1e5d
-	ld a, [MenuSelection2]
-	ld [wd1ef], a
-	jr c, .asm_2678e
-	ld a, [MenuSelection]
-	ld hl, Unknown_267aa
-	call Function1fa7
-	jr nc, .asm_2676f
-
-.asm_2678e
-	call ExitMenu
-	pop af
-	ld [wcf76], a
-	ld a, [wd1ee]
-	ld c, a
-	ret
-; 0x2679a
-
-MenuDataHeader_0x2679a: ; 0x2679a
-	db $40 ; flags
-	db 00, 05 ; start coords
-	db 17, 19 ; end coords
-	dw MenuData2_0x267a2
-	db 1 ; default option
-; 0x267a2
-
-MenuData2_0x267a2: ; 0x267a2
-	db $a0 ; flags
-	db 0 ; items
-	dw wd002
-	dw Function1f8d
-	dw Unknown_267aa
-; 0x267aa
-
-Unknown_267aa: ; 267aa
-	dw Function268b5, .bed
-	dw Function268ca, .carpet
-	dw Function268df, .plant
-	dw Function268f3, .poster
-	dw Function26908, .game
-	dw Function2691d, .ornament
-	dw Function26945, .big_doll
-	dw Function26959, .exit
-
-.bed      db "BED@"
-.carpet   db "CARPET@"
-.plant    db "PLANT@"
-.poster   db "POSTER@"
-.game     db "GAME CONSOLE@"
-.ornament db "ORNAMENT@"
-.big_doll db "BIG DOLL@"
-.exit     db "EXIT@"
-; 26806
-
-Function26806: ; 26806
-	xor a
-	ld [wcf76], a
-	call Function26822
-	call Function2683a
-	ld a, $7
-	call Function26830
-	ld hl, StringBuffer2
-	ld de, wd002
-	ld bc, $d
-	call CopyBytes
-	ret
-
-Function26822: ; 26822 (9:6822)
-	ld hl, StringBuffer2
-	xor a
-	ld [hli], a
-	ld bc, ITEM_NAME_LENGTH - 1
-	ld a, -1
-	call ByteFill
-	ret
-
-Function26830: ; 26830 (9:6830)
-	ld hl, StringBuffer2
-	inc [hl]
-	ld e, [hl]
-	ld d, 0
-	add hl, de
-	ld [hl], a
-	ret
-
-Function2683a: ; 2683a (9:683a)
-	ld hl, Jumptable_26855
-.loop
-	ld a, [hli]
-	ld e, a
-	ld a, [hli]
-	ld d, a
-	or e
-	jr z, .done
-	push hl
-	call _de_
-	pop hl
-	jr nc, .next
-	ld a, [hl]
-	push hl
-	call Function26830
-	pop hl
-.next
-	inc hl
-	jr .loop
-.done
-	ret
-; 26855 (9:6855)
-
-Jumptable_26855: ; 26855
-	dwb Function268bd, 0 ; bed
-	dwb Function268d2, 1 ; carpet
-	dwb Function268e7, 2 ; plant
-	dwb Function268fb, 3 ; poster
-	dwb Function26910, 4 ; game console
-	dwb Function26925, 5 ; ornament
-	dwb Function2694d, 6 ; big doll
-	dw 0 ; end
-; 2686c
-
-Function2686c: ; 2686c
-	xor a
-	ld hl, wd002
-	ld [hli], a
-	ld a, -1
-	ld bc, $10
-	call ByteFill
-	ret
-; 2687a
-
-CheckAllDecorationFlags: ; 2687a
-.loop
-	ld a, [hli]
-	cp -1
-	jr z, .done
-	push hl
-	push af
-	ld b, CHECK_FLAG
-	call DecorationFlagAction
-	ld a, c
-	and a
-	pop bc
-	ld a, b
-	call nz, Function26891
-	pop hl
-	jr .loop
-
-.done
-	ret
-; 26891
-
-Function26891: ; 26891
-	ld hl, wd002
-	inc [hl]
-	ld e, [hl]
-	ld d, $0
-	add hl, de
-	ld [hl], a
-	ret
-; 2689b
-
-Function2689b: ; 2689b
-	push bc
-	push hl
-	call Function2686c
-	pop hl
-	call CheckAllDecorationFlags
-	pop bc
-	ld a, [wd002]
-	and a
-	ret z
-	ld a, c
-	call Function26891
-	ld a, $0
-	call Function26891
-	scf
-	ret
-; 268b5
-
-Function268b5: ; 268b5
-	call Function268bd
-	call Function2695b
-	xor a
-	ret
-; 268bd
-
-Function268bd: ; 268bd
-	ld hl, Unknown_268c5
-	ld c, 1
-	jp Function2689b
-; 268c5
-
-Unknown_268c5: ; 268c5
-	db 2, 3, 4, 5, $ff
-; 268ca
-
-Function268ca: ; 268ca
-	call Function268d2
-	call Function2695b
-	xor a
-	ret
-; 268d2
-
-Function268d2: ; 268d2
-	ld hl, Unknown_268da
-	ld c, 6
-	jp Function2689b
-; 268da
-
-Unknown_268da: ; 268da
-	db 7, 8, 9, 10, $ff
-; 268df
-
-Function268df: ; 268df
-	call Function268e7
-	call Function2695b
-	xor a
-	ret
-; 268e7
-
-Function268e7: ; 268e7
-	ld hl, Unknown_268ef
-	ld c, 11
-	jp Function2689b
-; 268ef
-
-Unknown_268ef: ; 268ef
-	db 12, 13, 14, $ff
-; 268f3
-
-Function268f3: ; 268f3
-	call Function268fb
-	call Function2695b
-	xor a
-	ret
-; 268fb
-
-Function268fb: ; 268fb
-	ld hl, Unknown_26903
-	ld c, 15
-	jp Function2689b
-; 26903
-
-Unknown_26903: ; 26903
-	db 16, 17, 18, 19, $ff
-; 26908
-
-Function26908: ; 26908
-	call Function26910
-	call Function2695b
-	xor a
-	ret
-; 26910
-
-Function26910: ; 26910
-	ld hl, Unknown_26918
-	ld c, 20
-	jp Function2689b
-; 26918
-
-Unknown_26918: ; 26918
-	db 21, 22, 23, 24, $ff
-; 2691d
-
-Function2691d: ; 2691d
-	call Function26925
-	call Function2695b
-	xor a
-	ret
-; 26925
-
-Function26925: ; 26925
-	ld hl, Unknown_2692d
-	ld c, 29
-	jp Function2689b
-; 2692d
-
-Unknown_2692d: ; 2692d
-	db 30, 31, 32, 33, 34, 35, 36, 37, 38, 39
-	db 40, 41, 42, 43, 44, 45, 46, 47, 48, 49
-	db 50, 51, 52, -1
-; 26945
-
-Function26945: ; 26945
-	call Function2694d
-	call Function2695b
-	xor a
-	ret
-; 2694d
-
-Function2694d: ; 2694d
-	ld hl, Unknown_26955
-	ld c, 25
-	jp Function2689b
-; 26955
-
-Unknown_26955: ; 26955
-	db 26, 27, 28, -1
-; 26959
-
-Function26959: ; 26959
-	scf
-	ret
-; 2695b
-
-Function2695b: ; 2695b
-	ld a, [wd002]
-	and a
-	jr z, .empty
-	cp 8
-	jr nc, .beyond_eight
-	xor a
-	ld [wcf76], a
-	ld hl, MenuDataHeader_0x269b5
-	call LoadMenuDataHeader
-	call Function1e5d
-	jr c, .no_action_1
-	call DoDecorationAction2
-
-.no_action_1
-	call ExitMenu
-	ret
-
-.beyond_eight
-	ld hl, wd002
-	ld e, [hl]
-	dec [hl]
-	ld d, 0
-	add hl, de
-	ld [hl], -1
-	call LoadStandardMenuDataHeader
-	ld hl, MenuDataHeader_0x269c5
-	call CopyMenuDataHeader
-	xor a
-	ld [hBGMapMode], a
-	call Function352f
-	xor a
-	ld [wd0e4], a
-	call HandleScrollingMenu
-	ld a, [wcf73]
-	cp 2
-	jr z, .no_action_2
-	call DoDecorationAction2
-
-.no_action_2
-	call ExitMenu
-	ret
-
-.empty
-	ld hl, UnknownText_0x269b0
-	call MenuTextBoxBackup
-	ret
-; 269b0
-
-UnknownText_0x269b0: ; 0x269b0
-	; There's nothing to choose.
-	text_jump UnknownText_0x1bc471
-	db "@"
-; 0x269b5
-
-MenuDataHeader_0x269b5: ; 0x269b5
-	db $40 ; flags
-	db 00, 00 ; start coords
-	db 17, 19 ; end coords
-	dw MenuData2_0x269bd
-	db 1 ; default option
-; 0x269bd
-
-MenuData2_0x269bd: ; 0x269bd
-	db $a0 ; flags
-	db 0 ; items
-	dw wd002
-	dw DecorationMenuFunction
-	dw DecorationAttributes
-; 0x269c5
-
-MenuDataHeader_0x269c5: ; 0x269c5
-	db $40 ; flags
-	db 01, 01 ; start coords
-	db 16, 18 ; end coords
-	dw MenuData2_0x269cd
-	db 1 ; default option
-; 0x269cd
-
-MenuData2_0x269cd: ; 0x269cd
-	db $10 ; flags
-	db 8, 0 ; rows, columns
-	db 1 ; horizontal spacing
-	dbw 0, wd002 ; text pointer
-	dba DecorationMenuFunction
-	dbw 0, 0
-	dbw 0, 0
-; 269dd
-
-
-GetDecorationData: ; 269dd
-	ld hl, DecorationAttributes
-	ld bc, 6
-	call AddNTimes
-	ret
-; 269e7
-
-GetDecorationName: ; 269e7
-	push hl
-	call GetDecorationData
-	call GetDecoName
-	pop hl
-	call CopyName2
-	ret
-; 269f3
-
-DecorationMenuFunction: ; 269f3
-	ld a, [MenuSelection]
-	push de
-	call GetDecorationData
-	call GetDecoName
-	pop hl
-	call PlaceString
-	ret
-; 26a02
-
-DoDecorationAction2: ; 26a02
-	ld a, [MenuSelection]
-	call GetDecorationData
-	ld de, 2 ; function 2
-	add hl, de
-	ld a, [hl]
-	ld hl, .DecoActions
-	rst JumpTable
-	ret
-; 26a12
-
-.DecoActions: ; 26a12
-	dw DecoAction_nothing
-	dw DecoAction_setupbed
-	dw DecoAction_putawaybed
-	dw DecoAction_setupcarpet
-	dw DecoAction_putawaycarpet
-	dw DecoAction_setupplant
-	dw DecoAction_putawayplant
-	dw DecoAction_setupposter
-	dw DecoAction_putawayposter
-	dw DecoAction_setupconsole
-	dw DecoAction_putawayconsole
-	dw DecoAction_setupbigdoll
-	dw DecoAction_putawaybigdoll
-	dw DecoAction_setupornament
-	dw DecoAction_putawayornament
-; 26a30
-
-
-GetDecorationFlag: ; 26a30
-	call GetDecorationData
-	ld de, 3 ; event flag
-	add hl, de
-	ld a, [hli]
-	ld d, [hl]
-	ld e, a
-	ret
-; 26a3b
-
-DecorationFlagAction: ; 26a3b
-	push bc
-	call GetDecorationFlag
-	pop bc
-	call EventFlagAction
-	ret
-; 26a44
-
-GetDecorationSprite: ; 26a44
-	ld a, c
-	call GetDecorationData
-	ld de, 5 ; sprite
-	add hl, de
-	ld a, [hl]
-	ld c, a
-	ret
-; 26a4f
-
-decoration: MACRO
-	; type, name, command, event flag, tile/sprite
-	db \1, \2, \3
-	dw \4
-	db \5
-ENDM
-
-DecorationAttributes: ; 26a4f
-	decoration DECO_PLANT,    $00,               $0,                 EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_BED,       EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_BED,      FEATHERY_BED,      SET_UP_BED,         EVENT_DECO_BED_1,                  $1b
-	decoration DECO_BED,      PINK_BED,          SET_UP_BED,         EVENT_DECO_BED_2,                  $1c
-	decoration DECO_BED,      POLKADOT_BED,      SET_UP_BED,         EVENT_DECO_BED_3,                  $1d
-	decoration DECO_BED,      PIKACHU_BED,       SET_UP_BED,         EVENT_DECO_BED_4,                  $1e
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_CARPET,    EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_CARPET,   RED_CARPET,        SET_UP_CARPET,      EVENT_DECO_CARPET_1,               $08
-	decoration DECO_CARPET,   BLUE_CARPET,       SET_UP_CARPET,      EVENT_DECO_CARPET_2,               $0b
-	decoration DECO_CARPET,   YELLOW_CARPET,     SET_UP_CARPET,      EVENT_DECO_CARPET_3,               $0e
-	decoration DECO_CARPET,   GREEN_CARPET,      SET_UP_CARPET,      EVENT_DECO_CARPET_4,               $11
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_PLANT,     EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_PLANT,    MAGNAPLANT,        SET_UP_PLANT,       EVENT_DECO_PLANT_1,                $20
-	decoration DECO_PLANT,    TROPICPLANT,       SET_UP_PLANT,       EVENT_DECO_PLANT_2,                $21
-	decoration DECO_PLANT,    JUMBOPLANT,        SET_UP_PLANT,       EVENT_DECO_PLANT_3,                $22
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_POSTER,    EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_PLANT,    TOWN_MAP_D,        SET_UP_POSTER,      EVENT_DECO_PLANT_4,                $1f
-	decoration DECO_POSTER,   PIKACHU,           SET_UP_POSTER,      EVENT_DECO_POSTER_1,               $23
-	decoration DECO_POSTER,   CLEFAIRY,          SET_UP_POSTER,      EVENT_DECO_POSTER_2,               $24
-	decoration DECO_POSTER,   JIGGLYPUFF,        SET_UP_POSTER,      EVENT_DECO_POSTER_3,               $25
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_CONSOLE,   EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_PLANT,    FAMICOM,           SET_UP_CONSOLE,     EVENT_DECO_FAMICOM,                SPRITE_FAMICOM
-	decoration DECO_PLANT,    SUPER_NES,         SET_UP_CONSOLE,     EVENT_DECO_SNES,                   SPRITE_SNES
-	decoration DECO_PLANT,    NINTENDO_64,       SET_UP_CONSOLE,     EVENT_DECO_N64,                    SPRITE_N64
-	decoration DECO_PLANT,    VIRTUAL_BOY,       SET_UP_CONSOLE,     EVENT_DECO_VIRTUAL_BOY,            SPRITE_VIRTUAL_BOY
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_BIG_DOLL,  EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_BIGDOLL,  SNORLAX,           SET_UP_BIG_DOLL,    EVENT_DECO_BIG_SNORLAX_DOLL,       SPRITE_BIG_SNORLAX
-	decoration DECO_BIGDOLL,  ONIX,              SET_UP_BIG_DOLL,    EVENT_DECO_BIG_ONIX_DOLL,          SPRITE_BIG_ONIX
-	decoration DECO_BIGDOLL,  LAPRAS,            SET_UP_BIG_DOLL,    EVENT_DECO_BIG_LAPRAS_DOLL,        SPRITE_BIG_LAPRAS
-	decoration DECO_PLANT,    PUT_IT_AWAY,       PUT_AWAY_DOLL,      EVENT_GAVE_KURT_APRICORNS,                         $00
-	decoration DECO_DOLL,     PIKACHU,           SET_UP_DOLL,        EVENT_DECO_PIKACHU_DOLL,           SPRITE_PIKACHU
-	decoration DECO_PLANT,    SURF_PIKA_DOLL,    SET_UP_DOLL,        EVENT_DECO_SURFING_PIKACHU_DOLL,   SPRITE_SURFING_PIKACHU
-	decoration DECO_DOLL,     CLEFAIRY,          SET_UP_DOLL,        EVENT_DECO_CLEFAIRY_DOLL,          SPRITE_CLEFAIRY
-	decoration DECO_DOLL,     JIGGLYPUFF,        SET_UP_DOLL,        EVENT_DECO_JIGGLYPUFF_DOLL,        SPRITE_JIGGLYPUFF
-	decoration DECO_DOLL,     BULBASAUR,         SET_UP_DOLL,        EVENT_DECO_BULBASAUR_DOLL,         SPRITE_BULBASAUR
-	decoration DECO_DOLL,     CHARMANDER,        SET_UP_DOLL,        EVENT_DECO_CHARMANDER_DOLL,        SPRITE_CHARMANDER
-	decoration DECO_DOLL,     SQUIRTLE,          SET_UP_DOLL,        EVENT_DECO_SQUIRTLE_DOLL,          SPRITE_SQUIRTLE
-	decoration DECO_DOLL,     POLIWAG,           SET_UP_DOLL,        EVENT_DECO_POLIWAG_DOLL,           SPRITE_POLIWAG
-	decoration DECO_DOLL,     DIGLETT,           SET_UP_DOLL,        EVENT_DECO_DIGLETT_DOLL,           SPRITE_DIGLETT
-	decoration DECO_DOLL,     STARYU,            SET_UP_DOLL,        EVENT_DECO_STARMIE_DOLL,           SPRITE_STARMIE
-	decoration DECO_DOLL,     MAGIKARP,          SET_UP_DOLL,        EVENT_DECO_MAGIKARP_DOLL,          SPRITE_MAGIKARP
-	decoration DECO_DOLL,     ODDISH,            SET_UP_DOLL,        EVENT_DECO_ODDISH_DOLL,            SPRITE_ODDISH
-	decoration DECO_DOLL,     GENGAR,            SET_UP_DOLL,        EVENT_DECO_GENGAR_DOLL,            SPRITE_GENGAR
-	decoration DECO_DOLL,     SHELLDER,          SET_UP_DOLL,        EVENT_DECO_SHELLDER_DOLL,          SPRITE_SHELLDER
-	decoration DECO_DOLL,     GRIMER,            SET_UP_DOLL,        EVENT_DECO_GRIMER_DOLL,            SPRITE_GRIMER
-	decoration DECO_DOLL,     VOLTORB,           SET_UP_DOLL,        EVENT_DECO_VOLTORB_DOLL,           SPRITE_VOLTORB
-	decoration DECO_DOLL,     WEEDLE,            SET_UP_DOLL,        EVENT_DECO_WEEDLE_DOLL,            SPRITE_WEEDLE
-	decoration DECO_DOLL,     UNOWN,             SET_UP_DOLL,        EVENT_DECO_UNOWN_DOLL,             SPRITE_UNOWN
-	decoration DECO_DOLL,     GEODUDE,           SET_UP_DOLL,        EVENT_DECO_GEODUDE_DOLL,           SPRITE_GEODUDE
-	decoration DECO_DOLL,     MACHOP,            SET_UP_DOLL,        EVENT_DECO_MACHOP_DOLL,            SPRITE_MACHOP
-	decoration DECO_DOLL,     TENTACOOL,         SET_UP_DOLL,        EVENT_DECO_TENTACOOL_DOLL,         SPRITE_TENTACOOL
-	decoration DECO_PLANT,    GOLD_TROPHY,       SET_UP_DOLL,        EVENT_DECO_GOLD_TROPHY,            SPRITE_GOLD_TROPHY
-	decoration DECO_PLANT,    SILVER_TROPHY,     SET_UP_DOLL,        EVENT_DECO_SILVER_TROPHY,          SPRITE_SILVER_TROPHY
-; 26b8d
-
-
-DecorationNames: ; 26b8d
-	db "CANCEL@"
-	db "PUT IT AWAY@"
-	db "MAGNAPLANT@"
-	db "TROPICPLANT@"
-	db "JUMBOPLANT@"
-	db "TOWN MAP@"
-	db "NES@"
-	db "SUPER NES@"
-	db "NINTENDO 64@"
-	db "VIRTUAL BOY@"
-	db "GOLD TROPHY@"
-	db "SILVER TROPHY@"
-	db "SURF PIKACHU DOLL@"
-	db " BED@"
-	db " CARPET@"
-	db " POSTER@"
-	db " DOLL@"
-	db "BIG @"
-	db "FEATHERY@"
-	db "PIKACHU@"
-	db "PINK@"
-	db "POLKADOT@"
-	db "RED@"
-	db "BLUE@"
-	db "YELLOW@"
-	db "GREEN@"
-; 26c72
-
-GetDecoName: ; 26c72
-	ld a, [hli]
-	ld e, [hl]
-	ld bc, StringBuffer2
-	push bc
-	ld hl, .NameFunctions
-	rst JumpTable
-	pop de
-	ret
-; 26c7e
-
-.NameFunctions: ; 26c7e
-	dw .invalid
-	dw .plant
-	dw .bed
-	dw .carpet
-	dw .poster
-	dw .doll
-	dw .bigdoll
-; 26c8c
-
-
-.invalid: ; 26c8c
-	ret
-; 26c8d
-
-.plant: ; 26c8d
-	ld a, e
-	jr .getdeconame
-
-.bed: ; 26c90
-	call .plant
-	ld a, _BED
-	jr .getdeconame
-
-.carpet: ; 26c97
-	call .plant
-	ld a, _CARPET
-	jr .getdeconame
-
-.poster: ; 26c9e
-	ld a, e
-	call .getpokename
-	ld a, _POSTER
-	jr .getdeconame
-
-.doll: ; 26ca6
-	ld a, e
-	call .getpokename
-	ld a, _DOLL
-	jr .getdeconame
-
-.bigdoll: ; 26cae
-	push de
-	ld a, BIG_
-	call .getdeconame
-	pop de
-	ld a, e
-	jr .getpokename
-
-.unused: ; 26cb8
-	push de
-	call .getdeconame
-	pop de
-	ld a, e
-	jr .getdeconame
-
-.getpokename: ; 26cc0
-	push bc
-	ld [wd265], a
-	call GetPokemonName
-	pop bc
-	jr .copy
-
-.getdeconame: ; 26cca
-	call ._getdeconame
-	jr .copy
-
-._getdeconame: ; 26ccf
-	push bc
-	ld hl, DecorationNames
-	call GetNthString
-	ld d, h
-	ld e, l
-	pop bc
-	ret
-
-.copy: ; 26cda
-	ld h, b
-	ld l, c
-	call CopyName2
-	dec hl
-	ld b, h
-	ld c, l
-	ret
-; 26ce3
-
-DecoAction_nothing: ; 26ce3
-	scf
-	ret
-; 26ce5
-
-DecoAction_setupbed: ; 26ce5
-	ld hl, Bed
-	jp DecoAction_TrySetItUp
-; 26ceb
-
-DecoAction_putawaybed: ; 26ceb
-	ld hl, Bed
-	jp DecoAction_TryPutItAway
-; 26cf1
-
-DecoAction_setupcarpet: ; 26cf1
-	ld hl, Carpet
-	jp DecoAction_TrySetItUp
-; 26cf7
-
-DecoAction_putawaycarpet: ; 26cf7
-	ld hl, Carpet
-	jp DecoAction_TryPutItAway
-; 26cfd
-
-DecoAction_setupplant: ; 26cfd
-	ld hl, Plant
-	jp DecoAction_TrySetItUp
-; 26d03
-
-DecoAction_putawayplant: ; 26d03
-	ld hl, Plant
-	jp DecoAction_TryPutItAway
-; 26d09
-
-DecoAction_setupposter: ; 26d09
-	ld hl, Poster
-	jp DecoAction_TrySetItUp
-; 26d0f
-
-DecoAction_putawayposter: ; 26d0f
-	ld hl, Poster
-	jp DecoAction_TryPutItAway
-; 26d15
-
-DecoAction_setupconsole: ; 26d15
-	ld hl, Console
-	jp DecoAction_TrySetItUp
-; 26d1b
-
-DecoAction_putawayconsole: ; 26d1b
-	ld hl, Console
-	jp DecoAction_TryPutItAway
-; 26d21
-
-DecoAction_setupbigdoll: ; 26d21
-	ld hl, BigDoll
-	jp DecoAction_TrySetItUp
-; 26d27
-
-DecoAction_putawaybigdoll: ; 26d27
-	ld hl, BigDoll
-	jp DecoAction_TryPutItAway
-; 26d2d
-
-DecoAction_TrySetItUp: ; 26d2d
-	ld a, [hl]
-	ld [Buffer1], a
-	push hl
-	call DecoAction_SetItUp
-	jr c, .failed
-	ld a, 1
-	ld [wd1ee], a
-	pop hl
-	ld a, [MenuSelection]
-	ld [hl], a
-	xor a
-	ret
-
-.failed
-	pop hl
-	xor a
-	ret
-; 26d46
-
-DecoAction_SetItUp: ; 26d46
-; See if there's anything of the same type already out
-	ld a, [Buffer1]
-	and a
-	jr z, .nothingthere
-; See if that item is already out
-	ld b, a
-	ld a, [MenuSelection]
-	cp b
-	jr z, .alreadythere
-; Put away the item that's already out, and set up the new one
-	ld a, [MenuSelection]
-	ld hl, StringBuffer4
-	call GetDecorationName
-	ld a, [Buffer1]
-	ld hl, StringBuffer3
-	call GetDecorationName
-	ld hl, UnknownText_0x26ee0
-	call MenuTextBoxBackup
-	xor a
-	ret
-
-.nothingthere
-	ld a, [MenuSelection]
-	ld hl, StringBuffer3
-	call GetDecorationName
-	ld hl, UnknownText_0x26edb
-	call MenuTextBoxBackup
-	xor a
-	ret
-
-.alreadythere
-	ld hl, UnknownText_0x26ee5
-	call MenuTextBoxBackup
-	scf
-	ret
-; 26d86
-
-DecoAction_TryPutItAway: ; 26d86
-; If there is no item of that type already set, there is nothing to put away.
-	ld a, [hl]
-	ld [Buffer1], a
-	xor a
-	ld [hl], a
-	ld a, [Buffer1]
-	and a
-	jr z, .nothingthere
-; Put it away.
-	ld a, $1
-	ld [wd1ee], a
-	ld a, [Buffer1]
-	ld [MenuSelection], a
-	ld hl, StringBuffer3
-	call GetDecorationName
-	ld hl, UnknownText_0x26ed1
-	call MenuTextBoxBackup
-	xor a
-	ret
-
-.nothingthere
-	ld hl, UnknownText_0x26ed6
-	call MenuTextBoxBackup
-	xor a
-	ret
-; 26db3
-
-DecoAction_setupornament: ; 26db3
-	ld hl, UnknownText_0x26e41
-	call DecoAction_AskWhichSide
-	jr c, .cancel
-	call DecoAction_SetItUp_Ornament
-	jr c, .cancel
-	ld a, $1
-	ld [wd1ee], a
-	jr DecoAction_FinishUp_Ornament
-
-.cancel
-	xor a
-	ret
-
-DecoAction_putawayornament: ; 26dc9
-	ld hl, UnknownText_0x26e6b
-	call DecoAction_AskWhichSide
-	jr nc, .incave
-	xor a
-	ret
-
-.incave
-	call DecoAction_PutItAway_Ornament
-
-DecoAction_FinishUp_Ornament: ; 26dd6
-	call QueryWhichSide
-	ld a, [wd1ec]
-	ld [hl], a
-	ld a, [wd1ed]
-	ld [de], a
-	xor a
-	ret
-; 26de3
-
-DecoAction_SetItUp_Ornament: ; 26de3
-	ld a, [wd1ec]
-	and a
-	jr z, .nothingthere
-	ld b, a
-	ld a, [MenuSelection]
-	cp b
-	jr z, .failed
-	ld a, b
-	ld hl, StringBuffer3
-	call GetDecorationName
-	ld a, [MenuSelection]
-	ld hl, StringBuffer4
-	call GetDecorationName
-	ld a, [MenuSelection]
-	ld [wd1ec], a
-	call .getwhichside
-	ld hl, UnknownText_0x26ee0
-	call MenuTextBoxBackup
-	xor a
-	ret
-
-.nothingthere
-	ld a, [MenuSelection]
-	ld [wd1ec], a
-	call .getwhichside
-	ld a, [MenuSelection]
-	ld hl, StringBuffer3
-	call GetDecorationName
-	ld hl, UnknownText_0x26edb
-	call MenuTextBoxBackup
-	xor a
-	ret
-
-.failed
-	ld hl, UnknownText_0x26ee5
-	call MenuTextBoxBackup
-	scf
-	ret
-; 26e33
-
-.getwhichside: ; 26e33
-	ld a, [MenuSelection]
-	ld b, a
-	ld a, [wd1ed]
-	cp b
-	ret nz
-	xor a
-	ld [wd1ed], a
-	ret
-; 26e41
-
-UnknownText_0x26e41: ; 0x26e41
-	; Which side do you want to put it on?
-	text_jump UnknownText_0x1bc48c
-	db "@"
-; 0x26e46
-
-DecoAction_PutItAway_Ornament: ; 26e46
-	ld a, [wd1ec]
-	and a
-	jr z, .nothingthere
-	ld hl, StringBuffer3
-	call GetDecorationName
-	ld a, $1
-	ld [wd1ee], a
-	xor a
-	ld [wd1ec], a
-	ld hl, UnknownText_0x26ed1
-	call MenuTextBoxBackup
-	xor a
-	ret
-
-.nothingthere
-	ld hl, UnknownText_0x26ed6
-	call MenuTextBoxBackup
-	xor a
-	ret
-; 26e6b
-
-UnknownText_0x26e6b: ; 0x26e6b
-	; Which side do you want to put away?
-	text_jump UnknownText_0x1bc4b2
-	db "@"
-; 0x26e70
-
-DecoAction_AskWhichSide: ; 26e70
-	call MenuTextBox
-	ld hl, MenuDataHeader_0x26eab
-	call GetMenu2
-	call ExitMenu
-	call CopyMenuData2
-	jr c, .nope
-	ld a, [MenuSelection2]
-	cp 3
-	jr z, .nope
-	ld [Buffer2], a
-	call QueryWhichSide
-	ld a, [hl]
-	ld [wd1ec], a
-	ld a, [de]
-	ld [wd1ed], a
-	xor a
-	ret
-
-.nope
-	scf
-	ret
-; 26e9a
-
-QueryWhichSide: ; 26e9a
-	ld hl, RightOrnament
-	ld de, LeftOrnament
-	ld a, [Buffer2]
-	cp 1
-	ret z
-	push hl
-	ld h, d
-	ld l, e
-	pop de
-	ret
-; 26eab
-
-MenuDataHeader_0x26eab: ; 0x26eab
-	db $40 ; flags
-	db 00, 00 ; start coords
-	db 07, 13 ; end coords
-	dw MenuData2_0x26eb3
-	db 1 ; default option
-; 0x26eb3
-
-MenuData2_0x26eb3: ; 0x26eb3
-	db $80 ; flags
-	db 3 ; items
-	db "RIGHT SIDE@"
-	db "LEFT SIDE@"
-	db "CANCEL@"
-; 0x26ed1
-
-UnknownText_0x26ed1: ; 0x26ed1
-	; Put away the @ .
-	text_jump UnknownText_0x1bc4d7
-	db "@"
-; 0x26ed6
-
-UnknownText_0x26ed6: ; 0x26ed6
-	; There's nothing to put away.
-	text_jump UnknownText_0x1bc4ec
-	db "@"
-; 0x26edb
-
-UnknownText_0x26edb: ; 0x26edb
-	; Set up the @ .
-	text_jump UnknownText_0x1bc509
-	db "@"
-; 0x26ee0
-
-UnknownText_0x26ee0: ; 0x26ee0
-	; Put away the @ and set up the @ .
-	text_jump UnknownText_0x1bc51c
-	db "@"
-; 0x26ee5
-
-UnknownText_0x26ee5: ; 0x26ee5
-	; That's already set up.
-	text_jump UnknownText_0x1bc546
-	db "@"
-; 0x26eea
-
-GetDecorationName_c_de: ; 26eea
-	ld a, c
-	ld h, d
-	ld l, e
-	call GetDecorationName
-	ret
-; 26ef1
-
-DecorationFlagAction_c: ; 26ef1
-	ld a, c
-	jp DecorationFlagAction
-; 26ef5
-
-
-GetDecorationName_c: ; 26ef5 (9:6ef5)
-	ld a, c
-	call GetDecorationID
-	ld hl, StringBuffer1
-	push hl
-	call GetDecorationName
-	pop de
-	ret
-
-
-SetSpecificDecorationFlag: ; 26f02
-	ld a, c
-	call GetDecorationID
-	ld b, SET_FLAG
-	call DecorationFlagAction
-	ret
-; 26f0c
-
-GetDecorationID: ; 26f0c
-	push hl
-	push de
-	ld e, a
-	ld d, 0
-	ld hl, DecorationIDs
-	add hl, de
-	ld a, [hl]
-	pop de
-	pop hl
-	ret
-; 26f19
-
-SetAllDecorationFlags: ; 26f19
-	ld hl, DecorationIDs
-.loop
-	ld a, [hli]
-	cp -1
-	jr z, .done
-	push hl
-	ld b, SET_FLAG
-	call DecorationFlagAction
-	pop hl
-	jr .loop
-
-.done
-	ret
-; 26f2b
-
-DecorationIDs: ; 26f2b
-	db DECO_FEATHERY_BED ; 2
-	db DECO_PINK_BED ; 3
-	db DECO_POLKADOT_BED ; 4
-	db DECO_PIKACHU_BED ; 5
-
-	db DECO_RED_CARPET ; 7
-	db DECO_BLUE_CARPET ; 8
-	db DECO_YELLOW_CARPET ; 9
-	db DECO_GREEN_CARPET ; a
-
-	db DECO_MAGNAPLANT ; c
-	db DECO_TROPICPLANT ; d
-	db DECO_JUMBOPLANT ; e
-
-	db DECO_TOWN_MAP ; 10
-	db DECO_PIKACHU_POSTER ; 11
-	db DECO_CLEFAIRY_POSTER ; 12
-	db DECO_JIGGLYPUFF_POSTER ; 13
-
-	db DECO_FAMICOM ; 15
-	db DECO_SNES ; 16
-	db DECO_N64 ; 17
-	db DECO_VIRTUAL_BOY ; 18
-
-	db DECO_PIKACHU_DOLL ; 1e
-	db DECO_SURF_PIKACHU_DOLL ; 1f
-	db DECO_CLEFAIRY_DOLL ; 20
-	db DECO_JIGGLYPUFF_DOLL ; 21
-	db DECO_BULBASAUR_DOLL ; 22
-	db DECO_CHARMANDER_DOLL ; 23
-	db DECO_SQUIRTLE_DOLL ; 24
-	db DECO_POLIWAG_DOLL ; 25
-	db DECO_DIGLETT_DOLL ; 26
-	db DECO_STARMIE_DOLL ; 27
-	db DECO_MAGIKARP_DOLL ; 28
-	db DECO_ODDISH_DOLL ; 29
-	db DECO_GENGAR_DOLL ; 2a
-	db DECO_SHELLDER_DOLL ; 2b
-	db DECO_GRIMER_DOLL ; 2c
-	db DECO_VOLTORB_DOLL ; 2d
-	db DECO_WEEDLE_DOLL ; 2e
-	db DECO_UNOWN_DOLL ; 2f
-	db DECO_GEODUDE_DOLL ; 30
-	db DECO_MACHOP_DOLL ; 31
-	db DECO_TENTACOOL_DOLL ; 32
-	db DECO_BIG_SNORLAX_DOLL ; 1a
-	db DECO_BIG_ONIX_DOLL ; 1b
-	db DECO_BIG_LAPRAS_DOLL ; 1c
-	db DECO_GOLD_TROPHY_DOLL ; 33
-	db DECO_SILVER_TROPHY_DOLL ; 34
-	db -1
-; 26f59
-
-DescribeDecoration:: ; 26f59
-	ld a, b
-	ld hl, JumpTable_DecorationDesc
-	rst JumpTable
-	ret
-; 26f5f
-
-JumpTable_DecorationDesc: ; 26f5f
-	dw DecorationDesc_Poster
-	dw DecorationDesc_LeftOrnament
-	dw DecorationDesc_RightOrnament
-	dw DecorationDesc_GiantDoll
-	dw DecorationDesc_Console
-; 26f69
-
-DecorationDesc_Poster: ; 26f69
-	ld a, [Poster]
-	ld hl, DecorationDesc_PosterPointers
-	ld de, 3
-	call IsInArray
-	jr c, .nope
-	ld de, DecorationDesc_NullPoster
-	ld b, BANK(DecorationDesc_NullPoster)
-	ret
-
-.nope
-	ld b, BANK(DecorationDesc_TownMapPoster)
-	inc hl
-	ld a, [hli]
-	ld d, [hl]
-	ld e, a
-	ret
-; 26f84
-
-DecorationDesc_PosterPointers: ; 26f84
-	dbw DECO_TOWN_MAP, DecorationDesc_TownMapPoster
-	dbw DECO_PIKACHU_POSTER, DecorationDesc_PikachuPoster
-	dbw DECO_CLEFAIRY_POSTER, DecorationDesc_ClefairyPoster
-	dbw DECO_JIGGLYPUFF_POSTER, DecorationDesc_JigglypuffPoster
-	db -1
-; 26f91
-
-DecorationDesc_TownMapPoster: ; 0x26f91
-	loadfont
-	writetext UnknownText_0x26f9b
-	closetext
-	special Special_TownMap
-	loadmovesprites
-	end
-; 0x26f9b
-
-UnknownText_0x26f9b: ; 0x26f9b
-	; It's the TOWN MAP.
-	text_jump UnknownText_0x1bc55d
-	db "@"
-; 0x26fa0
-
-DecorationDesc_PikachuPoster: ; 0x26fa0
-	jumptext UnknownText_0x26fa3
-; 0x26fa3
-
-UnknownText_0x26fa3: ; 0x26fa3
-	; It's a poster of a cute PIKACHU.
-	text_jump UnknownText_0x1bc570
-	db "@"
-; 0x26fa8
-
-DecorationDesc_ClefairyPoster: ; 0x26fa8
-	jumptext UnknownText_0x26fab
-; 0x26fab
-
-UnknownText_0x26fab: ; 0x26fab
-	; It's a poster of a cute CLEFAIRY.
-	text_jump UnknownText_0x1bc591
-	db "@"
-; 0x26fb0
-
-DecorationDesc_JigglypuffPoster: ; 0x26fb0
-	jumptext UnknownText_0x26fb3
-; 0x26fb3
-
-UnknownText_0x26fb3: ; 0x26fb3
-	; It's a poster of a cute JIGGLYPUFF.
-	text_jump UnknownText_0x1bc5b3
-	db "@"
-; 0x26fb8
-
-DecorationDesc_NullPoster: ; 26fb8
-	end
-; 26fb9
-
-DecorationDesc_LeftOrnament: ; 26fb9
-	ld a, [LeftOrnament]
-	jr DecorationDesc_OrnamentOrConsole
-
-DecorationDesc_RightOrnament: ; 26fbe
-	ld a, [RightOrnament]
-	jr DecorationDesc_OrnamentOrConsole
-
-DecorationDesc_Console: ; 26fc3
-	ld a, [Console]
-	jr DecorationDesc_OrnamentOrConsole
-
-DecorationDesc_OrnamentOrConsole: ; 26fc8
-	ld c, a
-	ld de, StringBuffer3
-	call GetDecorationName_c_de
-	ld b, BANK(Unknown_26fd5)
-	ld de, Unknown_26fd5
-	ret
-; 26fd5
-
-Unknown_26fd5: ; 26fd5
-	dbw $53, UnknownText_0x26fd8
-; 26fd8
-
-UnknownText_0x26fd8: ; 0x26fd8
-	; It's an adorable @ .
-	text_jump UnknownText_0x1bc5d7
-	db "@"
-; 0x26fdd
-
-DecorationDesc_GiantDoll: ; 26fdd
-	ld b, BANK(Unknown_26fe3)
-	ld de, Unknown_26fe3
-	ret
-; 26fe3
-
-Unknown_26fe3: ; 26fe3
-	dbw $53, UnknownText_0x26fe6
-; 26fe6
-
-UnknownText_0x26fe6: ; 0x26fe6
-	; A giant doll! It's fluffy and cuddly.
-	text_jump UnknownText_0x1bc5ef
-	db "@"
-; 0x26feb
-
-ToggleMaptileDecorations: ; 26feb
-	lb de, 0, 4
-	ld a, [Bed]
-	call SetDecorationTile
-	lb de, 7, 4
-	ld a, [Plant]
-	call SetDecorationTile
-	lb de, 6, 0
-	ld a, [Poster]
-	call SetDecorationTile
-	call SetPosterVisibility
-	lb de, 0, 0
-	call PadCoords_de
-	ld a, [Carpet]
-	and a
-	ret z
-	call _GetDecorationSprite
-	ld [hl], a
-	push af
-	lb de, 0, 2
-	call PadCoords_de
-	pop af
-	inc a
-	ld [hli], a
-	inc a
-	ld [hli], a
-	dec a
-	ld [hl], a
-	ret
-; 27027
-
-SetPosterVisibility: ; 27027
-	ld b, SET_FLAG
-	ld a, [Poster]
-	and a
-	jr nz, .ok
-	ld b, RESET_FLAG
-
-.ok
-	ld de, EVENT_KRISS_ROOM_POSTER
-	jp EventFlagAction
-; 27037
-
-SetDecorationTile: ; 27037
-	push af
-	call PadCoords_de
-	pop af
-	and a
-	ret z
-	call _GetDecorationSprite
-	ld [hl], a
-	ret
-; 27043
-
-ToggleDecorationsVisibility: ; 27043
-	ld de, EVENT_KRISS_HOUSE_2F_CONSOLE
-	ld hl, VariableSprites + SPRITE_CONSOLE - SPRITE_VARS
-	ld a, [Console]
-	call ToggleDecorationVisibility
-	ld de, EVENT_KRISS_HOUSE_2F_DOLL_1
-	ld hl, VariableSprites + SPRITE_DOLL_1 - SPRITE_VARS
-	ld a, [LeftOrnament]
-	call ToggleDecorationVisibility
-	ld de, EVENT_KRISS_HOUSE_2F_DOLL_2
-	ld hl, VariableSprites + SPRITE_DOLL_2 - SPRITE_VARS
-	ld a, [RightOrnament]
-	call ToggleDecorationVisibility
-	ld de, EVENT_KRISS_HOUSE_2F_BIG_DOLL
-	ld hl, VariableSprites + SPRITE_BIG_DOLL - SPRITE_VARS
-	ld a, [BigDoll]
-	call ToggleDecorationVisibility
-	ret
-; 27074
-
-ToggleDecorationVisibility: ; 27074
-	and a
-	jr z, .hide
-	call _GetDecorationSprite
-	ld [hl], a
-	ld b, RESET_FLAG
-	jp EventFlagAction
-
-.hide
-	ld b, SET_FLAG
-	jp EventFlagAction
-; 27085
-
-_GetDecorationSprite: ; 27085
-	ld c, a
-	push de
-	push hl
-	callba GetDecorationSprite
-	pop hl
-	pop de
-	ld a, c
-	ret
-; 27092
-
 PadCoords_de: ; 27092
 	ld a, d
 	add 4
@@ -18006,7 +12172,7 @@
 
 INCLUDE "trainers/dvs.asm"
 
-Function2715c: ; 2715c
+_ReturnToBattle_UseBall: ; 2715c
 	call ClearBGPalettes
 	call ClearTileMap
 	ld a, [BattleType]
@@ -18021,7 +12187,7 @@
 .continue
 	callba GetMonFrontpic
 	callba _LoadBattleFontsHPBar
-	call ClearSGB
+	call GetMemSGBLayout
 	call WriteBackup
 	call LoadStandardMenuDataHeader
 	call WaitBGMap
@@ -18132,7 +12298,7 @@
 	ld a, $0
 	call GetSRAMBank
 	ld d, $0
-	ld b, $2
+	ld b, CHECK_FLAG
 	predef FlagPredef
 	call CloseSRAM
 	ld a, c
@@ -18140,1065 +12306,8 @@
 	ret
 ; 29ff8
 
-LoadWildMonData: ; 29ff8
-	call _GrassWildmonLookup
-	jr c, .copy
-	ld hl, wd25a
-	xor a
-	ld [hli], a
-	ld [hli], a
-	ld [hl], a
-	jr .done_copy
-.copy
-	inc hl
-	inc hl
-	ld de, wd25a
-	ld bc, $3
-	call CopyBytes
-.done_copy
-	call _WaterWildmonLookup
-	ld a, $0
-	jr nc, .no_copy
-	inc hl
-	inc hl
-	ld a, [hl]
-.no_copy
-	ld [wd25d], a
-	ret
+INCLUDE "engine/wildmons.asm"
 
-Function2a01f: ; 2a01f
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	xor a
-	call ByteFill
-	ld a, e
-	and a
-	jr nz, .kanto
-	decoord 0, 0
-	ld hl, JohtoGrassWildMons
-	call Function2a052
-	ld hl, JohtoWaterWildMons
-	call Function2a06e
-	call Function2a0b7
-	call Function2a0cf
-	ret
-
-.kanto
-	decoord 0, 0
-	ld hl, KantoGrassWildMons
-	call Function2a052
-	ld hl, KantoWaterWildMons
-	jp Function2a06e
-; 2a052
-
-Function2a052: ; 2a052
-.loop
-	ld a, [hl]
-	cp $ff
-	ret z
-	push hl
-	ld a, [hli]
-	ld b, a
-	ld a, [hli]
-	ld c, a
-rept 3
-	inc hl
-endr
-	ld a, $15
-	call Function2a088
-	jr nc, .next
-	ld [de], a
-	inc de
-
-.next
-	pop hl
-	ld bc, $2f
-	add hl, bc
-	jr .loop
-; 2a06e
-
-Function2a06e: ; 2a06e
-.loop
-	ld a, [hl]
-	cp $ff
-	ret z
-	push hl
-	ld a, [hli]
-	ld b, a
-	ld a, [hli]
-	ld c, a
-	inc hl
-	ld a, $3
-	call Function2a088
-	jr nc, .next
-	ld [de], a
-	inc de
-
-.next
-	pop hl
-	ld bc, 9
-	add hl, bc
-	jr .loop
-; 2a088
-
-Function2a088: ; 2a088
-	inc hl
-.loop
-	push af
-	ld a, [wd265]
-	cp [hl]
-	jr z, .found
-rept 2
-	inc hl
-endr
-	pop af
-	dec a
-	jr nz, .loop
-	and a
-	ret
-
-.found
-	pop af
-	jp Function2a09c
-; 2a09c
-
-Function2a09c: ; 2a09c
-	push de
-	call GetWorldMapLocation
-	ld c, a
-	hlcoord 0, 0
-	ld de, SCREEN_WIDTH * SCREEN_HEIGHT
-.loop
-	ld a, [hli]
-	cp c
-	jr z, .found
-	dec de
-	ld a, e
-	or d
-	jr nz, .loop
-	ld a, c
-	pop de
-	scf
-	ret
-
-.found
-	pop de
-	and a
-	ret
-; 2a0b7
-
-Function2a0b7: ; 2a0b7
-	ld a, [wRoamMon1Species]
-	ld b, a
-	ld a, [wd265]
-	cp b
-	ret nz
-	ld a, [wRoamMon1MapGroup]
-	ld b, a
-	ld a, [wRoamMon1MapNumber]
-	ld c, a
-	call Function2a09c
-	ret nc
-	ld [de], a
-	inc de
-	ret
-; 2a0cf
-
-Function2a0cf: ; 2a0cf
-	ld a, [wRoamMon2Species]
-	ld b, a
-	ld a, [wd265]
-	cp b
-	ret nz
-	ld a, [wRoamMon2MapGroup]
-	ld b, a
-	ld a, [wRoamMon2MapNumber]
-	ld c, a
-	call Function2a09c
-	ret nc
-	ld [de], a
-	inc de
-	ret
-; 2a0e7
-
-TryWildEncounter:: ; 2a0e7
-; Try to trigger a wild encounter.
-	call .EncounterRate
-	jr nc, .no_battle
-	call ChooseWildEncounter
-	jr nz, .no_battle
-	call CheckRepelEffect
-	jr nc, .no_battle
-	xor a
-	ret
-
-.no_battle
-	xor a ; BATTLETYPE_NORMAL
-	ld [TempWildMonSpecies], a
-	ld [BattleType], a
-	ld a, 1
-	and a
-	ret
-; 2a103
-
-.EncounterRate: ; 2a103
-	call GetMapEncounterRate
-	call ApplyMusicEffectOnEncounterRate
-	call ApplyCleanseTagEffectOnEncounterRate
-	call Random
-	cp b
-	ret
-; 2a111
-
-GetMapEncounterRate: ; 2a111
-	ld hl, wd25a
-	call CheckOnWater
-	ld a, 3
-	jr z, .ok
-	ld a, [TimeOfDay]
-.ok
-	ld c, a
-	ld b, 0
-	add hl, bc
-	ld b, [hl]
-	ret
-; 2a124
-
-ApplyMusicEffectOnEncounterRate:: ; 2a124
-; Pokemon March and Ruins of Alph signal double encounter rate.
-; Pokemon Lullaby halves encounter rate.
-	ld a, [wMapMusic]
-	cp MUSIC_POKEMON_MARCH
-	jr z, .double
-	cp MUSIC_RUINS_OF_ALPH_RADIO
-	jr z, .double
-	cp MUSIC_POKEMON_LULLABY
-	ret nz
-	srl b
-	ret
-
-.double
-	sla b
-	ret
-; 2a138
-
-ApplyCleanseTagEffectOnEncounterRate:: ; 2a138
-; Cleanse Tag halves encounter rate.
-	ld hl, PartyMon1Item
-	ld de, PARTYMON_STRUCT_LENGTH
-	ld a, [PartyCount]
-	ld c, a
-.loop
-	ld a, [hl]
-	cp CLEANSE_TAG
-	jr z, .cleansetag
-	add hl, de
-	dec c
-	jr nz, .loop
-	ret
-
-.cleansetag
-	srl b
-	ret
-; 2a14f
-
-ChooseWildEncounter: ; 2a14f
-	call LoadWildMonDataPointer
-	jp nc, .nowildbattle
-	call CheckEncounterRoamMon
-	jp c, .startwildbattle
-
-rept 3
-	inc hl
-endr
-	call CheckOnWater
-	ld de, .WaterMonTable
-	jr z, .watermon
-rept 2
-	inc hl
-endr
-	ld a, [TimeOfDay]
-	ld bc, $e
-	call AddNTimes
-	ld de, .GrassMonTable
-
-.watermon
-; hl contains the pointer to the wild mon data, let's save that to the stack
-	push hl
-.randomloop
-	call Random
-	cp 100
-	jr nc, .randomloop
-	inc a ; 1 <= a <= 100
-	ld b, a
-	ld h, d
-	ld l, e
-; This next loop chooses which mon to load up.
-.prob_bracket_loop
-	ld a, [hli]
-	cp b
-	jr nc, .got_it
-	inc hl
-	jr .prob_bracket_loop
-
-.got_it
-	ld c, [hl]
-	ld b, 0
-	pop hl
-	add hl, bc ; this selects our mon
-	ld a, [hli]
-	ld b, a
-; If the Pokemon is encountered by surfing, we need to give the levels some variety.
-	call CheckOnWater
-	jr nz, .ok
-; Check if we buff the wild mon, and by how much.
-	call Random
-	cp 35 percent
-	jr c, .ok
-	inc b
-	cp 65 percent
-	jr c, .ok
-	inc b
-	cp 85 percent
-	jr c, .ok
-	inc b
-	cp 95 percent
-	jr c, .ok
-	inc b
-; Store the level
-.ok
-	ld a, b
-	ld [CurPartyLevel], a
-	ld b, [hl]
-	; ld a, b
-	call ValidateTempWildMonSpecies
-	jr c, .nowildbattle
-
-	ld a, b ; This is in the wrong place.
-	cp UNOWN
-	jr nz, .done
-
-	ld a, [UnlockedUnowns]
-	and a
-	jr z, .nowildbattle
-
-.done
-	jr .loadwildmon
-
-.nowildbattle
-	ld a, 1
-	and a
-	ret
-
-.loadwildmon
-	ld a, b
-	ld [TempWildMonSpecies], a
-
-.startwildbattle
-	xor a
-	ret
-; 2a1cb
-
-.GrassMonTable: ; 2a1cb
-	db 30,  $0 ; 30% chance
-	db 60,  $2 ; 30% chance
-	db 80,  $4 ; 20% chance
-	db 90,  $6 ; 10% chance
-	db 95,  $8 ;  5% chance
-	db 99,  $a ;  4% chance
-	db 100, $c ;  1% chance
-; 2a1d9
-
-.WaterMonTable: ; 2a1d9
-	db 60,  $0 ; 60% chance
-	db 90,  $2 ; 30% chance
-	db 100, $4 ; 10% chance
-; 2a1df
-
-CheckRepelEffect:: ; 2a1df
-; If there is no active Repel, there's no need to be here.
-	ld a, [wRepelEffect]
-	and a
-	jr z, .encounter
-; Get the first Pokemon in your party that isn't fainted.
-	ld hl, PartyMon1HP
-	ld bc, PARTYMON_STRUCT_LENGTH - 1
-.loop
-	ld a, [hli]
-	or [hl]
-	jr nz, .ok
-	add hl, bc
-	jr .loop
-
-.ok
-; to PartyMonLevel
-rept 4
-	dec hl
-endr
-
-	ld a, [CurPartyLevel]
-	cp [hl]
-	jr nc, .encounter
-	and a
-	ret
-
-.encounter
-	scf
-	ret
-; 2a200
-
-LoadWildMonDataPointer: ; 2a200
-	call CheckOnWater
-	jr z, _WaterWildmonLookup
-
-_GrassWildmonLookup: ; 2a205
-	ld hl, SwarmGrassWildMons
-	ld bc, GRASS_WILDDATA_LENGTH
-	call _SwarmWildmonCheck
-	ret c
-	ld hl, JohtoGrassWildMons
-	ld de, KantoGrassWildMons
-	call _JohtoWildmonCheck
-	ld bc, GRASS_WILDDATA_LENGTH
-	jr _NormalWildmonOK
-
-_WaterWildmonLookup: ; 2a21d
-	ld hl, SwarmWaterWildMons
-	ld bc, WATER_WILDDATA_LENGTH
-	call _SwarmWildmonCheck
-	ret c
-	ld hl, JohtoWaterWildMons
-	ld de, KantoWaterWildMons
-	call _JohtoWildmonCheck
-	ld bc, WATER_WILDDATA_LENGTH
-	jr _NormalWildmonOK
-
-_JohtoWildmonCheck
-	call IsInJohto
-	and a
-	ret z
-	ld h, d
-	ld l, e
-	ret
-
-_SwarmWildmonCheck
-	call CopyCurrMapDE
-	push hl
-	ld hl, SwarmFlags
-	bit 2, [hl]
-	pop hl
-	jr z, .CheckYanma
-	ld a, [wdfcc]
-	cp d
-	jr nz, .CheckYanma
-	ld a, [wdfcd]
-	cp e
-	jr nz, .CheckYanma
-	call LookUpWildmonsForMapDE
-	jr nc, _NoSwarmWildmon
-	scf
-	ret
-
-.CheckYanma
-	push hl
-	ld hl, SwarmFlags
-	bit 3, [hl]
-	pop hl
-	jr z, _NoSwarmWildmon
-	ld a, [wdc5a]
-	cp d
-	jr nz, _NoSwarmWildmon
-	ld a, [wdc5b]
-	cp e
-	jr nz, _NoSwarmWildmon
-	call LookUpWildmonsForMapDE
-	jr nc, _NoSwarmWildmon
-	scf
-	ret
-
-_NoSwarmWildmon
-	and a
-	ret
-
-_NormalWildmonOK
-	call CopyCurrMapDE
-	jr LookUpWildmonsForMapDE
-; 2a27f
-
-CopyCurrMapDE: ; 2a27f
-	ld a, [MapGroup]
-	ld d, a
-	ld a, [MapNumber]
-	ld e, a
-	ret
-; 2a288
-
-LookUpWildmonsForMapDE: ; 2a288
-	push hl
-	ld a, [hl]
-	inc a
-	jr z, .nope
-	ld a, d
-	cp [hl]
-	jr nz, .next
-	inc hl
-	ld a, e
-	cp [hl]
-	jr z, .yup
-
-.next
-	pop hl
-	add hl, bc
-	jr LookUpWildmonsForMapDE
-
-.nope
-	pop hl
-	and a
-	ret
-
-.yup
-	pop hl
-	scf
-	ret
-; 2a2a0
-
-
-InitRoamMons: ; 2a2a0
-; initialize wRoamMon structs
-
-; species
-	ld a, RAIKOU
-	ld [wRoamMon1Species], a
-	ld a, ENTEI
-	ld [wRoamMon2Species], a
-;	ld a, SUICUNE
-;	ld [wRoamMon3Species], a
-
-; level
-	ld a, 40
-	ld [wRoamMon1Level], a
-	ld [wRoamMon2Level], a
-;	ld [wRoamMon3Level], a
-
-; raikou starting map
-	ld a, GROUP_ROUTE_42
-	ld [wRoamMon1MapGroup], a
-	ld a, MAP_ROUTE_42
-	ld [wRoamMon1MapNumber], a
-
-; entei starting map
-	ld a, GROUP_ROUTE_37
-	ld [wRoamMon2MapGroup], a
-	ld a, MAP_ROUTE_37
-	ld [wRoamMon2MapNumber], a
-
-; suicune starting map
-;	ld a, GROUP_ROUTE_38
-;	ld [wRoamMon3MapGroup], a
-;	ld a, MAP_ROUTE_38
-;	ld [wRoamMon3MapNumber], a
-
-; hp
-	xor a ; generate new stats
-	ld [wRoamMon1HP], a
-	ld [wRoamMon2HP], a
-;	ld [wRoamMon3HP], a
-
-	ret
-; 2a2ce
-
-
-CheckEncounterRoamMon: ; 2a2ce
-	push hl
-; Don't trigger an encounter if we're on water.
-	call CheckOnWater
-	jr z, .DontEncounterRoamMon
-; Load the current map group and number to de
-	call CopyCurrMapDE
-; Randomly select a beast.
-	call Random
-	cp 100 ; 25/64 chance
-	jr nc, .DontEncounterRoamMon
-	and %00000011 ; Of that, a 3/4 chance.  Running total: 75/256, or around 29.3%.
-	jr z, .DontEncounterRoamMon
-	dec a ; 1/3 chance that it's Entei, 1/3 chance that it's Raikou
-; Compare its current location with yours
-	ld hl, wRoamMon1MapGroup
-	ld c, a
-	ld b, 0
-	ld a, 7 ; length of the RoamMon struct
-	call AddNTimes
-	ld a, d
-	cp [hl]
-	jr nz, .DontEncounterRoamMon
-	inc hl
-	ld a, e
-	cp [hl]
-	jr nz, .DontEncounterRoamMon
-; We've decided to take on a beast, so stage its information for battle.
-rept 3
-	dec hl
-endr
-	ld a, [hli]
-	ld [TempWildMonSpecies], a
-	ld a, [hl]
-	ld [CurPartyLevel], a
-	ld a, BATTLETYPE_ROAMING
-	ld [BattleType], a
-
-	pop hl
-	scf
-	ret
-
-.DontEncounterRoamMon
-	pop hl
-	and a
-	ret
-; 2a30d
-
-
-UpdateRoamMons: ; 2a30d
-	ld a, [wRoamMon1MapGroup]
-	cp GROUP_N_A
-	jr z, .SkipRaikou
-	ld b, a
-	ld a, [wRoamMon1MapNumber]
-	ld c, a
-	call .Update
-	ld a, b
-	ld [wRoamMon1MapGroup], a
-	ld a, c
-	ld [wRoamMon1MapNumber], a
-
-.SkipRaikou
-	ld a, [wRoamMon2MapGroup]
-	cp GROUP_N_A
-	jr z, .SkipEntei
-	ld b, a
-	ld a, [wRoamMon2MapNumber]
-	ld c, a
-	call .Update
-	ld a, b
-	ld [wRoamMon2MapGroup], a
-	ld a, c
-	ld [wRoamMon2MapNumber], a
-
-.SkipEntei
-	ld a, [wRoamMon3MapGroup]
-	cp GROUP_N_A
-	jr z, .SkipSuicune
-	ld b, a
-	ld a, [wRoamMon3MapNumber]
-	ld c, a
-	call .Update
-	ld a, b
-	ld [wRoamMon3MapGroup], a
-	ld a, c
-	ld [wRoamMon3MapNumber], a
-
-.SkipSuicune
-	jp _BackUpMapIndices
-; 2a355
-
-
-.Update: ; 2a355
-	ld hl, RoamMaps
-.loop
-; Are we at the end of the table?
-	ld a, [hl]
-	cp -1
-	ret z
-; Is this the correct entry?
-	ld a, b
-	cp [hl]
-	jr nz, .next
-	inc hl
-	ld a, c
-	cp [hl]
-	jr z, .yes
-; We don't have the correct entry yet, so let's continue.  A 0 terminates each entry.
-.next
-	ld a, [hli]
-	and a
-	jr nz, .next
-	jr .loop
-
-; We have the correct entry now, so let's choose a random map from it.
-.yes
-	inc hl
-	ld d, h
-	ld e, l
-.update_loop
-	ld h, d
-	ld l, e
-; Choose which map to warp to.
-	call Random
-	and $1f ; 1/8n chance it moves to a completely random map, where n is the number of roaming connections from the current map.
-	jr z, JumpRoamMon
-	and 3
-	cp [hl]
-	jr nc, .update_loop ; invalid index, try again
-	inc hl
-	ld c, a
-	ld b, $0
-rept 2
-	add hl, bc
-endr
-	ld a, [wdfe7]
-	cp [hl]
-	jr nz, .done
-	inc hl
-	ld a, [wdfe6]
-	cp [hl]
-	jr z, .update_loop
-	dec hl
-
-.done
-	ld a, [hli]
-	ld b, a
-	ld c, [hl]
-	ret
-
-JumpRoamMons: ; 2a394
-	ld a, [wRoamMon1MapGroup]
-	cp GROUP_N_A
-	jr z, .SkipRaikou
-	call JumpRoamMon
-	ld a, b
-	ld [wRoamMon1MapGroup], a
-	ld a, c
-	ld [wRoamMon1MapNumber], a
-.SkipRaikou
-
-	ld a, [wRoamMon2MapGroup]
-	cp GROUP_N_A
-	jr z, .SkipEntei
-	call JumpRoamMon
-	ld a, b
-	ld [wRoamMon2MapGroup], a
-	ld a, c
-	ld [wRoamMon2MapNumber], a
-.SkipEntei
-
-	ld a, [wRoamMon3MapGroup]
-	cp GROUP_N_A
-	jr z, .SkipSuicune
-	call JumpRoamMon
-	ld a, b
-	ld [wRoamMon3MapGroup], a
-	ld a, c
-	ld [wRoamMon3MapNumber], a
-.SkipSuicune
-
-	jp _BackUpMapIndices
-
-JumpRoamMon: ; 2a3cd
-.loop
-	ld hl, RoamMaps
-.innerloop1 ; This loop is completely unnecessary.
-	call Random ; Choose a random number
-	and $f ; Take the lower nybble only.  This gives a number between 0 and 15.
-	cp $10 ; If the number is greater than or equal to 16, loop back and try again.
-	jr nc, .innerloop1 ; I'm sure you can guess why this check is bogus.
-	inc a
-	ld b, a
-.innerloop2 ; Loop to get hl to the address of the chosen roam map.
-	dec b
-	jr z, .ok
-.innerloop3 ; Loop to skip the current roam map, which is terminated by a 0.
-	ld a, [hli]
-	and a
-	jr nz, .innerloop3
-	jr .innerloop2
-; Check to see if the selected map is the one the player is currently in.  If so, try again.
-.ok
-	ld a, [MapGroup]
-	cp [hl]
-	jr nz, .done
-	inc hl
-	ld a, [MapNumber]
-	cp [hl]
-	jr z, .loop
-	dec hl
-; Return the map group and number in bc.
-.done
-	ld a, [hli]
-	ld b, a
-	ld c, [hl]
-	ret
-; 2a3f6
-
-_BackUpMapIndices: ; 2a3f6
-	ld a, [wdfe4]
-	ld [wdfe6], a
-	ld a, [wdfe5]
-	ld [wdfe7], a
-	ld a, [MapNumber]
-	ld [wdfe4], a
-	ld a, [MapGroup]
-	ld [wdfe5], a
-	ret
-; 2a40f
-
-RoamMaps: ; 2a40f
-; Maps that roaming monsters can be on,
-; and possible maps they can jump to.
-; Notably missing are Route 40 and
-; Route 41, which are water routes.
-	roam_map ROUTE_29, 2, ROUTE_30, ROUTE_46
-	roam_map ROUTE_30, 2, ROUTE_29, ROUTE_31
-	roam_map ROUTE_31, 3, ROUTE_30, ROUTE_32, ROUTE_36
-	roam_map ROUTE_32, 3, ROUTE_36, ROUTE_31, ROUTE_33
-	roam_map ROUTE_33, 2, ROUTE_32, ROUTE_34
-	roam_map ROUTE_34, 2, ROUTE_33, ROUTE_35
-	roam_map ROUTE_35, 2, ROUTE_34, ROUTE_36
-	roam_map ROUTE_36, 4, ROUTE_35, ROUTE_31, ROUTE_32, ROUTE_37
-	roam_map ROUTE_37, 3, ROUTE_36, ROUTE_38, ROUTE_42
-	roam_map ROUTE_38, 3, ROUTE_37, ROUTE_39, ROUTE_42
-	roam_map ROUTE_39, 1, ROUTE_38
-	roam_map ROUTE_42, 4, ROUTE_43, ROUTE_44, ROUTE_37, ROUTE_38
-	roam_map ROUTE_43, 2, ROUTE_42, ROUTE_44
-	roam_map ROUTE_44, 3, ROUTE_42, ROUTE_43, ROUTE_45
-	roam_map ROUTE_45, 2, ROUTE_44, ROUTE_46
-	roam_map ROUTE_46, 2, ROUTE_45, ROUTE_29
-	db -1
-; 2a4a0
-
-ValidateTempWildMonSpecies: ; 2a4a0
-; Due to a development oversight, this function is called with the wild Pokemon's level, not its species, in a.
-	and a
-	jr z, .nowildmon ; = 0
-	cp NUM_POKEMON + 1 ; 252
-	jr nc, .nowildmon ; >= 252
-	and a ; 1 <= Species <= 251
-	ret
-
-.nowildmon
-	scf
-	ret
-; 2a4ab
-
-RandomPhoneRareWildMon: ; 2a4ab
-; Related to the phone?
-	callba GetCallerLocation
-	ld d, b
-	ld e, c
-	ld hl, JohtoGrassWildMons
-	ld bc, GRASS_WILDDATA_LENGTH
-	call LookUpWildmonsForMapDE
-	jr c, .GetGrassmon
-	ld hl, KantoGrassWildMons
-	call LookUpWildmonsForMapDE
-	jr nc, .done
-
-.GetGrassmon
-	push hl
-	ld bc, 5 + 4 * 2 ; Location of the level of the 5th wild Pokemon in that map
-	add hl, bc
-	ld a, [TimeOfDay]
-	ld bc, 7 * 2
-	call AddNTimes
-.randloop1
-	call Random
-	and $3
-	jr z, .randloop1
-	dec a
-	ld c, a
-	ld b, $0
-rept 2
-	add hl, bc
-endr
-; We now have the pointer to one of the last (rarest) three wild Pokemon found in that area.
-	inc hl
-	ld c, [hl] ; Contains the species index of this rare Pokemon
-	pop hl
-	ld de, 5 + 0 * 2
-	add hl, de
-	inc hl ; Species index of the most common Pokemon on that route
-	ld b, 4
-.loop2
-	ld a, [hli]
-	cp c ; Compare this most common Pokemon with the rare one stored in c.
-	jr z, .done
-	inc hl
-	dec b
-	jr nz, .loop2
-; This Pokemon truly is rare.
-	push bc
-	dec c
-	ld a, c
-	call CheckSeenMon
-	pop bc
-	jr nz, .done
-; Since we haven't seen it, have the caller tell us about it.
-	ld de, StringBuffer1
-	call CopyName1
-	ld a, c
-	ld [wd265], a
-	call GetPokemonName
-	ld hl, UnknownText_0x2a51a
-	call PrintText
-	xor a
-	ld [ScriptVar], a
-	ret
-
-.done
-	ld a, $1
-	ld [ScriptVar], a
-	ret
-; 2a51a
-
-UnknownText_0x2a51a: ; 0x2a51a
-	; I just saw some rare @  in @ . I'll call you if I see another rare #MON, OK?
-	text_jump UnknownText_0x1bd34b
-	db "@"
-; 0x2a51f
-
-RandomPhoneWildMon: ; 2a51f
-	callba GetCallerLocation
-	ld d, b
-	ld e, c
-	ld hl, JohtoGrassWildMons
-	ld bc, GRASS_WILDDATA_LENGTH
-	call LookUpWildmonsForMapDE
-	jr c, .ok
-	ld hl, KantoGrassWildMons
-	call LookUpWildmonsForMapDE
-
-.ok
-	ld bc, 5 + 0 * 2
-	add hl, bc
-	ld a, [TimeOfDay]
-	inc a
-	ld bc, 7 * 2
-.loop
-	dec a
-	jr z, .done
-	add hl, bc
-	jr .loop
-
-.done
-	call Random
-	and $3
-	ld c, a
-	ld b, $0
-rept 2
-	add hl, bc
-endr
-	inc hl
-	ld a, [hl]
-	ld [wd265], a
-	call GetPokemonName
-	ld hl, StringBuffer1
-	ld de, StringBuffer4
-	ld bc, PKMN_NAME_LENGTH
-	jp CopyBytes
-; 2a567
-
-RandomPhoneMon: ; 2a567
-; Get a random monster owned by the trainer who's calling.
-	callba GetCallerLocation
-	ld hl, TrainerGroups
-	ld a, d
-	dec a
-	ld c, a
-	ld b, 0
-rept 2
-	add hl, bc
-endr
-	ld a, BANK(TrainerGroups)
-	call GetFarHalfword
-
-.skip_trainer
-	dec e
-	jr z, .skipped
-.skip
-	ld a, BANK(Trainers)
-	call GetFarByte
-	inc hl
-	cp -1
-	jr nz, .skip
-	jr .skip_trainer
-.skipped
-
-.skip_name
-	ld a, BANK(Trainers)
-	call GetFarByte
-	inc hl
-	cp "@"
-	jr nz, .skip_name
-
-	ld a, BANK(Trainers)
-	call GetFarByte
-	inc hl
-	ld bc, 2
-	cp 0
-	jr z, .got_mon_length
-	ld bc, 2 + NUM_MOVES
-	cp 1
-	jr z, .got_mon_length
-	ld bc, 2 + 1
-	cp 2
-	jr z, .got_mon_length
-	ld bc, 2 + 1 + NUM_MOVES
-.got_mon_length
-
-	ld e, 0
-	push hl
-.count_mon
-	inc e
-	add hl, bc
-	ld a, BANK(Trainers)
-	call GetFarByte
-	cp -1
-	jr nz, .count_mon
-	pop hl
-
-.rand
-	call Random
-	and 7
-	cp e
-	jr nc, .rand
-
-	inc a
-.get_mon
-	dec a
-	jr z, .got_mon
-	add hl, bc
-	jr .get_mon
-.got_mon
-
-	inc hl ; species
-	ld a, BANK(Trainers)
-	call GetFarByte
-	ld [wd265], a
-	call GetPokemonName
-	ld hl, StringBuffer1
-	ld de, StringBuffer4
-	ld bc, PKMN_NAME_LENGTH
-	jp CopyBytes
-; 2a5e9
-
-
-JohtoGrassWildMons: ; 0x2a5e9
-INCLUDE "data/wild/johto_grass.asm"
-
-JohtoWaterWildMons: ; 0x2b11d
-INCLUDE "data/wild/johto_water.asm"
-
-KantoGrassWildMons: ; 0x2b274
-INCLUDE "data/wild/kanto_grass.asm"
-
-KantoWaterWildMons: ; 0x2b7f7
-INCLUDE "data/wild/kanto_water.asm"
-
-SwarmGrassWildMons: ; 0x2b8d0
-INCLUDE "data/wild/swarm_grass.asm"
-
-SwarmWaterWildMons: ; 0x2b92f
-INCLUDE "data/wild/swarm_water.asm"
-
-
 DetermineLinkBattleResult: ; 2b930
 	callba UpdateEnemyMonInParty
 	ld hl, PartyMon1HP
@@ -19641,7 +12750,7 @@
 	ld [hli], a
 	ld [hl], $6a
 	callba Function2c10d ; no need to callba
-	ld b, $8
+	ld b, SCGB_08
 	call GetSGBLayout
 	call SetPalettes
 	ld a, $e4
@@ -19967,12 +13076,12 @@
 	call Function2c6ac
 	ld [de], a
 	inc de
-	ld a, BANK(s0_abe4)
+	ld a, BANK(sBackupMysteryGiftItem)
 	call GetSRAMBank
-	ld a, [s0_abe4]
+	ld a, [sBackupMysteryGiftItem]
 	ld [de], a
 	inc de
-	ld a, [s0_abe4 + 1]
+	ld a, [sBackupMysteryGiftItem + 1]
 	ld [de], a
 	ld a, $14
 	ld [wca00], a
@@ -20119,7 +13228,7 @@
 	db DECO_BIG_SNORLAX_DOLL
 	db DECO_BIG_ONIX_DOLL
 	db DECO_BIG_LAPRAS_DOLL
-	db DECO_1D
+	db DECO_DOLLS
 	db DECO_PIKACHU_DOLL
 	db DECO_SURF_PIKACHU_DOLL
 	db DECO_CLEFAIRY_DOLL
@@ -20133,15 +13242,15 @@
 	db DECO_DIGLETT_DOLL
 	db DECO_BLUE_CARPET
 	db DECO_YELLOW_CARPET
-	db DECO_0F
+	db DECO_POSTERS
 	db DECO_PIKACHU_POSTER
 	db DECO_N64
-	db DECO_19
-	db DECO_01
+	db DECO_BIG_DOLLS
+	db DECO_BEDS
 	db DECO_FEATHERY_BED
 	db DECO_POLKADOT_BED
 	db DECO_PIKACHU_BED
-	db DECO_06
+	db DECO_CARPETS
 	db DECO_RED_CARPET
 	db DECO_GREEN_CARPET
 	db DECO_CLEFAIRY_POSTER
@@ -20148,7 +13257,7 @@
 	db DECO_ODDISH_DOLL
 	db DECO_MAGNAPLANT
 	db DECO_GENGAR_DOLL
-	db DECO_14
+	db DECO_CONSOLES
 	db DECO_PINK_BED
 	db DECO_SQUIRTLE_DOLL
 	db DECO_STARMIE_DOLL
@@ -20235,9 +13344,9 @@
 	call ClearBGPalettes
 
 Function2c80a: ; 2c80a
-	callba Function5004f
-	callba Function50405
-	callba Function503e0
+	callba LoadPartyMenuGFX
+	callba InitPartyMenuWithCancel
+	callba InitPartyMenuGFX
 	ld a, $3
 	ld [PartyMenuActionText], a
 .loopback
@@ -20431,7 +13540,7 @@
 	ld a, [MenuSelection2]
 	dec a
 	ld b, a
-	ld a, [wd0e2]
+	ld a, [wTMHMPocketScrollPosition]
 	add b
 	ld b, a
 	ld a, [wd265]
@@ -20475,7 +13584,7 @@
 	ld a, b
 	bit 7, a
 	jr nz, .skip
-	ld hl, wd0e2
+	ld hl, wTMHMPocketScrollPosition
 	ld a, [hl]
 	and a
 	jp z, Function2c915
@@ -20496,7 +13605,7 @@
 	jr z, .loop
 	dec b
 	jr nz, .loop
-	ld hl, wd0e2
+	ld hl, wTMHMPocketScrollPosition
 	inc [hl]
 	call Function2c9e2
 	jp Function2c946
@@ -20628,7 +13737,7 @@
 
 Function2cab5: ; 2cab5 (b:4ab5)
 	ld hl, TMsHMs
-	ld a, [wd0e2]
+	ld a, [wTMHMPocketScrollPosition]
 	ld b, a
 	inc b
 	ld c, 0
@@ -20711,11 +13820,11 @@
 	dec a
 	ld [hl], a
 	ret nz
-	ld a, [wd0e2]
+	ld a, [wTMHMPocketScrollPosition]
 	and a
 	ret z
 	dec a
-	ld [wd0e2], a
+	ld [wTMHMPocketScrollPosition], a
 	ret
 
 Function2cb2a: ; 2cb2a (b:4b2a)
@@ -21077,7 +14186,7 @@
 endr
 	ld [hl], a
 
-	ld [wd0e4], a
+	ld [wMenuScrollPosition], a
 	ld [CriticalHit], a
 	ld [BattleMonSpecies], a
 	ld [wBattleParticipantsNotFainted], a
@@ -21259,7 +14368,7 @@
 	ld a, [hli]
 	ld [de], a
 	ld a, [hl]
-	ld [wc652], a
+	ld [wEnemyTrainerBaseReward], a
 	ret
 ; 3959c
 
@@ -21340,7 +14449,7 @@
 	jp [hl]
 
 .done
-	jp Function3991b
+	jp ComputeTrainerReward
 
 .cal2
 	ld a, BANK(sMysteryGiftTrainer)
@@ -21576,18 +14685,18 @@
 	jr .loop
 ; 3991b
 
-Function3991b: ; 3991b (e:591b)
-	ld hl, hMultiplicand - 1
+ComputeTrainerReward: ; 3991b (e:591b)
+	ld hl, hProduct
 	xor a
 rept 3
 	ld [hli], a
 endr
-	ld a, [wc652] ; base reward
+	ld a, [wEnemyTrainerBaseReward]
 	ld [hli], a
 	ld a, [CurPartyLevel]
 	ld [hl], a
 	call Multiply
-	ld hl, wc686
+	ld hl, wBattleReward
 	xor a
 	ld [hli], a
 	ld a, [hProduct + 2]
@@ -21620,9 +14729,9 @@
 	call CloseSRAM
 	jr z, .not_cal2
 
-	ld a, BANK(s0_abfe)
+	ld a, BANK(sMysteryGiftPartnerName)
 	call GetSRAMBank
-	ld hl, s0_abfe
+	ld hl, sMysteryGiftPartnerName
 	call CopyTrainerName
 	jp CloseSRAM
 
@@ -21752,691 +14861,8 @@
 
 INCLUDE "battle/moves/moves.asm"
 
+INCLUDE "engine/evolve.asm"
 
-Function421d8: ; 421d8
-	ld hl, EvolvableFlags
-	xor a
-	ld [hl], a
-	ld a, [CurPartyMon]
-	ld c, a
-	ld b, $1
-	call Function42577
-
-Function421e6: ; 421e6
-	xor a
-	ld [wd268], a
-	dec a
-	ld [CurPartyMon], a
-	push hl
-	push bc
-	push de
-	ld hl, PartyCount
-
-	push hl
-
-Function421f5: ; 421f5
-	ld hl, CurPartyMon
-	inc [hl]
-
-	pop hl
-
-	inc hl
-	ld a, [hl]
-	cp $ff
-	jp z, Function423ff
-
-	ld [Buffer1], a
-
-	push hl
-	ld a, [CurPartyMon]
-	ld c, a
-	ld hl, EvolvableFlags
-	ld b, 2
-	call Function42577
-	ld a, c
-	and a
-	jp z, Function421f5
-
-	ld a, [Buffer1]
-	dec a
-	ld b, 0
-	ld c, a
-	ld hl, EvosAttacksPointers
-rept 2
-	add hl, bc
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-
-	push hl
-	xor a
-	ld [MonType], a
-	predef CopyPkmnToTempMon
-	pop hl
-
-.asm_42230
-	ld a, [hli]
-	and a
-	jr z, Function421f5
-
-	ld b, a
-
-	cp EVOLVE_TRADE
-	jr z, .trade
-
-	ld a, [wLinkMode]
-	and a
-	jp nz, .asm_423f9
-
-	ld a, b
-	cp EVOLVE_ITEM
-	jp z, .item
-
-	ld a, [wd1e9]
-	and a
-	jp nz, .asm_423f9
-
-	ld a, b
-	cp EVOLVE_LEVEL
-	jp z, .level
-
-	cp EVOLVE_HAPPINESS
-	jr z, .happiness
-
-
-; EVOLVE_STAT
-	ld a, [TempMonLevel]
-	cp [hl]
-	jp c, .asm_423f8
-
-	call Function42461
-	jp z, .asm_423f8
-
-	push hl
-	ld de, TempMonAttack
-	ld hl, TempMonDefense
-	ld c, 2
-	call StringCmp
-	ld a, ATK_EQ_DEF
-	jr z, .asm_4227a
-	ld a, ATK_LT_DEF
-	jr c, .asm_4227a
-	ld a, ATK_GT_DEF
-.asm_4227a
-	pop hl
-
-	inc hl
-	cp [hl]
-	jp nz, .asm_423f9
-
-	inc hl
-	jr .asm_422fd
-
-
-.happiness
-	ld a, [TempMonHappiness]
-	cp 220
-	jp c, .asm_423f9
-
-	call Function42461
-	jp z, .asm_423f9
-
-	ld a, [hli]
-	cp TR_ANYTIME
-	jr z, .asm_422fd
-	cp TR_MORNDAY
-	jr z, .asm_422a4
-
-; TR_NITE
-	ld a, [TimeOfDay]
-	cp NITE
-	jp nz, .asm_423fa
-	jr .asm_422fd
-
-.asm_422a4
-	ld a, [TimeOfDay]
-	cp NITE
-	jp z, .asm_423fa
-	jr .asm_422fd
-
-
-.trade
-	ld a, [wLinkMode]
-	and a
-	jp z, .asm_423f9
-
-	call Function42461
-	jp z, .asm_423f9
-
-	ld a, [hli]
-	ld b, a
-	inc a
-	jr z, .asm_422fd
-
-	ld a, [wLinkMode]
-	cp LINK_TIMECAPSULE
-	jp z, .asm_423fa
-
-	ld a, [TempMonItem]
-	cp b
-	jp nz, .asm_423fa
-
-	xor a
-	ld [TempMonItem], a
-	jr .asm_422fd
-
-
-.item
-	ld a, [hli]
-	ld b, a
-	ld a, [CurItem]
-	cp b
-	jp nz, .asm_423fa
-
-	ld a, [wd1e9]
-	and a
-	jp z, .asm_423fa
-	ld a, [wLinkMode]
-	and a
-	jp nz, .asm_423fa
-	jr .asm_422fd
-
-
-.level
-	ld a, [hli]
-	ld b, a
-	ld a, [TempMonLevel]
-	cp b
-	jp c, .asm_423fa
-	call Function42461
-	jp z, .asm_423fa
-
-.asm_422fd
-	ld a, [TempMonLevel]
-	ld [CurPartyLevel], a
-	ld a, $1
-	ld [wd268], a
-
-	push hl
-
-	ld a, [hl]
-	ld [Buffer2], a
-	ld a, [CurPartyMon]
-	ld hl, PartyMonNicknames
-	call GetNick
-	call CopyName1
-	ld hl, UnknownText_0x42482
-	call PrintText
-
-	ld c, 50
-	call DelayFrames
-
-	xor a
-	ld [hBGMapMode], a
-	hlcoord 0, 0
-	lb bc, 12, 20
-	call ClearBox
-
-	ld a, $1
-	ld [hBGMapMode], a
-	call ClearSprites
-
-	callba EvolutionAnimation
-
-	push af
-	call ClearSprites
-	pop af
-	jp c, Function42454
-
-	ld hl, UnknownText_0x42473
-	call PrintText
-
-	pop hl
-
-	ld a, [hl]
-	ld [CurSpecies], a
-	ld [TempMonSpecies], a
-	ld [Buffer2], a
-	ld [wd265], a
-	call GetPokemonName
-
-	push hl
-	ld hl, UnknownText_0x42478
-	call PrintTextBoxText
-	callba MobileFn_106094
-
-	ld de, MUSIC_NONE
-	call PlayMusic
-	ld de, SFX_CAUGHT_MON
-	call PlaySFX
-	call WaitSFX
-
-	ld c, 40
-	call DelayFrames
-
-	call ClearTileMap
-	call Function42414
-	call GetBaseData
-
-	ld hl, TempMonExp + 2
-	ld de, TempMonMaxHP
-	ld b, $1
-	predef CalcPkmnStats
-
-	ld a, [CurPartyMon]
-	ld hl, PartyMons
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call AddNTimes
-	ld e, l
-	ld d, h
-	ld bc, MON_MAXHP
-	add hl, bc
-	ld a, [hli]
-	ld b, a
-	ld c, [hl]
-	ld hl, TempMonMaxHP + 1
-	ld a, [hld]
-	sub c
-	ld c, a
-	ld a, [hl]
-	sbc b
-	ld b, a
-	ld hl, TempMonHP + 1
-	ld a, [hl]
-	add c
-	ld [hld], a
-	ld a, [hl]
-	adc b
-	ld [hl], a
-
-	ld hl, TempMonSpecies
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call CopyBytes
-
-	ld a, [CurSpecies]
-	ld [wd265], a
-	xor a
-	ld [MonType], a
-	call LearnLevelMoves
-	ld a, [wd265]
-	dec a
-	call SetSeenAndCaughtMon
-
-	ld a, [wd265]
-	cp UNOWN
-	jr nz, .asm_423ec
-
-	ld hl, TempMonDVs
-	predef GetUnownLetter
-	callab Functionfba18
-
-.asm_423ec
-	pop de
-	pop hl
-	ld a, [TempMonSpecies]
-	ld [hl], a
-	push hl
-	ld l, e
-	ld h, d
-	jp Function421f5
-; 423f8
-
-.asm_423f8
-	inc hl
-.asm_423f9
-	inc hl
-.asm_423fa
-	inc hl
-	jp .asm_42230
-; 423fe
-
-Function423fe: ; 423fe
-	pop hl
-
-Function423ff: ; 423ff
-	pop de
-	pop bc
-	pop hl
-	ld a, [wLinkMode]
-	and a
-	ret nz
-	ld a, [wBattleMode]
-	and a
-	ret nz
-	ld a, [wd268]
-	and a
-	call nz, RestartMapMusic
-	ret
-; 42414
-
-Function42414: ; 42414
-	ld a, [CurSpecies]
-	push af
-	ld a, [BaseDexNo]
-	ld [wd265], a
-	call GetPokemonName
-	pop af
-	ld [CurSpecies], a
-	ld hl, StringBuffer1
-	ld de, StringBuffer2
-.asm_4242b
-	ld a, [de]
-	inc de
-	cp [hl]
-	inc hl
-	ret nz
-	cp "@"
-	jr nz, .asm_4242b
-	ld a, [CurPartyMon]
-	ld bc, PKMN_NAME_LENGTH
-	ld hl, PartyMonNicknames
-	call AddNTimes
-	push hl
-	ld a, [CurSpecies]
-	ld [wd265], a
-	call GetPokemonName
-	ld hl, StringBuffer1
-	pop de
-	ld bc, PKMN_NAME_LENGTH
-	jp CopyBytes
-; 42454
-
-Function42454: ; 42454
-	ld hl, UnknownText_0x4247d
-	call PrintText
-	call ClearTileMap
-	pop hl
-	jp Function421f5
-; 42461
-
-Function42461: ; 42461
-	push hl
-	ld a, [CurPartyMon]
-	ld hl, PartyMon1Item
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call AddNTimes
-	ld a, [hl]
-	cp EVERSTONE
-	pop hl
-	ret
-; 42473
-
-UnknownText_0x42473: ; 0x42473
-	; Congratulations! Your @ @
-	text_jump UnknownText_0x1c4b92
-	db "@"
-; 0x42478
-
-UnknownText_0x42478: ; 0x42478
-	; evolved into @ !
-	text_jump UnknownText_0x1c4baf
-	db "@"
-; 0x4247d
-
-UnknownText_0x4247d: ; 0x4247d
-	; Huh? @ stopped evolving!
-	text_jump UnknownText_0x1c4bc5
-	db "@"
-; 0x42482
-
-UnknownText_0x42482: ; 0x42482
-	; What? @ is evolving!
-	text_jump UnknownText_0x1c4be3
-	db "@"
-; 0x42487
-
-
-LearnLevelMoves: ; 42487
-	ld a, [wd265]
-	ld [CurPartySpecies], a
-	dec a
-	ld b, 0
-	ld c, a
-	ld hl, EvosAttacksPointers
-rept 2
-	add hl, bc
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-
-.skip_evos
-	ld a, [hli]
-	and a
-	jr nz, .skip_evos
-
-.find_move
-	ld a, [hli]
-	and a
-	jr z, .done
-
-	ld b, a
-	ld a, [CurPartyLevel]
-	cp b
-	ld a, [hli]
-	jr nz, .find_move
-
-	push hl
-	ld d, a
-	ld hl, PartyMon1Moves
-	ld a, [CurPartyMon]
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call AddNTimes
-
-	ld b, NUM_MOVES
-.check_move
-	ld a, [hli]
-	cp d
-	jr z, .has_move
-	dec b
-	jr nz, .check_move
-	jr .learn
-.has_move
-
-	pop hl
-	jr .find_move
-
-.learn
-	ld a, d
-	ld [wd262], a
-	ld [wd265], a
-	call GetMoveName
-	call CopyName1
-	predef LearnMove
-	pop hl
-	jr .find_move
-
-.done
-	ld a, [CurPartySpecies]
-	ld [wd265], a
-	ret
-; 424e1
-
-
-FillMoves: ; 424e1
-; Fill in moves at de for CurPartySpecies at CurPartyLevel
-
-	push hl
-	push de
-	push bc
-	ld hl, EvosAttacksPointers
-	ld b, 0
-	ld a, [CurPartySpecies]
-	dec a
-	add a
-	rl b
-	ld c, a
-	add hl, bc
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-.GoToAttacks
-	ld a, [hli]
-	and a
-	jr nz, .GoToAttacks
-	jr .GetLevel
-
-.NextMove
-	pop de
-.GetMove
-	inc hl
-.GetLevel
-	ld a, [hli]
-	and a
-	jp z, .done
-	ld b, a
-	ld a, [CurPartyLevel]
-	cp b
-	jp c, .done
-	ld a, [Buffer1]
-	and a
-	jr z, .CheckMove
-	ld a, [wd002]
-	cp b
-	jr nc, .GetMove
-
-.CheckMove
-	push de
-	ld c, NUM_MOVES
-.CheckRepeat
-	ld a, [de]
-	inc de
-	cp [hl]
-	jr z, .NextMove
-	dec c
-	jr nz, .CheckRepeat
-	pop de
-	push de
-	ld c, NUM_MOVES
-.CheckSlot
-	ld a, [de]
-	and a
-	jr z, .LearnMove
-	inc de
-	dec c
-	jr nz, .CheckSlot
-	pop de
-	push de
-	push hl
-	ld h, d
-	ld l, e
-	call ShiftMoves
-	ld a, [Buffer1]
-	and a
-	jr z, .ShiftedMove
-	push de
-	ld bc, PartyMon1PP - (PartyMon1Moves + NUM_MOVES - 1)
-	add hl, bc
-	ld d, h
-	ld e, l
-	call ShiftMoves
-	pop de
-
-.ShiftedMove
-	pop hl
-
-.LearnMove
-	ld a, [hl]
-	ld [de], a
-	ld a, [Buffer1]
-	and a
-	jr z, .NextMove
-	push hl
-	ld a, [hl]
-	ld hl, MON_PP - MON_MOVES
-	add hl, de
-	push hl
-	dec a
-	ld hl, Moves + MOVE_PP
-	ld bc, MOVE_LENGTH
-	call AddNTimes
-	ld a, BANK(Moves)
-	call GetFarByte
-	pop hl
-	ld [hl], a
-	pop hl
-	jr .NextMove
-
-.done
-	pop bc
-	pop de
-	pop hl
-	ret
-; 4256e
-
-ShiftMoves: ; 4256e
-	ld c, NUM_MOVES - 1
-.loop
-	inc de
-	ld a, [de]
-	ld [hli], a
-	dec c
-	jr nz, .loop
-	ret
-; 42577
-
-
-Function42577: ; 42577
-	push de
-	ld d, $0
-	predef FlagPredef
-	pop de
-	ret
-; 42581
-
-GetPreEvolution: ; 42581
-; Find the first mon to evolve into CurPartySpecies.
-
-; Return carry and the new species in CurPartySpecies
-; if a pre-evolution is found.
-
-	ld c, 0
-.loop ; For each Pokemon...
-	ld hl, EvosAttacksPointers
-	ld b, 0
-rept 2
-	add hl, bc
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-.loop2 ; For each evolution...
-	ld a, [hli]
-	and a
-	jr z, .no_evolve ; If we jump, this Pokemon does not evolve into CurPartySpecies.
-	cp EVOLVE_STAT ; This evolution type has the extra parameter of stat comparison.
-	jr nz, .not_tyrogue
-	inc hl
-
-.not_tyrogue
-	inc hl
-	ld a, [CurPartySpecies]
-	cp [hl]
-	jr z, .found_preevo
-	inc hl
-	ld a, [hl]
-	and a
-	jr nz, .loop2
-
-.no_evolve
-	inc c
-	ld a, c
-	cp NUM_POKEMON
-	jr c, .loop
-	and a
-	ret
-
-.found_preevo
-	inc c
-	ld a, c
-	ld [CurPartySpecies], a
-	scf
-	ret
-; 425b1
-
-
-
 SECTION "bank11", ROMX, BANK[$11]
 
 INCLUDE "engine/fruit_trees.asm"
@@ -22955,591 +15381,8 @@
 PokedexDataPointerTable: ; 0x44378
 INCLUDE "data/pokedex/entry_pointers.asm"
 
+INCLUDE "engine/mail.asm"
 
-Function4456e: ; 4456e
-	ld a, MON_ITEM
-	call GetPartyParamLocation
-	ld d, [hl]
-	callba ItemIsMail
-	jr nc, .asm_445be
-	call Function44648
-	cp $a
-	jr nc, .asm_445be
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	ld hl, s0_a835
-	call AddNTimes
-	ld d, h
-	ld e, l
-	ld a, [CurPartyMon]
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	ld hl, sPartyScratch1
-	call AddNTimes
-	push hl
-	ld a, BANK(s0_a834)
-	call GetSRAMBank
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call CopyBytes
-	pop hl
-	xor a
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call ByteFill
-	ld a, MON_ITEM
-	call GetPartyParamLocation
-	ld [hl], $0
-	ld hl, s0_a834
-	inc [hl]
-	call CloseSRAM
-	xor a
-	ret
-
-.asm_445be
-	scf
-	ret
-; 445c0
-
-Function445c0: ; 445c0 (11:45c0)
-	ld a, BANK(s0_a834)
-	call GetSRAMBank
-	ld a, b
-	push bc
-	ld hl, s0_a835
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call AddNTimes
-	push hl
-	add hl, bc
-	pop de
-	pop bc
-.loop
-	ld a, b
-	cp $9
-	jr z, .done
-	push bc
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call CopyBytes
-	pop bc
-	inc b
-	jr .loop
-.done
-	ld h, d
-	ld l, e
-	xor a
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call ByteFill
-	ld hl, s0_a834
-	dec [hl]
-	jp CloseSRAM
-; 445f4 (11:45f4)
-
-ReadMailMessage: ; 445f4
-	ld a, b
-	ld hl, s0_a835
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call AddNTimes
-	ld d, h
-	ld e, l
-	callba ReadAnyMail
-	ret
-
-Function44607: ; 44607
-	ld a, BANK(s0_a834)
-	call GetSRAMBank
-	push bc
-	ld a, b
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	ld hl, s0_a835
-	call AddNTimes
-	push hl
-	ld a, [CurPartyMon]
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	ld hl, sPartyScratch1
-	call AddNTimes
-	ld d, h
-	ld e, l
-	pop hl
-	push hl
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call CopyBytes
-	pop hl
-	ld de, PARTYMON_STRUCT_LENGTH - MON_MOVES
-	add hl, de
-	ld d, [hl]
-	ld a, [CurPartyMon]
-	ld hl, PartyMon1Item
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call AddNTimes
-	ld [hl], d
-	call CloseSRAM
-	pop bc
-	jp Function445c0
-; 44648 (11:4648)
-
-Function44648: ; 44648
-	ld a, BANK(s0_a834)
-	call GetSRAMBank
-	ld a, [s0_a834]
-	ld c, a
-	jp CloseSRAM
-; 44654
-
-Function44654:: ; 44654
-	push bc
-	push de
-	callba SelectMonFromParty
-	ld a, $2
-	jr c, .asm_446c6
-	ld a, [CurPartyMon]
-	ld hl, PartyMon1Item
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call AddNTimes
-	ld d, [hl]
-	callba ItemIsMail
-	ld a, $3
-	jr nc, .asm_446c6
-	ld a, BANK(sPartyScratch1)
-	call GetSRAMBank
-	ld a, [CurPartyMon]
-	ld hl, sPartyScratch1
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call AddNTimes
-	ld d, h
-	ld e, l
-	pop hl
-	pop bc
-
-	ld a, $20
-	ld [wd265], a
-.asm_44691
-	ld a, [de]
-	ld c, a
-	ld a, b
-	call GetFarByte
-	cp "@"
-	jr z, .asm_446ab
-	cp c
-	ld a, $0
-	jr nz, .asm_446c1
-	inc hl
-	inc de
-	ld a, [wd265]
-	dec a
-	ld [wd265], a
-	jr nz, .asm_44691
-
-.asm_446ab
-	callba CheckCurPartyMonFainted
-	ld a, $4
-	jr c, .asm_446c1
-	xor a
-	ld [wPokemonWithdrawDepositParameter], a
-	callba Functione039
-	ld a, $1
-
-.asm_446c1
-	call CloseSRAM
-	jr .asm_446c8
-
-.asm_446c6
-	pop de
-	pop bc
-
-.asm_446c8
-	ld [ScriptVar], a
-	ret
-; 446cc
-
-GivePokeItem:: ; 446cc
-	ld a, [PartyCount]
-	dec a
-	push af
-	push bc
-	ld hl, PartyMon1Item
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call AddNTimes
-	pop bc
-	ld [hl], b
-	pop af
-	push bc
-	push af
-	ld hl, sPartyScratch1
-	ld bc, $2f
-	call AddNTimes
-	ld d, h
-	ld e, l
-	ld hl, wd002
-	ld bc, $21
-	ld a, BANK(sPartyScratch1)
-	call GetSRAMBank
-	call CopyBytes
-	pop af
-	push af
-	ld hl, PartyMonOT
-	ld bc, NAME_LENGTH
-	call AddNTimes
-	ld bc, $a
-	call CopyBytes
-	pop af
-	ld hl, PartyMon1ID
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call AddNTimes
-	ld a, [hli]
-	ld [de], a
-	inc de
-	ld a, [hl]
-	ld [de], a
-	inc de
-	ld a, [CurPartySpecies]
-	ld [de], a
-	inc de
-	pop bc
-	ld a, b
-	ld [de], a
-	jp CloseSRAM
-; 44725
-
-
-BackupScratchmons: ; 44725
-	ld a, BANK(sPartyScratch1)
-	call GetSRAMBank
-	ld hl, sPartyScratch1
-	ld de, sPartyScratch2
-	ld bc, 6 * SCRATCHMON_STRUCT_LENGTH
-	call CopyBytes
-	ld hl, s0_a834
-	ld de, s0_aa0b
-	ld bc, 1 + 10 * SCRATCHMON_STRUCT_LENGTH
-	call CopyBytes
-	jp CloseSRAM
-; 44745
-
-RestoreScratchmons: ; 44745 (11:4745)
-	ld a, BANK(sPartyScratch1)
-	call GetSRAMBank
-	ld hl, sPartyScratch2
-	ld de, sPartyScratch1
-	ld bc, 6 * SCRATCHMON_STRUCT_LENGTH
-	call CopyBytes
-	ld hl, s0_aa0b
-	ld de, s0_a834
-	ld bc, 1 + 10 * SCRATCHMON_STRUCT_LENGTH
-	call CopyBytes
-	jp CloseSRAM
-
-DeleteScratchmons: ; 44765 (11:4765)
-	ld a, BANK(sPartyScratch1)
-	call GetSRAMBank
-	xor a
-	ld hl, sPartyScratch1
-	ld bc, 6 * SCRATCHMON_STRUCT_LENGTH
-	call ByteFill
-	xor a
-	ld hl, s0_a834
-	ld bc, 1 + 10 * SCRATCHMON_STRUCT_LENGTH
-	call ByteFill
-	jp CloseSRAM
-; 44781 (11:4781)
-
-
-Function44781: ; 44781
-	ld a, [PartyCount]
-	and a
-	jr z, .asm_4479e
-	ld e, a
-	ld hl, PartyMon1Item
-.asm_4478b
-	ld d, [hl]
-	push hl
-	push de
-	callba ItemIsMail
-	pop de
-	pop hl
-	ret c
-	ld bc, PARTYMON_STRUCT_LENGTH
-	add hl, bc
-	dec e
-	jr nz, .asm_4478b
-
-.asm_4479e
-	and a
-	ret
-; 447a0
-
-_KrisMailBoxMenu: ; 0x447a0
-	call InitMail
-	jr z, .nomail
-	call LoadStandardMenuDataHeader
-	call Function44806
-	jp WriteBackup
-
-.nomail
-	ld hl, .EmptyMailboxText
-	jp MenuTextBoxBackup
-; 0x447b4
-
-.EmptyMailboxText ; 0x447b4
-	text_jump _EmptyMailboxText
-	db "@"
-
-InitMail: ; 0x447b9
-; initialize wd0f2 and beyond with incrementing values, one per mail
-; set z if no mail
-	ld a, BANK(s0_a834)
-	call GetSRAMBank
-	ld a, [s0_a834]
-	call CloseSRAM
-	ld hl, wd0f2
-	ld [hli], a
-	and a
-
-	jr z, .done ; if no mail, we're done
-
-	; load values in memory with incrementing values starting at wd0f2
-	ld b, a
-	ld a, $1
-.loop
-	ld [hli], a
-	inc a
-	dec b
-	jr nz, .loop
-.done
-	ld [hl], $ff ; terminate
-
-	ld a, [wd0f2]
-	and a
-	ret
-; 0x447da
-
-Function447da: ; 0x447da
-	dec a
-	ld hl, s0_a835 + MON_HP - 1
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call AddNTimes
-	ld a, BANK(s0_a834)
-	call GetSRAMBank
-	ld de, StringBuffer2
-	push de
-	ld bc, NAME_LENGTH - 1
-	call CopyBytes
-	ld a, "@"
-	ld [de], a
-	call CloseSRAM
-	pop de
-	ret
-; 0x447fb
-
-Function447fb: ; 0x447fb
-	push de
-	ld a, [MenuSelection]
-	call Function447da
-	pop hl
-	jp PlaceString
-; 0x44806
-
-Function44806: ; 0x44806
-	xor a
-	ld [OBPals + 8 * 6], a
-	ld a, $1
-	ld [wd0f1], a
-.asm_4480f
-	call InitMail
-	ld hl, MenuData4494c
-	call CopyMenuDataHeader
-	xor a
-	ld [hBGMapMode], a
-	call Function352f
-	call UpdateSprites
-	ld a, [wd0f1]
-	ld [wMenuCursorBuffer], a
-	ld a, [OBPals + 8 * 6]
-	ld [wd0e4], a
-	call HandleScrollingMenu
-	ld a, [wd0e4]
-	ld [OBPals + 8 * 6], a
-	ld a, [MenuSelection2]
-	ld [wd0f1], a
-	ld a, [wcf73]
-	cp $2
-	jr z, .asm_44848
-	call Function4484a
-	jr .asm_4480f
-
-.asm_44848
-	xor a
-	ret
-; 0x4484a
-
-Function4484a: ; 0x4484a
-	ld hl, MenuData44964
-	call LoadMenuDataHeader
-	call InterpretMenu2
-	call ExitMenu
-	jr c, .asm_44860
-	ld a, [MenuSelection2]
-	dec a
-	ld hl, .JumpTable
-	rst JumpTable
-
-.asm_44860
-	ret
-; 0x44861
-
-.JumpTable
-	dw .ReadMail
-	dw .PutInPack
-	dw .AttachMail
-	dw .Cancel
-
-.ReadMail ; 0x44869
-	call FadeToMenu
-	ld a, [MenuSelection]
-	dec a
-	ld b, a
-	call ReadMailMessage
-	jp Function2b3c
-; 0x44877
-
-.PutInPack ; 0x44877
-	ld hl, .MessageLostText
-	call MenuTextBox
-	call YesNoBox
-	call ExitMenu
-	ret c
-	ld a, [MenuSelection]
-	dec a
-	call .Function448bb
-	ld a, $1
-	ld [wItemQuantityChangeBuffer], a
-	ld hl, NumItems
-	call ReceiveItem
-	jr c, .asm_4489e
-	ld hl, .PackFullText
-	jp MenuTextBoxBackup
-
-.asm_4489e
-	ld a, [MenuSelection]
-	dec a
-	ld b, a
-	call Function445c0
-	ld hl, .PutAwayText
-	jp MenuTextBoxBackup
-; 0x448ac
-
-.PutAwayText ; 0x448ac
-	text_jump ClearedMailPutAwayText
-	db "@"
-
-.PackFullText ; 0x448b1
-	text_jump MailPackFullText
-	db "@"
-
-.MessageLostText ; 0x448b6
-	text_jump MailMessageLostText
-	db "@"
-
-.Function448bb: ; 0x448bb
-	push af
-	ld a, BANK(s0_a834)
-	call GetSRAMBank
-	pop af
-	ld hl, s0_a835 + $2e
-	ld bc, $2f
-	call AddNTimes
-	ld a, [hl]
-	ld [CurItem], a
-	jp CloseSRAM
-; 0x448d2
-
-.AttachMail ; 0x448d2
-	call FadeToMenu
-	xor a
-	ld [PartyMenuActionText], a
-	call ClearBGPalettes
-.asm_448dc
-	callba Function5004f
-	callba Function50405
-	callba Function503e0
-	callba WritePartyMenuTilemap
-	callba PrintPartyMenuText
-	call WaitBGMap
-	call SetPalettes
-	call DelayFrame
-	callba PartyMenuSelect
-	jr c, .asm_44939
-	ld a, [CurPartySpecies]
-	cp EGG
-	jr z, .asm_44923
-	ld a, MON_ITEM
-	call GetPartyParamLocation
-	ld a, [hl]
-	and a
-	jr z, .asm_4492b
-	ld hl, .HoldingMailText
-	call PrintText
-	jr .asm_448dc
-
-.asm_44923
-	ld hl, .EggText
-	call PrintText
-	jr .asm_448dc
-
-.asm_4492b
-	ld a, [MenuSelection]
-	dec a
-	ld b, a
-	call Function44607
-	ld hl, .MailMovedText
-	call PrintText
-
-.asm_44939
-	jp Function2b3c
-; 0x4493c
-
-.HoldingMailText ; 0x4493c
-	text_jump MailAlreadyHoldingItemText
-	db "@"
-
-.EggText ; 0x44941
-	text_jump MailEggText
-	db "@"
-
-.MailMovedText ; 0x44946
-	text_jump MailMovedFromBoxText
-	db "@"
-
-.Cancel
-	ret
-
-MenuData4494c: ; 0x4494c
-	db %01000000 ; flags
-	db 1, 8 ; start coords
-	db $a, $12 ; end coords
-	dw .MenuData2
-	db 1 ; default option
-
-.MenuData2
-	db %00010000 ; flags
-	db 4, 0 ; rows/columns?
-	db 1 ; horizontal spacing?
-	dbw 0,wd0f2 ; text pointer
-	dba Function447fb
-	dbw 0,0
-	dbw 0,0
-
-MenuData44964: ; 0x44964
-	db %01000000 ; flags
-	db 0, 0 ; start coords
-	db 9, $d ; end coords
-	dw .MenuData2
-	db 1 ; default option
-
-.MenuData2
-	db %10000000 ; flags
-	db 4 ; items
-	db "READ MAIL@"
-	db "PUT IN PACK@"
-	db "ATTACH MAIL@"
-	db "CANCEL@"
-
-
 SECTION "bank12", ROMX, BANK[$12]
 
 Function48000: ; 48000
@@ -23554,7 +15397,7 @@
 	ld [wd478], a
 	ld [wd002], a
 	ld [wd003], a
-	; could have done "ld a, [wd479] \ and -4", saved four operations
+	; could have done "ld a, [wd479] \ and %11111100", saved four operations
 	ld a, [wd479]
 	res 0, a
 	ld [wd479], a
@@ -23564,1837 +15407,8 @@
 	ret
 ; 4802f
 
+INCLUDE "misc/mobile_12.asm"
 
-Function4802f: ; 4802f (12:402f)
-	xor a
-	set 6, a
-	ld [wd002], a
-	ld hl, wd003
-	set 0, [hl]
-	ld a, c
-	and a
-	call z, Function48000
-	call ClearBGPalettes
-	call Function48d3d
-	ld a, [wd479]
-	bit 1, a
-	jr z, .asm_4805a
-	ld a, [wd003]
-	set 0, a
-	set 1, a
-	set 2, a
-	set 3, a
-	ld [wd003], a
-.asm_4805a
-	call Function486bf
-	call LoadFontsExtra
-	ld de, GFX_488c3
-	ld hl, VTiles2 tile $10
-	lb bc, BANK(GFX_488c3), 1
-	call Request1bpp
-	ld de, GFX_488cb
-	ld hl, VTiles2 tile $11
-	lb bc, BANK(GFX_488cb), 1
-	call Request1bpp
-	call Function4a3a7
-	call ClearBGPalettes
-	ld a, [wd002]
-	bit 6, a
-	jr z, .asm_4808a
-	call Function48689
-	jr .asm_480d7
-.asm_4808a
-	ld a, $5
-	ld [MusicFade], a
-	ld a, MUSIC_MOBILE_ADAPTER_MENU % $100
-	ld [MusicFadeIDLo], a
-	ld a, MUSIC_MOBILE_ADAPTER_MENU / $100
-	ld [MusicFadeIDHi], a
-	ld c, 20
-	call DelayFrames
-	ld b, $1
-	call Function4930f
-	call ClearBGPalettes
-	hlcoord 0, 0
-	ld b, $2
-	ld c, $14
-	call ClearBox
-	hlcoord 0, 1
-	ld a, $c
-	ld [hl], a
-	ld bc, $13
-	add hl, bc
-	ld [hl], a
-	ld de, MobileProfileString
-	hlcoord 1, 1
-	call PlaceString
-	hlcoord 0, 2
-	ld b, $a
-	ld c, $12
-	call Function48cdc
-	hlcoord 2, 4
-	ld de, String_48482
-	call PlaceString
-.asm_480d7
-	hlcoord 2, 6
-	ld de, String_48489
-	call PlaceString
-	hlcoord 2, 8
-	ld de, String_4848d
-	call PlaceString
-	hlcoord 2, 10
-	ld de, String_48495
-	call PlaceString
-	hlcoord 2, 12
-	ld de, String_4849e
-	call PlaceString
-	ld a, [wd002]
-	bit 6, a
-	jr nz, .asm_48113
-	ld a, [PlayerGender]
-	ld hl, Strings_484fb
-	call GetNthString
-	ld d, h
-	ld e, l
-	hlcoord 11, 4
-	call PlaceString
-.asm_48113
-	hlcoord 11, 6
-	call Function487ec
-	ld a, [wd474]
-	dec a
-	ld hl, Prefectures
-	call GetNthString
-	ld d, h
-	ld e, l
-	hlcoord 11, 8
-	call PlaceString
-	hlcoord 11, 10
-	call Function489ea
-	hlcoord 0, 14
-	ld b, $2
-	ld c, $12
-	call TextBox
-	hlcoord 1, 16
-	ld de, String_48275
-	call PlaceString
-	call Function48187
-	call Function3200
-	call SetPalettes
-	call Function1bc9
-	ld hl, MenuSelection2
-	ld b, [hl]
-	push bc
-	jr asm_4815f
-
-Function48157: ; 48157 (12:4157)
-	call Function1bd3
-	ld hl, MenuSelection2
-	ld b, [hl]
-	push bc
-
-asm_4815f: ; 4815f (12:415f)
-	bit 0, a
-	jp nz, Function4820d
-	ld b, a
-	ld a, [wd002]
-	bit 6, a
-	jr z, .asm_48177
-	ld hl, wd479
-	bit 1, [hl]
-	jr z, .asm_48177
-	bit 1, b
-	jr nz, .asm_4817a
-.asm_48177
-	jp Function48272
-.asm_4817a
-	call ClearBGPalettes
-	call Function48d30
-	pop bc
-	call ClearTileMap
-	ld a, $ff
-	ret
-
-Function48187: ; 48187 (12:4187)
-	ld a, [wd479]
-	bit 1, a
-	jr nz, .asm_481f1
-	ld a, [wd003]
-	ld d, a
-	call Function48725
-	jr c, .asm_481a2
-	lb bc, 1, 4
-	hlcoord 2, 12
-	call ClearBox
-	jr .asm_481ad
-.asm_481a2
-	push de
-	hlcoord 2, 12
-	ld de, String_4849e
-	call PlaceString
-	pop de
-.asm_481ad
-	ld a, [wd002]
-	bit 6, a
-	jr nz, .asm_481c1
-	bit 0, d
-	jr nz, .asm_481c1
-	lb bc, 1, 8
-	hlcoord 11, 4
-	call ClearBox
-.asm_481c1
-	bit 1, d
-	jr nz, .asm_481ce
-	lb bc, 1, 8
-	hlcoord 11, 6
-	call ClearBox
-.asm_481ce
-	bit 2, d
-	jr nz, .asm_481db
-	lb bc, 2, 8
-	hlcoord 11, 7
-	call ClearBox
-.asm_481db
-	bit 3, d
-	jr nz, .asm_481f1
-	ld a, [wd479]
-	bit 0, a
-	jr nz, .asm_481f8
-	lb bc, 1, 8
-	hlcoord 11, 10
-	call ClearBox
-	jr .asm_48201
-.asm_481f1
-	ld a, [wd479]
-	bit 0, a
-	jr nz, .asm_48201
-.asm_481f8
-	hlcoord 11, 10
-	ld de, String_48202
-	call PlaceString
-.asm_48201
-	ret
-; 48202 (12:4202)
-
-String_48202: ; 48202
-	db "Tell Later@"
-; 4820d
-
-Function4820d: ; 4820d (12:420d)
-	call Function1bee
-	ld hl, MenuSelection2
-	ld a, [hl]
-	push af
-	ld a, [wd002]
-	bit 6, a
-	jr z, .asm_4821f
-	pop af
-	inc a
-	push af
-.asm_4821f
-	pop af
-	cp $1
-	jr z, asm_4828d
-	cp $2
-	jp z, Function4876f
-	cp $3
-	jp z, Function48304
-	cp $4
-	jp z, Function488d3
-	ld a, $2
-	call Function1ff8
-	ld a, [wd002]
-	bit 6, a
-	jr z, .asm_4825c
-	jr .asm_4825c
-; 48241 (12:4241)
-
-	hlcoord 1, 15
-	ld b, $2
-	ld c, $12
-	call ClearBox
-	ld de, String_484a1
-	hlcoord 1, 16
-	call PlaceString
-	call WaitBGMap
-	ld c, 48
-	call DelayFrames
-
-.asm_4825c
-	call ClearBGPalettes
-	call Function48d30
-	pop bc
-	call ClearTileMap
-	ld b, $8
-	call GetSGBLayout
-	ld hl, wd479
-	set 1, [hl]
-	xor a
-	ret
-
-Function48272: ; 48272 (12:4272)
-	jp Function4840c
-; 48275 (12:4275)
-
-String_48275: ; 48275
-	db "Personal Info@"
-; 48283
-
-Function48283: ; 48283 (12:4283)
-	lb bc, 2, 18
-	hlcoord 1, 15
-	call ClearBox
-	ret
-
-asm_4828d: ; 4828d (12:428d)
-	call Function48283
-	hlcoord 1, 16
-	ld de, String_484b1
-	call PlaceString
-	ld hl, MenuDataHeader_0x484f1
-	call LoadMenuDataHeader
-	call Function4873c
-	hlcoord 11, 2
-	ld b, $4
-	ld c, $7
-	call Function48cdc
-	hlcoord 13, 4
-	ld de, String_484fb
-	call PlaceString
-	hlcoord 13, 6
-	ld de, String_484ff
-	call PlaceString
-	call WaitBGMap
-	ld a, [PlayerGender]
-	inc a
-	ld [wMenuCursorBuffer], a
-	call Function1bc9
-	call PlayClickSFX
-	call ExitMenu
-	bit 0, a
-	jp z, Function4840c
-	ld hl, MenuSelection2
-	ld a, [hl]
-	ld hl, Strings_484fb
-	cp $1
-	jr z, .asm_482ed
-.asm_482e1
-	ld a, [hli]
-	cp $50
-	jr nz, .asm_482e1
-	ld a, $1
-	ld [PlayerGender], a
-	jr .asm_482f1
-.asm_482ed
-	xor a
-	ld [PlayerGender], a
-.asm_482f1
-	ld d, h
-	ld e, l
-	hlcoord 11, 4
-	call PlaceString
-	ld a, [wd003]
-	set 0, a
-	ld [wd003], a
-	jp Function4840c
-
-Function48304: ; 48304 (12:4304)
-	call Function48283
-	hlcoord 1, 16
-	ld de, String_484cf
-	call PlaceString
-	ld hl, MenuDataHeader_0x48504
-	call LoadMenuDataHeader
-	ld hl, MenuDataHeader_0x48513
-	call LoadMenuDataHeader
-	hlcoord 10, 0
-	ld b, $c
-	ld c, $8
-	call Function48cdc
-	ld a, [wMenuCursorBuffer]
-	ld b, a
-	ld a, [wd0e4]
-	ld c, a
-	push bc
-	ld a, [wd474]
-	dec a
-	cp $29
-	jr c, .asm_4833f
-	sub $29
-	inc a
-	ld [wMenuCursorBuffer], a
-	ld a, $29
-.asm_4833f
-	ld [wd0e4], a
-	callba Function104148
-.asm_48348
-	call HandleScrollingMenu
-	ld de, $629
-	call Function48383
-	jr c, .asm_48348
-	ld d, a
-	pop bc
-	ld a, b
-	ld [wMenuCursorBuffer], a
-	ld a, c
-	ld [wd0e4], a
-	ld a, d
-	push af
-	call ExitMenu
-	call ExitMenu
-	pop af
-	ld a, [hJoyPressed]
-	bit 0, a
-	jr z, .asm_48377
-	call Function483bb
-	ld a, [wd003]
-	set 2, a
-	ld [wd003], a
-.asm_48377
-	call Function48187
-	callba Function104148
-	jp Function4840c
-
-Function48383: ; 48383 (12:4383)
-	push bc
-	push af
-	bit 5, a
-	jr nz, .asm_48390
-	bit 4, a
-	jr nz, .asm_4839f
-	and a
-	jr .asm_483b7
-.asm_48390
-	ld a, [wd0e4]
-	sub d
-	ld [wd0e4], a
-	jr nc, .asm_483af
-	xor a
-	ld [wd0e4], a
-	jr .asm_483af
-.asm_4839f
-	ld a, [wd0e4]
-	add d
-	ld [wd0e4], a
-	cp e
-	jr c, .asm_483af
-	ld a, e
-	ld [wd0e4], a
-	jr .asm_483af
-.asm_483af
-	ld hl, MenuSelection2
-	ld a, [hl]
-	ld [wMenuCursorBuffer], a
-	scf
-.asm_483b7
-	pop bc
-	ld a, b
-	pop bc
-	ret
-
-Function483bb: ; 483bb (12:43bb)
-	ld hl, wcf77
-	ld a, [hl]
-	inc a
-	ld [wd474], a
-	dec a
-	ld b, a
-	ld hl, Prefectures
-.asm_483c8
-	and a
-	jr z, .asm_483d5
-.asm_483cb
-	ld a, [hli]
-	cp "@"
-	jr nz, .asm_483cb
-	ld a, b
-	dec a
-	ld b, a
-	jr .asm_483c8
-.asm_483d5
-	ld d, h
-	ld e, l
-	ld b, $2
-	ld c, $8
-	hlcoord 11, 7
-	call ClearBox
-	hlcoord 11, 8
-	call PlaceString
-	ret
-; 483e8 (12:43e8)
-
-Function483e8: ; 483e8
-	push de
-	ld hl, Prefectures
-	ld a, [MenuSelection]
-	cp $ff
-	jr nz, .asm_483f8
-	ld hl, Wakayama ; last string
-	jr .asm_48405
-
-.asm_483f8
-	ld d, a
-	and a
-	jr z, .asm_48405
-.asm_483fc
-	ld a, [hli]
-	cp "@"
-	jr nz, .asm_483fc
-	ld a, d
-	dec a
-	jr .asm_483f8
-
-.asm_48405
-	ld d, h
-	ld e, l
-	pop hl
-	call PlaceString
-	ret
-; 4840c
-
-Function4840c: ; 4840c (12:440c)
-	call Function48187
-	call Function48283
-	hlcoord 1, 16
-	ld de, String_48275
-	call PlaceString
-	call Function486bf
-	pop bc
-	ld hl, MenuSelection2
-	ld [hl], b
-	ld a, [wd002]
-	bit 6, a
-	jr nz, .asm_48437
-	ld b, $9
-	ld c, $1
-	hlcoord 1, 4
-	call ClearBox
-	jp Function48157
-.asm_48437
-	ld b, $7
-	ld c, $1
-	hlcoord 1, 6
-	call ClearBox
-	jp Function48157
-
-Function48444: ; 48444 (12:4444)
-	push bc
-	push af
-	push de
-	push hl
-	ld hl, Unknown_4845d
-.asm_4844b
-	and a
-	jr z, .asm_48453
-rept 2
-	inc hl
-endr
-	dec a
-	jr .asm_4844b
-.asm_48453
-	ld d, h
-	ld e, l
-	pop hl
-	call PlaceString
-	pop de
-	pop af
-	pop bc
-	ret
-; 4845d (12:445d)
-
-Unknown_4845d: ; 4845d
-; 4845d
-	db "0@"
-	db "1@"
-	db "2@"
-	db "3@"
-	db "4@"
-	db "5@"
-	db "6@"
-	db "7@"
-	db "8@"
-	db "9@"
-; 48471
-
-MobileProfileString: db "  Mobile Profile@"
-String_48482: db "Gender@"
-String_48489: db "Age@"
-String_4848d: db "Address@"
-String_48495: db "Zip Code@"
-String_4849e: db "OK@"
-String_484a1: db "Profile Changed@"
-String_484b1: db "Boy or girl?@"
-String_484be: db "How old are you?@"
-String_484cf: db "Where do you live?@"
-String_484e2: db "Your zip code?@"
-; 484f1
-
-MenuDataHeader_0x484f1: ; 0x484f1
-	db $40 ; flags
-	db 02, 11 ; start coords
-	db 07, 19 ; end coords
-	dw MenuData2_0x484f9
-	db 1 ; default option
-; 0x484f9
-
-MenuData2_0x484f9: ; 0x484f9
-	db $a0 ; flags
-	db 2 ; items
-Strings_484fb:
-String_484fb: db "Boy@"
-String_484ff: db "Girl@"
-; 0x48504
-
-MenuDataHeader_0x48504: ; 0x48504
-	db $40 ; flags
-	db 00, 10 ; start coords
-	db 17, 19 ; end coords
-
-MenuDataHeader_0x48509: ; 0x48509
-	db $40 ; flags
-	db 05, 10 ; start coords
-	db 07, 19 ; end coords
-
-MenuDataHeader_0x4850e: ; 0x4850e
-	db $40 ; flags
-	db 09, 10 ; start coords
-	db 11, 19 ; end coords
-
-MenuDataHeader_0x48513: ; 0x48513
-	db $40 ; flags
-	db 01, 11 ; start coords
-	db 12, 18 ; end coords
-	dw MenuData2_0x4851b
-	db 1 ; default option
-; 0x4851b
-
-MenuData2_0x4851b: ; 0x4851b
-	db $1d ; flags
-	db 6 ; items
-
-Unknown_4851d: ; 4851d
-	db $00, $01, $12, $2b, $45, $12, $e8, $43, $00, $00, $00, $00, $00, $00, $2e, $00, $01, $02, $03, $04
-	db $05, $06, $07, $08, $09, $0a, $0b, $0c, $0d, $0e, $0f, $10, $11, $12, $13, $14, $15, $16, $17, $18
-	db $19, $1a, $1b, $1c, $1d, $1e, $1f, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $2a, $2b, $2c
-	db $2d, $ff
-
-Prefectures:
-Aichi:     db "あいちけん@"   ; Aichi
-Aomori:    db "あおもりけん@" ; Aomori
-Akita:     db "あきたけん@"   ; Akita
-Ishikawa:  db "いしかわけん@" ; Ishikawa
-Ibaraki:   db "いばらきけん@" ; Ibaraki
-Iwate:     db "いわてけん@"   ; Iwate
-Ehime:     db "えひめけん@"   ; Ehime
-Oita:      db "おおいたけん@" ; Oita
-Osakafu:   db "おおさかふ@"   ; Osakafu
-Okayama:   db "おかやまけん@" ; Okayama
-Okinawa:   db "おきなわけん@" ; Okinawa
-Kagawa:    db "かがわけん@"   ; Kagawa
-Kagoshima: db "かごしまけん@" ; Kagoshima
-Kanagawa:  db "かながわけん@" ; Kanagawa
-Gifu:      db "ぎふけん@"     ; Gifu
-Kyotofu:   db "きょうとふ@"   ; Kyotofu
-Kumamoto:  db "くまもとけん@" ; Kumamoto
-Gunma:     db "ぐんまけん@"   ; Gunma
-Kochi:     db "こうちけん@"   ; Kochi
-Saitama:   db "さいたまけん@" ; Saitama
-Saga:      db "さがけん@"     ; Saga
-Shiga:     db "しがけん@"     ; Shiga
-Shizuoka:  db "しずおかけん@" ; Shizuoka
-Shimane:   db "しまねけん@"   ; Shimane
-Chiba:     db "ちばけん@"     ; Chiba
-Tokyo:     db "とうきょうと@" ; Tokyo
-Tokushima: db "とくしまけん@" ; Tokushima
-Tochigi:   db "とちぎけん@"   ; Tochigi
-Tottori:   db "とっとりけん@" ; Tottori
-Toyama:    db "とやまけん@"   ; Toyama
-Nagasaki:  db "ながさきけん@" ; Nagasaki
-Nagano:    db "ながのけん@"   ; Nagano
-Naraken:   db "ならけん@"     ; Naraken
-Niigata:   db "にいがたけん@" ; Niigata
-Hyogo:     db "ひょうごけん@" ; Hyogo
-Hiroshima: db "ひろしまけん@" ; Hiroshima
-Fukui:     db "ふくいけん@"   ; Fukui
-Fukuoka:   db "ふくおかけん@" ; Fukuoka
-Fukushima: db "ふくしまけん@" ; Fukushima
-Hokkaido:  db "ほっかいどう@" ; Hokkaido
-Mie:       db "みえけん@"     ; Mie
-Miyagi:    db "みやぎけん@"   ; Miyagi
-Miyazaki:  db "みやざきけん@" ; Miyazaki
-Yamagata:  db "やまがたけん@" ; Yamagata
-Yamaguchi: db "やまぐちけん@" ; Yamaguchi
-Yamanashi: db "やまなしけん@" ; Yamanashi
-Wakayama:  db "わかやまけん@" ; Wakayama
-; 48689
-
-Function48689: ; 48689 (12:4689)
-	ld c, 7
-	call DelayFrames
-	ld b, $1
-	call Function4930f
-	call ClearBGPalettes
-	hlcoord 0, 0
-	ld b, $4
-	ld c, $14
-	call ClearBox
-	hlcoord 0, 2
-	ld a, $c
-	ld [hl], a
-	ld bc, $13
-	add hl, bc
-	ld [hl], a
-	ld de, MobileProfileString
-	hlcoord 1, 2
-	call PlaceString
-	hlcoord 0, 4
-	ld b, $8
-	ld c, $12
-	call Function48cdc
-	ret
-
-Function486bf: ; 486bf (12:46bf)
-	ld hl, wcfa1
-	ld a, [wd002]
-	bit 6, a
-	jr nz, .asm_486ce
-	ld a, $4
-	ld [hli], a
-	jr .asm_486d1
-.asm_486ce
-	ld a, $6
-	ld [hli], a
-.asm_486d1
-	ld a, $1
-	ld [hli], a
-	ld a, [wd002]
-	bit 6, a
-	jr nz, .asm_486e7
-	call Function48725
-	ld a, $4
-	jr nc, .asm_486e4
-	ld a, $5
-.asm_486e4
-	ld [hli], a
-	jr .asm_486fb
-.asm_486e7
-	ld a, [wd479]
-	bit 1, a
-	jr nz, .asm_486f8
-	call Function48725
-	jr c, .asm_486f8
-	ld a, $3
-	ld [hli], a
-	jr .asm_486fb
-.asm_486f8
-	ld a, $4
-	ld [hli], a
-.asm_486fb
-	ld a, $1
-	ld [hli], a
-	ld [hl], $0
-	set 5, [hl]
-	inc hl
-	xor a
-	ld [hli], a
-	ld a, $20
-	ld [hli], a
-	ld a, $1
-	add $40
-	add $80
-	push af
-	ld a, [wd002]
-	bit 6, a
-	jr z, .asm_4871a
-	pop af
-	add $2
-	push af
-.asm_4871a
-	pop af
-	ld [hli], a
-	ld a, $1
-rept 2
-	ld [hli], a
-endr
-	xor a
-rept 3
-	ld [hli], a
-endr
-	ret
-
-Function48725: ; 48725 (12:4725)
-	ld a, [wd003]
-	bit 0, a
-	jr z, .asm_4873a
-	bit 1, a
-	jr z, .asm_4873a
-	bit 2, a
-	jr z, .asm_4873a
-	bit 3, a
-	jr z, .asm_4873a
-	scf
-	ret
-.asm_4873a
-	and a
-	ret
-
-Function4873c: ; 4873c (12:473c)
-	ld hl, wcfa1
-	ld a, $4
-	ld [hli], a
-	ld a, $c
-	ld [hli], a
-	ld a, $2
-	ld [hli], a
-	ld a, $1
-	ld [hli], a
-	ld [hl], $0
-	set 5, [hl]
-	inc hl
-	xor a
-	ld [hli], a
-	ld a, $20
-	ld [hli], a
-	ld a, $1
-	add $2
-	ld [hli], a
-	ld a, [PlayerGender]
-	and a
-	jr z, .asm_48764
-	ld a, $2
-	jr .asm_48766
-.asm_48764
-	ld a, $1
-.asm_48766
-	ld [hli], a
-	ld a, $1
-	ld [hli], a
-	xor a
-rept 3
-	ld [hli], a
-endr
-	ret
-
-Function4876f: ; 4876f (12:476f)
-	call Function48283
-	hlcoord 1, 16
-	ld de, String_484be
-	call PlaceString
-	ld hl, MenuDataHeader_0x48509
-	call LoadMenuDataHeader
-	ld a, [hInMenu]
-	push af
-	ld a, $1
-	ld [hInMenu], a
-	hlcoord 10, 5
-	ld b, $1
-	ld c, $8
-	call Function48cdc
-	call WaitBGMap
-	ld a, [wd473]
-	and a
-	jr z, .asm_487ab
-	cp $64
-	jr z, .asm_487b2
-	hlcoord 12, 5
-	ld [hl], $10
-	hlcoord 12, 7
-	ld [hl], $11
-	jr .asm_487b7
-.asm_487ab
-	hlcoord 12, 5
-	ld [hl], $10
-	jr .asm_487b7
-.asm_487b2
-	hlcoord 12, 7
-	ld [hl], $11
-.asm_487b7
-	hlcoord 11, 6
-	call Function487ec
-	ld c, 10
-	call DelayFrames
-	ld a, [wd473]
-	push af
-.asm_487c6
-	call JoyTextDelay
-	call Function4880e
-	jr nc, .asm_487c6
-	ld a, $1
-	call Function1ff8
-	pop bc
-	jr nz, .asm_487da
-	ld a, b
-	ld [wd473], a
-.asm_487da
-	ld a, [wd473]
-	call ExitMenu
-	hlcoord 11, 6
-	call Function487ec
-	pop af
-	ld [hInMenu], a
-	jp Function4840c
-
-Function487ec: ; 487ec (12:47ec)
-	push hl
-	ld de, wd473
-	call Function487ff
-	pop hl
-rept 4
-	inc hl
-endr
-	ld de, String_4880d
-	call PlaceString
-	ret
-
-Function487ff: ; 487ff (12:47ff)
-	push hl
-	ld a, " "
-	ld [hli], a
-	ld [hl], a
-	pop hl
-	ld b, PRINTNUM_LEADINGZEROS | 1
-	ld c, 3
-	call PrintNum
-	ret
-; 4880d (12:480d)
-
-String_4880d: ; 4880d
-	db "@"
-; 4880e
-
-Function4880e: ; 4880e (12:480e)
-	ld a, [hJoyPressed]
-	and A_BUTTON
-	jp nz, Function488b9
-	ld a, [hJoyPressed]
-	and B_BUTTON
-	jp nz, Function488b4
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, .asm_48843
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .asm_48838
-	ld a, [hl]
-	and D_LEFT
-	jr nz, .asm_4884f
-	ld a, [hl]
-	and D_RIGHT
-	jr nz, .asm_4885f
-	call DelayFrame
-	and a
-	ret
-.asm_48838
-	ld hl, wd473
-	ld a, [hl]
-	and a
-	jr z, .asm_48840
-	dec a
-.asm_48840
-	ld [hl], a
-	jr .asm_4886f
-.asm_48843
-	ld hl, wd473
-	ld a, [hl]
-	cp $64
-	jr nc, .asm_4884c
-	inc a
-.asm_4884c
-	ld [hl], a
-	jr .asm_4886f
-.asm_4884f
-	ld a, [wd473]
-	cp $5b
-	jr c, .asm_48858
-	ld a, $5a
-.asm_48858
-	add $a
-	ld [wd473], a
-	jr .asm_4886f
-.asm_4885f
-	ld a, [wd473]
-	cp $a
-	jr nc, .asm_48868
-	ld a, $a
-.asm_48868
-	sub $a
-	ld [wd473], a
-	jr .asm_4886f
-.asm_4886f
-	ld a, [wd473]
-	and a
-	jr z, .asm_48887
-	cp $64
-	jr z, .asm_48898
-	jr z, .asm_488a7
-	hlcoord 12, 5
-	ld [hl], $10
-	hlcoord 12, 7
-	ld [hl], $11
-	jr .asm_488a7
-.asm_48887
-	hlcoord 10, 5
-	ld b, $1
-	ld c, $8
-	call Function48cdc
-	hlcoord 12, 5
-	ld [hl], $10
-	jr .asm_488a7
-.asm_48898
-	hlcoord 10, 5
-	ld b, $1
-	ld c, $8
-	call Function48cdc
-	hlcoord 12, 7
-	ld [hl], $11
-.asm_488a7
-	hlcoord 11, 6
-	call Function487ec
-	call WaitBGMap
-	ld a, $1
-	and a
-	ret
-
-Function488b4: ; 488b4 (12:48b4)
-	ld a, $0
-	and a
-	scf
-	ret
-
-Function488b9: ; 488b9 (12:48b9)
-	ld a, [wd003]
-	set 1, a
-	ld [wd003], a
-	scf
-	ret
-; 488c3 (12:48c3)
-
-GFX_488c3: ; 488c3
-INCBIN "gfx/unknown/0488c3.2bpp"
-
-GFX_488cb: ; 488cb
-INCBIN "gfx/unknown/0488cb.2bpp"
-
-Function488d3: ; 488d3 (12:48d3)
-	call Function48283
-	hlcoord 1, 16
-	ld de, String_484e2
-	call PlaceString
-	call Function48a3a
-	jp c, Function4840c
-	ld hl, MenuDataHeader_0x4850e
-	call LoadMenuDataHeader
-	ld a, [hInMenu]
-	push af
-	ld a, $1
-	ld [hInMenu], a
-	hlcoord 10, 9
-	ld b, $1
-	ld c, $8
-	call Function48cdc
-	ld a, [wd475]
-	and $f
-	ld d, $0
-	hlcoord 11, 10
-	call Function489ea
-	call WaitBGMap
-	ld a, [wd475]
-	ld b, a
-	ld a, [wd476]
-	ld c, a
-	ld a, [wd477]
-	ld d, a
-	ld a, [wd478]
-	ld e, a
-	push de
-	push bc
-	ld d, $0
-	ld b, $0
-
-asm_48922: ; 48922 (12:4922)
-	push bc
-	call JoyTextDelay
-	ld a, [hJoyDown]
-	and a
-	jp z, Function4896e
-	bit 0, a
-	jp nz, Function4896e
-	bit 1, a
-	jp nz, Function4896e
-	ld a, [wd002]
-	and %11001111
-	res 7, a
-	ld [wd002], a
-	pop bc
-	inc b
-	ld a, b
-	cp $5
-	push bc
-	jr c, .asm_4894c
-	pop bc
-	ld b, $4
-	push bc
-.asm_4894c
-	pop bc
-	push bc
-	ld a, b
-	cp $4
-	jr nz, asm_48972
-	ld c, 10
-	call DelayFrames
-	jr asm_48972
-; 4895a (12:495a)
-
-Function4895a: ; 4895a
-	ld a, [hJoyPressed]
-	and a
-	jr z, .asm_48965
-	pop bc
-	ld b, $1
-	push bc
-	jr asm_48972
-
-.asm_48965
-	ld a, [hJoyLast]
-	and a
-	jr z, asm_48972
-
-	pop bc
-	ld b, $1
-	push bc
-
-Function4896e: ; 4896e (12:496e)
-	pop bc
-	ld b, $0
-	push bc
-
-asm_48972: ; 48972 (12:4972)
-	call Function48ab5
-	push af
-	cp $f0
-	jr z, .asm_48994
-	cp $f
-	jr nz, .asm_48988
-	ld a, [wd002]
-	set 7, a
-	and $cf
-	ld [wd002], a
-.asm_48988
-	hlcoord 11, 10
-	ld b, $0
-	ld c, d
-	add hl, bc
-	ld b, $3
-	call Function48c11
-.asm_48994
-	call WaitBGMap
-	pop af
-	pop bc
-	jr nc, asm_48922
-	jr nz, .asm_489b1
-	pop bc
-	ld a, b
-	ld [wd475], a
-	ld a, c
-	ld [wd476], a
-	pop bc
-	ld a, b
-	ld [wd477], a
-	ld a, c
-	ld [wd478], a
-	jr .asm_489c5
-.asm_489b1
-	push af
-	ld a, [wd479]
-	set 0, a
-	ld [wd479], a
-	ld a, [wd003]
-	set 3, a
-	ld [wd003], a
-	pop af
-	pop bc
-	pop bc
-.asm_489c5
-	push af
-	push bc
-	push de
-	push hl
-	ld a, $1
-	call Function1ff8
-	pop hl
-	pop de
-	pop bc
-	pop af
-	call ExitMenu
-	hlcoord 11, 10
-	call Function489ea
-	hlcoord 11, 9
-	lb bc, 1, 8
-	call ClearBox
-	pop af
-	ld [hInMenu], a
-	jp Function4840c
-
-Function489ea: ; 489ea (12:49ea)
-	push de
-	ld a, [wd475]
-	and $f
-	call Function48444
-	ld a, [wd476]
-	and $f0
-	swap a
-	inc hl
-	call Function48444
-	ld a, [wd476]
-	and $f
-	inc hl
-	call Function48444
-	inc hl
-	ld de, String_48a38
-	call PlaceString
-	ld a, [wd477]
-	and $f0
-	swap a
-	inc hl
-	call Function48444
-	ld a, [wd477]
-	and $f
-	inc hl
-	call Function48444
-	ld a, [wd478]
-	and $f0
-	swap a
-	inc hl
-	call Function48444
-	ld a, [wd478]
-	and $f
-	inc hl
-	call Function48444
-	pop de
-	ret
-; 48a38 (12:4a38)
-
-String_48a38: ; 48a38
-	db "-@"
-; 48a3a
-
-Function48a3a: ; 48a3a (12:4a3a)
-	ld hl, MenuDataHeader_0x48a9c
-	call LoadMenuDataHeader
-	call Function4873c
-	ld a, $a
-	ld [wcfa1], a
-	ld a, $b
-	ld [wcfa2], a
-	ld a, $1
-	ld [MenuSelection2], a
-	hlcoord 10, 8
-	ld b, $4
-	ld c, $8
-	call Function48cdc
-	hlcoord 12, 10
-	ld de, String_48aa1
-	call PlaceString
-	call Function1bc9
-	push af
-	call PlayClickSFX
-	call ExitMenu
-	pop af
-	bit 1, a
-	jp nz, Function48a9a
-	ld a, [MenuSelection2]
-	cp $1
-	jr z, .asm_48a98
-	ld a, [wd003]
-	set 3, a
-	ld [wd003], a
-	ld a, [wd479]
-	res 0, a
-	ld [wd479], a
-	xor a
-	ld bc, $4
-	ld hl, wd475
-	call ByteFill
-	jr Function48a9a
-.asm_48a98
-	and a
-	ret
-
-Function48a9a: ; 48a9a (12:4a9a)
-	scf
-	ret
-; 48a9c (12:4a9c)
-
-MenuDataHeader_0x48a9c: ; 0x48a9c
-	db $40 ; flags
-	db 08, 10 ; start coords
-	db 13, 19 ; end coord
-
-String_48aa1: ; 48aa1
-	db   "Tell Now"
-	next "Tell Later@"
-; 48ab5
-
-
-Function48ab5: ; 48ab5 (12:4ab5)
-	ld a, [hJoyPressed]
-	and A_BUTTON
-	jp nz, Function48c0f
-	ld a, [hJoyPressed]
-	and B_BUTTON
-	jp nz, Function48c0d
-	ld a, d
-	and a
-	jr z, .asm_48adf
-	cp $1
-	jr z, .asm_48ae7
-	cp $2
-	jr z, .asm_48af1
-	cp $3
-	jr z, .asm_48af9
-	cp $4
-	jr z, .asm_48b03
-	cp $5
-	jr z, .asm_48b0b
-	cp $6
-	jr .asm_48b15
-.asm_48adf
-	ld hl, wd475
-	ld a, [hl]
-	and $f
-	jr .asm_48b1d
-.asm_48ae7
-	ld hl, wd476
-	ld a, [hl]
-	swap a
-	or $f0
-	jr .asm_48b1d
-.asm_48af1
-	ld hl, wd476
-	ld a, [hl]
-	and $f
-	jr .asm_48b1d
-.asm_48af9
-	ld hl, wd477
-	ld a, [hl]
-	swap a
-	or $f0
-	jr .asm_48b1d
-.asm_48b03
-	ld hl, wd477
-	ld a, [hl]
-	and $f
-	jr .asm_48b1d
-.asm_48b0b
-	ld hl, wd478
-	ld a, [hl]
-	swap a
-	or $f0
-	jr .asm_48b1d
-.asm_48b15
-	ld hl, wd478
-	ld a, [hl]
-	and $f
-	jr .asm_48b1d
-.asm_48b1d
-	push hl
-	push af
-	ld e, $0
-	hlcoord 11, 10
-	ld a, d
-.asm_48b25
-	and a
-	jr z, .asm_48b2c
-	inc e
-	dec a
-	jr .asm_48b25
-.asm_48b2c
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, .asm_48b8d
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .asm_48b55
-	ld a, [hl]
-	and D_LEFT
-	jp nz, Function48bd7
-	ld a, [hl]
-	and D_RIGHT
-	jr nz, .asm_48b9d
-	hlcoord 11, 10
-	call Function489ea
-	ld a, [wd002]
-	bit 7, a
-	jr nz, .asm_48b51
-.asm_48b51
-	pop bc
-	pop bc
-	and a
-	ret
-.asm_48b55
-	pop af
-	ld b, a
-	and $f
-	and a
-	ld a, b
-	jr nz, .asm_48b61
-	and $f0
-	add $a
-.asm_48b61
-	dec a
-.asm_48b62
-	push de
-	push af
-	hlcoord 10, 9
-	ld b, $1
-	ld c, $8
-	call Function48cdc
-	pop af
-	pop de
-	hlcoord 11, 10
-	ld b, a
-	ld a, d
-	cp $3
-	jr c, .asm_48b7a
-	inc hl
-.asm_48b7a
-	ld a, b
-	pop hl
-	bit 7, a
-	jr z, .asm_48b85
-	call Function48c4d
-	jr .asm_48b88
-.asm_48b85
-	call Function48c5a
-.asm_48b88
-	ld a, $f0
-	jp Function48c00
-.asm_48b8d
-	pop af
-	ld b, a
-	and $f
-	cp $9
-	ld a, b
-	jr c, .asm_48b9a
-	and $f0
-	add $ff
-.asm_48b9a
-	inc a
-	jr .asm_48b62
-.asm_48b9d
-	push de
-	hlcoord 10, 9
-	ld b, $1
-	ld c, $8
-	call Function48cdc
-	pop de
-	ld a, d
-	cp $6
-	jr nc, .asm_48baf
-	inc d
-.asm_48baf
-	pop af
-	pop hl
-	ld b, a
-	ld a, d
-	cp $6
-	ld a, b
-	jr z, .asm_48bc4
-	bit 7, a
-	jr nz, .asm_48bc4
-	inc hl
-	ld a, [hl]
-	swap a
-	and $f
-	jr asm_48bc7
-.asm_48bc4
-	ld a, [hl]
-	and $f
-
-asm_48bc7: ; 48bc7 (12:4bc7)
-	hlcoord 11, 10
-	push af
-	ld a, d
-	cp $3
-	pop bc
-	ld a, b
-	jr c, .asm_48bd3
-	inc hl
-.asm_48bd3
-	ld a, $f
-	jr Function48c00
-
-Function48bd7: ; 48bd7 (12:4bd7)
-	push de
-	hlcoord 10, 9
-	ld b, $1
-	ld c, $8
-	call Function48cdc
-	pop de
-	ld a, d
-	and a
-	pop af
-	pop hl
-	ld b, a
-	ld a, d
-	and a
-	ld a, b
-	jr z, .asm_48bf3
-	bit 7, a
-	jr z, .asm_48bf8
-	dec d
-	dec hl
-.asm_48bf3
-	ld a, [hl]
-	and $f
-	jr asm_48bc7
-.asm_48bf8
-	dec d
-	ld a, [hl]
-	swap a
-	and $f
-	jr asm_48bc7
-
-Function48c00: ; 48c00 (12:4c00)
-	push af
-	hlcoord 11, 10
-	call Function489ea
-	ld a, $1
-	and a
-	pop bc
-	ld a, b
-	ret
-
-Function48c0d: ; 48c0d (12:4c0d)
-	xor a
-	and a
-
-Function48c0f: ; 48c0f (12:4c0f)
-	scf
-	ret
-
-Function48c11: ; 48c11 (12:4c11)
-	ld a, [wd002]
-	bit 7, a
-	jr z, .asm_48c20
-	ld a, d
-	cp $3
-	jr c, .asm_48c1e
-	inc hl
-.asm_48c1e
-	ld [hl], $7f
-.asm_48c20
-	ld a, [wd002]
-	swap a
-	and $3
-	inc a
-	cp b
-	jr nz, .asm_48c40
-	ld a, [wd002]
-	bit 7, a
-	jr z, .asm_48c3a
-	res 7, a
-	ld [wd002], a
-	xor a
-	jr .asm_48c40
-.asm_48c3a
-	set 7, a
-	ld [wd002], a
-	xor a
-.asm_48c40
-	swap a
-	ld b, a
-	ld a, [wd002]
-	and $cf
-	or b
-	ld [wd002], a
-	ret
-
-Function48c4d: ; 48c4d (12:4c4d)
-	swap a
-	and $f0
-	push af
-	ld a, [hl]
-	and $f
-	ld [hl], a
-	pop af
-	or [hl]
-	ld [hl], a
-	ret
-
-Function48c5a: ; 48c5a (12:4c5a)
-	push af
-	ld a, [hl]
-	and $f0
-	ld [hl], a
-	pop af
-	or [hl]
-	ld [hl], a
-	ret
-
-Function48c63: ; 48c63
-	ld a, "@"
-	ld [de], a
-	ld a, c
-	cp $30
-	jr nc, .asm_48c8c
-	and a
-	jr z, .asm_48c8c
-	dec c
-	push de
-	ld h, d
-	ld l, e
-	ld a, "@"
-	ld b, 7
-.asm_48c76
-	ld [hli], a
-	dec b
-	jr nz, .asm_48c76
-	ld hl, Prefectures
-	ld a, c
-	call GetNthString
-.asm_48c81
-	ld a, [hli]
-	ld [de], a
-	inc de
-	ld a, [hl]
-	cp "@"
-	jr nz, .asm_48c81
-	and a
-	pop de
-	ret
-
-.asm_48c8c
-	scf
-	ret
-; 48c8e
-
-Function48c8e: ; 48c8e
-	ld hl, wd02a
-	ld d, h
-	ld e, l
-	callba Function48c63
-	hlcoord 10, 7
-	call PlaceString
-	call WaitBGMap
-	ret
-; 48ca3
-
-Function48ca3: ; 48ca3
-	push af
-	push bc
-	push de
-	push hl
-	ld b, 0
-	ld c, 0
-	ld d, 0
-.asm_48cad
-	cp 100
-	jr c, .asm_48cb6
-	sub 100
-	inc b
-	jr .asm_48cad
-
-.asm_48cb6
-	cp 10
-	jr c, .asm_48cbf
-	sub 10
-	inc c
-	jr .asm_48cb6
-
-.asm_48cbf
-	cp 1
-	jr c, .asm_48cc7
-	dec a
-	inc d
-	jr .asm_48cbf
-
-.asm_48cc7
-	ld a, b
-	call Function48444
-	inc hl
-	ld a, c
-	call Function48444
-	inc hl
-	ld a, d
-	call Function48444
-	pop hl
-	pop de
-	pop bc
-	pop af
-	ret
-; 48cda
-
-Function48cda: ; 48cda (12:4cda)
-	ld h, d
-	ld l, e
-
-Function48cdc: ; 48cdc (12:4cdc)
-	push bc
-	push hl
-	call Function48cfd
-	pop hl
-	pop bc
-	ld de, AttrMap - TileMap
-	add hl, de
-rept 2
-	inc b
-endr
-rept 2
-	inc c
-endr
-	ld a, $0
-.asm_48ced
-	push bc
-	push hl
-.asm_48cef
-	ld [hli], a
-	dec c
-	jr nz, .asm_48cef
-	pop hl
-	ld de, $14
-	add hl, de
-	pop bc
-	dec b
-	jr nz, .asm_48ced
-	ret
-
-Function48cfd: ; 48cfd (12:4cfd)
-	push hl
-	ld a, $4
-	ld [hli], a
-	inc a
-	call Function48d2a
-	inc a
-	ld [hl], a
-	pop hl
-	ld de, $14
-	add hl, de
-.asm_48d0c
-	push hl
-	ld a, $7
-	ld [hli], a
-	ld a, $7f
-	call Function48d2a
-	ld [hl], $8
-	pop hl
-	ld de, $14
-	add hl, de
-	dec b
-	jr nz, .asm_48d0c
-	ld a, $9
-	ld [hli], a
-	ld a, $a
-	call Function48d2a
-	ld [hl], $b
-	ret
-
-Function48d2a: ; 48d2a (12:4d2a)
-	ld d, c
-.asm_48d2b
-	ld [hli], a
-	dec d
-	jr nz, .asm_48d2b
-	ret
-
-Function48d30: ; 48d30 (12:4d30)
-	ld hl, wd475
-	call Function48d4a
-	ld hl, wd477
-	call Function48d4a
-	ret
-
-Function48d3d: ; 48d3d (12:4d3d)
-	ld hl, wd475
-	call Function48d94
-	ld hl, wd477
-	call Function48d94
-	ret
-
-Function48d4a: ; 48d4a (12:4d4a)
-	inc hl
-	ld a, [hl]
-	ld b, a
-	and $f
-	ld c, a
-	srl b
-	srl b
-	srl b
-	srl b
-	push bc
-	ld c, 10
-	ld a, b
-	call SimpleMultiply
-	pop bc
-	add c
-	ld [hld], a
-	xor a
-	ld [hMultiplicand + 0], a
-	ld [hMultiplicand + 1], a
-	ld a, [hl]
-	srl a
-	srl a
-	srl a
-	srl a
-	ld c, 10
-	call SimpleMultiply
-	ld b, a
-	ld a, [hli]
-	and $f
-	add b
-	ld [hMultiplicand + 2], a
-	ld a, 100
-	ld [hMultiplier], a
-	call Multiply
-	ld a, [hProduct + 2]
-	ld b, a
-	ld a, [hProduct + 3]
-	ld c, a
-	ld e, [hl]
-	add e
-	ld c, a
-	ld a, b
-	adc $0
-	ld b, a
-	ld a, c
-	ld [hld], a
-	ld [hl], b
-	ret
-
-Function48d94: ; 48d94 (12:4d94)
-	xor a
-	ld [hDividend + 0], a
-	ld [hDividend + 1], a
-	ld a, [hli]
-	ld [hDividend + 0], a
-	ld a, [hl]
-	ld [hDividend + 1], a
-	ld a, 100
-	ld [hDivisor], a
-	ld b, 2
-	call Divide
-	ld a, [hDivisor]
-	ld c, $a
-	call SimpleDivide
-	sla b
-	sla b
-	sla b
-	sla b
-	or b
-	ld [hld], a
-	ld a, [hQuotient + 2]
-	ld c, 10
-	call SimpleDivide
-	sla b
-	sla b
-	sla b
-	sla b
-	or b
-	ld [hl], a
-	ret
-
 InitGender: ; 48dcb (12:4dcb)
 	call Function48e14
 	call Function48e47
@@ -25461,7 +15475,7 @@
 
 Function48e47: ; 48e47 (12:4e47)
 	ld hl, Palette_48e5c
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $8
 	ld a, $5
 	call FarCopyWRAM
@@ -25513,12 +15527,12 @@
 INCBIN "gfx/misc/pack_f.2bpp"
 ; 4925b
 
-Function4925b: ; 4925b
+Special_MoveTutor: ; 4925b
 	call FadeToMenu
 	call ClearBGPalettes
 	call ClearScreen
 	call DelayFrame
-	ld b, $14
+	ld b, SCGB_14
 	call GetSGBLayout
 	xor a
 	ld [wItemAttributeParamBuffer], a
@@ -25547,7 +15561,7 @@
 	ld [ScriptVar], a
 
 .asm_492a1
-	call Function2b3c
+	call ReturnToCallingMenu
 	ret
 ; 492a5
 
@@ -25625,10 +15639,10 @@
 
 Function4930f: ; 4930f (mobile)
 	ld a, b
-	cp $ff
-	jr nz, .asm_49317
+	cp SCGB_RAM
+	jr nz, .not_ram
 	ld a, [SGBPredef]
-.asm_49317
+.not_ram
 	push af
 	callba Function9673
 	pop af
@@ -25635,7 +15649,7 @@
 	ld l, a
 	ld h, 0
 	add hl, hl
-	ld de, Jumptable_49330
+	ld de, .jumptable
 	add hl, de
 	ld a, [hli]
 	ld h, [hl]
@@ -25647,7 +15661,7 @@
 	ret
 ; 49330 (12:5330)
 
-Jumptable_49330: ; 49330
+.jumptable: ; 49330
 	dw Function4936e
 	dw Function4942f
 	dw Function49706
@@ -25679,15 +15693,15 @@
 	ret
 
 Function49351: ; 49351 (12:5351)
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld hl, Palette_493e1
 	ld bc, $28
-	ld a, $5 ; BANK(wMapPals)
+	ld a, $5 ; BANK(UnknBGPals)
 	call FarCopyWRAM
-	ld de, wMapPals + $38
+	ld de, UnknBGPals + $38
 	ld hl, Palette_49418
 	ld bc, $8
-	ld a, $5 ; BANK(wMapPals)
+	ld a, $5 ; BANK(UnknBGPals)
 	call FarCopyWRAM
 	ret
 
@@ -25767,7 +15781,7 @@
 
 Function49409:: ; 49409
 	ld hl, Palette_49418
-	ld de, wMapPals + 8 * 7
+	ld de, UnknBGPals + 8 * 7
 	ld bc, 8
 	ld a, $5
 	call FarCopyWRAM
@@ -25783,9 +15797,9 @@
 
 Function49420:: ; 49420 (12:5420)
 	ld hl, MansionPalette4
-	ld de, wMapPals + $30
+	ld de, UnknBGPals + $30
 	ld bc, $8
-	ld a, $5 ; BANK(wMapPals)
+	ld a, $5 ; BANK(UnknBGPals)
 	call FarCopyWRAM
 	ret
 ; 4942f (12:542f)
@@ -25792,10 +15806,10 @@
 
 Function4942f: ; 4942f
 	call Function49351
-	ld de, wMapPals + $38
+	ld de, UnknBGPals + $38
 	ld hl, Palette_49478
 	ld bc, $8
-	ld a, $5 ; BANK(wMapPals)
+	ld a, $5 ; BANK(UnknBGPals)
 	call FarCopyWRAM
 	call Function49346
 	hlcoord 0, 0, AttrMap
@@ -25858,7 +15872,7 @@
 
 LoadSpecialMapPalette: ; 494ac
 	ld a, [wTileset]
-	cp TILESET_GOLDENROD_POKECOM_CENTER_2F_MOBILE
+	cp TILESET_POKECOM_CENTER
 	jr z, .pokecom_2f
 	cp TILESET_BATTLE_TOWER
 	jr z, .battle_tower
@@ -25913,7 +15927,7 @@
 
 LoadPokeComPalette: ; 494f2
 	ld a, $5
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld hl, PokeComPalette
 	ld bc, 8 palettes
 	call FarCopyWRAM
@@ -25926,7 +15940,7 @@
 
 LoadBattleTowerPalette: ; 49541
 	ld a, $5
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld hl, BattleTowerPalette
 	ld bc, 8 palettes
 	call FarCopyWRAM
@@ -25939,7 +15953,7 @@
 
 LoadIcePathPalette: ; 49590
 	ld a, $5
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld hl, IcePathPalette
 	ld bc, 8 palettes
 	call FarCopyWRAM
@@ -25952,7 +15966,7 @@
 
 LoadHousePalette: ; 495df
 	ld a, $5
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld hl, HousePalette
 	ld bc, 8 palettes
 	call FarCopyWRAM
@@ -25965,7 +15979,7 @@
 
 LoadRadioTowerPalette: ; 4962e
 	ld a, $5
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld hl, RadioTowerPalette
 	ld bc, 8 palettes
 	call FarCopyWRAM
@@ -26028,22 +16042,22 @@
 
 LoadMansionPalette: ; 496c5
 	ld a, $5
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld hl, MansionPalette1
 	ld bc, 8 palettes
 	call FarCopyWRAM
 	ld a, $5
-	ld de, wMapPals + 4 palettes
+	ld de, UnknBGPals + 4 palettes
 	ld hl, MansionPalette2
 	ld bc, 1 palettes
 	call FarCopyWRAM
 	ld a, $5
-	ld de, wMapPals + 3 palettes
+	ld de, UnknBGPals + 3 palettes
 	ld hl, MansionPalette3
 	ld bc, 1 palettes
 	call FarCopyWRAM
 	ld a, $5
-	ld de, wMapPals + 6 palettes
+	ld de, UnknBGPals + 6 palettes
 	ld hl, MansionPalette4
 	ld bc, 1 palettes
 	call FarCopyWRAM
@@ -26059,7 +16073,7 @@
 
 Function49706: ; 49706
 	ld hl, Palette_49732
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, 1 palettes
 	ld a, $5
 	call FarCopyWRAM
@@ -26067,7 +16081,7 @@
 	call Function49346
 	callba Function96b3
 	ld hl, Palette_4973a
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, 1 palettes
 	ld a, $5
 	call FarCopyWRAM
@@ -26090,7 +16104,7 @@
 
 Function49742: ; 49742
 	ld hl, Palette_49757
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $40
 	ld a, $5
 	call FarCopyWRAM
@@ -26194,7 +16208,7 @@
 
 Function49811: ; 49811
 	ld hl, Palette_49826
-	ld de, wMapPals + $10
+	ld de, UnknBGPals + $10
 	ld bc, $30
 	ld a, $5
 	call FarCopyWRAM
@@ -26249,1607 +16263,9 @@
 	db $a8, $00, $b5, $b0, $de, $e8, $fc, $1c
 	db $ba, $66, $f7, $0e, $ba, $5e, $43, $bd
 
-Special_CelebiShrineEvent: ; 4989a
-	call DelayFrame
-	ld a, [VramState]
-	push af
-	xor a
-	ld [VramState], a
-	call LoadCelebiGFX
-	ld de, $750
-	ld a, $2c
-	call Function3b2a
-	ld hl, $3
-	add hl, bc
-	ld [hl], $84
-	ld hl, $2
-	add hl, bc
-	ld [hl], $1f
-	ld hl, $f
-	add hl, bc
-	ld a, $80
-	ld [hl], a
-	ld a, $a0
-	ld [wcf64], a
-	ld d, $0
-.loop
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .done
-	push bc
-	call Function49bae
-	inc d
-	push de
-	ld a, $90
-	ld [wc3b5], a
-	callba Function8cf7a
-	call Function49935
-	ld c, 2
-	call DelayFrames
-	pop de
-	pop bc
-	jr .loop
+INCLUDE "event/celebi.asm"
+INCLUDE "engine/main_menu.asm"
 
-.done
-	pop af
-	ld [VramState], a
-	call Function498f9
-	call Function49bf3
-	ret
-; 498f9
-
-Function498f9: ; 498f9
-	ld hl, Sprites + 2
-	xor a
-	ld c, $4
-.loop
-	ld [hli], a
-rept 3
-	inc hl
-endr
-	inc a
-	dec c
-	jr nz, .loop
-	ld hl, Sprites + $10
-	ld bc, $90
-	xor a
-	call ByteFill
-	ret
-; 49912
-
-LoadCelebiGFX: ; 49912
-	callba Function8cf53
-	ld de, SpecialCelebiLeafGFX
-	ld hl, VTiles1
-	lb bc, BANK(SpecialCelebiLeafGFX), 4
-	call Request2bpp
-	ld de, SpecialCelebiGFX
-	ld hl, VTiles1 tile $04
-	lb bc, BANK(SpecialCelebiGFX), $10
-	call Request2bpp
-	xor a
-	ld [wJumptableIndex], a
-	ret
-; 49935
-
-Function49935: ; 49935
-	ld hl, wcf64
-	ld a, [hl]
-	and a
-	jr z, .asm_4993e
-	dec [hl]
-	ret
-
-.asm_4993e
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-; 49944
-
-Function49944: ; 49944
-	ld hl, wcf65
-	ld a, [hl]
-	inc [hl]
-	and $7
-	ret nz
-	ld a, [hl]
-	and $18
-	sla a
-	add $40
-	ld d, a
-	ld e, $0
-	ld a, $18
-	call Function3b2a
-	ld hl, $3
-	add hl, bc
-	ld [hl], $80
-	ret
-; 49962
-
-SpecialCelebiLeafGFX: ; 49962
-INCBIN "gfx/special/celebi/leaf.2bpp"
-SpecialCelebiGFX: ; 499a2
-INCBIN "gfx/special/celebi/1.2bpp"
-INCBIN "gfx/special/celebi/2.2bpp"
-INCBIN "gfx/special/celebi/3.2bpp"
-INCBIN "gfx/special/celebi/4.2bpp"
-
-
-Function49aa2: ; 49aa2 (12:5aa2)
-	ld hl, $6
-	add hl, bc
-	ld a, [hl]
-	push af
-	ld hl, $5
-	add hl, bc
-	ld a, [hl]
-	cp $52
-	jp nc, Function49b30
-	ld hl, $5
-	add hl, bc
-	inc [hl]
-	ld hl, $f
-	add hl, bc
-	ld a, [hl]
-	ld d, a
-	cp $3a
-	jr c, .asm_49ac6
-	jr z, .asm_49ac6
-	sub $3
-	ld [hl], a
-.asm_49ac6
-	ld hl, $e
-	add hl, bc
-	ld a, [hl]
-	inc [hl]
-	call Function49b3b
-	ld hl, $6
-	add hl, bc
-	ld [hl], a
-	ld d, a
-	ld hl, $4
-	add hl, bc
-	add [hl]
-	cp $5c
-	jr nc, .asm_49ae2
-	cp $44
-	jr nc, .asm_49b0d
-.asm_49ae2
-	pop af
-	push af
-	cp d
-	jr nc, .asm_49af2
-	ld hl, $4
-	add hl, bc
-	add [hl]
-	cp $50
-	jr c, .asm_49b05
-	jr .asm_49afb
-.asm_49af2
-	ld hl, $4
-	add hl, bc
-	add [hl]
-	cp $50
-	jr nc, .asm_49b05
-.asm_49afb
-	ld hl, $5
-	add hl, bc
-	ld a, [hl]
-	sub $2
-	ld [hl], a
-	jr .asm_49b0d
-.asm_49b05
-	ld hl, $5
-	add hl, bc
-	ld a, [hl]
-	add $1
-	ld [hl], a
-.asm_49b0d
-	pop af
-	ld hl, $4
-	add hl, bc
-	add [hl]
-	cp $50
-	jr c, .asm_49b26
-	cp $e6
-	jr nc, .asm_49b26
-	ld hl, $1
-	add hl, bc
-	ld a, $41
-	call Function3b3c
-	jr .asm_49b2f
-.asm_49b26
-	ld hl, $1
-	add hl, bc
-	ld a, $40
-	call Function3b3c
-.asm_49b2f
-	ret
-
-Function49b30: ; 49b30 (12:5b30)
-	pop af
-	ld hl, $1
-	add hl, bc
-	ld a, $40
-	call Function3b3c
-	ret
-
-Function49b3b: ; 49b3b (12:5b3b)
-	add $10
-	and $3f
-	cp $20
-	jr nc, .asm_49b48
-	call Function49b52
-	ld a, h
-	ret
-.asm_49b48
-	and $1f
-	call Function49b52
-	ld a, h
-	xor $ff
-	inc a
-	ret
-
-Function49b52: ; 49b52 (12:5b52)
-	ld e, a
-	ld a, d
-	ld d, $0
-	ld hl, Unknown_49b6e
-rept 2
-	add hl, de
-endr
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	ld hl, 0
-.asm_49b61
-	srl a
-	jr nc, .asm_49b66
-	add hl, de
-.asm_49b66
-	sla e
-	rl d
-	and a
-	jr nz, .asm_49b61
-	ret
-; 49b6e (12:5b6e)
-
-Unknown_49b6e: ; 49b6e
-	sine_wave $100
-; 49bae
-
-Function49bae: ; 49bae
-	push hl
-	push bc
-	push de
-	ld a, d
-	ld d, $3
-	ld e, d
-	cp $0
-	jr z, .asm_49bd0
-	cp d
-	jr z, .asm_49bd4
-	call Function49bed
-	cp d
-	jr z, .asm_49bd8
-	call Function49bed
-	cp d
-	jr z, .asm_49bdc
-	call Function49bed
-	cp d
-	jr c, .asm_49be9
-	jr .asm_49be5
-
-.asm_49bd0
-	ld a, $84
-	jr .asm_49bde
-
-.asm_49bd4
-	ld a, $88
-	jr .asm_49bde
-
-.asm_49bd8
-	ld a, $8c
-	jr .asm_49bde
-
-.asm_49bdc
-	ld a, $90
-
-.asm_49bde
-	ld hl, $3
-	add hl, bc
-	ld [hl], a
-	jr .asm_49be9
-
-.asm_49be5
-	pop de
-	ld d, $ff
-	push de
-
-.asm_49be9
-	pop de
-	pop bc
-	pop hl
-	ret
-; 49bed
-
-Function49bed: ; 49bed
-	push af
-	ld a, d
-	add e
-	ld d, a
-	pop af
-	ret
-; 49bf3
-
-Function49bf3: ; 49bf3
-	ld a, BATTLETYPE_CELEBI
-	ld [BattleType], a
-	ret
-; 49bf9
-
-Function49bf9: ; 49bf9
-	ld a, [wBattleResult]
-	bit 6, a
-	jr z, .asm_49c07
-	ld a, $1
-	ld [ScriptVar], a
-	jr .asm_49c0b
-
-.asm_49c07
-	xor a
-	ld [ScriptVar], a
-
-.asm_49c0b
-	ret
-; 49c0c
-
-GFX_49c0c: ; 49c0c
-INCBIN "gfx/unknown/049c0c.2bpp"
-; 49cdc
-
-MainMenu: ; 49cdc
-	xor a
-	ld [wc2d7], a
-	call Function49ed0
-	ld b, $8
-	call GetSGBLayout
-	call SetPalettes
-	ld hl, GameTimerPause
-	res 0, [hl]
-	call Function49da4
-	ld [wcf76], a
-	call Function49e09
-	ld hl, MenuDataHeader_0x49d14
-	call LoadMenuDataHeader
-	call Function49de4
-	call WriteBackup
-	jr c, .quit
-	call ClearTileMap
-	ld a, [MenuSelection]
-	ld hl, Jumptable_49d60
-	rst JumpTable
-	jr MainMenu
-
-.quit
-	ret
-; 49d14
-
-MenuDataHeader_0x49d14: ; 49d14
-	db $40 ; flags
-	db 00, 00 ; start coords
-	db 07, 16 ; end coords
-	dw MenuData2_0x49d1c
-	db 1 ; default option
-; 49d1c
-
-MenuData2_0x49d1c: ; 49d1c
-	db $80 ; flags
-	db 0 ; items
-	dw MainMenuItems
-	dw Function1f79
-	dw MainMenuText
-; 49d20
-
-MainMenuText: ; 49d24
-	db "CONTINUE@"
-	db "NEW GAME@"
-	db "OPTION@"
-	db "MYSTERY GIFT@"
-	db "MOBILE@"
-	db "MOBILE STUDIUM@"
-
-Jumptable_49d60: ; 0x49d60
-	dw MainMenu_Continue
-	dw MainMenu_NewGame
-	dw MainMenu_Options
-	dw MainMenu_MysteryGift
-	dw MainMenu_Mobile
-	dw MainMenu_MobileStudium
-; 0x49d6c
-
-CONTINUE       EQU 0
-NEW_GAME       EQU 1
-OPTION         EQU 2
-MYSTERY_GIFT   EQU 3
-MOBILE         EQU 4
-MOBILE_STUDIUM EQU 5
-
-MainMenuItems:
-
-NewGameMenu: ; 0x49d6c
-	db 2
-	db NEW_GAME
-	db OPTION
-	db $ff
-
-ContinueMenu: ; 0x49d70
-	db 3
-	db CONTINUE
-	db NEW_GAME
-	db OPTION
-	db $ff
-
-MobileMysteryMenu: ; 0x49d75
-	db 5
-	db CONTINUE
-	db NEW_GAME
-	db OPTION
-	db MYSTERY_GIFT
-	db MOBILE
-	db $ff
-
-MobileMenu: ; 0x49d7c
-	db 4
-	db CONTINUE
-	db NEW_GAME
-	db OPTION
-	db MOBILE
-	db $ff
-
-MobileStudiumMenu: ; 0x49d82
-	db 5
-	db CONTINUE
-	db NEW_GAME
-	db OPTION
-	db MOBILE
-	db MOBILE_STUDIUM
-	db $ff
-
-MysteryMobileStudiumMenu: ; 0x49d89
-	db 6
-	db CONTINUE
-	db NEW_GAME
-	db OPTION
-	db MYSTERY_GIFT
-	db MOBILE
-	db MOBILE_STUDIUM
-	db $ff
-
-MysteryMenu: ; 0x49d91
-	db 4
-	db CONTINUE
-	db NEW_GAME
-	db OPTION
-	db MYSTERY_GIFT
-	db $ff
-
-MysteryStudiumMenu: ; 0x49d97
-	db 5
-	db CONTINUE
-	db NEW_GAME
-	db OPTION
-	db MYSTERY_GIFT
-	db MOBILE_STUDIUM
-	db $ff
-
-StudiumMenu: ; 0x49d9e
-	db 4
-	db CONTINUE
-	db NEW_GAME
-	db OPTION
-	db MOBILE_STUDIUM
-	db $ff
-
-
-Function49da4: ; 49da4
-	nop
-	nop
-	nop
-	ld a, [wcfcd]
-	and a
-	jr nz, .next
-	ld a, $0
-	ret
-
-.next
-	ld a, [hCGB]
-	cp $1
-	ld a, $1
-	ret nz
-	ld a, BANK(s0_abe5)
-	call GetSRAMBank
-	ld a, [s0_abe5]
-	cp $ff
-	call CloseSRAM
-	jr nz, .done
-	ld a, [StatusFlags]
-	bit 7, a
-	ld a, $1
-	jr z, .ok
-	jr .ok
-
-.ok
-	jr .ok2
-
-.ok2
-	ld a, $1
-	ret
-
-.done
-	ld a, [StatusFlags]
-	bit 7, a
-	jr z, .ok3
-	jr .ok3
-
-.ok3
-	jr .ok4
-
-.ok4
-	ld a, $6
-	ret
-; 49de4
-
-Function49de4: ; 49de4
-	call SetUpMenu
-.asm_49de7
-	call Function49e09
-	ld a, [wcfa5]
-	set 5, a
-	ld [wcfa5], a
-	call Function1f1a
-	ld a, [wcf73]
-	cp $2
-	jr z, .asm_49e07
-	cp $1
-	jr z, .asm_49e02
-	jr .asm_49de7
-
-.asm_49e02
-	call PlayClickSFX
-	and a
-	ret
-
-.asm_49e07
-	scf
-	ret
-; 49e09
-
-Function49e09: ; 49e09
-	ld a, [wcfcd]
-	and a
-	ret z
-	xor a
-	ld [hBGMapMode], a
-	call Function49e27
-	ld hl, Options
-	ld a, [hl]
-	push af
-	set 4, [hl]
-	call Function49e3d
-	pop af
-	ld [Options], a
-	ld a, $1
-	ld [hBGMapMode], a
-	ret
-; 49e27
-
-
-Function49e27: ; 49e27
-	call Function6e3
-	and $80
-	jr nz, .asm_49e39
-	hlcoord 0, 14
-	ld b, $2
-	ld c, $12
-	call TextBox
-	ret
-
-.asm_49e39
-	call SpeechTextBox
-	ret
-; 49e3d
-
-
-Function49e3d: ; 49e3d
-	ld a, [wcfcd]
-	and a
-	ret z
-	call Function6e3
-	and $80
-	jp nz, Function49e75
-	call UpdateTime
-	call GetWeekday
-	ld b, a
-	decoord 1, 15
-	call Function49e91
-	decoord 4, 16
-	ld a, [hHours]
-	ld c, a
-	callba PrintHour
-	ld [hl], ":"
-	inc hl
-	ld de, hMinutes
-	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
-	call PrintNum
-	ret
-; 49e70
-
-; 49e70
-	db "min.@"
-; 49e75
-
-Function49e75: ; 49e75
-	hlcoord 1, 14
-	ld de, .TimeNotSet
-	call PlaceString
-	ret
-; 49e7f
-
-.TimeNotSet ; 49e7f
-	db "TIME NOT SET@"
-; 49e8c
-
-UnknownText_0x49e8c: ; 49e8c
-	text_jump UnknownText_0x1c5182
-	db "@"
-; 49e91
-
-Function49e91: ; 49e91
-	push de
-	ld hl, .Days
-	ld a, b
-	call GetNthString
-	ld d, h
-	ld e, l
-	pop hl
-	call PlaceString
-	ld h, b
-	ld l, c
-	ld de, .Day
-	call PlaceString
-	ret
-; 49ea8
-
-.Days
-	db "SUN@"
-	db "MON@"
-	db "TUES@"
-	db "WEDNES@"
-	db "THURS@"
-	db "FRI@"
-	db "SATUR@"
-.Day
-	db "DAY@"
-; 49ed0
-
-Function49ed0: ; 49ed0
-	xor a
-	ld [hMapAnims], a
-	call ClearTileMap
-	call LoadFontsExtra
-	call LoadStandardFont
-	call ResetTextRelatedRAM
-	ret
-; 49ee0
-
-
-MainMenu_NewGame: ; 49ee0
-	callba NewGame
-	ret
-; 49ee7
-
-MainMenu_Options: ; 49ee7
-	callba OptionsMenu
-	ret
-; 49eee
-
-MainMenu_Continue: ; 49eee
-	callba Continue
-	ret
-; 49ef5
-
-MainMenu_MysteryGift: ; 49ef5
-	callba MysteryGift
-	ret
-; 49efc
-
-MainMenu_Mobile: ; 49efc
-	call ClearBGPalettes
-	ld a, MUSIC_MOBILE_ADAPTER_MENU
-	ld [wMapMusic], a
-	ld de, MUSIC_MOBILE_ADAPTER_MENU
-	call Function4a6c5
-Function49f0a: ; 49f0a
-	call ClearBGPalettes
-	call Function4a3a7
-	call Function4a492
-	call ClearBGPalettes
-Function49f16: ; 49f16
-	call Function4a071
-	ld c, 12
-	call DelayFrames
-	hlcoord 4, 0
-	ld b, $a
-	ld c, $a
-	call Function48cdc
-	hlcoord 6, 2
-	ld de, MobileString1
-	call PlaceString
-	hlcoord 0, 12
-	ld b, $4
-	ld c, $12
-	call TextBox
-	xor a
-	ld de, String_0x49fe9
-	hlcoord 1, 14
-	call PlaceString
-	call Function3200
-	call SetPalettes
-	call Function1bc9
-	ld hl, MenuSelection2
-	ld b, [hl]
-	push bc
-	jr .asm_49f5d
-
-.asm_49f55
-	call Function1bd3
-	ld hl, MenuSelection2
-	ld b, [hl]
-	push bc
-
-.asm_49f5d
-	bit 0, a
-	jr nz, .asm_49f67
-	bit 1, a
-	jr nz, .asm_49f84
-	jr .asm_49f97
-
-.asm_49f67
-	ld hl, MenuSelection2
-	ld a, [hl]
-	cp $1
-	jp z, Function4a098
-	cp $2
-	jp z, Function4a0b9
-	cp $3
-	jp z, Function4a0c2
-	cp $4
-	jp z, Function4a100
-	ld a, $1
-	call Function1ff8
-
-.asm_49f84
-	pop bc
-	call ClearBGPalettes
-	call ClearTileMap
-	ld a, MUSIC_MAIN_MENU
-	ld [wMapMusic], a
-	ld de, MUSIC_MAIN_MENU
-	call Function4a6c5
-	ret
-
-.asm_49f97
-	ld hl, MenuSelection2
-	ld a, [hl]
-	dec a
-	ld hl, MobileStrings2
-	call GetNthString
-	ld d, h
-	ld e, l
-	hlcoord 1, 13
-	ld b, $4
-	ld c, $12
-	call ClearBox
-	hlcoord 1, 14
-	call PlaceString
-	jp .asm_49fb7
-
-.asm_49fb7
-	call Function4a071
-	pop bc
-	ld hl, MenuSelection2
-	ld [hl], b
-	ld b, $a
-	ld c, $1
-	hlcoord 5, 1
-	call ClearBox
-	jp .asm_49f55
-; 49fcc
-
-
-MobileString1: ; 49fcc
-	db   "めいしフ,ルダー"
-	next "あいさつ"
-	next "プロフィール"
-	next "せ", $1e, "い"
-	next "もどる"
-	db   "@"
-; 49fe9
-
-
-MobileStrings2:
-
-String_0x49fe9: ; 49fe9
-	db   "めいし¯つくったり"
-	next "ほぞんしておける フ,ルダーです@"
-; 4a004
-
-String_0x4a004: ; 4a004
-	db   "モバイルたいせんや じぶんのめいしで"
-	next "つかう あいさつ¯つくります@"
-; 4a026
-
-String_0x4a026: ; 4a026
-	db   "あなた%じゅうしょや ねんれいの"
-	next "せ", $1e, "い¯かえられます@"
-; 4a042
-
-String_0x4a042: ; 4a042
-	db  "モバイルセンター", $1d, "せつぞくするとき"
-	next "ひつような こと¯きめます@"
-; 4a062
-
-String_0x4a062: ; 4a062
-	db   "まえ%がめん ", $1d, "もどります"
-	next "@"
-; 4a071
-
-
-
-Function4a071: ; 4a071 (12:6071)
-	ld hl, wcfa1
-	ld a, $2
-	ld [hli], a
-	ld a, $5
-	ld [hli], a
-	ld a, $5
-	ld [hli], a
-	ld a, $1
-	ld [hli], a
-	ld [hl], $0
-	set 5, [hl]
-	inc hl
-	xor a
-	ld [hli], a
-	ld a, $20
-	ld [hli], a
-	ld a, $1
-	add $40
-	add $80
-	add $2
-	ld [hli], a
-	ld a, $1
-rept 2
-	ld [hli], a
-endr
-	ret
-
-Function4a098: ; 4a098 (12:6098)
-	ld a, $2
-	call Function1ff8
-	call Function1bee
-	call WaitBGMap
-	call LoadStandardMenuDataHeader
-	callba Function89de0
-	call Call_ExitMenu
-	call Function49351
-	call Function4a485
-	pop bc
-	jp Function49f16
-
-Function4a0b9: ; 4a0b9 (12:60b9)
-	ld a, $2
-	call Function1ff8
-	pop bc
-	jp Function4a4c4
-
-Function4a0c2: ; 4a0c2 (12:60c2)
-	ld a, $2
-	call Function1ff8
-	ld a, BANK(sPlayerData)
-	call GetSRAMBank
-	ld hl, sPlayerData + PlayerName - wPlayerData
-	ld de, PlayerName
-	ld bc, $6
-	call CopyBytes
-	call CloseSRAM
-	callba Function150b9
-	ld c, 2
-	call DelayFrames
-	ld c, $1
-	call Function4802f
-	push af
-	call ClearBGPalettes
-	pop af
-	and a
-	jr nz, .asm_4a0f9
-	callba Function1509a
-.asm_4a0f9
-	ld c, 5
-	call DelayFrames
-	jr asm_4a111
-
-Function4a100: ; 4a100 (12:6100)
-	ld a, $2
-	call Function1ff8
-	call ClearBGPalettes
-	call Function4a13b
-	call ClearBGPalettes
-	call ClearTileMap
-
-asm_4a111: ; 4a111 (12:6111)
-	pop bc
-	call LoadFontsExtra
-	jp Function49f0a
-
-Function4a118: ; 4a118 (12:6118)
-	ld hl, wcfa1
-	ld a, $1
-	ld [hli], a
-	ld a, $d
-	ld [hli], a
-	ld a, $3
-	ld [hli], a
-	ld a, $1
-	ld [hli], a
-	ld [hl], $0
-	set 5, [hl]
-	inc hl
-	xor a
-	ld [hli], a
-	ld a, $20
-	ld [hli], a
-	ld a, $1
-	add $2
-	ld [hli], a
-	ld a, $1
-rept 2
-	ld [hli], a
-endr
-	ret
-
-Function4a13b: ; 4a13b (12:613b)
-	call Function4a3a7
-	call Function4a492
-	call Function4a373
-	ld c, 10
-	call DelayFrames
-
-Function4a149: ; 4a149 (12:6149)
-	hlcoord 1, 2
-	ld b, $6
-	ld c, $10
-	call Function48cdc
-	hlcoord 3, 4
-	ld de, String_4a1ef
-	call PlaceString
-	hlcoord 0, 12
-	ld b, $4
-	ld c, $12
-	call TextBox
-	ld a, [MenuSelection2]
-	dec a
-	ld hl, Strings_4a23d
-	call GetNthString
-	ld d, h
-	ld e, l
-	hlcoord 1, 13
-	ld b, $4
-	ld c, $12
-	call ClearBox
-	hlcoord 1, 14
-	call PlaceString
-	callba Function104148
-	call SetPalettes
-	call Function1bc9
-	ld hl, MenuSelection2
-	ld b, [hl]
-	push bc
-	jr asm_4a19d
-
-Function4a195: ; 4a195 (12:6195)
-	call Function1bd3
-	ld hl, MenuSelection2
-	ld b, [hl]
-	push bc
-
-asm_4a19d: ; 4a19d (12:619d)
-	bit 0, a
-	jr nz, .asm_4a1a7
-	bit 1, a
-	jr nz, .asm_4a1ba
-	jr .asm_4a1bc
-.asm_4a1a7
-	ld hl, MenuSelection2
-	ld a, [hl]
-	cp $1
-	jp z, Function4a20e
-	cp $2
-	jp z, Function4a221
-	ld a, $1
-	call Function1ff8
-.asm_4a1ba
-	pop bc
-	ret
-.asm_4a1bc
-	ld hl, MenuSelection2
-	ld a, [hl]
-	dec a
-	ld hl, Strings_4a23d
-	call GetNthString
-	ld d, h
-	ld e, l
-	hlcoord 1, 13
-	ld b, $4
-	ld c, $12
-	call ClearBox
-	hlcoord 1, 14
-	call PlaceString
-	jr .asm_4a1db
-.asm_4a1db
-	call Function4a373
-	pop bc
-	ld hl, MenuSelection2
-	ld [hl], b
-	lb bc, 6, 1
-	hlcoord 2, 3
-	call ClearBox
-	jp Function4a195
-; 4a1ef (12:61ef)
-
-String_4a1ef: ; 4a1ef
-	db   "モバイルセンター¯えらぶ"
-	next "ログインパスワード¯いれる"
-	next "もどる@"
-; 4a20e
-
-Function4a20e: ; 4a20e (12:620e)
-	ld a, $1
-	call Function1ff8
-	callba Function1719c8
-	call ClearBGPalettes
-	call DelayFrame
-	jr Function4a239
-
-Function4a221: ; 4a221 (12:6221)
-	ld a, $1
-	call Function1ff8
-	call Function4a28a
-	jr c, Function4a239
-	call Function4a373
-	ld a, $2
-	ld [MenuSelection2], a
-	jr .asm_4a235
-.asm_4a235
-	pop bc
-	jp Function4a149
-
-Function4a239: ; 4a239 (12:6239)
-	pop bc
-	jp Function4a13b
-; 4a23d (12:623d)
-
-Strings_4a23d: ; 4a23d
-	db   "いつも せつぞく¯する"
-	next "モバイルセンター¯えらびます@"
-
-	db   "モバイルセンター", $1d, "せつぞくするとき"
-	next "つかうパスワード¯ほぞんできます@"
-
-	db   "まえ%がめん ", $1d, "もどります@"
-
-	db   "@"
-; 4a28a
-
-Function4a28a: ; 4a28a (12:628a)
-	hlcoord 2, 3
-	lb bc, 6, 1
-	ld a, " "
-	call Function4a6d8
-	call Function1bee
-	call WaitBGMap
-	call LoadStandardMenuDataHeader
-	ld a, $5
-	call GetSRAMBank
-	ld a, [$aa4b]
-	call CloseSRAM
-	and a
-	jr z, .asm_4a2df
-	hlcoord 12, 0
-	ld b, $5
-	ld c, $6
-	call Function48cdc
-	hlcoord 14, 1
-	ld de, String_4a34b
-	call PlaceString
-	callba Function104148
-	call Function4a118
-	call Function1bd3
-	push af
-	call PlayClickSFX
-	pop af
-	bit 1, a
-	jr nz, .asm_4a33b
-	ld a, [MenuSelection2]
-	cp $2
-	jr z, .asm_4a2f0
-	cp $3
-	jr z, .asm_4a33b
-.asm_4a2df
-	callba Function11765d
-	call ClearBGPalettes
-	call Call_ExitMenu
-	call LoadFontsExtra
-	scf
-	ret
-.asm_4a2f0
-	call Function1bee
-	ld hl, UnknownText_0x4a358
-	call PrintText
-	hlcoord 14, 7
-	ld b, $3
-	ld c, $4
-	call TextBox
-	callba Function104148
-	ld hl, MenuDataHeader_0x4a362
-	call LoadMenuDataHeader
-	call InterpretMenu2
-	bit 1, a
-	jr nz, .asm_4a338
-	ld a, [MenuSelection2]
-	cp $2
-	jr z, .asm_4a338
-	ld a, $5
-	call GetSRAMBank
-	ld hl, $aa4b
-	xor a
-	ld bc, $11
-	call ByteFill
-	call CloseSRAM
-	ld hl, UnknownText_0x4a35d
-	call PrintText
-	call JoyWaitAorB
-.asm_4a338
-	call ExitMenu
-.asm_4a33b
-	call Call_ExitMenu
-	callba Function104148
-	xor a
-	ret
-; 4a346 (12:6346)
-
-MenuDataHeader_0x4a346: ; 0x4a346
-	db $40 ; flags
-	db 00, 12 ; start coords
-	db 06, 19 ; end coords
-
-String_4a34b: ; 4a34b
-	db   "いれなおす"
-	next "けす"
-	next "もどる@"
-; 4a358
-
-UnknownText_0x4a358: ; 0x4a358
-	; Delete the saved LOG-IN PASSWORD?
-	text_jump UnknownText_0x1c5196
-	db "@"
-; 0x4a35d
-
-UnknownText_0x4a35d: ; 0x4a35d
-	; Deleted the LOG-IN PASSWORD.
-	text_jump UnknownText_0x1c51b9
-	db "@"
-; 0x4a362
-
-MenuDataHeader_0x4a362: ; 0x4a362
-	db $40 ; flags
-	db 07, 14 ; start coords
-	db 11, 19 ; end coords
-	dw MenuData2_0x4a36a
-	db 2 ; default option
-; 0x4a36a
-
-MenuData2_0x4a36a: ; 0x4a36a
-	db $e0 ; flags
-	db 2 ; items
-	db "はい@"
-	db "いいえ@"
-; 0x4a373
-
-Function4a373: ; 4a373 (12:6373)
-	ld hl, wcfa1
-	ld a, $4
-	ld [hli], a
-	ld a, $2
-	ld [hli], a
-	ld a, $3
-	ld [hli], a
-	ld a, $1
-	ld [hli], a
-	ld [hl], $0
-	set 5, [hl]
-	inc hl
-	xor a
-	ld [hli], a
-	ld a, $20
-	ld [hli], a
-	ld a, $1
-	add $40
-	add $80
-	add $2
-	ld [hli], a
-	ld a, $1
-rept 2
-	ld [hli], a
-endr
-	ret
-; 4a39a (12:639a)
-
-Function4a39a: ; 4a39a
-	call Function4a485
-	call Function4a492
-	call Function4a3aa
-	call SetPalettes
-	ret
-; 4a3a7
-
-Function4a3a7: ; 4a3a7 (12:63a7)
-	call Function4a485
-Function4a3aa: ; 4a3aa
-	hlcoord 0, 0
-	lb bc, 3, 1
-	xor a
-	call Function4a6d8
-	lb bc, 1, 1
-	ld a, $1
-	call Function4a6d8
-	lb bc, 1, 1
-	xor a
-	call Function4a6d8
-	lb bc, 1, 1
-	ld a, $1
-	call Function4a6d8
-	lb bc, 4, 1
-	ld a, $2
-	call Function4a6d8
-	lb bc, 1, 1
-	ld a, $3
-	call Function4a6d8
-	lb bc, 1, 1
-	ld a, " "
-	call Function4a6d8
-	hlcoord 1, 0
-	ld a, $1
-	lb bc, 3, 18
-	call Function4a6d8
-	lb bc, 1, 18
-	ld a, $0
-	call Function4a6d8
-	lb bc, 1, 18
-	ld a, $1
-	call Function4a6d8
-	lb bc, 1, 18
-	ld a, $2
-	call Function4a6d8
-	lb bc, 11, 18
-	ld a, " "
-	call Function4a6d8
-	hlcoord 19, 0
-	lb bc, 3, 1
-	ld a, $0
-	call Function4a6d8
-	lb bc, 1, 1
-	ld a, $1
-	call Function4a6d8
-	lb bc, 1, 1
-	xor a
-	call Function4a6d8
-	lb bc, 1, 1
-	ld a, $1
-	call Function4a6d8
-	lb bc, 4, 1
-	ld a, $2
-	call Function4a6d8
-	lb bc, 1, 1
-	ld a, $3
-	call Function4a6d8
-	lb bc, 1, 1
-	ld a, " "
-	call Function4a6d8
-	ret
-; 4a449 (12:6449)
-
-Function4a449: ; 4a449
-	ld bc, 3 * SCREEN_WIDTH
-	ld a, $0
-	hlcoord 0, 0
-	call ByteFill
-	ld bc, 2 * SCREEN_WIDTH
-	ld a, $1
-	call ByteFill
-	ld bc, 2 * SCREEN_WIDTH
-	ld a, $0
-	call ByteFill
-	ld bc, 2 * SCREEN_WIDTH
-	ld a, $1
-	call ByteFill
-	ld bc, SCREEN_WIDTH
-	ld a, $2
-	call ByteFill
-	ld bc, SCREEN_WIDTH
-	ld a, $3
-	call ByteFill
-	ld bc, SCREEN_WIDTH
-	ld a, " "
-	call ByteFill
-	ret
-; 4a485
-
-Function4a485: ; 4a485 (12:6485)
-	ld de, GFX_49c0c
-	ld hl, VTiles2 tile $00
-	lb bc, BANK(GFX_49c0c), $d
-	call Get2bpp
-	ret
-
-Function4a492: ; 4a492 (12:6492)
-	call Function4936e
-	ret
-
-
-MainMenu_MobileStudium: ; 4a496
-	ld a, [StartDay]
-	ld b, a
-	ld a, [StartHour]
-	ld c, a
-	ld a, [StartMinute]
-	ld d, a
-	ld a, [StartSecond]
-	ld e, a
-	push bc
-	push de
-	callba MobileStudium
-	call ClearBGPalettes
-	pop de
-	pop bc
-	ld a, b
-	ld [StartDay], a
-	ld a, c
-	ld [StartHour], a
-	ld a, d
-	ld [StartMinute], a
-	ld a, e
-	ld [StartSecond], a
-	ret
-; 4a4c4
-
-
-Function4a4c4: ; 4a4c4 (12:64c4)
-	call ClearBGPalettes
-	call Function4a3a7
-	call Function4a492
-	call Function4a680
-	call ClearBGPalettes
-	ld c, 20
-	call DelayFrames
-	hlcoord 2, 0
-	ld b, $a
-	ld c, $e
-	call Function48cdc
-	hlcoord 4, 2
-	ld de, String_4a5c5
-	call PlaceString
-	hlcoord 4, 4
-	ld de, String_4a5cd
-	call PlaceString
-	hlcoord 4, 6
-	ld de, String_4a5da
-	call PlaceString
-	hlcoord 4, 8
-	ld de, String_4a5e6
-	call PlaceString
-	hlcoord 4, 10
-	ld de, String_4a5f2
-	call PlaceString
-	hlcoord 0, 12
-	ld b, $4
-	ld c, $12
-	call TextBox
-	xor a
-	ld hl, Strings_4a5f6
-	ld d, h
-	ld e, l
-	hlcoord 1, 14
-	call PlaceString
-	ld a, $1
-	ld hl, Strings_4a5f6
-	call GetNthString
-	ld d, h
-	ld e, l
-	hlcoord 1, 16
-	call PlaceString
-	call Function3200
-	call SetPalettes
-	call Function1bc9
-	ld hl, MenuSelection2
-	ld b, [hl]
-	push bc
-	jr asm_4a54d
-
-Function4a545: ; 4a545 (12:6545)
-	call Function1bd3
-	ld hl, MenuSelection2
-	ld b, [hl]
-	push bc
-
-asm_4a54d: ; 4a54d (12:654d)
-	bit 0, a
-	jr nz, .asm_4a557
-	bit 1, a
-	jr nz, .asm_4a574
-	jr .asm_4a57e
-.asm_4a557
-	ld hl, MenuSelection2
-	ld a, [hl]
-	cp $1
-	jp z, Function4a6ab
-	cp $2
-	jp z, Function4a6ab
-	cp $3
-	jp z, Function4a6ab
-	cp $4
-	jp z, Function4a6ab
-	ld a, $1
-	call Function1ff8
-.asm_4a574
-	pop bc
-	call ClearBGPalettes
-	call ClearTileMap
-	jp Function49f0a
-.asm_4a57e
-	ld hl, MenuSelection2
-	ld a, [hl]
-	dec a
-	add a
-	push af
-	ld hl, Strings_4a5f6
-	call GetNthString
-	ld d, h
-	ld e, l
-	hlcoord 1, 13
-	ld b, $4
-	ld c, $12
-	call ClearBox
-	hlcoord 1, 14
-	call PlaceString
-	pop af
-	inc a
-	ld hl, Strings_4a5f6
-	call GetNthString
-	ld d, h
-	ld e, l
-	hlcoord 1, 16
-	call PlaceString
-	jp Function4a5b0
-
-Function4a5b0: ; 4a5b0 (12:65b0)
-	call Function4a680
-	pop bc
-	ld hl, MenuSelection2
-	ld [hl], b
-	ld b, $a
-	ld c, $1
-	hlcoord 3, 1
-	call ClearBox
-	jp Function4a545
-; 4a5c5 (12:65c5)
-
-String_4a5c5: ; 4a5c5
-	db "じこしょうかい@"
-String_4a5cd: ; 4a5cd
-	db "たいせん ", $4a, "はじまるとき@"
-String_4a5da: ; 4a5da
-	db "たいせん ", $1d, "かったとき@"
-String_4a5e6: ; 4a5e6
-	db "たいせん ", $1d, "まけたとき@"
-String_4a5f2: ; 4a5f2
-	db "もどる@"
-; 4a5f6
-
-Strings_4a5f6: ; 4a5f6
-	db "めいし や ニュース ", $1d, "のせる@"
-	db "あなた%あいさつです@"
-	db "モバイル たいせん", $4a, "はじまるとき@"
-	db "あいて", $1d, "みえる あいさつです@"
-	db "モバイル たいせんで かったとき@"
-	db "あいて", $1d, "みえる あいさつです@"
-	db "モバイル たいせんで まけたとき@"
-	db "あいて", $1d, "みえる あいさつです@"
-	db "まえ%がめん ", $1d, "もどります@"
-	db "@"
-; 4a680
-
-Function4a680: ; 4a680 (12:6680)
-	ld hl, wcfa1
-	ld a, $2
-	ld [hli], a
-	ld a, $3
-	ld [hli], a
-	ld a, $5
-	ld [hli], a
-	ld a, $1
-	ld [hli], a
-	ld [hl], $0
-	set 5, [hl]
-	inc hl
-	xor a
-	ld [hli], a
-	ld a, $20
-	ld [hli], a
-	ld a, $1
-	add $40
-	add $80
-	add $2
-	ld [hli], a
-	ld a, $1
-rept 2
-	ld [hli], a
-endr
-	xor a
-rept 3
-	ld [hli], a
-endr
-	ret
-
-Function4a6ab: ; 4a6ab (12:66ab)
-	ld a, $2
-	call Function1ff8
-	call ClearBGPalettes
-	ld b, $8
-	call GetSGBLayout
-	callba Function11c1ab
-	pop bc
-	call LoadFontsExtra
-	jp Function4a4c4
-
-Function4a6c5: ; 4a6c5 (12:66c5)
-	ld a, $5
-	ld [MusicFade], a
-	ld a, e
-	ld [MusicFadeIDLo], a
-	ld a, d
-	ld [MusicFadeIDHi], a
-	ld c, 22
-	call DelayFrames
-	ret
-
-Function4a6d8: ; 4a6d8 (12:66d8)
-	push bc
-	push hl
-.asm_4a6da
-	ld [hli], a
-	dec c
-	jr nz, .asm_4a6da
-	pop hl
-	ld bc, $14
-	add hl, bc
-	pop bc
-	dec b
-	jr nz, Function4a6d8
-	ret
-
-
 SpecialBeastsCheck: ; 0x4a6e8
 ; Check if the player owns all three legendary beasts.
 ; They must exist in either party or PC, and have the player's OT and ID.
@@ -28290,24 +16706,24 @@
 ; 4a927
 
 
-Function4a927: ; 4a927
+FindItemInPCOrBag: ; 4a927
 	ld a, [ScriptVar]
 	ld [CurItem], a
 	ld hl, PCItems
 	call CheckItem
-	jr c, .asm_4a948
+	jr c, .found
 
 	ld a, [ScriptVar]
 	ld [CurItem], a
 	ld hl, NumItems
 	call CheckItem
-	jr c, .asm_4a948
+	jr c, .found
 
 	xor a
 	ld [ScriptVar], a
 	ret
 
-.asm_4a948
+.found
 	ld a, 1
 	ld [ScriptVar], a
 	ret
@@ -28322,7 +16738,7 @@
 	xor a
 	ld [wd018], a
 	ld [wd019], a
-	ld b, $14
+	ld b, SCGB_14
 	call GetSGBLayout
 	call SetPalettes
 	call Function4aa22
@@ -28349,7 +16765,7 @@
 	jr c, .asm_4a974
 
 .asm_4a990
-	call Function2b3c
+	call ReturnToCallingMenu
 	ld hl, wd002
 	ld a, -1
 	ld bc, 3
@@ -28362,7 +16778,7 @@
 	jr c, .asm_4a9b0
 	call Function4a9d7
 	jr c, .asm_4a974
-	call Function2b3c
+	call ReturnToCallingMenu
 	and a
 
 .asm_4a9af
@@ -28442,8 +16858,8 @@
 	call ClearBGPalettes
 
 Function4aa25: ; 4aa25
-	callba Function5004f
-	callba Function50405
+	callba LoadPartyMenuGFX
+	callba InitPartyMenuWithCancel
 	call Function4aad3
 
 Function4aa34: ; 4aa34
@@ -28494,7 +16910,7 @@
 	push hl
 	cp -1
 	jr z, .done
-	ld hl, wc314
+	ld hl, wSpriteAnimationStructs
 	inc a
 	ld d, a
 .inner_loop
@@ -29025,22 +17441,22 @@
 Function4adc2: ; 4adc2
 	ld a, [wd002]
 	cp $ff
-	jr nz, .asm_4ade5
+	jr nz, .skip
 	ld a, [wd003]
 	cp $ff
-	jr nz, .asm_4addd
+	jr nz, .skip2
 	ld a, [wd004]
 	ld [wd002], a
 	ld a, $ff
 	ld [wd004], a
-	jr .asm_4ade5
+	jr .skip
 
-.asm_4addd
+.skip2
 	ld [wd002], a
 	ld a, $ff
 	ld [wd003], a
 
-.asm_4ade5
+.skip
 	ld a, [wd003]
 	cp $ff
 	ret nz
@@ -29067,18 +17483,18 @@
 	ret
 ; 4ae12
 
-Function4ae12: ; 4ae12
-	call Function4ae1f
+AskRememberPassword: ; 4ae12
+	call .DoMenu
 	ld a, $0
-	jr c, .asm_4ae1b
+	jr c, .okay
 	ld a, $1
 
-.asm_4ae1b
+.okay
 	ld [ScriptVar], a
 	ret
 ; 4ae1f
 
-Function4ae1f: ; 4ae1f
+.DoMenu: ; 4ae1f
 	lb bc, 14, 7
 	push bc
 	ld hl, YesNoMenuDataHeader
@@ -29097,16 +17513,16 @@
 	push af
 	ld c, 15
 	call DelayFrames
-	call Function4ae5e
+	call Buena_ExitMenu
 	pop af
-	jr c, .asm_4ae57
+	jr c, .refused
 	ld a, [MenuSelection2]
 	cp $2
-	jr z, .asm_4ae57
+	jr z, .refused
 	and a
 	ret
 
-.asm_4ae57
+.refused
 	ld a, $2
 	ld [MenuSelection2], a
 	scf
@@ -29113,7 +17529,7 @@
 	ret
 ; 4ae5e
 
-Function4ae5e: ; 4ae5e
+Buena_ExitMenu: ; 4ae5e
 	ld a, [hOAMUpdate]
 	push af
 	call ExitMenu
@@ -29123,7 +17539,7 @@
 	call DelayFrame
 	ld a, $1
 	ld [hOAMUpdate], a
-	call Function321c
+	call ApplyTilemap
 	pop af
 	ld [hOAMUpdate], a
 	ret
@@ -29187,6 +17603,8 @@
 	push hl
 	srl a
 	jr c, .UpperNybble
+
+; .LowerNybble
 	ld hl, TilesetPalettes
 	add [hl]
 	ld l, a
@@ -29290,7 +17708,7 @@
 ; 4cf45
 
 
-Function4cf45: ; 4cf45 (13:4f45)
+SaveMenu_LoadEDTile: ; 4cf45 (13:4f45)
 	ld a, [hCGB]
 	and a
 	jp z, WaitBGMap
@@ -29369,7 +17787,7 @@
 	ret
 
 
-Function4cffe:: ; 4cffe
+CheckSave:: ; 4cffe
 	ld a, BANK(s1_a008)
 	call GetSRAMBank
 	ld a, [s1_a008]
@@ -29434,11 +17852,11 @@
 	ret
 ; 4d188
 
-Function4d188: ; 4d188
+PhoneRing_LoadEDTile: ; 4d188
 	ld a, [hCGB]
 	and a
 	jp z, WaitBGMap
-	ld a, [wc2ce]
+	ld a, [wSpriteUpdatesEnabled]
 	cp $0
 	jp z, WaitBGMap
 
@@ -29460,11 +17878,11 @@
 	ld a, 1 ; BANK(VBGMap2)
 	ld [rVBK], a
 	hlcoord 0, 0, AttrMap
-	call Function4d1cb
+	call .LoadEDTile
 	ld a, 0 ; BANK(VBGMap0)
 	ld [rVBK], a
 	hlcoord 0, 0
-	call Function4d1cb
+	call .LoadEDTile
 .wait2
 	ld a, [rLY]
 	cp $8f
@@ -29478,7 +17896,7 @@
 	ret
 ; 4d1cb
 
-Function4d1cb: ; 4d1cb
+.LoadEDTile: ; 4d1cb
 	ld [hSPBuffer], sp
 	ld sp, hl
 	ld a, [hBGMapAddress + 1]
@@ -29626,7 +18044,7 @@
 
 _ResetClock: ; 4d3b1
 	callba Function8000
-	ld b, $8
+	ld b, SCGB_08
 	call GetSGBLayout
 	call LoadStandardFont
 	call LoadFontsExtra
@@ -29643,10 +18061,10 @@
 	ret z
 	call ClockResetPassword
 	jr c, .wrongpassword
-	ld a, BANK(s0_ac60)
+	ld a, BANK(sRTCStatusFlags)
 	call GetSRAMBank
 	ld a, $80
-	ld [s0_ac60], a
+	ld [sRTCStatusFlags], a
 	call CloseSRAM
 	ld hl, .text_okay
 	call PrintText
@@ -29865,7 +18283,7 @@
 	ld c, $2
 	call .ComponentFromNumber
 	ld hl, sPlayerData + (PlayerName - wPlayerData)
-	ld c, $5
+	ld c, $5 ; PLAYER_NAME_LENGTH_J
 	call .ComponentFromString
 	ld hl, sPlayerData + (Money - wPlayerData)
 	ld c, $3
@@ -29902,7 +18320,7 @@
 
 Function4d54c: ; 4d54c
 	callba Function8000
-	ld b, $8
+	ld b, SCGB_08
 	call GetSGBLayout
 	call LoadStandardFont
 	call LoadFontsExtra
@@ -30030,7 +18448,7 @@
 	ld [CurSpecies], a
 	call GetBaseData
 	pop de
-	predef Function5108b
+	predef FrontpicPredef
 	ret
 ; 4d81e
 
@@ -30045,7 +18463,7 @@
 	ld [TempMonDVs], a
 	ld a, [wPlayerWrapCount]
 	ld [TempMonDVs + 1], a
-	ld b, $1a
+	ld b, SCGB_1A
 	call GetSGBLayout
 	ld a, $e4
 	call DmgToCgbBGPals
@@ -30390,7 +18808,7 @@
 	call GetPartyLocation
 	ld a, [hl]
 	ld [CurPartyLevel], a
-	call Function4db49
+	call SetCaughtData
 	ld a, [PartyCount]
 	dec a
 	ld hl, PartyMon1CaughtLocation
@@ -30418,11 +18836,11 @@
 	xor a
 	ld [CurPartyMon], a
 	ld hl, wContestMon
-	ld de, wd018
+	ld de, wd018_Mon
 	ld bc, BOXMON_STRUCT_LENGTH
 	call CopyBytes
 	ld hl, PlayerName
-	ld de, wd00d
+	ld de, wd00d_MonOT
 	ld bc, NAME_LENGTH
 	call CopyBytes
 	callab Function51322
@@ -30434,9 +18852,9 @@
 	jr c, .Box_SkipNickname
 	ld a, BOXMON
 	ld [MonType], a
-	ld de, wd050
+	ld de, wd050_MonNick
 	callab InitNickname
-	ld hl, wd050
+	ld hl, wd050_MonNick
 
 .Box_SkipNickname
 	ld a, BANK(sBoxMonNicknames)
@@ -30452,7 +18870,7 @@
 	ld a, [sBoxMon1Level]
 	ld [CurPartyLevel], a
 	call CloseSRAM
-	call Function4db83
+	call SetBoxMonCaughtData
 	ld a, BANK(sBoxMon1CaughtLocation)
 	call GetSRAMBank
 	ld hl, sBoxMon1CaughtLocation
@@ -30489,12 +18907,12 @@
 ; 0x4db49
 
 
-Function4db49: ; 4db49
+SetCaughtData: ; 4db49
 	ld a, [PartyCount]
 	dec a
 	ld hl, PartyMon1CaughtLevel
 	call GetPartyLocation
-Function4db53: ; 4db53
+SetBoxmonOrEggmonCaughtData: ; 4db53
 	ld a, [TimeOfDay]
 	inc a
 	rrca
@@ -30528,27 +18946,27 @@
 	ret
 ; 4db83
 
-Function4db83: ; 4db83
+SetBoxMonCaughtData: ; 4db83
 	ld a, BANK(sBoxMon1CaughtLevel)
 	call GetSRAMBank
 	ld hl, sBoxMon1CaughtLevel
-	call Function4db53
+	call SetBoxmonOrEggmonCaughtData
 	call CloseSRAM
 	ret
 ; 4db92
 
-SetBoxMonCaughtData: ; 4db92
+SetGiftBoxMonCaughtData: ; 4db92
 	push bc
 	ld a, BANK(sBoxMon1CaughtLevel)
 	call GetSRAMBank
 	ld hl, sBoxMon1CaughtLevel
 	pop bc
-	call SetPkmnCaughtData
+	call SetGiftMonCaughtData
 	call CloseSRAM
 	ret
 ; 4dba3
 
-SetPartymonCaughtData: ; 4dba3
+SetGiftPartyMonCaughtData: ; 4dba3
 	ld a, [PartyCount]
 	dec a
 	ld hl, PartyMon1CaughtLevel
@@ -30555,7 +18973,7 @@
 	push bc
 	call GetPartyLocation
 	pop bc
-SetPkmnCaughtData: ; 4dbaf
+SetGiftMonCaughtData: ; 4dbaf
 	xor a
 	ld [hli], a
 	ld a, $7e
@@ -30566,7 +18984,7 @@
 ; 4dbb8
 
 
-Function4dbb8: ; 4dbb8 (13:5bb8)
+SetEggMonCaughtData: ; 4dbb8 (13:5bb8)
 	ld a, [CurPartyMon]
 	ld hl, PartyMon1CaughtLevel
 	call GetPartyLocation
@@ -30574,7 +18992,7 @@
 	push af
 	ld a, $1
 	ld [CurPartyLevel], a
-	call Function4db53
+	call SetBoxmonOrEggmonCaughtData
 	pop af
 	ld [CurPartyLevel], a
 	ret
@@ -30723,1158 +19141,8 @@
 ; 4dc7b
 
 
-Function4dc7b: ; 4dc7b (13:5c7b)
-	ld a, [wLinkMode]
-	cp LINK_MOBILE
-	jr nz, StatsScreenInit
+INCLUDE "engine/stats_screen.asm"
 
-	ld a, [wBattleMode] ; wd22d (aliases: EnemyMonEnd)
-	and a
-	jr z, StatsScreenInit
-	jr Function4dc8f
-
-StatsScreenInit: ; 4dc8a
-	ld hl, StatsScreenMain
-	jr StatsScreenInit_gotaddress
-
-Function4dc8f: ; 4dc8f
-	ld hl, StatsScreenBattle
-	jr StatsScreenInit_gotaddress
-
-StatsScreenInit_gotaddress: ; 4dc94
-	ld a, [hMapAnims]
-	push af
-	xor a
-	ld [hMapAnims], a ; disable overworld tile animations
-	ld a, [wc2c6] ; whether sprite is to be mirrorred
-	push af
-	ld a, [wJumptableIndex]
-	ld b, a
-	ld a, [wcf64]
-	ld c, a
-
-	push bc
-	push hl
-	call ClearBGPalettes
-	call ClearTileMap
-	call UpdateSprites
-	callba Functionfb53e
-	pop hl
-	call _hl_
-	call ClearBGPalettes
-	call ClearTileMap
-	pop bc
-
-	; restore old values
-	ld a, b
-	ld [wJumptableIndex], a
-	ld a, c
-	ld [wcf64], a
-	pop af
-	ld [wc2c6], a
-	pop af
-	ld [hMapAnims], a
-	ret
-; 0x4dcd2
-
-StatsScreenMain: ; 0x4dcd2
-	xor a
-	ld [wJumptableIndex], a
-	; stupid interns
-	ld [wcf64], a
-	ld a, [wcf64]
-	and $fc
-	or $1
-	ld [wcf64], a
-.loop ; 4dce3
-	ld a, [wJumptableIndex]
-	and $7f
-	ld hl, StatsScreenPointerTable
-	rst JumpTable
-	call Function4dd3a ; check for keys?
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr z, .loop
-	ret
-; 0x4dcf7
-
-StatsScreenBattle: ; 4dcf7
-	xor a
-	ld [wJumptableIndex], a
-	; stupid interns
-	ld [wcf64], a
-	ld a, [wcf64]
-	and $fc
-	or $1
-	ld [wcf64], a
-.loop
-	callba Function100dd2
-	ld a, [wJumptableIndex]
-	and $7f
-	ld hl, StatsScreenPointerTable
-	rst JumpTable
-	call Function4dd3a
-	callba Function100dfd
-	jr c, .exit
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr z, .loop
-
-.exit
-	ret
-; 4dd2a
-
-StatsScreenPointerTable: ; 4dd2a
-	dw MonStatsInit ; regular pokémon
-	dw EggStatsInit ; egg
-	dw StatsScreenWaitCry
-	dw Function4ddac
-	dw Function4ddc6
-	dw StatsScreenWaitCry
-	dw Function4ddd6
-	dw Function4dd6c
-; 4dd3a
-
-
-Function4dd3a: ; 4dd3a (13:5d3a)
-	ld hl, wcf64
-	bit 6, [hl]
-	jr nz, .asm_4dd49
-	bit 5, [hl]
-	jr nz, .asm_4dd56
-	call DelayFrame
-	ret
-.asm_4dd49
-	callba Functiond00b4
-	jr nc, .asm_4dd56
-	ld hl, wcf64
-	res 6, [hl]
-.asm_4dd56
-	ld hl, wcf64
-	res 5, [hl]
-	callba Function10402d
-	ret
-
-Function4dd62: ; 4dd62 (13:5d62)
-	ld a, [wJumptableIndex]
-	and $80
-	or h
-	ld [wJumptableIndex], a
-	ret
-
-Function4dd6c: ; 4dd6c (13:5d6c)
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-MonStatsInit: ; 4dd72 (13:5d72)
-	ld hl, wcf64
-	res 6, [hl]
-	call ClearBGPalettes
-	call ClearTileMap
-	callba Function10402d
-	call Function4ddf2
-	ld a, [CurPartySpecies]
-	cp EGG
-	jr z, .asm_4dd9b
-	call Function4deea
-	ld hl, wcf64
-	set 4, [hl]
-	ld h, $4
-	call Function4dd62
-	ret
-.asm_4dd9b
-	ld h, $1
-	call Function4dd62
-	ret
-
-EggStatsInit: ; 4dda1
-	call EggStatsScreen
-	ld a, [wJumptableIndex]
-	inc a
-	ld [wJumptableIndex], a
-	ret
-; 0x4ddac
-
-
-Function4ddac: ; 4ddac (13:5dac)
-	call Function4de2c
-	jr nc, .asm_4ddb7
-	ld h, $0
-	call Function4dd62
-	ret
-.asm_4ddb7
-	bit 0, a
-	jr nz, .asm_4ddc0
-	and $c3
-	jp Function4de54
-.asm_4ddc0
-	ld h, $7
-	call Function4dd62
-	ret
-
-Function4ddc6: ; 4ddc6 (13:5dc6)
-	call Function4dfb6
-	ld hl, wcf64
-	res 4, [hl]
-	ld a, [wJumptableIndex]
-	inc a
-	ld [wJumptableIndex], a
-	ret
-
-Function4ddd6: ; 4ddd6 (13:5dd6)
-	call Function4de2c
-	jr nc, .asm_4dde1
-	ld h, $0
-	call Function4dd62
-	ret
-
-.asm_4dde1
-	and $f3
-	jp Function4de54
-
-StatsScreenWaitCry: ; 4dde6 (13:5de6)
-	call IsSFXPlaying
-	ret nc
-	ld a, [wJumptableIndex]
-	inc a
-	ld [wJumptableIndex], a
-	ret
-
-Function4ddf2: ; 4ddf2 (13:5df2)
-	ld a, [MonType]
-	cp BREEDMON
-	jr nz, .asm_4de10
-	ld a, [wd018]
-	ld [CurSpecies], a
-	call GetBaseData
-	ld hl, wd018
-	ld de, TempMon
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call CopyBytes
-	jr .asm_4de2a
-.asm_4de10
-	callba CopyPkmnToTempMon
-	ld a, [CurPartySpecies]
-	cp EGG
-	jr z, .asm_4de2a
-	ld a, [MonType]
-	cp BOXMON
-	jr c, .asm_4de2a
-	callba Function50890
-.asm_4de2a
-	and a
-	ret
-
-Function4de2c: ; 4de2c (13:5e2c)
-	call GetJoypad
-	ld a, [MonType]
-	cp BREEDMON
-	jr nz, .notbreedmon
-	push hl
-	push de
-	push bc
-	callba Functione2f95
-	pop bc
-	pop de
-	pop hl
-	ld a, [wcf73]
-	and $c0
-	jr nz, .set_carry
-	ld a, [wcf73]
-	jr .clear_flags
-
-.notbreedmon
-	ld a, [hJoyPressed]
-.clear_flags
-	and a
-	ret
-
-.set_carry
-	scf
-	ret
-
-Function4de54: ; 4de54 (13:5e54)
-	push af
-	ld a, [wcf64]
-	and $3
-	ld c, a
-	pop af
-	bit 1, a
-	jp nz, Function4dee4
-	bit 5, a
-	jr nz, .asm_4dec7
-	bit 4, a
-	jr nz, .asm_4debd
-	bit 0, a
-	jr nz, .asm_4deb8
-	bit 6, a
-	jr nz, .asm_4dea0
-	bit 7, a
-	jr nz, .asm_4de77
-	jr .asm_4dece
-.asm_4de77
-	ld a, [MonType]
-	cp BOXMON
-	jr nc, .asm_4dece
-	and a
-	ld a, [PartyCount]
-	jr z, .asm_4de87
-	ld a, [OTPartyCount]
-.asm_4de87
-	ld b, a
-	ld a, [CurPartyMon]
-	inc a
-	cp b
-	jr z, .asm_4dece
-	ld [CurPartyMon], a
-	ld b, a
-	ld a, [MonType]
-	and a
-	jr nz, .asm_4dede
-	ld a, b
-	inc a
-	ld [wd0d8], a
-	jr .asm_4dede
-.asm_4dea0
-	ld a, [CurPartyMon]
-	and a
-	jr z, .asm_4dece
-	dec a
-	ld [CurPartyMon], a
-	ld b, a
-	ld a, [MonType]
-	and a
-	jr nz, .asm_4dede
-	ld a, b
-	inc a
-	ld [wd0d8], a
-	jr .asm_4dede
-.asm_4deb8
-	ld a, c
-	cp $3
-	jr z, Function4dee4
-.asm_4debd
-	inc c
-	ld a, $3
-	cp c
-	jr nc, .asm_4decf
-	ld c, $1
-	jr .asm_4decf
-.asm_4dec7
-	dec c
-	jr nz, .asm_4decf
-	ld c, $3
-	jr .asm_4decf
-.asm_4dece
-	ret
-.asm_4decf
-	ld a, [wcf64]
-	and $fc
-	or c
-	ld [wcf64], a
-	ld h, $4
-	call Function4dd62
-	ret
-.asm_4dede
-	ld h, $0
-	call Function4dd62
-	ret
-
-Function4dee4: ; 4dee4 (13:5ee4)
-	ld h, $7
-	call Function4dd62
-	ret
-
-Function4deea: ; 4deea (13:5eea)
-	call Function4df45
-	xor a
-	ld [hBGMapMode], a
-	ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
-	ld [wd265], a
-	ld [CurSpecies], a
-	hlcoord 8, 0
-	ld [hl], "№"
-	inc hl
-	ld [hl], "."
-	inc hl
-	hlcoord 10, 0
-	lb bc, PRINTNUM_LEADINGZEROS | 1, 3
-	ld de, wd265
-	call PrintNum
-	hlcoord 14, 0
-	call PrintLevel
-	ld hl, Unknown_4df77
-	call Function4e528
-	call Function4e505
-	hlcoord 8, 2
-	call PlaceString
-	hlcoord 18, 0
-	call Function4df66
-	hlcoord 9, 4
-	ld a, "/"
-	ld [hli], a
-	ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
-	ld [wd265], a
-	call GetPokemonName
-	call PlaceString
-	call Function4df8f
-	call Function4df9b
-	call Function4dfa6
-	ret
-
-Function4df45: ; 4df45 (13:5f45)
-	ld hl, TempMonHP
-	ld a, [hli]
-	ld b, a
-	ld c, [hl]
-	ld hl, TempMonMaxHP
-	ld a, [hli]
-	ld d, a
-	ld e, [hl]
-	callba DrawPartyMenuHPBar
-	ld hl, wcda1
-	call SetHPPal
-	ld b, $3
-	call GetSGBLayout
-	call DelayFrame
-	ret
-
-Function4df66: ; 4df66 (13:5f66)
-	push hl
-	callba GetGender
-	pop hl
-	ret c
-	ld a, "♂"
-	jr nz, .got_gender
-	ld a, "♀"
-.got_gender
-	ld [hl], a
-	ret
-; 4df77 (13:5f77)
-
-Unknown_4df77: ; 4df77
-	dw PartyMonNicknames
-	dw OTPartyMonNicknames
-	dw sBoxMonNicknames
-	dw wd002
-; 4df7f
-
-Function4df7f: ; 4df7f
-	hlcoord 7, 0
-	ld bc, SCREEN_WIDTH
-	ld d, SCREEN_HEIGHT
-.loop
-	ld a, $31
-	ld [hl], a
-	add hl, bc
-	dec d
-	jr nz, .loop
-	ret
-; 4df8f
-
-Function4df8f: ; 4df8f (13:5f8f)
-	hlcoord 0, 7
-	ld b, SCREEN_WIDTH
-	ld a, "_"
-.loop
-	ld [hli], a
-	dec b
-	jr nz, .loop
-	ret
-
-Function4df9b: ; 4df9b (13:5f9b)
-	hlcoord 12, 6
-	ld [hl], "◀"
-	hlcoord 19, 6
-	ld [hl], "▶"
-	ret
-
-Function4dfa6: ; 4dfa6 (13:5fa6)
-	ld bc, TempMonDVs
-	callba CheckShininess
-	ret nc
-	hlcoord 19, 0
-	ld [hl], "<SHINY>"
-	ret
-
-Function4dfb6: ; 4dfb6 (13:5fb6)
-	ld a, [CurBaseData] ; wd236 (aliases: BaseDexNo)
-	ld [wd265], a
-	ld [CurSpecies], a
-	xor a
-	ld [hBGMapMode], a
-	call Function4dfda
-	call Function4e002
-	call Function4dfed
-	ld hl, wcf64
-	bit 4, [hl]
-	jr nz, .asm_4dfd6
-	call SetPalettes
-	ret
-
-.asm_4dfd6
-	call Function4e226
-	ret
-
-Function4dfda: ; 4dfda (13:5fda)
-	ld a, [wcf64]
-	and $3
-	ld c, a
-	call Function4e4cd
-	hlcoord 0, 8
-	lb bc, 10, 20
-	call ClearBox
-	ret
-
-Function4dfed: ; 4dfed (13:5fed)
-	ld a, [wcf64]
-	and $3
-	ld c, a
-	callba Function8c8a
-	call DelayFrame
-	ld hl, wcf64
-	set 5, [hl]
-	ret
-
-Function4e002: ; 4e002 (13:6002)
-	ld a, [wcf64]
-	and $3
-	dec a
-	ld hl, Jumptable_4e00d
-	rst JumpTable
-	ret
-
-Jumptable_4e00d: ; 4e00d (13:600d)
-	dw Function4e013
-	dw Function4e147
-	dw Function4e1ae
-
-
-Function4e013: ; 4e013 (13:6013)
-	hlcoord 0, 9
-	ld b, $0
-	predef DrawPlayerHP
-	hlcoord 8, 9
-	ld [hl], $41
-	ld de, String_4e119
-	hlcoord 0, 12
-	call PlaceString
-	ld a, [TempMonPokerusStatus]
-	ld b, a
-	and $f
-	jr nz, .asm_4e055
-	ld a, b
-	and $f0
-	jr z, .asm_4e03d
-	hlcoord 8, 8
-	ld [hl], $e8
-.asm_4e03d
-	ld a, [MonType]
-	cp $2
-	jr z, .asm_4e060
-	hlcoord 6, 13
-	push hl
-	ld de, TempMonStatus
-	predef PlaceStatusString
-	pop hl
-	jr nz, .asm_4e066
-	jr .asm_4e060
-.asm_4e055
-	ld de, String_4e142
-	hlcoord 1, 13
-	call PlaceString
-	jr .asm_4e066
-.asm_4e060
-	ld de, String_4e127
-	call PlaceString
-.asm_4e066
-	hlcoord 1, 15
-	predef PrintMonTypes
-	hlcoord 9, 8
-	ld de, $14
-	ld b, $a
-	ld a, $31
-.asm_4e078
-	ld [hl], a
-	add hl, de
-	dec b
-	jr nz, .asm_4e078
-	ld de, String_4e12b
-	hlcoord 10, 9
-	call PlaceString
-	hlcoord 17, 14
-	call Function4e0d3
-	hlcoord 13, 10
-	lb bc, 3, 7
-	ld de, TempMonExp
-	call PrintNum
-	call Function4e0e7
-	hlcoord 13, 13
-	lb bc, 3, 7
-	ld de, Buffer1 ; wd1ea (aliases: MagikarpLength)
-	call PrintNum
-	ld de, String_4e136
-	hlcoord 10, 12
-	call PlaceString
-	ld de, String_4e13f
-	hlcoord 14, 14
-	call PlaceString
-	hlcoord 11, 16
-	ld a, [TempMonLevel]
-	ld b, a
-	ld de, TempMonExp + 2
-	predef FillInExpBar
-	hlcoord 10, 16
-	ld [hl], $40
-	hlcoord 19, 16
-	ld [hl], $41
-	ret
-
-Function4e0d3: ; 4e0d3 (13:60d3)
-	ld a, [TempMonLevel]
-	push af
-	cp MAX_LEVEL
-	jr z, .asm_4e0df
-	inc a
-	ld [TempMonLevel], a
-.asm_4e0df
-	call PrintLevel
-	pop af
-	ld [TempMonLevel], a
-	ret
-
-Function4e0e7: ; 4e0e7 (13:60e7)
-	ld a, [TempMonLevel]
-	cp MAX_LEVEL
-	jr z, .asm_4e111
-	inc a
-	ld d, a
-	callba CalcExpAtLevel
-rept 2
-	ld hl, TempMonExp + 2
-endr
-	ld a, [$ffb6]
-	sub [hl]
-	dec hl
-	ld [wd1ec], a
-	ld a, [$ffb5]
-	sbc [hl]
-	dec hl
-	ld [Buffer2], a ; wd1eb (aliases: MovementType)
-	ld a, [hQuotient]
-	sbc [hl]
-	ld [Buffer1], a ; wd1ea (aliases: MagikarpLength)
-	ret
-.asm_4e111
-	ld hl, Buffer1 ; wd1ea (aliases: MagikarpLength)
-	xor a
-rept 2
-	ld [hli], a
-endr
-	ld [hl], a
-	ret
-; 4e119 (13:6119)
-
-String_4e119: ; 4e119
-	db   "STATUS/"
-	next "TYPE/@"
-; 4e127
-
-String_4e127: ; 4e127
-	db "OK @"
-; 4e12b
-
-String_4e12b: ; 4e12b
-	db "EXP POINTS@"
-; 4e136
-
-String_4e136: ; 4e136
-	db "LEVEL UP@"
-; 4e13f
-
-String_4e13f: ; 4e13f
-	db "TO@"
-; 4e142
-
-String_4e142: ; 4e142
-	db "#RUS@"
-; 4e147
-
-Function4e147: ; 4e147 (13:6147)
-	ld de, String_4e1a0
-	hlcoord 0, 8
-	call PlaceString
-	call Function4e189
-	hlcoord 8, 8
-	call PlaceString
-	ld de, String_4e1a9
-	hlcoord 0, 10
-	call PlaceString
-	ld hl, TempMonMoves
-	ld de, wListMoves_MoveIndicesBuffer
-	ld bc, NUM_MOVES
-	call CopyBytes
-	hlcoord 8, 10
-	ld a, SCREEN_WIDTH * 2
-	ld [Buffer1], a
-	predef ListMoves
-	hlcoord 12, 11
-	ld a, $28
-	ld [Buffer1], a
-	predef Function50c50
-	ret
-
-Function4e189: ; 4e189 (13:6189)
-	ld de, String_4e1a5
-	ld a, [TempMonItem]
-	and a
-	ret z
-	ld b, a
-	callba Function28771
-	ld a, b
-	ld [wd265], a
-	call GetItemName
-	ret
-; 4e1a0 (13:61a0)
-
-String_4e1a0: ; 4e1a0
-	db "ITEM@"
-; 4e1a5
-
-String_4e1a5: ; 4e1a5
-	db "---@"
-; 4e1a9
-
-String_4e1a9: ; 4e1a9
-	db "MOVE@"
-; 4e1ae
-
-Function4e1ae: ; 4e1ae (13:61ae)
-	call Function4e1cc
-	hlcoord 10, 8
-	ld de, $14
-	ld b, $a
-	ld a, $31
-.asm_4e1bb
-	ld [hl], a
-	add hl, de
-	dec b
-	jr nz, .asm_4e1bb
-	hlcoord 11, 8
-	ld bc, $6
-	predef PrintTempMonStats
-	ret
-
-Function4e1cc: ; 4e1cc (13:61cc)
-	ld de, IDNoString
-	hlcoord 0, 9
-	call PlaceString
-	ld de, OTString
-	hlcoord 0, 12
-	call PlaceString
-	hlcoord 2, 10
-	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
-	ld de, TempMonID
-	call PrintNum
-	ld hl, Unknown_4e216
-	call Function4e528
-	call Function4e505
-	callba CheckNickErrors
-	hlcoord 2, 13
-	call PlaceString
-	ld a, [TempMonCaughtGender]
-	and a
-	jr z, .asm_4e215
-	cp $7f
-	jr z, .asm_4e215
-	and $80
-	ld a, "♂"
-	jr z, .asm_4e211
-	ld a, "♀"
-.asm_4e211
-	hlcoord 9, 13
-	ld [hl], a
-.asm_4e215
-	ret
-; 4e216 (13:6216)
-
-Unknown_4e216: ; 4e216
-	dw PartyMonOT
-	dw OTPartyMonOT
-	dw sBoxMonOT
-	dw wd00d
-; 4e21e
-
-IDNoString: ; 4e21e
-	db $73, "№.@"
-
-OTString: ; 4e222
-	db "OT/@"
-; 4e226
-
-
-Function4e226: ; 4e226 (13:6226)
-	ld hl, TempMonDVs
-	predef GetUnownLetter
-	call Function4e2ad
-	jr c, .asm_4e238
-	and a
-	jr z, .asm_4e23f
-	jr .asm_4e246
-.asm_4e238
-	call Function4e271
-	call SetPalettes
-	ret
-.asm_4e23f
-	call Function4e253
-	call SetPalettes
-	ret
-.asm_4e246
-	call SetPalettes
-	call Function4e253
-	ld a, [CurPartySpecies]
-	call PlayCry2
-	ret
-
-Function4e253: ; 4e253 (13:6253)
-	ld hl, wcf64
-	set 5, [hl]
-	ld a, [CurPartySpecies]
-	cp UNOWN
-	jr z, .asm_4e266
-	hlcoord 0, 0
-	call PrepMonFrontpic
-	ret
-.asm_4e266
-	xor a
-	ld [wc2c6], a
-	hlcoord 0, 0
-	call _PrepMonFrontpic
-	ret
-
-Function4e271: ; 4e271 (13:6271)
-	ld a, [CurPartySpecies]
-	cp UNOWN
-	jr z, .asm_4e281
-	ld a, $1
-	ld [wc2c6], a
-	call Function4e289
-	ret
-.asm_4e281
-	xor a
-	ld [wc2c6], a
-	call Function4e289
-	ret
-
-Function4e289: ; 4e289 (13:6289)
-	ld a, [CurPartySpecies]
-	call IsAPokemon
-	ret c
-	call Function4e307
-	ld de, VTiles2 tile $00
-	predef Function5108b
-	hlcoord 0, 0
-	ld d, $0
-	ld e, $2
-	predef LoadMonAnimation
-	ld hl, wcf64
-	set 6, [hl]
-	ret
-
-Function4e2ad: ; 4e2ad (13:62ad)
-	ld a, [MonType]
-	ld hl, Jumptable_4e2b5
-	rst JumpTable
-	ret
-
-Jumptable_4e2b5: ; 4e2b5 (13:62b5)
-	dw Function4e2bf
-	dw Function4e2cf
-	dw Function4e2d1
-	dw Function4e2ed
-	dw Function4e301
-
-
-Function4e2bf: ; 4e2bf (13:62bf)
-	ld a, [CurPartyMon]
-	ld hl, PartyMons ; wdcdf (aliases: PartyMon1, PartyMon1Species)
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call AddNTimes
-	ld b, h
-	ld c, l
-	jr Function4e2f2
-
-Function4e2cf: ; 4e2cf (13:62cf)
-	xor a
-	ret
-
-Function4e2d1: ; 4e2d1 (13:62d1)
-	ld hl, sBoxMons
-	ld bc, $30
-	ld a, [CurPartyMon]
-	call AddNTimes
-	ld b, h
-	ld c, l
-	ld a, $1
-	call GetSRAMBank
-	call Function4e2f2
-	push af
-	call CloseSRAM
-	pop af
-	ret
-
-Function4e2ed: ; 4e2ed (13:62ed)
-	ld bc, TempMonSpecies ; wd10e (aliases: TempMon)
-	jr Function4e2f2
-
-Function4e2f2: ; 4e2f2 (13:62f2)
-	ld a, [CurPartySpecies]
-	cp EGG
-	jr z, .asm_4e2fe
-	call CheckFaintedFrzSlp
-	jr c, Function4e305
-.asm_4e2fe
-	xor a
-	scf
-	ret
-
-Function4e301: ; 4e301 (13:6301)
-	ld a, $1
-	and a
-	ret
-Function4e305: ; 4e305 (13:6305)
-	xor a
-	ret
-
-Function4e307: ; 4e307 (13:6307)
-	nop
-	push hl
-	push de
-	push bc
-	push af
-	call DelayFrame
-	ld a, [rVBK]
-	push af
-	ld a, $1
-	ld [rVBK], a
-	ld de, TextBoxSpaceGFX
-	lb bc, BANK(TextBoxSpaceGFX), 1
-	ld hl, VTiles2 tile $7f
-	call Get2bpp
-	pop af
-	ld [rVBK], a
-	pop af
-	pop bc
-	pop de
-	pop hl
-	ret
-; 4e32a (13:632a)
-
-Unknown_4e32a: ; 4e32a
-; A blank tile?
-	ds 16
-; 4e33a
-
-EggStatsScreen: ; 4e33a
-	xor a
-	ld [hBGMapMode], a
-	ld hl, wcda1
-	call SetHPPal
-	ld b, $3
-	call GetSGBLayout
-	call Function4df8f
-	ld de, EggString
-	hlcoord 8, 1
-	call PlaceString
-	ld de, IDNoString
-	hlcoord 8, 3
-	call PlaceString
-	ld de, OTString
-	hlcoord 8, 5
-	call PlaceString
-	ld de, FiveQMarkString
-	hlcoord 11, 3
-	call PlaceString
-	ld de, FiveQMarkString
-	hlcoord 11, 5
-	call PlaceString
-	ld a, [TempMonHappiness] ; egg status
-	ld de, EggSoonString
-	cp $6
-	jr c, .picked
-	ld de, EggCloseString
-	cp $b
-	jr c, .picked
-	ld de, EggMoreTimeString
-	cp $29
-	jr c, .picked
-	ld de, EggALotMoreTimeString
-.picked
-	hlcoord 1, 9
-	call PlaceString
-	ld hl, wcf64
-	set 5, [hl]
-	call SetPalettes ; pals
-	call DelayFrame
-	hlcoord 0, 0
-	call PrepMonFrontpic
-	callba Function10402d
-	call Function4e497
-
-	ld a, [TempMonHappiness]
-	cp 6
-	ret nc
-	ld de, SFX_2_BOOPS
-	call PlaySFX
-	ret
-; 0x4e3c0
-
-EggString: ; 4e3c0
-	db "EGG@"
-
-FiveQMarkString: ; 4e3c4
-	db "?????@"
-
-EggSoonString: ; 0x4e3ca
-	db   "It's making sounds"
-	next "inside. It's going"
-	next "to hatch soon!@"
-
-EggCloseString: ; 0x4e3fd
-	db   "It moves around"
-	next "inside sometimes."
-	next "It must be close"
-	next "to hatching.@"
-
-EggMoreTimeString: ; 0x4e43d
-	db   "Wonder what's"
-	next "inside? It needs"
-	next "more time, though.@"
-
-EggALotMoreTimeString: ; 0x4e46e
-	db   "This EGG needs a"
-	next "lot more time to"
-	next "hatch.@"
-; 0x4e497
-
-
-Function4e497: ; 4e497 (13:6497)
-	call Function4e2ad
-	ret nc
-	ld a, [TempMonHappiness]
-	ld e, $7
-	cp $6
-	jr c, .asm_4e4ab
-	ld e, $8
-	cp $b
-	jr c, .asm_4e4ab
-	ret
-.asm_4e4ab
-	push de
-	ld a, $1
-	ld [wc2c6], a
-	call Function4e307
-	ld de, VTiles2 tile $00
-	predef Function5108b
-	pop de
-	hlcoord 0, 0
-	ld d, $0
-	predef LoadMonAnimation
-	ld hl, wcf64
-	set 6, [hl]
-	ret
-
-Function4e4cd: ; 4e4cd (13:64cd)
-	hlcoord 13, 5
-	ld a, $36
-	call Function4e4f7
-	hlcoord 15, 5
-	ld a, $36
-	call Function4e4f7
-	hlcoord 17, 5
-	ld a, $36
-	call Function4e4f7
-	ld a, c
-	cp $2
-	ld a, $3a
-	hlcoord 13, 5
-	jr c, Function4e4f7
-	hlcoord 15, 5
-	jr z, Function4e4f7
-	hlcoord 17, 5
-
-Function4e4f7: ; 4e4f7 (13:64f7)
-	push bc
-	ld [hli], a
-	inc a
-	ld [hld], a
-	ld bc, $14
-	add hl, bc
-	inc a
-	ld [hli], a
-	inc a
-	ld [hl], a
-	pop bc
-	ret
-
-Function4e505: ; 4e505 (13:6505)
-	ld de, StringBuffer1
-	ld bc, $b
-	jr .asm_4e50d
-.asm_4e50d
-	ld a, [MonType]
-	cp BOXMON
-	jr nz, .asm_4e522
-	ld a, BANK(sBoxMonNicknames)
-	call GetSRAMBank
-	push de
-	call CopyBytes
-	pop de
-	call CloseSRAM
-	ret
-.asm_4e522
-	push de
-	call CopyBytes
-	pop de
-	ret
-
-Function4e528: ; 4e528 (13:6528)
-	ld a, [MonType]
-	add a
-	ld c, a
-	ld b, 0
-	add hl, bc
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld a, [MonType]
-	cp $3
-	ret z
-	ld a, [CurPartyMon]
-	jp SkipNames
-
-
-CheckFaintedFrzSlp: ; 4e53f
-	ld hl, MON_HP
-	add hl, bc
-	ld a, [hli]
-	or [hl]
-	jr z, .fainted_frz_slp
-	ld hl, MON_STATUS
-	add hl, bc
-	ld a, [hl]
-	and (1 << FRZ) | SLP
-	jr nz, .fainted_frz_slp
-	and a
-	ret
-
-.fainted_frz_slp
-	scf
-	ret
-; 4e554
-
-
 CatchTutorial:: ; 4e554
 	ld a, [BattleType]
 	dec a
@@ -32195,7 +19463,7 @@
 
 
 Function5088b: ; 5088b
-	ld bc, wd018
+	ld bc, wd018_Mon
 	jr Function50893
 ; 50890
 
@@ -33161,7 +20429,7 @@
 	ld [Buffer2], a ; wd1eb (aliases: MovementType)
 	cp b
 	jr z, .skip
-	call .SwapPartymonViaSRAM
+	call .SwapMonAndMail
 	ld a, [wd1ec]
 	call .ClearSprite
 	ld a, [Buffer2] ; wd1eb (aliases: MovementType)
@@ -33192,7 +20460,7 @@
 	call WaitPlaySFX
 	ret
 
-.SwapPartymonViaSRAM: ; 50f62 (14:4f62)
+.SwapMonAndMail: ; 50f62 (14:4f62)
 	push hl
 	push de
 	push bc
@@ -33261,27 +20529,27 @@
 	pop de
 	ld hl, wd002
 	call .CopyName
-	ld hl, sPartyScratch1
+	ld hl, sPartyMail
 	ld a, [Buffer2] ; wd1eb (aliases: MovementType)
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld bc, MAIL_STRUCT_LENGTH
 	call AddNTimes
 	push hl
 	ld de, wd002
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	ld a, BANK(sPartyScratch1)
+	ld bc, MAIL_STRUCT_LENGTH
+	ld a, BANK(sPartyMail)
 	call GetSRAMBank
 	call CopyBytes
-	ld hl, sPartyScratch1
+	ld hl, sPartyMail
 	ld a, [Buffer3]
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld bc, MAIL_STRUCT_LENGTH
 	call AddNTimes
 	pop de
 	push hl
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld bc, MAIL_STRUCT_LENGTH
 	call CopyBytes
 	pop de
 	ld hl, wd002
-	ld bc, SCRATCHMON_STRUCT_LENGTH
+	ld bc, MAIL_STRUCT_LENGTH
 	call CopyBytes
 	call CloseSRAM
 	pop bc
@@ -33362,7 +20630,7 @@
 	ret
 ; 5108b
 
-Function5108b: ; 5108b
+FrontpicPredef: ; 5108b
 	ld a, [CurPartySpecies]
 	ld [CurSpecies], a
 	call IsAPokemon
@@ -33446,7 +20714,7 @@
 	ld b, a
 	call Get2bpp
 	pop hl
-	ld de, 7 * 7 * $10
+	ld de, 7 * 7 tiles
 	add hl, de
 	push hl
 	ld a, $1
@@ -33454,17 +20722,17 @@
 	call GetFarWRAMByte
 	pop hl
 	and $f
-	ld de, w6_d000 + $800 + 5 * 5 * $10
+	ld de, w6_d800 + 5 * 5 tiles
 	ld c, 5 * 5
 	cp 5
-	jr z, .asm_5113b
-	ld de, w6_d000 + $800 + 6 * 6 * $10
+	jr z, .got_dims
+	ld de, w6_d800 + 6 * 6 tiles
 	ld c, 6 * 6
 	cp 6
-	jr z, .asm_5113b
-	ld de, w6_d000 + $800 + 7 * 7 * $10
+	jr z, .got_dims
+	ld de, w6_d800 + 7 * 7 tiles
 	ld c, 7 * 7
-.asm_5113b
+.got_dims
 
 	push hl
 	push bc
@@ -33561,10 +20829,10 @@
 ; This is a thing for some reason.
 	push hl
 	push bc
-	sub PICS_1 - $36
+	sub PICS_1 - PICS_FIX
 	ld c, a
 	ld b, 0
-	ld hl, Unknown_511d4
+	ld hl, .PicsBanks
 	add hl, bc
 	ld a, [hl]
 	pop bc
@@ -33572,7 +20840,7 @@
 	ret
 ; 511d4
 
-Unknown_511d4: ; 511d4
+.PicsBanks: ; 511d4
 	db PICS_1
 	db PICS_2
 	db PICS_3
@@ -33698,28 +20966,28 @@
 	jr z, .asm_512a8
 	ld a, c
 	cp 7 * 7
-	ld de, 7 * 7 * $10
-	jr z, .asm_51296
+	ld de, 7 * 7 tiles
+	jr z, .got_dims
 	cp 6 * 6
-	ld de, 6 * 6 * $10
-	jr z, .asm_51296
-	ld de, 5 * 5 * $10
+	ld de, 6 * 6 tiles
+	jr z, .got_dims
+	ld de, 5 * 5 tiles
 
-.asm_51296
+.got_dims
 	ld a, [hl]
 	ld b, $0
 	ld c, $8
-.asm_5129b
+.loop
 	rra
 	rl b
 	dec c
-	jr nz, .asm_5129b
+	jr nz, .loop
 	ld a, b
 	ld [hli], a
 	dec de
 	ld a, e
 	or d
-	jr nz, .asm_51296
+	jr nz, .got_dims
 
 .asm_512a8
 	pop bc
@@ -33833,13 +21101,13 @@
 	ld [wd265], a
 	ld hl, sBoxMons
 	ld bc, BOXMON_STRUCT_LENGTH
-	ld de, wd018
+	ld de, wd018_Mon
 	call Function513e0
-	ld hl, wd01a
+	ld hl, wd018_MonMoves
 	ld de, TempMonMoves
 	ld bc, NUM_MOVES
 	call CopyBytes
-	ld hl, wd02f
+	ld hl, wd018_MonPP
 	ld de, TempMonPP
 	ld bc, NUM_MOVES
 	call CopyBytes
@@ -33871,7 +21139,7 @@
 	ld [wd265], a
 	ld hl, PartyMons
 	ld bc, PARTYMON_STRUCT_LENGTH
-	ld de, wd018
+	ld de, wd018_Mon
 	call Function513e0
 	ret
 ; 513cb
@@ -33986,7 +21254,7 @@
 DoPlayerMovement:: ; 80000
 
 	call GetMovementInput
-	ld a, $3e ; standing
+	ld a, movement_step_sleep_1
 	ld [MovementAnimation], a
 	xor a
 	ld [wd041], a
@@ -34032,7 +21300,7 @@
 	cp PLAYER_BIKE
 	jr z, .Normal
 	cp PLAYER_SLIP
-	jr z, .Board
+	jr z, .Ice
 
 .Normal
 	call CheckForcedMovementInput
@@ -34060,7 +21328,7 @@
 	ret c
 	jr .NotMoving
 
-.Board
+.Ice
 	call CheckForcedMovementInput
 	call GetMovementAction
 	call CheckTileMovement
@@ -34088,7 +21356,7 @@
 	jr z, .Standing
 
 ; Walking into an edge warp won't bump.
-	ld a, [wd041]
+	ld a, [EngineBuffer4]
 	and a
 	jr nz, .CantMove
 	call PlayBump
@@ -34108,7 +21376,7 @@
 ; Tiles such as waterfalls and warps move the player
 ; in a given direction, overriding input.
 
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	ld c, a
 	call CheckWhirlpoolTile
 	jr c, .asm_800c4
@@ -34261,21 +21529,21 @@
 	jr z, TrySurfStep
 
 	call CheckLandPermissions
-	jr c, .asm_801be
+	jr c, .bump
 
 	call IsNPCInFront
 	and a
-	jr z, .asm_801be
+	jr z, .bump
 	cp 2
-	jr z, .asm_801be
+	jr z, .bump
 
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	call CheckIceTile
 	jr nc, .ice
 
 ; Downhill riding is slower when not moving down.
 	call CheckRiding
-	jr nz, .asm_801ae
+	jr nz, .walk
 
 	ld hl, BikeFlags
 	bit 2, [hl] ; downhill
@@ -34296,7 +21564,7 @@
 	scf
 	ret
 
-.asm_801ae
+.walk
 	ld a, STEP_WALK
 	call DoStep
 	scf
@@ -34312,7 +21580,7 @@
 	xor a
 	ret
 
-.asm_801be
+.bump
 	xor a
 	ret
 ; 801c0
@@ -34356,7 +21624,7 @@
 
 
 TryJumpLedge: ; 801f3
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	ld e, a
 	and $f0
 	cp $a0 ; ledge
@@ -34408,15 +21676,15 @@
 	ld d, 0
 	ld hl, .EdgeWarps
 	add hl, de
-	ld a, [PlayerStandingTile]
+	ld a, [PlayerNextTile]
 	cp [hl]
-	jr nz, .asm_80259
+	jr nz, .nope
 
 	ld a, 1
 	ld [wd041], a
 	ld a, [WalkingDirection]
 	cp STANDING
-	jr z, .asm_80259
+	jr z, .nope
 
 	ld e, a
 	ld a, [PlayerDirection]
@@ -34424,9 +21692,9 @@
 	rrca
 	and 3
 	cp e
-	jr nz, .asm_80259
-	call WarpCheck ; CheckFallPit?
-	jr nc, .asm_80259
+	jr nz, .nope
+	call WarpCheck
+	jr nc, .nope
 
 	call StandInPlace
 	scf
@@ -34433,7 +21701,7 @@
 	ld a, 1
 	ret
 
-.asm_80259
+.nope
 	xor a
 	ret
 
@@ -34481,21 +21749,45 @@
 	dw .WalkInPlace
 
 .Slow
-	db $08, $09, $0a, $0b
+	slow_step_down
+	slow_step_up
+	slow_step_left
+	slow_step_right
 .Walk
-	db $0c, $0d, $0e, $0f
+	step_down
+	step_up
+	step_left
+	step_right
 .Bike
-	db $10, $11, $12, $13
+	big_step_down
+	big_step_up
+	big_step_left
+	big_step_right
 .Ledge
-	db $30, $31, $32, $33
+	jump_step_down
+	jump_step_up
+	jump_step_left
+	jump_step_right
 .Ice
-	db $1c, $1d, $1e, $1f
+	fast_slide_step_down
+	fast_slide_step_up
+	fast_slide_step_left
+	fast_slide_step_right
 .BackwardsLedge
-	db $31, $30, $33, $32
+	jump_step_up
+	jump_step_down
+	jump_step_right
+	jump_step_left
 .Turn
-	db $04, $05, $06, $07
+	half_step_down
+	half_step_up
+	half_step_left
+	half_step_right
 .WalkInPlace
-	db $80, $81, $82, $83
+	db $80 + movement_turn_head_down
+	db $80 + movement_turn_head_up
+	db $80 + movement_turn_head_left
+	db $80 + movement_turn_head_right
 ; 802b3
 
 
@@ -34502,7 +21794,7 @@
 StandInPlace: ; 802b3
 	ld a, 0
 	ld [wd04e], a
-	ld a, $3e ; standing
+	ld a, movement_step_sleep_1
 	ld [MovementAnimation], a
 	xor a
 	ret
@@ -34512,7 +21804,7 @@
 WalkInPlace: ; 802bf
 	ld a, 0
 	ld [wd04e], a
-	ld a, $50 ; walking
+	ld a, movement_step_bump
 	ld [MovementAnimation], a
 	xor a
 	ret
@@ -34522,7 +21814,7 @@
 CheckForcedMovementInput: ; 802cb
 ; When sliding on ice, input is forced to remain in the same direction.
 
-	call Function80404
+	call CheckStandingOnIce
 	ret nc
 
 	ld a, [wd04e]
@@ -34535,7 +21827,7 @@
 	ld hl, .data_802e8
 	add hl, de
 	ld a, [CurInput]
-	and A_BUTTON | B_BUTTON | SELECT | START
+	and BUTTONS
 	or [hl]
 	ld [CurInput], a
 	ret
@@ -34592,7 +21884,7 @@
 ;	tile collision pointer
 .table1
 	db STANDING, FACE_CURRENT, 0, 0
-	dw PlayerStandingTile
+	dw PlayerNextTile
 .table2
 	db RIGHT, FACE_RIGHT,  1,  0
 	dw TileRight
@@ -34606,33 +21898,39 @@
 
 
 IsNPCInFront: ; 80341
-
+; Returns 0 if there is an NPC in front that you can't move
+; Returns 1 if there is no NPC in front
+; Returns 2 if there is a movable NPC in front
 	ld a, 0
 	ld [hMapObjectIndexBuffer], a
-	ld a, [PlayerMapX]
+; Load the next X coordinate into d
+	ld a, [PlayerNextMapX]
 	ld d, a
 	ld a, [WalkingX]
 	add d
 	ld d, a
-	ld a, [PlayerMapY]
+; Load the next Y coordinate into e
+	ld a, [PlayerNextMapY]
 	ld e, a
 	ld a, [WalkingY]
 	add e
 	ld e, a
+; Find an object struct with coordinates equal to d,e
 	ld bc, ObjectStructs ; redundant
-	callba Function7041
-	jr nc, .asm_80369
+	callba IsNPCAtCoord
+	jr nc, .nope
 	call Function8036f
-	jr c, .asm_8036c
+	jr c, .no_bump
 
+; .bump
 	xor a
 	ret
 
-.asm_80369
+.nope
 	ld a, 1
 	ret
 
-.asm_8036c
+.no_bump
 	ld a, 2
 	ret
 ; 8036f
@@ -34641,27 +21939,27 @@
 Function8036f: ; 8036f
 
 	ld hl, BikeFlags
-	bit 0, [hl]
-	jr z, .asm_8039c
+	bit 0, [hl] ; using strength
+	jr z, .nope
 
-	ld hl, $7
+	ld hl, OBJECT_DIRECTION_WALKING
 	add hl, bc
 	ld a, [hl]
-	cp $ff
-	jr nz, .asm_8039c
+	cp STANDING
+	jr nz, .nope
 
-	ld hl, $6
+	ld hl, OBJECT_PALETTE
 	add hl, bc
 	bit 6, [hl]
-	jr z, .asm_8039c
+	jr z, .nope
 
-	ld hl, $5
+	ld hl, OBJECT_FLAGS2
 	add hl, bc
 	set 2, [hl]
 
 	ld a, [WalkingDirection]
 	ld d, a
-	ld hl, $20
+	ld hl, OBJECT_RANGE
 	add hl, bc
 	ld a, [hl]
 	and $fc
@@ -34671,7 +21969,7 @@
 	scf
 	ret
 
-.asm_8039c
+.nope
 	xor a
 	ret
 ; 8039e
@@ -34792,24 +22090,24 @@
 ; 80404
 
 
-Function80404:: ; 80404
+CheckStandingOnIce:: ; 80404
 	ld a, [wd04e]
 	cp 0
-	jr z, .asm_80420
+	jr z, .nope
 	cp $f0
-	jr z, .asm_80420
-	ld a, [PlayerStandingTile]
+	jr z, .nope
+	ld a, [PlayerNextTile]
 	call CheckIceTile
-	jr nc, .asm_8041e
+	jr nc, .yep
 	ld a, [PlayerState]
 	cp PLAYER_SLIP
-	jr nz, .asm_80420
+	jr nz, .nope
 
-.asm_8041e
+.yep
 	scf
 	ret
 
-.asm_80420
+.nope
 	and a
 	ret
 ; 80422
@@ -34817,9 +22115,10 @@
 
 Function80422:: ; 80422
 	ld hl, wc2de
-	ld a, $3e ; standing
+	ld a, movement_step_sleep_1
 	cp [hl]
 	ret z
+
 	ld [hl], a
 	ld a, 0
 	ld [wd04e], a
@@ -34828,3902 +22127,24 @@
 
 
 
-EngineFlagAction:: ; 80430
-; Do action b on engine flag de
-;
-;   b = 0: reset flag
-;     = 1: set flag
-;     > 1: check flag, result in c
-;
-; Setting/resetting does not return a result.
-
-
-; 16-bit flag ids are considered invalid, but it's nice
-; to know that the infrastructure is there.
-
-	ld a, d
-	cp 0
-	jr z, .ceiling
-	jr c, .read ; cp 0 can't set carry!
-	jr .invalid
-
-; There are only $a2 engine flags, so
-; anything beyond that is invalid too.
-
-.ceiling
-	ld a, e
-	cp NUM_ENGINE_FLAGS
-	jr c, .read
-
-; Invalid flags are treated as flag 00.
-
-.invalid
-	xor a
-	ld e, a
-	ld d, a
-
-; Get this flag's location.
-
-.read
-	ld hl, EngineFlags
-; location
-rept 2
-	add hl, de
-endr
-; bit
-	add hl, de
-
-; location
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	inc hl
-; bit
-	ld c, [hl]
-
-; What are we doing with this flag?
-
-	ld a, b
-	cp 1
-	jr c, .reset ; b = 0
-	jr z, .set   ; b = 1
-
-; Return the given flag in c.
-.check
-	ld a, [de]
-	and c
-	ld c, a
-	ret
-
-; Set the given flag.
-.set
-	ld a, [de]
-	or c
-	ld [de], a
-	ret
-
-; Reset the given flag.
-.reset
-	ld a, c
-	cpl ; AND all bits except the one in question
-	ld c, a
-	ld a, [de]
-	and c
-	ld [de], a
-	ret
-; 80462
-
-
-EngineFlags: ; 80462
 INCLUDE "engine/engine_flags.asm"
 ; 80648
 
+INCLUDE "engine/variables.asm"
 
-
-_GetVarAction:: ; 80648 (20:4648)
-	ld a, c
-	cp NUM_VARS
-	jr c, .valid
-	xor a
-.valid
-	ld c, a
-	ld b, 0
-	ld hl, .VarActionTable
-rept 3
-	add hl, bc
-endr
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	inc hl
-	ld b, [hl]
-	ld a, b
-	and RETVAR_EXECUTE
-	jr nz, .call
-	ld a, b
-	and RETVAR_ADDR_DE
-	ret nz
-	ld a, [de]
-	jr .loadstringbuffer2
-
-.call
-	call _de_
-	ret
-
-.loadstringbuffer2: ; 8066c (20:466c)
-	ld de, StringBuffer2
-	ld [de], a
-	ret
-; 80671 (20:4671)
-
-.VarActionTable: ; 80671
-; $00: copy [de] to StringBuffer2
-; $40: return address in de
-; $80: call function
-	dwb StringBuffer2,         RETVAR_STRBUF2
-	dwb PartyCount,            RETVAR_STRBUF2
-	dwb .BattleResult,         RETVAR_EXECUTE
-	dwb BattleType,            RETVAR_ADDR_DE
-	dwb TimeOfDay,             RETVAR_STRBUF2
-	dwb .CountCaughtMons,      RETVAR_EXECUTE
-	dwb .CountSeenMons,        RETVAR_EXECUTE
-	dwb .CountBadges,          RETVAR_EXECUTE
-	dwb PlayerState,           RETVAR_ADDR_DE
-	dwb .PlayerFacing,         RETVAR_EXECUTE
-	dwb hHours,                RETVAR_STRBUF2
-	dwb .DayOfWeek,            RETVAR_EXECUTE
-	dwb MapGroup,              RETVAR_STRBUF2
-	dwb MapNumber,             RETVAR_STRBUF2
-	dwb .UnownCaught,          RETVAR_EXECUTE
-	dwb wPermission,           RETVAR_STRBUF2
-	dwb .BoxFreeSpace,         RETVAR_EXECUTE
-	dwb wBugContestMinsRemaining,                 RETVAR_STRBUF2
-	dwb XCoord,                RETVAR_STRBUF2
-	dwb YCoord,                RETVAR_STRBUF2
-	dwb wSpecialPhoneCallID,   RETVAR_STRBUF2
-	dwb wcf64,                 RETVAR_STRBUF2
-	dwb wKurtApricornQuantity, RETVAR_STRBUF2
-	dwb wCurrentCaller,        RETVAR_ADDR_DE
-	dwb wBlueCardBalance,      RETVAR_ADDR_DE
-	dwb wBuenasPassword,       RETVAR_ADDR_DE
-	dwb wdc58,                 RETVAR_STRBUF2
-	dwb NULL,                  RETVAR_STRBUF2
-; 806c5
-
-.CountCaughtMons: ; 806c5
-; Caught mons.
-	ld hl, PokedexCaught
-	ld b, EndPokedexCaught - PokedexCaught
-	call CountSetBits
-	ld a, [wd265]
-	jp .loadstringbuffer2
-; 806d3
-
-.CountSeenMons: ; 806d3
-; Seen mons.
-	ld hl, PokedexSeen
-	ld b, EndPokedexSeen - PokedexSeen
-	call CountSetBits
-	ld a, [wd265]
-	jp .loadstringbuffer2
-; 806e1
-
-.CountBadges: ; 806e1
-; Number of owned badges.
-	ld hl, Badges
-	ld b, 2
-	call CountSetBits
-	ld a, [wd265]
-	jp .loadstringbuffer2
-; 806ef
-
-.PlayerFacing: ; 806ef
-; The direction the player is facing.
-	ld a, [PlayerDirection]
-	and $c
-	rrca
-	rrca
-	jp .loadstringbuffer2
-; 806f9
-
-.DayOfWeek: ; 806f9
-; The day of the week.
-	call GetWeekday
-	jp .loadstringbuffer2
-; 806ff
-
-.UnownCaught: ; 806ff
-; Number of unique Unown caught.
-	call .count
-	ld a, b
-	jp .loadstringbuffer2
-
-.count
-	ld hl, UnownDex
-	ld b, 0
-.loop
-	ld a, [hli]
-	and a
-	ret z
-	inc b
-	ld a, b
-	cp 26
-	jr c, .loop
-	ret
-; 80715
-
-.BoxFreeSpace: ; 80715
-; Remaining slots in the current box.
-	ld a, BANK(sBoxCount)
-	call GetSRAMBank
-	ld hl, sBoxCount
-	ld a, MONS_PER_BOX
-	sub [hl]
-	ld b, a
-	call CloseSRAM
-	ld a, b
-	jp .loadstringbuffer2
-; 80728
-
-.BattleResult: ; 80728
-	ld a, [wBattleResult]
-	and $3f
-	jp .loadstringbuffer2
-; 80730
-
-
 BattleText::
 INCLUDE "text/battle.asm"
 
+INCLUDE "engine/debug.asm"
 
-ColorTest: ; 818ac
-; A debug menu to test monster and trainer palettes at runtime.
-
-	ld a, [hCGB]
-	and a
-	jr nz, .asm_818b5
-	ld a, [hSGB]
-	and a
-	ret z
-
-.asm_818b5
-	ld a, [hInMenu]
-	push af
-	ld a, $1
-	ld [hInMenu], a
-	call DisableLCD
-	call Function81948
-	call Function8197c
-	call Function819a7
-	call Function818f4
-	call EnableLCD
-	ld de, MUSIC_NONE
-	call PlayMusic
-	xor a
-	ld [wJumptableIndex], a
-	ld [wcf66], a
-	ld [wd003], a
-.asm_818de
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .asm_818f0
-	call Function81a74
-	call Function81f5e
-	call DelayFrame
-	jr .asm_818de
-
-.asm_818f0
-	pop af
-	ld [hInMenu], a
-	ret
-; 818f4
-
-Function818f4: ; 818f4
-	ld a, [wd002]
-	and a
-	jr nz, Function81911
-	ld hl, PokemonPalettes
-
-Function818fd: ; 818fd
-	ld de, OverworldMap
-	ld c, NUM_POKEMON + 1
-.asm_81902
-	push bc
-	push hl
-	call Function81928
-	pop hl
-	ld bc, 8
-	add hl, bc
-	pop bc
-	dec c
-	jr nz, .asm_81902
-	ret
-
-Function81911: ; 81911
-	ld hl, TrainerPalettes
-	ld de, OverworldMap
-	ld c, NUM_TRAINER_CLASSES
-.asm_81919
-	push bc
-	push hl
-	call Function81928
-	pop hl
-	ld bc, 4
-	add hl, bc
-	pop bc
-	dec c
-	jr nz, .asm_81919
-	ret
-; 81928
-
-Function81928: ; 81928
-	ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes)
-	call GetFarByte
-	ld [de], a
-	inc de
-	inc hl
-	ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes)
-	call GetFarByte
-	ld [de], a
-	inc de
-	inc hl
-	ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes)
-	call GetFarByte
-	ld [de], a
-	inc de
-	inc hl
-	ld a, BANK(PokemonPalettes) ; BANK(TrainerPalettes)
-	call GetFarByte
-	ld [de], a
-	inc de
-	ret
-; 81948
-
-Function81948: ; 81948
-	ld a, $1
-	ld [rVBK], a
-	ld hl, VTiles0
-	ld bc, sScratch - VTiles0
-	xor a
-	call ByteFill
-	ld a, $0
-	ld [rVBK], a
-	ld hl, VTiles0
-	ld bc, sScratch - VTiles0
-	xor a
-	call ByteFill
-	hlcoord 0, 0, AttrMap
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	xor a
-	call ByteFill
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	xor a
-	call ByteFill
-	call ClearSprites
-	ret
-; 8197c
-
-Function8197c: ; 8197c
-	ld hl, DebugColorTestGFX + $10
-	ld de, VTiles2 tile $6a
-	ld bc, $160
-	call CopyBytes
-	ld hl, DebugColorTestGFX
-	ld de, VTiles0
-	ld bc, $10
-	call CopyBytes
-	call LoadStandardFont
-	ld hl, VTiles1
-	lb bc, 8, 0
-.asm_8199d
-	ld a, [hl]
-	xor $ff
-	ld [hli], a
-	dec bc
-	ld a, c
-	or b
-	jr nz, .asm_8199d
-	ret
-; 819a7
-
-Function819a7: ; 819a7
-	ld a, [hCGB]
-	and a
-	ret z
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, Palette_819f4
-	ld de, BGPals
-	ld bc, $80
-	call CopyBytes
-	ld a, $80
-	ld [rBGPI], a
-	ld hl, Palette_819f4
-	ld c, $40
-	xor a
-.asm_819c8
-	ld [rBGPD], a
-	dec c
-	jr nz, .asm_819c8
-	ld a, $80
-	ld [rOBPI], a
-	ld hl, Palette_81a34
-	ld c, $40
-.asm_819d6
-	ld a, [hli]
-	ld [rOBPD], a
-	dec c
-	jr nz, .asm_819d6
-	ld a, $94
-	ld [wc608], a
-	ld a, $52
-	ld [wc608 + 1], a
-	ld a, $4a
-	ld [wc608 + 2], a
-	ld a, $29
-	ld [wc608 + 3], a
-	pop af
-	ld [rSVBK], a
-	ret
-; 819f4
-
-Palette_819f4: ; 819f4
-	; white
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-
-	; red
-	RGB 31, 00, 00
-	RGB 31, 00, 00
-	RGB 31, 00, 00
-	RGB 00, 00, 00
-
-	; green
-	RGB 00, 31, 00
-	RGB 00, 31, 00
-	RGB 00, 31, 00
-	RGB 00, 00, 00
-
-	; blue
-	RGB 00, 00, 31
-	RGB 00, 00, 31
-	RGB 00, 00, 31
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-
-Palette_81a34: ; 81a34
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-
-	; red
-	RGB 31, 31, 31
-	RGB 31, 00, 00
-	RGB 31, 00, 00
-	RGB 00, 00, 00
-
-	; green
-	RGB 31, 31, 31
-	RGB 00, 31, 00
-	RGB 00, 31, 00
-	RGB 00, 00, 00
-
-	; blue
-	RGB 31, 31, 31
-	RGB 00, 00, 31
-	RGB 00, 00, 31
-	RGB 00, 00, 00
-; 81a74
-
-Function81a74: ; 81a74
-	call JoyTextDelay
-	ld a, [wJumptableIndex]
-	cp $4
-	jr nc, .asm_81a8b
-	ld hl, hJoyLast
-	ld a, [hl]
-	and SELECT
-	jr nz, .asm_81a9a
-	ld a, [hl]
-	and START
-	jr nz, .asm_81aab
-
-.asm_81a8b
-	ld a, [wJumptableIndex]
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_81acf
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-
-.asm_81a9a
-	call Function81eca
-	call Function81ac3
-	ld e, a
-	ld a, [wcf66]
-	inc a
-	cp e
-	jr c, .asm_81aba
-	xor a
-	jr .asm_81aba
-
-.asm_81aab
-	call Function81eca
-	ld a, [wcf66]
-	dec a
-	cp $ff
-	jr nz, .asm_81aba
-	call Function81ac3
-	dec a
-
-.asm_81aba
-	ld [wcf66], a
-	ld a, $0
-	ld [wJumptableIndex], a
-	ret
-; 81ac3
-
-Function81ac3: ; 81ac3
-; Looping back around the pic set.
-	ld a, [wd002]
-	and a
-	jr nz, .asm_81acc
-	ld a, NUM_POKEMON ; CELEBI
-	ret
-
-.asm_81acc
-	ld a, NUM_TRAINER_CLASSES - 1 ; MYSTICALMAN
-	ret
-; 81acf
-
-Jumptable_81acf: ; 81acf
-	dw Function81adb
-	dw Function81c18
-	dw Function81c33
-	dw Function81cc2
-	dw Function81d8e
-	dw Function81daf
-; 81adb
-
-Function81adb: ; 81adb
-	xor a
-	ld [hBGMapMode], a
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	ld a, $6f
-	call ByteFill
-	hlcoord 1, 3
-	lb bc, 7, 18
-	ld a, $6c
-	call Bank20_FillBoxWithByte
-	hlcoord 11, 0
-	lb bc, 2, 3
-	ld a, $6d
-	call Bank20_FillBoxWithByte
-	hlcoord 16, 0
-	lb bc, 2, 3
-	ld a, $6e
-	call Bank20_FillBoxWithByte
-	call Function81bc0
-	call Function81bf4
-	ld a, [wcf66]
-	inc a
-	ld [CurPartySpecies], a
-	ld [wd265], a
-	hlcoord 0, 1
-	ld de, wd265
-	lb bc, PRINTNUM_LEADINGZEROS | 1, 3
-	call PrintNum
-	ld a, [wd002]
-	and a
-	jr nz, .asm_81b7a
-	ld a, $1
-	ld [UnownLetter], a
-	call GetPokemonName
-	hlcoord 4, 1
-	call PlaceString
-	xor a
-	ld [wc2c6], a
-	hlcoord 12, 3
-	call _PrepMonFrontpic
-	ld de, VTiles2 tile $31
-	predef GetBackpic
-	ld a, $31
-	ld [hFillBox], a
-	hlcoord 2, 4
-	lb bc, 6, 6
-	predef FillBox
-	ld a, [wd003]
-	and a
-	jr z, .asm_81b66
-	ld de, String_81baf
-	jr .asm_81b69
-
-.asm_81b66
-	ld de, String_81bb4
-
-.asm_81b69
-	hlcoord 7, 17
-	call PlaceString
-	hlcoord 0, 17
-	ld de, String_81bb9
-	call PlaceString
-	jr .asm_81ba9
-
-.asm_81b7a
-	ld a, [wd265]
-	ld [TrainerClass], a
-	callab Function3957b
-	ld de, StringBuffer1
-	hlcoord 4, 1
-	call PlaceString
-	ld de, VTiles2
-	callab GetTrainerPic
-	xor a
-	ld [TempEnemyMonSpecies], a
-	ld [hFillBox], a
-	hlcoord 2, 3
-	lb bc, 7, 7
-	predef FillBox
-
-.asm_81ba9
-	ld a, $1
-	ld [wJumptableIndex], a
-	ret
-; 81baf
-
-String_81baf: db "レア", $6f, $6f, "@" ; rare (shiny)
-String_81bb4: db "ノーマル@" ; normal
-String_81bb9: db $7a, "きりかえ▶@" ; (A) switches
-; 81bc0
-
-Function81bc0: ; 81bc0
-	decoord 0, 11, AttrMap
-	hlcoord 2, 11
-	ld a, $1
-	call Function81bde
-	decoord 0, 13, AttrMap
-	hlcoord 2, 13
-	ld a, $2
-	call Function81bde
-	decoord 0, 15, AttrMap
-	hlcoord 2, 15
-	ld a, $3
-
-Function81bde: ; 81bde
-	push af
-	ld a, $6a
-	ld [hli], a
-	ld bc, $f
-	ld a, $6b
-	call ByteFill
-	ld l, e
-	ld h, d
-	pop af
-	ld bc, $28
-	call ByteFill
-	ret
-; 81bf4
-
-Function81bf4: ; 81bf4
-	ld a, [wcf66]
-	inc a
-	ld l, a
-	ld h, $0
-rept 2
-	add hl, hl
-endr
-	ld de, OverworldMap
-	add hl, de
-	ld de, wc608
-	ld bc, 4
-	call CopyBytes
-	xor a
-	ld [wcf64], a
-	ld [wcf65], a
-	ld de, wc608
-	call Function81ea5
-	ret
-; 81c18
-
-Function81c18: ; 81c18
-	ld a, [hCGB]
-	and a
-	jr z, .asm_81c2a
-	ld a, $2
-	ld [hBGMapMode], a
-	call DelayFrame
-	call DelayFrame
-	call DelayFrame
-
-.asm_81c2a
-	call WaitBGMap
-	ld a, $2
-	ld [wJumptableIndex], a
-	ret
-; 81c33
-
-Function81c33: ; 81c33
-	ld a, [hCGB]
-	and a
-	jr z, .asm_81c69
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, BGPals
-	ld de, wc608
-	ld c, $1
-	call Function81ee3
-	hlcoord 10, 2
-	ld de, wc608
-	call Function81ca7
-	hlcoord 15, 2
-	ld de, wc608 + 2
-	call Function81ca7
-	ld a, $1
-	ld [hCGBPalUpdate], a
-	ld a, $3
-	ld [wJumptableIndex], a
-	pop af
-	ld [rSVBK], a
-	ret
-
-.asm_81c69
-	ld hl, wcda9
-	ld a, $1
-	ld [hli], a
-	ld a, $ff
-	ld [hli], a
-	ld a, $7f
-	ld [hli], a
-	ld a, [wc608]
-	ld [hli], a
-	ld a, [wc608 + 1]
-	ld [hli], a
-	ld a, [wc608 + 2]
-	ld [hli], a
-	ld a, [wc608 + 3]
-	ld [hli], a
-	xor a
-rept 2
-	ld [hli], a
-endr
-	ld [hl], a
-	ld hl, wcda9
-	call Function81f0c
-	hlcoord 10, 2
-	ld de, wc608
-	call Function81ca7
-	hlcoord 15, 2
-	ld de, wc608 + 2
-	call Function81ca7
-	ld a, $3
-	ld [wJumptableIndex], a
-	ret
-; 81ca7
-
-Function81ca7: ; 81ca7
-rept 3
-	inc hl
-endr
-	ld a, [de]
-	call Function81cbc
-	ld a, [de]
-	swap a
-	call Function81cbc
-	inc de
-	ld a, [de]
-	call Function81cbc
-	ld a, [de]
-	swap a
-
-Function81cbc: ; 81cbc
-	and $f
-	add $70
-	ld [hld], a
-	ret
-; 81cc2
-
-Function81cc2: ; 81cc2
-	ld a, [hJoyLast]
-	and B_BUTTON
-	jr nz, .asm_81cdf
-	ld a, [hJoyLast]
-	and A_BUTTON
-	jr nz, .asm_81ce5
-	ld a, [wcf64]
-	and $3
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_81d02
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-
-.asm_81cdf
-	ld a, $4
-	ld [wJumptableIndex], a
-	ret
-
-.asm_81ce5
-	ld a, [wd002]
-	and a
-	ret nz
-	ld a, [wd003]
-	xor $4
-	ld [wd003], a
-	ld c, a
-	ld b, 0
-	ld hl, PokemonPalettes
-	add hl, bc
-	call Function818fd
-	ld a, $0
-	ld [wJumptableIndex], a
-	ret
-; 81d02
-
-Jumptable_81d02: ; 81d02
-	dw Function81d0a
-	dw Function81d34
-	dw Function81d46
-	dw Function81d58
-; 81d0a
-
-Function81d0a: ; 81d0a
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_DOWN
-	jr nz, Function81d89
-	ld a, [hl]
-	and D_LEFT
-	jr nz, .asm_81d1d
-	ld a, [hl]
-	and D_RIGHT
-	jr nz, .asm_81d28
-	ret
-
-.asm_81d1d
-	xor a
-	ld [wcf65], a
-	ld de, wc608
-	call Function81ea5
-	ret
-
-.asm_81d28
-	ld a, $1
-	ld [wcf65], a
-	ld de, wc608 + 2
-	call Function81ea5
-	ret
-
-Function81d34: ; 81d34
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_DOWN
-	jr nz, Function81d89
-	ld a, [hl]
-	and D_UP
-	jr nz, Function81d84
-	ld hl, wc608 + 10
-	jr Function81d63
-
-Function81d46: ; 81d46
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_DOWN
-	jr nz, Function81d89
-	ld a, [hl]
-	and D_UP
-	jr nz, Function81d84
-	ld hl, wc608 + 11
-	jr Function81d63
-
-Function81d58: ; 81d58
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, Function81d84
-	ld hl, wc608 + 12
-
-Function81d63: ; 81d63
-	ld a, [hJoyLast]
-	and D_RIGHT
-	jr nz, Function81d70
-	ld a, [hJoyLast]
-	and D_LEFT
-	jr nz, Function81d77
-	ret
-
-Function81d70: ; 81d70
-	ld a, [hl]
-	cp $1f
-	ret nc
-	inc [hl]
-	jr Function81d7b
-
-Function81d77: ; 81d77
-	ld a, [hl]
-	and a
-	ret z
-	dec [hl]
-
-Function81d7b: ; 81d7b
-	call Function81e67
-	ld a, $2
-	ld [wJumptableIndex], a
-	ret
-
-Function81d84: ; 81d84
-	ld hl, wcf64
-	dec [hl]
-	ret
-
-Function81d89: ; 81d89
-	ld hl, wcf64
-	inc [hl]
-	ret
-; 81d8e
-
-Function81d8e: ; 81d8e
-	hlcoord 0, 10
-	ld bc, $a0
-	ld a, $6f
-	call ByteFill
-	hlcoord 2, 12
-	ld de, String_81fcd
-	call PlaceString
-	xor a
-	ld [wd004], a
-	call Function81df4
-	ld a, $5
-	ld [wJumptableIndex], a
-	ret
-; 81daf
-
-Function81daf: ; 81daf
-	ld hl, hJoyPressed
-	ld a, [hl]
-	and B_BUTTON
-	jr nz, .asm_81dbb
-	call Function81dc7
-	ret
-
-.asm_81dbb
-	ld a, $0
-	ld [wJumptableIndex], a
-	ret
-; 81dc1
-
-Function81dc1: ; 81dc1
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-; 81dc7
-
-Function81dc7: ; 81dc7
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, .asm_81dd5
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .asm_81de2
-	ret
-
-.asm_81dd5
-	ld a, [wd004]
-	cp $3b
-	jr z, .asm_81ddf
-	inc a
-	jr .asm_81ded
-
-.asm_81ddf
-	xor a
-	jr .asm_81ded
-
-.asm_81de2
-	ld a, [wd004]
-	and a
-	jr z, .asm_81deb
-	dec a
-	jr .asm_81ded
-
-.asm_81deb
-	ld a, $3b
-
-.asm_81ded
-	ld [wd004], a
-	call Function81df4
-	ret
-; 81df4
-
-Function81df4: ; 81df4
-	hlcoord 10, 11
-	call Function81e5e
-	hlcoord 10, 12
-	call Function81e5e
-	hlcoord 10, 13
-	call Function81e5e
-	hlcoord 10, 14
-	call Function81e5e
-	ld a, [wd004]
-	inc a
-	ld [wd265], a
-	predef GetTMHMMove
-	ld a, [wd265]
-	ld [wd262], a
-	call GetMoveName
-	hlcoord 10, 12
-	call PlaceString
-	ld a, [wd004]
-	call Function81e55
-	ld [CurItem], a
-	predef CanLearnTMHMMove
-	ld a, c
-	and a
-	ld de, String_81e46
-	jr nz, .asm_81e3f
-	ld de, String_81e4d
-
-.asm_81e3f
-	hlcoord 10, 14
-	call PlaceString
-	ret
-; 81e46
-
-String_81e46: db "おぼえられる@" ; can be taught
-String_81e4d: db "おぼえられない@" ; cannot be taught
-; 81e55
-
-Function81e55: ; 81e55
-	cp $32
-	jr c, .asm_81e5b
-rept 2
-	inc a
-endr
-
-.asm_81e5b
-	add $bf
-	ret
-; 81e5e
-
-Function81e5e: ; 81e5e
-	ld bc, $a
-	ld a, $6f
-	call ByteFill
-	ret
-; 81e67
-
-Function81e67: ; 81e67
-	ld a, [wc608 + 10]
-	and $1f
-	ld e, a
-	ld a, [wc608 + 11]
-	and $7
-	sla a
-	swap a
-	or e
-	ld e, a
-	ld a, [wc608 + 11]
-	and $18
-	sla a
-	swap a
-	ld d, a
-	ld a, [wc608 + 12]
-	and $1f
-	sla a
-	sla a
-	or d
-	ld d, a
-	ld a, [wcf65]
-	and a
-	jr z, .asm_81e9c
-	ld a, e
-	ld [wc608 + 2], a
-	ld a, d
-	ld [wc608 + 3], a
-	ret
-
-.asm_81e9c
-	ld a, e
-	ld [wc608], a
-	ld a, d
-	ld [wc608 + 1], a
-	ret
-; 81ea5
-
-Function81ea5: ; 81ea5
-	ld a, [de]
-	and $1f
-	ld [wc608 + 10], a
-	ld a, [de]
-	and $e0
-	swap a
-	srl a
-	ld b, a
-	inc de
-	ld a, [de]
-	and $3
-	swap a
-	srl a
-	or b
-	ld [wc608 + 11], a
-	ld a, [de]
-	and $7c
-	srl a
-	srl a
-	ld [wc608 + 12], a
-	ret
-; 81eca
-
-Function81eca: ; 81eca
-	ld a, [wcf66]
-	inc a
-	ld l, a
-	ld h, $0
-rept 2
-	add hl, hl
-endr
-	ld de, OverworldMap
-	add hl, de
-	ld e, l
-	ld d, h
-	ld hl, wc608
-	ld bc, 4
-	call CopyBytes
-	ret
-; 81ee3
-
-Function81ee3: ; 81ee3
-.asm_81ee3
-	ld a, $ff
-	ld [hli], a
-	ld a, $7f
-	ld [hli], a
-	ld a, [de]
-	inc de
-	ld [hli], a
-	ld a, [de]
-	inc de
-	ld [hli], a
-	ld a, [de]
-	inc de
-	ld [hli], a
-	ld a, [de]
-	inc de
-	ld [hli], a
-	xor a
-rept 2
-	ld [hli], a
-endr
-	dec c
-	jr nz, .asm_81ee3
-	ret
-; 81efc
-
-Bank20_FillBoxWithByte: ; 81efc
-; For some reason, we have another copy of FillBoxWithByte here
-.row
-	push bc
-	push hl
-.col
-	ld [hli], a
-	dec c
-	jr nz, .col
-	pop hl
-	ld bc, SCREEN_WIDTH
-	add hl, bc
-	pop bc
-	dec b
-	jr nz, .row
-	ret
-; 81f0c
-
-Function81f0c: ; 81f0c
-	ld a, [wcfbe]
-	push af
-	set 7, a
-	ld [wcfbe], a
-	call Function81f1d
-	pop af
-	ld [wcfbe], a
-	ret
-; 81f1d
-
-Function81f1d: ; 81f1d
-	ld a, [hl]
-	and $7
-	ret z
-	ld b, a
-.asm_81f22
-	push bc
-	xor a
-	ld [rJOYP], a
-	ld a, $30
-	ld [rJOYP], a
-	ld b, $10
-.asm_81f2c
-	ld e, $8
-	ld a, [hli]
-	ld d, a
-.asm_81f30
-	bit 0, d
-	ld a, $10
-	jr nz, .asm_81f38
-	ld a, $20
-
-.asm_81f38
-	ld [rJOYP], a
-	ld a, $30
-	ld [rJOYP], a
-	rr d
-	dec e
-	jr nz, .asm_81f30
-	dec b
-	jr nz, .asm_81f2c
-	ld a, $20
-	ld [rJOYP], a
-	ld a, $30
-	ld [rJOYP], a
-	ld de, 7000
-.asm_81f51
-	nop
-	nop
-	nop
-	dec de
-	ld a, d
-	or e
-	jr nz, .asm_81f51
-	pop bc
-	dec b
-	jr nz, .asm_81f22
-	ret
-; 81f5e
-
-Function81f5e: ; 81f5e
-	ld a, $6f
-	hlcoord 10, 0
-	ld [hl], a
-	hlcoord 15, 0
-	ld [hl], a
-	hlcoord 1, 11
-	ld [hl], a
-	hlcoord 1, 13
-	ld [hl], a
-	hlcoord 1, 15
-	ld [hl], a
-	ld a, [wJumptableIndex]
-	cp $3
-	jr nz, .asm_81fc9
-	ld a, [wcf64]
-	and a
-	jr z, .asm_81f8d
-	dec a
-	hlcoord 1, 11
-	ld bc, 2 * SCREEN_WIDTH
-	call AddNTimes
-	ld [hl], $ed
-
-.asm_81f8d
-	ld a, [wcf65]
-	and a
-	jr z, .asm_81f98
-	hlcoord 15, 0
-	jr .asm_81f9b
-
-.asm_81f98
-	hlcoord 10, 0
-
-.asm_81f9b
-	ld [hl], $ed
-	ld b, $70
-	ld c, $5
-	ld hl, Sprites
-	ld de, wc608 + 10
-	call .asm_81fb7
-	ld de, wc608 + 11
-	call .asm_81fb7
-	ld de, wc608 + 12
-	call .asm_81fb7
-	ret
-
-.asm_81fb7
-	ld a, b
-	ld [hli], a
-	ld a, [de]
-rept 2
-	add a
-endr
-	add $18
-	ld [hli], a
-	xor a
-	ld [hli], a
-	ld a, c
-	ld [hli], a
-	ld a, $10
-	add b
-	ld b, a
-	inc c
-	ret
-
-.asm_81fc9
-	call ClearSprites
-	ret
-; 81fcd
-
-String_81fcd: ; 81fcd
-	db   "おわりますか?" ; Are you finished?
-	next "はい", $f2, $f2, $f2, $7a ; YES (A)
-	next "いいえ",    $f2, $f2, $7b ; NO  (B)
-	db   "@"
-; 81fe3
-
-DebugColorTestGFX:
-INCBIN "gfx/debug/color_test.2bpp"
-
-
-TilesetColorTest:
-	ret
-	xor a
-	ld [wJumptableIndex], a
-	ld [wcf64], a
-	ld [wcf65], a
-	ld [wcf66], a
-	ld [hMapAnims], a
-	call ClearSprites
-	call OverworldTextModeSwitch
-	call Function3200
-	xor a
-	ld [hBGMapMode], a
-	ld de, DebugColorTestGFX + $10
-	ld hl, VTiles2 tile $6a
-	lb bc, BANK(DebugColorTestGFX), $16
-	call Request2bpp
-	ld de, DebugColorTestGFX
-	ld hl, VTiles1
-	lb bc, BANK(DebugColorTestGFX), 1
-	call Request2bpp
-	ld a, VBGMap1 / $100
-	ld [hBGMapAddress + 1], a
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	ld a, $6f
-	call ByteFill
-	hlcoord 0, 0, AttrMap
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	ld a, $7
-	call ByteFill
-	ld de, $15
-	ld a, $6c
-	call Function821d2
-	ld de, $1a
-	ld a, $6d
-	call Function821d2
-	ld de, $1f
-	ld a, $6e
-	call Function821d2
-	ld de, $24
-	ld a, $6f
-	call Function821d2
-	call Function821f4
-	call Function8220f
-	call Function3200
-	ld [wJumptableIndex], a
-	ld a, $40
-	ld [hWY], a
-	ret
-; 821d2
-
-Function821d2: ; 821d2
-	hlcoord 0, 0
-	call Function821de
-
-Function821d8: ; 821d8
-	ld a, [wcf64]
-	hlcoord 0, 0, AttrMap
-
-Function821de: ; 821de
-	add hl, de
-rept 4
-	ld [hli], a
-endr
-	ld bc, $10
-	add hl, bc
-rept 4
-	ld [hli], a
-endr
-	ld bc, $10
-	add hl, bc
-rept 4
-	ld [hli], a
-endr
-	ret
-; 821f4
-
-Function821f4: ; 821f4
-	hlcoord 2, 4
-	call Function82203
-	hlcoord 2, 6
-	call Function82203
-	hlcoord 2, 8
-
-Function82203: ; 82203
-	ld a, $6a
-	ld [hli], a
-	ld bc, $10 - 1
-	ld a, $6b
-	call ByteFill
-	ret
-; 8220f
-
-Function8220f: ; 8220f
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld a, [wcf64]
-	ld l, a
-	ld h, $0
-rept 3
-	add hl, hl
-endr
-	ld de, wMapPals
-	add hl, de
-	ld de, wc608
-	ld bc, 8
-	call CopyBytes
-	ld de, wc608
-	call Function81ea5
-	pop af
-	ld [rSVBK], a
-	ret
-; 82236
-
-
-Function82236: ; 82236
-	ld hl, hJoyLast
-	ld a, [hl]
-	and SELECT
-	jr nz, .loop7
-	ld a, [hl]
-	and B_BUTTON
-	jr nz, .asm_82299
-	call Function822f0
-	ret
-
-.loop7
-	ld hl, wcf64
-	ld a, [hl]
-	inc a
-	and $7
-	cp $7
-	jr nz, .asm_82253
-	xor a
-
-.asm_82253
-	ld [hl], a
-	ld de, $15
-	call Function821d8
-	ld de, $1a
-	call Function821d8
-	ld de, $1f
-	call Function821d8
-	ld de, $24
-	call Function821d8
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, BGPals
-	ld a, [wcf64]
-	ld bc, 8
-	call AddNTimes
-	ld de, wc608
-	ld bc, 8
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	ld a, $2
-	ld [hBGMapMode], a
-	ld c, 3
-	call DelayFrames
-	ld a, $1
-	ld [hBGMapMode], a
-	ret
-
-.asm_82299
-	call ClearSprites
-	ld a, [hWY]
-	xor $d0
-	ld [hWY], a
-	ret
-; 822a3
-
-Function822a3: ; 822a3
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, BGPals
-	ld a, [wcf64]
-	ld bc, 8
-	call AddNTimes
-	ld e, l
-	ld d, h
-	ld hl, wc608
-	ld bc, 8
-	call CopyBytes
-	hlcoord 1, 0
-	ld de, wc608
-	call Function81ca7
-	hlcoord 6, 0
-	ld de, wc608 + 2
-	call Function81ca7
-	hlcoord 11, 0
-	ld de, wc608 + 4
-	call Function81ca7
-	hlcoord 16, 0
-	ld de, wc608 + 6
-	call Function81ca7
-	pop af
-	ld [rSVBK], a
-	ld a, $1
-	ld [hCGBPalUpdate], a
-	call DelayFrame
-	ret
-; 822f0
-
-Function822f0: ; 822f0
-	ld a, [wcf65]
-	and 3
-	ld e, a
-	ld d, 0
-	ld hl, .jumptable
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 82301
-
-.jumptable: ; 82301
-	dw Function82309
-	dw Function82339
-	dw Function8234b
-	dw Function8235d
-; 82309
-
-Function82309: ; 82309
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_DOWN
-	jr nz, Function8238c
-	ld a, [hl]
-	and D_LEFT
-	jr nz, .asm_8231c
-	ld a, [hl]
-	and D_RIGHT
-	jr nz, .asm_82322
-	ret
-
-.asm_8231c
-	ld a, [wcf66]
-	dec a
-	jr .asm_82326
-
-.asm_82322
-	ld a, [wcf66]
-	inc a
-
-.asm_82326
-	and $3
-	ld [wcf66], a
-	ld e, a
-	ld d, $0
-	ld hl, wc608
-rept 2
-	add hl, de
-endr
-	ld e, l
-	ld d, h
-	call Function81ea5
-	ret
-
-Function82339: ; 82338
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_DOWN
-	jr nz, Function8238c
-	ld a, [hl]
-	and D_UP
-	jr nz, Function82387
-	ld hl, wc608 + 10
-	jr Function82368
-
-Function8234b: ; 8234b
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_DOWN
-	jr nz, Function8238c
-	ld a, [hl]
-	and D_UP
-	jr nz, Function82387
-	ld hl, wc608 + 11
-	jr Function82368
-
-Function8235d: ; 8235d
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, Function82387
-	ld hl, wc608 + 12
-
-Function82368: ; 82368
-	ld a, [hJoyLast]
-	and D_RIGHT
-	jr nz, .asm_82375
-	ld a, [hJoyLast]
-	and D_LEFT
-	jr nz, .asm_8237c
-	ret
-
-.asm_82375
-	ld a, [hl]
-	cp $1f
-	ret nc
-	inc [hl]
-	jr .asm_82380
-
-.asm_8237c
-	ld a, [hl]
-	and a
-	ret z
-	dec [hl]
-
-.asm_82380
-	call Function82391
-	call Function822a3
-	ret
-
-Function82387: ; 82387
-	ld hl, wcf65
-	dec [hl]
-	ret
-
-Function8238c: ; 8238c
-	ld hl, wcf65
-	inc [hl]
-	ret
-; 82391
-
-Function82391: ; 82391
-	ld a, [wc608 + 10]
-	and $1f
-	ld e, a
-	ld a, [wc608 + 11]
-	and $7
-	sla a
-	swap a
-	or e
-	ld e, a
-	ld a, [wc608 + 11]
-	and $18
-	sla a
-	swap a
-	ld d, a
-	ld a, [wc608 + 12]
-	and $1f
-	sla a
-	sla a
-	or d
-	ld d, a
-	ld a, [wcf66]
-	ld c, a
-	ld b, $0
-	ld hl, wc608
-rept 2
-	add hl, bc
-endr
-	ld a, e
-	ld [hli], a
-	ld [hl], d
-	ret
-; 823c6
-
-Function823c6: ; 823c6
-	ret
-
-Function823c7: ; 823c7
-	ret
-; 823c8
-
-
 SECTION "bank21", ROMX, BANK[$21]
 
-Function84000: ; 84000
-	ld hl, OverworldMap
-	lb bc, 4, 12
-	xor a
-	call Function842ab
-	xor a
-	ld [rSB], a
-	ld [rSC], a
-	ld [wc2d5], a
-	ld hl, wc2d4
-	set 0, [hl]
-	ld a, [GBPrinter]
-	ld [wcbfb], a
-	xor a
-	ld [wJumptableIndex], a
-	ret
-; 84022
+INCLUDE "engine/printer.asm"
 
-Function84022: ; 84022
-	ld a, [wJumptableIndex]
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_84031
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 84031
-
-
-Jumptable_84031: ; 84031 (21:4031)
-	dw Function84077
-	dw Function84143
-	dw Function84120
-	dw Function84099
-	dw Function84180
-	dw Function8412e
-	dw Function840c5
-	dw Function84180
-	dw Function84120
-	dw Function840de
-	dw Function84180
-	dw Function84120
-	dw Function841a1
-	dw Function84063
-	dw Function8406d
-	dw Function84120
-	dw Function84103
-	dw Function84071
-	dw Function841b0
-	dw Function841b3
-
-
-Function84059: ; 84059 (21:4059)
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-
-Function8405e: ; 8405e (21:405e)
-	ld hl, wJumptableIndex
-	dec [hl]
-	ret
-
-Function84063: ; 84063 (21:4063)
-	xor a
-	ld [wca89], a
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-Function8406d: ; 8406d (21:406d)
-	call Function84059
-	ret
-
-Function84071: ; 84071 (21:4071)
-	ld a, $1
-	ld [wJumptableIndex], a
-	ret
-
-Function84077: ; 84077 (21:4077)
-	call Function841fb
-	ld hl, Unknown_842b7
-	call Function841e2
-	xor a
-	ld [wca8e], a
-	ld [wca8f], a
-	ld a, [wcf65]
-	ld [wca81], a
-	call Function84059
-	call Function841c3
-	ld a, $1
-	ld [wcbf8], a
-	ret
-
-Function84099: ; 84099 (21:4099)
-	call Function841fb
-	ld hl, wca81
-	ld a, [hl]
-	and a
-	jr z, Function840c5
-	ld hl, Unknown_842c3
-	call Function841e2
-	call Function84260
-	ld a, $80
-	ld [wca8e], a
-	ld a, $2
-	ld [wca8f], a
-	call Function84219
-	call Function84059
-	call Function841c3
-	ld a, $2
-	ld [wcbf8], a
-	ret
-
-Function840c5: ; 840c5 (21:40c5)
-	ld a, $6
-	ld [wJumptableIndex], a
-	ld hl, Unknown_842c9
-	call Function841e2
-	xor a
-	ld [wca8e], a
-	ld [wca8f], a
-	call Function84059
-	call Function841c3
-	ret
-
-Function840de: ; 840de (21:40de)
-	call Function841fb
-	ld hl, Unknown_842bd
-	call Function841e2
-	call Function84249
-	ld a, $4
-	ld [wca8e], a
-	ld a, $0
-	ld [wca8f], a
-	call Function84219
-	call Function84059
-	call Function841c3
-	ld a, $3
-	ld [wcbf8], a
-	ret
-
-Function84103: ; 84103 (21:4103)
-	call Function841fb
-	ld hl, Unknown_842b7
-	call Function841e2
-	xor a
-	ld [wca8e], a
-	ld [wca8f], a
-	ld a, [wcf65]
-	ld [wca81], a
-	call Function84059
-	call Function841c3
-	ret
-
-Function84120: ; 84120 (21:4120)
-	ld hl, wca8b
-	inc [hl]
-	ld a, [hl]
-	cp $6
-	ret c
-	xor a
-	ld [hl], a
-	call Function84059
-	ret
-
-Function8412e: ; 8412e (21:412e)
-	ld hl, wca8b
-	inc [hl]
-	ld a, [hl]
-	cp $6
-	ret c
-	xor a
-	ld [hl], a
-	ld hl, wca81
-	dec [hl]
-	call Function8405e
-	call Function8405e
-	ret
-
-Function84143: ; 84143 (21:4143)
-	ld a, [wc2d5]
-	and a
-	ret nz
-	ld a, [wca88]
-	cp $ff
-	jr nz, .printer_connected
-	ld a, [wca89]
-	cp $ff
-	jr z, .printer_error
-
-.printer_connected
-	ld a, [wca88]
-	cp $81
-	jr nz, .printer_error
-	ld a, [wca89]
-	cp $0
-	jr nz, .printer_error
-	ld hl, wc2d4
-	set 1, [hl]
-	ld a, $5
-	ld [wca8a], a
-	call Function84059
-	ret
-
-.printer_error
-	ld a, $ff
-	ld [wca88], a
-	ld [wca89], a
-	ld a, $e
-	ld [wJumptableIndex], a
-	ret
-
-Function84180: ; 84180 (21:4180)
-	ld a, [wc2d5]
-	and a
-	ret nz
-	ld a, [wca89]
-	and $f0
-	jr nz, .asm_8419b
-	ld a, [wca89]
-	and $1
-	jr nz, .asm_84197
-	call Function84059
-	ret
-.asm_84197
-	call Function8405e
-	ret
-.asm_8419b
-	ld a, $12
-	ld [wJumptableIndex], a
-	ret
-
-Function841a1: ; 841a1 (21:41a1)
-	ld a, [wc2d5]
-	and a
-	ret nz
-	ld a, [wca89]
-	and $f3
-	ret nz
-	call Function84059
-	ret
-
-Function841b0: ; 841b0 (21:41b0)
-	call Function84059
-
-Function841b3: ; 841b3 (21:41b3)
-	ld a, [wc2d5]
-	and a
-	ret nz
-	ld a, [wca89]
-	and $f0
-	ret nz
-	xor a
-	ld [wJumptableIndex], a
-	ret
-
-Function841c3: ; 841c3 (21:41c3)
-	ld a, [wc2d5]
-	and a
-	jr nz, Function841c3
-	xor a
-	ld [wca8c], a
-	ld [wca8d], a
-	ld a, $1
-	ld [wc2d5], a
-	ld a, $88
-	ld [rSB], a
-	ld a, $1
-	ld [rSC], a
-	ld a, $81
-	ld [rSC], a
-	ret
-
-Function841e2: ; 841e2 (21:41e2)
-	ld a, [hli]
-	ld [wca82], a
-	ld a, [hli]
-	ld [wca83], a
-	ld a, [hli]
-	ld [wca84], a
-	ld a, [hli]
-	ld [wca85], a
-	ld a, [hli]
-	ld [wca86], a
-	ld a, [hl]
-	ld [wca87], a
-	ret
-
-Function841fb: ; 841fb (21:41fb)
-	xor a
-	ld hl, wca82
-rept 3
-	ld [hli], a
-endr
-	ld [hl], a
-	ld hl, wca86
-	ld [hli], a
-	ld [hl], a
-	xor a
-	ld [wca8e], a
-	ld [wca8f], a
-	ld hl, OverworldMap
-	ld bc, $280
-	call Function842ab
-	ret
-
-Function84219: ; 84219 (21:4219)
-	ld hl, 0
-	ld bc, $4
-	ld de, wca82
-	call Function8423c
-	ld a, [wca8e]
-	ld c, a
-	ld a, [wca8f]
-	ld b, a
-	ld de, OverworldMap
-	call Function8423c
-	ld a, l
-	ld [wca86], a
-	ld a, h
-	ld [wca87], a
-	ret
-
-Function8423c: ; 8423c (21:423c)
-	ld a, [de]
-	inc de
-	add l
-	jr nc, .asm_84242
-	inc h
-.asm_84242
-	ld l, a
-	dec bc
-	ld a, c
-	or b
-	jr nz, Function8423c
-	ret
-
-Function84249: ; 84249 (21:4249)
-	ld a, $1
-	ld [OverworldMap], a
-	ld a, [wcbfa]
-	ld [wc801], a
-	ld a, $e4
-	ld [wc802], a
-	ld a, [wcbfb]
-	ld [wc803], a
-	ret
-
-Function84260: ; 84260 (21:4260)
-	ld a, [wca81]
-	xor $ff
-	ld d, a
-	ld a, [wcf65]
-	inc a
-	add d
-	ld hl, wca90
-	ld de, $28
-.asm_84271
-	and a
-	jr z, .asm_84278
-	add hl, de
-	dec a
-	jr .asm_84271
-.asm_84278
-	ld e, l
-	ld d, h
-	ld hl, OverworldMap
-	ld c, $28
-.asm_8427f
-	ld a, [de]
-	inc de
-	push bc
-	push de
-	push hl
-	swap a
-	ld d, a
-	and $f0
-	ld e, a
-	ld a, d
-	and $f
-	ld d, a
-	and $8
-	ld a, d
-	jr nz, .asm_84297
-	or $90
-	jr .asm_84299
-.asm_84297
-	or $80
-.asm_84299
-	ld d, a
-	lb bc, $21, 1
-	call Request2bpp
-	pop hl
-	ld de, $10
-	add hl, de
-	pop de
-	pop bc
-	dec c
-	jr nz, .asm_8427f
-	ret
-
-Function842ab: ; 842ab
-	push de
-	ld e, a
-.asm_842ad
-	ld [hl], e
-	inc hl
-	dec bc
-	ld a, c
-	or b
-	jr nz, .asm_842ad
-	ld a, e
-	pop de
-	ret
-; 842b7
-
-Unknown_842b7: db  1, 0, $00, 0,  1, 0
-Unknown_842bd: db  2, 0, $04, 0,  0, 0
-Unknown_842c3: db  4, 0, $80, 2,  0, 0
-Unknown_842c9: db  4, 0, $00, 0,  4, 0
-Unknown_842cf: db  8, 0, $00, 0,  8, 0 ; unused
-Unknown_842d5: db 15, 0, $00, 0, 15, 0 ; unused
-; 842db
-
-
-Function842db:: ; 842db
-	ld a, [wc2d5]
-	add a
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_842ea
-	add hl, de
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 842ea
-
-
-Jumptable_842ea: ; 842ea (21:42ea)
-	dw Function8432f
-	dw Function84330
-	dw Function84339
-	dw Function84343
-	dw Function8434d
-	dw Function84357
-	dw Function84361
-	dw Function8438b
-	dw Function84395
-	dw Function8439f
-	dw Function843a8
-	dw Function843b6
-	dw Function84330
-	dw Function843c0
-	dw Function843c9
-	dw Function843c9
-	dw Function843c9
-	dw Function843c0
-	dw Function843c9
-	dw Function8439f
-	dw Function843a8
-	dw Function843e6
-	dw Function84330
-	dw Function843d2
-	dw Function843c9
-	dw Function843c9
-	dw Function843c9
-	dw Function843d2
-	dw Function843c9
-	dw Function8439f
-	dw Function843a8
-	dw Function843b6
-
-
-Function8432a: ; 8432a (21:432a)
-	ld hl, wc2d5
-	inc [hl]
-	ret
-
-Function8432f: ; 8432f (21:432f)
-	ret
-
-Function84330: ; 84330 (21:4330)
-	ld a, $33
-	call Function843db
-	call Function8432a
-	ret
-
-Function84339: ; 84339 (21:4339)
-	ld a, [wca82]
-	call Function843db
-	call Function8432a
-	ret
-
-Function84343: ; 84343 (21:4343)
-	ld a, [wca83]
-	call Function843db
-	call Function8432a
-	ret
-
-Function8434d: ; 8434d (21:434d)
-	ld a, [wca84]
-	call Function843db
-	call Function8432a
-	ret
-
-Function84357: ; 84357 (21:4357)
-	ld a, [wca85]
-	call Function843db
-	call Function8432a
-	ret
-
-Function84361: ; 84361 (21:4361)
-	ld hl, wca8e
-	ld a, [hli]
-	ld d, [hl]
-	ld e, a
-	or d
-	jr z, .asm_84388
-	dec de
-	ld [hl], d
-	dec hl
-	ld [hl], e
-	ld a, [wca8c]
-	ld e, a
-	ld a, [wca8d]
-	ld d, a
-	ld hl, OverworldMap
-	add hl, de
-	inc de
-	ld a, e
-	ld [wca8c], a
-	ld a, d
-	ld [wca8d], a
-	ld a, [hl]
-	call Function843db
-	ret
-.asm_84388
-	call Function8432a
-
-Function8438b: ; 8438b (21:438b)
-	ld a, [wca86]
-	call Function843db
-	call Function8432a
-	ret
-
-Function84395: ; 84395 (21:4395)
-	ld a, [wca87]
-	call Function843db
-	call Function8432a
-	ret
-
-Function8439f: ; 8439f (21:439f)
-	ld a, $0
-	call Function843db
-	call Function8432a
-	ret
-
-Function843a8: ; 843a8 (21:43a8)
-	ld a, [rSB]
-	ld [wca88], a
-	ld a, $0
-	call Function843db
-	call Function8432a
-	ret
-
-Function843b6: ; 843b6 (21:43b6)
-	ld a, [rSB]
-	ld [wca89], a
-	xor a
-	ld [wc2d5], a
-	ret
-
-Function843c0: ; 843c0 (21:43c0)
-	ld a, $f
-	call Function843db
-	call Function8432a
-	ret
-
-Function843c9: ; 843c9 (21:43c9)
-	ld a, $0
-	call Function843db
-	call Function8432a
-	ret
-
-Function843d2: ; 843d2 (21:43d2)
-	ld a, $8
-	call Function843db
-	call Function8432a
-	ret
-
-Function843db: ; 843db (21:43db)
-	ld [rSB], a
-	ld a, $1
-	ld [rSC], a
-	ld a, $81
-	ld [rSC], a
-	ret
-
-Function843e6: ; 843e6 (21:43e6)
-	ld a, [rSB]
-	ld [wca89], a
-	xor a
-	ld [wc2d5], a
-	ret
-
-Function843f0: ; 843f0
-.asm_843f0
-	call JoyTextDelay
-	call Function846f6
-	jr c, .asm_8440f
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .asm_8440d
-	call Function84022
-	call Function84757
-	call Function84785
-	call DelayFrame
-	jr .asm_843f0
-
-.asm_8440d
-	and a
-	ret
-
-.asm_8440f
-	scf
-	ret
-; 84411
-
-Function84411: ; 84411
-	xor a
-	ld [wc2d4], a
-	ld [wc2d5], a
-	ret
-; 84419
-
-Function84419: ; 84419
-	push af
-	call Function84000
-	pop af
-	ld [wcbfa], a
-	call Function84728
-	ret
-; 84425
-
-Function84425: ; 84425
-	call ReturnToMapFromSubmenu
-	call Function84753
-	ret
-; 8442c
-
-Function8442c: ; 8442c
-	ld a, [wcf65]
-	push af
-	ld hl, VTiles1
-	ld de, FontInversed
-	lb bc, BANK(FontInversed), $80
-	call Request1bpp
-	xor a
-	ld [$ffac], a
-	call Function8474c
-	ld a, [rIE]
-	push af
-	xor a
-	ld [rIF], a
-	ld a, $9
-	ld [rIE], a
-	call Function84000
-	ld a, $10
-	ld [wcbfa], a
-	callba Function1dc1b0
-	call ClearTileMap
-	ld a, $e4
-	call DmgToCgbBGPals
-	call DelayFrame
-	ld hl, hVBlank
-	ld a, [hl]
-	push af
-	ld [hl], $4
-	ld a, $8
-	ld [wcf65], a
-	call Function84742
-	call Function843f0
-	jr c, .asm_8449d
-	call Function84411
-	ld c, 12
-	call DelayFrames
-	xor a
-	ld [hBGMapMode], a
-	call Function84000
-	ld a, $3
-	ld [wcbfa], a
-	callba Function1dc213
-	call Function84742
-	ld a, $4
-	ld [wcf65], a
-	call Function843f0
-
-.asm_8449d
-	pop af
-	ld [hVBlank], a
-	call Function84411
-	xor a
-	ld [rIF], a
-	pop af
-	ld [rIE], a
-	call Function84425
-	ld c, $8
-.asm_844ae
-	call LowVolume
-	call DelayFrame
-	dec c
-	jr nz, .asm_844ae
-	pop af
-	ld [wcf65], a
-	ret
-; 844bc
-
-Function844bc: ; 844bc (21:44bc)
-	ld a, [wcf65]
-	push af
-	ld a, $9
-	ld [wcf65], a
-	ld a, e
-	ld [wd004], a
-	ld a, d
-	ld [StartFlypoint], a
-	ld a, b
-	ld [EndFlypoint], a
-	ld a, c
-	ld [MovementBuffer], a
-	xor a
-	ld [$ffac], a
-	ld [wd003], a
-	call Function8474c
-	ld a, [rIE]
-	push af
-	xor a
-	ld [rIF], a
-	ld a, $9
-	ld [rIE], a
-	ld hl, hVBlank
-	ld a, [hl]
-	push af
-	ld [hl], $4
-	xor a
-	ld [hBGMapMode], a
-	call Function84817
-	ld a, $10
-	call Function84419
-	call Function84559
-	jr c, .asm_84545
-	call Function84411
-	ld c, 12
-	call DelayFrames
-	xor a
-	ld [hBGMapMode], a
-	call Function8486f
-	ld a, $0
-	call Function84419
-	call Function84559
-	jr c, .asm_84545
-	call Function84411
-	ld c, 12
-	call DelayFrames
-	xor a
-	ld [hBGMapMode], a
-	call Function84893
-	ld a, $0
-	call Function84419
-	call Function84559
-	jr c, .asm_84545
-	call Function84411
-	ld c, 12
-	call DelayFrames
-	xor a
-	ld [hBGMapMode], a
-	call Function848b7
-	ld a, $3
-	call Function84419
-	call Function84559
-.asm_84545
-	pop af
-	ld [hVBlank], a
-	call Function84411
-	xor a
-	ld [rIF], a
-	pop af
-	ld [rIE], a
-	call Function84425
-	pop af
-	ld [wcf65], a
-	ret
-
-Function84559: ; 84559 (21:4559)
-	call Function84742
-	call Function843f0
-	ret
-
-Function84560: ; 84560
-	ld a, [wcf65]
-	push af
-	xor a
-	ld [$ffac], a
-	call Function8474c
-	ld a, [rIE]
-	push af
-	xor a
-	ld [rIF], a
-	ld a, $9
-	ld [rIE], a
-	ld hl, hVBlank
-	ld a, [hl]
-	push af
-	ld [hl], $4
-	xor a
-	ld [hBGMapMode], a
-	call LoadTileMapToTempTileMap
-	callba Function16dac
-	ld a, $0
-	call Function84419
-	call Call_LoadTempTileMapToTileMap
-	call Function84742
-	ld a, $9
-	ld [wcf65], a
-.asm_84597
-	call JoyTextDelay
-	call Function846f6
-	jr c, .asm_845c0
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .asm_845c0
-	call Function84022
-	ld a, [wJumptableIndex]
-	cp $2
-	jr nc, .asm_845b5
-	ld a, $3
-	ld [wca81], a
-
-.asm_845b5
-	call Function84757
-	call Function84785
-	call DelayFrame
-	jr .asm_84597
-
-.asm_845c0
-	pop af
-	ld [hVBlank], a
-	call Function84411
-	call Call_LoadTempTileMapToTileMap
-	xor a
-	ld [rIF], a
-	pop af
-	ld [rIE], a
-	pop af
-	ld [wcf65], a
-	ret
-; 845d4
-
-Function845d4: ; 845d4
-	call Function845db
-	call Function84425
-	ret
-; 845db
-
-Function845db: ; 845db
-	ld a, [wcf65]
-	push af
-	xor a
-	ld [$ffac], a
-	call Function8474c
-	ld a, [rIE]
-	push af
-	xor a
-	ld [rIF], a
-	ld a, $9
-	ld [rIE], a
-	xor a
-	ld [hBGMapMode], a
-	ld a, $13
-	call Function84419
-	ld hl, hVBlank
-	ld a, [hl]
-	push af
-	ld [hl], $4
-	ld a, $9
-	ld [wcf65], a
-	call Function843f0
-	pop af
-	ld [hVBlank], a
-	call Function84411
-	call Function84735
-	xor a
-	ld [rIF], a
-	pop af
-	ld [rIE], a
-	pop af
-	ld [wcf65], a
-	ret
-; 8461a
-
-Function8461a: ; 8461a
-	ld a, [wcf65]
-	push af
-	xor a
-	ld [$ffac], a
-	call Function8474c
-	ld a, [rIE]
-	push af
-	xor a
-	ld [rIF], a
-	ld a, $9
-	ld [rIE], a
-	xor a
-	ld [hBGMapMode], a
-	callba Function1dc381
-	ld a, $10
-	call Function84419
-	ld hl, hVBlank
-	ld a, [hl]
-	push af
-	ld [hl], $4
-	ld a, $8
-	ld [wcf65], a
-	call Function84742
-	call Function843f0
-	jr c, .asm_84671
-	call Function84411
-	ld c, 12
-	call DelayFrames
-	xor a
-	ld [hBGMapMode], a
-	callba Function1dc47b
-	ld a, $3
-	call Function84419
-	ld a, $9
-	ld [wcf65], a
-	call Function84742
-	call Function843f0
-
-.asm_84671
-	pop af
-	ld [hVBlank], a
-	call Function84411
-	call Function84735
-	xor a
-	ld [rIF], a
-	pop af
-	ld [rIE], a
-	call Function84425
-	pop af
-	ld [wcf65], a
-	ret
-; 84688
-
-Function84688: ; 84688
-	ld a, [wcf65]
-	push af
-	callba Function1dd709
-	xor a
-	ld [$ffac], a
-	call Function8474c
-	ld a, [rIE]
-	push af
-	xor a
-	ld [rIF], a
-	ld a, $9
-	ld [rIE], a
-	ld hl, hVBlank
-	ld a, [hl]
-	push af
-	ld [hl], $4
-	ld a, $10
-	call Function84419
-	call Function84742
-	ld a, $9
-	ld [wcf65], a
-	call Function843f0
-	jr c, .asm_846e2
-	call Function84411
-	ld c, 12
-	call DelayFrames
-	call LoadTileMapToTempTileMap
-	xor a
-	ld [hBGMapMode], a
-	callba Function1dd7ae
-	ld a, $3
-	call Function84419
-	call Call_LoadTempTileMapToTileMap
-	call Function84742
-	ld a, $9
-	ld [wcf65], a
-	call Function843f0
-
-.asm_846e2
-	pop af
-	ld [hVBlank], a
-	call Function84411
-	xor a
-	ld [rIF], a
-	pop af
-	ld [rIE], a
-	call Function84425
-	pop af
-	ld [wcf65], a
-	ret
-; 846f6
-
-Function846f6: ; 846f6
-	ld a, [hJoyDown]
-	and B_BUTTON
-	jr nz, .asm_846fe
-	and a
-	ret
-
-.asm_846fe
-	ld a, [wca80]
-	cp $c
-	jr nz, .asm_84722
-.asm_84705
-	ld a, [wc2d5]
-	and a
-	jr nz, .asm_84705
-	ld a, $16
-	ld [wc2d5], a
-	ld a, $88
-	ld [rSB], a
-	ld a, $1
-	ld [rSC], a
-	ld a, $81
-	ld [rSC], a
-.asm_8471c
-	ld a, [wc2d5]
-	and a
-	jr nz, .asm_8471c
-
-.asm_84722
-	ld a, $1
-	ld [$ffac], a
-	scf
-	ret
-; 84728
-
-Function84728: ; 84728
-	hlcoord 0, 0
-	ld de, wca90
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	call CopyBytes
-	ret
-; 84735
-
-Function84735: ; 84735
-	ld hl, wca90
-	decoord 0, 0
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	call CopyBytes
-	ret
-; 84742
-
-Function84742: ; 84742
-	xor a
-	ld [hJoyReleased], a
-	ld [hJoyPressed], a
-	ld [hJoyDown], a
-	ld [hJoyLast], a
-	ret
-; 8474c
-
-Function8474c: ; 8474c
-	ld de, MUSIC_PRINTER
-	call PlayMusic2
-	ret
-; 84753
-
-Function84753: ; 84753
-	call RestartMapMusic
-	ret
-; 84757
-
-Function84757: ; 84757
-	ld a, [wca88]
-	cp -1
-	jr nz, .printer_connected
-	ld a, [wca89]
-	cp -1
-	jr z, .error_2
-
-.printer_connected
-	ld a, [wca89]
-	and %11100000
-	ret z ; no error
-
-	bit 7, a
-	jr nz, .error_1
-	bit 6, a
-	jr nz, .error_4
-	ld a, 6 ; error 3
-	jr .load_text_index
-
-.error_4
-	ld a, 7 ; error 4
-	jr .load_text_index
-
-.error_1
-	ld a, 4 ; error 1
-	jr .load_text_index
-
-.error_2
-	ld a, 5 ; error 2
-
-.load_text_index
-	ld [wcbf8], a
-	ret
-; 84785
-
-Function84785: ; 84785
-	ld a, [wcbf8]
-	and a
-	ret z
-	push af
-	xor a
-	ld [hBGMapMode], a
-	hlcoord 0, 5
-	lb bc, 10, 18
-	call TextBox
-	pop af
-	ld e, a
-	ld d, 0
-	ld hl, PrinterStatusStringPointers
-rept 2
-	add hl, de
-endr
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	hlcoord 1, 7
-	ld a, BANK(GBPrinterStrings)
-	call FarString
-	hlcoord 2, 15
-	ld de, String_PressBToCancel
-	call PlaceString
-	ld a, $1
-	ld [hBGMapMode], a
-	xor a
-	ld [wcbf8], a
-	ret
-; 847bd
-
-Function847bd: ; 847bd
-	ld a, [wcbf8]
-	and a
-	ret z
-	push af
-	xor a
-	ld [hBGMapMode], a
-	hlcoord 2, 4
-	lb bc, 13, 16
-	call ClearBox
-	pop af
-	ld e, a
-	ld d, 0
-	ld hl, PrinterStatusStringPointers
-rept 2
-	add hl, de
-endr
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	hlcoord 4, 7
-	ld a, BANK(GBPrinterStrings)
-	call FarString
-	hlcoord 4, 15
-	ld de, String_PressBToCancel
-	call PlaceString
-	ld a, $1
-	ld [hBGMapMode], a
-	xor a
-	ld [wcbf8], a
-	ret
-; 847f5
-
-String_PressBToCancel:
-	db "Press B to Cancel@"
-; 84807
-
-PrinterStatusStringPointers: ; 84807
-	dw String_1dc275 ; @
-	dw String_1dc276 ; CHECKING LINK
-	dw String_1dc289 ; TRANSMITTING
-	dw String_1dc29c ; PRINTING
-	dw String_1dc2ad ; error 1
-	dw String_1dc2e2 ; error 2
-	dw String_1dc317 ; error 3
-	dw String_1dc34c ; error 4
-; 84817
-
-Function84817: ; 84817 (21:4817)
-	xor a
-	ld [wd002], a
-	hlcoord 0, 0
-	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
-	ld a, " "
-	call ByteFill
-	call Function84a0e
-	hlcoord 0, 0
-	ld bc, 9 * SCREEN_WIDTH
-	ld a, " "
-	call ByteFill
-	call Function849e9
-	call Function849d7
-	hlcoord 4, 3
-	ld de, String_84865
-	call PlaceString
-	ld a, [wd007]
-	ld bc, BOX_NAME_LENGTH
-	ld hl, wBoxNames
-	call AddNTimes
-	ld d, h
-	ld e, l
-	hlcoord 6, 5
-	call PlaceString
-	ld a, $1
-	call Function849c6
-	hlcoord 2, 9
-	ld c, $3
-	call Function848e7
-	ret
-; 84865 (21:4865)
-
-String_84865:
-	db "#MON LIST@"
-; 8486f
-
-Function8486f: ; 8486f (21:486f)
-	hlcoord 0, 0
-	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
-	ld a, " "
-	call ByteFill
-	call Function84a0e
-	call Function849e9
-	ld a, [wd003]
-	and a
-	ret nz
-	ld a, $4
-	call Function849c6
-	hlcoord 2, 0
-	ld c, $6
-	call Function848e7
-	ret
-
-Function84893: ; 84893 (21:4893)
-	hlcoord 0, 0
-	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
-	ld a, " "
-	call ByteFill
-	call Function84a0e
-	call Function849e9
-	ld a, [wd003]
-	and a
-	ret nz
-	ld a, $a
-	call Function849c6
-	hlcoord 2, 0
-	ld c, $6
-	call Function848e7
-	ret
-
-Function848b7: ; 848b7 (21:48b7)
-	hlcoord 0, 0
-	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
-	ld a, " "
-	call ByteFill
-	call Function84a0e
-	hlcoord 1, 15
-	lb bc, 2, 18
-	call ClearBox
-	call Function849e9
-	call Function849fc
-	ld a, [wd003]
-	and a
-	ret nz
-	ld a, $10
-	call Function849c6
-	hlcoord 2, 0
-	ld c, $5
-	call Function848e7
-	ret
-
-Function848e7: ; 848e7 (21:48e7)
-	ld a, [EndFlypoint]
-	call GetSRAMBank
-
-Function848ed: ; 848ed (21:48ed)
-	ld a, c
-	and a
-	jp z, Function84986
-	dec c
-	ld a, [de]
-	cp $ff
-	jp z, Function84981
-	ld [wd265], a
-	ld [CurPartySpecies], a
-	push bc
-	push hl
-	push de
-	push hl
-	ld bc, $10
-	ld a, " "
-	call ByteFill
-	pop hl
-	push hl
-	call GetBasePokemonName
-	pop hl
-	push hl
-	call PlaceString
-	ld a, [CurPartySpecies]
-	cp $fd
-	pop hl
-	jr z, .ok2
-	ld bc, $b
-	add hl, bc
-	call Function8498a
-	ld bc, $9
-	add hl, bc
-	ld a, $f3
-	ld [hli], a
-	push hl
-	ld bc, $e
-	ld a, " "
-	call ByteFill
-	pop hl
-	push hl
-	ld a, [wd004]
-	ld l, a
-	ld a, [StartFlypoint]
-	ld h, a
-	ld bc, $372
-	add hl, bc
-	ld bc, $b
-	ld a, [wd002]
-	call AddNTimes
-	ld e, l
-	ld d, h
-	pop hl
-	push hl
-	call PlaceString
-	pop hl
-	ld bc, $b
-	add hl, bc
-	push hl
-	ld a, [wd004]
-	ld l, a
-	ld a, [StartFlypoint]
-	ld h, a
-	ld bc, $35
-	add hl, bc
-	ld bc, $20
-	ld a, [wd002]
-	call AddNTimes
-	ld a, [hl]
-	pop hl
-	call Function383d
-.ok2
-	ld hl, wd002
-	inc [hl]
-	pop de
-	pop hl
-	ld bc, $3c
-	add hl, bc
-	pop bc
-	inc de
-	jp Function848ed
-
-Function84981: ; 84981 (21:4981)
-	ld a, $1
-	ld [wd003], a
-
-Function84986: ; 84986 (21:4986)
-	call CloseSRAM
-	ret
-
-Function8498a: ; 8498a (21:498a)
-	push hl
-	ld a, [wd004]
-	ld l, a
-	ld a, [StartFlypoint]
-	ld h, a
-	ld bc, $2b
-	add hl, bc
-	ld bc, $20
-	ld a, [wd002]
-	call AddNTimes
-	ld de, TempMonDVs
-	ld a, [hli]
-	ld [de], a
-	inc de
-	ld a, [hli]
-	ld [de], a
-	ld a, [wd002]
-	ld [CurPartyMon], a
-	ld a, $3
-	ld [MonType], a
-	callba GetGender
-	ld a, $7f
-	jr c, .asm_849c3
-	ld a, $ef
-	jr nz, .asm_849c3
-	ld a, $f5
-.asm_849c3
-	pop hl
-	ld [hli], a
-	ret
-
-Function849c6: ; 849c6 (21:49c6)
-	push hl
-	ld e, a
-	ld d, $0
-	ld a, [wd004]
-	ld l, a
-	ld a, [StartFlypoint]
-	ld h, a
-	add hl, de
-	ld e, l
-	ld d, h
-	pop hl
-	ret
-
-Function849d7: ; 849d7 (21:49d7)
-	hlcoord 0, 0
-	ld a, $79
-	ld [hli], a
-	ld a, $7a
-	ld c, $12
-.asm_849e1
-	ld [hli], a
-	dec c
-	jr nz, .asm_849e1
-	ld a, $7b
-	ld [hl], a
-	ret
-
-Function849e9: ; 849e9 (21:49e9)
-	hlcoord 0, 0
-	ld de, $13
-	ld c, $12
-.asm_849f1
-	ld a, $7c
-	ld [hl], a
-	add hl, de
-	ld a, $7c
-	ld [hli], a
-	dec c
-	jr nz, .asm_849f1
-	ret
-
-Function849fc: ; 849fc (21:49fc)
-	hlcoord 0, 17
-	ld a, $7d
-	ld [hli], a
-	ld a, $7a
-	ld c, $12
-.asm_84a06
-	ld [hli], a
-	dec c
-	jr nz, .asm_84a06
-	ld a, $7e
-	ld [hl], a
-	ret
-
-Function84a0e: ; 84a0e (21:4a0e)
-	hlcoord 2, 0
-	ld c, $6
-.asm_84a13
-	push bc
-	push hl
-	ld de, String84a25
-	call PlaceString
-	pop hl
-	ld bc, $3c
-	add hl, bc
-	pop bc
-	dec c
-	jr nz, .asm_84a13
-	ret
-; 84a25 (21:4a25)
-
-String84a25: ; 84a25
-	db "  ------@"
-; 84a2e
-
-
 INCLUDE "battle/anim_gfx.asm"
 
+INCLUDE "event/halloffame.asm"
 
-HallOfFame:: ; 0x8640e
-	call Function8648e
-	ld a, [StatusFlags]
-	push af
-	ld a, 1
-	ld [wc2cd], a
-	call DisableSpriteUpdates
-	ld a, SPAWN_LANCE
-	ld [wSpawnAfterChampion], a
-
-	; Enable the Pokégear map to cycle through all of Kanto
-	ld hl, StatusFlags
-	set 6, [hl] ; hall of fame
-
-	callba Function14da0
-
-	ld hl, wd95e
-	ld a, [hl]
-	cp 200
-	jr nc, .ok
-	inc [hl]
-.ok
-	callba SaveGameData
-	call GetHallOfFameParty
-	callba AddHallOfFameEntry
-
-	xor a
-	ld [wc2cd], a
-	call Function864c3
-	pop af
-	ld b, a
-	callba Function109847
-	ret
-; 0x86455
-
-RedCredits:: ; 86455
-	ld a, MUSIC_NONE % $100
-	ld [MusicFadeIDLo], a
-	ld a, MUSIC_NONE / $100
-	ld [MusicFadeIDHi], a
-	ld a, $a
-	ld [MusicFade], a
-	callba FadeOutPalettes
-	xor a
-	ld [VramState], a
-	ld [hMapAnims], a
-	callba Function4e8c2
-	ld c, 8
-	call DelayFrames
-	call DisableSpriteUpdates
-	ld a, SPAWN_RED
-	ld [wSpawnAfterChampion], a
-	ld a, [StatusFlags]
-	ld b, a
-	callba Function109847
-	ret
-; 8648e
-
-Function8648e: ; 8648e
-	ld a, MUSIC_NONE % $100
-	ld [MusicFadeIDLo], a
-	ld a, MUSIC_NONE / $100
-	ld [MusicFadeIDHi], a
-	ld a, 10
-	ld [MusicFade], a
-	callba FadeOutPalettes
-	xor a
-	ld [VramState], a
-	ld [hMapAnims], a
-	callba Function4e881
-	ld c, 100
-	jp DelayFrames
-; 864b4
-
-Function864b4: ; 864b4
-	push de
-	ld de, MUSIC_NONE
-	call PlayMusic
-	call DelayFrame
-	pop de
-	call PlayMusic
-	ret
-; 864c3
-
-Function864c3: ; 864c3
-	xor a
-	ld [wJumptableIndex], a
-	call Function8671c
-	jr c, .done
-	ld de, SCREEN_WIDTH
-	call Function864b4
-	xor a
-	ld [wcf64], a
-.loop
-	ld a, [wcf64]
-	cp 6
-	jr nc, .done
-	ld hl, wc608 + 1
-	ld bc, $10
-	call AddNTimes
-	ld a, [hl]
-	cp -1
-	jr z, .done
-	push hl
-	call Function865b5
-	pop hl
-	call Function8650c
-	jr c, .done
-	ld hl, wcf64
-	inc [hl]
-	jr .loop
-
-.done
-	call Function86810
-	ld a, $4
-	ld [MusicFade], a
-	call FadeToWhite
-	ld c, 8
-	call DelayFrames
-	ret
-; 8650c
-
-Function8650c: ; 8650c
-	call Function86748
-	ld de, String_8652c
-	hlcoord 1, 2
-	call PlaceString
-	call WaitBGMap
-	decoord 6, 5
-	ld c, $6
-	predef Functiond066e
-	ld c, 60
-	call DelayFrames
-	and a
-	ret
-; 8652c
-
-String_8652c:
-	db "New Hall of Famer!@"
-; 8653f
-
-
-GetHallOfFameParty: ; 8653f
-	ld hl, OverworldMap
-	ld bc, HOF_LENGTH
-	xor a
-	call ByteFill
-	ld a, [wd95e]
-	ld de, OverworldMap
-	ld [de], a
-	inc de
-	ld hl, PartySpecies
-	ld c, 0
-.next
-	ld a, [hli]
-	cp -1
-	jr z, .done
-	cp EGG
-	jr nz, .mon
-	inc c
-	jr .next
-
-.mon
-	push hl
-	push de
-	push bc
-
-	ld a, c
-	ld hl, PartyMons
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call AddNTimes
-	ld c, l
-	ld b, h
-
-	ld hl, MON_SPECIES
-	add hl, bc
-	ld a, [hl]
-	ld [de], a
-	inc de
-
-	ld hl, MON_ID
-	add hl, bc
-	ld a, [hli]
-	ld [de], a
-	inc de
-	ld a, [hl]
-	ld [de], a
-	inc de
-
-	ld hl, MON_DVS
-	add hl, bc
-	ld a, [hli]
-	ld [de], a
-	inc de
-	ld a, [hl]
-	ld [de], a
-	inc de
-
-	ld hl, MON_LEVEL
-	add hl, bc
-	ld a, [hl]
-	ld [de], a
-	inc de
-
-	pop bc
-	push bc
-	ld a, c
-	ld hl, PartyMonNicknames
-	ld bc, PKMN_NAME_LENGTH
-	call AddNTimes
-	ld bc, PKMN_NAME_LENGTH - 1
-	call CopyBytes
-
-	pop bc
-	inc c
-	pop de
-	ld hl, HOF_MON_LENGTH
-	add hl, de
-	ld e, l
-	ld d, h
-	pop hl
-	jr .next
-
-.done
-	ld a, $ff
-	ld [de], a
-	ret
-; 865b5
-
-Function865b5: ; 865b5
-	push hl
-	call ClearBGPalettes
-	callba Function4e906
-	pop hl
-	ld a, [hli]
-	ld [TempMonSpecies], a
-	ld [CurPartySpecies], a
-rept 2
-	inc hl
-endr
-	ld a, [hli]
-	ld [TempMonDVs], a
-	ld a, [hli]
-	ld [TempMonDVs + 1], a
-	ld hl, TempMonDVs
-	predef GetUnownLetter
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	ld a, " "
-	call ByteFill
-	ld de, VTiles2 tile $31
-	predef GetBackpic
-	ld a, $31
-	ld [hFillBox], a
-	hlcoord 6, 6
-	lb bc, 6, 6
-	predef FillBox
-	ld a, $d0
-	ld [hSCY], a
-	ld a, $90
-	ld [hSCX], a
-	call WaitBGMap
-	xor a
-	ld [hBGMapMode], a
-	ld b, $1a
-	call GetSGBLayout
-	call SetPalettes
-	call Function86635
-	xor a
-	ld [wc2c6], a
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	ld a, " "
-	call ByteFill
-	hlcoord 6, 5
-	call _PrepMonFrontpic
-	call WaitBGMap
-	xor a
-	ld [hBGMapMode], a
-	ld [hSCY], a
-	call Function86643
-	ret
-; 86635
-
-Function86635: ; 86635
-.asm_86635
-	ld a, [hSCX]
-	cp $70
-	ret z
-	add $4
-	ld [hSCX], a
-	call DelayFrame
-	jr .asm_86635
-; 86643
-
-Function86643: ; 86643
-.asm_86643
-	ld a, [hSCX]
-	and a
-	ret z
-rept 2
-	dec a
-endr
-	ld [hSCX], a
-	call DelayFrame
-	jr .asm_86643
-; 86650
-
-Function86650: ; 86650
-	call LoadFontsBattleExtra
-	xor a
-	ld [wJumptableIndex], a
-.asm_86657
-	call Function8671c
-	ret c
-	call Function86665
-	ret c
-	ld hl, wJumptableIndex
-	inc [hl]
-	jr .asm_86657
-; 86665
-
-Function86665: ; 86665
-	xor a
-	ld [wcf64], a
-.asm_86669
-	call Function86692
-	jr c, .asm_86690
-.asm_8666e
-	call JoyTextDelay
-	ld hl, hJoyLast
-	ld a, [hl]
-	and B_BUTTON
-	jr nz, .asm_8668e
-	ld a, [hl]
-	and A_BUTTON
-	jr nz, .asm_86688
-	ld a, [hl]
-	and START
-	jr nz, .asm_86690
-	call DelayFrame
-	jr .asm_8666e
-
-.asm_86688
-	ld hl, wcf64
-	inc [hl]
-	jr .asm_86669
-
-.asm_8668e
-	scf
-	ret
-
-.asm_86690
-	and a
-	ret
-; 86692
-
-Function86692: ; 86692
-; Print the number of times the player has entered the Hall of Fame.
-; If that number is above 200, print "HOF Master!" instead.
-	ld a, [wcf64]
-	cp $6
-	jr nc, .asm_866a7
-	ld hl, wc608 + 1
-	ld bc, $10
-	call AddNTimes
-	ld a, [hl]
-	cp $ff
-	jr nz, .asm_866a9
-
-.asm_866a7
-	scf
-	ret
-
-.asm_866a9
-	push hl
-	call ClearBGPalettes
-	pop hl
-	call Function86748
-	ld a, [wc608]
-	cp 200 + 1
-	jr c, .asm_866c6
-	ld de, String_866fc
-	hlcoord 1, 2
-	call PlaceString
-	hlcoord 13, 2
-	jr .asm_866de
-
-.asm_866c6
-	ld de, String_8670c
-	hlcoord 1, 2
-	call PlaceString
-	hlcoord 2, 2
-	ld de, wc608
-	lb bc, 1, 3
-	call PrintNum
-	hlcoord 11, 2
-
-.asm_866de
-	ld de, String_866fb
-	call PlaceString
-	call WaitBGMap
-	ld b, $1a
-	call GetSGBLayout
-	call SetPalettes
-	decoord 6, 5
-	ld c, $6
-	predef Functiond066e
-	and a
-	ret
-; 866fb
-
-String_866fb:
-	db "@"
-; 866fc
-
-String_866fc:
-	db "    HOF Master!@"
-; 8670c
-
-String_8670c:
-	db "    -Time Famer@"
-; 8671c
-
-
-Function8671c: ; 8671c
-	ld a, [wJumptableIndex]
-	cp NUM_HOF_TEAMS
-	jr nc, .asm_86746
-	ld hl, sHallOfFame
-	ld bc, HOF_LENGTH
-	call AddNTimes
-	ld a, BANK(sHallOfFame)
-	call GetSRAMBank
-	ld a, [hl]
-	and a
-	jr z, .asm_86743
-	ld de, wc608
-	ld bc, HOF_LENGTH
-	call CopyBytes
-	call CloseSRAM
-	and a
-	ret
-
-.asm_86743
-	call CloseSRAM
-
-.asm_86746
-	scf
-	ret
-; 86748
-
-Function86748: ; 86748
-	xor a
-	ld [hBGMapMode], a
-	ld a, [hli]
-	ld [TempMonSpecies], a
-	ld a, [hli]
-	ld [TempMonID], a
-	ld a, [hli]
-	ld [TempMonID + 1], a
-	ld a, [hli]
-	ld [TempMonDVs], a
-	ld a, [hli]
-	ld [TempMonDVs + 1], a
-	ld a, [hli]
-	ld [TempMonLevel], a
-	ld de, StringBuffer2
-	ld bc, 10
-	call CopyBytes
-	ld a, "@"
-	ld [StringBuffer2 + 10], a
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	ld a, " "
-	call ByteFill
-	hlcoord 0, 0
-	lb bc, 3, SCREEN_WIDTH - 2
-	call TextBox
-	hlcoord 0, 12
-	lb bc, 4, SCREEN_WIDTH - 2
-	call TextBox
-	ld a, [TempMonSpecies]
-	ld [CurPartySpecies], a
-	ld [wd265], a
-	ld hl, TempMonDVs
-	predef GetUnownLetter
-	xor a
-	ld [wc2c6], a
-	hlcoord 6, 5
-	call _PrepMonFrontpic
-	ld a, [CurPartySpecies]
-	cp EGG
-	jr z, .asm_867f8
-	hlcoord 1, 13
-	ld a, $74
-	ld [hli], a
-	ld [hl], $f2
-	hlcoord 3, 13
-	ld de, wd265
-	lb bc, PRINTNUM_LEADINGZEROS | 1, 3
-	call PrintNum
-	call GetBasePokemonName
-	hlcoord 7, 13
-	call PlaceString
-	ld a, $3
-	ld [MonType], a
-	callba GetGender
-	ld a, $7f
-	jr c, .asm_867e2
-	ld a, $ef
-	jr nz, .asm_867e2
-	ld a, $f5
-
-.asm_867e2
-	hlcoord 18, 13
-	ld [hli], a
-	hlcoord 8, 14
-	ld a, $f3
-	ld [hli], a
-	ld de, StringBuffer2
-	call PlaceString
-	hlcoord 1, 16
-	call PrintLevel
-
-.asm_867f8
-	hlcoord 7, 16
-	ld a, $73
-	ld [hli], a
-	ld a, $74
-	ld [hli], a
-	ld [hl], $f3
-	hlcoord 10, 16
-	ld de, TempMonID
-	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
-	call PrintNum
-	ret
-; 86810
-
-Function86810: ; 86810
-	call ClearBGPalettes
-	ld hl, VTiles2 tile $63
-	ld de, FontExtra + $d0
-	lb bc, BANK(FontExtra), 1
-	call Request2bpp
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	ld a, " "
-	call ByteFill
-	callba GetPlayerBackpic
-	ld a, $31
-	ld [hFillBox], a
-	hlcoord 6, 6
-	lb bc, 6, 6
-	predef FillBox
-	ld a, $d0
-	ld [hSCY], a
-	ld a, $90
-	ld [hSCX], a
-	call WaitBGMap
-	xor a
-	ld [hBGMapMode], a
-	ld [CurPartySpecies], a
-	ld b, $1a
-	call GetSGBLayout
-	call SetPalettes
-	call Function86635
-	xor a
-	ld [wc2c6], a
-	hlcoord 0, 0
-	ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
-	ld a, " "
-	call ByteFill
-	callba Function88840
-	xor a
-	ld [hFillBox], a
-	hlcoord 12, 5
-	lb bc, 7, 7
-	predef FillBox
-	ld a, $c0
-	ld [hSCX], a
-	call WaitBGMap
-	xor a
-	ld [hBGMapMode], a
-	ld [hSCY], a
-	call Function86643
-	xor a
-	ld [hBGMapMode], a
-	hlcoord 0, 2
-	lb bc, 8, 9
-	call TextBox
-	hlcoord 0, 12
-	lb bc, 4, 18
-	call TextBox
-	hlcoord 2, 4
-	ld de, PlayerName
-	call PlaceString
-	hlcoord 1, 6
-	ld a, $73
-	ld [hli], a
-	ld a, $74
-	ld [hli], a
-	ld [hl], $f3
-	hlcoord 4, 6
-	ld de, PlayerID
-	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
-	call PrintNum
-	hlcoord 1, 8
-	ld de, .PlayTime
-	call PlaceString
-	hlcoord 3, 9
-	ld de, GameTimeHours
-	lb bc, 2, 3
-	call PrintNum
-	ld [hl], $63
-	inc hl
-	ld de, GameTimeMinutes
-	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
-	call PrintNum
-	call WaitBGMap
-	callba Function26601
-	ret
-; 868ed
-
-.PlayTime
-	db "PLAY TIME@"
-; 868f7
-
-
 SECTION "bank22", ROMX, BANK[$22]
 
 INCLUDE "event/kurt.asm"
@@ -38807,16 +22228,16 @@
 	db $40 ; flags
 	db 00, 00 ; start coords
 	db 11, 10 ; end coords
-	dw MenuData2_0x882be
+	dw .MaleNames
 	db 1 ; ????
 	db 0 ; default option
 ; 882be
 
-MenuData2_0x882be: ; 882be
+.MaleNames: ; 882be
 	db $91 ; flags
 	db 5 ; items
 	db "NEW NAME@"
-Unknown_882c9: ; 882c9
+MalePlayerNameArray: ; 882c9
 	db "CHRIS@"
 	db "MAT@"
 	db "ALLAN@"
@@ -38829,16 +22250,16 @@
 	db $40 ; flags
 	db 00, 00 ; start coords
 	db 11, 10 ; end coords
-	dw MenuData2_0x882ee
+	dw .FemaleNames
 	db 1 ; ????
 	db 0 ; default option
 ; 882ee
 
-MenuData2_0x882ee: ; 882ee
+.FemaleNames: ; 882ee
 	db $91 ; flags
 	db 5 ; items
 	db "NEW NAME@"
-Unknown_882f9: ; 882f9
+FemalePlayerNameArray: ; 882f9
 	db "KRIS@"
 	db "AMANDA@"
 	db "JUANA@"
@@ -38849,11 +22270,11 @@
 
 GetPlayerNameArray: ; 88318 This Function is never called
 	ld hl, PlayerName
-	ld de, Unknown_882c9
+	ld de, MalePlayerNameArray
 	ld a, [PlayerGender]
 	bit 0, a
 	jr z, .done
-	ld de, Unknown_882f9
+	ld de, FemalePlayerNameArray
 
 .done
 	call InitName
@@ -38887,12 +22308,12 @@
 	ld hl, KrisCardPic
 .GotClass
 	ld de, VTiles2 tile $00
-	ld bc, $230
+	ld bc, $23 tiles
 	ld a, BANK(ChrisCardPic) ; BANK(KrisCardPic)
 	call FarCopyBytes
 	ld hl, CardGFX
 	ld de, VTiles2 tile $23
-	ld bc, $60
+	ld bc, 6 tiles
 	ld a, BANK(CardGFX)
 	call FarCopyBytes
 	ret
@@ -39049,329 +22470,18 @@
 	ret
 ; 8c7d4
 
-PlayWhirlpoolSound: ; 8c7d4
-	call WaitSFX
-	ld de, SFX_SURF
-	call PlaySFX
-	call WaitSFX
-	ret
-; 8c7e1
+INCLUDE "event/field_moves.asm"
 
-BlindingFlash: ; 8c7e1
-	callba FadeOutPalettes
-	ld hl, StatusFlags
-	set 2, [hl]
-	callba Function8c0e5
-	callba Function8c001
-	ld b, $9
-	call GetSGBLayout
-	callba Function49409
-	callba FadeInPalettes
-	ret
-; 8c80a
-
-ShakeHeadbuttTree: ; 8c80a
-	callba Function8cf53
-	ld de, CutGrassGFX
-	ld hl, VTiles1
-	lb bc, BANK(CutGrassGFX), 4
-	call Request2bpp
-	ld de, HeadbuttTreeGFX
-	ld hl, VTiles1 tile $04
-	lb bc, BANK(HeadbuttTreeGFX), 8
-	call Request2bpp
-	call Function8cad3
-	ld a, $1b
-	call Function3b2a
-	ld hl, $3
-	add hl, bc
-	ld [hl], $84
-	ld a, $90
-	ld [wc3b5], a
-	callba Function8cf7a
-	call GetHeadbuttTreeRelativeLocation
-	ld a, $20
-	ld [wcf64], a
-	call WaitSFX
-	ld de, SFX_SANDSTORM
-	call PlaySFX
-.loop
-	ld hl, wcf64
-	ld a, [hl]
-	and a
-	jr z, .done
-	dec [hl]
-	ld a, $90
-	ld [wc3b5], a
-	callba Function8cf7a
+Function8caed: ; 8caed
 	call DelayFrame
-	jr .loop
-
-.done
-	call OverworldTextModeSwitch
-	call WaitBGMap
-	xor a
-	ld [hBGMapMode], a
-	callba Function8cf53
-	ld hl, Sprites + $90
-	ld bc, $10
-	xor a
-	call ByteFill
-	ld de, Font
-	ld hl, VTiles1
-	lb bc, BANK(Font), $c
-	call Get1bpp
-	call ReplaceKrisSprite
-	ret
-; 8c893
-
-HeadbuttTreeGFX: ; 8c893
-INCBIN "gfx/unknown/08c893.2bpp"
-; 8c913
-
-GetHeadbuttTreeRelativeLocation: ; 8c913
-	xor a
-	ld [hBGMapMode], a
-	ld a, [PlayerDirection]
-	and %00001100
-	srl a
-	ld e, a
-	ld d, 0
-	ld hl, TreeRelativeLocationTable
-	add hl, de
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-
-	ld a, $5
-	ld [hli], a
-	ld [hld], a
-	ld bc, SCREEN_WIDTH
-	add hl, bc
-	ld [hli], a
-	ld [hld], a
-	call WaitBGMap
-	xor a
-	ld [hBGMapMode], a
-	ret
-; 8c938
-
-TreeRelativeLocationTable: ; 8c938
-	dwcoord 8,     8 + 2 ; RIGHT
-	dwcoord 8,     8 - 2 ; LEFT
-	dwcoord 8 - 2, 8     ; DOWN
-	dwcoord 8 + 2, 8     ; UP
-; 8c940
-
-OWCutAnimation: ; 8c940
-	ld a, e
-	and $1
-	ld [wJumptableIndex], a
-	call .LoadCutGFX
-	call WaitSFX
-	ld de, SFX_PLACE_PUZZLE_PIECE_DOWN
-	call PlaySFX
-.loop
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .finish
-	ld a, $90
-	ld [wc3b5], a
-	callab Function8cf7a
-	call OWCutJumptable
-	call DelayFrame
-	jr .loop
-
-.finish
-	ret
-; 8c96d
-
-.LoadCutGFX: ; 8c96d
-	callab Function8cf53 ; pointless to farcall
-	ld de, CutGrassGFX
-	ld hl, VTiles1
-	lb bc, BANK(CutGrassGFX), 4
-	call Request2bpp
-	ld de, CutTreeGFX
-	ld hl, VTiles1 tile $4
-	lb bc, BANK(CutTreeGFX), 4
-	call Request2bpp
-	ret
-; 8c98c
-
-CutTreeGFX: ; c898c
-INCBIN "gfx/misc/cut_tree.2bpp"
-; c89cc
-
-CutGrassGFX: ; 8c9cc
-INCBIN "gfx/misc/cut_grass.2bpp"
-; 8ca0c
-
-OWCutJumptable: ; 8ca0c
-	ld a, [wJumptableIndex]
-	ld e, a
-	ld d, 0
-	ld hl, .jumptable
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 8ca1b
-
-
-.jumptable: ; 8ca1b (23:4a1b)
-	dw Function8ca23
-	dw Function8ca3c
-	dw Function8ca5c
-	dw Function8ca64
-
-
-Function8ca23: ; 8ca23 (23:4a23)
-	call Function8cad3
-	ld a, $17
-	call Function3b2a
-	ld hl, $3
-	add hl, bc
-	ld [hl], $84
-	ld a, $20
-	ld [wcf64], a
-	ld hl, wJumptableIndex
-rept 2
-	inc [hl]
-endr
-	ret
-
-Function8ca3c: ; 8ca3c (23:4a3c)
-	call Function8ca8e
-	xor a
-	call Function8ca73
-	ld a, $10
-	call Function8ca73
-	ld a, $20
-	call Function8ca73
-	ld a, $30
-	call Function8ca73
-	ld a, $20
-	ld [wcf64], a
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-
-Function8ca5c: ; 8ca5c (23:4a5c)
-	ld a, $1
-	ld [hBGMapMode], a
-	ld hl, wJumptableIndex
-	inc [hl]
-
-Function8ca64: ; 8ca64 (23:4a64)
-	ld hl, wcf64
-	ld a, [hl]
-	and a
-	jr z, .asm_8ca6d
-	dec [hl]
-	ret
-.asm_8ca6d
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-Function8ca73: ; 8ca73 (23:4a73)
-	push de
-	push af
-	ld a, $16
-	call Function3b2a
-	ld hl, $3
-	add hl, bc
-	ld [hl], $80
-	ld hl, $e
-	add hl, bc
-	ld [hl], $4
-	pop af
-	ld hl, $c
-	add hl, bc
-	ld [hl], a
-	pop de
-	ret
-
-Function8ca8e: ; 8ca8e (23:4a8e)
-	ld de, 0
-	ld a, [wd197]
-	bit 0, a
-	jr z, .asm_8ca9a
-	set 0, e
-.asm_8ca9a
-	ld a, [wd196]
-	bit 0, a
-	jr z, .asm_8caa3
-	set 1, e
-.asm_8caa3
-	ld a, [PlayerDirection]
-	and $c
-	add e
-	ld e, a
-	ld hl, Unknown_8cab3
-rept 2
-	add hl, de
-endr
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	ret
-; 8cab3 (23:4ab3)
-
-Unknown_8cab3: ; 8cab3
-	db $58, $60
-	db $48, $60
-	db $58, $70
-	db $48, $70
-	db $58, $40
-	db $48, $40
-	db $58, $50
-	db $48, $50
-	db $38, $60
-	db $48, $60
-	db $38, $50
-	db $48, $50
-	db $58, $60
-	db $68, $60
-	db $58, $50
-	db $68, $50
-; 8cad3
-
-Function8cad3: ; 8cad3 (23:4ad3)
-	ld a, [PlayerDirection]
-	and $c
-	srl a
-	ld e, a
-	ld d, 0
-	ld hl, Unknown_8cae5
-	add hl, de
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	ret
-; 8cae5 (23:4ae5)
-
-Unknown_8cae5: ; 8cae5
-	db $50, $68
-	db $50, $48
-	db $40, $58
-	db $60, $58
-; 8caed
-
-Function8caed: ; 8caed
-	call DelayFrame
 	ld a, [VramState]
 	push af
 	xor a
 	ld [VramState], a
 	call Function8cb9b
-	ld de, $5450
-	ld a, $a
-	call Function3b2a
+	depixel 10, 10, 4, 0
+	ld a, SPRITE_ANIM_INDEX_0A
+	call _InitSpriteAnimStruct
 	ld hl, $3
 	add hl, bc
 	ld [hl], $84
@@ -39403,9 +22513,9 @@
 	xor a
 	ld [VramState], a
 	call Function8cb9b
-	ld de, $fc50
-	ld a, $a
-	call Function3b2a
+	depixel 31, 10, 4, 0
+	ld a, SPRITE_ANIM_INDEX_0A
+	call _InitSpriteAnimStruct
 	ld hl, $3
 	add hl, bc
 	ld [hl], $84
@@ -39501,499 +22611,15 @@
 	add $40
 	ld d, a
 	ld e, $0
-	ld a, $18
-	call Function3b2a
+	ld a, SPRITE_ANIM_INDEX_18 ; fly land
+	call _InitSpriteAnimStruct
 	ld hl, $3
 	add hl, bc
 	ld [hl], $80
 	ret
 
-Special_MagnetTrain: ; 8cc04
-	ld a, [ScriptVar]
-	and a
-	jr nz, .ToGoldenrod
-	ld a, 1 ; forwards
-	lb bc, $40, $60
-	ld de, $fca0
-	jr .continue
+INCLUDE "event/magnet_train.asm"
 
-.ToGoldenrod
-	ld a, -1 ; backwards
-	lb bc, $c0, $a0
-	ld de, $b460
-
-.continue
-	ld h, a
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld a, h
-	ld [w5_d191], a
-	ld a, c
-	ld [w5_d192], a
-	ld a, b
-	ld [w5_d193], a
-	ld a, e
-	ld [w5_d194], a
-	ld a, d
-	ld [w5_d195], a
-	ld a, [hSCX]
-	push af
-	ld a, [hSCY]
-	push af
-	call Function8ccc9
-	ld hl, hVBlank
-	ld a, [hl]
-	push af
-	ld [hl], $1
-.loop
-	ld a, [wJumptableIndex]
-	and a
-	jr z, .initialize
-	bit 7, a
-	jr nz, .done
-	callab Function8cf69
-	call Function8cdf7
-	call Function8cc99
-	call Function3b0c
-	call DelayFrame
-	jr .loop
-
-.initialize
-	call Function8ceae
-	jr .loop
-
-.done
-	pop af
-	ld [hVBlank], a
-	call ClearBGPalettes
-	xor a
-	ld [hLCDStatCustom], a
-	ld [hLCDStatCustom + 1], a
-	ld [hLCDStatCustom + 2], a
-	ld [hSCX], a
-	ld [Requested2bppSource], a
-	ld [Requested2bppSource + 1], a
-	ld [Requested2bppDest], a
-	ld [Requested2bppDest + 1], a
-	ld [Requested2bpp], a
-	call ClearTileMap
-	pop af
-	ld [hSCY], a
-	pop af
-	ld [hSCX], a
-	xor a
-	ld [hBGMapMode], a
-	pop af
-	ld [rSVBK], a
-	ret
-; 8cc99
-
-Function8cc99: ; 8cc99
-	ld hl, LYOverridesBackup
-	ld c, $2f
-	ld a, [wcf64]
-	add a
-	ld [hSCX], a
-	call Function8ccc4
-	ld c, $30
-	ld a, [wcf65]
-	call Function8ccc4
-	ld c, $31
-	ld a, [wcf64]
-	add a
-	call Function8ccc4
-	ld a, [wd191]
-	ld d, a
-	ld hl, wcf64
-	ld a, [hl]
-rept 2
-	add d
-endr
-	ld [hl], a
-	ret
-; 8ccc4
-
-Function8ccc4: ; 8ccc4
-.asm_8ccc4
-	ld [hli], a
-	dec c
-	jr nz, .asm_8ccc4
-	ret
-; 8ccc9
-
-Function8ccc9: ; 8ccc9
-	call ClearBGPalettes
-	call ClearSprites
-	call DisableLCD
-	callab Function8cf53
-	call SetMagnetTrainPals
-	call DrawMagnetTrain
-	ld a, $90
-	ld [hWY], a
-	call EnableLCD
-	xor a
-	ld [hBGMapMode], a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, [rSVBK]
-	push af
-	ld a, $1
-	ld [rSVBK], a
-	callba GetPlayerIcon
-	pop af
-	ld [rSVBK], a
-	ld hl, VTiles0
-	ld c, $4
-	call Request2bpp
-	ld hl, $c0
-	add hl, de
-	ld d, h
-	ld e, l
-	ld hl, VTiles0 tile $04
-	ld c, $4
-	call Request2bpp
-	call Function8cda6
-	ld hl, wJumptableIndex
-	xor a
-	ld [hli], a
-	ld a, [wd192]
-rept 3
-	ld [hli], a
-endr
-	ld de, MUSIC_MAGNET_TRAIN
-	call PlayMusic2
-	ret
-; 8cd27
-
-DrawMagnetTrain: ; 8cd27
-	ld hl, VBGMap0
-	xor a
-.asm_8cd2b
-	call GetMagnetTrainBGTiles
-	ld b, 32 / 2
-	call .FillAlt
-	inc a
-	cp $12
-	jr c, .asm_8cd2b
-	ld hl, VBGMap0 tile $0c
-	ld de, MagnetTrainTilemap1
-	ld c, 20
-	call .FillLine
-	ld hl, VBGMap0 tile $0e
-	ld de, MagnetTrainTilemap2
-	ld c, 20
-	call .FillLine
-	ld hl, VBGMap0 tile $10
-	ld de, MagnetTrainTilemap3
-	ld c, 20
-	call .FillLine
-	ld hl, VBGMap0 tile $12
-	ld de, MagnetTrainTilemap4
-	ld c, 20
-	call .FillLine
-	ret
-; 8cd65
-
-.FillLine ; 8cd65
-	ld a, [de]
-	inc de
-	ld [hli], a
-	dec c
-	jr nz, .FillLine
-	ret
-; 8cd6c
-
-.FillAlt ; 8cd6c
-	ld [hl], e
-	inc hl
-	ld [hl], d
-	inc hl
-	dec b
-	jr nz, .FillAlt
-	ret
-; 8cd74
-
-GetMagnetTrainBGTiles: ; 8cd74
-	push hl
-	ld e, a
-	ld d, 0
-	ld hl, MagnetTrainBGTiles
-rept 2
-	add hl, de
-endr
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	pop hl
-	ret
-; 8cd82
-
-MagnetTrainBGTiles: ; 8cd82
-; Alternating tiles for each line
-; of the Magnet Train tilemap.
-	db $4c, $4d ; bush
-	db $5c, $5d ; bush
-	db $4c, $4d ; bush
-	db $5c, $5d ; bush
-	db $08, $08 ; fence
-	db $18, $18 ; fence
-	db $1f, $1f ; track
-	db $31, $31 ; track
-	db $11, $11 ; track
-	db $11, $11 ; track
-	db $0d, $0d ; track
-	db $31, $31 ; track
-	db $04, $04 ; fence
-	db $18, $18 ; fence
-	db $4c, $4d ; bush
-	db $5c, $5d ; bush
-	db $4c, $4d ; bush
-	db $5c, $5d ; bush
-; 8cda6
-
-Function8cda6: ; 8cda6
-	ld hl, LYOverrides
-	ld bc, $90
-	ld a, [wd192]
-	call ByteFill
-	ld hl, LYOverridesBackup
-	ld bc, $90
-	ld a, [wd192]
-	call ByteFill
-	ld a, $43
-	ld [hLCDStatCustom], a
-	ret
-; 8cdc3
-
-SetMagnetTrainPals: ; 8cdc3
-	ld a, $1
-	ld [rVBK], a
-
-	; bushes
-	ld hl, VBGMap0
-	ld bc, 8 tiles
-	ld a, $2
-	call ByteFill
-
-	; train
-	ld hl, VBGMap0 tile $08
-	ld bc, 20 tiles
-	xor a
-	call ByteFill
-
-	; more bushes
-	ld hl, VBGMap0 tile $1c
-	ld bc, 8 tiles
-	ld a, $2
-	call ByteFill
-
-	; train window
-	ld hl, VBGMap0 tile $10 + 7
-	ld bc, 6
-	ld a, $4
-	call ByteFill
-
-	ld a, $0
-	ld [rVBK], a
-	ret
-; 8cdf7
-
-Function8cdf7: ; 8cdf7
-	ld a, [wJumptableIndex]
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_8ce06
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 8ce06
-
-Jumptable_8ce06: ; 8ce06
-	dw Function8ce19
-	dw Function8ce6d
-	dw Function8ce47
-	dw Function8ce6d
-	dw Function8ce7a
-	dw Function8ce6d
-	dw Function8cea2
-; 8ce14
-
-Function8ce14: ; 8ce14
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-; 8ce19
-
-Function8ce19: ; 8ce19
-	ld d, $55
-	ld a, [wd194 + 1]
-	ld e, a
-	ld b, $15
-	ld a, [rSVBK]
-	push af
-	ld a, $1
-	ld [rSVBK], a
-	ld a, [PlayerGender]
-	bit 0, a
-	jr z, .asm_8ce31
-	ld b, $1f
-
-.asm_8ce31
-	pop af
-	ld [rSVBK], a
-	ld a, b
-	call Function3b2a
-	ld hl, $3
-	add hl, bc
-	ld [hl], $0
-	call Function8ce14
-	ld a, $80
-	ld [wcf66], a
-	ret
-; 8ce47
-
-Function8ce47: ; 8ce47
-	ld hl, wd193
-	ld a, [wcf65]
-	cp [hl]
-	jr z, .asm_8ce64
-	ld e, a
-	ld a, [wd191]
-	xor $ff
-	inc a
-	add e
-	ld [wcf65], a
-	ld hl, wc3c0
-	ld a, [wd191]
-	add [hl]
-	ld [hl], a
-	ret
-
-.asm_8ce64
-	call Function8ce14
-	ld a, $80
-	ld [wcf66], a
-	ret
-; 8ce6d
-
-Function8ce6d: ; 8ce6d
-	ld hl, wcf66
-	ld a, [hl]
-	and a
-	jr z, .asm_8ce76
-	dec [hl]
-	ret
-
-.asm_8ce76
-	call Function8ce14
-	ret
-; 8ce7a
-
-Function8ce7a: ; 8ce7a
-	ld hl, wd194
-	ld a, [wcf65]
-	cp [hl]
-	jr z, .asm_8ce9e
-	ld e, a
-	ld a, [wd191]
-	xor $ff
-	inc a
-	ld d, a
-	ld a, e
-rept 2
-	add d
-endr
-	ld [wcf65], a
-	ld hl, wc3c0
-	ld a, [wd191]
-	ld d, a
-	ld a, [hl]
-rept 2
-	add d
-endr
-	ld [hl], a
-	ret
-
-	ret
-
-.asm_8ce9e
-	call Function8ce14
-	ret
-; 8cea2
-
-Function8cea2: ; 8cea2
-	ld a, $80
-	ld [wJumptableIndex], a
-	ld de, SFX_TRAIN_ARRIVED
-	call PlaySFX
-	ret
-; 8ceae
-
-Function8ceae: ; 8ceae
-	callba Function8cf69
-	call Function8cdf7
-	call Function8cc99
-	call Function3b0c
-	call DelayFrame
-	ld a, [rSVBK]
-	push af
-	ld a, $1
-	ld [rSVBK], a
-	ld a, [TimeOfDayPal]
-	push af
-	ld a, [wPermission]
-	push af
-	ld a, [TimeOfDay]
-	and $3
-	ld [TimeOfDayPal], a
-	ld a, $1
-	ld [wPermission], a
-	ld b, $9
-	call GetSGBLayout
-	call UpdateTimePals
-	ld a, [rBGP]
-	ld [wcfc7], a
-	ld a, [rOBP0]
-	ld [wcfc8], a
-	ld a, [rOBP1]
-	ld [wcfc9], a
-	pop af
-	ld [wPermission], a
-	pop af
-	ld [TimeOfDayPal], a
-	pop af
-	ld [rSVBK], a
-	ret
-; 8ceff
-
-MagnetTrainTilemap1:
-	db $1f, $05, $06, $0a, $0a
-	db $0a, $09, $0a, $0a, $0a
-	db $0a, $0a, $0a, $09, $0a
-	db $0a, $0a, $0b, $0c, $1f
-MagnetTrainTilemap2:
-	db $14, $15, $16, $1a, $1a
-	db $1a, $19, $1a, $1a, $1a
-	db $1a, $1a, $1a, $19, $1a
-	db $1a, $1a, $1b, $1c, $1d
-MagnetTrainTilemap3:
-	db $24, $25, $26, $27, $07
-	db $2f, $29, $28, $28, $28
-	db $28, $28, $28, $29, $07
-	db $2f, $2a, $2b, $2c, $2d
-MagnetTrainTilemap4:
-	db $20, $1f, $2e, $1f, $17
-	db $00, $2e, $1f, $1f, $1f
-	db $1f, $1f, $1f, $2e, $17
-	db $00, $1f, $2e, $1f, $0f
-; 8cf4f
-
 Function8cf4f: ; 8cf4f
 	call Function3238
 	ret
@@ -40000,6057 +22626,26 @@
 ; 8cf53
 
 
-Function8cf53: ; 8cf53
-	ld hl, wc300
-	ld bc, $c1
-.asm_8cf59
-	ld [hl], $0
-	inc hl
-	dec bc
-	ld a, c
-	or b
-	jr nz, .asm_8cf59
-	ret
-; 8cf62
+INCLUDE "engine/sprites.asm"
 
-Function8cf62: ; 8cf62
-	call Function8cf69
-	call DelayFrame
-	ret
-; 8cf69
 
-Function8cf69: ; 8cf69
-	push hl
-	push de
-	push bc
-	push af
-
-	ld a, $0
-	ld [wc3b5], a
-	call Function8cf7a
-
-	pop af
-	pop bc
-	pop de
-	pop hl
-	ret
-; 8cf7a
-
-Function8cf7a: ; 8cf7a
-	ld hl, wc314
-	ld e, 10 ; There are 10 structs here.
-
-.loop
-	ld a, [hl]
-	and a
-	jr z, .next ; This struct is deinitialized.
-	ld c, l
-	ld b, h
-	push hl
-	push de
-	call Function8d24b ; Uses a massive jumptable
-	call LoadBouncingMonIcon
-	pop de
-	pop hl
-	jr c, .done
-
-.next
-	ld bc, $10
-	add hl, bc
-	dec e
-	jr nz, .loop
-
-	ld a, [wc3b5]
-	ld l, a
-	ld h, Sprites / $0100
-
-.loop2 ; Clear (Sprites + [wc3b5] --> SpritesEnd)
-	ld a, l
-	cp SpritesEnd % $100
-	jr nc, .done
-	xor a
-	ld [hli], a
-	jr .loop2
-
-.done
-	ret
-; 8cfa8
-
-Function8cfa8: ; 8cfa8 (23:4fa8)
-	ld hl, wc314
-	ld e, 10
-
-.loop
-	ld a, [hl]
-	and a
-	jr z, .next
-	ld c, l
-	ld b, h
-	push hl
-	push de
-	call Function8d24b ; Uses a massive jumptable
-	call LoadBouncingMonIcon
-	pop de
-	pop hl
-	jr c, .done
-
-.next
-	ld bc, $10
-	add hl, bc
-	dec e
-	jr nz, .loop
-
-	ld a, [wc3b5]
-	ld l, a
-	ld h, (Sprites + $40) / $100
-
-.loop2 ; Clear (Sprites + [wc3b5] --> Sprites + $40)
-	ld a, l
-	cp (Sprites + $40) % $100
-	jr nc, .done
-	xor a
-	ld [hli], a
-	jr .loop2
-
-.done
-	ret
-
-Function8cfd6:: ; 8cfd6
-; Find if there's any room in the wc314 array, which is 10x16
-	push de
-	push af
-	ld hl, wc314
-	ld e, 10
-.loop
-	ld a, [hl]
-	and a
-	jr z, .found
-	ld bc, $10
-	add hl, bc
-	dec e
-	jr nz, .loop
-; We've reached the end.  There is no more room here.
-; Return carry.
-	pop af
-	pop de
-	scf
-	ret
-
-.found
-; Back up the structure address to bc.
-	ld c, l
-	ld b, h
-; Value [wc3b4] is initially set to -1. Set it to
-; the number of objects loaded into this array.
-	ld hl, wc3b4
-	inc [hl]
-	ld a, [hl]
-	and a
-	jr nz, .initialized
-	inc [hl]
-
-.initialized
-; Get row a of Unknown_8d1c4, copy the pointer into de
-	pop af
-	ld e, a
-	ld d, 0
-	ld hl, Unknown_8d1c4
-rept 3
-	add hl, de
-endr
-	ld e, l
-	ld d, h
-; Set hl to the first field (field 0) in the current structure.
-	ld hl, 0
-	add hl, bc
-; Load the index.
-	ld a, [wc3b4]
-	ld [hli], a
-; Copy the table entry to the next two fields.
-	ld a, [de]
-	ld [hli], a
-	inc de
-	ld a, [de]
-	ld [hli], a
-	inc de
-; Look up the third field from the table in the wc300 array (10x2).
-; Take the value and load it in 
-	ld a, [de]
-	call LookUpInwDict_c300
-	ld [hli], a
-	pop de
-; Set hl to field 4.  Kinda pointless, because we're presumably already here.
-	ld hl, $4
-	add hl, bc
-; Load the original value of de into here.
-	ld a, e
-	ld [hli], a
-	ld a, d
-	ld [hli], a
-; load 0 into the next four fields
-	xor a
-rept 2
-	ld [hli], a
-endr
-	xor a
-rept 2
-	ld [hli], a
-endr
-; load -1 into the next field
-	dec a
-	ld [hli], a
-; load 0 into the last five fields
-	xor a
-rept 4
-	ld [hli], a
-endr
-	ld [hl], a
-; back up the address of the first field to wc3b8
-	ld a, c
-	ld [wc3b8], a
-	ld a, b
-	ld [wc3b8 + 1], a
-	ret
-; 8d036
-
-Function8d036: ; 8d036
-; Clear the index field of the struct in bc.
-	ld hl, 0
-	add hl, bc
-	ld [hl], $0
-	ret
-; 8d03d
-
-
-Function8d03d: ; 8d03d (23:503d)
-; Clear the index field of every struct in the wc314 array.
-	ld hl, wc314
-	ld bc, $10
-	ld e, 10
-	xor a
-.loop
-	ld [hl], a
-	add hl, bc
-	dec e
-	jr nz, .loop
-	ret
-
-
-LoadBouncingMonIcon: ; 8d04c
-; Populate Sprites with the bouncing mon icons
-	call Function8d0ec
-	call Function8d132
-	cp EGG
-	jr z, .done
-	cp NUM_POKEMON + 1
-	jr z, .almost
-	call Function8d1a2
-	ld a, [wc3ba]
-	add [hl]
-	ld [wc3ba], a
-	inc hl
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	push bc
-	ld a, [wc3b5]
-	ld e, a
-	ld d, Sprites / $100
-	ld a, [hli]
-	ld c, a
-.loop
-	ld a, [wc3bc]
-	ld b, a
-	ld a, [wc3be]
-	add b
-	ld b, a
-	ld a, [wc3bf]
-	add b
-	ld b, a
-	call Function8d0be
-	add b
-	ld [de], a
-	inc hl
-	inc de
-	ld a, [wc3bb]
-	ld b, a
-	ld a, [wc3bd]
-	add b
-	ld b, a
-	ld a, [wc3c0]
-	add b
-	ld b, a
-	call Function8d0ce
-	add b
-	ld [de], a
-	inc hl
-	inc de
-	ld a, [wc3ba]
-	add [hl]
-	ld [de], a
-	inc hl
-	inc de
-	call Function8d0de
-	ld [de], a
-	inc hl
-	inc de
-	ld a, e
-	ld [wc3b5], a
-	cp SpritesEnd % $100
-	jr nc, .outofroom
-	dec c
-	jr nz, .loop
-	pop bc
-	jr .done
-
-.almost
-	call Function8d036
-
-.done
-	and a
-	ret
-
-.outofroom
-	pop bc
-	scf
-	ret
-; 8d0be
-
-Function8d0be: ; 8d0be
-	push hl
-	ld a, [hl]
-	ld hl, wc3b8
-	bit 6, [hl]
-	jr z, .ok
-	add $8
-	xor $ff
-	inc a
-
-.ok
-	pop hl
-	ret
-; 8d0ce
-
-Function8d0ce: ; 8d0ce
-	push hl
-	ld a, [hl]
-	ld hl, wc3b8
-	bit 5, [hl]
-	jr z, .ok
-	add $8
-	xor $ff
-	inc a
-
-.ok
-	pop hl
-	ret
-; 8d0de
-
-Function8d0de: ; 8d0de
-	ld a, [wc3b8]
-	ld b, a
-	ld a, [hl]
-	xor b
-	and $e0
-	ld b, a
-	ld a, [hl]
-	and $1f
-	or b
-	ret
-; 8d0ec
-
-Function8d0ec: ; 8d0ec
-	xor a
-	ld [wc3b8], a
-	ld hl, $3
-	add hl, bc
-	ld a, [hli]
-	ld [wc3ba], a
-	ld a, [hli]
-	ld [wc3bb], a
-	ld a, [hli]
-	ld [wc3bc], a
-	ld a, [hli]
-	ld [wc3bd], a
-	ld a, [hli]
-	ld [wc3be], a
-	ret
-; 8d109
-
-LookUpInwDict_c300: ; 8d109
-; a = wDict_c300[a] if a in wDict_c300 else 0
-	push hl
-	push bc
-	ld hl, wDict_c300
-	ld b, a
-	ld c, 10
-.loop
-	ld a, [hli]
-	cp b
-	jr z, .ok
-	inc hl
-	dec c
-	jr nz, .loop
-	xor a
-	jr .done
-
-.ok
-	ld a, [hl]
-
-.done
-	pop bc
-	pop hl
-	ret
-; 8d120
-
-Function8d120:: ; 8d120
-	ld hl, $1
-	add hl, bc
-	ld [hl], a
-	ld hl, $8
-	add hl, bc
-	ld [hl], $0
-	ld hl, $a
-	add hl, bc
-	ld [hl], $ff
-	ret
-; 8d132
-
-
-Function8d132: ; 8d132
-.loop
-	ld hl, $8
-	add hl, bc
-	ld a, [hl]
-	and a
-	jr z, .ok
-	dec [hl]
-	call Function8d189
-	ld a, [hli]
-	push af
-	jr .skip
-
-.ok
-	ld hl, $a
-	add hl, bc
-	inc [hl]
-	call Function8d189
-	ld a, [hli]
-	cp $fe
-	jr z, .minus_2
-	cp $ff
-	jr z, .minus_1
-	push af
-	ld a, [hl]
-	push hl
-	and $3f
-	ld hl, $9
-	add hl, bc
-	add [hl]
-	ld hl, $8
-	add hl, bc
-	ld [hl], a
-	pop hl
-
-.skip
-	ld a, [hl]
-	and $c0
-	srl a
-	ld [wc3b8], a
-	pop af
-	ret
-
-.minus_1
-	xor a
-	ld hl, $8
-	add hl, bc
-	ld [hl], a
-	ld hl, $a
-	add hl, bc
-rept 2
-	dec [hl]
-endr
-	jr .loop
-
-.minus_2
-	xor a
-	ld hl, $8
-	add hl, bc
-	ld [hl], a
-	dec a
-	ld hl, $a
-	add hl, bc
-	ld [hl], a
-	jr .loop
-; 8d189
-
-Function8d189: ; 8d189
-	; Get the [bc+10]th entry in the data table
-	; indexed at [bc+1] in Unknown_8d6e6
-	ld hl, $1
-	add hl, bc
-	ld e, [hl]
-	ld d, 0
-	ld hl, Unknown_8d6e6
-rept 2
-	add hl, de
-endr
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	ld hl, $a
-	add hl, bc
-	ld l, [hl]
-	ld h, 0
-	add hl, hl
-	add hl, de
-	ret
-; 8d1a2
-
-Function8d1a2: ; 8d1a2
-	ld e, a
-	ld d, 0
-	ld hl, Unknown_8d94d
-rept 3
-	add hl, de
-endr
-	ret
-; 8d1ac
-
-Function8d1ac: ; unreferenced
-	push hl
-	ld l, a
-	ld h, 0
-rept 2
-	add hl, hl
-endr
-	ld de, Unknown_8e706
-	add hl, de
-	ld c, [hl]
-	inc hl
-	ld b, [hl]
-	inc hl
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	pop hl
-	push bc
-	call Request2bpp
-	pop bc
-	ret
-; 8d1c4
-
-Unknown_8d1c4: ; 8d1c4
-	db $01, JUMPTABLE_8D24B_FUNCTION_01, $00 ; 00
-	db $07, JUMPTABLE_8D24B_FUNCTION_04, $00 ; 01
-	db $08, JUMPTABLE_8D24B_FUNCTION_05, $05 ; 02
-	db $0a, JUMPTABLE_8D24B_FUNCTION_06, $00 ; 03
-	db $0b, JUMPTABLE_8D24B_FUNCTION_07, $06 ; 04
-	db $0c, JUMPTABLE_8D24B_FUNCTION_08, $06 ; 05
-	db $0d, JUMPTABLE_8D24B_FUNCTION_09, $07 ; 06
-	db $0e, JUMPTABLE_8D24B_FUNCTION_0A, $07 ; 07
-	db $10, JUMPTABLE_8D24B_FUNCTION_0B, $07 ; 08
-	db $08, JUMPTABLE_8D24B_FUNCTION_0C, $05 ; 09
-	db $11, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 0a
-	db $12, JUMPTABLE_8D24B_FUNCTION_0D, $08 ; 0b
-	db $12, JUMPTABLE_8D24B_FUNCTION_0E, $08 ; 0c
-	db $12, JUMPTABLE_8D24B_FUNCTION_0F, $08 ; 0d
-	db $13, JUMPTABLE_8D24B_FUNCTION_10, $00 ; 0e
-	db $15, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 0f
-	db $16, JUMPTABLE_8D24B_FUNCTION_11, $00 ; 10
-	db $17, JUMPTABLE_8D24B_FUNCTION_12, $00 ; 11
-	db $18, JUMPTABLE_8D24B_FUNCTION_12, $00 ; 12
-	db $19, JUMPTABLE_8D24B_FUNCTION_13, $00 ; 13
-	db $1a, JUMPTABLE_8D24B_FUNCTION_14, $00 ; 14
-	db $1b, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 15
-	db $1d, JUMPTABLE_8D24B_FUNCTION_15, $00 ; 16
-	db $1e, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 17
-	db $1d, JUMPTABLE_8D24B_FUNCTION_17, $00 ; 18
-	db $1f, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 19
-	db $24, JUMPTABLE_8D24B_FUNCTION_19, $00 ; 1a
-	db $25, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 1b
-	db $20, JUMPTABLE_8D24B_FUNCTION_13, $00 ; 1c
-	db $26, JUMPTABLE_8D24B_FUNCTION_1A, $00 ; 1d
-	db $2d, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 1e
-	db $2e, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 1f
-	db $2f, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 20
-	db $30, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 21
-	db $31, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 22
-	db $32, JUMPTABLE_8D24B_FUNCTION_1B, $00 ; 23
-	db $33, JUMPTABLE_8D24B_FUNCTION_1C, $00 ; 24
-	db $34, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 25
-	db $35, JUMPTABLE_8D24B_FUNCTION_1D, $00 ; 26
-	db $37, JUMPTABLE_8D24B_FUNCTION_1E, $00 ; 27
-	db $38, JUMPTABLE_8D24B_FUNCTION_1E, $00 ; 28
-	db $39, JUMPTABLE_8D24B_FUNCTION_20, $00 ; 29
-	db $3f, JUMPTABLE_8D24B_FUNCTION_21, $00 ; 2a
-	db $3e, JUMPTABLE_8D24B_FUNCTION_22, $00 ; 2b
-	db $40, JUMPTABLE_8D24B_FUNCTION_00, $00 ; 2c
-; 8d24b
-
-
-Function8d24b: ; 8d24b
-	ld hl, $2 ; field 2, see the second column in the above table
-	add hl, bc
-	ld e, [hl]
-	ld d, 0
-	ld hl, .Jumptable
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 8d25b
-
-
-.Jumptable: ; 8d25b (23:525b)
-	dw .zero
-	dw .one
-	dw .two
-	dw .three
-	dw .four
-	dw .five
-	dw .six
-	dw .seven
-	dw .eight
-	dw .nine
-	dw .ten
-	dw .eleven
-	dw .twelve
-	dw .thirteen
-	dw .fourteen
-	dw .fifteen
-	dw .sixteen
-	dw .seventeen
-	dw .eighteen
-	dw .nineteen
-	dw .twenty
-	dw .twentyone
-	dw .twentytwo
-	dw .twentythree
-	dw .twentyfour
-	dw .twentyfive
-	dw .twentysix
-	dw .twentyseven
-	dw .twentyeight
-	dw .twentynine
-	dw .thirty
-	dw .thirtyone
-	dw .thirtytwo
-	dw .thirtythree
-	dw .thirtyfour
-
-
-.zero: ; 8d2a1 (23:52a1)
-	ret
-
-.one: ; 8d2a2 (23:52a2)
-	ld a, [MenuSelection2]
-	ld hl, 0
-	add hl, bc
-	cp [hl]
-	jr z, .two
-	ld hl, $4
-	add hl, bc
-	ld [hl], $10
-	ld hl, $7
-	add hl, bc
-	ld [hl], $0
-	ret
-
-.two: ; 8d2b9 (23:52b9)
-	ld hl, $4
-	add hl, bc
-	ld [hl], $18
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	ld d, a
-	inc [hl]
-	and $f
-	ret nz
-	ld hl, $d
-	add hl, bc
-	ld e, [hl]
-	ld hl, $7
-	add hl, bc
-	ld a, d
-	and $10 ; bit 4
-	jr z, .asm_8d2df
-	ld a, e
-	and a
-	jr z, .asm_8d2e6
-	cp $1
-	jr z, .asm_8d2e2
-.asm_8d2df
-	xor a
-	ld [hl], a
-	ret
-.asm_8d2e2
-	ld a, $ff
-	ld [hl], a
-	ret
-.asm_8d2e6
-	ld a, $fe
-	ld [hl], a
-	ret
-
-.three: ; 8d2ea (23:52ea)
-	ld a, [MenuSelection2]
-	ld hl, 0
-	add hl, bc
-	cp [hl]
-	jr z, .asm_8d2fb
-	ld hl, $4
-	add hl, bc
-	ld [hl], $10
-	ret
-.asm_8d2fb
-	ld hl, $4
-	add hl, bc
-	ld [hl], $18
-	ret
-
-.four: ; 8d302 (23:5302)
-	call .anonymous_jumptable
-	jp [hl]
-; 8d306 (23:5306)
-
-; Anonymous jumptable (see .anonymous_jumptable)
-	dw .four_zero
-	dw .four_one
-; 8d30a
-
-.four_zero: ; 8d30a
-	call Function8d6d8
-	ld hl, 0
-	add hl, bc
-	ld a, [hl]
-	ld hl, $d
-	add hl, bc
-	and $3
-	ld [hl], a
-	inc [hl]
-	swap a
-	ld hl, $c
-	add hl, bc
-	ld [hl], a
-
-.four_one: ; 8d321
-	ld hl, $4
-	add hl, bc
-	ld a, [hl]
-	cp $a4
-	jr nc, .asm_8d356
-	ld hl, $d
-	add hl, bc
-	add $4
-	ld hl, $4
-	add hl, bc
-	ld [hl], a
-	ld hl, $5
-	add hl, bc
-	inc [hl]
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	sla a
-	sla a
-	ld d, $2
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	add $3
-	ld [hl], a
-	call Function8d6de
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	ret
-
-.asm_8d356
-	call Function8d036
-	ret
-; 8d35a
-
-.twentyfive: ; 8d35a (23:535a)
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	inc a
-	ld [hl], a
-	ld d, $2
-	call Function8d6de
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	ret
-
-.five: ; 8d36c (23:536c)
-	callab Function11a3b
-	ret
-
-.twelve: ; 8d373 (23:5373)
-	callab Function120c1
-	ret
-
-.six: ; 8d37a (23:537a)
-	callab GameFreakLogoJumper
-	ret
-
-.seven: ; 8d381 (23:5381)
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	and a
-	jr z, .asm_8d3ba
-rept 2
-	dec [hl]
-endr
-	ld d, a
-	and $1f
-	jr nz, .asm_8d395
-	ld hl, $d
-	add hl, bc
-	dec [hl]
-.asm_8d395
-	ld hl, $b
-	add hl, bc
-	ld a, [hl]
-	push af
-	push de
-	call Function8d6de
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	pop de
-	pop af
-	call Function8d6e2
-	ld hl, $6
-	add hl, bc
-	ld [hl], a
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	ld hl, $b
-	add hl, bc
-	add [hl]
-	ld [hl], a
-	ret
-.asm_8d3ba
-	ld a, $1
-	ld [wcf64], a
-	call Function8d036
-	ret
-
-.eight: ; 8d3c3 (23:53c3)
-	ld hl, $c
-	add hl, bc
-	ld a, [hli]
-	or [hl]
-	jr z, .asm_8d41e
-	ld hl, $f
-	add hl, bc
-	ld d, [hl]
-	ld hl, $b
-	add hl, bc
-	ld a, [hl]
-	push af
-	push de
-	call Function8d6de
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	pop de
-	pop af
-	call Function8d6e2
-	ld hl, $6
-	add hl, bc
-	ld [hl], a
-	ld hl, $c
-	add hl, bc
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	ld hl, $e
-	add hl, bc
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	add hl, de
-	ld e, l
-	ld d, h
-	ld hl, $e
-	add hl, bc
-	ld [hl], e
-	inc hl
-	ld [hl], d
-	ld hl, $c
-	add hl, bc
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld de, $fff0
-	add hl, de
-	ld e, l
-	ld d, h
-	ld hl, $c
-	add hl, bc
-	ld [hl], e
-	inc hl
-	ld [hl], d
-	ld hl, $b
-	add hl, bc
-	ld a, [hl]
-	xor $20
-	ld [hl], a
-	ret
-.asm_8d41e
-	call Function8d036
-	ret
-
-.nine: ; 8d422 (23:5422)
-	callab Function9321d
-	ret
-
-.ten: ; 8d429 (23:5429)
-	callab Function932ac
-	ld hl, wcf64
-	ld a, [hl]
-	cp $2
-	ret nz
-	ld [hl], $3
-	ld a, $f
-	call Function8d120
-	ret
-
-.eleven: ; 8d43e (23:543e)
-	ld hl, $b
-	add hl, bc
-	ld a, [hl]
-	dec [hl]
-	ld e, a
-	and $1
-	jr z, .asm_8d462
-	ld hl, $4
-	add hl, bc
-	ld a, [hl]
-	cp $78
-	jr c, .asm_8d461
-	call Function8d036
-	ld a, $4
-	ld [wcf64], a
-	ld de, SFX_PLACE_PUZZLE_PIECE_DOWN
-	call PlaySFX
-	ret
-.asm_8d461
-	inc [hl]
-.asm_8d462
-	ld a, e
-	ld d, $20
-	call Function8d6de
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	ret
-
-.thirteen: ; 8d46e (23:546e)
-	callab Functione00ed
-	ret
-
-.fifteen: ; 8d475 (23:5475)
-	callab Function90d41
-	ret
-
-.fourteen: ; 8d47c (23:547c)
-	callab Functione21a1
-	ret
-
-.sixteen: ; 8d483 (23:5483)
-	call .anonymous_jumptable
-	jp [hl]
-; 8d487 (23:5487)
-
-; Anonymous jumptable (see .anonymous_jumptable)
-	dw .sixteen_zero
-	dw .sixteen_one
-	dw .sixteen_two
-	dw .sixteen_three
-	dw .sixteen_four
-	dw .sixteen_five
-; 8d493
-
-.sixteen_zero: ; 8d493
-	ld a, $14
-	call Function8d120
-	ld hl, $b
-	add hl, bc
-	ld [hl], $2
-	ld hl, $c
-	add hl, bc
-	ld [hl], $20
-	ret
-; 8d4a5
-
-.sixteen_two: ; 8d4a5
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	and a
-	jr z, .asm_8d4af
-	dec [hl]
-	ret
-
-.asm_8d4af
-	call Function8d6d8
-	ld hl, $c
-	add hl, bc
-	ld [hl], $40
-
-.sixteen_three: ; 8d4b8
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	cp $30
-	jr c, .asm_8d4cd
-	dec [hl]
-	ld d, $28
-	call Function8d6de
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	ret
-
-.asm_8d4cd
-	ld de, SFX_GOT_SAFARI_BALLS
-	call PlaySFX
-	jr .sixteen_five
-; 8d4d5
-
-.sixteen_one: ; 8d4d5
-	ld hl, $b
-	add hl, bc
-	ld [hl], $4
-	ld hl, $c
-	add hl, bc
-	ld [hl], $30
-	ld hl, $d
-	add hl, bc
-	ld [hl], $24
-	ret
-; 8d4e8
-
-.sixteen_four: ; 8d4e8
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	and a
-	jr z, .asm_8d51c
-	ld d, a
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	call Function8e72c
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	ld hl, $c
-	add hl, bc
-	inc [hl]
-	ld a, [hl]
-	and $3f
-	ret nz
-	ld hl, $c
-	add hl, bc
-	ld [hl], $20
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	sub $c
-	ld [hl], a
-	ld de, SFX_SWITCH_POKEMON
-	call PlaySFX
-	ret
-
-.asm_8d51c
-	xor a
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	call Function8d6d8
-	ret
-
-.sixteen_five: ; 8d526
-	call Function8d036
-	ret
-; 8d52a
-
-.seventeen: ; 8d52a (23:552a)
-	ld hl, $4
-	add hl, bc
-	ld a, [hl]
-rept 2
-	inc [hl]
-endr
-	cp $b0
-	jr nc, .asm_8d53f
-	and $3
-	ret nz
-	ld de, SFX_POKEBALLS_PLACED_ON_TABLE
-	call PlaySFX
-	ret
-.asm_8d53f
-	call Function8d036
-	ret
-
-.eighteen: ; 8d543 (23:5543)
-	callab Function29676
-	ret
-
-.nineteen: ; 8d54a (23:554a)
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	cp $80
-	jr nc, .asm_8d574
-	ld d, a
-	add $8
-	ld [hl], a
-	ld hl, $b
-	add hl, bc
-	ld a, [hl]
-	xor $20
-	ld [hl], a
-	push af
-	push de
-	call Function8d6de
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	pop de
-	pop af
-	call Function8d6e2
-	ld hl, $6
-	add hl, bc
-	ld [hl], a
-	ret
-.asm_8d574
-	call Function8d036
-	ret
-
-.twenty: ; 8d578 (23:5578)
-	callab Function91640
-	ret
-
-.twentyone: ; 8d57f (23:557f)
-	ld hl, $d
-	add hl, bc
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	ld hl, $80
-	add hl, de
-	ld e, l
-	ld d, h
-	ld hl, $d
-	add hl, bc
-	ld [hl], e
-	inc hl
-	ld [hl], d
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-rept 3
-	inc [hl]
-endr
-	push af
-	push de
-	call Function8d6de
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	pop de
-	pop af
-	call Function8d6e2
-	ld hl, $6
-	add hl, bc
-	ld [hl], a
-	ret
-
-.twentytwo: ; 8d5b0 (23:55b0)
-	ld hl, $5
-	add hl, bc
-	ld a, [hl]
-	and a
-	ret z
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	inc [hl]
-	cp $40
-	ret c
-	ld hl, $5
-	add hl, bc
-rept 2
-	dec [hl]
-endr
-	ld hl, $f
-	add hl, bc
-	ld a, [hl]
-	ld d, a
-	cp $40
-	jr nc, .asm_8d5d3
-	add $8
-	ld [hl], a
-.asm_8d5d3
-	ld hl, $e
-	add hl, bc
-	ld a, [hl]
-	inc [hl]
-	call Function8d6e2
-	ld hl, $6
-	add hl, bc
-	ld [hl], a
-	ret
-
-.twentythree: ; 8d5e2 (23:55e2)
-	ld hl, $4
-	add hl, bc
-	ld a, [hl]
-	cp $b8
-	jr nc, .asm_8d603
-rept 2
-	inc [hl]
-endr
-	ld hl, $5
-	add hl, bc
-	dec [hl]
-	ld d, $40
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	inc [hl]
-	call Function8d6e2
-	ld hl, $6
-	add hl, bc
-	ld [hl], a
-	ret
-.asm_8d603
-	call Function8d036
-	ret
-
-.twentyfour: ; 8d607 (23:5607)
-	ld hl, $5
-	add hl, bc
-	ld a, [hl]
-	cp $54
-	ret z
-	ld hl, $5
-	add hl, bc
-rept 2
-	inc [hl]
-endr
-	ld hl, $f
-	add hl, bc
-	ld a, [hl]
-	ld d, a
-	and a
-	jr z, .asm_8d621
-	sub $2
-	ld [hl], a
-.asm_8d621
-	ld hl, $e
-	add hl, bc
-	ld a, [hl]
-	inc [hl]
-	call Function8d6e2
-	ld hl, $6
-	add hl, bc
-	ld [hl], a
-	ret
-
-.twentyseven: ; 8d630 (23:5630)
-	callba Function108bc7
-	ret
-
-.twentyeight: ; 8d637 (23:5637)
-	callba Function108be0
-	ret
-
-.twentynine: ; 8d63e (23:563e)
-	ld a, [wcf65]
-	and a
-	jr nz, .asm_8d645
-	ret
-.asm_8d645
-	ld hl, $7
-	add hl, bc
-	ld [hl], $0
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	add $2
-	ld [hl], a
-	xor $ff
-	inc a
-	ld d, $20
-	call Function8d6de
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	ld a, $36
-	call Function8d120
-	ret
-
-.thirty: ; 8d666 (23:5666)
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	cp $14
-	jr nc, .asm_8d67f
-	add $2
-	ld [hl], a
-	xor $ff
-	inc a
-	ld d, $20
-	call Function8d6de
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-.asm_8d67f
-	ret
-
-.thirtytwo: ; 8d680 (23:5680)
-	ld hl, $b
-	add hl, bc
-	ld d, [hl]
-rept 3
-	inc [hl]
-endr
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	push af
-	push de
-	call Function8d6de
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	pop de
-	pop af
-	call Function8d6e2
-	ld hl, $6
-	add hl, bc
-	ld [hl], a
-	ret
-
-.thirtythree: ; 8d6a2 (23:56a2)
-	ld a, [wcf64]
-	cp $40
-	ret nz
-	ld a, $3d
-	call Function8d120
-	ret
-
-.thirtyfour: ; 8d6ae (23:56ae)
-	ld hl, $5
-	add hl, bc
-	ld a, [hl]
-	add $10
-	ld [hl], a
-	ret
-
-.twentysix: ; 8d6b7 (23:56b7)
-	callba Function11d0b6
-	ret
-
-.thirtyone: ; 8d6be (23:56be)
-	callba Function49aa2
-	ret
-
-.anonymous_jumptable: ; 8d6c5 (23:56c5)
-	ld hl, [sp+$0]
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	inc de
-	ld hl, $b
-	add hl, bc
-	ld l, [hl]
-	ld h, $0
-	add hl, hl
-	add hl, de
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ret
-; 8d6d8 (23:56d8)
-
-Function8d6d8: ; 8d6d8
-	ld hl, $b
-	add hl, bc
-	inc [hl]
-	ret
-; 8d6de
-
-Function8d6de: ; 8d6de (23:56de)
-	call Function8e72c
-	ret
-
-Function8d6e2: ; 8d6e2 (23:56e2)
-	call Function8e72a
-	ret
-; 8d6e6 (23:56e6)
-
-Unknown_8d6e6: ; 8d6e6
-	dw Unknown_8d76a
-	dw Unknown_8d76d
-	dw Unknown_8d772
-	dw Unknown_8d777
-	dw Unknown_8d77c
-	dw Unknown_8d781
-	dw Unknown_8d786
-	dw Unknown_8d7a6
-	dw Unknown_8d7ab
-	dw Unknown_8d7b0
-	dw Unknown_8d7b5
-	dw Unknown_8d7d4
-	dw Unknown_8d7d9
-	dw Unknown_8d7e2
-	dw Unknown_8d7eb
-	dw Unknown_8d7f4
-	dw Unknown_8d7ff
-	dw Unknown_8d78b
-	dw Unknown_8d802
-	dw Unknown_8d805
-	dw Unknown_8d808
-	dw Unknown_8d811
-	dw Unknown_8d818
-	dw Unknown_8d81d
-	dw Unknown_8d822
-	dw Unknown_8d825
-	dw Unknown_8d82c
-	dw Unknown_8d82f
-	dw Unknown_8d861
-	dw Unknown_8d864
-	dw Unknown_8d867
-	dw Unknown_8d874
-	dw Unknown_8d877
-	dw Unknown_8d87a
-	dw Unknown_8d87d
-	dw Unknown_8d880
-	dw Unknown_8d883
-	dw Unknown_8d890
-	dw Unknown_8d899
-	dw Unknown_8d89c
-	dw Unknown_8d89f
-	dw Unknown_8d8a2
-	dw Unknown_8d8a5
-	dw Unknown_8d8a8
-	dw Unknown_8d8ab
-	dw Unknown_8d794
-	dw Unknown_8d79d
-	dw Unknown_8d8ae
-	dw Unknown_8d8cd
-	dw Unknown_8d8ec
-	dw Unknown_8d8f1
-	dw Unknown_8d8f4
-	dw Unknown_8d8f7
-	dw Unknown_8d8fe
-	dw Unknown_8d907
-	dw Unknown_8d90c
-	dw Unknown_8d913
-	dw Unknown_8d916
-	dw Unknown_8d91d
-	dw Unknown_8d924
-	dw Unknown_8d92b
-	dw Unknown_8d932
-	dw Unknown_8d93d
-	dw Unknown_8d940
-	dw Unknown_8d943
-	dw Unknown_8d948
-; 8d76a
-
-Unknown_8d76a: 	dw $2000
-                db -1
-Unknown_8d76d: 	dw $0800, $0801
-                db -2
-Unknown_8d772: 	dw $083d, $083e
-                db -2
-Unknown_8d777: 	dw $083f, $0840
-                db -2
-Unknown_8d77c: 	dw $0400, $0401
-                db -2
-Unknown_8d781: 	dw $043d, $043e
-                db -2
-Unknown_8d786: 	dw $043f, $0440
-                db -2
-Unknown_8d78b: 	dw $0800, $0801, $0800, $4801
-                db -2
-Unknown_8d794: 	dw $0863, $0864, $0863, $4864
-                db -2
-Unknown_8d79d: 	dw $0865, $0866, $0865, $4866
-                db -2
-Unknown_8d7a6: 	dw $011e, $011f
-                db -2
-Unknown_8d7ab: 	dw $0120, $01fd
-                db -2
-Unknown_8d7b0: 	dw $0121, $01fd
-                db -2
-Unknown_8d7b5: 	dw $0c81, $0182, $0183, $0482, $0c81, $0c82, $0483, $2084, $0385, $0386, $0487, $0488, $0489, $0a8a, $078b
-                db -1
-Unknown_8d7d4: 	dw $0323, $8323
-                db -2
-Unknown_8d7d9: 	dw $0224, $0225, $0226, $0225
-                db -2
-Unknown_8d7e2: 	dw $0727, $0728, $8727, $4728
-                db -2
-Unknown_8d7eb: 	dw $0729, $072a, $0729, $072b
-                db -2
-Unknown_8d7f4: 	dw $0729, $072c, $072d, $072c, $0729
-                db -1
-Unknown_8d7ff: 	dw $142e
-                db -1
-Unknown_8d802: 	dw $202f
-                db -1
-Unknown_8d805: 	dw $2030
-                db -1
-Unknown_8d808: 	dw $0330, $0331, $0330, $4331
-                db -2
-Unknown_8d811: 	dw $0432, $0433, $0434
-                db -4
-Unknown_8d818: 	dw $0335, $0336
-                db -2
-Unknown_8d81d: 	dw $0737, $0738
-                db -2
-Unknown_8d822: 	dw $2039
-                db -1
-Unknown_8d825: 	dw $023b, $023a, $023b
-                db -1
-Unknown_8d82c: 	dw $203c
-                db -1
-Unknown_8d82f: 	dw $0841, $0842, $0841, $4842
-                db -2
-                dw $0843, $0844
-                db -2
-                dw $0845, $0846
-                db -2
-                dw $0847, $0848
-                db -2
-                dw $0149, $4149, $c149, $8149
-                db -2
-                dw $204a
-                db -1
-                dw $204b
-                db -1
-                dw $204c
-                db -1
-                dw $204d
-                db -1
-                dw $034e, $03fd
-                db -2
-Unknown_8d861: 	dw $20fd
-                db -1
-Unknown_8d864: 	dw $204f
-                db -1
-Unknown_8d867: 	dw $0250, $1051, $01fd, $0152, $01fd, $0153
-                db -4
-Unknown_8d874: 	dw $2054
-                db -1
-Unknown_8d877: 	dw $2055
-                db -1
-Unknown_8d87a: 	dw $6055
-                db -1
-Unknown_8d87d: 	dw $a055
-                db -1
-Unknown_8d880: 	dw $e055
-                db -1
-Unknown_8d883: 	dw $0a56, $0957, $0a58, $0a59, $0958, $0a5a
-                db -2
-Unknown_8d890: 	dw $0250, $025b, $0250, $425b
-                db -2
-Unknown_8d899: 	dw $025c
-                db -1
-Unknown_8d89c: 	dw $025d
-                db -1
-Unknown_8d89f: 	dw $025e
-                db -1
-Unknown_8d8a2: 	dw $025f
-                db -1
-Unknown_8d8a5: 	dw $0260
-                db -1
-Unknown_8d8a8: 	dw $0261
-                db -1
-Unknown_8d8ab: 	dw $0262
-                db -1
-Unknown_8d8ae: 	dw $0332, $0333, $0334, $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331
-                db -1
-Unknown_8d8cd: 	dw $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331, $0330, $0331, $0330, $4331, $0332, $0333, $0334
-                db -4
-Unknown_8d8ec: 	dw $0367, $0368
-                db -2
-Unknown_8d8f1: 	dw $036c
-                db -1
-Unknown_8d8f4: 	dw $036d
-                db -1
-Unknown_8d8f7: 	dw $0269, $026a, $026b
-                db -4
-Unknown_8d8fe: 	dw $036e, $036f, $0370, $0371
-                db -2
-Unknown_8d907: 	dw $0371, $076e
-                db -1
-Unknown_8d90c: 	dw $2072, $0773, $0774
-                db -1
-Unknown_8d913: 	dw $0375
-                db -1
-Unknown_8d916: 	dw $0376, $0377, $0778
-                db -4
-Unknown_8d91d: 	dw $4376, $4377, $4778
-                db -4
-Unknown_8d924: 	dw $8376, $8377, $8778
-                db -4
-Unknown_8d92b: 	dw $c376, $c377, $c778
-                db -4
-Unknown_8d932: 	dw $0379, $037a, $037b, $077c, $077d
-                db -1
-Unknown_8d93d: 	dw $037e
-                db -1
-Unknown_8d940: 	dw $00fd
-                db -1
-Unknown_8d943: 	dw $087f, $0880
-                db -1
-Unknown_8d948: 	dw $487f, $4880
-                db -1
-; 8d94d
-
-Unknown_8d94d: ; 8d94d
-	dbw $00, Unknown_8dd8a
-	dbw $04, Unknown_8dd8a
-	dbw $4c, Unknown_8daf1
-	dbw $5c, Unknown_8daf1
-	dbw $6c, Unknown_8daf6
-	dbw $6e, Unknown_8daf6
-	dbw $2d, Unknown_8ddf0
-	dbw $4d, Unknown_8ddf0
-	dbw $60, Unknown_8de09
-	dbw $00, Unknown_8de09
-	dbw $00, Unknown_8de09
-	dbw $06, Unknown_8de09
-	dbw $0c, Unknown_8de7e
-	dbw $0d, Unknown_8daf1
-	dbw $00, Unknown_8dc53
-	dbw $04, Unknown_8dc53
-	dbw $08, Unknown_8dc53
-	dbw $40, Unknown_8dc53
-	dbw $44, Unknown_8dc53
-	dbw $48, Unknown_8dc53
-	dbw $4c, Unknown_8dc53
-	dbw $80, Unknown_8de87
-	dbw $85, Unknown_8de87
-	dbw $8a, Unknown_8de87
-	dbw $00, Unknown_8db29
-	dbw $01, Unknown_8db5c
-	dbw $09, Unknown_8db9d
-	dbw $10, Unknown_8dc94
-	dbw $29, Unknown_8dc94
-	dbw $42, Unknown_8dc94
-	dbw $f8, Unknown_8e17e
-	dbw $fa, Unknown_8e17e
-	dbw $00, Unknown_8deb2
-	dbw $00, Unknown_8dec3
-	dbw $00, Unknown_8deec
-	dbw $0f, Unknown_8db07
-	dbw $11, Unknown_8daf1
-	dbw $12, Unknown_8daf1
-	dbw $13, Unknown_8daf1
-	dbw $00, Unknown_8df29
-	dbw $08, Unknown_8df29
-	dbw $10, Unknown_8df42
-	dbw $10, Unknown_8df5b
-	dbw $10, Unknown_8df74
-	dbw $10, Unknown_8df8d
-	dbw $10, Unknown_8dfa6
-	dbw $3a, Unknown_8daf1
-	dbw $00, Unknown_8dd8a
-	dbw $00, Unknown_8db18
-	dbw $02, Unknown_8dd9b
-	dbw $06, Unknown_8db5c
-	dbw $0a, Unknown_8db5c
-	dbw $0e, Unknown_8db5c
-	dbw $12, Unknown_8db3a
-	dbw $13, Unknown_8db3a
-	dbw $00, Unknown_8dd8a
-	dbw $04, Unknown_8dd8a
-	dbw $10, Unknown_8db5c
-	dbw $00, Unknown_8dd9b
-	dbw $04, Unknown_8daf1
-	dbw $00, Unknown_8dfbf
-	dbw $00, Unknown_8ddac
-	dbw $00, Unknown_8ddbd
-	dbw $00, Unknown_8ddce
-	dbw $00, Unknown_8dddf
-	dbw $00, Unknown_8dd9b
-	dbw $04, Unknown_8dd9b
-	dbw $00, Unknown_8dc2e
-	dbw $30, Unknown_8dc2e
-	dbw $03, Unknown_8dc2e
-	dbw $33, Unknown_8dc2e
-	dbw $06, Unknown_8dc2e
-	dbw $36, Unknown_8dc2e
-	dbw $09, Unknown_8dc2e
-	dbw $39, Unknown_8dc2e
-	dbw $0c, Unknown_8dfcc
-	dbw $0c, Unknown_8dfe5
-	dbw $3c, Unknown_8daf1
-	dbw $3e, Unknown_8daf1
-	dbw $00, Unknown_8de9c
-	dbw $00, Unknown_8dea1
-	dbw $00, Unknown_8dff6
-	dbw $00, Unknown_8e007
-	dbw $00, Unknown_8e018
-	dbw $00, Unknown_8daf1
-	dbw $01, Unknown_8daf1
-	dbw $00, Unknown_8e029
-	dbw $00, Unknown_8e076
-	dbw $00, Unknown_8e0b7
-	dbw $00, Unknown_8e0f4
-	dbw $00, Unknown_8e139
-	dbw $04, Unknown_8dea1
-	dbw $00, Unknown_8e183
-	dbw $00, Unknown_8e1b4
-	dbw $00, Unknown_8e1b9
-	dbw $00, Unknown_8e1ca
-	dbw $00, Unknown_8e1eb
-	dbw $00, Unknown_8e1f0
-	dbw $00, Unknown_8e1f9
-	dbw $00, Unknown_8e202
-	dbw $04, Unknown_8e202
-	dbw $00, Unknown_8e213
-	dbw $04, Unknown_8e213
-	dbw $20, Unknown_8e224
-	dbw $21, Unknown_8e224
-	dbw $22, Unknown_8e24b
-	dbw $23, Unknown_8e25c
-	dbw $27, Unknown_8e27d
-	dbw $2a, Unknown_8e229
-	dbw $2a, Unknown_8e23a
-	dbw $00, Unknown_8e2ae
-	dbw $08, Unknown_8e33f
-	dbw $60, Unknown_8e3b0
-	dbw $68, Unknown_8e429
-	dbw $00, Unknown_8e4a6
-	dbw $05, Unknown_8e4a6
-	dbw $0a, Unknown_8e4a6
-	dbw $50, Unknown_8e50b
-	dbw $00, Unknown_8e54c
-	dbw $01, Unknown_8e551
-	dbw $04, Unknown_8e55e
-	dbw $00, Unknown_8db29
-	dbw $01, Unknown_8e57b
-	dbw $03, Unknown_8e59c
-	dbw $08, Unknown_8e5cd
-	dbw $1c, Unknown_8e5cd
-	dbw $80, Unknown_8e61e
-	dbw $00, Unknown_8e66f
-	dbw $04, Unknown_8e66f
-	dbw $d0, Unknown_8e680
-	dbw $d3, Unknown_8e680
-	dbw $d6, Unknown_8e680
-	dbw $6c, Unknown_8e6a5
-	dbw $68, Unknown_8e6a5
-	dbw $64, Unknown_8e6a5
-	dbw $60, Unknown_8e6a5
-	dbw $0c, Unknown_8e6a5
-	dbw $08, Unknown_8e6a5
-	dbw $04, Unknown_8e6a5
-	dbw $00, Unknown_8e6a5
-; 8daf1
-
-
-Unknown_8daf1: ; 8daf1
-	db 1
-	db $fc, $fc, $00, $00
-; 8daf6
-
-Unknown_8daf6: ; 8daf6
-	db 4
-	db $f8, $f8, $00, $00
-	db $f8, $00, $01, $00
-	db $00, $f8, $10, $00
-	db $00, $00, $11, $00
-; 8db07
-
-Unknown_8db07: ; 8db07
-	db 4
-	db $f8, $f8, $00, $00
-	db $f8, $00, $00, $20
-	db $00, $f8, $01, $00
-	db $00, $00, $01, $20
-; 8db18
-
-Unknown_8db18: ; 8db18
-	db 4
-	db $f8, $f8, $00, $80
-	db $f8, $00, $00, $a0
-	db $00, $f8, $01, $80
-	db $00, $00, $01, $a0
-; 8db29
-
-Unknown_8db29: ; 8db29
-	db 4
-	db $f8, $f8, $00, $00
-	db $f8, $00, $00, $20
-	db $00, $f8, $00, $40
-	db $00, $00, $00, $60
-; 8db3a
-
-Unknown_8db3a: ; 8db3a
-	db 4
-	db $f8, $f8, $00, $07
-	db $f8, $00, $00, $27
-	db $00, $f8, $00, $47
-	db $00, $00, $00, $67
-; 8db4b
-
-; 8db4b
-	db 4
-	db $f8, $f8, $00, $80
-	db $f8, $00, $00, $a0
-	db $00, $f8, $00, $c0
-	db $00, $00, $00, $e0
-; 8db5c
-
-Unknown_8db5c: ; 8db5c
-	db 16
-	db $f0, $f0, $00, $00
-	db $f0, $f8, $01, $00
-	db $f8, $f0, $02, $00
-	db $f8, $f8, $03, $00
-	db $f0, $00, $01, $20
-	db $f0, $08, $00, $20
-	db $f8, $00, $03, $20
-	db $f8, $08, $02, $20
-	db $00, $f0, $02, $40
-	db $00, $f8, $03, $40
-	db $08, $f0, $00, $40
-	db $08, $f8, $01, $40
-	db $00, $00, $03, $60
-	db $00, $08, $02, $60
-	db $08, $00, $01, $60
-	db $08, $08, $00, $60
-; 8db9d
-
-Unknown_8db9d: ; 8db9d
-	db 36
-	db $e8, $e8, $00, $00
-	db $e8, $f0, $01, $00
-	db $e8, $f8, $02, $00
-	db $f0, $e8, $03, $00
-	db $f0, $f0, $04, $00
-	db $f0, $f8, $05, $00
-	db $f8, $e8, $06, $00
-	db $f8, $f0, $05, $00
-	db $f8, $f8, $05, $00
-	db $e8, $00, $02, $20
-	db $e8, $08, $01, $20
-	db $e8, $10, $00, $20
-	db $f0, $00, $05, $20
-	db $f0, $08, $04, $20
-	db $f0, $10, $03, $20
-	db $f8, $00, $05, $20
-	db $f8, $08, $05, $20
-	db $f8, $10, $06, $20
-	db $00, $e8, $06, $40
-	db $00, $f0, $05, $40
-	db $00, $f8, $05, $40
-	db $08, $e8, $03, $40
-	db $08, $f0, $04, $40
-	db $08, $f8, $05, $40
-	db $10, $e8, $00, $40
-	db $10, $f0, $01, $40
-	db $10, $f8, $02, $40
-	db $00, $00, $05, $60
-	db $00, $08, $05, $60
-	db $00, $10, $06, $60
-	db $08, $00, $05, $60
-	db $08, $08, $04, $60
-	db $08, $10, $03, $60
-	db $10, $00, $02, $60
-	db $10, $08, $01, $60
-	db $10, $10, $00, $60
-; 8dc2e
-
-Unknown_8dc2e: ; 8dc2e
-	db 9
-	db $f4, $f4, $00, $00
-	db $f4, $fc, $01, $00
-	db $f4, $04, $02, $00
-	db $fc, $f4, $10, $00
-	db $fc, $fc, $11, $00
-	db $fc, $04, $12, $00
-	db $04, $f4, $20, $00
-	db $04, $fc, $21, $00
-	db $04, $04, $22, $00
-; 8dc53
-
-Unknown_8dc53: ; 8dc53
-	db 16
-	db $f0, $f0, $00, $00
-	db $f0, $f8, $01, $00
-	db $f0, $00, $02, $00
-	db $f0, $08, $03, $00
-	db $f8, $f0, $10, $00
-	db $f8, $f8, $11, $00
-	db $f8, $00, $12, $00
-	db $f8, $08, $13, $00
-	db $00, $f0, $20, $00
-	db $00, $f8, $21, $00
-	db $00, $00, $22, $00
-	db $00, $08, $23, $00
-	db $08, $f0, $30, $00
-	db $08, $f8, $31, $00
-	db $08, $00, $32, $00
-	db $08, $08, $33, $00
-; 8dc94
-
-Unknown_8dc94: ; 8dc94
-	db 25
-	db $ec, $ec, $00, $00
-	db $f4, $ec, $01, $00
-	db $fc, $ec, $02, $00
-	db $04, $ec, $03, $00
-	db $0c, $ec, $04, $00
-	db $ec, $f4, $05, $00
-	db $f4, $f4, $06, $00
-	db $fc, $f4, $07, $00
-	db $04, $f4, $08, $00
-	db $0c, $f4, $09, $00
-	db $ec, $fc, $0a, $00
-	db $f4, $fc, $0b, $00
-	db $fc, $fc, $0c, $00
-	db $04, $fc, $0d, $00
-	db $0c, $fc, $0e, $00
-	db $ec, $04, $0f, $00
-	db $f4, $04, $10, $00
-	db $fc, $04, $11, $00
-	db $04, $04, $12, $00
-	db $0c, $04, $13, $00
-	db $ec, $0c, $14, $00
-	db $f4, $0c, $15, $00
-	db $fc, $0c, $16, $00
-	db $04, $0c, $17, $00
-	db $0c, $0c, $18, $00
-; 8dcf9
-
-; 8dcf9
-	db 36
-	db $e8, $e8, $00, $00
-	db $e8, $f0, $01, $00
-	db $e8, $f8, $02, $00
-	db $e8, $00, $03, $00
-	db $e8, $08, $04, $00
-	db $e8, $10, $05, $00
-	db $f0, $e8, $06, $00
-	db $f0, $f0, $07, $00
-	db $f0, $f8, $08, $00
-	db $f0, $00, $09, $00
-	db $f0, $08, $0a, $00
-	db $f0, $10, $0b, $00
-	db $f8, $e8, $0c, $00
-	db $f8, $f0, $0d, $00
-	db $f8, $f8, $0e, $00
-	db $f8, $00, $0f, $00
-	db $f8, $08, $10, $00
-	db $f8, $10, $11, $00
-	db $00, $e8, $12, $00
-	db $00, $f0, $13, $00
-	db $00, $f8, $14, $00
-	db $00, $00, $15, $00
-	db $00, $08, $16, $00
-	db $00, $10, $17, $00
-	db $08, $e8, $18, $00
-	db $08, $f0, $19, $00
-	db $08, $f8, $1a, $00
-	db $08, $00, $1b, $00
-	db $08, $08, $1c, $00
-	db $08, $10, $1d, $00
-	db $10, $e8, $1e, $00
-	db $10, $f0, $1f, $00
-	db $10, $f8, $20, $00
-	db $10, $00, $21, $00
-	db $10, $08, $22, $00
-	db $10, $10, $23, $00
-; 8dd8a
-
-Unknown_8dd8a: ; 8dd8a
-	db 4
-	db $f8, $f8, $00, $00
-	db $f8, $00, $01, $00
-	db $00, $f8, $02, $00
-	db $00, $00, $03, $00
-; 8dd9b
-
-Unknown_8dd9b: ; 8dd9b
-	db 4
-	db $f8, $f8, $00, $80
-	db $f8, $00, $01, $80
-	db $00, $f8, $02, $80
-	db $00, $00, $03, $80
-; 8ddac
-
-Unknown_8ddac: ; 8ddac
-	db 4
-	db $f8, $f8, $00, $00
-	db $f8, $00, $01, $00
-	db $00, $f8, $08, $00
-	db $00, $00, $03, $00
-; 8ddbd
-
-Unknown_8ddbd: ; 8ddbd
-	db 4
-	db $f8, $f8, $04, $00
-	db $f8, $00, $05, $00
-	db $00, $f8, $08, $00
-	db $00, $00, $07, $00
-; 8ddce
-
-Unknown_8ddce: ; 8ddce
-	db 4
-	db $f8, $f8, $00, $00
-	db $f8, $00, $01, $00
-	db $00, $f8, $09, $00
-	db $00, $00, $03, $00
-; 8dddf
-
-Unknown_8dddf: ; 8dddf
-	db 4
-	db $f8, $f8, $04, $00
-	db $f8, $00, $05, $00
-	db $00, $f8, $09, $00
-	db $00, $00, $07, $00
-; 8ddf0
-
-Unknown_8ddf0: ; 8ddf0
-	db 6
-	db $f8, $f4, $00, $01
-	db $f8, $fc, $01, $01
-	db $f8, $04, $02, $01
-	db $00, $f4, $10, $01
-	db $00, $fc, $11, $01
-	db $00, $04, $12, $01
-; 8de09
-
-Unknown_8de09: ; 8de09
-	db 29
-	db $e8, $e8, $00, $00
-	db $e8, $f0, $01, $00
-	db $e8, $f8, $02, $00
-	db $e8, $00, $03, $00
-	db $f0, $e8, $10, $00
-	db $f0, $f0, $11, $00
-	db $f0, $f8, $12, $00
-	db $f0, $00, $13, $00
-	db $f8, $e8, $20, $00
-	db $f8, $f0, $21, $00
-	db $f8, $f8, $22, $00
-	db $f8, $00, $23, $00
-	db $f8, $08, $24, $00
-	db $00, $e8, $30, $80
-	db $00, $f0, $31, $80
-	db $00, $f8, $32, $80
-	db $00, $00, $33, $80
-	db $00, $08, $34, $80
-	db $08, $e8, $40, $80
-	db $08, $f0, $41, $80
-	db $08, $f8, $42, $80
-	db $08, $00, $43, $80
-	db $08, $08, $44, $80
-	db $08, $10, $45, $80
-	db $10, $f0, $51, $80
-	db $10, $f8, $52, $80
-	db $10, $00, $53, $80
-	db $10, $08, $54, $80
-	db $10, $10, $55, $80
-; 8de7e
-
-Unknown_8de7e: ; 8de7e
-	db 2
-	db $f8, $fc, $00, $00
-	db $00, $fc, $10, $00
-; 8de87
-
-Unknown_8de87: ; 8de87
-	db 5
-	db $f0, $18, $00, $00
-	db $f0, $20, $01, $00
-	db $f8, $10, $02, $00
-	db $f8, $18, $03, $00
-	db $00, $10, $04, $00
-; 8de9c
-
-Unknown_8de9c: ; 8de9c
-	db 1
-	db $fc, $fc, $00, $06
-; 8dea1
-
-Unknown_8dea1: ; 8dea1
-	db 4
-	db $f8, $f8, $00, $06
-	db $f8, $00, $01, $06
-	db $00, $f8, $02, $06
-	db $00, $00, $03, $06
-; 8deb2
-
-Unknown_8deb2: ; 8deb2
-	db 4
-	db $ff, $ff, $00, $00
-	db $ff, $00, $00, $20
-	db $00, $ff, $00, $40
-	db $00, $00, $00, $60
-; 8dec3
-
-Unknown_8dec3: ; 8dec3
-	db 10
-	db $ff, $00, $00, $00
-	db $ff, $08, $01, $00
-	db $ff, $10, $01, $00
-	db $ff, $18, $01, $00
-	db $ff, $20, $00, $20
-	db $00, $00, $00, $40
-	db $00, $08, $01, $40
-	db $00, $10, $01, $40
-	db $00, $18, $01, $40
-	db $00, $20, $00, $60
-; 8deec
-
-Unknown_8deec: ; 8deec
-	db 15
-	db $ec, $f4, $00, $11
-	db $ec, $fc, $01, $11
-	db $ec, $04, $02, $11
-	db $f4, $f4, $03, $11
-	db $f4, $fc, $04, $11
-	db $f4, $04, $05, $11
-	db $fc, $f4, $06, $11
-	db $fc, $fc, $07, $11
-	db $fc, $04, $08, $11
-	db $04, $f4, $09, $11
-	db $04, $fc, $0a, $11
-	db $04, $04, $0b, $11
-	db $0c, $f4, $0c, $11
-	db $0c, $fc, $0d, $11
-	db $0c, $04, $0e, $11
-; 8df29
-
-Unknown_8df29: ; 8df29
-	db 6
-	db $f4, $f4, $00, $15
-	db $f4, $fc, $02, $15
-	db $f4, $04, $00, $35
-	db $04, $f4, $04, $15
-	db $04, $fc, $06, $15
-	db $04, $04, $04, $35
-; 8df42
-
-Unknown_8df42: ; 8df42
-	db 6
-	db $f4, $f4, $00, $16
-	db $f4, $fc, $02, $16
-	db $f4, $04, $04, $16
-	db $04, $f4, $06, $16
-	db $04, $fc, $08, $16
-	db $04, $04, $0a, $16
-; 8df5b
-
-Unknown_8df5b: ; 8df5b
-	db 6
-	db $f4, $f4, $00, $16
-	db $f4, $fc, $02, $16
-	db $f4, $04, $04, $16
-	db $04, $f4, $0c, $16
-	db $04, $fc, $0e, $16
-	db $04, $04, $10, $16
-; 8df74
-
-Unknown_8df74: ; 8df74
-	db 6
-	db $f4, $f4, $00, $16
-	db $f4, $fc, $02, $16
-	db $f4, $04, $04, $16
-	db $04, $f4, $12, $16
-	db $04, $fc, $14, $16
-	db $04, $04, $16, $16
-; 8df8d
-
-Unknown_8df8d: ; 8df8d
-	db 6
-	db $f4, $f4, $00, $16
-	db $f4, $fc, $02, $16
-	db $f4, $04, $04, $16
-	db $04, $f4, $18, $16
-	db $04, $fc, $1a, $16
-	db $04, $04, $1c, $16
-; 8dfa6
-
-Unknown_8dfa6: ; 8dfa6
-	db 6
-	db $f4, $f4, $1e, $16
-	db $f4, $fc, $20, $16
-	db $f4, $04, $22, $16
-	db $04, $f4, $24, $16
-	db $04, $fc, $26, $16
-	db $04, $04, $28, $16
-; 8dfbf
-
-Unknown_8dfbf: ; 8dfbf
-	db 3
-	db $f4, $fc, $00, $10
-	db $fc, $fc, $00, $10
-	db $04, $fc, $00, $10
-; 8dfcc
-
-Unknown_8dfcc: ; 8dfcc
-	db 6
-	db $00, $00, $00, $00
-	db $00, $08, $01, $00
-	db $00, $10, $01, $00
-	db $00, $18, $01, $00
-	db $00, $20, $02, $00
-	db $00, $28, $03, $00
-; 8dfe5
-
-Unknown_8dfe5: ; 8dfe5
-	db 4
-	db $00, $00, $00, $00
-	db $00, $08, $01, $00
-	db $00, $10, $02, $00
-	db $00, $18, $03, $00
-; 8dff6
-
-Unknown_8dff6: ; 8dff6
-	db 4
-	db $f8, $f6, $00, $06
-	db $f8, $02, $01, $06
-	db $00, $f6, $02, $06
-	db $00, $02, $03, $06
-; 8e007
-
-Unknown_8e007: ; 8e007
-	db 4
-	db $f8, $f4, $00, $06
-	db $f8, $04, $01, $06
-	db $00, $f4, $02, $06
-	db $00, $04, $03, $06
-; 8e018
-
-Unknown_8e018: ; 8e018
-	db 4
-	db $f8, $f0, $00, $06
-	db $f8, $08, $01, $06
-	db $00, $f0, $02, $06
-	db $00, $08, $03, $06
-; 8e029
-
-Unknown_8e029: ; 8e029
-	db 19
-	db $f8, $e0, $00, $00
-	db $f0, $e8, $02, $00
-	db $00, $e8, $04, $00
-	db $e8, $f0, $06, $00
-	db $f8, $f0, $08, $00
-	db $08, $f0, $0a, $00
-	db $e8, $f8, $0c, $00
-	db $f8, $f8, $0e, $00
-	db $08, $f8, $10, $00
-	db $e8, $00, $12, $00
-	db $f8, $00, $14, $00
-	db $08, $00, $16, $00
-	db $e8, $08, $18, $00
-	db $f8, $08, $1a, $00
-	db $08, $08, $1c, $00
-	db $f8, $10, $1e, $00
-	db $08, $10, $20, $00
-	db $f0, $18, $22, $00
-	db $00, $18, $24, $00
-; 8e076
-
-Unknown_8e076: ; 8e076
-	db 16
-	db $f8, $e0, $00, $00
-	db $f0, $e8, $02, $00
-	db $00, $e8, $04, $00
-	db $f8, $f0, $26, $00
-	db $08, $f0, $0a, $00
-	db $e8, $f8, $28, $00
-	db $f8, $f8, $2a, $00
-	db $08, $f8, $10, $00
-	db $f8, $00, $2c, $00
-	db $08, $00, $16, $00
-	db $f8, $08, $30, $00
-	db $08, $08, $1c, $00
-	db $f8, $10, $1e, $00
-	db $08, $10, $20, $00
-	db $f0, $18, $22, $00
-	db $00, $18, $24, $00
-; 8e0b7
-
-Unknown_8e0b7: ; 8e0b7
-	db 15
-	db $f8, $e0, $00, $00
-	db $f0, $e8, $02, $00
-	db $00, $e8, $32, $00
-	db $f8, $f0, $34, $00
-	db $08, $f0, $36, $00
-	db $f8, $f8, $38, $00
-	db $08, $f8, $3a, $00
-	db $f8, $00, $3c, $00
-	db $08, $00, $3e, $00
-	db $f8, $08, $30, $00
-	db $08, $08, $1c, $00
-	db $f8, $10, $1e, $00
-	db $08, $10, $20, $00
-	db $f0, $18, $22, $00
-	db $00, $18, $24, $00
-; 8e0f4
-
-Unknown_8e0f4: ; 8e0f4
-	db 17
-	db $f8, $e0, $00, $00
-	db $f0, $e8, $02, $00
-	db $00, $e8, $04, $00
-	db $f8, $f0, $40, $00
-	db $08, $f0, $42, $00
-	db $18, $f0, $44, $00
-	db $f8, $f8, $46, $00
-	db $08, $f8, $48, $00
-	db $18, $f8, $4a, $00
-	db $f8, $00, $4c, $00
-	db $08, $00, $4e, $00
-	db $f8, $08, $30, $00
-	db $08, $08, $1c, $00
-	db $f8, $10, $1e, $00
-	db $08, $10, $20, $00
-	db $f0, $18, $22, $00
-	db $00, $18, $24, $00
-; 8e139
-
-Unknown_8e139: ; 8e139
-	db 17
-	db $f8, $e0, $00, $00
-	db $f0, $e8, $02, $00
-	db $00, $e8, $04, $00
-	db $f8, $f0, $50, $00
-	db $08, $f0, $0a, $00
-	db $e8, $f8, $52, $00
-	db $f8, $f8, $54, $00
-	db $08, $f8, $10, $00
-	db $e8, $00, $56, $00
-	db $f8, $00, $2e, $00
-	db $08, $00, $16, $00
-	db $f8, $08, $30, $00
-	db $08, $08, $1c, $00
-	db $f8, $10, $1e, $00
-	db $08, $10, $20, $00
-	db $f0, $18, $22, $00
-	db $00, $18, $24, $00
-; 8e17e
-
-Unknown_8e17e: ; 8e17e
-	db 1
-	db $fc, $fc, $00, $11
-; 8e183
-
-Unknown_8e183: ; 8e183
-	db 12
-	db $00, $00, $30, $00
-	db $00, $08, $31, $00
-	db $00, $10, $31, $00
-	db $00, $18, $31, $00
-	db $00, $20, $31, $00
-	db $00, $28, $32, $00
-	db $08, $00, $33, $00
-	db $08, $08, $34, $00
-	db $08, $10, $34, $00
-	db $08, $18, $34, $00
-	db $08, $20, $34, $00
-	db $08, $28, $35, $00
-; 8e1b4
-
-Unknown_8e1b4: ; 8e1b4
-	db 1
-	db $00, $00, $ed, $00
-; 8e1b9
-
-Unknown_8e1b9: ; 8e1b9
-	db 4
-	db $ff, $ff, $30, $00
-	db $ff, $01, $32, $00
-	db $01, $ff, $33, $00
-	db $01, $01, $35, $00
-; 8e1ca
-
-Unknown_8e1ca: ; 8e1ca
-	db 8
-	db $ff, $ff, $30, $00
-	db $ff, $04, $31, $00
-	db $ff, $0c, $31, $00
-	db $ff, $11, $32, $00
-	db $01, $ff, $33, $00
-	db $01, $04, $34, $00
-	db $01, $0c, $34, $00
-	db $01, $11, $35, $00
-; 8e1eb
-
-Unknown_8e1eb: ; 8e1eb
-	db 1
-	db $00, $00, $34, $00
-; 8e1f0
-
-Unknown_8e1f0: ; 8e1f0
-	db 2
-	db $00, $00, $30, $00
-	db $08, $00, $33, $00
-; 8e1f9
-
-Unknown_8e1f9: ; 8e1f9
-	db 2
-	db $00, $00, $32, $00
-	db $08, $00, $35, $00
-; 8e202
-
-Unknown_8e202: ; 8e202
-	db 4
-	db $f8, $f8, $00, $01
-	db $f8, $00, $01, $01
-	db $00, $f8, $02, $01
-	db $00, $00, $03, $01
-; 8e213
-
-Unknown_8e213: ; 8e213
-	db 4
-	db $f8, $f8, $00, $81
-	db $f8, $00, $01, $81
-	db $00, $f8, $02, $81
-	db $00, $00, $03, $81
-; 8e224
-
-Unknown_8e224: ; 8e224
-	db 1
-	db $fc, $fc, $00, $02
-; 8e229
-
-Unknown_8e229: ; 8e229
-	db 4
-	db $f0, $fc, $00, $03
-	db $f8, $fc, $01, $03
-	db $00, $fc, $02, $03
-	db $08, $fc, $03, $03
-; 8e23a
-
-Unknown_8e23a: ; 8e23a
-	db 4
-	db $f0, $fc, $03, $44
-	db $f8, $fc, $02, $44
-	db $00, $fc, $01, $44
-	db $08, $fc, $00, $44
-; 8e24b
-
-Unknown_8e24b: ; 8e24b
-	db 4
-	db $f8, $f8, $00, $01
-	db $f8, $00, $00, $21
-	db $00, $f8, $00, $41
-	db $00, $00, $00, $61
-; 8e25c
-
-Unknown_8e25c: ; 8e25c
-	db 8
-	db $f4, $f4, $00, $01
-	db $f4, $fc, $01, $01
-	db $f4, $04, $00, $21
-	db $fc, $f4, $02, $01
-	db $fc, $04, $02, $21
-	db $04, $f4, $00, $41
-	db $04, $fc, $01, $41
-	db $04, $04, $00, $61
-; 8e27d
-
-Unknown_8e27d: ; 8e27d
-	db 12
-	db $f0, $f0, $00, $01
-	db $f0, $f8, $01, $01
-	db $f8, $f0, $02, $01
-	db $f0, $00, $01, $21
-	db $f0, $08, $00, $21
-	db $f8, $08, $02, $21
-	db $00, $f0, $02, $41
-	db $08, $f0, $00, $41
-	db $08, $f8, $01, $41
-	db $00, $08, $02, $61
-	db $08, $00, $01, $61
-	db $08, $08, $00, $61
-; 8e2ae
-
-Unknown_8e2ae: ; 8e2ae
-	db 36
-	db $e8, $08, $05, $00
-	db $e8, $10, $06, $00
-	db $e8, $18, $07, $00
-	db $f0, $e8, $11, $00
-	db $f0, $f0, $12, $00
-	db $f0, $f8, $13, $00
-	db $f0, $00, $14, $00
-	db $f0, $08, $15, $00
-	db $f0, $10, $16, $00
-	db $f0, $18, $17, $00
-	db $f8, $e0, $20, $00
-	db $f8, $e8, $21, $00
-	db $f8, $f0, $22, $00
-	db $f8, $f8, $23, $00
-	db $f8, $00, $24, $00
-	db $f8, $08, $25, $00
-	db $f8, $10, $26, $00
-	db $f8, $18, $27, $00
-	db $00, $e0, $30, $00
-	db $00, $e8, $31, $00
-	db $00, $f0, $32, $00
-	db $00, $f8, $33, $00
-	db $00, $00, $34, $00
-	db $00, $08, $35, $00
-	db $00, $10, $36, $00
-	db $08, $e0, $40, $00
-	db $08, $e8, $41, $00
-	db $08, $f0, $42, $00
-	db $08, $f8, $43, $00
-	db $08, $00, $44, $00
-	db $08, $08, $45, $00
-	db $08, $10, $46, $00
-	db $08, $18, $47, $00
-	db $10, $e0, $50, $00
-	db $10, $e8, $51, $00
-	db $10, $18, $57, $00
-; 8e33f
-
-Unknown_8e33f: ; 8e33f
-	db 28
-	db $e8, $00, $04, $00
-	db $e8, $08, $05, $00
-	db $e8, $10, $06, $00
-	db $f0, $e8, $11, $00
-	db $f0, $f0, $12, $00
-	db $f0, $f8, $13, $00
-	db $f0, $00, $14, $00
-	db $f0, $08, $15, $00
-	db $f0, $10, $16, $00
-	db $f8, $e8, $21, $00
-	db $f8, $f0, $22, $00
-	db $f8, $f8, $23, $00
-	db $f8, $00, $24, $00
-	db $f8, $08, $25, $00
-	db $f8, $10, $26, $00
-	db $00, $e0, $30, $00
-	db $00, $e8, $31, $00
-	db $00, $f0, $32, $00
-	db $00, $f8, $33, $00
-	db $00, $00, $34, $00
-	db $00, $08, $35, $00
-	db $08, $f0, $42, $00
-	db $08, $f8, $43, $00
-	db $08, $00, $44, $00
-	db $08, $08, $45, $00
-	db $10, $f8, $53, $00
-	db $10, $00, $54, $00
-	db $10, $08, $55, $00
-; 8e3b0
-
-Unknown_8e3b0: ; 8e3b0
-	db 30
-	db $e8, $00, $04, $00
-	db $e8, $08, $05, $00
-	db $f0, $e8, $11, $00
-	db $f0, $f0, $12, $00
-	db $f0, $f8, $13, $00
-	db $f0, $00, $14, $00
-	db $f0, $08, $15, $00
-	db $f0, $10, $16, $00
-	db $f0, $18, $17, $00
-	db $f8, $e0, $20, $00
-	db $f8, $e8, $21, $00
-	db $f8, $f0, $22, $00
-	db $f8, $f8, $23, $00
-	db $f8, $00, $24, $00
-	db $f8, $08, $25, $00
-	db $f8, $10, $26, $00
-	db $00, $e0, $30, $00
-	db $00, $e8, $31, $00
-	db $00, $f0, $32, $00
-	db $00, $f8, $33, $00
-	db $00, $00, $34, $00
-	db $00, $08, $35, $00
-	db $08, $f0, $42, $00
-	db $08, $f8, $43, $00
-	db $08, $00, $44, $00
-	db $08, $08, $45, $00
-	db $10, $f0, $52, $00
-	db $10, $f8, $53, $00
-	db $10, $00, $54, $00
-	db $10, $08, $55, $00
-; 8e429
-
-Unknown_8e429: ; 8e429
-	db 31
-	db $f0, $e8, $11, $00
-	db $f0, $f0, $12, $00
-	db $f0, $f8, $13, $00
-	db $f0, $00, $14, $00
-	db $f0, $08, $15, $00
-	db $f0, $10, $16, $00
-	db $f0, $18, $17, $00
-	db $f8, $e0, $20, $00
-	db $f8, $e8, $21, $00
-	db $f8, $f0, $22, $00
-	db $f8, $f8, $23, $00
-	db $f8, $00, $24, $00
-	db $f8, $08, $25, $00
-	db $f8, $10, $26, $00
-	db $f8, $18, $27, $00
-	db $00, $e0, $30, $00
-	db $00, $e8, $31, $00
-	db $00, $f0, $32, $00
-	db $00, $f8, $33, $00
-	db $00, $00, $34, $00
-	db $00, $08, $35, $00
-	db $00, $10, $36, $00
-	db $08, $e8, $41, $00
-	db $08, $f0, $42, $00
-	db $08, $f8, $43, $00
-	db $08, $00, $44, $00
-	db $08, $08, $45, $00
-	db $10, $e8, $51, $00
-	db $10, $f0, $52, $00
-	db $10, $00, $54, $00
-	db $10, $08, $55, $00
-; 8e4a6
-
-Unknown_8e4a6: ; 8e4a6
-	db 25
-	db $ec, $ec, $00, $09
-	db $ec, $f4, $01, $09
-	db $ec, $fc, $02, $09
-	db $ec, $04, $03, $09
-	db $ec, $0c, $04, $09
-	db $f4, $ec, $10, $09
-	db $f4, $f4, $11, $09
-	db $f4, $fc, $12, $09
-	db $f4, $04, $13, $09
-	db $f4, $0c, $14, $09
-	db $fc, $ec, $20, $09
-	db $fc, $f4, $21, $09
-	db $fc, $fc, $22, $09
-	db $fc, $04, $23, $09
-	db $fc, $0c, $24, $09
-	db $04, $ec, $30, $09
-	db $04, $f4, $31, $09
-	db $04, $fc, $32, $09
-	db $04, $04, $33, $09
-	db $04, $0c, $34, $09
-	db $0c, $ec, $40, $09
-	db $0c, $f4, $41, $09
-	db $0c, $fc, $42, $09
-	db $0c, $04, $43, $09
-	db $0c, $0c, $44, $09
-; 8e50b
-
-Unknown_8e50b: ; 8e50b
-	db 16
-	db $f0, $ec, $00, $0a
-	db $f0, $f4, $01, $0a
-	db $f0, $fc, $02, $0a
-	db $f0, $04, $03, $0a
-	db $f8, $ec, $04, $0a
-	db $f8, $f4, $05, $0a
-	db $f8, $fc, $06, $0a
-	db $f8, $04, $07, $0a
-	db $00, $ec, $08, $0a
-	db $00, $f4, $09, $0a
-	db $00, $fc, $0a, $0a
-	db $00, $04, $0b, $0a
-	db $08, $ec, $0c, $0a
-	db $08, $f4, $0d, $0a
-	db $08, $fc, $0e, $0a
-	db $08, $04, $0f, $0a
-; 8e54c
-
-Unknown_8e54c: ; 8e54c
-	db 1
-	db $fc, $fc, $00, $00
-; 8e551
-
-Unknown_8e551: ; 8e551
-	db 3
-	db $00, $f8, $00, $00
-	db $f8, $f8, $01, $00
-	db $f8, $00, $02, $00
-; 8e55e
-
-Unknown_8e55e: ; 8e55e
-	db 7
-	db $08, $f0, $00, $00
-	db $00, $f0, $01, $00
-	db $f8, $f0, $02, $00
-	db $f8, $f8, $03, $00
-	db $f0, $f8, $04, $00
-	db $f0, $00, $05, $00
-	db $f0, $08, $06, $00
-; 8e57b
-
-Unknown_8e57b: ; 8e57b
-	db 8
-	db $f8, $f0, $00, $00
-	db $f8, $f8, $01, $00
-	db $f8, $00, $01, $20
-	db $f8, $08, $00, $20
-	db $00, $f0, $00, $40
-	db $00, $f8, $01, $40
-	db $00, $00, $01, $60
-	db $00, $08, $00, $60
-; 8e59c
-
-Unknown_8e59c: ; 8e59c
-	db 12
-	db $e8, $f8, $00, $00
-	db $f0, $f8, $01, $00
-	db $f8, $f8, $02, $00
-	db $e8, $00, $00, $20
-	db $f0, $00, $01, $20
-	db $f8, $00, $02, $20
-	db $00, $f8, $02, $40
-	db $08, $f8, $01, $40
-	db $10, $f8, $00, $40
-	db $00, $00, $02, $60
-	db $08, $00, $01, $60
-	db $10, $00, $00, $60
-; 8e5cd
-
-Unknown_8e5cd: ; 8e5cd
-	db 20
-	db $ec, $f0, $00, $00
-	db $ec, $f8, $01, $00
-	db $ec, $00, $02, $00
-	db $ec, $08, $03, $00
-	db $f4, $f0, $04, $00
-	db $f4, $f8, $05, $00
-	db $f4, $00, $06, $00
-	db $f4, $08, $07, $00
-	db $fc, $f0, $08, $00
-	db $fc, $f8, $09, $00
-	db $fc, $00, $0a, $00
-	db $fc, $08, $0b, $00
-	db $04, $f0, $0c, $00
-	db $04, $f8, $0d, $00
-	db $04, $00, $0e, $00
-	db $04, $08, $0f, $00
-	db $0c, $f0, $10, $00
-	db $0c, $f8, $11, $00
-	db $0c, $00, $12, $00
-	db $0c, $08, $13, $00
-; 8e61e
-
-Unknown_8e61e: ; 8e61e
-	db 20
-	db $00, $08, $00, $81
-	db $08, $10, $00, $81
-	db $10, $18, $00, $81
-	db $18, $20, $00, $81
-	db $20, $28, $00, $81
-	db $18, $30, $00, $81
-	db $10, $38, $00, $81
-	db $08, $40, $00, $81
-	db $00, $48, $00, $81
-	db $08, $50, $00, $81
-	db $10, $58, $00, $81
-	db $18, $60, $00, $81
-	db $20, $68, $00, $81
-	db $18, $70, $00, $81
-	db $10, $78, $00, $81
-	db $08, $80, $00, $81
-	db $00, $88, $00, $81
-	db $08, $90, $00, $81
-	db $10, $98, $00, $81
-	db $18, $a0, $00, $81
-; 8e66f
-
-Unknown_8e66f: ; 8e66f
-	db 4
-	db $f8, $f8, $00, $02
-	db $f8, $00, $01, $02
-	db $00, $f8, $02, $02
-	db $00, $00, $03, $02
-; 8e680
-
-Unknown_8e680: ; 8e680
-	db 9
-	db $f0, $f4, $00, $01
-	db $f0, $fc, $01, $01
-	db $f0, $04, $02, $01
-	db $f8, $f4, $10, $01
-	db $f8, $fc, $11, $01
-	db $f8, $04, $12, $01
-	db $00, $f4, $20, $01
-	db $00, $fc, $21, $01
-	db $00, $04, $22, $01
-; 8e6a5
-
-Unknown_8e6a5: ; 8e6a5
-	db 24
-	db $d8, $f4, $00, $01
-	db $d8, $fc, $01, $01
-	db $d8, $04, $02, $01
-	db $d8, $0c, $03, $01
-	db $e0, $f4, $10, $01
-	db $e0, $fc, $11, $01
-	db $e0, $04, $12, $01
-	db $e0, $0c, $13, $01
-	db $e8, $f4, $20, $01
-	db $e8, $fc, $21, $01
-	db $e8, $04, $22, $01
-	db $e8, $0c, $23, $01
-	db $f0, $f4, $30, $01
-	db $f0, $fc, $31, $01
-	db $f0, $04, $32, $01
-	db $f0, $0c, $33, $01
-	db $f8, $f4, $40, $01
-	db $f8, $fc, $41, $01
-	db $f8, $04, $42, $01
-	db $f8, $0c, $43, $01
-	db $00, $f4, $50, $01
-	db $00, $fc, $51, $01
-	db $00, $04, $52, $01
-	db $00, $0c, $53, $01
-; 8e706
-
-
-Unknown_8e706: ; Broken 2bpp pointers
-	dbbw $80, $01, $672a ; 128-tile 2bpp at 1:672a (inside Multiply)
-	dbbw $80, $01, $672a
-	dbbw $80, $01, $672a
-	dbbw $80, $01, $672a
-	dbbw $10, $37, $672a ; 16-tile 2bpp at 37:672a (within Tileset11GFX)
-	dbbw $10, $11, $672a ; 16-tile 2bpp at 11:672a (empty data)
-	dbbw $10, $39, $672a ; 16-tile 2bpp at 39:672a (empty data)
-	dbbw $10, $24, $672a ; 16-tile 2bpp at 24:672a (inside Function926f7)
-	dbbw $10, $21, $672a ; 16-tile 2bpp at 21:672a (inside Function8671c)
-
-Function8e72a: ; 8e72a
-	add $10
-Function8e72c: ; 8e72c
-	and $3f
-	cp $20
-	jr nc, .asm_8e737
-	call Function8e741
-	ld a, h
-	ret
-
-.asm_8e737
-	and $1f
-	call Function8e741
-	ld a, h
-	xor $ff ; cpl
-	inc a
-	ret
-; 8e741
-
-Function8e741: ; 8e741
-	ld e, a
-	ld a, d
-	ld d, 0
-	ld hl, Unknown_8e75d
-rept 2
-	add hl, de
-endr
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	ld hl, 0
-.asm_8e750
-	srl a
-	jr nc, .asm_8e755
-	add hl, de
-
-.asm_8e755
-	sla e
-	rl d
-	and a
-	jr nz, .asm_8e750
-	ret
-; 8e75d
-
-Unknown_8e75d: ; 8e75d
-	sine_wave $100
-
-
-Function8e79d: ; 8e79d
-	ld a, [hSGB]
-	ld de, GFX_8e7f4
-	and a
-	jr z, .asm_8e7a8
-	ld de, GFX_8e804
-
-.asm_8e7a8
-	ld hl, VTiles0
-	lb bc, BANK(GFX_8e7f4), 1
-	call Request2bpp
-	ld c, $8
-	ld d, $0
-.asm_8e7b5
-	push bc
-	call Function8e7c6
-	call DelayFrame
-	pop bc
-rept 2
-	inc d
-endr
-	dec c
-	jr nz, .asm_8e7b5
-	call ClearSprites
-	ret
-; 8e7c6
-
-Function8e7c6: ; 8e7c6
-	ld hl, Sprites
-	ld c, $8
-.asm_8e7cb
-	ld a, c
-	and a
-	ret z
-	dec c
-	ld a, c
-	sla a
-	sla a
-	sla a
-	push af
-	push de
-	push hl
-	call Function8e72c
-	pop hl
-	pop de
-	add $68
-	ld [hli], a
-	pop af
-	push de
-	push hl
-	call Function8e72a
-	pop hl
-	pop de
-	add $54
-	ld [hli], a
-	ld a, $0
-	ld [hli], a
-	ld a, $6
-	ld [hli], a
-	jr .asm_8e7cb
-; 8e7f4
-
-GFX_8e7f4: ; 8e7f4
-INCBIN "gfx/unknown/08e7f4.2bpp"
-GFX_8e804: ; 8e804
-INCBIN "gfx/unknown/08e804.2bpp"
-
-InefficientlyClear121BytesAtwc300: ; 8e814
-	push hl
-	push de
-	push bc
-	push af
-	ld hl, wc300
-	ld bc, wc3c1 - wc300
-.loop
-	ld [hl], $0
-	inc hl
-	dec bc
-	ld a, c
-	or b
-	jr nz, .loop
-	pop af
-	pop bc
-	pop de
-	pop hl
-	ret
-; 8e82b
-
-Function8e82b: ; 8e82b
-	ld a, e
-	call ReadMonMenuIcon
-	ld l, a
-	ld h, 0
-	add hl, hl
-	ld de, IconPointers
-	add hl, de
-	ld a, [hli]
-	ld e, a
-	ld d, [hl]
-	ld b, BANK(Icons)
-	ld c, 8
-	ret
-; 8e83f
-
-Function8e83f: ; 8e83f
-	push hl
-	push de
-	push bc
-	call Function8e849
-	pop bc
-	pop de
-	pop hl
-	ret
-; 8e849
-
-Function8e849: ; 8e849
-	ld d, 0
-	ld hl, Jumptable_8e854
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 8e854
-
-
-Jumptable_8e854: ; 8e854 (23:6854)
-	dw Function8e8d5
-	dw Function8e961
-	dw Function8e97d
-	dw Function8e99a
-	dw Function8e898
-	dw Function8e8b1
-	dw Function8e862
-
-
-Function8e862: ; 8e862 (23:6862)
-	call Function8e908
-	call Function8e86c
-	call Function8e936
-	ret
-
-Function8e86c: ; 8e86c (23:686c)
-	push bc
-	ld a, [hObjectStructIndexBuffer]
-	ld hl, PartyMon1Item
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call AddNTimes
-	pop bc
-	ld a, [hl]
-	and a
-	jr z, .asm_8e890
-	push hl
-	push bc
-	ld d, a
-	callab ItemIsMail
-	pop bc
-	pop hl
-	jr c, .asm_8e88e
-	ld a, $6
-	jr .asm_8e892
-.asm_8e88e
-	ld a, $5
-.asm_8e890
-	ld a, $4
-.asm_8e892
-	ld hl, $1
-	add hl, bc
-	ld [hl], a
-	ret
-
-Function8e898: ; 8e898 (23:6898)
-	call Function8e8d5
-	ld hl, $2
-	add hl, bc
-	ld a, $0
-	ld [hl], a
-	ld hl, $4
-	add hl, bc
-	ld a, $48
-	ld [hl], a
-	ld hl, $5
-	add hl, bc
-	ld a, $48
-	ld [hl], a
-	ret
-
-Function8e8b1: ; 8e8b1 (23:68b1)
-	call Function8e908
-	call Function8e936
-	ld hl, $2
-	add hl, bc
-	ld a, $0
-	ld [hl], a
-	ld hl, $4
-	add hl, bc
-	ld a, $18
-	ld [hl], a
-	ld hl, $5
-	add hl, bc
-	ld a, $60
-	ld [hl], a
-	ld a, c
-	ld [wc608], a
-	ld a, b
-	ld [wc608 + 1], a
-	ret
-
-Function8e8d5: ; 8e8d5 (23:68d5)
-	call Function8e908
-	call Function8e8df
-	call Function8e936
-	ret
-
-Function8e8df: ; 8e8df (23:68df)
-	push bc
-	ld a, [hObjectStructIndexBuffer]
-	ld hl, PartyMon1Item
-	ld bc, $30
-	call AddNTimes
-	pop bc
-	ld a, [hl]
-	and a
-	ret z
-	push hl
-	push bc
-	ld d, a
-	callab ItemIsMail
-	pop bc
-	pop hl
-	jr c, .asm_8e900
-	ld a, $3
-	jr .asm_8e902
-.asm_8e900
-	ld a, $2
-.asm_8e902
-	ld hl, $1
-	add hl, bc
-	ld [hl], a
-	ret
-
-Function8e908: ; 8e908 (23:6908)
-	ld a, [wc3b7]
-	push af
-	ld a, [hObjectStructIndexBuffer]
-	ld hl, PartySpecies
-	ld e, a
-	ld d, $0
-	add hl, de
-	ld a, [hl]
-	call ReadMonMenuIcon
-	ld [CurIcon], a
-	call Function8e9db
-	ld a, [hObjectStructIndexBuffer]
-; and $f \ swap a
-rept 4
-	add a
-endr
-	add $1c
-	ld d, a
-	ld e, $10
-	ld a, $0
-	call Function8cfd6
-	pop af
-	ld hl, $3
-	add hl, bc
-	ld [hl], a
-	ret
-
-Function8e936: ; 8e936 (23:6936)
-	push bc
-	ld a, [hObjectStructIndexBuffer]
-	ld b, a
-	call Function8e94c
-	ld a, b
-	pop bc
-	ld hl, $9
-	add hl, bc
-	ld [hl], a
-	rlca
-	rlca
-	ld hl, $d
-	add hl, bc
-	ld [hl], a
-	ret
-
-Function8e94c: ; 8e94c (23:694c)
-	callba PlacePartymonHPBar
-	call GetHPPal
-	ld e, d
-	ld d, 0
-	ld hl, Unknown_8e95e
-	add hl, de
-	ld b, [hl]
-	ret
-; 8e95e (23:695e)
-
-Unknown_8e95e: ; 8e95e
-	db $00, $40, $80
-; 8e961
-
-Function8e961: ; 8e961 (23:6961)
-	ld a, [wd265]
-	call ReadMonMenuIcon
-	ld [CurIcon], a
-	xor a
-	call GetIconGFX
-	ld de, $2420
-	ld a, $0
-	call Function8cfd6
-	ld hl, $2
-	add hl, bc
-	ld [hl], $0
-	ret
-
-Function8e97d: ; 8e97d (23:697d)
-	ld a, [wd265]
-	call ReadMonMenuIcon
-	ld [CurIcon], a
-	xor a
-	call GetIconGFX
-	ld d, $1a
-	ld e, $24
-	ld a, $0
-	call Function8cfd6
-	ld hl, $2
-	add hl, bc
-	ld [hl], $0
-	ret
-
-Function8e99a: ; 8e99a (23:699a)
-	ld a, [wd265]
-	call ReadMonMenuIcon
-	ld [CurIcon], a
-	ld a, $62
-	ld [wc3b7], a
-	call Function8e9db
-	ret
-
-GetSpeciesIcon: ; 8e9ac
-; Load species icon into VRAM at tile a
-	push de
-	ld a, [wd265]
-	call ReadMonMenuIcon
-	ld [CurIcon], a
-	pop de
-	ld a, e
-	call GetIconGFX
-	ret
-; 8e9bc
-
-
-Function8e9bc: ; 8e9bc (23:69bc)
-	push de
-	ld a, [wd265]
-	call ReadMonMenuIcon
-	ld [CurIcon], a
-	pop de
-	ld a, e
-	call GetIcon_a
-	ret
-; 8e9cc (23:69cc)
-
-Function8e9cc: ; 8e9cc
-	push de
-	ld a, [wd265]
-	call ReadMonMenuIcon
-	ld [CurIcon], a
-	pop de
-	call GetIcon_de
-	ret
-; 8e9db
-
-Function8e9db: ; 8e9db (23:69db)
-	ld a, [wc3b7]
-
-GetIconGFX: ; 8e9de
-	call GetIcon_a
-	ld de, $80 ; 8 tiles
-	add hl, de
-	ld de, HeldItemIcons
-	lb bc, BANK(HeldItemIcons), 2
-	call GetGFXUnlessMobile
-	ld a, [wc3b7]
-	add 10
-	ld [wc3b7], a
-	ret
-
-HeldItemIcons:
-INCBIN "gfx/icon/mail.2bpp"
-INCBIN "gfx/icon/item.2bpp"
-; 8ea17
-
-GetIcon_de: ; 8ea17
-; Load icon graphics into VRAM starting from tile de.
-	ld l, e
-	ld h, d
-	jr GetIcon
-
-GetIcon_a: ; 8ea1b
-; Load icon graphics into VRAM starting from tile a.
-	ld l, a
-	ld h, 0
-
-GetIcon: ; 8ea1e
-; Load icon graphics into VRAM starting from tile hl.
-
-; One tile is 16 bytes long.
-rept 4
-	add hl, hl
-endr
-
-	ld de, VTiles0
-	add hl, de
-	push hl
-
-; The icons are contiguous, in order and of the same
-; size, so the pointer table is somewhat redundant.
-	ld a, [CurIcon]
-	push hl
-	ld l, a
-	ld h, 0
-	add hl, hl
-	ld de, IconPointers
-	add hl, de
-	ld a, [hli]
-	ld e, a
-	ld d, [hl]
-	pop hl
-
-	lb bc, BANK(Icons), 8
-	call GetGFXUnlessMobile
-
-	pop hl
-	ret
-; 8ea3f
-
-GetGFXUnlessMobile: ; 8ea3f
-	ld a, [wLinkMode]
-	cp LINK_MOBILE
-	jp nz, Request2bpp
-	jp Get2bpp_2
-; 8ea4a
-
-Function8ea4a: ; 8ea4a
-	ld hl, wc314
-	ld e, $6
-	ld a, [MenuSelection2]
-	ld d, a
-.loop
-	ld a, [hl]
-	and a
-	jr z, .next
-	cp d
-	jr z, .loadwithtwo
-	ld a, $0
-	jr .ok
-
-.loadwithtwo
-	ld a, $2
-
-.ok
-	push hl
-	ld c, l
-	ld b, h
-	ld hl, $2
-	add hl, bc
-	ld [hl], a
-	pop hl
-
-.next
-	ld bc, $10
-	add hl, bc
-	dec e
-	jr nz, .loop
-	ret
-; 8ea71
-
-Function8ea71: ; 8ea71
-	ld hl, wc314
-	ld e, $6
-.loop
-	ld a, [hl]
-	and a
-	jr z, .zero
-	push hl
-	ld c, l
-	ld b, h
-	ld hl, $2
-	add hl, bc
-	ld [hl], $1
-	pop hl
-.zero
-	ld bc, $10
-	add hl, bc
-	dec e
-	jr nz, .loop
-	ret
-; 8ea8c (23:6a8c)
-
-Function8ea8c: ; 8ea8c
-	ld hl, wc314
-	ld e, $6
-	ld a, [wd0e3]
-	ld d, a
-.asm_8ea95
-	ld a, [hl]
-	and a
-	jr z, .asm_8eaab
-	cp d
-	jr z, .asm_8eaa0
-	ld a, $3
-	jr .asm_8eaa2
-.asm_8eaa0
-	ld a, $2
-.asm_8eaa2
-	push hl
-	ld c, l
-	ld b, h
-	ld hl, $2
-	add hl, bc
-	ld [hl], a
-	pop hl
-.asm_8eaab
-	ld bc, $10
-	add hl, bc
-	dec e
-	jr nz, .asm_8ea95
-	ret
-
-
-INCLUDE "menu/mon_icons.asm"
-
-
 SECTION "bank24", ROMX, BANK[$24]
 
 INCLUDE "engine/phone.asm"
+INCLUDE "engine/timeset.asm"
+INCLUDE "engine/pokegear.asm"
 
-InitClock: ; 90672 (24:4672)
-; Ask the player to set the time.
-	ld a, [hInMenu]
-	push af
-	ld a, $1
-	ld [hInMenu], a
-
-	ld a, $0
-	ld [wc2ce], a
-	ld a, $10
-	ld [MusicFade], a
-	ld a, MUSIC_NONE % $100
-	ld [MusicFadeIDLo], a
-	ld a, MUSIC_NONE / $100
-	ld [MusicFadeIDHi], a
-	ld c, 8
-	call DelayFrames
-	call Function4dd
-	call ClearTileMap
-	call ClearSprites
-	ld b, $8
-	call GetSGBLayout
-	xor a
-	ld [hBGMapMode], a
-	call LoadStandardFont
-	ld de, GFX_908fb
-	ld hl, VTiles2 tile $00
-	lb bc, BANK(GFX_908fb), 1
-	call Request1bpp
-	ld de, GFX_90903
-	ld hl, VTiles2 tile $01
-	lb bc, BANK(GFX_90903), 1
-	call Request1bpp
-	ld de, GFX_9090b
-	ld hl, VTiles2 tile $02
-	lb bc, BANK(GFX_9090b), 1
-	call Request1bpp
-	call .ClearScreen
-	call WaitBGMap
-	call Function4a3
-	ld hl, UnknownText_0x90874
-	call PrintText
-	ld hl, wc608
-	ld bc, 50
-	xor a
-	call ByteFill
-	ld a, $a
-	ld [wInitHourBuffer], a
-
-.loop
-	ld hl, UnknownText_0x90879
-	call PrintText
-	hlcoord 3, 7
-	ld b, 2
-	ld c, 15
-	call TextBox
-	hlcoord 11, 7
-	ld [hl], $1
-	hlcoord 11, 10
-	ld [hl], $2
-	hlcoord 4, 9
-	call DisplayHourOClock
-	ld c, 10
-	call DelayFrames
-
-.SetHourLoop
-	call JoyTextDelay
-	call SetHour
-	jr nc, .SetHourLoop
-
-	ld a, [wInitHourBuffer]
-	ld [StringBuffer2 + 1], a
-	call .ClearScreen
-	ld hl, UnknownText_0x90886
-	call PrintText
-	call YesNoBox
-	jr nc, .HourIsSet
-	call .ClearScreen
-	jr .loop
-
-.HourIsSet
-	ld hl, UnknownText_0x9089a
-	call PrintText
-	hlcoord 11, 7
-	lb bc, 2, 7
-	call TextBox
-	hlcoord 15, 7
-	ld [hl], $1
-	hlcoord 15, 10
-	ld [hl], $2
-	hlcoord 12, 9
-	call DisplayMinutesWithMinString
-	ld c, 10
-	call DelayFrames
-
-.SetMinutesLoop
-	call JoyTextDelay
-	call SetMinutes
-	jr nc, .SetMinutesLoop
-
-	ld a, [BattleMonNick + 5]
-	ld [StringBuffer2 + 2], a
-	call .ClearScreen
-	ld hl, UnknownText_0x908a4
-	call PrintText
-	call YesNoBox
-	jr nc, .MinutesAreSet
-	call .ClearScreen
-	jr .HourIsSet
-
-.MinutesAreSet
-	call Function658
-	ld hl, OakText_ResponseToSetTime
-	call PrintText
-	call WaitPressAorB_BlinkCursor
-	pop af
-	ld [hInMenu], a
-	ret
-
-.ClearScreen: ; 90783 (24:4783)
-	xor a
-	ld [hBGMapMode], a
-	hlcoord 0, 0
-	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
-	xor a
-	call ByteFill
-	ld a, $1
-	ld [hBGMapMode], a
-	ret
-
-SetHour: ; 90795 (24:4795)
-	ld a, [hJoyPressed]
-	and A_BUTTON
-	jr nz, .Confirm
-
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, .up
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .down
-	call DelayFrame
-	and a
-	ret
-
-.down
-	ld hl, wInitHourBuffer
-	ld a, [hl]
-	and a
-	jr nz, .DecreaseThroughMidnight
-	ld a, 23 + 1
-.DecreaseThroughMidnight
-	dec a
-	ld [hl], a
-	jr .okay
-
-.up
-	ld hl, wInitHourBuffer
-	ld a, [hl]
-	cp 23
-	jr c, .AdvanceThroughMidnight
-	ld a, -1
-.AdvanceThroughMidnight
-	inc a
-	ld [hl], a
-
-.okay
-	hlcoord 4, 9
-	ld a, " "
-	ld bc, 15
-	call ByteFill
-	hlcoord 4, 9
-	call DisplayHourOClock
-	call WaitBGMap
-	and a
-	ret
-
-.Confirm
-	scf
-	ret
-
-DisplayHourOClock: ; 907de (24:47de)
-	push hl
-	ld a, [wInitHourBuffer]
-	ld c, a
-	ld e, l
-	ld d, h
-	call PrintHour
-	inc hl
-	ld de, String_oclock
-	call PlaceString
-	pop hl
-	ret
-; 907f1 (24:47f1)
-
-Function907f1: ; 907f1
-	ld h, d
-	ld l, e
-	push hl
-	call DisplayHourOClock
-	pop de
-rept 2
-	inc de
-endr
-	ld a, $9c
-	ld [de], a
-	inc de
-	push de
-	ld hl, $3
-	add hl, de
-	ld a, [de]
-	inc de
-	ld [hli], a
-	ld a, [de]
-	ld [hl], a
-	pop hl
-	call DisplayMinutesWithMinString
-rept 3
-	inc hl
-endr
-	ret
-; 90810
-
-SetMinutes: ; 90810 (24:4810)
-	ld a, [hJoyPressed]
-	and A_BUTTON
-	jr nz, .asm_90857
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, .asm_90835
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .asm_90828
-	call DelayFrame
-	and a
-	ret
-.asm_90828
-	ld hl, BattleMonNick + 5
-	ld a, [hl]
-	and a
-	jr nz, .asm_90831
-	ld a, 59 + 1
-.asm_90831
-	dec a
-	ld [hl], a
-	jr .asm_90841
-.asm_90835
-	ld hl, BattleMonNick + 5
-	ld a, [hl]
-	cp 59
-	jr c, .asm_9083f
-	ld a, -1
-.asm_9083f
-	inc a
-	ld [hl], a
-.asm_90841
-	hlcoord 12, 9
-	ld a, " "
-	ld bc, 7
-	call ByteFill
-	hlcoord 12, 9
-	call DisplayMinutesWithMinString
-	call WaitBGMap
-	and a
-	ret
-.asm_90857
-	scf
-	ret
-
-DisplayMinutesWithMinString: ; 90859 (24:4859)
-	ld de, BattleMonNick + 5
-	call PrintTwoDigitNumberRightAlign
-	inc hl
-	ld de, String_min
-	call PlaceString
-	ret
-
-PrintTwoDigitNumberRightAlign: ; 90867 (24:4867)
-	push hl
-	ld a, " "
-	ld [hli], a
-	ld [hl], a
-	pop hl
-	lb bc, PRINTNUM_RIGHTALIGN | 1, 2
-	call PrintNum
-	ret
-; 90874 (24:4874)
-
-UnknownText_0x90874: ; 0x90874
-	; Zzz… Hm? Wha…? You woke me up! Will you check the clock for me?
-	text_jump UnknownText_0x1bc29c
-	db "@"
-; 0x90879
-
-UnknownText_0x90879: ; 0x90879
-	; What time is it?
-	text_jump UnknownText_0x1bc2eb
-	db "@"
-; 0x9087e
-
-String_oclock:
-	db "o'clock@"
-; 90886
-
-UnknownText_0x90886: ; 0x90886
-	; What?@ @
-	text_jump UnknownText_0x1bc2fd
-	start_asm
-	hlcoord 1, 16
-	call DisplayHourOClock
-	ld hl, UnknownText_0x90895
-	ret
-; 90895 (24:4895)
-
-UnknownText_0x90895: ; 0x90895
-	; ?
-	text_jump UnknownText_0x1bc305
-	db "@"
-; 0x9089a
-
-UnknownText_0x9089a: ; 0x9089a
-	; How many minutes?
-	text_jump UnknownText_0x1bc308
-	db "@"
-; 0x9089f
-
-String_min:
-	db "min.@"
-; 908a4
-
-UnknownText_0x908a4: ; 0x908a4
-	; Whoa!@ @
-	text_jump UnknownText_0x1bc31b
-	start_asm
-; 0x908a9
-	hlcoord 7, 14
-	call DisplayMinutesWithMinString
-	ld hl, UnknownText_0x908b3
-	ret
-; 908b3 (24:48b3)
-
-UnknownText_0x908b3: ; 0x908b3
-	; ?
-	text_jump UnknownText_0x1bc323
-	db "@"
-; 0x908b8
-
-OakText_ResponseToSetTime: ; 0x908b8
-	start_asm
-	decoord 1, 14
-	ld a, [wInitHourBuffer]
-	ld c, a
-	call PrintHour
-	ld [hl], ":"
-	inc hl
-	ld de, BattleMonNick + 5
-	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
-	call PrintNum
-	ld b, h
-	ld c, l
-	ld a, [wInitHourBuffer]
-	cp 4
-	jr c, .NITE
-	cp 11
-	jr c, .MORN
-	cp 18
-	jr c, .DAY
-.NITE
-	ld hl, .sodark
-	ret
-.MORN
-	ld hl, .overslept
-	ret
-.DAY
-	ld hl, .yikes
-	ret
-; 908ec (24:48ec)
-
-.overslept: ; 0x908ec
-	; ! I overslept!
-	text_jump UnknownText_0x1bc326
-	db "@"
-; 0x908f1
-
-.yikes: ; 0x908f1
-	; ! Yikes! I over- slept!
-	text_jump UnknownText_0x1bc336
-	db "@"
-; 0x908f6
-
-.sodark: ; 0x908f6
-	; ! No wonder it's so dark!
-	text_jump UnknownText_0x1bc34f
-	db "@"
-; 0x908fb
-
-GFX_908fb: ; 908fb
-INCBIN "gfx/unknown/0908fb.2bpp"
-GFX_90903: ; 90903
-INCBIN "gfx/unknown/090903.2bpp"
-GFX_9090b: ; 9090b
-INCBIN "gfx/unknown/09090b.2bpp"
-; 90913
-
-Special_SetDayOfWeek: ; 90913
-	ld a, [hInMenu]
-	push af
-	ld a, $1
-	ld [hInMenu], a
-	ld de, GFX_90903
-	ld hl, VTiles1 tile $6f
-	lb bc, BANK(GFX_90903), 1
-	call Request1bpp
-	ld de, GFX_9090b
-	ld hl, VTiles1 tile $75
-	lb bc, BANK(GFX_9090b), 1
-	call Request1bpp
-	xor a
-	ld [wd002], a
-.asm_90936
-	hlcoord 0, 12
-	lb bc, 4, 18
-	call TextBox
-	call LoadStandardMenuDataHeader
-	ld hl, UnknownText_0x90a3f
-	call PrintText
-	hlcoord 9, 3
-	ld b, 2
-	ld c, 9
-	call TextBox
-	hlcoord 14, 3
-	ld [hl], $ef
-	hlcoord 14, 6
-	ld [hl], $f5
-	hlcoord 10, 5
-	call Function909de
-	call Function321c
-	ld c, 10
-	call DelayFrames
-.asm_9096a
-	call JoyTextDelay
-	call Function90993
-	jr nc, .asm_9096a
-	call ExitMenu
-	call UpdateSprites
-	ld hl, UnknownText_0x90a44
-	call PrintText
-	call YesNoBox
-	jr c, .asm_90936
-	ld a, [wd002]
-	ld [StringBuffer2], a
-	call Function663
-	call LoadStandardFont
-	pop af
-	ld [hInMenu], a
-	ret
-; 90993
-
-Function90993: ; 90993
-	ld a, [hJoyPressed]
-	and A_BUTTON
-	jr z, .asm_9099b
-	scf
-	ret
-
-.asm_9099b
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, .asm_909ba
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .asm_909ad
-	call DelayFrame
-	and a
-	ret
-
-.asm_909ad
-	ld hl, wd002
-	ld a, [hl]
-	and a
-	jr nz, .asm_909b6
-	ld a, 6 + 1
-
-.asm_909b6
-	dec a
-	ld [hl], a
-	jr .asm_909c6
-
-.asm_909ba
-	ld hl, wd002
-	ld a, [hl]
-	cp 6
-	jr c, .asm_909c4
-	ld a, -1
-
-.asm_909c4
-	inc a
-	ld [hl], a
-
-.asm_909c6
-	xor a
-	ld [hBGMapMode], a
-	hlcoord 10, 4
-	ld b, $2
-	ld c, $9
-	call ClearBox
-	hlcoord 10, 5
-	call Function909de
-	call WaitBGMap
-	and a
-	ret
-; 909de
-
-Function909de: ; 909de
-	push hl
-	ld a, [wd002]
-	ld e, a
-	ld d, 0
-	ld hl, WeekdaysStrings
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld d, [hl]
-	ld e, a
-	pop hl
-	call PlaceString
-	ret
-; 909f2
-
-WeekdaysStrings: ; 909f2
-	dw Sunday
-	dw Monday
-	dw Tuesday
-	dw Wednesday
-	dw Thursday
-	dw Friday
-	dw Saturday
-	dw Sunday
-
-Sunday:    db " SUNDAY@"
-Monday:    db " MONDAY@"
-Tuesday:   db " TUESDAY@"
-Wednesday: db "WEDNESDAY@"
-Thursday:  db "THURSDAY@"
-Friday:    db " FRIDAY@"
-Saturday:  db "SATURDAY@"
-
-
-UnknownText_0x90a3f: ; 0x90a3f
-	; What day is it?
-	text_jump UnknownText_0x1bc369
-	db "@"
-; 0x90a44
-
-UnknownText_0x90a44: ; 0x90a44
-	start_asm
-	hlcoord 1, 14
-	call Function909de
-	ld hl, UnknownText_0x90a4f
-	ret
-; 90a4f (24:4a4f)
-
-UnknownText_0x90a4f: ; 0x90a4f
-	; , is it?
-	text_jump UnknownText_0x1bc37a
-	db "@"
-; 0x90a54
-
-Special_InitialSetDSTFlag: ; 90a54
-	ld a, [wDST]
-	set 7, a
-	ld [wDST], a
-	hlcoord 1, 14
-	lb bc, 3, 18
-	call ClearBox
-	ld hl, UnknownText_0x90a6c
-	call PlaceWholeStringInBoxAtOnce
-	ret
-; 90a6c
-
-UnknownText_0x90a6c: ; 90a6c
-	start_asm
-	call UpdateTime
-	ld a, [hHours]
-	ld b, a
-	ld a, [hMinutes]
-	ld c, a
-	decoord 1, 14
-	callba PrintHoursMins
-	ld hl, TextJump_DSTIsThatOK
-	ret
-; 90a83 (24:4a83)
-
-TextJump_DSTIsThatOK: ; 0x90a83
-	; DST, is that OK?
-	text_jump Text_DSTIsThatOK
-	db "@"
-; 0x90a88
-
-Special_InitialClearDSTFlag: ; 90a88
-	ld a, [wDST]
-	res 7, a
-	ld [wDST], a
-	hlcoord 1, 14
-	lb bc, 3, 18
-	call ClearBox
-	ld hl, UnknownText_0x90aa0
-	call PlaceWholeStringInBoxAtOnce
-	ret
-; 90aa0
-
-UnknownText_0x90aa0: ; 90aa0
-	start_asm
-	call UpdateTime
-	ld a, [hHours]
-	ld b, a
-	ld a, [hMinutes]
-	ld c, a
-	decoord 1, 14
-	callba PrintHoursMins
-	ld hl, UnknownText_0x90ab7
-	ret
-; 90ab7
-
-UnknownText_0x90ab7: ; 0x90ab7
-	; , is that OK?
-	text_jump UnknownText_0x1c5ff1
-	db "@"
-; 0x90abc
-
-Function90abc: ; 90abc
-	hlcoord 1, 14
-	lb bc, 3, SCREEN_WIDTH - 2
-	call ClearBox
-	ld hl, UnknownText_0x90acc
-	call PlaceWholeStringInBoxAtOnce
-	ret
-; 90acc
-
-UnknownText_0x90acc: ; 0x90acc
-	start_asm
-
-	call UpdateTime
-
-	hlcoord 1, 14
-	ld [hl], "R"
-	inc hl
-	ld [hl], "T"
-	inc hl
-	ld [hl], " "
-	inc hl
-
-	ld de, hRTCDayLo
-	call Function90b23
-
-	hlcoord 1, 16
-	ld [hl], "D"
-	inc hl
-	ld [hl], "F"
-	inc hl
-	ld [hl], " "
-	inc hl
-
-	ld de, StartDay
-	call Function90b23
-
-	ld [hl], " "
-	inc hl
-
-	ld a, [wDST]
-	bit 7, a
-	jr z, .off
-
-	ld [hl], "O"
-	inc hl
-	ld [hl], "N"
-	inc hl
-	jr .done
-
-.off
-	ld [hl], "O"
-	inc hl
-	ld [hl], "F"
-	inc hl
-	ld [hl], "F"
-	inc hl
-
-.done
-	ld hl, UnknownText_0x90b13
-	ret
-; 90b13
-
-UnknownText_0x90b13: ; 0x90b13
-	text "<PARA>Now on DEBUG…"
-	prompt
-; 0x90b23
-
-Function90b23: ; 90b23
-	lb bc, 1, 3
-	call PrintNum
-	ld [hl], "."
-	inc hl
-	inc de
-	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
-	call PrintNum
-	ld [hl], ":"
-	inc hl
-	inc de
-	lb bc, PRINTNUM_LEADINGZEROS | 1, 2
-	call PrintNum
-	ret
-; 90b3e
-
-PrintHour: ; 90b3e (24:4b3e)
-	ld l, e
-	ld h, d
-	push bc
-	call GetTimeOfDayString
-	call PlaceString
-	ld l, c
-	ld h, b
-	inc hl
-	pop bc
-	call AdjustHourForAMorPM
-	ld [wd265], a
-	ld de, wd265
-	call PrintTwoDigitNumberRightAlign
-	ret
-
-GetTimeOfDayString: ; 90b58 (24:4b58)
-	ld a, c
-	cp 4
-	jr c, .nite
-	cp 10
-	jr c, .morn
-	cp 18
-	jr c, .day
-.nite
-	ld de, .NITE
-	ret
-.morn
-	ld de, .MORN
-	ret
-.day
-	ld de, .DAY
-	ret
-; 90b71 (24:4b71)
-
-.NITE: db "NITE@"
-.MORN: db "MORN@"
-.DAY: db "DAY@"
-; 90b7f
-
-AdjustHourForAMorPM:
-; Convert the hour stored in c (0-23) to a 1-12 value
-	ld a, c
-	or a
-	jr z, .midnight
-	cp 12
-	ret c
-	ret z
-	sub 12
-	ret
-
-.midnight
-	ld a, 12
-	ret
-
-Function90b8d: ; 90b8d (24:4b8d)
-	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 Function90bea
-	call DelayFrame
-
-.loop
-	call UpdateTime
-	call JoyTextDelay
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .done
-	call Function90f04
-	callba Function8cf69
-	call DelayFrame
-	jr .loop
-
-.done
-	ld de, SFX_READ_TEXT_2
-	call PlaySFX
-	call WaitSFX
-	pop af
-	ld [VramState], a
-	pop af
-	ld [hInMenu], a
-	pop af
-	ld [Options], a
-	call ClearBGPalettes
-	xor a
-	ld [hBGMapAddress], a
-	ld a, VBGMap0 / $100
-	ld [hBGMapAddress + 1], a
-	ld a, $90
-	ld [hWY], a
-	call Function91492
-	ret
-
-Function90bea: ; 90bea (24:4bea)
-	call ClearBGPalettes
-	call ClearTileMap
-	call ClearSprites
-	call DisableLCD
-	xor a
-	ld [hSCY], a
-	ld [hSCX], a
-	ld a, $7
-	ld [hWX], a
-	call Function90c4e
-	callba Function8cf53
-	call Function90d32
-	ld a, 8
-	call SkipMusic
-	ld a, $e3
-	ld [rLCDC], a
-	call Function90d70
-	xor a
-	ld [wJumptableIndex], a
-	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 b, $2
-	call GetSGBLayout
-	call SetPalettes
-	ld a, [hCGB]
-	and a
-	ret z
-	ld a, $e4
-	call Functioncf8
-	ret
-
-Function90c4e: ; 90c4e
-	call Functiond79
-	ld hl, TownMapGFX
-	ld de, VTiles2
-	ld a, BANK(TownMapGFX)
-	call FarDecompress
-
-	ld hl, PokegearGFX
-	ld de, VTiles2 + $300
-	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]
-	ld c, a
-	call GetWorldMapLocation
-	cp FAST_SHIP
-	jr z, .ssaqua
-
-	callba GetPlayerIcon
-
-	push de
-	ld h, d
-	ld l, e
-	ld a, b
-
-	push af
-	ld de, VTiles0 tile $10
-	ld bc, $40
-	call FarCopyBytes
-	pop af
-
-	pop hl
-
-	ld de, $c0
-	add hl, de
-	ld de, VTiles0 tile $14
-	ld bc, $40
-	call FarCopyBytes
-	ret
-
-.ssaqua
-	ld hl, FastShipGFX
-	ld de, VTiles0 tile $10
-	ld bc, $80
-	call CopyBytes
-	ret
-; 90cb2
-
-FastShipGFX: ; 90cb2
-INCBIN "gfx/misc/fast_ship.2bpp"
-; 90d32
-
-Function90d32: ; 90d32 (24:4d32)
-	ld de, $2410
-	ld a, $d
-	call Function3b2a
-	ld hl, $3
-	add hl, bc
-	ld [hl], $0
-	ret
-
-Function90d41: ; 90d41 (24:4d41)
-	ld hl, wcf64
-	ld e, [hl]
-	ld d, 0
-	ld hl, Unknown_90d52
-	add hl, de
-	ld a, [hl]
-	ld hl, $6
-	add hl, bc
-	ld [hl], a
-	ret
-; 90d52 (24:4d52)
-
-Unknown_90d52: ; 90d52
-	db $00, $10, $20, $30
-; 90d56
-
-Function90d56: ; 90d56
-	ld a, [MapGroup]
-	ld b, a
-	ld a, [MapNumber]
-	ld c, a
-	call GetWorldMapLocation
-	cp SPECIAL_MAP
-	ret nz
-	ld a, [BackupMapGroup]
-	ld b, a
-	ld a, [BackupMapNumber]
-	ld c, a
-	call GetWorldMapLocation
-	ret
-; 90d70
-
-
-Function90d70: ; 90d70 (24:4d70)
-	ld a, [MapGroup]
-	ld b, a
-	ld a, [MapNumber]
-	ld c, a
-	call GetWorldMapLocation
-
-	cp FAST_SHIP
-	jr z, .asm_90d95
-
-	cp SPECIAL_MAP
-	jr nz, .asm_90d8e
-
-	ld a, [BackupMapGroup]
-	ld b, a
-	ld a, [BackupMapNumber]
-	ld c, a
-	call GetWorldMapLocation
-
-.asm_90d8e
-	ld [wc6d8], a
-	ld [wc6d7], a
-	ret
-
-.asm_90d95
-	ld [wc6d8], a
-	ld a, NEW_BARK_TOWN
-	ld [wc6d7], a
-	ret
-
-Function90d9e: ; 90d9e (24:4d9e)
-	ld a, $0
-	ld [wJumptableIndex], a
-	xor a
-	ld [wcf64], a
-	ret
-
-Function90da8: ; 90da8 (24:4da8)
-	xor a
-	ld [hBGMapMode], a
-	hlcoord 0, 0
-	ld bc, TileMapEnd - TileMap
-	ld a, $4f
-	call ByteFill
-	ld a, [wcf64]
-	and $3
-	add a
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_90e12
-	add hl, de
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld de, .asm_90dcb
-	push de
-	jp [hl]
-
-.asm_90dcb
-	call Function90eb0
-	callba TownMapPals
-	ld a, [wcf65]
-	and a
-	jr nz, .asm_90de8
-
-	xor a
-	ld [hBGMapAddress], a
-	ld a, VBGMap0 / $100
-	ld [hBGMapAddress + 1], a
-	call Function90e00
-	ld a, $90
-	jr .asm_90df3
-
-.asm_90de8
-	xor a
-	ld [hBGMapAddress], a
-	ld a, VBGMap1 / $100
-	ld [hBGMapAddress + 1], a
-	call Function90e00
-	xor a
-
-.asm_90df3
-	ld [hWY], a
-	ld a, [wcf65]
-	and 1
-	xor 1
-	ld [wcf65], a
-	ret
-
-Function90e00: ; 90e00 (24:4e00)
-	ld a, [hCGB]
-	and a
-	jr z, .asm_90e0e
-	ld a, $2
-	ld [hBGMapMode], a
-	ld c, 3
-	call DelayFrames
-.asm_90e0e
-	call WaitBGMap
-	ret
-; 90e12 (24:4e12)
-
-Jumptable_90e12: ; 90e12
-	dw Function90e1a
-	dw Function90e3f
-	dw Function90e82
-	dw Function90e72
-; 90e1a
-
-Function90e1a: ; 90e1a
-	ld de, ClockTilemapRLE
-	call Function914bb
-	hlcoord 12, 1
-	ld de, .switch
-	call PlaceString
-	hlcoord 0, 12
-	lb bc, 4, 18
-	call TextBox
-	call Function90f86
-	ret
-; 90e36 (24:4e36)
-
-.switch
-	db " SWITCH▶@"
-; 90e3f
-
-Function90e3f: ; 90e3f
-
-	ld a, [wc6d8]
-	cp FAST_SHIP
-	jr z, .johto
-	cp KANTO_LANDMARK
-	jr nc, .kanto
-.johto
-	ld e, 0
-	jr .ok
-.kanto
-	ld e, 1
-.ok
-	callba Function91ae1
-	ld a, $7
-	ld bc, $12
-	hlcoord 1, 2
-	call ByteFill
-	hlcoord 0, 2
-	ld [hl], $6
-	hlcoord 19, 2
-	ld [hl], $17
-	ld a, [wc6d7]
-	call Function910b4
-	ret
-; 90e72
-
-Function90e72: ; 90e72
-	ld de, RadioTilemapRLE
-	call Function914bb
-	hlcoord 0, 12
-	lb bc, 4, 18
-	call TextBox
-	ret
-; 90e82
-
-Function90e82: ; 90e82
-	ld de, PhoneTilemapRLE
-	call Function914bb
-	hlcoord 0, 12
-	lb bc, 4, 18
-	call TextBox
-	call Function90e98
-	call Function912d8
-	ret
-; 90e98
-
-Function90e98: ; 90e98 (24:4e98)
-	hlcoord 17, 1
-	ld a, $3c
-	ld [hli], a
-	inc a
-	ld [hl], a
-	hlcoord 17, 2
-	inc a
-	ld [hli], a
-	call GetMapHeaderPhoneServiceNybble
-	and a
-	ret nz
-	hlcoord 18, 2
-	ld [hl], $3f
-	ret
-
-Function90eb0: ; 90eb0 (24:4eb0)
-	hlcoord 0, 0
-	ld bc, $8
-	ld a, $4f
-	call ByteFill
-	hlcoord 0, 1
-	ld bc, $8
-	ld a, $4f
-	call ByteFill
-	ld de, wPokegearFlags
-	ld a, [de]
-	bit 0, a
-	call nz, Function90ee4
-	ld a, [de]
-	bit 2, a
-	call nz, Function90eeb
-	ld a, [de]
-	bit 1, a
-	call nz, Function90ef2
-	hlcoord 0, 0
-	ld a, $46
-	call Function90ef7
-	ret
-
-Function90ee4: ; 90ee4 (24:4ee4)
-	hlcoord 2, 0
-	ld a, $40
-	jr Function90ef7
-
-Function90eeb: ; 90eeb (24:4eeb)
-	hlcoord 4, 0
-	ld a, $44
-	jr Function90ef7
-
-Function90ef2: ; 90ef2 (24:4ef2)
-	hlcoord 6, 0
-	ld a, $42
-
-Function90ef7: ; 90ef7 (24:4ef7)
-	ld [hli], a
-	inc a
-	ld [hld], a
-	ld bc, $14
-	add hl, bc
-	add $f
-	ld [hli], a
-	inc a
-	ld [hld], a
-	ret
-
-Function90f04: ; 90f04 (24:4f04)
-	ld a, [wJumptableIndex]
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_90f13
-rept 2
-	add hl, de
-endr
-	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
-
-
-Function90f2d: ; 90f2d (24:4f2d)
-	call Function90da8
-	ld hl, UnknownText_0x914d3
-	call PrintText
-	ld hl, wJumptableIndex
-	inc [hl]
-	call Function91492
-	ret
-
-Function90f3e: ; 90f3e (24:4f3e)
-	call Function90f7b
-	ld hl, hJoyLast
-
-	ld a, [hl]
-	and A_BUTTON + B_BUTTON + START + SELECT
-	jr nz, .asm_90f75
-
-	ld a, [hl]
-	and D_RIGHT
-	ret z
-
-	ld a, [wPokegearFlags]
-	bit 0, a
-	jr z, .asm_90f5a
-	ld c, $2
-	ld b, $1
-	jr .asm_90f71
-.asm_90f5a
-
-	ld a, [wPokegearFlags]
-	bit 2, a
-	jr z, .asm_90f67
-	ld c, $7
-	ld b, $2
-	jr .asm_90f71
-.asm_90f67
-
-	ld a, [wPokegearFlags]
-	bit 1, a
-	ret z
-
-	ld c, $b
-	ld b, $3
-
-.asm_90f71
-	call Function91480
-	ret
-
-.asm_90f75
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-Function90f7b: ; 90f7b (24:4f7b)
-	xor a
-	ld [hBGMapMode], a
-	call Function90f86
-	ld a, $1
-	ld [hBGMapMode], a
-	ret
-
-Function90f86: ; 90f86 (24:4f86)
-	hlcoord 3, 5
-	lb bc, 5, 14
-	call ClearBox
-	ld a, [hHours]
-	ld b, a
-	ld a, [hMinutes]
-	ld c, a
-	decoord 6, 8
-	callba PrintHoursMins
-	ld hl, UnknownText_0x90faf
-	bccoord 6, 6
-	call PlaceWholeStringInBoxAtOnce
-	ret
-; 90fa8 (24:4fa8)
-
-String_90fa8: db "ごぜん@"
-String_90fac: db "ごご@"
-
-UnknownText_0x90faf: ; 0x90faf
-	text_jump UnknownText_0x1c5821
-	db "@"
-; 0x90fb4
-
-Function90fb4: ; 90fb4 (24:4fb4)
-	ld a, [wc6d8]
-	cp FAST_SHIP
-	jr z, .johto
-	cp KANTO_LANDMARK
-	jr nc, .kanto
-.johto
-	ld a, 3
-	jr .done
-
-	ret
-
-.kanto
-	ld a, 5
-.done
-	ld [wJumptableIndex], a
-	call Function91492
-	ret
-
-Function90fcd: ; 90fcd (24:4fcd)
-	call Function90da8
-	ld a, [wc6d8]
-	call Function9106a
-	ld a, [wc6d7]
-	call Function91098
-	ld a, c
-	ld [wc6d5], a
-	ld a, b
-	ld [wc6d6], a
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-
-Function90fe9: ; 90fe9 (24:4fe9)
-	call Function910e8
-	jr Function90ff2
-
-Function90fee: ; 90fee (24:4fee)
-	ld d, $2e
-	ld e, $1
-Function90ff2: ; 90ff2 (24:4ff2)
-	ld hl, hJoyLast
-	ld a, [hl]
-	and B_BUTTON
-	jr nz, .cancel
-	ld a, [hl]
-	and D_RIGHT
-	jr nz, .right
-	ld a, [hl]
-	and D_LEFT
-	jr nz, .left
-	call Function9102f
-	ret
-
-.right
-	ld a, [wPokegearFlags]
-	bit 2, a
-	jr z, .asm_91015
-	ld c, $7
-	ld b, $2
-	jr .done
-
-.asm_91015
-	ld a, [wPokegearFlags]
-	bit 1, a
-	ret z
-	ld c, $b
-	ld b, $3
-	jr .done
-
-.left
-	ld c, $0
-	ld b, $0
-.done
-	call Function91480
-	ret
-.cancel
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-Function9102f: ; 9102f (24:502f)
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, .up
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .down
-	ret
-.up
-	ld hl, wc6d7
-	ld a, [hl]
-	cp d
-	jr c, .asm_91047
-	ld a, e
-	dec a
-	ld [hl], a
-.asm_91047
-	inc [hl]
-	jr .done
-
-.down
-	ld hl, wc6d7
-	ld a, [hl]
-	cp e
-	jr nz, .asm_91054
-	ld a, d
-	inc a
-	ld [hl], a
-.asm_91054
-	dec [hl]
-
-.done
-	ld a, [wc6d7]
-	call Function910b4
-	ld a, [wc6d5]
-	ld c, a
-	ld a, [wc6d6]
-	ld b, a
-	ld a, [wc6d7]
-	call Function910d4
-	ret
-
-Function9106a: ; 9106a
-	push af
-	ld de, 0
-	ld b, $a
-	ld a, [PlayerGender]
-	bit 0, a
-	jr z, .asm_91079
-	ld b, $1e
-
-.asm_91079
-	ld a, b
-	call Function3b2a
-	ld hl, $3
-	add hl, bc
-	ld [hl], $10
-	pop af
-	ld e, a
-	push bc
-	callba GetLandmarkCoords
-	pop bc
-	ld hl, $4
-	add hl, bc
-	ld [hl], e
-	ld hl, $5
-	add hl, bc
-	ld [hl], d
-	ret
-; 91098
-
-Function91098: ; 91098
-	push af
-	ld de, 0
-	ld a, $d
-	call Function3b2a
-	ld hl, $3
-	add hl, bc
-	ld [hl], $4
-	ld hl, $2
-	add hl, bc
-	ld [hl], $0
-	pop af
-	push bc
-	call Function910d4
-	pop bc
-	ret
-; 910b4
-
-Function910b4: ; 910b4
-	push af
-	hlcoord 8, 0
-	lb bc, 2, 12
-	call ClearBox
-	pop af
-	ld e, a
-	push de
-	callba GetLandmarkName
-	pop de
-	callba Function1de2c5
-	hlcoord 8, 0
-	ld [hl], $34
-	ret
-; 910d4
-
-Function910d4: ; 910d4
-	push bc
-	ld e, a
-	callba GetLandmarkCoords
-	pop bc
-	ld hl, $4
-	add hl, bc
-	ld [hl], e
-	ld hl, $5
-	add hl, bc
-	ld [hl], d
-	ret
-; 910e8
-
-Function910e8: ; 910e8
-	ld a, [StatusFlags]
-	bit 6, a
-	jr z, .asm_910f4
-	ld d, $5e
-	ld e, $2f
-	ret
-
-.asm_910f4
-	ld d, $5e
-	ld e, $58
-	ret
-; 910f9
-
-
-Function910f9: ; 910f9 (24:50f9)
-	call Function90da8
-	ld de, $2454
-	ld a, $14
-	call Function3b2a
-	ld hl, $3
-	add hl, bc
-	ld [hl], $8
-	call _UpdateRadioStation
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-
-Function91112: ; 91112 (24:5112)
-	ld hl, hJoyLast
-	ld a, [hl]
-	and B_BUTTON
-	jr nz, .cancel
-	ld a, [hl]
-	and D_LEFT
-	jr nz, .left
-	ld a, [wc6da]
-	ld l, a
-	ld a, [wc6db]
-	ld h, a
-	ld a, [wc6d9]
-	and a
-	ret z
-	rst FarCall
-	ret
-
-.left
-	ld a, [wPokegearFlags]
-	bit 2, a
-	jr z, .asm_9113b
-	ld c, $7
-	ld b, $2
-	jr .asm_9114c
-
-.asm_9113b
-	ld a, [wPokegearFlags]
-	bit 0, a
-	jr z, .asm_91148
-	ld c, $2
-	ld b, $1
-	jr .asm_9114c
-
-.asm_91148
-	ld c, $0
-	ld b, $0
-.asm_9114c
-	call Function91480
-	ret
-
-.cancel
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-Function91156: ; 91156 (24:5156)
-	ld hl, wJumptableIndex
-	inc [hl]
-	xor a
-	ld [wc6d2], a
-	ld [wc6d1], a
-	ld [wc6d3], a
-	call Function90da8
-	call Function91492
-	ld hl, UnknownText_0x914ce
-	call PrintText
-	ret
-
-Function91171: ; 91171 (24:5171)
-	ld hl, hJoyPressed
-	ld a, [hl]
-	and B_BUTTON
-	jr nz, .b
-	ld a, [hl]
-	and A_BUTTON
-	jr nz, .a
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_LEFT
-	jr nz, .left
-	ld a, [hl]
-	and D_RIGHT
-	jr nz, .right
-	call Function9126d
-	ret
-
-.left
-	ld a, [wPokegearFlags]
-	bit 0, a
-	jr z, .asm_9119c
-	ld c, $2
-	ld b, $1
-	jr .asm_911ac
-.asm_9119c
-	ld c, $0
-	ld b, $0
-	jr .asm_911ac
-
-.right
-	ld a, [wPokegearFlags]
-	bit 1, a
-	ret z
-	ld c, $b
-	ld b, $3
-.asm_911ac
-	call Function91480
-	ret
-
-.b
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-.a
-	ld hl, wPhoneList
-	ld a, [wc6d2]
-	ld e, a
-	ld d, 0
-	add hl, de
-	ld a, [wc6d1]
-	ld e, a
-	ld d, 0
-	add hl, de
-	ld a, [hl]
-	and a
-	ret z
-
-	ld [wc6d3], a
-	hlcoord 1, 4
-	ld a, [wc6d1]
-	ld bc, 20 * 2
-	call AddNTimes
-	ld [hl], "▷"
-	call Function91342
-	jr c, .asm_911e5
-
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-
-.asm_911e5
-	ld a, $8
-	ld [wJumptableIndex], a
-	ret
-
-Function911eb: ; 911eb (24:51eb)
-	call GetMapHeaderPhoneServiceNybble
-	and a
-	jr nz, .asm_91234
-	ld hl, Options
-	res NO_TEXT_SCROLL, [hl]
-	xor a
-	ld [hInMenu], a
-	ld de, SFX_CALL
-	call PlaySFX
-	ld hl, UnknownText_0x9124c
-	call PrintText
-	call WaitSFX
-	ld de, SFX_CALL
-	call PlaySFX
-	ld hl, UnknownText_0x9124c
-	call PrintText
-	call WaitSFX
-	ld a, [wc6d3]
-	ld b, a
-	call Function90199
-	ld c, 10
-	call DelayFrames
-	ld hl, Options
-	set NO_TEXT_SCROLL, [hl]
-	ld a, $1
-	ld [hInMenu], a
-	call Function912b7
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-.asm_91234
-	callba Phone_NoSignal
-	ld hl, OutOfServiceAreaText
-	call PrintText
-	ld a, $8
-	ld [wJumptableIndex], a
-	ld hl, UnknownText_0x914ce
-	call PrintText
-	ret
-; 9124c (24:524c)
-
-UnknownText_0x9124c: ; 0x9124c
-	;
-	text_jump UnknownText_0x1c5824
-	db "@"
-; 0x91251
-
-OutOfServiceAreaText: ; 0x91251
-	; You're out of the service area.
-	text_jump UnknownText_0x1c5827
-	db "@"
-; 0x91256
-
-Function91256: ; 91256 (24:5256)
-	ld a, [hJoyPressed]
-	and A_BUTTON | B_BUTTON
-	ret z
-	callba HangUp
-	ld a, $8
-	ld [wJumptableIndex], a
-	ld hl, UnknownText_0x914ce
-	call PrintText
-	ret
-
-Function9126d: ; 9126d (24:526d)
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, .up
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .down
-	ret
-
-.up
-	ld hl, wc6d1
-	ld a, [hl]
-	and a
-	jr z, .asm_91285
-	dec [hl]
-	jr .asm_912a3
-
-.asm_91285
-	ld hl, wc6d2
-	ld a, [hl]
-	and a
-	ret z
-	dec [hl]
-	jr .asm_912ad
-
-.down
-	ld hl, wc6d1
-	ld a, [hl]
-	cp $3
-	jr nc, .asm_91299
-	inc [hl]
-	jr .asm_912a3
-
-.asm_91299
-	ld hl, wc6d2
-	ld a, [hl]
-	cp $6
-	ret nc
-	inc [hl]
-	jr .asm_912ad
-
-.asm_912a3
-	xor a
-	ld [hBGMapMode], a
-	call Function912b7
-	call WaitBGMap
-	ret
-
-.asm_912ad
-	xor a
-	ld [hBGMapMode], a
-	call Function912d8
-	call WaitBGMap
-	ret
-
-Function912b7: ; 912b7 (24:52b7)
-	ld a, " "
-	hlcoord 1, 4
-	ld [hl], a
-	hlcoord 1, 6
-	ld [hl], a
-	hlcoord 1, 8
-	ld [hl], a
-	hlcoord 1, 10
-	ld [hl], a
-	hlcoord 1, 4
-	ld a, [wc6d1]
-	ld bc, $28
-	call AddNTimes
-	ld [hl], "▶"
-	ret
-
-Function912d8: ; 912d8 (24:52d8)
-	hlcoord 1, 3
-	ld b, $9
-	ld a, $7f
-.asm_912df
-	ld c, $12
-.asm_912e1
-	ld [hli], a
-	dec c
-	jr nz, .asm_912e1
-rept 2
-	inc hl
-endr
-	dec b
-	jr nz, .asm_912df
-	ld a, [wc6d2]
-	ld e, a
-	ld d, $0
-	ld hl, wPhoneList
-	add hl, de
-	xor a
-	ld [wc6d0], a
-.asm_912f8
-	ld a, [hli]
-	push hl
-	push af
-	hlcoord 2, 4
-	ld a, [wc6d0]
-	ld bc, $28
-	call AddNTimes
-	ld d, h
-	ld e, l
-	pop af
-	ld b, a
-	call Function90380
-	pop hl
-	ld a, [wc6d0]
-	inc a
-	ld [wc6d0], a
-	cp $4
-	jr c, .asm_912f8
-	call Function912b7
-	ret
-; 9131e (24:531e)
-
-Function9131e: ; 9131e
-	ld hl, wPhoneList
-	ld a, [wc6d2]
-	ld e, a
-	ld d, 0
-	add hl, de
-	ld a, [wc6d1]
-	ld e, a
-	ld d, 0
-	add hl, de
-	ld [hl], 0
-	ld hl, wPhoneList
-	ld c, $a
-.asm_91336
-	ld a, [hli]
-	and a
-	jr nz, .asm_9133e
-	ld a, [hld]
-	ld [hli], a
-	ld [hl], 0
-.asm_9133e
-	dec c
-	jr nz, .asm_91336
-	ret
-; 91342
-
-Function91342: ; 91342 (24:5342)
-	ld hl, wPhoneList
-	ld a, [wc6d2]
-	ld e, a
-	ld d, 0
-	add hl, de
-	ld a, [wc6d1]
-	ld e, a
-	ld d, 0
-	add hl, de
-	ld c, [hl]
-	callba Function9038a
-	ld a, c
-	and a
-	jr z, .asm_91366
-
-	ld hl, Jumptable_91455
-	ld de, Unknown_9143f
-	jr .asm_9136c
-
-.asm_91366
-	ld hl, Jumptable_9146a
-	ld de, Unknown_9145b
-
-.asm_9136c
-	xor a
-	ld [hBGMapMode], a
-	push hl
-	push de
-	ld a, [de]
-	ld l, a
-	inc de
-	ld a, [de]
-	ld h, a
-	inc de
-	push hl
-	ld bc, hBGMapAddress + 1
-	add hl, bc
-	ld a, [de]
-	inc de
-	sla a
-	ld b, a
-	ld c, 8
-	push de
-	call TextBox
-	pop de
-	pop hl
-	inc hl
-	call PlaceString
-	pop de
-	xor a
-	ld [wc6d4], a
-	call Function9141d
-	call WaitBGMap
-
-.asm_91398
-	push de
-	call JoyTextDelay
-	pop de
-	ld hl, hJoyPressed
-	ld a, [hl]
-	and D_UP
-	jr nz, .asm_913b4
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .asm_913c1
-	ld a, [hl]
-	and A_BUTTON | B_BUTTON
-	jr nz, .asm_913d4
-	call DelayFrame
-	jr .asm_91398
-
-.asm_913b4
-	ld hl, wc6d4
-	ld a, [hl]
-	and a
-	jr z, .asm_91398
-	dec [hl]
-	call Function9141d
-	jr .asm_91398
-
-.asm_913c1
-	ld hl, 2
-	add hl, de
-	ld a, [wc6d4]
-	inc a
-	cp [hl]
-	jr nc, .asm_91398
-	ld [wc6d4], a
-	call Function9141d
-	jr .asm_91398
-
-.asm_913d4
-	xor a
-	ld [hBGMapMode], a
-	call Function912d8
-	ld a, $1
-	ld [hBGMapMode], a
-	pop hl
-	ld a, [hJoyPressed]
-	and B_BUTTON
-	jr nz, Function913f1
-
-	ld a, [wc6d4]
-	ld e, a
-	ld d, 0
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-
-Function913f1: ; 913f1
-	ld hl, UnknownText_0x914ce
-	call PrintText
-	scf
-	ret
-; 913f9 (24:53f9)
-
-Function913f9: ; 913f9
-	ld hl, UnknownText_0x914d8
-	call MenuTextBox
-	call YesNoBox
-	call ExitMenu
-	jr c, .asm_91419
-	call Function9131e
-	xor a
-	ld [hBGMapMode], a
-	call Function912d8
-	ld hl, UnknownText_0x914ce
-	call PrintText
-	call WaitBGMap
-.asm_91419
-	scf
-	ret
-; 9141b
-
-Function9141b: ; 9141b
-	and a
-	ret
-; 9141d
-
-Function9141d: ; 9141d (24:541d)
-	push de
-	ld a, [de]
-	inc de
-	ld l, a
-	ld a, [de]
-	inc de
-	ld h, a
-	ld a, [de]
-	ld c, a
-	push hl
-	ld a, " "
-	ld de, 20 * 2
-.asm_9142c
-	ld [hl], a
-	add hl, de
-	dec c
-	jr nz, .asm_9142c
-	pop hl
-	ld a, [wc6d4]
-	ld bc, 20 * 2
-	call AddNTimes
-	ld [hl], "▶"
-	pop de
-	ret
-; 9143f (24:543f)
-
-Unknown_9143f: ; 9143f
-	dwcoord 10, 6
-	db 3
-	db   "CALL"
-	next "DELETE"
-	next "CANCEL"
-	db   "@"
-; 91455
-
-Jumptable_91455: ; 91455
-	dw Function9141b
-	dw Function913f9
-	dw Function913f1
-; 9145b
-
-Unknown_9145b: ; 9145b
-	dwcoord 10, 8
-	db 2
-	db   "CALL"
-	next "CANCEL"
-	db   "@"
-; 9146a
-
-Jumptable_9146a: ; 9146a
-	dw Function9141b
-	dw Function913f1
-; 9146e
-
-
-Function9146e: ; 9146e
-	ld a, [hHours]
-	cp 12
-	jr c, .asm_9147b
-	sub 12
-	ld [wd265], a
-	scf
-	ret
-
-.asm_9147b
-	ld [wd265], a
-	and a
-	ret
-; 91480
-
-
-Function91480: ; 91480 (24:5480)
-	ld de, SFX_READ_TEXT_2
-	call PlaySFX
-	ld a, c
-	ld [wJumptableIndex], a
-	ld a, b
-	ld [wcf64], a
-	call Function914ab
-	ret
-
-Function91492: ; 91492
-	ld a, [wc6dc]
-	cp $fe
-	jr z, .asm_914a3
-	cp $ff
-	call z, EnterMapMusic
-	xor a
-	ld [wc6dc], a
-	ret
-
-.asm_914a3
-	call RestartMapMusic
-	xor a
-	ld [wc6dc], a
-	ret
-; 914ab
-
-
-Function914ab: ; 914ab (24:54ab)
-	ld hl, wc314 + 16
-	ld bc, $90
-	xor a
-	call ByteFill
-	ld a, $2
-	ld [wc3b4], a
-	ret
-
-Function914bb: ; 914bb (24:54bb)
-	hlcoord 0, 0
-.asm_914be
-	ld a, [de]
-	cp $ff
-	ret z
-	ld b, a
-	inc de
-	ld a, [de]
-	ld c, a
-	inc de
-	ld a, b
-.asm_914c8
-	ld [hli], a
-	dec c
-	jr nz, .asm_914c8
-	jr .asm_914be
-; 914ce (24:54ce)
-
-UnknownText_0x914ce: ; 0x914ce
-	; Whom do you want to call?
-	text_jump UnknownText_0x1c5847
-	db "@"
-; 0x914d3
-
-UnknownText_0x914d3: ; 0x914d3
-	; Press any button to exit.
-	text_jump UnknownText_0x1c5862
-	db "@"
-; 0x914d8
-
-UnknownText_0x914d8: ; 0x914d8
-	; Delete this stored phone number?
-	text_jump UnknownText_0x1c587d
-	db "@"
-; 0x914dd
-
-
-PokegearSpritesGFX: ; 914dd
-INCBIN "gfx/misc/pokegear_sprites.2bpp.lz"
-; 9150d
-
-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
-
-INCLUDE "engine/radio2.asm"
-
-Function9191c: ; 9191c
-	ld hl, Options
-	ld a, [hl]
-	push af
-	set 4, [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 Function8cf53
-	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 Function3200
-	ld a, [wd002]
-	call Function9106a
-	ld a, [wd003]
-	call Function91098
-	ld a, c
-	ld [wd004], a
-	ld a, b
-	ld [wd005], a
-	ld b, $2
-	call GetSGBLayout
-	call SetPalettes
-	ld a, [hCGB]
-	and a
-	jr z, .asm_9198b
-	ld a, $e4
-	call Functioncf8
-	call DelayFrame
-
-.asm_9198b
-	ld a, [wd002]
-	cp KANTO_LANDMARK
-	jr nc, .asm_9199b
-	ld d, KANTO_LANDMARK - 1
-	ld e, 1
-	call Function919b0
-	jr .asm_919a1
-
-.asm_9199b
-	call Function910e8
-	call Function919b0
-
-.asm_919a1
-	pop af
-	ld [VramState], a
-	pop af
-	ld [hInMenu], a
-	pop af
-	ld [Options], a
-	call ClearBGPalettes
-	ret
-; 919b0
-
-Function919b0: ; 919b0
-.asm_919b0
-	call JoyTextDelay
-	ld hl, hJoyPressed
-	ld a, [hl]
-	and B_BUTTON
-	ret nz
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_UP
-	jr nz, .asm_919d4
-	ld a, [hl]
-	and D_DOWN
-	jr nz, .asm_919e1
-.asm_919c7
-	push de
-	callba Function8cf69
-	pop de
-	call DelayFrame
-	jr .asm_919b0
-
-.asm_919d4
-	ld hl, wd003
-	ld a, [hl]
-	cp d
-	jr c, .asm_919de
-	ld a, e
-	dec a
-	ld [hl], a
-
-.asm_919de
-	inc [hl]
-	jr .asm_919ec
-
-.asm_919e1
-	ld hl, wd003
-	ld a, [hl]
-	cp e
-	jr nz, .asm_919eb
-	ld a, d
-	inc a
-	ld [hl], a
-
-.asm_919eb
-	dec [hl]
-
-.asm_919ec
-	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 .asm_919c7
-; 91a04
-
-Function91a04: ; 91a04
-	ld a, [wd002]
-	cp KANTO_LANDMARK
-	jr nc, .asm_91a0f
-	ld e, $0
-	jr .asm_91a11
-
-.asm_91a0f
-	ld e, $1
-
-.asm_91a11
-	callba Function91ae1
-	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]
-	push af
-	set 4, [hl]
-	call .PlayStation
-	ld c, 100
-	call DelayFrames
-.loop
-	call JoyTextDelay
-	ld a, [hJoyPressed]
-	and A_BUTTON | B_BUTTON
-	jr nz, .stop
-	ld a, [wc6da]
-	ld l, a
-	ld a, [wc6db]
-	ld h, a
-	ld a, [wc6d9]
-	and a
-	jr z, .zero
-	rst FarCall
-
-.zero
-	call DelayFrame
-	jr .loop
-
-.stop
-	pop af
-	ld [Options], a
-	call Function91492
-	ret
-; 91a87
-
-.PlayStation: ; 91a87
-	ld a, -1
-	ld [EnemyTurnsTaken], a
-	ld hl, .StationPointers
-	ld d, $0
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld de, .jump_return
-	push de
-	jp [hl]
-
-.jump_return
-	push de
-	hlcoord 0, 12
-	lb bc, 4, 18
-	call TextBox
-	hlcoord 1, 14
-	ld [hl], $72
-	pop de
-	hlcoord 2, 14
-	call PlaceString
-	ld h, b
-	ld l, c
-	ld [hl], $73
-	call WaitBGMap
-	ret
-; 91ab9
-
-.StationPointers: ; 91ab9
-	dw Function91acb
-	dw LoadStation_OaksPokemonTalk
-	dw LoadStation_PokedexShow
-	dw LoadStation_PokemonMusic
-	dw LoadStation_LuckyChannel
-	dw LoadStation_UnownRadio
-	dw LoadStation_PlacesAndPeople
-	dw LoadStation_LetsAllSing
-	dw LoadStation_RocketRadio
-; 91acb
-
-Function91acb: ; 91acb
-	call IsInJohto
-	and a
-	jr nz, .kanto
-	call UpdateTime
-	ld a, [TimeOfDay]
-	and a
-	jp z, LoadStation_PokedexShow
-	jp LoadStation_OaksPokemonTalk
-
-.kanto
-	jp LoadStation_PlacesAndPeople
-; 91ae1
-
-Function91ae1: ; 91ae1
-	ld a, e
-	and a
-	jr nz, .kanto
-	call Function91ff2
-	call FillJohtoMap
-	ret
-
-.kanto
-	call Function91ff2
-	call FillKantoMap
-	ret
-; 91af3
-
-
-INCLUDE "engine/flypoints.asm"
-
-Function92311: ; unreferenced
-	xor a
-	ld [wd002], a
-	call ClearBGPalettes
-	call ClearTileMap
-	call ClearSprites
-	ld hl, hInMenu
-	ld a, [hl]
-	push af
-	ld [hl], $1
-	xor a
-	ld [hBGMapMode], a
-	callba Function8cf53
-	call Function91ff2
-	ld de, GFX_922e1
-	ld hl, VTiles2 tile $30
-	lb bc, BANK(GFX_922e1), 6
-	call Request1bpp
-	call FillKantoMap
-	call TownMapBubble
-	call TownMapPals
-	ld hl, VBGMap1
-	call TownMapBGUpdate
-	call FillJohtoMap
-	call TownMapBubble
-	call TownMapPals
-	ld hl, VBGMap0
-	call TownMapBGUpdate
-	call TownMapMon
-	ld a, c
-	ld [wd003], a
-	ld a, b
-	ld [wd004], a
-	ld b, $2
-	call GetSGBLayout
-	call SetPalettes
-.loop
-	call JoyTextDelay
-	ld hl, hJoyPressed
-	ld a, [hl]
-	and B_BUTTON
-	jr nz, .pressedB
-	ld a, [hl]
-	and A_BUTTON
-	jr nz, .pressedA
-	call Function923b8
-	call GetMapCursorCoordinates
-	callba Function8cf69
-	call DelayFrame
-	jr .loop
-
-.pressedB
-	ld a, -1
-	jr .asm_9239f
-
-.pressedA
-	ld a, [wd002]
-	ld l, a
-	ld h, 0
-	add hl, hl
-	ld de, Flypoints + 1
-	add hl, de
-	ld a, [hl]
-
-.asm_9239f
-	ld [wd002], a
-	pop af
-	ld [hInMenu], a
-	call ClearBGPalettes
-	ld a, $90
-	ld [hWY], a
-	xor a
-	ld [hBGMapAddress], a
-	ld a, VBGMap0 / $100
-	ld [hBGMapAddress + 1], a
-	ld a, [wd002]
-	ld e, a
-	ret
-; 923b8
-
-Function923b8: ; 923b8
-	ld hl, hJoyLast
-	ld a, [hl]
-	and D_DOWN | D_RIGHT
-	jr nz, .asm_923c6
-	ld a, [hl]
-	and D_UP | D_LEFT
-	jr nz, .asm_923d3
-	ret
-
-.asm_923c6
-	ld hl, wd002
-	ld a, [hl]
-	cp FLY_INDIGO
-	jr c, .asm_923d0
-	ld [hl], -1
-.asm_923d0
-	inc [hl]
-	jr .asm_923dd
-
-.asm_923d3
-	ld hl, wd002
-	ld a, [hl]
-	and a
-	jr nz, .asm_923dc
-	ld [hl], FLY_INDIGO + 1
-.asm_923dc
-	dec [hl]
-
-.asm_923dd
-	ld a, [wd002]
-	cp KANTO_FLYPOINT
-	jr c, .johto
-
-	call FillKantoMap
-	xor a
-	ld b, $9c
-	jr .asm_923f3
-
-.johto
-	call FillJohtoMap
-	ld a, $90
-	ld b, $98
-
-.asm_923f3
-	ld [hWY], a
-	ld a, b
-	ld [hBGMapAddress + 1], a
-	call TownMapBubble
-	call WaitBGMap
-	xor a
-	ld [hBGMapMode], a
-	ret
-; 92402
-
-
 INCLUDE "data/wild/fish.asm"
 INCLUDE "engine/slot_machine.asm"
 
 
-SECTION "bank28", ROMX, BANK[$28]
+SECTION "Phone Engine", ROMX, BANK[$28]
 
 INCLUDE "engine/more_phone_scripts.asm"
 INCLUDE "engine/buena_phone_scripts.asm"
-INCLUDE "text/phone/buena.asm"
 
 
-SECTION "bank29", ROMX, BANK[$29]
+SECTION "Phone Text", ROMX, BANK[$29]
 
 INCLUDE "text/phone/anthony_overworld.asm"
 INCLUDE "text/phone/todd_overworld.asm"
@@ -46081,1096 +22676,8 @@
 
 INCLUDE "engine/radio.asm"
 
-ReadPartyMonMail: ; b9229
-	ld a, [CurPartyMon]
-	ld hl, sPartyScratch1
-	ld bc, SCRATCHMON_STRUCT_LENGTH
-	call AddNTimes
-	ld d, h
-	ld e, l
-ReadAnyMail: ; b9237
-	push de
-	call ClearBGPalettes
-	call ClearSprites
-	call ClearTileMap
-	call DisableLCD
-	call LoadFontsExtra
-	pop de
-	push de
-	ld a, BANK(sPartyScratch1)
-	call GetSRAMBank
-	callba Function1de5c8
-	call CloseSRAM
-	ld a, c
-	ld de, GFX_1de5e6
-	or a
-	jr z, .asm_b9268
-	ld de, GFX_1de9e6
-	sub $3
-	jr c, .asm_b9268
-	ld de, GFX_1dede6
+INCLUDE "gfx/mail.asm"
 
-.asm_b9268
-	ld hl, VTiles1
-	lb bc, BANK(GFX_1de5e6), $80
-	call Get1bpp
-	pop de
-	call Functionb92b8
-	call EnableLCD
-	call WaitBGMap
-	ld a, [wd1ec]
-	ld e, a
-	callba Function8cb4
-	call SetPalettes
-	xor a
-	ld [hJoyPressed], a
-	call Functionb929a
-	call ClearBGPalettes
-	call DisableLCD
-	call LoadStandardFont
-	jp EnableLCD
-; b929a
-
-Functionb929a: ; b929a
-.asm_b929a
-	call GetJoypad
-	ld a, [hJoyPressed]
-	and A_BUTTON | B_BUTTON | START
-	jr z, .asm_b929a
-	and START
-	jr nz, .asm_b92a8
-	ret
-
-.asm_b92a8
-	ld a, [wJumptableIndex]
-	push af
-	callab Function845d4
-	pop af
-	ld [wJumptableIndex], a
-	jr .asm_b929a
-; b92b8
-
-Functionb92b8: ; b92b8
-	ld h, d
-	ld l, e
-	push hl
-	ld a, $0
-	call GetSRAMBank
-	ld de, $2b
-	add hl, de
-	ld a, [hli]
-	ld [Buffer1], a
-	ld a, [hli]
-	ld [Buffer2], a
-	ld a, [hli]
-	ld [CurPartySpecies], a
-	ld b, [hl]
-	call CloseSRAM
-	ld hl, Unknown_b92f8
-	ld c, 0
-.asm_b92d9
-	ld a, [hli]
-	cp b
-	jr z, .asm_b92ea
-	cp $ff
-	jr z, .asm_b92e6
-	inc c
-rept 2
-	inc hl
-endr
-	jr .asm_b92d9
-
-.asm_b92e6
-	ld hl, Unknown_b92f8
-	inc hl
-
-.asm_b92ea
-	ld a, c
-	ld [wd1ec], a
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld de, .done
-	pop bc
-	push de
-	jp [hl]
-.done
-	ret
-; b92f8
-
-Unknown_b92f8: ; b92f8
-	dbw FLOWER_MAIL,  Functionb963e
-	dbw SURF_MAIL,    Functionb9317
-	dbw LITEBLUEMAIL, Functionb9335
-	dbw PORTRAITMAIL, Functionb96ca
-	dbw LOVELY_MAIL,  Functionb944b
-	dbw EON_MAIL,     Functionb93d2
-	dbw MORPH_MAIL,   Functionb94d6
-	dbw BLUESKY_MAIL, Functionb9582
-	dbw MUSIC_MAIL,   Functionb9710
-	dbw MIRAGE_MAIL,  Functionb9776
-	db $ff
-; b9317
-
-Functionb9317: ; b9317
-	push bc
-	ld hl, VTiles2 tile $31
-	ld de, Unknown_b9d46
-	ld c, $40
-	call Functionb9915
-	ld de, MailLaprasGFX
-	ld c, $30
-	call Functionb991e
-	ld de, Unknown_b994e
-	ld c, $8
-	call Functionb9915
-	jr Functionb9351
-
-Functionb9335: ; b9335
-	push bc
-	ld hl, VTiles2 tile $31
-	ld de, Unknown_b9dc6
-	ld c, $40
-	call Functionb9915
-	ld de, MailDratiniGFX
-	ld c, $30
-	call Functionb991e
-	ld de, Unknown_b995e
-	ld c, $8
-	call Functionb9915
-
-Functionb9351: ; b9351
-	ld de, Unknown_b9976
-	ld c, $10
-	call Functionb9915
-	ld c, $10
-	call Functionb990c
-	ld de, Unknown_b9c3e
-	ld c, $40
-	call Functionb990c
-	ld c, $40
-	call Functionb9915
-	call Functionb9858
-	hlcoord 2, 15
-	ld a, $3f
-	call Functionb98d4
-	ld a, $39
-	hlcoord 15, 14
-	call Functionb98fc
-	ld a, $44
-	hlcoord 2, 2
-	call Functionb98ee
-	hlcoord 15, 11
-	call Functionb98ee
-	ld a, $4c
-	hlcoord 3, 12
-	call Functionb98ee
-	hlcoord 15, 2
-	call Functionb98ee
-	ld a, $50
-	hlcoord 6, 3
-	call Functionb98ee
-	ld a, $40
-	hlcoord 13, 2
-	ld [hli], a
-	hlcoord 6, 14
-	ld [hl], a
-	ld a, $41
-	hlcoord 4, 5
-	ld [hli], a
-	hlcoord 17, 5
-	ld [hli], a
-	hlcoord 13, 12
-	ld [hl], a
-	ld a, $42
-	hlcoord 9, 2
-	ld [hli], a
-	hlcoord 14, 5
-	ld [hli], a
-	hlcoord 3, 10
-	ld [hl], a
-	ld a, $43
-	hlcoord 6, 11
-	ld [hli], a
-	pop hl
-	jp Functionb9803
-; b93d2
-
-Functionb93d2: ; b93d2
-	push bc
-	ld hl, VTiles2 tile $31
-	ld de, Unknown_b997e
-	ld c, $8
-	call Functionb9915
-	ld de, Unknown_b998e
-	ld c, $8
-	call Functionb990c
-	ld de, Unknown_b998e
-	ld c, $8
-	call Functionb990c
-	ld de, Unknown_b997e
-	ld c, $8
-	call Functionb9915
-	ld de, Unknown_b9d76
-	ld c, $8
-	call Functionb9915
-	ld de, MailPikaGFX
-	ld c, $30
-	call Functionb991e
-	ld hl, VTiles2 tile $3d
-	ld de, Unknown_b9c9e
-	ld c, $20
-	call Functionb990c
-	ld de, Unknown_b998e
-	ld c, $8
-	call Functionb9915
-	ld a, $31
-	hlcoord 0, 0
-	call Functionb98a8
-	hlcoord 1, 17
-	call Functionb98a8
-	ld a, $33
-	hlcoord 0, 1
-	call Functionb98ba
-	hlcoord 19, 0
-	call Functionb98ba
-	hlcoord 2, 15
-	ld a, $35
-	call Functionb98d4
-	inc a
-	hlcoord 15, 14
-	call Functionb98fc
-	call Functionb9491
-	pop hl
-	jp Functionb9803
-; b944b
-
-Functionb944b: ; b944b
-	push bc
-	ld hl, VTiles2 tile $31
-	ld de, Unknown_b9e26
-	ld c, $28
-	call Functionb9915
-	ld de, MailPoliwagGFX
-	ld c, $30
-	call Functionb991e
-	ld de, Unknown_b9966
-	ld c, $8
-	call Functionb9915
-	ld de, Unknown_b9c5e
-	ld c, $20
-	call Functionb9915
-	ld de, Unknown_b996e
-	ld c, $8
-	call Functionb990c
-	call Functionb987b
-	hlcoord 2, 15
-	ld a, $3c
-	call Functionb98d4
-	ld a, $36
-	hlcoord 15, 14
-	call Functionb98fc
-	call Functionb9491
-	pop hl
-	jp Functionb9803
-; b9491
-
-Functionb9491: ; b9491
-	ld a, $3d
-	hlcoord 2, 2
-	call Functionb98ee
-	hlcoord 16, 2
-	call Functionb98ee
-	hlcoord 9, 4
-	call Functionb98ee
-	hlcoord 2, 11
-	call Functionb98ee
-	hlcoord 6, 12
-	call Functionb98ee
-	hlcoord 12, 11
-	call Functionb98ee
-	ld a, $41
-	hlcoord 5, 4
-	ld [hl], a
-	hlcoord 6, 2
-	ld [hl], a
-	hlcoord 12, 4
-	ld [hl], a
-	hlcoord 14, 2
-	ld [hl], a
-	hlcoord 3, 13
-	ld [hl], a
-	hlcoord 9, 11
-	ld [hl], a
-	hlcoord 16, 12
-	ld [hl], a
-	ret
-; b94d6
-
-Functionb94d6: ; b94d6
-	push bc
-	ld hl, VTiles2 tile $31
-	ld bc, $28
-	call Functionb97f8
-	ld de, Unknown_b9c96
-	ld c, 8
-	call Functionb9915
-	ld de, Unknown_b9c7e
-	ld c, 8
-	call Functionb9915
-	ld de, Unknown_b993e
-	ld c, 8
-	call Functionb9915
-	ld de, Unknown_b997e
-	ld c, 8
-	call Functionb990c
-	ld de, Unknown_b9926
-	ld c, 8
-	call Functionb9915
-	ld de, MailDittoGFX
-	ld c, $30
-	call Functionb991e
-	call Functionb987b
-	ld a, $31
-	hlcoord 1, 1
-	call Functionb98ee
-	hlcoord 17, 15
-	call Functionb98ee
-	hlcoord 1, 3
-	ld [hl], a
-	hlcoord 3, 1
-	ld [hl], a
-	hlcoord 16, 16
-	ld [hl], a
-	hlcoord 18, 14
-	ld [hl], a
-	ld a, $36
-	hlcoord 1, 4
-	ld [hl], a
-	hlcoord 2, 3
-	ld [hl], a
-	hlcoord 3, 2
-	ld [hl], a
-	hlcoord 4, 1
-	ld [hl], a
-	inc a
-	hlcoord 15, 16
-	ld [hl], a
-	hlcoord 16, 15
-	ld [hl], a
-	hlcoord 17, 14
-	ld [hl], a
-	hlcoord 18, 13
-	ld [hl], a
-	inc a
-	hlcoord 2, 15
-	ld b, $e
-	call Functionb98de
-	inc a
-	hlcoord 2, 11
-	call Functionb98d4
-	hlcoord 2, 5
-	call Functionb98d4
-	inc a
-	hlcoord 6, 1
-	call Functionb98d0
-	hlcoord 1, 16
-	call Functionb98d0
-	inc a
-	hlcoord 3, 13
-	call Functionb98fc
-	pop hl
-	jp Functionb9803
-; b9582
-
-Functionb9582: ; b9582
-	push bc
-	ld hl, VTiles2 tile $31
-	ld de, Unknown_b997e
-	ld c, $8
-	call Functionb9915
-	ld a, $ff
-	ld bc, $10
-	call ByteFill
-	ld de, Unknown_b992e
-	ld c, $8
-	call Functionb991e
-	ld de, MailDragoniteGFX
-	ld c, $b8
-	call Functionb991e
-	ld de, MailCloudGFX
-	ld c, $30
-	call Functionb990c
-	ld de, Unknown_b9db6
-	ld c, $8
-	call Functionb990c
-	ld de, MailCloudGFX
-	ld c, $8
-	call Functionb990c
-	ld de, Unknown_b9d26
-	ld c, $10
-	call Functionb990c
-	ld de, Unknown_b9d3e
-	ld c, $8
-	call Functionb990c
-	ld a, $31
-	hlcoord 0, 0
-	call Functionb98dc
-	hlcoord 0, 1
-	call Functionb98e3
-	hlcoord 19, 1
-	call Functionb98e3
-	inc a
-	hlcoord 0, 17
-	call Functionb98dc
-	inc a
-	hlcoord 0, 16
-	call Functionb98dc
-	inc a
-	hlcoord 2, 2
-	call Functionb9636
-	hlcoord 3, 3
-	call Functionb9636
-	hlcoord 4, 4
-	call Functionb9636
-	dec hl
-	ld [hl], $7f
-	dec a
-	hlcoord 15, 14
-	call Functionb98ee
-	add $4
-	hlcoord 15, 16
-	ld [hli], a
-	inc a
-	ld [hl], a
-	inc a
-	push af
-	hlcoord 12, 1
-	call Functionb98fc
-	pop af
-	hlcoord 15, 4
-	call Functionb98fc
-	inc a
-	hlcoord 2, 11
-	call Functionb98d4
-	inc a
-	hlcoord 10, 3
-	call Functionb98ee
-	pop hl
-	jp Functionb9803
-; b9636
-
-Functionb9636: ; b9636
-	ld b, $6
-.asm_b9638
-	ld [hli], a
-	inc a
-	dec b
-	jr nz, .asm_b9638
-	ret
-; b963e
-
-Functionb963e: ; b963e
-	push bc
-	ld hl, VTiles2 tile $31
-	ld de, Unknown_b9d86
-	ld c, $40
-	call Functionb990c
-	ld de, MailOddishGFX
-	ld c, $20
-	call Functionb991e
-	ld de, Unknown_b9db6
-	ld c, $8
-	call Functionb9915
-	ld de, Unknown_b9cbe
-	ld c, $20
-	call Functionb990c
-	ld c, $20
-	call Functionb9915
-	call Functionb9858
-	hlcoord 2, 15
-	ld a, $3d
-	call Functionb98d4
-	ld a, $39
-	hlcoord 16, 13
-	call Functionb98ee
-	hlcoord 2, 13
-	call Functionb98ee
-	ld a, $3e
-	hlcoord 2, 2
-	call Functionb98ee
-	hlcoord 5, 3
-	call Functionb98ee
-	hlcoord 10, 2
-	call Functionb98ee
-	hlcoord 16, 3
-	call Functionb98ee
-	hlcoord 5, 11
-	call Functionb98ee
-	hlcoord 16, 10
-	call Functionb98ee
-	ld a, $42
-	hlcoord 3, 4
-	call Functionb98ee
-	hlcoord 12, 3
-	call Functionb98ee
-	hlcoord 14, 2
-	call Functionb98ee
-	hlcoord 2, 10
-	call Functionb98ee
-	hlcoord 14, 11
-	call Functionb98ee
-	pop hl
-	jp Functionb9803
-; b96ca
-
-Functionb96ca: ; b96ca
-	push bc
-	ld hl, VTiles2 tile $31
-	ld de, Unknown_b9e4e
-	ld c, $28
-	call Functionb9915
-	ld de, Unknown_b995e
-	ld c, $8
-	call Functionb9915
-	ld hl, VTiles2 tile $3d
-	ld de, Unknown_b9bfe
-	ld c, $20
-	call Functionb990c
-	ld de, Unknown_b9936
-	ld c, $8
-	call Functionb9915
-	call Functionb987b
-	hlcoord 8, 15
-	ld a, $36
-	ld b, $a
-	call Functionb98de
-	call Functionb9491
-	ld a, $1
-	ld [UnownLetter], a
-	hlcoord 1, 10
-	call PrepMonFrontpic
-	pop hl
-	jp Functionb9803
-; b9710
-
-Functionb9710: ; b9710
-	push bc
-	ld hl, VTiles2 tile $31
-	ld de, Unknown_b9e06
-	ld c, $20
-	call Functionb9915
-	ld de, Unknown_b993e
-	ld c, $10
-	call Functionb9915
-	ld de, Unknown_b9996
-	ld c, $30
-	call Functionb991e
-	xor a
-	ld bc, $10
-	call ByteFill
-	ld de, Unknown_b9cfe
-	ld c, $18
-	call Functionb990c
-	ld de, Unknown_b9946
-	ld c, $8
-	call Functionb990c
-	ld a, $31
-	hlcoord 0, 0
-	call Functionb98a8
-	hlcoord 1, 17
-	call Functionb98a8
-	ld a, $33
-	hlcoord 0, 1
-	call Functionb98ba
-	hlcoord 19, 0
-	call Functionb98ba
-	ld a, $35
-	hlcoord 2, 15
-	call Functionb989e
-	ld a, $37
-	hlcoord 15, 14
-	call Functionb98fc
-	call Functionb9491
-	pop hl
-	jp Functionb9803
-; b9776
-
-Functionb9776: ; b9776
-	push bc
-	ld hl, VTiles2 tile $31
-	ld bc, $28
-	call Functionb97f8
-	ld de, Unknown_b992e
-	ld c, $8
-	call Functionb9915
-	ld de, MailMewGFX
-	ld c, $90
-	call Functionb9915
-	ld de, Unknown_b9dce
-	ld c, $8
-	call Functionb990c
-	ld de, Unknown_b9df6
-	ld c, $8
-	call Functionb990c
-	call Functionb987b
-	ld a, $36
-	hlcoord 1, 16
-	call Functionb98d8
-	inc a
-	hlcoord 15, 14
-	call Functionb98fc
-	inc a
-	hlcoord 15, 16
-	ld [hli], a
-	inc a
-	ld [hl], a
-	ld a, $3f
-	hlcoord 1, 1
-	call Functionb98a8
-	ld a, $41
-	hlcoord 0, 2
-	call Functionb98b5
-	ld a, $43
-	hlcoord 19, 2
-	call Functionb98b5
-	ld a, $45
-	hlcoord 0, 1
-	ld [hl], a
-	inc a
-	hlcoord 19, 1
-	ld [hl], a
-	inc a
-	hlcoord 0, 16
-	ld [hl], a
-	inc a
-	hlcoord 19, 16
-	ld [hl], a
-	inc a
-	hlcoord 2, 5
-	call Functionb98d4
-	inc a
-	hlcoord 2, 11
-	call Functionb98d4
-	pop hl
-	jp Functionb9803
-; b97f8
-
-Functionb97f8: ; b97f8
-.asm_b97f8
-	xor a
-	ld [hli], a
-	ld a, $ff
-	ld [hli], a
-	dec bc
-	ld a, b
-	or c
-	jr nz, .asm_b97f8
-	ret
-; b9803
-
-Functionb9803: ; b9803
-	ld bc, $2f
-	ld de, wd002
-	ld a, $0
-	call GetSRAMBank
-	call CopyBytes
-	call CloseSRAM
-	ld hl, wd023
-	ld de, wd050
-	ld bc, $a
-	call CopyBytes
-	ld a, $50
-	ld [wd023], a
-	ld [wd05a], a
-	ld de, wd002
-	hlcoord 2, 7
-	call PlaceString
-	ld de, wd050
-	ld a, [de]
-	and a
-	ret z
-	ld a, [wd1ec]
-	hlcoord 8, 14
-	cp $3
-	jr z, .asm_b984b
-	hlcoord 6, 14
-	cp $6
-	jr z, .asm_b984b
-	hlcoord 5, 14
-
-.asm_b984b
-	jp PlaceString
-; b984e
-
-Functionb984e: ; b984e
-.asm_b984e
-	ld a, [hl]
-	xor $ff
-	ld [hli], a
-	dec bc
-	ld a, b
-	or c
-	jr nz, .asm_b984e
-	ret
-; b9858
-
-Functionb9858: ; b9858
-	hlcoord 0, 0
-	ld a, $31
-	ld [hli], a
-	inc a
-	call Functionb98d8
-	inc a
-	ld [hli], a
-	inc a
-	call Functionb98e3
-	ld a, $36
-	ld [hli], a
-	inc a
-	call Functionb98d8
-	hlcoord 19, 1
-	ld a, $35
-	call Functionb98e3
-	ld a, $38
-	ld [hl], a
-	ret
-; b987b
-
-Functionb987b: ; b987b
-	hlcoord 0, 0
-	ld a, $31
-	ld [hli], a
-	inc a
-	call Functionb98d8
-	ld [hl], $31
-	inc hl
-	inc a
-	call Functionb98e3
-	ld [hl], $31
-	inc hl
-	inc a
-	call Functionb98d8
-	hlcoord 19, 1
-	ld a, $35
-	call Functionb98e3
-	ld [hl], $31
-	ret
-; b989e
-
-Functionb989e: ; b989e
-	push af
-	ld b, $7
-	jr Functionb98ab
-
-Functionb98a3: ; b98a3
-	push af
-	ld b, $8
-	jr Functionb98ab
-
-Functionb98a8: ; b98a8
-	push af
-	ld b, $9
-
-Functionb98ab: ; b98ab
-	ld [hli], a
-	inc a
-	ld [hli], a
-	dec a
-	dec b
-	jr nz, Functionb98ab
-	ld [hl], a
-	pop af
-	ret
-; b98b5
-
-Functionb98b5: ; b98b5
-	push af
-	ld b, $7
-	jr Functionb98bd
-
-Functionb98ba: ; b98ba
-	push af
-	ld b, $8
-
-Functionb98bd: ; b98bd
-	ld [hl], a
-	ld de, SCREEN_WIDTH
-	add hl, de
-	inc a
-	ld [hl], a
-	add hl, de
-	dec a
-	dec b
-	jr nz, Functionb98bd
-	ld [hl], a
-	pop af
-	ret
-; b98cc
-
-Functionb98cc: ; b98cc
-	ld b, $7
-	jr Functionb98de
-
-Functionb98d0: ; b98d0
-	ld b, $d
-	jr Functionb98de
-
-Functionb98d4: ; b98d4
-	ld b, $10
-	jr Functionb98de
-
-Functionb98d8: ; b98d8
-	ld b, $12
-	jr Functionb98de
-
-Functionb98dc: ; b98dc
-	ld b, $14
-
-Functionb98de: ; b98de
-	ld [hli], a
-	dec b
-	jr nz, Functionb98de
-	ret
-; b98e3
-
-Functionb98e3: ; b98e3
-	ld b, $10
-	ld de, SCREEN_WIDTH
-.asm_b98e8
-	ld [hl], a
-	add hl, de
-	dec b
-	jr nz, .asm_b98e8
-	ret
-; b98ee
-
-Functionb98ee: ; b98ee
-	push af
-	ld [hli], a
-	inc a
-	ld [hl], a
-	ld bc, $13
-	add hl, bc
-	inc a
-	ld [hli], a
-	inc a
-	ld [hl], a
-	pop af
-	ret
-; b98fc
-
-Functionb98fc: ; b98fc
-	ld [hli], a
-	inc a
-	ld [hli], a
-	inc a
-	ld [hl], a
-	ld bc, SCREEN_HEIGHT
-	add hl, bc
-	inc a
-	ld [hli], a
-	inc a
-	ld [hli], a
-	inc a
-	ld [hl], a
-	ret
-; b990c
-
-Functionb990c: ; b990c
-.asm_b990c
-	ld a, [de]
-	inc de
-	ld [hli], a
-	xor a
-	ld [hli], a
-	dec c
-	jr nz, .asm_b990c
-	ret
-; b9915
-
-Functionb9915: ; b9915
-.asm_b9915
-	xor a
-	ld [hli], a
-	ld a, [de]
-	inc de
-	ld [hli], a
-	dec c
-	jr nz, .asm_b9915
-	ret
-; b991e
-
-Functionb991e: ; b991e
-.asm_b991e
-	ld a, [de]
-	inc de
-rept 2
-	ld [hli], a
-endr
-	dec c
-	jr nz, .asm_b991e
-	ret
-; b9926
-
-Unknown_b9926: ; b9926
-INCBIN "gfx/unknown/0b9926.1bpp"
-
-Unknown_b992e: ; b992e
-INCBIN "gfx/unknown/0b992e.1bpp"
-
-Unknown_b9936: ; b9936
-INCBIN "gfx/unknown/0b9936.1bpp"
-
-Unknown_b993e: ; b993e
-INCBIN "gfx/unknown/0b993e.1bpp"
-
-Unknown_b9946: ; b9946
-INCBIN "gfx/unknown/0b9946.1bpp"
-
-Unknown_b994e: ; b994e
-INCBIN "gfx/unknown/0b994e.1bpp"
-
-Unknown_b995e: ; b995e
-INCBIN "gfx/unknown/0b995e.1bpp"
-
-Unknown_b9966: ; b9966
-INCBIN "gfx/unknown/0b9966.1bpp"
-
-Unknown_b996e: ; b996e
-INCBIN "gfx/unknown/0b996e.1bpp"
-
-Unknown_b9976: ; b9976
-INCBIN "gfx/unknown/0b9976.1bpp"
-
-Unknown_b997e: ; b997e
-INCBIN "gfx/unknown/0b997e.1bpp"
-
-Unknown_b998e: ; b998e
-INCBIN "gfx/unknown/0b998e.1bpp"
-
-Unknown_b9996: ; b9996
-INCBIN "gfx/unknown/0b9996.1bpp"
-
-MailDratiniGFX: ; b99c6
-INCBIN "gfx/unknown/0b99c6.1bpp"
-
-MailPoliwagGFX: ; b99f6
-INCBIN "gfx/unknown/0b99f6.1bpp"
-
-MailLaprasGFX: ; b9a26
-INCBIN "gfx/unknown/0b9a26.1bpp"
-
-MailPikaGFX: ; b9a56
-INCBIN "gfx/unknown/0b9a56.1bpp"
-
-MailDittoGFX: ; b9a86
-INCBIN "gfx/unknown/0b9a86.1bpp"
-
-MailMewGFX: ; b9ab6
-INCBIN "gfx/unknown/0b9ab6.1bpp"
-
-MailDragoniteGFX: ; b9b46
-INCBIN "gfx/unknown/0b9b46.1bpp"
-
-MailSentretGFX: ; b9bce
-INCBIN "gfx/unknown/0b9bce.1bpp"
-
-Unknown_b9bee: ; b9bee
-INCBIN "gfx/unknown/0b9bee.1bpp"
-
-Unknown_b9bfe: ; b9bfe
-INCBIN "gfx/unknown/0b9bfe.1bpp"
-
-MailOddishGFX: ; b9c1e
-INCBIN "gfx/unknown/0b9c1e.1bpp"
-
-Unknown_b9c3e: ; b9c3e
-INCBIN "gfx/unknown/0b9c3e.1bpp"
-
-Unknown_b9c5e: ; b9c5e
-INCBIN "gfx/unknown/0b9c5e.1bpp"
-
-Unknown_b9c7e: ; b9c7e
-INCBIN "gfx/unknown/0b9c7e.1bpp"
-
-Unknown_b9c96: ; b9c96
-INCBIN "gfx/unknown/0b9c96.1bpp"
-
-Unknown_b9c9e: ; b9c9e
-INCBIN "gfx/unknown/0b9c9e.1bpp"
-
-Unknown_b9cbe: ; b9cbe
-INCBIN "gfx/unknown/0b9cbe.1bpp"
-
-Unknown_b9cde: ; b9cde
-INCBIN "gfx/unknown/0b9cde.1bpp"
-
-Unknown_b9cfe: ; b9cfe
-INCBIN "gfx/unknown/0b9cfe.1bpp"
-
-MailCloudGFX: ; b9d16
-INCBIN "gfx/unknown/0b9d16.1bpp"
-
-Unknown_b9d26: ; b9d26
-INCBIN "gfx/unknown/0b9d26.1bpp"
-
-Unknown_b9d3e: ; b9d3e
-INCBIN "gfx/unknown/0b9d3e.1bpp"
-
-Unknown_b9d46: ; b9d46
-INCBIN "gfx/unknown/0b9d46.1bpp"
-
-Unknown_b9d76: ; b9d76
-INCBIN "gfx/unknown/0b9d76.1bpp"
-
-Unknown_b9d86: ; b9d86
-INCBIN "gfx/unknown/0b9d86.1bpp"
-
-Unknown_b9db6: ; b9db6
-INCBIN "gfx/unknown/0b9db6.1bpp"
-
-Unknown_b9dc6: ; b9dc6
-INCBIN "gfx/unknown/0b9dc6.1bpp"
-
-Unknown_b9dce: ; b9dce
-INCBIN "gfx/unknown/0b9dce.1bpp"
-
-Unknown_b9df6: ; b9df6
-INCBIN "gfx/unknown/0b9df6.1bpp"
-
-Unknown_b9e06: ; b9e06
-INCBIN "gfx/unknown/0b9e06.1bpp"
-
-Unknown_b9e26: ; b9e26
-INCBIN "gfx/unknown/0b9e26.1bpp"
-
-Unknown_b9e4e: ; b9e4e
-INCBIN "gfx/unknown/0b9e4e.1bpp"
-
-
-ItemIsMail: ; b9e76
-	ld a, d
-	ld hl, .items
-	ld de, 1
-	jp IsInArray
-; b9e80
-
-.items
-	db FLOWER_MAIL
-	db SURF_MAIL
-	db LITEBLUEMAIL
-	db PORTRAITMAIL
-	db LOVELY_MAIL
-	db EON_MAIL
-	db MORPH_MAIL
-	db BLUESKY_MAIL
-	db MUSIC_MAIL
-	db MIRAGE_MAIL
-	db $ff
-; b9e8b
-
-
 SECTION "bank2F", ROMX, BANK[$2F]
 
 INCLUDE "engine/std_scripts.asm"
@@ -47206,7 +22713,7 @@
 	startbattle
 	returnafterbattle
 	trainerstatus SET_FLAG
-	loadvar wd04d, -1
+	loadvar wRunningTrainerBattleScript, -1
 
 AlreadyBeatenTrainerScript:
 	scripttalkafter
@@ -47364,7 +22871,7 @@
 	ld [Options], a
 
 	call WaitBGMap
-	ld b, $8
+	ld b, SCGB_08
 	call GetSGBLayout
 	call SetPalettes
 	ret
@@ -47601,4039 +23108,30 @@
 INCBIN "gfx/misc/copyright.2bpp"
 ; e41d0
 
-_OptionsMenu: ; e41d0
-	ld hl, hInMenu
-	ld a, [hl]
-	push af
-	ld [hl], $1
-	call ClearBGPalettes
-	hlcoord 0, 0
-	ld b, $10
-	ld c, $12
-	call TextBox
-	hlcoord 2, 2
-	ld de, StringOptions
-	call PlaceString
-	xor a
-	ld [wJumptableIndex], a
-	ld c, $6 ;number of items on the menu minus 1 (for cancel)
-.asm_e41f3 ;this next will display the settings of each option when the menu is opened
-	push bc
-	xor a
-	ld [hJoyLast], a
-	call GetOptionPointer
-	pop bc
-	ld hl, wJumptableIndex
-	inc [hl]
-	dec c
-	jr nz, .asm_e41f3
-	call Functione4512
-	xor a
-	ld [wJumptableIndex], a
-	inc a
-	ld [hBGMapMode], a
-	call WaitBGMap
-	ld b, $8
-	call GetSGBLayout
-	call SetPalettes
-.asm_e4217
-	call JoyTextDelay
-	ld a, [hJoyPressed]
-	and START | B_BUTTON
-	jr nz, .ExitOptions
-	call OptionsControl
-	jr c, .asm_e422a
-	call GetOptionPointer
-	jr c, .ExitOptions
+INCLUDE "engine/options_menu.asm"
+INCLUDE "engine/crystal_intro.asm"
 
-.asm_e422a
-	call Functione455c
-	ld c, 3
-	call DelayFrames
-	jr .asm_e4217
-
-.ExitOptions
-	ld de, SFX_TRANSACTION
-	call PlaySFX
-	call WaitSFX
-	pop af
-	ld [hInMenu], a
-	ret
-; e4241
-
-StringOptions: ; e4241
-	db "TEXT SPEED", $22
-	db "        :", $22
-	db "BATTLE SCENE", $22
-	db "        :", $22
-	db "BATTLE STYLE", $22
-	db "        :", $22
-	db "SOUND", $22
-	db "        :", $22
-	db "PRINT", $22
-	db "        :", $22
-	db "MENU ACCOUNT", $22
-	db "        :", $22
-	db "FRAME", $22
-	db "        :TYPE", $22
-	db "CANCEL@"
-; e42d6
-
-
-GetOptionPointer: ; e42d6
-	ld a, [wJumptableIndex] ;load the cursor position to a
-	ld e, a ;copy it to de
-	ld d, 0
-	ld hl, .Pointers
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl] ;jump to the code of the current highlighted item
-; e42e5
-
-.Pointers
-	dw Options_TextSpeed
-	dw Options_BattleScene
-	dw Options_BattleStyle
-	dw Options_Sound
-	dw Options_Print
-	dw Options_MenuAccount
-	dw Options_Frame
-	dw Options_Cancel
-; e42f5
-
-
-Options_TextSpeed: ; e42f5
-	call GetTextSpeed
-	ld a, [hJoyPressed]
-	bit 5, a
-	jr nz, .LeftPressed
-	bit 4, a
-	jr z, .NonePressed
-	ld a, c ;right pressed
-	cp $2
-	jr c, .Increase
-	ld c, $ff
-
-.Increase
-	inc c
-	ld a, e
-	jr .Save
-
-.LeftPressed
-	ld a, c
-	and a
-	jr nz, .Decrease
-	ld c, $3
-
-.Decrease
-	dec c
-	ld a, d
-
-.Save
-	ld b, a
-	ld a, [Options]
-	and $f0
-	or b
-	ld [Options], a
-
-.NonePressed
-	ld b, 0
-	ld hl, .Strings
-rept 2
-	add hl, bc
-endr
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	hlcoord 11, 3
-	call PlaceString
-	and a
-	ret
-; e4331
-
-.Strings
-	dw .Fast
-	dw .Mid
-	dw .Slow
-
-.Fast
-	db "FAST@"
-.Mid
-	db "MID @"
-.Slow
-	db "SLOW@"
-; e4346
-
-
-GetTextSpeed: ; e4346
-	ld a, [Options] ;This converts the number of frames, to 0,1,2 representing speed
-	and 7
-	cp 5 ;5 frames of delay is slow
-	jr z, .slow
-	cp 1 ;1 frame of delay is fast
-	jr z, .fast
-	ld c, 1 ;set it to mid if not one of the above
-	lb de, 1, 5
-	ret
-
-.slow
-	ld c, 2
-	lb de, 3, 1
-	ret
-
-.fast
-	ld c, 0
-	lb de, 5, 3
-	ret
-; e4365
-
-
-Options_BattleScene: ; e4365
-	ld hl, Options
-	ld a, [hJoyPressed]
-	bit 5, a
-	jr nz, .LeftPressed
-	bit 4, a
-	jr z, .NonePressed
-	bit 7, [hl]
-	jr nz, .ToggleOn
-	jr .ToggleOff
-
-.LeftPressed
-	bit 7, [hl]
-	jr z, .ToggleOff
-	jr .ToggleOn
-
-.NonePressed
-	bit 7, [hl]
-	jr z, .ToggleOn
-	jr .ToggleOff
-
-.ToggleOn
-	res 7, [hl]
-	ld de, .On
-	jr .Display
-
-.ToggleOff
-	set 7, [hl]
-	ld de, .Off
-
-.Display
-	hlcoord 11, 5
-	call PlaceString
-	and a
-	ret
-; e4398
-
-.On
-	db "ON @"
-.Off
-	db "OFF@"
-; e43a0
-
-
-Options_BattleStyle: ; e43a0
-	ld hl, Options
-	ld a, [hJoyPressed]
-	bit 5, a
-	jr nz, .LeftPressed
-	bit 4, a
-	jr z, .NonePressed
-	bit 6, [hl]
-	jr nz, .ToggleShift
-	jr .ToggleSet
-
-.LeftPressed
-	bit 6, [hl]
-	jr z, .ToggleSet
-	jr .ToggleShift
-
-.NonePressed
-	bit 6, [hl]
-	jr nz, .ToggleSet
-
-.ToggleShift
-	res 6, [hl]
-	ld de, .Shift
-	jr .Display
-
-.ToggleSet
-	set 6, [hl]
-	ld de, .Set
-
-.Display
-	hlcoord 11, 7
-	call PlaceString
-	and a
-	ret
-; e43d1
-
-.Shift
-	db "SHIFT@"
-.Set
-	db "SET  @"
-; e43dd
-
-
-Options_Sound: ; e43dd
-	ld hl, Options
-	ld a, [hJoyPressed]
-	bit 5, a
-	jr nz, .LeftPressed
-	bit 4, a
-	jr z, .NonePressed
-	bit 5, [hl]
-	jr nz, .SetMono
-	jr .SetStereo
-
-.LeftPressed
-	bit 5, [hl]
-	jr z, .SetStereo
-	jr .SetMono
-
-.NonePressed
-	bit 5, [hl]
-	jr nz, .ToggleStereo
-	jr .ToggleMono
-
-.SetMono
-	res 5, [hl]
-	call RestartMapMusic
-
-.ToggleMono
-	ld de, .Mono
-	jr .Display
-
-.SetStereo
-	set 5, [hl]
-	call RestartMapMusic
-
-.ToggleStereo
-	ld de, .Stereo
-
-.Display
-	hlcoord 11, 9
-	call PlaceString
-	and a
-	ret
-; e4416
-
-.Mono
-	db "MONO  @"
-.Stereo
-	db "STEREO@"
-; e4424
-
-
-Options_Print: ; e4424
-	call GetPrinterSetting
-	ld a, [hJoyPressed]
-	bit 5, a
-	jr nz, .LeftPressed
-	bit 4, a
-	jr z, .NonePressed
-	ld a, c
-	cp $4
-	jr c, .Increase
-	ld c, $ff
-
-.Increase
-	inc c
-	ld a, e
-	jr .Save
-
-.LeftPressed
-	ld a, c
-	and a
-	jr nz, .Decrease
-	ld c, $5
-
-.Decrease
-	dec c
-	ld a, d
-
-.Save
-	ld b, a
-	ld [GBPrinter], a
-
-.NonePressed
-	ld b, $0
-	ld hl, .Strings
-rept 2
-	add hl, bc
-endr
-	ld e, [hl]
-	inc hl
-	ld d, [hl]
-	hlcoord 11, 11
-	call PlaceString
-	and a
-	ret
-; e445a
-
-.Strings
-	dw .Lightest
-	dw .Lighter
-	dw .Normal
-	dw .Darker
-	dw .Darkest
-
-.Lightest
-	db "LIGHTEST@"
-.Lighter
-	db "LIGHTER @"
-.Normal
-	db "NORMAL  @"
-.Darker
-	db "DARKER  @"
-.Darkest
-	db "DARKEST @"
-; e4491
-
-
-GetPrinterSetting: ; e4491
-	ld a, [GBPrinter] ;converts from the stored printer setting to 0,1,2,3,4
-	and a
-	jr z, .IsLightest
-	cp $20
-	jr z, .IsLight
-	cp $60
-	jr z, .IsDark
-	cp $7f
-	jr z, .IsDarkest
-	ld c, $2 ;normal if none of the above
-	ld de, $2060 ;the 2 values next to this setting
-	ret
-
-.IsLightest
-	ld c, $0
-	ld de, $7f20 ;the 2 values next to this setting
-	ret
-
-.IsLight
-	ld c, $1
-	ld de, $40 ;the 2 values next to this setting
-	ret
-
-.IsDark
-	ld c, $3
-	ld de, $407f ;the 2 values next to this setting
-	ret
-
-.IsDarkest
-	ld c, $4
-	ld de, $6000 ;the 2 values next to this setting
-	ret
-; e44c1
-
-Options_MenuAccount: ; e44c1
-	ld hl, Options2
-	ld a, [hJoyPressed]
-	bit 5, a
-	jr nz, .LeftPressed
-	bit 4, a
-	jr z, .NonePressed
-	bit 0, [hl]
-	jr nz, .ToggleOff
-	jr .ToggleOn
-
-.LeftPressed
-	bit 0, [hl]
-	jr z, .ToggleOn
-	jr .ToggleOff
-
-.NonePressed
-	bit 0, [hl]
-	jr nz, .ToggleOn
-
-.ToggleOff
-	res 0, [hl]
-	ld de, .Off
-	jr .Display
-
-.ToggleOn
-	set 0, [hl]
-	ld de, .On
-
-.Display
-	hlcoord 11, 13
-	call PlaceString
-	and a
-	ret
-; e44f2
-
-.Off
-	db "OFF@"
-.On
-	db "ON @"
-; e44fa
-
-
-Options_Frame: ; e44fa
-	ld hl, TextBoxFrame
-	ld a, [hJoyPressed]
-	bit 5, a
-	jr nz, .LeftPressed
-	bit 4, a
-	jr nz, .RightPressed
-	and a
-	ret
-
-.RightPressed
-	ld a, [hl]
-	inc a
-	jr .Save
-
-.LeftPressed
-	ld a, [hl]
-	dec a
-
-.Save
-	and $7
-	ld [hl], a
-	; fallthrough
-; e4512
-
-Functione4512: ; e4512
-	ld a, [TextBoxFrame]
-	hlcoord 16, 15 ;where on the screen the number is drawn
-	add "1"
-	ld [hl], a
-	call LoadFontsExtra
-	and a
-	ret
-; e4520
-
-Options_Cancel: ; e4520
-	ld a, [hJoyPressed]
-	and A_BUTTON
-	jr nz, .Exit
-	and a
-	ret
-
-.Exit
-	scf
-	ret
-; e452a
-
-OptionsControl: ; e452a
-	ld hl, wJumptableIndex
-	ld a, [hJoyLast]
-	cp D_DOWN
-	jr z, .DownPressed
-	cp D_UP
-	jr z, .UpPressed
-	and a
-	ret
-
-.DownPressed
-	ld a, [hl] ;load the cursor position to a
-	cp $7 ;maximum number of items in option menu
-	jr nz, .CheckFive
-	ld [hl], $0
-	scf
-	ret
-
-.CheckFive ;I have no idea why this exists...
-	cp $5
-	jr nz, .Increase
-	ld [hl], $5
-
-.Increase
-	inc [hl]
-	scf
-	ret
-
-.UpPressed
-	ld a, [hl]
-	cp $6
-	jr nz, .NotSix
-	ld [hl], $5 ;Another thing where I'm not sure why it exists
-	scf
-	ret
-
-.NotSix
-	and a
-	jr nz, .Decrease
-	ld [hl], $8 ;number of option items +1
-
-.Decrease
-	dec [hl]
-	scf
-	ret
-; e455c
-
-Functione455c: ; e455c
-	hlcoord 1, 1
-	ld de, SCREEN_WIDTH
-	ld c, $10
-.asm_e4564
-	ld [hl], $7f
-	add hl, de
-	dec c
-	jr nz, .asm_e4564
-	hlcoord 1, 2
-	ld bc, $28
-	ld a, [wJumptableIndex]
-	call AddNTimes
-	ld [hl], $ed
-	ret
-; e4579
-
-
-Functione4579: ; e4579
-	ld de, MUSIC_NONE
-	call PlayMusic
-	call ClearBGPalettes
-	call ClearTileMap
-	ld a, VBGMap0 / $100
-	ld [hBGMapAddress + 1], a
-	xor a
-	ld [hBGMapAddress], a
-	ld [hJoyDown], a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $90
-	ld [hWY], a
-	call WaitBGMap
-	ld b, $19
-	call GetSGBLayout
-	call SetPalettes
-	ld c, 10
-	call DelayFrames
-	callab Copyright
-	call WaitBGMap
-	ld c, 100
-	call DelayFrames
-	call ClearTileMap
-	callba GBCOnlyScreen
-	call Functione45e8
-.joy_loop
-	call JoyTextDelay
-	ld a, [hJoyLast]
-	and BUTTONS
-	jr nz, .pressed_button
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .finish
-	call PlaceGameFreakPresents
-	callba Function8cf69
-	call DelayFrame
-	jr .joy_loop
-
-.pressed_button
-	call Functione465e
-	scf
-	ret
-
-.finish
-	call Functione465e
-	and a
-	ret
-; e45e8
-
-Functione45e8: ; e45e8
-	ld de, GameFreakLogo
-	ld hl, VTiles2
-	lb bc, BANK(GameFreakLogo), $1c
-	call Get1bpp
-	ld a, [rSVBK]
-	push af
-	ld a, $6
-	ld [rSVBK], a
-	ld hl, IntroLogoGFX
-	ld de, w6_d000
-	ld a, BANK(IntroLogoGFX)
-	call FarDecompress
-	ld hl, VTiles0
-	ld de, w6_d000
-	ld bc, $180
-	call Request2bpp
-	ld hl, VTiles1
-	ld de, w6_d000 + $800
-	ld bc, $180
-	call Request2bpp
-	pop af
-	ld [rSVBK], a
-	callba Function8cf53
-	ld de, $5458
-	ld a, $3
-	call Function3b2a
-	ld hl, $7
-	add hl, bc
-	ld [hl], $a0
-	ld hl, $c
-	add hl, bc
-	ld [hl], $60
-	ld hl, $d
-	add hl, bc
-	ld [hl], $30
-	xor a
-	ld [wJumptableIndex], a
-	ld [wcf64], a
-	ld [wcf65], a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $1
-	ld [hBGMapMode], a
-	ld a, $90
-	ld [hWY], a
-	ld de, $e4e4
-	call DmgToCgbObjPals
-	ret
-; e465e
-
-Functione465e: ; e465e
-	callba Function8cf53
-	call ClearTileMap
-	call ClearSprites
-	ld c, 16
-	call DelayFrames
-	ret
-; e4670
-
-PlaceGameFreakPresents: ; e4670
-	ld a, [wJumptableIndex]
-	ld e, a
-	ld d, 0
-	ld hl, .jumptable
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; e467f
-
-.jumptable: ; e467f
-	dw PlaceGameFreakPresents_0
-	dw PlaceGameFreakPresents_1
-	dw PlaceGameFreakPresents_2
-	dw PlaceGameFreakPresents_3
-; e4687
-
-PlaceGameFreakPresents_AdvanceIndex: ; e4687
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-; e468c
-
-PlaceGameFreakPresents_0: ; e468c
-	ret
-; e468d
-
-PlaceGameFreakPresents_1: ; e468d
-	ld hl, wcf65
-	ld a, [hl]
-	cp $20
-	jr nc, .PlaceGameFreak
-	inc [hl]
-	ret
-
-.PlaceGameFreak
-	ld [hl], 0
-	ld hl, .GAME_FREAK
-	decoord 5, 10
-	ld bc, .end - .GAME_FREAK
-	call CopyBytes
-	call PlaceGameFreakPresents_AdvanceIndex
-	ld de, SFX_GAME_FREAK_PRESENTS
-	call PlaySFX
-	ret
-; e46af
-
-.GAME_FREAK
-	;  G  A  M  E   _  F  R  E  A  K
-	db 0, 1, 2, 3, 13, 4, 5, 3, 1, 6
-.end
-	db "@"
-; e46ba
-
-PlaceGameFreakPresents_2: ; e46ba
-	ld hl, wcf65
-	ld a, [hl]
-	cp $40
-	jr nc, .place_presents
-	inc [hl]
-	ret
-
-.place_presents
-	ld [hl], 0
-	ld hl, .presents
-	decoord 7,11
-	ld bc, .end - .presents
-	call CopyBytes
-	call PlaceGameFreakPresents_AdvanceIndex
-	ret
-; e46d6
-
-.presents
-	db 7, 8, 9, 10, 11, 12
-.end
-	db "@"
-; e46dd
-
-PlaceGameFreakPresents_3: ; e46dd
-	ld hl, wcf65
-	ld a, [hl]
-	cp $80
-	jr nc, .finish
-	inc [hl]
-	ret
-
-.finish
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-; e46ed
-
-
-
-GameFreakLogoJumper: ; e46ed (39:46ed)
-	ld hl, $b
-	add hl, bc
-	ld e, [hl]
-	ld d, 0
-	ld hl, GameFreakLogoScenes
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-
-GameFreakLogoScenes: ; e46fd (39:46fd)
-	dw GameFreakLogoScene1
-	dw GameFreakLogoScene2
-	dw GameFreakLogoScene3
-	dw GameFreakLogoScene4
-	dw GameFreakLogoScene5
-
-
-GameFreakLogoScene1: ; e4707 (39:4707)
-	ld hl, $b
-	add hl, bc
-	inc [hl]
-	ret
-
-GameFreakLogoScene2: ; e470d (39:470d)
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	and a
-	jr z, .asm_e4747
-	ld d, a
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	and $3f
-	cp $20
-	jr nc, .asm_e4723
-	add $20
-.asm_e4723
-	ld e, a
-	callba Functionce765
-	ld hl, $7
-	add hl, bc
-	ld [hl], e
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	dec [hl]
-	and $1f
-	ret nz
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	sub $30
-	ld [hl], a
-	ld de, SFX_DITTO_BOUNCE
-	call PlaySFX
-	ret
-.asm_e4747
-	ld hl, $b
-	add hl, bc
-	inc [hl]
-	ld hl, $d
-	add hl, bc
-	ld [hl], $0
-	ld de, SFX_DITTO_POP_UP
-	call PlaySFX
-	ret
-
-GameFreakLogoScene3: ; e4759 (39:4759)
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	cp $20
-	jr nc, .asm_e4764
-	inc [hl]
-	ret
-.asm_e4764
-	ld hl, $b
-	add hl, bc
-	inc [hl]
-	ld hl, $d
-	add hl, bc
-	ld [hl], $0
-	ld de, SFX_DITTO_TRANSFORM
-	call PlaySFX
-	ret
-
-GameFreakLogoScene4: ; e4776 (39:4776)
-	ld hl, $d
-	add hl, bc
-	ld a, [hl]
-	cp $40
-	jr z, .asm_e47a3
-	inc [hl]
-	srl a
-	srl a
-	ld e, a
-	ld d, $0
-	ld hl, GameFreakLogoPalettes
-rept 2
-	add hl, de
-endr
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld a, [hli]
-	ld [OBPals + 12], a
-	ld a, [hli]
-	ld [OBPals + 13], a
-	pop af
-	ld [rSVBK], a
-	ld a, $1
-	ld [hCGBPalUpdate], a
-	ret
-.asm_e47a3
-	ld hl, $b
-	add hl, bc
-	inc [hl]
-	call PlaceGameFreakPresents_AdvanceIndex
-
-GameFreakLogoScene5: ; e47ab (39:47ab)
-	ret
-; e47ac (39:47ac)
-
-GameFreakLogoPalettes: ; e47ac
-; Ditto's color as it turns into the Game Freak logo.
-; Fade from pink to orange.
-; One color per step.
-	RGB 23, 12, 28
-	RGB 23, 12, 27
-	RGB 23, 13, 26
-	RGB 23, 13, 24
-	RGB 24, 14, 22
-	RGB 24, 14, 20
-	RGB 24, 15, 18
-	RGB 24, 15, 16
-	RGB 25, 16, 14
-	RGB 25, 16, 12
-	RGB 25, 17, 10
-	RGB 25, 17, 08
-	RGB 26, 18, 06
-	RGB 26, 18, 04
-	RGB 26, 19, 02
-	RGB 26, 19, 00
-;' e47cc
-
-GameFreakLogo: ; e47cc
-INCBIN "gfx/splash/logo.1bpp"
-; e48ac
-
-CrystalIntro: ; e48ac
-	ld a, [rSVBK]
-	push af
-	ld a, 5
-	ld [rSVBK], a
-	ld a, [hInMenu]
-	push af
-	ld a, [hVBlank]
-	push af
-	call Functione4901
-.loop: ; e48bc
-	call JoyTextDelay
-	ld a, [hJoyLast]
-	and BUTTONS
-	jr nz, .ShutOffMusic
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .done
-	call IntroSceneJumper
-	callba Function8cf69
-	call DelayFrame
-	jp .loop
-
-.ShutOffMusic
-	ld de, MUSIC_NONE
-	call PlayMusic
-
-.done
-	call ClearBGPalettes
-	call ClearSprites
-	call ClearTileMap
-	xor a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	pop af
-	ld [hVBlank], a
-	pop af
-	ld [hInMenu], a
-	pop af
-	ld [rSVBK], a
-	ret
-; e4901
-
-Functione4901: ; e4901
-	xor a
-	ld [hVBlank], a
-	ld a, $1
-	ld [hInMenu], a
-	xor a
-	ld [hMapAnims], a
-	ld [wJumptableIndex], a
-	ret
-; e490f
-
-IntroSceneJumper: ; e490f
-	ld a, [wJumptableIndex]
-	ld e, a
-	ld d, 0
-	ld hl, IntroScenes
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; e491e
-
-
-IntroScenes: ; e491e (39:491e)
-	dw IntroScene1
-	dw IntroScene2
-	dw IntroScene3
-	dw IntroScene4
-	dw IntroScene5
-	dw IntroScene6
-	dw IntroScene7
-	dw IntroScene8
-	dw IntroScene9
-	dw IntroScene10
-	dw IntroScene11
-	dw IntroScene12
-	dw IntroScene13
-	dw IntroScene14
-	dw IntroScene15
-	dw IntroScene16
-	dw IntroScene17
-	dw IntroScene18
-	dw IntroScene19
-	dw IntroScene20
-	dw IntroScene21
-	dw IntroScene22
-	dw IntroScene23
-	dw IntroScene24
-	dw IntroScene25
-	dw IntroScene26
-	dw IntroScene27
-	dw IntroScene28
-
-
-NextIntroScene: ; e4956 (39:4956)
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-
-IntroScene1: ; e495b (39:495b)
-; Setup the next scene.
-	call Functione54a3
-	call ClearSprites
-	call ClearTileMap
-	xor a
-	ld [hBGMapMode], a
-	ld a, $1
-	ld [rVBK], a
-	ld hl, IntroTilemap001
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, $0
-	ld [rVBK], a
-	ld hl, IntroUnownsGFX
-	ld de, VTiles2 tile $00
-	call Functione54c2
-	ld hl, IntroPulseGFX
-	ld de, VTiles0 tile $00
-	call Functione54c2
-	ld hl, IntroTilemap002
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, Palette_365ad
-	ld de, wMapPals
-	ld bc, $80
-	call CopyBytes
-	ld hl, Palette_365ad
-	ld de, BGPals
-	ld bc, $80
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	xor a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	callba Function8cf53
-	call Functione549e
-	xor a
-	ld [wIntroSceneFrameCounter], a
-	ld [wcf65], a
-	call NextIntroScene
-	ret
-
-IntroScene2: ; e49d6 (39:49d6)
-; First Unown (A) fades in, pulses, then fades out.
-	ld hl, wIntroSceneFrameCounter
-	ld a, [hl]
-	inc [hl]
-	cp $80
-	jr nc, .endscene
-	cp $60
-	jr nz, .DontPlaySound
-	push af
-	ld de, $5858
-	call Functione51dc
-	ld de, SFX_INTRO_UNOWN_1
-	call PlaySFX
-	pop af
-.DontPlaySound
-	ld [wcf65], a
-	xor a
-	call Functione5223
-	ret
-.endscene
-	call NextIntroScene
-	ret
-
-IntroScene3: ; e49fd (39:49fd)
-; More setup. Transition to the outdoor scene.
-	call Functione54a3
-	call ClearSprites
-	call ClearTileMap
-	xor a
-	ld [hBGMapMode], a
-	ld a, $1
-	ld [rVBK], a
-	ld hl, IntroTilemap003
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, $0
-	ld [rVBK], a
-	ld hl, IntroBackgroundGFX
-	ld de, VTiles2 tile $00
-	call Functione54c2
-	ld hl, IntroTilemap004
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, Palette_e5edd
-	ld de, wMapPals
-	ld bc, $80
-	call CopyBytes
-	ld hl, Palette_e5edd
-	ld de, BGPals
-	ld bc, $80
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	xor a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	call Functione5516
-	call Functione549e
-	xor a
-	ld [wIntroSceneFrameCounter], a
-	call NextIntroScene
-	ret
-
-IntroScene4: ; e4a69 (39:4a69)
-; Scroll the outdoor panorama for a bit.
-	call Functione552f
-	ld hl, wIntroSceneFrameCounter
-	ld a, [hl]
-	cp $80
-	jr z, .endscene
-	inc [hl]
-	ret
-.endscene
-	call NextIntroScene
-	ret
-
-IntroScene5: ; e4a7a (39:4a7a)
-; Go back to the Unown.
-	call Functione54a3
-	call ClearSprites
-	call ClearTileMap
-	xor a
-	ld [hBGMapMode], a
-	ld [hLCDStatCustom], a
-	ld a, $1
-	ld [rVBK], a
-	ld hl, IntroTilemap005
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, $0
-	ld [rVBK], a
-	ld hl, IntroUnownsGFX
-	ld de, VTiles2 tile $00
-	call Functione54c2
-	ld hl, IntroPulseGFX
-	ld de, VTiles0 tile $00
-	call Functione54c2
-	ld hl, IntroTilemap006
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, Palette_365ad
-	ld de, wMapPals
-	ld bc, $80
-	call CopyBytes
-	ld hl, Palette_365ad
-	ld de, BGPals
-	ld bc, $80
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	xor a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	callba Function8cf53
-	call Functione549e
-	xor a
-	ld [wcf64], a
-	ld [wcf65], a
-	call NextIntroScene
-	ret
-
-IntroScene6: ; e4af7 (39:4af7)
-; Two more Unown (I, H) fade in.
-	ld hl, wcf64
-	ld a, [hl]
-	inc [hl]
-	cp $80
-	jr nc, .endscene
-	cp $60
-	jr z, .SecondUnown
-	cp $40
-	jr nc, .StopUnown
-	cp $20
-	jr z, .FirstUnown
-	jr .NoUnown
-.FirstUnown
-	push af
-	ld de, $3878
-	call Functione51dc
-	ld de, SFX_INTRO_UNOWN_2
-	call PlaySFX
-	pop af
-.NoUnown
-	ld [wcf65], a
-	xor a
-	call Functione5223
-	ret
-.SecondUnown
-	push af
-	ld de, $7030
-	call Functione51dc
-	ld de, SFX_INTRO_UNOWN_1
-	call PlaySFX
-	pop af
-.StopUnown
-	ld [wcf65], a
-	ld a, $1
-	call Functione5223
-	ret
-.endscene
-	call NextIntroScene
-	ret
-
-IntroScene7: ; e4b3f (39:4b3f)
-; Back to the outdoor scene.
-	call Functione54a3
-	call ClearSprites
-	call ClearTileMap
-	xor a
-	ld [hBGMapMode], a
-	ld a, $1
-	ld [rVBK], a
-	ld hl, IntroTilemap003
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld hl, IntroPichuWooperGFX
-	ld de, VTiles0 tile $00
-	call Functione54c2
-	ld a, $0
-	ld [rVBK], a
-	ld hl, IntroSuicuneRunGFX
-	ld de, VTiles0 tile $00
-	call Functione54de
-	ld hl, IntroBackgroundGFX
-	ld de, VTiles2 tile $00
-	call Functione54c2
-	ld hl, IntroTilemap004
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, Palette_e5edd
-	ld de, wMapPals
-	ld bc, $80
-	call CopyBytes
-	ld hl, Palette_e5edd
-	ld de, BGPals
-	ld bc, $80
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	xor a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	call Functione5516
-	callba Function8cf53
-	ld de, $6cd8
-	ld a, $26
-	call Function3b2a
-	ld a, $f0
-	ld [wc3c0], a
-	call Functione549e
-	xor a
-	ld [wIntroSceneFrameCounter], a
-	ld [wcf65], a
-	call NextIntroScene
-	ret
-
-IntroScene8: ; e4bd3 (39:4bd3)
-; Scroll the scene, then show Suicune running across the screen.
-	ld hl, wIntroSceneFrameCounter
-	ld a, [hl]
-	inc [hl]
-	cp $40
-	jr z, .asm_e4be2
-	jr nc, .asm_e4be8
-	call Functione552f
-	ret
-.asm_e4be2
-	ld de, SFX_INTRO_SUICUNE_3
-	call PlaySFX
-.asm_e4be8
-	ld a, [wc3c0]
-	and a
-	jr z, .asm_e4bf4
-	sub $8
-	ld [wc3c0], a
-	ret
-.asm_e4bf4
-	ld de, SFX_INTRO_SUICUNE_2
-	call PlaySFX
-	callba Function8d03d
-	call NextIntroScene
-	ret
-
-IntroScene9: ; e4c04 (39:4c04)
-; Set up the next scene (same bg).
-	xor a
-	ld [hLCDStatCustom], a
-	call ClearSprites
-	hlcoord 0, 0, AttrMap
-	ld bc, $f0
-	ld a, $1
-	call ByteFill
-	ld bc, $3c
-	ld a, $2
-	call ByteFill
-	ld bc, $3c
-	ld a, $3
-	call ByteFill
-	ld a, $2
-	ld [hBGMapMode], a
-	call DelayFrame
-	call DelayFrame
-	call DelayFrame
-	ld a, $c
-	ld [hBGMapAddress], a
-	call DelayFrame
-	call DelayFrame
-	call DelayFrame
-	xor a
-	ld [hBGMapMode], a
-	ld [hBGMapAddress], a
-	ld [wc3c0], a
-	xor a
-	ld [wcf64], a
-	call NextIntroScene
-	ret
-
-IntroScene10: ; e4c4f (39:4c4f)
-; Wooper and Pichu enter.
-	call Functione546d
-	ld hl, wcf64
-	ld a, [hl]
-	inc [hl]
-	cp $c0
-	jr z, .done
-	cp $20
-	jr z, .wooper
-	cp $40
-	jr z, .pichu
-	ret
-
-.pichu
-	lb de, $a9, $80
-	ld a, $27
-	call Function3b2a
-	ld de, SFX_INTRO_PICHU
-	call PlaySFX
-	ret
-
-.wooper
-	lb de, $b0, $30
-	ld a, $28
-	call Function3b2a
-	ld de, SFX_INTRO_PICHU
-	call PlaySFX
-	ret
-.done
-	call NextIntroScene
-	ret
-
-IntroScene11: ; e4c86 (39:4c86)
-; Back to Unown again.
-	call Functione54a3
-	call ClearSprites
-	call ClearTileMap
-	xor a
-	ld [hBGMapMode], a
-	ld [hLCDStatCustom], a
-	ld a, $1
-	ld [rVBK], a
-	ld hl, IntroTilemap007
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, $0
-	ld [rVBK], a
-	ld hl, IntroUnownsGFX
-	ld de, VTiles2 tile $00
-	call Functione54c2
-	ld hl, IntroTilemap008
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, Palette_365ad
-	ld de, wMapPals
-	ld bc, $80
-	call CopyBytes
-	ld hl, Palette_365ad
-	ld de, BGPals
-	ld bc, $80
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	xor a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	callba Function8cf53
-	call Functione549e
-	xor a
-	ld [wIntroSceneFrameCounter], a
-	ld [wcf65], a
-	call NextIntroScene
-	ret
-
-IntroScene12: ; e4cfa (39:4cfa)
-; Even more Unown.
-	call Functione4d36
-	ld hl, wIntroSceneFrameCounter
-	ld a, [hl]
-	inc [hl]
-	cp $c0
-	jr nc, .asm_e4d32
-	cp $80
-	jr nc, .asm_e4d1d
-	ld c, a
-	and $1f
-	sla a
-	ld [wcf65], a
-	ld a, c
-	and $e0
-	srl a
-	swap a
-	call Functione5223
-	ret
-.asm_e4d1d
-	ld c, a
-	and $f
-	sla a
-	sla a
-	ld [wcf65], a
-	ld a, c
-	and $70
-	or $40
-	swap a
-	call Functione5223
-	ret
-.asm_e4d32
-	call NextIntroScene
-	ret
-
-Functione4d36: ; e4d36 (39:4d36)
-	ld a, [wIntroSceneFrameCounter]
-	ld c, a
-	ld hl, .UnownSounds
-.loop
-	ld a, [hli]
-	cp -1
-	ret z
-	cp c
-	jr z, .playsound
-rept 2
-	inc hl
-endr
-	jr .loop
-.playsound
-	ld a, [hli]
-	ld d, [hl]
-	ld e, a
-	push de
-	call SFXChannelsOff
-	pop de
-	call PlaySFX
-	ret
-; e4d54 (39:4d54)
-
-.UnownSounds: ; e4d54
-	dbw $00, SFX_INTRO_UNOWN_3
-	dbw $20, SFX_INTRO_UNOWN_2
-	dbw $40, SFX_INTRO_UNOWN_1
-	dbw $60, SFX_INTRO_UNOWN_2
-	dbw $80, SFX_INTRO_UNOWN_3
-	dbw $90, SFX_INTRO_UNOWN_2
-	dbw $a0, SFX_INTRO_UNOWN_1
-	dbw $b0, SFX_INTRO_UNOWN_2
-	db $ff
-; e4d6d
-
-IntroScene13: ; e4d6d (39:4d6d)
-; Switch scenes again.
-	call Functione54a3
-	call ClearSprites
-	call ClearTileMap
-	xor a
-	ld [hBGMapMode], a
-	ld a, $1
-	ld [rVBK], a
-	ld hl, IntroTilemap003
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, $0
-	ld [rVBK], a
-	ld hl, IntroSuicuneRunGFX
-	ld de, VTiles0 tile $00
-	call Functione54de
-	ld hl, IntroBackgroundGFX
-	ld de, VTiles2 tile $00
-	call Functione54c2
-	ld hl, IntroTilemap004
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, Palette_e5edd
-	ld de, wMapPals
-	ld bc, $80
-	call CopyBytes
-	ld hl, Palette_e5edd
-	ld de, BGPals
-	ld bc, $80
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	xor a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	callba Function8cf53
-	lb de, $6c, $58
-	ld a, $26
-	call Function3b2a
-	ld de, MUSIC_CRYSTAL_OPENING
-	call PlayMusic
-	xor a
-	ld [wc3c0], a
-	call Functione549e
-	xor a
-	ld [wcf64], a
-	ld [wcf65], a
-	call NextIntroScene
-	ret
-
-IntroScene14: ; e4dfa (39:4dfa)
-; Suicune runs then jumps.
-	ld a, [hSCX]
-	sub 10
-	ld [hSCX], a
-	ld hl, wcf64
-	ld a, [hl]
-	inc [hl]
-	cp $80
-	jr z, .done
-	cp $60
-	jr z, .jump
-	jr nc, .asm_e4e1a
-	cp $40
-	jr nc, .asm_e4e33
-	ret
-
-.jump
-	ld de, SFX_INTRO_SUICUNE_4
-	call PlaySFX
-
-.asm_e4e1a
-	ld a, $1
-	ld [wcf65], a
-	ld a, [wc3c0]
-	cp $88
-	jr c, .asm_e4e2c
-	sub $8
-	ld [wc3c0], a
-	ret
-
-.asm_e4e2c
-	callba Function8d03d
-	ret
-
-.asm_e4e33
-	ld a, [wc3c0]
-	sub $2
-	ld [wc3c0], a
-	ret
-
-.done
-	call NextIntroScene
-	ret
-
-IntroScene15: ; e4e40 (39:4e40)
-; Transition to a new scene.
-	call Functione54a3
-	call ClearSprites
-	call ClearTileMap
-	xor a
-	ld [hBGMapMode], a
-	ld a, $1
-	ld [rVBK], a
-	ld hl, IntroTilemap009
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, $0
-	ld [rVBK], a
-	ld hl, IntroSuicuneJumpGFX
-	ld de, VTiles2 tile $00
-	call Functione54c2
-	ld hl, IntroUnownBackGFX
-	ld de, VTiles0 tile $00
-	call Functione54c2
-	ld de, GFX_e7a5d
-	ld hl, VTiles1 tile $00
-	lb bc, BANK(GFX_e7a5d), 1
-	call Request2bpp
-	ld hl, IntroTilemap010
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	call Functione541b
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, Palette_e77dd
-	ld de, wMapPals
-	ld bc, $80
-	call CopyBytes
-	ld hl, Palette_e77dd
-	ld de, BGPals
-	ld bc, $80
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	xor a
-	ld [hSCX], a
-	ld a, $90
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	callba Function8cf53
-	call Functione549e
-	lb de, $40, $28
-	ld a, $2a
-	call Function3b2a
-	lb de, $60, $00
-	ld a, $2b
-	call Function3b2a
-	xor a
-	ld [wcf64], a
-	ld [wcf65], a
-	call NextIntroScene
-	ret
-
-IntroScene16: ; e4edc (39:4edc)
-; Suicune shows its face. An Unown appears in front.
-	ld hl, wcf64
-	ld a, [hl]
-	inc [hl]
-	cp $80
-	jr nc, .done
-	call Functione5441
-	ld a, [hSCY]
-	and a
-	ret z
-	add 8
-	ld [hSCY], a
-	ret
-.done
-	call NextIntroScene
-	ret
-
-IntroScene17: ; e4ef5 (39:4ef5)
-; ...
-	call Functione54a3
-	call ClearSprites
-	call ClearTileMap
-	xor a
-	ld [hBGMapMode], a
-	ld a, $1
-	ld [rVBK], a
-	ld hl, IntroTilemap011
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, $0
-	ld [rVBK], a
-	ld hl, IntroSuicuneCloseGFX
-	ld de, VTiles1 tile $00
-	call Functione54de
-	ld hl, IntroTilemap012
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, Palette_e6d6d
-	ld de, wMapPals
-	ld bc, $80
-	call CopyBytes
-	ld hl, Palette_e6d6d
-	ld de, BGPals
-	ld bc, $80
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	xor a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	callba Function8cf53
-	call Functione549e
-	xor a
-	ld [wcf64], a
-	ld [wcf65], a
-	call NextIntroScene
-	ret
-
-IntroScene18: ; e4f67 (39:4f67)
-; Suicune close up.
-	ld hl, wcf64
-	ld a, [hl]
-	inc [hl]
-	cp $60
-	jr nc, .done
-	ld a, [hSCX]
-	cp $60
-	ret z
-	add 8
-	ld [hSCX], a
-	ret
-.done
-	call NextIntroScene
-	ret
-
-IntroScene19: ; e4f7e (39:4f7e)
-; More setup.
-	call Functione54a3
-	call ClearSprites
-	call ClearTileMap
-	xor a
-	ld [hBGMapMode], a
-	ld a, $1
-	ld [rVBK], a
-	ld hl, IntroTilemap013
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, $0
-	ld [rVBK], a
-	ld hl, IntroSuicuneBackGFX
-	ld de, VTiles2 tile $00
-	call Functione54c2
-	ld hl, IntroUnownsGFX
-	ld de, VTiles1 tile $00
-	call Functione54c2
-	ld de, GFX_e7a5d
-	ld hl, VTiles1 tile $7f
-	lb bc, BANK(GFX_e7a5d), 1
-	call Request2bpp
-	ld hl, IntroTilemap014
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	call Functione541b
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, Palette_e77dd
-	ld de, wMapPals
-	ld bc, $80
-	call CopyBytes
-	ld hl, Palette_e77dd
-	ld de, BGPals
-	ld bc, $80
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	xor a
-	ld [hSCX], a
-	ld a, $d8
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	callba Function8cf53
-	ld hl, wc300
-	xor a
-	ld [hli], a
-	ld [hl], $7f
-	call Functione549e
-	lb de, $60, $00
-	ld a, $2b
-	call Function3b2a
-	xor a
-	ld [wcf64], a
-	ld [wcf65], a
-	call NextIntroScene
-	ret
-
-IntroScene20: ; e5019 (39:5019)
-; Suicune running away. A bunch of Unown appear.
-	ld hl, wcf64
-	ld a, [hl]
-	inc [hl]
-	cp $98
-	jr nc, .asm_e5059
-	cp $58
-	ret nc
-	cp $40
-	jr nc, .asm_e5032
-	cp $28
-	ret nc
-	ld a, [hSCY]
-	inc a
-	ld [hSCY], a
-	ret
-
-.asm_e5032
-	sub $18
-	ld c, a
-	and $3
-	cp $3
-	ret nz
-	ld a, c
-	and $1c
-	srl a
-	srl a
-	ld [wcf65], a
-	xor a
-	call Functione5348
-	ret
-; e5049 (39:5049)
-
-	ld a, c
-	and $1c
-	srl a
-	srl a
-	ld [wcf65], a
-	ld a, 1
-	call Functione5348
-	ret
-
-.asm_e5059
-	call NextIntroScene
-	ret
-
-IntroScene21: ; e505d (39:505d)
-; Suicune gets more distant and turns black.
-	call Functione5451
-	ld c, 3
-	call DelayFrames
-	xor a
-	ld [hBGMapMode], a
-	ld [wcf64], a
-	ld [wcf65], a
-	call NextIntroScene
-	ret
-
-IntroScene22: ; e5072 (39:5072)
-	ld hl, wcf64
-	ld a, [hl]
-	inc [hl]
-	cp $8
-	jr nc, .done
-	ret
-.done
-	callba Function8d03d
-	call NextIntroScene
-	ret
-
-IntroScene23: ; e5086 (39:5086)
-	xor a
-	ld [wcf64], a
-	call NextIntroScene
-	ret
-
-IntroScene24: ; e508e (39:508e)
-; Fade to white.
-	ld hl, wcf64
-	ld a, [hl]
-	inc [hl]
-	cp $20
-	jr nc, .done
-
-	ld c, a
-	and $3
-	ret nz
-	ld a, c
-	and $1c
-	sla a
-	call Functione5172
-	ret
-
-.done
-	ld a, $40
-	ld [wcf64], a
-	call NextIntroScene
-	ret
-
-IntroScene25: ; e50ad (39:50ad)
-; Wait around a bit.
-	ld a, [wcf64]
-	dec a
-	jr z, .done
-	ld [wcf64], a
-	ret
-.done
-	call NextIntroScene
-	ret
-
-IntroScene26: ; e50bb (39:50bb)
-; Load the final scene.
-	call ClearBGPalettes
-	call ClearSprites
-	call ClearTileMap
-	xor a
-	ld [hBGMapMode], a
-	ld a, $1
-	ld [rVBK], a
-	ld hl, IntroTilemap015
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, $0
-	ld [rVBK], a
-	ld hl, IntroCrystalUnownsGFX
-	ld de, VTiles2 tile $00
-	call Functione54c2
-	ld hl, IntroTilemap017
-	ld de, VBGMap0 tile $00
-	call Functione54fa
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, Palette_e679d
-	ld de, wMapPals
-	ld bc, $80
-	call CopyBytes
-	ld hl, Palette_e679d
-	ld de, BGPals
-	ld bc, $80
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	xor a
-	ld [hSCX], a
-	ld [hSCY], a
-	ld a, $7
-	ld [hWX], a
-	ld a, $90
-	ld [hWY], a
-	callba Function8cf53
-	call Functione549e
-	xor a
-	ld [wcf64], a
-	ld [wcf65], a
-	call NextIntroScene
-	ret
-
-IntroScene27: ; e512d (39:512d)
-; Spell out C R Y S T A L with Unown.
-	ld hl, wcf65
-	inc [hl]
-	ld hl, wcf64
-	ld a, [hl]
-	inc [hl]
-	cp $80
-	jr nc, .done
-
-	ld c, a
-	and $f
-	ld [wcf65], a
-	ld a, c
-	and $70
-	swap a
-	call Functione539d
-	ret
-
-.done
-	call NextIntroScene
-	ld a, $80
-	ld [wcf64], a
-	ret
-
-IntroScene28: ; e5152 (39:5152)
-; Cut out when the music ends, and lead into the title screen.
-	ld hl, wcf64
-	ld a, [hl]
-	and a
-	jr z, .done
-	dec [hl]
-	cp $18
-	jr z, .clear
-	cp $8
-	ret nz
-
-	ld de, SFX_UNKNOWN_CB
-	call PlaySFX
-	ret
-
-.clear
-	call ClearBGPalettes
-	ret
-
-.done
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-
-Functione5172: ; e5172 (39:5172)
-	ld hl, Unknown_e519c
-	add l
-	ld l, a
-	ld a, $0
-	adc h
-	ld h, a
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld de, BGPals
-	ld b, $8
-.asm_e5187
-	push hl
-	ld c, $8
-.asm_e518a
-	ld a, [hli]
-	ld [de], a
-	inc de
-	dec c
-	jr nz, .asm_e518a
-	pop hl
-	dec b
-	jr nz, .asm_e5187
-	pop af
-	ld [rSVBK], a
-	ld a, $1
-	ld [hCGBPalUpdate], a
-	ret
-; e519c (39:519c)
-
-Unknown_e519c: ; e519c
-; Fade to white.
-	RGB 24, 12, 09
-	RGB 31, 31, 31
-	RGB 12, 00, 31
-	RGB 00, 00, 00
-
-	RGB 31, 19, 05
-	RGB 31, 31, 31
-	RGB 15, 05, 31
-	RGB 07, 07, 07
-
-	RGB 31, 21, 09
-	RGB 31, 31, 31
-	RGB 18, 09, 31
-	RGB 11, 11, 11
-
-	RGB 31, 23, 13
-	RGB 31, 31, 31
-	RGB 21, 13, 31
-	RGB 15, 15, 15
-
-	RGB 31, 25, 17
-	RGB 31, 31, 31
-	RGB 25, 17, 31
-	RGB 19, 19, 19
-
-	RGB 31, 27, 21
-	RGB 31, 31, 31
-	RGB 27, 21, 31
-	RGB 23, 23, 23
-
-	RGB 31, 29, 25
-	RGB 31, 31, 31
-	RGB 29, 26, 31
-	RGB 27, 27, 27
-
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-; e51dc
-
-Functione51dc: ; e51dc (39:51dc)
-	push de
-	ld a, $29
-	call Function3b2a
-	ld hl, $c
-	add hl, bc
-	ld [hl], $8
-	ld a, $3c
-	call Function3b3c
-	pop de
-
-	push de
-	ld a, $29
-	call Function3b2a
-	ld hl, $c
-	add hl, bc
-	ld [hl], $18
-	ld a, $3b
-	call Function3b3c
-	pop de
-
-	push de
-	ld a, $29
-	call Function3b2a
-	ld hl, $c
-	add hl, bc
-	ld [hl], $28
-	ld a, $39
-	call Function3b3c
-	pop de
-
-	ld a, $29
-	call Function3b2a
-	ld hl, $c
-	add hl, bc
-	ld [hl], $38
-	ld a, $3a
-	call Function3b3c
-	ret
-
-Functione5223: ; e5223 (39:5223)
-rept 3
-	add a
-endr
-	ld e, a
-	ld d, $0
-	ld hl, BGPals
-	add hl, de
-rept 2
-	inc hl
-endr
-	ld a, [wcf65]
-	and $3f
-	cp $1f
-	jr z, .asm_e523e
-	jr c, .asm_e523e
-	ld c, a
-	ld a, $3f
-	sub c
-.asm_e523e
-	ld c, a
-	ld b, $0
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	push hl
-	push bc
-	ld hl, BGPals
-	ld bc, $40
-	xor a
-	call ByteFill
-	pop bc
-	pop hl
-	push hl
-	ld hl, Unknown_e5288
-rept 2
-	add hl, bc
-endr
-	ld a, [hli]
-	ld d, [hl]
-	ld e, a
-	pop hl
-	ld a, e
-	ld [hli], a
-	ld a, d
-	ld [hli], a
-	push hl
-	ld hl, Unknown_e52c8
-rept 2
-	add hl, bc
-endr
-	ld a, [hli]
-	ld d, [hl]
-	ld e, a
-	pop hl
-	ld a, e
-	ld [hli], a
-	ld a, d
-	ld [hli], a
-	push hl
-	ld hl, Unknown_e5308
-rept 2
-	add hl, bc
-endr
-	ld a, [hli]
-	ld d, [hl]
-	ld e, a
-	pop hl
-	ld a, e
-	ld [hli], a
-	ld a, d
-	ld [hli], a
-	pop af
-	ld [rSVBK], a
-	ld a, $1
-	ld [hCGBPalUpdate], a
-	ret
-; e5288 (39:5288)
-
-Unknown_e5288: ; e5288
-; Fade between black and white.
-hue = 0
-rept 32
-	RGB hue, hue, hue
-hue = hue + 1
-endr
-; e52c8
-
-Unknown_e52c8: ; e52c8
-; Fade between black and light blue.
-hue = 0
-rept 32
-	RGB 0, hue / 2, hue
-hue = hue + 1
-endr
-; e5308
-
-Unknown_e5308: ; e5308
-; Fade between black and blue.
-hue = 0
-rept 32
-	RGB 0, 0, hue
-hue = hue + 1
-endr
-; e5348
-
-Functione5348: ; e5348 (39:5348)
-	and a
-	jr nz, .asm_e5350
-	ld hl, Palette_e538d
-	jr .asm_e5353
-.asm_e5350
-	ld hl, Palette_e5395
-.asm_e5353
-	ld a, [wcf65]
-	and $7
-rept 3
-	add a
-endr
-	ld c, a
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	push bc
-	ld de, BGPals
-	ld a, c
-	add e
-	ld e, a
-	ld a, $0
-	adc d
-	ld d, a
-	ld bc, $8
-	call CopyBytes
-	pop bc
-	ld de, wMapPals
-	ld a, c
-	add e
-	ld e, a
-	ld a, $0
-	adc d
-	ld d, a
-	ld bc, $8
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	ld a, $1
-	ld [hCGBPalUpdate], a
-	ret
-; e538d (39:538d)
-
-Palette_e538d: ; e538d
-	RGB 24, 12, 09
-	RGB 31, 31, 31
-	RGB 12, 00, 31
-	RGB 00, 00, 00
-; e5395
-
-Palette_e5395: ; e5395
-	RGB 24, 12, 09
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-; e539d
-
-Functione539d: ; e539d (39:539d)
-rept 3
-	add a
-endr
-	ld e, a
-	ld d, $0
-	ld hl, BGPals
-	add hl, de
-rept 4
-	inc hl
-endr
-	ld a, [wcf65]
-	add a
-	ld c, a
-	ld b, $0
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	push hl
-	ld hl, Palette_e53db
-	add hl, bc
-	ld a, [hli]
-	ld d, [hl]
-	ld e, a
-	pop hl
-	ld a, e
-	ld [hli], a
-	ld a, d
-	ld [hli], a
-	push hl
-	ld hl, Palette_e53fb
-	add hl, bc
-	ld a, [hli]
-	ld d, [hl]
-	ld e, a
-	pop hl
-	ld a, e
-	ld [hli], a
-	ld a, d
-	ld [hli], a
-	pop af
-	ld [rSVBK], a
-	ld a, $1
-	ld [hCGBPalUpdate], a
-	ret
-; e53db (39:53db)
-
-Palette_e53db: ; e53db
-hue = 31
-rept 8
-	RGB hue, hue, hue
-hue = hue + -1
-	RGB hue, hue, hue
-hue = hue + -2
-endr
-; e53fb
-
-Palette_e53fb: ; e53fb
-hue = 31
-rept 16
-	RGB hue, hue, hue
-hue = hue + -1
-endr
-; e541b
-
-Functione541b: ; e541b (39:541b)
-	ld a, [rSVBK]
-	push af
-	ld a, $6
-	ld [rSVBK], a
-	ld hl, w6_d000
-	decoord 0, 0
-	ld b, SCREEN_HEIGHT
-.asm_e542a
-	ld c, SCREEN_WIDTH
-.asm_e542c
-	ld a, [hli]
-	ld [de], a
-	inc de
-	dec c
-	jr nz, .asm_e542c
-	ld a, $c
-	add l
-	ld l, a
-	ld a, $0
-	adc h
-	ld h, a
-	dec b
-	jr nz, .asm_e542a
-	pop af
-	ld [rSVBK], a
-	ret
-
-Functione5441: ; e5441 (39:5441)
-	ld a, [wcf64]
-	and $3
-	jr z, Functione5451
-	cp $3
-	jr z, .asm_e544d
-	ret
-.asm_e544d
-	xor a
-	ld [hBGMapMode], a
-	ret
-
-Functione5451: ; e5451 (39:5451)
-	hlcoord 0, 0
-	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
-.asm_e5457
-	ld a, [hl]
-	and a
-	jr z, .asm_e5462
-	cp $80
-	jr nc, .asm_e5462
-	xor $8
-	ld [hl], a
-.asm_e5462
-	inc hl
-	dec bc
-	ld a, c
-	or b
-	jr nz, .asm_e5457
-	ld a, $1
-	ld [hBGMapMode], a
-	ret
-
-Functione546d: ; e546d (39:546d)
-	ld a, [wcf64]
-	cp $24
-	ret nc
-	and $c
-	srl a
-	ld e, a
-	ld d, $0
-	ld hl, Unknown_e5496
-	add hl, de
-	ld a, [hli]
-	ld [Requested2bppSource], a
-	ld a, [hli]
-	ld [Requested2bppSource + 1], a
-	ld a, (VTiles2 tile $09) % $100
-	ld [Requested2bppDest], a
-	ld a, (VTiles2 tile $09) / $100
-	ld [Requested2bppDest + 1], a
-	ld a, $4
-	ld [Requested2bpp], a
-	ret
-; e5496 (39:5496)
-
-Unknown_e5496: ; e5496
-	dw GFX_e799d
-	dw GFX_e79dd
-	dw GFX_e7a1d
-	dw GFX_e79dd
-; e549e
-
-Functione549e: ; e549e (39:549e)
-	ld a, $1
-	ld [hCGBPalUpdate], a
-	ret
-
-Functione54a3: ; e54a3 (39:54a3)
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, BGPals
-	ld bc, $80
-	xor a
-	call ByteFill
-	pop af
-	ld [rSVBK], a
-	ld a, $1
-	ld [hCGBPalUpdate], a
-	call DelayFrame
-	call DelayFrame
-	ret
-
-Functione54c2: ; e54c2 (39:54c2)
-	ld a, [rSVBK]
-	push af
-	ld a, $6
-	ld [rSVBK], a
-	push de
-	ld de, w6_d000
-	call Decompress
-	pop hl
-	ld de, w6_d000
-	ld bc, $180
-	call Request2bpp
-	pop af
-	ld [rSVBK], a
-	ret
-
-Functione54de: ; e54de (39:54de)
-	ld a, [rSVBK]
-	push af
-	ld a, $6
-	ld [rSVBK], a
-	push de
-	ld de, w6_d000
-	call Decompress
-	pop hl
-	ld de, w6_d000
-	ld bc, $1ff
-	call Request2bpp
-	pop af
-	ld [rSVBK], a
-	ret
-
-Functione54fa: ; e54fa (39:54fa)
-	ld a, [rSVBK]
-	push af
-	ld a, $6
-	ld [rSVBK], a
-	push de
-	ld de, w6_d000
-	call Decompress
-	pop hl
-	ld de, w6_d000
-	ld bc, $140
-	call Request2bpp
-	pop af
-	ld [rSVBK], a
-	ret
-
-Functione5516: ; e5516 (39:5516)
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, LYOverrides
-	ld bc, $90
-	xor a
-	call ByteFill
-	pop af
-	ld [rSVBK], a
-	ld a, $43
-	ld [hLCDStatCustom], a
-	ret
-
-Functione552f: ; e552f (39:552f)
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld a, [wcf64]
-	and $1
-	jr z, .asm_e5548
-	ld hl, LYOverrides
-	ld a, [hl]
-	inc a
-	ld bc, $5f
-	call ByteFill
-.asm_e5548
-	ld hl, LYOverrides + $5f
-	ld a, [hl]
-rept 2
-	inc a
-endr
-	ld bc, $31
-	call ByteFill
-	ld a, [LYOverrides + 0]
-	ld [hSCX], a
-	pop af
-	ld [rSVBK], a
-	ret
-
-IntroSuicuneRunGFX: ; e555d
-INCBIN "gfx/intro/suicune_run.2bpp.lz"
-; e592d
-
-IntroPichuWooperGFX: ; e592d
-INCBIN "gfx/intro/pichu_wooper.2bpp.lz"
-; e5c7d
-
-IntroBackgroundGFX: ; e5c7d
-INCBIN "gfx/intro/background.2bpp.lz"
-; e5e6d
-
-IntroTilemap004: ; e5e6d
-INCBIN "gfx/intro/004.tilemap.lz"
-; e5ecd
-
-IntroTilemap003: ; e5ecd
-INCBIN "gfx/intro/003.tilemap.lz"
-; e5edd
-
-Palette_e5edd: ; e5edd
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB  0,  4,  5
-	RGB  1,  8,  5
-	RGB  4, 12,  9
-	RGB 24, 12,  9
-	RGB  0,  4,  5
-	RGB  9,  6,  8
-	RGB  8, 16,  5
-	RGB  5, 10,  4
-	RGB 31, 31, 31
-	RGB  9,  6,  8
-	RGB 18,  9,  9
-	RGB 13,  8,  9
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB  2,  5, 22
-	RGB  1,  5, 12
-	RGB 31, 31, 31
-	RGB 31, 10, 25
-	RGB 31, 21,  0
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 21, 31
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-
-IntroUnownsGFX: ; e5f5d
-INCBIN "gfx/intro/unowns.2bpp.lz"
-; e634d
-
-IntroPulseGFX: ; e634d
-INCBIN "gfx/intro/pulse.2bpp.lz"
-; e63dd
-
-IntroTilemap002: ; e63dd
-INCBIN "gfx/intro/002.tilemap.lz"
-; e641d
-
-IntroTilemap001: ; e641d
-INCBIN "gfx/intro/001.tilemap.lz"
-; e642d
-
-IntroTilemap006: ; e642d
-INCBIN "gfx/intro/006.tilemap.lz"
-; e647d
-
-IntroTilemap005: ; e647d
-INCBIN "gfx/intro/005.tilemap.lz"
-; e649d
-
-IntroTilemap008: ; e649d
-INCBIN "gfx/intro/008.tilemap.lz"
-; e655d
-
-IntroTilemap007: ; e655d
-INCBIN "gfx/intro/007.tilemap.lz"
-; e65ad
-
-Palette_365ad: ; e65ad
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 10,  0, 10
-	RGB 19,  0, 19
-	RGB 31,  0, 31
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-
-IntroCrystalUnownsGFX: ; e662d
-INCBIN "gfx/intro/crystal_unowns.2bpp.lz"
-; e672d
-
-IntroTilemap017: ; e672d
-INCBIN "gfx/intro/017.tilemap.lz"
-; e676d
-
-IntroTilemap015: ; e676d
-INCBIN "gfx/intro/015.tilemap.lz"
-; e679d
-
-Palette_e679d: ; e679d
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-
-IntroSuicuneCloseGFX: ; e681d
-INCBIN "gfx/intro/suicune_close.2bpp.lz"
-; e6c3d
-
-IntroTilemap012: ; e6c3d
-INCBIN "gfx/intro/012.tilemap.lz"
-; e6d0d
-
-IntroTilemap011: ; e6d0d
-INCBIN "gfx/intro/011.tilemap.lz"
-; e6d6d
-
-Palette_e6d6d: ; e6d6d
-	RGB 24, 12,  9
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 24, 12,  9
-	RGB 31, 31, 31
-	RGB  8,  9, 31
-	RGB  0,  0,  0
-	RGB 24, 12,  9
-	RGB 12, 20, 31
-	RGB 19,  8, 31
-	RGB  0,  0,  0
-	RGB 12, 20, 31
-	RGB  8,  9, 31
-	RGB 19,  8, 31
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 12, 20, 31
-	RGB  8,  9, 31
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-
-IntroSuicuneJumpGFX: ; e6ded
-INCBIN "gfx/intro/suicune_jump.2bpp.lz"
-; e72ad
-
-IntroSuicuneBackGFX: ; e72ad
-INCBIN "gfx/intro/suicune_back.2bpp.lz"
-; e764d
-
-IntroTilemap010: ; e764d
-INCBIN "gfx/intro/010.tilemap.lz"
-; e76ad
-
-IntroTilemap009: ; e76ad
-INCBIN "gfx/intro/009.tilemap.lz"
-; e76bd
-
-IntroTilemap014: ; e76bd
-INCBIN "gfx/intro/014.tilemap.lz"
-; e778d
-
-IntroTilemap013: ; e778d
-INCBIN "gfx/intro/013.tilemap.lz"
-; e77dd
-
-Palette_e77dd: ; e77dd
-	RGB 24, 12,  9
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 24, 12,  9
-	RGB 31, 31, 31
-	RGB  8,  9, 31
-	RGB  0,  0,  0
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 24, 12,  9
-	RGB 31, 31, 31
-	RGB 31, 31, 31
-	RGB 12,  0, 31
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 21,  9,  0
-	RGB 21,  9,  0
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-	RGB 31, 31, 31
-	RGB 20, 20, 20
-	RGB 11, 11, 11
-	RGB  0,  0,  0
-
-IntroUnownBackGFX: ; e785d
-INCBIN "gfx/intro/unown_back.2bpp.lz"
-; e799d
-
-GFX_e799d: ; e799d
-INCBIN "gfx/unknown/0e799d.2bpp"
-GFX_e79dd: ; e79dd
-INCBIN "gfx/unknown/0e79dd.2bpp"
-GFX_e7a1d: ; e7a1d
-INCBIN "gfx/unknown/0e7a1d.2bpp"
-
-GFX_e7a5d: ; e7a5d
-INCBIN "gfx/unknown/0e7a5d.2bpp"
-
-
-
 SECTION "bank3E", ROMX, BANK[$3E]
 
-FontExtra:
-INCBIN "gfx/misc/font_extra.2bpp"
+INCLUDE "gfx/font.asm"
+INCLUDE "engine/time_capsule/conversion.asm"
 
-Font:
-INCBIN "gfx/misc/font.1bpp"
-
-FontBattleExtra:
-INCBIN "gfx/misc/font_battle_extra.2bpp"
-
-Frames: ; f8800
-INCBIN "gfx/frames/1.1bpp"
-INCBIN "gfx/frames/2.1bpp"
-INCBIN "gfx/frames/3.1bpp"
-INCBIN "gfx/frames/4.1bpp"
-INCBIN "gfx/frames/5.1bpp"
-INCBIN "gfx/frames/6.1bpp"
-INCBIN "gfx/frames/7.1bpp"
-INCBIN "gfx/frames/8.1bpp"
-INCBIN "gfx/frames/9.1bpp"
-; f89b0
-
-; TODO: Various misc graphics here.
-
-GFX_f89b0: ; f89b0
-INCBIN "gfx/unknown/0f89b0.2bpp"
-; f8a90
-
-ShinyIcon: ; f8a90
-INCBIN "gfx/stats/shiny.2bpp"
-
-GFX_f8aa0: ; f8aa0
-INCBIN "gfx/unknown/0f8aa0.2bpp"
-; f8ac0
-
-EnemyHPBarBorderGFX: ; f8ac0
-INCBIN "gfx/battle/enemy_hp_bar_border.1bpp"
-; f8ae0
-
-HPExpBarBorderGFX: ; f8ae0
-INCBIN "gfx/battle/hp_exp_bar_border.1bpp"
-; f8b10
-
-ExpBarGFX: ; f8b10
-INCBIN "gfx/battle/expbar.2bpp"
-; f8ba0
-
-TownMapGFX: ; f8ba0
-INCBIN "gfx/misc/town_map.2bpp.lz"
-; f8ea4
-
-GFX_f8ea4: ; unused
-INCBIN "gfx/unknown/0f8ea4.2bpp"
-; f8f24
-
-OverworldPhoneIconGFX: ; f8f24
-INCBIN "gfx/mobile/overworld_phone_icon.2bpp"
-; f8f34
-
-GFX_f8f34: ; unused
-INCBIN "gfx/unknown/0f8f34.2bpp"
-; f9204
-
-TextBoxSpaceGFX: ; f9204
-INCBIN "gfx/frames/space.2bpp"
-; f9214
-
-MobilePhoneTilesGFX: ; f9214
-INCBIN "gfx/mobile/phone_tiles.2bpp"
-; f9344
-
-MapEntryFrameGFX: ; f9344
-INCBIN "gfx/frames/map_entry_sign.2bpp"
-; f9424
-
-GFX_f9424: ; f9424
-INCBIN "gfx/unknown/0f9424.2bpp"
-; f9434
-
-Footprints: ; f9434
-INCBIN "gfx/misc/footprints.1bpp"
-; fb434
-
-; This and the following two functions are unreferenced.
-Unknown_fb434:
-	db 0
-
-Functionfb435: ; 4b435
-	ld a, [Unknown_fb434]
-	and a
-	jp nz, Get1bpp_2
-	jp Get1bpp
-; fb43f
-
-Functionfb43f: ; fb43f
-	ld a, [Unknown_fb434]
-	and a
-	jp nz, Get2bpp_2
-	jp Get2bpp
-; End unreferenced block
-; fb449
-
-_LoadStandardFont:: ; fb449
-	ld de, Font
-	ld hl, VTiles1
-	lb bc, BANK(Font), $80
-	ld a, [rLCDC]
-	bit 7, a
-	jp z, Copy1bpp
-
-	ld de, Font
-	ld hl, VTiles1
-	lb bc, BANK(Font), $20
-	call Get1bpp_2
-	ld de, Font + $20 * LEN_1BPP_TILE
-	ld hl, VTiles1 tile $20
-	lb bc, BANK(Font), $20
-	call Get1bpp_2
-	ld de, Font + $40 * LEN_1BPP_TILE
-	ld hl, VTiles1 tile $40
-	lb bc, BANK(Font), $20
-	call Get1bpp_2
-	ld de, Font + $60 * LEN_1BPP_TILE
-	ld hl, VTiles1 tile $60
-	lb bc, BANK(Font), $20
-	call Get1bpp_2
-	ret
-; fb48a
-
-_LoadFontsExtra1:: ; fb48a
-	ld de, MobilePhoneTilesGFX
-	ld hl, VTiles2 tile $60
-	lb bc, BANK(MobilePhoneTilesGFX), 1
-	call Get1bpp_2
-	ld de, OverworldPhoneIconGFX
-	ld hl, VTiles2 tile $62
-	lb bc, BANK(OverworldPhoneIconGFX), 1
-	call Get2bpp_2
-	ld de, FontExtra + 3 * LEN_2BPP_TILE
-	ld hl, VTiles2 tile $63
-	lb bc, BANK(FontExtra), $16
-	call Get2bpp_2
-	jr LoadFrame
-; fb4b0
-
-_LoadFontsExtra2:: ; fb4b0
-	ld de, GFX_f9424
-	ld hl, VTiles2 tile $61
-	ld b, BANK(GFX_f9424)
-	ld c, 1
-	call Get2bpp_2
-	ret
-; fb4be
-
-_LoadFontsBattleExtra:: ; fb4be
-	ld de, FontBattleExtra
-	ld hl, VTiles2 tile $60
-	lb bc, BANK(FontBattleExtra), $19
-	call Get2bpp_2
-	jr LoadFrame
-; fb4cc
-
-LoadFrame: ; fb4cc
-	ld a, [TextBoxFrame]
-	and 7
-	ld bc, TILES_PER_FRAME * LEN_1BPP_TILE
-	ld hl, Frames
-	call AddNTimes
-	ld d, h
-	ld e, l
-	ld hl, VTiles2 tile $79
-	lb bc, BANK(Frames), TILES_PER_FRAME
-	call Get1bpp_2
-	ld hl, VTiles2 tile $7f
-	ld de, TextBoxSpaceGFX
-	lb bc, BANK(TextBoxSpaceGFX), 1
-	call Get1bpp_2
-	ret
-; fb4f2
-
-LoadBattleFontsHPBar: ; fb4f2
-	ld de, FontBattleExtra
-	ld hl, VTiles2 tile $60
-	lb bc, BANK(FontBattleExtra), $c
-	call Get2bpp_2
-	ld hl, VTiles2 tile $70
-	ld de, FontBattleExtra + $10 * LEN_2BPP_TILE
-	lb bc, BANK(FontBattleExtra), 3
-	call Get2bpp_2
-	call LoadFrame
-
-LoadHPBar: ; fb50d
-	ld de, EnemyHPBarBorderGFX
-	ld hl, VTiles2 tile $6c
-	lb bc, BANK(EnemyHPBarBorderGFX), 4
-	call Get1bpp_2
-	ld de, HPExpBarBorderGFX
-	ld hl, VTiles2 tile $73
-	lb bc, BANK(HPExpBarBorderGFX), 6
-	call Get1bpp_2
-	ld de, ExpBarGFX
-	ld hl, VTiles2 tile $55
-	lb bc, BANK(ExpBarGFX), 9
-	call Get2bpp_2
-	ld de, MobilePhoneTilesGFX + 9 * LEN_2BPP_TILE
-	ld hl, VTiles2 tile $5e
-	lb bc, BANK(MobilePhoneTilesGFX), 2
-	call Get2bpp_2
-	ret
-; fb53e
-
-Functionfb53e: ; fb53e
-	call _LoadFontsBattleExtra
-	ld de, EnemyHPBarBorderGFX
-	ld hl, VTiles2 tile $6c
-	lb bc, BANK(EnemyHPBarBorderGFX), 4
-	call Get1bpp_2
-	ld de, HPExpBarBorderGFX
-	ld hl, VTiles2 tile $78
-	lb bc, BANK(HPExpBarBorderGFX), 1
-	call Get1bpp_2
-	ld de, HPExpBarBorderGFX + 3 * LEN_1BPP_TILE
-	ld hl, VTiles2 tile $76
-	lb bc, BANK(HPExpBarBorderGFX), 2
-	call Get1bpp_2
-	ld de, ExpBarGFX
-	ld hl, VTiles2 tile $55
-	lb bc, BANK(ExpBarGFX), 8
-	call Get2bpp_2
-
-Functionfb571: ; fb571
-	ld de, GFX_f89b0
-	ld hl, VTiles2 tile $31
-	lb bc, BANK(GFX_f89b0), $11
-	call Get2bpp_2
-	ret
-; fb57e
-
-; These functions seem to be related to backwards compatibility
-
-Functionfb57e: ; fb57e
-	ld a, [wd003]
-	ld hl, OTPartyMon1Species
-	call GetPartyLocation
-	push hl
-	ld a, [wd003]
-	inc a
-	ld c, a
-	ld b, 0
-	ld hl, OTPartyCount
-	add hl, bc
-	ld a, [hl]
-	pop hl
-	cp EGG
-	jr z, .asm_fb59c
-	cp [hl]
-	jr nz, .asm_fb5db
-
-.asm_fb59c
-	ld b, h
-	ld c, l
-	ld hl, MON_LEVEL
-	add hl, bc
-	ld a, [hl]
-	cp 101
-	jr nc, .asm_fb5db
-	ld a, [wLinkMode]
-	cp LINK_TIMECAPSULE
-	jr nz, .asm_fb5d9
-	ld hl, OTPartySpecies
-	ld a, [wd003]
-	ld c, a
-	ld b, 0
-	add hl, bc
-	ld a, [hl]
-
-	; Magnemite and Magneton's types changed
-	; from Electric to Electric/Steel.
-	cp MAGNEMITE
-	jr z, .asm_fb5d9
-	cp MAGNETON
-	jr z, .asm_fb5d9
-
-	ld [CurSpecies], a
-	call GetBaseData
-	ld hl, wcbea
-rept 2
-	add hl, bc
-endr
-	ld a, [BaseType1]
-	cp [hl]
-	jr nz, .asm_fb5db
-	inc hl
-	ld a, [BaseType2]
-	cp [hl]
-	jr nz, .asm_fb5db
-
-.asm_fb5d9
-	and a
-	ret
-
-.asm_fb5db
-	scf
-	ret
-; fb5dd
-
-Functionfb5dd: ; fb5dd
-	ld a, [wd002]
-	ld d, a
-	ld a, [PartyCount]
-	ld b, a
-	ld c, $0
-.asm_fb5e7
-	ld a, c
-	cp d
-	jr z, .asm_fb5f8
-	push bc
-	ld a, c
-	ld hl, PartyMon1HP
-	call GetPartyLocation
-	pop bc
-	ld a, [hli]
-	or [hl]
-	jr nz, .asm_fb60b
-
-.asm_fb5f8
-	inc c
-	dec b
-	jr nz, .asm_fb5e7
-	ld a, [wd003]
-	ld hl, OTPartyMon1HP
-	call GetPartyLocation
-	ld a, [hli]
-	or [hl]
-	jr nz, .asm_fb60b
-	scf
-	ret
-
-.asm_fb60b
-	and a
-	ret
-; fb60d
-
-Functionfb60d: ; fb60d
-	hlcoord 4, 0
-	ld de, PlayerName
-	call PlaceString
-	ld a, $14
-	ld [bc], a
-	hlcoord 4, 8
-	ld de, wd26b
-	call PlaceString
-	ld a, $14
-	ld [bc], a
-	hlcoord 7, 1
-	ld de, PartySpecies
-	call Functionfb634
-	hlcoord 7, 9
-	ld de, OTPartySpecies
-
-Functionfb634: ; fb634
-	ld c, $0
-.asm_fb636
-	ld a, [de]
-	cp $ff
-	ret z
-	ld [wd265], a
-	push bc
-	push hl
-	push de
-	push hl
-	ld a, c
-	ld [hProduct], a
-	call GetPokemonName
-	pop hl
-	call PlaceString
-	pop de
-	inc de
-	pop hl
-	ld bc, SCREEN_WIDTH
-	add hl, bc
-	pop bc
-	inc c
-	jr .asm_fb636
-; fb656
-
-KantoMonSpecials: ; fb656
-; The original special base stat for
-; each Kanto monster from Red/Blue.
-	db  65 ; BULBASAUR
-	db  80 ; IVYSAUR
-	db 100 ; VENUSAUR
-	db  50 ; CHARMANDER
-	db  65 ; CHARMELEON
-	db  85 ; CHARIZARD
-	db  50 ; SQUIRTLE
-	db  65 ; WARTORTLE
-	db  85 ; BLASTOISE
-	db  20 ; CATERPIE
-	db  25 ; METAPOD
-	db  80 ; BUTTERFREE
-	db  20 ; WEEDLE
-	db  25 ; KAKUNA
-	db  45 ; BEEDRILL
-	db  35 ; PIDGEY
-	db  50 ; PIDGEOTTO
-	db  70 ; PIDGEOT
-	db  25 ; RATTATA
-	db  50 ; RATICATE
-	db  31 ; SPEAROW
-	db  61 ; FEAROW
-	db  40 ; EKANS
-	db  65 ; ARBOK
-	db  50 ; PIKACHU
-	db  90 ; RAICHU
-	db  30 ; SANDSHREW
-	db  55 ; SANDSLASH
-	db  40 ; NIDORAN_F
-	db  55 ; NIDORINA
-	db  75 ; NIDOQUEEN
-	db  40 ; NIDORAN_M
-	db  55 ; NIDORINO
-	db  75 ; NIDOKING
-	db  60 ; CLEFAIRY
-	db  85 ; CLEFABLE
-	db  65 ; VULPIX
-	db 100 ; NINETALES
-	db  25 ; JIGGLYPUFF
-	db  50 ; WIGGLYTUFF
-	db  40 ; ZUBAT
-	db  75 ; GOLBAT
-	db  75 ; ODDISH
-	db  85 ; GLOOM
-	db 100 ; VILEPLUME
-	db  55 ; PARAS
-	db  80 ; PARASECT
-	db  40 ; VENONAT
-	db  90 ; VENOMOTH
-	db  45 ; DIGLETT
-	db  70 ; DUGTRIO
-	db  40 ; MEOWTH
-	db  65 ; PERSIAN
-	db  50 ; PSYDUCK
-	db  80 ; GOLDUCK
-	db  35 ; MANKEY
-	db  60 ; PRIMEAPE
-	db  50 ; GROWLITHE
-	db  80 ; ARCANINE
-	db  40 ; POLIWAG
-	db  50 ; POLIWHIRL
-	db  70 ; POLIWRATH
-	db 105 ; ABRA
-	db 120 ; KADABRA
-	db 135 ; ALAKAZAM
-	db  35 ; MACHOP
-	db  50 ; MACHOKE
-	db  65 ; MACHAMP
-	db  70 ; BELLSPROUT
-	db  85 ; WEEPINBELL
-	db 100 ; VICTREEBEL
-	db 100 ; TENTACOOL
-	db 120 ; TENTACRUEL
-	db  30 ; GEODUDE
-	db  45 ; GRAVELER
-	db  55 ; GOLEM
-	db  65 ; PONYTA
-	db  80 ; RAPIDASH
-	db  40 ; SLOWPOKE
-	db  80 ; SLOWBRO
-	db  95 ; MAGNEMITE
-	db 120 ; MAGNETON
-	db  58 ; FARFETCH_D
-	db  35 ; DODUO
-	db  60 ; DODRIO
-	db  70 ; SEEL
-	db  95 ; DEWGONG
-	db  40 ; GRIMER
-	db  65 ; MUK
-	db  45 ; SHELLDER
-	db  85 ; CLOYSTER
-	db 100 ; GASTLY
-	db 115 ; HAUNTER
-	db 130 ; GENGAR
-	db  30 ; ONIX
-	db  90 ; DROWZEE
-	db 115 ; HYPNO
-	db  25 ; KRABBY
-	db  50 ; KINGLER
-	db  55 ; VOLTORB
-	db  80 ; ELECTRODE
-	db  60 ; EXEGGCUTE
-	db 125 ; EXEGGUTOR
-	db  40 ; CUBONE
-	db  50 ; MAROWAK
-	db  35 ; HITMONLEE
-	db  35 ; HITMONCHAN
-	db  60 ; LICKITUNG
-	db  60 ; KOFFING
-	db  85 ; WEEZING
-	db  30 ; RHYHORN
-	db  45 ; RHYDON
-	db 105 ; CHANSEY
-	db 100 ; TANGELA
-	db  40 ; KANGASKHAN
-	db  70 ; HORSEA
-	db  95 ; SEADRA
-	db  50 ; GOLDEEN
-	db  80 ; SEAKING
-	db  70 ; STARYU
-	db 100 ; STARMIE
-	db 100 ; MR__MIME
-	db  55 ; SCYTHER
-	db  95 ; JYNX
-	db  85 ; ELECTABUZZ
-	db  85 ; MAGMAR
-	db  55 ; PINSIR
-	db  70 ; TAUROS
-	db  20 ; MAGIKARP
-	db 100 ; GYARADOS
-	db  95 ; LAPRAS
-	db  48 ; DITTO
-	db  65 ; EEVEE
-	db 110 ; VAPOREON
-	db 110 ; JOLTEON
-	db 110 ; FLAREON
-	db  75 ; PORYGON
-	db  90 ; OMANYTE
-	db 115 ; OMASTAR
-	db  45 ; KABUTO
-	db  70 ; KABUTOPS
-	db  60 ; AERODACTYL
-	db  65 ; SNORLAX
-	db 125 ; ARTICUNO
-	db 125 ; ZAPDOS
-	db 125 ; MOLTRES
-	db  50 ; DRATINI
-	db  70 ; DRAGONAIR
-	db 100 ; DRAGONITE
-	db 154 ; MEWTWO
-	db 100 ; MEW
-; fb6ed
-
-
-INCLUDE "event/name_rater.asm"
-
-
-PlaySlowCry: ; fb841
-	ld a, [ScriptVar]
-	call LoadCryHeader
-	jr c, .done
-
-	ld hl, CryPitch
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld bc, -$140
-	add hl, bc
-	ld a, l
-	ld [CryPitch], a
-	ld a, h
-	ld [CryPitch + 1], a
-	ld hl, CryLength
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ld bc, $60
-	add hl, bc
-	ld a, l
-	ld [CryLength], a
-	ld a, h
-	ld [CryLength + 1], a
-	callba _PlayCryHeader
-	call WaitSFX
-
-.done
-	ret
-; fb877
-
-Functionfb877: ; fb877
-	ld a, [hMapAnims]
-	push af
-	xor a
-	ld [hMapAnims], a
-	call LowVolume
-	call ClearBGPalettes
-	call ClearTileMap
-	call UpdateSprites
-	call ClearSprites
-	ld a, [wPokedexStatus]
-	push af
-	ld a, [hSCX]
-	add $5
-	ld [hSCX], a
-	xor a
-	ld [wPokedexStatus], a
-	callba Function41a7f
-	call WaitPressAorB_BlinkCursor
-	ld a, $1
-	ld [wPokedexStatus], a
-	callba Function4424d
-	call WaitPressAorB_BlinkCursor
-	pop af
-	ld [wPokedexStatus], a
-	call MaxVolume
-	call FadeToWhite
-	ld a, [hSCX]
-	add $fb
-	ld [hSCX], a
-	call Functionfb8c8
-	pop af
-	ld [hMapAnims], a
-	ret
-; fb8c8
-
-Functionfb8c8: ; fb8c8
-	call ClearTileMap
-	call LoadFontsExtra
-	call LoadStandardFont
-	callba Function40ab2
-	call Function3200
-	callba GetEnemyMonDVs
-	ld a, [hli]
-	ld [TempMonDVs], a
-	ld a, [hl]
-	ld [TempMonDVs + 1], a
-	ld b, $1c
-	call GetSGBLayout
-	call SetPalettes
-	ret
-; fb8f1
-
-ConvertMon_2to1: ; fb8f1
-; Takes the Gen-2 Pokemon number stored in wd265, finds it in the Pokered_MonIndices table, and returns its index in wd265.
-	push bc
-	push hl
-	ld a, [wd265]
-	ld b, a
-	ld c, 0
-	ld hl, Pokered_MonIndices
-.loop
-	inc c
-	ld a, [hli]
-	cp b
-	jr nz, .loop
-	ld a, c
-	ld [wd265], a
-	pop hl
-	pop bc
-	ret
-; fb908
-
-ConvertMon_1to2: ; fb908
-; Takes the Gen-1 Pokemon number stored in wd265 and returns the corresponding value from Pokered_MonIndices in wd265.
-	push bc
-	push hl
-	ld a, [wd265]
-	dec a
-	ld hl, Pokered_MonIndices
-	ld b, 0
-	ld c, a
-	add hl, bc
-	ld a, [hl]
-	ld [wd265], a
-	pop hl
-	pop bc
-	ret
-; fb91c
-
-Pokered_MonIndices: ; fb91c
-	db RHYDON
-	db KANGASKHAN
-	db NIDORAN_M
-	db CLEFAIRY
-	db SPEAROW
-	db VOLTORB
-	db NIDOKING
-	db SLOWBRO
-	db IVYSAUR
-	db EXEGGUTOR
-	db LICKITUNG
-	db EXEGGCUTE
-	db GRIMER
-	db GENGAR
-	db NIDORAN_F
-	db NIDOQUEEN
-	db CUBONE
-	db RHYHORN
-	db LAPRAS
-	db ARCANINE
-	db MEW
-	db GYARADOS
-	db SHELLDER
-	db TENTACOOL
-	db GASTLY
-	db SCYTHER
-	db STARYU
-	db BLASTOISE
-	db PINSIR
-	db TANGELA
-	db SCIZOR
-	db SHUCKLE
-	db GROWLITHE
-	db ONIX
-	db FEAROW
-	db PIDGEY
-	db SLOWPOKE
-	db KADABRA
-	db GRAVELER
-	db CHANSEY
-	db MACHOKE
-	db MR__MIME
-	db HITMONLEE
-	db HITMONCHAN
-	db ARBOK
-	db PARASECT
-	db PSYDUCK
-	db DROWZEE
-	db GOLEM
-	db HERACROSS
-	db MAGMAR
-	db HO_OH
-	db ELECTABUZZ
-	db MAGNETON
-	db KOFFING
-	db SNEASEL
-	db MANKEY
-	db SEEL
-	db DIGLETT
-	db TAUROS
-	db TEDDIURSA
-	db URSARING
-	db SLUGMA
-	db FARFETCH_D
-	db VENONAT
-	db DRAGONITE
-	db MAGCARGO
-	db SWINUB
-	db PILOSWINE
-	db DODUO
-	db POLIWAG
-	db JYNX
-	db MOLTRES
-	db ARTICUNO
-	db ZAPDOS
-	db DITTO
-	db MEOWTH
-	db KRABBY
-	db CORSOLA
-	db REMORAID
-	db OCTILLERY
-	db VULPIX
-	db NINETALES
-	db PIKACHU
-	db RAICHU
-	db DELIBIRD
-	db MANTINE
-	db DRATINI
-	db DRAGONAIR
-	db KABUTO
-	db KABUTOPS
-	db HORSEA
-	db SEADRA
-	db SKARMORY
-	db HOUNDOUR
-	db SANDSHREW
-	db SANDSLASH
-	db OMANYTE
-	db OMASTAR
-	db JIGGLYPUFF
-	db WIGGLYTUFF
-	db EEVEE
-	db FLAREON
-	db JOLTEON
-	db VAPOREON
-	db MACHOP
-	db ZUBAT
-	db EKANS
-	db PARAS
-	db POLIWHIRL
-	db POLIWRATH
-	db WEEDLE
-	db KAKUNA
-	db BEEDRILL
-	db HOUNDOOM
-	db DODRIO
-	db PRIMEAPE
-	db DUGTRIO
-	db VENOMOTH
-	db DEWGONG
-	db KINGDRA
-	db PHANPY
-	db CATERPIE
-	db METAPOD
-	db BUTTERFREE
-	db MACHAMP
-	db DONPHAN
-	db GOLDUCK
-	db HYPNO
-	db GOLBAT
-	db MEWTWO
-	db SNORLAX
-	db MAGIKARP
-	db PORYGON2
-	db STANTLER
-	db MUK
-	db SMEARGLE
-	db KINGLER
-	db CLOYSTER
-	db TYROGUE
-	db ELECTRODE
-	db CLEFABLE
-	db WEEZING
-	db PERSIAN
-	db MAROWAK
-	db HITMONTOP
-	db HAUNTER
-	db ABRA
-	db ALAKAZAM
-	db PIDGEOTTO
-	db PIDGEOT
-	db STARMIE
-	db BULBASAUR
-	db VENUSAUR
-	db TENTACRUEL
-	db SMOOCHUM
-	db GOLDEEN
-	db SEAKING
-	db ELEKID
-	db MAGBY
-	db MILTANK
-	db BLISSEY
-	db PONYTA
-	db RAPIDASH
-	db RATTATA
-	db RATICATE
-	db NIDORINO
-	db NIDORINA
-	db GEODUDE
-	db PORYGON
-	db AERODACTYL
-	db RAIKOU
-	db MAGNEMITE
-	db ENTEI
-	db SUICUNE
-	db CHARMANDER
-	db SQUIRTLE
-	db CHARMELEON
-	db WARTORTLE
-	db CHARIZARD
-	db LARVITAR
-	db PUPITAR
-	db TYRANITAR
-	db LUGIA
-	db ODDISH
-	db GLOOM
-	db VILEPLUME
-	db BELLSPROUT
-	db WEEPINBELL
-	db VICTREEBEL
-	db CHIKORITA
-	db BAYLEEF
-	db MEGANIUM
-	db CYNDAQUIL
-	db QUILAVA
-	db TYPHLOSION
-	db TOTODILE
-	db CROCONAW
-	db FERALIGATR
-	db SENTRET
-	db FURRET
-	db HOOTHOOT
-	db NOCTOWL
-	db LEDYBA
-	db LEDIAN
-	db SPINARAK
-	db ARIADOS
-	db CROBAT
-	db CHINCHOU
-	db LANTURN
-	db PICHU
-	db CLEFFA
-	db IGGLYBUFF
-	db TOGEPI
-	db TOGETIC
-	db NATU
-	db XATU
-	db MAREEP
-	db FLAAFFY
-	db AMPHAROS
-	db BELLOSSOM
-	db MARILL
-	db AZUMARILL
-	db SUDOWOODO
-	db POLITOED
-	db HOPPIP
-	db SKIPLOOM
-	db JUMPLUFF
-	db AIPOM
-	db SUNKERN
-	db SUNFLORA
-	db YANMA
-	db WOOPER
-	db QUAGSIRE
-	db ESPEON
-	db UMBREON
-	db MURKROW
-	db SLOWKING
-	db MISDREAVUS
-	db UNOWN
-	db WOBBUFFET
-	db GIRAFARIG
-	db PINECO
-	db FORRETRESS
-	db DUNSPARCE
-	db GLIGAR
-	db STEELIX
-	db SNUBBULL
-	db GRANBULL
-	db QWILFISH
-	db WOBBUFFET
-	db WOBBUFFET
-; fba18
-
-
-Functionfba18: ; fba18
+UpdateUnownDex: ; fba18
 	ld a, [UnownLetter]
 	ld c, a
 	ld b, 26
 	ld hl, UnownDex
-.asm_fba21
+.loop
 	ld a, [hli]
 	and a
-	jr z, .asm_fba2b
+	jr z, .done
 	cp c
 	ret z
 	dec b
-	jr nz, .asm_fba21
+	jr nz, .loop
 	ret
 
-.asm_fba2b
+.done
 	dec hl
 	ld [hl], c
 	ret
@@ -51642,8 +23140,8 @@
 
 Functionfba2e: ; fba2e (3e:7a2e)
 	hlcoord 4, 15
-	ld bc, $c
-	ld a, $7f
+	ld bc, 12
+	ld a, " "
 	call ByteFill
 	ld a, [wc7dd]
 	ld e, a
@@ -51748,915 +23246,10 @@
 
 INCLUDE "tilesets/animations.asm"
 
+INCLUDE "engine/npctrade.asm"
 
-; Trade struct
-TRADE_DIALOG  EQU 0
-TRADE_GIVEMON EQU 1
-TRADE_GETMON  EQU 2
-TRADE_NICK    EQU 3
-TRADE_DVS     EQU 14
-TRADE_ITEM    EQU 16
-TRADE_OT_ID   EQU 17
-TRADE_OT_NAME EQU 19
-TRADE_GENDER  EQU 30
-TRADE_PADDING EQU 31
+INCLUDE "event/mom_phone.asm"
 
-; Trade dialogs
-TRADE_INTRO    EQU 0
-TRADE_CANCEL   EQU 1
-TRADE_WRONG    EQU 2
-TRADE_COMPLETE EQU 3
-TRADE_AFTER    EQU 4
-
-NPCTrade:: ; fcba8
-	ld a, e
-	ld [wJumptableIndex], a
-	call Functionfcc59
-	ld b, CHECK_FLAG
-	call TradeFlagAction
-	ld a, TRADE_AFTER
-	jr nz, .done
-
-	ld a, TRADE_INTRO
-	call PrintTradeText
-
-	call YesNoBox
-	ld a, TRADE_CANCEL
-	jr c, .done
-
-; Select givemon from party
-	ld b, 6
-	callba Function5001d
-	ld a, TRADE_CANCEL
-	jr c, .done
-
-	ld e, TRADE_GIVEMON
-	call GetTradeAttribute
-	ld a, [CurPartySpecies]
-	cp [hl]
-	ld a, TRADE_WRONG
-	jr nz, .done
-
-	call CheckTradeGender
-	ld a, TRADE_WRONG
-	jr c, .done
-
-	ld b, SET_FLAG
-	call TradeFlagAction
-
-	ld hl, ConnectLinkCableText
-	call PrintText
-
-	call Functionfcc63
-	call Functionfcc07
-	call GetTradeMonNames
-
-	ld hl, TradedForText
-	call PrintText
-
-	call RestartMapMusic
-
-	ld a, TRADE_COMPLETE
-
-.done
-	call PrintTradeText
-	ret
-; fcc07
-
-Functionfcc07: ; fcc07
-	call DisableSpriteUpdates
-	ld a, [wJumptableIndex]
-	push af
-	ld a, [wcf64]
-	push af
-	predef Function28f24
-	pop af
-	ld [wcf64], a
-	pop af
-	ld [wJumptableIndex], a
-	call Function2b74
-	ret
-; fcc23
-
-CheckTradeGender: ; fcc23
-	xor a
-	ld [MonType], a
-
-	ld e, TRADE_GENDER
-	call GetTradeAttribute
-	ld a, [hl]
-	and a
-	jr z, .asm_fcc46
-	cp 1
-	jr z, .asm_fcc3e
-
-	callba GetGender
-	jr nz, .asm_fcc48
-	jr .asm_fcc46
-
-.asm_fcc3e
-	callba GetGender
-	jr z, .asm_fcc48
-
-.asm_fcc46
-	and a
-	ret
-
-.asm_fcc48
-	scf
-	ret
-; fcc4a
-
-TradeFlagAction: ; fcc4a
-	ld hl, wd960
-	ld a, [wJumptableIndex]
-	ld c, a
-	predef FlagPredef
-	ld a, c
-	and a
-	ret
-; fcc59
-
-Functionfcc59: ; fcc59
-	ld e, TRADE_DIALOG
-	call GetTradeAttribute
-	ld a, [hl]
-	ld [wcf64], a
-	ret
-; fcc63
-
-Functionfcc63: ; fcc63
-	ld e, TRADE_GIVEMON
-	call GetTradeAttribute
-	ld a, [hl]
-	ld [wc6d0], a
-
-	ld e, TRADE_GETMON
-	call GetTradeAttribute
-	ld a, [hl]
-	ld [wc702], a
-
-	ld a, [wc6d0]
-	ld de, wc6d1
-	call Functionfcde8
-	call Functionfcdf4
-
-	ld a, [wc702]
-	ld de, wc703
-	call Functionfcde8
-	call Functionfcdf4
-
-	ld hl, PartyMonOT
-	ld bc, NAME_LENGTH
-	call Functionfcdd7
-	ld de, wc6f2
-	call Functionfcdf4
-
-	ld hl, PlayerName
-	ld de, wc6e7
-	call Functionfcdf4
-
-	ld hl, PartyMon1ID
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call Functionfcdd7
-	ld de, wc6ff
-	call Functionfce0f
-
-	ld hl, PartyMon1DVs
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call Functionfcdd7
-	ld de, wc6fd
-	call Functionfce0f
-
-	ld hl, PartyMon1Species
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call Functionfcdd7
-	ld b, h
-	ld c, l
-	callba GetCaughtGender
-	ld a, c
-	ld [wc701], a
-
-	ld e, TRADE_DIALOG
-	call GetTradeAttribute
-	ld a, [hl]
-	cp TRADE_COMPLETE
-	ld a, 1
-	jr c, .asm_fcce6
-	ld a, 2
-.asm_fcce6
-	ld [wEnemyCharging], a
-
-	ld hl, PartyMon1Level
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call Functionfcdd7
-	ld a, [hl]
-	ld [CurPartyLevel], a
-	ld a, [wc702]
-	ld [CurPartySpecies], a
-	xor a
-	ld [MonType], a
-	ld [wPokemonWithdrawDepositParameter], a
-	callab Functione039
-	predef TryAddMonToParty
-
-	ld e, TRADE_DIALOG
-	call GetTradeAttribute
-	ld a, [hl]
-	cp TRADE_COMPLETE
-	ld b, 0
-	jr c, .asm_fcd1c
-	ld b, 1
-.asm_fcd1c
-	callba SetPartymonCaughtData
-
-	ld e, TRADE_NICK
-	call GetTradeAttribute
-	ld de, wc70e
-	call Functionfcdf4
-
-	ld hl, PartyMonNicknames
-	ld bc, PKMN_NAME_LENGTH
-	call Functionfcdde
-	ld hl, wc70e
-	call Functionfcdf4
-
-	ld e, TRADE_OT_NAME
-	call GetTradeAttribute
-	push hl
-	ld de, wc724
-	call Functionfcdf4
-	pop hl
-	ld de, wc719
-	call Functionfcdf4
-
-	ld hl, PartyMonOT
-	ld bc, NAME_LENGTH
-	call Functionfcdde
-	ld hl, wc724
-	call Functionfcdf4
-
-	ld e, TRADE_DVS
-	call GetTradeAttribute
-	ld de, wEnemyTrappingMove
-	call Functionfce0f
-
-	ld hl, PartyMon1DVs
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call Functionfcdde
-	ld hl, wEnemyTrappingMove
-	call Functionfce0f
-
-	ld e, TRADE_OT_ID
-	call GetTradeAttribute
-	ld de, wPlayerCharging
-	call Functionfce15
-
-	ld hl, PartyMon1ID
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call Functionfcdde
-	ld hl, wEnemyWrapCount
-	call Functionfce0f
-
-	ld e, TRADE_ITEM
-	call GetTradeAttribute
-	push hl
-	ld hl, PartyMon1Item
-	ld bc, PARTYMON_STRUCT_LENGTH
-	call Functionfcdde
-	pop hl
-	ld a, [hl]
-	ld [de], a
-
-	push af
-	push bc
-	push de
-	push hl
-	ld a, [CurPartyMon]
-	push af
-	ld a, [PartyCount]
-	dec a
-	ld [CurPartyMon], a
-	callba Functione134
-	pop af
-	ld [CurPartyMon], a
-	pop hl
-	pop de
-	pop bc
-	pop af
-	ret
-; fcdc2
-
-
-GetTradeAttribute: ; 0xfcdc2
-	ld d, 0
-	push de
-	ld a, [wJumptableIndex]
-	and $f
-	swap a
-	ld e, a
-	ld d, 0
-	ld hl, NPCTrades
-rept 2
-	add hl, de
-endr
-	pop de
-	add hl, de
-	ret
-; 0xfcdd7
-
-Functionfcdd7: ; fcdd7
-	ld a, [CurPartyMon]
-	call AddNTimes
-	ret
-; fcdde
-
-Functionfcdde: ; fcdde
-	ld a, [PartyCount]
-	dec a
-	call AddNTimes
-	ld e, l
-	ld d, h
-	ret
-; fcde8
-
-Functionfcde8: ; fcde8
-	push de
-	ld [wd265], a
-	call GetBasePokemonName
-	ld hl, StringBuffer1
-	pop de
-	ret
-; fcdf4
-
-Functionfcdf4: ; fcdf4
-	ld bc, NAME_LENGTH
-	call CopyBytes
-	ret
-; fcdfb
-
-Functionfcdfb: ; fcdfb
-	ld bc, 4
-	call CopyBytes
-	ld a, $50
-	ld [de], a
-	ret
-; fce05
-
-Functionfce05: ; fce05
-	ld bc, 3
-	call CopyBytes
-	ld a, $50
-	ld [de], a
-	ret
-; fce0f
-
-Functionfce0f: ; fce0f
-	ld a, [hli]
-	ld [de], a
-	inc de
-	ld a, [hl]
-	ld [de], a
-	ret
-; fce15
-
-Functionfce15: ; fce15
-	ld a, [hli]
-	ld [de], a
-	dec de
-	ld a, [hl]
-	ld [de], a
-	ret
-; fce1b
-
-GetTradeMonNames: ; fce1b
-	ld e, TRADE_GETMON
-	call GetTradeAttribute
-	ld a, [hl]
-	call Functionfcde8
-
-	ld de, StringBuffer2
-	call Functionfcdf4
-
-	ld e, TRADE_GIVEMON
-	call GetTradeAttribute
-	ld a, [hl]
-	call Functionfcde8
-
-	ld de, wd050
-	call Functionfcdf4
-
-	ld hl, StringBuffer1
-.loop
-	ld a, [hli]
-	cp "@"
-	jr nz, .loop
-
-	dec hl
-	push hl
-	ld e, TRADE_GENDER
-	call GetTradeAttribute
-	ld a, [hl]
-	pop hl
-	and a
-	ret z
-
-	cp 1
-	ld a, "♂"
-	jr z, .done
-	ld a, "♀"
-.done
-	ld [hli], a
-	ld [hl], "@"
-	ret
-; fce58
-
-
-NPCTrades: ; fce58
-	db 0, ABRA,       MACHOP,     "MUSCLE@@@@@", $37, $66, GOLD_BERRY,   $54, $92, "MIKE@@@@@@@", 0, 0
-	db 0, BELLSPROUT, ONIX,       "ROCKY@@@@@@", $96, $66, BITTER_BERRY, $1e, $bf, "KYLE@@@@@@@", 0, 0
-	db 1, KRABBY,     VOLTORB,    "VOLTY@@@@@@", $98, $88, PRZCUREBERRY, $05, $72, "TIM@@@@@@@@", 0, 0
-	db 3, DRAGONAIR,  DODRIO,     "DORIS@@@@@@", $77, $66, SMOKE_BALL,   $1b, $01, "EMY@@@@@@@@", 2, 0
-	db 2, HAUNTER,    XATU,       "PAUL@@@@@@@", $96, $86, MYSTERYBERRY, $00, $3d, "CHRIS@@@@@@", 0, 0
-	db 3, CHANSEY,    AERODACTYL, "AEROY@@@@@@", $96, $66, GOLD_BERRY,   $7b, $67, "KIM@@@@@@@@", 0, 0
-	db 0, DUGTRIO,    MAGNETON,   "MAGGIE@@@@@", $96, $66, METAL_COAT,   $a2, $c3, "FOREST@@@@@", 0, 0
-; fcf38
-
-
-PrintTradeText: ; fcf38
-	push af
-	call GetTradeMonNames
-	pop af
-	ld bc, 2 * 4
-	ld hl, TradeTexts
-	call AddNTimes
-	ld a, [wcf64]
-	ld c, a
-rept 2
-	add hl, bc
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	call PrintText
-	ret
-; fcf53
-
-TradeTexts: ; fcf53
-; intro
-	dw TradeIntroText1
-	dw TradeIntroText2
-	dw TradeIntroText3
-	dw TradeIntroText4
-
-; cancel
-	dw TradeCancelText1
-	dw TradeCancelText2
-	dw TradeCancelText3
-	dw TradeCancelText4
-
-; wrong mon
-	dw TradeWrongText1
-	dw TradeWrongText2
-	dw TradeWrongText3
-	dw TradeWrongText4
-
-; completed
-	dw TradeCompleteText1
-	dw TradeCompleteText2
-	dw TradeCompleteText3
-	dw TradeCompleteText4
-
-; after
-	dw TradeAfterText1
-	dw TradeAfterText2
-	dw TradeAfterText3
-	dw TradeAfterText4
-; fcf7b
-
-
-ConnectLinkCableText: ; 0xfcf7b
-	; OK, connect the Game Link Cable.
-	text_jump UnknownText_0x1bd407
-	db "@"
-; 0xfcf80
-
-
-TradedForText: ; 0xfcf80
-	; traded givemon for getmon
-	text_jump UnknownText_0x1bd429
-	start_asm
-
-	ld de, MUSIC_NONE
-	call PlayMusic
-	call DelayFrame
-	ld hl, .done
-	ret
-
-.done
-	; sound0x0A
-	; interpret_data
-	text_jump UnknownText_0x1bd445
-	db "@"
-; 0xfcf97
-
-
-TradeIntroText1: ; 0xfcf97
-	; I collect #MON. Do you have @ ? Want to trade it for my @ ?
-	text_jump UnknownText_0x1bd449
-	db "@"
-; 0xfcf9c
-
-TradeCancelText1: ; 0xfcf9c
-	; You don't want to trade? Aww…
-	text_jump UnknownText_0x1bd48c
-	db "@"
-; 0xfcfa1
-
-TradeWrongText1: ; 0xfcfa1
-	; Huh? That's not @ .  What a letdown…
-	text_jump UnknownText_0x1bd4aa
-	db "@"
-; 0xfcfa6
-
-TradeCompleteText1: ; 0xfcfa6
-	; Yay! I got myself @ ! Thanks!
-	text_jump UnknownText_0x1bd4d2
-	db "@"
-; 0xfcfab
-
-TradeAfterText1: ; 0xfcfab
-	; Hi, how's my old @  doing?
-	text_jump UnknownText_0x1bd4f4
-	db "@"
-; 0xfcfb0
-
-
-TradeIntroText2:
-TradeIntroText3: ; 0xfcfb0
-	; Hi, I'm looking for this #MON. If you have @ , would you trade it for my @ ?
-	text_jump UnknownText_0x1bd512
-	db "@"
-; 0xfcfb5
-
-TradeCancelText2:
-TradeCancelText3: ; 0xfcfb5
-	; You don't have one either? Gee, that's really disappointing…
-	text_jump UnknownText_0x1bd565
-	db "@"
-; 0xfcfba
-
-TradeWrongText2:
-TradeWrongText3: ; 0xfcfba
-	; You don't have @ ? That's too bad, then.
-	text_jump UnknownText_0x1bd5a1
-	db "@"
-; 0xfcfbf
-
-TradeCompleteText2: ; 0xfcfbf
-	; Great! Thank you! I finally got @ .
-	text_jump UnknownText_0x1bd5cc
-	db "@"
-; 0xfcfc4
-
-TradeAfterText2: ; 0xfcfc4
-	; Hi! The @ you traded me is doing great!
-	text_jump UnknownText_0x1bd5f4
-	db "@"
-; 0xfcfc9
-
-
-TradeIntroText4: ; 0xfcfc9
-	; 's cute, but I don't have it. Do you have @ ? Want to trade it for my @ ?
-	text_jump UnknownText_0x1bd621
-	db "@"
-; 0xfcfce
-
-TradeCancelText4: ; 0xfcfce
-	; You don't want to trade? Oh, darn…
-	text_jump UnknownText_0x1bd673
-	db "@"
-; 0xfcfd3
-
-TradeWrongText4: ; 0xfcfd3
-	; That's not @ . Please trade with me if you get one.
-	text_jump UnknownText_0x1bd696
-	db "@"
-; 0xfcfd8
-
-TradeCompleteText4: ; 0xfcfd8
-	; Wow! Thank you! I always wanted @ !
-	text_jump UnknownText_0x1bd6cd
-	db "@"
-; 0xfcfdd
-
-TradeAfterText4: ; 0xfcfdd
-	; How is that @  I traded you doing? Your @ 's so cute!
-	text_jump UnknownText_0x1bd6f5
-	db "@"
-; 0xfcfe2
-
-
-TradeCompleteText3: ; 0xfcfe2
-	; Uh? What happened?
-	text_jump UnknownText_0x1bd731
-	db "@"
-; 0xfcfe7
-
-TradeAfterText3: ; 0xfcfe7
-	; Trading is so odd… I still have a lot to learn about it.
-	text_jump UnknownText_0x1bd745
-	db "@"
-; 0xfcfec
-
-
-MomTriesToBuySomething:: ; fcfec
-	ld a, [wMapReentryScriptQueueFlag]
-	and a
-	ret nz
-	call GetMapHeaderPhoneServiceNybble
-	and a
-	ret nz
-	xor a
-	ld [wdc18], a
-	call CheckBalance_MomItem2
-	ret nc
-	call Functionfd0c3
-	ret nc
-	ld b, BANK(UnknownScript_0xfd00f)
-	ld de, UnknownScript_0xfd00f
-	callba LoadScriptBDE
-	scf
-	ret
-; fd00f
-
-UnknownScript_0xfd00f: ; 0xfd00f
-	callasm Functionfd017
-	farjump Script_ReceivePhoneCall
-; 0xfd017
-
-Functionfd017: ; fd017
-	call MomBuysItem_DeductFunds
-	call Functionfd0eb
-	ld a, [wdc18]
-	and a
-	jr nz, .ok
-	ld hl, wdc17
-	inc [hl]
-.ok
-	ld a, 1
-	ld [wCurrentCaller], a
-	ld bc, wd03f
-	ld hl, 0
-	add hl, bc
-	ld [hl], 0
-	inc hl
-	ld [hl], 1
-	ld hl, 9
-	add hl, bc
-	ld a, $3f
-	ld [hli], a
-	ld a, e
-	ld [hli], a
-	ld a, d
-	ld [hl], a
-	ret
-; fd044
-
-CheckBalance_MomItem2: ; fd044
-	ld a, [wdc17]
-	cp 10
-	jr nc, .nope
-	call GetItemFromMom
-	ld a, [hli]
-	ld [hMoneyTemp], a
-	ld a, [hli]
-	ld [hMoneyTemp + 1], a
-	ld a, [hli]
-	ld [hMoneyTemp + 2], a
-	ld de, wMomsMoney
-	ld bc, hMoneyTemp
-	callba CompareMoney
-	jr nc, .have_enough_money
-
-.nope
-	jr .check_have_2300
-
-.have_enough_money
-	scf
-	ret
-
-.check_have_2300
-	ld hl, hMoneyTemp
-	ld [hl], (2300 / $10000) ; $00
-	inc hl
-	ld [hl], ((2300 % $10000) / $100) ; $08
-	inc hl
-	ld [hl], (2300 % $100) ; $fc
-.loop
-	ld de, wdc19
-	ld bc, wMomsMoney
-	callba CompareMoney
-	jr z, .exact
-	jr nc, .less_than
-	call Functionfd099
-	jr .loop
-
-.less_than
-	xor a
-	ret
-
-.exact
-	call Functionfd099
-	ld a, 5
-	call RandomRange
-	inc a
-	ld [wdc18], a
-	scf
-	ret
-; fd099
-
-Functionfd099: ; fd099
-	ld de, wdc19
-	ld bc, hMoneyTemp
-	callba AddMoney
-	ret
-; fd0a6
-
-
-MomBuysItem_DeductFunds: ; fd0a6 (3f:50a6)
-	call GetItemFromMom
-	ld de, 3
-	add hl, de
-	ld a, [hli]
-	ld [hMoneyTemp], a
-	ld a, [hli]
-	ld [hMoneyTemp + 1], a
-	ld a, [hli]
-	ld [hMoneyTemp + 2], a
-	ld de, wMomsMoney
-	ld bc, hMoneyTemp
-	callba TakeMoney
-	ret
-
-
-Functionfd0c3: ; fd0c3
-	call GetItemFromMom
-	ld de, 6
-	add hl, de
-	ld a, [hli]
-	cp 1
-	jr z, .not_doll
-	ld a, [hl]
-	ld c, a
-	ld b, 1
-	callba DecorationFlagAction_c
-	scf
-	ret
-
-.not_doll
-	ld a, [hl]
-	ld [CurItem], a
-	ld a, $1
-	ld [wItemQuantityChangeBuffer], a
-	ld hl, PCItems
-	call ReceiveItem
-	ret
-; fd0eb
-
-
-Functionfd0eb: ; fd0eb (3f:50eb)
-	call GetItemFromMom
-	ld de, 6 ; field
-	add hl, de
-	ld a, [hli]
-	ld de, Script_MomBoughtItem
-	cp 1
-	ret z
-	ld de, Script_MomBoughtDoll
-	ret
-; fd0fd (3f:50fd)
-
-Script_MomBoughtItem: ; 0xfd0fd
-	writetext _MomText_HiHowAreYou
-	writetext _MomText_FoundAnItem
-	writetext _MomText_BoughtWithYourMoney
-	writetext _MomText_ItsInPC
-	end
-; 0xfd10a
-
-Script_MomBoughtDoll: ; 0xfd10a
-	writetext _MomText_HiHowAreYou
-	writetext _MomText_FoundADoll
-	writetext _MomText_BoughtWithYourMoney
-	writetext _MomText_ItsInRoom
-	end
-; 0xfd117
-
-
-GetItemFromMom: ; fd117
-	ld a, [wdc18]
-	and a
-	jr z, .zero
-	dec a
-	ld de, MomItems_1
-	jr .incave
-
-.zero
-	ld a, [wdc17]
-	cp 10 ; length of MomItems_2
-	jr c, .ok
-	xor a
-
-.ok
-	ld de, MomItems_2
-
-.incave
-	ld l, a
-	ld h, 0
-rept 3 ; multiply hl by 8
-	add hl, hl
-endr
-	add hl, de
-	ret
-; fd136
-
-momitem: macro
-; money to trigger, cost, kind, item
-	dt \1
-	dt \2
-	db \3, \4
-ENDM
-
-
-MomItems_1: ; fd136
-	momitem      0,   600, MOM_ITEM, SUPER_POTION
-	momitem      0,    90, MOM_ITEM, ANTIDOTE
-	momitem      0,   180, MOM_ITEM, POKE_BALL
-	momitem      0,   450, MOM_ITEM, ESCAPE_ROPE
-	momitem      0,   500, MOM_ITEM, GREAT_BALL
-; fd15e
-
-MomItems_2: ; fd15e
-	momitem    900,   600, MOM_ITEM, SUPER_POTION
-	momitem   4000,   270, MOM_ITEM, REPEL
-	momitem   7000,   600, MOM_ITEM, SUPER_POTION
-	momitem  10000,  1800, MOM_DOLL, DECO_CHARMANDER_DOLL
-	momitem  15000,  3000, MOM_ITEM, MOON_STONE
-	momitem  19000,   600, MOM_ITEM, SUPER_POTION
-	momitem  30000,  4800, MOM_DOLL, DECO_CLEFAIRY_DOLL
-	momitem  40000,   900, MOM_ITEM, HYPER_POTION
-	momitem  50000,  8000, MOM_DOLL, DECO_PIKACHU_DOLL
-	momitem 100000, 22800, MOM_DOLL, DECO_BIG_SNORLAX_DOLL
-; fd1ae
-
-	db 0, 0, 0 ; XXX
-
-_MomText_HiHowAreYou: ; 0xfd1b1
-	; Hi,  ! How are you?
-	text_jump UnknownText_0x1bc615
-	db "@"
-; 0xfd1b6
-
-_MomText_FoundAnItem: ; 0xfd1b6
-	; I found a useful item shopping, so
-	text_jump UnknownText_0x1bc62a
-	db "@"
-; 0xfd1bb
-
-_MomText_BoughtWithYourMoney: ; 0xfd1bb
-	; I bought it with your money. Sorry!
-	text_jump UnknownText_0x1bc64e
-	db "@"
-; 0xfd1c0
-
-_MomText_ItsInPC: ; 0xfd1c0
-	; It's in your PC. You'll like it!
-	text_jump UnknownText_0x1bc673
-	db "@"
-; 0xfd1c5
-
-_MomText_FoundADoll: ; 0xfd1c5
-	; While shopping today, I saw this adorable doll, so
-	text_jump UnknownText_0x1bc693
-	db "@"
-; 0xfd1ca
-
-_MomText_ItsInRoom: ; 0xfd1ca
-	; It's in your room. You'll love it!
-	text_jump UnknownText_0x1bc6c7
-	db "@"
-; 0xfd1cf
-
-	db 0 ; XXX
-
-Functionfd1d0: ; fd1d0
-	ret
-; fd1d1
-
-	ret ; XXX
-
-
 INCLUDE "misc/mobile_40.asm"
 
 
@@ -52717,7 +23310,7 @@
 	ret
 ; 104061
 
-Function104061:: ; 104061
+ReloadMapPart:: ; 104061
 	ld hl, Function104067
 	jp Function104177
 ; 104067
@@ -52747,7 +23340,7 @@
 	ret
 
 Function104099: ; 104099
-	ld hl, Function104061
+	ld hl, ReloadMapPart ; useless
 	ld hl, Function1040a2
 	jp Function104177
 ; 1040a2
@@ -53221,48 +23814,48 @@
 	ld [rVBK], a
 	ld c, $8
 	ld hl, w6_d000 + $80
-	ld de, VBGMap1 tile $00
+	debgcoord 0, 0, VBGMap1
 	call Function104209
 	ld a, $0
 	ld [rVBK], a
 	ld c, $8
 	ld hl, w6_d000
-	ld de, VBGMap1 tile $00
+	debgcoord 0, 0, VBGMap1
 	call Function104209
 	ret
 
 Function10433a: ; 10433a (41:433a)
-	ld b, $4
-.asm_10433c
-	ld c, $14
-.asm_10433e
+	ld b, 4
+.outer_loop
+	ld c, 20
+.inner_loop
 	ld a, [de]
 	ld [hli], a
 	inc de
 	dec c
-	jr nz, .asm_10433e
+	jr nz, .inner_loop
 	ld a, l
-	add $c
+	add $20 - 20
 	ld l, a
 	ld a, h
 	adc $0
 	ld h, a
 	dec b
-	jr nz, .asm_10433c
+	jr nz, .outer_loop
 	ret
 ; 104350
 
-ShockEmote:    INCBIN "gfx/emotes/shock.2bpp"
-QuestionEmote: INCBIN "gfx/emotes/question.2bpp"
-HappyEmote:    INCBIN "gfx/emotes/happy.2bpp"
-SadEmote:      INCBIN "gfx/emotes/sad.2bpp"
-HeartEmote:    INCBIN "gfx/emotes/heart.2bpp"
-BoltEmote:     INCBIN "gfx/emotes/bolt.2bpp"
-SleepEmote:    INCBIN "gfx/emotes/sleep.2bpp"
-FishEmote:     INCBIN "gfx/emotes/fish.2bpp"
-FishingRodGFX1: INCBIN "gfx/misc/fishing1.2bpp"
+ShockEmote:     INCBIN "gfx/emotes/shock.2bpp"
+QuestionEmote:  INCBIN "gfx/emotes/question.2bpp"
+HappyEmote:     INCBIN "gfx/emotes/happy.2bpp"
+SadEmote:       INCBIN "gfx/emotes/sad.2bpp"
+HeartEmote:     INCBIN "gfx/emotes/heart.2bpp"
+BoltEmote:      INCBIN "gfx/emotes/bolt.2bpp"
+SleepEmote:     INCBIN "gfx/emotes/sleep.2bpp"
+FishEmote:      INCBIN "gfx/emotes/fish.2bpp"
+JumpShadowGFX:  INCBIN "gfx/misc/shadow.2bpp"
 FishingRodGFX2: INCBIN "gfx/misc/fishing2.2bpp"
-FishingRodGFX3: INCBIN "gfx/misc/fishing3.2bpp"
+BoulderDustGFX: INCBIN "gfx/misc/boulderdust.2bpp"
 FishingRodGFX4: INCBIN "gfx/misc/fishing4.2bpp"
 
 
@@ -53276,7 +23869,7 @@
 	call RunMapCallback
 
 RunCallback_03: ; 1045c4
-	callba Function97df9
+	callba ClearCmdQueue
 	ld a, $3
 	call RunMapCallback
 	call GetMapHeaderTimeOfDayNybble
@@ -53286,7 +23879,7 @@
 
 EnterMapConnection: ; 1045d6
 ; Return carry if a connection has been entered.
-	ld a, [wd151]
+	ld a, [wPlayerStepDirection]
 	and a
 	jp z, EnterSouthConnection
 	cp 1
@@ -53503,7 +24096,7 @@
 	ld hl, VramState
 	res 6, [hl]
 	ld a, $1
-	ld [wc2ce], a
+	ld [wSpriteUpdatesEnabled], a
 	callba Function8c0e5
 	callba Function8c001
 	call OverworldTextModeSwitch
@@ -53512,10 +24105,10 @@
 	ret
 
 Function104770: ; 104770 (41:4770)
-	ld a, $98
-	ld [wd153], a
+	ld a, VBGMap0 / $100
+	ld [wBGMapAnchor + 1], a
 	xor a
-	ld [wd152], a
+	ld [wBGMapAnchor], a
 	ld [hSCY], a
 	ld [hSCX], a
 	callba Function5958
@@ -53525,43 +24118,43 @@
 	ld [rVBK], a
 	xor a
 	lb bc, 4, 0
-	ld hl, VBGMap0 tile $00
+	hlbgcoord 0, 0
 	call ByteFill
 	pop af
 	ld [rVBK], a
 	ld a, $60
 	lb bc, 4, 0
-	ld hl, VBGMap0 tile $00
+	hlbgcoord 0, 0
 	call ByteFill
 	ret
 
 Function1047a3: ; 1047a3 (41:47a3)
 	decoord 0, 0
-	call Function1047b4
+	call .copy
 	ld a, [hCGB]
 	and a
 	ret z
+
 	decoord 0, 0, AttrMap
 	ld a, $1
 	ld [rVBK], a
-
-Function1047b4: ; 1047b4 (41:47b4)
-	ld hl, VBGMap0 tile $00
-	ld c, $14
-	ld b, $12
-.asm_1047bb
+.copy:
+	hlbgcoord 0, 0
+	ld c, SCREEN_WIDTH
+	ld b, SCREEN_HEIGHT
+.row
 	push bc
-.asm_1047bc
+.column
 	ld a, [de]
 	inc de
 	ld [hli], a
 	dec c
-	jr nz, .asm_1047bc
-	ld bc, $c
+	jr nz, .column
+	ld bc, $20 - SCREEN_WIDTH
 	add hl, bc
 	pop bc
 	dec b
-	jr nz, .asm_1047bb
+	jr nz, .row
 	ld a, $0
 	ld [rVBK], a
 	ret
@@ -53568,7 +24161,7 @@
 
 LoadGraphics: ; 1047cf
 	call LoadTilesetHeader
-	call Function2821
+	call LoadTileset
 	xor a
 	ld [hMapAnims], a
 	xor a
@@ -53579,7 +24172,7 @@
 	ret
 
 LoadMapPalettes: ; 1047eb
-	ld b, $9
+	ld b, SCGB_09
 	jp GetSGBLayout
 ; 1047f0
 
@@ -53586,7 +24179,7 @@
 RefreshMapSprites: ; 1047f0
 	call ClearSprites
 	callba ReturnFromMapSetupScript
-	call Function2914
+	call GetMovementPermissions
 	callba Function579d
 	callba CheckReplaceKrisSprite
 	ld hl, wPlayerSpriteSetupFlags
@@ -53602,7 +24195,7 @@
 	ret
 
 CheckMovingOffEdgeOfMap:: ; 104820 (41:4820)
-	ld a, [wd151]
+	ld a, [wPlayerStepDirection]
 	cp STANDING
 	ret z
 	and a ; DOWN
@@ -53617,7 +24210,7 @@
 	ret
 
 .down
-	ld a, [PlayerMapY]
+	ld a, [PlayerNextMapY]
 	sub 4
 	ld b, a
 	ld a, [MapHeight]
@@ -53628,7 +24221,7 @@
 	ret
 
 .up
-	ld a, [PlayerMapY]
+	ld a, [PlayerNextMapY]
 	sub 4
 	cp -1
 	jr z, .ok
@@ -53636,7 +24229,7 @@
 	ret
 
 .left
-	ld a, [PlayerMapX]
+	ld a, [PlayerNextMapX]
 	sub $4
 	cp -1
 	jr z, .ok
@@ -53644,7 +24237,7 @@
 	ret
 
 .right
-	ld a, [PlayerMapX]
+	ld a, [PlayerNextMapX]
 	sub 4
 	ld b, a
 	ld a, [MapWidth]
@@ -53706,2061 +24299,10 @@
 	ret
 ; 1048ba
 
+INCLUDE "engine/mysterygift.asm"
 
-DoMysteryGift: ; 1048ba (41:48ba)
-	call ClearTileMap
-	call ClearSprites
-	call WaitBGMap
-	call Function105153
-	hlcoord 3, 8
-	ld de, String_1049cd
-	call PlaceString
-	call WaitBGMap
-	callba Function2c642
-	call Function1050fb
-	ld a, $2
-	ld [wca01], a
-	ld a, $14
-	ld [wca02], a
-	ld a, [rIE]
-	push af
-	call Function104a95
-	ld d, a
-	xor a
-	ld [rIF], a
-	pop af
-	ld [rIE], a
-	push de
-	call ClearTileMap
-	call EnableLCD
-	call WaitBGMap
-	ld b, $8
-	call GetSGBLayout
-	call SetPalettes
-	pop de
-	hlcoord 2, 8
-	ld a, d
-	ld de, UnknownText_0x1049fd
-	cp $10
-	jp z, Function1049af
-	cp $6c
-	jp nz, Function1049b4
-	ld a, [wc900]
-	cp $3
-	jr z, .asm_10492f
-	call Function104a25
-	ld hl, UnknownText_0x104a11
-	jp nc, Function1049c5
-	call Function104a30
-	ld hl, UnknownText_0x104a16
-	jp c, Function1049c5
-.asm_10492f
-	ld a, [wc962]
-	and a
-	jp nz, Function1049bd
-	ld a, [wc912]
-	and a
-	jp nz, Function1049c2
-	ld a, [wc900]
-	cp $3
-	jr z, .asm_104963
-	call Function104a56
-	ld a, [wc900]
-	cp $4
-	jr z, .asm_104963
-	call Function104a71
-	callba RestoreMobileEventIndex
-	callba MobileFn_1060a9
-	callba BackupMobileEventIndex
-.asm_104963
-	ld a, [wc90f]
-	and a
-	jr z, .item
-	ld a, [wc911]
-	ld c, a
-	callba MysteryGiftGetDecoration
-	push bc
-	call Function105069
-	pop bc
-	jr nz, .item
-	callab GetDecorationName_c
-	ld h, d
-	ld l, e
-	ld de, StringBuffer1
-	ld bc, ITEM_NAME_LENGTH
-	call CopyBytes
-	ld hl, UnknownText_0x104a20
-	jr Function1049c5
+INCLUDE "battle/used_move_text.asm"
 
-.item
-	call GetMysteryGiftBank
-	ld a, [wc910]
-	ld c, a
-	callba MysteryGiftGetItemHeldEffect
-	ld a, c
-	ld [s0_abe4], a
-	ld [wNamedObjectIndexBuffer], a
-	call CloseSRAM
-	call GetItemName
-	ld hl, UnknownText_0x104a1b
-	jr Function1049c5
-
-Function1049af: ; 1049af (41:49af)
-	ld hl, UnknownText_0x1049fd
-	jr Function1049c5
-
-Function1049b4: ; 1049b4 (41:49b4)
-	ld hl, UnknownText_0x104a02
-	call PrintText
-	jp DoMysteryGift
-
-Function1049bd: ; 1049bd (41:49bd)
-	ld hl, UnknownText_0x104a07
-	jr Function1049c5
-
-Function1049c2: ; 1049c2 (41:49c2)
-	ld hl, UnknownText_0x104a0c
-
-Function1049c5: ; 1049c5 (41:49c5)
-	call PrintText
-	ld a, $e3
-	ld [rLCDC], a
-	ret
-; 1049cd (41:49cd)
-
-String_1049cd: ; 1049cd
-	db   "Press A to"
-	next "link IR-Device"
-	next "Press B to"
-	next "cancel it."
-	db   "@"
-; 1049fd
-
-UnknownText_0x1049fd: ; 1049fd
-	text_jump UnknownText_0x1c0436
-	db "@"
-; 104a02
-
-UnknownText_0x104a02: ; 104a02
-	text_jump UnknownText_0x1c0454
-	db "@"
-; 104a07
-
-UnknownText_0x104a07: ; 104a07
-	text_jump UnknownText_0x1c046a
-	db "@"
-; 104a0c
-
-UnknownText_0x104a0c: ; 104a0c
-	text_jump UnknownText_0x1c048e
-	db "@"
-; 104a11
-
-UnknownText_0x104a11: ; 104a11
-	text_jump UnknownText_0x1c04a7
-	db "@"
-; 104a16
-
-UnknownText_0x104a16: ; 104a16
-	text_jump UnknownText_0x1c04c6
-	db "@"
-; 104a1b
-
-UnknownText_0x104a1b: ; 104a1b
-	text_jump UnknownText_0x1c04e9
-	db "@"
-; 104a20
-
-UnknownText_0x104a20: ; 104a20
-	text_jump UnknownText_0x1c04fa
-	db "@"
-; 104a25
-
-Function104a25: ; 104a25 (41:4a25)
-	call GetMysteryGiftBank
-	ld a, [s0_abe5]
-	cp $5
-	jp CloseSRAM
-
-Function104a30: ; 104a30 (41:4a30)
-	call GetMysteryGiftBank
-	ld a, [wc901]
-	ld b, a
-	ld a, [wc902]
-	ld c, a
-	ld a, [s0_abe5]
-	ld d, a
-	ld hl, s0_abe6
-.asm_104a42
-	ld a, d
-	and a
-	jr z, .asm_104a53
-	ld a, [hli]
-	cp b
-	jr nz, .asm_104a4e
-	ld a, [hl]
-	cp c
-	jr z, .asm_104a52
-.asm_104a4e
-	inc hl
-	dec d
-	jr .asm_104a42
-.asm_104a52
-	scf
-.asm_104a53
-	jp CloseSRAM
-
-Function104a56: ; 104a56 (41:4a56)
-	call GetMysteryGiftBank
-	ld hl, s0_abe5
-	ld a, [hl]
-	inc [hl]
-	ld hl, s0_abe6 ; inc hl
-	ld e, a
-	ld d, $0
-rept 2
-	add hl, de
-endr
-	ld a, [wc901]
-	ld [hli], a
-	ld a, [wc902]
-	ld [hl], a
-	jp CloseSRAM
-
-Function104a71: ; 104a71 (41:4a71)
-	call GetMysteryGiftBank
-	ld a, $1
-	ld [sMysteryGiftTrainerHouseFlag], a
-	ld hl, wc903
-	ld de, s0_abfe
-	ld bc, $b
-	call CopyBytes
-	ld a, $1
-	ld [de], a
-	inc de
-	ld hl, wc850
-	ld bc, $26
-	call CopyBytes
-	jp CloseSRAM
-
-Function104a95: ; 104a95 (41:4a95)
-	di
-	callba ClearChannels
-	call Function104d5e
-.asm_104a9f
-	call Function104d96
-	call Function104ddd
-	ld a, [hPrintNum10]
-	cp $10
-	jp z, Function104bd0
-	cp $6c
-	jr nz, .asm_104a9f
-	ld a, [hPrintNum9]
-	cp $2
-	jr z, Function104b22
-	ld hl, $ffb3
-	ld b, $1
-	call Function104d56
-	jr nz, .asm_104ac8
-	call Function104b49
-	jp nz, Function104bd0
-	jr asm_104b0a
-.asm_104ac8
-	ld a, [rLY]
-	cp $90
-	jr c, .asm_104ac8
-	ld c, rRP % $100
-	ld a, $c0
-	ld [$ff00+c], a
-	ld b, $f0
-.asm_104ad5
-	push bc
-	call Function105038
-	ld b, $2
-	ld c, rRP % $100
-.asm_104add
-	ld a, [$ff00+c]
-	and b
-	ld b, a
-	ld a, [rLY]
-	cp $90
-	jr nc, .asm_104add
-.asm_104ae6
-	ld a, [$ff00+c]
-	and b
-	ld b, a
-	ld a, [rLY]
-	cp $90
-	jr c, .asm_104ae6
-	ld a, b
-	pop bc
-	dec b
-	jr z, .asm_104a9f
-	or a
-	jr nz, .asm_104a9f
-	ld a, [hMoneyTemp + 1]
-	bit 1, a
-	jr z, .asm_104ad5
-	ld a, $10
-	ld [hPrintNum10], a
-	jp Function104bd0
-
-Function104b04: ; 104b04 (41:4b04)
-	call Function104b40
-	jp nz, Function104bd0
-
-asm_104b0a: ; 104b0a (41:4b0a)
-	call Function104d38
-	jp nz, Function104bd0
-	call Function104b88
-	jp nz, Function104bd0
-	call Function104d43
-	jp nz, Function104bd0
-	call Function105033
-	jp Function104bd0
-
-Function104b22: ; 104b22 (41:4b22)
-	call Function104b88
-	jp nz, Function104bd0
-	call Function104d43
-	jp nz, Function104bd0
-	call Function104b40
-	jp nz, Function104bd0
-	call Function104d38
-	jp nz, Function104bd0
-	call Function10502e
-	jp Function104bd0
-
-Function104b40: ; 104b40 (41:4b40)
-	ld hl, $ffb3
-	ld b, $1
-	call Function104d56
-	ret nz
-
-Function104b49: ; 104b49 (41:4b49)
-	call Function105033
-	ld a, [hPrintNum10]
-	cp $6c
-	ret nz
-	ld a, [$ffb3]
-	cp $96
-	jp nz, Function104d32
-	ld a, $90
-	ld [$ffb3], a
-	call Function104d38
-	ret nz
-	ld hl, $ffb3
-	ld b, $1
-	call Function104d4e
-	ret nz
-	call Function10502e
-	ld a, [hPrintNum10]
-	cp $6c
-	ret nz
-	call Function104d43
-	ret nz
-	ld hl, wc850
-	ld a, [wca02]
-	ld b, a
-	call Function104d56
-	ret nz
-	call Function105033
-	ld a, [hPrintNum10]
-	cp $6c
-	ret
-
-Function104b88: ; 104b88 (41:4b88)
-	ld a, $96
-	ld [$ffb3], a
-	ld hl, $ffb3
-	ld b, $1
-	call Function104d4e
-	ret nz
-	call Function10502e
-	ld a, [hPrintNum10]
-	cp $6c
-	ret nz
-	call Function104d43
-	ret nz
-	ld hl, $ffb3
-	ld b, $1
-	call Function104d56
-	ret nz
-	call Function105033
-	ld a, [hPrintNum10]
-	cp $6c
-	ret nz
-	ld a, [$ffb3]
-	cp $90
-	jp nz, Function104d32
-	call Function104d38
-	ret nz
-	ld hl, OverworldMap
-	ld a, [wca02]
-	ld b, a
-	call Function104d4e
-	ret nz
-	call Function10502e
-	ld a, [hPrintNum10]
-	cp $6c
-	ret
-
-Function104bd0: ; 104bd0 (41:4bd0)
-	nop
-	ld a, [hPrintNum10]
-	cp $10
-	jr z, .asm_104c18
-	cp $6c
-	jr nz, .asm_104c18
-	ld hl, wca01
-	dec [hl]
-	jr z, .asm_104c18
-	ld hl, wc850
-	ld de, wc900
-	ld bc, $14
-	call CopyBytes
-	ld a, [wc850]
-	cp $3
-	jr nc, .asm_104c18
-	callba Function10510b
-	call Function1050fb
-	ld a, $26
-	ld [wca02], a
-	ld a, [hPrintNum9]
-	cp $2
-	jr z, .asm_104c10
-	call Function104d43
-	jr nz, Function104bd0
-	jp Function104b04
-.asm_104c10
-	call Function104d38
-	jr nz, Function104bd0
-	jp Function104b22
-.asm_104c18
-	ld a, [hPrintNum10]
-	push af
-	call Function104da0
-	xor a
-	ld [rIF], a
-	ld a, [rIE]
-	or $1
-	ld [rIE], a
-	ei
-	call DelayFrame
-	pop af
-	ret
-
-Function104c2d: ; 104c2d (41:4c2d)
-	di
-	callba ClearChannels
-	call Function104d5e
-.asm_104c37
-	call Function104d96
-	call Function104ddd
-	ld a, [hPrintNum10]
-	cp $10
-	jp z, Function104d1c
-	cp $6c
-	jr nz, .asm_104c37
-	ld a, [hPrintNum9]
-	cp $2
-	jr z, .asm_104c6c
-	call Function104c8a
-	jp nz, Function104d1c
-	call Function104d38
-	jp nz, Function104d1c
-	call Function104cd2
-	jp nz, Function104d1c
-	call Function104d43
-	jp nz, Function104d1c
-	call Function105033
-	jp Function104d1c
-.asm_104c6c
-	call Function104cd2
-	jp nz, Function104d1c
-	call Function104d43
-	jp nz, Function104d1c
-	call Function104c8a
-	jp nz, Function104d1c
-	call Function104d38
-	jp nz, Function104d1c
-	call Function10502e
-	jp Function104d1c
-
-Function104c8a: ; 104c8a (41:4c8a)
-	ld hl, $ffb3
-	ld b, $1
-	call Function104d56
-	ret nz
-	call Function105033
-	ld a, [hPrintNum10]
-	cp $6c
-	ret nz
-	ld a, [$ffb3]
-	cp $3c
-	jp nz, Function104d32
-	swap a
-	ld [$ffb3], a
-	call Function104d38
-	ret nz
-	ld hl, $ffb3
-	ld b, $1
-	call Function104d4e
-	ret nz
-	call Function10502e
-	ld a, [hPrintNum10]
-	cp $6c
-	ret nz
-	call Function104d43
-	ret nz
-	ld hl, wc850
-	ld a, [wca02]
-	ld b, a
-	call Function104d56
-	ret nz
-	call Function105033
-	ld a, [hPrintNum10]
-	cp $6c
-	ret
-
-Function104cd2: ; 104cd2 (41:4cd2)
-	ld a, $3c
-	ld [$ffb3], a
-	ld hl, $ffb3
-	ld b, $1
-	call Function104d4e
-	ret nz
-	call Function10502e
-	ld a, [hPrintNum10]
-	cp $6c
-	ret nz
-	call Function104d43
-	ret nz
-	ld hl, $ffb3
-	ld b, $1
-	call Function104d56
-	ret nz
-	call Function105033
-	ld a, [hPrintNum10]
-	cp $6c
-	ret nz
-	ld a, [$ffb3]
-	swap a
-	cp $3c
-	jp nz, Function104d32
-	call Function104d38
-	ret nz
-	ld hl, OverworldMap
-	ld a, [wca02]
-	ld b, a
-	call Function104d4e
-	ret nz
-	call Function10502e
-	ld a, [hPrintNum10]
-	cp $6c
-	ret
-
-Function104d1c: ; 104d1c (41:4d1c)
-	nop
-	ld a, [hPrintNum10]
-	push af
-	call Function104da0
-	xor a
-	ld [rIF], a
-	ld a, [rIE]
-	or $1
-	ld [rIE], a
-	ei
-	call DelayFrame
-	pop af
-	ret
-
-Function104d32: ; 104d32 (41:4d32)
-	ld a, $80
-	ld [hPrintNum10], a
-	and a
-	ret
-
-Function104d38: ; 104d38 (41:4d38)
-	call Function104d96
-	call Function104e46
-	ld a, [hPrintNum10]
-	cp $6c
-	ret
-
-Function104d43: ; 104d43 (41:4d43)
-	call Function104d96
-	call Function104dfe
-	ld a, [hPrintNum10]
-	cp $6c
-	ret
-
-Function104d4e: ; 104d4e (41:4d4e)
-	call Function104e93
-	ld a, [hPrintNum10]
-	cp $6c
-	ret
-
-Function104d56: ; 104d56 (41:4d56)
-	call Function104f57
-	ld a, [hPrintNum10]
-	cp $6c
-	ret
-
-Function104d5e: ; 104d5e (41:4d5e)
-	call Function104d74
-	ld a, $4
-	ld [rIE], a
-	xor a
-	ld [rIF], a
-	call Function104d96
-	xor a
-	ld b, a
-.asm_104d6d
-	inc a
-	jr nz, .asm_104d6d
-	inc b
-	jr nz, .asm_104d6d
-	ret
-
-Function104d74: ; 104d74 (41:4d74)
-	xor a
-	ld [rTAC], a
-	ld a, $fe
-	ld [rTMA], a
-	ld [rTIMA], a
-	ld a, $2
-	ld [rTAC], a
-	or $4
-	ld [rTAC], a
-	ret
-
-Function104d86: ; 104d86 (41:4d86)
-	xor a
-	ld [rTAC], a
-	ld [rTMA], a
-	ld [rTIMA], a
-	ld a, $2
-	ld [rTAC], a
-	or $4
-	ld [rTAC], a
-	ret
-
-Function104d96: ; 104d96 (41:4d96)
-	ld a, $c0
-	call Function104e8c
-	ld a, $1
-	ld [hPrintNum9], a
-	ret
-
-Function104da0: ; 104da0 (41:4da0)
-	xor a
-	call Function104e8c
-	ld a, $2
-	ld [rTAC], a
-	ret
-
-Function104da9: ; 104da9 (41:4da9)
-	inc d
-	ret z
-	xor a
-	ld [rIF], a
-	halt
-	ld a, [$ff00+c]
-	bit 1, a
-	jr z, Function104da9
-	or a
-	ret
-
-Function104db7: ; 104db7 (41:4db7)
-	inc d
-	ret z
-	xor a
-	ld [rIF], a
-	halt
-	ld a, [$ff00+c]
-	bit 1, a
-	jr nz, Function104db7
-	or a
-	ret
-
-Function104dc5: ; 104dc5 (41:4dc5)
-	ld a, $c1
-	ld [$ff00+c], a
-.asm_104dc8
-	dec d
-	ret z
-	xor a
-	ld [rIF], a
-	halt
-	jr .asm_104dc8
-
-Function104dd1: ; 104dd1 (41:4dd1)
-	ld a, $c0
-	ld [$ff00+c], a
-.asm_104dd4
-	dec d
-	ret z
-	xor a
-	ld [rIF], a
-	halt
-	jr .asm_104dd4
-
-Function104ddd: ; 104ddd (41:4ddd)
-	ld d, $0
-	ld e, d
-	ld a, $1
-	ld [hPrintNum9], a
-.asm_104de4
-	call Function105038
-	ld b, $2
-	ld c, rRP % $100
-	ld a, [hMoneyTemp + 1]
-	bit 1, a
-	jr z, .asm_104df6
-	ld a, $10
-	ld [hPrintNum10], a
-	ret
-.asm_104df6
-	bit 0, a
-	jr nz, asm_104e3a
-	ld a, [$ff00+c]
-	and b
-	jr nz, .asm_104de4
-
-Function104dfe: ; 104dfe (41:4dfe)
-	ld c, rRP % $100
-	ld d, $0
-	ld e, d
-	call Function104db7
-	jp z, Function104f42
-	ld d, e
-	call Function104da9
-	jp z, Function104f42
-	call Function104db7
-	jp z, Function104f42
-	call Function104da9
-	jp z, Function104f42
-	ld a, $6c
-	ld [hPrintNum10], a
-	ld d, $3d
-	call Function104dd1
-	ld d, $5
-	call Function104dc5
-	ld d, $15
-	call Function104dd1
-	ld d, $5
-	call Function104dc5
-	ld d, $5
-	call Function104dd1
-	ret
-
-asm_104e3a: ; 104e3a (41:4e3a)
-	call Random
-	ld e, a
-	and $f
-	ld d, a
-.asm_104e41
-	dec de
-	ld a, d
-	or e
-	jr nz, .asm_104e41
-
-Function104e46: ; 104e46 (41:4e46)
-	ld a, $2
-	ld [hPrintNum9], a
-	ld c, $56
-	ld d, $0
-	ld e, d
-	ld d, $3d
-	call Function104dd1
-	ld d, $5
-	call Function104dc5
-	ld d, $15
-	call Function104dd1
-	ld d, $5
-	call Function104dc5
-	ld d, $5
-	call Function104dd1
-	ld d, e
-	call Function104db7
-	jp z, Function104f42
-	ld d, e
-	call Function104da9
-	jp z, Function104f42
-	call Function104db7
-	jp z, Function104f42
-	call Function104da9
-	jp z, Function104f42
-	ld d, $3d
-	call Function104dd1
-	ld a, $6c
-	ld [hPrintNum10], a
-	ret
-
-Function104e8c: ; 104e8c (41:4e8c)
-	ld [rRP], a
-	ld a, $ff
-	ld [hPrintNum10], a
-	ret
-
-Function104e93: ; 104e93 (41:4e93)
-	xor a
-	ld [hDivisor], a
-	ld [hMathBuffer], a
-	push hl
-	push bc
-	ld c, $56
-	ld d, $3d
-	call Function104dd1
-	ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
-	ld a, $5a
-	ld [hli], a
-	ld [hl], b
-	dec hl
-	ld b, $2
-	call Function104ed6
-	pop bc
-	pop hl
-	call Function104ed6
-	ld a, [hDivisor]
-	ld [hQuotient], a
-	ld a, [hMathBuffer]
-	ld [$ffb5], a
-	push hl
-	ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
-	ld b, $2
-	call Function104ed6
-	ld hl, hPrintNum10
-	ld b, $1
-	call Function104faf
-	ld a, [hQuotient]
-	ld [hDivisor], a
-	ld a, [$ffb5]
-	ld [hMathBuffer], a
-	pop hl
-	ret
-
-Function104ed6: ; 104ed6 (41:4ed6)
-	ld c, $56
-	ld d, $5
-	call Function104dd1
-	ld d, $5
-	call Function104dc5
-	ld d, $15
-	call Function104dd1
-	ld a, b
-	cpl
-	ld b, a
-	ld a, $f4
-	ld [rTMA], a
-.asm_104eee
-	inc b
-	jr z, .asm_104f2e
-	ld a, $8
-	ld [$ffb6], a
-	ld a, [hli]
-	ld e, a
-	ld a, [hDivisor]
-	add e
-	ld [hDivisor], a
-	ld a, [hMathBuffer]
-	adc $0
-	ld [hMathBuffer], a
-.asm_104f02
-	xor a
-	ld [rIF], a
-	halt
-	ld a, $c1
-	ld [rRP], a
-	ld d, $1
-	ld a, e
-	rlca
-	ld e, a
-	jr nc, .asm_104f13
-	inc d
-.asm_104f13
-	ld a, [rTIMA]
-	cp $f8
-	jr c, .asm_104f13
-	ld a, $c0
-	ld [rRP], a
-	dec d
-	jr z, .asm_104f25
-	xor a
-	ld [rIF], a
-	halt
-.asm_104f25
-	ld a, [$ffb6]
-	dec a
-	jr z, .asm_104eee
-	ld [$ffb6], a
-	jr .asm_104f02
-.asm_104f2e
-	ld a, $fe
-	ld [rTMA], a
-	xor a
-	ld [rIF], a
-	halt
-	ld d, $5
-	call Function104dc5
-	ld d, $11
-	call Function104dd1
-	ret
-
-Function104f42: ; 104f42 (41:4f42)
-	ld a, [hPrintNum10]
-	or $2
-	ld [hPrintNum10], a
-	ret
-
-Function104f49: ; 104f49 (41:4f49)
-	ld a, [hPrintNum10]
-	or $1
-	ld [hPrintNum10], a
-	ret
-
-Function104f50: ; 104f50 (41:4f50)
-	ld a, [hPrintNum10]
-	or $80
-	ld [hPrintNum10], a
-	ret
-
-Function104f57: ; 104f57 (41:4f57)
-	xor a
-	ld [hDivisor], a
-	ld [hMathBuffer], a
-	push bc
-	push hl
-	ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
-	ld b, $2
-	call Function104faf
-	ld a, [$ffb5]
-	ld [$ffba], a
-	ld b, a
-	pop hl
-	pop af
-	cp b
-	jp c, Function104f50
-	ld a, [hQuotient]
-	cp $5a
-	jp nz, Function104f50
-	call Function104faf
-	ld a, [hDivisor]
-	ld d, a
-	ld a, [hMathBuffer]
-	ld e, a
-	push hl
-	push de
-	ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
-	ld b, $2
-	call Function104faf
-	pop de
-	ld hl, hQuotient ; $ffb4 (aliases: hMultiplicand)
-	ld a, [hli]
-	xor d
-	ld b, a
-	ld a, [hl]
-	xor e
-	or b
-	call nz, Function104f49
-	push de
-	ld d, $3d
-	call Function104dd1
-	ld hl, hPrintNum10
-	ld b, $1
-	call Function104ed6
-	pop de
-	pop hl
-	ld a, d
-	ld [hDivisor], a
-	ld a, e
-	ld [hMathBuffer], a
-	ret
-
-Function104faf: ; 104faf (41:4faf)
-	ld c, rRP % $100
-	ld d, $0
-	call Function104db7
-	jp z, Function104f42
-	ld d, $0
-	call Function104da9
-	jp z, Function104f42
-	ld d, $0
-	call Function104db7
-	jp z, Function104f42
-	ld a, b
-	cpl
-	ld b, a
-	xor a
-	ld [hMoneyTemp + 2], a
-	call Function104d86
-.asm_104fd2
-	inc b
-	jr z, .asm_10501a
-	ld a, $8
-	ld [$ffb6], a
-.asm_104fd9
-	ld d, $0
-.asm_104fdb
-	inc d
-	jr z, .asm_104fe5
-	ld a, [$ff00+c]
-	bit 1, a
-	jr z, .asm_104fdb
-	ld d, $0
-.asm_104fe5
-	inc d
-	jr z, .asm_104fed
-	ld a, [$ff00+c]
-	bit 1, a
-	jr nz, .asm_104fe5
-.asm_104fed
-	ld a, [hMoneyTemp + 2]
-	ld d, a
-	ld a, [rTIMA]
-	ld [hMoneyTemp + 2], a
-	sub d
-	cp $12
-	jr c, .asm_104ffd
-	set 0, e
-	jr .asm_104fff
-.asm_104ffd
-	res 0, e
-.asm_104fff
-	ld a, [$ffb6]
-	dec a
-	ld [$ffb6], a
-	jr z, .asm_10500b
-	ld a, e
-	rlca
-	ld e, a
-	jr .asm_104fd9
-.asm_10500b
-	ld a, e
-	ld [hli], a
-	ld a, [hDivisor]
-	add e
-	ld [hDivisor], a
-	ld a, [hMathBuffer]
-	adc $0
-	ld [hMathBuffer], a
-	jr .asm_104fd2
-.asm_10501a
-	call Function104d74
-	xor a
-	ld [rIF], a
-	ld d, $0
-	call Function104da9
-	jp z, Function104f42
-	ld d, $10
-	call Function104dd1
-	ret
-
-Function10502e: ; 10502e (41:502e)
-	ld b, $0
-	jp Function104e93
-
-Function105033: ; 105033 (41:5033)
-	ld b, $0
-	jp Function104f57
-
-Function105038: ; 105038 (41:5038)
-	ld a, $20
-	ld [rJOYP], a
-rept 2
-	ld a, [rJOYP]
-endr
-	cpl
-	and $f
-	swap a
-	ld b, a
-	ld a, $10
-	ld [rJOYP], a
-rept 6
-	ld a, [rJOYP]
-endr
-	cpl
-	and $f
-	or b
-	ld c, a
-	ld a, [hMoneyTemp]
-	xor c
-	and c
-	ld [hMoneyTemp + 1], a
-	ld a, c
-	ld [hMoneyTemp], a
-	ld a, $30
-	ld [rJOYP], a
-	ret
-
-Function105069: ; 105069 (41:5069)
-	call GetMysteryGiftBank
-	ld d, $0
-	ld b, $2
-	ld hl, s0_abf0
-	predef_id FlagPredef
-	push hl
-	push bc
-	call Predef
-	call CloseSRAM
-	ld a, c
-	and a
-	pop bc
-	pop hl
-	ret nz
-	call GetMysteryGiftBank
-	ld b, $1
-	predef FlagPredef
-	call CloseSRAM
-	xor a
-	ret
-
-Function105091: ; 105091 (41:5091)
-	call GetMysteryGiftBank
-	ld c, $0
-.asm_105096
-	push bc
-	ld d, $0
-	ld b, $2
-	ld hl, s0_abf0
-	predef FlagPredef
-	ld a, c
-	and a
-	pop bc
-	jr z, .asm_1050b0
-	push bc
-	callab SetSpecificDecorationFlag
-	pop bc
-.asm_1050b0
-	inc c
-	ld a, c
-	cp $2a + 1
-	jr c, .asm_105096
-	jp CloseSRAM
-
-Special_UnlockMysteryGift: ; 1050b9
-	call GetMysteryGiftBank
-	ld hl, s0_abe3
-	ld a, [hl]
-	inc a
-	jr nz, .ok
-	ld [hld], a
-	ld [hl], a
-.ok
-	jp CloseSRAM
-; 1050c8
-
-Function1050c8: ; 1050c8
-	call GetMysteryGiftBank
-	ld a, [s0_abe5]
-	cp $ff
-	jr z, .okay
-	xor a
-	ld [s0_abe5], a
-.okay
-	jp CloseSRAM
-; 1050d9
-
-
-Function1050d9: ; 1050d9
-	call GetMysteryGiftBank
-	ld hl, sMysteryGiftItem
-	ld de, s0_abe4
-	ld a, [hli]
-	ld [de], a
-	inc de
-	ld a, [hl]
-	ld [de], a
-	jp CloseSRAM
-; 1050ea
-
-
-Function1050ea: ; 1050ea (41:50ea)
-	call GetMysteryGiftBank
-	ld hl, s0_abe4
-	ld de, sMysteryGiftItem
-	ld a, [hli]
-	ld [de], a
-	inc de
-	ld a, [hl]
-	ld [de], a
-	jp CloseSRAM
-
-Function1050fb: ; 1050fb (41:50fb)
-	ld hl, wc850
-	xor a
-	ld b, $26
-.asm_105101
-	ld [hli], a
-	dec b
-	jr nz, .asm_105101
-	ret
-
-
-GetMysteryGiftBank: ; 105106
-	ld a, BANK(s0_abe4)
-	jp GetSRAMBank
-; 10510b
-
-
-Function10510b: ; 10510b (41:510b)
-	ld a, BANK(sPokemonData)
-	call GetSRAMBank
-	ld de, OverworldMap
-	ld bc, sPokemonData + PartyMons - wPokemonData
-	ld hl, sPokemonData + PartySpecies - wPokemonData
-.asm_105119
-	ld a, [hli]
-	cp $ff
-	jr z, .asm_105148
-	cp EGG
-	jr z, .asm_10513e
-	push hl
-	ld hl, MON_LEVEL
-	add hl, bc
-	ld a, [hl]
-	ld [de], a
-	inc de
-	ld hl, MON_SPECIES
-	add hl, bc
-	ld a, [hl]
-	ld [de], a
-	inc de
-	ld hl, MON_MOVES
-	add hl, bc
-	push bc
-	ld bc, NUM_MOVES
-	call CopyBytes
-	pop bc
-	pop hl
-.asm_10513e
-	push hl
-	ld hl, PARTYMON_STRUCT_LENGTH
-	add hl, bc
-	ld b, h
-	ld c, l
-	pop hl
-	jr .asm_105119
-.asm_105148
-	ld a, $ff
-	ld [de], a
-	ld a, $26
-	ld [wca00], a
-	jp CloseSRAM
-
-Function105153: ; 105153 (41:5153)
-	call ClearBGPalettes
-	call DisableLCD
-	ld hl, MysteryGiftGFX
-	ld de, VTiles2 tile $00
-	ld a, BANK(MysteryGiftGFX)
-	ld bc, Function105688 - MysteryGiftGFX
-	call FarCopyBytes
-	hlcoord 0, 0
-	ld a, $42
-	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
-	call ByteFill
-	hlcoord 3, 7
-	lb bc, 9, 15
-	call ClearBox
-	hlcoord 0, 0
-	ld a, $0
-	ld [hli], a
-	inc a
-	ld [hl], a
-	hlcoord 0, 1
-	inc a
-	ld [hli], a
-	inc a
-	ld [hl], a
-	hlcoord 7, 1
-	ld a, $12
-	call Function10522e
-	hlcoord 2, 2
-	ld a, $17
-	call Function105236
-	hlcoord 2, 3
-	ld a, $27
-	call Function105236
-	hlcoord 9, 4
-	ld a, $37
-	ld [hli], a
-	inc a
-	ld [hl], a
-	hlcoord 1, 2
-	ld [hl], $4
-	hlcoord 1, 3
-	ld a, $5
-	call Function105246
-	ld a, $9
-	hlcoord 18, 5
-	call Function105242
-	hlcoord 2, 5
-	ld a, $b
-	call Function105251
-	hlcoord 2, 16
-	ld a, $7
-	call Function105251
-	hlcoord 2, 5
-	ld a, $d
-	call Function10522e
-	hlcoord 7, 5
-	ld [hl], $c
-	hlcoord 18, 5
-	ld [hl], $a
-	hlcoord 18, 16
-	ld [hl], $8
-	hlcoord 1, 16
-	ld [hl], $6
-	hlcoord 2, 6
-	ld a, $3a
-	call Function105251
-	hlcoord 2, 15
-	ld a, $40
-	call Function105251
-	hlcoord 2, 6
-	ld a, $3c
-	call Function10523e
-	hlcoord 17, 6
-	ld a, $3e
-	call Function10523e
-	hlcoord 2, 6
-	ld [hl], $39
-	hlcoord 17, 6
-	ld [hl], $3b
-	hlcoord 2, 15
-	ld [hl], $3f
-	hlcoord 17, 15
-	ld [hl], $41
-	call EnableLCD
-	call WaitBGMap
-	ld b, $1d
-	call GetSGBLayout
-	call SetPalettes
-	ret
-
-Function10522e: ; 10522e (41:522e)
-	ld b, $5
-	jr asm_105238
-; 105232 (41:5232)
-
-Function105232: ; unreferenced
-	ld b, 6
-	jr asm_105238
-
-Function105236: ; 105236 (41:5236)
-	ld b, $10
-
-asm_105238: ; 105238 (41:5238)
-	ld [hli], a
-	inc a
-	dec b
-	jr nz, asm_105238
-	ret
-
-Function10523e: ; 10523e (41:523e)
-	ld b, $9
-	jr asm_105248
-
-Function105242: ; 105242 (41:5242)
-	ld b, $b
-	jr asm_105248
-
-Function105246: ; 105246 (41:5246)
-	ld b, $e
-
-asm_105248: ; 105248 (41:5248)
-	ld [hl], a
-	ld de, $14
-	add hl, de
-	dec b
-	jr nz, asm_105248
-	ret
-
-Function105251: ; 105251 (41:5251)
-	ld b, $10
-.asm_105253
-	ld [hli], a
-	dec b
-	jr nz, .asm_105253
-	ret
-
-MysteryGiftGFX: ; 105258
-INCBIN "gfx/misc/mystery_gift.2bpp"
-
-
-Function105688: ; 105688 (41:5688)
-	call ClearTileMap
-	call ClearSprites
-	call WaitBGMap
-	call Function1057d7
-	hlcoord 3, 8
-	ld de, String_10572e
-	call PlaceString
-	call WaitBGMap
-	call Function10578c
-	call Function1050fb
-	ld a, $24
-	ld [wca02], a
-	ld a, [rIE]
-	push af
-	call Function104c2d
-	ld d, a
-	xor a
-	ld [rIF], a
-	pop af
-	ld [rIE], a
-	ld a, d
-	cp $10
-	jp z, Function105712
-	cp $6c
-	jp nz, Function10571a
-	call Function1056eb
-	ld c, 60
-	call DelayFrames
-	call Function105777
-	ld hl, Text_10575e
-	call PrintText
-	ld de, wc850
-	callba Function8ac70
-	ld a, c
-	ld [wd265], a
-	ld hl, Text_105768
-	jr c, asm_105726
-	ld hl, Text_105763
-	jr asm_105726
-
-Function1056eb: ; 1056eb (41:56eb)
-	ld c, $10
-.asm_1056ed
-	ld hl, Sprites
-	ld b, $8
-.asm_1056f2
-	dec [hl]
-rept 4
-	inc hl
-endr
-	dec b
-	jr nz, .asm_1056f2
-	ld hl, Sprites + $20
-	ld b, $8
-.asm_1056ff
-	inc [hl]
-rept 4
-	inc hl
-endr
-	dec b
-	jr nz, .asm_1056ff
-	dec c
-	ret z
-	push bc
-	ld c, 4
-	call DelayFrames
-	pop bc
-	jr .asm_1056ed
-
-Function105712: ; 105712 (41:5712)
-	call Function105777
-	ld hl, Text_10576d
-	jr asm_105726
-
-Function10571a: ; 10571a (41:571a)
-	call Function105777
-	ld hl, Text_105772
-	call PrintText
-	jp Function105688
-
-asm_105726: ; 105726 (41:5726)
-	call PrintText
-	ld a, $e3
-	ld [rLCDC], a
-	ret
-; 10572e (41:572e)
-
-String_10572e: ; 10572e
-	db   "エーボタン¯おすと"
-	next "つうしん",   $4a, "おこなわれるよ!"
-	next "ビーボタン¯おすと"
-	next "つうしん¯ちゅうし します"
-	db   "@"
-
-; 10575e
-
-Text_10575e: ; 10575e
-	text_jump UnknownText_0x1c051a
-	db "@"
-
-Text_105763: ; 105763
-	text_jump UnknownText_0x1c0531
-	db "@"
-
-Text_105768: ; 105768
-	text_jump UnknownText_0x1c0555
-	db "@"
-
-Text_10576d: ; 10576d
-	text_jump UnknownText_0x1c0573
-	db "@"
-
-Text_105772: ; 105772
-	text_jump UnknownText_0x1c0591
-	db "@"
-; 105777
-
-Function105777: ; 105777 (41:5777)
-	call ClearSprites
-	call ClearTileMap
-	call EnableLCD
-	call WaitBGMap
-	ld b, $8
-	call GetSGBLayout
-	call SetPalettes
-	ret
-
-Function10578c: ; 10578c (41:578c)
-	ld de, OverworldMap
-	ld a, BANK(sPlayerData)
-	call GetSRAMBank
-	ld hl, sPlayerData + PlayerName - wPlayerData
-	ld bc, NAME_LENGTH
-	call CopyBytes
-	ld hl, sPlayerData + PlayerID - wPlayerData
-	ld bc, 2
-	call CopyBytes
-	ld hl, sPlayerData + wSecretID - wPlayerData
-	ld bc, 2
-	call CopyBytes
-	call CloseSRAM
-	ld a, BANK(sCrystalData)
-	call GetSRAMBank
-	ld a, [sCrystalData + 0]
-	ld [de], a
-	inc de
-	ld a, $4
-	call GetSRAMBank
-	ld hl, $a603
-	ld bc, $8
-	call CopyBytes
-	ld hl, $a007
-	ld bc, $c
-	call CopyBytes
-	call CloseSRAM
-	ret
-
-Function1057d7: ; 1057d7 (41:57d7)
-	call ClearBGPalettes
-	call DisableLCD
-	ld hl, MysteryGiftJP_GFX
-	ld de, VTiles2 tile $00
-	ld a, BANK(MysteryGiftJP_GFX)
-	lb bc, 4, 0
-	call FarCopyBytes
-	ld hl, MysteryGiftJP_GFX + $400
-	ld de, VTiles0 tile $00
-	ld a, BANK(MysteryGiftJP_GFX)
-	ld bc, $80
-	call FarCopyBytes
-	hlcoord 0, 0
-	ld a, $3f
-	ld bc, SCREEN_HEIGHT * SCREEN_WIDTH
-	call ByteFill
-	hlcoord 3, 7
-	lb bc, 9, 15
-	call ClearBox
-	hlcoord 0, 0
-	ld a, $0
-	ld [hli], a
-	inc a
-	ld [hl], a
-	hlcoord 0, 1
-	inc a
-	ld [hli], a
-	inc a
-	ld [hl], a
-	hlcoord 4, 2
-	ld a, $13
-	call Function1058ca
-	hlcoord 4, 3
-	ld a, $1e
-	call Function1058ce
-	hlcoord 4, 4
-	ld a, $2a
-	call Function1058ce
-	hlcoord 1, 2
-	ld [hl], $4
-	hlcoord 1, 3
-	ld a, $5
-	call Function1058de
-	ld a, $9
-	hlcoord 18, 5
-	call Function1058da
-	hlcoord 2, 5
-	ld a, $b
-	call Function1058e9
-	hlcoord 2, 16
-	ld a, $7
-	call Function1058e9
-	hlcoord 2, 5
-	ld a, $d
-	call Function1058c6
-	hlcoord 8, 5
-	ld [hl], $c
-	hlcoord 18, 5
-	ld [hl], $a
-	hlcoord 18, 16
-	ld [hl], $8
-	hlcoord 1, 16
-	ld [hl], $6
-	hlcoord 2, 6
-	ld a, $37
-	call Function1058e9
-	hlcoord 2, 15
-	ld a, $3d
-	call Function1058e9
-	hlcoord 2, 6
-	ld a, $39
-	call Function1058d6
-	hlcoord 17, 6
-	ld a, $3b
-	call Function1058d6
-	hlcoord 2, 6
-	ld [hl], $36
-	hlcoord 17, 6
-	ld [hl], $38
-	hlcoord 2, 15
-	ld [hl], $3c
-	hlcoord 17, 15
-	ld [hl], $3e
-	ld de, Sprites
-	ld hl, OAM_1058f0
-	ld bc, $40
-	call CopyBytes
-	call EnableLCD
-	call WaitBGMap
-	ld b, $2
-	callba Function4930f
-	jp SetPalettes
-
-Function1058c6: ; 1058c6 (41:58c6)
-	ld b, $6
-	jr asm_1058d0
-
-Function1058ca: ; 1058ca (41:58ca)
-	ld b, $b
-	jr asm_1058d0
-
-Function1058ce: ; 1058ce (41:58ce)
-	ld b, $c
-
-asm_1058d0: ; 1058d0 (41:58d0)
-	ld [hli], a
-	inc a
-	dec b
-	jr nz, asm_1058d0
-	ret
-
-Function1058d6: ; 1058d6 (41:58d6)
-	ld b, $9
-	jr asm_1058e0
-
-Function1058da: ; 1058da (41:58da)
-	ld b, $b
-	jr asm_1058e0
-
-Function1058de: ; 1058de (41:58de)
-	ld b, $e
-
-asm_1058e0: ; 1058e0 (41:58e0)
-	ld [hl], a
-	ld de, $14
-	add hl, de
-	dec b
-	jr nz, asm_1058e0
-	ret
-
-Function1058e9: ; 1058e9 (41:58e9)
-	ld b, $10
-.asm_1058eb
-	ld [hli], a
-	dec b
-	jr nz, .asm_1058eb
-	ret
-; 1058f0 (41:58f0)
-
-OAM_1058f0: ; 1058f0
-	db $11, $34, $00, $00
-	db $11, $3c, $01, $00
-	db $11, $44, $02, $00
-	db $11, $4c, $03, $00
-	db $19, $34, $04, $00
-	db $19, $3c, $05, $00
-	db $19, $44, $06, $00
-	db $19, $4c, $07, $00
-	db $01, $5c, $00, $00
-	db $01, $64, $01, $00
-	db $01, $6c, $02, $00
-	db $01, $74, $03, $00
-	db $09, $5c, $04, $00
-	db $09, $64, $05, $00
-	db $09, $6c, $06, $00
-	db $09, $74, $07, $00
-
-; japanese mystery gift gfx
-MysteryGiftJP_GFX: ; 105930
-INCBIN "gfx/misc/mystery_gift_jp.2bpp"
-
-
-DisplayUsedMoveText: ; 105db0
-; battle command 03
-	ld hl, UsedMoveText
-	call BattleTextBox
-	jp WaitBGMap
-; 105db9
-
-
-UsedMoveText: ; 105db9
-; this is a stream of text and asm from 105db9 to 105ef6
-
-	text_jump _ActorNameText
-	start_asm
-
-	ld a, [hBattleTurn]
-	and a
-	jr nz, .start
-
-	ld a, [wPlayerMoveStruct + MOVE_ANIM]
-	call UpdateUsedMoves
-
-.start
-	ld a, BATTLE_VARS_LAST_MOVE
-	call GetBattleVarAddr
-	ld d, h
-	ld e, l
-
-	ld a, BATTLE_VARS_LAST_COUNTER_MOVE
-	call GetBattleVarAddr
-
-	ld a, BATTLE_VARS_MOVE_ANIM
-	call GetBattleVar
-	ld [wd265], a
-
-	push hl
-	callba CheckUserIsCharging
-	pop hl
-	jr nz, .grammar
-
-	; update last move
-	ld a, [wd265]
-	ld [hl], a
-	ld [de], a
-
-.grammar
-	call GetMoveGrammar
-; wd265 now contains MoveGrammar
-
-
-; everything except 'instead' made redundant in localization
-
-	; check obedience
-	ld a, [AlreadyDisobeyed]
-	and a
-	ld hl, UsedMove2Text
-	ret nz
-
-	; check move grammar
-	ld a, [wd265]
-	cp $3
-	ld hl, UsedMove2Text
-	ret c
-	ld hl, UsedMove1Text
-	ret
-; 105e04
-
-UsedMove1Text: ; 105e04
-	text_jump _UsedMove1Text
-	start_asm
-	jr Function105e10
-; 105e0b
-
-UsedMove2Text: ; 105e0b
-	text_jump _UsedMove2Text
-	start_asm
-; 105e10
-
-Function105e10: ; 105e10
-; check obedience
-	ld a, [AlreadyDisobeyed]
-	and a
-	jr z, GetMoveNameText
-; print "instead,"
-	ld hl, UsedInsteadText
-	ret
-; 105e1a
-
-UsedInsteadText: ; 105e1a
-	text_jump _UsedInsteadText
-	start_asm
-; 105e1f
-
-GetMoveNameText: ; 105e1f
-	ld hl, MoveNameText
-	ret
-; 105e23
-
-MoveNameText: ; 105e23
-	text_jump _MoveNameText
-	start_asm
-; 105e28
-
-GetUsedMoveTextEnder: ; 105e28
-; get start address
-	ld hl, .endusedmovetexts
-
-; get move id
-	ld a, [wd265]
-
-; 2-byte pointer
-	add a
-
-; seek
-	push bc
-	ld b, $0
-	ld c, a
-	add hl, bc
-	pop bc
-
-; get pointer to usedmovetext ender
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	ret
-; 105e39
-
-.endusedmovetexts ; 105e39
-	dw EndUsedMove1Text
-	dw EndUsedMove2Text
-	dw EndUsedMove3Text
-	dw EndUsedMove4Text
-	dw EndUsedMove5Text
-; 105e43
-
-EndUsedMove1Text: ; 105e43
-	text_jump _EndUsedMove1Text
-	db "@"
-; 105e48
-EndUsedMove2Text: ; 105e48
-	text_jump _EndUsedMove2Text
-	db "@"
-; 105e4d
-EndUsedMove3Text: ; 105e4d
-	text_jump _EndUsedMove3Text
-	db "@"
-; 105e52
-EndUsedMove4Text: ; 105e52
-	text_jump _EndUsedMove4Text
-	db "@"
-; 105e57
-EndUsedMove5Text: ; 105e57
-	text_jump _EndUsedMove5Text
-	db "@"
-; 105e5c
-
-
-GetMoveGrammar: ; 105e5c
-; store move grammar type in wd265
-
-	push bc
-; c = move id
-	ld a, [wd265]
-	ld c, a
-	ld b, $0
-
-; read grammar table
-	ld hl, MoveGrammar
-.loop
-	ld a, [hli]
-; end of table?
-	cp $ff
-	jr z, .end
-; match?
-	cp c
-	jr z, .end
-; advance grammar type at $00
-	and a
-	jr nz, .loop
-; next grammar type
-	inc b
-	jr .loop
-
-.end
-; wd265 now contains move grammar
-	ld a, b
-	ld [wd265], a
-
-; we're done
-	pop bc
-	ret
-; 105e7a
-
-MoveGrammar: ; 105e7a
-; made redundant in localization
-; each move is given an identifier for what usedmovetext to use (0-4):
-
-; 0
-	db SWORDS_DANCE
-	db GROWTH
-	db STRENGTH
-	db HARDEN
-	db MINIMIZE
-	db SMOKESCREEN
-	db WITHDRAW
-	db DEFENSE_CURL
-	db EGG_BOMB
-	db SMOG
-	db BONE_CLUB
-	db FLASH
-	db SPLASH
-	db ACID_ARMOR
-	db BONEMERANG
-	db REST
-	db SHARPEN
-	db SUBSTITUTE
-	db MIND_READER
-	db SNORE
-	db PROTECT
-	db SPIKES
-	db ENDURE
-	db ROLLOUT
-	db SWAGGER
-	db SLEEP_TALK
-	db HIDDEN_POWER
-	db PSYCH_UP
-	db EXTREMESPEED
-	db 0 ; end set
-
-; 1
-	db RECOVER
-	db TELEPORT
-	db BIDE
-	db SELFDESTRUCT
-	db AMNESIA
-	db FLAIL
-	db 0 ; end set
-
-; 2
-	db MEDITATE
-	db AGILITY
-	db MIMIC
-	db DOUBLE_TEAM
-	db BARRAGE
-	db TRANSFORM
-	db STRUGGLE
-	db SCARY_FACE
-	db 0 ; end set
-
-; 3
-	db POUND
-	db SCRATCH
-	db VICEGRIP
-	db WING_ATTACK
-	db FLY
-	db BIND
-	db SLAM
-	db HORN_ATTACK
-	db WRAP
-	db THRASH
-	db TAIL_WHIP
-	db LEER
-	db BITE
-	db GROWL
-	db ROAR
-	db SING
-	db PECK
-	db ABSORB
-	db STRING_SHOT
-	db EARTHQUAKE
-	db FISSURE
-	db DIG
-	db TOXIC
-	db SCREECH
-	db METRONOME
-	db LICK
-	db CLAMP
-	db CONSTRICT
-	db POISON_GAS
-	db BUBBLE
-	db SLASH
-	db SPIDER_WEB
-	db NIGHTMARE
-	db CURSE
-	db FORESIGHT
-	db CHARM
-	db ATTRACT
-	db ROCK_SMASH
-	db 0 ; end set
-
-; all other moves = 4
-	db $ff ; end
-; 105ed0
-
-
-UpdateUsedMoves: ; 105ed0
-; append move a to PlayerUsedMoves unless it has already been used
-
-	push bc
-; start of list
-	ld hl, PlayerUsedMoves
-; get move id
-	ld b, a
-; next count
-	ld c, NUM_MOVES
-
-.loop
-; get move from the list
-	ld a, [hli]
-; not used yet?
-	and a
-	jr z, .add
-; already used?
-	cp b
-	jr z, .quit
-; next byte
-	dec c
-	jr nz, .loop
-
-; if the list is full and the move hasn't already been used
-; shift the list back one byte, deleting the first move used
-; this can occur with struggle or a new learned move
-	ld hl, PlayerUsedMoves + 1
-; 1 = 2
-	ld a, [hld]
-	ld [hli], a
-; 2 = 3
-	inc hl
-	ld a, [hld]
-	ld [hli], a
-; 3 = 4
-	inc hl
-	ld a, [hld]
-	ld [hl], a
-; 4 = new move
-	ld a, b
-	ld [PlayerUsedMoves + 3], a
-	jr .quit
-
-.add
-; go back to the byte we just inced from
-	dec hl
-; add the new move
-	ld [hl], b
-
-.quit
-; list updated
-	pop bc
-	ret
-; 105ef6
-
 INCLUDE "misc/mobile_41.asm"
 
 INCLUDE "misc/mobile_42.asm"
@@ -55896,7 +24438,7 @@
 	inc a
 	ld [hl], a
 	ld hl, wcb45
-	ld a, $7f
+	ld a, " "
 	ld [hli], a
 	ld [hl], a
 	ld hl, wcb59
@@ -56108,7 +24650,7 @@
 	hlcoord 0, 0
 	call _PrepMonFrontpic
 	call WaitBGMap
-	ld b, $3
+	ld b, SCGB_03
 	call GetSGBLayout
 	call SetPalettes
 	ret
@@ -56146,27 +24688,27 @@
 	call PlaceString
 	hlcoord 16, 7
 	ld de, TempMonAttack
-	call Function1dc507
+	call .PrintTempMonStats
 	hlcoord 16, 9
 	ld de, TempMonDefense
-	call Function1dc507
+	call .PrintTempMonStats
 	hlcoord 16, 11
 	ld de, TempMonSpclAtk
-	call Function1dc507
+	call .PrintTempMonStats
 	hlcoord 16, 13
 	ld de, TempMonSpclDef
-	call Function1dc507
+	call .PrintTempMonStats
 	hlcoord 16, 15
 	ld de, TempMonSpeed
-	call Function1dc507
+	call .PrintTempMonStats
 	call WaitBGMap
-	ld b, $3
+	ld b, SCGB_03
 	call GetSGBLayout
 	call SetPalettes
 	ret
 ; 1dc507
 
-Function1dc507: ; 1dc507
+.PrintTempMonStats: ; 1dc507
 	lb bc, 2, 3
 	call PrintNum
 	ret
@@ -56183,16 +24725,16 @@
 
 Function1dc51a: ; 1dc51a
 	and a
-	jr z, .asm_1dc525
+	jr z, .no_move
 
 	ld [wd265], a
 	call GetMoveName
-	jr .asm_1dc528
+	jr .got_string
 
-.asm_1dc525
+.no_move
 	ld de, String1dc584
 
-.asm_1dc528
+.got_string
 	call PlaceString
 	ret
 ; 1dc52c
@@ -56381,7 +24923,7 @@
 	ld [hl], $50
 	ld a, $51
 	hlcoord 11, 1
-	ld b, $f
+	ld b, SCREEN_HEIGHT - 3
 	call Function1de27f
 	ld [hl], $52
 	jr .asm_1de1d0
@@ -56390,7 +24932,7 @@
 	ld [hl], $66
 	ld a, $67
 	hlcoord 11, 1
-	ld b, $f
+	ld b, SCREEN_HEIGHT - 3
 	call Function1de27f
 	ld [hl], $68
 .asm_1de1d0
@@ -56413,7 +24955,7 @@
 	ld [hl], $66
 	ld a, $67
 	hlcoord 11, 1
-	ld b, $9
+	ld b, SCREEN_HEIGHT / 2
 	call Function1de27f
 	ld [hl], $68
 	ld a, $34
@@ -56428,7 +24970,7 @@
 	ld [hl], $66
 	ld a, $67
 	hlcoord 11, 12
-	ld b, $5
+	ld b, 5
 	call Function1de27f
 	ld [hl], $68
 	hlcoord 0, 12
@@ -56442,10 +24984,8 @@
 
 String_1de23c: ; 1de23c
 ; At a glance, this is less coherent in the Japanese charset.
-	db "ESULTS"
-	db $4e
-	db $4e
-	db "D!@"
+	db   "ESULTS<NEXT>"
+	next "D!@"
 ; 1de247
 
 Function1de247: ; 1de247
@@ -56463,13 +25003,13 @@
 	ld [hl], $66
 	hlcoord 19, 1
 	ld a, $67
-	ld b, $f
+	ld b, SCREEN_HEIGHT - 3
 	call Function1de27f
 	ld [hl], $68
 	hlcoord 19, 17
 	ld [hl], $3c
 	xor a
-	ld b, $12
+	ld b, SCREEN_HEIGHT
 	hlcoord 19, 0, AttrMap
 	call Function1de27f
 	call Function3200
@@ -56484,11 +25024,11 @@
 Function1de27f: ; 1de27f
 	push de
 	ld de, SCREEN_WIDTH
-.asm_1de283
+.loop
 	ld [hl], a
 	add hl, de
 	dec b
-	jr nz, .asm_1de283
+	jr nz, .loop
 	pop de
 	ret
 ; 1de28a
@@ -56550,21 +25090,21 @@
 
 Function1de2c5: ; 1de2c5
 	ld hl, StringBuffer1
-.asm_1de2c8
+.loop
 	ld a, [hl]
-	cp $50
-	jr z, .asm_1de2da
-	cp $25
-	jr z, .asm_1de2d8
-	cp $1f
-	jr z, .asm_1de2d8
+	cp "@"
+	jr z, .end
+	cp "%"
+	jr z, .line_break
+	cp "¯"
+	jr z, .line_break
 	inc hl
-	jr .asm_1de2c8
+	jr .loop
 
-.asm_1de2d8
-	ld [hl], $22
+.line_break
+	ld [hl], "<LNBRK>"
 
-.asm_1de2da
+.end
 	ld de, StringBuffer1
 	hlcoord 9, 0
 	call PlaceString
@@ -56575,25 +25115,30 @@
 INCBIN "gfx/misc/pokegear.2bpp.lz"
 ; 1de5c8
 
-Function1de5c8: ; 1de5c8
+IsMailEuropean: ; 1de5c8
+; return 1 if French
+; return 2 if German
+; return 3 if Italian
+; return 4 if Spanish
+; return 0 if none of the above
 	ld c, $0
-	ld hl, $29
+	ld hl, sPartyMon1MailAuthorNationality - sPartyMon1Mail
 	add hl, de
 	ld a, [hli]
-	cp $84
+	cp "E"
 	ret nz
 	ld a, [hli]
 	inc c
-	cp $85
+	cp "F"
 	ret z
 	inc c
-	cp $86
+	cp "G"
 	ret z
 	inc c
-	cp $88
+	cp "I"
 	ret z
 	inc c
-	cp $92
+	cp "S"
 	ret z
 	ld c, $0
 	ret
@@ -56600,82 +25145,97 @@
 ; 1de5e6
 
 ; The regular font.
-GFX_1de5e6: ; 1de5e6
-INCBIN "gfx/unknown/1de5e6.2bpp"
+StandardEnglishFont: ; 1de5e6
+INCBIN "gfx/font/english.1bpp"
 
 ; An extended font.
-GFX_1de9e6: ; 1de9e6
-INCBIN "gfx/unknown/1de9e6.2bpp"
+FrenchGermanFont: ; 1de9e6
+INCBIN "gfx/font/french_german.1bpp"
 
 ; An even more extended font.
-GFX_1dede6: ; 1dede6
-INCBIN "gfx/unknown/1dede6.2bpp"
+SpanishItalianFont: ; 1dede6
+INCBIN "gfx/font/spanish_italian.1bpp"
 
-Function1df1e6: ; 1df1e6
-	ld b, $21
+HandleFrenchGermanMail: ; 1df1e6
+; called if mail is french or german
+; fix 's 't 'v
+	ld b, sPartyMon1MailAuthor - sPartyMon1Mail
 	ld h, d
 	ld l, e
-.asm_1df1ea
+.loop
 	ld a, [hl]
-	cp $dc
-	jr nz, .asm_1df1f3
-	ld a, $d4
-	jr .asm_1df1fd
+	cp $dc ; 's in french/german font
+	jr nz, .check_intermediate_chars
+	ld a, "'s"
+	jr .replace
 
-.asm_1df1f3
-	sub $d4
-	jr c, .asm_1df1fe
-	cp $3
-	jr nc, .asm_1df1fe
+.check_intermediate_chars
+	sub "'s"
+	jr c, .dont_replace
+	cp "'v" - "'s" + 1
+	jr nc, .dont_replace
 	add $cd
 
-.asm_1df1fd
+.replace
 	ld [hl], a
 
-.asm_1df1fe
+.dont_replace
 	inc hl
 	dec b
-	jr nz, .asm_1df1ea
+	jr nz, .loop
 	ret
 ; 1df203
 
-Function1df203: ; 1df203
-	ld b, $21
+LireLeCourrierAnglais:
+DeutenEnglischenPost: ; 1df203
+; Cette fonction convertit certains des caractères anglais pour
+; leur équivalent dans le jeu de caractères français.
+; Diese Funktion wandelt bestimmte englische Zeichen, um ihre
+; Entsprechung in der Deutschen-Zeichensatz.
+	ld b, sPartyMon1MailAuthor - sPartyMon1Mail
 	ld h, d
 	ld l, e
-.asm_1df207
+.loop
 	ld a, [hl]
-	cp $d4
-	jr nz, .asm_1df210
+	cp "'s"
+	jr nz, .check_intermediate_chars
 	ld a, $dc
-	jr .asm_1df21a
+	jr .replace
 
-.asm_1df210
+.check_intermediate_chars
 	sub $cd
-	jr c, .asm_1df21b
-	cp $3
-	jr nc, .asm_1df21b
-	add $d4
+	jr c, .dont_replace
+	cp "'v" - "'s" + 1
+	jr nc, .dont_replace
+	add "'s"
 
-.asm_1df21a
+.replace
 	ld [hl], a
 
-.asm_1df21b
+.dont_replace
 	inc hl
 	dec b
-	jr nz, .asm_1df207
+	jr nz, .loop
 	ret
 ; 1df220
 
-Function1df220: ; 1df220
-	ld b, $21
+HandleSpanishItalianMail: ; 1df220
+LeerCorreosIngleses:
+LeggiPostaInglese:
+; This function converts certain characters between
+; the English and Spanish/Italian character sets.
+; Esta función convierte ciertos caracteres entre
+; el juego de caracteres Inglés y Español.
+; Questa funzione converte alcuni caratteri tra
+; l'inglese e il set di caratteri italiani.
+	ld b, sPartyMon1MailAuthor - sPartyMon1Mail
 	ld h, d
 	ld l, e
-.asm_1df224
+.loop
 	ld a, [hl]
 	and $f0
 	cp $d0
-	jr nz, .asm_1df233
+	jr nz, .dont_replace
 	ld a, [hl]
 	add $8
 	and $f
@@ -56682,10 +25242,10 @@
 	or $d0
 	ld [hl], a
 
-.asm_1df233
+.dont_replace
 	inc hl
 	dec b
-	jr nz, .asm_1df224
+	jr nz, .loop
 	ret
 ; 1df238
 
@@ -56774,5 +25334,3 @@
 ELSE
 INCBIN "misc/stadium2_1.bin"
 ENDC
-
-
--- a/maps/AzaleaGym.asm
+++ b/maps/AzaleaGym.asm
@@ -371,10 +371,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_BUGSY, 7, 5, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, BugsyScript, -1
-	person_event SPRITE_BUG_CATCHER, 3, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerBug_catcherbenny, -1
-	person_event SPRITE_BUG_CATCHER, 8, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerBug_catcherAl, -1
-	person_event SPRITE_BUG_CATCHER, 2, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerBug_catcherJosh, -1
-	person_event SPRITE_TWIN, 10, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerTwinsAmyandmay1, -1
-	person_event SPRITE_TWIN, 10, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerTwinsAmyandmay2, -1
-	person_event SPRITE_GYM_GUY, 13, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, AzaleaGymGuyScript, -1
+	person_event SPRITE_BUGSY, 7, 5, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, BugsyScript, -1
+	person_event SPRITE_BUG_CATCHER, 3, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerBug_catcherbenny, -1
+	person_event SPRITE_BUG_CATCHER, 8, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerBug_catcherAl, -1
+	person_event SPRITE_BUG_CATCHER, PERSONTYPE_TRAINER, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerBug_catcherJosh, -1
+	person_event SPRITE_TWIN, 10, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerTwinsAmyandmay1, -1
+	person_event SPRITE_TWIN, 10, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerTwinsAmyandmay2, -1
+	person_event SPRITE_GYM_GUY, 13, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, AzaleaGymGuyScript, -1
--- a/maps/AzaleaMart.asm
+++ b/maps/AzaleaMart.asm
@@ -57,6 +57,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x18e040, -1
-	person_event SPRITE_COOLTRAINER_M, 5, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, CooltrainerMScript_0x18e047, -1
-	person_event SPRITE_BUG_CATCHER, 2, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, BugCatcherScript_0x18e04a, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x18e040, -1
+	person_event SPRITE_COOLTRAINER_M, 5, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x18e047, -1
+	person_event SPRITE_BUG_CATCHER, 2, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, BugCatcherScript_0x18e04a, -1
--- a/maps/AzaleaPokeCenter1F.asm
+++ b/maps/AzaleaPokeCenter1F.asm
@@ -90,7 +90,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x18db28, -1
-	person_event SPRITE_GENTLEMAN, 6, 9, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, 0, 0, GentlemanScript_0x18db2b, -1
-	person_event SPRITE_FISHING_GURU, 1, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, FishingGuruScript_0x18db2e, -1
-	person_event SPRITE_POKEFAN_F, 4, 1, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, 0, 0, 0, PokefanFScript_0x18db31, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x18db28, -1
+	person_event SPRITE_GENTLEMAN, 6, 9, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x18db2b, -1
+	person_event SPRITE_FISHING_GURU, 1, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FishingGuruScript_0x18db2e, -1
+	person_event SPRITE_POKEFAN_F, 4, 1, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x18db31, -1
--- a/maps/AzaleaTown.asm
+++ b/maps/AzaleaTown.asm
@@ -30,7 +30,7 @@
 	moveperson $b, $b, $b
 	spriteface PLAYER, RIGHT
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	appear $b
 	applymovement $b, MovementData_0x198134
@@ -40,7 +40,7 @@
 UnknownScript_0x198034:
 	spriteface PLAYER, RIGHT
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	appear $b
 	applymovement $b, MovementData_0x19813c
@@ -198,7 +198,7 @@
 	jumpstd martsign
 
 WhiteApricornTree:
-	fruittree $14
+	fruittree FRUITTREE_AZALEA_TOWN
 
 MapAzaleaTownSignpostItem8:
 	dwb EVENT_AZALEA_TOWN_HIDDEN_FULL_HEAL, FULL_HEAL
@@ -367,11 +367,11 @@
 UnknownText_0x1985b0:
 	text "SLOWPOKE: …"
 
-	para $56, " ", $56, " ", $56
+	para "<......> <......> <......>"
 	done
 
 UnknownText_0x1985c3:
-	text $56, " ", $56, "Yawn?"
+	text "<......> <......>Yawn?"
 	done
 
 WoosterText:
@@ -481,15 +481,15 @@
 
 .PersonEvents:
 	db 12
-	person_event SPRITE_AZALEA_ROCKET, 9, 31, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, AzaleaRocketScript_0x1980ab, EVENT_AZALEA_TOWN_SLOWPOKETAIL_ROCKET
-	person_event SPRITE_GRAMPS, 9, 21, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, 0, 0, 0, GrampsScript_0x1980b1, -1
-	person_event SPRITE_TEACHER, 13, 15, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, TeacherScript_0x1980c5, -1
-	person_event SPRITE_YOUNGSTER, 9, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x1980c8, -1
-	person_event SPRITE_SLOWPOKE, 17, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, SlowpokeScript_0x1980cb, EVENT_AZALEA_TOWN_SLOWPOKES
-	person_event SPRITE_SLOWPOKE, 9, 18, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, SlowpokeScript_0x1980cb, EVENT_AZALEA_TOWN_SLOWPOKES
-	person_event SPRITE_SLOWPOKE, 9, 29, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, SlowpokeScript_0x1980cb, EVENT_AZALEA_TOWN_SLOWPOKES
-	person_event SPRITE_SLOWPOKE, 15, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, SlowpokeScript_0x1980cb, EVENT_AZALEA_TOWN_SLOWPOKES
-	person_event SPRITE_FRUIT_TREE, 2, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, WhiteApricornTree, -1
-	person_event SPRITE_AZALEA_ROCKET, 10, 11, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_RIVAL_AZALEA_TOWN
-	person_event SPRITE_AZALEA_ROCKET, 16, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, AzaleaRocketScript_0x1980ae, EVENT_SLOWPOKE_WELL_ROCKETS
-	person_event SPRITE_KURT_OUTSIDE, 5, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, KurtOutsideScript_0x19810c, EVENT_AZALEA_TOWN_KURT
+	person_event SPRITE_AZALEA_ROCKET, 9, 31, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, AzaleaRocketScript_0x1980ab, EVENT_AZALEA_TOWN_SLOWPOKETAIL_ROCKET
+	person_event SPRITE_GRAMPS, 9, 21, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1980b1, -1
+	person_event SPRITE_TEACHER, 13, 15, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, TeacherScript_0x1980c5, -1
+	person_event SPRITE_YOUNGSTER, 9, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1980c8, -1
+	person_event SPRITE_SLOWPOKE, 17, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SlowpokeScript_0x1980cb, EVENT_AZALEA_TOWN_SLOWPOKES
+	person_event SPRITE_SLOWPOKE, 9, 18, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SlowpokeScript_0x1980cb, EVENT_AZALEA_TOWN_SLOWPOKES
+	person_event SPRITE_SLOWPOKE, 9, 29, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SlowpokeScript_0x1980cb, EVENT_AZALEA_TOWN_SLOWPOKES
+	person_event SPRITE_SLOWPOKE, 15, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SlowpokeScript_0x1980cb, EVENT_AZALEA_TOWN_SLOWPOKES
+	person_event SPRITE_FRUIT_TREE, 2, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, WhiteApricornTree, -1
+	person_event SPRITE_AZALEA_ROCKET, 10, 11, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_RIVAL_AZALEA_TOWN
+	person_event SPRITE_AZALEA_ROCKET, 16, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, AzaleaRocketScript_0x1980ae, EVENT_SLOWPOKE_WELL_ROCKETS
+	person_event SPRITE_KURT_OUTSIDE, 5, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, KurtOutsideScript_0x19810c, EVENT_AZALEA_TOWN_KURT
--- a/maps/BattleTower1F.asm
+++ b/maps/BattleTower1F.asm
@@ -27,7 +27,7 @@
 	end
 
 .priorityjump1:
-	priorityjump UnknownScript_0x9e555
+	priorityjump BattleTower_LeftWithoutSaving
 	writebyte BATTLE_TOWER_ACTION_04
 	special BattleTowerAction
 	writebyte BATTLE_TOWER_ACTION_06
@@ -119,7 +119,7 @@
 	special BattleTowerAction
 	writebyte BATTLE_TOWER_ACTION_1B
 	special BattleTowerAction
-	if_equal $12, Script_YourPackIsStuffedFull
+	if_equal POTION, Script_YourPackIsStuffedFull
 	itemtotext $0, $1
 	giveitem ITEM_FROM_MEM, 5
 	writetext Text_PlayerGotFive
@@ -236,9 +236,9 @@
 	loadmovesprites
 	end
 
-UnknownScript_0x9e555:
+BattleTower_LeftWithoutSaving:
 	loadfont
-	writetext UnknownText_0x9ee18
+	writetext Text_BattleTower_LeftWithoutSaving
 	closetext
 	jump UnknownScript_0x9e4b0
 
@@ -525,7 +525,7 @@
 	line "@"
 	text_from_ram StringBuffer4
 	text "!@"
-	sound0x0F
+	sound_item
 	text_waitbutton
 	db "@"
 
@@ -610,7 +610,7 @@
 	line "placed on them."
 	done
 
-UnknownText_0x9ee18:
+Text_BattleTower_LeftWithoutSaving:
 	text "Excuse me!"
 	line "You didn't SAVE"
 
@@ -808,8 +808,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_RECEPTIONIST, 6, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ReceptionistScript_0x9e3e2, -1
-	person_event SPRITE_YOUNGSTER, 9, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, YoungsterScript_0x9e55d, -1
-	person_event SPRITE_COOLTRAINER_F, 9, 4, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerFScript_0x9e568, -1
-	person_event SPRITE_BUG_CATCHER, 3, 1, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, BugCatcherScript_0x9e56b, -1
-	person_event SPRITE_GRANNY, 3, 14, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, 0, 0, GrannyScript_0x9e56e, -1
+	person_event SPRITE_RECEPTIONIST, 6, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x9e3e2, -1
+	person_event SPRITE_YOUNGSTER, 9, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x9e55d, -1
+	person_event SPRITE_COOLTRAINER_F, 9, 4, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x9e568, -1
+	person_event SPRITE_BUG_CATCHER, 3, 1, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, BugCatcherScript_0x9e56b, -1
+	person_event SPRITE_GRANNY, 3, 14, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrannyScript_0x9e56e, -1
--- a/maps/BattleTowerBattleRoom.asm
+++ b/maps/BattleTowerBattleRoom.asm
@@ -155,5 +155,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_YOUNGSTER, 0, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_BATTLE_TOWER_BATTLE_ROOM_YOUNGSTER
-	person_event SPRITE_RECEPTIONIST, 6, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, -1
+	person_event SPRITE_YOUNGSTER, 0, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_BATTLE_TOWER_BATTLE_ROOM_YOUNGSTER
+	person_event SPRITE_RECEPTIONIST, 6, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, -1
--- a/maps/BattleTowerElevator.asm
+++ b/maps/BattleTowerElevator.asm
@@ -60,4 +60,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_RECEPTIONIST, 2, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, MovementData_0x9f58f, -1
+	person_event SPRITE_RECEPTIONIST, 2, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, MovementData_0x9f58f, -1
--- a/maps/BattleTowerHallway.asm
+++ b/maps/BattleTowerHallway.asm
@@ -98,4 +98,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_RECEPTIONIST, 2, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, BattleTowerHallway_MapEventHeader, -1
+	person_event SPRITE_RECEPTIONIST, 2, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BattleTowerHallway_MapEventHeader, -1
--- a/maps/BattleTowerOutside.asm
+++ b/maps/BattleTowerOutside.asm
@@ -142,7 +142,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_STANDING_YOUNGSTER, 12, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, StandingYoungsterScript_0x9f85f, -1
-	person_event SPRITE_BUENA, 11, 13, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, BuenaScript_0x9f862, -1
-	person_event SPRITE_SAILOR, 18, 12, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, SailorScript_0x9f865, EVENT_BATTLE_TOWER_OUTSIDE_SAILOR
-	person_event SPRITE_LASS, 24, 12, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ObjectEvent, -1
+	person_event SPRITE_STANDING_YOUNGSTER, 12, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, StandingYoungsterScript_0x9f85f, -1
+	person_event SPRITE_BUENA, 11, 13, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, BuenaScript_0x9f862, -1
+	person_event SPRITE_SAILOR, 18, 12, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x9f865, EVENT_BATTLE_TOWER_OUTSIDE_SAILOR
+	person_event SPRITE_LASS, 24, 12, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ObjectEvent, -1
--- a/maps/BillsHouse.asm
+++ b/maps/BillsHouse.asm
@@ -367,4 +367,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_GRAMPS, 3, 2, SPRITEMOVEDATA_STANDING_UP, 2, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GrampsScript_0x189538, -1
+	person_event SPRITE_GRAMPS, 3, 2, SPRITEMOVEDATA_STANDING_UP, 2, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GrampsScript_0x189538, -1
--- a/maps/BlackthornCity.asm
+++ b/maps/BlackthornCity.asm
@@ -333,12 +333,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_SUPER_NERD, 12, 18, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SuperNerdScript_0x1a46e8, EVENT_BLACKTHORN_CITY_SUPER_NERD_BLOCKS_GYM
-	person_event SPRITE_SUPER_NERD, 12, 19, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SuperNerdScript_0x1a46e8, EVENT_BLACKTHORN_CITY_SUPER_NERD_DOES_NOT_BLOCK_GYM
-	person_event SPRITE_GRAMPS, 2, 20, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, GrampsScript_0x1a4708, EVENT_BLACKTHORN_CITY_GRAMPS_BLOCKS_DRAGONS_DEN
-	person_event SPRITE_GRAMPS, 2, 21, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, GrampsScript_0x1a470b, EVENT_BLACKTHORN_CITY_GRAMPS_NOT_BLOCKING_DRAGONS_DEN
-	person_event SPRITE_BLACK_BELT, 31, 24, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, BlackBeltScript_0x1a470e, -1
-	person_event SPRITE_COOLTRAINER_F, 25, 9, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerFScript_0x1a4722, -1
-	person_event SPRITE_YOUNGSTER, 15, 13, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, YoungsterScript_0x1a4725, -1
-	person_event SPRITE_YOUNGSTER, 20, 22, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, SantosScript, EVENT_BLACKTHORN_CITY_SANTOS_OF_SATURDAY
-	person_event SPRITE_COOLTRAINER_F, 19, 35, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerFScript_0x1a4728, -1
+	person_event SPRITE_SUPER_NERD, 12, 18, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x1a46e8, EVENT_BLACKTHORN_CITY_SUPER_NERD_BLOCKS_GYM
+	person_event SPRITE_SUPER_NERD, 12, 19, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x1a46e8, EVENT_BLACKTHORN_CITY_SUPER_NERD_DOES_NOT_BLOCK_GYM
+	person_event SPRITE_GRAMPS, 2, 20, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1a4708, EVENT_BLACKTHORN_CITY_GRAMPS_BLOCKS_DRAGONS_DEN
+	person_event SPRITE_GRAMPS, 2, 21, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1a470b, EVENT_BLACKTHORN_CITY_GRAMPS_NOT_BLOCKING_DRAGONS_DEN
+	person_event SPRITE_BLACK_BELT, 31, 24, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x1a470e, -1
+	person_event SPRITE_COOLTRAINER_F, 25, 9, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x1a4722, -1
+	person_event SPRITE_YOUNGSTER, 15, 13, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1a4725, -1
+	person_event SPRITE_YOUNGSTER, 20, 22, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SantosScript, EVENT_BLACKTHORN_CITY_SANTOS_OF_SATURDAY
+	person_event SPRITE_COOLTRAINER_F, 19, 35, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x1a4728, -1
--- a/maps/BlackthornDodrioTradeHouse.asm
+++ b/maps/BlackthornDodrioTradeHouse.asm
@@ -35,4 +35,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_LASS, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, Emy, -1
+	person_event SPRITE_LASS, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, Emy, -1
--- a/maps/BlackthornDragonSpeechHouse.asm
+++ b/maps/BlackthornDragonSpeechHouse.asm
@@ -58,5 +58,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_GRANNY, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, GrannyScript_0x195949, -1
-	person_event SPRITE_EKANS, 5, 5, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, EkansScript_0x19594c, -1
+	person_event SPRITE_GRANNY, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrannyScript_0x195949, -1
+	person_event SPRITE_EKANS, 5, 5, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, EkansScript_0x19594c, -1
--- a/maps/BlackthornGym1F.asm
+++ b/maps/BlackthornGym1F.asm
@@ -404,8 +404,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_CLAIR, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ClairScript_0x194e24, -1
-	person_event SPRITE_COOLTRAINER_M, 6, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerCooltrainermMike, -1
-	person_event SPRITE_COOLTRAINER_M, 14, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerCooltrainermPaul, -1
-	person_event SPRITE_COOLTRAINER_F, 2, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerCooltrainerfLola, -1
-	person_event SPRITE_GYM_GUY, 15, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, BlackthornGymGuyScript, -1
+	person_event SPRITE_CLAIR, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ClairScript_0x194e24, -1
+	person_event SPRITE_COOLTRAINER_M, 6, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerCooltrainermMike, -1
+	person_event SPRITE_COOLTRAINER_M, 14, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerCooltrainermPaul, -1
+	person_event SPRITE_COOLTRAINER_F, 2, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerCooltrainerfLola, -1
+	person_event SPRITE_GYM_GUY, 15, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, BlackthornGymGuyScript, -1
--- a/maps/BlackthornGym2F.asm
+++ b/maps/BlackthornGym2F.asm
@@ -145,11 +145,11 @@
 
 .PersonEvents:
 	db 8
-	person_event SPRITE_COOLTRAINER_M, 1, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerCooltrainermCody, -1
-	person_event SPRITE_COOLTRAINER_F, 11, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerCooltrainerfFran, -1
-	person_event SPRITE_BOULDER, 2, 8, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, BlackthornGymBoulder, EVENT_BOULDER_IN_BLACKTHORN_GYM_1
-	person_event SPRITE_BOULDER, 3, 2, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, BlackthornGymBoulder, EVENT_BOULDER_IN_BLACKTHORN_GYM_2
-	person_event SPRITE_BOULDER, 16, 6, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, BlackthornGymBoulder, EVENT_BOULDER_IN_BLACKTHORN_GYM_3
-	person_event SPRITE_BOULDER, 3, 3, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, BlackthornGymBoulder, -1
-	person_event SPRITE_BOULDER, 1, 6, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, BlackthornGymBoulder, -1
-	person_event SPRITE_BOULDER, 14, 8, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, BlackthornGymBoulder, -1
+	person_event SPRITE_COOLTRAINER_M, 1, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerCooltrainermCody, -1
+	person_event SPRITE_COOLTRAINER_F, 11, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerCooltrainerfFran, -1
+	person_event SPRITE_BOULDER, 2, 8, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackthornGymBoulder, EVENT_BOULDER_IN_BLACKTHORN_GYM_1
+	person_event SPRITE_BOULDER, 3, 2, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackthornGymBoulder, EVENT_BOULDER_IN_BLACKTHORN_GYM_2
+	person_event SPRITE_BOULDER, 16, 6, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackthornGymBoulder, EVENT_BOULDER_IN_BLACKTHORN_GYM_3
+	person_event SPRITE_BOULDER, 3, 3, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackthornGymBoulder, -1
+	person_event SPRITE_BOULDER, 1, 6, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackthornGymBoulder, -1
+	person_event SPRITE_BOULDER, 14, 8, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackthornGymBoulder, -1
--- a/maps/BlackthornMart.asm
+++ b/maps/BlackthornMart.asm
@@ -58,6 +58,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x195a5d, -1
-	person_event SPRITE_COOLTRAINER_M, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, 0, 0, CooltrainerMScript_0x195a64, -1
-	person_event SPRITE_BLACK_BELT, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, BlackBeltScript_0x195a67, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x195a5d, -1
+	person_event SPRITE_COOLTRAINER_M, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x195a64, -1
+	person_event SPRITE_BLACK_BELT, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x195a67, -1
--- a/maps/BlackthornPokeCenter1F.asm
+++ b/maps/BlackthornPokeCenter1F.asm
@@ -61,7 +61,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x195b79, -1
-	person_event SPRITE_GENTLEMAN, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, GentlemanScript_0x195b7c, -1
-	person_event SPRITE_TWIN, 4, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TwinScript_0x195b7f, -1
-	person_event SPRITE_COOLTRAINER_M, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerMScript_0x195b82, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x195b79, -1
+	person_event SPRITE_GENTLEMAN, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x195b7c, -1
+	person_event SPRITE_TWIN, 4, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TwinScript_0x195b7f, -1
+	person_event SPRITE_COOLTRAINER_M, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x195b82, -1
--- a/maps/BluesHouse.asm
+++ b/maps/BluesHouse.asm
@@ -37,7 +37,7 @@
 	special RestartMapMusic
 	loadfont
 	writetext UnknownText_0x19b296
-	special Functionc472
+	special PlayCurMonCry
 	keeptextopen
 	writetext UnknownText_0x19b2aa
 	closetext
@@ -158,4 +158,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_DAISY, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, DaisyScript_0x19b0d0, -1
+	person_event SPRITE_DAISY, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, DaisyScript_0x19b0d0, -1
--- a/maps/BrunosRoom.asm
+++ b/maps/BrunosRoom.asm
@@ -145,4 +145,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_BRUNO, 7, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, BrunoScript_0x1809c5, -1
+	person_event SPRITE_BRUNO, 7, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, BrunoScript_0x1809c5, -1
--- a/maps/BurnedTower1F.asm
+++ b/maps/BurnedTower1F.asm
@@ -49,7 +49,7 @@
 
 UnknownScript_0x185c25:
 	showemote EMOTE_SHOCK, $4, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	spriteface $4, RIGHT
 	pause 15
@@ -98,7 +98,7 @@
 	loadmovesprites
 	dotrigger $2
 	setevent EVENT_RIVAL_BURNED_TOWER
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	earthquake 50
 	showemote EMOTE_SHOCK, PLAYER, 15
@@ -160,7 +160,7 @@
 	step_end
 
 UnknownText_0x185cd9:
-	text $56, " ", $56, " ", $56
+	text "<......> <......> <......>"
 
 	para "…Oh, it's you."
 
@@ -309,8 +309,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_ROCK, 4, 15, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, BurnedTower1FRock, -1
-	person_event SPRITE_SUPER_NERD, 12, 12, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SuperNerdScript_0x185cbc, EVENT_BURNED_TOWER_1F_EUSINE
-	person_event SPRITE_SILVER, 9, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 2, 3, ObjectEvent, EVENT_RIVAL_BURNED_TOWER
-	person_event SPRITE_MORTY, 14, 14, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, MortyScript_0x185cbf, EVENT_BURNED_TOWER_MORTY
-	person_event SPRITE_POKE_BALL, 2, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x185ccb, EVENT_BURNED_TOWER_1F_HP_UP
+	person_event SPRITE_ROCK, 4, 15, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BurnedTower1FRock, -1
+	person_event SPRITE_SUPER_NERD, 12, 12, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x185cbc, EVENT_BURNED_TOWER_1F_EUSINE
+	person_event SPRITE_SILVER, 9, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, ObjectEvent, EVENT_RIVAL_BURNED_TOWER
+	person_event SPRITE_MORTY, 14, 14, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, MortyScript_0x185cbf, EVENT_BURNED_TOWER_MORTY
+	person_event SPRITE_POKE_BALL, 2, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x185ccb, EVENT_BURNED_TOWER_1F_HP_UP
--- a/maps/BurnedTowerB1F.asm
+++ b/maps/BurnedTowerB1F.asm
@@ -251,12 +251,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_BOULDER, 8, 17, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, BurnedTowerB1FBoulder, -1
-	person_event SPRITE_RAIKOU, 3, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, ObjectEvent, EVENT_BURNED_TOWER_B1F_BEASTS_1
-	person_event SPRITE_ENTEI, 3, 12, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ObjectEvent, EVENT_BURNED_TOWER_B1F_BEASTS_1
-	person_event SPRITE_SUICUNE, 4, 10, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ObjectEvent, EVENT_BURNED_TOWER_B1F_BEASTS_1
-	person_event SPRITE_RAIKOU, 3, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_SILVER, 0, 0, ObjectEvent, EVENT_BURNED_TOWER_B1F_BEASTS_2
-	person_event SPRITE_ENTEI, 3, 12, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_SILVER, 0, 0, ObjectEvent, EVENT_BURNED_TOWER_B1F_BEASTS_2
-	person_event SPRITE_SUICUNE, 4, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_SILVER, 0, 0, ObjectEvent, EVENT_BURNED_TOWER_B1F_BEASTS_2
-	person_event SPRITE_POKE_BALL, 4, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x186231, EVENT_BURNED_TOWER_B1F_TM_ENDURE
-	person_event SPRITE_SUPER_NERD, 12, 10, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SuperNerdScript_0x186212, EVENT_EUSINE_IN_BURNED_TOWER
+	person_event SPRITE_BOULDER, 8, 17, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BurnedTowerB1FBoulder, -1
+	person_event SPRITE_RAIKOU, 3, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_BURNED_TOWER_B1F_BEASTS_1
+	person_event SPRITE_ENTEI, 3, 12, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_BURNED_TOWER_B1F_BEASTS_1
+	person_event SPRITE_SUICUNE, 4, 10, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_BURNED_TOWER_B1F_BEASTS_1
+	person_event SPRITE_RAIKOU, 3, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_SILVER, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_BURNED_TOWER_B1F_BEASTS_2
+	person_event SPRITE_ENTEI, 3, 12, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_SILVER, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_BURNED_TOWER_B1F_BEASTS_2
+	person_event SPRITE_SUICUNE, 4, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_SILVER, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_BURNED_TOWER_B1F_BEASTS_2
+	person_event SPRITE_POKE_BALL, 4, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x186231, EVENT_BURNED_TOWER_B1F_TM_ENDURE
+	person_event SPRITE_SUPER_NERD, 12, 10, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x186212, EVENT_EUSINE_IN_BURNED_TOWER
--- a/maps/CeladonCafe.asm
+++ b/maps/CeladonCafe.asm
@@ -219,8 +219,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_SUPER_NERD, 3, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, SuperNerdScript_0x73049, -1
-	person_event SPRITE_FISHER, 6, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, FisherScript_0x73051, -1
-	person_event SPRITE_FISHER, 7, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x73062, -1
-	person_event SPRITE_FISHER, 2, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, FisherScript_0x73073, -1
-	person_event SPRITE_TEACHER, 3, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, TeacherScript_0x73084, -1
+	person_event SPRITE_SUPER_NERD, 3, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x73049, -1
+	person_event SPRITE_FISHER, 6, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FisherScript_0x73051, -1
+	person_event SPRITE_FISHER, 7, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x73062, -1
+	person_event SPRITE_FISHER, 2, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FisherScript_0x73073, -1
+	person_event SPRITE_TEACHER, 3, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x73084, -1
--- a/maps/CeladonCity.asm
+++ b/maps/CeladonCity.asm
@@ -257,12 +257,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_FISHER, 11, 26, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x1a9f43, -1
-	person_event SPRITE_POLIWAG, 11, 27, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, CeladonCityPoliwrath, -1
-	person_event SPRITE_TEACHER, 24, 20, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, TeacherScript_0x1a9f50, -1
-	person_event SPRITE_GRAMPS, 16, 14, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, GrampsScript_0x1a9f53, -1
-	person_event SPRITE_GRAMPS, 31, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, GrampsScript_0x1a9f56, -1
-	person_event SPRITE_YOUNGSTER, 13, 18, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, YoungsterScript_0x1a9f59, -1
-	person_event SPRITE_YOUNGSTER, 33, 24, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x1a9f5c, -1
-	person_event SPRITE_TEACHER, 14, 6, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TeacherScript_0x1a9f5f, -1
-	person_event SPRITE_LASS, 22, 7, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, LassScript_0x1a9f62, -1
+	person_event SPRITE_FISHER, 11, 26, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x1a9f43, -1
+	person_event SPRITE_POLIWAG, 11, 27, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, CeladonCityPoliwrath, -1
+	person_event SPRITE_TEACHER, 24, 20, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, TeacherScript_0x1a9f50, -1
+	person_event SPRITE_GRAMPS, 16, 14, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1a9f53, -1
+	person_event SPRITE_GRAMPS, 31, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1a9f56, -1
+	person_event SPRITE_YOUNGSTER, 13, 18, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1a9f59, -1
+	person_event SPRITE_YOUNGSTER, 33, 24, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1a9f5c, -1
+	person_event SPRITE_TEACHER, 14, 6, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TeacherScript_0x1a9f5f, -1
+	person_event SPRITE_LASS, 22, 7, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, LassScript_0x1a9f62, -1
--- a/maps/CeladonDeptStore1F.asm
+++ b/maps/CeladonDeptStore1F.asm
@@ -89,6 +89,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_RECEPTIONIST, 1, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ReceptionistScript_0x709e0, -1
-	person_event SPRITE_GENTLEMAN, 4, 11, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, GentlemanScript_0x709e3, -1
-	person_event SPRITE_TEACHER, 3, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TeacherScript_0x709e6, -1
+	person_event SPRITE_RECEPTIONIST, 1, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x709e0, -1
+	person_event SPRITE_GENTLEMAN, 4, 11, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x709e3, -1
+	person_event SPRITE_TEACHER, 3, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TeacherScript_0x709e6, -1
--- a/maps/CeladonDeptStore2F.asm
+++ b/maps/CeladonDeptStore2F.asm
@@ -82,7 +82,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_CLERK, 5, 13, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ClerkScript_0x70bad, -1
-	person_event SPRITE_CLERK, 5, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ClerkScript_0x70bb5, -1
-	person_event SPRITE_POKEFAN_M, 2, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanMScript_0x70bbd, -1
-	person_event SPRITE_YOUNGSTER, 2, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x70bc0, -1
+	person_event SPRITE_CLERK, 5, 13, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ClerkScript_0x70bad, -1
+	person_event SPRITE_CLERK, 5, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ClerkScript_0x70bb5, -1
+	person_event SPRITE_POKEFAN_M, 2, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x70bbd, -1
+	person_event SPRITE_YOUNGSTER, 2, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x70bc0, -1
--- a/maps/CeladonDeptStore3F.asm
+++ b/maps/CeladonDeptStore3F.asm
@@ -107,8 +107,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_CLERK, 1, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ClerkScript_0x70d29, -1
-	person_event SPRITE_YOUNGSTER, 4, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x70d31, -1
-	person_event SPRITE_GAMEBOY_KID, 1, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, GameboyKidScript_0x70d34, -1
-	person_event SPRITE_GAMEBOY_KID, 1, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GameboyKidScript_0x70d3f, -1
-	person_event SPRITE_SUPER_NERD, 4, 13, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SuperNerdScript_0x70d4a, -1
+	person_event SPRITE_CLERK, 1, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ClerkScript_0x70d29, -1
+	person_event SPRITE_YOUNGSTER, 4, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x70d31, -1
+	person_event SPRITE_GAMEBOY_KID, 1, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, GameboyKidScript_0x70d34, -1
+	person_event SPRITE_GAMEBOY_KID, 1, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GameboyKidScript_0x70d3f, -1
+	person_event SPRITE_SUPER_NERD, 4, 13, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x70d4a, -1
--- a/maps/CeladonDeptStore4F.asm
+++ b/maps/CeladonDeptStore4F.asm
@@ -65,6 +65,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 5, 13, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ClerkScript_0x70f0d, -1
-	person_event SPRITE_SUPER_NERD, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, SuperNerdScript_0x70f15, -1
-	person_event SPRITE_YOUNGSTER, 2, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, YoungsterScript_0x70f18, -1
+	person_event SPRITE_CLERK, 5, 13, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ClerkScript_0x70f0d, -1
+	person_event SPRITE_SUPER_NERD, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x70f15, -1
+	person_event SPRITE_YOUNGSTER, 2, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x70f18, -1
--- a/maps/CeladonDeptStore5F.asm
+++ b/maps/CeladonDeptStore5F.asm
@@ -84,8 +84,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_CLERK, 5, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ClerkScript_0x71004, -1
-	person_event SPRITE_CLERK, 5, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ClerkScript_0x7100c, -1
-	person_event SPRITE_GENTLEMAN, 5, 13, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, GentlemanScript_0x71014, -1
-	person_event SPRITE_SAILOR, 4, 3, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SailorScript_0x71017, -1
-	person_event SPRITE_TEACHER, 7, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TeacherScript_0x7101a, -1
+	person_event SPRITE_CLERK, 5, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ClerkScript_0x71004, -1
+	person_event SPRITE_CLERK, 5, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ClerkScript_0x7100c, -1
+	person_event SPRITE_GENTLEMAN, 5, 13, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x71014, -1
+	person_event SPRITE_SAILOR, 4, 3, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SailorScript_0x71017, -1
+	person_event SPRITE_TEACHER, 7, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TeacherScript_0x7101a, -1
--- a/maps/CeladonDeptStore6F.asm
+++ b/maps/CeladonDeptStore6F.asm
@@ -7,9 +7,9 @@
 
 	; callbacks
 
-	dbw 1, UnknownScript_0x71175
+	dbw 1, .Callback
 
-UnknownScript_0x71175:
+.Callback:
 	changeblock $c, $0, $3
 	return
 
@@ -23,7 +23,7 @@
 	loadfont
 	writetext CeladonVendingText
 .Start
-	special Function24ae8
+	special PlaceMoneyTopRightOW
 	loadmenudata .MenuData
 	interpretmenu2
 	writebackup
@@ -168,5 +168,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_SUPER_NERD, 2, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, SuperNerdScript_0x7117a, -1
-	person_event SPRITE_YOUNGSTER, 5, 12, SPRITEMOVEDATA_WANDER, 1, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x7117d, -1
+	person_event SPRITE_SUPER_NERD, 2, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x7117a, -1
+	person_event SPRITE_YOUNGSTER, 5, 12, SPRITEMOVEDATA_WANDER, 1, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x7117d, -1
--- a/maps/CeladonGameCorner.asm
+++ b/maps/CeladonGameCorner.asm
@@ -325,12 +325,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_CLERK, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ClerkScript_0x7211d, -1
-	person_event SPRITE_RECEPTIONIST, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ReceptionistScript_0x72120, -1
-	person_event SPRITE_POKEFAN_M, 10, 14, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanMScript_0x72123, -1
-	person_event SPRITE_TEACHER, 7, 17, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, TeacherScript_0x7212e, -1
-	person_event SPRITE_FISHING_GURU, 7, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FishingGuruScript_0x72139, -1
-	person_event SPRITE_FISHER, 10, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, 2, (1 << 3) | PAL_OW_RED, 0, 0, FisherScript_0x72144, -1
-	person_event SPRITE_FISHER, 10, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, 4, (1 << 3) | PAL_OW_RED, 0, 0, FisherScript_0x72144, -1
-	person_event SPRITE_GYM_GUY, 3, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CeladonGymGuyScript, -1
-	person_event SPRITE_GRAMPS, 8, 2, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, GrampsScript_0x72190, -1
+	person_event SPRITE_CLERK, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ClerkScript_0x7211d, -1
+	person_event SPRITE_RECEPTIONIST, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x72120, -1
+	person_event SPRITE_POKEFAN_M, 10, 14, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x72123, -1
+	person_event SPRITE_TEACHER, 7, 17, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, TeacherScript_0x7212e, -1
+	person_event SPRITE_FISHING_GURU, 7, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FishingGuruScript_0x72139, -1
+	person_event SPRITE_FISHER, 10, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, 2, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, FisherScript_0x72144, -1
+	person_event SPRITE_FISHER, 10, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, 4, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, FisherScript_0x72144, -1
+	person_event SPRITE_GYM_GUY, 3, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CeladonGymGuyScript, -1
+	person_event SPRITE_GRAMPS, 8, 2, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, GrampsScript_0x72190, -1
--- a/maps/CeladonGameCornerPrizeRoom.asm
+++ b/maps/CeladonGameCornerPrizeRoom.asm
@@ -284,5 +284,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_GENTLEMAN, 2, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, GentlemanScript_0x726e9, -1
-	person_event SPRITE_PHARMACIST, 4, 4, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, PharmacistScript_0x726ec, -1
+	person_event SPRITE_GENTLEMAN, 2, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x726e9, -1
+	person_event SPRITE_PHARMACIST, 4, 4, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, PharmacistScript_0x726ec, -1
--- a/maps/CeladonGym.asm
+++ b/maps/CeladonGym.asm
@@ -278,9 +278,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_ERIKA, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ErikaScript_0x72a6a, -1
-	person_event SPRITE_LASS, 8, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerLassMichelle, -1
-	person_event SPRITE_LASS, 8, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 2, TrainerPicnickerTanya, -1
-	person_event SPRITE_BUENA, 5, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerBeautyJulia, -1
-	person_event SPRITE_TWIN, 10, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerTwinsJoandzoe1, -1
-	person_event SPRITE_TWIN, 10, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerTwinsJoandzoe2, -1
+	person_event SPRITE_ERIKA, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ErikaScript_0x72a6a, -1
+	person_event SPRITE_LASS, 8, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerLassMichelle, -1
+	person_event SPRITE_LASS, 8, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 2, TrainerPicnickerTanya, -1
+	person_event SPRITE_BUENA, 5, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerBeautyJulia, -1
+	person_event SPRITE_TWIN, 10, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerTwinsJoandzoe1, -1
+	person_event SPRITE_TWIN, 10, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerTwinsJoandzoe2, -1
--- a/maps/CeladonMansion1F.asm
+++ b/maps/CeladonMansion1F.asm
@@ -91,7 +91,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_GRANNY, 5, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, CeladonMansionManager, -1
-	person_event SPRITE_GROWLITHE, 6, 2, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, CeladonMansion1FMeowth, -1
-	person_event SPRITE_CLEFAIRY, 4, 3, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, CeladonMansion1FClefairy, -1
-	person_event SPRITE_GROWLITHE, 4, 4, SPRITEMOVEDATA_POKEMON, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, CeladonMansion1FNidoranF, -1
+	person_event SPRITE_GRANNY, 5, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CeladonMansionManager, -1
+	person_event SPRITE_GROWLITHE, 6, 2, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CeladonMansion1FMeowth, -1
+	person_event SPRITE_CLEFAIRY, 4, 3, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CeladonMansion1FClefairy, -1
+	person_event SPRITE_GROWLITHE, 4, 4, SPRITEMOVEDATA_POKEMON, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, CeladonMansion1FNidoranF, -1
--- a/maps/CeladonMansion3F.asm
+++ b/maps/CeladonMansion3F.asm
@@ -22,7 +22,7 @@
 	waitbutton
 	writetext UnknownText_0x71760
 	keeptextopen
-	special Functionc49f
+	special Diploma
 	writetext UnknownText_0x71763
 	closetext
 	loadmovesprites
@@ -43,7 +43,7 @@
 	writetext UnknownText_0x717d8
 	yesorno
 	iffalse UnknownScript_0x716b0
-	special Functionc4ac
+	special PrintDiploma
 	loadmovesprites
 	end
 
@@ -206,7 +206,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_COOLTRAINER_M, 6, 3, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerMScript_0x71670, -1
-	person_event SPRITE_GYM_GUY, 4, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GymGuyScript_0x71696, -1
-	person_event SPRITE_SUPER_NERD, 7, 0, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SuperNerdScript_0x716bc, -1
-	person_event SPRITE_FISHER, 4, 0, SPRITEMOVEDATA_STANDING_UP, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, FisherScript_0x716bf, -1
+	person_event SPRITE_COOLTRAINER_M, 6, 3, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x71670, -1
+	person_event SPRITE_GYM_GUY, 4, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GymGuyScript_0x71696, -1
+	person_event SPRITE_SUPER_NERD, 7, 0, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x716bc, -1
+	person_event SPRITE_FISHER, 4, 0, SPRITEMOVEDATA_STANDING_UP, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, FisherScript_0x716bf, -1
--- a/maps/CeladonMansionRoof.asm
+++ b/maps/CeladonMansionRoof.asm
@@ -49,4 +49,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_FISHER, 5, 7, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, FisherScript_0x71a39, -1
+	person_event SPRITE_FISHER, 5, 7, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, FisherScript_0x71a39, -1
--- a/maps/CeladonMansionRoofHouse.asm
+++ b/maps/CeladonMansionRoofHouse.asm
@@ -130,4 +130,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_PHARMACIST, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 2, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, PharmacistScript_0x71afd, -1
+	person_event SPRITE_PHARMACIST, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 2, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, PharmacistScript_0x71afd, -1
--- a/maps/CeladonPokeCenter1F.asm
+++ b/maps/CeladonPokeCenter1F.asm
@@ -156,8 +156,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x71e22, -1
-	person_event SPRITE_GENTLEMAN, 5, 1, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, GentlemanScript_0x71e25, -1
-	person_event SPRITE_PHARMACIST, 3, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PharmacistScript_0x71e2b, -1
-	person_event SPRITE_COOLTRAINER_F, 6, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerFScript_0x71e28, -1
-	person_event SPRITE_SUPER_NERD, 3, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SuperNerdScript_0x71e2e, EVENT_SET_WHEN_FOUGHT_HO_OH
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x71e22, -1
+	person_event SPRITE_GENTLEMAN, 5, 1, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x71e25, -1
+	person_event SPRITE_PHARMACIST, 3, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PharmacistScript_0x71e2b, -1
+	person_event SPRITE_COOLTRAINER_F, 6, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x71e28, -1
+	person_event SPRITE_SUPER_NERD, 3, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x71e2e, EVENT_SET_WHEN_FOUGHT_HO_OH
--- a/maps/CeruleanCity.asm
+++ b/maps/CeruleanCity.asm
@@ -299,9 +299,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_COOLTRAINER_M, 23, 15, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, CooltrainerMScript_0x184009, -1
-	person_event SPRITE_SUPER_NERD, 15, 23, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SuperNerdScript_0x18401d, -1
-	person_event SPRITE_SLOWPOKE, 24, 20, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, CeruleanCitySlowbro, -1
-	person_event SPRITE_COOLTRAINER_F, 24, 21, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerFScript_0x18402a, -1
-	person_event SPRITE_FISHER, 26, 30, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, FisherScript_0x18404a, -1
-	person_event SPRITE_YOUNGSTER, 12, 6, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x184064, -1
+	person_event SPRITE_COOLTRAINER_M, 23, 15, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x184009, -1
+	person_event SPRITE_SUPER_NERD, 15, 23, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x18401d, -1
+	person_event SPRITE_SLOWPOKE, 24, 20, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CeruleanCitySlowbro, -1
+	person_event SPRITE_COOLTRAINER_F, 24, 21, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x18402a, -1
+	person_event SPRITE_FISHER, 26, 30, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, FisherScript_0x18404a, -1
+	person_event SPRITE_YOUNGSTER, 12, 6, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x184064, -1
--- a/maps/CeruleanGym.asm
+++ b/maps/CeruleanGym.asm
@@ -377,9 +377,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_ROCKET, 10, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_CERULEAN_GYM_ROCKET
-	person_event SPRITE_MISTY, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, MistyScript_0x188432, EVENT_TRAINERS_IN_CERULEAN_GYM
-	person_event SPRITE_SWIMMER_GIRL, 6, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerSwimmerfDiana, EVENT_TRAINERS_IN_CERULEAN_GYM
-	person_event SPRITE_SWIMMER_GIRL, 9, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerSwimmerfBriana, EVENT_TRAINERS_IN_CERULEAN_GYM
-	person_event SPRITE_SWIMMER_GUY, 9, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerSwimmermParker, EVENT_TRAINERS_IN_CERULEAN_GYM
-	person_event SPRITE_GYM_GUY, 13, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, CeruleanGymGuyScript, EVENT_TRAINERS_IN_CERULEAN_GYM
+	person_event SPRITE_ROCKET, 10, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_CERULEAN_GYM_ROCKET
+	person_event SPRITE_MISTY, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, MistyScript_0x188432, EVENT_TRAINERS_IN_CERULEAN_GYM
+	person_event SPRITE_SWIMMER_GIRL, 6, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerSwimmerfDiana, EVENT_TRAINERS_IN_CERULEAN_GYM
+	person_event SPRITE_SWIMMER_GIRL, 9, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerSwimmerfBriana, EVENT_TRAINERS_IN_CERULEAN_GYM
+	person_event SPRITE_SWIMMER_GUY, 9, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerSwimmermParker, EVENT_TRAINERS_IN_CERULEAN_GYM
+	person_event SPRITE_GYM_GUY, 13, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, CeruleanGymGuyScript, EVENT_TRAINERS_IN_CERULEAN_GYM
--- a/maps/CeruleanGymBadgeSpeechHouse.asm
+++ b/maps/CeruleanGymBadgeSpeechHouse.asm
@@ -30,4 +30,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKEFAN_M, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, PokefanMScript_0x188002, -1
+	person_event SPRITE_POKEFAN_M, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x188002, -1
--- a/maps/CeruleanMart.asm
+++ b/maps/CeruleanMart.asm
@@ -57,6 +57,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x188ac0, -1
-	person_event SPRITE_COOLTRAINER_M, 6, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerMScript_0x188ac7, -1
-	person_event SPRITE_COOLTRAINER_F, 2, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerFScript_0x188aca, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x188ac0, -1
+	person_event SPRITE_COOLTRAINER_M, 6, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x188ac7, -1
+	person_event SPRITE_COOLTRAINER_F, 2, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x188aca, -1
--- a/maps/CeruleanPokeCenter1F.asm
+++ b/maps/CeruleanPokeCenter1F.asm
@@ -9,11 +9,11 @@
 	jumpstd pokecenternurse
 
 SuperNerdScript_0x188212:
-	special Function10630f
-	iftrue UnknownScript_0x18821b
+	special Mobile_DummyReturnFalse
+	iftrue .mobile
 	jumptextfaceplayer UnknownText_0x188221
 
-UnknownScript_0x18821b:
+.mobile:
 	jumptextfaceplayer UnknownText_0x18828c
 
 GymGuyScript_0x18821e:
@@ -75,6 +75,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x18820f, -1
-	person_event SPRITE_SUPER_NERD, 4, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, SuperNerdScript_0x188212, -1
-	person_event SPRITE_GYM_GUY, 5, 1, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, GymGuyScript_0x18821e, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x18820f, -1
+	person_event SPRITE_SUPER_NERD, 4, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x188212, -1
+	person_event SPRITE_GYM_GUY, 5, 1, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, GymGuyScript_0x18821e, -1
--- a/maps/CeruleanPoliceStation.asm
+++ b/maps/CeruleanPoliceStation.asm
@@ -55,6 +55,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_FISHING_GURU, 1, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FishingGuruScript_0x18804a, -1
-	person_event SPRITE_POKEFAN_F, 4, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, PokefanFScript_0x18804d, -1
-	person_event SPRITE_DIGLETT, 5, 3, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, DiglettScript_0x188050, -1
+	person_event SPRITE_FISHING_GURU, 1, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FishingGuruScript_0x18804a, -1
+	person_event SPRITE_POKEFAN_F, 4, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x18804d, -1
+	person_event SPRITE_DIGLETT, 5, 3, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, DiglettScript_0x188050, -1
--- a/maps/CeruleanTradeSpeechHouse.asm
+++ b/maps/CeruleanTradeSpeechHouse.asm
@@ -64,7 +64,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_GRANNY, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GrannyScript_0x188133, -1
-	person_event SPRITE_GRAMPS, 2, 1, SPRITEMOVEDATA_WANDER, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, GrampsScript_0x188136, -1
-	person_event SPRITE_RHYDON, 2, 5, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, RhydonScript_0x188139, -1
-	person_event SPRITE_ZUBAT, 6, 5, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, ZubatScript_0x188143, -1
+	person_event SPRITE_GRANNY, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GrannyScript_0x188133, -1
+	person_event SPRITE_GRAMPS, 2, 1, SPRITEMOVEDATA_WANDER, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, GrampsScript_0x188136, -1
+	person_event SPRITE_RHYDON, 2, 5, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, RhydonScript_0x188139, -1
+	person_event SPRITE_ZUBAT, 6, 5, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ZubatScript_0x188143, -1
--- a/maps/CharcoalKiln.asm
+++ b/maps/CharcoalKiln.asm
@@ -163,6 +163,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_BLACK_BELT, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, CharcoalKilnBoss, EVENT_CHARCOAL_KILN_BOSS
-	person_event SPRITE_YOUNGSTER, 3, 5, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, CharcoalKilnApprentice, EVENT_CHARCOAL_KILN_APPRENTICE
-	person_event SPRITE_MOLTRES, 6, 5, SPRITEMOVEDATA_POKEMON, 2, 2, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, CharcoalKilnFarfetchd, EVENT_CHARCOAL_KILN_FARFETCH_D
+	person_event SPRITE_BLACK_BELT, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CharcoalKilnBoss, EVENT_CHARCOAL_KILN_BOSS
+	person_event SPRITE_YOUNGSTER, 3, 5, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CharcoalKilnApprentice, EVENT_CHARCOAL_KILN_APPRENTICE
+	person_event SPRITE_MOLTRES, 6, 5, SPRITEMOVEDATA_POKEMON, 2, 2, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, CharcoalKilnFarfetchd, EVENT_CHARCOAL_KILN_FARFETCH_D
--- a/maps/CherrygroveCity.asm
+++ b/maps/CherrygroveCity.asm
@@ -103,7 +103,7 @@
 UnknownScript_0x19c0ae:
 	spriteface PLAYER, RIGHT
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	appear $3
 	applymovement $3, MovementData_0x19c1ce
@@ -431,7 +431,7 @@
 	done
 
 UnknownText_0x19c4e2:
-	text $56, " ", $56, " ", $56
+	text "<......> <......> <......>"
 
 	para "You got a #MON"
 	line "at the LAB."
@@ -439,7 +439,7 @@
 	para "What a waste."
 	line "A wimp like you."
 
-	para $56, " ", $56, " ", $56
+	para "<......> <......> <......>"
 
 	para "Don't you get what"
 	line "I'm saying?"
@@ -457,7 +457,7 @@
 	done
 
 UnknownText_0x19c59e:
-	text $56, " ", $56, " ", $56
+	text "<......> <......> <......>"
 
 	para "My name's ???."
 
@@ -473,7 +473,7 @@
 	done
 
 UnknownText_0x19c608:
-	text $56, " ", $56, " ", $56
+	text "<......> <......> <......>"
 
 	para "My name's ???."
 
@@ -570,8 +570,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_GRAMPS, 6, 32, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, CherrygroveCityGuideGent, EVENT_GUIDE_GENT_IN_HIS_HOUSE
-	person_event SPRITE_SILVER, 6, 39, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_RIVAL_CHERRYGROVE_CITY
-	person_event SPRITE_TEACHER, 12, 27, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, TeacherScript_0x19c146, -1
-	person_event SPRITE_YOUNGSTER, 7, 23, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x19c15a, -1
-	person_event SPRITE_FISHER, 12, 7, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, MysticWaterGuy, -1
+	person_event SPRITE_GRAMPS, 6, 32, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CherrygroveCityGuideGent, EVENT_GUIDE_GENT_IN_HIS_HOUSE
+	person_event SPRITE_SILVER, 6, 39, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_RIVAL_CHERRYGROVE_CITY
+	person_event SPRITE_TEACHER, 12, 27, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, TeacherScript_0x19c146, -1
+	person_event SPRITE_YOUNGSTER, 7, 23, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x19c15a, -1
+	person_event SPRITE_FISHER, 12, 7, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, MysticWaterGuy, -1
--- a/maps/CherrygroveEvolutionSpeechHouse.asm
+++ b/maps/CherrygroveEvolutionSpeechHouse.asm
@@ -56,5 +56,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_LASS, 5, 3, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x196cb9, -1
-	person_event SPRITE_YOUNGSTER, 5, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x196cb2, -1
+	person_event SPRITE_LASS, 5, 3, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x196cb9, -1
+	person_event SPRITE_YOUNGSTER, 5, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x196cb2, -1
--- a/maps/CherrygroveGymSpeechHouse.asm
+++ b/maps/CherrygroveGymSpeechHouse.asm
@@ -59,5 +59,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_POKEFAN_M, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, PokefanMScript_0x196ae1, -1
-	person_event SPRITE_BUG_CATCHER, 5, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, BugCatcherScript_0x196ae4, -1
+	person_event SPRITE_POKEFAN_M, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x196ae1, -1
+	person_event SPRITE_BUG_CATCHER, 5, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, BugCatcherScript_0x196ae4, -1
--- a/maps/CherrygroveMart.asm
+++ b/maps/CherrygroveMart.asm
@@ -83,6 +83,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x19680a, -1
-	person_event SPRITE_COOLTRAINER_M, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, 0, 0, CooltrainerMScript_0x19681d, -1
-	person_event SPRITE_YOUNGSTER, 5, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x196831, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x19680a, -1
+	person_event SPRITE_COOLTRAINER_M, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x19681d, -1
+	person_event SPRITE_YOUNGSTER, 5, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x196831, -1
--- a/maps/CherrygrovePokeCenter1F.asm
+++ b/maps/CherrygrovePokeCenter1F.asm
@@ -80,7 +80,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x19696d, -1
-	person_event SPRITE_FISHER, 3, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, FisherScript_0x196970, -1
-	person_event SPRITE_GENTLEMAN, 6, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, GentlemanScript_0x196973, -1
-	person_event SPRITE_TEACHER, 6, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TeacherScript_0x196976, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x19696d, -1
+	person_event SPRITE_FISHER, 3, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, FisherScript_0x196970, -1
+	person_event SPRITE_GENTLEMAN, 6, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x196973, -1
+	person_event SPRITE_TEACHER, 6, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TeacherScript_0x196976, -1
--- a/maps/CianwoodCity.asm
+++ b/maps/CianwoodCity.asm
@@ -66,7 +66,7 @@
 	applymovement $c, MovementData_0x1a00ec
 	disappear $c
 	pause 20
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	playmapmusic
 	pause 10
 .Done
@@ -401,15 +401,15 @@
 
 .PersonEvents:
 	db 12
-	person_event SPRITE_STANDING_YOUNGSTER, 37, 21, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, StandingYoungsterScript_0x1a00b3, -1
-	person_event SPRITE_POKEFAN_M, 33, 17, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, PokefanMScript_0x1a00b6, -1
-	person_event SPRITE_LASS, 42, 14, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, 0, 0, 0, LassScript_0x1a00b9, -1
-	person_event SPRITE_ROCK, 16, 8, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, CianwoodCityRock, -1
-	person_event SPRITE_ROCK, 17, 9, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, CianwoodCityRock, -1
-	person_event SPRITE_ROCK, 25, 4, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, CianwoodCityRock, -1
-	person_event SPRITE_ROCK, 29, 5, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, CianwoodCityRock, -1
-	person_event SPRITE_ROCK, 27, 10, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, CianwoodCityRock, -1
-	person_event SPRITE_ROCK, 19, 4, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, CianwoodCityRock, -1
-	person_event SPRITE_POKEFAN_F, 46, 10, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, PokefanFScript_0x1a0084, -1
-	person_event SPRITE_SUPER_NERD, 21, 11, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ObjectEvent, EVENT_CIANWOOD_CITY_EUSINE
-	person_event SPRITE_SUICUNE, 14, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ObjectEvent, EVENT_SAW_SUICUNE_AT_CIANWOOD_CITY
+	person_event SPRITE_STANDING_YOUNGSTER, 37, 21, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, StandingYoungsterScript_0x1a00b3, -1
+	person_event SPRITE_POKEFAN_M, 33, 17, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x1a00b6, -1
+	person_event SPRITE_LASS, 42, 14, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x1a00b9, -1
+	person_event SPRITE_ROCK, 16, 8, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CianwoodCityRock, -1
+	person_event SPRITE_ROCK, 17, 9, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CianwoodCityRock, -1
+	person_event SPRITE_ROCK, 25, 4, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CianwoodCityRock, -1
+	person_event SPRITE_ROCK, 29, 5, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CianwoodCityRock, -1
+	person_event SPRITE_ROCK, 27, 10, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CianwoodCityRock, -1
+	person_event SPRITE_ROCK, 19, 4, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CianwoodCityRock, -1
+	person_event SPRITE_POKEFAN_F, 46, 10, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x1a0084, -1
+	person_event SPRITE_SUPER_NERD, 21, 11, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_CIANWOOD_CITY_EUSINE
+	person_event SPRITE_SUICUNE, 14, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_SAW_SUICUNE_AT_CIANWOOD_CITY
--- a/maps/CianwoodCityPhotoStudio.asm
+++ b/maps/CianwoodCityPhotoStudio.asm
@@ -62,4 +62,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_FISHING_GURU, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, FishingGuruScript_0x9e0e0, -1
+	person_event SPRITE_FISHING_GURU, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, FishingGuruScript_0x9e0e0, -1
--- a/maps/CianwoodGym.asm
+++ b/maps/CianwoodGym.asm
@@ -313,12 +313,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_CHUCK, 1, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, ChuckScript_0x9d60f, -1
-	person_event SPRITE_BLACK_BELT, 12, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerBlackbeltYoshi, -1
-	person_event SPRITE_BLACK_BELT, 12, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerBlackbeltLao, -1
-	person_event SPRITE_BLACK_BELT, 9, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerBlackbeltNob, -1
-	person_event SPRITE_BLACK_BELT, 5, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 1, TrainerBlackbeltLung, -1
-	person_event SPRITE_BOULDER, 1, 5, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, CianwoodGymBoulder, -1
-	person_event SPRITE_BOULDER, 7, 3, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, CianwoodGymBoulder, -1
-	person_event SPRITE_BOULDER, 7, 4, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, CianwoodGymBoulder, -1
-	person_event SPRITE_BOULDER, 7, 5, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, CianwoodGymBoulder, -1
+	person_event SPRITE_CHUCK, 1, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, ChuckScript_0x9d60f, -1
+	person_event SPRITE_BLACK_BELT, 12, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerBlackbeltYoshi, -1
+	person_event SPRITE_BLACK_BELT, 12, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerBlackbeltLao, -1
+	person_event SPRITE_BLACK_BELT, 9, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerBlackbeltNob, -1
+	person_event SPRITE_BLACK_BELT, 5, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 1, TrainerBlackbeltLung, -1
+	person_event SPRITE_BOULDER, 1, 5, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CianwoodGymBoulder, -1
+	person_event SPRITE_BOULDER, 7, 3, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CianwoodGymBoulder, -1
+	person_event SPRITE_BOULDER, 7, 4, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CianwoodGymBoulder, -1
+	person_event SPRITE_BOULDER, 7, 5, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CianwoodGymBoulder, -1
--- a/maps/CianwoodLugiaSpeechHouse.asm
+++ b/maps/CianwoodLugiaSpeechHouse.asm
@@ -75,6 +75,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_TEACHER, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, TeacherScript_0x9e1b0, -1
-	person_event SPRITE_LASS, 5, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x9e1b3, -1
-	person_event SPRITE_TWIN, 2, 0, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, TwinScript_0x9e1b6, -1
+	person_event SPRITE_TEACHER, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x9e1b0, -1
+	person_event SPRITE_LASS, 5, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x9e1b3, -1
+	person_event SPRITE_TWIN, 2, 0, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, TwinScript_0x9e1b6, -1
--- a/maps/CianwoodPharmacy.asm
+++ b/maps/CianwoodPharmacy.asm
@@ -90,4 +90,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_PHARMACIST, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CianwoodPharmacist, -1
+	person_event SPRITE_PHARMACIST, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CianwoodPharmacist, -1
--- a/maps/CianwoodPokeCenter1F.asm
+++ b/maps/CianwoodPokeCenter1F.asm
@@ -143,7 +143,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x9dbcf, -1
-	person_event SPRITE_LASS, 5, 1, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x9dbd2, -1
-	person_event SPRITE_GYM_GUY, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CianwoodGymGuyScript, -1
-	person_event SPRITE_SUPER_NERD, 6, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SuperNerdScript_0x9dbea, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x9dbcf, -1
+	person_event SPRITE_LASS, 5, 1, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x9dbd2, -1
+	person_event SPRITE_GYM_GUY, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CianwoodGymGuyScript, -1
+	person_event SPRITE_SUPER_NERD, 6, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x9dbea, -1
--- a/maps/CinnabarIsland.asm
+++ b/maps/CinnabarIsland.asm
@@ -146,4 +146,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_BLUE, 6, 9, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, CinnabarIslandBlue, EVENT_BLUE_IN_CINNABAR
+	person_event SPRITE_BLUE, 6, 9, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CinnabarIslandBlue, EVENT_BLUE_IN_CINNABAR
--- a/maps/CinnabarPokeCenter1F.asm
+++ b/maps/CinnabarPokeCenter1F.asm
@@ -47,6 +47,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x1ab32c, -1
-	person_event SPRITE_COOLTRAINER_F, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerFScript_0x1ab32f, -1
-	person_event SPRITE_FISHER, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x1ab332, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x1ab32c, -1
+	person_event SPRITE_COOLTRAINER_F, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x1ab32f, -1
+	person_event SPRITE_FISHER, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x1ab332, -1
--- a/maps/Colosseum.asm
+++ b/maps/Colosseum.asm
@@ -83,5 +83,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_CHRIS, 4, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ChrisScript_0x193499, EVENT_GAVE_KURT_APRICORNS
-	person_event SPRITE_CHRIS, 4, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, ChrisScript_0x193499, EVENT_RECEIVED_BALLS_FROM_KURT
+	person_event SPRITE_CHRIS, 4, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ChrisScript_0x193499, EVENT_GAVE_KURT_APRICORNS
+	person_event SPRITE_CHRIS, 4, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ChrisScript_0x193499, EVENT_RECEIVED_BALLS_FROM_KURT
--- a/maps/CopycatsHouse1F.asm
+++ b/maps/CopycatsHouse1F.asm
@@ -85,6 +85,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_POKEFAN_M, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, PokefanMScript_0x18ad13, -1
-	person_event SPRITE_POKEFAN_F, 4, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, PokefanFScript_0x18ad16, -1
-	person_event SPRITE_CLEFAIRY, 6, 6, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, ClefairyScript_0x18ad2a, -1
+	person_event SPRITE_POKEFAN_M, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x18ad13, -1
+	person_event SPRITE_POKEFAN_F, 4, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x18ad16, -1
+	person_event SPRITE_CLEFAIRY, 6, 6, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClefairyScript_0x18ad2a, -1
--- a/maps/CopycatsHouse2F.asm
+++ b/maps/CopycatsHouse2F.asm
@@ -373,9 +373,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_COPYCAT, 3, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, Copycat, EVENT_COPYCAT_1
-	person_event SPRITE_MOLTRES, 4, 6, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, CopycatsDodrio, -1
-	person_event SPRITE_FAIRY, 1, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CopycatsHouse2FDoll, EVENT_COPYCATS_HOUSE_2F_DOLL
-	person_event SPRITE_MONSTER, 1, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CopycatsHouse2FDoll, -1
-	person_event SPRITE_BIRD, 1, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, CopycatsHouse2FDoll, -1
-	person_event SPRITE_COPYCAT, 3, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, Copycat, EVENT_COPYCAT_2
+	person_event SPRITE_COPYCAT, 3, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, Copycat, EVENT_COPYCAT_1
+	person_event SPRITE_MOLTRES, 4, 6, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, CopycatsDodrio, -1
+	person_event SPRITE_FAIRY, 1, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CopycatsHouse2FDoll, EVENT_COPYCATS_HOUSE_2F_DOLL
+	person_event SPRITE_MONSTER, 1, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CopycatsHouse2FDoll, -1
+	person_event SPRITE_BIRD, 1, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, CopycatsHouse2FDoll, -1
+	person_event SPRITE_COPYCAT, 3, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, Copycat, EVENT_COPYCAT_2
--- a/maps/DanceTheatre.asm
+++ b/maps/DanceTheatre.asm
@@ -345,12 +345,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_KIMONO_GIRL, 2, 0, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 0, TrainerKimono_girlNaoko2, -1
-	person_event SPRITE_KIMONO_GIRL, 1, 2, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 0, TrainerKimono_girlSayo, -1
-	person_event SPRITE_KIMONO_GIRL, 2, 6, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 0, TrainerKimono_girlZuki, -1
-	person_event SPRITE_KIMONO_GIRL, 1, 9, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 0, TrainerKimono_girlKuni, -1
-	person_event SPRITE_KIMONO_GIRL, 2, 11, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 0, TrainerKimono_girlMiki, -1
-	person_event SPRITE_GENTLEMAN, 10, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, GentlemanScript_0x994c6, -1
-	person_event SPRITE_RHYDON, 8, 6, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, RhydonScript_0x9951b, -1
-	person_event SPRITE_COOLTRAINER_M, 10, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerMScript_0x99525, -1
-	person_event SPRITE_GRANNY, 6, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, GrannyScript_0x99528, -1
+	person_event SPRITE_KIMONO_GIRL, 2, 0, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 0, TrainerKimono_girlNaoko2, -1
+	person_event SPRITE_KIMONO_GIRL, 1, 2, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 0, TrainerKimono_girlSayo, -1
+	person_event SPRITE_KIMONO_GIRL, 2, 6, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 0, TrainerKimono_girlZuki, -1
+	person_event SPRITE_KIMONO_GIRL, 1, 9, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 0, TrainerKimono_girlKuni, -1
+	person_event SPRITE_KIMONO_GIRL, 2, 11, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 0, TrainerKimono_girlMiki, -1
+	person_event SPRITE_GENTLEMAN, 10, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x994c6, -1
+	person_event SPRITE_RHYDON, 8, 6, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, RhydonScript_0x9951b, -1
+	person_event SPRITE_COOLTRAINER_M, 10, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x99525, -1
+	person_event SPRITE_GRANNY, 6, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrannyScript_0x99528, -1
--- a/maps/DarkCaveBlackthornEntrance.asm
+++ b/maps/DarkCaveBlackthornEntrance.asm
@@ -73,6 +73,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_PHARMACIST, 3, 7, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, PharmacistScript_0x18c720, -1
-	person_event SPRITE_POKE_BALL, 24, 21, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c73b, EVENT_DARK_CAVE_BLACKTHORN_ENTRANCE_REVIVE
-	person_event SPRITE_POKE_BALL, 22, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c73d, EVENT_DARK_CAVE_BLACKTHORN_ENTRANCE_TM_SNORE
+	person_event SPRITE_PHARMACIST, 3, 7, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PharmacistScript_0x18c720, -1
+	person_event SPRITE_POKE_BALL, 24, 21, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c73b, EVENT_DARK_CAVE_BLACKTHORN_ENTRANCE_REVIVE
+	person_event SPRITE_POKE_BALL, 22, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c73d, EVENT_DARK_CAVE_BLACKTHORN_ENTRANCE_TM_SNORE
--- a/maps/DarkCaveVioletEntrance.asm
+++ b/maps/DarkCaveVioletEntrance.asm
@@ -43,11 +43,11 @@
 
 .PersonEvents:
 	db 8
-	person_event SPRITE_POKE_BALL, 8, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c68e, EVENT_DARK_CAVE_VIOLET_ENTRANCE_POTION
-	person_event SPRITE_ROCK, 14, 16, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, DarkCaveVioletEntranceRock, -1
-	person_event SPRITE_ROCK, 6, 27, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, DarkCaveVioletEntranceRock, -1
-	person_event SPRITE_ROCK, 14, 7, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, DarkCaveVioletEntranceRock, -1
-	person_event SPRITE_ROCK, 31, 36, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, DarkCaveVioletEntranceRock, -1
-	person_event SPRITE_POKE_BALL, 22, 36, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c690, EVENT_DARK_CAVE_VIOLET_ENTRANCE_FULL_HEAL
-	person_event SPRITE_POKE_BALL, 9, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c692, EVENT_DARK_CAVE_VIOLET_ENTRANCE_HYPER_POTION
-	person_event SPRITE_POKE_BALL, 28, 30, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c694, EVENT_DARK_CAVE_VIOLET_ENTRANCE_DIRE_HIT
+	person_event SPRITE_POKE_BALL, 8, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c68e, EVENT_DARK_CAVE_VIOLET_ENTRANCE_POTION
+	person_event SPRITE_ROCK, 14, 16, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, DarkCaveVioletEntranceRock, -1
+	person_event SPRITE_ROCK, 6, 27, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, DarkCaveVioletEntranceRock, -1
+	person_event SPRITE_ROCK, 14, 7, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, DarkCaveVioletEntranceRock, -1
+	person_event SPRITE_ROCK, 31, 36, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, DarkCaveVioletEntranceRock, -1
+	person_event SPRITE_POKE_BALL, 22, 36, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c690, EVENT_DARK_CAVE_VIOLET_ENTRANCE_FULL_HEAL
+	person_event SPRITE_POKE_BALL, 9, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c692, EVENT_DARK_CAVE_VIOLET_ENTRANCE_HYPER_POTION
+	person_event SPRITE_POKE_BALL, 28, 30, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c694, EVENT_DARK_CAVE_VIOLET_ENTRANCE_DIRE_HIT
--- a/maps/DayCare.asm
+++ b/maps/DayCare.asm
@@ -175,5 +175,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_GRAMPS, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, GrampsScript_0x62f8f, EVENT_DAYCARE_MAN_IN_DAYCARE
-	person_event SPRITE_GRANNY, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, GrannyScript_0x62fc3, -1
+	person_event SPRITE_GRAMPS, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x62f8f, EVENT_DAYCARE_MAN_IN_DAYCARE
+	person_event SPRITE_GRANNY, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, GrannyScript_0x62fc3, -1
--- a/maps/DiglettsCave.asm
+++ b/maps/DiglettsCave.asm
@@ -42,4 +42,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKEFAN_M, 31, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, PokefanMScript_0x74002, -1
+	person_event SPRITE_POKEFAN_M, 31, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x74002, -1
--- a/maps/DragonShrine.asm
+++ b/maps/DragonShrine.asm
@@ -130,7 +130,7 @@
 	writetext UnknownText_0x18d916
 	closetext
 	loadmovesprites
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	applymovement $5, MovementData_0x18d2da
 	loadfont
 	writetext UnknownText_0x18d974
@@ -681,7 +681,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_ELDER, 1, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ElderScript_0x18d1a5, EVENT_GAVE_KURT_APRICORNS
-	person_event SPRITE_ELDER, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ElderScript_0x18d205, EVENT_GAVE_KURT_APRICORNS
-	person_event SPRITE_ELDER, 4, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, ElderScript_0x18d20d, EVENT_GAVE_KURT_APRICORNS
-	person_event SPRITE_CLAIR, 8, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ObjectEvent, EVENT_DRAGON_SHRINE_CLAIR
+	person_event SPRITE_ELDER, 1, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ElderScript_0x18d1a5, EVENT_GAVE_KURT_APRICORNS
+	person_event SPRITE_ELDER, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ElderScript_0x18d205, EVENT_GAVE_KURT_APRICORNS
+	person_event SPRITE_ELDER, 4, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ElderScript_0x18d20d, EVENT_GAVE_KURT_APRICORNS
+	person_event SPRITE_CLAIR, 8, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_DRAGON_SHRINE_CLAIR
--- a/maps/DragonsDenB1F.asm
+++ b/maps/DragonsDenB1F.asm
@@ -70,7 +70,7 @@
 	loadmovesprites
 UnknownScript_0x18c8f9:
 	applymovement $3, MovementData_0x18c9b3
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 30
 	special RestartMapMusic
 	disappear $3
@@ -419,12 +419,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_POKE_BALL, 16, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, PokeBallScript_0x18c95a, EVENT_DRAGONS_DEN_B1F_DRAGON_FANG
-	person_event SPRITE_CLAIR, 30, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ObjectEvent, EVENT_DRAGONS_DEN_CLAIR
-	person_event SPRITE_SILVER, 23, 20, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, 0, 0, 0, SilverScript_0x18c97e, EVENT_RIVAL_DRAGONS_DEN
-	person_event SPRITE_COOLTRAINER_M, 8, 20, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerCooltrainermDarin, -1
-	person_event SPRITE_COOLTRAINER_F, 8, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerCooltrainerfCara, -1
-	person_event SPRITE_TWIN, 17, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerTwinsLeaandpia1, -1
-	person_event SPRITE_TWIN, 18, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerTwinsLeaandpia2, -1
-	person_event SPRITE_POKE_BALL, 4, 30, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c9a1, EVENT_DRAGONS_DEN_B1F_CALCIUM
-	person_event SPRITE_POKE_BALL, 20, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c9a3, EVENT_DRAGONS_DEN_B1F_MAX_ELIXER
+	person_event SPRITE_POKE_BALL, 16, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokeBallScript_0x18c95a, EVENT_DRAGONS_DEN_B1F_DRAGON_FANG
+	person_event SPRITE_CLAIR, 30, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_DRAGONS_DEN_CLAIR
+	person_event SPRITE_SILVER, 23, 20, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SilverScript_0x18c97e, EVENT_RIVAL_DRAGONS_DEN
+	person_event SPRITE_COOLTRAINER_M, 8, 20, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerCooltrainermDarin, -1
+	person_event SPRITE_COOLTRAINER_F, 8, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerCooltrainerfCara, -1
+	person_event SPRITE_TWIN, 17, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerTwinsLeaandpia1, -1
+	person_event SPRITE_TWIN, 18, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerTwinsLeaandpia2, -1
+	person_event SPRITE_POKE_BALL, 4, 30, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c9a1, EVENT_DRAGONS_DEN_B1F_CALCIUM
+	person_event SPRITE_POKE_BALL, 20, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c9a3, EVENT_DRAGONS_DEN_B1F_MAX_ELIXER
--- a/maps/EarlsPokemonAcademy.asm
+++ b/maps/EarlsPokemonAcademy.asm
@@ -425,9 +425,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_FISHER, 2, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, AcademyEarl, EVENT_EARLS_ACADEMY_EARL
-	person_event SPRITE_YOUNGSTER, 5, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x68a83, -1
-	person_event SPRITE_GAMEBOY_KID, 11, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, GameboyKidScript_0x68a86, -1
-	person_event SPRITE_GAMEBOY_KID, 11, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, GameboyKidScript_0x68a91, -1
-	person_event SPRITE_YOUNGSTER, 7, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, YoungsterScript_0x68a9c, -1
-	person_event SPRITE_POKEDEX, 4, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, AcademyNotebook, -1
+	person_event SPRITE_FISHER, 2, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, AcademyEarl, EVENT_EARLS_ACADEMY_EARL
+	person_event SPRITE_YOUNGSTER, 5, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x68a83, -1
+	person_event SPRITE_GAMEBOY_KID, 11, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GameboyKidScript_0x68a86, -1
+	person_event SPRITE_GAMEBOY_KID, 11, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, GameboyKidScript_0x68a91, -1
+	person_event SPRITE_YOUNGSTER, 7, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x68a9c, -1
+	person_event SPRITE_POKEDEX, 4, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, AcademyNotebook, -1
--- a/maps/EcruteakCity.asm
+++ b/maps/EcruteakCity.asm
@@ -290,10 +290,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_GRAMPS, 15, 18, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, GrampsScript_0x1a4009, -1
-	person_event SPRITE_GRAMPS, 21, 20, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, GrampsScript_0x1a400c, -1
-	person_event SPRITE_LASS, 29, 21, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, LassScript_0x1a4012, -1
-	person_event SPRITE_LASS, 9, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, LassScript_0x1a4015, -1
-	person_event SPRITE_FISHER, 22, 9, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x1a4029, -1
-	person_event SPRITE_YOUNGSTER, 14, 10, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x1a403d, -1
-	person_event SPRITE_GRAMPS, 7, 3, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, GrampsScript_0x1a400f, EVENT_ECRUTEAK_CITY_GRAMPS
+	person_event SPRITE_GRAMPS, 15, 18, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1a4009, -1
+	person_event SPRITE_GRAMPS, 21, 20, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1a400c, -1
+	person_event SPRITE_LASS, 29, 21, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, LassScript_0x1a4012, -1
+	person_event SPRITE_LASS, 9, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x1a4015, -1
+	person_event SPRITE_FISHER, 22, 9, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x1a4029, -1
+	person_event SPRITE_YOUNGSTER, 14, 10, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1a403d, -1
+	person_event SPRITE_GRAMPS, 7, 3, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1a400f, EVENT_ECRUTEAK_CITY_GRAMPS
--- a/maps/EcruteakGym.asm
+++ b/maps/EcruteakGym.asm
@@ -429,10 +429,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_MORTY, 1, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, MortyScript_0x99d58, -1
-	person_event SPRITE_SAGE, 7, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerSageJeffrey, -1
-	person_event SPRITE_SAGE, 13, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerSagePing, -1
-	person_event SPRITE_GRANNY, 5, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 1, TrainerMediumMartha, -1
-	person_event SPRITE_GRANNY, 9, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 1, TrainerMediumGrace, -1
-	person_event SPRITE_GYM_GUY, 15, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, EcruteakGymGuyScript, -1
-	person_event SPRITE_GRAMPS, 14, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ObjectEvent, EVENT_ECRUTEAK_GYM_GRAMPS
+	person_event SPRITE_MORTY, 1, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, MortyScript_0x99d58, -1
+	person_event SPRITE_SAGE, 7, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerSageJeffrey, -1
+	person_event SPRITE_SAGE, 13, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerSagePing, -1
+	person_event SPRITE_GRANNY, 5, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 1, TrainerMediumMartha, -1
+	person_event SPRITE_GRANNY, 9, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 1, TrainerMediumGrace, -1
+	person_event SPRITE_GYM_GUY, 15, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, EcruteakGymGuyScript, -1
+	person_event SPRITE_GRAMPS, 14, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_ECRUTEAK_GYM_GRAMPS
--- a/maps/EcruteakHouse.asm
+++ b/maps/EcruteakHouse.asm
@@ -298,7 +298,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_SAGE, 6, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, SageScript_0x98062, EVENT_RANG_CLEAR_BELL_1
-	person_event SPRITE_SAGE, 6, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, SageScript_0x98062, EVENT_RANG_CLEAR_BELL_2
-	person_event SPRITE_SAGE, 9, 6, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, SageScript_0x980b0, EVENT_ECRUTEAK_HOUSE_WANDERING_SAGE
-	person_event SPRITE_GRAMPS, 11, 3, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, GrampsScript_0x980c4, EVENT_ECRUTEAK_HOUSE_WANDERING_SAGE
+	person_event SPRITE_SAGE, 6, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SageScript_0x98062, EVENT_RANG_CLEAR_BELL_1
+	person_event SPRITE_SAGE, 6, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SageScript_0x98062, EVENT_RANG_CLEAR_BELL_2
+	person_event SPRITE_SAGE, 9, 6, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SageScript_0x980b0, EVENT_ECRUTEAK_HOUSE_WANDERING_SAGE
+	person_event SPRITE_GRAMPS, 11, 3, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x980c4, EVENT_ECRUTEAK_HOUSE_WANDERING_SAGE
--- a/maps/EcruteakItemfinderHouse.asm
+++ b/maps/EcruteakItemfinderHouse.asm
@@ -176,5 +176,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_COOLTRAINER_M, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerMScript_0x9a5fb, -1
-	person_event SPRITE_POKEDEX, 3, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, PokedexScript_0x9a620, -1
+	person_event SPRITE_COOLTRAINER_M, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x9a5fb, -1
+	person_event SPRITE_POKEDEX, 3, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokedexScript_0x9a620, -1
--- a/maps/EcruteakLugiaSpeechHouse.asm
+++ b/maps/EcruteakLugiaSpeechHouse.asm
@@ -58,5 +58,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_GRAMPS, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, GrampsScript_0x99334, -1
-	person_event SPRITE_YOUNGSTER, 4, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, YoungsterScript_0x99337, -1
+	person_event SPRITE_GRAMPS, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x99334, -1
+	person_event SPRITE_YOUNGSTER, 4, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x99337, -1
--- a/maps/EcruteakMart.asm
+++ b/maps/EcruteakMart.asm
@@ -57,6 +57,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x99c3b, -1
-	person_event SPRITE_SUPER_NERD, 2, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, SuperNerdScript_0x99c42, -1
-	person_event SPRITE_GRANNY, 6, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, GrannyScript_0x99c45, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x99c3b, -1
+	person_event SPRITE_SUPER_NERD, 2, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x99c42, -1
+	person_event SPRITE_GRANNY, 6, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrannyScript_0x99c45, -1
--- a/maps/EcruteakPokeCenter1F.asm
+++ b/maps/EcruteakPokeCenter1F.asm
@@ -56,11 +56,11 @@
 	jumpstd pokecenternurse
 
 PokefanMScript_0x98eb3:
-	special Function10630f
-	iftrue UnknownScript_0x98ebc
+	special Mobile_DummyReturnFalse
+	iftrue .mobile
 	jumptextfaceplayer UnknownText_0x99155
 
-UnknownScript_0x98ebc:
+.mobile:
 	jumptextfaceplayer UnknownText_0x991aa
 
 CooltrainerFScript_0x98ebf:
@@ -219,8 +219,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x98eb0, -1
-	person_event SPRITE_POKEFAN_M, 6, 7, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, 0, 0, 0, PokefanMScript_0x98eb3, -1
-	person_event SPRITE_COOLTRAINER_F, 4, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, CooltrainerFScript_0x98ebf, -1
-	person_event SPRITE_GYM_GUY, 1, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, GymGuyScript_0x98ec2, -1
-	person_event SPRITE_BILL, 7, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_ECRUTEAK_POKE_CENTER_BILL
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x98eb0, -1
+	person_event SPRITE_POKEFAN_M, 6, 7, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x98eb3, -1
+	person_event SPRITE_COOLTRAINER_F, 4, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x98ebf, -1
+	person_event SPRITE_GYM_GUY, 1, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, GymGuyScript_0x98ec2, -1
+	person_event SPRITE_BILL, 7, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_ECRUTEAK_POKE_CENTER_BILL
--- a/maps/ElmsHouse.asm
+++ b/maps/ElmsHouse.asm
@@ -99,5 +99,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_TEACHER, 5, 1, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ElmsWife, -1
-	person_event SPRITE_BUG_CATCHER, 4, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ElmsSon, -1
+	person_event SPRITE_TEACHER, 5, 1, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ElmsWife, -1
+	person_event SPRITE_BUG_CATCHER, 4, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ElmsSon, -1
--- a/maps/ElmsLab.asm
+++ b/maps/ElmsLab.asm
@@ -1408,9 +1408,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_ELM, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ProfElmScript, -1
-	person_event SPRITE_SCIENTIST, 9, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ElmsAideScript, EVENT_ELMS_AIDE_IN_LAB
-	person_event SPRITE_POKE_BALL, 3, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, CyndaquilPokeBallScript, EVENT_CYNDAQUIL_POKEBALL_IN_ELMS_LAB
-	person_event SPRITE_POKE_BALL, 3, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, TotodilePokeBallScript, EVENT_TOTODILE_POKEBALL_IN_ELMS_LAB
-	person_event SPRITE_POKE_BALL, 3, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, ChikoritaPokeBallScript, EVENT_CHIKORITA_POKEBALL_IN_ELMS_LAB
-	person_event SPRITE_OFFICER, 3, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, CopScript, EVENT_COP_IN_ELMS_LAB
+	person_event SPRITE_ELM, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ProfElmScript, -1
+	person_event SPRITE_SCIENTIST, 9, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ElmsAideScript, EVENT_ELMS_AIDE_IN_LAB
+	person_event SPRITE_POKE_BALL, 3, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CyndaquilPokeBallScript, EVENT_CYNDAQUIL_POKEBALL_IN_ELMS_LAB
+	person_event SPRITE_POKE_BALL, 3, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TotodilePokeBallScript, EVENT_TOTODILE_POKEBALL_IN_ELMS_LAB
+	person_event SPRITE_POKE_BALL, 3, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ChikoritaPokeBallScript, EVENT_CHIKORITA_POKEBALL_IN_ELMS_LAB
+	person_event SPRITE_OFFICER, 3, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, CopScript, EVENT_COP_IN_ELMS_LAB
--- a/maps/FastShip1F.asm
+++ b/maps/FastShip1F.asm
@@ -30,11 +30,11 @@
 	blackoutmod FAST_SHIP_CABINS_SW_SSW_NW
 	clearevent EVENT_FAST_SHIP_HAS_ARRIVED
 	checkevent EVENT_FAST_SHIP_FIRST_TIME
-	iftrue .Vermilion
+	iftrue .SkipGrandpa
 	dotrigger $2
 	end
 
-.Vermilion:
+.SkipGrandpa:
 	dotrigger $0
 	end
 
@@ -115,10 +115,10 @@
 SailorScript_0x751e4:
 	jumptextfaceplayer UnknownText_0x753c0
 
-UnknownScript_0x751e7:
+WorriedGrandpaTriggerRight:
 	moveperson $5, $14, $6
 
-UnknownScript_0x751eb:
+WorriedGrandpaTriggerLeft:
 	appear $5
 	applymovement $5, MovementData_0x7521b
 	playsound SFX_TACKLE
@@ -287,7 +287,7 @@
 
 .Warps:
 	db 12
-	warp_def $1, $19, 255, FAST_SHIP_1F
+	warp_def $1, $19, -1, FAST_SHIP_1F
 	warp_def $8, $1b, 1, FAST_SHIP_CABINS_NNW_NNE_NE
 	warp_def $8, $17, 2, FAST_SHIP_CABINS_NNW_NNE_NE
 	warp_def $8, $13, 3, FAST_SHIP_CABINS_NNW_NNE_NE
@@ -302,8 +302,8 @@
 
 .XYTriggers:
 	db 2
-	xy_trigger 2, $6, $18, $0, UnknownScript_0x751eb, $0, $0
-	xy_trigger 2, $6, $19, $0, UnknownScript_0x751e7, $0, $0
+	xy_trigger 2, $6, $18, $0, WorriedGrandpaTriggerLeft, $0, $0
+	xy_trigger 2, $6, $19, $0, WorriedGrandpaTriggerRight, $0, $0
 
 .Signposts:
 	db 0
@@ -310,7 +310,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_SAILOR, 2, 25, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, SailorScript_0x75160, -1
-	person_event SPRITE_SAILOR, 7, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, SailorScript_0x751d0, -1
-	person_event SPRITE_SAILOR, 17, 22, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, 0, 0, SailorScript_0x751e4, -1
-	person_event SPRITE_GENTLEMAN, 6, 19, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_FAST_SHIP_1F_GENTLEMAN
+	person_event SPRITE_SAILOR, 2, 25, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x75160, -1
+	person_event SPRITE_SAILOR, 7, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x751d0, -1
+	person_event SPRITE_SAILOR, 17, 22, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x751e4, -1
+	person_event SPRITE_GENTLEMAN, 6, 19, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_FAST_SHIP_1F_GENTLEMAN
--- a/maps/FastShipB1F.asm
+++ b/maps/FastShipB1F.asm
@@ -456,15 +456,15 @@
 
 .PersonEvents:
 	db 12
-	person_event SPRITE_SAILOR, 6, 30, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SailorScript_0x76767, EVENT_FAST_SHIP_B1F_SAILOR_LEFT
-	person_event SPRITE_SAILOR, 6, 31, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SailorScript_0x76767, EVENT_FAST_SHIP_B1F_SAILOR_RIGHT
-	person_event SPRITE_SAILOR, 11, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerSailorJeff, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
-	person_event SPRITE_LASS, 4, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerPicnickerDebra, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
-	person_event SPRITE_SUPER_NERD, 9, 26, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerJugglerFritz, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
-	person_event SPRITE_SAILOR, 4, 17, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 4, TrainerSailorGarrett, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
-	person_event SPRITE_FISHER, 8, 25, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerFisherJonah, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
-	person_event SPRITE_BLACK_BELT, 11, 15, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerBlackbeltWai, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
-	person_event SPRITE_SAILOR, 4, 23, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 4, TrainerSailorKenneth, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
-	person_event SPRITE_TEACHER, 11, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerTeacherShirley, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
-	person_event SPRITE_YOUNGSTER, 9, 14, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerSchoolboyNate, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
-	person_event SPRITE_YOUNGSTER, 11, 14, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerSchoolboyRicky, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
+	person_event SPRITE_SAILOR, 6, 30, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SailorScript_0x76767, EVENT_FAST_SHIP_B1F_SAILOR_LEFT
+	person_event SPRITE_SAILOR, 6, 31, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SailorScript_0x76767, EVENT_FAST_SHIP_B1F_SAILOR_RIGHT
+	person_event SPRITE_SAILOR, 11, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerSailorJeff, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
+	person_event SPRITE_LASS, 4, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerPicnickerDebra, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
+	person_event SPRITE_SUPER_NERD, 9, 26, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerJugglerFritz, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
+	person_event SPRITE_SAILOR, 4, 17, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 4, TrainerSailorGarrett, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
+	person_event SPRITE_FISHER, 8, 25, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerFisherJonah, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
+	person_event SPRITE_BLACK_BELT, 11, 15, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerBlackbeltWai, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
+	person_event SPRITE_SAILOR, 4, 23, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 4, TrainerSailorKenneth, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
+	person_event SPRITE_TEACHER, 11, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerTeacherShirley, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
+	person_event SPRITE_YOUNGSTER, 9, 14, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerSchoolboyNate, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
+	person_event SPRITE_YOUNGSTER, 11, 14, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerSchoolboyRicky, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
--- a/maps/FastShipCabins_NNW_NNE_NE.asm
+++ b/maps/FastShipCabins_NNW_NNE_NE.asm
@@ -278,10 +278,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_COOLTRAINER_M, 3, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 2, TrainerCooltrainermSean, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
-	person_event SPRITE_COOLTRAINER_F, 5, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerCooltrainerfCarol, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
-	person_event SPRITE_SUPER_NERD, 5, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPokemaniacEthan, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
-	person_event SPRITE_POKEFAN_M, 17, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerHikerNoland, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
-	person_event SPRITE_SAILOR, 26, 4, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SailorScript_0x755f1, EVENT_FAST_SHIP_CABINS_NNW_NNE_NE_SAILOR
-	person_event SPRITE_GENTLEMAN, 30, 7, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerGentlemanEdward, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
-	person_event SPRITE_PHARMACIST, 30, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 4, TrainerBurglarCorey, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
+	person_event SPRITE_COOLTRAINER_M, 3, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 2, TrainerCooltrainermSean, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
+	person_event SPRITE_COOLTRAINER_F, 5, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerCooltrainerfCarol, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
+	person_event SPRITE_SUPER_NERD, 5, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPokemaniacEthan, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
+	person_event SPRITE_POKEFAN_M, 17, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerHikerNoland, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
+	person_event SPRITE_SAILOR, 26, 4, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SailorScript_0x755f1, EVENT_FAST_SHIP_CABINS_NNW_NNE_NE_SAILOR
+	person_event SPRITE_GENTLEMAN, 30, 7, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerGentlemanEdward, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
+	person_event SPRITE_PHARMACIST, 30, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 4, TrainerBurglarCorey, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
--- a/maps/FastShipCabins_SE_SSE_CaptainsCabin.asm
+++ b/maps/FastShipCabins_SE_SSE_CaptainsCabin.asm
@@ -471,14 +471,14 @@
 
 .PersonEvents:
 	db 11
-	person_event SPRITE_CAPTAIN, 25, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, CaptainScript_0x75ea7, -1
-	person_event SPRITE_GENTLEMAN, 17, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GentlemanScript_0x75f1f, EVENT_FAST_SHIP_CABINS_SE_SSE_GENTLEMAN
-	person_event SPRITE_TWIN, 17, 3, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, 0, 0, 0, TwinScript_0x75f6d, EVENT_FAST_SHIP_CABINS_SE_SSE_CAPTAINS_CABIN_TWIN_1
-	person_event SPRITE_TWIN, 25, 2, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, 0, 0, 0, TwinScript_0x75ebb, EVENT_FAST_SHIP_CABINS_SE_SSE_CAPTAINS_CABIN_TWIN_2
-	person_event SPRITE_POKEFAN_M, 6, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 5, TrainerPokefanmColin, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
-	person_event SPRITE_TWIN, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerTwinsMegandpeg1, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
-	person_event SPRITE_TWIN, 4, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerTwinsMegandpeg2, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
-	person_event SPRITE_SUPER_NERD, 5, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 5, TrainerPsychicRodney, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
-	person_event SPRITE_POKEFAN_M, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerPokefanmJeremy, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
-	person_event SPRITE_POKEFAN_F, 5, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerPokefanfGeorgia, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
-	person_event SPRITE_SUPER_NERD, 15, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerSupernerdShawn, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
+	person_event SPRITE_CAPTAIN, 25, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, CaptainScript_0x75ea7, -1
+	person_event SPRITE_GENTLEMAN, 17, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x75f1f, EVENT_FAST_SHIP_CABINS_SE_SSE_GENTLEMAN
+	person_event SPRITE_TWIN, 17, 3, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TwinScript_0x75f6d, EVENT_FAST_SHIP_CABINS_SE_SSE_CAPTAINS_CABIN_TWIN_1
+	person_event SPRITE_TWIN, 25, 2, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TwinScript_0x75ebb, EVENT_FAST_SHIP_CABINS_SE_SSE_CAPTAINS_CABIN_TWIN_2
+	person_event SPRITE_POKEFAN_M, 6, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 5, TrainerPokefanmColin, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
+	person_event SPRITE_TWIN, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerTwinsMegandpeg1, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
+	person_event SPRITE_TWIN, 4, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerTwinsMegandpeg2, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
+	person_event SPRITE_SUPER_NERD, 5, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 5, TrainerPsychicRodney, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
+	person_event SPRITE_POKEFAN_M, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerPokefanmJeremy, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
+	person_event SPRITE_POKEFAN_F, 5, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerPokefanfGeorgia, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
+	person_event SPRITE_SUPER_NERD, 15, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerSupernerdShawn, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
--- a/maps/FastShipCabins_SW_SSW_NW.asm
+++ b/maps/FastShipCabins_SW_SSW_NW.asm
@@ -43,8 +43,8 @@
 
 GuitaristClydeScript:
 	talkaftercancel
-	special Function10630f
-	iftrue UnknownScript_0x75aa5
+	special Mobile_DummyReturnFalse
+	iftrue .mobile
 	loadfont
 	writetext UnknownText_0x75d65
 	closetext
@@ -51,7 +51,7 @@
 	loadmovesprites
 	end
 
-UnknownScript_0x75aa5:
+.mobile:
 	loadfont
 	writetext UnknownText_0x75cfe
 	closetext
@@ -239,7 +239,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_FISHER, 15, 1, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 2, TrainerFirebreatherLyle, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
-	person_event SPRITE_BUG_CATCHER, 15, 6, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerBug_catcherKen, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
-	person_event SPRITE_BUENA, 26, 1, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerBeautyCassie, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
-	person_event SPRITE_ROCKER, 28, 3, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 2, TrainerGuitaristClyde, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
+	person_event SPRITE_FISHER, 15, 1, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 2, TrainerFirebreatherLyle, EVENT_FAST_SHIP_PASSENGERS_FIRST_TRIP
+	person_event SPRITE_BUG_CATCHER, 15, 6, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerBug_catcherKen, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
+	person_event SPRITE_BUENA, 26, 1, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerBeautyCassie, EVENT_FAST_SHIP_PASSENGERS_EASTBOUND
+	person_event SPRITE_ROCKER, 28, 3, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 2, TrainerGuitaristClyde, EVENT_FAST_SHIP_PASSENGERS_WESTBOUND
--- a/maps/FightingDojo.asm
+++ b/maps/FightingDojo.asm
@@ -57,5 +57,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_BLACK_BELT, 4, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, BlackBeltScript_0x189b61, -1
-	person_event SPRITE_POKE_BALL, 1, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x189b6a, EVENT_PICKED_UP_FOCUS_BAND
+	person_event SPRITE_BLACK_BELT, 4, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x189b61, -1
+	person_event SPRITE_POKE_BALL, 1, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x189b6a, EVENT_PICKED_UP_FOCUS_BAND
--- a/maps/FuchsiaBillSpeechHouse.asm
+++ b/maps/FuchsiaBillSpeechHouse.asm
@@ -40,5 +40,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_POKEFAN_F, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanFScript_0x1963bd, -1
-	person_event SPRITE_YOUNGSTER, 4, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, 0, 0, YoungsterScript_0x1963c0, -1
+	person_event SPRITE_POKEFAN_F, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x1963bd, -1
+	person_event SPRITE_YOUNGSTER, 4, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1963c0, -1
--- a/maps/FuchsiaCity.asm
+++ b/maps/FuchsiaCity.asm
@@ -46,7 +46,7 @@
 	jumpstd martsign
 
 FruitTreeScript_0x194b43:
-	fruittree $1e
+	fruittree FRUITTREE_FUCHSIA_CITY
 
 UnknownText_0x194b45:
 	text "One of the ELITE"
@@ -154,7 +154,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_YOUNGSTER, 18, 23, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x194b22, -1
-	person_event SPRITE_POKEFAN_M, 8, 13, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, PokefanMScript_0x194b25, -1
-	person_event SPRITE_TEACHER, 14, 16, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, TeacherScript_0x194b28, -1
-	person_event SPRITE_FRUIT_TREE, 1, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x194b43, -1
+	person_event SPRITE_YOUNGSTER, 18, 23, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x194b22, -1
+	person_event SPRITE_POKEFAN_M, 8, 13, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x194b25, -1
+	person_event SPRITE_TEACHER, 14, 16, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, TeacherScript_0x194b28, -1
+	person_event SPRITE_FRUIT_TREE, 1, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x194b43, -1
--- a/maps/FuchsiaGym.asm
+++ b/maps/FuchsiaGym.asm
@@ -391,9 +391,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_JANINE, 10, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, JanineScript_0x195db9, -1
-	person_event SPRITE_FUCHSIA_GYM_1, 7, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, FuschiaGym1Script_0x195e1b, -1
-	person_event SPRITE_FUCHSIA_GYM_2, 11, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, FuschiaGym2Script_0x195e55, -1
-	person_event SPRITE_FUCHSIA_GYM_3, 4, 9, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, FuschiaGym3Script_0x195e8f, -1
-	person_event SPRITE_FUCHSIA_GYM_4, 2, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, FuschiaGym4Script_0x195ec9, -1
-	person_event SPRITE_GYM_GUY, 15, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, FuchsiaGymGuyScript, -1
+	person_event SPRITE_JANINE, 10, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, JanineScript_0x195db9, -1
+	person_event SPRITE_FUCHSIA_GYM_1, 7, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, FuschiaGym1Script_0x195e1b, -1
+	person_event SPRITE_FUCHSIA_GYM_2, 11, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, FuschiaGym2Script_0x195e55, -1
+	person_event SPRITE_FUCHSIA_GYM_3, 4, 9, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, FuschiaGym3Script_0x195e8f, -1
+	person_event SPRITE_FUCHSIA_GYM_4, 2, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, FuschiaGym4Script_0x195ec9, -1
+	person_event SPRITE_GYM_GUY, 15, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, FuchsiaGymGuyScript, -1
--- a/maps/FuchsiaMart.asm
+++ b/maps/FuchsiaMart.asm
@@ -49,6 +49,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x195ce8, -1
-	person_event SPRITE_FISHER, 2, 3, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, FisherScript_0x195cef, -1
-	person_event SPRITE_COOLTRAINER_F, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerFScript_0x195cf2, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x195ce8, -1
+	person_event SPRITE_FISHER, 2, 3, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, FisherScript_0x195cef, -1
+	person_event SPRITE_COOLTRAINER_F, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x195cf2, -1
--- a/maps/FuchsiaPokeCenter1F.asm
+++ b/maps/FuchsiaPokeCenter1F.asm
@@ -102,7 +102,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, NurseScript_0x196459, -1
-	person_event SPRITE_COOLTRAINER_M, 4, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, CooltrainerMScript_0x19645c, -1
-	person_event SPRITE_COOLTRAINER_F, 4, 1, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, CooltrainerFScript_0x19645f, -1
-	person_event SPRITE_JANINE_IMPERSONATOR, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, JanineImpersonatorScript_0x196462, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, NurseScript_0x196459, -1
+	person_event SPRITE_COOLTRAINER_M, 4, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x19645c, -1
+	person_event SPRITE_COOLTRAINER_F, 4, 1, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x19645f, -1
+	person_event SPRITE_JANINE_IMPERSONATOR, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, JanineImpersonatorScript_0x196462, -1
--- a/maps/GoldenrodBikeShop.asm
+++ b/maps/GoldenrodBikeShop.asm
@@ -125,4 +125,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_CLERK, 2, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ClerkScript_0x54750, -1
+	person_event SPRITE_CLERK, 2, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ClerkScript_0x54750, -1
--- a/maps/GoldenrodBillsHouse.asm
+++ b/maps/GoldenrodBillsHouse.asm
@@ -257,6 +257,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_BILL, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, BillsHouseBill, EVENT_MET_BILL
-	person_event SPRITE_POKEFAN_F, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, BillsMom, -1
-	person_event SPRITE_TWIN, 4, 5, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, BillsSister, -1
+	person_event SPRITE_BILL, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BillsHouseBill, EVENT_MET_BILL
+	person_event SPRITE_POKEFAN_F, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BillsMom, -1
+	person_event SPRITE_TWIN, 4, 5, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, BillsSister, -1
--- a/maps/GoldenrodCity.asm
+++ b/maps/GoldenrodCity.asm
@@ -61,7 +61,7 @@
 .Flamethrower:
 	writebyte $1
 	writetext UnknownText_0x1991cf
-	special Function4925b
+	special Special_MoveTutor
 	if_equal $0, .TeachMove
 	jump .Incompatible
 
@@ -68,7 +68,7 @@
 .Thunderbolt:
 	writebyte $2
 	writetext UnknownText_0x1991cf
-	special Function4925b
+	special Special_MoveTutor
 	if_equal $0, .TeachMove
 	jump .Incompatible
 
@@ -75,7 +75,7 @@
 .IceBeam:
 	writebyte $3
 	writetext UnknownText_0x1991cf
-	special Function4925b
+	special Special_MoveTutor
 	if_equal $0, .TeachMove
 	jump .Incompatible
 
@@ -581,18 +581,18 @@
 
 .PersonEvents:
 	db 15
-	person_event SPRITE_POKEFAN_M, 18, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, PokefanMScript_0x1989e3, EVENT_GOLDENROD_CITY_CIVILIANS
-	person_event SPRITE_YOUNGSTER, 17, 30, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, YoungsterScript_0x1989e6, EVENT_GOLDENROD_CITY_CIVILIANS
-	person_event SPRITE_COOLTRAINER_F, 16, 12, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerFScript_0x1989e9, EVENT_GOLDENROD_CITY_CIVILIANS
-	person_event SPRITE_COOLTRAINER_F, 26, 20, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, 0, 0, 0, CooltrainerFScript_0x1989fd, EVENT_GOLDENROD_CITY_CIVILIANS
-	person_event SPRITE_YOUNGSTER, 17, 19, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x198a11, EVENT_GOLDENROD_CITY_CIVILIANS
-	person_event SPRITE_LASS, 10, 17, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x198a14, EVENT_GOLDENROD_CITY_CIVILIANS
-	person_event SPRITE_GRAMPS, 27, 11, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, GrampsScript_0x198a17, EVENT_GOLDENROD_CITY_CIVILIANS
-	person_event SPRITE_ROCKET, 16, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, RocketScript_0x198a1a, EVENT_GOLDENROD_CITY_ROCKET_SCOUT
-	person_event SPRITE_ROCKET, 20, 28, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, RocketScript_0x198a29, EVENT_GOLDENROD_CITY_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 15, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, RocketScript_0x198a2c, EVENT_GOLDENROD_CITY_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 23, 16, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, RocketScript_0x198a2f, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 20, 29, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, RocketScript_0x198a32, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 7, 29, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, RocketScript_0x198a35, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 10, 31, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, RocketScript_0x198a38, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_POKEFAN_M, 22, 12, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, MoveTutor, EVENT_GOLDENROD_CITY_MOVE_TUTOR
+	person_event SPRITE_POKEFAN_M, 18, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x1989e3, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_YOUNGSTER, 17, 30, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1989e6, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_COOLTRAINER_F, 16, 12, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x1989e9, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_COOLTRAINER_F, 26, 20, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x1989fd, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_YOUNGSTER, 17, 19, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x198a11, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_LASS, 10, 17, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x198a14, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_GRAMPS, 27, 11, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x198a17, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_ROCKET, 16, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RocketScript_0x198a1a, EVENT_GOLDENROD_CITY_ROCKET_SCOUT
+	person_event SPRITE_ROCKET, 20, 28, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RocketScript_0x198a29, EVENT_GOLDENROD_CITY_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 15, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RocketScript_0x198a2c, EVENT_GOLDENROD_CITY_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 23, 16, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RocketScript_0x198a2f, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 20, 29, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RocketScript_0x198a32, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 7, 29, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RocketScript_0x198a35, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 10, 31, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RocketScript_0x198a38, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_POKEFAN_M, 22, 12, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, MoveTutor, EVENT_GOLDENROD_CITY_MOVE_TUTOR
--- a/maps/GoldenrodDeptStore1F.asm
+++ b/maps/GoldenrodDeptStore1F.asm
@@ -93,7 +93,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_RECEPTIONIST, 1, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ReceptionistScript_0x55981, -1
-	person_event SPRITE_POKEFAN_F, 4, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, PokefanFScript_0x55987, -1
-	person_event SPRITE_BUG_CATCHER, 5, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, BugCatcherScript_0x5598a, -1
-	person_event SPRITE_GENTLEMAN, 5, 11, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, GentlemanScript_0x55984, -1
+	person_event SPRITE_RECEPTIONIST, 1, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x55981, -1
+	person_event SPRITE_POKEFAN_F, 4, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x55987, -1
+	person_event SPRITE_BUG_CATCHER, 5, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, BugCatcherScript_0x5598a, -1
+	person_event SPRITE_GENTLEMAN, 5, 11, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x55984, -1
--- a/maps/GoldenrodDeptStore2F.asm
+++ b/maps/GoldenrodDeptStore2F.asm
@@ -113,8 +113,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_CLERK, 5, 13, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x55b5d, -1
-	person_event SPRITE_CLERK, 6, 13, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x55b65, -1
-	person_event SPRITE_YOUNGSTER, 6, 9, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, 0, 0, YoungsterScript_0x55b6d, -1
-	person_event SPRITE_COOLTRAINER_F, 2, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerFScript_0x55b70, -1
-	person_event SPRITE_GENTLEMAN, 6, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, GentlemanScript_0x55b73, -1
+	person_event SPRITE_CLERK, 5, 13, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x55b5d, -1
+	person_event SPRITE_CLERK, 6, 13, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x55b65, -1
+	person_event SPRITE_YOUNGSTER, 6, 9, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x55b6d, -1
+	person_event SPRITE_COOLTRAINER_F, 2, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x55b70, -1
+	person_event SPRITE_GENTLEMAN, 6, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x55b73, -1
--- a/maps/GoldenrodDeptStore3F.asm
+++ b/maps/GoldenrodDeptStore3F.asm
@@ -71,6 +71,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 1, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x55db8, -1
-	person_event SPRITE_SUPER_NERD, 5, 12, SPRITEMOVEDATA_SPINRANDOM_FAST, 1, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SuperNerdScript_0x55dc0, -1
-	person_event SPRITE_ROCKER, 5, 2, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, 0, 0, RockerScript_0x55dc3, -1
+	person_event SPRITE_CLERK, 1, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x55db8, -1
+	person_event SPRITE_SUPER_NERD, 5, 12, SPRITEMOVEDATA_SPINRANDOM_FAST, 1, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x55dc0, -1
+	person_event SPRITE_ROCKER, 5, 2, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RockerScript_0x55dc3, -1
--- a/maps/GoldenrodDeptStore4F.asm
+++ b/maps/GoldenrodDeptStore4F.asm
@@ -91,7 +91,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_CLERK, 5, 13, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x55ee9, -1
-	person_event SPRITE_COOLTRAINER_M, 7, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, CooltrainerMScript_0x55ef1, -1
-	person_event SPRITE_BUG_CATCHER, 2, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, BugCatcherScript_0x55ef4, -1
-	person_event SPRITE_GAMEBOY_KID, 1, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, GameboyKidScript_0x55ef7, -1
+	person_event SPRITE_CLERK, 5, 13, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x55ee9, -1
+	person_event SPRITE_COOLTRAINER_M, 7, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x55ef1, -1
+	person_event SPRITE_BUG_CATCHER, 2, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BugCatcherScript_0x55ef4, -1
+	person_event SPRITE_GAMEBOY_KID, 1, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GameboyKidScript_0x55ef7, -1
--- a/maps/GoldenrodDeptStore5F.asm
+++ b/maps/GoldenrodDeptStore5F.asm
@@ -232,9 +232,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_CLERK, 5, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x5609c, -1
-	person_event SPRITE_LASS, 6, 3, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, LassScript_0x56130, -1
-	person_event SPRITE_COOLTRAINER_M, 3, 6, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, CooltrainerMScript_0x56133, -1
-	person_event SPRITE_POKEFAN_M, 5, 13, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, 0, 0, 0, PokefanMScript_0x5613a, -1
-	person_event SPRITE_TWIN, 1, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TwinScript_0x56118, -1
-	person_event SPRITE_RECEPTIONIST, 5, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ReceptionistScript_0x560ce, EVENT_GOLDENROD_DEPT_STORE_5F_HAPPINESS_EVENT_LADY
+	person_event SPRITE_CLERK, 5, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x5609c, -1
+	person_event SPRITE_LASS, 6, 3, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x56130, -1
+	person_event SPRITE_COOLTRAINER_M, 3, 6, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x56133, -1
+	person_event SPRITE_POKEFAN_M, 5, 13, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x5613a, -1
+	person_event SPRITE_TWIN, 1, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TwinScript_0x56118, -1
+	person_event SPRITE_RECEPTIONIST, 5, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x560ce, EVENT_GOLDENROD_DEPT_STORE_5F_HAPPINESS_EVENT_LADY
--- a/maps/GoldenrodDeptStore6F.asm
+++ b/maps/GoldenrodDeptStore6F.asm
@@ -9,7 +9,7 @@
 	loadfont
 	writetext GoldenrodVendingText
 .Start
-	special Function24ae8
+	special PlaceMoneyTopRightOW
 	loadmenudata .MenuData
 	interpretmenu2
 	writebackup
@@ -169,5 +169,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_LASS, 2, 10, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x564bf, -1
-	person_event SPRITE_SUPER_NERD, 2, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SuperNerdScript_0x564c2, -1
+	person_event SPRITE_LASS, 2, 10, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x564bf, -1
+	person_event SPRITE_SUPER_NERD, 2, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x564c2, -1
--- a/maps/GoldenrodDeptStoreB1F.asm
+++ b/maps/GoldenrodDeptStoreB1F.asm
@@ -121,11 +121,11 @@
 
 .PersonEvents:
 	db 8
-	person_event SPRITE_POKE_BALL, 15, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7d7c3, EVENT_GOLDENROD_DEPT_STORE_B1F_ETHER
-	person_event SPRITE_POKE_BALL, 2, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7d7c5, EVENT_GOLDENROD_DEPT_STORE_B1F_AMULET_COIN
-	person_event SPRITE_POKE_BALL, 3, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7d7c7, EVENT_GOLDENROD_DEPT_STORE_B1F_BURN_HEAL
-	person_event SPRITE_POKE_BALL, 15, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7d7c9, EVENT_GOLDENROD_DEPT_STORE_B1F_ULTRA_BALL
-	person_event SPRITE_BLACK_BELT, 10, 9, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, BlackBeltScript_0x7d7b0, -1
-	person_event SPRITE_BLACK_BELT, 8, 4, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, BlackBeltScript_0x7d7b3, -1
-	person_event SPRITE_BLACK_BELT, 13, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, BlackBeltScript_0x7d7b6, -1
-	person_event SPRITE_MACHOP, 7, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, MachopScript_0x7d7b9, -1
+	person_event SPRITE_POKE_BALL, 15, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7d7c3, EVENT_GOLDENROD_DEPT_STORE_B1F_ETHER
+	person_event SPRITE_POKE_BALL, 2, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7d7c5, EVENT_GOLDENROD_DEPT_STORE_B1F_AMULET_COIN
+	person_event SPRITE_POKE_BALL, 3, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7d7c7, EVENT_GOLDENROD_DEPT_STORE_B1F_BURN_HEAL
+	person_event SPRITE_POKE_BALL, 15, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7d7c9, EVENT_GOLDENROD_DEPT_STORE_B1F_ULTRA_BALL
+	person_event SPRITE_BLACK_BELT, 10, 9, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x7d7b0, -1
+	person_event SPRITE_BLACK_BELT, 8, 4, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x7d7b3, -1
+	person_event SPRITE_BLACK_BELT, 13, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x7d7b6, -1
+	person_event SPRITE_MACHOP, 7, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, MachopScript_0x7d7b9, -1
--- a/maps/GoldenrodDeptStoreRoof.asm
+++ b/maps/GoldenrodDeptStoreRoof.asm
@@ -225,11 +225,11 @@
 
 .PersonEvents:
 	db 8
-	person_event SPRITE_CLERK, 4, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x5673f, EVENT_GOLDENROD_SALE_OFF
-	person_event SPRITE_POKEFAN_F, 3, 10, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanFScript_0x56746, -1
-	person_event SPRITE_FISHER, 1, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, FisherScript_0x56749, -1
-	person_event SPRITE_TWIN, 4, 3, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TwinScript_0x56754, EVENT_GOLDENROD_SALE_ON
-	person_event SPRITE_SUPER_NERD, 6, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, SuperNerdScript_0x56757, EVENT_GOLDENROD_SALE_ON
-	person_event SPRITE_POKEFAN_M, 0, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, PokefanMScript_0x5676a, EVENT_GOLDENROD_SALE_OFF
-	person_event SPRITE_TEACHER, 3, 5, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TeacherScript_0x5676d, EVENT_GOLDENROD_SALE_OFF
-	person_event SPRITE_BUG_CATCHER, 6, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, BugCatcherScript_0x56770, EVENT_GOLDENROD_SALE_OFF
+	person_event SPRITE_CLERK, 4, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x5673f, EVENT_GOLDENROD_SALE_OFF
+	person_event SPRITE_POKEFAN_F, 3, 10, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x56746, -1
+	person_event SPRITE_FISHER, 1, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, FisherScript_0x56749, -1
+	person_event SPRITE_TWIN, 4, 3, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TwinScript_0x56754, EVENT_GOLDENROD_SALE_ON
+	person_event SPRITE_SUPER_NERD, 6, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x56757, EVENT_GOLDENROD_SALE_ON
+	person_event SPRITE_POKEFAN_M, 0, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x5676a, EVENT_GOLDENROD_SALE_OFF
+	person_event SPRITE_TEACHER, 3, 5, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TeacherScript_0x5676d, EVENT_GOLDENROD_SALE_OFF
+	person_event SPRITE_BUG_CATCHER, 6, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, BugCatcherScript_0x56770, EVENT_GOLDENROD_SALE_OFF
--- a/maps/GoldenrodFlowerShop.asm
+++ b/maps/GoldenrodFlowerShop.asm
@@ -172,5 +172,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_TEACHER, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, FlowerShopTeacherScript, -1
-	person_event SPRITE_LASS, 6, 5, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, FlowerShopFloriaScript, EVENT_FLORIA_AT_FLOWER_SHOP
+	person_event SPRITE_TEACHER, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FlowerShopTeacherScript, -1
+	person_event SPRITE_LASS, 6, 5, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, FlowerShopFloriaScript, EVENT_FLORIA_AT_FLOWER_SHOP
--- a/maps/GoldenrodGameCorner.asm
+++ b/maps/GoldenrodGameCorner.asm
@@ -479,15 +479,15 @@
 
 .PersonEvents:
 	db 12
-	person_event SPRITE_CLERK, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ClerkScript_0x56c25, -1
-	person_event SPRITE_RECEPTIONIST, 2, 16, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ReceptionistScript_0x56c28, -1
-	person_event SPRITE_RECEPTIONIST, 2, 18, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ReceptionistScript_0x56d01, -1
-	person_event SPRITE_PHARMACIST, 7, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, 2, (1 << 3) | PAL_OW_BLUE, 0, 0, PharmacistScript_0x56df1, -1
-	person_event SPRITE_PHARMACIST, 7, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, 4, (1 << 3) | PAL_OW_BLUE, 0, 0, PharmacistScript_0x56df1, -1
-	person_event SPRITE_POKEFAN_M, 10, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, PokefanMScript_0x56dfc, -1
-	person_event SPRITE_COOLTRAINER_M, 8, 14, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, CooltrainerMScript_0x56e07, -1
-	person_event SPRITE_POKEFAN_F, 6, 17, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanFScript_0x56e12, -1
-	person_event SPRITE_COOLTRAINER_F, 3, 10, SPRITEMOVEDATA_WANDER, 1, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerFScript_0x56e1d, -1
-	person_event SPRITE_GENTLEMAN, 10, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GentlemanScript_0x56e20, -1
-	person_event SPRITE_POKEFAN_M, 9, 2, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, PokefanMScript_0x56e2b, -1
-	person_event SPRITE_POKEFAN_M, 10, 17, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanMScript_0x56c1a, EVENT_GOLDENROD_GAME_CORNER_MOVE_TUTOR
+	person_event SPRITE_CLERK, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ClerkScript_0x56c25, -1
+	person_event SPRITE_RECEPTIONIST, 2, 16, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x56c28, -1
+	person_event SPRITE_RECEPTIONIST, 2, 18, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x56d01, -1
+	person_event SPRITE_PHARMACIST, 7, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, 2, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, PharmacistScript_0x56df1, -1
+	person_event SPRITE_PHARMACIST, 7, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, 4, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, PharmacistScript_0x56df1, -1
+	person_event SPRITE_POKEFAN_M, 10, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x56dfc, -1
+	person_event SPRITE_COOLTRAINER_M, 8, 14, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x56e07, -1
+	person_event SPRITE_POKEFAN_F, 6, 17, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x56e12, -1
+	person_event SPRITE_COOLTRAINER_F, 3, 10, SPRITEMOVEDATA_WANDER, 1, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x56e1d, -1
+	person_event SPRITE_GENTLEMAN, 10, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x56e20, -1
+	person_event SPRITE_POKEFAN_M, 9, 2, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x56e2b, -1
+	person_event SPRITE_POKEFAN_M, 10, 17, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x56c1a, EVENT_GOLDENROD_GAME_CORNER_MOVE_TUTOR
--- a/maps/GoldenrodGym.asm
+++ b/maps/GoldenrodGym.asm
@@ -393,9 +393,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_WHITNEY, 3, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, WhitneyScript_0x5400c, -1
-	person_event SPRITE_LASS, 13, 9, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 4, TrainerLassCarrie, -1
-	person_event SPRITE_LASS, 6, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerLassBridget, -1
-	person_event SPRITE_BUENA, 2, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerBeautyVictoria, -1
-	person_event SPRITE_BUENA, 5, 19, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerBeautySamantha, -1
-	person_event SPRITE_GYM_GUY, 15, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, GoldenrodGymGuyScript, -1
+	person_event SPRITE_WHITNEY, 3, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, WhitneyScript_0x5400c, -1
+	person_event SPRITE_LASS, 13, 9, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 4, TrainerLassCarrie, -1
+	person_event SPRITE_LASS, 6, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerLassBridget, -1
+	person_event SPRITE_BUENA, 2, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerBeautyVictoria, -1
+	person_event SPRITE_BUENA, 5, 19, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerBeautySamantha, -1
+	person_event SPRITE_GYM_GUY, 15, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, GoldenrodGymGuyScript, -1
--- a/maps/GoldenrodHappinessRater.asm
+++ b/maps/GoldenrodHappinessRater.asm
@@ -151,6 +151,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_TEACHER, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, TeacherScript_0x54953, -1
-	person_event SPRITE_POKEFAN_M, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, PokefanMScript_0x54997, -1
-	person_event SPRITE_TWIN, 6, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TwinScript_0x5499a, -1
+	person_event SPRITE_TEACHER, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, TeacherScript_0x54953, -1
+	person_event SPRITE_POKEFAN_M, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x54997, -1
+	person_event SPRITE_TWIN, 6, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TwinScript_0x5499a, -1
--- a/maps/GoldenrodMagnetTrainStation.asm
+++ b/maps/GoldenrodMagnetTrainStation.asm
@@ -182,5 +182,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_OFFICER, 9, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, OfficerScript_0x550ec, -1
-	person_event SPRITE_GENTLEMAN, 14, 11, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, 0, 0, 0, GentlemanScript_0x55143, EVENT_GOLDENROD_TRAIN_STATION_GENTLEMAN
+	person_event SPRITE_OFFICER, 9, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, OfficerScript_0x550ec, -1
+	person_event SPRITE_GENTLEMAN, 14, 11, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x55143, EVENT_GOLDENROD_TRAIN_STATION_GENTLEMAN
--- a/maps/GoldenrodNameRatersHouse.asm
+++ b/maps/GoldenrodNameRatersHouse.asm
@@ -41,4 +41,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_GENTLEMAN, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 2, -1, -1, 0, 0, 0, GentlemanScript_0x5577c, -1
+	person_event SPRITE_GENTLEMAN, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x5577c, -1
--- a/maps/GoldenrodPPSpeechHouse.asm
+++ b/maps/GoldenrodPPSpeechHouse.asm
@@ -67,5 +67,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_FISHER, 4, 2, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x5564a, -1
-	person_event SPRITE_LASS, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 1, 0, -1, -1, 0, 0, 0, LassScript_0x5564d, -1
+	person_event SPRITE_FISHER, 4, 2, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x5564a, -1
+	person_event SPRITE_LASS, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 1, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x5564d, -1
--- a/maps/GoldenrodPokeCenter1F.asm
+++ b/maps/GoldenrodPokeCenter1F.asm
@@ -818,8 +818,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x60f91, -1
-	person_event SPRITE_LINK_RECEPTIONIST, 8, 16, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ObjectEvent, -1
-	person_event SPRITE_GAMEBOY_KID, 1, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, GameboyKidScript_0x6101e, -1
-	person_event SPRITE_LASS, 4, 1, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, LassScript_0x61021, -1
-	person_event SPRITE_POKEFAN_F, 5, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, PokefanFScript_0x61024, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x60f91, -1
+	person_event SPRITE_LINK_RECEPTIONIST, 8, 16, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ObjectEvent, -1
+	person_event SPRITE_GAMEBOY_KID, 1, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, GameboyKidScript_0x6101e, -1
+	person_event SPRITE_LASS, 4, 1, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x61021, -1
+	person_event SPRITE_POKEFAN_F, 5, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x61024, -1
--- a/maps/GoldenrodPokeComCenter2FMobile.asm
+++ b/maps/GoldenrodPokeComCenter2FMobile.asm
@@ -240,7 +240,7 @@
 	line "OFFICE received an"
 	cont "e-mail. It says…"
 
-	para $56, " ", $56, " ", $56
+	para "<......> <......> <......>"
 
 	para "To the #COM"
 	line "CENTER staff…"
@@ -260,7 +260,7 @@
 	para "the world can link"
 	line "without barriers!"
 
-	para $56, " ", $56, " ", $56
+	para "<......> <......> <......>"
 	done
 
 GoldenrodPokeComCenter2FMobile_MapEventHeader:
@@ -283,6 +283,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_SCIENTIST, 28, 4, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ScientistScript_0x625d1, -1
-	person_event SPRITE_SCIENTIST, 27, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ScientistScript_0x625d4, -1
-	person_event SPRITE_SCIENTIST, 29, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ScientistScript_0x625d7, -1
+	person_event SPRITE_SCIENTIST, 28, 4, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ScientistScript_0x625d1, -1
+	person_event SPRITE_SCIENTIST, 27, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ScientistScript_0x625d4, -1
+	person_event SPRITE_SCIENTIST, 29, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ScientistScript_0x625d7, -1
--- a/maps/GuideGentsHouse.asm
+++ b/maps/GuideGentsHouse.asm
@@ -43,4 +43,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_GRAMPS, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, GuideGentsHouseGuideGent, EVENT_GUIDE_GENT_VISIBLE_IN_CHERRYGROVE
+	person_event SPRITE_GRAMPS, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GuideGentsHouseGuideGent, EVENT_GUIDE_GENT_VISIBLE_IN_CHERRYGROVE
--- a/maps/HallOfFame.asm
+++ b/maps/HallOfFame.asm
@@ -126,4 +126,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_LANCE, 12, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, -1
+	person_event SPRITE_LANCE, 12, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, -1
--- a/maps/IcePath1F.asm
+++ b/maps/IcePath1F.asm
@@ -33,6 +33,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_POKE_BALL, 7, 31, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e472, EVENT_GOT_HM07_WATERFALL
-	person_event SPRITE_POKE_BALL, 23, 32, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e474, EVENT_ICE_PATH_1F_PP_UP
-	person_event SPRITE_POKE_BALL, 9, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e476, EVENT_ICE_PATH_1F_PROTEIN
+	person_event SPRITE_POKE_BALL, 7, 31, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e472, EVENT_GOT_HM07_WATERFALL
+	person_event SPRITE_POKE_BALL, 23, 32, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e474, EVENT_ICE_PATH_1F_PP_UP
+	person_event SPRITE_POKE_BALL, 9, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e476, EVENT_ICE_PATH_1F_PROTEIN
--- a/maps/IcePathB1F.asm
+++ b/maps/IcePathB1F.asm
@@ -7,54 +7,54 @@
 
 	; callbacks
 
-	dbw 3, UnknownScript_0x7e4be
+	dbw 3, .SetUpStoneTable
 
-UnknownScript_0x7e4be:
-	writecmdqueue CmdQueue_0x7e4c2
+.SetUpStoneTable:
+	writecmdqueue .CommandQueue
 	return
 
-CmdQueue_0x7e4c2:
-	dbw 2, StoneTable_0x7e4c7 ; check if any stones are sitting on a warp
+.CommandQueue:
+	dbw 2, .StoneTable ; check if any stones are sitting on a warp
 	db 0, 0 ; filler
 
-StoneTable_0x7e4c7:
+.StoneTable:
 	db 3, 2 ; warp, person
-	dw UnknownScript_0x7e4d8
+	dw .Boulder1
 
 	db 4, 3 ; warp, person
-	dw UnknownScript_0x7e4e0
+	dw .Boulder2
 
 	db 5, 4 ; warp, person
-	dw UnknownScript_0x7e4e8
+	dw .Boulder3
 
 	db 6, 5 ; warp, person
-	dw UnknownScript_0x7e4f0
+	dw .Boulder4
 
-	db $ff ; end
+	db -1 ; end
 
-UnknownScript_0x7e4d8:
+.Boulder1:
 	disappear 2
 	clearevent EVENT_BOULDER_IN_ICE_PATH_1A
-	jump UnknownScript_0x7e4f8
+	jump .FinishBoulder
 
-UnknownScript_0x7e4e0:
+.Boulder2:
 	disappear 3
 	clearevent EVENT_BOULDER_IN_ICE_PATH_2A
-	jump UnknownScript_0x7e4f8
+	jump .FinishBoulder
 
-UnknownScript_0x7e4e8:
+.Boulder3:
 	disappear 4
 	clearevent EVENT_BOULDER_IN_ICE_PATH_3A
-	jump UnknownScript_0x7e4f8
+	jump .FinishBoulder
 
-UnknownScript_0x7e4f0:
+.Boulder4:
 	disappear 5
 	clearevent EVENT_BOULDER_IN_ICE_PATH_4A
-	jump UnknownScript_0x7e4f8
+	jump .FinishBoulder
 
-UnknownScript_0x7e4f8:
+.FinishBoulder:
 	pause 30
-	scall UnknownScript_0x7e504
+	scall .BoulderFallsThrough
 	loadfont
 	writetext UnknownText_0x7e512
 	closetext
@@ -61,7 +61,7 @@
 	loadmovesprites
 	end
 
-UnknownScript_0x7e504:
+.BoulderFallsThrough:
 	playsound SFX_STRENGTH
 	earthquake 80
 	end
@@ -107,8 +107,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_BOULDER, 7, 11, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, IcePathB1FBoulder, EVENT_BOULDER_IN_ICE_PATH_1
-	person_event SPRITE_BOULDER, 8, 7, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, IcePathB1FBoulder, EVENT_BOULDER_IN_ICE_PATH_2
-	person_event SPRITE_BOULDER, 9, 8, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, IcePathB1FBoulder, EVENT_BOULDER_IN_ICE_PATH_3
-	person_event SPRITE_BOULDER, 7, 17, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, IcePathB1FBoulder, EVENT_BOULDER_IN_ICE_PATH_4
-	person_event SPRITE_POKE_BALL, 35, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e50d, EVENT_ICE_PATH_B1F_IRON
+	person_event SPRITE_BOULDER, 7, 11, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, IcePathB1FBoulder, EVENT_BOULDER_IN_ICE_PATH_1
+	person_event SPRITE_BOULDER, 8, 7, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, IcePathB1FBoulder, EVENT_BOULDER_IN_ICE_PATH_2
+	person_event SPRITE_BOULDER, 9, 8, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, IcePathB1FBoulder, EVENT_BOULDER_IN_ICE_PATH_3
+	person_event SPRITE_BOULDER, 7, 17, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, IcePathB1FBoulder, EVENT_BOULDER_IN_ICE_PATH_4
+	person_event SPRITE_POKE_BALL, 35, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e50d, EVENT_ICE_PATH_B1F_IRON
--- a/maps/IcePathB2FBlackthornSide.asm
+++ b/maps/IcePathB2FBlackthornSide.asm
@@ -30,4 +30,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKE_BALL, 16, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e646, EVENT_ICE_PATH_B2F_BLACKTHORN_SIDE_TM_REST
+	person_event SPRITE_POKE_BALL, 16, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e646, EVENT_ICE_PATH_B2F_BLACKTHORN_SIDE_TM_REST
--- a/maps/IcePathB2FMahoganySide.asm
+++ b/maps/IcePathB2FMahoganySide.asm
@@ -45,9 +45,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_BOULDER, 3, 11, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, BoulderScript_0x7e5a3, EVENT_BOULDER_IN_ICE_PATH_1A
-	person_event SPRITE_BOULDER, 7, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, BoulderScript_0x7e5a3, EVENT_BOULDER_IN_ICE_PATH_2A
-	person_event SPRITE_BOULDER, 12, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, BoulderScript_0x7e5a3, EVENT_BOULDER_IN_ICE_PATH_3A
-	person_event SPRITE_BOULDER, 13, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, BoulderScript_0x7e5a3, EVENT_BOULDER_IN_ICE_PATH_4A
-	person_event SPRITE_POKE_BALL, 9, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e5a6, EVENT_ICE_PATH_B2F_MAHOGANY_SIDE_FULL_HEAL
-	person_event SPRITE_POKE_BALL, 2, 0, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e5a8, EVENT_ICE_PATH_B2F_MAHOGANY_SIDE_MAX_POTION
+	person_event SPRITE_BOULDER, 3, 11, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BoulderScript_0x7e5a3, EVENT_BOULDER_IN_ICE_PATH_1A
+	person_event SPRITE_BOULDER, 7, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BoulderScript_0x7e5a3, EVENT_BOULDER_IN_ICE_PATH_2A
+	person_event SPRITE_BOULDER, 12, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BoulderScript_0x7e5a3, EVENT_BOULDER_IN_ICE_PATH_3A
+	person_event SPRITE_BOULDER, 13, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BoulderScript_0x7e5a3, EVENT_BOULDER_IN_ICE_PATH_4A
+	person_event SPRITE_POKE_BALL, 9, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e5a6, EVENT_ICE_PATH_B2F_MAHOGANY_SIDE_FULL_HEAL
+	person_event SPRITE_POKE_BALL, 2, 0, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e5a8, EVENT_ICE_PATH_B2F_MAHOGANY_SIDE_MAX_POTION
--- a/maps/IcePathB3F.asm
+++ b/maps/IcePathB3F.asm
@@ -28,5 +28,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_POKE_BALL, 7, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e66f, EVENT_ICE_PATH_B3F_NEVERMELTICE
-	person_event SPRITE_ROCK, 6, 6, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, IcePathB3FRock, -1
+	person_event SPRITE_POKE_BALL, 7, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e66f, EVENT_ICE_PATH_B3F_NEVERMELTICE
+	person_event SPRITE_ROCK, 6, 6, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, IcePathB3FRock, -1
--- a/maps/IlexForest.asm
+++ b/maps/IlexForest.asm
@@ -449,7 +449,7 @@
 	loadmovesprites
 	pause 20
 	showemote EMOTE_SHOCK, PLAYER, 20
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	applymovement PLAYER, MovementData_0x6ef58
 	pause 30
 	spriteface PLAYER, DOWN
@@ -460,7 +460,7 @@
 	startbattle
 	returnafterbattle
 	pause 20
-	special Function49bf9
+	special CheckCaughtCelebi
 	iffalse UnknownScript_0x6ee8e
 	appear $7
 	applymovement $7, MovementData_0x6ef4e
@@ -950,14 +950,14 @@
 
 .PersonEvents:
 	db 11
-	person_event SPRITE_BIRD, 31, 14, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, BirdScript_0x6eb8f, EVENT_ILEX_FOREST_FARFETCHD
-	person_event SPRITE_YOUNGSTER, 28, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x6eb7b, EVENT_ILEX_FOREST_APPRENTICE
-	person_event SPRITE_BLACK_BELT, 28, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, BlackBeltScript_0x6edae, EVENT_ILEX_FOREST_CHARCOAL_MASTER
-	person_event SPRITE_ROCKER, 14, 15, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, RockerScript_0x6edde, -1
-	person_event SPRITE_POKE_BALL, 32, 20, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6ee10, EVENT_ILEX_FOREST_REVIVE
-	person_event SPRITE_KURT, 29, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_ILEX_FOREST_KURT
-	person_event SPRITE_LASS, 24, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x6ee0d, EVENT_ILEX_FOREST_LASS
-	person_event SPRITE_YOUNGSTER, 1, 12, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 0, TrainerBug_catcherWayne, -1
-	person_event SPRITE_POKE_BALL, 17, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6ee12, EVENT_ILEX_FOREST_X_ATTACK
-	person_event SPRITE_POKE_BALL, 7, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6ee14, EVENT_ILEX_FOREST_ANTIDOTE
-	person_event SPRITE_POKE_BALL, 1, 27, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6ee16, EVENT_ILEX_FOREST_ETHER
+	person_event SPRITE_BIRD, 31, 14, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, BirdScript_0x6eb8f, EVENT_ILEX_FOREST_FARFETCHD
+	person_event SPRITE_YOUNGSTER, 28, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x6eb7b, EVENT_ILEX_FOREST_APPRENTICE
+	person_event SPRITE_BLACK_BELT, 28, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x6edae, EVENT_ILEX_FOREST_CHARCOAL_MASTER
+	person_event SPRITE_ROCKER, 14, 15, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RockerScript_0x6edde, -1
+	person_event SPRITE_POKE_BALL, 32, 20, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6ee10, EVENT_ILEX_FOREST_REVIVE
+	person_event SPRITE_KURT, 29, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_ILEX_FOREST_KURT
+	person_event SPRITE_LASS, 24, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x6ee0d, EVENT_ILEX_FOREST_LASS
+	person_event SPRITE_YOUNGSTER, 1, 12, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 0, TrainerBug_catcherWayne, -1
+	person_event SPRITE_POKE_BALL, 17, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6ee12, EVENT_ILEX_FOREST_X_ATTACK
+	person_event SPRITE_POKE_BALL, 7, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6ee14, EVENT_ILEX_FOREST_ANTIDOTE
+	person_event SPRITE_POKE_BALL, 1, 27, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6ee16, EVENT_ILEX_FOREST_ETHER
--- a/maps/IlexForestAzaleaGate.asm
+++ b/maps/IlexForestAzaleaGate.asm
@@ -45,5 +45,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, OfficerScript_0x62c7a, -1
-	person_event SPRITE_GRANNY, 3, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, GrannyScript_0x62c7d, -1
+	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, OfficerScript_0x62c7a, -1
+	person_event SPRITE_GRANNY, 3, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, GrannyScript_0x62c7d, -1
--- a/maps/IndigoPlateauPokeCenter1F.asm
+++ b/maps/IndigoPlateauPokeCenter1F.asm
@@ -55,7 +55,7 @@
 	appear $5
 	spriteface PLAYER, DOWN
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	applymovement $5, MovementData_0x180164
 	playmusic MUSIC_RIVAL_ENCOUNTER
@@ -76,7 +76,7 @@
 	appear $5
 	spriteface PLAYER, DOWN
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	applymovement $5, MovementData_0x18016b
 	playmusic MUSIC_RIVAL_ENCOUNTER
@@ -319,9 +319,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_NURSE, 7, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x18012c, -1
-	person_event SPRITE_CLERK, 7, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x18012f, -1
-	person_event SPRITE_COOLTRAINER_M, 11, 11, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, 0, 0, 0, CooltrainerMScript_0x180136, -1
-	person_event SPRITE_SILVER, 9, 16, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_INDIGO_PLATEAU_POKECENTER_RIVAL
-	person_event SPRITE_GRAMPS, 9, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, TeleportGuyScript, EVENT_TELEPORT_GUY
-	person_event SPRITE_JYNX, 9, 0, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, AbraScript, EVENT_TELEPORT_GUY
+	person_event SPRITE_NURSE, 7, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x18012c, -1
+	person_event SPRITE_CLERK, 7, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x18012f, -1
+	person_event SPRITE_COOLTRAINER_M, 11, 11, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x180136, -1
+	person_event SPRITE_SILVER, 9, 16, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_INDIGO_PLATEAU_POKECENTER_RIVAL
+	person_event SPRITE_GRAMPS, 9, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, TeleportGuyScript, EVENT_TELEPORT_GUY
+	person_event SPRITE_JYNX, 9, 0, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, AbraScript, EVENT_TELEPORT_GUY
--- a/maps/KarensRoom.asm
+++ b/maps/KarensRoom.asm
@@ -153,4 +153,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_KAREN, 7, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, KarenScript_0x180bee, -1
+	person_event SPRITE_KAREN, 7, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, KarenScript_0x180bee, -1
--- a/maps/KogasRoom.asm
+++ b/maps/KogasRoom.asm
@@ -150,4 +150,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_KOGA, 7, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, KogaScript_0x18075a, -1
+	person_event SPRITE_KOGA, 7, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, KogaScript_0x18075a, -1
--- a/maps/KrissHouse1F.asm
+++ b/maps/KrissHouse1F.asm
@@ -404,8 +404,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_MOM, 4, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, MomScript_0x7a582, EVENT_KRISS_HOUSE_MOM_1
-	person_event SPRITE_MOM, 2, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, 1, 0, 0, 0, MomScript_0x7a582, EVENT_KRISS_HOUSE_MOM_2
-	person_event SPRITE_MOM, 4, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, 2, 0, 0, 0, MomScript_0x7a582, EVENT_KRISS_HOUSE_MOM_2
-	person_event SPRITE_MOM, 2, 0, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, 4, 0, 0, 0, MomScript_0x7a582, EVENT_KRISS_HOUSE_MOM_2
-	person_event SPRITE_POKEFAN_F, 4, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, NeighborScript, EVENT_KRISS_HOUSE_1F_NEIGHBOR
+	person_event SPRITE_MOM, 4, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, MomScript_0x7a582, EVENT_KRISS_HOUSE_MOM_1
+	person_event SPRITE_MOM, 2, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, 1, 0, PERSONTYPE_SCRIPT, 0, MomScript_0x7a582, EVENT_KRISS_HOUSE_MOM_2
+	person_event SPRITE_MOM, 4, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, 2, 0, PERSONTYPE_SCRIPT, 0, MomScript_0x7a582, EVENT_KRISS_HOUSE_MOM_2
+	person_event SPRITE_MOM, 2, 0, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, 4, 0, PERSONTYPE_SCRIPT, 0, MomScript_0x7a582, EVENT_KRISS_HOUSE_MOM_2
+	person_event SPRITE_POKEFAN_F, 4, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, NeighborScript, EVENT_KRISS_HOUSE_1F_NEIGHBOR
--- a/maps/KrissHouse2F.asm
+++ b/maps/KrissHouse2F.asm
@@ -134,7 +134,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_CONSOLE, 2, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, GameConsole, EVENT_KRISS_HOUSE_2F_CONSOLE
-	person_event SPRITE_DOLL_1, 4, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, Doll1, EVENT_KRISS_HOUSE_2F_DOLL_1
-	person_event SPRITE_DOLL_2, 4, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, Doll2, EVENT_KRISS_HOUSE_2F_DOLL_2
-	person_event SPRITE_BIG_DOLL, 1, 0, SPRITEMOVEDATA_BIGDOLL, 0, 0, -1, -1, 0, 0, 0, BigDoll, EVENT_KRISS_HOUSE_2F_BIG_DOLL
+	person_event SPRITE_CONSOLE, 2, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GameConsole, EVENT_KRISS_HOUSE_2F_CONSOLE
+	person_event SPRITE_DOLL_1, 4, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, Doll1, EVENT_KRISS_HOUSE_2F_DOLL_1
+	person_event SPRITE_DOLL_2, 4, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, Doll2, EVENT_KRISS_HOUSE_2F_DOLL_2
+	person_event SPRITE_BIG_DOLL, 1, 0, SPRITEMOVEDATA_BIGDOLL, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BigDoll, EVENT_KRISS_HOUSE_2F_BIG_DOLL
--- a/maps/KrissNeighborsHouse.asm
+++ b/maps/KrissNeighborsHouse.asm
@@ -114,5 +114,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_COOLTRAINER_F, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, KrissNeighborsDaughter, -1
-	person_event SPRITE_POKEFAN_F, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, KrissNeighbor, EVENT_KRISS_NEIGHBORS_HOUSE_NEIGHBOR
+	person_event SPRITE_COOLTRAINER_F, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, KrissNeighborsDaughter, -1
+	person_event SPRITE_POKEFAN_F, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, KrissNeighbor, EVENT_KRISS_NEIGHBORS_HOUSE_NEIGHBOR
--- a/maps/KurtsHouse.asm
+++ b/maps/KurtsHouse.asm
@@ -40,7 +40,7 @@
 	writetext UnknownText_0x18e473
 	closetext
 	loadmovesprites
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	setevent EVENT_AZALEA_TOWN_SLOWPOKETAIL_ROCKET
 	checkcode VAR_FACING
 	if_equal UP, .RunAround
@@ -287,7 +287,7 @@
 	setevent EVENT_FOREST_IS_RESTLESS
 	clearevent EVENT_CAN_GIVE_GS_BALL_TO_KURT
 	clearevent EVENT_GAVE_GS_BALL_TO_KURT
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 20
 	showemote EMOTE_SHOCK, $2, 30
 	checkcode VAR_FACING
@@ -696,8 +696,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_KURT, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, KurtScript_0x18e178, EVENT_KURTS_HOUSE_KURT_1
-	person_event SPRITE_TWIN, 3, 5, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, KurtsGranddaughter1, EVENT_KURTS_HOUSE_GRANDDAUGHTER_1
-	person_event SPRITE_SLOWPOKE, 3, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, KurtsHouseSlowpoke, EVENT_KURTS_HOUSE_SLOWPOKE
-	person_event SPRITE_KURT, 3, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, KurtScript_0x18e3bd, EVENT_KURTS_HOUSE_KURT_2
-	person_event SPRITE_TWIN, 4, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, KurtsGranddaughter2, EVENT_KURTS_HOUSE_GRANDDAUGHTER_2
+	person_event SPRITE_KURT, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, KurtScript_0x18e178, EVENT_KURTS_HOUSE_KURT_1
+	person_event SPRITE_TWIN, 3, 5, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, KurtsGranddaughter1, EVENT_KURTS_HOUSE_GRANDDAUGHTER_1
+	person_event SPRITE_SLOWPOKE, 3, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, KurtsHouseSlowpoke, EVENT_KURTS_HOUSE_SLOWPOKE
+	person_event SPRITE_KURT, 3, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, KurtScript_0x18e3bd, EVENT_KURTS_HOUSE_KURT_2
+	person_event SPRITE_TWIN, 4, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, KurtsGranddaughter2, EVENT_KURTS_HOUSE_GRANDDAUGHTER_2
--- a/maps/LakeofRage.asm
+++ b/maps/LakeofRage.asm
@@ -509,15 +509,15 @@
 
 .PersonEvents:
 	db 12
-	person_event SPRITE_LANCE, 28, 21, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, LanceScript_0x70022, EVENT_LAKE_OF_RAGE_LANCE
-	person_event SPRITE_GRAMPS, 26, 20, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, GrampsScript_0x7008e, -1
-	person_event SPRITE_SUPER_NERD, 13, 36, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, SuperNerdScript_0x700a2, -1
-	person_event SPRITE_COOLTRAINER_F, 29, 25, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, CooltrainerFScript_0x700a5, -1
-	person_event SPRITE_FISHER, 23, 30, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerFisherAndre, EVENT_LAKE_OF_RAGE_CIVILIANS
-	person_event SPRITE_FISHER, 26, 24, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerFisherRaymond, EVENT_LAKE_OF_RAGE_CIVILIANS
-	person_event SPRITE_COOLTRAINER_M, 15, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerCooltrainermAaron, EVENT_LAKE_OF_RAGE_CIVILIANS
-	person_event SPRITE_COOLTRAINER_F, 7, 36, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 0, TrainerCooltrainerfLois, EVENT_LAKE_OF_RAGE_CIVILIANS
-	person_event SPRITE_GYARADOS, 22, 18, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, GyaradosScript_0x70063, EVENT_LAKE_OF_RAGE_RED_GYARADOS
-	person_event SPRITE_SUPER_NERD, 4, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, WesleyScript, EVENT_LAKE_OF_RAGE_WESLEY_OF_WEDNESDAY
-	person_event SPRITE_POKE_BALL, 10, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x70148, EVENT_LAKE_OF_RAGE_ELIXER
-	person_event SPRITE_POKE_BALL, 2, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7014a, EVENT_LAKE_OF_RAGE_TM_DETECT
+	person_event SPRITE_LANCE, 28, 21, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LanceScript_0x70022, EVENT_LAKE_OF_RAGE_LANCE
+	person_event SPRITE_GRAMPS, 26, 20, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x7008e, -1
+	person_event SPRITE_SUPER_NERD, 13, 36, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x700a2, -1
+	person_event SPRITE_COOLTRAINER_F, 29, 25, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x700a5, -1
+	person_event SPRITE_FISHER, 23, 30, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerFisherAndre, EVENT_LAKE_OF_RAGE_CIVILIANS
+	person_event SPRITE_FISHER, 26, 24, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerFisherRaymond, EVENT_LAKE_OF_RAGE_CIVILIANS
+	person_event SPRITE_COOLTRAINER_M, 15, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerCooltrainermAaron, EVENT_LAKE_OF_RAGE_CIVILIANS
+	person_event SPRITE_COOLTRAINER_F, 7, 36, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 0, TrainerCooltrainerfLois, EVENT_LAKE_OF_RAGE_CIVILIANS
+	person_event SPRITE_GYARADOS, 22, 18, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, GyaradosScript_0x70063, EVENT_LAKE_OF_RAGE_RED_GYARADOS
+	person_event SPRITE_SUPER_NERD, 4, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, WesleyScript, EVENT_LAKE_OF_RAGE_WESLEY_OF_WEDNESDAY
+	person_event SPRITE_POKE_BALL, 10, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x70148, EVENT_LAKE_OF_RAGE_ELIXER
+	person_event SPRITE_POKE_BALL, 2, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7014a, EVENT_LAKE_OF_RAGE_TM_DETECT
--- a/maps/LakeofRageHiddenPowerHouse.asm
+++ b/maps/LakeofRageHiddenPowerHouse.asm
@@ -83,4 +83,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_FISHER, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, HiddenPowerGuy, -1
+	person_event SPRITE_FISHER, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, HiddenPowerGuy, -1
--- a/maps/LakeofRageMagikarpHouse.asm
+++ b/maps/LakeofRageMagikarpHouse.asm
@@ -221,4 +221,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_FISHING_GURU, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, FishingGuruScript_0x19a6ae, -1
+	person_event SPRITE_FISHING_GURU, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FishingGuruScript_0x19a6ae, -1
--- a/maps/LancesRoom.asm
+++ b/maps/LancesRoom.asm
@@ -44,12 +44,12 @@
 	end
 
 UnknownScript_0x180e6a:
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	applymovement PLAYER, MovementData_0x180f38
 	jump LanceScript_0x180e7b
 
 UnknownScript_0x180e74:
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	applymovement PLAYER, MovementData_0x180f3c
 LanceScript_0x180e7b:
 	spriteface $2, LEFT
@@ -358,6 +358,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_LANCE, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, LanceScript_0x180e7b, -1
-	person_event SPRITE_TEACHER, 7, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ObjectEvent, EVENT_LANCES_ROOM_OAK_AND_MARY
-	person_event SPRITE_OAK, 7, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_LANCES_ROOM_OAK_AND_MARY
+	person_event SPRITE_LANCE, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LanceScript_0x180e7b, -1
+	person_event SPRITE_TEACHER, 7, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_LANCES_ROOM_OAK_AND_MARY
+	person_event SPRITE_OAK, 7, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_LANCES_ROOM_OAK_AND_MARY
--- a/maps/LavRadioTower1F.asm
+++ b/maps/LavRadioTower1F.asm
@@ -233,8 +233,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_RECEPTIONIST, 6, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ReceptionistScript_0x7ee63, -1
-	person_event SPRITE_OFFICER, 1, 15, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, OfficerScript_0x7ee66, -1
-	person_event SPRITE_SUPER_NERD, 3, 1, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SuperNerdScript_0x7ee69, -1
-	person_event SPRITE_GENTLEMAN, 1, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, GentlemanScript_0x7ee6c, -1
-	person_event SPRITE_SUPER_NERD, 6, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, SuperNerdScript_0x7eea2, -1
+	person_event SPRITE_RECEPTIONIST, 6, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x7ee63, -1
+	person_event SPRITE_OFFICER, 1, 15, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, OfficerScript_0x7ee66, -1
+	person_event SPRITE_SUPER_NERD, 3, 1, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x7ee69, -1
+	person_event SPRITE_GENTLEMAN, 1, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x7ee6c, -1
+	person_event SPRITE_SUPER_NERD, 6, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x7eea2, -1
--- a/maps/LavenderMart.asm
+++ b/maps/LavenderMart.asm
@@ -59,6 +59,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x7eb1c, -1
-	person_event SPRITE_POKEFAN_M, 6, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanMScript_0x7eb23, -1
-	person_event SPRITE_ROCKER, 2, 9, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, RockerScript_0x7eb26, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x7eb1c, -1
+	person_event SPRITE_POKEFAN_M, 6, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x7eb23, -1
+	person_event SPRITE_ROCKER, 2, 9, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RockerScript_0x7eb26, -1
--- a/maps/LavenderNameRater.asm
+++ b/maps/LavenderNameRater.asm
@@ -40,4 +40,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_GENTLEMAN, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, LavenderNameRater, -1
+	person_event SPRITE_GENTLEMAN, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, LavenderNameRater, -1
--- a/maps/LavenderPokeCenter1F.asm
+++ b/maps/LavenderPokeCenter1F.asm
@@ -92,7 +92,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x7e6a0, -1
-	person_event SPRITE_GENTLEMAN, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, GentlemanScript_0x7e6a3, -1
-	person_event SPRITE_TEACHER, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TeacherScript_0x7e6a6, -1
-	person_event SPRITE_YOUNGSTER, 5, 1, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x7e6a9, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x7e6a0, -1
+	person_event SPRITE_GENTLEMAN, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x7e6a3, -1
+	person_event SPRITE_TEACHER, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TeacherScript_0x7e6a6, -1
+	person_event SPRITE_YOUNGSTER, 5, 1, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x7e6a9, -1
--- a/maps/LavenderTown.asm
+++ b/maps/LavenderTown.asm
@@ -129,7 +129,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_POKEFAN_M, 7, 12, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanMScript_0x1ad6e4, -1
-	person_event SPRITE_TEACHER, 15, 2, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, TeacherScript_0x1ad6e7, -1
-	person_event SPRITE_GRAMPS, 12, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, GrampsScript_0x1ad6ea, -1
-	person_event SPRITE_YOUNGSTER, 11, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 1, YoungsterScript_0x1ad6ed, -1
+	person_event SPRITE_POKEFAN_M, 7, 12, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x1ad6e4, -1
+	person_event SPRITE_TEACHER, 15, 2, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, TeacherScript_0x1ad6e7, -1
+	person_event SPRITE_GRAMPS, 12, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1ad6ea, -1
+	person_event SPRITE_YOUNGSTER, 11, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 1, YoungsterScript_0x1ad6ed, -1
--- a/maps/LavenderTownSpeechHouse.asm
+++ b/maps/LavenderTownSpeechHouse.asm
@@ -44,4 +44,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKEFAN_F, 3, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, PokefanFScript_0x7ea47, -1
+	person_event SPRITE_POKEFAN_F, 3, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x7ea47, -1
--- a/maps/MahoganyGym.asm
+++ b/maps/MahoganyGym.asm
@@ -382,10 +382,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_PRYCE, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, PryceScript_0x199a9e, -1
-	person_event SPRITE_BUENA, 6, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerSkierRoxanne, -1
-	person_event SPRITE_ROCKER, 17, 0, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerBoarderRonald, -1
-	person_event SPRITE_BUENA, 17, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerSkierClarissa, -1
-	person_event SPRITE_ROCKER, 9, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerBoarderBrad, -1
-	person_event SPRITE_ROCKER, 4, 2, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerBoarderDouglas, -1
-	person_event SPRITE_GYM_GUY, 15, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, MahoganyGymGuyScript, -1
+	person_event SPRITE_PRYCE, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, PryceScript_0x199a9e, -1
+	person_event SPRITE_BUENA, 6, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerSkierRoxanne, -1
+	person_event SPRITE_ROCKER, 17, 0, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerBoarderRonald, -1
+	person_event SPRITE_BUENA, 17, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerSkierClarissa, -1
+	person_event SPRITE_ROCKER, 9, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerBoarderBrad, -1
+	person_event SPRITE_ROCKER, 4, 2, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerBoarderDouglas, -1
+	person_event SPRITE_GYM_GUY, 15, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, MahoganyGymGuyScript, -1
--- a/maps/MahoganyMart1F.asm
+++ b/maps/MahoganyMart1F.asm
@@ -236,8 +236,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_PHARMACIST, 3, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, PharmacistScript_0x6c367, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_BLACK_BELT, 6, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, BlackBeltScript_0x6c37b, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_LANCE, 6, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_MAHOGANY_MART_LANCE_AND_DRAGONITE
-	person_event SPRITE_DRAGON, 6, 3, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_MAHOGANY_MART_LANCE_AND_DRAGONITE
-	person_event SPRITE_GRANNY, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, GrannyScript_0x6c3ee, EVENT_MAHOGANY_MART_OWNERS
+	person_event SPRITE_PHARMACIST, 3, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PharmacistScript_0x6c367, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_BLACK_BELT, 6, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x6c37b, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_LANCE, 6, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_MAHOGANY_MART_LANCE_AND_DRAGONITE
+	person_event SPRITE_DRAGON, 6, 3, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_MAHOGANY_MART_LANCE_AND_DRAGONITE
+	person_event SPRITE_GRANNY, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrannyScript_0x6c3ee, EVENT_MAHOGANY_MART_OWNERS
--- a/maps/MahoganyPokeCenter1F.asm
+++ b/maps/MahoganyPokeCenter1F.asm
@@ -65,7 +65,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x19a356, -1
-	person_event SPRITE_POKEFAN_M, 2, 7, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanMScript_0x19a359, -1
-	person_event SPRITE_YOUNGSTER, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x19a35c, -1
-	person_event SPRITE_COOLTRAINER_F, 3, 2, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, CooltrainerFScript_0x19a35f, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x19a356, -1
+	person_event SPRITE_POKEFAN_M, 2, 7, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x19a359, -1
+	person_event SPRITE_YOUNGSTER, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x19a35c, -1
+	person_event SPRITE_COOLTRAINER_F, 3, 2, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x19a35f, -1
--- a/maps/MahoganyRedGyaradosSpeechHouse.asm
+++ b/maps/MahoganyRedGyaradosSpeechHouse.asm
@@ -73,5 +73,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_BLACK_BELT, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, BlackBeltScript_0x19997f, -1
-	person_event SPRITE_TEACHER, 5, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, TeacherScript_0x199982, -1
+	person_event SPRITE_BLACK_BELT, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x19997f, -1
+	person_event SPRITE_TEACHER, 5, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, TeacherScript_0x199982, -1
--- a/maps/MahoganyTown.asm
+++ b/maps/MahoganyTown.asm
@@ -51,7 +51,7 @@
 UnknownScript_0x190040:
 	loadfont
 	writetext UnknownText_0x1900b0
-	special Function24ae8
+	special PlaceMoneyTopRightOW
 	yesorno
 	iffalse UnknownScript_0x190072
 	checkmoney $0, 300
@@ -61,7 +61,7 @@
 	waitbutton
 	playsound SFX_TRANSACTION
 	takemoney $0, 300
-	special Function24ae8
+	special PlaceMoneyTopRightOW
 	writetext UnknownText_0x19014a
 	closetext
 	loadmovesprites
@@ -268,7 +268,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_POKEFAN_M, 8, 19, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, PokefanMScript_0x19002e, EVENT_MAHOGANY_TOWN_POKEFAN_M_BLOCKS_EAST
-	person_event SPRITE_GRAMPS, 9, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, GrampsScript_0x19007e, -1
-	person_event SPRITE_FISHER, 14, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x190092, EVENT_MAHOGANY_TOWN_POKEFAN_M_BLOCKS_GYM
-	person_event SPRITE_LASS, 8, 12, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, LassScript_0x190095, EVENT_MAHOGANY_MART_OWNERS
+	person_event SPRITE_POKEFAN_M, 8, 19, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x19002e, EVENT_MAHOGANY_TOWN_POKEFAN_M_BLOCKS_EAST
+	person_event SPRITE_GRAMPS, 9, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x19007e, -1
+	person_event SPRITE_FISHER, 14, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x190092, EVENT_MAHOGANY_TOWN_POKEFAN_M_BLOCKS_GYM
+	person_event SPRITE_LASS, 8, 12, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x190095, EVENT_MAHOGANY_MART_OWNERS
--- a/maps/ManiasHouse.asm
+++ b/maps/ManiasHouse.asm
@@ -212,4 +212,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_ROCKER, 4, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, ManiaScript, -1
+	person_event SPRITE_ROCKER, 4, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ManiaScript, -1
--- a/maps/MountMoon.asm
+++ b/maps/MountMoon.asm
@@ -19,7 +19,7 @@
 UnknownScript_0x7408e:
 	spriteface PLAYER, RIGHT
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	applymovement $2, MovementData_0x740f9
 	playmusic MUSIC_RIVAL_ENCOUNTER
@@ -87,7 +87,7 @@
 	step_end
 
 UnknownText_0x74105:
-	text $56, " ", $56, " ", $56
+	text "<......> <......> <......>"
 
 	para "It's been a while,"
 	line "<PLAYER>."
@@ -107,7 +107,7 @@
 	done
 
 UnknownText_0x7419d:
-	text $56, " ", $56, " ", $56
+	text "<......> <......> <......>"
 
 	para "I thought I raised"
 	line "my #MON to be"
@@ -120,7 +120,7 @@
 	done
 
 UnknownText_0x741fa:
-	text $56, " ", $56, " ", $56
+	text "<......> <......> <......>"
 
 	para "…You won, fair"
 	line "and square."
@@ -146,7 +146,7 @@
 	done
 
 UnknownText_0x742e0:
-	text $56, " ", $56, " ", $56
+	text "<......> <......> <......>"
 
 	para "I've repaid my"
 	line "debt to you."
@@ -182,4 +182,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_SILVER, 3, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_MT_MOON_RIVAL
+	person_event SPRITE_SILVER, 3, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_MT_MOON_RIVAL
--- a/maps/MountMoonGiftShop.asm
+++ b/maps/MountMoonGiftShop.asm
@@ -38,7 +38,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_GRAMPS, 3, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, 1, 0, 0, 0, GrampsScript_0x771a8, -1
-	person_event SPRITE_GRAMPS, 2, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, 2, 0, 0, 0, GrampsScript_0x771a8, -1
-	person_event SPRITE_LASS, 6, 1, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, 1, 0, 0, 0, LassScript_0x771b0, -1
-	person_event SPRITE_LASS, 4, 5, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, 2, 0, 0, 0, LassScript_0x771b0, -1
+	person_event SPRITE_GRAMPS, 3, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, 1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x771a8, -1
+	person_event SPRITE_GRAMPS, 2, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, 2, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x771a8, -1
+	person_event SPRITE_LASS, 6, 1, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, 1, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x771b0, -1
+	person_event SPRITE_LASS, 4, 5, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, 2, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x771b0, -1
--- a/maps/MountMoonSquare.asm
+++ b/maps/MountMoonSquare.asm
@@ -155,6 +155,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_FAIRY, 6, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_MT_MOON_SQUARE_CLEFAIRY
-	person_event SPRITE_FAIRY, 6, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_MT_MOON_SQUARE_CLEFAIRY
-	person_event SPRITE_ROCK, 7, 7, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, MtMoonSquareRock, EVENT_MT_MOON_SQUARE_ROCK
+	person_event SPRITE_FAIRY, 6, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_MT_MOON_SQUARE_CLEFAIRY
+	person_event SPRITE_FAIRY, 6, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_MT_MOON_SQUARE_CLEFAIRY
+	person_event SPRITE_ROCK, 7, 7, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, MtMoonSquareRock, EVENT_MT_MOON_SQUARE_ROCK
--- a/maps/MountMortar1FInside.asm
+++ b/maps/MountMortar1FInside.asm
@@ -127,13 +127,13 @@
 
 .PersonEvents:
 	db 10
-	person_event SPRITE_BOULDER, 43, 21, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, MountMortar1FBoulder, -1
-	person_event SPRITE_POKE_BALL, 38, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7de7c, EVENT_MOUNT_MORTAR_1F_INSIDE_ESCAPE_ROPE
-	person_event SPRITE_POKE_BALL, 10, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7de7e, EVENT_MOUNT_MORTAR_1F_INSIDE_MAX_REVIVE
-	person_event SPRITE_POKE_BALL, 27, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7de80, EVENT_MOUNT_MORTAR_1F_INSIDE_HYPER_POTION
-	person_event SPRITE_POKE_BALL, 20, 22, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7de82, EVENT_MOUNT_MORTAR_1F_INSIDE_MAX_POTION
-	person_event SPRITE_POKE_BALL, 19, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7de84, EVENT_MOUNT_MORTAR_1F_INSIDE_NUGGET
-	person_event SPRITE_SUPER_NERD, 43, 33, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPokemaniacMiller, -1
-	person_event SPRITE_SUPER_NERD, 28, 24, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerSupernerdMarkus, -1
-	person_event SPRITE_POKE_BALL, 16, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7de86, EVENT_MOUNT_MORTAR_1F_INSIDE_IRON
-	person_event SPRITE_POKE_BALL, 17, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7de88, EVENT_MOUNT_MORTAR_1F_INSIDE_ULTRA_BALL
+	person_event SPRITE_BOULDER, 43, 21, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, MountMortar1FBoulder, -1
+	person_event SPRITE_POKE_BALL, 38, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7de7c, EVENT_MOUNT_MORTAR_1F_INSIDE_ESCAPE_ROPE
+	person_event SPRITE_POKE_BALL, 10, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7de7e, EVENT_MOUNT_MORTAR_1F_INSIDE_MAX_REVIVE
+	person_event SPRITE_POKE_BALL, 27, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7de80, EVENT_MOUNT_MORTAR_1F_INSIDE_HYPER_POTION
+	person_event SPRITE_POKE_BALL, 20, 22, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7de82, EVENT_MOUNT_MORTAR_1F_INSIDE_MAX_POTION
+	person_event SPRITE_POKE_BALL, 19, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7de84, EVENT_MOUNT_MORTAR_1F_INSIDE_NUGGET
+	person_event SPRITE_SUPER_NERD, 43, 33, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPokemaniacMiller, -1
+	person_event SPRITE_SUPER_NERD, 28, 24, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerSupernerdMarkus, -1
+	person_event SPRITE_POKE_BALL, 16, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7de86, EVENT_MOUNT_MORTAR_1F_INSIDE_IRON
+	person_event SPRITE_POKE_BALL, 17, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7de88, EVENT_MOUNT_MORTAR_1F_INSIDE_ULTRA_BALL
--- a/maps/MountMortar1FOutside.asm
+++ b/maps/MountMortar1FOutside.asm
@@ -40,5 +40,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_POKE_BALL, 15, 13, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7ddf6, EVENT_MOUNT_MORTAR_1F_OUTSIDE_ETHER
-	person_event SPRITE_POKE_BALL, 18, 31, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7ddf8, EVENT_MOUNT_MORTAR_1F_OUTSIDE_REVIVE
+	person_event SPRITE_POKE_BALL, 15, 13, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7ddf6, EVENT_MOUNT_MORTAR_1F_OUTSIDE_ETHER
+	person_event SPRITE_POKE_BALL, 18, 31, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7ddf8, EVENT_MOUNT_MORTAR_1F_OUTSIDE_REVIVE
--- a/maps/MountMortar2FInside.asm
+++ b/maps/MountMortar2FInside.asm
@@ -76,10 +76,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_POKE_BALL, 22, 28, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e0de, EVENT_MOUNT_MORTAR_2F_INSIDE_MAX_POTION
-	person_event SPRITE_POKE_BALL, 33, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e0e0, EVENT_MOUNT_MORTAR_2F_INSIDE_RARE_CANDY
-	person_event SPRITE_POKE_BALL, 17, 19, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e0e2, EVENT_MOUNT_MORTAR_2F_INSIDE_TM_DEFENSE_CURL
-	person_event SPRITE_POKE_BALL, 5, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e0e4, EVENT_MOUNT_MORTAR_2F_INSIDE_DRAGON_SCALE
-	person_event SPRITE_POKE_BALL, 11, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e0e6, EVENT_MOUNT_MORTAR_2F_INSIDE_ELIXER
-	person_event SPRITE_POKE_BALL, 5, 28, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e0e8, EVENT_MOUNT_MORTAR_2F_INSIDE_ESCAPE_ROPE
-	person_event SPRITE_SUPER_NERD, 26, 13, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerSupernerdHugh, -1
+	person_event SPRITE_POKE_BALL, 22, 28, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e0de, EVENT_MOUNT_MORTAR_2F_INSIDE_MAX_POTION
+	person_event SPRITE_POKE_BALL, 33, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e0e0, EVENT_MOUNT_MORTAR_2F_INSIDE_RARE_CANDY
+	person_event SPRITE_POKE_BALL, 17, 19, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e0e2, EVENT_MOUNT_MORTAR_2F_INSIDE_TM_DEFENSE_CURL
+	person_event SPRITE_POKE_BALL, 5, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e0e4, EVENT_MOUNT_MORTAR_2F_INSIDE_DRAGON_SCALE
+	person_event SPRITE_POKE_BALL, 11, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e0e6, EVENT_MOUNT_MORTAR_2F_INSIDE_ELIXER
+	person_event SPRITE_POKE_BALL, 5, 28, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e0e8, EVENT_MOUNT_MORTAR_2F_INSIDE_ESCAPE_ROPE
+	person_event SPRITE_SUPER_NERD, 26, 13, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerSupernerdHugh, -1
--- a/maps/MountMortarB1F.asm
+++ b/maps/MountMortarB1F.asm
@@ -144,10 +144,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_POKE_BALL, 12, 29, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e240, EVENT_MOUNT_MORTAR_B1F_HYPER_POTION
-	person_event SPRITE_POKE_BALL, 16, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e242, EVENT_MOUNT_MORTAR_B1F_CARBOS
-	person_event SPRITE_BOULDER, 10, 9, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, MountMortarB1FBoulder, -1
-	person_event SPRITE_BLACK_BELT, 4, 16, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, BlackBeltScript_0x7e1f6, -1
-	person_event SPRITE_POKE_BALL, 24, 34, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e244, EVENT_MOUNT_MORTAR_B1F_FULL_RESTORE
-	person_event SPRITE_POKE_BALL, 3, 32, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e246, EVENT_MOUNT_MORTAR_B1F_MAX_ETHER
-	person_event SPRITE_POKE_BALL, 26, 21, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7e248, EVENT_MOUNT_MORTAR_B1F_PP_UP
+	person_event SPRITE_POKE_BALL, 12, 29, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e240, EVENT_MOUNT_MORTAR_B1F_HYPER_POTION
+	person_event SPRITE_POKE_BALL, 16, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e242, EVENT_MOUNT_MORTAR_B1F_CARBOS
+	person_event SPRITE_BOULDER, 10, 9, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, MountMortarB1FBoulder, -1
+	person_event SPRITE_BLACK_BELT, 4, 16, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x7e1f6, -1
+	person_event SPRITE_POKE_BALL, 24, 34, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e244, EVENT_MOUNT_MORTAR_B1F_FULL_RESTORE
+	person_event SPRITE_POKE_BALL, 3, 32, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e246, EVENT_MOUNT_MORTAR_B1F_MAX_ETHER
+	person_event SPRITE_POKE_BALL, 26, 21, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7e248, EVENT_MOUNT_MORTAR_B1F_PP_UP
--- a/maps/MoveDeletersHouse.asm
+++ b/maps/MoveDeletersHouse.asm
@@ -35,4 +35,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_SUPER_NERD, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, MoveDeleter, -1
+	person_event SPRITE_SUPER_NERD, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, MoveDeleter, -1
--- a/maps/MrFujisHouse.asm
+++ b/maps/MrFujisHouse.asm
@@ -91,8 +91,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_SUPER_NERD, 1, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, SuperNerdScript_0x7e8ca, -1
-	person_event SPRITE_LASS, 4, 3, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, LassScript_0x7e8cd, -1
-	person_event SPRITE_RHYDON, 4, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, MrFujisPsyduck, -1
-	person_event SPRITE_GROWLITHE, 5, 5, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, MrFujisNidorino, -1
-	person_event SPRITE_MOLTRES, 3, 1, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, MrFujisPidgey, -1
+	person_event SPRITE_SUPER_NERD, 1, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x7e8ca, -1
+	person_event SPRITE_LASS, 4, 3, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x7e8cd, -1
+	person_event SPRITE_RHYDON, 4, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, MrFujisPsyduck, -1
+	person_event SPRITE_GROWLITHE, 5, 5, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, MrFujisNidorino, -1
+	person_event SPRITE_MOLTRES, 3, 1, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, MrFujisPidgey, -1
--- a/maps/MrPokemonsHouse.asm
+++ b/maps/MrPokemonsHouse.asm
@@ -392,5 +392,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_GENTLEMAN, 5, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, GentlemanScript_0x196e97, -1
-	person_event SPRITE_OAK, 5, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_MR_POKEMONS_HOUSE_OAK
+	person_event SPRITE_GENTLEMAN, 5, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x196e97, -1
+	person_event SPRITE_OAK, 5, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_MR_POKEMONS_HOUSE_OAK
--- a/maps/MrPsychicsHouse.asm
+++ b/maps/MrPsychicsHouse.asm
@@ -63,4 +63,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_FISHING_GURU, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, MrPsychic, -1
+	person_event SPRITE_FISHING_GURU, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, MrPsychic, -1
--- a/maps/NationalPark.asm
+++ b/maps/NationalPark.asm
@@ -521,17 +521,17 @@
 
 .PersonEvents:
 	db 14
-	person_event SPRITE_LASS, 24, 15, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x5c002, -1
-	person_event SPRITE_POKEFAN_F, 4, 14, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, PokefanFScript_0x5c005, -1
-	person_event SPRITE_TEACHER, 40, 27, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TeacherScript_0x5c008, -1
-	person_event SPRITE_YOUNGSTER, 41, 11, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, YoungsterScript_0x5c023, -1
-	person_event SPRITE_YOUNGSTER, 41, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x5c026, -1
-	person_event SPRITE_TEACHER, 41, 17, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, 0, 0, 0, TeacherScript_0x5c029, -1
-	person_event SPRITE_GROWLITHE, 40, 26, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, GrowlitheScript_0x5c02c, -1
-	person_event SPRITE_YOUNGSTER, 23, 27, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerSchoolboyJack1, -1
-	person_event SPRITE_POKEFAN_F, 29, 18, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 2, TrainerPokefanfBeverly1, -1
-	person_event SPRITE_POKEFAN_M, 9, 16, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 2, TrainerPokefanmWilliam, -1
-	person_event SPRITE_LASS, 14, 8, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerLassKrise, -1
-	person_event SPRITE_POKE_BALL, 12, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5c1cc, EVENT_NATIONAL_PARK_PARLYZ_HEAL
-	person_event SPRITE_GAMEBOY_KID, 6, 26, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, GameboyKidScript_0x5c037, -1
-	person_event SPRITE_POKE_BALL, 43, 1, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5c1ce, EVENT_NATIONAL_PARK_TM_DIG
+	person_event SPRITE_LASS, 24, 15, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x5c002, -1
+	person_event SPRITE_POKEFAN_F, 4, 14, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x5c005, -1
+	person_event SPRITE_TEACHER, 40, 27, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TeacherScript_0x5c008, -1
+	person_event SPRITE_YOUNGSTER, 41, 11, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x5c023, -1
+	person_event SPRITE_YOUNGSTER, 41, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x5c026, -1
+	person_event SPRITE_TEACHER, 41, 17, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x5c029, -1
+	person_event SPRITE_GROWLITHE, 40, 26, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrowlitheScript_0x5c02c, -1
+	person_event SPRITE_YOUNGSTER, 23, 27, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerSchoolboyJack1, -1
+	person_event SPRITE_POKEFAN_F, 29, 18, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 2, TrainerPokefanfBeverly1, -1
+	person_event SPRITE_POKEFAN_M, 9, 16, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 2, TrainerPokefanmWilliam, -1
+	person_event SPRITE_LASS, 14, 8, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerLassKrise, -1
+	person_event SPRITE_POKE_BALL, 12, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5c1cc, EVENT_NATIONAL_PARK_PARLYZ_HEAL
+	person_event SPRITE_GAMEBOY_KID, 6, 26, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GameboyKidScript_0x5c037, -1
+	person_event SPRITE_POKE_BALL, 43, 1, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5c1ce, EVENT_NATIONAL_PARK_TM_DIG
--- a/maps/NationalParkBugContest.asm
+++ b/maps/NationalParkBugContest.asm
@@ -230,15 +230,15 @@
 
 .PersonEvents:
 	db 12
-	person_event SPRITE_YOUNGSTER, 29, 19, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x5c8ec, EVENT_BUG_CATCHING_CONTESTANT_1A
-	person_event SPRITE_YOUNGSTER, 22, 28, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x5c8f4, EVENT_BUG_CATCHING_CONTESTANT_2A
-	person_event SPRITE_ROCKER, 18, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, RockerScript_0x5c8fc, EVENT_BUG_CATCHING_CONTESTANT_3A
-	person_event SPRITE_POKEFAN_M, 13, 7, SPRITEMOVEDATA_WALK_UP_DOWN, 0, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, PokefanMScript_0x5c904, EVENT_BUG_CATCHING_CONTESTANT_4A
-	person_event SPRITE_YOUNGSTER, 9, 23, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x5c90c, EVENT_BUG_CATCHING_CONTESTANT_5A
-	person_event SPRITE_YOUNGSTER, 13, 27, SPRITEMOVEDATA_WANDER, 3, 3, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x5c914, EVENT_BUG_CATCHING_CONTESTANT_6A
-	person_event SPRITE_LASS, 23, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, LassScript_0x5c91c, EVENT_BUG_CATCHING_CONTESTANT_7A
-	person_event SPRITE_YOUNGSTER, 27, 11, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x5c924, EVENT_BUG_CATCHING_CONTESTANT_8A
-	person_event SPRITE_YOUNGSTER, 8, 16, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x5c92c, EVENT_BUG_CATCHING_CONTESTANT_9A
-	person_event SPRITE_YOUNGSTER, 34, 17, SPRITEMOVEDATA_WANDER, 3, 3, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, YoungsterScript_0x5c934, EVENT_BUG_CATCHING_CONTESTANT_10A
-	person_event SPRITE_POKE_BALL, 12, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5c945, EVENT_NATIONAL_PARK_PARLYZ_HEAL
-	person_event SPRITE_POKE_BALL, 43, 1, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5c947, EVENT_NATIONAL_PARK_TM_DIG
+	person_event SPRITE_YOUNGSTER, 29, 19, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x5c8ec, EVENT_BUG_CATCHING_CONTESTANT_1A
+	person_event SPRITE_YOUNGSTER, 22, 28, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x5c8f4, EVENT_BUG_CATCHING_CONTESTANT_2A
+	person_event SPRITE_ROCKER, 18, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, RockerScript_0x5c8fc, EVENT_BUG_CATCHING_CONTESTANT_3A
+	person_event SPRITE_POKEFAN_M, 13, 7, SPRITEMOVEDATA_WALK_UP_DOWN, 0, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x5c904, EVENT_BUG_CATCHING_CONTESTANT_4A
+	person_event SPRITE_YOUNGSTER, 9, 23, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x5c90c, EVENT_BUG_CATCHING_CONTESTANT_5A
+	person_event SPRITE_YOUNGSTER, 13, 27, SPRITEMOVEDATA_WANDER, 3, 3, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x5c914, EVENT_BUG_CATCHING_CONTESTANT_6A
+	person_event SPRITE_LASS, 23, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, LassScript_0x5c91c, EVENT_BUG_CATCHING_CONTESTANT_7A
+	person_event SPRITE_YOUNGSTER, 27, 11, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x5c924, EVENT_BUG_CATCHING_CONTESTANT_8A
+	person_event SPRITE_YOUNGSTER, 8, 16, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x5c92c, EVENT_BUG_CATCHING_CONTESTANT_9A
+	person_event SPRITE_YOUNGSTER, 34, 17, SPRITEMOVEDATA_WANDER, 3, 3, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x5c934, EVENT_BUG_CATCHING_CONTESTANT_10A
+	person_event SPRITE_POKE_BALL, 12, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5c945, EVENT_NATIONAL_PARK_PARLYZ_HEAL
+	person_event SPRITE_POKE_BALL, 43, 1, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5c947, EVENT_NATIONAL_PARK_TM_DIG
--- a/maps/NewBarkTown.asm
+++ b/maps/NewBarkTown.asm
@@ -305,6 +305,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_TEACHER, 8, 6, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 1, -1, -1, 0, 0, 0, TeacherScript_0x1a806f, -1
-	person_event SPRITE_FISHER, 9, 12, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x1a809b, -1
-	person_event SPRITE_SILVER, 2, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, SilverScript_0x1a809e, EVENT_RIVAL_NEW_BARK_TOWN
+	person_event SPRITE_TEACHER, 8, 6, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x1a806f, -1
+	person_event SPRITE_FISHER, 9, 12, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x1a809b, -1
+	person_event SPRITE_SILVER, 2, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SilverScript_0x1a809e, EVENT_RIVAL_NEW_BARK_TOWN
--- a/maps/OaksLab.asm
+++ b/maps/OaksLab.asm
@@ -283,7 +283,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_OAK, 2, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, Oak, -1
-	person_event SPRITE_SCIENTIST, 8, 1, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ScientistScript_0x19b40f, -1
-	person_event SPRITE_SCIENTIST, 9, 8, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ScientistScript_0x19b412, -1
-	person_event SPRITE_SCIENTIST, 4, 1, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ScientistScript_0x19b415, -1
+	person_event SPRITE_OAK, 2, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, Oak, -1
+	person_event SPRITE_SCIENTIST, 8, 1, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ScientistScript_0x19b40f, -1
+	person_event SPRITE_SCIENTIST, 9, 8, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ScientistScript_0x19b412, -1
+	person_event SPRITE_SCIENTIST, 4, 1, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ScientistScript_0x19b415, -1
--- a/maps/OlivineCafe.asm
+++ b/maps/OlivineCafe.asm
@@ -90,6 +90,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_SAILOR, 3, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, SailorScript_0x9c8c1, -1
-	person_event SPRITE_FISHING_GURU, 3, 7, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, 0, 0, FishingGuruScript_0x9c8d9, -1
-	person_event SPRITE_SAILOR, 6, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, SailorScript_0x9c8dc, -1
+	person_event SPRITE_SAILOR, 3, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x9c8c1, -1
+	person_event SPRITE_FISHING_GURU, 3, 7, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FishingGuruScript_0x9c8d9, -1
+	person_event SPRITE_SAILOR, 6, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x9c8dc, -1
--- a/maps/OlivineCity.asm
+++ b/maps/OlivineCity.asm
@@ -25,7 +25,7 @@
 UnknownScript_0x1a8833:
 	spriteface PLAYER, LEFT
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	playsound SFX_ENTER_DOOR
 	appear $5
@@ -49,7 +49,7 @@
 UnknownScript_0x1a886b:
 	spriteface PLAYER, LEFT
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	playsound SFX_ENTER_DOOR
 	appear $5
@@ -320,7 +320,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_SAILOR, 27, 26, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, 0, 0, SailorScript_0x1a88a3, -1
-	person_event SPRITE_STANDING_YOUNGSTER, 13, 20, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, StandingYoungsterScript_0x1a88a6, -1
-	person_event SPRITE_SAILOR, 21, 17, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, SailorScript_0x1a88ba, -1
-	person_event SPRITE_OLIVINE_RIVAL, 11, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_RIVAL_OLIVINE_CITY
+	person_event SPRITE_SAILOR, 27, 26, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x1a88a3, -1
+	person_event SPRITE_STANDING_YOUNGSTER, 13, 20, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, StandingYoungsterScript_0x1a88a6, -1
+	person_event SPRITE_SAILOR, 21, 17, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x1a88ba, -1
+	person_event SPRITE_OLIVINE_RIVAL, 11, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_RIVAL_OLIVINE_CITY
--- a/maps/OlivineGoodRodHouse.asm
+++ b/maps/OlivineGoodRodHouse.asm
@@ -96,4 +96,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_FISHING_GURU, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, GoodRodGuru, -1
+	person_event SPRITE_FISHING_GURU, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, GoodRodGuru, -1
--- a/maps/OlivineGym.asm
+++ b/maps/OlivineGym.asm
@@ -212,5 +212,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_JASMINE, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, JasmineScript_0x9c12f, EVENT_OLIVINE_GYM_JASMINE
-	person_event SPRITE_GYM_GUY, 13, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, OlivineGymGuyScript, -1
+	person_event SPRITE_JASMINE, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, JasmineScript_0x9c12f, EVENT_OLIVINE_GYM_JASMINE
+	person_event SPRITE_GYM_GUY, 13, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, OlivineGymGuyScript, -1
--- a/maps/OlivineHouseBeta.asm
+++ b/maps/OlivineHouseBeta.asm
@@ -54,5 +54,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_TEACHER, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, TeacherScript_0x9c58f, -1
-	person_event SPRITE_RHYDON, 4, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, 0, 0, 0, RhydonScript_0x9c592, -1
+	person_event SPRITE_TEACHER, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x9c58f, -1
+	person_event SPRITE_RHYDON, 4, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RhydonScript_0x9c592, -1
--- a/maps/OlivineLighthouse1F.asm
+++ b/maps/OlivineLighthouse1F.asm
@@ -52,5 +52,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_SAILOR, 2, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, SailorScript_0x5ae67, -1
-	person_event SPRITE_POKEFAN_F, 9, 16, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, 0, 0, 0, PokefanFScript_0x5ae6a, -1
+	person_event SPRITE_SAILOR, 2, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x5ae67, -1
+	person_event SPRITE_POKEFAN_F, 9, 16, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x5ae6a, -1
--- a/maps/OlivineLighthouse2F.asm
+++ b/maps/OlivineLighthouse2F.asm
@@ -221,5 +221,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_SAILOR, 3, 9, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerSailorHuey1, -1
-	person_event SPRITE_GENTLEMAN, 8, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerGentlemanAlfred, -1
+	person_event SPRITE_SAILOR, 3, 9, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerSailorHuey1, -1
+	person_event SPRITE_GENTLEMAN, 8, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerGentlemanAlfred, -1
--- a/maps/OlivineLighthouse3F.asm
+++ b/maps/OlivineLighthouse3F.asm
@@ -130,7 +130,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_SAILOR, 2, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerSailorTerrell, -1
-	person_event SPRITE_GENTLEMAN, 5, 13, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 4, TrainerGentlemanPreston, -1
-	person_event SPRITE_YOUNGSTER, 9, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerBird_keeperTheo, -1
-	person_event SPRITE_POKE_BALL, 2, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5b279, EVENT_OLIVINE_LIGHTHOUSE_3F_ETHER
+	person_event SPRITE_SAILOR, 2, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerSailorTerrell, -1
+	person_event SPRITE_GENTLEMAN, 5, 13, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 4, TrainerGentlemanPreston, -1
+	person_event SPRITE_YOUNGSTER, 9, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerBird_keeperTheo, -1
+	person_event SPRITE_POKE_BALL, 2, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5b279, EVENT_OLIVINE_LIGHTHOUSE_3F_ETHER
--- a/maps/OlivineLighthouse4F.asm
+++ b/maps/OlivineLighthouse4F.asm
@@ -102,5 +102,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_SAILOR, 14, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerSailorKent, -1
-	person_event SPRITE_LASS, 2, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerLassConnie, -1
+	person_event SPRITE_SAILOR, 14, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerSailorKent, -1
+	person_event SPRITE_LASS, 2, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerLassConnie, -1
--- a/maps/OlivineLighthouse5F.asm
+++ b/maps/OlivineLighthouse5F.asm
@@ -107,8 +107,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_SAILOR, 11, 8, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerSailorErnest, -1
-	person_event SPRITE_YOUNGSTER, 3, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 4, TrainerBird_keeperDenis, -1
-	person_event SPRITE_POKE_BALL, 12, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x609aa, EVENT_OLIVINE_LIGHTHOUSE_5F_RARE_CANDY
-	person_event SPRITE_POKE_BALL, 15, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x609ac, EVENT_OLIVINE_LIGHTHOUSE_5F_SUPER_REPEL
-	person_event SPRITE_POKE_BALL, 13, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x609ae, EVENT_OLIVINE_LIGHTHOUSE_5F_TM_SWAGGER
+	person_event SPRITE_SAILOR, 11, 8, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerSailorErnest, -1
+	person_event SPRITE_YOUNGSTER, 3, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 4, TrainerBird_keeperDenis, -1
+	person_event SPRITE_POKE_BALL, 12, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x609aa, EVENT_OLIVINE_LIGHTHOUSE_5F_RARE_CANDY
+	person_event SPRITE_POKE_BALL, 15, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x609ac, EVENT_OLIVINE_LIGHTHOUSE_5F_SUPER_REPEL
+	person_event SPRITE_POKE_BALL, 13, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x609ae, EVENT_OLIVINE_LIGHTHOUSE_5F_TM_SWAGGER
--- a/maps/OlivineLighthouse6F.asm
+++ b/maps/OlivineLighthouse6F.asm
@@ -270,6 +270,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_JASMINE, 8, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, JasmineScript_0x60b91, EVENT_OLIVINE_LIGHTHOUSE_JASMINE
-	person_event SPRITE_MONSTER, 8, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, MonsterScript_0x60c3a, -1
-	person_event SPRITE_POKE_BALL, 4, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x60c66, EVENT_OLIVINE_LIGHTHOUSE_6F_SUPER_POTION
+	person_event SPRITE_JASMINE, 8, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, JasmineScript_0x60b91, EVENT_OLIVINE_LIGHTHOUSE_JASMINE
+	person_event SPRITE_MONSTER, 8, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, MonsterScript_0x60c3a, -1
+	person_event SPRITE_POKE_BALL, 4, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x60c66, EVENT_OLIVINE_LIGHTHOUSE_6F_SUPER_POTION
--- a/maps/OlivineMart.asm
+++ b/maps/OlivineMart.asm
@@ -57,6 +57,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x9cac7, -1
-	person_event SPRITE_COOLTRAINER_F, 2, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerFScript_0x9cace, -1
-	person_event SPRITE_LASS, 6, 1, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, LassScript_0x9cad1, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x9cac7, -1
+	person_event SPRITE_COOLTRAINER_F, 2, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x9cace, -1
+	person_event SPRITE_LASS, 6, 1, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x9cad1, -1
--- a/maps/OlivinePokeCenter1F.asm
+++ b/maps/OlivinePokeCenter1F.asm
@@ -59,7 +59,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x9c002, -1
-	person_event SPRITE_FISHING_GURU, 4, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, FishingGuruScript_0x9c005, -1
-	person_event SPRITE_FISHER, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x9c008, -1
-	person_event SPRITE_TEACHER, 1, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, TeacherScript_0x9c00b, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x9c002, -1
+	person_event SPRITE_FISHING_GURU, 4, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FishingGuruScript_0x9c005, -1
+	person_event SPRITE_FISHER, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x9c008, -1
+	person_event SPRITE_TEACHER, 1, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x9c00b, -1
--- a/maps/OlivinePort.asm
+++ b/maps/OlivinePort.asm
@@ -397,10 +397,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_SAILOR, 23, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, SailorScript_0x748c0, EVENT_OLIVINE_PORT_SAILOR_AT_GANGWAY
-	person_event SPRITE_SAILOR, 15, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, SailorScript_0x749fe, EVENT_OLIVINE_PORT_SPRITES_BEFORE_HALL_OF_FAME
-	person_event SPRITE_SAILOR, 15, 6, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, SailorScript_0x7499c, EVENT_OLIVINE_PORT_SPRITES_AFTER_HALL_OF_FAME
-	person_event SPRITE_FISHING_GURU, 14, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, FishingGuruScript_0x74a01, EVENT_OLIVINE_PORT_SPRITES_BEFORE_HALL_OF_FAME
-	person_event SPRITE_FISHING_GURU, 14, 13, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, FishingGuruScript_0x74a0c, EVENT_OLIVINE_PORT_SPRITES_BEFORE_HALL_OF_FAME
-	person_event SPRITE_YOUNGSTER, 15, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, YoungsterScript_0x74a17, EVENT_OLIVINE_PORT_SPRITES_AFTER_HALL_OF_FAME
-	person_event SPRITE_COOLTRAINER_F, 15, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, CooltrainerFScript_0x74a22, EVENT_OLIVINE_PORT_SPRITES_AFTER_HALL_OF_FAME
+	person_event SPRITE_SAILOR, 23, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x748c0, EVENT_OLIVINE_PORT_SAILOR_AT_GANGWAY
+	person_event SPRITE_SAILOR, 15, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x749fe, EVENT_OLIVINE_PORT_SPRITES_BEFORE_HALL_OF_FAME
+	person_event SPRITE_SAILOR, 15, 6, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x7499c, EVENT_OLIVINE_PORT_SPRITES_AFTER_HALL_OF_FAME
+	person_event SPRITE_FISHING_GURU, 14, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FishingGuruScript_0x74a01, EVENT_OLIVINE_PORT_SPRITES_BEFORE_HALL_OF_FAME
+	person_event SPRITE_FISHING_GURU, 14, 13, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FishingGuruScript_0x74a0c, EVENT_OLIVINE_PORT_SPRITES_BEFORE_HALL_OF_FAME
+	person_event SPRITE_YOUNGSTER, 15, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x74a17, EVENT_OLIVINE_PORT_SPRITES_AFTER_HALL_OF_FAME
+	person_event SPRITE_COOLTRAINER_F, 15, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x74a22, EVENT_OLIVINE_PORT_SPRITES_AFTER_HALL_OF_FAME
--- a/maps/OlivinePortPassage.asm
+++ b/maps/OlivinePortPassage.asm
@@ -36,4 +36,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKEFAN_M, 1, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, PokefanMScript_0x76fac, EVENT_OLIVINE_PORT_PASSAGE_POKEFAN_M
+	person_event SPRITE_POKEFAN_M, 1, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x76fac, EVENT_OLIVINE_PORT_PASSAGE_POKEFAN_M
--- a/maps/OlivinePunishmentSpeechHouse.asm
+++ b/maps/OlivinePunishmentSpeechHouse.asm
@@ -54,5 +54,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_POKEFAN_M, 2, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, OlivinePunishmentSpeechHouseDad, -1
-	person_event SPRITE_LASS, 5, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, 0, 0, OlivinePunishmentSpeechHouseDaughter, -1
+	person_event SPRITE_POKEFAN_M, 2, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, OlivinePunishmentSpeechHouseDad, -1
+	person_event SPRITE_LASS, 5, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, OlivinePunishmentSpeechHouseDaughter, -1
--- a/maps/OlivineVoltorbHouse.asm
+++ b/maps/OlivineVoltorbHouse.asm
@@ -35,4 +35,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_FISHING_GURU, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, Tim, -1
+	person_event SPRITE_FISHING_GURU, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, Tim, -1
--- a/maps/PalletTown.asm
+++ b/maps/PalletTown.asm
@@ -89,5 +89,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_TEACHER, 8, 3, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, 0, 0, 0, TeacherScript_0x1ac6d5, -1
-	person_event SPRITE_FISHER, 14, 12, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x1ac6d8, -1
+	person_event SPRITE_TEACHER, 8, 3, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x1ac6d5, -1
+	person_event SPRITE_FISHER, 14, 12, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x1ac6d8, -1
--- a/maps/PewterCity.asm
+++ b/maps/PewterCity.asm
@@ -58,10 +58,10 @@
 	jumpstd martsign
 
 FruitTreeScript_0x18c03e:
-	fruittree $1c
+	fruittree FRUITTREE_PEWTER_CITY_1
 
 FruitTreeScript_0x18c040:
-	fruittree $1d
+	fruittree FRUITTREE_PEWTER_CITY_2
 
 UnknownText_0x18c042:
 	text "Have you visited"
@@ -174,8 +174,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_COOLTRAINER_F, 11, 19, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerFScript_0x18c009, -1
-	person_event SPRITE_BUG_CATCHER, 29, 14, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, BugCatcherScript_0x18c00c, -1
-	person_event SPRITE_GRAMPS, 17, 29, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GrampsScript_0x18c00f, -1
-	person_event SPRITE_FRUIT_TREE, 3, 32, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x18c03e, -1
-	person_event SPRITE_FRUIT_TREE, 3, 30, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x18c040, -1
+	person_event SPRITE_COOLTRAINER_F, 11, 19, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x18c009, -1
+	person_event SPRITE_BUG_CATCHER, 29, 14, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, BugCatcherScript_0x18c00c, -1
+	person_event SPRITE_GRAMPS, 17, 29, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GrampsScript_0x18c00f, -1
+	person_event SPRITE_FRUIT_TREE, 3, 32, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x18c03e, -1
+	person_event SPRITE_FRUIT_TREE, 3, 30, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x18c040, -1
--- a/maps/PewterGym.asm
+++ b/maps/PewterGym.asm
@@ -222,6 +222,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_BROCK, 1, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, BrockScript_0x1a2864, -1
-	person_event SPRITE_YOUNGSTER, 5, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerCamperJerry, -1
-	person_event SPRITE_GYM_GUY, 11, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 1, PewterGymGuyScript, -1
+	person_event SPRITE_BROCK, 1, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, BrockScript_0x1a2864, -1
+	person_event SPRITE_YOUNGSTER, 5, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerCamperJerry, -1
+	person_event SPRITE_GYM_GUY, 11, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 1, PewterGymGuyScript, -1
--- a/maps/PewterMart.asm
+++ b/maps/PewterMart.asm
@@ -57,6 +57,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x1a2dcb, -1
-	person_event SPRITE_YOUNGSTER, 2, 9, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, 0, 0, YoungsterScript_0x1a2dd2, -1
-	person_event SPRITE_SUPER_NERD, 6, 6, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SuperNerdScript_0x1a2dd5, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x1a2dcb, -1
+	person_event SPRITE_YOUNGSTER, 2, 9, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1a2dd2, -1
+	person_event SPRITE_SUPER_NERD, 6, 6, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x1a2dd5, -1
--- a/maps/PewterNidoranSpeechHouse.asm
+++ b/maps/PewterNidoranSpeechHouse.asm
@@ -41,5 +41,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_SUPER_NERD, 5, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, SuperNerdScript_0x1a2807, -1
-	person_event SPRITE_GROWLITHE, 5, 4, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GrowlitheScript_0x1a280a, -1
+	person_event SPRITE_SUPER_NERD, 5, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x1a2807, -1
+	person_event SPRITE_GROWLITHE, 5, 4, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GrowlitheScript_0x1a280a, -1
--- a/maps/PewterPokeCenter1F.asm
+++ b/maps/PewterPokeCenter1F.asm
@@ -78,8 +78,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x1a2ee7, -1
-	person_event SPRITE_TEACHER, 6, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TeacherScript_0x1a2eea, -1
-	person_event SPRITE_JIGGLYPUFF, 3, 1, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, JigglypuffScript_0x1a2eed, -1
-	person_event SPRITE_BUG_CATCHER, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, BugCatcherScript_0x1a2ef7, -1
-	person_event SPRITE_POKEFAN_M, 2, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanMScript_0x1a2efa, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x1a2ee7, -1
+	person_event SPRITE_TEACHER, 6, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TeacherScript_0x1a2eea, -1
+	person_event SPRITE_JIGGLYPUFF, 3, 1, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, JigglypuffScript_0x1a2eed, -1
+	person_event SPRITE_BUG_CATCHER, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, BugCatcherScript_0x1a2ef7, -1
+	person_event SPRITE_POKEFAN_M, 2, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x1a2efa, -1
--- a/maps/PewterSnoozeSpeechHouse.asm
+++ b/maps/PewterSnoozeSpeechHouse.asm
@@ -36,4 +36,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_GRAMPS, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GrampsScript_0x1a3059, -1
+	person_event SPRITE_GRAMPS, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1a3059, -1
--- a/maps/PokeCenter2F.asm
+++ b/maps/PokeCenter2F.asm
@@ -72,10 +72,10 @@
 	writetext Text_TradeReceptionistIntro
 	yesorno
 	iffalse .Cancel
-	special Function10630f
+	special Mobile_DummyReturnFalse ; always returns false
 	iffalse .NoMobile
 	writetext Text_TradeReceptionistMobile
-	special Function103612
+	special AskMobileOrCable
 	iffalse .Cancel
 	if_equal $1, .Mobile
 .NoMobile:
@@ -91,7 +91,7 @@
 	writetext Text_PleaseWait
 	special Special_CheckLinkTimeout
 	iffalse .LinkTimedOut
-	copybytetovar wcf51
+	copybytetovar wOtherPlayerLinkMode
 	iffalse .LinkedToFirstGen
 	special Special_CheckBothSelectedSameRoom
 	iffalse .IncompatibleRooms
@@ -174,10 +174,10 @@
 	writetext Text_BattleReceptionistIntro
 	yesorno
 	iffalse .Cancel
-	special Function10630f
+	special Mobile_DummyReturnFalse ; always returns false
 	iffalse .NoMobile
 	writetext Text_BattleReceptionistMobile
-	special Function103612
+	special AskMobileOrCable
 	iffalse .Cancel
 	if_equal $1, .Mobile
 .NoMobile:
@@ -193,7 +193,7 @@
 	writetext Text_PleaseWait
 	special Special_CheckLinkTimeout
 	iffalse .LinkTimedOut
-	copybytetovar wcf51
+	copybytetovar wOtherPlayerLinkMode
 	iffalse .LinkedToFirstGen
 	special Special_CheckBothSelectedSameRoom
 	iffalse .IncompatibleRooms
@@ -320,7 +320,7 @@
 	writetext Text_PleaseWait
 	special Special_CheckLinkTimeout
 	iffalse .LinkTimedOut
-	copybytetovar wcf51
+	copybytetovar wOtherPlayerLinkMode
 	iffalse .OK
 	special Special_CheckBothSelectedSameRoom
 	writetext Text_IncompatibleRooms
@@ -431,8 +431,8 @@
 	loadmovesprites
 	playsound SFX_TINGLE
 	applymovement PLAYER, MovementData_0x192d17
-	writebyte $80
-	special Functionc225
+	writebyte (1 << 7) | (PAL_OW_RED << 4)
+	special Special_SetPlayerPalette
 	applymovement PLAYER, MovementData_0x192d1c
 	setflag ENGINE_KRIS_IN_CABLE_CLUB
 	special ReplaceKrisSprite
@@ -458,8 +458,8 @@
 	clearflag ENGINE_KRIS_IN_CABLE_CLUB
 	playsound SFX_TINGLE
 	applymovement PLAYER, MovementData_0x192d17
-	writebyte $90
-	special Functionc225
+	writebyte (1 << 7) | (PAL_OW_BLUE << 4)
+	special Special_SetPlayerPalette
 	applymovement PLAYER, MovementData_0x192d1c
 	special ReplaceKrisSprite
 	applymovement PLAYER, MovementData_0x192d2a
@@ -480,8 +480,8 @@
 	clearflag ENGINE_KRIS_IN_CABLE_CLUB
 	playsound SFX_TINGLE
 	applymovement PLAYER, MovementData_0x192d17
-	writebyte $90
-	special Functionc225
+	writebyte (1 << 7) | (PAL_OW_BLUE << 4)
+	special Special_SetPlayerPalette
 	applymovement PLAYER, MovementData_0x192d1c
 	special ReplaceKrisSprite
 	applymovement PLAYER, MovementData_0x192d2a
@@ -539,8 +539,8 @@
 	loadmovesprites
 	playsound SFX_TINGLE
 	applymovement PLAYER, MovementData_0x192d17
-	writebyte $80
-	special Functionc225
+	writebyte (1 << 7) | (PAL_OW_RED << 4)
+	special Special_SetPlayerPalette
 	applymovement PLAYER, MovementData_0x192d22
 	faceperson PLAYER, $4
 	setflag ENGINE_KRIS_IN_CABLE_CLUB
@@ -568,8 +568,8 @@
 	clearflag ENGINE_KRIS_IN_CABLE_CLUB
 	playsound SFX_TINGLE
 	applymovement PLAYER, MovementData_0x192d17
-	writebyte $90
-	special Functionc225
+	writebyte (1 << 7) | (PAL_OW_BLUE << 4)
+	special Special_SetPlayerPalette
 	applymovement PLAYER, MovementData_0x192d1c
 	special ReplaceKrisSprite
 	applymovement PLAYER, MovementData_0x192cfc
@@ -581,7 +581,7 @@
 
 MapPokeCenter2FSignpost0Script:
 	refreshscreen $0
-	special Functionc2da
+	special Special_DisplayLinkRecord
 	loadmovesprites
 	end
 
@@ -1040,7 +1040,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_LINK_RECEPTIONIST, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LinkReceptionistScript_Trade, -1
-	person_event SPRITE_LINK_RECEPTIONIST, 2, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LinkReceptionistScript_Battle, -1
-	person_event SPRITE_LINK_RECEPTIONIST, 3, 13, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LinkReceptionistScript_TimeCapsule, -1
-	person_event SPRITE_OFFICER, 1, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, OfficerScript_0x192c9a, EVENT_MYSTERY_GIFT_DELIVERY_GUY
+	person_event SPRITE_LINK_RECEPTIONIST, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LinkReceptionistScript_Trade, -1
+	person_event SPRITE_LINK_RECEPTIONIST, 2, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LinkReceptionistScript_Battle, -1
+	person_event SPRITE_LINK_RECEPTIONIST, 3, 13, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LinkReceptionistScript_TimeCapsule, -1
+	person_event SPRITE_OFFICER, 1, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, OfficerScript_0x192c9a, EVENT_MYSTERY_GIFT_DELIVERY_GUY
--- a/maps/PokeSeersHouse.asm
+++ b/maps/PokeSeersHouse.asm
@@ -30,4 +30,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_GRANNY, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SeerScript, -1
+	person_event SPRITE_GRANNY, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SeerScript, -1
--- a/maps/PokemonFanClub.asm
+++ b/maps/PokemonFanClub.asm
@@ -307,9 +307,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_GENTLEMAN, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, GentlemanScript_0x1917e9, -1
-	person_event SPRITE_RECEPTIONIST, 1, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ReceptionistScript_0x191821, -1
-	person_event SPRITE_FISHER, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, FisherScript_0x191824, -1
-	person_event SPRITE_TEACHER, 2, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, TeacherScript_0x19186b, -1
-	person_event SPRITE_FAIRY, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, FairyScript_0x19186e, EVENT_VERMILION_FAN_CLUB_DOLL
-	person_event SPRITE_ODDISH, 3, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, OddishScript_0x191871, -1
+	person_event SPRITE_GENTLEMAN, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x1917e9, -1
+	person_event SPRITE_RECEPTIONIST, 1, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x191821, -1
+	person_event SPRITE_FISHER, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FisherScript_0x191824, -1
+	person_event SPRITE_TEACHER, 2, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x19186b, -1
+	person_event SPRITE_FAIRY, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FairyScript_0x19186e, EVENT_VERMILION_FAN_CLUB_DOLL
+	person_event SPRITE_ODDISH, 3, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, OddishScript_0x191871, -1
--- a/maps/PowerPlant.asm
+++ b/maps/PowerPlant.asm
@@ -401,10 +401,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_OFFICER, 14, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, OfficerScript_0x188df5, -1
-	person_event SPRITE_GYM_GUY, 9, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GymGuyScript_0x188e15, -1
-	person_event SPRITE_GYM_GUY, 11, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GymGuyScript_0x188e29, -1
-	person_event SPRITE_OFFICER, 3, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, OfficerScript_0x188e3d, -1
-	person_event SPRITE_GYM_GUY, 2, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GymGuyScript_0x188e51, -1
-	person_event SPRITE_FISHER, 10, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PowerPlantManager, -1
-	person_event SPRITE_GYM_GUY, 5, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GymGuyScript_0x188ecb, -1
+	person_event SPRITE_OFFICER, 14, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, OfficerScript_0x188df5, -1
+	person_event SPRITE_GYM_GUY, 9, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GymGuyScript_0x188e15, -1
+	person_event SPRITE_GYM_GUY, 11, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GymGuyScript_0x188e29, -1
+	person_event SPRITE_OFFICER, 3, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, OfficerScript_0x188e3d, -1
+	person_event SPRITE_GYM_GUY, 2, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GymGuyScript_0x188e51, -1
+	person_event SPRITE_FISHER, 10, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PowerPlantManager, -1
+	person_event SPRITE_GYM_GUY, 5, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GymGuyScript_0x188ecb, -1
--- a/maps/RadioTower1F.asm
+++ b/maps/RadioTower1F.asm
@@ -484,9 +484,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_RECEPTIONIST, 6, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ReceptionistScript_0x5cd29, -1
-	person_event SPRITE_LASS, 4, 16, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, LassScript_0x5ce51, EVENT_GOLDENROD_CITY_CIVILIANS
-	person_event SPRITE_YOUNGSTER, 4, 15, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, YoungsterScript_0x5ce54, EVENT_GOLDENROD_CITY_CIVILIANS
-	person_event SPRITE_ROCKET, 1, 14, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM3, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_GENTLEMAN, 6, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GentlemanScript_0x5cd3d, EVENT_GOLDENROD_CITY_CIVILIANS
-	person_event SPRITE_COOLTRAINER_F, 6, 12, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerFScript_0x5cdd5, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_RECEPTIONIST, 6, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x5cd29, -1
+	person_event SPRITE_LASS, 4, 16, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, LassScript_0x5ce51, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_YOUNGSTER, 4, 15, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x5ce54, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_ROCKET, 1, 14, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM3, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_GENTLEMAN, 6, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x5cd3d, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_COOLTRAINER_F, 6, 12, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x5cdd5, EVENT_GOLDENROD_CITY_CIVILIANS
--- a/maps/RadioTower2F.asm
+++ b/maps/RadioTower2F.asm
@@ -104,7 +104,7 @@
 	if_equal 30, UnknownScript_0x5d87f
 	playmusic MUSIC_BUENAS_PASSWORD
 	writetext UnknownText_0x5de35
-	special Function4ae12
+	special AskRememberPassword
 	iffalse UnknownScript_0x5d81e
 	writetext UnknownText_0x5de84
 	closetext
@@ -140,7 +140,7 @@
 	writetext UnknownText_0x5e054
 	closetext
 	loadmovesprites
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 20
 	special RestartMapMusic
 	checkcode VAR_BLUECARDBALANCE
@@ -169,7 +169,7 @@
 	closetext
 	loadmovesprites
 	spriteface $b, RIGHT
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 20
 	special RestartMapMusic
 	end
@@ -200,7 +200,7 @@
 	closetext
 	loadmovesprites
 	spriteface $b, RIGHT
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 20
 	special RestartMapMusic
 	end
@@ -720,14 +720,14 @@
 
 .PersonEvents:
 	db 11
-	person_event SPRITE_SUPER_NERD, 6, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, SuperNerdScript_0x5d6fe, EVENT_GOLDENROD_CITY_CIVILIANS
-	person_event SPRITE_TEACHER, 2, 17, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, TeacherScript_0x5d701, -1
-	person_event SPRITE_ROCKET, 4, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM4, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 4, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM5, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 1, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 2, 2, TrainerGruntM6, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET_GIRL, 5, 10, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerGruntF2, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_BLACK_BELT, 1, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, BlackBeltScript_0x5d71f, EVENT_RADIO_TOWER_BLACKBELT_BLOCKS_STAIRS
-	person_event SPRITE_BLACK_BELT, 1, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, BlackBeltScript_0x5d722, EVENT_RADIO_TOWER_CIVILIANS_AFTER
-	person_event SPRITE_JIGGLYPUFF, 1, 12, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, JigglypuffScript_0x5d715, -1
-	person_event SPRITE_BUENA, 5, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, Buena, -1
-	person_event SPRITE_RECEPTIONIST, 7, 12, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ReceptionistScript_0x5d8ff, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_SUPER_NERD, 6, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x5d6fe, EVENT_GOLDENROD_CITY_CIVILIANS
+	person_event SPRITE_TEACHER, 2, 17, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, TeacherScript_0x5d701, -1
+	person_event SPRITE_ROCKET, 4, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM4, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 4, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM5, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 1, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 2, TrainerGruntM6, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET_GIRL, 5, 10, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerGruntF2, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_BLACK_BELT, 1, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x5d71f, EVENT_RADIO_TOWER_BLACKBELT_BLOCKS_STAIRS
+	person_event SPRITE_BLACK_BELT, 1, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x5d722, EVENT_RADIO_TOWER_CIVILIANS_AFTER
+	person_event SPRITE_JIGGLYPUFF, 1, 12, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, JigglypuffScript_0x5d715, -1
+	person_event SPRITE_BUENA, 5, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, Buena, -1
+	person_event SPRITE_RECEPTIONIST, 7, 12, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x5d8ff, EVENT_GOLDENROD_CITY_CIVILIANS
--- a/maps/RadioTower3F.asm
+++ b/maps/RadioTower3F.asm
@@ -343,10 +343,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_SUPER_NERD, 4, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SuperNerdScript_0x5e553, EVENT_RADIO_TOWER_CIVILIANS_AFTER
-	person_event SPRITE_GYM_GUY, 4, 3, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, GymGuyScript_0x5e556, -1
-	person_event SPRITE_COOLTRAINER_F, 3, 11, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerFScript_0x5e56a, -1
-	person_event SPRITE_ROCKET, 1, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 2, 2, TrainerGruntM7, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 2, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM8, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 6, 16, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM9, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_SCIENTIST, 6, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 5, TrainerScientistMarc, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_SUPER_NERD, 4, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x5e553, EVENT_RADIO_TOWER_CIVILIANS_AFTER
+	person_event SPRITE_GYM_GUY, 4, 3, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, GymGuyScript_0x5e556, -1
+	person_event SPRITE_COOLTRAINER_F, 3, 11, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x5e56a, -1
+	person_event SPRITE_ROCKET, 1, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 2, TrainerGruntM7, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 2, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM8, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 6, 16, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM9, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_SCIENTIST, 6, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 5, TrainerScientistMarc, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
--- a/maps/RadioTower4F.asm
+++ b/maps/RadioTower4F.asm
@@ -257,10 +257,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_FISHER, 4, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, FisherScript_0x5eb82, EVENT_RADIO_TOWER_CIVILIANS_AFTER
-	person_event SPRITE_TEACHER, 6, 14, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TeacherScript_0x5eb85, -1
-	person_event SPRITE_GROWLITHE, 7, 12, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, GrowlitheScript_0x5ebb2, -1
-	person_event SPRITE_ROCKET, 6, 5, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM10, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 1, 14, SPRITEMOVEDATA_STANDING_LEFT, 0, 2, -1, -1, 0, 2, 2, TrainerExecutivem2, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET_GIRL, 4, 12, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerGruntF4, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_SCIENTIST, 2, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 4, TrainerScientistRich, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_FISHER, 4, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, FisherScript_0x5eb82, EVENT_RADIO_TOWER_CIVILIANS_AFTER
+	person_event SPRITE_TEACHER, 6, 14, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TeacherScript_0x5eb85, -1
+	person_event SPRITE_GROWLITHE, 7, 12, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, GrowlitheScript_0x5ebb2, -1
+	person_event SPRITE_ROCKET, 6, 5, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM10, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 1, 14, SPRITEMOVEDATA_STANDING_LEFT, 0, 2, -1, -1, 0, PERSONTYPE_TRAINER, 2, TrainerExecutivem2, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET_GIRL, 4, 12, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerGruntF4, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_SCIENTIST, 2, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 4, TrainerScientistRich, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
--- a/maps/RadioTower5F.asm
+++ b/maps/RadioTower5F.asm
@@ -439,8 +439,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_GENTLEMAN, 6, 3, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, Director, -1
-	person_event SPRITE_ROCKET, 5, 13, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET_GIRL, 2, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerExecutivef1, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKER, 5, 13, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, Ben, EVENT_RADIO_TOWER_CIVILIANS_AFTER
-	person_event SPRITE_POKE_BALL, 5, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x600fe, EVENT_RADIO_TOWER_5F_ULTRA_BALL
+	person_event SPRITE_GENTLEMAN, 6, 3, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, Director, -1
+	person_event SPRITE_ROCKET, 5, 13, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET_GIRL, 2, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerExecutivef1, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKER, 5, 13, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, Ben, EVENT_RADIO_TOWER_CIVILIANS_AFTER
+	person_event SPRITE_POKE_BALL, 5, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x600fe, EVENT_RADIO_TOWER_5F_ULTRA_BALL
--- a/maps/RedsHouse1F.asm
+++ b/maps/RedsHouse1F.asm
@@ -94,4 +94,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_REDS_MOM, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, RedsMom, -1
+	person_event SPRITE_REDS_MOM, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RedsMom, -1
--- a/maps/RockTunnel1F.asm
+++ b/maps/RockTunnel1F.asm
@@ -42,5 +42,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_POKE_BALL, 18, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x743b5, EVENT_ROCK_TUNNEL_1F_ELIXER
-	person_event SPRITE_POKE_BALL, 15, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x743b7, EVENT_ROCK_TUNNEL_1F_TM_STEEL_WING
+	person_event SPRITE_POKE_BALL, 18, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x743b5, EVENT_ROCK_TUNNEL_1F_ELIXER
+	person_event SPRITE_POKE_BALL, 15, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x743b7, EVENT_ROCK_TUNNEL_1F_TM_STEEL_WING
--- a/maps/RockTunnelB1F.asm
+++ b/maps/RockTunnelB1F.asm
@@ -38,6 +38,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_POKE_BALL, 25, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x74409, EVENT_ROCK_TUNNEL_B1F_IRON
-	person_event SPRITE_POKE_BALL, 17, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7440b, EVENT_ROCK_TUNNEL_B1F_PP_UP
-	person_event SPRITE_POKE_BALL, 2, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7440d, EVENT_ROCK_TUNNEL_B1F_REVIVE
+	person_event SPRITE_POKE_BALL, 25, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x74409, EVENT_ROCK_TUNNEL_B1F_IRON
+	person_event SPRITE_POKE_BALL, 17, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7440b, EVENT_ROCK_TUNNEL_B1F_PP_UP
+	person_event SPRITE_POKE_BALL, 2, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7440d, EVENT_ROCK_TUNNEL_B1F_REVIVE
--- a/maps/Route1.asm
+++ b/maps/Route1.asm
@@ -31,7 +31,7 @@
 	jumptext UnknownText_0x1ac675
 
 FruitTreeScript_0x1ac581:
-	fruittree $1a
+	fruittree FRUITTREE_ROUTE_1
 
 SchoolboyDannySeenText:
 	text "If trainers meet,"
@@ -91,6 +91,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_YOUNGSTER, 12, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 4, TrainerSchoolboyDanny, -1
-	person_event SPRITE_COOLTRAINER_F, 25, 9, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 2, TrainerCooltrainerfQuinn, -1
-	person_event SPRITE_FRUIT_TREE, 7, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1ac581, -1
+	person_event SPRITE_YOUNGSTER, 12, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 4, TrainerSchoolboyDanny, -1
+	person_event SPRITE_COOLTRAINER_F, 25, 9, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 2, TrainerCooltrainerfQuinn, -1
+	person_event SPRITE_FRUIT_TREE, 7, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1ac581, -1
--- a/maps/Route10PokeCenter1F.asm
+++ b/maps/Route10PokeCenter1F.asm
@@ -92,7 +92,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x188bd4, -1
-	person_event SPRITE_GENTLEMAN, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, GentlemanScript_0x188bd7, -1
-	person_event SPRITE_GYM_GUY, 2, 7, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, GymGuyScript_0x188bda, -1
-	person_event SPRITE_COOLTRAINER_F, 3, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, CooltrainerFScript_0x188bee, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x188bd4, -1
+	person_event SPRITE_GENTLEMAN, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x188bd7, -1
+	person_event SPRITE_GYM_GUY, 2, 7, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, GymGuyScript_0x188bda, -1
+	person_event SPRITE_COOLTRAINER_F, 3, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x188bee, -1
--- a/maps/Route10South.asm
+++ b/maps/Route10South.asm
@@ -88,5 +88,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_POKEFAN_M, 3, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerHikerJim, -1
-	person_event SPRITE_POKEFAN_M, 10, 8, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerPokefanmRobert, -1
+	person_event SPRITE_POKEFAN_M, 3, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerHikerJim, -1
+	person_event SPRITE_POKEFAN_M, 10, 8, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerPokefanmRobert, -1
--- a/maps/Route11.asm
+++ b/maps/Route11.asm
@@ -53,7 +53,7 @@
 	jumptext UnknownText_0x68238
 
 FruitTreeScript_0x68055:
-	fruittree $18
+	fruittree FRUITTREE_ROUTE_11
 
 MapRoute11SignpostItem1:
 	dwb EVENT_ROUTE_11_HIDDEN_REVIVE, REVIVE
@@ -156,8 +156,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_YOUNGSTER, 14, 22, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerYoungsterOwen, -1
-	person_event SPRITE_YOUNGSTER, 4, 20, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerYoungsterJason, -1
-	person_event SPRITE_YOUNGSTER, 7, 28, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerPsychicHerman, -1
-	person_event SPRITE_YOUNGSTER, 6, 8, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPsychicFidel, -1
-	person_event SPRITE_FRUIT_TREE, 2, 32, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x68055, -1
+	person_event SPRITE_YOUNGSTER, 14, 22, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerYoungsterOwen, -1
+	person_event SPRITE_YOUNGSTER, 4, 20, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerYoungsterJason, -1
+	person_event SPRITE_YOUNGSTER, 7, 28, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerPsychicHerman, -1
+	person_event SPRITE_YOUNGSTER, 6, 8, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPsychicFidel, -1
+	person_event SPRITE_FRUIT_TREE, 2, 32, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x68055, -1
--- a/maps/Route12.asm
+++ b/maps/Route12.asm
@@ -178,9 +178,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_FISHER, 13, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerFisherMartin, -1
-	person_event SPRITE_FISHER, 23, 14, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerFisherStephen, -1
-	person_event SPRITE_FISHER, 38, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 5, TrainerFisherBarney, -1
-	person_event SPRITE_FISHER, 7, 6, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerFisherKyle, -1
-	person_event SPRITE_POKE_BALL, 43, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a700b, EVENT_ROUTE_12_CALCIUM
-	person_event SPRITE_POKE_BALL, 51, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a700d, EVENT_ROUTE_12_NUGGET
+	person_event SPRITE_FISHER, 13, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerFisherMartin, -1
+	person_event SPRITE_FISHER, 23, 14, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerFisherStephen, -1
+	person_event SPRITE_FISHER, 38, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 5, TrainerFisherBarney, -1
+	person_event SPRITE_FISHER, 7, 6, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerFisherKyle, -1
+	person_event SPRITE_POKE_BALL, 43, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a700b, EVENT_ROUTE_12_CALCIUM
+	person_event SPRITE_POKE_BALL, 51, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a700d, EVENT_ROUTE_12_NUGGET
--- a/maps/Route12SuperRodHouse.asm
+++ b/maps/Route12SuperRodHouse.asm
@@ -93,4 +93,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_FISHING_GURU, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, FishingGuruScript_0x7f484, -1
+	person_event SPRITE_FISHING_GURU, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, FishingGuruScript_0x7f484, -1
--- a/maps/Route13.asm
+++ b/maps/Route13.asm
@@ -204,8 +204,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_YOUNGSTER, 6, 42, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerBird_keeperPerry, -1
-	person_event SPRITE_YOUNGSTER, 6, 43, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerBird_keeperBret, -1
-	person_event SPRITE_POKEFAN_M, 8, 32, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerPokefanmJoshua, -1
-	person_event SPRITE_POKEFAN_M, 10, 14, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerHikerKenny, -1
-	person_event SPRITE_POKEFAN_M, 6, 25, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerPokefanmAlex, -1
+	person_event SPRITE_YOUNGSTER, 6, 42, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerBird_keeperPerry, -1
+	person_event SPRITE_YOUNGSTER, 6, 43, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerBird_keeperBret, -1
+	person_event SPRITE_POKEFAN_M, 8, 32, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerPokefanmJoshua, -1
+	person_event SPRITE_POKEFAN_M, 10, 14, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerHikerKenny, -1
+	person_event SPRITE_POKEFAN_M, 6, 25, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerPokefanmAlex, -1
--- a/maps/Route14.asm
+++ b/maps/Route14.asm
@@ -124,7 +124,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_POKEFAN_M, 15, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerPokefanmCarter, -1
-	person_event SPRITE_YOUNGSTER, 27, 11, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerBird_keeperRoy, -1
-	person_event SPRITE_POKEFAN_M, 11, 6, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerPokefanmTrevor, -1
-	person_event SPRITE_TEACHER, 5, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 4, TeacherScript_0x1ad47f, -1
+	person_event SPRITE_POKEFAN_M, 15, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerPokefanmCarter, -1
+	person_event SPRITE_YOUNGSTER, 27, 11, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerBird_keeperRoy, -1
+	person_event SPRITE_POKEFAN_M, 11, 6, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerPokefanmTrevor, -1
+	person_event SPRITE_TEACHER, 5, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 4, TeacherScript_0x1ad47f, -1
--- a/maps/Route15.asm
+++ b/maps/Route15.asm
@@ -210,10 +210,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_YOUNGSTER, 10, 10, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 4, TrainerSchoolboyKipp, -1
-	person_event SPRITE_YOUNGSTER, 13, 15, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerSchoolboyTommy, -1
-	person_event SPRITE_YOUNGSTER, 10, 33, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerSchoolboyJohnny, -1
-	person_event SPRITE_YOUNGSTER, 10, 27, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerSchoolboyBilly, -1
-	person_event SPRITE_TEACHER, 12, 30, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerTeacherColette, -1
-	person_event SPRITE_TEACHER, 10, 20, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerTeacherHillary, -1
-	person_event SPRITE_POKE_BALL, 5, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1aa5e4, EVENT_ROUTE_15_PP_UP
+	person_event SPRITE_YOUNGSTER, 10, 10, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 4, TrainerSchoolboyKipp, -1
+	person_event SPRITE_YOUNGSTER, 13, 15, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerSchoolboyTommy, -1
+	person_event SPRITE_YOUNGSTER, 10, 33, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerSchoolboyJohnny, -1
+	person_event SPRITE_YOUNGSTER, 10, 27, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerSchoolboyBilly, -1
+	person_event SPRITE_TEACHER, 12, 30, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerTeacherColette, -1
+	person_event SPRITE_TEACHER, 10, 20, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerTeacherHillary, -1
+	person_event SPRITE_POKE_BALL, 5, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1aa5e4, EVENT_ROUTE_15_PP_UP
--- a/maps/Route15FuchsiaGate.asm
+++ b/maps/Route15FuchsiaGate.asm
@@ -35,4 +35,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, OfficerScript_0x19679e, -1
+	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, OfficerScript_0x19679e, -1
--- a/maps/Route16FuchsiaSpeechHouse.asm
+++ b/maps/Route16FuchsiaSpeechHouse.asm
@@ -38,4 +38,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_SUPER_NERD, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, SuperNerdScript_0x73373, -1
+	person_event SPRITE_SUPER_NERD, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x73373, -1
--- a/maps/Route16Gate.asm
+++ b/maps/Route16Gate.asm
@@ -80,4 +80,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, OfficerScript_0x733ea, -1
+	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, OfficerScript_0x733ea, -1
--- a/maps/Route17.asm
+++ b/maps/Route17.asm
@@ -150,7 +150,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_BIKER, 17, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 4, TrainerBikerRiley, -1
-	person_event SPRITE_BIKER, 68, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 1, TrainerBikerJoel, -1
-	person_event SPRITE_BIKER, 53, 3, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerBikerGlenn, -1
-	person_event SPRITE_BIKER, 80, 6, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 4, TrainerBikerCharles, -1
+	person_event SPRITE_BIKER, 17, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 4, TrainerBikerRiley, -1
+	person_event SPRITE_BIKER, 68, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 1, TrainerBikerJoel, -1
+	person_event SPRITE_BIKER, 53, 3, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerBikerGlenn, -1
+	person_event SPRITE_BIKER, 80, 6, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 4, TrainerBikerCharles, -1
--- a/maps/Route1718Gate.asm
+++ b/maps/Route1718Gate.asm
@@ -71,4 +71,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, OfficerScript_0x7360e, -1
+	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, OfficerScript_0x7360e, -1
--- a/maps/Route18.asm
+++ b/maps/Route18.asm
@@ -91,5 +91,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_YOUNGSTER, 12, 9, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerBird_keeperBoris, -1
-	person_event SPRITE_YOUNGSTER, 6, 13, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerBird_keeperBob, -1
+	person_event SPRITE_YOUNGSTER, 12, 9, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerBird_keeperBoris, -1
+	person_event SPRITE_YOUNGSTER, 6, 13, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerBird_keeperBob, -1
--- a/maps/Route19.asm
+++ b/maps/Route19.asm
@@ -247,9 +247,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_SWIMMER_GIRL, 23, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 0, TrainerSwimmerfDawn, -1
-	person_event SPRITE_SWIMMER_GUY, 28, 13, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerSwimmermHarold, -1
-	person_event SPRITE_SWIMMER_GUY, 17, 11, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerSwimmermJerome, -1
-	person_event SPRITE_SWIMMER_GUY, 23, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 0, TrainerSwimmermTucker, -1
-	person_event SPRITE_FISHER, 5, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 1, FisherScript_0x19ea4d, -1
-	person_event SPRITE_FISHER, 5, 11, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 1, FisherScript_0x19ea61, -1
+	person_event SPRITE_SWIMMER_GIRL, 23, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 0, TrainerSwimmerfDawn, -1
+	person_event SPRITE_SWIMMER_GUY, 28, 13, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerSwimmermHarold, -1
+	person_event SPRITE_SWIMMER_GUY, 17, 11, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerSwimmermJerome, -1
+	person_event SPRITE_SWIMMER_GUY, 23, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 0, TrainerSwimmermTucker, -1
+	person_event SPRITE_FISHER, 5, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 1, FisherScript_0x19ea4d, -1
+	person_event SPRITE_FISHER, 5, 11, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 1, FisherScript_0x19ea61, -1
--- a/maps/Route19FuchsiaGate.asm
+++ b/maps/Route19FuchsiaGate.asm
@@ -61,4 +61,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, OfficerScript_0x1ab3f6, -1
+	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, OfficerScript_0x1ab3f6, -1
--- a/maps/Route2.asm
+++ b/maps/Route2.asm
@@ -57,7 +57,7 @@
 	db ELIXER, 1
 
 FruitTreeScript_0x1ac306:
-	fruittree $19
+	fruittree FRUITTREE_ROUTE_2
 
 MapRoute2SignpostItem2:
 	dwb EVENT_ROUTE_2_HIDDEN_MAX_ETHER, MAX_ETHER
@@ -162,11 +162,11 @@
 
 .PersonEvents:
 	db 8
-	person_event SPRITE_BUG_CATCHER, 45, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 5, TrainerBug_catcherRob, -1
-	person_event SPRITE_BUG_CATCHER, 4, 6, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerBug_catcherEd, -1
-	person_event SPRITE_BUG_CATCHER, 40, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerBug_catcherDoug, -1
-	person_event SPRITE_POKE_BALL, 29, 0, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1ac2fe, EVENT_ROUTE_2_DIRE_HIT
-	person_event SPRITE_POKE_BALL, 23, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1ac300, EVENT_ROUTE_2_MAX_POTION
-	person_event SPRITE_POKE_BALL, 2, 19, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1ac302, EVENT_ROUTE_2_CARBOS
-	person_event SPRITE_POKE_BALL, 50, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1ac304, EVENT_ROUTE_2_ELIXER
-	person_event SPRITE_FRUIT_TREE, 14, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1ac306, -1
+	person_event SPRITE_BUG_CATCHER, 45, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 5, TrainerBug_catcherRob, -1
+	person_event SPRITE_BUG_CATCHER, 4, 6, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerBug_catcherEd, -1
+	person_event SPRITE_BUG_CATCHER, 40, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerBug_catcherDoug, -1
+	person_event SPRITE_POKE_BALL, 29, 0, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1ac2fe, EVENT_ROUTE_2_DIRE_HIT
+	person_event SPRITE_POKE_BALL, 23, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1ac300, EVENT_ROUTE_2_MAX_POTION
+	person_event SPRITE_POKE_BALL, 2, 19, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1ac302, EVENT_ROUTE_2_CARBOS
+	person_event SPRITE_POKE_BALL, 50, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1ac304, EVENT_ROUTE_2_ELIXER
+	person_event SPRITE_FRUIT_TREE, 14, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1ac306, -1
--- a/maps/Route20.asm
+++ b/maps/Route20.asm
@@ -127,6 +127,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_SWIMMER_GIRL, 8, 52, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerSwimmerfNicole, -1
-	person_event SPRITE_SWIMMER_GIRL, 13, 45, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerSwimmerfLori, -1
-	person_event SPRITE_SWIMMER_GUY, 13, 12, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerSwimmermCameron, -1
+	person_event SPRITE_SWIMMER_GIRL, 8, 52, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerSwimmerfNicole, -1
+	person_event SPRITE_SWIMMER_GIRL, 13, 45, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerSwimmerfLori, -1
+	person_event SPRITE_SWIMMER_GUY, 13, 12, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerSwimmermCameron, -1
--- a/maps/Route21.asm
+++ b/maps/Route21.asm
@@ -99,6 +99,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_SWIMMER_GIRL, 16, 11, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerSwimmerfNikki, -1
-	person_event SPRITE_SWIMMER_GUY, 30, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerSwimmermSeth, -1
-	person_event SPRITE_FISHER, 22, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerFisherArnold, -1
+	person_event SPRITE_SWIMMER_GIRL, 16, 11, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerSwimmerfNikki, -1
+	person_event SPRITE_SWIMMER_GUY, 30, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerSwimmermSeth, -1
+	person_event SPRITE_FISHER, 22, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerFisherArnold, -1
--- a/maps/Route24.asm
+++ b/maps/Route24.asm
@@ -21,7 +21,7 @@
 	loadfont
 	writetext UnknownText_0x1addc0
 	keeptextopen
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	writetext UnknownText_0x1adee1
 	closetext
 	loadmovesprites
@@ -130,4 +130,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_ROCKET, 7, 8, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, RocketScript_0x1adbfa, EVENT_ROUTE_24_ROCKET
+	person_event SPRITE_ROCKET, 7, 8, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RocketScript_0x1adbfa, EVENT_ROUTE_24_ROCKET
--- a/maps/Route25.asm
+++ b/maps/Route25.asm
@@ -439,14 +439,14 @@
 
 .PersonEvents:
 	db 11
-	person_event SPRITE_MISTY, 9, 46, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ObjectEvent, EVENT_ROUTE_25_MISTY_BOYFRIEND
-	person_event SPRITE_COOLTRAINER_M, 10, 46, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ObjectEvent, EVENT_ROUTE_25_MISTY_BOYFRIEND
-	person_event SPRITE_YOUNGSTER, 8, 12, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerSchoolboyDudley, -1
-	person_event SPRITE_LASS, 11, 16, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerLassEllen, -1
-	person_event SPRITE_YOUNGSTER, 8, 21, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerSchoolboyJoe, -1
-	person_event SPRITE_LASS, 6, 22, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerLassLaura, -1
-	person_event SPRITE_YOUNGSTER, 4, 25, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 2, TrainerCamperLloyd, -1
-	person_event SPRITE_LASS, 11, 28, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerLassShannon, -1
-	person_event SPRITE_SUPER_NERD, 7, 31, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 1, TrainerSupernerdPat, -1
-	person_event SPRITE_COOLTRAINER_M, 8, 37, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerMScript_0x19efac, -1
-	person_event SPRITE_POKE_BALL, 4, 32, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x19efe3, EVENT_ROUTE_25_PROTEIN
+	person_event SPRITE_MISTY, 9, 46, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_ROUTE_25_MISTY_BOYFRIEND
+	person_event SPRITE_COOLTRAINER_M, 10, 46, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_ROUTE_25_MISTY_BOYFRIEND
+	person_event SPRITE_YOUNGSTER, 8, 12, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerSchoolboyDudley, -1
+	person_event SPRITE_LASS, 11, 16, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerLassEllen, -1
+	person_event SPRITE_YOUNGSTER, 8, 21, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerSchoolboyJoe, -1
+	person_event SPRITE_LASS, 6, 22, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerLassLaura, -1
+	person_event SPRITE_YOUNGSTER, 4, 25, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 2, TrainerCamperLloyd, -1
+	person_event SPRITE_LASS, 11, 28, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerLassShannon, -1
+	person_event SPRITE_SUPER_NERD, 7, 31, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 1, TrainerSupernerdPat, -1
+	person_event SPRITE_COOLTRAINER_M, 8, 37, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x19efac, -1
+	person_event SPRITE_POKE_BALL, 4, 32, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x19efe3, EVENT_ROUTE_25_PROTEIN
--- a/maps/Route26.asm
+++ b/maps/Route26.asm
@@ -239,7 +239,7 @@
 	jumptext UnknownText_0x1a5364
 
 FruitTreeScript_0x1a4ec2:
-	fruittree $e
+	fruittree FRUITTREE_ROUTE_26
 
 ItemFragment_0x1a4ec4:
 	db MAX_ELIXER, 1
@@ -421,11 +421,11 @@
 
 .PersonEvents:
 	db 8
-	person_event SPRITE_COOLTRAINER_M, 24, 14, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 2, TrainerCooltrainermJake, -1
-	person_event SPRITE_COOLTRAINER_M, 38, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerCooltrainermGaven3, -1
-	person_event SPRITE_COOLTRAINER_F, 56, 10, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerCooltrainerfJoyce, -1
-	person_event SPRITE_COOLTRAINER_F, 8, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerCooltrainerfBeth1, -1
-	person_event SPRITE_YOUNGSTER, 79, 13, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerPsychicRichard, -1
-	person_event SPRITE_FISHER, 92, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerFisherScott, -1
-	person_event SPRITE_FRUIT_TREE, 54, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a4ec2, -1
-	person_event SPRITE_POKE_BALL, 15, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a4ec4, EVENT_ROUTE_26_MAX_ELIXER
+	person_event SPRITE_COOLTRAINER_M, 24, 14, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 2, TrainerCooltrainermJake, -1
+	person_event SPRITE_COOLTRAINER_M, 38, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerCooltrainermGaven3, -1
+	person_event SPRITE_COOLTRAINER_F, 56, 10, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerCooltrainerfJoyce, -1
+	person_event SPRITE_COOLTRAINER_F, 8, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerCooltrainerfBeth1, -1
+	person_event SPRITE_YOUNGSTER, 79, 13, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerPsychicRichard, -1
+	person_event SPRITE_FISHER, 92, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerFisherScott, -1
+	person_event SPRITE_FRUIT_TREE, 54, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a4ec2, -1
+	person_event SPRITE_POKE_BALL, 15, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a4ec4, EVENT_ROUTE_26_MAX_ELIXER
--- a/maps/Route26DayofWeekSiblingsHouse.asm
+++ b/maps/Route26DayofWeekSiblingsHouse.asm
@@ -84,4 +84,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKEDEX, 3, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, PokedexScript_0x7b1e4, -1
+	person_event SPRITE_POKEDEX, 3, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokedexScript_0x7b1e4, -1
--- a/maps/Route26HealSpeechHouse.asm
+++ b/maps/Route26HealSpeechHouse.asm
@@ -64,4 +64,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_TEACHER, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, TeacherScript_0x7b125, -1
+	person_event SPRITE_TEACHER, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, TeacherScript_0x7b125, -1
--- a/maps/Route27.asm
+++ b/maps/Route27.asm
@@ -479,12 +479,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_COOLTRAINER_M, 7, 48, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerCooltrainermBlake, -1
-	person_event SPRITE_COOLTRAINER_M, 6, 58, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerCooltrainermBrian, -1
-	person_event SPRITE_COOLTRAINER_F, 10, 72, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerCooltrainerfReena, -1
-	person_event SPRITE_COOLTRAINER_F, 6, 37, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 2, TrainerCooltrainerfMegan, -1
-	person_event SPRITE_YOUNGSTER, 7, 65, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPsychicGilbert, -1
-	person_event SPRITE_YOUNGSTER, 13, 58, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerBird_keeperJose2, -1
-	person_event SPRITE_POKE_BALL, 12, 60, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a0a62, EVENT_ROUTE_27_TM_SOLARBEAM
-	person_event SPRITE_POKE_BALL, 12, 53, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a0a64, EVENT_ROUTE_27_RARE_CANDY
-	person_event SPRITE_FISHER, 10, 21, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 3, FisherScript_0x1a089c, -1
+	person_event SPRITE_COOLTRAINER_M, 7, 48, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerCooltrainermBlake, -1
+	person_event SPRITE_COOLTRAINER_M, 6, 58, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerCooltrainermBrian, -1
+	person_event SPRITE_COOLTRAINER_F, 10, 72, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerCooltrainerfReena, -1
+	person_event SPRITE_COOLTRAINER_F, 6, 37, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 2, TrainerCooltrainerfMegan, -1
+	person_event SPRITE_YOUNGSTER, 7, 65, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPsychicGilbert, -1
+	person_event SPRITE_YOUNGSTER, 13, 58, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerBird_keeperJose2, -1
+	person_event SPRITE_POKE_BALL, 12, 60, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a0a62, EVENT_ROUTE_27_TM_SOLARBEAM
+	person_event SPRITE_POKE_BALL, 12, 53, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a0a64, EVENT_ROUTE_27_RARE_CANDY
+	person_event SPRITE_FISHER, 10, 21, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 3, FisherScript_0x1a089c, -1
--- a/maps/Route27SandstormHouse.asm
+++ b/maps/Route27SandstormHouse.asm
@@ -109,4 +109,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_GRANNY, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, SandstormHouseWoman, -1
+	person_event SPRITE_GRANNY, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SandstormHouseWoman, -1
--- a/maps/Route28FamousSpeechHouse.asm
+++ b/maps/Route28FamousSpeechHouse.asm
@@ -87,5 +87,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_COOLTRAINER_F, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, Celebrity, -1
-	person_event SPRITE_MOLTRES, 5, 6, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, CelebritysFearow, -1
+	person_event SPRITE_COOLTRAINER_F, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, Celebrity, -1
+	person_event SPRITE_MOLTRES, 5, 6, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, CelebritysFearow, -1
--- a/maps/Route29.asm
+++ b/maps/Route29.asm
@@ -204,7 +204,7 @@
 	jumptext UnknownText_0x1a15b9
 
 FruitTreeScript_0x1a1089:
-	fruittree $1
+	fruittree FRUITTREE_ROUTE_29
 
 ItemFragment_0x1a108b:
 	db POTION, 1
@@ -430,11 +430,11 @@
 
 .PersonEvents:
 	db 8
-	person_event SPRITE_COOLTRAINER_M, 12, 50, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerMScript_0x1a0ff1, -1
-	person_event SPRITE_YOUNGSTER, 16, 27, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x1a1028, -1
-	person_event SPRITE_TEACHER, 11, 15, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TeacherScript_0x1a102b, -1
-	person_event SPRITE_FRUIT_TREE, 2, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a1089, -1
-	person_event SPRITE_FISHER, 3, 25, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, FisherScript_0x1a102e, -1
-	person_event SPRITE_COOLTRAINER_M, 4, 13, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerMScript_0x1a1031, -1
-	person_event SPRITE_TEACHER, 12, 29, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, TuscanyScript, EVENT_ROUTE_29_TUSCANY_OF_TUESDAY
-	person_event SPRITE_POKE_BALL, 2, 48, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a108b, EVENT_ROUTE_29_POTION
+	person_event SPRITE_COOLTRAINER_M, 12, 50, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x1a0ff1, -1
+	person_event SPRITE_YOUNGSTER, 16, 27, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1a1028, -1
+	person_event SPRITE_TEACHER, 11, 15, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TeacherScript_0x1a102b, -1
+	person_event SPRITE_FRUIT_TREE, 2, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a1089, -1
+	person_event SPRITE_FISHER, 3, 25, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, FisherScript_0x1a102e, -1
+	person_event SPRITE_COOLTRAINER_M, 4, 13, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x1a1031, -1
+	person_event SPRITE_TEACHER, 12, 29, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TuscanyScript, EVENT_ROUTE_29_TUSCANY_OF_TUESDAY
+	person_event SPRITE_POKE_BALL, 2, 48, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a108b, EVENT_ROUTE_29_POTION
--- a/maps/Route2946Gate.asm
+++ b/maps/Route2946Gate.asm
@@ -51,5 +51,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, OfficerScript_0x7b5bb, -1
-	person_event SPRITE_YOUNGSTER, 4, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x7b5be, -1
+	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, OfficerScript_0x7b5bb, -1
+	person_event SPRITE_YOUNGSTER, 4, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x7b5be, -1
--- a/maps/Route2Gate.asm
+++ b/maps/Route2Gate.asm
@@ -41,4 +41,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_SCIENTIST, 4, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ScientistScript_0x9b952, -1
+	person_event SPRITE_SCIENTIST, 4, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ScientistScript_0x9b952, -1
--- a/maps/Route2NuggetSpeechHouse.asm
+++ b/maps/Route2NuggetSpeechHouse.asm
@@ -66,4 +66,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_FISHER, 4, 2, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, FisherScript_0x9b847, -1
+	person_event SPRITE_FISHER, 4, 2, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, FisherScript_0x9b847, -1
--- a/maps/Route3.asm
+++ b/maps/Route3.asm
@@ -143,7 +143,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_FISHER, 12, 26, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 2, TrainerFirebreatherOtis, -1
-	person_event SPRITE_YOUNGSTER, 7, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerYoungsterWarren, -1
-	person_event SPRITE_YOUNGSTER, 3, 16, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerYoungsterJimmy, -1
-	person_event SPRITE_FISHER, 5, 49, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerFirebreatherBurt, -1
+	person_event SPRITE_FISHER, 12, 26, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 2, TrainerFirebreatherOtis, -1
+	person_event SPRITE_YOUNGSTER, 7, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerYoungsterWarren, -1
+	person_event SPRITE_YOUNGSTER, 3, 16, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerYoungsterJimmy, -1
+	person_event SPRITE_FISHER, 5, 49, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerFirebreatherBurt, -1
--- a/maps/Route30.asm
+++ b/maps/Route30.asm
@@ -229,10 +229,10 @@
 	db ANTIDOTE, 1
 
 FruitTreeScript_0x1a17f7:
-	fruittree $2
+	fruittree FRUITTREE_ROUTE_30_1
 
 FruitTreeScript_0x1a17f9:
-	fruittree $5
+	fruittree FRUITTREE_ROUTE_30_2
 
 MapRoute30SignpostItem4:
 	dwb EVENT_ROUTE_30_HIDDEN_POTION, POTION
@@ -416,14 +416,14 @@
 
 .PersonEvents:
 	db 11
-	person_event SPRITE_YOUNGSTER, 26, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, YoungsterScript_0x1a1673, EVENT_ROUTE_30_BATTLE
-	person_event SPRITE_YOUNGSTER, 28, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerYoungsterJoey, EVENT_ROUTE_30_YOUNGSTER_JOEY
-	person_event SPRITE_YOUNGSTER, 23, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerYoungsterMikey, -1
-	person_event SPRITE_BUG_CATCHER, 7, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerBug_catcherDon, -1
-	person_event SPRITE_YOUNGSTER, 30, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x1a17d2, -1
-	person_event SPRITE_MONSTER, 24, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ObjectEvent, EVENT_ROUTE_30_BATTLE
-	person_event SPRITE_MONSTER, 25, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ObjectEvent, EVENT_ROUTE_30_BATTLE
-	person_event SPRITE_FRUIT_TREE, 39, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a17f7, -1
-	person_event SPRITE_FRUIT_TREE, 5, 11, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a17f9, -1
-	person_event SPRITE_COOLTRAINER_F, 13, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, CooltrainerFScript_0x1a17e6, -1
-	person_event SPRITE_POKE_BALL, 35, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a17f5, EVENT_ROUTE_30_ANTIDOTE
+	person_event SPRITE_YOUNGSTER, 26, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1a1673, EVENT_ROUTE_30_BATTLE
+	person_event SPRITE_YOUNGSTER, 28, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerYoungsterJoey, EVENT_ROUTE_30_YOUNGSTER_JOEY
+	person_event SPRITE_YOUNGSTER, 23, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerYoungsterMikey, -1
+	person_event SPRITE_BUG_CATCHER, 7, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerBug_catcherDon, -1
+	person_event SPRITE_YOUNGSTER, 30, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1a17d2, -1
+	person_event SPRITE_MONSTER, 24, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_ROUTE_30_BATTLE
+	person_event SPRITE_MONSTER, 25, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_ROUTE_30_BATTLE
+	person_event SPRITE_FRUIT_TREE, 39, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a17f7, -1
+	person_event SPRITE_FRUIT_TREE, 5, 11, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a17f9, -1
+	person_event SPRITE_COOLTRAINER_F, 13, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x1a17e6, -1
+	person_event SPRITE_POKE_BALL, 35, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a17f5, EVENT_ROUTE_30_ANTIDOTE
--- a/maps/Route30BerrySpeechHouse.asm
+++ b/maps/Route30BerrySpeechHouse.asm
@@ -62,4 +62,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKEFAN_M, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, PokefanMScript_0x196d64, -1
+	person_event SPRITE_POKEFAN_M, 3, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x196d64, -1
--- a/maps/Route31.asm
+++ b/maps/Route31.asm
@@ -7,14 +7,14 @@
 
 	; callbacks
 
-	dbw 5, UnknownScript_0x1a543c
+	dbw 5, .CheckMomCall
 
-UnknownScript_0x1a543c:
+.CheckMomCall:
 	checkevent EVENT_TALKED_TO_MOM_AFTER_MYSTERY_EGG_QUEST
-	iffalse UnknownScript_0x1a5443
+	iffalse .DoMomCall
 	return
 
-UnknownScript_0x1a5443:
+.DoMomCall:
 	specialphonecall SPECIALCALL_WORRIED
 	return
 
@@ -26,31 +26,31 @@
 	talkaftercancel
 	loadfont
 	checkflag ENGINE_WADE
-	iftrue UnknownScript_0x1a5493
+	iftrue .WadeRematch
 	checkflag ENGINE_WADE_HAS_ITEM
-	iftrue UnknownScript_0x1a5507
+	iftrue .WadeItem
 	checkcellnum PHONE_BUG_CATCHER_WADE
-	iftrue UnknownScript_0x1a5558
+	iftrue .AcceptedNumberSTD
 	checkevent EVENT_WADE_ASKED_FOR_PHONE_NUMBER
-	iftrue UnknownScript_0x1a547c
+	iftrue .AskAgain
 	writetext UnknownText_0x1a5671
 	closetext
 	setevent EVENT_WADE_ASKED_FOR_PHONE_NUMBER
-	scall UnknownScript_0x1a554c
-	jump UnknownScript_0x1a547f
+	scall .AskPhoneNumberSTD
+	jump .Continue
 
-UnknownScript_0x1a547c:
-	scall UnknownScript_0x1a5550
-UnknownScript_0x1a547f:
+.AskAgain:
+	scall .AskAgainSTD
+.Continue:
 	askforphonenumber PHONE_BUG_CATCHER_WADE
-	if_equal $1, UnknownScript_0x1a5560
-	if_equal $2, UnknownScript_0x1a555c
+	if_equal $1, .PhoneFullSTD
+	if_equal $2, .DeclinedNumberSTD
 	trainertotext BUG_CATCHER, WADE1, $0
-	scall UnknownScript_0x1a5554
-	jump UnknownScript_0x1a5558
+	scall .RegisterNumberSTD
+	jump .AcceptedNumberSTD
 
-UnknownScript_0x1a5493:
-	scall UnknownScript_0x1a5564
+.WadeRematch:
+	scall .RematchSTD
 	winlosstext Bug_catcherWade1BeatenText, 0
 	copybytetovar wWadeFightCount
 	if_equal 4, .Fight4
@@ -109,8 +109,8 @@
 	clearflag ENGINE_WADE
 	end
 
-UnknownScript_0x1a5507:
-	scall UnknownScript_0x1a5568
+.WadeItem:
+	scall .ItemSTD
 	checkevent EVENT_WADE_HAS_BERRY
 	iftrue .Berry
 	checkevent EVENT_WADE_HAS_PSNCUREBERRY
@@ -136,43 +136,43 @@
 	iffalse .PackFull
 .Done
 	clearflag ENGINE_WADE_HAS_ITEM
-	jump UnknownScript_0x1a5558
+	jump .AcceptedNumberSTD
 .PackFull
-	jump UnknownScript_0x1a556c
+	jump .PackFullSTD
 
-UnknownScript_0x1a554c:
+.AskPhoneNumberSTD:
 	jumpstd asknumber1m
 	end
 
-UnknownScript_0x1a5550:
+.AskAgainSTD:
 	jumpstd asknumber2m
 	end
 
-UnknownScript_0x1a5554:
+.RegisterNumberSTD:
 	jumpstd registerednumberm
 	end
 
-UnknownScript_0x1a5558:
+.AcceptedNumberSTD:
 	jumpstd numberacceptedm
 	end
 
-UnknownScript_0x1a555c:
+.DeclinedNumberSTD:
 	jumpstd numberdeclinedm
 	end
 
-UnknownScript_0x1a5560:
+.PhoneFullSTD:
 	jumpstd phonefullm
 	end
 
-UnknownScript_0x1a5564:
+.RematchSTD:
 	jumpstd rematchm
 	end
 
-UnknownScript_0x1a5568:
+.ItemSTD:
 	jumpstd giftm
 	end
 
-UnknownScript_0x1a556c:
+.PackFullSTD:
 	jumpstd packfullm
 	end
 
@@ -180,22 +180,22 @@
 	faceplayer
 	loadfont
 	checkevent EVENT_GOT_TM50_NIGHTMARE
-	iftrue UnknownScript_0x1a55af
+	iftrue .DescribeNightmare
 	checkevent EVENT_GOT_KENYA
-	iftrue UnknownScript_0x1a5584
+	iftrue .TryGiveKenya
 	writetext UnknownText_0x1a56d9
 	closetext
 	loadmovesprites
 	end
 
-UnknownScript_0x1a5584:
+.TryGiveKenya:
 	writetext UnknownText_0x1a5761
 	keeptextopen
 	checkpokeitem ReceivedSpearowMailText
-	if_equal $0, UnknownScript_0x1a55b5
-	if_equal $2, UnknownScript_0x1a55c1
-	if_equal $3, UnknownScript_0x1a55bb
-	if_equal $4, UnknownScript_0x1a55c7
+	if_equal $0, .WrongMail
+	if_equal $2, .Refused
+	if_equal $3, .NoMail
+	if_equal $4, .LastMon
 	writetext UnknownText_0x1a5790
 	keeptextopen
 	writetext UnknownText_0x1a57ba
@@ -202,34 +202,34 @@
 	keeptextopen
 	setevent EVENT_GAVE_KENYA
 	verbosegiveitem TM_NIGHTMARE
-	iffalse UnknownScript_0x1a55b3
+	iffalse .NoRoomForItems
 	setevent EVENT_GOT_TM50_NIGHTMARE
-UnknownScript_0x1a55af:
+.DescribeNightmare:
 	writetext UnknownText_0x1a5896
 	closetext
-UnknownScript_0x1a55b3:
+.NoRoomForItems:
 	loadmovesprites
 	end
 
-UnknownScript_0x1a55b5:
+.WrongMail:
 	writetext UnknownText_0x1a5921
 	closetext
 	loadmovesprites
 	end
 
-UnknownScript_0x1a55bb:
+.NoMail:
 	writetext UnknownText_0x1a5939
 	closetext
 	loadmovesprites
 	end
 
-UnknownScript_0x1a55c1:
+.Refused:
 	writetext UnknownText_0x1a5972
 	closetext
 	loadmovesprites
 	end
 
-UnknownScript_0x1a55c7:
+.LastMon:
 	writetext UnknownText_0x1a5991
 	closetext
 	loadmovesprites
@@ -236,8 +236,8 @@
 	end
 
 ReceivedSpearowMailText:
-	db "DARK CAVE leads", $4E
-	db "to another road@"
+	db   "DARK CAVE leads"
+	next "to another road@"
 
 YoungsterScript_0x1a55ed:
 	jumptextfaceplayer UnknownText_0x1a59d5
@@ -252,7 +252,7 @@
 	jumptextfaceplayer UnknownText_0x1a55ff
 
 FruitTreeScript_0x1a55f9:
-	fruittree $7
+	fruittree FRUITTREE_ROUTE_31
 
 ItemFragment_0x1a55fb:
 	db POTION, 1
@@ -430,10 +430,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_FISHER, 7, 17, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, FisherScript_0x1a5570, -1
-	person_event SPRITE_YOUNGSTER, 5, 9, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, YoungsterScript_0x1a55ed, -1
-	person_event SPRITE_BUG_CATCHER, 13, 21, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 5, TrainerBug_catcherWade1, -1
-	person_event SPRITE_COOLTRAINER_M, 8, 33, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, CooltrainerMScript_0x1a55f6, -1
-	person_event SPRITE_FRUIT_TREE, 7, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a55f9, -1
-	person_event SPRITE_POKE_BALL, 5, 29, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a55fb, EVENT_ROUTE_31_POTION
-	person_event SPRITE_POKE_BALL, 15, 19, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a55fd, EVENT_ROUTE_31_POKE_BALL
+	person_event SPRITE_FISHER, 7, 17, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FisherScript_0x1a5570, -1
+	person_event SPRITE_YOUNGSTER, 5, 9, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1a55ed, -1
+	person_event SPRITE_BUG_CATCHER, 13, 21, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 5, TrainerBug_catcherWade1, -1
+	person_event SPRITE_COOLTRAINER_M, 8, 33, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x1a55f6, -1
+	person_event SPRITE_FRUIT_TREE, 7, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a55f9, -1
+	person_event SPRITE_POKE_BALL, 5, 29, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a55fb, EVENT_ROUTE_31_POTION
+	person_event SPRITE_POKE_BALL, 15, 19, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a55fd, EVENT_ROUTE_31_POKE_BALL
--- a/maps/Route31VioletGate.asm
+++ b/maps/Route31VioletGate.asm
@@ -42,5 +42,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, OfficerScript_0x197634, -1
-	person_event SPRITE_COOLTRAINER_F, 2, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, CooltrainerFScript_0x197637, -1
+	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, OfficerScript_0x197634, -1
+	person_event SPRITE_COOLTRAINER_F, 2, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x197637, -1
--- a/maps/Route32.asm
+++ b/maps/Route32.asm
@@ -946,17 +946,17 @@
 
 .PersonEvents:
 	db 14
-	person_event SPRITE_FISHER, 49, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerFisherJustin, -1
-	person_event SPRITE_FISHER, 56, 12, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerFisherRalph1, -1
-	person_event SPRITE_FISHER, 48, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerFisherHenry, -1
-	person_event SPRITE_YOUNGSTER, 22, 12, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerYoungsterAlbert, -1
-	person_event SPRITE_YOUNGSTER, 63, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerYoungsterGordon, -1
-	person_event SPRITE_YOUNGSTER, 45, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerCamperRoland, -1
-	person_event SPRITE_LASS, 30, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerPicnickerLiz1, -1
-	person_event SPRITE_COOLTRAINER_M, 8, 19, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, CooltrainerMScript_0x19046f, -1
-	person_event SPRITE_YOUNGSTER, 82, 11, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerBird_keeperPeter, -1
-	person_event SPRITE_FISHER, 70, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, FisherScript_0x1904f2, EVENT_SLOWPOKE_WELL_ROCKETS
-	person_event SPRITE_POKE_BALL, 53, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x190773, EVENT_ROUTE_32_GREAT_BALL
-	person_event SPRITE_FISHER, 13, 15, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, FisherScript_0x1904ce, -1
-	person_event SPRITE_LASS, 67, 12, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, FriedaScript, EVENT_ROUTE_32_FRIEDA_OF_FRIDAY
-	person_event SPRITE_POKE_BALL, 30, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x190775, EVENT_ROUTE_32_REPEL
+	person_event SPRITE_FISHER, 49, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerFisherJustin, -1
+	person_event SPRITE_FISHER, 56, 12, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerFisherRalph1, -1
+	person_event SPRITE_FISHER, 48, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerFisherHenry, -1
+	person_event SPRITE_YOUNGSTER, 22, 12, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerYoungsterAlbert, -1
+	person_event SPRITE_YOUNGSTER, 63, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerYoungsterGordon, -1
+	person_event SPRITE_YOUNGSTER, 45, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerCamperRoland, -1
+	person_event SPRITE_LASS, 30, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerPicnickerLiz1, -1
+	person_event SPRITE_COOLTRAINER_M, 8, 19, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x19046f, -1
+	person_event SPRITE_YOUNGSTER, 82, 11, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerBird_keeperPeter, -1
+	person_event SPRITE_FISHER, 70, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FisherScript_0x1904f2, EVENT_SLOWPOKE_WELL_ROCKETS
+	person_event SPRITE_POKE_BALL, 53, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x190773, EVENT_ROUTE_32_GREAT_BALL
+	person_event SPRITE_FISHER, 13, 15, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FisherScript_0x1904ce, -1
+	person_event SPRITE_LASS, 67, 12, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FriedaScript, EVENT_ROUTE_32_FRIEDA_OF_FRIDAY
+	person_event SPRITE_POKE_BALL, 30, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x190775, EVENT_ROUTE_32_REPEL
--- a/maps/Route32PokeCenter1F.asm
+++ b/maps/Route32PokeCenter1F.asm
@@ -107,6 +107,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x69b52, -1
-	person_event SPRITE_FISHING_GURU, 4, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FishingGuruScript_0x69b55, -1
-	person_event SPRITE_COOLTRAINER_F, 2, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerFScript_0x69b80, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x69b52, -1
+	person_event SPRITE_FISHING_GURU, 4, 1, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FishingGuruScript_0x69b55, -1
+	person_event SPRITE_COOLTRAINER_F, 2, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x69b80, -1
--- a/maps/Route32RuinsofAlphGate.asm
+++ b/maps/Route32RuinsofAlphGate.asm
@@ -60,6 +60,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, OfficerScript_0x69a2d, -1
-	person_event SPRITE_POKEFAN_M, 2, 8, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, PokefanMScript_0x69a30, -1
-	person_event SPRITE_YOUNGSTER, 6, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x69a33, -1
+	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, OfficerScript_0x69a2d, -1
+	person_event SPRITE_POKEFAN_M, 2, 8, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x69a30, -1
+	person_event SPRITE_YOUNGSTER, 6, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x69a33, -1
--- a/maps/Route33.asm
+++ b/maps/Route33.asm
@@ -137,7 +137,7 @@
 	jumptext UnknownText_0x1ac279
 
 FruitTreeScript_0x1ac0ea:
-	fruittree $6
+	fruittree FRUITTREE_ROUTE_33
 
 HikerAnthony2SeenText:
 	text "I came through the"
@@ -206,6 +206,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_POKEFAN_M, 13, 6, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerHikerAnthony, -1
-	person_event SPRITE_LASS, 16, 13, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, LassScript_0x1ac002, -1
-	person_event SPRITE_FRUIT_TREE, 16, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1ac0ea, -1
+	person_event SPRITE_POKEFAN_M, 13, 6, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerHikerAnthony, -1
+	person_event SPRITE_LASS, 16, 13, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, LassScript_0x1ac002, -1
+	person_event SPRITE_FRUIT_TREE, 16, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1ac0ea, -1
--- a/maps/Route34.asm
+++ b/maps/Route34.asm
@@ -775,16 +775,16 @@
 
 .PersonEvents:
 	db 13
-	person_event SPRITE_YOUNGSTER, 7, 13, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 5, TrainerCamperTodd1, -1
-	person_event SPRITE_YOUNGSTER, 32, 15, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerYoungsterSamuel, -1
-	person_event SPRITE_YOUNGSTER, 20, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerYoungsterIan, -1
-	person_event SPRITE_LASS, 26, 10, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerPicnickerGina1, -1
-	person_event SPRITE_OFFICER, 11, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, OfficerScript_0x7824c, -1
-	person_event SPRITE_POKEFAN_M, 28, 18, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerPokefanmBrandon, -1
-	person_event SPRITE_GRAMPS, 16, 15, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, GrampsScript_0x7803d, EVENT_DAYCARE_MAN_ON_ROUTE_34
-	person_event SPRITE_DAYCARE_MON_1, 18, 14, SPRITEMOVEDATA_POKEMON, 2, 2, -1, -1, 0, 0, 0, DaycareMon1Script_0x78065, EVENT_DAYCARE_MON_1
-	person_event SPRITE_DAYCARE_MON_2, 19, 17, SPRITEMOVEDATA_POKEMON, 2, 2, -1, -1, 0, 0, 0, DaycareMon2Script_0x7806b, EVENT_DAYCARE_MON_2
-	person_event SPRITE_COOLTRAINER_F, 48, 11, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 5, TrainerCooltrainerfIrene, -1
-	person_event SPRITE_COOLTRAINER_F, 48, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerCooltrainerfJenn, -1
-	person_event SPRITE_COOLTRAINER_F, 51, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 2, TrainerCooltrainerfKate, -1
-	person_event SPRITE_POKE_BALL, 30, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7832b, EVENT_ROUTE_34_NUGGET
+	person_event SPRITE_YOUNGSTER, 7, 13, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 5, TrainerCamperTodd1, -1
+	person_event SPRITE_YOUNGSTER, 32, 15, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerYoungsterSamuel, -1
+	person_event SPRITE_YOUNGSTER, 20, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerYoungsterIan, -1
+	person_event SPRITE_LASS, 26, 10, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerPicnickerGina1, -1
+	person_event SPRITE_OFFICER, 11, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, OfficerScript_0x7824c, -1
+	person_event SPRITE_POKEFAN_M, 28, 18, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerPokefanmBrandon, -1
+	person_event SPRITE_GRAMPS, 16, 15, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x7803d, EVENT_DAYCARE_MAN_ON_ROUTE_34
+	person_event SPRITE_DAYCARE_MON_1, 18, 14, SPRITEMOVEDATA_POKEMON, 2, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, DaycareMon1Script_0x78065, EVENT_DAYCARE_MON_1
+	person_event SPRITE_DAYCARE_MON_2, 19, 17, SPRITEMOVEDATA_POKEMON, 2, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, DaycareMon2Script_0x7806b, EVENT_DAYCARE_MON_2
+	person_event SPRITE_COOLTRAINER_F, 48, 11, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 5, TrainerCooltrainerfIrene, -1
+	person_event SPRITE_COOLTRAINER_F, 48, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerCooltrainerfJenn, -1
+	person_event SPRITE_COOLTRAINER_F, 51, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 2, TrainerCooltrainerfKate, -1
+	person_event SPRITE_POKE_BALL, 30, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7832b, EVENT_ROUTE_34_NUGGET
--- a/maps/Route34IlexForestGate.asm
+++ b/maps/Route34IlexForestGate.asm
@@ -152,7 +152,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_TEACHER, 3, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, TeacherScript_0x62d63, EVENT_ROUTE_34_ILEX_FOREST_GATE_TEACHER_BEHIND_COUNTER
-	person_event SPRITE_BUTTERFREE, 4, 9, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ButterfreeScript_0x62d8a, -1
-	person_event SPRITE_LASS, 4, 3, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x62d94, EVENT_ROUTE_34_ILEX_FOREST_GATE_LASS
-	person_event SPRITE_TEACHER, 7, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, TeacherScript_0x62d63, EVENT_ROUTE_34_ILEX_FOREST_GATE_TEACHER_IN_WALKWAY
+	person_event SPRITE_TEACHER, 3, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, TeacherScript_0x62d63, EVENT_ROUTE_34_ILEX_FOREST_GATE_TEACHER_BEHIND_COUNTER
+	person_event SPRITE_BUTTERFREE, 4, 9, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ButterfreeScript_0x62d8a, -1
+	person_event SPRITE_LASS, 4, 3, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x62d94, EVENT_ROUTE_34_ILEX_FOREST_GATE_LASS
+	person_event SPRITE_TEACHER, 7, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, TeacherScript_0x62d63, EVENT_ROUTE_34_ILEX_FOREST_GATE_TEACHER_IN_WALKWAY
--- a/maps/Route35.asm
+++ b/maps/Route35.asm
@@ -261,7 +261,7 @@
 	db TM_ROLLOUT, 1
 
 FruitTreeScript_0x19ca7e:
-	fruittree $b
+	fruittree FRUITTREE_ROUTE_35
 
 CamperIvanSeenText:
 	text "I've been getting"
@@ -469,14 +469,14 @@
 
 .PersonEvents:
 	db 11
-	person_event SPRITE_YOUNGSTER, 19, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 2, TrainerCamperIvan, -1
-	person_event SPRITE_YOUNGSTER, 20, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerCamperElliot, -1
-	person_event SPRITE_LASS, 20, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerPicnickerBrooke, -1
-	person_event SPRITE_LASS, 26, 10, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerPicnickerKim, -1
-	person_event SPRITE_YOUNGSTER, 28, 14, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 0, TrainerBird_keeperBryan, -1
-	person_event SPRITE_FISHER, 10, 2, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 2, TrainerFirebreatherWalt, -1
-	person_event SPRITE_BUG_CATCHER, 7, 16, SPRITEMOVEDATA_STANDING_DOWN, 0, 2, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerBug_catcherArnie1, -1
-	person_event SPRITE_SUPER_NERD, 10, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerJugglerIrwin, -1
-	person_event SPRITE_OFFICER, 6, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, OfficerScript_0x19ca49, -1
-	person_event SPRITE_FRUIT_TREE, 25, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x19ca7e, -1
-	person_event SPRITE_POKE_BALL, 16, 13, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x19ca7c, EVENT_ROUTE_35_TM_ROLLOUT
+	person_event SPRITE_YOUNGSTER, 19, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 2, TrainerCamperIvan, -1
+	person_event SPRITE_YOUNGSTER, 20, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerCamperElliot, -1
+	person_event SPRITE_LASS, 20, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerPicnickerBrooke, -1
+	person_event SPRITE_LASS, 26, 10, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerPicnickerKim, -1
+	person_event SPRITE_YOUNGSTER, 28, 14, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 0, TrainerBird_keeperBryan, -1
+	person_event SPRITE_FISHER, 10, 2, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 2, TrainerFirebreatherWalt, -1
+	person_event SPRITE_BUG_CATCHER, 7, 16, SPRITEMOVEDATA_STANDING_DOWN, 0, 2, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerBug_catcherArnie1, -1
+	person_event SPRITE_SUPER_NERD, 10, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerJugglerIrwin, -1
+	person_event SPRITE_OFFICER, 6, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, OfficerScript_0x19ca49, -1
+	person_event SPRITE_FRUIT_TREE, 25, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x19ca7e, -1
+	person_event SPRITE_POKE_BALL, 16, 13, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x19ca7c, EVENT_ROUTE_35_TM_ROLLOUT
--- a/maps/Route35Goldenrodgate.asm
+++ b/maps/Route35Goldenrodgate.asm
@@ -209,6 +209,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, OfficerScript_0x69d37, -1
-	person_event SPRITE_POKEFAN_F, 4, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, PokefanFScript_0x69dc6, -1
-	person_event SPRITE_FISHER, 2, 3, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x69dda, -1
+	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, OfficerScript_0x69d37, -1
+	person_event SPRITE_POKEFAN_F, 4, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x69dc6, -1
+	person_event SPRITE_FISHER, 2, 3, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x69dda, -1
--- a/maps/Route35NationalParkgate.asm
+++ b/maps/Route35NationalParkgate.asm
@@ -458,6 +458,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_OFFICER, 1, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, OfficerScript_0x6a204, EVENT_ROUTE_35_NATIONAL_PARK_GATE_OFFICER_CONTEST_DAY
-	person_event SPRITE_YOUNGSTER, 5, 6, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x6a2d8, EVENT_ROUTE_35_NATIONAL_PARK_GATE_YOUNGSTER
-	person_event SPRITE_OFFICER, 3, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, OfficerScript_0x6a2ca, EVENT_ROUTE_35_NATIONAL_PARK_GATE_OFFICER_NOT_CONTEST_DAY
+	person_event SPRITE_OFFICER, 1, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, OfficerScript_0x6a204, EVENT_ROUTE_35_NATIONAL_PARK_GATE_OFFICER_CONTEST_DAY
+	person_event SPRITE_YOUNGSTER, 5, 6, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x6a2d8, EVENT_ROUTE_35_NATIONAL_PARK_GATE_YOUNGSTER
+	person_event SPRITE_OFFICER, 3, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, OfficerScript_0x6a2ca, EVENT_ROUTE_35_NATIONAL_PARK_GATE_OFFICER_NOT_CONTEST_DAY
--- a/maps/Route36.asm
+++ b/maps/Route36.asm
@@ -359,7 +359,7 @@
 	jumptext UnknownText_0x1949ee
 
 FruitTreeScript_0x194247:
-	fruittree $d
+	fruittree FRUITTREE_ROUTE_36
 
 MovementData_0x194249:
 	db $56 ; movement
@@ -679,12 +679,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_YOUNGSTER, 13, 20, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPsychicMark, -1
-	person_event SPRITE_YOUNGSTER, 14, 31, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 5, TrainerSchoolboyAlan1, -1
-	person_event SPRITE_WEIRD_TREE, 9, 35, SPRITEMOVEDATA_SUDOWOODO, 0, 0, -1, -1, 0, 0, 0, WeirdTreeScript_0x19403c, EVENT_ROUTE_36_SUDOWOODO
-	person_event SPRITE_LASS, 8, 51, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, 0, 0, LassScript_0x1940e0, -1
-	person_event SPRITE_FISHER, 9, 44, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, FisherScript_0x1940b9, -1
-	person_event SPRITE_FRUIT_TREE, 4, 21, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x194247, -1
-	person_event SPRITE_YOUNGSTER, 6, 46, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, ArthurScript, EVENT_ROUTE_36_ARTHUR_OF_THURSDAY
-	person_event SPRITE_LASS, 12, 33, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, LassScript_0x19408c, EVENT_FLORIA_AT_SUDOWOODO
-	person_event SPRITE_SUICUNE, 6, 21, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ObjectEvent, EVENT_SAW_SUICUNE_ON_ROUTE_36
+	person_event SPRITE_YOUNGSTER, 13, 20, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPsychicMark, -1
+	person_event SPRITE_YOUNGSTER, 14, 31, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 5, TrainerSchoolboyAlan1, -1
+	person_event SPRITE_WEIRD_TREE, 9, 35, SPRITEMOVEDATA_SUDOWOODO, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, WeirdTreeScript_0x19403c, EVENT_ROUTE_36_SUDOWOODO
+	person_event SPRITE_LASS, 8, 51, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x1940e0, -1
+	person_event SPRITE_FISHER, 9, 44, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FisherScript_0x1940b9, -1
+	person_event SPRITE_FRUIT_TREE, 4, 21, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x194247, -1
+	person_event SPRITE_YOUNGSTER, 6, 46, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ArthurScript, EVENT_ROUTE_36_ARTHUR_OF_THURSDAY
+	person_event SPRITE_LASS, 12, 33, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, LassScript_0x19408c, EVENT_FLORIA_AT_SUDOWOODO
+	person_event SPRITE_SUICUNE, 6, 21, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_SAW_SUICUNE_ON_ROUTE_36
--- a/maps/Route36NationalParkgate.asm
+++ b/maps/Route36NationalParkgate.asm
@@ -862,15 +862,15 @@
 
 .PersonEvents:
 	db 12
-	person_event SPRITE_OFFICER, 3, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, Route36OfficerScriptContest, EVENT_ROUTE_36_NATIONAL_PARK_GATE_OFFICER_CONTEST_DAY
-	person_event SPRITE_YOUNGSTER, 5, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x6ad06, EVENT_BUG_CATCHING_CONTESTANT_1B
-	person_event SPRITE_YOUNGSTER, 5, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x6ad1a, EVENT_BUG_CATCHING_CONTESTANT_2B
-	person_event SPRITE_ROCKER, 6, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, RockerScript_0x6ad2e, EVENT_BUG_CATCHING_CONTESTANT_3B
-	person_event SPRITE_POKEFAN_M, 5, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, PokefanMScript_0x6ad42, EVENT_BUG_CATCHING_CONTESTANT_4B
-	person_event SPRITE_YOUNGSTER, 7, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x6ad56, EVENT_BUG_CATCHING_CONTESTANT_5B
-	person_event SPRITE_YOUNGSTER, 6, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x6ad6a, EVENT_BUG_CATCHING_CONTESTANT_6B
-	person_event SPRITE_LASS, 6, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, LassScript_0x6ad7e, EVENT_BUG_CATCHING_CONTESTANT_7B
-	person_event SPRITE_YOUNGSTER, 7, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x6ad92, EVENT_BUG_CATCHING_CONTESTANT_8B
-	person_event SPRITE_YOUNGSTER, 7, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x6ada6, EVENT_BUG_CATCHING_CONTESTANT_9B
-	person_event SPRITE_YOUNGSTER, 6, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, YoungsterScript_0x6adba, EVENT_BUG_CATCHING_CONTESTANT_10B
-	person_event SPRITE_OFFICER, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, OfficerScript_0x6acf4, EVENT_ROUTE_36_NATIONAL_PARK_GATE_OFFICER_NOT_CONTEST_DAY
+	person_event SPRITE_OFFICER, 3, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, Route36OfficerScriptContest, EVENT_ROUTE_36_NATIONAL_PARK_GATE_OFFICER_CONTEST_DAY
+	person_event SPRITE_YOUNGSTER, 5, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x6ad06, EVENT_BUG_CATCHING_CONTESTANT_1B
+	person_event SPRITE_YOUNGSTER, 5, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x6ad1a, EVENT_BUG_CATCHING_CONTESTANT_2B
+	person_event SPRITE_ROCKER, 6, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, RockerScript_0x6ad2e, EVENT_BUG_CATCHING_CONTESTANT_3B
+	person_event SPRITE_POKEFAN_M, 5, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x6ad42, EVENT_BUG_CATCHING_CONTESTANT_4B
+	person_event SPRITE_YOUNGSTER, 7, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x6ad56, EVENT_BUG_CATCHING_CONTESTANT_5B
+	person_event SPRITE_YOUNGSTER, 6, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x6ad6a, EVENT_BUG_CATCHING_CONTESTANT_6B
+	person_event SPRITE_LASS, 6, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, LassScript_0x6ad7e, EVENT_BUG_CATCHING_CONTESTANT_7B
+	person_event SPRITE_YOUNGSTER, 7, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x6ad92, EVENT_BUG_CATCHING_CONTESTANT_8B
+	person_event SPRITE_YOUNGSTER, 7, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x6ada6, EVENT_BUG_CATCHING_CONTESTANT_9B
+	person_event SPRITE_YOUNGSTER, 6, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x6adba, EVENT_BUG_CATCHING_CONTESTANT_10B
+	person_event SPRITE_OFFICER, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, OfficerScript_0x6acf4, EVENT_ROUTE_36_NATIONAL_PARK_GATE_OFFICER_NOT_CONTEST_DAY
--- a/maps/Route36RuinsofAlphgate.asm
+++ b/maps/Route36RuinsofAlphgate.asm
@@ -49,5 +49,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, OfficerScript_0x6aa1a, -1
-	person_event SPRITE_GRAMPS, 5, 7, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, GrampsScript_0x6aa1d, -1
+	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, OfficerScript_0x6aa1a, -1
+	person_event SPRITE_GRAMPS, 5, 7, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, GrampsScript_0x6aa1d, -1
--- a/maps/Route37.asm
+++ b/maps/Route37.asm
@@ -99,13 +99,13 @@
 	jumptext UnknownText_0x1a9197
 
 FruitTreeScript_0x1a8e09:
-	fruittree $11
+	fruittree FRUITTREE_ROUTE_37_1
 
 FruitTreeScript_0x1a8e0b:
-	fruittree $12
+	fruittree FRUITTREE_ROUTE_37_2
 
 FruitTreeScript_0x1a8e0d:
-	fruittree $13
+	fruittree FRUITTREE_ROUTE_37_3
 
 MapRoute37SignpostItem1:
 	dwb EVENT_ROUTE_37_HIDDEN_ETHER, ETHER
@@ -249,10 +249,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_WEIRD_TREE, 12, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerTwinsAnnandanne1, -1
-	person_event SPRITE_WEIRD_TREE, 12, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerTwinsAnnandanne2, -1
-	person_event SPRITE_YOUNGSTER, 6, 6, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerPsychicGreg, -1
-	person_event SPRITE_FRUIT_TREE, 5, 13, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a8e09, -1
-	person_event SPRITE_BUG_CATCHER, 8, 16, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, SunnyScript, EVENT_ROUTE_37_SUNNY_OF_SUNDAY
-	person_event SPRITE_FRUIT_TREE, 5, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a8e0b, -1
-	person_event SPRITE_FRUIT_TREE, 7, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a8e0d, -1
+	person_event SPRITE_WEIRD_TREE, 12, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerTwinsAnnandanne1, -1
+	person_event SPRITE_WEIRD_TREE, 12, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerTwinsAnnandanne2, -1
+	person_event SPRITE_YOUNGSTER, 6, 6, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerPsychicGreg, -1
+	person_event SPRITE_FRUIT_TREE, 5, 13, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a8e09, -1
+	person_event SPRITE_BUG_CATCHER, 8, 16, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SunnyScript, EVENT_ROUTE_37_SUNNY_OF_SUNDAY
+	person_event SPRITE_FRUIT_TREE, 5, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a8e0b, -1
+	person_event SPRITE_FRUIT_TREE, 7, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a8e0d, -1
--- a/maps/Route38.asm
+++ b/maps/Route38.asm
@@ -311,7 +311,7 @@
 	jumptext UnknownText_0x1a2324
 
 FruitTreeScript_0x1a1f33:
-	fruittree $3
+	fruittree FRUITTREE_ROUTE_38
 
 Bird_keeperTobySeenText:
 	text "Fly high into the"
@@ -482,10 +482,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_STANDING_YOUNGSTER, 1, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerSchoolboyChad1, -1
-	person_event SPRITE_LASS, 3, 15, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerLassDana1, -1
-	person_event SPRITE_STANDING_YOUNGSTER, 15, 12, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerBird_keeperToby, -1
-	person_event SPRITE_BUENA, 9, 19, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerBeautyValerie, -1
-	person_event SPRITE_SAILOR, 5, 24, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerSailorHarry, -1
-	person_event SPRITE_FRUIT_TREE, 10, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a1f33, -1
-	person_event SPRITE_BUENA, 8, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerBeautyOlivia, -1
+	person_event SPRITE_STANDING_YOUNGSTER, 1, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerSchoolboyChad1, -1
+	person_event SPRITE_LASS, 3, 15, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerLassDana1, -1
+	person_event SPRITE_STANDING_YOUNGSTER, 15, 12, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerBird_keeperToby, -1
+	person_event SPRITE_BUENA, 9, 19, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerBeautyValerie, -1
+	person_event SPRITE_SAILOR, 5, 24, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerSailorHarry, -1
+	person_event SPRITE_FRUIT_TREE, 10, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a1f33, -1
+	person_event SPRITE_BUENA, 8, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerBeautyOlivia, -1
--- a/maps/Route38EcruteakGate.asm
+++ b/maps/Route38EcruteakGate.asm
@@ -40,4 +40,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, OfficerScript_0x9cbd7, -1
+	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, OfficerScript_0x9cbd7, -1
--- a/maps/Route39.asm
+++ b/maps/Route39.asm
@@ -165,7 +165,7 @@
 	jumptext UnknownText_0x1a6036
 
 FruitTreeScript_0x1a5bf4:
-	fruittree $f
+	fruittree FRUITTREE_ROUTE_39
 
 MapRoute39SignpostItem3:
 	dwb EVENT_ROUTE_39_HIDDEN_NUGGET, NUGGET
@@ -353,13 +353,13 @@
 
 .PersonEvents:
 	db 10
-	person_event SPRITE_SAILOR, 29, 13, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 5, TrainerSailorEugene, -1
-	person_event SPRITE_POKEFAN_M, 22, 10, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerPokefanmDerek1, -1
-	person_event SPRITE_POKEFAN_F, 19, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerPokefanfRuth, -1
-	person_event SPRITE_TAUROS, 12, 3, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, TaurosScript_0x1a5af5, -1
-	person_event SPRITE_TAUROS, 11, 6, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, TaurosScript_0x1a5af5, -1
-	person_event SPRITE_TAUROS, 15, 4, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, TaurosScript_0x1a5af5, -1
-	person_event SPRITE_TAUROS, 13, 8, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, TaurosScript_0x1a5af5, -1
-	person_event SPRITE_STANDING_YOUNGSTER, 7, 13, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 1, TrainerPsychicNorman, -1
-	person_event SPRITE_FRUIT_TREE, 3, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a5bf4, -1
-	person_event SPRITE_POKEFAN_F, 22, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanFScript_0x1a5bbe, -1
+	person_event SPRITE_SAILOR, 29, 13, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 5, TrainerSailorEugene, -1
+	person_event SPRITE_POKEFAN_M, 22, 10, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerPokefanmDerek1, -1
+	person_event SPRITE_POKEFAN_F, 19, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerPokefanfRuth, -1
+	person_event SPRITE_TAUROS, 12, 3, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TaurosScript_0x1a5af5, -1
+	person_event SPRITE_TAUROS, 11, 6, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TaurosScript_0x1a5af5, -1
+	person_event SPRITE_TAUROS, 15, 4, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TaurosScript_0x1a5af5, -1
+	person_event SPRITE_TAUROS, 13, 8, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TaurosScript_0x1a5af5, -1
+	person_event SPRITE_STANDING_YOUNGSTER, 7, 13, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 1, TrainerPsychicNorman, -1
+	person_event SPRITE_FRUIT_TREE, 3, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a5bf4, -1
+	person_event SPRITE_POKEFAN_F, 22, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x1a5bbe, -1
--- a/maps/Route39Barn.asm
+++ b/maps/Route39Barn.asm
@@ -200,6 +200,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_TWIN, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, TwinScript_0x9cc76, -1
-	person_event SPRITE_TWIN, 3, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TwinScript_0x9cc90, -1
-	person_event SPRITE_TAUROS, 3, 3, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, TaurosScript_0x9ccaa, -1
+	person_event SPRITE_TWIN, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TwinScript_0x9cc76, -1
+	person_event SPRITE_TWIN, 3, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TwinScript_0x9cc90, -1
+	person_event SPRITE_TAUROS, 3, 3, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TaurosScript_0x9ccaa, -1
--- a/maps/Route39Farmhouse.asm
+++ b/maps/Route39Farmhouse.asm
@@ -20,7 +20,7 @@
 	checkitem MOOMOO_MILK
 	iftrue UnknownScript_0x9cf08
 	writetext UnknownText_0x9cfe1
-	special Function24ae8
+	special PlaceMoneyTopRightOW
 	yesorno
 	iffalse UnknownScript_0x9cf02
 	checkmoney $0, 500
@@ -28,7 +28,7 @@
 	giveitem MOOMOO_MILK
 	iffalse UnknownScript_0x9cefc
 	takemoney $0, 500
-	special Function24ae8
+	special PlaceMoneyTopRightOW
 	waitbutton
 	playsound SFX_TRANSACTION
 	writetext UnknownText_0x9d05d
@@ -207,5 +207,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_POKEFAN_M, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, PokefanMScript_0x9ceb4, -1
-	person_event SPRITE_POKEFAN_F, 4, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, PokefanFScript_0x9cf0e, -1
+	person_event SPRITE_POKEFAN_M, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x9ceb4, -1
+	person_event SPRITE_POKEFAN_F, 4, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x9cf0e, -1
--- a/maps/Route4.asm
+++ b/maps/Route4.asm
@@ -133,7 +133,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_YOUNGSTER, 9, 17, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerBird_keeperHank, -1
-	person_event SPRITE_LASS, 8, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 4, TrainerPicnickerHope, -1
-	person_event SPRITE_LASS, 6, 21, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 4, TrainerPicnickerSharon, -1
-	person_event SPRITE_POKE_BALL, 3, 26, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1ae20f, EVENT_ROUTE_4_HP_UP
+	person_event SPRITE_YOUNGSTER, 9, 17, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerBird_keeperHank, -1
+	person_event SPRITE_LASS, 8, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 4, TrainerPicnickerHope, -1
+	person_event SPRITE_LASS, 6, 21, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 4, TrainerPicnickerSharon, -1
+	person_event SPRITE_POKE_BALL, 3, 26, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1ae20f, EVENT_ROUTE_4_HP_UP
--- a/maps/Route40.asm
+++ b/maps/Route40.asm
@@ -68,11 +68,11 @@
 	jumptextfaceplayer UnknownText_0x1a6429
 
 PokefanMScript_0x1a61c7:
-	special Function10630f
-	iftrue UnknownScript_0x1a61d0
+	special Mobile_DummyReturnFalse
+	iftrue .mobile
 	jumptextfaceplayer UnknownText_0x1a646a
 
-UnknownScript_0x1a61d0:
+.mobile:
 	jumptextfaceplayer UnknownText_0x1a649b
 
 LassScript_0x1a61d3:
@@ -344,15 +344,15 @@
 
 .PersonEvents:
 	db 12
-	person_event SPRITE_OLIVINE_RIVAL, 15, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerSwimmermSimon, -1
-	person_event SPRITE_OLIVINE_RIVAL, 30, 18, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 5, TrainerSwimmermRandall, -1
-	person_event SPRITE_SWIMMER_GIRL, 19, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 4, TrainerSwimmerfElaine, -1
-	person_event SPRITE_SWIMMER_GIRL, 25, 10, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerSwimmerfPaula, -1
-	person_event SPRITE_ROCK, 11, 7, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, Route40Rock, -1
-	person_event SPRITE_ROCK, 9, 6, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, Route40Rock, -1
-	person_event SPRITE_ROCK, 8, 7, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, 0, 0, Route40Rock, -1
-	person_event SPRITE_LASS, 13, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, LassScript_0x1a61c4, -1
-	person_event SPRITE_BUENA, 10, 8, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, MonicaScript, EVENT_ROUTE_40_MONICA_OF_MONDAY
-	person_event SPRITE_POKEFAN_M, 6, 7, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, PokefanMScript_0x1a61c7, -1
-	person_event SPRITE_LASS, 4, 13, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x1a61d3, -1
-	person_event SPRITE_STANDING_YOUNGSTER, 9, 16, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, StandingYoungsterScript_0x1a61d6, EVENT_BATTLE_TOWER_OUTSIDE_SAILOR
+	person_event SPRITE_OLIVINE_RIVAL, 15, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerSwimmermSimon, -1
+	person_event SPRITE_OLIVINE_RIVAL, 30, 18, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 5, TrainerSwimmermRandall, -1
+	person_event SPRITE_SWIMMER_GIRL, 19, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 4, TrainerSwimmerfElaine, -1
+	person_event SPRITE_SWIMMER_GIRL, 25, 10, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerSwimmerfPaula, -1
+	person_event SPRITE_ROCK, 11, 7, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, Route40Rock, -1
+	person_event SPRITE_ROCK, 9, 6, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, Route40Rock, -1
+	person_event SPRITE_ROCK, 8, 7, SPRITEMOVEDATA_SMASHABLE_ROCK, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, Route40Rock, -1
+	person_event SPRITE_LASS, 13, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x1a61c4, -1
+	person_event SPRITE_BUENA, 10, 8, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, MonicaScript, EVENT_ROUTE_40_MONICA_OF_MONDAY
+	person_event SPRITE_POKEFAN_M, 6, 7, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x1a61c7, -1
+	person_event SPRITE_LASS, 4, 13, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x1a61d3, -1
+	person_event SPRITE_STANDING_YOUNGSTER, 9, 16, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, StandingYoungsterScript_0x1a61d6, EVENT_BATTLE_TOWER_OUTSIDE_SAILOR
--- a/maps/Route40BattleTowerGate.asm
+++ b/maps/Route40BattleTowerGate.asm
@@ -88,5 +88,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_ROCKER, 3, 3, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, RockerScript_0x9f669, EVENT_BATTLE_TOWER_OUTSIDE_SAILOR
-	person_event SPRITE_TWIN, 5, 7, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, TwinScript_0x9f66c, -1
+	person_event SPRITE_ROCKER, 3, 3, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, RockerScript_0x9f669, EVENT_BATTLE_TOWER_OUTSIDE_SAILOR
+	person_event SPRITE_TWIN, 5, 7, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, TwinScript_0x9f66c, -1
--- a/maps/Route41.asm
+++ b/maps/Route41.asm
@@ -349,13 +349,13 @@
 
 .PersonEvents:
 	db 10
-	person_event SPRITE_OLIVINE_RIVAL, 6, 32, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerSwimmermCharlie, -1
-	person_event SPRITE_OLIVINE_RIVAL, 8, 46, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerSwimmermGeorge, -1
-	person_event SPRITE_OLIVINE_RIVAL, 26, 20, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerSwimmermBerke, -1
-	person_event SPRITE_OLIVINE_RIVAL, 30, 32, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerSwimmermKirk, -1
-	person_event SPRITE_OLIVINE_RIVAL, 46, 19, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerSwimmermMathew, -1
-	person_event SPRITE_SWIMMER_GIRL, 4, 17, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerSwimmerfKaylee, -1
-	person_event SPRITE_SWIMMER_GIRL, 19, 23, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerSwimmerfSusie, -1
-	person_event SPRITE_SWIMMER_GIRL, 34, 27, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerSwimmerfDenise, -1
-	person_event SPRITE_SWIMMER_GIRL, 28, 44, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 4, TrainerSwimmerfKara, -1
-	person_event SPRITE_SWIMMER_GIRL, 50, 9, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 2, TrainerSwimmerfWendy, -1
+	person_event SPRITE_OLIVINE_RIVAL, 6, 32, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerSwimmermCharlie, -1
+	person_event SPRITE_OLIVINE_RIVAL, 8, 46, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerSwimmermGeorge, -1
+	person_event SPRITE_OLIVINE_RIVAL, 26, 20, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerSwimmermBerke, -1
+	person_event SPRITE_OLIVINE_RIVAL, 30, 32, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerSwimmermKirk, -1
+	person_event SPRITE_OLIVINE_RIVAL, 46, 19, SPRITEMOVEDATA_SPINCOUNTERCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerSwimmermMathew, -1
+	person_event SPRITE_SWIMMER_GIRL, 4, 17, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerSwimmerfKaylee, -1
+	person_event SPRITE_SWIMMER_GIRL, 19, 23, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerSwimmerfSusie, -1
+	person_event SPRITE_SWIMMER_GIRL, 34, 27, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerSwimmerfDenise, -1
+	person_event SPRITE_SWIMMER_GIRL, 28, 44, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 4, TrainerSwimmerfKara, -1
+	person_event SPRITE_SWIMMER_GIRL, 50, 9, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 2, TrainerSwimmerfWendy, -1
--- a/maps/Route42.asm
+++ b/maps/Route42.asm
@@ -194,13 +194,13 @@
 	db SUPER_POTION, 1
 
 FruitTreeScript_0x1a934d:
-	fruittree $15
+	fruittree FRUITTREE_ROUTE_42_1
 
 FruitTreeScript_0x1a934f:
-	fruittree $16
+	fruittree FRUITTREE_ROUTE_42_2
 
 FruitTreeScript_0x1a9351:
-	fruittree $17
+	fruittree FRUITTREE_ROUTE_42_3
 
 MapRoute42SignpostItem4:
 	dwb EVENT_ROUTE_42_HIDDEN_MAX_POTION, MAX_POTION
@@ -336,12 +336,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_FISHER, 10, 40, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerFisherTully1, -1
-	person_event SPRITE_POKEFAN_M, 9, 51, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerHikerBenjamin, -1
-	person_event SPRITE_SUPER_NERD, 8, 47, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPokemaniacShane, -1
-	person_event SPRITE_FRUIT_TREE, 16, 27, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a934d, -1
-	person_event SPRITE_FRUIT_TREE, 16, 28, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a934f, -1
-	person_event SPRITE_FRUIT_TREE, 16, 29, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a9351, -1
-	person_event SPRITE_POKE_BALL, 4, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a9349, EVENT_ROUTE_42_ULTRA_BALL
-	person_event SPRITE_POKE_BALL, 8, 33, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a934b, EVENT_ROUTE_42_SUPER_POTION
-	person_event SPRITE_SUICUNE, 16, 26, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ObjectEvent, EVENT_SAW_SUICUNE_ON_ROUTE_42
+	person_event SPRITE_FISHER, 10, 40, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerFisherTully1, -1
+	person_event SPRITE_POKEFAN_M, 9, 51, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerHikerBenjamin, -1
+	person_event SPRITE_SUPER_NERD, 8, 47, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPokemaniacShane, -1
+	person_event SPRITE_FRUIT_TREE, 16, 27, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a934d, -1
+	person_event SPRITE_FRUIT_TREE, 16, 28, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a934f, -1
+	person_event SPRITE_FRUIT_TREE, 16, 29, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a9351, -1
+	person_event SPRITE_POKE_BALL, 4, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a9349, EVENT_ROUTE_42_ULTRA_BALL
+	person_event SPRITE_POKE_BALL, 8, 33, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a934b, EVENT_ROUTE_42_SUPER_POTION
+	person_event SPRITE_SUICUNE, 16, 26, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_SAW_SUICUNE_ON_ROUTE_42
--- a/maps/Route42EcruteakGate.asm
+++ b/maps/Route42EcruteakGate.asm
@@ -35,4 +35,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, OfficerScript_0x19a4b5, -1
+	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, OfficerScript_0x19a4b5, -1
--- a/maps/Route43.asm
+++ b/maps/Route43.asm
@@ -312,7 +312,7 @@
 	jumptext UnknownText_0x19d6c9
 
 FruitTreeScript_0x19d266:
-	fruittree $8
+	fruittree FRUITTREE_ROUTE_43
 
 ItemFragment_0x19d268:
 	db MAX_ETHER, 1
@@ -516,11 +516,11 @@
 
 .PersonEvents:
 	db 8
-	person_event SPRITE_SUPER_NERD, 5, 13, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerPokemaniacBen, -1
-	person_event SPRITE_SUPER_NERD, 20, 13, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPokemaniacBrent1, -1
-	person_event SPRITE_SUPER_NERD, 7, 14, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerPokemaniacRon, -1
-	person_event SPRITE_FISHER, 16, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 4, TrainerFisherMarvin, -1
-	person_event SPRITE_LASS, 25, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 2, TrainerPicnickerTiffany3, -1
-	person_event SPRITE_YOUNGSTER, 40, 13, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerCamperSpencer, -1
-	person_event SPRITE_FRUIT_TREE, 26, 1, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x19d266, -1
-	person_event SPRITE_POKE_BALL, 32, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x19d268, EVENT_ROUTE_43_MAX_ETHER
+	person_event SPRITE_SUPER_NERD, 5, 13, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerPokemaniacBen, -1
+	person_event SPRITE_SUPER_NERD, 20, 13, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPokemaniacBrent1, -1
+	person_event SPRITE_SUPER_NERD, 7, 14, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerPokemaniacRon, -1
+	person_event SPRITE_FISHER, 16, 4, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 4, TrainerFisherMarvin, -1
+	person_event SPRITE_LASS, 25, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 2, TrainerPicnickerTiffany3, -1
+	person_event SPRITE_YOUNGSTER, 40, 13, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerCamperSpencer, -1
+	person_event SPRITE_FRUIT_TREE, 26, 1, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x19d266, -1
+	person_event SPRITE_POKE_BALL, 32, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x19d268, EVENT_ROUTE_43_MAX_ETHER
--- a/maps/Route43Gate.asm
+++ b/maps/Route43Gate.asm
@@ -264,6 +264,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, OfficerScript_0x19ac85, EVENT_LAKE_OF_RAGE_CIVILIANS
-	person_event SPRITE_ROCKET, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, RocketScript_0x19ac82, EVENT_ROUTE_43_GATE_ROCKETS
-	person_event SPRITE_ROCKET, 4, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, RocketScript_0x19ac82, EVENT_ROUTE_43_GATE_ROCKETS
+	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, OfficerScript_0x19ac85, EVENT_LAKE_OF_RAGE_CIVILIANS
+	person_event SPRITE_ROCKET, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RocketScript_0x19ac82, EVENT_ROUTE_43_GATE_ROCKETS
+	person_event SPRITE_ROCKET, 4, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RocketScript_0x19ac82, EVENT_ROUTE_43_GATE_ROCKETS
--- a/maps/Route43MahoganyGate.asm
+++ b/maps/Route43MahoganyGate.asm
@@ -54,4 +54,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, OfficerScript_0x19ab0b, -1
+	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, OfficerScript_0x19ab0b, -1
--- a/maps/Route44.asm
+++ b/maps/Route44.asm
@@ -293,7 +293,7 @@
 	jumptext UnknownText_0x19dfcc
 
 FruitTreeScript_0x19da40:
-	fruittree $10
+	fruittree FRUITTREE_ROUTE_44
 
 ItemFragment_0x19da42:
 	db MAX_REVIVE, 1
@@ -513,14 +513,14 @@
 
 .PersonEvents:
 	db 11
-	person_event SPRITE_FISHER, 3, 35, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerFisherWilton1, -1
-	person_event SPRITE_FISHER, 13, 19, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerFisherEdgar, -1
-	person_event SPRITE_YOUNGSTER, 9, 10, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPsychicPhil, -1
-	person_event SPRITE_SUPER_NERD, 2, 43, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerPokemaniacZach, -1
-	person_event SPRITE_YOUNGSTER, 5, 51, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 2, TrainerBird_keeperVance1, -1
-	person_event SPRITE_COOLTRAINER_M, 15, 41, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 5, TrainerCooltrainermAllen, -1
-	person_event SPRITE_COOLTRAINER_F, 14, 31, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 5, TrainerCooltrainerfCybil, -1
-	person_event SPRITE_FRUIT_TREE, 5, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x19da40, -1
-	person_event SPRITE_POKE_BALL, 8, 30, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x19da42, EVENT_ROUTE_44_MAX_REVIVE
-	person_event SPRITE_POKE_BALL, 4, 45, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x19da44, EVENT_ROUTE_44_ULTRA_BALL
-	person_event SPRITE_POKE_BALL, 9, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x19da46, EVENT_ROUTE_44_MAX_REPEL
+	person_event SPRITE_FISHER, 3, 35, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerFisherWilton1, -1
+	person_event SPRITE_FISHER, 13, 19, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerFisherEdgar, -1
+	person_event SPRITE_YOUNGSTER, 9, 10, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPsychicPhil, -1
+	person_event SPRITE_SUPER_NERD, 2, 43, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerPokemaniacZach, -1
+	person_event SPRITE_YOUNGSTER, 5, 51, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 2, TrainerBird_keeperVance1, -1
+	person_event SPRITE_COOLTRAINER_M, 15, 41, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 5, TrainerCooltrainermAllen, -1
+	person_event SPRITE_COOLTRAINER_F, 14, 31, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 5, TrainerCooltrainerfCybil, -1
+	person_event SPRITE_FRUIT_TREE, 5, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x19da40, -1
+	person_event SPRITE_POKE_BALL, 8, 30, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x19da42, EVENT_ROUTE_44_MAX_REVIVE
+	person_event SPRITE_POKE_BALL, 4, 45, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x19da44, EVENT_ROUTE_44_ULTRA_BALL
+	person_event SPRITE_POKE_BALL, 9, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x19da46, EVENT_ROUTE_44_MAX_REPEL
--- a/maps/Route45.asm
+++ b/maps/Route45.asm
@@ -282,7 +282,7 @@
 	jumptext UnknownText_0x19e8fe
 
 FruitTreeScript_0x19e294:
-	fruittree $c
+	fruittree FRUITTREE_ROUTE_45
 
 ItemFragment_0x19e296:
 	db NUGGET, 1
@@ -535,16 +535,16 @@
 
 .PersonEvents:
 	db 13
-	person_event SPRITE_POKEFAN_M, 16, 10, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 1, TrainerHikerErik, -1
-	person_event SPRITE_POKEFAN_M, 65, 15, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerHikerMichael, -1
-	person_event SPRITE_POKEFAN_M, 28, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerHikerParry, -1
-	person_event SPRITE_POKEFAN_M, 65, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 1, TrainerHikerTimothy, -1
-	person_event SPRITE_BLACK_BELT, 50, 11, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerBlackbeltKenji, -1
-	person_event SPRITE_COOLTRAINER_M, 18, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerCooltrainermRyan, -1
-	person_event SPRITE_COOLTRAINER_F, 36, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerCooltrainerfKelly, -1
-	person_event SPRITE_FRUIT_TREE, 82, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x19e294, -1
-	person_event SPRITE_POKE_BALL, 51, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x19e296, EVENT_ROUTE_45_NUGGET
-	person_event SPRITE_POKE_BALL, 66, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x19e298, EVENT_ROUTE_45_REVIVE
-	person_event SPRITE_POKE_BALL, 20, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x19e29a, EVENT_ROUTE_45_ELIXER
-	person_event SPRITE_POKE_BALL, 33, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x19e29c, EVENT_ROUTE_45_MAX_POTION
-	person_event SPRITE_YOUNGSTER, 70, 4, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x19e269, -1
+	person_event SPRITE_POKEFAN_M, 16, 10, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 1, TrainerHikerErik, -1
+	person_event SPRITE_POKEFAN_M, 65, 15, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerHikerMichael, -1
+	person_event SPRITE_POKEFAN_M, 28, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerHikerParry, -1
+	person_event SPRITE_POKEFAN_M, 65, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 1, TrainerHikerTimothy, -1
+	person_event SPRITE_BLACK_BELT, 50, 11, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerBlackbeltKenji, -1
+	person_event SPRITE_COOLTRAINER_M, 18, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerCooltrainermRyan, -1
+	person_event SPRITE_COOLTRAINER_F, 36, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerCooltrainerfKelly, -1
+	person_event SPRITE_FRUIT_TREE, 82, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x19e294, -1
+	person_event SPRITE_POKE_BALL, 51, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x19e296, EVENT_ROUTE_45_NUGGET
+	person_event SPRITE_POKE_BALL, 66, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x19e298, EVENT_ROUTE_45_REVIVE
+	person_event SPRITE_POKE_BALL, 20, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x19e29a, EVENT_ROUTE_45_ELIXER
+	person_event SPRITE_POKE_BALL, 33, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x19e29c, EVENT_ROUTE_45_MAX_POTION
+	person_event SPRITE_YOUNGSTER, 70, 4, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x19e269, -1
--- a/maps/Route46.asm
+++ b/maps/Route46.asm
@@ -157,10 +157,10 @@
 	db X_SPEED, 1
 
 FruitTreeScript_0x1a978f:
-	fruittree $4
+	fruittree FRUITTREE_ROUTE_46_1
 
 FruitTreeScript_0x1a9791:
-	fruittree $a
+	fruittree FRUITTREE_ROUTE_46_2
 
 HikerBaileySeenText:
 	text "Awright! I'll show"
@@ -261,9 +261,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_POKEFAN_M, 19, 12, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerHikerBailey, -1
-	person_event SPRITE_YOUNGSTER, 14, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 2, TrainerCamperTed, -1
-	person_event SPRITE_LASS, 13, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 2, TrainerPicnickerErin1, -1
-	person_event SPRITE_FRUIT_TREE, 5, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a978f, -1
-	person_event SPRITE_FRUIT_TREE, 6, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a9791, -1
-	person_event SPRITE_POKE_BALL, 15, 1, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a978d, EVENT_ROUTE_46_X_SPEED
+	person_event SPRITE_POKEFAN_M, 19, 12, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerHikerBailey, -1
+	person_event SPRITE_YOUNGSTER, 14, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 2, TrainerCamperTed, -1
+	person_event SPRITE_LASS, 13, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 2, TrainerPicnickerErin1, -1
+	person_event SPRITE_FRUIT_TREE, 5, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a978f, -1
+	person_event SPRITE_FRUIT_TREE, 6, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a9791, -1
+	person_event SPRITE_POKE_BALL, 15, 1, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a978d, EVENT_ROUTE_46_X_SPEED
--- a/maps/Route5.asm
+++ b/maps/Route5.asm
@@ -57,4 +57,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKEFAN_M, 16, 17, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanMScript_0x1adb19, EVENT_ROUTE_5_6_POKEFAN_M_BLOCKS_UNDERGROUND_PATH
+	person_event SPRITE_POKEFAN_M, 16, 17, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x1adb19, EVENT_ROUTE_5_6_POKEFAN_M_BLOCKS_UNDERGROUND_PATH
--- a/maps/Route5CleanseTagSpeechHouse.asm
+++ b/maps/Route5CleanseTagSpeechHouse.asm
@@ -75,5 +75,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_GRANNY, 5, 2, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, GrannyScript_0x18b634, -1
-	person_event SPRITE_TEACHER, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, TeacherScript_0x18b64f, -1
+	person_event SPRITE_GRANNY, 5, 2, SPRITEMOVEDATA_SPINCLOCKWISE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, GrannyScript_0x18b634, -1
+	person_event SPRITE_TEACHER, 3, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, TeacherScript_0x18b64f, -1
--- a/maps/Route5SaffronCityGate.asm
+++ b/maps/Route5SaffronCityGate.asm
@@ -36,4 +36,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, OfficerScript_0x18b5b9, -1
+	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, OfficerScript_0x18b5b9, -1
--- a/maps/Route5UndergroundEntrance.asm
+++ b/maps/Route5UndergroundEntrance.asm
@@ -34,4 +34,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_TEACHER, 2, 2, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TeacherScript_0x18b555, -1
+	person_event SPRITE_TEACHER, 2, 2, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TeacherScript_0x18b555, -1
--- a/maps/Route6.asm
+++ b/maps/Route6.asm
@@ -104,6 +104,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_POKEFAN_M, 4, 17, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 2, PokefanMScript_0x1ad951, EVENT_ROUTE_5_6_POKEFAN_M_BLOCKS_UNDERGROUND_PATH
-	person_event SPRITE_POKEFAN_M, 12, 9, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 0, TrainerPokefanmRex, -1
-	person_event SPRITE_POKEFAN_M, 12, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 0, TrainerPokefanmAllan, -1
+	person_event SPRITE_POKEFAN_M, 4, 17, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 2, PokefanMScript_0x1ad951, EVENT_ROUTE_5_6_POKEFAN_M_BLOCKS_UNDERGROUND_PATH
+	person_event SPRITE_POKEFAN_M, 12, 9, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 0, TrainerPokefanmRex, -1
+	person_event SPRITE_POKEFAN_M, 12, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 0, TrainerPokefanmAllan, -1
--- a/maps/Route6SaffronGate.asm
+++ b/maps/Route6SaffronGate.asm
@@ -75,4 +75,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, OfficerScript_0x1926ea, -1
+	person_event SPRITE_OFFICER, 4, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, OfficerScript_0x1926ea, -1
--- a/maps/Route7SaffronGate.asm
+++ b/maps/Route7SaffronGate.asm
@@ -61,4 +61,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, OfficerScript_0x73518, -1
+	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, OfficerScript_0x73518, -1
--- a/maps/Route8.asm
+++ b/maps/Route8.asm
@@ -67,7 +67,7 @@
 	jumptext UnknownText_0x6c2b7
 
 FruitTreeScript_0x6c06c:
-	fruittree $1b
+	fruittree FRUITTREE_ROUTE_8
 
 BikerDwayneSeenText:
 	text "We're the KANTO"
@@ -183,9 +183,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_BIKER, 8, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 5, TrainerBikerDwayne, -1
-	person_event SPRITE_BIKER, 9, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 5, TrainerBikerHarris, -1
-	person_event SPRITE_BIKER, 10, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 5, TrainerBikerZeke, -1
-	person_event SPRITE_SUPER_NERD, 2, 23, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerSupernerdSam, -1
-	person_event SPRITE_SUPER_NERD, 12, 31, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 4, TrainerSupernerdTom, -1
-	person_event SPRITE_FRUIT_TREE, 5, 33, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x6c06c, -1
+	person_event SPRITE_BIKER, 8, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 5, TrainerBikerDwayne, -1
+	person_event SPRITE_BIKER, 9, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 5, TrainerBikerHarris, -1
+	person_event SPRITE_BIKER, 10, 10, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 5, TrainerBikerZeke, -1
+	person_event SPRITE_SUPER_NERD, 2, 23, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerSupernerdSam, -1
+	person_event SPRITE_SUPER_NERD, 12, 31, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 4, TrainerSupernerdTom, -1
+	person_event SPRITE_FRUIT_TREE, 5, 33, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x6c06c, -1
--- a/maps/Route8SaffronGate.asm
+++ b/maps/Route8SaffronGate.asm
@@ -35,4 +35,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, OfficerScript_0x7f416, -1
+	person_event SPRITE_OFFICER, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, OfficerScript_0x7f416, -1
--- a/maps/Route9.asm
+++ b/maps/Route9.asm
@@ -216,9 +216,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_YOUNGSTER, 11, 23, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerCamperDean, -1
-	person_event SPRITE_LASS, 8, 39, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 3, TrainerPicnickerHeidi, -1
-	person_event SPRITE_YOUNGSTER, 4, 11, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 5, TrainerCamperSid, -1
-	person_event SPRITE_LASS, 15, 12, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 1, TrainerPicnickerEdna, -1
-	person_event SPRITE_POKEFAN_M, 3, 28, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerHikerTim, -1
-	person_event SPRITE_POKEFAN_M, 15, 36, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 4, TrainerHikerSidney, -1
+	person_event SPRITE_YOUNGSTER, 11, 23, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerCamperDean, -1
+	person_event SPRITE_LASS, 8, 39, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 3, TrainerPicnickerHeidi, -1
+	person_event SPRITE_YOUNGSTER, 4, 11, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 5, TrainerCamperSid, -1
+	person_event SPRITE_LASS, 15, 12, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 1, TrainerPicnickerEdna, -1
+	person_event SPRITE_POKEFAN_M, 3, 28, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerHikerTim, -1
+	person_event SPRITE_POKEFAN_M, 15, 36, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 4, TrainerHikerSidney, -1
--- a/maps/RuinsofAlphAerodactylItemRoom.asm
+++ b/maps/RuinsofAlphAerodactylItemRoom.asm
@@ -47,7 +47,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_POKE_BALL, 6, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59ab6, EVENT_PICKED_UP_GOLD_BERRY_FROM_AERODACTYL_ITEM_ROOM
-	person_event SPRITE_POKE_BALL, 6, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59ab8, EVENT_PICKED_UP_MOON_STONE_FROM_AERODACTYL_ITEM_ROOM
-	person_event SPRITE_POKE_BALL, 4, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59aba, EVENT_PICKED_UP_HEAL_POWDER_FROM_AERODACTYL_ITEM_ROOM
-	person_event SPRITE_POKE_BALL, 4, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59abc, EVENT_PICKED_UP_ENERGY_ROOT_FROM_AERODACTYL_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 6, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59ab6, EVENT_PICKED_UP_GOLD_BERRY_FROM_AERODACTYL_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 6, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59ab8, EVENT_PICKED_UP_MOON_STONE_FROM_AERODACTYL_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 4, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59aba, EVENT_PICKED_UP_HEAL_POWDER_FROM_AERODACTYL_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 4, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59abc, EVENT_PICKED_UP_ENERGY_ROOT_FROM_AERODACTYL_ITEM_ROOM
--- a/maps/RuinsofAlphHoOhItemRoom.asm
+++ b/maps/RuinsofAlphHoOhItemRoom.asm
@@ -47,7 +47,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_POKE_BALL, 6, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59918, EVENT_PICKED_UP_GOLD_BERRY_FROM_HO_OH_ITEM_ROOM
-	person_event SPRITE_POKE_BALL, 6, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5991a, EVENT_PICKED_UP_MYSTERYBERRY_FROM_HO_OH_ITEM_ROOM
-	person_event SPRITE_POKE_BALL, 4, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5991c, EVENT_PICKED_UP_REVIVAL_HERB_FROM_HO_OH_ITEM_ROOM
-	person_event SPRITE_POKE_BALL, 4, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5991e, EVENT_PICKED_UP_CHARCOAL_FROM_HO_OH_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 6, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59918, EVENT_PICKED_UP_GOLD_BERRY_FROM_HO_OH_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 6, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5991a, EVENT_PICKED_UP_MYSTERYBERRY_FROM_HO_OH_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 4, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5991c, EVENT_PICKED_UP_REVIVAL_HERB_FROM_HO_OH_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 4, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5991e, EVENT_PICKED_UP_CHARCOAL_FROM_HO_OH_ITEM_ROOM
--- a/maps/RuinsofAlphInnerChamber.asm
+++ b/maps/RuinsofAlphInnerChamber.asm
@@ -125,6 +125,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_FISHER, 7, 3, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x58f7d, EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
-	person_event SPRITE_TEACHER, 13, 14, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, TeacherScript_0x58f80, EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
-	person_event SPRITE_GRAMPS, 19, 11, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, GrampsScript_0x58f83, EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
+	person_event SPRITE_FISHER, 7, 3, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x58f7d, EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
+	person_event SPRITE_TEACHER, 13, 14, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x58f80, EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
+	person_event SPRITE_GRAMPS, 19, 11, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, GrampsScript_0x58f83, EVENT_RUINS_OF_ALPH_INNER_CHAMBER_TOURISTS
--- a/maps/RuinsofAlphKabutoChamber.asm
+++ b/maps/RuinsofAlphKabutoChamber.asm
@@ -284,5 +284,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_RECEPTIONIST, 5, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ReceptionistScript_0x58769, EVENT_RUINS_OF_ALPH_KABUTO_CHAMBER_RECEPTIONIST
-	person_event SPRITE_SCIENTIST, 1, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ScientistScript_0x587a8, -1
+	person_event SPRITE_RECEPTIONIST, 5, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x58769, EVENT_RUINS_OF_ALPH_KABUTO_CHAMBER_RECEPTIONIST
+	person_event SPRITE_SCIENTIST, 1, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ScientistScript_0x587a8, -1
--- a/maps/RuinsofAlphKabutoItemRoom.asm
+++ b/maps/RuinsofAlphKabutoItemRoom.asm
@@ -47,7 +47,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_POKE_BALL, 6, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x599a2, EVENT_PICKED_UP_BERRY_FROM_KABUTO_ITEM_ROOM
-	person_event SPRITE_POKE_BALL, 6, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x599a4, EVENT_PICKED_UP_PSNCUREBERRY_FROM_KABUTO_ITEM_ROOM
-	person_event SPRITE_POKE_BALL, 4, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x599a6, EVENT_PICKED_UP_HEAL_POWDER_FROM_KABUTO_ITEM_ROOM
-	person_event SPRITE_POKE_BALL, 4, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x599a8, EVENT_PICKED_UP_ENERGYPOWDER_FROM_KABUTO_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 6, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x599a2, EVENT_PICKED_UP_BERRY_FROM_KABUTO_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 6, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x599a4, EVENT_PICKED_UP_PSNCUREBERRY_FROM_KABUTO_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 4, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x599a6, EVENT_PICKED_UP_HEAL_POWDER_FROM_KABUTO_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 4, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x599a8, EVENT_PICKED_UP_ENERGYPOWDER_FROM_KABUTO_ITEM_ROOM
--- a/maps/RuinsofAlphOmanyteItemRoom.asm
+++ b/maps/RuinsofAlphOmanyteItemRoom.asm
@@ -47,7 +47,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_POKE_BALL, 6, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59a2c, EVENT_PICKED_UP_MYSTERYBERRY_FROM_OMANYTE_ITEM_ROOM
-	person_event SPRITE_POKE_BALL, 6, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59a2e, EVENT_PICKED_UP_MYSTIC_WATER_FROM_OMANYTE_ITEM_ROOM
-	person_event SPRITE_POKE_BALL, 4, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59a30, EVENT_PICKED_UP_STARDUST_FROM_OMANYTE_ITEM_ROOM
-	person_event SPRITE_POKE_BALL, 4, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59a32, EVENT_PICKED_UP_STAR_PIECE_FROM_OMANYTE_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 6, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59a2c, EVENT_PICKED_UP_MYSTERYBERRY_FROM_OMANYTE_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 6, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59a2e, EVENT_PICKED_UP_MYSTIC_WATER_FROM_OMANYTE_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 4, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59a30, EVENT_PICKED_UP_STARDUST_FROM_OMANYTE_ITEM_ROOM
+	person_event SPRITE_POKE_BALL, 4, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59a32, EVENT_PICKED_UP_STAR_PIECE_FROM_OMANYTE_ITEM_ROOM
--- a/maps/RuinsofAlphOutside.asm
+++ b/maps/RuinsofAlphOutside.asm
@@ -311,8 +311,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_YOUNGSTER, 20, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 2, 1, TrainerPsychicNathan, -1
-	person_event SPRITE_SCIENTIST, 15, 11, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ScientistScript_0x58043, EVENT_RUINS_OF_ALPH_OUTSIDE_SCIENTIST
-	person_event SPRITE_FISHER, 17, 13, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x58061, EVENT_RUINS_OF_ALPH_OUTSIDE_TOURIST_FISHER
-	person_event SPRITE_YOUNGSTER, 11, 14, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, YoungsterScript_0x58076, EVENT_RUINS_OF_ALPH_OUTSIDE_TOURIST_YOUNGSTERS
-	person_event SPRITE_YOUNGSTER, 8, 12, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x5807e, EVENT_RUINS_OF_ALPH_OUTSIDE_TOURIST_YOUNGSTERS
+	person_event SPRITE_YOUNGSTER, 20, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 1, TrainerPsychicNathan, -1
+	person_event SPRITE_SCIENTIST, 15, 11, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ScientistScript_0x58043, EVENT_RUINS_OF_ALPH_OUTSIDE_SCIENTIST
+	person_event SPRITE_FISHER, 17, 13, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x58061, EVENT_RUINS_OF_ALPH_OUTSIDE_TOURIST_FISHER
+	person_event SPRITE_YOUNGSTER, 11, 14, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x58076, EVENT_RUINS_OF_ALPH_OUTSIDE_TOURIST_YOUNGSTERS
+	person_event SPRITE_YOUNGSTER, 8, 12, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x5807e, EVENT_RUINS_OF_ALPH_OUTSIDE_TOURIST_YOUNGSTERS
--- a/maps/RuinsofAlphResearchCenter.asm
+++ b/maps/RuinsofAlphResearchCenter.asm
@@ -412,6 +412,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_SCIENTIST, 5, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ScientistScript_0x591e5, -1
-	person_event SPRITE_SCIENTIST, 2, 5, SPRITEMOVEDATA_WANDER, 1, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ScientistScript_0x59214, -1
-	person_event SPRITE_SCIENTIST, 5, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ScientistScript_0x591d1, EVENT_RUINS_OF_ALPH_RESEARCH_CENTER_SCIENTIST
+	person_event SPRITE_SCIENTIST, 5, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ScientistScript_0x591e5, -1
+	person_event SPRITE_SCIENTIST, 2, 5, SPRITEMOVEDATA_WANDER, 1, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ScientistScript_0x59214, -1
+	person_event SPRITE_SCIENTIST, 5, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ScientistScript_0x591d1, EVENT_RUINS_OF_ALPH_RESEARCH_CENTER_SCIENTIST
--- a/maps/SafariZoneWardensHome.asm
+++ b/maps/SafariZoneWardensHome.asm
@@ -94,4 +94,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_LASS, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, WardensGranddaughter, -1
+	person_event SPRITE_LASS, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, WardensGranddaughter, -1
--- a/maps/SaffronCity.asm
+++ b/maps/SaffronCity.asm
@@ -295,11 +295,11 @@
 
 .PersonEvents:
 	db 8
-	person_event SPRITE_LASS, 14, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, LassScript_0x19932a, -1
-	person_event SPRITE_POKEFAN_M, 30, 19, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, PokefanMScript_0x19933e, -1
-	person_event SPRITE_COOLTRAINER_M, 7, 32, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerMScript_0x199352, -1
-	person_event SPRITE_COOLTRAINER_F, 24, 20, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerFScript_0x199355, -1
-	person_event SPRITE_FISHER, 12, 27, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x199358, -1
-	person_event SPRITE_YOUNGSTER, 19, 15, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, YoungsterScript_0x19936c, -1
-	person_event SPRITE_YOUNGSTER, 22, 35, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x19936f, -1
-	person_event SPRITE_LASS, 8, 19, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x199372, -1
+	person_event SPRITE_LASS, 14, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, LassScript_0x19932a, -1
+	person_event SPRITE_POKEFAN_M, 30, 19, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x19933e, -1
+	person_event SPRITE_COOLTRAINER_M, 7, 32, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x199352, -1
+	person_event SPRITE_COOLTRAINER_F, 24, 20, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x199355, -1
+	person_event SPRITE_FISHER, 12, 27, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x199358, -1
+	person_event SPRITE_YOUNGSTER, 19, 15, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x19936c, -1
+	person_event SPRITE_YOUNGSTER, 22, 35, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x19936f, -1
+	person_event SPRITE_LASS, 8, 19, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x199372, -1
--- a/maps/SaffronGym.asm
+++ b/maps/SaffronGym.asm
@@ -330,9 +330,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_SABRINA, 8, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SabrinaScript_0x189c2e, -1
-	person_event SPRITE_GRANNY, 16, 17, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerMediumRebecca, -1
-	person_event SPRITE_YOUNGSTER, 16, 3, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPsychicFranklin, -1
-	person_event SPRITE_GRANNY, 4, 3, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerMediumDoris, -1
-	person_event SPRITE_YOUNGSTER, 4, 17, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerPsychicJared, -1
-	person_event SPRITE_GYM_GUY, 14, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SaffronGymGuyScript, -1
+	person_event SPRITE_SABRINA, 8, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SabrinaScript_0x189c2e, -1
+	person_event SPRITE_GRANNY, 16, 17, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerMediumRebecca, -1
+	person_event SPRITE_YOUNGSTER, 16, 3, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPsychicFranklin, -1
+	person_event SPRITE_GRANNY, 4, 3, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerMediumDoris, -1
+	person_event SPRITE_YOUNGSTER, 4, 17, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerPsychicJared, -1
+	person_event SPRITE_GYM_GUY, 14, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SaffronGymGuyScript, -1
--- a/maps/SaffronMart.asm
+++ b/maps/SaffronMart.asm
@@ -49,6 +49,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x18a3bf, -1
-	person_event SPRITE_COOLTRAINER_M, 2, 7, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, CooltrainerMScript_0x18a3c6, -1
-	person_event SPRITE_COOLTRAINER_F, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, CooltrainerFScript_0x18a3c9, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x18a3bf, -1
+	person_event SPRITE_COOLTRAINER_M, 2, 7, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x18a3c6, -1
+	person_event SPRITE_COOLTRAINER_F, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x18a3c9, -1
--- a/maps/SaffronPokeCenter1F.asm
+++ b/maps/SaffronPokeCenter1F.asm
@@ -9,11 +9,11 @@
 	jumpstd pokecenternurse
 
 TeacherScript_0x18a480:
-	special Function10630f
-	iftrue UnknownScript_0x18a489
+	special Mobile_DummyReturnFalse
+	iftrue .mobile
 	jumptextfaceplayer UnknownText_0x18a4a3
 
-UnknownScript_0x18a489:
+.mobile:
 	jumptextfaceplayer UnknownText_0x18a532
 
 FisherScript_0x18a48c:
@@ -20,13 +20,13 @@
 	faceplayer
 	loadfont
 	checkevent EVENT_RETURNED_MACHINE_PART
-	iftrue UnknownScript_0x18a49a
+	iftrue .SolvedKantoPowerCrisis
 	writetext UnknownText_0x18a5d3
 	closetext
 	loadmovesprites
 	end
 
-UnknownScript_0x18a49a:
+.SolvedKantoPowerCrisis:
 	writetext UnknownText_0x18a62e
 	closetext
 	loadmovesprites
@@ -123,7 +123,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x18a47d, -1
-	person_event SPRITE_TEACHER, 2, 7, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, TeacherScript_0x18a480, -1
-	person_event SPRITE_FISHER, 6, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, FisherScript_0x18a48c, -1
-	person_event SPRITE_YOUNGSTER, 4, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, YoungsterScript_0x18a4a0, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x18a47d, -1
+	person_event SPRITE_TEACHER, 2, 7, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, TeacherScript_0x18a480, -1
+	person_event SPRITE_FISHER, 6, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, FisherScript_0x18a48c, -1
+	person_event SPRITE_YOUNGSTER, 4, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x18a4a0, -1
--- a/maps/SaffronTrainStation.asm
+++ b/maps/SaffronTrainStation.asm
@@ -231,7 +231,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_OFFICER, 9, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, OfficerScript_0x18a81e, -1
-	person_event SPRITE_GYM_GUY, 14, 10, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, GymGuyScript_0x18a875, -1
-	person_event SPRITE_TEACHER, 11, 6, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, TeacherScript_0x18a889, EVENT_SAFFRON_TRAIN_STATION_POPULATION
-	person_event SPRITE_LASS, 10, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x18a88c, EVENT_SAFFRON_TRAIN_STATION_POPULATION
+	person_event SPRITE_OFFICER, 9, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, OfficerScript_0x18a81e, -1
+	person_event SPRITE_GYM_GUY, 14, 10, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GymGuyScript_0x18a875, -1
+	person_event SPRITE_TEACHER, 11, 6, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x18a889, EVENT_SAFFRON_TRAIN_STATION_POPULATION
+	person_event SPRITE_LASS, 10, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x18a88c, EVENT_SAFFRON_TRAIN_STATION_POPULATION
--- a/maps/SeafoamGym.asm
+++ b/maps/SeafoamGym.asm
@@ -171,5 +171,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_BLAINE, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, BlaineScript_0x1ab4fb, -1
-	person_event SPRITE_GYM_GUY, 5, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SeafoamGymGuyScript, EVENT_SEAFOAM_GYM_GYM_GUY
+	person_event SPRITE_BLAINE, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, BlaineScript_0x1ab4fb, -1
+	person_event SPRITE_GYM_GUY, 5, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SeafoamGymGuyScript, EVENT_SEAFOAM_GYM_GYM_GUY
--- a/maps/SilphCo1F.asm
+++ b/maps/SilphCo1F.asm
@@ -68,5 +68,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_RECEPTIONIST, 2, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ReceptionistScript_0x18abe5, -1
-	person_event SPRITE_OFFICER, 1, 13, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, OfficerScript_0x18abe8, -1
+	person_event SPRITE_RECEPTIONIST, 2, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x18abe5, -1
+	person_event SPRITE_OFFICER, 1, 13, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, OfficerScript_0x18abe8, -1
--- a/maps/SilverCaveItemRooms.asm
+++ b/maps/SilverCaveItemRooms.asm
@@ -28,5 +28,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_POKE_BALL, 3, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c65e, EVENT_SILVER_CAVE_ITEM_ROOMS_MAX_REVIVE
-	person_event SPRITE_POKE_BALL, 11, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c660, EVENT_SILVER_CAVE_ITEM_ROOMS_FULL_RESTORE
+	person_event SPRITE_POKE_BALL, 3, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c65e, EVENT_SILVER_CAVE_ITEM_ROOMS_MAX_REVIVE
+	person_event SPRITE_POKE_BALL, 11, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c660, EVENT_SILVER_CAVE_ITEM_ROOMS_FULL_RESTORE
--- a/maps/SilverCavePokeCenter1F.asm
+++ b/maps/SilverCavePokeCenter1F.asm
@@ -43,5 +43,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x1ae59a, -1
-	person_event SPRITE_GRANNY, 5, 1, SPRITEMOVEDATA_STANDING_LEFT, 1, 2, -1, -1, 0, 0, 0, GrannyScript_0x1ae59d, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x1ae59a, -1
+	person_event SPRITE_GRANNY, 5, 1, SPRITEMOVEDATA_STANDING_LEFT, 1, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrannyScript_0x1ae59d, -1
--- a/maps/SilverCaveRoom1.asm
+++ b/maps/SilverCaveRoom1.asm
@@ -44,7 +44,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_POKE_BALL, 9, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c554, EVENT_SILVER_CAVE_ROOM_1_MAX_ELIXER
-	person_event SPRITE_POKE_BALL, 29, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c556, EVENT_SILVER_CAVE_ROOM_1_PROTEIN
-	person_event SPRITE_POKE_BALL, 30, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c558, EVENT_SILVER_CAVE_ROOM_1_ESCAPE_ROPE
-	person_event SPRITE_POKE_BALL, 18, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c55a, EVENT_SILVER_CAVE_ROOM_1_ULTRA_BALL
+	person_event SPRITE_POKE_BALL, 9, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c554, EVENT_SILVER_CAVE_ROOM_1_MAX_ELIXER
+	person_event SPRITE_POKE_BALL, 29, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c556, EVENT_SILVER_CAVE_ROOM_1_PROTEIN
+	person_event SPRITE_POKE_BALL, 30, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c558, EVENT_SILVER_CAVE_ROOM_1_ESCAPE_ROPE
+	person_event SPRITE_POKE_BALL, 18, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c55a, EVENT_SILVER_CAVE_ROOM_1_ULTRA_BALL
--- a/maps/SilverCaveRoom2.asm
+++ b/maps/SilverCaveRoom2.asm
@@ -38,6 +38,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_POKE_BALL, 10, 24, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c5b2, EVENT_SILVER_CAVE_ROOM_2_CALCIUM
-	person_event SPRITE_POKE_BALL, 24, 22, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c5b4, EVENT_SILVER_CAVE_ROOM_2_ULTRA_BALL
-	person_event SPRITE_POKE_BALL, 20, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c5b6, EVENT_SILVER_CAVE_ROOM_2_PP_UP
+	person_event SPRITE_POKE_BALL, 10, 24, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c5b2, EVENT_SILVER_CAVE_ROOM_2_CALCIUM
+	person_event SPRITE_POKE_BALL, 24, 22, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c5b4, EVENT_SILVER_CAVE_ROOM_2_ULTRA_BALL
+	person_event SPRITE_POKE_BALL, 20, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c5b6, EVENT_SILVER_CAVE_ROOM_2_PP_UP
--- a/maps/SilverCaveRoom3.asm
+++ b/maps/SilverCaveRoom3.asm
@@ -6,7 +6,7 @@
 	db 0
 
 RedScript_0x18c603:
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	faceplayer
 	loadfont
 	writetext UnknownText_0x18c637
@@ -17,7 +17,7 @@
 	startbattle
 	reloadmapmusic
 	returnafterbattle
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	loadfont
 	writetext UnknownText_0x18c63f
 	closetext
@@ -63,4 +63,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_RED, 10, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, RedScript_0x18c603, EVENT_RED_IN_MT_SILVER
+	person_event SPRITE_RED, 10, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, RedScript_0x18c603, EVENT_RED_IN_MT_SILVER
--- a/maps/SlowpokeWellB1F.asm
+++ b/maps/SlowpokeWellB1F.asm
@@ -326,12 +326,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_ROCKET, 7, 15, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM29, EVENT_SLOWPOKE_WELL_ROCKETS
-	person_event SPRITE_ROCKET, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 2, 1, TrainerGruntM1, EVENT_SLOWPOKE_WELL_ROCKETS
-	person_event SPRITE_ROCKET, 6, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 2, 2, TrainerGruntM2, EVENT_SLOWPOKE_WELL_ROCKETS
-	person_event SPRITE_ROCKET_GIRL, 4, 10, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerGruntF1, EVENT_SLOWPOKE_WELL_ROCKETS
-	person_event SPRITE_SLOWPOKE, 4, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SlowpokeScript_0x5a681, EVENT_SLOWPOKE_WELL_SLOWPOKES
-	person_event SPRITE_SLOWPOKE, 2, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SlowpokeScript_0x5a695, EVENT_SLOWPOKE_WELL_SLOWPOKES
-	person_event SPRITE_KURT, 14, 16, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, KurtScript_0x5a5d5, EVENT_SLOWPOKE_WELL_KURT
-	person_event SPRITE_BOULDER, 2, 3, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, SlowpokeWellB1FBoulder, -1
-	person_event SPRITE_POKE_BALL, 3, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5a6a3, EVENT_SLOWPOKE_WELL_B1F_SUPER_POTION
+	person_event SPRITE_ROCKET, 7, 15, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM29, EVENT_SLOWPOKE_WELL_ROCKETS
+	person_event SPRITE_ROCKET, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 1, TrainerGruntM1, EVENT_SLOWPOKE_WELL_ROCKETS
+	person_event SPRITE_ROCKET, 6, 5, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 2, TrainerGruntM2, EVENT_SLOWPOKE_WELL_ROCKETS
+	person_event SPRITE_ROCKET_GIRL, 4, 10, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerGruntF1, EVENT_SLOWPOKE_WELL_ROCKETS
+	person_event SPRITE_SLOWPOKE, 4, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SlowpokeScript_0x5a681, EVENT_SLOWPOKE_WELL_SLOWPOKES
+	person_event SPRITE_SLOWPOKE, 2, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SlowpokeScript_0x5a695, EVENT_SLOWPOKE_WELL_SLOWPOKES
+	person_event SPRITE_KURT, 14, 16, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, KurtScript_0x5a5d5, EVENT_SLOWPOKE_WELL_KURT
+	person_event SPRITE_BOULDER, 2, 3, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SlowpokeWellB1FBoulder, -1
+	person_event SPRITE_POKE_BALL, 3, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5a6a3, EVENT_SLOWPOKE_WELL_B1F_SUPER_POTION
--- a/maps/SlowpokeWellB2F.asm
+++ b/maps/SlowpokeWellB2F.asm
@@ -73,5 +73,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_GYM_GUY, 4, 5, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, 0, 0, 1, GymGuyScript_0x5ad0b, -1
-	person_event SPRITE_POKE_BALL, 5, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5ad28, EVENT_SLOWPOKE_WELL_B2F_TM_RAIN_DANCE
+	person_event SPRITE_GYM_GUY, 4, 5, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 1, GymGuyScript_0x5ad0b, -1
+	person_event SPRITE_POKE_BALL, 5, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5ad28, EVENT_SLOWPOKE_WELL_B2F_TM_RAIN_DANCE
--- a/maps/SoulHouse.asm
+++ b/maps/SoulHouse.asm
@@ -83,7 +83,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_GRAMPS, 2, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GrampsScript_0x7ec47, -1
-	person_event SPRITE_TEACHER, 3, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, TeacherScript_0x7ec4a, -1
-	person_event SPRITE_LASS, 5, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, LassScript_0x7ec4d, -1
-	person_event SPRITE_GRANNY, 3, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GrannyScript_0x7ec50, -1
+	person_event SPRITE_GRAMPS, 2, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GrampsScript_0x7ec47, -1
+	person_event SPRITE_TEACHER, 3, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, TeacherScript_0x7ec4a, -1
+	person_event SPRITE_LASS, 5, 2, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, LassScript_0x7ec4d, -1
+	person_event SPRITE_GRANNY, 3, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GrannyScript_0x7ec50, -1
--- a/maps/SproutTower1F.asm
+++ b/maps/SproutTower1F.asm
@@ -116,9 +116,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_SAGE, 4, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SageScript_0x1844fe, -1
-	person_event SPRITE_SAGE, 7, 6, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SageScript_0x184501, -1
-	person_event SPRITE_GRANNY, 12, 11, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, GrannyScript_0x184504, -1
-	person_event SPRITE_TEACHER, 9, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, TeacherScript_0x184507, -1
-	person_event SPRITE_SAGE, 5, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 4, TrainerSageChow, -1
-	person_event SPRITE_POKE_BALL, 7, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18451e, EVENT_SPROUT_TOWER1F_PARLYZ_HEAL
+	person_event SPRITE_SAGE, 4, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SageScript_0x1844fe, -1
+	person_event SPRITE_SAGE, 7, 6, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SageScript_0x184501, -1
+	person_event SPRITE_GRANNY, 12, 11, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrannyScript_0x184504, -1
+	person_event SPRITE_TEACHER, 9, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x184507, -1
+	person_event SPRITE_SAGE, 5, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 4, TrainerSageChow, -1
+	person_event SPRITE_POKE_BALL, 7, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18451e, EVENT_SPROUT_TOWER1F_PARLYZ_HEAL
--- a/maps/SproutTower2F.asm
+++ b/maps/SproutTower2F.asm
@@ -99,6 +99,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_SAGE, 3, 12, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 4, TrainerSageNico, -1
-	person_event SPRITE_SAGE, 14, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 5, TrainerSageEdmond, -1
-	person_event SPRITE_POKE_BALL, 1, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1847a7, EVENT_SPROUT_TOWER2F_X_ACCURACY
+	person_event SPRITE_SAGE, 3, 12, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 4, TrainerSageNico, -1
+	person_event SPRITE_SAGE, 14, 9, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 5, TrainerSageEdmond, -1
+	person_event SPRITE_POKE_BALL, 1, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1847a7, EVENT_SPROUT_TOWER2F_X_ACCURACY
--- a/maps/SproutTower3F.asm
+++ b/maps/SproutTower3F.asm
@@ -18,7 +18,7 @@
 UnknownScript_0x184947:
 	spriteface PLAYER, UP
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	playsound SFX_TACKLE
 	playsound SFX_ELEVATOR
 	earthquake 79
@@ -345,10 +345,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_SAGE, 13, 8, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerSageJin, -1
-	person_event SPRITE_SAGE, 8, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerSageTroy, -1
-	person_event SPRITE_SAGE, 2, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SageLiScript, -1
-	person_event SPRITE_SAGE, 11, 11, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerSageNeal, -1
-	person_event SPRITE_POKE_BALL, 14, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x184a19, EVENT_SPROUT_TOWER_3F_POTION
-	person_event SPRITE_POKE_BALL, 1, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x184a1b, EVENT_SPROUT_TOWER_3F_ESCAPE_ROPE
-	person_event SPRITE_SILVER, 4, 10, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_RIVAL_SPROUT_TOWER
+	person_event SPRITE_SAGE, 13, 8, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerSageJin, -1
+	person_event SPRITE_SAGE, 8, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerSageTroy, -1
+	person_event SPRITE_SAGE, 2, 10, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SageLiScript, -1
+	person_event SPRITE_SAGE, 11, 11, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerSageNeal, -1
+	person_event SPRITE_POKE_BALL, 14, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x184a19, EVENT_SPROUT_TOWER_3F_POTION
+	person_event SPRITE_POKE_BALL, 1, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x184a1b, EVENT_SPROUT_TOWER_3F_ESCAPE_ROPE
+	person_event SPRITE_SILVER, 4, 10, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_RIVAL_SPROUT_TOWER
--- a/maps/TeamRocketBaseB1F.asm
+++ b/maps/TeamRocketBaseB1F.asm
@@ -786,9 +786,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_ROCKET, 0, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_SECURITY_GRUNTS
-	person_event SPRITE_ROCKET, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM16, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_SCIENTIST, 12, 18, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerScientistJed, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_POKE_BALL, 6, 27, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6cac4, EVENT_TEAM_ROCKET_BASE_B1F_HYPER_POTION
-	person_event SPRITE_POKE_BALL, 15, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6cac6, EVENT_TEAM_ROCKET_BASE_B1F_NUGGET
-	person_event SPRITE_POKE_BALL, 12, 21, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6cac8, EVENT_TEAM_ROCKET_BASE_B1F_GUARD_SPEC
+	person_event SPRITE_ROCKET, 0, 0, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_SECURITY_GRUNTS
+	person_event SPRITE_ROCKET, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM16, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_SCIENTIST, 12, 18, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerScientistJed, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_POKE_BALL, 6, 27, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6cac4, EVENT_TEAM_ROCKET_BASE_B1F_HYPER_POTION
+	person_event SPRITE_POKE_BALL, 15, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6cac6, EVENT_TEAM_ROCKET_BASE_B1F_NUGGET
+	person_event SPRITE_POKE_BALL, 12, 21, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6cac8, EVENT_TEAM_ROCKET_BASE_B1F_GUARD_SPEC
--- a/maps/TeamRocketBaseB2F.asm
+++ b/maps/TeamRocketBaseB2F.asm
@@ -952,17 +952,17 @@
 
 .PersonEvents:
 	db 14
-	person_event SPRITE_ROCKET, 16, 20, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_GRUNT_WITH_EXECUTIVE
-	person_event SPRITE_ROCKET_GIRL, 16, 20, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_EXECUTIVE
-	person_event SPRITE_LANCE, 13, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_LANCE
-	person_event SPRITE_DRAGON, 13, 9, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_DRAGONITE
-	person_event SPRITE_VOLTORB, 5, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, VoltorbScript_0x6d101, EVENT_TEAM_ROCKET_BASE_B2F_ELECTRODE_1
-	person_event SPRITE_VOLTORB, 7, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, VoltorbScript_0x6d12c, EVENT_TEAM_ROCKET_BASE_B2F_ELECTRODE_2
-	person_event SPRITE_VOLTORB, 9, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, VoltorbScript_0x6d157, EVENT_TEAM_ROCKET_BASE_B2F_ELECTRODE_3
-	person_event SPRITE_VOLTORB, 5, 22, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_ELECTRODE_1
-	person_event SPRITE_VOLTORB, 7, 22, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_ELECTRODE_2
-	person_event SPRITE_VOLTORB, 9, 22, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_ELECTRODE_3
-	person_event SPRITE_ROCKET, 13, 25, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM17, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_ROCKET, 1, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, 0, 2, 1, TrainerGruntM18, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_ROCKET, 14, 21, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 2, 4, TrainerGruntM19, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_POKE_BALL, 10, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6d20d, EVENT_TEAM_ROCKET_BASE_B2F_TM_THIEF
+	person_event SPRITE_ROCKET, 16, 20, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_GRUNT_WITH_EXECUTIVE
+	person_event SPRITE_ROCKET_GIRL, 16, 20, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_EXECUTIVE
+	person_event SPRITE_LANCE, 13, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_LANCE
+	person_event SPRITE_DRAGON, 13, 9, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_DRAGONITE
+	person_event SPRITE_VOLTORB, 5, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, VoltorbScript_0x6d101, EVENT_TEAM_ROCKET_BASE_B2F_ELECTRODE_1
+	person_event SPRITE_VOLTORB, 7, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, VoltorbScript_0x6d12c, EVENT_TEAM_ROCKET_BASE_B2F_ELECTRODE_2
+	person_event SPRITE_VOLTORB, 9, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, VoltorbScript_0x6d157, EVENT_TEAM_ROCKET_BASE_B2F_ELECTRODE_3
+	person_event SPRITE_VOLTORB, 5, 22, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_ELECTRODE_1
+	person_event SPRITE_VOLTORB, 7, 22, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_ELECTRODE_2
+	person_event SPRITE_VOLTORB, 9, 22, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B2F_ELECTRODE_3
+	person_event SPRITE_ROCKET, 13, 25, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM17, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_ROCKET, 1, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 1, TrainerGruntM18, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_ROCKET, 14, 21, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 4, TrainerGruntM19, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_POKE_BALL, 10, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6d20d, EVENT_TEAM_ROCKET_BASE_B2F_TM_THIEF
--- a/maps/TeamRocketBaseB3F.asm
+++ b/maps/TeamRocketBaseB3F.asm
@@ -55,7 +55,7 @@
 UnknownScript_0x6e019:
 	spriteface PLAYER, LEFT
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	appear $a
 	applymovement $a, MovementData_0x6e164
 	spriteface PLAYER, LEFT
@@ -587,17 +587,17 @@
 
 .PersonEvents:
 	db 14
-	person_event SPRITE_LANCE, 14, 25, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, LanceScript_0x6dffc, EVENT_TEAM_ROCKET_BASE_B3F_LANCE_PASSWORDS
-	person_event SPRITE_ROCKET, 3, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B3F_EXECUTIVE
-	person_event SPRITE_MOLTRES, 2, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, MoltresScript_0x6e091, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_ROCKET_GIRL, 7, 21, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 0, TrainerGruntF5, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_ROCKET, 14, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM28, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_SCIENTIST, 11, 23, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 0, TrainerScientistRoss, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_SCIENTIST, 15, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerScientistMitch, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_ROCKET, 14, 24, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, RocketScript_0x6e048, EVENT_TEAM_ROCKET_BASE_POPULATION
-	person_event SPRITE_SILVER, 5, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_RIVAL_TEAM_ROCKET_BASE
-	person_event SPRITE_POKE_BALL, 12, 1, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6e120, EVENT_TEAM_ROCKET_BASE_B3F_PROTEIN
-	person_event SPRITE_POKE_BALL, 12, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6e122, EVENT_TEAM_ROCKET_BASE_B3F_X_SPECIAL
-	person_event SPRITE_POKE_BALL, 9, 28, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6e124, EVENT_TEAM_ROCKET_BASE_B3F_FULL_HEAL
-	person_event SPRITE_POKE_BALL, 2, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6e126, EVENT_TEAM_ROCKET_BASE_B3F_ICE_HEAL
-	person_event SPRITE_POKE_BALL, 10, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x6e128, EVENT_TEAM_ROCKET_BASE_B3F_ULTRA_BALL
+	person_event SPRITE_LANCE, 14, 25, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LanceScript_0x6dffc, EVENT_TEAM_ROCKET_BASE_B3F_LANCE_PASSWORDS
+	person_event SPRITE_ROCKET, 3, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_TEAM_ROCKET_BASE_B3F_EXECUTIVE
+	person_event SPRITE_MOLTRES, 2, 7, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, MoltresScript_0x6e091, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_ROCKET_GIRL, 7, 21, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 0, TrainerGruntF5, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_ROCKET, 14, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM28, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_SCIENTIST, 11, 23, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 0, TrainerScientistRoss, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_SCIENTIST, 15, 11, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerScientistMitch, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_ROCKET, 14, 24, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, RocketScript_0x6e048, EVENT_TEAM_ROCKET_BASE_POPULATION
+	person_event SPRITE_SILVER, 5, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_RIVAL_TEAM_ROCKET_BASE
+	person_event SPRITE_POKE_BALL, 12, 1, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6e120, EVENT_TEAM_ROCKET_BASE_B3F_PROTEIN
+	person_event SPRITE_POKE_BALL, 12, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6e122, EVENT_TEAM_ROCKET_BASE_B3F_X_SPECIAL
+	person_event SPRITE_POKE_BALL, 9, 28, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6e124, EVENT_TEAM_ROCKET_BASE_B3F_FULL_HEAL
+	person_event SPRITE_POKE_BALL, 2, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6e126, EVENT_TEAM_ROCKET_BASE_B3F_ICE_HEAL
+	person_event SPRITE_POKE_BALL, 10, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x6e128, EVENT_TEAM_ROCKET_BASE_B3F_ULTRA_BALL
--- a/maps/TimeCapsule.asm
+++ b/maps/TimeCapsule.asm
@@ -73,5 +73,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_CHRIS, 4, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ChrisScript_0x19351a, EVENT_GAVE_KURT_APRICORNS
-	person_event SPRITE_CHRIS, 4, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, ChrisScript_0x19351a, EVENT_RECEIVED_BALLS_FROM_KURT
+	person_event SPRITE_CHRIS, 4, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ChrisScript_0x19351a, EVENT_GAVE_KURT_APRICORNS
+	person_event SPRITE_CHRIS, 4, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ChrisScript_0x19351a, EVENT_RECEIVED_BALLS_FROM_KURT
--- a/maps/TinTower1F.asm
+++ b/maps/TinTower1F.asm
@@ -158,7 +158,7 @@
 	playsound SFX_EXIT_BUILDING
 	disappear $5
 	waitbutton
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 20
 	playmapmusic
 	end
@@ -534,13 +534,13 @@
 
 .PersonEvents:
 	db 10
-	person_event SPRITE_SUICUNE, 9, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ObjectEvent, EVENT_TIN_TOWER_1F_SUICUNE
-	person_event SPRITE_RAIKOU, 9, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, ObjectEvent, EVENT_TIN_TOWER_1F_RAIKOU
-	person_event SPRITE_ENTEI, 9, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ObjectEvent, EVENT_TIN_TOWER_1F_ENTEI
-	person_event SPRITE_SUPER_NERD, 3, 8, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SuperNerdScript_0x1851c8, EVENT_TIN_TOWER_1F_EUSINE
-	person_event SPRITE_SAGE, 9, 5, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, SageScript_0x185173, EVENT_TIN_TOWER_1F_WISE_TRIO_1
-	person_event SPRITE_SAGE, 11, 11, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, SageScript_0x185176, EVENT_TIN_TOWER_1F_WISE_TRIO_1
-	person_event SPRITE_SAGE, 6, 14, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, SageScript_0x185179, EVENT_TIN_TOWER_1F_WISE_TRIO_1
-	person_event SPRITE_SAGE, 2, 4, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, 0, 0, SageScript_0x18517c, EVENT_TIN_TOWER_1F_WISE_TRIO_2
-	person_event SPRITE_SAGE, 1, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, SageScript_0x185188, EVENT_TIN_TOWER_1F_WISE_TRIO_2
-	person_event SPRITE_SAGE, 2, 14, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, SageScript_0x1851bc, EVENT_TIN_TOWER_1F_WISE_TRIO_2
+	person_event SPRITE_SUICUNE, 9, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_TIN_TOWER_1F_SUICUNE
+	person_event SPRITE_RAIKOU, 9, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_TIN_TOWER_1F_RAIKOU
+	person_event SPRITE_ENTEI, 9, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_TIN_TOWER_1F_ENTEI
+	person_event SPRITE_SUPER_NERD, 3, 8, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x1851c8, EVENT_TIN_TOWER_1F_EUSINE
+	person_event SPRITE_SAGE, 9, 5, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SageScript_0x185173, EVENT_TIN_TOWER_1F_WISE_TRIO_1
+	person_event SPRITE_SAGE, 11, 11, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SageScript_0x185176, EVENT_TIN_TOWER_1F_WISE_TRIO_1
+	person_event SPRITE_SAGE, 6, 14, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SageScript_0x185179, EVENT_TIN_TOWER_1F_WISE_TRIO_1
+	person_event SPRITE_SAGE, 2, 4, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SageScript_0x18517c, EVENT_TIN_TOWER_1F_WISE_TRIO_2
+	person_event SPRITE_SAGE, 1, 9, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SageScript_0x185188, EVENT_TIN_TOWER_1F_WISE_TRIO_2
+	person_event SPRITE_SAGE, 2, 14, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SageScript_0x1851bc, EVENT_TIN_TOWER_1F_WISE_TRIO_2
--- a/maps/TinTower3F.asm
+++ b/maps/TinTower3F.asm
@@ -25,4 +25,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKE_BALL, 14, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x185a37, EVENT_TIN_TOWER_3F_FULL_HEAL
+	person_event SPRITE_POKE_BALL, 14, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x185a37, EVENT_TIN_TOWER_3F_FULL_HEAL
--- a/maps/TinTower4F.asm
+++ b/maps/TinTower4F.asm
@@ -38,6 +38,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_POKE_BALL, 10, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x185a58, EVENT_TIN_TOWER_4F_ULTRA_BALL
-	person_event SPRITE_POKE_BALL, 14, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x185a5a, EVENT_TIN_TOWER_4F_PP_UP
-	person_event SPRITE_POKE_BALL, 12, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x185a5c, EVENT_TIN_TOWER_4F_ESCAPE_ROPE
+	person_event SPRITE_POKE_BALL, 10, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x185a58, EVENT_TIN_TOWER_4F_ULTRA_BALL
+	person_event SPRITE_POKE_BALL, 14, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x185a5a, EVENT_TIN_TOWER_4F_PP_UP
+	person_event SPRITE_POKE_BALL, 12, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x185a5c, EVENT_TIN_TOWER_4F_ESCAPE_ROPE
--- a/maps/TinTower5F.asm
+++ b/maps/TinTower5F.asm
@@ -37,4 +37,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKE_BALL, 9, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x185aa9, EVENT_TIN_TOWER_5F_RARE_CANDY
+	person_event SPRITE_POKE_BALL, 9, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x185aa9, EVENT_TIN_TOWER_5F_RARE_CANDY
--- a/maps/TinTower6F.asm
+++ b/maps/TinTower6F.asm
@@ -25,4 +25,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKE_BALL, 8, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x185ae4, EVENT_TIN_TOWER_6F_MAX_POTION
+	person_event SPRITE_POKE_BALL, 8, 8, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x185ae4, EVENT_TIN_TOWER_6F_MAX_POTION
--- a/maps/TinTower7F.asm
+++ b/maps/TinTower7F.asm
@@ -28,4 +28,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKE_BALL, 1, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x185b05, EVENT_TIN_TOWER_7F_MAX_REVIVE
+	person_event SPRITE_POKE_BALL, 1, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x185b05, EVENT_TIN_TOWER_7F_MAX_REVIVE
--- a/maps/TinTower8F.asm
+++ b/maps/TinTower8F.asm
@@ -35,6 +35,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_POKE_BALL, 13, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x185b35, EVENT_TIN_TOWER_8F_NUGGET
-	person_event SPRITE_POKE_BALL, 6, 11, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x185b37, EVENT_TIN_TOWER_8F_MAX_ELIXER
-	person_event SPRITE_POKE_BALL, 1, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x185b39, EVENT_TIN_TOWER_8F_FULL_RESTORE
+	person_event SPRITE_POKE_BALL, 13, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x185b35, EVENT_TIN_TOWER_8F_NUGGET
+	person_event SPRITE_POKE_BALL, 6, 11, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x185b37, EVENT_TIN_TOWER_8F_MAX_ELIXER
+	person_event SPRITE_POKE_BALL, 1, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x185b39, EVENT_TIN_TOWER_8F_FULL_RESTORE
--- a/maps/TinTower9F.asm
+++ b/maps/TinTower9F.asm
@@ -38,4 +38,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKE_BALL, 1, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x185b88, EVENT_TIN_TOWER_9F_HP_UP
+	person_event SPRITE_POKE_BALL, 1, 9, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x185b88, EVENT_TIN_TOWER_9F_HP_UP
--- a/maps/TinTowerRoof.asm
+++ b/maps/TinTowerRoof.asm
@@ -60,4 +60,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_HO_OH, 5, 9, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, HoOhScript_0x77244, EVENT_TIN_TOWER_ROOF_HO_OH
+	person_event SPRITE_HO_OH, 5, 9, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, HoOhScript_0x77244, EVENT_TIN_TOWER_ROOF_HO_OH
--- a/maps/TohjoFalls.asm
+++ b/maps/TohjoFalls.asm
@@ -25,4 +25,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKE_BALL, 6, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18db02, EVENT_TOHJO_FALLS_MOON_STONE
+	person_event SPRITE_POKE_BALL, 6, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18db02, EVENT_TOHJO_FALLS_MOON_STONE
--- a/maps/TradeCenter.asm
+++ b/maps/TradeCenter.asm
@@ -73,5 +73,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_CHRIS, 4, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ChrisScript_0x193499, EVENT_GAVE_KURT_APRICORNS
-	person_event SPRITE_CHRIS, 4, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, ChrisScript_0x193499, EVENT_RECEIVED_BALLS_FROM_KURT
+	person_event SPRITE_CHRIS, 4, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ChrisScript_0x193499, EVENT_GAVE_KURT_APRICORNS
+	person_event SPRITE_CHRIS, 4, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ChrisScript_0x193499, EVENT_RECEIVED_BALLS_FROM_KURT
--- a/maps/TrainerHouse1F.asm
+++ b/maps/TrainerHouse1F.asm
@@ -151,8 +151,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_RECEPTIONIST, 11, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ReceptionistScript_0x9af67, -1
-	person_event SPRITE_COOLTRAINER_M, 11, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, CooltrainerMScript_0x9af6a, -1
-	person_event SPRITE_COOLTRAINER_F, 2, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerFScript_0x9af6d, -1
-	person_event SPRITE_YOUNGSTER, 8, 4, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x9af70, -1
-	person_event SPRITE_GENTLEMAN, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, GentlemanScript_0x9af73, -1
+	person_event SPRITE_RECEPTIONIST, 11, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ReceptionistScript_0x9af67, -1
+	person_event SPRITE_COOLTRAINER_M, 11, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x9af6a, -1
+	person_event SPRITE_COOLTRAINER_F, 2, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x9af6d, -1
+	person_event SPRITE_YOUNGSTER, 8, 4, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x9af70, -1
+	person_event SPRITE_GENTLEMAN, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x9af73, -1
--- a/maps/TrainerHouseB1F.asm
+++ b/maps/TrainerHouseB1F.asm
@@ -184,5 +184,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_RECEPTIONIST, 1, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, ObjectEvent, -1
-	person_event SPRITE_CHRIS, 11, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, ObjectEvent, -1
+	person_event SPRITE_RECEPTIONIST, 1, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, ObjectEvent, -1
+	person_event SPRITE_CHRIS, 11, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, ObjectEvent, -1
--- a/maps/UndergroundPathSwitchRoomEntrances.asm
+++ b/maps/UndergroundPathSwitchRoomEntrances.asm
@@ -80,7 +80,7 @@
 UnknownScript_0x7ca80:
 	spriteface PLAYER, RIGHT
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	playsound SFX_EXIT_BUILDING
 	appear $c
@@ -99,7 +99,7 @@
 UnknownScript_0x7caaa:
 	spriteface PLAYER, RIGHT
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	playsound SFX_EXIT_BUILDING
 	appear $c
@@ -923,14 +923,14 @@
 
 .PersonEvents:
 	db 11
-	person_event SPRITE_PHARMACIST, 12, 9, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 2, TrainerBurglarDuncan, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_PHARMACIST, 8, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 2, 2, TrainerBurglarEddie, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 2, 17, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM13, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 2, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM11, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM25, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET_GIRL, 12, 19, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerGruntF3, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_TEACHER, 27, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, TeacherScript_0x7ca7d, -1
-	person_event SPRITE_SUPER_NERD, 27, 19, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, SuperNerdScript_0x7ca7a, -1
-	person_event SPRITE_POKE_BALL, 12, 1, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7ce7d, EVENT_UNDERGROUND_PATH_SWITCH_ROOM_ENTRANCES_SMOKE_BALL
-	person_event SPRITE_POKE_BALL, 9, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7ce7f, EVENT_UNDERGROUND_PATH_SWITCH_ROOM_ENTRANCES_FULL_HEAL
-	person_event SPRITE_SILVER, 3, 23, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_RIVAL_UNDERGROUND_PATH
+	person_event SPRITE_PHARMACIST, 12, 9, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 2, TrainerBurglarDuncan, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_PHARMACIST, 8, 4, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_TRAINER, 2, TrainerBurglarEddie, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 2, 17, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM13, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 2, 11, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM11, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 2, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM25, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET_GIRL, 12, 19, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerGruntF3, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_TEACHER, 27, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x7ca7d, -1
+	person_event SPRITE_SUPER_NERD, 27, 19, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x7ca7a, -1
+	person_event SPRITE_POKE_BALL, 12, 1, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7ce7d, EVENT_UNDERGROUND_PATH_SWITCH_ROOM_ENTRANCES_SMOKE_BALL
+	person_event SPRITE_POKE_BALL, 9, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7ce7f, EVENT_UNDERGROUND_PATH_SWITCH_ROOM_ENTRANCES_FULL_HEAL
+	person_event SPRITE_SILVER, 3, 23, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_RIVAL_UNDERGROUND_PATH
--- a/maps/UndergroundWarehouse.asm
+++ b/maps/UndergroundWarehouse.asm
@@ -222,10 +222,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_ROCKET, 8, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM24, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 15, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 2, 3, TrainerGruntM14, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_ROCKET, 3, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 2, 4, TrainerGruntM15, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_GENTLEMAN, 8, 12, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, GentlemanScript_0x7d9bf, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
-	person_event SPRITE_POKE_BALL, 15, 18, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7d9e4, EVENT_UNDERGROUND_WAREHOUSE_MAX_ETHER
-	person_event SPRITE_POKE_BALL, 9, 13, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7d9e6, EVENT_UNDERGROUND_WAREHOUSE_TM_SLEEP_TALK
-	person_event SPRITE_POKE_BALL, 1, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7d9e8, EVENT_UNDERGROUND_WAREHOUSE_ULTRA_BALL
+	person_event SPRITE_ROCKET, 8, 9, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM24, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 15, 8, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 3, TrainerGruntM14, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_ROCKET, 3, 14, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 4, TrainerGruntM15, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_GENTLEMAN, 8, 12, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x7d9bf, EVENT_RADIO_TOWER_ROCKET_TAKEOVER
+	person_event SPRITE_POKE_BALL, 15, 18, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7d9e4, EVENT_UNDERGROUND_WAREHOUSE_MAX_ETHER
+	person_event SPRITE_POKE_BALL, 9, 13, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7d9e6, EVENT_UNDERGROUND_WAREHOUSE_TM_SLEEP_TALK
+	person_event SPRITE_POKE_BALL, 1, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7d9e8, EVENT_UNDERGROUND_WAREHOUSE_ULTRA_BALL
--- a/maps/UnionCave1F.asm
+++ b/maps/UnionCave1F.asm
@@ -207,12 +207,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_POKEFAN_M, 6, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerHikerDaniel, -1
-	person_event SPRITE_SUPER_NERD, 21, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPokemaniacLarry, -1
-	person_event SPRITE_POKEFAN_M, 8, 11, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 1, TrainerHikerRussell, -1
-	person_event SPRITE_FISHER, 27, 15, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerFirebreatherRay, -1
-	person_event SPRITE_FISHER, 19, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 4, TrainerFirebreatherBill, -1
-	person_event SPRITE_POKE_BALL, 21, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59c00, EVENT_UNION_CAVE_1F_GREAT_BALL
-	person_event SPRITE_POKE_BALL, 2, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59c02, EVENT_UNION_CAVE_1F_X_ATTACK
-	person_event SPRITE_POKE_BALL, 17, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59c04, EVENT_UNION_CAVE_1F_POTION
-	person_event SPRITE_POKE_BALL, 33, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x59c06, EVENT_UNION_CAVE_1F_AWAKENING
+	person_event SPRITE_POKEFAN_M, 6, 3, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerHikerDaniel, -1
+	person_event SPRITE_SUPER_NERD, 21, 4, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPokemaniacLarry, -1
+	person_event SPRITE_POKEFAN_M, 8, 11, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 1, TrainerHikerRussell, -1
+	person_event SPRITE_FISHER, 27, 15, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerFirebreatherRay, -1
+	person_event SPRITE_FISHER, 19, 14, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 4, TrainerFirebreatherBill, -1
+	person_event SPRITE_POKE_BALL, 21, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59c00, EVENT_UNION_CAVE_1F_GREAT_BALL
+	person_event SPRITE_POKE_BALL, 2, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59c02, EVENT_UNION_CAVE_1F_X_ATTACK
+	person_event SPRITE_POKE_BALL, 17, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59c04, EVENT_UNION_CAVE_1F_POTION
+	person_event SPRITE_POKE_BALL, 33, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x59c06, EVENT_UNION_CAVE_1F_AWAKENING
--- a/maps/UnionCaveB1F.asm
+++ b/maps/UnionCaveB1F.asm
@@ -163,10 +163,10 @@
 
 .PersonEvents:
 	db 7
-	person_event SPRITE_POKEFAN_M, 4, 9, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerHikerPhillip, -1
-	person_event SPRITE_POKEFAN_M, 7, 16, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerHikerLeonard, -1
-	person_event SPRITE_SUPER_NERD, 32, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPokemaniacAndrew, -1
-	person_event SPRITE_SUPER_NERD, 30, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPokemaniacCalvin, -1
-	person_event SPRITE_POKE_BALL, 16, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5a016, EVENT_UNION_CAVE_B1F_TM_SWIFT
-	person_event SPRITE_BOULDER, 10, 7, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, UnionCaveB1FBoulder, -1
-	person_event SPRITE_POKE_BALL, 23, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5a018, EVENT_UNION_CAVE_B1F_X_DEFEND
+	person_event SPRITE_POKEFAN_M, 4, 9, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerHikerPhillip, -1
+	person_event SPRITE_POKEFAN_M, 7, 16, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerHikerLeonard, -1
+	person_event SPRITE_SUPER_NERD, 32, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPokemaniacAndrew, -1
+	person_event SPRITE_SUPER_NERD, 30, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPokemaniacCalvin, -1
+	person_event SPRITE_POKE_BALL, 16, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5a016, EVENT_UNION_CAVE_B1F_TM_SWIFT
+	person_event SPRITE_BOULDER, 10, 7, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, UnionCaveB1FBoulder, -1
+	person_event SPRITE_POKE_BALL, 23, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5a018, EVENT_UNION_CAVE_B1F_X_DEFEND
--- a/maps/UnionCaveB2F.asm
+++ b/maps/UnionCaveB2F.asm
@@ -152,9 +152,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_ROCKER, 19, 15, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerCooltrainermNick, -1
-	person_event SPRITE_COOLTRAINER_F, 13, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 1, TrainerCooltrainerfGwen, -1
-	person_event SPRITE_COOLTRAINER_F, 30, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerCooltrainerfEmma, -1
-	person_event SPRITE_POKE_BALL, 2, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5a36a, EVENT_UNION_CAVE_B2F_ELIXER
-	person_event SPRITE_POKE_BALL, 19, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x5a36c, EVENT_UNION_CAVE_B2F_HYPER_POTION
-	person_event SPRITE_SURF, 31, 11, SPRITEMOVEDATA_LAPRAS, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SurfScript_0x5a31f, EVENT_UNION_CAVE_B2F_LAPRAS
+	person_event SPRITE_ROCKER, 19, 15, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerCooltrainermNick, -1
+	person_event SPRITE_COOLTRAINER_F, 13, 5, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 1, TrainerCooltrainerfGwen, -1
+	person_event SPRITE_COOLTRAINER_F, 30, 3, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerCooltrainerfEmma, -1
+	person_event SPRITE_POKE_BALL, 2, 16, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5a36a, EVENT_UNION_CAVE_B2F_ELIXER
+	person_event SPRITE_POKE_BALL, 19, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x5a36c, EVENT_UNION_CAVE_B2F_HYPER_POTION
+	person_event SPRITE_SURF, 31, 11, SPRITEMOVEDATA_LAPRAS, 1, 1, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SurfScript_0x5a31f, EVENT_UNION_CAVE_B2F_LAPRAS
--- a/maps/VermilionCity.asm
+++ b/maps/VermilionCity.asm
@@ -294,9 +294,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_TEACHER, 9, 18, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, 0, 0, TeacherScript_0x1aa983, -1
-	person_event SPRITE_GRAMPS, 6, 23, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, GrampsScript_0x1aa986, -1
-	person_event SPRITE_MACHOP, 7, 26, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, VermilionMachop, -1
-	person_event SPRITE_SUPER_NERD, 16, 14, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, SuperNerdScript_0x1aa99b, -1
-	person_event SPRITE_BIG_SNORLAX, 8, 34, SPRITEMOVEDATA_SNORLAX, 0, 0, -1, -1, 0, 0, 0, VermilionSnorlax, EVENT_VERMILION_CITY_SNORLAX
-	person_event SPRITE_POKEFAN_M, 12, 31, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, VermilionGymBadgeGuy, -1
+	person_event SPRITE_TEACHER, 9, 18, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x1aa983, -1
+	person_event SPRITE_GRAMPS, 6, 23, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1aa986, -1
+	person_event SPRITE_MACHOP, 7, 26, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, VermilionMachop, -1
+	person_event SPRITE_SUPER_NERD, 16, 14, SPRITEMOVEDATA_WANDER, 1, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x1aa99b, -1
+	person_event SPRITE_BIG_SNORLAX, 8, 34, SPRITEMOVEDATA_SNORLAX, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, VermilionSnorlax, EVENT_VERMILION_CITY_SNORLAX
+	person_event SPRITE_POKEFAN_M, 12, 31, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, VermilionGymBadgeGuy, -1
--- a/maps/VermilionGym.asm
+++ b/maps/VermilionGym.asm
@@ -287,8 +287,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_SURGE, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, SurgeScript_0x1920a5, -1
-	person_event SPRITE_GENTLEMAN, 8, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 4, TrainerGentlemanGregory, -1
-	person_event SPRITE_ROCKER, 7, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 3, -1, -1, (1 << 3) | PAL_OW_RED, 2, 3, TrainerGuitaristVincent, -1
-	person_event SPRITE_SUPER_NERD, 10, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 4, TrainerJugglerHorton, -1
-	person_event SPRITE_GYM_GUY, 15, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 1, VermilionGymGuyScript, -1
+	person_event SPRITE_SURGE, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, SurgeScript_0x1920a5, -1
+	person_event SPRITE_GENTLEMAN, 8, 8, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 4, TrainerGentlemanGregory, -1
+	person_event SPRITE_ROCKER, 7, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 3, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_TRAINER, 3, TrainerGuitaristVincent, -1
+	person_event SPRITE_SUPER_NERD, 10, 0, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 4, TrainerJugglerHorton, -1
+	person_event SPRITE_GYM_GUY, 15, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 1, VermilionGymGuyScript, -1
--- a/maps/VermilionHouseDiglettsCaveSpeechHouse.asm
+++ b/maps/VermilionHouseDiglettsCaveSpeechHouse.asm
@@ -34,4 +34,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_GENTLEMAN, 3, 1, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, GentlemanScript_0x192031, -1
+	person_event SPRITE_GENTLEMAN, 3, 1, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x192031, -1
--- a/maps/VermilionHouseFishingSpeechHouse.asm
+++ b/maps/VermilionHouseFishingSpeechHouse.asm
@@ -65,4 +65,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_FISHING_GURU, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FishingDude, -1
+	person_event SPRITE_FISHING_GURU, 4, 2, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FishingDude, -1
--- a/maps/VermilionMagnetTrainSpeechHouse.asm
+++ b/maps/VermilionMagnetTrainSpeechHouse.asm
@@ -48,5 +48,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_POKEFAN_F, 3, 2, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, PokefanFScript_0x191eb7, -1
-	person_event SPRITE_YOUNGSTER, 3, 0, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x191eba, -1
+	person_event SPRITE_POKEFAN_F, 3, 2, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanFScript_0x191eb7, -1
+	person_event SPRITE_YOUNGSTER, 3, 0, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x191eba, -1
--- a/maps/VermilionMart.asm
+++ b/maps/VermilionMart.asm
@@ -48,6 +48,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x191f7e, -1
-	person_event SPRITE_SUPER_NERD, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SuperNerdScript_0x191f85, -1
-	person_event SPRITE_BUENA, 6, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, BuenaScript_0x191f88, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x191f7e, -1
+	person_event SPRITE_SUPER_NERD, 2, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x191f85, -1
+	person_event SPRITE_BUENA, 6, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, BuenaScript_0x191f88, -1
--- a/maps/VermilionPokeCenter1F.asm
+++ b/maps/VermilionPokeCenter1F.asm
@@ -88,7 +88,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x191603, -1
-	person_event SPRITE_FISHING_GURU, 2, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, FishingGuruScript_0x191606, -1
-	person_event SPRITE_SAILOR, 5, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, SailorScript_0x19161a, -1
-	person_event SPRITE_BUG_CATCHER, 5, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, BugCatcherScript_0x19161d, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x191603, -1
+	person_event SPRITE_FISHING_GURU, 2, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, FishingGuruScript_0x191606, -1
+	person_event SPRITE_SAILOR, 5, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 1, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, SailorScript_0x19161a, -1
+	person_event SPRITE_BUG_CATCHER, 5, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, BugCatcherScript_0x19161d, -1
--- a/maps/VermilionPort.asm
+++ b/maps/VermilionPort.asm
@@ -317,6 +317,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_SAILOR, 17, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, SailorScript_0x74dc4, EVENT_VERMILION_PORT_SAILOR_AT_GANGWAY
-	person_event SPRITE_SAILOR, 11, 6, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, SailorScript_0x74e97, -1
-	person_event SPRITE_SUPER_NERD, 11, 11, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, 0, 0, SuperNerdScript_0x74ee6, -1
+	person_event SPRITE_SAILOR, 17, 7, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x74dc4, EVENT_VERMILION_PORT_SAILOR_AT_GANGWAY
+	person_event SPRITE_SAILOR, 11, 6, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SailorScript_0x74e97, -1
+	person_event SPRITE_SUPER_NERD, 11, 11, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x74ee6, -1
--- a/maps/VermilionPortPassage.asm
+++ b/maps/VermilionPortPassage.asm
@@ -35,4 +35,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_TEACHER, 1, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, TeacherScript_0x7701a, -1
+	person_event SPRITE_TEACHER, 1, 17, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x7701a, -1
--- a/maps/VictoryRoad.asm
+++ b/maps/VictoryRoad.asm
@@ -19,7 +19,7 @@
 	moveperson $2, $12, $b
 	spriteface PLAYER, DOWN
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	appear $2
 	applymovement $2, MovementData_0x74539
@@ -33,7 +33,7 @@
 UnknownScript_0x744b5:
 	spriteface PLAYER, DOWN
 	showemote EMOTE_SHOCK, PLAYER, 15
-	special Functionc48f
+	special Special_RotatePalettesRightMusic
 	pause 15
 	appear $2
 	applymovement $2, MovementData_0x74542
@@ -263,9 +263,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_SILVER, 13, 18, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, ObjectEvent, EVENT_RIVAL_VICTORY_ROAD
-	person_event SPRITE_POKE_BALL, 28, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x74529, EVENT_VICTORY_ROAD_TM_EARTHQUAKE
-	person_event SPRITE_POKE_BALL, 48, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7452b, EVENT_VICTORY_ROAD_MAX_REVIVE
-	person_event SPRITE_POKE_BALL, 29, 18, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7452d, EVENT_VICTORY_ROAD_FULL_RESTORE
-	person_event SPRITE_POKE_BALL, 48, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7452f, EVENT_VICTORY_ROAD_FULL_HEAL
-	person_event SPRITE_POKE_BALL, 38, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x74531, EVENT_VICTORY_ROAD_HP_UP
+	person_event SPRITE_SILVER, 13, 18, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ObjectEvent, EVENT_RIVAL_VICTORY_ROAD
+	person_event SPRITE_POKE_BALL, 28, 3, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x74529, EVENT_VICTORY_ROAD_TM_EARTHQUAKE
+	person_event SPRITE_POKE_BALL, 48, 12, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7452b, EVENT_VICTORY_ROAD_MAX_REVIVE
+	person_event SPRITE_POKE_BALL, 29, 18, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7452d, EVENT_VICTORY_ROAD_FULL_RESTORE
+	person_event SPRITE_POKE_BALL, 48, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7452f, EVENT_VICTORY_ROAD_FULL_HEAL
+	person_event SPRITE_POKE_BALL, 38, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x74531, EVENT_VICTORY_ROAD_HP_UP
--- a/maps/VictoryRoadGate.asm
+++ b/maps/VictoryRoadGate.asm
@@ -118,6 +118,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_OFFICER, 11, 8, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, OfficerScript_0x9ba03, -1
-	person_event SPRITE_BLACK_BELT, 5, 7, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, BlackBeltScript_0x9ba21, EVENT_OPENED_MT_SILVER
-	person_event SPRITE_BLACK_BELT, 5, 12, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, BlackBeltScript_0x9ba24, EVENT_FOUGHT_SNORLAX
+	person_event SPRITE_OFFICER, 11, 8, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, OfficerScript_0x9ba03, -1
+	person_event SPRITE_BLACK_BELT, 5, 7, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x9ba21, EVENT_OPENED_MT_SILVER
+	person_event SPRITE_BLACK_BELT, 5, 12, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlackBeltScript_0x9ba24, EVENT_FOUGHT_SNORLAX
--- a/maps/VioletCity.asm
+++ b/maps/VioletCity.asm
@@ -87,7 +87,7 @@
 	db RARE_CANDY, 1
 
 FruitTreeScript_0x1a8425:
-	fruittree $9
+	fruittree FRUITTREE_VIOLET_CITY
 
 MapVioletCitySignpostItem6:
 	dwb EVENT_VIOLET_CITY_HIDDEN_HYPER_POTION, HYPER_POTION
@@ -301,11 +301,11 @@
 
 .PersonEvents:
 	db 8
-	person_event SPRITE_FISHER, 16, 13, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, FisherScript_0x1a83bb, EVENT_VIOLET_CITY_EARL
-	person_event SPRITE_LASS, 28, 28, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x1a8403, -1
-	person_event SPRITE_SUPER_NERD, 14, 24, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, SuperNerdScript_0x1a8406, -1
-	person_event SPRITE_GRAMPS, 20, 17, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, GrampsScript_0x1a8409, -1
-	person_event SPRITE_YOUNGSTER, 18, 5, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x1a840c, -1
-	person_event SPRITE_FRUIT_TREE, 29, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 0, 0, FruitTreeScript_0x1a8425, -1
-	person_event SPRITE_POKE_BALL, 1, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a8421, EVENT_VIOLET_CITY_PP_UP
-	person_event SPRITE_POKE_BALL, 5, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x1a8423, EVENT_VIOLET_CITY_RARE_CANDY
+	person_event SPRITE_FISHER, 16, 13, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, FisherScript_0x1a83bb, EVENT_VIOLET_CITY_EARL
+	person_event SPRITE_LASS, 28, 28, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x1a8403, -1
+	person_event SPRITE_SUPER_NERD, 14, 24, SPRITEMOVEDATA_WANDER, 2, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, SuperNerdScript_0x1a8406, -1
+	person_event SPRITE_GRAMPS, 20, 17, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1a8409, -1
+	person_event SPRITE_YOUNGSTER, 18, 5, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1a840c, -1
+	person_event SPRITE_FRUIT_TREE, 29, 14, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, FruitTreeScript_0x1a8425, -1
+	person_event SPRITE_POKE_BALL, 1, 4, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a8421, EVENT_VIOLET_CITY_PP_UP
+	person_event SPRITE_POKE_BALL, 5, 35, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x1a8423, EVENT_VIOLET_CITY_RARE_CANDY
--- a/maps/VioletGym.asm
+++ b/maps/VioletGym.asm
@@ -294,7 +294,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_FALKNER, 1, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, FalknerScript_0x683c2, -1
-	person_event SPRITE_YOUNGSTER, 6, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerBird_keeperRod, -1
-	person_event SPRITE_YOUNGSTER, 10, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerBird_keeperAbe, -1
-	person_event SPRITE_GYM_GUY, 13, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, VioletGymGuyScript, -1
+	person_event SPRITE_FALKNER, 1, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, FalknerScript_0x683c2, -1
+	person_event SPRITE_YOUNGSTER, 6, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerBird_keeperRod, -1
+	person_event SPRITE_YOUNGSTER, 10, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerBird_keeperAbe, -1
+	person_event SPRITE_GYM_GUY, 13, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, VioletGymGuyScript, -1
--- a/maps/VioletMart.asm
+++ b/maps/VioletMart.asm
@@ -60,6 +60,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x68295, -1
-	person_event SPRITE_GRANNY, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, GrannyScript_0x6829c, -1
-	person_event SPRITE_COOLTRAINER_M, 2, 5, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerMScript_0x6829f, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x68295, -1
+	person_event SPRITE_GRANNY, 6, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrannyScript_0x6829c, -1
+	person_event SPRITE_COOLTRAINER_M, 2, 5, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x6829f, -1
--- a/maps/VioletNicknameSpeechHouse.asm
+++ b/maps/VioletNicknameSpeechHouse.asm
@@ -56,6 +56,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_TEACHER, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, TeacherScript_0x693e9, -1
-	person_event SPRITE_LASS, 4, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x693ec, -1
-	person_event SPRITE_BIRD, 2, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, BirdScript_0x693ef, -1
+	person_event SPRITE_TEACHER, 3, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, TeacherScript_0x693e9, -1
+	person_event SPRITE_LASS, 4, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x693ec, -1
+	person_event SPRITE_BIRD, 2, 5, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, BirdScript_0x693ef, -1
--- a/maps/VioletOnixTradeHouse.asm
+++ b/maps/VioletOnixTradeHouse.asm
@@ -45,5 +45,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_POKEFAN_M, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, PokefanMScript_0x6998d, -1
-	person_event SPRITE_YOUNGSTER, 5, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x69990, -1
+	person_event SPRITE_POKEFAN_M, 3, 2, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x6998d, -1
+	person_event SPRITE_YOUNGSTER, 5, 6, SPRITEMOVEDATA_WALK_UP_DOWN, 2, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x69990, -1
--- a/maps/VioletPokeCenter1F.asm
+++ b/maps/VioletPokeCenter1F.asm
@@ -226,8 +226,8 @@
 
 .PersonEvents:
 	db 5
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x694c9, -1
-	person_event SPRITE_GAMEBOY_KID, 6, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, GameboyKidScript_0x69540, -1
-	person_event SPRITE_GENTLEMAN, 4, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, GentlemanScript_0x69543, -1
-	person_event SPRITE_YOUNGSTER, 1, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, YoungsterScript_0x69546, -1
-	person_event SPRITE_SCIENTIST, 3, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ScientistScript_0x694cc, EVENT_ELMS_AIDE_IN_VIOLET_POKEMON_CENTER
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x694c9, -1
+	person_event SPRITE_GAMEBOY_KID, 6, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, GameboyKidScript_0x69540, -1
+	person_event SPRITE_GENTLEMAN, 4, 1, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GentlemanScript_0x69543, -1
+	person_event SPRITE_YOUNGSTER, 1, 8, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x69546, -1
+	person_event SPRITE_SCIENTIST, 3, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ScientistScript_0x694cc, EVENT_ELMS_AIDE_IN_VIOLET_POKEMON_CENTER
--- a/maps/ViridianCity.asm
+++ b/maps/ViridianCity.asm
@@ -237,7 +237,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_GRAMPS, 5, 18, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, 0, 0, 0, GrampsScript_0x1a9a4c, -1
-	person_event SPRITE_GRAMPS, 8, 30, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GrampsScript_0x1a9a61, -1
-	person_event SPRITE_FISHER, 23, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, FisherScript_0x1a9a75, -1
-	person_event SPRITE_YOUNGSTER, 21, 17, SPRITEMOVEDATA_WANDER, 3, 3, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungsterScript_0x1a9a90, -1
+	person_event SPRITE_GRAMPS, 5, 18, SPRITEMOVEDATA_WANDER, 2, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1a9a4c, -1
+	person_event SPRITE_GRAMPS, 8, 30, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GrampsScript_0x1a9a61, -1
+	person_event SPRITE_FISHER, 23, 6, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, FisherScript_0x1a9a75, -1
+	person_event SPRITE_YOUNGSTER, 21, 17, SPRITEMOVEDATA_WANDER, 3, 3, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungsterScript_0x1a9a90, -1
--- a/maps/ViridianGym.asm
+++ b/maps/ViridianGym.asm
@@ -183,5 +183,5 @@
 
 .PersonEvents:
 	db 2
-	person_event SPRITE_BLUE, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, BlueScript_0x9aa26, EVENT_VIRIDIAN_GYM_BLUE
-	person_event SPRITE_GYM_GUY, 13, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, ViridianGymGuyScript, EVENT_VIRIDIAN_GYM_BLUE
+	person_event SPRITE_BLUE, 3, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, BlueScript_0x9aa26, EVENT_VIRIDIAN_GYM_BLUE
+	person_event SPRITE_GYM_GUY, 13, 7, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, ViridianGymGuyScript, EVENT_VIRIDIAN_GYM_BLUE
--- a/maps/ViridianMart.asm
+++ b/maps/ViridianMart.asm
@@ -48,6 +48,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, 0, 0, ClerkScript_0x9b5e7, -1
-	person_event SPRITE_LASS, 2, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, 0, 0, LassScript_0x9b5ee, -1
-	person_event SPRITE_COOLTRAINER_M, 6, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 0, 0, CooltrainerMScript_0x9b5f1, -1
+	person_event SPRITE_CLERK, 3, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, ClerkScript_0x9b5e7, -1
+	person_event SPRITE_LASS, 2, 7, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 2, -1, -1, 0, PERSONTYPE_SCRIPT, 0, LassScript_0x9b5ee, -1
+	person_event SPRITE_COOLTRAINER_M, 6, 1, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x9b5f1, -1
--- a/maps/ViridianNicknameSpeechHouse.asm
+++ b/maps/ViridianNicknameSpeechHouse.asm
@@ -72,7 +72,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_POKEFAN_M, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, PokefanMScript_0x9ae3a, -1
-	person_event SPRITE_LASS, 4, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, LassScript_0x9ae3d, -1
-	person_event SPRITE_MOLTRES, 2, 5, SPRITEMOVEDATA_POKEMON, 0, 2, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, MoltresScript_0x9ae40, -1
-	person_event SPRITE_GROWLITHE, 3, 6, SPRITEMOVEDATA_POKEMON, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, GrowlitheScript_0x9ae4a, -1
+	person_event SPRITE_POKEFAN_M, 4, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, PokefanMScript_0x9ae3a, -1
+	person_event SPRITE_LASS, 4, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, LassScript_0x9ae3d, -1
+	person_event SPRITE_MOLTRES, 2, 5, SPRITEMOVEDATA_POKEMON, 0, 2, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, MoltresScript_0x9ae40, -1
+	person_event SPRITE_GROWLITHE, 3, 6, SPRITEMOVEDATA_POKEMON, 0, 2, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, GrowlitheScript_0x9ae4a, -1
--- a/maps/ViridianPokeCenter1F.asm
+++ b/maps/ViridianPokeCenter1F.asm
@@ -83,7 +83,7 @@
 
 .PersonEvents:
 	db 4
-	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 0, 0, NurseScript_0x9b690, -1
-	person_event SPRITE_COOLTRAINER_M, 4, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, CooltrainerMScript_0x9b693, -1
-	person_event SPRITE_COOLTRAINER_F, 3, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, CooltrainerFScript_0x9b6a7, -1
-	person_event SPRITE_BUG_CATCHER, 6, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, BugCatcherScript_0x9b6aa, -1
+	person_event SPRITE_NURSE, 1, 3, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, NurseScript_0x9b690, -1
+	person_event SPRITE_COOLTRAINER_M, 4, 8, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, CooltrainerMScript_0x9b693, -1
+	person_event SPRITE_COOLTRAINER_F, 3, 5, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, CooltrainerFScript_0x9b6a7, -1
+	person_event SPRITE_BUG_CATCHER, 6, 1, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, BugCatcherScript_0x9b6aa, -1
--- a/maps/WarehouseEntrance.asm
+++ b/maps/WarehouseEntrance.asm
@@ -186,7 +186,7 @@
 .DoHaircut:
 	checkflag ENGINE_GOLDENROD_UNDERGROUND_GOT_HAIRCUT
 	iftrue .AlreadyGotHaircut
-	special Function24ae8
+	special PlaceMoneyTopRightOW
 	writetext UnknownText_0x7c5f9
 	yesorno
 	iffalse .Refused
@@ -222,7 +222,7 @@
 
 .then:
 	takemoney $0, 500
-	special Function24ae8
+	special PlaceMoneyTopRightOW
 	writetext UnknownText_0x7c6b8
 	closetext
 	loadmovesprites
@@ -269,7 +269,7 @@
 .DoHaircut:
 	checkflag ENGINE_GOLDENROD_UNDERGROUND_GOT_HAIRCUT
 	iftrue .AlreadyGotHaircut
-	special Function24ae8
+	special PlaceMoneyTopRightOW
 	writetext UnknownText_0x7c75c
 	yesorno
 	iffalse .Refused
@@ -305,7 +305,7 @@
 
 .then:
 	takemoney $0, 300
-	special Function24ae8
+	special PlaceMoneyTopRightOW
 	writetext UnknownText_0x7c80e
 	closetext
 	loadmovesprites
@@ -343,7 +343,7 @@
 
 UnknownScript_0x7c2bb:
 	writetext HaircutBrosText_SlightlyHappier
-	special Functionc472
+	special PlayCurMonCry
 	closetext
 	loadmovesprites
 	end
@@ -350,7 +350,7 @@
 
 UnknownScript_0x7c2c4:
 	writetext HaircutBrosText_Happier
-	special Functionc472
+	special PlayCurMonCry
 	closetext
 	loadmovesprites
 	end
@@ -357,7 +357,7 @@
 
 UnknownScript_0x7c2cd:
 	writetext HaircutBrosText_MuchHappier
-	special Functionc472
+	special PlayCurMonCry
 	closetext
 	loadmovesprites
 	end
@@ -669,12 +669,12 @@
 
 .PersonEvents:
 	db 9
-	person_event SPRITE_SUPER_NERD, 31, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 3, TrainerSupernerdEric, -1
-	person_event SPRITE_SUPER_NERD, 9, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 2, 2, TrainerSupernerdTeru, -1
-	person_event SPRITE_SUPER_NERD, 27, 3, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 2, TrainerPokemaniacIssac, -1
-	person_event SPRITE_SUPER_NERD, 6, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 2, 3, TrainerPokemaniacDonald, -1
-	person_event SPRITE_POKE_BALL, 25, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x7c306, EVENT_WAREHOUSE_ENTRANCE_COIN_CASE
-	person_event SPRITE_GRAMPS, 11, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, GrampsScript_0x7c146, EVENT_WAREHOUSE_ENTRANCE_GRAMPS
-	person_event SPRITE_SUPER_NERD, 14, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, OlderHaircutBrotherScript, EVENT_WAREHOUSE_ENTRANCE_OLDER_HAIRCUT_BROTHER
-	person_event SPRITE_SUPER_NERD, 15, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, 0, 0, YoungerHaircutBrotherScript, EVENT_WAREHOUSE_ENTRANCE_YOUNGER_HAIRCUT_BROTHER
-	person_event SPRITE_GRANNY, 21, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, 0, 0, GrannyScript_0x7c132, EVENT_WAREHOUSE_ENTRANCE_GRANNY
+	person_event SPRITE_SUPER_NERD, 31, 5, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 3, TrainerSupernerdEric, -1
+	person_event SPRITE_SUPER_NERD, 9, 6, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_TRAINER, 2, TrainerSupernerdTeru, -1
+	person_event SPRITE_SUPER_NERD, 27, 3, SPRITEMOVEDATA_SPINRANDOM_FAST, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 2, TrainerPokemaniacIssac, -1
+	person_event SPRITE_SUPER_NERD, 6, 2, SPRITEMOVEDATA_STANDING_RIGHT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_TRAINER, 3, TrainerPokemaniacDonald, -1
+	person_event SPRITE_POKE_BALL, 25, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x7c306, EVENT_WAREHOUSE_ENTRANCE_COIN_CASE
+	person_event SPRITE_GRAMPS, 11, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, GrampsScript_0x7c146, EVENT_WAREHOUSE_ENTRANCE_GRAMPS
+	person_event SPRITE_SUPER_NERD, 14, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, OlderHaircutBrotherScript, EVENT_WAREHOUSE_ENTRANCE_OLDER_HAIRCUT_BROTHER
+	person_event SPRITE_SUPER_NERD, 15, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_GREEN, PERSONTYPE_SCRIPT, 0, YoungerHaircutBrotherScript, EVENT_WAREHOUSE_ENTRANCE_YOUNGER_HAIRCUT_BROTHER
+	person_event SPRITE_GRANNY, 21, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, (1 << 3) | PAL_OW_BROWN, PERSONTYPE_SCRIPT, 0, GrannyScript_0x7c132, EVENT_WAREHOUSE_ENTRANCE_GRANNY
--- a/maps/WhirlIslandB1F.asm
+++ b/maps/WhirlIslandB1F.asm
@@ -62,9 +62,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_POKE_BALL, 13, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c410, EVENT_WHIRL_ISLAND_B1F_FULL_RESTORE
-	person_event SPRITE_POKE_BALL, 18, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c412, EVENT_WHIRL_ISLAND_B1F_CARBOS
-	person_event SPRITE_POKE_BALL, 23, 33, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c414, EVENT_WHIRL_ISLAND_B1F_CALCIUM
-	person_event SPRITE_POKE_BALL, 8, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c416, EVENT_WHIRL_ISLAND_B1F_NUGGET
-	person_event SPRITE_POKE_BALL, 26, 19, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c418, EVENT_WHIRL_ISLAND_B1F_ESCAPE_ROPE
-	person_event SPRITE_BOULDER, 26, 23, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, 0, 0, WhirlIslandB1FBoulder, -1
+	person_event SPRITE_POKE_BALL, 13, 7, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c410, EVENT_WHIRL_ISLAND_B1F_FULL_RESTORE
+	person_event SPRITE_POKE_BALL, 18, 2, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c412, EVENT_WHIRL_ISLAND_B1F_CARBOS
+	person_event SPRITE_POKE_BALL, 23, 33, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c414, EVENT_WHIRL_ISLAND_B1F_CALCIUM
+	person_event SPRITE_POKE_BALL, 8, 17, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c416, EVENT_WHIRL_ISLAND_B1F_NUGGET
+	person_event SPRITE_POKE_BALL, 26, 19, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c418, EVENT_WHIRL_ISLAND_B1F_ESCAPE_ROPE
+	person_event SPRITE_BOULDER, 26, 23, SPRITEMOVEDATA_STRENGTH_BOULDER, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, WhirlIslandB1FBoulder, -1
--- a/maps/WhirlIslandB2F.asm
+++ b/maps/WhirlIslandB2F.asm
@@ -33,6 +33,6 @@
 
 .PersonEvents:
 	db 3
-	person_event SPRITE_POKE_BALL, 11, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c4b8, EVENT_WHIRL_ISLAND_B2F_FULL_RESTORE
-	person_event SPRITE_POKE_BALL, 4, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c4ba, EVENT_WHIRL_ISLAND_B2F_MAX_REVIVE
-	person_event SPRITE_POKE_BALL, 12, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c4bc, EVENT_WHIRL_ISLAND_B2F_MAX_ELIXER
+	person_event SPRITE_POKE_BALL, 11, 10, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c4b8, EVENT_WHIRL_ISLAND_B2F_FULL_RESTORE
+	person_event SPRITE_POKE_BALL, 4, 6, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c4ba, EVENT_WHIRL_ISLAND_B2F_MAX_REVIVE
+	person_event SPRITE_POKE_BALL, 12, 5, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c4bc, EVENT_WHIRL_ISLAND_B2F_MAX_ELIXER
--- a/maps/WhirlIslandLugiaChamber.asm
+++ b/maps/WhirlIslandLugiaChamber.asm
@@ -59,4 +59,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_LUGIA, 5, 9, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, 0, 0, LugiaScript_0x18c518, EVENT_WHIRL_ISLAND_LUGIA_CHAMBER_LUGIA
+	person_event SPRITE_LUGIA, 5, 9, SPRITEMOVEDATA_POKEMON, 0, 0, -1, -1, (1 << 3) | PAL_OW_BLUE, PERSONTYPE_SCRIPT, 0, LugiaScript_0x18c518, EVENT_WHIRL_ISLAND_LUGIA_CHAMBER_LUGIA
--- a/maps/WhirlIslandNE.asm
+++ b/maps/WhirlIslandNE.asm
@@ -26,4 +26,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKE_BALL, 11, 11, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c396, EVENT_WHIRL_ISLAND_NE_ULTRA_BALL
+	person_event SPRITE_POKE_BALL, 11, 11, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c396, EVENT_WHIRL_ISLAND_NE_ULTRA_BALL
--- a/maps/WhirlIslandSW.asm
+++ b/maps/WhirlIslandSW.asm
@@ -28,4 +28,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_POKE_BALL, 2, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, 1, 0, ItemFragment_0x18c3bc, EVENT_WHIRL_ISLAND_SW_ULTRA_BALL
+	person_event SPRITE_POKE_BALL, 2, 15, SPRITEMOVEDATA_ITEM_TREE, 0, 0, -1, -1, 0, PERSONTYPE_ITEMFRAGMENT, 0, ItemFragment_0x18c3bc, EVENT_WHIRL_ISLAND_SW_ULTRA_BALL
--- a/maps/WillsRoom.asm
+++ b/maps/WillsRoom.asm
@@ -148,4 +148,4 @@
 
 .PersonEvents:
 	db 1
-	person_event SPRITE_WILL, 7, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, 0, 0, WillScript_0x1804f8, -1
+	person_event SPRITE_WILL, 7, 5, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, (1 << 3) | PAL_OW_RED, PERSONTYPE_SCRIPT, 0, WillScript_0x1804f8, -1
--- a/maps/WiseTriosRoom.asm
+++ b/maps/WiseTriosRoom.asm
@@ -360,9 +360,9 @@
 
 .PersonEvents:
 	db 6
-	person_event SPRITE_SAGE, 2, 6, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, 0, 0, SageScript_0x9859a, EVENT_WISE_TRIOS_ROOM_WISE_TRIO_1
-	person_event SPRITE_SAGE, 7, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, 0, 0, SageScript_0x9859d, EVENT_WISE_TRIOS_ROOM_WISE_TRIO_1
-	person_event SPRITE_SAGE, 5, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 0, 0, SageScript_0x985a0, EVENT_WISE_TRIOS_ROOM_WISE_TRIO_1
-	person_event SPRITE_SAGE, 2, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, 2, 2, TrainerSageGaku, EVENT_WISE_TRIOS_ROOM_WISE_TRIO_2
-	person_event SPRITE_SAGE, 6, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, 2, 2, TrainerSageMasa, EVENT_WISE_TRIOS_ROOM_WISE_TRIO_2
-	person_event SPRITE_SAGE, 4, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, 2, 2, TrainerSageKoji, EVENT_WISE_TRIOS_ROOM_WISE_TRIO_2
+	person_event SPRITE_SAGE, 2, 6, SPRITEMOVEDATA_SPINRANDOM_SLOW, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SageScript_0x9859a, EVENT_WISE_TRIOS_ROOM_WISE_TRIO_1
+	person_event SPRITE_SAGE, 7, 6, SPRITEMOVEDATA_WALK_LEFT_RIGHT, 0, 1, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SageScript_0x9859d, EVENT_WISE_TRIOS_ROOM_WISE_TRIO_1
+	person_event SPRITE_SAGE, 5, 7, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_SCRIPT, 0, SageScript_0x985a0, EVENT_WISE_TRIOS_ROOM_WISE_TRIO_1
+	person_event SPRITE_SAGE, 2, 4, SPRITEMOVEDATA_STANDING_DOWN, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 2, TrainerSageGaku, EVENT_WISE_TRIOS_ROOM_WISE_TRIO_2
+	person_event SPRITE_SAGE, 6, 4, SPRITEMOVEDATA_STANDING_UP, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 2, TrainerSageMasa, EVENT_WISE_TRIOS_ROOM_WISE_TRIO_2
+	person_event SPRITE_SAGE, 4, 6, SPRITEMOVEDATA_STANDING_LEFT, 0, 0, -1, -1, 0, PERSONTYPE_TRAINER, 2, TrainerSageKoji, EVENT_WISE_TRIOS_ROOM_WISE_TRIO_2
--- a/maps/map_headers.asm
+++ b/maps/map_headers.asm
@@ -41,9 +41,9 @@
 	map_header Route38EcruteakGate, TILESET_GATE, GATE, ROUTE_38, MUSIC_ROUTE_37, 0, PALETTE_DAY, 1
 	map_header Route39Barn, TILESET_KURT_HOUSE, INDOOR, ROUTE_39, MUSIC_ECRUTEAK_CITY, 0, PALETTE_DAY, 1
 	map_header Route39Farmhouse, TILESET_HOUSE_1, INDOOR, ROUTE_39, MUSIC_ECRUTEAK_CITY, 0, PALETTE_DAY, 1
-	map_header Route38, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_38, MUSIC_ROUTE_37, 0, PALETTE_AUTO, 1
-	map_header Route39, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_39, MUSIC_ROUTE_37, 0, PALETTE_AUTO, 1
-	map_header OlivineCity, TILESET_JOHTO_OUTSIDE_1, TOWN, OLIVINE_CITY, MUSIC_VIOLET_CITY, 0, PALETTE_AUTO, 1
+	map_header Route38, TILESET_JOHTO_1, ROUTE, ROUTE_38, MUSIC_ROUTE_37, 0, PALETTE_AUTO, 1
+	map_header Route39, TILESET_JOHTO_1, ROUTE, ROUTE_39, MUSIC_ROUTE_37, 0, PALETTE_AUTO, 1
+	map_header OlivineCity, TILESET_JOHTO_1, TOWN, OLIVINE_CITY, MUSIC_VIOLET_CITY, 0, PALETTE_AUTO, 1
 
 
 MapGroup2:
@@ -51,9 +51,9 @@
 	map_header MahoganyGym, TILESET_GYM_1, INDOOR, MAHOGANY_TOWN, MUSIC_GYM, 1, PALETTE_DAY, 1
 	map_header MahoganyPokeCenter1F, TILESET_POKECENTER, INDOOR, MAHOGANY_TOWN, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
 	map_header Route42EcruteakGate, TILESET_GATE, GATE, ROUTE_42, MUSIC_LAKE_OF_RAGE, 0, PALETTE_DAY, 1
-	map_header Route42, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_42, MUSIC_LAKE_OF_RAGE, 0, PALETTE_AUTO, 3
-	map_header Route44, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_44, MUSIC_LAKE_OF_RAGE, 0, PALETTE_AUTO, 4
-	map_header MahoganyTown, TILESET_JOHTO_OUTSIDE_1, TOWN, MAHOGANY_TOWN, MUSIC_CHERRYGROVE_CITY, 0, PALETTE_AUTO, 1
+	map_header Route42, TILESET_JOHTO_1, ROUTE, ROUTE_42, MUSIC_LAKE_OF_RAGE, 0, PALETTE_AUTO, 3
+	map_header Route44, TILESET_JOHTO_1, ROUTE, ROUTE_44, MUSIC_LAKE_OF_RAGE, 0, PALETTE_AUTO, 4
+	map_header MahoganyTown, TILESET_JOHTO_1, TOWN, MAHOGANY_TOWN, MUSIC_CHERRYGROVE_CITY, 0, PALETTE_AUTO, 1
 
 
 MapGroup3:
@@ -78,7 +78,7 @@
 	map_header RadioTower3F, TILESET_RADIO_TOWER, INDOOR, RADIO_TOWER, 1<<7 | MUSIC_GOLDENROD_CITY, 1, PALETTE_DAY, 1
 	map_header RadioTower4F, TILESET_RADIO_TOWER, INDOOR, RADIO_TOWER, 1<<7 | MUSIC_GOLDENROD_CITY, 1, PALETTE_DAY, 1
 	map_header RadioTower5F, TILESET_RADIO_TOWER, INDOOR, RADIO_TOWER, 1<<7 | MUSIC_GOLDENROD_CITY, 1, PALETTE_DAY, 1
-	map_header RuinsofAlphOutside, TILESET_JOHTO_OUTSIDE_1, ROUTE, RUINS_OF_ALPH, MUSIC_UNION_CAVE, 0, PALETTE_AUTO, 4
+	map_header RuinsofAlphOutside, TILESET_JOHTO_1, ROUTE, RUINS_OF_ALPH, MUSIC_UNION_CAVE, 0, PALETTE_AUTO, 4
 	map_header RuinsofAlphHoOhChamber, TILESET_RUINS_OF_ALPH, DUNGEON, RUINS_OF_ALPH, MUSIC_UNION_CAVE, 1, PALETTE_DAY, 1
 	map_header RuinsofAlphKabutoChamber, TILESET_RUINS_OF_ALPH, DUNGEON, RUINS_OF_ALPH, MUSIC_UNION_CAVE, 1, PALETTE_DAY, 1
 	map_header RuinsofAlphOmanyteChamber, TILESET_RUINS_OF_ALPH, DUNGEON, RUINS_OF_ALPH, MUSIC_UNION_CAVE, 1, PALETTE_DAY, 1
@@ -137,7 +137,7 @@
 	map_header DarkCaveVioletEntrance, TILESET_WHIRL_ISLANDS, CAVE, DARK_CAVE, MUSIC_DARK_CAVE, 1, PALETTE_DARK, 3
 	map_header DarkCaveBlackthornEntrance, TILESET_WHIRL_ISLANDS, CAVE, DARK_CAVE, MUSIC_DARK_CAVE, 1, PALETTE_DARK, 3
 	map_header DragonsDen1F, TILESET_CAVE, CAVE, DRAGONS_DEN, MUSIC_DRAGONS_DEN, 1, PALETTE_NITE, 5
-	map_header DragonsDenB1F, TILESET_JOHTO_OUTSIDE_1, CAVE, DRAGONS_DEN, MUSIC_DRAGONS_DEN, 1, PALETTE_NITE, 5
+	map_header DragonsDenB1F, TILESET_JOHTO_1, CAVE, DRAGONS_DEN, MUSIC_DRAGONS_DEN, 1, PALETTE_NITE, 5
 	map_header DragonShrine, TILESET_LAB, INDOOR, DRAGONS_DEN, MUSIC_DRAGONS_DEN, 1, PALETTE_NITE, 1
 	map_header TohjoFalls, TILESET_CAVE, CAVE, TOHJO_FALLS, MUSIC_UNION_CAVE, 1, PALETTE_NITE, 3
 	map_header DiglettsCave, TILESET_CAVE, CAVE, DIGLETTS_CAVE, MUSIC_MT_MOON, 1, PALETTE_NITE, 1
@@ -159,7 +159,7 @@
 	map_header EcruteakMart, TILESET_MART, INDOOR, ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, 0, PALETTE_DAY, 1
 	map_header EcruteakGym, TILESET_SPROUT_TOWER, INDOOR, ECRUTEAK_CITY, MUSIC_GYM, 1, PALETTE_DAY, 1
 	map_header EcruteakItemfinderHouse, TILESET_KURT_HOUSE, INDOOR, ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, 0, PALETTE_DAY, 1
-	map_header EcruteakCity, TILESET_JOHTO_OUTSIDE_1, TOWN, ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, 0, PALETTE_AUTO, 4
+	map_header EcruteakCity, TILESET_JOHTO_1, TOWN, ECRUTEAK_CITY, MUSIC_ECRUTEAK_CITY, 0, PALETTE_AUTO, 4
 
 
 MapGroup5:
@@ -170,9 +170,9 @@
 	map_header BlackthornMart, TILESET_MART, INDOOR, BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, 0, PALETTE_DAY, 1
 	map_header BlackthornPokeCenter1F, TILESET_POKECENTER, INDOOR, BLACKTHORN_CITY, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
 	map_header MoveDeletersHouse, TILESET_HOUSE_1, INDOOR, BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, 0, PALETTE_DAY, 1
-	map_header Route45, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_45, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 9
-	map_header Route46, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_46, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 1
-	map_header BlackthornCity, TILESET_JOHTO_OUTSIDE_1, TOWN, BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, 0, PALETTE_AUTO, 4
+	map_header Route45, TILESET_JOHTO_1, ROUTE, ROUTE_45, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 9
+	map_header Route46, TILESET_JOHTO_1, ROUTE, ROUTE_46, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 1
+	map_header BlackthornCity, TILESET_JOHTO_1, TOWN, BLACKTHORN_CITY, MUSIC_AZALEA_TOWN, 0, PALETTE_AUTO, 4
 
 
 MapGroup6:
@@ -180,10 +180,10 @@
 	map_header CinnabarPokeCenter2FBeta, TILESET_POKECENTER, INDOOR, CINNABAR_ISLAND, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
 	map_header Route19FuchsiaGate, TILESET_GATE, GATE, ROUTE_19, MUSIC_ROUTE_3, 0, PALETTE_DAY, 1
 	map_header SeafoamGym, TILESET_CAVE, INDOOR, SEAFOAM_ISLANDS, MUSIC_GYM, 1, PALETTE_DAY, 1
-	map_header Route19, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_19, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
-	map_header Route20, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_20, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 2
-	map_header Route21, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_21, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 2
-	map_header CinnabarIsland, TILESET_KANTO_OUTSIDE, TOWN, CINNABAR_ISLAND, MUSIC_VIRIDIAN_CITY, 0, PALETTE_AUTO, 2
+	map_header Route19, TILESET_KANTO, ROUTE, ROUTE_19, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
+	map_header Route20, TILESET_KANTO, ROUTE, ROUTE_20, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 2
+	map_header Route21, TILESET_KANTO, ROUTE, ROUTE_21, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 2
+	map_header CinnabarIsland, TILESET_KANTO, TOWN, CINNABAR_ISLAND, MUSIC_VIRIDIAN_CITY, 0, PALETTE_AUTO, 2
 
 
 MapGroup7:
@@ -198,12 +198,12 @@
 	map_header Route10PokeCenter2FBeta, TILESET_POKECENTER, INDOOR, ROUTE_10, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
 	map_header PowerPlant, TILESET_POWER_PLANT, INDOOR, POWER_PLANT, MUSIC_VIRIDIAN_CITY, 0, PALETTE_DAY, 1
 	map_header BillsHouse, TILESET_HOUSE_1, INDOOR, ROUTE_25, MUSIC_VIRIDIAN_CITY, 0, PALETTE_DAY, 1
-	map_header Route4, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_4, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 0
-	map_header Route9, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_9, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 3
-	map_header Route10North, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_10, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 3
-	map_header Route24, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_24, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 3
-	map_header Route25, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_25, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 3
-	map_header CeruleanCity, TILESET_KANTO_OUTSIDE, TOWN, CERULEAN_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_AUTO, 0
+	map_header Route4, TILESET_KANTO, ROUTE, ROUTE_4, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 0
+	map_header Route9, TILESET_KANTO, ROUTE, ROUTE_9, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 3
+	map_header Route10North, TILESET_KANTO, ROUTE, ROUTE_10, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 3
+	map_header Route24, TILESET_KANTO, ROUTE, ROUTE_24, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 3
+	map_header Route25, TILESET_KANTO, ROUTE, ROUTE_25, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 3
+	map_header CeruleanCity, TILESET_KANTO, TOWN, CERULEAN_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_AUTO, 0
 
 
 MapGroup8:
@@ -212,8 +212,8 @@
 	map_header AzaleaMart, TILESET_MART, INDOOR, AZALEA_TOWN, MUSIC_AZALEA_TOWN, 0, PALETTE_DAY, 1
 	map_header KurtsHouse, TILESET_KURT_HOUSE, INDOOR, AZALEA_TOWN, MUSIC_AZALEA_TOWN, 0, PALETTE_DAY, 1
 	map_header AzaleaGym, TILESET_GYM_1, INDOOR, AZALEA_TOWN, MUSIC_GYM, 1, PALETTE_DAY, 1
-	map_header Route33, TILESET_JOHTO_OUTSIDE_2, ROUTE, ROUTE_33, MUSIC_ROUTE_30, 0, PALETTE_AUTO, 1
-	map_header AzaleaTown, TILESET_JOHTO_OUTSIDE_2, TOWN, AZALEA_TOWN, MUSIC_AZALEA_TOWN, 0, PALETTE_AUTO, 1
+	map_header Route33, TILESET_JOHTO_2, ROUTE, ROUTE_33, MUSIC_ROUTE_30, 0, PALETTE_AUTO, 1
+	map_header AzaleaTown, TILESET_JOHTO_2, TOWN, AZALEA_TOWN, MUSIC_AZALEA_TOWN, 0, PALETTE_AUTO, 1
 
 
 MapGroup9:
@@ -221,16 +221,16 @@
 	map_header LakeofRageMagikarpHouse, TILESET_HOUSE_1, INDOOR, LAKE_OF_RAGE, MUSIC_LAKE_OF_RAGE, 0, PALETTE_DAY, 1
 	map_header Route43MahoganyGate, TILESET_GATE, GATE, ROUTE_43, MUSIC_LAKE_OF_RAGE, 0, PALETTE_DAY, 1
 	map_header Route43Gate, TILESET_GATE, GATE, ROUTE_43, MUSIC_LAKE_OF_RAGE, 0, PALETTE_DAY, 1
-	map_header Route43, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_43, MUSIC_LAKE_OF_RAGE, 0, PALETTE_AUTO, 4
-	map_header LakeofRage, TILESET_JOHTO_OUTSIDE_1, TOWN, LAKE_OF_RAGE, MUSIC_LAKE_OF_RAGE, 0, PALETTE_AUTO, 8
+	map_header Route43, TILESET_JOHTO_1, ROUTE, ROUTE_43, MUSIC_LAKE_OF_RAGE, 0, PALETTE_AUTO, 4
+	map_header LakeofRage, TILESET_JOHTO_1, TOWN, LAKE_OF_RAGE, MUSIC_LAKE_OF_RAGE, 0, PALETTE_AUTO, 8
 
 
 MapGroup10:
-	map_header Route32, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_32, MUSIC_ROUTE_30, 0, PALETTE_AUTO, 11
-	map_header Route35, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_35, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 4
-	map_header Route36, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_36, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 1
-	map_header Route37, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_37, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 1
-	map_header VioletCity, TILESET_JOHTO_OUTSIDE_1, TOWN, VIOLET_CITY, MUSIC_VIOLET_CITY, 0, PALETTE_AUTO, 4
+	map_header Route32, TILESET_JOHTO_1, ROUTE, ROUTE_32, MUSIC_ROUTE_30, 0, PALETTE_AUTO, 11
+	map_header Route35, TILESET_JOHTO_1, ROUTE, ROUTE_35, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 4
+	map_header Route36, TILESET_JOHTO_1, ROUTE, ROUTE_36, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 1
+	map_header Route37, TILESET_JOHTO_1, ROUTE, ROUTE_37, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 1
+	map_header VioletCity, TILESET_JOHTO_1, TOWN, VIOLET_CITY, MUSIC_VIOLET_CITY, 0, PALETTE_AUTO, 4
 	map_header VioletMart, TILESET_MART, INDOOR, VIOLET_CITY, MUSIC_VIOLET_CITY, 0, PALETTE_DAY, 1
 	map_header VioletGym, TILESET_GYM_1, INDOOR, VIOLET_CITY, MUSIC_GYM, 1, PALETTE_DAY, 1
 	map_header EarlsPokemonAcademy, TILESET_LAB, INDOOR, VIOLET_CITY, MUSIC_VIOLET_CITY, 0, PALETTE_DAY, 1
@@ -246,8 +246,8 @@
 
 
 MapGroup11:
-	map_header Route34, TILESET_JOHTO_OUTSIDE_2, ROUTE, ROUTE_34, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 1
-	map_header GoldenrodCity, TILESET_JOHTO_OUTSIDE_2, TOWN, GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, 0, PALETTE_AUTO, 1
+	map_header Route34, TILESET_JOHTO_2, ROUTE, ROUTE_34, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 1
+	map_header GoldenrodCity, TILESET_JOHTO_2, TOWN, GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, 0, PALETTE_AUTO, 1
 	map_header GoldenrodGym, TILESET_GYM_1, INDOOR, GOLDENROD_CITY, MUSIC_GYM, 1, PALETTE_DAY, 1
 	map_header GoldenrodBikeShop, TILESET_OLIVINE_GYM, INDOOR, GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, 0, PALETTE_DAY, 1
 	map_header GoldenrodHappinessRater, TILESET_HOUSE_1, INDOOR, GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, 0, PALETTE_DAY, 1
@@ -266,7 +266,7 @@
 	map_header GoldenrodDeptStoreRoof, TILESET_MART, INDOOR, GOLDENROD_CITY, MUSIC_GOLDENROD_CITY, 0, PALETTE_DAY, 1
 	map_header GoldenrodGameCorner, TILESET_GAME_CORNER, INDOOR, GOLDENROD_CITY, MUSIC_GAME_CORNER, 0, PALETTE_DAY, 1
 	map_header GoldenrodPokeCenter1F, TILESET_POKECENTER, INDOOR, GOLDENROD_CITY, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
-	map_header GoldenrodPokeComCenter2FMobile, TILESET_GOLDENROD_POKECOM_CENTER_2F_MOBILE, INDOOR, GOLDENROD_CITY, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
+	map_header GoldenrodPokeComCenter2FMobile, TILESET_POKECOM_CENTER, INDOOR, GOLDENROD_CITY, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
 	map_header IlexForestAzaleaGate, TILESET_GATE, GATE, ROUTE_34, MUSIC_ROUTE_36, 0, PALETTE_DAY, 1
 	map_header Route34IlexForestGate, TILESET_GATE, GATE, ROUTE_34, MUSIC_ROUTE_36, 0, PALETTE_DAY, 1
 	map_header DayCare, TILESET_HOUSE_1, INDOOR, ROUTE_34, MUSIC_AZALEA_TOWN, 0, PALETTE_DAY, 1
@@ -273,9 +273,9 @@
 
 
 MapGroup12:
-	map_header Route6, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_6, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 4
-	map_header Route11, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_11, MUSIC_ROUTE_12, 0, PALETTE_AUTO, 1
-	map_header VermilionCity, TILESET_KANTO_OUTSIDE, TOWN, VERMILION_CITY, MUSIC_VERMILION_CITY, 0, PALETTE_AUTO, 2
+	map_header Route6, TILESET_KANTO, ROUTE, ROUTE_6, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 4
+	map_header Route11, TILESET_KANTO, ROUTE, ROUTE_11, MUSIC_ROUTE_12, 0, PALETTE_AUTO, 1
+	map_header VermilionCity, TILESET_KANTO, TOWN, VERMILION_CITY, MUSIC_VERMILION_CITY, 0, PALETTE_AUTO, 2
 	map_header VermilionHouseFishingSpeechHouse, TILESET_HOUSE_1, INDOOR, VERMILION_CITY, MUSIC_VERMILION_CITY, 0, PALETTE_DAY, 1
 	map_header VermilionPokeCenter1F, TILESET_POKECENTER, INDOOR, VERMILION_CITY, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
 	map_header VermilionPokeCenter2FBeta, TILESET_POKECENTER, INDOOR, VERMILION_CITY, MUSIC_VERMILION_CITY, 0, PALETTE_DAY, 1
@@ -289,8 +289,8 @@
 
 
 MapGroup13:
-	map_header Route1, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_1, MUSIC_ROUTE_1, 0, PALETTE_AUTO, 1
-	map_header PalletTown, TILESET_KANTO_OUTSIDE, TOWN, PALLET_TOWN, MUSIC_PALLET_TOWN, 0, PALETTE_AUTO, 2
+	map_header Route1, TILESET_KANTO, ROUTE, ROUTE_1, MUSIC_ROUTE_1, 0, PALETTE_AUTO, 1
+	map_header PalletTown, TILESET_KANTO, TOWN, PALLET_TOWN, MUSIC_PALLET_TOWN, 0, PALETTE_AUTO, 2
 	map_header RedsHouse1F, TILESET_KRISS_HOUSE, INDOOR, PALLET_TOWN, MUSIC_PALLET_TOWN, 0, PALETTE_DAY, 1
 	map_header RedsHouse2F, TILESET_KRISS_HOUSE, INDOOR, PALLET_TOWN, MUSIC_PALLET_TOWN, 0, PALETTE_DAY, 1
 	map_header BluesHouse, TILESET_HOUSE_1, INDOOR, PALLET_TOWN, MUSIC_PALLET_TOWN, 0, PALETTE_DAY, 1
@@ -298,8 +298,8 @@
 
 
 MapGroup14:
-	map_header Route3, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_3, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
-	map_header PewterCity, TILESET_KANTO_OUTSIDE, TOWN, PEWTER_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_AUTO, 1
+	map_header Route3, TILESET_KANTO, ROUTE, ROUTE_3, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
+	map_header PewterCity, TILESET_KANTO, TOWN, PEWTER_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_AUTO, 1
 	map_header PewterNidoranSpeechHouse, TILESET_HOUSE_1, INDOOR, PEWTER_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_DAY, 1
 	map_header PewterGym, TILESET_SPROUT_TOWER, INDOOR, PEWTER_CITY, MUSIC_GYM, 1, PALETTE_DAY, 1
 	map_header PewterMart, TILESET_MART, INDOOR, PEWTER_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_DAY, 1
@@ -318,13 +318,13 @@
 	map_header FastShipB1F, TILESET_LIGHTHOUSE, INDOOR, FAST_SHIP, MUSIC_SS_AQUA, 0, PALETTE_DAY, 1
 	map_header OlivinePortPassage, TILESET_UNDERGROUND, INDOOR, OLIVINE_CITY, MUSIC_VIOLET_CITY, 0, PALETTE_DAY, 1
 	map_header VermilionPortPassage, TILESET_UNDERGROUND, INDOOR, VERMILION_CITY, MUSIC_VERMILION_CITY, 0, PALETTE_DAY, 1
-	map_header MountMoonSquare, TILESET_KANTO_OUTSIDE, ROUTE, MT_MOON, MUSIC_MT_MOON_SQUARE, 0, PALETTE_AUTO, 1
+	map_header MountMoonSquare, TILESET_KANTO, ROUTE, MT_MOON, MUSIC_MT_MOON_SQUARE, 0, PALETTE_AUTO, 1
 	map_header MountMoonGiftShop, TILESET_KURT_HOUSE, INDOOR, MT_MOON, MUSIC_VIRIDIAN_CITY, 0, PALETTE_DAY, 1
 	map_header TinTowerRoof, TILESET_SPROUT_TOWER, ROUTE, TIN_TOWER, MUSIC_TIN_TOWER, 0, PALETTE_AUTO, 1
 
 
 MapGroup16:
-	map_header Route23, TILESET_KANTO_OUTSIDE, TOWN, ROUTE_23, MUSIC_INDIGO_PLATEAU, 0, PALETTE_AUTO, 1
+	map_header Route23, TILESET_KANTO, TOWN, ROUTE_23, MUSIC_INDIGO_PLATEAU, 0, PALETTE_AUTO, 1
 	map_header IndigoPlateauPokeCenter1F, TILESET_POKECENTER, INDOOR, INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, 0, PALETTE_DAY, 1
 	map_header WillsRoom, TILESET_GYM_1, INDOOR, INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, 1, PALETTE_DAY, 1
 	map_header KogasRoom, TILESET_GYM_1, INDOOR, INDIGO_PLATEAU, MUSIC_INDIGO_PLATEAU, 1, PALETTE_DAY, 1
@@ -335,11 +335,11 @@
 
 
 MapGroup17:
-	map_header Route13, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_13, MUSIC_ROUTE_12, 0, PALETTE_AUTO, 13
-	map_header Route14, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_14, MUSIC_ROUTE_12, 0, PALETTE_AUTO, 1
-	map_header Route15, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_15, MUSIC_ROUTE_12, 0, PALETTE_AUTO, 1
-	map_header Route18, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_18, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
-	map_header FuchsiaCity, TILESET_KANTO_OUTSIDE, TOWN, FUCHSIA_CITY, MUSIC_CELADON_CITY, 0, PALETTE_AUTO, 8
+	map_header Route13, TILESET_KANTO, ROUTE, ROUTE_13, MUSIC_ROUTE_12, 0, PALETTE_AUTO, 13
+	map_header Route14, TILESET_KANTO, ROUTE, ROUTE_14, MUSIC_ROUTE_12, 0, PALETTE_AUTO, 1
+	map_header Route15, TILESET_KANTO, ROUTE, ROUTE_15, MUSIC_ROUTE_12, 0, PALETTE_AUTO, 1
+	map_header Route18, TILESET_KANTO, ROUTE, ROUTE_18, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
+	map_header FuchsiaCity, TILESET_KANTO, TOWN, FUCHSIA_CITY, MUSIC_CELADON_CITY, 0, PALETTE_AUTO, 8
 	map_header FuchsiaMart, TILESET_MART, INDOOR, FUCHSIA_CITY, MUSIC_CELADON_CITY, 0, PALETTE_DAY, 1
 	map_header SafariZoneMainOffice, TILESET_GAME_CORNER, INDOOR, FUCHSIA_CITY, MUSIC_CELADON_CITY, 0, PALETTE_DAY, 1
 	map_header FuchsiaGym, TILESET_LAB, INDOOR, FUCHSIA_CITY, MUSIC_GYM, 1, PALETTE_DAY, 1
@@ -351,10 +351,10 @@
 
 
 MapGroup18:
-	map_header Route8, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_8, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
-	map_header Route12, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_12, MUSIC_ROUTE_12, 0, PALETTE_AUTO, 13
-	map_header Route10South, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_10, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 3
-	map_header LavenderTown, TILESET_KANTO_OUTSIDE, TOWN, LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, 0, PALETTE_AUTO, 1
+	map_header Route8, TILESET_KANTO, ROUTE, ROUTE_8, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
+	map_header Route12, TILESET_KANTO, ROUTE, ROUTE_12, MUSIC_ROUTE_12, 0, PALETTE_AUTO, 13
+	map_header Route10South, TILESET_KANTO, ROUTE, ROUTE_10, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 3
+	map_header LavenderTown, TILESET_KANTO, TOWN, LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, 0, PALETTE_AUTO, 1
 	map_header LavenderPokeCenter1F, TILESET_POKECENTER, INDOOR, LAVENDER_TOWN, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
 	map_header LavenderPokeCenter2FBeta, TILESET_POKECENTER, INDOOR, LAVENDER_TOWN, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
 	map_header MrFujisHouse, TILESET_HOUSE_1, INDOOR, LAVENDER_TOWN, MUSIC_LAVENDER_TOWN, 0, PALETTE_DAY, 1
@@ -368,8 +368,8 @@
 
 
 MapGroup19:
-	map_header Route28, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_28, MUSIC_INDIGO_PLATEAU, 0, PALETTE_AUTO, 4
-	map_header SilverCaveOutside, TILESET_KANTO_OUTSIDE, TOWN, SILVER_CAVE, MUSIC_INDIGO_PLATEAU, 0, PALETTE_AUTO, 4
+	map_header Route28, TILESET_KANTO, ROUTE, ROUTE_28, MUSIC_INDIGO_PLATEAU, 0, PALETTE_AUTO, 4
+	map_header SilverCaveOutside, TILESET_KANTO, TOWN, SILVER_CAVE, MUSIC_INDIGO_PLATEAU, 0, PALETTE_AUTO, 4
 	map_header SilverCavePokeCenter1F, TILESET_POKECENTER, INDOOR, SILVER_CAVE, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
 	map_header Route28FamousSpeechHouse, TILESET_HOUSE_1, INDOOR, ROUTE_28, MUSIC_AZALEA_TOWN, 0, PALETTE_DAY, 1
 
@@ -384,10 +384,10 @@
 
 
 MapGroup21:
-	map_header Route7, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_7, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
-	map_header Route16, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_16, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
-	map_header Route17, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_17, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 0
-	map_header CeladonCity, TILESET_KANTO_OUTSIDE, TOWN, CELADON_CITY, MUSIC_CELADON_CITY, 0, PALETTE_AUTO, 0
+	map_header Route7, TILESET_KANTO, ROUTE, ROUTE_7, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
+	map_header Route16, TILESET_KANTO, ROUTE, ROUTE_16, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
+	map_header Route17, TILESET_KANTO, ROUTE, ROUTE_17, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 0
+	map_header CeladonCity, TILESET_KANTO, TOWN, CELADON_CITY, MUSIC_CELADON_CITY, 0, PALETTE_AUTO, 0
 	map_header CeladonDeptStore1F, TILESET_MART, INDOOR, CELADON_CITY, MUSIC_CELADON_CITY, 0, PALETTE_DAY, 1
 	map_header CeladonDeptStore2F, TILESET_MART, INDOOR, CELADON_CITY, MUSIC_CELADON_CITY, 0, PALETTE_DAY, 1
 	map_header CeladonDeptStore3F, TILESET_MART, INDOOR, CELADON_CITY, MUSIC_CELADON_CITY, 0, PALETTE_DAY, 1
@@ -413,9 +413,9 @@
 
 
 MapGroup22:
-	map_header Route40, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_40, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 1
-	map_header Route41, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_41, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 2
-	map_header CianwoodCity, TILESET_JOHTO_OUTSIDE_1, TOWN, CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, 0, PALETTE_AUTO, 1
+	map_header Route40, TILESET_JOHTO_1, ROUTE, ROUTE_40, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 1
+	map_header Route41, TILESET_JOHTO_1, ROUTE, ROUTE_41, MUSIC_ROUTE_36, 0, PALETTE_AUTO, 2
+	map_header CianwoodCity, TILESET_JOHTO_1, TOWN, CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, 0, PALETTE_AUTO, 1
 	map_header ManiasHouse, TILESET_HOUSE_1, INDOOR, CIANWOOD_CITY, MUSIC_ECRUTEAK_CITY, 0, PALETTE_DAY, 1
 	map_header CianwoodGym, TILESET_SPROUT_TOWER, INDOOR, CIANWOOD_CITY, MUSIC_GYM, 1, PALETTE_DAY, 1
 	map_header CianwoodPokeCenter1F, TILESET_POKECENTER, INDOOR, CIANWOOD_CITY, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
@@ -432,9 +432,9 @@
 
 
 MapGroup23:
-	map_header Route2, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_2, MUSIC_ROUTE_2, 0, PALETTE_AUTO, 1
-	map_header Route22, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_22, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 4
-	map_header ViridianCity, TILESET_KANTO_OUTSIDE, TOWN, VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_AUTO, 4
+	map_header Route2, TILESET_KANTO, ROUTE, ROUTE_2, MUSIC_ROUTE_2, 0, PALETTE_AUTO, 1
+	map_header Route22, TILESET_KANTO, ROUTE, ROUTE_22, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 4
+	map_header ViridianCity, TILESET_KANTO, TOWN, VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_AUTO, 4
 	map_header ViridianGym, TILESET_TRAIN_STATION, INDOOR, VIRIDIAN_CITY, MUSIC_GYM, 1, PALETTE_DAY, 1
 	map_header ViridianNicknameSpeechHouse, TILESET_HOUSE_1, INDOOR, VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_DAY, 1
 	map_header TrainerHouse1F, TILESET_HOUSE_1, INDOOR, VIRIDIAN_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_DAY, 1
@@ -448,10 +448,10 @@
 
 
 MapGroup24:
-	map_header Route26, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_26, MUSIC_ROUTE_26, 0, PALETTE_AUTO, 2
-	map_header Route27, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_27, MUSIC_ROUTE_26, 0, PALETTE_AUTO, 2
-	map_header Route29, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_29, MUSIC_ROUTE_29, 0, PALETTE_AUTO, 1
-	map_header NewBarkTown, TILESET_JOHTO_OUTSIDE_1, TOWN, NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, 0, PALETTE_AUTO, 2
+	map_header Route26, TILESET_JOHTO_1, ROUTE, ROUTE_26, MUSIC_ROUTE_26, 0, PALETTE_AUTO, 2
+	map_header Route27, TILESET_JOHTO_1, ROUTE, ROUTE_27, MUSIC_ROUTE_26, 0, PALETTE_AUTO, 2
+	map_header Route29, TILESET_JOHTO_1, ROUTE, ROUTE_29, MUSIC_ROUTE_29, 0, PALETTE_AUTO, 1
+	map_header NewBarkTown, TILESET_JOHTO_1, TOWN, NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, 0, PALETTE_AUTO, 2
 	map_header ElmsLab, TILESET_LAB, INDOOR, NEW_BARK_TOWN, MUSIC_PROF_ELM, 0, PALETTE_DAY, 1
 	map_header KrissHouse1F, TILESET_KRISS_HOUSE, INDOOR, NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, 0, PALETTE_DAY, 1
 	map_header KrissHouse2F, TILESET_KRISS_HOUSE_2F, INDOOR, NEW_BARK_TOWN, MUSIC_NEW_BARK_TOWN, 0, PALETTE_DAY, 1
@@ -464,8 +464,8 @@
 
 
 MapGroup25:
-	map_header Route5, TILESET_KANTO_OUTSIDE, ROUTE, ROUTE_5, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
-	map_header SaffronCity, TILESET_KANTO_OUTSIDE, TOWN, SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_AUTO, 1
+	map_header Route5, TILESET_KANTO, ROUTE, ROUTE_5, MUSIC_ROUTE_3, 0, PALETTE_AUTO, 1
+	map_header SaffronCity, TILESET_KANTO, TOWN, SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_AUTO, 1
 	map_header FightingDojo, TILESET_TRAIN_STATION, INDOOR, SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_DAY, 1
 	map_header SaffronGym, TILESET_UNDERGROUND, INDOOR, SAFFRON_CITY, MUSIC_GYM, 1, PALETTE_DAY, 1
 	map_header SaffronMart, TILESET_MART, INDOOR, SAFFRON_CITY, MUSIC_VIRIDIAN_CITY, 0, PALETTE_DAY, 1
@@ -482,9 +482,9 @@
 
 
 MapGroup26:
-	map_header Route30, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_30, MUSIC_ROUTE_30, 0, PALETTE_AUTO, 4
-	map_header Route31, TILESET_JOHTO_OUTSIDE_1, ROUTE, ROUTE_31, MUSIC_ROUTE_30, 0, PALETTE_AUTO, 4
-	map_header CherrygroveCity, TILESET_JOHTO_OUTSIDE_1, TOWN, CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, 0, PALETTE_AUTO, 1
+	map_header Route30, TILESET_JOHTO_1, ROUTE, ROUTE_30, MUSIC_ROUTE_30, 0, PALETTE_AUTO, 4
+	map_header Route31, TILESET_JOHTO_1, ROUTE, ROUTE_31, MUSIC_ROUTE_30, 0, PALETTE_AUTO, 4
+	map_header CherrygroveCity, TILESET_JOHTO_1, TOWN, CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, 0, PALETTE_AUTO, 1
 	map_header CherrygroveMart, TILESET_MART, INDOOR, CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, 0, PALETTE_DAY, 1
 	map_header CherrygrovePokeCenter1F, TILESET_POKECENTER, INDOOR, CHERRYGROVE_CITY, MUSIC_POKEMON_CENTER, 0, PALETTE_DAY, 1
 	map_header CherrygroveGymSpeechHouse, TILESET_HOUSE_1, INDOOR, CHERRYGROVE_CITY, MUSIC_CHERRYGROVE_CITY, 0, PALETTE_DAY, 1
--- a/misc/battle_tower_47.asm
+++ b/misc/battle_tower_47.asm
@@ -11,6 +11,12 @@
 	ld hl, BT_OTTrainerClass
 ELSE
 	ld hl, BT_OTName + 5
+; BUG ALERT
+; Instead of loading the Trainer Class, this routine
+; loads the 6th character in the Trainer's name, then
+; uses it to get the gender of the trainer.
+; As a consequence, the enemy trainer's dialog will
+; always be sampled from the female array.
 ENDC
 	ld a, [hl]
 	dec a
@@ -81,4100 +87,9 @@
 	ret
 ; 11c05d
 
-Function11c05d: ; 11c05d
-	ld a, e
-	or d
-	jr z, .asm_11c071
-	ld a, e
-	and d
-	cp $ff
-	jr z, .asm_11c071
-	push hl
-	call Function11c156
-	pop hl
-	call PlaceString
-	and a
-	ret
+INCLUDE "misc/fixed_words.asm"
 
-.asm_11c071
-	ld c, l
-	ld b, h
-	scf
-	ret
-; 11c075
-
-Function11c075: ; 11c075
-	push de
-	ld a, c
-	call Function11c254
-	pop de
-	ld bc, wcd36
-	call Function11c08f
-	ret
-; 11c082
-
-Function11c082: ; 11c082
-	push de
-	ld a, c
-	call Function11c254
-	pop de
-	ld bc, wcd36
-	call Function11c0c6
-	ret
-; 11c08f
-
-Function11c08f: ; 11c08f
-	ld l, e
-	ld h, d
-	push hl
-	ld a, $3
-.asm_11c094
-	push af
-	ld a, [bc]
-	ld e, a
-	inc bc
-	ld a, [bc]
-	ld d, a
-	inc bc
-	push bc
-	call Function11c05d
-	jr c, .asm_11c0a2
-	inc bc
-
-.asm_11c0a2
-	ld l, c
-	ld h, b
-	pop bc
-	pop af
-	dec a
-	jr nz, .asm_11c094
-	pop hl
-	ld de, $0028
-	add hl, de
-	ld a, $3
-.asm_11c0b0
-	push af
-	ld a, [bc]
-	ld e, a
-	inc bc
-	ld a, [bc]
-	ld d, a
-	inc bc
-	push bc
-	call Function11c05d
-	jr c, .asm_11c0be
-	inc bc
-
-.asm_11c0be
-	ld l, c
-	ld h, b
-	pop bc
-	pop af
-	dec a
-	jr nz, .asm_11c0b0
-	ret
-; 11c0c6
-
-
-Function11c0c6: ; 11c0c6
-	ld a, [wJumptableIndex]
-	ld l, a
-	ld a, [wcf64]
-	ld h, a
-	push hl
-	ld hl, $c608 + 16
-	ld a, $0
-	ld [hli], a
-	push de
-	xor a
-	ld [wJumptableIndex], a
-	ld a, $12
-	ld [wcf64], a
-	ld a, $6
-.asm_11c0e1
-	push af
-	ld a, [bc]
-	ld e, a
-	inc bc
-	ld a, [bc]
-	ld d, a
-	inc bc
-	or e
-	jr z, .asm_11c133
-	push hl
-	push bc
-	call Function11c156
-	call Function11c14a
-	ld e, c
-	pop bc
-	pop hl
-	ld a, e
-	or a
-	jr z, .asm_11c133
-.asm_11c0fa
-	ld a, [wcf64]
-	cp $12
-	jr z, .asm_11c102
-	inc e
-
-.asm_11c102
-	cp e
-	jr nc, .asm_11c11c
-	ld a, [wJumptableIndex]
-	inc a
-	ld [wJumptableIndex], a
-	ld [hl], $4e
-	rra
-	jr c, .asm_11c113
-	ld [hl], $55
-
-.asm_11c113
-	inc hl
-	ld a, $12
-	ld [wcf64], a
-	dec e
-	jr .asm_11c0fa
-
-.asm_11c11c
-	cp $12
-	jr z, .asm_11c123
-	ld [hl], $7f
-	inc hl
-
-.asm_11c123
-	sub e
-	ld [wcf64], a
-	ld de, $c608
-.asm_11c12a
-	ld a, [de]
-	cp $50
-	jr z, .asm_11c133
-	inc de
-	ld [hli], a
-	jr .asm_11c12a
-
-.asm_11c133
-	pop af
-	dec a
-	jr nz, .asm_11c0e1
-	ld [hl], $57
-	pop bc
-	ld hl, $c608 + 16
-	call PlaceWholeStringInBoxAtOnce
-	pop hl
-	ld a, l
-	ld [wJumptableIndex], a
-	ld a, h
-	ld [wcf64], a
-	ret
-; 11c14a
-
-Function11c14a: ; 11c14a
-	ld c, $0
-	ld hl, $c608
-.asm_11c14f
-	ld a, [hli]
-	cp $50
-	ret z
-	inc c
-	jr .asm_11c14f
-; 11c156
-
-Function11c156: ; 11c156
-	ld a, [rSVBK]
-	push af
-	ld a, $1
-	ld [rSVBK], a
-	ld a, $50
-	ld hl, $c608
-	ld bc, $000b
-	call ByteFill
-	ld a, d
-	and a
-	jr z, .asm_11c19c
-	ld hl, Unknown_11daac
-	dec d
-	sla d
-	ld c, d
-	ld b, $0
-	add hl, bc
-	ld a, [hli]
-	ld c, a
-	ld a, [hl]
-	ld b, a
-	push bc
-	pop hl
-	ld c, e
-	ld b, $0
-	sla c
-	rl b
-	sla c
-	rl b
-	sla c
-	rl b
-	add hl, bc
-	ld bc, $0005
-.asm_11c18f
-	ld de, $c608
-	call CopyBytes
-	ld de, $c608
-	pop af
-	ld [rSVBK], a
-	ret
-
-.asm_11c19c
-	ld a, e
-	ld [wd265], a
-	call GetPokemonName
-	ld hl, StringBuffer1
-	ld bc, $000a
-	jr .asm_11c18f
-; 11c1ab
-
-Function11c1ab: ; 11c1ab
-	ld a, [hInMenu]
-	push af
-	ld a, $1
-	ld [hInMenu], a
-	call Function11c1b9
-	pop af
-	ld [hInMenu], a
-	ret
-; 11c1b9
-
-Function11c1b9: ; 11c1b9
-	call Function11c1ca
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	call Function11c283
-	pop af
-	ld [rSVBK], a
-	ret
-; 11c1ca
-
-Function11c1ca: ; 11c1ca
-	xor a
-	ld [wJumptableIndex], a
-	ld [wcf64], a
-	ld [wcf65], a
-	ld [wcf66], a
-	ld [wcd23], a
-	ld [BGMapBuffer], a
-	ld [wcd21], a
-	ld [CreditsTimer], a
-	ld [wcd35], a
-	ld [wcd2b], a
-	ld a, $ff
-	ld [wcd24], a
-	ld a, [MenuSelection2]
-	dec a
-	call Function11c254
-	call ClearBGPalettes
-	call ClearSprites
-	call ClearScreen
-	call Function11d323
-	call SetPalettes
-	call DisableLCD
-	ld hl, GFX_11d67e
-	ld de, VTiles2
-	ld bc, $60
-	call CopyBytes
-	ld hl, LZ_11d6de
-	ld de, VTiles0
-	call Decompress
-	call EnableLCD
-	callba Function104061
-	callba Function8cf53
-	callba LoadPokemonData
-	callba Function40c30
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, $c6d0
-	ld de, LYOverrides
-	ld bc, $100
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	call Function11d4aa
-	call Function11d3ba
-	ret
-; 11c254
-
-Function11c254: ; 11c254
-	push af
-	ld a, $4
-	call GetSRAMBank
-	ld hl, $a007
-	pop af
-	sla a
-	sla a
-	ld c, a
-	sla a
-	add c
-	ld c, a
-	ld b, $0
-	add hl, bc
-	ld de, wcd36
-	ld bc, $000c
-	call CopyBytes
-	call CloseSRAM
-	ret
-; 11c277
-
-
-Function11c277: ; 11c277 (47:4277)
-	ld a, $7f
-	hlcoord 0, 6
-	ld bc, $f0
-	call ByteFill
-	ret
-
-Function11c283: ; 11c283
-.asm_11c283
-	call JoyTextDelay
-	ld a, [hJoyPressed]
-	ld [hJoypadPressed], a
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .asm_11c2a2
-	call Function11c2ac
-	callba Function8cf69
-	callba Function104061
-	jr .asm_11c283
-
-.asm_11c2a2
-	callba Function8cf53
-	call ClearSprites
-	ret
-; 11c2ac
-
-Function11c2ac: ; 11c2ac
-	ld a, [wJumptableIndex]
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_11c2bb
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 11c2bb
-
-
-Jumptable_11c2bb: ; 11c2bb (47:42bb)
-	dw Function11c2e9
-	dw Function11c346
-	dw Function11c35f
-	dw Function11c373
-	dw Function11c3c2
-	dw Function11c3ed
-	dw Function11c52c
-	dw Function11c53d
-	dw Function11c658
-	dw Function11c675
-	dw Function11c9bd
-	dw Function11c9c3
-	dw Function11caad
-	dw Function11cab3
-	dw Function11cb52
-	dw Function11cb66
-	dw Function11cbf5
-	dw Function11ccef
-	dw Function11cd04
-	dw Function11cd20
-	dw Function11cd54
-	dw Function11ce0b
-	dw Function11ce2b
-
-
-Function11c2e9: ; 11c2e9 (47:42e9)
-	lb de, $1a, $0d
-	ld a, $1d
-	call Function3b2a
-	lb de, $42, $0d
-	ld a, $1d
-	call Function3b2a
-	ld hl, $c
-	add hl, bc
-	ld a, $1
-	ld [hl], a
-	lb de, $4a, $10
-	ld a, $1d
-	call Function3b2a
-	ld hl, $c
-	add hl, bc
-	ld a, $3
-	ld [hl], a
-	lb de, $50, $80
-	ld a, $1d
-	call Function3b2a
-	ld hl, $c
-	add hl, bc
-	ld a, $4
-	ld [hl], a
-	lb de, $50, $20
-	ld a, $1d
-	call Function3b2a
-	ld hl, $c
-	add hl, bc
-	ld a, $5
-	ld [hl], a
-	lb de, $50, $10
-	ld a, $1d
-	call Function3b2a
-	ld hl, $c
-	add hl, bc
-	ld a, $2
-	ld [hl], a
-	ld hl, wcd23
-	set 1, [hl]
-	set 2, [hl]
-	jp Function11cfb5
-
-Function11c346: ; 11c346 (47:4346)
-	ld a, $9
-	ld [wcd2d], a
-	ld a, $2
-	ld [wcd2e], a
-	ld [wcd2f], a
-	ld [wcd30], a
-	ld de, wcd2d
-	call Function11cfce
-	jp Function11cfb5
-
-Function11c35f: ; 11c35f (47:435f)
-	ld hl, wcd2f
-rept 2
-	inc [hl]
-endr
-rept 2
-	dec hl
-endr
-	dec [hl]
-	push af
-	ld de, wcd2d
-	call Function11cfce
-	pop af
-	ret nz
-	jp Function11cfb5
-
-Function11c373: ; 11c373 (47:4373)
-	ld hl, wcd30
-rept 2
-	inc [hl]
-endr
-rept 2
-	dec hl
-endr
-	dec [hl]
-	push af
-	ld de, wcd2d
-	call Function11cfce
-	pop af
-	ret nz
-	call Function11c38a
-	jp Function11cfb5
-
-Function11c38a: ; 11c38a (47:438a)
-	ld hl, Unknown_11c986
-	ld bc, wcd36
-	ld a, $6
-.asm_11c392
-	push af
-	ld a, [hli]
-	ld e, a
-	ld a, [hli]
-	ld d, a
-	push hl
-	push de
-	pop hl
-	ld a, [bc]
-	inc bc
-	ld e, a
-	ld a, [bc]
-	inc bc
-	ld d, a
-	push bc
-	or e
-	jr z, .asm_11c3af
-	ld a, e
-	and d
-	cp $ff
-	jr z, .asm_11c3af
-	call Function11c05d
-	jr .asm_11c3b5
-.asm_11c3af
-	ld de, String_11c3bc
-	call PlaceString
-.asm_11c3b5
-	pop bc
-	pop hl
-	pop af
-	dec a
-	jr nz, .asm_11c392
-	ret
-; 11c3bc (47:43bc)
-
-String_11c3bc: ; 11c3bc
-	db "ーーーーー@"
-; 11c3c2
-
-Function11c3c2: ; 11c3c2 (47:43c2)
-	call Function11c277
-	ld de, Unknown_11cfbe
-	call Function11d035
-	hlcoord 1, 7
-	ld de, String_11c4db
-	call PlaceString
-	hlcoord 1, 16
-	ld de, String_11c51b
-	call PlaceString
-	call Function11c4be
-	ld hl, wcd23
-	set 0, [hl]
-	ld hl, wcd24
-	res 0, [hl]
-	call Function11cfb5
-
-Function11c3ed: ; 11c3ed (47:43ed)
-	ld hl, BGMapBuffer ; wcd20 (aliases: CreditsPos)
-	ld de, hJoypadPressed ; $ffa3
-	ld a, [de]
-	and $8
-	jr nz, .asm_11c426
-	ld a, [de]
-	and $2
-	jr nz, .asm_11c41a
-	ld a, [de]
-	and $1
-	jr nz, .asm_11c42c
-	ld de, hJoyLast
-	ld a, [de]
-	and $40
-	jr nz, .asm_11c47c
-	ld a, [de]
-	and $80
-	jr nz, .asm_11c484
-	ld a, [de]
-	and $20
-	jr nz, .asm_11c48c
-	ld a, [de]
-	and $10
-	jr nz, .asm_11c498
-	ret
-.asm_11c41a
-	call PlayClickSFX
-.asm_11c41d
-	ld hl, wcd24
-	set 0, [hl]
-	ld a, $c
-	jr .asm_11c475
-.asm_11c426
-	ld a, $8
-	ld [BGMapBuffer], a ; wcd20 (aliases: CreditsPos)
-	ret
-.asm_11c42c
-	ld a, [BGMapBuffer] ; wcd20 (aliases: CreditsPos)
-	cp $6
-	jr c, .asm_11c472
-	sub $6
-	jr z, .asm_11c469
-	dec a
-	jr z, .asm_11c41d
-	ld hl, wcd36
-	ld c, $c
-	xor a
-.asm_11c440
-	or [hl]
-	inc hl
-	dec c
-	jr nz, .asm_11c440
-	and a
-	jr z, .asm_11c460
-	ld de, Unknown_11cfba
-	call Function11cfce
-	decoord 1, 2
-	ld bc, wcd36
-	call Function11c08f
-	ld hl, wcd24
-	set 0, [hl]
-	ld a, $e
-	jr .asm_11c475
-.asm_11c460
-	ld hl, wcd24
-	set 0, [hl]
-	ld a, $11
-	jr .asm_11c475
-.asm_11c469
-	ld hl, wcd24
-	set 0, [hl]
-	ld a, $a
-	jr .asm_11c475
-.asm_11c472
-	call Function11c4a5
-.asm_11c475
-	ld [wJumptableIndex], a
-	call PlayClickSFX
-	ret
-.asm_11c47c
-	ld a, [hl]
-	cp $3
-	ret c
-	sub $3
-	jr .asm_11c4a3
-.asm_11c484
-	ld a, [hl]
-	cp $6
-	ret nc
-	add $3
-	jr .asm_11c4a3
-.asm_11c48c
-	ld a, [hl]
-	and a
-	ret z
-	cp $3
-	ret z
-	cp $6
-	ret z
-	dec a
-	jr .asm_11c4a3
-.asm_11c498
-	ld a, [hl]
-	cp $2
-	ret z
-	cp $5
-	ret z
-	cp $8
-	ret z
-	inc a
-.asm_11c4a3
-	ld [hl], a
-	ret
-
-Function11c4a5: ; 11c4a5 (47:44a5)
-	ld hl, wcd23
-	res 0, [hl]
-	ld a, [wcd2b]
-	and a
-	jr nz, .asm_11c4b7
-	xor a
-	ld [wcd21], a
-	ld a, $6
-	ret
-.asm_11c4b7
-	xor a
-	ld [CreditsTimer], a
-	ld a, $15
-	ret
-
-Function11c4be: ; 11c4be (47:44be)
-	ld a, $1
-	hlcoord 0, 6, AttrMap
-	ld bc, $a0
-	call ByteFill
-	ld a, $7
-	hlcoord 0, 14, AttrMap
-	ld bc, $28
-	call ByteFill
-	callba Function104061
-	ret
-; 11c4db (47:44db)
-
-String_11c4db: ; 11c4db
-	db   "6つのことば", $1f, "くみあわせます"
-	next "かえたいところ", $1f, "えらぶと でてくる"
-	next "ことばのグループから いれかえたい"
-	next "たんご", $1f, "えらんでください"
-	db   "@"
-; 11c51b
-
-String_11c51b: ; 11c51b
-	db "ぜんぶけす やめる   けってい@"
-; 11c52c
-
-Function11c52c: ; 11c52c (47:452c)
-	call Function11c277
-	call Function11c5f0
-	call Function11c618
-	ld hl, wcd24
-	res 1, [hl]
-	call Function11cfb5
-
-Function11c53d: ; 11c53d (47:453d)
-	ld hl, wcd21
-	ld de, hJoypadPressed ; $ffa3
-
-	ld a, [de]
-	and START
-	jr nz, .start
-
-	ld a, [de]
-	and SELECT
-	jr nz, .select
-
-	ld a, [de]
-	and B_BUTTON
-	jr nz, .b
-
-	ld a, [de]
-	and A_BUTTON
-	jr nz, .a
-
-	ld de, hJoyLast
-
-	ld a, [de]
-	and D_UP
-	jr nz, .up
-
-	ld a, [de]
-	and D_DOWN
-	jr nz, .down
-
-	ld a, [de]
-	and D_LEFT
-	jr nz, .left
-
-	ld a, [de]
-	and D_RIGHT
-	jr nz, .right
-
-	ret
-
-.a
-	ld a, [wcd21]
-	cp $f
-	jr c, .asm_11c59d
-	sub $f
-	jr z, .asm_11c5ab
-	dec a
-	jr z, .asm_11c599
-	jr .b
-
-.start
-	ld hl, wcd24
-	set 0, [hl]
-	ld a, $8
-	ld [BGMapBuffer], a ; wcd20 (aliases: CreditsPos)
-
-.b
-	ld a, $4
-	jr .asm_11c59f
-
-.select
-	ld a, [wcd2b]
-	xor $1
-	ld [wcd2b], a
-	ld a, $15
-	jr .asm_11c59f
-
-.asm_11c599
-	ld a, $13
-	jr .asm_11c59f
-
-.asm_11c59d
-	ld a, $8
-
-.asm_11c59f
-	ld hl, wcd24
-	set 1, [hl]
-	ld [wJumptableIndex], a
-	call PlayClickSFX
-	ret
-
-.asm_11c5ab
-	ld a, [BGMapBuffer] ; wcd20 (aliases: CreditsPos)
-	call Function11ca6a
-	call PlayClickSFX
-	ret
-
-.up
-	ld a, [hl]
-	cp $3
-	ret c
-	sub $3
-	jr .asm_11c5ee
-
-.down
-	ld a, [hl]
-	cp $f
-	ret nc
-	add $3
-	jr .asm_11c5ee
-
-.left
-	ld a, [hl]
-	and a
-	ret z
-	cp $3
-	ret z
-	cp $6
-	ret z
-	cp $9
-	ret z
-	cp $c
-	ret z
-	cp $f
-	ret z
-	dec a
-	jr .asm_11c5ee
-
-.right
-	ld a, [hl]
-	cp $2
-	ret z
-	cp $5
-	ret z
-	cp $8
-	ret z
-	cp $b
-	ret z
-	cp $e
-	ret z
-	cp $11
-	ret z
-	inc a
-
-.asm_11c5ee
-	ld [hl], a
-	ret
-; 11c5f0
-
-Function11c5f0: ; 11c5f0 (47:45f0)
-	ld de, Strings_11da52
-	ld bc, Unknown_11c63a
-	ld a, $f
-.asm_11c5f8
-	push af
-	ld a, [bc]
-	inc bc
-	ld l, a
-	ld a, [bc]
-	inc bc
-	ld h, a
-	push bc
-	call PlaceString
-.asm_11c603
-	inc de
-	ld a, [de]
-	cp $50
-	jr z, .asm_11c603
-	pop bc
-	pop af
-	dec a
-	jr nz, .asm_11c5f8
-	hlcoord 1, 17
-	ld de, String_11c62a
-	call PlaceString
-	ret
-
-Function11c618: ; 11c618 (47:4618)
-	ld a, $2
-	hlcoord 0, 6, AttrMap
-	ld bc, $c8
-	call ByteFill
-	callba Function104061
-	ret
-; 11c62a (47:462a)
-
-String_11c62a: ; 11c62a
-	db "けす    モード   やめる@"
-; 11c63a
-
-Unknown_11c63a: ; 11c63a
-	dwcoord  1,  7
-	dwcoord  7,  7
-	dwcoord 13,  7
-	dwcoord  1,  9
-	dwcoord  7,  9
-	dwcoord 13,  9
-	dwcoord  1, 11
-	dwcoord  7, 11
-	dwcoord 13, 11
-	dwcoord  1, 13
-	dwcoord  7, 13
-	dwcoord 13, 13
-	dwcoord  1, 15
-	dwcoord  7, 15
-	dwcoord 13, 15
-; 11c658
-
-Function11c658: ; 11c658 (47:4658)
-	call Function11c277
-	call Function11c770
-	ld de, Unknown_11cfc2
-	call Function11d035
-	call Function11c9ab
-	call Function11c7bc
-	call Function11c86e
-	ld hl, wcd24
-	res 3, [hl]
-	call Function11cfb5
-
-Function11c675: ; 11c675 (47:4675)
-	ld hl, wcd25
-	ld de, hJoypadPressed ; $ffa3
-	ld a, [de]
-	and A_BUTTON
-	jr nz, .a
-	ld a, [de]
-	and B_BUTTON
-	jr nz, .b
-	ld a, [de]
-	and START
-	jr nz, .start
-	ld a, [de]
-	and SELECT
-	jr z, .select
-
-	ld a, [wcd26]
-	and a
-	ret z
-	sub $c
-	jr nc, .asm_11c699
-	xor a
-.asm_11c699
-	ld [wcd26], a
-	jr .asm_11c6c4
-
-.start
-	ld hl, wcd28
-	ld a, [wcd26]
-	add $c
-	cp [hl]
-	ret nc
-	ld [wcd26], a
-	ld a, [hl]
-	ld b, a
-	ld hl, wcd25
-	ld a, [wcd26]
-	add [hl]
-	jr c, .asm_11c6b9
-	cp b
-	jr c, .asm_11c6c4
-.asm_11c6b9
-	ld a, [wcd28]
-	ld hl, wcd26
-	sub [hl]
-	dec a
-	ld [wcd25], a
-.asm_11c6c4
-	call Function11c992
-	call Function11c7bc
-	call Function11c86e
-	ret
-
-.select
-	ld de, hJoyLast
-	ld a, [de]
-	and D_UP
-	jr nz, .asm_11c708
-	ld a, [de]
-	and D_DOWN
-	jr nz, .asm_11c731
-	ld a, [de]
-	and D_LEFT
-	jr nz, .asm_11c746
-	ld a, [de]
-	and D_RIGHT
-	jr nz, .asm_11c755
-	ret
-
-.a
-	call Function11c8f6
-	ld a, $4
-	ld [wcd35], a
-	jr .asm_11c6fc
-.b
-	ld a, [wcd2b]
-	and a
-	jr nz, .asm_11c6fa
-	ld a, $6
-	jr .asm_11c6fc
-.asm_11c6fa
-	ld a, $15
-.asm_11c6fc
-	ld [wJumptableIndex], a
-	ld hl, wcd24
-	set 3, [hl]
-	call PlayClickSFX
-	ret
-.asm_11c708
-	ld a, [hl]
-	cp $3
-	jr c, .asm_11c711
-	sub $3
-	jr .asm_11c76e
-.asm_11c711
-	ld a, [wcd26]
-	sub $3
-	ret c
-	ld [wcd26], a
-	jr .asm_11c6c4
-.asm_11c71c
-	ld hl, wcd28
-	ld a, [wcd26]
-	add $c
-	ret c
-	cp [hl]
-	ret nc
-	ld a, [wcd26]
-	add $3
-	ld [wcd26], a
-	jr .asm_11c6c4
-.asm_11c731
-	ld a, [wcd28]
-	ld b, a
-	ld a, [wcd26]
-	add [hl]
-	add $3
-	cp b
-	ret nc
-	ld a, [hl]
-	cp $9
-	jr nc, .asm_11c71c
-	add $3
-	jr .asm_11c76e
-.asm_11c746
-	ld a, [hl]
-	and a
-	ret z
-	cp $3
-	ret z
-	cp $6
-	ret z
-	cp $9
-	ret z
-	dec a
-	jr .asm_11c76e
-.asm_11c755
-	ld a, [wcd28]
-	ld b, a
-	ld a, [wcd26]
-	add [hl]
-	inc a
-	cp b
-	ret nc
-	ld a, [hl]
-	cp $2
-	ret z
-	cp $5
-	ret z
-	cp $8
-	ret z
-	cp $b
-	ret z
-	inc a
-.asm_11c76e
-	ld [hl], a
-	ret
-
-Function11c770: ; 11c770 (47:4770)
-	xor a
-	ld [wcd25], a
-	ld [wcd26], a
-	ld [wcd27], a
-	ld a, [wcd2b]
-	and a
-	jr nz, .asm_11c7ab
-	ld a, [wcd21]
-	and a
-	jr z, .asm_11c799
-	dec a
-	sla a
-	ld hl, Unknown_11f220
-	ld c, a
-	ld b, 0
-	add hl, bc
-	ld a, [hli]
-	ld [wcd28], a
-	ld a, [hl]
-.asm_11c795
-	ld [wcd29], a
-	ret
-.asm_11c799
-	ld a, [wc7d2]
-	ld [wcd28], a
-.asm_11c79f
-	ld c, $c
-	call SimpleDivide
-	and a
-	jr nz, .asm_11c7a8
-	dec b
-.asm_11c7a8
-	ld a, b
-	jr .asm_11c795
-.asm_11c7ab
-	ld hl, $c68a + 30
-	ld a, [CreditsTimer]
-	ld c, a
-	ld b, 0
-rept 2
-	add hl, bc
-endr
-	ld a, [hl]
-	ld [wcd28], a
-	jr .asm_11c79f
-
-Function11c7bc: ; 11c7bc (47:47bc)
-	ld bc, Unknown_11c854
-	ld a, [wcd2b]
-	and a
-	jr nz, .asm_11c814
-	ld a, [wcd21]
-	ld d, a
-	and a
-	jr z, .asm_11c7e9
-	ld a, [wcd26]
-	ld e, a
-.asm_11c7d0
-	ld a, [bc]
-	ld l, a
-	inc bc
-	ld a, [bc]
-	ld h, a
-	inc bc
-	and l
-	cp $ff
-	ret z
-	push bc
-	push de
-	call Function11c05d
-	pop de
-	pop bc
-	inc e
-	ld a, [wcd28]
-	cp e
-	jr nz, .asm_11c7d0
-	ret
-.asm_11c7e9
-	ld hl, wd100
-	ld a, [wcd26]
-	ld e, a
-	add hl, de
-.asm_11c7f1
-	push de
-	ld a, [hli]
-	ld e, a
-	ld d, $0
-	push hl
-	ld a, [bc]
-	ld l, a
-	inc bc
-	ld a, [bc]
-	ld h, a
-	inc bc
-	and l
-	cp $ff
-	jr z, .asm_11c811
-	push bc
-	call Function11c05d
-	pop bc
-	pop hl
-	pop de
-	inc e
-	ld a, [wcd28]
-	cp e
-	jr nz, .asm_11c7f1
-	ret
-.asm_11c811
-	pop hl
-	pop de
-	ret
-.asm_11c814
-	ld hl, $c648
-	ld a, [wcd22]
-	ld e, a
-	ld d, $0
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld e, a
-	ld a, [hl]
-	ld d, a
-	push de
-	pop hl
-	ld a, [wcd26]
-	ld e, a
-	ld d, $0
-rept 2
-	add hl, de
-endr
-	ld a, [wcd26]
-	ld e, a
-.asm_11c831
-	push de
-	ld a, [hli]
-	ld e, a
-	ld a, [hli]
-	ld d, a
-	push hl
-	ld a, [bc]
-	ld l, a
-	inc bc
-	ld a, [bc]
-	ld h, a
-	inc bc
-	and l
-	cp $ff
-	jr z, .asm_11c851
-	push bc
-	call Function11c05d
-	pop bc
-	pop hl
-	pop de
-	inc e
-	ld a, [wcd28]
-	cp e
-	jr nz, .asm_11c831
-	ret
-.asm_11c851
-	pop hl
-	pop de
-	ret
-; 11c854 (47:4854)
-
-Unknown_11c854: ; 11c854
-	dwcoord  2,  8
-	dwcoord  8,  8
-	dwcoord 14,  8
-	dwcoord  2, 10
-	dwcoord  8, 10
-	dwcoord 14, 10
-	dwcoord  2, 12
-	dwcoord  8, 12
-	dwcoord 14, 12
-	dwcoord  2, 14
-	dwcoord  8, 14
-	dwcoord 14, 14
-	dw -1
-; 11c86e
-
-Function11c86e: ; 11c86e (47:486e)
-	ld a, [wcd26]
-	and a
-	jr z, .asm_11c88a
-	hlcoord 2, 17
-	ld de, String_11c8f0
-	call PlaceString
-	hlcoord 6, 17
-	ld c, $3
-	xor a
-.asm_11c883
-	ld [hli], a
-	inc a
-	dec c
-	jr nz, .asm_11c883
-	jr .asm_11c895
-.asm_11c88a
-	hlcoord 2, 17
-	ld c, $7
-	ld a, $7f
-.asm_11c891
-	ld [hli], a
-	dec c
-	jr nz, .asm_11c891
-.asm_11c895
-	ld hl, wcd28
-	ld a, [wcd26]
-	add $c
-	jr c, .asm_11c8b7
-	cp [hl]
-	jr nc, .asm_11c8b7
-	hlcoord 16, 17
-	ld de, String_11c8f3
-	call PlaceString
-	hlcoord 11, 17
-	ld a, $3
-	ld c, a
-.asm_11c8b1
-	ld [hli], a
-	inc a
-	dec c
-	jr nz, .asm_11c8b1
-	ret
-.asm_11c8b7
-	hlcoord 17, 16
-	ld a, $7f
-	ld [hl], a
-	hlcoord 11, 17
-	ld c, $7
-.asm_11c8c2
-	ld [hli], a
-	dec c
-	jr nz, .asm_11c8c2
-	ret
-; 11c8c7 (47:48c7)
-
-Function11c8c7: ; 11c8c7
-	inc a
-	push af
-	and $f
-	ld [hDividend], a
-	pop af
-	and $f0
-	swap a
-	ld [hQuotient], a
-	xor a
-	ld [$ffb5], a
-	push hl
-	callba Function11a80c
-	pop hl
-	ld a, [wcd63]
-	add $f6
-	ld [hli], a
-	ld a, [wcd62]
-	add $f6
-	ld [hli], a
-	ret
-; 11c8ec
-
-String_11c8ec: ; 11c8ec
-	db "ぺージ@"
-; 11c8f0
-
-String_11c8f0: ; 11c8f0
-	db "まえ@"
-; 11c8f3
-
-String_11c8f3: ; 11c8f3
-	db "つぎ@"
-; 11c8f6
-
-Function11c8f6: ; 11c8f6 (47:48f6)
-	ld a, [BGMapBuffer] ; wcd20 (aliases: CreditsPos)
-	call Function11c95d
-	push hl
-	ld a, [wcd2b]
-	and a
-	jr nz, .asm_11c938
-	ld a, [wcd21]
-	ld d, a
-	and a
-	jr z, .asm_11c927
-	ld hl, wcd26
-	ld a, [wcd25]
-	add [hl]
-.asm_11c911
-	ld e, a
-.asm_11c912
-	pop hl
-	push de
-	call Function11c05d
-	pop de
-	ld a, [BGMapBuffer] ; wcd20 (aliases: CreditsPos)
-	ld c, a
-	ld b, $0
-	ld hl, wcd36
-rept 2
-	add hl, bc
-endr
-	ld [hl], e
-	inc hl
-	ld [hl], d
-	ret
-.asm_11c927
-	ld hl, wcd26
-	ld a, [wcd25]
-	add [hl]
-	ld c, a
-	ld b, $0
-	ld hl, wd100
-	add hl, bc
-	ld a, [hl]
-	jr .asm_11c911
-.asm_11c938
-	ld hl, $c648
-	ld a, [wcd22]
-	ld e, a
-	ld d, $0
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld e, a
-	ld a, [hl]
-	ld d, a
-	push de
-	pop hl
-	ld a, [wcd26]
-	ld e, a
-	ld d, $0
-rept 2
-	add hl, de
-endr
-	ld a, [wcd25]
-	ld e, a
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld e, a
-	ld a, [hl]
-	ld d, a
-	jr .asm_11c912
-
-Function11c95d: ; 11c95d (47:495d)
-	sla a
-	ld c, a
-	ld b, 0
-	ld hl, Unknown_11c986
-	add hl, bc
-	ld a, [hli]
-	ld c, a
-	ld a, [hl]
-	ld b, a
-	push bc
-	push bc
-	pop hl
-	ld a, $5
-	ld c, a
-	ld a, $7f
-.asm_11c972
-	ld [hli], a
-	dec c
-	jr nz, .asm_11c972
-	dec hl
-	ld bc, -20
-	add hl, bc
-	ld a, $5
-	ld c, a
-	ld a, $7f
-.asm_11c980
-	ld [hld], a
-	dec c
-	jr nz, .asm_11c980
-	pop hl
-	ret
-; 11c986 (47:4986)
-
-Unknown_11c986:
-	dwcoord  1,  2
-	dwcoord  7,  2
-	dwcoord 13,  2
-	dwcoord  1,  4
-	dwcoord  7,  4
-	dwcoord 13,  4
-; 11c992
-
-Function11c992: ; 11c992 (47:4992)
-	ld a, $8
-	hlcoord 2, 7
-.asm_11c997
-	push af
-	ld a, $7f
-	push hl
-	ld bc, $11
-	call ByteFill
-	pop hl
-	ld bc, $14
-	add hl, bc
-	pop af
-	dec a
-	jr nz, .asm_11c997
-	ret
-
-Function11c9ab: ; 11c9ab (47:49ab)
-	ld a, $7
-	hlcoord 0, 6, AttrMap
-	ld bc, $c8
-	call ByteFill
-	callba Function104061
-	ret
-
-Function11c9bd: ; 11c9bd (47:49bd)
-	ld de, String_11ca38
-	call Function11ca7f
-
-Function11c9c3: ; 11c9c3 (47:49c3)
-	ld hl, wcd2a
-	ld de, hJoypadPressed ; $ffa3
-	ld a, [de]
-	and $1
-	jr nz, .asm_11c9de
-	ld a, [de]
-	and $2
-	jr nz, .asm_11c9e9
-	ld a, [de]
-	and $40
-	jr nz, .asm_11c9f7
-	ld a, [de]
-	and $80
-	jr nz, .asm_11c9fc
-	ret
-.asm_11c9de
-	ld a, [hl]
-	and a
-	jr nz, .asm_11c9e9
-	call Function11ca5e
-	xor a
-	ld [BGMapBuffer], a ; wcd20 (aliases: CreditsPos)
-.asm_11c9e9
-	ld hl, wcd24
-	set 4, [hl]
-	ld a, $4
-	ld [wJumptableIndex], a
-	call PlayClickSFX
-	ret
-.asm_11c9f7
-	ld a, [hl]
-	and a
-	ret z
-	dec [hl]
-	ret
-.asm_11c9fc
-	ld a, [hl]
-	and a
-	ret nz
-	inc [hl]
-	ret
-
-Function11ca01: ; 11ca01 (47:4a01)
-	hlcoord 14, 7, AttrMap
-	ld de, $14
-	ld a, $5
-	ld c, a
-.asm_11ca0a
-	push hl
-	ld a, $6
-	ld b, a
-	ld a, $7
-.asm_11ca10
-	ld [hli], a
-	dec b
-	jr nz, .asm_11ca10
-	pop hl
-	add hl, de
-	dec c
-	jr nz, .asm_11ca0a
-
-Function11ca19: ; 11ca19 (47:4a19)
-	hlcoord 0, 12, AttrMap
-	ld de, $14
-	ld a, $6
-	ld c, a
-.asm_11ca22
-	push hl
-	ld a, $14
-	ld b, a
-	ld a, $7
-.asm_11ca28
-	ld [hli], a
-	dec b
-	jr nz, .asm_11ca28
-	pop hl
-	add hl, de
-	dec c
-	jr nz, .asm_11ca22
-	callba Function104061
-	ret
-; 11ca38 (47:4a38)
-
-String_11ca38: ; 11ca38
-	db   "とうろくちゅう", $25, "あいさつ", $1f, "ぜんぶ"
-	next "けしても よろしいですか?@"
-; 11ca57
-
-String_11ca57: ; 11ca57
-	db   "はい"
-	next "いいえ@"
-; 11ca5e
-
-Function11ca5e: ; 11ca5e (47:4a5e)
-	xor a
-.asm_11ca5f
-	push af
-	call Function11ca6a
-	pop af
-	inc a
-	cp $6
-	jr nz, .asm_11ca5f
-	ret
-
-Function11ca6a: ; 11ca6a (47:4a6a)
-	ld hl, wcd36
-	ld c, a
-	ld b, $0
-rept 2
-	add hl, bc
-endr
-	ld [hl], b
-	inc hl
-	ld [hl], b
-	call Function11c95d
-	ld de, String_11c3bc
-	call PlaceString
-	ret
-
-Function11ca7f: ; 11ca7f (47:4a7f)
-	push de
-	ld de, Unknown_11cfc6
-	call Function11cfce
-	ld de, Unknown_11cfca
-	call Function11cfce
-	hlcoord 1, 14
-	pop de
-	call PlaceString
-	hlcoord 16, 8
-	ld de, String_11ca57
-	call PlaceString
-	call Function11ca01
-	ld a, $1
-	ld [wcd2a], a
-	ld hl, wcd24
-	res 4, [hl]
-	call Function11cfb5
-	ret
-
-Function11caad: ; 11caad (47:4aad)
-	ld de, String_11cb1c
-	call Function11ca7f
-
-Function11cab3: ; 11cab3 (47:4ab3)
-	ld hl, wcd2a
-	ld de, hJoypadPressed ; $ffa3
-	ld a, [de]
-	and $1
-	jr nz, .asm_11cace
-	ld a, [de]
-	and $2
-	jr nz, .asm_11caf9
-	ld a, [de]
-	and $40
-	jr nz, .asm_11cb12
-	ld a, [de]
-	and $80
-	jr nz, .asm_11cb17
-	ret
-.asm_11cace
-	call PlayClickSFX
-	ld a, [hl]
-	and a
-	jr nz, .asm_11cafc
-	ld a, [wcd35]
-	and a
-	jr z, .asm_11caf3
-	cp $ff
-	jr z, .asm_11caf3
-	ld a, $ff
-	ld [wcd35], a
-	hlcoord 1, 14
-	ld de, String_11cb31
-	call PlaceString
-	ld a, $1
-	ld [wcd2a], a
-	ret
-.asm_11caf3
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-.asm_11caf9
-	call PlayClickSFX
-.asm_11cafc
-	ld hl, wcd24
-	set 4, [hl]
-	ld a, $4
-	ld [wJumptableIndex], a
-	ld a, [wcd35]
-	cp $ff
-	ret nz
-	ld a, $1
-	ld [wcd35], a
-	ret
-.asm_11cb12
-	ld a, [hl]
-	and a
-	ret z
-	dec [hl]
-	ret
-.asm_11cb17
-	ld a, [hl]
-	and a
-	ret nz
-	inc [hl]
-	ret
-; 11cb1c (47:4b1c)
-
-String_11cb1c: ; 11cb1c
-	db   "あいさつ", $25, "とうろく", $1f, "ちゅうし"
-	next "しますか?@"
-; 11cb31
-
-String_11cb31: ; 11cb31
-	db   "とうろくちゅう", $25, "あいさつ", $24, "ほぞん"
-	next "されません", $4a, "よろしい ですか?@"
-; 11cb52
-
-Function11cb52: ; 11cb52 (47:4b52)
-	ld hl, Unknown_11cc01
-	ld a, [MenuSelection2]
-.asm_11cb58
-	dec a
-	jr z, .asm_11cb5f
-rept 2
-	inc hl
-endr
-	jr .asm_11cb58
-.asm_11cb5f
-	ld a, [hli]
-	ld e, a
-	ld a, [hl]
-	ld d, a
-	call Function11ca7f
-
-Function11cb66: ; 11cb66 (47:4b66)
-	ld hl, wcd2a
-	ld de, hJoypadPressed ; $ffa3
-	ld a, [de]
-	and $1
-	jr nz, .asm_11cb81
-	ld a, [de]
-	and $2
-	jr nz, .asm_11cbd7
-	ld a, [de]
-	and $40
-	jr nz, .asm_11cbeb
-	ld a, [de]
-	and $80
-	jr nz, .asm_11cbf0
-	ret
-.asm_11cb81
-	ld a, [hl]
-	and a
-	jr nz, .asm_11cbd4
-	ld a, $4
-	call GetSRAMBank
-	ld hl, $a007
-	ld a, [MenuSelection2]
-	dec a
-	sla a
-	sla a
-	ld c, a
-	sla a
-	add c
-	ld c, a
-	ld b, $0
-	add hl, bc
-	ld de, wcd36
-	ld c, $c
-.asm_11cba2
-	ld a, [de]
-	ld [hli], a
-	inc de
-	dec c
-	jr nz, .asm_11cba2
-	call CloseSRAM
-	call PlayClickSFX
-	ld de, Unknown_11cfc6
-	call Function11cfce
-	ld hl, Unknown_11cc7e
-	ld a, [MenuSelection2]
-.asm_11cbba
-	dec a
-	jr z, .asm_11cbc1
-rept 2
-	inc hl
-endr
-	jr .asm_11cbba
-.asm_11cbc1
-	ld a, [hli]
-	ld e, a
-	ld a, [hl]
-	ld d, a
-	hlcoord 1, 14
-	call PlaceString
-	ld hl, wJumptableIndex
-	inc [hl]
-	inc hl
-	ld a, $10
-	ld [hl], a
-	ret
-.asm_11cbd4
-	call PlayClickSFX
-.asm_11cbd7
-	ld de, Unknown_11cfba
-	call Function11cfce
-	call Function11c38a
-	ld hl, wcd24
-	set 4, [hl]
-	ld a, $4
-	ld [wJumptableIndex], a
-	ret
-.asm_11cbeb
-	ld a, [hl]
-	and a
-	ret z
-	dec [hl]
-	ret
-.asm_11cbf0
-	ld a, [hl]
-	and a
-	ret nz
-	inc [hl]
-	ret
-
-Function11cbf5: ; 11cbf5 (47:4bf5)
-	call WaitSFX
-	ld hl, wcf64
-	dec [hl]
-	ret nz
-	dec hl
-	set 7, [hl]
-	ret
-; 11cc01 (47:4c01)
-
-Unknown_11cc01: ; 11cc01
-	dw String_11cc09
-	dw String_11cc23
-	dw String_11cc42
-	dw String_11cc60
-
-String_11cc09: ; 11cc09
-	db   "じこしょうかい は"
-	next "この あいさつで いいですか?@"
-
-String_11cc23: ; 11cc23
-	db   "たいせん ", $4a, "はじまるとき は"
-	next "この あいさつで いいですか?@"
-
-String_11cc42: ; 11cc42
-	db   "たいせん ", $1d, "かったとき は"
-	next "この あいさつで いいですか?@"
-
-String_11cc60: ; 11cc60
-	db   "たいせん ", $1d, "まけたとき は"
-	next "この あいさつで いいですか?@"
-; 11cc7e
-
-Unknown_11cc7e: ; 11cc7e
-	dw String_11cc86
-	dw String_11cc9d
-	dw String_11ccb9
-	dw String_11ccd4
-
-String_11cc86: ; 11cc86
-	db   "じこしょうかい の"
-	next "あいさつ", $1f, "とうろくした!@"
-
-String_11cc9d: ; 11cc9d
-	db   "たいせん ", $4a, "はじまるとき の"
-	next "あいさつ", $1f, "とうろくした!@"
-
-String_11ccb9: ; 11ccb9
-	db   "たいせん ", $1d, "かったとき の"
-	next "あいさつ", $1f, "とうろくした!@"
-
-String_11ccd4: ; 11ccd4
-	db   "たいせん ", $1d, "まけたとき の"
-	next "あいさつ", $1f, "とうろくした!@"
-; 11ccef
-
-Function11ccef: ; 11ccef (47:4cef)
-	ld de, Unknown_11cfc6
-	call Function11cfce
-	hlcoord 1, 14
-	ld de, String_11cd10
-	call PlaceString
-	call Function11ca19
-	call Function11cfb5
-
-Function11cd04: ; 11cd04 (47:4d04)
-	ld de, hJoypadPressed ; $ffa3
-	ld a, [de]
-	and a
-	ret z
-	ld a, $4
-	ld [wJumptableIndex], a
-	ret
-; 11cd10 (47:4d10)
-
-String_11cd10: ; 11cd10
-	db "なにか ことば", $1f, "いれてください@"
-; 11cd20
-
-Function11cd20: ; 11cd20 (47:4d20)
-	call Function11c277
-	ld de, Unknown_11cfc6
-	call Function11cfce
-	hlcoord 1, 14
-	ld a, [wcd2b]
-	ld [wcd2c], a
-	and a
-	jr nz, .asm_11cd3a
-	ld de, String_11cdc7
-	jr .asm_11cd3d
-.asm_11cd3a
-	ld de, String_11cdd9
-.asm_11cd3d
-	call PlaceString
-	hlcoord 4, 8
-	ld de, String_11cdf5
-	call PlaceString
-	call Function11cdaa
-	ld hl, wcd24
-	res 5, [hl]
-	call Function11cfb5
-
-Function11cd54: ; 11cd54 (47:4d54)
-	ld hl, wcd2c
-	ld de, hJoypadPressed ; $ffa3
-	ld a, [de]
-	and A_BUTTON
-	jr nz, .asm_11cd6f
-	ld a, [de]
-	and B_BUTTON
-	jr nz, .asm_11cd73
-	ld a, [de]
-	and D_UP
-	jr nz, .asm_11cd8b
-	ld a, [de]
-	and D_DOWN
-	jr nz, .asm_11cd94
-	ret
-
-.asm_11cd6f
-	ld a, [hl]
-	ld [wcd2b], a
-.asm_11cd73
-	ld a, [wcd2b]
-	and a
-	jr nz, .asm_11cd7d
-	ld a, $6
-	jr .asm_11cd7f
-
-.asm_11cd7d
-	ld a, $15
-.asm_11cd7f
-	ld [wJumptableIndex], a
-	ld hl, wcd24
-	set 5, [hl]
-	call PlayClickSFX
-	ret
-
-.asm_11cd8b
-	ld a, [hl]
-	and a
-	ret z
-	dec [hl]
-	ld de, String_11cdc7
-	jr .asm_11cd9b
-
-.asm_11cd94
-	ld a, [hl]
-	and a
-	ret nz
-	inc [hl]
-	ld de, String_11cdd9
-.asm_11cd9b
-	push de
-	ld de, Unknown_11cfc6
-	call Function11cfce
-	pop de
-	hlcoord 1, 14
-	call PlaceString
-	ret
-
-Function11cdaa: ; 11cdaa (47:4daa)
-	ld a, $2
-	hlcoord 0, 6, AttrMap
-	ld bc, $78
-	call ByteFill
-	ld a, $7
-	hlcoord 0, 12, AttrMap
-	ld bc, $50
-	call ByteFill
-	callba Function104061
-	ret
-; 11cdc7 (47:4dc7)
-
-String_11cdc7: ; 11cdc7
-	db   "ことば", $1f, "しゅるいべつに"
-	next "えらべます@"
-; 11cdd9
-
-String_11cdd9: ; 11cdd9
-	db   "ことば", $1f, "アイウエォ の"
-	next "じゅんばんで ひょうじ します@"
-; 11cdf5
-
-String_11cdf5: ; 11cdf5
-	db "しゅるいべつ モード"
-	next "アイウエォ  モード@"
-; 11ce0b
-
-Function11ce0b: ; 11ce0b (47:4e0b)
-	call Function11c277
-	hlcoord 1, 7
-	ld de, String_11cf79
-	call PlaceString
-	hlcoord 1, 17
-	ld de, String_11c62a
-	call PlaceString
-	call Function11c618
-	ld hl, wcd24
-	res 2, [hl]
-	call Function11cfb5
-
-Function11ce2b: ; 11ce2b (47:4e2b)
-	ld a, [CreditsTimer]
-	sla a
-	sla a
-	ld c, a
-	ld b, 0
-	ld hl, Unknown_11ceb9
-	add hl, bc
-
-	ld de, hJoypadPressed ; $ffa3
-	ld a, [de]
-	and START
-	jr nz, .start
-	ld a, [de]
-	and SELECT
-	jr nz, .select
-	ld a, [de]
-	and A_BUTTON
-	jr nz, .a
-	ld a, [de]
-	and B_BUTTON
-	jr nz, .b
-
-	ld de, hJoyLast
-	ld a, [de]
-	and D_UP
-	jr nz, .up
-	ld a, [de]
-	and D_DOWN
-	jr nz, .down
-	ld a, [de]
-	and D_LEFT
-	jr nz, .left
-	ld a, [de]
-	and D_RIGHT
-	jr nz, .right
-
-	ret
-
-.a
-	ld a, [CreditsTimer]
-	cp $2d
-	jr c, .asm_11ce92
-	sub $2d
-	jr z, .asm_11cea4
-	dec a
-	jr z, .asm_11ce96
-	jr .b
-
-.start
-	ld hl, wcd24
-	set 0, [hl]
-	ld a, $8
-	ld [BGMapBuffer], a ; wcd20 (aliases: CreditsPos)
-.b
-	ld a, $4
-	jr .asm_11ce98
-.select
-	ld a, [wcd2b]
-	xor $1
-	ld [wcd2b], a
-	ld a, $6
-	jr .asm_11ce98
-
-.asm_11ce92
-	ld a, $8
-	jr .asm_11ce98
-
-.asm_11ce96
-	ld a, $13
-.asm_11ce98
-	ld [wJumptableIndex], a
-	ld hl, wcd24
-	set 2, [hl]
-	call PlayClickSFX
-	ret
-.asm_11cea4
-	ld a, [BGMapBuffer] ; wcd20 (aliases: CreditsPos)
-	call Function11ca6a
-	call PlayClickSFX
-	ret
-
-.left
-	inc hl
-.down
-	inc hl
-.right
-	inc hl
-.up
-	ld a, [hl]
-	cp $ff
-	ret z
-	ld [CreditsTimer], a
-	ret
-; 11ceb9 (47:4eb9)
-
-Unknown_11ceb9: ; 11ceb9
-	; up left down right
-	db $ff, $01, $05, $ff
-	db $ff, $02, $06, $00
-	db $ff, $03, $07, $01
-	db $ff, $04, $08, $02
-	db $ff, $14, $09, $03
-	db $00, $06, $0a, $ff
-	db $01, $07, $0b, $05
-	db $02, $08, $0c, $06
-	db $03, $09, $0d, $07
-	db $04, $19, $0e, $08
-	db $05, $0b, $0f, $ff
-	db $06, $0c, $10, $0a
-	db $07, $0d, $11, $0b
-	db $08, $0e, $12, $0c
-	db $09, $1e, $13, $0d
-	db $0a, $10, $2d, $ff
-	db $0b, $11, $2d, $0f
-	db $0c, $12, $2d, $10
-	db $0d, $13, $2d, $11
-	db $0e, $26, $2d, $12
-	db $ff, $15, $19, $04
-	db $ff, $16, $1a, $14
-	db $ff, $17, $1b, $15
-	db $ff, $18, $1c, $16
-	db $ff, $23, $1d, $17
-	db $14, $1a, $1e, $09
-	db $15, $1b, $1f, $19
-	db $16, $1c, $20, $1a
-	db $17, $1d, $21, $1b
-	db $18, $2b, $22, $1c
-	db $19, $1f, $26, $0e
-	db $1a, $20, $27, $1e
-	db $1b, $21, $28, $1f
-	db $1c, $22, $29, $20
-	db $1d, $2c, $2a, $21
-	db $ff, $24, $2b, $18
-	db $ff, $25, $2b, $23
-	db $ff, $ff, $2b, $24
-	db $1e, $27, $2e, $13
-	db $1f, $28, $2e, $26
-	db $20, $29, $2e, $27
-	db $21, $2a, $2e, $28
-	db $22, $ff, $2e, $29
-	db $23, $ff, $2c, $1d
-	db $2b, $ff, $2f, $22
-	db $0f, $2e, $ff, $ff
-	db $26, $2f, $ff, $2d
-	db $2c, $ff, $ff, $2e
-; 11cf79
-
-String_11cf79: ; 11cf79
-	db   "あいうえお なにぬねの や ゆ よ"
-	next "かきくけこ はひふへほ わ"
-	next "さしすせそ まみむめも そのた"
-	next "たちつてと らりるれろ"
-	db   "@"
-; 11cfb5
-
-Function11cfb5: ; 11cfb5 (47:4fb5)
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-; 11cfba (47:4fba)
-
-Unknown_11cfba:
-	db  0,  0 ; start coords
-	db 20,  6 ; end coords
-
-Unknown_11cfbe:
-	db  0, 14 ; start coords
-	db 20,  4 ; end coords
-
-Unknown_11cfc2:
-	db  0,  6 ; start coords
-	db 20, 10 ; end coords
-
-Unknown_11cfc6:
-	db  0, 12 ; start coords
-	db 20,  6 ; end coords
-
-Unknown_11cfca:
-	db 14,  7 ; start coords
-	db  6,  5 ; end coords
-; 11cfce
-
-Function11cfce: ; 11cfce (47:4fce)
-	hlcoord 0, 0
-	ld bc, $14
-	ld a, [de]
-	inc de
-	push af
-	ld a, [de]
-	inc de
-	and a
-.asm_11cfda
-	jr z, .asm_11cfe0
-	add hl, bc
-	dec a
-	jr .asm_11cfda
-.asm_11cfe0
-	pop af
-	ld c, a
-	ld b, 0
-	add hl, bc
-	push hl
-	ld a, $79
-	ld [hli], a
-	ld a, [de]
-	inc de
-rept 2
-	dec a
-endr
-	jr z, .asm_11cff6
-	ld c, a
-	ld a, $7a
-.asm_11cff2
-	ld [hli], a
-	dec c
-	jr nz, .asm_11cff2
-.asm_11cff6
-	ld a, $7b
-	ld [hl], a
-	pop hl
-	ld bc, $14
-	add hl, bc
-	ld a, [de]
-	dec de
-rept 2
-	dec a
-endr
-	jr z, .asm_11d022
-	ld b, a
-.asm_11d005
-	push hl
-	ld a, $7c
-	ld [hli], a
-	ld a, [de]
-rept 2
-	dec a
-endr
-	jr z, .asm_11d015
-	ld c, a
-	ld a, $7f
-.asm_11d011
-	ld [hli], a
-	dec c
-	jr nz, .asm_11d011
-.asm_11d015
-	ld a, $7c
-	ld [hl], a
-	pop hl
-	push bc
-	ld bc, $14
-	add hl, bc
-	pop bc
-	dec b
-	jr nz, .asm_11d005
-.asm_11d022
-	ld a, $7d
-	ld [hli], a
-	ld a, [de]
-rept 2
-	dec a
-endr
-	jr z, .asm_11d031
-	ld c, a
-	ld a, $7a
-.asm_11d02d
-	ld [hli], a
-	dec c
-	jr nz, .asm_11d02d
-.asm_11d031
-	ld a, $7e
-	ld [hl], a
-	ret
-
-Function11d035: ; 11d035 (47:5035)
-	hlcoord 0, 0
-	ld bc, $14
-	ld a, [de]
-	inc de
-	push af
-	ld a, [de]
-	inc de
-	and a
-.asm_11d041
-	jr z, .asm_11d047
-	add hl, bc
-	dec a
-	jr .asm_11d041
-.asm_11d047
-	pop af
-	ld c, a
-	ld b, $0
-	add hl, bc
-	push hl
-	ld a, $79
-	ld [hl], a
-	pop hl
-	push hl
-	ld a, [de]
-	dec a
-	inc de
-	ld c, a
-	add hl, bc
-	ld a, $7b
-	ld [hl], a
-	call Function11d0ac
-	ld a, $7e
-	ld [hl], a
-	pop hl
-	push hl
-	call Function11d0ac
-	ld a, $7d
-	ld [hl], a
-	pop hl
-	push hl
-	inc hl
-	push hl
-	call Function11d0ac
-	pop bc
-	dec de
-	ld a, [de]
-	cp $2
-	jr z, .asm_11d082
-rept 2
-	dec a
-endr
-.asm_11d078
-	push af
-	ld a, $7a
-	ld [hli], a
-	ld [bc], a
-	inc bc
-	pop af
-	dec a
-	jr nz, .asm_11d078
-.asm_11d082
-	pop hl
-	ld bc, $14
-	add hl, bc
-	push hl
-	ld a, [de]
-	dec a
-	ld c, a
-	ld b, $0
-	add hl, bc
-	pop bc
-	inc de
-	ld a, [de]
-	cp $2
-	ret z
-	push bc
-rept 2
-	dec a
-endr
-	ld c, a
-	ld b, a
-	ld de, $14
-.asm_11d09c
-	ld a, $7c
-	ld [hl], a
-	add hl, de
-	dec c
-	jr nz, .asm_11d09c
-	pop hl
-.asm_11d0a4
-	ld a, $7c
-	ld [hl], a
-	add hl, de
-	dec b
-	jr nz, .asm_11d0a4
-	ret
-
-Function11d0ac: ; 11d0ac (47:50ac)
-	ld a, [de]
-	dec a
-	ld bc, $14
-.asm_11d0b1
-	add hl, bc
-	dec a
-	jr nz, .asm_11d0b1
-	ret
-
-Function11d0b6: ; 11d0b6 (47:50b6)
-	ld hl, $c
-	add hl, bc
-	ld a, [hl]
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_11d0c7
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-
-Jumptable_11d0c7: ; 11d0c7 (47:50c7)
-	dw Function11d0dd
-	dw Function11d0e9
-	dw Function11d0f5
-	dw Function11d10f
-	dw Function11d134
-	dw Function11d145
-	dw Function11d156
-	dw Function11d175
-	dw Function11d1d7
-	dw Function11d1d1
-	dw Function11d1fc
-
-
-Function11d0dd: ; 11d0dd (47:50dd)
-	ld a, [BGMapBuffer] ; wcd20 (aliases: CreditsPos)
-	sla a
-	ld hl, Unknown_11d208
-	ld e, $1
-	jr asm_11d11e
-
-Function11d0e9: ; 11d0e9 (47:50e9)
-	ld a, [wcd21]
-	sla a
-	ld hl, Unknown_11d21a
-	ld e, $2
-	jr asm_11d11e
-
-Function11d0f5: ; 11d0f5 (47:50f5)
-	ld hl, Unknown_11d2be
-	ld a, [CreditsTimer]
-	ld e, a
-	ld d, $0
-	add hl, de
-	ld a, [hl]
-	call Function3b3c
-	ld a, [CreditsTimer]
-	sla a
-	ld hl, Unknown_11d23e
-	ld e, $4
-	jr asm_11d11e
-
-Function11d10f: ; 11d10f (47:510f)
-	ld a, $27
-	call Function3b3c
-	ld a, [wcd25]
-	sla a
-	ld hl, Unknown_11d29e
-	ld e, $8
-
-asm_11d11e: ; 11d11e (47:511e)
-	push de
-	ld e, a
-	ld d, $0
-	add hl, de
-	push hl
-	pop de
-	ld hl, $4
-	add hl, bc
-	ld a, [de]
-	inc de
-	ld [hli], a
-	ld a, [de]
-	ld [hl], a
-	pop de
-	ld a, e
-	call Function11d2ee
-	ret
-
-Function11d134: ; 11d134 (47:5134)
-	ld a, $27
-	call Function3b3c
-	ld a, [wcd2a]
-	sla a
-	ld hl, Unknown_11d2b6
-	ld e, $10
-	jr asm_11d11e
-
-Function11d145: ; 11d145 (47:5145)
-	ld a, $27
-	call Function3b3c
-	ld a, [wcd2c]
-	sla a
-	ld hl, Unknown_11d2ba
-	ld e, $20
-	jr asm_11d11e
-
-Function11d156: ; 11d156 (47:5156)
-	ld a, $2a
-	call Function3b3c
-	ld a, [wcd4a]
-	sla a
-	sla a
-	sla a
-	add $18
-	ld hl, $4
-	add hl, bc
-	ld [hli], a
-	ld a, $30
-	ld [hl], a
-	ld a, $1
-	ld e, a
-	call Function11d2ee
-	ret
-
-Function11d175: ; 11d175 (47:5175)
-	ld a, [wcd4d]
-	cp $4
-	jr z, .asm_11d180
-	ld a, $28
-	jr .asm_11d182
-.asm_11d180
-	ld a, $26
-.asm_11d182
-	call Function3b3c
-	ld a, [wcd4d]
-	cp $4
-	jr z, .asm_11d1b1
-	ld a, [wcd4c]
-	sla a
-	sla a
-	sla a
-	add $20
-	ld hl, $4
-	add hl, bc
-	ld [hli], a
-	ld a, [wcd4d]
-	sla a
-	sla a
-	sla a
-	sla a
-	add $48
-	ld [hl], a
-	ld a, $2
-	ld e, a
-	call Function11d2ee
-	ret
-.asm_11d1b1
-	ld a, [wcd4c]
-	sla a
-	sla a
-	sla a
-	ld e, a
-	sla a
-	sla a
-	add e
-	add $18
-	ld hl, $4
-	add hl, bc
-	ld [hli], a
-	ld a, $8a
-	ld [hl], a
-	ld a, $2
-	ld e, a
-	call Function11d2ee
-	ret
-
-Function11d1d1: ; 11d1d1 (47:51d1)
-	ld d, $98
-	ld a, $2c
-	jr asm_11d1db
-
-Function11d1d7: ; 11d1d7 (47:51d7)
-	ld d, $10
-	ld a, $2b
-
-asm_11d1db: ; 11d1db (47:51db)
-	push de
-	call Function3b3c
-	ld a, [wcd4a]
-	sla a
-	sla a
-	sla a
-	ld e, a
-	sla a
-	add e
-	add $40
-	ld hl, $5
-	add hl, bc
-	ld [hld], a
-	pop af
-	ld [hl], a
-	ld a, $4
-	ld e, a
-	call Function11d2ee
-	ret
-
-Function11d1fc: ; 11d1fc (47:51fc)
-	ld a, $26
-	call Function3b3c
-	ld a, $8
-	ld e, a
-	call Function11d2ee
-	ret
-; 11d208 (47:5208)
-
-Unknown_11d208: ; 11d208
-	db $0d, $1a
-	db $3d, $1a
-	db $6d, $1a
-	db $0d, $2a
-	db $3d, $2a
-	db $6d, $2a
-	db $0d, $8a
-	db $3d, $8a
-	db $6d, $8a
-
-Unknown_11d21a: ; 11d21a
-	db $0d, $42
-	db $3d, $42
-	db $6d, $42
-	db $0d, $52
-	db $3d, $52
-	db $6d, $52
-	db $0d, $62
-	db $3d, $62
-	db $6d, $62
-	db $0d, $72
-	db $3d, $72
-	db $6d, $72
-	db $0d, $82
-	db $3d, $82
-	db $6d, $82
-	db $0d, $92
-	db $3d, $92
-	db $6d, $92
-
-Unknown_11d23e: ; 11d23e
-	db $10, $48
-	db $18, $48
-	db $20, $48
-	db $28, $48
-	db $30, $48
-	db $10, $58
-	db $18, $58
-	db $20, $58
-	db $28, $58
-	db $30, $58
-	db $10, $68
-	db $18, $68
-	db $20, $68
-	db $28, $68
-	db $30, $68
-	db $10, $78
-	db $18, $78
-	db $20, $78
-	db $28, $78
-	db $30, $78
-	db $40, $48
-	db $48, $48
-	db $50, $48
-	db $58, $48
-	db $60, $48
-	db $40, $58
-	db $48, $58
-	db $50, $58
-	db $58, $58
-	db $60, $58
-	db $40, $68
-	db $48, $68
-	db $50, $68
-	db $58, $68
-	db $60, $68
-	db $70, $48
-	db $80, $48
-	db $90, $48
-	db $40, $78
-	db $48, $78
-	db $50, $78
-	db $58, $78
-	db $60, $78
-	db $70, $58
-	db $70, $68
-	db $0d, $92
-	db $3d, $92
-	db $6d, $92
-
-Unknown_11d29e: ; 11d29e
-	db $10, $50
-	db $40, $50
-	db $70, $50
-	db $10, $60
-	db $40, $60
-	db $70, $60
-	db $10, $70
-	db $40, $70
-	db $70, $70
-	db $10, $80
-	db $40, $80
-	db $70, $80
-
-Unknown_11d2b6: ; 11d2b6
-	db $80, $50
-	db $80, $60
-
-Unknown_11d2ba: ; 11d2ba
-	db $20, $50
-	db $20, $60
-
-Unknown_11d2be: ; 11d2be
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $28, $28
-	db $29, $26
-	db $26, $26
-
-Function11d2ee: ; 11d2ee (47:52ee)
-	ld hl, wcd24
-	and [hl]
-	jr nz, .asm_11d316
-	ld a, e
-	ld hl, wcd23
-	and [hl]
-	jr z, .asm_11d30f
-	ld hl, $e
-	add hl, bc
-	ld a, [hl]
-	and a
-	jr z, .asm_11d305
-	dec [hl]
-	ret
-.asm_11d305
-	ld a, $0
-	ld [hld], a
-	ld a, $1
-	xor [hl]
-	ld [hl], a
-	and a
-	jr nz, .asm_11d316
-.asm_11d30f
-	ld hl, $7
-	add hl, bc
-	xor a
-	ld [hl], a
-	ret
-.asm_11d316
-	ld hl, $5
-	add hl, bc
-	ld a, $b0
-	sub [hl]
-	ld hl, $7
-	add hl, bc
-	ld [hl], a
-	ret
-
-Function11d323: ; 11d323
-	ld a, [rSVBK]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	ld hl, Palette_11d33a
-	ld de, wMapPals
-	ld bc, 16 * 8
-	call CopyBytes
-	pop af
-	ld [rSVBK], a
-	ret
-; 11d33a
-
-Palette_11d33a:
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 31, 16, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 23, 17, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 31, 31, 31
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-	RGB 00, 00, 00
-
-; 11d3ba
-
-Function11d3ba: ; 11d3ba
-	ld a, [rSVBK]
-	push af
-	ld hl, BattleMonSpclDef
-	ld a, $0
-	ld [wcd2d], a
-	ld [hli], a
-	ld a, $d8
-	ld [wcd2e], a
-	ld [hl], a
-	ld a, $fe
-	ld [wcd2f], a
-	ld a, $54
-	ld [wcd30], a
-	ld a, $a8
-	ld [wcd31], a
-	ld a, $c6
-	ld [wcd32], a
-	ld a, $4a
-	ld [wcd33], a
-	ld a, $c6
-	ld [wcd34], a
-	ld hl, Unknown_11f23c
-	ld a, $2d
-
-Function11d3ef: ; 11d3ef
-	push af
-	ld a, [hli]
-	ld e, a
-	ld a, [hli]
-	ld d, a
-	ld a, [hli]
-	ld c, a
-	ld a, [hli]
-	ld b, a
-	push hl
-	ld hl, wMapPals
-	add hl, de
-	ld a, [wcd2d]
-	ld e, a
-	ld a, [wcd2e]
-	ld d, a
-	push bc
-.asm_11d406
-	ld a, $3
-	ld [rSVBK], a
-	ld a, [hli]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	pop af
-	ld [de], a
-	inc de
-	ld a, $3
-	ld [rSVBK], a
-	ld a, [hli]
-	push af
-	ld a, $5
-	ld [rSVBK], a
-	pop af
-	ld [de], a
-	inc de
-	dec bc
-	ld a, c
-	or b
-	jr nz, .asm_11d406
-	ld a, [wcd2f]
-	ld l, a
-	ld a, [wcd30]
-	ld h, a
-	ld a, [hli]
-	ld c, a
-	ld a, [hli]
-	ld b, a
-	ld a, l
-	ld [wcd2f], a
-	ld a, h
-	ld [wcd30], a
-	push bc
-	pop hl
-	ld c, $0
-.asm_11d43d
-	ld a, [hl]
-	cp $ff
-	jr z, .asm_11d453
-	call Function11d493
-	jr nz, .asm_11d44a
-	inc hl
-	jr .asm_11d43d
-
-.asm_11d44a
-	ld a, [hli]
-	ld [de], a
-	inc de
-	xor a
-	ld [de], a
-	inc de
-	inc c
-	jr .asm_11d43d
-
-.asm_11d453
-	pop hl
-	ld b, $0
-	add hl, bc
-	push hl
-	pop bc
-	ld a, [wcd31]
-	ld l, a
-	ld a, [wcd32]
-	ld h, a
-	ld a, c
-	ld [hli], a
-	ld a, b
-	ld [hli], a
-	ld a, l
-	ld [wcd31], a
-	ld a, h
-	ld [wcd32], a
-	ld a, [wcd33]
-	ld l, a
-	ld a, [wcd34]
-	ld h, a
-	ld a, e
-	ld [wcd2d], a
-	ld [hli], a
-	ld a, d
-	ld [wcd2e], a
-	ld [hli], a
-	ld a, l
-	ld [wcd33], a
-	ld a, h
-	ld [wcd34], a
-	pop hl
-	pop af
-	dec a
-	jr z, .asm_11d48f
-	jp Function11d3ef
-
-.asm_11d48f
-	pop af
-	ld [rSVBK], a
-	ret
-; 11d493
-
-Function11d493: ; 11d493
-	push hl
-	push bc
-	push de
-	dec a
-	ld hl, rSVBK
-	ld e, $1
-	ld [hl], e
-	call CheckSeenMon
-	ld hl, rSVBK
-	ld e, $5
-	ld [hl], e
-	pop de
-	pop bc
-	pop hl
-	ret
-; 11d4aa
-
-Function11d4aa: ; 11d4aa
-	ld a, [rSVBK]
-	push af
-	ld a, $3
-	ld [rSVBK], a
-	ld hl, Unknown_11daac
-	ld bc, Unknown_11f220
-	xor a
-	ld [wcd2d], a
-	inc a
-	ld [wcd2e], a
-	ld a, $e
-.asm_11d4c1
-	push af
-	ld a, [hli]
-	ld e, a
-	ld a, [hli]
-	ld d, a
-	push hl
-	ld hl, $0005
-	add hl, de
-	ld a, [bc]
-rept 2
-	inc bc
-endr
-	push bc
-.asm_11d4cf
-	push af
-	push hl
-	ld a, [hli]
-	ld e, a
-	ld a, [hl]
-	ld d, a
-	ld hl, wd000
-	add hl, de
-	ld a, [wcd2d]
-	ld [hli], a
-	inc a
-	ld [wcd2d], a
-	ld a, [wcd2e]
-	ld [hl], a
-	pop hl
-	ld de, $0008
-	add hl, de
-	pop af
-	dec a
-	jr nz, .asm_11d4cf
-	ld hl, wcd2d
-	xor a
-	ld [hli], a
-	inc [hl]
-	pop bc
-	pop hl
-	pop af
-	dec a
-	jr nz, .asm_11d4c1
-	pop af
-	ld [rSVBK], a
-	ret
-; 11d4fe
-
-
-Unknown_11d4fe:
-; Pokemon sorted by kana.
-; Notably, Rhydon is missing.
-
-	dw Unknown_11d558
-	dw Unknown_11d55f
-	dw Unknown_11d565
-	dw Unknown_11d56c
-	dw Unknown_11d574
-	dw Unknown_11d57f
-	dw Unknown_11d58e
-	dw Unknown_11d598
-	dw Unknown_11d59f
-	dw Unknown_11d5a3
-	dw Unknown_11d5b2
-	dw Unknown_11d5bb
-	dw Unknown_11d5c0
-	dw Unknown_11d5c8
-	dw Unknown_11d5cb
-	dw Unknown_11d5cd
-	dw Unknown_11d5d1
-	dw Unknown_11d5d4
-	dw Unknown_11d5d6
-	dw Unknown_11d5dc
-	dw Unknown_11d5e7
-	dw Unknown_11d5ea
-	dw Unknown_11d5f7
-	dw Unknown_11d5f9
-	dw Unknown_11d5fc
-	dw Unknown_11d5fe
-	dw Unknown_11d60e
-	dw Unknown_11d61d
-	dw Unknown_11d62e
-	dw Unknown_11d636
-	dw Unknown_11d63e
-	dw Unknown_11d649
-	dw Unknown_11d64e
-	dw Unknown_11d651
-	dw Unknown_11d656
-	dw Unknown_11d65a
-	dw Unknown_11d660
-	dw Unknown_11d662
-	dw Unknown_11d665
-	dw Unknown_11d66d
-	dw Unknown_11d671
-	dw Unknown_11d674
-	dw Unknown_11d678
-	dw Unknown_11d67a
-	dw Unknown_11d67d
-
-Unknown_11d558:	db EKANS, ARBOK, SEAKING, ARIADOS, CROCONAW, UNOWN, $ff
-Unknown_11d55f:	db EEVEE, GEODUDE, SPINARAK, PILOSWINE, ONIX, $ff
-Unknown_11d565:	db ARCANINE, SUDOWOODO, WEEPINBELL, VICTREEBEL, WOOPER, SWINUB, $ff
-Unknown_11d56c:	db SKARMORY, AIPOM, ESPEON, HITMONCHAN, ELEKID, ELECTABUZZ, ENTEI, $ff
-Unknown_11d574:	db FERALIGATR, FURRET, OCTILLERY, PRIMEAPE, SENTRET, STANTLER, SPEAROW, FEAROW, OMASTAR, OMANYTE, $ff
-Unknown_11d57f:	db GROWLITHE, MACHAMP, DRAGONITE, PINSIR, SNORLAX, KABUTO, KABUTOPS, HITMONTOP, WARTORTLE, BLASTOISE, FARFETCH_D, CUBONE, MAROWAK, KANGASKHAN, $ff
-Unknown_11d58e:	db SUNFLORA, CATERPIE, GYARADOS, RAPIDASH, NINETALES, GIRAFARIG, BELLOSSOM, KINGDRA, KINGLER, $ff
-Unknown_11d598:	db GLOOM, PINECO, GLIGAR, KRABBY, GRANBULL, CROBAT, $ff
-Unknown_11d59f:	db ABRA, GENGAR, TAUROS, $ff
-Unknown_11d5a3:	db MAGIKARP, MAGNEMITE, GASTLY, HAUNTER, MACHOKE, KAKUNA, PSYDUCK, PHANPY, RATTATA, GOLDUCK, GOLBAT, GOLEM, GRAVELER, VENONAT, $ff
-Unknown_11d5b2:	db RHYHORN, PUPITAR, CORSOLA, HITMONLEE, ZAPDOS, JOLTEON, SANDSHREW, SANDSLASH, $ff
-Unknown_11d5bb:	db SEADRA, SHELLDER, VAPOREON, DEWGONG, $ff
-Unknown_11d5c0:	db SUICUNE, STARMIE, SCYTHER, ZUBAT, BEEDRILL, HYPNO, DROWZEE, $ff
-Unknown_11d5c8:	db SQUIRTLE, CELEBI, $ff
-Unknown_11d5cb:	db WOBBUFFET, $ff
-Unknown_11d5cd:	db DUGTRIO, HORSEA, EXEGGCUTE, $ff
-Unknown_11d5d1:	db CHIKORITA, CHINCHOU, $ff
-Unknown_11d5d4:	db SHUCKLE, $ff
-Unknown_11d5d6:	db DIGLETT, REMORAID, DELIBIRD, HOUNDOUR, AMPHAROS, $ff
-Unknown_11d5dc:	db DODUO, DODRIO, SMEARGLE, KOFFING, TENTACRUEL, TOGETIC, TOGEPI, GOLDEEN, METAPOD, DONPHAN, $ff
-Unknown_11d5e7:	db ODDISH, EXEGGUTOR, $ff
-Unknown_11d5ea:	db NIDOKING, NIDOQUEEN, NIDORAN_M, NIDORAN_F, NIDORINA, NIDORINO, MEOWTH, SNEASEL, POLIWHIRL, POLITOED, POLIWRATH, POLIWAG, $ff
-Unknown_11d5f7:	db QUAGSIRE, $ff
-Unknown_11d5f9:	db NATU, XATU, $ff
-Unknown_11d5fc:	db DUNSPARCE, $ff
-Unknown_11d5fe:	db SEEL, STEELIX, TYPHLOSION, DRAGONAIR, BUTTERFREE, SCIZOR, HOPPIP, BLISSEY, PARAS, PARASECT, QWILFISH, MR__MIME, TYROGUE, CLOYSTER, TYRANITAR, $ff
-Unknown_11d60e:	db CLEFFA, WEEDLE, PIKACHU, CLEFABLE, PIDGEOT, PIDGEOTTO, PICHU, CLEFAIRY, CHARMANDER, STARYU, CYNDAQUIL, SUNKERN, TEDDIURSA, VOLTORB, $ff
-Unknown_11d61d:	db MOLTRES, FLAREON, ALAKAZAM, MAGMAR, FORRETRESS, WIGGLYTUFF, IVYSAUR, BULBASAUR, VENUSAUR, AERODACTYL, MAGBY, IGGLYBUFF, UMBREON, ARTICUNO, JIGGLYPUFF, SNUBBULL, $ff
-Unknown_11d62e:	db BAYLEEF, GRIMER, MUK, HERACROSS, HOUNDOOM, PERSIAN, LICKITUNG, $ff
-Unknown_11d636:	db HO_OH, HOOTHOOT, PIDGEY, PONYTA, SKIPLOOM, PORYGON, PORYGON2, $ff
-Unknown_11d63e:	db MAGCARGO, SLUGMA, QUILAVA, BELLSPROUT, WEEZING, MARILL, AZUMARILL, ELECTRODE, MANKEY, MANTINE, $ff
-Unknown_11d649:	db DRATINI, MEW, MEWTWO, MILTANK, $ff
-Unknown_11d64e:	db MISDREAVUS, SMOOCHUM, $ff
-Unknown_11d651:	db MEGANIUM, DITTO, TENTACOOL, MAREEP, $ff
-Unknown_11d656:	db FLAAFFY, VENOMOTH, TANGELA, $ff
-Unknown_11d65a:	db SLOWKING, SLOWBRO, SLOWPOKE, MURKROW, YANMA, $ff
-Unknown_11d660:	db KADABRA, $ff
-Unknown_11d662:	db LARVITAR, NOCTOWL, $ff
-Unknown_11d665:	db RAIKOU, RAICHU, CHANSEY, RATICATE, LAPRAS, VILEPLUME, LANTURN, $ff
-Unknown_11d66d:	db CHARMELEON, CHARIZARD, URSARING, $ff
-Unknown_11d671:	db JYNX, LUGIA, $ff
-Unknown_11d674:	db MAGNETON, LEDIAN, LEDYBA, $ff
-Unknown_11d678:	db VULPIX, $ff
-Unknown_11d67a:	db JUMPLUFF, TOTODILE, MACHOP
-Unknown_11d67d:	db $ff
-; 11d67e
-
-GFX_11d67e:
-INCBIN "gfx/pokedex/select_start.2bpp"
-; 11d6de
-
-LZ_11d6de:
-INCBIN "gfx/pokedex/slowpoke.2bpp.lz"
-; 11da52
-
-Strings_11da52: ; 11da52
-	db "ポケモン@@"
-	db "タイプ@@@"
-	db "あいさつ@@"
-	db "ひと@@@@"
-	db "バトル@@@"
-	db "こえ@@@@"
-	db "かいわ@@@"
-	db "きもち@@@"
-	db "じょうたい@"
-	db "せいかつ@@"
-	db "しゅみ@@@"
-	db "こうどう@@"
-	db "じかん@@@"
-	db "むすび@@@"
-	db "あれこれ@@"
-; 11daac
-
-Unknown_11daac: ; 11daac
-	dw Unknown_11dac8
-	dw Unknown_11db58
-	dw Unknown_11dc78
-	dw Unknown_11dea0
-	dw Unknown_11e0c8
-	dw Unknown_11e2d8
-	dw Unknown_11e4e8
-	dw Unknown_11e710
-	dw Unknown_11e920
-	dw Unknown_11ea58
-	dw Unknown_11eb90
-	dw Unknown_11edb8
-	dw Unknown_11eef0
-	dw Unknown_11f100
-
-Unknown_11dac8: ; 11dac8
-	db "あく@@@", $26, $0, $0
-	db "いわ@@@", $aa, $0, $0
-	db "エスパー@", $da, $0, $0
-	db "かくとう@", $4e, $1, $0
-	db "くさ@@@", $ba, $1, $0
-	db "ゴースト@", $e4, $1, $0
-	db "こおり@@", $e6, $1, $0
-	db "じめん@@", $68, $2, $0
-	db "タイプ@@", $e8, $2, $0
-	db "でんき@@", $8e, $3, $0
-	db "どく@@@", $ae, $3, $0
-	db "ドラゴン@", $bc, $3, $0
-	db "ノーマル@", $22, $4, $0
-	db "はがね@@", $36, $4, $0
-	db "ひこう@@", $5e, $4, $0
-	db "ほのお@@", $b2, $4, $0
-	db "みず@@@", $f4, $4, $0
-	db "むし@@@", $12, $5, $0
-
-Unknown_11db58: ; 11db58
-	db "ありがと@", $58, $0, $0
-	db "ありがとう", $5a, $0, $0
-	db "いくぜ!@", $80, $0, $0
-	db "いくよ!@", $82, $0, $0
-	db "いくわよ!", $84, $0, $0
-	db "いやー@@", $a6, $0, $0
-	db "おっす@@", $a, $1, $0
-	db "おはつです", $22, $1, $0
-	db "おめでとう", $2a, $1, $0
-	db "ごめん@@", $f8, $1, $0
-	db "ごめんよ@", $fa, $1, $0
-	db "こらっ@@", $fc, $1, $0
-	db "こんちは!", $a, $2, $0
-	db "こんにちは", $10, $2, $0
-	db "さようなら", $28, $2, $0
-	db "サンキュー", $2e, $2, $0
-	db "さんじょう", $30, $2, $0
-	db "しっけい@", $48, $2, $0
-	db "しつれい@", $4c, $2, $0
-	db "じゃーね@", $6c, $2, $0
-	db "すいません", $8c, $2, $0
-	db "それじゃ@", $ca, $2, $0
-	db "どうも@@", $a6, $3, $0
-	db "なんじゃ@", $ee, $3, $0
-	db "ハーイ@@", $2c, $4, $0
-	db "はいはい@", $32, $4, $0
-	db "バイバイ@", $34, $4, $0
-	db "へイ@@@", $8a, $4, $0
-	db "またね@@", $de, $4, $0
-	db "もしもし@", $32, $5, $0
-	db "やあ@@@", $3e, $5, $0
-	db "やっほー@", $4e, $5, $0
-	db "よう@@@", $62, $5, $0
-	db "ようこそ@", $64, $5, $0
-	db "よろしく@", $80, $5, $0
-	db "らっしゃい", $94, $5, $0
-
-Unknown_11dc78: ; 11dc78
-	db "あいて@@", $1c, $0, $0
-	db "あたし@@", $36, $0, $0
-	db "あなた@@", $40, $0, $0
-	db "あなたが@", $42, $0, $0
-	db "あなたに@", $44, $0, $0
-	db "あなたの@", $46, $0, $0
-	db "あなたは@", $48, $0, $0
-	db "あなたを@", $4a, $0, $0
-	db "おかあさん", $e8, $0, $0
-	db "おじいさん", $fc, $0, $0
-	db "おじさん@", $2, $1, $0
-	db "おとうさん", $e, $1, $0
-	db "おとこのこ", $10, $1, $0
-	db "おとな@@", $14, $1, $0
-	db "おにいさん", $16, $1, $0
-	db "おねえさん", $18, $1, $0
-	db "おばあさん", $1c, $1, $0
-	db "おばさん@", $20, $1, $0
-	db "おれさま@", $34, $1, $0
-	db "おんなのこ", $3a, $1, $0
-	db "ガール@@", $40, $1, $0
-	db "かぞく@@", $52, $1, $0
-	db "かのじょ@", $72, $1, $0
-	db "かれ@@@", $7c, $1, $0
-	db "きみ@@@", $9a, $1, $0
-	db "きみが@@", $9c, $1, $0
-	db "きみに@@", $9e, $1, $0
-	db "きみの@@", $a0, $1, $0
-	db "きみは@@", $a2, $1, $0
-	db "きみを@@", $a4, $1, $0
-	db "ギャル@@", $ae, $1, $0
-	db "きょうだい", $b2, $1, $0
-	db "こども@@", $f0, $1, $0
-	db "じぶん@@", $54, $2, $0
-	db "じぶんが@", $56, $2, $0
-	db "じぶんに@", $58, $2, $0
-	db "じぶんの@", $5a, $2, $0
-	db "じぶんは@", $5c, $2, $0
-	db "じぶんを@", $5e, $2, $0
-	db "だれ@@@", $18, $3, $0
-	db "だれか@@", $1a, $3, $0
-	db "だれが@@", $1c, $3, $0
-	db "だれに@@", $1e, $3, $0
-	db "だれの@@", $20, $3, $0
-	db "だれも@@", $22, $3, $0
-	db "だれを@@", $24, $3, $0
-	db "ちゃん@@", $38, $3, $0
-	db "ともだち@", $b8, $3, $0
-	db "なかま@@", $d4, $3, $0
-	db "ひと@@@", $62, $4, $0
-	db "ボーイ@@", $98, $4, $0
-	db "ボク@@@", $a0, $4, $0
-	db "ボクが@@", $a2, $4, $0
-	db "ボクに@@", $a4, $4, $0
-	db "ボクの@@", $a6, $4, $0
-	db "ボクは@@", $a8, $4, $0
-	db "ボクを@@", $aa, $4, $0
-	db "みんな@@", $4, $5, $0
-	db "みんなが@", $6, $5, $0
-	db "みんなに@", $8, $5, $0
-	db "みんなの@", $a, $5, $0
-	db "みんなは@", $c, $5, $0
-	db "ライバル@", $8a, $5, $0
-	db "わたし@@", $c2, $5, $0
-	db "わたしが@", $c4, $5, $0
-	db "わたしに@", $c6, $5, $0
-	db "わたしの@", $c8, $5, $0
-	db "わたしは@", $ca, $5, $0
-	db "わたしを@", $cc, $5, $0
-
-Unknown_11dea0: ; 11dea0
-	db "あいしょう", $18, $0, $0
-	db "いけ!@@", $88, $0, $0
-	db "いちばん@", $96, $0, $0
-	db "かくご@@", $4c, $1, $0
-	db "かたせて@", $54, $1, $0
-	db "かち@@@", $56, $1, $0
-	db "かつ@@@", $58, $1, $0
-	db "かった@@", $60, $1, $0
-	db "かったら@", $62, $1, $0
-	db "かって@@", $64, $1, $0
-	db "かてない@", $66, $1, $0
-	db "かてる@@", $68, $1, $0
-	db "かなわない", $70, $1, $0
-	db "きあい@@", $84, $1, $0
-	db "きめた@@", $a8, $1, $0
-	db "きりふだ@", $b6, $1, $0
-	db "くらえ@@", $c2, $1, $0
-	db "こい!@@", $da, $1, $0
-	db "こうげき@", $e0, $1, $0
-	db "こうさん@", $e2, $1, $0
-	db "こんじょう", $8, $2, $0
-	db "さいのう@", $16, $2, $0
-	db "さくせん@", $1a, $2, $0
-	db "さばき@@", $22, $2, $0
-	db "しょうぶ@", $7e, $2, $0
-	db "しょうり@", $80, $2, $0
-	db "せめ@@@", $b4, $2, $0
-	db "センス@@", $b6, $2, $0
-	db "たいせん@", $e6, $2, $0
-	db "たたかい@", $f6, $2, $0
-	db "ちから@@", $32, $3, $0
-	db "チャレンジ", $36, $3, $0
-	db "つよい@@", $58, $3, $0
-	db "つよすぎ@", $5a, $3, $0
-	db "つらい@@", $5c, $3, $0
-	db "つらかった", $5e, $3, $0
-	db "てかげん@", $6c, $3, $0
-	db "てき@@@", $6e, $3, $0
-	db "てんさい@", $90, $3, $0
-	db "でんせつ@", $94, $3, $0
-	db "トレーナー", $c6, $3, $0
-	db "にげ@@@", $4, $4, $0
-	db "ぬるい@@", $10, $4, $0
-	db "ねらう@@", $16, $4, $0
-	db "バトル@@", $4a, $4, $0
-	db "ファイト@", $72, $4, $0
-	db "ふっかつ@", $78, $4, $0
-	db "ポイント@", $94, $4, $0
-	db "ポケモン@", $ac, $4, $0
-	db "ほんき@@", $bc, $4, $0
-	db "まいった!", $c4, $4, $0
-	db "まけ@@@", $c8, $4, $0
-	db "まけたら@", $ca, $4, $0
-	db "まけて@@", $cc, $4, $0
-	db "まける@@", $ce, $4, $0
-	db "まもり@@", $ea, $4, $0
-	db "みかた@@", $f2, $4, $0
-	db "みとめない", $fe, $4, $0
-	db "みとめる@", $0, $5, $0
-	db "むてき@@", $16, $5, $0
-	db "もらった!", $3c, $5, $0
-	db "よゆう@@", $7a, $5, $0
-	db "よわい@@", $82, $5, $0
-	db "よわすぎ@", $84, $5, $0
-	db "らくしょう", $8e, $5, $0
-	db "りーダー@", $9e, $5, $0
-	db "ルール@@", $a0, $5, $0
-	db "レべル@@", $a6, $5, $0
-	db "わざ@@@", $be, $5, $0
-
-Unknown_11e0c8: ; 11e0c8
-	db "!@@@@", $0, $0, $0
-	db "!!@@@", $2, $0, $0
-	db "!?@@@", $4, $0, $0
-	db "?@@@@", $6, $0, $0
-	db "…@@@@", $8, $0, $0
-	db "…!@@@", $a, $0, $0
-	db "………@@", $c, $0, $0
-	db "ー@@@@", $e, $0, $0
-	db "ーーー@@", $10, $0, $0
-	db "あーあ@@", $14, $0, $0
-	db "あーん@@", $16, $0, $0
-	db "あははー@", $52, $0, $0
-	db "あら@@@", $54, $0, $0
-	db "いえ@@@", $72, $0, $0
-	db "イエス@@", $74, $0, $0
-	db "うう@@@", $ac, $0, $0
-	db "うーん@@", $ae, $0, $0
-	db "うおー!@", $b0, $0, $0
-	db "うおりゃー", $b2, $0, $0
-	db "うひょー@", $bc, $0, $0
-	db "うふふ@@", $be, $0, $0
-	db "うわー@@", $ca, $0, $0
-	db "うわーん@", $cc, $0, $0
-	db "ええ@@@", $d2, $0, $0
-	db "えー@@@", $d4, $0, $0
-	db "えーん@@", $d6, $0, $0
-	db "えへへ@@", $dc, $0, $0
-	db "おいおい@", $e0, $0, $0
-	db "おお@@@", $e2, $0, $0
-	db "おっと@@", $c, $1, $0
-	db "がーん@@", $42, $1, $0
-	db "キャー@@", $aa, $1, $0
-	db "ギャー@@", $ac, $1, $0
-	db "ぐふふふふ", $bc, $1, $0
-	db "げっ@@@", $ce, $1, $0
-	db "しくしく@", $3e, $2, $0
-	db "ちえっ@@", $2e, $3, $0
-	db "てへ@@@", $86, $3, $0
-	db "ノー@@@", $20, $4, $0
-	db "はあー@@", $2a, $4, $0
-	db "はい@@@", $30, $4, $0
-	db "はっはっは", $48, $4, $0
-	db "ひいー@@", $56, $4, $0
-	db "ひゃあ@@", $6a, $4, $0
-	db "ふっふっふ", $7c, $4, $0
-	db "ふにゃ@@", $7e, $4, $0
-	db "ププ@@@", $80, $4, $0
-	db "ふふん@@", $82, $4, $0
-	db "ふん@@@", $88, $4, $0
-	db "へっへっへ", $8e, $4, $0
-	db "へへー@@", $90, $4, $0
-	db "ほーほほほ", $9c, $4, $0
-	db "ほら@@@", $b6, $4, $0
-	db "まあ@@@", $c0, $4, $0
-	db "むきー!!", $10, $5, $0
-	db "むふー@@", $18, $5, $0
-	db "むふふ@@", $1a, $5, $0
-	db "むむ@@@", $1c, $5, $0
-	db "よーし@@", $6a, $5, $0
-	db "よし!@@", $72, $5, $0
-	db "ラララ@@", $98, $5, $0
-	db "わーい@@", $ac, $5, $0
-	db "わーん!!", $b0, $5, $0
-	db "ワォ@@@", $b2, $5, $0
-	db "わっ!!@", $ce, $5, $0
-	db "わははは!", $d0, $5, $0
-
-Unknown_11e2d8: ; 11e2d8
-	db "あのね@@", $50, $0, $0
-	db "あんまり@", $6e, $0, $0
-	db "いじわる@", $8e, $0, $0
-	db "うそ@@@", $b6, $0, $0
-	db "うむ@@@", $c4, $0, $0
-	db "おーい@@", $e4, $0, $0
-	db "おすすめ@", $6, $1, $0
-	db "おばかさん", $1e, $1, $0
-	db "かなり@@", $6e, $1, $0
-	db "から@@@", $7a, $1, $0
-	db "きぶん@@", $98, $1, $0
-	db "けど@@@", $d6, $1, $0
-	db "こそ@@@", $ea, $1, $0
-	db "こと@@@", $ee, $1, $0
-	db "さあ@@@", $12, $2, $0
-	db "さっぱり@", $1e, $2, $0
-	db "さて@@@", $20, $2, $0
-	db "じゅうぶん", $72, $2, $0
-	db "すぐ@@@", $94, $2, $0
-	db "すごく@@", $98, $2, $0
-	db "すこしは@", $9a, $2, $0
-	db "すっっごい", $a0, $2, $0
-	db "ぜーんぜん", $b0, $2, $0
-	db "ぜったい@", $b2, $2, $0
-	db "それで@@", $ce, $2, $0
-	db "だけ@@@", $f2, $2, $0
-	db "だって@@", $fc, $2, $0
-	db "たぶん@@", $6, $3, $0
-	db "たら@@@", $14, $3, $0
-	db "ちょー@@", $3a, $3, $0
-	db "ちょっと@", $3c, $3, $0
-	db "ったら@@", $4e, $3, $0
-	db "って@@@", $50, $3, $0
-	db "ていうか@", $62, $3, $0
-	db "でも@@@", $88, $3, $0
-	db "どうしても", $9c, $3, $0
-	db "とうぜん@", $a0, $3, $0
-	db "どうぞ@@", $a2, $3, $0
-	db "とりあえず", $be, $3, $0
-	db "なあ@@@", $cc, $3, $0
-	db "なんて@@", $f4, $3, $0
-	db "なんでも@", $fc, $3, $0
-	db "なんとか@", $fe, $3, $0
-	db "には@@@", $8, $4, $0
-	db "バッチり@", $46, $4, $0
-	db "ばりばり@", $52, $4, $0
-	db "ほど@@@", $b0, $4, $0
-	db "ほんと@@", $be, $4, $0
-	db "まさに@@", $d0, $4, $0
-	db "マジ@@@", $d2, $4, $0
-	db "マジで@@", $d4, $4, $0
-	db "まったく@", $e4, $4, $0
-	db "まで@@@", $e6, $4, $0
-	db "まるで@@", $ec, $4, $0
-	db "ムード@@", $e, $5, $0
-	db "むしろ@@", $14, $5, $0
-	db "めちゃ@@", $24, $5, $0
-	db "めっぽう@", $28, $5, $0
-	db "もう@@@", $2c, $5, $0
-	db "モード@@", $2e, $5, $0
-	db "もっと@@", $36, $5, $0
-	db "もはや@@", $38, $5, $0
-	db "やっと@@", $4a, $5, $0
-	db "やっぱり@", $4c, $5, $0
-	db "より@@@", $7c, $5, $0
-	db "れば@@@", $a4, $5, $0
-
-Unknown_11e4e8: ; 11e4e8
-	db "あいたい@", $1a, $0, $0
-	db "あそびたい", $32, $0, $0
-	db "いきたい@", $7c, $0, $0
-	db "うかれて@", $b4, $0, $0
-	db "うれしい@", $c6, $0, $0
-	db "うれしさ@", $c8, $0, $0
-	db "エキサイト", $d8, $0, $0
-	db "えらい@@", $de, $0, $0
-	db "おかしい@", $ec, $0, $0
-	db "ォッケー@", $8, $1, $0
-	db "かえりたい", $48, $1, $0
-	db "がっくし@", $5a, $1, $0
-	db "かなしい@", $6c, $1, $0
-	db "がんばって", $80, $1, $0
-	db "きがしない", $86, $1, $0
-	db "きがする@", $88, $1, $0
-	db "ききたい@", $8a, $1, $0
-	db "きになる@", $90, $1, $0
-	db "きのせい@", $96, $1, $0
-	db "きらい@@", $b4, $1, $0
-	db "くやしい@", $be, $1, $0
-	db "くやしさ@", $c0, $1, $0
-	db "さみしい@", $24, $2, $0
-	db "ざんねん@", $32, $2, $0
-	db "しあわせ@", $36, $2, $0
-	db "したい@@", $44, $2, $0
-	db "したくない", $46, $2, $0
-	db "しまった@", $64, $2, $0
-	db "しょんぼり", $82, $2, $0
-	db "すき@@@", $92, $2, $0
-	db "だいきらい", $da, $2, $0
-	db "たいくつ@", $dc, $2, $0
-	db "だいじ@@", $de, $2, $0
-	db "だいすき@", $e4, $2, $0
-	db "たいへん@", $ea, $2, $0
-	db "たのしい@", $0, $3, $0
-	db "たのしすぎ", $2, $3, $0
-	db "たべたい@", $8, $3, $0
-	db "ダメダメ@", $e, $3, $0
-	db "たりない@", $16, $3, $0
-	db "ちくしょー", $34, $3, $0
-	db "どうしよう", $9e, $3, $0
-	db "ドキドキ@", $ac, $3, $0
-	db "ナイス@@", $d0, $3, $0
-	db "のみたい@", $26, $4, $0
-	db "びっくり@", $60, $4, $0
-	db "ふあん@@", $74, $4, $0
-	db "ふらふら@", $86, $4, $0
-	db "ほしい@@", $ae, $4, $0
-	db "ボロボロ@", $b8, $4, $0
-	db "まだまだ@", $e0, $4, $0
-	db "まてない@", $e8, $4, $0
-	db "まんぞく@", $f0, $4, $0
-	db "みたい@@", $f8, $4, $0
-	db "めずらしい", $22, $5, $0
-	db "メラメラ@", $2a, $5, $0
-	db "やだ@@@", $46, $5, $0
-	db "やったー@", $48, $5, $0
-	db "やばい@@", $50, $5, $0
-	db "やばすぎる", $52, $5, $0
-	db "やられた@", $54, $5, $0
-	db "やられて@", $56, $5, $0
-	db "よかった@", $6e, $5, $0
-	db "ラブラブ@", $96, $5, $0
-	db "ロマン@@", $a8, $5, $0
-	db "ろんがい@", $aa, $5, $0
-	db "わから@@", $b4, $5, $0
-	db "わかり@@", $b6, $5, $0
-	db "わくわく@", $ba, $5, $0
-
-Unknown_11e710: ; 11e710
-	db "あつい@@", $38, $0, $0
-	db "あった@@", $3a, $0, $0
-	db "あり@@@", $56, $0, $0
-	db "ある@@@", $5e, $0, $0
-	db "あわてて@", $6a, $0, $0
-	db "いい@@@", $70, $0, $0
-	db "いか@@@", $76, $0, $0
-	db "イカス@@", $78, $0, $0
-	db "いきおい@", $7a, $0, $0
-	db "いける@@", $8a, $0, $0
-	db "いじょう@", $8c, $0, $0
-	db "いそがしい", $90, $0, $0
-	db "いっしょに", $9a, $0, $0
-	db "いっぱい@", $9c, $0, $0
-	db "いない@@", $a0, $0, $0
-	db "いや@@@", $a4, $0, $0
-	db "いる@@@", $a8, $0, $0
-	db "うまい@@", $c0, $0, $0
-	db "うまく@@", $c2, $0, $0
-	db "おおきい@", $e6, $0, $0
-	db "おくれ@@", $f2, $0, $0
-	db "おしい@@", $fa, $0, $0
-	db "おもしろい", $2c, $1, $0
-	db "おもしろく", $2e, $1, $0
-	db "かっこいい", $5c, $1, $0
-	db "かわいい@", $7e, $1, $0
-	db "かんぺき@", $82, $1, $0
-	db "けっこう@", $d0, $1, $0
-	db "げんき@@", $d8, $1, $0
-	db "こわい@@", $6, $2, $0
-	db "さいこう@", $14, $2, $0
-	db "さむい@@", $26, $2, $0
-	db "さわやか@", $2c, $2, $0
-	db "しかたない", $38, $2, $0
-	db "すごい@@", $96, $2, $0
-	db "すごすぎ@", $9c, $2, $0
-	db "すてき@@", $a4, $2, $0
-	db "たいした@", $e0, $2, $0
-	db "だいじょぶ", $e2, $2, $0
-	db "たかい@@", $ec, $2, $0
-	db "ただしい@", $f8, $2, $0
-	db "だめ@@@", $c, $3, $0
-	db "ちいさい@", $2c, $3, $0
-	db "ちがう@@", $30, $3, $0
-	db "つかれ@@", $48, $3, $0
-	db "とくい@@", $b0, $3, $0
-	db "とまらない", $b6, $3, $0
-	db "ない@@@", $ce, $3, $0
-	db "なかった@", $d2, $3, $0
-	db "なし@@@", $d8, $3, $0
-	db "なって@@", $dc, $3, $0
-	db "はやい@@", $50, $4, $0
-	db "ひかる@@", $5a, $4, $0
-	db "ひくい@@", $5c, $4, $0
-	db "ひどい@@", $64, $4, $0
-	db "ひとりで@", $66, $4, $0
-	db "ひま@@@", $68, $4, $0
-	db "ふそく@@", $76, $4, $0
-	db "へた@@@", $8c, $4, $0
-	db "まちがって", $e2, $4, $0
-	db "やさしい@", $42, $5, $0
-	db "よく@@@", $70, $5, $0
-	db "よわって@", $86, $5, $0
-	db "らく@@@", $8c, $5, $0
-	db "らしい@@", $90, $5, $0
-	db "わるい@@", $d4, $5, $0
-
-Unknown_11e920: ; 11e920
-	db "アルバイト", $64, $0, $0
-	db "うち@@@", $ba, $0, $0
-	db "おかね@@", $ee, $0, $0
-	db "おこづかい", $f4, $0, $0
-	db "おふろ@@", $24, $1, $0
-	db "がっこう@", $5e, $1, $0
-	db "きねん@@", $92, $1, $0
-	db "グループ@", $c6, $1, $0
-	db "ゲット@@", $d2, $1, $0
-	db "こうかん@", $de, $1, $0
-	db "しごと@@", $40, $2, $0
-	db "しゅぎょう", $74, $2, $0
-	db "じゅぎょう", $76, $2, $0
-	db "じゅく@@", $78, $2, $0
-	db "しんか@@", $88, $2, $0
-	db "ずかん@@", $90, $2, $0
-	db "せいかつ@", $ae, $2, $0
-	db "せんせい@", $b8, $2, $0
-	db "センター@", $ba, $2, $0
-	db "タワー@@", $28, $3, $0
-	db "つうしん@", $40, $3, $0
-	db "テスト@@", $7e, $3, $0
-	db "テレビ@@", $8c, $3, $0
-	db "でんわ@@", $96, $3, $0
-	db "どうぐ@@", $9a, $3, $0
-	db "トレード@", $c4, $3, $0
-	db "なまえ@@", $e8, $3, $0
-	db "ニュース@", $a, $4, $0
-	db "にんき@@", $c, $4, $0
-	db "パーティー", $2e, $4, $0
-	db "べんきょう", $92, $4, $0
-	db "マシン@@", $d6, $4, $0
-	db "めいし@@", $1e, $5, $0
-	db "メッセージ", $26, $5, $0
-	db "もようがえ", $3a, $5, $0
-	db "ゆめ@@@", $5a, $5, $0
-	db "ようちえん", $66, $5, $0
-	db "ラジォ@@", $92, $5, $0
-	db "ワールド@", $ae, $5, $0
-
-Unknown_11ea58: ; 11ea58
-	db "アイドル@", $1e, $0, $0
-	db "アニメ@@", $4c, $0, $0
-	db "うた@@@", $b8, $0, $0
-	db "えいが@@", $d0, $0, $0
-	db "おかし@@", $ea, $0, $0
-	db "おしゃべり", $4, $1, $0
-	db "おままごと", $28, $1, $0
-	db "おもちゃ@", $30, $1, $0
-	db "おんがく@", $38, $1, $0
-	db "カード@@", $3e, $1, $0
-	db "かいもの@", $46, $1, $0
-	db "グルメ@@", $c8, $1, $0
-	db "ゲーム@@", $cc, $1, $0
-	db "ざっし@@", $1c, $2, $0
-	db "さんぽ@@", $34, $2, $0
-	db "じてんしゃ", $50, $2, $0
-	db "しゅみ@@", $7a, $2, $0
-	db "スポーツ@", $a8, $2, $0
-	db "ダイエット", $d8, $2, $0
-	db "たからもの", $f0, $2, $0
-	db "たび@@@", $4, $3, $0
-	db "ダンス@@", $2a, $3, $0
-	db "つり@@@", $60, $3, $0
-	db "デート@@", $6a, $3, $0
-	db "でんしゃ@", $92, $3, $0
-	db "ぬいぐるみ", $e, $4, $0
-	db "パソコン@", $3e, $4, $0
-	db "はな@@@", $4c, $4, $0
-	db "ヒーロー@", $58, $4, $0
-	db "ひるね@@", $6e, $4, $0
-	db "ヒロイン@", $70, $4, $0
-	db "ぼうけん@", $96, $4, $0
-	db "ボード@@", $9a, $4, $0
-	db "ボール@@", $9e, $4, $0
-	db "ほん@@@", $ba, $4, $0
-	db "マンガ@@", $ee, $4, $0
-	db "やくそく@", $40, $5, $0
-	db "やすみ@@", $44, $5, $0
-	db "よてい@@", $74, $5, $0
-
-Unknown_11eb90: ; 11eb90
-	db "あう@@@", $20, $0, $0
-	db "あきらめ@", $24, $0, $0
-	db "あげる@@", $28, $0, $0
-	db "あせる@@", $2e, $0, $0
-	db "あそび@@", $30, $0, $0
-	db "あそぶ@@", $34, $0, $0
-	db "あつめ@@", $3e, $0, $0
-	db "あるき@@", $60, $0, $0
-	db "あるく@@", $62, $0, $0
-	db "いく@@@", $7e, $0, $0
-	db "いけ@@@", $86, $0, $0
-	db "おき@@@", $f0, $0, $0
-	db "おこり@@", $f6, $0, $0
-	db "おこる@@", $f8, $0, $0
-	db "おしえ@@", $fe, $0, $0
-	db "おしえて@", $0, $1, $0
-	db "おねがい@", $1a, $1, $0
-	db "おぼえ@@", $26, $1, $0
-	db "かえる@@", $4a, $1, $0
-	db "がまん@@", $74, $1, $0
-	db "きく@@@", $8c, $1, $0
-	db "きたえ@@", $8e, $1, $0
-	db "きめ@@@", $a6, $1, $0
-	db "くる@@@", $c4, $1, $0
-	db "さがし@@", $18, $2, $0
-	db "さわぎ@@", $2a, $2, $0
-	db "した@@@", $42, $2, $0
-	db "しって@@", $4a, $2, $0
-	db "して@@@", $4e, $2, $0
-	db "しない@@", $52, $2, $0
-	db "しまう@@", $60, $2, $0
-	db "じまん@@", $66, $2, $0
-	db "しらない@", $84, $2, $0
-	db "しる@@@", $86, $2, $0
-	db "しんじて@", $8a, $2, $0
-	db "する@@@", $aa, $2, $0
-	db "たべる@@", $a, $3, $0
-	db "つかう@@", $42, $3, $0
-	db "つかえ@@", $44, $3, $0
-	db "つかって@", $46, $3, $0
-	db "できない@", $70, $3, $0
-	db "できる@@", $72, $3, $0
-	db "でない@@", $84, $3, $0
-	db "でる@@@", $8a, $3, $0
-	db "なげる@@", $d6, $3, $0
-	db "なやみ@@", $ea, $3, $0
-	db "ねられ@@", $18, $4, $0
-	db "ねる@@@", $1a, $4, $0
-	db "のがし@@", $24, $4, $0
-	db "のむ@@@", $28, $4, $0
-	db "はしり@@", $3a, $4, $0
-	db "はしる@@", $3c, $4, $0
-	db "はたらき@", $40, $4, $0
-	db "はたらく@", $42, $4, $0
-	db "はまって@", $4e, $4, $0
-	db "ぶつけ@@", $7a, $4, $0
-	db "ほめ@@@", $b4, $4, $0
-	db "みせて@@", $f6, $4, $0
-	db "みて@@@", $fc, $4, $0
-	db "みる@@@", $2, $5, $0
-	db "めざす@@", $20, $5, $0
-	db "もって@@", $34, $5, $0
-	db "ゆずる@@", $58, $5, $0
-	db "ゆるす@@", $5c, $5, $0
-	db "ゆるせ@@", $5e, $5, $0
-	db "られない@", $9a, $5, $0
-	db "られる@@", $9c, $5, $0
-	db "わかる@@", $b8, $5, $0
-	db "わすれ@@", $c0, $5, $0
-
-Unknown_11edb8: ; 11edb8
-	db "あき@@@", $22, $0, $0
-	db "あさ@@@", $2a, $0, $0
-	db "あした@@", $2c, $0, $0
-	db "いちにち@", $94, $0, $0
-	db "いつか@@", $98, $0, $0
-	db "いつも@@", $9e, $0, $0
-	db "いま@@@", $a2, $0, $0
-	db "えいえん@", $ce, $0, $0
-	db "おととい@", $12, $1, $0
-	db "おわり@@", $36, $1, $0
-	db "かようび@", $78, $1, $0
-	db "きのう@@", $94, $1, $0
-	db "きょう@@", $b0, $1, $0
-	db "きんようび", $b8, $1, $0
-	db "げつようび", $d4, $1, $0
-	db "このあと@", $f4, $1, $0
-	db "このまえ@", $f6, $1, $0
-	db "こんど@@", $c, $2, $0
-	db "じかん@@", $3c, $2, $0
-	db "じゅうねん", $70, $2, $0
-	db "すいようび", $8e, $2, $0
-	db "スタート@", $9e, $2, $0
-	db "ずっと@@", $a2, $2, $0
-	db "ストップ@", $a6, $2, $0
-	db "そのうち@", $c4, $2, $0
-	db "ついに@@", $3e, $3, $0
-	db "つぎ@@@", $4a, $3, $0
-	db "どようび@", $ba, $3, $0
-	db "なつ@@@", $da, $3, $0
-	db "にちようび", $6, $4, $0
-	db "はじめ@@", $38, $4, $0
-	db "はる@@@", $54, $4, $0
-	db "ひる@@@", $6c, $4, $0
-	db "ふゆ@@@", $84, $4, $0
-	db "まいにち@", $c6, $4, $0
-	db "もくようび", $30, $5, $0
-	db "よなか@@", $76, $5, $0
-	db "よる@@@", $7e, $5, $0
-	db "らいしゅう", $88, $5, $0
-
-Unknown_11eef0: ; 11eef0
-	db "いたします", $92, $0, $0
-	db "おります@", $32, $1, $0
-	db "か!?@@", $3c, $1, $0
-	db "かい?@@", $44, $1, $0
-	db "かしら?@", $50, $1, $0
-	db "かな?@@", $6a, $1, $0
-	db "かも@@@", $76, $1, $0
-	db "くれ@@@", $ca, $1, $0
-	db "ございます", $e8, $1, $0
-	db "しがち@@", $3a, $2, $0
-	db "します@@", $62, $2, $0
-	db "じゃ@@@", $6a, $2, $0
-	db "じゃん@@", $6e, $2, $0
-	db "しよう@@", $7c, $2, $0
-	db "ぜ!@@@", $ac, $2, $0
-	db "ぞ!@@@", $bc, $2, $0
-	db "た@@@@", $d4, $2, $0
-	db "だ@@@@", $d6, $2, $0
-	db "だからね@", $ee, $2, $0
-	db "だぜ@@@", $f4, $2, $0
-	db "だった@@", $fa, $2, $0
-	db "だね@@@", $fe, $2, $0
-	db "だよ@@@", $10, $3, $0
-	db "だよねー!", $12, $3, $0
-	db "だわ@@@", $26, $3, $0
-	db "ッス@@@", $4c, $3, $0
-	db "ってかんじ", $52, $3, $0
-	db "っぱなし@", $54, $3, $0
-	db "つもり@@", $56, $3, $0
-	db "ていない@", $64, $3, $0
-	db "ている@@", $66, $3, $0
-	db "でーす!@", $68, $3, $0
-	db "でした@@", $74, $3, $0
-	db "でしょ?@", $76, $3, $0
-	db "でしょー!", $78, $3, $0
-	db "です@@@", $7a, $3, $0
-	db "ですか?@", $7c, $3, $0
-	db "ですよ@@", $80, $3, $0
-	db "ですわ@@", $82, $3, $0
-	db "どうなの?", $a4, $3, $0
-	db "どうよ?@", $a8, $3, $0
-	db "とかいって", $aa, $3, $0
-	db "なの@@@", $e0, $3, $0
-	db "なのか@@", $e2, $3, $0
-	db "なのだ@@", $e4, $3, $0
-	db "なのよ@@", $e6, $3, $0
-	db "なんだね@", $f2, $3, $0
-	db "なんです@", $f8, $3, $0
-	db "なんてね@", $fa, $3, $0
-	db "ね@@@@", $12, $4, $0
-	db "ねー@@@", $14, $4, $0
-	db "の@@@@", $1c, $4, $0
-	db "の?@@@", $1e, $4, $0
-	db "ばっかり@", $44, $4, $0
-	db "まーす!@", $c2, $4, $0
-	db "ます@@@", $d8, $4, $0
-	db "ますわ@@", $da, $4, $0
-	db "ません@@", $dc, $4, $0
-	db "みたいな@", $fa, $4, $0
-	db "よ!@@@", $60, $5, $0
-	db "よー@@@", $68, $5, $0
-	db "よーん@@", $6c, $5, $0
-	db "よね@@@", $78, $5, $0
-	db "るよ@@@", $a2, $5, $0
-	db "わけ@@@", $bc, $5, $0
-	db "わよ!@@", $d2, $5, $0
-
-Unknown_11f100: ; 11f100
-	db "ああ@@@", $12, $0, $0
-	db "あっち@@", $3c, $0, $0
-	db "あの@@@", $4e, $0, $0
-	db "ありゃ@@", $5c, $0, $0
-	db "あれ@@@", $66, $0, $0
-	db "あれは@@", $68, $0, $0
-	db "あんな@@", $6c, $0, $0
-	db "こう@@@", $dc, $1, $0
-	db "こっち@@", $ec, $1, $0
-	db "この@@@", $f2, $1, $0
-	db "こりゃ@@", $fe, $1, $0
-	db "これ@@@", $0, $2, $0
-	db "これだ!@", $2, $2, $0
-	db "これは@@", $4, $2, $0
-	db "こんな@@", $e, $2, $0
-	db "そう@@@", $be, $2, $0
-	db "そっち@@", $c0, $2, $0
-	db "その@@@", $c2, $2, $0
-	db "そりゃ@@", $c6, $2, $0
-	db "それ@@@", $c8, $2, $0
-	db "それだ!@", $cc, $2, $0
-	db "それは@@", $d0, $2, $0
-	db "そんな@@", $d2, $2, $0
-	db "どう@@@", $98, $3, $0
-	db "どっち@@", $b2, $3, $0
-	db "どの@@@", $b4, $3, $0
-	db "どりゃ@@", $c0, $3, $0
-	db "どれ@@@", $c2, $3, $0
-	db "どれを@@", $c8, $3, $0
-	db "どんな@@", $ca, $3, $0
-	db "なに@@@", $de, $3, $0
-	db "なんか@@", $ec, $3, $0
-	db "なんだ@@", $f0, $3, $0
-	db "なんで@@", $f6, $3, $0
-	db "なんなんだ", $0, $4, $0
-	db "なんの@@", $2, $4, $0
-; 11f220
-
-Unknown_11f220:
-	db $12, $01, $24, $02
-	db $45, $05, $45, $05
-	db $42, $05, $42, $05
-	db $45, $05, $42, $05
-	db $27, $03, $27, $03
-	db $45, $05, $27, $03
-	db $42, $05, $24, $02
-
-Unknown_11f23c:
-	db $12, $00, $2f, $00
-	db $70, $00, $1e, $00
-	db $ac, $00, $11, $00
-	db $ce, $00, $09, $00
-	db $e0, $00, $2e, $00
-	db $3c, $01, $24, $00
-	db $84, $01, $1b, $00
-	db $ba, $01, $09, $00
-	db $cc, $01, $07, $00
-	db $da, $01, $1c, $00
-	db $12, $02, $12, $00
-	db $36, $02, $2b, $00
-	db $8c, $02, $10, $00
-	db $ac, $02, $08, $00
-	db $bc, $02, $0c, $00
-	db $d4, $02, $2c, $00
-	db $2c, $03, $09, $00
-	db $3e, $03, $12, $00
-	db $62, $03, $1b, $00
-	db $98, $03, $1a, $00
-	db $cc, $03, $1c, $00
-	db $04, $04, $05, $00
-	db $0e, $04, $02, $00
-	db $12, $04, $05, $00
-	db $1c, $04, $07, $00
-	db $2a, $04, $16, $00
-	db $56, $04, $0e, $00
-	db $72, $04, $0c, $00
-	db $8a, $04, $05, $00
-	db $94, $04, $16, $00
-	db $c0, $04, $19, $00
-	db $f2, $04, $0e, $00
-	db $0e, $05, $08, $00
-	db $1e, $05, $07, $00
-	db $2c, $05, $09, $00
-	db $3e, $05, $0d, $00
-	db $58, $05, $04, $00
-	db $60, $05, $14, $00
-	db $88, $05, $0b, $00
-	db $9e, $05, $01, $00
-	db $a0, $05, $02, $00
-	db $a4, $05, $02, $00
-	db $a8, $05, $02, $00
-	db $ac, $05, $15, $00
-	db $00, $00, $09, $00
-
-BTTrainerClassGenders:
+BTTrainerClassGenders: ; 11f2f0
 	db MALE   ; FALKNER
 	db FEMALE ; WHITNEY
 	db FEMALE ; BUGSY
--- a/misc/battle_tower_5c.asm
+++ b/misc/battle_tower_5c.asm
@@ -1,3 +1,183 @@
+Function1700b0: ; 1700b0
+	call Function17021e
+	callba Function118121
+	ret
+; 1700ba
+
+Function1700ba: ; 1700ba
+	call Function17021e
+	callba Function11811a
+	ret
+; 1700c4
+
+Function1700c4: ; 1700c4
+	ld a, [rSVBK]
+	push af
+	ld a, $3
+	ld [rSVBK], a
+
+	call Function17042c
+	ld a, $5
+	call GetSRAMBank
+	ld a, $1
+	ld [$be45], a
+	xor a
+	ld [$be46], a
+	ld hl, $dffc
+	ld de, $aa41
+	ld bc, $0004
+	call CopyBytes
+	ld hl, $d202
+	ld de, $aa8e
+	ld bc, $0594
+	call CopyBytes
+	ld hl, $aa5d
+	ld a, [hl]
+	inc [hl]
+	inc hl
+	sla a
+	sla a
+	ld e, a
+	ld d, $0
+	add hl, de
+	ld e, l
+	ld d, h
+	ld hl, $dffc
+	ld bc, $0004
+	call CopyBytes
+	call CloseSRAM
+	pop af
+	ld [rSVBK], a
+	ret
+; 170114
+
+Function170114: ; 170114
+	call Function17021e
+	call Function170121
+	callba Function11805f
+	ret
+; 170121
+
+Function170121: ; 170121
+	ld a, $5
+	call GetSRAMBank
+	ld hl, $a948
+	ld de, $c608
+	ld bc, $00f6
+	call CopyBytes
+	call CloseSRAM
+	call Function170c8b
+	ret
+; 170139
+
+Function170139: ; 170139
+	ld a, $5
+	call GetSRAMBank
+	ld de, $aa41
+	ld h, $0
+	ld l, h
+	ld bc, $03e8
+	call Function17020c
+	ld bc, $0064
+	call Function17020c
+	ld bc, $000a
+	call Function17020c
+	ld a, [de]
+	ld c, a
+	ld b, $0
+	add hl, bc
+	call CloseSRAM
+	ld a, h
+	ld [$c608], a
+	ld a, l
+	ld [$c608 + 1], a
+	ld hl, $c628
+	ld a, [PlayerID]
+	ld [hli], a
+	ld a, [PlayerID + 1]
+	ld [hli], a
+	ld a, [wSecretID]
+	ld [hli], a
+	ld a, [wSecretID + 1]
+	ld [hli], a
+	ld e, l
+	ld d, h
+	ld hl, PlayerName
+	ld bc, $0005 ; Japanese name length
+	call CopyBytes
+	ld bc, PlayerID
+	ld de, PlayerGender
+	callba Function4e929
+	ld de, $c62c + 5
+	ld a, c
+	ld [de], a
+	inc de
+	ld a, $df
+	ld [wcd49], a
+	ld a, $dc
+	ld [wcd4a], a
+	ld a, $41
+	ld [wcd4b], a
+	ld a, $de
+	ld [wcd4c], a
+	ld a, $3
+.asm_1701ac
+	push af
+	ld a, [wcd49]
+	ld l, a
+	ld a, [wcd4a]
+	ld h, a
+	ld bc, $0030
+	call CopyBytes
+	ld a, l
+	ld [wcd49], a
+	ld a, h
+	ld [wcd4a], a
+	ld a, [wcd4b]
+	ld l, a
+	ld a, [wcd4c]
+	ld h, a
+	ld bc, $0006
+	call CopyBytes
+	ld a, l
+	ld [wcd4b], a
+	ld a, h
+	ld [wcd4c], a
+	pop af
+	dec a
+	jr nz, .asm_1701ac
+	ld a, $4
+	call GetSRAMBank
+	ld hl, $a013
+	ld bc, $0024
+	call CopyBytes
+	call CloseSRAM
+	ld a, $5
+	call GetSRAMBank
+	ld hl, $a894
+	ld bc, $0006
+	call CopyBytes
+	ld hl, $c608
+	ld de, $a948
+	ld bc, $00f6
+	call CopyBytes
+	call CloseSRAM
+	ret
+; 17020c
+
+Function17020c: ; 17020c
+	ld a, [de]
+	inc de
+	and a
+	ret z
+
+.loop
+	add hl, bc
+	dec a
+	jr nz, .loop
+	ret
+; 170215
+
 BattleTowerBattle: ; 170215
 	xor a
 	ld [wcf63], a
@@ -64,7 +244,9 @@
 	callba HealParty
 	call ReadBTTrainerParty
 	call Clears5_a89a
+
 	predef StartBattle
+
 	callba LoadPokemonData
 	callba HealParty
 	ld a, [wBattleResult]
@@ -325,20 +507,23 @@
 ; 17042c
 
 Function17042c: ; 17042c
-	ld hl, BT_TrainerTextIndex + $be
+	ld hl, w3_d202TrainerData
 	ld a, 7
 .loop
 	push af
 	push hl
-	ld c, 18
+	ld c, BATTLETOWER_TRAINERDATALENGTH / 2
 .loop2
+	; First byte is a comparison value.
 	ld a, [hli]
 	ld b, a
+	; Second byte is a lookup index.
 	ld a, [hli]
 	and a
-	jr z, .skip
+	jr z, .empty
 	cp $f
-	jr nc, .exit_inner_loop
+	jr nc, .copy_data
+
 	push hl
 	ld hl, Unknown_170470
 	dec a
@@ -347,22 +532,27 @@
 	add hl, de
 	ld a, [hl]
 	pop hl
+
+	; If Unknown_170470[a-1] <= b, overwrite the current trainer's data
+	; with Unknown17047e, and exit the inner loop.
 	cp b
-	jr c, .exit_inner_loop
-	jr z, .exit_inner_loop
-	jr .asm_170456
+	jr c, .copy_data
+	jr z, .copy_data
+	jr .next_iteration
 
-.skip
+.empty
+	; If a == 0 and b >= $fc, overwrite the current trainer's data with
+	; Unknown17047e, and exit the inner loop.
 	ld a, b
 	cp $fc
-	jr nc, .exit_inner_loop
+	jr nc, .copy_data
 
-.asm_170456
+.next_iteration
 	dec c
 	jr nz, .loop2
-	jr .dont_copy
+	jr .next_trainer
 
-.exit_inner_loop
+.copy_data
 	pop de
 	push de
 	ld hl, Unknown_17047e
@@ -369,9 +559,9 @@
 	ld bc, BATTLETOWER_TRAINERDATALENGTH
 	call CopyBytes
 
-.dont_copy
+.next_trainer
 	pop hl
-	ld de, $00e0
+	ld de, BATTLE_TOWER_STRUCT_LENGTH
 	add hl, de
 	pop af
 	dec a
@@ -380,18 +570,41 @@
 ; 170470
 
 Unknown_170470:
-	db $12, $24, $45, $45, $42, $42, $45, $42, $27, $27, $45, $27, $42, $24
+	db $12
+	db $24
+	db $45
+	db $45
+	db $42
+	db $42
+	db $45
+	db $42
+	db $27
+	db $27
+	db $45
+	db $27
+	db $42
+	db $24
 
 Unknown_17047e:
-	db $03, $04, $05, $08
-	db $03, $05, $0e, $06
-	db $03, $02, $00, $00
-	db $39, $07, $07, $04
-	db $00, $05, $04, $07
-	db $01, $05, $00, $00
-	db $0f, $05, $14, $07
-	db $05, $05, $11, $0c
-	db $0c, $06, $06, $04
+; see data/battle_tower_2.asm
+	db $03,  4
+	db $05,  8
+	db $03,  5
+	db $0e,  6
+	db $03,  2
+	db $00,  0
+	db $39,  7
+	db $07,  4
+	db $00,  5
+	db $04,  7
+	db $01,  5
+	db $00,  0
+	db $0f,  5
+	db $14,  7
+	db $05,  5
+	db $11, 12
+	db $0c,  6
+	db $06,  4
 
 
 CopyBTTrainer_FromBT_OT_TowBT_OTTemp: ; 1704a2
@@ -409,10 +622,10 @@
 	pop af
 	ld [rSVBK], a
 
-	ld a, BANK(s1_be45)
+	ld a, BANK(sBattleTowerChallengeState)
 	call GetSRAMBank
 	ld a, $2
-	ld [s1_be45], a
+	ld [sBattleTowerChallengeState], a
 	ld hl, sNrOfBeatenBattleTowerTrainers
 	inc [hl]
 	call CloseSRAM
@@ -419,3 +632,1008 @@
 SkipBattleTowerTrainer: ; 1704c9
 	ret
 ; 1704ca
+Function1704ca: ; 1704ca
+	ld a, [$be46]
+	cp $7
+	jr c, .asm_1704d3
+	ld a, $6
+
+.asm_1704d3
+	ld hl, $afce
+	ld de, -$e0
+.asm_1704d9
+	and a
+	jr z, .asm_1704e0
+	add hl, de
+	dec a
+	jr .asm_1704d9
+
+.asm_1704e0
+	ret
+; 1704e1
+
+Function1704e1: ; 1704e1
+	call SpeechTextBox
+	call FadeToMenu
+	call Function17021e
+	call Function1704f1
+	call ReturnToCallingMenu
+	ret
+; 1704f1
+
+Function1704f1: ; 1704f1
+	call ClearBGPalettes
+	call ClearSprites
+	call ClearScreen
+.asm_1704fa
+	call JoyTextDelay
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .asm_17050f
+	call Function170510
+	callba ReloadMapPart
+	jr .asm_1704fa
+
+.asm_17050f
+	ret
+; 170510
+
+Function170510: ; 170510
+	ld a, [wJumptableIndex]
+	ld e, a
+	ld d, 0
+	ld hl, Jumptable_17051f
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 17051f
+
+Jumptable_17051f: ; 17051f
+	dw Function170525
+	dw Function170571
+	dw Function170577
+; 170525
+
+Function170525: ; 170525
+	ld a, $5
+	call GetSRAMBank
+
+	ld hl, $a89c
+	ld de, StringBuffer3
+	ld bc, $0016
+	call CopyBytes
+
+	ld hl, $a8b2
+	ld de, $c608
+	ld bc, $0096
+	call CopyBytes
+
+	call CloseSRAM
+	hlcoord 1, 1
+	ld de, StringBuffer3
+	call PlaceString
+	hlcoord 1, 3
+	ld de, String_170676
+	call PlaceString
+	hlcoord 4, 3
+	ld de, StringBuffer4
+	call PlaceString
+	hlcoord 8, 3
+	ld de, String_17067a
+	call PlaceString
+	call Function1705b7
+	call Function1705f0
+	jr Function1705b2
+
+
+Function170571:
+	call SetPalettes
+	call Function1705b2
+
+
+Function170577:
+	ld hl, hJoyPressed
+	ld a, [hl]
+	and $1
+	jr nz, .asm_1705ac
+	ld a, [hl]
+	and $2
+	jr nz, .asm_1705ac
+	ld a, [hl]
+	and $40
+	jr nz, .asm_17058f
+	ld a, [hl]
+	and $80
+	jr nz, .asm_17059d
+	ret
+
+.asm_17058f
+	ld a, [wcf64]
+	and a
+	ret z
+	sub $f
+	ld [wcf64], a
+	call Function1705f0
+	ret
+
+.asm_17059d
+	ld a, [wcf64]
+	cp $3c
+	ret z
+	add $f
+	ld [wcf64], a
+	call Function1705f0
+	ret
+
+.asm_1705ac
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+
+Function1705b2:
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+; 1705b7
+
+Function1705b7: ; 1705b7
+	hlcoord 0, 4
+	ld a, $79
+	ld [hli], a
+	ld c, $12
+.asm_1705bf
+	ld a, $7a
+	ld [hli], a
+	dec c
+	jr nz, .asm_1705bf
+	ld a, $7b
+	ld [hli], a
+	ld de, $0014
+	ld c, $c
+.asm_1705cd
+	ld a, $7c
+	ld [hl], a
+	add hl, de
+	dec c
+	jr nz, .asm_1705cd
+	ld a, $7d
+	ld [hli], a
+	ld c, $12
+.asm_1705d9
+	ld a, $7a
+	ld [hli], a
+	dec c
+	jr nz, .asm_1705d9
+	ld a, $7e
+	ld [hl], a
+	ld de, $ffec
+	add hl, de
+	ld c, $c
+.asm_1705e8
+	ld a, $7c
+	ld [hl], a
+	add hl, de
+	dec c
+	jr nz, .asm_1705e8
+	ret
+; 1705f0
+
+Function1705f0: ; 1705f0
+	call Function17064b
+	call Function17065d
+	ld a, $50
+	ld [wcd4e], a
+	ld hl, $c608
+	ld a, [wcf64]
+	ld c, a
+	xor a
+	ld b, a
+	add hl, bc
+	push hl
+	pop bc
+	hlcoord 1, 6
+	ld a, $6
+.asm_17060c
+	push af
+	push hl
+	ld a, $3
+.asm_170610
+	push af
+	ld de, wcd49
+	ld a, [bc]
+	and a
+	jr z, .asm_170625
+	ld a, $5
+.asm_17061a
+	push af
+	ld a, [bc]
+	ld [de], a
+	inc bc
+	inc de
+	pop af
+	dec a
+	jr nz, .asm_17061a
+	jr .asm_170631
+
+.asm_170625
+	ld a, $5
+.asm_170627
+	push af
+	ld a, $e3
+	ld [de], a
+	inc de
+	inc bc
+	pop af
+	dec a
+	jr nz, .asm_170627
+
+.asm_170631
+	ld de, wcd49
+	push bc
+	call PlaceString
+	ld de, $0006
+	add hl, de
+	pop bc
+	pop af
+	dec a
+	jr nz, .asm_170610
+	pop hl
+	ld de, $0028
+	add hl, de
+	pop af
+	dec a
+	jr nz, .asm_17060c
+	ret
+; 17064b
+
+Function17064b: ; 17064b
+	hlcoord 1, 5
+	xor a
+	ld b, $c
+.asm_170651
+	ld c, $12
+.asm_170653
+	ld [hli], a
+	dec c
+	jr nz, .asm_170653
+rept 2
+	inc hl
+endr
+	dec b
+	jr nz, .asm_170651
+	ret
+; 17065d
+
+Function17065d: ; 17065d
+	ld a, [wcf64]
+	and a
+	jr z, .asm_170669
+	hlcoord 18, 5
+	ld a, $61
+	ld [hl], a
+
+.asm_170669
+	ld a, [wcf64]
+	cp $3c
+	ret z
+	hlcoord 18, 16
+	ld a, $ee
+	ld [hl], a
+	ret
+; 170676
+
+String_170676: ; 170676
+	db "ルーム@"
+; 17067a
+
+String_17067a: ; 17067a
+	db "れきだいりーダーいちらん@"
+; 170687
+
+BattleTowerAction: ; 170687
+	ld a, [ScriptVar]
+	ld e, a
+	ld d, 0
+	ld hl, .jumptable
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 170696
+
+
+.jumptable: ; 170696 (5c:4696)
+	dw Function17075f ; 0x00
+	dw Function170788 ; 0x01
+	dw Function170778 ; 0x02
+	dw Function170799 ; 0x03
+	dw Function17079d ; 0x04
+	dw Function1707ac ; 0x05
+	dw Function1707f4 ; 0x06
+	dw Function170868 ; 0x07
+	dw Function170881 ; 0x08
+	dw Function17089a ; 0x09
+	dw Function1708b1 ; 0x0a
+	dw CheckMobileEventIndex ; 0x0b
+	dw Function1708c8 ; 0x0c
+	dw Function1708f0 ; 0x0d
+	dw Function17093c ; 0x0e
+	dw Function1709aa ; 0x0f
+	dw Function1709bb ; 0x10
+	dw Function170a9c ; 0x11
+	dw Function170aa0 ; 0x12
+	dw Function170aaf ; 0x13
+	dw Function170abe ; 0x14
+	dw Function170ad7 ; 0x15
+	dw Function170807 ; 0x16
+	dw Function17081d ; 0x17
+	dw Function170ae8 ; 0x18
+	dw Function170b16 ; 0x19
+	dw ResetBattleTowerTrainersSRAM ; 0x1a
+	dw Function1706ee ; 0x1b
+	dw Function17071b ; 0x1c
+	dw Function170729 ; 0x1d
+	dw Function17073e ; 0x1e
+	dw Function170737 ; 0x1f
+
+
+; Reset the save memory for BattleTower-Trainers (Counter and all 7 TrainerBytes)
+ResetBattleTowerTrainersSRAM: ; 1706d6 (5c:46d6) BattleTowerAction $1a
+	ld a, BANK(sBTTrainers)
+	call GetSRAMBank
+
+	ld a, $ff
+	ld hl, sBTTrainers
+	ld bc, BATTLETOWER_NROFTRAINERS
+	call ByteFill
+
+	xor a
+	ld [sNrOfBeatenBattleTowerTrainers], a
+
+	call CloseSRAM
+
+	ret
+
+Function1706ee: ; 1706ee (5c:46ee) BattleTowerAction $1b
+	ld a, BANK(sBattleTowerReward)
+	call GetSRAMBank
+
+	ld a, [sBattleTowerReward]
+	call CloseSRAM
+	ld [ScriptVar], a
+	ld hl, NumItems
+	ld a, [hli]
+	cp MAX_ITEMS
+	ret c
+	ld b, MAX_ITEMS
+	ld a, [ScriptVar]
+	ld c, a
+.loop
+	ld a, [hli]
+	cp c
+	jr nz, .next
+	ld a, [hl]
+	cp 95
+	ret c
+.next
+	inc hl
+	dec b
+	jr nz, .loop
+	ld a, POTION
+	ld [ScriptVar], a
+	ret
+
+Function17071b: ; 17071b (5c:471b) BattleTowerAction $1c
+	ld a, BANK(sBattleTowerChallengeState)
+	call GetSRAMBank
+	ld a, $3
+	ld [sBattleTowerChallengeState], a
+	call CloseSRAM
+	ret
+
+Function170729: ; 170729 (5c:4729) BattleTowerAction $1d
+	ld a, BANK(sBattleTowerChallengeState)
+	call GetSRAMBank
+	ld a, $4
+	ld [sBattleTowerChallengeState], a
+	call CloseSRAM
+	ret
+
+Function170737: ; 170737 (5c:4737) BattleTowerAction $1e
+	callba SaveOptions
+	ret
+
+Function17073e: ; 17073e (5c:473e) BattleTowerAction $1f
+; Generate a random stat boosting item.
+.loop
+	call Random
+	ld a, [hRandomAdd]
+	and $7
+	cp 6
+	jr c, .okay
+	sub 6
+.okay
+	add HP_UP
+	cp LUCKY_PUNCH
+	jr z, .loop
+	push af
+	ld a, BANK(sBattleTowerReward)
+	call GetSRAMBank
+	pop af
+	ld [sBattleTowerReward], a
+	call CloseSRAM
+	ret
+
+Function17075f: ; 17075f (5c:475f) BattleTowerAction $00
+	call Function17089a
+	ld a, [ScriptVar]
+	and a
+	ret z
+
+	ld a, BANK(sbe4f)
+	call GetSRAMBank
+	ld a, [sbe4f]
+	and $2
+	ld [ScriptVar], a
+	call CloseSRAM
+	ret
+
+Function170778: ; 170778 (5c:4778) BattleTowerAction $02
+	ld hl, sBattleTowerChallengeState
+	ld a, BANK(sBattleTowerChallengeState)
+	call GetSRAMBank
+	ld a, [hl]
+	ld [ScriptVar], a
+	call CloseSRAM
+	ret
+
+Function170788: ; 170788 (5c:4788) BattleTowerAction $01
+	ld a, BANK(sbe4f)
+	call GetSRAMBank
+	ld a, [sbe4f]
+	or $2
+	ld [sbe4f], a
+	call CloseSRAM
+	ret
+
+Function170799: ; 170799 (5c:4799) BattleTowerAction $03
+	ld c, $1
+	jr asm_17079f
+
+Function17079d: ; 17079d (5c:479d) BattleTowerAction $04
+	ld c, $0
+asm_17079f: ; 17079f (5c:479f)
+	ld a, BANK(sBattleTowerChallengeState)
+	call GetSRAMBank
+	ld a, c
+	ld [sBattleTowerChallengeState], a
+	call CloseSRAM
+	ret
+
+Function1707ac: ; 1707ac (5c:47ac) BattleTowerAction $05
+	ld a, $5
+	call GetSRAMBank
+	ld a, [$aa8c]
+	ld b, a
+	ld a, [$be46]
+	ld [ScriptVar], a
+	call CloseSRAM
+	and a
+	ret z
+	ld a, b
+	cp $2
+	jr nc, .asm_1707ef
+	push bc
+	call UpdateTime
+	pop bc
+	ld a, $5
+	call GetSRAMBank
+	ld a, [$aa8b]
+	call CloseSRAM
+	ld c, a
+	ld a, [CurDay]
+	sub c
+	jr c, .asm_1707e5
+	cp $8
+	jr nc, .asm_1707ef
+	ld a, b
+	and a
+	jr nz, .asm_1707ef
+	ret
+.asm_1707e5
+	ld hl, CurDay
+	ld a, $8c
+	sub c
+	add [hl]
+	cp $8
+	ret c
+.asm_1707ef
+	ld a, $8
+	ld [ScriptVar], a
+
+Function1707f4: ; 1707f4 (5c:47f4) BattleTowerAction $06
+	ld a, $5
+	call GetSRAMBank
+	xor a
+	ld [$be46], a
+	ld [$aa8b], a
+	ld [$aa8c], a
+	call CloseSRAM
+	ret
+
+Function170807: ; 170807 (5c:4807) BattleTowerAction $16
+	call UpdateTime
+	ld a, $5
+	call GetSRAMBank
+	ld a, [CurDay]
+	ld [$b2f9], a
+	xor a
+	ld [$b2fa], a
+	call CloseSRAM
+	ret
+
+Function17081d: ; 17081d (5c:481d) BattleTowerAction $17
+	xor a
+	ld [ScriptVar], a
+	ld a, $5
+	call GetSRAMBank
+	ld a, [$b2f9]
+	ld c, a
+	ld a, [$b2fa]
+	ld b, a
+	call CloseSRAM
+	cp $2
+	jr nc, .asm_170853
+	push bc
+	call UpdateTime
+	pop bc
+	ld a, [CurDay]
+	sub c
+	jr c, .asm_170849
+	cp $b
+	jr nc, .asm_170853
+	ld a, b
+	and a
+	jr nz, .asm_170853
+	ret
+.asm_170849
+	ld hl, CurDay
+	ld a, $8c
+	sub c
+	add [hl]
+	cp $b
+	ret c
+.asm_170853
+	ld a, $1
+	ld [ScriptVar], a
+	ld a, $5
+	call GetSRAMBank
+	xor a
+	ld [$b2f9], a
+	ld [$b2fa], a
+	call CloseSRAM
+	ret
+
+Function170868: ; 170868 (5c:4868) BattleTowerAction $07
+	ld a, BANK(sbe47)
+	call GetSRAMBank
+	ld a, [rSVBK]
+	push af
+	ld a, $3
+	ld [rSVBK], a
+	ld a, [wd000 + $800]
+	ld [sbe47], a
+	pop af
+	ld [rSVBK], a
+	call CloseSRAM
+	ret
+
+Function170881: ; 170881 (5c:4881) BattleTowerAction $08
+	ld a, BANK(sbe47)
+	call GetSRAMBank
+	ld a, [rSVBK]
+	push af
+	ld a, $3
+	ld [rSVBK], a
+	ld a, [sbe47]
+	ld [wd000 + $800], a
+	pop af
+	ld [rSVBK], a
+	call CloseSRAM
+	ret
+
+Function17089a: ; 17089a BattleTowerAction $09
+	ld a, [wSaveFileExists]
+	and a
+	jr z, .nope
+	callba Function14bcb
+	jr z, .yes
+	xor a
+	jr .nope
+
+.yes
+	ld a, $1
+
+.nope
+	ld [ScriptVar], a
+	ret
+; 1708b1
+
+
+Function1708b1: ; 1708b1 (5c:48b1) BattleTowerAction $0a
+	xor a
+	ld [MusicFade], a
+	call MaxVolume
+	ret
+
+CheckMobileEventIndex: ; 1708b9 (5c:48b9) BattleTowerAction $0b something to do with GS Ball
+	ld a, BANK(sMobileEventIndex)
+	call GetSRAMBank
+	ld a, [sMobileEventIndex]
+	ld [ScriptVar], a
+	call CloseSRAM
+	ret
+
+Function1708c8: ; 1708c8 (5c:48c8) BattleTowerAction $0c
+	call UpdateTime
+	ld a, $5
+	call GetSRAMBank
+	ld a, [CurDay]
+	ld [$aa8b], a
+	xor a
+	ld [$aa8c], a
+	ld a, [$aa5d]
+	cp $2
+	jr nc, .asm_1708ec
+	ld a, [CurDay]
+	ld [$aa48], a
+	ld a, $1
+	ld [$aa47], a
+.asm_1708ec
+	call CloseSRAM
+	ret
+
+Function1708f0: ; 1708f0 (5c:48f0) BattleTowerAction $0d
+	xor a
+	ld [ScriptVar], a
+	call UpdateTime
+	ld a, $5
+	call GetSRAMBank
+	ld a, [$aa48]
+	ld c, a
+	ld a, [$aa47]
+	call CloseSRAM
+	and a
+	ret z
+	ld hl, CurDay
+	ld a, c
+	cp [hl]
+	jr nz, Function170923
+	ld a, $5
+	call GetSRAMBank
+	ld a, [$aa5d]
+	call CloseSRAM
+	cp $5
+	ret c
+	ld a, $1
+	ld [ScriptVar], a
+	ret
+
+
+Function170923: ; 170923
+	ld a, $5
+	call GetSRAMBank
+	xor a
+	ld [$aa48], a
+	ld [$aa47], a
+	ld hl, $aa5d
+	ld bc, $0011
+	call ByteFill
+	call CloseSRAM
+	ret
+; 17093c
+
+
+Function17093c: ; 17093c (5c:493c) BattleTowerAction $0e
+	xor a
+	ld [ScriptVar], a
+	ld a, EGG_TICKET
+	ld [CurItem], a
+	ld hl, NumItems
+	call CheckItem
+	ret nc
+	ld a, [PartyCount]
+	ld b, 0
+	ld c, a
+	ld hl, PartySpecies
+.loop
+	ld a, [hli]
+	cp EGG
+	jr nz, .not_egg
+	push hl
+	ld hl, PartyMonOT ; wddff (aliases: PartyMonOT)
+	ld de, $6
+	ld a, b
+	and a
+	jr z, .skip
+.loop2
+	add hl, de
+	dec a
+	jr nz, .loop2
+.skip
+	ld de, String_1709a4
+	ld a, $6
+.asm_17096e
+	push af
+	ld a, [de]
+	inc de
+	cp [hl]
+	inc hl
+	jr nz, .asm_17099d
+	pop af
+	dec a
+	jr nz, .asm_17096e
+rept 4
+	dec hl
+endr
+	ld a, $50
+rept 2
+	ld [hli], a
+endr
+	pop hl
+	ld a, EGG_TICKET
+	ld [CurItem], a
+	ld a, $1
+	ld [wItemQuantityChangeBuffer], a
+	ld a, $ff
+	ld [wd107], a
+	ld hl, NumItems
+	call TossItem
+	ld a, $1
+	ld [ScriptVar], a
+	ret
+
+.asm_17099d
+	pop af
+	pop hl
+.not_egg
+	inc b
+	dec c
+	jr nz, .loop
+	ret
+; 1709a4 (5c:49a4)
+
+String_1709a4: ; 1709a4
+	db "なぞナゾ@@"
+
+Function1709aa: ; 1709aa (5c:49aa) BattleTowerAction $0f
+	ld a, [rSVBK]
+	push af
+	ld a, BANK(w3_d090)
+	ld [rSVBK], a
+	ld a, [w3_d090]
+	ld [ScriptVar], a
+	pop af
+	ld [rSVBK], a
+	ret
+
+Function1709bb: ; 1709bb (5c:49bb) BattleTowerAction $10
+	xor a
+	ld [ScriptVar], a
+	ld a, $5
+	call GetSRAMBank
+	ld a, [$a800]
+	call CloseSRAM
+	cp 6
+	jr nc, .invalid
+	ld e, a
+	ld d, 0
+	ld hl, Jumptable_1709e7
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+
+.invalid
+	ld a, $5
+	call GetSRAMBank
+	xor a
+	ld [$a800], a
+	call CloseSRAM
+	ret
+; 1709e7 (5c:49e7)
+
+Jumptable_1709e7: ; 1709e7
+	dw Function170a00
+	dw Function170a00
+	dw Function1709f3
+	dw Function1709f3
+	dw Function170a01
+	dw Function170a33
+; 1709f3
+
+Function1709f3: ; 1709f3
+	ld a, $5
+	call GetSRAMBank
+	ld a, $1
+	ld [$a800], a
+	call CloseSRAM
+
+Function170a00: ; 170a00
+	ret
+; 170a01
+
+Function170a01: ; 170a01
+	ld a, $5
+	call GetSRAMBank
+	ld hl, $b023
+	ld de, $c608
+	ld bc, $0069
+	call CopyBytes
+	ld a, [$a825]
+	ld [wcd30], a
+	ld a, [$a826]
+	ld [wcd31], a
+	call CloseSRAM
+	callba Function11b6b4
+	callba Function17d0f3
+	ld a, $1
+	ld [ScriptVar], a
+	ret
+; 170a33
+
+Function170a33: ; 170a33
+	ld a, $0
+	call GetSRAMBank
+	ld hl, wRTC
+	ld de, $c608
+	ld bc, $0004
+	call CopyBytes
+	call CloseSRAM
+	ld a, $5
+	call GetSRAMBank
+	ld hl, $b08c
+	ld de, $c608
+	ld c, $4
+.asm_170a54
+	ld a, [de]
+	inc de
+	cp [hl]
+	jr nz, .asm_170a78
+	inc hl
+	dec c
+	jr nz, .asm_170a54
+	call CloseSRAM
+	ld a, [MapGroup]
+	ld b, a
+	ld a, [MapNumber]
+	ld c, a
+	call GetMapTrigger
+	ld a, d
+	or e
+	jr z, .asm_170a72
+	ld a, [de]
+	and a
+	ret nz
+
+.asm_170a72
+	ld a, $1
+	ld [ScriptVar], a
+	ret
+
+.asm_170a78
+	call CloseSRAM
+	ld a, $5
+	call GetSRAMBank
+	xor a
+	ld [$a800], a
+	call CloseSRAM
+	ld [ScriptVar], a
+	ld a, [MapGroup]
+	ld b, a
+	ld a, [MapNumber]
+	ld c, a
+	call GetMapTrigger
+	ld a, d
+	or e
+	jr z, .asm_170a9b
+	xor a
+	ld [de], a
+
+.asm_170a9b
+	ret
+; 170a9c
+
+Function170a9c: ; 170a9c (5c:4a9c) BattleTowerAction $11
+	ld c, $0
+	jr asm_170aa2
+
+Function170aa0: ; 170aa0 (5c:4aa0) BattleTowerAction $12
+	ld c, $1
+asm_170aa2: ; 170aa2 (5c:4aa2)
+	ld a, $5
+	call GetSRAMBank
+	ld a, c
+	ld [$aa8d], a
+	call CloseSRAM
+	ret
+
+Function170aaf: ; 170aaf (5c:4aaf) BattleTowerAction $13
+	ld a, $5
+	call GetSRAMBank
+	ld a, [$aa8d]
+	ld [ScriptVar], a
+	call CloseSRAM
+	ret
+
+Function170abe: ; 170abe (5c:4abe) BattleTowerAction $14
+	call Function17089a
+	ld a, [ScriptVar]
+	and a
+	ret z
+	ld a, BANK(sbe4f)
+	call GetSRAMBank
+	ld a, [sbe4f]
+	and $1
+	ld [ScriptVar], a
+	call CloseSRAM
+	ret
+
+Function170ad7: ; 170ad7 (5c:4ad7) BattleTowerAction $15
+	ld a, BANK(sbe4f)
+	call GetSRAMBank
+	ld a, [sbe4f]
+	or $1
+	ld [sbe4f], a
+	call CloseSRAM
+	ret
+
+Function170ae8: ; 170ae8 (5c:4ae8) BattleTowerAction $18
+	ld a, $5
+	call GetSRAMBank
+	ld a, [$b2fb]
+	call CloseSRAM
+	ld c, $a
+	call SimpleDivide
+	ld a, b
+	ld [wcd4f], a
+	xor a
+	ld [ScriptVar], a
+	callba Function119d93
+	ret nc
+	ld a, $5
+	call GetSRAMBank
+	ld a, [$b2fb]
+	call CloseSRAM
+	ld [ScriptVar], a
+	ret
+
+Function170b16: ; 170b16 (5c:4b16) BattleTowerAction $19
+	ld a, $5
+	call GetSRAMBank
+	ld a, [$b2fb]
+	call CloseSRAM
+	ld c, 10
+	call SimpleDivide
+	ld a, b
+	ld [wcd4f], a
+	xor a
+	ld [ScriptVar], a
+	callba Function119dd1
+	ret nc
+	ld a, $5
+	call GetSRAMBank
+	ld a, [$b2fb]
+	call CloseSRAM
+	ld [ScriptVar], a
+	ret
--- a/misc/crystal_misc.asm
+++ b/misc/crystal_misc.asm
@@ -173,7 +173,7 @@
 	ret
 
 .asm_17a79f
-	callba Function104061
+	callba ReloadMapPart
 	ret
 ; 17a7a6 (5e:67a6)
 
@@ -768,26 +768,26 @@
 Function17abcf: ; 17abcf (5e:6bcf)
 	ld a, [rSVBK]
 	push af
-	ld a, BANK(wMapPals)
+	ld a, BANK(UnknBGPals)
 	ld [rSVBK], a
 
 	ld hl, Palette_17ac55
-	ld de, wMapPals ; $d000
+	ld de, UnknBGPals ; $d000
 	ld bc, $30
 	call CopyBytes
 
 	ld hl, Palette_17ac95
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, $40
 	call CopyBytes
 
 	ld hl, GFX_17afa5 + $510
-	ld de, Unkn2Pals + 2 * 4
+	ld de, UnknOBPals + 2 * 4
 	ld bc, $10
 	call CopyBytes
 
 	ld hl, MapObjectPals + 8
-	ld de, Unkn2Pals + 6 * 4
+	ld de, UnknOBPals + 6 * 4
 	ld bc, $8
 	ld a, BANK(MapObjectPals)
 	call FarCopyBytes
--- /dev/null
+++ b/misc/fixed_words.asm
@@ -1,0 +1,4182 @@
+; These functions seem to be related to the selection of preset phrases
+; for use in mobile communications.  Annoyingly, they separate the
+; Battle Tower function above from the data it references.
+Function11c05d: ; 11c05d
+	ld a, e
+	or d
+	jr z, .asm_11c071
+	ld a, e
+	and d
+	cp $ff
+	jr z, .asm_11c071
+	push hl
+	call Function11c156
+	pop hl
+	call PlaceString
+	and a
+	ret
+
+.asm_11c071
+	ld c, l
+	ld b, h
+	scf
+	ret
+; 11c075
+
+Function11c075: ; 11c075
+	push de
+	ld a, c
+	call Function11c254
+	pop de
+	ld bc, wcd36
+	call Function11c08f
+	ret
+; 11c082
+
+Function11c082: ; 11c082
+	push de
+	ld a, c
+	call Function11c254
+	pop de
+	ld bc, wcd36
+	call Function11c0c6
+	ret
+; 11c08f
+
+Function11c08f: ; 11c08f
+	ld l, e
+	ld h, d
+	push hl
+	ld a, $3
+.asm_11c094
+	push af
+	ld a, [bc]
+	ld e, a
+	inc bc
+	ld a, [bc]
+	ld d, a
+	inc bc
+	push bc
+	call Function11c05d
+	jr c, .asm_11c0a2
+	inc bc
+
+.asm_11c0a2
+	ld l, c
+	ld h, b
+	pop bc
+	pop af
+	dec a
+	jr nz, .asm_11c094
+	pop hl
+	ld de, $0028
+	add hl, de
+	ld a, $3
+.asm_11c0b0
+	push af
+	ld a, [bc]
+	ld e, a
+	inc bc
+	ld a, [bc]
+	ld d, a
+	inc bc
+	push bc
+	call Function11c05d
+	jr c, .asm_11c0be
+	inc bc
+
+.asm_11c0be
+	ld l, c
+	ld h, b
+	pop bc
+	pop af
+	dec a
+	jr nz, .asm_11c0b0
+	ret
+; 11c0c6
+
+
+Function11c0c6: ; 11c0c6
+	ld a, [wJumptableIndex]
+	ld l, a
+	ld a, [wcf64]
+	ld h, a
+	push hl
+	ld hl, $c608 + 16
+	ld a, $0
+	ld [hli], a
+	push de
+	xor a
+	ld [wJumptableIndex], a
+	ld a, $12
+	ld [wcf64], a
+	ld a, $6
+.asm_11c0e1
+	push af
+	ld a, [bc]
+	ld e, a
+	inc bc
+	ld a, [bc]
+	ld d, a
+	inc bc
+	or e
+	jr z, .asm_11c133
+	push hl
+	push bc
+	call Function11c156
+	call Function11c14a
+	ld e, c
+	pop bc
+	pop hl
+	ld a, e
+	or a
+	jr z, .asm_11c133
+.asm_11c0fa
+	ld a, [wcf64]
+	cp $12
+	jr z, .asm_11c102
+	inc e
+
+.asm_11c102
+	cp e
+	jr nc, .asm_11c11c
+	ld a, [wJumptableIndex]
+	inc a
+	ld [wJumptableIndex], a
+	ld [hl], $4e
+	rra
+	jr c, .asm_11c113
+	ld [hl], $55
+
+.asm_11c113
+	inc hl
+	ld a, $12
+	ld [wcf64], a
+	dec e
+	jr .asm_11c0fa
+
+.asm_11c11c
+	cp $12
+	jr z, .asm_11c123
+	ld [hl], $7f
+	inc hl
+
+.asm_11c123
+	sub e
+	ld [wcf64], a
+	ld de, $c608
+.asm_11c12a
+	ld a, [de]
+	cp $50
+	jr z, .asm_11c133
+	inc de
+	ld [hli], a
+	jr .asm_11c12a
+
+.asm_11c133
+	pop af
+	dec a
+	jr nz, .asm_11c0e1
+	ld [hl], $57
+	pop bc
+	ld hl, $c608 + 16
+	call PlaceWholeStringInBoxAtOnce
+	pop hl
+	ld a, l
+	ld [wJumptableIndex], a
+	ld a, h
+	ld [wcf64], a
+	ret
+; 11c14a
+
+Function11c14a: ; 11c14a
+	ld c, $0
+	ld hl, $c608
+.asm_11c14f
+	ld a, [hli]
+	cp $50
+	ret z
+	inc c
+	jr .asm_11c14f
+; 11c156
+
+Function11c156: ; 11c156
+	ld a, [rSVBK]
+	push af
+	ld a, $1
+	ld [rSVBK], a
+	ld a, $50
+	ld hl, $c608
+	ld bc, $000b
+	call ByteFill
+	ld a, d
+	and a
+	jr z, .asm_11c19c
+	ld hl, Unknown_11daac
+	dec d
+	sla d
+	ld c, d
+	ld b, $0
+	add hl, bc
+	ld a, [hli]
+	ld c, a
+	ld a, [hl]
+	ld b, a
+	push bc
+	pop hl
+	ld c, e
+	ld b, $0
+	sla c
+	rl b
+	sla c
+	rl b
+	sla c
+	rl b
+	add hl, bc
+	ld bc, $0005
+.asm_11c18f
+	ld de, $c608
+	call CopyBytes
+	ld de, $c608
+	pop af
+	ld [rSVBK], a
+	ret
+
+.asm_11c19c
+	ld a, e
+	ld [wd265], a
+	call GetPokemonName
+	ld hl, StringBuffer1
+	ld bc, $000a
+	jr .asm_11c18f
+; 11c1ab
+
+Function11c1ab: ; 11c1ab
+	ld a, [hInMenu]
+	push af
+	ld a, $1
+	ld [hInMenu], a
+	call Function11c1b9
+	pop af
+	ld [hInMenu], a
+	ret
+; 11c1b9
+
+Function11c1b9: ; 11c1b9
+	call Function11c1ca
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	call Function11c283
+	pop af
+	ld [rSVBK], a
+	ret
+; 11c1ca
+
+Function11c1ca: ; 11c1ca
+	xor a
+	ld [wJumptableIndex], a
+	ld [wcf64], a
+	ld [wcf65], a
+	ld [wcf66], a
+	ld [wcd23], a
+	ld [BGMapBuffer], a
+	ld [wcd21], a
+	ld [CreditsTimer], a
+	ld [wcd35], a
+	ld [wcd2b], a
+	ld a, $ff
+	ld [wcd24], a
+	ld a, [MenuSelection2]
+	dec a
+	call Function11c254
+	call ClearBGPalettes
+	call ClearSprites
+	call ClearScreen
+	call Function11d323
+	call SetPalettes
+	call DisableLCD
+	ld hl, GFX_11d67e
+	ld de, VTiles2
+	ld bc, $60
+	call CopyBytes
+	ld hl, LZ_11d6de
+	ld de, VTiles0
+	call Decompress
+	call EnableLCD
+	callba ReloadMapPart
+	callba Function8cf53
+	callba LoadPokemonData
+	callba Function40c30
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, $c6d0
+	ld de, LYOverrides
+	ld bc, $100
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	call Function11d4aa
+	call Function11d3ba
+	ret
+; 11c254
+
+Function11c254: ; 11c254
+	push af
+	ld a, $4
+	call GetSRAMBank
+	ld hl, $a007
+	pop af
+	sla a
+	sla a
+	ld c, a
+	sla a
+	add c
+	ld c, a
+	ld b, $0
+	add hl, bc
+	ld de, wcd36
+	ld bc, $000c
+	call CopyBytes
+	call CloseSRAM
+	ret
+; 11c277
+
+
+Function11c277: ; 11c277 (47:4277)
+	ld a, " "
+	hlcoord 0, 6
+	ld bc, (SCREEN_HEIGHT - 6) * SCREEN_WIDTH
+	call ByteFill
+	ret
+
+Function11c283: ; 11c283
+.loop
+	call JoyTextDelay
+	ld a, [hJoyPressed]
+	ld [hJoypadPressed], a
+	ld a, [wJumptableIndex]
+	bit 7, a
+	jr nz, .exit
+	call .DoJumptableFunction
+	callba Function8cf69
+	callba ReloadMapPart
+	jr .loop
+
+.exit
+	callba Function8cf53
+	call ClearSprites
+	ret
+; 11c2ac
+
+.DoJumptableFunction: ; 11c2ac
+	ld a, [wJumptableIndex]
+	ld e, a
+	ld d, 0
+	ld hl, .Jumptable
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+; 11c2bb
+
+
+.Jumptable: ; 11c2bb (47:42bb)
+	dw Function11c2e9 ; 00
+	dw Function11c346 ; 01
+	dw Function11c35f ; 02
+	dw Function11c373 ; 03
+	dw Function11c3c2 ; 04
+	dw Function11c3ed ; 05
+	dw Function11c52c ; 06
+	dw Function11c53d ; 07
+	dw Function11c658 ; 08
+	dw Function11c675 ; 09
+	dw Function11c9bd ; 0a
+	dw Function11c9c3 ; 0b
+	dw Function11caad ; 0c
+	dw Function11cab3 ; 0d
+	dw Function11cb52 ; 0e
+	dw Function11cb66 ; 0f
+	dw Function11cbf5 ; 10
+	dw Function11ccef ; 11
+	dw Function11cd04 ; 12
+	dw Function11cd20 ; 13
+	dw Function11cd54 ; 14
+	dw Function11ce0b ; 15
+	dw Function11ce2b ; 16
+
+
+Function11c2e9: ; 11c2e9 (47:42e9)
+	depixel 3, 1, 2, 5
+	ld a, SPRITE_ANIM_INDEX_1D
+	call _InitSpriteAnimStruct
+	depixel 8, 1, 2, 5
+	ld a, SPRITE_ANIM_INDEX_1D
+	call _InitSpriteAnimStruct
+	ld hl, $c
+	add hl, bc
+	ld a, $1
+	ld [hl], a
+	depixel 9, 2, 2, 0
+	ld a, SPRITE_ANIM_INDEX_1D
+	call _InitSpriteAnimStruct
+	ld hl, $c
+	add hl, bc
+	ld a, $3
+	ld [hl], a
+	depixel 10, 16
+	ld a, SPRITE_ANIM_INDEX_1D
+	call _InitSpriteAnimStruct
+	ld hl, $c
+	add hl, bc
+	ld a, $4
+	ld [hl], a
+	depixel 10, 4
+	ld a, SPRITE_ANIM_INDEX_1D
+	call _InitSpriteAnimStruct
+	ld hl, $c
+	add hl, bc
+	ld a, $5
+	ld [hl], a
+	depixel 10, 2
+	ld a, SPRITE_ANIM_INDEX_1D
+	call _InitSpriteAnimStruct
+	ld hl, $c
+	add hl, bc
+	ld a, $2
+	ld [hl], a
+	ld hl, wcd23
+	set 1, [hl]
+	set 2, [hl]
+	jp Function11cfb5
+
+Function11c346: ; 11c346 (47:4346)
+	ld a, $9
+	ld [wcd2d], a
+	ld a, $2
+	ld [wcd2e], a
+	ld [wcd2f], a
+	ld [wcd30], a
+	ld de, wcd2d
+	call Function11cfce
+	jp Function11cfb5
+
+Function11c35f: ; 11c35f (47:435f)
+	ld hl, wcd2f
+rept 2
+	inc [hl]
+endr
+rept 2
+	dec hl
+endr
+	dec [hl]
+	push af
+	ld de, wcd2d
+	call Function11cfce
+	pop af
+	ret nz
+	jp Function11cfb5
+
+Function11c373: ; 11c373 (47:4373)
+	ld hl, wcd30
+rept 2
+	inc [hl]
+endr
+rept 2
+	dec hl
+endr
+	dec [hl]
+	push af
+	ld de, wcd2d
+	call Function11cfce
+	pop af
+	ret nz
+	call Function11c38a
+	jp Function11cfb5
+
+Function11c38a: ; 11c38a (47:438a)
+	ld hl, Unknown_11c986
+	ld bc, wcd36
+	ld a, $6
+.asm_11c392
+	push af
+	ld a, [hli]
+	ld e, a
+	ld a, [hli]
+	ld d, a
+	push hl
+	push de
+	pop hl
+	ld a, [bc]
+	inc bc
+	ld e, a
+	ld a, [bc]
+	inc bc
+	ld d, a
+	push bc
+	or e
+	jr z, .asm_11c3af
+	ld a, e
+	and d
+	cp $ff
+	jr z, .asm_11c3af
+	call Function11c05d
+	jr .asm_11c3b5
+.asm_11c3af
+	ld de, String_11c3bc
+	call PlaceString
+.asm_11c3b5
+	pop bc
+	pop hl
+	pop af
+	dec a
+	jr nz, .asm_11c392
+	ret
+; 11c3bc (47:43bc)
+
+String_11c3bc: ; 11c3bc
+	db "ーーーーー@"
+; 11c3c2
+
+Function11c3c2: ; 11c3c2 (47:43c2)
+	call Function11c277
+	ld de, Unknown_11cfbe
+	call Function11d035
+	hlcoord 1, 7
+	ld de, String_11c4db
+	call PlaceString
+	hlcoord 1, 16
+	ld de, String_11c51b
+	call PlaceString
+	call Function11c4be
+	ld hl, wcd23
+	set 0, [hl]
+	ld hl, wcd24
+	res 0, [hl]
+	call Function11cfb5
+
+Function11c3ed: ; 11c3ed (47:43ed)
+	ld hl, BGMapBuffer ; wcd20 (aliases: CreditsPos)
+	ld de, hJoypadPressed ; $ffa3
+	ld a, [de]
+	and $8
+	jr nz, .asm_11c426
+	ld a, [de]
+	and $2
+	jr nz, .asm_11c41a
+	ld a, [de]
+	and $1
+	jr nz, .asm_11c42c
+	ld de, hJoyLast
+	ld a, [de]
+	and $40
+	jr nz, .asm_11c47c
+	ld a, [de]
+	and $80
+	jr nz, .asm_11c484
+	ld a, [de]
+	and $20
+	jr nz, .asm_11c48c
+	ld a, [de]
+	and $10
+	jr nz, .asm_11c498
+	ret
+.asm_11c41a
+	call PlayClickSFX
+.asm_11c41d
+	ld hl, wcd24
+	set 0, [hl]
+	ld a, $c
+	jr .asm_11c475
+.asm_11c426
+	ld a, $8
+	ld [BGMapBuffer], a ; wcd20 (aliases: CreditsPos)
+	ret
+.asm_11c42c
+	ld a, [BGMapBuffer] ; wcd20 (aliases: CreditsPos)
+	cp $6
+	jr c, .asm_11c472
+	sub $6
+	jr z, .asm_11c469
+	dec a
+	jr z, .asm_11c41d
+	ld hl, wcd36
+	ld c, $c
+	xor a
+.asm_11c440
+	or [hl]
+	inc hl
+	dec c
+	jr nz, .asm_11c440
+	and a
+	jr z, .asm_11c460
+	ld de, Unknown_11cfba
+	call Function11cfce
+	decoord 1, 2
+	ld bc, wcd36
+	call Function11c08f
+	ld hl, wcd24
+	set 0, [hl]
+	ld a, $e
+	jr .asm_11c475
+.asm_11c460
+	ld hl, wcd24
+	set 0, [hl]
+	ld a, $11
+	jr .asm_11c475
+.asm_11c469
+	ld hl, wcd24
+	set 0, [hl]
+	ld a, $a
+	jr .asm_11c475
+.asm_11c472
+	call Function11c4a5
+.asm_11c475
+	ld [wJumptableIndex], a
+	call PlayClickSFX
+	ret
+.asm_11c47c
+	ld a, [hl]
+	cp $3
+	ret c
+	sub $3
+	jr .asm_11c4a3
+.asm_11c484
+	ld a, [hl]
+	cp $6
+	ret nc
+	add $3
+	jr .asm_11c4a3
+.asm_11c48c
+	ld a, [hl]
+	and a
+	ret z
+	cp $3
+	ret z
+	cp $6
+	ret z
+	dec a
+	jr .asm_11c4a3
+.asm_11c498
+	ld a, [hl]
+	cp $2
+	ret z
+	cp $5
+	ret z
+	cp $8
+	ret z
+	inc a
+.asm_11c4a3
+	ld [hl], a
+	ret
+
+Function11c4a5: ; 11c4a5 (47:44a5)
+	ld hl, wcd23
+	res 0, [hl]
+	ld a, [wcd2b]
+	and a
+	jr nz, .asm_11c4b7
+	xor a
+	ld [wcd21], a
+	ld a, $6
+	ret
+.asm_11c4b7
+	xor a
+	ld [CreditsTimer], a
+	ld a, $15
+	ret
+
+Function11c4be: ; 11c4be (47:44be)
+	ld a, $1
+	hlcoord 0, 6, AttrMap
+	ld bc, $a0
+	call ByteFill
+	ld a, $7
+	hlcoord 0, 14, AttrMap
+	ld bc, $28
+	call ByteFill
+	callba ReloadMapPart
+	ret
+; 11c4db (47:44db)
+
+String_11c4db: ; 11c4db
+	db   "6つのことば¯くみあわせます"
+	next "かえたいところ¯えらぶと でてくる"
+	next "ことばのグループから いれかえたい"
+	next "たんご¯えらんでください"
+	db   "@"
+; 11c51b
+
+String_11c51b: ; 11c51b
+	db "ぜんぶけす やめる   けってい@"
+; 11c52c
+
+Function11c52c: ; 11c52c (47:452c)
+	call Function11c277
+	call Function11c5f0
+	call Function11c618
+	ld hl, wcd24
+	res 1, [hl]
+	call Function11cfb5
+
+Function11c53d: ; 11c53d (47:453d)
+	ld hl, wcd21
+	ld de, hJoypadPressed ; $ffa3
+
+	ld a, [de]
+	and START
+	jr nz, .start
+
+	ld a, [de]
+	and SELECT
+	jr nz, .select
+
+	ld a, [de]
+	and B_BUTTON
+	jr nz, .b
+
+	ld a, [de]
+	and A_BUTTON
+	jr nz, .a
+
+	ld de, hJoyLast
+
+	ld a, [de]
+	and D_UP
+	jr nz, .up
+
+	ld a, [de]
+	and D_DOWN
+	jr nz, .down
+
+	ld a, [de]
+	and D_LEFT
+	jr nz, .left
+
+	ld a, [de]
+	and D_RIGHT
+	jr nz, .right
+
+	ret
+
+.a
+	ld a, [wcd21]
+	cp $f
+	jr c, .asm_11c59d
+	sub $f
+	jr z, .asm_11c5ab
+	dec a
+	jr z, .asm_11c599
+	jr .b
+
+.start
+	ld hl, wcd24
+	set 0, [hl]
+	ld a, $8
+	ld [BGMapBuffer], a ; wcd20 (aliases: CreditsPos)
+
+.b
+	ld a, $4
+	jr .asm_11c59f
+
+.select
+	ld a, [wcd2b]
+	xor $1
+	ld [wcd2b], a
+	ld a, $15
+	jr .asm_11c59f
+
+.asm_11c599
+	ld a, $13
+	jr .asm_11c59f
+
+.asm_11c59d
+	ld a, $8
+
+.asm_11c59f
+	ld hl, wcd24
+	set 1, [hl]
+	ld [wJumptableIndex], a
+	call PlayClickSFX
+	ret
+
+.asm_11c5ab
+	ld a, [BGMapBuffer] ; wcd20 (aliases: CreditsPos)
+	call Function11ca6a
+	call PlayClickSFX
+	ret
+
+.up
+	ld a, [hl]
+	cp $3
+	ret c
+	sub $3
+	jr .asm_11c5ee
+
+.down
+	ld a, [hl]
+	cp $f
+	ret nc
+	add $3
+	jr .asm_11c5ee
+
+.left
+	ld a, [hl]
+	and a
+	ret z
+	cp $3
+	ret z
+	cp $6
+	ret z
+	cp $9
+	ret z
+	cp $c
+	ret z
+	cp $f
+	ret z
+	dec a
+	jr .asm_11c5ee
+
+.right
+	ld a, [hl]
+	cp $2
+	ret z
+	cp $5
+	ret z
+	cp $8
+	ret z
+	cp $b
+	ret z
+	cp $e
+	ret z
+	cp $11
+	ret z
+	inc a
+
+.asm_11c5ee
+	ld [hl], a
+	ret
+; 11c5f0
+
+Function11c5f0: ; 11c5f0 (47:45f0)
+	ld de, Strings_11da52
+	ld bc, Unknown_11c63a
+	ld a, $f
+.asm_11c5f8
+	push af
+	ld a, [bc]
+	inc bc
+	ld l, a
+	ld a, [bc]
+	inc bc
+	ld h, a
+	push bc
+	call PlaceString
+.asm_11c603
+	inc de
+	ld a, [de]
+	cp $50
+	jr z, .asm_11c603
+	pop bc
+	pop af
+	dec a
+	jr nz, .asm_11c5f8
+	hlcoord 1, 17
+	ld de, String_11c62a
+	call PlaceString
+	ret
+
+Function11c618: ; 11c618 (47:4618)
+	ld a, $2
+	hlcoord 0, 6, AttrMap
+	ld bc, $c8
+	call ByteFill
+	callba ReloadMapPart
+	ret
+; 11c62a (47:462a)
+
+String_11c62a: ; 11c62a
+	db "けす    モード   やめる@"
+; 11c63a
+
+Unknown_11c63a: ; 11c63a
+	dwcoord  1,  7
+	dwcoord  7,  7
+	dwcoord 13,  7
+	dwcoord  1,  9
+	dwcoord  7,  9
+	dwcoord 13,  9
+	dwcoord  1, 11
+	dwcoord  7, 11
+	dwcoord 13, 11
+	dwcoord  1, 13
+	dwcoord  7, 13
+	dwcoord 13, 13
+	dwcoord  1, 15
+	dwcoord  7, 15
+	dwcoord 13, 15
+; 11c658
+
+Function11c658: ; 11c658 (47:4658)
+	call Function11c277
+	call Function11c770
+	ld de, Unknown_11cfc2
+	call Function11d035
+	call Function11c9ab
+	call Function11c7bc
+	call Function11c86e
+	ld hl, wcd24
+	res 3, [hl]
+	call Function11cfb5
+
+Function11c675: ; 11c675 (47:4675)
+	ld hl, wcd25
+	ld de, hJoypadPressed ; $ffa3
+	ld a, [de]
+	and A_BUTTON
+	jr nz, .a
+	ld a, [de]
+	and B_BUTTON
+	jr nz, .b
+	ld a, [de]
+	and START
+	jr nz, .start
+	ld a, [de]
+	and SELECT
+	jr z, .select
+
+	ld a, [wcd26]
+	and a
+	ret z
+	sub $c
+	jr nc, .asm_11c699
+	xor a
+.asm_11c699
+	ld [wcd26], a
+	jr .asm_11c6c4
+
+.start
+	ld hl, wcd28
+	ld a, [wcd26]
+	add $c
+	cp [hl]
+	ret nc
+	ld [wcd26], a
+	ld a, [hl]
+	ld b, a
+	ld hl, wcd25
+	ld a, [wcd26]
+	add [hl]
+	jr c, .asm_11c6b9
+	cp b
+	jr c, .asm_11c6c4
+.asm_11c6b9
+	ld a, [wcd28]
+	ld hl, wcd26
+	sub [hl]
+	dec a
+	ld [wcd25], a
+.asm_11c6c4
+	call Function11c992
+	call Function11c7bc
+	call Function11c86e
+	ret
+
+.select
+	ld de, hJoyLast
+	ld a, [de]
+	and D_UP
+	jr nz, .asm_11c708
+	ld a, [de]
+	and D_DOWN
+	jr nz, .asm_11c731
+	ld a, [de]
+	and D_LEFT
+	jr nz, .asm_11c746
+	ld a, [de]
+	and D_RIGHT
+	jr nz, .asm_11c755
+	ret
+
+.a
+	call Function11c8f6
+	ld a, $4
+	ld [wcd35], a
+	jr .asm_11c6fc
+.b
+	ld a, [wcd2b]
+	and a
+	jr nz, .asm_11c6fa
+	ld a, $6
+	jr .asm_11c6fc
+.asm_11c6fa
+	ld a, $15
+.asm_11c6fc
+	ld [wJumptableIndex], a
+	ld hl, wcd24
+	set 3, [hl]
+	call PlayClickSFX
+	ret
+.asm_11c708
+	ld a, [hl]
+	cp $3
+	jr c, .asm_11c711
+	sub $3
+	jr .asm_11c76e
+.asm_11c711
+	ld a, [wcd26]
+	sub $3
+	ret c
+	ld [wcd26], a
+	jr .asm_11c6c4
+.asm_11c71c
+	ld hl, wcd28
+	ld a, [wcd26]
+	add $c
+	ret c
+	cp [hl]
+	ret nc
+	ld a, [wcd26]
+	add $3
+	ld [wcd26], a
+	jr .asm_11c6c4
+.asm_11c731
+	ld a, [wcd28]
+	ld b, a
+	ld a, [wcd26]
+	add [hl]
+	add $3
+	cp b
+	ret nc
+	ld a, [hl]
+	cp $9
+	jr nc, .asm_11c71c
+	add $3
+	jr .asm_11c76e
+.asm_11c746
+	ld a, [hl]
+	and a
+	ret z
+	cp $3
+	ret z
+	cp $6
+	ret z
+	cp $9
+	ret z
+	dec a
+	jr .asm_11c76e
+.asm_11c755
+	ld a, [wcd28]
+	ld b, a
+	ld a, [wcd26]
+	add [hl]
+	inc a
+	cp b
+	ret nc
+	ld a, [hl]
+	cp $2
+	ret z
+	cp $5
+	ret z
+	cp $8
+	ret z
+	cp $b
+	ret z
+	inc a
+.asm_11c76e
+	ld [hl], a
+	ret
+
+Function11c770: ; 11c770 (47:4770)
+	xor a
+	ld [wcd25], a
+	ld [wcd26], a
+	ld [wcd27], a
+	ld a, [wcd2b]
+	and a
+	jr nz, .asm_11c7ab
+	ld a, [wcd21]
+	and a
+	jr z, .asm_11c799
+	dec a
+	sla a
+	ld hl, Unknown_11f220
+	ld c, a
+	ld b, 0
+	add hl, bc
+	ld a, [hli]
+	ld [wcd28], a
+	ld a, [hl]
+.asm_11c795
+	ld [wcd29], a
+	ret
+.asm_11c799
+	ld a, [wc7d2]
+	ld [wcd28], a
+.asm_11c79f
+	ld c, $c
+	call SimpleDivide
+	and a
+	jr nz, .asm_11c7a8
+	dec b
+.asm_11c7a8
+	ld a, b
+	jr .asm_11c795
+.asm_11c7ab
+	ld hl, $c68a + 30
+	ld a, [CreditsTimer]
+	ld c, a
+	ld b, 0
+rept 2
+	add hl, bc
+endr
+	ld a, [hl]
+	ld [wcd28], a
+	jr .asm_11c79f
+
+Function11c7bc: ; 11c7bc (47:47bc)
+	ld bc, Unknown_11c854
+	ld a, [wcd2b]
+	and a
+	jr nz, .asm_11c814
+	ld a, [wcd21]
+	ld d, a
+	and a
+	jr z, .asm_11c7e9
+	ld a, [wcd26]
+	ld e, a
+.asm_11c7d0
+	ld a, [bc]
+	ld l, a
+	inc bc
+	ld a, [bc]
+	ld h, a
+	inc bc
+	and l
+	cp $ff
+	ret z
+	push bc
+	push de
+	call Function11c05d
+	pop de
+	pop bc
+	inc e
+	ld a, [wcd28]
+	cp e
+	jr nz, .asm_11c7d0
+	ret
+.asm_11c7e9
+	ld hl, wd100
+	ld a, [wcd26]
+	ld e, a
+	add hl, de
+.asm_11c7f1
+	push de
+	ld a, [hli]
+	ld e, a
+	ld d, $0
+	push hl
+	ld a, [bc]
+	ld l, a
+	inc bc
+	ld a, [bc]
+	ld h, a
+	inc bc
+	and l
+	cp $ff
+	jr z, .asm_11c811
+	push bc
+	call Function11c05d
+	pop bc
+	pop hl
+	pop de
+	inc e
+	ld a, [wcd28]
+	cp e
+	jr nz, .asm_11c7f1
+	ret
+.asm_11c811
+	pop hl
+	pop de
+	ret
+.asm_11c814
+	ld hl, $c648
+	ld a, [wcd22]
+	ld e, a
+	ld d, $0
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld e, a
+	ld a, [hl]
+	ld d, a
+	push de
+	pop hl
+	ld a, [wcd26]
+	ld e, a
+	ld d, $0
+rept 2
+	add hl, de
+endr
+	ld a, [wcd26]
+	ld e, a
+.asm_11c831
+	push de
+	ld a, [hli]
+	ld e, a
+	ld a, [hli]
+	ld d, a
+	push hl
+	ld a, [bc]
+	ld l, a
+	inc bc
+	ld a, [bc]
+	ld h, a
+	inc bc
+	and l
+	cp $ff
+	jr z, .asm_11c851
+	push bc
+	call Function11c05d
+	pop bc
+	pop hl
+	pop de
+	inc e
+	ld a, [wcd28]
+	cp e
+	jr nz, .asm_11c831
+	ret
+.asm_11c851
+	pop hl
+	pop de
+	ret
+; 11c854 (47:4854)
+
+Unknown_11c854: ; 11c854
+	dwcoord  2,  8
+	dwcoord  8,  8
+	dwcoord 14,  8
+	dwcoord  2, 10
+	dwcoord  8, 10
+	dwcoord 14, 10
+	dwcoord  2, 12
+	dwcoord  8, 12
+	dwcoord 14, 12
+	dwcoord  2, 14
+	dwcoord  8, 14
+	dwcoord 14, 14
+	dw -1
+; 11c86e
+
+Function11c86e: ; 11c86e (47:486e)
+	ld a, [wcd26]
+	and a
+	jr z, .asm_11c88a
+	hlcoord 2, 17
+	ld de, String_11c8f0
+	call PlaceString
+	hlcoord 6, 17
+	ld c, $3
+	xor a
+.asm_11c883
+	ld [hli], a
+	inc a
+	dec c
+	jr nz, .asm_11c883
+	jr .asm_11c895
+.asm_11c88a
+	hlcoord 2, 17
+	ld c, $7
+	ld a, $7f
+.asm_11c891
+	ld [hli], a
+	dec c
+	jr nz, .asm_11c891
+.asm_11c895
+	ld hl, wcd28
+	ld a, [wcd26]
+	add $c
+	jr c, .asm_11c8b7
+	cp [hl]
+	jr nc, .asm_11c8b7
+	hlcoord 16, 17
+	ld de, String_11c8f3
+	call PlaceString
+	hlcoord 11, 17
+	ld a, $3
+	ld c, a
+.asm_11c8b1
+	ld [hli], a
+	inc a
+	dec c
+	jr nz, .asm_11c8b1
+	ret
+.asm_11c8b7
+	hlcoord 17, 16
+	ld a, $7f
+	ld [hl], a
+	hlcoord 11, 17
+	ld c, $7
+.asm_11c8c2
+	ld [hli], a
+	dec c
+	jr nz, .asm_11c8c2
+	ret
+; 11c8c7 (47:48c7)
+
+Function11c8c7: ; 11c8c7
+	inc a
+	push af
+	and $f
+	ld [hDividend], a
+	pop af
+	and $f0
+	swap a
+	ld [hQuotient], a
+	xor a
+	ld [$ffb5], a
+	push hl
+	callba Function11a80c
+	pop hl
+	ld a, [wcd63]
+	add $f6
+	ld [hli], a
+	ld a, [wcd62]
+	add $f6
+	ld [hli], a
+	ret
+; 11c8ec
+
+String_11c8ec: ; 11c8ec
+	db "ぺージ@"
+; 11c8f0
+
+String_11c8f0: ; 11c8f0
+	db "まえ@"
+; 11c8f3
+
+String_11c8f3: ; 11c8f3
+	db "つぎ@"
+; 11c8f6
+
+Function11c8f6: ; 11c8f6 (47:48f6)
+	ld a, [BGMapBuffer] ; wcd20 (aliases: CreditsPos)
+	call Function11c95d
+	push hl
+	ld a, [wcd2b]
+	and a
+	jr nz, .asm_11c938
+	ld a, [wcd21]
+	ld d, a
+	and a
+	jr z, .asm_11c927
+	ld hl, wcd26
+	ld a, [wcd25]
+	add [hl]
+.asm_11c911
+	ld e, a
+.asm_11c912
+	pop hl
+	push de
+	call Function11c05d
+	pop de
+	ld a, [BGMapBuffer] ; wcd20 (aliases: CreditsPos)
+	ld c, a
+	ld b, $0
+	ld hl, wcd36
+rept 2
+	add hl, bc
+endr
+	ld [hl], e
+	inc hl
+	ld [hl], d
+	ret
+.asm_11c927
+	ld hl, wcd26
+	ld a, [wcd25]
+	add [hl]
+	ld c, a
+	ld b, $0
+	ld hl, wd100
+	add hl, bc
+	ld a, [hl]
+	jr .asm_11c911
+.asm_11c938
+	ld hl, $c648
+	ld a, [wcd22]
+	ld e, a
+	ld d, $0
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld e, a
+	ld a, [hl]
+	ld d, a
+	push de
+	pop hl
+	ld a, [wcd26]
+	ld e, a
+	ld d, $0
+rept 2
+	add hl, de
+endr
+	ld a, [wcd25]
+	ld e, a
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld e, a
+	ld a, [hl]
+	ld d, a
+	jr .asm_11c912
+
+Function11c95d: ; 11c95d (47:495d)
+	sla a
+	ld c, a
+	ld b, 0
+	ld hl, Unknown_11c986
+	add hl, bc
+	ld a, [hli]
+	ld c, a
+	ld a, [hl]
+	ld b, a
+	push bc
+	push bc
+	pop hl
+	ld a, $5
+	ld c, a
+	ld a, $7f
+.asm_11c972
+	ld [hli], a
+	dec c
+	jr nz, .asm_11c972
+	dec hl
+	ld bc, -20
+	add hl, bc
+	ld a, $5
+	ld c, a
+	ld a, $7f
+.asm_11c980
+	ld [hld], a
+	dec c
+	jr nz, .asm_11c980
+	pop hl
+	ret
+; 11c986 (47:4986)
+
+Unknown_11c986:
+	dwcoord  1,  2
+	dwcoord  7,  2
+	dwcoord 13,  2
+	dwcoord  1,  4
+	dwcoord  7,  4
+	dwcoord 13,  4
+; 11c992
+
+Function11c992: ; 11c992 (47:4992)
+	ld a, $8
+	hlcoord 2, 7
+.asm_11c997
+	push af
+	ld a, $7f
+	push hl
+	ld bc, $11
+	call ByteFill
+	pop hl
+	ld bc, $14
+	add hl, bc
+	pop af
+	dec a
+	jr nz, .asm_11c997
+	ret
+
+Function11c9ab: ; 11c9ab (47:49ab)
+	ld a, $7
+	hlcoord 0, 6, AttrMap
+	ld bc, $c8
+	call ByteFill
+	callba ReloadMapPart
+	ret
+
+Function11c9bd: ; 11c9bd (47:49bd)
+	ld de, String_11ca38
+	call Function11ca7f
+
+Function11c9c3: ; 11c9c3 (47:49c3)
+	ld hl, wcd2a
+	ld de, hJoypadPressed ; $ffa3
+	ld a, [de]
+	and $1
+	jr nz, .asm_11c9de
+	ld a, [de]
+	and $2
+	jr nz, .asm_11c9e9
+	ld a, [de]
+	and $40
+	jr nz, .asm_11c9f7
+	ld a, [de]
+	and $80
+	jr nz, .asm_11c9fc
+	ret
+.asm_11c9de
+	ld a, [hl]
+	and a
+	jr nz, .asm_11c9e9
+	call Function11ca5e
+	xor a
+	ld [BGMapBuffer], a ; wcd20 (aliases: CreditsPos)
+.asm_11c9e9
+	ld hl, wcd24
+	set 4, [hl]
+	ld a, $4
+	ld [wJumptableIndex], a
+	call PlayClickSFX
+	ret
+.asm_11c9f7
+	ld a, [hl]
+	and a
+	ret z
+	dec [hl]
+	ret
+.asm_11c9fc
+	ld a, [hl]
+	and a
+	ret nz
+	inc [hl]
+	ret
+
+Function11ca01: ; 11ca01 (47:4a01)
+	hlcoord 14, 7, AttrMap
+	ld de, $14
+	ld a, $5
+	ld c, a
+.asm_11ca0a
+	push hl
+	ld a, $6
+	ld b, a
+	ld a, $7
+.asm_11ca10
+	ld [hli], a
+	dec b
+	jr nz, .asm_11ca10
+	pop hl
+	add hl, de
+	dec c
+	jr nz, .asm_11ca0a
+
+Function11ca19: ; 11ca19 (47:4a19)
+	hlcoord 0, 12, AttrMap
+	ld de, $14
+	ld a, $6
+	ld c, a
+.asm_11ca22
+	push hl
+	ld a, $14
+	ld b, a
+	ld a, $7
+.asm_11ca28
+	ld [hli], a
+	dec b
+	jr nz, .asm_11ca28
+	pop hl
+	add hl, de
+	dec c
+	jr nz, .asm_11ca22
+	callba ReloadMapPart
+	ret
+; 11ca38 (47:4a38)
+
+String_11ca38: ; 11ca38
+	db   "とうろくちゅう", $25, "あいさつ¯ぜんぶ"
+	next "けしても よろしいですか?@"
+; 11ca57
+
+String_11ca57: ; 11ca57
+	db   "はい"
+	next "いいえ@"
+; 11ca5e
+
+Function11ca5e: ; 11ca5e (47:4a5e)
+	xor a
+.asm_11ca5f
+	push af
+	call Function11ca6a
+	pop af
+	inc a
+	cp $6
+	jr nz, .asm_11ca5f
+	ret
+
+Function11ca6a: ; 11ca6a (47:4a6a)
+	ld hl, wcd36
+	ld c, a
+	ld b, $0
+rept 2
+	add hl, bc
+endr
+	ld [hl], b
+	inc hl
+	ld [hl], b
+	call Function11c95d
+	ld de, String_11c3bc
+	call PlaceString
+	ret
+
+Function11ca7f: ; 11ca7f (47:4a7f)
+	push de
+	ld de, Unknown_11cfc6
+	call Function11cfce
+	ld de, Unknown_11cfca
+	call Function11cfce
+	hlcoord 1, 14
+	pop de
+	call PlaceString
+	hlcoord 16, 8
+	ld de, String_11ca57
+	call PlaceString
+	call Function11ca01
+	ld a, $1
+	ld [wcd2a], a
+	ld hl, wcd24
+	res 4, [hl]
+	call Function11cfb5
+	ret
+
+Function11caad: ; 11caad (47:4aad)
+	ld de, String_11cb1c
+	call Function11ca7f
+
+Function11cab3: ; 11cab3 (47:4ab3)
+	ld hl, wcd2a
+	ld de, hJoypadPressed ; $ffa3
+	ld a, [de]
+	and $1
+	jr nz, .asm_11cace
+	ld a, [de]
+	and $2
+	jr nz, .asm_11caf9
+	ld a, [de]
+	and $40
+	jr nz, .asm_11cb12
+	ld a, [de]
+	and $80
+	jr nz, .asm_11cb17
+	ret
+.asm_11cace
+	call PlayClickSFX
+	ld a, [hl]
+	and a
+	jr nz, .asm_11cafc
+	ld a, [wcd35]
+	and a
+	jr z, .asm_11caf3
+	cp $ff
+	jr z, .asm_11caf3
+	ld a, $ff
+	ld [wcd35], a
+	hlcoord 1, 14
+	ld de, String_11cb31
+	call PlaceString
+	ld a, $1
+	ld [wcd2a], a
+	ret
+.asm_11caf3
+	ld hl, wJumptableIndex
+	set 7, [hl]
+	ret
+.asm_11caf9
+	call PlayClickSFX
+.asm_11cafc
+	ld hl, wcd24
+	set 4, [hl]
+	ld a, $4
+	ld [wJumptableIndex], a
+	ld a, [wcd35]
+	cp $ff
+	ret nz
+	ld a, $1
+	ld [wcd35], a
+	ret
+.asm_11cb12
+	ld a, [hl]
+	and a
+	ret z
+	dec [hl]
+	ret
+.asm_11cb17
+	ld a, [hl]
+	and a
+	ret nz
+	inc [hl]
+	ret
+; 11cb1c (47:4b1c)
+
+String_11cb1c: ; 11cb1c
+	db   "あいさつ", $25, "とうろく¯ちゅうし"
+	next "しますか?@"
+; 11cb31
+
+String_11cb31: ; 11cb31
+	db   "とうろくちゅう", $25, "あいさつ", $24, "ほぞん"
+	next "されません", $4a, "よろしい ですか?@"
+; 11cb52
+
+Function11cb52: ; 11cb52 (47:4b52)
+	ld hl, Unknown_11cc01
+	ld a, [MenuSelection2]
+.asm_11cb58
+	dec a
+	jr z, .asm_11cb5f
+rept 2
+	inc hl
+endr
+	jr .asm_11cb58
+.asm_11cb5f
+	ld a, [hli]
+	ld e, a
+	ld a, [hl]
+	ld d, a
+	call Function11ca7f
+
+Function11cb66: ; 11cb66 (47:4b66)
+	ld hl, wcd2a
+	ld de, hJoypadPressed ; $ffa3
+	ld a, [de]
+	and $1
+	jr nz, .asm_11cb81
+	ld a, [de]
+	and $2
+	jr nz, .asm_11cbd7
+	ld a, [de]
+	and $40
+	jr nz, .asm_11cbeb
+	ld a, [de]
+	and $80
+	jr nz, .asm_11cbf0
+	ret
+.asm_11cb81
+	ld a, [hl]
+	and a
+	jr nz, .asm_11cbd4
+	ld a, $4
+	call GetSRAMBank
+	ld hl, $a007
+	ld a, [MenuSelection2]
+	dec a
+	sla a
+	sla a
+	ld c, a
+	sla a
+	add c
+	ld c, a
+	ld b, $0
+	add hl, bc
+	ld de, wcd36
+	ld c, $c
+.asm_11cba2
+	ld a, [de]
+	ld [hli], a
+	inc de
+	dec c
+	jr nz, .asm_11cba2
+	call CloseSRAM
+	call PlayClickSFX
+	ld de, Unknown_11cfc6
+	call Function11cfce
+	ld hl, Unknown_11cc7e
+	ld a, [MenuSelection2]
+.asm_11cbba
+	dec a
+	jr z, .asm_11cbc1
+rept 2
+	inc hl
+endr
+	jr .asm_11cbba
+.asm_11cbc1
+	ld a, [hli]
+	ld e, a
+	ld a, [hl]
+	ld d, a
+	hlcoord 1, 14
+	call PlaceString
+	ld hl, wJumptableIndex
+	inc [hl]
+	inc hl
+	ld a, $10
+	ld [hl], a
+	ret
+.asm_11cbd4
+	call PlayClickSFX
+.asm_11cbd7
+	ld de, Unknown_11cfba
+	call Function11cfce
+	call Function11c38a
+	ld hl, wcd24
+	set 4, [hl]
+	ld a, $4
+	ld [wJumptableIndex], a
+	ret
+.asm_11cbeb
+	ld a, [hl]
+	and a
+	ret z
+	dec [hl]
+	ret
+.asm_11cbf0
+	ld a, [hl]
+	and a
+	ret nz
+	inc [hl]
+	ret
+
+Function11cbf5: ; 11cbf5 (47:4bf5)
+	call WaitSFX
+	ld hl, wcf64
+	dec [hl]
+	ret nz
+	dec hl
+	set 7, [hl]
+	ret
+; 11cc01 (47:4c01)
+
+Unknown_11cc01: ; 11cc01
+	dw String_11cc09
+	dw String_11cc23
+	dw String_11cc42
+	dw String_11cc60
+
+String_11cc09: ; 11cc09
+	db   "じこしょうかい は"
+	next "この あいさつで いいですか?@"
+
+String_11cc23: ; 11cc23
+	db   "たいせん ", $4a, "はじまるとき は"
+	next "この あいさつで いいですか?@"
+
+String_11cc42: ; 11cc42
+	db   "たいせん ", $1d, "かったとき は"
+	next "この あいさつで いいですか?@"
+
+String_11cc60: ; 11cc60
+	db   "たいせん ", $1d, "まけたとき は"
+	next "この あいさつで いいですか?@"
+; 11cc7e
+
+Unknown_11cc7e: ; 11cc7e
+	dw String_11cc86
+	dw String_11cc9d
+	dw String_11ccb9
+	dw String_11ccd4
+
+String_11cc86: ; 11cc86
+	db   "じこしょうかい の"
+	next "あいさつ¯とうろくした!@"
+
+String_11cc9d: ; 11cc9d
+	db   "たいせん ", $4a, "はじまるとき の"
+	next "あいさつ¯とうろくした!@"
+
+String_11ccb9: ; 11ccb9
+	db   "たいせん ", $1d, "かったとき の"
+	next "あいさつ¯とうろくした!@"
+
+String_11ccd4: ; 11ccd4
+	db   "たいせん ", $1d, "まけたとき の"
+	next "あいさつ¯とうろくした!@"
+; 11ccef
+
+Function11ccef: ; 11ccef (47:4cef)
+	ld de, Unknown_11cfc6
+	call Function11cfce
+	hlcoord 1, 14
+	ld de, String_11cd10
+	call PlaceString
+	call Function11ca19
+	call Function11cfb5
+
+Function11cd04: ; 11cd04 (47:4d04)
+	ld de, hJoypadPressed ; $ffa3
+	ld a, [de]
+	and a
+	ret z
+	ld a, $4
+	ld [wJumptableIndex], a
+	ret
+; 11cd10 (47:4d10)
+
+String_11cd10: ; 11cd10
+	db "なにか ことば¯いれてください@"
+; 11cd20
+
+Function11cd20: ; 11cd20 (47:4d20)
+	call Function11c277
+	ld de, Unknown_11cfc6
+	call Function11cfce
+	hlcoord 1, 14
+	ld a, [wcd2b]
+	ld [wcd2c], a
+	and a
+	jr nz, .asm_11cd3a
+	ld de, String_11cdc7
+	jr .asm_11cd3d
+.asm_11cd3a
+	ld de, String_11cdd9
+.asm_11cd3d
+	call PlaceString
+	hlcoord 4, 8
+	ld de, String_11cdf5
+	call PlaceString
+	call Function11cdaa
+	ld hl, wcd24
+	res 5, [hl]
+	call Function11cfb5
+
+Function11cd54: ; 11cd54 (47:4d54)
+	ld hl, wcd2c
+	ld de, hJoypadPressed ; $ffa3
+	ld a, [de]
+	and A_BUTTON
+	jr nz, .asm_11cd6f
+	ld a, [de]
+	and B_BUTTON
+	jr nz, .asm_11cd73
+	ld a, [de]
+	and D_UP
+	jr nz, .asm_11cd8b
+	ld a, [de]
+	and D_DOWN
+	jr nz, .asm_11cd94
+	ret
+
+.asm_11cd6f
+	ld a, [hl]
+	ld [wcd2b], a
+.asm_11cd73
+	ld a, [wcd2b]
+	and a
+	jr nz, .asm_11cd7d
+	ld a, $6
+	jr .asm_11cd7f
+
+.asm_11cd7d
+	ld a, $15
+.asm_11cd7f
+	ld [wJumptableIndex], a
+	ld hl, wcd24
+	set 5, [hl]
+	call PlayClickSFX
+	ret
+
+.asm_11cd8b
+	ld a, [hl]
+	and a
+	ret z
+	dec [hl]
+	ld de, String_11cdc7
+	jr .asm_11cd9b
+
+.asm_11cd94
+	ld a, [hl]
+	and a
+	ret nz
+	inc [hl]
+	ld de, String_11cdd9
+.asm_11cd9b
+	push de
+	ld de, Unknown_11cfc6
+	call Function11cfce
+	pop de
+	hlcoord 1, 14
+	call PlaceString
+	ret
+
+Function11cdaa: ; 11cdaa (47:4daa)
+	ld a, $2
+	hlcoord 0, 6, AttrMap
+	ld bc, 6 * SCREEN_WIDTH
+	call ByteFill
+	ld a, $7
+	hlcoord 0, 12, AttrMap
+	ld bc, 4 * SCREEN_WIDTH
+	call ByteFill
+	callba ReloadMapPart
+	ret
+; 11cdc7 (47:4dc7)
+
+String_11cdc7: ; 11cdc7
+; Words will be displayed by category
+	db   "ことば¯しゅるいべつに"
+	next "えらべます@"
+; 11cdd9
+
+String_11cdd9: ; 11cdd9
+; Words will be displayed in alphabetical order
+	db   "ことば¯アイウエォ の"
+	next "じゅんばんで ひょうじ します@"
+; 11cdf5
+
+String_11cdf5: ; 11cdf5
+	db   "しゅるいべつ モード"  ; Category mode
+	next "アイウエォ  モード@" ; ABC mode
+; 11ce0b
+
+Function11ce0b: ; 11ce0b (47:4e0b)
+	call Function11c277
+	hlcoord 1, 7
+	ld de, String_11cf79
+	call PlaceString
+	hlcoord 1, 17
+	ld de, String_11c62a
+	call PlaceString
+	call Function11c618
+	ld hl, wcd24
+	res 2, [hl]
+	call Function11cfb5
+
+Function11ce2b: ; 11ce2b (47:4e2b)
+	ld a, [CreditsTimer]
+	sla a
+	sla a
+	ld c, a
+	ld b, 0
+	ld hl, Unknown_11ceb9
+	add hl, bc
+
+	ld de, hJoypadPressed ; $ffa3
+	ld a, [de]
+	and START
+	jr nz, .start
+	ld a, [de]
+	and SELECT
+	jr nz, .select
+	ld a, [de]
+	and A_BUTTON
+	jr nz, .a
+	ld a, [de]
+	and B_BUTTON
+	jr nz, .b
+
+	ld de, hJoyLast
+	ld a, [de]
+	and D_UP
+	jr nz, .up
+	ld a, [de]
+	and D_DOWN
+	jr nz, .down
+	ld a, [de]
+	and D_LEFT
+	jr nz, .left
+	ld a, [de]
+	and D_RIGHT
+	jr nz, .right
+
+	ret
+
+.a
+	ld a, [CreditsTimer]
+	cp NUM_KANA
+	jr c, .place
+	sub NUM_KANA
+	jr z, .asm_11cea4
+	dec a
+	jr z, .asm_11ce96
+	jr .b
+
+.start
+	ld hl, wcd24
+	set 0, [hl]
+	ld a, $8
+	ld [BGMapBuffer], a ; wcd20 (aliases: CreditsPos)
+.b
+	ld a, $4
+	jr .load
+
+.select
+	ld a, [wcd2b]
+	xor $1
+	ld [wcd2b], a
+	ld a, $6
+	jr .load
+
+.place
+	ld a, $8
+	jr .load
+
+.asm_11ce96
+	ld a, $13
+.load
+	ld [wJumptableIndex], a
+	ld hl, wcd24
+	set 2, [hl]
+	call PlayClickSFX
+	ret
+
+.asm_11cea4
+	ld a, [BGMapBuffer] ; wcd20 (aliases: CreditsPos)
+	call Function11ca6a
+	call PlayClickSFX
+	ret
+
+.left
+	inc hl
+.down
+	inc hl
+.right
+	inc hl
+.up
+	ld a, [hl]
+	cp $ff
+	ret z
+	ld [CreditsTimer], a
+	ret
+; 11ceb9 (47:4eb9)
+
+Unknown_11ceb9: ; 11ceb9
+	; up left down right
+	db $ff, $01, $05, $ff
+	db $ff, $02, $06, $00
+	db $ff, $03, $07, $01
+	db $ff, $04, $08, $02
+	db $ff, $14, $09, $03
+	db $00, $06, $0a, $ff
+	db $01, $07, $0b, $05
+	db $02, $08, $0c, $06
+	db $03, $09, $0d, $07
+	db $04, $19, $0e, $08
+	db $05, $0b, $0f, $ff
+	db $06, $0c, $10, $0a
+	db $07, $0d, $11, $0b
+	db $08, $0e, $12, $0c
+	db $09, $1e, $13, $0d
+	db $0a, $10, $2d, $ff
+	db $0b, $11, $2d, $0f
+	db $0c, $12, $2d, $10
+	db $0d, $13, $2d, $11
+	db $0e, $26, $2d, $12
+	db $ff, $15, $19, $04
+	db $ff, $16, $1a, $14
+	db $ff, $17, $1b, $15
+	db $ff, $18, $1c, $16
+	db $ff, $23, $1d, $17
+	db $14, $1a, $1e, $09
+	db $15, $1b, $1f, $19
+	db $16, $1c, $20, $1a
+	db $17, $1d, $21, $1b
+	db $18, $2b, $22, $1c
+	db $19, $1f, $26, $0e
+	db $1a, $20, $27, $1e
+	db $1b, $21, $28, $1f
+	db $1c, $22, $29, $20
+	db $1d, $2c, $2a, $21
+	db $ff, $24, $2b, $18
+	db $ff, $25, $2b, $23
+	db $ff, $ff, $2b, $24
+	db $1e, $27, $2e, $13
+	db $1f, $28, $2e, $26
+	db $20, $29, $2e, $27
+	db $21, $2a, $2e, $28
+	db $22, $ff, $2e, $29
+	db $23, $ff, $2c, $1d
+	db $2b, $ff, $2f, $22
+	db $0f, $2e, $ff, $ff
+	db $26, $2f, $ff, $2d
+	db $2c, $ff, $ff, $2e
+; 11cf79
+
+String_11cf79: ; 11cf79
+; Hiragana table
+	db   "あいうえお なにぬねの や ゆ よ"
+	next "かきくけこ はひふへほ わ"
+	next "さしすせそ まみむめも そのた"
+	next "たちつてと らりるれろ"
+	db   "@"
+; 11cfb5
+
+Function11cfb5: ; 11cfb5 (47:4fb5)
+	ld hl, wJumptableIndex
+	inc [hl]
+	ret
+; 11cfba (47:4fba)
+
+Unknown_11cfba:
+	db  0,  0 ; start coords
+	db 20,  6 ; end coords
+
+Unknown_11cfbe:
+	db  0, 14 ; start coords
+	db 20,  4 ; end coords
+
+Unknown_11cfc2:
+	db  0,  6 ; start coords
+	db 20, 10 ; end coords
+
+Unknown_11cfc6:
+	db  0, 12 ; start coords
+	db 20,  6 ; end coords
+
+Unknown_11cfca:
+	db 14,  7 ; start coords
+	db  6,  5 ; end coords
+; 11cfce
+
+Function11cfce: ; 11cfce (47:4fce)
+	hlcoord 0, 0
+	ld bc, $14
+	ld a, [de]
+	inc de
+	push af
+	ld a, [de]
+	inc de
+	and a
+.asm_11cfda
+	jr z, .asm_11cfe0
+	add hl, bc
+	dec a
+	jr .asm_11cfda
+.asm_11cfe0
+	pop af
+	ld c, a
+	ld b, 0
+	add hl, bc
+	push hl
+	ld a, $79
+	ld [hli], a
+	ld a, [de]
+	inc de
+rept 2
+	dec a
+endr
+	jr z, .asm_11cff6
+	ld c, a
+	ld a, $7a
+.asm_11cff2
+	ld [hli], a
+	dec c
+	jr nz, .asm_11cff2
+.asm_11cff6
+	ld a, $7b
+	ld [hl], a
+	pop hl
+	ld bc, $14
+	add hl, bc
+	ld a, [de]
+	dec de
+rept 2
+	dec a
+endr
+	jr z, .asm_11d022
+	ld b, a
+.asm_11d005
+	push hl
+	ld a, $7c
+	ld [hli], a
+	ld a, [de]
+rept 2
+	dec a
+endr
+	jr z, .asm_11d015
+	ld c, a
+	ld a, $7f
+.asm_11d011
+	ld [hli], a
+	dec c
+	jr nz, .asm_11d011
+.asm_11d015
+	ld a, $7c
+	ld [hl], a
+	pop hl
+	push bc
+	ld bc, $14
+	add hl, bc
+	pop bc
+	dec b
+	jr nz, .asm_11d005
+.asm_11d022
+	ld a, $7d
+	ld [hli], a
+	ld a, [de]
+rept 2
+	dec a
+endr
+	jr z, .asm_11d031
+	ld c, a
+	ld a, $7a
+.asm_11d02d
+	ld [hli], a
+	dec c
+	jr nz, .asm_11d02d
+.asm_11d031
+	ld a, $7e
+	ld [hl], a
+	ret
+
+Function11d035: ; 11d035 (47:5035)
+	hlcoord 0, 0
+	ld bc, $14
+	ld a, [de]
+	inc de
+	push af
+	ld a, [de]
+	inc de
+	and a
+.asm_11d041
+	jr z, .asm_11d047
+	add hl, bc
+	dec a
+	jr .asm_11d041
+.asm_11d047
+	pop af
+	ld c, a
+	ld b, $0
+	add hl, bc
+	push hl
+	ld a, $79
+	ld [hl], a
+	pop hl
+	push hl
+	ld a, [de]
+	dec a
+	inc de
+	ld c, a
+	add hl, bc
+	ld a, $7b
+	ld [hl], a
+	call Function11d0ac
+	ld a, $7e
+	ld [hl], a
+	pop hl
+	push hl
+	call Function11d0ac
+	ld a, $7d
+	ld [hl], a
+	pop hl
+	push hl
+	inc hl
+	push hl
+	call Function11d0ac
+	pop bc
+	dec de
+	ld a, [de]
+	cp $2
+	jr z, .asm_11d082
+rept 2
+	dec a
+endr
+.asm_11d078
+	push af
+	ld a, $7a
+	ld [hli], a
+	ld [bc], a
+	inc bc
+	pop af
+	dec a
+	jr nz, .asm_11d078
+.asm_11d082
+	pop hl
+	ld bc, $14
+	add hl, bc
+	push hl
+	ld a, [de]
+	dec a
+	ld c, a
+	ld b, $0
+	add hl, bc
+	pop bc
+	inc de
+	ld a, [de]
+	cp $2
+	ret z
+	push bc
+rept 2
+	dec a
+endr
+	ld c, a
+	ld b, a
+	ld de, $14
+.asm_11d09c
+	ld a, $7c
+	ld [hl], a
+	add hl, de
+	dec c
+	jr nz, .asm_11d09c
+	pop hl
+.asm_11d0a4
+	ld a, $7c
+	ld [hl], a
+	add hl, de
+	dec b
+	jr nz, .asm_11d0a4
+	ret
+
+Function11d0ac: ; 11d0ac (47:50ac)
+	ld a, [de]
+	dec a
+	ld bc, $14
+.asm_11d0b1
+	add hl, bc
+	dec a
+	jr nz, .asm_11d0b1
+	ret
+
+Function11d0b6: ; 11d0b6 (47:50b6)
+	ld hl, $c
+	add hl, bc
+	ld a, [hl]
+	ld e, a
+	ld d, 0
+	ld hl, Jumptable_11d0c7
+rept 2
+	add hl, de
+endr
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	jp [hl]
+
+Jumptable_11d0c7: ; 11d0c7 (47:50c7)
+	dw Function11d0dd
+	dw Function11d0e9
+	dw Function11d0f5
+	dw Function11d10f
+	dw Function11d134
+	dw Function11d145
+	dw Function11d156
+	dw Function11d175
+	dw Function11d1d7
+	dw Function11d1d1
+	dw Function11d1fc
+
+
+Function11d0dd: ; 11d0dd (47:50dd)
+	ld a, [BGMapBuffer] ; wcd20 (aliases: CreditsPos)
+	sla a
+	ld hl, Unknown_11d208
+	ld e, $1
+	jr asm_11d11e
+
+Function11d0e9: ; 11d0e9 (47:50e9)
+	ld a, [wcd21]
+	sla a
+	ld hl, Unknown_11d21a
+	ld e, $2
+	jr asm_11d11e
+
+Function11d0f5: ; 11d0f5 (47:50f5)
+	ld hl, Unknown_11d2be
+	ld a, [CreditsTimer]
+	ld e, a
+	ld d, $0
+	add hl, de
+	ld a, [hl]
+	call Function3b3c
+	ld a, [CreditsTimer]
+	sla a
+	ld hl, Unknown_11d23e
+	ld e, $4
+	jr asm_11d11e
+
+Function11d10f: ; 11d10f (47:510f)
+	ld a, $27
+	call Function3b3c
+	ld a, [wcd25]
+	sla a
+	ld hl, Unknown_11d29e
+	ld e, $8
+
+asm_11d11e: ; 11d11e (47:511e)
+	push de
+	ld e, a
+	ld d, $0
+	add hl, de
+	push hl
+	pop de
+	ld hl, $4
+	add hl, bc
+	ld a, [de]
+	inc de
+	ld [hli], a
+	ld a, [de]
+	ld [hl], a
+	pop de
+	ld a, e
+	call Function11d2ee
+	ret
+
+Function11d134: ; 11d134 (47:5134)
+	ld a, $27
+	call Function3b3c
+	ld a, [wcd2a]
+	sla a
+	ld hl, Unknown_11d2b6
+	ld e, $10
+	jr asm_11d11e
+
+Function11d145: ; 11d145 (47:5145)
+	ld a, $27
+	call Function3b3c
+	ld a, [wcd2c]
+	sla a
+	ld hl, Unknown_11d2ba
+	ld e, $20
+	jr asm_11d11e
+
+Function11d156: ; 11d156 (47:5156)
+	ld a, $2a
+	call Function3b3c
+	ld a, [wcd4a]
+	sla a
+	sla a
+	sla a
+	add $18
+	ld hl, $4
+	add hl, bc
+	ld [hli], a
+	ld a, $30
+	ld [hl], a
+	ld a, $1
+	ld e, a
+	call Function11d2ee
+	ret
+
+Function11d175: ; 11d175 (47:5175)
+	ld a, [wcd4d]
+	cp $4
+	jr z, .asm_11d180
+	ld a, $28
+	jr .asm_11d182
+.asm_11d180
+	ld a, $26
+.asm_11d182
+	call Function3b3c
+	ld a, [wcd4d]
+	cp $4
+	jr z, .asm_11d1b1
+	ld a, [wcd4c]
+	sla a
+	sla a
+	sla a
+	add $20
+	ld hl, $4
+	add hl, bc
+	ld [hli], a
+	ld a, [wcd4d]
+	sla a
+	sla a
+	sla a
+	sla a
+	add $48
+	ld [hl], a
+	ld a, $2
+	ld e, a
+	call Function11d2ee
+	ret
+.asm_11d1b1
+	ld a, [wcd4c]
+	sla a
+	sla a
+	sla a
+	ld e, a
+	sla a
+	sla a
+	add e
+	add $18
+	ld hl, $4
+	add hl, bc
+	ld [hli], a
+	ld a, $8a
+	ld [hl], a
+	ld a, $2
+	ld e, a
+	call Function11d2ee
+	ret
+
+Function11d1d1: ; 11d1d1 (47:51d1)
+	ld d, $98
+	ld a, $2c
+	jr asm_11d1db
+
+Function11d1d7: ; 11d1d7 (47:51d7)
+	ld d, $10
+	ld a, $2b
+
+asm_11d1db: ; 11d1db (47:51db)
+	push de
+	call Function3b3c
+	ld a, [wcd4a]
+	sla a
+	sla a
+	sla a
+	ld e, a
+	sla a
+	add e
+	add $40
+	ld hl, $5
+	add hl, bc
+	ld [hld], a
+	pop af
+	ld [hl], a
+	ld a, $4
+	ld e, a
+	call Function11d2ee
+	ret
+
+Function11d1fc: ; 11d1fc (47:51fc)
+	ld a, $26
+	call Function3b3c
+	ld a, $8
+	ld e, a
+	call Function11d2ee
+	ret
+; 11d208 (47:5208)
+
+Unknown_11d208: ; 11d208
+	db $0d, $1a
+	db $3d, $1a
+	db $6d, $1a
+	db $0d, $2a
+	db $3d, $2a
+	db $6d, $2a
+	db $0d, $8a
+	db $3d, $8a
+	db $6d, $8a
+
+Unknown_11d21a: ; 11d21a
+	db $0d, $42
+	db $3d, $42
+	db $6d, $42
+	db $0d, $52
+	db $3d, $52
+	db $6d, $52
+	db $0d, $62
+	db $3d, $62
+	db $6d, $62
+	db $0d, $72
+	db $3d, $72
+	db $6d, $72
+	db $0d, $82
+	db $3d, $82
+	db $6d, $82
+	db $0d, $92
+	db $3d, $92
+	db $6d, $92
+
+Unknown_11d23e: ; 11d23e
+	db $10, $48
+	db $18, $48
+	db $20, $48
+	db $28, $48
+	db $30, $48
+	db $10, $58
+	db $18, $58
+	db $20, $58
+	db $28, $58
+	db $30, $58
+	db $10, $68
+	db $18, $68
+	db $20, $68
+	db $28, $68
+	db $30, $68
+	db $10, $78
+	db $18, $78
+	db $20, $78
+	db $28, $78
+	db $30, $78
+	db $40, $48
+	db $48, $48
+	db $50, $48
+	db $58, $48
+	db $60, $48
+	db $40, $58
+	db $48, $58
+	db $50, $58
+	db $58, $58
+	db $60, $58
+	db $40, $68
+	db $48, $68
+	db $50, $68
+	db $58, $68
+	db $60, $68
+	db $70, $48
+	db $80, $48
+	db $90, $48
+	db $40, $78
+	db $48, $78
+	db $50, $78
+	db $58, $78
+	db $60, $78
+	db $70, $58
+	db $70, $68
+	db $0d, $92
+	db $3d, $92
+	db $6d, $92
+
+Unknown_11d29e: ; 11d29e
+	db $10, $50
+	db $40, $50
+	db $70, $50
+	db $10, $60
+	db $40, $60
+	db $70, $60
+	db $10, $70
+	db $40, $70
+	db $70, $70
+	db $10, $80
+	db $40, $80
+	db $70, $80
+
+Unknown_11d2b6: ; 11d2b6
+	db $80, $50
+	db $80, $60
+
+Unknown_11d2ba: ; 11d2ba
+	db $20, $50
+	db $20, $60
+
+Unknown_11d2be: ; 11d2be
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $28, $28
+	db $29, $26
+	db $26, $26
+
+Function11d2ee: ; 11d2ee (47:52ee)
+	ld hl, wcd24
+	and [hl]
+	jr nz, .asm_11d316
+	ld a, e
+	ld hl, wcd23
+	and [hl]
+	jr z, .asm_11d30f
+	ld hl, $e
+	add hl, bc
+	ld a, [hl]
+	and a
+	jr z, .asm_11d305
+	dec [hl]
+	ret
+.asm_11d305
+	ld a, $0
+	ld [hld], a
+	ld a, $1
+	xor [hl]
+	ld [hl], a
+	and a
+	jr nz, .asm_11d316
+.asm_11d30f
+	ld hl, $7
+	add hl, bc
+	xor a
+	ld [hl], a
+	ret
+.asm_11d316
+	ld hl, $5
+	add hl, bc
+	ld a, $b0
+	sub [hl]
+	ld hl, $7
+	add hl, bc
+	ld [hl], a
+	ret
+
+Function11d323: ; 11d323
+	ld a, [rSVBK]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	ld hl, Palette_11d33a
+	ld de, UnknBGPals
+	ld bc, 16 * 8
+	call CopyBytes
+	pop af
+	ld [rSVBK], a
+	ret
+; 11d33a
+
+Palette_11d33a:
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 31, 16, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 23, 17, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 31, 31, 31
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+	RGB 00, 00, 00
+
+; 11d3ba
+
+Function11d3ba: ; 11d3ba
+	ld a, [rSVBK]
+	push af
+	ld hl, $c648
+	ld a, w5_d800 % $100
+	ld [wcd2d], a
+	ld [hli], a
+	ld a, w5_d800 / $100
+	ld [wcd2e], a
+	ld [hl], a
+
+	ld a, SortedPokemon % $100
+	ld [wcd2f], a
+	ld a, SortedPokemon / $100
+	ld [wcd30], a
+
+	ld a, $c6a8 % $100
+	ld [wcd31], a
+	ld a, $c6a8 / $100
+	ld [wcd32], a
+
+	ld a, $c64a % $100
+	ld [wcd33], a
+	ld a, $c64a / $100
+	ld [wcd34], a
+
+	ld hl, Unknown_11f23c
+	ld a, (Unknown_11f23cEnd - Unknown_11f23c) / 4
+
+.MasterLoop: ; 11d3ef
+	push af
+; read row
+	ld a, [hli]
+	ld e, a
+	ld a, [hli]
+	ld d, a
+	ld a, [hli]
+	ld c, a
+	ld a, [hli]
+	ld b, a
+; save the pointer to the next row
+	push hl
+; add de to hl
+	ld hl, w3_d000
+	add hl, de
+; recover de from wcd2d (default: w5_d800)
+	ld a, [wcd2d]
+	ld e, a
+	ld a, [wcd2e]
+	ld d, a
+; save bc for later
+	push bc
+
+.loop1
+; copy 2*bc bytes from 3:hl to 5:de
+	ld a, $3
+	ld [rSVBK], a
+	ld a, [hli]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	pop af
+	ld [de], a
+	inc de
+
+	ld a, $3
+	ld [rSVBK], a
+	ld a, [hli]
+	push af
+	ld a, $5
+	ld [rSVBK], a
+	pop af
+	ld [de], a
+	inc de
+
+	dec bc
+	ld a, c
+	or b
+	jr nz, .loop1
+; recover the pointer from wcd2f (default: SortedPokemon)
+	ld a, [wcd2f]
+	ld l, a
+	ld a, [wcd30]
+	ld h, a
+; copy the pointer from [hl] to bc
+	ld a, [hli]
+	ld c, a
+	ld a, [hli]
+	ld b, a
+; store the pointer to the next pointer back in wcd2f
+	ld a, l
+	ld [wcd2f], a
+	ld a, h
+	ld [wcd30], a
+; push pop that pointer to hl
+	push bc
+	pop hl
+	ld c, $0
+.loop2
+; Have you seen this Pokemon?
+	ld a, [hl]
+	cp $ff
+	jr z, .done
+	call .CheckSeenMon
+	jr nz, .next
+; If not, skip it.
+	inc hl
+	jr .loop2
+
+.next
+; If so, append it to the list at 5:de, and increase the count.
+	ld a, [hli]
+	ld [de], a
+	inc de
+	xor a
+	ld [de], a
+	inc de
+	inc c
+	jr .loop2
+
+.done
+; Remember the original value of bc from the table?
+; Well, the stack remembers it, and it's popping it to hl.
+	pop hl
+; Add the number of seen Pokemon from the list.
+	ld b, $0
+	add hl, bc
+; Push pop to bc.
+	push hl
+	pop bc
+; Load the pointer from [wcd31] (default: $c6a8)
+	ld a, [wcd31]
+	ld l, a
+	ld a, [wcd32]
+	ld h, a
+; Save the quantity from bc to [hl]
+	ld a, c
+	ld [hli], a
+	ld a, b
+	ld [hli], a
+; Save the new value of hl to [wcd31]
+	ld a, l
+	ld [wcd31], a
+	ld a, h
+	ld [wcd32], a
+; Recover the pointer from [wcd33] (default: $c64a)
+	ld a, [wcd33]
+	ld l, a
+	ld a, [wcd34]
+	ld h, a
+; Save the current value of de there
+	ld a, e
+	ld [wcd2d], a
+	ld [hli], a
+	ld a, d
+	ld [wcd2e], a
+; Save the new value of hl back to [wcd33]
+	ld [hli], a
+	ld a, l
+	ld [wcd33], a
+	ld a, h
+	ld [wcd34], a
+; Next row
+	pop hl
+	pop af
+	dec a
+	jr z, .ExitMasterLoop
+	jp .MasterLoop
+
+.ExitMasterLoop
+	pop af
+	ld [rSVBK], a
+	ret
+; 11d493
+
+.CheckSeenMon: ; 11d493
+	push hl
+	push bc
+	push de
+	dec a
+	ld hl, rSVBK
+	ld e, $1
+	ld [hl], e
+	call CheckSeenMon
+	ld hl, rSVBK
+	ld e, $5
+	ld [hl], e
+	pop de
+	pop bc
+	pop hl
+	ret
+; 11d4aa
+
+Function11d4aa: ; 11d4aa
+	ld a, [rSVBK]
+	push af
+	ld a, $3
+	ld [rSVBK], a
+	ld hl, Unknown_11daac
+	ld bc, Unknown_11f220
+	xor a
+	ld [wcd2d], a
+	inc a
+	ld [wcd2e], a
+	ld a, $e
+.asm_11d4c1
+	push af
+	ld a, [hli]
+	ld e, a
+	ld a, [hli]
+	ld d, a
+	push hl
+	ld hl, $0005
+	add hl, de
+	ld a, [bc]
+rept 2
+	inc bc
+endr
+	push bc
+.asm_11d4cf
+	push af
+	push hl
+	ld a, [hli]
+	ld e, a
+	ld a, [hl]
+	ld d, a
+	ld hl, wd000
+	add hl, de
+	ld a, [wcd2d]
+	ld [hli], a
+	inc a
+	ld [wcd2d], a
+	ld a, [wcd2e]
+	ld [hl], a
+	pop hl
+	ld de, $0008
+	add hl, de
+	pop af
+	dec a
+	jr nz, .asm_11d4cf
+	ld hl, wcd2d
+	xor a
+	ld [hli], a
+	inc [hl]
+	pop bc
+	pop hl
+	pop af
+	dec a
+	jr nz, .asm_11d4c1
+	pop af
+	ld [rSVBK], a
+	ret
+; 11d4fe
+
+
+SortedPokemon:
+; Pokemon sorted by kana.
+; Notably, Rhydon is missing.
+
+	dw .a
+	dw .i
+	dw .u
+	dw .e
+	dw .o
+	dw .ka_ga
+	dw .ki_gi
+	dw .ku_gu
+	dw .ke_ge
+	dw .ko_go
+	dw .sa_za
+	dw .shi_ji
+	dw .su_zu
+	dw .se_ze
+	dw .so_zo
+	dw .ta_da
+	dw .chi_dhi
+	dw .tsu_du
+	dw .te_de
+	dw .to_do
+	dw .na
+	dw .ni
+	dw .nu
+	dw .ne
+	dw .no
+	dw .ha_ba_pa
+	dw .hi_bi_pi
+	dw .fu_bu_pu
+	dw .he_be_pe
+	dw .ho_bo_po
+	dw .ma
+	dw .mi
+	dw .mu
+	dw .me
+	dw .mo
+	dw .ya
+	dw .yu
+	dw .yo
+	dw .ra
+	dw .ri
+	dw .ru
+	dw .re
+	dw .ro
+	dw .wa
+	dw .end
+
+.a:			db EKANS, ARBOK, SEAKING, ARIADOS, CROCONAW, UNOWN
+			db -1
+.i:			db EEVEE, GEODUDE, SPINARAK, PILOSWINE, ONIX
+			db -1
+.u:			db ARCANINE, SUDOWOODO, WEEPINBELL, VICTREEBEL, WOOPER, SWINUB
+			db -1
+.e:			db SKARMORY, AIPOM, ESPEON, HITMONCHAN, ELEKID, ELECTABUZZ, ENTEI
+			db -1
+.o:			db FERALIGATR, FURRET, OCTILLERY, PRIMEAPE, SENTRET, STANTLER, SPEAROW, FEAROW, OMASTAR, OMANYTE
+			db -1
+.ka_ga:		db GROWLITHE, MACHAMP, DRAGONITE, PINSIR, SNORLAX, KABUTO, KABUTOPS, HITMONTOP, WARTORTLE, BLASTOISE, FARFETCH_D, CUBONE, MAROWAK, KANGASKHAN
+			db -1
+.ki_gi:		db SUNFLORA, CATERPIE, GYARADOS, RAPIDASH, NINETALES, GIRAFARIG, BELLOSSOM, KINGDRA, KINGLER
+			db -1
+.ku_gu:		db GLOOM, PINECO, GLIGAR, KRABBY, GRANBULL, CROBAT
+			db -1
+.ke_ge:		db ABRA, GENGAR, TAUROS
+			db -1
+.ko_go:		db MAGIKARP, MAGNEMITE, GASTLY, HAUNTER, MACHOKE, KAKUNA, PSYDUCK, PHANPY, RATTATA, GOLDUCK, GOLBAT, GOLEM, GRAVELER, VENONAT
+			db -1
+.sa_za:		db RHYHORN, PUPITAR, CORSOLA, HITMONLEE, ZAPDOS, JOLTEON, SANDSHREW, SANDSLASH ; RHYDON should lead this list
+			db -1
+.shi_ji:	db SEADRA, SHELLDER, VAPOREON, DEWGONG
+			db -1
+.su_zu:		db SUICUNE, STARMIE, SCYTHER, ZUBAT, BEEDRILL, HYPNO, DROWZEE
+			db -1
+.se_ze:		db SQUIRTLE, CELEBI
+			db -1
+.so_zo:		db WOBBUFFET
+			db -1
+.ta_da:		db DUGTRIO, HORSEA, EXEGGCUTE
+			db -1
+.chi_dhi:	db CHIKORITA, CHINCHOU
+			db -1
+.tsu_du:	db SHUCKLE
+			db -1
+.te_de:		db DIGLETT, REMORAID, DELIBIRD, HOUNDOUR, AMPHAROS
+			db -1
+.to_do:		db DODUO, DODRIO, SMEARGLE, KOFFING, TENTACRUEL, TOGETIC, TOGEPI, GOLDEEN, METAPOD, DONPHAN
+			db -1
+.na:		db ODDISH, EXEGGUTOR
+			db -1
+.ni:		db NIDOKING, NIDOQUEEN, NIDORAN_M, NIDORAN_F, NIDORINA, NIDORINO, MEOWTH, SNEASEL, POLIWHIRL, POLITOED, POLIWRATH, POLIWAG
+			db -1
+.nu:		db QUAGSIRE
+			db -1
+.ne:		db NATU, XATU
+			db -1
+.no:		db DUNSPARCE
+			db -1
+.ha_ba_pa:	db SEEL, STEELIX, TYPHLOSION, DRAGONAIR, BUTTERFREE, SCIZOR, HOPPIP, BLISSEY, PARAS, PARASECT, QWILFISH, MR__MIME, TYROGUE, CLOYSTER, TYRANITAR
+			db -1
+.hi_bi_pi:	db CLEFFA, WEEDLE, PIKACHU, CLEFABLE, PIDGEOT, PIDGEOTTO, PICHU, CLEFAIRY, CHARMANDER, STARYU, CYNDAQUIL, SUNKERN, TEDDIURSA, VOLTORB
+			db -1
+.fu_bu_pu:	db MOLTRES, FLAREON, ALAKAZAM, MAGMAR, FORRETRESS, WIGGLYTUFF, IVYSAUR, BULBASAUR, VENUSAUR, AERODACTYL, MAGBY, IGGLYBUFF, UMBREON, ARTICUNO, JIGGLYPUFF, SNUBBULL
+			db -1
+.he_be_pe:	db BAYLEEF, GRIMER, MUK, HERACROSS, HOUNDOOM, PERSIAN, LICKITUNG
+			db -1
+.ho_bo_po:	db HO_OH, HOOTHOOT, PIDGEY, PONYTA, SKIPLOOM, PORYGON, PORYGON2
+			db -1
+.ma:		db MAGCARGO, SLUGMA, QUILAVA, BELLSPROUT, WEEZING, MARILL, AZUMARILL, ELECTRODE, MANKEY, MANTINE
+			db -1
+.mi:		db DRATINI, MEW, MEWTWO, MILTANK
+			db -1
+.mu:		db MISDREAVUS, SMOOCHUM
+			db -1
+.me:		db MEGANIUM, DITTO, TENTACOOL, MAREEP
+			db -1
+.mo:		db FLAAFFY, VENOMOTH, TANGELA
+			db -1
+.ya:		db SLOWKING, SLOWBRO, SLOWPOKE, MURKROW, YANMA
+			db -1
+.yu:		db KADABRA
+			db -1
+.yo:		db LARVITAR, NOCTOWL
+			db -1
+.ra:		db RAIKOU, RAICHU, CHANSEY, RATICATE, LAPRAS, VILEPLUME, LANTURN
+			db -1
+.ri:		db CHARMELEON, CHARIZARD, URSARING
+			db -1
+.ru:		db JYNX, LUGIA
+			db -1
+.re:		db MAGNETON, LEDIAN, LEDYBA
+			db -1
+.ro:		db VULPIX
+			db -1
+.wa:		db JUMPLUFF, TOTODILE, MACHOP
+.end:		db -1
+; 11d67e
+
+GFX_11d67e:
+INCBIN "gfx/pokedex/select_start.2bpp"
+; 11d6de
+
+LZ_11d6de:
+INCBIN "gfx/pokedex/slowpoke.2bpp.lz"
+; 11da52
+
+Strings_11da52: ; 11da52
+; Fixed message categories
+	db "ポケモン@@"
+	db "タイプ@@@"
+	db "あいさつ@@"
+	db "ひと@@@@"
+	db "バトル@@@"
+	db "こえ@@@@"
+	db "かいわ@@@"
+	db "きもち@@@"
+	db "じょうたい@"
+	db "せいかつ@@"
+	db "しゅみ@@@"
+	db "こうどう@@"
+	db "じかん@@@"
+	db "むすび@@@"
+	db "あれこれ@@"
+; 11daac
+
+Unknown_11daac: ; 11daac
+	dw .Types
+	dw .Greetings
+	dw .People
+	dw .Battle
+	dw .Exclamations
+	dw .Conversation
+	dw .Feelings
+	dw .Conditions
+	dw .Life
+	dw .Hobbies
+	dw .Actions
+	dw .Time
+	dw .Farewells
+	dw .ThisAndThat
+
+.Types: ; 11dac8
+	db "あく@@@", $26, $0, $0
+	db "いわ@@@", $aa, $0, $0
+	db "エスパー@", $da, $0, $0
+	db "かくとう@", $4e, $1, $0
+	db "くさ@@@", $ba, $1, $0
+	db "ゴースト@", $e4, $1, $0
+	db "こおり@@", $e6, $1, $0
+	db "じめん@@", $68, $2, $0
+	db "タイプ@@", $e8, $2, $0
+	db "でんき@@", $8e, $3, $0
+	db "どく@@@", $ae, $3, $0
+	db "ドラゴン@", $bc, $3, $0
+	db "ノーマル@", $22, $4, $0
+	db "はがね@@", $36, $4, $0
+	db "ひこう@@", $5e, $4, $0
+	db "ほのお@@", $b2, $4, $0
+	db "みず@@@", $f4, $4, $0
+	db "むし@@@", $12, $5, $0
+
+.Greetings: ; 11db58
+	db "ありがと@", $58, $0, $0
+	db "ありがとう", $5a, $0, $0
+	db "いくぜ!@", $80, $0, $0
+	db "いくよ!@", $82, $0, $0
+	db "いくわよ!", $84, $0, $0
+	db "いやー@@", $a6, $0, $0
+	db "おっす@@", $a, $1, $0
+	db "おはつです", $22, $1, $0
+	db "おめでとう", $2a, $1, $0
+	db "ごめん@@", $f8, $1, $0
+	db "ごめんよ@", $fa, $1, $0
+	db "こらっ@@", $fc, $1, $0
+	db "こんちは!", $a, $2, $0
+	db "こんにちは", $10, $2, $0
+	db "さようなら", $28, $2, $0
+	db "サンキュー", $2e, $2, $0
+	db "さんじょう", $30, $2, $0
+	db "しっけい@", $48, $2, $0
+	db "しつれい@", $4c, $2, $0
+	db "じゃーね@", $6c, $2, $0
+	db "すいません", $8c, $2, $0
+	db "それじゃ@", $ca, $2, $0
+	db "どうも@@", $a6, $3, $0
+	db "なんじゃ@", $ee, $3, $0
+	db "ハーイ@@", $2c, $4, $0
+	db "はいはい@", $32, $4, $0
+	db "バイバイ@", $34, $4, $0
+	db "へイ@@@", $8a, $4, $0
+	db "またね@@", $de, $4, $0
+	db "もしもし@", $32, $5, $0
+	db "やあ@@@", $3e, $5, $0
+	db "やっほー@", $4e, $5, $0
+	db "よう@@@", $62, $5, $0
+	db "ようこそ@", $64, $5, $0
+	db "よろしく@", $80, $5, $0
+	db "らっしゃい", $94, $5, $0
+
+.People: ; 11dc78
+	db "あいて@@", $1c, $0, $0
+	db "あたし@@", $36, $0, $0
+	db "あなた@@", $40, $0, $0
+	db "あなたが@", $42, $0, $0
+	db "あなたに@", $44, $0, $0
+	db "あなたの@", $46, $0, $0
+	db "あなたは@", $48, $0, $0
+	db "あなたを@", $4a, $0, $0
+	db "おかあさん", $e8, $0, $0
+	db "おじいさん", $fc, $0, $0
+	db "おじさん@", $2, $1, $0
+	db "おとうさん", $e, $1, $0
+	db "おとこのこ", $10, $1, $0
+	db "おとな@@", $14, $1, $0
+	db "おにいさん", $16, $1, $0
+	db "おねえさん", $18, $1, $0
+	db "おばあさん", $1c, $1, $0
+	db "おばさん@", $20, $1, $0
+	db "おれさま@", $34, $1, $0
+	db "おんなのこ", $3a, $1, $0
+	db "ガール@@", $40, $1, $0
+	db "かぞく@@", $52, $1, $0
+	db "かのじょ@", $72, $1, $0
+	db "かれ@@@", $7c, $1, $0
+	db "きみ@@@", $9a, $1, $0
+	db "きみが@@", $9c, $1, $0
+	db "きみに@@", $9e, $1, $0
+	db "きみの@@", $a0, $1, $0
+	db "きみは@@", $a2, $1, $0
+	db "きみを@@", $a4, $1, $0
+	db "ギャル@@", $ae, $1, $0
+	db "きょうだい", $b2, $1, $0
+	db "こども@@", $f0, $1, $0
+	db "じぶん@@", $54, $2, $0
+	db "じぶんが@", $56, $2, $0
+	db "じぶんに@", $58, $2, $0
+	db "じぶんの@", $5a, $2, $0
+	db "じぶんは@", $5c, $2, $0
+	db "じぶんを@", $5e, $2, $0
+	db "だれ@@@", $18, $3, $0
+	db "だれか@@", $1a, $3, $0
+	db "だれが@@", $1c, $3, $0
+	db "だれに@@", $1e, $3, $0
+	db "だれの@@", $20, $3, $0
+	db "だれも@@", $22, $3, $0
+	db "だれを@@", $24, $3, $0
+	db "ちゃん@@", $38, $3, $0
+	db "ともだち@", $b8, $3, $0
+	db "なかま@@", $d4, $3, $0
+	db "ひと@@@", $62, $4, $0
+	db "ボーイ@@", $98, $4, $0
+	db "ボク@@@", $a0, $4, $0
+	db "ボクが@@", $a2, $4, $0
+	db "ボクに@@", $a4, $4, $0
+	db "ボクの@@", $a6, $4, $0
+	db "ボクは@@", $a8, $4, $0
+	db "ボクを@@", $aa, $4, $0
+	db "みんな@@", $4, $5, $0
+	db "みんなが@", $6, $5, $0
+	db "みんなに@", $8, $5, $0
+	db "みんなの@", $a, $5, $0
+	db "みんなは@", $c, $5, $0
+	db "ライバル@", $8a, $5, $0
+	db "わたし@@", $c2, $5, $0
+	db "わたしが@", $c4, $5, $0
+	db "わたしに@", $c6, $5, $0
+	db "わたしの@", $c8, $5, $0
+	db "わたしは@", $ca, $5, $0
+	db "わたしを@", $cc, $5, $0
+
+.Battle: ; 11dea0
+	db "あいしょう", $18, $0, $0
+	db "いけ!@@", $88, $0, $0
+	db "いちばん@", $96, $0, $0
+	db "かくご@@", $4c, $1, $0
+	db "かたせて@", $54, $1, $0
+	db "かち@@@", $56, $1, $0
+	db "かつ@@@", $58, $1, $0
+	db "かった@@", $60, $1, $0
+	db "かったら@", $62, $1, $0
+	db "かって@@", $64, $1, $0
+	db "かてない@", $66, $1, $0
+	db "かてる@@", $68, $1, $0
+	db "かなわない", $70, $1, $0
+	db "きあい@@", $84, $1, $0
+	db "きめた@@", $a8, $1, $0
+	db "きりふだ@", $b6, $1, $0
+	db "くらえ@@", $c2, $1, $0
+	db "こい!@@", $da, $1, $0
+	db "こうげき@", $e0, $1, $0
+	db "こうさん@", $e2, $1, $0
+	db "こんじょう", $8, $2, $0
+	db "さいのう@", $16, $2, $0
+	db "さくせん@", $1a, $2, $0
+	db "さばき@@", $22, $2, $0
+	db "しょうぶ@", $7e, $2, $0
+	db "しょうり@", $80, $2, $0
+	db "せめ@@@", $b4, $2, $0
+	db "センス@@", $b6, $2, $0
+	db "たいせん@", $e6, $2, $0
+	db "たたかい@", $f6, $2, $0
+	db "ちから@@", $32, $3, $0
+	db "チャレンジ", $36, $3, $0
+	db "つよい@@", $58, $3, $0
+	db "つよすぎ@", $5a, $3, $0
+	db "つらい@@", $5c, $3, $0
+	db "つらかった", $5e, $3, $0
+	db "てかげん@", $6c, $3, $0
+	db "てき@@@", $6e, $3, $0
+	db "てんさい@", $90, $3, $0
+	db "でんせつ@", $94, $3, $0
+	db "トレーナー", $c6, $3, $0
+	db "にげ@@@", $4, $4, $0
+	db "ぬるい@@", $10, $4, $0
+	db "ねらう@@", $16, $4, $0
+	db "バトル@@", $4a, $4, $0
+	db "ファイト@", $72, $4, $0
+	db "ふっかつ@", $78, $4, $0
+	db "ポイント@", $94, $4, $0
+	db "ポケモン@", $ac, $4, $0
+	db "ほんき@@", $bc, $4, $0
+	db "まいった!", $c4, $4, $0
+	db "まけ@@@", $c8, $4, $0
+	db "まけたら@", $ca, $4, $0
+	db "まけて@@", $cc, $4, $0
+	db "まける@@", $ce, $4, $0
+	db "まもり@@", $ea, $4, $0
+	db "みかた@@", $f2, $4, $0
+	db "みとめない", $fe, $4, $0
+	db "みとめる@", $0, $5, $0
+	db "むてき@@", $16, $5, $0
+	db "もらった!", $3c, $5, $0
+	db "よゆう@@", $7a, $5, $0
+	db "よわい@@", $82, $5, $0
+	db "よわすぎ@", $84, $5, $0
+	db "らくしょう", $8e, $5, $0
+	db "りーダー@", $9e, $5, $0
+	db "ルール@@", $a0, $5, $0
+	db "レべル@@", $a6, $5, $0
+	db "わざ@@@", $be, $5, $0
+
+.Exclamations: ; 11e0c8
+	db "!@@@@", $0, $0, $0
+	db "!!@@@", $2, $0, $0
+	db "!?@@@", $4, $0, $0
+	db "?@@@@", $6, $0, $0
+	db "…@@@@", $8, $0, $0
+	db "…!@@@", $a, $0, $0
+	db "………@@", $c, $0, $0
+	db "ー@@@@", $e, $0, $0
+	db "ーーー@@", $10, $0, $0
+	db "あーあ@@", $14, $0, $0
+	db "あーん@@", $16, $0, $0
+	db "あははー@", $52, $0, $0
+	db "あら@@@", $54, $0, $0
+	db "いえ@@@", $72, $0, $0
+	db "イエス@@", $74, $0, $0
+	db "うう@@@", $ac, $0, $0
+	db "うーん@@", $ae, $0, $0
+	db "うおー!@", $b0, $0, $0
+	db "うおりゃー", $b2, $0, $0
+	db "うひょー@", $bc, $0, $0
+	db "うふふ@@", $be, $0, $0
+	db "うわー@@", $ca, $0, $0
+	db "うわーん@", $cc, $0, $0
+	db "ええ@@@", $d2, $0, $0
+	db "えー@@@", $d4, $0, $0
+	db "えーん@@", $d6, $0, $0
+	db "えへへ@@", $dc, $0, $0
+	db "おいおい@", $e0, $0, $0
+	db "おお@@@", $e2, $0, $0
+	db "おっと@@", $c, $1, $0
+	db "がーん@@", $42, $1, $0
+	db "キャー@@", $aa, $1, $0
+	db "ギャー@@", $ac, $1, $0
+	db "ぐふふふふ", $bc, $1, $0
+	db "げっ@@@", $ce, $1, $0
+	db "しくしく@", $3e, $2, $0
+	db "ちえっ@@", $2e, $3, $0
+	db "てへ@@@", $86, $3, $0
+	db "ノー@@@", $20, $4, $0
+	db "はあー@@", $2a, $4, $0
+	db "はい@@@", $30, $4, $0
+	db "はっはっは", $48, $4, $0
+	db "ひいー@@", $56, $4, $0
+	db "ひゃあ@@", $6a, $4, $0
+	db "ふっふっふ", $7c, $4, $0
+	db "ふにゃ@@", $7e, $4, $0
+	db "ププ@@@", $80, $4, $0
+	db "ふふん@@", $82, $4, $0
+	db "ふん@@@", $88, $4, $0
+	db "へっへっへ", $8e, $4, $0
+	db "へへー@@", $90, $4, $0
+	db "ほーほほほ", $9c, $4, $0
+	db "ほら@@@", $b6, $4, $0
+	db "まあ@@@", $c0, $4, $0
+	db "むきー!!", $10, $5, $0
+	db "むふー@@", $18, $5, $0
+	db "むふふ@@", $1a, $5, $0
+	db "むむ@@@", $1c, $5, $0
+	db "よーし@@", $6a, $5, $0
+	db "よし!@@", $72, $5, $0
+	db "ラララ@@", $98, $5, $0
+	db "わーい@@", $ac, $5, $0
+	db "わーん!!", $b0, $5, $0
+	db "ワォ@@@", $b2, $5, $0
+	db "わっ!!@", $ce, $5, $0
+	db "わははは!", $d0, $5, $0
+
+.Conversation: ; 11e2d8
+	db "あのね@@", $50, $0, $0
+	db "あんまり@", $6e, $0, $0
+	db "いじわる@", $8e, $0, $0
+	db "うそ@@@", $b6, $0, $0
+	db "うむ@@@", $c4, $0, $0
+	db "おーい@@", $e4, $0, $0
+	db "おすすめ@", $6, $1, $0
+	db "おばかさん", $1e, $1, $0
+	db "かなり@@", $6e, $1, $0
+	db "から@@@", $7a, $1, $0
+	db "きぶん@@", $98, $1, $0
+	db "けど@@@", $d6, $1, $0
+	db "こそ@@@", $ea, $1, $0
+	db "こと@@@", $ee, $1, $0
+	db "さあ@@@", $12, $2, $0
+	db "さっぱり@", $1e, $2, $0
+	db "さて@@@", $20, $2, $0
+	db "じゅうぶん", $72, $2, $0
+	db "すぐ@@@", $94, $2, $0
+	db "すごく@@", $98, $2, $0
+	db "すこしは@", $9a, $2, $0
+	db "すっっごい", $a0, $2, $0
+	db "ぜーんぜん", $b0, $2, $0
+	db "ぜったい@", $b2, $2, $0
+	db "それで@@", $ce, $2, $0
+	db "だけ@@@", $f2, $2, $0
+	db "だって@@", $fc, $2, $0
+	db "たぶん@@", $6, $3, $0
+	db "たら@@@", $14, $3, $0
+	db "ちょー@@", $3a, $3, $0
+	db "ちょっと@", $3c, $3, $0
+	db "ったら@@", $4e, $3, $0
+	db "って@@@", $50, $3, $0
+	db "ていうか@", $62, $3, $0
+	db "でも@@@", $88, $3, $0
+	db "どうしても", $9c, $3, $0
+	db "とうぜん@", $a0, $3, $0
+	db "どうぞ@@", $a2, $3, $0
+	db "とりあえず", $be, $3, $0
+	db "なあ@@@", $cc, $3, $0
+	db "なんて@@", $f4, $3, $0
+	db "なんでも@", $fc, $3, $0
+	db "なんとか@", $fe, $3, $0
+	db "には@@@", $8, $4, $0
+	db "バッチり@", $46, $4, $0
+	db "ばりばり@", $52, $4, $0
+	db "ほど@@@", $b0, $4, $0
+	db "ほんと@@", $be, $4, $0
+	db "まさに@@", $d0, $4, $0
+	db "マジ@@@", $d2, $4, $0
+	db "マジで@@", $d4, $4, $0
+	db "まったく@", $e4, $4, $0
+	db "まで@@@", $e6, $4, $0
+	db "まるで@@", $ec, $4, $0
+	db "ムード@@", $e, $5, $0
+	db "むしろ@@", $14, $5, $0
+	db "めちゃ@@", $24, $5, $0
+	db "めっぽう@", $28, $5, $0
+	db "もう@@@", $2c, $5, $0
+	db "モード@@", $2e, $5, $0
+	db "もっと@@", $36, $5, $0
+	db "もはや@@", $38, $5, $0
+	db "やっと@@", $4a, $5, $0
+	db "やっぱり@", $4c, $5, $0
+	db "より@@@", $7c, $5, $0
+	db "れば@@@", $a4, $5, $0
+
+.Feelings: ; 11e4e8
+	db "あいたい@", $1a, $0, $0
+	db "あそびたい", $32, $0, $0
+	db "いきたい@", $7c, $0, $0
+	db "うかれて@", $b4, $0, $0
+	db "うれしい@", $c6, $0, $0
+	db "うれしさ@", $c8, $0, $0
+	db "エキサイト", $d8, $0, $0
+	db "えらい@@", $de, $0, $0
+	db "おかしい@", $ec, $0, $0
+	db "ォッケー@", $8, $1, $0
+	db "かえりたい", $48, $1, $0
+	db "がっくし@", $5a, $1, $0
+	db "かなしい@", $6c, $1, $0
+	db "がんばって", $80, $1, $0
+	db "きがしない", $86, $1, $0
+	db "きがする@", $88, $1, $0
+	db "ききたい@", $8a, $1, $0
+	db "きになる@", $90, $1, $0
+	db "きのせい@", $96, $1, $0
+	db "きらい@@", $b4, $1, $0
+	db "くやしい@", $be, $1, $0
+	db "くやしさ@", $c0, $1, $0
+	db "さみしい@", $24, $2, $0
+	db "ざんねん@", $32, $2, $0
+	db "しあわせ@", $36, $2, $0
+	db "したい@@", $44, $2, $0
+	db "したくない", $46, $2, $0
+	db "しまった@", $64, $2, $0
+	db "しょんぼり", $82, $2, $0
+	db "すき@@@", $92, $2, $0
+	db "だいきらい", $da, $2, $0
+	db "たいくつ@", $dc, $2, $0
+	db "だいじ@@", $de, $2, $0
+	db "だいすき@", $e4, $2, $0
+	db "たいへん@", $ea, $2, $0
+	db "たのしい@", $0, $3, $0
+	db "たのしすぎ", $2, $3, $0
+	db "たべたい@", $8, $3, $0
+	db "ダメダメ@", $e, $3, $0
+	db "たりない@", $16, $3, $0
+	db "ちくしょー", $34, $3, $0
+	db "どうしよう", $9e, $3, $0
+	db "ドキドキ@", $ac, $3, $0
+	db "ナイス@@", $d0, $3, $0
+	db "のみたい@", $26, $4, $0
+	db "びっくり@", $60, $4, $0
+	db "ふあん@@", $74, $4, $0
+	db "ふらふら@", $86, $4, $0
+	db "ほしい@@", $ae, $4, $0
+	db "ボロボロ@", $b8, $4, $0
+	db "まだまだ@", $e0, $4, $0
+	db "まてない@", $e8, $4, $0
+	db "まんぞく@", $f0, $4, $0
+	db "みたい@@", $f8, $4, $0
+	db "めずらしい", $22, $5, $0
+	db "メラメラ@", $2a, $5, $0
+	db "やだ@@@", $46, $5, $0
+	db "やったー@", $48, $5, $0
+	db "やばい@@", $50, $5, $0
+	db "やばすぎる", $52, $5, $0
+	db "やられた@", $54, $5, $0
+	db "やられて@", $56, $5, $0
+	db "よかった@", $6e, $5, $0
+	db "ラブラブ@", $96, $5, $0
+	db "ロマン@@", $a8, $5, $0
+	db "ろんがい@", $aa, $5, $0
+	db "わから@@", $b4, $5, $0
+	db "わかり@@", $b6, $5, $0
+	db "わくわく@", $ba, $5, $0
+
+.Conditions: ; 11e710
+	db "あつい@@", $38, $0, $0
+	db "あった@@", $3a, $0, $0
+	db "あり@@@", $56, $0, $0
+	db "ある@@@", $5e, $0, $0
+	db "あわてて@", $6a, $0, $0
+	db "いい@@@", $70, $0, $0
+	db "いか@@@", $76, $0, $0
+	db "イカス@@", $78, $0, $0
+	db "いきおい@", $7a, $0, $0
+	db "いける@@", $8a, $0, $0
+	db "いじょう@", $8c, $0, $0
+	db "いそがしい", $90, $0, $0
+	db "いっしょに", $9a, $0, $0
+	db "いっぱい@", $9c, $0, $0
+	db "いない@@", $a0, $0, $0
+	db "いや@@@", $a4, $0, $0
+	db "いる@@@", $a8, $0, $0
+	db "うまい@@", $c0, $0, $0
+	db "うまく@@", $c2, $0, $0
+	db "おおきい@", $e6, $0, $0
+	db "おくれ@@", $f2, $0, $0
+	db "おしい@@", $fa, $0, $0
+	db "おもしろい", $2c, $1, $0
+	db "おもしろく", $2e, $1, $0
+	db "かっこいい", $5c, $1, $0
+	db "かわいい@", $7e, $1, $0
+	db "かんぺき@", $82, $1, $0
+	db "けっこう@", $d0, $1, $0
+	db "げんき@@", $d8, $1, $0
+	db "こわい@@", $6, $2, $0
+	db "さいこう@", $14, $2, $0
+	db "さむい@@", $26, $2, $0
+	db "さわやか@", $2c, $2, $0
+	db "しかたない", $38, $2, $0
+	db "すごい@@", $96, $2, $0
+	db "すごすぎ@", $9c, $2, $0
+	db "すてき@@", $a4, $2, $0
+	db "たいした@", $e0, $2, $0
+	db "だいじょぶ", $e2, $2, $0
+	db "たかい@@", $ec, $2, $0
+	db "ただしい@", $f8, $2, $0
+	db "だめ@@@", $c, $3, $0
+	db "ちいさい@", $2c, $3, $0
+	db "ちがう@@", $30, $3, $0
+	db "つかれ@@", $48, $3, $0
+	db "とくい@@", $b0, $3, $0
+	db "とまらない", $b6, $3, $0
+	db "ない@@@", $ce, $3, $0
+	db "なかった@", $d2, $3, $0
+	db "なし@@@", $d8, $3, $0
+	db "なって@@", $dc, $3, $0
+	db "はやい@@", $50, $4, $0
+	db "ひかる@@", $5a, $4, $0
+	db "ひくい@@", $5c, $4, $0
+	db "ひどい@@", $64, $4, $0
+	db "ひとりで@", $66, $4, $0
+	db "ひま@@@", $68, $4, $0
+	db "ふそく@@", $76, $4, $0
+	db "へた@@@", $8c, $4, $0
+	db "まちがって", $e2, $4, $0
+	db "やさしい@", $42, $5, $0
+	db "よく@@@", $70, $5, $0
+	db "よわって@", $86, $5, $0
+	db "らく@@@", $8c, $5, $0
+	db "らしい@@", $90, $5, $0
+	db "わるい@@", $d4, $5, $0
+
+.Life: ; 11e920
+	db "アルバイト", $64, $0, $0
+	db "うち@@@", $ba, $0, $0
+	db "おかね@@", $ee, $0, $0
+	db "おこづかい", $f4, $0, $0
+	db "おふろ@@", $24, $1, $0
+	db "がっこう@", $5e, $1, $0
+	db "きねん@@", $92, $1, $0
+	db "グループ@", $c6, $1, $0
+	db "ゲット@@", $d2, $1, $0
+	db "こうかん@", $de, $1, $0
+	db "しごと@@", $40, $2, $0
+	db "しゅぎょう", $74, $2, $0
+	db "じゅぎょう", $76, $2, $0
+	db "じゅく@@", $78, $2, $0
+	db "しんか@@", $88, $2, $0
+	db "ずかん@@", $90, $2, $0
+	db "せいかつ@", $ae, $2, $0
+	db "せんせい@", $b8, $2, $0
+	db "センター@", $ba, $2, $0
+	db "タワー@@", $28, $3, $0
+	db "つうしん@", $40, $3, $0
+	db "テスト@@", $7e, $3, $0
+	db "テレビ@@", $8c, $3, $0
+	db "でんわ@@", $96, $3, $0
+	db "どうぐ@@", $9a, $3, $0
+	db "トレード@", $c4, $3, $0
+	db "なまえ@@", $e8, $3, $0
+	db "ニュース@", $a, $4, $0
+	db "にんき@@", $c, $4, $0
+	db "パーティー", $2e, $4, $0
+	db "べんきょう", $92, $4, $0
+	db "マシン@@", $d6, $4, $0
+	db "めいし@@", $1e, $5, $0
+	db "メッセージ", $26, $5, $0
+	db "もようがえ", $3a, $5, $0
+	db "ゆめ@@@", $5a, $5, $0
+	db "ようちえん", $66, $5, $0
+	db "ラジォ@@", $92, $5, $0
+	db "ワールド@", $ae, $5, $0
+
+.Hobbies: ; 11ea58
+	db "アイドル@", $1e, $0, $0
+	db "アニメ@@", $4c, $0, $0
+	db "うた@@@", $b8, $0, $0
+	db "えいが@@", $d0, $0, $0
+	db "おかし@@", $ea, $0, $0
+	db "おしゃべり", $4, $1, $0
+	db "おままごと", $28, $1, $0
+	db "おもちゃ@", $30, $1, $0
+	db "おんがく@", $38, $1, $0
+	db "カード@@", $3e, $1, $0
+	db "かいもの@", $46, $1, $0
+	db "グルメ@@", $c8, $1, $0
+	db "ゲーム@@", $cc, $1, $0
+	db "ざっし@@", $1c, $2, $0
+	db "さんぽ@@", $34, $2, $0
+	db "じてんしゃ", $50, $2, $0
+	db "しゅみ@@", $7a, $2, $0
+	db "スポーツ@", $a8, $2, $0
+	db "ダイエット", $d8, $2, $0
+	db "たからもの", $f0, $2, $0
+	db "たび@@@", $4, $3, $0
+	db "ダンス@@", $2a, $3, $0
+	db "つり@@@", $60, $3, $0
+	db "デート@@", $6a, $3, $0
+	db "でんしゃ@", $92, $3, $0
+	db "ぬいぐるみ", $e, $4, $0
+	db "パソコン@", $3e, $4, $0
+	db "はな@@@", $4c, $4, $0
+	db "ヒーロー@", $58, $4, $0
+	db "ひるね@@", $6e, $4, $0
+	db "ヒロイン@", $70, $4, $0
+	db "ぼうけん@", $96, $4, $0
+	db "ボード@@", $9a, $4, $0
+	db "ボール@@", $9e, $4, $0
+	db "ほん@@@", $ba, $4, $0
+	db "マンガ@@", $ee, $4, $0
+	db "やくそく@", $40, $5, $0
+	db "やすみ@@", $44, $5, $0
+	db "よてい@@", $74, $5, $0
+
+.Actions: ; 11eb90
+	db "あう@@@", $20, $0, $0
+	db "あきらめ@", $24, $0, $0
+	db "あげる@@", $28, $0, $0
+	db "あせる@@", $2e, $0, $0
+	db "あそび@@", $30, $0, $0
+	db "あそぶ@@", $34, $0, $0
+	db "あつめ@@", $3e, $0, $0
+	db "あるき@@", $60, $0, $0
+	db "あるく@@", $62, $0, $0
+	db "いく@@@", $7e, $0, $0
+	db "いけ@@@", $86, $0, $0
+	db "おき@@@", $f0, $0, $0
+	db "おこり@@", $f6, $0, $0
+	db "おこる@@", $f8, $0, $0
+	db "おしえ@@", $fe, $0, $0
+	db "おしえて@", $0, $1, $0
+	db "おねがい@", $1a, $1, $0
+	db "おぼえ@@", $26, $1, $0
+	db "かえる@@", $4a, $1, $0
+	db "がまん@@", $74, $1, $0
+	db "きく@@@", $8c, $1, $0
+	db "きたえ@@", $8e, $1, $0
+	db "きめ@@@", $a6, $1, $0
+	db "くる@@@", $c4, $1, $0
+	db "さがし@@", $18, $2, $0
+	db "さわぎ@@", $2a, $2, $0
+	db "した@@@", $42, $2, $0
+	db "しって@@", $4a, $2, $0
+	db "して@@@", $4e, $2, $0
+	db "しない@@", $52, $2, $0
+	db "しまう@@", $60, $2, $0
+	db "じまん@@", $66, $2, $0
+	db "しらない@", $84, $2, $0
+	db "しる@@@", $86, $2, $0
+	db "しんじて@", $8a, $2, $0
+	db "する@@@", $aa, $2, $0
+	db "たべる@@", $a, $3, $0
+	db "つかう@@", $42, $3, $0
+	db "つかえ@@", $44, $3, $0
+	db "つかって@", $46, $3, $0
+	db "できない@", $70, $3, $0
+	db "できる@@", $72, $3, $0
+	db "でない@@", $84, $3, $0
+	db "でる@@@", $8a, $3, $0
+	db "なげる@@", $d6, $3, $0
+	db "なやみ@@", $ea, $3, $0
+	db "ねられ@@", $18, $4, $0
+	db "ねる@@@", $1a, $4, $0
+	db "のがし@@", $24, $4, $0
+	db "のむ@@@", $28, $4, $0
+	db "はしり@@", $3a, $4, $0
+	db "はしる@@", $3c, $4, $0
+	db "はたらき@", $40, $4, $0
+	db "はたらく@", $42, $4, $0
+	db "はまって@", $4e, $4, $0
+	db "ぶつけ@@", $7a, $4, $0
+	db "ほめ@@@", $b4, $4, $0
+	db "みせて@@", $f6, $4, $0
+	db "みて@@@", $fc, $4, $0
+	db "みる@@@", $2, $5, $0
+	db "めざす@@", $20, $5, $0
+	db "もって@@", $34, $5, $0
+	db "ゆずる@@", $58, $5, $0
+	db "ゆるす@@", $5c, $5, $0
+	db "ゆるせ@@", $5e, $5, $0
+	db "られない@", $9a, $5, $0
+	db "られる@@", $9c, $5, $0
+	db "わかる@@", $b8, $5, $0
+	db "わすれ@@", $c0, $5, $0
+
+.Time: ; 11edb8
+	db "あき@@@", $22, $0, $0
+	db "あさ@@@", $2a, $0, $0
+	db "あした@@", $2c, $0, $0
+	db "いちにち@", $94, $0, $0
+	db "いつか@@", $98, $0, $0
+	db "いつも@@", $9e, $0, $0
+	db "いま@@@", $a2, $0, $0
+	db "えいえん@", $ce, $0, $0
+	db "おととい@", $12, $1, $0
+	db "おわり@@", $36, $1, $0
+	db "かようび@", $78, $1, $0
+	db "きのう@@", $94, $1, $0
+	db "きょう@@", $b0, $1, $0
+	db "きんようび", $b8, $1, $0
+	db "げつようび", $d4, $1, $0
+	db "このあと@", $f4, $1, $0
+	db "このまえ@", $f6, $1, $0
+	db "こんど@@", $c, $2, $0
+	db "じかん@@", $3c, $2, $0
+	db "じゅうねん", $70, $2, $0
+	db "すいようび", $8e, $2, $0
+	db "スタート@", $9e, $2, $0
+	db "ずっと@@", $a2, $2, $0
+	db "ストップ@", $a6, $2, $0
+	db "そのうち@", $c4, $2, $0
+	db "ついに@@", $3e, $3, $0
+	db "つぎ@@@", $4a, $3, $0
+	db "どようび@", $ba, $3, $0
+	db "なつ@@@", $da, $3, $0
+	db "にちようび", $6, $4, $0
+	db "はじめ@@", $38, $4, $0
+	db "はる@@@", $54, $4, $0
+	db "ひる@@@", $6c, $4, $0
+	db "ふゆ@@@", $84, $4, $0
+	db "まいにち@", $c6, $4, $0
+	db "もくようび", $30, $5, $0
+	db "よなか@@", $76, $5, $0
+	db "よる@@@", $7e, $5, $0
+	db "らいしゅう", $88, $5, $0
+
+.Farewells: ; 11eef0
+	db "いたします", $92, $0, $0
+	db "おります@", $32, $1, $0
+	db "か!?@@", $3c, $1, $0
+	db "かい?@@", $44, $1, $0
+	db "かしら?@", $50, $1, $0
+	db "かな?@@", $6a, $1, $0
+	db "かも@@@", $76, $1, $0
+	db "くれ@@@", $ca, $1, $0
+	db "ございます", $e8, $1, $0
+	db "しがち@@", $3a, $2, $0
+	db "します@@", $62, $2, $0
+	db "じゃ@@@", $6a, $2, $0
+	db "じゃん@@", $6e, $2, $0
+	db "しよう@@", $7c, $2, $0
+	db "ぜ!@@@", $ac, $2, $0
+	db "ぞ!@@@", $bc, $2, $0
+	db "た@@@@", $d4, $2, $0
+	db "だ@@@@", $d6, $2, $0
+	db "だからね@", $ee, $2, $0
+	db "だぜ@@@", $f4, $2, $0
+	db "だった@@", $fa, $2, $0
+	db "だね@@@", $fe, $2, $0
+	db "だよ@@@", $10, $3, $0
+	db "だよねー!", $12, $3, $0
+	db "だわ@@@", $26, $3, $0
+	db "ッス@@@", $4c, $3, $0
+	db "ってかんじ", $52, $3, $0
+	db "っぱなし@", $54, $3, $0
+	db "つもり@@", $56, $3, $0
+	db "ていない@", $64, $3, $0
+	db "ている@@", $66, $3, $0
+	db "でーす!@", $68, $3, $0
+	db "でした@@", $74, $3, $0
+	db "でしょ?@", $76, $3, $0
+	db "でしょー!", $78, $3, $0
+	db "です@@@", $7a, $3, $0
+	db "ですか?@", $7c, $3, $0
+	db "ですよ@@", $80, $3, $0
+	db "ですわ@@", $82, $3, $0
+	db "どうなの?", $a4, $3, $0
+	db "どうよ?@", $a8, $3, $0
+	db "とかいって", $aa, $3, $0
+	db "なの@@@", $e0, $3, $0
+	db "なのか@@", $e2, $3, $0
+	db "なのだ@@", $e4, $3, $0
+	db "なのよ@@", $e6, $3, $0
+	db "なんだね@", $f2, $3, $0
+	db "なんです@", $f8, $3, $0
+	db "なんてね@", $fa, $3, $0
+	db "ね@@@@", $12, $4, $0
+	db "ねー@@@", $14, $4, $0
+	db "の@@@@", $1c, $4, $0
+	db "の?@@@", $1e, $4, $0
+	db "ばっかり@", $44, $4, $0
+	db "まーす!@", $c2, $4, $0
+	db "ます@@@", $d8, $4, $0
+	db "ますわ@@", $da, $4, $0
+	db "ません@@", $dc, $4, $0
+	db "みたいな@", $fa, $4, $0
+	db "よ!@@@", $60, $5, $0
+	db "よー@@@", $68, $5, $0
+	db "よーん@@", $6c, $5, $0
+	db "よね@@@", $78, $5, $0
+	db "るよ@@@", $a2, $5, $0
+	db "わけ@@@", $bc, $5, $0
+	db "わよ!@@", $d2, $5, $0
+
+.ThisAndThat: ; 11f100
+	db "ああ@@@", $12, $0, $0
+	db "あっち@@", $3c, $0, $0
+	db "あの@@@", $4e, $0, $0
+	db "ありゃ@@", $5c, $0, $0
+	db "あれ@@@", $66, $0, $0
+	db "あれは@@", $68, $0, $0
+	db "あんな@@", $6c, $0, $0
+	db "こう@@@", $dc, $1, $0
+	db "こっち@@", $ec, $1, $0
+	db "この@@@", $f2, $1, $0
+	db "こりゃ@@", $fe, $1, $0
+	db "これ@@@", $0, $2, $0
+	db "これだ!@", $2, $2, $0
+	db "これは@@", $4, $2, $0
+	db "こんな@@", $e, $2, $0
+	db "そう@@@", $be, $2, $0
+	db "そっち@@", $c0, $2, $0
+	db "その@@@", $c2, $2, $0
+	db "そりゃ@@", $c6, $2, $0
+	db "それ@@@", $c8, $2, $0
+	db "それだ!@", $cc, $2, $0
+	db "それは@@", $d0, $2, $0
+	db "そんな@@", $d2, $2, $0
+	db "どう@@@", $98, $3, $0
+	db "どっち@@", $b2, $3, $0
+	db "どの@@@", $b4, $3, $0
+	db "どりゃ@@", $c0, $3, $0
+	db "どれ@@@", $c2, $3, $0
+	db "どれを@@", $c8, $3, $0
+	db "どんな@@", $ca, $3, $0
+	db "なに@@@", $de, $3, $0
+	db "なんか@@", $ec, $3, $0
+	db "なんだ@@", $f0, $3, $0
+	db "なんで@@", $f6, $3, $0
+	db "なんなんだ", $0, $4, $0
+	db "なんの@@", $2, $4, $0
+; 11f220
+
+Unknown_11f220:
+	db $12, $01, $24, $02
+	db $45, $05, $45, $05
+	db $42, $05, $42, $05
+	db $45, $05, $42, $05
+	db $27, $03, $27, $03
+	db $45, $05, $27, $03
+	db $42, $05, $24, $02
+
+Unknown_11f23c:
+macro_11f23c: macro
+	dw x - w3_d000, \1
+x = x + 2 * \1
+endm
+x = $d012
+	macro_11f23c $2f
+	macro_11f23c $1e
+	macro_11f23c $11
+	macro_11f23c $09
+	macro_11f23c $2e
+	macro_11f23c $24
+	macro_11f23c $1b
+	macro_11f23c $09
+	macro_11f23c $07
+	macro_11f23c $1c
+	macro_11f23c $12
+	macro_11f23c $2b
+	macro_11f23c $10
+	macro_11f23c $08
+	macro_11f23c $0c
+	macro_11f23c $2c
+	macro_11f23c $09
+	macro_11f23c $12
+	macro_11f23c $1b
+	macro_11f23c $1a
+	macro_11f23c $1c
+	macro_11f23c $05
+	macro_11f23c $02
+	macro_11f23c $05
+	macro_11f23c $07
+	macro_11f23c $16
+	macro_11f23c $0e
+	macro_11f23c $0c
+	macro_11f23c $05
+	macro_11f23c $16
+	macro_11f23c $19
+	macro_11f23c $0e
+	macro_11f23c $08
+	macro_11f23c $07
+	macro_11f23c $09
+	macro_11f23c $0d
+	macro_11f23c $04
+	macro_11f23c $14
+	macro_11f23c $0b
+	macro_11f23c $01
+	macro_11f23c $02
+	macro_11f23c $02
+	macro_11f23c $02
+	macro_11f23c $15
+x = $d000
+	macro_11f23c $09
+Unknown_11f23cEnd:
--- a/misc/gbc_only.asm
+++ b/misc/gbc_only.asm
@@ -10,7 +10,7 @@
 	call ClearTileMap
 
 	ld hl, GBCOnlyGFX
-	ld de, $d000
+	ld de, wd000
 	ld a, [rSVBK]
 	push af
 	ld a, 0
@@ -19,7 +19,7 @@
 	pop af
 	ld [rSVBK], a
 
-	ld de, $d000
+	ld de, wd000
 	ld hl, VTiles2
 	lb bc, BANK(GBCOnlyGFX), $54
 	call Get2bpp
--- /dev/null
+++ b/misc/mobile_12.asm
@@ -1,0 +1,1829 @@
+InitMobileProfile: ; 4802f (12:402f)
+	xor a
+	set 6, a
+	ld [wd002], a
+	ld hl, wd003
+	set 0, [hl]
+	ld a, c
+	and a
+	call z, Function48000
+	call ClearBGPalettes
+	call Function48d3d
+	ld a, [wd479]
+	bit 1, a
+	jr z, .asm_4805a
+	ld a, [wd003]
+	set 0, a
+	set 1, a
+	set 2, a
+	set 3, a
+	ld [wd003], a
+.asm_4805a
+	call Function486bf
+	call LoadFontsExtra
+	ld de, GFX_488c3
+	ld hl, VTiles2 tile $10
+	lb bc, BANK(GFX_488c3), 1
+	call Request1bpp
+	ld de, GFX_488cb
+	ld hl, VTiles2 tile $11
+	lb bc, BANK(GFX_488cb), 1
+	call Request1bpp
+	call Function4a3a7
+	call ClearBGPalettes
+	ld a, [wd002]
+	bit 6, a
+	jr z, .asm_4808a
+	call Function48689
+	jr .asm_480d7
+.asm_4808a
+	ld a, $5
+	ld [MusicFade], a
+	ld a, MUSIC_MOBILE_ADAPTER_MENU % $100
+	ld [MusicFadeIDLo], a
+	ld a, MUSIC_MOBILE_ADAPTER_MENU / $100
+	ld [MusicFadeIDHi], a
+	ld c, 20
+	call DelayFrames
+	ld b, $1
+	call Function4930f
+	call ClearBGPalettes
+	hlcoord 0, 0
+	ld b, $2
+	ld c, $14
+	call ClearBox
+	hlcoord 0, 1
+	ld a, $c
+	ld [hl], a
+	ld bc, $13
+	add hl, bc
+	ld [hl], a
+	ld de, MobileProfileString
+	hlcoord 1, 1
+	call PlaceString
+	hlcoord 0, 2
+	ld b, $a
+	ld c, $12
+	call Function48cdc
+	hlcoord 2, 4
+	ld de, String_48482
+	call PlaceString
+.asm_480d7
+	hlcoord 2, 6
+	ld de, String_48489
+	call PlaceString
+	hlcoord 2, 8
+	ld de, String_4848d
+	call PlaceString
+	hlcoord 2, 10
+	ld de, String_48495
+	call PlaceString
+	hlcoord 2, 12
+	ld de, String_4849e
+	call PlaceString
+	ld a, [wd002]
+	bit 6, a
+	jr nz, .asm_48113
+	ld a, [PlayerGender]
+	ld hl, Strings_484fb
+	call GetNthString
+	ld d, h
+	ld e, l
+	hlcoord 11, 4
+	call PlaceString
+.asm_48113
+	hlcoord 11, 6
+	call Function487ec
+	ld a, [wd474]
+	dec a
+	ld hl, Prefectures
+	call GetNthString
+	ld d, h
+	ld e, l
+	hlcoord 11, 8
+	call PlaceString
+	hlcoord 11, 10
+	call Function489ea
+	hlcoord 0, 14
+	ld b, $2
+	ld c, $12
+	call TextBox
+	hlcoord 1, 16
+	ld de, String_48275
+	call PlaceString
+	call Function48187
+	call Function3200
+	call SetPalettes
+	call Function1bc9
+	ld hl, MenuSelection2
+	ld b, [hl]
+	push bc
+	jr asm_4815f
+
+Function48157: ; 48157 (12:4157)
+	call Function1bd3
+	ld hl, MenuSelection2
+	ld b, [hl]
+	push bc
+
+asm_4815f: ; 4815f (12:415f)
+	bit 0, a
+	jp nz, Function4820d
+	ld b, a
+	ld a, [wd002]
+	bit 6, a
+	jr z, .asm_48177
+	ld hl, wd479
+	bit 1, [hl]
+	jr z, .asm_48177
+	bit 1, b
+	jr nz, .asm_4817a
+.asm_48177
+	jp Function48272
+.asm_4817a
+	call ClearBGPalettes
+	call Function48d30
+	pop bc
+	call ClearTileMap
+	ld a, $ff
+	ret
+
+Function48187: ; 48187 (12:4187)
+	ld a, [wd479]
+	bit 1, a
+	jr nz, .asm_481f1
+	ld a, [wd003]
+	ld d, a
+	call Function48725
+	jr c, .asm_481a2
+	lb bc, 1, 4
+	hlcoord 2, 12
+	call ClearBox
+	jr .asm_481ad
+.asm_481a2
+	push de
+	hlcoord 2, 12
+	ld de, String_4849e
+	call PlaceString
+	pop de
+.asm_481ad
+	ld a, [wd002]
+	bit 6, a
+	jr nz, .asm_481c1
+	bit 0, d
+	jr nz, .asm_481c1
+	lb bc, 1, 8
+	hlcoord 11, 4
+	call ClearBox
+.asm_481c1
+	bit 1, d
+	jr nz, .asm_481ce
+	lb bc, 1, 8
+	hlcoord 11, 6
+	call ClearBox
+.asm_481ce
+	bit 2, d
+	jr nz, .asm_481db
+	lb bc, 2, 8
+	hlcoord 11, 7
+	call ClearBox
+.asm_481db
+	bit 3, d
+	jr nz, .asm_481f1
+	ld a, [wd479]
+	bit 0, a
+	jr nz, .asm_481f8
+	lb bc, 1, 8
+	hlcoord 11, 10
+	call ClearBox
+	jr .asm_48201
+.asm_481f1
+	ld a, [wd479]
+	bit 0, a
+	jr nz, .asm_48201
+.asm_481f8
+	hlcoord 11, 10
+	ld de, String_48202
+	call PlaceString
+.asm_48201
+	ret
+; 48202 (12:4202)
+
+String_48202: ; 48202
+	db "Tell Later@"
+; 4820d
+
+Function4820d: ; 4820d (12:420d)
+	call Function1bee
+	ld hl, MenuSelection2
+	ld a, [hl]
+	push af
+	ld a, [wd002]
+	bit 6, a
+	jr z, .asm_4821f
+	pop af
+	inc a
+	push af
+.asm_4821f
+	pop af
+	cp $1
+	jr z, asm_4828d
+	cp $2
+	jp z, Function4876f
+	cp $3
+	jp z, Function48304
+	cp $4
+	jp z, Function488d3
+	ld a, $2
+	call Function1ff8
+	ld a, [wd002]
+	bit 6, a
+	jr z, .asm_4825c
+	jr .asm_4825c
+; 48241 (12:4241)
+
+	hlcoord 1, 15
+	ld b, $2
+	ld c, $12
+	call ClearBox
+	ld de, String_484a1
+	hlcoord 1, 16
+	call PlaceString
+	call WaitBGMap
+	ld c, 48
+	call DelayFrames
+
+.asm_4825c
+	call ClearBGPalettes
+	call Function48d30
+	pop bc
+	call ClearTileMap
+	ld b, SCGB_08
+	call GetSGBLayout
+	ld hl, wd479
+	set 1, [hl]
+	xor a
+	ret
+
+Function48272: ; 48272 (12:4272)
+	jp Function4840c
+; 48275 (12:4275)
+
+String_48275: ; 48275
+	db "Personal Info@"
+; 48283
+
+Function48283: ; 48283 (12:4283)
+	lb bc, 2, 18
+	hlcoord 1, 15
+	call ClearBox
+	ret
+
+asm_4828d: ; 4828d (12:428d)
+	call Function48283
+	hlcoord 1, 16
+	ld de, String_484b1
+	call PlaceString
+	ld hl, MenuDataHeader_0x484f1
+	call LoadMenuDataHeader
+	call Function4873c
+	hlcoord 11, 2
+	ld b, $4
+	ld c, $7
+	call Function48cdc
+	hlcoord 13, 4
+	ld de, String_484fb
+	call PlaceString
+	hlcoord 13, 6
+	ld de, String_484ff
+	call PlaceString
+	call WaitBGMap
+	ld a, [PlayerGender]
+	inc a
+	ld [wMenuCursorBuffer], a
+	call Function1bc9
+	call PlayClickSFX
+	call ExitMenu
+	bit 0, a
+	jp z, Function4840c
+	ld hl, MenuSelection2
+	ld a, [hl]
+	ld hl, Strings_484fb
+	cp $1
+	jr z, .asm_482ed
+.asm_482e1
+	ld a, [hli]
+	cp $50
+	jr nz, .asm_482e1
+	ld a, $1
+	ld [PlayerGender], a
+	jr .asm_482f1
+.asm_482ed
+	xor a
+	ld [PlayerGender], a
+.asm_482f1
+	ld d, h
+	ld e, l
+	hlcoord 11, 4
+	call PlaceString
+	ld a, [wd003]
+	set 0, a
+	ld [wd003], a
+	jp Function4840c
+
+Function48304: ; 48304 (12:4304)
+	call Function48283
+	hlcoord 1, 16
+	ld de, String_484cf
+	call PlaceString
+	ld hl, MenuDataHeader_0x48504
+	call LoadMenuDataHeader
+	ld hl, MenuDataHeader_0x48513
+	call LoadMenuDataHeader
+	hlcoord 10, 0
+	ld b, $c
+	ld c, $8
+	call Function48cdc
+	ld a, [wMenuCursorBuffer]
+	ld b, a
+	ld a, [wMenuScrollPosition]
+	ld c, a
+	push bc
+	ld a, [wd474]
+	dec a
+	cp $29
+	jr c, .asm_4833f
+	sub $29
+	inc a
+	ld [wMenuCursorBuffer], a
+	ld a, $29
+.asm_4833f
+	ld [wMenuScrollPosition], a
+	callba Function104148
+.asm_48348
+	call HandleScrollingMenu
+	ld de, $629
+	call Function48383
+	jr c, .asm_48348
+	ld d, a
+	pop bc
+	ld a, b
+	ld [wMenuCursorBuffer], a
+	ld a, c
+	ld [wMenuScrollPosition], a
+	ld a, d
+	push af
+	call ExitMenu
+	call ExitMenu
+	pop af
+	ld a, [hJoyPressed]
+	bit 0, a
+	jr z, .asm_48377
+	call Function483bb
+	ld a, [wd003]
+	set 2, a
+	ld [wd003], a
+.asm_48377
+	call Function48187
+	callba Function104148
+	jp Function4840c
+
+Function48383: ; 48383 (12:4383)
+	push bc
+	push af
+	bit 5, a
+	jr nz, .asm_48390
+	bit 4, a
+	jr nz, .asm_4839f
+	and a
+	jr .asm_483b7
+.asm_48390
+	ld a, [wMenuScrollPosition]
+	sub d
+	ld [wMenuScrollPosition], a
+	jr nc, .asm_483af
+	xor a
+	ld [wMenuScrollPosition], a
+	jr .asm_483af
+.asm_4839f
+	ld a, [wMenuScrollPosition]
+	add d
+	ld [wMenuScrollPosition], a
+	cp e
+	jr c, .asm_483af
+	ld a, e
+	ld [wMenuScrollPosition], a
+	jr .asm_483af
+.asm_483af
+	ld hl, MenuSelection2
+	ld a, [hl]
+	ld [wMenuCursorBuffer], a
+	scf
+.asm_483b7
+	pop bc
+	ld a, b
+	pop bc
+	ret
+
+Function483bb: ; 483bb (12:43bb)
+	ld hl, wcf77
+	ld a, [hl]
+	inc a
+	ld [wd474], a
+	dec a
+	ld b, a
+	ld hl, Prefectures
+.asm_483c8
+	and a
+	jr z, .asm_483d5
+.asm_483cb
+	ld a, [hli]
+	cp "@"
+	jr nz, .asm_483cb
+	ld a, b
+	dec a
+	ld b, a
+	jr .asm_483c8
+.asm_483d5
+	ld d, h
+	ld e, l
+	ld b, $2
+	ld c, $8
+	hlcoord 11, 7
+	call ClearBox
+	hlcoord 11, 8
+	call PlaceString
+	ret
+; 483e8 (12:43e8)
+
+Function483e8: ; 483e8
+	push de
+	ld hl, Prefectures
+	ld a, [MenuSelection]
+	cp $ff
+	jr nz, .asm_483f8
+	ld hl, Wakayama ; last string
+	jr .asm_48405
+
+.asm_483f8
+	ld d, a
+	and a
+	jr z, .asm_48405
+.asm_483fc
+	ld a, [hli]
+	cp "@"
+	jr nz, .asm_483fc
+	ld a, d
+	dec a
+	jr .asm_483f8
+
+.asm_48405
+	ld d, h
+	ld e, l
+	pop hl
+	call PlaceString
+	ret
+; 4840c
+
+Function4840c: ; 4840c (12:440c)
+	call Function48187
+	call Function48283
+	hlcoord 1, 16
+	ld de, String_48275
+	call PlaceString
+	call Function486bf
+	pop bc
+	ld hl, MenuSelection2
+	ld [hl], b
+	ld a, [wd002]
+	bit 6, a
+	jr nz, .asm_48437
+	ld b, $9
+	ld c, $1
+	hlcoord 1, 4
+	call ClearBox
+	jp Function48157
+.asm_48437
+	ld b, $7
+	ld c, $1
+	hlcoord 1, 6
+	call ClearBox
+	jp Function48157
+
+Function48444: ; 48444 (12:4444)
+	push bc
+	push af
+	push de
+	push hl
+	ld hl, Unknown_4845d
+.asm_4844b
+	and a
+	jr z, .asm_48453
+rept 2
+	inc hl
+endr
+	dec a
+	jr .asm_4844b
+.asm_48453
+	ld d, h
+	ld e, l
+	pop hl
+	call PlaceString
+	pop de
+	pop af
+	pop bc
+	ret
+; 4845d (12:445d)
+
+Unknown_4845d: ; 4845d
+; 4845d
+	db "0@"
+	db "1@"
+	db "2@"
+	db "3@"
+	db "4@"
+	db "5@"
+	db "6@"
+	db "7@"
+	db "8@"
+	db "9@"
+; 48471
+
+MobileProfileString: db "  Mobile Profile@"
+String_48482: db "Gender@"
+String_48489: db "Age@"
+String_4848d: db "Address@"
+String_48495: db "Zip Code@"
+String_4849e: db "OK@"
+String_484a1: db "Profile Changed@"
+String_484b1: db "Boy or girl?@"
+String_484be: db "How old are you?@"
+String_484cf: db "Where do you live?@"
+String_484e2: db "Your zip code?@"
+; 484f1
+
+MenuDataHeader_0x484f1: ; 0x484f1
+	db $40 ; flags
+	db 02, 11 ; start coords
+	db 07, 19 ; end coords
+	dw MenuData2_0x484f9
+	db 1 ; default option
+; 0x484f9
+
+MenuData2_0x484f9: ; 0x484f9
+	db $a0 ; flags
+	db 2 ; items
+Strings_484fb:
+String_484fb: db "Boy@"
+String_484ff: db "Girl@"
+; 0x48504
+
+MenuDataHeader_0x48504: ; 0x48504
+	db $40 ; flags
+	db 00, 10 ; start coords
+	db 17, 19 ; end coords
+
+MenuDataHeader_0x48509: ; 0x48509
+	db $40 ; flags
+	db 05, 10 ; start coords
+	db 07, 19 ; end coords
+
+MenuDataHeader_0x4850e: ; 0x4850e
+	db $40 ; flags
+	db 09, 10 ; start coords
+	db 11, 19 ; end coords
+
+MenuDataHeader_0x48513: ; 0x48513
+	db $40 ; flags
+	db 01, 11 ; start coords
+	db 12, 18 ; end coords
+	dw MenuData2_0x4851b
+	db 1 ; default option
+; 0x4851b
+
+MenuData2_0x4851b: ; 0x4851b
+	db $1d ; flags
+	db 6 ; items
+
+Unknown_4851d: ; 4851d
+	db $00, $01, $12, $2b, $45, $12, $e8, $43, $00, $00, $00, $00, $00, $00, $2e, $00, $01, $02, $03, $04
+	db $05, $06, $07, $08, $09, $0a, $0b, $0c, $0d, $0e, $0f, $10, $11, $12, $13, $14, $15, $16, $17, $18
+	db $19, $1a, $1b, $1c, $1d, $1e, $1f, $20, $21, $22, $23, $24, $25, $26, $27, $28, $29, $2a, $2b, $2c
+	db $2d, $ff
+
+Prefectures:
+Aichi:     db "あいちけん@"   ; Aichi
+Aomori:    db "あおもりけん@" ; Aomori
+Akita:     db "あきたけん@"   ; Akita
+Ishikawa:  db "いしかわけん@" ; Ishikawa
+Ibaraki:   db "いばらきけん@" ; Ibaraki
+Iwate:     db "いわてけん@"   ; Iwate
+Ehime:     db "えひめけん@"   ; Ehime
+Oita:      db "おおいたけん@" ; Oita
+Osakafu:   db "おおさかふ@"   ; Osakafu
+Okayama:   db "おかやまけん@" ; Okayama
+Okinawa:   db "おきなわけん@" ; Okinawa
+Kagawa:    db "かがわけん@"   ; Kagawa
+Kagoshima: db "かごしまけん@" ; Kagoshima
+Kanagawa:  db "かながわけん@" ; Kanagawa
+Gifu:      db "ぎふけん@"     ; Gifu
+Kyotofu:   db "きょうとふ@"   ; Kyotofu
+Kumamoto:  db "くまもとけん@" ; Kumamoto
+Gunma:     db "ぐんまけん@"   ; Gunma
+Kochi:     db "こうちけん@"   ; Kochi
+Saitama:   db "さいたまけん@" ; Saitama
+Saga:      db "さがけん@"     ; Saga
+Shiga:     db "しがけん@"     ; Shiga
+Shizuoka:  db "しずおかけん@" ; Shizuoka
+Shimane:   db "しまねけん@"   ; Shimane
+Chiba:     db "ちばけん@"     ; Chiba
+Tokyo:     db "とうきょうと@" ; Tokyo
+Tokushima: db "とくしまけん@" ; Tokushima
+Tochigi:   db "とちぎけん@"   ; Tochigi
+Tottori:   db "とっとりけん@" ; Tottori
+Toyama:    db "とやまけん@"   ; Toyama
+Nagasaki:  db "ながさきけん@" ; Nagasaki
+Nagano:    db "ながのけん@"   ; Nagano
+Naraken:   db "ならけん@"     ; Naraken
+Niigata:   db "にいがたけん@" ; Niigata
+Hyogo:     db "ひょうごけん@" ; Hyogo
+Hiroshima: db "ひろしまけん@" ; Hiroshima
+Fukui:     db "ふくいけん@"   ; Fukui
+Fukuoka:   db "ふくおかけん@" ; Fukuoka
+Fukushima: db "ふくしまけん@" ; Fukushima
+Hokkaido:  db "ほっかいどう@" ; Hokkaido
+Mie:       db "みえけん@"     ; Mie
+Miyagi:    db "みやぎけん@"   ; Miyagi
+Miyazaki:  db "みやざきけん@" ; Miyazaki
+Yamagata:  db "やまがたけん@" ; Yamagata
+Yamaguchi: db "やまぐちけん@" ; Yamaguchi
+Yamanashi: db "やまなしけん@" ; Yamanashi
+Wakayama:  db "わかやまけん@" ; Wakayama
+; 48689
+
+Function48689: ; 48689 (12:4689)
+	ld c, 7
+	call DelayFrames
+	ld b, $1
+	call Function4930f
+	call ClearBGPalettes
+	hlcoord 0, 0
+	ld b, $4
+	ld c, $14
+	call ClearBox
+	hlcoord 0, 2
+	ld a, $c
+	ld [hl], a
+	ld bc, $13
+	add hl, bc
+	ld [hl], a
+	ld de, MobileProfileString
+	hlcoord 1, 2
+	call PlaceString
+	hlcoord 0, 4
+	ld b, $8
+	ld c, $12
+	call Function48cdc
+	ret
+
+Function486bf: ; 486bf (12:46bf)
+	ld hl, wcfa1
+	ld a, [wd002]
+	bit 6, a
+	jr nz, .asm_486ce
+	ld a, $4
+	ld [hli], a
+	jr .asm_486d1
+.asm_486ce
+	ld a, $6
+	ld [hli], a
+.asm_486d1
+	ld a, $1
+	ld [hli], a
+	ld a, [wd002]
+	bit 6, a
+	jr nz, .asm_486e7
+	call Function48725
+	ld a, $4
+	jr nc, .asm_486e4
+	ld a, $5
+.asm_486e4
+	ld [hli], a
+	jr .asm_486fb
+.asm_486e7
+	ld a, [wd479]
+	bit 1, a
+	jr nz, .asm_486f8
+	call Function48725
+	jr c, .asm_486f8
+	ld a, $3
+	ld [hli], a
+	jr .asm_486fb
+.asm_486f8
+	ld a, $4
+	ld [hli], a
+.asm_486fb
+	ld a, $1
+	ld [hli], a
+	ld [hl], $0
+	set 5, [hl]
+	inc hl
+	xor a
+	ld [hli], a
+	ld a, $20
+	ld [hli], a
+	ld a, $1
+	add $40
+	add $80
+	push af
+	ld a, [wd002]
+	bit 6, a
+	jr z, .asm_4871a
+	pop af
+	add $2
+	push af
+.asm_4871a
+	pop af
+	ld [hli], a
+	ld a, $1
+rept 2
+	ld [hli], a
+endr
+	xor a
+rept 3
+	ld [hli], a
+endr
+	ret
+
+Function48725: ; 48725 (12:4725)
+	ld a, [wd003]
+	bit 0, a
+	jr z, .asm_4873a
+	bit 1, a
+	jr z, .asm_4873a
+	bit 2, a
+	jr z, .asm_4873a
+	bit 3, a
+	jr z, .asm_4873a
+	scf
+	ret
+.asm_4873a
+	and a
+	ret
+
+Function4873c: ; 4873c (12:473c)
+	ld hl, wcfa1
+	ld a, $4
+	ld [hli], a
+	ld a, $c
+	ld [hli], a
+	ld a, $2
+	ld [hli], a
+	ld a, $1
+	ld [hli], a
+	ld [hl], $0
+	set 5, [hl]
+	inc hl
+	xor a
+	ld [hli], a
+	ld a, $20
+	ld [hli], a
+	ld a, $1
+	add $2
+	ld [hli], a
+	ld a, [PlayerGender]
+	and a
+	jr z, .asm_48764
+	ld a, $2
+	jr .asm_48766
+.asm_48764
+	ld a, $1
+.asm_48766
+	ld [hli], a
+	ld a, $1
+	ld [hli], a
+	xor a
+rept 3
+	ld [hli], a
+endr
+	ret
+
+Function4876f: ; 4876f (12:476f)
+	call Function48283
+	hlcoord 1, 16
+	ld de, String_484be
+	call PlaceString
+	ld hl, MenuDataHeader_0x48509
+	call LoadMenuDataHeader
+	ld a, [hInMenu]
+	push af
+	ld a, $1
+	ld [hInMenu], a
+	hlcoord 10, 5
+	ld b, $1
+	ld c, $8
+	call Function48cdc
+	call WaitBGMap
+	ld a, [wd473]
+	and a
+	jr z, .asm_487ab
+	cp $64
+	jr z, .asm_487b2
+	hlcoord 12, 5
+	ld [hl], $10
+	hlcoord 12, 7
+	ld [hl], $11
+	jr .asm_487b7
+.asm_487ab
+	hlcoord 12, 5
+	ld [hl], $10
+	jr .asm_487b7
+.asm_487b2
+	hlcoord 12, 7
+	ld [hl], $11
+.asm_487b7
+	hlcoord 11, 6
+	call Function487ec
+	ld c, 10
+	call DelayFrames
+	ld a, [wd473]
+	push af
+.asm_487c6
+	call JoyTextDelay
+	call Function4880e
+	jr nc, .asm_487c6
+	ld a, $1
+	call Function1ff8
+	pop bc
+	jr nz, .asm_487da
+	ld a, b
+	ld [wd473], a
+.asm_487da
+	ld a, [wd473]
+	call ExitMenu
+	hlcoord 11, 6
+	call Function487ec
+	pop af
+	ld [hInMenu], a
+	jp Function4840c
+
+Function487ec: ; 487ec (12:47ec)
+	push hl
+	ld de, wd473
+	call Function487ff
+	pop hl
+rept 4
+	inc hl
+endr
+	ld de, String_4880d
+	call PlaceString
+	ret
+
+Function487ff: ; 487ff (12:47ff)
+	push hl
+	ld a, " "
+	ld [hli], a
+	ld [hl], a
+	pop hl
+	ld b, PRINTNUM_LEADINGZEROS | 1
+	ld c, 3
+	call PrintNum
+	ret
+; 4880d (12:480d)
+
+String_4880d: ; 4880d
+	db "@"
+; 4880e
+
+Function4880e: ; 4880e (12:480e)
+	ld a, [hJoyPressed]
+	and A_BUTTON
+	jp nz, Function488b9
+	ld a, [hJoyPressed]
+	and B_BUTTON
+	jp nz, Function488b4
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, .asm_48843
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .asm_48838
+	ld a, [hl]
+	and D_LEFT
+	jr nz, .asm_4884f
+	ld a, [hl]
+	and D_RIGHT
+	jr nz, .asm_4885f
+	call DelayFrame
+	and a
+	ret
+.asm_48838
+	ld hl, wd473
+	ld a, [hl]
+	and a
+	jr z, .asm_48840
+	dec a
+.asm_48840
+	ld [hl], a
+	jr .asm_4886f
+.asm_48843
+	ld hl, wd473
+	ld a, [hl]
+	cp $64
+	jr nc, .asm_4884c
+	inc a
+.asm_4884c
+	ld [hl], a
+	jr .asm_4886f
+.asm_4884f
+	ld a, [wd473]
+	cp $5b
+	jr c, .asm_48858
+	ld a, $5a
+.asm_48858
+	add $a
+	ld [wd473], a
+	jr .asm_4886f
+.asm_4885f
+	ld a, [wd473]
+	cp $a
+	jr nc, .asm_48868
+	ld a, $a
+.asm_48868
+	sub $a
+	ld [wd473], a
+	jr .asm_4886f
+.asm_4886f
+	ld a, [wd473]
+	and a
+	jr z, .asm_48887
+	cp $64
+	jr z, .asm_48898
+	jr z, .asm_488a7
+	hlcoord 12, 5
+	ld [hl], $10
+	hlcoord 12, 7
+	ld [hl], $11
+	jr .asm_488a7
+.asm_48887
+	hlcoord 10, 5
+	ld b, $1
+	ld c, $8
+	call Function48cdc
+	hlcoord 12, 5
+	ld [hl], $10
+	jr .asm_488a7
+.asm_48898
+	hlcoord 10, 5
+	ld b, $1
+	ld c, $8
+	call Function48cdc
+	hlcoord 12, 7
+	ld [hl], $11
+.asm_488a7
+	hlcoord 11, 6
+	call Function487ec
+	call WaitBGMap
+	ld a, $1
+	and a
+	ret
+
+Function488b4: ; 488b4 (12:48b4)
+	ld a, $0
+	and a
+	scf
+	ret
+
+Function488b9: ; 488b9 (12:48b9)
+	ld a, [wd003]
+	set 1, a
+	ld [wd003], a
+	scf
+	ret
+; 488c3 (12:48c3)
+
+GFX_488c3: ; 488c3
+INCBIN "gfx/unknown/0488c3.2bpp"
+
+GFX_488cb: ; 488cb
+INCBIN "gfx/unknown/0488cb.2bpp"
+
+Function488d3: ; 488d3 (12:48d3)
+	call Function48283
+	hlcoord 1, 16
+	ld de, String_484e2
+	call PlaceString
+	call Function48a3a
+	jp c, Function4840c
+	ld hl, MenuDataHeader_0x4850e
+	call LoadMenuDataHeader
+	ld a, [hInMenu]
+	push af
+	ld a, $1
+	ld [hInMenu], a
+	hlcoord 10, 9
+	ld b, $1
+	ld c, $8
+	call Function48cdc
+	ld a, [wd475]
+	and $f
+	ld d, $0
+	hlcoord 11, 10
+	call Function489ea
+	call WaitBGMap
+	ld a, [wd475]
+	ld b, a
+	ld a, [wd476]
+	ld c, a
+	ld a, [wd477]
+	ld d, a
+	ld a, [wd478]
+	ld e, a
+	push de
+	push bc
+	ld d, $0
+	ld b, $0
+
+asm_48922: ; 48922 (12:4922)
+	push bc
+	call JoyTextDelay
+	ld a, [hJoyDown]
+	and a
+	jp z, Function4896e
+	bit 0, a
+	jp nz, Function4896e
+	bit 1, a
+	jp nz, Function4896e
+	ld a, [wd002]
+	and %11001111
+	res 7, a
+	ld [wd002], a
+	pop bc
+	inc b
+	ld a, b
+	cp $5
+	push bc
+	jr c, .asm_4894c
+	pop bc
+	ld b, $4
+	push bc
+.asm_4894c
+	pop bc
+	push bc
+	ld a, b
+	cp $4
+	jr nz, asm_48972
+	ld c, 10
+	call DelayFrames
+	jr asm_48972
+; 4895a (12:495a)
+
+Function4895a: ; 4895a
+	ld a, [hJoyPressed]
+	and a
+	jr z, .asm_48965
+	pop bc
+	ld b, $1
+	push bc
+	jr asm_48972
+
+.asm_48965
+	ld a, [hJoyLast]
+	and a
+	jr z, asm_48972
+
+	pop bc
+	ld b, $1
+	push bc
+
+Function4896e: ; 4896e (12:496e)
+	pop bc
+	ld b, $0
+	push bc
+
+asm_48972: ; 48972 (12:4972)
+	call Function48ab5
+	push af
+	cp $f0
+	jr z, .asm_48994
+	cp $f
+	jr nz, .asm_48988
+	ld a, [wd002]
+	set 7, a
+	and $cf
+	ld [wd002], a
+.asm_48988
+	hlcoord 11, 10
+	ld b, $0
+	ld c, d
+	add hl, bc
+	ld b, $3
+	call Function48c11
+.asm_48994
+	call WaitBGMap
+	pop af
+	pop bc
+	jr nc, asm_48922
+	jr nz, .asm_489b1
+	pop bc
+	ld a, b
+	ld [wd475], a
+	ld a, c
+	ld [wd476], a
+	pop bc
+	ld a, b
+	ld [wd477], a
+	ld a, c
+	ld [wd478], a
+	jr .asm_489c5
+.asm_489b1
+	push af
+	ld a, [wd479]
+	set 0, a
+	ld [wd479], a
+	ld a, [wd003]
+	set 3, a
+	ld [wd003], a
+	pop af
+	pop bc
+	pop bc
+.asm_489c5
+	push af
+	push bc
+	push de
+	push hl
+	ld a, $1
+	call Function1ff8
+	pop hl
+	pop de
+	pop bc
+	pop af
+	call ExitMenu
+	hlcoord 11, 10
+	call Function489ea
+	hlcoord 11, 9
+	lb bc, 1, 8
+	call ClearBox
+	pop af
+	ld [hInMenu], a
+	jp Function4840c
+
+Function489ea: ; 489ea (12:49ea)
+	push de
+	ld a, [wd475]
+	and $f
+	call Function48444
+	ld a, [wd476]
+	and $f0
+	swap a
+	inc hl
+	call Function48444
+	ld a, [wd476]
+	and $f
+	inc hl
+	call Function48444
+	inc hl
+	ld de, String_48a38
+	call PlaceString
+	ld a, [wd477]
+	and $f0
+	swap a
+	inc hl
+	call Function48444
+	ld a, [wd477]
+	and $f
+	inc hl
+	call Function48444
+	ld a, [wd478]
+	and $f0
+	swap a
+	inc hl
+	call Function48444
+	ld a, [wd478]
+	and $f
+	inc hl
+	call Function48444
+	pop de
+	ret
+; 48a38 (12:4a38)
+
+String_48a38: ; 48a38
+	db "-@"
+; 48a3a
+
+Function48a3a: ; 48a3a (12:4a3a)
+	ld hl, MenuDataHeader_0x48a9c
+	call LoadMenuDataHeader
+	call Function4873c
+	ld a, $a
+	ld [wcfa1], a
+	ld a, $b
+	ld [wcfa2], a
+	ld a, $1
+	ld [MenuSelection2], a
+	hlcoord 10, 8
+	ld b, $4
+	ld c, $8
+	call Function48cdc
+	hlcoord 12, 10
+	ld de, String_48aa1
+	call PlaceString
+	call Function1bc9
+	push af
+	call PlayClickSFX
+	call ExitMenu
+	pop af
+	bit 1, a
+	jp nz, Function48a9a
+	ld a, [MenuSelection2]
+	cp $1
+	jr z, .asm_48a98
+	ld a, [wd003]
+	set 3, a
+	ld [wd003], a
+	ld a, [wd479]
+	res 0, a
+	ld [wd479], a
+	xor a
+	ld bc, $4
+	ld hl, wd475
+	call ByteFill
+	jr Function48a9a
+.asm_48a98
+	and a
+	ret
+
+Function48a9a: ; 48a9a (12:4a9a)
+	scf
+	ret
+; 48a9c (12:4a9c)
+
+MenuDataHeader_0x48a9c: ; 0x48a9c
+	db $40 ; flags
+	db 08, 10 ; start coords
+	db 13, 19 ; end coord
+
+String_48aa1: ; 48aa1
+	db   "Tell Now"
+	next "Tell Later@"
+; 48ab5
+
+
+Function48ab5: ; 48ab5 (12:4ab5)
+	ld a, [hJoyPressed]
+	and A_BUTTON
+	jp nz, Function48c0f
+	ld a, [hJoyPressed]
+	and B_BUTTON
+	jp nz, Function48c0d
+	ld a, d
+	and a
+	jr z, .asm_48adf
+	cp $1
+	jr z, .asm_48ae7
+	cp $2
+	jr z, .asm_48af1
+	cp $3
+	jr z, .asm_48af9
+	cp $4
+	jr z, .asm_48b03
+	cp $5
+	jr z, .asm_48b0b
+	cp $6
+	jr .asm_48b15
+.asm_48adf
+	ld hl, wd475
+	ld a, [hl]
+	and $f
+	jr .asm_48b1d
+.asm_48ae7
+	ld hl, wd476
+	ld a, [hl]
+	swap a
+	or $f0
+	jr .asm_48b1d
+.asm_48af1
+	ld hl, wd476
+	ld a, [hl]
+	and $f
+	jr .asm_48b1d
+.asm_48af9
+	ld hl, wd477
+	ld a, [hl]
+	swap a
+	or $f0
+	jr .asm_48b1d
+.asm_48b03
+	ld hl, wd477
+	ld a, [hl]
+	and $f
+	jr .asm_48b1d
+.asm_48b0b
+	ld hl, wd478
+	ld a, [hl]
+	swap a
+	or $f0
+	jr .asm_48b1d
+.asm_48b15
+	ld hl, wd478
+	ld a, [hl]
+	and $f
+	jr .asm_48b1d
+.asm_48b1d
+	push hl
+	push af
+	ld e, $0
+	hlcoord 11, 10
+	ld a, d
+.asm_48b25
+	and a
+	jr z, .asm_48b2c
+	inc e
+	dec a
+	jr .asm_48b25
+.asm_48b2c
+	ld hl, hJoyLast
+	ld a, [hl]
+	and D_UP
+	jr nz, .asm_48b8d
+	ld a, [hl]
+	and D_DOWN
+	jr nz, .asm_48b55
+	ld a, [hl]
+	and D_LEFT
+	jp nz, Function48bd7
+	ld a, [hl]
+	and D_RIGHT
+	jr nz, .asm_48b9d
+	hlcoord 11, 10
+	call Function489ea
+	ld a, [wd002]
+	bit 7, a
+	jr nz, .asm_48b51
+.asm_48b51
+	pop bc
+	pop bc
+	and a
+	ret
+.asm_48b55
+	pop af
+	ld b, a
+	and $f
+	and a
+	ld a, b
+	jr nz, .asm_48b61
+	and $f0
+	add $a
+.asm_48b61
+	dec a
+.asm_48b62
+	push de
+	push af
+	hlcoord 10, 9
+	ld b, $1
+	ld c, $8
+	call Function48cdc
+	pop af
+	pop de
+	hlcoord 11, 10
+	ld b, a
+	ld a, d
+	cp $3
+	jr c, .asm_48b7a
+	inc hl
+.asm_48b7a
+	ld a, b
+	pop hl
+	bit 7, a
+	jr z, .asm_48b85
+	call Function48c4d
+	jr .asm_48b88
+.asm_48b85
+	call Function48c5a
+.asm_48b88
+	ld a, $f0
+	jp Function48c00
+.asm_48b8d
+	pop af
+	ld b, a
+	and $f
+	cp $9
+	ld a, b
+	jr c, .asm_48b9a
+	and $f0
+	add $ff
+.asm_48b9a
+	inc a
+	jr .asm_48b62
+.asm_48b9d
+	push de
+	hlcoord 10, 9
+	ld b, $1
+	ld c, $8
+	call Function48cdc
+	pop de
+	ld a, d
+	cp $6
+	jr nc, .asm_48baf
+	inc d
+.asm_48baf
+	pop af
+	pop hl
+	ld b, a
+	ld a, d
+	cp $6
+	ld a, b
+	jr z, .asm_48bc4
+	bit 7, a
+	jr nz, .asm_48bc4
+	inc hl
+	ld a, [hl]
+	swap a
+	and $f
+	jr asm_48bc7
+.asm_48bc4
+	ld a, [hl]
+	and $f
+
+asm_48bc7: ; 48bc7 (12:4bc7)
+	hlcoord 11, 10
+	push af
+	ld a, d
+	cp $3
+	pop bc
+	ld a, b
+	jr c, .asm_48bd3
+	inc hl
+.asm_48bd3
+	ld a, $f
+	jr Function48c00
+
+Function48bd7: ; 48bd7 (12:4bd7)
+	push de
+	hlcoord 10, 9
+	ld b, $1
+	ld c, $8
+	call Function48cdc
+	pop de
+	ld a, d
+	and a
+	pop af
+	pop hl
+	ld b, a
+	ld a, d
+	and a
+	ld a, b
+	jr z, .asm_48bf3
+	bit 7, a
+	jr z, .asm_48bf8
+	dec d
+	dec hl
+.asm_48bf3
+	ld a, [hl]
+	and $f
+	jr asm_48bc7
+.asm_48bf8
+	dec d
+	ld a, [hl]
+	swap a
+	and $f
+	jr asm_48bc7
+
+Function48c00: ; 48c00 (12:4c00)
+	push af
+	hlcoord 11, 10
+	call Function489ea
+	ld a, $1
+	and a
+	pop bc
+	ld a, b
+	ret
+
+Function48c0d: ; 48c0d (12:4c0d)
+	xor a
+	and a
+
+Function48c0f: ; 48c0f (12:4c0f)
+	scf
+	ret
+
+Function48c11: ; 48c11 (12:4c11)
+	ld a, [wd002]
+	bit 7, a
+	jr z, .asm_48c20
+	ld a, d
+	cp $3
+	jr c, .asm_48c1e
+	inc hl
+.asm_48c1e
+	ld [hl], $7f
+.asm_48c20
+	ld a, [wd002]
+	swap a
+	and $3
+	inc a
+	cp b
+	jr nz, .asm_48c40
+	ld a, [wd002]
+	bit 7, a
+	jr z, .asm_48c3a
+	res 7, a
+	ld [wd002], a
+	xor a
+	jr .asm_48c40
+.asm_48c3a
+	set 7, a
+	ld [wd002], a
+	xor a
+.asm_48c40
+	swap a
+	ld b, a
+	ld a, [wd002]
+	and $cf
+	or b
+	ld [wd002], a
+	ret
+
+Function48c4d: ; 48c4d (12:4c4d)
+	swap a
+	and $f0
+	push af
+	ld a, [hl]
+	and $f
+	ld [hl], a
+	pop af
+	or [hl]
+	ld [hl], a
+	ret
+
+Function48c5a: ; 48c5a (12:4c5a)
+	push af
+	ld a, [hl]
+	and $f0
+	ld [hl], a
+	pop af
+	or [hl]
+	ld [hl], a
+	ret
+
+Function48c63: ; 48c63
+	ld a, "@"
+	ld [de], a
+	ld a, c
+	cp $30
+	jr nc, .asm_48c8c
+	and a
+	jr z, .asm_48c8c
+	dec c
+	push de
+	ld h, d
+	ld l, e
+	ld a, "@"
+	ld b, 7
+.asm_48c76
+	ld [hli], a
+	dec b
+	jr nz, .asm_48c76
+	ld hl, Prefectures
+	ld a, c
+	call GetNthString
+.asm_48c81
+	ld a, [hli]
+	ld [de], a
+	inc de
+	ld a, [hl]
+	cp "@"
+	jr nz, .asm_48c81
+	and a
+	pop de
+	ret
+
+.asm_48c8c
+	scf
+	ret
+; 48c8e
+
+Function48c8e: ; 48c8e
+	ld hl, wd02a
+	ld d, h
+	ld e, l
+	callba Function48c63
+	hlcoord 10, 7
+	call PlaceString
+	call WaitBGMap
+	ret
+; 48ca3
+
+Function48ca3: ; 48ca3
+	push af
+	push bc
+	push de
+	push hl
+	ld b, 0
+	ld c, 0
+	ld d, 0
+.asm_48cad
+	cp 100
+	jr c, .asm_48cb6
+	sub 100
+	inc b
+	jr .asm_48cad
+
+.asm_48cb6
+	cp 10
+	jr c, .asm_48cbf
+	sub 10
+	inc c
+	jr .asm_48cb6
+
+.asm_48cbf
+	cp 1
+	jr c, .asm_48cc7
+	dec a
+	inc d
+	jr .asm_48cbf
+
+.asm_48cc7
+	ld a, b
+	call Function48444
+	inc hl
+	ld a, c
+	call Function48444
+	inc hl
+	ld a, d
+	call Function48444
+	pop hl
+	pop de
+	pop bc
+	pop af
+	ret
+; 48cda
+
+Function48cda: ; 48cda (12:4cda)
+	ld h, d
+	ld l, e
+
+Function48cdc: ; 48cdc (12:4cdc)
+	push bc
+	push hl
+	call Function48cfd
+	pop hl
+	pop bc
+	ld de, AttrMap - TileMap
+	add hl, de
+rept 2
+	inc b
+endr
+rept 2
+	inc c
+endr
+	ld a, $0
+.asm_48ced
+	push bc
+	push hl
+.asm_48cef
+	ld [hli], a
+	dec c
+	jr nz, .asm_48cef
+	pop hl
+	ld de, $14
+	add hl, de
+	pop bc
+	dec b
+	jr nz, .asm_48ced
+	ret
+
+Function48cfd: ; 48cfd (12:4cfd)
+	push hl
+	ld a, $4
+	ld [hli], a
+	inc a
+	call Function48d2a
+	inc a
+	ld [hl], a
+	pop hl
+	ld de, $14
+	add hl, de
+.asm_48d0c
+	push hl
+	ld a, $7
+	ld [hli], a
+	ld a, $7f
+	call Function48d2a
+	ld [hl], $8
+	pop hl
+	ld de, $14
+	add hl, de
+	dec b
+	jr nz, .asm_48d0c
+	ld a, $9
+	ld [hli], a
+	ld a, $a
+	call Function48d2a
+	ld [hl], $b
+	ret
+
+Function48d2a: ; 48d2a (12:4d2a)
+	ld d, c
+.asm_48d2b
+	ld [hli], a
+	dec d
+	jr nz, .asm_48d2b
+	ret
+
+Function48d30: ; 48d30 (12:4d30)
+	ld hl, wd475
+	call Function48d4a
+	ld hl, wd477
+	call Function48d4a
+	ret
+
+Function48d3d: ; 48d3d (12:4d3d)
+	ld hl, wd475
+	call Function48d94
+	ld hl, wd477
+	call Function48d94
+	ret
+
+Function48d4a: ; 48d4a (12:4d4a)
+	inc hl
+	ld a, [hl]
+	ld b, a
+	and $f
+	ld c, a
+	srl b
+	srl b
+	srl b
+	srl b
+	push bc
+	ld c, 10
+	ld a, b
+	call SimpleMultiply
+	pop bc
+	add c
+	ld [hld], a
+	xor a
+	ld [hMultiplicand + 0], a
+	ld [hMultiplicand + 1], a
+	ld a, [hl]
+	srl a
+	srl a
+	srl a
+	srl a
+	ld c, 10
+	call SimpleMultiply
+	ld b, a
+	ld a, [hli]
+	and $f
+	add b
+	ld [hMultiplicand + 2], a
+	ld a, 100
+	ld [hMultiplier], a
+	call Multiply
+	ld a, [hProduct + 2]
+	ld b, a
+	ld a, [hProduct + 3]
+	ld c, a
+	ld e, [hl]
+	add e
+	ld c, a
+	ld a, b
+	adc $0
+	ld b, a
+	ld a, c
+	ld [hld], a
+	ld [hl], b
+	ret
+
+Function48d94: ; 48d94 (12:4d94)
+	xor a
+	ld [hDividend + 0], a
+	ld [hDividend + 1], a
+	ld a, [hli]
+	ld [hDividend + 0], a
+	ld a, [hl]
+	ld [hDividend + 1], a
+	ld a, 100
+	ld [hDivisor], a
+	ld b, 2
+	call Divide
+	ld a, [hDivisor]
+	ld c, $a
+	call SimpleDivide
+	sla b
+	sla b
+	sla b
+	sla b
+	or b
+	ld [hld], a
+	ld a, [hQuotient + 2]
+	ld c, 10
+	call SimpleDivide
+	sla b
+	sla b
+	sla b
+	sla b
+	or b
+	ld [hl], a
+	ret
--- a/misc/mobile_22.asm
+++ b/misc/mobile_22.asm
@@ -93,7 +93,7 @@
 
 Function891ab: ; 891ab
 	call Function89240
-	callba Function104061
+	callba ReloadMapPart
 	call Function8923c
 	ret
 ; 891b8
@@ -150,13 +150,13 @@
 
 Function89209: ; 89209
 	ld a, 1
-	ld [wc2ce], a
+	ld [wSpriteUpdatesEnabled], a
 	ret
 ; 8920f
 
 Function8920f: ; 8920f
 	ld a, 0
-	ld [wc2ce], a
+	ld [wSpriteUpdatesEnabled], a
 	ret
 ; 89215
 
@@ -623,7 +623,7 @@
 	ld a, 5
 	ld [rSVBK], a
 	ld hl, Palette_894b3
-	ld de, wMapPals + 8 * 7
+	ld de, UnknBGPals + 8 * 7
 	ld bc, 8
 	call CopyBytes
 	pop af
@@ -665,9 +665,10 @@
 	push af
 	ld a, 5
 	ld [rSVBK], a
+
 	ld c, d
 	ld b, 0
-	ld hl, Unknown_89509
+	ld hl, .PalettePointers
 rept 2
 	add hl, bc
 endr
@@ -674,13 +675,14 @@
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
-	ld de, wMapPals
-	ld bc, 24
+	ld de, UnknBGPals
+	ld bc, 3 palettes
 	call CopyBytes
-	ld hl, Palette_89557
-	ld de, wd018
-	ld bc, 24
+	ld hl, .Pals345
+	ld de, UnknBGPals + 3 palettes
+	ld bc, 3 palettes
 	call CopyBytes
+
 	pop af
 	ld [rSVBK], a
 	pop bc
@@ -687,13 +689,13 @@
 	ret
 ; 89509
 
-Unknown_89509: ; 89509
-	dw Palette_8950f
-	dw Palette_89527
-	dw Palette_8953f
+.PalettePointers: ; 89509
+	dw .Pals012a
+	dw .Pals012b
+	dw .Pals012c
 ; 8950f
 
-Palette_8950f: ; 8950f
+.Pals012a: ; 8950f
 	RGB 31, 31, 31
 	RGB 10, 17, 13
 	RGB 10, 08, 22
@@ -709,7 +711,7 @@
 	RGB 10, 17, 13
 	RGB 00, 00, 00
 
-Palette_89527: ; 89527
+.Pals012b: ; 89527
 	RGB 31, 31, 31
 	RGB 30, 22, 11
 	RGB 31, 08, 15
@@ -725,7 +727,7 @@
 	RGB 30, 22, 11
 	RGB 00, 00, 00
 
-Palette_8953f: ; 8953f
+.Pals012c: ; 8953f
 	RGB 31, 31, 31
 	RGB 15, 20, 26
 	RGB 25, 07, 20
@@ -741,7 +743,7 @@
 	RGB 15, 20, 26
 	RGB 00, 00, 00
 
-Palette_89557: ; 89557
+.Pals345: ; 89557
 	RGB 31, 31, 31
 	RGB 31, 31, 31
 	RGB 31, 13, 00
@@ -2152,7 +2154,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld c, $8
-	ld de, wMapPals
+	ld de, UnknBGPals
 .asm_89d1c
 	push bc
 	ld hl, Palette_89d4e
@@ -3392,7 +3394,7 @@
 	ld bc, $18
 	call CopyBytes
 	ld hl, Palette_8a5fd
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, $8
 	call CopyBytes
 	ld hl, Palette_8a605
@@ -3439,7 +3441,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, Palette_8a624
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, $0008
 	call CopyBytes
 	pop af
--- a/misc/mobile_22_2.asm
+++ b/misc/mobile_22_2.asm
@@ -610,7 +610,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, Palette_8b6d5
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0018
 	call CopyBytes
 	pop af
@@ -805,7 +805,7 @@
 	ld a, [wd030]
 	ld [wMenuCursorBuffer], a
 	ld a, [wd031]
-	ld [wd0e4], a
+	ld [wMenuScrollPosition], a
 	ld a, [wd032]
 	and a
 	jr z, .asm_8b7e0
@@ -856,13 +856,13 @@
 	ld c, a
 	ld a, [MenuSelection2]
 	ld [wd030], a
-	ld a, [wd0e4]
+	ld a, [wMenuScrollPosition]
 	ld [wd031], a
 	ret
 ; 8b832
 
 Function8b832: ; 8b832
-	ld a, [wd0e4]
+	ld a, [wMenuScrollPosition]
 	ld hl, wMenuData2Items
 	sub [hl]
 	jr nc, Function8b84b
@@ -871,7 +871,7 @@
 ; 8b83e
 
 Function8b83e: ; 8b83e
-	ld a, [wd0e4]
+	ld a, [wMenuScrollPosition]
 	ld hl, wMenuData2Items
 	add [hl]
 	cp $24
@@ -879,7 +879,7 @@
 	ld a, $24
 
 Function8b84b: ; 8b84b
-	ld [wd0e4], a
+	ld [wMenuScrollPosition], a
 	ld a, [MenuSelection2]
 	ld [wMenuCursorBuffer], a
 	ret
@@ -994,7 +994,7 @@
 	hlcoord 19, 13
 	ld a, $11
 	ld [hl], a
-	ld a, [wd0e4]
+	ld a, [wMenuScrollPosition]
 	cp $24
 	ret c
 	hlcoord 0, 13
@@ -1018,7 +1018,7 @@
 Function8b94a: ; 8b94a
 	ld [wd033], a
 	xor a
-	ld [wd0e4], a
+	ld [wMenuScrollPosition], a
 	ld [wd032], a
 	ld [wd0e3], a
 	ld [wd031], a
--- a/misc/mobile_40.asm
+++ b/misc/mobile_40.asm
@@ -171,6 +171,7 @@
 	ld [hFFC9], a
 	ld [hMobile], a
 	ei
+
 	ld a, [wLinkMode]
 	push af
 	xor a
@@ -837,7 +838,7 @@
 Function100534: ; 100534
 	call Function100513
 	call UpdateSprites
-	call Function321c
+	call ApplyTilemap
 	ld a, [wcd28]
 	inc a
 	ld [wcd28], a
@@ -1495,7 +1496,7 @@
 	call PrintNum
 	ld de, SFX_TWO_PC_BEEPS
 	call PlaySFX
-	callba Function104061
+	callba ReloadMapPart
 	ld c, $3c
 	call DelayFrames
 	ret
@@ -1506,7 +1507,7 @@
 	call PlaceString
 	ld de, SFX_4_NOTE_DITTY
 	call PlaySFX
-	callba Function104061
+	callba ReloadMapPart
 	ld c, 120
 	call DelayFrames
 	ret
@@ -1536,7 +1537,7 @@
 	decoord 0, 0
 	call Function1009a5
 	call Function1009ae
-	callba Function104061
+	callba ReloadMapPart
 	ld hl, w3_dd68
 	decoord 0, 0, AttrMap
 	call Function1009a5
@@ -1591,7 +1592,7 @@
 	ld [rVBK], a
 
 	ld hl, w3_d800
-	ld de, VBGMap0
+	debgcoord 0, 0
 	lb bc, $3, $24
 	call Get2bpp
 
@@ -1620,49 +1621,49 @@
 	ret
 ; 100a09
 
-Function100a09: ; 100a09
-	call Function100a2e
+_LinkBattleSendReceiveAction: ; 100a09
+	call .StageForSend
 	ld [wd431], a
-	callba Function4000
+	callba PlaceWaitingText
 	ld a, [wLinkMode]
 	cp LINK_MOBILE
-	jr nz, .asm_100a2a
+	jr nz, .not_mobile
 
 	call Function100a87
 	call Function100da5
 	callba FinishBattleAnim
-	jr .asm_100a2d
+	jr .done
 
-.asm_100a2a
+.not_mobile
 	call Function100a53
 
-.asm_100a2d
+.done
 	ret
 ; 100a2e
 
-Function100a2e: ; 100a2e
-	ld a, [wd0ec]
+.StageForSend: ; 100a2e
+	ld a, [wPlayerAction]
 	and a
-	jr nz, .asm_100a48
+	jr nz, .switch
 	ld a, [CurPlayerMove]
-	ld b, $e
+	ld b, BATTLEACTION_E
 	cp STRUGGLE
-	jr z, .asm_100a4f
-	ld b, $d
+	jr z, .struggle
+	ld b, BATTLEACTION_D
 	cp $ff
-	jr z, .asm_100a4f
+	jr z, .struggle
 	ld a, [CurMoveNum]
-	jr .asm_100a50
+	jr .use_move
 
-.asm_100a48
+.switch
 	ld a, [CurPartyMon]
-	add $4
-	jr .asm_100a50
+	add BATTLEACTION_SWITCH1
+	jr .use_move
 
-.asm_100a4f
+.struggle
 	ld a, b
 
-.asm_100a50
+.use_move
 	and $f
 	ret
 ; 100a53
@@ -1669,29 +1670,32 @@
 
 Function100a53: ; 100a53
 	ld a, [wd431]
-	ld [wcf56], a
+	ld [wPlayerLinkAction], a
 	ld a, $ff
-	ld [wcf52], a
-.asm_100a5e
-	call Function8c1
+	ld [wOtherPlayerLinkAction], a
+.waiting
+	call LinkCommunicationsSendReceive
 	call DelayFrame
-	ld a, [wcf52]
+	ld a, [wOtherPlayerLinkAction]
 	inc a
-	jr z, .asm_100a5e
-	ld b, $a
-.asm_100a6c
+	jr z, .waiting
+
+	ld b, 10
+.receive
 	call DelayFrame
-	call Function8c1
+	call LinkCommunicationsSendReceive
 	dec b
-	jr nz, .asm_100a6c
-	ld b, $a
-.asm_100a77
+	jr nz, .receive
+
+	ld b, 10
+.acknowledge
 	call DelayFrame
-	call Function908
+	call LinkCommunicationsSignalDataReceived
 	dec b
-	jr nz, .asm_100a77
-	ld a, [wcf52]
-	ld [wd430], a
+	jr nz, .acknowledge
+
+	ld a, [wOtherPlayerLinkAction]
+	ld [wBattleAction], a
 	ret
 ; 100a87
 
@@ -1843,7 +1847,7 @@
 	callba Function24085
 	callba MobileTextBorder
 	call UpdateSprites
-	call Function321c
+	call ApplyTilemap
 	callba Function2411a
 	ld hl, wcfa5
 	set 7, [hl]
@@ -1850,10 +1854,10 @@
 	ret
 ; 100b9f
 
-Function100b9f: ; 100b9f
+MobileMoveSelectionScreen: ; 100b9f
 	xor a
 	ld [wd0e3], a
-	callba Function3e786
+	callba CheckPlayerHasUsableMoves
 	ret z
 	call Function100dd8
 	jp c, xor_a_dec_a
@@ -1984,7 +1988,7 @@
 
 Function100c98: ; 100c98
 	ld de, Unknown_100cad
-	call Function1bb1
+	call InitMenu3
 	ld a, [wd0eb]
 	inc a
 	ld [wcfa3], a
@@ -2148,7 +2152,7 @@
 
 Function100dc0: ; 100dc0
 	ld a, [wLinkMode]
-	cp $4
+	cp LINK_MOBILE
 	jr nz, .asm_100dd0
 	ld hl, wcd2a
 	bit 3, [hl]
@@ -2523,7 +2527,7 @@
 	db -1
 
 Unknown_100feb: ; 100feb
-	dbwww $00, sPartyScratch1, SCRATCHMON_STRUCT_LENGTH * PARTY_LENGTH, NULL
+	dbwww $00, sPartyMail, MAIL_STRUCT_LENGTH * PARTY_LENGTH, NULL
 	db -1
 
 Unknown_100ff3: ; 100ff3
@@ -2794,16 +2798,16 @@
 	res 4, [hl]
 	ld hl, GameTimerPause
 	bit 7, [hl]
-	jr z, .asm_101210
+	jr z, .skip
 	ld hl, wdc41
 	set 4, [hl]
 
-.asm_101210
+.skip
 	call Function10209c
 	xor a
 	ld [wdc5f], a
 	ld [wdc60], a
-	ld a, $4
+	ld a, LINK_MOBILE
 	ld [wLinkMode], a
 	ret
 ; 101220
@@ -6305,7 +6309,7 @@
 	ld hl, wcd4b
 	set 1, [hl]
 	ld de, Unknown_102a33
-	call Function1bb1
+	call InitMenu3
 	ld a, [wcd4a]
 	inc a
 	ld [wcd4a], a
@@ -6465,7 +6469,7 @@
 	ld [CurPartyMon], a
 	ld a, $1
 	ld [wd1e9], a
-	callba Function421d8
+	callba EvolvePokemon
 	call Function102d9a
 	call Function102dd3
 	call Function102dec
@@ -6478,7 +6482,7 @@
 	ld a, [MenuSelection2]
 	push af
 	ld de, Unknown_102b73
-	call Function1bb1
+	call InitMenu3
 	pop af
 	ld [MenuSelection2], a
 	ld a, [OTPartyCount]
@@ -6503,7 +6507,7 @@
 	ld a, [MenuSelection2]
 	push af
 	ld de, Unknown_102b94
-	call Function1bb1
+	call InitMenu3
 	pop af
 	ld [MenuSelection2], a
 	ld a, [PartyCount]
@@ -6769,7 +6773,7 @@
 	ld hl, PartyMon1DVs
 	call AddNTimes
 	predef GetUnownLetter
-	callba Functionfba18
+	callba UpdateUnownDex
 	ld a, [wdef4]
 	and a
 	jr nz, .asm_102d98
@@ -6825,7 +6829,7 @@
 
 Function102dec: ; 102dec
 	ld hl, Unknown_1032e2
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, $0020
 	ld a, $5
 	call FarCopyWRAM
@@ -7686,9 +7690,9 @@
 	dw Unknown_103608
 	dw Unknown_1035fe
 
-	dw Function103612
-	dw Function103612
-	dw Function103612
+	dw AskMobileOrCable
+	dw AskMobileOrCable
+	dw AskMobileOrCable
 
 Unknown_1035e7: ; 1035e7
 	dwcoord 0, 6
@@ -7719,18 +7723,18 @@
 	db 2, 2, 3
 ; 103612
 
-Function103612: ; 103612
+AskMobileOrCable: ; 103612
 	ld hl, MenuDataHeader_103640
 	call LoadMenuDataHeader
 	ld a, [wdc40]
 	and $f
-	jr z, .asm_103622
+	jr z, .skip_load
 	ld [wMenuCursorBuffer], a
 
-.asm_103622
+.skip_load
 	call InterpretMenu2
 	call WriteBackup
-	jr c, .asm_10363b
+	jr c, .pressed_b
 	ld a, [MenuSelection2]
 	ld [ScriptVar], a
 	ld c, a
@@ -7740,7 +7744,7 @@
 	ld [wdc40], a
 	ret
 
-.asm_10363b
+.pressed_b
 	xor a
 	ld [ScriptVar], a
 	ret
@@ -7958,16 +7962,16 @@
 	ld c, $0
 	ld hl, SwarmFlags
 	bit 4, [hl]
-	jr nz, .asm_10379c
+	jr nz, .already_set
 	ld c, $1
 	ld hl, SwarmFlags
 	set 4, [hl]
 
-.asm_10379c
+.already_set
 	push bc
-	callba Function14ab2
+	callba Link_SaveGame
 	pop bc
-	jr c, .asm_1037b5
+	jr c, .failed_to_save
 	ld a, $1
 	ld [ScriptVar], a
 	ld a, c
@@ -7976,7 +7980,7 @@
 	callba Function1006fd
 	ret
 
-.asm_1037b5
+.failed_to_save
 	xor a
 	ld [ScriptVar], a
 	ld a, c
@@ -7989,19 +7993,19 @@
 
 Function1037c2: ; 1037c2
 	call Function103823
-	jr c, .asm_1037de
+	jr c, .nope
 	ld a, [wdc5f]
 	and a
-	jr z, .asm_1037de
+	jr z, .nope
 	ld hl, UnknownText_0x1037e6
 	call PrintText
 	call YesNoBox
-	jr c, .asm_1037de
+	jr c, .nope
 	ld a, $1
 	ld [ScriptVar], a
 	ret
 
-.asm_1037de
+.nope
 	xor a
 	ld [wdc5f], a
 	ld [ScriptVar], a
--- a/misc/mobile_41.asm
+++ b/misc/mobile_41.asm
@@ -743,7 +743,9 @@
 	ret
 ; 10630f
 
-Function10630f: ; 10630f
+; functions related to the cable club and various NPC scripts referencing mobile communications
+
+Mobile_DummyReturnFalse: ; 10630f
 	xor a
 	ld [ScriptVar], a
 	ret
@@ -766,8 +768,10 @@
 
 Function10632f: ; 10632f
 	or a
-	mobile
+	ret
 
+Function106331: ; 106331 - called by Mobile_DummyReturnFalse in Crystal-J
+	; check ~[4:b000] == [7:a800]
 	ld a, $4
 	call GetSRAMBank
 	ld a, [$b000]
@@ -781,17 +785,22 @@
 	call CloseSRAM
 	ld a, c
 	cp b
-	jr nz, .asm_106359
+	jr nz, .nope
+
+	; check [7:a800] != 0
 	and a
-	jr z, .asm_106359
-	and $8f
+	jr z, .nope
+
+	; check !([7:a800] & %01110000)
+	and %10001111
 	cp c
-	jr nz, .asm_106359
+	jr nz, .nope
+
 	ld c, a
 	scf
 	ret
 
-.asm_106359
+.nope
 	xor a
 	ld c, a
 	ret
--- a/misc/mobile_42.asm
+++ b/misc/mobile_42.asm
@@ -241,13 +241,13 @@
 Function1081ca: ; 1081ca
 	ld a, $1
 	ld [rVBK], a
-	ld hl, VBGMap0
+	hlbgcoord 0, 0
 	ld bc, $0800
 	ld a, $0
 	call ByteFill
 	ld a, $0
 	ld [rVBK], a
-	ld hl, VBGMap0
+	hlbgcoord 0, 0
 	ld bc, $0800
 	ld a, $7f
 	call ByteFill
@@ -276,7 +276,7 @@
 	ld [CurSpecies], a
 	call GetBaseData
 	pop de
-	predef Function5108b
+	predef FrontpicPredef
 	ret
 ; 108219
 
@@ -459,7 +459,7 @@
 	ld [TempMonDVs], a
 	ld a, [$c6fe]
 	ld [TempMonDVs + 1], a
-	ld b, $1a
+	ld b, SCGB_1A
 	call GetSGBLayout
 	ld a, $e4
 	call DmgToCgbBGPals
@@ -492,14 +492,14 @@
 	ld c, $50
 	call DelayFrames
 	call Function108bec
-	lb de, $54, $58
-	ld a, $20
-	call Function3b2a
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_20
+	call _InitSpriteAnimStruct
 	ld de, SFX_BALL_POOF
 	call PlaySFX
 	hlcoord 0, 0
 	ld bc, $00f0
-	ld a, $7f
+	ld a, " "
 	call ByteFill
 	ld c, $50
 	call Function1082cc
@@ -527,9 +527,9 @@
 	ld [hWX], a
 	ld a, $90
 	ld [hWY], a
-	lb de, $54, $58
-	ld a, $21
-	call Function3b2a
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_21
+	call _InitSpriteAnimStruct
 	call Function108b45
 	ld a, $1
 	call Function108b98
@@ -552,7 +552,7 @@
 	ld [TempMonDVs], a
 	ld a, [wPlayerWrapCount]
 	ld [TempMonDVs + 1], a
-	ld b, $1a
+	ld b, SCGB_1A
 	call GetSGBLayout
 	ld a, $e4
 	call DmgToCgbBGPals
@@ -594,7 +594,7 @@
 	ld [TempMonDVs], a
 	ld a, [$c6fe]
 	ld [TempMonDVs + 1], a
-	ld b, $1a
+	ld b, SCGB_1A
 	call GetSGBLayout
 	ld a, $e4
 	call DmgToCgbBGPals
@@ -627,14 +627,14 @@
 	ld c, $50
 	call DelayFrames
 	call Function108c2b
-	lb de, $54, $58
-	ld a, $20
-	call Function3b2a
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_20
+	call _InitSpriteAnimStruct
 	ld de, SFX_BALL_POOF
 	call PlaySFX
 	hlcoord 0, 0
 	ld bc, $00f0
-	ld a, $7f
+	ld a, " "
 	call ByteFill
 	ld c, $50
 	call Function1082cc
@@ -671,9 +671,9 @@
 	ld [hWX], a
 	ld a, $90
 	ld [hWY], a
-	lb de, $54, $58
-	ld a, $21
-	call Function3b2a
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_21
+	call _InitSpriteAnimStruct
 	call Function108b45
 	ld a, $1
 	call Function108b98
@@ -696,7 +696,7 @@
 	ld [TempMonDVs], a
 	ld a, [wPlayerWrapCount]
 	ld [TempMonDVs + 1], a
-	ld b, $1a
+	ld b, SCGB_1A
 	call GetSGBLayout
 	ld a, $e4
 	call DmgToCgbBGPals
@@ -740,9 +740,9 @@
 	ld [hWX], a
 	ld a, $90
 	ld [hWY], a
-	lb de, $54, $58
-	ld a, $21
-	call Function3b2a
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_21
+	call _InitSpriteAnimStruct
 	call Function108b45
 	ld a, $1
 	call Function108b98
@@ -765,7 +765,7 @@
 	ld [TempMonDVs], a
 	ld a, [wPlayerWrapCount]
 	ld [TempMonDVs + 1], a
-	ld b, $1a
+	ld b, SCGB_1A
 	call GetSGBLayout
 	ld a, $e4
 	call DmgToCgbBGPals
@@ -804,7 +804,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, Palette_109107
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0040
 	call CopyBytes
 	pop af
@@ -850,7 +850,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, Palette_109107
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0040
 	call CopyBytes
 	pop af
@@ -894,7 +894,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, Palette_109107
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0040
 	call CopyBytes
 	pop af
@@ -927,9 +927,9 @@
 	ld [hSCX], a
 	cp $f8
 	jr nz, .asm_10878a
-	lb de, $54, $58
-	ld a, $22
-	call Function3b2a
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_22
+	call _InitSpriteAnimStruct
 
 .asm_10878a
 	ld c, $1
@@ -953,9 +953,9 @@
 	jr .asm_1087c4
 
 .asm_1087a9
-	lb de, $54, $58
-	ld a, $22
-	call Function3b2a
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_22
+	call _InitSpriteAnimStruct
 	xor a
 	call Function108ad4
 	jr .asm_1087c4
@@ -985,9 +985,9 @@
 	call Function1082f0
 	call Function108af4
 	call Function108b5a
-	lb de, $4a, $50
-	ld a, $25
-	call Function3b2a
+	depixel 9, 10, 2, 0
+	ld a, SPRITE_ANIM_INDEX_25
+	call _InitSpriteAnimStruct
 	ld de, SFX_FORESIGHT
 	call PlaySFX
 	ld c, $a
@@ -994,9 +994,9 @@
 	call Function1082cc
 	xor a
 	ld [wcf64], a
-	lb de, $4a, $50
-	ld a, $23
-	call Function3b2a
+	depixel 9, 10, 2, 0
+	ld a, SPRITE_ANIM_INDEX_23
+	call _InitSpriteAnimStruct
 .asm_1087fc
 	ld a, [hSCY]
 	cp $90
@@ -1021,9 +1021,9 @@
 	call PlaySFX
 	ld c, $3c
 	call Function1082cc
-	lb de, $f2, $50
-	ld a, $24
-	call Function3b2a
+	depixel 30, 10, 2, 0
+	ld a, SPRITE_ANIM_INDEX_24
+	call _InitSpriteAnimStruct
 	call Function1082b7
 	ld de, SFX_THROW_BALL
 	call PlaySFX
@@ -1042,11 +1042,11 @@
 ; 10884c
 
 Function10884c: ; 10884c
-	ld c, $50
+	ld c, 80
 	call DelayFrames
-	lb de, $f2, $50
-	ld a, $24
-	call Function3b2a
+	depixel 30, 10, 2, 0
+	ld a, SPRITE_ANIM_INDEX_24
+	call _InitSpriteAnimStruct
 	call Function1082b7
 	ld de, SFX_THROW_BALL
 	call PlaySFX
@@ -1068,9 +1068,9 @@
 
 .asm_108879
 	callba Function8d03d
-	lb de, $4a, $50
-	ld a, $25
-	call Function3b2a
+	depixel 9, 10, 2, 0
+	ld a, SPRITE_ANIM_INDEX_25
+	call _InitSpriteAnimStruct
 	ld de, SFX_GLASS_TING_2
 	call PlaySFX
 	call Function108af4
@@ -1105,15 +1105,15 @@
 	jr .asm_1088e7
 
 .asm_1088c5
-	lb de, $54, $58
-	ld a, $22
-	call Function3b2a
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_22
+	call _InitSpriteAnimStruct
 	jr .asm_1088e7
 
 .asm_1088cf
-	lb de, $54, $58
-	ld a, $22
-	call Function3b2a
+	depixel 10, 11, 4, 0
+	ld a, SPRITE_ANIM_INDEX_22
+	call _InitSpriteAnimStruct
 	xor a
 	call Function108ad4
 	jr .asm_1088e7
@@ -1423,7 +1423,7 @@
 	and $1
 	jr z, .asm_108b1c
 	ld hl, Palette_109187
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, $0040
 	call CopyBytes
 	ld hl, Palette_109187
@@ -1434,7 +1434,7 @@
 
 .asm_108b1c
 	ld hl, Palette_109147
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, $0040
 	call CopyBytes
 	ld hl, Palette_109147
@@ -1459,7 +1459,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld de, $7fff
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	ld a, e
 	ld [hli], a
 	ld d, a
@@ -1537,7 +1537,7 @@
 	ld hl, Palette_108b98
 
 .asm_108bb0
-	ld de, wMapPals + 8 * 7
+	ld de, UnknBGPals + 8 * 7
 	ld bc, $0040
 	call CopyBytes
 	pop af
@@ -1669,10 +1669,10 @@
 
 Function108c6d: ; 108c6d
 	ld hl, LZ_108fe7
-	ld de, VBGMap0
+	debgcoord 0, 0
 	call Decompress
 	ld hl, LZ_108fe7
-	ld de, VBGMap1
+	debgcoord 0, 0, VBGMap1
 	call Decompress
 	ret
 ; 108c80
@@ -1681,10 +1681,10 @@
 	ld a, $1
 	ld [rVBK], a
 	ld hl, LZ_1090a7
-	ld de, VBGMap0
+	debgcoord 0, 0
 	call Decompress
 	ld hl, LZ_1090a7
-	ld de, VBGMap1
+	debgcoord 0, 0, VBGMap1
 	call Decompress
 	ld a, $0
 	ld [rVBK], a
--- a/misc/mobile_45.asm
+++ b/misc/mobile_45.asm
@@ -5750,7 +5750,7 @@
 	pop af
 	ld [rSVBK], a
 
-	callba Function104061
+	callba ReloadMapPart
 	ld a, $8
 	ld [MusicFade], a
 	ld de, MUSIC_MOBILE_ADAPTER
@@ -5786,7 +5786,7 @@
 	ld bc, $0010
 	call CopyBytes
 	ld hl, Palette_11734e
-	ld de, wMapPals + 8 * 7
+	ld de, UnknBGPals + 8 * 7
 	ld bc, $0008
 	call CopyBytes
 	call SetPalettes
@@ -5912,7 +5912,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, BGPals
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0040
 	call CopyBytes
 	pop af
@@ -5931,7 +5931,7 @@
 	call UpdateSprites
 	pop af
 	ld [rSVBK], a
-	callba Function104061
+	callba ReloadMapPart
 	ld a, $8
 	ld [MusicFade], a
 	ld a, [wc2c0]
@@ -5955,7 +5955,7 @@
 	call ByteFill
 	call DelayFrame
 	callba Function14146
-	ld b, $9
+	ld b, SCGB_09
 	call GetSGBLayout
 	ld a, [rSVBK]
 	push af
@@ -5975,7 +5975,7 @@
 	callba Function14157
 	pop af
 	ld [rSVBK], a
-	callba Function104061
+	callba ReloadMapPart
 	ld a, [wLinkMode]
 	cp $4
 	jr z, .asm_11642a
@@ -6006,7 +6006,7 @@
 	callba Function17d405
 	ld a, $90
 	ld [hWY], a
-	callba Function104061
+	callba ReloadMapPart
 	ld a, $8
 	ld [MusicFade], a
 	ld a, [wc2c0]
@@ -7711,7 +7711,7 @@
 	call ClearBGPalettes
 	call ClearSprites
 	callba Function171c87
-	callba Function104061
+	callba ReloadMapPart
 	callba Function8cf53
 	ret
 
@@ -7722,7 +7722,7 @@
 	jr nz, .asm_117709
 	call Function117719
 	callba Function8cf69
-	callba Function104061
+	callba ReloadMapPart
 	jr Function1176ee
 .asm_117709
 	callba Function8cf53
@@ -7757,16 +7757,16 @@
 
 Function117738: ; 117738 (45:7738)
 	callba Function171ccd
-	lb de, $30, $18
+	depixel 6, 3
 	ld a, $1d
-	call Function3b2a
+	call _InitSpriteAnimStruct
 	ld hl, $c
 	add hl, bc
 	ld a, $6
 	ld [hl], a
-	lb de, $48, $20
+	depixel 9, 4
 	ld a, $1d
-	call Function3b2a
+	call _InitSpriteAnimStruct
 	ld hl, $c
 	add hl, bc
 	ld a, $7
@@ -7978,7 +7978,7 @@
 	call LoadMenuDataHeader
 	call MenuBox
 	call MenuBoxCoord2Tile
-	callba Function104061
+	callba ReloadMapPart
 	hlcoord 16, 8
 	ld de, String_1179c5
 	call PlaceString
@@ -8077,7 +8077,7 @@
 	call LoadMenuDataHeader
 	call MenuBox
 	call MenuBoxCoord2Tile
-	callba Function104061
+	callba ReloadMapPart
 	hlcoord 1, 14
 	ld de, String_1179e1
 	call PlaceString
@@ -8184,7 +8184,7 @@
 	call ClearSprites
 	callba Function172e78
 	callba Function172eb9
-	callba Function104061
+	callba ReloadMapPart
 	ret
 ; 0x117acd
 
@@ -8299,12 +8299,12 @@
 	jr nz, .asm_117ba4 ; 0x117b93 $f
 	call ExitMenu
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	jp Function117cdd
 .asm_117ba4
 	call ExitMenu
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	ld a, $80
 	ld [wJumptableIndex], a
 	ret
@@ -8387,7 +8387,7 @@
 	call LoadMenuDataHeader
 	call MenuBox
 	call MenuBoxCoord2Tile
-	callba Function104061
+	callba ReloadMapPart
 	ld hl, MobileStadiumSuccessText
 	call PrintText
 	ld a, [rSVBK]
@@ -8407,7 +8407,7 @@
 	add hl, de
 	dec c
 	jr nz, .asm_117c71 ; 0x117c7b $f4
-	call FadeToWhite
+	call RotateThreePalettesRight
 	pop af
 	ld [rSVBK], a
 	ld a, $80
--- a/misc/mobile_46.asm
+++ b/misc/mobile_46.asm
@@ -175,7 +175,7 @@
 	cp [hl]
 	jr nz, .asm_11813e
 	xor a
-	ld [wMapPals], a
+	ld [w3_d000], a
 	pop af
 	ld [rSVBK], a
 	call Function118452
@@ -197,33 +197,37 @@
 	ld de, $a89c
 	ld bc, $0016
 	call CopyBytes
+
 	ld a, [rSVBK]
 	push af
 	ld a, $3
 	ld [rSVBK], a
-	ld de, $d202
+
+	ld de, w3_d202
 	ld c, $96
-	callba Function17d0b3
-	jr c, .asm_1181d0
-	ld de, $d202
-	ld bc, $0196
-	callba Function17d1e1
-	jr c, .asm_1181d0
-	ld hl, $d202
+	callba CheckStringForErrors_IgnoreTerminator
+	jr c, .return_d3
+
+	ld de, w3_d202
+	lb bc, 1, $96
+	callba CheckStringContainsLessThanBNextCharacters
+	jr c, .return_d3
+
+	ld hl, w3_d202
 	ld de, $a8b2
 	ld bc, $0096
 	call CopyBytes
-.asm_1181c9
+.reset_banks
 	pop af
 	ld [rSVBK], a
 	call CloseSRAM
 	ret
 
-.asm_1181d0
+.return_d3
 	ld a, $d3
 	ld [wc300], a
 	ld [ScriptVar], a
-	jr .asm_1181c9
+	jr .reset_banks
 ; 1181da
 
 Function1181da: ; 1181da
@@ -1067,7 +1071,7 @@
 	set 0, [hl]
 	ld a, $6
 	ld [rSVBK], a
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	ld a, [hl]
 	sla a
@@ -1286,7 +1290,7 @@
 	call LoadMenuDataHeader
 	call MenuBox
 	call MenuBoxCoord2Tile
-	call Function321c
+	call ApplyTilemap
 	hlcoord 16, 8, AttrMap
 	ld a, $40
 	or [hl]
@@ -1462,7 +1466,7 @@
 	ld de, wcc60
 	ld bc, $80
 	call CopyBytes
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	jp Function118b10
 ; 118a7a
@@ -1472,7 +1476,7 @@
 	ld de, wcc60
 	ld bc, $80
 	call CopyBytes
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	jp Function118b10
 ; 118a8f
@@ -1482,7 +1486,7 @@
 	ld de, wcc60
 	ld bc, $80
 	call CopyBytes
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	jp Function118b10
 ; 118aa4
@@ -1504,7 +1508,7 @@
 	ld de, wcc60
 	ld bc, $80
 	call CopyBytes
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	jr Function118b10
 ; 118ad0 (46:4ad0)
@@ -1514,7 +1518,7 @@
 	ld de, wcc60
 	ld bc, $80
 	call CopyBytes
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	jr Function118b10
 
@@ -2101,7 +2105,7 @@
 	ld a, $40
 	ld [wcd89], a
 	ld hl, wc314 + 48 + 2
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	ld a, $2c
 	jp Function119e2b
@@ -2115,7 +2119,7 @@
 	ld e, a
 	ld a, [wcd50]
 	ld d, a
-	ld a, [wMapPals]
+	ld a, [UnknBGPals]
 	ld c, a
 	ld a, [wd001]
 	ld b, a
@@ -2127,7 +2131,7 @@
 	ld a, $6
 	ld [rSVBK], a
 	ld hl, wd002
-	ld a, [wMapPals]
+	ld a, [UnknBGPals]
 	ld c, a
 	ld a, [wd001]
 	ld b, a
@@ -2174,7 +2178,7 @@
 	ld de, wcc60
 	call Function1191ad
 	ret c
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	jp Function118b10
 ; 1190ec
@@ -2194,7 +2198,7 @@
 	call CloseSRAM
 	ld a, $6
 	call GetSRAMBank
-	ld a, [wMapPals]
+	ld a, [UnknBGPals]
 	ld c, a
 	ld a, [wd001]
 	ld b, a
@@ -2207,7 +2211,7 @@
 	jr z, .asm_11913e
 	ld a, $6
 	ld [rSVBK], a
-	ld a, [wMapPals]
+	ld a, [UnknBGPals]
 	ld c, a
 	ld a, [wd001]
 	ld b, a
@@ -2674,7 +2678,7 @@
 	ld a, $8
 	ld [wcd3c], a
 	call Function119ed8
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	jp Function118b10
 ; 119413
@@ -2682,7 +2686,7 @@
 Function119413: ; 119413
 	ld a, $6
 	call GetSRAMBank
-	ld a, [wMapPals]
+	ld a, [UnknBGPals]
 	ld c, a
 	ld a, [wd001]
 	ld b, a
@@ -3039,7 +3043,7 @@
 	ld [wcd3c], a
 	call Function119ed8
 	call Function118b24
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	ld a, $2a
 	jp Function119e2b
@@ -3334,7 +3338,7 @@
 	xor a
 	ld [de], a
 	call Function118b24
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	ld a, $2a
 	jp Function119e2b
@@ -3533,7 +3537,7 @@
 	xor a
 	ld [wcf65], a
 	ld [StringBuffer2 + 10], a
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld a, $20
 	jp Function119e2b
 ; 119987
@@ -3540,7 +3544,7 @@
 
 Function119987: ; 119987
 	ld hl, wd001
-	ld a, [wMapPals]
+	ld a, [UnknBGPals]
 	or [hl]
 	jr z, .asm_1199a0
 	ld a, [wcf64]
@@ -3702,13 +3706,13 @@
 	ld [StringBuffer2 + 12], a
 
 Function119ac9:
-	ld a, [wMapPals]
+	ld a, [UnknBGPals]
 	ld l, a
 	ld a, [wd001]
 	ld h, a
 	dec hl
 	ld a, l
-	ld [wMapPals], a
+	ld [UnknBGPals], a
 	ld a, h
 	ld [wd001], a
 	ld a, [wcf64]
@@ -4463,7 +4467,7 @@
 	and a
 	jr z, .asm_119fd4
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	callba Function115dc3
 	ld a, [wcd33]
 	ld [wcf66], a
@@ -4480,7 +4484,7 @@
 	ld [wc30d], a
 	ld a, $1
 	ld [wc314], a
-	callba Function104061
+	callba ReloadMapPart
 	and a
 	ret
 
@@ -4487,7 +4491,7 @@
 .asm_119fef
 	call ExitMenu
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	ld a, [wcd45]
 	ld [wcf66], a
 	callba Function115dc3
@@ -4562,7 +4566,7 @@
 	callba Function106462
 	callba Function106464
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	callba Function115d99
 	ld c, $0
 	callba Function115e18
@@ -4585,7 +4589,7 @@
 	callba Function106462
 	callba Function106464
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	callba Function115d99
 	ld c, $0
 	callba Function115e18
@@ -4677,7 +4681,7 @@
 	and a
 	jr nz, .asm_11a1b6
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	call Function11a63c
 	hlcoord 4, 2
 	ld de, String_11a6d2
@@ -4687,7 +4691,7 @@
 
 .asm_11a1b6
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	ld a, [wcd45]
 	ld [wcf66], a
 	ld [wcd80], a
@@ -4741,7 +4745,7 @@
 	call LoadMenuDataHeader
 	call MenuBox
 	call MenuBoxCoord2Tile
-	call Function321c
+	call ApplyTilemap
 	hlcoord 16, 8
 	ld de, String_11a2cf
 	call PlaceString
@@ -4818,7 +4822,7 @@
 	and a
 	jr nz, .asm_11a2c4
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	ld a, [wcd46]
 	cp $0
 	jr z, .asm_11a2b4
@@ -4840,7 +4844,7 @@
 
 .asm_11a2c4
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	and a
 	ret
 ; 11a2cf
@@ -4919,7 +4923,7 @@
 
 .asm_11a346
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	callba Function115dc3
 	and a
 	ret
@@ -4963,7 +4967,7 @@
 	and a
 	jr nz, .asm_11a3b1
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	call Function11a63c
 	hlcoord 4, 2
 	ld de, String_11a6d2
@@ -4973,7 +4977,7 @@
 
 .asm_11a3b1
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	ld a, [wcd45]
 	ld [wcf66], a
 	ld [wcd80], a
@@ -5038,7 +5042,7 @@
 	and a
 	jr nz, .asm_11a43f
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	call Function11a63c
 	hlcoord 4, 2
 	ld de, String_11a6d2
@@ -5048,7 +5052,7 @@
 
 .asm_11a43f
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	ld a, $1c
 	ld [wcf66], a
 	ld [wcd80], a
@@ -5109,7 +5113,7 @@
 	and a
 	jr nz, .asm_11a4c7
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	call Function11a63c
 	hlcoord 4, 2
 	ld de, String_11a6d2
@@ -5121,7 +5125,7 @@
 
 .asm_11a4c7
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	ld a, [wcd46]
 	ld [wcf66], a
 	ld [wcd80], a
@@ -5156,7 +5160,7 @@
 	and a
 	jr nz, .asm_11a522
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	call Function11a63c
 	hlcoord 4, 2
 	ld de, String_11a6d2
@@ -5166,7 +5170,7 @@
 
 .asm_11a522
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	ld a, [wcd45]
 	ld [wcf66], a
 	ld [wcd80], a
@@ -5195,7 +5199,7 @@
 	call Function11a9f0
 	jr nz, .asm_11a562
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 
 .asm_11a562
 	scf
@@ -5271,7 +5275,7 @@
 	ld b, $4
 	ld c, $12
 	call Function3eea
-	callba Function104061
+	callba ReloadMapPart
 	call UpdateSprites
 	ld c, $0
 	callba Function115e18
@@ -5306,7 +5310,7 @@
 	hlcoord 15, 7
 	ld a, $ed
 	ld [hl], a
-	callba Function104061
+	callba ReloadMapPart
 	ret
 ; 11a63c
 
@@ -5840,9 +5844,9 @@
 Function11ac3e: ; 11ac3e
 	call SpeechTextBox
 	call FadeToMenu
-	callab InefficientlyClear121BytesAtwc300
+	callab ClearSpriteAnims
 	call Function11ac51
-	call Function2b3c
+	call ReturnToCallingMenu
 	ret
 ; 11ac51
 
@@ -5881,7 +5885,7 @@
 	ld a, $78
 	ld [wc3b5], a
 	callba Function8cf7a
-	callba Function104061
+	callba ReloadMapPart
 	jr .asm_11ac82
 
 .asm_11aca8
@@ -6025,7 +6029,7 @@
 	hlcoord 10, 10, AttrMap
 	ld bc, $0808
 	call Function11afd6
-	callba Function104061
+	callba ReloadMapPart
 	call Function11ad8a
 	ld a, $1
 	ld [MenuSelection2], a
@@ -6104,7 +6108,7 @@
 
 .asm_11ae2e
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	ret
 ; 11ae38
 
@@ -6142,7 +6146,7 @@
 	hlcoord 9, 12, AttrMap
 	lb bc, 6, 11
 	call Function11afd6
-	callba Function104061
+	callba ReloadMapPart
 	call Function11ad8a
 	ld a, $1
 	ld [MenuSelection2], a
@@ -6210,7 +6214,7 @@
 .asm_11aef7
 	call ExitMenu
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	ret
 ; 11af04
 
@@ -6233,7 +6237,7 @@
 	hlcoord 9, 12, AttrMap
 	lb bc, 6, 11
 	call Function11afd6
-	callba Function104061
+	callba ReloadMapPart
 	call Function11ad8a
 	ld a, $2
 	ld [MenuSelection2], a
@@ -6301,7 +6305,7 @@
 .asm_11afaa
 	call ExitMenu
 	call ExitMenu
-	callba Function104061
+	callba ReloadMapPart
 	ret
 ; 11afb7
 
@@ -7549,8 +7553,8 @@
 
 .asm_11b70f
 	ld de, $c63d
-	ld bc, $0105
-	callba Function17d1e1
+	lb bc, 1, 5
+	callba CheckStringContainsLessThanBNextCharacters
 	jr nc, .asm_11b723
 	callba Function17d187
 
@@ -7563,8 +7567,8 @@
 
 .asm_11b736
 	ld de, $c642
-	ld bc, $0105
-	callba Function17d1e1
+	lb bc, 1, 5
+	callba CheckStringContainsLessThanBNextCharacters
 	jr nc, .asm_11b74a
 	callba Function17d199
 
@@ -7577,8 +7581,8 @@
 
 .asm_11b75d
 	ld de, $c647
-	ld bc, $0221
-	callba Function17d1e1
+	lb bc, 2, $21
+	callba CheckStringContainsLessThanBNextCharacters
 	jr c, .asm_11b770
 	ld a, b
 	cp $2
@@ -7596,8 +7600,8 @@
 
 .asm_11b789
 	ld de, $c668
-	ld bc, $0105
-	callba Function17d1e1
+	lb bc, 1, 5
+	callba CheckStringContainsLessThanBNextCharacters
 	jr nc, .asm_11b79d
 	callba Function17d1c9
 
@@ -7676,7 +7680,7 @@
 	ld [wd1e9], a
 	ld a, $2
 	ld [wLinkMode], a
-	callba Function421d8
+	callba EvolvePokemon
 	xor a
 	ld [wLinkMode], a
 	callba Function14a58
@@ -7697,7 +7701,7 @@
 	ld [de], a
 
 .asm_11b872
-	call Function2b3c
+	call ReturnToCallingMenu
 	call RestartMapMusic
 	ret
 ; 11b879
@@ -7919,7 +7923,7 @@
 	call CopyBytes
 	ld a, "@"
 	ld [de], a
-	ld hl, sPartyScratch1
+	ld hl, sPartyMail
 	ld bc, PARTYMON_STRUCT_LENGTH - 1
 	ld a, [wcd2a]
 .loop5
--- a/misc/mobile_5b.asm
+++ b/misc/mobile_5b.asm
@@ -169,7 +169,7 @@
 	call Function16c130
 	call Function16c145
 	call Function16c15c
-	ld hl, VBGMap0
+	hlbgcoord 0, 0
 	call Function16cc73
 	call Function16cc02
 	xor a
@@ -179,7 +179,7 @@
 ; 16c130
 
 Function16c130: ; 16c130
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld hl, Unknown_16c903
 	ld bc, 8
 	ld a, $5
@@ -274,7 +274,7 @@
 	ld [rSVBK], a
 	ld a, $ff
 	ld bc, $0008
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call ByteFill
 	pop af
 	ld [rSVBK], a
@@ -291,7 +291,7 @@
 	call Function16cab6
 	call Function16cabb
 	ld d, a
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function16cab6
 	call Function16cabb
 	cp d
@@ -305,7 +305,7 @@
 	jr nz, .asm_16c981
 
 .asm_16c988
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function16cab6
 	call Function16cadc
 
@@ -314,7 +314,7 @@
 	call Function16cab6
 	call Function16cad8
 	ld d, a
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function16cab6
 	call Function16cad8
 	cp d
@@ -328,7 +328,7 @@
 	jr nz, .asm_16c9a9
 
 .asm_16c9b0
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function16cab6
 	call Function16cb08
 
@@ -337,7 +337,7 @@
 	call Function16cab6
 	call Function16cac4
 	ld d, a
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function16cab6
 	call Function16cac4
 	cp d
@@ -351,7 +351,7 @@
 	jr nz, .asm_16c9d1
 
 .asm_16c9d8
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function16cab6
 	call Function16cae8
 
@@ -402,7 +402,7 @@
 	ld e, $0
 	ld a, $0
 .asm_16ca28
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function16cab6
 	call Function16cabb
 	cp $1f
@@ -416,12 +416,12 @@
 	jr nz, .asm_16ca37
 
 .asm_16ca3f
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function16cab6
 	call Function16cadc
 
 .asm_16ca48
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function16cab6
 	call Function16cad8
 	cp $1f
@@ -435,12 +435,12 @@
 	jr nz, .asm_16ca57
 
 .asm_16ca5f
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function16cab6
 	call Function16cb08
 
 .asm_16ca68
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function16cab6
 	call Function16cac4
 	cp $1f
@@ -454,7 +454,7 @@
 	jr nz, .asm_16ca77
 
 .asm_16ca7f
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	call Function16cab6
 	call Function16cae8
 
@@ -752,7 +752,7 @@
 	ld de, wd008
 	call Function16cc41
 	ld hl, Unknown_16cfb1
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	call Function16cc41
 	ld hl, Unknown_16cfb9
 	ld de, wd048
@@ -795,7 +795,7 @@
 ; 16cc6e
 
 Function16cc6e: ; 16cc6e
-	ld hl, VBGMap1
+	hlbgcoord 0, 0, VBGMap1
 	jr Function16cc73
 
 Function16cc73:
@@ -890,7 +890,7 @@
 	call ClearSprites
 	callba Function16d421
 	callba Function16d42e
-	ld b, $8
+	ld b, SCGB_08
 	call GetSGBLayout
 	call SetPalettes
 	call WaitBGMap
@@ -925,19 +925,19 @@
 	inc c
 endr
 	ld a, $7
-.asm_16d630
+.loop
 	push bc
 	push hl
-.asm_16d632
+.loop2
 	ld [hli], a
 	dec c
-	jr nz, .asm_16d632
+	jr nz, .loop2
 	pop hl
-	ld de, $0014
+	ld de, SCREEN_WIDTH
 	add hl, de
 	pop bc
 	dec b
-	jr nz, .asm_16d630
+	jr nz, .loop
 	ret
 ; 16d640
 
@@ -950,20 +950,20 @@
 	inc a
 	ld [hl], a
 	pop hl
-	ld de, $0014
+	ld de, SCREEN_WIDTH
 	add hl, de
-.asm_16d64f
+.loop
 	push hl
 	ld a, $33
 	ld [hli], a
-	ld a, $7f
+	ld a, " "
 	call Function16d66d
 	ld [hl], $34
 	pop hl
-	ld de, $0014
+	ld de, SCREEN_WIDTH
 	add hl, de
 	dec b
-	jr nz, .asm_16d64f
+	jr nz, .loop
 	ld a, $35
 	ld [hli], a
 	ld a, $36
@@ -974,10 +974,10 @@
 
 Function16d66d: ; 16d66d
 	ld d, c
-.asm_16d66e
+.loop
 	ld [hli], a
 	dec d
-	jr nz, .asm_16d66e
+	jr nz, .loop
 	ret
 ; 16d673
 
@@ -1028,7 +1028,7 @@
 	ret
 ; 16d6ca
 
-Function16d6ca: ; 16d6ca
+LinkTextbox: ; 16d6ca
 	call Function16d61d
 	ret
 ; 16d6ce
@@ -1044,11 +1044,11 @@
 
 Function16d6e1: ; 16d6e1
 	hlcoord 4, 10
-	ld b, $1
-	ld c, $a
-	predef Function28eef
+	ld b, 1
+	ld c, 10
+	predef Predef_LinkTextbox
 	hlcoord 5, 11
-	ld de, String_16d701
+	ld de, .Waiting
 	call PlaceString
 	call WaitBGMap
 	call Function3200
@@ -1056,7 +1056,7 @@
 	jp DelayFrames
 ; 16d701
 
-String_16d701: ; 16d701
+.Waiting: ; 16d701
 	db "WAITING..!@"
 ; 16d70c
 
--- a/misc/mobile_5c.asm
+++ b/misc/mobile_5c.asm
@@ -73,1189 +73,8 @@
 	ret
 ; 1700b0
 
-Function1700b0: ; 1700b0
-	call Function17021e
-	callba Function118121
-	ret
-; 1700ba
-
-Function1700ba: ; 1700ba
-	call Function17021e
-	callba Function11811a
-	ret
-; 1700c4
-
-Function1700c4: ; 1700c4
-	ld a, [rSVBK]
-	push af
-	ld a, $3
-	ld [rSVBK], a
-	call Function17042c
-	ld a, $5
-	call GetSRAMBank
-	ld a, $1
-	ld [$be45], a
-	xor a
-	ld [$be46], a
-	ld hl, $dffc
-	ld de, $aa41
-	ld bc, $0004
-	call CopyBytes
-	ld hl, $d202
-	ld de, $aa8e
-	ld bc, $0594
-	call CopyBytes
-	ld hl, $aa5d
-	ld a, [hl]
-	inc [hl]
-	inc hl
-	sla a
-	sla a
-	ld e, a
-	ld d, $0
-	add hl, de
-	ld e, l
-	ld d, h
-	ld hl, $dffc
-	ld bc, $0004
-	call CopyBytes
-	call CloseSRAM
-	pop af
-	ld [rSVBK], a
-	ret
-; 170114
-
-Function170114: ; 170114
-	call Function17021e
-	call Function170121
-	callba Function11805f
-	ret
-; 170121
-
-Function170121: ; 170121
-	ld a, $5
-	call GetSRAMBank
-	ld hl, $a948
-	ld de, $c608
-	ld bc, $00f6
-	call CopyBytes
-	call CloseSRAM
-	call Function170c8b
-	ret
-; 170139
-
-Function170139: ; 170139
-	ld a, $5
-	call GetSRAMBank
-	ld de, $aa41
-	ld h, $0
-	ld l, h
-	ld bc, $03e8
-	call Function17020c
-	ld bc, $0064
-	call Function17020c
-	ld bc, $000a
-	call Function17020c
-	ld a, [de]
-	ld c, a
-	ld b, $0
-	add hl, bc
-	call CloseSRAM
-	ld a, h
-	ld [$c608], a
-	ld a, l
-	ld [$c608 + 1], a
-	ld hl, $c628
-	ld a, [PlayerID]
-	ld [hli], a
-	ld a, [PlayerID + 1]
-	ld [hli], a
-	ld a, [wSecretID]
-	ld [hli], a
-	ld a, [wSecretID + 1]
-	ld [hli], a
-	ld e, l
-	ld d, h
-	ld hl, PlayerName
-	ld bc, $0005 ; Japanese name length
-	call CopyBytes
-	ld bc, PlayerID
-	ld de, PlayerGender
-	callba Function4e929
-	ld de, $c62c + 5
-	ld a, c
-	ld [de], a
-	inc de
-	ld a, $df
-	ld [wcd49], a
-	ld a, $dc
-	ld [wcd4a], a
-	ld a, $41
-	ld [wcd4b], a
-	ld a, $de
-	ld [wcd4c], a
-	ld a, $3
-.asm_1701ac
-	push af
-	ld a, [wcd49]
-	ld l, a
-	ld a, [wcd4a]
-	ld h, a
-	ld bc, $0030
-	call CopyBytes
-	ld a, l
-	ld [wcd49], a
-	ld a, h
-	ld [wcd4a], a
-	ld a, [wcd4b]
-	ld l, a
-	ld a, [wcd4c]
-	ld h, a
-	ld bc, $0006
-	call CopyBytes
-	ld a, l
-	ld [wcd4b], a
-	ld a, h
-	ld [wcd4c], a
-	pop af
-	dec a
-	jr nz, .asm_1701ac
-	ld a, $4
-	call GetSRAMBank
-	ld hl, $a013
-	ld bc, $0024
-	call CopyBytes
-	call CloseSRAM
-	ld a, $5
-	call GetSRAMBank
-	ld hl, $a894
-	ld bc, $0006
-	call CopyBytes
-	ld hl, $c608
-	ld de, $a948
-	ld bc, $00f6
-	call CopyBytes
-	call CloseSRAM
-	ret
-; 17020c
-
-Function17020c: ; 17020c
-	ld a, [de]
-	inc de
-	and a
-	ret z
-.asm_170210
-	add hl, bc
-	dec a
-	jr nz, .asm_170210
-	ret
-; 170215
-
 INCLUDE "misc/battle_tower_5c.asm"
 
-Function1704ca: ; 1704ca
-	ld a, [$be46]
-	cp $7
-	jr c, .asm_1704d3
-	ld a, $6
-
-.asm_1704d3
-	ld hl, $afce
-	ld de, -$e0
-.asm_1704d9
-	and a
-	jr z, .asm_1704e0
-	add hl, de
-	dec a
-	jr .asm_1704d9
-
-.asm_1704e0
-	ret
-; 1704e1
-
-Function1704e1: ; 1704e1
-	call SpeechTextBox
-	call FadeToMenu
-	call Function17021e
-	call Function1704f1
-	call Function2b3c
-	ret
-; 1704f1
-
-Function1704f1: ; 1704f1
-	call ClearBGPalettes
-	call ClearSprites
-	call ClearScreen
-.asm_1704fa
-	call JoyTextDelay
-	ld a, [wJumptableIndex]
-	bit 7, a
-	jr nz, .asm_17050f
-	call Function170510
-	callba Function104061
-	jr .asm_1704fa
-
-.asm_17050f
-	ret
-; 170510
-
-Function170510: ; 170510
-	ld a, [wJumptableIndex]
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_17051f
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 17051f
-
-Jumptable_17051f: ; 17051f
-	dw Function170525
-	dw Function170571
-	dw Function170577
-; 170525
-
-Function170525: ; 170525
-	ld a, $5
-	call GetSRAMBank
-
-	ld hl, $a89c
-	ld de, StringBuffer3
-	ld bc, $0016
-	call CopyBytes
-
-	ld hl, $a8b2
-	ld de, $c608
-	ld bc, $0096
-	call CopyBytes
-
-	call CloseSRAM
-	hlcoord 1, 1
-	ld de, StringBuffer3
-	call PlaceString
-	hlcoord 1, 3
-	ld de, String_170676
-	call PlaceString
-	hlcoord 4, 3
-	ld de, StringBuffer4
-	call PlaceString
-	hlcoord 8, 3
-	ld de, String_17067a
-	call PlaceString
-	call Function1705b7
-	call Function1705f0
-	jr Function1705b2
-
-
-Function170571:
-	call SetPalettes
-	call Function1705b2
-
-
-Function170577:
-	ld hl, hJoyPressed
-	ld a, [hl]
-	and $1
-	jr nz, .asm_1705ac
-	ld a, [hl]
-	and $2
-	jr nz, .asm_1705ac
-	ld a, [hl]
-	and $40
-	jr nz, .asm_17058f
-	ld a, [hl]
-	and $80
-	jr nz, .asm_17059d
-	ret
-
-.asm_17058f
-	ld a, [wcf64]
-	and a
-	ret z
-	sub $f
-	ld [wcf64], a
-	call Function1705f0
-	ret
-
-.asm_17059d
-	ld a, [wcf64]
-	cp $3c
-	ret z
-	add $f
-	ld [wcf64], a
-	call Function1705f0
-	ret
-
-.asm_1705ac
-	ld hl, wJumptableIndex
-	set 7, [hl]
-	ret
-
-Function1705b2:
-	ld hl, wJumptableIndex
-	inc [hl]
-	ret
-; 1705b7
-
-Function1705b7: ; 1705b7
-	hlcoord 0, 4
-	ld a, $79
-	ld [hli], a
-	ld c, $12
-.asm_1705bf
-	ld a, $7a
-	ld [hli], a
-	dec c
-	jr nz, .asm_1705bf
-	ld a, $7b
-	ld [hli], a
-	ld de, $0014
-	ld c, $c
-.asm_1705cd
-	ld a, $7c
-	ld [hl], a
-	add hl, de
-	dec c
-	jr nz, .asm_1705cd
-	ld a, $7d
-	ld [hli], a
-	ld c, $12
-.asm_1705d9
-	ld a, $7a
-	ld [hli], a
-	dec c
-	jr nz, .asm_1705d9
-	ld a, $7e
-	ld [hl], a
-	ld de, $ffec
-	add hl, de
-	ld c, $c
-.asm_1705e8
-	ld a, $7c
-	ld [hl], a
-	add hl, de
-	dec c
-	jr nz, .asm_1705e8
-	ret
-; 1705f0
-
-Function1705f0: ; 1705f0
-	call Function17064b
-	call Function17065d
-	ld a, $50
-	ld [wcd4e], a
-	ld hl, $c608
-	ld a, [wcf64]
-	ld c, a
-	xor a
-	ld b, a
-	add hl, bc
-	push hl
-	pop bc
-	hlcoord 1, 6
-	ld a, $6
-.asm_17060c
-	push af
-	push hl
-	ld a, $3
-.asm_170610
-	push af
-	ld de, wcd49
-	ld a, [bc]
-	and a
-	jr z, .asm_170625
-	ld a, $5
-.asm_17061a
-	push af
-	ld a, [bc]
-	ld [de], a
-	inc bc
-	inc de
-	pop af
-	dec a
-	jr nz, .asm_17061a
-	jr .asm_170631
-
-.asm_170625
-	ld a, $5
-.asm_170627
-	push af
-	ld a, $e3
-	ld [de], a
-	inc de
-	inc bc
-	pop af
-	dec a
-	jr nz, .asm_170627
-
-.asm_170631
-	ld de, wcd49
-	push bc
-	call PlaceString
-	ld de, $0006
-	add hl, de
-	pop bc
-	pop af
-	dec a
-	jr nz, .asm_170610
-	pop hl
-	ld de, $0028
-	add hl, de
-	pop af
-	dec a
-	jr nz, .asm_17060c
-	ret
-; 17064b
-
-Function17064b: ; 17064b
-	hlcoord 1, 5
-	xor a
-	ld b, $c
-.asm_170651
-	ld c, $12
-.asm_170653
-	ld [hli], a
-	dec c
-	jr nz, .asm_170653
-rept 2
-	inc hl
-endr
-	dec b
-	jr nz, .asm_170651
-	ret
-; 17065d
-
-Function17065d: ; 17065d
-	ld a, [wcf64]
-	and a
-	jr z, .asm_170669
-	hlcoord 18, 5
-	ld a, $61
-	ld [hl], a
-
-.asm_170669
-	ld a, [wcf64]
-	cp $3c
-	ret z
-	hlcoord 18, 16
-	ld a, $ee
-	ld [hl], a
-	ret
-; 170676
-
-String_170676: ; 170676
-	db "ルーム@"
-; 17067a
-
-String_17067a: ; 17067a
-	db "れきだいりーダーいちらん@"
-; 170687
-
-BattleTowerAction: ; 170687
-	ld a, [ScriptVar]
-	ld e, a
-	ld d, 0
-	ld hl, .jumptable
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-; 170696
-
-
-.jumptable: ; 170696 (5c:4696)
-	dw Function17075f ; 0x00
-	dw Function170788 ; 0x01
-	dw Function170778 ; 0x02
-	dw Function170799 ; 0x03
-	dw Function17079d ; 0x04
-	dw Function1707ac ; 0x05
-	dw Function1707f4 ; 0x06
-	dw Function170868 ; 0x07
-	dw Function170881 ; 0x08
-	dw Function17089a ; 0x09
-	dw Function1708b1 ; 0x0a
-	dw CheckMobileEventIndex ; 0x0b
-	dw Function1708c8 ; 0x0c
-	dw Function1708f0 ; 0x0d
-	dw Function17093c ; 0x0e
-	dw Function1709aa ; 0x0f
-	dw Function1709bb ; 0x10
-	dw Function170a9c ; 0x11
-	dw Function170aa0 ; 0x12
-	dw Function170aaf ; 0x13
-	dw Function170abe ; 0x14
-	dw Function170ad7 ; 0x15
-	dw Function170807 ; 0x16
-	dw Function17081d ; 0x17
-	dw Function170ae8 ; 0x18
-	dw Function170b16 ; 0x19
-	dw ResetBattleTowerTrainersSRAM ; 0x1a
-	dw Function1706ee ; 0x1b
-	dw Function17071b ; 0x1c
-	dw Function170729 ; 0x1d
-	dw Function17073e ; 0x1e
-	dw Function170737 ; 0x1f
-
-
-; Reset the save memory for BattleTower-Trainers (Counter and all 7 TrainerBytes)
-ResetBattleTowerTrainersSRAM: ; 1706d6 (5c:46d6) BattleTowerAction $1a
-	ld a, BANK(sBTTrainers)
-	call GetSRAMBank
-
-	ld a, $ff
-	ld hl, sBTTrainers
-	ld bc, BATTLETOWER_NROFTRAINERS
-	call ByteFill
-
-	xor a
-	ld [sNrOfBeatenBattleTowerTrainers], a
-
-	call CloseSRAM
-
-	ret
-
-Function1706ee: ; 1706ee (5c:46ee)
-	ld a, BANK(sbe50)
-	call GetSRAMBank
-
-	ld a, [sbe50]
-	call CloseSRAM
-	ld [ScriptVar], a
-	ld hl, NumItems
-	ld a, [hli]
-	cp $14
-	ret c
-	ld b, $14
-	ld a, [ScriptVar]
-	ld c, a
-.asm_170709
-	ld a, [hli]
-	cp c
-	jr nz, .asm_170711
-	ld a, [hl]
-	cp $5f
-	ret c
-.asm_170711
-	inc hl
-	dec b
-	jr nz, .asm_170709
-	ld a, $12
-	ld [ScriptVar], a
-	ret
-
-Function17071b: ; 17071b (5c:471b)
-	ld a, BANK(s1_be45)
-	call GetSRAMBank
-	ld a, $3
-	ld [s1_be45], a
-	call CloseSRAM
-	ret
-
-Function170729: ; 170729 (5c:4729)
-	ld a, BANK(s1_be45)
-	call GetSRAMBank
-	ld a, $4
-	ld [s1_be45], a
-	call CloseSRAM
-	ret
-
-Function170737: ; 170737 (5c:4737)
-	callba SaveOptions
-	ret
-
-Function17073e: ; 17073e (5c:473e)
-	call Random
-	ld a, [hRandomAdd]
-	and $7
-	cp $6
-	jr c, .asm_17074b
-	sub $6
-.asm_17074b
-	add $1a
-	cp $1e
-	jr z, Function17073e
-	push af
-	ld a, BANK(sbe50)
-	call GetSRAMBank
-	pop af
-	ld [sbe50], a
-	call CloseSRAM
-	ret
-
-Function17075f: ; 17075f (5c:475f)
-	call Function17089a
-	ld a, [ScriptVar]
-	and a
-	ret z
-	ld a, BANK(sbe4f)
-	call GetSRAMBank
-	ld a, [sbe4f]
-	and $2
-	ld [ScriptVar], a
-	call CloseSRAM
-	ret
-
-Function170778: ; 170778 (5c:4778)
-	ld hl, s1_be45
-	ld a, BANK(s1_be45)
-	call GetSRAMBank
-	ld a, [hl]
-	ld [ScriptVar], a
-	call CloseSRAM
-	ret
-
-Function170788: ; 170788 (5c:4788)
-	ld a, BANK(sbe4f)
-	call GetSRAMBank
-	ld a, [sbe4f]
-	or $2
-	ld [sbe4f], a
-	call CloseSRAM
-	ret
-
-Function170799: ; 170799 (5c:4799)
-	ld c, $1
-	jr asm_17079f
-
-Function17079d: ; 17079d (5c:479d)
-	ld c, $0
-asm_17079f: ; 17079f (5c:479f)
-	ld a, BANK(s1_be45)
-	call GetSRAMBank
-	ld a, c
-	ld [s1_be45], a
-	call CloseSRAM
-	ret
-
-Function1707ac: ; 1707ac (5c:47ac)
-	ld a, $5
-	call GetSRAMBank
-	ld a, [$aa8c]
-	ld b, a
-	ld a, [$be46]
-	ld [ScriptVar], a
-	call CloseSRAM
-	and a
-	ret z
-	ld a, b
-	cp $2
-	jr nc, .asm_1707ef
-	push bc
-	call UpdateTime
-	pop bc
-	ld a, $5
-	call GetSRAMBank
-	ld a, [$aa8b]
-	call CloseSRAM
-	ld c, a
-	ld a, [CurDay]
-	sub c
-	jr c, .asm_1707e5
-	cp $8
-	jr nc, .asm_1707ef
-	ld a, b
-	and a
-	jr nz, .asm_1707ef
-	ret
-.asm_1707e5
-	ld hl, CurDay
-	ld a, $8c
-	sub c
-	add [hl]
-	cp $8
-	ret c
-.asm_1707ef
-	ld a, $8
-	ld [ScriptVar], a
-
-Function1707f4: ; 1707f4 (5c:47f4)
-	ld a, $5
-	call GetSRAMBank
-	xor a
-	ld [$be46], a
-	ld [$aa8b], a
-	ld [$aa8c], a
-	call CloseSRAM
-	ret
-
-Function170807: ; 170807 (5c:4807)
-	call UpdateTime
-	ld a, $5
-	call GetSRAMBank
-	ld a, [CurDay]
-	ld [$b2f9], a
-	xor a
-	ld [$b2fa], a
-	call CloseSRAM
-	ret
-
-Function17081d: ; 17081d (5c:481d)
-	xor a
-	ld [ScriptVar], a
-	ld a, $5
-	call GetSRAMBank
-	ld a, [$b2f9]
-	ld c, a
-	ld a, [$b2fa]
-	ld b, a
-	call CloseSRAM
-	cp $2
-	jr nc, .asm_170853
-	push bc
-	call UpdateTime
-	pop bc
-	ld a, [CurDay]
-	sub c
-	jr c, .asm_170849
-	cp $b
-	jr nc, .asm_170853
-	ld a, b
-	and a
-	jr nz, .asm_170853
-	ret
-.asm_170849
-	ld hl, CurDay
-	ld a, $8c
-	sub c
-	add [hl]
-	cp $b
-	ret c
-.asm_170853
-	ld a, $1
-	ld [ScriptVar], a
-	ld a, $5
-	call GetSRAMBank
-	xor a
-	ld [$b2f9], a
-	ld [$b2fa], a
-	call CloseSRAM
-	ret
-
-Function170868: ; 170868 (5c:4868)
-	ld a, BANK(sbe47)
-	call GetSRAMBank
-	ld a, [rSVBK]
-	push af
-	ld a, $3
-	ld [rSVBK], a
-	ld a, [wd000 + $800]
-	ld [sbe47], a
-	pop af
-	ld [rSVBK], a
-	call CloseSRAM
-	ret
-
-Function170881: ; 170881 (5c:4881)
-	ld a, BANK(sbe47)
-	call GetSRAMBank
-	ld a, [rSVBK]
-	push af
-	ld a, $3
-	ld [rSVBK], a
-	ld a, [sbe47]
-	ld [wd000 + $800], a
-	pop af
-	ld [rSVBK], a
-	call CloseSRAM
-	ret
-
-Function17089a: ; 17089a
-	ld a, [wcfcd]
-	and a
-	jr z, .asm_1708ad
-	callba Function14bcb
-	jr z, .asm_1708ab
-	xor a
-	jr .asm_1708ad
-
-.asm_1708ab
-	ld a, $1
-
-.asm_1708ad
-	ld [ScriptVar], a
-	ret
-; 1708b1
-
-
-Function1708b1: ; 1708b1 (5c:48b1)
-	xor a
-	ld [MusicFade], a
-	call MaxVolume
-	ret
-
-CheckMobileEventIndex: ; 1708b9 (5c:48b9) something to do with GS Ball
-	ld a, BANK(sMobileEventIndex)
-	call GetSRAMBank
-	ld a, [sMobileEventIndex]
-	ld [ScriptVar], a
-	call CloseSRAM
-	ret
-
-Function1708c8: ; 1708c8 (5c:48c8)
-	call UpdateTime
-	ld a, $5
-	call GetSRAMBank
-	ld a, [CurDay]
-	ld [$aa8b], a
-	xor a
-	ld [$aa8c], a
-	ld a, [$aa5d]
-	cp $2
-	jr nc, .asm_1708ec
-	ld a, [CurDay]
-	ld [$aa48], a
-	ld a, $1
-	ld [$aa47], a
-.asm_1708ec
-	call CloseSRAM
-	ret
-
-Function1708f0: ; 1708f0 (5c:48f0)
-	xor a
-	ld [ScriptVar], a
-	call UpdateTime
-	ld a, $5
-	call GetSRAMBank
-	ld a, [$aa48]
-	ld c, a
-	ld a, [$aa47]
-	call CloseSRAM
-	and a
-	ret z
-	ld hl, CurDay
-	ld a, c
-	cp [hl]
-	jr nz, Function170923
-	ld a, $5
-	call GetSRAMBank
-	ld a, [$aa5d]
-	call CloseSRAM
-	cp $5
-	ret c
-	ld a, $1
-	ld [ScriptVar], a
-	ret
-
-
-Function170923: ; 170923
-	ld a, $5
-	call GetSRAMBank
-	xor a
-	ld [$aa48], a
-	ld [$aa47], a
-	ld hl, $aa5d
-	ld bc, $0011
-	call ByteFill
-	call CloseSRAM
-	ret
-; 17093c
-
-
-Function17093c: ; 17093c (5c:493c)
-	xor a
-	ld [ScriptVar], a
-	ld a, EGG_TICKET
-	ld [CurItem], a
-	ld hl, NumItems
-	call CheckItem
-	ret nc
-	ld a, [PartyCount]
-	ld b, 0
-	ld c, a
-	ld hl, PartySpecies
-.loop
-	ld a, [hli]
-	cp EGG
-	jr nz, .not_egg
-	push hl
-	ld hl, PartyMonOT ; wddff (aliases: PartyMonOT)
-	ld de, $6
-	ld a, b
-	and a
-	jr z, .skip
-.loop2
-	add hl, de
-	dec a
-	jr nz, .loop2
-.skip
-	ld de, String_1709a4
-	ld a, $6
-.asm_17096e
-	push af
-	ld a, [de]
-	inc de
-	cp [hl]
-	inc hl
-	jr nz, .asm_17099d
-	pop af
-	dec a
-	jr nz, .asm_17096e
-rept 4
-	dec hl
-endr
-	ld a, $50
-rept 2
-	ld [hli], a
-endr
-	pop hl
-	ld a, EGG_TICKET
-	ld [CurItem], a
-	ld a, $1
-	ld [wItemQuantityChangeBuffer], a
-	ld a, $ff
-	ld [wd107], a
-	ld hl, NumItems
-	call TossItem
-	ld a, $1
-	ld [ScriptVar], a
-	ret
-
-.asm_17099d
-	pop af
-	pop hl
-.not_egg
-	inc b
-	dec c
-	jr nz, .loop
-	ret
-; 1709a4 (5c:49a4)
-
-String_1709a4: ; 1709a4
-	db "なぞナゾ@@"
-
-Function1709aa: ; 1709aa (5c:49aa)
-	ld a, [rSVBK]
-	push af
-	ld a, BANK(w3_d090)
-	ld [rSVBK], a
-	ld a, [w3_d090]
-	ld [ScriptVar], a
-	pop af
-	ld [rSVBK], a
-	ret
-
-Function1709bb: ; 1709bb (5c:49bb)
-	xor a
-	ld [ScriptVar], a
-	ld a, $5
-	call GetSRAMBank
-	ld a, [$a800]
-	call CloseSRAM
-	cp 6
-	jr nc, .invalid
-	ld e, a
-	ld d, 0
-	ld hl, Jumptable_1709e7
-rept 2
-	add hl, de
-endr
-	ld a, [hli]
-	ld h, [hl]
-	ld l, a
-	jp [hl]
-
-.invalid
-	ld a, $5
-	call GetSRAMBank
-	xor a
-	ld [$a800], a
-	call CloseSRAM
-	ret
-; 1709e7 (5c:49e7)
-
-Jumptable_1709e7: ; 1709e7
-	dw Function170a00
-	dw Function170a00
-	dw Function1709f3
-	dw Function1709f3
-	dw Function170a01
-	dw Function170a33
-; 1709f3
-
-Function1709f3: ; 1709f3
-	ld a, $5
-	call GetSRAMBank
-	ld a, $1
-	ld [$a800], a
-	call CloseSRAM
-
-Function170a00: ; 170a00
-	ret
-; 170a01
-
-Function170a01: ; 170a01
-	ld a, $5
-	call GetSRAMBank
-	ld hl, $b023
-	ld de, $c608
-	ld bc, $0069
-	call CopyBytes
-	ld a, [$a825]
-	ld [wcd30], a
-	ld a, [$a826]
-	ld [wcd31], a
-	call CloseSRAM
-	callba Function11b6b4
-	callba Function17d0f3
-	ld a, $1
-	ld [ScriptVar], a
-	ret
-; 170a33
-
-Function170a33: ; 170a33
-	ld a, $0
-	call GetSRAMBank
-	ld hl, wRTC
-	ld de, $c608
-	ld bc, $0004
-	call CopyBytes
-	call CloseSRAM
-	ld a, $5
-	call GetSRAMBank
-	ld hl, $b08c
-	ld de, $c608
-	ld c, $4
-.asm_170a54
-	ld a, [de]
-	inc de
-	cp [hl]
-	jr nz, .asm_170a78
-	inc hl
-	dec c
-	jr nz, .asm_170a54
-	call CloseSRAM
-	ld a, [MapGroup]
-	ld b, a
-	ld a, [MapNumber]
-	ld c, a
-	call GetMapTrigger
-	ld a, d
-	or e
-	jr z, .asm_170a72
-	ld a, [de]
-	and a
-	ret nz
-
-.asm_170a72
-	ld a, $1
-	ld [ScriptVar], a
-	ret
-
-.asm_170a78
-	call CloseSRAM
-	ld a, $5
-	call GetSRAMBank
-	xor a
-	ld [$a800], a
-	call CloseSRAM
-	ld [ScriptVar], a
-	ld a, [MapGroup]
-	ld b, a
-	ld a, [MapNumber]
-	ld c, a
-	call GetMapTrigger
-	ld a, d
-	or e
-	jr z, .asm_170a9b
-	xor a
-	ld [de], a
-
-.asm_170a9b
-	ret
-; 170a9c
-
-Function170a9c: ; 170a9c (5c:4a9c)
-	ld c, $0
-	jr asm_170aa2
-
-Function170aa0: ; 170aa0 (5c:4aa0)
-	ld c, $1
-asm_170aa2: ; 170aa2 (5c:4aa2)
-	ld a, $5
-	call GetSRAMBank
-	ld a, c
-	ld [$aa8d], a
-	call CloseSRAM
-	ret
-
-Function170aaf: ; 170aaf (5c:4aaf)
-	ld a, $5
-	call GetSRAMBank
-	ld a, [$aa8d]
-	ld [ScriptVar], a
-	call CloseSRAM
-	ret
-
-Function170abe: ; 170abe (5c:4abe)
-	call Function17089a
-	ld a, [ScriptVar]
-	and a
-	ret z
-	ld a, BANK(sbe4f)
-	call GetSRAMBank
-	ld a, [sbe4f]
-	and $1
-	ld [ScriptVar], a
-	call CloseSRAM
-	ret
-
-Function170ad7: ; 170ad7 (5c:4ad7)
-	ld a, BANK(sbe4f)
-	call GetSRAMBank
-	ld a, [sbe4f]
-	or $1
-	ld [sbe4f], a
-	call CloseSRAM
-	ret
-
-Function170ae8: ; 170ae8 (5c:4ae8)
-	ld a, $5
-	call GetSRAMBank
-	ld a, [$b2fb]
-	call CloseSRAM
-	ld c, $a
-	call SimpleDivide
-	ld a, b
-	ld [wcd4f], a
-	xor a
-	ld [ScriptVar], a
-	callba Function119d93
-	ret nc
-	ld a, $5
-	call GetSRAMBank
-	ld a, [$b2fb]
-	call CloseSRAM
-	ld [ScriptVar], a
-	ret
-
-Function170b16: ; 170b16 (5c:4b16)
-	ld a, $5
-	call GetSRAMBank
-	ld a, [$b2fb]
-	call CloseSRAM
-	ld c, 10
-	call SimpleDivide
-	ld a, b
-	ld [wcd4f], a
-	xor a
-	ld [ScriptVar], a
-	callba Function119dd1
-	ret nc
-	ld a, $5
-	call GetSRAMBank
-	ld a, [$b2fb]
-	call CloseSRAM
-	ld [ScriptVar], a
-	ret
-
 Function_LoadOpponentTrainerAndPokemonsWithOTSprite: ; 0x170b44
 	callba Function_LoadOpponentTrainerAndPokemons
 	ld a, [rSVBK]
@@ -1297,7 +116,7 @@
 	ld [hUsedSpriteIndex], a
 	ld a, [hl]
 	ld [hUsedSpriteTile], a
-	callba Function143c8
+	callba GetUsedSprite
 	ret
 ; 170b90
 
@@ -1532,7 +351,7 @@
 	ld hl, LZ_1715a4
 	ld de, wd000
 	call Decompress
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld hl, VTiles0
 	lb bc, $6, $53
 	call Get2bpp
@@ -1593,7 +412,7 @@
 	call ClearBGPalettes
 	call ClearSprites
 	callba Function171d2b
-	callba Function104061
+	callba ReloadMapPart
 	callba Function8cf53
 	ret
 
@@ -1604,7 +423,7 @@
 	jr nz, .asm_171a2c
 	call Function171a36
 	callba Function8cf69
-	callba Function104061
+	callba ReloadMapPart
 	jr Function171a11
 .asm_171a2c
 	callba Function8cf53
@@ -1760,23 +579,23 @@
 	jr Function171b42
 
 Function171b4b: ; 171b4b (5c:5b4b)
-	lb de, $40, $10
-	ld a, $1d
-	call Function3b2a
+	depixel 8, 2
+	ld a, SPRITE_ANIM_INDEX_1D
+	call _InitSpriteAnimStruct
 	ld hl, $c
 	add hl, bc
 	ld a, $8
 	ld [hl], a
-	lb de, $40, $98
-	ld a, $1d
-	call Function3b2a
+	depixel 8, 19
+	ld a, SPRITE_ANIM_INDEX_1D
+	call _InitSpriteAnimStruct
 	ld hl, $c
 	add hl, bc
 	ld a, $9
 	ld [hl], a
-	lb de, $8a, $70
-	ld a, $1d
-	call Function3b2a
+	depixel 17, 14, 2, 0
+	ld a, SPRITE_ANIM_INDEX_1D
+	call _InitSpriteAnimStruct
 	ld hl, $c
 	add hl, bc
 	ld a, $a
@@ -1861,7 +680,7 @@
 	call LoadMenuDataHeader
 	call MenuBox
 	call MenuBoxCoord2Tile
-	callba Function104061
+	callba ReloadMapPart
 	hlcoord 1, 14
 	ld de, String_171c73
 	call PlaceString
@@ -1957,10 +776,10 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, Palette_171d71
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $40
 	call CopyBytes
-	ld hl, MovementAnimation
+	ld hl, EngineBuffer5
 	ld a, $ff
 	ld [hli], a
 	ld a, $7f
@@ -2120,7 +939,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, Palette_172edf
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $40
 	call CopyBytes
 	ld hl, Palette_172edf
--- a/misc/mobile_5f.asm
+++ b/misc/mobile_5f.asm
@@ -6,7 +6,7 @@
 	call DisableLCD
 
 	ld hl, VTiles2
-	ld bc, $310
+	ld bc, $31 tiles
 	xor a
 	call ByteFill
 
@@ -48,11 +48,11 @@
 	ld a, [rSVBK]
 	push af
 
-	ld a, 5 ; BANK(wMapPals)
+	ld a, 5 ; BANK(UnknBGPals)
 	ld [rSVBK], a
 
 	ld hl, HaveWantPals
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $80
 	call CopyBytes
 
@@ -61,7 +61,7 @@
 
 	ld hl, MobileSelectGFX
 	ld de, VTiles0 tile $30
-	ld bc, $200
+	ld bc, $20 tiles
 	call CopyBytes
 
 	ld a, 1
@@ -69,12 +69,12 @@
 
 	ld hl, HaveWantGFX
 	ld de, VTiles2
-	ld bc, $800
+	ld bc, $80 tiles
 	call CopyBytes
 
 	ld hl, HaveWantGFX + $800
 	ld de, VTiles1
-	ld bc, $100
+	ld bc, $10 tiles
 	call CopyBytes
 
 	xor a
@@ -81,7 +81,7 @@
 	ld [rVBK], a
 
 	call EnableLCD
-	callba Function104061
+	callba ReloadMapPart
 	ret
 ; 17c083
 
@@ -226,46 +226,48 @@
 	ret
 ; 17d0b3
 
-Function17d0b3: ; 17d0b3
-.asm_17d0b3
+CheckStringForErrors_IgnoreTerminator: ; 17d0b3
+; Find control chars
+.loop
 	ld a, [de]
 	inc de
 	and a
-	jr z, .asm_17d0ee
-	cp $60
-	jr nc, .asm_17d0ee
-	cp $4e
-	jr z, .asm_17d0ee
-	cp $50
-	jr z, .asm_17d0ee
+	jr z, .next
+	cp "<DEXEND>" + 1
+	jr nc, .next
+	cp "<NEXT>"
+	jr z, .next
+	cp "@"
+	jr z, .next
+
 	cp $5
-	jr c, .asm_17d0ec
-	cp $14
-	jr c, .asm_17d0ee
+	jr c, .end
+	cp "<PLAY_G>"
+	jr c, .next
 	cp $19
-	jr c, .asm_17d0ec
+	jr c, .end
 	cp $1d
-	jr c, .asm_17d0ee
-	cp $26
-	jr c, .asm_17d0ec
+	jr c, .next
+	cp "%" + 1
+	jr c, .end
 	cp $35
-	jr c, .asm_17d0ee
-	cp $3a
-	jr c, .asm_17d0ec
-	cp $3f
-	jr c, .asm_17d0ee
-	cp $40
-	jr c, .asm_17d0ec
-	cp $49
-	jr c, .asm_17d0ee
+	jr c, .next
+	cp "<GREEN>" + 1
+	jr c, .end
+	cp "<ENEMY>"
+	jr c, .next
+	cp "<ENEMY>" + 1
+	jr c, .end
+	cp "<MOM>"
+	jr c, .next
 
-.asm_17d0ec
+.end
 	scf
 	ret
 
-.asm_17d0ee
+.next
 	dec c
-	jr nz, .asm_17d0b3
+	jr nz, .loop
 	and a
 	ret
 ; 17d0f3
@@ -303,7 +305,7 @@
 	ld [wd1e9], a
 	ld a, $2
 	ld [wLinkMode], a
-	callba Function421d8
+	callba EvolvePokemon
 	xor a
 	ld [wLinkMode], a
 	callba Function14a58
@@ -324,7 +326,7 @@
 	ld [de], a
 
 .asm_17d180
-	call Function2b3c
+	call ReturnToCallingMenu
 	call RestartMapMusic
 	ret
 ; 17d187
@@ -380,22 +382,22 @@
 	ret
 ; 17d1e1
 
-Function17d1e1: ; 17d1e1
-.asm_17d1e1
+CheckStringContainsLessThanBNextCharacters: ; 17d1e1
+.loop
 	ld a, [de]
 	inc de
-	cp $4e
-	jr nz, .asm_17d1ea
+	cp "<NEXT>"
+	jr nz, .next_char
 	dec b
-	jr z, .asm_17d1ef
+	jr z, .done
 
-.asm_17d1ea
+.next_char
 	dec c
-	jr nz, .asm_17d1e1
+	jr nz, .loop
 	and a
 	ret
 
-.asm_17d1ef
+.done
 	scf
 	ret
 ; 17d1f1
@@ -415,7 +417,7 @@
 	ld bc, PARTYMON_STRUCT_LENGTH
 	call AddNTimes
 	predef GetUnownLetter
-	callab Functionfba18
+	callab UpdateUnownDex
 	ld a, [wdef4]
 	and a
 	jr nz, .asm_17d223
@@ -440,18 +442,18 @@
 Special_Menu_ChallengeExplanationCancel: ; 17d224
 	ld a, [ScriptVar]
 	and a
-	jr nz, .asm_17d234
+	jr nz, .English
 	ld a, $4
 	ld [ScriptVar], a
 	ld hl, MenuDataHeader_17d26a ; Japanese Menu, where you can choose 'News' as an option
-	jr .asm_17d23c
+	jr .Load_Interpret
 
-.asm_17d234
+.English
 	ld a, $4
 	ld [ScriptVar], a
 	ld hl, MenuDataHeader_ChallengeExplanationCancel ; English Menu
 
-.asm_17d23c
+.Load_Interpret
 	call LoadMenuDataHeader
 	call Function17d246
 	call WriteBackup
@@ -460,25 +462,25 @@
 
 Function17d246: ; 17d246
 	call InterpretMenu2
-	jr c, .asm_17d264
+	jr c, .Exit
 	ld a, [ScriptVar]
 	cp $5
-	jr nz, .asm_17d25d
+	jr nz, .UseMenuSelection2
 	ld a, [MenuSelection2]
 	cp $3
 	ret z
-	jr c, .asm_17d25d
+	jr c, .UseMenuSelection2
 	dec a
-	jr .asm_17d260
+	jr .LoadToScriptVar
 
-.asm_17d25d
+.UseMenuSelection2
 	ld a, [MenuSelection2]
 
-.asm_17d260
+.LoadToScriptVar
 	ld [ScriptVar], a
 	ret
 
-.asm_17d264
+.Exit
 	ld a, $4
 	ld [ScriptVar], a
 	ret
@@ -494,8 +496,8 @@
 MenuData2_17d272: ; 17d272
 	db $a0 ; flags
 	db 4
-	db "ニュース", $1f, "よみこむ@"
-	db "ニュース", $1f, "みる@"
+	db "ニュース¯よみこむ@"
+	db "ニュース¯みる@"
 	db "せつめい@"
 	db "やめる@"
 ; 17d28f
@@ -562,7 +564,7 @@
 	ld [MusicFadeIDHi], a
 	call PlayMusic
 	call ReturnToMapFromSubmenu
-	call Function2b3c
+	call ReturnToCallingMenu
 	ret
 ; 17d314
 
@@ -629,31 +631,31 @@
 	call ClearBGPalettes
 	call ClearSprites
 	call ClearScreen
-	callba Function104061
+	callba ReloadMapPart
 	call DisableLCD
 	ld hl, VTiles1 tile $6e
 	ld de, $c608
-	ld bc, $0010
+	ld bc, 1 tiles
 	call CopyBytes
 	ld a, $1
 	ld [rVBK], a
 	ld hl, PokemonNewsGFX
 	ld de, VTiles1
-	ld bc, $0480
+	ld bc, $48 tiles
 	call CopyBytes
 	xor a
 	ld hl, VTiles2 tile $7f
-	ld bc, $0010
+	ld bc, 1 tiles
 	call ByteFill
 	ld hl, $c608
 	ld de, VTiles1 tile $6e
-	ld bc, $0010
+	ld bc, 1 tiles
 	call CopyBytes
 	xor a
 	ld [rVBK], a
 	ld hl, GFX_17eb7e
 	ld de, VTiles2 tile $60
-	ld bc, $0010
+	ld bc, 1 tiles
 	call CopyBytes
 	call EnableLCD
 	call Function17d60b
@@ -664,7 +666,7 @@
 	ld a, $6
 	call GetSRAMBank
 	ld hl, $a006
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	call CopyBytes
 	call CloseSRAM
@@ -675,27 +677,27 @@
 	call ClearBGPalettes
 	call ClearSprites
 	call ClearScreen
-	callba Function104061
+	callba ReloadMapPart
 
 Function17d405:
 	call DisableLCD
 	ld hl, VTiles1 tile $6e
 	ld de, $c608
-	ld bc, $0010
+	ld bc, 1 tiles
 	call CopyBytes
 	ld a, $1
 	ld [rVBK], a
 	ld hl, PokemonNewsGFX
 	ld de, VTiles1
-	ld bc, $0480
+	ld bc, $48 tiles
 	call CopyBytes
 	xor a
 	ld hl, VTiles2 tile $7f
-	ld bc, $0010
+	ld bc, 1 tiles
 	call ByteFill
 	ld hl, $c608
 	ld de, VTiles1 tile $6e
-	ld bc, $0010
+	ld bc, 1 tiles
 	call CopyBytes
 	xor a
 	ld [rVBK], a
@@ -705,7 +707,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, Palette_17eff6
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0040
 	call CopyBytes
 	call SetPalettes
@@ -721,7 +723,7 @@
 	bit 7, a
 	jr nz, .asm_17d46f
 	call Function17d474
-	callba Function104061
+	callba ReloadMapPart
 	jr .asm_17d45a
 
 .asm_17d46f
@@ -935,7 +937,7 @@
 	call Function17e451
 	call Function17e55b
 	call Function17e5af
-	callba Function104061
+	callba ReloadMapPart
 	jp Function17e438
 ; 17d5be
 
@@ -985,7 +987,7 @@
 	ld a, $5
 	ld [rSVBK], a
 	ld hl, $c608
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0040
 	call CopyBytes
 	ld a, $4
@@ -1239,7 +1241,7 @@
 	call GetSRAMBank
 	ld hl, $a006
 	add hl, bc
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $1000
 	call CopyBytes
 	call CloseSRAM
@@ -1363,7 +1365,7 @@
 	ld a, [hli]
 	ld d, a
 	push hl
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	add hl, de
 	ld de, wcc60
 .asm_17d86c
@@ -1432,7 +1434,7 @@
 	ld a, $3
 	ld [rSVBK], a
 	ld hl, $c608
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld b, $0
 	call CopyBytes
 	ld a, $4
@@ -1467,7 +1469,7 @@
 	call Function17e41e
 	call Function17e32b
 	pop de
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	add hl, de
 	ld de, wcc60
 .asm_17d918
@@ -1973,7 +1975,7 @@
 Function17dc9f: ; 17dc9f
 	call Function17e415
 	call Function17e41e
-	call Function4dd
+	call RotateFourPalettesLeft
 	ret
 ; 17dca9
 
@@ -1984,7 +1986,7 @@
 Function17dcaf:
 	ld a, $5
 	ld [rSVBK], a
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	ld de, $0008
 	ld c, $8
 .asm_17dcbb
@@ -1997,7 +1999,7 @@
 	add hl, de
 	dec c
 	jr nz, .asm_17dcbb
-	call FadeToWhite
+	call RotateThreePalettesRight
 	ld a, $4
 	ld [rSVBK], a
 	ret
@@ -2362,7 +2364,7 @@
 	push hl
 	push bc
 	predef TryAddMonToParty
-	callba Function4db49
+	callba SetCaughtData
 	pop bc
 	pop hl
 	bit 1, b
@@ -2400,7 +2402,7 @@
 	ld a, [hli]
 	ld b, a
 	push hl
-	callba SetPartymonCaughtData
+	callba SetGiftPartyMonCaughtData
 	pop hl
 	pop bc
 	jr .asm_17df5e
@@ -2558,7 +2560,7 @@
 	push hl
 	callba LoadEnemyMon
 	callba SentPkmnIntoBox
-	callba Function4db83
+	callba SetBoxMonCaughtData
 	pop hl
 	pop bc
 	ld a, BANK(sBoxMonNicknames)
@@ -2587,7 +2589,7 @@
 	ld b, a
 	push hl
 	call CloseSRAM
-	callba SetBoxMonCaughtData
+	callba SetGiftBoxMonCaughtData
 	ld a, $1
 	call GetSRAMBank
 	pop hl
@@ -3111,7 +3113,7 @@
 	push af
 	ld a, $1
 	ld [rSVBK], a
-	callba Function14e13
+	callba SaveChecksum
 	pop af
 	ld [rSVBK], a
 	ret
@@ -3165,7 +3167,7 @@
 ; 17e40f
 
 Function17e40f: ; 17e40f
-	ld de, wMapPals
+	ld de, UnknBGPals
 	add hl, de
 	jr Function17e41e
 
@@ -4419,7 +4421,7 @@
 	ld e, a
 	ld a, [hli]
 	ld d, a
-	ld hl, wMapPals
+	ld hl, UnknBGPals
 	add hl, de
 	ld e, l
 	ld d, h
@@ -4674,7 +4676,7 @@
 	call Function17f555
 	pop af
 	ld [rSVBK], a
-	call Function2b4d
+	call ExitAllMenus
 	ret
 ; 17f555
 
--- a/misc/unused_title.asm
+++ b/misc/unused_title.asm
@@ -31,7 +31,7 @@
 	call CopyBytes
 
 	ld hl, UnusedTitleBG_Tilemap
-	ld de, VBGMap0
+	debgcoord 0, 0
 	ld bc, 32 * 32
 .copy
 	ld a, 0
@@ -67,12 +67,12 @@
 	ld [rSVBK], a
 
 	ld hl, UnusedTitleBG_Palettes
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $40
 	call CopyBytes
 
 	ld hl, UnusedTitleFG_Palettes
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, $40
 	call CopyBytes
 
--- a/predef/cgb.asm
+++ b/predef/cgb.asm
@@ -8,12 +8,12 @@
 
 Predef_LoadSGBLayoutCGB: ; 8d59
 	ld a, b
-	cp $ff
-	jr nz, .asm_8d61
+	cp SCGB_RAM
+	jr nz, .not_ram
 	ld a, [SGBPredef]
 
-.asm_8d61
-	cp -4
+.not_ram
+	cp SCGB_FC
 	jp z, Function96f3
 	call Function9673
 	ld l, a
@@ -34,56 +34,56 @@
 ; 8d7a
 
 .jumptable: ; 8d7a
-	dw Function8db8
-	dw Function8ddb
-	dw Function8eb9
-	dw Function8edb
-	dw Function8f70
-	dw Function906e
-	dw Function90f8
-	dw Function9122
-	dw Function91ad
-	dw Function91c8
-	dw Function91d1
-	dw Function91e4
-	dw Function9228
-	dw Function9251
-	dw Function9373
-	dw Function93a6
-	dw Function93ba
-	dw Function9195
-	dw Function9499
-	dw Function94d0
-	dw Function93d3
-	dw Function9289
-	dw Function903e
-	dw Function8fca
-	dw Function925e
-	dw Function94fa
-	dw Function9529
-	dw Function9555
-	dw Function9578
-	dw Function9591
-	dw Function9542
+	dw _CGB00
+	dw _CGB01
+	dw _CGB02
+	dw _CGB03
+	dw _CGB04
+	dw _CGB05
+	dw _CGB06
+	dw _CGB07
+	dw _CGB08
+	dw _CGB09
+	dw _CGB0a
+	dw _CGB0b
+	dw _CGB0c
+	dw _CGB0d
+	dw _CGB0e
+	dw _CGB0f
+	dw _CGB10
+	dw _CGB11
+	dw _CGB12
+	dw _CGB13
+	dw _CGB14
+	dw _CGB15
+	dw _CGB16
+	dw _CGB17
+	dw _CGB18
+	dw _CGB19
+	dw _CGB1a
+	dw _CGB1b
+	dw _CGB1c
+	dw _CGB1d
+	dw _CGB1e
 ; 8db8
 
-Function8db8: ; 8db8
+_CGB00: ; 8db8
 	ld hl, PalPacket_9c66 + 1
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld c, $4
 	call CopyPalettes
 	ld hl, PalPacket_9c66 + 1
-	ld de, wMapPals + $20
+	ld de, UnknBGPals + $20
 	ld c, $4
 	call CopyPalettes
 	ld hl, PalPacket_9c66 + 1
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld c, $2
 	call CopyPalettes
 	jr Function8e23
 
-Function8ddb: ; 8ddb
-	ld de, wMapPals
+_CGB01: ; 8ddb
+	ld de, UnknBGPals
 	call Function9729
 	push hl
 	call Function9643
@@ -110,12 +110,12 @@
 	call Function9643
 	ld hl, Palettes_a8ca
 	call Function9643
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	pop hl
 	call Function9643
 	pop hl
 	call Function9643
-	ld a, $1
+	ld a, SCGB_01
 	ld [SGBPredef], a
 	call Function96a4
 
@@ -126,31 +126,31 @@
 	ld a, $2
 	call ByteFill
 	hlcoord 0, 4, AttrMap
-	ld bc, $080a
+	lb bc, 8, 10
 	ld a, $0
-	call Function9663
+	call FillBoxCGB
 	hlcoord 10, 0, AttrMap
-	ld bc, $070a
+	lb bc, 7, 10
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	hlcoord 0, 0, AttrMap
-	ld bc, $040a
+	lb bc, 4, 10
 	ld a, $2
-	call Function9663
+	call FillBoxCGB
 	hlcoord 10, 7, AttrMap
-	ld bc, $050a
+	lb bc, 5, 10
 	ld a, $3
-	call Function9663
+	call FillBoxCGB
 	hlcoord 10, 11, AttrMap
-	ld bc, $0109
+	lb bc, 1, 9
 	ld a, $4
-	call Function9663
+	call FillBoxCGB
 	hlcoord 0, 12, AttrMap
-	ld bc, $0078
+	ld bc, 6 * SCREEN_WIDTH
 	ld a, $7
 	call ByteFill
 	ld hl, Palettes_979c
-	ld de, Unkn2Pals + $10
+	ld de, UnknOBPals + $10
 	ld bc, $0030
 	ld a, $5
 	call FarCopyWRAM
@@ -168,7 +168,7 @@
 	ld hl, Palette_b309
 
 .asm_8e93
-	ld de, wMapPals + 8 * 7
+	ld de, UnknBGPals + 8 * 7
 	ld bc, $0008
 	ld a, $5
 	call FarCopyWRAM
@@ -182,7 +182,7 @@
 	ld hl, Palette_b309
 
 .asm_8ead
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0008
 	ld a, $5
 	call FarCopyWRAM
@@ -189,7 +189,7 @@
 	ret
 ; 8eb9
 
-Function8eb9: ; 8eb9
+_CGB02: ; 8eb9
 	ld a, [PlayerGender]
 	bit 0, a
 	jr z, .asm_8ec5
@@ -200,7 +200,7 @@
 	ld hl, Palettes_b729
 
 .asm_8ec8
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0030
 	ld a, $5
 	call FarCopyWRAM
@@ -210,8 +210,8 @@
 	ret
 ; 8edb
 
-Function8edb: ; 8edb
-	ld de, wMapPals
+_CGB03: ; 8edb
+	ld de, UnknBGPals
 	ld a, [wcda1]
 	ld l, a
 	ld h, $0
@@ -228,31 +228,31 @@
 	ld hl, Palettes_a8ca
 	call Function9643
 	ld hl, Palette8f52
-	ld de, wMapPals + 8 * 3
+	ld de, UnknBGPals + 8 * 3
 	ld bc, $0018
 	ld a, $5
 	call FarCopyWRAM
 	call Function9699
 	hlcoord 0, 0, AttrMap
-	ld bc, $0814
+	lb bc, 8, SCREEN_WIDTH
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	hlcoord 10, 16, AttrMap
 	ld bc, $000a
 	ld a, $2
 	call ByteFill
 	hlcoord 13, 5, AttrMap
-	ld bc, $0202
+	lb bc, 2, 2
 	ld a, $3
-	call Function9663
+	call FillBoxCGB
 	hlcoord 15, 5, AttrMap
-	ld bc, $0202
+	lb bc, 2, 2
 	ld a, $4
-	call Function9663
+	call FillBoxCGB
 	hlcoord 17, 5, AttrMap
-	ld bc, $0202
+	lb bc, 2, 2
 	ld a, $5
-	call Function9663
+	call FillBoxCGB
 	call Function96b3
 	call Function96a4
 	ld a, $1
@@ -285,8 +285,8 @@
 	RGB 17, 31, 31
 ; 8f70
 
-Function8f70: ; 8f70
-	ld de, wMapPals
+_CGB04: ; 8f70
+	ld de, UnknBGPals
 	ld a, $1d
 	call GetAthPalletFromPalettes9df6
 	call LoadHLPaletteIntoDE
@@ -304,12 +304,12 @@
 .asm_8f90
 	call Function9699
 	hlcoord 1, 1, AttrMap
-	ld bc, $0707
+	lb bc, 7, 7
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	call Function971a
 	ld hl, Palette8fc2
-	ld de, Unkn2Pals + $38
+	ld de, UnknOBPals + $38
 	ld bc, $0008
 	ld a, $5
 	call FarCopyWRAM
@@ -333,8 +333,8 @@
 	RGB 00, 00, 00
 ; 8fca
 
-Function8fca: ; 8fca
-	ld de, wMapPals
+_CGB17: ; 8fca
+	ld de, UnknBGPals
 	ld a, $1d
 	call GetAthPalletFromPalettes9df6
 	call LoadHLPaletteIntoDE
@@ -353,9 +353,9 @@
 .asm_8fed
 	call Function9699
 	hlcoord 1, 4, AttrMap
-	ld bc, $0707
+	lb bc, 7, 7
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	call Function971a
 	call Function96b3
 	call Function96a4
@@ -376,9 +376,9 @@
 .asm_901a
 	call Function9699
 	hlcoord 1, 1, AttrMap
-	ld bc, $0707
+	lb bc, 7, 7
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	call Function971a
 	call Function96b3
 	call Function96a4
@@ -394,8 +394,8 @@
 	RGB 00, 00, 00
 ; 903e
 
-Function903e: ; 903e
-	ld de, wMapPals
+_CGB16: ; 903e
+	ld de, UnknBGPals
 	ld a, $1d
 	call GetAthPalletFromPalettes9df6
 	call LoadHLPaletteIntoDE
@@ -404,9 +404,9 @@
 	call Function9643
 	call Function9699
 	hlcoord 7, 5, AttrMap
-	ld bc, $0707
+	lb bc, 7, 7
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	call Function971a
 	call Function96b3
 	call Function96a4
@@ -415,49 +415,49 @@
 	ret
 ; 906e
 
-Function906e: ; 906e
+_CGB05: ; 906e
 	ld hl, Palettes_b7a9
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0080
 	ld a, $5
 	call FarCopyWRAM
 	call Function9699
 	hlcoord 0, 2, AttrMap
-	ld bc, $0a03
+	lb bc, 10, 3
 	ld a, $2
-	call Function9663
+	call FillBoxCGB
 	hlcoord 17, 2, AttrMap
-	ld bc, $0a03
+	lb bc, 10, 3
 	ld a, $2
-	call Function9663
+	call FillBoxCGB
 	hlcoord 0, 4, AttrMap
-	ld bc, $0603
+	lb bc, 6, 3
 	ld a, $3
-	call Function9663
+	call FillBoxCGB
 	hlcoord 17, 4, AttrMap
-	ld bc, $0603
+	lb bc, 6, 3
 	ld a, $3
-	call Function9663
+	call FillBoxCGB
 	hlcoord 0, 6, AttrMap
-	ld bc, $0203
+	lb bc, 2, 3
 	ld a, $4
-	call Function9663
+	call FillBoxCGB
 	hlcoord 17, 6, AttrMap
-	ld bc, $0203
+	lb bc, 2, 3
 	ld a, $4
-	call Function9663
+	call FillBoxCGB
 	hlcoord 4, 2, AttrMap
-	ld bc, $020c
+	lb bc, 2, 12
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	hlcoord 3, 2, AttrMap
-	ld bc, $0a01
+	lb bc, 10, 1
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	hlcoord 16, 2, AttrMap
-	ld bc, $0a01
+	lb bc, 10, 1
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	hlcoord 0, 12, AttrMap
 	ld bc, $0078
 	ld a, $7
@@ -469,18 +469,18 @@
 	ret
 ; 90f8
 
-Function90f8: ; 90f8
+_CGB06: ; 90f8
 	ld hl, PalPacket_9ca6 + 1
 	call CopyFourPalettes
 	call Function9699
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld a, $3c
 	call GetAthPalletFromPalettes9df6
 	call LoadHLPaletteIntoDE
 	hlcoord 0, 6, AttrMap
-	ld bc, $0c14
+	lb bc, 12, SCREEN_WIDTH
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	call Function96b3
 	call Function96a4
 	ld a, $1
@@ -488,7 +488,7 @@
 	ret
 ; 9122
 
-Function9122: ; 9122
+_CGB07: ; 9122
 	ld b, 0
 	ld hl, Jumptable_912d
 rept 2
@@ -508,10 +508,10 @@
 
 Function9133: ; 9133
 	ld hl, Palette_914e
-	ld de, wMapPals
+	ld de, UnknBGPals
 	call LoadHLPaletteIntoDE
 	ld hl, Palette_9156
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, $0010
 	ld a, $5
 	call FarCopyWRAM
@@ -538,11 +538,11 @@
 ; 9166
 
 Function9166: ; 9166
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld a, $38
 	call GetAthPalletFromPalettes9df6
 	call LoadHLPaletteIntoDE
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld a, $39
 	call GetAthPalletFromPalettes9df6
 	call LoadHLPaletteIntoDE
@@ -553,7 +553,7 @@
 Function9180: ; 9180
 	ld hl, PalPacket_9c36 + 1
 	call CopyFourPalettes
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld a, $3a
 	call GetAthPalletFromPalettes9df6
 	call LoadHLPaletteIntoDE
@@ -561,9 +561,9 @@
 	ret
 ; 9195
 
-Function9195: ; 9195
+_CGB11: ; 9195
 	ld hl, Palettes_b789
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0028
 	ld a, $5
 	call FarCopyWRAM
@@ -573,9 +573,9 @@
 	ret
 ; 91ad
 
-Function91ad: ; 91ad
+_CGB08: ; 91ad
 	ld hl, Palettes_b641
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0080
 	ld a, $5
 	call FarCopyWRAM
@@ -586,14 +586,14 @@
 	ret
 ; 91c8
 
-Function91c8: ; 91c8
+_CGB09: ; 91c8
 	call Functionb1de
-	ld a, $9
+	ld a, SCGB_09
 	ld [SGBPredef], a
 	ret
 ; 91d1
 
-Function91d1: ; 91d1
+_CGB0a: ; 91d1
 	ld hl, PalPacket_9c56 + 1
 	call CopyFourPalettes
 	call Function8e9f
@@ -603,8 +603,8 @@
 	ret
 ; 91e4
 
-Function91e4: ; 91e4
-	ld de, wMapPals
+_CGB0b: ; 91e4
+	ld de, UnknBGPals
 	ld a, c
 	and a
 	jr z, .asm_91f5
@@ -624,7 +624,7 @@
 	call Function974b
 	call Function9643
 	ld hl, Palettes_979c
-	ld de, Unkn2Pals + $10
+	ld de, UnknOBPals + $10
 	ld bc, $0030
 	ld a, $5
 	call FarCopyWRAM
@@ -638,18 +638,18 @@
 	ret
 ; 9228
 
-Function9228: ; 9228
+_CGB0c: ; 9228
 	ld hl, Palettes_b6f1
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0028
 	ld a, $5
 	call FarCopyWRAM
 	ld hl, Palettes_b719
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, $0010
 	ld a, $5
 	call FarCopyWRAM
-	ld a, $8
+	ld a, SCGB_08
 	ld [SGBPredef], a
 	call Function96a4
 	ld a, $1
@@ -657,7 +657,7 @@
 	ret
 ; 9251
 
-Function9251: ; 9251
+_CGB0d: ; 9251
 	ld hl, PalPacket_9cb6 + 1
 	call CopyFourPalettes
 	call Function9699
@@ -665,10 +665,10 @@
 	ret
 ; 925e
 
-Function925e: ; 925e
+_CGB18: ; 925e
 	ld hl, PalPacket_9bc6 + 1
 	call CopyFourPalettes
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld a, $4c
 	call GetAthPalletFromPalettes9df6
 	call LoadHLPaletteIntoDE
@@ -676,7 +676,7 @@
 	push af
 	ld a, $5
 	ld [rSVBK], a
-	ld hl, Unkn2Pals
+	ld hl, UnknOBPals
 	ld a, $1f
 	ld [hli], a
 	ld a, $0
@@ -688,8 +688,8 @@
 	ret
 ; 9289
 
-Function9289: ; 9289
-	ld de, wMapPals
+_CGB15: ; 9289
+	ld de, UnknBGPals
 	xor a
 	call Function976b
 	call Function9643
@@ -728,7 +728,7 @@
 .asm_92e3
 	call ByteFill
 	hlcoord 14, 1, AttrMap
-	ld bc, $0705
+	lb bc, 7, 5
 	ld a, [PlayerGender]
 	and a
 	ld a, $0
@@ -736,45 +736,45 @@
 	ld a, $1
 
 .asm_92f6
-	call Function9663
+	call FillBoxCGB
 	hlcoord 18, 1, AttrMap
 	ld [hl], $1
 	hlcoord 2, 11, AttrMap
-	ld bc, $0204
+	lb bc, 2, 4
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	hlcoord 6, 11, AttrMap
-	ld bc, $0204
+	lb bc, 2, 4
 	ld a, $2
-	call Function9663
+	call FillBoxCGB
 	hlcoord 10, 11, AttrMap
-	ld bc, $0204
+	lb bc, 2, 4
 	ld a, $3
-	call Function9663
+	call FillBoxCGB
 	hlcoord 14, 11, AttrMap
-	ld bc, $0204
+	lb bc, 2, 4
 	ld a, $4
-	call Function9663
+	call FillBoxCGB
 	hlcoord 2, 14, AttrMap
-	ld bc, $0204
+	lb bc, 2, 4
 	ld a, $5
-	call Function9663
+	call FillBoxCGB
 	hlcoord 6, 14, AttrMap
-	ld bc, $0204
+	lb bc, 2, 4
 	ld a, $6
-	call Function9663
+	call FillBoxCGB
 	hlcoord 10, 14, AttrMap
-	ld bc, $0204
+	lb bc, 2, 4
 	ld a, $7
-	call Function9663
+	call FillBoxCGB
 	ld a, [PlayerGender]
 	and a
 	push af
 	jr z, .asm_935d
 	hlcoord 14, 14, AttrMap
-	ld bc, $0204
+	lb bc, 2, 4
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 
 .asm_935d
 	pop af
@@ -793,8 +793,8 @@
 	ret
 ; 9373
 
-Function9373: ; 9373
-	ld de, wMapPals
+_CGB0e: ; 9373
+	ld de, UnknBGPals
 	ld a, $10
 	call GetAthPalletFromPalettes9df6
 	call LoadHLPaletteIntoDE
@@ -809,9 +809,9 @@
 	call Function9643
 	call Function9699
 	hlcoord 11, 1, AttrMap
-	ld bc, $0209
+	lb bc, 2, 9
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	call Function96b3
 	call Function96a4
 	ld a, $1
@@ -819,7 +819,7 @@
 	ret
 ; 93a6
 
-Function93a6: ; 93a6
+_CGB0f: ; 93a6
 	ld hl, PalPacket_9c46 + 1
 	call CopyFourPalettes
 	call Function9699
@@ -830,8 +830,8 @@
 	ret
 ; 93ba
 
-Function93ba: ; 93ba
-	ld de, wMapPals
+_CGB10: ; 93ba
+	ld de, UnknBGPals
 	ld a, $1d
 	call GetAthPalletFromPalettes9df6
 	call LoadHLPaletteIntoDE
@@ -843,7 +843,7 @@
 	ret
 ; 93d3
 
-Function93d3: ; 93d3
+_CGB14: ; 93d3
 	ld a, [BattleType]
 	cp BATTLETYPE_TUTORIAL
 	jr z, .asm_93e6
@@ -859,31 +859,31 @@
 	ld hl, Palettes_9439
 
 .asm_93e9
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0040
 	ld a, $5
 	call FarCopyWRAM
 	call Function9699
 	hlcoord 0, 0, AttrMap
-	ld bc, $010a
+	lb bc, 1, 10
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	hlcoord 10, 0, AttrMap
-	ld bc, $010a
+	lb bc, 1, 10
 	ld a, $2
-	call Function9663
+	call FillBoxCGB
 	hlcoord 7, 2, AttrMap
-	ld bc, $0901
+	lb bc, 9, 1
 	ld a, $3
-	call Function9663
+	call FillBoxCGB
 	hlcoord 0, 7, AttrMap
-	ld bc, $0305
+	lb bc, 3, 5
 	ld a, $4
-	call Function9663
+	call FillBoxCGB
 	hlcoord 0, 3, AttrMap
-	ld bc, $0305
+	lb bc, 3, 5
 	ld a, $5
-	call Function9663
+	call FillBoxCGB
 	call Function96b3
 	call Function96a4
 	ld a, $1
@@ -945,8 +945,8 @@
 	RGB 00, 00, 00
 ; 9499
 
-Function9499: ; 9499
-	call Function91c8
+_CGB12: ; 9499
+	call _CGB09
 	ld de, $0014
 	hlcoord 0, 0, AttrMap
 	ld a, [wMenuBorderTopCoord]
@@ -975,23 +975,23 @@
 	inc a
 	ld c, a
 	ld a, $0
-	call Function9663
+	call FillBoxCGB
 	call Function96b3
 	ret
 ; 94d0
 
-Function94d0: ; 94d0
+_CGB13: ; 94d0
 	ld hl, PalPacket_9ba6 + 1
 	call CopyFourPalettes
 	call Function9699
 	hlcoord 0, 4, AttrMap
-	ld bc, $0a14
+	lb bc, 10, SCREEN_WIDTH
 	ld a, $2
-	call Function9663
+	call FillBoxCGB
 	hlcoord 0, 6, AttrMap
-	ld bc, $0614
+	lb bc, 6, SCREEN_WIDTH
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	call Function96b3
 	call Function96a4
 	ld a, $1
@@ -999,16 +999,16 @@
 	ret
 ; 94fa
 
-Function94fa: ; 94fa
-	ld de, wMapPals
+_CGB19: ; 94fa
+	ld de, UnknBGPals
 	ld a, $4e
 	call GetAthPalletFromPalettes9df6
 	call LoadHLPaletteIntoDE
 	ld hl, Palette_9521
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	call LoadHLPaletteIntoDE
 	ld hl, Palette_9521
-	ld de, Unkn2Pals + 8
+	ld de, UnknOBPals + 8
 	call LoadHLPaletteIntoDE
 	call Function9699
 	call Function96b3
@@ -1023,8 +1023,8 @@
 	RGB 00, 00, 00
 ; 9529
 
-Function9529: ; 9529
-	ld de, wMapPals
+_CGB1a: ; 9529
+	ld de, UnknBGPals
 	ld a, [CurPartySpecies]
 	ld bc, TempMonDVs
 	call Function974b
@@ -1035,8 +1035,8 @@
 	ret
 ; 9542
 
-Function9542: ; 9542
-	ld de, wMapPals
+_CGB1e: ; 9542
+	ld de, UnknBGPals
 	ld a, [CurPartySpecies]
 	call Function9775
 	call Function9643
@@ -1045,15 +1045,15 @@
 	ret
 ; 9555
 
-Function9555: ; 9555
+_CGB1b: ; 9555
 	ld hl, PalPacket_9cc6 + 1
 	call CopyFourPalettes
 	ld hl, Palettes_b681
-	ld de, Unkn2Pals
+	ld de, UnknOBPals
 	ld bc, $0008
 	ld a, $5
 	call FarCopyWRAM
-	ld de, Unkn2Pals + $38
+	ld de, UnknOBPals + $38
 	ld a, $1c
 	call GetAthPalletFromPalettes9df6
 	call LoadHLPaletteIntoDE
@@ -1061,8 +1061,8 @@
 	ret
 ; 9578
 
-Function9578: ; 9578
-	ld de, wMapPals
+_CGB1c: ; 9578
+	ld de, UnknBGPals
 	ld a, [CurPartySpecies]
 	ld bc, TempMonDVs
 	call Function9764
@@ -1073,9 +1073,9 @@
 	ret
 ; 9591
 
-Function9591: ; 9591
+_CGB1d: ; 9591
 	ld hl, Palette95e0
-	ld de, wMapPals
+	ld de, UnknBGPals
 	ld bc, $0010
 	ld a, $5
 	call FarCopyWRAM
@@ -1082,25 +1082,25 @@
 	call Function96a4
 	call Function9699
 	hlcoord 3, 7, AttrMap
-	ld bc, $080e
+	lb bc, 8, 14
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	hlcoord 1, 5, AttrMap
-	ld bc, $0112
+	lb bc, 1, 18
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	hlcoord 1, 16, AttrMap
-	ld bc, $0112
+	lb bc, 1, 18
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	hlcoord 0, 0, AttrMap
-	ld bc, $1102
+	lb bc, 17, 2
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	hlcoord 18, 5, AttrMap
-	ld bc, $0c01
+	lb bc, 12, 1
 	ld a, $1
-	call Function9663
+	call FillBoxCGB
 	call Function96b3
 	ret
 ; 95e0
--- a/predef/sgb.asm
+++ b/predef/sgb.asm
@@ -4,12 +4,12 @@
 	jp nz, Predef_LoadSGBLayoutCGB
 
 	ld a, b
-	cp $ff
-	jr nz, .asm_865a
+	cp SCGB_RAM
+	jr nz, .not_ram
 	ld a, [SGBPredef]
 
-.asm_865a
-	cp $fc
+.not_ram
+	cp SCGB_FC
 	jp z, Function8ade
 	ld l, a
 	ld h, 0
@@ -33,12 +33,12 @@
 	dw .SGB05
 	dw .SGB06
 	dw .SGB07
-	dw .SGB08_1d
+	dw .SGB08
 	dw .SGB09
 	dw .SGB0a
 	dw .SGB0b
 	dw .SGB0c
-	dw .SGB0d_15
+	dw .SGB0d
 	dw .SGB0e
 	dw .SGB0f
 	dw .SGB10
@@ -46,7 +46,7 @@
 	dw .SGB12
 	dw .SGB13
 	dw .SGB14
-	dw .SGB0d_15
+	dw .SGB15
 	dw .SGB16
 	dw .SGB17
 	dw .SGB18
@@ -54,7 +54,7 @@
 	dw .SGB1a
 	dw .SGB1b
 	dw .SGB1c
-	dw .SGB08_1d
+	dw .SGB1d
 	dw .SGB1e
 ; 86ad
 
@@ -67,10 +67,12 @@
 .SGB01: ; 86b4
 	ld hl, BlkPacket_9aa6
 	call Function9809
+
 	ld hl, PalPacket_9ce6
 	ld de, wcda9
 	ld bc, $0010
 	call CopyBytes
+
 	ld a, [PlayerHPPal]
 	ld l, a
 	ld h, 0
@@ -79,6 +81,7 @@
 endr
 	ld de, Palettes_a8be
 	add hl, de
+
 	ld a, [hli]
 	ld [wcda9 + 3], a
 	ld a, [hli]
@@ -87,6 +90,7 @@
 	ld [wcda9 + 5], a
 	ld a, [hl]
 	ld [wcda9 + 6], a
+
 	ld a, [EnemyHPPal]
 	ld l, a
 	ld h, $0
@@ -93,6 +97,7 @@
 rept 2
 	add hl, hl
 endr
+
 	ld de, Palettes_a8be
 	add hl, de
 	ld a, [hli]
@@ -103,11 +108,14 @@
 	ld [wcda9 + 11], a
 	ld a, [hl]
 	ld [wcda9 + 12], a
+
 	ld hl, PalPacket_9cf6
 	ld de, wcda9 + $10
 	ld bc, $0010
 	call CopyBytes
+
 	call Function9729
+
 	ld a, [hli]
 	ld [wcda9 + $13], a
 	ld a, [hli]
@@ -125,9 +133,10 @@
 	ld [wcda9 + $1b], a
 	ld a, [hl]
 	ld [wcda9 + $1c], a
+
 	ld hl, wcda9
 	ld de, wcda9 + $10
-	ld a, $1
+	ld a, SCGB_01
 	ld [SGBPredef], a
 	ret
 ; 873c
@@ -137,11 +146,13 @@
 	ld de, wcda9
 	ld bc, $0010
 	call CopyBytes
+
 	ld hl, wcda9 + 1
 	ld [hl], $10
 rept 2
 	inc hl
 endr
+
 	ld a, [PlayerHPPal]
 	add $2f
 	ld [hl], a
@@ -298,7 +309,8 @@
 	ret
 ; 8860
 
-.SGB08_1d: ; 8860
+.SGB08:
+.SGB1d: ; 8860
 	ld hl, PalPacket_9cb6
 	ld de, BlkPacket_9a86
 	ret
@@ -329,7 +341,7 @@
 .SGB0c: ; 8884
 	ld hl, PalPacket_9b96
 	ld de, BlkPacket_9b56
-	ld a, $8
+	ld a, SCGB_08
 	ld [SGBPredef], a
 	ret
 ; 8890
@@ -365,7 +377,7 @@
 	ld hl, wcda9 + 1
 	ld [hld], a
 	ld de, BlkPacket_9a86
-	ld a, $9
+	ld a, SCGB_09
 	ld [SGBPredef], a
 	ret
 ; 88cd
@@ -414,7 +426,8 @@
 	ret
 ; 891a
 
-.SGB0d_15: ; 891a
+.SGB0d:
+.SGB15: ; 891a
 	ld hl, PalPacket_9cb6
 	ld de, BlkPacket_9a86
 	ret
--- a/sram.asm
+++ b/sram.asm
@@ -9,36 +9,76 @@
 
 SECTION "SRAM Bank 0", SRAM [$a600], BANK [0]
 
-sPartyScratch1:: ds 6 * SCRATCHMON_STRUCT_LENGTH
-sPartyScratch2:: ds 6 * SCRATCHMON_STRUCT_LENGTH
-s0_a834:: ds 1
-s0_a835:: ds 10 * SCRATCHMON_STRUCT_LENGTH
-s0_aa0b:: ds 1
-s0_aa0c:: ds 10 * SCRATCHMON_STRUCT_LENGTH
+; a600
+sPartyMail::
+sPartyMon1Mail::       mailmsg sPartyMon1Mail
+sPartyMon2Mail::       mailmsg sPartyMon2Mail
+sPartyMon3Mail::       mailmsg sPartyMon3Mail
+sPartyMon4Mail::       mailmsg sPartyMon4Mail
+sPartyMon5Mail::       mailmsg sPartyMon5Mail
+sPartyMon6Mail::       mailmsg sPartyMon6Mail
 
+; a71a
+sPartyMailBackup::
+sPartyMon1MailBackup:: mailmsg sPartyMon1MailBackup
+sPartyMon2MailBackup:: mailmsg sPartyMon2MailBackup
+sPartyMon3MailBackup:: mailmsg sPartyMon3MailBackup
+sPartyMon4MailBackup:: mailmsg sPartyMon4MailBackup
+sPartyMon5MailBackup:: mailmsg sPartyMon5MailBackup
+sPartyMon6MailBackup:: mailmsg sPartyMon6MailBackup
+
+; a834
+sMailboxCount:: ds 1
+sMailbox::
+sMailbox1::            mailmsg sMailbox1
+sMailbox2::            mailmsg sMailbox2
+sMailbox3::            mailmsg sMailbox3
+sMailbox4::            mailmsg sMailbox4
+sMailbox5::            mailmsg sMailbox5
+sMailbox6::            mailmsg sMailbox6
+sMailbox7::            mailmsg sMailbox7
+sMailbox8::            mailmsg sMailbox8
+sMailbox9::            mailmsg sMailbox9
+sMailbox10::           mailmsg sMailbox10
+
+; aa0b
+sMailboxCountBackup:: ds 1
+sMailboxBackup::
+sMailbox1Backup::      mailmsg sMailbox1Backup
+sMailbox2Backup::      mailmsg sMailbox2Backup
+sMailbox3Backup::      mailmsg sMailbox3Backup
+sMailbox4Backup::      mailmsg sMailbox4Backup
+sMailbox5Backup::      mailmsg sMailbox5Backup
+sMailbox6Backup::      mailmsg sMailbox6Backup
+sMailbox7Backup::      mailmsg sMailbox7Backup
+sMailbox8Backup::      mailmsg sMailbox8Backup
+sMailbox9Backup::      mailmsg sMailbox9Backup
+sMailbox10Backup::     mailmsg sMailbox10Backup
+
+; abe2
 sMysteryGiftItem:: ds 1
-s0_abe3:: ds 1
-s0_abe4:: ds 1
-s0_abe5:: ds 1
-s0_abe6:: ds 10
-s0_abf0:: ds 10
+sMysteryGiftUnlocked:: ds 1
+sBackupMysteryGiftItem:: ds 1
+sNumDailyMysteryGiftPartnerIDs:: ds 1
+sDailyMysteryGiftPartnerIDs:: ds 5 * 2 ; maximum 5 per day, 2 bytes per ID
+sMysteryGiftDecorationsReceived:: flag_array NUM_NON_TROPHY_DECOS
+	ds 4
 sMysteryGiftTimer:: ds 1
 sMysteryGiftTimerStartDay:: ds 1
 	ds 1
 sMysteryGiftTrainerHouseFlag:: ds 1
-s0_abfe:: ds 12
-sMysteryGiftTrainer:: ds (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 1
-	ds 1
-s0_abe4End::
+sMysteryGiftPartnerName:: ds NAME_LENGTH
+s0_ac09:: ds 1
+sMysteryGiftTrainer:: ds (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2
+sBackupMysteryGiftItemEnd::
 
 	ds $30
 
-s0_ac60:: ds 8
+sRTCStatusFlags:: ds 8
 sLuckyNumberDay:: ds 1
 sLuckyIDNumber:: ds 2
 
-	ds $b200 - $ac6b
-
+SECTION "Backup Save", SRAM [$b200], BANK [0]
 sBackupOptions:: ds OptionsEnd - Options
 
 s0_b208:: ds 1
@@ -62,7 +102,7 @@
 
 sOptions:: ds OptionsEnd - Options
 
-s1_a008:: ds 1
+s1_a008:: ds 1 ; loaded with 99, used to check save corruption
 
 sGameData::
 sPlayerData::  ds wPlayerDataEnd - wPlayerData
@@ -75,7 +115,7 @@
 ; ad0d
 
 sChecksum::   ds 2
-s1_ad0f::     ds 1
+s1_ad0f::     ds 1 ; loaded with 0x7f, used to check save corruption
 
 ; ad10
 	box sBox
@@ -103,18 +143,21 @@
 sCrystalData::
 	ds wCrystalDataEnd - wCrystalData
 sMobileEventIndexBackup:: ds 1
-s1_be45:: ds 1
 
+SECTION "SRAM Battle Tower", SRAM, BANK [1]
 ; data of the BattleTower must be in SRAM because you can save and leave between battles
+sBattleTowerChallengeState:: ds 1
+; 0: normal
+; 2: battle tower
+
 sBattleTower:: ; be46
-sNrOfBeatenBattleTowerTrainers::
-sbe46:: ds 1
+sNrOfBeatenBattleTowerTrainers:: ds 1
 sbe47:: ds 1
 ; The 7 trainers of the BattleTower are saved here, so nobody appears more than once
 sBTTrainers:: ; sbe48
 	ds 7
 sbe4f:: ds 1
-sbe50:: ds 1
+sBattleTowerReward:: ds 1
 ; Pkmn of previous trainer
 sBTPkmnOfTrainers:: ; 0xbe51
 sBTPkmnPrevTrainer1::
--- a/text/battle.asm
+++ b/text/battle.asm
@@ -194,7 +194,7 @@
 
 GotMoneyForWinningText:
 	text "<PLAYER> got ¥@"
-	deciram wc686, 3, 6
+	deciram wBattleReward, 3, 6
 	text ""
 	line "for winning!"
 	prompt
@@ -213,7 +213,7 @@
 
 SentSomeToMomText:
 	text "<PLAYER> got ¥@"
-	deciram wc686, 3, 6
+	deciram wBattleReward, 3, 6
 	text ""
 	line "for winning!"
 	cont "Sent some to MOM!"
@@ -396,7 +396,7 @@
 	line "level @"
 	deciram CurPartyLevel, 1, 3
 	text "!@"
-	sound0
+	sound_dex_fanfare_50_79
 	db "@"
 ; 0x80cb9
 
--- a/text/battle_tower.asm
+++ b/text/battle_tower.asm
@@ -186,20 +186,20 @@
 ; 0x1ec402
 
 UnknownText_0x1ec402: ; 0x1ec402
-	text $56, $56, $56
-	line $56, $56, "Battle?"
+	text "<......><......><......>"
+	line "<......><......>Battle?"
 	done
 ; 0x1ec411
 
 UnknownText_0x1ec411: ; 0x1ec411
-	text $56, $56, $56
-	line $56, $56, "I won?"
+	text "<......><......><......>"
+	line "<......><......>I won?"
 	done
 ; 0x1ec41f
 
 UnknownText_0x1ec41f: ; 0x1ec41f
-	text $56, $56, $56
-	line $56, $56, "I lost?"
+	text "<......><......><......>"
+	line "<......><......>I lost?"
 	done
 ; 0x1ec42e
 
--- a/text/common_2.asm
+++ b/text/common_2.asm
@@ -108,7 +108,7 @@
 	line "level @"
 	deciram CurPartyLevel, 1, 3
 	text "!@"
-	sound0
+	sound_dex_fanfare_50_79
 	text_waitbutton
 	db "@"
 ; 0x1bc16d
@@ -1575,7 +1575,7 @@
 	line "@"
 	text_from_ram StringBuffer1
 	text "!@"
-	sound0x0F
+	sound_item
 	text_waitbutton
 	db "@"
 ; 0x1bd3d6
@@ -1613,7 +1613,7 @@
 ; 0x1bd445
 
 UnknownText_0x1bd445: ; 0x1bd445
-	sound0x0A
+	sound_dex_fanfare_80_109
 	interpret_data
 	db "@"
 ; 0x1bd448
--- a/text/common_3.asm
+++ b/text/common_3.asm
@@ -279,7 +279,7 @@
 ; 1c04e9
 
 UnknownText_0x1c04e9: ; 1c04e9
-	text_from_ram wc903
+	text_from_ram wMysteryGiftPartnerName
 	text " sent"
 	line "@"
 	text_from_ram StringBuffer1
@@ -288,7 +288,7 @@
 ; 1c04fa
 
 UnknownText_0x1c04fa: ; 1c04fa
-	text_from_ram wc903
+	text_from_ram wMysteryGiftPartnerName
 	text " sent"
 	line "@"
 	text_from_ram StringBuffer1
@@ -931,7 +931,7 @@
 	text_from_ram StringBuffer1
 	text " came"
 	line "out of its EGG!@"
-	sound0x02
+	sound_caught_mon
 	text_waitbutton
 	db "@"
 ; 1c0dd7
@@ -1145,7 +1145,7 @@
 	interpret_data
 	text "…"
 	para "@"
-	text_from_ram wd016
+	text_from_ram wBugContestWinnerName
 	text ","
 	line "who caught a"
 	cont "@"
@@ -1158,7 +1158,7 @@
 	text ""
 	para "The winning score"
 	line "was @"
-	deciram wd004, 2, 3
+	deciram wBugContestFirstPlaceScore, 2, 3
 	text " points!"
 	prompt
 ; 1c1166
@@ -1166,7 +1166,7 @@
 ContestJudging_SecondPlaceText: ; 1c1166
 	text "Placing second was"
 	line "@"
-	text_from_ram wd016
+	text_from_ram wBugContestWinnerName
 	text ","
 	para "who caught a"
 	line "@"
@@ -1179,7 +1179,7 @@
 	text ""
 	para "The score was"
 	line "@"
-	deciram wd008, 2, 3
+	deciram wBugContestSecondPlaceScore, 2, 3
 	text " points!"
 	prompt
 ; 1c11b5
@@ -1187,7 +1187,7 @@
 ContestJudging_ThirdPlaceText: ; 1c11b5
 	text "Placing third was"
 	line "@"
-	text_from_ram wd016
+	text_from_ram wBugContestWinnerName
 	text ","
 	para "who caught a"
 	line "@"
@@ -1200,7 +1200,7 @@
 	text ""
 	para "The score was"
 	line "@"
-	deciram wd00c, 2, 3
+	deciram wBugContestThirdPlaceScore, 2, 3
 	text " points!"
 	prompt
 ; 1c1203
@@ -1641,7 +1641,7 @@
 
 UnknownText_0x1c1b2c: ; 1c1b2c
 	text "Took @"
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text "'s"
 	line "@"
 	text_from_ram StringBuffer1
@@ -1656,7 +1656,7 @@
 
 UnknownText_0x1c1b57: ; 1c1b57
 	text "Made @"
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text ""
 	line "hold @"
 	text_from_ram StringBuffer2
@@ -1671,7 +1671,7 @@
 ; 1c1b8e
 
 UnknownText_0x1c1b8e: ; 1c1b8e
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text " isn't"
 	line "holding anything."
 	prompt
@@ -1688,13 +1688,13 @@
 	text_from_ram StringBuffer1
 	text ""
 	line "from @"
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text "."
 	prompt
 ; 1c1bdc
 
 UnknownText_0x1c1bdc: ; 1c1bdc
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text " is"
 	line "already holding"
 
--- a/text/common_4.asm
+++ b/text/common_4.asm
@@ -338,10 +338,10 @@
 UnknownText_0x1c47d4: ; 0x1c47d4
 	text "Hm… I see you met"
 	line "@"
-	text_from_ram wd003
+	text_from_ram wSeerNickname
 	text " here:"
 	cont "@"
-	text_from_ram wd00e
+	text_from_ram wSeerCaughtLocation
 	text "!"
 	prompt
 ; 0x1c47fa
@@ -349,11 +349,11 @@
 UnknownText_0x1c47fa: ; 0x1c47fa
 	text "The time was"
 	line "@"
-	text_from_ram wd01f
+	text_from_ram wSeerTimeOfDay
 	text "!"
 
 	para "Its level was @"
-	text_from_ram wd036
+	text_from_ram wSeerCaughtLevelString
 	text "!"
 
 	para "Am I good or what?"
@@ -362,21 +362,21 @@
 
 UnknownText_0x1c4837: ; 0x1c4837
 	text "Hm… @"
-	text_from_ram wd003
+	text_from_ram wSeerNickname
 	text ""
 	line "came from @"
-	text_from_ram wd02a
+	text_from_ram wSeerOTName
 	text ""
 	cont "in a trade?"
 
 	para "@"
-	text_from_ram wd00e
+	text_from_ram wSeerCaughtLocation
 	text ""
 	line "was where @"
-	text_from_ram wd02a
+	text_from_ram wSeerOTName
 	text ""
 	cont "met @"
-	text_from_ram wd003
+	text_from_ram wSeerNickname
 	text "!"
 	prompt
 ; 0x1c487f
@@ -393,7 +393,7 @@
 	para "I can't tell where"
 	line "you met it, but it"
 	cont "was at level @"
-	text_from_ram wd036
+	text_from_ram wSeerCaughtLevelString
 	text "."
 
 	para "Am I good or what?"
@@ -434,7 +434,7 @@
 	line "grown a little."
 
 	para "@"
-	text_from_ram wd003
+	text_from_ram wSeerNickname
 	text " seems"
 	line "to be becoming"
 	cont "more confident."
@@ -445,7 +445,7 @@
 	text "Incidentally…"
 
 	para "@"
-	text_from_ram wd003
+	text_from_ram wSeerNickname
 	text " has"
 	line "grown. It's gained"
 	cont "much strength."
@@ -459,7 +459,7 @@
 	line "grown mighty!"
 
 	para "This @"
-	text_from_ram wd003
+	text_from_ram wSeerNickname
 	text ""
 	line "must have come"
 
@@ -483,12 +483,12 @@
 	para "seen a #MON as"
 	line "mighty as this"
 	cont "@"
-	text_from_ram wd003
+	text_from_ram wSeerNickname
 	text "."
 
 	para "I'm sure that"
 	line "seeing @"
-	text_from_ram wd003
+	text_from_ram wSeerNickname
 	text ""
 	para "in battle would"
 	line "excite anyone."
@@ -859,13 +859,13 @@
 ; 0x1c51f4
 
 UnknownText_0x1c51f4: ; 0x1c51f4
-	text_from_ram wd006
+	text_from_ram wMobileParticipant1Nickname
 	text ","
 	line "@"
-	text_from_ram wd00c
+	text_from_ram wMobileParticipant2Nickname
 	text " and"
 	cont "@"
-	text_from_ram wd012
+	text_from_ram wMobileParticipant3Nickname
 	text "."
 
 	para "Use these three?"
@@ -989,7 +989,7 @@
 ; 0x1c5588
 
 UnknownText_0x1c5588: ; 0x1c5588
-	text $56
+	text "<......>"
 	done
 ; 0x1c558b
 
@@ -1045,12 +1045,12 @@
 ; 0x1c5660
 
 UnknownText_0x1c5660: ; 0x1c5660
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text " learned"
 	line "@"
 	text_from_ram StringBuffer2
 	text "!@"
-	sound0
+	sound_dex_fanfare_50_79
 	text_waitbutton
 	db "@"
 ; 0x1c5677
@@ -1074,7 +1074,7 @@
 ; 0x1c56af
 
 UnknownText_0x1c56af: ; 0x1c56af
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text ""
 	line "did not learn"
 	cont "@"
@@ -1084,7 +1084,7 @@
 ; 0x1c56c9
 
 UnknownText_0x1c56c9: ; 0x1c56c9
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text " is"
 	line "trying to learn"
 	cont "@"
@@ -1092,7 +1092,7 @@
 	text "."
 
 	para "But @"
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text ""
 	line "can't learn more"
 	cont "than four moves."
@@ -1120,7 +1120,7 @@
 	interpret_data
 	text ""
 	para "@"
-	text_from_ram wd050
+	text_from_ram wd050_MonNick
 	text " forgot"
 	line "@"
 	text_from_ram StringBuffer1
@@ -1189,7 +1189,7 @@
 ; 0x1c5824
 
 UnknownText_0x1c5824: ; 0x1c5824
-	text $56
+	text "<......>"
 	done
 ; 0x1c5827
 
@@ -1367,7 +1367,7 @@
 	text_from_ram EnemyMonNick
 	text ""
 	line "was caught!@"
-	sound0x02
+	sound_caught_mon
 	db "@"
 ; 0x1c5b34
 
@@ -1396,7 +1396,7 @@
 	text "'s data"
 	line "was newly added to"
 	cont "the #DEX.@"
-	sound0x2C
+	sound_slot_machine_start
 	text_waitbutton
 	db "@"
 ; 0x1c5b7e
@@ -1514,7 +1514,7 @@
 UnknownText_0x1c5d03: ; 0x1c5d03
 	text "There was a trophy"
 	line "inside!@"
-	sound0
+	sound_dex_fanfare_50_79
 	text ""
 	para "@"
 	text_from_ram PlayerName
--- a/text/phone/buena.asm
+++ b/text/phone/buena.asm
@@ -351,9 +351,9 @@
 	para "that it gradually"
 	line "makes me drowsy…"
 
-	para $56, " ", $56, " ", $56
+	para "<......> <......> <......>"
 
-	para $56, " ", $56, " ", $56, "Zzz"
+	para "<......> <......> <......>Zzz"
 
 	para "Oops, I drifted"
 	line "off just thinking"
--- a/tilesets/animations.asm
+++ b/tilesets/animations.asm
@@ -48,7 +48,7 @@
 	dw NULL,  AnimateFlowerTile
 	dw NULL,  WaitTileAnimation
 	dw NULL,  WaitTileAnimation
-	dw NULL,  NextTileFrame8
+	dw NULL,  StandingTileFrame8
 	dw NULL,  DoneTileAnimation
 ; 0xfc047
 
@@ -62,7 +62,7 @@
 	dw NULL,  AnimateFlowerTile
 	dw NULL,  WaitTileAnimation
 	dw NULL,  WaitTileAnimation
-	dw NULL,  NextTileFrame8
+	dw NULL,  StandingTileFrame8
 	dw NULL,  DoneTileAnimation
 ; 0xfc073
 
@@ -77,7 +77,7 @@
 	dw NULL,  AnimateFlowerTile
 	dw VTiles2 tile $14, AnimateWaterTile
 	dw NULL,  TileAnimationPalette
-	dw NULL,  NextTileFrame8
+	dw NULL,  StandingTileFrame8
 	dw NULL,  DoneTileAnimation
 ; 0xfc0a3
 
@@ -93,7 +93,7 @@
 	dw WhirlpoolFrames3, AnimateWhirlpoolTile
 	dw WhirlpoolFrames4, AnimateWhirlpoolTile
 	dw NULL,  WaitTileAnimation
-	dw NULL,  NextTileFrame8
+	dw NULL,  StandingTileFrame8
 	dw NULL,  DoneTileAnimation
 ; 0xfc0d7
 
@@ -136,7 +136,7 @@
 	dw NULL,  WaitTileAnimation
 	dw NULL,  WaitTileAnimation
 	dw NULL,  WaitTileAnimation
-	dw NULL,  NextTileFrame8
+	dw NULL,  StandingTileFrame8
 	dw NULL,  DoneTileAnimation
 ; 0xfc15f
 
@@ -147,7 +147,7 @@
 	dw NULL,  WaitTileAnimation
 	dw NULL,  SafariFountainAnim1
 	dw NULL,  WaitTileAnimation
-	dw NULL,  NextTileFrame8
+	dw NULL,  StandingTileFrame8
 	dw NULL,  DoneTileAnimation
 ; 0xfc17f
 
@@ -239,7 +239,7 @@
 	dw SproutPillarTilePointer4,  AnimateSproutPillarTile
 	dw SproutPillarTilePointer1,  AnimateSproutPillarTile
 	dw SproutPillarTilePointer2,  AnimateSproutPillarTile
-	dw NULL,  NextTileFrame
+	dw NULL,  StandingTileFrame
 	dw NULL,  WaitTileAnimation
 	dw NULL,  WaitTileAnimation
 	dw NULL,  WaitTileAnimation
@@ -302,7 +302,7 @@
 	ret
 ; fc2ff
 
-NextTileFrame8: ; fc2ff
+StandingTileFrame8: ; fc2ff
 	ld a, [TileAnimationTimer]
 	inc a
 	and a, 7
@@ -806,7 +806,7 @@
 ; fc673
 
 
-NextTileFrame: ; fc673
+StandingTileFrame: ; fc673
 	ld hl, TileAnimationTimer
 	inc [hl]
 	ret
@@ -958,7 +958,7 @@
 	jr z, .color2
 	
 .color1
-	ld hl, wMapPals + $1a ; pal 3 color 1
+	ld hl, UnknBGPals + $1a ; pal 3 color 1
 	ld a, [hli]
 	ld [rBGPD], a
 	ld a, [hli]
@@ -966,7 +966,7 @@
 	jr .end
 	
 .color0
-	ld hl, wMapPals + $18 ; pal 3 color 0
+	ld hl, UnknBGPals + $18 ; pal 3 color 0
 	ld a, [hli]
 	ld [rBGPD], a
 	ld a, [hli]
@@ -974,7 +974,7 @@
 	jr .end
 	
 .color2
-	ld hl, wMapPals + $1c ; pal 3 color 2
+	ld hl, UnknBGPals + $1c ; pal 3 color 2
 	ld a, [hli]
 	ld [rBGPD], a
 	ld a, [hli]
@@ -1011,11 +1011,11 @@
 	ld a, [hVBlankCounter]
 	and %00000010
 	jr nz, .bit1set
-	ld hl, wMapPals + $20 ; pal 4 color 0
+	ld hl, UnknBGPals + $20 ; pal 4 color 0
 	jr .okay
 
 .bit1set
-	ld hl, wMapPals + $22 ; pal 4 color 2
+	ld hl, UnknBGPals + $22 ; pal 4 color 2
 
 .okay
 	ld a, [hli]
--- a/vram.asm
+++ b/vram.asm
@@ -11,3 +11,4 @@
 VTiles5:: ds $800
 VBGMap2:: ds $400
 VBGMap3:: ds $400
+VRAM_End::
--- a/wram.asm
+++ b/wram.asm
@@ -145,6 +145,18 @@
 \1TrainerEnd::
 endm
 
+mailmsg: MACRO
+\1Message:: ds MAIL_MSG_LENGTH
+\1MessageEnd:: ds 1
+\1Author:: ds PLAYER_NAME_LENGTH
+\1AuthorNationality:: ds 2
+\1AuthorID:: ds 2
+\1Species:: ds 1
+\1Type:: ds 1
+\1End::
+endm
+
+
 INCLUDE "vram.asm"
 
 SECTION "Stack", WRAM0
@@ -299,7 +311,7 @@
 
 wc2cc:: ds 1
 wc2cd:: ds 1
-wc2ce:: ds 1
+wSpriteUpdatesEnabled:: ds 1
 wc2cf:: ds 1
 wc2d0:: ds 4
 wc2d4:: ds 1
@@ -319,22 +331,26 @@
 	ds 1
 
 wc2de:: ds 1
-wc2df:: ds 3
+wc2df:: ds 1
+	ds 2
 wMovementPerson:: ds 1
 wMovementDataPointer:: ds 3 ; dba
 wc2e6:: ds 4
 wc2ea:: ds 1
+wc2eb::
 wMovementPointer:: ds 2 ; c2eb
 	ds 3
-wc2f0:: ds 1
-wc2f1:: ds 1
-wc2f2:: ds 1
-wc2f3:: ds 1
-wc2f4:: ds 1
-wc2f5:: ds 1
-wc2f6:: ds 1
-wc2f7:: ds 1
-wc2f8:: ds 1
+
+wTempObjectCopyMapObjectIndex:: ds 1 ; c2f0
+wTempObjectCopySprite:: ds 1 ; c2f1
+wTempObjectCopySpriteVTile:: ds 1 ; c2f2
+wTempObjectCopyPalette:: ds 1 ; c2f3
+wTempObjectCopyMovement:: ds 1 ; c2f4
+wTempObjectCopyRange:: ds 1 ; c2f5
+wTempObjectCopyX:: ds 1 ; c2f6
+wTempObjectCopyY:: ds 1 ; c2f7
+wTempObjectCopyRadius:: ds 1 ; c2f8
+
 	ds 1
 
 TileDown:: ; c2fa
@@ -357,10 +373,10 @@
 
 	ds 1
 
-SECTION "PARTY ICONS", WRAM0 [$c300]
+SECTION "c300", WRAM0 [$c300]
 ; wc300 - wc313 is a 10x2 dictionary.
-wDict_c300:: ds 10 * 2
-	ds wDict_c300 - @
+wSpriteAnimDict:: ds 10 * 2
+	ds wSpriteAnimDict - @
 wc300:: ds 1
 wc301:: ds 1
 wc302:: ds 1
@@ -380,22 +396,54 @@
 wc311:: ds 1
 wc312:: ds 1
 wc313:: ds 1
-; wPartyMonMenuIconAnims::
+wSpriteAnimationStructs::
+
+sprite_anim_struct: MACRO
+\1Index:: ds 1      ; 0
+\1Sprite01:: ds 1   ; 1
+\1AnimSeqID:: ds 1  ; 2
+\1TileID:: ds 1     ; 3
+\1XCoord:: ds 1     ; 4
+\1YCoord:: ds 1     ; 5
+\1XOffset:: ds 1    ; 6
+\1YOffset:: ds 1    ; 7
+\1FrameTimer:: ds 1 ; 8 
+\1Sprite09:: ds 1   ; 9
+\1FrameIndex:: ds 1 ; a
+\1Sprite0b:: ds 1
+\1Sprite0c:: ds 1
+\1Sprite0d:: ds 1
+\1Sprite0e:: ds 1
+\1Sprite0f:: ds 1
+ENDM
+
 ; Field  0: Index
 ; Fields 1-3: Loaded from Unknown_8d1c4
-wc314:: ds 16 ; c314
-wc324:: ds 16 ; c324
-wc334:: ds 16 ; c334
-wc344:: ds 16 ; c344
-wc354:: ds 16 ; c354
-wc364:: ds 16 ; c364
-wc374:: ds 16 ; c374
-wc384:: ds 16 ; c384
-wc394:: ds 16 ; c394
-wc3a4:: ds 8  ; c3a4
-wc3ac:: ds 8  ; c3ac
-; wPartyMonMenuIconAnimsEnd::
-wc3b4:: ds 1 ; something to do with wc314
+wc314::
+SpriteAnim1:: sprite_anim_struct SpriteAnim1
+wc324::
+SpriteAnim2:: sprite_anim_struct SpriteAnim2
+wc334::
+SpriteAnim3:: sprite_anim_struct SpriteAnim3
+wc344::
+SpriteAnim4:: sprite_anim_struct SpriteAnim4
+wc354::
+SpriteAnim5:: sprite_anim_struct SpriteAnim5
+wc364::
+SpriteAnim6:: sprite_anim_struct SpriteAnim6
+wc374::
+SpriteAnim7:: sprite_anim_struct SpriteAnim7
+wc384::
+SpriteAnim8:: sprite_anim_struct SpriteAnim8
+wc394::
+SpriteAnim9:: sprite_anim_struct SpriteAnim9
+wc3a4::
+SpriteAnim10:: sprite_anim_struct SpriteAnim10
+wSpriteAnimationStructsEnd::
+	ds -8
+wc3ac:: ds 8 ; c3ac
+wSpriteAnimCount::
+wc3b4:: ds 1
 wc3b5:: ds 1
 
 CurIcon:: ; c3b6
@@ -411,6 +459,8 @@
 wc3be:: ds 1
 wc3bf:: ds 1
 wc3c0:: ds 1
+wSpriteAnimsEnd::
+
 wc3c1:: ds 11
 wc3cc:: ds 1
 wc3cd:: ds 31
@@ -494,7 +544,8 @@
 	ds 1
 wEnemyTrainerItem1:: ds 1
 wEnemyTrainerItem2:: ds 1
-wc652:: ds 4
+wEnemyTrainerBaseReward:: ds 1
+wEnemyTrainerAIFlags:: ds 3
 wc656::
 OTName:: ds NAME_LENGTH ; c656
 
@@ -640,8 +691,7 @@
 EnemyDamageTaken:: ; c684
 	ds 2
 
-wc686:: ds 2
-wc688:: ds 1
+wBattleReward:: ds 3
 wKickCounter::
 wPresentPower:: ds 1
 wc68a::
@@ -671,7 +721,26 @@
 	ds 1
 PlayerSAtkLevel:: ; c6cf
 	ds 1
+
+trademon: MACRO
+\1Species:: ds 1 ; wc6d0 | wc702
+\1SpeciesName:: ds PKMN_NAME_LENGTH ; wc6d1 | wc703
+\1Nickname:: ds PKMN_NAME_LENGTH ; wc6dc | wc70e
+\1SenderName:: ds NAME_LENGTH ; wc6e7 | wc719
+\1OTName:: ds NAME_LENGTH ; wc6f2 | wc724
+\1DVs:: ds 2 ; wc6fd | wc72f
+\1ID:: ds 2 ; wc6ff | wc731
+\1CaughtData:: ds 1 ; wc701 | wc733
+\1End::
+ENDM
+
+wPlayerTrademon:: trademon wPlayerTrademon
+wOTTrademon::     trademon wOTTrademon
+
+	ds wPlayerTrademon - @
+
 wc6d0::
+wPokedexDataStart::
 PlayerSDefLevel:: ; c6d0
 	ds 1
 wc6d1::
@@ -871,12 +940,19 @@
 wPlayerRageCounter:: ds 1
 wEnemyRageCounter:: ds 1
 wc72d:: ds 1 ; if 0 then PrintButItFailed
+wc72e::
 wPlayerTrappingMove:: ds 1
+wc72f::
 wEnemyTrappingMove:: ds 1
+wc730::
 wPlayerWrapCount:: ds 1
+wc731::
 wEnemyWrapCount:: ds 1
+wc732::
 wPlayerCharging:: ds 1
-wEnemyCharging:: ds 1
+wEnemyCharging::
+wc733:: ds 1
+wTradeAnimPointer::
 wc734::
 BattleEnded:: ; c734
 	ds 1
@@ -883,10 +959,13 @@
 
 wWildMonMoves::
 wc735:: ds 1
+wLinkPlayer1Name:: ds NAME_LENGTH
+wLinkPlayer2Name:: ds NAME_LENGTH
+	ds wLinkPlayer1Name - @
 wc736:: ds 3
 wWildMonPP::
 wc739:: ds 4
-wc73d:: ds 1
+wAmuletCoin:: ds 1
 wc73e:: ds 1
 wPlayerJustGotFrozen:: ds 1
 wEnemyJustGotFrozen:: ds 1
@@ -906,8 +985,8 @@
 wc7d1:: ds 1
 wc7d2:: ds 1
 wc7d3:: ds 1
-wc7d4:: ds 1
-wc7d5:: ds 1
+wc7d4:: ds 1 ; Index of the topmost visible item in a scrolling menu
+wc7d5:: ds 1 ; Which row the cursor is at in a scrolling menu (0-6)
 wc7d6:: ds 1
 wc7d7:: ds 1
 wc7d8:: ds 1
@@ -925,8 +1004,14 @@
 wc7e4:: ds 1
 IF DEF(CRYSTAL11)
 wPokedexStatus::
+ELSE
+wPokedexDataEnd::
 ENDC
-	ds 3
+	ds 1
+IF DEF(CRYSTAL11)
+wPokedexDataEnd::
+ENDC
+	ds 2
 
 wMiscEnd::
 
@@ -934,12 +1019,12 @@
 
 SECTION "Overworld Map", WRAM0 [$c800]
 
-wc800::
 OverworldMap:: ; c800
-; too lazy to reconcile these labels
-;	ds 1300
+	ds 1300
+OverworldMapEnd::
+	ds OverworldMap - @
 
-	ds 1
+wc800::	ds 1
 wc801:: ds 1
 wc802:: ds 1
 wc803:: ds 4
@@ -951,6 +1036,8 @@
 wc821:: ds 15
 wc830:: ds 16
 wc840:: ds 16
+wMysteryGiftTrainerData:: ds (1 + 1 + NUM_MOVES) * PARTY_LENGTH + 2
+	ds wMysteryGiftTrainerData - @
 wc850:: ds 16
 wc860:: ds 16
 wc870:: ds 16
@@ -963,9 +1050,9 @@
 wc8e0:: ds 16
 wc8f0:: ds 16
 wc900:: ds 1
-wc901:: ds 1
-wc902:: ds 1
-wc903:: ds 12
+wMysteryGiftPartnerID:: ds 2
+wMysteryGiftPartnerName:: ds NAME_LENGTH
+wc90e:: ds 1
 wc90f:: ds 1
 wc910:: ds 1
 wc911:: ds 1
@@ -1071,11 +1158,8 @@
 wccb5:: ds 3
 wccb8:: ds 1
 wccb9:: ds 1
-wccba:: ds 90
-OverworldMapEnd::
+wccba:: ds 102
 
-	ds 12
-
 SECTION "Video", WRAM0
 CreditsPos::
 BGMapBuffer:: ; cd20
@@ -1214,9 +1298,10 @@
 wcf42:: ds 2
 wcf44:: ds 1
 wcf45:: ds 12
-wcf51:: ds 1
-wcf52:: ds 4
-wcf56:: ds 1
+; addresses dealing with serial comms
+wOtherPlayerLinkMode:: ds 1
+wOtherPlayerLinkAction:: ds 4
+wPlayerLinkAction:: ds 1
 wcf57:: ds 4
 wcf5b:: ds 1
 wcf5c:: ds 1
@@ -1306,8 +1391,8 @@
 wcf9b:: ds 3
 wcf9e:: ds 3
 wMenuData2End::
+wMenuData3::
 wcfa1:: ds 1
-
 wcfa2:: ds 1
 wcfa3:: ds 1
 wcfa4:: ds 1
@@ -1315,6 +1400,7 @@
 wcfa6:: ds 1 ; dynamic menu flags?
 wcfa7:: ds 1
 wcfa8:: ds 1
+wMenuData3End::
 MenuSelection2:: ds 1
 wcfaa:: ds 1
 wcfab:: ds 1
@@ -1380,7 +1466,7 @@
 ; bit 7: battle scene off/on
 	ds 1
 
-wcfcd:: ds 1
+wSaveFileExists:: ds 1
 
 TextBoxFrame:: ; cfce
 ; bits 0-2: textbox frame 0-7
@@ -1420,6 +1506,22 @@
 wd000:: ds 1
 DefaultSpawnpoint::
 wd001:: ds 1
+
+wTempMail:: mailmsg wTempMail
+	ds wTempMail - @
+
+wSeerAction:: ds 1
+wSeerNickname:: ds PKMN_NAME_LENGTH
+wSeerCaughtLocation:: ds 17
+wSeerTimeOfDay:: ds NAME_LENGTH
+wSeerOTName:: ds NAME_LENGTH
+wSeerOTNameGrammar:: ds 1
+wSeerCaughtLevelString:: ds 4
+wSeerCaughtLevel:: ds 1
+wSeerCaughtData:: ds 1
+wSeerCaughtGender:: ds 1
+	ds wSeerAction - @
+
 wd002::
 PhoneScriptBank::
 LuckyNumberDigit1Buffer::
@@ -1426,6 +1528,7 @@
 wCurrentRadioLine::
 wMovementBufferCount::
 wMartItem1BCD::
+wBugContestFirstPlacePersonID::
 	ds 1
 wd003::
 LuckyNumberDigit2Buffer::
@@ -1432,11 +1535,13 @@
 PhoneCallerLo::
 wNextRadioLine::
 wMovementBufferPerson::
+wBugContestFirstPlaceMon::
 	ds 1
 wd004::
 LuckyNumberDigit3Buffer::
 PhoneCallerHi::
 wRadioTextDelay::
+wBugContestFirstPlaceScore::
 	ds 1
 wd005::
 LuckyNumberDigit4Buffer::
@@ -1445,18 +1550,24 @@
 wMartItem2BCD::
 	ds 1
 wd006::
+wMobileParticipant1Nickname::
 LuckyNumberDigit5Buffer::
 EndFlypoint:: ; d006
 wOaksPkmnTalkSegmentCounter::
+wBugContestSecondPlacePersonID::
 	ds 1
 
 wd007::
 MovementBuffer:: ; d007
+wBugContestSecondPlaceMon::
 	ds 1
 
 wMartItem3BCD::
+wBugContestSecondPlaceScore::
 wd008:: ds 2
+wBugContestThirdPlacePersonID::
 wd00a:: ds 1
+wBugContestThirdPlaceMon::
 wMartItem4BCD::
 wd00b:: ds 1
 
@@ -1464,22 +1575,31 @@
 wRadioTextEnd::
 	ds wRadioText - @
 
+wMobileParticipant2Nickname::
+wBugContestThirdPlaceScore::
 wd00c:: ds 1
 wd00d:: ds 1
 wMartItem5BCD::
+wBugContestTempPersonID::
 wd00e:: ds 1
+wBugContestTempMon::
 wd00f:: ds 1
+wBugContestTempScore::
 wd010:: ds 1
 wMartItem6BCD::
 wd011:: ds 1
+wMobileParticipant3Nickname::
 wd012:: ds 1
 wd013:: ds 1
 wMartItem7BCD::
 wd014:: ds 2
+wBugContestWinnerName::
 wd016:: ds 1
 wMartItem8BCD::
 wd017:: ds 1
 
+	ds wd00d - @
+wd00d_MonOT:: ds NAME_LENGTH
 wd018_Mon:: party_struct wd018_Mon
 	ds wd018_Mon - @
 
@@ -1526,11 +1646,13 @@
 
 wd041::
 EngineBuffer4::
+wTempTrainerHeader::
 wTempTrainerEventFlagLo::
 	ds 1
 
 wTempTrainerEventFlagHi::
 MovementAnimation:: ; d042
+EngineBuffer5::
 	ds 1
 
 wTempTrainerClass::
@@ -1557,10 +1679,12 @@
 wLossTextPointer:: ds 2
 wScriptAfterPointer::
 wd04b:: ds 2
-wd04d:: ds 1
+wRunningTrainerBattleScript:: ds 1
 MenuItemsListEnd::
+wTempTrainerHeaderEnd::
 wd04e:: ds 2
 wOaksPkmnTalkPkmnNameBuffer::
+wd050_MonNick::
 wd050:: ds PKMN_NAME_LENGTH +- 1
 wd05a:: ds 12
 wd066:: ds 10
@@ -1588,8 +1712,9 @@
 CurMoveNum:: ; d0d5
 	ds 1
 
-wd0d6:: ds 1
+wLastPocket:: ds 1
 wd0d7:: ds 1
+wPartyMenuCursor::
 wd0d8:: ds 1
 wItemsPocketCursor:: ds 1
 wKeyItemsPocketCursor:: ds 1
@@ -1596,16 +1721,22 @@
 wBallsPocketCursor:: ds 1
 wTMHMPocketCursor:: ds 1
 wd0dd:: ds 2
-wd0df:: ds 1
-wd0e0:: ds 1
-wd0e1:: ds 1
-wd0e2:: ds 1
+wItemsPocketScrollPosition:: ds 1
+wKeyItemsPocketScrollPosition:: ds 1
+wBallsPocketScrollPosition:: ds 1
+wTMHMPocketScrollPosition:: ds 1
 wMoveSwapBuffer::
+wSwitchMon::
 wd0e3:: ds 1
-wd0e4:: ds 4
+wMenuScrollPosition:: ds 4
 wQueuedScriptBank:: ds 1
 wQueuedScriptAddr:: ds 2
 wd0eb:: ds 1
+wFieldMoveSucceeded::
+wPlayerAction::
+; 0 - use move
+; 1 - use item
+; 2 - switch
 wd0ec:: ds 1
 
 VramState:: ; d0ed
@@ -1617,15 +1748,19 @@
 
 wBattleResult:: ds 1
 wd0ef:: ds 1
-wd0f0::
-CurMart:: ; d0f0
-	; ds 16
-	ds 1
-wd0f1:: ds 1
-wd0f2:: ds 14
+CurMart:: ds 16
+	ds CurMart - @
+wd0f0:: ds 1
+wd0f1::
+wCurMessageIndex:: ds 1
+wd0f2::
+wMailboxCount:: ds 1
+wMailboxItems:: ds MAILBOX_CAPACITY
+wMailboxEnd:: ds 1 ; d1fe
+	ds 2
 CurMartEnd::
-wd100:: ds 1
 
+wd100:: ds 1
 wd101:: ds 1
 wd102:: ds 1
 wd103:: ds 1
@@ -1694,14 +1829,16 @@
 
 wd14c:: ds 1 ; used in FollowNotExact
 wd14d:: ds 1 ; used in FollowNotExact
-wd14e:: ds 1
-wd14f:: ds 1
-wd150:: ds 1
-wd151:: ds 1
-wd152:: ds 1
-wd153:: ds 1
 
-UsedSprites:: ds 64
+; Player movement
+wPlayerStepVectorX:: ds 1
+wPlayerStepVectorY:: ds 1
+wPlayerStepFlags:: ds 1
+wPlayerStepDirection:: ds 1
+
+wBGMapAnchor:: ds 2
+
+UsedSprites:: ds 64 ; d154
 UsedSpritesEnd::
 	ds UsedSprites - @
 
@@ -1930,7 +2067,7 @@
 UnownLetter:: ; d234
 	ds 1
 
-wd235:: ds 1
+wMoveSelectionMenuType:: ds 1
 
 CurBaseData:: ; d236
 BaseDexNo:: ; d236
@@ -1994,9 +2131,9 @@
 wCurTMHM::
 wTypeMatchup::
 wd265:: ds 1
-wd266:: ds 1
-wd267:: ds 1
-wd268:: ds 1
+wFailedToFlee:: ds 1
+wNumFleeAttempts:: ds 1
+wMonTriedToEvolve:: ds 1
 
 TimeOfDay:: ; d269
 	ds 1
@@ -2049,6 +2186,11 @@
 ScriptFlags2:: ; d435
 	ds 1
 ScriptFlags3:: ; d436
+; bit 0: count steps
+; bit 1: xy triggers
+; bit 2: warps and connections
+; bit 4: wild encounters
+; bit 5: unknown
 	ds 1
 
 ScriptMode:: ; d437
@@ -2060,9 +2202,13 @@
 ScriptPos:: ; d43a
 	ds 2
 
-wd43c:: ds 1
-wd43d:: ds 16
-
+wScriptStackSize:: ds 1
+wScriptStackBA1:: ds 3
+wScriptStackBA2:: ds 3
+wScriptStackBA3:: ds 3
+wScriptStackBA4:: ds 3
+wScriptStackBA5:: ds 3
+	ds 1
 ScriptDelay:: ; d44d
 	ds 1
 
@@ -2075,7 +2221,7 @@
 wd454:: ds 1
 	ds 4
 
-wd459:: ds 2
+wBattleScriptFlags:: ds 2
 wPlayerSpriteSetupFlags:: ds 1
 wMapReentryScriptQueueFlag:: ds 1 ; MemScriptFlag
 wMapReentryScriptBank:: ds 1 ; MemScriptBank
@@ -2153,12 +2299,12 @@
 	ds 1
 wObjectFollow_Leader:: ds 1
 wObjectFollow_Follower:: ds 1
-wd4cf:: ds 1
+wCenteredObject:: ds 1
 wd4d0:: ds 1
 wd4d1:: ds 1
 	ds 4
 
-ObjectStructs::
+ObjectStructs:: ; d4d6
 object_struct: MACRO
 \1Struct::
 \1Sprite:: ds 1
@@ -2169,24 +2315,32 @@
 \1Palette:: ds 1
 \1Walking:: ds 1
 \1Direction:: ds 1
-\1Object09:: ds 1
+\1StepType:: ds 1
 \1StepDuration:: ds 1
 \1Action:: ds 1
-\1Object12:: ds 1
+\1ObjectStepFrame:: ds 1
 \1Facing:: ds 1
-\1StandingTile:: ds 1
-\1NextTile:: ds 1
-\1MapX:: ds 1
-\1MapY:: ds 1
+\1NextTile:: ds 1     ; collision
+\1StandingTile:: ds 1 ; collision
 \1NextMapX:: ds 1
 \1NextMapY:: ds 1
-	ds 3
+\1MapX:: ds 1
+\1MapY:: ds 1
+\1ObjectInitX:: ds 1
+\1ObjectInitY:: ds 1
+\1Radius:: ds 1
 \1SpriteX:: ds 1
 \1SpriteY:: ds 1
 \1SpriteXOffset:: ds 1
 \1SpriteYOffset:: ds 1
-	ds 6
+\1MovementByteIndex:: ds 1
+\1Object28:: ds 1
+\1Object29:: ds 1
+\1Object30:: ds 1
+\1Object31:: ds 1
+\1Range:: ds 1
 	ds 7
+\1StructEnd::
 ENDM
 
 	object_struct Player
@@ -2202,10 +2356,12 @@
 	object_struct Object10
 	object_struct Object11
 	object_struct Object12
+ObjectStructsEnd:: ; d6de
 
-wd6de::
-	ds $40
+wCmdQueue:: ds CMDQUEUE_CAPACITY * CMDQUEUE_ENTRY_SIZE
+	ds $28
 
+MapObjects:: ; d71e
 map_object: MACRO
 \1Object::
 \1ObjectStructID::  ds 1
@@ -2223,7 +2379,6 @@
 	ds 2
 endm
 
-MapObjects:: ; d71e
 	map_object Player
 	map_object Map1
 	map_object Map2
@@ -2240,6 +2395,7 @@
 	map_object Map13
 	map_object Map14
 	map_object Map15
+MapObjectsEnd::
 
 wObjectMasks:: ds NUM_OBJECTS ; d81e
 
@@ -2262,17 +2418,32 @@
 wSecretID:: ds 1
 wd84b:: ds 1
 StatusFlags:: ; d84c
+	; 0 - pokedex
+	; 1 - unown dex
+	; 2 - 
+	; 3 - pokerus
+	; 4 - rocket signal
+	; 5 - wild encounters on/off
+	; 6 - hall of fame
+	; 7 - bug contest on
 	ds 1
+
 StatusFlags2:: ; d84d
+	; 0 - rockets
+	; 1 - 
+	; 2 - bug contest timer
+	; 3 - 
+	; 4 - bike shop call
+	; 5 - pokerus
+	; 6 - berry juice?
+	; 7 - rockets in mahogany
 	ds 1
 
 Money:: ; d84e
 	ds 3
 
-wd851::
 wMomsMoney:: ; d851
 	ds 3
-wBankOfMomMode::
 wMomSavingMoney:: ; d854
 	ds 1
 
@@ -2325,8 +2496,8 @@
 PlayerState:: ; d95d
 	ds 1
 
-wd95e:: ds 2
-wd960:: ds 2
+wHallOfFameCount:: ds 2
+wTradeFlags:: ds 2
 MooMooBerries:: ; d962
 	ds 1 ; how many berries fed to MooMoo
 UndergroundSwitchPositions:: ; d963
@@ -2487,8 +2658,8 @@
 wCurrMapWarpCount:: ds 1
 wCurrMapWarpHeaderPointer:: ds 1
 wdbfd:: ds 1
-wCurrentMapXYTriggerCount:: ds 1
-wCurrentMapXYTriggerHeaderPointer:: ds 1
+wCurrentNextMapXYTriggerCount:: ds 1
+wCurrentNextMapXYTriggerHeaderPointer:: ds 1
 wdc00:: ds 1
 wCurrentMapSignpostCount:: ds 1
 wCurrentMapSignpostHeaderPointer::
@@ -2791,7 +2962,7 @@
 wPokeAnimStructEnd::
 
 
-SECTION "WRAM 3", WRAMX, BANK [3]
+SECTION "Battle Tower", WRAMX, BANK [3]
 
 w3_d000:: ; d000
 	ds $80
@@ -2804,8 +2975,17 @@
 BT_OTTrainer:: battle_tower_struct BT_OT
 ; d1e0	
 	ds $20
-BT_TrainerTextIndex::
-	ds $600
+; d200
+BT_TrainerTextIndex:: ds 2
+w3_d202:: battle_tower_struct w3_d202
+w3_d2e2:: battle_tower_struct w3_d2e2
+w3_d3c2:: battle_tower_struct w3_d3c2
+w3_d4a2:: battle_tower_struct w3_d4a2
+w3_d582:: battle_tower_struct w3_d582
+w3_d662:: battle_tower_struct w3_d662
+w3_d742:: battle_tower_struct w3_d742
+; d822
+	ds -$22
 
 wBTChoiceOfLvlGroup::
 w3_d800:: ds $400
@@ -2816,10 +2996,10 @@
 SECTION "GBC Video", WRAMX, BANK [5]
 
 ; 8 4-color palettes
-wMapPals:: ds 8 * 8 ; d000
-Unkn2Pals:: ds 8 * 8 ; d040
-BGPals::    ds 8 * 8 ; d080
-OBPals::    ds 8 * 8 ; d0c0
+UnknBGPals:: ds 8 palettes ; d000
+UnknOBPals:: ds 8 palettes ; d040
+BGPals::     ds 8 palettes ; d080
+OBPals::     ds 8 palettes ; d0c0
 
 LYOverrides:: ; d100
 	ds SCREEN_HEIGHT_PX
@@ -2893,7 +3073,8 @@
 
 w6_d000:: ds $400
 w6_d400:: ds $200
-w6_d600:: ds $600
+w6_d600:: ds $200
+w6_d800::
 
 INCLUDE "sram.asm"
 
--