shithub: pokered

Download patch

ref: 40ea6a5f757bbbfdb4296e5acf644f6679a03a14
parent: 4670a1ddae02fd73d8c4826f9d9c9948820636a0
parent: 9e77982bc8658c09df187b4598f8cbabb427a271
author: dannye <corrnondacqb@yahoo.com>
date: Thu Jul 16 19:27:57 EDT 2015

Merge branch 'master' of https://github.com/iimarckus/pokered

--- a/constants/misc_constants.asm
+++ b/constants/misc_constants.asm
@@ -8,7 +8,7 @@
 
 HOF_MON       EQU $10
 HOF_TEAM      EQU PARTY_LENGTH * HOF_MON
-NUM_HOF_TEAMS EQU 50
+HOF_TEAM_CAPACITY EQU 50
 
 
 A_BUTTON EQU %00000001
@@ -108,6 +108,14 @@
 NAME_PLAYER_SCREEN EQU 0
 NAME_RIVAL_SCREEN  EQU 1
 NAME_MON_SCREEN    EQU 2
+
+; mon data locations
+; Note that some values are not supported by all functions that use these values.
+PLAYER_PARTY_DATA EQU 0
+ENEMY_PARTY_DATA  EQU 1
+BOX_DATA          EQU 2
+DAYCARE_DATA      EQU 3
+BATTLE_MON_DATA   EQU 4
 
 ; serial
 
--- a/engine/HoF_room_pc.asm
+++ b/engine/HoF_room_pc.asm
@@ -6,10 +6,10 @@
 	call DisableLCD
 	ld hl, vFont
 	ld bc, $800 / 2
-	call Func_74171
+	call ZeroMemory
 	ld hl, vChars2 + $600
 	ld bc, $200 / 2
-	call Func_74171
+	call ZeroMemory
 	ld hl, vChars2 + $7e0
 	ld bc, $10
 	ld a, $ff
@@ -30,12 +30,12 @@
 	call DelayFrames
 	xor a
 	ld [wWhichTrade], a
-	ld [wTrainerEngageDistance], a
+	ld [wNumCreditsMonsDisplayed], a
 	jp Credits
 
-Func_740ba: ; 740ba (1d:40ba)
+FadeInCreditsText: ; 740ba (1d:40ba)
 	ld hl, HoFGBPalettes
-	ld b, $4
+	ld b, 4
 .asm_740bf
 	ld a, [hli]
 	ld [rBGP], a
@@ -52,7 +52,7 @@
 	call FillMiddleOfScreenWithWhite
 
 	; display the next monster from CreditsMons
-	ld hl,wTrainerEngageDistance
+	ld hl,wNumCreditsMonsDisplayed
 	ld c,[hl] ; how many monsters have we displayed so far?
 	inc [hl]
 	ld b,0
@@ -65,62 +65,69 @@
 	call GetMonHeader
 	call LoadFrontSpriteByMonIndex
 	ld hl,vBGMap0 + $c
-	call Func_74164
+	call CopyTileMapToVRAM
 	xor a
 	ld [H_AUTOBGTRANSFERENABLED],a
 	call LoadScreenTilesFromBuffer1
 	ld hl,vBGMap0
-	call Func_74164
+	call CopyTileMapToVRAM
 	ld a,$A7
-	ld [$FF4B],a
+	ld [rWX],a
 	ld hl,vBGMap1
-	call Func_74164
+	call CopyTileMapToVRAM
 	call FillMiddleOfScreenWithWhite
-	ld a,$FC
+	ld a,%11111100 ; make the mon a black silhouette 
 	ld [rBGP],a
+
+; scroll the mon left by one tile 7 times
 	ld bc,7
-.next
-	call Func_74140
+.scrollLoop1
+	call ScrollCreditsMonLeft
 	dec c
-	jr nz,.next
-	ld c,$14
-.next2
-	call Func_74140
-	ld a,[$FF4B]
+	jr nz,.scrollLoop1
+
+; scroll the mon left by one tile 20 times
+; This time, we have to move the window left too in order to hide the text that
+; is wrapping around to the right side of the screen. 
+	ld c,20
+.scrollLoop2
+	call ScrollCreditsMonLeft
+	ld a,[rWX]
 	sub 8
-	ld [$FF4B],a
+	ld [rWX],a
 	dec c
-	jr nz,.next2
+	jr nz,.scrollLoop2
+
 	xor a
 	ld [hWY],a
-	ld a,$C0
+	ld a,%11000000
 	ld [rBGP],a
 	ret
 
 INCLUDE "data/credit_mons.asm"
 
-Func_74140: ; 74140 (1d:4140)
+ScrollCreditsMonLeft: ; 74140 (1d:4140)
 	ld h, b
 	ld l, $20
-	call Func_74152
+	call ScrollCreditsMonLeft_SetSCX
 	ld h, $0
 	ld l, $70
-	call Func_74152
+	call ScrollCreditsMonLeft_SetSCX
 	ld a, b
 	add $8
 	ld b, a
 	ret
 
-Func_74152: ; 74152 (1d:4152)
-	ld a, [$ff44]
+ScrollCreditsMonLeft_SetSCX: ; 74152 (1d:4152)
+	ld a, [rLY]
 	cp l
-	jr nz, Func_74152
+	jr nz, ScrollCreditsMonLeft_SetSCX
 	ld a, h
 	ld [rSCX], a
-.asm_7415a
-	ld a, [$ff44]
+.loop
+	ld a, [rLY]
 	cp h
-	jr z, .asm_7415a
+	jr z, .loop
 	ret
 
 HoFGBPalettes: ; 74160 (1d:4160)
@@ -129,7 +136,7 @@
 	db %11100000
 	db %11110000
 
-Func_74164: ; 74164 (1d:4164)
+CopyTileMapToVRAM: ; 74164 (1d:4164)
 	ld a, l
 	ld [H_AUTOBGTRANSFERDEST], a
 	ld a, h
@@ -138,14 +145,15 @@
 	ld [H_AUTOBGTRANSFERENABLED], a
 	jp Delay3
 
-Func_74171: ; 74171 (1d:4171)
-	ld [hl], $0
+ZeroMemory: ; 74171 (1d:4171)
+; zero bc bytes at hl
+	ld [hl], 0
 	inc hl
 	inc hl
 	dec bc
 	ld a, b
 	or c
-	jr nz, Func_74171
+	jr nz, ZeroMemory
 	ret
 
 FillFourRowsWithBlack: ; 7417b (1d:417b)
@@ -162,26 +170,26 @@
 Credits: ; 7418e (1d:418e)
 	ld de, CreditsOrder
 	push de
-.asm_74192
+.nextCreditsScreen
 	pop de
 	hlCoord 9, 6
 	push hl
 	call FillMiddleOfScreenWithWhite
 	pop hl
-.asm_7419b
+.nextCreditsCommand
 	ld a, [de]
 	inc de
 	push de
 	cp $ff
-	jr z, .asm_741d5
+	jr z, .fadeInTextAndShowMon
 	cp $fe
-	jr z, .asm_741dc
+	jr z, .showTextAndShowMon
 	cp $fd
-	jr z, .asm_741e6
+	jr z, .fadeInText
 	cp $fc
-	jr z, .asm_741ed
+	jr z, .showText
 	cp $fb
-	jr z, .asm_741f4
+	jr z, .showCopyrightText
 	cp $fa
 	jr z, .showTheEnd
 	push hl
@@ -189,7 +197,7 @@
 	ld hl, CreditsTextPointers
 	add a
 	ld c, a
-	ld b, $0
+	ld b, 0
 	add hl, bc
 	ld e, [hl]
 	inc hl
@@ -205,32 +213,32 @@
 	ld bc, SCREEN_WIDTH * 2
 	add hl, bc
 	pop de
-	jr .asm_7419b
-.asm_741d5
-	call Func_740ba
+	jr .nextCreditsCommand
+.fadeInTextAndShowMon
+	call FadeInCreditsText
 	ld c, 90
-	jr .asm_741de
-.asm_741dc
+	jr .next1
+.showTextAndShowMon
 	ld c, 110
-.asm_741de
+.next1
 	call DelayFrames
 	call DisplayCreditsMon
-	jr .asm_74192
-.asm_741e6
-	call Func_740ba
+	jr .nextCreditsScreen
+.fadeInText
+	call FadeInCreditsText
 	ld c, 120
-	jr .asm_741ef
-.asm_741ed
+	jr .next2
+.showText
 	ld c, 140
-.asm_741ef
+.next2
 	call DelayFrames
-	jr .asm_74192
-.asm_741f4
+	jr .nextCreditsScreen
+.showCopyrightText
 	push de
 	callba LoadCopyrightTiles
 	pop de
 	pop de
-	jr .asm_7419b
+	jr .nextCreditsCommand
 .showTheEnd
 	ld c, 16
 	call DelayFrames
@@ -246,7 +254,7 @@
 	hlCoord 4, 9
 	inc de
 	call PlaceString
-	jp Func_740ba
+	jp FadeInCreditsText
 
 TheEndTextString: ; 74229 (1d:4229)
 ; "T H E  E N D"
--- a/engine/battle/animations.asm
+++ b/engine/battle/animations.asm
@@ -1973,7 +1973,7 @@
 	push hl
 .asm_79680
 	call Func_796ae
-	ld a, [$ff44]
+	ld a, [rLY]
 	cp e
 	jr nz, .asm_79680
 	pop hl
@@ -2500,27 +2500,29 @@
 	ld a, [H_WHOSETURN]
 	and a
 	ld a, $31 ; base tile ID of player mon sprite
-	jr z, .asm_79ab6
+	jr z, .next
 ; enemy turn
 	xor a ; base tile ID of enemy mon sprite
-.asm_79ab6
+.next
 	ld [hBaseTileID], a
-	jr asm_79acb
+	jr CopyTileIDs_NoBGTransfer
 
-; copy the tiles used when a mon is being sent out
-; and "growing" out of the pokeball
-CopyGrowingMonTiles: ; 79aba (1e:5aba)
+; copy the tiles used when a mon is being sent out of or into a pokeball
+CopyDownscaledMonTiles: ; 79aba (1e:5aba)
 	call GetPredefRegisters
-	ld a, [wcd6c]
+	ld a, [wDownscaledMonSize]
 	and a
-	jr nz, .asm_79ac8
-	ld de, Unknown_79b02 ; 5x5
-	jr asm_79acb
-.asm_79ac8
-	ld de, Unknown_79b1b ; 3x3
-asm_79acb: ; 79acb (1e:5acb)
+	jr nz, .smallerSize
+	ld de, DownscaledMonTiles_5x5
+	jr CopyTileIDs_NoBGTransfer
+.smallerSize
+	ld de, DownscaledMonTiles_3x3
+; fall through
+
+CopyTileIDs_NoBGTransfer: ; 79acb (1e:5acb)
 	xor a
 	ld [H_AUTOBGTRANSFERENABLED], a
+; fall through
 
 ; b = number of rows
 ; c = number of columns
@@ -2567,7 +2569,7 @@
 	dw Unknown_79c50
 	db $3C
 
-Unknown_79b02: ; 79b02 (1e:5b02)
+DownscaledMonTiles_5x5: ; 79b02 (1e:5b02)
 	db $31,$38,$46,$54,$5B
 	db $32,$39,$47,$55,$5C
 	db $34,$3B,$49,$57,$5E
@@ -2574,7 +2576,7 @@
 	db $36,$3D,$4B,$59,$60
 	db $37,$3E,$4C,$5A,$61
 
-Unknown_79b1b: ; 79b1b (1e:5b1b)
+DownscaledMonTiles_3x3: ; 79b1b (1e:5b1b)
 	db $31,$46,$5B
 	db $34,$49,$5E
 	db $37,$4C,$61
--- a/engine/battle/bank_e_misc.asm
+++ b/engine/battle/bank_e_misc.asm
@@ -24,7 +24,7 @@
 	jr .copyNameLoop
 .doneCopyingName
 	ld a, b
-	ld [wcd6c], a
+	ld [wNumMovesMinusOne], a
 	inc b
 	ld a, $4e ; line break
 	ld [de], a
@@ -70,7 +70,7 @@
 .notPlayer
 	cp INIT_MON_LIST
 	jr nz, .notMonster
-	ld hl, wStringBuffer2 + 11
+	ld hl, wItemList
 	ld de, MonsterNames
 	ld a, MONSTER_NAME
 	jr .done
@@ -82,15 +82,15 @@
 	ld a, ITEM_NAME
 	jr .done
 .notBag
-	ld hl, wStringBuffer2 + 11
+	ld hl, wItemList
 	ld de, ItemNames
 	ld a, ITEM_NAME
 .done
 	ld [wNameListType], a
 	ld a, l
-	ld [wList], a
+	ld [wListPointer], a
 	ld a, h
-	ld [wList + 1], a
+	ld [wListPointer + 1], a
 	ld a, e
 	ld [wcf8d], a
 	ld a, d
@@ -102,10 +102,10 @@
 	ld [wItemPrices + 1], a
 	ret
 
-; get species of mon e in list [wcc49] for LoadMonData
+; get species of mon e in list [wMonDataLocation] for LoadMonData
 GetMonSpecies: ; 39c37 (e:5c37)
 	ld hl, wPartySpecies
-	ld a, [wcc49]
+	ld a, [wMonDataLocation]
 	and a
 	jr z, .getSpecies
 	dec a
--- a/engine/battle/battle_transitions.asm
+++ b/engine/battle/battle_transitions.asm
@@ -104,12 +104,12 @@
 	jr nc, .highLevelEnemy
 	res 1, c
 	ld a, $1
-	ld [wcd47], a
+	ld [wBattleTransitionSpiralDirection], a
 	ret
 .highLevelEnemy
 	set 1, c
 	xor a
-	ld [wcd47], a
+	ld [wBattleTransitionSpiralDirection], a
 	ret
 
 ; fails to recognize VICTORY_ROAD_2, VICTORY_ROAD_3, all ROCKET_HIDEOUT maps,
@@ -196,7 +196,7 @@
 ; outward spiral if enemy is at least 3 levels
 ; higher than player and does an inward spiral otherwise
 BattleTransition_Spiral: ; 70a72 (1c:4a72)
-	ld a, [wcd47]
+	ld a, [wBattleTransitionSpiralDirection]
 	and a
 	jr z, .outwardSpiral
 	call BattleTransition_InwardSpiral
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -225,7 +225,7 @@
 	xor a
 	ld [wPartyGainExpFlags], a
 	ld [wPartyFoughtCurrentEnemyFlags], a
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a
 	inc a
 	ld [wd11d], a
 	ld hl, wEnemyMon1HP
@@ -260,7 +260,7 @@
 .displaySafariZoneBattleMenu
 	call DisplayBattleMenu
 	ret c ; return if the player ran from battle
-	ld a, [wcd6a]
+	ld a, [wActionResultOrTookBattleTurn]
 	and a ; was the item used successfully?
 	jr z, .displaySafariZoneBattleMenu ; if not, display the menu again; XXX does this ever jump?
 	ld a, [W_NUMSAFARIBALLS]
@@ -415,8 +415,8 @@
 	ld [wPlayerSelectedMove], a
 	jr .selectEnemyMove
 .selectPlayerMove
-	ld a, [wcd6a]
-	and a
+	ld a, [wActionResultOrTookBattleTurn]
+	and a ; has the player already used the turn (e.g. by using an item, trying to run or switching pokemon)
 	jr nz, .selectEnemyMove
 	ld [wMoveMenuType], a
 	inc a
@@ -816,11 +816,11 @@
 	call ChooseNextMon
 .skipReplacingBattleMon
 	ld a, $1
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a
 	call ReplaceFaintedEnemyMon
 	jp z, EnemyRan
 	xor a
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a
 	jp MainInBattleLoop
 
 FaintEnemyPokemon: ; 0x3c567
@@ -990,7 +990,7 @@
 	call EnemySendOut
 	xor a
 	ld [W_ENEMYMOVENUM], a
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a
 	ld [wAILayer2Encouragement], a
 	inc a ; reset Z flag
 	ret
@@ -1075,11 +1075,11 @@
 	jp nz, MainInBattleLoop ; if the enemy mon has more than 0 HP, go back to battle loop
 ; the enemy mon has 0 HP
 	ld a, $1
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a
 	call ReplaceFaintedEnemyMon
 	jp z, EnemyRan ; if enemy ran from battle rather than sending out another mon, jump
 	xor a
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a
 	jp MainInBattleLoop
 
 ; resets flags, slides mon's pic down, plays cry, and prints fainted message
@@ -1177,11 +1177,11 @@
 	cp LINK_STATE_BATTLING
 	jr nz, .notLinkBattle
 	inc a
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a
 	call LinkBattleExchangeData
 .notLinkBattle
 	xor a
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a
 	call ClearSprites
 	ld a, [wWhichPokemon]
 	ld [wPlayerMonNumber], a
@@ -1646,7 +1646,7 @@
 	                  ; plus 30 times the number of attempts, the player can escape
 ; can't escape
 	ld a, $1
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a ; you lose your turn when you can't escape
 	ld hl, CantEscapeText
 	jr .printCantEscapeOrNoRunningText
 .trainerBattle
@@ -1666,7 +1666,7 @@
 ; link battle
 	call SaveScreenTilesToBuffer1
 	xor a
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a
 	ld a, $f
 	ld [wPlayerMoveListIndex], a
 	call LinkBattleExchangeData
@@ -1809,7 +1809,7 @@
 	predef LoadMonBackPic
 	xor a
 	ld [$ffe1], a
-	ld hl, wcc2d
+	ld hl, wBattleAndStartSavedMenuItem
 	ld [hli], a
 	ld [hl], a
 	ld [wBoostExpByExpAll], a
@@ -1842,7 +1842,7 @@
 	call PrintEmptyString
 	jp SaveScreenTilesToBuffer1
 
-; show 2 stages of the player getting smaller before disappearing
+; show 2 stages of the player mon getting smaller before disappearing
 AnimateRetreatingPlayerMon: ; 3ccfa (f:4cfa)
 	hlCoord 1, 5
 	ld bc, $707
@@ -1850,9 +1850,9 @@
 	hlCoord 3, 7
 	ld bc, $505
 	xor a
-	ld [wcd6c], a
+	ld [wDownscaledMonSize], a
 	ld [H_DOWNARROWBLINKCNT1], a
-	predef CopyGrowingMonTiles
+	predef CopyDownscaledMonTiles
 	ld c, 4
 	call DelayFrames
 	call .clearScreenArea
@@ -1859,10 +1859,10 @@
 	hlCoord 4, 9
 	ld bc, $303
 	ld a, $1
-	ld [wcd6c], a
+	ld [wDownscaledMonSize], a
 	xor a
 	ld [H_DOWNARROWBLINKCNT1], a
-	predef CopyGrowingMonTiles
+	predef CopyDownscaledMonTiles
 	call Delay3
 	call .clearScreenArea
 	ld a, $4c
@@ -2123,7 +2123,7 @@
 .oldManName
 	db "OLD MAN@"
 .handleBattleMenuInput
-	ld a, [wcc2d]
+	ld a, [wBattleAndStartSavedMenuItem]
 	ld [wCurrentMenuItem], a
 	ld [wLastMenuItem], a
 	sub 2 ; check if the cursor is in the left column
@@ -2206,7 +2206,7 @@
 	ld a, [W_BATTLETYPE]
 	cp $2 ; is it a Safari battle?
 	ld a, [wCurrentMenuItem]
-	ld [wcc2d], a
+	ld [wBattleAndStartSavedMenuItem], a
 	jr z, .handleMenuSelection
 ; not Safari battle
 ; swap the IDs of the item menu and party menu (this is probably because they swapped the positions
@@ -2276,9 +2276,9 @@
 	jr nz, DisplayPlayerBag ; no, it is a normal battle
 	ld hl, OldManItemList
 	ld a, l
-	ld [wList], a
+	ld [wListPointer], a
 	ld a, h
-	ld [wList + 1], a
+	ld [wListPointer + 1], a
 	jr DisplayBagMenu
 
 OldManItemList:
@@ -2290,9 +2290,9 @@
 	; get the pointer to player's bag when in a normal battle
 	ld hl, wNumBagItems
 	ld a, l
-	ld [wList], a
+	ld [wListPointer], a
 	ld a, h
-	ld [wList + 1], a
+	ld [wListPointer + 1], a
 
 DisplayBagMenu:
 	xor a
@@ -2299,11 +2299,11 @@
 	ld [wPrintItemPrices], a
 	ld a, ITEMLISTMENU
 	ld [wListMenuID], a
-	ld a, [wcc2c]
+	ld a, [wBagSavedMenuItem]
 	ld [wCurrentMenuItem], a
 	call DisplayListMenuID
 	ld a, [wCurrentMenuItem]
-	ld [wcc2c], a
+	ld [wBagSavedMenuItem], a
 	ld a, $0
 	ld [wMenuWatchMovingOutOfBounds], a
 	ld [wMenuItemToSwap], a
@@ -2326,7 +2326,7 @@
 	cp $2 ; is it a safari battle?
 	jr z, .checkIfMonCaptured
 
-	ld a, [wcd6a]
+	ld a, [wActionResultOrTookBattleTurn]
 	and a ; was the item used successfully?
 	jp z, BagWasSelected ; if not, go back to the bag menu
 
@@ -2435,8 +2435,8 @@
 	and a ; was Switch selected?
 	jr z, .switchMon ; if so, jump
 ; Stats was selected
-	xor a
-	ld [wcc49], a
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation], a
 	ld hl, wPartyMon1
 	call ClearSprites
 ; display the two status screens
@@ -2479,7 +2479,7 @@
 	call HasMonFainted
 	jp z, .partyMonDeselected ; can't switch to fainted mon
 	ld a, $1
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a
 	call GBPalWhiteOut
 	call ClearSprites
 	call LoadHudTilePatterns
@@ -2525,9 +2525,9 @@
 	ld a, $0
 	ld [wd11f], a
 	ret c
-	ld a, [wcd6a]
+	ld a, [wActionResultOrTookBattleTurn]
 	and a
-	ret nz
+	ret nz ; return if the player couldn't escape
 	jp DisplayBattleMenu
 
 MoveSelectionMenu: ; 3d219 (f:5219)
@@ -2604,9 +2604,9 @@
 	ld a, $7
 .menuset
 	ld hl, wTopMenuItemY
-	ld [hli], a
+	ld [hli], a ; wTopMenuItemY
 	ld a, b
-	ld [hli], a
+	ld [hli], a ; wTopMenuItemX
 	ld a, [wMoveMenuType]
 	cp $1
 	jr z, .selectedmoveknown
@@ -2615,18 +2615,18 @@
 	ld a, [wPlayerMoveListIndex]
 	inc a
 .selectedmoveknown
-	ld [hli], a
+	ld [hli], a ; wCurrentMenuItem
 	inc hl ; wTileBehindCursor untouched
-	ld a, [wcd6c]
+	ld a, [wNumMovesMinusOne]
 	inc a
 	inc a
-	ld [hli], a
+	ld [hli], a ; wMaxMenuItem
 	ld a, [wMoveMenuType]
 	dec a
-	ld b, $c1 ; can't use B
+	ld b, D_UP | D_DOWN | A_BUTTON
 	jr z, .matchedkeyspicked
 	dec a
-	ld b, $c3
+	ld b, D_UP | D_DOWN | A_BUTTON | B_BUTTON
 	jr z, .matchedkeyspicked
 	ld a, [wLinkState]
 	cp LINK_STATE_BATTLING
@@ -2633,12 +2633,12 @@
 	jr z, .matchedkeyspicked
 	ld a, [W_FLAGS_D733]
 	bit 0, a
-	ld b, $c7
+	ld b, D_UP | D_DOWN | A_BUTTON | B_BUTTON | SELECT
 	jr z, .matchedkeyspicked
 	ld b, $ff
 .matchedkeyspicked
 	ld a, b
-	ld [hli], a
+	ld [hli], a ; wMenuWatchedKeys
 	ld a, [wMoveMenuType]
 	cp $1
 	jr z, .movelistindex1
@@ -2759,7 +2759,7 @@
 	and a
 	jp nz, SelectMenuItem
 	call EraseMenuCursor
-	ld a, [wcd6c]
+	ld a, [wNumMovesMinusOne]
 	inc a
 	ld [wCurrentMenuItem], a
 	jp SelectMenuItem
@@ -2767,7 +2767,7 @@
 CursorDown: ; 3d3dd (f:53dd)
 	ld a, [wCurrentMenuItem]
 	ld b, a
-	ld a, [wcd6c]
+	ld a, [wNumMovesMinusOne]
 	inc a
 	inc a
 	cp b
@@ -2935,8 +2935,8 @@
 	                            ; isn't actually selected (just pointed to by the cursor)
 	ld a, [wPlayerMonNumber]
 	ld [wWhichPokemon], a
-	ld a, $4
-	ld [wcc49], a
+	ld a, BATTLE_MON_DATA
+	ld [wMonDataLocation], a
 	callab GetMaxPP
 	ld hl, wCurrentMenuItem
 	ld c, [hl]
@@ -2983,7 +2983,7 @@
 
 SelectEnemyMove: ; 3d564 (f:5564)
 	ld a, [wLinkState]
-	sub $4
+	sub LINK_STATE_BATTLING
 	jr nz, .noLinkBattle
 ; link battle
 	call SaveScreenTilesToBuffer1
@@ -3079,46 +3079,47 @@
 	ld [wSerialExchangeNybbleReceiveData], a
 	ld a, [wPlayerMoveListIndex]
 	cp $f ; is the player running from battle?
-	jr z, .asm_3d630
-	ld a, [wcd6a]
-	and a
-	jr nz, .asm_3d629
+	jr z, .doExchange
+	ld a, [wActionResultOrTookBattleTurn]
+	and a ; is the player switching in another mon?
+	jr nz, .switching
+; the player used a move
 	ld a, [wPlayerSelectedMove]
 	cp STRUGGLE
 	ld b, $e
-	jr z, .asm_3d62f
+	jr z, .next
 	dec b
 	inc a
-	jr z, .asm_3d62f
+	jr z, .next
 	ld a, [wPlayerMoveListIndex]
-	jr .asm_3d630
-.asm_3d629
+	jr .doExchange
+.switching
 	ld a, [wWhichPokemon]
-	add $4
+	add 4
 	ld b, a
-.asm_3d62f
+.next
 	ld a, b
-.asm_3d630
+.doExchange
 	ld [wSerialExchangeNybbleSendData], a
 	callab PrintWaitingText
-.asm_3d63b
+.syncLoop1
 	call Serial_ExchangeNybble
 	call DelayFrame
 	ld a, [wSerialExchangeNybbleReceiveData]
 	inc a
-	jr z, .asm_3d63b
-	ld b, $a
-.asm_3d649
+	jr z, .syncLoop1
+	ld b, 10
+.syncLoop2
 	call DelayFrame
 	call Serial_ExchangeNybble
 	dec b
-	jr nz, .asm_3d649
-	ld b, $a
-.asm_3d654
+	jr nz, .syncLoop2
+	ld b, 10
+.syncLoop3
 	call DelayFrame
 	call Serial_SendZeroByte
 	dec b
-	jr nz, .asm_3d654
+	jr nz, .syncLoop3
 	ret
 
 ExecutePlayerMove: ; 3d65e (f:565e)
@@ -3133,8 +3134,8 @@
 	ld [wMoveDidntMiss], a
 	ld a, $a
 	ld [wDamageMultipliers], a
-	ld a, [wcd6a]
-	and a
+	ld a, [wActionResultOrTookBattleTurn]
+	and a ; has the player already used the turn (e.g. by using an item, trying to run or switching pokemon)
 	jp nz, ExecutePlayerMoveDone
 	call PrintGhostText
 	jp z, ExecutePlayerMoveDone
@@ -3324,7 +3325,7 @@
 
 ExecutePlayerMoveDone: ; 3d80a (f:580a)
 	xor a
-	ld [wcd6a],a
+	ld [wActionResultOrTookBattleTurn],a
 	ld b,1
 	ret
 
@@ -6856,7 +6857,7 @@
 InitBattleCommon: ; 3ef3d (f:6f3d)
 	ld a, [wMapPalOffset]
 	push af
-	ld hl, wd358
+	ld hl, wLetterPrintingDelayFlags
 	ld a, [hl]
 	push af
 	res 1, [hl]
@@ -6963,7 +6964,7 @@
 	call StartBattle
 	callab EndOfBattle
 	pop af
-	ld [wd358], a
+	ld [wLetterPrintingDelayFlags], a
 	pop af
 	ld [wMapPalOffset], a
 	ld a, [wd0d4]
@@ -6998,7 +6999,7 @@
 	ld [wc0f2], a
 	jp PlaySound
 
-; animtes the mon "growing" out of the pokeball
+; animates the mon "growing" out of the pokeball
 AnimateSendingOutMon: ; 3f073 (f:7073)
 	ld a, [wPredefRegisters]
 	ld h, a
@@ -7016,17 +7017,17 @@
 	ld bc, -41
 	add hl, bc
 	ld a, $1
-	ld [wcd6c], a
+	ld [wDownscaledMonSize], a
 	ld bc, $303
-	predef CopyGrowingMonTiles
+	predef CopyDownscaledMonTiles
 	ld c, 4
 	call DelayFrames
 	ld bc, -41
 	add hl, bc
 	xor a
-	ld [wcd6c], a
+	ld [wDownscaledMonSize], a
 	ld bc, $505
-	predef CopyGrowingMonTiles
+	predef CopyDownscaledMonTiles
 	ld c, 5
 	call DelayFrames
 	ld bc, -41
@@ -8242,7 +8243,7 @@
 	ld a, b
 	call PlayBattleAnimation
 	ld a, [de]
-	ld [wWhichTrade], a
+	ld [wChargeMoveNum], a
 	ld hl, ChargeMoveEffectText
 	jp PrintText
 
@@ -8249,7 +8250,7 @@
 ChargeMoveEffectText: ; 3f8c8 (f:78c8)
 	TX_FAR _ChargeMoveEffectText
 	TX_ASM
-	ld a, [wWhichTrade]
+	ld a, [wChargeMoveNum]
 	cp RAZOR_WIND
 	ld hl, MadeWhirlwindText
 	jr z, .asm_3f8f8
--- a/engine/battle/end_of_battle.asm
+++ b/engine/battle/end_of_battle.asm
@@ -54,7 +54,7 @@
 	ld [wd11f], a
 	ld [wNumRunAttempts], a
 	ld [wEscapedFromBattle], a
-	ld hl, wcc2b
+	ld hl, wPartyAndBillsPCSavedMenuItem
 	ld [hli], a
 	ld [hli], a
 	ld [hli], a
--- a/engine/battle/experience.asm
+++ b/engine/battle/experience.asm
@@ -148,8 +148,8 @@
 	call GetPartyMonName
 	ld hl, GainedText
 	call PrintText
-	xor a ; party mon data
-	ld [wcc49], a
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation], a
 	call LoadMonData
 	pop hl
 	ld bc, wPartyMon1Level - wPartyMon1Exp
@@ -242,15 +242,15 @@
 .printGrewLevelText
 	ld hl, GrewLevelText
 	call PrintText
-	xor a ; party mon data
-	ld [wcc49], a
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation], a
 	call LoadMonData
 	ld d, $1
 	callab PrintStatsBox
 	call WaitForTextScrollButtonPress
 	call LoadScreenTilesFromBuffer1
-	xor a
-	ld [wcc49], a
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation], a
 	ld a, [wd0b5]
 	ld [wd11e], a
 	predef LearnMoveFromLevelUp
--- a/engine/battle/init_battle_variables.asm
+++ b/engine/battle/init_battle_variables.asm
@@ -2,9 +2,9 @@
 	ld a, [hTilesetType]
 	ld [wd0d4], a
 	xor a
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a
 	ld [wBattleResult], a
-	ld hl, wcc2b
+	ld hl, wPartyAndBillsPCSavedMenuItem
 	ld [hli], a
 	ld [hli], a
 	ld [hli], a
--- a/engine/battle/read_trainer_party.asm
+++ b/engine/battle/read_trainer_party.asm
@@ -55,8 +55,8 @@
 	and a ; have we reached the end of the trainer data?
 	jr z,.FinishUp
 	ld [wcf91],a ; write species somewhere (XXX why?)
-	ld a,1
-	ld [wcc49],a
+	ld a,ENEMY_PARTY_DATA
+	ld [wMonDataLocation],a
 	push hl
 	call AddPartyMon
 	pop hl
@@ -72,8 +72,8 @@
 	ld [W_CURENEMYLVL],a
 	ld a,[hli]
 	ld [wcf91],a
-	ld a,1
-	ld [wcc49],a
+	ld a,ENEMY_PARTY_DATA
+	ld [wMonDataLocation],a
 	push hl
 	call AddPartyMon
 	pop hl
--- a/engine/battle/trainer_ai.asm
+++ b/engine/battle/trainer_ai.asm
@@ -559,7 +559,7 @@
 AIUseFullRestore: ; 3a6a0 (e:66a0)
 	call AICureStatus
 	ld a,FULL_RESTORE
-	ld [wcf05],a
+	ld [wAIItem],a
 	ld de,wHPBarOldHP
 	ld hl,wEnemyMonHP + 1
 	ld a,[hld]
@@ -600,7 +600,7 @@
 
 AIRecoverHP: ; 3a6da (e:66da)
 ; heal b HP and print "trainer used $(a) on pokemon!"
-	ld [wcf05],a
+	ld [wAIItem],a
 	ld hl,wEnemyMonHP + 1
 	ld a,[hl]
 	ld [wHPBarOldHP],a
@@ -797,7 +797,7 @@
 	; fallthrough
 
 AIIncreaseStat: ; 3a808 (e:6808)
-	ld [wcf05],a
+	ld [wAIItem],a
 	push bc
 	call AIPrintItemUse_
 	pop bc
@@ -819,13 +819,13 @@
 	jp DecrementAICount
 
 AIPrintItemUse: ; 3a82c (e:682c)
-	ld [wcf05],a
+	ld [wAIItem],a
 	call AIPrintItemUse_
 	jp DecrementAICount
 
 AIPrintItemUse_: ; 3a835 (e:6835)
-; print "x used [wcf05] on z!"
-	ld a,[wcf05]
+; print "x used [wAIItem] on z!"
+	ld a,[wAIItem]
 	ld [wd11e],a
 	call GetItemName
 	ld hl, AIBattleUseItemText
--- a/engine/evos_moves.asm
+++ b/engine/evos_moves.asm
@@ -55,8 +55,8 @@
 	push hl
 	ld a, [wcf91]
 	push af
-	xor a
-	ld [wcc49], a
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation], a
 	call LoadMonData
 	pop af
 	ld [wcf91], a
@@ -206,7 +206,7 @@
 	ld a, [wd0b5]
 	ld [wd11e], a
 	xor a
-	ld [wcc49], a
+	ld [wMonDataLocation], a
 	call LearnMoveFromLevelUp
 	pop hl
 	predef SetPartyMonTypes
@@ -345,12 +345,13 @@
 	ld a, [hli] ; move ID
 	jr nz, .learnSetLoop
 	ld d, a ; ID of move to learn
-	ld a, [wcc49]
+	ld a, [wMonDataLocation]
 	and a
 	jr nz, .next
-; if [wcc49] is 0, get the address of the mon's current moves
-; there is no reason to make this conditional because the code wouldn't work properly without doing this
-; every call to this function sets [wcc49] to 0
+; If [wMonDataLocation] is 0 (PLAYER_PARTY_DATA), get the address of the mon's
+; current moves in party data. Every call to this function sets
+; [wMonDataLocation] to 0 because other data locations are not supported.
+; If it is not 0, this function will not work properly.
 	ld hl, wPartyMon1Moves
 	ld a, [wWhichPokemon]
 	ld bc, wPartyMon2 - wPartyMon1
--- a/engine/give_pokemon.asm
+++ b/engine/give_pokemon.asm
@@ -16,7 +16,7 @@
 	call SetPokedexOwnedFlag
 	callab SendNewMonToBox
 	ld hl, wcf4b
-	ld a, [wd5a0]
+	ld a, [wCurrentBoxNum]
 	and $7f
 	cp 9
 	jr c, .asm_4fdec
--- a/engine/hall_of_fame.asm
+++ b/engine/hall_of_fame.asm
@@ -1,5 +1,5 @@
 AnimateHallOfFame: ; 701a0 (1c:41a0)
-	call Func_70423
+	call HoFFadeOutScreenAndMusic
 	call ClearScreen
 	ld c, 100
 	call DelayFrames
@@ -21,16 +21,16 @@
 	ld [wUpdateSpritesEnabled], a
 	ld [hTilesetType], a
 	ld [W_SPRITEFLIPPED], a
-	ld [wd358], a
-	ld [wTrainerScreenY], a
+	ld [wLetterPrintingDelayFlags], a ; no delay
+	ld [wHoFMonOrPlayer], a ; mon
 	inc a
 	ld [H_AUTOBGTRANSFERENABLED], a
-	ld hl, wd5a2
+	ld hl, wNumHoFTeams
 	ld a, [hl]
 	inc a
-	jr z, .asm_701eb
+	jr z, .skipInc ; don't wrap around to 0
 	inc [hl]
-.asm_701eb
+.skipInc
 	ld a, $90
 	ld [hWY], a
 	ld c, BANK(Music_HallOfFame)
@@ -38,23 +38,23 @@
 	call PlayMusic
 	ld hl, wPartySpecies
 	ld c, $ff
-.asm_701fb
+.partyMonLoop
 	ld a, [hli]
 	cp $ff
-	jr z, .asm_70241
+	jr z, .doneShowingParty
 	inc c
 	push hl
 	push bc
-	ld [wWhichTrade], a
+	ld [wHoFMonSpecies], a
 	ld a, c
-	ld [wTrainerEngageDistance], a
+	ld [wHoFPartyMonIndex], a
 	ld hl, wPartyMon1Level
 	ld bc, wPartyMon2 - wPartyMon1
 	call AddNTimes
 	ld a, [hl]
-	ld [wTrainerFacingDirection], a
-	call Func_70278
-	call Func_702e1
+	ld [wHoFMonLevel], a
+	call HoFShowMonOrPlayer
+	call HoFDisplayAndRecordMonInfo
 	ld c, 80
 	call DelayFrames
 	hlCoord 2, 13
@@ -69,8 +69,8 @@
 	call GBFadeOutToWhite
 	pop bc
 	pop hl
-	jr .asm_701fb
-.asm_70241
+	jr .partyMonLoop
+.doneShowingParty
 	ld a, c
 	inc a
 	ld hl, wHallOfFame
@@ -79,12 +79,12 @@
 	ld [hl], $ff
 	call SaveHallOfFameTeams
 	xor a
-	ld [wWhichTrade], a
+	ld [wHoFMonSpecies], a
 	inc a
-	ld [wTrainerScreenY], a
-	call Func_70278
+	ld [wHoFMonOrPlayer], a ; player
+	call HoFShowMonOrPlayer
 	call HoFDisplayPlayerStats
-	call Func_70423
+	call HoFFadeOutScreenAndMusic
 	xor a
 	ld [hWY], a
 	ld hl, rLCDC
@@ -94,69 +94,72 @@
 HallOfFameText: ; 7026b (1c:426b)
 	db "HALL OF FAME@"
 
-Func_70278: ; 70278 (1c:4278)
+HoFShowMonOrPlayer: ; 70278 (1c:4278)
 	call ClearScreen
 	ld a, $d0
 	ld [hSCY], a
 	ld a, $c0
 	ld [hSCX], a
-	ld a, [wWhichTrade]
+	ld a, [wHoFMonSpecies]
 	ld [wcf91], a
 	ld [wd0b5], a
 	ld [wBattleMonSpecies2], a
 	ld [wcf1d], a
-	ld a, [wTrainerScreenY]
+	ld a, [wHoFMonOrPlayer]
 	and a
-	jr z, .asm_7029d
+	jr z, .showMon
+; show player
 	call HoFLoadPlayerPics
-	jr .asm_702ab
-.asm_7029d
+	jr .next1
+.showMon
 	hlCoord 12, 5
 	call GetMonHeader
 	call LoadFrontSpriteByMonIndex
 	predef LoadMonBackPic
-.asm_702ab
+.next1
 	ld b, $b
 	ld c, $0
 	call GoPAL_SET
-	ld a, $e4
+	ld a, %11100100
 	ld [rBGP], a
-	ld c, $31
-	call Func_7036d
+	ld c, $31 ; back pic
+	call HoFLoadMonPlayerPicTileIDs
 	ld d, $a0
-	ld e, $4
+	ld e, 4
 	ld a, [wOnSGB]
 	and a
-	jr z, .asm_702c7
-	sla e
-.asm_702c7
-	call .asm_702d5
+	jr z, .next2
+	sla e ; scroll more slowly on SGB
+.next2
+	call .ScrollPic ; scroll back pic left
 	xor a
 	ld [hSCY], a
-	ld c, a
-	call Func_7036d
-	ld d, $0
-	ld e, $fc
-.asm_702d5
+	ld c, a ; front pic
+	call HoFLoadMonPlayerPicTileIDs
+	ld d, 0
+	ld e, -4
+; scroll front pic right
+
+.ScrollPic
 	call DelayFrame
 	ld a, [hSCX]
 	add e
 	ld [hSCX], a
 	cp d
-	jr nz, .asm_702d5
+	jr nz, .ScrollPic
 	ret
 
-Func_702e1: ; 702e1 (1c:42e1)
-	ld a, [wTrainerEngageDistance]
+HoFDisplayAndRecordMonInfo: ; 702e1 (1c:42e1)
+	ld a, [wHoFPartyMonIndex]
 	ld hl, wPartyMonNicks
 	call GetPartyMonName
-	call Func_702f0
-	jp Func_70404
+	call HoFDisplayMonInfo
+	jp HoFRecordMonInfo
 
-Func_702f0: ; 702f0 (1c:42f0)
+HoFDisplayMonInfo: ; 702f0 (1c:42f0)
 	hlCoord 0, 2
-	ld b, $9
-	ld c, $a
+	ld b, 9
+	ld c, 10
 	call TextBoxBorder
 	hlCoord 2, 6
 	ld de, HoFMonInfoText
@@ -164,14 +167,14 @@
 	hlCoord 1, 4
 	ld de, wcd6d
 	call PlaceString
-	ld a, [wTrainerFacingDirection]
+	ld a, [wHoFMonLevel]
 	hlCoord 8, 7
 	call PrintLevelCommon
-	ld a, [wWhichTrade]
+	ld a, [wHoFMonSpecies]
 	ld [wd0b5], a
 	hlCoord 3, 9
 	predef PrintMonType
-	ld a, [wWhichTrade]
+	ld a, [wHoFMonSpecies]
 	jp PlayCry
 
 HoFMonInfoText: ; 70329 (1c:4329)
@@ -197,8 +200,9 @@
 	call InterlaceMergeSpriteBuffers
 	ld c, $1
 
-Func_7036d: ; 7036d (1c:436d)
-	ld b, $0
+HoFLoadMonPlayerPicTileIDs: ; 7036d (1c:436d)
+; c = base tile ID
+	ld b, 0
 	hlCoord 12, 5
 	predef_jump CopyTileIDsFromList
 
@@ -261,14 +265,14 @@
 	TX_FAR _DexRatingText
 	db "@"
 
-Func_70404: ; 70404 (1c:4404)
+HoFRecordMonInfo: ; 70404 (1c:4404)
 	ld hl, wHallOfFame
 	ld bc, HOF_MON
-	ld a, [wTrainerEngageDistance]
+	ld a, [wHoFPartyMonIndex]
 	call AddNTimes
-	ld a, [wWhichTrade]
+	ld a, [wHoFMonSpecies]
 	ld [hli], a
-	ld a, [wTrainerFacingDirection]
+	ld a, [wHoFMonLevel]
 	ld [hli], a
 	ld e, l
 	ld d, h
@@ -276,7 +280,7 @@
 	ld bc, $b
 	jp CopyData
 
-Func_70423: ; 70423 (1c:4423)
+HoFFadeOutScreenAndMusic: ; 70423 (1c:4423)
 	ld a, $a
 	ld [wcfc8], a
 	ld [wcfc9], a
--- a/engine/in_game_trades.asm
+++ b/engine/in_game_trades.asm
@@ -130,11 +130,11 @@
 	ld a,[wInGameTradeReceiveMonSpecies]
 	ld [wcf91],a
 	xor a
-	ld [wcc49],a
+	ld [wMonDataLocation],a ; not used
 	ld [wRemoveMonFromBox],a
 	call RemovePokemon
-	ld a,$80
-	ld [wcc49],a
+	ld a,$80 ; prevent the player from naming the mon
+	ld [wMonDataLocation],a
 	call AddPartyMon
 	call InGameTrade_CopyDataToReceivedMon
 	callab EvolveTradeMon
@@ -177,9 +177,9 @@
 	ld bc, $b
 	call InGameTrade_CopyData
 	ld hl, InGameTrade_TrainerString
-	ld de, wcd4e
+	ld de, wTradedEnemyMonOT
 	call InGameTrade_CopyData
-	ld de, W_GRASSRATE
+	ld de, wLinkEnemyTrainerName
 	call InGameTrade_CopyData
 	ld hl, wPartyMon1OTID
 	ld bc, wPartyMon2 - wPartyMon1
--- a/engine/items/items.asm
+++ b/engine/items/items.asm
@@ -1,6 +1,6 @@
 UseItem_: ; d5c7 (3:55c7)
 	ld a,1
-	ld [wcd6a],a
+	ld [wActionResultOrTookBattleTurn],a ; initialise to success value
 	ld a,[wcf91]	;contains item_ID
 	cp a,HM_01
 	jp nc,ItemUseTMHM
@@ -423,8 +423,8 @@
 	ld a,[wPartyCount]
 	cp a,PARTY_LENGTH		;is party full?
 	jr z,.sendToBox
-	xor a
-	ld [wcc49],a
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation],a
 	call ClearSprites
 	call AddPartyMon	;add mon to Party
 	jr .End
@@ -661,7 +661,7 @@
 	call ItemUseNoEffect
 .canceledItemUse
 	xor a
-	ld [wcd6a],a
+	ld [wActionResultOrTookBattleTurn],a ; item not used
 	pop af
 	ret
 
@@ -691,7 +691,7 @@
 .emptyParty
 	ld hl,.emptyPartyText
 	xor a
-	ld [wcd6a],a ; item use failed
+	ld [wActionResultOrTookBattleTurn],a ; item use failed
 	jp PrintText
 .emptyPartyText
 	text "You don't have"
@@ -706,7 +706,7 @@
 	ld a,[wWhichPokemon]
 	call AddNTimes
 	ld a,[wWhichPokemon]
-	ld [wcf06],a
+	ld [wUsedItemOnWhichPokemon],a
 	ld d,a
 	ld a,[wcf91]
 	ld e,a
@@ -803,7 +803,7 @@
 	push hl
 	push de
 	push bc
-	ld a,[wcf06]
+	ld a,[wUsedItemOnWhichPokemon]
 	ld c,a
 	ld hl,wPartyFoughtCurrentEnemyFlags
 	ld b,$02
@@ -811,7 +811,7 @@
 	ld a,c
 	and a
 	jr z,.next
-	ld a,[wcf06]
+	ld a,[wUsedItemOnWhichPokemon]
 	ld c,a
 	ld hl,wPartyGainExpFlags
 	ld b,$01
@@ -1106,7 +1106,7 @@
 	jr .done
 .canceledItemUse
 	xor a
-	ld [wcd6a],a ; item use failed
+	ld [wActionResultOrTookBattleTurn],a ; item use failed
 	pop af
 	pop af
 .done
@@ -1265,14 +1265,14 @@
 	ld [wWhichPokemon],a
 	ld a,e
 	ld [wd11e],a
-	xor a
-	ld [wcc49],a ; load from player's party
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation],a
 	call LoadMonData
 	ld d,$01
 	callab PrintStatsBox ; display new stats text box
 	call WaitForTextScrollButtonPress ; wait for button press
-	xor a
-	ld [wcc49],a
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation],a
 	predef LearnMoveFromLevelUp ; learn level up move, if any
 	xor a
 	ld [wForceEvolution],a
@@ -1384,7 +1384,7 @@
 	ld [W_SAFARIZONEENTRANCECURSCRIPT],a
 	inc a
 	ld [wEscapedFromBattle],a
-	ld [wcd6a],a ; item used
+	ld [wActionResultOrTookBattleTurn],a ; item used
 	ld a,[wd152]
 	and a ; using Dig?
 	ret nz ; if so, return
@@ -1550,7 +1550,7 @@
 	jr nz,.inBattle
 	call ItemUseNotTime
 	ld a,2
-	ld [wcd6a],a ; item not used
+	ld [wActionResultOrTookBattleTurn],a ; item not used
 	ret
 .inBattle
 	ld hl,W_PLAYERMOVENUM
@@ -1783,7 +1783,7 @@
 	call ReadSuperRodData
 	ld a, e
 RodResponse: ; e28d (3:628d)
-	ld [wWhichTrade], a
+	ld [wRodResponse], a
 
 	dec a ; is there a bite?
 	jr nz, .next
@@ -1801,7 +1801,7 @@
 	push af
 	push hl
 	ld [hl], 0
-	callba Func_707b6
+	callba FishingAnim
 	pop hl
 	pop af
 	ld [hl], a
@@ -1963,8 +1963,8 @@
 ; unsets zero flag if PP was restored, sets zero flag if not
 ; however, this is bugged for Max Ethers and Max Elixirs (see below)
 .restorePP
-	xor a
-	ld [wcc49],a ; party pokemon
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation],a
 	call GetMaxPP
 	ld hl,wPartyMon1Moves
 	ld bc,44
@@ -2043,7 +2043,7 @@
 	call GoPAL_SET_CF1C
 	pop af
 	xor a
-	ld [wcd6a],a ; item use failed
+	ld [wActionResultOrTookBattleTurn],a ; item use failed
 	ret
 
 RaisePPWhichTechniqueText: ; e45d (3:645d)
@@ -2104,7 +2104,7 @@
 	and a
 	jr z,.useMachine
 	ld a,2
-	ld [wcd6a],a ; item not used
+	ld [wActionResultOrTookBattleTurn],a ; item not used
 	ret
 .useMachine
 	ld a,[wWhichPokemon]
@@ -2234,7 +2234,7 @@
 
 ItemUseFailed: ; e5b9 (3:65b9)
 	xor a
-	ld [wcd6a],a ; item use failed
+	ld [wActionResultOrTookBattleTurn],a ; item use failed
 	jp PrintText
 
 ItemUseNotTimeText: ; e5c0 (3:65c0)
@@ -2301,13 +2301,13 @@
 	ld a,[wWhichPokemon]
 	call AddNTimes
 	push hl
-	ld de,wcd78 - 1
-	predef LoadMovePPs ; loads the normal max PP of each of the pokemon's moves to wcd78
+	ld de,wNormalMaxPPList - 1
+	predef LoadMovePPs ; loads the normal max PP of each of the pokemon's moves to wNormalMaxPPList
 	pop hl
 	ld c,21
 	ld b,0
 	add hl,bc ; hl now points to move 1 PP
-	ld de,wcd78
+	ld de,wNormalMaxPPList
 	ld b,0 ; initialize move counter to zero
 ; loop through the pokemon's moves
 .loop
@@ -2379,7 +2379,7 @@
 ; gets max PP of a pokemon's move (including PP from PP Ups)
 ; INPUT:
 ; [wWhichPokemon] = index of pokemon within party/box
-; [wcc49] = pokemon source
+; [wMonDataLocation] = pokemon source
 ; 00: player's party
 ; 01: enemy's party
 ; 02: current box
@@ -2389,7 +2389,7 @@
 ; OUTPUT:
 ; [wd11e] = max PP
 GetMaxPP: ; e677 (3:6677)
-	ld a,[wcc49]
+	ld a,[wMonDataLocation]
 	and a
 	ld hl,wPartyMon1Moves
 	ld bc,wPartyMon2 - wPartyMon1
@@ -2420,13 +2420,13 @@
 	ld de,wcd6d
 	ld a,BANK(Moves)
 	call FarCopyData
-	ld de,wcd72
+	ld de,wcd6d + 5 ; PP is byte 5 of move data
 	ld a,[de]
 	ld b,a ; b = normal max PP
 	pop hl
 	push bc
 	ld bc,21 ; PP offset if not player's in-battle pokemon data
-	ld a,[wcc49]
+	ld a,[wMonDataLocation]
 	cp a,4 ; player's in-battle pokemon?
 	jr nz,.addPPOffset
 	ld bc,17 ; PP offset if player's in-battle pokemon data
--- a/engine/learn_move.asm
+++ b/engine/learn_move.asm
@@ -134,18 +134,18 @@
 	res 2, a
 	ld [hFlags_0xFFF6], a
 	ld hl, wTopMenuItemY
-	ld a, $8
-	ld [hli], a
-	ld a, $5
-	ld [hli], a
+	ld a, 8
+	ld [hli], a ; wTopMenuItemY
+	ld a, 5
+	ld [hli], a ; wTopMenuItemX
 	xor a
-	ld [hli], a
+	ld [hli], a ; wCurrentMenuItem
 	inc hl
-	ld a, [wcd6c]
-	ld [hli], a
-	ld a, $3
-	ld [hli], a
-	ld [hl], $0
+	ld a, [wNumMovesMinusOne]
+	ld [hli], a ; wMaxMenuItem
+	ld a, A_BUTTON | B_BUTTON
+	ld [hli], a ; wMenuWatchedKeys
+	ld [hl], 0 ; wLastMenuItem
 	ld hl, hFlags_0xFFF6
 	set 1, [hl]
 	call HandleMenuInput
--- a/engine/menu/bills_pc.asm
+++ b/engine/menu/bills_pc.asm
@@ -1,44 +1,44 @@
-Func_213c8:: ; 213c8 (8:53c8)
+DisplayPCMainMenu:: ; 213c8 (8:53c8)
 	xor a
 	ld [H_AUTOBGTRANSFERENABLED], a
 	call SaveScreenTilesToBuffer2
-	ld a, [wd5a2]
+	ld a, [wNumHoFTeams]
 	and a
-	jr nz, .asm_213f3
+	jr nz, .leaguePCAvailable
 	ld a, [wd74b]
-	bit 5, a
-	jr z, .asm_213ea
-	ld a, [wd5a2]
+	bit 5, a ; received pokedex?
+	jr z, .noOaksPC
+	ld a, [wNumHoFTeams]
 	and a
-	jr nz, .asm_213f3
+	jr nz, .leaguePCAvailable
 	hlCoord 0, 0
-	ld b, $8
-	ld c, $e
-	jr .asm_213fa
-.asm_213ea
+	ld b, 8
+	ld c, 14
+	jr .next
+.noOaksPC
 	hlCoord 0, 0
-	ld b, $6
-	ld c, $e
-	jr .asm_213fa
-.asm_213f3
+	ld b, 6
+	ld c, 14
+	jr .next
+.leaguePCAvailable
 	hlCoord 0, 0
-	ld b, $a
-	ld c, $e
-.asm_213fa
+	ld b, 10
+	ld c, 14
+.next
 	call TextBoxBorder
 	call UpdateSprites
-	ld a, $3
+	ld a, 3
 	ld [wMaxMenuItem], a
 	ld a, [wd7f1]
 	bit 0, a
-	jr nz, .asm_21414
+	jr nz, .metBill
 	hlCoord 2, 2
 	ld de, SomeonesPCText
-	jr .asm_2141a
-.asm_21414
+	jr .next2
+.metBill
 	hlCoord 2, 2
 	ld de, BillsPCText
-.asm_2141a
+.next2
 	call PlaceString
 	hlCoord 2, 4
 	ld de, wPlayerName
@@ -48,15 +48,15 @@
 	ld de, PlayersPCText
 	call PlaceString
 	ld a, [wd74b]
-	bit 5, a
-	jr z, .asm_21462
+	bit 5, a ; received pokedex?
+	jr z, .noOaksPC2
 	hlCoord 2, 6
 	ld de, OaksPCText
 	call PlaceString
-	ld a, [wd5a2]
+	ld a, [wNumHoFTeams]
 	and a
-	jr z, .asm_2145a
-	ld a, $4
+	jr z, .noLeaguePC
+	ld a, 4
 	ld [wMaxMenuItem], a
 	hlCoord 2, 8
 	ld de, PKMNLeaguePCText
@@ -63,28 +63,28 @@
 	call PlaceString
 	hlCoord 2, 10
 	ld de, LogOffPCText
-	jr .asm_2146d
-.asm_2145a
+	jr .next3
+.noLeaguePC
 	hlCoord 2, 8
 	ld de, LogOffPCText
-	jr .asm_2146d
-.asm_21462
+	jr .next3
+.noOaksPC2
 	ld a, $2
 	ld [wMaxMenuItem], a
 	hlCoord 2, 6
 	ld de, LogOffPCText
-.asm_2146d
+.next3
 	call PlaceString
-	ld a, $3
+	ld a, A_BUTTON | B_BUTTON
 	ld [wMenuWatchedKeys], a
-	ld a, $2
+	ld a, 2
 	ld [wTopMenuItemY], a
-	ld a, $1
+	ld a, 1
 	ld [wTopMenuItemX], a
 	xor a
 	ld [wCurrentMenuItem], a
 	ld [wLastMenuItem], a
-	ld a, $1
+	ld a, 1
 	ld [H_AUTOBGTRANSFERENABLED], a
 	ret
 
@@ -99,7 +99,7 @@
 	ld hl, wd730
 	set 6, [hl]
 	xor a
-	ld [wccd3], a
+	ld [wParentMenuItem], a
 	inc a               ; MONSTER_NAME
 	ld [wNameListType], a
 	call LoadHpBarAndStatusTilePatterns
