shithub: pokered

Download patch

ref: d3f13528754b985e892385dbd88c3c9a95681f1b
parent: abaf9fee7c73e708ef8c3e7a1ed710bfc9ec6f6e
parent: e16dec874a239c162680b169391d3c0c7ee1fc70
author: Rangi <35663410+Rangi42@users.noreply.github.com>
date: Thu Nov 5 18:50:03 EST 2020

Merge pull request #301 from Rangi42/master

Sync home and macro code with pokeyellow

--- a/constants/gfx_constants.asm
+++ b/constants/gfx_constants.asm
@@ -2,16 +2,6 @@
 LEN_1BPP_TILE EQU 1 * TILE_WIDTH ; bytes
 LEN_2BPP_TILE EQU 2 * TILE_WIDTH ; bytes
 
-	const_def
-	const SHADE_WHITE ; %00
-	const SHADE_LIGHT ; %01
-	const SHADE_DARK  ; %10
-	const SHADE_BLACK ; %11
-NUM_PAL_COLORS EQU const_value
-
-PAL_COLOR_SIZE EQU 2
-PALETTE_SIZE EQU NUM_PAL_COLORS * PAL_COLOR_SIZE
-
 SCREEN_WIDTH  EQU 20
 SCREEN_HEIGHT EQU 18
 SCREEN_WIDTH_PX  EQU SCREEN_WIDTH  * TILE_WIDTH ; pixels
--- a/constants/palette_constants.asm
+++ b/constants/palette_constants.asm
@@ -1,9 +1,13 @@
 ; monochrome palette color ids
 	const_def
-	const WHITE
-	const LIGHT_GRAY
-	const DARK_GRAY
-	const BLACK
+	const SHADE_WHITE ; %00
+	const SHADE_LIGHT ; %01
+	const SHADE_DARK  ; %10
+	const SHADE_BLACK ; %11
+NUM_PAL_COLORS EQU const_value
+
+PAL_COLOR_SIZE EQU 2
+PALETTE_SIZE EQU NUM_PAL_COLORS * PAL_COLOR_SIZE
 
 ; pal/blk packets
 ; SetPalFunctions indexes (see engine/gfx/palettes.asm)
--- a/data/maps/special_warps.asm
+++ b/data/maps/special_warps.asm
@@ -48,11 +48,11 @@
 	special_warp_spec REDS_HOUSE_2F, 3, 6, REDS_HOUSE_2
 TradeCenterSpec1:
 	special_warp_spec TRADE_CENTER,  3, 4, CLUB
-TradeCenterSpec2:                   
+TradeCenterSpec2:
 	special_warp_spec TRADE_CENTER,  6, 4, CLUB
-ColosseumSpec1:                     
+ColosseumSpec1:
 	special_warp_spec COLOSSEUM,     3, 4, CLUB
-ColosseumSpec2:                     
+ColosseumSpec2:
 	special_warp_spec COLOSSEUM,     6, 4, CLUB
 
 
--- a/data/trainers/special_moves.asm
+++ b/data/trainers/special_moves.asm
@@ -1,6 +1,6 @@
 ; unique moves for gym leaders
 ; this is not automatic! you have to write the index you want to [wLoneAttackNo]
-; first. e.g., erika's script writes 4 to [wLoneAttackNo] to get mega drain, 
+; first. e.g., erika's script writes 4 to [wLoneAttackNo] to get mega drain,
 ; the fourth entry in the list.
 LoneMoves:
 	; pokemon index, move to give nth pokemon
--- a/engine/battle/animations.asm
+++ b/engine/battle/animations.asm
@@ -133,7 +133,7 @@
 .afterDrawingTiles
 	ld a, [wFBMode]
 	cp FRAMEBLOCKMODE_02
-	jr z, .advanceFrameBlockDestAddr; skip delay and don't clean OAM buffer
+	jr z, .advanceFrameBlockDestAddr ; skip delay and don't clean OAM buffer
 	ld a, [wSubAnimFrameDelay]
 	ld c, a
 	call DelayFrames
@@ -2410,7 +2410,7 @@
 	ret
 
 FallingObjects_InitialXCoords:
-	db $38,$40,$50,$60,$70,$88,$90,$56,$67,$4A,$77,$84,$98,$32,$22,$5C,$6C,$7D,$8E,$99
+	db $38, $40, $50, $60, $70, $88, $90, $56, $67, $4A, $77, $84, $98, $32, $22, $5C, $6C, $7D, $8E, $99
 
 FallingObjects_InitMovementData:
 	ld hl, wFallingObjectsMovementData
@@ -2426,7 +2426,7 @@
 	ret
 
 FallingObjects_InitialMovementData:
-	db $00,$84,$06,$81,$02,$88,$01,$83,$05,$89,$09,$80,$07,$87,$03,$82,$04,$85,$08,$86
+	db $00, $84, $06, $81, $02, $88, $01, $83, $05, $89, $09, $80, $07, $87, $03, $82, $04, $85, $08, $86
 
 AnimationShakeEnemyHUD:
 ; Shakes the enemy HUD.
@@ -2583,7 +2583,7 @@
 
 .PokeBallAnimations:
 ; sequence of animations that make up the Poké Ball toss
