ref: 9571c550b6a0dcb3a4f54513c881661a87271024
parent: c480632d5494d04f7f5f0298a31877a2293b564e
parent: bbf2f51a02b2544f1bef32a5868503b474ae2fef
author: Rangi <35663410+Rangi42@users.noreply.github.com>
date: Tue Jul 7 15:48:22 EDT 2020
Merge pull request #263 from Rangi42/master Syncing style with pokecrystal
--- a/Makefile
+++ b/Makefile
@@ -58,7 +58,7 @@
$(MAKE) -C tools/
-RGBASMFLAGS = -h -Weverything
+RGBASMFLAGS = -h -L -Weverything
# Create a sym/map for debug purposes if `make` run with `DEBUG=1`
ifeq ($(DEBUG),1)
RGBASMFLAGS += -E
--- a/audio/engine_1.asm
+++ b/audio/engine_1.asm
@@ -20,10 +20,10 @@
set 7, a
ld [wMuteAudioAndPauseMusic], a
xor a ; disable all channels' output
- ld [rNR51], a
- ld [rNR30], a
+ ldh [rNR51], a
+ ldh [rNR30], a
ld a, $80
- ld [rNR30], a
+ ldh [rNR30], a
jr .nextChannel
.applyAffects
call Audio1_ApplyMusicAffects
@@ -183,9 +183,9 @@
jr nz, .skipSfxChannel3
; restart hardware channel 3 (wave channel) output
ld a, $0
- ld [rNR30], a
+ ldh [rNR30], a
ld a, $80
- ld [rNR30], a
+ ldh [rNR30], a
.skipSfxChannel3
jr nz, .dontDisable
ld a, [wDisableChannelOutputWhenSfxEnds]
@@ -219,9 +219,9 @@
.disableChannelOutput
ld hl, Audio1_HWChannelDisableMasks
add hl, bc
- ld a, [rNR51]
+ ldh a, [rNR51]
and [hl]
- ld [rNR51], a
+ ldh [rNR51], a
.afterDisable
ld a, [wChannelSoundIDs + Ch5]
cp CRY_SFX_START
@@ -241,7 +241,7 @@
ret c
.skipRewind
ld a, [wSavedVolume]
- ld [rNR50], a
+ ldh [rNR50], a
xor a
ld [wSavedVolume], a
.skipCry
@@ -548,7 +548,7 @@
cp $f0 ; is this command a volume?
jr nz, Audio1_execute_music ; no
call Audio1_GetNextMusicByte
- ld [rNR50], a ; store volume
+ ldh [rNR50], a ; store volume
jp Audio1_sound_ret
Audio1_execute_music:
@@ -638,7 +638,7 @@
bit BIT_EXECUTE_MUSIC, [hl]
jr nz, Audio1_note ; no
call Audio1_GetNextMusicByte
- ld [rNR10], a
+ ldh [rNR10], a
jp Audio1_sound_ret
Audio1_note:
@@ -770,9 +770,9 @@
ld b, 0
ld hl, Audio1_HWChannelDisableMasks
add hl, bc
- ld a, [rNR51]
+ ldh a, [rNR51]
and [hl]
- ld [rNR51], a ; disable hardware channel 3's output
+ ldh [rNR51], a ; disable hardware channel 3's output
jr .done
.notChannel3
ld b, REG_VOLUME_ENVELOPE
@@ -844,7 +844,7 @@
ld b, 0
ld hl, Audio1_HWChannelEnableMasks
add hl, bc
- ld a, [rNR51]
+ ldh a, [rNR51]
or [hl] ; set this channel's bits
ld d, a
ld a, c
@@ -866,7 +866,7 @@
add hl, bc
and [hl]
ld d, a
- ld a, [rNR51]
+ ldh a, [rNR51]
ld hl, Audio1_HWChannelDisableMasks
add hl, bc
and [hl] ; reset this channel's output bits
@@ -874,7 +874,7 @@
ld d, a
.skip
ld a, d
- ld [rNR51], a
+ ldh [rNR51], a
ret
Audio1_ApplyDutyCycleAndSoundLength:
@@ -928,7 +928,7 @@
ld hl, rWave_0
ld b, $f
ld a, $0 ; stop hardware channel 3
- ld [rNR30], a
+ ldh [rNR30], a
.loop
ld a, [de]
inc de
@@ -938,7 +938,7 @@
and a
jr nz, .loop
ld a, $80 ; start hardware channel 3
- ld [rNR30], a
+ ldh [rNR30], a
pop de
.notChannel3
ld a, d
@@ -1399,17 +1399,17 @@
ld a, $ff
ld [wStereoPanning], a
xor a
- ld [rNR50], a
+ ldh [rNR50], a
ld a, $8
- ld [rNR10], a
+ ldh [rNR10], a
ld a, 0
- ld [rNR51], a
+ ldh [rNR51], a
xor a
- ld [rNR30], a
+ ldh [rNR30], a
ld a, $80
- ld [rNR30], a
+ ldh [rNR30], a
ld a, $77
- ld [rNR50], a
+ ldh [rNR50], a
jp .playSoundCommon
.playSfx
@@ -1555,7 +1555,7 @@
cp Ch5
jr nz, .skipSweepDisable
ld a, $8
- ld [rNR10], a ; sweep off
+ ldh [rNR10], a ; sweep off
.skipSweepDisable
ld a, c
and a
@@ -1565,22 +1565,22 @@
.stopAllAudio
ld a, $80
- ld [rNR52], a ; sound hardware on
- ld [rNR30], a ; wave playback on
+ ldh [rNR52], a ; sound hardware on
+ ldh [rNR30], a ; wave playback on
xor a
- ld [rNR51], a ; no sound output
- ld [rNR32], a ; mute channel 3 (wave channel)
+ ldh [rNR51], a ; no sound output
+ ldh [rNR32], a ; mute channel 3 (wave channel)
ld a, $8
- ld [rNR10], a ; sweep off
- ld [rNR12], a ; mute channel 1 (pulse channel 1)
- ld [rNR22], a ; mute channel 2 (pulse channel 2)
- ld [rNR42], a ; mute channel 4 (noise channel)
+ ldh [rNR10], a ; sweep off
+ ldh [rNR12], a ; mute channel 1 (pulse channel 1)
+ ldh [rNR22], a ; mute channel 2 (pulse channel 2)
+ ldh [rNR42], a ; mute channel 4 (noise channel)
ld a, $40
- ld [rNR14], a ; counter mode
- ld [rNR24], a
- ld [rNR44], a
+ ldh [rNR14], a ; counter mode
+ ldh [rNR24], a
+ ldh [rNR44], a
ld a, $77
- ld [rNR50], a ; full volume
+ ldh [rNR50], a ; full volume
xor a
ld [wUnusedC000], a
ld [wDisableChannelOutputWhenSfxEnds], a
@@ -1699,10 +1699,10 @@
ld a, [wSavedVolume]
and a
jr nz, .done
- ld a, [rNR50]
+ ldh a, [rNR50]
ld [wSavedVolume], a
ld a, $77
- ld [rNR50], a ; full volume
+ ldh [rNR50], a ; full volume
.done
ret
--- a/audio/engine_2.asm
+++ b/audio/engine_2.asm
@@ -22,10 +22,10 @@
set 7, a
ld [wMuteAudioAndPauseMusic], a
xor a ; disable all channels' output
- ld [rNR51], a
- ld [rNR30], a
+ ldh [rNR51], a
+ ldh [rNR30], a
ld a, $80
- ld [rNR30], a
+ ldh [rNR30], a
jr .nextChannel
.applyAffects
call Audio2_ApplyMusicAffects
@@ -194,9 +194,9 @@
jr nz, .skipSfxChannel3
; restart hardware channel 3 (wave channel) output
ld a, $0
- ld [rNR30], a
+ ldh [rNR30], a
ld a, $80
- ld [rNR30], a
+ ldh [rNR30], a
.skipSfxChannel3
jr nz, .dontDisable
ld a, [wDisableChannelOutputWhenSfxEnds]
@@ -230,9 +230,9 @@
.disableChannelOutput
ld hl, Audio2_HWChannelDisableMasks
add hl, bc
- ld a, [rNR51]
+ ldh a, [rNR51]
and [hl]
- ld [rNR51], a
+ ldh [rNR51], a
.afterDisable
ld a, [wChannelSoundIDs + Ch5]
cp CRY_SFX_START
@@ -252,7 +252,7 @@
ret c
.skipRewind
ld a, [wSavedVolume]
- ld [rNR50], a
+ ldh [rNR50], a
xor a
ld [wSavedVolume], a
.skipCry
@@ -559,7 +559,7 @@
cp $f0 ; is this command a volume?
jr nz, Audio2_execute_music ; no
call Audio2_GetNextMusicByte
- ld [rNR50], a ; store volume
+ ldh [rNR50], a ; store volume
jp Audio2_sound_ret
Audio2_execute_music:
@@ -649,7 +649,7 @@
bit BIT_EXECUTE_MUSIC, [hl]
jr nz, Audio2_note ; no
call Audio2_GetNextMusicByte
- ld [rNR10], a
+ ldh [rNR10], a
jp Audio2_sound_ret
Audio2_note:
@@ -781,9 +781,9 @@
ld b, 0
ld hl, Audio2_HWChannelDisableMasks
add hl, bc
- ld a, [rNR51]
+ ldh a, [rNR51]
and [hl]
- ld [rNR51], a ; disable hardware channel 3's output
+ ldh [rNR51], a ; disable hardware channel 3's output
jr .done
.notChannel3
ld b, REG_VOLUME_ENVELOPE
@@ -855,7 +855,7 @@
ld b, 0
ld hl, Audio2_HWChannelEnableMasks
add hl, bc
- ld a, [rNR51]
+ ldh a, [rNR51]
or [hl] ; set this channel's bits
ld d, a
ld a, c
@@ -877,7 +877,7 @@
add hl, bc
and [hl]
ld d, a
- ld a, [rNR51]
+ ldh a, [rNR51]
ld hl, Audio2_HWChannelDisableMasks
add hl, bc
and [hl] ; reset this channel's output bits
@@ -885,7 +885,7 @@
ld d, a
.skip
ld a, d
- ld [rNR51], a
+ ldh [rNR51], a
ret
Audio2_ApplyDutyCycleAndSoundLength:
@@ -939,7 +939,7 @@
ld hl, rWave_0
ld b, $f
ld a, $0 ; stop hardware channel 3
- ld [rNR30], a
+ ldh [rNR30], a
.loop
ld a, [de]
inc de
@@ -949,7 +949,7 @@
and a
jr nz, .loop
ld a, $80 ; start hardware channel 3
- ld [rNR30], a
+ ldh [rNR30], a
pop de
.notChannel3
ld a, d
@@ -1462,17 +1462,17 @@
ld a, $ff
ld [wStereoPanning], a
xor a
- ld [rNR50], a
+ ldh [rNR50], a
ld a, $8
- ld [rNR10], a
+ ldh [rNR10], a
ld a, 0
- ld [rNR51], a
+ ldh [rNR51], a
xor a
- ld [rNR30], a
+ ldh [rNR30], a
ld a, $80
- ld [rNR30], a
+ ldh [rNR30], a
ld a, $77
- ld [rNR50], a
+ ldh [rNR50], a
jp .playSoundCommon
.playSfx
@@ -1618,7 +1618,7 @@
cp Ch5
jr nz, .skipSweepDisable
ld a, $8
- ld [rNR10], a ; sweep off
+ ldh [rNR10], a ; sweep off
.skipSweepDisable
ld a, c
and a
@@ -1628,22 +1628,22 @@
.stopAllAudio
ld a, $80
- ld [rNR52], a ; sound hardware on
- ld [rNR30], a ; wave playback on
+ ldh [rNR52], a ; sound hardware on
+ ldh [rNR30], a ; wave playback on
xor a
- ld [rNR51], a ; no sound output
- ld [rNR32], a ; mute channel 3 (wave channel)
+ ldh [rNR51], a ; no sound output
+ ldh [rNR32], a ; mute channel 3 (wave channel)
ld a, $8
- ld [rNR10], a ; sweep off
- ld [rNR12], a ; mute channel 1 (pulse channel 1)
- ld [rNR22], a ; mute channel 2 (pulse channel 2)
- ld [rNR42], a ; mute channel 4 (noise channel)
+ ldh [rNR10], a ; sweep off
+ ldh [rNR12], a ; mute channel 1 (pulse channel 1)
+ ldh [rNR22], a ; mute channel 2 (pulse channel 2)
+ ldh [rNR42], a ; mute channel 4 (noise channel)
ld a, $40
- ld [rNR14], a ; counter mode
- ld [rNR24], a
- ld [rNR44], a
+ ldh [rNR14], a ; counter mode
+ ldh [rNR24], a
+ ldh [rNR44], a
ld a, $77
- ld [rNR50], a ; full volume
+ ldh [rNR50], a ; full volume
xor a
ld [wUnusedC000], a
ld [wDisableChannelOutputWhenSfxEnds], a
@@ -1762,10 +1762,10 @@
ld a, [wSavedVolume]
and a
jr nz, .done
- ld a, [rNR50]
+ ldh a, [rNR50]
ld [wSavedVolume], a
ld a, $77
- ld [rNR50], a ; full volume
+ ldh [rNR50], a ; full volume
.done
ret
--- a/audio/engine_3.asm
+++ b/audio/engine_3.asm
@@ -20,10 +20,10 @@
set 7, a
ld [wMuteAudioAndPauseMusic], a
xor a ; disable all channels' output
- ld [rNR51], a
- ld [rNR30], a
+ ldh [rNR51], a
+ ldh [rNR30], a
ld a, $80
- ld [rNR30], a
+ ldh [rNR30], a
jr .nextChannel
.applyAffects
call Audio3_ApplyMusicAffects
@@ -183,9 +183,9 @@
jr nz, .skipSfxChannel3
; restart hardware channel 3 (wave channel) output
ld a, $0
- ld [rNR30], a
+ ldh [rNR30], a
ld a, $80
- ld [rNR30], a
+ ldh [rNR30], a
.skipSfxChannel3
jr nz, .dontDisable
ld a, [wDisableChannelOutputWhenSfxEnds]
@@ -219,9 +219,9 @@
.disableChannelOutput
ld hl, Audio3_HWChannelDisableMasks
add hl, bc
- ld a, [rNR51]
+ ldh a, [rNR51]
and [hl]
- ld [rNR51], a
+ ldh [rNR51], a
.afterDisable
ld a, [wChannelSoundIDs + Ch5]
cp CRY_SFX_START
@@ -241,7 +241,7 @@
ret c
.skipRewind
ld a, [wSavedVolume]
- ld [rNR50], a
+ ldh [rNR50], a
xor a
ld [wSavedVolume], a
.skipCry
@@ -548,7 +548,7 @@
cp $f0 ; is this command a volume?
jr nz, Audio3_execute_music ; no
call Audio3_GetNextMusicByte
- ld [rNR50], a ; store volume
+ ldh [rNR50], a ; store volume
jp Audio3_sound_ret
Audio3_execute_music:
@@ -638,7 +638,7 @@
bit BIT_EXECUTE_MUSIC, [hl]
jr nz, Audio3_note ; no
call Audio3_GetNextMusicByte
- ld [rNR10], a
+ ldh [rNR10], a
jp Audio3_sound_ret
Audio3_note:
@@ -770,9 +770,9 @@
ld b, 0
ld hl, Audio3_HWChannelDisableMasks
add hl, bc
- ld a, [rNR51]
+ ldh a, [rNR51]
and [hl]
- ld [rNR51], a ; disable hardware channel 3's output
+ ldh [rNR51], a ; disable hardware channel 3's output
jr .done
.notChannel3
ld b, REG_VOLUME_ENVELOPE
@@ -844,7 +844,7 @@
ld b, 0
ld hl, Audio3_HWChannelEnableMasks
add hl, bc
- ld a, [rNR51]
+ ldh a, [rNR51]
or [hl] ; set this channel's bits
ld d, a
ld a, c
@@ -866,7 +866,7 @@
add hl, bc
and [hl]
ld d, a
- ld a, [rNR51]
+ ldh a, [rNR51]
ld hl, Audio3_HWChannelDisableMasks
add hl, bc
and [hl] ; reset this channel's output bits
@@ -874,7 +874,7 @@
ld d, a
.skip
ld a, d
- ld [rNR51], a
+ ldh [rNR51], a
ret
Audio3_ApplyDutyCycleAndSoundLength:
@@ -928,7 +928,7 @@
ld hl, rWave_0
ld b, $f
ld a, $0 ; stop hardware channel 3
- ld [rNR30], a
+ ldh [rNR30], a
.loop
ld a, [de]
inc de
@@ -938,7 +938,7 @@
and a
jr nz, .loop
ld a, $80 ; start hardware channel 3
- ld [rNR30], a
+ ldh [rNR30], a
pop de
.notChannel3
ld a, d
@@ -1399,17 +1399,17 @@
ld a, $ff
ld [wStereoPanning], a
xor a
- ld [rNR50], a
+ ldh [rNR50], a
ld a, $8
- ld [rNR10], a
+ ldh [rNR10], a
ld a, 0
- ld [rNR51], a
+ ldh [rNR51], a
xor a
- ld [rNR30], a
+ ldh [rNR30], a
ld a, $80
- ld [rNR30], a
+ ldh [rNR30], a
ld a, $77
- ld [rNR50], a
+ ldh [rNR50], a
jp .playSoundCommon
.playSfx
@@ -1555,7 +1555,7 @@
cp Ch5
jr nz, .skipSweepDisable
ld a, $8
- ld [rNR10], a ; sweep off
+ ldh [rNR10], a ; sweep off
.skipSweepDisable
ld a, c
and a
@@ -1565,22 +1565,22 @@
.stopAllAudio
ld a, $80
- ld [rNR52], a ; sound hardware on
- ld [rNR30], a ; wave playback on
+ ldh [rNR52], a ; sound hardware on
+ ldh [rNR30], a ; wave playback on
xor a
- ld [rNR51], a ; no sound output
- ld [rNR32], a ; mute channel 3 (wave channel)
+ ldh [rNR51], a ; no sound output
+ ldh [rNR32], a ; mute channel 3 (wave channel)
ld a, $8
- ld [rNR10], a ; sweep off
- ld [rNR12], a ; mute channel 1 (pulse channel 1)
- ld [rNR22], a ; mute channel 2 (pulse channel 2)
- ld [rNR42], a ; mute channel 4 (noise channel)
+ ldh [rNR10], a ; sweep off
+ ldh [rNR12], a ; mute channel 1 (pulse channel 1)
+ ldh [rNR22], a ; mute channel 2 (pulse channel 2)
+ ldh [rNR42], a ; mute channel 4 (noise channel)
ld a, $40
- ld [rNR14], a ; counter mode
- ld [rNR24], a
- ld [rNR44], a
+ ldh [rNR14], a ; counter mode
+ ldh [rNR24], a
+ ldh [rNR44], a
ld a, $77
- ld [rNR50], a ; full volume
+ ldh [rNR50], a ; full volume
xor a
ld [wUnusedC000], a
ld [wDisableChannelOutputWhenSfxEnds], a
@@ -1699,10 +1699,10 @@
ld a, [wSavedVolume]
and a
jr nz, .done
- ld a, [rNR50]
+ ldh a, [rNR50]
ld [wSavedVolume], a
ld a, $77
- ld [rNR50], a ; full volume
+ ldh [rNR50], a ; full volume
.done
ret
--- a/audio/pokedex_rating_sfx.asm
+++ b/audio/pokedex_rating_sfx.asm
@@ -1,5 +1,5 @@
PlayPokedexRatingSfx::
- ld a, [hDexRatingNumMonsOwned]
+ ldh a, [hDexRatingNumMonsOwned]
ld c, $0
ld hl, OwnedMonValues
.getSfxPointer
--- a/constants.asm
+++ b/constants.asm
@@ -2,9 +2,6 @@
INCLUDE "macros.asm"
-INCLUDE "hram.asm"
-INCLUDE "vram.asm"
-
INCLUDE "constants/hardware_constants.asm"
INCLUDE "constants/oam_constants.asm"
INCLUDE "constants/misc_constants.asm"
--- a/constants/audio_constants.asm
+++ b/constants/audio_constants.asm
@@ -25,10 +25,10 @@
const Ch8 ; 7
; HW sound channel register base addresses
-HW_CH1_BASE EQU (rNR10 % $100)
-HW_CH2_BASE EQU ((rNR21 % $100) - 1)
-HW_CH3_BASE EQU (rNR30 % $100)
-HW_CH4_BASE EQU ((rNR41 % $100) - 1)
+HW_CH1_BASE EQU LOW(rNR10)
+HW_CH2_BASE EQU LOW(rNR21) - 1
+HW_CH3_BASE EQU LOW(rNR30)
+HW_CH4_BASE EQU LOW(rNR41) - 1
; HW sound channel enable bit masks
HW_CH1_ENABLE_MASK EQU %00010001
--- a/constants/battle_constants.asm
+++ b/constants/battle_constants.asm
@@ -21,6 +21,13 @@
SONICBOOM_DAMAGE EQU 20
DRAGON_RAGE_DAMAGE EQU 40
+; type effectiveness factors, scaled by 10
+SUPER_EFFECTIVE EQU 20
+MORE_EFFECTIVE EQU 15
+EFFECTIVE EQU 10
+NOT_VERY_EFFECTIVE EQU 05
+NO_EFFECT EQU 00
+
; non-volatile statuses
SLP EQU %111 ; sleep counter
PSN EQU 3
@@ -27,6 +34,8 @@
BRN EQU 4
FRZ EQU 5
PAR EQU 6
+
+MAX_STAT_VALUE EQU 999
; volatile statuses 1
STORING_ENERGY EQU 0 ; Bide
--- a/constants/gfx_constants.asm
+++ b/constants/gfx_constants.asm
@@ -20,3 +20,12 @@
HP_BAR_GREEN EQU 0
HP_BAR_YELLOW EQU 1
HP_BAR_RED EQU 2
+
+; hAutoBGTransferEnabled
+TRANSFERTOP EQU 0
+TRANSFERMIDDLE EQU 1
+TRANSFERBOTTOM EQU 2
+
+; hRedrawRowOrColumnMode
+REDRAW_COL EQU 1
+REDRAW_ROW EQU 2
--- a/constants/map_object_constants.asm
+++ b/constants/map_object_constants.asm
@@ -1,3 +1,43 @@
+; spritestatedata1 struct members (see macros/wram.asm)
+ const_def
+ const SPRITESTATEDATA1_PICTUREID ; 0
+ const SPRITESTATEDATA1_MOVEMENTSTATUS ; 1
+ const SPRITESTATEDATA1_IMAGEINDEX ; 2
+ const SPRITESTATEDATA1_YSTEPVECTOR ; 3
+ const SPRITESTATEDATA1_YPIXELS ; 4
+ const SPRITESTATEDATA1_XSTEPVECTOR ; 5
+ const SPRITESTATEDATA1_XPIXELS ; 6
+ const SPRITESTATEDATA1_INTRAANIMFRAMECOUNTER ; 7
+ const SPRITESTATEDATA1_ANIMFRAMECOUNTER ; 8
+ const SPRITESTATEDATA1_FACINGDIRECTION ; 9
+ const SPRITESTATEDATA1_YADJUSTED ; a
+ const SPRITESTATEDATA1_XADJUSTED ; b
+ const SPRITESTATEDATA1_COLLISIONDATA ; c
+ const SPRITESTATEDATA1_0D ; d
+ const SPRITESTATEDATA1_0E ; e
+ const SPRITESTATEDATA1_0F ; f
+SPRITESTATEDATA1_LENGTH EQU const_value
+
+; spritestatedata2 struct members (see macros/wram.asm)
+ const_def
+ const SPRITESTATEDATA2_WALKANIMATIONCOUNTER ; 0
+ const SPRITESTATEDATA2_01 ; 1
+ const SPRITESTATEDATA2_YDISPLACEMENT ; 2
+ const SPRITESTATEDATA2_XDISPLACEMENT ; 3
+ const SPRITESTATEDATA2_MAPY ; 4
+ const SPRITESTATEDATA2_MAPX ; 5
+ const SPRITESTATEDATA2_MOVEMENTBYTE1 ; 6
+ const SPRITESTATEDATA2_GRASSPRIORITY ; 7
+ const SPRITESTATEDATA2_MOVEMENTDELAY ; 8
+ const SPRITESTATEDATA2_ORIGFACINGDIRECTION ; 9
+ const SPRITESTATEDATA2_0A ; a
+ const SPRITESTATEDATA2_0B ; b
+ const SPRITESTATEDATA2_0C ; c
+ const SPRITESTATEDATA2_PICTUREID ; d
+ const SPRITESTATEDATA2_IMAGEBASEOFFSET ; e
+ const SPRITESTATEDATA2_0F ; f
+SPRITESTATEDATA2_LENGTH EQU const_value
+
; different kinds of people events
ITEM EQU $80
TRAINER EQU $40
--- a/constants/type_constants.asm
+++ b/constants/type_constants.asm
@@ -1,23 +1,23 @@
const_def
PHYSICAL EQU const_value
- const NORMAL ; $00
- const FIGHTING ; $01
- const FLYING ; $02
- const POISON ; $03
- const GROUND ; $04
- const ROCK ; $05
- const BIRD ; $06
- const BUG ; $07
- const GHOST ; $08
+ const NORMAL ; $00
+ const FIGHTING ; $01
+ const FLYING ; $02
+ const POISON ; $03
+ const GROUND ; $04
+ const ROCK ; $05
+ const BIRD ; $06
+ const BUG ; $07
+ const GHOST ; $08
const_value = $14
SPECIAL EQU const_value
- const FIRE ; $14
- const WATER ; $15
- const GRASS ; $16
- const ELECTRIC ; $17
- const PSYCHIC ; $18
- const ICE ; $19
- const DRAGON ; $1A
+ const FIRE ; $14
+ const WATER ; $15
+ const GRASS ; $16
+ const ELECTRIC ; $17
+ const PSYCHIC_TYPE ; $18
+ const ICE ; $19
+ const DRAGON ; $1A
--- a/data/icon_pointers.asm
+++ b/data/icon_pointers.asm
@@ -1,140 +1,37 @@
-MonPartySpritePointers:
- dw SlowbroSprite + $c0
- db $40 / $10 ; 40 bytes
- db BANK(SlowbroSprite)
- dw vSprites
+mon_icon_header: MACRO
+ dw \1 tile \2
+ db \3
+ db BANK(\1)
+ dw vSprites tile \4
+ENDM
- dw BallSprite
- db $80 / $10 ; $80 bytes
- db BANK(BallSprite)
- dw vSprites + $40
-
- dw ClefairySprite + $c0
- db $40 / $10 ; $40 bytes
- db BANK(ClefairySprite)
- dw vSprites + $c0
-
- dw BirdSprite + $c0
- db $40 / $10 ; $40 bytes
- db BANK(BirdSprite)
- dw vSprites + $100
-
- dw SeelSprite
- db $40 / $10 ; $40 bytes
- db BANK(SeelSprite)
- dw vSprites + $140
-
- dw BugIconFrame2
- db $10 / $10 ; $10 bytes
- db BANK(BugIconFrame2)
- dw vSprites + $180
-
- dw BugIconFrame2 + $10
- db $10 / $10 ; $10 bytes
- db BANK(BugIconFrame2)
- dw vSprites + $1a0
-
- dw PlantIconFrame2
- db $10 / $10 ; $10 bytes
- db BANK(PlantIconFrame2)
- dw vSprites + $1c0
-
- dw PlantIconFrame2 + $10
- db $10 / $10 ; $10 bytes
- db BANK(PlantIconFrame2)
- dw vSprites + $1e0
-
- dw SnakeIconFrame1
- db $10 / $10 ; $10 bytes
- db BANK(SnakeIconFrame1)
- dw vSprites + $200
-
- dw SnakeIconFrame1 + $10
- db $10 / $10 ; $10 bytes
- db BANK(SnakeIconFrame1)
- dw vSprites + $220
-
- dw QuadrupedIconFrame1
- db $10 / $10 ; $10 bytes
- db BANK(QuadrupedIconFrame1)
- dw vSprites + $240
-
- dw QuadrupedIconFrame1 + $10
- db $10 / $10 ; $10 bytes
- db BANK(QuadrupedIconFrame1)
- dw vSprites + $260
-
- dw TradeBubbleIconGFX
- db $40 / $10 ; $40 bytes
- db BANK(TradeBubbleIconGFX)
- dw vSprites + $380
-
- dw SlowbroSprite
- db $40 / $10 ; $40 bytes
- db BANK(SlowbroSprite)
- dw vSprites + $400
-
- dw BallSprite
- db $80 / $10 ; $80 bytes
- db BANK(BallSprite)
- dw vSprites + $440
-
- dw ClefairySprite
- db $40 / $10 ; $40 bytes
- db BANK(ClefairySprite)
- dw vSprites + $4c0
-
- dw BirdSprite
- db $40 / $10 ; $40 bytes
- db BANK(BirdSprite)
- dw vSprites + $500
-
- dw SeelSprite + $C0
- db $40 / $10 ; $40 bytes
- db BANK(SeelSprite)
- dw vSprites + $540
-
- dw BugIconFrame1
- db $10 / $10 ; $10 bytes
- db BANK(BugIconFrame1)
- dw vSprites + $580
-
- dw BugIconFrame1 + $10
- db $10 / $10 ; $10 bytes
- db BANK(BugIconFrame1)
- dw vSprites + $5a0
-
- dw PlantIconFrame1
- db $10 / $10 ; $10 bytes
- db BANK(PlantIconFrame1)
- dw vSprites + $5c0
-
- dw PlantIconFrame1 + $10
- db $10 / $10 ; $10 bytes
- db BANK(PlantIconFrame1)
- dw vSprites + $5E0
-
- dw SnakeIconFrame2
- db $10 / $10 ; $10 bytes
- db BANK(SnakeIconFrame2)
- dw vSprites + $600
-
- dw SnakeIconFrame2 + $10
- db $10 / $10 ; $10 bytes
- db BANK(SnakeIconFrame2)
- dw vSprites + $620
-
- dw QuadrupedIconFrame2
- db $10 / $10 ; $10 bytes
- db BANK(QuadrupedIconFrame2)
- dw vSprites + $640
-
- dw QuadrupedIconFrame2 + $10
- db $10 / $10 ; $10 bytes
- db BANK(QuadrupedIconFrame2)
- dw vSprites + $660
-
- dw TradeBubbleIconGFX + $40
- db $40 / $10 ; $40 bytes
- db BANK(TradeBubbleIconGFX)
- dw vSprites + $780
+MonPartySpritePointers:
+; gfx pointer, gfx tile offset, # tiles, vSprites tile offset
+ mon_icon_header SlowbroSprite, 12, 4, $00
+ mon_icon_header BallSprite, 0, 8, $04
+ mon_icon_header ClefairySprite, 12, 4, $0c
+ mon_icon_header BirdSprite, 12, 4, $10
+ mon_icon_header SeelSprite, 0, 4, $14
+ mon_icon_header BugIconFrame2, 0, 1, $18
+ mon_icon_header BugIconFrame2, 1, 1, $1a
+ mon_icon_header PlantIconFrame2, 0, 1, $1c
+ mon_icon_header PlantIconFrame2, 1, 1, $1e
+ mon_icon_header SnakeIconFrame1, 0, 1, $20
+ mon_icon_header SnakeIconFrame1, 1, 1, $22
+ mon_icon_header QuadrupedIconFrame1, 0, 1, $24
+ mon_icon_header QuadrupedIconFrame1, 1, 1, $26
+ mon_icon_header TradeBubbleIconGFX, 0, 4, $38
+ mon_icon_header SlowbroSprite, 0, 4, $40
+ mon_icon_header BallSprite, 0, 8, $44
+ mon_icon_header ClefairySprite, 0, 4, $4c
+ mon_icon_header BirdSprite, 0, 4, $50
+ mon_icon_header SeelSprite, 12, 4, $54
+ mon_icon_header BugIconFrame1, 0, 1, $58
+ mon_icon_header BugIconFrame1, 1, 1, $5a
+ mon_icon_header PlantIconFrame1, 0, 1, $5c
+ mon_icon_header PlantIconFrame1, 1, 1, $5e
+ mon_icon_header SnakeIconFrame2, 0, 1, $60
+ mon_icon_header SnakeIconFrame2, 1, 1, $62
+ mon_icon_header QuadrupedIconFrame2, 0, 1, $64
+ mon_icon_header QuadrupedIconFrame2, 1, 1, $66
+ mon_icon_header TradeBubbleIconGFX, 4, 4, $78
--- a/data/moves/moves.asm
+++ b/data/moves/moves.asm
@@ -10,169 +10,169 @@
db \6 ; pp
ENDM
- move POUND, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35
+ move POUND, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35
MoveEnd:
- move KARATE_CHOP, NO_ADDITIONAL_EFFECT, 50, NORMAL, 100, 25
- move DOUBLESLAP, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 10
- move COMET_PUNCH, TWO_TO_FIVE_ATTACKS_EFFECT, 18, NORMAL, 85, 15
- move MEGA_PUNCH, NO_ADDITIONAL_EFFECT, 80, NORMAL, 85, 20
- move PAY_DAY, PAY_DAY_EFFECT, 40, NORMAL, 100, 20
- move FIRE_PUNCH, BURN_SIDE_EFFECT1, 75, FIRE, 100, 15
- move ICE_PUNCH, FREEZE_SIDE_EFFECT, 75, ICE, 100, 15
- move THUNDERPUNCH, PARALYZE_SIDE_EFFECT1, 75, ELECTRIC, 100, 15
- move SCRATCH, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35
- move VICEGRIP, NO_ADDITIONAL_EFFECT, 55, NORMAL, 100, 30
- move GUILLOTINE, OHKO_EFFECT, 1, NORMAL, 30, 5
- move RAZOR_WIND, CHARGE_EFFECT, 80, NORMAL, 75, 10
- move SWORDS_DANCE, ATTACK_UP2_EFFECT, 0, NORMAL, 100, 30
- move CUT, NO_ADDITIONAL_EFFECT, 50, NORMAL, 95, 30
- move GUST, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35
- move WING_ATTACK, NO_ADDITIONAL_EFFECT, 35, FLYING, 100, 35
- move WHIRLWIND, SWITCH_AND_TELEPORT_EFFECT, 0, NORMAL, 85, 20
- move FLY, FLY_EFFECT, 70, FLYING, 95, 15
- move BIND, TRAPPING_EFFECT, 15, NORMAL, 75, 20
- move SLAM, NO_ADDITIONAL_EFFECT, 80, NORMAL, 75, 20
- move VINE_WHIP, NO_ADDITIONAL_EFFECT, 35, GRASS, 100, 10
- move STOMP, FLINCH_SIDE_EFFECT2, 65, NORMAL, 100, 20
- move DOUBLE_KICK, ATTACK_TWICE_EFFECT, 30, FIGHTING, 100, 30
- move MEGA_KICK, NO_ADDITIONAL_EFFECT, 120, NORMAL, 75, 5
- move JUMP_KICK, JUMP_KICK_EFFECT, 70, FIGHTING, 95, 25
- move ROLLING_KICK, FLINCH_SIDE_EFFECT2, 60, FIGHTING, 85, 15
- move SAND_ATTACK, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 100, 15
- move HEADBUTT, FLINCH_SIDE_EFFECT2, 70, NORMAL, 100, 15
- move HORN_ATTACK, NO_ADDITIONAL_EFFECT, 65, NORMAL, 100, 25
- move FURY_ATTACK, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 20
- move HORN_DRILL, OHKO_EFFECT, 1, NORMAL, 30, 5
- move TACKLE, NO_ADDITIONAL_EFFECT, 35, NORMAL, 95, 35
- move BODY_SLAM, PARALYZE_SIDE_EFFECT2, 85, NORMAL, 100, 15
- move WRAP, TRAPPING_EFFECT, 15, NORMAL, 85, 20
- move TAKE_DOWN, RECOIL_EFFECT, 90, NORMAL, 85, 20
- move THRASH, THRASH_PETAL_DANCE_EFFECT, 90, NORMAL, 100, 20
- move DOUBLE_EDGE, RECOIL_EFFECT, 100, NORMAL, 100, 15
- move TAIL_WHIP, DEFENSE_DOWN1_EFFECT, 0, NORMAL, 100, 30
- move POISON_STING, POISON_SIDE_EFFECT1, 15, POISON, 100, 35
- move TWINEEDLE, TWINEEDLE_EFFECT, 25, BUG, 100, 20
- move PIN_MISSILE, TWO_TO_FIVE_ATTACKS_EFFECT, 14, BUG, 85, 20
- move LEER, DEFENSE_DOWN1_EFFECT, 0, NORMAL, 100, 30
- move BITE, FLINCH_SIDE_EFFECT1, 60, NORMAL, 100, 25
- move GROWL, ATTACK_DOWN1_EFFECT, 0, NORMAL, 100, 40
- move ROAR, SWITCH_AND_TELEPORT_EFFECT, 0, NORMAL, 100, 20
- move SING, SLEEP_EFFECT, 0, NORMAL, 55, 15
- move SUPERSONIC, CONFUSION_EFFECT, 0, NORMAL, 55, 20
- move SONICBOOM, SPECIAL_DAMAGE_EFFECT, 1, NORMAL, 90, 20
- move DISABLE, DISABLE_EFFECT, 0, NORMAL, 55, 20
- move ACID, DEFENSE_DOWN_SIDE_EFFECT, 40, POISON, 100, 30
- move EMBER, BURN_SIDE_EFFECT1, 40, FIRE, 100, 25
- move FLAMETHROWER, BURN_SIDE_EFFECT1, 95, FIRE, 100, 15
- move MIST, MIST_EFFECT, 0, ICE, 100, 30
- move WATER_GUN, NO_ADDITIONAL_EFFECT, 40, WATER, 100, 25
- move HYDRO_PUMP, NO_ADDITIONAL_EFFECT, 120, WATER, 80, 5
- move SURF, NO_ADDITIONAL_EFFECT, 95, WATER, 100, 15
- move ICE_BEAM, FREEZE_SIDE_EFFECT, 95, ICE, 100, 10
- move BLIZZARD, FREEZE_SIDE_EFFECT, 120, ICE, 90, 5
- move PSYBEAM, CONFUSION_SIDE_EFFECT, 65, PSYCHIC, 100, 20
- move BUBBLEBEAM, SPEED_DOWN_SIDE_EFFECT, 65, WATER, 100, 20
- move AURORA_BEAM, ATTACK_DOWN_SIDE_EFFECT, 65, ICE, 100, 20
- move HYPER_BEAM, HYPER_BEAM_EFFECT, 150, NORMAL, 90, 5
- move PECK, NO_ADDITIONAL_EFFECT, 35, FLYING, 100, 35
- move DRILL_PECK, NO_ADDITIONAL_EFFECT, 80, FLYING, 100, 20
- move SUBMISSION, RECOIL_EFFECT, 80, FIGHTING, 80, 25
- move LOW_KICK, FLINCH_SIDE_EFFECT2, 50, FIGHTING, 90, 20
- move COUNTER, NO_ADDITIONAL_EFFECT, 1, FIGHTING, 100, 20
- move SEISMIC_TOSS, SPECIAL_DAMAGE_EFFECT, 1, FIGHTING, 100, 20
- move STRENGTH, NO_ADDITIONAL_EFFECT, 80, NORMAL, 100, 15
- move ABSORB, DRAIN_HP_EFFECT, 20, GRASS, 100, 20
- move MEGA_DRAIN, DRAIN_HP_EFFECT, 40, GRASS, 100, 10
- move LEECH_SEED, LEECH_SEED_EFFECT, 0, GRASS, 90, 10
- move GROWTH, SPECIAL_UP1_EFFECT, 0, NORMAL, 100, 40
- move RAZOR_LEAF, NO_ADDITIONAL_EFFECT, 55, GRASS, 95, 25
- move SOLARBEAM, CHARGE_EFFECT, 120, GRASS, 100, 10
- move POISONPOWDER, POISON_EFFECT, 0, POISON, 75, 35
- move STUN_SPORE, PARALYZE_EFFECT, 0, GRASS, 75, 30
- move SLEEP_POWDER, SLEEP_EFFECT, 0, GRASS, 75, 15
- move PETAL_DANCE, THRASH_PETAL_DANCE_EFFECT, 70, GRASS, 100, 20
- move STRING_SHOT, SPEED_DOWN1_EFFECT, 0, BUG, 95, 40
- move DRAGON_RAGE, SPECIAL_DAMAGE_EFFECT, 1, DRAGON, 100, 10
- move FIRE_SPIN, TRAPPING_EFFECT, 15, FIRE, 70, 15
- move THUNDERSHOCK, PARALYZE_SIDE_EFFECT1, 40, ELECTRIC, 100, 30
- move THUNDERBOLT, PARALYZE_SIDE_EFFECT1, 95, ELECTRIC, 100, 15
- move THUNDER_WAVE, PARALYZE_EFFECT, 0, ELECTRIC, 100, 20
- move THUNDER, PARALYZE_SIDE_EFFECT1, 120, ELECTRIC, 70, 10
- move ROCK_THROW, NO_ADDITIONAL_EFFECT, 50, ROCK, 65, 15
- move EARTHQUAKE, NO_ADDITIONAL_EFFECT, 100, GROUND, 100, 10
- move FISSURE, OHKO_EFFECT, 1, GROUND, 30, 5
- move DIG, CHARGE_EFFECT, 100, GROUND, 100, 10
- move TOXIC, POISON_EFFECT, 0, POISON, 85, 10
- move CONFUSION, CONFUSION_SIDE_EFFECT, 50, PSYCHIC, 100, 25
- move PSYCHIC_M, SPECIAL_DOWN_SIDE_EFFECT, 90, PSYCHIC, 100, 10
- move HYPNOSIS, SLEEP_EFFECT, 0, PSYCHIC, 60, 20
- move MEDITATE, ATTACK_UP1_EFFECT, 0, PSYCHIC, 100, 40
- move AGILITY, SPEED_UP2_EFFECT, 0, PSYCHIC, 100, 30
- move QUICK_ATTACK, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 30
- move RAGE, RAGE_EFFECT, 20, NORMAL, 100, 20
- move TELEPORT, SWITCH_AND_TELEPORT_EFFECT, 0, PSYCHIC, 100, 20
- move NIGHT_SHADE, SPECIAL_DAMAGE_EFFECT, 0, GHOST, 100, 15
- move MIMIC, MIMIC_EFFECT, 0, NORMAL, 100, 10
- move SCREECH, DEFENSE_DOWN2_EFFECT, 0, NORMAL, 85, 40
- move DOUBLE_TEAM, EVASION_UP1_EFFECT, 0, NORMAL, 100, 15
- move RECOVER, HEAL_EFFECT, 0, NORMAL, 100, 20
- move HARDEN, DEFENSE_UP1_EFFECT, 0, NORMAL, 100, 30
- move MINIMIZE, EVASION_UP1_EFFECT, 0, NORMAL, 100, 20
- move SMOKESCREEN, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 100, 20
- move CONFUSE_RAY, CONFUSION_EFFECT, 0, GHOST, 100, 10
- move WITHDRAW, DEFENSE_UP1_EFFECT, 0, WATER, 100, 40
- move DEFENSE_CURL, DEFENSE_UP1_EFFECT, 0, NORMAL, 100, 40
- move BARRIER, DEFENSE_UP2_EFFECT, 0, PSYCHIC, 100, 30
- move LIGHT_SCREEN, LIGHT_SCREEN_EFFECT, 0, PSYCHIC, 100, 30
- move HAZE, HAZE_EFFECT, 0, ICE, 100, 30
- move REFLECT, REFLECT_EFFECT, 0, PSYCHIC, 100, 20
- move FOCUS_ENERGY, FOCUS_ENERGY_EFFECT, 0, NORMAL, 100, 30
- move BIDE, BIDE_EFFECT, 0, NORMAL, 100, 10
- move METRONOME, METRONOME_EFFECT, 0, NORMAL, 100, 10
- move MIRROR_MOVE, MIRROR_MOVE_EFFECT, 0, FLYING, 100, 20
- move SELFDESTRUCT, EXPLODE_EFFECT, 130, NORMAL, 100, 5
- move EGG_BOMB, NO_ADDITIONAL_EFFECT, 100, NORMAL, 75, 10
- move LICK, PARALYZE_SIDE_EFFECT2, 20, GHOST, 100, 30
- move SMOG, POISON_SIDE_EFFECT2, 20, POISON, 70, 20
- move SLUDGE, POISON_SIDE_EFFECT2, 65, POISON, 100, 20
- move BONE_CLUB, FLINCH_SIDE_EFFECT1, 65, GROUND, 85, 20
- move FIRE_BLAST, BURN_SIDE_EFFECT2, 120, FIRE, 85, 5
- move WATERFALL, NO_ADDITIONAL_EFFECT, 80, WATER, 100, 15
- move CLAMP, TRAPPING_EFFECT, 35, WATER, 75, 10
- move SWIFT, SWIFT_EFFECT, 60, NORMAL, 100, 20
- move SKULL_BASH, CHARGE_EFFECT, 100, NORMAL, 100, 15
- move SPIKE_CANNON, TWO_TO_FIVE_ATTACKS_EFFECT, 20, NORMAL, 100, 15
- move CONSTRICT, SPEED_DOWN_SIDE_EFFECT, 10, NORMAL, 100, 35
- move AMNESIA, SPECIAL_UP2_EFFECT, 0, PSYCHIC, 100, 20
- move KINESIS, ACCURACY_DOWN1_EFFECT, 0, PSYCHIC, 80, 15
- move SOFTBOILED, HEAL_EFFECT, 0, NORMAL, 100, 10
- move HI_JUMP_KICK, JUMP_KICK_EFFECT, 85, FIGHTING, 90, 20
- move GLARE, PARALYZE_EFFECT, 0, NORMAL, 75, 30
- move DREAM_EATER, DREAM_EATER_EFFECT, 100, PSYCHIC, 100, 15
- move POISON_GAS, POISON_EFFECT, 0, POISON, 55, 40
- move BARRAGE, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 20
- move LEECH_LIFE, DRAIN_HP_EFFECT, 20, BUG, 100, 15
- move LOVELY_KISS, SLEEP_EFFECT, 0, NORMAL, 75, 10
- move SKY_ATTACK, CHARGE_EFFECT, 140, FLYING, 90, 5
- move TRANSFORM, TRANSFORM_EFFECT, 0, NORMAL, 100, 10
- move BUBBLE, SPEED_DOWN_SIDE_EFFECT, 20, WATER, 100, 30
- move DIZZY_PUNCH, NO_ADDITIONAL_EFFECT, 70, NORMAL, 100, 10
- move SPORE, SLEEP_EFFECT, 0, GRASS, 100, 15
- move FLASH, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 70, 20
- move PSYWAVE, SPECIAL_DAMAGE_EFFECT, 1, PSYCHIC, 80, 15
- move SPLASH, SPLASH_EFFECT, 0, NORMAL, 100, 40
- move ACID_ARMOR, DEFENSE_UP2_EFFECT, 0, POISON, 100, 40
- move CRABHAMMER, NO_ADDITIONAL_EFFECT, 90, WATER, 85, 10
- move EXPLOSION, EXPLODE_EFFECT, 170, NORMAL, 100, 5
- move FURY_SWIPES, TWO_TO_FIVE_ATTACKS_EFFECT, 18, NORMAL, 80, 15
- move BONEMERANG, ATTACK_TWICE_EFFECT, 50, GROUND, 90, 10
- move REST, HEAL_EFFECT, 0, PSYCHIC, 100, 10
- move ROCK_SLIDE, NO_ADDITIONAL_EFFECT, 75, ROCK, 90, 10
- move HYPER_FANG, FLINCH_SIDE_EFFECT1, 80, NORMAL, 90, 15
- move SHARPEN, ATTACK_UP1_EFFECT, 0, NORMAL, 100, 30
- move CONVERSION, CONVERSION_EFFECT, 0, NORMAL, 100, 30
- move TRI_ATTACK, NO_ADDITIONAL_EFFECT, 80, NORMAL, 100, 10
- move SUPER_FANG, SUPER_FANG_EFFECT, 1, NORMAL, 90, 10
- move SLASH, NO_ADDITIONAL_EFFECT, 70, NORMAL, 100, 20
- move SUBSTITUTE, SUBSTITUTE_EFFECT, 0, NORMAL, 100, 10
- move STRUGGLE, RECOIL_EFFECT, 50, NORMAL, 100, 10
+ move KARATE_CHOP, NO_ADDITIONAL_EFFECT, 50, NORMAL, 100, 25
+ move DOUBLESLAP, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 10
+ move COMET_PUNCH, TWO_TO_FIVE_ATTACKS_EFFECT, 18, NORMAL, 85, 15
+ move MEGA_PUNCH, NO_ADDITIONAL_EFFECT, 80, NORMAL, 85, 20
+ move PAY_DAY, PAY_DAY_EFFECT, 40, NORMAL, 100, 20
+ move FIRE_PUNCH, BURN_SIDE_EFFECT1, 75, FIRE, 100, 15
+ move ICE_PUNCH, FREEZE_SIDE_EFFECT, 75, ICE, 100, 15
+ move THUNDERPUNCH, PARALYZE_SIDE_EFFECT1, 75, ELECTRIC, 100, 15
+ move SCRATCH, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35
+ move VICEGRIP, NO_ADDITIONAL_EFFECT, 55, NORMAL, 100, 30
+ move GUILLOTINE, OHKO_EFFECT, 1, NORMAL, 30, 5
+ move RAZOR_WIND, CHARGE_EFFECT, 80, NORMAL, 75, 10
+ move SWORDS_DANCE, ATTACK_UP2_EFFECT, 0, NORMAL, 100, 30
+ move CUT, NO_ADDITIONAL_EFFECT, 50, NORMAL, 95, 30
+ move GUST, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35
+ move WING_ATTACK, NO_ADDITIONAL_EFFECT, 35, FLYING, 100, 35
+ move WHIRLWIND, SWITCH_AND_TELEPORT_EFFECT, 0, NORMAL, 85, 20
+ move FLY, FLY_EFFECT, 70, FLYING, 95, 15
+ move BIND, TRAPPING_EFFECT, 15, NORMAL, 75, 20
+ move SLAM, NO_ADDITIONAL_EFFECT, 80, NORMAL, 75, 20
+ move VINE_WHIP, NO_ADDITIONAL_EFFECT, 35, GRASS, 100, 10
+ move STOMP, FLINCH_SIDE_EFFECT2, 65, NORMAL, 100, 20
+ move DOUBLE_KICK, ATTACK_TWICE_EFFECT, 30, FIGHTING, 100, 30
+ move MEGA_KICK, NO_ADDITIONAL_EFFECT, 120, NORMAL, 75, 5
+ move JUMP_KICK, JUMP_KICK_EFFECT, 70, FIGHTING, 95, 25
+ move ROLLING_KICK, FLINCH_SIDE_EFFECT2, 60, FIGHTING, 85, 15
+ move SAND_ATTACK, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 100, 15
+ move HEADBUTT, FLINCH_SIDE_EFFECT2, 70, NORMAL, 100, 15
+ move HORN_ATTACK, NO_ADDITIONAL_EFFECT, 65, NORMAL, 100, 25
+ move FURY_ATTACK, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 20
+ move HORN_DRILL, OHKO_EFFECT, 1, NORMAL, 30, 5
+ move TACKLE, NO_ADDITIONAL_EFFECT, 35, NORMAL, 95, 35
+ move BODY_SLAM, PARALYZE_SIDE_EFFECT2, 85, NORMAL, 100, 15
+ move WRAP, TRAPPING_EFFECT, 15, NORMAL, 85, 20
+ move TAKE_DOWN, RECOIL_EFFECT, 90, NORMAL, 85, 20
+ move THRASH, THRASH_PETAL_DANCE_EFFECT, 90, NORMAL, 100, 20
+ move DOUBLE_EDGE, RECOIL_EFFECT, 100, NORMAL, 100, 15
+ move TAIL_WHIP, DEFENSE_DOWN1_EFFECT, 0, NORMAL, 100, 30
+ move POISON_STING, POISON_SIDE_EFFECT1, 15, POISON, 100, 35
+ move TWINEEDLE, TWINEEDLE_EFFECT, 25, BUG, 100, 20
+ move PIN_MISSILE, TWO_TO_FIVE_ATTACKS_EFFECT, 14, BUG, 85, 20
+ move LEER, DEFENSE_DOWN1_EFFECT, 0, NORMAL, 100, 30
+ move BITE, FLINCH_SIDE_EFFECT1, 60, NORMAL, 100, 25
+ move GROWL, ATTACK_DOWN1_EFFECT, 0, NORMAL, 100, 40
+ move ROAR, SWITCH_AND_TELEPORT_EFFECT, 0, NORMAL, 100, 20
+ move SING, SLEEP_EFFECT, 0, NORMAL, 55, 15
+ move SUPERSONIC, CONFUSION_EFFECT, 0, NORMAL, 55, 20
+ move SONICBOOM, SPECIAL_DAMAGE_EFFECT, 1, NORMAL, 90, 20
+ move DISABLE, DISABLE_EFFECT, 0, NORMAL, 55, 20
+ move ACID, DEFENSE_DOWN_SIDE_EFFECT, 40, POISON, 100, 30
+ move EMBER, BURN_SIDE_EFFECT1, 40, FIRE, 100, 25
+ move FLAMETHROWER, BURN_SIDE_EFFECT1, 95, FIRE, 100, 15
+ move MIST, MIST_EFFECT, 0, ICE, 100, 30
+ move WATER_GUN, NO_ADDITIONAL_EFFECT, 40, WATER, 100, 25
+ move HYDRO_PUMP, NO_ADDITIONAL_EFFECT, 120, WATER, 80, 5
+ move SURF, NO_ADDITIONAL_EFFECT, 95, WATER, 100, 15
+ move ICE_BEAM, FREEZE_SIDE_EFFECT, 95, ICE, 100, 10
+ move BLIZZARD, FREEZE_SIDE_EFFECT, 120, ICE, 90, 5
+ move PSYBEAM, CONFUSION_SIDE_EFFECT, 65, PSYCHIC_TYPE, 100, 20
+ move BUBBLEBEAM, SPEED_DOWN_SIDE_EFFECT, 65, WATER, 100, 20
+ move AURORA_BEAM, ATTACK_DOWN_SIDE_EFFECT, 65, ICE, 100, 20
+ move HYPER_BEAM, HYPER_BEAM_EFFECT, 150, NORMAL, 90, 5
+ move PECK, NO_ADDITIONAL_EFFECT, 35, FLYING, 100, 35
+ move DRILL_PECK, NO_ADDITIONAL_EFFECT, 80, FLYING, 100, 20
+ move SUBMISSION, RECOIL_EFFECT, 80, FIGHTING, 80, 25
+ move LOW_KICK, FLINCH_SIDE_EFFECT2, 50, FIGHTING, 90, 20
+ move COUNTER, NO_ADDITIONAL_EFFECT, 1, FIGHTING, 100, 20
+ move SEISMIC_TOSS, SPECIAL_DAMAGE_EFFECT, 1, FIGHTING, 100, 20
+ move STRENGTH, NO_ADDITIONAL_EFFECT, 80, NORMAL, 100, 15
+ move ABSORB, DRAIN_HP_EFFECT, 20, GRASS, 100, 20
+ move MEGA_DRAIN, DRAIN_HP_EFFECT, 40, GRASS, 100, 10
+ move LEECH_SEED, LEECH_SEED_EFFECT, 0, GRASS, 90, 10
+ move GROWTH, SPECIAL_UP1_EFFECT, 0, NORMAL, 100, 40
+ move RAZOR_LEAF, NO_ADDITIONAL_EFFECT, 55, GRASS, 95, 25
+ move SOLARBEAM, CHARGE_EFFECT, 120, GRASS, 100, 10
+ move POISONPOWDER, POISON_EFFECT, 0, POISON, 75, 35
+ move STUN_SPORE, PARALYZE_EFFECT, 0, GRASS, 75, 30
+ move SLEEP_POWDER, SLEEP_EFFECT, 0, GRASS, 75, 15
+ move PETAL_DANCE, THRASH_PETAL_DANCE_EFFECT, 70, GRASS, 100, 20
+ move STRING_SHOT, SPEED_DOWN1_EFFECT, 0, BUG, 95, 40
+ move DRAGON_RAGE, SPECIAL_DAMAGE_EFFECT, 1, DRAGON, 100, 10
+ move FIRE_SPIN, TRAPPING_EFFECT, 15, FIRE, 70, 15
+ move THUNDERSHOCK, PARALYZE_SIDE_EFFECT1, 40, ELECTRIC, 100, 30
+ move THUNDERBOLT, PARALYZE_SIDE_EFFECT1, 95, ELECTRIC, 100, 15
+ move THUNDER_WAVE, PARALYZE_EFFECT, 0, ELECTRIC, 100, 20
+ move THUNDER, PARALYZE_SIDE_EFFECT1, 120, ELECTRIC, 70, 10
+ move ROCK_THROW, NO_ADDITIONAL_EFFECT, 50, ROCK, 65, 15
+ move EARTHQUAKE, NO_ADDITIONAL_EFFECT, 100, GROUND, 100, 10
+ move FISSURE, OHKO_EFFECT, 1, GROUND, 30, 5
+ move DIG, CHARGE_EFFECT, 100, GROUND, 100, 10
+ move TOXIC, POISON_EFFECT, 0, POISON, 85, 10
+ move CONFUSION, CONFUSION_SIDE_EFFECT, 50, PSYCHIC_TYPE, 100, 25
+ move PSYCHIC_M, SPECIAL_DOWN_SIDE_EFFECT, 90, PSYCHIC_TYPE, 100, 10
+ move HYPNOSIS, SLEEP_EFFECT, 0, PSYCHIC_TYPE, 60, 20
+ move MEDITATE, ATTACK_UP1_EFFECT, 0, PSYCHIC_TYPE, 100, 40
+ move AGILITY, SPEED_UP2_EFFECT, 0, PSYCHIC_TYPE, 100, 30
+ move QUICK_ATTACK, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 30
+ move RAGE, RAGE_EFFECT, 20, NORMAL, 100, 20
+ move TELEPORT, SWITCH_AND_TELEPORT_EFFECT, 0, PSYCHIC_TYPE, 100, 20
+ move NIGHT_SHADE, SPECIAL_DAMAGE_EFFECT, 0, GHOST, 100, 15
+ move MIMIC, MIMIC_EFFECT, 0, NORMAL, 100, 10
+ move SCREECH, DEFENSE_DOWN2_EFFECT, 0, NORMAL, 85, 40
+ move DOUBLE_TEAM, EVASION_UP1_EFFECT, 0, NORMAL, 100, 15
+ move RECOVER, HEAL_EFFECT, 0, NORMAL, 100, 20
+ move HARDEN, DEFENSE_UP1_EFFECT, 0, NORMAL, 100, 30
+ move MINIMIZE, EVASION_UP1_EFFECT, 0, NORMAL, 100, 20
+ move SMOKESCREEN, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 100, 20
+ move CONFUSE_RAY, CONFUSION_EFFECT, 0, GHOST, 100, 10
+ move WITHDRAW, DEFENSE_UP1_EFFECT, 0, WATER, 100, 40
+ move DEFENSE_CURL, DEFENSE_UP1_EFFECT, 0, NORMAL, 100, 40
+ move BARRIER, DEFENSE_UP2_EFFECT, 0, PSYCHIC_TYPE, 100, 30
+ move LIGHT_SCREEN, LIGHT_SCREEN_EFFECT, 0, PSYCHIC_TYPE, 100, 30
+ move HAZE, HAZE_EFFECT, 0, ICE, 100, 30
+ move REFLECT, REFLECT_EFFECT, 0, PSYCHIC_TYPE, 100, 20
+ move FOCUS_ENERGY, FOCUS_ENERGY_EFFECT, 0, NORMAL, 100, 30
+ move BIDE, BIDE_EFFECT, 0, NORMAL, 100, 10
+ move METRONOME, METRONOME_EFFECT, 0, NORMAL, 100, 10
+ move MIRROR_MOVE, MIRROR_MOVE_EFFECT, 0, FLYING, 100, 20
+ move SELFDESTRUCT, EXPLODE_EFFECT, 130, NORMAL, 100, 5
+ move EGG_BOMB, NO_ADDITIONAL_EFFECT, 100, NORMAL, 75, 10
+ move LICK, PARALYZE_SIDE_EFFECT2, 20, GHOST, 100, 30
+ move SMOG, POISON_SIDE_EFFECT2, 20, POISON, 70, 20
+ move SLUDGE, POISON_SIDE_EFFECT2, 65, POISON, 100, 20
+ move BONE_CLUB, FLINCH_SIDE_EFFECT1, 65, GROUND, 85, 20
+ move FIRE_BLAST, BURN_SIDE_EFFECT2, 120, FIRE, 85, 5
+ move WATERFALL, NO_ADDITIONAL_EFFECT, 80, WATER, 100, 15
+ move CLAMP, TRAPPING_EFFECT, 35, WATER, 75, 10
+ move SWIFT, SWIFT_EFFECT, 60, NORMAL, 100, 20
+ move SKULL_BASH, CHARGE_EFFECT, 100, NORMAL, 100, 15
+ move SPIKE_CANNON, TWO_TO_FIVE_ATTACKS_EFFECT, 20, NORMAL, 100, 15
+ move CONSTRICT, SPEED_DOWN_SIDE_EFFECT, 10, NORMAL, 100, 35
+ move AMNESIA, SPECIAL_UP2_EFFECT, 0, PSYCHIC_TYPE, 100, 20
+ move KINESIS, ACCURACY_DOWN1_EFFECT, 0, PSYCHIC_TYPE, 80, 15
+ move SOFTBOILED, HEAL_EFFECT, 0, NORMAL, 100, 10
+ move HI_JUMP_KICK, JUMP_KICK_EFFECT, 85, FIGHTING, 90, 20
+ move GLARE, PARALYZE_EFFECT, 0, NORMAL, 75, 30
+ move DREAM_EATER, DREAM_EATER_EFFECT, 100, PSYCHIC_TYPE, 100, 15
+ move POISON_GAS, POISON_EFFECT, 0, POISON, 55, 40
+ move BARRAGE, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 20
+ move LEECH_LIFE, DRAIN_HP_EFFECT, 20, BUG, 100, 15
+ move LOVELY_KISS, SLEEP_EFFECT, 0, NORMAL, 75, 10
+ move SKY_ATTACK, CHARGE_EFFECT, 140, FLYING, 90, 5
+ move TRANSFORM, TRANSFORM_EFFECT, 0, NORMAL, 100, 10
+ move BUBBLE, SPEED_DOWN_SIDE_EFFECT, 20, WATER, 100, 30
+ move DIZZY_PUNCH, NO_ADDITIONAL_EFFECT, 70, NORMAL, 100, 10
+ move SPORE, SLEEP_EFFECT, 0, GRASS, 100, 15
+ move FLASH, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 70, 20
+ move PSYWAVE, SPECIAL_DAMAGE_EFFECT, 1, PSYCHIC_TYPE, 80, 15
+ move SPLASH, SPLASH_EFFECT, 0, NORMAL, 100, 40
+ move ACID_ARMOR, DEFENSE_UP2_EFFECT, 0, POISON, 100, 40
+ move CRABHAMMER, NO_ADDITIONAL_EFFECT, 90, WATER, 85, 10
+ move EXPLOSION, EXPLODE_EFFECT, 170, NORMAL, 100, 5
+ move FURY_SWIPES, TWO_TO_FIVE_ATTACKS_EFFECT, 18, NORMAL, 80, 15
+ move BONEMERANG, ATTACK_TWICE_EFFECT, 50, GROUND, 90, 10
+ move REST, HEAL_EFFECT, 0, PSYCHIC_TYPE, 100, 10
+ move ROCK_SLIDE, NO_ADDITIONAL_EFFECT, 75, ROCK, 90, 10
+ move HYPER_FANG, FLINCH_SIDE_EFFECT1, 80, NORMAL, 90, 15
+ move SHARPEN, ATTACK_UP1_EFFECT, 0, NORMAL, 100, 30
+ move CONVERSION, CONVERSION_EFFECT, 0, NORMAL, 100, 30
+ move TRI_ATTACK, NO_ADDITIONAL_EFFECT, 80, NORMAL, 100, 10
+ move SUPER_FANG, SUPER_FANG_EFFECT, 1, NORMAL, 90, 10
+ move SLASH, NO_ADDITIONAL_EFFECT, 70, NORMAL, 100, 20
+ move SUBSTITUTE, SUBSTITUTE_EFFECT, 0, NORMAL, 100, 10
+ move STRUGGLE, RECOIL_EFFECT, 50, NORMAL, 100, 10
--- a/data/pokemon/base_stats/abra.asm
+++ b/data/pokemon/base_stats/abra.asm
@@ -3,7 +3,7 @@
db 25, 20, 15, 90, 105
; hp atk def spd spc
- db PSYCHIC, PSYCHIC ; type
+ db PSYCHIC_TYPE, PSYCHIC_TYPE ; type
db 200 ; catch rate
db 73 ; base exp
--- a/data/pokemon/base_stats/alakazam.asm
+++ b/data/pokemon/base_stats/alakazam.asm
@@ -3,7 +3,7 @@
db 55, 50, 45, 120, 135
; hp atk def spd spc
- db PSYCHIC, PSYCHIC ; type
+ db PSYCHIC_TYPE, PSYCHIC_TYPE ; type
db 50 ; catch rate
db 186 ; base exp
--- a/data/pokemon/base_stats/drowzee.asm
+++ b/data/pokemon/base_stats/drowzee.asm
@@ -3,7 +3,7 @@
db 60, 48, 45, 42, 90
; hp atk def spd spc
- db PSYCHIC, PSYCHIC ; type
+ db PSYCHIC_TYPE, PSYCHIC_TYPE ; type
db 190 ; catch rate
db 102 ; base exp
--- a/data/pokemon/base_stats/exeggcute.asm
+++ b/data/pokemon/base_stats/exeggcute.asm
@@ -3,7 +3,7 @@
db 60, 40, 80, 40, 60
; hp atk def spd spc
- db GRASS, PSYCHIC ; type
+ db GRASS, PSYCHIC_TYPE ; type
db 90 ; catch rate
db 98 ; base exp
--- a/data/pokemon/base_stats/exeggutor.asm
+++ b/data/pokemon/base_stats/exeggutor.asm
@@ -3,7 +3,7 @@
db 95, 95, 85, 55, 125
; hp atk def spd spc
- db GRASS, PSYCHIC ; type
+ db GRASS, PSYCHIC_TYPE ; type
db 45 ; catch rate
db 212 ; base exp
--- a/data/pokemon/base_stats/hypno.asm
+++ b/data/pokemon/base_stats/hypno.asm
@@ -3,7 +3,7 @@
db 85, 73, 70, 67, 115
; hp atk def spd spc
- db PSYCHIC, PSYCHIC ; type
+ db PSYCHIC_TYPE, PSYCHIC_TYPE ; type
db 75 ; catch rate
db 165 ; base exp
--- a/data/pokemon/base_stats/jynx.asm
+++ b/data/pokemon/base_stats/jynx.asm
@@ -3,7 +3,7 @@
db 65, 50, 35, 95, 95
; hp atk def spd spc
- db ICE, PSYCHIC ; type
+ db ICE, PSYCHIC_TYPE ; type
db 45 ; catch rate
db 137 ; base exp
--- a/data/pokemon/base_stats/kadabra.asm
+++ b/data/pokemon/base_stats/kadabra.asm
@@ -3,7 +3,7 @@
db 40, 35, 30, 105, 120
; hp atk def spd spc
- db PSYCHIC, PSYCHIC ; type
+ db PSYCHIC_TYPE, PSYCHIC_TYPE ; type
db 100 ; catch rate
db 145 ; base exp
--- a/data/pokemon/base_stats/mew.asm
+++ b/data/pokemon/base_stats/mew.asm
@@ -3,7 +3,7 @@
db 100, 100, 100, 100, 100
; hp atk def spd spc
- db PSYCHIC, PSYCHIC ; type
+ db PSYCHIC_TYPE, PSYCHIC_TYPE ; type
db 45 ; catch rate
db 64 ; base exp
--- a/data/pokemon/base_stats/mewtwo.asm
+++ b/data/pokemon/base_stats/mewtwo.asm
@@ -3,7 +3,7 @@
db 106, 110, 90, 130, 154
; hp atk def spd spc
- db PSYCHIC, PSYCHIC ; type
+ db PSYCHIC_TYPE, PSYCHIC_TYPE ; type
db 3 ; catch rate
db 220 ; base exp
--- a/data/pokemon/base_stats/mrmime.asm
+++ b/data/pokemon/base_stats/mrmime.asm
@@ -3,7 +3,7 @@
db 40, 45, 65, 90, 100
; hp atk def spd spc
- db PSYCHIC, PSYCHIC ; type
+ db PSYCHIC_TYPE, PSYCHIC_TYPE ; type
db 45 ; catch rate
db 136 ; base exp
--- a/data/pokemon/base_stats/slowbro.asm
+++ b/data/pokemon/base_stats/slowbro.asm
@@ -3,7 +3,7 @@
db 95, 75, 110, 30, 80
; hp atk def spd spc
- db WATER, PSYCHIC ; type
+ db WATER, PSYCHIC_TYPE ; type
db 75 ; catch rate
db 164 ; base exp
--- a/data/pokemon/base_stats/slowpoke.asm
+++ b/data/pokemon/base_stats/slowpoke.asm
@@ -3,7 +3,7 @@
db 90, 65, 65, 15, 40
; hp atk def spd spc
- db WATER, PSYCHIC ; type
+ db WATER, PSYCHIC_TYPE ; type
db 190 ; catch rate
db 99 ; base exp
--- a/data/pokemon/base_stats/starmie.asm
+++ b/data/pokemon/base_stats/starmie.asm
@@ -3,7 +3,7 @@
db 60, 75, 85, 115, 100
; hp atk def spd spc
- db WATER, PSYCHIC ; type
+ db WATER, PSYCHIC_TYPE ; type
db 60 ; catch rate
db 207 ; base exp
--- a/data/pokemon/title_mons.asm
+++ b/data/pokemon/title_mons.asm
@@ -1,9 +1,9 @@
TitleMons:
; mons on the title screen are randomly chosen from here
IF DEF(_RED)
- db CHARMANDER
- db SQUIRTLE
- db BULBASAUR
+ db STARTER1
+ db STARTER2
+ db STARTER3
db WEEDLE
db NIDORAN_M
db SCYTHER
@@ -19,9 +19,9 @@
db MAGIKARP
ENDC
IF DEF(_GREEN)
- db BULBASAUR
- db CHARMANDER
- db SQUIRTLE
+ db STARTER3
+ db STARTER1
+ db STARTER2
db CATERPIE
db NIDORAN_F
db PINSIR
@@ -37,9 +37,9 @@
db MAGIKARP
ENDC
IF DEF(_BLUE)
- db SQUIRTLE
- db CHARMANDER
- db BULBASAUR
+ db STARTER2
+ db STARTER1
+ db STARTER3
db MANKEY
db HITMONLEE
db VULPIX
--- a/data/types/type_matchups.asm
+++ b/data/types/type_matchups.asm
@@ -1,89 +1,85 @@
TypeEffects:
-; format: attacking type, defending type, damage multiplier
-; the multiplier is a (decimal) fixed-point number:
-; 20 is ×2.0
-; 05 is ×0.5
-; 00 is ×0
- db WATER,FIRE,20
- db FIRE,GRASS,20
- db FIRE,ICE,20
- db GRASS,WATER,20
- db ELECTRIC,WATER,20
- db WATER,ROCK,20
- db GROUND,FLYING,00
- db WATER,WATER,05
- db FIRE,FIRE,05
- db ELECTRIC,ELECTRIC,05
- db ICE,ICE,05
- db GRASS,GRASS,05
- db PSYCHIC,PSYCHIC,05
- db FIRE,WATER,05
- db GRASS,FIRE,05
- db WATER,GRASS,05
- db ELECTRIC,GRASS,05
- db NORMAL,ROCK,05
- db NORMAL,GHOST,00
- db GHOST,GHOST,20
- db FIRE,BUG,20
- db FIRE,ROCK,05
- db WATER,GROUND,20
- db ELECTRIC,GROUND,00
- db ELECTRIC,FLYING,20
- db GRASS,GROUND,20
- db GRASS,BUG,05
- db GRASS,POISON,05
- db GRASS,ROCK,20
- db GRASS,FLYING,05
- db ICE,WATER,05
- db ICE,GRASS,20
- db ICE,GROUND,20
- db ICE,FLYING,20
- db FIGHTING,NORMAL,20
- db FIGHTING,POISON,05
- db FIGHTING,FLYING,05
- db FIGHTING,PSYCHIC,05
- db FIGHTING,BUG,05
- db FIGHTING,ROCK,20
- db FIGHTING,ICE,20
- db FIGHTING,GHOST,00
- db POISON,GRASS,20
- db POISON,POISON,05
- db POISON,GROUND,05
- db POISON,BUG,20
- db POISON,ROCK,05
- db POISON,GHOST,05
- db GROUND,FIRE,20
- db GROUND,ELECTRIC,20
- db GROUND,GRASS,05
- db GROUND,BUG,05
- db GROUND,ROCK,20
- db GROUND,POISON,20
- db FLYING,ELECTRIC,05
- db FLYING,FIGHTING,20
- db FLYING,BUG,20
- db FLYING,GRASS,20
- db FLYING,ROCK,05
- db PSYCHIC,FIGHTING,20
- db PSYCHIC,POISON,20
- db BUG,FIRE,05
- db BUG,GRASS,20
- db BUG,FIGHTING,05
- db BUG,FLYING,05
- db BUG,PSYCHIC,20
- db BUG,GHOST,05
- db BUG,POISON,20
- db ROCK,FIRE,20
- db ROCK,FIGHTING,05
- db ROCK,GROUND,05
- db ROCK,FLYING,20
- db ROCK,BUG,20
- db ROCK,ICE,20
- db GHOST,NORMAL,00
- db GHOST,PSYCHIC,00
- db FIRE,DRAGON,05
- db WATER,DRAGON,05
- db ELECTRIC,DRAGON,05
- db GRASS,DRAGON,05
- db ICE,DRAGON,20
- db DRAGON,DRAGON,20
- db $FF
+ ; attacker, defender, *=
+ db WATER, FIRE, SUPER_EFFECTIVE
+ db FIRE, GRASS, SUPER_EFFECTIVE
+ db FIRE, ICE, SUPER_EFFECTIVE
+ db GRASS, WATER, SUPER_EFFECTIVE
+ db ELECTRIC, WATER, SUPER_EFFECTIVE
+ db WATER, ROCK, SUPER_EFFECTIVE
+ db GROUND, FLYING, NO_EFFECT
+ db WATER, WATER, NOT_VERY_EFFECTIVE
+ db FIRE, FIRE, NOT_VERY_EFFECTIVE
+ db ELECTRIC, ELECTRIC, NOT_VERY_EFFECTIVE
+ db ICE, ICE, NOT_VERY_EFFECTIVE
+ db GRASS, GRASS, NOT_VERY_EFFECTIVE
+ db PSYCHIC_TYPE, PSYCHIC_TYPE, NOT_VERY_EFFECTIVE
+ db FIRE, WATER, NOT_VERY_EFFECTIVE
+ db GRASS, FIRE, NOT_VERY_EFFECTIVE
+ db WATER, GRASS, NOT_VERY_EFFECTIVE
+ db ELECTRIC, GRASS, NOT_VERY_EFFECTIVE
+ db NORMAL, ROCK, NOT_VERY_EFFECTIVE
+ db NORMAL, GHOST, NO_EFFECT
+ db GHOST, GHOST, SUPER_EFFECTIVE
+ db FIRE, BUG, SUPER_EFFECTIVE
+ db FIRE, ROCK, NOT_VERY_EFFECTIVE
+ db WATER, GROUND, SUPER_EFFECTIVE
+ db ELECTRIC, GROUND, NO_EFFECT
+ db ELECTRIC, FLYING, SUPER_EFFECTIVE
+ db GRASS, GROUND, SUPER_EFFECTIVE
+ db GRASS, BUG, NOT_VERY_EFFECTIVE
+ db GRASS, POISON, NOT_VERY_EFFECTIVE
+ db GRASS, ROCK, SUPER_EFFECTIVE
+ db GRASS, FLYING, NOT_VERY_EFFECTIVE
+ db ICE, WATER, NOT_VERY_EFFECTIVE
+ db ICE, GRASS, SUPER_EFFECTIVE
+ db ICE, GROUND, SUPER_EFFECTIVE
+ db ICE, FLYING, SUPER_EFFECTIVE
+ db FIGHTING, NORMAL, SUPER_EFFECTIVE
+ db FIGHTING, POISON, NOT_VERY_EFFECTIVE
+ db FIGHTING, FLYING, NOT_VERY_EFFECTIVE
+ db FIGHTING, PSYCHIC_TYPE, NOT_VERY_EFFECTIVE
+ db FIGHTING, BUG, NOT_VERY_EFFECTIVE
+ db FIGHTING, ROCK, SUPER_EFFECTIVE
+ db FIGHTING, ICE, SUPER_EFFECTIVE
+ db FIGHTING, GHOST, NO_EFFECT
+ db POISON, GRASS, SUPER_EFFECTIVE
+ db POISON, POISON, NOT_VERY_EFFECTIVE
+ db POISON, GROUND, NOT_VERY_EFFECTIVE
+ db POISON, BUG, SUPER_EFFECTIVE
+ db POISON, ROCK, NOT_VERY_EFFECTIVE
+ db POISON, GHOST, NOT_VERY_EFFECTIVE
+ db GROUND, FIRE, SUPER_EFFECTIVE
+ db GROUND, ELECTRIC, SUPER_EFFECTIVE
+ db GROUND, GRASS, NOT_VERY_EFFECTIVE
+ db GROUND, BUG, NOT_VERY_EFFECTIVE
+ db GROUND, ROCK, SUPER_EFFECTIVE
+ db GROUND, POISON, SUPER_EFFECTIVE
+ db FLYING, ELECTRIC, NOT_VERY_EFFECTIVE
+ db FLYING, FIGHTING, SUPER_EFFECTIVE
+ db FLYING, BUG, SUPER_EFFECTIVE
+ db FLYING, GRASS, SUPER_EFFECTIVE
+ db FLYING, ROCK, NOT_VERY_EFFECTIVE
+ db PSYCHIC_TYPE, FIGHTING, SUPER_EFFECTIVE
+ db PSYCHIC_TYPE, POISON, SUPER_EFFECTIVE
+ db BUG, FIRE, NOT_VERY_EFFECTIVE
+ db BUG, GRASS, SUPER_EFFECTIVE
+ db BUG, FIGHTING, NOT_VERY_EFFECTIVE
+ db BUG, FLYING, NOT_VERY_EFFECTIVE
+ db BUG, PSYCHIC_TYPE, SUPER_EFFECTIVE
+ db BUG, GHOST, NOT_VERY_EFFECTIVE
+ db BUG, POISON, SUPER_EFFECTIVE
+ db ROCK, FIRE, SUPER_EFFECTIVE
+ db ROCK, FIGHTING, NOT_VERY_EFFECTIVE
+ db ROCK, GROUND, NOT_VERY_EFFECTIVE
+ db ROCK, FLYING, SUPER_EFFECTIVE
+ db ROCK, BUG, SUPER_EFFECTIVE
+ db ROCK, ICE, SUPER_EFFECTIVE
+ db GHOST, NORMAL, NO_EFFECT
+ db GHOST, PSYCHIC_TYPE, NO_EFFECT
+ db FIRE, DRAGON, NOT_VERY_EFFECTIVE
+ db WATER, DRAGON, NOT_VERY_EFFECTIVE
+ db ELECTRIC, DRAGON, NOT_VERY_EFFECTIVE
+ db GRASS, DRAGON, NOT_VERY_EFFECTIVE
+ db ICE, DRAGON, SUPER_EFFECTIVE
+ db DRAGON, DRAGON, SUPER_EFFECTIVE
+ db -1 ; end
--- a/engine/battle/animations.asm
+++ b/engine/battle/animations.asm
@@ -163,7 +163,7 @@
PlayAnimation:
xor a
- ld [hROMBankTemp], a ; it looks like nothing reads this
+ ldh [hROMBankTemp], a ; it looks like nothing reads this
ld [wSubAnimTransform], a
ld a, [wAnimationID] ; get animation number
dec a
@@ -241,15 +241,15 @@
ld l, c
ld h, b
push hl
- ld a, [rOBP0]
+ ldh a, [rOBP0]
push af
ld a, [wAnimPalette]
- ld [rOBP0], a
+ ldh [rOBP0], a
call LoadAnimationTileset
call LoadSubanimation
call PlaySubanimation
pop af
- ld [rOBP0], a
+ ldh [rOBP0], a
.nextAnimationCommand
pop hl
jr .animationLoop
@@ -308,7 +308,7 @@
; sets the transform to the subanimation type if it's the enemy's turn
GetSubanimationTransform1:
ld b, a
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, b
ret nz
@@ -319,7 +319,7 @@
; sets the transform to 2 (i.e. horizontal and vertical flip) if it's the player's turn
; sets the transform to 0 (i.e. no transform) if it's the enemy's turn
GetSubanimationTransform2:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, 2 << 5
ret z
@@ -341,7 +341,7 @@
ld e, a
ld a, [hl]
ld d, a ; de = address of tileset
- ld hl, vSprites + $310
+ ld hl, vSprites tile $31
ld b, BANK(AnimationTileset1) ; ROM bank
ld a, [wTempTilesetNumTiles]
ld c, a ; number of tiles
@@ -373,6 +373,7 @@
IF DEF(_BLUE)
INCBIN "gfx/slots/blue_slots_2.2bpp"
ENDC
+SlotMachineTiles2End:
MoveAnimation:
push hl
@@ -421,11 +422,11 @@
ShareMoveAnimations:
; some moves just reuse animations from status conditions
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ret z
- ; opponent’s turn
+ ; opponent's turn
ld a, [wAnimationID]
@@ -497,9 +498,9 @@
push bc
push bc
.loop1
- ld a, [rWX]
+ ldh a, [rWX]
inc a
- ld [rWX], a
+ ldh [rWX], a
ld c, 2
call DelayFrames
dec b
@@ -506,9 +507,9 @@
jr nz, .loop1
pop bc
.loop2
- ld a, [rWX]
+ ldh a, [rWX]
dec a
- ld [rWX], a
+ ldh [rWX], a
ld c, 2
call DelayFrames
dec b
@@ -534,16 +535,16 @@
ld b, $f0
.next
ld a, b
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, $6c
- ld [rOBP1], a
+ ldh [rOBP1], a
ret
.notSGB
ld a, $e4
ld [wAnimPalette], a
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, $6c
- ld [rOBP1], a
+ ldh [rOBP1], a
ret
PlaySubanimation:
@@ -656,9 +657,9 @@
cp 3 ; is it a Master Ball or Ultra Ball?
jr nc, .skipFlashingEffect
.flashingEffect ; do a flashing effect if it's Master Ball or Ultra Ball
- ld a, [rOBP0]
+ ldh a, [rOBP0]
xor %00111100 ; complement colors 1 and 2
- ld [rOBP0], a
+ ldh [rOBP0], a
.skipFlashingEffect
ld a, [wSubAnimCounter]
cp 11 ; is it the beginning of the subanimation?
@@ -682,7 +683,7 @@
cp 1
ret nz
.moveGhostMarowakLeft
- coord hl, 17, 0
+ hlcoord 17, 0
ld de, 20
lb bc, 7, 7
.loop
@@ -695,7 +696,7 @@
dec b
jr nz, .loop
ld a, %00001000
- ld [rNR10], a ; Channel 1 sweep register
+ ldh [rNR10], a ; Channel 1 sweep register
ret
.isTrainerBattle ; if it's a trainer battle, shorten the animation by one frame
ld a, [wSubAnimCounter]
@@ -781,7 +782,7 @@
cp 1 ; is it the end of the subanimation?
jr nz, FlashScreenEveryFourFrameBlocks
; if it's the end of the subanimation, make the attacking pokemon disappear
- coord hl, 1, 5
+ hlcoord 1, 5
jp AnimationHideMonPic ; make pokemon disappear
; flashes the screen when subanimation counter is 1 modulo 4
@@ -882,9 +883,9 @@
ld c, 5
call DelayFrames
pop bc
- ld a, [hSCX] ; background scroll X
+ ldh a, [hSCX] ; background scroll X
sub 8 ; scroll to the left
- ld [hSCX], a
+ ldh [hSCX], a
pop de
jr .loop
@@ -920,16 +921,16 @@
; calls a function with the turn flipped from player to enemy or vice versa
; input - hl - address of function to call
CallWithTurnFlipped:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
push af
xor 1
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
ld de, .returnAddress
push de
jp hl
.returnAddress
pop af
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
ret
; flashes the screen for an extended period (48 frames)
@@ -947,7 +948,7 @@
ld a, [hli]
cp $01 ; is it the end of the palettes?
jr z, .endOfPalettes
- ld [rBGP], a
+ ldh [rBGP], a
call FlashScreenLongDelay
jr .innerLoop
.endOfPalettes
@@ -1006,18 +1007,18 @@
jp DelayFrames
AnimationFlashScreen:
- ld a, [rBGP]
+ ldh a, [rBGP]
push af ; save initial palette
ld a, %00011011 ; 0, 1, 2, 3 (inverted colors)
- ld [rBGP], a
+ ldh [rBGP], a
ld c, 2
call DelayFrames
xor a ; white out background
- ld [rBGP], a
+ ldh [rBGP], a
ld c, 2
call DelayFrames
pop af
- ld [rBGP], a ; restore initial palette
+ ldh [rBGP], a ; restore initial palette
ret
AnimationDarkScreenPalette:
@@ -1062,7 +1063,7 @@
jr z, .next
ld a, c
.next
- ld [rBGP], a
+ ldh [rBGP], a
ret
ld b, $5
@@ -1133,14 +1134,14 @@
AnimationSlideMonUp:
; Slides the mon's sprite upwards.
ld c, 7
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
- coord hl, 1, 6
- coord de, 1, 5
+ hlcoord 1, 6
+ decoord 1, 5
ld a, $30
jr z, .next
- coord hl, 12, 1
- coord de, 12, 0
+ hlcoord 12, 1
+ decoord 12, 0
ld a, $ff
.next
ld [wSlideMonUpBottomRowLeftTile], a
@@ -1201,11 +1202,11 @@
jr nz, .slideLoop
; Fill in the bottom row of the mon pic with the next row's tile IDs.
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
- coord hl, 1, 11
+ hlcoord 1, 11
jr z, .next
- coord hl, 12, 6
+ hlcoord 12, 6
.next
ld a, [wSlideMonUpBottomRowLeftTile]
inc a
@@ -1370,13 +1371,13 @@
AnimationShakeBackAndForth:
; Shakes the mon's sprite back and forth rapidly. This is used in Double Team.
; The mon's sprite disappears after this animation.
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
- coord hl, 0, 5
- coord de, 2, 5
+ hlcoord 0, 5
+ decoord 2, 5
jr z, .next
- coord hl, 11, 0
- coord de, 13, 0
+ hlcoord 11, 0
+ decoord 13, 0
.next
xor a
@@ -1418,11 +1419,11 @@
; Shifts the mon's sprite horizontally to a fixed location. Used by lots of
; animations like Tackle/Body Slam.
call AnimationHideMonPic
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
- coord hl, 2, 5
+ hlcoord 2, 5
jr z, .next
- coord hl, 11, 0
+ hlcoord 11, 0
.next
xor a
push hl
@@ -1434,7 +1435,7 @@
AnimationResetMonPosition:
; Resets the mon's sprites to be located at the normal coordinates.
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, 5 * SCREEN_WIDTH + 2
jr z, .next
@@ -1446,7 +1447,7 @@
AnimationSpiralBallsInward:
; Creates an effect that looks like energy balls spiralling into the
; player mon's sprite. Used in Focus Energy, for example.
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playerTurn
ld a, -40
@@ -1530,15 +1531,15 @@
ld c, 4
.loop
push bc
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playerTurn
- coord hl, 16, 0
- coord de, 14, 0
+ hlcoord 16, 0
+ decoord 14, 0
jr .next
.playerTurn
- coord hl, 5, 5
- coord de, 3, 5
+ hlcoord 5, 5
+ decoord 3, 5
.next
push de
xor a ; left
@@ -1583,7 +1584,7 @@
AnimationShootBallsUpward:
; Shoots one pillar of "energy" balls upwards. Used in Teleport/Sky Attack
; animations.
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playerTurn
lb bc, 0, 16 * 8
@@ -1651,7 +1652,7 @@
AnimationShootManyBallsUpward:
; Shoots several pillars of "energy" balls upward.
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld hl, UpwardBallsAnimXCoordinatesPlayerTurn
ld a, $50 ; y coordinate for "energy" ball pillar
@@ -1743,13 +1744,13 @@
_AnimationSlideMonOff:
; Slides the mon's sprite off the screen horizontally by e tiles and waits
; [wSlideMonDelay] V-blanks each time the pic is slid by one tile.
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playerTurn
- coord hl, 12, 0
+ hlcoord 12, 0
jr .next
.playerTurn
- coord hl, 0, 5
+ hlcoord 0, 5
.next
ld d, 8 ; d's value is unused
.slideLoop ; iterates once for each time the pic slides by one tile
@@ -1758,7 +1759,7 @@
.rowLoop ; iterates once for each row
ld c, 8
.tileLoop ; iterates once for each tile in the row
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playerTurn2
call .EnemyNextTile
@@ -1821,7 +1822,7 @@
jp Delay3
CopyTempPicToMonPic:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld hl, vBackPic ; player turn
jr z, .next
@@ -1837,9 +1838,9 @@
call BattleAnimCopyTileMapToVRAM
call Delay3
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld a, SCREEN_HEIGHT_PX
- ld [hWY], a
+ ldh [hWY], a
ld d, $80 ; terminator
ld e, SCREEN_HEIGHT_PX - 1
ld c, $ff
@@ -1848,7 +1849,7 @@
push hl
.innerLoop
call WavyScreen_SetSCX
- ld a, [rLY]
+ ldh a, [rLY]
cp e ; is it the last visible line in the frame?
jr nz, .innerLoop ; keep going if not
pop hl
@@ -1861,11 +1862,11 @@
dec c
jr nz, .loop
xor a
- ld [hWY], a
+ ldh [hWY], a
call SaveScreenTilesToBuffer2
call ClearScreen
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
call LoadScreenTilesFromBuffer2
ld hl, vBGMap1
@@ -1873,11 +1874,11 @@
ret
WavyScreen_SetSCX:
- ld a, [rSTAT]
+ ldh a, [rSTAT]
and $3 ; is it H-blank?
jr nz, WavyScreen_SetSCX ; wait until it's H-blank
ld a, [hl]
- ld [rSCX], a
+ ldh [rSCX], a
inc hl
ld a, [hl]
cp d ; have we reached the end?
@@ -1898,7 +1899,7 @@
xor a
ld bc, $310
call FillMemory
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playerTurn
ld hl, SlowbroSprite ; facing down sprite
@@ -1937,7 +1938,7 @@
jp FarCopyData2
HideSubstituteShowMonAnim:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld hl, wPlayerMonMinimized
ld a, [wPlayerBattleStatus2]
@@ -1987,7 +1988,7 @@
ld [wChangeMonPicEnemyTurnSpecies], a
ChangeMonPic:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playerTurn
ld a, [wChangeMonPicEnemyTurnSpecies]
@@ -1996,7 +1997,7 @@
xor a
ld [wSpriteFlipped], a
call GetMonHeader
- coord hl, 12, 0
+ hlcoord 12, 0
call LoadFrontSpriteByMonIndex
jr .done
.playerTurn
@@ -2020,11 +2021,11 @@
AnimationHideEnemyMonPic:
; Hides the enemy mon's sprite
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld hl, AnimationHideMonPic
call CallWithTurnFlipped
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
jp Delay3
InitMultipleObjectsOAM:
@@ -2050,7 +2051,7 @@
AnimationHideMonPic:
; Hides the mon's sprite.
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playerTurn
ld a, 12
@@ -2064,7 +2065,7 @@
push bc
ld e, a
ld d, 0
- coord hl, 0, 0
+ hlcoord 0, 0
add hl, de
lb bc, 7, 7
call ClearScreenArea
@@ -2078,7 +2079,7 @@
; in order to show only a portion of the mon sprite.
GetMonSpriteTileMapPointerFromRowCount:
push de
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr nz, .enemyTurn
ld a, 20 * 5 + 1
@@ -2086,7 +2087,7 @@
.enemyTurn
ld a, 12
.next
- coord hl, 0, 0
+ hlcoord 0, 0
ld e, a
ld d, 0
add hl, de
@@ -2166,7 +2167,7 @@
ld b, a
call IsCryMove
jr nc, .NotCryMove
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr nz, .next
ld a, [wBattleMonSpecies] ; get number of current monster
@@ -2211,7 +2212,7 @@
INCLUDE "data/moves/sfx.asm"
CopyPicTiles:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, $31 ; base tile ID of player mon sprite
jr z, .next
@@ -2218,7 +2219,7 @@
; enemy turn
xor a ; base tile ID of enemy mon sprite
.next
- ld [hBaseTileID], a
+ ldh [hBaseTileID], a
jr CopyTileIDs_NoBGTransfer
; copy the tiles used when a mon is being sent out of or into a pokeball
@@ -2235,7 +2236,7 @@
CopyTileIDs_NoBGTransfer:
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
; fall through
; b = number of rows
@@ -2245,7 +2246,7 @@
.rowLoop
push bc
push hl
- ld a, [hBaseTileID]
+ ldh a, [hBaseTileID]
ld b, a
.columnLoop
ld a, [de]
@@ -2261,7 +2262,7 @@
dec b
jr nz, .rowLoop
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
pop hl
ret
@@ -2361,16 +2362,16 @@
AnimationLeavesFalling:
; Makes leaves float down from the top of the screen. This is used
; in Razor Leaf's animation.
- ld a, [rOBP0]
+ ldh a, [rOBP0]
push af
ld a, [wAnimPalette]
- ld [rOBP0], a
+ ldh [rOBP0], a
ld d, $37 ; leaf tile
ld a, 3 ; number of leaves
ld [wNumFallingObjects], a
call AnimationFallingObjects
pop af
- ld [rOBP0], a
+ ldh [rOBP0], a
ret
AnimationPetalsFalling:
@@ -2529,7 +2530,7 @@
call CopyVideoData
xor a
- ld [hSCX], a
+ ldh [hSCX], a
; Copy wTileMap to BG map 0. The regular BG (not the window) is set to use
; map 0 and can be scrolled with SCX, which allows a shaking effect.
@@ -2539,7 +2540,7 @@
; Now that the regular BG is showing the same thing the window was, move the
; window off the screen so that we can modify its contents below.
ld a, SCREEN_HEIGHT_PX
- ld [hWY], a
+ ldh [hWY], a
; Copy wTileMap to VRAM such that the row below the enemy HUD (in wTileMap) is
; lined up with row 0 of the window.
@@ -2551,7 +2552,7 @@
; covers everything below the enemy HD with a copy that looks just like what
; was there before.
ld a, 7 * 8
- ld [hWY], a
+ ldh [hWY], a
; Write OAM entries so that the copy of the back pic from the top of this
; function shows up on screen. We need this because the back pic's Y coordinates
@@ -2576,11 +2577,11 @@
call AnimationShowMonPic
call ClearSprites
ld a, SCREEN_HEIGHT_PX
- ld [hWY], a
+ ldh [hWY], a
ld hl, vBGMap1
call BattleAnimCopyTileMapToVRAM
xor a
- ld [hWY], a
+ ldh [hWY], a
call SaveScreenTilesToBuffer1
ld hl, vBGMap0
call BattleAnimCopyTileMapToVRAM
@@ -2595,7 +2596,7 @@
CopyTileIDsFromList:
call GetPredefRegisters
ld a, c
- ld [hBaseTileID], a
+ ldh [hBaseTileID], a
ld a, b
push hl
call GetTileIDList
@@ -2603,30 +2604,30 @@
jp CopyTileIDs
ShakeEnemyHUD_ShakeBG:
- ld a, [hSCX]
+ ldh a, [hSCX]
ld [wTempSCX], a
.loop
ld a, [wTempSCX]
add d
- ld [hSCX], a
+ ldh [hSCX], a
ld c, 2
call DelayFrames
ld a, [wTempSCX]
sub d
- ld [hSCX], a
+ ldh [hSCX], a
ld c, 2
call DelayFrames
dec e
jr nz, .loop
ld a, [wTempSCX]
- ld [hSCX], a
+ ldh [hSCX], a
ret
BattleAnimCopyTileMapToVRAM:
ld a, h
- ld [hAutoBGTransferDest + 1], a
+ ldh [hAutoBGTransferDest + 1], a
ld a, l
- ld [hAutoBGTransferDest], a
+ ldh [hAutoBGTransferDest], a
jp Delay3
TossBallAnimation:
--- a/engine/battle/battle_transitions.asm
+++ b/engine/battle/battle_transitions.asm
@@ -1,9 +1,9 @@
BattleTransition:
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
xor a
- ld [hWY], a
+ ldh [hWY], a
dec a
ld [wUpdateSpritesEnabled], a
call DelayFrame
@@ -11,7 +11,7 @@
; Determine which OAM block is being used by the enemy trainer sprite (if there
; is one).
ld hl, wSpritePlayerStateData1ImageIndex
- ld a, [hSpriteIndexOrTextID] ; enemy trainer sprite index (0 if wild battle)
+ ldh a, [hSpriteIndexOrTextID] ; enemy trainer sprite index (0 if wild battle)
ld c, a
ld b, 0
ld de, $10
@@ -154,20 +154,18 @@
INCLUDE "data/maps/dungeon_maps.asm"
LoadBattleTransitionTile:
- ld hl, vChars1 + $7f0
+ ld hl, vChars1 tile $7f
ld de, BattleTransitionTile
- lb bc, BANK(BattleTransitionTile), (BattleTransitionTileEnd - BattleTransitionTile) / $10
+ lb bc, BANK(BattleTransitionTile), 1
jp CopyVideoData
-BattleTransitionTile:
- INCBIN "gfx/overworld/battle_transition.2bpp"
-BattleTransitionTileEnd:
+BattleTransitionTile: INCBIN "gfx/overworld/battle_transition.2bpp"
BattleTransition_BlackScreen:
ld a, $ff
- ld [rBGP], a
- ld [rOBP0], a
- ld [rOBP1], a
+ ldh [rBGP], a
+ ldh [rOBP0], a
+ ldh [rOBP1], a
ret
; for non-dungeon trainer battles
@@ -181,7 +179,7 @@
call BattleTransition_InwardSpiral
jr .done
.outwardSpiral
- coord hl, 10, 10
+ hlcoord 10, 10
ld a, $3
ld [wOutwardSpiralCurrentDirection], a
ld a, l
@@ -210,7 +208,7 @@
BattleTransition_InwardSpiral:
ld a, 7
ld [wInwardSpiralUpdateScreenCounter], a
- coord hl, 0, 0
+ hlcoord 0, 0
ld c, SCREEN_HEIGHT - 1
ld de, SCREEN_WIDTH
call BattleTransition_InwardSpiral_
@@ -330,7 +328,7 @@
ld a, [hli]
cp $1
jr z, .done
- ld [rBGP], a
+ ldh [rBGP], a
ld c, 2
call DelayFrames
jr .loop
@@ -349,25 +347,25 @@
.loop
push bc
xor a
- ld [hAutoBGTransferEnabled], a
- coord hl, 0, 7
- coord de, 0, 8
+ ldh [hAutoBGTransferEnabled], a
+ hlcoord 0, 7
+ decoord 0, 8
ld bc, -SCREEN_WIDTH * 2
call BattleTransition_CopyTiles1
- coord hl, 0, 10
- coord de, 0, 9
+ hlcoord 0, 10
+ decoord 0, 9
ld bc, SCREEN_WIDTH * 2
call BattleTransition_CopyTiles1
- coord hl, 8, 0
- coord de, 9, 0
+ hlcoord 8, 0
+ decoord 9, 0
ld bc, -2
call BattleTransition_CopyTiles2
- coord hl, 11, 0
- coord de, 10, 0
+ hlcoord 11, 0
+ decoord 10, 0
ld bc, 2
call BattleTransition_CopyTiles2
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld c, 6
call DelayFrames
pop bc
@@ -381,23 +379,23 @@
BattleTransition_Split:
ld c, SCREEN_HEIGHT / 2
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
.loop
push bc
- coord hl, 0, 16
- coord de, 0, 17
+ hlcoord 0, 16
+ decoord 0, 17
ld bc, -SCREEN_WIDTH * 2
call BattleTransition_CopyTiles1
- coord hl, 0, 1
- coord de, 0, 0
+ hlcoord 0, 1
+ decoord 0, 0
ld bc, SCREEN_WIDTH * 2
call BattleTransition_CopyTiles1
- coord hl, 18, 0
- coord de, 19, 0
+ hlcoord 18, 0
+ decoord 19, 0
ld bc, -2
call BattleTransition_CopyTiles2
- coord hl, 1, 0
- coord de, 0, 0
+ hlcoord 1, 0
+ decoord 0, 0
ld bc, 2
call BattleTransition_CopyTiles2
call BattleTransition_TransferDelay3
@@ -493,10 +491,10 @@
; used for high level wild dungeon battles
BattleTransition_VerticalStripes:
ld c, SCREEN_HEIGHT
- coord hl, 0, 0
- coord de, 1, 17
+ hlcoord 0, 0
+ decoord 1, 17
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
.loop
push bc
push hl
@@ -532,10 +530,10 @@
; used for low level wild dungeon battles
BattleTransition_HorizontalStripes:
ld c, SCREEN_WIDTH
- coord hl, 0, 0
- coord de, 19, 1
+ hlcoord 0, 0
+ decoord 19, 1
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
.loop
push bc
push hl
@@ -582,7 +580,7 @@
ld b, $3
call BattleTransition_FlashScreen_
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ret
BattleTransition_Circle_Sub1:
@@ -601,10 +599,10 @@
BattleTransition_TransferDelay3:
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ret
; used for low level wild non-dungeon battles
@@ -654,84 +652,84 @@
BattleTransition_HalfCircle1:
db $01
dw BattleTransition_CircleData1
- dwCoord 18, 6
+ dwcoord 18, 6
db $01
dw BattleTransition_CircleData2
- dwCoord 19, 3
+ dwcoord 19, 3
db $01
dw BattleTransition_CircleData3
- dwCoord 18, 0
+ dwcoord 18, 0
db $01
dw BattleTransition_CircleData4
- dwCoord 14, 0
+ dwcoord 14, 0
db $01
dw BattleTransition_CircleData5
- dwCoord 10, 0
+ dwcoord 10, 0
db $00
dw BattleTransition_CircleData5
- dwCoord 9, 0
+ dwcoord 9, 0
db $00
dw BattleTransition_CircleData4
- dwCoord 5, 0
+ dwcoord 5, 0
db $00
dw BattleTransition_CircleData3
- dwCoord 1, 0
+ dwcoord 1, 0
db $00
dw BattleTransition_CircleData2
- dwCoord 0, 3
+ dwcoord 0, 3
db $00
dw BattleTransition_CircleData1
- dwCoord 1, 6
+ dwcoord 1, 6
BattleTransition_HalfCircle2:
db $00
dw BattleTransition_CircleData1
- dwCoord 1, 11
+ dwcoord 1, 11
db $00
dw BattleTransition_CircleData2
- dwCoord 0, 14
+ dwcoord 0, 14
db $00
dw BattleTransition_CircleData3
- dwCoord 1, 17
+ dwcoord 1, 17
db $00
dw BattleTransition_CircleData4
- dwCoord 5, 17
+ dwcoord 5, 17
db $00
dw BattleTransition_CircleData5
- dwCoord 9, 17
+ dwcoord 9, 17
db $01
dw BattleTransition_CircleData5
- dwCoord 10, 17
+ dwcoord 10, 17
db $01
dw BattleTransition_CircleData4
- dwCoord 14, 17
+ dwcoord 14, 17
db $01
dw BattleTransition_CircleData3
- dwCoord 18, 17
+ dwcoord 18, 17
db $01
dw BattleTransition_CircleData2
- dwCoord 19, 14
+ dwcoord 19, 14
db $01
dw BattleTransition_CircleData1
- dwCoord 18, 11
+ dwcoord 18, 11
BattleTransition_Circle_Sub3:
push hl
--- a/engine/battle/common_text.asm
+++ b/engine/battle/common_text.asm
@@ -24,7 +24,7 @@
ld hl, TrainerWantsToFightText
.wildBattle
push hl
- callab DrawAllPokeballs
+ callfar DrawAllPokeballs
pop hl
call PrintText
jr .done
@@ -38,7 +38,7 @@
ld a, b
and a
jr z, .noSilphScope
- callab LoadEnemyMonData
+ callfar LoadEnemyMonData
jr .notPokemonTower
.noSilphScope
ld hl, EnemyAppearedText
@@ -54,8 +54,8 @@
call PrintText
ld hl, UnveiledGhostText
call PrintText
- callab LoadEnemyMonData
- callab MarowakAnim
+ callfar LoadEnemyMonData
+ callfar MarowakAnim
ld hl, WildMonAppearedText
call PrintText
@@ -101,16 +101,16 @@
ld hl, GoText
jr z, .printText
xor a
- ld [hMultiplicand], a
+ ldh [hMultiplicand], a
ld hl, wEnemyMonHP
ld a, [hli]
ld [wLastSwitchInEnemyMonHP], a
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
ld a, [hl]
ld [wLastSwitchInEnemyMonHP + 1], a
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
ld a, 25
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
ld hl, wEnemyMonMaxHP
ld a, [hli]
@@ -121,9 +121,9 @@
rr b
ld a, b
ld b, 4
- ld [hDivisor], a ; enemy mon max HP divided by 4
+ ldh [hDivisor], a ; enemy mon max HP divided by 4
call Divide
- ld a, [hQuotient + 3] ; a = (enemy mon current HP * 25) / (enemy max HP / 4); this approximates the current percentage of max HP
+ ldh a, [hQuotient + 3] ; a = (enemy mon current HP * 25) / (enemy max HP / 4); this approximates the current percentage of max HP
ld hl, GoText ; 70% or greater
cp 70
jr nc, .printText
@@ -179,14 +179,14 @@
dec hl
ld a, [de]
sub b
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
dec de
ld b, [hl]
ld a, [de]
sbc b
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
ld a, 25
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
ld hl, wEnemyMonMaxHP
ld a, [hli]
@@ -197,11 +197,11 @@
rr b
ld a, b
ld b, 4
- ld [hDivisor], a
+ ldh [hDivisor], a
call Divide
pop bc
pop de
- ld a, [hQuotient + 3] ; a = ((LastSwitchInEnemyMonHP - CurrentEnemyMonHP) / 25) / (EnemyMonMaxHP / 4)
+ ldh a, [hQuotient + 3] ; a = ((LastSwitchInEnemyMonHP - CurrentEnemyMonHP) / 25) / (EnemyMonMaxHP / 4)
; Assuming that the enemy mon hasn't gained HP since the last switch in,
; a approximates the percentage that the enemy mon's total HP has decreased
; since the last switch in.
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -11,7 +11,7 @@
ld a, MESSAGE_BOX ; the usual text box at the bottom of the screen
ld [wTextBoxID], a
call DisplayTextBoxID
- coord hl, 1, 5
+ hlcoord 1, 5
lb bc, 3, 7
call ClearScreenArea
call DisableLCD
@@ -27,7 +27,7 @@
or c
jr nz, .clearBackgroundLoop
; copy the work RAM tile map to VRAM
- coord hl, 0, 0
+ hlcoord 0, 0
ld de, vBGMap0
ld b, 18 ; number of rows
.copyRowLoop
@@ -48,25 +48,25 @@
jr nz, .copyRowLoop
call EnableLCD
ld a, $90
- ld [hWY], a
- ld [rWY], a
+ ldh [hWY], a
+ ldh [rWY], a
xor a
- ld [hTilesetType], a
- ld [hSCY], a
+ ldh [hTilesetType], a
+ ldh [hSCY], a
dec a
ld [wUpdateSpritesEnabled], a
call Delay3
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld b, $70
ld c, $90
ld a, c
- ld [hSCX], a
+ ldh [hSCX], a
call DelayFrame
ld a, %11100100 ; inverted palette for silhouette effect
- ld [rBGP], a
- ld [rOBP0], a
- ld [rOBP1], a
+ ldh [rBGP], a
+ ldh [rOBP0], a
+ ldh [rOBP1], a
.slideSilhouettesLoop ; slide silhouettes of the player's pic and the enemy's pic onto the screen
ld h, b
ld l, $40
@@ -78,26 +78,26 @@
call SetScrollXForSlidingPlayerBodyLeft ; end background scrolling on line $60
call SlidePlayerHeadLeft
ld a, c
- ld [hSCX], a
+ ldh [hSCX], a
dec c
dec c
jr nz, .slideSilhouettesLoop
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld a, $31
- ld [hStartTileID], a
- coord hl, 1, 5
+ ldh [hStartTileID], a
+ hlcoord 1, 5
predef CopyUncompressedPicToTilemap
xor a
- ld [hWY], a
- ld [rWY], a
+ ldh [hWY], a
+ ldh [rWY], a
inc a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
ld b, SET_PAL_BATTLE
call RunPaletteCommand
call HideSprites
- jpab PrintBeginningBattleText
+ jpfar PrintBeginningBattleText
; when a battle is starting, silhouettes of the player's pic and the enemy's pic are slid onto the screen
; the lower of the player's pic (his body) is part of the background, but his head is a sprite
@@ -118,13 +118,13 @@
ret
SetScrollXForSlidingPlayerBodyLeft:
- ld a, [rLY]
+ ldh a, [rLY]
cp l
jr nz, SetScrollXForSlidingPlayerBodyLeft
ld a, h
- ld [rSCX], a
+ ldh [rSCX], a
.loop
- ld a, [rLY]
+ ldh a, [rLY]
cp h
jr z, .loop
ret
@@ -178,7 +178,7 @@
ld hl, .outOfSafariBallsText
jp PrintText
.notOutOfSafariBalls
- callab PrintSafariZoneBattleText
+ callfar PrintSafariZoneBattleText
ld a, [wEnemyMonSpeed + 1]
add a
ld b, a ; init b (which is later compared with random value) to (enemy speed % 256) * 2
@@ -232,7 +232,7 @@
ld [wcf91], a
ld [wBattleMonSpecies2], a
call LoadScreenTilesFromBuffer1
- coord hl, 1, 5
+ hlcoord 1, 5
ld a, $9
call SlideTrainerPicOffScreen
call SaveScreenTilesToBuffer1
@@ -266,8 +266,8 @@
ld a, SFX_RUN
call PlaySoundWaitForCurrent
xor a
- ld [hWhoseTurn], a
- jpab AnimationSlideEnemyMonOff
+ ldh [hWhoseTurn], a
+ jpfar AnimationSlideEnemyMonOff
WildRanText:
text_far _WildRanText
@@ -365,7 +365,7 @@
jr nz, .specialMoveNotUsed
ld [wPlayerSelectedMove], a
.specialMoveNotUsed
- callab SwitchEnemyMon
+ callfar SwitchEnemyMon
.noLinkBattle
ld a, [wPlayerSelectedMove]
cp QUICK_ATTACK
@@ -398,7 +398,7 @@
jr nc, .playerMovesFirst ; if player is faster
jr .enemyMovesFirst ; if enemy is faster
.speedEqual ; 50/50 chance for both players
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr z, .invertOutcome
call BattleRandom
@@ -412,8 +412,8 @@
jr .playerMovesFirst
.enemyMovesFirst
ld a, $1
- ld [hWhoseTurn], a
- callab TrainerAI
+ ldh [hWhoseTurn], a
+ callfar TrainerAI
jr c, .AIActionUsedEnemyFirst
call ExecuteEnemyMove
ld a, [wEscapedFromBattle]
@@ -450,8 +450,8 @@
jp z, HandlePlayerMonFainted
call DrawHUDsAndHPBars
ld a, $1
- ld [hWhoseTurn], a
- callab TrainerAI
+ ldh [hWhoseTurn], a
+ callfar TrainerAI
jr c, .AIActionUsedPlayerFirst
call ExecuteEnemyMove
ld a, [wEscapedFromBattle]
@@ -470,7 +470,7 @@
HandlePoisonBurnLeechSeed:
ld hl, wBattleMonHP
ld de, wBattleMonStatus
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playersTurn
ld hl, wEnemyMonHP
@@ -495,7 +495,7 @@
call HandlePoisonBurnLeechSeed_DecreaseOwnHP
.notBurnedOrPoisoned
ld de, wPlayerBattleStatus2
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playersTurn2
ld de, wEnemyBattleStatus2
@@ -504,16 +504,16 @@
add a
jr nc, .notLeechSeeded
push hl
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
push af
xor $1
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
xor a
ld [wAnimationType], a
ld a, ABSORB
call PlayMoveAnimation ; play leech seed animation (from opposing mon)
pop af
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
pop hl
call HandlePoisonBurnLeechSeed_DecreaseOwnHP
call HandlePoisonBurnLeechSeed_IncreaseEnemyHP
@@ -571,7 +571,7 @@
.nonZeroDamage
ld hl, wPlayerBattleStatus3
ld de, wPlayerToxicCounter
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playersTurn
ld hl, wEnemyBattleStatus3
@@ -618,7 +618,7 @@
HandlePoisonBurnLeechSeed_IncreaseEnemyHP:
push hl
ld hl, wEnemyMonMaxHP
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playersTurn
ld hl, wBattleMonMaxHP
@@ -655,23 +655,23 @@
ld [hl], a
ld [wHPBarNewHP], a
.noOverfullHeal
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
xor $1
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
call UpdateCurMonHPBar
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
xor $1
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
pop hl
ret
UpdateCurMonHPBar:
- coord hl, 10, 9 ; tile pointer to player HP bar
- ld a, [hWhoseTurn]
+ hlcoord 10, 9 ; tile pointer to player HP bar
+ ldh a, [hWhoseTurn]
and a
ld a, $1
jr z, .playersTurn
- coord hl, 2, 2 ; tile pointer to enemy HP bar
+ hlcoord 2, 2 ; tile pointer to enemy HP bar
xor a
.playersTurn
push bc
@@ -767,10 +767,10 @@
ld hl, wPlayerUsedMove
ld [hli], a
ld [hl], a
- coord hl, 12, 5
- coord de, 12, 6
+ hlcoord 12, 5
+ decoord 12, 6
call SlideDownFaintedMonPic
- coord hl, 0, 0
+ hlcoord 0, 0
lb bc, 4, 11
call ClearScreenArea
ld a, [wIsInBattle]
@@ -837,7 +837,7 @@
.giveExpToMonsThatFought
xor a
ld [wBoostExpByExpAll], a
- callab GainExperience
+ callfar GainExperience
pop af
ret z ; return if no exp all
@@ -855,7 +855,7 @@
jr nz, .gainExpFlagsLoop
ld a, b
ld [wPartyGainExpFlags], a
- jpab GainExperience
+ jpfar GainExperience
EnemyMonFaintedText:
text_far _EnemyMonFaintedText
@@ -893,7 +893,7 @@
ld hl, wEnemyHPBarColor
ld e, $30
call GetBattleHealthBarColor
- callab DrawEnemyPokeballs
+ callfar DrawEnemyPokeballs
ld a, [wLinkState]
cp LINK_STATE_BATTLING
jr nz, .notLinkBattle
@@ -1021,11 +1021,11 @@
ld [hl], a
ld [wBattleMonStatus], a
call ReadPlayerMonCurHPAndStatus
- coord hl, 9, 7
+ hlcoord 9, 7
lb bc, 5, 11
call ClearScreenArea
- coord hl, 1, 10
- coord de, 1, 11
+ hlcoord 1, 10
+ decoord 1, 11
call SlideDownFaintedMonPic
ld a, $1
ld [wBattleResult], a
@@ -1059,7 +1059,7 @@
ld hl, UseNextMonText
call PrintText
.displayYesNoBox
- coord hl, 13, 9
+ hlcoord 13, 9
lb bc, 10, 14
ld a, TWO_OPTION_MENU
ld [wTextBoxID], a
@@ -1136,7 +1136,7 @@
ld a, [wCurOpponent]
cp OPP_SONY1
jr nz, .notSony1Battle
- coord hl, 0, 0 ; sony 1 battle
+ hlcoord 0, 0 ; sony 1 battle
lb bc, 8, 21
call ClearScreenArea
call ScrollTrainerPicAfterBattle
@@ -1232,7 +1232,7 @@
; if a is 8, the slide is to the right, else it is to the left
; bug: when this is called, [hAutoBGTransferEnabled] is non-zero, so there is screen tearing
SlideTrainerPicOffScreen:
- ld [hSlideAmount], a
+ ldh [hSlideAmount], a
ld c, a
.slideStepLoop ; each iteration, the trainer pic is slid one tile left/right
push bc
@@ -1240,10 +1240,10 @@
ld b, 7 ; number of rows
.rowLoop
push hl
- ld a, [hSlideAmount]
+ ldh a, [hSlideAmount]
ld c, a
.columnLoop
- ld a, [hSlideAmount]
+ ldh a, [hSlideAmount]
cp 8
jr z, .slideRight
.slideLeft ; slide player sprite off screen
@@ -1306,7 +1306,7 @@
ld [wAICount], a
ld hl, wPlayerBattleStatus1
res 5, [hl]
- coord hl, 18, 0
+ hlcoord 18, 0
ld a, 8
call SlideTrainerPicOffScreen
call PrintEmptyString
@@ -1376,7 +1376,7 @@
jr nz, .next4
ld hl, TrainerAboutToUseText
call PrintText
- coord hl, 0, 7
+ hlcoord 0, 7
lb bc, 8, 1
ld a, TWO_OPTION_MENU
ld [wTextBoxID], a
@@ -1411,7 +1411,7 @@
call LoadScreenTilesFromBuffer1
.next4
call ClearSprites
- coord hl, 0, 0
+ hlcoord 0, 0
lb bc, 4, 11
call ClearScreenArea
ld b, SET_PAL_BATTLE
@@ -1426,8 +1426,8 @@
ld de, vFrontPic
call LoadMonFrontSprite
ld a, -$31
- ld [hStartTileID], a
- coord hl, 15, 6
+ ldh [hStartTileID], a
+ hlcoord 15, 6
predef AnimateSendingOutMon
ld a, [wEnemyMonSpecies2]
call PlayCry
@@ -1508,14 +1508,14 @@
inc a
ld [wNumRunAttempts], a
ld a, [hli]
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
ld a, [hl]
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
ld a, [de]
- ld [hEnemySpeed], a
+ ldh [hEnemySpeed], a
inc de
ld a, [de]
- ld [hEnemySpeed + 1], a
+ ldh [hEnemySpeed + 1], a
call LoadScreenTilesFromBuffer1
ld de, hMultiplicand + 1
ld hl, hEnemySpeed
@@ -1523,17 +1523,17 @@
call StringCmp
jr nc, .canEscape ; jump if player speed greater than enemy speed
xor a
- ld [hMultiplicand], a
+ ldh [hMultiplicand], a
ld a, 32
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply ; multiply player speed by 32
- ld a, [hProduct + 2]
- ld [hDividend], a
- ld a, [hProduct + 3]
- ld [hDividend + 1], a
- ld a, [hEnemySpeed]
+ ldh a, [hProduct + 2]
+ ldh [hDividend], a
+ ldh a, [hProduct + 3]
+ ldh [hDividend + 1], a
+ ldh a, [hEnemySpeed]
ld b, a
- ld a, [hEnemySpeed + 1]
+ ldh a, [hEnemySpeed + 1]
; divide enemy speed by 4
srl b
rr a
@@ -1541,10 +1541,10 @@
rr a
and a
jr z, .canEscape ; jump if enemy speed divided by 4, mod 256 is 0
- ld [hDivisor], a ; ((enemy speed / 4) % 256)
+ ldh [hDivisor], a ; ((enemy speed / 4) % 256)
ld b, $2
call Divide ; divide (player speed * 32) by ((enemy speed / 4) % 256)
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
and a ; is the quotient greater than 256?
jr nz, .canEscape ; if so, the player can escape
ld a, [wNumRunAttempts]
@@ -1554,15 +1554,15 @@
dec c
jr z, .compareWithRandomValue
ld b, 30
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
add b
- ld [hQuotient + 3], a
+ ldh [hQuotient + 3], a
jr c, .canEscape
jr .loop
.compareWithRandomValue
call BattleRandom
ld b, a
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
cp b
jr nc, .canEscape ; if the random value was less than or equal to the quotient
; plus 30 times the number of attempts, the player can escape
@@ -1720,7 +1720,7 @@
ret
SendOutMon:
- callab PrintSendOutMonMessage
+ callfar PrintSendOutMonMessage
ld hl, wEnemyMonHP
ld a, [hli]
or [hl] ; is enemy mon HP zero?
@@ -1730,7 +1730,7 @@
call DrawPlayerHUDAndHPBar
predef LoadMonBackPic
xor a
- ld [hStartTileID], a
+ ldh [hStartTileID], a
ld hl, wBattleAndStartSavedMenuItem
ld [hli], a
ld [hl], a
@@ -1754,10 +1754,10 @@
ld hl, wEnemyBattleStatus1
res USING_TRAPPING_MOVE, [hl]
ld a, $1
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
ld a, POOF_ANIM
call PlayMoveAnimation
- coord hl, 4, 11
+ hlcoord 4, 11
predef AnimateSendingOutMon
ld a, [wcf91]
call PlayCry
@@ -1766,31 +1766,31 @@
; show 2 stages of the player mon getting smaller before disappearing
AnimateRetreatingPlayerMon:
- coord hl, 1, 5
+ hlcoord 1, 5
lb bc, 7, 7
call ClearScreenArea
- coord hl, 3, 7
+ hlcoord 3, 7
lb bc, 5, 5
xor a
ld [wDownscaledMonSize], a
- ld [hBaseTileID], a
+ ldh [hBaseTileID], a
predef CopyDownscaledMonTiles
ld c, 4
call DelayFrames
call .clearScreenArea
- coord hl, 4, 9
+ hlcoord 4, 9
lb bc, 3, 3
ld a, 1
ld [wDownscaledMonSize], a
xor a
- ld [hBaseTileID], a
+ ldh [hBaseTileID], a
predef CopyDownscaledMonTiles
call Delay3
call .clearScreenArea
ld a, $4c
- Coorda 5, 11
+ ldcoord_a 5, 11
.clearScreenArea
- coord hl, 1, 5
+ hlcoord 1, 5
lb bc, 7, 7
jp ClearScreenArea
@@ -1812,15 +1812,15 @@
DrawPlayerHUDAndHPBar:
xor a
- ld [hAutoBGTransferEnabled], a
- coord hl, 9, 7
+ ldh [hAutoBGTransferEnabled], a
+ hlcoord 9, 7
lb bc, 5, 11
call ClearScreenArea
- callab PlacePlayerHUDTiles
- coord hl, 18, 9
+ callfar PlacePlayerHUDTiles
+ hlcoord 18, 9
ld [hl], $73
ld de, wBattleMonNick
- coord hl, 10, 7
+ hlcoord 10, 7
call CenterMonName
call PlaceString
ld hl, wBattleMonSpecies
@@ -1831,7 +1831,7 @@
ld de, wLoadedMonLevel
ld bc, wBattleMonPP - wBattleMonLevel
call CopyData
- coord hl, 14, 8
+ hlcoord 14, 8
push hl
inc hl
ld de, wLoadedMonStatus
@@ -1842,10 +1842,10 @@
.doNotPrintLevel
ld a, [wLoadedMonSpecies]
ld [wcf91], a
- coord hl, 10, 9
+ hlcoord 10, 9
predef DrawHP
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld hl, wPlayerHPBarColor
call GetBattleHealthBarColor
ld hl, wBattleMonHP
@@ -1873,16 +1873,16 @@
DrawEnemyHUDAndHPBar:
xor a
- ld [hAutoBGTransferEnabled], a
- coord hl, 0, 0
+ ldh [hAutoBGTransferEnabled], a
+ hlcoord 0, 0
lb bc, 4, 12
call ClearScreenArea
- callab PlaceEnemyHUDTiles
+ callfar PlaceEnemyHUDTiles
ld de, wEnemyMonNick
- coord hl, 1, 0
+ hlcoord 1, 0
call CenterMonName
call PlaceString
- coord hl, 4, 1
+ hlcoord 4, 1
push hl
inc hl
ld de, wEnemyMonStatus
@@ -1895,9 +1895,9 @@
.skipPrintLevel
ld hl, wEnemyMonHP
ld a, [hli]
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
ld a, [hld]
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
or [hl] ; is current HP zero?
jr nz, .hpNonzero
; current HP is 0
@@ -1908,45 +1908,45 @@
jp .drawHPBar
.hpNonzero
xor a
- ld [hMultiplicand], a
+ ldh [hMultiplicand], a
ld a, 48
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply ; multiply current HP by 48
ld hl, wEnemyMonMaxHP
ld a, [hli]
ld b, a
ld a, [hl]
- ld [hDivisor], a
+ ldh [hDivisor], a
ld a, b
and a ; is max HP > 255?
jr z, .doDivide
; if max HP > 255, scale both (current HP * 48) and max HP by dividing by 4 so that max HP fits in one byte
; (it needs to be one byte so it can be used as the divisor for the Divide function)
- ld a, [hDivisor]
+ ldh a, [hDivisor]
srl b
rr a
srl b
rr a
- ld [hDivisor], a
- ld a, [hProduct + 2]
+ ldh [hDivisor], a
+ ldh a, [hProduct + 2]
ld b, a
srl b
- ld a, [hProduct + 3]
+ ldh a, [hProduct + 3]
rr a
srl b
rr a
- ld [hProduct + 3], a
+ ldh [hProduct + 3], a
ld a, b
- ld [hProduct + 2], a
+ ldh [hProduct + 2], a
.doDivide
- ld a, [hProduct + 2]
- ld [hDividend], a
- ld a, [hProduct + 3]
- ld [hDividend + 1], a
+ ldh a, [hProduct + 2]
+ ldh [hDividend], a
+ ldh a, [hProduct + 3]
+ ldh [hDividend + 1], a
ld a, $2
ld b, a
call Divide ; divide (current HP * 48) by max HP
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
; set variables for DrawHPBar
ld e, a
ld a, $6
@@ -1955,10 +1955,10 @@
.drawHPBar
xor a
ld [wHPBarType], a
- coord hl, 2, 2
+ hlcoord 2, 2
call DrawHPBar
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld hl, wEnemyHPBarColor
GetBattleHealthBarColor:
@@ -2030,12 +2030,12 @@
ld bc, NAME_LENGTH
call CopyData
; the following simulates the keystrokes by drawing menus on screen
- coord hl, 9, 14
+ hlcoord 9, 14
ld [hl], "▶"
ld c, 80
call DelayFrames
ld [hl], " "
- coord hl, 9, 16
+ hlcoord 9, 16
ld [hl], "▶"
ld c, 50
call DelayFrames
@@ -2060,14 +2060,14 @@
ld a, " "
jr z, .safariLeftColumn
; put cursor in left column for normal battle menu (i.e. when it's not a Safari battle)
- Coorda 15, 14 ; clear upper cursor position in right column
- Coorda 15, 16 ; clear lower cursor position in right column
+ ldcoord_a 15, 14 ; clear upper cursor position in right column
+ ldcoord_a 15, 16 ; clear lower cursor position in right column
ld b, $9 ; top menu item X
jr .leftColumn_WaitForInput
.safariLeftColumn
- Coorda 13, 14
- Coorda 13, 16
- coord hl, 7, 14
+ ldcoord_a 13, 14
+ ldcoord_a 13, 16
+ hlcoord 7, 14
ld de, wNumSafariBalls
lb bc, 1, 2
call PrintNumber
@@ -2093,14 +2093,14 @@
ld a, " "
jr z, .safariRightColumn
; put cursor in right column for normal battle menu (i.e. when it's not a Safari battle)
- Coorda 9, 14 ; clear upper cursor position in left column
- Coorda 9, 16 ; clear lower cursor position in left column
+ ldcoord_a 9, 14 ; clear upper cursor position in left column
+ ldcoord_a 9, 16 ; clear lower cursor position in left column
ld b, $f ; top menu item X
jr .rightColumn_WaitForInput
.safariRightColumn
- Coorda 1, 14 ; clear upper cursor position in left column
- Coorda 1, 16 ; clear lower cursor position in left column
- coord hl, 7, 14
+ ldcoord_a 1, 14 ; clear upper cursor position in left column
+ ldcoord_a 1, 16 ; clear lower cursor position in left column
+ hlcoord 7, 14
ld de, wNumSafariBalls
lb bc, 1, 2
call PrintNumber
@@ -2321,7 +2321,7 @@
call GBPalNormal
jp DisplayBattleMenu
.partyMonDeselected
- coord hl, 11, 11
+ hlcoord 11, 11
ld bc, 6 * SCREEN_WIDTH + 9
ld a, " "
call FillMemory
@@ -2411,7 +2411,7 @@
; fall through to SwitchPlayerMon
SwitchPlayerMon:
- callab RetreatMon
+ callfar RetreatMon
ld c, 50
call DelayFrames
call AnimateRetreatingPlayerMon
@@ -2464,18 +2464,18 @@
ld de, wMoves
ld bc, NUM_MOVES
call CopyData
- callab FormatMovesString
+ callfar FormatMovesString
ret
.writemoves
ld de, wMovesString
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
set 2, a
- ld [hFlagsFFF6], a
+ ldh [hFlagsFFF6], a
call PlaceString
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
res 2, a
- ld [hFlagsFFF6], a
+ ldh [hFlagsFFF6], a
ret
.regularmenu
@@ -2483,18 +2483,18 @@
ret z
ld hl, wBattleMonMoves
call .loadmoves
- coord hl, 4, 12
+ hlcoord 4, 12
ld b, 4
ld c, 14
di ; out of pure coincidence, it is possible for vblank to occur between the di and ei
; so it is necessary to put the di ei block to not cause tearing
call TextBoxBorder
- coord hl, 4, 12
+ hlcoord 4, 12
ld [hl], $7a
- coord hl, 10, 12
+ hlcoord 10, 12
ld [hl], $7e
ei
- coord hl, 6, 13
+ hlcoord 6, 13
call .writemoves
ld b, $5
ld a, $c
@@ -2502,11 +2502,11 @@
.mimicmenu
ld hl, wEnemyMonMoves
call .loadmoves
- coord hl, 0, 7
+ hlcoord 0, 7
ld b, 4
ld c, 14
call TextBoxBorder
- coord hl, 2, 8
+ hlcoord 2, 8
call .writemoves
ld b, $1
ld a, $7
@@ -2517,11 +2517,11 @@
ld bc, wPartyMon2 - wPartyMon1
call AddNTimes
call .loadmoves
- coord hl, 4, 7
+ hlcoord 4, 7
ld b, 4
ld c, 14
call TextBoxBorder
- coord hl, 6, 8
+ hlcoord 6, 8
call .writemoves
ld b, $5
ld a, $7
@@ -2577,7 +2577,7 @@
jr z, .battleselect
dec a
jr nz, .select
- coord hl, 1, 14
+ hlcoord 1, 14
ld de, WhichTechniqueString
call PlaceString
jr .select
@@ -2589,7 +2589,7 @@
ld a, [wMenuItemToSwap]
and a
jr z, .select
- coord hl, 5, 13
+ hlcoord 5, 13
dec a
ld bc, SCREEN_WIDTH
call AddNTimes
@@ -2825,8 +2825,8 @@
PrintMenuItem:
xor a
- ld [hAutoBGTransferEnabled], a
- coord hl, 0, 8
+ ldh [hAutoBGTransferEnabled], a
+ hlcoord 0, 8
ld b, 3
ld c, 9
call TextBoxBorder
@@ -2839,7 +2839,7 @@
ld a, [wCurrentMenuItem]
cp b
jr nz, .notDisabled
- coord hl, 1, 10
+ hlcoord 1, 10
ld de, DisabledText
call PlaceString
jr .moveDisabled
@@ -2847,7 +2847,7 @@
ld hl, wCurrentMenuItem
dec [hl]
xor a
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
ld hl, wBattleMonMoves
ld a, [wCurrentMenuItem]
ld c, a
@@ -2860,7 +2860,7 @@
ld [wWhichPokemon], a
ld a, BATTLE_MON_DATA
ld [wMonDataLocation], a
- callab GetMaxPP
+ callfar GetMaxPP
ld hl, wCurrentMenuItem
ld c, [hl]
inc [hl]
@@ -2871,27 +2871,27 @@
and $3f
ld [wcd6d], a
; print TYPE/<type> and <curPP>/<maxPP>
- coord hl, 1, 9
+ hlcoord 1, 9
ld de, TypeText
call PlaceString
- coord hl, 7, 11
+ hlcoord 7, 11
ld [hl], "/"
- coord hl, 5, 9
+ hlcoord 5, 9
ld [hl], "/"
- coord hl, 5, 11
+ hlcoord 5, 11
ld de, wcd6d
lb bc, 1, 2
call PrintNumber
- coord hl, 8, 11
+ hlcoord 8, 11
ld de, wMaxPP
lb bc, 1, 2
call PrintNumber
call GetCurrentMove
- coord hl, 2, 10
+ hlcoord 2, 10
predef PrintMoveType
.moveDisabled
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
jp Delay3
DisabledText:
@@ -2955,7 +2955,7 @@
ld a, [wIsInBattle]
dec a
jr z, .chooseRandomMove ; wild encounter
- callab AIEnemyTrainerChooseMoves
+ callfar AIEnemyTrainerChooseMoves
.chooseRandomMove
push hl
call BattleRandom
@@ -3020,7 +3020,7 @@
ld a, b
.doExchange
ld [wSerialExchangeNybbleSendData], a
- callab PrintWaitingText
+ callfar PrintWaitingText
.syncLoop1
call Serial_ExchangeNybble
call DelayFrame
@@ -3043,7 +3043,7 @@
ExecutePlayerMove:
xor a
- ld [hWhoseTurn], a ; set player's turn
+ ldh [hWhoseTurn], a ; set player's turn
ld a, [wPlayerSelectedMove]
inc a
jp z, ExecutePlayerMoveDone ; for selected move = FF, skip most of player's turn
@@ -3196,7 +3196,7 @@
.moveDidNotMiss
call ApplyAttackToEnemyPokemon
call PrintCriticalOHKOText
- callab DisplayEffectiveness
+ callfar DisplayEffectiveness
ld a, 1
ld [wMoveDidntMiss], a
.notDone
@@ -3252,10 +3252,10 @@
; print the ghost battle messages
call IsGhostBattle
ret nz
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr nz, .Ghost
- ld a, [wBattleMonStatus] ; player’s turn
+ ld a, [wBattleMonStatus] ; player's turn
and SLP | (1 << FRZ)
ret nz
ld hl, ScaredText
@@ -3262,7 +3262,7 @@
call PrintText
xor a
ret
-.Ghost ; ghost’s turn
+.Ghost ; ghost's turn
ld hl, GetOutText
call PrintText
xor a
@@ -3619,7 +3619,7 @@
PrintMoveIsDisabledText:
ld hl, wPlayerSelectedMove
ld de, wPlayerBattleStatus1
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .removeChargingUp
inc hl
@@ -3675,11 +3675,11 @@
xor a
ld [wAnimationType], a
inc a
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
call PlayMoveAnimation
call DrawPlayerHUDAndHPBar
xor a
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
jp ApplyDamageToPlayerPokemon
PrintMonName1Text:
@@ -3694,7 +3694,7 @@
MonName1Text:
text_far _MonName1Text
text_asm
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wPlayerMoveNum]
ld hl, wPlayerUsedMove
@@ -3818,7 +3818,7 @@
PrintMoveFailureText:
ld de, wPlayerMoveEffect
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playersTurn
ld de, wEnemyMoveEffect
@@ -3866,7 +3866,7 @@
call PrintText
ld b, $4
predef PredefShakeScreenHorizontally
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr nz, .enemyTurn
jp ApplyDamageToPlayerPokemon
@@ -4160,9 +4160,9 @@
; in the case of a critical hit, reset the player's attack and the enemy's defense to their base values
ld c, 3 ; defense stat
call GetEnemyMonStat
- ld a, [hProduct + 2]
+ ldh a, [hProduct + 2]
ld b, a
- ld a, [hProduct + 3]
+ ldh a, [hProduct + 3]
ld c, a
push bc
ld hl, wPartyMon1Attack
@@ -4182,8 +4182,8 @@
; if the enemy has used Light Screen, double the enemy's special
sla c
rl b
-; reflect and light screen boosts do not cap the stat at 999, so weird things will happen during stats scaling if
-; a Pokemon with 512 or more Defense has used Reflect, or if a Pokemon with 512 or more Special has used Light Screen
+; reflect and light screen boosts do not cap the stat at MAX_STAT_VALUE, so weird things will happen during stats scaling
+; if a Pokemon with 512 or more Defense has used Reflect, or if a Pokemon with 512 or more Special has used Light Screen
.specialAttackCritCheck
ld hl, wBattleMonSpecial
ld a, [wCriticalHitOrOHKO]
@@ -4192,9 +4192,9 @@
; in the case of a critical hit, reset the player's and enemy's specials to their base values
ld c, 5 ; special stat
call GetEnemyMonStat
- ld a, [hProduct + 2]
+ ldh a, [hProduct + 2]
ld b, a
- ld a, [hProduct + 3]
+ ldh a, [hProduct + 3]
ld c, a
push bc
ld hl, wPartyMon1Special
@@ -4295,8 +4295,8 @@
; if the player has used Light Screen, double the player's special
sla c
rl b
-; reflect and light screen boosts do not cap the stat at 999, so weird things will happen during stats scaling if
-; a Pokemon with 512 or more Defense has used Reflect, or if a Pokemon with 512 or more Special has used Light Screen
+; reflect and light screen boosts do not cap the stat at MAX_STAT_VALUE, so weird things will happen during stats scaling
+; if a Pokemon with 512 or more Defense has used Reflect, or if a Pokemon with 512 or more Special has used Light Screen
.specialAttackCritCheck
ld hl, wEnemyMonSpecial
ld a, [wCriticalHitOrOHKO]
@@ -4371,9 +4371,9 @@
ld bc, wEnemyMon2 - wEnemyMon1
call AddNTimes
ld a, [hli]
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
ld a, [hl]
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
pop bc
pop de
ret
@@ -4404,7 +4404,7 @@
; d: base power
; e: level
- ld a, [hWhoseTurn] ; whose turn?
+ ldh a, [hWhoseTurn] ; whose turn?
and a
ld a, [wPlayerMoveEffect]
jr z, .effect
@@ -4489,44 +4489,44 @@
; Capped at MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE: 999 - 2 = 997.
ld hl, wDamage
ld b, [hl]
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
add b
- ld [hQuotient + 3], a
+ ldh [hQuotient + 3], a
jr nc, .dont_cap_1
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
inc a
- ld [hQuotient + 2], a
+ ldh [hQuotient + 2], a
and a
jr z, .cap
.dont_cap_1
- ld a, [hQuotient]
+ ldh a, [hQuotient]
ld b, a
- ld a, [hQuotient + 1]
+ ldh a, [hQuotient + 1]
or a
jr nz, .cap
- ld a, [hQuotient + 2]
- cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100
+ ldh a, [hQuotient + 2]
+ cp HIGH(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1)
jr c, .dont_cap_2
- cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100 + 1
+ cp HIGH(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) + 1
jr nc, .cap
- ld a, [hQuotient + 3]
- cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) % $100
+ ldh a, [hQuotient + 3]
+ cp LOW(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1)
jr nc, .cap
.dont_cap_2
inc hl
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
ld b, [hl]
add b
ld [hld], a
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
ld b, [hl]
adc b
ld [hl], a
@@ -4533,21 +4533,21 @@
jr c, .cap
ld a, [hl]
- cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100
+ cp HIGH(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1)
jr c, .dont_cap_3
- cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) / $100 + 1
+ cp HIGH(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) + 1
jr nc, .cap
inc hl
ld a, [hld]
- cp (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1) % $100
+ cp LOW(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE + 1)
jr c, .dont_cap_3
.cap
- ld a, (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE) / $100
+ ld a, HIGH(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE)
ld [hli], a
- ld a, (MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE) % $100
+ ld a, LOW(MAX_NEUTRAL_DAMAGE - MIN_NEUTRAL_DAMAGE)
ld [hld], a
.dont_cap_3
@@ -4579,7 +4579,7 @@
CriticalHitTest:
xor a
ld [wCriticalHitOrOHKO], a
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wEnemyMonSpecies]
jr nz, .handleEnemy
@@ -4590,7 +4590,7 @@
ld a, [wMonHBaseSpeed]
ld b, a
srl b ; (effective (base speed/2))
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld hl, wPlayerMovePower
ld de, wPlayerBattleStatus2
@@ -4652,7 +4652,7 @@
; the outcome may be affected by the player's actions in the move selection menu prior to switching the Pokemon.
; This might also lead to desync glitches in link battles.
- ld a, [hWhoseTurn] ; whose turn
+ ldh a, [hWhoseTurn] ; whose turn
and a
; player's turn
ld hl, wEnemySelectedMove
@@ -4822,7 +4822,7 @@
ld [wHPBarNewHP+1], a
ld a, [hl]
ld [wHPBarNewHP], a
- coord hl, 2, 2
+ hlcoord 2, 2
xor a
ld [wHPBarType], a
predef UpdateHPBar2 ; animate the HP bar shortening
@@ -4940,7 +4940,7 @@
ld [wHPBarMaxHP+1], a
ld a, [hl]
ld [wHPBarMaxHP], a
- coord hl, 10, 9
+ hlcoord 10, 9
ld a, $01
ld [wHPBarType], a
predef UpdateHPBar2 ; animate the HP bar shortening
@@ -4960,7 +4960,7 @@
; values for player turn
ld de, wEnemySubstituteHP
ld bc, wEnemyBattleStatus2
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .applyDamageToSubstitute
; values for enemy turn
@@ -4985,14 +4985,14 @@
ld hl, SubstituteBrokeText
call PrintText
; flip whose turn it is for the next function call
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
xor $01
- ld [hWhoseTurn], a
- callab HideSubstituteShowMonAnim ; animate the substitute breaking
+ ldh [hWhoseTurn], a
+ callfar HideSubstituteShowMonAnim ; animate the substitute breaking
; flip the turn back to the way it was
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
xor $01
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
ld hl, wPlayerMoveEffect ; value for player's turn
and a
jr z, .nullifyEffect
@@ -5016,7 +5016,7 @@
ld hl, wEnemyBattleStatus2
ld de, wEnemyMonStatMods
ld bc, wEnemyMoveNum
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .next
; values for the enemy turn
@@ -5029,9 +5029,9 @@
ld a, [de]
cp $0d ; maximum stat modifier value
ret z ; return if attack modifier is already maxed
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
xor $01 ; flip turn for the stat modifier raising function
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
; temporarily change the target pokemon's move to $00 and the effect to the one
; that causes the attack modifier to go up one stage
ld h, b
@@ -5048,9 +5048,9 @@
ldd [hl], a ; null move effect
ld a, RAGE
ld [hl], a ; restore the target pokemon's move number to Rage
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
xor $01 ; flip turn back to the way it was
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
ret
BuildingRageText:
@@ -5066,7 +5066,7 @@
; wPlayerUsedMove is also set to 0 whenever the player is fast asleep or frozen solid.
; wEnemyUsedMove is also set to 0 whenever the enemy is fast asleep or frozen solid.
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
; values for player turn
ld a, [wEnemyUsedMove]
@@ -5119,7 +5119,7 @@
; values for player turn
ld de, wPlayerMoveNum
ld hl, wPlayerSelectedMove
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .pickMoveLoop
; values for enemy turn
@@ -5141,7 +5141,7 @@
; it's used to prevent moves that run another move within the same turn
; (like Mirror Move and Metronome) from losing 2 PP
IncrementMovePP:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
; values for player turn
ld hl, wBattleMonPP
@@ -5160,7 +5160,7 @@
ld h, d
ld l, e
add hl, bc
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wPlayerMonNumber] ; value for player turn
jr z, .updatePP
@@ -5184,7 +5184,7 @@
ld e, [hl] ; e = type 2 of defender
ld a, [wPlayerMoveType]
ld [wMoveType], a
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .next
; values for enemy turn
@@ -5248,25 +5248,25 @@
and $80
ld b, a
ld a, [hl] ; a = damage multiplier
- ld [hMultiplier], a
+ ldh [hMultiplier], a
add b
ld [wDamageMultipliers], a
xor a
- ld [hMultiplicand], a
+ ldh [hMultiplicand], a
ld hl, wDamage
ld a, [hli]
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
ld a, [hld]
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
call Multiply
ld a, 10
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, $04
call Divide
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
ld [hli], a
ld b, a
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
ld [hl], a
or b ; is damage 0?
jr nz, .skipTypeImmunity
@@ -5331,7 +5331,7 @@
ld hl, wEnemyBattleStatus1
ld de, wPlayerMoveEffect
ld bc, wEnemyMonStatus
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .dreamEaterCheck
; enemy's turn
@@ -5360,7 +5360,7 @@
.checkForDigOrFlyStatus
bit INVULNERABLE, [hl]
jp nz, .moveMissed
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr nz, .enemyTurn
.playerTurn
@@ -5414,7 +5414,7 @@
call CalcHitChance ; scale the move accuracy according to attacker's accuracy and target's evasion
ld a, [wPlayerMoveAccuracy]
ld b, a
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .doAccuracyCheck
ld a, [wEnemyMoveAccuracy]
@@ -5433,7 +5433,7 @@
ld [hl], a
inc a
ld [wMoveMissed], a
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playerTurn2
.enemyTurn2
@@ -5448,7 +5448,7 @@
; values for player turn
CalcHitChance:
ld hl, wPlayerMoveAccuracy
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wPlayerMonAccuracyMod]
ld b, a
@@ -5468,10 +5468,10 @@
; decreases the hit chance instead of increasing the hit chance)
; zero the high bytes of the multiplicand
xor a
- ld [hMultiplicand], a
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand], a
+ ldh [hMultiplicand + 1], a
ld a, [hl]
- ld [hMultiplicand + 2], a ; set multiplicand to move accuracy
+ ldh [hMultiplicand + 2], a ; set multiplicand to move accuracy
push hl
ld d, $02 ; loop has two iterations
; loop to do the calculations, the first iteration multiplies by the accuracy ratio and
@@ -5486,29 +5486,29 @@
add hl, bc ; hl = address of stat modifier ratio
pop bc
ld a, [hli]
- ld [hMultiplier], a ; set multiplier to the numerator of the ratio
+ ldh [hMultiplier], a ; set multiplier to the numerator of the ratio
call Multiply
ld a, [hl]
- ld [hDivisor], a ; set divisor to the the denominator of the ratio
+ ldh [hDivisor], a ; set divisor to the the denominator of the ratio
; (the dividend is the product of the previous multiplication)
ld b, $04 ; number of bytes in the dividend
call Divide
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
ld b, a
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
or b
jp nz, .nextCalculation
; make sure the result is always at least one
- ld [hQuotient + 2], a
+ ldh [hQuotient + 2], a
ld a, $01
- ld [hQuotient + 3], a
+ ldh [hQuotient + 3], a
.nextCalculation
ld b, c
dec d
jr nz, .loop
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
and a ; is the calculated hit chance over 0xFF?
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
jr z, .storeAccuracy
; if calculated hit chance over 0xFF
ld a, $ff ; set the hit chance to 0xFF
@@ -5528,12 +5528,12 @@
ret c ; return if damage is equal to 0 or 1
.DamageGreaterThanOne
xor a
- ld [hMultiplicand], a
+ ldh [hMultiplicand], a
dec hl
ld a, [hli]
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
ld a, [hl]
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
; loop until a random number greater than or equal to 217 is generated
.loop
call BattleRandom
@@ -5540,17 +5540,17 @@
rrca
cp 217
jr c, .loop
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply ; multiply damage by the random number, which is in the range [217, 255]
ld a, 255
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, $4
call Divide ; divide the result by 255
; store the modified damage
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
ld hl, wDamage
ld [hli], a
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
ld [hl], a
ret
@@ -5726,7 +5726,7 @@
.moveDidNotMiss
call ApplyAttackToPlayerPokemon
call PrintCriticalOHKOText
- callab DisplayEffectiveness
+ callfar DisplayEffectiveness
ld a, 1
ld [wMoveDidntMiss], a
.handleExplosionMiss
@@ -5906,11 +5906,11 @@
ld [hl], a
xor a
ld [wAnimationType], a
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
ld a, POUND
call PlayMoveAnimation
ld a, $1
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
call ApplyDamageToEnemyPokemon
jr .monHurtItselfOrFullyParalysed
.checkIfTriedToUseDisabledMove
@@ -6057,7 +6057,7 @@
ret
GetCurrentMove:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jp z, .player
ld de, wEnemyMoveNum
@@ -6254,7 +6254,7 @@
; link battle
xor a
ld [wMenuJoypadPollCount], a
- callab DisplayLinkBattleVersusTextBox
+ callfar DisplayLinkBattleVersusTextBox
ld a, $1
ld [wUpdateSpritesEnabled], a
call ClearScreen
@@ -6261,18 +6261,18 @@
.next
call DelayFrame
predef BattleTransition
- callab LoadHudAndHpBarAndStatusTilePatterns
+ callfar LoadHudAndHpBarAndStatusTilePatterns
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld a, $ff
ld [wUpdateSpritesEnabled], a
call ClearSprites
call ClearScreen
xor a
- ld [hAutoBGTransferEnabled], a
- ld [hWY], a
- ld [rWY], a
- ld [hTilesetType], a
+ ldh [hAutoBGTransferEnabled], a
+ ldh [hWY], a
+ ldh [rWY], a
+ ldh [hTilesetType], a
ld hl, wPlayerStatsToDouble
ld [hli], a
ld [hli], a
@@ -6309,7 +6309,7 @@
predef ScaleSpriteByTwo
ld hl, wOAMBuffer
xor a
- ld [hOAMTile], a ; initial tile number
+ ldh [hOAMTile], a ; initial tile number
ld b, $7 ; 7 columns
ld e, $a0 ; X for the left-most column
.loop ; each loop iteration writes 3 OAM entries in a vertical column
@@ -6323,16 +6323,16 @@
add d ; increase Y by height of tile
ld d, a
inc hl
- ld a, [hOAMTile]
+ ldh a, [hOAMTile]
ld [hli], a ; OAM tile number
inc a ; increment tile number
- ld [hOAMTile], a
+ ldh [hOAMTile], a
inc hl
dec c
jr nz, .innerLoop
- ld a, [hOAMTile]
+ ldh a, [hOAMTile]
add $4 ; increase tile number by 4
- ld [hOAMTile], a
+ ldh [hOAMTile], a
ld a, $8 ; width of tile
add e ; increase X by width of tile
ld e, a
@@ -6346,7 +6346,7 @@
ld [MBC1SRamBank], a
ld hl, vSprites
ld de, sSpriteBuffer1
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
ld b, a
ld c, 7 * 7
call CopyVideoData
@@ -6353,17 +6353,17 @@
xor a
ld [MBC1SRamEnable], a
ld a, $31
- ld [hStartTileID], a
- coord hl, 1, 5
+ ldh [hStartTileID], a
+ hlcoord 1, 5
predef_jump CopyUncompressedPicToTilemap
; does nothing since no stats are ever selected (barring glitches)
DoubleOrHalveSelectedStats:
- callab DoubleSelectedStats
- jpab HalveSelectedStats
+ callfar DoubleSelectedStats
+ jpfar HalveSelectedStats
ScrollTrainerPicAfterBattle:
- jpab _ScrollTrainerPicAfterBattle
+ jpfar _ScrollTrainerPicAfterBattle
ApplyBurnAndParalysisPenaltiesToPlayer:
ld a, $1
@@ -6373,12 +6373,12 @@
xor a
ApplyBurnAndParalysisPenalties:
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
call QuarterSpeedDueToParalysis
jp HalveAttackDueToBurn
QuarterSpeedDueToParalysis:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playerTurn
.enemyTurn ; quarter the player's speed
@@ -6421,7 +6421,7 @@
ret
HalveAttackDueToBurn:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playerTurn
.enemyTurn ; halve the player's attack
@@ -6511,35 +6511,35 @@
ld b, 0
add hl, bc
xor a
- ld [hMultiplicand], a
+ ldh [hMultiplicand], a
ld a, [de]
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
inc de
ld a, [de]
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
ld a, [hli]
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
ld a, [hl]
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, $4
call Divide
pop hl
- ld a, [hDividend + 3]
- sub 999 % $100
- ld a, [hDividend + 2]
- sbc 999 / $100
+ ldh a, [hDividend + 3]
+ sub LOW(MAX_STAT_VALUE)
+ ldh a, [hDividend + 2]
+ sbc HIGH(MAX_STAT_VALUE)
jp c, .storeNewStatValue
-; cap the stat at 999
- ld a, 999 / $100
- ld [hDividend + 2], a
- ld a, 999 % $100
- ld [hDividend + 3], a
+; cap the stat at MAX_STAT_VALUE (999)
+ ld a, HIGH(MAX_STAT_VALUE)
+ ldh [hDividend + 2], a
+ ld a, LOW(MAX_STAT_VALUE)
+ ldh [hDividend + 3], a
.storeNewStatValue
- ld a, [hDividend + 2]
+ ldh a, [hDividend + 2]
ld [hli], a
ld b, a
- ld a, [hDividend + 3]
+ ldh a, [hDividend + 3]
ld [hl], a
or b
jr nz, .done
@@ -6573,7 +6573,7 @@
ret
; multiply stat at hl by 1.125
-; cap stat at 999
+; cap stat at MAX_STAT_VALUE
.applyBoostToStat
ld a, [hli]
ld d, a
@@ -6591,13 +6591,13 @@
adc d
ld [hli], a
ld a, [hld]
- sub 999 % $100
+ sub LOW(MAX_STAT_VALUE)
ld a, [hl]
- sbc 999 / $100
+ sbc HIGH(MAX_STAT_VALUE)
ret c
- ld a, 999 / $100
+ ld a, HIGH(MAX_STAT_VALUE)
ld [hli], a
- ld a, 999 % $100
+ ld a, LOW(MAX_STAT_VALUE)
ld [hld], a
ret
@@ -6605,27 +6605,27 @@
call LoadHpBarAndStatusTilePatterns
LoadHudTilePatterns:
- ld a, [rLCDC]
+ ldh a, [rLCDC]
add a ; is LCD disabled?
jr c, .lcdEnabled
.lcdDisabled
ld hl, BattleHudTiles1
- ld de, vChars2 + $6d0
+ ld de, vChars2 tile $6d
ld bc, BattleHudTiles1End - BattleHudTiles1
ld a, BANK(BattleHudTiles1)
call FarCopyDataDouble
ld hl, BattleHudTiles2
- ld de, vChars2 + $730
+ ld de, vChars2 tile $73
ld bc, BattleHudTiles3End - BattleHudTiles2
ld a, BANK(BattleHudTiles2)
jp FarCopyDataDouble
.lcdEnabled
ld de, BattleHudTiles1
- ld hl, vChars2 + $6d0
+ ld hl, vChars2 tile $6d
lb bc, BANK(BattleHudTiles1), (BattleHudTiles1End - BattleHudTiles1) / $8
call CopyVideoDataDouble
ld de, BattleHudTiles2
- ld hl, vChars2 + $730
+ ld hl, vChars2 tile $73
lb bc, BANK(BattleHudTiles2), (BattleHudTiles3End - BattleHudTiles2) / $8
jp CopyVideoDataDouble
@@ -6690,7 +6690,7 @@
HandleExplodingAnimation:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld hl, wEnemyMonType1
ld de, wEnemyBattleStatus1
@@ -6740,7 +6740,7 @@
ld a, [wd732]
bit 1, a
jr z, .asm_3ef2f
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
bit 1, a ; B button pressed?
ret nz
.asm_3ef2f
@@ -6747,7 +6747,7 @@
ld a, [wNumberOfNoRandomBattleStepsLeft]
and a
ret nz
- callab TryDoWildEncounter
+ callfar TryDoWildEncounter
ret nz
InitBattleCommon:
ld a, [wMapPalOffset]
@@ -6756,21 +6756,21 @@
ld a, [hl]
push af
res 1, [hl]
- callab InitBattleVariables
+ callfar InitBattleVariables
ld a, [wEnemyMonSpecies2]
sub OPP_ID_OFFSET
jp c, InitWildBattle
ld [wTrainerClass], a
call GetTrainerInformation
- callab ReadTrainer
+ callfar ReadTrainer
call DoBattleTransitionAndInitBattleVariables
call _LoadTrainerPic
xor a
ld [wEnemyMonSpecies2], a
- ld [hStartTileID], a
+ ldh [hStartTileID], a
dec a
ld [wAICount], a
- coord hl, 12, 0
+ hlcoord 12, 0
predef CopyUncompressedPicToTilemap
ld a, $ff
ld [wEnemyMonPartyPos], a
@@ -6823,8 +6823,8 @@
.spriteLoaded
xor a
ld [wTrainerClass], a
- ld [hStartTileID], a
- coord hl, 12, 0
+ ldh [hStartTileID], a
+ hlcoord 12, 0
predef CopyUncompressedPicToTilemap
; common code that executes after init battle code specific to trainer or wild battles
@@ -6833,23 +6833,23 @@
call RunPaletteCommand
call SlidePlayerAndEnemySilhouettesOnScreen
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld hl, .emptyString
call PrintText
call SaveScreenTilesToBuffer1
call ClearScreen
ld a, $98
- ld [hAutoBGTransferDest + 1], a
+ ldh [hAutoBGTransferDest + 1], a
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
ld a, $9c
- ld [hAutoBGTransferDest + 1], a
+ ldh [hAutoBGTransferDest + 1], a
call LoadScreenTilesFromBuffer1
- coord hl, 9, 7
+ hlcoord 9, 7
lb bc, 5, 10
call ClearScreenArea
- coord hl, 1, 0
+ hlcoord 1, 0
lb bc, 4, 10
call ClearScreenArea
call ClearSprites
@@ -6857,13 +6857,13 @@
dec a ; is it a wild battle?
call z, DrawEnemyHUDAndHPBar ; draw enemy HUD and HP bar if it's a wild battle
call StartBattle
- callab EndOfBattle
+ callfar EndOfBattle
pop af
ld [wLetterPrintingDelayFlags], a
pop af
ld [wMapPalOffset], a
ld a, [wSavedTilesetType]
- ld [hTilesetType], a
+ ldh [hTilesetType], a
scf
ret
.emptyString
@@ -6900,8 +6900,8 @@
ld h, a
ld a, [wPredefRegisters + 1]
ld l, a
- ld a, [hStartTileID]
- ld [hBaseTileID], a
+ ldh a, [hStartTileID]
+ ldh [hBaseTileID], a
ld b, $4c
ld a, [wIsInBattle]
and a
@@ -6931,7 +6931,7 @@
ld bc, -(SCREEN_WIDTH * 6 + 3)
.next
add hl, bc
- ld a, [hBaseTileID]
+ ldh a, [hBaseTileID]
add $31
jr CopyUncompressedPicToHL
@@ -6940,7 +6940,7 @@
ld h, a
ld a, [wPredefRegisters + 1]
ld l, a
- ld a, [hStartTileID]
+ ldh a, [hStartTileID]
CopyUncompressedPicToHL::
lb bc, 7, 7
ld de, SCREEN_WIDTH
@@ -6993,7 +6993,7 @@
; been loaded with GetMonHeader.
ld a, [wBattleMonSpecies2]
ld [wcf91], a
- coord hl, 1, 5
+ hlcoord 1, 5
ld b, 7
ld c, 8
call ClearScreenArea
@@ -7005,6 +7005,6 @@
ld hl, vSprites
ld de, vBackPic
ld c, (2*SPRITEBUFFERSIZE)/16 ; count of 16-byte chunks to be copied
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
ld b, a
jp CopyVideoData
--- a/engine/battle/draw_hud_pokeball_gfx.asm
+++ b/engine/battle/draw_hud_pokeball_gfx.asm
@@ -12,7 +12,7 @@
LoadPartyPokeballGfx:
ld de, PokeballTileGraphics
- ld hl, vSprites + $310
+ ld hl, vSprites tile $31
lb bc, BANK(PokeballTileGraphics), (PokeballTileGraphicsEnd - PokeballTileGraphics) / $10
jp CopyVideoData
@@ -121,7 +121,7 @@
ld de, wHUDGraphicsTiles
ld bc, $3
call CopyData
- coord hl, 18, 10
+ hlcoord 18, 10
ld de, -1
jr PlaceHUDTiles
@@ -136,7 +136,7 @@
ld de, wHUDGraphicsTiles
ld bc, $3
call CopyData
- coord hl, 1, 2
+ hlcoord 1, 2
ld de, $1
jr PlaceHUDTiles
--- a/engine/battle/effects.asm
+++ b/engine/battle/effects.asm
@@ -4,7 +4,7 @@
ret
_JumpMoveEffect:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wPlayerMoveEffect]
jr z, .next1
@@ -26,7 +26,7 @@
SleepEffect:
ld de, wEnemyMonStatus
ld bc, wEnemyBattleStatus2
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jp z, .sleepEffect
ld de, wBattleMonStatus
@@ -78,7 +78,7 @@
PoisonEffect:
ld hl, wEnemyMonStatus
ld de, wPlayerMoveEffect
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .poisonEffect
ld hl, wBattleMonStatus
@@ -121,7 +121,7 @@
set 3, [hl] ; mon is now poisoned
push de
dec de
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld b, ANIM_C7
ld hl, wPlayerBattleStatus3
@@ -170,12 +170,12 @@
text_end
DrainHPEffect:
- jpab DrainHPEffect_
+ jpfar DrainHPEffect_
ExplodeEffect:
ld hl, wBattleMonHP
ld de, wPlayerBattleStatus2
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .faintUser
ld hl, wEnemyMonHP
@@ -196,7 +196,7 @@
ld [wAnimationType], a
call CheckTargetSubstitute ; test bit 4 of d063/d068 flags [target has substitute flag]
ret nz ; return if they have a substitute, can't effect them
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jp nz, opponentAttacker
ld a, [wEnemyMonStatus]
@@ -308,7 +308,7 @@
; any fire-type move that has a chance inflict burn (all but Fire Spin) will defrost a frozen target
and 1 << FRZ ; are they frozen?
ret z ; return if so
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr nz, .opponent
;player [attacker]
@@ -346,7 +346,7 @@
StatModifierUpEffect:
ld hl, wPlayerMonStatMods
ld de, wPlayerMoveEffect
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .statModifierUpEffect
ld hl, wEnemyMonStatMods
@@ -382,7 +382,7 @@
push hl
ld hl, wBattleMonAttack + 1
ld de, wPlayerMonUnmodifiedAttack
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .pointToStats
ld hl, wEnemyMonAttack + 1
@@ -399,11 +399,12 @@
inc d ; de = unmodified (original) stat
.checkIf999
pop bc
+ ; check if stat is already 999
ld a, [hld]
- sub 999 % $100 ; check if stat is already 999
+ sub LOW(MAX_STAT_VALUE)
jr nz, .recalculateStat
ld a, [hl]
- sbc 999 / $100
+ sbc HIGH(MAX_STAT_VALUE)
jp z, RestoreOriginalStatModifier
.recalculateStat ; recalculate affected stat
; paralysis and burn penalties, as well as badge boosts are ignored
@@ -417,35 +418,35 @@
add hl, bc
pop bc
xor a
- ld [hMultiplicand], a
+ ldh [hMultiplicand], a
ld a, [de]
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
inc de
ld a, [de]
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
ld a, [hli]
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
ld a, [hl]
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, $4
call Divide
pop hl
-; cap at 999
- ld a, [hProduct + 3]
- sub 999 % $100
- ld a, [hProduct + 2]
- sbc 999 / $100
+; cap at MAX_STAT_VALUE (999)
+ ldh a, [hProduct + 3]
+ sub LOW(MAX_STAT_VALUE)
+ ldh a, [hProduct + 2]
+ sbc HIGH(MAX_STAT_VALUE)
jp c, UpdateStat
- ld a, 999 / $100
- ld [hMultiplicand + 1], a
- ld a, 999 % $100
- ld [hMultiplicand + 2], a
+ ld a, HIGH(MAX_STAT_VALUE)
+ ldh [hMultiplicand + 1], a
+ ld a, LOW(MAX_STAT_VALUE)
+ ldh [hMultiplicand + 2], a
UpdateStat:
- ld a, [hProduct + 2]
+ ldh a, [hProduct + 2]
ld [hli], a
- ld a, [hProduct + 3]
+ ldh a, [hProduct + 3]
ld [hl], a
pop hl
UpdateStatDone:
@@ -455,7 +456,7 @@
ld hl, wPlayerBattleStatus2
ld de, wPlayerMoveNum
ld bc, wPlayerMonMinimized
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .asm_3f4e6
ld hl, wEnemyBattleStatus2
@@ -488,7 +489,7 @@
pop af
call nz, Bankswitch
.applyBadgeBoostsAndStatusPenalties
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
call z, ApplyBadgeStatBoosts ; whenever the player uses a stat-up move, badge boosts get reapplied again to every stat,
; even to those not affected by the stat-up move (will be boosted further)
@@ -511,7 +512,7 @@
text_far _MonsStatsRoseText
text_asm
ld hl, GreatlyRoseText
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wPlayerMoveEffect]
jr z, .playerTurn
@@ -534,7 +535,7 @@
ld hl, wEnemyMonStatMods
ld de, wPlayerMoveEffect
ld bc, wEnemyBattleStatus1
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .statModifierDownEffect
ld hl, wPlayerMonStatMods
@@ -601,7 +602,7 @@
push de
ld hl, wEnemyMonAttack + 1
ld de, wEnemyMonUnmodifiedAttack
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .pointToStat
ld hl, wBattleMonAttack + 1
@@ -637,33 +638,33 @@
add hl, bc
pop bc
xor a
- ld [hMultiplicand], a
+ ldh [hMultiplicand], a
ld a, [de]
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
inc de
ld a, [de]
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
ld a, [hli]
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
ld a, [hl]
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, $4
call Divide
pop hl
- ld a, [hProduct + 3]
+ ldh a, [hProduct + 3]
ld b, a
- ld a, [hProduct + 2]
+ ldh a, [hProduct + 2]
or b
jp nz, UpdateLoweredStat
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
ld a, $1
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
UpdateLoweredStat:
- ld a, [hProduct + 2]
+ ldh a, [hProduct + 2]
ld [hli], a
- ld a, [hProduct + 3]
+ ldh a, [hProduct + 3]
ld [hl], a
pop de
pop hl
@@ -678,7 +679,7 @@
jr nc, .ApplyBadgeBoostsAndStatusPenalties
call PlayCurrentMoveAnimation2
.ApplyBadgeBoostsAndStatusPenalties
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
call nz, ApplyBadgeStatBoosts ; whenever the player uses a stat-down move, badge boosts get reapplied again to every stat,
; even to those not affected by the stat-up move (will be boosted further)
@@ -713,7 +714,7 @@
text_far _MonsStatsFellText
text_asm
ld hl, FellText
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wPlayerMoveEffect]
jr z, .playerTurn
@@ -759,7 +760,7 @@
ld hl, wPlayerBattleStatus1
ld de, wPlayerBideAccumulatedDamage
ld bc, wPlayerNumAttacksLeft
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .bideEffect
ld hl, wEnemyBattleStatus1
@@ -778,7 +779,7 @@
inc a
inc a
ld [bc], a ; set Bide counter to 2 or 3 at random
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
add XSTATITEM_ANIM
jp PlayBattleAnimation2
@@ -785,7 +786,7 @@
ThrashPetalDanceEffect:
ld hl, wPlayerBattleStatus1
ld de, wPlayerNumAttacksLeft
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .thrashPetalDanceEffect
ld hl, wEnemyBattleStatus1
@@ -797,12 +798,12 @@
inc a
inc a
ld [de], a ; set thrash/petal dance counter to 2 or 3 at random
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
add ANIM_B0
jp PlayBattleAnimation2
SwitchAndTeleportEffect:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr nz, .handleEnemy
ld a, [wIsInBattle]
@@ -920,7 +921,7 @@
ld hl, wPlayerBattleStatus1
ld de, wPlayerNumAttacksLeft
ld bc, wPlayerNumHits
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .twoToFiveAttacksEffect
ld hl, wEnemyBattleStatus1
@@ -931,7 +932,7 @@
ret nz
set ATTACKING_MULTIPLE_TIMES, [hl] ; mon is now attacking multiple times
ld hl, wPlayerMoveEffect
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .setNumberOfHits
ld hl, wEnemyMoveEffect
@@ -967,7 +968,7 @@
ret nz
ld hl, wEnemyBattleStatus1
ld de, wPlayerMoveEffect
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .flinchSideEffect
ld hl, wPlayerBattleStatus1
@@ -987,12 +988,12 @@
ret
OneHitKOEffect:
- jpab OneHitKOEffect_
+ jpfar OneHitKOEffect_
ChargeEffect:
ld hl, wPlayerBattleStatus1
ld de, wPlayerMoveEffect
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld b, XSTATITEM_ANIM
jr z, .chargeEffect
@@ -1074,7 +1075,7 @@
TrappingEffect:
ld hl, wPlayerBattleStatus1
ld de, wPlayerNumAttacksLeft
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .trappingEffect
ld hl, wEnemyBattleStatus1
@@ -1097,13 +1098,13 @@
ret
MistEffect:
- jpab MistEffect_
+ jpfar MistEffect_
FocusEnergyEffect:
- jpab FocusEnergyEffect_
+ jpfar FocusEnergyEffect_
RecoilEffect:
- jpab RecoilEffect_
+ jpfar RecoilEffect_
ConfusionSideEffect:
call BattleRandom
@@ -1120,7 +1121,7 @@
jr nz, ConfusionEffectFailed
ConfusionSideEffectSuccess:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld hl, wEnemyBattleStatus1
ld bc, wEnemyConfusedCounter
@@ -1157,14 +1158,14 @@
jp ConditionalPrintButItFailed
ParalyzeEffect:
- jpab ParalyzeEffect_
+ jpfar ParalyzeEffect_
SubstituteEffect:
- jpab SubstituteEffect_
+ jpfar SubstituteEffect_
HyperBeamEffect:
ld hl, wPlayerBattleStatus2
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .hyperBeamEffect
ld hl, wEnemyBattleStatus2
@@ -1175,7 +1176,7 @@
ClearHyperBeam:
push hl
ld hl, wEnemyBattleStatus2
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .playerTurn
ld hl, wPlayerBattleStatus2
@@ -1186,7 +1187,7 @@
RageEffect:
ld hl, wPlayerBattleStatus2
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .player
ld hl, wEnemyBattleStatus2
@@ -1201,7 +1202,7 @@
ld a, [wMoveMissed]
and a
jr nz, .mimicMissed
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld hl, wBattleMonMoves
ld a, [wPlayerBattleStatus1]
@@ -1226,7 +1227,7 @@
and a
jr z, .getRandomMove
ld d, a
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld hl, wBattleMonMoves
ld a, [wPlayerMoveListIndex]
@@ -1271,7 +1272,7 @@
text_end
LeechSeedEffect:
- jpab LeechSeedEffect_
+ jpfar LeechSeedEffect_
SplashEffect:
call PlayCurrentMoveAnimation
@@ -1284,7 +1285,7 @@
jr nz, .moveMissed
ld de, wEnemyDisabledMove
ld hl, wEnemyMonMoves
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .disableEffect
ld de, wPlayerDisabledMove
@@ -1307,7 +1308,7 @@
jr z, .pickMoveToDisable ; loop until a non-00 move slot is found
ld [wd11e], a ; store move number
push hl
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld hl, wBattleMonPP
jr nz, .enemyTurn
@@ -1345,7 +1346,7 @@
ld [de], a
call PlayCurrentMoveAnimation2
ld hl, wPlayerDisabledMoveNumber
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr nz, .printDisableText
inc hl ; wEnemyDisabledMoveNumber
@@ -1365,22 +1366,22 @@
text_end
PayDayEffect:
- jpab PayDayEffect_
+ jpfar PayDayEffect_
ConversionEffect:
- jpab ConversionEffect_
+ jpfar ConversionEffect_
HazeEffect:
- jpab HazeEffect_
+ jpfar HazeEffect_
HealEffect:
- jpab HealEffect_
+ jpfar HealEffect_
TransformEffect:
- jpab TransformEffect_
+ jpfar TransformEffect_
ReflectLightScreenEffect:
- jpab ReflectLightScreenEffect_
+ jpfar ReflectLightScreenEffect_
NothingHappenedText:
text_far _NothingHappenedText
@@ -1430,7 +1431,7 @@
CheckTargetSubstitute:
push hl
ld hl, wEnemyBattleStatus2
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .next1
ld hl, wPlayerBattleStatus2
@@ -1442,7 +1443,7 @@
PlayCurrentMoveAnimation2:
; animation at MOVENUM will be played unless MOVENUM is 0
; plays wAnimationType 3 or 6
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wPlayerMoveNum]
jr z, .notEnemyTurn
@@ -1454,7 +1455,7 @@
PlayBattleAnimation2:
; play animation ID at a and animation type 6 or 3
ld [wAnimationID], a
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, $6
jr z, .storeAnimationType
@@ -1468,7 +1469,7 @@
; resets wAnimationType
xor a
ld [wAnimationType], a
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wPlayerMoveNum]
jr z, .notEnemyTurn
--- a/engine/battle/end_of_battle.asm
+++ b/engine/battle/end_of_battle.asm
@@ -10,7 +10,7 @@
ld a, [wEnemyMonStatus]
ld [hl], a
call ClearScreen
- callab DisplayLinkBattleVersusTextBox
+ callfar DisplayLinkBattleVersusTextBox
ld a, [wBattleResult]
cp $1
ld de, YouWinText
@@ -19,7 +19,7 @@
jr z, .placeWinOrLoseString
ld de, DrawText
.placeWinOrLoseString
- coord hl, 6, 8
+ hlcoord 6, 8
call PlaceString
ld c, 200
call DelayFrames
--- a/engine/battle/experience.asm
+++ b/engine/battle/experience.asm
@@ -55,15 +55,15 @@
jr .gainStatExpLoop
.statExpDone
xor a
- ld [hMultiplicand], a
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand], a
+ ldh [hMultiplicand + 1], a
ld a, [wEnemyMonBaseExp]
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
ld a, [wEnemyMonLevel]
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
ld a, 7
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, 4
call Divide
ld hl, wPartyMon1OTID - (wPartyMon1DVs - 1)
@@ -91,12 +91,12 @@
inc hl
; add the gained exp to the party mon's exp
ld b, [hl]
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
ld [wExpAmountGained + 1], a
add b
ld [hld], a
ld b, [hl]
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
ld [wExpAmountGained], a
adc b
ld [hl], a
@@ -117,13 +117,13 @@
ld [wd0b5], a
call GetMonHeader
ld d, MAX_LEVEL
- callab CalcExperience ; get max exp
+ callfar CalcExperience ; get max exp
; compare max exp with current exp
- ld a, [hExperience]
+ ldh a, [hExperience]
ld b, a
- ld a, [hExperience + 1]
+ ldh a, [hExperience + 1]
ld c, a
- ld a, [hExperience + 2]
+ ldh a, [hExperience + 2]
ld d, a
pop hl
ld a, [hld]
@@ -155,7 +155,7 @@
ld bc, wPartyMon1Level - wPartyMon1Exp
add hl, bc
push hl
- callba CalcLevelFromExperience
+ farcall CalcLevelFromExperience
pop hl
ld a, [hl] ; current level
cp d
@@ -233,11 +233,11 @@
.recalcStatChanges
xor a ; battle mon
ld [wCalculateWhoseStats], a
- callab CalculateModifiedStats
- callab ApplyBurnAndParalysisPenaltiesToPlayer
- callab ApplyBadgeStatBoosts
- callab DrawPlayerHUDAndHPBar
- callab PrintEmptyString
+ callfar CalculateModifiedStats
+ callfar ApplyBurnAndParalysisPenaltiesToPlayer
+ callfar ApplyBadgeStatBoosts
+ callfar DrawPlayerHUDAndHPBar
+ callfar PrintEmptyString
call SaveScreenTilesToBuffer1
.printGrewLevelText
ld hl, GrewLevelText
@@ -246,7 +246,7 @@
ld [wMonDataLocation], a
call LoadMonData
ld d, $1
- callab PrintStatsBox
+ callfar PrintStatsBox
call WaitForTextScrollButtonPress
call LoadScreenTilesFromBuffer1
xor a ; PLAYER_PARTY_DATA
@@ -311,14 +311,14 @@
ld c, wEnemyMonBaseExp + 1 - wEnemyMonBaseStats
.divideLoop
xor a
- ld [hDividend], a
+ ldh [hDividend], a
ld a, [hl]
- ld [hDividend + 1], a
+ ldh [hDividend + 1], a
ld a, [wd11e]
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, $2
call Divide ; divide value by number of mons gaining exp
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
ld [hli], a
dec c
jr nz, .divideLoop
@@ -326,17 +326,17 @@
; multiplies exp by 1.5
BoostExp:
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
ld b, a
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
ld c, a
srl b
rr c
add c
- ld [hQuotient + 3], a
- ld a, [hQuotient + 2]
+ ldh [hQuotient + 3], a
+ ldh a, [hQuotient + 2]
adc b
- ld [hQuotient + 2], a
+ ldh [hQuotient + 2], a
ret
GainedText:
--- a/engine/battle/ghost_marowak_anim.asm
+++ b/engine/battle/ghost_marowak_anim.asm
@@ -1,21 +1,21 @@
MarowakAnim:
; animate the ghost being unveiled as a Marowak
ld a, $e4
- ld [rOBP1], a
+ ldh [rOBP1], a
call CopyMonPicFromBGToSpriteVRAM ; cover the BG ghost pic with a sprite ghost pic that looks the same
; now that the ghost pic is being displayed using sprites, clear the ghost pic from the BG tilemap
- coord hl, 12, 0
+ hlcoord 12, 0
lb bc, 7, 7
call ClearScreenArea
call Delay3
xor a
- ld [hAutoBGTransferEnabled], a ; disable BG transfer so we don't see the Marowak too soon
+ ldh [hAutoBGTransferEnabled], a ; disable BG transfer so we don't see the Marowak too soon
; replace ghost pic with Marowak in BG
ld a, MAROWAK
ld [wChangeMonPicEnemyTurnSpecies], a
ld a, $1
- ld [hWhoseTurn], a
- callab ChangeMonPic
+ ldh [hWhoseTurn], a
+ callfar ChangeMonPic
; alternate between black and light grey 8 times.
; this makes the ghost's body appear to flash
ld d, $80
@@ -23,10 +23,10 @@
.fadeOutGhostLoop
ld c, 10
call DelayFrames
- ld a, [rOBP1]
+ ldh a, [rOBP1]
sla a
sla a
- ld [rOBP1], a
+ ldh [rOBP1], a
jr nz, .fadeOutGhostLoop
call ClearSprites
call CopyMonPicFromBGToSpriteVRAM ; copy Marowak pic from BG to sprite VRAM
@@ -34,17 +34,17 @@
.fadeInMarowakLoop
ld c, 10
call DelayFrames
- ld a, [rOBP1]
+ ldh a, [rOBP1]
srl b
rra
srl b
rra
- ld [rOBP1], a
+ ldh [rOBP1], a
ld a, b
and a
jr nz, .fadeInMarowakLoop
ld a, $1
- ld [hAutoBGTransferEnabled], a ; enable BG transfer so the BG Marowak pic will be visible after the sprite one is cleared
+ ldh [hAutoBGTransferEnabled], a ; enable BG transfer so the BG Marowak pic will be visible after the sprite one is cleared
call Delay3
jp ClearSprites
--- a/engine/battle/init_battle_variables.asm
+++ b/engine/battle/init_battle_variables.asm
@@ -1,5 +1,5 @@
InitBattleVariables:
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
ld [wSavedTilesetType], a
xor a
ld [wActionResultOrTookBattleTurn], a
@@ -35,4 +35,4 @@
ld a, BATTLE_TYPE_SAFARI
ld [wBattleType], a
.notSafariBattle
- jpab PlayBattleMusic
+ jpfar PlayBattleMusic
--- a/engine/battle/link_battle_versus_text.asm
+++ b/engine/battle/link_battle_versus_text.asm
@@ -1,23 +1,23 @@
; display "[player] VS [enemy]" text box with pokeballs representing their parties next to the names
DisplayLinkBattleVersusTextBox:
call LoadTextBoxTilePatterns
- coord hl, 3, 4
+ hlcoord 3, 4
ld b, 7
ld c, 12
call TextBoxBorder
- coord hl, 4, 5
+ hlcoord 4, 5
ld de, wPlayerName
call PlaceString
- coord hl, 4, 10
+ hlcoord 4, 10
ld de, wLinkEnemyTrainerName
call PlaceString
; place bold "VS" tiles between the names
- coord hl, 9, 8
+ hlcoord 9, 8
ld a, $69
ld [hli], a
ld [hl], $6a
xor a
ld [wUpdateSpritesEnabled], a
- callab SetupPlayerAndEnemyPokeballs
+ callfar SetupPlayerAndEnemyPokeballs
ld c, 150
jp DelayFrames
--- a/engine/battle/move_effects/conversion.asm
+++ b/engine/battle/move_effects/conversion.asm
@@ -1,7 +1,7 @@
ConversionEffect_:
ld hl, wEnemyMonType1
ld de, wBattleMonType1
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wEnemyBattleStatus1]
jr z, .conversionEffect
--- a/engine/battle/move_effects/drain_hp.asm
+++ b/engine/battle/move_effects/drain_hp.asm
@@ -14,7 +14,7 @@
.getAttackerHP
ld hl, wBattleMonHP
ld de, wBattleMonMaxHP
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jp z, .addDamageToAttackerHP
ld hl, wEnemyMonHP
@@ -69,12 +69,12 @@
ld [wHPBarNewHP+1], a
inc de
.next
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
- coord hl, 10, 9
+ hlcoord 10, 9
ld a, $1
jr z, .next2
- coord hl, 2, 2
+ hlcoord 2, 2
xor a
.next2
ld [wHPBarType], a
@@ -81,9 +81,9 @@
predef UpdateHPBar2
predef DrawPlayerHUDAndHPBar
predef DrawEnemyHUDAndHPBar
- callab ReadPlayerMonCurHPAndStatus
+ callfar ReadPlayerMonCurHPAndStatus
ld hl, SuckedHealthText
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wPlayerMoveEffect]
jr z, .next3
--- a/engine/battle/move_effects/focus_energy.asm
+++ b/engine/battle/move_effects/focus_energy.asm
@@ -1,6 +1,6 @@
FocusEnergyEffect_:
ld hl, wPlayerBattleStatus2
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .notEnemy
ld hl, wEnemyBattleStatus2
@@ -8,13 +8,13 @@
bit GETTING_PUMPED, [hl] ; is mon already using focus energy?
jr nz, .alreadyUsing
set GETTING_PUMPED, [hl] ; mon is now using focus energy
- callab PlayCurrentMoveAnimation
+ callfar PlayCurrentMoveAnimation
ld hl, GettingPumpedText
jp PrintText
.alreadyUsing
ld c, 50
call DelayFrames
- jpab PrintButItFailedText_
+ jpfar PrintButItFailedText_
GettingPumpedText:
text_pause
--- a/engine/battle/move_effects/haze.asm
+++ b/engine/battle/move_effects/haze.asm
@@ -15,7 +15,7 @@
; cure non-volatile status, but only for the target
ld hl, wEnemyMonStatus
ld de, wEnemySelectedMove
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .cureStatuses
ld hl, wBattleMonStatus
--- a/engine/battle/move_effects/heal.asm
+++ b/engine/battle/move_effects/heal.asm
@@ -1,5 +1,5 @@
HealEffect_:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld de, wBattleMonHP
ld hl, wBattleMonMaxHP
@@ -27,7 +27,7 @@
ld c, 50
call DelayFrames
ld hl, wBattleMonStatus
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .restEffect
ld hl, wEnemyMonStatus
@@ -87,12 +87,12 @@
.playAnim
ld hl, PlayCurrentMoveAnimation
call BankswitchEtoF
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
- coord hl, 10, 9
+ hlcoord 10, 9
ld a, $1
jr z, .updateHPBar
- coord hl, 2, 2
+ hlcoord 2, 2
xor a
.updateHPBar
ld [wHPBarType], a
--- a/engine/battle/move_effects/leech_seed.asm
+++ b/engine/battle/move_effects/leech_seed.asm
@@ -1,11 +1,11 @@
LeechSeedEffect_:
- callab MoveHitTest
+ callfar MoveHitTest
ld a, [wMoveMissed]
and a
jr nz, .moveMissed
ld hl, wEnemyBattleStatus2
ld de, wEnemyMonType1
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .leechSeedEffect
ld hl, wPlayerBattleStatus2
@@ -22,7 +22,7 @@
bit SEEDED, [hl]
jr nz, .moveMissed
set SEEDED, [hl]
- callab PlayCurrentMoveAnimation
+ callfar PlayCurrentMoveAnimation
ld hl, WasSeededText
jp PrintText
.moveMissed
--- a/engine/battle/move_effects/mist.asm
+++ b/engine/battle/move_effects/mist.asm
@@ -1,6 +1,6 @@
MistEffect_:
ld hl, wPlayerBattleStatus2
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .mistEffect
ld hl, wEnemyBattleStatus2
@@ -8,11 +8,11 @@
bit PROTECTED_BY_MIST, [hl] ; is mon protected by mist?
jr nz, .mistAlreadyInUse
set PROTECTED_BY_MIST, [hl] ; mon is now protected by mist
- callab PlayCurrentMoveAnimation
+ callfar PlayCurrentMoveAnimation
ld hl, ShroudedInMistText
jp PrintText
.mistAlreadyInUse
- jpab PrintButItFailedText_
+ jpfar PrintButItFailedText_
ShroudedInMistText:
text_far _ShroudedInMistText
--- a/engine/battle/move_effects/one_hit_ko.asm
+++ b/engine/battle/move_effects/one_hit_ko.asm
@@ -7,7 +7,7 @@
ld [wCriticalHitOrOHKO], a
ld hl, wBattleMonSpeed + 1
ld de, wEnemyMonSpeed + 1
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .compareSpeed
ld hl, wEnemyMonSpeed + 1
--- a/engine/battle/move_effects/paralyze.asm
+++ b/engine/battle/move_effects/paralyze.asm
@@ -1,7 +1,7 @@
ParalyzeEffect_:
ld hl, wEnemyMonStatus
ld de, wPlayerMoveType
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jp z, .next
ld hl, wBattleMonStatus
@@ -26,22 +26,22 @@
jr z, .doesntAffect
.hitTest
push hl
- callab MoveHitTest
+ callfar MoveHitTest
pop hl
ld a, [wMoveMissed]
and a
jr nz, .didntAffect
set PAR, [hl]
- callab QuarterSpeedDueToParalysis
+ callfar QuarterSpeedDueToParalysis
ld c, 30
call DelayFrames
- callab PlayCurrentMoveAnimation
- jpab PrintMayNotAttackText
+ callfar PlayCurrentMoveAnimation
+ jpfar PrintMayNotAttackText
.didntAffect
ld c, 50
call DelayFrames
- jpab PrintDidntAffectText
+ jpfar PrintDidntAffectText
.doesntAffect
ld c, 50
call DelayFrames
- jpab PrintDoesntAffectText
+ jpfar PrintDoesntAffectText
--- a/engine/battle/move_effects/pay_day.asm
+++ b/engine/battle/move_effects/pay_day.asm
@@ -2,7 +2,7 @@
xor a
ld hl, wcd6d
ld [hli], a
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wBattleMonLevel]
jr z, .payDayEffect
@@ -10,28 +10,28 @@
.payDayEffect
; level * 2
add a
- ld [hDividend + 3], a
+ ldh [hDividend + 3], a
xor a
- ld [hDividend], a
- ld [hDividend + 1], a
- ld [hDividend + 2], a
+ ldh [hDividend], a
+ ldh [hDividend + 1], a
+ ldh [hDividend + 2], a
; convert to BCD
ld a, 100
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, $4
call Divide
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
ld [hli], a
- ld a, [hRemainder]
- ld [hDividend + 3], a
+ ldh a, [hRemainder]
+ ldh [hDividend + 3], a
ld a, 10
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, $4
call Divide
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
swap a
ld b, a
- ld a, [hRemainder]
+ ldh a, [hRemainder]
add b
ld [hl], a
ld de, wTotalPayDayMoney + 2
--- a/engine/battle/move_effects/recoil.asm
+++ b/engine/battle/move_effects/recoil.asm
@@ -1,5 +1,5 @@
RecoilEffect_:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wPlayerMoveNum]
ld hl, wBattleMonMaxHP
@@ -53,12 +53,12 @@
ld [hli], a
ld [hl], a
.getHPBarCoords
- coord hl, 10, 9
- ld a, [hWhoseTurn]
+ hlcoord 10, 9
+ ldh a, [hWhoseTurn]
and a
ld a, $1
jr z, .updateHPBar
- coord hl, 2, 2
+ hlcoord 2, 2
xor a
.updateHPBar
ld [wHPBarType], a
--- a/engine/battle/move_effects/reflect_light_screen.asm
+++ b/engine/battle/move_effects/reflect_light_screen.asm
@@ -1,7 +1,7 @@
ReflectLightScreenEffect_:
ld hl, wPlayerBattleStatus3
ld de, wPlayerMoveEffect
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .reflectLightScreenEffect
ld hl, wEnemyBattleStatus3
--- a/engine/battle/move_effects/substitute.asm
+++ b/engine/battle/move_effects/substitute.asm
@@ -4,7 +4,7 @@
ld hl, wBattleMonMaxHP
ld de, wPlayerSubstituteHP
ld bc, wPlayerBattleStatus2
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .notEnemy
ld hl, wEnemyMonMaxHP
@@ -55,7 +55,7 @@
call Bankswitch ; jump to routine depending on animation setting
ld hl, SubstituteText
call PrintText
- jpab DrawHUDsAndHPBars
+ jpfar DrawHUDsAndHPBars
.alreadyHasSubstitute
ld hl, HasSubstituteText
jr .printText
--- a/engine/battle/move_effects/transform.asm
+++ b/engine/battle/move_effects/transform.asm
@@ -3,7 +3,7 @@
ld de, wEnemyMonSpecies
ld bc, wEnemyBattleStatus3
ld a, [wEnemyBattleStatus1]
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr nz, .hitTest
ld hl, wEnemyMonSpecies
@@ -18,7 +18,7 @@
push de
push bc
ld hl, wPlayerBattleStatus2
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .transformEffect
ld hl, wEnemyBattleStatus2
@@ -64,7 +64,7 @@
inc bc
inc bc
call CopyData
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .next
; save enemy mon DVs at wTransformedEnemyMonOriginalDVs
@@ -128,7 +128,7 @@
jp PrintText
.copyBasedOnTurn
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
jr z, .gotStatsOrModsToCopy
push hl
--- a/engine/battle/scale_sprites.asm
+++ b/engine/battle/scale_sprites.asm
@@ -41,7 +41,7 @@
ScaleLastSpriteColumnByTwo:
ld a, 4*8 - 4 ; $1c, 4 tiles minus 4 unused rows
- ld [hSpriteInterlaceCounter], a
+ ldh [hSpriteInterlaceCounter], a
ld bc, -1
.columnInnerLoop
ld a, [de]
@@ -48,9 +48,9 @@
dec de
swap a ; only high nybble contains information
call ScalePixelsByTwo
- ld a, [hSpriteInterlaceCounter]
+ ldh a, [hSpriteInterlaceCounter]
dec a
- ld [hSpriteInterlaceCounter], a
+ ldh [hSpriteInterlaceCounter], a
jr nz, .columnInnerLoop
dec de ; skip last 4 rows of new column
dec de
--- a/engine/battle/scroll_draw_trainer_pic.asm
+++ b/engine/battle/scroll_draw_trainer_pic.asm
@@ -5,8 +5,8 @@
ld [wEnemyMonSpecies2], a
ld b, SET_PAL_BATTLE
call RunPaletteCommand
- callab _LoadTrainerPic
- coord hl, 19, 0
+ callfar _LoadTrainerPic
+ hlcoord 19, 0
ld c, $0
.scrollLoop
inc c
--- a/engine/battle/trainer_ai.asm
+++ b/engine/battle/trainer_ai.asm
@@ -204,7 +204,7 @@
push hl
push bc
push de
- callab AIGetTypeEffectiveness
+ callfar AIGetTypeEffectiveness
pop de
pop bc
pop hl
@@ -542,7 +542,7 @@
AIPrintItemUseAndUpdateHPBar:
call AIPrintItemUse_
- coord hl, 2, 2
+ hlcoord 2, 2
xor a
ld [wHPBarType], a
predef UpdateHPBar2
@@ -599,7 +599,7 @@
; switching in a new mon in response to this switch.
ld a, 1
ld [wFirstMonsNotOutYet], a
- callab EnemySendOut
+ callfar EnemySendOut
xor a
ld [wFirstMonsNotOutYet], a
@@ -655,17 +655,17 @@
AICheckIfHPBelowFraction:
; return carry if enemy trainer's current HP is below 1 / a of the maximum
- ld [hDivisor], a
+ ldh [hDivisor], a
ld hl, wEnemyMonMaxHP
ld a, [hli]
- ld [hDividend], a
+ ldh [hDividend], a
ld a, [hl]
- ld [hDividend + 1], a
+ ldh [hDividend + 1], a
ld b, 2
call Divide
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
ld c, a
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
ld b, a
ld hl, wEnemyMonHP + 1
ld a, [hld]
@@ -713,7 +713,7 @@
ld a, ANIM_AF
ld [hli], a
ld [hl], b
- callab StatModifierUpEffect
+ callfar StatModifierUpEffect
pop hl
pop af
ld [hli], a
--- a/engine/battle/unused_stats_functions.asm
+++ b/engine/battle/unused_stats_functions.asm
@@ -1,6 +1,6 @@
; does nothing since no stats are ever selected (barring glitches)
DoubleSelectedStats:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wPlayerStatsToDouble]
ld hl, wBattleMonAttack + 1
@@ -30,7 +30,7 @@
; does nothing since no stats are ever selected (barring glitches)
HalveSelectedStats:
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
and a
ld a, [wPlayerStatsToHalve]
ld hl, wBattleMonAttack
--- a/engine/battle/wild_encounters.asm
+++ b/engine/battle/wild_encounters.asm
@@ -7,7 +7,7 @@
ld a, [wd736]
and a
ret nz
- callab IsPlayerStandingOnDoorTileOrWarpTile
+ callfar IsPlayerStandingOnDoorTileOrWarpTile
jr nc, .notStandingOnDoorOrWarpTile
.CantEncounter
ld a, $1
@@ -14,7 +14,7 @@
and a
ret
.notStandingOnDoorOrWarpTile
- callab IsPlayerJustOutsideMap
+ callfar IsPlayerJustOutsideMap
jr z, .CantEncounter
ld a, [wRepelRemainingSteps]
and a
@@ -25,7 +25,7 @@
.next
; determine if wild pokemon can appear in the half-block we're standing in
; is the bottom right tile (9,9) of the half-block we're standing in a grass/water tile?
- coord hl, 9, 9
+ hlcoord 9, 9
ld c, [hl]
ld a, [wGrassTile]
cp c
@@ -48,10 +48,10 @@
.CanEncounter
; compare encounter chance with a random number to determine if there will be an encounter
ld b, a
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
cp b
jr nc, .CantEncounter2
- ld a, [hRandomSub]
+ ldh a, [hRandomSub]
ld b, a
ld hl, WildMonEncounterSlotChances
.determineEncounterSlot
@@ -64,7 +64,7 @@
; determine which wild pokemon (grass or water) can appear in the half-block we're standing in
ld c, [hl]
ld hl, wGrassMons
- aCoord 8, 9
+ lda_coord 8, 9
cp $14 ; is the bottom left tile (8,9) of the half-block we're standing in a water tile?
jr nz, .gotWildEncounterType ; else, it's treated as a grass tile by default
ld hl, wWaterMons
@@ -90,7 +90,7 @@
.lastRepelStep
ld [wRepelRemainingSteps], a
ld a, TEXT_REPEL_WORE_OFF
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call EnableAutoTextBoxDrawing
call DisplayTextID
.CantEncounter2
--- a/engine/debug/test_battle.asm
+++ b/engine/debug/test_battle.asm
@@ -41,5 +41,5 @@
; do it all again.
ld a, 1
ld [wUpdateSpritesEnabled], a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
jr .loop
--- a/engine/events/black_out.asm
+++ b/engine/events/black_out.asm
@@ -6,34 +6,34 @@
ld [wIsInBattle], a
ld [wMapPalOffset], a
ld [wNPCMovementScriptFunctionNum], a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld [wNPCMovementScriptPointerTableNum], a
ld [wFlags_0xcd60], a
- ld [hMoney], a
- ld [hMoney + 1], a
- ld [hMoney + 2], a
+ ldh [hMoney], a
+ ldh [hMoney + 1], a
+ ldh [hMoney + 2], a
call HasEnoughMoney
jr c, .lostmoney ; never happens
; Halve the player's money.
ld a, [wPlayerMoney]
- ld [hMoney], a
+ ldh [hMoney], a
ld a, [wPlayerMoney + 1]
- ld [hMoney + 1], a
+ ldh [hMoney + 1], a
ld a, [wPlayerMoney + 2]
- ld [hMoney + 2], a
+ ldh [hMoney + 2], a
xor a
- ld [hDivideBCDDivisor], a
- ld [hDivideBCDDivisor + 1], a
+ ldh [hDivideBCDDivisor], a
+ ldh [hDivideBCDDivisor + 1], a
ld a, 2
- ld [hDivideBCDDivisor + 2], a
+ ldh [hDivideBCDDivisor + 2], a
predef DivideBCDPredef3
- ld a, [hDivideBCDQuotient]
+ ldh a, [hDivideBCDQuotient]
ld [wPlayerMoney], a
- ld a, [hDivideBCDQuotient + 1]
+ ldh a, [hDivideBCDQuotient + 1]
ld [wPlayerMoney + 1], a
- ld a, [hDivideBCDQuotient + 2]
+ ldh a, [hDivideBCDQuotient + 2]
ld [wPlayerMoney + 2], a
.lostmoney
--- a/engine/events/card_key.asm
+++ b/engine/events/card_key.asm
@@ -28,7 +28,7 @@
call GetCoordsInFrontOfPlayer
push de
tx_pre_id CardKeySuccessText
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call PrintPredefTextID
pop de
srl d
@@ -55,7 +55,7 @@
jp PlaySound
.noCardKey
tx_pre_id CardKeyFailText
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp PrintPredefTextID
SilphCoMapList:
--- a/engine/events/cinnabar_lab.asm
+++ b/engine/events/cinnabar_lab.asm
@@ -20,7 +20,7 @@
dec l
ld b, l
ld c, $d
- coord hl, 0, 0
+ hlcoord 0, 0
call TextBoxBorder
call UpdateSprites
call PrintFossilsInBag
@@ -35,7 +35,7 @@
ld e, a
add hl, de
ld a, [hl]
- ld [hItemToRemoveID], a
+ ldh [hItemToRemoveID], a
cp DOME_FOSSIL
jr z, .choseDomeFossil
cp HELIX_FOSSIL
@@ -61,8 +61,8 @@
ld hl, LabFossil_610b3
call PrintText
ld a, [wFossilItem]
- ld [hItemToRemoveID], a
- callba RemoveItemByID
+ ldh [hItemToRemoveID], a
+ farcall RemoveItemByID
ld hl, LabFossil_610b8
call PrintText
SetEvents EVENT_GAVE_FOSSIL_TO_LAB, EVENT_LAB_STILL_REVIVING_FOSSIL
@@ -92,7 +92,7 @@
; Prints each fossil in the player's bag on a separate line in the menu.
ld hl, wFilteredBagItems
xor a
- ld [hItemCounter], a
+ ldh [hItemCounter], a
.loop
ld a, [hli]
cp $ff
@@ -100,8 +100,8 @@
push hl
ld [wd11e], a
call GetItemName
- coord hl, 2, 2
- ld a, [hItemCounter]
+ hlcoord 2, 2
+ ldh a, [hItemCounter]
ld bc, SCREEN_WIDTH * 2
call AddNTimes
ld de, wcd6d
--- a/engine/events/diploma.asm
+++ b/engine/events/diploma.asm
@@ -10,11 +10,11 @@
set 6, [hl]
call DisableLCD
ld hl, CircleTile
- ld de, vChars2 + CIRCLE_TILE_ID * $10
+ ld de, vChars2 tile CIRCLE_TILE_ID
ld bc, $10
ld a, BANK(CircleTile)
call FarCopyData2
- coord hl, 0, 0
+ hlcoord 0, 0
lb bc, 16, 18
predef Diploma_TextBoxBorder
ld hl, DiplomaTextPointersAndCoords
@@ -35,10 +35,10 @@
pop bc
dec c
jr nz, .asm_56715
- coord hl, 10, 4
+ hlcoord 10, 4
ld de, wPlayerName
call PlaceString
- callba DrawPlayerCharacter
+ farcall DrawPlayerCharacter
; Move the player 33 pixels right and set the priority bit so he appears
; behind the background layer.
@@ -56,13 +56,13 @@
jr nz, .adjustPlayerGfxLoop
call EnableLCD
- callba LoadTrainerInfoTextBoxTiles
+ farcall LoadTrainerInfoTextBoxTiles
ld b, SET_PAL_GENERIC
call RunPaletteCommand
call Delay3
call GBPalNormal
ld a, $90
- ld [rOBP0], a
+ ldh [rOBP0], a
call WaitForTextScrollButtonPress
ld hl, wd730
res 6, [hl]
@@ -85,15 +85,15 @@
DiplomaTextPointersAndCoords:
dw DiplomaText
- dwCoord 5, 2
+ dwcoord 5, 2
dw DiplomaPlayer
- dwCoord 3, 4
+ dwcoord 3, 4
dw DiplomaEmptyText
- dwCoord 15, 4
+ dwcoord 15, 4
dw DiplomaCongrats
- dwCoord 2, 6
+ dwcoord 2, 6
dw DiplomaGameFreak
- dwCoord 9, 16
+ dwcoord 9, 16
DiplomaText:
db CIRCLE_TILE_ID, "Diploma", CIRCLE_TILE_ID, "@"
--- a/engine/events/evolve_trade.asm
+++ b/engine/events/evolve_trade.asm
@@ -38,7 +38,7 @@
ld [wForceEvolution], a
ld a, LINK_STATE_TRADING
ld [wLinkState], a
- callab TryEvolvingMon
+ callfar TryEvolvingMon
xor a ; LINK_STATE_NONE
ld [wLinkState], a
jp PlayDefaultMusic
--- a/engine/events/give_pokemon.asm
+++ b/engine/events/give_pokemon.asm
@@ -15,9 +15,9 @@
ld [wEnemyBattleStatus3], a
ld a, [wcf91]
ld [wEnemyMonSpecies2], a
- callab LoadEnemyMonData
+ callfar LoadEnemyMonData
call SetPokedexOwnedFlag
- callab SendNewMonToBox
+ callfar SendNewMonToBox
ld hl, wcf4b
ld a, [wCurrentBoxNum]
and $7f
--- a/engine/events/hidden_items.asm
+++ b/engine/events/hidden_items.asm
@@ -67,9 +67,9 @@
and a
ret nz
xor a
- ld [hUnusedCoinsByte], a
- ld [hCoins], a
- ld [hCoins + 1], a
+ ldh [hUnusedCoinsByte], a
+ ldh [hCoins], a
+ ldh [hCoins + 1], a
ld a, [wHiddenObjectFunctionArgument]
sub COIN
cp 10
@@ -81,19 +81,19 @@
jr .bcd100
.bcd10
ld a, $10
- ld [hCoins + 1], a
+ ldh [hCoins + 1], a
jr .bcdDone
.bcd20
ld a, $20
- ld [hCoins + 1], a
+ ldh [hCoins + 1], a
jr .bcdDone
.bcd40 ; due to a typo, this is never used
ld a, $40
- ld [hCoins + 1], a
+ ldh [hCoins + 1], a
jr .bcdDone
.bcd100
ld a, $1
- ld [hCoins], a
+ ldh [hCoins], a
.bcdDone
ld de, wPlayerCoins + 1
ld hl, hCoins + 1
--- a/engine/events/hidden_objects/bills_house_pc.asm
+++ b/engine/events/hidden_objects/bills_house_pc.asm
@@ -84,11 +84,11 @@
.billsPokemonLoop
ld hl, wd730
set 6, [hl]
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 10
ld c, 9
call TextBoxBorder
- coord hl, 2, 2
+ hlcoord 2, 2
ld de, BillsMonListText
call PlaceString
ld hl, BillsHousePokemonListText2
--- a/engine/events/hidden_objects/book_or_sculpture.asm
+++ b/engine/events/hidden_objects/book_or_sculpture.asm
@@ -4,7 +4,7 @@
ld a, [wCurMapTileset]
cp MANSION ; Celadon Mansion tileset
jr nz, .ok
- aCoord 8, 6
+ lda_coord 8, 6
cp $38
jr nz, .ok
ld hl, DiglettSculptureText
--- a/engine/events/hidden_objects/bookshelves.asm
+++ b/engine/events/hidden_objects/bookshelves.asm
@@ -6,7 +6,7 @@
; facing up
ld a, [wCurMapTileset]
ld b, a
- aCoord 8, 7
+ lda_coord 8, 7
ld c, a
ld hl, BookshelfTileIDs
.loop
@@ -24,7 +24,7 @@
pop af
call PrintPredefTextID
xor a
- ld [hFFDB], a
+ ldh [hFFDB], a
ret
.nextBookshelfEntry1
inc hl
@@ -33,7 +33,7 @@
jr .loop
.noMatch
ld a, $ff
- ld [hFFDB], a
- jpba PrintCardKeyText
+ ldh [hFFDB], a
+ farjp PrintCardKeyText
INCLUDE "data/tilesets/bookshelf_tile_ids.asm"
--- a/engine/events/hidden_objects/cinnabar_gym_quiz.asm
+++ b/engine/events/hidden_objects/cinnabar_gym_quiz.asm
@@ -12,14 +12,14 @@
ld a, [wHiddenObjectFunctionArgument]
push af
and $f
- ld [hGymGateIndex], a
+ ldh [hGymGateIndex], a
pop af
and $f0
swap a
- ld [hGymGateAnswer], a
+ ldh [hGymGateAnswer], a
ld hl, CinnabarGymQuizIntroText
call PrintText
- ld a, [hGymGateIndex]
+ ldh a, [hGymGateIndex]
dec a
add a
ld d, 0
@@ -77,7 +77,7 @@
CinnabarGymQuiz_1ea92:
call YesNoChoice
- ld a, [hGymGateAnswer]
+ ldh a, [hGymGateAnswer]
ld c, a
ld a, [wCurrentMenuItem]
cp c
@@ -84,11 +84,11 @@
jr nz, .wrongAnswer
ld hl, wCurrentMapScriptFlags
set 5, [hl]
- ld a, [hGymGateIndex]
- ld [hBackupGymGateIndex], a
+ ldh a, [hGymGateIndex]
+ ldh [hBackupGymGateIndex], a
ld hl, CinnabarGymQuizCorrectText
call PrintText
- ld a, [hBackupGymGateIndex]
+ ldh a, [hBackupGymGateIndex]
AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0
ld c, a
ld b, FLAG_SET
@@ -101,7 +101,7 @@
call WaitForSoundToFinish
ld hl, CinnabarGymQuizIncorrectText
call PrintText
- ld a, [hGymGateIndex]
+ ldh a, [hGymGateIndex]
add $2
AdjustEventBit EVENT_BEAT_CINNABAR_GYM_TRAINER_0, 2
ld c, a
@@ -111,7 +111,7 @@
ld a, c
and a
ret nz
- ld a, [hGymGateIndex]
+ ldh a, [hGymGateIndex]
add $2
ld [wOpponentAfterWrongAnswer], a
ret
@@ -122,7 +122,7 @@
text_promptbutton
text_asm
- ld a, [hBackupGymGateIndex]
+ ldh a, [hBackupGymGateIndex]
AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0
ld c, a
ld b, FLAG_TEST
@@ -144,9 +144,9 @@
; Update the overworld map with open floor blocks or locked gate blocks
; depending on event flags.
ld a, 6
- ld [hGymGateIndex], a
+ ldh [hGymGateIndex], a
.loop
- ld a, [hGymGateIndex]
+ ldh a, [hGymGateIndex]
dec a
add a
add a
@@ -161,8 +161,8 @@
ld a, [hl]
ld [wGymGateTileBlock], a
push bc
- ld a, [hGymGateIndex]
- ld [hBackupGymGateIndex], a
+ ldh a, [hGymGateIndex]
+ ldh [hBackupGymGateIndex], a
AdjustEventBit EVENT_CINNABAR_GYM_GATE0_UNLOCKED, 0
ld c, a
ld b, FLAG_TEST
--- a/engine/events/hidden_objects/gym_statues.asm
+++ b/engine/events/hidden_objects/gym_statues.asm
@@ -1,6 +1,6 @@
GymStatues:
; if in a gym and have the corresponding badge, a = GymStatueText2_id and jp PrintPredefTextID
-; if in a gym and don’t have the corresponding badge, a = GymStatueText1_id and jp PrintPredefTextID
+; if in a gym and don't have the corresponding badge, a = GymStatueText1_id and jp PrintPredefTextID
; else ret
call EnableAutoTextBoxDrawing
ld a, [wSpritePlayerStateData1FacingDirection]
--- a/engine/events/hidden_objects/museum_fossils.asm
+++ b/engine/events/hidden_objects/museum_fossils.asm
@@ -26,10 +26,10 @@
; Displays a pokemon's front sprite in a pop-up window.
; [wcf91] = pokemon internal id number
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
xor a
- ld [hWY], a
+ ldh [hWY], a
call SaveScreenTilesToBuffer1
ld a, MON_SPRITE_POPUP
ld [wTextBoxID], a
@@ -38,15 +38,15 @@
ld a, [wcf91]
ld [wd0b5], a
call GetMonHeader
- ld de, vChars1 + $310
+ ld de, vChars1 tile $31
call LoadMonFrontSprite
ld a, $80
- ld [hStartTileID], a
- coord hl, 10, 11
+ ldh [hStartTileID], a
+ hlcoord 10, 11
predef AnimateSendingOutMon
call WaitForTextScrollButtonPress
call LoadScreenTilesFromBuffer1
call Delay3
ld a, $90
- ld [hWY], a
+ ldh [hWY], a
ret
--- a/engine/events/hidden_objects/safari_game.asm
+++ b/engine/events/hidden_objects/safari_game.asm
@@ -37,12 +37,12 @@
cp SFX_SAFARI_ZONE_PA
jr nz, .waitForMusicToPlay
ld a, TEXT_SAFARI_GAME_OVER
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
ld [wPlayerMovingDirection], a
ld a, SAFARI_ZONE_GATE
- ld [hWarpDestinationMap], a
+ ldh [hWarpDestinationMap], a
ld a, $3
ld [wDestinationWarpID], a
ld a, $5
--- a/engine/events/hidden_objects/school_blackboard.asm
+++ b/engine/events/hidden_objects/school_blackboard.asm
@@ -26,11 +26,11 @@
.linkHelpLoop
ld hl, wd730
set 6, [hl]
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 8
ld c, 13
call TextBoxBorder
- coord hl, 2, 2
+ hlcoord 2, 2
ld de, HowToLinkText
call PlaceString
ld hl, LinkCableHelpText2
@@ -110,13 +110,13 @@
.blackboardLoop
ld hl, wd730
set 6, [hl]
- coord hl, 0, 0
+ hlcoord 0, 0
lb bc, 6, 10
call TextBoxBorder
- coord hl, 1, 2
+ hlcoord 1, 2
ld de, StatusAilmentText1
call PlaceString
- coord hl, 6, 2
+ hlcoord 6, 2
ld de, StatusAilmentText2
call PlaceString
ld hl, ViridianSchoolBlackboardText2
--- a/engine/events/hidden_objects/town_map.asm
+++ b/engine/events/hidden_objects/town_map.asm
@@ -8,15 +8,15 @@
set 6, [hl]
call GBPalWhiteOutWithDelay3
xor a
- ld [hWY], a
+ ldh [hWY], a
inc a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call LoadFontTilePatterns
- callba DisplayTownMap
+ farcall DisplayTownMap
ld hl, wd730
res 6, [hl]
ld de, TextScriptEnd
push de
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
jp CloseTextDisplay
--- a/engine/events/hidden_objects/vermilion_gym_trash.asm
+++ b/engine/events/hidden_objects/vermilion_gym_trash.asm
@@ -56,12 +56,12 @@
; first lock was in trash can 1 or 3. However, due to this bug, trash can 0 can
; have the second lock regardless of which trash can had the first lock.
- ld [hGymTrashCanRandNumMask], a
+ ldh [hGymTrashCanRandNumMask], a
push hl
call Random
swap a
ld b, a
- ld a, [hGymTrashCanRandNumMask]
+ ldh a, [hGymTrashCanRandNumMask]
and b
dec a
pop hl
--- a/engine/events/in_game_trades.asm
+++ b/engine/events/in_game_trades.asm
@@ -137,10 +137,10 @@
ld [wMonDataLocation], a
call AddPartyMon
call InGameTrade_CopyDataToReceivedMon
- callab EvolveTradeMon
+ callfar EvolveTradeMon
call ClearScreen
call InGameTrade_RestoreScreen
- callba RedrawMapView
+ farcall RedrawMapView
and a
ld a, $3
jr .tradeSucceeded
@@ -159,7 +159,7 @@
call LoadGBPal
ld c, 10
call DelayFrames
- jpba LoadWildData
+ farjp LoadWildData
InGameTrade_PrepareTradeData:
ld hl, wTradedPlayerMonSpecies
--- a/engine/events/oaks_aide.asm
+++ b/engine/events/oaks_aide.asm
@@ -9,9 +9,9 @@
ld b, wPokedexOwnedEnd - wPokedexOwned
call CountSetBits
ld a, [wNumSetBits]
- ld [hOaksAideNumMonsOwned], a
+ ldh [hOaksAideNumMonsOwned], a
ld b, a
- ld a, [hOaksAideRequirement]
+ ldh a, [hOaksAideRequirement]
cp b
jr z, .giveItem
jr nc, .notEnoughOwnedMons
@@ -18,7 +18,7 @@
.giveItem
ld hl, OaksAideHereYouGoText
call PrintText
- ld a, [hOaksAideRewardItem]
+ ldh a, [hOaksAideRewardItem]
ld b, a
ld c, 1
call GiveItem
@@ -42,7 +42,7 @@
call PrintText
ld a, $ff
.done
- ld [hOaksAideResult], a
+ ldh [hOaksAideResult], a
ret
OaksAideHiText:
--- a/engine/events/pick_up_item.asm
+++ b/engine/events/pick_up_item.asm
@@ -1,7 +1,7 @@
PickUpItem:
call EnableAutoTextBoxDrawing
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
ld b, a
ld hl, wMissableObjectList
.missableObjectsListLoop
@@ -15,10 +15,10 @@
.isMissable
ld a, [hl]
- ld [hMissableObjectIndex], a
+ ldh [hMissableObjectIndex], a
ld hl, wMapSpriteExtraData
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
dec a
add a
ld d, 0
@@ -30,7 +30,7 @@
call GiveItem
jr nc, .BagFull
- ld a, [hMissableObjectIndex]
+ ldh a, [hMissableObjectIndex]
ld [wMissableObjectIndex], a
predef HideObject
ld a, 1
--- a/engine/events/poison.asm
+++ b/engine/events/poison.asm
@@ -52,7 +52,7 @@
ld [wJoyIgnore], a
call EnableAutoTextBoxDrawing
ld a, TEXT_MON_FAINTED
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
pop de
pop hl
@@ -99,7 +99,7 @@
jr nz, .noBlackOut
call EnableAutoTextBoxDrawing
ld a, TEXT_BLACKED_OUT
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld hl, wd72e
set 5, [hl]
--- a/engine/events/pokecenter.asm
+++ b/engine/events/pokecenter.asm
@@ -22,7 +22,7 @@
ld [wSprite01StateData1ImageIndex], a ; make the nurse turn to face the machine
call Delay3
predef HealParty
- callba AnimateHealingMachine ; do the healing machine animation
+ farcall AnimateHealingMachine ; do the healing machine animation
xor a
ld [wAudioFadeOutControl], a
ld a, [wAudioSavedROMBank]
--- a/engine/events/pokedex_rating.asm
+++ b/engine/events/pokedex_rating.asm
@@ -3,17 +3,17 @@
ld b, wPokedexSeenEnd - wPokedexSeen
call CountSetBits
ld a, [wNumSetBits]
- ld [hDexRatingNumMonsSeen], a
+ ldh [hDexRatingNumMonsSeen], a
ld hl, wPokedexOwned
ld b, wPokedexOwnedEnd - wPokedexOwned
call CountSetBits
ld a, [wNumSetBits]
- ld [hDexRatingNumMonsOwned], a
+ ldh [hDexRatingNumMonsOwned], a
ld hl, DexRatingsTable
.findRating
ld a, [hli]
ld b, a
- ld a, [hDexRatingNumMonsOwned]
+ ldh a, [hDexRatingNumMonsOwned]
cp b
jr c, .foundRating
inc hl
@@ -30,14 +30,14 @@
call PrintText
pop hl
call PrintText
- callba PlayPokedexRatingSfx
+ farcall PlayPokedexRatingSfx
jp WaitForTextScrollButtonPress
.hallOfFame
ld de, wDexRatingNumMonsSeen
- ld a, [hDexRatingNumMonsSeen]
+ ldh a, [hDexRatingNumMonsSeen]
ld [de], a
inc de
- ld a, [hDexRatingNumMonsOwned]
+ ldh a, [hDexRatingNumMonsOwned]
ld [de], a
inc de
.copyRatingTextLoop
--- a/engine/events/pokemart.asm
+++ b/engine/events/pokemart.asm
@@ -42,7 +42,7 @@
ld [wPrintItemPrices], a
ld a, INIT_BAG_ITEM_LIST
ld [wInitListType], a
- callab InitList
+ callfar InitList
ld a, [wNumBagItems]
and a
@@ -77,7 +77,7 @@
jr c, .unsellableItem
ld a, PRICEDITEMLISTMENU
ld [wListMenuID], a
- ld [hHalveItemPrices], a ; halve prices when selling
+ ldh [hHalveItemPrices], a ; halve prices when selling
call DisplayChooseQuantityMenu
inc a
jr z, .sellMenuLoop ; if the player closed the choose quantity menu with the B button
@@ -84,7 +84,7 @@
ld hl, PokemartTellSellPriceText
lb bc, 14, 1 ; location that PrintText always prints to, this is useless
call PrintText
- coord hl, 14, 7
+ hlcoord 14, 7
lb bc, 8, 15
ld a, TWO_OPTION_MENU
ld [wTextBoxID], a
@@ -126,7 +126,7 @@
ld [wPrintItemPrices], a
ld a, INIT_OTHER_ITEM_LIST
ld [wInitListType], a
- callab InitList
+ callfar InitList
ld hl, PokemartBuyingGreetingText
call PrintText
@@ -152,7 +152,7 @@
ld a, 99
ld [wMaxItemQuantity], a
xor a
- ld [hHalveItemPrices], a ; don't halve item prices when buying
+ ldh [hHalveItemPrices], a ; don't halve item prices when buying
call DisplayChooseQuantityMenu
inc a
jr z, .buyMenuLoop ; if the player closed the choose quantity menu with the B button
@@ -162,7 +162,7 @@
call CopyStringToCF4B ; copy name to wcf4b
ld hl, PokemartTellBuyPriceText
call PrintText
- coord hl, 14, 7
+ hlcoord 14, 7
lb bc, 8, 15
ld a, TWO_OPTION_MENU
ld [wTextBoxID], a
--- a/engine/events/prize_menu.asm
+++ b/engine/events/prize_menu.asm
@@ -22,7 +22,7 @@
ld a, $01
ld [wTopMenuItemX], a
call PrintPrizePrice
- coord hl, 0, 2
+ hlcoord 0, 2
ld b, 8
ld c, 16
call TextBoxBorder
@@ -64,7 +64,7 @@
; display the three prizes' names
; (distinguishing between Pokemon names
; and Items (specifically TMs) names)
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
sub 3 ; prize-texts' id are 3, 4 and 5
ld [wWhichPrizeWindow], a ; prize-texts' id (relative, i.e. 0, 1 or 2)
add a
@@ -93,17 +93,17 @@
ld a, [wPrize1]
ld [wd11e], a
call GetItemName
- coord hl, 2, 4
+ hlcoord 2, 4
call PlaceString
ld a, [wPrize2]
ld [wd11e], a
call GetItemName
- coord hl, 2, 6
+ hlcoord 2, 6
call PlaceString
ld a, [wPrize3]
ld [wd11e], a
call GetItemName
- coord hl, 2, 8
+ hlcoord 2, 8
call PlaceString
jr .putNoThanksText
.putMonName
@@ -110,25 +110,25 @@
ld a, [wPrize1]
ld [wd11e], a
call GetMonName
- coord hl, 2, 4
+ hlcoord 2, 4
call PlaceString
ld a, [wPrize2]
ld [wd11e], a
call GetMonName
- coord hl, 2, 6
+ hlcoord 2, 6
call PlaceString
ld a, [wPrize3]
ld [wd11e], a
call GetMonName
- coord hl, 2, 8
+ hlcoord 2, 8
call PlaceString
.putNoThanksText
- coord hl, 2, 10
+ hlcoord 2, 10
ld de, NoThanksText
call PlaceString
; put prices on the right side of the textbox
ld de, wPrize1Price
- coord hl, 13, 5
+ hlcoord 13, 5
; reg. c:
; [low nybble] number of bytes
; [bits 765 = %100] space-padding (not zero-padding)
@@ -135,11 +135,11 @@
ld c, (1 << 7 | 2)
call PrintBCDNumber
ld de, wPrize2Price
- coord hl, 13, 7
+ hlcoord 13, 7
ld c, (1 << 7 | 2)
call PrintBCDNumber
ld de, wPrize3Price
- coord hl, 13, 9
+ hlcoord 13, 9
ld c, (1 << 7 | 2)
jp PrintBCDNumber
@@ -146,18 +146,18 @@
INCLUDE "data/events/prizes.asm"
PrintPrizePrice:
- coord hl, 11, 0
+ hlcoord 11, 0
ld b, 1
ld c, 7
call TextBoxBorder
call UpdateSprites
- coord hl, 12, 0
+ hlcoord 12, 0
ld de, .CoinString
call PlaceString
- coord hl, 13, 1
+ hlcoord 13, 1
ld de, .SixSpacesString
call PlaceString
- coord hl, 13, 1
+ hlcoord 13, 1
ld de, wPlayerCoins
ld c, %10000010
call PrintBCDNumber
@@ -177,11 +177,11 @@
ld hl, wPrize1Price
add hl, de ; get selected prize's price
xor a
- ld [hUnusedCoinsByte], a
+ ldh [hUnusedCoinsByte], a
ld a, [hli]
- ld [hCoins], a
+ ldh [hCoins], a
ld a, [hl]
- ld [hCoins + 1], a
+ ldh [hCoins + 1], a
ret
HandlePrizeChoice:
--- a/engine/events/saffron_guards.asm
+++ b/engine/events/saffron_guards.asm
@@ -2,7 +2,7 @@
ld hl, GuardDrinksList
.drinkLoop
ld a, [hli]
- ld [hItemToRemoveID], a
+ ldh [hItemToRemoveID], a
and a
ret z
push hl
@@ -10,6 +10,6 @@
call IsItemInBag
pop hl
jr z, .drinkLoop
- jpba RemoveItemByID
+ farjp RemoveItemByID
INCLUDE "data/items/guard_drink_items.asm"
--- a/engine/events/starter_dex.asm
+++ b/engine/events/starter_dex.asm
@@ -1,9 +1,9 @@
; this function temporarily makes the starters (and Ivysaur) seen
; so that the full Pokedex information gets displayed in Oak's lab
StarterDex:
- ld a, %01001011 ; set starter flags
+ ld a, 1 << (DEX_BULBASAUR - 1) | 1 << (DEX_IVYSAUR - 1) | 1 << (DEX_CHARMANDER - 1) | 1 << (DEX_SQUIRTLE - 1)
ld [wPokedexOwned], a
predef ShowPokedexData
- xor a ; unset starter flags
+ xor a
ld [wPokedexOwned], a
ret
--- a/engine/events/vending_machine.asm
+++ b/engine/events/vending_machine.asm
@@ -17,15 +17,15 @@
ld [wTopMenuItemX], a
ld hl, wd730
set 6, [hl]
- coord hl, 0, 3
+ hlcoord 0, 3
ld b, 8
ld c, 12
call TextBoxBorder
call UpdateSprites
- coord hl, 2, 5
+ hlcoord 2, 5
ld de, DrinkText
call PlaceString
- coord hl, 9, 6
+ hlcoord 9, 6
ld de, DrinkPriceText
call PlaceString
ld hl, wd730
@@ -37,10 +37,10 @@
cp 3 ; chose Cancel?
jr z, .notThirsty
xor a
- ld [hMoney], a
- ld [hMoney + 2], a
+ ldh [hMoney], a
+ ldh [hMoney + 2], a
ld a, $2
- ld [hMoney + 1], a
+ ldh [hMoney + 1], a
call HasEnoughMoney
jr nc, .enoughMoney
ld hl, VendingMachineText4
@@ -47,7 +47,7 @@
jp PrintText
.enoughMoney
call LoadVendingMachineItem
- ld a, [hVendingMachineItem]
+ ldh a, [hVendingMachineItem]
ld b, a
ld c, 1
call GiveItem
@@ -121,13 +121,13 @@
ld e, a
add hl, de
ld a, [hli]
- ld [hVendingMachineItem], a
+ ldh [hVendingMachineItem], a
ld a, [hli]
- ld [hVendingMachinePrice], a
+ ldh [hVendingMachinePrice], a
ld a, [hli]
- ld [hVendingMachinePrice + 1], a
+ ldh [hVendingMachinePrice + 1], a
ld a, [hl]
- ld [hVendingMachinePrice + 2], a
+ ldh [hVendingMachinePrice + 2], a
ret
INCLUDE "data/items/vending_prices.asm"
--- a/engine/gfx/hp_bar.asm
+++ b/engine/gfx/hp_bar.asm
@@ -21,22 +21,22 @@
rr e
srl d
rr e
- ld a, [hMultiplicand+1]
+ ldh a, [hMultiplicand+1]
ld b, a
- ld a, [hMultiplicand+2]
+ ldh a, [hMultiplicand+2]
srl b ; divide multiplication result as well
rr a
srl b
rr a
- ld [hMultiplicand+2], a
+ ldh [hMultiplicand+2], a
ld a, b
- ld [hMultiplicand+1], a
+ ldh [hMultiplicand+1], a
.maxHPSmaller256
ld a, e
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, $4
call Divide
- ld a, [hMultiplicand+2]
+ ldh a, [hMultiplicand+2]
ld e, a ; e = bc * 48 / de (num of pixels of HP bar)
pop hl
and a
@@ -213,7 +213,7 @@
ld a, [wHPBarOldHP + 1]
ld [wHPBarTempHP], a
push hl
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
bit 0, a
jr z, .asm_fb15
ld de, $9
--- a/engine/gfx/load_pokedex_tiles.asm
+++ b/engine/gfx/load_pokedex_tiles.asm
@@ -2,10 +2,10 @@
LoadPokedexTilePatterns:
call LoadHpBarAndStatusTilePatterns
ld de, PokedexTileGraphics
- ld hl, vChars2 + $600
+ ld hl, vChars2 tile $60
lb bc, BANK(PokedexTileGraphics), (PokedexTileGraphicsEnd - PokedexTileGraphics) / $10
call CopyVideoData
ld de, PokeballTileGraphics
- ld hl, vChars2 + $720
- lb bc, BANK(PokeballTileGraphics), $01
+ ld hl, vChars2 tile $72
+ lb bc, BANK(PokeballTileGraphics), 1
jp CopyVideoData ; load pokeball tile for marking caught mons
--- a/engine/gfx/mon_icons.asm
+++ b/engine/gfx/mon_icons.asm
@@ -169,7 +169,7 @@
push hl
push de
push bc
- ld a, [hPartyMonIndex]
+ ldh a, [hPartyMonIndex]
ld hl, wPartySpecies
ld e, a
ld d, 0
@@ -187,7 +187,7 @@
; Write OAM blocks for the party sprite of the species in
; [wMonPartySpriteSpecies].
xor a
- ld [hPartyMonIndex], a
+ ldh [hPartyMonIndex], a
ld a, [wMonPartySpriteSpecies]
call GetPartyMonSpriteID
ld [wOAMBaseTile], a
@@ -201,11 +201,11 @@
ld a, [wcf91]
call GetPartyMonSpriteID
push af
- ld hl, vSprites
+ ld hl, vSprites tile $00
call .LoadTilePatterns
pop af
add $54
- ld hl, vSprites + $40
+ ld hl, vSprites tile $04
call .LoadTilePatterns
xor a
ld [wMonPartySpriteSpecies], a
@@ -236,8 +236,8 @@
; make a copy at wMonPartySpritesSavedOAM.
push af
ld c, $10
- ld h, wOAMBuffer / $100
- ld a, [hPartyMonIndex]
+ ld h, HIGH(wOAMBuffer)
+ ldh a, [hPartyMonIndex]
swap a
ld l, a
add $10
--- a/engine/gfx/oam_dma.asm
+++ b/engine/gfx/oam_dma.asm
@@ -1,7 +1,7 @@
WriteDMACodeToHRAM::
; Since no other memory is available during OAM DMA,
; DMARoutine is copied to HRAM and executed there.
- ld c, hDMARoutine % $100
+ ld c, LOW(hDMARoutine)
ld b, DMARoutineEnd - DMARoutine
ld hl, DMARoutine
.copy
@@ -14,8 +14,8 @@
DMARoutine:
; initiate DMA
- ld a, wOAMBuffer / $100
- ld [rDMA], a
+ ld a, HIGH(wOAMBuffer)
+ ldh [rDMA], a
; wait for DMA to finish
ld a, $28
--- a/engine/gfx/palettes.asm
+++ b/engine/gfx/palettes.asm
@@ -335,13 +335,13 @@
push bc
; disable ReadJoypad to prevent it from interfering with sending the packet
ld a, 1
- ld [hDisableJoypadPolling], a
+ ldh [hDisableJoypadPolling], a
; send RESET signal (P14=LOW, P15=LOW)
xor a
- ld [rJOYP], a
+ ldh [rJOYP], a
; set P14=HIGH, P15=HIGH
ld a, $30
- ld [rJOYP], a
+ ldh [rJOYP], a
;load length of packets (16 bytes)
ld b, $10
.nextByte
@@ -358,10 +358,10 @@
; else (if 0th bit is zero) set P14=LOW,P15=HIGH (send bit 0)
ld a, $20
.next0
- ld [rJOYP], a
+ ldh [rJOYP], a
; must set P14=HIGH,P15=HIGH between each "pulse"
ld a, $30
- ld [rJOYP], a
+ 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)
rr d
@@ -372,12 +372,12 @@
jr nz, .nextByte
; send bit 1 as a "stop bit" (end of parameter data)
ld a, $20
- ld [rJOYP], a
+ ldh [rJOYP], a
; set P14=HIGH,P15=HIGH
ld a, $30
- ld [rJOYP], a
+ ldh [rJOYP], a
xor a
- ld [hDisableJoypadPolling], a
+ ldh [hDisableJoypadPolling], a
; wait for about 70000 cycles
call Wait7000
; restore (previously pushed) number of packets
@@ -457,41 +457,41 @@
di
call SendSGBPacket
ld a, 1
- ld [hDisableJoypadPolling], a
+ ldh [hDisableJoypadPolling], a
ei
call Wait7000
- ld a, [rJOYP]
+ ldh a, [rJOYP]
and $3
cp $3
jr nz, .isSGB
ld a, $20
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
call Wait7000
call Wait7000
ld a, $30
- ld [rJOYP], a
+ ldh [rJOYP], a
call Wait7000
call Wait7000
ld a, $10
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
call Wait7000
call Wait7000
ld a, $30
- ld [rJOYP], a
- ld a, [rJOYP]
- ld a, [rJOYP]
- ld a, [rJOYP]
+ ldh [rJOYP], a
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
+ ldh a, [rJOYP]
call Wait7000
call Wait7000
- ld a, [rJOYP]
+ ldh a, [rJOYP]
and $3
cp $3
jr nz, .isSGB
@@ -513,7 +513,7 @@
push de
call DisableLCD
ld a, $e4
- ld [rBGP], a
+ ldh [rBGP], a
ld de, vChars1
ld a, [wCopyingSGBTileData]
and a
@@ -539,11 +539,11 @@
dec c
jr nz, .loop
ld a, $e3
- ld [rLCDC], a
+ ldh [rLCDC], a
pop hl
call SendSGBPacket
xor a
- ld [rBGP], a
+ ldh [rBGP], a
ei
ret
@@ -577,7 +577,7 @@
InitGBCPalettes:
ld a, $80 ; index 0 with auto-increment
- ld [rBGPI], a
+ ldh [rBGPI], a
inc hl
ld c, $20
.loop
@@ -592,7 +592,7 @@
inc d
.noCarry
ld a, [de]
- ld [rBGPD], a
+ ldh [rBGPD], a
dec c
jr nz, .loop
ret
--- a/engine/gfx/screen_effects.asm
+++ b/engine/gfx/screen_effects.asm
@@ -1,14 +1,14 @@
; b = new colour for BG colour 0 (usually white) for 4 frames
ChangeBGPalColor0_4Frames:
call GetPredefRegisters
- ld a, [rBGP]
+ ldh a, [rBGP]
or b
- ld [rBGP], a
+ ldh [rBGP], a
ld c, 4
call DelayFrames
- ld a, [rBGP]
+ ldh a, [rBGP]
and %11111100
- ld [rBGP], a
+ ldh [rBGP], a
ret
PredefShakeScreenVertically:
@@ -19,7 +19,7 @@
ld [wDisableVBlankWYUpdate], a
xor a
.loop
- ld [hMutateWY], a
+ ldh [hMutateWY], a
call .MutateWY
call .MutateWY
dec b
@@ -30,10 +30,10 @@
ret
.MutateWY
- ld a, [hMutateWY]
+ ldh a, [hMutateWY]
xor b
- ld [hMutateWY], a
- ld [rWY], a
+ ldh [hMutateWY], a
+ ldh [rWY], a
ld c, 3
jp DelayFrames
@@ -43,7 +43,7 @@
call GetPredefRegisters
xor a
.loop
- ld [hMutateWX], a
+ ldh [hMutateWX], a
call .MutateWX
ld c, 1
call DelayFrames
@@ -54,18 +54,18 @@
; restore normal WX
ld a, 7
- ld [rWX], a
+ ldh [rWX], a
ret
.MutateWX
- ld a, [hMutateWX]
+ ldh a, [hMutateWX]
xor b
- ld [hMutateWX], a
+ ldh [hMutateWX], a
bit 7, a
jr z, .skipZeroing
xor a ; zero a if it's negative
.skipZeroing
add 7
- ld [rWX], a
+ ldh [rWX], a
ld c, 4
jp DelayFrames
--- a/engine/gfx/sprite_oam.asm
+++ b/engine/gfx/sprite_oam.asm
@@ -13,21 +13,21 @@
.updateEnabled
xor a
- ld [hOAMBufferOffset], a
+ ldh [hOAMBufferOffset], a
.spriteLoop
- ld [hSpriteOffset2], a
+ ldh [hSpriteOffset2], a
- ld d, wSpriteStateData1 / $100
- ld a, [hSpriteOffset2]
+ ld d, HIGH(wSpriteStateData1)
+ ldh a, [hSpriteOffset2]
ld e, a
- ld a, [de] ; c1x0
+ ld a, [de] ; [x#SPRITESTATEDATA1_PICTUREID]
and a
jp z, .nextSprite
inc e
inc e
- ld a, [de] ; c1x2 (facing/anim)
+ ld a, [de] ; [x#SPRITESTATEDATA1_IMAGEINDEX]
ld [wd5cd], a
cp $ff ; off-screen (don't draw)
jr nz, .visible
@@ -56,9 +56,9 @@
ld a, e
add $5
ld e, a
- ld a, [de] ; c2x7
+ ld a, [de] ; [x#SPRITESTATEDATA2_GRASSPRIORITY]
and $80
- ld [hSpritePriority], a ; temp store sprite priority
+ ldh [hSpritePriority], a ; temp store sprite priority
pop de
; read the entry from the table
@@ -77,17 +77,17 @@
call GetSpriteScreenXY
- ld a, [hOAMBufferOffset]
+ ldh a, [hOAMBufferOffset]
ld e, a
- ld d, wOAMBuffer / $100
+ ld d, HIGH(wOAMBuffer)
.tileLoop
- ld a, [hSpriteScreenY] ; temp for sprite Y position
+ ldh a, [hSpriteScreenY] ; temp for sprite Y position
add $10 ; Y=16 is top of screen (Y=0 is invisible)
add [hl] ; add Y offset from table
ld [de], a ; write new sprite OAM Y position
inc hl
- ld a, [hSpriteScreenX] ; temp for sprite X position
+ ldh a, [hSpriteScreenX] ; temp for sprite X position
add $8 ; X=8 is left of screen (X=0 is invisible)
add [hl] ; add X offset from table
inc e
@@ -98,7 +98,7 @@
push bc
ld b, a
- ld a, [wd5cd] ; temp copy of c1x2
+ ld a, [wd5cd] ; temp copy of [x#SPRITESTATEDATA1_IMAGEINDEX]
swap a ; high nybble determines sprite used (0 is always player sprite, next are some npcs)
and $f
@@ -126,7 +126,7 @@
ld a, [hl]
bit 1, a ; is the tile allowed to set the sprite priority bit?
jr z, .skipPriority
- ld a, [hSpritePriority]
+ ldh a, [hSpritePriority]
or [hl]
.skipPriority
inc hl
@@ -136,18 +136,18 @@
jr z, .tileLoop
ld a, e
- ld [hOAMBufferOffset], a
+ ldh [hOAMBufferOffset], a
.nextSprite
- ld a, [hSpriteOffset2]
+ ldh a, [hSpriteOffset2]
add $10
- cp $100 % $100
+ cp LOW($100)
jp nz, .spriteLoop
; Clear unused OAM.
- ld a, [hOAMBufferOffset]
+ ldh a, [hOAMBufferOffset]
ld l, a
- ld h, wOAMBuffer / $100
+ ld h, HIGH(wOAMBuffer)
ld de, $4
ld b, $a0
ld a, [wd736]
@@ -169,21 +169,21 @@
GetSpriteScreenXY:
inc e
inc e
- ld a, [de] ; c1x4
- ld [hSpriteScreenY], a
+ ld a, [de] ; [x#SPRITESTATEDATA1_YPIXELS]
+ ldh [hSpriteScreenY], a
inc e
inc e
- ld a, [de] ; c1x6
- ld [hSpriteScreenX], a
+ ld a, [de] ; [x#SPRITESTATEDATA1_XPIXELS]
+ ldh [hSpriteScreenX], a
ld a, 4
add e
ld e, a
- ld a, [hSpriteScreenY]
+ ldh a, [hSpriteScreenY]
add 4
and $f0
- ld [de], a ; c1xa (y)
+ ld [de], a ; [x#SPRITESTATEDATA1_YADJUSTED]
inc e
- ld a, [hSpriteScreenX]
+ ldh a, [hSpriteScreenX]
and $f0
- ld [de], a ; c1xb (x)
+ ld [de], a ; [x#SPRITESTATEDATA1_XADJUSTED]
ret
--- a/engine/items/inventory.asm
+++ b/engine/items/inventory.asm
@@ -12,10 +12,10 @@
push hl
push hl
ld d, PC_ITEM_CAPACITY ; how many items the PC can hold
- ld a, wNumBagItems & $FF
+ ld a, LOW(wNumBagItems)
cp l
jr nz, .checkIfInventoryFull
- ld a, wNumBagItems >> 8
+ ld a, HIGH(wNumBagItems)
cp h
jr nz, .checkIfInventoryFull
; if the destination is the bag
--- a/engine/items/item_effects.asm
+++ b/engine/items/item_effects.asm
@@ -147,7 +147,7 @@
; If the player is fighting an unidentified ghost, set the value that indicates
; the Pokémon can't be caught and skip the capture calculations.
- callab IsGhostBattle
+ callfar IsGhostBattle
ld b, $10 ; can't be caught value
jp z, .setAnimData
@@ -239,14 +239,14 @@
; Calculate MaxHP * 255.
xor a
- ld [hMultiplicand], a
+ ldh [hMultiplicand], a
ld hl, wEnemyMonMaxHP
ld a, [hli]
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand + 1], a
ld a, [hl]
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
ld a, 255
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
; Determine BallFactor. It's 8 for Great Balls and 12 for the others.
@@ -260,7 +260,7 @@
; Note that the results of all division operations are floored.
; Calculate (MaxHP * 255) / BallFactor.
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, 4 ; number of bytes in dividend
call Divide
@@ -281,17 +281,17 @@
.skip2
; Let W = ((MaxHP * 255) / BallFactor) / max(HP / 4, 1). Calculate W.
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, 4
call Divide
; If W > 255, store 255 in [hQuotient + 3].
; Let X = min(W, 255) = [hQuotient + 3].
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
and a
jr z, .skip3
ld a, 255
- ld [hQuotient + 3], a
+ ldh [hQuotient + 3], a
.skip3
pop bc ; b = Rand1 - Status
@@ -302,7 +302,7 @@
jr c, .failedToCapture
; If W > 255, the ball captures the Pokémon.
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
and a
jr nz, .captured
@@ -310,7 +310,7 @@
; If Rand2 > X, the ball fails to capture the Pokémon.
ld b, a
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
cp b
jr c, .failedToCapture
@@ -318,17 +318,17 @@
jr .skipShakeCalculations
.failedToCapture
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
ld [wPokeBallCaptureCalcTemp], a ; Save X.
; Calculate CatchRate * 100.
xor a
- ld [hMultiplicand], a
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand], a
+ ldh [hMultiplicand + 1], a
ld a, [wEnemyMonActualCatchRate]
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
ld a, 100
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
; Determine BallFactor2.
@@ -349,7 +349,7 @@
.skip4
; Let Y = (CatchRate * 100) / BallFactor2. Calculate Y.
ld a, b
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, 4
call Divide
@@ -356,7 +356,7 @@
; If Y > 255, there are 3 shakes.
; Note that this shouldn't be possible.
; The maximum value of Y is (255 * 100) / 150 = 170.
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
and a
ld b, $63 ; 3 shakes
jr nz, .setAnimData
@@ -363,12 +363,12 @@
; Calculate X * Y.
ld a, [wPokeBallCaptureCalcTemp]
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
; Calculate (X * Y) / 255.
ld a, 255
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, 4
call Divide
@@ -386,9 +386,9 @@
.addAilmentValue
; If the Pokémon has a status ailment, add Status2.
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
add b
- ld [hQuotient + 3], a
+ ldh [hQuotient + 3], a
.skip5
; Finally determine the number of shakes.
@@ -398,7 +398,7 @@
; 10 ≤ Z < 30: 1 shake
; 30 ≤ Z < 70: 2 shakes
; 70 ≤ Z: 3 shakes
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
cp 10
ld b, $20
jr c, .setAnimData
@@ -422,7 +422,7 @@
ld a, TOSS_ANIM
ld [wAnimationID], a
xor a
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
ld [wAnimationType], a
ld [wDamageMultipliers], a
ld a, [wWhichPokemon]
@@ -495,7 +495,7 @@
ld [wcf91], a
ld a, [wEnemyMonLevel]
ld [wCurEnemyLVL], a
- callab LoadEnemyMonData
+ callfar LoadEnemyMonData
pop af
ld [wcf91], a
pop hl
@@ -632,7 +632,7 @@
ld a, [wIsInBattle]
and a
jp nz, ItemUseNotTime
- jpba DisplayTownMap
+ farjp DisplayTownMap
ItemUseBicycle:
ld a, [wIsInBattle]
@@ -656,7 +656,7 @@
jp nc, NoCyclingAllowedHere
call ItemUseReloadOverworldData
xor a ; no keys pressed
- ld [hJoyHeld], a ; current joypad state
+ ldh [hJoyHeld], a ; current joypad state
inc a
ld [wWalkBikeSurfState], a ; change player state to bicycling
ld hl, GotOnBicycleText
@@ -687,11 +687,11 @@
jp PrintText
.tryToStopSurfing
xor a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
ld d, 16 ; talking range in pixels (normal range)
call IsSpriteInFrontOfPlayer2
res 7, [hl]
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
and a ; is there a sprite in the way?
jr nz, .cannotStopSurfing
ld hl, TilePairCollisionsWater
@@ -778,7 +778,7 @@
ld a, SFX_HEAL_AILMENT
call PlaySoundWaitForCurrent
call WaitForSoundToFinish
- callab TryEvolvingMon ; try to evolve pokemon
+ callfar TryEvolvingMon ; try to evolve pokemon
ld a, [wEvolutionOccurred]
and a
jr z, .noEffect
@@ -1018,18 +1018,18 @@
call AddNTimes
ld a, [hli]
ld [wHPBarMaxHP + 1], a
- ld [hDividend], a
+ ldh [hDividend], a
ld a, [hl]
ld [wHPBarMaxHP], a
- ld [hDividend + 1], a
+ ldh [hDividend + 1], a
ld a, 5
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, 2 ; number of bytes
call Divide ; get 1/5 of max HP of pokemon that used Softboiled
ld bc, (wPartyMon1HP + 1) - (wPartyMon1MaxHP + 1)
add hl, bc ; hl now points to LSB of current HP of pokemon that used Softboiled
; subtract 1/5 of max HP from current HP of pokemon that used Softboiled
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
push af
ld b, a
ld a, [hl]
@@ -1037,7 +1037,7 @@
sub b
ld [hld], a
ld [wHPBarNewHP], a
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
ld b, a
ld a, [hl]
ld [wHPBarOldHP+1], a
@@ -1044,21 +1044,21 @@
sbc b
ld [hl], a
ld [wHPBarNewHP+1], a
- coord hl, 4, 1
+ hlcoord 4, 1
ld a, [wWhichPokemon]
ld bc, 2 * SCREEN_WIDTH
call AddNTimes ; calculate coordinates of HP bar of pokemon that used Softboiled
ld a, SFX_HEAL_HP
call PlaySoundWaitForCurrent
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
set 0, a
- ld [hFlagsFFF6], a
+ ldh [hFlagsFFF6], a
ld a, $02
ld [wHPBarType], a
predef UpdateHPBar2 ; animate HP bar decrease of pokemon that used Softboiled
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
res 0, a
- ld [hFlagsFFF6], a
+ ldh [hFlagsFFF6], a
pop af
ld b, a ; store heal amount (1/5 of max HP)
ld hl, wHPBarOldHP + 1
@@ -1200,15 +1200,15 @@
jr z, .playStatusAilmentCuringSound
ld a, SFX_HEAL_HP
call PlaySoundWaitForCurrent
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
set 0, a
- ld [hFlagsFFF6], a
+ ldh [hFlagsFFF6], a
ld a, $02
ld [wHPBarType], a
predef UpdateHPBar2 ; animate the HP bar lengthening
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
res 0, a
- ld [hFlagsFFF6], a
+ ldh [hFlagsFFF6], a
ld a, REVIVE_MSG
ld [wPartyMenuTypeOrMessageID], a
ld a, [wcf91]
@@ -1224,13 +1224,13 @@
call PlaySoundWaitForCurrent
.showHealingItemMessage
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call ClearScreen
dec a
ld [wUpdateSpritesEnabled], a
call RedrawPartyMenu ; redraws the party menu and displays the message
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld c, 50
call DelayFrames
call WaitForTextScrollButtonPress
@@ -1341,17 +1341,17 @@
push hl
push de
ld d, a
- callab CalcExperience ; calculate experience for next level and store it at hExperience
+ callfar CalcExperience ; calculate experience for next level and store it at hExperience
pop de
pop hl
ld bc, wPartyMon1Exp - wPartyMon1Level
add hl, bc ; hl now points to MSB of experience
; update experience to minimum for new level
- ld a, [hExperience]
+ ldh a, [hExperience]
ld [hli], a
- ld a, [hExperience + 1]
+ ldh a, [hExperience + 1]
ld [hli], a
- ld a, [hExperience + 2]
+ ldh a, [hExperience + 2]
ld [hl], a
pop hl
ld a, [wWhichPokemon]
@@ -1400,7 +1400,7 @@
ld [wMonDataLocation], a
call LoadMonData
ld d, $01
- callab PrintStatsBox ; display new stats text box
+ callfar PrintStatsBox ; display new stats text box
call WaitForTextScrollButtonPress ; wait for button press
xor a ; PLAYER_PARTY_DATA
ld [wMonDataLocation], a
@@ -1407,7 +1407,7 @@
predef LearnMoveFromLevelUp ; learn level up move, if any
xor a
ld [wForceEvolution], a
- callab TryEvolvingMon ; evolve pokemon, if appropriate
+ callfar TryEvolvingMon ; evolve pokemon, if appropriate
ld a, $01
ld [wUpdateSpritesEnabled], a
pop af
@@ -1459,7 +1459,7 @@
ld [wAnimationID], a
xor a
ld [wAnimationType], a
- ld [hWhoseTurn], a
+ ldh [hWhoseTurn], a
ld [de], a ; zero escape factor (for bait), zero bait factor (for rock)
.randomLoop ; loop until a random number less than 5 is generated
call Random
@@ -1698,8 +1698,8 @@
call LoadScreenTilesFromBuffer1 ; restore saved screen
call Delay3
xor a
- ld [hWhoseTurn], a ; set turn to player's turn
- callba StatModifierUpEffect ; do stat increase move
+ ldh [hWhoseTurn], a ; set turn to player's turn
+ farcall StatModifierUpEffect ; do stat increase move
pop hl
pop af
ld [hld], a ; restore [wPlayerMoveEffect]
@@ -1775,7 +1775,7 @@
and $80
jr nz, .skipMusic
call WaitForSoundToFinish ; wait for sound to end
- callba Music_PokeFluteInBattle ; play in-battle pokeflute music
+ farcall Music_PokeFluteInBattle ; play in-battle pokeflute music
.musicWaitLoop ; wait for music to finish playing
ld a, [wChannelSoundIDs + Ch7]
and a ; music off?
@@ -1927,7 +1927,7 @@
push af
push hl
ld [hl], 0
- callba FishingAnim
+ farcall FishingAnim
pop hl
pop af
ld [hl], a
@@ -1968,7 +1968,7 @@
and a
jp nz, ItemUseNotTime
call ItemUseReloadOverworldData
- callba HiddenItemNear ; check for hidden items
+ farcall HiddenItemNear ; check for hidden items
ld hl, ItemfinderFoundNothingText
jr nc, .printText ; if no hidden items
ld c, 4
@@ -2024,7 +2024,7 @@
call PrintText
xor a
ld [wPlayerMoveListIndex], a
- callab MoveSelectionMenu ; move selection menu
+ callfar MoveSelectionMenu ; move selection menu
ld a, 0
ld [wPlayerMoveListIndex], a
jr nz, .chooseMon
@@ -2221,7 +2221,7 @@
call PrintText
ld hl, TeachMachineMoveText
call PrintText
- coord hl, 14, 7
+ hlcoord 14, 7
lb bc, 8, 15
ld a, TWO_OPTION_MENU
ld [wTextBoxID], a
@@ -2278,7 +2278,7 @@
call PrintText
jr .chooseMon
.checkIfAlreadyLearnedMove
- callab CheckIfMoveIsKnown ; check if the pokemon already knows the move
+ callfar CheckIfMoveIsKnown ; check if the pokemon already knows the move
jr c, .chooseMon
predef LearnMove ; teach move
pop af
@@ -2463,13 +2463,13 @@
AddBonusPP:
push bc
ld a, [de] ; normal max PP of move
- ld [hDividend + 3], a
+ ldh [hDividend + 3], a
xor a
- ld [hDividend], a
- ld [hDividend + 1], a
- ld [hDividend + 2], a
+ ldh [hDividend], a
+ ldh [hDividend + 1], a
+ ldh [hDividend + 2], a
ld a, 5
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, 4
call Divide
ld a, [hl] ; move PP
@@ -2480,7 +2480,7 @@
srl a
ld c, a ; c = number of PP Ups used
.loop
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
cp 8 ; is the amount greater than or equal to 8?
jr c, .addAmount
ld a, 7 ; cap the amount at 7
@@ -2607,7 +2607,7 @@
call CopyStringToCF4B ; copy name to wcf4b
ld hl, IsItOKToTossItemText
call PrintText
- coord hl, 14, 7
+ hlcoord 14, 7
lb bc, 8, 15
ld a, TWO_OPTION_MENU
ld [wTextBoxID], a
@@ -2820,15 +2820,15 @@
push de
ld a, [wCurEnemyLVL]
ld d, a
- callab CalcExperience
+ callfar CalcExperience
pop de
- ld a, [hExperience]
+ ldh a, [hExperience]
ld [de], a
inc de
- ld a, [hExperience + 1]
+ ldh a, [hExperience + 1]
ld [de], a
inc de
- ld a, [hExperience + 2]
+ ldh a, [hExperience + 2]
ld [de], a
inc de
xor a
--- a/engine/items/tm_prices.asm
+++ b/engine/items/tm_prices.asm
@@ -16,10 +16,10 @@
swap a
.highNybbleIsPrice
and $f0
- ld [hItemPrice + 1], a
+ ldh [hItemPrice + 1], a
xor a
- ld [hItemPrice], a
- ld [hItemPrice + 2], a
+ ldh [hItemPrice], a
+ ldh [hItemPrice + 2], a
ret
INCLUDE "data/items/tm_prices.asm"
--- a/engine/items/town_map.asm
+++ b/engine/items/town_map.asm
@@ -6,12 +6,12 @@
ld [hl], $ff
push hl
ld a, $1
- ld [hJoy7], a
+ ldh [hJoy7], a
ld a, [wCurMap]
push af
ld b, $0
call DrawPlayerOrBirdSprite ; player sprite
- coord hl, 1, 0
+ hlcoord 1, 0
ld de, wcd6d
call PlaceString
ld hl, wOAMBuffer
@@ -18,7 +18,7 @@
ld de, wTileMapBackup
ld bc, $10
call CopyData
- ld hl, vSprites + $40
+ ld hl, vSprites tile $04
ld de, TownMapCursor
lb bc, BANK(TownMapCursor), (TownMapCursorEnd - TownMapCursor) / $8
call CopyVideoDataDouble
@@ -28,7 +28,7 @@
jr .enterLoop
.townMapLoop
- coord hl, 0, 0
+ hlcoord 0, 0
lb bc, 1, 20
call ClearScreenArea
ld hl, TownMapOrder
@@ -55,7 +55,7 @@
inc de
cp $50
jr nz, .copyMapName
- coord hl, 1, 0
+ hlcoord 1, 0
ld de, wcd6d
call PlaceString
ld hl, wOAMBuffer + $10
@@ -65,7 +65,7 @@
.inputLoop
call TownMapSpriteBlinkingAnimation
call JoypadLowSensitivity
- ld a, [hJoy5]
+ ldh a, [hJoy5]
ld b, a
and A_BUTTON | B_BUTTON | D_UP | D_DOWN
jr z, .inputLoop
@@ -77,7 +77,7 @@
jr nz, .pressedDown
xor a
ld [wTownMapSpriteBlinkingEnabled], a
- ld [hJoy7], a
+ ldh [hJoy7], a
ld [wAnimCounter], a
call ExitTownMap
pop hl
@@ -118,7 +118,7 @@
push hl
call DisplayWildLocations
call GetMonName
- coord hl, 1, 0
+ hlcoord 1, 0
call PlaceString
ld h, b
ld l, c
@@ -140,11 +140,11 @@
call LoadPlayerSpriteGraphics
call LoadFontTilePatterns
ld de, BirdSprite
- ld hl, vSprites + $40
- lb bc, BANK(BirdSprite), $c
+ ld hl, vSprites tile $04
+ lb bc, BANK(BirdSprite), 12
call CopyVideoData
ld de, TownMapUpArrow
- ld hl, vChars1 + $6d0
+ ld hl, vChars1 tile $6d
lb bc, BANK(TownMapUpArrow), (TownMapUpArrowEnd - TownMapUpArrow) / $8
call CopyVideoDataDouble
call BuildFlyLocationsList
@@ -153,7 +153,7 @@
push af
ld [hl], $ff
push hl
- coord hl, 0, 0
+ hlcoord 0, 0
ld de, ToText
call PlaceString
ld a, [wCurMap]
@@ -160,13 +160,13 @@
ld b, $0
call DrawPlayerOrBirdSprite
ld hl, wFlyLocationsList
- coord de, 18, 0
+ decoord 18, 0
.townMapFlyLoop
ld a, " "
ld [de], a
push hl
push hl
- coord hl, 3, 0
+ hlcoord 3, 0
lb bc, 1, 15
call ClearScreenArea
pop hl
@@ -173,14 +173,14 @@
ld a, [hl]
ld b, $4
call DrawPlayerOrBirdSprite ; draw bird sprite
- coord hl, 3, 0
+ hlcoord 3, 0
ld de, wcd6d
call PlaceString
ld c, 15
call DelayFrames
- coord hl, 18, 0
+ hlcoord 18, 0
ld [hl], "▲"
- coord hl, 19, 0
+ hlcoord 19, 0
ld [hl], "▼"
pop hl
.inputLoop
@@ -187,7 +187,7 @@
push hl
call DelayFrame
call JoypadLowSensitivity
- ld a, [hJoy5]
+ ldh a, [hJoy5]
ld b, a
pop hl
and A_BUTTON | B_BUTTON | D_UP | D_DOWN
@@ -219,7 +219,7 @@
ld [hl], a
ret
.pressedUp
- coord de, 18, 0
+ decoord 18, 0
inc hl
ld a, [hl]
cp $ff
@@ -231,7 +231,7 @@
ld hl, wFlyLocationsList
jp .townMapFlyLoop
.pressedDown
- coord de, 19, 0
+ decoord 19, 0
dec hl
ld a, [hl]
cp $ff
@@ -278,22 +278,22 @@
call GBPalWhiteOutWithDelay3
call ClearScreen
call UpdateSprites
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, $12
ld c, $12
call TextBoxBorder
call DisableLCD
ld hl, WorldMapTileGraphics
- ld de, vChars2 + $600
+ ld de, vChars2 tile $60
ld bc, WorldMapTileGraphicsEnd - WorldMapTileGraphics
ld a, BANK(WorldMapTileGraphics)
call FarCopyData2
ld hl, MonNestIcon
- ld de, vSprites + $40
+ ld de, vSprites tile $04
ld bc, MonNestIconEnd - MonNestIcon
ld a, BANK(MonNestIcon)
call FarCopyDataDouble
- coord hl, 0, 0
+ hlcoord 0, 0
ld de, CompressedMap
.nextTile
ld a, [de]
@@ -366,7 +366,7 @@
jp CopyData
DisplayWildLocations:
- callba FindWildLocationsOfMon
+ farcall FindWildLocationsOfMon
call ZeroOutDuplicatesInList
ld hl, wOAMBuffer
ld de, wTownMapCoords
@@ -395,11 +395,11 @@
and a ; were any OAM entries written?
jr nz, .drawPlayerSprite
; if no OAM entries were written, print area unknown text
- coord hl, 1, 7
+ hlcoord 1, 7
ld b, 2
ld c, 15
call TextBoxBorder
- coord hl, 2, 9
+ hlcoord 2, 9
ld de, AreaUnknownText
call PlaceString
jr .done
--- a/engine/joypad.asm
+++ b/engine/joypad.asm
@@ -2,29 +2,29 @@
; hJoyReleased: (hJoyLast ^ hJoyInput) & hJoyLast
; hJoyPressed: (hJoyLast ^ hJoyInput) & hJoyInput
- ld a, [hJoyInput]
+ ldh a, [hJoyInput]
cp A_BUTTON + B_BUTTON + SELECT + START ; soft reset
jp z, TrySoftReset
ld b, a
- ld a, [hJoyLast]
+ ldh a, [hJoyLast]
ld e, a
xor b
ld d, a
and e
- ld [hJoyReleased], a
+ ldh [hJoyReleased], a
ld a, d
and b
- ld [hJoyPressed], a
+ ldh [hJoyPressed], a
ld a, b
- ld [hJoyLast], a
+ ldh [hJoyLast], a
ld a, [wd730]
bit 5, a
jr nz, DiscardButtonPresses
- ld a, [hJoyLast]
- ld [hJoyHeld], a
+ ldh a, [hJoyLast]
+ ldh [hJoyHeld], a
ld a, [wJoyIgnore]
and a
@@ -32,19 +32,19 @@
cpl
ld b, a
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
and b
- ld [hJoyHeld], a
- ld a, [hJoyPressed]
+ ldh [hJoyHeld], a
+ ldh a, [hJoyPressed]
and b
- ld [hJoyPressed], a
+ ldh [hJoyPressed], a
ret
DiscardButtonPresses:
xor a
- ld [hJoyHeld], a
- ld [hJoyPressed], a
- ld [hJoyReleased], a
+ ldh [hJoyHeld], a
+ ldh [hJoyPressed], a
+ ldh [hJoyReleased], a
ret
TrySoftReset:
@@ -52,7 +52,7 @@
; deselect (redundant)
ld a, $30
- ld [rJOYP], a
+ ldh [rJOYP], a
ld hl, hSoftReset
dec [hl]
--- a/engine/link/cable_club.asm
+++ b/engine/link/cable_club.asm
@@ -9,11 +9,11 @@
call LoadFontTilePatterns
call LoadHpBarAndStatusTilePatterns
call LoadTrainerInfoTextBoxTiles
- coord hl, 3, 8
+ hlcoord 3, 8
ld b, 2
ld c, 12
call CableClub_TextBoxBorder
- coord hl, 4, 10
+ hlcoord 4, 10
ld de, PleaseWaitString
call PlaceString
ld hl, wPlayerNumHits
@@ -102,7 +102,7 @@
ld a, SERIAL_PATCH_LIST_PART_TERMINATOR
ld [de], a ; end of part 2
call Serial_SyncAndExchangeNybble
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr nz, .skipSendingTwoZeroBytes
; if using internal clock
@@ -109,18 +109,18 @@
; send two zero bytes for syncing purposes?
call Delay3
xor a
- ld [hSerialSendData], a
+ ldh [hSerialSendData], a
ld a, START_TRANSFER_INTERNAL_CLOCK
- ld [rSC], a
+ ldh [rSC], a
call DelayFrame
xor a
- ld [hSerialSendData], a
+ ldh [hSerialSendData], a
ld a, START_TRANSFER_INTERNAL_CLOCK
- ld [rSC], a
+ ldh [rSC], a
.skipSendingTwoZeroBytes
call Delay3
ld a, (1 << SERIAL)
- ld [rIE], a
+ ldh [rIE], a
ld hl, wSerialRandomNumberListBlock
ld de, wSerialOtherGameboyRandomNumberListBlock
ld bc, $11
@@ -138,10 +138,10 @@
ld bc, $c8
call Serial_ExchangeBytes
ld a, (1 << SERIAL) | (1 << TIMER) | (1 << VBLANK)
- ld [rIE], a
+ ldh [rIE], a
ld a, SFX_STOP_ALL_MUSIC
call PlaySound
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr z, .skipCopyingRandomNumberList ; the list generated by the gameboy clocking the connection is used by both gameboys
ld hl, wSerialOtherGameboyRandomNumberListBlock
@@ -255,15 +255,15 @@
ld hl, wEnemyMons + (SERIAL_PREAMBLE_BYTE - 1)
dec c
jr nz, .unpatchEnemyMonsLoop
- ld a, wEnemyMonOT % $100
+ ld a, LOW(wEnemyMonOT)
ld [wUnusedCF8D], a
- ld a, wEnemyMonOT / $100
+ ld a, HIGH(wEnemyMonOT)
ld [wUnusedCF8D + 1], a
xor a
ld [wTradeCenterPointerTableIndex], a
ld a, SFX_STOP_ALL_MUSIC
call PlaySound
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
ld c, 66
call z, DelayFrames ; delay if using internal clock
@@ -359,7 +359,7 @@
.displayEnemyMonStats
ld a, INIT_ENEMYOT_LIST
ld [wInitListType], a
- callab InitList ; the list isn't used
+ callfar InitList ; the list isn't used
ld hl, wEnemyMons
call TradeCenter_DisplayStats
jp .getNewInput
@@ -399,7 +399,7 @@
ld [wTopMenuItemY], a
ld a, 1
ld [wTopMenuItemX], a
- coord hl, 1, 1
+ hlcoord 1, 1
lb bc, 6, 1
call ClearScreenArea
.playerMonMenu_HandleInput
@@ -418,7 +418,7 @@
; unreachable code
ld a, INIT_PLAYEROT_LIST
ld [wInitListType], a
- callab InitList ; the list isn't used
+ callfar InitList ; the list isn't used
call TradeCenter_DisplayStats
jp .getNewInput
.playerMonMenu_ANotPressed
@@ -464,11 +464,11 @@
dec a
.displayStatsTradeMenu
push af
- coord hl, 0, 14
+ hlcoord 0, 14
ld b, 2
ld c, 18
call CableClub_TextBoxBorder
- coord hl, 2, 16
+ hlcoord 2, 16
ld de, .statsTrade
call PlaceString
xor a
@@ -480,7 +480,7 @@
ld [wTopMenuItemY], a
.selectStatsMenuItem
ld a, " "
- Coorda 11, 16
+ ldcoord_a 11, 16
ld a, D_RIGHT | B_BUTTON | A_BUTTON
ld [wMenuWatchedKeys], a
ld a, 1
@@ -497,7 +497,7 @@
jp .playerMonMenu
.selectTradeMenuItem
ld a, " "
- Coorda 1, 16
+ ldcoord_a 1, 16
ld a, D_LEFT | B_BUTTON | A_BUTTON
ld [wMenuWatchedKeys], a
ld a, 11
@@ -513,7 +513,7 @@
ld [wCurrentMenuItem], a
ld a, INIT_PLAYEROT_LIST
ld [wInitListType], a
- callab InitList ; the list isn't used
+ callfar InitList ; the list isn't used
call TradeCenter_DisplayStats
call LoadScreenTilesFromBuffer1
jp .playerMonMenu
@@ -548,10 +548,10 @@
ld [hl], a
.cancelMenuItem_Loop
ld a, "▶" ; filled arrow cursor
- Coorda 1, 16
+ ldcoord_a 1, 16
.cancelMenuItem_JoypadLoop
call JoypadLowSensitivity
- ld a, [hJoy5]
+ ldh a, [hJoy5]
and a ; pressed anything?
jr z, .cancelMenuItem_JoypadLoop
bit 0, a ; A button pressed?
@@ -560,7 +560,7 @@
jr z, .cancelMenuItem_JoypadLoop
; if Up pressed
ld a, " "
- Coorda 1, 16
+ ldcoord_a 1, 16
ld a, [wPartyCount]
dec a
ld [wCurrentMenuItem], a
@@ -567,7 +567,7 @@
jp .playerMonMenu
.cancelMenuItem_APressed
ld a, "▷" ; unfilled arrow cursor
- Coorda 1, 16
+ ldcoord_a 1, 16
ld a, $f
ld [wSerialExchangeNybbleSendData], a
call Serial_PrintWaitingTextAndSyncAndExchangeNybble
@@ -588,7 +588,7 @@
dec a
ld [wDestinationWarpID], a
call LoadMapData
- callba ClearVariablesOnEnterMap
+ farcall ClearVariablesOnEnterMap
pop hl
pop af
ld [hl], a
@@ -596,15 +596,15 @@
ret
TradeCenter_DrawCancelBox:
- coord hl, 11, 15
+ hlcoord 11, 15
ld a, $7e
ld bc, 2 * SCREEN_WIDTH + 9
call FillMemory
- coord hl, 0, 15
+ hlcoord 0, 15
ld b, 1
ld c, 9
call CableClub_TextBoxBorder
- coord hl, 2, 16
+ hlcoord 2, 16
ld de, CancelTextString
jp PlaceString
@@ -613,7 +613,7 @@
TradeCenter_PlaceSelectedEnemyMonMenuCursor:
ld a, [wSerialSyncAndExchangeNybbleReceiveData]
- coord hl, 1, 9
+ hlcoord 1, 9
ld bc, SCREEN_WIDTH
call AddNTimes
ld [hl], "▷" ; cursor
@@ -630,24 +630,24 @@
jp TradeCenter_DrawCancelBox
TradeCenter_DrawPartyLists:
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 6
ld c, 18
call CableClub_TextBoxBorder
- coord hl, 0, 8
+ hlcoord 0, 8
ld b, 6
ld c, 18
call CableClub_TextBoxBorder
- coord hl, 5, 0
+ hlcoord 5, 0
ld de, wPlayerName
call PlaceString
- coord hl, 5, 8
+ hlcoord 5, 8
ld de, wLinkEnemyTrainerName
call PlaceString
- coord hl, 2, 1
+ hlcoord 2, 1
ld de, wPartySpecies
call TradeCenter_PrintPartyListNames
- coord hl, 2, 9
+ hlcoord 2, 9
ld de, wEnemyPartyMons
; fall through
@@ -663,7 +663,7 @@
push de
push hl
ld a, c
- ld [hPastLeadingZeros], a
+ ldh [hPastLeadingZeros], a
call GetMonName
pop hl
call PlaceString
@@ -684,7 +684,7 @@
ld [wSerialExchangeNybbleReceiveData], a
ld [wMenuWatchMovingOutOfBounds], a
ld [wMenuJoypadPollCount], a
- coord hl, 0, 12
+ hlcoord 0, 12
ld b, 4
ld c, 18
call CableClub_TextBoxBorder
@@ -709,10 +709,10 @@
ld [wd11e], a
call GetMonName
ld hl, WillBeTradedText
- coord bc, 1, 14
+ bccoord 1, 14
call TextCommandProcessor
call SaveScreenTilesToBuffer1
- coord hl, 10, 7
+ hlcoord 10, 7
lb bc, 8, 11
ld a, TRADE_CANCEL_MENU
ld [wTwoOptionMenuID], a
@@ -726,11 +726,11 @@
; if trade cancelled
ld a, $1
ld [wSerialExchangeNybbleSendData], a
- coord hl, 0, 12
+ hlcoord 0, 12
ld b, 4
ld c, 18
call CableClub_TextBoxBorder
- coord hl, 1, 14
+ hlcoord 1, 14
ld de, TradeCanceled
call PlaceString
call Serial_PrintWaitingTextAndSyncAndExchangeNybble
@@ -743,11 +743,11 @@
dec a ; did the other person cancel?
jr nz, .doTrade
; if the other person cancelled
- coord hl, 0, 12
+ hlcoord 0, 12
ld b, 4
ld c, 18
call CableClub_TextBoxBorder
- coord hl, 1, 14
+ hlcoord 1, 14
ld de, TradeCanceled
call PlaceString
jp .tradeCancelled
@@ -837,7 +837,7 @@
call LoadHpBarAndStatusTilePatterns
xor a
ld [wUnusedCC5B], a
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_EXTERNAL_CLOCK
jr z, .usingExternalClock
predef InternalClockTradeAnim
@@ -845,17 +845,17 @@
.usingExternalClock
predef ExternalClockTradeAnim
.tradeCompleted
- callab TryEvolvingMon
+ callfar TryEvolvingMon
call ClearScreen
call LoadTrainerInfoTextBoxTiles
call Serial_PrintWaitingTextAndSyncAndExchangeNybble
ld c, 40
call DelayFrames
- coord hl, 0, 12
+ hlcoord 0, 12
ld b, 4
ld c, 18
call CableClub_TextBoxBorder
- coord hl, 1, 14
+ hlcoord 1, 14
ld de, TradeCompleted
call PlaceString
predef SaveSAVtoSRAM2
@@ -914,7 +914,7 @@
ld [wGrassRate], a
inc a ; LINK_STATE_IN_CABLE_CLUB
ld [wLinkState], a
- ld [hJoy5], a
+ ldh [hJoy5], a
ld a, 10
ld [wAudioFadeOutControl], a
ld a, BANK(Music_Celadon)
@@ -972,6 +972,6 @@
LoadTrainerInfoTextBoxTiles:
ld de, TrainerInfoTextBoxTileGraphics
- ld hl, vChars2 + $760
+ ld hl, vChars2 tile $76
lb bc, BANK(TrainerInfoTextBoxTileGraphics), (TrainerInfoTextBoxTileGraphicsEnd - TrainerInfoTextBoxTileGraphics) / $10
jp CopyVideoData
--- a/engine/link/cable_club_npc.asm
+++ b/engine/link/cable_club_npc.asm
@@ -15,27 +15,27 @@
ld a, 90
ld [wLinkTimeoutCounter], a
.establishConnectionLoop
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr z, .establishedConnection
cp USING_EXTERNAL_CLOCK
jr z, .establishedConnection
ld a, CONNECTION_NOT_ESTABLISHED
- ld [hSerialConnectionStatus], a
+ ldh [hSerialConnectionStatus], a
ld a, ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK
- ld [rSB], a
+ ldh [rSB], a
xor a
- ld [hSerialReceiveData], a
+ ldh [hSerialReceiveData], a
ld a, START_TRANSFER_EXTERNAL_CLOCK
- ld [rSC], a
+ ldh [rSC], a
ld a, [wLinkTimeoutCounter]
dec a
ld [wLinkTimeoutCounter], a
jr z, .failedToEstablishConnection
ld a, ESTABLISH_CONNECTION_WITH_INTERNAL_CLOCK
- ld [rSB], a
+ ldh [rSB], a
ld a, START_TRANSFER_INTERNAL_CLOCK
- ld [rSC], a
+ ldh [rSC], a
call DelayFrame
jr .establishConnectionLoop
.establishedConnection
@@ -54,7 +54,7 @@
ld a, [wCurrentMenuItem]
and a
jr nz, .choseNo
- callab SaveSAVtoSRAM
+ callfar SaveSAVtoSRAM
call WaitForSoundToFinish
ld a, SFX_SAVE
call PlaySoundWaitForCurrent
@@ -65,7 +65,7 @@
ld [hli], a
xor a
ld [hl], a
- ld [hSerialReceivedNewData], a
+ ldh [hSerialReceivedNewData], a
ld [wSerialExchangeNybbleSendData], a
call Serial_SyncAndExchangeNybble
ld hl, wUnknownSerialCounter
@@ -107,7 +107,7 @@
xor a
ld [hld], a
ld [hl], a
- jpab LinkMenu
+ jpfar LinkMenu
CableClubNPCAreaReservedFor2FriendsLinkedByCableText:
text_far _CableClubNPCAreaReservedFor2FriendsLinkedByCableText
@@ -141,11 +141,11 @@
CloseLinkConnection:
call Delay3
ld a, CONNECTION_NOT_ESTABLISHED
- ld [hSerialConnectionStatus], a
+ ldh [hSerialConnectionStatus], a
ld a, ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK
- ld [rSB], a
+ ldh [rSB], a
xor a
- ld [hSerialReceiveData], a
+ ldh [hSerialReceiveData], a
ld a, START_TRANSFER_EXTERNAL_CLOCK
- ld [rSC], a
+ ldh [rSC], a
ret
--- a/engine/link/print_waiting_text.asm
+++ b/engine/link/print_waiting_text.asm
@@ -1,5 +1,5 @@
PrintWaitingText::
- coord hl, 3, 10
+ hlcoord 3, 10
ld b, $1
ld c, $b
ld a, [wIsInBattle]
@@ -10,7 +10,7 @@
.asm_4c17
call CableClub_TextBoxBorder
.asm_4c1a
- coord hl, 4, 11
+ hlcoord 4, 11
ld de, WaitingText
call PlaceString
ld c, 50
--- a/engine/math/bcd.asm
+++ b/engine/math/bcd.asm
@@ -6,39 +6,39 @@
DivideBCD::
xor a
- ld [hDivideBCDBuffer], a
- ld [hDivideBCDBuffer+1], a
- ld [hDivideBCDBuffer+2], a
+ ldh [hDivideBCDBuffer], a
+ ldh [hDivideBCDBuffer+1], a
+ ldh [hDivideBCDBuffer+2], a
ld d, $1
.mulBy10Loop
; multiply the divisor by 10 until the leading digit is nonzero
; to set up the standard long division algorithm
- ld a, [hDivideBCDDivisor]
+ ldh a, [hDivideBCDDivisor]
and $f0
jr nz, .next
inc d
- ld a, [hDivideBCDDivisor]
+ ldh a, [hDivideBCDDivisor]
swap a
and $f0
ld b, a
- ld a, [hDivideBCDDivisor+1]
+ ldh a, [hDivideBCDDivisor+1]
swap a
- ld [hDivideBCDDivisor+1], a
+ ldh [hDivideBCDDivisor+1], a
and $f
or b
- ld [hDivideBCDDivisor], a
- ld a, [hDivideBCDDivisor+1]
+ ldh [hDivideBCDDivisor], a
+ ldh a, [hDivideBCDDivisor+1]
and $f0
ld b, a
- ld a, [hDivideBCDDivisor+2]
+ ldh a, [hDivideBCDDivisor+2]
swap a
- ld [hDivideBCDDivisor+2], a
+ ldh [hDivideBCDDivisor+2], a
and $f
or b
- ld [hDivideBCDDivisor+1], a
- ld a, [hDivideBCDDivisor+2]
+ ldh [hDivideBCDDivisor+1], a
+ ldh a, [hDivideBCDDivisor+2]
and $f0
- ld [hDivideBCDDivisor+2], a
+ ldh [hDivideBCDDivisor+2], a
jr .mulBy10Loop
.next
push de
@@ -48,7 +48,7 @@
ld a, b
swap a
and $f0
- ld [hDivideBCDBuffer], a
+ ldh [hDivideBCDBuffer], a
dec d
jr z, .next2
push de
@@ -55,9 +55,9 @@
call DivideBCD_divDivisorBy10
call DivideBCD_getNextDigit
pop de
- ld a, [hDivideBCDBuffer]
+ ldh a, [hDivideBCDBuffer]
or b
- ld [hDivideBCDBuffer], a
+ ldh [hDivideBCDBuffer], a
dec d
jr z, .next2
push de
@@ -67,7 +67,7 @@
ld a, b
swap a
and $f0
- ld [hDivideBCDBuffer+1], a
+ ldh [hDivideBCDBuffer+1], a
dec d
jr z, .next2
push de
@@ -74,9 +74,9 @@
call DivideBCD_divDivisorBy10
call DivideBCD_getNextDigit
pop de
- ld a, [hDivideBCDBuffer+1]
+ ldh a, [hDivideBCDBuffer+1]
or b
- ld [hDivideBCDBuffer+1], a
+ ldh [hDivideBCDBuffer+1], a
dec d
jr z, .next2
push de
@@ -86,7 +86,7 @@
ld a, b
swap a
and $f0
- ld [hDivideBCDBuffer+2], a
+ ldh [hDivideBCDBuffer+2], a
dec d
jr z, .next2
push de
@@ -93,16 +93,16 @@
call DivideBCD_divDivisorBy10
call DivideBCD_getNextDigit
pop de
- ld a, [hDivideBCDBuffer+2]
+ ldh a, [hDivideBCDBuffer+2]
or b
- ld [hDivideBCDBuffer+2], a
+ ldh [hDivideBCDBuffer+2], a
.next2
- ld a, [hDivideBCDBuffer]
- ld [hDivideBCDQuotient], a ; the same memory location as hDivideBCDDivisor
- ld a, [hDivideBCDBuffer+1]
- ld [hDivideBCDQuotient+1], a
- ld a, [hDivideBCDBuffer+2]
- ld [hDivideBCDQuotient+2], a
+ ldh a, [hDivideBCDBuffer]
+ ldh [hDivideBCDQuotient], a ; the same memory location as hDivideBCDDivisor
+ ldh a, [hDivideBCDBuffer+1]
+ ldh [hDivideBCDQuotient+1], a
+ ldh a, [hDivideBCDBuffer+2]
+ ldh [hDivideBCDQuotient+2], a
pop de
ld a, $6
sub d
@@ -117,28 +117,28 @@
ret
DivideBCD_divDivisorBy10:
- ld a, [hDivideBCDDivisor+2]
+ ldh a, [hDivideBCDDivisor+2]
swap a
and $f
ld b, a
- ld a, [hDivideBCDDivisor+1]
+ ldh a, [hDivideBCDDivisor+1]
swap a
- ld [hDivideBCDDivisor+1], a
+ ldh [hDivideBCDDivisor+1], a
and $f0
or b
- ld [hDivideBCDDivisor+2], a
- ld a, [hDivideBCDDivisor+1]
+ ldh [hDivideBCDDivisor+2], a
+ ldh a, [hDivideBCDDivisor+1]
and $f
ld b, a
- ld a, [hDivideBCDDivisor]
+ ldh a, [hDivideBCDDivisor]
swap a
- ld [hDivideBCDDivisor], a
+ ldh [hDivideBCDDivisor], a
and $f0
or b
- ld [hDivideBCDDivisor+1], a
- ld a, [hDivideBCDDivisor]
+ ldh [hDivideBCDDivisor+1], a
+ ldh a, [hDivideBCDDivisor]
and $f
- ld [hDivideBCDDivisor], a
+ ldh [hDivideBCDDivisor], a
ret
DivideBCD_getNextDigit:
--- a/engine/math/multiply_divide.asm
+++ b/engine/math/multiply_divide.asm
@@ -2,120 +2,120 @@
ld a, $8
ld b, a
xor a
- ld [hProduct], a
- ld [hMultiplyBuffer], a
- ld [hMultiplyBuffer+1], a
- ld [hMultiplyBuffer+2], a
- ld [hMultiplyBuffer+3], a
+ ldh [hProduct], a
+ ldh [hMultiplyBuffer], a
+ ldh [hMultiplyBuffer+1], a
+ ldh [hMultiplyBuffer+2], a
+ ldh [hMultiplyBuffer+3], a
.loop
- ld a, [hMultiplier]
+ ldh a, [hMultiplier]
srl a
- ld [hMultiplier], a ; (aliases: hDivisor, hMultiplier, hPowerOf10)
+ ldh [hMultiplier], a ; (aliases: hDivisor, hMultiplier, hPowerOf10)
jr nc, .smallMultiplier
- ld a, [hMultiplyBuffer+3]
+ ldh a, [hMultiplyBuffer+3]
ld c, a
- ld a, [hMultiplicand+2]
+ ldh a, [hMultiplicand+2]
add c
- ld [hMultiplyBuffer+3], a
- ld a, [hMultiplyBuffer+2]
+ ldh [hMultiplyBuffer+3], a
+ ldh a, [hMultiplyBuffer+2]
ld c, a
- ld a, [hMultiplicand+1]
+ ldh a, [hMultiplicand+1]
adc c
- ld [hMultiplyBuffer+2], a
- ld a, [hMultiplyBuffer+1]
+ ldh [hMultiplyBuffer+2], a
+ ldh a, [hMultiplyBuffer+1]
ld c, a
- ld a, [hMultiplicand] ; (aliases: hMultiplicand)
+ ldh a, [hMultiplicand] ; (aliases: hMultiplicand)
adc c
- ld [hMultiplyBuffer+1], a
- ld a, [hMultiplyBuffer]
+ ldh [hMultiplyBuffer+1], a
+ ldh a, [hMultiplyBuffer]
ld c, a
- ld a, [hProduct] ; (aliases: hProduct, hPastLeadingZeros, hQuotient)
+ ldh a, [hProduct] ; (aliases: hProduct, hPastLeadingZeros, hQuotient)
adc c
- ld [hMultiplyBuffer], a
+ ldh [hMultiplyBuffer], a
.smallMultiplier
dec b
jr z, .done
- ld a, [hMultiplicand+2]
+ ldh a, [hMultiplicand+2]
sla a
- ld [hMultiplicand+2], a
- ld a, [hMultiplicand+1]
+ ldh [hMultiplicand+2], a
+ ldh a, [hMultiplicand+1]
rl a
- ld [hMultiplicand+1], a
- ld a, [hMultiplicand]
+ ldh [hMultiplicand+1], a
+ ldh a, [hMultiplicand]
rl a
- ld [hMultiplicand], a
- ld a, [hProduct]
+ ldh [hMultiplicand], a
+ ldh a, [hProduct]
rl a
- ld [hProduct], a
+ ldh [hProduct], a
jr .loop
.done
- ld a, [hMultiplyBuffer+3]
- ld [hProduct+3], a
- ld a, [hMultiplyBuffer+2]
- ld [hProduct+2], a
- ld a, [hMultiplyBuffer+1]
- ld [hProduct+1], a
- ld a, [hMultiplyBuffer]
- ld [hProduct], a
+ ldh a, [hMultiplyBuffer+3]
+ ldh [hProduct+3], a
+ ldh a, [hMultiplyBuffer+2]
+ ldh [hProduct+2], a
+ ldh a, [hMultiplyBuffer+1]
+ ldh [hProduct+1], a
+ ldh a, [hMultiplyBuffer]
+ ldh [hProduct], a
ret
_Divide::
xor a
- ld [hDivideBuffer], a
- ld [hDivideBuffer+1], a
- ld [hDivideBuffer+2], a
- ld [hDivideBuffer+3], a
- ld [hDivideBuffer+4], a
+ ldh [hDivideBuffer], a
+ ldh [hDivideBuffer+1], a
+ ldh [hDivideBuffer+2], a
+ ldh [hDivideBuffer+3], a
+ ldh [hDivideBuffer+4], a
ld a, $9
ld e, a
.asm_37db3
- ld a, [hDivideBuffer]
+ ldh a, [hDivideBuffer]
ld c, a
- ld a, [hDividend+1] ; (aliases: hMultiplicand)
+ ldh a, [hDividend+1] ; (aliases: hMultiplicand)
sub c
ld d, a
- ld a, [hDivisor] ; (aliases: hDivisor, hMultiplier, hPowerOf10)
+ ldh a, [hDivisor] ; (aliases: hDivisor, hMultiplier, hPowerOf10)
ld c, a
- ld a, [hDividend] ; (aliases: hProduct, hPastLeadingZeros, hQuotient)
+ ldh a, [hDividend] ; (aliases: hProduct, hPastLeadingZeros, hQuotient)
sbc c
jr c, .asm_37dce
- ld [hDividend], a ; (aliases: hProduct, hPastLeadingZeros, hQuotient)
+ ldh [hDividend], a ; (aliases: hProduct, hPastLeadingZeros, hQuotient)
ld a, d
- ld [hDividend+1], a ; (aliases: hMultiplicand)
- ld a, [hDivideBuffer+4]
+ ldh [hDividend+1], a ; (aliases: hMultiplicand)
+ ldh a, [hDivideBuffer+4]
inc a
- ld [hDivideBuffer+4], a
+ ldh [hDivideBuffer+4], a
jr .asm_37db3
.asm_37dce
ld a, b
cp $1
jr z, .asm_37e18
- ld a, [hDivideBuffer+4]
+ ldh a, [hDivideBuffer+4]
sla a
- ld [hDivideBuffer+4], a
- ld a, [hDivideBuffer+3]
+ ldh [hDivideBuffer+4], a
+ ldh a, [hDivideBuffer+3]
rl a
- ld [hDivideBuffer+3], a
- ld a, [hDivideBuffer+2]
+ ldh [hDivideBuffer+3], a
+ ldh a, [hDivideBuffer+2]
rl a
- ld [hDivideBuffer+2], a
- ld a, [hDivideBuffer+1]
+ ldh [hDivideBuffer+2], a
+ ldh a, [hDivideBuffer+1]
rl a
- ld [hDivideBuffer+1], a
+ ldh [hDivideBuffer+1], a
dec e
jr nz, .asm_37e04
ld a, $8
ld e, a
- ld a, [hDivideBuffer]
- ld [hDivisor], a ; (aliases: hDivisor, hMultiplier, hPowerOf10)
+ ldh a, [hDivideBuffer]
+ ldh [hDivisor], a ; (aliases: hDivisor, hMultiplier, hPowerOf10)
xor a
- ld [hDivideBuffer], a
- ld a, [hDividend+1] ; (aliases: hMultiplicand)
- ld [hDividend], a ; (aliases: hProduct, hPastLeadingZeros, hQuotient)
- ld a, [hDividend+2]
- ld [hDividend+1], a ; (aliases: hMultiplicand)
- ld a, [hDividend+3]
- ld [hDividend+2], a
+ ldh [hDivideBuffer], a
+ ldh a, [hDividend+1] ; (aliases: hMultiplicand)
+ ldh [hDividend], a ; (aliases: hProduct, hPastLeadingZeros, hQuotient)
+ ldh a, [hDividend+2]
+ ldh [hDividend+1], a ; (aliases: hMultiplicand)
+ ldh a, [hDividend+3]
+ ldh [hDividend+2], a
.asm_37e04
ld a, e
cp $1
@@ -122,22 +122,22 @@
jr nz, .asm_37e0a
dec b
.asm_37e0a
- ld a, [hDivisor] ; (aliases: hDivisor, hMultiplier, hPowerOf10)
+ ldh a, [hDivisor] ; (aliases: hDivisor, hMultiplier, hPowerOf10)
srl a
- ld [hDivisor], a ; (aliases: hDivisor, hMultiplier, hPowerOf10)
- ld a, [hDivideBuffer]
+ ldh [hDivisor], a ; (aliases: hDivisor, hMultiplier, hPowerOf10)
+ ldh a, [hDivideBuffer]
rr a
- ld [hDivideBuffer], a
+ ldh [hDivideBuffer], a
jr .asm_37db3
.asm_37e18
- ld a, [hDividend+1] ; (aliases: hMultiplicand)
- ld [hRemainder], a ; (aliases: hDivisor, hMultiplier, hPowerOf10)
- ld a, [hDivideBuffer+4]
- ld [hQuotient+3], a
- ld a, [hDivideBuffer+3]
- ld [hQuotient+2], a
- ld a, [hDivideBuffer+2]
- ld [hQuotient+1], a ; (aliases: hMultiplicand)
- ld a, [hDivideBuffer+1]
- ld [hDividend], a ; (aliases: hProduct, hPastLeadingZeros, hQuotient)
+ ldh a, [hDividend+1] ; (aliases: hMultiplicand)
+ ldh [hRemainder], a ; (aliases: hDivisor, hMultiplier, hPowerOf10)
+ ldh a, [hDivideBuffer+4]
+ ldh [hQuotient+3], a
+ ldh a, [hDivideBuffer+3]
+ ldh [hQuotient+2], a
+ ldh a, [hDivideBuffer+2]
+ ldh [hQuotient+1], a ; (aliases: hMultiplicand)
+ ldh a, [hDivideBuffer+1]
+ ldh [hDividend], a ; (aliases: hProduct, hPastLeadingZeros, hQuotient)
ret
--- a/engine/math/random.asm
+++ b/engine/math/random.asm
@@ -1,13 +1,13 @@
Random_::
; Generate a random 16-bit value.
- ld a, [rDIV]
+ ldh a, [rDIV]
ld b, a
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
adc b
- ld [hRandomAdd], a
- ld a, [rDIV]
+ ldh [hRandomAdd], a
+ ldh a, [rDIV]
ld b, a
- ld a, [hRandomSub]
+ ldh a, [hRandomSub]
sbc b
- ld [hRandomSub], a
+ ldh [hRandomSub], a
ret
--- a/engine/menus/display_text_id_init.asm
+++ b/engine/menus/display_text_id_init.asm
@@ -5,7 +5,7 @@
ld a, [wAutoTextBoxDrawingControl]
bit 0, a
jr nz, .skipDrawingTextBoxBorder
- ld a, [hSpriteIndexOrTextID] ; text ID (or sprite ID)
+ ldh a, [hSpriteIndexOrTextID] ; text ID (or sprite ID)
and a
jr nz, .notStartMenu
; if text ID is 0 (i.e. the start menu)
@@ -13,18 +13,18 @@
; below this, so this seems unnecessary.
CheckEvent EVENT_GOT_POKEDEX
; start menu with pokedex
- coord hl, 10, 0
+ hlcoord 10, 0
ld b, $0e
ld c, $08
jr nz, .drawTextBoxBorder
; start menu without pokedex
- coord hl, 10, 0
+ hlcoord 10, 0
ld b, $0c
ld c, $08
jr .drawTextBoxBorder
; if text ID is not 0 (i.e. not the start menu) then do a standard dialogue text box
.notStartMenu
- coord hl, 0, 12
+ hlcoord 0, 12
ld b, $04
ld c, $12
.drawTextBoxBorder
@@ -38,7 +38,8 @@
jr nz, .skipMovingSprites
call UpdateSprites
.skipMovingSprites
-; loop to copy C1X9 (direction the sprite is facing) to C2X9 for each sprite
+; loop to copy [x#SPRITESTATEDATA1_FACINGDIRECTION] to
+; [x#SPRITESTATEDATA2_ORIGFACINGDIRECTION] for each non-player sprite
; this is done because when you talk to an NPC, they turn to look your way
; the original direction they were facing must be restored after the dialogue is over
ld hl, wSprite01StateData1FacingDirection
@@ -45,9 +46,9 @@
ld c, $0f
ld de, $10
.spriteFacingDirectionCopyLoop
- ld a, [hl]
+ ld a, [hl] ; x#SPRITESTATEDATA1_FACINGDIRECTION
inc h
- ld [hl], a
+ ld [hl], a ; [x#SPRITESTATEDATA2_ORIGFACINGDIRECTION]
dec h
add hl, de
dec c
@@ -71,8 +72,8 @@
ld b, $9c ; window background address
call CopyScreenTileBufferToVRAM ; transfer background in WRAM to VRAM
xor a
- ld [hWY], a ; put the window on the screen
+ ldh [hWY], a ; put the window on the screen
call LoadFontTilePatterns
ld a, $01
- ld [hAutoBGTransferEnabled], a ; enable continuous WRAM to VRAM transfer each V-blank
+ ldh [hAutoBGTransferEnabled], a ; enable continuous WRAM to VRAM transfer each V-blank
ret
--- a/engine/menus/draw_badges.asm
+++ b/engine/menus/draw_badges.asm
@@ -43,11 +43,11 @@
ld [hli], a
ld [hl], $60 ; First name
- coord hl, 2, 11
+ hlcoord 2, 11
ld de, wTempObtainedBadgesBooleans
call .DrawBadgeRow
- coord hl, 2, 14
+ hlcoord 2, 14
ld de, wTempObtainedBadgesBooleans + 4
; call .DrawBadgeRow
; ret
--- a/engine/menus/draw_start_menu.asm
+++ b/engine/menus/draw_start_menu.asm
@@ -2,12 +2,12 @@
DrawStartMenu::
CheckEvent EVENT_GOT_POKEDEX
; menu with pokedex
- coord hl, 10, 0
+ hlcoord 10, 0
ld b, $0e
ld c, $08
jr nz, .drawTextBoxBorder
; shorter menu if the player doesn't have the pokedex
- coord hl, 10, 0
+ hlcoord 10, 0
ld b, $0c
ld c, $08
.drawTextBoxBorder
@@ -25,7 +25,7 @@
ld [wMenuWatchMovingOutOfBounds], a
ld hl, wd730
set 6, [hl] ; no pauses between printing each letter
- coord hl, 12, 2
+ hlcoord 12, 2
CheckEvent EVENT_GOT_POKEDEX
; case for not having pokedex
ld a, $06
--- a/engine/menus/league_pc.asm
+++ b/engine/menus/league_pc.asm
@@ -6,10 +6,10 @@
push hl
ld a, [wUpdateSpritesEnabled]
push af
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
push af
xor a
- ld [hTilesetType], a
+ ldh [hTilesetType], a
ld [wSpriteFlipped], a
ld [wUpdateSpritesEnabled], a
ld [wHoFTeamIndex2], a
@@ -29,7 +29,7 @@
push bc
ld a, [wHoFTeamIndex2]
ld [wHoFTeamIndex], a
- callba LoadHallOfFameTeams
+ farcall LoadHallOfFameTeams
call LeaguePCShowTeam
pop bc
jr c, .doneShowingTeams
@@ -40,7 +40,7 @@
jr nz, .loop
.doneShowingTeams
pop af
- ld [hTilesetType], a
+ ldh [hTilesetType], a
pop af
ld [wUpdateSpritesEnabled], a
pop hl
@@ -56,7 +56,7 @@
push bc
call LeaguePCShowMon
call WaitForTextScrollButtonPress
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
bit 1, a
jr nz, .exit
ld hl, wHallOfFame + HOF_MON
@@ -95,22 +95,22 @@
ld b, SET_PAL_POKEMON_WHOLE_SCREEN
ld c, 0
call RunPaletteCommand
- coord hl, 12, 5
+ hlcoord 12, 5
call GetMonHeader
call LoadFrontSpriteByMonIndex
call GBPalNormal
- coord hl, 0, 13
+ hlcoord 0, 13
ld b, 2
ld c, $12
call TextBoxBorder
- coord hl, 1, 15
+ hlcoord 1, 15
ld de, HallOfFameNoText
call PlaceString
- coord hl, 16, 15
+ hlcoord 16, 15
ld de, wHoFTeamNo
lb bc, 1, 3
call PrintNumber
- jpba HoFDisplayMonInfo
+ farjp HoFDisplayMonInfo
HallOfFameNoText:
db "HALL OF FAME No @"
--- a/engine/menus/main_menu.asm
+++ b/engine/menus/main_menu.asm
@@ -33,20 +33,20 @@
cp 1
jr z, .noSaveFile
; there's a save file
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 6
ld c, 13
call TextBoxBorder
- coord hl, 2, 2
+ hlcoord 2, 2
ld de, ContinueText
call PlaceString
jr .next2
.noSaveFile
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 4
ld c, 13
call TextBoxBorder
- coord hl, 2, 2
+ hlcoord 2, 2
ld de, NewGameText
call PlaceString
.next2
@@ -94,11 +94,11 @@
set 5, [hl]
.inputLoop
xor a
- ld [hJoyPressed], a
- ld [hJoyReleased], a
- ld [hJoyHeld], a
+ ldh [hJoyPressed], a
+ ldh [hJoyReleased], a
+ ldh [hJoyHeld], a
call Joypad
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
bit 0, a
jr nz, .pressedA
bit 1, a
@@ -141,12 +141,12 @@
call SaveScreenTilesToBuffer1
ld hl, WhereWouldYouLikeText
call PrintText
- coord hl, 5, 5
+ hlcoord 5, 5
ld b, $6
ld c, $d
call TextBoxBorder
call UpdateSprites
- coord hl, 7, 7
+ hlcoord 7, 7
ld de, CableClubOptionsText
call PlaceString
xor a
@@ -205,7 +205,7 @@
jr z, .useEnemyMenuSelection ; if the enemy pressed A or B but the player didn't, use the enemy's selection
; the enemy and the player both pressed A or B
; The gameboy that is clocking the connection wins.
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr z, .doneChoosingMenuSelection
.useEnemyMenuSelection
@@ -214,13 +214,13 @@
and $3
ld [wCurrentMenuItem], a
.doneChoosingMenuSelection
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr nz, .skipStartingTransfer
call DelayFrame
call DelayFrame
ld a, START_TRANSFER_INTERNAL_CLOCK
- ld [rSC], a
+ ldh [rSC], a
.skipStartingTransfer
ld b, $7f
ld c, $7f
@@ -240,11 +240,11 @@
ld c, d
.updateCursorPosition
ld a, b
- Coorda 6, 7
+ ldcoord_a 6, 7
ld a, c
- Coorda 6, 9
+ ldcoord_a 6, 9
ld a, d
- Coorda 6, 11
+ ldcoord_a 6, 11
ld c, 40
call DelayFrames
call LoadScreenTilesFromBuffer1
@@ -314,9 +314,9 @@
; enter map after using a special warp or loading the game from the main menu
SpecialEnterMap::
xor a
- ld [hJoyPressed], a
- ld [hJoyHeld], a
- ld [hJoy5], a
+ ldh [hJoyPressed], a
+ ldh [hJoyHeld], a
+ ldh [hJoy5], a
ld [wd72d], a
ld hl, wd732
set 0, [hl] ; count play time
@@ -344,51 +344,51 @@
DisplayContinueGameInfo:
xor a
- ld [hAutoBGTransferEnabled], a
- coord hl, 4, 7
+ ldh [hAutoBGTransferEnabled], a
+ hlcoord 4, 7
ld b, 8
ld c, 14
call TextBoxBorder
- coord hl, 5, 9
+ hlcoord 5, 9
ld de, SaveScreenInfoText
call PlaceString
- coord hl, 12, 9
+ hlcoord 12, 9
ld de, wPlayerName
call PlaceString
- coord hl, 17, 11
+ hlcoord 17, 11
call PrintNumBadges
- coord hl, 16, 13
+ hlcoord 16, 13
call PrintNumOwnedMons
- coord hl, 13, 15
+ hlcoord 13, 15
call PrintPlayTime
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld c, 30
jp DelayFrames
PrintSaveScreenText:
xor a
- ld [hAutoBGTransferEnabled], a
- coord hl, 4, 0
+ ldh [hAutoBGTransferEnabled], a
+ hlcoord 4, 0
ld b, $8
ld c, $e
call TextBoxBorder
call LoadTextBoxTilePatterns
call UpdateSprites
- coord hl, 5, 2
+ hlcoord 5, 2
ld de, SaveScreenInfoText
call PlaceString
- coord hl, 12, 2
+ hlcoord 12, 2
ld de, wPlayerName
call PlaceString
- coord hl, 17, 4
+ hlcoord 17, 4
call PrintNumBadges
- coord hl, 16, 6
+ hlcoord 16, 6
call PrintNumOwnedMons
- coord hl, 13, 8
+ hlcoord 13, 8
call PrintPlayTime
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld c, 30
jp DelayFrames
@@ -429,28 +429,28 @@
next "TIME@"
DisplayOptionMenu:
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 3
ld c, 18
call TextBoxBorder
- coord hl, 0, 5
+ hlcoord 0, 5
ld b, 3
ld c, 18
call TextBoxBorder
- coord hl, 0, 10
+ hlcoord 0, 10
ld b, 3
ld c, 18
call TextBoxBorder
- coord hl, 1, 1
+ hlcoord 1, 1
ld de, TextSpeedOptionText
call PlaceString
- coord hl, 1, 6
+ hlcoord 1, 6
ld de, BattleAnimationOptionText
call PlaceString
- coord hl, 1, 11
+ hlcoord 1, 11
ld de, BattleStyleOptionText
call PlaceString
- coord hl, 2, 16
+ hlcoord 2, 16
ld de, OptionMenuCancelText
call PlaceString
xor a
@@ -465,7 +465,7 @@
ld a, [wOptionsTextSpeedCursorX] ; text speed cursor X coordinate
ld [wTopMenuItemX], a
ld a, $01
- ld [hAutoBGTransferEnabled], a ; enable auto background transfer
+ ldh [hAutoBGTransferEnabled], a ; enable auto background transfer
call Delay3
.loop
call PlaceMenuCursor
@@ -472,7 +472,7 @@
call SetOptionsFromCursorPositions
.getJoypadStateLoop
call JoypadLowSensitivity
- ld a, [hJoy5]
+ ldh a, [hJoy5]
ld b, a
and A_BUTTON | B_BUTTON | START | D_RIGHT | D_LEFT | D_UP | D_DOWN ; any key besides select pressed?
jr z, .getJoypadStateLoop
@@ -644,7 +644,7 @@
dec hl
ld a, [hl]
ld [wOptionsTextSpeedCursorX], a ; text speed cursor X coordinate
- coord hl, 0, 3
+ hlcoord 0, 3
call .placeUnfilledRightArrow
sla c
ld a, 1 ; On
@@ -652,7 +652,7 @@
ld a, 10 ; Off
.storeBattleAnimationCursorX
ld [wOptionsBattleAnimCursorX], a ; battle animation cursor X coordinate
- coord hl, 0, 8
+ hlcoord 0, 8
call .placeUnfilledRightArrow
sla c
ld a, 1
@@ -660,10 +660,10 @@
ld a, 10
.storeBattleStyleCursorX
ld [wOptionsBattleStyleCursorX], a ; battle style cursor X coordinate
- coord hl, 0, 13
+ hlcoord 0, 13
call .placeUnfilledRightArrow
; cursor in front of Cancel
- coord hl, 0, 16
+ hlcoord 0, 16
ld a, 1
.placeUnfilledRightArrow
ld e, a
--- a/engine/menus/naming_screen.asm
+++ b/engine/menus/naming_screen.asm
@@ -4,7 +4,7 @@
push hl
ld a, [wIsInBattle]
dec a
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 4
ld c, 11
call z, ClearScreenArea ; only if in wild battle
@@ -13,7 +13,7 @@
call GetMonName
ld hl, DoYouWantToNicknameText
call PrintText
- coord hl, 14, 7
+ hlcoord 14, 7
lb bc, 8, 15
ld a, TWO_OPTION_MENU
ld [wTextBoxID], a
@@ -92,8 +92,8 @@
call RunPaletteCommand
call LoadHpBarAndStatusTilePatterns
call LoadEDTile
- callba LoadMonPartySpriteGfx
- coord hl, 0, 4
+ farcall LoadMonPartySpriteGfx
+ hlcoord 0, 4
ld b, 9
ld c, 18
call TextBoxBorder
@@ -128,11 +128,11 @@
.inputLoop
ld a, [wCurrentMenuItem]
push af
- callba AnimatePartyMon_ForceSpeed1
+ farcall AnimatePartyMon_ForceSpeed1
pop af
ld [wCurrentMenuItem], a
call JoypadLowSensitivity
- ld a, [hJoyPressed]
+ ldh a, [hJoyPressed]
and a
jr z, .inputLoop
ld hl, .namingScreenButtonFunctions
@@ -172,7 +172,7 @@
ld a, [wIsInBattle]
and a
jp z, LoadTextBoxTilePatterns
- jpab LoadHudTilePatterns
+ jpfar LoadHudTilePatterns
.namingScreenButtonFunctions
dw .dPadReturnPoint
@@ -325,7 +325,7 @@
LoadEDTile:
ld de, ED_Tile
- ld hl, vFont + $700
+ ld hl, vFont tile $70
ld bc, (ED_TileEnd - ED_Tile) / $8
; to fix the graphical bug on poor emulators
;lb bc, BANK(ED_Tile), (ED_TileEnd - ED_Tile) / $8
@@ -337,7 +337,7 @@
PrintAlphabet:
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld a, [wAlphabetCase]
and a
ld de, LowerCaseAlphabet
@@ -344,7 +344,7 @@
jr nz, .lowercase
ld de, UpperCaseAlphabet
.lowercase
- coord hl, 2, 5
+ hlcoord 2, 5
lb bc, 5, 9 ; 5 rows, 9 columns
.outerLoop
push bc
@@ -362,7 +362,7 @@
jr nz, .outerLoop
call PlaceString
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
jp Delay3
INCLUDE "data/text/alphabets.asm"
@@ -371,13 +371,13 @@
call CalcStringLength
ld a, c
ld [wNamingScreenNameLength], a
- coord hl, 10, 2
+ hlcoord 10, 2
lb bc, 1, 10
call ClearScreenArea
- coord hl, 10, 2
+ hlcoord 10, 2
ld de, wcf4b
call PlaceString
- coord hl, 10, 3
+ hlcoord 10, 3
ld a, [wNamingScreenType]
cp NAME_MON_SCREEN
jr nc, .pokemon1
@@ -416,7 +416,7 @@
.emptySpacesRemaining
ld c, a
ld b, $0
- coord hl, 10, 3
+ hlcoord 10, 3
add hl, bc
ld [hl], $77 ; raised underscore tile id
ret
@@ -450,7 +450,7 @@
jr .loop
PrintNamingText:
- coord hl, 0, 1
+ hlcoord 0, 1
ld a, [wNamingScreenType]
ld de, YourTextString
and a
@@ -461,16 +461,16 @@
ld a, [wcf91]
ld [wMonPartySpriteSpecies], a
push af
- callba WriteMonPartySpriteOAMBySpecies
+ farcall WriteMonPartySpriteOAMBySpecies
pop af
ld [wd11e], a
call GetMonName
- coord hl, 4, 1
+ hlcoord 4, 1
call PlaceString
ld hl, $1
add hl, bc
ld [hl], $c9
- coord hl, 1, 3
+ hlcoord 1, 3
ld de, NicknameTextString
jr .placeString
.notNickname
--- a/engine/menus/party_menu.asm
+++ b/engine/menus/party_menu.asm
@@ -19,10 +19,10 @@
; f8: leveled up
DrawPartyMenu_::
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call ClearScreen
call UpdateSprites
- callba LoadMonPartySpriteGfxWithLCDDisabled ; load pokemon icon graphics
+ farcall LoadMonPartySpriteGfxWithLCDDisabled ; load pokemon icon graphics
RedrawPartyMenu_::
ld a, [wPartyMenuTypeOrMessageID]
@@ -29,12 +29,12 @@
cp SWAP_MONS_PARTY_MENU
jp z, .printMessage
call ErasePartyMenuCursors
- callba InitPartyMenuBlkPacket
- coord hl, 3, 0
+ farcall InitPartyMenuBlkPacket
+ hlcoord 3, 0
ld de, wPartySpecies
xor a
ld c, a
- ld [hPartyMonIndex], a
+ ldh [hPartyMonIndex], a
ld [wWhichPartyMenuHPBar], a
.loop
ld a, [de]
@@ -49,11 +49,11 @@
call GetPartyMonName
pop hl
call PlaceString ; print the pokemon's name
- callba WriteMonPartySpriteOAMByPartyIndex ; place the appropriate pokemon icon
- ld a, [hPartyMonIndex]
+ farcall WriteMonPartySpriteOAMByPartyIndex ; place the appropriate pokemon icon
+ ldh a, [hPartyMonIndex]
ld [wWhichPokemon], a
inc a
- ld [hPartyMonIndex], a
+ ldh [hPartyMonIndex], a
call LoadMonData
pop hl
push hl
@@ -88,14 +88,14 @@
pop hl
push hl
ld bc, SCREEN_WIDTH + 1 ; down 1 row and right 1 column
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
set 0, a
- ld [hFlagsFFF6], a
+ ldh [hFlagsFFF6], a
add hl, bc
predef DrawHP2 ; draw HP bar and prints current / max HP
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
res 0, a
- ld [hFlagsFFF6], a
+ ldh [hFlagsFFF6], a
call SetPartyMenuHPBarColor ; color the HP bar (on SGB)
pop hl
jr .printLevel
@@ -213,7 +213,7 @@
pop af
ld [hl], a
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
jp GBPalNormal
.printItemUseMessage
--- a/engine/menus/pc.asm
+++ b/engine/menus/pc.asm
@@ -10,7 +10,7 @@
call LoadScreenTilesFromBuffer2
call Delay3
PCMainMenu:
- callba DisplayPCMainMenu
+ farcall DisplayPCMainMenu
ld hl, wFlags_0xcd60
set 5, [hl]
call HandleMenuInput
@@ -56,19 +56,19 @@
call WaitForSoundToFinish
ld hl, AccessedMyPCText
call PrintText
- callba PlayerPC
+ farcall PlayerPC
jr ReloadMainMenu
OaksPC:
ld a, SFX_ENTER_PC
call PlaySound
call WaitForSoundToFinish
- callba OpenOaksPC
+ farcall OpenOaksPC
jr ReloadMainMenu
PKMNLeague:
ld a, SFX_ENTER_PC
call PlaySound
call WaitForSoundToFinish
- callba PKMNLeaguePC
+ farcall PKMNLeaguePC
jr ReloadMainMenu
BillsPC:
ld a, SFX_ENTER_PC
@@ -82,7 +82,7 @@
ld hl, AccessedBillsPCText
.printText
call PrintText
- callba BillsPC_
+ farcall BillsPC_
ReloadMainMenu:
xor a
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
@@ -117,10 +117,10 @@
; removes one of the specified item ID [hItemToRemoveID] from bag (if existent)
RemoveItemByID::
ld hl, wBagItems
- ld a, [hItemToRemoveID]
+ ldh a, [hItemToRemoveID]
ld b, a
xor a
- ld [hItemToRemoveIndex], a
+ ldh [hItemToRemoveIndex], a
.loop
ld a, [hli]
cp -1 ; reached terminator?
@@ -128,14 +128,14 @@
cp b
jr z, .foundItem
inc hl
- ld a, [hItemToRemoveIndex]
+ ldh a, [hItemToRemoveIndex]
inc a
- ld [hItemToRemoveIndex], a
+ ldh [hItemToRemoveIndex], a
jr .loop
.foundItem
ld a, $1
ld [wItemQuantity], a
- ld a, [hItemToRemoveIndex]
+ ldh a, [hItemToRemoveIndex]
ld [wWhichPokemon], a
ld hl, wNumBagItems
jp RemoveItemFromInventory
--- a/engine/menus/players_pc.asm
+++ b/engine/menus/players_pc.asm
@@ -22,12 +22,12 @@
ld hl, wFlags_0xcd60
set 5, [hl]
call LoadScreenTilesFromBuffer2
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, $8
ld c, $e
call TextBoxBorder
call UpdateSprites
- coord hl, 2, 2
+ hlcoord 2, 2
ld de, PlayersPCMenuEntries
call PlaceString
ld hl, wTopMenuItemY
--- a/engine/menus/pokedex.asm
+++ b/engine/menus/pokedex.asm
@@ -10,11 +10,11 @@
ld [wLastMenuItem], a
inc a
ld [wd11e], a
- ld [hJoy7], a
+ ldh [hJoy7], a
.setUpGraphics
ld b, SET_PAL_GENERIC
call RunPaletteCommand
- callab LoadPokedexTilePatterns
+ callfar LoadPokedexTilePatterns
.doPokemonListMenu
ld hl, wTopMenuItemY
ld a, 3
@@ -35,7 +35,7 @@
ld [wMenuWatchMovingOutOfBounds], a
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
- ld [hJoy7], a
+ ldh [hJoy7], a
ld [wWastedByteCD3A], a
ld [wOverrideSimulatedJoypadStatesMask], a
pop af
@@ -119,7 +119,7 @@
pop af
ld [wCurrentMenuItem], a
push bc
- coord hl, 0, 3
+ hlcoord 0, 3
ld de, 20
lb bc, " ", 13
call DrawTileLine ; cover up the menu cursor in the pokemon list
@@ -128,7 +128,7 @@
.buttonBPressed
push bc
- coord hl, 15, 10
+ hlcoord 15, 10
ld de, 20
lb bc, " ", 7
call DrawTileLine ; cover up the menu cursor in the side menu
@@ -156,9 +156,9 @@
; sets carry flag if player presses A, unsets carry flag if player presses B
HandlePokedexListMenu:
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
; draw the horizontal line separating the seen and owned amounts from the menu
- coord hl, 15, 8
+ hlcoord 15, 8
ld a, "─"
ld [hli], a
ld [hli], a
@@ -165,17 +165,17 @@
ld [hli], a
ld [hli], a
ld [hli], a
- coord hl, 14, 0
+ hlcoord 14, 0
ld [hl], $71 ; vertical line tile
- coord hl, 14, 1
+ hlcoord 14, 1
call DrawPokedexVerticalLine
- coord hl, 14, 9
+ hlcoord 14, 9
call DrawPokedexVerticalLine
ld hl, wPokedexSeen
ld b, wPokedexSeenEnd - wPokedexSeen
call CountSetBits
ld de, wNumSetBits
- coord hl, 16, 3
+ hlcoord 16, 3
lb bc, 1, 3
call PrintNumber ; print number of seen pokemon
ld hl, wPokedexOwned
@@ -182,19 +182,19 @@
ld b, wPokedexOwnedEnd - wPokedexOwned
call CountSetBits
ld de, wNumSetBits
- coord hl, 16, 6
+ hlcoord 16, 6
lb bc, 1, 3
call PrintNumber ; print number of owned pokemon
- coord hl, 16, 2
+ hlcoord 16, 2
ld de, PokedexSeenText
call PlaceString
- coord hl, 16, 5
+ hlcoord 16, 5
ld de, PokedexOwnText
call PlaceString
- coord hl, 1, 1
+ hlcoord 1, 1
ld de, PokedexContentsText
call PlaceString
- coord hl, 16, 10
+ hlcoord 16, 10
ld de, PokedexMenuItemsText
call PlaceString
; find the highest pokedex number among the pokemon the player has seen
@@ -216,11 +216,11 @@
ld [wDexMaxSeenMon], a
.loop
xor a
- ld [hAutoBGTransferEnabled], a
- coord hl, 4, 2
+ ldh [hAutoBGTransferEnabled], a
+ hlcoord 4, 2
lb bc, 14, 10
call ClearScreenArea
- coord hl, 1, 3
+ hlcoord 1, 3
ld a, [wListScrollOffset]
ld [wd11e], a
ld d, 7
@@ -280,7 +280,7 @@
dec d
jr nz, .printPokemonLoop
ld a, 01
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
call GBPalNormal
call HandleMenuInput
@@ -393,7 +393,7 @@
call GBPalWhiteOutWithDelay3
call ClearScreen
call UpdateSprites
- callab LoadPokedexTilePatterns ; load pokedex tiles
+ callfar LoadPokedexTilePatterns ; load pokedex tiles
; function to display pokedex data from inside the pokedex
ShowPokedexDataInternal:
@@ -400,7 +400,7 @@
ld hl, wd72c
set 1, [hl]
ld a, $33 ; 3/7 volume
- ld [rNR50], a
+ ldh [rNR50], a
call GBPalWhiteOut ; zero all palettes
call ClearScreen
ld a, [wd11e] ; pokemon ID
@@ -410,48 +410,48 @@
call RunPaletteCommand
pop af
ld [wd11e], a
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
push af
xor a
- ld [hTilesetType], a
+ ldh [hTilesetType], a
- coord hl, 0, 0
+ hlcoord 0, 0
ld de, 1
lb bc, $64, SCREEN_WIDTH
call DrawTileLine ; draw top border
- coord hl, 0, 17
+ hlcoord 0, 17
ld b, $6f
call DrawTileLine ; draw bottom border
- coord hl, 0, 1
+ hlcoord 0, 1
ld de, 20
lb bc, $66, $10
call DrawTileLine ; draw left border
- coord hl, 19, 1
+ hlcoord 19, 1
ld b, $67
call DrawTileLine ; draw right border
ld a, $63 ; upper left corner tile
- Coorda 0, 0
+ ldcoord_a 0, 0
ld a, $65 ; upper right corner tile
- Coorda 19, 0
+ ldcoord_a 19, 0
ld a, $6c ; lower left corner tile
- Coorda 0, 17
+ ldcoord_a 0, 17
ld a, $6e ; lower right corner tile
- Coorda 19, 17
+ ldcoord_a 19, 17
- coord hl, 0, 9
+ hlcoord 0, 9
ld de, PokedexDataDividerLine
call PlaceString ; draw horizontal divider line
- coord hl, 9, 6
+ hlcoord 9, 6
ld de, HeightWeightText
call PlaceString
call GetMonName
- coord hl, 9, 2
+ hlcoord 9, 2
call PlaceString
ld hl, PokedexEntryPointers
@@ -465,7 +465,7 @@
ld e, a
ld d, [hl] ; de = address of pokedex entry
- coord hl, 9, 4
+ hlcoord 9, 4
call PlaceString ; print species name
ld h, b
@@ -475,7 +475,7 @@
push af
call IndexToPokedex
- coord hl, 2, 8
+ hlcoord 2, 8
ld a, "№"
ld [hli], a
ld a, "<DOT>"
@@ -500,7 +500,7 @@
call Delay3
call GBPalNormal
call GetMonHeader ; load pokemon picture location
- coord hl, 1, 1
+ hlcoord 1, 1
call LoadFlippedFrontSpriteByMonIndex ; draw pokemon picture
ld a, [wcf91]
call PlayCry ; play pokemon cry
@@ -515,7 +515,7 @@
jp z, .waitForButtonPress ; if the pokemon has not been owned, don't print the height, weight, or description
inc de ; de = address of feet (height)
ld a, [de] ; reads feet, but a is overwritten without being used
- coord hl, 12, 6
+ hlcoord 12, 6
lb bc, 1, 2
call PrintNumber ; print feet (height)
ld a, "′"
@@ -522,7 +522,7 @@
ld [hl], a
inc de
inc de ; de = address of inches (height)
- coord hl, 15, 6
+ hlcoord 15, 6
lb bc, LEADING_ZEROES | 1, 2
call PrintNumber ; print inches (height)
ld a, "″"
@@ -544,13 +544,13 @@
ld a, [de] ; a = lower byte of weight
ld [hl], a ; store lower byte of weight in [hDexWeight + 1]
ld de, hDexWeight
- coord hl, 11, 8
+ hlcoord 11, 8
lb bc, 2, 5 ; 2 bytes, 5 digits
call PrintNumber ; print weight
- coord hl, 14, 8
- ld a, [hDexWeight + 1]
+ hlcoord 14, 8
+ ldh a, [hDexWeight + 1]
sub 10
- ld a, [hDexWeight]
+ ldh a, [hDexWeight]
sbc 0
jr nc, .next
ld [hl], "0" ; if the weight is less than 10, put a 0 before the decimal point
@@ -560,24 +560,24 @@
ld [hld], a ; make space for the decimal point by moving the last digit forward one tile
ld [hl], "<DOT>" ; decimal point tile
pop af
- ld [hDexWeight + 1], a ; restore original value of [hDexWeight + 1]
+ ldh [hDexWeight + 1], a ; restore original value of [hDexWeight + 1]
pop af
- ld [hDexWeight], a ; restore original value of [hDexWeight]
+ ldh [hDexWeight], a ; restore original value of [hDexWeight]
pop hl
inc hl ; hl = address of pokedex description text
- coord bc, 1, 11
+ bccoord 1, 11
ld a, %10
- ld [hClearLetterPrintingDelayFlags], a
+ ldh [hClearLetterPrintingDelayFlags], a
call TextCommandProcessor ; print pokedex description text
xor a
- ld [hClearLetterPrintingDelayFlags], a
+ ldh [hClearLetterPrintingDelayFlags], a
.waitForButtonPress
call JoypadLowSensitivity
- ld a, [hJoy5]
+ ldh a, [hJoy5]
and A_BUTTON | B_BUTTON
jr z, .waitForButtonPress
pop af
- ld [hTilesetType], a
+ ldh [hTilesetType], a
call GBPalWhiteOut
call ClearScreen
call RunDefaultPaletteCommand
@@ -586,7 +586,7 @@
ld hl, wd72c
res 1, [hl]
ld a, $77 ; max volume
- ld [rNR50], a
+ ldh [rNR50], a
ret
HeightWeightText:
--- a/engine/menus/save.asm
+++ b/engine/menus/save.asm
@@ -70,7 +70,7 @@
ld bc, wSpriteDataEnd - wSpriteDataStart
call CopyData
ld a, [sTilesetType]
- ld [hTilesetType], a
+ ldh [hTilesetType], a
ld hl, sCurBoxData
ld de, wBoxDataStart
ld bc, wBoxDataEnd - wBoxDataStart
@@ -138,7 +138,7 @@
jp LoadSAV2
SaveSAV:
- callba PrintSaveScreenText
+ farcall PrintSaveScreenText
ld hl, WouldYouLikeToSaveText
call SaveSAVConfirm
and a ;|0 = Yes|1 = No|
@@ -154,10 +154,10 @@
ret nz
.save
call SaveSAVtoSRAM
- coord hl, 1, 13
+ hlcoord 1, 13
lb bc, 4, 18
call ClearScreenArea
- coord hl, 1, 14
+ hlcoord 1, 14
ld de, NowSavingString
call PlaceString
ld c, 120
@@ -175,7 +175,7 @@
SaveSAVConfirm:
call PrintText
- coord hl, 0, 7
+ hlcoord 0, 7
lb bc, 8, 1
ld a, TWO_OPTION_MENU
ld [wTextBoxID], a
@@ -217,7 +217,7 @@
ld de, sCurBoxData
ld bc, wBoxDataEnd - wBoxDataStart
call CopyData
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
ld [sTilesetType], a
ld hl, sPlayerName
ld bc, sMainDataCheckSum - sPlayerName
@@ -420,7 +420,7 @@
DisplayChangeBoxMenu:
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld a, A_BUTTON | B_BUTTON
ld [wMenuWatchedKeys], a
ld a, 11
@@ -435,13 +435,13 @@
and $7f
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 2
ld c, 9
call TextBoxBorder
ld hl, ChooseABoxText
call PrintText
- coord hl, 11, 0
+ hlcoord 11, 0
ld b, 12
ld c, 7
call TextBoxBorder
@@ -448,7 +448,7 @@
ld hl, hFlagsFFF6
set 2, [hl]
ld de, BoxNames
- coord hl, 13, 1
+ hlcoord 13, 1
call PlaceString
ld hl, hFlagsFFF6
res 2, [hl]
@@ -457,7 +457,7 @@
cp 9
jr c, .singleDigitBoxNum
sub 9
- coord hl, 8, 2
+ hlcoord 8, 2
ld [hl], "1"
add "0"
jr .next
@@ -464,12 +464,12 @@
.singleDigitBoxNum
add "1"
.next
- Coorda 9, 2
- coord hl, 1, 2
+ ldcoord_a 9, 2
+ hlcoord 1, 2
ld de, BoxNoText
call PlaceString
call GetMonCountsForAllBoxes
- coord hl, 18, 1
+ hlcoord 18, 1
ld de, wBoxMonCounts
ld bc, SCREEN_WIDTH
ld a, $c
@@ -486,7 +486,7 @@
dec a
jr nz, .loop
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ret
ChooseABoxText:
--- a/engine/menus/start_sub_menus.asm
+++ b/engine/menus/start_sub_menus.asm
@@ -50,7 +50,7 @@
ld hl, wTopMenuItemY
ld a, c
ld [hli], a ; top menu item Y
- ld a, [hFieldMoveMonMenuTopMenuItemX]
+ ldh a, [hFieldMoveMonMenuTopMenuItemX]
ld [hli], a ; top menu item X
xor a
ld [hli], a ; current menu item ID
@@ -160,7 +160,7 @@
.surf
bit 4, a ; does the player have the Soul Badge?
jp z, .newBadgeRequired
- callba IsSurfingAllowed
+ farcall IsSurfingAllowed
ld hl, wd728
bit 1, [hl]
res 1, [hl]
@@ -239,11 +239,11 @@
ld bc, wPartyMon2 - wPartyMon1
call AddNTimes
ld a, [hli]
- ld [hDividend], a
+ ldh [hDividend], a
ld a, [hl]
- ld [hDividend + 1], a
+ ldh [hDividend + 1], a
ld a, 5
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, 2 ; number of bytes
call Divide
ld bc, wPartyMon1HP - wPartyMon1MaxHP
@@ -250,10 +250,10 @@
add hl, bc
ld a, [hld]
ld b, a
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
sub b
ld b, [hl]
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
sbc b
jp nc, .notHealthyEnough
ld a, [wPartyAndBillsPCSavedMenuItem]
@@ -285,7 +285,7 @@
; writes a blank tile to all possible menu cursor positions on the party menu
ErasePartyMenuCursors::
- coord hl, 0, 1
+ hlcoord 0, 1
ld bc, 2 * 20 ; menu cursor positions are 2 rows apart
ld a, 6 ; 6 menu cursor positions
.loop
@@ -330,10 +330,10 @@
.choseItem
; erase menu cursor (blank each tile in front of an item name)
ld a, " "
- Coorda 5, 4
- Coorda 5, 6
- Coorda 5, 8
- Coorda 5, 10
+ ldcoord_a 5, 4
+ ldcoord_a 5, 6
+ ldcoord_a 5, 8
+ ldcoord_a 5, 10
call PlaceUnfilledArrowMenuCursor
xor a
ld [wMenuItemToSwap], a
@@ -454,10 +454,10 @@
call GBPalWhiteOut
call ClearScreen
call UpdateSprites
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
push af
xor a
- ld [hTilesetType], a
+ ldh [hTilesetType], a
call DrawTrainerInfo
predef DrawBadges ; draw badges
ld b, SET_PAL_TRAINER_CARD
@@ -471,7 +471,7 @@
call ReloadMapData
call LoadGBPal
pop af
- ld [hTilesetType], a
+ ldh [hTilesetType], a
jp RedisplayStartMenu
; loads tile patterns and draws everything except for gym leader faces / badges
@@ -480,44 +480,44 @@
lb bc, BANK(RedPicFront), $01
predef DisplayPicCenteredOrUpperRight
call DisableLCD
- coord hl, 0, 2
+ hlcoord 0, 2
ld a, " "
call TrainerInfo_DrawVerticalLine
- coord hl, 1, 2
+ hlcoord 1, 2
call TrainerInfo_DrawVerticalLine
- ld hl, vChars2 + $70
- ld de, vChars2
- ld bc, $70 * 4
+ ld hl, vChars2 tile $07
+ ld de, vChars2 tile $00
+ ld bc, $1c tiles
call CopyData
ld hl, TrainerInfoTextBoxTileGraphics ; trainer info text box tile patterns
- ld de, vChars2 + $770
- ld bc, $80
+ ld de, vChars2 tile $77
+ ld bc, 8 tiles
push bc
call TrainerInfo_FarCopyData
ld hl, BlankLeaderNames
- ld de, vChars2 + $600
- ld bc, $170
+ ld de, vChars2 tile $60
+ ld bc, $17 tiles
call TrainerInfo_FarCopyData
pop bc
ld hl, BadgeNumbersTileGraphics ; badge number tile patterns
- ld de, vChars1 + $580
+ ld de, vChars1 tile $58
call TrainerInfo_FarCopyData
ld hl, GymLeaderFaceAndBadgeTileGraphics ; gym leader face and badge tile patterns
- ld de, vChars2 + $200
- ld bc, $400
- ld a, $03
+ ld de, vChars2 tile $20
+ ld bc, 8 * 8 tiles
+ ld a, BANK(GymLeaderFaceAndBadgeTileGraphics)
call FarCopyData2
ld hl, TextBoxGraphics
- ld de, $d0
+ ld de, 13 tiles
add hl, de ; hl = colon tile pattern
- ld de, vChars1 + $560
- ld bc, $10
- ld a, $04
+ ld de, vChars1 tile $56
+ ld bc, 1 tiles
+ ld a, BANK(TextBoxGraphics)
push bc
call FarCopyData2
pop bc
- ld hl, TrainerInfoTextBoxTileGraphics + $80 ; background tile pattern
- ld de, vChars1 + $570
+ ld hl, TrainerInfoTextBoxTileGraphics tile 8 ; background tile pattern
+ ld de, vChars1 tile $57
call TrainerInfo_FarCopyData
call EnableLCD
ld hl, wTrainerInfoTextBoxWidthPlus1
@@ -526,7 +526,7 @@
dec a
ld [hli], a
ld [hl], 1
- coord hl, 0, 0
+ hlcoord 0, 0
call TrainerInfo_DrawTextBox
ld hl, wTrainerInfoTextBoxWidthPlus1
ld a, 16 + 1
@@ -534,27 +534,27 @@
dec a
ld [hli], a
ld [hl], 3
- coord hl, 1, 10
+ hlcoord 1, 10
call TrainerInfo_DrawTextBox
- coord hl, 0, 10
+ hlcoord 0, 10
ld a, $d7
call TrainerInfo_DrawVerticalLine
- coord hl, 19, 10
+ hlcoord 19, 10
call TrainerInfo_DrawVerticalLine
- coord hl, 6, 9
+ hlcoord 6, 9
ld de, TrainerInfo_BadgesText
call PlaceString
- coord hl, 2, 2
+ hlcoord 2, 2
ld de, TrainerInfo_NameMoneyTimeText
call PlaceString
- coord hl, 7, 2
+ hlcoord 7, 2
ld de, wPlayerName
call PlaceString
- coord hl, 8, 4
+ hlcoord 8, 4
ld de, wPlayerMoney
ld c, $e3
call PrintBCDNumber
- coord hl, 9, 6
+ hlcoord 9, 6
ld de, wPlayTimeHours ; hours
lb bc, LEFT_ALIGN | 1, 3
call PrintNumber
@@ -648,10 +648,10 @@
StartMenu_Option::
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call ClearScreen
call UpdateSprites
- callab DisplayOptionMenu
+ callfar DisplayOptionMenu
call LoadScreenTilesFromBuffer2 ; restore saved screen
call LoadTextBoxTilePatterns
call UpdateSprites
@@ -667,7 +667,7 @@
SwitchPartyMon_ClearGfx:
push af
- coord hl, 0, 0
+ hlcoord 0, 0
ld bc, SCREEN_WIDTH * 2
call AddNTimes
ld c, SCREEN_WIDTH * 2
@@ -737,10 +737,10 @@
inc d
.noCarry2
ld a, [hl]
- ld [hSwapTemp], a
+ ldh [hSwapTemp], a
ld a, [de]
ld [hl], a
- ld a, [hSwapTemp]
+ ldh a, [hSwapTemp]
ld [de], a
ld hl, wPartyMons
ld bc, wPartyMon2 - wPartyMon1
--- a/engine/menus/swap_items.asm
+++ b/engine/menus/swap_items.asm
@@ -77,18 +77,18 @@
cp b
jr z, .swapSameItemType
.swapDifferentItems
- ld [hSwapItemID], a ; save second item ID
+ ldh [hSwapItemID], a ; save second item ID
ld a, [hld]
- ld [hSwapItemQuantity], a ; save second item quantity
+ ldh [hSwapItemQuantity], a ; save second item quantity
ld a, [de]
ld [hli], a ; put first item ID in second item slot
inc de
ld a, [de]
ld [hl], a ; put first item quantity in second item slot
- ld a, [hSwapItemQuantity]
+ ldh a, [hSwapItemQuantity]
ld [de], a ; put second item quantity in first item slot
dec de
- ld a, [hSwapItemID]
+ ldh a, [hSwapItemID]
ld [de], a ; put second item ID in first item slot
xor a
ld [wMenuItemToSwap], a ; 0 means no item is currently being swapped
--- a/engine/menus/text_box.asm
+++ b/engine/menus/text_box.asm
@@ -111,7 +111,7 @@
; hl = address of upper left corner of text box
GetAddressOfScreenCoords:
push bc
- coord hl, 0, 0
+ hlcoord 0, 0
ld bc, 20
.loop ; loop to add d rows to the base address
ld a, d
@@ -274,11 +274,11 @@
ld a, MONEY_BOX_TEMPLATE
ld [wTextBoxID], a
call DisplayTextBoxID
- coord hl, 13, 1
+ hlcoord 13, 1
ld b, 1
ld c, 6
call ClearScreenArea
- coord hl, 12, 1
+ hlcoord 12, 1
ld de, wPlayerMoney
ld c, $a3
call PrintBCDNumber
@@ -578,14 +578,14 @@
jr nz, .fieldMovesExist
; no field moves
- coord hl, 11, 11
+ hlcoord 11, 11
ld b, 5
ld c, 7
call TextBoxBorder
call UpdateSprites
ld a, 12
- ld [hFieldMoveMonMenuTopMenuItemX], a
- coord hl, 13, 12
+ ldh [hFieldMoveMonMenuTopMenuItemX], a
+ hlcoord 13, 12
ld de, PokemonMenuEntries
jp PlaceString
@@ -594,7 +594,7 @@
; Calculate the text box position and dimensions based on the leftmost X coord
; of the field move names before adjusting for the number of field moves.
- coord hl, 0, 11
+ hlcoord 0, 11
ld a, [wFieldMovesLeftmostXCoord]
dec a
ld e, a
@@ -625,7 +625,7 @@
call UpdateSprites
; Calculate the position of the first field move name to print.
- coord hl, 0, 12
+ hlcoord 0, 12
ld a, [wFieldMovesLeftmostXCoord]
inc a
ld e, a
@@ -673,8 +673,8 @@
.donePrintingNames
pop hl
ld a, [wFieldMovesLeftmostXCoord]
- ld [hFieldMoveMonMenuTopMenuItemX], a
- coord hl, 0, 12
+ ldh [hFieldMoveMonMenuTopMenuItemX], a
+ hlcoord 0, 12
ld a, [wFieldMovesLeftmostXCoord]
inc a
ld e, a
--- a/engine/movie/credits.asm
+++ b/engine/movie/credits.asm
@@ -1,25 +1,25 @@
HallOfFamePC:
- callba AnimateHallOfFame
+ farcall AnimateHallOfFame
call ClearScreen
ld c, 100
call DelayFrames
call DisableLCD
ld hl, vFont
- ld bc, $800 / 2
+ ld bc, ($80 tiles) / 2
call ZeroMemory
- ld hl, vChars2 + $600
- ld bc, $200 / 2
+ ld hl, vChars2 tile $60
+ ld bc, ($20 tiles) / 2
call ZeroMemory
- ld hl, vChars2 + $7e0
- ld bc, $10
- ld a, $ff
+ ld hl, vChars2 tile $7e
+ ld bc, 1 tiles
+ ld a, $ff ; solid black
call FillMemory
- coord hl, 0, 0
+ hlcoord 0, 0
call FillFourRowsWithBlack
- coord hl, 0, 14
+ hlcoord 0, 14
call FillFourRowsWithBlack
ld a, %11000000
- ld [rBGP], a
+ ldh [rBGP], a
call EnableLCD
ld a, SFX_STOP_ALL_MUSIC
call PlaySoundWaitForCurrent
@@ -38,7 +38,7 @@
ld b, 4
.loop
ld a, [hli]
- ld [rBGP], a
+ ldh [rBGP], a
ld c, 5
call DelayFrames
dec b
@@ -47,7 +47,7 @@
DisplayCreditsMon:
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call SaveScreenTilesToBuffer1
call FillMiddleOfScreenWithWhite
@@ -61,23 +61,23 @@
ld a, [hl]
ld [wcf91], a
ld [wd0b5], a
- coord hl, 8, 6
+ hlcoord 8, 6
call GetMonHeader
call LoadFrontSpriteByMonIndex
ld hl, vBGMap0 + $c
call CreditsCopyTileMapToVRAM
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call LoadScreenTilesFromBuffer1
ld hl, vBGMap0
call CreditsCopyTileMapToVRAM
ld a, $A7
- ld [rWX], a
+ ldh [rWX], a
ld hl, vBGMap1
call CreditsCopyTileMapToVRAM
call FillMiddleOfScreenWithWhite
ld a, %11111100 ; make the mon a black silhouette
- ld [rBGP], a
+ ldh [rBGP], a
; scroll the mon left by one tile 7 times
ld bc, 7
@@ -92,16 +92,16 @@
ld c, 20
.scrollLoop2
call ScrollCreditsMonLeft
- ld a, [rWX]
+ ldh a, [rWX]
sub 8
- ld [rWX], a
+ ldh [rWX], a
dec c
jr nz, .scrollLoop2
xor a
- ld [hWY], a
+ ldh [hWY], a
ld a, %11000000
- ld [rBGP], a
+ ldh [rBGP], a
ret
INCLUDE "data/credits/credits_mons.asm"
@@ -119,13 +119,13 @@
ret
ScrollCreditsMonLeft_SetSCX:
- ld a, [rLY]
+ ldh a, [rLY]
cp l
jr nz, ScrollCreditsMonLeft_SetSCX
ld a, h
- ld [rSCX], a
+ ldh [rSCX], a
.loop
- ld a, [rLY]
+ ldh a, [rLY]
cp h
jr z, .loop
ret
@@ -138,11 +138,11 @@
CreditsCopyTileMapToVRAM:
ld a, l
- ld [hAutoBGTransferDest], a
+ ldh [hAutoBGTransferDest], a
ld a, h
- ld [hAutoBGTransferDest + 1], a
+ ldh [hAutoBGTransferDest + 1], a
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
jp Delay3
ZeroMemory:
@@ -162,7 +162,7 @@
jp FillMemory
FillMiddleOfScreenWithWhite:
- coord hl, 0, 4
+ hlcoord 0, 4
ld bc, SCREEN_WIDTH * 10
ld a, " "
jp FillMemory
@@ -172,7 +172,7 @@
push de
.nextCreditsScreen
pop de
- coord hl, 9, 6
+ hlcoord 9, 6
push hl
call FillMiddleOfScreenWithWhite
pop hl
@@ -235,7 +235,7 @@
jr .nextCreditsScreen
.showCopyrightText
push de
- callba LoadCopyrightTiles
+ farcall LoadCopyrightTiles
pop de
pop de
jr .nextCreditsCommand
@@ -245,13 +245,13 @@
call FillMiddleOfScreenWithWhite
pop de
ld de, TheEndGfx
- ld hl, vChars2 + $600
+ ld hl, vChars2 tile $60
lb bc, BANK(TheEndGfx), (TheEndGfxEnd - TheEndGfx) / $10
call CopyVideoData
- coord hl, 4, 8
+ hlcoord 4, 8
ld de, TheEndTextString
call PlaceString
- coord hl, 4, 9
+ hlcoord 4, 9
inc de
call PlaceString
jp FadeInCreditsText
--- a/engine/movie/evolution.asm
+++ b/engine/movie/evolution.asm
@@ -13,13 +13,13 @@
ld [wNewSoundID], a
call PlaySound
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld a, SFX_TINK
call PlaySound
call Delay3
xor a
- ld [hAutoBGTransferEnabled], a
- ld [hTilesetType], a
+ ldh [hAutoBGTransferEnabled], a
+ ldh [hTilesetType], a
ld a, [wEvoOldSpecies]
ld [wWholeScreenPaletteMonSpecies], a
ld c, 0
@@ -37,7 +37,7 @@
ld [wd0b5], a
call Evolution_LoadPic
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld a, [wEvoOldSpecies]
call PlayCry
call WaitForSoundToFinish
@@ -99,7 +99,7 @@
Evolution_LoadPic:
call GetMonHeader
- coord hl, 7, 2
+ hlcoord 7, 2
jp LoadFlippedFrontSpriteByMonIndex
Evolution_BackAndForthAnim:
@@ -117,8 +117,8 @@
Evolution_ChangeMonPic:
push bc
xor a
- ld [hAutoBGTransferEnabled], a
- coord hl, 7, 2
+ ldh [hAutoBGTransferEnabled], a
+ hlcoord 7, 2
lb bc, 7, 7
ld de, SCREEN_WIDTH - 7
.loop
@@ -134,7 +134,7 @@
dec b
jr nz, .loop
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
pop bc
ret
@@ -143,7 +143,7 @@
call DelayFrame
push bc
call JoypadLowSensitivity
- ld a, [hJoy5]
+ ldh a, [hJoy5]
pop bc
and B_BUTTON
jr nz, .pressedB
--- a/engine/movie/gamefreak.asm
+++ b/engine/movie/gamefreak.asm
@@ -1,18 +1,18 @@
LoadShootingStarGraphics:
ld a, $f9
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, $a4
- ld [rOBP1], a
- ld de, AnimationTileset2 + $30 ; star tile (top left quadrant)
- ld hl, vChars1 + $200
- lb bc, BANK(AnimationTileset2), $01
+ ldh [rOBP1], a
+ ld de, AnimationTileset2 tile 3 ; star tile (top left quadrant)
+ ld hl, vChars1 tile $20
+ lb bc, BANK(AnimationTileset2), 1
call CopyVideoData
- ld de, AnimationTileset2 + $130 ; star tile (bottom left quadrant)
- ld hl, vChars1 + $210
- lb bc, BANK(AnimationTileset2), $01
+ ld de, AnimationTileset2 tile 19 ; star tile (bottom left quadrant)
+ ld hl, vChars1 tile $21
+ lb bc, BANK(AnimationTileset2), 1
call CopyVideoData
ld de, FallingStar
- ld hl, vChars1 + $220
+ ld hl, vChars1 tile $22
lb bc, BANK(FallingStar), (FallingStarEnd - FallingStar) / $10
call CopyVideoData
ld hl, GameFreakLogoOAMData
@@ -201,9 +201,9 @@
jr nz, .innerLoop
; Toggle the palette so that the lower star in the small stars tile blinks in
; and out.
- ld a, [rOBP1]
+ ldh a, [rOBP1]
xor %10100000
- ld [rOBP1], a
+ ldh [rOBP1], a
ld c, 3
call CheckForUserInterruption
--- a/engine/movie/hall_of_fame.asm
+++ b/engine/movie/hall_of_fame.asm
@@ -19,12 +19,12 @@
call FillMemory
xor a
ld [wUpdateSpritesEnabled], a
- ld [hTilesetType], a
+ ldh [hTilesetType], a
ld [wSpriteFlipped], a
ld [wLetterPrintingDelayFlags], a ; no delay
ld [wHoFMonOrPlayer], a ; mon
inc a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld hl, wNumHoFTeams
ld a, [hl]
inc a
@@ -32,7 +32,7 @@
inc [hl]
.skipInc
ld a, $90
- ld [hWY], a
+ ldh [hWY], a
ld c, BANK(Music_HallOfFame)
ld a, MUSIC_HALL_OF_FAME
call PlayMusic
@@ -57,11 +57,11 @@
call HoFDisplayAndRecordMonInfo
ld c, 80
call DelayFrames
- coord hl, 2, 13
+ hlcoord 2, 13
ld b, 3
ld c, 14
call TextBoxBorder
- coord hl, 4, 15
+ hlcoord 4, 15
ld de, HallOfFameText
call PlaceString
ld c, 180
@@ -86,7 +86,7 @@
call HoFDisplayPlayerStats
call HoFFadeOutScreenAndMusic
xor a
- ld [hWY], a
+ ldh [hWY], a
ld hl, rLCDC
res 3, [hl]
ret
@@ -97,9 +97,9 @@
HoFShowMonOrPlayer:
call ClearScreen
ld a, $d0
- ld [hSCY], a
+ ldh [hSCY], a
ld a, $c0
- ld [hSCX], a
+ ldh [hSCX], a
ld a, [wHoFMonSpecies]
ld [wcf91], a
ld [wd0b5], a
@@ -112,7 +112,7 @@
call HoFLoadPlayerPics
jr .next1
.showMon
- coord hl, 12, 5
+ hlcoord 12, 5
call GetMonHeader
call LoadFrontSpriteByMonIndex
predef LoadMonBackPic
@@ -121,7 +121,7 @@
ld c, 0
call RunPaletteCommand
ld a, %11100100
- ld [rBGP], a
+ ldh [rBGP], a
ld c, $31 ; back pic
call HoFLoadMonPlayerPicTileIDs
ld d, $a0
@@ -133,7 +133,7 @@
.next2
call .ScrollPic ; scroll back pic left
xor a
- ld [hSCY], a
+ ldh [hSCY], a
ld c, a ; front pic
call HoFLoadMonPlayerPicTileIDs
ld d, 0
@@ -142,9 +142,9 @@
.ScrollPic
call DelayFrame
- ld a, [hSCX]
+ ldh a, [hSCX]
add e
- ld [hSCX], a
+ ldh [hSCX], a
cp d
jr nz, .ScrollPic
ret
@@ -157,22 +157,22 @@
jp HoFRecordMonInfo
HoFDisplayMonInfo:
- coord hl, 0, 2
+ hlcoord 0, 2
ld b, 9
ld c, 10
call TextBoxBorder
- coord hl, 2, 6
+ hlcoord 2, 6
ld de, HoFMonInfoText
call PlaceString
- coord hl, 1, 4
+ hlcoord 1, 4
ld de, wcd6d
call PlaceString
ld a, [wHoFMonLevel]
- coord hl, 8, 7
+ hlcoord 8, 7
call PrintLevelCommon
ld a, [wHoFMonSpecies]
ld [wd0b5], a
- coord hl, 3, 9
+ hlcoord 3, 9
predef PrintMonType
ld a, [wHoFMonSpecies]
jp PlayCry
@@ -203,27 +203,27 @@
HoFLoadMonPlayerPicTileIDs:
; c = base tile ID
ld b, 0
- coord hl, 12, 5
+ hlcoord 12, 5
predef_jump CopyTileIDsFromList
HoFDisplayPlayerStats:
SetEvent EVENT_HALL_OF_FAME_DEX_RATING
predef DisplayDexRating
- coord hl, 0, 4
+ hlcoord 0, 4
ld b, 6
ld c, 10
call TextBoxBorder
- coord hl, 5, 0
+ hlcoord 5, 0
ld b, 2
ld c, 9
call TextBoxBorder
- coord hl, 7, 2
+ hlcoord 7, 2
ld de, wPlayerName
call PlaceString
- coord hl, 1, 6
+ hlcoord 1, 6
ld de, HoFPlayTimeText
call PlaceString
- coord hl, 5, 7
+ hlcoord 5, 7
ld de, wPlayTimeHours
lb bc, 1, 3
call PrintNumber
@@ -232,10 +232,10 @@
ld de, wPlayTimeMinutes
lb bc, LEADING_ZEROES | 1, 2
call PrintNumber
- coord hl, 1, 9
+ hlcoord 1, 9
ld de, HoFMoneyText
call PlaceString
- coord hl, 4, 10
+ hlcoord 4, 10
ld de, wPlayerMoney
ld c, $a3
call PrintBCDNumber
--- a/engine/movie/intro.asm
+++ b/engine/movie/intro.asm
@@ -12,15 +12,15 @@
PlayIntro:
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
inc a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call PlayShootingStar
call PlayIntroScene
call GBFadeOutToWhite
xor a
- ld [hSCX], a
- ld [hAutoBGTransferEnabled], a
+ ldh [hSCX], a
+ ldh [hAutoBGTransferEnabled], a
call ClearSprites
call DelayFrame
ret
@@ -29,11 +29,11 @@
ld b, SET_PAL_NIDORINO_INTRO
call RunPaletteCommand
ldPal a, BLACK, DARK_GRAY, LIGHT_GRAY, WHITE
- ld [rBGP], a
- ld [rOBP0], a
- ld [rOBP1], a
+ ldh [rBGP], a
+ ldh [rOBP0], a
+ ldh [rOBP1], a
xor a
- ld [hSCX], a
+ ldh [hSCX], a
ld b, GENGAR_INTRO_TILES1
call IntroCopyTiles
ld a, 0
@@ -217,7 +217,7 @@
IntroClearMiddleOfScreen:
; clear the area of the tile map between the black bars on the top and bottom
- coord hl, 0, 4
+ hlcoord 0, 4
ld bc, SCREEN_WIDTH * 10
IntroClearCommon:
@@ -245,7 +245,7 @@
cp MOVE_GENGAR_LEFT
jr z, .moveGengarLeft
; move Gengar right
- ld a, [hSCX]
+ ldh a, [hSCX]
dec a
dec a
jr .next
@@ -259,11 +259,11 @@
call UpdateIntroNidorinoOAM
pop de
.moveGengarLeft
- ld a, [hSCX]
+ ldh a, [hSCX]
inc a
inc a
.next
- ld [hSCX], a
+ ldh [hSCX], a
push de
ld c, 2
call CheckForUserInterruption
@@ -274,7 +274,7 @@
ret
IntroCopyTiles:
- coord hl, 13, 7
+ hlcoord 13, 7
CopyTileIDsFromList_ZeroBaseTileID:
ld c, 0
@@ -311,9 +311,9 @@
PlayShootingStar:
ld b, SET_PAL_GAME_FREAK_INTRO
call RunPaletteCommand
- callba LoadCopyrightAndTextBoxTiles
+ farcall LoadCopyrightAndTextBoxTiles
ldPal a, BLACK, DARK_GRAY, LIGHT_GRAY, WHITE
- ld [rBGP], a
+ ldh [rBGP], a
ld c, 180
call DelayFrames
call ClearScreen
@@ -328,7 +328,7 @@
set 3, [hl]
ld c, 64
call DelayFrames
- callba AnimateShootingStar
+ farcall AnimateShootingStar
push af
pop af
jr c, .next ; skip the delay if the user interrupted the animation
@@ -348,16 +348,16 @@
IntroDrawBlackBars:
; clear the screen and draw black bars on the top and bottom
call IntroClearScreen
- coord hl, 0, 0
+ hlcoord 0, 0
ld c, SCREEN_WIDTH * 4
call IntroPlaceBlackTiles
- coord hl, 0, 14
+ hlcoord 0, 14
ld c, SCREEN_WIDTH * 4
call IntroPlaceBlackTiles
ld hl, vBGMap1
ld c, BG_MAP_WIDTH * 4
call IntroPlaceBlackTiles
- ld hl, vBGMap1 + BG_MAP_WIDTH * 14
+ hlbgcoord 0, 14, vBGMap1
ld c, BG_MAP_WIDTH * 4
jp IntroPlaceBlackTiles
--- a/engine/movie/oak_speech/clear_save.asm
+++ b/engine/movie/oak_speech/clear_save.asm
@@ -5,7 +5,7 @@
call LoadTextBoxTilePatterns
ld hl, ClearSaveDataText
call PrintText
- coord hl, 14, 7
+ hlcoord 14, 7
lb bc, 8, 15
ld a, NO_YES_MENU
ld [wTwoOptionMenuID], a
@@ -15,7 +15,7 @@
ld a, [wCurrentMenuItem]
and a
jp z, Init
- callba ClearSAV
+ farcall ClearSAV
jp Init
ClearSaveDataText:
--- a/engine/movie/oak_speech/init_player_data.asm
+++ b/engine/movie/oak_speech/init_player_data.asm
@@ -2,11 +2,11 @@
InitPlayerData2:
call Random
- ld a, [hRandomSub]
+ ldh a, [hRandomSub]
ld [wPlayerID], a
call Random
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
ld [wPlayerID + 1], a
ld a, $ff
@@ -23,9 +23,9 @@
START_MONEY EQU $3000
ld hl, wPlayerMoney + 1
- ld a, START_MONEY / $100
+ ld a, HIGH(START_MONEY)
ld [hld], a
- xor a
+ xor a ; LOW(START_MONEY)
ld [hli], a
inc hl
ld [hl], a
--- a/engine/movie/oak_speech/oak_speech.asm
+++ b/engine/movie/oak_speech/oak_speech.asm
@@ -52,7 +52,7 @@
ld [wDestinationMap], a
call SpecialWarpIn
xor a
- ld [hTilesetType], a
+ ldh [hTilesetType], a
ld a, [wd732]
bit 1, a ; possibly a debug mode bit
jp nz, .skipChoosingNames
@@ -68,7 +68,7 @@
ld [wd0b5], a
ld [wcf91], a
call GetMonHeader
- coord hl, 6, 4
+ hlcoord 6, 4
call LoadFlippedFrontSpriteByMonIndex
call MovePicLeft
ld hl, OakSpeechText2
@@ -104,12 +104,12 @@
ld hl, OakSpeechText3
call PrintText
.next
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, SFX_SHRINK
call PlaySound
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld c, 4
call DelayFrames
@@ -126,7 +126,7 @@
lb bc, BANK(ShrinkPic2), $00
call IntroDisplayPicCenteredOrUpperRight
call ResetPlayerSpriteData
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, BANK(Music_PalletTown)
ld [wAudioROMBank], a
@@ -137,11 +137,11 @@
ld [wNewSoundID], a
call PlaySound
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld c, 20
call DelayFrames
- coord hl, 6, 5
+ hlcoord 6, 5
ld b, 7
ld c, 7
call ClearScreenArea
@@ -175,7 +175,7 @@
ld b, 6
.next
ld a, [hli]
- ld [rBGP], a
+ ldh [rBGP], a
ld c, 10
call DelayFrames
dec b
@@ -192,18 +192,18 @@
MovePicLeft:
ld a, 119
- ld [rWX], a
+ ldh [rWX], a
call DelayFrame
ld a, %11100100
- ld [rBGP], a
+ ldh [rBGP], a
.next
call DelayFrame
- ld a, [rWX]
+ ldh a, [rWX]
sub 8
cp $FF
ret z
- ld [rWX], a
+ ldh [rWX], a
jr .next
DisplayPicCenteredOrUpperRight:
@@ -224,10 +224,10 @@
pop bc
ld a, c
and a
- coord hl, 15, 1
+ hlcoord 15, 1
jr nz, .next
- coord hl, 6, 4
+ hlcoord 6, 4
.next
xor a
- ld [hStartTileID], a
+ ldh [hStartTileID], a
predef_jump CopyUncompressedPicToTilemap
--- a/engine/movie/oak_speech/oak_speech2.asm
+++ b/engine/movie/oak_speech/oak_speech2.asm
@@ -66,7 +66,7 @@
OakSpeechSlidePicLeft:
push de
- coord hl, 0, 0
+ hlcoord 0, 0
lb bc, 12, 11
call ClearScreenArea ; clear the name list text box
ld c, 10
@@ -76,13 +76,13 @@
ld bc, NAME_LENGTH
call CopyData
call Delay3
- coord hl, 12, 4
+ hlcoord 12, 4
lb de, 6, 6 * SCREEN_WIDTH + 5
ld a, $ff
jr OakSpeechSlidePicCommon
OakSpeechSlidePicRight:
- coord hl, 5, 4
+ hlcoord 5, 4
lb de, 6, 6 * SCREEN_WIDTH + 5
xor a
@@ -90,13 +90,13 @@
push hl
push de
push bc
- ld [hSlideDirection], a
+ ldh [hSlideDirection], a
ld a, d
- ld [hSlideAmount], a
+ ldh [hSlideAmount], a
ld a, e
- ld [hSlidingRegionSize], a
+ ldh [hSlidingRegionSize], a
ld c, a
- ld a, [hSlideDirection]
+ ldh a, [hSlideDirection]
and a
jr nz, .next
; If sliding right, point hl to the end of the pic's tiles.
@@ -107,8 +107,8 @@
ld e, l
.loop
xor a
- ld [hAutoBGTransferEnabled], a
- ld a, [hSlideDirection]
+ ldh [hAutoBGTransferEnabled], a
+ ldh a, [hSlideDirection]
and a
jr nz, .slideLeft
; sliding right
@@ -123,7 +123,7 @@
.next2
dec c
jr nz, .loop
- ld a, [hSlideDirection]
+ ldh a, [hSlideDirection]
and a
jr z, .next3
; If sliding left, we need to zero the last tile in the pic (there is no need
@@ -134,13 +134,13 @@
ld [hl], a
.next3
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
- ld a, [hSlidingRegionSize]
+ ldh a, [hSlidingRegionSize]
ld c, a
ld h, d
ld l, e
- ld a, [hSlideDirection]
+ ldh a, [hSlideDirection]
and a
jr nz, .slideLeft2
inc hl
@@ -150,9 +150,9 @@
.next4
ld d, h
ld e, l
- ld a, [hSlideAmount]
+ ldh a, [hSlideAmount]
dec a
- ld [hSlideAmount], a
+ ldh [hSlideAmount], a
jr nz, .loop
pop bc
pop de
@@ -161,15 +161,15 @@
DisplayIntroNameTextBox:
push de
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, $a
ld c, $9
call TextBoxBorder
- coord hl, 3, 0
+ hlcoord 3, 0
ld de, .namestring
call PlaceString
pop de
- coord hl, 2, 2
+ hlcoord 2, 2
call PlaceString
call UpdateSprites
xor a
--- a/engine/movie/title.asm
+++ b/engine/movie/title.asm
@@ -11,7 +11,7 @@
ld de, wRivalName
call CopyFixedLengthText
xor a
- ld [hWY], a
+ ldh [hWY], a
ld [wLetterPrintingDelayFlags], a
ld hl, wd732
ld [hli], a
@@ -24,39 +24,39 @@
DisplayTitleScreen:
call GBPalWhiteOut
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
xor a
- ld [hTilesetType], a
- ld [hSCX], a
+ ldh [hTilesetType], a
+ ldh [hSCX], a
ld a, $40
- ld [hSCY], a
+ ldh [hSCY], a
ld a, $90
- ld [hWY], a
+ ldh [hWY], a
call ClearScreen
call DisableLCD
call LoadFontTilePatterns
ld hl, NintendoCopyrightLogoGraphics
- ld de, vTitleLogo2 + $100
- ld bc, $50
+ ld de, vTitleLogo2 tile 16
+ ld bc, 5 tiles
ld a, BANK(NintendoCopyrightLogoGraphics)
call FarCopyData2
ld hl, GamefreakLogoGraphics
- ld de, vTitleLogo2 + $100 + $50
- ld bc, $90
+ ld de, vTitleLogo2 tile (16 + 5)
+ ld bc, 9 tiles
ld a, BANK(GamefreakLogoGraphics)
call FarCopyData2
ld hl, PokemonLogoGraphics
ld de, vTitleLogo
- ld bc, $600
+ ld bc, $60 tiles
ld a, BANK(PokemonLogoGraphics)
call FarCopyData2 ; first chunk
- ld hl, PokemonLogoGraphics+$600
+ ld hl, PokemonLogoGraphics tile $60
ld de, vTitleLogo2
- ld bc, $100
+ ld bc, $10 tiles
ld a, BANK(PokemonLogoGraphics)
call FarCopyData2 ; second chunk
ld hl, Version_GFX
- ld de, vChars2 + $600 - (Version_GFXEnd - Version_GFX - $50)
+ ld de, vChars2 tile $60 + (10 tiles - (Version_GFXEnd - Version_GFX) * 2) / 2
ld bc, Version_GFXEnd - Version_GFX
ld a, BANK(Version_GFX)
call FarCopyDataDouble
@@ -63,7 +63,7 @@
call ClearBothBGMaps
; place tiles for pokemon logo (except for the last row)
- coord hl, 2, 1
+ hlcoord 2, 1
ld a, $80
ld de, SCREEN_WIDTH
ld c, 6
@@ -81,7 +81,7 @@
jr nz, .pokemonLogoTileLoop
; place tiles for the last row of the pokemon logo
- coord hl, 2, 7
+ hlcoord 2, 7
ld a, $31
ld b, $10
.pokemonLogoLastTileRowLoop
@@ -98,7 +98,7 @@
ld [hl], a
; place tiles for title screen copyright
- coord hl, 2, 17
+ hlcoord 2, 17
ld de, .tileScreenCopyrightTiles
ld b, $10
.tileScreenCopyrightTilesLoop
@@ -126,19 +126,19 @@
ld [wTitleMonSpecies], a
call LoadTitleMonSprite
- ld a, (vBGMap0 + $300) / $100
+ ld a, HIGH(vBGMap0 + $300)
call TitleScreenCopyTileMapToVRAM
call SaveScreenTilesToBuffer1
ld a, $40
- ld [hWY], a
+ ldh [hWY], a
call LoadScreenTilesFromBuffer2
- ld a, vBGMap0 / $100
+ ld a, HIGH(vBGMap0)
call TitleScreenCopyTileMapToVRAM
ld b, SET_PAL_TITLE_SCREEN
call RunPaletteCommand
call GBPalNormal
ld a, %11100100
- ld [rOBP0], a
+ ldh [rOBP0], a
; make pokemon logo bounce up and down
ld bc, hSCY ; background scroll Y
@@ -190,7 +190,7 @@
; scroll game version in from the right
call PrintGameVersionOnTitleScreen
ld a, SCREEN_HEIGHT_PX
- ld [hWY], a
+ ldh [hWY], a
ld d, 144
.scrollTitleScreenGameVersionLoop
ld h, d
@@ -205,7 +205,7 @@
and a
jr nz, .scrollTitleScreenGameVersionLoop
- ld a, vBGMap1 / $100
+ ld a, HIGH(vBGMap1)
call TitleScreenCopyTileMapToVRAM
call LoadScreenTilesFromBuffer2
call PrintGameVersionOnTitleScreen
@@ -226,7 +226,7 @@
ld c, 1
call CheckForUserInterruption
jr c, .finishedWaiting
- callba TitleScreenAnimateBallIfStarterOut
+ farcall TitleScreenAnimateBallIfStarterOut
call TitleScreenPickNewMon
jr .awaitUserInterruptionLoop
@@ -237,17 +237,17 @@
call GBPalWhiteOutWithDelay3
call ClearSprites
xor a
- ld [hWY], a
+ ldh [hWY], a
inc a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call ClearScreen
- ld a, vBGMap0 / $100
+ ld a, HIGH(vBGMap0)
call TitleScreenCopyTileMapToVRAM
- ld a, vBGMap1 / $100
+ ld a, HIGH(vBGMap1)
call TitleScreenCopyTileMapToVRAM
call Delay3
call LoadGBPal
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
ld b, a
and D_UP | SELECT | B_BUTTON
cp D_UP | SELECT | B_BUTTON
@@ -255,10 +255,10 @@
jp MainMenu
.doClearSaveDialogue
- jpba DoClearSaveDialogue
+ farjp DoClearSaveDialogue
TitleScreenPickNewMon:
- ld a, vBGMap0 / $100
+ ld a, HIGH(vBGMap0)
call TitleScreenCopyTileMapToVRAM
.loop
@@ -280,29 +280,29 @@
call LoadTitleMonSprite
ld a, $90
- ld [hWY], a
+ ldh [hWY], a
ld d, 1 ; scroll out
- callba TitleScroll
+ farcall TitleScroll
ret
TitleScreenScrollInMon:
ld d, 0 ; scroll in
- callba TitleScroll
+ farcall TitleScroll
xor a
- ld [hWY], a
+ ldh [hWY], a
ret
ScrollTitleScreenGameVersion:
.wait
- ld a, [rLY]
+ ldh a, [rLY]
cp l
jr nz, .wait
ld a, h
- ld [rSCX], a
+ ldh [rSCX], a
.wait2
- ld a, [rLY]
+ ldh a, [rLY]
cp h
jr z, .wait2
ret
@@ -353,26 +353,26 @@
LoadTitleMonSprite:
ld [wcf91], a
ld [wd0b5], a
- coord hl, 5, 10
+ hlcoord 5, 10
call GetMonHeader
jp LoadFrontSpriteByMonIndex
TitleScreenCopyTileMapToVRAM:
- ld [hAutoBGTransferDest + 1], a
+ ldh [hAutoBGTransferDest + 1], a
jp Delay3
LoadCopyrightAndTextBoxTiles:
xor a
- ld [hWY], a
+ ldh [hWY], a
call ClearScreen
call LoadTextBoxTilePatterns
LoadCopyrightTiles:
ld de, NintendoCopyrightLogoGraphics
- ld hl, vChars2 + $600
+ ld hl, vChars2 tile $60
lb bc, BANK(NintendoCopyrightLogoGraphics), (GamefreakLogoGraphicsEnd - NintendoCopyrightLogoGraphics) / $10
call CopyVideoData
- coord hl, 2, 7
+ hlcoord 2, 7
ld de, CopyrightTextString
jp PlaceString
@@ -386,7 +386,7 @@
; prints version text (red, blue)
PrintGameVersionOnTitleScreen:
- coord hl, 7, 8
+ hlcoord 7, 8
ld de, VersionOnTitleScreenText
jp PlaceString
--- a/engine/movie/title2.asm
+++ b/engine/movie/title2.asm
@@ -69,15 +69,15 @@
.ScrollBetween:
.wait
- ld a, [rLY] ; rLY
+ ldh a, [rLY] ; rLY
cp l
jr nz, .wait
ld a, h
- ld [rSCX], a
+ ldh [rSCX], a
.wait2
- ld a, [rLY] ; rLY
+ ldh a, [rLY] ; rLY
cp h
jr z, .wait2
ret
--- a/engine/movie/trade.asm
+++ b/engine/movie/trade.asm
@@ -20,14 +20,14 @@
TradeAnimCommon:
ld a, [wOptions]
push af
- ld a, [hSCY]
+ ldh a, [hSCY]
push af
- ld a, [hSCX]
+ ldh a, [hSCX]
push af
xor a
ld [wOptions], a
- ld [hSCY], a
- ld [hSCX], a
+ ldh [hSCY], a
+ ldh [hSCX], a
push de
.loop
pop de
@@ -49,9 +49,9 @@
jp hl ; call trade func, which will return to the top of the loop
.done
pop af
- ld [hSCX], a
+ ldh [hSCX], a
pop af
- ld [hSCY], a
+ ldh [hSCY], a
pop af
ld [wOptions], a
ret
@@ -137,10 +137,10 @@
Trade_CopyTileMapToVRAM:
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ret
Trade_Delay80:
@@ -148,7 +148,7 @@
jp DelayFrames
Trade_ClearTileMap:
- coord hl, 0, 0
+ hlcoord 0, 0
ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
ld a, " "
jp FillMemory
@@ -157,12 +157,12 @@
call Trade_ClearTileMap
call DisableLCD
ld hl, TradingAnimationGraphics
- ld de, vChars2 + $310
+ ld de, vChars2 tile $31
ld bc, TradingAnimationGraphicsEnd - TradingAnimationGraphics
ld a, BANK(TradingAnimationGraphics)
call FarCopyData2
ld hl, TradingAnimationGraphics2
- ld de, vSprites + $7c0
+ ld de, vSprites tile $7c
ld bc, TradingAnimationGraphics2End - TradingAnimationGraphics2
ld a, BANK(TradingAnimationGraphics2)
call FarCopyData2
@@ -181,10 +181,10 @@
jr z, .next
ld a, $f0 ; SGB OBP0
.next
- ld [rOBP0], a
+ ldh [rOBP0], a
call EnableLCD
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld a, [wTradedPlayerMonSpecies]
ld [wd11e], a
call GetMonName
@@ -198,8 +198,8 @@
Trade_LoadMonPartySpriteGfx:
ld a, %11010000
- ld [rOBP1], a
- jpba LoadMonPartySpriteGfx
+ ldh [rOBP1], a
+ farjp LoadMonPartySpriteGfx
Trade_SwapNames:
ld hl, wPlayerName
@@ -224,20 +224,20 @@
Trade_ShowPlayerMon:
ld a, %10101011
- ld [rLCDC], a
+ ldh [rLCDC], a
ld a, $50
- ld [hWY], a
+ ldh [hWY], a
ld a, $86
- ld [rWX], a
- ld [hSCX], a
+ ldh [rWX], a
+ ldh [hSCX], a
xor a
- ld [hAutoBGTransferEnabled], a
- coord hl, 4, 0
+ ldh [hAutoBGTransferEnabled], a
+ hlcoord 4, 0
ld b, 6
ld c, 10
call TextBoxBorder
call Trade_PrintPlayerMonInfoText
- ld b, vBGMap0 / $100
+ ld b, HIGH(vBGMap0)
call CopyScreenTileBufferToVRAM
call ClearScreen
ld a, [wTradedPlayerMonSpecies]
@@ -247,8 +247,8 @@
push af
call DelayFrame
pop af
- ld [rWX], a
- ld [hSCX], a
+ ldh [rWX], a
+ ldh [hSCX], a
dec a
dec a
and a
@@ -261,12 +261,12 @@
ld a, [wTradedPlayerMonSpecies]
call PlayCry
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ret
Trade_DrawOpenEndOfLinkCable:
call Trade_ClearTileMap
- ld b, vBGMap0 / $100
+ ld b, HIGH(vBGMap0)
call CopyScreenTileBufferToVRAM
ld b, SET_PAL_GENERIC
call RunPaletteCommand
@@ -277,11 +277,11 @@
call Trade_CopyCableTilesOffScreen
ld a, $a0
- ld [hSCX], a
+ ldh [hSCX], a
call DelayFrame
ld a, %10001011
- ld [rLCDC], a
- coord hl, 6, 2
+ ldh [rLCDC], a
+ hlcoord 6, 2
ld b, $7 ; open end of link cable tile ID list index
call CopyTileIDsFromList_ZeroBaseTileID
call Trade_CopyTileMapToVRAM
@@ -289,9 +289,9 @@
call PlaySound
ld c, 20
.loop
- ld a, [hSCX]
+ ldh a, [hSCX]
add 4
- ld [hSCX], a
+ ldh [hSCX], a
dec c
jr nz, .loop
ret
@@ -302,7 +302,7 @@
ld c, 10
call DelayFrames
ld a, %11100100
- ld [rOBP0], a
+ ldh [rOBP0], a
xor a
ld [wLinkCableAnimBulgeToggle], a
lb bc, $20, $60
@@ -336,13 +336,13 @@
.ballSpriteReachedEdgeOfScreen
call ClearSprites
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call ClearScreen
ld b, $98
call CopyScreenTileBufferToVRAM
call Delay3
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ret
Trade_BallInsideLinkCableOAM:
@@ -353,7 +353,7 @@
ld a, TRADE_BALL_TILT_ANIM
call Trade_ShowAnimation
call Trade_ShowClearedWindow
- coord hl, 4, 10
+ hlcoord 4, 10
ld b, 6
ld c, 10
call TextBoxBorder
@@ -360,17 +360,17 @@
call Trade_PrintEnemyMonInfoText
call Trade_CopyTileMapToVRAM
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld a, [wTradedEnemyMonSpecies]
call Trade_LoadMonSprite
ld a, TRADE_BALL_POOF_ANIM
call Trade_ShowAnimation
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld a, [wTradedEnemyMonSpecies]
call PlayCry
call Trade_Delay100
- coord hl, 4, 10
+ hlcoord 4, 10
lb bc, 8, 12
call ClearScreenArea
jp PrintTradeTakeCareText
@@ -381,7 +381,7 @@
ld a, $1
ld [wTradedMonMovingRight], a
ld a, %11100100
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, $54
ld [wBaseCoordX], a
ld a, $1c
@@ -397,7 +397,7 @@
ld b, $6
call Trade_AnimMonMoveHorizontal
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Trade_DrawCableAcrossScreen
ld b, $4
call Trade_AnimMonMoveHorizontal
@@ -405,7 +405,7 @@
ld b, $6
call Trade_AnimMonMoveHorizontal
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Trade_AnimMonMoveVertical
jp ClearSprites
@@ -430,7 +430,7 @@
ld b, $6
call Trade_AnimMonMoveHorizontal
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Trade_DrawCableAcrossScreen
ld b, $4
call Trade_AnimMonMoveHorizontal
@@ -438,24 +438,24 @@
ld b, $6
call Trade_AnimMonMoveHorizontal
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
jp ClearSprites
Trade_InitGameboyTransferGfx:
; Initialises the graphics for showing a mon moving between gameboys.
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call ClearScreen
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Trade_LoadMonPartySpriteGfx
call DelayFrame
ld a, %10101011
- ld [rLCDC], a
+ ldh [rLCDC], a
xor a
- ld [hSCX], a
+ ldh [hSCX], a
ld a, $90
- ld [hWY], a
+ ldh [hWY], a
ret
Trade_DrawLeftGameboy:
@@ -462,7 +462,7 @@
call Trade_ClearTileMap
; draw link cable
- coord hl, 11, 4
+ hlcoord 11, 4
ld a, $5d
ld [hli], a
ld a, $5e
@@ -473,16 +473,16 @@
jr nz, .loop
; draw gameboy pic
- coord hl, 5, 3
+ hlcoord 5, 3
ld b, $6
call CopyTileIDsFromList_ZeroBaseTileID
; draw text box with player name below gameboy pic
- coord hl, 4, 12
+ hlcoord 4, 12
ld b, 2
ld c, 7
call TextBoxBorder
- coord hl, 5, 14
+ hlcoord 5, 14
ld de, wPlayerName
call PlaceString
@@ -492,7 +492,7 @@
call Trade_ClearTileMap
; draw horizontal segment of link cable
- coord hl, 0, 4
+ hlcoord 0, 4
ld a, $5e
ld c, $e
.loop
@@ -520,16 +520,16 @@
ld [hl], a
; draw gameboy pic
- coord hl, 7, 8
+ hlcoord 7, 8
ld b, $6
call CopyTileIDsFromList_ZeroBaseTileID
; draw text box with enemy name above link cable
- coord hl, 6, 0
+ hlcoord 6, 0
ld b, 2
ld c, 7
call TextBoxBorder
- coord hl, 7, 2
+ hlcoord 7, 2
ld de, wLinkEnemyTrainerName
call PlaceString
@@ -538,7 +538,7 @@
Trade_DrawCableAcrossScreen:
; Draws the link cable across the screen.
call Trade_ClearTileMap
- coord hl, 0, 4
+ hlcoord 0, 4
ld a, $5e
ld c, SCREEN_WIDTH
.loop
@@ -551,15 +551,15 @@
; This is used to copy the link cable tiles off screen so that the cable
; continues when the screen is scrolled.
push hl
- coord hl, 0, 4
+ hlcoord 0, 4
call CopyToRedrawRowOrColumnSrcTiles
pop hl
ld a, h
- ld [hRedrawRowOrColumnDest + 1], a
+ ldh [hRedrawRowOrColumnDest + 1], a
ld a, l
- ld [hRedrawRowOrColumnDest], a
+ ldh [hRedrawRowOrColumnDest], a
ld a, REDRAW_ROW
- ld [hRedrawRowOrColumnMode], a
+ ldh [hRedrawRowOrColumnMode], a
ld c, 10
jp DelayFrames
@@ -574,14 +574,14 @@
dec a
jr z, .movingRight
; moving left
- ld a, [hSCX]
+ ldh a, [hSCX]
sub $2
jr .next
.movingRight
- ld a, [hSCX]
+ ldh a, [hSCX]
add $2
.next
- ld [hSCX], a
+ ldh [hSCX], a
call DelayFrame
dec d
jr nz, .scrollLoop
@@ -596,9 +596,9 @@
push de
push bc
push hl
- ld a, [rBGP]
+ ldh a, [rBGP]
xor $3c ; make link cable flash
- ld [rBGP], a
+ ldh [rBGP], a
ld hl, wOAMBuffer + $02
ld de, $4
ld c, $14
@@ -615,7 +615,7 @@
ret
Trade_WriteCircledMonOAM:
- callba WriteMonPartySpriteOAMBySpecies
+ farcall WriteMonPartySpriteOAMBySpecies
call Trade_WriteCircleOAM
Trade_AddOffsetsToOAMCoords:
@@ -731,11 +731,11 @@
ld b, SET_PAL_POKEMON_WHOLE_SCREEN
ld c, 0
call RunPaletteCommand
- ld a, [hAutoBGTransferEnabled]
+ ldh a, [hAutoBGTransferEnabled]
xor $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call GetMonHeader
- coord hl, 7, 2
+ hlcoord 7, 2
call LoadFlippedFrontSpriteByMonIndex
ld c, 10
jp DelayFrames
@@ -743,16 +743,16 @@
Trade_ShowClearedWindow:
; clears the window and covers the BG entirely with the window
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call ClearScreen
ld a, %11100011
- ld [rLCDC], a
+ ldh [rLCDC], a
ld a, $7
- ld [rWX], a
+ ldh [rWX], a
xor a
- ld [hWY], a
+ ldh [hWY], a
ld a, $90
- ld [hSCX], a
+ ldh [hSCX], a
ret
Trade_SlideTextBoxOffScreen:
@@ -764,10 +764,10 @@
call DelayFrames
.loop
call DelayFrame
- ld a, [rWX]
+ ldh a, [rWX]
inc a
inc a
- ld [rWX], a
+ ldh [rWX], a
cp $a1
jr nz, .loop
call Trade_ClearTileMap
@@ -774,7 +774,7 @@
ld c, 10
call DelayFrames
ld a, $7
- ld [rWX], a
+ ldh [rWX], a
ret
PrintTradeWentToText:
--- a/engine/movie/trade2.asm
+++ b/engine/movie/trade2.asm
@@ -1,43 +1,43 @@
Trade_PrintPlayerMonInfoText:
- coord hl, 5, 0
+ hlcoord 5, 0
ld de, Trade_MonInfoText
call PlaceString
ld a, [wTradedPlayerMonSpecies]
ld [wd11e], a
predef IndexToPokedex
- coord hl, 9, 0
+ hlcoord 9, 0
ld de, wd11e
lb bc, LEADING_ZEROES | 1, 3
call PrintNumber
- coord hl, 5, 2
+ hlcoord 5, 2
ld de, wcf4b
call PlaceString
- coord hl, 8, 4
+ hlcoord 8, 4
ld de, wTradedPlayerMonOT
call PlaceString
- coord hl, 8, 6
+ hlcoord 8, 6
ld de, wTradedPlayerMonOTID
lb bc, LEADING_ZEROES | 2, 5
jp PrintNumber
Trade_PrintEnemyMonInfoText:
- coord hl, 5, 10
+ hlcoord 5, 10
ld de, Trade_MonInfoText
call PlaceString
ld a, [wTradedEnemyMonSpecies]
ld [wd11e], a
predef IndexToPokedex
- coord hl, 9, 10
+ hlcoord 9, 10
ld de, wd11e
lb bc, LEADING_ZEROES | 1, 3
call PrintNumber
- coord hl, 5, 12
+ hlcoord 5, 12
ld de, wcd6d
call PlaceString
- coord hl, 8, 14
+ hlcoord 8, 14
ld de, wTradedEnemyMonOT
call PlaceString
- coord hl, 8, 16
+ hlcoord 8, 16
ld de, wTradedEnemyMonOTID
lb bc, LEADING_ZEROES | 2, 5
jp PrintNumber
--- a/engine/overworld/auto_movement.asm
+++ b/engine/overworld/auto_movement.asm
@@ -66,7 +66,7 @@
call FillMemory
ld [hl], $ff
ld a, [wSpriteIndex]
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld de, wNPCMovementDirections2
call MoveSprite
ld a, $1
@@ -91,7 +91,7 @@
ret nz ; return if Oak is still moving
ld a, [wNumStepsToTake]
ld [wSimulatedJoypadStatesIndex], a
- ld [hNPCMovementDirections2Index], a
+ ldh [hNPCMovementDirections2Index], a
predef ConvertNPCMovementDirectionsToJoypadMasks
call StartSimulatingJoypadStates
ld a, $2
@@ -282,7 +282,7 @@
jr .loop
.notRival
ld a, [wSpriteIndex]
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
jp SetSpriteMovementBytesToFF
RivalIDs:
--- a/engine/overworld/clear_variables.asm
+++ b/engine/overworld/clear_variables.asm
@@ -1,14 +1,14 @@
ClearVariablesOnEnterMap::
ld a, SCREEN_HEIGHT_PX
- ld [hWY], a
- ld [rWY], a
+ ldh [hWY], a
+ ldh [rWY], a
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld [wStepCounter], a
ld [wLoneAttackNo], a
- ld [hJoyPressed], a
- ld [hJoyReleased], a
- ld [hJoyHeld], a
+ ldh [hJoyPressed], a
+ ldh [hJoyReleased], a
+ ldh [hJoyHeld], a
ld [wActionResultOrTookBattleTurn], a
ld [wUnusedD5A3], a
ld hl, wCardKeyDoorY
--- a/engine/overworld/cut.asm
+++ b/engine/overworld/cut.asm
@@ -38,7 +38,7 @@
call ClearSprites
call RestoreScreenTilesAndReloadTilePatterns
ld a, SCREEN_HEIGHT_PX
- ld [hWY], a
+ ldh [hWY], a
call Delay3
call LoadGBPal
call LoadCurrentMapView
@@ -45,7 +45,7 @@
call SaveScreenTilesToBuffer2
call Delay3
xor a
- ld [hWY], a
+ ldh [hWY], a
ld hl, UsedCutText
call PrintText
call LoadScreenTilesFromBuffer2
@@ -57,13 +57,13 @@
ld de, CutTreeBlockSwaps
call ReplaceTreeTileBlock
call RedrawMapView
- callba AnimCut
+ farcall AnimCut
ld a, $1
ld [wUpdateSpritesEnabled], a
ld a, SFX_CUT
call PlaySound
ld a, $90
- ld [hWY], a
+ ldh [hWY], a
call UpdateSprites
jp RedrawMapView
@@ -75,28 +75,28 @@
xor a
ld [wWhichAnimationOffsets], a
ld a, %11100100
- ld [rOBP1], a
+ ldh [rOBP1], a
ld a, [wCutTile]
cp $52
jr z, .grass
; tree
- ld de, Overworld_GFX + $2d0 ; cuttable tree sprite top row
- ld hl, vChars1 + $7c0
- lb bc, BANK(Overworld_GFX), $02
+ ld de, Overworld_GFX tile $2d ; cuttable tree sprite top row
+ ld hl, vChars1 tile $7c
+ lb bc, BANK(Overworld_GFX), 2
call CopyVideoData
- ld de, Overworld_GFX + $3d0 ; cuttable tree sprite bottom row
- ld hl, vChars1 + $7e0
- lb bc, BANK(Overworld_GFX), $02
+ ld de, Overworld_GFX tile $3d ; cuttable tree sprite bottom row
+ ld hl, vChars1 tile $7e
+ lb bc, BANK(Overworld_GFX), 2
call CopyVideoData
jr WriteCutOrBoulderDustAnimationOAMBlock
.grass
- ld hl, vChars1 + $7c0
+ ld hl, vChars1 tile $7c
call LoadCutGrassAnimationTilePattern
- ld hl, vChars1 + $7d0
+ ld hl, vChars1 tile $7d
call LoadCutGrassAnimationTilePattern
- ld hl, vChars1 + $7e0
+ ld hl, vChars1 tile $7e
call LoadCutGrassAnimationTilePattern
- ld hl, vChars1 + $7f0
+ ld hl, vChars1 tile $7f
call LoadCutGrassAnimationTilePattern
call WriteCutOrBoulderDustAnimationOAMBlock
ld hl, wOAMBuffer + $93
@@ -112,8 +112,8 @@
ret
LoadCutGrassAnimationTilePattern:
- ld de, AnimationTileset2 + $60 ; tile depicting a leaf
- lb bc, BANK(AnimationTileset2), $01
+ ld de, AnimationTileset2 tile 6 ; tile depicting a leaf
+ lb bc, BANK(AnimationTileset2), 1
jp CopyVideoData
WriteCutOrBoulderDustAnimationOAMBlock:
--- a/engine/overworld/cut2.asm
+++ b/engine/overworld/cut2.asm
@@ -15,9 +15,9 @@
ld [wCoordAdjustmentAmount], a
ld c, 2
call AdjustOAMBlockXPos2
- ld a, [rOBP1]
+ ldh a, [rOBP1]
xor $64
- ld [rOBP1], a
+ ldh [rOBP1], a
call DelayFrame
pop bc
dec c
@@ -65,9 +65,9 @@
ld [wCoordAdjustmentAmount], a
ld c, 1
call AdjustOAMBlockXPos2
- ld a, [rOBP1]
+ ldh a, [rOBP1]
xor $64
- ld [rOBP1], a
+ ldh [rOBP1], a
call DelayFrame
pop bc
dec c
--- a/engine/overworld/doors.asm
+++ b/engine/overworld/doors.asm
@@ -11,7 +11,7 @@
ld a, [hli]
ld h, [hl]
ld l, a
- aCoord 8, 9 ; a = lower left background tile under player's sprite
+ lda_coord 8, 9 ; a = lower left background tile under player's sprite
ld b, a
.loop
ld a, [hli]
--- a/engine/overworld/dust_smoke.asm
+++ b/engine/overworld/dust_smoke.asm
@@ -6,9 +6,9 @@
ld a, $ff
ld [wUpdateSpritesEnabled], a
ld a, %11100100
- ld [rOBP1], a
+ ldh [rOBP1], a
call LoadSmokeTileFourTimes
- callba WriteCutOrBoulderDustAnimationOAMBlock
+ farcall WriteCutOrBoulderDustAnimationOAMBlock
ld c, 8 ; number of steps in animation
.loop
push bc
@@ -18,9 +18,9 @@
ld c, 4
jp hl
.returnAddress
- ld a, [rOBP1]
+ ldh a, [rOBP1]
xor %01100100
- ld [rOBP1], a
+ ldh [rOBP1], a
call Delay3
pop bc
dec c
@@ -69,14 +69,14 @@
dw AdjustOAMBlockXPos
LoadSmokeTileFourTimes::
- ld hl, vChars1 + $7c0
- ld c, $4
+ ld hl, vChars1 tile $7c
+ ld c, 4
.loop
push bc
push hl
call LoadSmokeTile
pop hl
- ld bc, $10
+ ld bc, 1 tiles
add hl, bc
pop bc
dec c
--- a/engine/overworld/elevator.asm
+++ b/engine/overworld/elevator.asm
@@ -6,7 +6,7 @@
call Delay3
ld a, SFX_STOP_ALL_MUSIC
call PlaySound
- ld a, [hSCY]
+ ldh a, [hSCY]
ld d, a
ld e, $1
ld b, 100
@@ -15,7 +15,7 @@
xor $fe
ld e, a
add d
- ld [hSCY], a
+ ldh [hSCY], a
push bc
ld c, BANK(SFX_Collision_1)
ld a, SFX_COLLISION
@@ -26,7 +26,7 @@
dec b
jr nz, .shakeLoop
ld a, d
- ld [hSCY], a
+ ldh [hSCY], a
ld a, SFX_STOP_ALL_MUSIC
call PlaySound
ld c, BANK(SFX_Safari_Zone_PA)
@@ -56,7 +56,7 @@
add hl, de
ld a, h
and $3
- or vBGMap0 / $100
+ or HIGH(vBGMap0)
ld d, a
ld a, l
pop hl
--- a/engine/overworld/emotion_bubbles.asm
+++ b/engine/overworld/emotion_bubbles.asm
@@ -8,8 +8,8 @@
ld e, [hl]
inc hl
ld d, [hl]
- ld hl, vChars1 + $780
- lb bc, BANK(EmotionBubbles), $04
+ ld hl, vChars1 tile $78
+ lb bc, BANK(EmotionBubbles), 4
call CopyVideoData
ld a, [wUpdateSpritesEnabled]
push af
--- a/engine/overworld/healing_machine.asm
+++ b/engine/overworld/healing_machine.asm
@@ -1,7 +1,7 @@
AnimateHealingMachine:
ld de, PokeCenterFlashingMonitorAndHealBall
- ld hl, vChars0 + $7c0
- lb bc, BANK(PokeCenterFlashingMonitorAndHealBall), $03 ; loads one too many tiles
+ ld hl, vChars0 tile $7c
+ lb bc, BANK(PokeCenterFlashingMonitorAndHealBall), 3 ; should be 2
call CopyVideoData
ld hl, wUpdateSpritesEnabled
ld a, [hl]
@@ -8,10 +8,10 @@
push af
ld [hl], $ff
push hl
- ld a, [rOBP1]
+ ldh a, [rOBP1]
push af
ld a, $e0
- ld [rOBP1], a
+ ldh [rOBP1], a
ld hl, wOAMBuffer + $84
ld de, PokeCenterOAMData
call CopyHealingMachineOAM
@@ -56,7 +56,7 @@
ld c, 32
call DelayFrames
pop af
- ld [rOBP1], a
+ ldh [rOBP1], a
pop hl
pop af
ld [hl], a
@@ -78,9 +78,9 @@
FlashSprite8Times:
ld b, 8
.loop
- ld a, [rOBP1]
+ ldh a, [rOBP1]
xor d
- ld [rOBP1], a
+ ldh [rOBP1], a
ld c, 10
call DelayFrames
dec b
--- a/engine/overworld/hidden_objects.asm
+++ b/engine/overworld/hidden_objects.asm
@@ -58,7 +58,7 @@
ld [wHiddenObjectX], a
ld c, a
call CheckIfCoordsInFrontOfPlayerMatch
- ld a, [hCoordsInFrontOfPlayerMatch]
+ ldh a, [hCoordsInFrontOfPlayerMatch]
and a
jr z, .foundMatchingObject
inc hl
@@ -81,7 +81,7 @@
ret
.noMatch
ld a, $ff
- ld [hDidntFindAnyHiddenObject], a
+ ldh [hDidntFindAnyHiddenObject], a
ret
; checks if the coordinates in front of the player's sprite match Y in b and X in c
@@ -127,7 +127,7 @@
.didNotMatch
ld a, $ff
.done
- ld [hCoordsInFrontOfPlayerMatch], a
+ ldh [hCoordsInFrontOfPlayerMatch], a
ret
INCLUDE "data/events/hidden_objects.asm"
--- a/engine/overworld/ledges.asm
+++ b/engine/overworld/ledges.asm
@@ -8,7 +8,7 @@
predef GetTileAndCoordsInFrontOfPlayer
ld a, [wSpritePlayerStateData1FacingDirection]
ld b, a
- aCoord 8, 9
+ lda_coord 8, 9
ld c, a
ld a, [wTileInFrontOfPlayer]
ld d, a
@@ -36,7 +36,7 @@
inc hl
jr .loop
.foundMatch
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
and e
ret z
ld a, $ff
@@ -57,7 +57,7 @@
INCLUDE "data/tilesets/ledge_tiles.asm"
LoadHoppingShadowOAM:
- ld hl, vChars1 + $7f0
+ ld hl, vChars1 tile $7f
ld de, LedgeHoppingShadow
lb bc, BANK(LedgeHoppingShadow), (LedgeHoppingShadowEnd - LedgeHoppingShadow) / $8
call CopyVideoDataDouble
--- a/engine/overworld/map_sprites.asm
+++ b/engine/overworld/map_sprites.asm
@@ -4,10 +4,10 @@
; This is also called after displaying text because loading
; text tile patterns overwrites half of the sprite tile pattern data.
; Note on notation:
-; $C1X* and $C2X* are used to denote wSpriteStateData1-wSpriteStateData1 + $ff and wSpriteStateData2 + $00-wSpriteStateData2 + $ff sprite slot
-; fields, respectively, within loops. The X is the loop index.
-; If there is an inner loop, Y is the inner loop index, i.e. $C1Y* and $C2Y*
-; denote fields of the sprite slots iterated over in the inner loop.
+; x#SPRITESTATEDATA1_* and x#SPRITESTATEDATA2_* are used to denote wSpriteStateData1 and
+; wSpriteStateData2 sprite slot, respectively, within loops. The X is the loop index.
+; If there is an inner loop, Y is the inner loop index, i.e. y#SPRITESTATEDATA1_* and
+; y#SPRITESTATEDATA2_* denote fields of the sprite slots iterated over in the inner loop.
InitMapSprites::
call InitOutsideMapSprites
ret c ; return if the map is an outside map (already handled by above call)
@@ -14,10 +14,11 @@
; if the map is an inside map (i.e. mapID >= $25)
ld hl, wSpritePlayerStateData1PictureID
ld de, wSpritePlayerStateData2PictureID
-; Loop to copy picture ID's from $C1X0 to $C2XD for LoadMapSpriteTilePatterns.
+; Loop to copy picture IDs from [x#SPRITESTATEDATA1_PICTUREID]
+; to [x#SPRITESTATEDATA2_PICTUREID] for LoadMapSpriteTilePatterns.
.copyPictureIDLoop
- ld a, [hl] ; $C1X0 (picture ID)
- ld [de], a ; $C2XD
+ ld a, [hl] ; a = [x#SPRITESTATEDATA1_PICTUREID]
+ ld [de], a ; [x#SPRITESTATEDATA2_PICTUREID] = a
ld a, $10
add e
ld e, a
@@ -39,10 +40,12 @@
ld b, $10 ; number of sprite slots
ld hl, wSpritePlayerStateData2PictureID
xor a
- ld [hFourTileSpriteCount], a
-.copyPictureIDLoop ; loop to copy picture ID from $C2XD to $C2XE
- ld a, [hli] ; $C2XD (sprite picture ID)
- ld [hld], a ; $C2XE
+ ldh [hFourTileSpriteCount], a
+; Loop to copy picture IDs from [x#SPRITESTATEDATA2_PICTUREID]
+; to [x#SPRITESTATEDATA2_IMAGEBASEOFFSET].
+.copyPictureIDLoop
+ ld a, [hli] ; a = [x#SPRITESTATEDATA2_PICTUREID]
+ ld [hld], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] = a
ld a, l
add $10
ld l, a
@@ -81,7 +84,7 @@
ld a, l
cp e ; reached current slot?
jr z, .foundNextVRAMSlot
- ld a, [de] ; $C2YE (VRAM slot)
+ ld a, [de] ; y#SPRITESTATEDATA2_IMAGEBASEOFFSET
cp 11 ; is it one of the first 10 slots?
jr nc, .findNextVRAMSlotLoop
cp b ; compare the slot being checked to the current max
@@ -93,19 +96,19 @@
inc b ; increment previous max value to get next VRAM tile pattern slot
ld a, b ; a = next VRAM tile pattern slot
push af
- ld a, [hl] ; $C2XE (sprite picture ID)
+ ld a, [hl] ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET]
ld b, a ; b = current sprite picture ID
cp SPRITE_BALL ; is it a 4-tile sprite?
jr c, .notFourTileSprite
pop af
- ld a, [hFourTileSpriteCount]
+ ldh a, [hFourTileSpriteCount]
add 11
jr .storeVRAMSlot
.notFourTileSprite
pop af
.storeVRAMSlot
- ld [hl], a ; store VRAM slot at $C2XE
- ld [hVRAMSlot], a ; used to determine if it's 4-tile sprite later
+ ld [hl], a ; store VRAM slot at [x#SPRITESTATEDATA2_IMAGEBASEOFFSET]
+ ldh [hVRAMSlot], a ; used to determine if it's 4-tile sprite later
ld a, b ; a = current sprite picture ID
dec a
add a
@@ -127,13 +130,13 @@
push de
push bc
ld hl, vNPCSprites ; VRAM base address
- ld bc, $c0 ; number of bytes per VRAM slot
- ld a, [hVRAMSlot]
+ ld bc, 12 tiles ; number of bytes per VRAM slot
+ ldh a, [hVRAMSlot]
cp 11 ; is it a 4-tile sprite?
jr nc, .fourTileSpriteVRAMAddr
ld d, a
dec d
-; hl = vSprites + [hVRAMSlot] * $C0 (the number of bytes in 12 tiles)
+; hl = vSprites + [hVRAMSlot] * 12 tiles
.calculateVRAMAddrLoop
add hl, bc
dec d
@@ -140,14 +143,14 @@
jr nz, .calculateVRAMAddrLoop
jr .loadStillTilePattern
.fourTileSpriteVRAMAddr
- ld hl, vSprites + $7c0 ; address for second 4-tile sprite
- ld a, [hFourTileSpriteCount]
+ ld hl, vSprites tile $7c ; address for second 4-tile sprite
+ ldh a, [hFourTileSpriteCount]
and a
jr nz, .loadStillTilePattern
; if it's the first 4-tile sprite
- ld hl, vSprites + $780 ; address for first 4-tile sprite
+ ld hl, vSprites tile $78 ; address for first 4-tile sprite
inc a
- ld [hFourTileSpriteCount], a
+ ldh [hFourTileSpriteCount], a
.loadStillTilePattern
pop bc
pop de
@@ -167,7 +170,7 @@
.skipFirstLoad
pop de
pop hl
- ld a, [hVRAMSlot]
+ ldh a, [hVRAMSlot]
cp 11 ; is it a 4-tile sprite?
jr nc, .skipSecondLoad ; if so, there is no second block
push de
@@ -207,8 +210,8 @@
jr .nextSpriteSlot
.alreadyLoaded ; if the current picture ID has already had its tile patterns loaded
inc de
- ld a, [de] ; a = VRAM slot for the current picture ID (from $C2YE)
- ld [hl], a ; store VRAM slot in current wSpriteStateData2 sprite slot (at $C2XE)
+ ld a, [de] ; a = [y#SPRITESTATEDATA2_IMAGEBASEOFFSET]
+ ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET] = a
.nextSpriteSlot
ld a, l
add $10
@@ -217,10 +220,11 @@
jp nz, .loadTilePatternLoop
ld hl, wSpritePlayerStateData2PictureID
ld b, $10
-; the pictures ID's stored at $C2XD are no longer needed, so zero them
+; the pictures IDs stored at [x#SPRITESTATEDATA2_PICTUREID] are no longer needed,
+; so zero them
.zeroStoredPictureIDLoop
xor a
- ld [hl], a ; $C2XD
+ ld [hl], a ; [x#SPRITESTATEDATA2_PICTUREID]
ld a, $10
add l
ld l, a
@@ -292,8 +296,8 @@
ld [hl], a
ld bc, wSpriteSet
; Load the sprite set into RAM.
-; This loop also fills $C2XD (sprite picture ID) where X is from $0 to $A
-; with picture ID's. This is done so that LoadMapSpriteTilePatterns will
+; This loop also fills [x#SPRITESTATEDATA2_PICTUREID] where X is from $0 to $A
+; with picture IDs. This is done so that LoadMapSpriteTilePatterns will
; load tile patterns for all sprite pictures in the sprite set.
.loadSpriteSetLoop
ld a, $10
@@ -300,7 +304,7 @@
add l
ld l, a
ld a, [de] ; sprite picture ID from sprite set
- ld [hl], a ; $C2XD (sprite picture ID)
+ ld [hl], a ; [x#SPRITESTATEDATA2_PICTUREID]
ld [bc], a
inc de
inc bc
@@ -313,7 +317,7 @@
add l
ld l, a
xor a
- ld [hl], a ; $C2XD (sprite picture ID)
+ ld [hl], a ; [x#SPRITESTATEDATA2_PICTUREID]
dec b
jr nz, .zeroRemainingSlotsLoop
ld a, [wNumSprites]
@@ -330,7 +334,7 @@
; for the current map. So, they are not needed and are zeroed by this loop.
.zeroVRAMSlotsLoop
xor a
- ld [hl], a ; $C2XE (VRAM slot)
+ ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET]
ld a, $10
add l
ld l, a
@@ -347,7 +351,7 @@
; VRAM tile pattern slot.
.storeVRAMSlotsLoop
ld c, 0
- ld a, [hl] ; $C1X0 (picture ID) (zero if sprite slot is not used)
+ ld a, [hl] ; [x#SPRITESTATEDATA1_PICTUREID] (zero if sprite slot is not used)
and a ; is the sprite slot used?
jr z, .skipGettingPictureIndex ; if the sprite slot is not used
ld b, a ; b = picture ID
@@ -367,7 +371,7 @@
add l
ld l, a
ld a, c ; a = VRAM slot (zero if sprite slot is not used)
- ld [hl], a ; $C2XE (VRAM slot)
+ ld [hl], a ; [x#SPRITESTATEDATA2_IMAGEBASEOFFSET]
pop hl
ld a, $10
add l
--- a/engine/overworld/missable_objects.asm
+++ b/engine/overworld/missable_objects.asm
@@ -31,19 +31,19 @@
sub d
ld h, a
ld a, h
- ld [hDividend], a
+ ldh [hDividend], a
ld a, l
- ld [hDividend+1], a
+ ldh [hDividend+1], a
xor a
- ld [hDividend+2], a
- ld [hDividend+3], a
+ ldh [hDividend+2], a
+ ldh [hDividend+3], a
ld a, $3
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, $2
call Divide ; divide difference by 3, resulting in the global offset (number of missable items before ours)
ld a, [wCurMap]
ld b, a
- ld a, [hDividend+3]
+ ldh a, [hDividend+3]
ld c, a ; store global offset in c
ld de, wMissableObjectList
pop hl
@@ -99,7 +99,7 @@
; tests if current sprite is a missable object that is hidden/has been removed
IsObjectHidden:
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
swap a
ld b, a
ld hl, wMissableObjectList
@@ -120,7 +120,7 @@
.notHidden
xor a
.hidden
- ld [hIsHiddenMissableObject], a
+ ldh [hIsHiddenMissableObject], a
ret
; adds missable object (items, leg. pokemon, etc.) to the map
--- a/engine/overworld/movement.asm
+++ b/engine/overworld/movement.asm
@@ -13,8 +13,8 @@
; background tile the sprite is standing on is greater than $5F, which is
; the maximum number for map tiles
.checkIfTextBoxInFrontOfSprite
- aCoord 8, 9
- ld [hTilePlayerStandingOn], a
+ lda_coord 8, 9
+ ldh [hTilePlayerStandingOn], a
cp MAP_TILESET_SIZE
jr c, .lowerLeftTileIsMapTile
.disableSprite
@@ -23,7 +23,7 @@
ret
.lowerLeftTileIsMapTile
call DetectCollisionBetweenSprites
- ld h, wSpriteStateData1 / $100
+ ld h, HIGH(wSpriteStateData1)
ld a, [wWalkCounter]
and a
jr nz, .moving
@@ -63,7 +63,7 @@
ld a, [wd736]
bit 7, a ; is the player sprite spinning due to a spin tile?
jr nz, .skipSpriteAnim
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $7
ld l, a
ld a, [hl]
@@ -89,7 +89,7 @@
; lower priority than the background so that it's partially obscured by the
; grass. Only the lower half of the sprite is permitted to have the priority
; bit set by later logic.
- ld a, [hTilePlayerStandingOn]
+ ldh a, [hTilePlayerStandingOn]
ld c, a
ld a, [wGrassTile]
cp c
@@ -103,7 +103,7 @@
UnusedReadSpriteDataFunction:
push bc
push af
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
ld c, a
pop af
add c
@@ -112,7 +112,7 @@
ret
UpdateNPCSprite:
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
swap a
dec a
add a
@@ -121,20 +121,20 @@
ld l, a
ld a, [hl] ; read movement byte 2
ld [wCurSpriteMovement2], a
- ld h, $c1
- ld a, [hCurrentSpriteOffset]
+ ld h, HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
ld l, a
inc l
- ld a, [hl] ; c1x1
+ ld a, [hl] ; x#SPRITESTATEDATA1_MOVEMENTSTATUS
and a
jp z, InitializeSpriteStatus
call CheckSpriteAvailability
ret c ; if sprite is invisible, on tile >=MAP_TILESET_SIZE, in grass or player is currently walking
- ld h, $c1
- ld a, [hCurrentSpriteOffset]
+ ld h, HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
ld l, a
inc l
- ld a, [hl] ; c1x1
+ ld a, [hl] ; x#SPRITESTATEDATA1_MOVEMENTSTATUS
bit 7, a ; is the face player flag set?
jp nz, MakeNPCFacePlayer
ld b, a
@@ -143,18 +143,18 @@
jp nz, notYetMoving
ld a, b
cp $2
- jp z, UpdateSpriteMovementDelay ; c1x1 == 2
+ jp z, UpdateSpriteMovementDelay ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] == 2
cp $3
- jp z, UpdateSpriteInWalkingAnimation ; c1x1 == 3
+ jp z, UpdateSpriteInWalkingAnimation ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] == 3
ld a, [wWalkCounter]
and a
ret nz ; don't do anything yet if player is currently moving (redundant, already tested in CheckSpriteAvailability)
call InitializeSpriteScreenPosition
ld h, $c2
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $6
ld l, a
- ld a, [hl] ; c2x6: movement byte 1
+ ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1
inc a
jr z, .randomMovement ; value $FF
inc a
@@ -263,18 +263,18 @@
; set carry on failure, clears carry on success
TryWalking:
push hl
- ld h, $c1
- ld a, [hCurrentSpriteOffset]
+ ld h, HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
add $9
ld l, a
- ld [hl], c ; c1x9 (update facing direction)
- ld a, [hCurrentSpriteOffset]
+ ld [hl], c ; x#SPRITESTATEDATA1_FACINGDIRECTION
+ ldh a, [hCurrentSpriteOffset]
add $3
ld l, a
- ld [hl], d ; c1x3 (update Y movement delta)
+ ld [hl], d ; x#SPRITESTATEDATA1_YSTEPVECTOR
inc l
inc l
- ld [hl], e ; c1x5 (update X movement delta)
+ ld [hl], e ; x#SPRITESTATEDATA1_XSTEPVECTOR
pop hl
push de
ld c, [hl] ; read tile to walk onto
@@ -282,58 +282,58 @@
pop de
ret c ; cannot walk there (reinitialization of delay values already done)
ld h, $c2
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $4
ld l, a
- ld a, [hl] ; c2x4: Y position
+ ld a, [hl] ; x#SPRITESTATEDATA2_MAPY
add d
ld [hli], a ; update Y position
- ld a, [hl] ; c2x5: X position
+ ld a, [hl] ; x#SPRITESTATEDATA2_MAPX
add e
ld [hl], a ; update X position
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
ld l, a
- ld [hl], $10 ; c2x0=16: walk animation counter
+ ld [hl], $10 ; [x#SPRITESTATEDATA2_WALKANIMATIONCOUNTER] = 16
dec h
inc l
- ld [hl], $3 ; c1x1: set movement status to walking
+ ld [hl], $3 ; x#SPRITESTATEDATA1_MOVEMENTSTATUS
jp UpdateSpriteImage
; update the walking animation parameters for a sprite that is currently walking
UpdateSpriteInWalkingAnimation:
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $7
ld l, a
- ld a, [hl] ; c1x7 (counter until next walk animation frame)
+ ld a, [hl] ; x#SPRITESTATEDATA1_INTRAANIMFRAMECOUNTER
inc a
- ld [hl], a ; c1x7 += 1
+ ld [hl], a ; [x#SPRITESTATEDATA1_INTRAANIMFRAMECOUNTER]++
cp $4
jr nz, .noNextAnimationFrame
xor a
- ld [hl], a ; c1x7 = 0
+ ld [hl], a ; [x#SPRITESTATEDATA1_INTRAANIMFRAMECOUNTER] = 0
inc l
- ld a, [hl] ; c1x8 (walk animation frame)
+ ld a, [hl] ; x#SPRITESTATEDATA1_ANIMFRAMECOUNTER
inc a
and $3
ld [hl], a ; advance to next animation frame every 4 ticks (16 ticks total for one step)
.noNextAnimationFrame
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $3
ld l, a
- ld a, [hli] ; c1x3 (movement Y delta)
+ ld a, [hli] ; x#SPRITESTATEDATA1_YSTEPVECTOR
ld b, a
- ld a, [hl] ; c1x4 (screen Y position)
+ ld a, [hl] ; x#SPRITESTATEDATA1_YPIXELS
add b
- ld [hli], a ; update screen Y position
- ld a, [hli] ; c1x5 (movement X delta)
+ ld [hli], a ; update [x#SPRITESTATEDATA1_YPIXELS]
+ ld a, [hli] ; x#SPRITESTATEDATA1_XSTEPVECTOR
ld b, a
- ld a, [hl] ; c1x6 (screen X position)
+ ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS
add b
- ld [hl], a ; update screen X position
- ld a, [hCurrentSpriteOffset]
+ ld [hl], a ; update [x#SPRITESTATEDATA1_XPIXELS]
+ ldh a, [hCurrentSpriteOffset]
ld l, a
inc h
- ld a, [hl] ; c2x0 (walk animation counter)
+ ld a, [hl] ; x#SPRITESTATEDATA2_WALKANIMATIONCOUNTER
dec a
ld [hl], a ; update walk animation counter
ret nz
@@ -340,45 +340,47 @@
ld a, $6 ; walking finished, update state
add l
ld l, a
- ld a, [hl] ; c2x6 (movement byte 1)
+ ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1
cp $fe
jr nc, .initNextMovementCounter ; values $fe and $ff
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
inc a
ld l, a
dec h
- ld [hl], $1 ; c1x1 = 1 (movement status ready)
+ ld [hl], $1 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = 1 (movement status ready)
ret
.initNextMovementCounter
call Random
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $8
ld l, a
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
and $7f
- ld [hl], a ; c2x8: set next movement delay to a random value in [0,$7f]
- dec h ; note that value 0 actually makes the delay $100 (bug?)
- ld a, [hCurrentSpriteOffset]
+ ld [hl], a ; x#SPRITESTATEDATA2_MOVEMENTDELAY:
+ ; set next movement delay to a random value in [0,$7f]
+ ; note that value 0 actually makes the delay $100 (bug?)
+ dec h ; HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
inc a
ld l, a
- ld [hl], $2 ; c1x1 = 2 (movement status)
+ ld [hl], $2 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = 2 (movement status)
inc l
inc l
xor a
- ld b, [hl] ; c1x3 (movement Y delta)
- ld [hli], a ; reset movement Y delta
+ ld b, [hl] ; x#SPRITESTATEDATA1_YSTEPVECTOR
+ ld [hli], a ; [x#SPRITESTATEDATA1_YSTEPVECTOR] = 0
inc l
- ld c, [hl] ; c1x5 (movement X delta)
- ld [hl], a ; reset movement X delta
+ ld c, [hl] ; x#SPRITESTATEDATA1_XSTEPVECTOR
+ ld [hl], a ; [x#SPRITESTATEDATA1_XSTEPVECTOR] = 0
ret
-; update delay value (c2x8) for sprites in the delayed state (c1x1)
+; update [x#SPRITESTATEDATA2_MOVEMENTDELAY] for sprites in the delayed state (x#SPRITESTATEDATA1_MOVEMENTSTATUS)
UpdateSpriteMovementDelay:
- ld h, $c2
- ld a, [hCurrentSpriteOffset]
+ ld h, HIGH(wSpriteStateData2)
+ ldh a, [hCurrentSpriteOffset]
add $6
ld l, a
- ld a, [hl] ; c2x6: movement byte 1
+ ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1
inc l
inc l
cp $fe
@@ -386,20 +388,20 @@
ld [hl], $0
jr .moving
.tickMoveCounter
- dec [hl] ; c2x8: frame counter until next movement
+ dec [hl] ; x#SPRITESTATEDATA2_MOVEMENTDELAY
jr nz, notYetMoving
.moving
dec h
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
inc a
ld l, a
- ld [hl], $1 ; c1x1 = 1 (mark as ready to move)
+ ld [hl], $1 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = 1 (mark as ready to move)
notYetMoving:
- ld h, wSpriteStateData1 / $100
- ld a, [hCurrentSpriteOffset]
- add wSpritePlayerStateData1AnimFrameCounter - wSpritePlayerStateData1
+ ld h, HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA1_ANIMFRAMECOUNTER
ld l, a
- ld [hl], $0 ; c1x8 = 0 (walk animation frame)
+ ld [hl], $0 ; [x#SPRITESTATEDATA1_ANIMFRAMECOUNTER] = 0 (walk animation frame)
jp UpdateSpriteImage
MakeNPCFacePlayer:
@@ -429,66 +431,66 @@
.notFacingRight
ld c, SPRITE_FACING_LEFT
.facingDirectionDetermined
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $9
ld l, a
- ld [hl], c ; c1x9: set facing direction
+ ld [hl], c ; [x#SPRITESTATEDATA1_FACINGDIRECTION]: set facing direction
jr notYetMoving
InitializeSpriteStatus:
- ld [hl], $1 ; $c1x1: set movement status to ready
+ ld [hl], $1 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = ready
inc l
- ld [hl], $ff ; $c1x2: set sprite image to $ff (invisible/off screen)
- inc h
- ld a, [hCurrentSpriteOffset]
+ ld [hl], $ff ; [x#SPRITESTATEDATA1_IMAGEINDEX] = invisible/off screen
+ inc h ; HIGH(wSpriteStateData2)
+ ldh a, [hCurrentSpriteOffset]
add $2
ld l, a
ld a, $8
- ld [hli], a ; $c2x2: set Y displacement to 8
- ld [hl], a ; $c2x3: set X displacement to 8
+ ld [hli], a ; [x#SPRITESTATEDATA2_YDISPLACEMENT] = 8
+ ld [hl], a ; [x#SPRITESTATEDATA2_XDISPLACEMENT] = 8
ret
-; calculates the sprite's screen position form its map position and the player position
+; calculates the sprite's screen position from its map position and the player position
InitializeSpriteScreenPosition:
- ld h, wSpriteStateData2 / $100
- ld a, [hCurrentSpriteOffset]
- add wSpritePlayerStateData2MapY - wSpritePlayerStateData2
+ ld h, HIGH(wSpriteStateData2)
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA2_MAPY
ld l, a
ld a, [wYCoord]
ld b, a
- ld a, [hl] ; c2x4 (Y position + 4)
+ ld a, [hl] ; x#SPRITESTATEDATA2_MAPY
sub b ; relative to player position
swap a ; * 16
sub $4 ; - 4
dec h
- ld [hli], a ; c1x4 (screen Y position)
+ ld [hli], a ; [x#SPRITESTATEDATA1_YPIXELS]
inc h
ld a, [wXCoord]
ld b, a
- ld a, [hli] ; c2x6 (X position + 4)
+ ld a, [hli] ; x#SPRITESTATEDATA2_MAPX
sub b ; relative to player position
swap a ; * 16
dec h
- ld [hl], a ; c1x6 (screen X position)
+ ld [hl], a ; [x#SPRITESTATEDATA1_XPIXELS]
ret
; tests if sprite is off screen or otherwise unable to do anything
CheckSpriteAvailability:
predef IsObjectHidden
- ld a, [hIsHiddenMissableObject]
+ ldh a, [hIsHiddenMissableObject]
and a
jp nz, .spriteInvisible
- ld h, wSpriteStateData2 / $100
- ld a, [hCurrentSpriteOffset]
- add wSpritePlayerStateData2MovementByte1 - wSpritePlayerStateData2
+ ld h, HIGH(wSpriteStateData2)
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA2_MOVEMENTBYTE1
ld l, a
- ld a, [hl] ; c2x6: movement byte 1
+ ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1
cp $fe
jr c, .skipXVisibilityTest ; movement byte 1 < $fe (i.e. the sprite's movement is scripted)
- ld a, [hCurrentSpriteOffset]
- add wSpritePlayerStateData2MapY - wSpritePlayerStateData2
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA2_MAPY
ld l, a
- ld b, [hl] ; c2x4: Y pos (+4)
+ ld b, [hl] ; x#SPRITESTATEDATA2_MAPY
ld a, [wYCoord]
cp b
jr z, .skipYVisibilityTest
@@ -498,7 +500,7 @@
jr c, .spriteInvisible ; below screen region
.skipYVisibilityTest
inc l
- ld b, [hl] ; c2x5: X pos (+4)
+ ld b, [hl] ; x#SPRITESTATEDATA2_MAPX
ld a, [wXCoord]
cp b
jr z, .skipXVisibilityTest
@@ -526,11 +528,11 @@
cp d
jr c, .spriteVisible ; standing on tile with ID >=MAP_TILESET_SIZE (top right tile)
.spriteInvisible
- ld h, wSpriteStateData1 / $100
- ld a, [hCurrentSpriteOffset]
- add wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1
+ ld h, HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA1_IMAGEINDEX
ld l, a
- ld [hl], $ff ; c1x2
+ ld [hl], $ff ; x#SPRITESTATEDATA1_IMAGEINDEX
scf
jr .done
.spriteVisible
@@ -540,7 +542,7 @@
jr nz, .done ; if player is currently walking, we're done
call UpdateSpriteImage
inc h
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $7
ld l, a
ld a, [wGrassTile]
@@ -549,28 +551,28 @@
jr nz, .notInGrass
ld a, $80
.notInGrass
- ld [hl], a ; c2x7
+ ld [hl], a ; x#SPRITESTATEDATA2_GRASSPRIORITY
and a
.done
ret
UpdateSpriteImage:
- ld h, $c1
- ld a, [hCurrentSpriteOffset]
+ ld h, HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
add $8
ld l, a
- ld a, [hli] ; c1x8: walk animation frame
+ ld a, [hli] ; x#SPRITESTATEDATA1_ANIMFRAMECOUNTER
ld b, a
- ld a, [hl] ; c1x9: facing direction
+ ld a, [hl] ; x#SPRITESTATEDATA1_FACINGDIRECTION
add b
ld b, a
- ld a, [hTilePlayerStandingOn]
+ ldh a, [hTilePlayerStandingOn]
add b
ld b, a
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $2
ld l, a
- ld [hl], b ; c1x2: sprite to display
+ ld [hl], b ; x#SPRITESTATEDATA1_IMAGEINDEX
ret
; tests if sprite can walk the specified direction
@@ -580,11 +582,11 @@
; e: X movement delta (-1, 0 or 1)
; set carry on failure, clears carry on success
CanWalkOntoTile:
- ld h, wSpriteStateData2 / $100
- ld a, [hCurrentSpriteOffset]
- add wSpritePlayerStateData2MovementByte1 - wSpritePlayerStateData2
+ ld h, HIGH(wSpriteStateData2)
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA2_MOVEMENTBYTE1
ld l, a
- ld a, [hl] ; c2x6 (movement byte 1)
+ ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1
cp $fe
jr nc, .notScripted ; values $fe and $ff
; always allow walking if the movement is scripted
@@ -602,23 +604,23 @@
cp c
jr nz, .tilePassableLoop
ld h, $c2
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $6
ld l, a
- ld a, [hl] ; $c2x6 (movement byte 1)
+ ld a, [hl] ; x#SPRITESTATEDATA2_MOVEMENTBYTE1
inc a
jr z, .impassable ; if $ff, no movement allowed (however, changing direction is)
- ld h, wSpriteStateData1 / $100
- ld a, [hCurrentSpriteOffset]
- add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1
+ ld h, HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA1_YPIXELS
ld l, a
- ld a, [hli] ; c1x4 (screen Y pos)
+ ld a, [hli] ; x#SPRITESTATEDATA1_YPIXELS
add $4 ; align to blocks (Y pos is always 4 pixels off)
add d ; add Y delta
cp $80 ; if value is >$80, the destination is off screen (either $81 or $FF underflow)
jr nc, .impassable ; don't walk off screen
inc l
- ld a, [hl] ; c1x6 (screen X pos)
+ ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS
add e ; add X delta
cp $90 ; if value is >$90, the destination is off screen (either $91 or $FF underflow)
jr nc, .impassable ; don't walk off screen
@@ -627,30 +629,35 @@
call DetectCollisionBetweenSprites
pop bc
pop de
- ld h, wSpriteStateData1 / $100
- ld a, [hCurrentSpriteOffset]
+ ld h, HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
add $c
ld l, a
- ld a, [hl] ; c1xc (directions in which sprite collision would occur)
+ ld a, [hl] ; x#SPRITESTATEDATA1_COLLISIONDATA (directions in which sprite collision would occur)
and b ; check against chosen direction (1,2,4 or 8)
jr nz, .impassable ; collision between sprites, don't go there
- ld h, wSpriteStateData2 / $100
- ld a, [hCurrentSpriteOffset]
- add wSpritePlayerStateData2YDisplacement - wSpritePlayerStateData2
+ ld h, HIGH(wSpriteStateData2)
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA2_YDISPLACEMENT
ld l, a
- ld a, [hli] ; c2x2 (sprite Y displacement, initialized at $8, keep track of where a sprite did go)
+ ld a, [hli] ; x#SPRITESTATEDATA2_YDISPLACEMENT (initialized at $8, keep track of where a sprite did go)
bit 7, d ; check if going upwards (d=$ff)
jr nz, .upwards
add d
+ ; bug: these tests against $5 probably were supposed to prevent
+ ; sprites from walking out too far, but this line makes sprites get
+ ; stuck whenever they walked upwards 5 steps
+ ; on the other hand, the amount a sprite can walk out to the
+ ; right of bottom is not limited (until the counter overflows)
cp $5
- jr c, .impassable ; if c2x2+d < 5, don't go ;bug: this tests probably were supposed to prevent sprites
- jr .checkHorizontal ; from walking out too far, but this line makes sprites get stuck
-.upwards ; whenever they walked upwards 5 steps
- sub $1 ; on the other hand, the amount a sprite can walk out to the
- jr c, .impassable ; if d2x2 == 0, don't go ; right of bottom is not limited (until the counter overflows)
+ jr c, .impassable ; if [x#SPRITESTATEDATA2_YDISPLACEMENT]+d < 5, don't go
+ jr .checkHorizontal
+.upwards
+ sub $1
+ jr c, .impassable ; if [x#SPRITESTATEDATA2_YDISPLACEMENT] == 0, don't go
.checkHorizontal
ld d, a
- ld a, [hl] ; c2x3 (sprite X displacement, initialized at $8, keep track of where a sprite did go)
+ ld a, [hl] ; x#SPRITESTATEDATA2_XDISPLACEMENT (initialized at $8, keep track of where a sprite did go)
bit 7, e ; check if going left (e=$ff)
jr nz, .left
add e
@@ -658,32 +665,32 @@
jr .passable
.left
sub $1
- jr c, .impassable ; if d2x3 == 0, don't go
+ jr c, .impassable ; if [x#SPRITESTATEDATA2_XDISPLACEMENT] == 0, don't go
.passable
- ld [hld], a ; update c2x3
- ld [hl], d ; update c2x2
+ ld [hld], a ; update x#SPRITESTATEDATA2_XDISPLACEMENT
+ ld [hl], d ; update x#SPRITESTATEDATA2_YDISPLACEMENT
and a ; clear carry (marking success)
ret
.impassable
- ld h, wSpriteStateData1 / $100
- ld a, [hCurrentSpriteOffset]
+ ld h, HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
inc a
ld l, a
- ld [hl], $2 ; c1x1 = 2 (set movement status to delayed)
+ ld [hl], $2 ; [x#SPRITESTATEDATA1_MOVEMENTSTATUS] = 2 (delayed)
inc l
inc l
xor a
- ld [hli], a ; c1x3 = 0 (clear Y movement delta)
+ ld [hli], a ; [x#SPRITESTATEDATA1_YSTEPVECTOR] = 0
inc l
- ld [hl], a ; c1x5 = 0 (clear X movement delta)
+ ld [hl], a ; [x#SPRITESTATEDATA1_XSTEPVECTOR] = 0
inc h
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $8
ld l, a
call Random
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
and $7f
- ld [hl], a ; c2x8: set next movement delay to a random value in [0,$7f] (again with delay $100 if value is 0)
+ ld [hl], a ; x#SPRITESTATEDATA2_MOVEMENTDELAY: set to a random value in [0,$7f] (again with delay $100 if value is 0)
scf ; set carry (marking failure to walk)
ret
@@ -691,11 +698,11 @@
; this is always the lower left tile of the 2x2 tile blocks all sprites are snapped to
; hl: output pointer
GetTileSpriteStandsOn:
- ld h, wSpriteStateData1 / $100
- ld a, [hCurrentSpriteOffset]
- add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1
+ ld h, HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA1_YPIXELS
ld l, a
- ld a, [hli] ; c1x4: screen Y position
+ ld a, [hli] ; x#SPRITESTATEDATA1_YPIXELS
add $4 ; align to 2*2 tile blocks (Y position is always off 4 pixels to the top)
and $f0 ; in case object is currently moving
srl a ; screen Y tile * 4
@@ -702,7 +709,7 @@
ld c, a
ld b, $0
inc l
- ld a, [hl] ; c1x6: screen X position
+ ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS
srl a
srl a
srl a ; screen X tile
@@ -709,7 +716,7 @@
add SCREEN_WIDTH ; screen X tile + 20
ld d, $0
ld e, a
- coord hl, 0, 0
+ hlcoord 0, 0
add hl, bc
add hl, bc
add hl, bc
@@ -784,7 +791,7 @@
ld a, [hl]
add b
ld [hl], a
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $9
ld l, a
ld a, c
@@ -807,17 +814,17 @@
jp AnimScriptedNPCMovement
GetSpriteScreenYPointer:
- ld a, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1
+ ld a, SPRITESTATEDATA1_YPIXELS
ld b, a
jr GetSpriteScreenXYPointerCommon
GetSpriteScreenXPointer:
- ld a, wSpritePlayerStateData1XPixels - wSpritePlayerStateData1
+ ld a, SPRITESTATEDATA1_XPIXELS
ld b, a
GetSpriteScreenXYPointerCommon:
ld hl, wSpriteStateData1
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add l
add b
ld l, a
@@ -825,8 +832,8 @@
AnimScriptedNPCMovement:
ld hl, wSpriteStateData2
- ld a, [hCurrentSpriteOffset]
- add wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA2_IMAGEBASEOFFSET
ld l, a
ld a, [hl] ; VRAM slot
dec a
@@ -833,8 +840,8 @@
swap a
ld b, a
ld hl, wSpriteStateData1
- ld a, [hCurrentSpriteOffset]
- add wSpritePlayerStateData1FacingDirection - wSpritePlayerStateData1
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA1_FACINGDIRECTION
ld l, a
ld a, [hl] ; facing direction
cp SPRITE_FACING_DOWN
@@ -849,21 +856,21 @@
.anim
add b
ld b, a
- ld [hSpriteVRAMSlotAndFacing], a
+ ldh [hSpriteVRAMSlotAndFacing], a
call AdvanceScriptedNPCAnimFrameCounter
ld hl, wSpriteStateData1
- ld a, [hCurrentSpriteOffset]
- add wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA1_IMAGEINDEX
ld l, a
- ld a, [hSpriteVRAMSlotAndFacing]
+ ldh a, [hSpriteVRAMSlotAndFacing]
ld b, a
- ld a, [hSpriteAnimFrameCounter]
+ ldh a, [hSpriteAnimFrameCounter]
add b
ld [hl], a
ret
AdvanceScriptedNPCAnimFrameCounter:
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add $7
ld l, a
ld a, [hl] ; intra-animation frame counter
@@ -878,5 +885,5 @@
inc a
and $3
ld [hl], a
- ld [hSpriteAnimFrameCounter], a
+ ldh [hSpriteAnimFrameCounter], a
ret
--- a/engine/overworld/pathfinding.asm
+++ b/engine/overworld/pathfinding.asm
@@ -8,29 +8,29 @@
ld hl, wNPCMovementDirections2
ld de, $0
.loop
- ld a, [hFindPathYProgress]
+ ldh a, [hFindPathYProgress]
ld b, a
- ld a, [hNPCPlayerYDistance] ; Y distance in steps
+ ldh a, [hNPCPlayerYDistance] ; Y distance in steps
call CalcDifference
ld d, a
and a
jr nz, .asm_f8da
- ld a, [hFindPathFlags]
+ ldh a, [hFindPathFlags]
set 0, a ; current end of path matches the player's Y coordinate
- ld [hFindPathFlags], a
+ ldh [hFindPathFlags], a
.asm_f8da
- ld a, [hFindPathXProgress]
+ ldh a, [hFindPathXProgress]
ld b, a
- ld a, [hNPCPlayerXDistance] ; X distance in steps
+ ldh a, [hNPCPlayerXDistance] ; X distance in steps
call CalcDifference
ld e, a
and a
jr nz, .asm_f8ec
- ld a, [hFindPathFlags]
+ ldh a, [hFindPathFlags]
set 1, a ; current end of path matches the player's X coordinate
- ld [hFindPathFlags], a
+ ldh [hFindPathFlags], a
.asm_f8ec
- ld a, [hFindPathFlags]
+ ldh a, [hFindPathFlags]
cp $3 ; has the end of the path reached the player's position?
jr z, .done
; Compare whether the X distance between the player and the current of the path
@@ -39,7 +39,7 @@
cp d
jr c, .yDistanceGreater
; x distance is greater
- ld a, [hNPCPlayerRelativePosFlags]
+ ldh a, [hNPCPlayerRelativePosFlags]
bit 1, a
jr nz, .playerIsLeftOfNPC
ld d, NPC_MOVEMENT_RIGHT
@@ -47,12 +47,12 @@
.playerIsLeftOfNPC
ld d, NPC_MOVEMENT_LEFT
.next1
- ld a, [hFindPathXProgress]
+ ldh a, [hFindPathXProgress]
add 1
- ld [hFindPathXProgress], a
+ ldh [hFindPathXProgress], a
jr .storeDirection
.yDistanceGreater
- ld a, [hNPCPlayerRelativePosFlags]
+ ldh a, [hNPCPlayerRelativePosFlags]
bit 0, a
jr nz, .playerIsAboveNPC
ld d, NPC_MOVEMENT_DOWN
@@ -60,15 +60,15 @@
.playerIsAboveNPC
ld d, NPC_MOVEMENT_UP
.next2
- ld a, [hFindPathYProgress]
+ ldh a, [hFindPathYProgress]
add 1
- ld [hFindPathYProgress], a
+ ldh [hFindPathYProgress], a
.storeDirection
ld a, d
ld [hli], a
- ld a, [hFindPathNumSteps]
+ ldh a, [hFindPathNumSteps]
inc a
- ld [hFindPathNumSteps], a
+ ldh [hFindPathNumSteps], a
jp .loop
.done
ld [hl], $ff
@@ -76,15 +76,15 @@
CalcPositionOfPlayerRelativeToNPC:
xor a
- ld [hNPCPlayerRelativePosFlags], a
+ ldh [hNPCPlayerRelativePosFlags], a
ld a, [wSpritePlayerStateData1YPixels]
ld d, a
ld a, [wSpritePlayerStateData1XPixels]
ld e, a
ld hl, wSpriteStateData1
- ld a, [hNPCSpriteOffset]
+ ldh a, [hNPCSpriteOffset]
add l
- add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1
+ add SPRITESTATEDATA1_YPIXELS
ld l, a
jr nc, .noCarry
inc h
@@ -115,7 +115,7 @@
ld [hli], a
call DivideBytes ; divide Y absolute distance by 16
ld a, [hl] ; quotient
- ld [hNPCPlayerYDistance], a
+ ldh [hNPCPlayerYDistance], a
pop hl
inc hl
ld b, e
@@ -136,23 +136,23 @@
res 1, [hl]
pop hl
.divideXDistance
- ld [hDividend2], a
+ ldh [hDividend2], a
ld a, 16
- ld [hDivisor2], a
+ ldh [hDivisor2], a
call DivideBytes ; divide X absolute distance by 16
- ld a, [hQuotient2]
- ld [hNPCPlayerXDistance], a
- ld a, [hNPCPlayerRelativePosPerspective]
+ ldh a, [hQuotient2]
+ ldh [hNPCPlayerXDistance], a
+ ldh a, [hNPCPlayerRelativePosPerspective]
and a
ret z
- ld a, [hNPCPlayerRelativePosFlags]
+ ldh a, [hNPCPlayerRelativePosFlags]
cpl
and $3
- ld [hNPCPlayerRelativePosFlags], a
+ ldh [hNPCPlayerRelativePosFlags], a
ret
ConvertNPCMovementDirectionsToJoypadMasks:
- ld a, [hNPCMovementDirections2Index]
+ ldh a, [hNPCMovementDirections2Index]
ld [wNPCMovementDirections2Index], a
dec a
ld de, wSimulatedJoypadStatesEnd
@@ -166,9 +166,9 @@
call ConvertNPCMovementDirectionToJoypadMask
ld [de], a
inc de
- ld a, [hNPCMovementDirections2Index]
+ ldh a, [hNPCMovementDirections2Index]
dec a
- ld [hNPCMovementDirections2Index], a
+ ldh [hNPCMovementDirections2Index], a
jr nz, .loop
ret
--- a/engine/overworld/player_animations.asm
+++ b/engine/overworld/player_animations.asm
@@ -250,11 +250,11 @@
LoadBirdSpriteGraphics:
ld de, BirdSprite
ld hl, vNPCSprites
- lb bc, BANK(BirdSprite), $0c
+ lb bc, BANK(BirdSprite), 12
call CopyVideoData
- ld de, BirdSprite + $c0 ; moving animation sprite
+ ld de, BirdSprite tile 12 ; moving animation sprite
ld hl, vNPCSprites2
- lb bc, BANK(BirdSprite), $0c
+ lb bc, BANK(BirdSprite), 12
jp CopyVideoData
InitFacingDirectionList:
@@ -358,7 +358,7 @@
jr z, .done
cp c
jr nz, .nextEntry
- aCoord 8, 9
+ lda_coord 8, 9
cp [hl]
jr z, .foundMatch
.nextEntry
@@ -381,8 +381,8 @@
ld hl, wd736
set 6, [hl] ; reserve the last 4 OAM entries
ld de, RedSprite
- ld hl, vNPCSprites
- lb bc, BANK(RedSprite), $c
+ ld hl, vNPCSprites tile $00
+ lb bc, BANK(RedSprite), 12
call CopyVideoData
ld a, $4
ld hl, RedFishingTiles
@@ -479,23 +479,19 @@
db $50, $40, $FE, $00 ; player facing left
db $50, $58, $FE, $20 ; player facing right ($20 means "horizontally flip the tile")
+fishing_gfx: MACRO
+ dw \1
+ db \2
+ db BANK(\1)
+ dw vNPCSprites tile \3
+ENDM
+
RedFishingTiles:
- dw RedFishingTilesFront
- db 2, BANK(RedFishingTilesFront)
- dw vNPCSprites + $20
+ fishing_gfx RedFishingTilesFront, 2, $02
+ fishing_gfx RedFishingTilesBack, 2, $06
+ fishing_gfx RedFishingTilesSide, 2, $0a
+ fishing_gfx RedFishingRodTiles, 3, $fd
- dw RedFishingTilesBack
- db 2, BANK(RedFishingTilesBack)
- dw vNPCSprites + $60
-
- dw RedFishingTilesSide
- db 2, BANK(RedFishingTilesSide)
- dw vNPCSprites + $a0
-
- dw RedFishingRodTiles
- db 3, BANK(RedFishingRodTiles)
- dw vNPCSprites2 + $7d0
-
_HandleMidJump::
ld a, [wPlayerJumpingYScreenCoordsIndex]
ld c, a
@@ -516,9 +512,9 @@
call UpdateSprites
call Delay3
xor a
- ld [hJoyHeld], a
- ld [hJoyPressed], a
- ld [hJoyReleased], a
+ ldh [hJoyHeld], a
+ ldh [hJoyPressed], a
+ ldh [hJoyReleased], a
ld [wPlayerJumpingYScreenCoordsIndex], a
ld hl, wd736
res 6, [hl] ; not jumping down a ledge any more
--- a/engine/overworld/player_state.asm
+++ b/engine/overworld/player_state.asm
@@ -17,7 +17,7 @@
ld a, [hli] ; target warp
ld [wDestinationWarpID], a
ld a, [hl] ; target map
- ld [hWarpDestinationMap], a
+ ldh [hWarpDestinationMap], a
ld hl, wd736
set 2, [hl] ; standing on warp flag
ret
@@ -192,7 +192,7 @@
push hl
push de
push bc
- callba IsPlayerStandingOnDoorTile
+ farcall IsPlayerStandingOnDoorTile
jr c, .done
ld a, [wCurMapTileset]
add a
@@ -204,7 +204,7 @@
ld h, [hl]
ld l, a
ld de, $1
- aCoord 8, 9
+ lda_coord 8, 9
call IsInArray
jr nc, .done
ld hl, wd736
@@ -223,28 +223,28 @@
ret c
cp CERULEAN_CAVE_2F
ret nc
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 3
ld c, 7
call TextBoxBorder
- coord hl, 1, 1
+ hlcoord 1, 1
ld de, wSafariSteps
lb bc, 2, 3
call PrintNumber
- coord hl, 4, 1
+ hlcoord 4, 1
ld de, SafariSteps
call PlaceString
- coord hl, 1, 3
+ hlcoord 1, 3
ld de, SafariBallText
call PlaceString
ld a, [wNumSafariBalls]
cp 10
jr nc, .asm_c56d
- coord hl, 5, 3
+ hlcoord 5, 3
ld a, " "
ld [hl], a
.asm_c56d
- coord hl, 6, 3
+ hlcoord 6, 3
ld de, wNumSafariBalls
lb bc, 1, 2
jp PrintNumber
@@ -267,7 +267,7 @@
and a ; cp SPRITE_FACING_DOWN
jr nz, .notFacingDown
; facing down
- aCoord 8, 11
+ lda_coord 8, 11
inc d
jr .storeTile
.notFacingDown
@@ -274,7 +274,7 @@
cp SPRITE_FACING_UP
jr nz, .notFacingUp
; facing up
- aCoord 8, 7
+ lda_coord 8, 7
dec d
jr .storeTile
.notFacingUp
@@ -281,7 +281,7 @@
cp SPRITE_FACING_LEFT
jr nz, .notFacingLeft
; facing left
- aCoord 6, 9
+ lda_coord 6, 9
dec e
jr .storeTile
.notFacingLeft
@@ -288,7 +288,7 @@
cp SPRITE_FACING_RIGHT
jr nz, .storeTile
; facing right
- aCoord 10, 9
+ lda_coord 10, 9
inc e
.storeTile
ld c, a
@@ -297,7 +297,7 @@
GetTileTwoStepsInFrontOfPlayer:
xor a
- ld [hPlayerFacing], a
+ ldh [hPlayerFacing], a
ld hl, wYCoord
ld a, [hli]
ld d, a
@@ -308,7 +308,7 @@
; facing down
ld hl, hPlayerFacing
set 0, [hl]
- aCoord 8, 13
+ lda_coord 8, 13
inc d
jr .storeTile
.notFacingDown
@@ -317,7 +317,7 @@
; facing up
ld hl, hPlayerFacing
set 1, [hl]
- aCoord 8, 5
+ lda_coord 8, 5
dec d
jr .storeTile
.notFacingUp
@@ -326,7 +326,7 @@
; facing left
ld hl, hPlayerFacing
set 2, [hl]
- aCoord 4, 9
+ lda_coord 4, 9
dec e
jr .storeTile
.notFacingLeft
@@ -335,7 +335,7 @@
; facing right
ld hl, hPlayerFacing
set 3, [hl]
- aCoord 12, 9
+ lda_coord 12, 9
inc e
.storeTile
ld c, a
@@ -378,33 +378,33 @@
ld hl, wSprite01StateData2MapY
add hl, de
ld a, [hli] ; map Y position
- ld [hPlayerYCoord], a
+ ldh [hPlayerYCoord], a
ld a, [hl] ; map X position
- ld [hPlayerXCoord], a
+ ldh [hPlayerXCoord], a
ld a, [wNumSprites]
ld c, a
ld de, $f
ld hl, wSprite01StateData2MapY
- ld a, [hPlayerFacing]
+ ldh a, [hPlayerFacing]
and $3 ; facing up or down?
jr z, .pushingHorizontallyLoop
.pushingVerticallyLoop
inc hl
- ld a, [hPlayerXCoord]
+ ldh a, [hPlayerXCoord]
cp [hl]
jr nz, .nextSprite1 ; if X coordinates don't match
dec hl
ld a, [hli]
ld b, a
- ld a, [hPlayerFacing]
+ ldh a, [hPlayerFacing]
rrca
jr c, .pushingDown
; pushing up
- ld a, [hPlayerYCoord]
+ ldh a, [hPlayerYCoord]
dec a
jr .compareYCoords
.pushingDown
- ld a, [hPlayerYCoord]
+ ldh a, [hPlayerYCoord]
inc a
.compareYCoords
cp b
@@ -417,19 +417,19 @@
.pushingHorizontallyLoop
ld a, [hli]
ld b, a
- ld a, [hPlayerYCoord]
+ ldh a, [hPlayerYCoord]
cp b
jr nz, .nextSprite2
ld b, [hl]
- ld a, [hPlayerFacing]
+ ldh a, [hPlayerFacing]
bit 2, a
jr nz, .pushingLeft
; pushing right
- ld a, [hPlayerXCoord]
+ ldh a, [hPlayerXCoord]
inc a
jr .compareXCoords
.pushingLeft
- ld a, [hPlayerXCoord]
+ ldh a, [hPlayerXCoord]
dec a
.compareXCoords
cp b
--- a/engine/overworld/push_boulder.asm
+++ b/engine/overworld/push_boulder.asm
@@ -6,15 +6,15 @@
bit 1, a ; has boulder dust animation from previous push played yet?
ret nz
xor a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call IsSpriteInFrontOfPlayer
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
ld [wBoulderSpriteIndex], a
and a
jp z, ResetBoulderPushFlags
ld hl, wSpritePlayerStateData1MovementStatus
ld d, $0
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
swap a
ld e, a
add hl, de
@@ -27,7 +27,7 @@
bit 6, [hl]
set 6, [hl] ; indicate that the player has tried pushing
ret z ; the player must try pushing twice before the boulder will move
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
and D_RIGHT | D_LEFT | D_UP | D_DOWN
ret z
predef CheckForCollisionWhenPushingBoulder
@@ -34,7 +34,7 @@
ld a, [wTileInFrontOfBoulderAndBoulderCollisionResult]
and a ; was there a collision?
jp nz, ResetBoulderPushFlags
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
ld b, a
ld a, [wSpritePlayerStateData1FacingDirection]
cp SPRITE_FACING_UP
@@ -86,13 +86,13 @@
ld a, [wd730]
bit 0, a
ret nz
- callab AnimateBoulderDust
+ callfar AnimateBoulderDust
call DiscardButtonPresses
ld [wJoyIgnore], a
call ResetBoulderPushFlags
set 7, [hl]
ld a, [wBoulderSpriteIndex]
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call GetSpriteMovementByte2Pointer
ld [hl], $10
ld a, SFX_CUT
--- a/engine/overworld/special_warps.asm
+++ b/engine/overworld/special_warps.asm
@@ -34,7 +34,7 @@
cp TRADE_CENTER
jr nz, .notTradeCenter
ld hl, TradeCenterSpec1
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK ; which gameboy is clocking determines who is on the left and who is on the right
jr z, .copyWarpData
ld hl, TradeCenterSpec2
@@ -43,7 +43,7 @@
cp COLOSSEUM
jr nz, .notColosseum
ld hl, ColosseumSpec1
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr z, .copyWarpData
ld hl, ColosseumSpec2
--- a/engine/overworld/sprite_collisions.asm
+++ b/engine/overworld/sprite_collisions.asm
@@ -1,15 +1,15 @@
_UpdateSprites::
ld h, $c1
inc h
- ld a, wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2
+ ld a, SPRITESTATEDATA2_IMAGEBASEOFFSET
.spriteLoop
ld l, a
- sub wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2
+ sub SPRITESTATEDATA2_IMAGEBASEOFFSET
ld c, a
- ld [hCurrentSpriteOffset], a
+ ldh [hCurrentSpriteOffset], a
ld a, [hl]
and a
- jr z, .skipSprite ; tests $c2Xe
+ jr z, .skipSprite ; tests SPRITESTATEDATA2_IMAGEBASEOFFSET
push hl
push de
push bc
@@ -20,7 +20,7 @@
.skipSprite
ld a, l
add $10 ; move to next sprite
- cp wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2 ; test for overflow (back at beginning)
+ cp SPRITESTATEDATA2_IMAGEBASEOFFSET ; test for overflow (back at beginning)
jr nz, .spriteLoop
ret
.updateCurrentSprite
@@ -31,10 +31,10 @@
UpdateNonPlayerSprite:
dec a
swap a
- ld [hTilePlayerStandingOn], a ; $10 * sprite#
+ ldh [hTilePlayerStandingOn], a ; $10 * sprite#
ld a, [wNPCMovementScriptSpriteOffset] ; some sprite offset?
ld b, a
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
cp b
jr nz, .unequal
jp DoScriptedNPCMovement
@@ -43,22 +43,23 @@
; This detects if the current sprite (whose offset is at hCurrentSpriteOffset)
; is going to collide with another sprite by looping over the other sprites.
-; The current sprite's offset will be labelled with i (e.g. $c1i0).
-; The loop sprite's offset will labelled with j (e.g. $c1j0).
+; The current sprite's offset will be labelled with i (e.g. i#SPRITESTATEDATA1_PICTUREID).
+; The loop sprite's offset will labelled with j (e.g. j#SPRITESTATEDATA1_PICTUREID).
;
-; Note that the Y coordinate of the sprite (in [$c1k4]) is one of the following
-; 9 values when the sprite is aligned with the grid: $fc, $0c, $1c, $2c, ..., $7c.
+; Note that the Y coordinate of the sprite (in [k#SPRITESTATEDATA1_YPIXELS])
+; is one of the following 9 values when the sprite is aligned with the grid:
+; $fc, $0c, $1c, $2c, ..., $7c.
; The reason that 4 is added below to the coordinate is to make it align with a
; multiple of $10 to make comparisons easier.
DetectCollisionBetweenSprites:
nop
- ld h, wSpriteStateData1 / $100
- ld a, [hCurrentSpriteOffset]
- add wSpriteStateData1 % $100
+ ld h, HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
+ add LOW(wSpriteStateData1)
ld l, a
- ld a, [hl] ; a = [$c1i0] (picture) (0 if slot is unused)
+ ld a, [hl] ; a = [i#SPRITESTATEDATA1_PICTUREID] (0 if slot is unused)
and a ; is this sprite slot slot used?
ret z ; return if not used
@@ -66,10 +67,10 @@
add 3
ld l, a
- ld a, [hli] ; a = [$c1i3] (delta Y) (-1, 0, or 1)
+ ld a, [hli] ; a = [i#SPRITESTATEDATA1_YSTEPVECTOR] (-1, 0, or 1)
call SetSpriteCollisionValues
- ld a, [hli] ; a = [$C1i4] (Y screen coordinate)
+ ld a, [hli] ; a = [i#SPRITESTATEDATA1_YPIXELS]
add 4 ; align with multiple of $10
; The effect of the following 3 lines is to
@@ -79,11 +80,11 @@
and $f0
or c
- ld [hFF90], a ; store Y coordinate adjusted for direction of movement
+ ldh [hFF90], a ; store Y coordinate adjusted for direction of movement
- ld a, [hli] ; a = [$c1i5] (delta X) (-1, 0, or 1)
+ ld a, [hli] ; a = [i#SPRITESTATEDATA1_XSTEPVECTOR] (-1, 0, or 1)
call SetSpriteCollisionValues
- ld a, [hl] ; a = [$C1i6] (X screen coordinate)
+ ld a, [hl] ; a = [i#SPRITESTATEDATA1_XPIXELS]
; The effect of the following 3 lines is to
; add 7 to a if moving east or
@@ -92,7 +93,7 @@
and $f0
or c
- ld [hFF91], a ; store X coordinate adjusted for direction of movement
+ ldh [hFF91], a ; store X coordinate adjusted for direction of movement
ld a, l
add 7
@@ -99,45 +100,45 @@
ld l, a
xor a
- ld [hld], a ; zero [$c1id] XXX what's [$c1id] for?
- ld [hld], a ; zero [$c1ic] (directions in which collisions occurred)
+ ld [hld], a ; zero [i#SPRITESTATEDATA1_0D] XXX what's this for?
+ ld [hld], a ; zero [i#SPRITESTATEDATA1_COLLISIONDATA]
- ld a, [hFF91]
- ld [hld], a ; [$c1ib] = adjusted X coordinate
- ld a, [hFF90]
- ld [hl], a ; [$c1ia] = adjusted Y coordinate
+ ldh a, [hFF91]
+ ld [hld], a ; [i#SPRITESTATEDATA1_XADJUSTED]
+ ldh a, [hFF90]
+ ld [hl], a ; [i#SPRITESTATEDATA1_YADJUSTED]
xor a ; zero the loop counter
.loop
- ld [hFF8F], a ; store loop counter
+ ldh [hFF8F], a ; store loop counter
swap a
ld e, a
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
cp e ; does the loop sprite match the current sprite?
jp z, .next ; go to the next sprite if they match
ld d, h
- ld a, [de] ; a = [$c1j0] (picture) (0 if slot is unused)
+ ld a, [de] ; a = [j#SPRITESTATEDATA1_PICTUREID] (0 if slot is unused)
and a ; is this sprite slot slot used?
jp z, .next ; go the next sprite if not used
inc e
inc e
- ld a, [de] ; a = [$c1j2] ($ff means the sprite is offscreen)
+ ld a, [de] ; a = [j#SPRITESTATEDATA1_IMAGEINDEX] ($ff means the sprite is offscreen)
inc a
jp z, .next ; go the next sprite if offscreen
- ld a, [hCurrentSpriteOffset]
+ ldh a, [hCurrentSpriteOffset]
add 10
ld l, a
inc e
- ld a, [de] ; a = [$c1j3] (delta Y)
+ ld a, [de] ; a = [j#SPRITESTATEDATA1_YSTEPVECTOR]
call SetSpriteCollisionValues
inc e
- ld a, [de] ; a = [$C1j4] (Y screen coordinate)
+ ld a, [de] ; a = [j#SPRITESTATEDATA1_YPIXELS]
add 4 ; align with multiple of $10
; The effect of the following 3 lines is to
@@ -147,7 +148,7 @@
and $f0
or c
- sub [hl] ; subtract the adjusted Y coordinate of sprite i ([$c1ia]) from that of sprite j
+ sub [hl] ; subtract [i#SPRITESTATEDATA1_YADJUSTED] from [j#SPRITESTATEDATA1_YADJUSTED]
; calculate the absolute value of the difference to get the distance
jr nc, .noCarry1
@@ -154,11 +155,11 @@
cpl
inc a
.noCarry1
- ld [hFF90], a ; store the distance between the two sprites' adjusted Y values
+ ldh [hFF90], a ; store the distance between the two sprites' adjusted Y values
; Use the carry flag set by the above subtraction to determine which sprite's
-; Y coordinate is larger. This information is used later to set [$c1ic],
-; which stores which direction the collision occurred in.
+; Y coordinate is larger. This information is used later to set
+; [i#SPRITESTATEDATA1_COLLISIONDATA].
; The following 5 lines set the lowest 2 bits of c, which are later shifted left by 2.
; If sprite i's Y is larger, set lowest 2 bits of c to 10.
; If sprite j's Y is larger or both are equal, set lowest 2 bits of c to 01.
@@ -170,23 +171,23 @@
; If sprite i's delta Y is 0, then b = 7, else b = 9.
ld b, 7
- ld a, [hl] ; a = [$c1ia] (adjusted Y coordinate)
+ ld a, [hl] ; a = [i#SPRITESTATEDATA1_YADJUSTED]
and $f
jr z, .next1
ld b, 9
.next1
- ld a, [hFF90] ; a = distance between adjusted Y coordinates
+ ldh a, [hFF90] ; a = distance between adjusted Y coordinates
sub b
- ld [hFF92], a ; store distance adjusted using sprite i's direction
+ ldh [hFF92], a ; store distance adjusted using sprite i's direction
ld a, b
- ld [hFF90], a ; store 7 or 9 depending on sprite i's delta Y
+ ldh [hFF90], a ; store 7 or 9 depending on sprite i's delta Y
jr c, .checkXDistance
; If sprite j's delta Y is 0, then b = 7, else b = 9.
ld b, 7
dec e
- ld a, [de] ; a = [$c1j3] (delta Y)
+ ld a, [de] ; a = [j#SPRITESTATEDATA1_YSTEPVECTOR]
inc e
and a
jr z, .next2
@@ -193,7 +194,7 @@
ld b, 9
.next2
- ld a, [hFF92] ; a = distance adjusted using sprite i's direction
+ ldh a, [hFF92] ; a = distance adjusted using sprite i's direction
sub b ; adjust distance using sprite j's direction
jr z, .checkXDistance
jr nc, .next ; go to next sprite if distance is still positive after both adjustments
@@ -201,13 +202,13 @@
.checkXDistance
inc e
inc l
- ld a, [de] ; a = [$c1j5] (delta X)
+ ld a, [de] ; a = [j#SPRITESTATEDATA1_XSTEPVECTOR]
push bc
call SetSpriteCollisionValues
inc e
- ld a, [de] ; a = [$c1j6] (X screen coordinate)
+ ld a, [de] ; a = [j#SPRITESTATEDATA1_XPIXELS]
; The effect of the following 3 lines is to
; add 7 to a if moving east or
@@ -218,7 +219,7 @@
pop bc
- sub [hl] ; subtract the adjusted X coordinate of sprite i ([$c1ib]) from that of sprite j
+ sub [hl] ; subtract [i#SPRITESTATEDATA1_XADJUSTED] from [j#SPRITESTATEDATA1_XADJUSTED]
; calculate the absolute value of the difference to get the distance
jr nc, .noCarry2
@@ -225,11 +226,11 @@
cpl
inc a
.noCarry2
- ld [hFF91], a ; store the distance between the two sprites' adjusted X values
+ ldh [hFF91], a ; store the distance between the two sprites' adjusted X values
; Use the carry flag set by the above subtraction to determine which sprite's
-; X coordinate is larger. This information is used later to set [$c1ic],
-; which stores which direction the collision occurred in.
+; X coordinate is larger. This information is used later to set
+; [i#SPRITESTATEDATA1_COLLISIONDATA].
; The following 5 lines set the lowest 2 bits of c.
; If sprite i's X is larger, set lowest 2 bits of c to 10.
; If sprite j's X is larger or both are equal, set lowest 2 bits of c to 01.
@@ -241,23 +242,23 @@
; If sprite i's delta X is 0, then b = 7, else b = 9.
ld b, 7
- ld a, [hl] ; a = [$c1ib] (adjusted X coordinate)
+ ld a, [hl] ; a = [i#SPRITESTATEDATA1_XADJUSTED]
and $f
jr z, .next3
ld b, 9
.next3
- ld a, [hFF91] ; a = distance between adjusted X coordinates
+ ldh a, [hFF91] ; a = distance between adjusted X coordinates
sub b
- ld [hFF92], a ; store distance adjusted using sprite i's direction
+ ldh [hFF92], a ; store distance adjusted using sprite i's direction
ld a, b
- ld [hFF91], a ; store 7 or 9 depending on sprite i's delta X
+ ldh [hFF91], a ; store 7 or 9 depending on sprite i's delta X
jr c, .collision
; If sprite j's delta X is 0, then b = 7, else b = 9.
ld b, 7
dec e
- ld a, [de] ; a = [$c1j5] (delta X)
+ ld a, [de] ; a = [j#SPRITESTATEDATA1_XSTEPVECTOR]
inc e
and a
jr z, .next4
@@ -264,15 +265,15 @@
ld b, 9
.next4
- ld a, [hFF92] ; a = distance adjusted using sprite i's direction
+ ldh a, [hFF92] ; a = distance adjusted using sprite i's direction
sub b ; adjust distance using sprite j's direction
jr z, .collision
jr nc, .next ; go to next sprite if distance is still positive after both adjustments
.collision
- ld a, [hFF91] ; a = 7 or 9 depending on sprite i's delta X
+ ldh a, [hFF91] ; a = 7 or 9 depending on sprite i's delta X
ld b, a
- ld a, [hFF90] ; a = 7 or 9 depending on sprite i's delta Y
+ ldh a, [hFF90] ; a = 7 or 9 depending on sprite i's delta Y
inc l
; If delta X isn't 0 and delta Y is 0, then b = %0011, else b = %1100.
@@ -287,14 +288,15 @@
.next6
ld a, c ; c has 2 bits set (one of bits 0-1 is set for the X axis and one of bits 2-3 for the Y axis)
and b ; we select either the bit in bits 0-1 or bits 2-3 based on the calculation immediately above
- or [hl] ; or with existing collision direction bits in [$c1ic]
+ or [hl] ; or with existing collision direction bits in [i#SPRITESTATEDATA1_COLLISIONDATA]
ld [hl], a ; store new value
ld a, c ; useless code because a is overwritten before being used again
-; set bit in [$c1ie] or [$c1if] to indicate which sprite the collision occurred with
+; set bit in [i#SPRITESTATEDATA1_0E] or [i#SPRITESTATEDATA1_0F]
+; to indicate which sprite the collision occurred with
inc l
inc l
- ld a, [hFF8F] ; a = loop counter
+ ldh a, [hFF8F] ; a = loop counter
ld de, SpriteCollisionBitTable
add a
add e
@@ -311,7 +313,7 @@
ld [hl], a
.next
- ld a, [hFF8F] ; a = loop counter
+ ldh a, [hFF8F] ; a = loop counter
inc a
cp $10
jp nz, .loop
--- a/engine/overworld/tilesets.asm
+++ b/engine/overworld/tilesets.asm
@@ -23,9 +23,9 @@
dec c
jr nz, .copyTilesetHeaderLoop
ld a, [hl]
- ld [hTilesetType], a
+ ldh [hTilesetType], a
xor a
- ld [hMovingBGTilesCounter1], a
+ ldh [hMovingBGTilesCounter1], a
pop hl
ld a, [wCurMapTileset]
push hl
@@ -38,7 +38,7 @@
jr c, .asm_c797
ld a, [wCurMapTileset]
ld b, a
- ld a, [hPreviousTileset]
+ ldh a, [hPreviousTileset]
cp b
jr z, .done
.asm_c797
--- a/engine/overworld/trainer_sight.asm
+++ b/engine/overworld/trainer_sight.asm
@@ -1,77 +1,77 @@
_GetSpritePosition1::
ld hl, wSpriteStateData1
- ld de, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1
+ ld de, SPRITESTATEDATA1_YPIXELS
ld a, [wSpriteIndex]
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call GetSpriteDataPointer
- ld a, [hli] ; c1x4 (screen Y pos)
- ld [hSpriteScreenYCoord], a
+ ld a, [hli] ; x#SPRITESTATEDATA1_YPIXELS
+ ldh [hSpriteScreenYCoord], a
inc hl
- ld a, [hl] ; c1x6 (screen X pos)
- ld [hSpriteScreenXCoord], a
+ ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS
+ ldh [hSpriteScreenXCoord], a
ld de, wSpritePlayerStateData2MapY - wSpritePlayerStateData1XPixels
add hl, de
- ld a, [hli] ; c2x4 (map Y pos)
- ld [hSpriteMapYCoord], a
- ld a, [hl] ; c2x5 (map X pos)
- ld [hSpriteMapXCoord], a
+ ld a, [hli] ; x#SPRITESTATEDATA2_MAPY
+ ldh [hSpriteMapYCoord], a
+ ld a, [hl] ; x#SPRITESTATEDATA2_MAPX
+ ldh [hSpriteMapXCoord], a
ret
_GetSpritePosition2::
ld hl, wSpriteStateData1
- ld de, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1
+ ld de, SPRITESTATEDATA1_YPIXELS
ld a, [wSpriteIndex]
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call GetSpriteDataPointer
- ld a, [hli] ; c1x4 (screen Y pos)
+ ld a, [hli] ; x#SPRITESTATEDATA1_YPIXELS
ld [wSavedSpriteScreenY], a
inc hl
- ld a, [hl] ; c1x6 (screen X pos)
+ ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS
ld [wSavedSpriteScreenX], a
ld de, wSpritePlayerStateData2MapY - wSpritePlayerStateData1XPixels
add hl, de
- ld a, [hli] ; c2x4 (map Y pos)
+ ld a, [hli] ; x#SPRITESTATEDATA2_MAPY
ld [wSavedSpriteMapY], a
- ld a, [hl] ; c2x5 (map X pos)
+ ld a, [hl] ; x#SPRITESTATEDATA2_MAPX
ld [wSavedSpriteMapX], a
ret
_SetSpritePosition1::
ld hl, wSpriteStateData1
- ld de, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1
+ ld de, SPRITESTATEDATA1_YPIXELS
ld a, [wSpriteIndex]
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call GetSpriteDataPointer
- ld a, [hSpriteScreenYCoord] ; c1x4 (screen Y pos)
+ ldh a, [hSpriteScreenYCoord] ; x#SPRITESTATEDATA1_YPIXELS
ld [hli], a
inc hl
- ld a, [hSpriteScreenXCoord] ; c1x6 (screen X pos)
+ ldh a, [hSpriteScreenXCoord] ; x#SPRITESTATEDATA1_XPIXELS
ld [hl], a
ld de, wSpritePlayerStateData2MapY - wSpritePlayerStateData1XPixels
add hl, de
- ld a, [hSpriteMapYCoord] ; c2x4 (map Y pos)
+ ldh a, [hSpriteMapYCoord] ; x#SPRITESTATEDATA2_MAPY
ld [hli], a
- ld a, [hSpriteMapXCoord] ; c2x5 (map X pos)
+ ldh a, [hSpriteMapXCoord] ; x#SPRITESTATEDATA2_MAPX
ld [hl], a
ret
_SetSpritePosition2::
ld hl, wSpriteStateData1
- ld de, wSpritePlayerStateData1YPixels - wSpritePlayerStateData1
+ ld de, SPRITESTATEDATA1_YPIXELS
ld a, [wSpriteIndex]
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call GetSpriteDataPointer
ld a, [wSavedSpriteScreenY]
- ld [hli], a ; c1x4 (screen Y pos)
+ ld [hli], a ; x#SPRITESTATEDATA1_YPIXELS
inc hl
ld a, [wSavedSpriteScreenX]
- ld [hl], a ; c1x6 (screen X pos)
+ ld [hl], a ; x#SPRITESTATEDATA1_XPIXELS
ld de, wSpritePlayerStateData2MapY - wSpritePlayerStateData1XPixels
add hl, de
ld a, [wSavedSpriteMapY]
- ld [hli], a ; c2x4 (map Y pos)
+ ld [hli], a ; x#SPRITESTATEDATA2_MAPY
ld a, [wSavedSpriteMapX]
- ld [hl], a ; c2x5 (map X pos)
+ ld [hl], a ; x#SPRITESTATEDATA2_MAPX
ret
TrainerWalkUpToPlayer::
@@ -144,7 +144,7 @@
call FillMemory ; write the necessary steps to reach player
ld [hl], $ff ; write end of list sentinel
ld a, [wSpriteIndex]
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
jp MoveSprite_
; input: de = offset within sprite entry
@@ -152,7 +152,7 @@
GetSpriteDataPointer:
push de
add hl, de
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
swap a
ld d, $0
ld e, a
@@ -165,23 +165,23 @@
push hl
push de
ld a, [wTrainerSpriteOffset]
- add wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1
+ add SPRITESTATEDATA1_IMAGEINDEX
ld d, $0
ld e, a
ld hl, wSpriteStateData1
add hl, de
- ld a, [hl] ; c1x2: sprite image index
+ ld a, [hl] ; x#SPRITESTATEDATA1_IMAGEINDEX
sub $ff
jr nz, .spriteOnScreen ; test if sprite is on screen
jp .noEngage
.spriteOnScreen
ld a, [wTrainerSpriteOffset]
- add wSpritePlayerStateData1FacingDirection - wSpritePlayerStateData1
+ add SPRITESTATEDATA1_FACINGDIRECTION
ld d, $0
ld e, a
ld hl, wSpriteStateData1
add hl, de
- ld a, [hl] ; c1x9: facing direction
+ ld a, [hl] ; x#SPRITESTATEDATA1_FACINGDIRECTION
ld [wTrainerFacingDirection], a
call ReadTrainerScreenPosition
ld a, [wTrainerScreenY] ; sprite screen Y pos
@@ -234,20 +234,20 @@
; reads trainer's Y position to wTrainerScreenY and X position to wTrainerScreenX
ReadTrainerScreenPosition:
ld a, [wTrainerSpriteOffset]
- add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1
+ add SPRITESTATEDATA1_YPIXELS
ld d, $0
ld e, a
ld hl, wSpriteStateData1
add hl, de
- ld a, [hl] ; c1x4 (sprite Y pos)
+ ld a, [hl] ; x#SPRITESTATEDATA1_YPIXELS
ld [wTrainerScreenY], a
ld a, [wTrainerSpriteOffset]
- add wSpritePlayerStateData1XPixels - wSpritePlayerStateData1
+ add SPRITESTATEDATA1_XPIXELS
ld d, $0
ld e, a
ld hl, wSpriteStateData1
add hl, de
- ld a, [hl] ; c1x6 (sprite X pos)
+ ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS
ld [wTrainerScreenX], a
ret
@@ -295,12 +295,12 @@
cp POWER_PLANT
jp z, .engage ; bypass this for power plant to get voltorb fake items to work
ld a, [wTrainerSpriteOffset]
- add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1
+ add SPRITESTATEDATA1_YPIXELS
ld d, $0
ld e, a
ld hl, wSpriteStateData1
add hl, de
- ld a, [hl] ; c1x4 (sprite screen Y pos)
+ ld a, [hl] ; x#SPRITESTATEDATA1_YPIXELS
cp $fc
jr nz, .notOnTopmostTile ; special case if sprite is on topmost tile (Y = $fc (-4)), make it come down a block
ld a, $c
@@ -307,12 +307,12 @@
.notOnTopmostTile
ld [wTrainerScreenY], a
ld a, [wTrainerSpriteOffset]
- add wSpritePlayerStateData1XPixels - wSpritePlayerStateData1
+ add SPRITESTATEDATA1_XPIXELS
ld d, $0
ld e, a
ld hl, wSpriteStateData1
add hl, de
- ld a, [hl] ; c1x6 (sprite screen X pos)
+ ld a, [hl] ; x#SPRITESTATEDATA1_XPIXELS
ld [wTrainerScreenX], a
ld a, [wTrainerFacingDirection] ; facing direction
cp SPRITE_FACING_DOWN
--- a/engine/overworld/turn_sprite.asm
+++ b/engine/overworld/turn_sprite.asm
@@ -1,25 +1,25 @@
UpdateSpriteFacingOffsetAndDelayMovement::
- ld h, $c2
- ld a, [hCurrentSpriteOffset]
+ ld h, HIGH(wSpriteStateData2)
+ ldh a, [hCurrentSpriteOffset]
add $8
ld l, a
ld a, $7f ; maximum movement delay
- ld [hl], a ; c2x8 (movement delay)
- dec h
- ld a, [hCurrentSpriteOffset]
+ ld [hl], a ; x#SPRITESTATEDATA2_MOVEMENTDELAY
+ dec h ; HIGH(wSpriteStateData1)
+ ldh a, [hCurrentSpriteOffset]
add $9
ld l, a
- ld a, [hld] ; c1x9 (facing direction)
+ ld a, [hld] ; x#SPRITESTATEDATA1_FACINGDIRECTION
ld b, a
xor a
ld [hld], a
- ld [hl], a ; c1x8 (walk animation frame)
- ld a, [hCurrentSpriteOffset]
- add $2
+ ld [hl], a ; x#SPRITESTATEDATA1_ANIMFRAMECOUNTER
+ ldh a, [hCurrentSpriteOffset]
+ add SPRITESTATEDATA1_IMAGEINDEX
ld l, a
- ld a, [hl] ; c1x2 (facing and animation table offset)
+ ld a, [hl] ; x#SPRITESTATEDATA1_IMAGEINDEX
or b ; or in the facing direction
ld [hld], a
ld a, $2 ; delayed movement status
- ld [hl], a ; c1x1 (movement status)
+ ld [hl], a ; x#SPRITESTATEDATA1_MOVEMENTSTATUS
ret
--- a/engine/overworld/update_map.asm
+++ b/engine/overworld/update_map.asm
@@ -50,13 +50,13 @@
ld a, [wIsInBattle]
inc a
ret z
- ld a, [hAutoBGTransferEnabled]
+ ldh a, [hAutoBGTransferEnabled]
push af
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
push af
xor a
- ld [hAutoBGTransferEnabled], a
- ld [hTilesetType], a ; no flower/water BG tile animations
+ ldh [hAutoBGTransferEnabled], a
+ ldh [hTilesetType], a ; no flower/water BG tile animations
call LoadCurrentMapView
call RunDefaultPaletteCommand
ld hl, wMapViewVRAMPointer
@@ -73,7 +73,7 @@
ld a, h
ld [wBuffer + 1], a ; this copy of the address is not used
ld a, 2
- ld [hRedrawMapViewRowOffset], a
+ ldh [hRedrawMapViewRowOffset], a
ld c, SCREEN_HEIGHT / 2 ; number of rows of 2x2 tiles (this covers the whole screen)
.redrawRowLoop
push bc
@@ -81,7 +81,7 @@
push hl
ld hl, wTileMap - 2 * SCREEN_WIDTH
ld de, SCREEN_WIDTH
- ld a, [hRedrawMapViewRowOffset]
+ ldh a, [hRedrawMapViewRowOffset]
.calcWRAMAddrLoop
add hl, de
dec a
@@ -89,7 +89,7 @@
call CopyToRedrawRowOrColumnSrcTiles
pop hl
ld de, BG_MAP_WIDTH
- ld a, [hRedrawMapViewRowOffset]
+ ldh a, [hRedrawMapViewRowOffset]
ld c, a
.calcVRAMAddrLoop
add hl, de
@@ -98,11 +98,11 @@
or $98
dec c
jr nz, .calcVRAMAddrLoop
- ld [hRedrawRowOrColumnDest + 1], a
+ ldh [hRedrawRowOrColumnDest + 1], a
ld a, l
- ld [hRedrawRowOrColumnDest], a
+ ldh [hRedrawRowOrColumnDest], a
ld a, REDRAW_ROW
- ld [hRedrawRowOrColumnMode], a
+ ldh [hRedrawRowOrColumnMode], a
call DelayFrame
ld hl, hRedrawMapViewRowOffset
inc [hl]
@@ -112,9 +112,9 @@
dec c
jr nz, .redrawRowLoop
pop af
- ld [hTilesetType], a
+ ldh [hTilesetType], a
pop af
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ret
CompareHLWithBC:
--- a/engine/play_time.asm
+++ b/engine/play_time.asm
@@ -56,6 +56,6 @@
ld [wd730], a
ret z
xor a
- ld [hJoyPressed], a
- ld [hJoyHeld], a
+ ldh [hJoyPressed], a
+ ldh [hJoyHeld], a
ret
--- a/engine/pokemon/add_mon.asm
+++ b/engine/pokemon/add_mon.asm
@@ -15,7 +15,7 @@
ret nc ; return if the party is already full
ld [de], a
ld a, [de]
- ld [hNewPartyLength], a
+ ldh [hNewPartyLength], a
add e
ld e, a
jr nc, .noCarry
@@ -32,7 +32,7 @@
jr z, .next2
ld hl, wEnemyMonOT
.next2
- ld a, [hNewPartyLength]
+ ldh a, [hNewPartyLength]
dec a
call SkipFixedLengthTextEntries
ld d, h
@@ -44,7 +44,7 @@
and a
jr nz, .skipNaming
ld hl, wPartyMonNicks
- ld a, [hNewPartyLength]
+ ldh a, [hNewPartyLength]
dec a
call SkipFixedLengthTextEntries
ld a, NAME_MON_SCREEN
@@ -57,7 +57,7 @@
jr z, .next3
ld hl, wEnemyMons
.next3
- ld a, [hNewPartyLength]
+ ldh a, [hNewPartyLength]
dec a
ld bc, wPartyMon2 - wPartyMon1
call AddNTimes
@@ -129,10 +129,10 @@
xor a
ld b, a
call CalcStat ; calc HP stat (set cur Hp to max HP)
- ld a, [hMultiplicand+1]
+ ldh a, [hMultiplicand+1]
ld [de], a
inc de
- ld a, [hMultiplicand+2]
+ ldh a, [hMultiplicand+2]
ld [de], a
inc de
xor a
@@ -201,16 +201,16 @@
push de
ld a, [wCurEnemyLVL]
ld d, a
- callab CalcExperience
+ callfar CalcExperience
pop de
inc de
- ld a, [hExperience] ; write experience
+ ldh a, [hExperience] ; write experience
ld [de], a
inc de
- ld a, [hExperience + 1]
+ ldh a, [hExperience + 1]
ld [de], a
inc de
- ld a, [hExperience + 2]
+ ldh a, [hExperience + 2]
ld [de], a
xor a
ld b, NUM_STATS * 2
@@ -498,7 +498,7 @@
add $2
ld [wMonDataLocation], a
call LoadMonData
- callba CalcLevelFromExperience
+ farcall CalcLevelFromExperience
ld a, d
ld [wCurEnemyLVL], a
pop hl
--- a/engine/pokemon/bills_pc.asm
+++ b/engine/pokemon/bills_pc.asm
@@ -1,6 +1,6 @@
DisplayPCMainMenu::
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call SaveScreenTilesToBuffer2
ld a, [wNumHoFTeams]
and a
@@ -10,17 +10,17 @@
ld a, [wNumHoFTeams]
and a
jr nz, .leaguePCAvailable
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 8
ld c, 14
jr .next
.noOaksPC
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 6
ld c, 14
jr .next
.leaguePCAvailable
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 10
ld c, 14
.next
@@ -30,15 +30,15 @@
ld [wMaxMenuItem], a
CheckEvent EVENT_MET_BILL
jr nz, .metBill
- coord hl, 2, 2
+ hlcoord 2, 2
ld de, SomeonesPCText
jr .next2
.metBill
- coord hl, 2, 2
+ hlcoord 2, 2
ld de, BillsPCText
.next2
call PlaceString
- coord hl, 2, 4
+ hlcoord 2, 4
ld de, wPlayerName
call PlaceString
ld l, c
@@ -47,7 +47,7 @@
call PlaceString
CheckEvent EVENT_GOT_POKEDEX
jr z, .noOaksPC2
- coord hl, 2, 6
+ hlcoord 2, 6
ld de, OaksPCText
call PlaceString
ld a, [wNumHoFTeams]
@@ -55,20 +55,20 @@
jr z, .noLeaguePC
ld a, 4
ld [wMaxMenuItem], a
- coord hl, 2, 8
+ hlcoord 2, 8
ld de, PKMNLeaguePCText
call PlaceString
- coord hl, 2, 10
+ hlcoord 2, 10
ld de, LogOffPCText
jr .next3
.noLeaguePC
- coord hl, 2, 8
+ hlcoord 2, 8
ld de, LogOffPCText
jr .next3
.noOaksPC2
ld a, $2
ld [wMaxMenuItem], a
- coord hl, 2, 6
+ hlcoord 2, 6
ld de, LogOffPCText
.next3
call PlaceString
@@ -82,7 +82,7 @@
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ret
SomeonesPCText: db "SOMEONE's PC@"
@@ -114,16 +114,16 @@
BillsPCMenu:
ld a, [wParentMenuItem]
ld [wCurrentMenuItem], a
- ld hl, vChars2 + $780
+ ld hl, vChars2 tile $78
ld de, PokeballTileGraphics
- lb bc, BANK(PokeballTileGraphics), $01
+ lb bc, BANK(PokeballTileGraphics), 1
call CopyVideoData
call LoadScreenTilesFromBuffer2DisableBGTransfer
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, 10
ld c, 12
call TextBoxBorder
- coord hl, 2, 2
+ hlcoord 2, 2
ld de, BillsPCMenuText
call PlaceString
ld hl, wTopMenuItemY
@@ -146,7 +146,7 @@
ld [wPlayerMonNumber], a
ld hl, WhatText
call PrintText
- coord hl, 9, 14
+ hlcoord 9, 14
ld b, 2
ld c, 9
call TextBoxBorder
@@ -156,7 +156,7 @@
jr c, .singleDigitBoxNum
; two digit box num
sub 9
- coord hl, 17, 16
+ hlcoord 17, 16
ld [hl], "1"
add "0"
jr .next
@@ -163,12 +163,12 @@
.singleDigitBoxNum
add "1"
.next
- Coorda 18, 16
- coord hl, 10, 16
+ ldcoord_a 18, 16
+ hlcoord 10, 16
ld de, BoxNoPCText
call PlaceString
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
call HandleMenuInput
bit 1, a
@@ -318,7 +318,7 @@
jp BillsPCMenu
BillsPCChangeBox:
- callba ChangeBox
+ farcall ChangeBox
jp BillsPCMenu
DisplayMonListMenu:
@@ -380,7 +380,7 @@
INCLUDE "data/moves/hm_moves.asm"
DisplayDepositWithdrawMenu:
- coord hl, 9, 10
+ hlcoord 9, 10
ld b, 6
ld c, 9
call TextBoxBorder
@@ -390,9 +390,9 @@
jr nz, .next
ld de, WithdrawPCText
.next
- coord hl, 11, 12
+ hlcoord 11, 12
call PlaceString
- coord hl, 11, 14
+ hlcoord 11, 14
ld de, StatsCancelPCText
call PlaceString
ld hl, wTopMenuItemY
@@ -501,7 +501,7 @@
text_end
CableClubLeftGameboy::
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_EXTERNAL_CLOCK
ret z
ld a, [wSpritePlayerStateData1FacingDirection]
@@ -518,7 +518,7 @@
tx_pre_jump JustAMomentText
CableClubRightGameboy::
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
ret z
ld a, [wSpritePlayerStateData1FacingDirection]
--- a/engine/pokemon/evos_moves.asm
+++ b/engine/pokemon/evos_moves.asm
@@ -11,7 +11,7 @@
; this is only called after battle
; it is supposed to do level up evolutions, though there is a bug that allows item evolutions to occur
EvolutionAfterBattle:
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
push af
xor a
ld [wEvolutionOccurred], a
@@ -120,16 +120,16 @@
ld c, 50
call DelayFrames
xor a
- ld [hAutoBGTransferEnabled], a
- coord hl, 0, 0
+ ldh [hAutoBGTransferEnabled], a
+ hlcoord 0, 0
lb bc, 12, 20
call ClearScreenArea
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld a, $ff
ld [wUpdateSpritesEnabled], a
call ClearSprites
- callab EvolveMon
+ callfar EvolveMon
jp c, CancelledEvolution
ld hl, EvolvedText
call PrintText
@@ -245,7 +245,7 @@
pop bc
pop hl
pop af
- ld [hTilesetType], a
+ ldh [hTilesetType], a
ld a, [wLinkState]
cp LINK_STATE_TRADING
ret z
--- a/engine/pokemon/experience.asm
+++ b/engine/pokemon/experience.asm
@@ -10,15 +10,15 @@
push hl
ld hl, wLoadedMonExp + 2 ; current exp
; compare exp needed for level d with current exp
- ld a, [hExperience + 2]
+ ldh a, [hExperience + 2]
ld c, a
ld a, [hld]
sub c
- ld a, [hExperience + 1]
+ ldh a, [hExperience + 1]
ld c, a
ld a, [hld]
sbc c
- ld a, [hExperience]
+ ldh a, [hExperience]
ld c, a
ld a, [hl]
sbc c
@@ -38,56 +38,56 @@
add hl, bc
call CalcDSquared
ld a, d
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
ld a, [hl]
and $f0
swap a
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
ld a, [hli]
and $f
- ld [hDivisor], a
+ ldh [hDivisor], a
ld b, $4
call Divide
- ld a, [hQuotient + 1]
+ ldh a, [hQuotient + 1]
push af
- ld a, [hQuotient + 2]
+ ldh a, [hQuotient + 2]
push af
- ld a, [hQuotient + 3]
+ ldh a, [hQuotient + 3]
push af
call CalcDSquared
ld a, [hl]
and $7f
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
- ld a, [hProduct + 1]
+ ldh a, [hProduct + 1]
push af
- ld a, [hProduct + 2]
+ ldh a, [hProduct + 2]
push af
- ld a, [hProduct + 3]
+ ldh a, [hProduct + 3]
push af
ld a, [hli]
push af
xor a
- ld [hMultiplicand], a
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand], a
+ ldh [hMultiplicand + 1], a
ld a, d
- ld [hMultiplicand + 2], a
+ ldh [hMultiplicand + 2], a
ld a, [hli]
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply
ld b, [hl]
- ld a, [hProduct + 3]
+ ldh a, [hProduct + 3]
sub b
- ld [hProduct + 3], a
+ ldh [hProduct + 3], a
ld b, $0
- ld a, [hProduct + 2]
+ ldh a, [hProduct + 2]
sbc b
- ld [hProduct + 2], a
- ld a, [hProduct + 1]
+ ldh [hProduct + 2], a
+ ldh a, [hProduct + 1]
sbc b
- ld [hProduct + 1], a
+ ldh [hProduct + 1], a
; The difference of the linear term and the constant term consists of 3 bytes
; starting at hProduct + 1. Below, hExperience (an alias of that address) will
; be used instead for the further work of adding or subtracting the squared
@@ -96,54 +96,54 @@
and $80
jr nz, .subtractSquaredTerm ; check sign
pop bc
- ld a, [hExperience + 2]
+ ldh a, [hExperience + 2]
add b
- ld [hExperience + 2], a
+ ldh [hExperience + 2], a
pop bc
- ld a, [hExperience + 1]
+ ldh a, [hExperience + 1]
adc b
- ld [hExperience + 1], a
+ ldh [hExperience + 1], a
pop bc
- ld a, [hExperience]
+ ldh a, [hExperience]
adc b
- ld [hExperience], a
+ ldh [hExperience], a
jr .addCubedTerm
.subtractSquaredTerm
pop bc
- ld a, [hExperience + 2]
+ ldh a, [hExperience + 2]
sub b
- ld [hExperience + 2], a
+ ldh [hExperience + 2], a
pop bc
- ld a, [hExperience + 1]
+ ldh a, [hExperience + 1]
sbc b
- ld [hExperience + 1], a
+ ldh [hExperience + 1], a
pop bc
- ld a, [hExperience]
+ ldh a, [hExperience]
sbc b
- ld [hExperience], a
+ ldh [hExperience], a
.addCubedTerm
pop bc
- ld a, [hExperience + 2]
+ ldh a, [hExperience + 2]
add b
- ld [hExperience + 2], a
+ ldh [hExperience + 2], a
pop bc
- ld a, [hExperience + 1]
+ ldh a, [hExperience + 1]
adc b
- ld [hExperience + 1], a
+ ldh [hExperience + 1], a
pop bc
- ld a, [hExperience]
+ ldh a, [hExperience]
adc b
- ld [hExperience], a
+ ldh [hExperience], a
ret
; calculates d*d
CalcDSquared:
xor a
- ld [hMultiplicand], a
- ld [hMultiplicand + 1], a
+ ldh [hMultiplicand], a
+ ldh [hMultiplicand + 1], a
ld a, d
- ld [hMultiplicand + 2], a
- ld [hMultiplier], a
+ ldh [hMultiplicand + 2], a
+ ldh [hMultiplier], a
jp Multiply
INCLUDE "data/growth_rates.asm"
--- a/engine/pokemon/learn_move.asm
+++ b/engine/pokemon/learn_move.asm
@@ -76,7 +76,7 @@
AbandonLearning:
ld hl, AbandonLearningText
call PrintText
- coord hl, 14, 7
+ hlcoord 14, 7
lb bc, 8, 15
ld a, TWO_OPTION_MENU
ld [wTextBoxID], a
@@ -99,7 +99,7 @@
push hl
ld hl, TryingToLearnText
call PrintText
- coord hl, 14, 7
+ hlcoord 14, 7
lb bc, 8, 15
ld a, TWO_OPTION_MENU
ld [wTextBoxID], a
@@ -114,25 +114,25 @@
ld de, wMoves
ld bc, NUM_MOVES
call CopyData
- callab FormatMovesString
+ callfar FormatMovesString
pop hl
.loop
push hl
ld hl, WhichMoveToForgetText
call PrintText
- coord hl, 4, 7
+ hlcoord 4, 7
ld b, 4
ld c, 14
call TextBoxBorder
- coord hl, 6, 8
+ hlcoord 6, 8
ld de, wMovesString
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
set 2, a
- ld [hFlagsFFF6], a
+ ldh [hFlagsFFF6], a
call PlaceString
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
res 2, a
- ld [hFlagsFFF6], a
+ ldh [hFlagsFFF6], a
ld hl, wTopMenuItemY
ld a, 8
ld [hli], a ; wTopMenuItemY
--- a/engine/pokemon/load_mon_data.asm
+++ b/engine/pokemon/load_mon_data.asm
@@ -15,7 +15,7 @@
ld a, [wWhichPokemon]
ld e, a
- callab GetMonSpecies
+ callfar GetMonSpecies
.GetMonHeader
ld a, [wcf91]
--- a/engine/pokemon/status_screen.asm
+++ b/engine/pokemon/status_screen.asm
@@ -40,7 +40,7 @@
push hl
call DrawHPBar
pop hl
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
bit 0, a
jr z, .printFractionBelowBar
ld bc, $9 ; right of bar
@@ -80,32 +80,32 @@
ld hl, wd72c
set 1, [hl]
ld a, $33
- ld [rNR50], a ; Reduce the volume
+ ldh [rNR50], a ; Reduce the volume
call GBPalWhiteOutWithDelay3
call ClearScreen
call UpdateSprites
call LoadHpBarAndStatusTilePatterns
ld de, BattleHudTiles1 ; source
- ld hl, vChars2 + $6d0 ; dest
- lb bc, BANK(BattleHudTiles1), $03
+ ld hl, vChars2 tile $6d ; dest
+ lb bc, BANK(BattleHudTiles1), 3
call CopyVideoDataDouble ; ·│ :L and halfarrow line end
ld de, BattleHudTiles2
- ld hl, vChars2 + $780
- lb bc, BANK(BattleHudTiles2), $01
+ ld hl, vChars2 tile $78
+ lb bc, BANK(BattleHudTiles2), 1
call CopyVideoDataDouble ; │
ld de, BattleHudTiles3
- ld hl, vChars2 + $760
- lb bc, BANK(BattleHudTiles3), $02
- call CopyVideoDataDouble ; ─┘
+ ld hl, vChars2 tile $76
+ lb bc, BANK(BattleHudTiles3), 2
+ call CopyVideoDataDouble ; ─ ┘
ld de, PTile
- ld hl, vChars2 + $720
- lb bc, BANK(PTile), (PTileEnd - PTile) / $8
- call CopyVideoDataDouble ; P (for PP), inline
- ld a, [hTilesetType]
+ ld hl, vChars2 tile $72
+ lb bc, BANK(PTile), 1
+ call CopyVideoDataDouble ; bold P (for PP)
+ ldh a, [hTilesetType]
push af
xor a
- ld [hTilesetType], a
- coord hl, 19, 1
+ ldh [hTilesetType], a
+ hlcoord 19, 1
lb bc, 6, 10
call DrawLineBox ; Draws the box around name, HP and status
ld de, -6
@@ -113,54 +113,54 @@
ld [hl], "<DOT>"
dec hl
ld [hl], "№"
- coord hl, 19, 9
+ hlcoord 19, 9
lb bc, 8, 6
call DrawLineBox ; Draws the box around types, ID No. and OT
- coord hl, 10, 9
+ hlcoord 10, 9
ld de, Type1Text
call PlaceString ; "TYPE1/"
- coord hl, 11, 3
+ hlcoord 11, 3
predef DrawHP
ld hl, wStatusScreenHPBarColor
call GetHealthBarColor
ld b, SET_PAL_STATUS_SCREEN
call RunPaletteCommand
- coord hl, 16, 6
+ hlcoord 16, 6
ld de, wLoadedMonStatus
call PrintStatusCondition
jr nz, .StatusWritten
- coord hl, 16, 6
+ hlcoord 16, 6
ld de, OKText
call PlaceString ; "OK"
.StatusWritten
- coord hl, 9, 6
+ hlcoord 9, 6
ld de, StatusText
call PlaceString ; "STATUS/"
- coord hl, 14, 2
+ hlcoord 14, 2
call PrintLevel ; Pokémon level
ld a, [wMonHIndex]
ld [wd11e], a
ld [wd0b5], a
predef IndexToPokedex
- coord hl, 3, 7
+ hlcoord 3, 7
ld de, wd11e
lb bc, LEADING_ZEROES | 1, 3
call PrintNumber ; Pokémon no.
- coord hl, 11, 10
+ hlcoord 11, 10
predef PrintMonType
ld hl, NamePointers2
call .GetStringPointer
ld d, h
ld e, l
- coord hl, 9, 1
+ hlcoord 9, 1
call PlaceString ; Pokémon name
ld hl, OTPointers
call .GetStringPointer
ld d, h
ld e, l
- coord hl, 12, 16
+ hlcoord 12, 16
call PlaceString ; OT
- coord hl, 12, 14
+ hlcoord 12, 14
ld de, wLoadedMonOTID
lb bc, LEADING_ZEROES | 2, 5
call PrintNumber ; ID Number
@@ -168,13 +168,13 @@
call PrintStatsBox
call Delay3
call GBPalNormal
- coord hl, 1, 0
+ hlcoord 1, 0
call LoadFlippedFrontSpriteByMonIndex ; draw Pokémon picture
ld a, [wcf91]
call PlayCry ; play Pokémon cry
call WaitForTextScrollButtonPress ; wait for button
pop af
- ld [hTilesetType], a
+ ldh [hTilesetType], a
ret
.GetStringPointer
@@ -244,27 +244,25 @@
ld [hl], $6f ; ← (halfarrow ending)
ret
-PTile:
- INCBIN "gfx/font/P.1bpp"
-PTileEnd:
+PTile: INCBIN "gfx/font/P.1bpp"
PrintStatsBox:
ld a, d
and a ; a is 0 from the status screen
jr nz, .DifferentBox
- coord hl, 0, 8
+ hlcoord 0, 8
ld b, 8
ld c, 8
call TextBoxBorder ; Draws the box
- coord hl, 1, 9 ; Start printing stats from here
+ hlcoord 1, 9 ; Start printing stats from here
ld bc, $19 ; Number offset
jr .PrintStats
.DifferentBox
- coord hl, 9, 2
+ hlcoord 9, 2
ld b, 8
ld c, 9
call TextBoxBorder
- coord hl, 11, 3
+ hlcoord 11, 3
ld bc, $18
.PrintStats
push bc
@@ -298,11 +296,11 @@
next "SPECIAL@"
StatusScreen2:
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
push af
xor a
- ld [hTilesetType], a
- ld [hAutoBGTransferEnabled], a
+ ldh [hTilesetType], a
+ ldh [hAutoBGTransferEnabled], a
ld bc, NUM_MOVES + 1
ld hl, wMoves
call FillMemory
@@ -310,17 +308,17 @@
ld de, wMoves
ld bc, NUM_MOVES
call CopyData
- callab FormatMovesString
- coord hl, 9, 2
+ callfar FormatMovesString
+ hlcoord 9, 2
lb bc, 5, 10
call ClearScreenArea ; Clear under name
- coord hl, 19, 3
+ hlcoord 19, 3
ld [hl], $78
- coord hl, 0, 8
+ hlcoord 0, 8
ld b, 8
ld c, 18
call TextBoxBorder ; Draw move container
- coord hl, 2, 9
+ hlcoord 2, 9
ld de, wMovesString
call PlaceString ; Print moves
ld a, [wNumMovesMinusOne]
@@ -329,7 +327,7 @@
ld a, $4
sub c
ld b, a ; Number of moves ?
- coord hl, 11, 10
+ hlcoord 11, 10
ld de, SCREEN_WIDTH * 2
ld a, "<BOLD_P>"
call StatusScreen_PrintPP ; Print "PP"
@@ -341,7 +339,7 @@
call StatusScreen_PrintPP ; Fill the rest with --
.InitPP
ld hl, wLoadedMonMoves
- coord de, 14, 10
+ decoord 14, 10
ld b, 0
.PrintPP
ld a, [hli]
@@ -356,7 +354,7 @@
ld a, b
ld [hl], a
push hl
- callab GetMaxPP
+ callfar GetMaxPP
pop hl
pop af
ld [hl], a
@@ -391,7 +389,7 @@
cp $4
jr nz, .PrintPP
.PPDone
- coord hl, 9, 3
+ hlcoord 9, 3
ld de, StatusScreenExpText
call PlaceString
ld a, [wLoadedMonLevel]
@@ -401,7 +399,7 @@
inc a
ld [wLoadedMonLevel], a ; Increase temporarily if not 100
.Level100
- coord hl, 14, 6
+ hlcoord 14, 6
ld [hl], "<to>"
inc hl
inc hl
@@ -409,33 +407,33 @@
pop af
ld [wLoadedMonLevel], a
ld de, wLoadedMonExp
- coord hl, 12, 4
+ hlcoord 12, 4
lb bc, 3, 7
call PrintNumber ; exp
call CalcExpToLevelUp
ld de, wLoadedMonExp
- coord hl, 7, 6
+ hlcoord 7, 6
lb bc, 3, 7
call PrintNumber ; exp needed to level up
- coord hl, 9, 0
+ hlcoord 9, 0
call StatusScreen_ClearName
- coord hl, 9, 1
+ hlcoord 9, 1
call StatusScreen_ClearName
ld a, [wMonHIndex]
ld [wd11e], a
call GetMonName
- coord hl, 9, 1
+ hlcoord 9, 1
call PlaceString
ld a, $1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
call WaitForTextScrollButtonPress ; wait for button
pop af
- ld [hTilesetType], a
+ ldh [hTilesetType], a
ld hl, wd72c
res 1, [hl]
ld a, $77
- ld [rNR50], a
+ ldh [rNR50], a
call GBPalWhiteOut
jp ClearScreen
@@ -445,15 +443,15 @@
jr z, .atMaxLevel
inc a
ld d, a
- callab CalcExperience
+ callfar CalcExperience
ld hl, wLoadedMonExp + 2
- ld a, [hExperience + 2]
+ ldh a, [hExperience + 2]
sub [hl]
ld [hld], a
- ld a, [hExperience + 1]
+ ldh a, [hExperience + 1]
sbc [hl]
ld [hld], a
- ld a, [hExperience]
+ ldh a, [hExperience]
sbc [hl]
ld [hld], a
ret
--- a/engine/slots/game_corner_slots.asm
+++ b/engine/slots/game_corner_slots.asm
@@ -6,7 +6,7 @@
jr z, .printOutToLunch
cp $ff
jr z, .printSomeonesKeys
- callba AbleToPlaySlotsCheck
+ farcall AbleToPlaySlotsCheck
ld a, [wCanPlaySlots]
and a
ret z
@@ -22,7 +22,7 @@
ld a, 250
.next
ld [wSlotMachineSevenAndBarModeChance], a
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
ld [wSlotMachineSavedROMBank], a
call PromptUserToPlaySlots
ret
--- a/engine/slots/slot_machine.asm
+++ b/engine/slots/slot_machine.asm
@@ -25,7 +25,7 @@
call RunPaletteCommand
call GBPalNormal
ld a, $e4
- ld [rOBP0], a
+ ldh [rOBP0], a
ld hl, wd730
set 6, [hl]
xor a
@@ -79,11 +79,11 @@
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
ld [wMenuWatchMovingOutOfBounds], a
- coord hl, 14, 11
+ hlcoord 14, 11
ld b, 5
ld c, 4
call TextBoxBorder
- coord hl, 16, 12
+ hlcoord 16, 12
ld de, CoinMultiplierSlotMachineText
call PlaceString
call HandleMenuInput
@@ -133,7 +133,7 @@
.skip2
ld hl, OneMoreGoSlotMachineText
call PrintText
- coord hl, 14, 12
+ hlcoord 14, 12
lb bc, 13, 15
xor a ; YES_NO_MENU
ld [wTwoOptionMenuID], a
@@ -294,7 +294,7 @@
; Stop early if the middle symbol is not a cherry.
inc hl
ld a, [hl]
- cp SLOTSCHERRY >> 8
+ cp HIGH(SLOTSCHERRY)
jr nz, .stopWheel
ret
; It looks like this was intended to make the wheel stop when a 7 symbol was
@@ -303,7 +303,7 @@
ld c, $3
.loop
ld a, [hli]
- cp SLOTS7 >> 8
+ cp HIGH(SLOTS7)
jr c, .stopWheel ; condition never true
dec c
jr nz, .loop
@@ -330,7 +330,7 @@
.sevenAndBarMode
call SlotMachine_FindWheel1Wheel2Matches
ld a, [de]
- cp (SLOTSBAR >> 8) + 1
+ cp HIGH(SLOTSBAR) + 1
ret nc
.stopWheel
xor a
@@ -427,7 +427,7 @@
jr nz, .acceptMatch
; if 7/bar matches aren't enabled and the match was a 7/bar symbol, roll wheel
ld a, [hl]
- cp (SLOTSBAR >> 8) + 1
+ cp HIGH(SLOTSBAR) + 1
jr c, .rollWheel3DownByOneSymbol
.acceptMatch
ld a, [hl]
@@ -454,9 +454,9 @@
jp hl
.flashScreenLoop
- ld a, [rBGP]
+ ldh a, [rBGP]
xor $40
- ld [rBGP], a
+ ldh [rBGP], a
ld c, 5
call DelayFrames
dec b
@@ -472,7 +472,7 @@
call SlotMachine_PayCoinsToPlayer
call SlotMachine_PrintPayoutCoins
ld a, $e4
- ld [rOBP0], a
+ ldh [rOBP0], a
jp .done
SymbolLinedUpSlotMachineText:
@@ -615,7 +615,7 @@
SlotMachine_PrintWinningSymbol:
; prints winning symbol and down arrow in text box
- coord hl, 2, 14
+ hlcoord 2, 14
ld a, [wSlotMachineWinningSymbol]
add $25
ld [hli], a
@@ -627,7 +627,7 @@
ld [hli], a
inc a
ld [hl], a
- coord hl, 18, 16
+ hlcoord 18, 16
ld [hl], "▼"
ret
@@ -642,13 +642,13 @@
predef SubBCDPredef
SlotMachine_PrintCreditCoins:
- coord hl, 5, 1
+ hlcoord 5, 1
ld de, wPlayerCoins
ld c, $2
jp PrintBCDNumber
SlotMachine_PrintPayoutCoins:
- coord hl, 11, 1
+ hlcoord 11, 1
ld de, wPayoutCoins
lb bc, LEADING_ZEROES | 2, 4 ; 2 bytes, 4 digits
jp PrintNumber
@@ -695,14 +695,14 @@
ld a, [wAnimCounter]
dec a
jr nz, .skip1
- ld a, [rOBP0]
+ ldh a, [rOBP0]
xor $40 ; make the slot wheel symbols flash
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, 5
.skip1
ld [wAnimCounter], a
ld a, [wSlotMachineWinningSymbol]
- cp (SLOTSBAR >> 8) + 1
+ cp HIGH(SLOTSBAR) + 1
ld c, 8
jr nc, .skip2
srl c ; c = 4 (make the the coins transfer faster if the symbol was 7 or bar)
@@ -725,19 +725,19 @@
jr z, SlotMachine_UpdateTwoCoinBallTiles
SlotMachine_UpdateThreeCoinBallTiles:
- coord hl, 3, 2
+ hlcoord 3, 2
call SlotMachine_UpdateBallTiles
- coord hl, 3, 10
+ hlcoord 3, 10
call SlotMachine_UpdateBallTiles
SlotMachine_UpdateTwoCoinBallTiles:
- coord hl, 3, 4
+ hlcoord 3, 4
call SlotMachine_UpdateBallTiles
- coord hl, 3, 8
+ hlcoord 3, 8
call SlotMachine_UpdateBallTiles
SlotMachine_UpdateOneCoinBallTiles:
- coord hl, 3, 6
+ hlcoord 3, 6
SlotMachine_UpdateBallTiles:
ld a, [wNewSlotMachineBallTile]
@@ -825,7 +825,7 @@
SlotMachine_HandleInputWhileWheelsSpin:
call DelayFrame
call JoypadLowSensitivity
- ld a, [hJoy5]
+ ldh a, [hJoy5]
and A_BUTTON
ret z
ld hl, wStoppingWhichSlotMachineWheel
@@ -850,21 +850,21 @@
call DisableLCD
ld hl, SlotMachineTiles2
ld de, vChars0
- ld bc, $1c0
+ ld bc, $1c tiles ; should be SlotMachineTiles2End - SlotMachineTiles2, or $18 tiles
ld a, BANK(SlotMachineTiles2)
call FarCopyData2
ld hl, SlotMachineTiles1
ld de, vChars2
- ld bc, $250
+ ld bc, SlotMachineTiles1End - SlotMachineTiles1
ld a, BANK(SlotMachineTiles1)
call FarCopyData2
ld hl, SlotMachineTiles2
- ld de, vChars2 + $250
- ld bc, $1c0
+ ld de, vChars2 tile $25
+ ld bc, $1c tiles ; should be SlotMachineTiles2End - SlotMachineTiles2, or $18 tiles
ld a, BANK(SlotMachineTiles2)
call FarCopyData2
ld hl, SlotMachineMap
- coord de, 0, 0
+ decoord 0, 0
ld bc, SlotMachineMapEnd - SlotMachineMap
call CopyData
call EnableLCD
@@ -890,3 +890,4 @@
IF DEF(_BLUE)
INCBIN "gfx/slots/blue_slots_1.2bpp"
ENDC
+SlotMachineTiles1End:
--- a/home.asm
+++ b/home.asm
@@ -18,64 +18,16 @@
INCLUDE "home/start.asm"
INCLUDE "home/joypad.asm"
+
INCLUDE "data/maps/map_header_pointers.asm"
-INCLUDE "home/overworld.asm"
-CheckForUserInterruption::
-; Return carry if Up+Select+B, Start or A are pressed in c frames.
-; Used only in the intro and title screen.
- call DelayFrame
-
- push bc
- call JoypadLowSensitivity
- pop bc
-
- ld a, [hJoyHeld]
- cp D_UP + SELECT + B_BUTTON
- jr z, .input
-
- ld a, [hJoy5]
- and START | A_BUTTON
- jr nz, .input
-
- dec c
- jr nz, CheckForUserInterruption
-
- and a
- ret
-
-.input
- scf
- ret
-
-; function to load position data for destination warp when switching maps
-; INPUT:
-; a = ID of destination warp within destination map
-LoadDestinationWarpPosition::
- ld b, a
- ld a, [hLoadedROMBank]
- push af
- ld a, [wPredefParentBank]
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- ld a, b
- add a
- add a
- ld c, a
- ld b, 0
- add hl, bc
- ld bc, 4
- ld de, wCurrentTileBlockMapViewPointer
- call CopyData
- pop af
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- ret
-
+INCLUDE "home/overworld.asm"
INCLUDE "home/pokemon.asm"
INCLUDE "home/print_bcd.asm"
INCLUDE "home/pics.asm"
+
INCLUDE "data/tilesets/collision_tile_ids.asm"
+
INCLUDE "home/copy2.asm"
INCLUDE "home/text.asm"
INCLUDE "home/vcopy.asm"
@@ -85,1724 +37,51 @@
INCLUDE "home/serial.asm"
INCLUDE "home/timer.asm"
INCLUDE "home/audio.asm"
+INCLUDE "home/update_sprites.asm"
-UpdateSprites::
- ld a, [wUpdateSpritesEnabled]
- dec a
- ret nz
- ld a, [hLoadedROMBank]
- push af
- ld a, BANK(_UpdateSprites)
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- call _UpdateSprites
- pop af
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- ret
-
INCLUDE "data/items/marts.asm"
+
INCLUDE "home/overworld_text.asm"
INCLUDE "home/uncompress.asm"
-
-ResetPlayerSpriteData::
- ld hl, wSpriteStateData1
- call ResetPlayerSpriteData_ClearSpriteData
- ld hl, wSpriteStateData2
- call ResetPlayerSpriteData_ClearSpriteData
- ld a, $1
- ld [wSpritePlayerStateData1PictureID], a
- ld [wSpritePlayerStateData2ImageBaseOffset], a
- ld hl, wSpritePlayerStateData1YPixels
- ld [hl], $3c ; set Y screen pos
- inc hl
- inc hl
- ld [hl], $40 ; set X screen pos
- ret
-
-; overwrites sprite data with zeroes
-ResetPlayerSpriteData_ClearSpriteData::
- ld bc, $10
- xor a
- jp FillMemory
-
-FadeOutAudio::
- ld a, [wAudioFadeOutControl]
- and a ; currently fading out audio?
- jr nz, .fadingOut
- ld a, [wd72c]
- bit 1, a
- ret nz
- ld a, $77
- ld [rNR50], a
- ret
-.fadingOut
- ld a, [wAudioFadeOutCounter]
- and a
- jr z, .counterReachedZero
- dec a
- ld [wAudioFadeOutCounter], a
- ret
-.counterReachedZero
- ld a, [wAudioFadeOutCounterReloadValue]
- ld [wAudioFadeOutCounter], a
- ld a, [rNR50]
- and a ; has the volume reached 0?
- jr z, .fadeOutComplete
- ld b, a
- and $f
- dec a
- ld c, a
- ld a, b
- and $f0
- swap a
- dec a
- swap a
- or c
- ld [rNR50], a
- ret
-.fadeOutComplete
- ld a, [wAudioFadeOutControl]
- ld b, a
- xor a
- ld [wAudioFadeOutControl], a
- ld a, SFX_STOP_ALL_MUSIC
- ld [wNewSoundID], a
- call PlaySound
- ld a, [wAudioSavedROMBank]
- ld [wAudioROMBank], a
- ld a, b
- ld [wNewSoundID], a
- jp PlaySound
-
+INCLUDE "home/reset_player_sprite.asm"
+INCLUDE "home/fade_audio.asm"
INCLUDE "home/text_script.asm"
INCLUDE "home/start_menu.asm"
-
-; function to count how many bits are set in a string of bytes
-; INPUT:
-; hl = address of string of bytes
-; b = length of string of bytes
-; OUTPUT:
-; [wNumSetBits] = number of set bits
-CountSetBits::
- ld c, 0
-.loop
- ld a, [hli]
- ld e, a
- ld d, 8
-.innerLoop ; count how many bits are set in the current byte
- srl e
- ld a, 0
- adc c
- ld c, a
- dec d
- jr nz, .innerLoop
- dec b
- jr nz, .loop
- ld a, c
- ld [wNumSetBits], a
- ret
-
-; subtracts the amount the player paid from their money
-; OUTPUT: carry = 0(success) or 1(fail because there is not enough money)
-SubtractAmountPaidFromMoney::
- jpba SubtractAmountPaidFromMoney_
-
-; adds the amount the player sold to their money
-AddAmountSoldToMoney::
- ld de, wPlayerMoney + 2
- ld hl, hMoney + 2 ; total price of items
- ld c, 3 ; length of money in bytes
- predef AddBCDPredef ; add total price to money
- ld a, MONEY_BOX
- ld [wTextBoxID], a
- call DisplayTextBoxID ; redraw money text box
- ld a, SFX_PURCHASE
- call PlaySoundWaitForCurrent
- jp WaitForSoundToFinish
-
-; function to remove an item (in varying quantities) from the player's bag or PC box
-; INPUT:
-; HL = address of inventory (either wNumBagItems or wNumBoxItems)
-; [wWhichPokemon] = index (within the inventory) of the item to remove
-; [wItemQuantity] = quantity to remove
-RemoveItemFromInventory::
- ld a, [hLoadedROMBank]
- push af
- ld a, BANK(RemoveItemFromInventory_)
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- call RemoveItemFromInventory_
- pop af
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- ret
-
-; function to add an item (in varying quantities) to the player's bag or PC box
-; INPUT:
-; HL = address of inventory (either wNumBagItems or wNumBoxItems)
-; [wcf91] = item ID
-; [wItemQuantity] = item quantity
-; sets carry flag if successful, unsets carry flag if unsuccessful
-AddItemToInventory::
- push bc
- ld a, [hLoadedROMBank]
- push af
- ld a, BANK(AddItemToInventory_)
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- call AddItemToInventory_
- pop bc
- ld a, b
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- pop bc
- ret
-
+INCLUDE "home/count_set_bits.asm"
+INCLUDE "home/inventory.asm"
INCLUDE "home/list_menu.asm"
INCLUDE "home/names.asm"
-
-; reloads text box tile patterns, current map view, and tileset tile patterns
-ReloadMapData::
- ld a, [hLoadedROMBank]
- push af
- ld a, [wCurMap]
- call SwitchToMapRomBank
- call DisableLCD
- call LoadTextBoxTilePatterns
- call LoadCurrentMapView
- call LoadTilesetTilePatternData
- call EnableLCD
- pop af
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- ret
-
-; reloads tileset tile patterns
-ReloadTilesetTilePatterns::
- ld a, [hLoadedROMBank]
- push af
- ld a, [wCurMap]
- call SwitchToMapRomBank
- call DisableLCD
- call LoadTilesetTilePatternData
- call EnableLCD
- pop af
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- ret
-
-; shows the town map and lets the player choose a destination to fly to
-ChooseFlyDestination::
- ld hl, wd72e
- res 4, [hl]
- jpba LoadTownMap_Fly
-
-; causes the text box to close without waiting for a button press after displaying text
-DisableWaitingAfterTextDisplay::
- ld a, $01
- ld [wDoNotWaitForButtonPressAfterDisplayingText], a
- ret
-
-; uses an item
-; UseItem is used with dummy items to perform certain other functions as well
-; INPUT:
-; [wcf91] = item ID
-; OUTPUT:
-; [wActionResultOrTookBattleTurn] = success
-; 00: unsuccessful
-; 01: successful
-; 02: not able to be used right now, no extra menu displayed (only certain items use this)
-UseItem::
- jpba UseItem_
-
-; confirms the item toss and then tosses the item
-; INPUT:
-; hl = address of inventory (either wNumBagItems or wNumBoxItems)
-; [wcf91] = item ID
-; [wWhichPokemon] = index of item within inventory
-; [wItemQuantity] = quantity to toss
-; OUTPUT:
-; clears carry flag if the item is tossed, sets carry flag if not
-TossItem::
- ld a, [hLoadedROMBank]
- push af
- ld a, BANK(TossItem_)
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- call TossItem_
- pop de
- ld a, d
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- ret
-
-; checks if an item is a key item
-; INPUT:
-; [wcf91] = item ID
-; OUTPUT:
-; [wIsKeyItem] = result
-; 00: item is not key item
-; 01: item is key item
-IsKeyItem::
- push hl
- push de
- push bc
- callba IsKeyItem_
- pop bc
- pop de
- pop hl
- ret
-
-; function to draw various text boxes
-; INPUT:
-; [wTextBoxID] = text box ID
-; b, c = y, x cursor position (TWO_OPTION_MENU only)
-DisplayTextBoxID::
- ld a, [hLoadedROMBank]
- push af
- ld a, BANK(DisplayTextBoxID_)
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- call DisplayTextBoxID_
- pop bc
- ld a, b
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- ret
-
-; not zero if an NPC movement script is running, the player character is
-; automatically stepping down from a door, or joypad states are being simulated
-IsPlayerCharacterBeingControlledByGame::
- ld a, [wNPCMovementScriptPointerTableNum]
- and a
- ret nz
- ld a, [wd736]
- bit 1, a ; currently stepping down from door bit
- ret nz
- ld a, [wd730]
- and $80
- ret
-
-RunNPCMovementScript::
- ld hl, wd736
- bit 0, [hl]
- res 0, [hl]
- jr nz, .playerStepOutFromDoor
- ld a, [wNPCMovementScriptPointerTableNum]
- and a
- ret z
- dec a
- add a
- ld d, 0
- ld e, a
- ld hl, .NPCMovementScriptPointerTables
- add hl, de
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [hLoadedROMBank]
- push af
- ld a, [wNPCMovementScriptBank]
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- ld a, [wNPCMovementScriptFunctionNum]
- call CallFunctionInTable
- pop af
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- ret
-
-.NPCMovementScriptPointerTables
- dw PalletMovementScriptPointerTable
- dw PewterMuseumGuyMovementScriptPointerTable
- dw PewterGymGuyMovementScriptPointerTable
-.playerStepOutFromDoor
- jpba PlayerStepOutFromDoor
-
-EndNPCMovementScript::
- jpba _EndNPCMovementScript
-
-EmptyFunc2::
- ret
-
+INCLUDE "home/reload_tiles.asm"
+INCLUDE "home/item.asm"
+INCLUDE "home/textbox.asm"
+INCLUDE "home/npc_movement.asm"
INCLUDE "home/trainers.asm"
-
-; checks if the player's coordinates match an arrow movement tile's coordinates
-; and if so, decodes the RLE movement data
-; b = player Y
-; c = player X
-DecodeArrowMovementRLE::
- ld a, [hli]
- cp $ff
- ret z ; no match in the list
- cp b
- jr nz, .nextArrowMovementTileEntry1
- ld a, [hli]
- cp c
- jr nz, .nextArrowMovementTileEntry2
- ld a, [hli]
- ld d, [hl]
- ld e, a
- ld hl, wSimulatedJoypadStatesEnd
- call DecodeRLEList
- dec a
- ld [wSimulatedJoypadStatesIndex], a
- ret
-.nextArrowMovementTileEntry1
- inc hl
-.nextArrowMovementTileEntry2
- inc hl
- inc hl
- jr DecodeArrowMovementRLE
-
-TextScript_ItemStoragePC::
- call SaveScreenTilesToBuffer2
- ld b, BANK(PlayerPC)
- ld hl, PlayerPC
- jr bankswitchAndContinue
-
-TextScript_BillsPC::
- call SaveScreenTilesToBuffer2
- ld b, BANK(BillsPC_)
- ld hl, BillsPC_
- jr bankswitchAndContinue
-
-TextScript_GameCornerPrizeMenu::
-; XXX find a better name for this function
-; special_F7
- ld b, BANK(CeladonPrizeMenu)
- ld hl, CeladonPrizeMenu
-bankswitchAndContinue::
- call Bankswitch
- jp HoldTextDisplayOpen ; continue to main text-engine function
-
-TextScript_PokemonCenterPC::
- ld b, BANK(ActivatePC)
- ld hl, ActivatePC
- jr bankswitchAndContinue
-
-StartSimulatingJoypadStates::
- xor a
- ld [wOverrideSimulatedJoypadStatesMask], a
- ld [wSpritePlayerStateData2MovementByte1], a
- ld hl, wd730
- set 7, [hl]
- ret
-
-IsItemInBag::
-; given an item_id in b
-; set zero flag if item isn't in player's bag
-; else reset zero flag
-; related to Pokémon Tower and ghosts
- predef GetQuantityOfItemInBag
- ld a, b
- and a
- ret
-
-DisplayPokedex::
- ld [wd11e], a
- jpba _DisplayPokedex
-
-SetSpriteFacingDirectionAndDelay::
- call SetSpriteFacingDirection
- ld c, 6
- jp DelayFrames
-
-SetSpriteFacingDirection::
- ld a, $9
- ld [hSpriteDataOffset], a
- call GetPointerWithinSpriteStateData1
- ld a, [hSpriteFacingDirection]
- ld [hl], a
- ret
-
-SetSpriteImageIndexAfterSettingFacingDirection::
- ld de, -7
- add hl, de
- ld [hl], a
- ret
-
-; tests if the player's coordinates are in a specified array
-; INPUT:
-; hl = address of array
-; OUTPUT:
-; [wCoordIndex] = if there is match, the matching array index
-; sets carry if the coordinates are in the array, clears carry if not
-ArePlayerCoordsInArray::
- ld a, [wYCoord]
- ld b, a
- ld a, [wXCoord]
- ld c, a
- ; fallthrough
-
-CheckCoords::
- xor a
- ld [wCoordIndex], a
-.loop
- ld a, [hli]
- cp $ff ; reached terminator?
- jr z, .notInArray
- push hl
- ld hl, wCoordIndex
- inc [hl]
- pop hl
-.compareYCoord
- cp b
- jr z, .compareXCoord
- inc hl
- jr .loop
-.compareXCoord
- ld a, [hli]
- cp c
- jr nz, .loop
-.inArray
- scf
- ret
-.notInArray
- and a
- ret
-
-; tests if a boulder's coordinates are in a specified array
-; INPUT:
-; hl = address of array
-; [hSpriteIndex] = index of boulder sprite
-; OUTPUT:
-; [wCoordIndex] = if there is match, the matching array index
-; sets carry if the coordinates are in the array, clears carry if not
-CheckBoulderCoords::
- push hl
- ld hl, wSpritePlayerStateData2MapY
- ld a, [hSpriteIndex]
- swap a
- ld d, $0
- ld e, a
- add hl, de
- ld a, [hli]
- sub $4 ; because sprite coordinates are offset by 4
- ld b, a
- ld a, [hl]
- sub $4 ; because sprite coordinates are offset by 4
- ld c, a
- pop hl
- jp CheckCoords
-
-GetPointerWithinSpriteStateData1::
- ld h, $c1
- jr _GetPointerWithinSpriteStateData
-
-GetPointerWithinSpriteStateData2::
- ld h, $c2
-
-_GetPointerWithinSpriteStateData:
- ld a, [hSpriteDataOffset]
- ld b, a
- ld a, [hSpriteIndex]
- swap a
- add b
- ld l, a
- ret
-
-; decodes a $ff-terminated RLEncoded list
-; each entry is a pair of bytes <byte value> <repetitions>
-; the final $ff will be replicated in the output list and a contains the number of bytes written
-; de: input list
-; hl: output list
-DecodeRLEList::
- xor a
- ld [wRLEByteCount], a ; count written bytes here
-.listLoop
- ld a, [de]
- cp $ff
- jr z, .endOfList
- ld [hRLEByteValue], a ; store byte value to be written
- inc de
- ld a, [de]
- ld b, $0
- ld c, a ; number of bytes to be written
- ld a, [wRLEByteCount]
- add c
- ld [wRLEByteCount], a ; update total number of written bytes
- ld a, [hRLEByteValue]
- call FillMemory ; write a c-times to output
- inc de
- jr .listLoop
-.endOfList
- ld a, $ff
- ld [hl], a ; write final $ff
- ld a, [wRLEByteCount]
- inc a ; include sentinel in counting
- ret
-
-; sets movement byte 1 for sprite [hSpriteIndex] to $FE and byte 2 to [hSpriteMovementByte2]
-SetSpriteMovementBytesToFE::
- push hl
- call GetSpriteMovementByte1Pointer
- ld [hl], $fe
- call GetSpriteMovementByte2Pointer
- ld a, [hSpriteMovementByte2]
- ld [hl], a
- pop hl
- ret
-
-; sets both movement bytes for sprite [hSpriteIndex] to $FF
-SetSpriteMovementBytesToFF::
- push hl
- call GetSpriteMovementByte1Pointer
- ld [hl], $FF
- call GetSpriteMovementByte2Pointer
- ld [hl], $FF ; prevent person from walking?
- pop hl
- ret
-
-; returns the sprite movement byte 1 pointer for sprite [hSpriteIndex] in hl
-GetSpriteMovementByte1Pointer::
- ld h, $C2
- ld a, [hSpriteIndex]
- swap a
- add 6
- ld l, a
- ret
-
-; returns the sprite movement byte 2 pointer for sprite [hSpriteIndex] in hl
-GetSpriteMovementByte2Pointer::
- push de
- ld hl, wMapSpriteData
- ld a, [hSpriteIndex]
- dec a
- add a
- ld d, 0
- ld e, a
- add hl, de
- pop de
- ret
-
-GetTrainerInformation::
- call GetTrainerName
- ld a, [wLinkState]
- and a
- jr nz, .linkBattle
- ld a, BANK(TrainerPicAndMoneyPointers)
- call BankswitchHome
- ld a, [wTrainerClass]
- dec a
- ld hl, TrainerPicAndMoneyPointers
- ld bc, $5
- call AddNTimes
- ld de, wTrainerPicPointer
- ld a, [hli]
- ld [de], a
- inc de
- ld a, [hli]
- ld [de], a
- ld de, wTrainerBaseMoney
- ld a, [hli]
- ld [de], a
- inc de
- ld a, [hli]
- ld [de], a
- jp BankswitchBack
-.linkBattle
- ld hl, wTrainerPicPointer
- ld de, RedPicFront
- ld [hl], e
- inc hl
- ld [hl], d
- ret
-
-GetTrainerName::
- jpba GetTrainerName_
-
-HasEnoughMoney::
-; Check if the player has at least as much
-; money as the 3-byte BCD value at hMoney.
- ld de, wPlayerMoney
- ld hl, hMoney
- ld c, 3
- jp StringCmp
-
-HasEnoughCoins::
-; Check if the player has at least as many
-; coins as the 2-byte BCD value at hCoins.
- ld de, wPlayerCoins
- ld hl, hCoins
- ld c, 2
- jp StringCmp
-
+INCLUDE "home/map_objects.asm"
+INCLUDE "home/trainers2.asm"
+INCLUDE "home/money.asm"
INCLUDE "home/bankswitch.asm"
INCLUDE "home/yes_no.asm"
-
-; calculates the difference |a-b|, setting carry flag if a<b
-CalcDifference::
- sub b
- ret nc
- cpl
- add $1
- scf
- ret
-
-MoveSprite::
-; move the sprite [hSpriteIndex] with the movement pointed to by de
-; actually only copies the movement data to wNPCMovementDirections for later
- call SetSpriteMovementBytesToFF
-MoveSprite_::
- push hl
- push bc
- call GetSpriteMovementByte1Pointer
- xor a
- ld [hl], a
- ld hl, wNPCMovementDirections
- ld c, 0
-
-.loop
- ld a, [de]
- ld [hli], a
- inc de
- inc c
- cp $FF ; have we reached the end of the movement data?
- jr nz, .loop
-
- ld a, c
- ld [wNPCNumScriptedSteps], a ; number of steps taken
-
- pop bc
- ld hl, wd730
- set 0, [hl]
- pop hl
- xor a
- ld [wOverrideSimulatedJoypadStatesMask], a
- ld [wSimulatedJoypadStatesEnd], a
- dec a
- ld [wJoyIgnore], a
- ld [wWastedByteCD3A], a
- ret
-
-; divides [hDividend2] by [hDivisor2] and stores the quotient in [hQuotient2]
-DivideBytes::
- push hl
- ld hl, hQuotient2
- xor a
- ld [hld], a
- ld a, [hld]
- and a
- jr z, .done
- ld a, [hli]
-.loop
- sub [hl]
- jr c, .done
- inc hl
- inc [hl]
- dec hl
- jr .loop
-.done
- pop hl
- ret
-
-LoadFontTilePatterns::
- ld a, [rLCDC]
- bit 7, a ; is the LCD enabled?
- jr nz, .on
-.off
- ld hl, FontGraphics
- ld de, vFont
- ld bc, FontGraphicsEnd - FontGraphics
- ld a, BANK(FontGraphics)
- jp FarCopyDataDouble ; if LCD is off, transfer all at once
-.on
- ld de, FontGraphics
- ld hl, vFont
- lb bc, BANK(FontGraphics), (FontGraphicsEnd - FontGraphics) / $8
- jp CopyVideoDataDouble ; if LCD is on, transfer during V-blank
-
-LoadTextBoxTilePatterns::
- ld a, [rLCDC]
- bit 7, a ; is the LCD enabled?
- jr nz, .on
-.off
- ld hl, TextBoxGraphics
- ld de, vChars2 + $600
- ld bc, TextBoxGraphicsEnd - TextBoxGraphics
- ld a, BANK(TextBoxGraphics)
- jp FarCopyData2 ; if LCD is off, transfer all at once
-.on
- ld de, TextBoxGraphics
- ld hl, vChars2 + $600
- lb bc, BANK(TextBoxGraphics), (TextBoxGraphicsEnd - TextBoxGraphics) / $10
- jp CopyVideoData ; if LCD is on, transfer during V-blank
-
-LoadHpBarAndStatusTilePatterns::
- ld a, [rLCDC]
- bit 7, a ; is the LCD enabled?
- jr nz, .on
-.off
- ld hl, HpBarAndStatusGraphics
- ld de, vChars2 + $620
- ld bc, HpBarAndStatusGraphicsEnd - HpBarAndStatusGraphics
- ld a, BANK(HpBarAndStatusGraphics)
- jp FarCopyData2 ; if LCD is off, transfer all at once
-.on
- ld de, HpBarAndStatusGraphics
- ld hl, vChars2 + $620
- lb bc, BANK(HpBarAndStatusGraphics), (HpBarAndStatusGraphicsEnd - HpBarAndStatusGraphics) / $10
- jp CopyVideoData ; if LCD is on, transfer during V-blank
-
-FillMemory::
-; Fill bc bytes at hl with a.
- push de
- ld d, a
-.loop
- ld a, d
- ld [hli], a
- dec bc
- ld a, b
- or c
- jr nz, .loop
- pop de
- ret
-
-UncompressSpriteFromDE::
-; Decompress pic at a:de.
- ld hl, wSpriteInputPtr
- ld [hl], e
- inc hl
- ld [hl], d
- jp UncompressSpriteData
-
-SaveScreenTilesToBuffer2::
- coord hl, 0, 0
- ld de, wTileMapBackup2
- ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
- call CopyData
- ret
-
-LoadScreenTilesFromBuffer2::
- call LoadScreenTilesFromBuffer2DisableBGTransfer
- ld a, 1
- ld [hAutoBGTransferEnabled], a
- ret
-
-; loads screen tiles stored in wTileMapBackup2 but leaves hAutoBGTransferEnabled disabled
-LoadScreenTilesFromBuffer2DisableBGTransfer::
- xor a
- ld [hAutoBGTransferEnabled], a
- ld hl, wTileMapBackup2
- coord de, 0, 0
- ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
- call CopyData
- ret
-
-SaveScreenTilesToBuffer1::
- coord hl, 0, 0
- ld de, wTileMapBackup
- ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
- jp CopyData
-
-LoadScreenTilesFromBuffer1::
- xor a
- ld [hAutoBGTransferEnabled], a
- ld hl, wTileMapBackup
- coord de, 0, 0
- ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
- call CopyData
- ld a, 1
- ld [hAutoBGTransferEnabled], a
- ret
-
-DelayFrames::
-; wait c frames
- call DelayFrame
- dec c
- jr nz, DelayFrames
- ret
-
-PlaySoundWaitForCurrent::
- push af
- call WaitForSoundToFinish
- pop af
- jp PlaySound
-
-; Wait for sound to finish playing
-WaitForSoundToFinish::
- ld a, [wLowHealthAlarm]
- and $80
- ret nz
- push hl
-.waitLoop
- ld hl, wChannelSoundIDs + Ch5
- xor a
- or [hl]
- inc hl
- or [hl]
- inc hl
- inc hl
- or [hl]
- jr nz, .waitLoop
- pop hl
- ret
-
+INCLUDE "home/pathfinding.asm"
+INCLUDE "home/load_font.asm"
+INCLUDE "home/tilemap.asm"
+INCLUDE "home/delay.asm"
INCLUDE "home/names2.asm"
-
-GetItemPrice::
-; Stores item's price as BCD at hItemPrice (3 bytes)
-; Input: [wcf91] = item id
- ld a, [hLoadedROMBank]
- push af
- ld a, [wListMenuID]
- cp MOVESLISTMENU
- ld a, BANK(ItemPrices)
- jr nz, .ok
- ld a, $f ; hardcoded Bank
-.ok
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- ld hl, wItemPrices
- ld a, [hli]
- ld h, [hl]
- ld l, a
- ld a, [wcf91] ; a contains item id
- cp HM01
- jr nc, .getTMPrice
- ld bc, $3
-.loop
- add hl, bc
- dec a
- jr nz, .loop
- dec hl
- ld a, [hld]
- ld [hItemPrice + 2], a
- ld a, [hld]
- ld [hItemPrice + 1], a
- ld a, [hl]
- ld [hItemPrice], a
- jr .done
-.getTMPrice
- ld a, BANK(GetMachinePrice)
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- call GetMachinePrice
-.done
- ld de, hItemPrice
- pop af
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- ret
-
-; copies a string from [de] to [wcf4b]
-CopyStringToCF4B::
- ld hl, wcf4b
- ; fall through
-
-; copies a string from [de] to [hl]
-CopyString::
- ld a, [de]
- inc de
- ld [hli], a
- cp "@"
- jr nz, CopyString
- ret
-
-; this function is used when lower button sensitivity is wanted (e.g. menus)
-; OUTPUT: [hJoy5] = pressed buttons in usual format
-; there are two flags that control its functionality, [hJoy6] and [hJoy7]
-; there are essentially three modes of operation
-; 1. Get newly pressed buttons only
-; ([hJoy7] == 0, [hJoy6] == any)
-; Just copies [hJoyPressed] to [hJoy5].
-; 2. Get currently pressed buttons at low sample rate with delay
-; ([hJoy7] == 1, [hJoy6] != 0)
-; If the user holds down buttons for more than half a second,
-; report buttons as being pressed up to 12 times per second thereafter.
-; If the user holds down buttons for less than half a second,
-; report only one button press.
-; 3. Same as 2, but report no buttons as pressed if A or B is held down.
-; ([hJoy7] == 1, [hJoy6] == 0)
-JoypadLowSensitivity::
- call Joypad
- ld a, [hJoy7] ; flag
- and a ; get all currently pressed buttons or only newly pressed buttons?
- ld a, [hJoyPressed] ; newly pressed buttons
- jr z, .storeButtonState
- ld a, [hJoyHeld] ; all currently pressed buttons
-.storeButtonState
- ld [hJoy5], a
- ld a, [hJoyPressed] ; newly pressed buttons
- and a ; have any buttons been newly pressed since last check?
- jr z, .noNewlyPressedButtons
-.newlyPressedButtons
- ld a, 30 ; half a second delay
- ld [hFrameCounter], a
- ret
-.noNewlyPressedButtons
- ld a, [hFrameCounter]
- and a ; is the delay over?
- jr z, .delayOver
-.delayNotOver
- xor a
- ld [hJoy5], a ; report no buttons as pressed
- ret
-.delayOver
-; if [hJoy6] = 0 and A or B is pressed, report no buttons as pressed
- ld a, [hJoyHeld]
- and A_BUTTON | B_BUTTON
- jr z, .setShortDelay
- ld a, [hJoy6] ; flag
- and a
- jr nz, .setShortDelay
- xor a
- ld [hJoy5], a
-.setShortDelay
- ld a, 5 ; 1/12 of a second delay
- ld [hFrameCounter], a
- ret
-
-WaitForTextScrollButtonPress::
- ld a, [hDownArrowBlinkCount1]
- push af
- ld a, [hDownArrowBlinkCount2]
- push af
- xor a
- ld [hDownArrowBlinkCount1], a
- ld a, $6
- ld [hDownArrowBlinkCount2], a
-.loop
- push hl
- ld a, [wTownMapSpriteBlinkingEnabled]
- and a
- jr z, .skipAnimation
- call TownMapSpriteBlinkingAnimation
-.skipAnimation
- coord hl, 18, 16
- call HandleDownArrowBlinkTiming
- pop hl
- call JoypadLowSensitivity
- predef CableClub_Run
- ld a, [hJoy5]
- and A_BUTTON | B_BUTTON
- jr z, .loop
- pop af
- ld [hDownArrowBlinkCount2], a
- pop af
- ld [hDownArrowBlinkCount1], a
- ret
-
-; (unless in link battle) waits for A or B being pressed and outputs the scrolling sound effect
-ManualTextScroll::
- ld a, [wLinkState]
- cp LINK_STATE_BATTLING
- jr z, .inLinkBattle
- call WaitForTextScrollButtonPress
- ld a, SFX_PRESS_AB
- jp PlaySound
-.inLinkBattle
- ld c, 65
- jp DelayFrames
-
-; function to do multiplication
-; all values are big endian
-; INPUT
-; FF96-FF98 = multiplicand
-; FF99 = multiplier
-; OUTPUT
-; FF95-FF98 = product
-Multiply::
- push hl
- push bc
- callab _Multiply
- pop bc
- pop hl
- ret
-
-; function to do division
-; all values are big endian
-; INPUT
-; FF95-FF98 = dividend
-; FF99 = divisor
-; b = number of bytes in the dividend (starting from FF95)
-; OUTPUT
-; FF95-FF98 = quotient
-; FF99 = remainder
-Divide::
- push hl
- push de
- push bc
- ld a, [hLoadedROMBank]
- push af
- ld a, BANK(_Divide)
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- call _Divide
- pop af
- ld [hLoadedROMBank], a
- ld [MBC1RomBank], a
- pop bc
- pop de
- pop hl
- ret
-
-; This function is used to wait a short period after printing a letter to the
-; screen unless the player presses the A/B button or the delay is turned off
-; through the [wd730] or [wLetterPrintingDelayFlags] flags.
-PrintLetterDelay::
- ld a, [wd730]
- bit 6, a
- ret nz
- ld a, [wLetterPrintingDelayFlags]
- bit 1, a
- ret z
- push hl
- push de
- push bc
- ld a, [wLetterPrintingDelayFlags]
- bit 0, a
- jr z, .waitOneFrame
- ld a, [wOptions]
- and $f
- ld [hFrameCounter], a
- jr .checkButtons
-.waitOneFrame
- ld a, 1
- ld [hFrameCounter], a
-.checkButtons
- call Joypad
- ld a, [hJoyHeld]
-.checkAButton
- bit 0, a ; is the A button pressed?
- jr z, .checkBButton
- jr .endWait
-.checkBButton
- bit 1, a ; is the B button pressed?
- jr z, .buttonsNotPressed
-.endWait
- call DelayFrame
- jr .done
-.buttonsNotPressed ; if neither A nor B is pressed
- ld a, [hFrameCounter]
- and a
- jr nz, .checkButtons
-.done
- pop bc
- pop de
- pop hl
- ret
-
-; Copies [hl, bc) to [de, de + bc - hl).
-; In other words, the source data is from hl up to but not including bc,
-; and the destination is de.
-CopyDataUntil::
- ld a, [hli]
- ld [de], a
- inc de
- ld a, h
- cp b
- jr nz, CopyDataUntil
- ld a, l
- cp c
- jr nz, CopyDataUntil
- ret
-
+INCLUDE "home/item_price.asm"
+INCLUDE "home/copy_string.asm"
+INCLUDE "home/joypad2.asm"
+INCLUDE "home/math.asm"
+INCLUDE "home/print_text.asm"
INCLUDE "home/move_mon.asm"
-
-; skips a text entries, each of size NAME_LENGTH (like trainer name, OT name, rival name, ...)
-; hl: base pointer, will be incremented by NAME_LENGTH * a
-SkipFixedLengthTextEntries::
- and a
- ret z
- ld bc, NAME_LENGTH
-.skipLoop
- add hl, bc
- dec a
- jr nz, .skipLoop
- ret
-
-AddNTimes::
-; add bc to hl a times
- and a
- ret z
-.loop
- add hl, bc
- dec a
- jr nz, .loop
- ret
-
-; Compare strings, c bytes in length, at de and hl.
-; Often used to compare big endian numbers in battle calculations.
-StringCmp::
- ld a, [de]
- cp [hl]
- ret nz
- inc de
- inc hl
- dec c
- jr nz, StringCmp
- ret
-
-; INPUT:
-; a = oam block index (each block is 4 oam entries)
-; b = Y coordinate of upper left corner of sprite
-; c = X coordinate of upper left corner of sprite
-; de = base address of 4 tile number and attribute pairs
-WriteOAMBlock::
- ld h, wOAMBuffer / $100
- swap a ; multiply by 16
- ld l, a
- call .writeOneEntry ; upper left
- push bc
- ld a, 8
- add c
- ld c, a
- call .writeOneEntry ; upper right
- pop bc
- ld a, 8
- add b
- ld b, a
- call .writeOneEntry ; lower left
- ld a, 8
- add c
- ld c, a
- ; lower right
-.writeOneEntry
- ld [hl], b ; Y coordinate
- inc hl
- ld [hl], c ; X coordinate
- inc hl
- ld a, [de] ; tile number
- inc de
- ld [hli], a
- ld a, [de] ; attribute
- inc de
- ld [hli], a
- ret
-
-HandleMenuInput::
- xor a
- ld [wPartyMenuAnimMonEnabled], a
-
-HandleMenuInput_::
- ld a, [hDownArrowBlinkCount1]
- push af
- ld a, [hDownArrowBlinkCount2]
- push af ; save existing values on stack
- xor a
- ld [hDownArrowBlinkCount1], a ; blinking down arrow timing value 1
- ld a, 6
- ld [hDownArrowBlinkCount2], a ; blinking down arrow timing value 2
-.loop1
- xor a
- ld [wAnimCounter], a ; counter for pokemon shaking animation
- call PlaceMenuCursor
- call Delay3
-.loop2
- push hl
- ld a, [wPartyMenuAnimMonEnabled]
- and a ; is it a pokemon selection menu?
- jr z, .getJoypadState
- callba AnimatePartyMon ; shake mini sprite of selected pokemon
-.getJoypadState
- pop hl
- call JoypadLowSensitivity
- ld a, [hJoy5]
- and a ; was a key pressed?
- jr nz, .keyPressed
- push hl
- coord hl, 18, 11 ; coordinates of blinking down arrow in some menus
- call HandleDownArrowBlinkTiming ; blink down arrow (if any)
- pop hl
- ld a, [wMenuJoypadPollCount]
- dec a
- jr z, .giveUpWaiting
- jr .loop2
-.giveUpWaiting
-; if a key wasn't pressed within the specified number of checks
- pop af
- ld [hDownArrowBlinkCount2], a
- pop af
- ld [hDownArrowBlinkCount1], a ; restore previous values
- xor a
- ld [wMenuWrappingEnabled], a ; disable menu wrapping
- ret
-.keyPressed
- xor a
- ld [wCheckFor180DegreeTurn], a
- ld a, [hJoy5]
- ld b, a
- bit 6, a ; pressed Up key?
- jr z, .checkIfDownPressed
-.upPressed
- ld a, [wCurrentMenuItem] ; selected menu item
- and a ; already at the top of the menu?
- jr z, .alreadyAtTop
-.notAtTop
- dec a
- ld [wCurrentMenuItem], a ; move selected menu item up one space
- jr .checkOtherKeys
-.alreadyAtTop
- ld a, [wMenuWrappingEnabled]
- and a ; is wrapping around enabled?
- jr z, .noWrappingAround
- ld a, [wMaxMenuItem]
- ld [wCurrentMenuItem], a ; wrap to the bottom of the menu
- jr .checkOtherKeys
-.checkIfDownPressed
- bit 7, a
- jr z, .checkOtherKeys
-.downPressed
- ld a, [wCurrentMenuItem]
- inc a
- ld c, a
- ld a, [wMaxMenuItem]
- cp c
- jr nc, .notAtBottom
-.alreadyAtBottom
- ld a, [wMenuWrappingEnabled]
- and a ; is wrapping around enabled?
- jr z, .noWrappingAround
- ld c, $00 ; wrap from bottom to top
-.notAtBottom
- ld a, c
- ld [wCurrentMenuItem], a
-.checkOtherKeys
- ld a, [wMenuWatchedKeys]
- and b ; does the menu care about any of the pressed keys?
- jp z, .loop1
-.checkIfAButtonOrBButtonPressed
- ld a, [hJoy5]
- and A_BUTTON | B_BUTTON
- jr z, .skipPlayingSound
-.AButtonOrBButtonPressed
- push hl
- ld hl, wFlags_0xcd60
- bit 5, [hl]
- pop hl
- jr nz, .skipPlayingSound
- ld a, SFX_PRESS_AB
- call PlaySound
-.skipPlayingSound
- pop af
- ld [hDownArrowBlinkCount2], a
- pop af
- ld [hDownArrowBlinkCount1], a ; restore previous values
- xor a
- ld [wMenuWrappingEnabled], a ; disable menu wrapping
- ld a, [hJoy5]
- ret
-.noWrappingAround
- ld a, [wMenuWatchMovingOutOfBounds]
- and a ; should we return if the user tried to go past the top or bottom?
- jr z, .checkOtherKeys
- jr .checkIfAButtonOrBButtonPressed
-
-PlaceMenuCursor::
- ld a, [wTopMenuItemY]
- and a ; is the y coordinate 0?
- jr z, .adjustForXCoord
- coord hl, 0, 0
- ld bc, SCREEN_WIDTH
-.topMenuItemLoop
- add hl, bc
- dec a
- jr nz, .topMenuItemLoop
-.adjustForXCoord
- ld a, [wTopMenuItemX]
- ld b, 0
- ld c, a
- add hl, bc
- push hl
- ld a, [wLastMenuItem]
- and a ; was the previous menu id 0?
- jr z, .checkForArrow1
- push af
- ld a, [hFlagsFFF6]
- bit 1, a ; is the menu double spaced?
- jr z, .doubleSpaced1
- ld bc, 20
- jr .getOldMenuItemScreenPosition
-.doubleSpaced1
- ld bc, 40
-.getOldMenuItemScreenPosition
- pop af
-.oldMenuItemLoop
- add hl, bc
- dec a
- jr nz, .oldMenuItemLoop
-.checkForArrow1
- ld a, [hl]
- cp "▶" ; was an arrow next to the previously selected menu item?
- jr nz, .skipClearingArrow
-.clearArrow
- ld a, [wTileBehindCursor]
- ld [hl], a
-.skipClearingArrow
- pop hl
- ld a, [wCurrentMenuItem]
- and a
- jr z, .checkForArrow2
- push af
- ld a, [hFlagsFFF6]
- bit 1, a ; is the menu double spaced?
- jr z, .doubleSpaced2
- ld bc, 20
- jr .getCurrentMenuItemScreenPosition
-.doubleSpaced2
- ld bc, 40
-.getCurrentMenuItemScreenPosition
- pop af
-.currentMenuItemLoop
- add hl, bc
- dec a
- jr nz, .currentMenuItemLoop
-.checkForArrow2
- ld a, [hl]
- cp "▶" ; has the right arrow already been placed?
- jr z, .skipSavingTile ; if so, don't lose the saved tile
- ld [wTileBehindCursor], a ; save tile before overwriting with right arrow
-.skipSavingTile
- ld a, "▶" ; place right arrow
- ld [hl], a
- ld a, l
- ld [wMenuCursorLocation], a
- ld a, h
- ld [wMenuCursorLocation + 1], a
- ld a, [wCurrentMenuItem]
- ld [wLastMenuItem], a
- ret
-
-; This is used to mark a menu cursor other than the one currently being
-; manipulated. In the case of submenus, this is used to show the location of
-; the menu cursor in the parent menu. In the case of swapping items in list,
-; this is used to mark the item that was first chosen to be swapped.
-PlaceUnfilledArrowMenuCursor::
- ld b, a
- ld a, [wMenuCursorLocation]
- ld l, a
- ld a, [wMenuCursorLocation + 1]
- ld h, a
- ld [hl], $ec ; outline of right arrow
- ld a, b
- ret
-
-; Replaces the menu cursor with a blank space.
-EraseMenuCursor::
- ld a, [wMenuCursorLocation]
- ld l, a
- ld a, [wMenuCursorLocation + 1]
- ld h, a
- ld [hl], " "
- ret
-
-; This toggles a blinking down arrow at hl on and off after a delay has passed.
-; This is often called even when no blinking is occurring.
-; The reason is that most functions that call this initialize hDownArrowBlinkCount1 to 0.
-; The effect is that if the tile at hl is initialized with a down arrow,
-; this function will toggle that down arrow on and off, but if the tile isn't
-; initialized with a down arrow, this function does nothing.
-; That allows this to be called without worrying about if a down arrow should
-; be blinking.
-HandleDownArrowBlinkTiming::
- ld a, [hl]
- ld b, a
- ld a, "▼"
- cp b
- jr nz, .downArrowOff
-.downArrowOn
- ld a, [hDownArrowBlinkCount1]
- dec a
- ld [hDownArrowBlinkCount1], a
- ret nz
- ld a, [hDownArrowBlinkCount2]
- dec a
- ld [hDownArrowBlinkCount2], a
- ret nz
- ld a, " "
- ld [hl], a
- ld a, $ff
- ld [hDownArrowBlinkCount1], a
- ld a, $06
- ld [hDownArrowBlinkCount2], a
- ret
-.downArrowOff
- ld a, [hDownArrowBlinkCount1]
- and a
- ret z
- dec a
- ld [hDownArrowBlinkCount1], a
- ret nz
- dec a
- ld [hDownArrowBlinkCount1], a
- ld a, [hDownArrowBlinkCount2]
- dec a
- ld [hDownArrowBlinkCount2], a
- ret nz
- ld a, $06
- ld [hDownArrowBlinkCount2], a
- ld a, "▼"
- ld [hl], a
- ret
-
-; The following code either enables or disables the automatic drawing of
-; text boxes by DisplayTextID. Both functions cause DisplayTextID to wait
-; for a button press after displaying text (unless [wEnteringCableClub] is set).
-
-EnableAutoTextBoxDrawing::
- xor a
- jr AutoTextBoxDrawingCommon
-
-DisableAutoTextBoxDrawing::
- ld a, $01
-
-AutoTextBoxDrawingCommon::
- ld [wAutoTextBoxDrawingControl], a
- xor a
- ld [wDoNotWaitForButtonPressAfterDisplayingText], a ; make DisplayTextID wait for button press
- ret
-
-PrintText::
-; Print text hl at (1, 14).
- push hl
- ld a, MESSAGE_BOX
- ld [wTextBoxID], a
- call DisplayTextBoxID
- call UpdateSprites
- call Delay3
- pop hl
-PrintText_NoCreatingTextBox::
- coord bc, 1, 14
- jp TextCommandProcessor
-
+INCLUDE "home/array.asm"
+INCLUDE "home/compare.asm"
+INCLUDE "home/oam.asm"
+INCLUDE "home/window.asm"
INCLUDE "home/print_num.asm"
-
-CallFunctionInTable::
-; 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
- push de
- jp hl
-.returnAddress
- pop bc
- pop de
- pop hl
- ret
-
-IsInArray::
-; Search an array at hl for the value in a.
-; Entry size is de bytes.
-; Return count b and carry if found.
- ld b, 0
-
-IsInRestOfArray::
- ld c, a
-.loop
- ld a, [hl]
- cp -1
- jr z, .notfound
- cp c
- jr z, .found
- inc b
- add hl, de
- jr .loop
-
-.notfound
- and a
- ret
-
-.found
- scf
- ret
-
-RestoreScreenTilesAndReloadTilePatterns::
- call ClearSprites
- ld a, $1
- ld [wUpdateSpritesEnabled], a
- call ReloadMapSpriteTilePatterns
- call LoadScreenTilesFromBuffer2
- call LoadTextBoxTilePatterns
- call RunDefaultPaletteCommand
- jr Delay3
-
-GBPalWhiteOutWithDelay3::
- call GBPalWhiteOut
-
-Delay3::
-; The bg map is updated each frame in thirds.
-; Wait three frames to let the bg map fully update.
- ld c, 3
- jp DelayFrames
-
-GBPalNormal::
-; Reset BGP and OBP0.
- ld a, %11100100 ; 3210
- ld [rBGP], a
- ld a, %11010000 ; 3100
- ld [rOBP0], a
- ret
-
-GBPalWhiteOut::
-; White out all palettes.
- xor a
- ld [rBGP], a
- ld [rOBP0], a
- ld [rOBP1], a
- ret
-
-RunDefaultPaletteCommand::
- ld b, SET_PAL_DEFAULT
-RunPaletteCommand::
- ld a, [wOnSGB]
- and a
- ret z
- predef_jump _RunPaletteCommand
-
-GetHealthBarColor::
-; Return at hl the palette of
-; an HP bar e pixels long.
- ld a, e
- cp 27
- ld d, 0 ; green
- jr nc, .gotColor
- cp 10
- inc d ; yellow
- jr nc, .gotColor
- inc d ; red
-.gotColor
- ld [hl], d
- ret
-
-; Copy the current map's sprites' tile patterns to VRAM again after they have
-; been overwritten by other tile patterns.
-ReloadMapSpriteTilePatterns::
- ld hl, wFontLoaded
- ld a, [hl]
- push af
- res 0, [hl]
- push hl
- xor a
- ld [wSpriteSetID], a
- call DisableLCD
- callba InitMapSprites
- call EnableLCD
- pop hl
- pop af
- ld [hl], a
- call LoadPlayerSpriteGraphics
- call LoadFontTilePatterns
- jp UpdateSprites
-
-GiveItem::
-; Give player quantity c of item b,
-; and copy the item's name to wcf4b.
-; Return carry on success.
- ld a, b
- ld [wd11e], a
- ld [wcf91], a
- ld a, c
- ld [wItemQuantity], a
- ld hl, wNumBagItems
- call AddItemToInventory
- ret nc
- call GetItemName
- call CopyStringToCF4B
- scf
- ret
-
-GivePokemon::
-; Give the player monster b at level c.
- ld a, b
- ld [wcf91], a
- ld a, c
- ld [wCurEnemyLVL], a
- xor a ; PLAYER_PARTY_DATA
- ld [wMonDataLocation], a
- jpba _GivePokemon
-
-Random::
-; Return a random number in a.
-; For battles, use BattleRandom.
- push hl
- push de
- push bc
- callba Random_
- ld a, [hRandomAdd]
- pop bc
- pop de
- pop hl
- ret
-
+INCLUDE "home/array2.asm"
+INCLUDE "home/palettes.asm"
+INCLUDE "home/reload_sprites.asm"
+INCLUDE "home/give.asm"
+INCLUDE "home/random.asm"
INCLUDE "home/predef.asm"
-
-UpdateCinnabarGymGateTileBlocks::
- jpba UpdateCinnabarGymGateTileBlocks_
-
-CheckForHiddenObjectOrBookshelfOrCardKeyDoor::
- ld a, [hLoadedROMBank]
- push af
- ld a, [hJoyHeld]
- bit 0, a ; A button
- jr z, .nothingFound
-; A button is pressed
- ld a, BANK(CheckForHiddenObject)
- ld [MBC1RomBank], a
- ld [hLoadedROMBank], a
- call CheckForHiddenObject
- ld a, [hDidntFindAnyHiddenObject]
- and a
- jr nz, .hiddenObjectNotFound
- ld a, [wHiddenObjectFunctionRomBank]
- ld [MBC1RomBank], a
- ld [hLoadedROMBank], a
- ld de, .returnAddress
- push de
- jp hl
-.returnAddress
- xor a
- jr .done
-.hiddenObjectNotFound
- callba PrintBookshelfText
- ld a, [hFFDB]
- and a
- jr z, .done
-.nothingFound
- ld a, $ff
-.done
- ld [hItemAlreadyFound], a
- pop af
- ld [MBC1RomBank], a
- ld [hLoadedROMBank], a
- ret
-
-PrintPredefTextID::
- ld [hSpriteIndexOrTextID], a
- ld hl, TextPredefs
- call SetMapTextPointer
- ld hl, wTextPredefFlag
- set 0, [hl]
- call DisplayTextID
-
-RestoreMapTextPointer::
- ld hl, wMapTextPtr
- ld a, [hSavedMapTextPtr]
- ld [hli], a
- ld a, [hSavedMapTextPtr + 1]
- ld [hl], a
- ret
-
-SetMapTextPointer::
- ld a, [wMapTextPtr]
- ld [hSavedMapTextPtr], a
- ld a, [wMapTextPtr + 1]
- ld [hSavedMapTextPtr + 1], a
- ld a, l
- ld [wMapTextPtr], a
- ld a, h
- ld [wMapTextPtr + 1], a
- ret
-
-INCLUDE "data/text_predef_pointers.asm"
+INCLUDE "home/hidden_objects.asm"
+INCLUDE "home/predef_text.asm"
--- /dev/null
+++ b/home/array.asm
@@ -1,0 +1,21 @@
+; skips a text entries, each of size NAME_LENGTH (like trainer name, OT name, rival name, ...)
+; hl: base pointer, will be incremented by NAME_LENGTH * a
+SkipFixedLengthTextEntries::
+ and a
+ ret z
+ ld bc, NAME_LENGTH
+.skipLoop
+ add hl, bc
+ dec a
+ jr nz, .skipLoop
+ ret
+
+AddNTimes::
+; add bc to hl a times
+ and a
+ ret z
+.loop
+ add hl, bc
+ dec a
+ jr nz, .loop
+ ret
--- /dev/null
+++ b/home/array2.asm
@@ -1,0 +1,47 @@
+CallFunctionInTable::
+; 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
+ push de
+ jp hl
+.returnAddress
+ pop bc
+ pop de
+ pop hl
+ ret
+
+IsInArray::
+; Search an array at hl for the value in a.
+; Entry size is de bytes.
+; Return count b and carry if found.
+ ld b, 0
+
+IsInRestOfArray::
+ ld c, a
+.loop
+ ld a, [hl]
+ cp -1
+ jr z, .notfound
+ cp c
+ jr z, .found
+ inc b
+ add hl, de
+ jr .loop
+
+.notfound
+ and a
+ ret
+
+.found
+ scf
+ ret
--- a/home/audio.asm
+++ b/home/audio.asm
@@ -170,10 +170,10 @@
.noFadeOut
xor a
ld [wNewSoundID], a
- ld a, [hLoadedROMBank]
- ld [hSavedROMBank], a
+ ldh a, [hLoadedROMBank]
+ ldh [hSavedROMBank], a
ld a, [wAudioROMBank]
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
cp BANK(Audio1_PlaySound)
jr nz, .checkForAudio2
@@ -197,8 +197,8 @@
call Audio3_PlaySound
.next2
- ld a, [hSavedROMBank]
- ld [hLoadedROMBank], a
+ ldh a, [hSavedROMBank]
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
jr .done
--- a/home/bankswitch.asm
+++ b/home/bankswitch.asm
@@ -2,10 +2,10 @@
; switches to bank # in a
; Only use this when in the home bank!
ld [wBankswitchHomeTemp], a
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
ld [wBankswitchHomeSavedROMBank], a
ld a, [wBankswitchHomeTemp]
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
@@ -12,7 +12,7 @@
BankswitchBack::
; returns from BankswitchHome
ld a, [wBankswitchHomeSavedROMBank]
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
@@ -19,10 +19,10 @@
Bankswitch::
; self-contained bankswitch, use this when not in the home bank
; switches to the bank in b
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, b
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld bc, .Return
push bc
@@ -30,6 +30,6 @@
.Return
pop bc
ld a, b
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
--- /dev/null
+++ b/home/compare.asm
@@ -1,0 +1,11 @@
+; Compare strings, c bytes in length, at de and hl.
+; Often used to compare big endian numbers in battle calculations.
+StringCmp::
+ ld a, [de]
+ cp [hl]
+ ret nz
+ inc de
+ inc hl
+ dec c
+ jr nz, StringCmp
+ ret
--- a/home/copy.asm
+++ b/home/copy.asm
@@ -1,14 +1,14 @@
FarCopyData::
; Copy bc bytes from a:hl to de.
ld [wBuffer], a
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, [wBuffer]
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call CopyData
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
--- a/home/copy2.asm
+++ b/home/copy2.asm
@@ -1,25 +1,25 @@
FarCopyData2::
; Identical to FarCopyData, but uses hROMBankTemp
; as temp space instead of wBuffer.
- ld [hROMBankTemp], a
- ld a, [hLoadedROMBank]
+ ldh [hROMBankTemp], a
+ ldh a, [hLoadedROMBank]
push af
- ld a, [hROMBankTemp]
- ld [hLoadedROMBank], a
+ ldh a, [hROMBankTemp]
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call CopyData
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
FarCopyData3::
; Copy bc bytes from a:de to hl.
- ld [hROMBankTemp], a
- ld a, [hLoadedROMBank]
+ ldh [hROMBankTemp], a
+ ldh a, [hLoadedROMBank]
push af
- ld a, [hROMBankTemp]
- ld [hLoadedROMBank], a
+ ldh a, [hROMBankTemp]
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
push hl
push de
@@ -31,7 +31,7 @@
pop de
pop hl
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
@@ -38,11 +38,11 @@
FarCopyDataDouble::
; Expand bc bytes of 1bpp image data
; from a:hl to 2bpp data at de.
- ld [hROMBankTemp], a
- ld a, [hLoadedROMBank]
+ ldh [hROMBankTemp], a
+ ldh a, [hLoadedROMBank]
push af
- ld a, [hROMBankTemp]
- ld [hLoadedROMBank], a
+ ldh a, [hROMBankTemp]
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
.loop
ld a, [hli]
@@ -55,7 +55,7 @@
or b
jr nz, .loop
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
@@ -64,27 +64,27 @@
; tiles from b:de to hl, 8 tiles at a time.
; This takes c/8 frames.
- ld a, [hAutoBGTransferEnabled]
+ ldh a, [hAutoBGTransferEnabled]
push af
xor a ; disable auto-transfer while copying
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
- ld a, [hLoadedROMBank]
- ld [hROMBankTemp], a
+ ldh a, [hLoadedROMBank]
+ ldh [hROMBankTemp], a
ld a, b
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld a, e
- ld [hVBlankCopySource], a
+ ldh [hVBlankCopySource], a
ld a, d
- ld [hVBlankCopySource + 1], a
+ ldh [hVBlankCopySource + 1], a
ld a, l
- ld [hVBlankCopyDest], a
+ ldh [hVBlankCopyDest], a
ld a, h
- ld [hVBlankCopyDest + 1], a
+ ldh [hVBlankCopyDest + 1], a
.loop
ld a, c
@@ -92,18 +92,18 @@
jr nc, .keepgoing
.done
- ld [hVBlankCopySize], a
+ ldh [hVBlankCopySize], a
call DelayFrame
- ld a, [hROMBankTemp]
- ld [hLoadedROMBank], a
+ ldh a, [hROMBankTemp]
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
pop af
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ret
.keepgoing
ld a, 8
- ld [hVBlankCopySize], a
+ ldh [hVBlankCopySize], a
call DelayFrame
ld a, c
sub 8
@@ -114,26 +114,26 @@
; Wait for the next VBlank, then copy c 1bpp
; tiles from b:de to hl, 8 tiles at a time.
; This takes c/8 frames.
- ld a, [hAutoBGTransferEnabled]
+ ldh a, [hAutoBGTransferEnabled]
push af
xor a ; disable auto-transfer while copying
- ld [hAutoBGTransferEnabled], a
- ld a, [hLoadedROMBank]
- ld [hROMBankTemp], a
+ ldh [hAutoBGTransferEnabled], a
+ ldh a, [hLoadedROMBank]
+ ldh [hROMBankTemp], a
ld a, b
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld a, e
- ld [hVBlankCopyDoubleSource], a
+ ldh [hVBlankCopyDoubleSource], a
ld a, d
- ld [hVBlankCopyDoubleSource + 1], a
+ ldh [hVBlankCopyDoubleSource + 1], a
ld a, l
- ld [hVBlankCopyDoubleDest], a
+ ldh [hVBlankCopyDoubleDest], a
ld a, h
- ld [hVBlankCopyDoubleDest + 1], a
+ ldh [hVBlankCopyDoubleDest + 1], a
.loop
ld a, c
@@ -141,18 +141,18 @@
jr nc, .keepgoing
.done
- ld [hVBlankCopyDoubleSize], a
+ ldh [hVBlankCopyDoubleSize], a
call DelayFrame
- ld a, [hROMBankTemp]
- ld [hLoadedROMBank], a
+ ldh a, [hROMBankTemp]
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
pop af
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ret
.keepgoing
ld a, 8
- ld [hVBlankCopyDoubleSize], a
+ ldh [hVBlankCopyDoubleSize], a
call DelayFrame
ld a, c
sub 8
@@ -184,32 +184,32 @@
ld c, 6
ld hl, $600 * 0
- coord de, 0, 6 * 0
+ decoord 0, 6 * 0
call .setup
call DelayFrame
ld hl, $600 * 1
- coord de, 0, 6 * 1
+ decoord 0, 6 * 1
call .setup
call DelayFrame
ld hl, $600 * 2
- coord de, 0, 6 * 2
+ decoord 0, 6 * 2
call .setup
jp DelayFrame
.setup
ld a, d
- ld [hVBlankCopyBGSource+1], a
+ ldh [hVBlankCopyBGSource+1], a
call GetRowColAddressBgMap
ld a, l
- ld [hVBlankCopyBGDest], a
+ ldh [hVBlankCopyBGDest], a
ld a, h
- ld [hVBlankCopyBGDest+1], a
+ ldh [hVBlankCopyBGDest+1], a
ld a, c
- ld [hVBlankCopyBGNumRows], a
+ ldh [hVBlankCopyBGNumRows], a
ld a, e
- ld [hVBlankCopyBGSource], a
+ ldh [hVBlankCopyBGSource], a
ret
ClearScreen::
@@ -217,7 +217,7 @@
; for the bg map to update.
ld bc, 20 * 18
inc b
- coord hl, 0, 0
+ hlcoord 0, 0
ld a, " "
.loop
ld [hli], a
--- /dev/null
+++ b/home/copy_string.asm
@@ -1,0 +1,13 @@
+; copies a string from [de] to [wcf4b]
+CopyStringToCF4B::
+ ld hl, wcf4b
+ ; fall through
+
+; copies a string from [de] to [hl]
+CopyString::
+ ld a, [de]
+ inc de
+ ld [hli], a
+ cp "@"
+ jr nz, CopyString
+ ret
--- /dev/null
+++ b/home/count_set_bits.asm
@@ -1,0 +1,24 @@
+; function to count how many bits are set in a string of bytes
+; INPUT:
+; hl = address of string of bytes
+; b = length of string of bytes
+; OUTPUT:
+; [wNumSetBits] = number of set bits
+CountSetBits::
+ ld c, 0
+.loop
+ ld a, [hli]
+ ld e, a
+ ld d, 8
+.innerLoop ; count how many bits are set in the current byte
+ srl e
+ ld a, 0
+ adc c
+ ld c, a
+ dec d
+ jr nz, .innerLoop
+ dec b
+ jr nz, .loop
+ ld a, c
+ ld [wNumSetBits], a
+ ret
--- /dev/null
+++ b/home/delay.asm
@@ -1,0 +1,31 @@
+DelayFrames::
+; wait c frames
+ call DelayFrame
+ dec c
+ jr nz, DelayFrames
+ ret
+
+PlaySoundWaitForCurrent::
+ push af
+ call WaitForSoundToFinish
+ pop af
+ jp PlaySound
+
+; Wait for sound to finish playing
+WaitForSoundToFinish::
+ ld a, [wLowHealthAlarm]
+ and $80
+ ret nz
+ push hl
+.waitLoop
+ ld hl, wChannelSoundIDs + Ch5
+ xor a
+ or [hl]
+ inc hl
+ or [hl]
+ inc hl
+ inc hl
+ or [hl]
+ jr nz, .waitLoop
+ pop hl
+ ret
--- a/home/fade.asm
+++ b/home/fade.asm
@@ -11,11 +11,11 @@
dec h
.ok
ld a, [hli]
- ld [rBGP], a
+ ldh [rBGP], a
ld a, [hli]
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, [hli]
- ld [rOBP1], a
+ ldh [rOBP1], a
ret
GBFadeInFromBlack::
@@ -29,11 +29,11 @@
GBFadeIncCommon:
ld a, [hli]
- ld [rBGP], a
+ ldh [rBGP], a
ld a, [hli]
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, [hli]
- ld [rOBP1], a
+ ldh [rOBP1], a
ld c, 8
call DelayFrames
dec b
@@ -51,11 +51,11 @@
GBFadeDecCommon:
ld a, [hld]
- ld [rOBP1], a
+ ldh [rOBP1], a
ld a, [hld]
- ld [rOBP0], a
+ ldh [rOBP0], a
ld a, [hld]
- ld [rBGP], a
+ ldh [rBGP], a
ld c, 8
call DelayFrames
dec b
--- /dev/null
+++ b/home/fade_audio.asm
@@ -1,0 +1,48 @@
+FadeOutAudio::
+ ld a, [wAudioFadeOutControl]
+ and a ; currently fading out audio?
+ jr nz, .fadingOut
+ ld a, [wd72c]
+ bit 1, a
+ ret nz
+ ld a, $77
+ ldh [rNR50], a
+ ret
+.fadingOut
+ ld a, [wAudioFadeOutCounter]
+ and a
+ jr z, .counterReachedZero
+ dec a
+ ld [wAudioFadeOutCounter], a
+ ret
+.counterReachedZero
+ ld a, [wAudioFadeOutCounterReloadValue]
+ ld [wAudioFadeOutCounter], a
+ ldh a, [rNR50]
+ and a ; has the volume reached 0?
+ jr z, .fadeOutComplete
+ ld b, a
+ and $f
+ dec a
+ ld c, a
+ ld a, b
+ and $f0
+ swap a
+ dec a
+ swap a
+ or c
+ ldh [rNR50], a
+ ret
+.fadeOutComplete
+ ld a, [wAudioFadeOutControl]
+ ld b, a
+ xor a
+ ld [wAudioFadeOutControl], a
+ ld a, SFX_STOP_ALL_MUSIC
+ ld [wNewSoundID], a
+ call PlaySound
+ ld a, [wAudioSavedROMBank]
+ ld [wAudioROMBank], a
+ ld a, b
+ ld [wNewSoundID], a
+ jp PlaySound
--- /dev/null
+++ b/home/give.asm
@@ -1,0 +1,26 @@
+GiveItem::
+; Give player quantity c of item b,
+; and copy the item's name to wcf4b.
+; Return carry on success.
+ ld a, b
+ ld [wd11e], a
+ ld [wcf91], a
+ ld a, c
+ ld [wItemQuantity], a
+ ld hl, wNumBagItems
+ call AddItemToInventory
+ ret nc
+ call GetItemName
+ call CopyStringToCF4B
+ scf
+ ret
+
+GivePokemon::
+; Give the player monster b at level c.
+ ld a, b
+ ld [wcf91], a
+ ld a, c
+ ld [wCurEnemyLVL], a
+ xor a ; PLAYER_PARTY_DATA
+ ld [wMonDataLocation], a
+ farjp _GivePokemon
--- /dev/null
+++ b/home/hidden_objects.asm
@@ -1,0 +1,39 @@
+UpdateCinnabarGymGateTileBlocks::
+ farjp UpdateCinnabarGymGateTileBlocks_
+
+CheckForHiddenObjectOrBookshelfOrCardKeyDoor::
+ ldh a, [hLoadedROMBank]
+ push af
+ ldh a, [hJoyHeld]
+ bit 0, a ; A button
+ jr z, .nothingFound
+; A button is pressed
+ ld a, BANK(CheckForHiddenObject)
+ ld [MBC1RomBank], a
+ ldh [hLoadedROMBank], a
+ call CheckForHiddenObject
+ ldh a, [hDidntFindAnyHiddenObject]
+ and a
+ jr nz, .hiddenObjectNotFound
+ ld a, [wHiddenObjectFunctionRomBank]
+ ld [MBC1RomBank], a
+ ldh [hLoadedROMBank], a
+ ld de, .returnAddress
+ push de
+ jp hl
+.returnAddress
+ xor a
+ jr .done
+.hiddenObjectNotFound
+ farcall PrintBookshelfText
+ ldh a, [hFFDB]
+ and a
+ jr z, .done
+.nothingFound
+ ld a, $ff
+.done
+ ldh [hItemAlreadyFound], a
+ pop af
+ ld [MBC1RomBank], a
+ ldh [hLoadedROMBank], a
+ ret
--- a/home/init.asm
+++ b/home/init.asm
@@ -21,22 +21,22 @@
di
xor a
- ld [rIF], a
- ld [rIE], a
- ld [rSCX], a
- ld [rSCY], a
- ld [rSB], a
- ld [rSC], a
- ld [rWX], a
- ld [rWY], a
- ld [rTMA], a
- ld [rTAC], a
- ld [rBGP], a
- ld [rOBP0], a
- ld [rOBP1], a
+ ldh [rIF], a
+ ldh [rIE], a
+ ldh [rSCX], a
+ ldh [rSCY], a
+ ldh [rSB], a
+ ldh [rSC], a
+ ldh [rWX], a
+ ldh [rWY], a
+ ldh [rTMA], a
+ ldh [rTAC], a
+ ldh [rBGP], a
+ ldh [rOBP0], a
+ ldh [rOBP1], a
ld a, rLCDC_ENABLE_MASK
- ld [rLCDC], a
+ ldh [rLCDC], a
call DisableLCD
ld sp, wStack
@@ -60,37 +60,37 @@
call ClearSprites
ld a, BANK(WriteDMACodeToHRAM)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call WriteDMACodeToHRAM
xor a
- ld [hTilesetType], a
- ld [rSTAT], a
- ld [hSCX], a
- ld [hSCY], a
- ld [rIF], a
+ ldh [hTilesetType], a
+ ldh [rSTAT], a
+ ldh [hSCX], a
+ ldh [hSCY], a
+ ldh [rIF], a
ld a, 1 << VBLANK + 1 << TIMER + 1 << SERIAL
- ld [rIE], a
+ ldh [rIE], a
ld a, 144 ; move the window off-screen
- ld [hWY], a
- ld [rWY], a
+ ldh [hWY], a
+ ldh [rWY], a
ld a, 7
- ld [rWX], a
+ ldh [rWX], a
ld a, CONNECTION_NOT_ESTABLISHED
- ld [hSerialConnectionStatus], a
+ ldh [hSerialConnectionStatus], a
- ld h, vBGMap0 / $100
+ ld h, HIGH(vBGMap0)
call ClearBgMap
- ld h, vBGMap1 / $100
+ ld h, HIGH(vBGMap1)
call ClearBgMap
ld a, rLCDC_DEFAULT
- ld [rLCDC], a
+ ldh [rLCDC], a
ld a, 16
- ld [hSoftReset], a
+ ldh [hSoftReset], a
call StopAllSounds
ei
@@ -101,9 +101,9 @@
ld [wAudioROMBank], a
ld [wAudioSavedROMBank], a
ld a, $9c
- ld [hAutoBGTransferDest + 1], a
+ ldh [hAutoBGTransferDest + 1], a
xor a
- ld [hAutoBGTransferDest], a
+ ldh [hAutoBGTransferDest], a
dec a
ld [wUpdateSpritesEnabled], a
@@ -114,7 +114,7 @@
call GBPalNormal
call ClearSprites
ld a, rLCDC_DEFAULT
- ld [rLCDC], a
+ ldh [rLCDC], a
jp SetDefaultNamesBeforeTitlescreen
--- /dev/null
+++ b/home/inventory.asm
@@ -1,0 +1,55 @@
+; subtracts the amount the player paid from their money
+; OUTPUT: carry = 0(success) or 1(fail because there is not enough money)
+SubtractAmountPaidFromMoney::
+ farjp SubtractAmountPaidFromMoney_
+
+; adds the amount the player sold to their money
+AddAmountSoldToMoney::
+ ld de, wPlayerMoney + 2
+ ld hl, hMoney + 2 ; total price of items
+ ld c, 3 ; length of money in bytes
+ predef AddBCDPredef ; add total price to money
+ ld a, MONEY_BOX
+ ld [wTextBoxID], a
+ call DisplayTextBoxID ; redraw money text box
+ ld a, SFX_PURCHASE
+ call PlaySoundWaitForCurrent
+ jp WaitForSoundToFinish
+
+; function to remove an item (in varying quantities) from the player's bag or PC box
+; INPUT:
+; HL = address of inventory (either wNumBagItems or wNumBoxItems)
+; [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
+ ret
+
+; function to add an item (in varying quantities) to the player's bag or PC box
+; INPUT:
+; HL = address of inventory (either wNumBagItems or wNumBoxItems)
+; [wcf91] = item ID
+; [wItemQuantity] = item quantity
+; 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
+ pop bc
+ ret
--- /dev/null
+++ b/home/item.asm
@@ -1,0 +1,49 @@
+; uses an item
+; UseItem is used with dummy items to perform certain other functions as well
+; INPUT:
+; [wcf91] = item ID
+; OUTPUT:
+; [wActionResultOrTookBattleTurn] = success
+; 00: unsuccessful
+; 01: successful
+; 02: not able to be used right now, no extra menu displayed (only certain items use this)
+UseItem::
+ farjp UseItem_
+
+; confirms the item toss and then tosses the item
+; INPUT:
+; hl = address of inventory (either wNumBagItems or wNumBoxItems)
+; [wcf91] = item ID
+; [wWhichPokemon] = index of item within inventory
+; [wItemQuantity] = quantity to toss
+; OUTPUT:
+; clears carry flag if the item is tossed, sets carry flag if not
+TossItem::
+ ldh a, [hLoadedROMBank]
+ push af
+ ld a, BANK(TossItem_)
+ ldh [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ call TossItem_
+ pop de
+ ld a, d
+ ldh [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ ret
+
+; checks if an item is a key item
+; INPUT:
+; [wcf91] = item ID
+; OUTPUT:
+; [wIsKeyItem] = result
+; 00: item is not key item
+; 01: item is key item
+IsKeyItem::
+ push hl
+ push de
+ push bc
+ farcall IsKeyItem_
+ pop bc
+ pop de
+ pop hl
+ ret
--- /dev/null
+++ b/home/item_price.asm
@@ -1,0 +1,44 @@
+GetItemPrice::
+; Stores item's price as BCD at hItemPrice (3 bytes)
+; Input: [wcf91] = item id
+ ldh a, [hLoadedROMBank]
+ push af
+ ld a, [wListMenuID]
+ cp MOVESLISTMENU
+ ld a, BANK(ItemPrices)
+ jr nz, .ok
+ ld a, $f ; hardcoded Bank
+.ok
+ ldh [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ ld hl, wItemPrices
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld a, [wcf91] ; a contains item id
+ cp HM01
+ jr nc, .getTMPrice
+ ld bc, $3
+.loop
+ add hl, bc
+ dec a
+ jr nz, .loop
+ dec hl
+ ld a, [hld]
+ ldh [hItemPrice + 2], a
+ ld a, [hld]
+ ldh [hItemPrice + 1], a
+ ld a, [hl]
+ ldh [hItemPrice], a
+ jr .done
+.getTMPrice
+ ld a, BANK(GetMachinePrice)
+ ldh [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ call GetMachinePrice
+.done
+ ld de, hItemPrice
+ pop af
+ ldh [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ ret
--- a/home/joypad.asm
+++ b/home/joypad.asm
@@ -6,9 +6,9 @@
ld a, 1 << 5 ; select direction keys
ld c, 0
- ld [rJOYP], a
+ ldh [rJOYP], a
REPT 6
- ld a, [rJOYP]
+ ldh a, [rJOYP]
ENDR
cpl
and %1111
@@ -16,18 +16,18 @@
ld b, a
ld a, 1 << 4 ; select button keys
- ld [rJOYP], a
+ ldh [rJOYP], a
REPT 10
- ld a, [rJOYP]
+ ldh a, [rJOYP]
ENDR
cpl
and %1111
or b
- ld [hJoyInput], a
+ ldh [hJoyInput], a
ld a, 1 << 4 + 1 << 5 ; deselect keys
- ld [rJOYP], a
+ ldh [rJOYP], a
ret
Joypad::
--- /dev/null
+++ b/home/joypad2.asm
@@ -1,0 +1,95 @@
+; this function is used when lower button sensitivity is wanted (e.g. menus)
+; OUTPUT: [hJoy5] = pressed buttons in usual format
+; there are two flags that control its functionality, [hJoy6] and [hJoy7]
+; there are essentially three modes of operation
+; 1. Get newly pressed buttons only
+; ([hJoy7] == 0, [hJoy6] == any)
+; Just copies [hJoyPressed] to [hJoy5].
+; 2. Get currently pressed buttons at low sample rate with delay
+; ([hJoy7] == 1, [hJoy6] != 0)
+; If the user holds down buttons for more than half a second,
+; report buttons as being pressed up to 12 times per second thereafter.
+; If the user holds down buttons for less than half a second,
+; report only one button press.
+; 3. Same as 2, but report no buttons as pressed if A or B is held down.
+; ([hJoy7] == 1, [hJoy6] == 0)
+JoypadLowSensitivity::
+ call Joypad
+ ldh a, [hJoy7] ; flag
+ and a ; get all currently pressed buttons or only newly pressed buttons?
+ ldh a, [hJoyPressed] ; newly pressed buttons
+ jr z, .storeButtonState
+ ldh a, [hJoyHeld] ; all currently pressed buttons
+.storeButtonState
+ ldh [hJoy5], a
+ ldh a, [hJoyPressed] ; newly pressed buttons
+ and a ; have any buttons been newly pressed since last check?
+ jr z, .noNewlyPressedButtons
+.newlyPressedButtons
+ ld a, 30 ; half a second delay
+ ldh [hFrameCounter], a
+ ret
+.noNewlyPressedButtons
+ ldh a, [hFrameCounter]
+ and a ; is the delay over?
+ jr z, .delayOver
+.delayNotOver
+ xor a
+ ldh [hJoy5], a ; report no buttons as pressed
+ ret
+.delayOver
+; if [hJoy6] = 0 and A or B is pressed, report no buttons as pressed
+ ldh a, [hJoyHeld]
+ and A_BUTTON | B_BUTTON
+ jr z, .setShortDelay
+ ldh a, [hJoy6] ; flag
+ and a
+ jr nz, .setShortDelay
+ xor a
+ ldh [hJoy5], a
+.setShortDelay
+ ld a, 5 ; 1/12 of a second delay
+ ldh [hFrameCounter], a
+ ret
+
+WaitForTextScrollButtonPress::
+ ldh a, [hDownArrowBlinkCount1]
+ push af
+ ldh a, [hDownArrowBlinkCount2]
+ push af
+ xor a
+ ldh [hDownArrowBlinkCount1], a
+ ld a, $6
+ ldh [hDownArrowBlinkCount2], a
+.loop
+ push hl
+ ld a, [wTownMapSpriteBlinkingEnabled]
+ and a
+ jr z, .skipAnimation
+ call TownMapSpriteBlinkingAnimation
+.skipAnimation
+ hlcoord 18, 16
+ call HandleDownArrowBlinkTiming
+ pop hl
+ call JoypadLowSensitivity
+ predef CableClub_Run
+ ldh a, [hJoy5]
+ and A_BUTTON | B_BUTTON
+ jr z, .loop
+ pop af
+ ldh [hDownArrowBlinkCount2], a
+ pop af
+ ldh [hDownArrowBlinkCount1], a
+ ret
+
+; (unless in link battle) waits for A or B being pressed and outputs the scrolling sound effect
+ManualTextScroll::
+ ld a, [wLinkState]
+ cp LINK_STATE_BATTLING
+ jr z, .inLinkBattle
+ call WaitForTextScrollButtonPress
+ ld a, SFX_PRESS_AB
+ jp PlaySound
+.inLinkBattle
+ ld c, 65
+ jp DelayFrames
--- a/home/lcd.asm
+++ b/home/lcd.asm
@@ -1,25 +1,25 @@
DisableLCD::
xor a
- ld [rIF], a
- ld a, [rIE]
+ ldh [rIF], a
+ ldh a, [rIE]
ld b, a
res 0, a
- ld [rIE], a
+ ldh [rIE], a
.wait
- ld a, [rLY]
+ ldh a, [rLY]
cp LY_VBLANK
jr nz, .wait
- ld a, [rLCDC]
+ ldh a, [rLCDC]
and $ff ^ rLCDC_ENABLE_MASK
- ld [rLCDC], a
+ ldh [rLCDC], a
ld a, b
- ld [rIE], a
+ ldh [rIE], a
ret
EnableLCD::
- ld a, [rLCDC]
+ ldh a, [rLCDC]
set rLCDC_ENABLE, a
- ld [rLCDC], a
+ ldh [rLCDC], a
ret
--- a/home/list_menu.asm
+++ b/home/list_menu.asm
@@ -3,9 +3,9 @@
; [wListPointer] = address of the list (2 bytes)
DisplayListMenuID::
xor a
- ld [hAutoBGTransferEnabled], a ; disable auto-transfer
+ ldh [hAutoBGTransferEnabled], a ; disable auto-transfer
ld a, 1
- ld [hJoy7], a ; joypad state update flag
+ ldh [hJoy7], a ; joypad state update flag
ld a, [wBattleType]
and a ; is it the Old Man battle?
jr nz, .specialBattleType
@@ -31,7 +31,7 @@
call DisplayTextBoxID ; draw the menu text box
call UpdateSprites ; disable sprites behind the text box
; the code up to .skipMovingSprites appears to be useless
- coord hl, 4, 2 ; coordinates of upper left corner of menu text box
+ hlcoord 4, 2 ; coordinates of upper left corner of menu text box
lb de, 9, 14 ; height and width of menu text box
ld a, [wListMenuID]
and a ; is it a PC pokemon list?
@@ -57,10 +57,10 @@
DisplayListMenuIDLoop::
xor a
- ld [hAutoBGTransferEnabled], a ; disable transfer
+ ldh [hAutoBGTransferEnabled], a ; disable transfer
call PrintListMenuEntries
ld a, 1
- ld [hAutoBGTransferEnabled], a ; enable transfer
+ ldh [hAutoBGTransferEnabled], a ; enable transfer
call Delay3
ld a, [wBattleType]
and a ; is it the Old Man battle?
@@ -67,12 +67,12 @@
jr z, .notOldManBattle
.oldManBattle
ld a, "▶"
- Coorda 5, 4 ; place menu cursor in front of first menu entry
+ ldcoord_a 5, 4 ; place menu cursor in front of first menu entry
ld c, 80
call DelayFrames
xor a
ld [wCurrentMenuItem], a
- coord hl, 5, 4
+ hlcoord 5, 4
ld a, l
ld [wMenuCursorLocation], a
ld a, h
@@ -163,7 +163,7 @@
ld a, [wCurrentMenuItem]
ld [wChosenMenuItem], a
xor a
- ld [hJoy7], a ; joypad state update flag
+ ldh [hJoy7], a ; joypad state update flag
ld hl, wd730
res 6, [hl] ; turn on letter printing delay
jp BankswitchBack
@@ -194,7 +194,7 @@
DisplayChooseQuantityMenu::
; text box dimensions/coordinates for just quantity
- coord hl, 15, 9
+ hlcoord 15, 9
ld b, 1 ; height
ld c, 3 ; width
ld a, [wListMenuID]
@@ -201,16 +201,16 @@
cp PRICEDITEMLISTMENU
jr nz, .drawTextBox
; text box dimensions/coordinates for quantity and price
- coord hl, 7, 9
+ hlcoord 7, 9
ld b, 1 ; height
ld c, 11 ; width
.drawTextBox
call TextBoxBorder
- coord hl, 16, 10
+ hlcoord 16, 10
ld a, [wListMenuID]
cp PRICEDITEMLISTMENU
jr nz, .printInitialQuantity
- coord hl, 8, 10
+ hlcoord 8, 10
.printInitialQuantity
ld de, InitialQuantityText
call PlaceString
@@ -219,7 +219,7 @@
jp .incrementQuantity
.waitForKeyPressLoop
call JoypadLowSensitivity
- ld a, [hJoyPressed] ; newly pressed buttons
+ ldh a, [hJoyPressed] ; newly pressed buttons
bit 0, a ; was the A button pressed?
jp nz, .buttonAPressed
bit 1, a ; was the B button pressed?
@@ -250,7 +250,7 @@
ld a, [wMaxItemQuantity]
ld [hl], a
.handleNewQuantity
- coord hl, 17, 10
+ hlcoord 17, 10
ld a, [wListMenuID]
cp PRICEDITEMLISTMENU
jr nz, .printQuantity
@@ -272,30 +272,30 @@
pop bc
dec b
jr nz, .addLoop
- ld a, [hHalveItemPrices]
+ ldh a, [hHalveItemPrices]
and a ; should the price be halved (for selling items)?
jr z, .skipHalvingPrice
xor a
- ld [hDivideBCDDivisor], a
- ld [hDivideBCDDivisor + 1], a
+ ldh [hDivideBCDDivisor], a
+ ldh [hDivideBCDDivisor + 1], a
ld a, $02
- ld [hDivideBCDDivisor + 2], a
+ ldh [hDivideBCDDivisor + 2], a
predef DivideBCDPredef3 ; halves the price
; store the halved price
- ld a, [hDivideBCDQuotient]
- ld [hMoney], a
- ld a, [hDivideBCDQuotient + 1]
- ld [hMoney + 1], a
- ld a, [hDivideBCDQuotient + 2]
- ld [hMoney + 2], a
+ ldh a, [hDivideBCDQuotient]
+ ldh [hMoney], a
+ ldh a, [hDivideBCDQuotient + 1]
+ ldh [hMoney + 1], a
+ ldh a, [hDivideBCDQuotient + 2]
+ ldh [hMoney + 2], a
.skipHalvingPrice
- coord hl, 12, 10
+ hlcoord 12, 10
ld de, SpacesBetweenQuantityAndPriceText
call PlaceString
ld de, hMoney ; total price
ld c, $a3
call PrintBCDNumber
- coord hl, 9, 10
+ hlcoord 9, 10
.printQuantity
ld de, wItemQuantity ; current quantity
lb bc, LEADING_ZEROES | 1, 2 ; 1 byte, 2 digits
@@ -324,7 +324,7 @@
ld [wMenuExitMethod], a
ld [wMenuWatchMovingOutOfBounds], a
xor a
- ld [hJoy7], a
+ ldh [hJoy7], a
ld hl, wd730
res 6, [hl]
call BankswitchBack
@@ -334,7 +334,7 @@
ret
PrintListMenuEntries::
- coord hl, 5, 3
+ hlcoord 5, 3
ld b, 9
ld c, 14
call ClearScreenArea
@@ -359,7 +359,7 @@
jr nc, .noCarry
inc d
.noCarry
- coord hl, 6, 4 ; coordinates of first list entry name
+ hlcoord 6, 4 ; coordinates of first list entry name
ld b, 4 ; print 4 names
.loop
ld a, b
--- /dev/null
+++ b/home/load_font.asm
@@ -1,0 +1,47 @@
+LoadFontTilePatterns::
+ ldh a, [rLCDC]
+ bit 7, a ; is the LCD enabled?
+ jr nz, .on
+.off
+ ld hl, FontGraphics
+ ld de, vFont
+ ld bc, FontGraphicsEnd - FontGraphics
+ ld a, BANK(FontGraphics)
+ jp FarCopyDataDouble ; if LCD is off, transfer all at once
+.on
+ ld de, FontGraphics
+ ld hl, vFont
+ lb bc, BANK(FontGraphics), (FontGraphicsEnd - FontGraphics) / $8
+ jp CopyVideoDataDouble ; if LCD is on, transfer during V-blank
+
+LoadTextBoxTilePatterns::
+ ldh a, [rLCDC]
+ bit 7, a ; is the LCD enabled?
+ jr nz, .on
+.off
+ ld hl, TextBoxGraphics
+ ld de, vChars2 tile $60
+ ld bc, TextBoxGraphicsEnd - TextBoxGraphics
+ ld a, BANK(TextBoxGraphics)
+ jp FarCopyData2 ; if LCD is off, transfer all at once
+.on
+ ld de, TextBoxGraphics
+ ld hl, vChars2 tile $60
+ lb bc, BANK(TextBoxGraphics), (TextBoxGraphicsEnd - TextBoxGraphics) / $10
+ jp CopyVideoData ; if LCD is on, transfer during V-blank
+
+LoadHpBarAndStatusTilePatterns::
+ ldh a, [rLCDC]
+ bit 7, a ; is the LCD enabled?
+ jr nz, .on
+.off
+ ld hl, HpBarAndStatusGraphics
+ ld de, vChars2 tile $62
+ ld bc, HpBarAndStatusGraphicsEnd - HpBarAndStatusGraphics
+ ld a, BANK(HpBarAndStatusGraphics)
+ jp FarCopyData2 ; if LCD is off, transfer all at once
+.on
+ ld de, HpBarAndStatusGraphics
+ ld hl, vChars2 tile $62
+ lb bc, BANK(HpBarAndStatusGraphics), (HpBarAndStatusGraphicsEnd - HpBarAndStatusGraphics) / $10
+ jp CopyVideoData ; if LCD is on, transfer during V-blank
--- /dev/null
+++ b/home/map_objects.asm
@@ -1,0 +1,248 @@
+; checks if the player's coordinates match an arrow movement tile's coordinates
+; and if so, decodes the RLE movement data
+; b = player Y
+; c = player X
+DecodeArrowMovementRLE::
+ ld a, [hli]
+ cp $ff
+ ret z ; no match in the list
+ cp b
+ jr nz, .nextArrowMovementTileEntry1
+ ld a, [hli]
+ cp c
+ jr nz, .nextArrowMovementTileEntry2
+ ld a, [hli]
+ ld d, [hl]
+ ld e, a
+ ld hl, wSimulatedJoypadStatesEnd
+ call DecodeRLEList
+ dec a
+ ld [wSimulatedJoypadStatesIndex], a
+ ret
+.nextArrowMovementTileEntry1
+ inc hl
+.nextArrowMovementTileEntry2
+ inc hl
+ inc hl
+ jr DecodeArrowMovementRLE
+
+TextScript_ItemStoragePC::
+ call SaveScreenTilesToBuffer2
+ ld b, BANK(PlayerPC)
+ ld hl, PlayerPC
+ jr bankswitchAndContinue
+
+TextScript_BillsPC::
+ call SaveScreenTilesToBuffer2
+ ld b, BANK(BillsPC_)
+ ld hl, BillsPC_
+ jr bankswitchAndContinue
+
+TextScript_GameCornerPrizeMenu::
+; XXX find a better name for this function
+; special_F7
+ ld b, BANK(CeladonPrizeMenu)
+ ld hl, CeladonPrizeMenu
+bankswitchAndContinue::
+ call Bankswitch
+ jp HoldTextDisplayOpen ; continue to main text-engine function
+
+TextScript_PokemonCenterPC::
+ ld b, BANK(ActivatePC)
+ ld hl, ActivatePC
+ jr bankswitchAndContinue
+
+StartSimulatingJoypadStates::
+ xor a
+ ld [wOverrideSimulatedJoypadStatesMask], a
+ ld [wSpritePlayerStateData2MovementByte1], a
+ ld hl, wd730
+ set 7, [hl]
+ ret
+
+IsItemInBag::
+; given an item_id in b
+; set zero flag if item isn't in player's bag
+; else reset zero flag
+; related to Pokémon Tower and ghosts
+ predef GetQuantityOfItemInBag
+ ld a, b
+ and a
+ ret
+
+DisplayPokedex::
+ ld [wd11e], a
+ farjp _DisplayPokedex
+
+SetSpriteFacingDirectionAndDelay::
+ call SetSpriteFacingDirection
+ ld c, 6
+ jp DelayFrames
+
+SetSpriteFacingDirection::
+ ld a, $9
+ ldh [hSpriteDataOffset], a
+ call GetPointerWithinSpriteStateData1
+ ldh a, [hSpriteFacingDirection]
+ ld [hl], a
+ ret
+
+SetSpriteImageIndexAfterSettingFacingDirection::
+ ld de, -7
+ add hl, de
+ ld [hl], a
+ ret
+
+; tests if the player's coordinates are in a specified array
+; INPUT:
+; hl = address of array
+; OUTPUT:
+; [wCoordIndex] = if there is match, the matching array index
+; sets carry if the coordinates are in the array, clears carry if not
+ArePlayerCoordsInArray::
+ ld a, [wYCoord]
+ ld b, a
+ ld a, [wXCoord]
+ ld c, a
+ ; fallthrough
+
+CheckCoords::
+ xor a
+ ld [wCoordIndex], a
+.loop
+ ld a, [hli]
+ cp $ff ; reached terminator?
+ jr z, .notInArray
+ push hl
+ ld hl, wCoordIndex
+ inc [hl]
+ pop hl
+.compareYCoord
+ cp b
+ jr z, .compareXCoord
+ inc hl
+ jr .loop
+.compareXCoord
+ ld a, [hli]
+ cp c
+ jr nz, .loop
+.inArray
+ scf
+ ret
+.notInArray
+ and a
+ ret
+
+; tests if a boulder's coordinates are in a specified array
+; INPUT:
+; hl = address of array
+; [hSpriteIndex] = index of boulder sprite
+; OUTPUT:
+; [wCoordIndex] = if there is match, the matching array index
+; sets carry if the coordinates are in the array, clears carry if not
+CheckBoulderCoords::
+ push hl
+ ld hl, wSpritePlayerStateData2MapY
+ ldh a, [hSpriteIndex]
+ swap a
+ ld d, $0
+ ld e, a
+ add hl, de
+ ld a, [hli]
+ sub $4 ; because sprite coordinates are offset by 4
+ ld b, a
+ ld a, [hl]
+ sub $4 ; because sprite coordinates are offset by 4
+ ld c, a
+ pop hl
+ jp CheckCoords
+
+GetPointerWithinSpriteStateData1::
+ ld h, $c1
+ jr _GetPointerWithinSpriteStateData
+
+GetPointerWithinSpriteStateData2::
+ ld h, $c2
+
+_GetPointerWithinSpriteStateData:
+ ldh a, [hSpriteDataOffset]
+ ld b, a
+ ldh a, [hSpriteIndex]
+ swap a
+ add b
+ ld l, a
+ ret
+
+; decodes a $ff-terminated RLEncoded list
+; each entry is a pair of bytes <byte value> <repetitions>
+; the final $ff will be replicated in the output list and a contains the number of bytes written
+; de: input list
+; hl: output list
+DecodeRLEList::
+ xor a
+ ld [wRLEByteCount], a ; count written bytes here
+.listLoop
+ ld a, [de]
+ cp $ff
+ jr z, .endOfList
+ ldh [hRLEByteValue], a ; store byte value to be written
+ inc de
+ ld a, [de]
+ ld b, $0
+ ld c, a ; number of bytes to be written
+ ld a, [wRLEByteCount]
+ add c
+ ld [wRLEByteCount], a ; update total number of written bytes
+ ldh a, [hRLEByteValue]
+ call FillMemory ; write a c-times to output
+ inc de
+ jr .listLoop
+.endOfList
+ ld a, $ff
+ ld [hl], a ; write final $ff
+ ld a, [wRLEByteCount]
+ inc a ; include sentinel in counting
+ ret
+
+; sets movement byte 1 for sprite [hSpriteIndex] to $FE and byte 2 to [hSpriteMovementByte2]
+SetSpriteMovementBytesToFE::
+ push hl
+ call GetSpriteMovementByte1Pointer
+ ld [hl], $fe
+ call GetSpriteMovementByte2Pointer
+ ldh a, [hSpriteMovementByte2]
+ ld [hl], a
+ pop hl
+ ret
+
+; sets both movement bytes for sprite [hSpriteIndex] to $FF
+SetSpriteMovementBytesToFF::
+ push hl
+ call GetSpriteMovementByte1Pointer
+ ld [hl], $FF
+ call GetSpriteMovementByte2Pointer
+ ld [hl], $FF ; prevent person from walking?
+ pop hl
+ ret
+
+; returns the sprite movement byte 1 pointer for sprite [hSpriteIndex] in hl
+GetSpriteMovementByte1Pointer::
+ ld h, $C2
+ ldh a, [hSpriteIndex]
+ swap a
+ add 6
+ ld l, a
+ ret
+
+; returns the sprite movement byte 2 pointer for sprite [hSpriteIndex] in hl
+GetSpriteMovementByte2Pointer::
+ push de
+ ld hl, wMapSpriteData
+ ldh a, [hSpriteIndex]
+ dec a
+ add a
+ ld d, 0
+ ld e, a
+ add hl, de
+ pop de
+ ret
--- /dev/null
+++ b/home/math.asm
@@ -1,0 +1,41 @@
+; function to do multiplication
+; all values are big endian
+; INPUT
+; FF96-FF98 = multiplicand
+; FF99 = multiplier
+; OUTPUT
+; FF95-FF98 = product
+Multiply::
+ push hl
+ push bc
+ callfar _Multiply
+ pop bc
+ pop hl
+ ret
+
+; function to do division
+; all values are big endian
+; INPUT
+; FF95-FF98 = dividend
+; FF99 = divisor
+; b = number of bytes in the dividend (starting from FF95)
+; OUTPUT
+; FF95-FF98 = quotient
+; FF99 = remainder
+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
+ pop bc
+ pop de
+ pop hl
+ ret
--- /dev/null
+++ b/home/money.asm
@@ -1,0 +1,15 @@
+HasEnoughMoney::
+; Check if the player has at least as much
+; money as the 3-byte BCD value at hMoney.
+ ld de, wPlayerMoney
+ ld hl, hMoney
+ ld c, 3
+ jp StringCmp
+
+HasEnoughCoins::
+; Check if the player has at least as many
+; coins as the 2-byte BCD value at hCoins.
+ ld de, wPlayerCoins
+ ld hl, hCoins
+ ld c, 2
+ jp StringCmp
--- a/home/move_mon.asm
+++ b/home/move_mon.asm
@@ -1,15 +1,30 @@
+; Copies [hl, bc) to [de, de + bc - hl).
+; In other words, the source data is from hl up to but not including bc,
+; and the destination is de.
+CopyDataUntil::
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, h
+ cp b
+ jr nz, CopyDataUntil
+ ld a, l
+ cp c
+ jr nz, CopyDataUntil
+ ret
+
; Function to remove a pokemon from the party or the current box.
; wWhichPokemon determines the pokemon.
; [wRemoveMonFromBox] == 0 specifies the party.
; [wRemoveMonFromBox] != 0 specifies the current box.
RemovePokemon::
- jpab _RemovePokemon
+ jpfar _RemovePokemon
AddPartyMon::
push hl
push de
push bc
- callba _AddPartyMon
+ farcall _AddPartyMon
pop bc
pop de
pop hl
@@ -21,10 +36,10 @@
.statsLoop
inc c
call CalcStat
- ld a, [hMultiplicand+1]
+ ldh a, [hMultiplicand+1]
ld [de], a
inc de
- ld a, [hMultiplicand+2]
+ ldh a, [hMultiplicand+2]
ld [de], a
inc de
ld a, c
@@ -57,22 +72,22 @@
add hl, bc ; skip to corresponding stat exp value
.statExpLoop ; calculates ceil(Sqrt(stat exp)) in b
xor a
- ld [hMultiplicand], a
- ld [hMultiplicand+1], a
+ ldh [hMultiplicand], a
+ ldh [hMultiplicand+1], a
inc b ; increment current stat exp bonus
ld a, b
cp $ff
jr z, .statExpDone
- ld [hMultiplicand+2], a
- ld [hMultiplier], a
+ ldh [hMultiplicand+2], a
+ ldh [hMultiplier], a
call Multiply
ld a, [hld]
ld d, a
- ld a, [hProduct + 3]
+ ldh a, [hProduct + 3]
sub d
ld a, [hli]
ld d, a
- ld a, [hProduct + 2]
+ ldh a, [hProduct + 2]
sbc d ; test if (current stat exp bonus)^2 < stat exp
jr c, .statExpLoop
.statExpDone
@@ -152,22 +167,22 @@
jr nc, .noCarry2
inc d ; de = (Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4
.noCarry2
- ld [hMultiplicand+2], a
+ ldh [hMultiplicand+2], a
ld a, d
- ld [hMultiplicand+1], a
+ ldh [hMultiplicand+1], a
xor a
- ld [hMultiplicand], a
+ ldh [hMultiplicand], a
ld a, [wCurEnemyLVL]
- ld [hMultiplier], a
+ ldh [hMultiplier], a
call Multiply ; ((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level
- ld a, [hMultiplicand]
- ld [hDividend], a
- ld a, [hMultiplicand+1]
- ld [hDividend+1], a
- ld a, [hMultiplicand+2]
- ld [hDividend+2], a
+ ldh a, [hMultiplicand]
+ ldh [hDividend], a
+ ldh a, [hMultiplicand+1]
+ ldh [hDividend+1], a
+ ldh a, [hMultiplicand+2]
+ ldh [hDividend+2], a
ld a, $64
- ld [hDivisor], a
+ ldh [hDivisor], a
ld a, $3
ld b, a
call Divide ; (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100
@@ -177,38 +192,38 @@
jr nz, .notHPStat
ld a, [wCurEnemyLVL]
ld b, a
- ld a, [hMultiplicand+2]
+ ldh a, [hMultiplicand+2]
add b
- ld [hMultiplicand+2], a
+ ldh [hMultiplicand+2], a
jr nc, .noCarry3
- ld a, [hMultiplicand+1]
+ ldh a, [hMultiplicand+1]
inc a
- ld [hMultiplicand+1], a ; HP: (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100 + Level
+ ldh [hMultiplicand+1], a ; HP: (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100 + Level
.noCarry3
ld a, 10 ; +10 for HP stat
.notHPStat
ld b, a
- ld a, [hMultiplicand+2]
+ ldh a, [hMultiplicand+2]
add b
- ld [hMultiplicand+2], a
+ ldh [hMultiplicand+2], a
jr nc, .noCarry4
- ld a, [hMultiplicand+1]
+ ldh a, [hMultiplicand+1]
inc a ; non-HP: (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100 + 5
- ld [hMultiplicand+1], a ; HP: (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100 + Level + 10
+ ldh [hMultiplicand+1], a ; HP: (((Base + IV) * 2 + ceil(Sqrt(stat exp)) / 4) * Level) / 100 + Level + 10
.noCarry4
- ld a, [hMultiplicand+1] ; check for overflow (>999)
- cp 999 / $100 + 1
+ ldh a, [hMultiplicand+1] ; check for overflow (>999)
+ cp HIGH(MAX_STAT_VALUE) + 1
jr nc, .overflow
- cp 999 / $100
+ cp HIGH(MAX_STAT_VALUE)
jr c, .noOverflow
- ld a, [hMultiplicand+2]
- cp 999 % $100 + 1
+ ldh a, [hMultiplicand+2]
+ cp LOW(MAX_STAT_VALUE) + 1
jr c, .noOverflow
.overflow
- ld a, 999 / $100 ; overflow: cap at 999
- ld [hMultiplicand+1], a
- ld a, 999 % $100
- ld [hMultiplicand+2], a
+ ld a, HIGH(MAX_STAT_VALUE) ; overflow: cap at 999
+ ldh [hMultiplicand+1], a
+ ld a, LOW(MAX_STAT_VALUE)
+ ldh [hMultiplicand+2], a
.noOverflow
pop bc
pop de
@@ -216,27 +231,27 @@
ret
AddEnemyMonToPlayerParty::
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, BANK(_AddEnemyMonToPlayerParty)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call _AddEnemyMonToPlayerParty
pop bc
ld a, b
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
MoveMon::
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, BANK(_MoveMon)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call _MoveMon
pop bc
ld a, b
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
--- a/home/names.asm
+++ b/home/names.asm
@@ -1,9 +1,9 @@
GetMonName::
push hl
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, BANK(MonsterNames)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld a, [wd11e]
dec a
@@ -19,7 +19,7 @@
ld [hl], "@"
pop de
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
pop hl
ret
--- a/home/names2.asm
+++ b/home/names2.asm
@@ -22,7 +22,7 @@
cp HM01
jp nc, GetMachineName
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
push hl
push bc
@@ -40,7 +40,7 @@
.otherEntries
;2-7 = OTHER ENTRIES
ld a, [wPredefBank]
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld a, [wNameListType] ;VariousNames' entryID
dec a
@@ -53,12 +53,12 @@
ld hl, NamePointers
add hl, de
ld a, [hli]
- ld [hSwapTemp + 1], a
+ ldh [hSwapTemp + 1], a
ld a, [hl]
- ld [hSwapTemp], a
- ld a, [hSwapTemp]
+ ldh [hSwapTemp], a
+ ldh a, [hSwapTemp]
ld h, a
- ld a, [hSwapTemp + 1]
+ ldh a, [hSwapTemp + 1]
ld l, a
ld a, [wd0b5]
ld b, a
@@ -88,6 +88,6 @@
pop bc
pop hl
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
--- /dev/null
+++ b/home/npc_movement.asm
@@ -1,0 +1,54 @@
+; not zero if an NPC movement script is running, the player character is
+; automatically stepping down from a door, or joypad states are being simulated
+IsPlayerCharacterBeingControlledByGame::
+ ld a, [wNPCMovementScriptPointerTableNum]
+ and a
+ ret nz
+ ld a, [wd736]
+ bit 1, a ; currently stepping down from door bit
+ ret nz
+ ld a, [wd730]
+ and $80
+ ret
+
+RunNPCMovementScript::
+ ld hl, wd736
+ bit 0, [hl]
+ res 0, [hl]
+ jr nz, .playerStepOutFromDoor
+ ld a, [wNPCMovementScriptPointerTableNum]
+ and a
+ ret z
+ dec a
+ add a
+ ld d, 0
+ ld e, a
+ ld hl, .NPCMovementScriptPointerTables
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ldh a, [hLoadedROMBank]
+ push af
+ ld a, [wNPCMovementScriptBank]
+ ldh [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ ld a, [wNPCMovementScriptFunctionNum]
+ call CallFunctionInTable
+ pop af
+ ldh [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ ret
+
+.NPCMovementScriptPointerTables
+ dw PalletMovementScriptPointerTable
+ dw PewterMuseumGuyMovementScriptPointerTable
+ dw PewterGymGuyMovementScriptPointerTable
+.playerStepOutFromDoor
+ farjp PlayerStepOutFromDoor
+
+EndNPCMovementScript::
+ farjp _EndNPCMovementScript
+
+EmptyFunc2::
+ ret
--- /dev/null
+++ b/home/oam.asm
@@ -1,0 +1,36 @@
+; INPUT:
+; a = oam block index (each block is 4 oam entries)
+; b = Y coordinate of upper left corner of sprite
+; c = X coordinate of upper left corner of sprite
+; de = base address of 4 tile number and attribute pairs
+WriteOAMBlock::
+ ld h, HIGH(wOAMBuffer)
+ swap a ; multiply by 16
+ ld l, a
+ call .writeOneEntry ; upper left
+ push bc
+ ld a, 8
+ add c
+ ld c, a
+ call .writeOneEntry ; upper right
+ pop bc
+ ld a, 8
+ add b
+ ld b, a
+ call .writeOneEntry ; lower left
+ ld a, 8
+ add c
+ ld c, a
+ ; lower right
+.writeOneEntry
+ ld [hl], b ; Y coordinate
+ inc hl
+ ld [hl], c ; X coordinate
+ inc hl
+ ld a, [de] ; tile number
+ inc de
+ ld [hli], a
+ ld a, [de] ; attribute
+ inc de
+ ld [hli], a
+ ret
--- a/home/overworld.asm
+++ b/home/overworld.asm
@@ -1,7 +1,7 @@
HandleMidJump::
; Handle the player jumping down
; a ledge in the overworld.
- jpba _HandleMidJump
+ farjp _HandleMidJump
EnterMap::
; Load a new map.
@@ -8,7 +8,7 @@
ld a, $ff
ld [wJoyIgnore], a
call LoadMapData
- callba ClearVariablesOnEnterMap
+ farcall ClearVariablesOnEnterMap
ld hl, wd72c
bit 0, [hl] ; has the player already made 3 steps since the last battle?
jr z, .skipGivingThreeStepsOfNoRandomBattles
@@ -25,10 +25,10 @@
and 1 << 4 | 1 << 3 ; fly warp or dungeon warp
jr z, .didNotEnterUsingFlyWarpOrDungeonWarp
res 3, [hl]
- callba EnterMapAnim
+ farcall EnterMapAnim
call UpdateSprites
.didNotEnterUsingFlyWarpOrDungeonWarp
- callba CheckForceBikeOrSurf ; handle currents in SF islands and forced bike riding in cycling road
+ farcall CheckForceBikeOrSurf ; handle currents in SF islands and forced bike riding in cycling road
ld hl, wd72d
res 5, [hl]
call UpdateSprites
@@ -50,7 +50,7 @@
and a
jp nz, .moveAhead ; if the player sprite has not yet completed the walking animation
call JoypadOverworld ; get joypad state (which is possibly simulated)
- callba SafariZoneCheck
+ farcall SafariZoneCheck
ld a, [wSafariZoneGameOver]
and a
jp nz, WarpFound2
@@ -67,16 +67,16 @@
ld a, [wd730]
bit 7, a ; are we simulating button presses?
jr z, .notSimulating
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
jr .checkIfStartIsPressed
.notSimulating
- ld a, [hJoyPressed]
+ ldh a, [hJoyPressed]
.checkIfStartIsPressed
bit 3, a ; start button
jr z, .startButtonNotPressed
; if START is pressed
xor a ; TEXT_START_MENU
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp .displayDialogue
.startButtonNotPressed
bit 0, a ; A button
@@ -88,11 +88,11 @@
call IsPlayerCharacterBeingControlledByGame
jr nz, .checkForOpponent
call CheckForHiddenObjectOrBookshelfOrCardKeyDoor
- ld a, [hItemAlreadyFound]
+ ldh a, [hItemAlreadyFound]
and a
jp z, OverworldLoop ; jump if a hidden object or bookshelf was found, but not if a card key door was found
call IsSpriteOrSignInFrontOfPlayer
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
and a
jp z, OverworldLoop
.displayDialogue
@@ -103,7 +103,7 @@
jr nz, .checkForOpponent
bit 0, a
jr nz, .checkForOpponent
- aCoord 8, 9
+ lda_coord 8, 9
ld [wTilePlayerStandingOn], a ; unused?
call DisplayTextID ; display either the start menu or the NPC/sign text
ld a, [wEnteringCableClub]
@@ -145,7 +145,7 @@
jp OverworldLoop
.checkIfDownButtonIsPressed
- ld a, [hJoyHeld] ; current joypad state
+ ldh a, [hJoyHeld] ; current joypad state
bit 7, a ; down button
jr z, .checkIfUpButtonIsPressed
ld a, 1
@@ -269,7 +269,7 @@
ld a, [wd736]
bit 7, a
jr z, .noSpinning
- callba LoadSpinnerArrowTiles
+ farcall LoadSpinnerArrowTiles
.noSpinning
call UpdateSprites
@@ -306,7 +306,7 @@
.doneStepCounting
CheckEvent EVENT_IN_SAFARI_ZONE
jr z, .notSafariZone
- callba SafariZoneCheckSteps
+ farcall SafariZoneCheckSteps
ld a, [wSafariZoneGameOver]
and a
jp nz, WarpFound2
@@ -332,7 +332,7 @@
set 5, [hl]
set 6, [hl]
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, [wCurMap]
cp CINNABAR_GYM
jr nz, .notCinnabarGym
@@ -343,7 +343,7 @@
ld a, [wCurMap]
cp OAKS_LAB
jp z, .noFaintCheck ; no blacking out if the player lost to the rival in Oak's lab
- callab AnyPartyAlive
+ callfar AnyPartyAlive
ld a, d
and a
jr z, .allPokemonFainted
@@ -368,7 +368,7 @@
ld a, [wd72e]
bit 4, a
jr nz, .noBattle
- jpba InitBattle
+ farjp InitBattle
.noBattle
and a
ret
@@ -381,7 +381,7 @@
ld a, [wCurMap]
cp ROUTE_17 ; Cycling Road
jr nz, .goFaster
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
and D_UP | D_LEFT | D_RIGHT
ret nz
.goFaster
@@ -412,7 +412,7 @@
push bc
ld hl, wd736
set 2, [hl] ; standing on warp flag
- callba IsPlayerStandingOnDoorTileOrWarpTile
+ farcall IsPlayerStandingOnDoorTileOrWarpTile
pop bc
pop hl
jr c, WarpFound1 ; jump if standing on door or warp
@@ -431,7 +431,7 @@
call Joypad
pop bc
pop de
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
and D_DOWN | D_UP | D_LEFT | D_RIGHT
jr z, CheckWarpsNoCollisionRetry2 ; if directional buttons aren't being pressed, do not pass through the warp
jr WarpFound1
@@ -455,7 +455,7 @@
ld a, [hli]
ld [wDestinationWarpID], a
ld a, [hl]
- ld [hWarpDestinationMap], a
+ ldh [hWarpDestinationMap], a
jr WarpFound2
.retry1
inc hl
@@ -477,7 +477,7 @@
ld a, [hli]
ld [wDestinationWarpID], a
ld a, [hli]
- ld [hWarpDestinationMap], a
+ ldh [hWarpDestinationMap], a
WarpFound2::
ld a, [wNumberOfWarps]
@@ -492,7 +492,7 @@
ld [wLastMap], a
ld a, [wCurMapWidth]
ld [wUnusedD366], a ; not read
- ld a, [hWarpDestinationMap]
+ ldh a, [hWarpDestinationMap]
ld [wCurMap], a
cp ROCK_TUNNEL_1F
jr nz, .notRockTunnel
@@ -506,12 +506,12 @@
; for maps that can have the 0xFF destination map, which means to return to the outside map
; not all these maps are necessarily indoors, though
.indoorMaps
- ld a, [hWarpDestinationMap] ; destination map
+ ldh a, [hWarpDestinationMap] ; destination map
cp $ff
jr z, .goBackOutside
; if not going back to the previous map
ld [wCurMap], a
- callba IsPlayerStandingOnWarpPadOrHole
+ farcall IsPlayerStandingOnWarpPadOrHole
ld a, [wStandingOnWarpPadOrHole]
dec a ; is the player on a warp pad?
jr nz, .notWarpPad
@@ -678,8 +678,8 @@
ld b, SET_PAL_OVERWORLD
call RunPaletteCommand
; Since the sprite set shouldn't change, this will just update VRAM slots at
-; $C2XE without loading any tile patterns.
- callba InitMapSprites
+; x#SPRITESTATEDATA2_IMAGEBASEOFFSET without loading any tile patterns.
+ farcall InitMapSprites
call LoadTileBlockMap
jp OverworldLoopLessDelay
@@ -688,7 +688,7 @@
; function to play a sound when changing maps
PlayMapChangeSound::
- aCoord 8, 8 ; upper left tile of the 4x4 square the player's sprite is standing on
+ lda_coord 8, 8 ; upper left tile of the 4x4 square the player's sprite is standing on
cp $0b ; door tile in tileset 0
jr nz, .didNotGoThroughDoor
ld a, SFX_GO_INSIDE
@@ -747,7 +747,7 @@
jp Bankswitch
MapEntryAfterBattle::
- callba IsPlayerStandingOnWarp ; for enabling warp testing after collisions
+ farcall IsPlayerStandingOnWarp ; for enabling warp testing after collisions
ld a, [wMapPalOffset]
and a
jp z, GBFadeInFromWhite
@@ -763,7 +763,7 @@
ld hl, wd72e
res 5, [hl]
ld a, BANK(ResetStatusAndHalveMoneyOnBlackout) ; also BANK(SpecialWarpIn) and BANK(SpecialEnterMap)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call ResetStatusAndHalveMoneyOnBlackout
call SpecialWarpIn
@@ -794,13 +794,13 @@
res 5, [hl] ; forced to ride bike
call LeaveMapAnim
ld a, BANK(SpecialWarpIn)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call SpecialWarpIn
jp SpecialEnterMap
LeaveMapAnim::
- jpba _LeaveMapAnim
+ farjp _LeaveMapAnim
LoadPlayerSpriteGraphics::
; Load sprite graphics based on whether the player is standing, biking, or surfing.
@@ -813,7 +813,7 @@
dec a
jr z, .ridingBike
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
and a
jr nz, .determineGraphics
jr .startWalking
@@ -899,9 +899,9 @@
; a 3-byte border at the edges of the map is kept so that there is space for map connections
ld hl, wOverworldMap
ld a, [wCurMapWidth]
- ld [hMapWidth], a
+ ldh [hMapWidth], a
add MAP_BORDER * 2 ; east and west
- ld [hMapStride], a ; map width + border
+ ldh [hMapStride], a ; map width + border
ld b, 0
ld c, a
; make space for north border (next 3 lines)
@@ -918,7 +918,7 @@
ld b, a
.rowLoop ; copy one row each iteration
push hl
- ld a, [hMapWidth] ; map width (without border)
+ ldh a, [hMapWidth] ; map width (without border)
ld c, a
.rowInnerLoop
ld a, [de]
@@ -928,7 +928,7 @@
jr nz, .rowInnerLoop
; add the map width plus the border to the base address of the current row to get the next row's address
pop hl
- ld a, [hMapStride] ; map width + border
+ ldh a, [hMapStride] ; map width + border
add l
ld l, a
jr nc, .noCarry
@@ -950,9 +950,9 @@
ld a, [wNorthConnectionStripDest + 1]
ld d, a
ld a, [wNorthConnectionStripWidth]
- ld [hNorthSouthConnectionStripWidth], a
+ ldh [hNorthSouthConnectionStripWidth], a
ld a, [wNorthConnectedMapWidth]
- ld [hNorthSouthConnectedMapWidth], a
+ ldh [hNorthSouthConnectedMapWidth], a
call LoadNorthSouthConnectionsTileMap
.southConnection
ld a, [wMapConn2Ptr]
@@ -968,9 +968,9 @@
ld a, [wSouthConnectionStripDest + 1]
ld d, a
ld a, [wSouthConnectionStripWidth]
- ld [hNorthSouthConnectionStripWidth], a
+ ldh [hNorthSouthConnectionStripWidth], a
ld a, [wSouthConnectedMapWidth]
- ld [hNorthSouthConnectedMapWidth], a
+ ldh [hNorthSouthConnectedMapWidth], a
call LoadNorthSouthConnectionsTileMap
.westConnection
ld a, [wMapConn3Ptr]
@@ -988,7 +988,7 @@
ld a, [wWestConnectionStripHeight]
ld b, a
ld a, [wWestConnectedMapWidth]
- ld [hEastWestConnectedMapWidth], a
+ ldh [hEastWestConnectedMapWidth], a
call LoadEastWestConnectionsTileMap
.eastConnection
ld a, [wMapConn4Ptr]
@@ -1006,7 +1006,7 @@
ld a, [wEastConnectionStripHeight]
ld b, a
ld a, [wEastConnectedMapWidth]
- ld [hEastWestConnectedMapWidth], a
+ ldh [hEastWestConnectedMapWidth], a
call LoadEastWestConnectionsTileMap
.done
ret
@@ -1016,7 +1016,7 @@
.loop
push de
push hl
- ld a, [hNorthSouthConnectionStripWidth]
+ ldh a, [hNorthSouthConnectionStripWidth]
ld b, a
.innerLoop
ld a, [hli]
@@ -1026,7 +1026,7 @@
jr nz, .innerLoop
pop hl
pop de
- ld a, [hNorthSouthConnectedMapWidth]
+ ldh a, [hNorthSouthConnectedMapWidth]
add l
ld l, a
jr nc, .noCarry1
@@ -1055,7 +1055,7 @@
jr nz, .innerLoop
pop de
pop hl
- ld a, [hEastWestConnectedMapWidth]
+ ldh a, [hEastWestConnectedMapWidth]
add l
ld l, a
jr nc, .noCarry1
@@ -1077,7 +1077,7 @@
; if not, [hSpriteIndexOrTextID] is set to 0
IsSpriteOrSignInFrontOfPlayer::
xor a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
ld a, [wNumSigns]
and a
jr z, .extendRangeOverCounter
@@ -1107,7 +1107,7 @@
dec c
add hl, bc
ld a, [hl]
- ld [hSpriteIndexOrTextID], a ; store sign text ID
+ ldh [hSpriteIndexOrTextID], a ; store sign text ID
pop bc
pop hl
ret
@@ -1210,10 +1210,10 @@
ld a, l
and $f0
inc a
- ld l, a ; hl = $c1x1
+ ld l, a ; hl = x#SPRITESTATEDATA1_MOVEMENTSTATUS
set 7, [hl] ; set flag to make the sprite face the player
ld a, e
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
ret
; function to check if the player will jump down a ledge and check if the tile ahead is passable (when not surfing)
@@ -1232,9 +1232,9 @@
and d ; check if a sprite is in the direction the player is trying to go
jr nz, .collision
xor a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call IsSpriteInFrontOfPlayer ; check for sprite collisions again? when does the above check fail to detect a sprite collision?
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
and a ; was there a sprite collision?
jr nz, .collision
; if no sprite collision
@@ -1286,7 +1286,7 @@
predef GetTileAndCoordsInFrontOfPlayer ; get the tile in front of the player
push de
push bc
- callba HandleLedges ; check if the player is trying to jump a ledge
+ farcall HandleLedges ; check if the player is trying to jump a ledge
pop bc
pop de
pop hl
@@ -1297,7 +1297,7 @@
; if not jumping
CheckForTilePairCollisions2::
- aCoord 8, 9 ; tile the player is on
+ lda_coord 8, 9 ; tile the player is on
ld [wTilePlayerStandingOn], a
CheckForTilePairCollisions::
@@ -1372,10 +1372,10 @@
; this builds a tile map from the tile block map based on the current X/Y coordinates of the player's character
LoadCurrentMapView::
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, [wTilesetBank] ; tile data ROM bank
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a ; switch to ROM bank that contains tile data
ld a, [wCurrentTileBlockMapViewPointer] ; address of upper left corner of current map view
ld e, a
@@ -1438,7 +1438,7 @@
ld bc, $2
add hl, bc
.copyToVisibleAreaBuffer
- coord de, 0, 0 ; base address for the tiles that are directly transferred to VRAM during V-blank
+ decoord 0, 0 ; base address for the tiles that are directly transferred to VRAM during V-blank
ld b, SCREEN_HEIGHT
.rowLoop2
ld c, SCREEN_WIDTH
@@ -1457,7 +1457,7 @@
dec b
jr nz, .rowLoop2
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a ; restore previous ROM bank
ret
@@ -1627,12 +1627,12 @@
ld c, a
sla b
sla c
- ld a, [hSCY]
+ ldh a, [hSCY]
add b
- ld [hSCY], a ; update background scroll Y
- ld a, [hSCX]
+ ldh [hSCY], a ; update background scroll Y
+ ldh a, [hSCX]
add c
- ld [hSCX], a ; update background scroll X
+ ldh [hSCX], a ; update background scroll X
; shift all the sprites in the direction opposite of the player's motion
; so that the player appears to move relative to them
ld hl, wSprite01StateData1YPixels
@@ -1711,14 +1711,14 @@
; the portion of the map that was newly exposed due to the player's movement
ScheduleNorthRowRedraw::
- coord hl, 0, 0
+ hlcoord 0, 0
call CopyToRedrawRowOrColumnSrcTiles
ld a, [wMapViewVRAMPointer]
- ld [hRedrawRowOrColumnDest], a
+ ldh [hRedrawRowOrColumnDest], a
ld a, [wMapViewVRAMPointer + 1]
- ld [hRedrawRowOrColumnDest + 1], a
+ ldh [hRedrawRowOrColumnDest + 1], a
ld a, REDRAW_ROW
- ld [hRedrawRowOrColumnMode], a
+ ldh [hRedrawRowOrColumnMode], a
ret
CopyToRedrawRowOrColumnSrcTiles::
@@ -1733,7 +1733,7 @@
ret
ScheduleSouthRowRedraw::
- coord hl, 0, 16
+ hlcoord 0, 16
call CopyToRedrawRowOrColumnSrcTiles
ld a, [wMapViewVRAMPointer]
ld l, a
@@ -1744,15 +1744,15 @@
ld a, h
and $03
or $98
- ld [hRedrawRowOrColumnDest + 1], a
+ ldh [hRedrawRowOrColumnDest + 1], a
ld a, l
- ld [hRedrawRowOrColumnDest], a
+ ldh [hRedrawRowOrColumnDest], a
ld a, REDRAW_ROW
- ld [hRedrawRowOrColumnMode], a
+ ldh [hRedrawRowOrColumnMode], a
ret
ScheduleEastColumnRedraw::
- coord hl, 18, 0
+ hlcoord 18, 0
call ScheduleColumnRedrawHelper
ld a, [wMapViewVRAMPointer]
ld c, a
@@ -1762,11 +1762,11 @@
add 18
and $1f
or b
- ld [hRedrawRowOrColumnDest], a
+ ldh [hRedrawRowOrColumnDest], a
ld a, [wMapViewVRAMPointer + 1]
- ld [hRedrawRowOrColumnDest + 1], a
+ ldh [hRedrawRowOrColumnDest + 1], a
ld a, REDRAW_COL
- ld [hRedrawRowOrColumnMode], a
+ ldh [hRedrawRowOrColumnMode], a
ret
ScheduleColumnRedrawHelper::
@@ -1790,14 +1790,14 @@
ret
ScheduleWestColumnRedraw::
- coord hl, 0, 0
+ hlcoord 0, 0
call ScheduleColumnRedrawHelper
ld a, [wMapViewVRAMPointer]
- ld [hRedrawRowOrColumnDest], a
+ ldh [hRedrawRowOrColumnDest], a
ld a, [wMapViewVRAMPointer + 1]
- ld [hRedrawRowOrColumnDest + 1], a
+ ldh [hRedrawRowOrColumnDest + 1], a
ld a, REDRAW_COL
- ld [hRedrawRowOrColumnMode], a
+ ldh [hRedrawRowOrColumnMode], a
ret
; function to write the tiles that make up a tile block to memory
@@ -1855,17 +1855,17 @@
ld a, [wCurMap]
cp ROUTE_17 ; Cycling Road
jr nz, .notForcedDownwards
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
and D_DOWN | D_UP | D_LEFT | D_RIGHT | B_BUTTON | A_BUTTON
jr nz, .notForcedDownwards
ld a, D_DOWN
- ld [hJoyHeld], a ; on the cycling road, if there isn't a trainer and the player isn't pressing buttons, simulate a down press
+ ldh [hJoyHeld], a ; on the cycling road, if there isn't a trainer and the player isn't pressing buttons, simulate a down press
.notForcedDownwards
ld a, [wd730]
bit 7, a
ret z
; if simulating button presses
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
ld b, a
ld a, [wOverrideSimulatedJoypadStatesMask] ; bit mask for button presses that override simulated ones
and b
@@ -1882,11 +1882,11 @@
inc h
.noCarry
ld a, [hl]
- ld [hJoyHeld], a ; store simulated button press in joypad state
+ ldh [hJoyHeld], a ; store simulated button press in joypad state
and a
ret nz
- ld [hJoyPressed], a
- ld [hJoyReleased], a
+ ldh [hJoyPressed], a
+ ldh [hJoyReleased], a
ret
; if done simulating button presses
@@ -1896,7 +1896,7 @@
ld [wSimulatedJoypadStatesIndex], a
ld [wSimulatedJoypadStatesEnd], a
ld [wJoyIgnore], a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld hl, wd736
ld a, [hl]
and $f8
@@ -1977,11 +1977,11 @@
push hl
push de
push bc
- callba TryPushingBoulder
+ farcall TryPushingBoulder
ld a, [wFlags_0xcd60]
bit 1, a ; play boulder dust animation
jr z, .afterBoulderEffect
- callba DoBoulderDustAnimation
+ farcall DoBoulderDustAnimation
.afterBoulderEffect
pop bc
pop de
@@ -2032,7 +2032,7 @@
; function to load data from the map header
LoadMapHeader::
- callba MarkTownVisitedAndLoadMissableObjects
+ farcall MarkTownVisitedAndLoadMissableObjects
ld a, [wCurMapTileset]
ld [wUnusedD119], a
ld a, [wCurMap]
@@ -2041,7 +2041,7 @@
ld b, a
res 7, a
ld [wCurMapTileset], a
- ld [hPreviousTileset], a
+ ldh [hPreviousTileset], a
bit 7, b
ret nz
ld hl, MapHeaderPointers
@@ -2134,9 +2134,9 @@
ld c, a
ld de, wSignTextIDs
ld a, d
- ld [hSignCoordPointer], a
+ ldh [hSignCoordPointer], a
ld a, e
- ld [hSignCoordPointer + 1], a
+ ldh [hSignCoordPointer + 1], a
ld de, wSignCoords
.signLoop
ld a, [hli]
@@ -2146,17 +2146,17 @@
ld [de], a
inc de
push de
- ld a, [hSignCoordPointer]
+ ldh a, [hSignCoordPointer]
ld d, a
- ld a, [hSignCoordPointer + 1]
+ ldh a, [hSignCoordPointer + 1]
ld e, a
ld a, [hli]
ld [de], a
inc de
ld a, d
- ld [hSignCoordPointer], a
+ ldh [hSignCoordPointer], a
ld a, e
- ld [hSignCoordPointer + 1], a
+ ldh [hSignCoordPointer + 1], a
pop de
dec c
jr nz, .signLoop
@@ -2167,7 +2167,7 @@
ld a, [hli]
ld [wNumSprites], a ; save the number of sprites
push hl
-; zero C110-C1FF and C210-C2FF
+; zero out sprite state data for sprites 01-15
ld hl, wSprite01StateData1
ld de, wSprite01StateData2
xor a
@@ -2178,7 +2178,7 @@
inc e
dec b
jr nz, .zeroSpriteDataLoop
-; initialize all C100-C1FF sprite entries to disabled (other than player's)
+; disable SPRITESTATEDATA1_IMAGEINDEX (set to $ff) for sprites 01-15
ld hl, wSprite01StateData1ImageIndex
ld de, $10
ld c, $0f
@@ -2196,38 +2196,38 @@
ld c, $00
.loadSpriteLoop
ld a, [hli]
- ld [de], a ; store picture ID at C1X0
+ ld [de], a ; x#SPRITESTATEDATA1_PICTUREID
inc d
ld a, $04
add e
ld e, a
ld a, [hli]
- ld [de], a ; store Y position at C2X4
+ ld [de], a ; x#SPRITESTATEDATA2_MAPY
inc e
ld a, [hli]
- ld [de], a ; store X position at C2X5
+ ld [de], a ; x#SPRITESTATEDATA2_MAPX
inc e
ld a, [hli]
- ld [de], a ; store movement byte 1 at C2X6
+ ld [de], a ; x#SPRITESTATEDATA2_MOVEMENTBYTE1
ld a, [hli]
- ld [hLoadSpriteTemp1], a ; save movement byte 2
+ ldh [hLoadSpriteTemp1], a ; save movement byte 2
ld a, [hli]
- ld [hLoadSpriteTemp2], a ; save text ID and flags byte
+ ldh [hLoadSpriteTemp2], a ; save text ID and flags byte
push bc
push hl
ld b, $00
ld hl, wMapSpriteData
add hl, bc
- ld a, [hLoadSpriteTemp1]
+ ldh a, [hLoadSpriteTemp1]
ld [hli], a ; store movement byte 2 in byte 0 of sprite entry
- ld a, [hLoadSpriteTemp2]
+ ldh a, [hLoadSpriteTemp2]
ld [hl], a ; this appears pointless, since the value is overwritten immediately after
- ld a, [hLoadSpriteTemp2]
- ld [hLoadSpriteTemp1], a
+ ldh a, [hLoadSpriteTemp2]
+ ldh [hLoadSpriteTemp1], a
and $3f
ld [hl], a ; store text ID in byte 1 of sprite entry
pop hl
- ld a, [hLoadSpriteTemp1]
+ ldh a, [hLoadSpriteTemp1]
bit 6, a
jr nz, .trainerSprite
bit 7, a
@@ -2235,25 +2235,25 @@
jr .regularSprite
.trainerSprite
ld a, [hli]
- ld [hLoadSpriteTemp1], a ; save trainer class
+ ldh [hLoadSpriteTemp1], a ; save trainer class
ld a, [hli]
- ld [hLoadSpriteTemp2], a ; save trainer number (within class)
+ ldh [hLoadSpriteTemp2], a ; save trainer number (within class)
push hl
ld hl, wMapSpriteExtraData
add hl, bc
- ld a, [hLoadSpriteTemp1]
+ ldh a, [hLoadSpriteTemp1]
ld [hli], a ; store trainer class in byte 0 of the entry
- ld a, [hLoadSpriteTemp2]
+ ldh a, [hLoadSpriteTemp2]
ld [hl], a ; store trainer number in byte 1 of the entry
pop hl
jr .nextSprite
.itemBallSprite
ld a, [hli]
- ld [hLoadSpriteTemp1], a ; save item number
+ ldh [hLoadSpriteTemp1], a ; save item number
push hl
ld hl, wMapSpriteExtraData
add hl, bc
- ld a, [hLoadSpriteTemp1]
+ ldh a, [hLoadSpriteTemp1]
ld [hli], a ; store item number in byte 0 of the entry
xor a
ld [hl], a ; zero byte 1, since it is not used
@@ -2280,7 +2280,7 @@
jp nz, .loadSpriteLoop
.finishUp
predef LoadTilesetHeader
- callab LoadWildData
+ callfar LoadWildData
pop hl ; restore hl from before going to the warp/sign/sprite data (this value was saved for seemingly no purpose)
ld a, [wCurMapHeight] ; map height in 4x4 tile blocks
add a ; double it
@@ -2291,10 +2291,10 @@
ld a, [wCurMap]
ld c, a
ld b, $00
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, BANK(MapSongBanks)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld hl, MapSongBanks
add hl, bc
@@ -2304,7 +2304,7 @@
ld a, [hl]
ld [wMapMusicROMBank], a ; music 2
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
@@ -2322,7 +2322,7 @@
; function to load map data
LoadMapData::
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
call DisableLCD
ld a, $98
@@ -2329,8 +2329,8 @@
ld [wMapViewVRAMPointer + 1], a
xor a
ld [wMapViewVRAMPointer], a
- ld [hSCY], a
- ld [hSCX], a
+ ldh [hSCY], a
+ ldh [hSCX], a
ld [wWalkCounter], a
ld [wUnusedD119], a
ld [wWalkBikeSurfStateCopy], a
@@ -2337,12 +2337,12 @@
ld [wSpriteSetID], a
call LoadTextBoxTilePatterns
call LoadMapHeader
- callba InitMapSprites ; load tile pattern data for sprites
+ farcall InitMapSprites ; load tile pattern data for sprites
call LoadTileBlockMap
call LoadTilesetTilePatternData
call LoadCurrentMapView
; copy current map view to VRAM
- coord hl, 0, 0
+ hlcoord 0, 0
ld de, vBGMap0
ld b, 18
.vramCopyLoop
@@ -2377,7 +2377,7 @@
call PlayDefaultMusicFadeOutCurrent
.restoreRomBank
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
@@ -2393,10 +2393,10 @@
ld hl, MapHeaderBanks
add hl, bc
ld a, [hl]
- ld [hMapROMBank], a ; save map ROM bank
+ ldh [hMapROMBank], a ; save map ROM bank
call BankswitchBack
- ld a, [hMapROMBank]
- ld [hLoadedROMBank], a
+ ldh a, [hMapROMBank]
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a ; switch to map ROM bank
pop bc
pop hl
@@ -2421,3 +2421,54 @@
ld hl, LoadPlayerSpriteGraphics
call Bankswitch
jp PlayDefaultMusic ; update map/player state?
+
+CheckForUserInterruption::
+; Return carry if Up+Select+B, Start or A are pressed in c frames.
+; Used only in the intro and title screen.
+ call DelayFrame
+
+ push bc
+ call JoypadLowSensitivity
+ pop bc
+
+ ldh a, [hJoyHeld]
+ cp D_UP + SELECT + B_BUTTON
+ jr z, .input
+
+ ldh a, [hJoy5]
+ and START | A_BUTTON
+ jr nz, .input
+
+ dec c
+ jr nz, CheckForUserInterruption
+
+ and a
+ ret
+
+.input
+ scf
+ ret
+
+; function to load position data for destination warp when switching maps
+; INPUT:
+; a = ID of destination warp within destination map
+LoadDestinationWarpPosition::
+ ld b, a
+ ldh a, [hLoadedROMBank]
+ push af
+ ld a, [wPredefParentBank]
+ ldh [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ ld a, b
+ add a
+ add a
+ ld c, a
+ ld b, 0
+ add hl, bc
+ ld bc, 4
+ ld de, wCurrentTileBlockMapViewPointer
+ call CopyData
+ pop af
+ ldh [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ ret
--- /dev/null
+++ b/home/palettes.asm
@@ -1,0 +1,57 @@
+RestoreScreenTilesAndReloadTilePatterns::
+ call ClearSprites
+ ld a, $1
+ ld [wUpdateSpritesEnabled], a
+ call ReloadMapSpriteTilePatterns
+ call LoadScreenTilesFromBuffer2
+ call LoadTextBoxTilePatterns
+ call RunDefaultPaletteCommand
+ jr Delay3
+
+GBPalWhiteOutWithDelay3::
+ call GBPalWhiteOut
+
+Delay3::
+; The bg map is updated each frame in thirds.
+; Wait three frames to let the bg map fully update.
+ ld c, 3
+ jp DelayFrames
+
+GBPalNormal::
+; Reset BGP and OBP0.
+ ld a, %11100100 ; 3210
+ ldh [rBGP], a
+ ld a, %11010000 ; 3100
+ ldh [rOBP0], a
+ ret
+
+GBPalWhiteOut::
+; White out all palettes.
+ xor a
+ ldh [rBGP], a
+ ldh [rOBP0], a
+ ldh [rOBP1], a
+ ret
+
+RunDefaultPaletteCommand::
+ ld b, SET_PAL_DEFAULT
+RunPaletteCommand::
+ ld a, [wOnSGB]
+ and a
+ ret z
+ predef_jump _RunPaletteCommand
+
+GetHealthBarColor::
+; Return at hl the palette of
+; an HP bar e pixels long.
+ ld a, e
+ cp 27
+ ld d, 0 ; green
+ jr nc, .gotColor
+ cp 10
+ inc d ; yellow
+ jr nc, .gotColor
+ inc d ; red
+.gotColor
+ ld [hl], d
+ ret
--- /dev/null
+++ b/home/pathfinding.asm
@@ -1,0 +1,65 @@
+; calculates the difference |a-b|, setting carry flag if a<b
+CalcDifference::
+ sub b
+ ret nc
+ cpl
+ add $1
+ scf
+ ret
+
+MoveSprite::
+; move the sprite [hSpriteIndex] with the movement pointed to by de
+; actually only copies the movement data to wNPCMovementDirections for later
+ call SetSpriteMovementBytesToFF
+MoveSprite_::
+ push hl
+ push bc
+ call GetSpriteMovementByte1Pointer
+ xor a
+ ld [hl], a
+ ld hl, wNPCMovementDirections
+ ld c, 0
+
+.loop
+ ld a, [de]
+ ld [hli], a
+ inc de
+ inc c
+ cp $FF ; have we reached the end of the movement data?
+ jr nz, .loop
+
+ ld a, c
+ ld [wNPCNumScriptedSteps], a ; number of steps taken
+
+ pop bc
+ ld hl, wd730
+ set 0, [hl]
+ pop hl
+ xor a
+ ld [wOverrideSimulatedJoypadStatesMask], a
+ ld [wSimulatedJoypadStatesEnd], a
+ dec a
+ ld [wJoyIgnore], a
+ ld [wWastedByteCD3A], a
+ ret
+
+; divides [hDividend2] by [hDivisor2] and stores the quotient in [hQuotient2]
+DivideBytes::
+ push hl
+ ld hl, hQuotient2
+ xor a
+ ld [hld], a
+ ld a, [hld]
+ and a
+ jr z, .done
+ ld a, [hli]
+.loop
+ sub [hl]
+ jr c, .done
+ inc hl
+ inc [hl]
+ dec hl
+ jr .loop
+.done
+ pop hl
+ ret
--- a/home/pics.asm
+++ b/home/pics.asm
@@ -63,7 +63,7 @@
LoadUncompressedSpriteData::
push de
and $f
- ld [hSpriteWidth], a ; each byte contains 8 pixels (in 1bpp), so tiles=bytes for width
+ ldh [hSpriteWidth], a ; each byte contains 8 pixels (in 1bpp), so tiles=bytes for width
ld b, a
ld a, $7
sub b ; 7-w
@@ -74,7 +74,7 @@
add a
add a
sub b ; 7*((8-w)/2) ; skip for horizontal center (in tiles)
- ld [hSpriteOffset], a
+ ldh [hSpriteOffset], a
ld a, c
swap a
and $f
@@ -82,16 +82,16 @@
add a
add a
add a ; 8*tiles is height in bytes
- ld [hSpriteHeight], a
+ ldh [hSpriteHeight], a
ld a, $7
sub b ; 7-h ; skip for vertical center (in tiles, relative to current column)
ld b, a
- ld a, [hSpriteOffset]
+ ldh a, [hSpriteOffset]
add b ; 7*((8-w)/2) + 7-h ; combined overall offset (in tiles)
add a
add a
add a ; 8*(7*((8-w)/2) + 7-h) ; combined overall offset (in bytes)
- ld [hSpriteOffset], a
+ ldh [hSpriteOffset], a
xor a
ld [MBC1SRamBank], a
ld hl, sSpriteBuffer0
@@ -110,15 +110,15 @@
; copies and aligns the sprite data properly inside the sprite buffer
; sprite buffers are 7*7 tiles in size, the loaded sprite is centered within this area
AlignSpriteDataCentered::
- ld a, [hSpriteOffset]
+ ldh a, [hSpriteOffset]
ld b, $0
ld c, a
add hl, bc
- ld a, [hSpriteWidth]
+ ldh a, [hSpriteWidth]
.columnLoop
push af
push hl
- ld a, [hSpriteHeight]
+ ldh a, [hSpriteHeight]
ld c, a
.columnInnerLoop
ld a, [de]
@@ -157,7 +157,7 @@
ld de, sSpriteBuffer1 + (SPRITEBUFFERSIZE - 1) ; source 2: end of buffer 1
ld bc, sSpriteBuffer0 + (SPRITEBUFFERSIZE - 1) ; source 1: end of buffer 0
ld a, SPRITEBUFFERSIZE/2 ; $c4
- ld [hSpriteInterlaceCounter], a
+ ldh [hSpriteInterlaceCounter], a
.interlaceLoop
ld a, [de]
dec de
@@ -171,9 +171,9 @@
ld a, [bc]
dec bc
ld [hld], a ; write byte of source 1
- ld a, [hSpriteInterlaceCounter]
+ ldh a, [hSpriteInterlaceCounter]
dec a
- ld [hSpriteInterlaceCounter], a
+ ldh [hSpriteInterlaceCounter], a
jr nz, .interlaceLoop
ld a, [wSpriteFlipped]
and a
@@ -191,6 +191,6 @@
pop hl
ld de, sSpriteBuffer1
ld c, (2*SPRITEBUFFERSIZE)/16 ; $31, number of 16 byte chunks to be copied
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
ld b, a
jp CopyVideoData
--- a/home/pokemon.asm
+++ b/home/pokemon.asm
@@ -81,7 +81,7 @@
; wLoadedMon = base address of pokemon data
; wMonHeader = base address of base stats
LoadMonData::
- jpab LoadMonData_
+ jpfar LoadMonData_
OverwritewMoves::
; Write c to [wMoves + b]. Unused.
@@ -122,18 +122,18 @@
ld de, vFrontPic
call LoadMonFrontSprite
pop hl
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, BANK(CopyUncompressedPicToHL)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
xor a
- ld [hStartTileID], a
+ ldh [hStartTileID], a
call CopyUncompressedPicToHL
xor a
ld [wSpriteFlipped], a
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
@@ -175,10 +175,10 @@
ret
DisplayPartyMenu::
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
push af
xor a
- ld [hTilesetType], a
+ ldh [hTilesetType], a
call GBPalWhiteOutWithDelay3
call ClearSprites
call PartyMenuInit
@@ -186,10 +186,10 @@
jp HandlePartyMenuInput
GoBackToPartyMenu::
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
push af
xor a
- ld [hTilesetType], a
+ ldh [hTilesetType], a
call PartyMenuInit
call RedrawPartyMenu
jp HandlePartyMenuInput
@@ -251,7 +251,7 @@
and a
jp nz, .swappingPokemon
pop af
- ld [hTilesetType], a
+ ldh [hTilesetType], a
bit 1, b
jr nz, .noPokemonChosen
ld a, [wPartyCount]
@@ -277,7 +277,7 @@
bit 1, b ; was the B button pressed?
jr z, .handleSwap ; if not, handle swapping the pokemon
.cancelSwap ; if the B button was pressed
- callba ErasePartyMenuCursors
+ farcall ErasePartyMenuCursors
xor a
ld [wMenuItemToSwap], a
ld [wPartyMenuTypeOrMessageID], a
@@ -286,7 +286,7 @@
.handleSwap
ld a, [wCurrentMenuItem]
ld [wWhichPokemon], a
- callba SwitchPartyMon
+ farcall SwitchPartyMon
jr HandlePartyMenuInput
DrawPartyMenu::
@@ -325,15 +325,15 @@
ret
PrintStatusConditionNotFainted::
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, BANK(PrintStatusAilment)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call PrintStatusAilment ; print status condition
pop bc
ld a, b
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
@@ -382,10 +382,10 @@
; INPUT:
; [wd0b5] = pokemon ID
GetMonHeader::
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, BANK(BaseStats)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
push bc
push de
@@ -440,7 +440,7 @@
pop de
pop bc
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
--- a/home/predef.asm
+++ b/home/predef.asm
@@ -8,18 +8,18 @@
; A hack for LoadDestinationWarpPosition.
; See LoadTilesetHeader (predef $19).
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
ld [wPredefParentBank], a
push af
ld a, BANK(GetPredefPointer)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call GetPredefPointer
ld a, [wPredefBank]
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld de, .done
@@ -28,7 +28,7 @@
.done
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
--- /dev/null
+++ b/home/predef_text.asm
@@ -1,0 +1,28 @@
+PrintPredefTextID::
+ ldh [hSpriteIndexOrTextID], a
+ ld hl, TextPredefs
+ call SetMapTextPointer
+ ld hl, wTextPredefFlag
+ set 0, [hl]
+ call DisplayTextID
+
+RestoreMapTextPointer::
+ ld hl, wMapTextPtr
+ ldh a, [hSavedMapTextPtr]
+ ld [hli], a
+ ldh a, [hSavedMapTextPtr + 1]
+ ld [hl], a
+ ret
+
+SetMapTextPointer::
+ ld a, [wMapTextPtr]
+ ldh [hSavedMapTextPtr], a
+ ld a, [wMapTextPtr + 1]
+ ldh [hSavedMapTextPtr + 1], a
+ ld a, l
+ ld [wMapTextPtr], a
+ ld a, h
+ ld [wMapTextPtr + 1], a
+ ret
+
+INCLUDE "data/text_predef_pointers.asm"
--- a/home/print_num.asm
+++ b/home/print_num.asm
@@ -6,9 +6,9 @@
; in bits 7 and 6 of b respectively.
push bc
xor a
- ld [hPastLeadingZeros], a
- ld [hNumToPrint], a
- ld [hNumToPrint + 1], a
+ ldh [hPastLeadingZeros], a
+ ldh [hNumToPrint], a
+ ldh [hNumToPrint + 1], a
ld a, b
and $f
cp 1
@@ -17,26 +17,26 @@
jr z, .word
.long
ld a, [de]
- ld [hNumToPrint], a
+ ldh [hNumToPrint], a
inc de
ld a, [de]
- ld [hNumToPrint + 1], a
+ ldh [hNumToPrint + 1], a
inc de
ld a, [de]
- ld [hNumToPrint + 2], a
+ ldh [hNumToPrint + 2], a
jr .start
.word
ld a, [de]
- ld [hNumToPrint + 1], a
+ ldh [hNumToPrint + 1], a
inc de
ld a, [de]
- ld [hNumToPrint + 2], a
+ ldh [hNumToPrint + 2], a
jr .start
.byte
ld a, [de]
- ld [hNumToPrint + 2], a
+ ldh [hNumToPrint + 2], a
.start
push de
@@ -66,7 +66,7 @@
ELSE
xor a
ENDC
- ld [hPowerOf10 + 0], a
+ ldh [hPowerOf10 + 0], a
IF (\1) / $100
ld a, \1 / $100 % $100
@@ -73,10 +73,10 @@
ELSE
xor a
ENDC
- ld [hPowerOf10 + 1], a
+ ldh [hPowerOf10 + 1], a
ld a, \1 / $1 % $100
- ld [hPowerOf10 + 2], a
+ ldh [hPowerOf10 + 2], a
call .PrintDigit
call .NextDigit
@@ -90,7 +90,7 @@
.tens
ld c, 0
- ld a, [hNumToPrint + 2]
+ ldh a, [hNumToPrint + 2]
.mod
cp 10
jr c, .ok
@@ -100,9 +100,9 @@
.ok
ld b, a
- ld a, [hPastLeadingZeros]
+ ldh a, [hPastLeadingZeros]
or c
- ld [hPastLeadingZeros], a
+ ldh [hPastLeadingZeros], a
jr nz, .past
call .PrintLeadingZero
jr .next
@@ -127,67 +127,67 @@
; Print the quotient, and keep the modulus.
ld c, 0
.loop
- ld a, [hPowerOf10]
+ ldh a, [hPowerOf10]
ld b, a
- ld a, [hNumToPrint]
- ld [hSavedNumToPrint], a
+ ldh a, [hNumToPrint]
+ ldh [hSavedNumToPrint], a
cp b
jr c, .underflow0
sub b
- ld [hNumToPrint], a
- ld a, [hPowerOf10 + 1]
+ ldh [hNumToPrint], a
+ ldh a, [hPowerOf10 + 1]
ld b, a
- ld a, [hNumToPrint + 1]
- ld [hSavedNumToPrint + 1], a
+ ldh a, [hNumToPrint + 1]
+ ldh [hSavedNumToPrint + 1], a
cp b
jr nc, .noborrow1
- ld a, [hNumToPrint]
+ ldh a, [hNumToPrint]
or 0
jr z, .underflow1
dec a
- ld [hNumToPrint], a
- ld a, [hNumToPrint + 1]
+ ldh [hNumToPrint], a
+ ldh a, [hNumToPrint + 1]
.noborrow1
sub b
- ld [hNumToPrint + 1], a
- ld a, [hPowerOf10 + 2]
+ ldh [hNumToPrint + 1], a
+ ldh a, [hPowerOf10 + 2]
ld b, a
- ld a, [hNumToPrint + 2]
- ld [hSavedNumToPrint + 2], a
+ ldh a, [hNumToPrint + 2]
+ ldh [hSavedNumToPrint + 2], a
cp b
jr nc, .noborrow2
- ld a, [hNumToPrint + 1]
+ ldh a, [hNumToPrint + 1]
and a
jr nz, .borrowed
- ld a, [hNumToPrint]
+ ldh a, [hNumToPrint]
and a
jr z, .underflow2
dec a
- ld [hNumToPrint], a
+ ldh [hNumToPrint], a
xor a
.borrowed
dec a
- ld [hNumToPrint + 1], a
- ld a, [hNumToPrint + 2]
+ ldh [hNumToPrint + 1], a
+ ldh a, [hNumToPrint + 2]
.noborrow2
sub b
- ld [hNumToPrint + 2], a
+ ldh [hNumToPrint + 2], a
inc c
jr .loop
.underflow2
- ld a, [hSavedNumToPrint + 1]
- ld [hNumToPrint + 1], a
+ ldh a, [hSavedNumToPrint + 1]
+ ldh [hNumToPrint + 1], a
.underflow1
- ld a, [hSavedNumToPrint]
- ld [hNumToPrint], a
+ ldh a, [hSavedNumToPrint]
+ ldh [hNumToPrint], a
.underflow0
- ld a, [hPastLeadingZeros]
+ ldh a, [hPastLeadingZeros]
or c
jr z, .PrintLeadingZero
@@ -194,7 +194,7 @@
ld a, "0"
add c
ld [hl], a
- ld [hPastLeadingZeros], a
+ ldh [hPastLeadingZeros], a
ret
.PrintLeadingZero:
@@ -211,7 +211,7 @@
jr nz, .inc
bit BIT_LEFT_ALIGN, d
jr z, .inc
- ld a, [hPastLeadingZeros]
+ ldh a, [hPastLeadingZeros]
and a
ret z
.inc
--- /dev/null
+++ b/home/print_text.asm
@@ -1,0 +1,45 @@
+; This function is used to wait a short period after printing a letter to the
+; screen unless the player presses the A/B button or the delay is turned off
+; through the [wd730] or [wLetterPrintingDelayFlags] flags.
+PrintLetterDelay::
+ ld a, [wd730]
+ bit 6, a
+ ret nz
+ ld a, [wLetterPrintingDelayFlags]
+ bit 1, a
+ ret z
+ push hl
+ push de
+ push bc
+ ld a, [wLetterPrintingDelayFlags]
+ bit 0, a
+ jr z, .waitOneFrame
+ ld a, [wOptions]
+ and $f
+ ldh [hFrameCounter], a
+ jr .checkButtons
+.waitOneFrame
+ ld a, 1
+ ldh [hFrameCounter], a
+.checkButtons
+ call Joypad
+ ldh a, [hJoyHeld]
+.checkAButton
+ bit 0, a ; is the A button pressed?
+ jr z, .checkBButton
+ jr .endWait
+.checkBButton
+ bit 1, a ; is the B button pressed?
+ jr z, .buttonsNotPressed
+.endWait
+ call DelayFrame
+ jr .done
+.buttonsNotPressed ; if neither A nor B is pressed
+ ldh a, [hFrameCounter]
+ and a
+ jr nz, .checkButtons
+.done
+ pop bc
+ pop de
+ pop hl
+ ret
--- /dev/null
+++ b/home/random.asm
@@ -1,0 +1,12 @@
+Random::
+; Return a random number in a.
+; For battles, use BattleRandom.
+ push hl
+ push de
+ push bc
+ farcall Random_
+ ldh a, [hRandomAdd]
+ pop bc
+ pop de
+ pop hl
+ ret
--- /dev/null
+++ b/home/reload_sprites.asm
@@ -1,0 +1,19 @@
+; Copy the current map's sprites' tile patterns to VRAM again after they have
+; been overwritten by other tile patterns.
+ReloadMapSpriteTilePatterns::
+ ld hl, wFontLoaded
+ ld a, [hl]
+ push af
+ res 0, [hl]
+ push hl
+ xor a
+ ld [wSpriteSetID], a
+ call DisableLCD
+ farcall InitMapSprites
+ call EnableLCD
+ pop hl
+ pop af
+ ld [hl], a
+ call LoadPlayerSpriteGraphics
+ call LoadFontTilePatterns
+ jp UpdateSprites
--- /dev/null
+++ b/home/reload_tiles.asm
@@ -1,0 +1,41 @@
+; reloads text box tile patterns, current map view, and tileset tile patterns
+ReloadMapData::
+ ldh a, [hLoadedROMBank]
+ push af
+ ld a, [wCurMap]
+ call SwitchToMapRomBank
+ call DisableLCD
+ call LoadTextBoxTilePatterns
+ call LoadCurrentMapView
+ call LoadTilesetTilePatternData
+ call EnableLCD
+ pop af
+ ldh [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ ret
+
+; reloads tileset tile patterns
+ReloadTilesetTilePatterns::
+ ldh a, [hLoadedROMBank]
+ push af
+ ld a, [wCurMap]
+ call SwitchToMapRomBank
+ call DisableLCD
+ call LoadTilesetTilePatternData
+ call EnableLCD
+ pop af
+ ldh [hLoadedROMBank], a
+ ld [MBC1RomBank], a
+ ret
+
+; shows the town map and lets the player choose a destination to fly to
+ChooseFlyDestination::
+ ld hl, wd72e
+ res 4, [hl]
+ farjp LoadTownMap_Fly
+
+; causes the text box to close without waiting for a button press after displaying text
+DisableWaitingAfterTextDisplay::
+ ld a, $01
+ ld [wDoNotWaitForButtonPressAfterDisplayingText], a
+ ret
--- /dev/null
+++ b/home/reset_player_sprite.asm
@@ -1,0 +1,20 @@
+ResetPlayerSpriteData::
+ ld hl, wSpriteStateData1
+ call ResetPlayerSpriteData_ClearSpriteData
+ ld hl, wSpriteStateData2
+ call ResetPlayerSpriteData_ClearSpriteData
+ ld a, $1
+ ld [wSpritePlayerStateData1PictureID], a
+ ld [wSpritePlayerStateData2ImageBaseOffset], a
+ ld hl, wSpritePlayerStateData1YPixels
+ ld [hl], $3c ; set Y screen pos
+ inc hl
+ inc hl
+ ld [hl], $40 ; set X screen pos
+ ret
+
+; overwrites sprite data with zeroes
+ResetPlayerSpriteData_ClearSpriteData::
+ ld bc, $10
+ xor a
+ jp FillMemory
--- a/home/serial.asm
+++ b/home/serial.asm
@@ -3,46 +3,46 @@
push bc
push de
push hl
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
inc a
jr z, .connectionNotYetEstablished
- ld a, [rSB]
- ld [hSerialReceiveData], a
- ld a, [hSerialSendData]
- ld [rSB], a
- ld a, [hSerialConnectionStatus]
+ ldh a, [rSB]
+ ldh [hSerialReceiveData], a
+ ldh a, [hSerialSendData]
+ ldh [rSB], a
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr z, .done
; using external clock
ld a, START_TRANSFER_EXTERNAL_CLOCK
- ld [rSC], a
+ ldh [rSC], a
jr .done
.connectionNotYetEstablished
- ld a, [rSB]
- ld [hSerialReceiveData], a
- ld [hSerialConnectionStatus], a
+ ldh a, [rSB]
+ ldh [hSerialReceiveData], a
+ ldh [hSerialConnectionStatus], a
cp USING_INTERNAL_CLOCK
jr z, .usingInternalClock
; using external clock
xor a
- ld [rSB], a
+ ldh [rSB], a
ld a, $3
- ld [rDIV], a
+ ldh [rDIV], a
.waitLoop
- ld a, [rDIV]
+ ldh a, [rDIV]
bit 7, a
jr nz, .waitLoop
ld a, START_TRANSFER_EXTERNAL_CLOCK
- ld [rSC], a
+ ldh [rSC], a
jr .done
.usingInternalClock
xor a
- ld [rSB], a
+ ldh [rSB], a
.done
ld a, $1
- ld [hSerialReceivedNewData], a
+ ldh [hSerialReceivedNewData], a
ld a, SERIAL_NO_DATA_BYTE
- ld [hSerialSendData], a
+ ldh [hSerialSendData], a
pop hl
pop de
pop bc
@@ -54,10 +54,10 @@
; bc = length of data
Serial_ExchangeBytes::
ld a, 1
- ld [hSerialIgnoringInitialData], a
+ ldh [hSerialIgnoringInitialData], a
.loop
ld a, [hl]
- ld [hSerialSendData], a
+ ldh [hSerialSendData], a
call Serial_ExchangeByte
push bc
ld b, a
@@ -66,7 +66,7 @@
.waitLoop
dec a
jr nz, .waitLoop
- ld a, [hSerialIgnoringInitialData]
+ ldh a, [hSerialIgnoringInitialData]
and a
ld a, b
pop bc
@@ -75,7 +75,7 @@
cp SERIAL_PREAMBLE_BYTE
jr nz, .loop
xor a
- ld [hSerialIgnoringInitialData], a
+ ldh [hSerialIgnoringInitialData], a
jr .loop
.storeReceivedByte
ld [de], a
@@ -88,17 +88,17 @@
Serial_ExchangeByte::
xor a
- ld [hSerialReceivedNewData], a
- ld a, [hSerialConnectionStatus]
+ ldh [hSerialReceivedNewData], a
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr nz, .loop
ld a, START_TRANSFER_INTERNAL_CLOCK
- ld [rSC], a
+ ldh [rSC], a
.loop
- ld a, [hSerialReceivedNewData]
+ ldh a, [hSerialReceivedNewData]
and a
jr nz, .ok
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_EXTERNAL_CLOCK
jr nz, .doNotIncrementUnknownCounter
call IsUnknownCounterZero
@@ -116,7 +116,7 @@
jr nz, .loop
jp SetUnknownCounterToFFFF
.doNotIncrementUnknownCounter
- ld a, [rIE]
+ ldh a, [rIE]
and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
cp (1 << SERIAL)
jr nz, .loop
@@ -128,7 +128,7 @@
dec a
ld [wUnknownSerialCounter2 + 1], a
jr nz, .loop
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_EXTERNAL_CLOCK
jr z, .ok
ld a, 255
@@ -137,8 +137,8 @@
jr nz, .waitLoop
.ok
xor a
- ld [hSerialReceivedNewData], a
- ld a, [rIE]
+ ldh [hSerialReceivedNewData], a
+ ldh a, [rIE]
and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
sub (1 << SERIAL)
jr nz, .skipReloadingUnknownCounter2
@@ -146,7 +146,7 @@
ld a, $50
ld [wUnknownSerialCounter2 + 1], a
.skipReloadingUnknownCounter2
- ld a, [hSerialReceiveData]
+ ldh a, [hSerialReceiveData]
cp SERIAL_NO_DATA_BYTE
ret nz
call IsUnknownCounterZero
@@ -164,13 +164,13 @@
call IsUnknownCounterZero
jr z, SetUnknownCounterToFFFF
.done
- ld a, [rIE]
+ ldh a, [rIE]
and (1 << SERIAL) | (1 << TIMER) | (1 << LCD_STAT) | (1 << VBLANK)
cp (1 << SERIAL)
ld a, SERIAL_NO_DATA_BYTE
ret z
ld a, [hl]
- ld [hSerialSendData], a
+ ldh [hSerialSendData], a
call DelayFrame
jp Serial_ExchangeByte
@@ -203,18 +203,18 @@
ld de, wLinkMenuSelectionReceiveBuffer
ld c, 2 ; number of bytes to save
ld a, 1
- ld [hSerialIgnoringInitialData], a
+ ldh [hSerialIgnoringInitialData], a
.loop
call DelayFrame
ld a, [hl]
- ld [hSerialSendData], a
+ ldh [hSerialSendData], a
call Serial_ExchangeByte
ld b, a
inc hl
- ld a, [hSerialIgnoringInitialData]
+ ldh a, [hSerialIgnoringInitialData]
and a
ld a, 0
- ld [hSerialIgnoringInitialData], a
+ ldh [hSerialIgnoringInitialData], a
jr nz, .loop
ld a, b
ld [de], a
@@ -225,7 +225,7 @@
Serial_PrintWaitingTextAndSyncAndExchangeNybble::
call SaveScreenTilesToBuffer1
- callab PrintWaitingText
+ callfar PrintWaitingText
call Serial_SyncAndExchangeNybble
jp LoadScreenTilesFromBuffer1
@@ -273,20 +273,20 @@
call .doExchange
ld a, [wSerialExchangeNybbleSendData]
add $60
- ld [hSerialSendData], a
- ld a, [hSerialConnectionStatus]
+ ldh [hSerialSendData], a
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
jr nz, .doExchange
ld a, START_TRANSFER_INTERNAL_CLOCK
- ld [rSC], a
+ ldh [rSC], a
.doExchange
- ld a, [hSerialReceiveData]
+ ldh a, [hSerialReceiveData]
ld [wSerialExchangeNybbleTempReceiveData], a
and $f0
cp $60
ret nz
xor a
- ld [hSerialReceiveData], a
+ ldh [hSerialReceiveData], a
ld a, [wSerialExchangeNybbleTempReceiveData]
and $f
ld [wSerialExchangeNybbleReceiveData], a
@@ -294,19 +294,19 @@
Serial_SendZeroByte::
xor a
- ld [hSerialSendData], a
- ld a, [hSerialConnectionStatus]
+ ldh [hSerialSendData], a
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
ret nz
ld a, START_TRANSFER_INTERNAL_CLOCK
- ld [rSC], a
+ ldh [rSC], a
ret
Serial_TryEstablishingExternallyClockedConnection::
ld a, ESTABLISH_CONNECTION_WITH_EXTERNAL_CLOCK
- ld [rSB], a
+ ldh [rSB], a
xor a
- ld [hSerialReceiveData], a
+ ldh [hSerialReceiveData], a
ld a, START_TRANSFER_EXTERNAL_CLOCK
- ld [rSC], a
+ ldh [rSC], a
ret
--- a/home/start_menu.asm
+++ b/home/start_menu.asm
@@ -1,6 +1,6 @@
DisplayStartMenu::
ld a, BANK(StartMenu_Pokedex)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld a, [wWalkBikeSurfState] ; walking/biking/surfing
ld [wWalkBikeSurfStateCopy], a
@@ -8,8 +8,8 @@
call PlaySound
RedisplayStartMenu::
- callba DrawStartMenu
- callba PrintSafariZoneSteps ; print Safari Zone info, if in Safari Zone
+ farcall DrawStartMenu
+ farcall PrintSafariZoneSteps ; print Safari Zone info, if in Safari Zone
call UpdateSprites
.loop
call HandleMenuInput
@@ -78,7 +78,7 @@
; EXIT falls through to here
CloseStartMenu::
call Joypad
- ld a, [hJoyPressed]
+ ldh a, [hJoyPressed]
bit 0, a ; was A button newly pressed?
jr nz, CloseStartMenu
call LoadTextBoxTilePatterns
--- a/home/text.asm
+++ b/home/text.asm
@@ -62,7 +62,7 @@
cp "<NEXT>"
jr nz, .NotNext
ld bc, 2 * SCREEN_WIDTH
- ld a, [hFlagsFFF6]
+ ldh a, [hFlagsFFF6]
bit 2, a
jr z, .ok
ld bc, SCREEN_WIDTH
@@ -76,7 +76,7 @@
cp "<LINE>"
jr nz, .NotLine
pop hl
- coord hl, 1, 16
+ hlcoord 1, 16
push hl
jp NextChar
@@ -141,12 +141,12 @@
PlacePKMN:: print_name PlacePKMNText
PlaceMoveTargetsName::
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
xor 1
jr PlaceMoveUsersName.place
PlaceMoveUsersName::
- ld a, [hWhoseTurn]
+ ldh a, [hWhoseTurn]
.place:
push de
@@ -207,12 +207,12 @@
cp LINK_STATE_BATTLING
jp z, .ok
ld a, "▼"
- Coorda 18, 16
+ ldcoord_a 18, 16
.ok
call ProtectedDelay3
call ManualTextScroll
ld a, " "
- Coorda 18, 16
+ ldcoord_a 18, 16
DoneText::
pop hl
@@ -226,25 +226,25 @@
Paragraph::
push de
ld a, "▼"
- Coorda 18, 16
+ ldcoord_a 18, 16
call ProtectedDelay3
call ManualTextScroll
- coord hl, 1, 13
+ hlcoord 1, 13
lb bc, 4, 18
call ClearScreenArea
ld c, 20
call DelayFrames
pop de
- coord hl, 1, 14
+ hlcoord 1, 14
jp NextChar
PageChar::
push de
ld a, "▼"
- Coorda 18, 16
+ ldcoord_a 18, 16
call ProtectedDelay3
call ManualTextScroll
- coord hl, 1, 10
+ hlcoord 1, 10
lb bc, 7, 18
call ClearScreenArea
ld c, 20
@@ -251,24 +251,24 @@
call DelayFrames
pop de
pop hl
- coord hl, 1, 11
+ hlcoord 1, 11
push hl
jp NextChar
_ContText::
ld a, "▼"
- Coorda 18, 16
+ ldcoord_a 18, 16
call ProtectedDelay3
push de
call ManualTextScroll
pop de
ld a, " "
- Coorda 18, 16
+ ldcoord_a 18, 16
_ContTextNoPause::
push de
call ScrollTextUpOneLine
call ScrollTextUpOneLine
- coord hl, 1, 16
+ hlcoord 1, 16
pop de
jp NextChar
@@ -277,8 +277,8 @@
; first time, copy the two rows of text to the "in between" rows that are usually emtpy
; second time, copy the bottom row of text into the top row of text
ScrollTextUpOneLine::
- coord hl, 0, 14 ; top row of text
- coord de, 0, 13 ; empty line above text
+ hlcoord 0, 14 ; top row of text
+ decoord 0, 13 ; empty line above text
ld b, SCREEN_WIDTH * 3
.copyText
ld a, [hli]
@@ -286,7 +286,7 @@
inc de
dec b
jr nz, .copyText
- coord hl, 1, 16
+ hlcoord 1, 16
ld a, " "
ld b, SCREEN_WIDTH - 2
.clearText
@@ -313,7 +313,7 @@
push af
set 1, a
ld e, a
- ld a, [hClearLetterPrintingDelayFlags]
+ ldh a, [hClearLetterPrintingDelayFlags]
xor e
ld [wLetterPrintingDelayFlags], a
ld a, c
@@ -424,7 +424,7 @@
TextCommand_LOW::
; write text at (1,16)
pop hl
- coord bc, 1, 16 ; second line of dialogue text box
+ bccoord 1, 16 ; second line of dialogue text box
jp NextTextCommand
TextCommand_PROMPT_BUTTON::
@@ -433,12 +433,12 @@
cp LINK_STATE_BATTLING
jp z, TextCommand_WAIT_BUTTON
ld a, "▼"
- Coorda 18, 16 ; place down arrow in lower right corner of dialogue text box
+ ldcoord_a 18, 16 ; place down arrow in lower right corner of dialogue text box
push bc
call ManualTextScroll ; blink arrow and wait for A or B to be pressed
pop bc
ld a, " "
- Coorda 18, 16 ; overwrite down arrow with blank space
+ ldcoord_a 18, 16 ; overwrite down arrow with blank space
pop hl
jp NextTextCommand
@@ -446,11 +446,11 @@
; pushes text up two lines and sets the BC cursor to the border tile
; below the first character column of the text box.
ld a, " "
- Coorda 18, 16 ; place blank space in lower right corner of dialogue text box
+ ldcoord_a 18, 16 ; place blank space in lower right corner of dialogue text box
call ScrollTextUpOneLine
call ScrollTextUpOneLine
pop hl
- coord bc, 1, 16 ; second line of dialogue text box
+ bccoord 1, 16 ; second line of dialogue text box
jp NextTextCommand
TextCommand_START_ASM::
@@ -489,7 +489,7 @@
; wait for button press or 30 frames
push bc
call Joypad
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
and A_BUTTON | B_BUTTON
jr nz, .done
ld c, 30 ; half a second
@@ -565,7 +565,7 @@
push de
call Joypad
pop de
- ld a, [hJoyHeld] ; joypad state
+ ldh a, [hJoyHeld] ; joypad state
and A_BUTTON | B_BUTTON
jr nz, .next ; if so, skip the delay
ld c, 10
@@ -590,7 +590,7 @@
TextCommand_FAR::
; write text from a different bank (little endian)
pop hl
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, [hli]
@@ -599,7 +599,7 @@
ld d, a
ld a, [hli]
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
push hl
@@ -609,7 +609,7 @@
pop hl
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
jp NextTextCommand
--- a/home/text_script.asm
+++ b/home/text_script.asm
@@ -1,9 +1,9 @@
; this function is used to display sign messages, sprite dialog, etc.
; INPUT: [hSpriteIndexOrTextID] = sprite ID or text ID
DisplayTextID::
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
- callba DisplayTextIDInit ; initialization
+ farcall DisplayTextIDInit ; initialization
ld hl, wTextPredefFlag
bit 0, [hl]
res 0, [hl]
@@ -12,13 +12,13 @@
call SwitchToMapRomBank
.skipSwitchToMapBank
ld a, 30 ; half a second
- ld [hFrameCounter], a ; used as joypad poll timer
+ ldh [hFrameCounter], a ; used as joypad poll timer
ld hl, wMapTextPtr
ld a, [hli]
ld h, [hl]
ld l, a ; hl = map text pointer
ld d, $00
- ld a, [hSpriteIndexOrTextID] ; text ID
+ ldh a, [hSpriteIndexOrTextID] ; text ID
ld [wSpriteIndex], a
dict TEXT_START_MENU, DisplayStartMenu
@@ -29,7 +29,7 @@
ld a, [wNumSprites]
ld e, a
- ld a, [hSpriteIndexOrTextID] ; sprite ID
+ ldh a, [hSpriteIndexOrTextID] ; sprite ID
cp e
jr z, .spriteHandling
jr nc, .skipSpriteHandling
@@ -38,11 +38,11 @@
push hl
push de
push bc
- callba UpdateSpriteFacingOffsetAndDelayMovement ; update the graphics of the sprite the player is talking to (to face the right direction)
+ farcall UpdateSpriteFacingOffsetAndDelayMovement ; update the graphics of the sprite the player is talking to (to face the right direction)
pop bc
pop de
ld hl, wMapSpriteData ; NPC text entries
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
dec a
add a
add l
@@ -79,9 +79,9 @@
dict TX_SCRIPT_PLAYERS_PC, TextScript_ItemStoragePC
dict TX_SCRIPT_BILLS_PC, TextScript_BillsPC
dict TX_SCRIPT_POKECENTER_PC, TextScript_PokemonCenterPC
- dict2 TX_SCRIPT_VENDING_MACHINE, callba VendingMachineMenu
+ dict2 TX_SCRIPT_VENDING_MACHINE, farcall VendingMachineMenu
dict TX_SCRIPT_PRIZE_VENDOR, TextScript_GameCornerPrizeMenu
- dict2 TX_SCRIPT_CABLE_CLUB_RECEPTIONIST, callab CableClubNPC
+ dict2 TX_SCRIPT_CABLE_CLUB_RECEPTIONIST, callfar CableClubNPC
call PrintText_NoCreatingTextBox ; display the text
ld a, [wDoNotWaitForButtonPressAfterDisplayingText]
@@ -97,7 +97,7 @@
; loop to hold the dialogue box open as long as the player keeps holding down the A button
HoldTextDisplayOpen::
call Joypad
- ld a, [hJoyHeld]
+ ldh a, [hJoyHeld]
bit 0, a ; is the A button being pressed?
jr nz, HoldTextDisplayOpen
@@ -105,25 +105,25 @@
ld a, [wCurMap]
call SwitchToMapRomBank
ld a, $90
- ld [hWY], a ; move the window off the screen
+ ldh [hWY], a ; move the window off the screen
call DelayFrame
call LoadGBPal
xor a
- ld [hAutoBGTransferEnabled], a ; disable continuous WRAM to VRAM transfer each V-blank
+ ldh [hAutoBGTransferEnabled], a ; disable continuous WRAM to VRAM transfer each V-blank
; loop to make sprites face the directions they originally faced before the dialogue
- ld hl, wSprite01StateData2 + 9 ; should be wSprite01StateData1FacingDirection?
+ ld hl, wSprite01StateData2OrigFacingDirection
ld c, $0f
ld de, $10
.restoreSpriteFacingDirectionLoop
- ld a, [hl]
+ ld a, [hl] ; x#SPRITESTATEDATA2_ORIGFACINGDIRECTION
dec h
- ld [hl], a
+ ld [hl], a ; [x#SPRITESTATEDATA1_FACINGDIRECTION]
inc h
add hl, de
dec c
jr nz, .restoreSpriteFacingDirectionLoop
ld a, BANK(InitMapSprites)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call InitMapSprites ; reload sprite tile pattern data (since it was partially overwritten by text tile patterns)
ld hl, wFontLoaded
@@ -133,7 +133,7 @@
call z, LoadPlayerSpriteGraphics
call LoadCurrentMapView
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
jp UpdateSprites
@@ -146,14 +146,14 @@
call LoadItemList
ld a, PRICEDITEMLISTMENU
ld [wListMenuID], a
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, BANK(DisplayPokemartDialogue_)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call DisplayPokemartDialogue_
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
jp AfterDisplayingTextID
@@ -180,24 +180,24 @@
DisplayPokemonCenterDialogue::
; zeroing these doesn't appear to serve any purpose
xor a
- ld [hItemPrice], a
- ld [hItemPrice + 1], a
- ld [hItemPrice + 2], a
+ ldh [hItemPrice], a
+ ldh [hItemPrice + 1], a
+ ldh [hItemPrice + 2], a
inc hl
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, BANK(DisplayPokemonCenterDialogue_)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call DisplayPokemonCenterDialogue_
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
jp AfterDisplayingTextID
DisplaySafariGameOverText::
- callab PrintSafariGameOverText
+ callfar PrintSafariGameOverText
jp AfterDisplayingTextID
DisplayPokemonFaintedText::
--- /dev/null
+++ b/home/textbox.asm
@@ -1,0 +1,16 @@
+; function to draw various text boxes
+; INPUT:
+; [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
+ ret
--- /dev/null
+++ b/home/tilemap.asm
@@ -1,0 +1,61 @@
+FillMemory::
+; Fill bc bytes at hl with a.
+ push de
+ ld d, a
+.loop
+ ld a, d
+ ld [hli], a
+ dec bc
+ ld a, b
+ or c
+ jr nz, .loop
+ pop de
+ ret
+
+UncompressSpriteFromDE::
+; Decompress pic at a:de.
+ ld hl, wSpriteInputPtr
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ jp UncompressSpriteData
+
+SaveScreenTilesToBuffer2::
+ hlcoord 0, 0
+ ld de, wTileMapBackup2
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ call CopyData
+ ret
+
+LoadScreenTilesFromBuffer2::
+ call LoadScreenTilesFromBuffer2DisableBGTransfer
+ ld a, 1
+ ldh [hAutoBGTransferEnabled], a
+ ret
+
+; loads screen tiles stored in wTileMapBackup2 but leaves hAutoBGTransferEnabled disabled
+LoadScreenTilesFromBuffer2DisableBGTransfer::
+ xor a
+ ldh [hAutoBGTransferEnabled], a
+ ld hl, wTileMapBackup2
+ decoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ call CopyData
+ ret
+
+SaveScreenTilesToBuffer1::
+ hlcoord 0, 0
+ ld de, wTileMapBackup
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ jp CopyData
+
+LoadScreenTilesFromBuffer1::
+ xor a
+ ldh [hAutoBGTransferEnabled], a
+ ld hl, wTileMapBackup
+ decoord 0, 0
+ ld bc, SCREEN_WIDTH * SCREEN_HEIGHT
+ call CopyData
+ ld a, 1
+ ldh [hAutoBGTransferEnabled], a
+ ret
--- a/home/trainers.asm
+++ b/home/trainers.asm
@@ -144,7 +144,7 @@
ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
ld [wJoyIgnore], a
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
call TrainerWalkUpToPlayer_Bank0
ld hl, wCurMapScript
inc [hl] ; increment map script index (next script function is usually DisplayEnemyTrainerTextAndStartBattle)
@@ -157,7 +157,7 @@
ret nz ; return if the enemy trainer hasn't finished walking to the player's sprite
ld [wJoyIgnore], a
ld a, [wSpriteIndex]
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
; fall through
@@ -211,15 +211,15 @@
ResetButtonPressedAndMapScript::
xor a
ld [wJoyIgnore], a
- ld [hJoyHeld], a
- ld [hJoyPressed], a
- ld [hJoyReleased], a
+ ldh [hJoyHeld], a
+ ldh [hJoyPressed], a
+ ldh [hJoyReleased], a
ld [wCurMapScript], a ; reset battle status
ret
; calls TrainerWalkUpToPlayer
TrainerWalkUpToPlayer_Bank0::
- jpba TrainerWalkUpToPlayer
+ farjp TrainerWalkUpToPlayer
; sets opponent type and mon set/lvl based on the engaging trainer data
InitBattleEnemyParameters::
@@ -302,7 +302,7 @@
; hl = text if the player wins
; de = text if the player loses
SaveEndBattleTextPointers::
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
ld [wEndBattleTextRomBank], a
ld a, h
ld [wEndBattleWinTextPointer], a
@@ -337,20 +337,20 @@
res 7, [hl]
pop hl
ret z
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, [wEndBattleTextRomBank]
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
push hl
- callba SaveTrainerName
+ farcall SaveTrainerName
ld hl, TrainerEndBattleText
call PrintText
pop hl
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
- callba FreezeEnemyTrainerSprite
+ farcall FreezeEnemyTrainerSprite
jp WaitForSoundToFinish
GetSavedEndBattleTextPointer::
--- /dev/null
+++ b/home/trainers2.asm
@@ -1,0 +1,35 @@
+GetTrainerInformation::
+ call GetTrainerName
+ ld a, [wLinkState]
+ and a
+ jr nz, .linkBattle
+ ld a, BANK(TrainerPicAndMoneyPointers)
+ call BankswitchHome
+ ld a, [wTrainerClass]
+ dec a
+ ld hl, TrainerPicAndMoneyPointers
+ ld bc, $5
+ call AddNTimes
+ ld de, wTrainerPicPointer
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ ld de, wTrainerBaseMoney
+ ld a, [hli]
+ ld [de], a
+ inc de
+ ld a, [hli]
+ ld [de], a
+ jp BankswitchBack
+.linkBattle
+ ld hl, wTrainerPicPointer
+ ld de, RedPicFront
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ ret
+
+GetTrainerName::
+ farjp GetTrainerName_
--- a/home/uncompress.asm
+++ b/home/uncompress.asm
@@ -2,10 +2,10 @@
; bank is given in a, sprite input stream is pointed to in wSpriteInputPtr
UncompressSpriteData::
ld b, a
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, b
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ld a, SRAM_ENABLE
ld [MBC1SRamEnable], a
@@ -13,7 +13,7 @@
ld [MBC1SRamBank], a
call _UncompressSpriteData
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ret
@@ -20,8 +20,8 @@
; initializes necessary data to load a sprite and runs UncompressSpriteDataLoop
_UncompressSpriteData::
ld hl, sSpriteBuffer1
- ld c, (2*SPRITEBUFFERSIZE) % $100
- ld b, (2*SPRITEBUFFERSIZE) / $100
+ ld c, LOW(2 * SPRITEBUFFERSIZE)
+ ld b, HIGH(2 * SPRITEBUFFERSIZE)
xor a
call FillMemory ; clear sprite buffer 1 and 2
ld a, $1
--- /dev/null
+++ b/home/update_sprites.asm
@@ -1,0 +1,14 @@
+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
+ ret
--- a/home/vblank.asm
+++ b/home/vblank.asm
@@ -5,19 +5,19 @@
push de
push hl
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
ld [wVBlankSavedROMBank], a
- ld a, [hSCX]
- ld [rSCX], a
- ld a, [hSCY]
- ld [rSCY], a
+ ldh a, [hSCX]
+ ldh [rSCX], a
+ ldh a, [hSCY]
+ ldh [rSCY], a
ld a, [wDisableVBlankWYUpdate]
and a
jr nz, .ok
- ld a, [hWY]
- ld [rWY], a
+ ldh a, [hWY]
+ ldh [rWY], a
.ok
call AutoBgMapTransfer
@@ -28,7 +28,7 @@
call UpdateMovingBgTiles
call hDMARoutine
ld a, BANK(PrepareOAMData)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call PrepareOAMData
@@ -36,24 +36,24 @@
call Random
- ld a, [hVBlankOccurred]
+ ldh a, [hVBlankOccurred]
and a
jr z, .skipZeroing
xor a
- ld [hVBlankOccurred], a
+ ldh [hVBlankOccurred], a
.skipZeroing
- ld a, [hFrameCounter]
+ ldh a, [hFrameCounter]
and a
jr z, .skipDec
dec a
- ld [hFrameCounter], a
+ ldh [hFrameCounter], a
.skipDec
call FadeOutAudio
ld a, [wAudioROMBank] ; music ROM bank
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
cp BANK(Audio1_UpdateMusic)
@@ -72,14 +72,14 @@
call Audio3_UpdateMusic
.afterMusic
- callba TrackPlayTime ; keep track of time played
+ farcall TrackPlayTime ; keep track of time played
- ld a, [hDisableJoypadPolling]
+ ldh a, [hDisableJoypadPolling]
and a
call z, ReadJoypad
ld a, [wVBlankSavedROMBank]
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
pop hl
@@ -96,10 +96,10 @@
NOT_VBLANKED EQU 1
ld a, NOT_VBLANKED
- ld [hVBlankOccurred], a
+ ldh [hVBlankOccurred], a
.halt
halt
- ld a, [hVBlankOccurred]
+ ldh a, [hVBlankOccurred]
and a
jr nz, .halt
ret
--- a/home/vcopy.asm
+++ b/home/vcopy.asm
@@ -40,19 +40,19 @@
; However, this function is also called repeatedly to redraw the whole screen
; when necessary. It is also used in trade animation and elevator code.
RedrawRowOrColumn::
- ld a, [hRedrawRowOrColumnMode]
+ ldh a, [hRedrawRowOrColumnMode]
and a
ret z
ld b, a
xor a
- ld [hRedrawRowOrColumnMode], a
+ ldh [hRedrawRowOrColumnMode], a
dec b
jr nz, .redrawRow
.redrawColumn
ld hl, wRedrawRowOrColumnSrcTiles
- ld a, [hRedrawRowOrColumnDest]
+ ldh a, [hRedrawRowOrColumnDest]
ld e, a
- ld a, [hRedrawRowOrColumnDest + 1]
+ ldh a, [hRedrawRowOrColumnDest + 1]
ld d, a
ld c, SCREEN_HEIGHT
.loop1
@@ -75,13 +75,13 @@
dec c
jr nz, .loop1
xor a
- ld [hRedrawRowOrColumnMode], a
+ ldh [hRedrawRowOrColumnMode], a
ret
.redrawRow
ld hl, wRedrawRowOrColumnSrcTiles
- ld a, [hRedrawRowOrColumnDest]
+ ldh a, [hRedrawRowOrColumnDest]
ld e, a
- ld a, [hRedrawRowOrColumnDest + 1]
+ ldh a, [hRedrawRowOrColumnDest + 1]
ld d, a
push de
call .DrawHalf ; draw upper half
@@ -120,25 +120,25 @@
; the above function, RedrawRowOrColumn, is used when walking to
; improve efficiency.
AutoBgMapTransfer::
- ld a, [hAutoBGTransferEnabled]
+ ldh a, [hAutoBGTransferEnabled]
and a
ret z
ld hl, sp + 0
ld a, h
- ld [hSPTemp], a
+ ldh [hSPTemp], a
ld a, l
- ld [hSPTemp + 1], a ; save stack pinter
- ld a, [hAutoBGTransferPortion]
+ ldh [hSPTemp + 1], a ; save stack pinter
+ ldh a, [hAutoBGTransferPortion]
and a
jr z, .transferTopThird
dec a
jr z, .transferMiddleThird
.transferBottomThird
- coord hl, 0, 12
+ hlcoord 0, 12
ld sp, hl
- ld a, [hAutoBGTransferDest + 1]
+ ldh a, [hAutoBGTransferDest + 1]
ld h, a
- ld a, [hAutoBGTransferDest]
+ ldh a, [hAutoBGTransferDest]
ld l, a
ld de, (12 * 32)
add hl, de
@@ -145,26 +145,26 @@
xor a ; TRANSFERTOP
jr .doTransfer
.transferTopThird
- coord hl, 0, 0
+ hlcoord 0, 0
ld sp, hl
- ld a, [hAutoBGTransferDest + 1]
+ ldh a, [hAutoBGTransferDest + 1]
ld h, a
- ld a, [hAutoBGTransferDest]
+ ldh a, [hAutoBGTransferDest]
ld l, a
ld a, TRANSFERMIDDLE
jr .doTransfer
.transferMiddleThird
- coord hl, 0, 6
+ hlcoord 0, 6
ld sp, hl
- ld a, [hAutoBGTransferDest + 1]
+ ldh a, [hAutoBGTransferDest + 1]
ld h, a
- ld a, [hAutoBGTransferDest]
+ ldh a, [hAutoBGTransferDest]
ld l, a
ld de, (6 * 32)
add hl, de
ld a, TRANSFERBOTTOM
.doTransfer
- ld [hAutoBGTransferPortion], a ; store next portion
+ ldh [hAutoBGTransferPortion], a ; store next portion
ld b, 6
TransferBgRows::
@@ -192,9 +192,9 @@
dec b
jr nz, TransferBgRows
- ld a, [hSPTemp]
+ ldh a, [hSPTemp]
ld h, a
- ld a, [hSPTemp + 1]
+ ldh a, [hSPTemp + 1]
ld l, a
ld sp, hl
ret
@@ -202,27 +202,27 @@
; Copies [hVBlankCopyBGNumRows] rows from hVBlankCopyBGSource to hVBlankCopyBGDest.
; If hVBlankCopyBGSource is XX00, the transfer is disabled.
VBlankCopyBgMap::
- ld a, [hVBlankCopyBGSource] ; doubles as enabling byte
+ ldh a, [hVBlankCopyBGSource] ; doubles as enabling byte
and a
ret z
ld hl, sp + 0
ld a, h
- ld [hSPTemp], a
+ ldh [hSPTemp], a
ld a, l
- ld [hSPTemp + 1], a ; save stack pointer
- ld a, [hVBlankCopyBGSource]
+ ldh [hSPTemp + 1], a ; save stack pointer
+ ldh a, [hVBlankCopyBGSource]
ld l, a
- ld a, [hVBlankCopyBGSource + 1]
+ ldh a, [hVBlankCopyBGSource + 1]
ld h, a
ld sp, hl
- ld a, [hVBlankCopyBGDest]
+ ldh a, [hVBlankCopyBGDest]
ld l, a
- ld a, [hVBlankCopyBGDest + 1]
+ ldh a, [hVBlankCopyBGDest + 1]
ld h, a
- ld a, [hVBlankCopyBGNumRows]
+ ldh a, [hVBlankCopyBGNumRows]
ld b, a
xor a
- ld [hVBlankCopyBGSource], a ; disable transfer so it doesn't continue next V-blank
+ ldh [hVBlankCopyBGSource], a ; disable transfer so it doesn't continue next V-blank
jr TransferBgRows
@@ -234,31 +234,31 @@
; The process is straightforward:
; copy each byte twice.
- ld a, [hVBlankCopyDoubleSize]
+ ldh a, [hVBlankCopyDoubleSize]
and a
ret z
ld hl, sp + 0
ld a, h
- ld [hSPTemp], a
+ ldh [hSPTemp], a
ld a, l
- ld [hSPTemp + 1], a
+ ldh [hSPTemp + 1], a
- ld a, [hVBlankCopyDoubleSource]
+ ldh a, [hVBlankCopyDoubleSource]
ld l, a
- ld a, [hVBlankCopyDoubleSource + 1]
+ ldh a, [hVBlankCopyDoubleSource + 1]
ld h, a
ld sp, hl
- ld a, [hVBlankCopyDoubleDest]
+ ldh a, [hVBlankCopyDoubleDest]
ld l, a
- ld a, [hVBlankCopyDoubleDest + 1]
+ ldh a, [hVBlankCopyDoubleDest + 1]
ld h, a
- ld a, [hVBlankCopyDoubleSize]
+ ldh a, [hVBlankCopyDoubleSize]
ld b, a
xor a ; transferred
- ld [hVBlankCopyDoubleSize], a
+ ldh [hVBlankCopyDoubleSize], a
.loop
REPT 3
@@ -286,19 +286,19 @@
jr nz, .loop
ld a, l
- ld [hVBlankCopyDoubleDest], a
+ ldh [hVBlankCopyDoubleDest], a
ld a, h
- ld [hVBlankCopyDoubleDest + 1], a
+ ldh [hVBlankCopyDoubleDest + 1], a
ld hl, sp + 0
ld a, l
- ld [hVBlankCopyDoubleSource], a
+ ldh [hVBlankCopyDoubleSource], a
ld a, h
- ld [hVBlankCopyDoubleSource + 1], a
+ ldh [hVBlankCopyDoubleSource + 1], a
- ld a, [hSPTemp]
+ ldh a, [hSPTemp]
ld h, a
- ld a, [hSPTemp + 1]
+ ldh a, [hSPTemp + 1]
ld l, a
ld sp, hl
@@ -312,31 +312,31 @@
; Source and destination addresses are updated,
; so transfer can continue in subsequent calls.
- ld a, [hVBlankCopySize]
+ ldh a, [hVBlankCopySize]
and a
ret z
ld hl, sp + 0
ld a, h
- ld [hSPTemp], a
+ ldh [hSPTemp], a
ld a, l
- ld [hSPTemp + 1], a
+ ldh [hSPTemp + 1], a
- ld a, [hVBlankCopySource]
+ ldh a, [hVBlankCopySource]
ld l, a
- ld a, [hVBlankCopySource + 1]
+ ldh a, [hVBlankCopySource + 1]
ld h, a
ld sp, hl
- ld a, [hVBlankCopyDest]
+ ldh a, [hVBlankCopyDest]
ld l, a
- ld a, [hVBlankCopyDest + 1]
+ ldh a, [hVBlankCopyDest + 1]
ld h, a
- ld a, [hVBlankCopySize]
+ ldh a, [hVBlankCopySize]
ld b, a
xor a ; transferred
- ld [hVBlankCopySize], a
+ ldh [hVBlankCopySize], a
.loop
REPT 7
@@ -356,19 +356,19 @@
jr nz, .loop
ld a, l
- ld [hVBlankCopyDest], a
+ ldh [hVBlankCopyDest], a
ld a, h
- ld [hVBlankCopyDest + 1], a
+ ldh [hVBlankCopyDest + 1], a
ld hl, sp + 0
ld a, l
- ld [hVBlankCopySource], a
+ ldh [hVBlankCopySource], a
ld a, h
- ld [hVBlankCopySource + 1], a
+ ldh [hVBlankCopySource + 1], a
- ld a, [hSPTemp]
+ ldh a, [hSPTemp]
ld h, a
- ld a, [hSPTemp + 1]
+ ldh a, [hSPTemp + 1]
ld l, a
ld sp, hl
@@ -379,13 +379,13 @@
; Animate water and flower
; tiles in the overworld.
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
and a
ret z ; no animations if indoors (or if a menu set this to 0)
- ld a, [hMovingBGTilesCounter1]
+ ldh a, [hMovingBGTilesCounter1]
inc a
- ld [hMovingBGTilesCounter1], a
+ ldh [hMovingBGTilesCounter1], a
cp 20
ret c
cp 21
@@ -393,7 +393,7 @@
; water
- ld hl, vTileset + $14 * $10
+ ld hl, vTileset tile $14
ld c, $10
ld a, [wMovingBGTilesCounter2]
@@ -417,17 +417,17 @@
dec c
jr nz, .left
.done
- ld a, [hTilesetType]
+ ldh a, [hTilesetType]
rrca
ret nc
; if in a cave, no flower animations
xor a
- ld [hMovingBGTilesCounter1], a
+ ldh [hMovingBGTilesCounter1], a
ret
.flower
xor a
- ld [hMovingBGTilesCounter1], a
+ ldh [hMovingBGTilesCounter1], a
ld a, [wMovingBGTilesCounter2]
and 3
@@ -438,7 +438,7 @@
jr z, .copy
ld hl, FlowerTile3
.copy
- ld de, vTileset + $3 * $10
+ ld de, vTileset tile $03
ld c, $10
.loop
ld a, [hli]
--- /dev/null
+++ b/home/window.asm
@@ -1,0 +1,294 @@
+HandleMenuInput::
+ xor a
+ ld [wPartyMenuAnimMonEnabled], a
+
+HandleMenuInput_::
+ ldh a, [hDownArrowBlinkCount1]
+ push af
+ ldh a, [hDownArrowBlinkCount2]
+ push af ; save existing values on stack
+ xor a
+ ldh [hDownArrowBlinkCount1], a ; blinking down arrow timing value 1
+ ld a, 6
+ ldh [hDownArrowBlinkCount2], a ; blinking down arrow timing value 2
+.loop1
+ xor a
+ ld [wAnimCounter], a ; counter for pokemon shaking animation
+ call PlaceMenuCursor
+ call Delay3
+.loop2
+ push hl
+ ld a, [wPartyMenuAnimMonEnabled]
+ and a ; is it a pokemon selection menu?
+ jr z, .getJoypadState
+ farcall AnimatePartyMon ; shake mini sprite of selected pokemon
+.getJoypadState
+ pop hl
+ call JoypadLowSensitivity
+ ldh a, [hJoy5]
+ and a ; was a key pressed?
+ jr nz, .keyPressed
+ push hl
+ hlcoord 18, 11 ; coordinates of blinking down arrow in some menus
+ call HandleDownArrowBlinkTiming ; blink down arrow (if any)
+ pop hl
+ ld a, [wMenuJoypadPollCount]
+ dec a
+ jr z, .giveUpWaiting
+ jr .loop2
+.giveUpWaiting
+; if a key wasn't pressed within the specified number of checks
+ pop af
+ ldh [hDownArrowBlinkCount2], a
+ pop af
+ ldh [hDownArrowBlinkCount1], a ; restore previous values
+ xor a
+ ld [wMenuWrappingEnabled], a ; disable menu wrapping
+ ret
+.keyPressed
+ xor a
+ ld [wCheckFor180DegreeTurn], a
+ ldh a, [hJoy5]
+ ld b, a
+ bit 6, a ; pressed Up key?
+ jr z, .checkIfDownPressed
+.upPressed
+ ld a, [wCurrentMenuItem] ; selected menu item
+ and a ; already at the top of the menu?
+ jr z, .alreadyAtTop
+.notAtTop
+ dec a
+ ld [wCurrentMenuItem], a ; move selected menu item up one space
+ jr .checkOtherKeys
+.alreadyAtTop
+ ld a, [wMenuWrappingEnabled]
+ and a ; is wrapping around enabled?
+ jr z, .noWrappingAround
+ ld a, [wMaxMenuItem]
+ ld [wCurrentMenuItem], a ; wrap to the bottom of the menu
+ jr .checkOtherKeys
+.checkIfDownPressed
+ bit 7, a
+ jr z, .checkOtherKeys
+.downPressed
+ ld a, [wCurrentMenuItem]
+ inc a
+ ld c, a
+ ld a, [wMaxMenuItem]
+ cp c
+ jr nc, .notAtBottom
+.alreadyAtBottom
+ ld a, [wMenuWrappingEnabled]
+ and a ; is wrapping around enabled?
+ jr z, .noWrappingAround
+ ld c, $00 ; wrap from bottom to top
+.notAtBottom
+ ld a, c
+ ld [wCurrentMenuItem], a
+.checkOtherKeys
+ ld a, [wMenuWatchedKeys]
+ and b ; does the menu care about any of the pressed keys?
+ jp z, .loop1
+.checkIfAButtonOrBButtonPressed
+ ldh a, [hJoy5]
+ and A_BUTTON | B_BUTTON
+ jr z, .skipPlayingSound
+.AButtonOrBButtonPressed
+ push hl
+ ld hl, wFlags_0xcd60
+ bit 5, [hl]
+ pop hl
+ jr nz, .skipPlayingSound
+ ld a, SFX_PRESS_AB
+ call PlaySound
+.skipPlayingSound
+ pop af
+ ldh [hDownArrowBlinkCount2], a
+ pop af
+ ldh [hDownArrowBlinkCount1], a ; restore previous values
+ xor a
+ ld [wMenuWrappingEnabled], a ; disable menu wrapping
+ ldh a, [hJoy5]
+ ret
+.noWrappingAround
+ ld a, [wMenuWatchMovingOutOfBounds]
+ and a ; should we return if the user tried to go past the top or bottom?
+ jr z, .checkOtherKeys
+ jr .checkIfAButtonOrBButtonPressed
+
+PlaceMenuCursor::
+ ld a, [wTopMenuItemY]
+ and a ; is the y coordinate 0?
+ jr z, .adjustForXCoord
+ hlcoord 0, 0
+ ld bc, SCREEN_WIDTH
+.topMenuItemLoop
+ add hl, bc
+ dec a
+ jr nz, .topMenuItemLoop
+.adjustForXCoord
+ ld a, [wTopMenuItemX]
+ ld b, 0
+ ld c, a
+ add hl, bc
+ push hl
+ ld a, [wLastMenuItem]
+ and a ; was the previous menu id 0?
+ jr z, .checkForArrow1
+ push af
+ ldh a, [hFlagsFFF6]
+ bit 1, a ; is the menu double spaced?
+ jr z, .doubleSpaced1
+ ld bc, 20
+ jr .getOldMenuItemScreenPosition
+.doubleSpaced1
+ ld bc, 40
+.getOldMenuItemScreenPosition
+ pop af
+.oldMenuItemLoop
+ add hl, bc
+ dec a
+ jr nz, .oldMenuItemLoop
+.checkForArrow1
+ ld a, [hl]
+ cp "▶" ; was an arrow next to the previously selected menu item?
+ jr nz, .skipClearingArrow
+.clearArrow
+ ld a, [wTileBehindCursor]
+ ld [hl], a
+.skipClearingArrow
+ pop hl
+ ld a, [wCurrentMenuItem]
+ and a
+ jr z, .checkForArrow2
+ push af
+ ldh a, [hFlagsFFF6]
+ bit 1, a ; is the menu double spaced?
+ jr z, .doubleSpaced2
+ ld bc, 20
+ jr .getCurrentMenuItemScreenPosition
+.doubleSpaced2
+ ld bc, 40
+.getCurrentMenuItemScreenPosition
+ pop af
+.currentMenuItemLoop
+ add hl, bc
+ dec a
+ jr nz, .currentMenuItemLoop
+.checkForArrow2
+ ld a, [hl]
+ cp "▶" ; has the right arrow already been placed?
+ jr z, .skipSavingTile ; if so, don't lose the saved tile
+ ld [wTileBehindCursor], a ; save tile before overwriting with right arrow
+.skipSavingTile
+ ld a, "▶" ; place right arrow
+ ld [hl], a
+ ld a, l
+ ld [wMenuCursorLocation], a
+ ld a, h
+ ld [wMenuCursorLocation + 1], a
+ ld a, [wCurrentMenuItem]
+ ld [wLastMenuItem], a
+ ret
+
+; This is used to mark a menu cursor other than the one currently being
+; manipulated. In the case of submenus, this is used to show the location of
+; the menu cursor in the parent menu. In the case of swapping items in list,
+; this is used to mark the item that was first chosen to be swapped.
+PlaceUnfilledArrowMenuCursor::
+ ld b, a
+ ld a, [wMenuCursorLocation]
+ ld l, a
+ ld a, [wMenuCursorLocation + 1]
+ ld h, a
+ ld [hl], $ec ; outline of right arrow
+ ld a, b
+ ret
+
+; Replaces the menu cursor with a blank space.
+EraseMenuCursor::
+ ld a, [wMenuCursorLocation]
+ ld l, a
+ ld a, [wMenuCursorLocation + 1]
+ ld h, a
+ ld [hl], " "
+ ret
+
+; This toggles a blinking down arrow at hl on and off after a delay has passed.
+; This is often called even when no blinking is occurring.
+; The reason is that most functions that call this initialize hDownArrowBlinkCount1 to 0.
+; The effect is that if the tile at hl is initialized with a down arrow,
+; this function will toggle that down arrow on and off, but if the tile isn't
+; initialized with a down arrow, this function does nothing.
+; That allows this to be called without worrying about if a down arrow should
+; be blinking.
+HandleDownArrowBlinkTiming::
+ ld a, [hl]
+ ld b, a
+ ld a, "▼"
+ cp b
+ jr nz, .downArrowOff
+.downArrowOn
+ ldh a, [hDownArrowBlinkCount1]
+ dec a
+ ldh [hDownArrowBlinkCount1], a
+ ret nz
+ ldh a, [hDownArrowBlinkCount2]
+ dec a
+ ldh [hDownArrowBlinkCount2], a
+ ret nz
+ ld a, " "
+ ld [hl], a
+ ld a, $ff
+ ldh [hDownArrowBlinkCount1], a
+ ld a, $06
+ ldh [hDownArrowBlinkCount2], a
+ ret
+.downArrowOff
+ ldh a, [hDownArrowBlinkCount1]
+ and a
+ ret z
+ dec a
+ ldh [hDownArrowBlinkCount1], a
+ ret nz
+ dec a
+ ldh [hDownArrowBlinkCount1], a
+ ldh a, [hDownArrowBlinkCount2]
+ dec a
+ ldh [hDownArrowBlinkCount2], a
+ ret nz
+ ld a, $06
+ ldh [hDownArrowBlinkCount2], a
+ ld a, "▼"
+ ld [hl], a
+ ret
+
+; The following code either enables or disables the automatic drawing of
+; text boxes by DisplayTextID. Both functions cause DisplayTextID to wait
+; for a button press after displaying text (unless [wEnteringCableClub] is set).
+
+EnableAutoTextBoxDrawing::
+ xor a
+ jr AutoTextBoxDrawingCommon
+
+DisableAutoTextBoxDrawing::
+ ld a, $01
+
+AutoTextBoxDrawingCommon::
+ ld [wAutoTextBoxDrawingControl], a
+ xor a
+ ld [wDoNotWaitForButtonPressAfterDisplayingText], a ; make DisplayTextID wait for button press
+ ret
+
+PrintText::
+; Print text hl at (1, 14).
+ push hl
+ ld a, MESSAGE_BOX
+ ld [wTextBoxID], a
+ call DisplayTextBoxID
+ call UpdateSprites
+ call Delay3
+ pop hl
+PrintText_NoCreatingTextBox::
+ bccoord 1, 14
+ jp TextCommandProcessor
--- a/home/yes_no.asm
+++ b/home/yes_no.asm
@@ -14,7 +14,7 @@
InitYesNoTextBoxParameters::
xor a ; YES_NO_MENU
ld [wTwoOptionMenuID], a
- coord hl, 14, 7
+ hlcoord 14, 7
ld bc, $80f
ret
@@ -22,7 +22,7 @@
call SaveScreenTilesToBuffer1
ld a, HEAL_CANCEL_MENU
ld [wTwoOptionMenuID], a
- coord hl, 11, 6
+ hlcoord 11, 6
lb bc, 8, 12
jr DisplayYesNoChoice
@@ -30,7 +30,7 @@
call SaveScreenTilesToBuffer1
ld a, WIDE_YES_NO_MENU
ld [wTwoOptionMenuID], a
- coord hl, 12, 7
+ hlcoord 12, 7
lb bc, 8, 13
DisplayYesNoChoice::
--- a/hram.asm
+++ b/hram.asm
@@ -1,157 +1,149 @@
-hDMARoutine EQU $FF80
+SECTION "HRAM", HRAM
-hSoftReset EQU $FF8A
+hDMARoutine:: ds 10
+
; Initialized to 16.
; Decremented each input iteration if the player
; presses the reset sequence (A+B+SEL+START).
; Soft reset when 0 is reached.
+hSoftReset:: db
-; base tile ID to which offsets are added
-hBaseTileID EQU $FF8B
+UNION
+hBaseTileID:: ; base tile ID to which offsets are added
+hDexWeight::
+hWarpDestinationMap::
+hOAMTile::
+hROMBankTemp::
+hPreviousTileset::
+hRLEByteValue::
+ db
-; 3-byte BCD number
-hItemPrice EQU $FF8B
+hSpriteIndexOrTextID:: ; DisplayTextID's argument
+hPartyMonIndex::
+ db
-hDexWeight EQU $FF8B
+hVRAMSlot::
+ db
-hWarpDestinationMap EQU $FF8B
+hFourTileSpriteCount::
+hHalveItemPrices::
+ db
-hOAMTile EQU $FF8B
+NEXTU
+hItemPrice:: ds 3 ; BCD number
-hROMBankTemp EQU $FF8B
+NEXTU
+hSlideAmount:: db
-hPreviousTileset EQU $FF8B
-
-hEastWestConnectedMapWidth EQU $FF8B
-
-hSlideAmount EQU $FF8B
-
-hRLEByteValue EQU $FF8B
-
-hSpriteWidth EQU $FF8B ; in tiles
-hSpriteInterlaceCounter EQU $FF8B
-hSpriteHeight EQU $FF8C ; in tiles
-hSpriteOffset EQU $FF8D
-
-; counters for blinking down arrow
-hDownArrowBlinkCount1 EQU $FF8B
-hDownArrowBlinkCount2 EQU $FF8C
-
-hSpriteDataOffset EQU $FF8B
-hSpriteIndex EQU $FF8C
-
-hMapStride EQU $FF8B
-hMapWidth EQU $FF8C
-
-hNorthSouthConnectionStripWidth EQU $FF8B
-hNorthSouthConnectedMapWidth EQU $FF8C
-
-; DisplayTextID's argument
-hSpriteIndexOrTextID EQU $FF8C
-
-hPartyMonIndex EQU $FF8C
-
; the total number of tiles being shifted each time the pic slides by one tile
-hSlidingRegionSize EQU $FF8C
+hSlidingRegionSize:: db
-; 2 bytes
-hEnemySpeed EQU $FF8D
-
-hVRAMSlot EQU $FF8D
-
-hFourTileSpriteCount EQU $FF8E
-
; -1 = left
; 0 = right
-hSlideDirection EQU $FF8D
+hSlideDirection:: db
-hSpriteFacingDirection EQU $FF8D
+NEXTU
+hSpriteInterlaceCounter::
+hSpriteWidth:: db ; in tiles
+hSpriteHeight:: db ; in tiles
+hSpriteOffset:: db
-hSpriteMovementByte2 EQU $FF8D
+NEXTU
+; counters for blinking down arrow
+hDownArrowBlinkCount1:: db
+hDownArrowBlinkCount2:: db
-hSpriteImageIndex EQU $FF8D
+NEXTU
+hMapStride::
+hEastWestConnectedMapWidth::
+hNorthSouthConnectionStripWidth::
+ db
+hMapWidth::
+hNorthSouthConnectedMapWidth::
+ db
-hLoadSpriteTemp1 EQU $FF8D
-hLoadSpriteTemp2 EQU $FF8E
+NEXTU
+hSpriteDataOffset:: db
+hSpriteIndex:: db
+hSpriteImageIndex::
+hSpriteFacingDirection::
+hSpriteMovementByte2::
+ db
-hHalveItemPrices EQU $FF8E
+NEXTU
+ ds 2
+hLoadSpriteTemp1:: db
+hLoadSpriteTemp2:: db
-hSpriteOffset2 EQU $FF8F
+NEXTU
+ ds 2
+hEnemySpeed:: dw
+ENDU
-hOAMBufferOffset EQU $FF90
+UNION
+hSpriteOffset2:: db
+hOAMBufferOffset:: db
+hSpriteScreenX:: db
+hSpriteScreenY:: db
-hSpriteScreenX EQU $FF91
-hSpriteScreenY EQU $FF92
+NEXTU
+hFF8F:: db
+hFF90:: db
+hFF91:: db
+hFF92:: db
+ENDU
-hFF8F EQU $FF8F
-hFF90 EQU $FF90
-hFF91 EQU $FF91
-hFF92 EQU $FF92
+hTilePlayerStandingOn:: db
-hTilePlayerStandingOn EQU $FF93
+hSpritePriority:: db
-hSpritePriority EQU $FF94
+UNION
+;; Multiplication and division variables are meant
+;; to overlap for back-to-back usage. Big endian.
+UNION
+ ds 1
+hMultiplicand:: ds 3
+hMultiplier:: db
+ ds 1
+hMultiplyBuffer:: ds 4
+NEXTU
+hProduct:: ds 4
+NEXTU
+hDividend:: ds 4
+hDivisor:: db
+hDivideBuffer:: ds 5
+NEXTU
+hQuotient:: ds 4
+hRemainder:: db
+ENDU
-; 2 bytes
-hSignCoordPointer EQU $FF95
-
-hNPCMovementDirections2Index EQU $FF95
-
-hSwapItemID EQU $FF95
-hSwapItemQuantity EQU $FF96
-
-; CalcPositionOfPlayerRelativeToNPC
-hNPCSpriteOffset EQU $FF95
-
-; temp value used when swapping bytes or words
-hSwapTemp EQU $FF95
-
-hExperience EQU $FF96 ; 3 bytes, big endian
-
-hMutateWY EQU $FF96
-hMutateWX EQU $FF97
-
-; Multiplication and division variables are meant
-; to overlap for back-to-back usage. Big endian.
-
-hMultiplicand EQU $FF96 ; 3 bytes
-hMultiplier EQU $FF99 ; 1 byte
-hProduct EQU $FF95 ; 4 bytes
-
-hDividend EQU $FF95 ; 4 bytes
-hDivisor EQU $FF99 ; 1 byte
-hQuotient EQU $FF95 ; 4 bytes
-hRemainder EQU $FF99 ; 1 byte
-
-hDivideBuffer EQU $FF9A
-
-hMultiplyBuffer EQU $FF9B
-
+NEXTU
; PrintNumber (big endian).
-hPastLeadingZeros EQU $FF95 ; last char printed
-hNumToPrint EQU $FF96 ; 3 bytes
-hPowerOf10 EQU $FF99 ; 3 bytes
-hSavedNumToPrint EQU $FF9C ; 3 bytes
+hPastLeadingZeros:: db ; last char printed
+hNumToPrint:: ds 3
+hPowerOf10:: ds 3
+hSavedNumToPrint:: ds 3
+NEXTU
+hNPCMovementDirections2Index::
+hNPCSpriteOffset::
; distance in steps between NPC and player
-hNPCPlayerYDistance EQU $FF95
-hNPCPlayerXDistance EQU $FF96
-
-hFindPathNumSteps EQU $FF97
-
+hNPCPlayerYDistance::
+ db
+hNPCPlayerXDistance::
+ db
+hFindPathNumSteps:: db
; bit 0: set when the end of the path's Y coordinate matches the target's
; bit 1: set when the end of the path's X coordinate matches the target's
; When both bits are set, the end of the path is at the target's position
; (i.e. the path has been found).
-hFindPathFlags EQU $FF98
-
-hFindPathYProgress EQU $FF99
-hFindPathXProgress EQU $FF9A
-
+hFindPathFlags:: db
+hFindPathYProgress:: db
+hFindPathXProgress:: db
; 0 = from player to NPC
; 1 = from NPC to player
-hNPCPlayerRelativePosPerspective EQU $FF9B
-
+hNPCPlayerRelativePosPerspective:: db
+ ds 1
; bit 0:
; 0 = target is to the south or aligned
; 1 = target is to the north
@@ -158,70 +150,85 @@
; bit 1:
; 0 = target is to the east or aligned
; 1 = target is to the west
-hNPCPlayerRelativePosFlags EQU $FF9D
+hNPCPlayerRelativePosFlags:: db
-; some code zeroes this for no reason when writing a coin amount
-hUnusedCoinsByte EQU $FF9F
+NEXTU
+hSwapItemID:: db
+hSwapItemQuantity:: db
-hMoney EQU $FF9F ; 3-byte BCD number
-hCoins EQU $FFA0 ; 2-byte BCD number
+NEXTU
+hSignCoordPointer:: dw
-hDivideBCDDivisor EQU $FFA2 ; 3-byte BCD number
-hDivideBCDQuotient EQU $FFA2 ; 3-byte BCD number
-hDivideBCDBuffer EQU $FFA5 ; 3-byte BCD number
+NEXTU
+ ds 1
+hMutateWY:: db
+hMutateWX:: db
-hSerialReceivedNewData EQU $FFA9
+NEXTU
+; temp value used when swapping bytes or words
+hSwapTemp:: db
+hExperience:: ds 3 ; big endian
+ENDU
+UNION
+hMoney:: ds 3 ; BCD number
+NEXTU
+; some code zeroes this for no reason when writing a coin amount
+hUnusedCoinsByte:: db
+hCoins:: ds 2 ; BCD number
+ENDU
+
+hDivideBCDDivisor::
+hDivideBCDQuotient::
+ ds 3 ; BCD number
+hDivideBCDBuffer::
+ ds 3 ; BCD number
+
+ ds 1
+
+hSerialReceivedNewData:: db
; $01 = using external clock
; $02 = using internal clock
; $ff = establishing connection
-hSerialConnectionStatus EQU $FFAA
+hSerialConnectionStatus:: db
+hSerialIgnoringInitialData:: db
+hSerialSendData:: db
+hSerialReceiveData:: db
-hSerialIgnoringInitialData EQU $FFAB
+; these values are copied to rSCX, rSCY, and rWY during V-blank
+hSCX:: db
+hSCY:: db
+hWY:: db
-hSerialSendData EQU $FFAC
+hJoyLast:: db
+hJoyReleased:: db
+hJoyPressed:: db
+hJoyHeld:: db
+hJoy5:: db
+hJoy6:: db
+hJoy7:: db
-hSerialReceiveData EQU $FFAD
+hLoadedROMBank:: db
+hSavedROMBank:: db
-; these values are copied to SCX, SCY, and WY during V-blank
-hSCX EQU $FFAE
-hSCY EQU $FFAF
-hWY EQU $FFB0
-
-hJoyLast EQU $FFB1
-hJoyReleased EQU $FFB2
-hJoyPressed EQU $FFB3
-hJoyHeld EQU $FFB4
-hJoy5 EQU $FFB5
-hJoy6 EQU $FFB6
-hJoy7 EQU $FFB7
-
-hLoadedROMBank EQU $FFB8
-
-hSavedROMBank EQU $FFB9
-
; is automatic background transfer during V-blank enabled?
; if nonzero, yes
; if zero, no
-hAutoBGTransferEnabled EQU $FFBA
+hAutoBGTransferEnabled:: db
-TRANSFERTOP EQU 0
-TRANSFERMIDDLE EQU 1
-TRANSFERBOTTOM EQU 2
-
; 00 = top third of background
; 01 = middle third of background
; 02 = bottom third of background
-hAutoBGTransferPortion EQU $FFBB
+hAutoBGTransferPortion:: db
; the destination address of the automatic background transfer
-hAutoBGTransferDest EQU $FFBC ; 2 bytes
+hAutoBGTransferDest:: dw
-hRedrawMapViewRowOffset EQU $FFBE
+hRedrawMapViewRowOffset:: db
; temporary storage for stack pointer during memory transfers that use pop
; to increase speed
-hSPTemp EQU $FFBF ; 2 bytes
+hSPTemp:: dw
; source address for VBlankCopyBgMap function
; the first byte doubles as the byte that enabled the transfer.
@@ -228,143 +235,170 @@
; if it is 0, the transfer is disabled
; if it is not 0, the transfer is enabled
; this means that XX00 is not a valid source address
-hVBlankCopyBGSource EQU $FFC1 ; 2 bytes
+hVBlankCopyBGSource:: dw
; destination address for VBlankCopyBgMap function
-hVBlankCopyBGDest EQU $FFC3 ; 2 bytes
+hVBlankCopyBGDest:: dw
; number of rows for VBlankCopyBgMap to copy
-hVBlankCopyBGNumRows EQU $FFC5
+hVBlankCopyBGNumRows:: db
; size of VBlankCopy transfer in 16-byte units
-hVBlankCopySize EQU $FFC6
+hVBlankCopySize:: db
; source address for VBlankCopy function
-hVBlankCopySource EQU $FFC7
+hVBlankCopySource:: dw
; destination address for VBlankCopy function
-hVBlankCopyDest EQU $FFC9
+hVBlankCopyDest:: dw
; size of source data for VBlankCopyDouble in 8-byte units
-hVBlankCopyDoubleSize EQU $FFCB
+hVBlankCopyDoubleSize:: db
; source address for VBlankCopyDouble function
-hVBlankCopyDoubleSource EQU $FFCC
+hVBlankCopyDoubleSource:: dw
; destination address for VBlankCopyDouble function
-hVBlankCopyDoubleDest EQU $FFCE
+hVBlankCopyDoubleDest:: dw
; controls whether a row or column of 2x2 tile blocks is redrawn in V-blank
; 00 = no redraw
; 01 = redraw column
; 02 = redraw row
-hRedrawRowOrColumnMode EQU $FFD0
+hRedrawRowOrColumnMode:: db
-REDRAW_COL EQU 1
-REDRAW_ROW EQU 2
+hRedrawRowOrColumnDest:: dw
-hRedrawRowOrColumnDest EQU $FFD1
+hRandomAdd:: db
+hRandomSub:: db
-hRandomAdd EQU $FFD3
-hRandomSub EQU $FFD4
+hFrameCounter:: db ; decremented every V-blank (used for delays)
-hFrameCounter EQU $FFD5 ; decremented every V-blank (used for delays)
-
; V-blank sets this to 0 each time it runs.
; So, by setting it to a nonzero value and waiting for it to become 0 again,
; you can detect that the V-blank handler has run since then.
-hVBlankOccurred EQU $FFD6
+hVBlankOccurred:: db
; 00 = indoor
; 01 = cave
; 02 = outdoor
; this is often set to 00 in order to turn off water and flower BG tile animations
-hTilesetType EQU $FFD7
+hTilesetType:: db
-hMovingBGTilesCounter1 EQU $FFD8
+hMovingBGTilesCounter1:: db
-hCurrentSpriteOffset EQU $FFDA ; multiple of $10
+ ds 1
-hItemCounter EQU $FFDB
+hCurrentSpriteOffset:: db ; multiple of $10
-hGymGateIndex EQU $FFDB
-hGymGateAnswer EQU $FFDC
+UNION
+hPlayerFacing:: db
+hPlayerYCoord:: db
+hPlayerXCoord:: db
-hGymTrashCanRandNumMask EQU $FFDB
+NEXTU
-hDexRatingNumMonsSeen EQU $FFDB
-hDexRatingNumMonsOwned EQU $FFDC
-
; $00 = bag full
; $01 = got item
; $80 = didn't meet required number of owned mons
; $FF = player cancelled
-hOaksAideResult EQU $FFDB
+hOaksAideResult::
+hOaksAideRequirement:: ; required number of owned mons
+ db
+hOaksAideRewardItem:: db
+hOaksAideNumMonsOwned:: db
-hSavedCoordIndex EQU $FFDB
+NEXTU
+hVendingMachineItem:: db
+hVendingMachinePrice:: ds 3 ; BCD number
-hOaksAideRequirement EQU $FFDB ; required number of owned mons
-hOaksAideRewardItem EQU $FFDC
-hOaksAideNumMonsOwned EQU $FFDD
+NEXTU
+hGymGateIndex:: db
+hGymGateAnswer:: db
-hPlayerFacing EQU $FFDB
-hPlayerYCoord EQU $FFDC
-hPlayerXCoord EQU $FFDD
+NEXTU
+hDexRatingNumMonsSeen:: db
+hDexRatingNumMonsOwned:: db
-hMissableObjectIndex EQU $FFDB
+NEXTU
+hItemToRemoveID:: db
+hItemToRemoveIndex:: db
-hItemToRemoveID EQU $FFDB
-hItemToRemoveIndex EQU $FFDC
+NEXTU
+hItemCounter::
+hSavedCoordIndex::
+hMissableObjectIndex::
+hGymTrashCanRandNumMask::
+ db
-hVendingMachineItem EQU $FFDB
-hVendingMachinePrice EQU $FFDC ; 3-byte BCD number
+NEXTU
+hFFDB:: db
+hFFDC:: db
+ENDU
-hFFDB EQU $FFDB
-hFFDC EQU $FFDC
+ ds 1
-hBackupGymGateIndex EQU $FFE0
+hBackupGymGateIndex::
+hUnlockedSilphCoDoors::
+ db
-hUnlockedSilphCoDoors EQU $FFE0
-
; the first tile ID in a sequence of tile IDs that increase by 1 each step
-hStartTileID EQU $FFE1
+hStartTileID:: db
-hNewPartyLength EQU $FFE4
+ ds 2
-hIsHiddenMissableObject EQU $FFE5
+hNewPartyLength:: db
-hDividend2 EQU $FFE5
-hDivisor2 EQU $FFE6
-hQuotient2 EQU $FFE7
+UNION
+hDividend2:: db
+hDivisor2:: db
+hQuotient2:: db
-hMapROMBank EQU $FFE8
+NEXTU
+hIsHiddenMissableObject:: db
+ENDU
-hSpriteVRAMSlotAndFacing EQU $FFE9
+hMapROMBank:: db
-hCoordsInFrontOfPlayerMatch EQU $FFEA
+hSpriteVRAMSlotAndFacing:: db
-hSpriteAnimFrameCounter EQU $FFEA
+hCoordsInFrontOfPlayerMatch::
+hSpriteAnimFrameCounter::
+ db
-hSpriteScreenYCoord EQU $FFEB
-hSpriteScreenXCoord EQU $FFEC
-hSpriteMapYCoord EQU $FFED
-hSpriteMapXCoord EQU $FFEE
+UNION
+hSpriteScreenYCoord:: db
+hSpriteScreenXCoord:: db
+hSpriteMapYCoord:: db
+hSpriteMapXCoord:: db
-hItemAlreadyFound EQU $FFEB
-hDidntFindAnyHiddenObject EQU $FFEE
+NEXTU
+hItemAlreadyFound:: db
+ ds 2
+hDidntFindAnyHiddenObject:: db
-hSavedMapTextPtr EQU $FFEC
+NEXTU
+ ds 1
+hSavedMapTextPtr:: dw
+ ds 1
+ENDU
-hWhoseTurn EQU $FFF3 ; 0 on player’s turn, 1 on enemy’s turn
+ ds 4
-hClearLetterPrintingDelayFlags EQU $FFF4
+hWhoseTurn:: db ; 0 on player's turn, 1 on enemy's turn
+hClearLetterPrintingDelayFlags:: db
+
+ ds 1
+
; bit 0: draw HP fraction to the right of bar instead of below (for party menu)
; bit 1: menu is double spaced
-hFlagsFFF6 EQU $FFF6
+hFlagsFFF6:: db
-hFieldMoveMonMenuTopMenuItemX EQU $FFF7
+hFieldMoveMonMenuTopMenuItemX:: db
-hDisableJoypadPolling EQU $FFF9
+hJoyInput:: db
-hJoyInput EQU $FFF8
+hDisableJoypadPolling:: db
+
+ ds 5
--- a/layout.link
+++ b/layout.link
@@ -33,10 +33,8 @@
"Header"
org $150
"Home"
-
ROMX $1
"bank1"
-
ROMX $2
"Sound Effect Headers 1"
"Music Headers 1"
@@ -43,31 +41,25 @@
"Sound Effects 1"
"Audio Engine 1"
"Music 1"
-
ROMX $3
"bank3"
-
ROMX $4
"NPC Sprites 1"
- "Graphics (BANK 4)"
- "Battle (BANK 4)"
-
+ "Font Graphics"
+ "Battle Engine 1"
ROMX $5
"NPC Sprites 2"
- "Battle (BANK 5)"
-
+ "Battle Engine 2"
ROMX $6
"Maps 1"
- "bank6_1"
+ "Play Time"
"Maps 2"
- "bank6_2"
-
+ "Doors and Ledges"
ROMX $7
"Maps 3"
- "bank7_1"
+ "Pokémon Names"
"Maps 4"
- "bank7_2"
-
+ "Hidden Objects 1"
ROMX $8
"Sound Effect Headers 2"
"Music Headers 2"
@@ -76,104 +68,83 @@
"Bill's PC"
"Audio Engine 2"
"Music 2"
-
ROMX $9
"Pics 1"
- "Battle (BANK 9)"
-
+ "Battle Engine 3"
ROMX $A
"Pics 2"
- "Battle (BANK A)"
-
+ "Battle Engine 4"
ROMX $B
"Pics 3"
- "Battle (BANK B)"
-
+ "Battle Engine 5"
ROMX $C
"Pics 4"
- "Battle (BANK C)"
-
+ "Battle Engine 6"
ROMX $D
"Pics 5"
- "Battle (BANK D)"
-
+ "Slot Machines"
ROMX $E
- "bankE"
-
+ "Battle Engine 7"
ROMX $F
- "bankF"
-
+ "Battle Core"
ROMX $10
"bank10"
-
ROMX $11
"Maps 5"
- "bank11_1"
+ "Pokédex Rating"
"Maps 6"
- "bank11_2"
-
+ "Hidden Objects Core"
ROMX $12
"Maps 7"
- "bank12"
+ "Screen Effects"
"Maps 8"
-
ROMX $13
"Pics 6"
"Maps 9"
- "bank13"
-
+ "Predefs"
ROMX $14
"Maps 10"
- "bank14"
-
+ "Battle Engine 8"
+ "Hidden Objects 2"
ROMX $15
"Maps 11"
- "bank15_1"
+ "Battle Engine 9"
"Maps 12"
- "bank15_2"
-
+ "Diploma"
+ "Trainer Sight"
ROMX $16
"Maps 13"
- "bank16_1"
+ "Battle Engine 10"
"Maps 14"
- "bank16_2"
-
+ "Saffron Guards"
ROMX $17
"Maps 15"
- "bank17_1"
+ "Starter Dex"
"Maps 16"
- "bank17_2"
-
+ "Hidden Objects 3"
ROMX $18
"Maps 17"
- "bank18_1"
+ "Cinnabar Lab Fossils"
"Maps 18"
- "bank18_2"
-
+ "Hidden Objects 4"
ROMX $19
"Tilesets 1"
-
ROMX $1A
- "bank1A"
+ "Battle Engine 11"
"Tilesets 2"
-
ROMX $1B
"Tilesets 3"
-
ROMX $1C
"bank1C"
-
ROMX $1D
"Maps 19"
- "bank1D_1"
+ "Itemfinder 1"
"Maps 20"
- "bank1D_2"
+ "Vending Machine"
"Maps 21"
- "bank1D_3"
-
+ "Itemfinder 2"
ROMX $1E
"bank1E"
-
ROMX $1F
"Sound Effect Headers 3"
"Music Headers 3"
@@ -180,62 +151,48 @@
"Sound Effects 3"
"Audio Engine 3"
"Music 3"
-
ROMX $20
"Text 1"
-
ROMX $21
"Text 2"
-
ROMX $22
"Text 3"
-
ROMX $23
"Text 4"
-
ROMX $24
"Text 5"
-
ROMX $25
"Text 6"
-
ROMX $26
"Text 7"
-
ROMX $27
"Text 8"
-
ROMX $28
"Text 9"
-
ROMX $29
"Text 10"
-
ROMX $2A
"Text 11"
-
ROMX $2B
- "Pokedex Text"
-
+ "Pokédex Text"
ROMX $2C
"Move Names"
-
WRAM0
- "WRAM Bank 0"
+ "WRAM"
org $c100
"Sprite State Data"
"OAM Buffer"
org $dfff
"Stack"
-
+VRAM
+ "VRAM"
SRAM $0
"Sprite Buffers"
-
SRAM $1
"Save Data"
-
SRAM $2
"Saved Boxes 1"
-
SRAM $3
"Saved Boxes 2"
+HRAM
+ "HRAM"
--- a/macros/coords.asm
+++ b/macros/coords.asm
@@ -1,65 +1,79 @@
-validateCoords: MACRO
- IF \1 >= SCREEN_WIDTH
- fail "x coord out of range"
+validate_coords: MACRO
+ IF _NARG >= 4
+ IF \1 >= \3
+ fail "x coord out of range"
+ ENDC
+ IF \2 >= \4
+ fail "y coord out of range"
+ ENDC
+ ELSE
+ validate_coords \1, \2, SCREEN_WIDTH, SCREEN_HEIGHT
ENDC
- IF \2 >= SCREEN_HEIGHT
- fail "y coord out of range"
- ENDC
ENDM
-;\1 = r
-;\2 = X
-;\3 = Y
-;\4 = which tilemap (optional)
+hlcoord EQUS "coord hl,"
+bccoord EQUS "coord bc,"
+decoord EQUS "coord de,"
+
coord: MACRO
- validateCoords \2, \3
+; register, x, y[, origin]
+ validate_coords \2, \3
IF _NARG >= 4
- ld \1, \4 + SCREEN_WIDTH * \3 + \2
+ ld \1, (\3) * SCREEN_WIDTH + (\2) + \4
ELSE
- ld \1, wTileMap + SCREEN_WIDTH * \3 + \2
+ ld \1, (\3) * SCREEN_WIDTH + (\2) + wTileMap
ENDC
ENDM
-;\1 = X
-;\2 = Y
-;\3 = which tilemap (optional)
-aCoord: MACRO
- validateCoords \1, \2
- IF _NARG >= 3
- ld a, [\3 + SCREEN_WIDTH * \2 + \1]
+hlbgcoord EQUS "bgcoord hl,"
+bcbgcoord EQUS "bgcoord bc,"
+debgcoord EQUS "bgcoord de,"
+
+bgcoord: MACRO
+; register, x, y[, origin]
+ validate_coords \2, \3, BG_MAP_WIDTH, BG_MAP_HEIGHT
+ IF _NARG >= 4
+ ld \1, (\3) * BG_MAP_WIDTH + (\2) + \4
ELSE
- ld a, [wTileMap + SCREEN_WIDTH * \2 + \1]
+ ld \1, (\3) * BG_MAP_WIDTH + (\2) + vBGMap0
ENDC
ENDM
-;\1 = X
-;\2 = Y
-;\3 = which tilemap (optional)
-Coorda: MACRO
- validateCoords \1, \2
+hlowcoord EQUS "owcoord hl,"
+bcowcoord EQUS "owcoord bc,"
+deowcoord EQUS "owcoord de,"
+
+owcoord: MACRO
+; register, x, y, map width
+ ld \1, wOverworldMap + ((\2) + 3) + (((\3) + 3) * ((\4) + (3 * 2)))
+ENDM
+
+dwcoord: MACRO
+; x, y
+ validate_coords \1, \2
IF _NARG >= 3
- ld [\3 + SCREEN_WIDTH * \2 + \1], a
+ dw (\2) * SCREEN_WIDTH + (\1) + \3
ELSE
- ld [wTileMap + SCREEN_WIDTH * \2 + \1], a
+ dw (\2) * SCREEN_WIDTH + (\1) + wTileMap
ENDC
ENDM
-;\1 = X
-;\2 = Y
-;\3 = which tilemap (optional)
-dwCoord: MACRO
- validateCoords \1, \2
+ldcoord_a: MACRO
+; x, y[, origin]
+ validate_coords \1, \2
IF _NARG >= 3
- dw \3 + SCREEN_WIDTH * \2 + \1
+ ld [(\2) * SCREEN_WIDTH + (\1) + \3], a
ELSE
- dw wTileMap + SCREEN_WIDTH * \2 + \1
+ ld [(\2) * SCREEN_WIDTH + (\1) + wTileMap], a
ENDC
ENDM
-;\1 = r
-;\2 = X
-;\3 = Y
-;\4 = map width
-overworldMapCoord: MACRO
- ld \1, wOverworldMap + ((\2) + 3) + (((\3) + 3) * ((\4) + (3 * 2)))
+lda_coord: MACRO
+; x, y[, origin]
+ validate_coords \1, \2
+ IF _NARG >= 3
+ ld a, [(\2) * SCREEN_WIDTH + (\1) + \3]
+ ELSE
+ ld a, [(\2) * SCREEN_WIDTH + (\1) + wTileMap]
+ ENDC
ENDM
--- a/macros/data.asm
+++ b/macros/data.asm
@@ -33,7 +33,7 @@
else
fail "\1 is not a TM or HM move"
ENDC
- shift
+ SHIFT
ENDR
REPT 3 ; TM01-TM24 (24/24)
db _tms1 & $ff
--- a/macros/farcall.asm
+++ b/macros/farcall.asm
@@ -1,24 +1,22 @@
-farcall EQUS "callba"
-
-callba: MACRO
+farcall: MACRO
ld b, BANK(\1)
ld hl, \1
call Bankswitch
ENDM
-callab: MACRO
+callfar: MACRO
ld hl, \1
ld b, BANK(\1)
call Bankswitch
ENDM
-jpba: MACRO
+farjp: MACRO
ld b, BANK(\1)
ld hl, \1
jp Bankswitch
ENDM
-jpab: MACRO
+jpfar: MACRO
ld hl, \1
ld b, BANK(\1)
jp Bankswitch
@@ -25,13 +23,13 @@
ENDM
homecall: MACRO
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
push af
ld a, BANK(\1)
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
call \1
pop af
- ld [hLoadedROMBank], a
+ ldh [hLoadedROMBank], a
ld [MBC1RomBank], a
ENDM
--- a/macros/gfx.asm
+++ b/macros/gfx.asm
@@ -1,7 +1,7 @@
RGB: MACRO
REPT _NARG / 3
dw palred (\1) + palgreen (\2) + palblue (\3)
- shift 3
+ SHIFT 3
ENDR
ENDM
--- a/macros/scripts/audio.asm
+++ b/macros/scripts/audio.asm
@@ -141,8 +141,7 @@
; stored in big endian
tempo: MACRO
db $ED
- db \1 / $100
- db \1 % $100
+ db HIGH(\1), LOW(\1)
ENDM
; arguments: left output enable mask, right output enable mask
--- a/macros/scripts/events.asm
+++ b/macros/scripts/events.asm
@@ -185,7 +185,7 @@
SetEvent \1
REPT _NARG - 1
SetEventReuseHL \2
- shift
+ SHIFT
ENDR
ENDM
@@ -237,7 +237,7 @@
ResetEvent \1
REPT _NARG - 1
ResetEventReuseHL \2
- shift
+ SHIFT
ENDR
ENDM
--- a/macros/scripts/text.asm
+++ b/macros/scripts/text.asm
@@ -200,7 +200,7 @@
db _NARG ; number of items
REPT _NARG
db \1 ; item id
- shift
+ SHIFT
ENDR
db -1 ; end
ENDM
--- a/macros/wram.asm
+++ b/macros/wram.asm
@@ -71,7 +71,8 @@
\1IntraAnimFrameCounter:: db
\1AnimFrameCounter:: db
\1FacingDirection:: db
- ds 2
+\1YAdjusted:: db
+\1XAdjusted:: db
\1CollisionData:: db
ds 3
\1End::
@@ -87,7 +88,8 @@
\1MovementByte1:: db
\1GrassPriority:: db
\1MovementDelay:: db
- ds 4
+\1OrigFacingDirection:: db
+ ds 3
\1PictureID:: db
\1ImageBaseOffset:: db
ds 1
--- a/main.asm
+++ b/main.asm
@@ -78,12 +78,12 @@
INCLUDE "engine/events/hidden_objects/pokemon_stuff.asm"
-SECTION "Graphics (BANK 4)", ROMX
+SECTION "Font Graphics", ROMX
INCLUDE "gfx/font.asm"
-SECTION "Battle (BANK 4)", ROMX
+SECTION "Battle Engine 1", ROMX
INCLUDE "engine/overworld/is_player_just_outside_map.asm"
INCLUDE "engine/pokemon/status_screen.asm"
@@ -101,7 +101,7 @@
INCLUDE "engine/math/random.asm"
-SECTION "Battle (BANK 5)", ROMX
+SECTION "Battle Engine 2", ROMX
INCLUDE "engine/gfx/load_pokedex_tiles.asm"
INCLUDE "engine/overworld/map_sprites.asm"
@@ -111,12 +111,12 @@
INCLUDE "engine/menus/pc.asm"
-SECTION "bank6_1", ROMX
+SECTION "Play Time", ROMX
INCLUDE "engine/play_time.asm"
-SECTION "bank6_2", ROMX
+SECTION "Doors and Ledges", ROMX
INCLUDE "engine/overworld/auto_movement.asm"
INCLUDE "engine/overworld/doors.asm"
@@ -123,7 +123,7 @@
INCLUDE "engine/overworld/ledges.asm"
-SECTION "bank7_1", ROMX
+SECTION "Pokémon Names", ROMX
INCLUDE "data/pokemon/names.asm"
INCLUDE "engine/movie/oak_speech/clear_save.asm"
@@ -130,7 +130,7 @@
INCLUDE "engine/events/elevator.asm"
-SECTION "bank7_2", ROMX
+SECTION "Hidden Objects 1", ROMX
INCLUDE "engine/menus/oaks_pc.asm"
INCLUDE "engine/events/hidden_objects/new_bike.asm"
@@ -147,7 +147,7 @@
INCLUDE "engine/pokemon/bills_pc.asm"
-SECTION "Battle (BANK 9)", ROMX
+SECTION "Battle Engine 3", ROMX
INCLUDE "engine/battle/print_type.asm"
INCLUDE "engine/battle/save_trainer_name.asm"
@@ -154,12 +154,12 @@
INCLUDE "engine/battle/move_effects/focus_energy.asm"
-SECTION "Battle (BANK A)", ROMX
+SECTION "Battle Engine 4", ROMX
INCLUDE "engine/battle/move_effects/leech_seed.asm"
-SECTION "Battle (BANK B)", ROMX
+SECTION "Battle Engine 5", ROMX
INCLUDE "engine/battle/display_effectiveness.asm"
INCLUDE "gfx/trainer_card.asm"
@@ -169,13 +169,13 @@
INCLUDE "engine/slots/game_corner_slots2.asm"
-SECTION "Battle (BANK C)", ROMX
+SECTION "Battle Engine 6", ROMX
INCLUDE "engine/battle/move_effects/mist.asm"
INCLUDE "engine/battle/move_effects/one_hit_ko.asm"
-SECTION "Battle (BANK D)", ROMX
+SECTION "Slot Machines", ROMX
INCLUDE "engine/movie/title2.asm"
INCLUDE "engine/battle/link_battle_versus_text.asm"
@@ -185,7 +185,7 @@
INCLUDE "engine/slots/game_corner_slots.asm"
-SECTION "bankE", ROMX
+SECTION "Battle Engine 7", ROMX
INCLUDE "data/moves/moves.asm"
INCLUDE "data/pokemon/base_stats.asm"
@@ -201,7 +201,7 @@
INCLUDE "engine/battle/move_effects/reflect_light_screen.asm"
-SECTION "bankF", ROMX
+SECTION "Battle Core", ROMX
INCLUDE "engine/battle/core.asm"
INCLUDE "engine/battle/effects.asm"
@@ -215,31 +215,35 @@
INCLUDE "engine/movie/trade2.asm"
-SECTION "bank11_1", ROMX
+SECTION "Pokédex Rating", ROMX
INCLUDE "engine/events/pokedex_rating.asm"
-SECTION "bank11_2", ROMX
+SECTION "Hidden Objects Core", ROMX
INCLUDE "engine/overworld/hidden_objects.asm"
-SECTION "bank12", ROMX
+SECTION "Screen Effects", ROMX
INCLUDE "engine/gfx/screen_effects.asm"
-SECTION "bank13", ROMX
+SECTION "Predefs", ROMX
INCLUDE "engine/events/give_pokemon.asm"
INCLUDE "engine/predefs.asm"
-SECTION "bank14", ROMX
+SECTION "Battle Engine 8", ROMX
INCLUDE "engine/battle/init_battle_variables.asm"
INCLUDE "engine/battle/move_effects/paralyze.asm"
+
+
+SECTION "Hidden Objects 2", ROMX
+
INCLUDE "engine/events/card_key.asm"
INCLUDE "engine/events/prize_menu.asm"
INCLUDE "engine/events/hidden_objects/school_notebooks.asm"
@@ -247,18 +251,22 @@
INCLUDE "engine/events/hidden_objects/indigo_plateau_hq.asm"
-SECTION "bank15_1", ROMX
+SECTION "Battle Engine 9", ROMX
INCLUDE "engine/battle/experience.asm"
-SECTION "bank15_2", ROMX
+SECTION "Diploma", ROMX
INCLUDE "engine/events/diploma.asm"
+
+
+SECTION "Trainer Sight", ROMX
+
INCLUDE "engine/overworld/trainer_sight.asm"
-SECTION "bank16_1", ROMX
+SECTION "Battle Engine 10", ROMX
INCLUDE "engine/battle/common_text.asm"
INCLUDE "engine/pokemon/experience.asm"
@@ -265,17 +273,17 @@
INCLUDE "engine/events/oaks_aide.asm"
-SECTION "bank16_2", ROMX
+SECTION "Saffron Guards", ROMX
INCLUDE "engine/events/saffron_guards.asm"
-SECTION "bank17_1", ROMX
+SECTION "Starter Dex", ROMX
INCLUDE "engine/events/starter_dex.asm"
-SECTION "bank17_2", ROMX
+SECTION "Hidden Objects 3", ROMX
INCLUDE "engine/pokemon/set_types.asm"
INCLUDE "engine/events/hidden_objects/reds_room.asm"
@@ -285,12 +293,12 @@
INCLUDE "engine/events/hidden_objects/vermilion_gym_trash.asm"
-SECTION "bank18_1", ROMX
+SECTION "Cinnabar Lab Fossils", ROMX
INCLUDE "engine/events/cinnabar_lab.asm"
-SECTION "bank18_2", ROMX
+SECTION "Hidden Objects 4", ROMX
INCLUDE "engine/events/hidden_objects/gym_statues.asm"
INCLUDE "engine/events/hidden_objects/bench_guys.asm"
@@ -298,7 +306,7 @@
INCLUDE "engine/events/hidden_objects/pokecenter_pc.asm"
-SECTION "bank1A", ROMX
+SECTION "Battle Engine 11", ROMX
INCLUDE "engine/battle/decrement_pp.asm"
INCLUDE "gfx/version.asm"
@@ -319,7 +327,7 @@
INCLUDE "engine/menus/save.asm"
-SECTION "bank1D_1", ROMX
+SECTION "Itemfinder 1", ROMX
INCLUDE "engine/movie/credits.asm"
INCLUDE "engine/pokemon/status_ailments.asm"
@@ -326,12 +334,12 @@
INCLUDE "engine/items/itemfinder.asm"
-SECTION "bank1D_2", ROMX
+SECTION "Vending Machine", ROMX
INCLUDE "engine/events/vending_machine.asm"
-SECTION "bank1D_3", ROMX
+SECTION "Itemfinder 2", ROMX
INCLUDE "engine/menus/league_pc.asm"
INCLUDE "engine/events/hidden_items.asm"
--- a/scripts/AgathasRoom.asm
+++ b/scripts/AgathasRoom.asm
@@ -63,8 +63,8 @@
call ArePlayerCoordsInArray
jp nc, CheckFightingMapTrainers
xor a
- ld [hJoyPressed], a
- ld [hJoyHeld], a
+ ldh [hJoyPressed], a
+ ldh [hJoyHeld], a
ld [wSimulatedJoypadStatesEnd], a
ld [wSimulatedJoypadStatesIndex], a
ld a, [wCoordIndex]
@@ -74,7 +74,7 @@
jr z, AgathaScriptWalkIntoRoom
.stopPlayerFromLeaving
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID ; "Don't run away!"
ld a, D_UP
ld [wSimulatedJoypadStatesEnd], a
@@ -110,7 +110,7 @@
cp $ff
jp z, ResetAgathaScript
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $1
ld [wChampionsRoomCurScript], a
--- a/scripts/BikeShop.asm
+++ b/scripts/BikeShop.asm
@@ -23,8 +23,8 @@
call GiveItem
jr nc, .BagFull
ld a, BIKE_VOUCHER
- ld [hItemToRemoveID], a
- callba RemoveItemByID
+ ldh [hItemToRemoveID], a
+ farcall RemoveItemByID
SetEvent EVENT_GOT_BICYCLE
ld hl, BikeShopText_1d824
call PrintText
@@ -49,15 +49,15 @@
ld [wTopMenuItemX], a
ld hl, wd730
set 6, [hl]
- coord hl, 0, 0
+ hlcoord 0, 0
ld b, $4
ld c, $f
call TextBoxBorder
call UpdateSprites
- coord hl, 2, 2
+ hlcoord 2, 2
ld de, BikeShopMenuText
call PlaceString
- coord hl, 8, 3
+ hlcoord 8, 3
ld de, BikeShopMenuPrice
call PlaceString
ld hl, BikeShopText_1d815
--- a/scripts/BillsHouse.asm
+++ b/scripts/BillsHouse.asm
@@ -23,7 +23,7 @@
ld de, MovementData_1e7a0
.notDown
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, $2
ld [wBillsHouseCurScript], a
@@ -66,13 +66,13 @@
ld a, $2
ld [wSpriteIndex], a
ld a, $c
- ld [hSpriteScreenYCoord], a
+ ldh [hSpriteScreenYCoord], a
ld a, $40
- ld [hSpriteScreenXCoord], a
+ ldh [hSpriteScreenXCoord], a
ld a, $6
- ld [hSpriteMapYCoord], a
+ ldh [hSpriteMapYCoord], a
ld a, $5
- ld [hSpriteMapXCoord], a
+ ldh [hSpriteMapXCoord], a
call SetSpritePosition1
ld a, HS_BILL_1
ld [wMissableObjectIndex], a
@@ -80,7 +80,7 @@
ld c, 8
call DelayFrames
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld de, MovementData_1e807
call MoveSprite
ld a, $4
@@ -109,7 +109,7 @@
BillsHouseScript5:
ld a, $4
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $0
ld [wBillsHouseCurScript], a
--- a/scripts/BrunosRoom.asm
+++ b/scripts/BrunosRoom.asm
@@ -63,8 +63,8 @@
call ArePlayerCoordsInArray
jp nc, CheckFightingMapTrainers
xor a
- ld [hJoyPressed], a
- ld [hJoyHeld], a
+ ldh [hJoyPressed], a
+ ldh [hJoyHeld], a
ld [wSimulatedJoypadStatesEnd], a
ld [wSimulatedJoypadStatesIndex], a
ld a, [wCoordIndex]
@@ -74,7 +74,7 @@
jr z, BrunoScriptWalkIntoRoom
.stopPlayerFromLeaving
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID ; "Don't run away!"
ld a, D_UP
ld [wSimulatedJoypadStatesEnd], a
@@ -110,7 +110,7 @@
cp $ff
jp z, ResetBrunoScript
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
BrunosRoom_TextPointers:
--- a/scripts/CeladonGym.asm
+++ b/scripts/CeladonGym.asm
@@ -44,7 +44,7 @@
CeladonGymText_48963:
ld a, $9
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_BEAT_ERIKA
lb bc, TM_MEGA_DRAIN, 1
@@ -51,13 +51,13 @@
call GiveItem
jr nc, .BagFull
ld a, $a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_GOT_TM21
jr .gymVictory
.BagFull
ld a, $b
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
.gymVictory
ld hl, wObtainedBadges
@@ -170,7 +170,7 @@
ld hl, CeladonGymText_48a63
ld de, CeladonGymText_48a63
call SaveEndBattleTextPointers
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
--- a/scripts/CeladonMansion3F.asm
+++ b/scripts/CeladonMansion3F.asm
@@ -49,7 +49,7 @@
text_far _CompletedDexText
text_promptbutton
text_asm
- callab DisplayDiploma
+ callfar DisplayDiploma
ld a, $1
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
jp TextScriptEnd
--- a/scripts/CeladonMartElevator.asm
+++ b/scripts/CeladonMartElevator.asm
@@ -60,7 +60,7 @@
CeladonMartElevatorWarpMapsEnd:
CeladonMartElevatorScript_48654:
- jpba ShakeElevator
+ farjp ShakeElevator
CeladonMartElevator_TextPointers:
dw CeladonMartElevatorText1
--- a/scripts/CeladonMartRoof.asm
+++ b/scripts/CeladonMartRoof.asm
@@ -64,7 +64,7 @@
dec l
ld b, l
ld c, 12
- coord hl, 0, 0
+ hlcoord 0, 0
call TextBoxBorder
call UpdateSprites
call CeladonMartRoofScript_PrintDrinksInBag
@@ -79,7 +79,7 @@
ld e, a
add hl, de
ld a, [hl]
- ld [hItemToRemoveID], a
+ ldh [hItemToRemoveID], a
cp FRESH_WATER
jr z, .gaveFreshWater
cp SODA_POP
@@ -131,7 +131,7 @@
jp PrintText
RemoveItemByIDBank12:
- jpba RemoveItemByID
+ farjp RemoveItemByID
CeladonMartRoofText_484ee:
text_far _CeladonMartRoofText_484ee
@@ -186,7 +186,7 @@
CeladonMartRoofScript_PrintDrinksInBag:
ld hl, wFilteredBagItems
xor a
- ld [hItemCounter], a
+ ldh [hItemCounter], a
.loop
ld a, [hli]
cp $ff
@@ -194,8 +194,8 @@
push hl
ld [wd11e], a
call GetItemName
- coord hl, 2, 2
- ld a, [hItemCounter]
+ hlcoord 2, 2
+ ldh a, [hItemCounter]
ld bc, SCREEN_WIDTH * 2
call AddNTimes
ld de, wcd6d
--- a/scripts/CeruleanCity.asm
+++ b/scripts/CeruleanCity.asm
@@ -27,7 +27,7 @@
ld [wJoyIgnore], a
SetEvent EVENT_BEAT_CERULEAN_ROCKET_THIEF
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
ld [wJoyIgnore], a
@@ -53,7 +53,7 @@
ld [wSprite02StateData1FacingDirection], a
call Delay3
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
.asm_194f7
CheckEvent EVENT_BEAT_CERULEAN_RIVAL
@@ -72,7 +72,7 @@
ld a, MUSIC_MEET_RIVAL
call PlayMusic
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $f0
ld [wJoyIgnore], a
ld a, [wXCoord]
@@ -79,9 +79,9 @@
cp $14
jr z, .asm_19535
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, $5
- ld [hSpriteDataOffset], a
+ ldh [hSpriteDataOffset], a
call GetPointerWithinSpriteStateData2
ld [hl], $19
.asm_19535
@@ -90,7 +90,7 @@
predef ShowObject
ld de, CeruleanCityMovement1
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, $1
ld [wCeruleanCityCurScript], a
@@ -114,9 +114,9 @@
CeruleanCityScript_1955d:
ld a, 1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
xor a ; SPRITE_FACING_DOWN
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
jp SetSpriteFacingDirectionAndDelay ; face object
CeruleanCityScript1:
@@ -126,7 +126,7 @@
xor a
ld [wJoyIgnore], a
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld hl, wd72d
set 6, [hl]
@@ -154,7 +154,7 @@
ld [wTrainerNo], a
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
call CeruleanCityScript_1955d
ld a, $2
ld [wCeruleanCityCurScript], a
@@ -169,14 +169,14 @@
ld [wJoyIgnore], a
SetEvent EVENT_BEAT_CERULEAN_RIVAL
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
- callba Music_RivalAlternateStart
+ farcall Music_RivalAlternateStart
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld a, [wXCoord]
cp $14
@@ -187,7 +187,7 @@
ld de, CeruleanCityMovement3
.asm_195f3
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, $3
ld [wCeruleanCityCurScript], a
@@ -289,7 +289,7 @@
ld hl, CeruleanCityText_196ee
ld de, CeruleanCityText_196ee
call SaveEndBattleTextPointers
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
@@ -310,7 +310,7 @@
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
ld hl, ReceivedTM28Text
call PrintText
- callba CeruleanHideRocket
+ farcall CeruleanHideRocket
.Done
jp TextScriptEnd
@@ -356,7 +356,7 @@
CeruleanCityText7:
text_asm
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
cp 180
jr c, .asm_e9fc9
ld hl, CeruleanCityText_19730
@@ -388,7 +388,7 @@
CeruleanCityText8:
text_asm
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
cp 180
jr c, .asm_e28da
ld hl, CeruleanCityText_1976f
--- a/scripts/CeruleanGym.asm
+++ b/scripts/CeruleanGym.asm
@@ -44,7 +44,7 @@
CeruleanGymScript_5c70d:
ld a, $5
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_BEAT_MISTY
lb bc, TM_BUBBLEBEAM, 1
@@ -51,13 +51,13 @@
call GiveItem
jr nc, .BagFull
ld a, $6
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_GOT_TM11
jr .gymVictory
.BagFull
ld a, $7
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
.gymVictory
ld hl, wObtainedBadges
@@ -121,7 +121,7 @@
ld hl, CeruleanGymText_5c7d8
ld de, CeruleanGymText_5c7d8
call SaveEndBattleTextPointers
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
@@ -128,7 +128,7 @@
ld a, $2
ld [wGymLeaderNo], a
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $3
ld [wCeruleanGymCurScript], a
.done
--- a/scripts/ChampionsRoom.asm
+++ b/scripts/ChampionsRoom.asm
@@ -55,7 +55,7 @@
ld hl, wOptions
res 7, [hl] ; Turn on battle animations to make the battle feel more epic.
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call Delay3
ld hl, wd72d
@@ -84,7 +84,7 @@
ld [wTrainerNo], a
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $3
ld [wChampionsRoomCurScript], a
ret
@@ -98,10 +98,10 @@
ld a, $f0
ld [wJoyIgnore], a
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call GaryScript_760c8
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld a, $4
ld [wChampionsRoomCurScript], a
@@ -108,16 +108,16 @@
ret
GaryScript4:
- callba Music_Cities1AlternateTempo
+ farcall Music_Cities1AlternateTempo
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call GaryScript_760c8
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld de, OakEntranceAfterVictoryMovement
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, HS_CHAMPIONS_ROOM_OAK
ld [wMissableObjectIndex], a
@@ -141,17 +141,17 @@
ld a, PLAYER_DIR_LEFT
ld [wPlayerMovingDirection], a
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_LEFT
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
xor a ; SPRITE_FACING_DOWN
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $3
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call GaryScript_760c8
ld a, $6
ld [wChampionsRoomCurScript], a
@@ -159,12 +159,12 @@
GaryScript6:
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_RIGHT
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $4
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call GaryScript_760c8
ld a, $7
ld [wChampionsRoomCurScript], a
@@ -172,16 +172,16 @@
GaryScript7:
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
xor a ; SPRITE_FACING_DOWN
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $5
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call GaryScript_760c8
ld de, OakExitGaryRoomMovement
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, $8
ld [wChampionsRoomCurScript], a
--- a/scripts/CinnabarGym.asm
+++ b/scripts/CinnabarGym.asm
@@ -36,7 +36,7 @@
ret
CinnabarGymScript_757a0:
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
ld [wTrainerHeaderFlagBit], a
ret
@@ -50,7 +50,7 @@
ld a, [wOpponentAfterWrongAnswer]
and a
ret z
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
cp $4
jr nz, .asm_757c3
ld a, PLAYER_DIR_DOWN
@@ -85,7 +85,7 @@
ld [wJoyIgnore], a
ld a, [wOpponentAfterWrongAnswer]
ld [wTrainerHeaderFlagBit], a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
CinnabarGymFlagAction:
@@ -96,7 +96,7 @@
cp $ff
jp z, CinnabarGymScript_75792
ld a, [wTrainerHeaderFlagBit]
- ld [hGymGateIndex], a
+ ldh [hGymGateIndex], a
AdjustEventBit EVENT_BEAT_CINNABAR_GYM_TRAINER_0, 2
ld c, a
ld b, FLAG_TEST
@@ -111,7 +111,7 @@
call WaitForSoundToFinish
.asm_7581b
ld a, [wTrainerHeaderFlagBit]
- ld [hGymGateIndex], a
+ ldh [hGymGateIndex], a
AdjustEventBit EVENT_BEAT_CINNABAR_GYM_TRAINER_0, 2
ld c, a
ld b, FLAG_SET
@@ -141,7 +141,7 @@
ld [wJoyIgnore], a
CinnabarGymScript3_75857:
ld a, $a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_BEAT_BLAINE
lb bc, TM_FIRE_BLAST, 1
@@ -148,13 +148,13 @@
call GiveItem
jr nc, .BagFull
ld a, $b
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_GOT_TM38
jr .gymVictory
.BagFull
ld a, $c
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
.gymVictory
ld hl, wObtainedBadges
@@ -185,7 +185,7 @@
dw TM38NoRoomText
CinnabarGymScript_758b7:
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
--- a/scripts/CinnabarIsland.asm
+++ b/scripts/CinnabarIsland.asm
@@ -25,10 +25,10 @@
ld a, PLAYER_DIR_UP
ld [wPlayerMovingDirection], a
ld a, $8
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $1
ld [wSimulatedJoypadStatesIndex], a
ld a, D_DOWN
--- a/scripts/CinnabarLabFossilRoom.asm
+++ b/scripts/CinnabarLabFossilRoom.asm
@@ -56,7 +56,7 @@
ld a, [wFilteredBagItemsCount]
and a
jr z, .asm_75d8d
- callba GiveFossilToCinnabarLab
+ farcall GiveFossilToCinnabarLab
jr .asm_75d93
.asm_75d8d
ld hl, Lab4Text_75dcb
@@ -106,4 +106,4 @@
jp TextScriptEnd
LoadFossilItemAndMonNameBank1D:
- jpba LoadFossilItemAndMonName
+ farjp LoadFossilItemAndMonName
--- a/scripts/CopycatsHouse2F.asm
+++ b/scripts/CopycatsHouse2F.asm
@@ -29,8 +29,8 @@
ld hl, ReceivedTM31Text
call PrintText
ld a, POKE_DOLL
- ld [hItemToRemoveID], a
- callba RemoveItemByID
+ ldh [hItemToRemoveID], a
+ farcall RemoveItemByID
SetEvent EVENT_GOT_TM31
jr .asm_62ecd
.BagFull
--- a/scripts/Daycare.asm
+++ b/scripts/Daycare.asm
@@ -35,7 +35,7 @@
pop af
ld hl, DayCareAllRightThenText
jp c, .done
- callab KnowsHMMove
+ callfar KnowsHMMove
ld hl, DayCareCantAcceptMonWithHMText
jp c, .done
xor a
@@ -65,19 +65,19 @@
ld a, DAYCARE_DATA
ld [wMonDataLocation], a
call LoadMonData
- callab CalcLevelFromExperience
+ callfar CalcLevelFromExperience
ld a, d
cp MAX_LEVEL
jr c, .skipCalcExp
ld d, MAX_LEVEL
- callab CalcExperience
+ callfar CalcExperience
ld hl, wDayCareMonExp
- ld a, [hExperience]
+ ldh a, [hExperience]
ld [hli], a
- ld a, [hExperience + 1]
+ ldh a, [hExperience + 1]
ld [hli], a
- ld a, [hExperience + 2]
+ ldh a, [hExperience + 2]
ld [hl], a
ld d, MAX_LEVEL
@@ -138,11 +138,11 @@
and a
jp nz, .leaveMonInDayCare
ld hl, wDayCareTotalCost
- ld [hMoney], a
+ ldh [hMoney], a
ld a, [hli]
- ld [hMoney + 1], a
+ ldh [hMoney + 1], a
ld a, [hl]
- ld [hMoney + 2], a
+ ldh [hMoney + 2], a
call HasEnoughMoney
jr nc, .enoughMoney
ld hl, DayCareNotEnoughMoneyText
--- a/scripts/FightingDojo.asm
+++ b/scripts/FightingDojo.asm
@@ -30,7 +30,7 @@
CheckEvent EVENT_BEAT_KARATE_MASTER
ret nz
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld [wcf0d], a
ld a, [wYCoord]
cp $3
@@ -43,12 +43,12 @@
ld a, PLAYER_DIR_RIGHT
ld [wPlayerMovingDirection], a
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_LEFT
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ret
@@ -62,9 +62,9 @@
ld a, PLAYER_DIR_RIGHT
ld [wPlayerMovingDirection], a
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_LEFT
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
.asm_5cde4
@@ -72,7 +72,7 @@
ld [wJoyIgnore], a
SetEventRange EVENT_BEAT_KARATE_MASTER, EVENT_BEAT_FIGHTING_DOJO_TRAINER_3
ld a, $8
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
ld [wJoyIgnore], a
@@ -142,7 +142,7 @@
ld hl, FightingDojoText_5ce93
ld de, FightingDojoText_5ce93
call SaveEndBattleTextPointers
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
--- a/scripts/FuchsiaGym.asm
+++ b/scripts/FuchsiaGym.asm
@@ -44,7 +44,7 @@
ld [wJoyIgnore], a
FuchsiaGymScript3_75497:
ld a, $9
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_BEAT_KOGA
lb bc, TM_TOXIC, 1
@@ -51,13 +51,13 @@
call GiveItem
jr nc, .BagFull
ld a, $a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_GOT_TM06
jr .gymVictory
.BagFull
ld a, $b
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
.gymVictory
ld hl, wObtainedBadges
@@ -161,7 +161,7 @@
ld hl, KogaAfterBattleText
ld de, KogaAfterBattleText
call SaveEndBattleTextPointers
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
@@ -168,7 +168,7 @@
ld a, $5
ld [wGymLeaderNo], a
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $3
ld [wFuchsiaGymCurScript], a
.done
--- a/scripts/GameCorner.asm
+++ b/scripts/GameCorner.asm
@@ -12,7 +12,7 @@
res 6, [hl]
ret z
call Random
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
cp $7
jr nc, .asm_48be2
ld a, $8
@@ -57,10 +57,10 @@
ld a, $f0
ld [wJoyIgnore], a
ld a, $d
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $b
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld de, MovementData_48c5a
ld a, [wYCoord]
@@ -75,7 +75,7 @@
ld de, MovementData_48c63
.asm_48c4d
ld a, $b
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, $2
ld [wGameCornerCurScript], a
@@ -150,10 +150,10 @@
call Has9990Coins
jr nc, .asm_48d14
xor a
- ld [hMoney], a
- ld [hMoney + 2], a
+ ldh [hMoney], a
+ ldh [hMoney + 2], a
ld a, $10
- ld [hMoney + 1], a
+ ldh [hMoney + 1], a
call HasEnoughMoney
jr nc, .asm_48cdb
ld hl, CeladonGameCornerText_48d31
@@ -160,19 +160,19 @@
jr .asm_48d1c
.asm_48cdb
xor a
- ld [hMoney], a
- ld [hMoney + 2], a
+ ldh [hMoney], a
+ ldh [hMoney + 2], a
ld a, $10
- ld [hMoney + 1], a
+ ldh [hMoney + 1], a
ld hl, hMoney + 2
ld de, wPlayerMoney + 2
ld c, $3
predef SubBCDPredef
xor a
- ld [hUnusedCoinsByte], a
- ld [hCoins], a
+ ldh [hUnusedCoinsByte], a
+ ldh [hCoins], a
ld a, $50
- ld [hCoins + 1], a
+ ldh [hCoins + 1], a
ld de, wPlayerCoins + 1
ld hl, hCoins + 1
ld c, $2
@@ -236,10 +236,10 @@
call Has9990Coins
jr nc, .asm_48d8e
xor a
- ld [hUnusedCoinsByte], a
- ld [hCoins], a
+ ldh [hUnusedCoinsByte], a
+ ldh [hCoins], a
ld a, $10
- ld [hCoins + 1], a
+ ldh [hCoins + 1], a
ld de, wPlayerCoins + 1
ld hl, hCoins + 1
ld c, $2
@@ -316,10 +316,10 @@
call Has9990Coins
jr nc, .asm_48e18
xor a
- ld [hUnusedCoinsByte], a
- ld [hCoins], a
+ ldh [hUnusedCoinsByte], a
+ ldh [hCoins], a
ld a, $20
- ld [hCoins + 1], a
+ ldh [hCoins + 1], a
ld de, wPlayerCoins + 1
ld hl, hCoins + 1
ld c, $2
@@ -368,10 +368,10 @@
call Has9990Coins
jr z, .asm_48e7a
xor a
- ld [hUnusedCoinsByte], a
- ld [hCoins], a
+ ldh [hUnusedCoinsByte], a
+ ldh [hCoins], a
ld a, $20
- ld [hCoins + 1], a
+ ldh [hCoins + 1], a
ld de, wPlayerCoins + 1
ld hl, hCoins + 1
ld c, $2
@@ -418,14 +418,14 @@
ld hl, CeladonGameCornerText_48ed3
ld de, CeladonGameCornerText_48ed3
call SaveEndBattleTextPointers
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
xor a
- ld [hJoyHeld], a
- ld [hJoyPressed], a
- ld [hJoyReleased], a
+ ldh [hJoyHeld], a
+ ldh [hJoyPressed], a
+ ldh [hJoyReleased], a
ld a, $1
ld [wGameCornerCurScript], a
jp TextScriptEnd
@@ -474,32 +474,32 @@
CeladonGameCornerScript_48f1e:
ld hl, wd730
set 6, [hl]
- coord hl, 11, 0
+ hlcoord 11, 0
ld b, $5
ld c, $7
call TextBoxBorder
call UpdateSprites
- coord hl, 12, 1
+ hlcoord 12, 1
ld b, 4
ld c, 7
call ClearScreenArea
- coord hl, 12, 2
+ hlcoord 12, 2
ld de, GameCornerMoneyText
call PlaceString
- coord hl, 12, 3
+ hlcoord 12, 3
ld de, GameCornerBlankText1
call PlaceString
- coord hl, 12, 3
+ hlcoord 12, 3
ld de, wPlayerMoney
ld c, $a3
call PrintBCDNumber
- coord hl, 12, 4
+ hlcoord 12, 4
ld de, GameCornerCoinText
call PlaceString
- coord hl, 12, 5
+ hlcoord 12, 5
ld de, GameCornerBlankText2
call PlaceString
- coord hl, 15, 5
+ hlcoord 15, 5
ld de, wPlayerCoins
ld c, $82
call PrintBCDNumber
@@ -521,7 +521,7 @@
Has9990Coins:
ld a, $99
- ld [hCoins], a
+ ldh [hCoins], a
ld a, $90
- ld [hCoins + 1], a
+ ldh [hCoins + 1], a
jp HasEnoughCoins
--- a/scripts/HallOfFame.asm
+++ b/scripts/HallOfFame.asm
@@ -45,7 +45,7 @@
ld [wHallOfFameCurScript], a
ld a, PALLET_TOWN
ld [wLastBlackoutMap], a
- callba SaveSAVtoSRAM
+ farcall SaveSAVtoSRAM
ld b, 5
.delayLoop
ld c, 600 / 5
@@ -79,10 +79,10 @@
ld a, PLAYER_DIR_RIGHT
ld [wPlayerMovingDirection], a
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld a, SPRITE_FACING_LEFT
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
call Delay3
xor a
@@ -90,7 +90,7 @@
inc a ; PLAYER_DIR_RIGHT
ld [wPlayerMovingDirection], a
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $ff
ld [wJoyIgnore], a
--- a/scripts/LancesRoom.asm
+++ b/scripts/LancesRoom.asm
@@ -59,12 +59,12 @@
call ArePlayerCoordsInArray
jp nc, CheckFightingMapTrainers
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, [wCoordIndex]
cp $3 ; Is player standing next to Lance's sprite?
jr nc, .notStandingNextToLance
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
.notStandingNextToLance
cp $5 ; Is player standing on the entrance staircase?
@@ -91,7 +91,7 @@
cp $ff
jp z, ResetLanceScript
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
WalkToLance:
--- a/scripts/LoreleisRoom.asm
+++ b/scripts/LoreleisRoom.asm
@@ -65,8 +65,8 @@
call ArePlayerCoordsInArray
jp nc, CheckFightingMapTrainers
xor a
- ld [hJoyPressed], a
- ld [hJoyHeld], a
+ ldh [hJoyPressed], a
+ ldh [hJoyHeld], a
ld [wSimulatedJoypadStatesEnd], a
ld [wSimulatedJoypadStatesIndex], a
ld a, [wCoordIndex]
@@ -76,7 +76,7 @@
jr z, LoreleiScriptWalkIntoRoom
.stopPlayerFromLeaving
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID ; "Don't run away!"
ld a, D_UP
ld [wSimulatedJoypadStatesEnd], a
@@ -112,7 +112,7 @@
cp $ff
jp z, ResetLoreleiScript
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
LoreleisRoom_TextPointers:
--- a/scripts/MtMoonB2F.asm
+++ b/scripts/MtMoonB2F.asm
@@ -62,9 +62,9 @@
cp $d
jp nz, MtMoon3Script_49d91
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
MtMoon3Script_49d91:
@@ -88,7 +88,7 @@
MtMoon3Script4:
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld hl, CoordsData_49dea
call ArePlayerCoordsInArray
@@ -102,7 +102,7 @@
ld de, MovementData_49df8
.asm_49dda
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, $5
ld [wMtMoonB2FCurScript], a
@@ -136,7 +136,7 @@
ld a, $1
ld [wDoNotWaitForButtonPressAfterDisplayingText], a
ld a, $a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
CheckEvent EVENT_GOT_DOME_FOSSIL
jr z, .asm_49e1d
@@ -222,7 +222,7 @@
ld hl, MtMoon3Text_49f8a
ld de, MtMoon3Text_49f8a
call SaveEndBattleTextPointers
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
--- a/scripts/MtMoonPokecenter.asm
+++ b/scripts/MtMoonPokecenter.asm
@@ -34,10 +34,10 @@
ld a, [wCurrentMenuItem]
and a
jp nz, .choseNo
- ld [hMoney], a
- ld [hMoney + 2], a
+ ldh [hMoney], a
+ ldh [hMoney + 2], a
ld a, $5
- ld [hMoney + 1], a
+ ldh [hMoney + 1], a
call HasEnoughMoney
jr nc, .enoughMoney
ld hl, .NoMoneyText
--- a/scripts/Museum1F.asm
+++ b/scripts/Museum1F.asm
@@ -23,9 +23,9 @@
ret nz
.asm_5c120
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
Museum1FScript1:
@@ -71,7 +71,7 @@
ld [wTextBoxID], a
call DisplayTextBoxID
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld hl, Museum1FText_5c21f
call PrintText
call YesNoChoice
@@ -79,10 +79,10 @@
and a
jr nz, .asm_de133
xor a
- ld [hMoney], a
- ld [hMoney + 1], a
+ ldh [hMoney], a
+ ldh [hMoney + 1], a
ld a, $50
- ld [hMoney + 2], a
+ ldh [hMoney + 2], a
call HasEnoughMoney
jr nc, .asm_0f3e3
ld hl, Museum1FText_5c229
--- a/scripts/NameRatersHouse.asm
+++ b/scripts/NameRatersHouse.asm
@@ -68,7 +68,7 @@
jr nz, .asm_1daae
ld hl, NameRaterText_1dac2
call PrintText
- callba DisplayNameRaterScreen
+ farcall DisplayNameRaterScreen
jr c, .asm_1daae
ld hl, NameRaterText_1dac7
.asm_1daa8
--- a/scripts/OaksLab.asm
+++ b/scripts/OaksLab.asm
@@ -48,7 +48,7 @@
OaksLabScript1:
ld a, $8
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld de, OakEntryMovement
call MoveSprite
@@ -86,14 +86,14 @@
ld [wSimulatedJoypadStatesIndex], a
call StartSimulatingJoypadStates
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
xor a
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $5
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
xor a
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $4
@@ -111,9 +111,9 @@
SetEvent EVENT_FOLLOWED_OAK_INTO_LAB
SetEvent EVENT_FOLLOWED_OAK_INTO_LAB_2
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_UP
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
call UpdateSprites
ld hl, wFlags_D733
@@ -128,19 +128,19 @@
ld a, $fc
ld [wJoyIgnore], a
ld a, $11
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call Delay3
ld a, $12
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call Delay3
ld a, $13
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call Delay3
ld a, $14
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_OAK_ASKED_TO_CHOOSE_MON
xor a
@@ -155,18 +155,18 @@
cp $6
ret nz
ld a, $5
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
xor a ; SPRITE_FACING_DOWN
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
xor a
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
call UpdateSprites
ld a, $c
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $1
ld [wSimulatedJoypadStatesIndex], a
@@ -254,9 +254,9 @@
jr nz, .moveBlue
push hl
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, $4
- ld [hSpriteDataOffset], a
+ ldh [hSpriteDataOffset], a
call GetPointerWithinSpriteStateData1
push hl
ld [hl], $4c
@@ -281,7 +281,7 @@
.moveBlue
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, $9
@@ -295,12 +295,12 @@
ld a, $fc
ld [wJoyIgnore], a
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_UP
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $d
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, [wRivalStarterBallSpriteIndex]
cp $2
@@ -324,12 +324,12 @@
ld [wd11e], a
call GetMonName
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_UP
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $e
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_GOT_STARTER
xor a
@@ -344,9 +344,9 @@
cp $6
ret nz
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
xor a ; SPRITE_FACING_DOWN
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, PLAYER_DIR_UP
ld [wPlayerMovingDirection], a
@@ -354,21 +354,21 @@
ld a, MUSIC_MEET_RIVAL
call PlayMusic
ld a, $f
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $1
- ld [hNPCPlayerRelativePosPerspective], a
+ ldh [hNPCPlayerRelativePosPerspective], a
ld a, $1
swap a
- ld [hNPCSpriteOffset], a
+ ldh [hNPCSpriteOffset], a
predef CalcPositionOfPlayerRelativeToNPC
- ld a, [hNPCPlayerYDistance]
+ ldh a, [hNPCPlayerYDistance]
dec a
- ld [hNPCPlayerYDistance], a
+ ldh [hNPCPlayerYDistance], a
predef FindPathToPlayer
ld de, wNPCMovementDirections2
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, $b
@@ -424,9 +424,9 @@
ld [wSpriteIndex], a
call SetSpritePosition1
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
xor a ; SPRITE_FACING_DOWN
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
predef HealParty
SetEvent EVENT_BATTLED_RIVAL_IN_OAKS_LAB
@@ -439,11 +439,11 @@
ld c, 20
call DelayFrames
ld a, $10
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
- callba Music_RivalAlternateStart
+ farcall Music_RivalAlternateStart
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld de, .RivalExitMovement
call MoveSprite
ld a, [wXCoord]
@@ -508,14 +508,14 @@
OaksLabScript15:
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
call EnableAutoTextBoxDrawing
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
- callba Music_RivalAlternateStart
+ farcall Music_RivalAlternateStart
ld a, $15
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call OaksLabScript_1d02b
ld a, HS_OAKS_LAB_RIVAL
@@ -530,7 +530,7 @@
call FillMemory
ld [hl], $ff
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld de, wNPCMovementDirections2
call MoveSprite
@@ -540,14 +540,14 @@
OaksLabScript_1cefd:
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_UP
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $8
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
xor a ; SPRITE_FACING_DOWN
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
jp SetSpriteFacingDirectionAndDelay
OaksLabScript16:
@@ -560,21 +560,21 @@
ld [wJoyIgnore], a
call OaksLabScript_1cefd
ld a, $16
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call DelayFrame
call OaksLabScript_1cefd
ld a, $17
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call DelayFrame
call OaksLabScript_1cefd
ld a, $18
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call DelayFrame
ld a, $19
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call Delay3
ld a, HS_POKEDEX_1
@@ -585,16 +585,16 @@
predef HideObject
call OaksLabScript_1cefd
ld a, $1a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_RIGHT
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
call Delay3
ld a, $1b
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_GOT_POKEDEX
SetEvent EVENT_OAK_GOT_PARCEL
@@ -614,9 +614,9 @@
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
- callba Music_RivalAlternateStart
+ farcall Music_RivalAlternateStart
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld de, wNPCMovementDirections2
call MoveSprite
@@ -672,9 +672,9 @@
OaksLabScript_1d02b:
ld a, $7c
- ld [hSpriteScreenYCoord], a
+ ldh [hSpriteScreenYCoord], a
ld a, $8
- ld [hSpriteMapXCoord], a
+ ldh [hSpriteMapXCoord], a
ld a, [wYCoord]
cp $3
jr nz, .asm_1d045
@@ -703,9 +703,9 @@
.asm_1d066
ld a, $20
.asm_1d068
- ld [hSpriteScreenXCoord], a
+ ldh [hSpriteScreenXCoord], a
ld a, b
- ld [hSpriteMapYCoord], a
+ ldh [hSpriteMapYCoord], a
ld a, $1
ld [wSpriteIndex], a
call SetSpritePosition1
@@ -840,15 +840,15 @@
OaksLabScript_1d157:
ld a, $5
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, $9
- ld [hSpriteDataOffset], a
+ ldh [hSpriteDataOffset], a
call GetPointerWithinSpriteStateData1
ld [hl], SPRITE_FACING_DOWN
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, $9
- ld [hSpriteDataOffset], a
+ ldh [hSpriteDataOffset], a
call GetPointerWithinSpriteStateData1
ld [hl], SPRITE_FACING_RIGHT
ld hl, wd730
@@ -947,9 +947,9 @@
OaksLabScript_1d22d:
ld a, $5
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, $9
- ld [hSpriteDataOffset], a
+ ldh [hSpriteDataOffset], a
call GetPointerWithinSpriteStateData1
ld [hl], $0
ld hl, OaksLabLastMonText
--- a/scripts/PalletTown.asm
+++ b/scripts/PalletTown.asm
@@ -24,7 +24,7 @@
cp 1 ; is player near north exit?
ret nz
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
ld a, SFX_STOP_ALL_MUSIC
@@ -31,7 +31,7 @@
call PlaySound
ld a, BANK(Music_MeetProfOak)
ld c, a
- ld a, MUSIC_MEET_PROF_OAK ; “oak appears” music
+ ld a, MUSIC_MEET_PROF_OAK ; "oak appears" music
call PlayMusic
ld a, $FC
ld [wJoyIgnore], a
@@ -46,7 +46,7 @@
xor a
ld [wcf0d], a
ld a, 1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $FF
ld [wJoyIgnore], a
@@ -61,25 +61,25 @@
PalletTownScript2:
ld a, 1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_UP
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
call Delay3
ld a, 1
ld [wYCoord], a
ld a, 1
- ld [hNPCPlayerRelativePosPerspective], a
+ ldh [hNPCPlayerRelativePosPerspective], a
ld a, 1
swap a
- ld [hNPCSpriteOffset], a
+ ldh [hNPCSpriteOffset], a
predef CalcPositionOfPlayerRelativeToNPC
ld hl, hNPCPlayerYDistance
dec [hl]
- predef FindPathToPlayer ; load Oak’s movement into wNPCMovementDirections2
+ predef FindPathToPlayer ; load Oak's movement into wNPCMovementDirections2
ld de, wNPCMovementDirections2
ld a, 1 ; oak
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, $FF
ld [wJoyIgnore], a
@@ -100,7 +100,7 @@
ld a, $FC
ld [wJoyIgnore], a
ld a, 1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
; set up movement script that causes the player to follow Oak to his lab
ld a, $FF
@@ -111,7 +111,7 @@
ld [wNPCMovementScriptFunctionNum], a
ld a, 1
ld [wNPCMovementScriptPointerTableNum], a
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
ld [wNPCMovementScriptBank], a
; trigger the next script
@@ -205,10 +205,10 @@
text_far _PalletTownText5
text_end
-PalletTownText6: ; sign by Red’s house
+PalletTownText6: ; sign by Red's house
text_far _PalletTownText6
text_end
-PalletTownText7: ; sign by Blue’s house
+PalletTownText7: ; sign by Blue's house
text_far _PalletTownText7
text_end
--- a/scripts/PewterCity.asm
+++ b/scripts/PewterCity.asm
@@ -29,7 +29,7 @@
ld a, $f0
ld [wJoyIgnore], a
ld a, $5
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
CoordsData_19277:
@@ -44,32 +44,32 @@
and a
ret nz
ld a, $3
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_UP
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, ($3 << 4) | SPRITE_FACING_UP
- ld [hSpriteImageIndex], a
+ ldh [hSpriteImageIndex], a
call SetSpriteImageIndexAfterSettingFacingDirection
call PlayDefaultMusic
ld hl, wFlags_0xcd60
set 4, [hl]
ld a, $d
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $3c
- ld [hSpriteScreenYCoord], a
+ ldh [hSpriteScreenYCoord], a
ld a, $30
- ld [hSpriteScreenXCoord], a
+ ldh [hSpriteScreenXCoord], a
ld a, $c
- ld [hSpriteMapYCoord], a
+ ldh [hSpriteMapYCoord], a
ld a, $11
- ld [hSpriteMapXCoord], a
+ ldh [hSpriteMapXCoord], a
ld a, $3
ld [wSpriteIndex], a
call SetSpritePosition1
ld a, $3
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld de, MovementData_PewterMuseumGuyExit
call MoveSprite
ld a, $2
@@ -112,32 +112,32 @@
and a
ret nz
ld a, $5
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_LEFT
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, ($1 << 4) | SPRITE_FACING_LEFT
- ld [hSpriteImageIndex], a
+ ldh [hSpriteImageIndex], a
call SetSpriteImageIndexAfterSettingFacingDirection
call PlayDefaultMusic
ld hl, wFlags_0xcd60
set 4, [hl]
ld a, $e
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $3c
- ld [hSpriteScreenYCoord], a
+ ldh [hSpriteScreenYCoord], a
ld a, $40
- ld [hSpriteScreenXCoord], a
+ ldh [hSpriteScreenXCoord], a
ld a, $16
- ld [hSpriteMapYCoord], a
+ ldh [hSpriteMapYCoord], a
ld a, $10
- ld [hSpriteMapXCoord], a
+ ldh [hSpriteMapXCoord], a
ld a, $5
ld [wSpriteIndex], a
call SetSpritePosition1
ld a, $5
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld de, MovementData_PewterGymGuyExit
call MoveSprite
ld a, $5
@@ -215,12 +215,12 @@
ld hl, PewterCityText_193fb
call PrintText
xor a
- ld [hJoyPressed], a
- ld [hJoyHeld], a
+ ldh [hJoyPressed], a
+ ldh [hJoyHeld], a
ld [wNPCMovementScriptFunctionNum], a
ld a, $2
ld [wNPCMovementScriptPointerTableNum], a
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
ld [wNPCMovementScriptBank], a
ld a, $3
ld [wSpriteIndex], a
@@ -280,11 +280,11 @@
ld hl, PewterCityText_1945d
call PrintText
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld [wNPCMovementScriptFunctionNum], a
ld a, $3
ld [wNPCMovementScriptPointerTableNum], a
- ld a, [hLoadedROMBank]
+ ldh a, [hLoadedROMBank]
ld [wNPCMovementScriptBank], a
ld a, $5
ld [wSpriteIndex], a
--- a/scripts/PewterGym.asm
+++ b/scripts/PewterGym.asm
@@ -44,7 +44,7 @@
PewterGymScript_5c3df:
ld a, $4
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_BEAT_BROCK
lb bc, TM_BIDE, 1
@@ -51,13 +51,13 @@
call GiveItem
jr nc, .BagFull
ld a, $5
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_GOT_TM34
jr .gymVictory
.BagFull
ld a, $6
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
.gymVictory
ld hl, wObtainedBadges
@@ -120,7 +120,7 @@
ld hl, PewterGymText_5c4bc
ld de, PewterGymText_5c4bc
call SaveEndBattleTextPointers
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
@@ -127,7 +127,7 @@
ld a, $1
ld [wGymLeaderNo], a
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $3
ld [wPewterGymCurScript], a
ld [wCurMapScript], a
--- a/scripts/PokemonMansion1F.asm
+++ b/scripts/PokemonMansion1F.asm
@@ -50,9 +50,9 @@
cp SPRITE_FACING_UP
ret nz
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $4
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
PokemonMansion1F_ScriptPointers:
--- a/scripts/PokemonMansion2F.asm
+++ b/scripts/PokemonMansion2F.asm
@@ -46,9 +46,9 @@
cp SPRITE_FACING_UP
ret nz
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $5
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
PokemonMansion2F_ScriptPointers:
--- a/scripts/PokemonMansion3F.asm
+++ b/scripts/PokemonMansion3F.asm
@@ -77,9 +77,9 @@
cp SPRITE_FACING_UP
ret nz
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $6
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
PokemonMansion3F_TextPointers:
--- a/scripts/PokemonMansionB1F.asm
+++ b/scripts/PokemonMansionB1F.asm
@@ -48,9 +48,9 @@
cp SPRITE_FACING_UP
ret nz
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $9
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
PokemonMansionB1F_ScriptPointers:
--- a/scripts/PokemonTower2F.asm
+++ b/scripts/PokemonTower2F.asm
@@ -41,16 +41,16 @@
.asm_60544
ld [wPlayerMovingDirection], a
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, b
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
- ld [hJoyHeld], a
- ld [hJoyPressed], a
+ ldh [hJoyHeld], a
+ ldh [hJoyPressed], a
ret
CoordsData_6055e:
@@ -66,7 +66,7 @@
ld [wJoyIgnore], a
SetEvent EVENT_BEAT_POKEMON_TOWER_RIVAL
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld de, MovementData_605b2
CheckEvent EVENT_POKEMON_TOWER_RIVAL_ON_LEFT
@@ -74,12 +74,12 @@
ld de, MovementData_605a9
.asm_60589
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
- callba Music_RivalAlternateStart
+ farcall Music_RivalAlternateStart
ld a, $2
ld [wPokemonTower2FCurScript], a
ld [wCurMapScript], a
--- a/scripts/PokemonTower5F.asm
+++ b/scripts/PokemonTower5F.asm
@@ -24,7 +24,7 @@
CheckAndSetEvent EVENT_IN_PURIFIED_ZONE
ret nz
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $f0
ld [wJoyIgnore], a
ld hl, wd72e
@@ -35,7 +35,7 @@
call Delay3
call GBFadeInFromWhite
ld a, $7
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
ld [wJoyIgnore], a
--- a/scripts/PokemonTower6F.asm
+++ b/scripts/PokemonTower6F.asm
@@ -28,9 +28,9 @@
call ArePlayerCoordsInArray
jp nc, CheckFightingMapTrainers
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $6
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, MAROWAK
ld [wCurOpponent], a
@@ -61,7 +61,7 @@
jr nz, .asm_60b82
SetEvent EVENT_BEAT_GHOST_MAROWAK
ld a, $7
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
ld [wJoyIgnore], a
--- a/scripts/PokemonTower7F.asm
+++ b/scripts/PokemonTower7F.asm
@@ -31,7 +31,7 @@
ld a, $f0
ld [wJoyIgnore], a
ld a, [wSpriteIndex]
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call PokemonTower7Script_60db6
ld a, $3
@@ -72,7 +72,7 @@
ld a, SPRITE_FACING_UP
ld [wSpritePlayerStateData1FacingDirection], a
ld a, MR_FUJIS_HOUSE
- ld [hWarpDestinationMap], a
+ ldh [hWarpDestinationMap], a
ld a, $1
ld [wDestinationWarpID], a
ld a, LAVENDER_TOWN
@@ -107,7 +107,7 @@
ld d, [hl]
ld e, a
ld a, [wSpriteIndex]
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
jp MoveSprite
.asm_60dde
inc hl
--- a/scripts/RedsHouse2F.asm
+++ b/scripts/RedsHouse2F.asm
@@ -10,7 +10,7 @@
RedsHouse2FScript0:
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, PLAYER_DIR_UP
ld [wPlayerMovingDirection], a
ld a, 1
--- a/scripts/RocketHideoutB2F.asm
+++ b/scripts/RocketHideoutB2F.asm
@@ -367,38 +367,32 @@
spinner: MACRO
; \1: source
; \2: offset (BANK() chokes on literals)
-; \3: length
-; \4: dest
- dw \1 + \2
- db \3, BANK(\1)
- dw \4
+; \3: dest
+ dw \1 tile \2
+ db 1
+ db BANK(\1)
+ dw vTileset tile \3
ENDM
FacilitySpinnerArrows:
-FACILITY_SPINNER EQU $20 * $10
-vFacilitySpinner EQU vTileset + FACILITY_SPINNER
-
- spinner SpinnerArrowAnimTiles, $00, 1, vFacilitySpinner
- spinner SpinnerArrowAnimTiles, $10, 1, vFacilitySpinner + $10
- spinner SpinnerArrowAnimTiles, $20, 1, vFacilitySpinner + $100
- spinner SpinnerArrowAnimTiles, $30, 1, vFacilitySpinner + $110
- spinner Facility_GFX, FACILITY_SPINNER + $000, 1, vFacilitySpinner
- spinner Facility_GFX, FACILITY_SPINNER + $010, 1, vFacilitySpinner + $10
- spinner Facility_GFX, FACILITY_SPINNER + $100, 1, vFacilitySpinner + $100
- spinner Facility_GFX, FACILITY_SPINNER + $110, 1, vFacilitySpinner + $110
+ spinner SpinnerArrowAnimTiles, 0, $20
+ spinner SpinnerArrowAnimTiles, 1, $21
+ spinner SpinnerArrowAnimTiles, 2, $30
+ spinner SpinnerArrowAnimTiles, 3, $31
+ spinner Facility_GFX, $20, $20
+ spinner Facility_GFX, $21, $21
+ spinner Facility_GFX, $30, $30
+ spinner Facility_GFX, $31, $31
GymSpinnerArrows:
-GYM_SPINNER EQU $3c * $10
-vGymSpinner EQU vTileset + GYM_SPINNER
-
- spinner SpinnerArrowAnimTiles, $10, 1, vGymSpinner
- spinner SpinnerArrowAnimTiles, $30, 1, vGymSpinner + $10
- spinner SpinnerArrowAnimTiles, $00, 1, vGymSpinner + $100
- spinner SpinnerArrowAnimTiles, $20, 1, vGymSpinner + $110
- spinner Gym_GFX, GYM_SPINNER + $000, 1, vGymSpinner
- spinner Gym_GFX, GYM_SPINNER + $010, 1, vGymSpinner + $10
- spinner Gym_GFX, GYM_SPINNER + $100, 1, vGymSpinner + $100
- spinner Gym_GFX, GYM_SPINNER + $110, 1, vGymSpinner + $110
+ spinner SpinnerArrowAnimTiles, 1, $3c
+ spinner SpinnerArrowAnimTiles, 3, $3d
+ spinner SpinnerArrowAnimTiles, 0, $4c
+ spinner SpinnerArrowAnimTiles, 2, $4d
+ spinner Gym_GFX, $3c, $3c
+ spinner Gym_GFX, $3d, $3d
+ spinner Gym_GFX, $4c, $4c
+ spinner Gym_GFX, $4d, $4d
SpinnerPlayerFacingDirections:
; This isn't the order of the facing directions. Rather, it's a list of
--- a/scripts/RocketHideoutB4F.asm
+++ b/scripts/RocketHideoutB4F.asm
@@ -52,7 +52,7 @@
ld [wJoyIgnore], a
SetEvent EVENT_BEAT_ROCKET_HIDEOUT_GIOVANNI
ld a, $a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call GBFadeOutToBlack
ld a, HS_ROCKET_HIDEOUT_B4F_GIOVANNI
@@ -125,12 +125,12 @@
ld hl, RocketHideout4Text_4557f
ld de, RocketHideout4Text_4557f
call SaveEndBattleTextPointers
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $3
ld [wRocketHideoutB4FCurScript], a
ld [wCurMapScript], a
--- a/scripts/RocketHideoutElevator.asm
+++ b/scripts/RocketHideoutElevator.asm
@@ -58,7 +58,7 @@
RocketHideoutElevatorScript_4575f:
call Delay3
- callba ShakeElevator
+ farcall ShakeElevator
ret
RocketHideoutElevator_TextPointers:
--- a/scripts/Route11Gate2F.asm
+++ b/scripts/Route11Gate2F.asm
@@ -20,9 +20,9 @@
CheckEvent EVENT_GOT_ITEMFINDER, 1
jr c, .asm_4949b
ld a, 30 ; pokemon needed
- ld [hOaksAideRequirement], a
+ ldh [hOaksAideRequirement], a
ld a, ITEMFINDER ; oak's aide reward
- ld [hOaksAideRewardItem], a
+ ldh [hOaksAideRewardItem], a
ld [wd11e], a
call GetItemName
ld h, d
@@ -31,7 +31,7 @@
ld bc, ITEM_NAME_LENGTH
call CopyData
predef OaksAideScript
- ld a, [hOaksAideResult]
+ ldh a, [hOaksAideResult]
dec a
jr nz, .asm_494a1
SetEvent EVENT_GOT_ITEMFINDER
--- a/scripts/Route12.asm
+++ b/scripts/Route12.asm
@@ -27,7 +27,7 @@
ResetEventReuseHL EVENT_FIGHT_ROUTE12_SNORLAX
jp z, CheckFightingMapTrainers
ld a, $d
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, SNORLAX
ld [wCurOpponent], a
@@ -50,7 +50,7 @@
cp $2
jr z, .asm_59664
ld a, $e
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
.asm_59664
SetEvent EVENT_BEAT_ROUTE12_SNORLAX
--- a/scripts/Route15Gate2F.asm
+++ b/scripts/Route15Gate2F.asm
@@ -10,9 +10,9 @@
CheckEvent EVENT_GOT_EXP_ALL
jr nz, .asm_49683
ld a, 50 ; pokemon needed
- ld [hOaksAideRequirement], a
+ ldh [hOaksAideRequirement], a
ld a, EXP_ALL ; oak's aide reward
- ld [hOaksAideRewardItem], a
+ ldh [hOaksAideRewardItem], a
ld [wd11e], a
call GetItemName
ld hl, wcd6d
@@ -20,7 +20,7 @@
ld bc, ITEM_NAME_LENGTH
call CopyData
predef OaksAideScript
- ld a, [hOaksAideResult]
+ ldh a, [hOaksAideResult]
cp $1
jr nz, .asm_49689
SetEvent EVENT_GOT_EXP_ALL
--- a/scripts/Route16.asm
+++ b/scripts/Route16.asm
@@ -27,7 +27,7 @@
ResetEventReuseHL EVENT_FIGHT_ROUTE16_SNORLAX
jp z, CheckFightingMapTrainers
ld a, $a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, SNORLAX
ld [wCurOpponent], a
@@ -51,7 +51,7 @@
cp $2
jr z, .asm_599a8
ld a, $b
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
.asm_599a8
SetEvent EVENT_BEAT_ROUTE16_SNORLAX
--- a/scripts/Route16Gate1F.asm
+++ b/scripts/Route16Gate1F.asm
@@ -19,10 +19,10 @@
call ArePlayerCoordsInArray
ret nc
ld a, $3
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, [wCoordIndex]
cp $1
jr z, .asm_4970e
@@ -59,7 +59,7 @@
Route16GateScript2:
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $1
ld [wSimulatedJoypadStatesIndex], a
--- a/scripts/Route18Gate1F.asm
+++ b/scripts/Route18Gate1F.asm
@@ -19,10 +19,10 @@
call ArePlayerCoordsInArray
ret nc
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, [wCoordIndex]
cp $1
jr z, .asm_498c6
@@ -59,7 +59,7 @@
Route18GateScript2:
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $1
ld [wSimulatedJoypadStatesIndex], a
--- a/scripts/Route22.asm
+++ b/scripts/Route22.asm
@@ -44,7 +44,7 @@
.asm_50ef1
call MoveSprite
ld a, SPRITE_FACING_RIGHT
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
jp SetSpriteFacingDirectionAndDelay
Route22RivalMovementData:
@@ -63,7 +63,7 @@
ld a, [wCoordIndex]
ld [wcf0d], a
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $f0
ld [wJoyIgnore], a
ld a, PLAYER_DIR_LEFT
@@ -96,7 +96,7 @@
ld a, MUSIC_MEET_RIVAL
call PlayMusic
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call Route22MoveRivalSprite
ld a, $1
ld [wRoute22CurScript], a
@@ -116,14 +116,14 @@
.asm_50f78
ld a, SPRITE_FACING_RIGHT
.asm_50f7a
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteFacingDirectionAndDelay
xor a
ld [wJoyIgnore], a
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld hl, wd72d
set 6, [hl]
@@ -157,20 +157,20 @@
.notDown
ld a, SPRITE_FACING_RIGHT
.done
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteFacingDirectionAndDelay
ld a, $f0
ld [wJoyIgnore], a
SetEvent EVENT_BEAT_ROUTE22_RIVAL_1ST_BATTLE
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
- callba Music_RivalAlternateStart
+ farcall Music_RivalAlternateStart
ld a, [wcf0d]
cp $1
jr nz, .asm_50fff
@@ -191,7 +191,7 @@
ld de, Route22RivalExitMovementData2
Route22MoveRival1:
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
jp MoveSprite
Route22RivalExitMovementData1:
@@ -248,9 +248,9 @@
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
- callba Music_RivalAlternateTempo
+ farcall Music_RivalAlternateTempo
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call Route22MoveRivalSprite
ld a, $4
ld [wRoute22CurScript], a
@@ -261,7 +261,7 @@
bit 0, a
ret nz
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, [wcf0d]
cp $1
jr nz, .asm_510a1
@@ -274,12 +274,12 @@
ld [wPlayerMovingDirection], a
ld a, SPRITE_FACING_RIGHT
.asm_510a8
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
xor a
ld [wJoyIgnore], a
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld hl, wd72d
set 6, [hl]
@@ -305,7 +305,7 @@
cp $ff
jp z, Route22Script_50ece
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, [wcf0d]
cp $1
jr nz, .asm_510fb
@@ -318,18 +318,18 @@
ld [wPlayerMovingDirection], a
ld a, SPRITE_FACING_RIGHT
.asm_51102
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $f0
ld [wJoyIgnore], a
SetEvent EVENT_BEAT_ROUTE22_RIVAL_2ND_BATTLE
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
- callba Music_RivalAlternateStartAndTempo
+ farcall Music_RivalAlternateStartAndTempo
ld a, [wcf0d]
cp $1
jr nz, .asm_51134
@@ -350,7 +350,7 @@
ld de, MovementData_5114d
Route22MoveRival2:
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
jp MoveSprite
MovementData_5114c:
--- a/scripts/Route22Gate.asm
+++ b/scripts/Route22Gate.asm
@@ -22,9 +22,9 @@
call ArePlayerCoordsInArray
ret nc
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
Route22GateScriptCoords:
--- a/scripts/Route23.asm
+++ b/scripts/Route23.asm
@@ -45,7 +45,7 @@
ret nc
.asm_51237
ld a, e
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
ld a, c
ld [wWhichBadge], a
ld b, FLAG_TEST
@@ -57,7 +57,7 @@
call Route23Script_5125d
call DisplayTextID
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ret
YCoordsData_51255:
--- a/scripts/Route24.asm
+++ b/scripts/Route24.asm
@@ -28,9 +28,9 @@
call ArePlayerCoordsInArray
jp nc, CheckFightingMapTrainers
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
CheckAndResetEvent EVENT_NUGGET_REWARD_AVAILABLE
ret z
@@ -66,7 +66,7 @@
ld [wJoyIgnore], a
SetEvent EVENT_BEAT_ROUTE24_ROCKET
ld a, $1
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
ld [wJoyIgnore], a
@@ -162,12 +162,12 @@
ld hl, Route24Text_5152b
ld de, Route24Text_5152b
call SaveEndBattleTextPointers
- ld a, [hSpriteIndexOrTextID]
+ ldh a, [hSpriteIndexOrTextID]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $3
ld [wRoute24CurScript], a
ld [wCurMapScript], a
--- a/scripts/Route2Gate.asm
+++ b/scripts/Route2Gate.asm
@@ -10,9 +10,9 @@
CheckEvent EVENT_GOT_HM05
jr nz, .asm_5d60d
ld a, 10 ; pokemon needed
- ld [hOaksAideRequirement], a
+ ldh [hOaksAideRequirement], a
ld a, HM_FLASH ; oak's aide reward
- ld [hOaksAideRewardItem], a
+ ldh [hOaksAideRewardItem], a
ld [wd11e], a
call GetItemName
ld hl, wcd6d
@@ -20,7 +20,7 @@
ld bc, ITEM_NAME_LENGTH
call CopyData
predef OaksAideScript
- ld a, [hOaksAideResult]
+ ldh a, [hOaksAideResult]
cp $1
jr nz, .asm_5d613
SetEvent EVENT_GOT_HM05
--- a/scripts/Route5Gate.asm
+++ b/scripts/Route5Gate.asm
@@ -25,13 +25,13 @@
ld a, PLAYER_DIR_LEFT
ld [wPlayerMovingDirection], a
xor a
- ld [hJoyHeld], a
- callba RemoveGuardDrink
- ld a, [hItemToRemoveID]
+ ldh [hJoyHeld], a
+ farcall RemoveGuardDrink
+ ldh a, [hItemToRemoveID]
and a
jr nz, .asm_1df82
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call Route5GateScript_1df43
ld a, $1
@@ -39,7 +39,7 @@
ret
.asm_1df82
ld a, $3
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld hl, wd728
set 6, [hl]
@@ -73,8 +73,8 @@
ld a, [wd728]
bit 6, a
jr nz, .asm_88856
- callba RemoveGuardDrink
- ld a, [hItemToRemoveID]
+ farcall RemoveGuardDrink
+ ldh a, [hItemToRemoveID]
and a
jr nz, .asm_768a2
ld hl, Route5GateText2
--- a/scripts/Route6Gate.asm
+++ b/scripts/Route6Gate.asm
@@ -19,13 +19,13 @@
ld a, PLAYER_DIR_RIGHT
ld [wPlayerMovingDirection], a
xor a
- ld [hJoyHeld], a
- callba RemoveGuardDrink
- ld a, [hItemToRemoveID]
+ ldh [hJoyHeld], a
+ farcall RemoveGuardDrink
+ ldh a, [hItemToRemoveID]
and a
jr nz, .asm_1e080
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call Route6GateScript_1e0a1
ld a, $1
@@ -35,7 +35,7 @@
ld hl, wd728
set 6, [hl]
ld a, $3
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
CoordsData_1e08c:
--- a/scripts/Route7Gate.asm
+++ b/scripts/Route7Gate.asm
@@ -31,13 +31,13 @@
ld a, PLAYER_DIR_UP
ld [wPlayerMovingDirection], a
xor a
- ld [hJoyHeld], a
- callba RemoveGuardDrink
- ld a, [hItemToRemoveID]
+ ldh [hJoyHeld], a
+ farcall RemoveGuardDrink
+ ldh a, [hItemToRemoveID]
and a
jr nz, .asm_1e15a
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call Route7GateScript_1e111
ld a, $1
@@ -45,7 +45,7 @@
ret
.asm_1e15a
ld a, $3
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld hl, wd728
set 6, [hl]
--- a/scripts/Route8Gate.asm
+++ b/scripts/Route8Gate.asm
@@ -30,13 +30,13 @@
ld a, PLAYER_DIR_LEFT
ld [wPlayerMovingDirection], a
xor a
- ld [hJoyHeld], a
- callba RemoveGuardDrink
- ld a, [hItemToRemoveID]
+ ldh [hJoyHeld], a
+ farcall RemoveGuardDrink
+ ldh a, [hItemToRemoveID]
and a
jr nz, .asm_1e220
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call Route8GateScript_1e1d7
ld a, $1
@@ -46,7 +46,7 @@
ld hl, wd728
set 6, [hl]
ld a, $3
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
jp DisplayTextID
CoordsData_1e22c:
--- a/scripts/SSAnne2F.asm
+++ b/scripts/SSAnne2F.asm
@@ -31,19 +31,19 @@
ld a, MUSIC_MEET_RIVAL
call PlayMusic
ld a, [wCoordIndex]
- ld [hSavedCoordIndex], a
+ ldh [hSavedCoordIndex], a
ld a, HS_SS_ANNE_2F_RIVAL
ld [wMissableObjectIndex], a
predef ShowObject
call Delay3
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $f0
ld [wJoyIgnore], a
- ld a, [hSavedCoordIndex]
+ ldh a, [hSavedCoordIndex]
cp $2
jr nz, .asm_61400
ld de, MovementData_6140c
@@ -81,9 +81,9 @@
.asm_61426
xor a ; SPRITE_FACING_DOWN
.asm_61427
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
jp SetSpriteFacingDirectionAndDelay
SSAnne2Script1:
@@ -94,7 +94,7 @@
xor a
ld [wJoyIgnore], a
ld a, $2
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call Delay3
ld a, OPP_SONY2
@@ -129,10 +129,10 @@
ld a, $f0
ld [wJoyIgnore], a
ld a, $3
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld a, [wXCoord]
cp $25
@@ -143,12 +143,12 @@
ld de, MovementData_614b7
.asm_6149a
ld a, $2
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
- callba Music_RivalAlternateStart
+ farcall Music_RivalAlternateStart
ld a, $3
ld [wSSAnne2FCurScript], a
ret
--- a/scripts/SSAnneKitchen.asm
+++ b/scripts/SSAnneKitchen.asm
@@ -39,7 +39,7 @@
text_asm
ld hl, SSAnne6Text_61807
call PrintText
- ld a, [hRandomAdd]
+ ldh a, [hRandomAdd]
bit 7, a
jr z, .asm_93eb1
ld hl, SSAnne6Text_6180c
--- a/scripts/SafariZoneGate.asm
+++ b/scripts/SafariZoneGate.asm
@@ -18,12 +18,12 @@
call ArePlayerCoordsInArray
ret nc
ld a, $3
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $ff
ld [wJoyIgnore], a
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, SPRITE_FACING_RIGHT
ld [wSpritePlayerStateData1FacingDirection], a
ld a, [wCoordIndex]
@@ -52,11 +52,11 @@
ret nz
.SafariZoneEntranceScript2
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld [wJoyIgnore], a
call UpdateSprites
ld a, $4
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $ff
ld [wJoyIgnore], a
@@ -81,7 +81,7 @@
ld a, $f0
ld [wJoyIgnore], a
ld a, $6
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
ld [wNumSafariBalls], a
@@ -93,7 +93,7 @@
jr .asm_75286
.asm_7527f
ld a, $5
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
.asm_75286
ret
@@ -153,11 +153,11 @@
and a
jp nz, .PleaseComeAgain
xor a
- ld [hMoney], a
+ ldh [hMoney], a
ld a, $05
- ld [hMoney + 1], a
+ ldh [hMoney + 1], a
ld a, $00
- ld [hMoney + 2], a
+ ldh [hMoney + 2], a
call HasEnoughMoney
jr nc, .success
ld hl, .NotEnoughMoneyText
@@ -182,9 +182,9 @@
call PrintText
ld a, 30
ld [wNumSafariBalls], a
- ld a, 502 / $100
+ ld a, HIGH(502)
ld [wSafariSteps], a
- ld a, 502 % $100
+ ld a, LOW(502)
ld [wSafariSteps + 1], a
ld a, D_UP
ld c, 3
--- a/scripts/SaffronGym.asm
+++ b/scripts/SaffronGym.asm
@@ -44,7 +44,7 @@
SaffronGymText_5d068:
ld a, $a
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_BEAT_SABRINA
lb bc, TM_PSYWAVE, 1
@@ -51,13 +51,13 @@
call GiveItem
jr nc, .BagFull
ld a, $b
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_GOT_TM46
jr .gymVictory
.BagFull
ld a, $c
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
.gymVictory
ld hl, wObtainedBadges
@@ -171,7 +171,7 @@
ld hl, SaffronGymText_5d167
ld de, SaffronGymText_5d167
call SaveEndBattleTextPointers
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
--- a/scripts/SilphCo10F.asm
+++ b/scripts/SilphCo10F.asm
@@ -28,7 +28,7 @@
db $FF
SilphCo10Text_5a176:
- ld a, [hUnlockedSilphCoDoors]
+ ldh a, [hUnlockedSilphCoDoors]
and a
ret z
SetEvent EVENT_SILPH_CO_10_UNLOCKED_DOOR
--- a/scripts/SilphCo11F.asm
+++ b/scripts/SilphCo11F.asm
@@ -35,7 +35,7 @@
ld a, [hl]
ld c, a
xor a
- ld [hUnlockedSilphCoDoors], a
+ ldh [hUnlockedSilphCoDoors], a
pop hl
.asm_62143
ld a, [hli]
@@ -60,11 +60,11 @@
ret
.asm_6215f
xor a
- ld [hUnlockedSilphCoDoors], a
+ ldh [hUnlockedSilphCoDoors], a
ret
SilphCo11Script_62163:
- ld a, [hUnlockedSilphCoDoors]
+ ldh a, [hUnlockedSilphCoDoors]
and a
ret z
SetEvent EVENT_SILPH_CO_11_UNLOCKED_DOOR
@@ -171,14 +171,14 @@
ld a, [wCoordIndex]
ld [wcf0d], a
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $f0
ld [wJoyIgnore], a
ld a, $3
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $3
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld de, MovementData_62216
call MoveSprite
@@ -199,9 +199,9 @@
SilphCo11Script_6221a:
ld [wPlayerMovingDirection], a
ld a, $3
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, b
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
jp SetSpriteFacingDirectionAndDelay
SilphCo11Script5:
@@ -222,7 +222,7 @@
ld a, $f0
ld [wJoyIgnore], a
ld a, $6
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call GBFadeOutToBlack
call SilphCo11Script_6216d
@@ -239,7 +239,7 @@
bit 0, a
ret nz
ld a, $3
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld a, [wcf0d]
cp $1
@@ -263,7 +263,7 @@
ld hl, SilphCo10Text_62330
ld de, SilphCo10Text_62330
call SaveEndBattleTextPointers
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
--- a/scripts/SilphCo2F.asm
+++ b/scripts/SilphCo2F.asm
@@ -45,7 +45,7 @@
ld a, [hl]
ld c, a
xor a
- ld [hUnlockedSilphCoDoors], a
+ ldh [hUnlockedSilphCoDoors], a
pop hl
.asm_59d4f
ld a, [hli]
@@ -70,12 +70,12 @@
ret
.asm_59d6b
xor a
- ld [hUnlockedSilphCoDoors], a
+ ldh [hUnlockedSilphCoDoors], a
ret
SilphCo2Script_59d6f:
EventFlagAddress hl, EVENT_SILPH_CO_2_UNLOCKED_DOOR1
- ld a, [hUnlockedSilphCoDoors]
+ ldh a, [hUnlockedSilphCoDoors]
and a
ret z
cp $1
--- a/scripts/SilphCo3F.asm
+++ b/scripts/SilphCo3F.asm
@@ -39,7 +39,7 @@
SilphCo3Script_59fad:
EventFlagAddress hl, EVENT_SILPH_CO_3_UNLOCKED_DOOR1
- ld a, [hUnlockedSilphCoDoors]
+ ldh a, [hUnlockedSilphCoDoors]
and a
ret z
cp $1
--- a/scripts/SilphCo4F.asm
+++ b/scripts/SilphCo4F.asm
@@ -45,7 +45,7 @@
ld a, [hl]
ld c, a
xor a
- ld [hUnlockedSilphCoDoors], a
+ ldh [hUnlockedSilphCoDoors], a
pop hl
.asm_19d69
ld a, [hli]
@@ -70,12 +70,12 @@
ret
.asm_19d85
xor a
- ld [hUnlockedSilphCoDoors], a
+ ldh [hUnlockedSilphCoDoors], a
ret
SilphCo4Script_19d89:
EventFlagAddress hl, EVENT_SILPH_CO_4_UNLOCKED_DOOR1
- ld a, [hUnlockedSilphCoDoors]
+ ldh a, [hUnlockedSilphCoDoors]
and a
ret z
cp $1
--- a/scripts/SilphCo5F.asm
+++ b/scripts/SilphCo5F.asm
@@ -49,7 +49,7 @@
SilphCo5Script_19f9e:
EventFlagAddress hl, EVENT_SILPH_CO_5_UNLOCKED_DOOR1
- ld a, [hUnlockedSilphCoDoors]
+ ldh a, [hUnlockedSilphCoDoors]
and a
ret z
cp $1
--- a/scripts/SilphCo6F.asm
+++ b/scripts/SilphCo6F.asm
@@ -28,7 +28,7 @@
db $FF
SilphCo6Script_1a1e6:
- ld a, [hUnlockedSilphCoDoors]
+ ldh a, [hUnlockedSilphCoDoors]
and a
ret z
SetEvent EVENT_SILPH_CO_6_UNLOCKED_DOOR
--- a/scripts/SilphCo7F.asm
+++ b/scripts/SilphCo7F.asm
@@ -55,7 +55,7 @@
ld a, [hl]
ld c, a
xor a
- ld [hUnlockedSilphCoDoors], a
+ ldh [hUnlockedSilphCoDoors], a
pop hl
.asm_51bd4
ld a, [hli]
@@ -80,12 +80,12 @@
ret
.asm_51bf0
xor a
- ld [hUnlockedSilphCoDoors], a
+ ldh [hUnlockedSilphCoDoors], a
ret
SilphCo7Text_51bf4:
EventFlagAddress hl, EVENT_SILPH_CO_7_UNLOCKED_DOOR1
- ld a, [hUnlockedSilphCoDoors]
+ ldh a, [hUnlockedSilphCoDoors]
and a
ret z
cp $1
@@ -125,7 +125,7 @@
call ArePlayerCoordsInArray
jp nc, CheckFightingMapTrainers
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $f0
ld [wJoyIgnore], a
ld a, PLAYER_DIR_DOWN
@@ -137,10 +137,10 @@
ld a, MUSIC_MEET_RIVAL
call PlayMusic
ld a, $9
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, $9
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
ld de, MovementData_51c7d
ld a, [wCoordIndex]
@@ -150,7 +150,7 @@
inc de
.asm_51c6c
ld a, $9
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, $3
jp SilphCo7Text_51c10
@@ -174,7 +174,7 @@
xor a
ld [wJoyIgnore], a
ld a, $d
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
call Delay3
ld hl, wd72d
@@ -212,17 +212,17 @@
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
ld a, $9
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
ld a, SPRITE_FACING_UP
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
call SetSpriteFacingDirectionAndDelay
ld a, $f
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld a, SFX_STOP_ALL_MUSIC
ld [wNewSoundID], a
call PlaySound
- callba Music_RivalAlternateStart
+ farcall Music_RivalAlternateStart
ld de, MovementData_51d1d
ld a, [wcf0d]
cp $1
@@ -230,7 +230,7 @@
ld de, MovementData_51d1a
.asm_51d0e
ld a, $9
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call MoveSprite
ld a, $5
jp SilphCo7Text_51c10
--- a/scripts/SilphCo8F.asm
+++ b/scripts/SilphCo8F.asm
@@ -35,7 +35,7 @@
ld a, [hl]
ld c, a
xor a
- ld [hUnlockedSilphCoDoors], a
+ ldh [hUnlockedSilphCoDoors], a
pop hl
.asm_5654d
ld a, [hli]
@@ -60,11 +60,11 @@
ret
.asm_56569
xor a
- ld [hUnlockedSilphCoDoors], a
+ ldh [hUnlockedSilphCoDoors], a
ret
SilphCo8Script_5656d:
- ld a, [hUnlockedSilphCoDoors]
+ ldh a, [hUnlockedSilphCoDoors]
and a
ret z
SetEvent EVENT_SILPH_CO_8_UNLOCKED_DOOR
--- a/scripts/SilphCo9F.asm
+++ b/scripts/SilphCo9F.asm
@@ -65,7 +65,7 @@
ld a, [hl]
ld c, a
xor a
- ld [hUnlockedSilphCoDoors], a
+ ldh [hUnlockedSilphCoDoors], a
pop hl
.asm_5d843
ld a, [hli]
@@ -90,12 +90,12 @@
ret
.asm_5d85f
xor a
- ld [hUnlockedSilphCoDoors], a
+ ldh [hUnlockedSilphCoDoors], a
ret
SilphCo9Script_5d863:
EventFlagAddress hl, EVENT_SILPH_CO_9_UNLOCKED_DOOR1
- ld a, [hUnlockedSilphCoDoors]
+ ldh a, [hUnlockedSilphCoDoors]
and a
ret z
cp $1
--- a/scripts/SilphCoElevator.asm
+++ b/scripts/SilphCoElevator.asm
@@ -74,7 +74,7 @@
SilphCoElevatorScript_45827:
call Delay3
- callba ShakeElevator
+ farcall ShakeElevator
ret
SilphCoElevator_TextPointers:
--- a/scripts/TradeCenter.asm
+++ b/scripts/TradeCenter.asm
@@ -1,14 +1,14 @@
TradeCenter_Script:
call EnableAutoTextBoxDrawing
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
ld a, SPRITE_FACING_LEFT
jr z, .next
ld a, SPRITE_FACING_RIGHT
.next
- ld [hSpriteFacingDirection], a
+ ldh [hSpriteFacingDirection], a
ld a, $1
- ld [hSpriteIndex], a
+ ldh [hSpriteIndex], a
call SetSpriteFacingDirection
ld hl, wd72d
bit 0, [hl]
@@ -21,7 +21,7 @@
ld [hl], a
ld a, SPRITE_FACING_LEFT
ld [wSprite01StateData1FacingDirection], a
- ld a, [hSerialConnectionStatus]
+ ldh a, [hSerialConnectionStatus]
cp USING_INTERNAL_CLOCK
ret z
ld a, $7
--- a/scripts/VermilionCity.asm
+++ b/scripts/VermilionCity.asm
@@ -15,7 +15,7 @@
.setFirstLockTrashCanIndex
call Random
- ld a, [hRandomSub]
+ ldh a, [hRandomSub]
and $e
ld [wFirstLockTrashCanIndex], a
ret
@@ -45,10 +45,10 @@
call ArePlayerCoordsInArray
ret nc
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld [wcf0d], a
ld a, $3
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
CheckEvent EVENT_SS_ANNE_LEFT
jr nz, .shipHasDeparted
@@ -98,7 +98,7 @@
ret nz
xor a
ld [wJoyIgnore], a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $0
ld [wVermilionCityCurScript], a
ret
--- a/scripts/VermilionDock.asm
+++ b/scripts/VermilionDock.asm
@@ -45,7 +45,7 @@
ld c, BANK(Music_Surfing)
ld a, MUSIC_SURFING
call PlayMusic
- callba LoadSmokeTileFourTimes
+ farcall LoadSmokeTileFourTimes
xor a
ld [wSpritePlayerStateData1ImageIndex], a
ld c, 120
@@ -52,17 +52,17 @@
call DelayFrames
ld b, $9c
call CopyScreenTileBufferToVRAM
- coord hl, 0, 10
+ hlcoord 0, 10
ld bc, SCREEN_WIDTH * 6
ld a, $14 ; water tile
call FillMemory
ld a, 1
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
call Delay3
xor a
- ld [hAutoBGTransferEnabled], a
+ ldh [hAutoBGTransferEnabled], a
ld [wSSAnneSmokeDriftAmount], a
- ld [rOBP1], a
+ ldh [rOBP1], a
ld a, 88
ld [wSSAnneSmokeX], a
ld hl, wMapViewVRAMPointer
@@ -104,11 +104,11 @@
dec e
jr nz, .asm_1dbfa
xor a
- ld [rWY], a
- ld [hWY], a
+ ldh [rWY], a
+ ldh [hWY], a
call VermilionDock_EraseSSAnne
ld a, $90
- ld [hWY], a
+ ldh [hWY], a
ld a, $1
ld [wUpdateSpritesEnabled], a
pop hl
@@ -167,13 +167,13 @@
ld h, $0
ld l, $80
.asm_1dc86
- ld a, [rLY]
+ ldh a, [rLY]
cp l
jr nz, .asm_1dc86
ld a, h
- ld [rSCX], a
+ ldh [rSCX], a
.asm_1dc8e
- ld a, [rLY]
+ ldh a, [rLY]
cp h
jr z, .asm_1dc8e
ret
@@ -184,7 +184,7 @@
ld bc, (5 * BG_MAP_WIDTH) + SCREEN_WIDTH
ld a, $14 ; water tile
call FillMemory
- ld hl, vBGMap0 + 10 * BG_MAP_WIDTH
+ hlbgcoord 0, 10
ld de, wVermilionDockTileMapBuffer
ld bc, (6 * BG_MAP_WIDTH) / 16
call CopyVideoData
@@ -194,7 +194,7 @@
; the blocks is unnecessary because the blocks the ship occupies are south of
; the player and won't be redrawn when the player automatically walks north and
; exits the map. This code could be removed without affecting anything.
- overworldMapCoord hl, 5, 2, VERMILION_DOCK_WIDTH
+ hlowcoord 5, 2, VERMILION_DOCK_WIDTH
ld a, $d ; water block
ld [hli], a
ld [hli], a
--- a/scripts/VermilionGym.asm
+++ b/scripts/VermilionGym.asm
@@ -63,7 +63,7 @@
VermilionGymReceiveTM24:
ld a, $6
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_BEAT_LT_SURGE
lb bc, TM_THUNDERBOLT, 1
@@ -70,13 +70,13 @@
call GiveItem
jr nc, .BagFull
ld a, $7
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_GOT_TM24
jr .gymVictory
.BagFull
ld a, $8
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
.gymVictory
ld hl, wObtainedBadges
@@ -150,7 +150,7 @@
ld hl, ReceivedThunderbadgeText
ld de, ReceivedThunderbadgeText
call SaveEndBattleTextPointers
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
@@ -157,7 +157,7 @@
ld a, $3
ld [wGymLeaderNo], a
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
ld a, $3 ; set script index to LT Surge post-battle script
ld [wVermilionGymCurScript], a
ld [wCurMapScript], a
--- a/scripts/ViridianCity.asm
+++ b/scripts/ViridianCity.asm
@@ -30,10 +30,10 @@
cp $20
ret nz
ld a, $e
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
call ViridianCityScript_190cf
ld a, $3
ld [wViridianCityCurScript], a
@@ -49,10 +49,10 @@
cp $13
ret nz
ld a, $5
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
- ld [hJoyHeld], a
+ ldh [hJoyHeld], a
call ViridianCityScript_190cf
ld a, $3
ld [wViridianCityCurScript], a
@@ -60,13 +60,13 @@
ViridianCityScript1:
ld a, [wSprite03StateData1YPixels]
- ld [hSpriteScreenYCoord], a
+ ldh [hSpriteScreenYCoord], a
ld a, [wSprite03StateData1XPixels]
- ld [hSpriteScreenXCoord], a
+ ldh [hSpriteScreenXCoord], a
ld a, [wSprite03StateData2MapY]
- ld [hSpriteMapYCoord], a
+ ldh [hSpriteMapYCoord], a
ld a, [wSprite03StateData2MapX]
- ld [hSpriteMapXCoord], a
+ ldh [hSpriteMapXCoord], a
xor a
ld [wListScrollOffset], a
@@ -82,13 +82,13 @@
ret
ViridianCityScript2:
- ld a, [hSpriteScreenYCoord]
+ ldh a, [hSpriteScreenYCoord]
ld [wSprite03StateData1YPixels], a
- ld a, [hSpriteScreenXCoord]
+ ldh a, [hSpriteScreenXCoord]
ld [wSprite03StateData1XPixels], a
- ld a, [hSpriteMapYCoord]
+ ldh a, [hSpriteMapYCoord]
ld [wSprite03StateData2MapY], a
- ld a, [hSpriteMapXCoord]
+ ldh a, [hSpriteMapXCoord]
ld [wSprite03StateData2MapX], a
call UpdateSprites
call Delay3
@@ -95,7 +95,7 @@
xor a
ld [wJoyIgnore], a
ld a, $f
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
xor a
ld [wBattleType], a
--- a/scripts/ViridianGym.asm
+++ b/scripts/ViridianGym.asm
@@ -128,7 +128,7 @@
ld [wCurMapScript], a
ret
.asm_74980
- jpba LoadSpinnerArrowTiles
+ farjp LoadSpinnerArrowTiles
ViridianGymScript3:
ld a, [wIsInBattle]
@@ -138,7 +138,7 @@
ld [wJoyIgnore], a
ViridianGymScript3_74995:
ld a, $c
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_BEAT_VIRIDIAN_GYM_GIOVANNI
lb bc, TM_FISSURE, 1
@@ -145,13 +145,13 @@
call GiveItem
jr nc, .BagFull
ld a, $d
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
SetEvent EVENT_GOT_TM27
jr .gymVictory
.BagFull
ld a, $e
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
.gymVictory
ld hl, wObtainedBadges
@@ -289,7 +289,7 @@
ld hl, ViridianGymText_74ad3
ld de, ViridianGymText_74ad3
call SaveEndBattleTextPointers
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
ld [wSpriteIndex], a
call EngageMapTrainer
call InitBattleEnemyParameters
--- a/scripts/ViridianMart.asm
+++ b/scripts/ViridianMart.asm
@@ -27,7 +27,7 @@
ViridianMartScript0:
call UpdateSprites
ld a, $4
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
ld hl, wSimulatedJoypadStatesEnd
ld de, RLEMovement1d4bb
@@ -50,7 +50,7 @@
ret nz
call Delay3
ld a, $5
- ld [hSpriteIndexOrTextID], a
+ ldh [hSpriteIndexOrTextID], a
call DisplayTextID
lb bc, OAKS_PARCEL, 1
call GiveItem
--- a/scripts/WardensHouse.asm
+++ b/scripts/WardensHouse.asm
@@ -32,8 +32,8 @@
ld hl, WardenTeethText1
call PrintText
ld a, GOLD_TEETH
- ld [hItemToRemoveID], a
- callba RemoveItemByID
+ ldh [hItemToRemoveID], a
+ farcall RemoveItemByID
SetEvent EVENT_GAVE_GOLD_TEETH
.asm_60cba
ld hl, WardenThankYouText
@@ -95,7 +95,7 @@
FuchsiaHouse2Text5:
FuchsiaHouse2Text4:
text_asm
- ld a, [hSpriteIndex]
+ ldh a, [hSpriteIndex]
cp $4
ld hl, FuchsiaHouse2Text_7517b
jr nz, .asm_4c9a2
--- a/text.asm
+++ b/text.asm
@@ -270,7 +270,7 @@
INCLUDE "data/text/text_7.asm"
-SECTION "Pokedex Text", ROMX
+SECTION "Pokédex Text", ROMX
INCLUDE "data/pokemon/dex_text.asm"
--- a/vram.asm
+++ b/vram.asm
@@ -1,21 +1,31 @@
-vChars0 EQU $8000
-vChars1 EQU $8800
-vChars2 EQU $9000
-vBGMap0 EQU $9800
-vBGMap1 EQU $9c00
+SECTION "VRAM", VRAM
-; Battle/Menu
-vSprites EQU vChars0
-vFont EQU vChars1
-vFrontPic EQU vChars2
-vBackPic EQU vFrontPic + 7 * 7 * $10
+UNION
+; generic
+vChars0:: ds $800
+vChars1:: ds $800
+vChars2:: ds $800
+vBGMap0:: ds $400
+vBGMap1:: ds $400
-; Overworld
-vNPCSprites EQU vChars0
-vNPCSprites2 EQU vChars1
-vTileset EQU vChars2
+NEXTU
+; battle/menu
+vSprites:: ds $800
+vFont:: ds $800
+vFrontPic:: ds 7 * 7 * $10
+vBackPic:: ds 7 * 7 * $10
-; Title
-vTitleLogo EQU vChars1
-vTitleLogo2 EQU vFrontPic + 7 * 7 * $10
+NEXTU
+; overworld
+vNPCSprites:: ds $800
+vNPCSprites2:: ds $800
+vTileset:: ds $800
+NEXTU
+; title
+ ds $800
+vTitleLogo:: ds $800
+ ds 7 * 7 * $10
+vTitleLogo2:: ds $1e0
+
+ENDU
--- a/wram.asm
+++ b/wram.asm
@@ -3,8 +3,11 @@
INCLUDE "macros/wram.asm"
-SECTION "WRAM Bank 0", WRAM0
+INCLUDE "vram.asm"
+
+SECTION "WRAM", WRAM0
+
wUnusedC000::
ds 1
@@ -155,22 +158,23 @@
; data for all sprites on the current map
; holds info for 16 sprites with $10 bytes each
; player sprite is always sprite 0
-; C1x0: picture ID (fixed, loaded at map init)
-; C1x1: movement status (0: uninitialized, 1: ready, 2: delayed, 3: moving)
-; C1x2: sprite image index (changed on update, $ff if off screen, includes facing direction, progress in walking animation and a sprite-specific offset)
-; C1x3: Y screen position delta (-1,0 or 1; added to c1x4 on each walking animation update)
-; C1x4: Y screen position (in pixels, always 4 pixels above grid which makes sprites appear to be in the center of a tile)
-; C1x5: X screen position delta (-1,0 or 1; added to c1x6 on each walking animation update)
-; C1x6: X screen position (in pixels, snaps to grid if not currently walking)
-; C1x7: intra-animation-frame counter (counting upwards to 4 until c1x8 is incremented)
-; C1x8: animation frame counter (increased every 4 updates, hold four states (totalling to 16 walking frames)
-; C1x9: facing direction (0: down, 4: up, 8: left, $c: right)
-; C1xA
-; C1xB
-; C1xC
-; C1xD
-; C1xE
-; C1xF
+; struct fields:
+; - 0: picture ID (fixed, loaded at map init)
+; - 1: movement status (0: uninitialized, 1: ready, 2: delayed, 3: moving)
+; - 2: sprite image index (changed on update, $ff if off screen, includes facing direction, progress in walking animation and a sprite-specific offset)
+; - 3: Y screen position delta (-1,0 or 1; added to Y pixels on each walking animation update)
+; - 4: Y screen position (in pixels, always 4 pixels above grid which makes sprites appear to be in the center of a tile)
+; - 5: X screen position delta (-1,0 or 1; added to field X pixels on each walking animation update)
+; - 6: X screen position (in pixels, snaps to grid if not currently walking)
+; - 7: intra-animation-frame counter (counting upwards to 4 until animation frame counter is incremented)
+; - 8: animation frame counter (increased every 4 updates, hold four states (totalling to 16 walking frames)
+; - 9: facing direction ($0: down, $4: up, $8: left, $c: right)
+; - A: adjusted Y coordinate
+; - B: adjusted X coordinate
+; - C: direction of collision
+; - D
+; - E
+; - F
wSpritePlayerStateData1:: spritestatedata1 wSpritePlayerStateData1
wSprite01StateData1:: spritestatedata1 wSprite01StateData1
wSprite02StateData1:: spritestatedata1 wSprite02StateData1
@@ -192,22 +196,23 @@
; more data for all sprites on the current map
; holds info for 16 sprites with $10 bytes each
; player sprite is always sprite 0
-; C2x0: walk animation counter (counting from $10 backwards when moving)
-; C2x1:
-; C2x2: Y displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged)
-; C2x3: X displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged)
-; C2x4: Y position (in 2x2 tile grid steps, topmost 2x2 tile has value 4)
-; C2x5: X position (in 2x2 tile grid steps, leftmost 2x2 tile has value 4)
-; C2x6: movement byte 1 (determines whether a sprite can move, $ff:not moving, $fe:random movements, others unknown)
-; C2x7: (?) (set to $80 when in grass, else $0; may be used to draw grass above the sprite)
-; C2x8: delay until next movement (counted downwards, status (c1x1) is set to ready if reached 0)
-; C2x9
-; C2xA
-; C2xB
-; C2xC
-; C2xD
-; C2xE: sprite image base offset (in video ram, player always has value 1, used to compute c1x2)
-; C2xF
+; struct fields:
+; - 0: walk animation counter (counting from $10 backwards when moving)
+; - 1:
+; - 2: Y displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged)
+; - 3: X displacement (initialized at 8, supposed to keep moving sprites from moving too far, but bugged)
+; - 4: Y position (in 2x2 tile grid steps, topmost 2x2 tile has value 4)
+; - 5: X position (in 2x2 tile grid steps, leftmost 2x2 tile has value 4)
+; - 6: movement byte 1 (determines whether a sprite can move, $ff:not moving, $fe:random movements, others unknown)
+; - 7: (?) (set to $80 when in grass, else $0; may be used to draw grass above the sprite)
+; - 8: delay until next movement (counted downwards, movement status is set to ready if reached 0)
+; - 9: original facing direction (backed up by DisplayTextIDInit, restored by CloseTextDisplay)
+; - A
+; - B
+; - C
+; - D: picture ID
+; - E: sprite image base offset (in video ram, player always has value 1, used to compute sprite image index)
+; - F
wSpritePlayerStateData2:: spritestatedata2 wSpritePlayerStateData2
wSprite01StateData2:: spritestatedata2 wSprite01StateData2
wSprite02StateData2:: spritestatedata2 wSprite02StateData2
@@ -2292,7 +2297,7 @@
ds 2
wYCoord::
-; player’s position on the current map
+; player's position on the current map
ds 1
wXCoord::
@@ -2574,7 +2579,7 @@
ds 7
-wd5cd:: ds 1 ; temp copy of c1x2 (sprite facing/anim)
+wd5cd:: ds 1 ; temp copy of SPRITESTATEDATA1_IMAGEINDEX (used for sprite facing/anim)
wMissableObjectList::
; each entry consists of 2 bytes
@@ -3112,3 +3117,5 @@
INCLUDE "sram.asm"
+
+INCLUDE "hram.asm"