@@ -106,16 +106,16 @@
 	ld a, [wListScrollOffset]
 	push af
 	ld a, [wFlags_0xcd60]
-	bit 3, a
+	bit 3, a ; accessing Bill's PC through another PC?
 	jr nz, BillsPCMenu
+; accessing it directly
 	ld a, $99
 	call PlaySound
 	ld hl, SwitchOnText
 	call PrintText
 
-Func_214e8: ; 214e8 (8:54e8)
-BillsPCMenu:
-	ld a, [wccd3]
+BillsPCMenu: ; 214e8 (8:54e8)
+	ld a, [wParentMenuItem]
 	ld [wCurrentMenuItem], a
 	ld hl, vChars2 + $780
 	ld de, PokeballTileGraphics
@@ -123,79 +123,81 @@
 	call CopyVideoData
 	call LoadScreenTilesFromBuffer2DisableBGTransfer
 	hlCoord 0, 0
-	ld b, $a
-	ld c, $c
+	ld b, 10
+	ld c, 12
 	call TextBoxBorder
 	hlCoord 2, 2
 	ld de, BillsPCMenuText
 	call PlaceString
 	ld hl, wTopMenuItemY
-	ld a, $2
-	ld [hli], a
+	ld a, 2
+	ld [hli], a ; wTopMenuItemY
 	dec a
-	ld [hli], a
+	ld [hli], a ; wTopMenuItemX
 	inc hl
 	inc hl
-	ld a, $4
-	ld [hli], a
-	ld a, $3
-	ld [hli], a
+	ld a, 4
+	ld [hli], a ; wMaxMenuItem
+	ld a, A_BUTTON | B_BUTTON
+	ld [hli], a ; wMenuWatchedKeys
 	xor a
-	ld [hli], a
-	ld [hli], a
+	ld [hli], a ; wLastMenuItem
+	ld [hli], a ; wPartyAndBillsPCSavedMenuItem
 	ld hl, wListScrollOffset
-	ld [hli], a
-	ld [hl], a
+	ld [hli], a ; wListScrollOffset
+	ld [hl], a ; wMenuWatchMovingOutOfBounds
 	ld [wPlayerMonNumber], a
 	ld hl, WhatText
 	call PrintText
 	hlCoord 9, 14
-	ld b, $2
-	ld c, $9
+	ld b, 2
+	ld c, 9
 	call TextBoxBorder
-	ld a, [wd5a0]
+	ld a, [wCurrentBoxNum]
 	and $7f
 	cp 9
-	jr c, .asm_2154f
+	jr c, .singleDigitBoxNum
+; two digit box num
 	sub 9
 	hlCoord 17, 16
 	ld [hl], "1"
 	add "0"
-	jr .asm_21551
-.asm_2154f
+	jr .next
+.singleDigitBoxNum
 	add "1"
-.asm_21551
+.next
 	Coorda 18, 16
 	hlCoord 10, 16
 	ld de, BoxNoPCText
 	call PlaceString
-	ld a, $1
+	ld a, 1
 	ld [H_AUTOBGTRANSFERENABLED], a
 	call Delay3
 	call HandleMenuInput
 	bit 1, a
-	jp nz, Func_21588 ; b button
+	jp nz, ExitBillsPC ; b button
 	call PlaceUnfilledArrowMenuCursor
 	ld a, [wCurrentMenuItem]
-	ld [wccd3], a
+	ld [wParentMenuItem], a
 	and a
-	jp z, Func_21618 ; withdraw
+	jp z, BillsPCWithdraw ; withdraw
 	cp $1
-	jp z, Func_215ac ; deposit
+	jp z, BillsPCDeposit ; deposit
 	cp $2
-	jp z, Func_21673 ; release
+	jp z, BillsPCRelease ; release
 	cp $3
-	jp z, Func_216b3 ; change box
+	jp z, BillsPCChangeBox ; change box
 
-Func_21588: ; 21588 (8:5588)
+ExitBillsPC: ; 21588 (8:5588)
 	ld a, [wFlags_0xcd60]
-	bit 3, a
-	jr nz, .asm_2159a
+	bit 3, a ; accessing Bill's PC through another PC?
+	jr nz, .next
+; accessing it directly
 	call LoadTextBoxTilePatterns
 	ld a, $9a
 	call PlaySound
 	call WaitForSoundToFinish
-.asm_2159a
+.next
 	ld hl, wFlags_0xcd60
 	res 5, [hl]
 	call LoadScreenTilesFromBuffer2
@@ -205,26 +207,25 @@
 	res 6, [hl]
 	ret
 
-Func_215ac: ; 215ac (8:55ac)
-BillsPCDeposit:
+BillsPCDeposit: ; 215ac (8:55ac)
 	ld a, [wPartyCount]
 	dec a
-	jr nz, .asm_215bb
+	jr nz, .partyLargeEnough
 	ld hl, CantDepositLastMonText
 	call PrintText
 	jp BillsPCMenu
-.asm_215bb
+.partyLargeEnough
 	ld a, [W_NUMINBOX]
 	cp MONS_PER_BOX
-	jr nz, .asm_215cb
+	jr nz, .boxNotFull
 	ld hl, BoxFullText
 	call PrintText
 	jp BillsPCMenu
-.asm_215cb
+.boxNotFull
 	ld hl, wPartyCount
-	call Func_216be
+	call DisplayMonListMenu
 	jp c, BillsPCMenu
-	call Func_2174b
+	call DisplayDepositWithdrawMenu
 	jp nc, BillsPCMenu
 	ld a, [wcf91]
 	call GetCryData
@@ -236,19 +237,19 @@
 	ld [wRemoveMonFromBox], a
 	call RemovePokemon
 	call WaitForSoundToFinish
-	ld hl, wWhichTrade
-	ld a, [wd5a0]
+	ld hl, wBoxNumString
+	ld a, [wCurrentBoxNum]
 	and $7f
 	cp 9
-	jr c, .asm_2160a
+	jr c, .singleDigitBoxNum
 	sub 9
 	ld [hl], "1"
 	inc hl
 	add "0"
-	jr .asm_2160c
-.asm_2160a
+	jr .next
+.singleDigitBoxNum
 	add "1"
-.asm_2160c
+.next
 	ld [hli], a
 	ld [hl], $50
 	ld hl, MonWasStoredText
@@ -255,26 +256,26 @@
 	call PrintText
 	jp BillsPCMenu
 
-Func_21618: ; 21618 (8:5618)
+BillsPCWithdraw: ; 21618 (8:5618)
 	ld a, [W_NUMINBOX]
 	and a
-	jr nz, .asm_21627
+	jr nz, .boxNotEmpty
 	ld hl, NoMonText
 	call PrintText
-	jp Func_214e8
-.asm_21627
+	jp BillsPCMenu
+.boxNotEmpty
 	ld a, [wPartyCount]
 	cp PARTY_LENGTH
-	jr nz, .asm_21637
+	jr nz, .partyNotFull
 	ld hl, CantTakeMonText
 	call PrintText
-	jp Func_214e8
-.asm_21637
+	jp BillsPCMenu
+.partyNotFull
 	ld hl, W_NUMINBOX
-	call Func_216be
-	jp c, Func_214e8
-	call Func_2174b
-	jp nc, Func_214e8
+	call DisplayMonListMenu
+	jp c, BillsPCMenu
+	call DisplayDepositWithdrawMenu
+	jp nc, BillsPCMenu
 	ld a, [wWhichPokemon]
 	ld hl, wBoxMonNicks
 	call GetPartyMonName
@@ -290,25 +291,25 @@
 	call WaitForSoundToFinish
 	ld hl, MonIsTakenOutText
 	call PrintText
-	jp Func_214e8
+	jp BillsPCMenu
 
-Func_21673: ; 21673 (8:5673)
+BillsPCRelease: ; 21673 (8:5673)
 	ld a, [W_NUMINBOX]
 	and a
-	jr nz, .asm_21682
+	jr nz, .loop
 	ld hl, NoMonText
 	call PrintText
-	jp Func_214e8
-.asm_21682
+	jp BillsPCMenu
+.loop
 	ld hl, W_NUMINBOX
-	call Func_216be
-	jp c, Func_214e8
+	call DisplayMonListMenu
+	jp c, BillsPCMenu
 	ld hl, OnceReleasedText
 	call PrintText
 	call YesNoChoice
 	ld a, [wCurrentMenuItem]
 	and a
-	jr nz, .asm_21682
+	jr nz, .loop
 	inc a
 	ld [wRemoveMonFromBox], a
 	call RemovePokemon
@@ -317,27 +318,27 @@
 	call PlayCry
 	ld hl, MonWasReleasedText
 	call PrintText
-	jp Func_214e8
+	jp BillsPCMenu
 
-Func_216b3: ; 216b3 (8:56b3)
+BillsPCChangeBox: ; 216b3 (8:56b3)
 	callba ChangeBox
-	jp Func_214e8
+	jp BillsPCMenu
 
-Func_216be: ; 216be (8:56be)
+DisplayMonListMenu: ; 216be (8:56be)
 	ld a, l
-	ld [wList], a
+	ld [wListPointer], a
 	ld a, h
-	ld [wList + 1], a
+	ld [wListPointer + 1], a
 	xor a
 	ld [wPrintItemPrices], a
 	ld [wListMenuID], a
 	inc a                ; MONSTER_NAME
 	ld [wNameListType], a
-	ld a, [wcc2b]
+	ld a, [wPartyAndBillsPCSavedMenuItem]
 	ld [wCurrentMenuItem], a
 	call DisplayListMenuID
 	ld a, [wCurrentMenuItem]
-	ld [wcc2b], a
+	ld [wPartyAndBillsPCSavedMenuItem], a
 	ret
 
 BillsPCMenuText: ; 216e1 (8:56e1)
@@ -354,17 +355,19 @@
 BoxNoPCText: ; 21713 (8:5713)
 	db "BOX No.@"
 
-Func_2171b:: ; 2171b (8:571b)
+KnowsHMMove:: ; 2171b (8:571b)
+; returns whether mon with party index [wWhichPokemon] knows an HM move
 	ld hl, wPartyMon1Moves
 	ld bc, wPartyMon2 - wPartyMon1
-	jr .asm_21729
+	jr .next
+; unreachable
 	ld hl, wBoxMon1Moves
 	ld bc, wBoxMon2 - wBoxMon1
-.asm_21729
+.next
 	ld a, [wWhichPokemon]
 	call AddNTimes
 	ld b, NUM_MOVES
-.asm_21731
+.loop
 	ld a, [hli]
 	push hl
 	push bc
@@ -375,7 +378,7 @@
 	pop hl
 	ret c
 	dec b
-	jr nz, .asm_21731
+	jr nz, .loop
 	and a
 	ret
 
@@ -387,17 +390,17 @@
 	db FLASH
 	db -1
 
-Func_2174b: ; 2174b (8:574b)
+DisplayDepositWithdrawMenu: ; 2174b (8:574b)
 	hlCoord 9, 10
-	ld b, $6
-	ld c, $9
+	ld b, 6
+	ld c, 9
 	call TextBoxBorder
-	ld a, [wccd3]
-	and a
+	ld a, [wParentMenuItem]
+	and a ; was the Deposit or Withdraw item selected in the parent menu?
 	ld de, DepositPCText
-	jr nz, .asm_21761
+	jr nz, .next
 	ld de, WithdrawPCText
-.asm_21761
+.next
 	hlCoord 11, 12
 	call PlaceString
 	hlCoord 11, 14
@@ -404,48 +407,48 @@
 	ld de, StatsCancelPCText
 	call PlaceString
 	ld hl, wTopMenuItemY
-	ld a, $c
-	ld [hli], a
-	ld a, $a
-	ld [hli], a
+	ld a, 12
+	ld [hli], a ; wTopMenuItemY
+	ld a, 10
+	ld [hli], a ; wTopMenuItemX
 	xor a
-	ld [hli], a
+	ld [hli], a ; wCurrentMenuItem
 	inc hl
-	ld a, $2
-	ld [hli], a
-	ld a, $3
-	ld [hli], a
+	ld a, 2
+	ld [hli], a ; wMaxMenuItem
+	ld a, A_BUTTON | B_BUTTON
+	ld [hli], a ; wMenuWatchedKeys
 	xor a
-	ld [hl], a
+	ld [hl], a ; wLastMenuItem
 	ld hl, wListScrollOffset
-	ld [hli], a
-	ld [hl], a
+	ld [hli], a ; wListScrollOffset
+	ld [hl], a ; wMenuWatchMovingOutOfBounds
 	ld [wPlayerMonNumber], a
-	ld [wcc2b], a
-.asm_2178f
+	ld [wPartyAndBillsPCSavedMenuItem], a
+.loop
 	call HandleMenuInput
-	bit 1, a
-	jr nz, .asm_2179f
+	bit 1, a ; pressed B?
+	jr nz, .exit
 	ld a, [wCurrentMenuItem]
 	and a
-	jr z, .asm_217a1
+	jr z, .choseDepositWithdraw
 	dec a
-	jr z, .asm_217a3
-.asm_2179f
+	jr z, .viewStats
+.exit
 	and a
 	ret
-.asm_217a1
+.choseDepositWithdraw
 	scf
 	ret
-.asm_217a3
+.viewStats
 	call SaveScreenTilesToBuffer1
-	ld a, [wccd3]
+	ld a, [wParentMenuItem]
 	and a
-	ld a, $0
-	jr nz, .asm_217b0
-	ld a, $2
-.asm_217b0
-	ld [wcc49], a
+	ld a, PLAYER_PARTY_DATA
+	jr nz, .next2
+	ld a, BOX_DATA
+.next2
+	ld [wMonDataLocation], a
 	predef StatusScreen
 	predef StatusScreen2
 	call LoadScreenTilesFromBuffer1
@@ -452,7 +455,7 @@
 	call ReloadTilesetTilePatterns
 	call GoPAL_SET_CF1C
 	call LoadGBPal
-	jr .asm_2178f
+	jr .loop
 
 DepositPCText:  db "DEPOSIT@"
 WithdrawPCText: db "WITHDRAW@"
@@ -518,9 +521,9 @@
 	ld a, [W_CURMAP]
 	cp TRADE_CENTER
 	ld a, LINK_STATE_START_TRADE
-	jr z, .asm_2183a
+	jr z, .next
 	inc a ; LINK_STATE_START_BATTLE
-.asm_2183a
+.next
 	ld [wLinkState], a
 	call EnableAutoTextBoxDrawing
 	tx_pre_jump JustAMomentText
@@ -535,9 +538,9 @@
 	ld a, [W_CURMAP]
 	cp TRADE_CENTER
 	ld a, LINK_STATE_START_TRADE
-	jr z, .asm_2185a
+	jr z, .next
 	inc a ; LINK_STATE_START_BATTLE
-.asm_2185a
+.next
 	ld [wLinkState], a
 	call EnableAutoTextBoxDrawing
 	tx_pre_jump JustAMomentText
--- a/engine/menu/league_pc.asm
+++ b/engine/menu/league_pc.asm
@@ -13,30 +13,32 @@
 	ld [W_SPRITEFLIPPED], a
 	ld [wUpdateSpritesEnabled], a
 	ld [wTrainerScreenX], a
-	ld [wcd42], a
-	ld a, [wd5a2]
+	ld [wHoFTeamNo], a
+	ld a, [wNumHoFTeams]
 	ld b, a
-	cp NUM_HOF_TEAMS + 1
-	jr c, .first
-	ld b, NUM_HOF_TEAMS
+	cp HOF_TEAM_CAPACITY + 1
+	jr c, .loop
+; If the total number of hall of fame teams is greater than the storage
+; capacity, then calculate the number of the first team that is still recorded.
+	ld b, HOF_TEAM_CAPACITY
 	sub b
-	ld [wcd42], a
-.first
-	ld hl, wcd42
+	ld [wHoFTeamNo], a
+.loop
+	ld hl, wHoFTeamNo
 	inc [hl]
 	push bc
 	ld a, [wTrainerScreenX]
-	ld [wWhichTrade], a
+	ld [wHoFMonSpecies], a
 	callba LoadHallOfFameTeams
-	call Func_765e5
+	call LeaguePCShowTeam
 	pop bc
-	jr c, .second
+	jr c, .doneShowingTeams
 	ld hl, wTrainerScreenX
 	inc [hl]
 	ld a, [hl]
 	cp b
-	jr nz, .first
-.second
+	jr nz, .loop
+.doneShowingTeams
 	pop af
 	ld [hTilesetType], a
 	pop af
@@ -48,11 +50,11 @@
 	call GoPAL_SET_CF1C
 	jp GBPalNormal
 
-Func_765e5: ; 765e5 (1d:65e5)
+LeaguePCShowTeam: ; 765e5 (1d:65e5)
 	ld c, PARTY_LENGTH
 .loop
 	push bc
-	call Func_76610
+	call LeaguePCShowMon
 	call WaitForTextScrollButtonPress
 	ld a, [hJoyHeld]
 	bit 1, a
@@ -75,18 +77,18 @@
 	scf
 	ret
 
-Func_76610: ; 76610 (1d:6610)
+LeaguePCShowMon: ; 76610 (1d:6610)
 	call GBPalWhiteOutWithDelay3
 	call ClearScreen
 	ld hl, wHallOfFame
 	ld a, [hli]
-	ld [wWhichTrade], a
+	ld [wHoFMonSpecies], a
 	ld [wcf91], a
 	ld [wd0b5], a
 	ld [wBattleMonSpecies2], a
 	ld [wcf1d], a
 	ld a, [hli]
-	ld [wTrainerFacingDirection], a
+	ld [wHoFMonLevel], a
 	ld de, wcd6d
 	ld bc, $000B
 	call CopyData
@@ -105,11 +107,11 @@
 	ld de, HallOfFameNoText
 	call PlaceString
 	hlCoord 16, 15
-	ld de, wcd42
+	ld de, wHoFTeamNo
 	ld bc, $0103
 	call PrintNumber
-	ld b, BANK(Func_702f0)
-	ld hl, Func_702f0
+	ld b, BANK(HoFDisplayMonInfo)
+	ld hl, HoFDisplayMonInfo
 	jp Bankswitch
 
 HallOfFameNoText: ; 76670 (1d:6670)
--- a/engine/menu/main_menu.asm
+++ b/engine/menu/main_menu.asm
@@ -16,7 +16,7 @@
 	call DelayFrames
 	xor a ; LINK_STATE_NONE
 	ld [wLinkState],a
-	ld hl,wcc2b
+	ld hl,wPartyAndBillsPCSavedMenuItem
 	ld [hli],a
 	ld [hli],a
 	ld [hli],a
@@ -109,7 +109,7 @@
 	ld [wd52a],a
 	ld c,10
 	call DelayFrames
-	ld a,[wd5a2]
+	ld a,[wNumHoFTeams]
 	and a
 	jp z,SpecialEnterMap
 	ld a,[W_CURMAP] ; map ID
@@ -124,7 +124,7 @@
 
 Func_5bff: ; 5bff (1:5bff)
 	ld a,1
-	ld [wd358],a
+	ld [wLetterPrintingDelayFlags],a
 	ld a,3
 	ld [W_OPTIONS],a
 	ret
@@ -131,7 +131,7 @@
 
 LinkMenu: ; 5c0a (1:5c0a)
 	xor a
-	ld [wd358], a
+	ld [wLetterPrintingDelayFlags], a
 	ld hl, wd72e
 	set 6, [hl]
 	ld hl, TextTerminator_6b20
@@ -452,12 +452,12 @@
 	ld [wCurrentMenuItem],a
 	ld [wLastMenuItem],a
 	inc a
-	ld [wd358],a
+	ld [wLetterPrintingDelayFlags],a
 	ld [wTrainerScreenY],a
 	ld a,3 ; text speed cursor Y coordinate
 	ld [wTopMenuItemY],a
 	call SetCursorPositionsFromOptions
-	ld a,[wWhichTrade] ; text speed cursor X coordinate
+	ld a,[wOptionsTextSpeedCursorX] ; text speed cursor X coordinate
 	ld [wTopMenuItemX],a
 	ld a,$01
 	ld [H_AUTOBGTRANSFERENABLED],a ; enable auto background transfer
@@ -507,7 +507,7 @@
 .downPressed
 	cp a,16
 	ld b,-13
-	ld hl,wWhichTrade
+	ld hl,wOptionsTextSpeedCursorX
 	jr z,.updateMenuVariables
 	ld b,5
 	cp a,3
@@ -522,7 +522,7 @@
 .upPressed
 	cp a,8
 	ld b,-5
-	ld hl,wWhichTrade
+	ld hl,wOptionsTextSpeedCursorX
 	jr z,.updateMenuVariables
 	cp a,13
 	inc hl
@@ -541,17 +541,17 @@
 	call PlaceUnfilledArrowMenuCursor
 	jp .loop
 .cursorInBattleAnimation
-	ld a,[wTrainerEngageDistance] ; battle animation cursor X coordinate
+	ld a,[wOptionsBattleAnimCursorX] ; battle animation cursor X coordinate
 	xor a,$0b ; toggle between 1 and 10
-	ld [wTrainerEngageDistance],a
+	ld [wOptionsBattleAnimCursorX],a
 	jp .eraseOldMenuCursor
 .cursorInBattleStyle
-	ld a,[wTrainerFacingDirection] ; battle style cursor X coordinate
+	ld a,[wOptionsBattleStyleCursorX] ; battle style cursor X coordinate
 	xor a,$0b ; toggle between 1 and 10
-	ld [wTrainerFacingDirection],a
+	ld [wOptionsBattleStyleCursorX],a
 	jp .eraseOldMenuCursor
 .pressedLeftInTextSpeed
-	ld a,[wWhichTrade] ; text speed cursor X coordinate
+	ld a,[wOptionsTextSpeedCursorX] ; text speed cursor X coordinate
 	cp a,1
 	jr z,.updateTextSpeedXCoord
 	cp a,7
@@ -562,7 +562,7 @@
 	sub a,7
 	jr .updateTextSpeedXCoord
 .pressedRightInTextSpeed
-	ld a,[wWhichTrade] ; text speed cursor X coordinate
+	ld a,[wOptionsTextSpeedCursorX] ; text speed cursor X coordinate
 	cp a,14
 	jr z,.updateTextSpeedXCoord
 	cp a,7
@@ -572,7 +572,7 @@
 .fromFastToMedium
 	add a,6
 .updateTextSpeedXCoord
-	ld [wWhichTrade],a ; text speed cursor X coordinate
+	ld [wOptionsTextSpeedCursorX],a ; text speed cursor X coordinate
 	jp .eraseOldMenuCursor
 
 TextSpeedOptionText: ; 5fc0 (1:5fc0)
@@ -593,7 +593,7 @@
 ; sets the options variable according to the current placement of the menu cursors in the options menu
 SetOptionsFromCursorPositions: ; 601f (1:601f)
 	ld hl,TextSpeedOptionData
-	ld a,[wWhichTrade] ; text speed cursor X coordinate
+	ld a,[wOptionsTextSpeedCursorX] ; text speed cursor X coordinate
 	ld c,a
 .loop
 	ld a,[hli]
@@ -604,7 +604,7 @@
 .textSpeedMatchFound
 	ld a,[hl]
 	ld d,a
-	ld a,[wTrainerEngageDistance] ; battle animation cursor X coordinate
+	ld a,[wOptionsBattleAnimCursorX] ; battle animation cursor X coordinate
 	dec a
 	jr z,.battleAnimationOn
 .battleAnimationOff
@@ -613,7 +613,7 @@
 .battleAnimationOn
 	res 7,d
 .checkBattleStyle
-	ld a,[wTrainerFacingDirection] ; battle style cursor X coordinate
+	ld a,[wOptionsBattleStyleCursorX] ; battle style cursor X coordinate
 	dec a
 	jr z,.battleStyleShift
 .battleStyleSet
@@ -638,7 +638,7 @@
 	pop bc
 	dec hl
 	ld a,[hl]
-	ld [wWhichTrade],a ; text speed cursor X coordinate
+	ld [wOptionsTextSpeedCursorX],a ; text speed cursor X coordinate
 	hlCoord 0, 3
 	call .placeUnfilledRightArrow
 	sla c
@@ -646,7 +646,7 @@
 	jr nc,.storeBattleAnimationCursorX
 	ld a,10 ; Off
 .storeBattleAnimationCursorX
-	ld [wTrainerEngageDistance],a ; battle animation cursor X coordinate
+	ld [wOptionsBattleAnimCursorX],a ; battle animation cursor X coordinate
 	hlCoord 0, 8
 	call .placeUnfilledRightArrow
 	sla c
@@ -654,7 +654,7 @@
 	jr nc,.storeBattleStyleCursorX
 	ld a,10
 .storeBattleStyleCursorX
-	ld [wTrainerFacingDirection],a ; battle style cursor X coordinate
+	ld [wOptionsBattleStyleCursorX],a ; battle style cursor X coordinate
 	hlCoord 0, 13
 	call .placeUnfilledRightArrow
 ; cursor in front of Cancel
--- a/engine/menu/party_menu.asm
+++ b/engine/menu/party_menu.asm
@@ -227,7 +227,7 @@
 	ld h,[hl]
 	ld l,a
 	push hl
-	ld a,[wcf06]
+	ld a,[wUsedItemOnWhichPokemon]
 	ld hl,wPartyMonNicks
 	call GetPartyMonName
 	pop hl
--- a/engine/menu/pc.asm
+++ b/engine/menu/pc.asm
@@ -10,7 +10,7 @@
 	call LoadScreenTilesFromBuffer2
 	call Delay3
 PCMainMenu: ; 17e48 (5:7e48)
-	callba Func_213c8
+	callba DisplayPCMainMenu
 	ld hl, wFlags_0xcd60
 	set 5, [hl]
 	call HandleMenuInput
--- a/engine/menu/players_pc.asm
+++ b/engine/menu/players_pc.asm
@@ -5,18 +5,19 @@
 	ld [wNameListType], a
 	call SaveScreenTilesToBuffer1
 	xor a
-	ld [wcc2c], a
-	ld [wccd3], a
+	ld [wBagSavedMenuItem], a
+	ld [wParentMenuItem], a
 	ld a, [wFlags_0xcd60]
-	bit 3, a
-	jr nz, Func_790c
+	bit 3, a ; accessing player's PC through another PC?
+	jr nz, PlayerPCMenu
+; accessing it directly
 	ld a, (SFX_02_45 - SFX_Headers_02) / 3
 	call PlaySound
 	ld hl, TurnedOnPC2Text
 	call PrintText
 
-Func_790c: ; 790c (1:790c)
-	ld a, [wccd3]
+PlayerPCMenu: ; 790c (1:790c)
+	ld a, [wParentMenuItem]
 	ld [wCurrentMenuItem], a
 	ld hl, wFlags_0xcd60
 	set 5, [hl]
@@ -30,51 +31,52 @@
 	ld de, PlayersPCMenuEntries
 	call PlaceString
 	ld hl, wTopMenuItemY
-	ld a, $2
-	ld [hli], a
+	ld a, 2
+	ld [hli], a ; wTopMenuItemY
 	dec a
-	ld [hli], a
+	ld [hli], a ; wTopMenuItemX
 	inc hl
 	inc hl
-	ld a, $3
-	ld [hli], a
-	ld a, $3
-	ld [hli], a
+	ld a, 3
+	ld [hli], a ; wMaxMenuItem
+	ld a, A_BUTTON | B_BUTTON
+	ld [hli], a ; wMenuWatchedKeys
 	xor a
 	ld [hl], a
 	ld hl, wListScrollOffset
-	ld [hli], a
-	ld [hl], a
+	ld [hli], a ; wListScrollOffset
+	ld [hl], a ; wMenuWatchMovingOutOfBounds
 	ld [wPlayerMonNumber], a
 	ld hl, WhatDoYouWantText
 	call PrintText
 	call HandleMenuInput
 	bit 1, a
-	jp nz, Func_796d
+	jp nz, ExitPlayerPC
 	call PlaceUnfilledArrowMenuCursor
 	ld a, [wCurrentMenuItem]
-	ld [wccd3], a
+	ld [wParentMenuItem], a
 	and a
-	jp z, Func_7a12
+	jp z, PlayerPCWithdraw
 	dec a
-	jp z, Func_7995
+	jp z, PlayerPCDeposit
 	dec a
-	jp z, Func_7a8f
+	jp z, PlayerPCToss
 
-Func_796d: ; 796d (1:796d)
+ExitPlayerPC: ; 796d (1:796d)
 	ld a, [wFlags_0xcd60]
-	bit 3, a
-	jr nz, .asm_797c
+	bit 3, a ; accessing player's PC through another PC?
+	jr nz, .next
+; accessing it directly
 	ld a, (SFX_02_46 - SFX_Headers_02) / 3
 	call PlaySound
 	call WaitForSoundToFinish
-.asm_797c
+.next
 	ld hl, wFlags_0xcd60
 	res 5, [hl]
 	call LoadScreenTilesFromBuffer2
 	xor a
 	ld [wListScrollOffset], a