-	db POOF_ANIM,HIDEPIC_ANIM,SHAKE_ANIM,POOF_ANIM,SHOWPIC_ANIM
+	db POOF_ANIM, HIDEPIC_ANIM, SHAKE_ANIM, POOF_ANIM, SHOWPIC_ANIM
 
 .BlockBall
 	ld a, TOSS_ANIM
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -1098,7 +1098,7 @@
 	ld a, [wLinkState]
 	cp LINK_STATE_BATTLING
 	jr nz, .notLinkBattle
-	inc a
+	inc a ; 1
 	ld [wActionResultOrTookBattleTurn], a
 	call LinkBattleExchangeData
 .notLinkBattle
@@ -1724,7 +1724,7 @@
 	ld hl, wEnemyMonHP
 	ld a, [hli]
 	or [hl] ; is enemy mon HP zero?
-	jp z, .skipDrawingEnemyHUDAndHPBar; if HP is zero, skip drawing the HUD and HP bar
+	jp z, .skipDrawingEnemyHUDAndHPBar ; if HP is zero, skip drawing the HUD and HP bar
 	call DrawEnemyHUDAndHPBar
 .skipDrawingEnemyHUDAndHPBar
 	call DrawPlayerHUDAndHPBar
@@ -2017,14 +2017,16 @@
 	dec a
 	jp nz, .handleBattleMenuInput ; handle menu input if it's not the old man tutorial
 ; the following happens for the old man tutorial
+	; Temporarily save the player name in wGrassRate,
+	; which is supposed to get overwritten when entering a
+	; map with wild Pokémon.
+	; Due to an oversight, the data may not get
+	; overwritten (on Cinnabar and Route 21) and the infamous
+	; Missingno. glitch can show up.
 	ld hl, wPlayerName
 	ld de, wGrassRate
 	ld bc, NAME_LENGTH
-	call CopyData  ; temporarily save the player name in unused space,
-	               ; which is supposed to get overwritten when entering a
-	               ; map with wild Pokémon. Due to an oversight, the data
-	               ; may not get overwritten (cinnabar) and the infamous
-	               ; Missingno. glitch can show up.
+	call CopyData
 	ld hl, .oldManName
 	ld de, wPlayerName
 	ld bc, NAME_LENGTH
@@ -2206,7 +2208,7 @@
 OldManItemList:
 	db 1 ; # items
 	db POKE_BALL, 50
-	db -1
+	db -1 ; end
 
 DisplayPlayerBag:
 	; get the pointer to player's bag when in a normal battle
@@ -4101,7 +4103,7 @@
 	call GetCurrentMove
 .canUseMove
 	ld a, $1
-	and a; clear Z flag
+	and a ; clear Z flag
 	ret
 .cannotUseMove
 	xor a ; set Z flag
@@ -4485,7 +4487,7 @@
 	ld b, 4
 	call Divide
 
-; Update wCurDamage. 
+; Update wCurDamage.
 ; Capped at MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE: 999 - 2 = 997.
 	ld hl, wDamage
 	ld b, [hl]
@@ -4574,7 +4576,7 @@
 INCLUDE "data/battle/unused_critical_hit_moves.asm"
 
 ; determines if attack is a critical hit
-; azure heights claims "the fastest pokémon (who are,not coincidentally,
+; Azure Heights claims "the fastest pokémon (who are, not coincidentally,
 ; among the most popular) tend to CH about 20 to 25% of the time."
 CriticalHitTest:
 	xor a
@@ -6302,7 +6304,7 @@
 	dec a ; is it the old man tutorial?
 	ld de, RedPicBack
 	jr nz, .next
-	ld de, OldManPic
+	ld de, OldManPicBack
 .next
 	ld a, BANK(RedPicBack)
 	call UncompressSpriteFromDE
--- a/engine/battle/decrement_pp.asm
+++ b/engine/battle/decrement_pp.asm
@@ -37,7 +37,7 @@
 	ld a, [wPlayerMoveListIndex] ; which move (0, 1, 2, 3) did we use?
 	ld c, a
 	ld b, 0
-	add hl ,bc           ; calculate the address in memory of the PP we need to decrement
+	add hl, bc           ; calculate the address in memory of the PP we need to decrement
 	                     ; based on the move chosen.
 	dec [hl]             ; Decrement PP
 	ret
--- a/engine/battle/effects.asm
+++ b/engine/battle/effects.asm
@@ -198,7 +198,7 @@
 	ret nz ; return if they have a substitute, can't effect them
 	ldh a, [hWhoseTurn]
 	and a
-	jp nz, opponentAttacker
+	jp nz, .opponentAttacker
 	ld a, [wEnemyMonStatus]
 	and a
 	jp nz, CheckDefrost ; can't inflict status if opponent is already statused
@@ -224,10 +224,10 @@
 	ret nc ; do nothing if random value is >= 1A or 4D [no status applied]
 	ld a, b ; what type of effect is this?
 	cp BURN_SIDE_EFFECT1
-	jr z, .burn
+	jr z, .burn1
 	cp FREEZE_SIDE_EFFECT
-	jr z, .freeze
-; .paralyze
+	jr z, .freeze1
+; .paralyze1
 	ld a, 1 << PAR
 	ld [wEnemyMonStatus], a
 	call QuarterSpeedDueToParalysis ; quarter speed of affected mon
@@ -234,7 +234,7 @@
 	ld a, ANIM_A9
 	call PlayBattleAnimation
 	jp PrintMayNotAttackText ; print paralysis text
-.burn
+.burn1
 	ld a, 1 << BRN
 	ld [wEnemyMonStatus], a
 	call HalveAttackDueToBurn ; halve attack of affected mon
@@ -242,7 +242,7 @@
 	call PlayBattleAnimation
 	ld hl, BurnedText
 	jp PrintText
-.freeze
+.freeze1
 	call ClearHyperBeam ; resets hyper beam (recharge) condition from target
 	ld a, 1 << FRZ
 	ld [wEnemyMonStatus], a
@@ -250,7 +250,7 @@
 	call PlayBattleAnimation
 	ld hl, FrozenText
 	jp PrintText
-opponentAttacker:
+.opponentAttacker
 	ld a, [wBattleMonStatus] ; mostly same as above with addresses swapped for opponent
 	and a
 	jp nz, CheckDefrost
@@ -265,10 +265,10 @@
 	ld a, [wEnemyMoveEffect]
 	cp PARALYZE_SIDE_EFFECT1 + 1
 	ld b, $1a
-	jr c, .next1
+	jr c, .next2
 	ld b, $4d
 	sub $1e
-.next1
+.next2
 	push af
 	call BattleRandom
 	cp b
@@ -276,20 +276,21 @@
 	ret nc
 	ld a, b
 	cp BURN_SIDE_EFFECT1
-	jr z, .burn
+	jr z, .burn2
 	cp FREEZE_SIDE_EFFECT
-	jr z, .freeze
+	jr z, .freeze2
+; .paralyze2
 	ld a, 1 << PAR
 	ld [wBattleMonStatus], a
 	call QuarterSpeedDueToParalysis
 	jp PrintMayNotAttackText
-.burn
+.burn2
 	ld a, 1 << BRN
 	ld [wBattleMonStatus], a
 	call HalveAttackDueToBurn
 	ld hl, BurnedText
 	jp PrintText
-.freeze
+.freeze2
 ; hyper beam bits aren't reseted for opponent's side
 	ld a, 1 << FRZ
 	ld [wBattleMonStatus], a
@@ -458,14 +459,14 @@
 	ld bc, wPlayerMonMinimized
 	ldh a, [hWhoseTurn]
 	and a
-	jr z, .asm_3f4e6
+	jr z, .playerTurn
 	ld hl, wEnemyBattleStatus2
 	ld de, wEnemyMoveNum
 	ld bc, wEnemyMonMinimized
-.asm_3f4e6
+.playerTurn
 	ld a, [de]
 	cp MINIMIZE
-	jr nz, .asm_3f4f9
+	jr nz, .notMinimize
  ; if a substitute is up, slide off the substitute and show the mon pic before
  ; playing the minimize animation
 	bit HAS_SUBSTITUTE_UP, [hl]
@@ -476,7 +477,7 @@
 	push de
 	call nz, Bankswitch
 	pop de
-.asm_3f4f9
+.notMinimize
 	call PlayCurrentMoveAnimation
 	ld a, [de]
 	cp MINIMIZE
--- a/engine/battle/ghost_marowak_anim.asm
+++ b/engine/battle/ghost_marowak_anim.asm
@@ -74,7 +74,7 @@
 	ld [hli], a
 	ld a, d
 	ld [hli], a
-	ld a, $10 ; use OBP1
+	ld a, OAM_OBP1
 	ld [hli], a
 	inc d
 	dec c
--- a/engine/battle/move_effects/heal.asm
+++ b/engine/battle/move_effects/heal.asm
@@ -86,7 +86,7 @@
 	ld [wHPBarNewHP], a
 .playAnim
 	ld hl, PlayCurrentMoveAnimation
-	call BankswitchEtoF
+	call EffectCallBattleCore
 	ldh a, [hWhoseTurn]
 	and a
 	hlcoord 10, 9
@@ -98,7 +98,7 @@
 	ld [wHPBarType], a
 	predef UpdateHPBar2
 	ld hl, DrawHUDsAndHPBars
-	call BankswitchEtoF
+	call EffectCallBattleCore
 	ld hl, RegainedHealthText
 	jp PrintText
 .failed
@@ -105,7 +105,7 @@
 	ld c, 50
 	call DelayFrames
 	ld hl, PrintButItFailedText_
-	jp BankswitchEtoF
+	jp EffectCallBattleCore
 
 StartedSleepingEffect:
 	text_far _StartedSleepingEffect
--- a/engine/battle/move_effects/reflect_light_screen.asm
+++ b/engine/battle/move_effects/reflect_light_screen.asm
@@ -23,7 +23,7 @@
 .playAnim
 	push hl
 	ld hl, PlayCurrentMoveAnimation
-	call BankswitchEtoF
+	call EffectCallBattleCore
 	pop hl
 	jp PrintText
 .moveFailed
@@ -30,7 +30,7 @@
 	ld c, 50
 	call DelayFrames
 	ld hl, PrintButItFailedText_
-	jp BankswitchEtoF
+	jp EffectCallBattleCore
 
 LightScreenProtectedText:
 	text_far _LightScreenProtectedText
@@ -40,6 +40,6 @@
 	text_far _ReflectGainedArmorText
 	text_end
 
-BankswitchEtoF:
+EffectCallBattleCore:
 	ld b, BANK(BattleCore)
 	jp Bankswitch
--- a/engine/battle/move_effects/transform.asm
+++ b/engine/battle/move_effects/transform.asm
@@ -141,7 +141,7 @@
 
 .failed
 	ld hl, PrintButItFailedText_
-	jp BankswitchEtoF
+	jp EffectCallBattleCore
 
 TransformedText:
 	text_far _TransformedText
--- a/engine/battle/read_trainer_party.asm
+++ b/engine/battle/read_trainer_party.asm
@@ -16,7 +16,7 @@
 
 ; get the pointer to trainer data for this class
 	ld a, [wCurOpponent]
-	sub $C9 ; convert value from pokemon to trainer
+	sub OPP_ID_OFFSET + 1 ; convert value from pokemon to trainer
 	add a
 	ld hl, TrainerDataPointers
 	ld c, a
@@ -79,7 +79,7 @@
 	pop hl
 	jr .SpecialTrainer
 .AddLoneMove
-; does the trainer have a single monster with a different move
+; does the trainer have a single monster with a different move?
 	ld a, [wLoneAttackNo] ; Brock is 01, Misty is 02, Erika is 04, etc
 	and a
 	jr z, .AddTeamMove
--- a/engine/battle/safari_zone.asm
+++ b/engine/battle/safari_zone.asm
@@ -2,11 +2,11 @@
 	ld hl, wSafariBaitFactor
 	ld a, [hl]
 	and a
-	jr z, .asm_4284
+	jr z, .no_bait
 	dec [hl]
 	ld hl, SafariZoneEatingText
-	jr .asm_429f
-.asm_4284
+	jr .done
+.no_bait
 	dec hl
 	ld a, [hl]
 	and a
@@ -13,7 +13,7 @@
 	ret z
 	dec [hl]
 	ld hl, SafariZoneAngryText
-	jr nz, .asm_429f
+	jr nz, .done
 	push hl
 	ld a, [wEnemyMonSpecies]
 	ld [wd0b5], a
@@ -21,7 +21,7 @@
 	ld a, [wMonHCatchRate]
 	ld [wEnemyMonActualCatchRate], a
 	pop hl
-.asm_429f
+.done
 	push hl
 	call LoadScreenTilesFromBuffer1
 	pop hl
--- a/engine/battle/scale_sprites.asm
+++ b/engine/battle/scale_sprites.asm
@@ -4,11 +4,11 @@
 ScaleSpriteByTwo:
 	ld de, sSpriteBuffer1 + (4*4*8) - 5          ; last byte of input data, last 4 rows already skipped
 	ld hl, sSpriteBuffer0 + SPRITEBUFFERSIZE - 1 ; end of destination buffer
-	call ScaleLastSpriteColumnByTwo               ; last tile column is special case
-	call ScaleFirstThreeSpriteColumnsByTwo        ; scale first 3 tile columns
+	call ScaleLastSpriteColumnByTwo              ; last tile column is special case
+	call ScaleFirstThreeSpriteColumnsByTwo       ; scale first 3 tile columns
 	ld de, sSpriteBuffer2 + (4*4*8) - 5          ; last byte of input data, last 4 rows already skipped
 	ld hl, sSpriteBuffer1 + SPRITEBUFFERSIZE - 1 ; end of destination buffer
-	call ScaleLastSpriteColumnByTwo               ; last tile column is special case
+	call ScaleLastSpriteColumnByTwo              ; last tile column is special case
 
 ScaleFirstThreeSpriteColumnsByTwo:
 	ld b, $3 ; 3 tile columns
--- a/engine/battle/trainer_ai.asm
+++ b/engine/battle/trainer_ai.asm
@@ -294,7 +294,7 @@
 	ret z ; if not a trainer, we're done here
 	ld a, [wLinkState]
 	cp LINK_STATE_BATTLING
-	ret z
+	ret z ; if in a link battle, we're done as well
 	ld a, [wTrainerClass] ; what trainer class is this?
 	dec a
 	ld c, a
--- a/engine/gfx/palettes.asm
+++ b/engine/gfx/palettes.asm
@@ -353,10 +353,10 @@
 	ld d, a
 .nextBit0
 	bit 0, d
-; if 0th bit is not zero set P14=HIGH,P15=LOW (send bit 1)
+; if 0th bit is not zero set P14=HIGH, P15=LOW (send bit 1)
 	ld a, $10
 	jr nz, .next0
-; else (if 0th bit is zero) set P14=LOW,P15=HIGH (send bit 0)
+; else (if 0th bit is zero) set P14=LOW, P15=HIGH (send bit 0)
 	ld a, $20
 .next0
 	ldh [rJOYP], a
@@ -364,7 +364,7 @@
 	ld a, $30
 	ldh [rJOYP], a
 ; rotation will put next bit in 0th position (so  we can always use command
-; "bit 0,d" to fetch the bit that has to be sent)
+; "bit 0, d" to fetch the bit that has to be sent)
 	rr d
 ; decrease bit counter so we know when we have sent all 8 bits of current byte
 	dec e
