shithub: pokecrystal

Download patch

ref: c88c4a834094e91f1505eab0e22294963e1dd987
parent: 826e070f0443b50ff31a49b4faf7c66577f1e26e
author: Rangi <remy.oukaour+rangi42@gmail.com>
date: Tue Nov 3 14:53:07 EST 2020

Identify more uses of wBuffer1-6

--- a/engine/battle/ai/move.asm
+++ b/engine/battle/ai/move.asm
@@ -1,5 +1,5 @@
 AIChooseMove:
-; Score each move in wEnemyMonMoves starting from wBuffer1. Lower is better.
+; Score each move of wEnemyMonMoves in wEnemyAIMoveScores. Lower is better.
 ; Pick the move with the lowest score.
 
 ; Wildmons attack at random.
@@ -17,7 +17,7 @@
 
 ; The default score is 20. Unusable moves are given a score of 80.
 	ld a, 20
-	ld hl, wBuffer1
+	ld hl, wEnemyAIMoveScores
 	ld [hli], a
 	ld [hli], a
 	ld [hli], a
@@ -37,7 +37,7 @@
 	inc hl
 	jr .CheckDisabledMove
 .ScoreDisabledMove:
-	ld hl, wBuffer1
+	ld hl, wEnemyAIMoveScores
 	ld b, 0
 	add hl, bc
 	ld [hl], 80
@@ -44,7 +44,7 @@
 
 ; Don't pick moves with 0 PP.
 .CheckPP:
-	ld hl, wBuffer1 - 1
+	ld hl, wEnemyAIMoveScores - 1
 	ld de, wEnemyMonPP
 	ld b, 0
 .CheckMovePP:
@@ -117,7 +117,7 @@
 
 ; Decrement the scores of all moves one by one until one reaches 0.
 .DecrementScores:
-	ld hl, wBuffer1
+	ld hl, wEnemyAIMoveScores
 	ld de, wEnemyMonMoves
 	ld c, NUM_MOVES
 
@@ -152,7 +152,7 @@
 	cp NUM_MOVES + 1
 	jr nz, .move_loop
 
-	ld hl, wBuffer1
+	ld hl, wEnemyAIMoveScores
 	ld de, wEnemyMonMoves
 	ld c, NUM_MOVES
 
@@ -182,7 +182,7 @@
 
 ; Randomly choose one of the moves with a score of 1
 .ChooseMove:
-	ld hl, wBuffer1
+	ld hl, wEnemyAIMoveScores
 	call Random
 	maskbits NUM_MOVES
 	ld c, a
--- a/engine/battle/ai/scoring.asm
+++ b/engine/battle/ai/scoring.asm
@@ -6,7 +6,7 @@
 ;  -Using status-only moves if the player can't be statused
 ;  -Using moves that fail if they've already been used
 
-	ld hl, wBuffer1 - 1
+	ld hl, wEnemyAIMoveScores - 1
 	ld de, wEnemyMonMoves
 	ld b, NUM_MOVES + 1
 .checkmove
@@ -73,7 +73,7 @@
 ; 50% chance to greatly encourage stat-down moves during the first turn of player's Pokemon.
 ; Almost 90% chance to greatly discourage stat-modifying moves otherwise.
 
-	ld hl, wBuffer1 - 1
+	ld hl, wEnemyAIMoveScores - 1
 	ld de, wEnemyMonMoves
 	ld b, NUM_MOVES + 1
 .checkmove
@@ -147,7 +147,7 @@
 ; Discourage not very effective moves unless
 ; all damaging moves are of the same type.
 
-	ld hl, wBuffer1 - 1
+	ld hl, wEnemyAIMoveScores - 1
 	ld de, wEnemyMonMoves
 	ld b, NUM_MOVES + 1
 .checkmove
@@ -234,7 +234,7 @@
 AI_Offensive:
 ; Greatly discourage non-damaging moves.
 
-	ld hl, wBuffer1 - 1
+	ld hl, wEnemyAIMoveScores - 1
 	ld de, wEnemyMonMoves
 	ld b, NUM_MOVES + 1
 .checkmove
@@ -261,7 +261,7 @@
 AI_Smart:
 ; Context-specific scoring.
 
-	ld hl, wBuffer1
+	ld hl, wEnemyAIMoveScores
 	ld de, wEnemyMonMoves
 	ld b, NUM_MOVES + 1
 .checkmove
@@ -518,7 +518,7 @@
 
 .player_locked_on
 	push hl
-	ld hl, wBuffer1 - 1
+	ld hl, wEnemyAIMoveScores - 1
 	ld de, wEnemyMonMoves
 	ld c, NUM_MOVES + 1
 
@@ -2893,7 +2893,7 @@
 	ret c
 
 .lowhp
-	ld hl, wBuffer1 - 1
+	ld hl, wEnemyAIMoveScores - 1
 	ld de, wEnemyMonMoves
 	ld c, NUM_MOVES + 1
 .checkmove
@@ -2987,7 +2987,7 @@
 	jr z, .done
 
 ; Discourage moves that do less damage unless they're reckless too.
-	ld hl, wBuffer1 - 1
+	ld hl, wEnemyAIMoveScores - 1
 	ld de, wEnemyMonMoves
 	ld b, 0
 .checkmove2
@@ -3060,7 +3060,7 @@
 	and a
 	ret z
 
-	ld hl, wBuffer1 - 1
+	ld hl, wEnemyAIMoveScores - 1
 	ld de, wEnemyMonMoves
 	ld c, NUM_MOVES + 1
 .loop
@@ -3098,7 +3098,7 @@
 AI_Status:
 ; Dismiss status moves that don't affect the player.
 
-	ld hl, wBuffer1 - 1
+	ld hl, wEnemyAIMoveScores - 1
 	ld de, wEnemyMonMoves
 	ld b, NUM_MOVES + 1
 .checkmove
@@ -3161,7 +3161,7 @@
 ; Use any move that will KO the target.
 ; Risky moves will often be an exception (see below).
 
-	ld hl, wBuffer1 - 1
+	ld hl, wEnemyAIMoveScores - 1
 	ld de, wEnemyMonMoves
 	ld c, NUM_MOVES + 1
 .checkmove
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -5358,7 +5358,7 @@
 	hlcoord 6, 17 - NUM_MOVES - 4
 .got_start_coord
 	ld a, SCREEN_WIDTH
-	ld [wBuffer1], a
+	ld [wListMovesLineSpacing], a
 	predef ListMoves
 
 	ld b, 5
@@ -6334,8 +6334,7 @@
 	ld [hli], a
 	ld [hli], a
 	ld [hl], a