-	ld [wcc2c], a
+	ld [wBagSavedMenuItem], a
 	ld hl, wd730
 	res 6, [hl]
 	xor a
@@ -81,50 +83,50 @@
 	ld [wDoNotWaitForButtonPressAfterDisplayingText], a
 	ret
 
-Func_7995: ; 7995 (1:7995)
+PlayerPCDeposit: ; 7995 (1:7995)
 	xor a
 	ld [wCurrentMenuItem], a
 	ld [wListScrollOffset], a
 	ld a, [wNumBagItems]
 	and a
-	jr nz, Func_79ab
+	jr nz, .loop
 	ld hl, NothingToDepositText
 	call PrintText
-	jp Func_790c
-
-Func_79ab: ; 79ab (1:79ab)
+	jp PlayerPCMenu
+.loop
 	ld hl, WhatToDepositText
 	call PrintText
 	ld hl, wNumBagItems
 	ld a, l
-	ld [wList], a
+	ld [wListPointer], a
 	ld a, h
-	ld [wList + 1], a
+	ld [wListPointer + 1], a
 	xor a
 	ld [wPrintItemPrices], a
-	ld a, $3
+	ld a, ITEMLISTMENU
 	ld [wListMenuID], a
 	call DisplayListMenuID
-	jp c, Func_790c
+	jp c, PlayerPCMenu
 	call IsKeyItem
-	ld a, $1
+	ld a, 1
 	ld [wItemQuantity], a
 	ld a, [wIsKeyItem]
 	and a
-	jr nz, .asm_79e7
+	jr nz, .next
+; if it's not a key item, there can be more than one of the item
 	ld hl, DepositHowManyText
 	call PrintText
 	call DisplayChooseQuantityMenu
 	cp $ff
-	jp z, Func_79ab
-.asm_79e7
+	jp z, .loop
+.next
 	ld hl, wNumBoxItems
 	call AddItemToInventory
-	jr c, .asm_79f8
+	jr c, .roomAvailable
 	ld hl, NoRoomToStoreText
 	call PrintText
-	jp Func_79ab
-.asm_79f8
+	jp .loop
+.roomAvailable
 	ld hl, wNumBagItems
 	call RemoveItemFromInventory
 	call WaitForSoundToFinish
@@ -133,52 +135,52 @@
 	call WaitForSoundToFinish
 	ld hl, ItemWasStoredText
 	call PrintText
-	jp Func_79ab
+	jp .loop
 
-Func_7a12: ; 7a12 (1:7a12)
+PlayerPCWithdraw: ; 7a12 (1:7a12)
 	xor a
 	ld [wCurrentMenuItem], a
 	ld [wListScrollOffset], a
 	ld a, [wNumBoxItems]
 	and a
-	jr nz, Func_7a28
+	jr nz, .loop
 	ld hl, NothingStoredText
 	call PrintText
-	jp Func_790c
-
-Func_7a28: ; 7a28 (1:7a28)
+	jp PlayerPCMenu
+.loop
 	ld hl, WhatToWithdrawText
 	call PrintText
 	ld hl, wNumBoxItems
 	ld a, l
-	ld [wList], a
+	ld [wListPointer], a
 	ld a, h
-	ld [wList + 1], a
+	ld [wListPointer + 1], a
 	xor a
 	ld [wPrintItemPrices], a
-	ld a, $3
+	ld a, ITEMLISTMENU
 	ld [wListMenuID], a
 	call DisplayListMenuID
-	jp c, Func_790c
+	jp c, PlayerPCMenu
 	call IsKeyItem
-	ld a, $1
+	ld a, 1
 	ld [wItemQuantity], a
 	ld a, [wIsKeyItem]
 	and a
-	jr nz, .asm_7a64
+	jr nz, .next
+; if it's not a key item, there can be more than one of the item
 	ld hl, WithdrawHowManyText
 	call PrintText
 	call DisplayChooseQuantityMenu
 	cp $ff
-	jp z, Func_7a28
-.asm_7a64
+	jp z, .loop
+.next
 	ld hl, wNumBagItems
 	call AddItemToInventory
-	jr c, .asm_7a75
+	jr c, .roomAvailable
 	ld hl, CantCarryMoreText
 	call PrintText
-	jp Func_7a28
-.asm_7a75
+	jp .loop
+.roomAvailable
 	ld hl, wNumBoxItems
 	call RemoveItemFromInventory
 	call WaitForSoundToFinish
@@ -187,46 +189,46 @@
 	call WaitForSoundToFinish
 	ld hl, WithdrewItemText
 	call PrintText
-	jp Func_7a28
+	jp .loop
 
-Func_7a8f: ; 7a8f (1:7a8f)
+PlayerPCToss: ; 7a8f (1:7a8f)
 	xor a
 	ld [wCurrentMenuItem], a
 	ld [wListScrollOffset], a
 	ld a, [wNumBoxItems]
 	and a
-	jr nz, Func_7aa5
+	jr nz, .loop
 	ld hl, NothingStoredText
 	call PrintText
-	jp Func_790c
-
-Func_7aa5: ; 7aa5 (1:7aa5)
+	jp PlayerPCMenu
+.loop
 	ld hl, WhatToTossText
 	call PrintText
 	ld hl, wNumBoxItems
 	ld a, l
-	ld [wList], a
+	ld [wListPointer], a
 	ld a, h
-	ld [wList + 1], a
+	ld [wListPointer + 1], a
 	xor a
 	ld [wPrintItemPrices], a
-	ld a, $3
+	ld a, ITEMLISTMENU
 	ld [wListMenuID], a
 	push hl
 	call DisplayListMenuID
 	pop hl
-	jp c, Func_790c
+	jp c, PlayerPCMenu
 	push hl
 	call IsKeyItem
 	pop hl
-	ld a, $1
+	ld a, 1
 	ld [wItemQuantity], a
 	ld a, [wIsKeyItem]
 	and a
-	jr nz, .asm_7aef
+	jr nz, .next
 	ld a, [wcf91]
 	call IsItemHM
-	jr c, .asm_7aef
+	jr c, .next
+; if it's not a key item, there can be more than one of the item
 	push hl
 	ld hl, TossHowManyText
 	call PrintText
@@ -233,10 +235,10 @@
 	call DisplayChooseQuantityMenu
 	pop hl
 	cp $ff
-	jp z, Func_7aa5
-.asm_7aef
-	call TossItem
-	jp Func_7aa5
+	jp z, .loop
+.next
+	call TossItem ; disallows tossing key items
+	jp .loop
 
 PlayersPCMenuEntries: ; 7af5 (1:7af5)
 	db   "WITHDRAW ITEM"
--- a/engine/menu/start_menu.asm
+++ b/engine/menu/start_menu.asm
@@ -54,7 +54,7 @@
 .buttonPressed ; A, B, or Start button pressed
 	call PlaceUnfilledArrowMenuCursor
 	ld a,[wCurrentMenuItem]
-	ld [wcc2d],a ; save current menu item ID
+	ld [wBattleAndStartSavedMenuItem],a ; save current menu selection
 	ld a,b
 	and a,%00001010 ; was the Start button or B button pressed?
 	jp nz,CloseStartMenu
--- a/engine/menu/start_sub_menus.asm
+++ b/engine/menu/start_sub_menus.asm
@@ -33,7 +33,7 @@
 	ld a,FIELD_MOVE_MON_MENU
 	ld [wTextBoxID],a
 	call DisplayTextBoxID ; display pokemon menu options
-	ld hl,wWhichTrade
+	ld hl,wFieldMoves
 	ld bc,$020c ; max menu item ID, top menu item Y
 	ld e,5
 .adjustMenuVariablesLoop
@@ -40,7 +40,7 @@
 	dec e
 	jr z,.storeMenuVariables
 	ld a,[hli]
-	and a
+	and a ; end of field moves?
 	jr z,.storeMenuVariables
 	inc b
 	dec c
@@ -50,7 +50,7 @@
 	ld hl,wTopMenuItemY
 	ld a,c
 	ld [hli],a ; top menu item Y
-	ld a,[$fff7]
+	ld a,[hFieldMoveMonMenuTopMenuItemX]
 	ld [hli],a ; top menu item X
 	xor a
 	ld [hli],a ; current menu item ID
@@ -81,7 +81,7 @@
 	jp z,.choseStats
 	ld c,a
 	ld b,0
-	ld hl,wWhichTrade
+	ld hl,wFieldMoves
 	add hl,bc
 	jp .choseOutOfBattleMove
 .choseSwitch
@@ -88,7 +88,7 @@
 	ld a,[wPartyCount]
 	cp a,2 ; is there more than one pokemon in the party?
 	jp c,StartMenu_Pokemon ; if not, no switching
-	call SwitchPartyMon_Stats
+	call SwitchPartyMon_InitVarOrSwapData ; init [wMenuItemToSwap]
 	ld a,SWAP_MONS_PARTY_MENU
 	ld [wPartyMenuTypeOrMessageID],a
 	call GoBackToPartyMenu
@@ -95,8 +95,8 @@
 	jp .checkIfPokemonChosen
 .choseStats
 	call ClearSprites
-	xor a
-	ld [wcc49],a
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation],a
 	predef StatusScreen
 	predef StatusScreen2
 	call ReloadMapData
@@ -153,7 +153,7 @@
 	bit 1,a ; does the player have the Cascade Badge?
 	jp z,.newBadgeRequired
 	predef UsedCut
-	ld a,[wcd6a]
+	ld a,[wActionResultOrTookBattleTurn]
 	and a
 	jp z,.loop
 	jp CloseTextDisplay
@@ -169,7 +169,7 @@
 	ld [wcf91],a
 	ld [wd152],a
 	call UseItem
-	ld a,[wcd6a]
+	ld a,[wActionResultOrTookBattleTurn]
 	and a
 	jp z,.loop
 	call GBPalWhiteOutWithDelay3
@@ -197,7 +197,7 @@
 	ld [wcf91],a
 	ld [wd152],a
 	call UseItem
-	ld a,[wcd6a]
+	ld a,[wActionResultOrTookBattleTurn]
 	and a
 	jp z,.loop
 	call GBPalWhiteOutWithDelay3
@@ -256,7 +256,7 @@
 	ld a,[H_QUOTIENT + 2]
 	sbc b
 	jp nc,.notHealthyEnough
-	ld a,[wcc2b]
+	ld a,[wPartyAndBillsPCSavedMenuItem]
 	push af
 	ld a,POTION
 	ld [wcf91],a
@@ -263,7 +263,7 @@
 	ld [wd152],a
 	call UseItem
 	pop af
-	ld [wcc2b],a
+	ld [wPartyAndBillsPCSavedMenuItem],a
 	jp .loop
 .notHealthyEnough ; if current HP is less than 1/5 of max HP
 	ld hl,.notHealthyEnoughText
@@ -308,19 +308,19 @@
 	jr .exitMenu
 .notInCableClubRoom
 	ld bc,wNumBagItems
-	ld hl,wList
+	ld hl,wListPointer
 	ld a,c
 	ld [hli],a
-	ld [hl],b ; store item bag pointer at wList (for DisplayListMenuID)
+	ld [hl],b ; store item bag pointer in wListPointer (for DisplayListMenuID)
 	xor a
 	ld [wPrintItemPrices],a
 	ld a,ITEMLISTMENU
 	ld [wListMenuID],a
-	ld a,[wcc2c]
+	ld a,[wBagSavedMenuItem]
 	ld [wCurrentMenuItem],a
 	call DisplayListMenuID
 	ld a,[wCurrentMenuItem]
-	ld [wcc2c],a
+	ld [wBagSavedMenuItem],a
 	jr nc,.choseItem
 .exitMenu
 	call LoadScreenTilesFromBuffer2 ; restore saved screen
@@ -401,7 +401,7 @@
 	xor a
 	ld [wd152],a
 	call UseItem
-	ld a,[wcd6a]
+	ld a,[wActionResultOrTookBattleTurn]
 	and a
 	jp z,ItemMenuLoop
 	jp CloseStartMenu
@@ -409,7 +409,7 @@
 	ld a,[wUpdateSpritesEnabled]
 	push af
 	call UseItem
-	ld a,[wcd6a]
+	ld a,[wActionResultOrTookBattleTurn]
 	cp a,$02
 	jp z,.partyMenuNotDisplayed
 	call GBPalWhiteOutWithDelay3
@@ -566,7 +566,7 @@
 	ld de,vChars1 + $570
 	call TrainerInfo_FarCopyData
 	call EnableLCD
-	ld hl,wWhichTrade
+	ld hl,wTrainerInfoTextBoxWidthPlus1
 	ld a,18 + 1
 	ld [hli],a
 	dec a
@@ -574,7 +574,7 @@
 	ld [hl],1
 	hlCoord 0, 0
 	call TrainerInfo_DrawTextBox
-	ld hl,wWhichTrade
+	ld hl,wTrainerInfoTextBoxWidthPlus1
 	ld a,16 + 1
 	ld [hli],a
 	dec a
@@ -627,15 +627,15 @@
 ; height is always 6
 ; INPUT:
 ; hl = destination address
-; [wWhichTrade] = width + 1
-; [wTrainerEngageDistance] = width
-; [wTrainerFacingDirection] = distance from the end of a text box row to the start of the next
+; [wTrainerInfoTextBoxWidthPlus1] = width
+; [wTrainerInfoTextBoxWidth] = width - 1
+; [wTrainerInfoTextBoxNextRowOffset] = distance from the end of a text box row to the start of the next
 TrainerInfo_DrawTextBox: ; 135a0 (4:75a0)
 	ld a,$79 ; upper left corner tile ID
 	ld de,$7a7b ; top edge and upper right corner tile ID's
 	call TrainerInfo_DrawHorizontalEdge ; draw top edge
 	call TrainerInfo_NextTextBoxRow
-	ld a,[wWhichTrade] ; width of the text box plus one
+	ld a,[wTrainerInfoTextBoxWidthPlus1]
 	ld e,a
 	ld d,0
 	ld c,6 ; height of the text box
@@ -651,7 +651,7 @@
 
 TrainerInfo_DrawHorizontalEdge: ; 135c3 (4:75c3)
 	ld [hli],a ; place left corner tile
-	ld a,[wTrainerEngageDistance] ; width of the text box
+	ld a,[wTrainerInfoTextBoxWidth]
 	ld c,a
 	ld a,d
 .loop
@@ -663,7 +663,7 @@
 	ret
 
 TrainerInfo_NextTextBoxRow: ; 135d0 (4:75d0)
-	ld a,[wTrainerFacingDirection] ; distance to the start of the next row
+	ld a,[wTrainerInfoTextBoxNextRowOffset] ; distance to the start of the next row
 .loop
 	inc hl
 	dec a
@@ -704,14 +704,14 @@
 	jp RedisplayStartMenu
 
 SwitchPartyMon: ; 13613 (4:7613)
-	call SwitchPartyMon_Stats
-	ld a, [wWhichTrade]
-	call SwitchPartyMon_OAM
+	call SwitchPartyMon_InitVarOrSwapData ; swap data
+	ld a, [wSwappedMenuItem]
+	call SwitchPartyMon_ClearGfx
 	ld a, [wCurrentMenuItem]
-	call SwitchPartyMon_OAM
+	call SwitchPartyMon_ClearGfx
 	jp RedrawPartyMenu_
 
-SwitchPartyMon_OAM: ; 13625 (4:7625)
+SwitchPartyMon_ClearGfx: ; 13625 (4:7625)
 	push af
 	hlCoord 0, 0
 	ld bc, SCREEN_WIDTH * 2
@@ -718,10 +718,10 @@
 	call AddNTimes
 	ld c, SCREEN_WIDTH * 2
 	ld a, " "
-.asm_13633
+.clearMonBGLoop ; clear the mon's row in the party menu
 	ld [hli], a
 	dec c
-	jr nz, .asm_13633
+	jr nz, .clearMonBGLoop
 	pop af
 	ld hl, wOAMBuffer
 	ld bc, $10
@@ -728,24 +728,26 @@
 	call AddNTimes
 	ld de, $4
 	ld c, e
-.asm_13645
+.clearMonOAMLoop
 	ld [hl], $a0
 	add hl, de
 	dec c
-	jr nz, .asm_13645
+	jr nz, .clearMonOAMLoop
 	call WaitForSoundToFinish
 	ld a, (SFX_02_58 - SFX_Headers_02) / 3
 	jp PlaySound
 
-SwitchPartyMon_Stats: ; 13653 (4:7653)
+SwitchPartyMon_InitVarOrSwapData: ; 13653 (4:7653)
+; This is used to initialise [wMenuItemToSwap] and to actually swap the data.
 	ld a, [wMenuItemToSwap]
-	and a
-	jr nz, .asm_13661
+	and a ; has [wMenuItemToSwap] been initialised yet?
+	jr nz, .pickedMonsToSwap
+; If not, initialise [wMenuItemToSwap] so that it matches the current mon.
 	ld a, [wWhichPokemon]
-	inc a
+	inc a ; [wMenuItemToSwap] counts from 1
 	ld [wMenuItemToSwap], a
 	ret
-.asm_13661
+.pickedMonsToSwap
 	xor a
 	ld [wPartyMenuTypeOrMessageID], a
 	ld a, [wMenuItemToSwap]
@@ -752,14 +754,15 @@
 	dec a
 	ld b, a
 	ld a, [wCurrentMenuItem]
-	ld [wWhichTrade], a
-	cp b
-	jr nz, .asm_1367b
+	ld [wSwappedMenuItem], a
+	cp b ; swapping a mon with itself?
+	jr nz, .swappingDifferentMons
+; can't swap a mon with itself
 	xor a
 	ld [wMenuItemToSwap], a
 	ld [wPartyMenuTypeOrMessageID], a
 	ret
-.asm_1367b
+.swappingDifferentMons
 	ld a, b
 	ld [wMenuItemToSwap], a
 	push hl
@@ -770,20 +773,20 @@
 	ld a, [wCurrentMenuItem]
 	add l
 	ld l, a
-	jr nc, .asm_1368e
+	jr nc, .noCarry
 	inc h
-.asm_1368e
+.noCarry
 	ld a, [wMenuItemToSwap]
 	add e
 	ld e, a
-	jr nc, .asm_13696
+	jr nc, .noCarry2
 	inc d
-.asm_13696
+.noCarry2
 	ld a, [hl]
-	ld [H_DIVIDEND], a ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
+	ld [hSwapTemp], a
 	ld a, [de]
 	ld [hl], a
-	ld a, [H_DIVIDEND] ; (aliases: H_PRODUCT, H_PASTLEADINGZEROES, H_QUOTIENT)
+	ld a, [hSwapTemp]
 	ld [de], a
 	ld hl, wPartyMons
 	ld bc, wPartyMon2 - wPartyMon1
@@ -791,19 +794,19 @@
 	call AddNTimes
 	push hl
 	ld de, wSwitchPartyMonTempBuffer
-	ld bc, $2c
+	ld bc, wPartyMon2 - wPartyMon1
 	call CopyData
 	ld hl, wPartyMons
-	ld bc, $2c
+	ld bc, wPartyMon2 - wPartyMon1
 	ld a, [wMenuItemToSwap]
 	call AddNTimes
 	pop de
 	push hl
-	ld bc, $2c
+	ld bc, wPartyMon2 - wPartyMon1
 	call CopyData
 	pop de
 	ld hl, wSwitchPartyMonTempBuffer
-	ld bc, $2c
+	ld bc, wPartyMon2 - wPartyMon1
 	call CopyData
 	ld hl, wPartyMonOT
 	ld a, [wCurrentMenuItem]
@@ -842,7 +845,7 @@
 	ld bc, $b
 	call CopyData
 	ld a, [wMenuItemToSwap]
-	ld [wWhichTrade], a
+	ld [wSwappedMenuItem], a
 	xor a
 	ld [wMenuItemToSwap], a
 	ld [wPartyMenuTypeOrMessageID], a
--- a/engine/menu/status_screen.asm
+++ b/engine/menu/status_screen.asm
@@ -65,9 +65,10 @@
 ; Predef 0x37
 StatusScreen: ; 12953 (4:6953)
 	call LoadMonData
-	ld a, [wcc49]
-	cp $2 ; 2 means we're in a PC box
+	ld a, [wMonDataLocation]
+	cp BOX_DATA
 	jr c, .DontRecalculate
+; mon is in a box or daycare
 	ld a, [wLoadedMonBoxLevel]
 	ld [wLoadedMonLevel], a
 	ld [W_CURENEMYLVL], a
@@ -148,13 +149,13 @@
 	hlCoord 11, 10
 	predef PrintMonType
 	ld hl, NamePointers2
-	call .asm_12a7e
+	call .GetStringPointer
 	ld d, h
 	ld e, l
 	hlCoord 9, 1
 	call PlaceString ; Pokémon name
 	ld hl, OTPointers
-	call .asm_12a7e
+	call .GetStringPointer
 	ld d, h
 	ld e, l
 	hlCoord 12, 16
@@ -175,17 +176,18 @@
 	pop af
 	ld [hTilesetType], a
 	ret
-.asm_12a7e ;  I don't know what this does, iterates over pointers?
-	ld a, [wcc49]
+
+.GetStringPointer
+	ld a, [wMonDataLocation]
 	add a
 	ld c, a
-	ld b, $0
+	ld b, 0
 	add hl, bc
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
-	ld a, [wcc49]
-	cp $3
+	ld a, [wMonDataLocation]
+	cp DAYCARE_DATA
 	ret z
 	ld a, [wWhichPokemon]
 	jp SkipFixedLengthTextEntries
@@ -316,7 +318,7 @@
 	hlCoord 2, 9
 	ld de, wMovesString
 	call PlaceString ; Print moves
-	ld a, [wcd6c]
+	ld a, [wNumMovesMinusOne]
 	inc a
 	ld c, a
 	ld a, $4
@@ -335,7 +337,7 @@
 .InitPP ; 12bbb
 	ld hl, wLoadedMonMoves
 	deCoord 14, 10
-	ld b, $0
+	ld b, 0
 .PrintPP ; 12bc3
 	ld a, [hli]
 	and a
@@ -356,15 +358,15 @@
 	pop de
 	pop hl
 	push hl
-	ld bc, $0014
+	ld bc, wPartyMon1PP - wPartyMon1Moves - 1
 	add hl, bc
 	ld a, [hl]
 	and $3f
-	ld [wcd71], a
+	ld [wStatusScreenCurrentPP], a
 	ld h, d
 	ld l, e
 	push hl
-	ld de, wcd71
+	ld de, wStatusScreenCurrentPP
 	ld bc, $0102
 	call PrintNumber
 	ld a, "/"
--- a/engine/oak_speech.asm
+++ b/engine/oak_speech.asm
@@ -1,5 +1,5 @@
 SetDefaultNames: ; 60ca (1:60ca)
-	ld a, [wd358]
+	ld a, [wLetterPrintingDelayFlags]
 	push af
 	ld a, [W_OPTIONS]
 	push af
@@ -18,7 +18,7 @@
 	pop af
 	ld [W_OPTIONS], a
 	pop af
-	ld [wd358], a
+	ld [wLetterPrintingDelayFlags], a
 	ld a, [wd08a]
 	and a
 	call z, Func_5bff
@@ -193,7 +193,7 @@
 
 MovePicLeft: ; 6288 (1:6288)
 	ld a,119
-	ld [$FF4B],a
+	ld [rWX],a
 	call DelayFrame
 
 	ld a,$E4
@@ -200,11 +200,11 @@
 	ld [rBGP],a
 .next
 	call DelayFrame
-	ld a,[$FF4B]
+	ld a,[rWX]
 	sub 8
 	cp $FF
 	ret z
-	ld [$FF4B],a
+	ld [rWX],a
 	jr .next
 
 Predef3B: ; 62a1 (1:62a1)
--- a/engine/overworld/cut.asm
+++ b/engine/overworld/cut.asm
@@ -1,6 +1,6 @@
 UsedCut: ; ef54 (3:6f54)
 	xor a
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a ; initialise to failure value
 	ld a, [W_CURMAPTILESET]
 	and a ; OVERWORLD
 	jr z, .asm_ef6b
@@ -26,9 +26,9 @@
 	db "@"
 
 .asm_ef82
-	ld [wcd4d], a
+	ld [wCutTile], a
 	ld a, $1
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a ; used cut
 	ld a, [wWhichPokemon]
 	ld hl, wPartyMonNicks
 	call GetPartyMonName
@@ -73,10 +73,10 @@
 
 AnimateCutTree: ; eff7 (3:6ff7)
 	xor a
-	ld [wcd50], a
+	ld [wWhichAnimationOffsets], a
 	ld a, $e4
 	ld [rOBP1], a
-	ld a, [wcd4d]
+	ld a, [wCutTile]
 	cp $52
 	jr z, .asm_f020
 	ld de, Overworld_GFX + $2d0 ; cuttable tree sprite top row
@@ -138,7 +138,7 @@
 	srl a
 	ld e, a
 	ld d, $0 ; de holds direction (00: down, 02: up, 04: left, 06: right)
-	ld a, [wcd50]
+	ld a, [wWhichAnimationOffsets]
 	and a
 	ld hl, CutTreeAnimationOffsets
 	jr z, .asm_f084
--- a/engine/overworld/cut2.asm
+++ b/engine/overworld/cut2.asm
@@ -1,5 +1,5 @@
 Func_79e96: ; 79e96 (1e:5e96)
-	ld a, [wcd4d]
+	ld a, [wCutTile]
 	cp $52
 	jr z, .asm_79ec8
 	ld c, $8
--- a/engine/overworld/emotion_bubbles.asm
+++ b/engine/overworld/emotion_bubbles.asm
@@ -1,7 +1,7 @@
 EmotionBubble: ; 17c47 (5:7c47)
-	ld a, [wcd50]
+	ld a, [wWhichEmotionBubble]
 	ld c, a
-	ld b, $0
+	ld b, 0
 	ld hl, EmotionBubblesPointerTable
 	add hl, bc
 	add hl, bc
@@ -16,15 +16,18 @@
 	ld a, $ff
 	ld [wUpdateSpritesEnabled], a
 	ld a, [wd736]
-	bit 6, a
+	bit 6, a ; are the last 4 OAM entries reserved for a shadow or fishing rod?
 	ld hl, wOAMBuffer + $8f
 	ld de, wOAMBuffer + $9f
-	jr z, .asm_17c7a
+	jr z, .next
 	ld hl, wOAMBuffer + $7f
 	ld de, wOAMBuffer + $8f
-.asm_17c7a
+
+; Copy OAM data 16 bytes forward to make room for emotion bubble OAM data at the
+; start of the OAM buffer.
+.next
 	ld bc, $90
-.asm_17c7d
+.loop
 	ld a, [hl]
 	ld [de], a
 	dec hl
@@ -32,12 +35,14 @@
 	dec bc
 	ld a, c
 	or b
-	jr nz, .asm_17c7d
+	jr nz, .loop
+
+; get the screen coordinates of the sprite the bubble is to be displayed above
 	ld hl, wSpriteStateData1 + 4
-	ld a, [wcd4f]
+	ld a, [wEmotionBubbleSpriteIndex]
 	swap a
 	ld c, a
-	ld b, $0
+	ld b, 0
 	add hl, bc
 	ld a, [hli]
 	ld b, a
@@ -45,6 +50,7 @@
 	ld a, [hl]
 	add $8
 	ld c, a
+
 	ld de, EmotionBubblesOAM
 	xor a
 	call WriteOAMBlock
--- a/engine/overworld/movement.asm
+++ b/engine/overworld/movement.asm
@@ -12,7 +12,7 @@
 ; the maximum number for map tiles
 .checkIfTextBoxInFrontOfSprite
 	aCoord 8, 9
-	ld [$ff93], a
+	ld [hTilePlayerStandingOn], a
 	cp $60
 	jr c, .lowerLeftTileIsMapTile
 .disableSprite
@@ -21,44 +21,46 @@
 	ret
 .lowerLeftTileIsMapTile
 	call DetectCollisionBetweenSprites
-	ld h, $c1
+	ld h, wSpriteStateData1 / $100
 	ld a, [wWalkCounter]
 	and a
-	jr nz, .asm_4e90
+	jr nz, .moving
 	ld a, [wd528]
+; check if down
 	bit 2, a
-	jr z, .notDown
+	jr z, .checkIfUp
 	xor a ; ld a, SPRITE_FACING_DOWN
-	jr .done
-.notDown
+	jr .next
+.checkIfUp
 	bit 3, a
-	jr z, .notUp
+	jr z, .checkIfLeft
 	ld a, SPRITE_FACING_UP
-	jr .done
-.notUp
+	jr .next
+.checkIfLeft
 	bit 1, a
-	jr z, .notLeft
+	jr z, .checkIfRight
 	ld a, SPRITE_FACING_LEFT
-	jr .done
-.notLeft
+	jr .next
+.checkIfRight
 	bit 0, a
-	jr z, .notRight
+	jr z, .notMoving
 	ld a, SPRITE_FACING_RIGHT