@@ -608,9 +608,7 @@
 ; This function converts 2BPP planar data into this format by mapping
 ; 2BPP colors 0-3 to 4BPP colors 0-3. 4BPP colors 4-15 are not used.
 	ld b, 128
-
 .tileLoop
-
 ; Copy bit planes 1 and 2 of the tile data.
 	ld c, 16
 .copyLoop
--- a/engine/gfx/screen_effects.asm
+++ b/engine/gfx/screen_effects.asm
@@ -1,4 +1,4 @@
-; b = new colour for BG colour 0 (usually white) for 4 frames
+; b = new color for BG color 0 (usually white) for 4 frames
 ChangeBGPalColor0_4Frames:
 	call GetPredefRegisters
 	ldh a, [rBGP]
--- a/engine/items/inventory.asm
+++ b/engine/items/inventory.asm
@@ -27,7 +27,7 @@
 	ld a, [hli]
 	and a
 	jr z, .addNewItem
-.loop
+.notAtEndOfInventory
 	ld a, [hli]
 	ld b, a ; b = ID of current item in table
 	ld a, [wcf91] ; a = ID of item being added
@@ -36,7 +36,7 @@
 	inc hl
 	ld a, [hl]
 	cp $ff ; is it the end of the table?
-	jr nz, .loop
+	jr nz, .notAtEndOfInventory
 .addNewItem ; add an item not yet in the inventory
 	pop hl
 	ld a, d
@@ -73,7 +73,7 @@
 ; if so, store 99 in the current slot and store the rest in a new slot
 	ld a, 99
 	ld [hli], a
-	jp .loop
+	jp .notAtEndOfInventory
 .increaseItemQuantityFailed
 	pop hl
 	and a
--- a/engine/link/print_waiting_text.asm
+++ b/engine/link/print_waiting_text.asm
@@ -1,15 +1,16 @@
 PrintWaitingText::
 	hlcoord 3, 10
-	ld b, $1
-	ld c, $b
+	ld b, 1
+	ld c, 11
 	ld a, [wIsInBattle]
 	and a
-	jr z, .asm_4c17
+	jr z, .trade
+; battle
 	call TextBoxBorder
-	jr .asm_4c1a
-.asm_4c17
+	jr .border_done
+.trade
 	call CableClub_TextBoxBorder
-.asm_4c1a
+.border_done
 	hlcoord 4, 11
 	ld de, WaitingText
 	call PlaceString
--- a/engine/math/bcd.asm
+++ b/engine/math/bcd.asm
@@ -1,6 +1,9 @@
+; divide hMoney by hDivideBCDDivisor
+; return output in hDivideBCDQuotient (same as hDivideBCDDivisor)
+; used only to halve player money upon losing a fight
 DivideBCDPredef::
 DivideBCDPredef2::
-DivideBCDPredef3::
+DivideBCDPredef3:: ; only used function
 DivideBCDPredef4::
 	call GetPredefRegisters
 
@@ -10,7 +13,7 @@
 	ldh [hDivideBCDBuffer+1], a
 	ldh [hDivideBCDBuffer+2], a
 	ld d, $1
-.mulBy10Loop 
+.mulBy10Loop
 ; multiply the divisor by 10 until the leading digit is nonzero
 ; to set up the standard long division algorithm
 	ldh a, [hDivideBCDDivisor]
@@ -40,6 +43,7 @@
 	and $f0
 	ldh [hDivideBCDDivisor+2], a
 	jr .mulBy10Loop
+
 .next
 	push de
 	push de
@@ -104,7 +108,7 @@
 	ldh a, [hDivideBCDBuffer+2]
 	ldh [hDivideBCDQuotient+2], a
 	pop de
-	ld a, $6 
+	ld a, $6
 	sub d
 	and a
 	ret z
@@ -151,8 +155,8 @@
 	pop bc
 	ret c
 	inc b
-	ld de, hMoney+2 ; since SubBCD works starting from the least significant digit
-	ld hl, hDivideBCDDivisor+2  
+	ld de, hMoney + 2 ; since SubBCD works starting from the least significant digit
+	ld hl, hDivideBCDDivisor + 2
 	push bc
 	call SubBCD
 	pop bc
--- a/engine/movie/intro.asm
+++ b/engine/movie/intro.asm
@@ -23,7 +23,7 @@
 PlayIntroScene:
 	ld b, SET_PAL_NIDORINO_INTRO
 	call RunPaletteCommand
-	ldPal a, BLACK, DARK_GRAY, LIGHT_GRAY, WHITE
+	ldpal a, SHADE_BLACK, SHADE_DARK, SHADE_LIGHT, SHADE_WHITE
 	ldh [rBGP], a
 	ldh [rOBP0], a
 	ldh [rOBP1], a
@@ -307,7 +307,7 @@
 	ld b, SET_PAL_GAME_FREAK_INTRO
 	call RunPaletteCommand
 	farcall LoadCopyrightAndTextBoxTiles
-	ldPal a, BLACK, DARK_GRAY, LIGHT_GRAY, WHITE
+	ldpal a, SHADE_BLACK, SHADE_DARK, SHADE_LIGHT, SHADE_WHITE
 	ldh [rBGP], a
 	ld c, 180
 	call DelayFrames
--- a/engine/pokemon/add_mon.asm
+++ b/engine/pokemon/add_mon.asm
@@ -430,7 +430,7 @@
 	cp PARTY_TO_DAYCARE
 	ld de, wDayCareMonOT
 	jr z, .findOTsrc
-	dec a 
+	dec a
 	ld hl, wPartyMonOT
 	ld a, [wPartyCount]
 	jr nz, .addOToffset
binary files a/gfx/battle/oldman.png /dev/null differ
binary files /dev/null b/gfx/battle/oldmanb.png differ
--- a/gfx/pics.asm
+++ b/gfx/pics.asm
@@ -264,7 +264,7 @@
 StarmiePicBack::       INCBIN "gfx/pokemon/back/starmieb.pic"
 
 RedPicBack::           INCBIN "gfx/player/redb.pic"
-OldManPic::            INCBIN "gfx/battle/oldman.pic"
+OldManPicBack::        INCBIN "gfx/battle/oldmanb.pic"
 
 
 SECTION "Pics 5", ROMX
--- a/home/clear_sprites.asm
+++ b/home/clear_sprites.asm
@@ -1,7 +1,7 @@
 ClearSprites::
 	xor a
 	ld hl, wOAMBuffer
-	ld b, 40 * 4
+	ld b, wOAMBufferEnd - wOAMBuffer
 .loop
 	ld [hli], a
 	dec b
--- a/home/fade.asm
+++ b/home/fade.asm
@@ -1,7 +1,7 @@
 ; These routines manage gradual fading
 ; (e.g., entering a doorway)
 LoadGBPal::
-	ld a, [wMapPalOffset] ;tells if wCurMap is dark (requires HM5_FLASH?)
+	ld a, [wMapPalOffset] ; tells if wCurMap is dark (requires HM5_FLASH?)
 	ld b, a
 	ld hl, FadePal4
 	ld a, l
--- a/home/init.asm
+++ b/home/init.asm
@@ -126,7 +126,7 @@
 
 
 StopAllSounds::
-	ld a, BANK(Audio1_UpdateMusic)
+	ld a, BANK("Audio Engine 1")
 	ld [wAudioROMBank], a
 	ld [wAudioSavedROMBank], a
 	xor a
--- a/home/inventory.asm
+++ b/home/inventory.asm
@@ -22,15 +22,7 @@
 ; [wWhichPokemon] = index (within the inventory) of the item to remove
 ; [wItemQuantity] = quantity to remove
 RemoveItemFromInventory::
-	ldh a, [hLoadedROMBank]
-	push af
-	ld a, BANK(RemoveItemFromInventory_)
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
-	call RemoveItemFromInventory_
-	pop af
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
+	homecall RemoveItemFromInventory_
 	ret
 
 ; function to add an item (in varying quantities) to the player's bag or PC box
@@ -41,15 +33,6 @@
 ; sets carry flag if successful, unsets carry flag if unsuccessful
 AddItemToInventory::
 	push bc
-	ldh a, [hLoadedROMBank]
-	push af
-	ld a, BANK(AddItemToInventory_)
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
-	call AddItemToInventory_
-	pop bc
-	ld a, b
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
+	homecall_sf AddItemToInventory_
 	pop bc
 	ret
--- a/home/joypad.asm
+++ b/home/joypad.asm
@@ -7,9 +7,9 @@
 	ld c, 0
 
 	ldh [rJOYP], a
-	REPT 6
+REPT 6
 	ldh a, [rJOYP]
-	ENDR
+ENDR
 	cpl
 	and %1111
 	swap a
@@ -17,9 +17,9 @@
 
 	ld a, 1 << 4 ; select button keys
 	ldh [rJOYP], a
-	REPT 10
+REPT 10
 	ldh a, [rJOYP]
-	ENDR
+ENDR
 	cpl
 	and %1111
 	or b
--- a/home/math.asm
+++ b/home/math.asm
@@ -26,15 +26,7 @@
 	push hl
 	push de
 	push bc
-	ldh a, [hLoadedROMBank]
-	push af
-	ld a, BANK(_Divide)
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
-	call _Divide
-	pop af
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
+	homecall _Divide
 	pop bc
 	pop de
 	pop hl
--- a/home/move_mon.asm
+++ b/home/move_mon.asm
@@ -231,27 +231,9 @@
 	ret
 
 AddEnemyMonToPlayerParty::
-	ldh a, [hLoadedROMBank]
-	push af
-	ld a, BANK(_AddEnemyMonToPlayerParty)
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
-	call _AddEnemyMonToPlayerParty
-	pop bc
-	ld a, b
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
+	homecall_sf _AddEnemyMonToPlayerParty
 	ret
 
 MoveMon::
-	ldh a, [hLoadedROMBank]
-	push af
-	ld a, BANK(_MoveMon)
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
-	call _MoveMon
-	pop bc
-	ld a, b
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
+	homecall_sf _MoveMon
 	ret
--- a/home/overworld.asm
+++ b/home/overworld.asm
@@ -2321,9 +2321,9 @@
 ; copy current map view to VRAM
 	hlcoord 0, 0
 	ld de, vBGMap0
-	ld b, 18
+	ld b, SCREEN_HEIGHT
 .vramCopyLoop
-	ld c, 20
+	ld c, SCREEN_WIDTH
 .vramCopyInnerLoop
 	ld a, [hli]
 	ld [de], a
@@ -2330,7 +2330,7 @@
 	inc e
 	dec c
 	jr nz, .vramCopyInnerLoop
-	ld a, 32 - 20
+	ld a, BG_MAP_WIDTH - SCREEN_WIDTH
 	add e
 	ld e, a
 	jr nc, .noCarry
@@ -2366,15 +2366,15 @@
 	ld c, a
 	ld b, $00
 	ld a, BANK(MapHeaderBanks)
-	call BankswitchHome ; switch to ROM bank 3
+	call BankswitchHome
 	ld hl, MapHeaderBanks
 	add hl, bc
 	ld a, [hl]
-	ldh [hMapROMBank], a ; save map ROM bank
+	ldh [hMapROMBank], a
 	call BankswitchBack
 	ldh a, [hMapROMBank]
 	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a ; switch to map ROM bank
+	ld [MBC1RomBank], a
 	pop bc
 	pop hl
 	ret
@@ -2395,7 +2395,7 @@
 
 ForceBikeOrSurf::
 	ld b, BANK(RedSprite)
-	ld hl, LoadPlayerSpriteGraphics
+	ld hl, LoadPlayerSpriteGraphics ; in bank 0
 	call Bankswitch
 	jp PlayDefaultMusic ; update map/player state?
 
--- a/home/pokemon.asm
+++ b/home/pokemon.asm
@@ -325,16 +325,7 @@
 	ret
 
 PrintStatusConditionNotFainted::
-	ldh a, [hLoadedROMBank]
-	push af
-	ld a, BANK(PrintStatusAilment)
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
-	call PrintStatusAilment ; print status condition
-	pop bc
-	ld a, b
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
+	homecall_sf PrintStatusAilment
 	ret
 
 ; function to print pokemon level, leaving off the ":L" if the level is at least 100
--- a/home/start.asm
+++ b/home/start.asm
@@ -4,7 +4,7 @@
 	xor a
 	jr .ok
 .gbc
-	ld a, 0
+	ld a, FALSE
 .ok
 	ld [wGBC], a
 	jp Init
--- a/home/text_script.asm
+++ b/home/text_script.asm
@@ -146,15 +146,7 @@
 	call LoadItemList
 	ld a, PRICEDITEMLISTMENU
 	ld [wListMenuID], a
-	ldh a, [hLoadedROMBank]
-	push af
-	ld a, BANK(DisplayPokemartDialogue_)
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
-	call DisplayPokemartDialogue_
-	pop af
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
+	homecall DisplayPokemartDialogue_
 	jp AfterDisplayingTextID
 
 PokemartGreetingText::
@@ -185,15 +177,7 @@
 	ldh [hItemPrice + 2], a
 
 	inc hl
-	ldh a, [hLoadedROMBank]
-	push af
-	ld a, BANK(DisplayPokemonCenterDialogue_)
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
-	call DisplayPokemonCenterDialogue_
-	pop af
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
+	homecall DisplayPokemonCenterDialogue_
 	jp AfterDisplayingTextID
 
 DisplaySafariGameOverText::
--- a/home/textbox.asm
+++ b/home/textbox.asm
@@ -3,14 +3,5 @@
 ; [wTextBoxID] = text box ID
 ; b, c = y, x cursor position (TWO_OPTION_MENU only)
 DisplayTextBoxID::
-	ldh a, [hLoadedROMBank]
-	push af
-	ld a, BANK(DisplayTextBoxID_)
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
-	call DisplayTextBoxID_
-	pop bc
-	ld a, b
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
+	homecall_sf DisplayTextBoxID_
 	ret
--- a/home/uncompress.asm
+++ b/home/uncompress.asm
@@ -561,7 +561,7 @@
 
 ; maps each nybble to its reverse
 NybbleReverseTable::
-	db $0, $8, $4, $c, $2, $a, $6 ,$e, $1, $9, $5, $d, $3, $b, $7 ,$f
+	db $0, $8, $4, $c, $2, $a, $6, $e, $1, $9, $5, $d, $3, $b, $7, $f
 
 ; combines the two loaded chunks with xor (the chunk loaded second is the destination). Both chunks are differeintial decoded beforehand.
 UnpackSpriteMode2::
--- a/home/update_sprites.asm
+++ b/home/update_sprites.asm
@@ -2,13 +2,5 @@
 	ld a, [wUpdateSpritesEnabled]
 	dec a
 	ret nz
-	ldh a, [hLoadedROMBank]
-	push af
-	ld a, BANK(_UpdateSprites)
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
-	call _UpdateSprites
-	pop af
-	ldh [hLoadedROMBank], a
-	ld [MBC1RomBank], a
+	homecall _UpdateSprites
 	ret
--- a/hram.asm
+++ b/hram.asm
@@ -96,8 +96,8 @@
 hSpritePriority:: db
 
 UNION
-;; Multiplication and division variables are meant
-;; to overlap for back-to-back usage. Big endian.
+; Multiplication and division variables are meant
+; to overlap for back-to-back usage. Big endian.
 UNION
 	ds 1
 hMultiplicand:: ds 3
--- a/macros/code.asm
+++ b/macros/code.asm
@@ -4,7 +4,7 @@
 	ld \1, ((\2) & $ff) << 8 + ((\3) & $ff)
 ENDM
 
