summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRangi <35663410+Rangi42@users.noreply.github.com>2020-11-05 23:50:03 -0500
committerGitHub <noreply@github.com>2020-11-05 23:50:03 -0500
commitd3f13528754b985e892385dbd88c3c9a95681f1b (patch)
tree4a18885606996ff59bb714afb5db9a548e2f94a7
parentabaf9fee7c73e708ef8c3e7a1ed710bfc9ec6f6e (diff)
parente16dec874a239c162680b169391d3c0c7ee1fc70 (diff)
Merge pull request #301 from Rangi42/master
Sync home and macro code with pokeyellow
-rw-r--r--constants/gfx_constants.asm10
-rwxr-xr-xconstants/palette_constants.asm12
-rwxr-xr-xdata/maps/special_warps.asm6
-rwxr-xr-xdata/trainers/special_moves.asm2
-rwxr-xr-xengine/battle/animations.asm8
-rwxr-xr-xengine/battle/core.asm26
-rw-r--r--engine/battle/decrement_pp.asm2
-rw-r--r--engine/battle/effects.asm35
-rw-r--r--engine/battle/ghost_marowak_anim.asm2
-rw-r--r--engine/battle/move_effects/heal.asm6
-rw-r--r--engine/battle/move_effects/reflect_light_screen.asm6
-rw-r--r--engine/battle/move_effects/transform.asm2
-rwxr-xr-xengine/battle/read_trainer_party.asm4
-rwxr-xr-xengine/battle/safari_zone.asm10
-rw-r--r--engine/battle/scale_sprites.asm6
-rw-r--r--engine/battle/trainer_ai.asm2
-rwxr-xr-xengine/gfx/palettes.asm8
-rwxr-xr-xengine/gfx/screen_effects.asm2
-rw-r--r--engine/items/inventory.asm6
-rw-r--r--engine/link/print_waiting_text.asm13
-rw-r--r--engine/math/bcd.asm14
-rwxr-xr-xengine/movie/intro.asm4
-rw-r--r--engine/pokemon/add_mon.asm2
-rw-r--r--gfx/battle/oldmanb.png (renamed from gfx/battle/oldman.png)bin259 -> 259 bytes
-rw-r--r--gfx/pics.asm2
-rw-r--r--home/clear_sprites.asm2
-rw-r--r--home/fade.asm2
-rw-r--r--home/init.asm2
-rw-r--r--home/inventory.asm21
-rw-r--r--home/joypad.asm8
-rw-r--r--home/math.asm10
-rw-r--r--home/move_mon.asm22
-rw-r--r--home/overworld.asm14
-rw-r--r--home/pokemon.asm11
-rw-r--r--home/start.asm2
-rw-r--r--home/text_script.asm20
-rw-r--r--home/textbox.asm11
-rw-r--r--home/uncompress.asm2
-rw-r--r--home/update_sprites.asm10
-rw-r--r--hram.asm4
-rwxr-xr-xmacros/code.asm2
-rw-r--r--macros/farcall.asm13
-rwxr-xr-xwram.asm58
43 files changed, 177 insertions, 227 deletions
diff --git a/constants/gfx_constants.asm b/constants/gfx_constants.asm
index 2567e253..dd9de6b6 100644
--- a/constants/gfx_constants.asm
+++ b/constants/gfx_constants.asm
@@ -2,16 +2,6 @@ TILE_WIDTH EQU 8 ; pixels
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
diff --git a/constants/palette_constants.asm b/constants/palette_constants.asm
index fd5dd24b..177f8b81 100755
--- 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)
diff --git a/data/maps/special_warps.asm b/data/maps/special_warps.asm
index 80f88cc4..56dac3a5 100755
--- a/data/maps/special_warps.asm
+++ b/data/maps/special_warps.asm
@@ -48,11 +48,11 @@ FirstMapSpec:
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
diff --git a/data/trainers/special_moves.asm b/data/trainers/special_moves.asm
index da19f587..b797d1c7 100755
--- 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
diff --git a/engine/battle/animations.asm b/engine/battle/animations.asm
index e10b5e0d..0673b518 100755
--- a/engine/battle/animations.asm
+++ b/engine/battle/animations.asm
@@ -133,7 +133,7 @@ DrawFrameBlock:
.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 @@ FallingObjects_InitXCoords:
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 @@ FallingObjects_InitMovementData:
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 @@ TossBallAnimation:
.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
diff --git a/engine/battle/core.asm b/engine/battle/core.asm
index 4628e86a..30ff68bc 100755
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -1098,7 +1098,7 @@ ChooseNextMon:
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 @@ SendOutMon:
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 @@ DisplayBattleMenu::
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 @@ BagWasSelected:
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 @@ CheckForDisobedience:
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 @@ CalculateDamage:
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 @@ JumpToOHKOMoveEffect:
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 @@ LoadPlayerBackPic:
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
diff --git a/engine/battle/decrement_pp.asm b/engine/battle/decrement_pp.asm
index b7c428f7..441bbb81 100644
--- a/engine/battle/decrement_pp.asm
+++ b/engine/battle/decrement_pp.asm
@@ -37,7 +37,7 @@ DecrementPP:
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
diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm
index 441d6c1c..f455a407 100644
--- a/engine/battle/effects.asm
+++ b/engine/battle/effects.asm
@@ -198,7 +198,7 @@ FreezeBurnParalyzeEffect:
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,17 +224,17 @@ FreezeBurnParalyzeEffect:
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
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 @@ FreezeBurnParalyzeEffect:
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 @@ FreezeBurnParalyzeEffect:
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 @@ opponentAttacker:
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 @@ opponentAttacker:
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 @@ UpdateStatDone:
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 @@ UpdateStatDone:
push de
call nz, Bankswitch
pop de
-.asm_3f4f9
+.notMinimize
call PlayCurrentMoveAnimation
ld a, [de]
cp MINIMIZE
diff --git a/engine/battle/ghost_marowak_anim.asm b/engine/battle/ghost_marowak_anim.asm
index 6760c3d5..9c1ad96f 100644
--- a/engine/battle/ghost_marowak_anim.asm
+++ b/engine/battle/ghost_marowak_anim.asm
@@ -74,7 +74,7 @@ CopyMonPicFromBGToSpriteVRAM:
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
diff --git a/engine/battle/move_effects/heal.asm b/engine/battle/move_effects/heal.asm
index e9fb62a7..c3ffda65 100644
--- a/engine/battle/move_effects/heal.asm
+++ b/engine/battle/move_effects/heal.asm
@@ -86,7 +86,7 @@ HealEffect_:
ld [wHPBarNewHP], a
.playAnim
ld hl, PlayCurrentMoveAnimation
- call BankswitchEtoF
+ call EffectCallBattleCore
ldh a, [hWhoseTurn]
and a
hlcoord 10, 9
@@ -98,14 +98,14 @@ HealEffect_:
ld [wHPBarType], a
predef UpdateHPBar2
ld hl, DrawHUDsAndHPBars
- call BankswitchEtoF
+ call EffectCallBattleCore
ld hl, RegainedHealthText
jp PrintText
.failed
ld c, 50
call DelayFrames
ld hl, PrintButItFailedText_
- jp BankswitchEtoF
+ jp EffectCallBattleCore
StartedSleepingEffect:
text_far _StartedSleepingEffect
diff --git a/engine/battle/move_effects/reflect_light_screen.asm b/engine/battle/move_effects/reflect_light_screen.asm
index 7bdc7be7..46c299e9 100644
--- a/engine/battle/move_effects/reflect_light_screen.asm
+++ b/engine/battle/move_effects/reflect_light_screen.asm
@@ -23,14 +23,14 @@ ReflectLightScreenEffect_:
.playAnim
push hl
ld hl, PlayCurrentMoveAnimation
- call BankswitchEtoF
+ call EffectCallBattleCore
pop hl
jp PrintText
.moveFailed
ld c, 50
call DelayFrames
ld hl, PrintButItFailedText_
- jp BankswitchEtoF
+ jp EffectCallBattleCore
LightScreenProtectedText:
text_far _LightScreenProtectedText
@@ -40,6 +40,6 @@ ReflectGainedArmorText:
text_far _ReflectGainedArmorText
text_end
-BankswitchEtoF:
+EffectCallBattleCore:
ld b, BANK(BattleCore)
jp Bankswitch
diff --git a/engine/battle/move_effects/transform.asm b/engine/battle/move_effects/transform.asm
index 46cea51c..56dda7f4 100644
--- a/engine/battle/move_effects/transform.asm
+++ b/engine/battle/move_effects/transform.asm
@@ -141,7 +141,7 @@ TransformEffect_:
.failed
ld hl, PrintButItFailedText_
- jp BankswitchEtoF
+ jp EffectCallBattleCore
TransformedText:
text_far _TransformedText
diff --git a/engine/battle/read_trainer_party.asm b/engine/battle/read_trainer_party.asm
index 7e5c1249..a0132a4f 100755
--- a/engine/battle/read_trainer_party.asm
+++ b/engine/battle/read_trainer_party.asm
@@ -16,7 +16,7 @@ ReadTrainer:
; 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 @@ ReadTrainer:
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
diff --git a/engine/battle/safari_zone.asm b/engine/battle/safari_zone.asm
index 4f01c2f4..a61f402f 100755
--- a/engine/battle/safari_zone.asm
+++ b/engine/battle/safari_zone.asm
@@ -2,18 +2,18 @@ PrintSafariZoneBattleText:
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
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 @@ PrintSafariZoneBattleText:
ld a, [wMonHCatchRate]
ld [wEnemyMonActualCatchRate], a
pop hl
-.asm_429f
+.done
push hl
call LoadScreenTilesFromBuffer1
pop hl
diff --git a/engine/battle/scale_sprites.asm b/engine/battle/scale_sprites.asm
index 87b4398d..8b8942e6 100644
--- 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
diff --git a/engine/battle/trainer_ai.asm b/engine/battle/trainer_ai.asm
index 2225dca1..0de67f42 100644
--- a/engine/battle/trainer_ai.asm
+++ b/engine/battle/trainer_ai.asm
@@ -294,7 +294,7 @@ TrainerAI:
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
diff --git a/engine/gfx/palettes.asm b/engine/gfx/palettes.asm
index f25ff215..a43c66ba 100755
--- a/engine/gfx/palettes.asm
+++ b/engine/gfx/palettes.asm
@@ -353,10 +353,10 @@ SendSGBPacket:
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 @@ SendSGBPacket:
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 @@ CopySGBBorderTiles:
; 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
diff --git a/engine/gfx/screen_effects.asm b/engine/gfx/screen_effects.asm
index e8648901..c7a68734 100755
--- 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]
diff --git a/engine/items/inventory.asm b/engine/items/inventory.asm
index bf433175..ec1cfd0f 100644
--- a/engine/items/inventory.asm
+++ b/engine/items/inventory.asm
@@ -27,7 +27,7 @@ AddItemToInventory_::
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 @@ AddItemToInventory_::
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 @@ AddItemToInventory_::
; 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
diff --git a/engine/link/print_waiting_text.asm b/engine/link/print_waiting_text.asm
index d74d635f..1a16e2f2 100644
--- 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
diff --git a/engine/math/bcd.asm b/engine/math/bcd.asm
index 1e5aedc9..5747a684 100644
--- 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 @@ DivideBCD::
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 @@ DivideBCD::
and $f0
ldh [hDivideBCDDivisor+2], a
jr .mulBy10Loop
+
.next
push de
push de
@@ -104,7 +108,7 @@ DivideBCD::
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 @@ DivideBCD_getNextDigit:
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
diff --git a/engine/movie/intro.asm b/engine/movie/intro.asm
index 040d643d..9813d67c 100755
--- a/engine/movie/intro.asm
+++ b/engine/movie/intro.asm
@@ -23,7 +23,7 @@ PlayIntro:
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 @@ PlayShootingStar:
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
diff --git a/engine/pokemon/add_mon.asm b/engine/pokemon/add_mon.asm
index d7e7eab1..c49a0a77 100644
--- a/engine/pokemon/add_mon.asm
+++ b/engine/pokemon/add_mon.asm
@@ -430,7 +430,7 @@ _MoveMon::
cp PARTY_TO_DAYCARE
ld de, wDayCareMonOT
jr z, .findOTsrc
- dec a
+ dec a
ld hl, wPartyMonOT
ld a, [wPartyCount]
jr nz, .addOToffset
diff --git a/gfx/battle/oldman.png b/gfx/battle/oldmanb.png
index 6d48000f..6d48000f 100644
--- a/gfx/battle/oldman.png
+++ b/gfx/battle/oldmanb.png
Binary files differ
diff --git a/gfx/pics.asm b/gfx/pics.asm
index 0e2adc24..94286c9a 100644
--- a/gfx/pics.asm
+++ b/gfx/pics.asm
@@ -264,7 +264,7 @@ StarmiePicFront:: INCBIN "gfx/pokemon/front/starmie.pic"
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
diff --git a/home/clear_sprites.asm b/home/clear_sprites.asm
index 34f4b4ec..79cc99d6 100644
--- 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
diff --git a/home/fade.asm b/home/fade.asm
index 32175e16..f5ddf964 100644
--- 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
diff --git a/home/init.asm b/home/init.asm
index e3f5fdd4..fe7dc9a9 100644
--- a/home/init.asm
+++ b/home/init.asm
@@ -126,7 +126,7 @@ ClearVram::
StopAllSounds::
- ld a, BANK(Audio1_UpdateMusic)
+ ld a, BANK("Audio Engine 1")
ld [wAudioROMBank], a
ld [wAudioSavedROMBank], a
xor a
diff --git a/home/inventory.asm b/home/inventory.asm
index ebaa4047..1100666f 100644
--- a/home/inventory.asm
+++ b/home/inventory.asm
@@ -22,15 +22,7 @@ AddAmountSoldToMoney::
; [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 @@ RemoveItemFromInventory::
; 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
diff --git a/home/joypad.asm b/home/joypad.asm
index 51a77fcc..9bc8663e 100644
--- a/home/joypad.asm
+++ b/home/joypad.asm
@@ -7,9 +7,9 @@ ReadJoypad::
ld c, 0
ldh [rJOYP], a
- REPT 6
+REPT 6
ldh a, [rJOYP]
- ENDR
+ENDR
cpl
and %1111
swap a
@@ -17,9 +17,9 @@ ReadJoypad::
ld a, 1 << 4 ; select button keys
ldh [rJOYP], a
- REPT 10
+REPT 10
ldh a, [rJOYP]
- ENDR
+ENDR
cpl
and %1111
or b
diff --git a/home/math.asm b/home/math.asm
index b081b540..59eda606 100644
--- a/home/math.asm
+++ b/home/math.asm
@@ -26,15 +26,7 @@ Divide::
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
diff --git a/home/move_mon.asm b/home/move_mon.asm
index 3e69e6d0..c766fbd5 100644
--- a/home/move_mon.asm
+++ b/home/move_mon.asm
@@ -231,27 +231,9 @@ CalcStat::
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
diff --git a/home/overworld.asm b/home/overworld.asm
index 9d5e42ef..a9cfba24 100644
--- a/home/overworld.asm
+++ b/home/overworld.asm
@@ -2321,16 +2321,16 @@ LoadMapData::
; 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
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 @@ SwitchToMapRomBank::
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 @@ ResetUsingStrengthOutOfBattleBit:
ForceBikeOrSurf::
ld b, BANK(RedSprite)
- ld hl, LoadPlayerSpriteGraphics
+ ld hl, LoadPlayerSpriteGraphics ; in bank 0
call Bankswitch
jp PlayDefaultMusic ; update map/player state?
diff --git a/home/pokemon.asm b/home/pokemon.asm
index d018843e..5406c0ad 100644
--- a/home/pokemon.asm
+++ b/home/pokemon.asm
@@ -325,16 +325,7 @@ PrintStatusCondition::
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
diff --git a/home/start.asm b/home/start.asm
index 448b6362..764f9468 100644
--- a/home/start.asm
+++ b/home/start.asm
@@ -4,7 +4,7 @@ _Start::
xor a
jr .ok
.gbc
- ld a, 0
+ ld a, FALSE
.ok
ld [wGBC], a
jp Init
diff --git a/home/text_script.asm b/home/text_script.asm
index b9c3c8e4..a6881dc5 100644
--- a/home/text_script.asm
+++ b/home/text_script.asm
@@ -146,15 +146,7 @@ DisplayPokemartDialogue::
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 @@ DisplayPokemonCenterDialogue::
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::
diff --git a/home/textbox.asm b/home/textbox.asm
index 5067b044..f95c72c7 100644
--- 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
diff --git a/home/uncompress.asm b/home/uncompress.asm
index 9d08aa60..d3d84b26 100644
--- a/home/uncompress.asm
+++ b/home/uncompress.asm
@@ -561,7 +561,7 @@ ResetSpriteBufferPointers::
; 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::
diff --git a/home/update_sprites.asm b/home/update_sprites.asm
index 80ea14d3..5530c2a4 100644
--- a/home/update_sprites.asm
+++ b/home/update_sprites.asm
@@ -2,13 +2,5 @@ UpdateSprites::
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
diff --git a/hram.asm b/hram.asm
index d6282018..0ccbc60c 100644
--- a/hram.asm
+++ b/hram.asm
@@ -96,8 +96,8 @@ hTilePlayerStandingOn:: db
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
diff --git a/macros/code.asm b/macros/code.asm
index 8507b1ad..e0b3e9c9 100755
--- a/macros/code.asm
+++ b/macros/code.asm
@@ -4,7 +4,7 @@ lb: MACRO ; r, hi, lo
ld \1, ((\2) & $ff) << 8 + ((\3) & $ff)
ENDM
-ldPal: MACRO
+ldpal: MACRO
ld \1, \2 << 6 | \3 << 4 | \4 << 2 | \5
ENDM
diff --git a/macros/farcall.asm b/macros/farcall.asm
index 122e5207..93f8f1ac 100644
--- a/macros/farcall.asm
+++ b/macros/farcall.asm
@@ -33,3 +33,16 @@ homecall: MACRO
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
diff --git a/wram.asm b/wram.asm
index b2332f61..9444084e 100755
--- a/wram.asm
+++ b/wram.asm
@@ -239,32 +239,40 @@ SECTION "OAM Buffer", WRAM0
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
-
-wSerialPartyMonsPatchList::
-; list of indexes to patch with SERIAL_NO_DATA_BYTE after transfer
+ ds SCREEN_WIDTH * SCREEN_HEIGHT
+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,9 +407,8 @@ wUnknownSerialCounter::
; 2 bytes
wEnteringCableClub::
- ds 1
-
- ds 1
+; 1 byte
+ ds 2
wWhichTradeMonSelectionMenu::
; $00 = player mons
@@ -509,15 +516,24 @@ wAnimPalette::
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 @@ wTotalPayDayMoney::
wSafariEscapeFactor::
ds 1
wSafariBaitFactor::
- ds 1;
+ ds 1
ds 1
@@ -823,8 +839,6 @@ wCoordIndex::
wOptionsTextSpeedCursorX::
-wBoxNumString::
-
wTrainerInfoTextBoxWidthPlus1::
wSwappedMenuItem::
@@ -861,6 +875,8 @@ wPlayerSpinInPlaceAnimFrameDelay::
wPlayerSpinWhileMovingUpOrDownAnimDeltaY::
+wBoxNumString::
+
wHiddenObjectFunctionArgument::
wWhichTrade::
@@ -1350,7 +1366,9 @@ wExpAmountGained::
; 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 @@ wSavedTilesetType::
ds 2
-
wDamage::
ds 2
@@ -2725,7 +2742,8 @@ wPokemonMansionB1FCurScript::
wVictoryRoad2FCurScript::
ds 1
wVictoryRoad3FCurScript::
- ds 2
+ ds 1
+ ds 1
wFightingDojoCurScript::
ds 1
wSilphCo2FCurScript::
@@ -2972,7 +2990,9 @@ wFlags_D733::
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
@@ -3010,6 +3030,7 @@ wSecondLockTrashCanIndex::
ds 1
ds 2
+
wEventFlags::
flag_array NUM_EVENTS
@@ -3020,7 +3041,7 @@ wGrassRate::
ds 1
wGrassMons::
- ;ds 20
+; ds 20
ds 11
; Overload wGrassMons
@@ -3119,6 +3140,7 @@ wBoxDataEnd::
SECTION "Stack", WRAM0
+
wStack::