-	jr .done
-.notRight
+	jr .next
+.notMoving
+; zero the animation counters
 	xor a
 	ld [wSpriteStateData1 + 7], a
 	ld [wSpriteStateData1 + 8], a
-	jr .asm_4eab
-.done
-	ld [wSpriteStateData1 + 9], a
+	jr .calcImageIndex
+.next
+	ld [wSpriteStateData1 + 9], a ; facing direction
 	ld a, [wFontLoaded]
 	bit 0, a
-	jr nz, .notRight
-.asm_4e90
+	jr nz, .notMoving
+.moving
 	ld a, [wd736]
-	bit 7, a
-	jr nz, .asm_4eb6
+	bit 7, a ; is the player sprite spinning due to a spin tile?
+	jr nz, .skipSpriteAnim
 	ld a, [H_CURRENTSPRITEOFFSET]
 	add $7
 	ld l, a
@@ -65,8 +67,8 @@
 	ld a, [hl]
 	inc a
 	ld [hl], a
-	cp $4
-	jr nz, .asm_4eab
+	cp 4
+	jr nz, .calcImageIndex
 	xor a
 	ld [hl], a
 	inc hl
@@ -74,28 +76,32 @@
 	inc a
 	and $3
 	ld [hl], a
-.asm_4eab
+.calcImageIndex
 	ld a, [wSpriteStateData1 + 8]
 	ld b, a
 	ld a, [wSpriteStateData1 + 9]
 	add b
 	ld [wSpriteStateData1 + 2], a
-.asm_4eb6
-	ld a, [$ff93]
+.skipSpriteAnim
+; If the player is standing on a grass tile, make the player's sprite have
+; lower priority than the background so that it's partially obscured by the
+; grass. Only the lower half of the sprite is permitted to have the priority
+; bit set by later logic.
+	ld a, [hTilePlayerStandingOn]
 	ld c, a
 	ld a, [W_GRASSTILE]
 	cp c
 	ld a, $0
-	jr nz, .asm_4ec3
+	jr nz, .next2
 	ld a, $80
-.asm_4ec3
+.next2
 	ld [wSpriteStateData2 + $07], a
 	ret
 
-Func_4ec7: ; 4ec7 (1:4ec7)
+UnusedReadSpriteDataFunction: ; 4ec7 (1:4ec7)
 	push bc
 	push af
-	ld a, [$ffda]
+	ld a, [H_CURRENTSPRITEOFFSET]
 	ld c, a
 	pop af
 	add c
@@ -103,7 +109,7 @@
 	pop bc
 	ret
 
-Func_4ed1: ; 4ed1 (1:4ed1)
+UpdateNPCSprite: ; 4ed1 (1:4ed1)
 	ld a, [H_CURRENTSPRITEOFFSET]
 	swap a
 	dec a
@@ -148,23 +154,25 @@
 	ld l, a
 	ld a, [hl]       ; c2x6: movement byte 1
 	inc a
-	jr z, .asm_4f59  ; value $FF
+	jr z, .randomMovement  ; value $FF
 	inc a
-	jr z, .asm_4f59  ; value $FE
+	jr z, .randomMovement  ; value $FE
+; scripted movement
 	dec a
-	ld [hl], a       ; (temporarily) increment movement byte 1
+	ld [hl], a       ; increment movement byte 1 (movement data index)
 	dec a
 	push hl
 	ld hl, wcf0f
 	dec [hl]         ; decrement wcf0f
 	pop hl
-	ld de, wcc5b
-	call LoadDEPlusA ; a = [wcc5b + movement byte 1]
+	ld de, wNPCMovementDirections
+	call LoadDEPlusA ; a = [wNPCMovementDirections + movement byte 1]
 	cp $e0
 	jp z, ChangeFacingDirection
 	cp $ff
-	jr nz, .asm_4f4b
-	ld [hl], a       ; reset movement byte 1 to initial value
+	jr nz, .next
+; reached end of wNPCMovementDirections list
+	ld [hl], a ; store $ff in movement byte 1, disabling scripted movement
 	ld hl, wd730
 	res 0, [hl]
 	xor a
@@ -171,17 +179,18 @@
 	ld [wSimulatedJoypadStatesIndex], a
 	ld [wWastedByteCD3A], a
 	ret
-.asm_4f4b
+.next
 	cp $fe
-	jr nz, .asm_4f5f
+	jr nz, .determineDirection
+; current NPC movement data is $fe. this seems buggy
 	ld [hl], $1     ; set movement byte 1 to $1
-	ld de, wcc5b
-	call LoadDEPlusA ; a = [wcc5b + $fe] (?)
-	jr .asm_4f5f
-.asm_4f59
-	call getTileSpriteStandsOn
+	ld de, wNPCMovementDirections
+	call LoadDEPlusA ; a = [wNPCMovementDirections + $fe] (?)
+	jr .determineDirection
+.randomMovement
+	call GetTileSpriteStandsOn
 	call Random
-.asm_4f5f
+.determineDirection
 	ld b, a
 	ld a, [wCurSpriteMovement2]
 	cp $d0
@@ -199,7 +208,7 @@
 	cp $2
 	jr z, .moveLeft    ; movement byte 2 = $2 only allows left or right
 .moveDown
-	ld de, 2*20
+	ld de, 2*SCREEN_WIDTH
 	add hl, de         ; move tile pointer two rows down
 	ld de, $100
 
@@ -212,7 +221,7 @@
 	cp $2
 	jr z, .moveRight   ; movement byte 2 = $2 only allows left or right
 .moveUp
-	ld de, -2*20
+	ld de, -2*SCREEN_WIDTH
 	add hl, de         ; move tile pointer two rows up
 	ld de, $ff00
 	ld bc, $804
@@ -249,7 +258,7 @@
 ; c: new facing direction (0,4,8 or $c)
 ; d: Y movement delta (-1, 0 or 1)
 ; e: X movement delta (-1, 0 or 1)
-; hl: pointer to tile the sprite would wlak onto
+; hl: pointer to tile the sprite would walk onto
 ; set carry on failure, clears carry on success
 TryWalking: ; 4fcb (1:4fcb)
 	push hl
@@ -470,7 +479,7 @@
 	ld l, a
 	ld a, [hl]      ; c2x6: movement byte 1
 	cp $fe
