mirror of
https://github.com/pret/pokered.git
synced 2024-10-22 22:55:31 +00:00
Specify the ldh instruction, don't turn ld into ldh
This commit is contained in:
parent
c480632d54
commit
772fcc7588
219 changed files with 2556 additions and 2556 deletions
2
Makefile
2
Makefile
|
@ -58,7 +58,7 @@ tools:
|
|||
$(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
|
||||
|
|
|
@ -20,10 +20,10 @@ Audio1_UpdateMusic::
|
|||
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 @@ Audio1_sound_ret:
|
|||
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 @@ Audio1_sound_ret:
|
|||
.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 @@ Audio1_sound_ret:
|
|||
ret c
|
||||
.skipRewind
|
||||
ld a, [wSavedVolume]
|
||||
ld [rNR50], a
|
||||
ldh [rNR50], a
|
||||
xor a
|
||||
ld [wSavedVolume], a
|
||||
.skipCry
|
||||
|
@ -548,7 +548,7 @@ Audio1_volume:
|
|||
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 @@ Audio1_pitch_sweep:
|
|||
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 @@ Audio1_note_pitch:
|
|||
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 @@ Audio1_EnableChannelOutput:
|
|||
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 @@ Audio1_EnableChannelOutput:
|
|||
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 @@ Audio1_EnableChannelOutput:
|
|||
ld d, a
|
||||
.skip
|
||||
ld a, d
|
||||
ld [rNR51], a
|
||||
ldh [rNR51], a
|
||||
ret
|
||||
|
||||
Audio1_ApplyDutyCycleAndSoundLength:
|
||||
|
@ -928,7 +928,7 @@ Audio1_ApplyWavePatternAndFrequency:
|
|||
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 @@ Audio1_ApplyWavePatternAndFrequency:
|
|||
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 @@ Audio1_PlaySound::
|
|||
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 @@ Audio1_PlaySound::
|
|||
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 @@ Audio1_PlaySound::
|
|||
|
||||
.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 @@ Audio1_PlaySound::
|
|||
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
|
||||
|
||||
|
|
|
@ -22,10 +22,10 @@ Audio2_UpdateMusic::
|
|||
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 @@ Audio2_sound_ret:
|
|||
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 @@ Audio2_sound_ret:
|
|||
.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 @@ Audio2_sound_ret:
|
|||
ret c
|
||||
.skipRewind
|
||||
ld a, [wSavedVolume]
|
||||
ld [rNR50], a
|
||||
ldh [rNR50], a
|
||||
xor a
|
||||
ld [wSavedVolume], a
|
||||
.skipCry
|
||||
|
@ -559,7 +559,7 @@ Audio2_volume:
|
|||
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 @@ Audio2_pitch_sweep:
|
|||
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 @@ Audio2_note_pitch:
|
|||
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 @@ Audio2_EnableChannelOutput:
|
|||
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 @@ Audio2_EnableChannelOutput:
|
|||
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 @@ Audio2_EnableChannelOutput:
|
|||
ld d, a
|
||||
.skip
|
||||
ld a, d
|
||||
ld [rNR51], a
|
||||
ldh [rNR51], a
|
||||
ret
|
||||
|
||||
Audio2_ApplyDutyCycleAndSoundLength:
|
||||
|
@ -939,7 +939,7 @@ Audio2_ApplyWavePatternAndFrequency:
|
|||
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 @@ Audio2_ApplyWavePatternAndFrequency:
|
|||
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 @@ Audio2_PlaySound::
|
|||
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 @@ Audio2_PlaySound::
|
|||
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 @@ Audio2_PlaySound::
|
|||
|
||||
.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 @@ Audio2_PlaySound::
|
|||
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
|
||||
|
||||
|
|
|
@ -20,10 +20,10 @@ Audio3_UpdateMusic::
|
|||
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 @@ Audio3_sound_ret:
|
|||
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 @@ Audio3_sound_ret:
|
|||
.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 @@ Audio3_sound_ret:
|
|||
ret c
|
||||
.skipRewind
|
||||
ld a, [wSavedVolume]
|
||||
ld [rNR50], a
|
||||
ldh [rNR50], a
|
||||
xor a
|
||||
ld [wSavedVolume], a
|
||||
.skipCry
|
||||
|
@ -548,7 +548,7 @@ Audio3_volume:
|
|||
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 @@ Audio3_pitch_sweep:
|
|||
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 @@ Audio3_note_pitch:
|
|||
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 @@ Audio3_EnableChannelOutput:
|
|||
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 @@ Audio3_EnableChannelOutput:
|
|||
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 @@ Audio3_EnableChannelOutput:
|
|||
ld d, a
|
||||
.skip
|
||||
ld a, d
|
||||
ld [rNR51], a
|
||||
ldh [rNR51], a
|
||||
ret
|
||||
|
||||
Audio3_ApplyDutyCycleAndSoundLength:
|
||||
|
@ -928,7 +928,7 @@ Audio3_ApplyWavePatternAndFrequency:
|
|||
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 @@ Audio3_ApplyWavePatternAndFrequency:
|
|||
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 @@ Audio3_PlaySound::
|
|||
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 @@ Audio3_PlaySound::
|
|||
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 @@ Audio3_PlaySound::
|
|||
|
||||
.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 @@ Audio3_PlaySound::
|
|||
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
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
PlayPokedexRatingSfx::
|
||||
ld a, [hDexRatingNumMonsOwned]
|
||||
ldh a, [hDexRatingNumMonsOwned]
|
||||
ld c, $0
|
||||
ld hl, OwnedMonValues
|
||||
.getSfxPointer
|
||||
|
|
|
@ -163,7 +163,7 @@ DrawFrameBlock:
|
|||
|
||||
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 @@ PlayAnimation:
|
|||
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 @@ LoadSubanimation:
|
|||
; 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 @@ GetSubanimationTransform1:
|
|||
; 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
|
||||
|
@ -421,7 +421,7 @@ MoveAnimation:
|
|||
|
||||
ShareMoveAnimations:
|
||||
; some moves just reuse animations from status conditions
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ret z
|
||||
|
||||
|
@ -497,18 +497,18 @@ AnimationShakeScreenHorizontallySlow:
|
|||
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
|
||||
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 +534,16 @@ SetAnimationPalette:
|
|||
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 +656,9 @@ DoBallTossSpecialEffects:
|
|||
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?
|
||||
|
@ -695,7 +695,7 @@ DoBallTossSpecialEffects:
|
|||
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]
|
||||
|
@ -882,9 +882,9 @@ TradeJumpPokeball:
|
|||
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 +920,16 @@ AnimationDelay10:
|
|||
; 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 +947,7 @@ AnimationFlashScreenLong:
|
|||
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 +1006,18 @@ FlashScreenLongDelay:
|
|||
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 +1062,7 @@ SetAnimationBGPalette:
|
|||
jr z, .next
|
||||
ld a, c
|
||||
.next
|
||||
ld [rBGP], a
|
||||
ldh [rBGP], a
|
||||
ret
|
||||
|
||||
ld b, $5
|
||||
|
@ -1133,7 +1133,7 @@ _AnimationWaterDroplets:
|
|||
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
|
||||
|
@ -1201,7 +1201,7 @@ _AnimationSlideMonUp:
|
|||
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
|
||||
jr z, .next
|
||||
|
@ -1370,7 +1370,7 @@ AnimationShowEnemyMonPic:
|
|||
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
|
||||
|
@ -1418,7 +1418,7 @@ AnimationMoveMonHorizontally:
|
|||
; 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
|
||||
jr z, .next
|
||||
|
@ -1434,7 +1434,7 @@ AnimationMoveMonHorizontally:
|
|||
|
||||
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 +1446,7 @@ AnimationResetMonPosition:
|
|||
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,7 +1530,7 @@ AnimationSquishMonPic:
|
|||
ld c, 4
|
||||
.loop
|
||||
push bc
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .playerTurn
|
||||
coord hl, 16, 0
|
||||
|
@ -1583,7 +1583,7 @@ _AnimationSquishMonPic:
|
|||
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 +1651,7 @@ _AnimationShootBallsUpward:
|
|||
|
||||
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,7 +1743,7 @@ AnimationSlideMonDownAndHide:
|
|||
_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
|
||||
|
@ -1758,7 +1758,7 @@ _AnimationSlideMonOff:
|
|||
.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 +1821,7 @@ AnimationSlideMonHalfOff:
|
|||
jp Delay3
|
||||
|
||||
CopyTempPicToMonPic:
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld hl, vBackPic ; player turn
|
||||
jr z, .next
|
||||
|
@ -1837,9 +1837,9 @@ AnimationWavyScreen:
|
|||
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 +1848,7 @@ AnimationWavyScreen:
|
|||
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 +1861,11 @@ AnimationWavyScreen:
|
|||
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 +1873,11 @@ AnimationWavyScreen:
|
|||
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 +1898,7 @@ AnimationSubstitute:
|
|||
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 +1937,7 @@ CopySlowbroSpriteData:
|
|||
jp FarCopyData2
|
||||
|
||||
HideSubstituteShowMonAnim:
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld hl, wPlayerMonMinimized
|
||||
ld a, [wPlayerBattleStatus2]
|
||||
|
@ -1987,7 +1987,7 @@ AnimationTransformMon:
|
|||
ld [wChangeMonPicEnemyTurnSpecies], a
|
||||
|
||||
ChangeMonPic:
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .playerTurn
|
||||
ld a, [wChangeMonPicEnemyTurnSpecies]
|
||||
|
@ -2020,11 +2020,11 @@ ChangeMonPic:
|
|||
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 +2050,7 @@ InitMultipleObjectsOAM:
|
|||
|
||||
AnimationHideMonPic:
|
||||
; Hides the mon's sprite.
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .playerTurn
|
||||
ld a, 12
|
||||
|
@ -2078,7 +2078,7 @@ ClearMonPicFromTileMap:
|
|||
; 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
|
||||
|
@ -2166,7 +2166,7 @@ GetMoveSound:
|
|||
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,14 +2211,14 @@ IsCryMove:
|
|||
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
|
||||
; 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 +2235,7 @@ CopyDownscaledMonTiles:
|
|||
|
||||
CopyTileIDs_NoBGTransfer:
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
; fall through
|
||||
|
||||
; b = number of rows
|
||||
|
@ -2245,7 +2245,7 @@ CopyTileIDs:
|
|||
.rowLoop
|
||||
push bc
|
||||
push hl
|
||||
ld a, [hBaseTileID]
|
||||
ldh a, [hBaseTileID]
|
||||
ld b, a
|
||||
.columnLoop
|
||||
ld a, [de]
|
||||
|
@ -2261,7 +2261,7 @@ CopyTileIDs:
|
|||
dec b
|
||||
jr nz, .rowLoop
|
||||
ld a, $1
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
pop hl
|
||||
ret
|
||||
|
||||
|
@ -2361,16 +2361,16 @@ Unknown_79c50:
|
|||
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 +2529,7 @@ AnimationShakeEnemyHUD:
|
|||
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 +2539,7 @@ AnimationShakeEnemyHUD:
|
|||
; 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 +2551,7 @@ AnimationShakeEnemyHUD:
|
|||
; 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 +2576,11 @@ AnimationShakeEnemyHUD:
|
|||
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 +2595,7 @@ AnimationShakeEnemyHUD:
|
|||
CopyTileIDsFromList:
|
||||
call GetPredefRegisters
|
||||
ld a, c
|
||||
ld [hBaseTileID], a
|
||||
ldh [hBaseTileID], a
|
||||
ld a, b
|
||||
push hl
|
||||
call GetTileIDList
|
||||
|
@ -2603,30 +2603,30 @@ CopyTileIDsFromList:
|
|||
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:
|
||||
|
|
|
@ -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 @@ BattleTransition:
|
|||
; 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
|
||||
|
@ -165,9 +165,9 @@ BattleTransitionTileEnd:
|
|||
|
||||
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
|
||||
|
@ -330,7 +330,7 @@ BattleTransition_FlashScreen_:
|
|||
ld a, [hli]
|
||||
cp $1
|
||||
jr z, .done
|
||||
ld [rBGP], a
|
||||
ldh [rBGP], a
|
||||
ld c, 2
|
||||
call DelayFrames
|
||||
jr .loop
|
||||
|
@ -349,7 +349,7 @@ BattleTransition_Shrink:
|
|||
.loop
|
||||
push bc
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
coord hl, 0, 7
|
||||
coord de, 0, 8
|
||||
ld bc, -SCREEN_WIDTH * 2
|
||||
|
@ -367,7 +367,7 @@ BattleTransition_Shrink:
|
|||
ld bc, 2
|
||||
call BattleTransition_CopyTiles2
|
||||
ld a, $1
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
ld c, 6
|
||||
call DelayFrames
|
||||
pop bc
|
||||
|
@ -381,7 +381,7 @@ BattleTransition_Shrink:
|
|||
BattleTransition_Split:
|
||||
ld c, SCREEN_HEIGHT / 2
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
.loop
|
||||
push bc
|
||||
coord hl, 0, 16
|
||||
|
@ -496,7 +496,7 @@ BattleTransition_VerticalStripes:
|
|||
coord hl, 0, 0
|
||||
coord de, 1, 17
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
.loop
|
||||
push bc
|
||||
push hl
|
||||
|
@ -535,7 +535,7 @@ BattleTransition_HorizontalStripes:
|
|||
coord hl, 0, 0
|
||||
coord de, 19, 1
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
.loop
|
||||
push bc
|
||||
push hl
|
||||
|
@ -582,7 +582,7 @@ BattleTransition_FlashScreen:
|
|||
ld b, $3
|
||||
call BattleTransition_FlashScreen_
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
ret
|
||||
|
||||
BattleTransition_Circle_Sub1:
|
||||
|
@ -601,10 +601,10 @@ BattleTransition_Circle_Sub1:
|
|||
|
||||
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
|
||||
|
|
|
@ -101,16 +101,16 @@ PrintSendOutMonMessage:
|
|||
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 @@ PrintSendOutMonMessage:
|
|||
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 @@ PlayerMon2Text:
|
|||
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 @@ PlayerMon2Text:
|
|||
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.
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -4,7 +4,7 @@ JumpMoveEffect:
|
|||
ret
|
||||
|
||||
_JumpMoveEffect:
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld a, [wPlayerMoveEffect]
|
||||
jr z, .next1
|
||||
|
@ -26,7 +26,7 @@ INCLUDE "data/moves/effects_pointers.asm"
|
|||
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 @@ AlreadyAsleepText:
|
|||
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 @@ PoisonEffect:
|
|||
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
|
||||
|
@ -175,7 +175,7 @@ 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 @@ FreezeBurnParalyzeEffect:
|
|||
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 @@ CheckDefrost:
|
|||
; 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 @@ FireDefrostedText:
|
|||
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 @@ StatModifierUpEffect:
|
|||
push hl
|
||||
ld hl, wBattleMonAttack + 1
|
||||
ld de, wPlayerMonUnmodifiedAttack
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .pointToStats
|
||||
ld hl, wEnemyMonAttack + 1
|
||||
|
@ -417,35 +417,35 @@ StatModifierUpEffect:
|
|||
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]
|
||||
ldh a, [hProduct + 3]
|
||||
sub 999 % $100
|
||||
ld a, [hProduct + 2]
|
||||
ldh a, [hProduct + 2]
|
||||
sbc 999 / $100
|
||||
jp c, UpdateStat
|
||||
ld a, 999 / $100
|
||||
ld [hMultiplicand + 1], a
|
||||
ldh [hMultiplicand + 1], a
|
||||
ld a, 999 % $100
|
||||
ld [hMultiplicand + 2], a
|
||||
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 +455,7 @@ UpdateStatDone:
|
|||
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 +488,7 @@ UpdateStatDone:
|
|||
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 +511,7 @@ MonsStatsRoseText:
|
|||
text_far _MonsStatsRoseText
|
||||
text_asm
|
||||
ld hl, GreatlyRoseText
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld a, [wPlayerMoveEffect]
|
||||
jr z, .playerTurn
|
||||
|
@ -534,7 +534,7 @@ StatModifierDownEffect:
|
|||
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 +601,7 @@ StatModifierDownEffect:
|
|||
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 +637,33 @@ StatModifierDownEffect:
|
|||
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 +678,7 @@ UpdateLoweredStatDone:
|
|||
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 +713,7 @@ MonsStatsFellText:
|
|||
text_far _MonsStatsFellText
|
||||
text_asm
|
||||
ld hl, FellText
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld a, [wPlayerMoveEffect]
|
||||
jr z, .playerTurn
|
||||
|
@ -759,7 +759,7 @@ BideEffect:
|
|||
ld hl, wPlayerBattleStatus1
|
||||
ld de, wPlayerBideAccumulatedDamage
|
||||
ld bc, wPlayerNumAttacksLeft
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .bideEffect
|
||||
ld hl, wEnemyBattleStatus1
|
||||
|
@ -778,14 +778,14 @@ BideEffect:
|
|||
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
|
||||
|
||||
ThrashPetalDanceEffect:
|
||||
ld hl, wPlayerBattleStatus1
|
||||
ld de, wPlayerNumAttacksLeft
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .thrashPetalDanceEffect
|
||||
ld hl, wEnemyBattleStatus1
|
||||
|
@ -797,12 +797,12 @@ ThrashPetalDanceEffect:
|
|||
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 +920,7 @@ TwoToFiveAttacksEffect:
|
|||
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 +931,7 @@ TwoToFiveAttacksEffect:
|
|||
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 +967,7 @@ FlinchSideEffect:
|
|||
ret nz
|
||||
ld hl, wEnemyBattleStatus1
|
||||
ld de, wPlayerMoveEffect
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .flinchSideEffect
|
||||
ld hl, wPlayerBattleStatus1
|
||||
|
@ -992,7 +992,7 @@ 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 +1074,7 @@ DugAHoleText:
|
|||
TrappingEffect:
|
||||
ld hl, wPlayerBattleStatus1
|
||||
ld de, wPlayerNumAttacksLeft
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .trappingEffect
|
||||
ld hl, wEnemyBattleStatus1
|
||||
|
@ -1120,7 +1120,7 @@ ConfusionEffect:
|
|||
jr nz, ConfusionEffectFailed
|
||||
|
||||
ConfusionSideEffectSuccess:
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld hl, wEnemyBattleStatus1
|
||||
ld bc, wEnemyConfusedCounter
|
||||
|
@ -1164,7 +1164,7 @@ SubstituteEffect:
|
|||
|
||||
HyperBeamEffect:
|
||||
ld hl, wPlayerBattleStatus2
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .hyperBeamEffect
|
||||
ld hl, wEnemyBattleStatus2
|
||||
|
@ -1175,7 +1175,7 @@ HyperBeamEffect:
|
|||
ClearHyperBeam:
|
||||
push hl
|
||||
ld hl, wEnemyBattleStatus2
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .playerTurn
|
||||
ld hl, wPlayerBattleStatus2
|
||||
|
@ -1186,7 +1186,7 @@ ClearHyperBeam:
|
|||
|
||||
RageEffect:
|
||||
ld hl, wPlayerBattleStatus2
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .player
|
||||
ld hl, wEnemyBattleStatus2
|
||||
|
@ -1201,7 +1201,7 @@ MimicEffect:
|
|||
ld a, [wMoveMissed]
|
||||
and a
|
||||
jr nz, .mimicMissed
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld hl, wBattleMonMoves
|
||||
ld a, [wPlayerBattleStatus1]
|
||||
|
@ -1226,7 +1226,7 @@ MimicEffect:
|
|||
and a
|
||||
jr z, .getRandomMove
|
||||
ld d, a
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld hl, wBattleMonMoves
|
||||
ld a, [wPlayerMoveListIndex]
|
||||
|
@ -1284,7 +1284,7 @@ DisableEffect:
|
|||
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 +1307,7 @@ DisableEffect:
|
|||
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 +1345,7 @@ DisableEffect:
|
|||
ld [de], a
|
||||
call PlayCurrentMoveAnimation2
|
||||
ld hl, wPlayerDisabledMoveNumber
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr nz, .printDisableText
|
||||
inc hl ; wEnemyDisabledMoveNumber
|
||||
|
@ -1430,7 +1430,7 @@ ParalyzedMayNotAttackText:
|
|||
CheckTargetSubstitute:
|
||||
push hl
|
||||
ld hl, wEnemyBattleStatus2
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .next1
|
||||
ld hl, wPlayerBattleStatus2
|
||||
|
@ -1442,7 +1442,7 @@ CheckTargetSubstitute:
|
|||
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 +1454,7 @@ PlayCurrentMoveAnimation2:
|
|||
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 +1468,7 @@ PlayCurrentMoveAnimation:
|
|||
; resets wAnimationType
|
||||
xor a
|
||||
ld [wAnimationType], a
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld a, [wPlayerMoveNum]
|
||||
jr z, .notEnemyTurn
|
||||
|
|
|
@ -55,15 +55,15 @@ GainExperience:
|
|||
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 @@ GainExperience:
|
|||
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
|
||||
|
@ -119,11 +119,11 @@ GainExperience:
|
|||
ld d, MAX_LEVEL
|
||||
callab 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]
|
||||
|
@ -311,14 +311,14 @@ DivideExpDataByNumMonsGainingExp:
|
|||
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 @@ DivideExpDataByNumMonsGainingExp:
|
|||
|
||||
; 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:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
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
|
||||
|
@ -9,12 +9,12 @@ MarowakAnim:
|
|||
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
|
||||
ldh [hWhoseTurn], a
|
||||
callab ChangeMonPic
|
||||
; alternate between black and light grey 8 times.
|
||||
; this makes the ghost's body appear to flash
|
||||
|
@ -23,10 +23,10 @@ MarowakAnim:
|
|||
.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 @@ MarowakAnim:
|
|||
.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
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
InitBattleVariables:
|
||||
ld a, [hTilesetType]
|
||||
ldh a, [hTilesetType]
|
||||
ld [wSavedTilesetType], a
|
||||
xor a
|
||||
ld [wActionResultOrTookBattleTurn], a
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -14,7 +14,7 @@ DrainHPEffect_:
|
|||
.getAttackerHP
|
||||
ld hl, wBattleMonHP
|
||||
ld de, wBattleMonMaxHP
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jp z, .addDamageToAttackerHP
|
||||
ld hl, wEnemyMonHP
|
||||
|
@ -69,7 +69,7 @@ DrainHPEffect_:
|
|||
ld [wHPBarNewHP+1], a
|
||||
inc de
|
||||
.next
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
coord hl, 10, 9
|
||||
ld a, $1
|
||||
|
@ -83,7 +83,7 @@ DrainHPEffect_:
|
|||
predef DrawEnemyHUDAndHPBar
|
||||
callab ReadPlayerMonCurHPAndStatus
|
||||
ld hl, SuckedHealthText
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld a, [wPlayerMoveEffect]
|
||||
jr z, .next3
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
FocusEnergyEffect_:
|
||||
ld hl, wPlayerBattleStatus2
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .notEnemy
|
||||
ld hl, wEnemyBattleStatus2
|
||||
|
|
|
@ -15,7 +15,7 @@ HazeEffect_:
|
|||
; 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
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
HealEffect_:
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld de, wBattleMonHP
|
||||
ld hl, wBattleMonMaxHP
|
||||
|
@ -27,7 +27,7 @@ HealEffect_:
|
|||
ld c, 50
|
||||
call DelayFrames
|
||||
ld hl, wBattleMonStatus
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .restEffect
|
||||
ld hl, wEnemyMonStatus
|
||||
|
@ -87,7 +87,7 @@ HealEffect_:
|
|||
.playAnim
|
||||
ld hl, PlayCurrentMoveAnimation
|
||||
call BankswitchEtoF
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
coord hl, 10, 9
|
||||
ld a, $1
|
||||
|
|
|
@ -5,7 +5,7 @@ LeechSeedEffect_:
|
|||
jr nz, .moveMissed
|
||||
ld hl, wEnemyBattleStatus2
|
||||
ld de, wEnemyMonType1
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .leechSeedEffect
|
||||
ld hl, wPlayerBattleStatus2
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
MistEffect_:
|
||||
ld hl, wPlayerBattleStatus2
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .mistEffect
|
||||
ld hl, wEnemyBattleStatus2
|
||||
|
|
|
@ -7,7 +7,7 @@ OneHitKOEffect_:
|
|||
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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -2,7 +2,7 @@ PayDayEffect_:
|
|||
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_:
|
|||
.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
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
RecoilEffect_:
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld a, [wPlayerMoveNum]
|
||||
ld hl, wBattleMonMaxHP
|
||||
|
@ -54,7 +54,7 @@ RecoilEffect_:
|
|||
ld [hl], a
|
||||
.getHPBarCoords
|
||||
coord hl, 10, 9
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
ld a, $1
|
||||
jr z, .updateHPBar
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -4,7 +4,7 @@ SubstituteEffect_:
|
|||
ld hl, wBattleMonMaxHP
|
||||
ld de, wPlayerSubstituteHP
|
||||
ld bc, wPlayerBattleStatus2
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .notEnemy
|
||||
ld hl, wEnemyMonMaxHP
|
||||
|
|
|
@ -3,7 +3,7 @@ TransformEffect_:
|
|||
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 @@ TransformEffect_:
|
|||
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 @@ TransformEffect_:
|
|||
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 @@ TransformEffect_:
|
|||
jp PrintText
|
||||
|
||||
.copyBasedOnTurn
|
||||
ld a, [hWhoseTurn]
|
||||
ldh a, [hWhoseTurn]
|
||||
and a
|
||||
jr z, .gotStatsOrModsToCopy
|
||||
push hl
|
||||
|
|
|
@ -41,16 +41,16 @@ ScaleFirstThreeSpriteColumnsByTwo:
|
|||
|
||||
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]
|
||||
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
|
||||
|
|
|
@ -655,17 +655,17 @@ AIUseDireHit: ; unused
|
|||
|
||||
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]
|
||||
|
|
|
@ -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 @@ DoubleSelectedStats:
|
|||
|
||||
; 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
|
||||
|
|
|
@ -48,10 +48,10 @@ TryDoWildEncounter:
|
|||
.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
|
||||
|
@ -90,7 +90,7 @@ TryDoWildEncounter:
|
|||
.lastRepelStep
|
||||
ld [wRepelRemainingSteps], a
|
||||
ld a, TEXT_REPEL_WORE_OFF
|
||||
ld [hSpriteIndexOrTextID], a
|
||||
ldh [hSpriteIndexOrTextID], a
|
||||
call EnableAutoTextBoxDrawing
|
||||
call DisplayTextID
|
||||
.CantEncounter2
|
||||
|
|
|
@ -41,5 +41,5 @@ TestBattle:
|
|||
; do it all again.
|
||||
ld a, 1
|
||||
ld [wUpdateSpritesEnabled], a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
jr .loop
|
||||
|
|
|
@ -6,34 +6,34 @@ ResetStatusAndHalveMoneyOnBlackout::
|
|||
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
|
||||
|
|
|
@ -28,7 +28,7 @@ PrintCardKeyText:
|
|||
call GetCoordsInFrontOfPlayer
|
||||
push de
|
||||
tx_pre_id CardKeySuccessText
|
||||
ld [hSpriteIndexOrTextID], a
|
||||
ldh [hSpriteIndexOrTextID], a
|
||||
call PrintPredefTextID
|
||||
pop de
|
||||
srl d
|
||||
|
@ -55,7 +55,7 @@ PrintCardKeyText:
|
|||
jp PlaySound
|
||||
.noCardKey
|
||||
tx_pre_id CardKeyFailText
|
||||
ld [hSpriteIndexOrTextID], a
|
||||
ldh [hSpriteIndexOrTextID], a
|
||||
jp PrintPredefTextID
|
||||
|
||||
SilphCoMapList:
|
||||
|
|
|
@ -35,7 +35,7 @@ GiveFossilToCinnabarLab::
|
|||
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,7 +61,7 @@ GiveFossilToCinnabarLab::
|
|||
ld hl, LabFossil_610b3
|
||||
call PrintText
|
||||
ld a, [wFossilItem]
|
||||
ld [hItemToRemoveID], a
|
||||
ldh [hItemToRemoveID], a
|
||||
callba RemoveItemByID
|
||||
ld hl, LabFossil_610b8
|
||||
call PrintText
|
||||
|
@ -92,7 +92,7 @@ PrintFossilsInBag:
|
|||
; 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
|
||||
|
@ -101,7 +101,7 @@ PrintFossilsInBag:
|
|||
ld [wd11e], a
|
||||
call GetItemName
|
||||
coord hl, 2, 2
|
||||
ld a, [hItemCounter]
|
||||
ldh a, [hItemCounter]
|
||||
ld bc, SCREEN_WIDTH * 2
|
||||
call AddNTimes
|
||||
ld de, wcd6d
|
||||
|
|
|
@ -62,7 +62,7 @@ DisplayDiploma::
|
|||
call Delay3
|
||||
call GBPalNormal
|
||||
ld a, $90
|
||||
ld [rOBP0], a
|
||||
ldh [rOBP0], a
|
||||
call WaitForTextScrollButtonPress
|
||||
ld hl, wd730
|
||||
res 6, [hl]
|
||||
|
|
|
@ -67,9 +67,9 @@ HiddenCoins:
|
|||
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 @@ HiddenCoins:
|
|||
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
|
||||
|
|
|
@ -24,7 +24,7 @@ PrintBookshelfText::
|
|||
pop af
|
||||
call PrintPredefTextID
|
||||
xor a
|
||||
ld [hFFDB], a
|
||||
ldh [hFFDB], a
|
||||
ret
|
||||
.nextBookshelfEntry1
|
||||
inc hl
|
||||
|
@ -33,7 +33,7 @@ PrintBookshelfText::
|
|||
jr .loop
|
||||
.noMatch
|
||||
ld a, $ff
|
||||
ld [hFFDB], a
|
||||
ldh [hFFDB], a
|
||||
jpba PrintCardKeyText
|
||||
|
||||
INCLUDE "data/tilesets/bookshelf_tile_ids.asm"
|
||||
|
|
|
@ -12,14 +12,14 @@ CinnabarGymQuiz::
|
|||
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,18 +77,18 @@ CinnabarGymGateFlagAction:
|
|||
|
||||
CinnabarGymQuiz_1ea92:
|
||||
call YesNoChoice
|
||||
ld a, [hGymGateAnswer]
|
||||
ldh a, [hGymGateAnswer]
|
||||
ld c, a
|
||||
ld a, [wCurrentMenuItem]
|
||||
cp c
|
||||
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 @@ CinnabarGymQuiz_1ea92:
|
|||
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 @@ CinnabarGymQuiz_1ea92:
|
|||
ld a, c
|
||||
and a
|
||||
ret nz
|
||||
ld a, [hGymGateIndex]
|
||||
ldh a, [hGymGateIndex]
|
||||
add $2
|
||||
ld [wOpponentAfterWrongAnswer], a
|
||||
ret
|
||||
|
@ -122,7 +122,7 @@ CinnabarGymQuizCorrectText:
|
|||
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 @@ UpdateCinnabarGymGateTileBlocks_::
|
|||
; 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 @@ UpdateCinnabarGymGateTileBlocks_::
|
|||
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
|
||||
|
|
|
@ -26,10 +26,10 @@ DisplayMonFrontSpriteInBox:
|
|||
; 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
|
||||
|
@ -41,12 +41,12 @@ DisplayMonFrontSpriteInBox:
|
|||
ld de, vChars1 + $310
|
||||
call LoadMonFrontSprite
|
||||
ld a, $80
|
||||
ld [hStartTileID], a
|
||||
ldh [hStartTileID], a
|
||||
coord hl, 10, 11
|
||||
predef AnimateSendingOutMon
|
||||
call WaitForTextScrollButtonPress
|
||||
call LoadScreenTilesFromBuffer1
|
||||
call Delay3
|
||||
ld a, $90
|
||||
ld [hWY], a
|
||||
ldh [hWY], a
|
||||
ret
|
||||
|
|
|
@ -37,12 +37,12 @@ SafariZoneGameOver:
|
|||
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
|
||||
|
|
|
@ -8,15 +8,15 @@ TownMapText::
|
|||
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
|
||||
ld hl, wd730
|
||||
res 6, [hl]
|
||||
ld de, TextScriptEnd
|
||||
push de
|
||||
ld a, [hLoadedROMBank]
|
||||
ldh a, [hLoadedROMBank]
|
||||
push af
|
||||
jp CloseTextDisplay
|
||||
|
|
|
@ -56,12 +56,12 @@ GymTrashScript:
|
|||
; 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
|
||||
|
|
|
@ -9,16 +9,16 @@ OaksAideScript:
|
|||
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
|
||||
.giveItem
|
||||
ld hl, OaksAideHereYouGoText
|
||||
call PrintText
|
||||
ld a, [hOaksAideRewardItem]
|
||||
ldh a, [hOaksAideRewardItem]
|
||||
ld b, a
|
||||
ld c, 1
|
||||
call GiveItem
|
||||
|
@ -42,7 +42,7 @@ OaksAideScript:
|
|||
call PrintText
|
||||
ld a, $ff
|
||||
.done
|
||||
ld [hOaksAideResult], a
|
||||
ldh [hOaksAideResult], a
|
||||
ret
|
||||
|
||||
OaksAideHiText:
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
PickUpItem:
|
||||
call EnableAutoTextBoxDrawing
|
||||
|
||||
ld a, [hSpriteIndexOrTextID]
|
||||
ldh a, [hSpriteIndexOrTextID]
|
||||
ld b, a
|
||||
ld hl, wMissableObjectList
|
||||
.missableObjectsListLoop
|
||||
|
@ -15,10 +15,10 @@ PickUpItem:
|
|||
|
||||
.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 @@ PickUpItem:
|
|||
call GiveItem
|
||||
jr nc, .BagFull
|
||||
|
||||
ld a, [hMissableObjectIndex]
|
||||
ldh a, [hMissableObjectIndex]
|
||||
ld [wMissableObjectIndex], a
|
||||
predef HideObject
|
||||
ld a, 1
|
||||
|
|
|
@ -52,7 +52,7 @@ ApplyOutOfBattlePoisonDamage:
|
|||
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 @@ ApplyOutOfBattlePoisonDamage:
|
|||
jr nz, .noBlackOut
|
||||
call EnableAutoTextBoxDrawing
|
||||
ld a, TEXT_BLACKED_OUT
|
||||
ld [hSpriteIndexOrTextID], a
|
||||
ldh [hSpriteIndexOrTextID], a
|
||||
call DisplayTextID
|
||||
ld hl, wd72e
|
||||
set 5, [hl]
|
||||
|
|
|
@ -3,17 +3,17 @@ DisplayDexRating:
|
|||
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
|
||||
|
@ -34,10 +34,10 @@ DisplayDexRating:
|
|||
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
|
||||
|
|
|
@ -77,7 +77,7 @@ DisplayPokemartDialogue_::
|
|||
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
|
||||
|
@ -152,7 +152,7 @@ DisplayPokemartDialogue_::
|
|||
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
|
||||
|
|
|
@ -64,7 +64,7 @@ GetPrizeMenuId:
|
|||
; 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
|
||||
|
@ -177,11 +177,11 @@ LoadCoinsToSubtract:
|
|||
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:
|
||||
|
|
|
@ -2,7 +2,7 @@ RemoveGuardDrink::
|
|||
ld hl, GuardDrinksList
|
||||
.drinkLoop
|
||||
ld a, [hli]
|
||||
ld [hItemToRemoveID], a
|
||||
ldh [hItemToRemoveID], a
|
||||
and a
|
||||
ret z
|
||||
push hl
|
||||
|
|
|
@ -37,17 +37,17 @@ VendingMachineMenu::
|
|||
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
|
||||
jp PrintText
|
||||
.enoughMoney
|
||||
call LoadVendingMachineItem
|
||||
ld a, [hVendingMachineItem]
|
||||
ldh a, [hVendingMachineItem]
|
||||
ld b, a
|
||||
ld c, 1
|
||||
call GiveItem
|
||||
|
@ -121,13 +121,13 @@ LoadVendingMachineItem:
|
|||
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"
|
||||
|
|
|
@ -21,22 +21,22 @@ GetHPBarLength:
|
|||
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 @@ UpdateHPBar_PrintHPNumber:
|
|||
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
|
||||
|
|
|
@ -169,7 +169,7 @@ WriteMonPartySpriteOAMByPartyIndex:
|
|||
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 @@ WriteMonPartySpriteOAMBySpecies:
|
|||
; 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
|
||||
|
@ -237,7 +237,7 @@ WriteMonPartySpriteOAM:
|
|||
push af
|
||||
ld c, $10
|
||||
ld h, wOAMBuffer / $100
|
||||
ld a, [hPartyMonIndex]
|
||||
ldh a, [hPartyMonIndex]
|
||||
swap a
|
||||
ld l, a
|
||||
add $10
|
||||
|
|
|
@ -15,7 +15,7 @@ WriteDMACodeToHRAM::
|
|||
DMARoutine:
|
||||
; initiate DMA
|
||||
ld a, wOAMBuffer / $100
|
||||
ld [rDMA], a
|
||||
ldh [rDMA], a
|
||||
|
||||
; wait for DMA to finish
|
||||
ld a, $28
|
||||
|
|
|
@ -335,13 +335,13 @@ SendSGBPacket:
|
|||
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 @@ SendSGBPacket:
|
|||
; 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 @@ SendSGBPacket:
|
|||
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 @@ CheckSGB:
|
|||
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 @@ CopyGfxToSuperNintendoVRAM:
|
|||
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 @@ CopyGfxToSuperNintendoVRAM:
|
|||
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 @@ SendSGBPackets:
|
|||
|
||||
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 @@ InitGBCPalettes:
|
|||
inc d
|
||||
.noCarry
|
||||
ld a, [de]
|
||||
ld [rBGPD], a
|
||||
ldh [rBGPD], a
|
||||
dec c
|
||||
jr nz, .loop
|
||||
ret
|
||||
|
|
|
@ -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 @@ PredefShakeScreenVertically:
|
|||
ld [wDisableVBlankWYUpdate], a
|
||||
xor a
|
||||
.loop
|
||||
ld [hMutateWY], a
|
||||
ldh [hMutateWY], a
|
||||
call .MutateWY
|
||||
call .MutateWY
|
||||
dec b
|
||||
|
@ -30,10 +30,10 @@ PredefShakeScreenVertically:
|
|||
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 @@ PredefShakeScreenHorizontally:
|
|||
call GetPredefRegisters
|
||||
xor a
|
||||
.loop
|
||||
ld [hMutateWX], a
|
||||
ldh [hMutateWX], a
|
||||
call .MutateWX
|
||||
ld c, 1
|
||||
call DelayFrames
|
||||
|
@ -54,18 +54,18 @@ PredefShakeScreenHorizontally:
|
|||
|
||||
; 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
|
||||
|
|
|
@ -13,13 +13,13 @@ PrepareOAMData::
|
|||
|
||||
.updateEnabled
|
||||
xor a
|
||||
ld [hOAMBufferOffset], a
|
||||
ldh [hOAMBufferOffset], a
|
||||
|
||||
.spriteLoop
|
||||
ld [hSpriteOffset2], a
|
||||
ldh [hSpriteOffset2], a
|
||||
|
||||
ld d, wSpriteStateData1 / $100
|
||||
ld a, [hSpriteOffset2]
|
||||
ldh a, [hSpriteOffset2]
|
||||
ld e, a
|
||||
ld a, [de] ; c1x0
|
||||
and a
|
||||
|
@ -58,7 +58,7 @@ PrepareOAMData::
|
|||
ld e, a
|
||||
ld a, [de] ; c2x7
|
||||
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 @@ PrepareOAMData::
|
|||
|
||||
call GetSpriteScreenXY
|
||||
|
||||
ld a, [hOAMBufferOffset]
|
||||
ldh a, [hOAMBufferOffset]
|
||||
ld e, a
|
||||
ld d, wOAMBuffer / $100
|
||||
|
||||
.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
|
||||
|
@ -126,7 +126,7 @@ PrepareOAMData::
|
|||
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,16 +136,16 @@ PrepareOAMData::
|
|||
jr z, .tileLoop
|
||||
|
||||
ld a, e
|
||||
ld [hOAMBufferOffset], a
|
||||
ldh [hOAMBufferOffset], a
|
||||
|
||||
.nextSprite
|
||||
ld a, [hSpriteOffset2]
|
||||
ldh a, [hSpriteOffset2]
|
||||
add $10
|
||||
cp $100 % $100
|
||||
jp nz, .spriteLoop
|
||||
|
||||
; Clear unused OAM.
|
||||
ld a, [hOAMBufferOffset]
|
||||
ldh a, [hOAMBufferOffset]
|
||||
ld l, a
|
||||
ld h, wOAMBuffer / $100
|
||||
ld de, $4
|
||||
|
@ -170,20 +170,20 @@ GetSpriteScreenXY:
|
|||
inc e
|
||||
inc e
|
||||
ld a, [de] ; c1x4
|
||||
ld [hSpriteScreenY], a
|
||||
ldh [hSpriteScreenY], a
|
||||
inc e
|
||||
inc e
|
||||
ld a, [de] ; c1x6
|
||||
ld [hSpriteScreenX], a
|
||||
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)
|
||||
inc e
|
||||
ld a, [hSpriteScreenX]
|
||||
ldh a, [hSpriteScreenX]
|
||||
and $f0
|
||||
ld [de], a ; c1xb (x)
|
||||
ret
|
||||
|
|
|
@ -239,14 +239,14 @@ ItemUseBall:
|
|||
|
||||
; 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 @@ ItemUseBall:
|
|||
; 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 @@ ItemUseBall:
|
|||
|
||||
.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 @@ ItemUseBall:
|
|||
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 @@ ItemUseBall:
|
|||
|
||||
; 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 @@ ItemUseBall:
|
|||
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,26 +349,26 @@ ItemUseBall:
|
|||
.skip4
|
||||
; Let Y = (CatchRate * 100) / BallFactor2. Calculate Y.
|
||||
ld a, b
|
||||
ld [hDivisor], a
|
||||
ldh [hDivisor], a
|
||||
ld b, 4
|
||||
call Divide
|
||||
|
||||
; 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
|
||||
|
||||
; 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 @@ ItemUseBall:
|
|||
|
||||
.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 @@ ItemUseBall:
|
|||
; 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 @@ ItemUseBall:
|
|||
ld a, TOSS_ANIM
|
||||
ld [wAnimationID], a
|
||||
xor a
|
||||
ld [hWhoseTurn], a
|
||||
ldh [hWhoseTurn], a
|
||||
ld [wAnimationType], a
|
||||
ld [wDamageMultipliers], a
|
||||
ld a, [wWhichPokemon]
|
||||
|
@ -656,7 +656,7 @@ ItemUseBicycle:
|
|||
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 @@ ItemUseSurfboard:
|
|||
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
|
||||
|
@ -1018,18 +1018,18 @@ ItemUseMedicine:
|
|||
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 @@ ItemUseMedicine:
|
|||
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
|
||||
|
@ -1050,15 +1050,15 @@ ItemUseMedicine:
|
|||
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 @@ ItemUseMedicine:
|
|||
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 @@ ItemUseMedicine:
|
|||
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
|
||||
|
@ -1347,11 +1347,11 @@ ItemUseMedicine:
|
|||
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]
|
||||
|
@ -1459,7 +1459,7 @@ BaitRockCommon:
|
|||
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,7 +1698,7 @@ ItemUseXStat:
|
|||
call LoadScreenTilesFromBuffer1 ; restore saved screen
|
||||
call Delay3
|
||||
xor a
|
||||
ld [hWhoseTurn], a ; set turn to player's turn
|
||||
ldh [hWhoseTurn], a ; set turn to player's turn
|
||||
callba StatModifierUpEffect ; do stat increase move
|
||||
pop hl
|
||||
pop af
|
||||
|
@ -2463,13 +2463,13 @@ RestoreBonusPP:
|
|||
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 @@ AddBonusPP:
|
|||
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
|
||||
|
@ -2822,13 +2822,13 @@ SendNewMonToBox:
|
|||
ld d, a
|
||||
callab 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
|
||||
|
|
|
@ -16,10 +16,10 @@ GetMachinePrice::
|
|||
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"
|
||||
|
|
|
@ -6,7 +6,7 @@ DisplayTownMap:
|
|||
ld [hl], $ff
|
||||
push hl
|
||||
ld a, $1
|
||||
ld [hJoy7], a
|
||||
ldh [hJoy7], a
|
||||
ld a, [wCurMap]
|
||||
push af
|
||||
ld b, $0
|
||||
|
@ -65,7 +65,7 @@ DisplayTownMap:
|
|||
.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 @@ DisplayTownMap:
|
|||
jr nz, .pressedDown
|
||||
xor a
|
||||
ld [wTownMapSpriteBlinkingEnabled], a
|
||||
ld [hJoy7], a
|
||||
ldh [hJoy7], a
|
||||
ld [wAnimCounter], a
|
||||
call ExitTownMap
|
||||
pop hl
|
||||
|
@ -187,7 +187,7 @@ LoadTownMap_Fly::
|
|||
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
|
||||
|
|
|
@ -2,29 +2,29 @@ _Joypad::
|
|||
; 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 @@ _Joypad::
|
|||
|
||||
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 @@ TrySoftReset:
|
|||
|
||||
; deselect (redundant)
|
||||
ld a, $30
|
||||
ld [rJOYP], a
|
||||
ldh [rJOYP], a
|
||||
|
||||
ld hl, hSoftReset
|
||||
dec [hl]
|
||||
|
|
|
@ -102,25 +102,25 @@ CableClub_DoBattleOrTradeAgain:
|
|||
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
|
||||
; 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 @@ CableClub_DoBattleOrTradeAgain:
|
|||
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
|
||||
|
@ -263,7 +263,7 @@ CableClub_DoBattleOrTradeAgain:
|
|||
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
|
||||
|
@ -551,7 +551,7 @@ TradeCenter_SelectMon:
|
|||
Coorda 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?
|
||||
|
@ -663,7 +663,7 @@ TradeCenter_PrintPartyListNames:
|
|||
push de
|
||||
push hl
|
||||
ld a, c
|
||||
ld [hPastLeadingZeros], a
|
||||
ldh [hPastLeadingZeros], a
|
||||
call GetMonName
|
||||
pop hl
|
||||
call PlaceString
|
||||
|
@ -837,7 +837,7 @@ TradeCenter_Trade:
|
|||
call LoadHpBarAndStatusTilePatterns
|
||||
xor a
|
||||
ld [wUnusedCC5B], a
|
||||
ld a, [hSerialConnectionStatus]
|
||||
ldh a, [hSerialConnectionStatus]
|
||||
cp USING_EXTERNAL_CLOCK
|
||||
jr z, .usingExternalClock
|
||||
predef InternalClockTradeAnim
|
||||
|
@ -914,7 +914,7 @@ CableClub_Run:
|
|||
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)
|
||||
|
|
|
@ -15,27 +15,27 @@ CableClubNPC::
|
|||
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
|
||||
|
@ -65,7 +65,7 @@ CableClubNPC::
|
|||
ld [hli], a
|
||||
xor a
|
||||
ld [hl], a
|
||||
ld [hSerialReceivedNewData], a
|
||||
ldh [hSerialReceivedNewData], a
|
||||
ld [wSerialExchangeNybbleSendData], a
|
||||
call Serial_SyncAndExchangeNybble
|
||||
ld hl, wUnknownSerialCounter
|
||||
|
@ -141,11 +141,11 @@ CableClubNPCMakingPreparationsText:
|
|||
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
|
||||
|
|
|
@ -6,39 +6,39 @@ DivideBCDPredef4::
|
|||
|
||||
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,16 +48,16 @@ DivideBCD::
|
|||
ld a, b
|
||||
swap a
|
||||
and $f0
|
||||
ld [hDivideBCDBuffer], a
|
||||
ldh [hDivideBCDBuffer], a
|
||||
dec d
|
||||
jr z, .next2
|
||||
push de
|
||||
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,16 +67,16 @@ DivideBCD::
|
|||
ld a, b
|
||||
swap a
|
||||
and $f0
|
||||
ld [hDivideBCDBuffer+1], a
|
||||
ldh [hDivideBCDBuffer+1], a
|
||||
dec d
|
||||
jr z, .next2
|
||||
push de
|
||||
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,23 +86,23 @@ DivideBCD::
|
|||
ld a, b
|
||||
swap a
|
||||
and $f0
|
||||
ld [hDivideBCDBuffer+2], a
|
||||
ldh [hDivideBCDBuffer+2], a
|
||||
dec d
|
||||
jr z, .next2
|
||||
push de
|
||||
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 @@ DivideBCD::
|
|||
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:
|
||||
|
|
|
@ -2,142 +2,142 @@ _Multiply::
|
|||
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
|
||||
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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -5,7 +5,7 @@ DisplayTextIDInit::
|
|||
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)
|
||||
|
@ -71,8 +71,8 @@ DisplayTextIDInit::
|
|||
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
|
||||
|
|
|
@ -6,10 +6,10 @@ PKMNLeaguePC:
|
|||
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
|
||||
|
@ -40,7 +40,7 @@ PKMNLeaguePC:
|
|||
jr nz, .loop
|
||||
.doneShowingTeams
|
||||
pop af
|
||||
ld [hTilesetType], a
|
||||
ldh [hTilesetType], a
|
||||
pop af
|
||||
ld [wUpdateSpritesEnabled], a
|
||||
pop hl
|
||||
|
@ -56,7 +56,7 @@ LeaguePCShowTeam:
|
|||
push bc
|
||||
call LeaguePCShowMon
|
||||
call WaitForTextScrollButtonPress
|
||||
ld a, [hJoyHeld]
|
||||
ldh a, [hJoyHeld]
|
||||
bit 1, a
|
||||
jr nz, .exit
|
||||
ld hl, wHallOfFame + HOF_MON
|
||||
|
|
|
@ -94,11 +94,11 @@ MainMenu:
|
|||
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
|
||||
|
@ -205,7 +205,7 @@ LinkMenu:
|
|||
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 @@ LinkMenu:
|
|||
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
|
||||
|
@ -314,9 +314,9 @@ StartNewGame:
|
|||
; 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,7 +344,7 @@ CableClubOptionsText:
|
|||
|
||||
DisplayContinueGameInfo:
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
coord hl, 4, 7
|
||||
ld b, 8
|
||||
ld c, 14
|
||||
|
@ -362,13 +362,13 @@ DisplayContinueGameInfo:
|
|||
coord hl, 13, 15
|
||||
call PrintPlayTime
|
||||
ld a, 1
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
ld c, 30
|
||||
jp DelayFrames
|
||||
|
||||
PrintSaveScreenText:
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
coord hl, 4, 0
|
||||
ld b, $8
|
||||
ld c, $e
|
||||
|
@ -388,7 +388,7 @@ PrintSaveScreenText:
|
|||
coord hl, 13, 8
|
||||
call PrintPlayTime
|
||||
ld a, $1
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
ld c, 30
|
||||
jp DelayFrames
|
||||
|
||||
|
@ -465,14 +465,14 @@ DisplayOptionMenu:
|
|||
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
|
||||
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
|
||||
|
|
|
@ -132,7 +132,7 @@ DisplayNamingScreen:
|
|||
pop af
|
||||
ld [wCurrentMenuItem], a
|
||||
call JoypadLowSensitivity
|
||||
ld a, [hJoyPressed]
|
||||
ldh a, [hJoyPressed]
|
||||
and a
|
||||
jr z, .inputLoop
|
||||
ld hl, .namingScreenButtonFunctions
|
||||
|
@ -337,7 +337,7 @@ ED_TileEnd:
|
|||
|
||||
PrintAlphabet:
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
ld a, [wAlphabetCase]
|
||||
and a
|
||||
ld de, LowerCaseAlphabet
|
||||
|
@ -362,7 +362,7 @@ PrintAlphabet:
|
|||
jr nz, .outerLoop
|
||||
call PlaceString
|
||||
ld a, $1
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
jp Delay3
|
||||
|
||||
INCLUDE "data/text/alphabets.asm"
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
; f8: leveled up
|
||||
DrawPartyMenu_::
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
call ClearScreen
|
||||
call UpdateSprites
|
||||
callba LoadMonPartySpriteGfxWithLCDDisabled ; load pokemon icon graphics
|
||||
|
@ -34,7 +34,7 @@ RedrawPartyMenu_::
|
|||
ld de, wPartySpecies
|
||||
xor a
|
||||
ld c, a
|
||||
ld [hPartyMonIndex], a
|
||||
ldh [hPartyMonIndex], a
|
||||
ld [wWhichPartyMenuHPBar], a
|
||||
.loop
|
||||
ld a, [de]
|
||||
|
@ -50,10 +50,10 @@ RedrawPartyMenu_::
|
|||
pop hl
|
||||
call PlaceString ; print the pokemon's name
|
||||
callba WriteMonPartySpriteOAMByPartyIndex ; place the appropriate pokemon icon
|
||||
ld a, [hPartyMonIndex]
|
||||
ldh a, [hPartyMonIndex]
|
||||
ld [wWhichPokemon], a
|
||||
inc a
|
||||
ld [hPartyMonIndex], a
|
||||
ldh [hPartyMonIndex], a
|
||||
call LoadMonData
|
||||
pop hl
|
||||
push hl
|
||||
|
@ -88,14 +88,14 @@ RedrawPartyMenu_::
|
|||
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 @@ RedrawPartyMenu_::
|
|||
pop af
|
||||
ld [hl], a
|
||||
ld a, 1
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
call Delay3
|
||||
jp GBPalNormal
|
||||
.printItemUseMessage
|
||||
|
|
|
@ -117,10 +117,10 @@ AccessedMyPCText:
|
|||
; 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 @@ RemoveItemByID::
|
|||
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
|
||||
|
|
|
@ -10,7 +10,7 @@ ShowPokedexMenu:
|
|||
ld [wLastMenuItem], a
|
||||
inc a
|
||||
ld [wd11e], a
|
||||
ld [hJoy7], a
|
||||
ldh [hJoy7], a
|
||||
.setUpGraphics
|
||||
ld b, SET_PAL_GENERIC
|
||||
call RunPaletteCommand
|
||||
|
@ -35,7 +35,7 @@ ShowPokedexMenu:
|
|||
ld [wMenuWatchMovingOutOfBounds], a
|
||||
ld [wCurrentMenuItem], a
|
||||
ld [wLastMenuItem], a
|
||||
ld [hJoy7], a
|
||||
ldh [hJoy7], a
|
||||
ld [wWastedByteCD3A], a
|
||||
ld [wOverrideSimulatedJoypadStatesMask], a
|
||||
pop af
|
||||
|
@ -156,7 +156,7 @@ HandlePokedexSideMenu:
|
|||
; 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
|
||||
ld a, "─"
|
||||
|
@ -216,7 +216,7 @@ HandlePokedexListMenu:
|
|||
ld [wDexMaxSeenMon], a
|
||||
.loop
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
coord hl, 4, 2
|
||||
lb bc, 14, 10
|
||||
call ClearScreenArea
|
||||
|
@ -280,7 +280,7 @@ HandlePokedexListMenu:
|
|||
dec d
|
||||
jr nz, .printPokemonLoop
|
||||
ld a, 01
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
call Delay3
|
||||
call GBPalNormal
|
||||
call HandleMenuInput
|
||||
|
@ -400,7 +400,7 @@ ShowPokedexDataInternal:
|
|||
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,10 +410,10 @@ ShowPokedexDataInternal:
|
|||
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
|
||||
ld de, 1
|
||||
|
@ -548,9 +548,9 @@ ShowPokedexDataInternal:
|
|||
lb bc, 2, 5 ; 2 bytes, 5 digits
|
||||
call PrintNumber ; print weight
|
||||
coord hl, 14, 8
|
||||
ld a, [hDexWeight + 1]
|
||||
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 @@ ShowPokedexDataInternal:
|
|||
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
|
||||
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 @@ ShowPokedexDataInternal:
|
|||
ld hl, wd72c
|
||||
res 1, [hl]
|
||||
ld a, $77 ; max volume
|
||||
ld [rNR50], a
|
||||
ldh [rNR50], a
|
||||
ret
|
||||
|
||||
HeightWeightText:
|
||||
|
|
|
@ -70,7 +70,7 @@ LoadSAV0:
|
|||
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
|
||||
|
@ -217,7 +217,7 @@ SaveSAVtoSRAM0:
|
|||
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 @@ CopyBoxToOrFromSRAM:
|
|||
|
||||
DisplayChangeBoxMenu:
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
ld a, A_BUTTON | B_BUTTON
|
||||
ld [wMenuWatchedKeys], a
|
||||
ld a, 11
|
||||
|
@ -486,7 +486,7 @@ DisplayChangeBoxMenu:
|
|||
dec a
|
||||
jr nz, .loop
|
||||
ld a, 1
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
ret
|
||||
|
||||
ChooseABoxText:
|
||||
|
|
|
@ -50,7 +50,7 @@ StartMenu_Pokemon::
|
|||
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
|
||||
|
@ -239,21 +239,21 @@ StartMenu_Pokemon::
|
|||
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
|
||||
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]
|
||||
|
@ -454,10 +454,10 @@ StartMenu_TrainerInfo::
|
|||
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 @@ StartMenu_TrainerInfo::
|
|||
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
|
||||
|
@ -648,7 +648,7 @@ StartMenu_SaveReset::
|
|||
|
||||
StartMenu_Option::
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
call ClearScreen
|
||||
call UpdateSprites
|
||||
callab DisplayOptionMenu
|
||||
|
@ -737,10 +737,10 @@ SwitchPartyMon_InitVarOrSwapData:
|
|||
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
|
||||
|
|
|
@ -77,18 +77,18 @@ HandleItemListSwapping::
|
|||
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
|
||||
|
|
|
@ -584,7 +584,7 @@ DisplayFieldMoveMonMenu:
|
|||
call TextBoxBorder
|
||||
call UpdateSprites
|
||||
ld a, 12
|
||||
ld [hFieldMoveMonMenuTopMenuItemX], a
|
||||
ldh [hFieldMoveMonMenuTopMenuItemX], a
|
||||
coord hl, 13, 12
|
||||
ld de, PokemonMenuEntries
|
||||
jp PlaceString
|
||||
|
@ -673,7 +673,7 @@ DisplayFieldMoveMonMenu:
|
|||
.donePrintingNames
|
||||
pop hl
|
||||
ld a, [wFieldMovesLeftmostXCoord]
|
||||
ld [hFieldMoveMonMenuTopMenuItemX], a
|
||||
ldh [hFieldMoveMonMenuTopMenuItemX], a
|
||||
coord hl, 0, 12
|
||||
ld a, [wFieldMovesLeftmostXCoord]
|
||||
inc a
|
||||
|
|
|
@ -19,7 +19,7 @@ HallOfFamePC:
|
|||
coord hl, 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 @@ FadeInCreditsText:
|
|||
ld b, 4
|
||||
.loop
|
||||
ld a, [hli]
|
||||
ld [rBGP], a
|
||||
ldh [rBGP], a
|
||||
ld c, 5
|
||||
call DelayFrames
|
||||
dec b
|
||||
|
@ -47,7 +47,7 @@ FadeInCreditsText:
|
|||
|
||||
DisplayCreditsMon:
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
call SaveScreenTilesToBuffer1
|
||||
call FillMiddleOfScreenWithWhite
|
||||
|
||||
|
@ -67,17 +67,17 @@ DisplayCreditsMon:
|
|||
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 @@ DisplayCreditsMon:
|
|||
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 @@ ScrollCreditsMonLeft:
|
|||
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 @@ HoFGBPalettes:
|
|||
|
||||
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:
|
||||
|
|
|
@ -13,13 +13,13 @@ EvolveMon:
|
|||
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 @@ EvolveMon:
|
|||
ld [wd0b5], a
|
||||
call Evolution_LoadPic
|
||||
ld a, $1
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
ld a, [wEvoOldSpecies]
|
||||
call PlayCry
|
||||
call WaitForSoundToFinish
|
||||
|
@ -117,7 +117,7 @@ Evolution_BackAndForthAnim:
|
|||
Evolution_ChangeMonPic:
|
||||
push bc
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
coord hl, 7, 2
|
||||
lb bc, 7, 7
|
||||
ld de, SCREEN_WIDTH - 7
|
||||
|
@ -134,7 +134,7 @@ Evolution_ChangeMonPic:
|
|||
dec b
|
||||
jr nz, .loop
|
||||
ld a, 1
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
call Delay3
|
||||
pop bc
|
||||
ret
|
||||
|
@ -143,7 +143,7 @@ Evolution_CheckForCancel:
|
|||
call DelayFrame
|
||||
push bc
|
||||
call JoypadLowSensitivity
|
||||
ld a, [hJoy5]
|
||||
ldh a, [hJoy5]
|
||||
pop bc
|
||||
and B_BUTTON
|
||||
jr nz, .pressedB
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
LoadShootingStarGraphics:
|
||||
ld a, $f9
|
||||
ld [rOBP0], a
|
||||
ldh [rOBP0], a
|
||||
ld a, $a4
|
||||
ld [rOBP1], a
|
||||
ldh [rOBP1], a
|
||||
ld de, AnimationTileset2 + $30 ; star tile (top left quadrant)
|
||||
ld hl, vChars1 + $200
|
||||
lb bc, BANK(AnimationTileset2), $01
|
||||
|
@ -201,9 +201,9 @@ MoveDownSmallStars:
|
|||
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
|
||||
|
|
|
@ -19,12 +19,12 @@ AnimateHallOfFame:
|
|||
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 @@ AnimateHallOfFame:
|
|||
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
|
||||
|
@ -86,7 +86,7 @@ AnimateHallOfFame:
|
|||
call HoFDisplayPlayerStats
|
||||
call HoFFadeOutScreenAndMusic
|
||||
xor a
|
||||
ld [hWY], a
|
||||
ldh [hWY], a
|
||||
ld hl, rLCDC
|
||||
res 3, [hl]
|
||||
ret
|
||||
|
@ -97,9 +97,9 @@ HallOfFameText:
|
|||
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
|
||||
|
@ -121,7 +121,7 @@ HoFShowMonOrPlayer:
|
|||
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 @@ HoFShowMonOrPlayer:
|
|||
.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 @@ HoFShowMonOrPlayer:
|
|||
|
||||
.ScrollPic
|
||||
call DelayFrame
|
||||
ld a, [hSCX]
|
||||
ldh a, [hSCX]
|
||||
add e
|
||||
ld [hSCX], a
|
||||
ldh [hSCX], a
|
||||
cp d
|
||||
jr nz, .ScrollPic
|
||||
ret
|
||||
|
|
|
@ -12,15 +12,15 @@ const_value = 3
|
|||
|
||||
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 @@ PlayIntroScene:
|
|||
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
|
||||
|
@ -245,7 +245,7 @@ IntroMoveMon:
|
|||
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 @@ IntroMoveMon:
|
|||
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
|
||||
|
@ -313,7 +313,7 @@ PlayShootingStar:
|
|||
call RunPaletteCommand
|
||||
callba LoadCopyrightAndTextBoxTiles
|
||||
ldPal a, BLACK, DARK_GRAY, LIGHT_GRAY, WHITE
|
||||
ld [rBGP], a
|
||||
ldh [rBGP], a
|
||||
ld c, 180
|
||||
call DelayFrames
|
||||
call ClearScreen
|
||||
|
|
|
@ -2,11 +2,11 @@ InitPlayerData:
|
|||
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
|
||||
|
|
|
@ -52,7 +52,7 @@ OakSpeech:
|
|||
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
|
||||
|
@ -104,12 +104,12 @@ OakSpeech:
|
|||
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 @@ OakSpeech:
|
|||
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,7 +137,7 @@ OakSpeech:
|
|||
ld [wNewSoundID], a
|
||||
call PlaySound
|
||||
pop af
|
||||
ld [hLoadedROMBank], a
|
||||
ldh [hLoadedROMBank], a
|
||||
ld [MBC1RomBank], a
|
||||
ld c, 20
|
||||
call DelayFrames
|
||||
|
@ -175,7 +175,7 @@ FadeInIntroPic:
|
|||
ld b, 6
|
||||
.next
|
||||
ld a, [hli]
|
||||
ld [rBGP], a
|
||||
ldh [rBGP], a
|
||||
ld c, 10
|
||||
call DelayFrames
|
||||
dec b
|
||||
|
@ -192,18 +192,18 @@ IntroFadePalettes:
|
|||
|
||||
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:
|
||||
|
@ -229,5 +229,5 @@ IntroDisplayPicCenteredOrUpperRight:
|
|||
coord hl, 6, 4
|
||||
.next
|
||||
xor a
|
||||
ld [hStartTileID], a
|
||||
ldh [hStartTileID], a
|
||||
predef_jump CopyUncompressedPicToTilemap
|
||||
|
|
|
@ -90,13 +90,13 @@ OakSpeechSlidePicCommon:
|
|||
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 @@ OakSpeechSlidePicCommon:
|
|||
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 @@ OakSpeechSlidePicCommon:
|
|||
.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 @@ OakSpeechSlidePicCommon:
|
|||
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 @@ OakSpeechSlidePicCommon:
|
|||
.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
|
||||
|
|
|
@ -11,7 +11,7 @@ SetDefaultNamesBeforeTitlescreen::
|
|||
ld de, wRivalName
|
||||
call CopyFixedLengthText
|
||||
xor a
|
||||
ld [hWY], a
|
||||
ldh [hWY], a
|
||||
ld [wLetterPrintingDelayFlags], a
|
||||
ld hl, wd732
|
||||
ld [hli], a
|
||||
|
@ -24,14 +24,14 @@ SetDefaultNamesBeforeTitlescreen::
|
|||
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
|
||||
|
@ -130,7 +130,7 @@ ENDC
|
|||
call TitleScreenCopyTileMapToVRAM
|
||||
call SaveScreenTilesToBuffer1
|
||||
ld a, $40
|
||||
ld [hWY], a
|
||||
ldh [hWY], a
|
||||
call LoadScreenTilesFromBuffer2
|
||||
ld a, vBGMap0 / $100
|
||||
call TitleScreenCopyTileMapToVRAM
|
||||
|
@ -138,7 +138,7 @@ ENDC
|
|||
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 @@ ENDC
|
|||
; 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
|
||||
|
@ -237,9 +237,9 @@ ENDC
|
|||
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
|
||||
call TitleScreenCopyTileMapToVRAM
|
||||
|
@ -247,7 +247,7 @@ ENDC
|
|||
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
|
||||
|
@ -280,7 +280,7 @@ TitleScreenPickNewMon:
|
|||
call LoadTitleMonSprite
|
||||
|
||||
ld a, $90
|
||||
ld [hWY], a
|
||||
ldh [hWY], a
|
||||
ld d, 1 ; scroll out
|
||||
callba TitleScroll
|
||||
ret
|
||||
|
@ -289,20 +289,20 @@ TitleScreenScrollInMon:
|
|||
ld d, 0 ; scroll in
|
||||
callba 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
|
||||
|
@ -358,12 +358,12 @@ LoadTitleMonSprite:
|
|||
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
|
||||
|
||||
|
|
|
@ -69,15 +69,15 @@ _TitleScroll:
|
|||
|
||||
.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
|
||||
|
|
|
@ -20,14 +20,14 @@ ExternalClockTradeAnim:
|
|||
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 @@ TradeAnimCommon:
|
|||
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_Delay100:
|
|||
|
||||
Trade_CopyTileMapToVRAM:
|
||||
ld a, $1
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
call Delay3
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
ret
|
||||
|
||||
Trade_Delay80:
|
||||
|
@ -181,10 +181,10 @@ LoadTradingGFXAndMonNames:
|
|||
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,7 +198,7 @@ LoadTradingGFXAndMonNames:
|
|||
|
||||
Trade_LoadMonPartySpriteGfx:
|
||||
ld a, %11010000
|
||||
ld [rOBP1], a
|
||||
ldh [rOBP1], a
|
||||
jpba LoadMonPartySpriteGfx
|
||||
|
||||
Trade_SwapNames:
|
||||
|
@ -224,14 +224,14 @@ Trade_Cleanup:
|
|||
|
||||
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
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
coord hl, 4, 0
|
||||
ld b, 6
|
||||
ld c, 10
|
||||
|
@ -247,8 +247,8 @@ Trade_ShowPlayerMon:
|
|||
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,7 +261,7 @@ Trade_ShowPlayerMon:
|
|||
ld a, [wTradedPlayerMonSpecies]
|
||||
call PlayCry
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
ret
|
||||
|
||||
Trade_DrawOpenEndOfLinkCable:
|
||||
|
@ -277,10 +277,10 @@ Trade_DrawOpenEndOfLinkCable:
|
|||
call Trade_CopyCableTilesOffScreen
|
||||
|
||||
ld a, $a0
|
||||
ld [hSCX], a
|
||||
ldh [hSCX], a
|
||||
call DelayFrame
|
||||
ld a, %10001011
|
||||
ld [rLCDC], a
|
||||
ldh [rLCDC], a
|
||||
coord hl, 6, 2
|
||||
ld b, $7 ; open end of link cable tile ID list index
|
||||
call CopyTileIDsFromList_ZeroBaseTileID
|
||||
|
@ -289,9 +289,9 @@ Trade_DrawOpenEndOfLinkCable:
|
|||
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 @@ Trade_AnimateBallEnteringLinkCable:
|
|||
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 @@ Trade_AnimateBallEnteringLinkCable:
|
|||
.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:
|
||||
|
@ -360,13 +360,13 @@ Trade_ShowEnemyMon:
|
|||
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
|
||||
|
@ -381,7 +381,7 @@ Trade_AnimLeftToRight:
|
|||
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 @@ Trade_AnimLeftToRight:
|
|||
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 @@ Trade_AnimLeftToRight:
|
|||
ld b, $6
|
||||
call Trade_AnimMonMoveHorizontal
|
||||
xor a
|
||||
ld [hAutoBGTransferEnabled], a
|
||||
ldh [hAutoBGTransferEnabled], a
|
||||
call Trade_AnimMonMoveVertical
|
||||
jp ClearSprites
|
||||
|
||||
|
@ -430,7 +430,7 @@ Trade_AnimRightToLeft:
|
|||
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 @@ Trade_AnimRightToLeft:
|
|||
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:
|
||||
|
@ -555,11 +555,11 @@ Trade_CopyCableTilesOffScreen:
|
|||
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 @@ Trade_AnimMonMoveHorizontal:
|
|||
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 @@ Trade_AnimCircledMon:
|
|||
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
|
||||
|
@ -731,9 +731,9 @@ Trade_LoadMonSprite:
|
|||
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
|
||||
call LoadFlippedFrontSpriteByMonIndex
|
||||
|
@ -743,16 +743,16 @@ Trade_LoadMonSprite:
|
|||
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,17 +764,17 @@ Trade_SlideTextBoxOffScreen:
|
|||
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
|
||||
ld c, 10
|
||||
call DelayFrames
|
||||
ld a, $7
|
||||
ld [rWX], a
|
||||
ldh [rWX], a
|
||||
ret
|
||||
|
||||
PrintTradeWentToText:
|
||||
|
|
|
@ -66,7 +66,7 @@ PalletMovementScript_OakMoveLeft:
|
|||
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 @@ PalletMovementScript_PlayerMoveLeft:
|
|||
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 @@ FreezeEnemyTrainerSprite::
|
|||
jr .loop
|
||||
.notRival
|
||||
ld a, [wSpriteIndex]
|
||||
ld [hSpriteIndex], a
|
||||
ldh [hSpriteIndex], a
|
||||
jp SetSpriteMovementBytesToFF
|
||||
|
||||
RivalIDs:
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -38,14 +38,14 @@ UsedCut:
|
|||
call ClearSprites
|
||||
call RestoreScreenTilesAndReloadTilePatterns
|
||||
ld a, SCREEN_HEIGHT_PX
|
||||
ld [hWY], a
|
||||
ldh [hWY], a
|
||||
call Delay3
|
||||
call LoadGBPal
|
||||
call LoadCurrentMapView
|
||||
call SaveScreenTilesToBuffer2
|
||||
call Delay3
|
||||
xor a
|
||||
ld [hWY], a
|
||||
ldh [hWY], a
|
||||
ld hl, UsedCutText
|
||||
call PrintText
|
||||
call LoadScreenTilesFromBuffer2
|
||||
|
@ -63,7 +63,7 @@ UsedCut:
|
|||
ld a, SFX_CUT
|
||||
call PlaySound
|
||||
ld a, $90
|
||||
ld [hWY], a
|
||||
ldh [hWY], a
|
||||
call UpdateSprites
|
||||
jp RedrawMapView
|
||||
|
||||
|
@ -75,7 +75,7 @@ InitCutAnimOAM:
|
|||
xor a
|
||||
ld [wWhichAnimationOffsets], a
|
||||
ld a, %11100100
|
||||
ld [rOBP1], a
|
||||
ldh [rOBP1], a
|
||||
ld a, [wCutTile]
|
||||
cp $52
|
||||
jr z, .grass
|
||||
|
|
|
@ -15,9 +15,9 @@ AnimCut:
|
|||
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 @@ AnimCutGrass_UpdateOAMEntries:
|
|||
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
|
||||
|
|
|
@ -6,7 +6,7 @@ AnimateBoulderDust:
|
|||
ld a, $ff
|
||||
ld [wUpdateSpritesEnabled], a
|
||||
ld a, %11100100
|
||||
ld [rOBP1], a
|
||||
ldh [rOBP1], a
|
||||
call LoadSmokeTileFourTimes
|
||||
callba WriteCutOrBoulderDustAnimationOAMBlock
|
||||
ld c, 8 ; number of steps in animation
|
||||
|
@ -18,9 +18,9 @@ AnimateBoulderDust:
|
|||
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
|
||||
|
|
|
@ -6,7 +6,7 @@ ShakeElevator::
|
|||
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 @@ ShakeElevator::
|
|||
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 @@ ShakeElevator::
|
|||
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)
|
||||
|
|
|
@ -8,10 +8,10 @@ AnimateHealingMachine:
|
|||
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 @@ AnimateHealingMachine:
|
|||
ld c, 32
|
||||
call DelayFrames
|
||||
pop af
|
||||
ld [rOBP1], a
|
||||
ldh [rOBP1], a
|
||||
pop hl
|
||||
pop af
|
||||
ld [hl], a
|
||||
|
@ -78,9 +78,9 @@ PokeCenterOAMData:
|
|||
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
|
||||
|
|
|
@ -58,7 +58,7 @@ CheckForHiddenObject::
|
|||
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 @@ CheckForHiddenObject::
|
|||
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 @@ CheckIfCoordsInFrontOfPlayerMatch:
|
|||
.didNotMatch
|
||||
ld a, $ff
|
||||
.done
|
||||
ld [hCoordsInFrontOfPlayerMatch], a
|
||||
ldh [hCoordsInFrontOfPlayerMatch], a
|
||||
ret
|
||||
|
||||
INCLUDE "data/events/hidden_objects.asm"
|
||||
|
|
|
@ -36,7 +36,7 @@ HandleLedges::
|
|||
inc hl
|
||||
jr .loop
|
||||
.foundMatch
|
||||
ld a, [hJoyHeld]
|
||||
ldh a, [hJoyHeld]
|
||||
and e
|
||||
ret z
|
||||
ld a, $ff
|
||||
|
|
|
@ -39,7 +39,7 @@ LoadMapSpriteTilePatterns:
|
|||
ld b, $10 ; number of sprite slots
|
||||
ld hl, wSpritePlayerStateData2PictureID
|
||||
xor a
|
||||
ld [hFourTileSpriteCount], a
|
||||
ldh [hFourTileSpriteCount], a
|
||||
.copyPictureIDLoop ; loop to copy picture ID from $C2XD to $C2XE
|
||||
ld a, [hli] ; $C2XD (sprite picture ID)
|
||||
ld [hld], a ; $C2XE
|
||||
|
@ -98,14 +98,14 @@ LoadMapSpriteTilePatterns:
|
|||
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
|
||||
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
|
||||
|
@ -128,7 +128,7 @@ LoadMapSpriteTilePatterns:
|
|||
push bc
|
||||
ld hl, vNPCSprites ; VRAM base address
|
||||
ld bc, $c0 ; number of bytes per VRAM slot
|
||||
ld a, [hVRAMSlot]
|
||||
ldh a, [hVRAMSlot]
|
||||
cp 11 ; is it a 4-tile sprite?
|
||||
jr nc, .fourTileSpriteVRAMAddr
|
||||
ld d, a
|
||||
|
@ -141,13 +141,13 @@ LoadMapSpriteTilePatterns:
|
|||
jr .loadStillTilePattern
|
||||
.fourTileSpriteVRAMAddr
|
||||
ld hl, vSprites + $7c0 ; address for second 4-tile sprite
|
||||
ld a, [hFourTileSpriteCount]
|
||||
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
|
||||
inc a
|
||||
ld [hFourTileSpriteCount], a
|
||||
ldh [hFourTileSpriteCount], a
|
||||
.loadStillTilePattern
|
||||
pop bc
|
||||
pop de
|
||||
|
@ -167,7 +167,7 @@ LoadMapSpriteTilePatterns:
|
|||
.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
|
||||
|
|
|
@ -31,19 +31,19 @@ LoadMissableObjects:
|
|||
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 @@ InitializeMissableObjectsFlags:
|
|||
|
||||
; 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 @@ IsObjectHidden:
|
|||
.notHidden
|
||||
xor a
|
||||
.hidden
|
||||
ld [hIsHiddenMissableObject], a
|
||||
ldh [hIsHiddenMissableObject], a
|
||||
ret
|
||||
|
||||
; adds missable object (items, leg. pokemon, etc.) to the map
|
||||
|
|
|
@ -14,7 +14,7 @@ UpdatePlayerSprite:
|
|||
; the maximum number for map tiles
|
||||
.checkIfTextBoxInFrontOfSprite
|
||||
aCoord 8, 9
|
||||
ld [hTilePlayerStandingOn], a
|
||||
ldh [hTilePlayerStandingOn], a
|
||||
cp MAP_TILESET_SIZE
|
||||
jr c, .lowerLeftTileIsMapTile
|
||||
.disableSprite
|
||||
|
@ -63,7 +63,7 @@ UpdatePlayerSprite:
|
|||
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 @@ UpdatePlayerSprite:
|
|||
; 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 @@ UpdatePlayerSprite:
|
|||
UnusedReadSpriteDataFunction:
|
||||
push bc
|
||||
push af
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
ld c, a
|
||||
pop af
|
||||
add c
|
||||
|
@ -112,7 +112,7 @@ UnusedReadSpriteDataFunction:
|
|||
ret
|
||||
|
||||
UpdateNPCSprite:
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
swap a
|
||||
dec a
|
||||
add a
|
||||
|
@ -122,7 +122,7 @@ UpdateNPCSprite:
|
|||
ld a, [hl] ; read movement byte 2
|
||||
ld [wCurSpriteMovement2], a
|
||||
ld h, $c1
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
ld l, a
|
||||
inc l
|
||||
ld a, [hl] ; c1x1
|
||||
|
@ -131,7 +131,7 @@ UpdateNPCSprite:
|
|||
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]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
ld l, a
|
||||
inc l
|
||||
ld a, [hl] ; c1x1
|
||||
|
@ -151,7 +151,7 @@ UpdateNPCSprite:
|
|||
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
|
||||
|
@ -264,11 +264,11 @@ ChangeFacingDirection:
|
|||
TryWalking:
|
||||
push hl
|
||||
ld h, $c1
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add $9
|
||||
ld l, a
|
||||
ld [hl], c ; c1x9 (update facing direction)
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add $3
|
||||
ld l, a
|
||||
ld [hl], d ; c1x3 (update Y movement delta)
|
||||
|
@ -282,7 +282,7 @@ TryWalking:
|
|||
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
|
||||
|
@ -291,7 +291,7 @@ TryWalking:
|
|||
ld a, [hl] ; c2x5: X position
|
||||
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
|
||||
dec h
|
||||
|
@ -301,7 +301,7 @@ TryWalking:
|
|||
|
||||
; 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)
|
||||
|
@ -317,7 +317,7 @@ UpdateSpriteInWalkingAnimation:
|
|||
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)
|
||||
|
@ -330,7 +330,7 @@ UpdateSpriteInWalkingAnimation:
|
|||
ld a, [hl] ; c1x6 (screen X position)
|
||||
add b
|
||||
ld [hl], a ; update screen X position
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
ld l, a
|
||||
inc h
|
||||
ld a, [hl] ; c2x0 (walk animation counter)
|
||||
|
@ -343,7 +343,7 @@ UpdateSpriteInWalkingAnimation:
|
|||
ld a, [hl] ; c2x6 (movement byte 1)
|
||||
cp $fe
|
||||
jr nc, .initNextMovementCounter ; values $fe and $ff
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
inc a
|
||||
ld l, a
|
||||
dec h
|
||||
|
@ -351,14 +351,14 @@ UpdateSpriteInWalkingAnimation:
|
|||
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]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
inc a
|
||||
ld l, a
|
||||
ld [hl], $2 ; c1x1 = 2 (movement status)
|
||||
|
@ -375,7 +375,7 @@ UpdateSpriteInWalkingAnimation:
|
|||
; update delay value (c2x8) for sprites in the delayed state (c1x1)
|
||||
UpdateSpriteMovementDelay:
|
||||
ld h, $c2
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add $6
|
||||
ld l, a
|
||||
ld a, [hl] ; c2x6: movement byte 1
|
||||
|
@ -390,13 +390,13 @@ UpdateSpriteMovementDelay:
|
|||
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)
|
||||
notYetMoving:
|
||||
ld h, wSpriteStateData1 / $100
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add wSpritePlayerStateData1AnimFrameCounter - wSpritePlayerStateData1
|
||||
ld l, a
|
||||
ld [hl], $0 ; c1x8 = 0 (walk animation frame)
|
||||
|
@ -429,7 +429,7 @@ MakeNPCFacePlayer:
|
|||
.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
|
||||
|
@ -440,7 +440,7 @@ InitializeSpriteStatus:
|
|||
inc l
|
||||
ld [hl], $ff ; $c1x2: set sprite image to $ff (invisible/off screen)
|
||||
inc h
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add $2
|
||||
ld l, a
|
||||
ld a, $8
|
||||
|
@ -451,7 +451,7 @@ InitializeSpriteStatus:
|
|||
; calculates the sprite's screen position form its map position and the player position
|
||||
InitializeSpriteScreenPosition:
|
||||
ld h, wSpriteStateData2 / $100
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add wSpritePlayerStateData2MapY - wSpritePlayerStateData2
|
||||
ld l, a
|
||||
ld a, [wYCoord]
|
||||
|
@ -475,17 +475,17 @@ InitializeSpriteScreenPosition:
|
|||
; 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]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add wSpritePlayerStateData2MovementByte1 - wSpritePlayerStateData2
|
||||
ld l, a
|
||||
ld a, [hl] ; c2x6: movement byte 1
|
||||
cp $fe
|
||||
jr c, .skipXVisibilityTest ; movement byte 1 < $fe (i.e. the sprite's movement is scripted)
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add wSpritePlayerStateData2MapY - wSpritePlayerStateData2
|
||||
ld l, a
|
||||
ld b, [hl] ; c2x4: Y pos (+4)
|
||||
|
@ -527,7 +527,7 @@ CheckSpriteAvailability:
|
|||
jr c, .spriteVisible ; standing on tile with ID >=MAP_TILESET_SIZE (top right tile)
|
||||
.spriteInvisible
|
||||
ld h, wSpriteStateData1 / $100
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1
|
||||
ld l, a
|
||||
ld [hl], $ff ; c1x2
|
||||
|
@ -540,7 +540,7 @@ CheckSpriteAvailability:
|
|||
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]
|
||||
|
@ -556,7 +556,7 @@ CheckSpriteAvailability:
|
|||
|
||||
UpdateSpriteImage:
|
||||
ld h, $c1
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add $8
|
||||
ld l, a
|
||||
ld a, [hli] ; c1x8: walk animation frame
|
||||
|
@ -564,10 +564,10 @@ UpdateSpriteImage:
|
|||
ld a, [hl] ; c1x9: facing direction
|
||||
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
|
||||
|
@ -581,7 +581,7 @@ UpdateSpriteImage:
|
|||
; set carry on failure, clears carry on success
|
||||
CanWalkOntoTile:
|
||||
ld h, wSpriteStateData2 / $100
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add wSpritePlayerStateData2MovementByte1 - wSpritePlayerStateData2
|
||||
ld l, a
|
||||
ld a, [hl] ; c2x6 (movement byte 1)
|
||||
|
@ -602,14 +602,14 @@ CanWalkOntoTile:
|
|||
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)
|
||||
inc a
|
||||
jr z, .impassable ; if $ff, no movement allowed (however, changing direction is)
|
||||
ld h, wSpriteStateData1 / $100
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1
|
||||
ld l, a
|
||||
ld a, [hli] ; c1x4 (screen Y pos)
|
||||
|
@ -628,14 +628,14 @@ CanWalkOntoTile:
|
|||
pop bc
|
||||
pop de
|
||||
ld h, wSpriteStateData1 / $100
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add $c
|
||||
ld l, a
|
||||
ld a, [hl] ; c1xc (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]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add wSpritePlayerStateData2YDisplacement - wSpritePlayerStateData2
|
||||
ld l, a
|
||||
ld a, [hli] ; c2x2 (sprite Y displacement, initialized at $8, keep track of where a sprite did go)
|
||||
|
@ -666,7 +666,7 @@ CanWalkOntoTile:
|
|||
ret
|
||||
.impassable
|
||||
ld h, wSpriteStateData1 / $100
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
inc a
|
||||
ld l, a
|
||||
ld [hl], $2 ; c1x1 = 2 (set movement status to delayed)
|
||||
|
@ -677,11 +677,11 @@ CanWalkOntoTile:
|
|||
inc l
|
||||
ld [hl], a ; c1x5 = 0 (clear X movement delta)
|
||||
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)
|
||||
scf ; set carry (marking failure to walk)
|
||||
|
@ -692,7 +692,7 @@ CanWalkOntoTile:
|
|||
; hl: output pointer
|
||||
GetTileSpriteStandsOn:
|
||||
ld h, wSpriteStateData1 / $100
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add wSpritePlayerStateData1YPixels - wSpritePlayerStateData1
|
||||
ld l, a
|
||||
ld a, [hli] ; c1x4: screen Y position
|
||||
|
@ -784,7 +784,7 @@ DoScriptedNPCMovement:
|
|||
ld a, [hl]
|
||||
add b
|
||||
ld [hl], a
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add $9
|
||||
ld l, a
|
||||
ld a, c
|
||||
|
@ -817,7 +817,7 @@ GetSpriteScreenXPointer:
|
|||
|
||||
GetSpriteScreenXYPointerCommon:
|
||||
ld hl, wSpriteStateData1
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add l
|
||||
add b
|
||||
ld l, a
|
||||
|
@ -825,7 +825,7 @@ GetSpriteScreenXYPointerCommon:
|
|||
|
||||
AnimScriptedNPCMovement:
|
||||
ld hl, wSpriteStateData2
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add wSpritePlayerStateData2ImageBaseOffset - wSpritePlayerStateData2
|
||||
ld l, a
|
||||
ld a, [hl] ; VRAM slot
|
||||
|
@ -833,7 +833,7 @@ AnimScriptedNPCMovement:
|
|||
swap a
|
||||
ld b, a
|
||||
ld hl, wSpriteStateData1
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add wSpritePlayerStateData1FacingDirection - wSpritePlayerStateData1
|
||||
ld l, a
|
||||
ld a, [hl] ; facing direction
|
||||
|
@ -849,21 +849,21 @@ AnimScriptedNPCMovement:
|
|||
.anim
|
||||
add b
|
||||
ld b, a
|
||||
ld [hSpriteVRAMSlotAndFacing], a
|
||||
ldh [hSpriteVRAMSlotAndFacing], a
|
||||
call AdvanceScriptedNPCAnimFrameCounter
|
||||
ld hl, wSpriteStateData1
|
||||
ld a, [hCurrentSpriteOffset]
|
||||
ldh a, [hCurrentSpriteOffset]
|
||||
add wSpritePlayerStateData1ImageIndex - wSpritePlayerStateData1
|
||||
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 +878,5 @@ AdvanceScriptedNPCAnimFrameCounter:
|
|||
inc a
|
||||
and $3
|
||||
ld [hl], a
|
||||
ld [hSpriteAnimFrameCounter], a
|
||||
ldh [hSpriteAnimFrameCounter], a
|
||||
ret
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue