shithub: pokered

Download patch

ref: 3de9d14d3e1ed14b880c0064a6141d9d9ca9b828
parent: fcfed136c6a0c094314bf75441af4d4b43cfc999
author: yenatch <yenatch@gmail.com>
date: Wed Sep 17 17:02:59 EDT 2014

Recomment misc functions in home.asm.

--- a/constants/misc_constants.asm
+++ b/constants/misc_constants.asm
@@ -1,12 +1,3 @@
-A_BUTTON EQU %00000001
-B_BUTTON EQU %00000010
-SELECT   EQU %00000100
-START    EQU %00001000
-D_RIGHT  EQU %00010000
-D_LEFT   EQU %00100000
-D_UP     EQU %01000000
-D_DOWN   EQU %10000000
-
 MAX_LEVEL EQU 100
 NUM_MOVES EQU 4
 
@@ -18,3 +9,16 @@
 HOF_MON       EQU $10
 HOF_TEAM      EQU PARTY_LENGTH * HOF_MON
 NUM_HOF_TEAMS EQU 50
+
+
+A_BUTTON EQU %00000001
+B_BUTTON EQU %00000010
+SELECT   EQU %00000100
+START    EQU %00001000
+D_RIGHT  EQU %00010000
+D_LEFT   EQU %00100000
+D_UP     EQU %01000000
+D_DOWN   EQU %10000000
+
+SCREEN_WIDTH  EQU 20
+SCREEN_HEIGHT EQU 18
--- a/home.asm
+++ b/home.asm
@@ -169,57 +169,69 @@
 	ld [$2000],a
 	ret
 
-; INPUT:
-; c: if nonzero, show at least a sliver of health
-; d = number of HP bar sections (normally 6)
-; e = health (in eighths of bar sections) (normally out of 48)
+
 DrawHPBar:: ; 1336 (0:1336)
+; Draw an HP bar d tiles long, and fill it to e pixels.
+; If c is nonzero, show at least a sliver regardless.
+; The right end of the bar changes with [wListMenuID].
+
 	push hl
 	push de
 	push bc
-	ld a,$71 ; left of HP bar tile 1
-	ld [hli],a
-	ld a,$62 ; left of HP bar tile 2
-	ld [hli],a
+
+	; Left
+	ld a, $71 ; "HP:"
+	ld [hli], a
+	ld a, $62
+	ld [hli], a
+
 	push hl
-	ld a,$63 ; empty bar section tile
-.drawEmptyBarLoop
+
+	; Middle
+	ld a, $63 ; empty
+.draw
 	ld [hli],a
 	dec d
-	jr nz,.drawEmptyBarLoop
+	jr nz, .draw
+
+	; Right
 	ld a,[wListMenuID]
-	dec a ; what should the right of HP bar tile be?
-	ld a,$6d ; right of HP bar tile, in status screen and battles
-	jr z,.writeTile
-	dec a ; right of HP bar tile, in pokemon menu
-.writeTile
+	dec a
+	ld a, $6d ; status screen and battle
+	jr z, .ok
+	dec a ; pokemon menu
+.ok
 	ld [hl],a
+
 	pop hl
-	ld a,e
-	and a ; is there enough health to show up on the HP bar?
-	jr nz,.loop ; if so, draw the HP bar
-	ld a,c
-	and a ; should a sliver of health be shown no matter what?
-	jr z,.done
-	ld e,1 ; if so, fill one eighth of a bar section
-; loop to draw every full bar section
-.loop
-	ld a,e
-	sub a,8
-	jr c,.drawPartialBarSection
-	ld e,a
-	ld a,$6b ; filled bar section tile
-	ld [hli],a
-	ld a,e
+
+	ld a, e
 	and a
-	jr z,.done
-	jr .loop
-; draws a partial bar section at the end (if necessary)
-; there are 7 possible partial bar sections from 1/8 to 7/8 full
-.drawPartialBarSection
-	ld a,$63 ; empty bar section tile
-	add e ; add e to get the appropriate partial bar section tile
-	ld [hl],a ; write the tile
+	jr nz, .fill
+
+	; If c iz nonzero, draw a pixel anyway.
+	ld a, c
+	and a
+	jr z, .done
+	ld e, 1
+
+.fill
+	ld a, e
+	sub 8
+	jr c, .partial
+	ld e, a
+	ld a, $6b ; full
+	ld [hli], a
+	ld a, e
+	and a
+	jr z, .done
+	jr .fill
+
+.partial
+	; Fill remaining pixels at the end if necessary.
+	ld a, $63 ; empty
+	add e
+	ld [hl], a
 .done
 	pop bc
 	pop de
@@ -226,6 +238,7 @@
 	pop hl
 	ret
 
+
 ; loads pokemon data from one of multiple sources to wcf98
 ; loads base stats to W_MONHDEXNUM
 ; INPUT:
@@ -240,8 +253,8 @@
 ; wcf98 = base address of pokemon data
 ; W_MONHDEXNUM = base address of base stats
 LoadMonData:: ; 1372 (0:1372)
-	ld hl,LoadMonData_
-	ld b,BANK(LoadMonData_)
+	ld hl, LoadMonData_
+	ld b, BANK(LoadMonData_)
 	jp Bankswitch
 
 ; writes c to wd0dc+b
@@ -248,7 +261,7 @@
 Func_137a:: ; 137a (0:137a)
 	ld hl, wd0dc
 	ld e, b
-	ld d, $0
+	ld d, 0
 	add hl, de
 	ld a, c
 	ld [hl], a
@@ -255,7 +268,7 @@
 	ret
 
 LoadFlippedFrontSpriteByMonIndex:: ; 1384 (0:1384)
-	ld a, $1
+	ld a, 1
 	ld [W_SPRITEFLIPPED], a
 
 LoadFrontSpriteByMonIndex:: ; 1389 (0:1389)
@@ -271,9 +284,9 @@
 	ld [hl], b
 	and a
 	pop hl
-	jr z, .invalidDexNumber  ; dex #0 invalid
+	jr z, .invalidDexNumber ; dex #0 invalid
 	cp NUM_POKEMON + 1
-	jr c, .validDexNumber    ; dex >#151 invalid
+	jr c, .validDexNumber   ; dex >#151 invalid
 .invalidDexNumber
 	ld a, RHYDON ; $1
 	ld [wcf91], a
@@ -298,41 +311,44 @@
 	ld [$2000], a
 	ret
 
-; plays the cry of a pokemon
-; INPUT:
-; a = pokemon ID
+
 PlayCry:: ; 13d0 (0:13d0)
+; Play monster a's cry.
 	call GetCryData
-	call PlaySound ; play cry
-	jp WaitForSoundToFinish ; wait for sound to be done playing
+	call PlaySound
+	jp WaitForSoundToFinish
 
-; gets a pokemon's cry data
-; INPUT:
-; a = pokemon ID
 GetCryData:: ; 13d9 (0:13d9)
+; Load cry data for monster a.
 	dec a
-	ld c,a
-	ld b,0
-	ld hl,CryData
-	add hl,bc
-	add hl,bc
-	add hl,bc
-	ld a,Bank(CryData)
+	ld c, a
+	ld b, 0
+	ld hl, CryData
+	add hl, bc
+	add hl, bc
+	add hl, bc
+
+	ld a, Bank(CryData)
 	call BankswitchHome
-	ld a,[hli]
-	ld b,a
-	ld a,[hli]
-	ld [wc0f1],a
-	ld a,[hl]
-	ld [wc0f2],a
+	ld a, [hli]
+	ld b, a ; cry id
+	ld a, [hli]
+	ld [wc0f1], a
+	ld a, [hl]
+	ld [wc0f2], a
 	call BankswitchBack
-	ld a,b ; a = cryID
-	ld c,$14 ; base sound ID for pokemon cries
-	rlca
-	add b ; a = cryID * 3
-	add c ; a = $14 + cryID * 3
+
+	; Cry headers have 3 channels,
+	; and start from index $14,
+	; so add 3 times the cry id.
+	ld a, b
+	ld c, $14
+	rlca ; * 2
+	add b
+	add c
 	ret
 
+
 DisplayPartyMenu:: ; 13fc (0:13fc)
 	ld a,[$ffd7]
 	push af
@@ -354,42 +370,42 @@
 	jp HandlePartyMenuInput
 
 PartyMenuInit:: ; 1420 (0:1420)
-	ld a,$01
+	ld a, 1 ; hardcoded bank
 	call BankswitchHome
 	call LoadHpBarAndStatusTilePatterns
-	ld hl,wd730
-	set 6,[hl] ; turn off letter printing delay
+	ld hl, wd730
+	set 6, [hl] ; turn off letter printing delay
 	xor a
-	ld [wcc49],a
-	ld [wcc37],a
-	ld hl,wTopMenuItemY
+	ld [wcc49], a
+	ld [wcc37], a
+	ld hl, wTopMenuItemY
 	inc a
-	ld [hli],a ; top menu item Y
+	ld [hli], a ; top menu item Y
 	xor a
-	ld [hli],a ; top menu item X
-	ld a,[wcc2b]
+	ld [hli], a ; top menu item X
+	ld a, [wcc2b]
 	push af
-	ld [hli],a ; current menu item ID
+	ld [hli], a ; current menu item ID
 	inc hl
-	ld a,[wPartyCount]
+	ld a, [wPartyCount]
 	and a ; are there more than 0 pokemon in the party?
-	jr z,.storeMaxMenuItemID
+	jr z, .storeMaxMenuItemID
 	dec a
 ; if party is not empty, the max menu item ID is ([wPartyCount] - 1)
 ; otherwise, it is 0
 .storeMaxMenuItemID
-	ld [hli],a ; max menu item ID
-	ld a,[wd11f]
+	ld [hli], a ; max menu item ID
+	ld a, [wd11f]
 	and a
-	ld a,%00000011 ; A button and B button
-	jr z,.next
+	ld a, A_BUTTON + B_BUTTON
+	jr z, .next
 	xor a
-	ld [wd11f],a
+	ld [wd11f], a
 	inc a
 .next
-	ld [hli],a ; menu watched keys
+	ld [hli], a ; menu watched keys
 	pop af
-	ld [hl],a ; old menu item ID
+	ld [hl], a ; old menu item ID
 	ret
 
 HandlePartyMenuInput:: ; 145a (0:145a)
@@ -672,7 +688,7 @@
 	ret
 
 PrintBCDDigit:: ; 1604 (0:1604)
-	and a,%00001111
+	and $f
 	and a
 	jr z,.zeroDigit
 .nonzeroDigit
@@ -1403,7 +1419,7 @@
 	ld [wTopMenuItemY],a
 	ld a,5
 	ld [wTopMenuItemX],a
-	ld a,%00000111 ; A button, B button, Select button
+	ld a,A_BUTTON | B_BUTTON | SELECT
 	ld [wMenuWatchedKeys],a
 	ld c,10
 	call DelayFrames
@@ -1827,7 +1843,7 @@
 	ld bc,20 + 8 ; 1 row down and 8 columns right
 	add hl,bc
 	ld a,"×"
-	ldi [hl],a
+	ld [hli],a
 	ld a,[wd11e]
 	push af
 	ld a,[de]
@@ -2653,8 +2669,8 @@
 
 FuncTX_BillsPC:: ; 346a (0:346a)
 	call SaveScreenTilesToBuffer2
-	ld b, BANK(Func_214c2)
-	ld hl, Func_214c2
+	ld b, BANK(BillsPC_)
+	ld hl, BillsPC_
 	jr bankswitchAndContinue
 
 FuncTX_SlotMachine:: ; 3474 (0:3474)
@@ -3064,65 +3080,63 @@
 	pop hl
 	ret
 
-; copies the tile patterns for letters and numbers into VRAM
-LoadFontTilePatterns:: ; 3680 (0:3680)
-	ld a,[rLCDC]
-	bit 7,a ; is the LCD enabled?
-	jr nz,.lcdEnabled
-.lcdDisabled
-	ld hl,FontGraphics
-	ld de,vFont
-	ld bc,$400
-	ld a,BANK(FontGraphics)
+
+LoadFontTilePatterns::
+	ld a, [rLCDC]
+	bit 7, a ; is the LCD enabled?
+	jr nz, .on
+.off
+	ld hl, FontGraphics
+	ld de, vFont
+	ld bc, $400
+	ld a, BANK(FontGraphics)
 	jp FarCopyDataDouble ; if LCD is off, transfer all at once
-.lcdEnabled
-	ld de,FontGraphics
-	ld hl,vFont
-	ld bc,(BANK(FontGraphics) << 8 | $80)
+.on
+	ld de, FontGraphics
+	ld hl, vFont
+	ld bc, BANK(FontGraphics) << 8 | $80
 	jp CopyVideoDataDouble ; if LCD is on, transfer during V-blank
 
-; copies the text box tile patterns into VRAM
-LoadTextBoxTilePatterns:: ; 36a0 (0:36a0)
-	ld a,[rLCDC]
-	bit 7,a ; is the LCD enabled?
-	jr nz,.lcdEnabled
-.lcdDisabled
-	ld hl,TextBoxGraphics
-	ld de,vChars2 + $600
-	ld bc,$200
-	ld a,BANK(TextBoxGraphics)
+LoadTextBoxTilePatterns::
+	ld a, [rLCDC]
+	bit 7, a ; is the LCD enabled?
+	jr nz, .on
+.off
+	ld hl, TextBoxGraphics
+	ld de, vChars2 + $600
+	ld bc, $200
+	ld a, BANK(TextBoxGraphics)
 	jp FarCopyData2 ; if LCD is off, transfer all at once
-.lcdEnabled
-	ld de,TextBoxGraphics
-	ld hl,vChars2 + $600
-	ld bc,(BANK(TextBoxGraphics) << 8 | $20)
+.on
+	ld de, TextBoxGraphics
+	ld hl, vChars2 + $600
+	ld bc, BANK(TextBoxGraphics) << 8 | $20
 	jp CopyVideoData ; if LCD is on, transfer during V-blank
 
-; copies HP bar and status display tile patterns into VRAM
-LoadHpBarAndStatusTilePatterns:: ; 36c0 (0:36c0)
-	ld a,[rLCDC]
-	bit 7,a ; is the LCD enabled?
-	jr nz,.lcdEnabled
-.lcdDisabled
-	ld hl,HpBarAndStatusGraphics
-	ld de,vChars2 + $620
-	ld bc,$1e0
-	ld a,BANK(HpBarAndStatusGraphics)
+LoadHpBarAndStatusTilePatterns::
+	ld a, [rLCDC]
+	bit 7, a ; is the LCD enabled?
+	jr nz, .on
+.off
+	ld hl, HpBarAndStatusGraphics
+	ld de, vChars2 + $620
+	ld bc, $1e0
+	ld a, BANK(HpBarAndStatusGraphics)
 	jp FarCopyData2 ; if LCD is off, transfer all at once
-.lcdEnabled
-	ld de,HpBarAndStatusGraphics
-	ld hl,vChars2 + $620
-	ld bc,(BANK(HpBarAndStatusGraphics) << 8 | $1e)
+.on
+	ld de, HpBarAndStatusGraphics
+	ld hl, vChars2 + $620
+	ld bc, BANK(HpBarAndStatusGraphics) << 8 | $1e
 	jp CopyVideoData ; if LCD is on, transfer during V-blank
 
-;Fills memory range with the specified byte.
-;input registers a = fill_byte, bc = length, hl = address
-FillMemory:: ; 36e0 (0:36e0)
+
+FillMemory::
+; Fill bc bytes at hl with a.
 	push de
 	ld d, a
 .loop
 	ld a, d
-	ldi [hl], a
+	ld [hli], a
 	dec bc
 	ld a, b
 	or c
@@ -3130,9 +3144,9 @@
 	pop de
 	ret
 
-; loads sprite that de points to
-; bank of sprite is given in a
+
 UncompressSpriteFromDE:: ; 36eb (0:36eb)
+; Decompress pic at a:de.
 	ld hl, W_SPRITEINPUTPTR
 	ld [hl], e
 	inc hl
@@ -3139,6 +3153,7 @@
 	ld [hl], d
 	jp UncompressSpriteData
 
+
 SaveScreenTilesToBuffer2:: ; 36f4 (0:36f4)
 	ld hl, wTileMap
 	ld de, wTileMapBackup2
@@ -3229,8 +3244,12 @@
 ; returns pointer to name in de
 	ld a,[wd0b5]
 	ld [wd11e],a
+
+	; TM names are separate from item names.
+	; BUG: This applies to all names instead of just items.
 	cp HM_01
-	jp nc,GetMachineName
+	jp nc, GetMachineName
+
 	ld a,[H_LOADEDROMBANK]
 	push af
 	push hl
@@ -3400,7 +3419,7 @@
 .delayOver
 ; if [hJoy6] = 0 and A or B is pressed, report no buttons as pressed
 	ld a,[hJoyHeld]
-	and a,%00000011 ; A and B buttons
+	and A_BUTTON | B_BUTTON
 	jr z,.setShortDelay
 	ld a,[hJoy6] ; flag
 	and a
@@ -3513,7 +3532,7 @@
 	bit 0,a
 	jr z,.waitOneFrame
 	ld a,[W_OPTIONS]
-	and a,$0f
+	and $f
 	ld [H_FRAMECOUNTER],a
 	jr .checkButtons
 .waitOneFrame
@@ -3966,7 +3985,7 @@
 	jp z,.loop1
 .checkIfAButtonOrBButtonPressed
 	ld a,[hJoy5]
-	and a,%00000011 ; pressed A button or B button?
+	and A_BUTTON | B_BUTTON
 	jr z,.skipPlayingSound
 .AButtonOrBButtonPressed
 	push hl
@@ -3996,7 +4015,7 @@
 	and a ; is the y coordinate 0?
 	jr z,.adjustForXCoord
 	ld hl,wTileMap
-	ld bc,20 ; screen width
+	ld bc,SCREEN_WIDTH
 .topMenuItemLoop
 	add hl,bc
 	dec a
@@ -4003,7 +4022,7 @@
 	jr nz,.topMenuItemLoop
 .adjustForXCoord
 	ld a,[wTopMenuItemX]
-	ld b,$00
+	ld b,0
 	ld c,a
 	add hl,bc
 	push hl
@@ -4156,7 +4175,7 @@
 	ret
 
 PrintText:: ; 3c49 (0:3c49)
-; given a pointer in hl, print the text there
+; Print text hl at (1, 14).
 	push hl
 	ld a,1
 	ld [wd125],a
@@ -4168,256 +4187,244 @@
 	bcCoord 1, 14
 	jp TextCommandProcessor
 
-; converts a big-endian binary number into decimal and prints it
-; INPUT:
-; b = flags and number of bytes
-; bit 7: if set, print leading zeroes
-;        if unset, do not print leading zeroes
-; bit 6: if set, left-align the string (do not pad empty digits with spaces)
-;        if unset, right-align the string
-; bits 4-5: unused
-; bits 0-3: number of bytes (only 1 - 3 bytes supported)
-; c = number of decimal digits
-; de = address of the number (big-endian)
-PrintNumber:: ; 3c5f (0:3c5f)
+
+PrintNumber:: ; 3c5f
+; Print the c-digit, b-byte value at de.
+; Allows 2 to 7 digits. For 1-digit numbers, add
+; the value to char "0" instead of calling PrintNumber.
+; Flags LEADING_ZEROES and LEFT_ALIGN can be given
+; in bits 7 and 6 of b respectively.
+LEADING_ZEROES EQU 7
+LEFT_ALIGN     EQU 6
+
 	push bc
 	xor a
-	ld [H_PASTLEADINGZEROES],a
-	ld [H_NUMTOPRINT],a
-	ld [H_NUMTOPRINT + 1],a
-	ld a,b
-	and a,%00001111
-	cp a,1
-	jr z,.oneByte
-	cp a,2
-	jr z,.twoBytes
-.threeBytes
-	ld a,[de]
-	ld [H_NUMTOPRINT],a
+	ld [H_PASTLEADINGZEROES], a
+	ld [H_NUMTOPRINT], a
+	ld [H_NUMTOPRINT + 1], a
+	ld a, b
+	and $f
+	cp 1
+	jr z, .byte
+	cp 2
+	jr z, .word
+.long
+	ld a, [de]
+	ld [H_NUMTOPRINT], a
 	inc de
-	ld a,[de]
-	ld [H_NUMTOPRINT + 1],a
+	ld a, [de]
+	ld [H_NUMTOPRINT + 1], a
 	inc de
-	ld a,[de]
-	ld [H_NUMTOPRINT + 2],a
-	jr .checkNumDigits
-.twoBytes
-	ld a,[de]
-	ld [H_NUMTOPRINT + 1],a
+	ld a, [de]
+	ld [H_NUMTOPRINT + 2], a
+	jr .start
+
+.word
+	ld a, [de]
+	ld [H_NUMTOPRINT + 1], a
 	inc de
-	ld a,[de]
-	ld [H_NUMTOPRINT + 2],a
-	jr .checkNumDigits
-.oneByte
-	ld a,[de]
-	ld [H_NUMTOPRINT + 2],a
-.checkNumDigits
+	ld a, [de]
+	ld [H_NUMTOPRINT + 2], a
+	jr .start
+
+.byte
+	ld a, [de]
+	ld [H_NUMTOPRINT + 2], a
+
+.start
 	push de
-	ld d,b
-	ld a,c
-	ld b,a
+
+	ld d, b
+	ld a, c
+	ld b, a
 	xor a
-	ld c,a
-	ld a,b ; a = number of decimal digits
-	cp a,2
-	jr z,.tensPlace
-	cp a,3
-	jr z,.hundredsPlace
-	cp a,4
-	jr z,.thousandsPlace
-	cp a,5
-	jr z,.tenThousandsPlace
-	cp a,6
-	jr z,.hundredThousandsPlace
-.millionsPlace
-	ld a,1000000 >> 16
-	ld [H_POWEROFTEN],a
-	ld a,(1000000 >> 8) & $FF
-	ld [H_POWEROFTEN + 1],a
-	ld a,1000000 & $FF
-	ld [H_POWEROFTEN + 2],a
-	call PrintNumber_PrintDigit
-	call PrintNumber_AdvancePointer
-.hundredThousandsPlace
-	ld a,100000 >> 16
-	ld [H_POWEROFTEN],a
-	ld a,(100000 >> 8) & $FF
-	ld [H_POWEROFTEN + 1],a
-	ld a,100000 & $FF
-	ld [H_POWEROFTEN + 2],a
-	call PrintNumber_PrintDigit
-	call PrintNumber_AdvancePointer
-.tenThousandsPlace
-	xor a
-	ld [H_POWEROFTEN],a
-	ld a,10000 >> 8
-	ld [H_POWEROFTEN + 1],a
-	ld a,10000 & $FF
-	ld [H_POWEROFTEN + 2],a
-	call PrintNumber_PrintDigit
-	call PrintNumber_AdvancePointer
-.thousandsPlace
-	xor a
-	ld [H_POWEROFTEN],a
-	ld a,1000 >> 8
-	ld [H_POWEROFTEN + 1],a
-	ld a,1000 & $FF
-	ld [H_POWEROFTEN + 2],a
-	call PrintNumber_PrintDigit
-	call PrintNumber_AdvancePointer
-.hundredsPlace
-	xor a
-	ld [H_POWEROFTEN],a
-	xor a
-	ld [H_POWEROFTEN + 1],a
-	ld a,100
-	ld [H_POWEROFTEN + 2],a
-	call PrintNumber_PrintDigit
-	call PrintNumber_AdvancePointer
-.tensPlace
-	ld c,00
-	ld a,[H_NUMTOPRINT + 2]
-.loop
-	cp a,10
-	jr c,.underflow
-	sub a,10
+	ld c, a
+	ld a, b
+
+	cp 2
+	jr z, .tens
+	cp 3
+	jr z, .hundreds
+	cp 4
+	jr z, .thousands
+	cp 5
+	jr z, .ten_thousands
+	cp 6
+	jr z, .hundred_thousands
+
+print_digit: macro
+
+if (\1) / $10000
+	ld a, \1 / $10000 % $100
+else	xor a
+endc
+	ld [H_POWEROFTEN + 0], a
+
+if (\1) / $100
+	ld a, \1 / $100   % $100
+else	xor a
+endc
+	ld [H_POWEROFTEN + 1], a
+
+	ld a, \1 / $1     % $100
+	ld [H_POWEROFTEN + 2], a
+
+	call .PrintDigit
+	call .NextDigit
+endm
+
+.millions          print_digit 1000000
+.hundred_thousands print_digit 100000
+.ten_thousands     print_digit 10000
+.thousands         print_digit 1000
+.hundreds          print_digit 100
+
+.tens
+	ld c, 0
+	ld a, [H_NUMTOPRINT + 2]
+.mod
+	cp 10
+	jr c, .ok
+	sub 10
 	inc c
-	jr .loop
-.underflow
-	ld b,a
-	ld a,[H_PASTLEADINGZEROES]
+	jr .mod
+.ok
+
+	ld b, a
+	ld a, [H_PASTLEADINGZEROES]
 	or c
-	ld [H_PASTLEADINGZEROES],a
-	jr nz,.pastLeadingZeroes
-	call PrintNumber_PrintLeadingZero
-	jr .advancePointer
-.pastLeadingZeroes
-	ld a,"0"
+	ld [H_PASTLEADINGZEROES], a
+	jr nz, .past
+	call .PrintLeadingZero
+	jr .next
+.past
+	ld a, "0"
 	add c
-	ld [hl],a
-.advancePointer
-	call PrintNumber_AdvancePointer
-.onesPlace
-	ld a,"0"
+	ld [hl], a
+.next
+
+	call .NextDigit
+.ones
+	ld a, "0"
 	add b
-	ld [hli],a
+	ld [hli], a
 	pop de
 	dec de
 	pop bc
 	ret
 
-; prints a decimal digit
-; This works by repeatedely subtracting a power of ten until the number becomes negative.
-; The number of subtractions it took in order to make the number negative is the digit for the current number place.
-; The last value that the number had before becoming negative is kept as the new value of the number.
-; A more succinct description is that the number is divided by a power of ten
-; and the quotient becomes the digit while the remainder is stored as the new value of the number.
-PrintNumber_PrintDigit:: ; 3d25 (0:3d25)
-	ld c,0 ; counts number of loop iterations to determine the decimal digit
+.PrintDigit:
+; Divide by the current decimal place.
+; Print the quotient, and keep the modulus.
+	ld c, 0
 .loop
-	ld a,[H_POWEROFTEN]
-	ld b,a
-	ld a,[H_NUMTOPRINT]
-	ld [H_SAVEDNUMTOPRINT],a
+	ld a, [H_POWEROFTEN]
+	ld b, a
+	ld a, [H_NUMTOPRINT]
+	ld [H_SAVEDNUMTOPRINT], a
 	cp b
-	jr c,.underflow0
+	jr c, .underflow0
 	sub b
-	ld [H_NUMTOPRINT],a
-	ld a,[H_POWEROFTEN + 1]
-	ld b,a
-	ld a,[H_NUMTOPRINT + 1]
-	ld [H_SAVEDNUMTOPRINT + 1],a
+	ld [H_NUMTOPRINT], a
+	ld a, [H_POWEROFTEN + 1]
+	ld b, a
+	ld a, [H_NUMTOPRINT + 1]
+	ld [H_SAVEDNUMTOPRINT + 1], a
 	cp b
-	jr nc,.noBorrowForByte1
-.byte1BorrowFromByte0
-	ld a,[H_NUMTOPRINT]
-	or a,0
-	jr z,.underflow1
+	jr nc, .noborrow1
+
+	ld a, [H_NUMTOPRINT]
+	or 0
+	jr z, .underflow1
 	dec a
-	ld [H_NUMTOPRINT],a
-	ld a,[H_NUMTOPRINT + 1]
-.noBorrowForByte1
+	ld [H_NUMTOPRINT], a
+	ld a, [H_NUMTOPRINT + 1]
+.noborrow1
+
 	sub b
-	ld [H_NUMTOPRINT + 1],a
-	ld a,[H_POWEROFTEN + 2]
-	ld b,a
-	ld a,[H_NUMTOPRINT + 2]
-	ld [H_SAVEDNUMTOPRINT + 2],a
+	ld [H_NUMTOPRINT + 1], a
+	ld a, [H_POWEROFTEN + 2]
+	ld b, a
+	ld a, [H_NUMTOPRINT + 2]
+	ld [H_SAVEDNUMTOPRINT + 2], a
 	cp b
-	jr nc,.noBorrowForByte2
-.byte2BorrowFromByte1
-	ld a,[H_NUMTOPRINT + 1]
+	jr nc, .noborrow2
+
+	ld a, [H_NUMTOPRINT + 1]
 	and a
-	jr nz,.finishByte2BorrowFromByte1
-.byte2BorrowFromByte0
-	ld a,[H_NUMTOPRINT]
+	jr nz, .borrowed
+
+	ld a, [H_NUMTOPRINT]
 	and a
-	jr z,.underflow2
+	jr z, .underflow2
 	dec a
-	ld [H_NUMTOPRINT],a
+	ld [H_NUMTOPRINT], a
 	xor a
-.finishByte2BorrowFromByte1
+.borrowed
+
 	dec a
-	ld [H_NUMTOPRINT + 1],a
-	ld a,[H_NUMTOPRINT + 2]
-.noBorrowForByte2
+	ld [H_NUMTOPRINT + 1], a
+	ld a, [H_NUMTOPRINT + 2]
+.noborrow2
 	sub b
-	ld [H_NUMTOPRINT + 2],a
+	ld [H_NUMTOPRINT + 2], a
 	inc c
 	jr .loop
+
 .underflow2
-	ld a,[H_SAVEDNUMTOPRINT + 1]
-	ld [H_NUMTOPRINT + 1],a
+	ld a, [H_SAVEDNUMTOPRINT + 1]
+	ld [H_NUMTOPRINT + 1], a
 .underflow1
-	ld a,[H_SAVEDNUMTOPRINT]
-	ld [H_NUMTOPRINT],a
+	ld a, [H_SAVEDNUMTOPRINT]
+	ld [H_NUMTOPRINT], a
 .underflow0
-	ld a,[H_PASTLEADINGZEROES]
+	ld a, [H_PASTLEADINGZEROES]
 	or c
-	jr z,PrintNumber_PrintLeadingZero
-	ld a,"0"
+	jr z, .PrintLeadingZero
+
+	ld a, "0"
 	add c
-	ld [hl],a
-	ld [H_PASTLEADINGZEROES],a
+	ld [hl], a
+	ld [H_PASTLEADINGZEROES], a
 	ret
 
-; prints a leading zero unless they are turned off in the flags
-PrintNumber_PrintLeadingZero:: ; 3d83 (0:3d83)
-	bit 7,d ; print leading zeroes?
+.PrintLeadingZero:
+	bit LEADING_ZEROES, d
 	ret z
-	ld [hl],"0"
+	ld [hl], "0"
 	ret
 
-; increments the pointer unless leading zeroes are not being printed,
-; the number is left-aligned, and no nonzero digits have been printed yet
-PrintNumber_AdvancePointer:: ; 3d89 (0:3d89)
-	bit 7,d ; print leading zeroes?
-	jr nz,.incrementPointer
-	bit 6,d ; left alignment or right alignment?
-	jr z,.incrementPointer
-	ld a,[H_PASTLEADINGZEROES]
+.NextDigit:
+; Increment unless the number is left-aligned,
+; leading zeroes are not printed, and no digits
+; have been printed yet.
+	bit LEADING_ZEROES, d
+	jr nz, .inc
+	bit LEFT_ALIGN, d
+	jr z, .inc
+	ld a, [H_PASTLEADINGZEROES]
 	and a
 	ret z
-.incrementPointer
+.inc
 	inc hl
 	ret
 
-; calls a function from a table of function pointers
-; INPUT:
-; a = index within table
-; hl = address of function pointer table
-CallFunctionInTable:: ; 3d97 (0:3d97)
+
+CallFunctionInTable::
+JumpTable::
+; Call function a in jumptable hl.
+; de is not preserved.
 	push hl
 	push de
 	push bc
 	add a
-	ld d,0
-	ld e,a
-	add hl,de
-	ld a,[hli]
-	ld h,[hl]
-	ld l,a
-	ld de,.returnAddress
+	ld d, 0
+	ld e, a
+	add hl, de
+	ld a, [hli]
+	ld h, [hl]
+	ld l, a
+	ld de, .returnAddress
 	push de
 	jp [hl]
 .returnAddress
@@ -4570,7 +4577,7 @@
 	push de
 	push bc
 	callba Random_
-	ld a,[hRandomAdd]
+	ld a, [hRandomAdd]
 	pop bc
 	pop de
 	pop hl
@@ -4623,7 +4630,7 @@
 
 PrintPredefTextID:: ; 3ef5 (0:3ef5)
 	ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
-	ld hl, PointerTable_3f22
+	ld hl, TextPredefs
 	call Func_3f0f
 	ld hl, wcf11
 	set 0, [hl]
@@ -4630,88 +4637,88 @@
 	call DisplayTextID
 
 Func_3f05:: ; 3f05 (0:3f05)
-	ld hl, W_MAPTEXTPTR ; wd36c
+	ld hl, W_MAPTEXTPTR
 	ld a, [$ffec]
 	ld [hli], a
-	ld a, [$ffed]
+	ld a, [$ffec + 1]
 	ld [hl], a
 	ret
 
 Func_3f0f:: ; 3f0f (0:3f0f)
-	ld a, [W_MAPTEXTPTR] ; wd36c
+	ld a, [W_MAPTEXTPTR]
 	ld [$ffec], a
 	ld a, [W_MAPTEXTPTR + 1]
-	ld [$ffed], a
+	ld [$ffec + 1], a
 	ld a, l
-	ld [W_MAPTEXTPTR], a ; wd36c
+	ld [W_MAPTEXTPTR], a
 	ld a, h
 	ld [W_MAPTEXTPTR + 1], a
 	ret
 
-PointerTable_3f22:: ; 3f22 (0:3f22)
-	dw CardKeySuccessText                   ; id = 01
-	dw CardKeyFailText                      ; id = 02
-	dw RedBedroomPC                         ; id = 03
-	dw RedBedroomSNESText                   ; id = 04
-	dw PushStartText                        ; id = 05
-	dw SaveOptionText                       ; id = 06
-	dw StrengthsAndWeaknessesText           ; id = 07
-	dw OakLabEmailText                      ; id = 08
-	dw AerodactylFossilText                 ; id = 09
-	dw Route15UpstairsBinocularsText        ; id = 0A
-	dw KabutopsFossilText                   ; id = 0B
-	dw GymStatueText1                       ; id = 0C
-	dw GymStatueText2                       ; id = 0D
-	dw BookcaseText                         ; id = 0E
-	dw ViridianCityPokecenterBenchGuyText   ; id = 0F
-	dw PewterCityPokecenterBenchGuyText     ; id = 10
-	dw CeruleanCityPokecenterBenchGuyText   ; id = 11
-	dw LavenderCityPokecenterBenchGuyText   ; id = 12
-	dw VermilionCityPokecenterBenchGuyText  ; id = 13
-	dw CeladonCityPokecenterBenchGuyText    ; id = 14
-	dw CeladonCityHotelText                 ; id = 15
-	dw FuchsiaCityPokecenterBenchGuyText    ; id = 16
-	dw CinnabarIslandPokecenterBenchGuyText ; id = 17
-	dw SaffronCityPokecenterBenchGuyText    ; id = 18
-	dw MtMoonPokecenterBenchGuyText         ; id = 19
-	dw RockTunnelPokecenterBenchGuyText     ; id = 1A
-	dw UnusedBenchGuyText1                  ; id = 1B
-	dw UnusedBenchGuyText2                  ; id = 1C
-	dw UnusedBenchGuyText3                  ; id = 1D
-	dw TerminatorText_62508                 ; id = 1E
-	dw PredefText1f                         ; id = 1F
-	dw ViridianSchoolNotebook               ; id = 20
-	dw ViridianSchoolBlackboard             ; id = 21
-	dw JustAMomentText                      ; id = 22
-	dw PredefText23                         ; id = 23
-	dw FoundHiddenItemText                  ; id = 24
-	dw HiddenItemBagFullText                ; id = 25
-	dw VermilionGymTrashText                ; id = 26
-	dw IndigoPlateauHQText                  ; id = 27
-	dw GameCornerOutOfOrderText             ; id = 28
-	dw GameCornerOutToLunchText             ; id = 29
-	dw GameCornerSomeonesKeysText           ; id = 2A
-	dw FoundHiddenCoinsText                 ; id = 2B
-	dw DroppedHiddenCoinsText               ; id = 2C
-	dw BillsHouseMonitorText                ; id = 2D
-	dw BillsHouseInitiatedText              ; id = 2E
-	dw BillsHousePokemonList                ; id = 2F
-	dw MagazinesText                        ; id = 30
-	dw CinnabarGymQuiz                      ; id = 31
-	dw GameCornerNoCoinsText                ; id = 32
-	dw GameCornerCoinCaseText               ; id = 33
-	dw LinkCableHelp                        ; id = 34
-	dw TMNotebook                           ; id = 35
-	dw FightingDojoText                     ; id = 36
-	dw FightingDojoText_52a10               ; id = 37
-	dw FightingDojoText_52a1d               ; id = 38
-	dw NewBicycleText                       ; id = 39
-	dw IndigoPlateauStatues                 ; id = 3A
-	dw VermilionGymTrashSuccesText1         ; id = 3B
-	dw VermilionGymTrashSuccesText2         ; id = 3C
-	dw VermilionGymTrashSuccesText3         ; id = 3D
-	dw VermilionGymTrashFailText            ; id = 3E
-	dw TownMapText                          ; id = 3F
-	dw BookOrSculptureText                  ; id = 40
-	dw ElevatorText                         ; id = 41
-	dw PokemonStuffText                     ; id = 42
+TextPredefs::
+	dw CardKeySuccessText                   ; 01
+	dw CardKeyFailText                      ; 02
+	dw RedBedroomPC                         ; 03
+	dw RedBedroomSNESText                   ; 04
+	dw PushStartText                        ; 05
+	dw SaveOptionText                       ; 06
+	dw StrengthsAndWeaknessesText           ; 07
+	dw OakLabEmailText                      ; 08
+	dw AerodactylFossilText                 ; 09
+	dw Route15UpstairsBinocularsText        ; 0A
+	dw KabutopsFossilText                   ; 0B
+	dw GymStatueText1                       ; 0C
+	dw GymStatueText2                       ; 0D
+	dw BookcaseText                         ; 0E
+	dw ViridianCityPokecenterBenchGuyText   ; 0F
+	dw PewterCityPokecenterBenchGuyText     ; 10
+	dw CeruleanCityPokecenterBenchGuyText   ; 11
+	dw LavenderCityPokecenterBenchGuyText   ; 12
+	dw VermilionCityPokecenterBenchGuyText  ; 13
+	dw CeladonCityPokecenterBenchGuyText    ; 14
+	dw CeladonCityHotelText                 ; 15
+	dw FuchsiaCityPokecenterBenchGuyText    ; 16
+	dw CinnabarIslandPokecenterBenchGuyText ; 17
+	dw SaffronCityPokecenterBenchGuyText    ; 18
+	dw MtMoonPokecenterBenchGuyText         ; 19
+	dw RockTunnelPokecenterBenchGuyText     ; 1A
+	dw UnusedBenchGuyText1                  ; 1B
+	dw UnusedBenchGuyText2                  ; 1C
+	dw UnusedBenchGuyText3                  ; 1D
+	dw TerminatorText_62508                 ; 1E
+	dw PredefText1f                         ; 1F
+	dw ViridianSchoolNotebook               ; 20
+	dw ViridianSchoolBlackboard             ; 21
+	dw JustAMomentText                      ; 22
+	dw PredefText23                         ; 23
+	dw FoundHiddenItemText                  ; 24
+	dw HiddenItemBagFullText                ; 25
+	dw VermilionGymTrashText                ; 26
+	dw IndigoPlateauHQText                  ; 27
+	dw GameCornerOutOfOrderText             ; 28
+	dw GameCornerOutToLunchText             ; 29
+	dw GameCornerSomeonesKeysText           ; 2A
+	dw FoundHiddenCoinsText                 ; 2B
+	dw DroppedHiddenCoinsText               ; 2C
+	dw BillsHouseMonitorText                ; 2D
+	dw BillsHouseInitiatedText              ; 2E
+	dw BillsHousePokemonList                ; 2F
+	dw MagazinesText                        ; 30
+	dw CinnabarGymQuiz                      ; 31
+	dw GameCornerNoCoinsText                ; 32
+	dw GameCornerCoinCaseText               ; 33
+	dw LinkCableHelp                        ; 34
+	dw TMNotebook                           ; 35
+	dw FightingDojoText                     ; 36
+	dw FightingDojoText_52a10               ; 37
+	dw FightingDojoText_52a1d               ; 38
+	dw NewBicycleText                       ; 39
+	dw IndigoPlateauStatues                 ; 3A
+	dw VermilionGymTrashSuccesText1         ; 3B
+	dw VermilionGymTrashSuccesText2         ; 3C
+	dw VermilionGymTrashSuccesText3         ; 3D
+	dw VermilionGymTrashFailText            ; 3E
+	dw TownMapText                          ; 3F
+	dw BookOrSculptureText                  ; 40
+	dw ElevatorText                         ; 41
+	dw PokemonStuffText                     ; 42