-	jr c, .skipXVisibilityTest ; movement byte 1 < $fe
+	jr c, .skipXVisibilityTest ; movement byte 1 < $fe (i.e. the sprite's movement is scripted)
 	ld a, [H_CURRENTSPRITEOFFSET]
 	add $4
 	ld l, a
@@ -495,7 +504,7 @@
 .skipXVisibilityTest
 ; make the sprite invisible if a text box is in front of it
 ; $5F is the maximum number for map tiles
-	call getTileSpriteStandsOn
+	call GetTileSpriteStandsOn
 	ld d, $60
 	ld a, [hli]
 	cp d
@@ -572,10 +581,11 @@
 	ld l, a
 	ld a, [hl]         ; c2x6 (movement byte 1)
 	cp $fe
-	jr nc, .canMove    ; values $fe and $ff
+	jr nc, .notScripted    ; values $fe and $ff
+; always allow walking if the movement is scripted
 	and a
 	ret
-.canMove
+.notScripted
 	ld a, [W_TILESETCOLLISIONPTR]
 	ld l, a
 	ld a, [W_TILESETCOLLISIONPTR+1]
@@ -675,7 +685,7 @@
 ; calculates the tile pointer pointing to the tile the current sprite stancs on
 ; this is always the lower left tile of the 2x2 tile blocks all sprites are snapped to
 ; hl: output pointer
-getTileSpriteStandsOn: ; 5207 (1:5207)
+GetTileSpriteStandsOn: ; 5207 (1:5207)
 	ld h, $c1
 	ld a, [H_CURRENTSPRITEOFFSET]
 	add $4
@@ -713,7 +723,11 @@
 	ld a, [de]
 	ret
 
-Func_5236: ; 5236 (1:5236)
+DoScriptedNPCMovement: ; 5236 (1:5236)
+; This is an alternative method of scripting an NPC's movement and is only used
+; a few times in the game. It is used when the NPC and player must walk together
+; in sync, such as when the player is following the NPC somewhere. An NPC can't
+; be moved in sync with the player using the other method.
 	ld a, [wd730]
 	bit 7, a
 	ret z
@@ -720,46 +734,47 @@
 	ld hl, wd72e
 	bit 7, [hl]
 	set 7, [hl]
-	jp z, Func_52a6
+	jp z, InitScriptedNPCMovement
 	ld hl, wNPCMovementDirections2
 	ld a, [wNPCMovementDirections2Index]
 	add l
 	ld l, a
-	jr nc, .asm_5251
+	jr nc, .noCarry
 	inc h
-.asm_5251
+.noCarry
 	ld a, [hl]
-	cp $40
-	jr nz, .asm_525f
-	call Func_52b2
-	ld c, $4
-	ld a, $fe
-	jr .asm_5289
-.asm_525f
-	cp $0
-	jr nz, .asm_526c
-	call Func_52b2
-	ld c, $0
-	ld a, $2
-	jr .asm_5289
-.asm_526c
-	cp $80
-	jr nz, .asm_5279
-	call Func_52b7
-	ld c, $8
-	ld a, $fe
-	jr .asm_5289
-.asm_5279
-	cp $c0
-	jr nz, .asm_5286
-	call Func_52b7
-	ld c, $c
-	ld a, $2
-	jr .asm_5289
-.asm_5286
+; check if moving up
+	cp NPC_MOVEMENT_UP
+	jr nz, .checkIfMovingDown
+	call GetSpriteScreenYPointer
+	ld c, SPRITE_FACING_UP
+	ld a, -2
+	jr .move
+.checkIfMovingDown
+	cp NPC_MOVEMENT_DOWN
+	jr nz, .checkIfMovingLeft
+	call GetSpriteScreenYPointer
+	ld c, SPRITE_FACING_DOWN
+	ld a, 2
+	jr .move
+.checkIfMovingLeft
+	cp NPC_MOVEMENT_LEFT
+	jr nz, .checkIfMovingRight
+	call GetSpriteScreenXPointer
+	ld c, SPRITE_FACING_LEFT
+	ld a, -2
+	jr .move
+.checkIfMovingRight
+	cp NPC_MOVEMENT_RIGHT
+	jr nz, .noMatch
+	call GetSpriteScreenXPointer
+	ld c, SPRITE_FACING_RIGHT
+	ld a, 2
+	jr .move
+.noMatch
 	cp $ff
 	ret
-.asm_5289
+.move
 	ld b, a
 	ld a, [hl]
 	add b
@@ -768,33 +783,34 @@
 	add $9
 	ld l, a
 	ld a, c
-	ld [hl], a
-	call Func_52c3
-	ld hl, wcf18
+	ld [hl], a ; facing direction
+	call AnimScriptedNPCMovement
+	ld hl, wScriptedNPCWalkCounter
 	dec [hl]
 	ret nz
-	ld a, $8
-	ld [wcf18], a
+	ld a, 8
+	ld [wScriptedNPCWalkCounter], a
 	ld hl, wNPCMovementDirections2Index
 	inc [hl]
 	ret
 
-Func_52a6: ; 52a6 (1:52a6)
+InitScriptedNPCMovement: ; 52a6 (1:52a6)
 	xor a
 	ld [wNPCMovementDirections2Index], a
-	ld a, $8
-	ld [wcf18], a
-	jp Func_52c3
+	ld a, 8
+	ld [wScriptedNPCWalkCounter], a
+	jp AnimScriptedNPCMovement
 
-Func_52b2: ; 52b2 (1:52b2)
+GetSpriteScreenYPointer: ; 52b2 (1:52b2)
 	ld a, $4
 	ld b, a
-	jr asm_52ba
+	jr GetSpriteScreenXYPointerCommon
 
-Func_52b7: ; 52b7 (1:52b7)
+GetSpriteScreenXPointer: ; 52b7 (1:52b7)
 	ld a, $6
 	ld b, a
-asm_52ba: ; 52ba (1:52ba)
+
+GetSpriteScreenXYPointerCommon: ; 52ba (1:52ba)
 	ld hl, wSpriteStateData1
 	ld a, [H_CURRENTSPRITEOFFSET]
 	add l
@@ -802,12 +818,12 @@
 	ld l, a
 	ret
 
-Func_52c3: ; 52c3 (1:52c3)
+AnimScriptedNPCMovement: ; 52c3 (1:52c3)
 	ld hl, wSpriteStateData2
 	ld a, [H_CURRENTSPRITEOFFSET]
 	add $e
 	ld l, a
-	ld a, [hl]
+	ld a, [hl] ; VRAM slot
 	dec a
 	swap a
 	ld b, a
@@ -815,47 +831,47 @@
 	ld a, [H_CURRENTSPRITEOFFSET]
 	add $9
 	ld l, a
-	ld a, [hl]
-	cp $0
-	jr z, .asm_52ea
-	cp $4
-	jr z, .asm_52ea
-	cp $8
-	jr z, .asm_52ea
-	cp $c
-	jr z, .asm_52ea
+	ld a, [hl] ; facing direction
+	cp SPRITE_FACING_DOWN
+	jr z, .anim
+	cp SPRITE_FACING_UP
+	jr z, .anim
+	cp SPRITE_FACING_LEFT
+	jr z, .anim
+	cp SPRITE_FACING_RIGHT
+	jr z, .anim
 	ret
-.asm_52ea
+.anim
 	add b
 	ld b, a
-	ld [$ffe9], a
-	call Func_5301
+	ld [hSpriteVRAMSlotAndFacing], a
+	call AdvanceScriptedNPCAnimFrameCounter
 	ld hl, wSpriteStateData1
 	ld a, [H_CURRENTSPRITEOFFSET]
 	add $2
 	ld l, a
-	ld a, [$ffe9]
+	ld a, [hSpriteVRAMSlotAndFacing]
 	ld b, a
-	ld a, [$ffea]
+	ld a, [hSpriteAnimFrameCounter]
 	add b
 	ld [hl], a
 	ret
 
-Func_5301: ; 5301 (1:5301)
+AdvanceScriptedNPCAnimFrameCounter: ; 5301 (1:5301)
 	ld a, [H_CURRENTSPRITEOFFSET]
 	add $7
 	ld l, a
-	ld a, [hl]
+	ld a, [hl] ; intra-animation frame counter
 	inc a
 	ld [hl], a
-	cp $4
+	cp 4
 	ret nz
 	xor a
-	ld [hl], a
+	ld [hl], a ; reset intra-animation frame counter
 	inc l
-	ld a, [hl]
+	ld a, [hl] ; animation frame counter
 	inc a
 	and $3
 	ld [hl], a
-	ld [$ffea], a
+	ld [hSpriteAnimFrameCounter], a
 	ret
--- a/engine/overworld/npc_movement.asm
+++ b/engine/overworld/npc_movement.asm
@@ -44,35 +44,41 @@
 	ld [wSimulatedJoypadStatesEnd], a
 	ret
 
-ProfOakMovementScriptPointerTable: ; 1a442 (6:6442)
-	dw Func_1a44c
-	dw Func_1a485
-	dw Func_1a4a1
-	dw Func_1a4a6
-	dw Func_1a4f4
+PalletMovementScriptPointerTable: ; 1a442 (6:6442)
+	dw PalletMovementScript_OakMoveLeft
+	dw PalletMovementScript_PlayerMoveLeft
+	dw PalletMovementScript_WaitAndWalkToLab
+	dw PalletMovementScript_WalkToLab
+	dw PalletMovementScript_Done
 
-Func_1a44c: ; 1a44c (6:644c)
+PalletMovementScript_OakMoveLeft: ; 1a44c (6:644c)
 	ld a, [W_XCOORD]
 	sub $a
-	ld [wcca1], a
-	jr z, .asm_1a475
-	ld b, $0
+	ld [wNumStepsToTake], a
+	jr z, .playerOnLeftTile
+; The player is on the right tile of the northern path out of Pallet Town and
+; Prof. Oak is below.
+; Make Prof. Oak step to the left.
+	ld b, 0
 	ld c, a
 	ld hl, wNPCMovementDirections2
-	ld a, $80
+	ld a, NPC_MOVEMENT_LEFT
 	call FillMemory
 	ld [hl], $ff
 	ld a, [wSpriteIndex]
-	ld [H_DOWNARROWBLINKCNT2], a
+	ld [H_SPRITEINDEX], a
 	ld de, wNPCMovementDirections2
 	call MoveSprite
 	ld a, $1
 	ld [wNPCMovementScriptFunctionNum], a
-	jr .asm_1a47a
-.asm_1a475
+	jr .done
+; The player is on the left tile of the northern path out of Pallet Town and
+; Prof. Oak is below.
+; Prof. Oak is already on the right tile.
+.playerOnLeftTile
 	ld a, $3
 	ld [wNPCMovementScriptFunctionNum], a
-.asm_1a47a
+.done
 	ld hl, W_FLAGS_D733
 	set 1, [hl]
 	ld a, $fc
@@ -79,13 +85,13 @@
 	ld [wJoyIgnore], a
 	ret
 
-Func_1a485: ; 1a485 (6:6485)
+PalletMovementScript_PlayerMoveLeft: ; 1a485 (6:6485)
 	ld a, [wd730]
-	bit 0, a
-	ret nz
-	ld a, [wcca1]
+	bit 0, a ; is an NPC being moved by a script?
+	ret nz ; return if Oak is still moving
+	ld a, [wNumStepsToTake]
 	ld [wSimulatedJoypadStatesIndex], a
-	ld [$ff95], a
+	ld [hNPCMovementDirections2Index], a
 	predef ConvertNPCMovementDirectionsToJoypadMasks
 	call StartSimulatingJoypadStates
 	ld a, $2
@@ -92,12 +98,12 @@
 	ld [wNPCMovementScriptFunctionNum], a
 	ret
 
-Func_1a4a1: ; 1a4a1 (6:64a1)
+PalletMovementScript_WaitAndWalkToLab: ; 1a4a1 (6:64a1)
 	ld a, [wSimulatedJoypadStatesIndex]
-	and a
+	and a ; is the player done moving left yet?
 	ret nz
 
-Func_1a4a6: ; 1a4a6 (6:64a6)
+PalletMovementScript_WalkToLab: ; 1a4a6 (6:64a6)
 	xor a
 	ld [wOverrideSimulatedJoypadStatesMask], a
 	ld a, [wSpriteIndex]
@@ -122,12 +128,12 @@
 	ret
 
 RLEList_ProfOakWalkToLab: ; 1a4dc (6:64dc)
-	db $00, $05
-	db $80, $01
-	db $00, $05
-	db $C0, $03
-	db $40, $01
-	db $E0, $01
+	db NPC_MOVEMENT_DOWN, $05
+	db NPC_MOVEMENT_LEFT, $01
+	db NPC_MOVEMENT_DOWN, $05
+	db NPC_MOVEMENT_RIGHT, $03
+	db NPC_MOVEMENT_UP, $01
+	db $E0, $01 ; stand still
 	db $FF
 
 RLEList_PlayerWalkToLab: ; 1a4e9 (6:64e9)
@@ -138,7 +144,7 @@
 	db D_DOWN, $06
 	db $FF
 
-Func_1a4f4: ; 1a4f4 (6:64f4)
+PalletMovementScript_Done: ; 1a4f4 (6:64f4)
 	ld a, [wSimulatedJoypadStatesIndex]
 	and a
 	ret nz
@@ -152,10 +158,10 @@
 	jp EndNPCMovementScript
 
 PewterMuseumGuyMovementScriptPointerTable: ; 1a510 (6:6510)
-	dw Func_1a514
-	dw PewterMovementScriptDone
+	dw PewterMovementScript_WalkToMuseum
+	dw PewterMovementScript_Done
 
-Func_1a514: ; 1a514 (6:6514)
+PewterMovementScript_WalkToMuseum: ; 1a514 (6:6514)
 	ld a, BANK(Music_MuseumGuy)
 	ld [wc0ef], a
 	ld [wc0f0], a
@@ -191,13 +197,13 @@
 	db $FF
 
 RLEList_PewterMuseumGuy: ; 1a562 (6:6562)
-	db $40, $06
-	db $80, $0D
-	db $40, $03
-	db $80, $01
+	db NPC_MOVEMENT_UP, $06
+	db NPC_MOVEMENT_LEFT, $0D
+	db NPC_MOVEMENT_UP, $03
+	db NPC_MOVEMENT_LEFT, $01
 	db $FF
 
-PewterMovementScriptDone: ; 1a56b (6:656b)
+PewterMovementScript_Done: ; 1a56b (6:656b)
 	ld a, [wSimulatedJoypadStatesIndex]
 	and a
 	ret nz
@@ -208,10 +214,10 @@
 	jp EndNPCMovementScript
 
 PewterGymGuyMovementScriptPointerTable: ; 1a57d (6:657d)
-	dw Func_1a581
-	dw PewterMovementScriptDone
+	dw PewterMovementScript_WalkToGym
+	dw PewterMovementScript_Done
 
-Func_1a581: ; 1a581 (6:6581)
+PewterMovementScript_WalkToGym: ; 1a581 (6:6581)
 	ld a, BANK(Music_MuseumGuy)
 	ld [wc0ef], a
 	ld [wc0f0], a
@@ -252,12 +258,12 @@
 	db $FF
 
 RLEList_PewterGymGuy: ; 1a5da (6:65da)
-	db $00, $02
-	db $80, $0F
-	db $40, $05
-	db $80, $0B
-	db $00, $05
-	db $C0, $03
+	db NPC_MOVEMENT_DOWN, $02
+	db NPC_MOVEMENT_LEFT, $0F
+	db NPC_MOVEMENT_UP, $05
+	db NPC_MOVEMENT_LEFT, $0B
+	db NPC_MOVEMENT_DOWN, $05
+	db NPC_MOVEMENT_RIGHT, $03
 	db $FF
 
 FreezeEnemyTrainerSprite: ; 1a5e7 (6:65e7)
--- a/engine/overworld/oam.asm
+++ b/engine/overworld/oam.asm
@@ -4,7 +4,7 @@
 
 	ld a, [wUpdateSpritesEnabled]
 	dec a
-	jr z, .asm_4b1e
+	jr z, .updateEnabled
 
 	cp 0 - 1
 	ret nz
@@ -11,18 +11,19 @@
 	ld [wUpdateSpritesEnabled], a
 	jp HideSprites
 
-.asm_4b1e
+.updateEnabled
 	xor a
-	ld [$ff90], a
-.asm_4b21
-	ld [$ff8f], a
+	ld [hOAMBufferOffset], a
 
+.spriteLoop
+	ld [hSpriteOffset2], a
+
 	ld d, wSpriteStateData1 / $100
-	ld a, [$ff8f]
+	ld a, [hSpriteOffset2]
 	ld e, a
 	ld a, [de] ; c1x0
 	and a
-	jp z, .asm_4bad
+	jp z, .nextSprite
 
 	inc e
 	inc e
@@ -31,21 +32,25 @@
 	cp $ff ; off-screen (don't draw)
 	jr nz, .visible
 
-	call Func_4bd1
-	jr .asm_4bad
+	call GetSpriteScreenXY
+	jr .nextSprite
 
 .visible
-	cp $a0
+	cp $a0 ; is the sprite unchanging like an item ball or boulder?
 	jr c, .usefacing
+
+; unchanging
 	and $f
-	add $10
-	jr .asm_4b48
+	add $10 ; skip to the second half of the table which doesn't account for facing direction
+	jr .next
 
 .usefacing
 	and $f
-.asm_4b48
+
+.next
 	ld l, a
 
+; get sprite priority
 	push de
 	inc d
 	ld a, e
@@ -53,15 +58,15 @@
 	ld e, a
 	ld a, [de] ; c2x7
 	and $80
-	ld [$ff94], a ; temp store sprite priority
+	ld [hSpritePriority], a ; temp store sprite priority
 	pop de
 
+; read the entry from the table
 	ld h, 0
 	ld bc, SpriteFacingAndAnimationTable
 	add hl, hl
 	add hl, hl
 	add hl, bc
-
 	ld a, [hli]
 	ld c, a
 	ld a, [hli]
@@ -70,24 +75,25 @@
 	ld h, [hl]
 	ld l, a
 
-	call Func_4bd1
+	call GetSpriteScreenXY
 
-	ld a, [$ff90]
+	ld a, [hOAMBufferOffset]
 	ld e, a
 	ld d, wOAMBuffer / $100
-.tile
-	ld a, [$ff92]            ; temp for sprite Y position
+
+.tileLoop
+	ld a, [hSpriteScreenY]   ; temp for sprite Y position
 	add $10                  ; Y=16 is top of screen (Y=0 is invisible)
 	add [hl]                 ; add Y offset from table
 	ld [de], a               ; write new sprite OAM Y position
 	inc hl
-	ld a, [$ff91]            ; temp for sprite X position
+	ld a, [hSpriteScreenX]   ; temp for sprite X position
 	add $8                   ; X=8 is left of screen (X=0 is invisible)
 	add [hl]                 ; add X offset from table
 	inc e
 	ld [de], a               ; write new sprite OAM X position
 	inc e
-	ld a, [bc]               ; read pattern number offset (accomodates orientation (offset 0,4 or 8) and animation (offset 0 or $80))
+	ld a, [bc]               ; read pattern number offset (accommodates orientation (offset 0,4 or 8) and animation (offset 0 or $80))
 	inc bc
 	push bc
 	ld b, a
@@ -99,11 +105,11 @@
 	; Sprites $a and $b have one face (and therefore 4 tiles instead of 12).
 	; As a result, sprite $b's tile offset is less than normal.
 	cp $b
-	jr nz, .offset
+	jr nz, .notFourTileSprite
 	ld a, $a * 12 + 4
-	jr .gotoffset
+	jr .next2
 
-.offset
+.notFourTileSprite
 	; a *= 12
 	sla a
 	sla a
@@ -110,44 +116,49 @@
 	ld c, a
 	sla a
 	add c
-.gotoffset
-	add b ; which frame
+
+.next2
+	add b ; add the tile offset from the table (based on frame and facing direction)
 	pop bc
 	ld [de], a ; tile id
 	inc hl
 	inc e
 	ld a, [hl]
-	bit 1, a ; sprite priority
-	jr z, .fg
-	ld a, [$ff94] ; facing priority
+	bit 1, a ; is the tile allowed to set the sprite priority bit?
+	jr z, .skipPriority
+	ld a, [hSpritePriority]
 	or [hl]
-.fg
+.skipPriority
 	inc hl
 	ld [de], a
 	inc e
 	bit 0, a ; OAMFLAG_ENDOFDATA
-	jr z, .tile
+	jr z, .tileLoop
 
 	ld a, e
-	ld [$ff90], a
+	ld [hOAMBufferOffset], a
 
-.asm_4bad
-	ld a, [$ff8f]
+.nextSprite
+	ld a, [hSpriteOffset2]
 	add $10
 	cp $100 % $100
-	jp nz, .asm_4b21
+	jp nz, .spriteLoop
 
 	; Clear unused OAM.
-	ld a, [$ff90]
+	ld a, [hOAMBufferOffset]
 	ld l, a
 	ld h, wOAMBuffer / $100
 	ld de, $4
 	ld b, $a0
 	ld a, [wd736]
-	bit 6, a
+	bit 6, a ; jumping down ledge or fishing animation?
 	ld a, $a0
 	jr z, .clear
+
+; Don't clear the last 4 entries because they are used for the shadow in the
+; jumping down ledge animation and the rod in the fishing animation.
 	ld a, $90
+
 .clear
 	cp l
 	ret z
@@ -155,24 +166,24 @@
 	add hl, de
 	jr .clear
 
-Func_4bd1: ; 4bd1 (1:4bd1)
+GetSpriteScreenXY: ; 4bd1 (1:4bd1)
 	inc e
 	inc e
 	ld a, [de] ; c1x4
-	ld [$ff92], a
+	ld [hSpriteScreenY], a
 	inc e
 	inc e
 	ld a, [de] ; c1x6
-	ld [$ff91], a
-	ld a, $4
+	ld [hSpriteScreenX], a
+	ld a, 4
 	add e
 	ld e, a
-	ld a, [$ff92]
-	add $4
+	ld a, [hSpriteScreenY]
+	add 4
 	and $f0
 	ld [de], a ; c1xa (y)
 	inc e
-	ld a, [$ff91]
+	ld a, [hSpriteScreenX]
 	and $f0
 	ld [de], a  ; c1xb (x)
 	ret
--- a/engine/overworld/player_animations.asm
+++ b/engine/overworld/player_animations.asm
@@ -1,5 +1,5 @@
 EnterMapAnim: ; 70510 (1c:4510)
-	call InitFacingDirectionBuffer
+	call InitFacingDirectionList
 	ld a, $ec
 	ld [wSpriteStateData1 + 4], a ; player's sprite Y screen position
 	call Delay3
@@ -32,7 +32,7 @@
 	ld a, $8
 	ld [hli], a ; wPlayerSpinInPlaceAnimFrameDelayEndValue
 	ld [hl], $ff ; wPlayerSpinInPlaceAnimSoundID
-	ld hl, wcd48
+	ld hl, wFacingDirectionList
 	call PlayerSpinInPlace
 .restoreDefaultMusic
 	call PlayDefaultMusic
@@ -91,7 +91,7 @@
 	jp PlayerSpinWhileMovingUpOrDown
 
 _LeaveMapAnim: ; 705ba (1c:45ba)
-	call InitFacingDirectionBuffer
+	call InitFacingDirectionList
 	call IsPlayerStandingOnWarpPadOrHole
 	ld a, b
 	and a
@@ -134,7 +134,7 @@
 	xor a
 	ld [hli], a ; wPlayerSpinInPlaceAnimFrameDelayEndValue
 	ld [hl], (SFX_02_4d - SFX_Headers_02) / 3 ; wPlayerSpinInPlaceAnimSoundID
-	ld hl, wcd48
+	ld hl, wFacingDirectionList
 	call PlayerSpinInPlace
 	jr .spinWhileMovingUp
 .flyAnimation
@@ -214,7 +214,7 @@
 	ld [wOAMBuffer + 1 * 4], a
 	ld c, 2
 	call DelayFrames
-	; hide lower half of player's sprite
+	; hide upper half of player's sprite
 	ld a, $a0
 	ld [wOAMBuffer + 2 * 4], a
 	ld [wOAMBuffer + 3 * 4], a
@@ -231,7 +231,7 @@
 	call Delay3
 	ld a, [wFlyAnimUsingCoordList]
 	cp $ff
-	jr z, .asm_706cd
+	jr z, .skipCopyingCoords ; if the bird is flapping its wings in place
 	ld hl, wSpriteStateData1 + 4
 	ld a, [de]
 	inc de
@@ -240,7 +240,7 @@
 	ld a, [de]
 	inc de
 	ld [hl], a
-.asm_706cd
+.skipCopyingCoords
 	ld a, [wFlyAnimCounter]
 	dec a
 	ld [wFlyAnimCounter], a
@@ -252,22 +252,23 @@
 	ld hl, vNPCSprites
 	ld bc, (BANK(BirdSprite) << 8) + $0c
 	call CopyVideoData
-	ld de, BirdSprite + $c0 ; moving amination sprite
+	ld de, BirdSprite + $c0 ; moving animation sprite
 	ld hl, vNPCSprites2
 	ld bc, (BANK(BirdSprite) << 8) + $0c
 	jp CopyVideoData
 
-InitFacingDirectionBuffer: ; 706ef (1c:46ef)
+InitFacingDirectionList: ; 706ef (1c:46ef)
 	ld a, [wSpriteStateData1 + 2] ; player's sprite facing direction (image index is locked to standing images)
-	ld [wcd50], a
+	ld [wSavedPlayerFacingDirection], a
 	ld a, [wSpriteStateData1 + 4] ; player's sprite Y screen position
-	ld [wcd4f], a
+	ld [wSavedPlayerScreenY], a
 	ld hl, PlayerSpinningFacingOrder
-	ld de, wcd48
-	ld bc, $4
+	ld de, wFacingDirectionList
+	ld bc, 4
 	call CopyData
 	ld a, [wSpriteStateData1 + 2] ; player's sprite facing direction (image index is locked to standing images)
-	ld hl, wcd48
+	ld hl, wFacingDirectionList
+; find the place in the list that matches the current facing direction
 .loop
 	cp [hl]
 	inc hl
@@ -281,15 +282,16 @@
 	db SPRITE_FACING_DOWN, SPRITE_FACING_LEFT, SPRITE_FACING_UP, SPRITE_FACING_RIGHT
 
 SpinPlayerSprite: ; 70717 (1c:4717)
+; copy the current value from the list into the sprite data and rotate the list
 	ld a, [hl]
 	ld [wSpriteStateData1 + 2], a ; player's sprite facing direction (image index is locked to standing images)
 	push hl
-	ld hl, wcd48
-	ld de, wcd47
-	ld bc, $4
+	ld hl, wFacingDirectionList
+	ld de, wFacingDirectionList - 1
+	ld bc, 4
 	call CopyData
-	ld a, [wcd47]
-	ld [wcd4b], a
+	ld a, [wFacingDirectionList - 1]
+	ld [wFacingDirectionList + 3], a
 	pop hl
 	ret
 
@@ -298,11 +300,12 @@
 	ld a, [wPlayerSpinInPlaceAnimFrameDelay]
 	ld c, a
 	and $3
-	jr nz, .asm_70743
+	jr nz, .skipPlayingSound
+; when the last delay was a multiple of 4, play a sound if there is one
 	ld a, [wPlayerSpinInPlaceAnimSoundID]
 	cp $ff
 	call nz, PlaySound
-.asm_70743
+.skipPlayingSound
 	ld a, [wPlayerSpinInPlaceAnimFrameDelayDelta]
 	add c
 	ld [wPlayerSpinInPlaceAnimFrameDelay], a
@@ -330,9 +333,9 @@
 	jr PlayerSpinWhileMovingUpOrDown
 
 RestoreFacingDirectionAndYScreenPos: ; 70772 (1c:4772)
-	ld a, [wcd4f]
+	ld a, [wSavedPlayerScreenY]
 	ld [wSpriteStateData1 + 4], a
-	ld a, [wcd50]
+	ld a, [wSavedPlayerFacingDirection]
 	ld [wSpriteStateData1 + 2], a
 	ret
 
@@ -378,11 +381,11 @@
 	db INTERIOR, $55, 1 ; warp pad
 	db $FF
 
-Func_707b6: ; 707b6 (1c:47b6)
+FishingAnim: ; 707b6 (1c:47b6)
 	ld c, 10
 	call DelayFrames
 	ld hl, wd736
-	set 6, [hl]
+	set 6, [hl] ; reserve the last 4 OAM entries
 	ld de, RedSprite
 	ld hl, vNPCSprites
 	ld bc, (BANK(RedSprite) << 8) + $0c
@@ -393,7 +396,7 @@
 	ld a, [wSpriteStateData1 + 2]
 	ld c, a
 	ld b, $0
-	ld hl, FishingRodGfxProperties
+	ld hl, FishingRodOAM
 	add hl, bc
 	ld de, wOAMBuffer + $9c
 	ld bc, $4
@@ -400,48 +403,60 @@
 	call CopyData
 	ld c, 100
 	call DelayFrames
-	ld a, [wWhichTrade]
+	ld a, [wRodResponse]
 	and a
 	ld hl, NoNibbleText
-	jr z, .asm_70836
+	jr z, .done
 	cp $2
 	ld hl, NothingHereText
-	jr z, .asm_70836
-	ld b, $a
-.asm_707fe
-	ld hl, wSpriteStateData1 + 4
-	call Func_70842
+	jr z, .done
+
+; there was a bite
+
+; shake the player's sprite vertically
+	ld b, 10
+.loop
+	ld hl, wSpriteStateData1 + 4 ; player's sprite Y screen position
+	call .ShakePlayerSprite
 	ld hl, wOAMBuffer + $9c
-	call Func_70842
+	call .ShakePlayerSprite
 	call Delay3
 	dec b
-	jr nz, .asm_707fe
-	ld a, [wSpriteStateData1 + 2]
-	cp $4
-	jr nz, .asm_7081c
+	jr nz, .loop
+
+; If the player is facing up, hide the fishing rod so it doesn't overlap with
+; the exclamation bubble that will be shown next.
+	ld a, [wSpriteStateData1 + 2] ; player's sprite facing direction
+	cp SPRITE_FACING_UP
+	jr nz, .skipHidingFishingRod
 	ld a, $a0
 	ld [wOAMBuffer + $9c], a
-.asm_7081c
-	ld hl, wcd4f
+
+.skipHidingFishingRod
+	ld hl, wEmotionBubbleSpriteIndex
 	xor a
-	ld [hli], a
-	ld [hl], a
+	ld [hli], a ; player's sprite
+	ld [hl], a ; EXCLAMATION_BUBBLE
 	predef EmotionBubble
-	ld a, [wSpriteStateData1 + 2]
-	cp $4
-	jr nz, .asm_70833
+
+; If the player is facing up, unhide the fishing rod.
+	ld a, [wSpriteStateData1 + 2] ; player's sprite facing direction
+	cp SPRITE_FACING_UP
+	jr nz, .skipUnhidingFishingRod
 	ld a, $44
 	ld [wOAMBuffer + $9c], a
-.asm_70833
+
+.skipUnhidingFishingRod
 	ld hl, ItsABiteText
-.asm_70836
+
+.done
 	call PrintText
 	ld hl, wd736
-	res 6, [hl]
+	res 6, [hl] ; unreserve the last 4 OAM entries
 	call LoadFontTilePatterns
 	ret
 
-Func_70842: ; 70842 (1c:4842)
+.ShakePlayerSprite
 	ld a, [hl]
 	xor $1
 	ld [hl], a
@@ -459,7 +474,7 @@
 	TX_FAR _ItsABiteText
 	db "@"
 
-FishingRodGfxProperties: ; 70856 (1c:4856)
+FishingRodOAM: ; 70856 (1c:4856)
 ; specifies how the fishing rod should be drawn on the screen
 ; first byte = screen y coordinate
 ; second byte = screen x coordinate
--- a/engine/overworld/pokemart.asm
+++ b/engine/overworld/pokemart.asm
@@ -57,9 +57,9 @@
 	call DisplayTextBoxID ; draw money text box
 	ld hl,wNumBagItems
 	ld a,l
-	ld [wList],a
+	ld [wListPointer],a
 	ld a,h
-	ld [wList + 1],a
+	ld [wListPointer + 1],a
 	xor a
 	ld [wPrintItemPrices],a
 	ld [wCurrentMenuItem],a
@@ -136,11 +136,11 @@
 	ld a,MONEY_BOX
 	ld [wTextBoxID],a
 	call DisplayTextBoxID
-	ld hl,wStringBuffer2 + 11
+	ld hl,wItemList
 	ld a,l
-	ld [wList],a
+	ld [wListPointer],a
 	ld a,h
-	ld [wList + 1],a
+	ld [wListPointer + 1],a
 	xor a
 	ld [wCurrentMenuItem],a
 	inc a
--- a/engine/overworld/ssanne.asm
+++ b/engine/overworld/ssanne.asm
@@ -1,6 +1,6 @@
 AnimateBoulderDust: ; 79f54 (1e:5f54)
 	ld a, $1
-	ld [wcd50], a ; select the boulder dust offsets
+	ld [wWhichAnimationOffsets], a ; select the boulder dust offsets
 	ld a, [wUpdateSpritesEnabled]
 	push af
 	ld a, $ff
--- a/engine/predefs.asm
+++ b/engine/predefs.asm
@@ -57,7 +57,7 @@
 	add_predef AnimateSendingOutMon
 	add_predef ScaleSpriteByTwo
 	add_predef LoadMonBackPic
-	add_predef CopyGrowingMonTiles
+	add_predef CopyDownscaledMonTiles
 	add_predef LoadMissableObjects
 	add_predef HealParty
 	add_predef MoveAnimation; 08 play move animation
--- a/engine/predefs7.asm
+++ b/engine/predefs7.asm
@@ -1,11 +1,11 @@
 Func_1c9c6: ; 1c9c6 (7:49c6)
 	ld hl, WhichFloorText
 	call PrintText
-	ld hl, wStringBuffer2 + 11
+	ld hl, wItemList
 	ld a, l
-	ld [wList], a
+	ld [wListPointer], a
 	ld a, h
-	ld [wList + 1], a
+	ld [wListPointer + 1], a
 	ld a, [wListScrollOffset]
 	push af
 	xor a
--- a/engine/save.asm
+++ b/engine/save.asm
@@ -309,7 +309,7 @@
 
 Func_7387b: ; 7387b (1c:787b)
 	ld hl, PointerTable_73895
-	ld a, [wd5a0]
+	ld a, [wCurrentBoxNum]
 	and $7f
 	cp NUM_BOXES / 2
 	ld b, $2
@@ -341,7 +341,7 @@
 	ld a, [wCurrentMenuItem]
 	and a
 	ret nz ; return if No was chosen
-	ld hl, wd5a0
+	ld hl, wCurrentBoxNum
 	bit 7, [hl]
 	call z, Func_73a29
 	call Func_7393f
@@ -360,7 +360,7 @@
 	call Func_7390e
 	ld a, [wCurrentMenuItem]
 	set 7, a
-	ld [wd5a0], a
+	ld [wCurrentBoxNum], a
 	call Func_7387b
 	ld de, W_NUMINBOX
 	call Func_7390e
@@ -422,7 +422,7 @@
 	ld [wTopMenuItemX], a
 	xor a
 	ld [wMenuWatchMovingOutOfBounds], a
-	ld a, [wd5a0]
+	ld a, [wCurrentBoxNum]
 	and $7f
 	ld [wCurrentMenuItem], a
 	ld [wLastMenuItem], a
@@ -443,7 +443,7 @@
 	call PlaceString
 	ld hl, hFlags_0xFFF6
 	res 2, [hl]
-	ld a, [wd5a0]
+	ld a, [wCurrentBoxNum]
 	and $7f
 	cp 9
 	jr c, .asm_739a6
@@ -561,7 +561,7 @@
 	ld [MBC1SRamBankingMode], a
 	ld [MBC1SRamEnable], a
 	pop hl
-	ld a, [wd5a0]
+	ld a, [wCurrentBoxNum]
 	and $7f
 	ld c, a
 	ld b, $0
@@ -620,9 +620,9 @@
 	ret
 
 SaveHallOfFameTeams: ; 73b0d (1c:7b0d)
-	ld a, [wd5a2]
+	ld a, [wNumHoFTeams]
 	dec a
-	cp NUM_HOF_TEAMS
+	cp HOF_TEAM_CAPACITY
 	jr nc, .asm_73b28
 	ld hl, sHallOfFame
 	ld bc, HOF_TEAM
@@ -636,10 +636,10 @@
 .asm_73b28
 	ld hl, sHallOfFame + HOF_TEAM
 	ld de, sHallOfFame
-	ld bc, HOF_TEAM * (NUM_HOF_TEAMS - 1)
+	ld bc, HOF_TEAM * (HOF_TEAM_CAPACITY - 1)
 	call HallOfFame_Copy
 	ld hl, wcc5b
-	ld de, sHallOfFame + HOF_TEAM * (NUM_HOF_TEAMS - 1)
+	ld de, sHallOfFame + HOF_TEAM * (HOF_TEAM_CAPACITY - 1)
 	ld bc, HOF_TEAM
 	jr HallOfFame_Copy
 
--- a/engine/titlescreen.asm
+++ b/engine/titlescreen.asm
@@ -12,7 +12,7 @@
 	call CopyFixedLengthText
 	xor a
 	ld [hWY], a
-	ld [wd358], a
+	ld [wLetterPrintingDelayFlags], a
 	ld hl, wd732
 	ld [hli], a
 	ld [hli], a
@@ -284,7 +284,7 @@
 
 Func_44cf: ; 44cf (1:44cf)
 .wait
-	ld a, [$ff44] ; rLY
+	ld a, [rLY]
 	cp l
 	jr nz, .wait
 
@@ -292,7 +292,7 @@
 	ld [rSCX], a
 
 .wait2
-	ld a, [$ff44] ; rLY
+	ld a, [rLY]
 	cp h
 	jr z, .wait2
 	ret
--- a/engine/titlescreen2.asm
+++ b/engine/titlescreen2.asm
@@ -69,7 +69,7 @@
 
 .ScrollBetween ; 37292 (d:7292)
 .wait
-	ld a, [$ff44] ; rLY
+	ld a, [rLY] ; rLY
 	cp l
 	jr nz, .wait
 
@@ -77,7 +77,7 @@
 	ld [rSCX], a
 
 .wait2
-	ld a, [$ff44] ; rLY
+	ld a, [rLY] ; rLY
 	cp h
 	jr z, .wait2
 	ret
--- a/home.asm
+++ b/home.asm
@@ -243,7 +243,7 @@
 ; loads base stats to W_MONHDEXNUM
 ; INPUT:
 ; [wWhichPokemon] = index of pokemon within party/box
-; [wcc49] = source
+; [wMonDataLocation] = source
 ; 00: player's party
 ; 01: enemy's party
 ; 02: current box
@@ -376,8 +376,8 @@
 	call LoadHpBarAndStatusTilePatterns
 	ld hl, wd730
 	set 6, [hl] ; turn off letter printing delay
-	xor a
-	ld [wcc49], a
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation], a
 	ld [wMenuWatchMovingOutOfBounds], a
 	ld hl, wTopMenuItemY
 	inc a
@@ -384,7 +384,7 @@
 	ld [hli], a ; top menu item Y
 	xor a
 	ld [hli], a ; top menu item X
-	ld a, [wcc2b]
+	ld a, [wPartyAndBillsPCSavedMenuItem]
 	push af
 	ld [hli], a ; current menu item ID
 	inc hl
@@ -420,7 +420,7 @@
 	xor a
 	ld [wd09b],a
 	ld a,[wCurrentMenuItem]
-	ld [wcc2b],a
+	ld [wPartyAndBillsPCSavedMenuItem],a
 	ld hl,wd730
 	res 6,[hl] ; turn on letter printing delay
 	ld a,[wMenuItemToSwap]
@@ -1055,7 +1055,7 @@
 	ld a,[H_LOADEDROMBANK]
 	push af
 	callba DisplayTextIDInit ; initialization
-	ld hl,wcf11
+	ld hl,wTextPredefFlag
 	bit 0,[hl]
 	res 0,[hl]
 	jr nz,.skipSwitchToMapBank
@@ -1225,7 +1225,7 @@
 	ld [wItemListPointer],a
 	ld a,l
 	ld [wItemListPointer + 1],a
-	ld de,wStringBuffer2 + 11
+	ld de,wItemList
 .loop
 	ld a,[hli]
 	ld [de],a
@@ -1372,7 +1372,7 @@
 
 ; INPUT:
 ; [wListMenuID] = list menu ID
-; [wList] = address of the list (2 bytes)
+; [wListPointer] = address of the list (2 bytes)
 DisplayListMenuID:: ; 2be6 (0:2be6)
 	xor a
 	ld [H_AUTOBGTRANSFERENABLED],a ; disable auto-transfer
@@ -1392,9 +1392,9 @@
 	xor a
 	ld [wMenuItemToSwap],a ; 0 means no item is currently being swapped
 	ld [wListCount],a
-	ld a,[wList]
+	ld a,[wListPointer]
 	ld l,a
-	ld a,[wList + 1]
+	ld a,[wListPointer + 1]
 	ld h,a ; hl = address of the list
 	ld a,[hl] ; the first byte is the number of entries in the list
 	ld [wListCount],a
@@ -1488,9 +1488,9 @@
 ; if it's an item menu
 	sla c ; item entries are 2 bytes long, so multiply by 2
 .skipMultiplying
-	ld a,[wList]
+	ld a,[wListPointer]
 	ld l,a
-	ld a,[wList + 1]
+	ld a,[wListPointer + 1]
 	ld h,a
 	inc hl ; hl = beginning of list entries
 	ld b,0
@@ -1519,7 +1519,7 @@
 	jr .storeChosenEntry
 .pokemonList
 	ld hl,wPartyCount
-	ld a,[wList]
+	ld a,[wListPointer]
 	cp l ; is it a list of party pokemon or box pokemon?
 	ld hl,wPartyMonNicks
 	jr z,.getPokemonName
@@ -1710,9 +1710,9 @@
 	ld b,$09
 	ld c,$0e
 	call ClearScreenArea
-	ld a,[wList]
+	ld a,[wListPointer]
 	ld e,a
-	ld a,[wList + 1]
+	ld a,[wListPointer + 1]
 	ld d,a
 	inc de ; de = beginning of list entries
 	ld a,[wListScrollOffset]
@@ -1756,7 +1756,7 @@
 .pokemonPCMenu
 	push hl
 	ld hl,wPartyCount
-	ld a,[wList]
+	ld a,[wListPointer]
 	cp l ; is it a list of party pokemon or box pokemon?
 	ld hl,wPartyMonNicks
 	jr z,.getPokemonName
@@ -1801,13 +1801,13 @@
 	push af
 	push hl
 	ld hl,wPartyCount
-	ld a,[wList]
+	ld a,[wListPointer]
 	cp l ; is it a list of party pokemon or box pokemon?
-	ld a,$00
+	ld a,PLAYER_PARTY_DATA
 	jr z,.next
-	ld a,$02
+	ld a,BOX_DATA
 .next
-	ld [wcc49],a
+	ld [wMonDataLocation],a
 	ld hl,wWhichPokemon
 	ld a,[hl]
 	ld b,a
@@ -1818,7 +1818,7 @@
 	add b
 	ld [hl],a
 	call LoadMonData ; load pokemon info
-	ld a,[wcc49]
+	ld a,[wMonDataLocation]
 	and a ; is it a list of party pokemon or box pokemon?
 	jr z,.skipCopyingLevel
 .copyLevel
@@ -1914,7 +1914,7 @@
 	push de
 	ld bc,10
 	call CopyData
-	ld hl,wcd77
+	ld hl,wcd6d + 10
 	ld [hl], "@"
 	pop de
 	pop af
@@ -2090,7 +2090,7 @@
 ; INPUT:
 ; [wcf91] = item ID
 ; OUTPUT:
-; [wcd6a] = success
+; [wActionResultOrTookBattleTurn] = success
 ; 00: unsucessful
 ; 01: successful
 ; 02: not able to be used right now, no extra menu displayed (only certain items use this)
@@ -2195,7 +2195,7 @@
 	ld [MBC1RomBank], a
 	ret
 .NPCMovementScriptPointerTables
-	dw ProfOakMovementScriptPointerTable
+	dw PalletMovementScriptPointerTable
 	dw PewterMuseumGuyMovementScriptPointerTable
 	dw PewterGymGuyMovementScriptPointerTable
 .playerStepOutFromDoor
@@ -2350,9 +2350,9 @@
 .trainerEngaging
 	ld hl, W_FLAGS_D733
 	set 3, [hl]
-	ld [wcd4f], a
-	xor a
-	ld [wcd50], a
+	ld [wEmotionBubbleSpriteIndex], a
+	xor a ; EXCLAMATION_BUBBLE
+	ld [wWhichEmotionBubble], a
 	predef EmotionBubble
 	ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
 	ld [wJoyIgnore], a
@@ -2751,7 +2751,7 @@
 ; INPUT:
 ; hl = address of array
 ; OUTPUT:
-; [wWhichTrade] = if there is match, the matching array index
+; [wCoordIndex] = if there is match, the matching array index
 ; sets carry if the coordinates are in the array, clears carry if not
 ArePlayerCoordsInArray:: ; 34bf (0:34bf)
 	ld a,[W_YCOORD]
@@ -2762,13 +2762,13 @@
 
 CheckCoords:: ; 34c7 (0:34c7)
 	xor a
-	ld [wWhichTrade],a
+	ld [wCoordIndex],a
 .loop
 	ld a,[hli]
 	cp a,$ff ; reached terminator?
 	jr z,.notInArray
 	push hl
-	ld hl,wWhichTrade
+	ld hl,wCoordIndex
 	inc [hl]
 	pop hl
 .compareYCoord
@@ -2792,7 +2792,7 @@
 ; hl = address of array
 ; [H_SPRITEINDEX] = index of boulder sprite
 ; OUTPUT:
-; [wWhichTrade] = if there is match, the matching array index
+; [wCoordIndex] = if there is match, the matching array index
 ; sets carry if the coordinates are in the array, clears carry if not
 CheckBoulderCoords:: ; 34e4 (0:34e4)
 	push hl
@@ -2960,10 +2960,10 @@
 BankswitchHome:: ; 35bc (0:35bc)
 ; switches to bank # in a
 ; Only use this when in the home bank!
-	ld [wcf09],a
+	ld [wBankswitchHomeTemp],a
 	ld a,[H_LOADEDROMBANK]
-	ld [wcf08],a
-	ld a,[wcf09]
+	ld [wBankswitchHomeSavedROMBank],a
+	ld a,[wBankswitchHomeTemp]
 	ld [H_LOADEDROMBANK],a
 	ld [MBC1RomBank],a
 	ret
@@ -2970,7 +2970,7 @@
 
 BankswitchBack:: ; 35cd (0:35cd)
 ; returns from BankswitchHome
-	ld a,[wcf08]
+	ld a,[wBankswitchHomeSavedROMBank]
 	ld [H_LOADEDROMBANK],a
 	ld [MBC1RomBank],a
 	ret
@@ -3043,8 +3043,8 @@
 	ret
 
 MoveSprite:: ; 363a (0:363a)
-; move the sprite [$FF8C] with the movement pointed to by de
-; actually only copies the movement data to wcc5b for later
+; move the sprite [H_SPRITEINDEX] with the movement pointed to by de
+; actually only copies the movement data to wNPCMovementDirections for later
 	call SetSpriteMovementBytesToFF
 MoveSprite_:: ; 363d (0:363d)
 	push hl
@@ -3052,7 +3052,7 @@
 	call GetSpriteMovementByte1Pointer
 	xor a
 	ld [hl],a
-	ld hl,wcc5b
+	ld hl,wNPCMovementDirections
 	ld c,0
 
 .loop
@@ -3078,7 +3078,7 @@
 	ld [wWastedByteCD3A],a
 	ret
 
-; divides [$ffe5] by [$ffe6] and stores the quotient in [$ffe7]
+; divides [hDividend2] by [hDivisor2] and stores the quotient in [hQuotient2]
 DivideBytes:: ; 366b (0:366b)
 	push hl
 	ld hl, $ffe7
@@ -3538,18 +3538,18 @@
 
 ; This function is used to wait a short period after printing a letter to the
 ; screen unless the player presses the A/B button or the delay is turned off
-; through the [wd730] or [wd358] flags.
+; through the [wd730] or [wLetterPrintingDelayFlags] flags.
 PrintLetterDelay:: ; 38d3 (0:38d3)
 	ld a,[wd730]
 	bit 6,a
 	ret nz
-	ld a,[wd358]
+	ld a,[wLetterPrintingDelayFlags]
 	bit 1,a
 	ret z
 	push hl
 	push de
 	push bc
-	ld a,[wd358]
+	ld a,[wLetterPrintingDelayFlags]
 	bit 0,a
 	jr z,.waitOneFrame
 	ld a,[W_OPTIONS]
@@ -4586,8 +4586,8 @@
 	ld [wcf91], a
 	ld a, c
 	ld [W_CURENEMYLVL], a
-	xor a
-	ld [wcc49], a
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation], a
 	ld b, BANK(_GivePokemon)
 	ld hl, _GivePokemon
 	jp Bankswitch
@@ -4656,7 +4656,7 @@
 	ld [H_DOWNARROWBLINKCNT2], a
 	ld hl, TextPredefs
 	call SetMapTextPointer
-	ld hl, wcf11
+	ld hl, wTextPredefFlag
 	set 0, [hl]
 	call DisplayTextID
 
--- a/home/init.asm
+++ b/home/init.asm
@@ -27,7 +27,7 @@
 	ld [$ff42], a
 	ld [rSB], a
 	ld [rSC], a
-	ld [$ff4b], a
+	ld [rWX], a
 	ld [$ff4a], a
 	ld [$ff06], a
 	ld [$ff07], a
--- a/home/overworld.asm
+++ b/home/overworld.asm
@@ -106,7 +106,7 @@
 	bit 0,a
 	jr nz,.checkForOpponent
 	aCoord 8, 9
-	ld [wcf0e],a
+	ld [wTilePlayerStandingOn],a ; unused?
 	call DisplayTextID ; display either the start menu or the NPC/sign text
 	ld a,[wcc47]
 	and a
@@ -1280,7 +1280,7 @@
 
 CheckForTilePairCollisions2:: ; 0c44 (0:0c44)
 	aCoord 8, 9 ; tile the player is on
-	ld [wcf0e],a
+	ld [wTilePlayerStandingOn],a
 
 CheckForTilePairCollisions:: ; 0c4a (0:0c4a)
 	ld a,[wTileInFrontOfPlayer]
@@ -1298,7 +1298,7 @@
 	inc hl
 	jr .tilePairCollisionLoop
 .tilesetMatches
-	ld a,[wcf0e] ; tile the player is on
+	ld a,[wTilePlayerStandingOn] ; tile the player is on
 	ld b,a
 	ld a,[hl]
 	cp b
--- a/home/text.asm
+++ b/home/text.asm
@@ -368,13 +368,13 @@
 	ret
 
 TextCommandProcessor:: ; 1b40 (0:1b40)
-	ld a,[wd358]
+	ld a,[wLetterPrintingDelayFlags]
 	push af
 	set 1,a
 	ld e,a
 	ld a,[$fff4]
 	xor e
-	ld [wd358],a
+	ld [wLetterPrintingDelayFlags],a
 	ld a,c
 	ld [wcc3a],a
 	ld a,b
@@ -385,7 +385,7 @@
 	cp a, "@" ; terminator
 	jr nz,.doTextCommand
 	pop af