-ldPal: MACRO
+ldpal: MACRO
 	ld \1, \2 << 6 | \3 << 4 | \4 << 2 | \5
 ENDM
 
--- a/macros/farcall.asm
+++ b/macros/farcall.asm
@@ -33,3 +33,16 @@
 	ldh [hLoadedROMBank], a
 	ld [MBC1RomBank], a
 ENDM
+
+homecall_sf: MACRO ; homecall but save flags by popping into bc instead of af
+	ldh a, [hLoadedROMBank]
+	push af
+	ld a, BANK(\1)
+	ldh [hLoadedROMBank], a
+	ld [MBC1RomBank], a
+	call \1
+	pop bc
+	ld a, b
+	ldh [hLoadedROMBank], a
+	ld [MBC1RomBank], a
+ENDM
--- a/wram.asm
+++ b/wram.asm
@@ -239,32 +239,40 @@
 wOAMBuffer::
 ; buffer for OAM data. Copied to OAM by DMA
 	ds 4 * 40
+wOAMBufferEnd::
 
 wTileMap::
 ; buffer for tiles that are visible on screen (20 columns by 18 rows)
-	ds 20 * 18
+	ds SCREEN_WIDTH * SCREEN_HEIGHT
 
-wSerialPartyMonsPatchList::
-; list of indexes to patch with SERIAL_NO_DATA_BYTE after transfer
-
+UNION
 wTileMapBackup::
 ; buffer for temporarily saving and restoring current screen's tiles
 ; (e.g. if menus are drawn on top)
-;	ds 20 * 18
+	ds SCREEN_WIDTH * SCREEN_HEIGHT
 
+NEXTU
+wSerialPartyMonsPatchList::
+; list of indexes to patch with SERIAL_NO_DATA_BYTE after transfer
 	ds 200
 
 wSerialEnemyMonsPatchList::
 ; list of indexes to patch with SERIAL_NO_DATA_BYTE after transfer
 	ds 200
+ENDU
 
 	ds 80
 
-wTempPic::
+UNION
 wOverworldMap::
 	ds 1300
 wOverworldMapEnd::
 
+NEXTU
+wTempPic::
+	ds 7 * 7 tiles
+ENDU
+
 wRedrawRowOrColumnSrcTiles::
 ; the tiles of the row or column to be redrawn by RedrawRowOrColumn
 	ds SCREEN_WIDTH * 2
@@ -399,10 +407,9 @@
 ; 2 bytes
 
 wEnteringCableClub::
-	ds 1
+; 1 byte
+	ds 2
 
-	ds 1
-
 wWhichTradeMonSelectionMenu::
 ; $00 = player mons
 ; $01 = enemy mons
@@ -509,16 +516,25 @@
 
 	ds 29
 
+UNION
 wNPCMovementDirections2::
+	ds 10
 
+NEXTU
 wSwitchPartyMonTempBuffer::
 ; temporary buffer when swapping party mon data
+	ds 49
+
+NEXTU
 	ds 10
 
 wNumStepsToTake::
 ; used in Pallet Town scripted movement
-	ds 49
+	ds 1
+ENDU
 
+	ds 10
+
 wRLEByteCount::
 	ds 1
 
@@ -595,7 +611,7 @@
 wSafariEscapeFactor::
 	ds 1
 wSafariBaitFactor::
-	ds 1;
+	ds 1
 
 	ds 1
 
@@ -823,8 +839,6 @@
 
 wOptionsTextSpeedCursorX::
 
-wBoxNumString::
-
 wTrainerInfoTextBoxWidthPlus1::
 
 wSwappedMenuItem::
@@ -861,6 +875,8 @@
 
 wPlayerSpinWhileMovingUpOrDownAnimDeltaY::
 
+wBoxNumString::
+
 wHiddenObjectFunctionArgument::
 
 wWhichTrade::
@@ -1350,7 +1366,9 @@
 ; 2-byte big-endian number
 ; the total amount of exp a mon gained
 
-wcf4b:: ds 2 ; storage buffer for various strings
+wcf4b::
+; storage buffer for various strings
+	ds 2
 
 wGainBoostedExp::
 	ds 1
@@ -1987,7 +2005,6 @@
 
 	ds 2
 
-
 wDamage::
 	ds 2
 
@@ -2725,7 +2742,8 @@
 wVictoryRoad2FCurScript::
 	ds 1
 wVictoryRoad3FCurScript::
-	ds 2
+	ds 1
+	ds 1
 wFightingDojoCurScript::
 	ds 1
 wSilphCo2FCurScript::
@@ -2972,8 +2990,10 @@
 wBeatLorelei::
 ; bit 1: set when you beat Lorelei and reset in Indigo Plateau lobby
 ; the game uses this to tell when Elite 4 events need to be reset
-	ds 2
+	ds 1
 
+	ds 1
+
 wd736::
 ; 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
@@ -3010,6 +3030,7 @@
 	ds 1
 
 	ds 2
+
 wEventFlags::
 	flag_array NUM_EVENTS
 
@@ -3020,7 +3041,7 @@
 	ds 1
 
 wGrassMons::
-	;ds 20
+;	ds 20
 
 	ds 11
 ; Overload wGrassMons
@@ -3119,6 +3140,7 @@
 
 
 SECTION "Stack", WRAM0
+
 wStack::