-; Make sure the predef knows this isn't a partymon
-	ld [wEvolutionOldSpecies], a
+	ld [wSkipMovesBeforeLevelUp], a
 ; Fill moves based on level
 	predef FillMoves
 
@@ -7616,9 +7615,10 @@
 	and a
 	jr z, .not_linked
 
-	ld hl, GoMonText ; If we're in a LinkBattle print just "Go <PlayerMon>"
-
-	ld a, [wBattleHasJustStarted] ; unless this (unidentified) variable is set
+; If we're in a LinkBattle print just "Go <PlayerMon>"
+; unless DoBattle already set [wBattleHasJustStarted]
+	ld hl, GoMonText
+	ld a, [wBattleHasJustStarted]
 	and a
 	jr nz, .skip_to_textbox
 
--- a/engine/battle/trainer_huds.asm
+++ b/engine/battle/trainer_huds.asm
@@ -47,7 +47,7 @@
 StageBallTilesData:
 	ld a, [de]
 	push af
-	ld de, wBuffer1
+	ld de, wBattleHUDTiles
 	ld c, PARTY_LENGTH
 	ld a, $34 ; empty slot
 .loop1
@@ -56,7 +56,8 @@
 	dec c
 	jr nz, .loop1
 	pop af
-	ld de, wBuffer1
+
+	ld de, wBattleHUDTiles
 .loop2
 	push af
 	call .GetHUDTile
@@ -200,7 +201,7 @@
 	jp LoadTrainerHudOAM
 
 LoadTrainerHudOAM:
-	ld de, wBuffer1
+	ld de, wBattleHUDTiles
 	ld c, PARTY_LENGTH
 .loop
 	ld a, [wPlaceBallsY]
--- a/engine/events/daycare.asm
+++ b/engine/events/daycare.asm
@@ -616,8 +616,8 @@
 	xor a
 	ld [wEggMonItem], a
 	ld de, wEggMonMoves
-	xor a
-	ld [wBuffer1], a
+	xor a ; FALSE
+	ld [wSkipMovesBeforeLevelUp], a
 	predef FillMoves
 	farcall InitEggMoves
 	ld hl, wEggMonID
--- a/engine/events/heal_machine_anim.asm
+++ b/engine/events/heal_machine_anim.asm
@@ -17,19 +17,19 @@
 	; 1: Left (Elm's Lab)
 	; 2: Up (Hall of Fame)
 	ld a, [wScriptVar]
-	ld [wBuffer1], a
+	ld [wHealMachineAnimType], a
 	ldh a, [rOBP1]
-	ld [wBuffer2], a
+	ld [wHealMachineTempOBP1], a
 	call .DoJumptableFunctions
-	ld a, [wBuffer2]
+	ld a, [wHealMachineTempOBP1]
 	call DmgToCgbObjPal1
 	ret
 
 .DoJumptableFunctions:
 	xor a
-	ld [wBuffer3], a
-.jumpable_loop
-	ld a, [wBuffer1]
+	ld [wHealMachineAnimState], a
+.jumptable_loop
+	ld a, [wHealMachineAnimType]
 	ld e, a
 	ld d, 0
 	ld hl, .Pointers
@@ -38,10 +38,10 @@
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
-	ld a, [wBuffer3]
+	ld a, [wHealMachineAnimState]
 	ld e, a
 	inc a
-	ld [wBuffer3], a
+	ld [wHealMachineAnimState], a
 	add hl, de
 	ld a, [hl]
 	cp HEALMACHINESTATE_FINISH
@@ -48,7 +48,7 @@
 	jr z, .finish
 	ld hl, .Jumptable
 	rst JumpTable
-	jr .jumpable_loop
+	jr .jumptable_loop
 
 .finish
 	ret
@@ -237,7 +237,7 @@
 
 .PlaceHealingMachineTile:
 	push bc
-	ld a, [wBuffer1]
+	ld a, [wHealMachineAnimType]
 	bcpixel 2, 4
 	cp HEALMACHINE_ELMS_LAB
 	jr z, .okay
--- a/engine/events/lucky_number.asm
+++ b/engine/events/lucky_number.asm
@@ -125,7 +125,7 @@
 	push hl
 	ld d, h
 	ld e, l
-	ld hl, wBuffer1
+	ld hl, wMonIDDigitsBuffer
 	lb bc, PRINTNUM_LEADINGZEROS | 2, 5
 	call PrintNum
 	ld hl, wLuckyNumberDigitsBuffer
@@ -135,7 +135,7 @@
 	ld b, 5
 	ld c, 0
 	ld hl, wLuckyNumberDigitsBuffer + 4
-	ld de, wBuffer1 + 4
+	ld de, wMonIDDigitsBuffer + 4
 .loop
 	ld a, [de]
 	cp [hl]
--- a/engine/events/pokecenter_pc.asm
+++ b/engine/events/pokecenter_pc.asm
@@ -361,15 +361,15 @@
 
 .withdraw
 	ld a, [wItemQuantityChangeBuffer]
-	ld [wBuffer1], a ; quantity
+	ld [wPCItemQuantityChangeBuffer], a
 	ld a, [wCurItemQuantity]
-	ld [wBuffer2], a
+	ld [wPCItemQuantity], a
 	ld hl, wNumItems
 	call ReceiveItem
 	jr nc, .PackFull
-	ld a, [wBuffer1]
+	ld a, [wPCItemQuantityChangeBuffer]
 	ld [wItemQuantityChangeBuffer], a
-	ld a, [wBuffer2]
+	ld a, [wPCItemQuantity]
 	ld [wCurItemQuantity], a
 	ld hl, wNumPCItems
 	call TossItem
@@ -490,15 +490,15 @@
 	ret
 
 .tossable
-	ld a, [wBuffer1]
+	ld a, [wPCItemQuantityChangeBuffer]
 	push af
-	ld a, [wBuffer2]
+	ld a, [wPCItemQuantity]
 	push af
 	call .DepositItem
 	pop af
-	ld [wBuffer2], a
+	ld [wPCItemQuantity], a
 	pop af
-	ld [wBuffer1], a
+	ld [wPCItemQuantityChangeBuffer], a
 	ret
 
 .DepositItem:
@@ -522,15 +522,15 @@
 
 .ContinueDeposit:
 	ld a, [wItemQuantityChangeBuffer]
-	ld [wBuffer1], a
+	ld [wPCItemQuantityChangeBuffer], a
 	ld a, [wCurItemQuantity]
-	ld [wBuffer2], a
+	ld [wPCItemQuantity], a
 	ld hl, wNumPCItems
 	call ReceiveItem
 	jr nc, .NoRoomInPC
-	ld a, [wBuffer1]
+	ld a, [wPCItemQuantityChangeBuffer]
 	ld [wItemQuantityChangeBuffer], a
-	ld a, [wBuffer2]
+	ld a, [wPCItemQuantity]
 	ld [wCurItemQuantity], a
 	ld hl, wNumItems
 	call TossItem
--- a/engine/events/treemons.asm
+++ b/engine/events/treemons.asm
@@ -197,11 +197,11 @@
 
 GetTreeScore:
 	call .CoordScore
-	ld [wBuffer1], a
+	ld [wTreeMonCoordScore], a
 	call .OTIDScore
-	ld [wBuffer2], a
+	ld [wTreeMonOTIDScore], a
 	ld c, a
-	ld a, [wBuffer1]
+	ld a, [wTreeMonCoordScore]
 	sub c
 	jr z, .rare
 	jr nc, .ok
--- a/engine/items/buy_sell_toss.asm
+++ b/engine/items/buy_sell_toss.asm
@@ -8,9 +8,9 @@
 	farcall GetItemPrice
 RooftopSale_SelectQuantityToBuy:
 	ld a, d
-	ld [wBuffer1], a
+	ld [wBuySellItemPrice + 0], a
 	ld a, e
-	ld [wBuffer2], a
+	ld [wBuySellItemPrice + 1], a
 	ld hl, BuyItem_MenuHeader
 	call LoadMenuHeader
 	call Toss_Sell_Loop
@@ -19,9 +19,9 @@
 SelectQuantityToSell:
 	farcall GetItemPrice
 	ld a, d
-	ld [wBuffer1], a
+	ld [wBuySellItemPrice + 0], a
 	ld a, e
-	ld [wBuffer2], a
+	ld [wBuySellItemPrice + 1], a
 	ld hl, SellItem_MenuHeader
 	call LoadMenuHeader
 	call Toss_Sell_Loop
@@ -159,9 +159,9 @@
 BuySell_MultiplyPrice:
 	xor a
 	ldh [hMultiplicand + 0], a
-	ld a, [wBuffer1]
+	ld a, [wBuySellItemPrice + 0]
 	ldh [hMultiplicand + 1], a
-	ld a, [wBuffer2]
+	ld a, [wBuySellItemPrice + 1]
 	ldh [hMultiplicand + 2], a
 	ld a, [wItemQuantityChangeBuffer]
 	ldh [hMultiplier], a
--- a/engine/link/link.asm
+++ b/engine/link/link.asm
@@ -449,6 +449,7 @@
 	ld [wOtherTrainerClass], a
 	call ClearScreen
 	farcall Link_WaitBGMap
+
 	ld hl, wOptions
 	ld a, [hl]
 	push af
@@ -460,8 +461,6 @@
 	ld bc, NAME_LENGTH
 	call CopyBytes
 	call ReturnToMapFromSubmenu
-
-	; LET'S DO THIS
 	ld a, [wDisableTextAcceleration]
 	push af
 	ld a, 1
@@ -478,6 +477,7 @@
 	pop af
 	ldh [rIF], a
 
+	; LET'S DO THIS
 	predef StartBattle
 
 	ldh a, [rIF]
@@ -492,6 +492,7 @@
 	ld [wDisableTextAcceleration], a
 	pop af
 	ld [wOptions], a
+
 	farcall LoadPokemonData
 	jp ExitLinkCommunications
 
--- a/engine/menus/menu_2.asm
+++ b/engine/menus/menu_2.asm
@@ -206,9 +206,10 @@
 
 FindApricornsInBag:
 ; Checks the bag for Apricorns.
-	ld hl, wBuffer1
+	ld hl, wKurtApricornCount
 	xor a
 	ld [hli], a
+	assert wKurtApricornCount + 1 == wKurtApricornItems
 	dec a
 	ld bc, 10
 	call ByteFill
@@ -232,15 +233,15 @@
 	jr .loop
 
 .done
-	ld a, [wBuffer1]
+	ld a, [wKurtApricornCount]
 	and a
 	ret nz
 	scf
 	ret
 
-.addtobuffer
+.addtobuffer:
 	push hl
-	ld hl, wBuffer1
+	ld hl, wKurtApricornCount
 	inc [hl]
 	ld e, [hl]
 	ld d, 0
--- a/engine/overworld/decorations.asm
+++ b/engine/overworld/decorations.asm
@@ -10,17 +10,17 @@
 	push af
 	ld hl, .MenuHeader
 	call LoadMenuHeader
-	xor a
-	ld [wBuffer5], a
-	ld a, $1
-	ld [wBuffer6], a
+	xor a ; FALSE
+	ld [wChangedDecorations], a
+	ld a, $1 ; bed
+	ld [wCurDecorationCategory], a
 .top_loop
-	ld a, [wBuffer6]
+	ld a, [wCurDecorationCategory]
 	ld [wMenuCursorBuffer], a
 	call .FindCategoriesWithOwnedDecos
 	call DoNthMenu
 	ld a, [wMenuCursorY]
-	ld [wBuffer6], a
+	ld [wCurDecorationCategory], a
 	jr c, .exit_menu
 	ld a, [wMenuSelection]
 	ld hl, .pointers
@@ -31,7 +31,7 @@
 	call ExitMenu
 	pop af
 	ld [wWhichIndexSet], a
-	ld a, [wBuffer5]
+	ld a, [wChangedDecorations]
 	ld c, a
 	ret
 
@@ -71,7 +71,7 @@
 	xor a
 	ld [wWhichIndexSet], a
 	call .ClearStringBuffer2
-	call .FindOwndDecos
+	call .FindOwnedDecos
 	ld a, 7
 	call .AppendToStringBuffer2
 	ld hl, wStringBuffer2
@@ -98,7 +98,7 @@
 	ld [hl], a
 	ret
 
-.FindOwndDecos:
+.FindOwnedDecos:
 	ld hl, .dw
 .loop
 	ld a, [hli]
@@ -642,12 +642,12 @@
 
 DecoAction_TrySetItUp:
 	ld a, [hl]
-	ld [wBuffer1], a
+	ld [wCurDecoration], a
 	push hl
 	call DecoAction_SetItUp
 	jr c, .failed
-	ld a, 1
-	ld [wBuffer5], a
+	ld a, TRUE
+	ld [wChangedDecorations], a
 	pop hl
 	ld a, [wMenuSelection]
 	ld [hl], a
@@ -661,7 +661,7 @@
 
 DecoAction_SetItUp:
 ; See if there's anything of the same type already out
-	ld a, [wBuffer1]
+	ld a, [wCurDecoration]
 	and a
 	jr z, .nothingthere
 ; See if that item is already out
@@ -673,7 +673,7 @@
 	ld a, [wMenuSelection]
 	ld hl, wStringBuffer4
 	call GetDecorationName
-	ld a, [wBuffer1]
+	ld a, [wCurDecoration]
 	ld hl, wStringBuffer3
 	call GetDecorationName
 	ld hl, PutAwayAndSetUpText
@@ -699,16 +699,16 @@
 DecoAction_TryPutItAway:
 ; If there is no item of that type already set, there is nothing to put away.
 	ld a, [hl]
-	ld [wBuffer1], a
+	ld [wCurDecoration], a
 	xor a
 	ld [hl], a
-	ld a, [wBuffer1]
+	ld a, [wCurDecoration]
 	and a
 	jr z, .nothingthere
 ; Put it away.
-	ld a, $1
-	ld [wBuffer5], a
-	ld a, [wBuffer1]
+	ld a, TRUE
+	ld [wChangedDecorations], a
+	ld a, [wCurDecoration]
 	ld [wMenuSelection], a
 	ld hl, wStringBuffer3
 	call GetDecorationName
@@ -729,8 +729,8 @@
 	jr c, .cancel
 	call DecoAction_SetItUp_Ornament
 	jr c, .cancel
-	ld a, $1
-	ld [wBuffer5], a
+	ld a, TRUE
+	ld [wChangedDecorations], a
 	jr DecoAction_FinishUp_Ornament
 
 .cancel
@@ -816,8 +816,8 @@
 	jr z, .nothingthere
 	ld hl, wStringBuffer3
 	call GetDecorationName
-	ld a, $1
-	ld [wBuffer5], a
+	ld a, TRUE
+	ld [wChangedDecorations], a
 	xor a
 	ld [wSelectedDecoration], a
 	ld hl, PutAwayTheDecoText
@@ -843,9 +843,9 @@
 	call CopyMenuData
 	jr c, .nope
 	ld a, [wMenuCursorY]
-	cp 3
+	cp 3 ; cancel
 	jr z, .nope
-	ld [wBuffer2], a
+	ld [wSelectedDecorationSide], a
 	call QueryWhichSide
 	ld a, [hl]
 	ld [wSelectedDecoration], a
@@ -861,9 +861,10 @@
 QueryWhichSide:
 	ld hl, wDecoRightOrnament
 	ld de, wDecoLeftOrnament
-	ld a, [wBuffer2]
-	cp 1
+	ld a, [wSelectedDecorationSide]
+	cp 1 ; right side
 	ret z
+	; left side, swap hl and de
 	push hl
 	ld h, d
 	ld l, e
--- a/engine/overworld/time.asm
+++ b/engine/overworld/time.asm
@@ -261,15 +261,15 @@
 	call OpenSRAM
 	ld hl, sMysteryGiftTimer
 	ld a, [hli]
-	ld [wBuffer1], a
+	ld [wTempMysteryGiftTimer], a
 	ld a, [hl]
-	ld [wBuffer2], a
+	ld [wTempMysteryGiftTimer + 1], a
 	call CloseSRAM
 
-	ld hl, wBuffer1
+	ld hl, wTempMysteryGiftTimer
 	call CheckDayDependentEventHL
 	jr nc, .not_timed_out
-	ld hl, wBuffer1
+	ld hl, wTempMysteryGiftTimer
 	call InitOneDayCountdown
 	call CloseSRAM
 	farcall ResetDailyMysteryGiftLimitIfUnlocked
@@ -277,7 +277,7 @@
 .not_timed_out
 	ld a, BANK(sMysteryGiftTimer)
 	call OpenSRAM
-	ld hl, wBuffer1
+	ld hl, wTempMysteryGiftTimer
 	ld a, [hli]
 	ld [sMysteryGiftTimer], a
 	ld a, [hl]
--- a/engine/phone/phone.asm
+++ b/engine/phone/phone.asm
@@ -62,7 +62,7 @@
 
 GetRemainingSpaceInPhoneList:
 	xor a
-	ld [wBuffer1], a
+	ld [wRegisteredPhoneNumbers], a
 	ld hl, PermanentNumbers
 .loop
 	ld a, [hli]
@@ -76,7 +76,7 @@
 	ld c, a
 	call _CheckCellNum
 	jr c, .permanent
-	ld hl, wBuffer1
+	ld hl, wRegisteredPhoneNumbers
 	inc [hl]
 .permanent
 	pop hl
@@ -87,7 +87,7 @@
 
 .done
 	ld a, CONTACT_LIST_SIZE
-	ld hl, wBuffer1
+	ld hl, wRegisteredPhoneNumbers
 	sub [hl]
 	ret
 
--- a/engine/pokemon/evolve.asm
+++ b/engine/pokemon/evolve.asm
@@ -509,7 +509,7 @@
 	ld a, [wCurPartyLevel]
 	cp b
 	jp c, .done
-	ld a, [wEvolutionOldSpecies]
+	ld a, [wSkipMovesBeforeLevelUp]
 	and a
 	jr z, .CheckMove
 	ld a, [wPrevPartyLevel]
--- a/engine/pokemon/learn.asm
+++ b/engine/pokemon/learn.asm
@@ -142,7 +142,7 @@
 	call Textbox
 	hlcoord 5 + 2, 2 + 2
 	ld a, SCREEN_WIDTH * 2
-	ld [wBuffer1], a
+	ld [wListMovesLineSpacing], a
 	predef ListMoves
 	; w2DMenuData
 	ld a, $4
--- a/engine/pokemon/mail.asm
+++ b/engine/pokemon/mail.asm
@@ -322,7 +322,8 @@
 
 ; initialize wMailboxCount from sMailboxCount
 	ld hl, wMailboxCount
-	ld [hli], a ; now hl = wMailboxItems
+	ld [hli], a
+	assert wMailboxCount + 1 == wMailboxItems
 	and a
 	jr z, .done ; if no mail, we're done
 
--- a/engine/pokemon/mail_2.asm
+++ b/engine/pokemon/mail_2.asm
@@ -1,3 +1,17 @@
+; MailGFXPointers indexes
+; LoadMailPalettes.MailPals indexes (see gfx/mail/mail.pal)
+	const_def
+	const FLOWER_MAIL_INDEX  ; 0
+	const SURF_MAIL_INDEX    ; 1
+	const LITEBLUEMAIL_INDEX ; 2
+	const PORTRAITMAIL_INDEX ; 3
+	const LOVELY_MAIL_INDEX  ; 4
+	const EON_MAIL_INDEX     ; 5
+	const MORPH_MAIL_INDEX   ; 6
+	const BLUESKY_MAIL_INDEX ; 7
+	const MUSIC_MAIL_INDEX   ; 8
+	const MIRAGE_MAIL_INDEX  ; 9
+
 ReadPartyMonMail:
 	ld a, [wCurPartyMon]
 	ld hl, sPartyMail
@@ -35,7 +49,7 @@
 	call .LoadGFX
 	call EnableLCD
 	call WaitBGMap
-	ld a, [wBuffer3]
+	ld a, [wCurMailIndex]
 	ld e, a
 	farcall LoadMailPalettes
 	call SetPalettes
@@ -72,13 +86,13 @@
 	call OpenSRAM
 	ld de, sPartyMon1MailAuthorID - sPartyMon1Mail
 	add hl, de
+	ld a, [hli] ; author id
+	ld [wCurMailAuthorID], a
 	ld a, [hli]
-	ld [wBuffer1], a
-	ld a, [hli]
-	ld [wBuffer2], a
-	ld a, [hli]
+	ld [wCurMailAuthorID + 1], a
+	ld a, [hli] ; species
 	ld [wCurPartySpecies], a
-	ld b, [hl]
+	ld b, [hl] ; type
 	call CloseSRAM
 	ld hl, MailGFXPointers
 	ld c, 0
@@ -99,7 +113,7 @@
 
 .got_pointer
 	ld a, c
-	ld [wBuffer3], a
+	ld [wCurMailIndex], a
 	ld a, [hli]
 	ld h, [hl]
 	ld l, a
@@ -111,6 +125,7 @@
 	ret
 
 MailGFXPointers:
+; entries correspond to *MAIL_INDEX constants
 	dbw FLOWER_MAIL,  LoadFlowerMailGFX
 	dbw SURF_MAIL,    LoadSurfMailGFX
 	dbw LITEBLUEMAIL, LoadLiteBlueMailGFX
@@ -121,7 +136,7 @@
 	dbw BLUESKY_MAIL, LoadBlueSkyMailGFX
 	dbw MUSIC_MAIL,   LoadMusicMailGFX
 	dbw MIRAGE_MAIL,  LoadMirageMailGFX
-	db -1
+	db -1 ; end
 
 LoadSurfMailGFX:
 	push bc
@@ -697,12 +712,12 @@
 	ld a, [de]
 	and a
 	ret z
-	ld a, [wBuffer3]
+	ld a, [wCurMailIndex]
 	hlcoord 8, 14
-	cp $3 ; PORTRAITMAIL
+	cp PORTRAITMAIL_INDEX
 	jr z, .place_author
 	hlcoord 6, 14
-	cp $6 ; MORPH_MAIL
+	cp MORPH_MAIL_INDEX
 	jr z, .place_author
 	hlcoord 5, 14
 
--- a/engine/pokemon/mon_menu.asm
+++ b/engine/pokemon/mon_menu.asm
@@ -1145,7 +1145,7 @@
 	ld bc, NUM_MOVES
 	call CopyBytes
 	ld a, SCREEN_WIDTH * 2
-	ld [wBuffer1], a
+	ld [wListMovesLineSpacing], a
 	hlcoord 2, 3
 	predef ListMoves
 	hlcoord 10, 4
--- a/engine/pokemon/mon_stats.asm
+++ b/engine/pokemon/mon_stats.asm
@@ -242,9 +242,9 @@
 	sub c
 	ld b, a
 	push hl
-	ld a, [wBuffer1]
+	ld a, [wListMovesLineSpacing]
 	ld e, a
-	ld d, $0
+	ld d, 0
 	ld a, $3e ; P
 	call .load_loop
 	ld a, b
@@ -299,7 +299,7 @@
 	lb bc, 1, 2
 	call PrintNum
 	pop hl
-	ld a, [wBuffer1]
+	ld a, [wListMovesLineSpacing]
 	ld e, a
 	ld d, 0
 	add hl, de
@@ -354,7 +354,7 @@
 	push hl
 	ld bc, -12
 	add hl, bc
-	ld b, $0
+	ld b, 0
 	call DrawEnemyHP
 	pop hl
 	ld bc, 5
@@ -367,6 +367,7 @@
 	ret
 
 PlaceStatusString:
+; Return nz if the status is not OK
 	push de
 	inc de
 	inc de
@@ -381,7 +382,7 @@
 	ld de, FntString
 	call CopyStatusString
 	pop de
-	ld a, $1
+	ld a, TRUE
 	and a
 	ret
 
@@ -420,7 +421,7 @@
 
 .place
 	call CopyStatusString
-	ld a, $1
+	ld a, TRUE
 	and a
 
 .no_status
@@ -434,9 +435,9 @@
 ParString: db "PAR@"
 
 ListMoves:
-; List moves at hl, spaced every [wBuffer1] tiles.
+; List moves at hl, spaced every [wListMovesLineSpacing] tiles.
 	ld de, wListMoves_MoveIndicesBuffer
-	ld b, $0
+	ld b, 0
 .moves_loop
 	ld a, [de]
 	inc de
@@ -459,7 +460,7 @@
 	inc b
 	pop hl
 	push bc
-	ld a, [wBuffer1]
+	ld a, [wListMovesLineSpacing]
 	ld c, a
 	ld b, 0
 	add hl, bc
@@ -475,7 +476,7 @@
 .nonmove_loop
 	push af
 	ld [hl], "-"
-	ld a, [wBuffer1]
+	ld a, [wListMovesLineSpacing]
 	ld c, a
 	ld b, 0
 	add hl, bc
--- a/engine/pokemon/mon_submenu.asm
+++ b/engine/pokemon/mon_submenu.asm
@@ -25,8 +25,8 @@
 	db 1 ; default option
 
 .GetTopCoord:
-; TopCoord = 1 + BottomCoord - 2 * (NumSubmenuItems + 1)
-	ld a, [wBuffer1]
+; [wMenuBorderTopCoord] = 1 + [wMenuBorderBottomCoord] - 2 * ([wMonSubmenuCount] + 1)
+	ld a, [wMonSubmenuCount]
 	inc a
 	add a
 	ld b, a
@@ -41,7 +41,7 @@
 .loop
 	ld a, MENU_UNUSED_3 | MENU_BACKUP_TILES_2 ; flags
 	ld [wMenuDataFlags], a
-	ld a, [wBuffer1] ; items
+	ld a, [wMonSubmenuCount] ; items
 	ld [wMenuDataItems], a
 	call InitVerticalMenuCursor
 	ld hl, w2DMenuFlags1
@@ -65,7 +65,7 @@
 	dec a
 	ld c, a
 	ld b, 0
-	ld hl, wBuffer2
+	ld hl, wMonSubmenuItems
 	add hl, bc
 	ld a, [hl]
 	ret
@@ -74,7 +74,7 @@
 	call MenuBoxCoord2Tile
 	ld bc, 2 * SCREEN_WIDTH + 2
 	add hl, bc
-	ld de, wBuffer2
+	ld de, wMonSubmenuItems
 .loop
 	ld a, [de]
 	inc de
@@ -170,7 +170,7 @@
 	call AddMonMenuItem
 
 .skip2
-	ld a, [wBuffer1]
+	ld a, [wMonSubmenuCount]
 	cp NUM_MONMENU_ITEMS
 	jr z, .ok2
 	ld a, MONMENUITEM_CANCEL
@@ -212,17 +212,17 @@
 
 ResetMonSubmenu:
 	xor a
-	ld [wBuffer1], a
-	ld hl, wBuffer2
+	ld [wMonSubmenuCount], a
+	ld hl, wMonSubmenuItems
 	ld bc, NUM_MONMENU_ITEMS + 1
 	call ByteFill
 	ret
 
 TerminateMonSubmenu:
-	ld a, [wBuffer1]
+	ld a, [wMonSubmenuCount]
 	ld e, a
 	ld d, 0
-	ld hl, wBuffer2
+	ld hl, wMonSubmenuItems
 	add hl, de
 	ld [hl], -1
 	ret
@@ -231,12 +231,12 @@
 	push hl
 	push de
 	push af
-	ld a, [wBuffer1]
+	ld a, [wMonSubmenuCount]
 	ld e, a
 	inc a
-	ld [wBuffer1], a
+	ld [wMonSubmenuCount], a
 	ld d, 0
-	ld hl, wBuffer2
+	ld hl, wMonSubmenuItems
 	add hl, de
 	pop af
 	ld [hl], a
--- a/engine/pokemon/move_mon.asm
+++ b/engine/pokemon/move_mon.asm
@@ -132,7 +132,7 @@
 	ld [hli], a
 endr
 	ld [hl], a
-	ld [wEvolutionOldSpecies], a
+	ld [wSkipMovesBeforeLevelUp], a
 	predef FillMoves
 
 .next
@@ -876,8 +876,8 @@
 	call AddNTimes
 	ld d, h
 	ld e, l
-	ld a, $1
-	ld [wBuffer1], a
+	ld a, TRUE
+	ld [wSkipMovesBeforeLevelUp], a
 	predef FillMoves
 	ld a, [wPartyCount]
 	dec a
--- a/engine/pokemon/stats_screen.asm
+++ b/engine/pokemon/stats_screen.asm
@@ -635,7 +635,7 @@
 	call .CalcExpToNextLevel
 	hlcoord 13, 13
 	lb bc, 3, 7
-	ld de, wBuffer1
+	ld de, wExpToNextLevel
 	call PrintNum
 	ld de, .LevelUpStr
 	hlcoord 10, 12
@@ -679,18 +679,18 @@
 	ldh a, [hQuotient + 3]
 	sub [hl]
 	dec hl
-	ld [wBuffer3], a
+	ld [wExpToNextLevel + 2], a
 	ldh a, [hQuotient + 2]
 	sbc [hl]
 	dec hl
-	ld [wBuffer2], a
+	ld [wExpToNextLevel + 1], a
 	ldh a, [hQuotient + 1]
 	sbc [hl]
-	ld [wBuffer1], a
+	ld [wExpToNextLevel], a
 	ret
 
 .AlreadyAtMaxLevel:
-	ld hl, wBuffer1
+	ld hl, wExpToNextLevel
 	xor a
 	ld [hli], a
 	ld [hli], a
@@ -732,11 +732,11 @@
 	call CopyBytes
 	hlcoord 8, 10
 	ld a, SCREEN_WIDTH * 2
-	ld [wBuffer1], a
+	ld [wListMovesLineSpacing], a
 	predef ListMoves
 	hlcoord 12, 11
 	ld a, SCREEN_WIDTH * 2
-	ld [wBuffer1], a
+	ld [wListMovesLineSpacing], a
 	predef ListMovePP
 	ret
 
--- a/engine/pokemon/switchpartymons.asm
+++ b/engine/pokemon/switchpartymons.asm
@@ -1,17 +1,17 @@
 _SwitchPartyMons:
 	ld a, [wSwitchMon]
 	dec a
-	ld [wBuffer3], a
+	ld [wSwitchMonFrom], a
 	ld b, a
 	ld a, [wMenuCursorY]
 	dec a
-	ld [wBuffer2], a
+	ld [wSwitchMonTo], a
 	cp b
 	jr z, .skip
 	call .SwapMonAndMail
-	ld a, [wBuffer3]
+	ld a, [wSwitchMonFrom]
 	call .ClearSprite
-	ld a, [wBuffer2]
+	ld a, [wSwitchMonTo]
 	call .ClearSprite
 .skip
 	ret
@@ -44,13 +44,13 @@
 	push de
 	push bc
 	ld bc, wPartySpecies
-	ld a, [wBuffer2]
+	ld a, [wSwitchMonTo]
 	ld l, a
 	ld h, $0
 	add hl, bc
 	ld d, h
 	ld e, l
-	ld a, [wBuffer3]
+	ld a, [wSwitchMonFrom]
 	ld l, a
 	ld h, $0
 	add hl, bc
@@ -60,7 +60,7 @@
 	ld [hl], a
 	pop af
 	ld [de], a
-	ld a, [wBuffer2]
+	ld a, [wSwitchMonTo]
 	ld hl, wPartyMon1Species
 	ld bc, PARTYMON_STRUCT_LENGTH
 	call AddNTimes
@@ -68,7 +68,7 @@
 	ld de, wSwitchMonBuffer
 	ld bc, PARTYMON_STRUCT_LENGTH
 	call CopyBytes
-	ld a, [wBuffer3]
+	ld a, [wSwitchMonFrom]
 	ld hl, wPartyMon1
 	ld bc, PARTYMON_STRUCT_LENGTH
 	call AddNTimes
@@ -80,12 +80,12 @@
 	ld hl, wSwitchMonBuffer
 	ld bc, PARTYMON_STRUCT_LENGTH
 	call CopyBytes
-	ld a, [wBuffer2]
+	ld a, [wSwitchMonTo]
 	ld hl, wPartyMonOT
 	call SkipNames
 	push hl
 	call .CopyNameToSwitchMonBuffer
-	ld a, [wBuffer3]
+	ld a, [wSwitchMonFrom]
 	ld hl, wPartyMonOT
 	call SkipNames
 	pop de
@@ -95,12 +95,12 @@
 	ld hl, wSwitchMonBuffer
 	call .CopyName
 	ld hl, wPartyMonNicknames
-	ld a, [wBuffer2]
+	ld a, [wSwitchMonTo]
 	call SkipNames
 	push hl
 	call .CopyNameToSwitchMonBuffer
 	ld hl, wPartyMonNicknames
-	ld a, [wBuffer3]
+	ld a, [wSwitchMonFrom]
 	call SkipNames
 	pop de
 	push hl
@@ -109,7 +109,7 @@
 	ld hl, wSwitchMonBuffer
 	call .CopyName
 	ld hl, sPartyMail
-	ld a, [wBuffer2]
+	ld a, [wSwitchMonTo]
 	ld bc, MAIL_STRUCT_LENGTH
 	call AddNTimes
 	push hl
@@ -119,7 +119,7 @@
 	call OpenSRAM
 	call CopyBytes
 	ld hl, sPartyMail
-	ld a, [wBuffer3]
+	ld a, [wSwitchMonFrom]
 	ld bc, MAIL_STRUCT_LENGTH
 	call AddNTimes
 	pop de
--- a/engine/rtc/restart_clock.asm
+++ b/engine/rtc/restart_clock.asm
@@ -1,3 +1,10 @@
+; RestartClock_GetWraparoundTime.WrapAroundTimes indexes
+	const_def 1
+	const RESTART_CLOCK_DAY
+	const RESTART_CLOCK_HOUR
+	const RESTART_CLOCK_MIN
+NUM_RESTART_CLOCK_DIVISIONS EQU const_value - 1
+
 RestartClock_GetWraparoundTime:
 	push hl
 	dec a
@@ -18,15 +25,16 @@
 	ret
 
 .WrapAroundTimes:
-	dw wBuffer4
-	db 7, 4
+; entries correspond to RESTART_CLOCK_* constants
+wraparound_time: MACRO
+	dw \1 ; value pointer
+	db \2 ; maximum value
+	db \3 ; up/down arrow x coord (pairs with wRestartClockUpArrowYCoord)
+ENDM
+	wraparound_time wRestartClockDay,   7,  4
+	wraparound_time wRestartClockHour, 24, 12
+	wraparound_time wRestartClockMin,  60, 15
 
-	dw wBuffer5
-	db 24, 12
-
-	dw wBuffer6
-	db 60, 15
-
 RestartClock:
 ; If we're here, we had an RTC overflow.
 	ld hl, .ClockTimeMayBeWrongText
@@ -56,18 +64,18 @@
 	text_end
 
 .SetClock:
-	ld a, 1
-	ld [wBuffer1], a ; which digit
-	ld [wBuffer2], a
+	ld a, RESTART_CLOCK_DAY
+	ld [wRestartClockCurDivision], a
+	ld [wRestartClockPrevDivision], a
 	ld a, 8
-	ld [wBuffer3], a
+	ld [wRestartClockUpArrowYCoord], a
 	call UpdateTime
 	call GetWeekday
-	ld [wBuffer4], a
+	ld [wRestartClockDay], a
 	ldh a, [hHours]
-	ld [wBuffer5], a
+	ld [wRestartClockHour], a
 	ldh a, [hMinutes]
-	ld [wBuffer6], a
+	ld [wRestartClockMin], a
 
 .loop
 	call .joy_loop
@@ -79,11 +87,11 @@
 	call PrintText
 	call YesNoBox
 	jr c, .cancel
-	ld a, [wBuffer4]
+	ld a, [wRestartClockDay]
 	ld [wStringBuffer2], a
-	ld a, [wBuffer5]
+	ld a, [wRestartClockHour]
 	ld [wStringBuffer2 + 1], a
-	ld a, [wBuffer6]
+	ld a, [wRestartClockMin]
 	ld [wStringBuffer2 + 2], a
 	xor a
 	ld [wStringBuffer2 + 3], a
@@ -92,11 +100,11 @@
 	ld hl, .ClockHasResetText
 	call PrintText
 	call WaitPressAorB_BlinkCursor
-	xor a
+	xor a ; FALSE
 	ret
 
 .cancel
-	ld a, $1
+	ld a, TRUE
 	ret
 
 .ClockIsThisOKText:
@@ -128,17 +136,17 @@
 	jr .joy_loop
 
 .press_A
-	ld a, $0
+	ld a, FALSE
 	scf
 	ret
 
 .press_B
-	ld a, $1
+	ld a, TRUE
 	scf
 	ret
 
 .pressed_up
-	ld a, [wBuffer1]
+	ld a, [wRestartClockCurDivision]
 	call RestartClock_GetWraparoundTime
 	ld a, [de]
 	inc a
@@ -145,12 +153,12 @@
 	ld [de], a
 	cp b
 	jr c, .done_scroll
-	ld a, $0
+	ld a, 0
 	ld [de], a
 	jr .done_scroll
 
 .pressed_down
-	ld a, [wBuffer1]
+	ld a, [wRestartClockCurDivision]
 	call RestartClock_GetWraparoundTime
 	ld a, [de]
 	dec a
@@ -163,22 +171,22 @@
 	jr .done_scroll
 
 .pressed_left
-	ld hl, wBuffer1
+	ld hl, wRestartClockCurDivision
 	dec [hl]
 	jr nz, .done_scroll
-	ld [hl], $3
+	ld [hl], RESTART_CLOCK_MIN
 	jr .done_scroll
 
 .pressed_right
-	ld hl, wBuffer1
+	ld hl, wRestartClockCurDivision
 	inc [hl]
 	ld a, [hl]
-	cp $4
+	cp NUM_RESTART_CLOCK_DIVISIONS + 1
 	jr c, .done_scroll
-	ld [hl], $1
+	ld [hl], RESTART_CLOCK_DAY
 
 .done_scroll
-	xor a
+	xor a ; FALSE
 	ret
 
 .PrintTime:
@@ -187,27 +195,27 @@
 	ld c, 18
 	call Textbox
 	decoord 1, 8
-	ld a, [wBuffer4]
+	ld a, [wRestartClockDay]
 	ld b, a
 	farcall PrintDayOfWeek
-	ld a, [wBuffer5]
+	ld a, [wRestartClockHour]
 	ld b, a
-	ld a, [wBuffer6]
+	ld a, [wRestartClockMin]
 	ld c, a
 	decoord 11, 8
 	farcall PrintHoursMins
-	ld a, [wBuffer2]
+	ld a, [wRestartClockPrevDivision]
 	lb de, " ", " "
 	call .PlaceChars
-	ld a, [wBuffer1]
+	ld a, [wRestartClockCurDivision]
 	lb de, "▲", "▼"
 	call .PlaceChars
-	ld a, [wBuffer1]
-	ld [wBuffer2], a
+	ld a, [wRestartClockCurDivision]
+	ld [wRestartClockPrevDivision], a
 	ret
 
 .UnusedPlaceCharsFragment: ; unreferenced
-	ld a, [wBuffer3]
+	ld a, [wRestartClockUpArrowYCoord]
 	ld b, a
 	call Coord2Tile
 	ret
@@ -215,7 +223,7 @@
 .PlaceChars:
 	push de
 	call RestartClock_GetWraparoundTime
-	ld a, [wBuffer3]
+	ld a, [wRestartClockUpArrowYCoord]
 	dec a
 	ld b, a
 	call Coord2Tile
--- a/gfx/mail/mail.pal
+++ b/gfx/mail/mail.pal
@@ -1,49 +1,10 @@
-	RGB 20, 31, 11
-	RGB 31, 19, 00
-	RGB 31, 10, 09
-	RGB 00, 00, 00
-
-	RGB 15, 20, 31
-	RGB 30, 26, 00
-	RGB 31, 12, 00
-	RGB 00, 00, 00
-
-	RGB 24, 17, 31
-	RGB 30, 26, 00
-	RGB 08, 11, 31
-	RGB 00, 00, 00
-
-	RGB 31, 25, 17
-	RGB 31, 18, 04
-	RGB 28, 12, 05
-	RGB 00, 00, 00
-
-	RGB 19, 26, 31
-	RGB 31, 05, 08
-	RGB 31, 09, 31
-	RGB 00, 00, 00
-
-	RGB 31, 19, 28
-	RGB 31, 21, 00
-	RGB 12, 22, 00
-	RGB 00, 00, 00
-
-	RGB 19, 17, 23
-	RGB 30, 26, 00
-	RGB 31, 12, 00
-	RGB 00, 00, 00
-
-	RGB 07, 26, 31
-	RGB 26, 26, 27
-	RGB 31, 11, 11
-	RGB 00, 00, 00
-
-	RGB 21, 31, 21
-	RGB 30, 26, 00
-	RGB 31, 12, 00
-	RGB 00, 00, 00
-
-	RGB 07, 26, 31
-	RGB 31, 31, 00
-	RGB 00, 21, 00
-	RGB 00, 00, 00
+	RGB 20,31,11, 31,19,00, 31,10,09, 00,00,00 ; FLOWER_MAIL
+	RGB 15,20,31, 30,26,00, 31,12,00, 00,00,00 ; SURF_MAIL
+	RGB 24,17,31, 30,26,00, 08,11,31, 00,00,00 ; LITEBLUEMAIL
+	RGB 31,25,17, 31,18,04, 28,12,05, 00,00,00 ; PORTRAITMAIL
+	RGB 19,26,31, 31,05,08, 31,09,31, 00,00,00 ; LOVELY_MAIL
+	RGB 31,19,28, 31,21,00, 12,22,00, 00,00,00 ; EON_MAIL
+	RGB 19,17,23, 30,26,00, 31,12,00, 00,00,00 ; MORPH_MAIL
+	RGB 07,26,31, 26,26,27, 31,11,11, 00,00,00 ; BLUESKY_MAIL
+	RGB 21,31,21, 30,26,00, 31,12,00, 00,00,00 ; MUSIC_MAIL
+	RGB 07,26,31, 31,31,00, 00,21,00, 00,00,00 ; MIRAGE_MAIL
--- a/maps/PlayersHouse2F.asm
+++ b/maps/PlayersHouse2F.asm
@@ -29,7 +29,7 @@
 	special ToggleMaptileDecorations
 	endcallback
 
-	db 0, 0, 0 ; filler
+	db 0, 0, 0 ; unused
 
 Doll1Script::
 	describedecoration DECODESC_LEFT_DOLL
--- a/wram.asm
+++ b/wram.asm
@@ -2227,7 +2227,7 @@
 wForceEvolution:: db
 
 UNION
-; general-purpose buffers
+; unidentified
 wBuffer1:: db
 wBuffer2:: db
 wBuffer3:: db
@@ -2248,13 +2248,78 @@
 wCurHPAnimHighHP::  db
 
 NEXTU
+; battle AI
+wEnemyAIMoveScores:: ds NUM_MOVES
+
+NEXTU
+; battle HUD
+wBattleHUDTiles:: ds PARTY_LENGTH
+
+NEXTU
 ; evolution data
 wEvolutionOldSpecies:: db
 wEvolutionNewSpecies:: db
-wEvolutionPicOffset:: db
-wEvolutionCanceled:: db
+wEvolutionPicOffset::  db
+wEvolutionCanceled::   db
 
 NEXTU
+; experience
+wExpToNextLevel:: ds 3
+
+NEXTU
+; lucky number show
+wMonIDDigitsBuffer:: ds 5
+
+NEXTU
+; mon submenu
+wMonSubmenuCount:: db
+wMonSubmenuItems:: ds NUM_MONMENU_ITEMS + 1
+
+NEXTU
+; heal machine anim
+wHealMachineAnimType::  db
+wHealMachineTempOBP1::  db
+wHealMachineAnimState:: db
+
+NEXTU
+; decorations
+wCurDecoration::          db
+wSelectedDecorationSide:: db
+wSelectedDecoration::     db
+wOtherDecoration::        db
+wChangedDecorations::     db
+wCurDecorationCategory::  db
+
+NEXTU
+; withdraw/deposit items
+wPCItemQuantityChangeBuffer:: db
+wPCItemQuantity:: db
+
+NEXTU
+; mail
+wCurMailAuthorID:: dw
+wCurMailIndex:: db
+
+NEXTU
+; kurt
+wKurtApricornCount:: db
+wKurtApricornItems:: ds 10
+
+NEXTU
+; tree mons
+wTreeMonCoordScore:: db
+wTreeMonOTIDScore::  db
+
+NEXTU
+; restart clock
+wRestartClockCurDivision::   db
+wRestartClockPrevDivision::  db
+wRestartClockUpArrowYCoord:: db
+wRestartClockDay::  db
+wRestartClockHour:: db
+wRestartClockMin::  db
+
+NEXTU
 ; link
 	ds 9
 wLinkBattleRNPreamble:: ds SERIAL_RN_PREAMBLE_LENGTH
@@ -2273,12 +2338,20 @@
 wd1f3:: ds 1
 
 NEXTU
-; miscellaneous
-wMagikarpLength:: dw
-wSelectedDecoration:: db
-wOtherDecoration::    db
-	ds 3
+; miscellaneous bytes
+wSkipMovesBeforeLevelUp::
+wRegisteredPhoneNumbers::
+wListMovesLineSpacing:: db
+wSwitchMonTo:: db
+wSwitchMonFrom:: db
+	ds 4
 wCurEnemyItem:: db
+
+NEXTU
+; miscellaneous words
+wBuySellItemPrice::
+wTempMysteryGiftTimer::
+wMagikarpLength:: dw
 ENDU
 
 wTempEnemyMonSpecies::  db
@@ -3254,7 +3327,7 @@
 ENDU
 
 UNION
-	ds $32
+	ds 50
 wBattleAnimEnd::
 
 NEXTU