-	ld [wd358],a
+	ld [wLetterPrintingDelayFlags],a
 	ret
 .doTextCommand
 	push hl
--- a/hram.asm
+++ b/hram.asm
@@ -28,6 +28,25 @@
 
 hHalveItemPrices EQU $FF8E
 
+hSpriteOffset2 EQU $FF8F
+
+hOAMBufferOffset EQU $FF90
+
+hSpriteScreenX EQU $FF91
+hSpriteScreenY EQU $FF92
+
+hTilePlayerStandingOn EQU $FF93
+
+hSpritePriority EQU $FF94
+
+hNPCMovementDirections2Index EQU $FF95
+
+; CalcPositionOfPlayerRelativeToNPC
+hNPCSpriteOffset EQU $FF95
+
+; temp value used when swapping bytes
+hSwapTemp EQU $FF95
+
 ; Multiplcation and division variables are meant
 ; to overlap for back-to-back usage. Big endian.
 
@@ -46,6 +65,33 @@
 H_POWEROFTEN        EQU $FF99 ; 3 bytes
 H_SAVEDNUMTOPRINT   EQU $FF9C ; 3 bytes
 
+; distance in steps between NPC and player
+hNPCPlayerYDistance EQU $FF95
+hNPCPlayerXDistance EQU $FF96
+
+hFindPathNumSteps EQU $FF97
+
+; bit 0: set when the end of the path's Y coordinate matches the target's
+; bit 1: set when the end of the path's X coordinate matches the target's
+; When both bits are set, the end of the path is at the target's position
+; (i.e. the path has been found).
+hFindPathFlags EQU $FF98
+
+hFindPathYProgress EQU $FF99
+hFindPathXProgress EQU $FF9A
+
+; 0 = from player to NPC
+; 1 = from NPC to player
+hNPCPlayerRelativePosPerspective EQU $FF9B
+
+; bit 0:
+; 0 = target is to the south or aligned
+; 1 = target is to the north
+; bit 1:
+; 0 = target is to the east or aligned
+; 1 = target is to the west
+hNPCPlayerRelativePosFlags EQU $FF9D
+
 hSerialReceivedNewData EQU $FFA9
 
 ; $01 = using external clock
@@ -155,11 +201,23 @@
 
 H_CURRENTSPRITEOFFSET EQU $FFDA ; multiple of $10
 
+hNewPartyLength EQU $FFE4
+
+hDividend2 EQU $FFE5
+hDivisor2  EQU $FFE6
+hQuotient2 EQU $FFE7
+
+hSpriteVRAMSlotAndFacing EQU $FFE9
+
+hSpriteAnimFrameCounter EQU $FFEA
+
 H_WHOSETURN EQU $FFF3 ; 0 on player’s turn, 1 on enemy’s turn
 
 ; bit 0: draw HP fraction to the right of bar instead of below (for party menu)
 ; bit 1: menu is double spaced
 hFlags_0xFFF6 EQU $FFF6
+
+hFieldMoveMonMenuTopMenuItemX EQU $FFF7
 
 hJoyInput EQU $FFF8
 
--- a/main.asm
+++ b/main.asm
@@ -80,7 +80,7 @@
 
 
 LoadMonData_:
-; Load monster [wWhichPokemon] from list [wcc49]:
+; Load monster [wWhichPokemon] from list [wMonDataLocation]:
 ;  0: partymon
 ;  1: enemymon
 ;  2: boxmon
@@ -90,8 +90,8 @@
 
 	ld a, [wDayCareMonSpecies]
 	ld [wcf91], a
-	ld a, [wcc49]
-	cp 3
+	ld a, [wMonDataLocation]
+	cp DAYCARE_DATA
 	jr z, .GetMonHeader
 
 	ld a, [wWhichPokemon]
@@ -105,8 +105,8 @@
 
 	ld hl, wPartyMons
 	ld bc, wPartyMon2 - wPartyMon1
-	ld a, [wcc49]
-	cp 1
+	ld a, [wMonDataLocation]
+	cp ENEMY_PARTY_DATA
 	jr c, .getMonEntry
 
 	ld hl, wEnemyMons
@@ -218,9 +218,9 @@
 	ld a, [H_CURRENTSPRITEOFFSET]
 	cp b
 	jr nz, .unequal
-	jp Func_5236
+	jp DoScriptedNPCMovement
 .unequal
-	jp Func_4ed1
+	jp UpdateNPCSprite
 
 ; This detects if the current sprite (whose offset is at H_CURRENTSPRITEOFFSET)
 ; is going to collide with another sprite by looping over the other sprites.
@@ -564,7 +564,7 @@
 	ld a, 20
 	ld [W_CURENEMYLVL], a
 	xor a
-	ld [wcc49], a
+	ld [wMonDataLocation], a
 	ld [W_CURMAP], a
 	call AddPartyMon
 
@@ -808,7 +808,7 @@
 	cp a,ITEMLISTMENU
 	jp nz,DisplayListMenuIDLoop ; only rearrange item list menus
 	push hl
-	ld hl,wList
+	ld hl,wListPointer
 	ld a,[hli]
 	ld h,[hl]
 	ld l,a
@@ -854,7 +854,7 @@
 	call DelayFrames
 	push hl
 	push de
-	ld hl,wList
+	ld hl,wListPointer
 	ld a,[hli]
 	ld h,[hl]
 	ld l,a
@@ -916,7 +916,7 @@
 	jr .done
 .combineItemSlots
 	ld [hl],a ; put the sum in the second item slot
-	ld hl,wList
+	ld hl,wListPointer
 	ld a,[hli]
 	ld h,[hl]
 	ld l,a
@@ -1090,7 +1090,7 @@
 	ld [wTopMenuItemY],a ; Y position of first menu choice
 	ld a,$0b
 	ld [wTopMenuItemX],a ; X position of first menu choice
-	ld a,[wcc2d] ; remembered menu selection from last time
+	ld a,[wBattleAndStartSavedMenuItem] ; remembered menu selection from last time
 	ld [wCurrentMenuItem],a
 	ld [wLastMenuItem],a
 	xor a
@@ -1719,86 +1719,101 @@
 .HealCancelMenu ; 76d5 (1:36d5)
 	db "HEAL",$4E,"CANCEL@"
 
-DisplayFieldMoveMonMenu: ; 76e1 (1:36e1)
+DisplayFieldMoveMonMenu: ; 76e1 (1:76e1)
 	xor a
-	ld hl, wWhichTrade
-	ld [hli], a
-	ld [hli], a
-	ld [hli], a
-	ld [hli], a
-	ld [hli], a
-	ld [hl], $c
+	ld hl, wFieldMoves
+	ld [hli], a ; wFieldMoves
+	ld [hli], a ; wFieldMoves + 1
+	ld [hli], a ; wFieldMoves + 2
+	ld [hli], a ; wFieldMoves + 3
+	ld [hli], a ; wNumFieldMoves
+	ld [hl], 12 ; wFieldMovesLeftmostXCoord
 	call GetMonFieldMoves
-	ld a, [wTrainerScreenX]
+	ld a, [wNumFieldMoves]
 	and a
-	jr nz, .asm_770f
+	jr nz, .fieldMovesExist
+
+; no field moves
 	hlCoord 11, 11
-	ld b, $5
-	ld c, $7
+	ld b, 5
+	ld c, 7
 	call TextBoxBorder
 	call UpdateSprites
-	ld a, $c
-	ld [$fff7], a
+	ld a, 12
+	ld [hFieldMoveMonMenuTopMenuItemX], a
 	hlCoord 13, 12
 	ld de, PokemonMenuEntries
 	jp PlaceString
-.asm_770f
+
+.fieldMovesExist
 	push af
+
+; Calculate the text box position and dimensions based on the leftmost X coord
+; of the field move names before adjusting for the number of field moves.
 	hlCoord 0, 11
-	ld a, [wcd42]
+	ld a, [wFieldMovesLeftmostXCoord]
 	dec a
 	ld e, a
-	ld d, $0
+	ld d, 0
 	add hl, de
-	ld b, $5
-	ld a, $12
+	ld b, 5
+	ld a, 18
 	sub e
 	ld c, a
 	pop af
+
+; For each field move, move the top of the text box up 2 rows while the leaving
+; the bottom of the text box at the bottom of the screen.
 	ld de, -SCREEN_WIDTH * 2
-.asm_7725
+.textBoxHeightLoop
 	add hl, de
 	inc b
 	inc b
 	dec a
-	jr nz, .asm_7725
+	jr nz, .textBoxHeightLoop
+
+; Make space for an extra blank row above the top field move.
 	ld de, -SCREEN_WIDTH
 	add hl, de
 	inc b
+
 	call TextBoxBorder
 	call UpdateSprites
+
+; Calculate the position of the first field move name to print.
 	hlCoord 0, 12
-	ld a, [wcd42]
+	ld a, [wFieldMovesLeftmostXCoord]
 	inc a
 	ld e, a
-	ld d, $0
+	ld d, 0
 	add hl, de
 	ld de, -SCREEN_WIDTH * 2
-	ld a, [wTrainerScreenX]
-.asm_7747
+	ld a, [wNumFieldMoves]
+.calcFirstFieldMoveYLoop
 	add hl, de
 	dec a
-	jr nz, .asm_7747
+	jr nz, .calcFirstFieldMoveYLoop
+
 	xor a
-	ld [wTrainerScreenX], a
-	ld de, wWhichTrade
-.asm_7752
+	ld [wNumFieldMoves], a
+	ld de, wFieldMoves
+.printNamesLoop
 	push hl
 	ld hl, FieldMoveNames
 	ld a, [de]
 	and a
-	jr z, .asm_7776
+	jr z, .donePrintingNames
 	inc de
-	ld b, a
-.asm_775c
+	ld b, a ; index of name
+.skipNamesLoop ; skip past names before the name we want
 	dec b
-	jr z, .asm_7766
-.asm_775f
+	jr z, .reachedName
+.skipNameLoop ; skip past current name
 	ld a, [hli]
-	cp $50
-	jr nz, .asm_775f
-	jr .asm_775c
-.asm_7766
+	cp "@"
+	jr nz, .skipNameLoop
+	jr .skipNamesLoop
+.reachedName
 	ld b, h
 	ld c, l
 	pop hl
@@ -1809,16 +1824,17 @@
 	ld bc, SCREEN_WIDTH * 2
 	add hl, bc
 	pop de
-	jr .asm_7752
-.asm_7776
+	jr .printNamesLoop
+
+.donePrintingNames
 	pop hl
-	ld a, [wcd42]
-	ld [$fff7], a
+	ld a, [wFieldMovesLeftmostXCoord]
+	ld [hFieldMoveMonMenuTopMenuItemX], a
 	hlCoord 0, 12
-	ld a, [wcd42]
+	ld a, [wFieldMovesLeftmostXCoord]
 	inc a
 	ld e, a
-	ld d, $0
+	ld d, 0
 	add hl, de
 	ld de, PokemonMenuEntries
 	jp PlaceString
@@ -1842,59 +1858,58 @@
 GetMonFieldMoves: ; 77d6 (1:77d6)
 	ld a, [wWhichPokemon]
 	ld hl, wPartyMon1Moves
-	ld bc, $2c
+	ld bc, wPartyMon2 - wPartyMon1
 	call AddNTimes
 	ld d, h
 	ld e, l
-	ld c, $5
-	ld hl, wWhichTrade
-.asm_77e9
+	ld c, NUM_MOVES + 1
+	ld hl, wFieldMoves
+.loop
 	push hl
-.asm_77ea
+.nextMove
 	dec c
-	jr z, .asm_7821
-	ld a, [de] ; de is RAM address of move
+	jr z, .done
+	ld a, [de] ; move ID
 	and a
-	jr z, .asm_7821
+	jr z, .done
 	ld b, a
-	inc de ; go to next move
+	inc de
 	ld hl, FieldMoveDisplayData
-.asm_77f6
+.fieldMoveLoop
 	ld a, [hli]
 	cp $ff
-	jr z, .asm_77ea
+	jr z, .nextMove ; if the move is not a field move
 	cp b
-	jr z, .asm_7802
+	jr z, .foundFieldMove
 	inc hl
 	inc hl
-	jr .asm_77f6
-.asm_7802
+	jr .fieldMoveLoop
+.foundFieldMove
 	ld a, b
-	ld [wcd43], a
-	ld a, [hli]
-	ld b, [hl]
+	ld [wLastFieldMoveID], a
+	ld a, [hli] ; field move name index
+	ld b, [hl] ; field move leftmost X coordinate
 	pop hl
-	ld [hli], a
-	ld a, [wTrainerScreenX]
+	ld [hli], a ; store name index in wFieldMoves
+	ld a, [wNumFieldMoves]
 	inc a
-	ld [wTrainerScreenX], a
-	ld a, [wcd42]
+	ld [wNumFieldMoves], a
+	ld a, [wFieldMovesLeftmostXCoord]
 	cp b
-	jr c, .asm_781b
+	jr c, .skipUpdatingLeftmostXCoord
 	ld a, b
-	ld [wcd42], a
-.asm_781b
-	ld a, [wcd43]
+	ld [wFieldMovesLeftmostXCoord], a
+.skipUpdatingLeftmostXCoord
+	ld a, [wLastFieldMoveID]
 	ld b, a
-	jr .asm_77e9
-.asm_7821
+	jr .loop
+.done
 	pop hl
 	ret
 
-; Format: [Move id], [list priority], [leftmost tile]
+; Format: [Move id], [name index], [leftmost tile]
 ; Move id = id of move
-; List priority = lower number means higher priority when field moves are displayed
-;                 these priorities must be unique
+; Name index = index of name in FieldMoveNames
 ; Leftmost tile = -1 + tile column in which the first letter of the move's name should be displayed
 ;                 "SOFTBOILED" is $08 because it has 4 more letters than "SURF", for example, whose value is $0C
 FieldMoveDisplayData: ; 7823 (1:7823)
@@ -2050,7 +2065,7 @@
 	ld [hJoyPressed], a
 	ld [hJoyReleased], a
 	ld [hJoyHeld], a
-	ld [wcd6a], a
+	ld [wActionResultOrTookBattleTurn], a
 	ld [wd5a3], a
 	ld hl, wCardKeyDoorY
 	ld [hli], a
@@ -2911,7 +2926,7 @@
 	xor a
 	ld [wListScrollOffset],a
 	ld [wCurrentMenuItem],a
-	ld [wcc2c],a
+	ld [wBagSavedMenuItem],a
 	ld [wSavedListScrollOffset],a
 	pop hl
 	ld a,[hl] ; a = number of items in inventory
@@ -2973,20 +2988,20 @@
 ; Instead of removing relevant code, the name graphics were erased.
 
 ; Tile ids for face/badge graphics.
-	ld de, wTrainerFacingDirection
+	ld de, wBadgeOrFaceTiles
 	ld hl, .FaceBadgeTiles
 	ld bc, 8
 	call CopyData
 
 ; Booleans for each badge.
-	ld hl, wcd49
+	ld hl, wTempObtainedBadgesBooleans
 	ld bc, 8
 	xor a
 	call FillMemory
 
 ; Alter these based on owned badges.
-	ld de, wcd49
-	ld hl, wTrainerFacingDirection
+	ld de, wTempObtainedBadgesBooleans
+	ld hl, wBadgeOrFaceTiles
 	ld a, [W_OBTAINEDBADGES]
 	ld b, a
 	ld c, 8
@@ -3005,17 +3020,17 @@
 	jr nz, .CheckBadge
 
 ; Draw two rows of badges.
-	ld hl, wWhichTrade
+	ld hl, wBadgeNumberTile
 	ld a, $d8 ; [1]
 	ld [hli], a
 	ld [hl], $60 ; First name
 
 	hlCoord 2, 11
-	ld de, wcd49
+	ld de, wTempObtainedBadgesBooleans
 	call .DrawBadgeRow
 
 	hlCoord 2, 14
-	ld de, wcd49 + 4
+	ld de, wTempObtainedBadgesBooleans + 4
 ;	call .DrawBadgeRow
 ;	ret
 
@@ -3028,15 +3043,15 @@
 	push hl
 
 ; Badge no.
-	ld a, [wWhichTrade]
+	ld a, [wBadgeNumberTile]
 	ld [hli], a
 	inc a
-	ld [wWhichTrade], a
+	ld [wBadgeNumberTile], a
 
 ; Names aren't printed if the badge is owned.
 	ld a, [de]
 	and a
-	ld a, [wTrainerEngageDistance]
+	ld a, [wBadgeNameTile]
 	jr nz, .SkipName
 	call .PlaceTiles
 	jr .PlaceBadge
@@ -3047,10 +3062,10 @@
 	inc hl
 
 .PlaceBadge
-	ld [wTrainerEngageDistance], a
-	ld de, 20 - 1
+	ld [wBadgeNameTile], a
+	ld de, SCREEN_WIDTH - 1
 	add hl, de
-	ld a, [wTrainerFacingDirection]
+	ld a, [wBadgeOrFaceTiles]
 	call .PlaceTiles
 	add hl, de
 	call .PlaceTiles
@@ -3057,8 +3072,8 @@
 
 ; Shift badge array back one byte.
 	push bc
-	ld hl, wTrainerFacingDirection + 1
-	ld de, wTrainerFacingDirection
+	ld hl, wBadgeOrFaceTiles + 1
+	ld de, wBadgeOrFaceTiles
 	ld bc, 8
 	call CopyData
 	pop bc
@@ -3538,36 +3553,40 @@
 	ret
 
 _AddPartyMon: ; f2e5 (3:72e5)
+; Adds a new mon to the player's or enemy's party.
+; [wMonDataLocation] is used in an unusual way in this function.
+; If the lower nybble is 0, the mon is added to the player's party, else the enemy's.
+; If the entire value is 0, then the player is allowed to name the mon.
 	ld de, wPartyCount
-	ld a, [wcc49]
+	ld a, [wMonDataLocation]
 	and $f
-	jr z, .asm_f2f2
+	jr z, .next
 	ld de, wEnemyPartyCount
-.asm_f2f2
+.next
 	ld a, [de]
 	inc a
 	cp PARTY_LENGTH + 1
-	ret nc
+	ret nc ; return if the party is already full
 	ld [de], a
 	ld a, [de]
-	ld [$ffe4], a
+	ld [hNewPartyLength], a
 	add e
 	ld e, a
-	jr nc, .asm_f300
+	jr nc, .noCarry
 	inc d
-.asm_f300
+.noCarry
 	ld a, [wcf91]
-	ld [de], a
+	ld [de], a ; write species of new mon in party list
 	inc de
-	ld a, $ff
+	ld a, $ff ; terminator
 	ld [de], a
 	ld hl, wPartyMonOT
-	ld a, [wcc49]
+	ld a, [wMonDataLocation]
 	and $f
-	jr z, .asm_f315
+	jr z, .next2
 	ld hl, wEnemyMonOT
-.asm_f315
-	ld a, [$ffe4]
+.next2
+	ld a, [hNewPartyLength]
 	dec a
 	call SkipFixedLengthTextEntries
 	ld d, h
@@ -3575,24 +3594,24 @@
 	ld hl, wPlayerName
 	ld bc, $b
 	call CopyData
-	ld a, [wcc49]
+	ld a, [wMonDataLocation]
 	and a
-	jr nz, .asm_f33f
+	jr nz, .skipNaming
 	ld hl, wPartyMonNicks
-	ld a, [$ffe4]
+	ld a, [hNewPartyLength]
 	dec a
 	call SkipFixedLengthTextEntries
 	ld a, NAME_MON_SCREEN
 	ld [wNamingScreenType], a
 	predef AskName
-.asm_f33f
+.skipNaming
 	ld hl, wPartyMons
-	ld a, [wcc49]
+	ld a, [wMonDataLocation]
 	and $f
-	jr z, .asm_f34c
+	jr z, .next3
 	ld hl, wEnemyMons
-.asm_f34c
-	ld a, [$ffe4]
+.next3
+	ld a, [hNewPartyLength]
 	dec a
 	ld bc, wPartyMon2 - wPartyMon1
 	call AddNTimes
@@ -3604,15 +3623,17 @@
 	call GetMonHeader
 	ld hl, W_MONHEADER
 	ld a, [hli]
-	ld [de], a
+	ld [de], a ; species
 	inc de
 	pop hl
 	push hl
-	ld a, [wcc49]
+	ld a, [wMonDataLocation]
 	and $f
 	ld a, $98     ; set enemy trainer mon IVs to fixed average values
 	ld b, $88
-	jr nz, .writeFreshMonData
+	jr nz, .next4
+
+; If the mon is being added to the player's party, update the pokedex.
 	ld a, [wcf91]
 	ld [wd11e], a
 	push de
@@ -3635,24 +3656,29 @@
 	pop bc
 	ld hl, wPokedexSeen
 	call FlagAction
+
 	pop hl
 	push hl
+
 	ld a, [W_ISINBATTLE]
-	and a
+	and a ; is this a wild mon caught in battle?
 	jr nz, .copyEnemyMonData
+
+; Not wild.
 	call Random ; generate random IVs
 	ld b, a
 	call Random
-.writeFreshMonData ; f3b3
+
+.next4
 	push bc
-	ld bc, $1b
+	ld bc, wPartyMon1DVs - wPartyMon1
 	add hl, bc
 	pop bc
 	ld [hli], a
 	ld [hl], b         ; write IVs
-	ld bc, $fff4
+	ld bc, (wPartyMon1HPExp - 1) - (wPartyMon1DVs + 1)
 	add hl, bc
-	ld a, $1
+	ld a, 1
 	ld c, a
 	xor a
 	ld b, a
@@ -3664,13 +3690,13 @@
 	ld [de], a
 	inc de
 	xor a
-	ld [de], a         ; level (?)
+	ld [de], a         ; box level
 	inc de
 	ld [de], a         ; status ailments
 	inc de
 	jr .copyMonTypesAndMoves
 .copyEnemyMonData
-	ld bc, $1b
+	ld bc, wPartyMon1DVs - wPartyMon1
 	add hl, bc
 	ld a, [wEnemyMonDVs] ; copy IVs from cur enemy mon
 	ld [hli], a
@@ -3683,7 +3709,7 @@
 	ld [de], a
 	inc de
 	xor a
-	ld [de], a                 ; level (?)
+	ld [de], a                ; box level
 	inc de
 	ld a, [wEnemyMonStatus]   ; copy status ailments from cur enemy mon
 	ld [de], a
@@ -3696,7 +3722,7 @@
 	ld a, [hli]       ; type 2
 	ld [de], a
 	inc de
-	ld a, [hli]       ; unused (?)
+	ld a, [hli]       ; catch rate (held item in gen 2)
 	ld [de], a
 	ld hl, W_MONHMOVES
 	ld a, [hli]
@@ -3795,7 +3821,7 @@
 	pop bc
 	pop de
 	pop hl
-	ld a, [wcd72] ; sixth move byte = pp
+	ld a, [wcd6d + 5] ; PP is byte 5 of move data
 .empty
 	inc de
 	ld [de], a
@@ -4020,7 +4046,7 @@
 	push hl
 	srl a
 	add $2
-	ld [wcc49], a
+	ld [wMonDataLocation], a
 	call LoadMonData
 	callba CalcLevelFromExperience
 	ld a, d
@@ -4152,12 +4178,12 @@
 	push bc
 
 	ld hl, Moves
-	ld bc, $0006
+	ld bc, 6
 	call AddNTimes
 	ld de, wcd6d
 	ld a, BANK(Moves)
 	call FarCopyData
-	ld a, [wcd72] ; default pp
+	ld a, [wcd6d + 5] ; PP is byte 5 of move data
 
 	pop bc
 	pop de
@@ -4462,7 +4488,7 @@
 	inc hl
 	ld [hl], a
 
-	ld [wcc49], a
+	ld [wMonDataLocation], a
 
 	ld hl, W_OBTAINEDBADGES
 	ld [hli], a
@@ -4506,72 +4532,75 @@
 
 FindPathToPlayer: ; f8ba (3:78ba)
 	xor a
-	ld hl, $ff97
-	ld [hli], a
-	ld [hli], a
-	ld [hli], a
-	ld [hl], a
+	ld hl, hFindPathNumSteps
+	ld [hli], a ; hFindPathNumSteps
+	ld [hli], a ; hFindPathFlags
+	ld [hli], a ; hFindPathYProgress
+	ld [hl], a  ; hFindPathXProgress
 	ld hl, wNPCMovementDirections2
 	ld de, $0
 .loop
-	ld a, [$ff99]
+	ld a, [hFindPathYProgress]
 	ld b, a
-	ld a, [$ff95] ; Y distance in steps
+	ld a, [hNPCPlayerYDistance] ; Y distance in steps
 	call CalcDifference
 	ld d, a
 	and a
 	jr nz, .asm_f8da
-	ld a, [$ff98]
-	set 0, a
-	ld [$ff98], a
+	ld a, [hFindPathFlags]
+	set 0, a ; current end of path matches the player's Y coordinate
+	ld [hFindPathFlags], a
 .asm_f8da
-	ld a, [$ff9a]
+	ld a, [hFindPathXProgress]
 	ld b, a
-	ld a, [$ff96] ; X distance in steps
+	ld a, [hNPCPlayerXDistance] ; X distance in steps
 	call CalcDifference
 	ld e, a
 	and a
 	jr nz, .asm_f8ec
-	ld a, [$ff98]
-	set 1, a
-	ld [$ff98], a
+	ld a, [hFindPathFlags]
+	set 1, a ; current end of path matches the player's X coordinate
+	ld [hFindPathFlags], a
 .asm_f8ec
-	ld a, [$ff98]
-	cp $3
+	ld a, [hFindPathFlags]
+	cp $3 ; has the end of the path reached the player's position?
 	jr z, .done
+; Compare whether the X distance between the player and the current of the path
+; is greater or if the Y distance is. Then, try to reduce whichever is greater.
 	ld a, e
 	cp d
-	jr c, .asm_f90a
-	ld a, [$ff9d]
+	jr c, .yDistanceGreater
+; x distance is greater
+	ld a, [hNPCPlayerRelativePosFlags]
 	bit 1, a
-	jr nz, .asm_f900
+	jr nz, .playerIsLeftOfNPC
 	ld d, NPC_MOVEMENT_RIGHT
-	jr .asm_f902
-.asm_f900
+	jr .next1
+.playerIsLeftOfNPC
 	ld d, NPC_MOVEMENT_LEFT
-.asm_f902
-	ld a, [$ff9a]
-	add $1
-	ld [$ff9a], a
-	jr .asm_f91c
-.asm_f90a
-	ld a, [$ff9d]
+.next1
+	ld a, [hFindPathXProgress]
+	add 1
+	ld [hFindPathXProgress], a
+	jr .storeDirection
+.yDistanceGreater
+	ld a, [hNPCPlayerRelativePosFlags]
 	bit 0, a
-	jr nz, .asm_f914
+	jr nz, .playerIsAboveNPC
 	ld d, NPC_MOVEMENT_DOWN
-	jr .asm_f916
-.asm_f914
+	jr .next2
+.playerIsAboveNPC
 	ld d, NPC_MOVEMENT_UP
-.asm_f916
-	ld a, [$ff99]
-	add $1
-	ld [$ff99], a
-.asm_f91c
+.next2
+	ld a, [hFindPathYProgress]
+	add 1
+	ld [hFindPathYProgress], a
+.storeDirection
 	ld a, d
 	ld [hli], a
-	ld a, [$ff97]
+	ld a, [hFindPathNumSteps]
 	inc a
-	ld [$ff97], a
+	ld [hFindPathNumSteps], a
 	jp .loop
 .done
 	ld [hl], $ff
@@ -4579,13 +4608,13 @@
 
 CalcPositionOfPlayerRelativeToNPC: ; f929 (3:7929)
 	xor a
-	ld [$ff9d], a
+	ld [hNPCPlayerRelativePosFlags], a
 	ld a, [wSpriteStateData1 + 4] ; player's sprite screen Y position in pixels
 	ld d, a
 	ld a, [wSpriteStateData1 + 6] ; player's sprite screen X position in pixels
 	ld e, a
 	ld hl, wSpriteStateData1
-	ld a, [$ff95] ; sprite offset
+	ld a, [hNPCSpriteOffset]
 	add l
 	add $4
 	ld l, a
@@ -4599,7 +4628,7 @@
 	jr nc, .NPCSouthOfOrAlignedWithPlayer
 .NPCNorthOfPlayer
 	push hl
-	ld hl, $ff9d
+	ld hl, hNPCPlayerRelativePosFlags
 	bit 0, [hl]
 	set 0, [hl]
 	pop hl
@@ -4606,19 +4635,19 @@
 	jr .divideYDistance
 .NPCSouthOfOrAlignedWithPlayer
 	push hl
-	ld hl, $ff9d
+	ld hl, hNPCPlayerRelativePosFlags
 	bit 0, [hl]
 	res 0, [hl]
 	pop hl
 .divideYDistance
 	push hl
-	ld hl, $ffe5
+	ld hl, hDividend2
 	ld [hli], a
 	ld a, 16
 	ld [hli], a
 	call DivideBytes ; divide Y absolute distance by 16
 	ld a, [hl] ; quotient
-	ld [$ff95], a
+	ld [hNPCPlayerYDistance], a
 	pop hl
 	inc hl
 	ld b, e
@@ -4627,7 +4656,7 @@
 	jr nc, .NPCEastOfOrAlignedWithPlayer
 .NPCWestOfPlayer
 	push hl
-	ld hl, $ff9d
+	ld hl, hNPCPlayerRelativePosFlags
 	bit 1, [hl]
 	set 1, [hl]
 	pop hl
@@ -4634,28 +4663,28 @@
 	jr .divideXDistance
 .NPCEastOfOrAlignedWithPlayer
 	push hl
-	ld hl, $ff9d
+	ld hl, hNPCPlayerRelativePosFlags
 	bit 1, [hl]
 	res 1, [hl]
 	pop hl
 .divideXDistance
-	ld [$ffe5], a
+	ld [hDividend2], a
 	ld a, 16
-	ld [$ffe6], a
+	ld [hDivisor2], a
 	call DivideBytes ; divide X absolute distance by 16
-	ld a, [$ffe7] ; quotient
-	ld [$ff96], a
-	ld a, [$ff9b]
+	ld a, [hQuotient2]
+	ld [hNPCPlayerXDistance], a
+	ld a, [hNPCPlayerRelativePosPerspective]
 	and a
 	ret z
-	ld a, [$ff9d]
+	ld a, [hNPCPlayerRelativePosFlags]
 	cpl
 	and $3
-	ld [$ff9d], a
+	ld [hNPCPlayerRelativePosFlags], a
 	ret
 
 ConvertNPCMovementDirectionsToJoypadMasks: ; f9a0 (3:79a0)
-	ld a, [$ff95]
+	ld a, [hNPCMovementDirections2Index]
 	ld [wNPCMovementDirections2Index], a
 	dec a
 	ld de, wSimulatedJoypadStatesEnd
@@ -4669,9 +4698,9 @@
 	call ConvertNPCMovementDirectionToJoypadMask
 	ld [de], a
 	inc de
-	ld a, [$ff95]
+	ld a, [hNPCMovementDirections2Index]
 	dec a
-	ld [$ff95], a
+	ld [hNPCMovementDirections2Index], a
 	jr nz, .loop
 	ret
 
--- a/scripts/ceruleanhouse2.asm
+++ b/scripts/ceruleanhouse2.asm
@@ -20,11 +20,11 @@
 	call PrintText
 	ld hl, BadgeItemList
 	call LoadItemList
-	ld hl, wStringBuffer2 + 11
+	ld hl, wItemList
 	ld a, l
-	ld [wList], a
+	ld [wListPointer], a
 	ld a, h
-	ld [wList + 1], a
+	ld [wListPointer + 1], a
 	xor a
 	ld [wPrintItemPrices], a
 	ld [wMenuItemToSwap], a
--- a/scripts/daycarem.asm
+++ b/scripts/daycarem.asm
@@ -35,11 +35,11 @@
 	pop af
 	ld hl, DayCareMText_56437
 	jp c, DayCareMScript_56409
-	callab Func_2171b
+	callab KnowsHMMove
 	ld hl, DayCareMText_5644a
 	jp c, DayCareMScript_56409
 	xor a
-	ld [wcc2b], a
+	ld [wPartyAndBillsPCSavedMenuItem], a
 	ld a, [wWhichPokemon]
 	ld hl, wPartyMonNicks
 	call GetPartyMonName
@@ -62,8 +62,8 @@
 	xor a
 	ld hl, W_DAYCAREMONNAME
 	call GetPartyMonName
-	ld a, $3
-	ld [wcc49], a
+	ld a, DAYCARE_DATA
+	ld [wMonDataLocation], a
 	call LoadMonData
 	callab CalcLevelFromExperience
 	ld a, d
--- a/scripts/halloffameroom.asm
+++ b/scripts/halloffameroom.asm
@@ -21,13 +21,13 @@
 
 HallofFameRoomScript2: ; 5a4bb (16:64bb)
 	call Delay3
-	ld a, [wd358]
+	ld a, [wLetterPrintingDelayFlags]
 	push af
 	xor a
 	ld [wJoyIgnore], a
 	predef HallOfFamePC
 	pop af
-	ld [wd358], a
+	ld [wLetterPrintingDelayFlags], a
 	ld hl, W_FLAGS_D733
 	res 1, [hl]
 	inc hl
--- a/scripts/oakslab.asm
+++ b/scripts/oakslab.asm
@@ -333,14 +333,14 @@
 	ld [$ff8c], a
 	call DisplayTextID
 	ld a, $1
-	ld [$ff9b], a
+	ld [hNPCPlayerRelativePosPerspective], a
 	ld a, $1
 	swap a
-	ld [$ff95], a
+	ld [hNPCSpriteOffset], a
 	predef CalcPositionOfPlayerRelativeToNPC
-	ld a, [$ff95]
+	ld a, [hNPCPlayerYDistance]
 	dec a
-	ld [$ff95], a
+	ld [hNPCPlayerYDistance], a
 	predef FindPathToPlayer
 	ld de, wNPCMovementDirections2
 	ld a, $1
@@ -898,9 +898,9 @@
 	call PrintText
 	ld hl, OaksLabReceivedMonText
 	call PrintText
-	xor a
-	ld [wcc49], a
-	ld a, $5
+	xor a ; PLAYER_PARTY_DATA
+	ld [wMonDataLocation], a
+	ld a, 5
 	ld [W_CURENEMYLVL], a
 	ld a, [wcf91]
 	ld [wd11e], a
--- a/scripts/pallettown.asm
+++ b/scripts/pallettown.asm
@@ -33,7 +33,7 @@
 	ld a,$FF
 	call PlaySound ; stop music
 	ld a, BANK(Music_MeetProfOak)
-	ld c,a ; song bank
+	ld c,a
 	ld a, MUSIC_MEET_PROF_OAK ; “oak appears” music
 	call PlayMusic
 	ld a,$FC
@@ -50,7 +50,7 @@
 	xor a
 	ld [wcf0d],a
 	ld a,1
-	ld [$FF8C],a
+	ld [hSpriteIndexOrTextID],a
 	call DisplayTextID
 	ld a,$FF
 	ld [wJoyIgnore],a
@@ -65,8 +65,8 @@
 
 PalletTownScript2: ; 18ed2 (6:4ed2)
 	ld a,1
-	ld [$FF8C],a
-	ld a,4
+	ld [H_SPRITEINDEX],a
+	ld a,SPRITE_FACING_UP
 	ld [$FF8D],a
 	call SetSpriteFacingDirectionAndDelay
 	call Delay3
@@ -73,17 +73,17 @@
 	ld a,1
 	ld [W_YCOORD],a
 	ld a,1
-	ld [$FF9B],a
+	ld [hNPCPlayerRelativePosPerspective],a
 	ld a,1
 	swap a
-	ld [$FF95],a
+	ld [hNPCSpriteOffset],a
 	predef CalcPositionOfPlayerRelativeToNPC
-	ld hl,$FF95
+	ld hl,hNPCPlayerYDistance
 	dec [hl]
 	predef FindPathToPlayer ; load Oak’s movement into wNPCMovementDirections2
 	ld de,wNPCMovementDirections2
 	ld a,1 ; oak
-	ld [$FF8C],a
+	ld [H_SPRITEINDEX],a
 	call MoveSprite
 	ld a,$FF
 	ld [wJoyIgnore],a
@@ -104,8 +104,9 @@
 	ld a,$FC
 	ld [wJoyIgnore],a
 	ld a,1
-	ld [$FF8C],a
+	ld [hSpriteIndexOrTextID],a
 	call DisplayTextID
+; set up movement script that causes the player to follow Oak to his lab
 	ld a,$FF
 	ld [wJoyIgnore],a
 	ld a,1
@@ -124,7 +125,7 @@
 
 PalletTownScript4: ; 18f4b (6:4f4b)
 	ld a,[wNPCMovementScriptPointerTableNum]
-	and a
+	and a ; is the movement script over?
 	ret nz
 
 	; trigger the next script
@@ -186,9 +187,9 @@
 	ld c,10
 	call DelayFrames
 	xor a
-	ld [wcd4f],a
-	ld [wcd50],a
-	predef EmotionBubble ; display ! over head
+	ld [wEmotionBubbleSpriteIndex],a ; player's sprite
+	ld [wWhichEmotionBubble],a ; EXCLAMATION_BUBBLE
+	predef EmotionBubble
 	ld a,4
 	ld [wd528],a
 	jp TextScriptEnd
--- a/scripts/route22.asm
+++ b/scripts/route22.asm
@@ -79,9 +79,9 @@
 
 .firstRivalBattle
 	ld a, $1
-	ld [wcd4f], a
-	xor a
-	ld [wcd50], a
+	ld [wEmotionBubbleSpriteIndex], a
+	xor a ; EXCLAMATION_BUBBLE
+	ld [wWhichEmotionBubble], a
 	predef EmotionBubble
 	ld a, [wWalkBikeSurfState]
 	and a
@@ -218,9 +218,9 @@
 
 Route22Script_5104e: ; 5104e (14:504e)
 	ld a, $2
-	ld [wcd4f], a
-	xor a
-	ld [wcd50], a
+	ld [wEmotionBubbleSpriteIndex], a
+	xor a ; EXCLAMATION_BUBBLE
+	ld [wWhichEmotionBubble], a
 	predef EmotionBubble
 	ld a, [wWalkBikeSurfState]
 	and a
--- a/scripts/vermiliondock.asm
+++ b/scripts/vermiliondock.asm
@@ -167,13 +167,13 @@
 	ld h, $0
 	ld l, $80
 .asm_1dc86
-	ld a, [$ff44]
+	ld a, [rLY]
 	cp l
 	jr nz, .asm_1dc86
 	ld a, h
 	ld [$ff43], a
 .asm_1dc8e
-	ld a, [$ff44]
+	ld a, [rLY]
 	cp h
 	jr z, .asm_1dc8e
 	ret
--- a/sram.asm
+++ b/sram.asm
@@ -6,7 +6,7 @@
 
 	ds $100
 
-sHallOfFame:: ds HOF_TEAM * NUM_HOF_TEAMS ; a598
+sHallOfFame:: ds HOF_TEAM * HOF_TEAM_CAPACITY ; a598
 
 
 SECTION "Save Data", SRAM, BANK[1]
--- a/text.asm
+++ b/text.asm
@@ -1816,7 +1816,7 @@
 	TX_RAM wcf4b
 	text " was"
 	line "stored in Box @"
-	TX_RAM wWhichTrade
+	TX_RAM wBoxNumString
 	text "."
 	prompt
 
--- a/wram.asm
+++ b/wram.asm
@@ -236,15 +236,32 @@
 ; id of previously selected menu item
 	ds 1
 
-; group these 3 addresses together because of an ld a,[hli]
-wcc2b:: ds 1 ; used in party menu
-wcc2c:: ds 1 ; used in item related menus (inventory, pc)
-wcc2d:: ds 1 ; also used in inventory, supposed to save an item id
+wPartyAndBillsPCSavedMenuItem:: ; cc2b
+; It is mainly used by the party menu to remember the cursor position while the
+; menu isn't active.
+; It is also used to remember the cursor position of mon lists (for the
+; withdraw/deposit/release actions) in Bill's PC so that it doesn't get lost
+; when you choose a mon from the list and a sub-menu is shown. It's reset when
+; you return to the main Bill's PC menu.
+	ds 1
 
+wBagSavedMenuItem:: ; cc2c
+; It is used by the bag list to remember the cursor position while the menu
+; isn't active.
+	ds 1
+
+wBattleAndStartSavedMenuItem:: ; cc2d
+; It is used by the start menu to remember the cursor position while the menu
+; isn't active.
+; The battle menu uses it so that the cursor position doesn't get lost when
+; a sub-menu is shown. It's reset at the start of each battle.
+	ds 1
+
 wPlayerMoveListIndex:: ; cc2e
 	ds 1
 
 wPlayerMonNumber:: ; cc2f
+; index in party of currently battling mon
 	ds 1
 
 wMenuCursorLocation:: ; cc30
@@ -326,7 +343,17 @@
 ; $00 = player mons
 ; $01 = enemy mons
 
-wcc49:: ds 1 ; used in some pokemon related stuff (some kind of species storage byte)
+wMonDataLocation:: ; cc49
+; 0 = player's party
+; 1 = enemy party
+; 2 = current box
+; 3 = daycare
+; 4 = in-battle mon
+;
+; AddPartyMon uses it slightly differently.
+; If the lower nybble is 0, the mon is added to the player's party, else the enemy's.
+; If the entire value is 0, then the player is allowed to name the mon.
+	ds 1
 
 wMenuWrappingEnabled:: ; cc4a
 ; set to 1 if you can go from the bottom to the top or top to bottom of a menu
@@ -369,6 +396,8 @@
 wAnimationType:: ; cc5b
 ; values between 0-6. Shake screen horizontally, shake screen vertically, blink Pokemon...
 
+wNPCMovementDirections:: ; cc5b
+
 wcc5b:: ds 1 ; these upcoming values below are miscellaneous storage values
 wcc5c:: ds 1 ; used in pokedex evaluation as well
 wcc5d:: ds 1 ; used in pokedex evaluation
@@ -388,7 +417,9 @@
 ; temporary buffer when swapping party mon data
 	ds 10
 
-wcca1:: ds 49 ; used in overworld npc movement
+wNumStepsToTake:: ; cca1
+; used in Pallet Town scripted movement
+	ds 49
 
 wRLEByteCount:: ; ccd2
 	ds 1
@@ -398,6 +429,8 @@
 ; the list starts above this address and extends downwards in memory until here
 ; overloaded with below labels
 
+wParentMenuItem:: ; ccd3
+
 wccd3:: ds 1 ; used in battle, pokemon, PC and game corner stuff
 wForceEvolution::
 wccd4:: ds 1 ; has a direct reference for simulated joypad stuff in vermillion and seafoam
@@ -601,6 +634,32 @@
 
 	ds 1
 
+wChargeMoveNum:: ; cd3d
+
+wCoordIndex:: ; cd3d
+
+wOptionsTextSpeedCursorX:: ; cd3d
+
+wBoxNumString:: ; cd3d
+
+wTrainerInfoTextBoxWidthPlus1:: ; cd3d
+
+wSwappedMenuItem:: ; cd3d
+
+wHoFMonSpecies:: ; cd3d
+
+wFieldMoves:: ; cd3d
+; 4 bytes
+; the current mon's field moves
+
+wBadgeNumberTile:: ; cd3d
+; tile ID of the badge number being drawn
+
+wRodResponse:: ; cd3d
+; 0 = no bite
+; 1 = bite
+; 2 = no fish on map
+
 wWhichTownMapLocation:: ; cd3d
 
 wStoppingWhichSlotMachineWheel:: ; cd3d
@@ -630,6 +689,18 @@
 wTrainerSpriteOffset:: ; cd3d
 	ds 1
 
+wOptionsBattleAnimCursorX:: ; cd3e
+
+wTrainerInfoTextBoxWidth:: ; cd3e
+
+wHoFPartyMonIndex:: ; cd3e
+
+wNumCreditsMonsDisplayed:: ; cd3e
+; the number of credits mons that have been displayed so far
+
+wBadgeNameTile:: ; cd3e
+; first tile ID of the name being drawn
+
 wFlyLocationsList:: ; cd3e
 ; 11 bytes plus $ff sentinel values at each end
 
@@ -650,6 +721,17 @@
 wTrainerEngageDistance:: ; cd3e
 	ds 1
 
+wOptionsBattleStyleCursorX:: ; cd3f
+
+wTrainerInfoTextBoxNextRowOffset:: ; cd3f
+
+wHoFMonLevel:: ; cd3f
+
+wBadgeOrFaceTiles:: ; cd3f
+; 8 bytes
+; a list of the first tile IDs of each badge or face (depending on whether the
+; badge is owned) to be drawn on the trainer screen
+
 wSlotMachineWheel2Offset:: ; cd3f
 
 wNameOfPlayerMonToBeTraded:: ; cd3f
@@ -666,6 +748,11 @@
 wcd3f:: ; used with daycare text for money amount
 	ds 1
 
+wHoFMonOrPlayer:: ; cd40
+; show mon or show player?
+; 0 = mon
+; 1 = player
+
 wSlotMachineWheel3Offset:: ; cd40
 
 wPlayerSpinInPlaceAnimSoundID:: ; cd40
@@ -679,9 +766,11 @@
 
 wHiddenObjectX:: ; cd41
 
-wSlotMachineWinningSymbol:: ; cd42
+wSlotMachineWinningSymbol:: ; cd41
 ; the OAM tile number of the upper left corner of the winning symbol minus 2
 
+wNumFieldMoves:: ; cd41
+
 wSlotMachineWheel1BottomTile:: ; cd41
 
 wTrainerScreenX:: ; cd41
@@ -688,14 +777,20 @@
 	ds 1
 ; a lot of the uses for these values use more than the said address
 
+wHoFTeamNo:: ; cd42
+
 wSlotMachineWheel1MiddleTile:: ; cd42
 
+wFieldMovesLeftmostXCoord:: ; cd42
+
 wcd42:: ds 1 ; used in pewter center script, printing field mon moves, slot machines and HoF PC
 
+wLastFieldMoveID:: ; cd43
+; unused
+
 wSlotMachineWheel1TopTile:: ; cd43
+	ds 1
 
-wcd43:: ds 1 ; slot machine stuff and GetMonFieldMoves
-
 wSlotMachineWheel2BottomTile:: ; cd44
 	ds 1
 
@@ -709,17 +804,27 @@
 wSlotMachineWheel2TopTile:: ; cd46
 	ds 1
 
+wBattleTransitionSpiralDirection:: ; cd47
+; 0 = outward, 1 = inward
+
 wSlotMachineWheel3BottomTile:: ; cd47
+	ds 1
 
-wcd47:: ds 1 ; used in slot machine and spinning player sprite
-
 wSlotMachineWheel3MiddleTile:: ; cd48
 
-wcd48:: ds 1 ; same as above
+wFacingDirectionList:: ; cd48
+; 4 bytes (also, the byte before the start of the list (cd47) is used a temp
+;          variable when the list is rotated)
+; used when spinning the player's sprite
+	ds 1
 
 wSlotMachineWheel3TopTile:: ; cd49
 
-wcd49:: ds 1 ; used in slot machine, displaying the gym leaders/badges on the trainer card, and displaying the town map
+wTempObtainedBadgesBooleans::
+; 8 bytes
+; temporary list created when displaying the badges on the trainer screen
+; one byte for each badge; 0 = not obtained, 1 = obtained
+	ds 1
 
 wTempCoins2:: ; cd4a
 ; 2 bytes
@@ -727,12 +832,8 @@
 
 wPayoutCoins:: ; cd4a
 ; 2 bytes
-	ds 1
+	ds 2
 
-wcd4b:: ; cd4b
-; used in player animations
-	ds 1
-
 wTradedPlayerMonOTID:: ; cd4c
 
 wSlotMachineFlags:: ; cd4c
@@ -744,26 +845,38 @@
 wSlotMachineWheel1SlipCounter:: ; cd4d
 ; wheel 1 can "slip" while this is non-zero
 
-wcd4d:: ds 1 ; used with cut and slot machine
+wCutTile:: ; cd4d
+; $3d = tree tile
+; $52 = grass tile
+	ds 1
 
 wSlotMachineWheel2SlipCounter:: ; cd4e
 ; wheel 2 can "slip" while this is non-zero
 
 wTradedEnemyMonOT:: ; cd4e
+	ds 1
 
-wcd4e:: ds 1 ; used with in-game trades and slot machine
+wSavedPlayerScreenY:: ; cd4f
 
 wSlotMachineRerollCounter:: ; cd4f
 ; The remaining number of times wheel 3 will roll down a symbol until a match is
 ; found, when winning is enabled. It's initialized to 4 each bet.
 
-wcd4f:: ds 1 ; used with in-game trades, emotion bubbles, and player animations
+wEmotionBubbleSpriteIndex:: ; cd4f
+; the index of the sprite the emotion bubble is to be displayed above
+	ds 1
 
+wWhichEmotionBubble:: ; cd50
+
 wSlotMachineBet:: ; cd50
 ; how many coins the player bet on the slot machine (1 to 3)
 
-wcd50:: ds 9 ; used with in-game trades, emotion bubbles, and player and miscellaneous sprite animations
+wSavedPlayerFacingDirection:: ; cd50
 
+wWhichAnimationOffsets:: ; cd50
+; 0 = cut animation, 1 = boulder dust animation
+	ds 9
+
 wTradedEnemyMonOTID:: ; cd59
 	ds 2
 
@@ -786,6 +899,7 @@
 wFlags_0xcd60:: ; cd60
 ; bit 0: is player engaged by trainer (to avoid being engaged by multiple trainers simultaneously)
 ; bit 1: boulder dust animation (from using Strength) pending
+; bit 3: using generic PC
 ; bit 5: don't play sound when A or B is pressed in menu
 ; bit 6: tried pushing against boulder once (you need to push twice before it will move)
 	ds 1
@@ -792,20 +906,43 @@
 
 	ds 9
 
-wcd6a:: ds 1 ; used as the output of the outcome of an item (successful, unsuccessful, can't be used now, etc.)
+wActionResultOrTookBattleTurn:: ; cd6a
+; This has overlapping related uses.
+; When the player tries to use an item or use certain field moves, 0 is stored
+; when the attempt fails and 1 is stored when the attempt succeeds.
+; In addition, some items store 2 for certain types of failures, but this
+; cannot happen in battle.
+; In battle, a non-zero value indicates the player has taken their turn using
+; something other than a move (e.g. using an item or switching pokemon).
+; So, when an item is successfully used in battle, this value becomes non-zero
+; and the player is not allowed to make a move and the two uses are compatible.
+	ds 1
 
 wJoyIgnore:: ; cd6b
 ; Set buttons are ignored.
 	ds 1
 
-; as well as the said function, these values are used as a buffer for PlaceString
-wcd6c:: ds 1 ; used in pokemon status screen and battle stuff
-wcd6d:: ds 4 ; used solely for PlaceString
-wcd71:: ds 1 ; used with pokemon status screen
-wcd72:: ds 5 ; used with restoring PP
-wcd77:: ds 1 ; used as an end terminator for GetMonName: (@ is written to this location)
-wcd78:: ds 9 ; also used with restoring PP
+wDownscaledMonSize:: ; cd6c
+; size of downscaled mon pic used in pokeball entering/exiting animation
+; $00 = 5×5
+; $01 = 3×3
 
+wNumMovesMinusOne:: ; cd6c
+; FormatMovesString stores the number of moves minus one here
+	ds 1
+
+wcd6d:: ds 4 ; buffer for various data
+
+wStatusScreenCurrentPP:: ; cd71
+; temp variable used to print a move's current PP on the status screen
+	ds 1
+
+	ds 6
+
+wNormalMaxPPList:: ; cd78
+; list of normal max PP (without PP up) values
+	ds 9
+
 wSerialOtherGameboyRandomNumberListBlock:: ; cd81
 ; buffer for transferring the random number list generated by the other gameboy
 
@@ -835,16 +972,25 @@
 	ds 1
 	ds 7
 
-wcf05:: ds 1 ; used with enemy using healing moves
-wcf06:: ds 1 ; used with healing items as a storage value to store wWhichPokemon
+wAIItem:: ; cf05
+; the item that the AI used
+	ds 1
 
+wUsedItemOnWhichPokemon:: ; cf05
+	ds 1
+
 wAnimSoundID:: ; cf07
 ; sound ID during battle animations
 	ds 1
 
-wcf08:: ds 1 ; used as a storage value for the bank to return to after a BankswitchHome (bankswitch in homebank)
-wcf09:: ds 1 ; used as a temp storage value for the bank to switch to
+wBankswitchHomeSavedROMBank:: ; cf08
+; used as a storage value for the bank to return to after a BankswitchHome (bankswitch in homebank)
+	ds 1
 
+wBankswitchHomeTemp:: ; cf09
+; used as a temp storage value for the bank to switch to
+	ds 1
+
 wBoughtOrSoldItemInMart:: ; cf0a
 ; 0 = nothing bought or sold in pokemart
 ; 1 = bought or sold something in pokemart
@@ -862,7 +1008,11 @@
 	ds 1
 
 wcf0d:: ds 1 ; used with some overworld scripts (not exactly sure what it's used for)
-wcf0e:: ds 1 ; used with some overworld collison check
+
+wTilePlayerStandingOn:: ; cf0e
+; used in CheckForTilePairCollisions2 to store the tile the player is on
+	ds 1
+
 wcf0f:: ds 1 ; used with moving overworld sprites
 
 wNPCMovementScriptFunctionNum:: ; cf10
@@ -870,7 +1020,10 @@
 ; wNPCMovementScriptPointerTableNum
 	ds 1
 
-wcf11:: ds 1 ; used as a flag if the game needs to switch to the bank which the map is in when displaying a text id (flag is set during predefs)
+wTextPredefFlag:: ; cf11
+; bit 0: set when printing a text predef so that DisplayTextID doesn't switch
+;        to the current map's bank
+	ds 1
 
 wPredefParentBank:: ; cf12
 	ds 1
@@ -887,8 +1040,11 @@
 ; sprite offset of sprite being controlled by NPC movement script
 	ds 1
 
-wcf18:: ds 2 ; used with overworld movement
+wScriptedNPCWalkCounter:: ; cf18
+	ds 1
 
+	ds 1
+
 wGBC:: ; cf1a
 	ds 1
 
@@ -912,15 +1068,15 @@
 	ds 17
 
 wGymCityName:: ; cf5f
-wStringBuffer1:: ; cf5f
-	ds 16 + 1
+	ds 17
+
 wGymLeaderName:: ; cf70
-wStringBuffer2:: ; cf70
-	ds 16 + 1
-wStringBuffer3:: ; cf81
-	ds 9 + 1
+	ds 11
 
-wList:: ; cf8b
+wItemList:: ; cf7b
+	ds 16
+
+wListPointer:: ; cf8b
 	ds 2
 
 wcf8d:: ds 1 ; used in GetMonName
@@ -993,7 +1149,10 @@
 wcfca:: ds 1 ; also used with audio too
 
 wUpdateSpritesEnabled:: ; cfcb
-; $01 enables UpdateSprites; anything else disables it
+; $00 = causes sprites to be hidden and the value to change to $ff
+; $01 = enabled
+; $ff = disabled
+; other values aren't used
 	ds 1
 
 W_ENEMYMOVENUM:: ; cfcc
@@ -1654,7 +1813,12 @@
 
 	ds 1
 
-wd358:: ds 1 ; bit 0 set = no delay when printing text (W_OPTIONS is still checked though)
+wLetterPrintingDelayFlags:: ; d358
+; bit 0: If 0, limit the delay to 1 frame. Note that this has no effect if
+;        the delay has been disabled entirely through bit 1 of this variable
+;        or bit 6 of wd730.
+; bit 1: If 0, no delay.
+	ds 1
 
 wPlayerID:: ; d359
 	ds 2
@@ -1862,8 +2026,13 @@
 	ds 50 * 2
 	ds 1 ; end
 
-wd5a0:: ds 2 ; current box number
-wd5a2:: ds 1 ; number of HOF teams
+wCurrentBoxNum:: ; d5a0
+	ds 2
+
+wNumHoFTeams:: ; d5a2
+; number of HOF teams
+	ds 1
+
 wd5a3:: ds 1 ; unused? (written to when loading map data)
 
 wPlayerCoins:: ; d5a4
@@ -2183,13 +2352,16 @@
 
 wd72d:: ds 1 ; misc temp flags? (in some scripts, bit 6 and 7 set after a special battle (e.g. gym leaders) has been won)
              ; also used as a start menu flag
-wd72e:: ds 2 ; more temp misc flags, used with npc movement, main menu and other stuff
 
+wd72e::
+; bit 7: set if scripted NPC movement has been initialised
+	ds 2 ; more temp misc flags, used with npc movement, main menu and other stuff
+
 wd730::
 ; bit 0: NPC sprite being moved by script
 ; bit 5: ignore joypad input
 ; bit 6: print text with no delay between each letter
-; bit 7: set if joypad states are being simulated in the overworld
+; bit 7: set if joypad states are being simulated in the overworld or an NPC's movement is being scripted
 	ds 1
 
 	ds 1
@@ -2219,7 +2391,8 @@
 ; bit 0: check if the player is standing on a door and make him walk down a step if so
 ; bit 1: the player is currently stepping down from a door
 ; bit 2: standing on a warp
-; bit 6: jumping down a ledge
+; bit 6: jumping down a ledge / fishing animation
+; bit 7: player sprite spinning due to spin tiles (Rocket hidehout / Viridian Gym)
 	ds 1
 
 wCompletedInGameTradeFlags:: ; d737