ref: 12c1d874b94cf51523b072477a59b0cc398fc8d3
parent: 724215ea7519c28b602f72440e1ec73e2e6cf388
parent: c0a01c998240bacae77addbb08a5d2133cf58a21
author: Bryan Bishop <[email protected]>
date: Sat Aug 31 08:47:23 EDT 2013
Merge branch 'master' into refactor-preprocessor Conflicts: preprocessor.py Also bump the extras submodule to a version of pokemontools with a suitable version of the preprocessor. The changes from 'master' for preprocessor.py have been inserted into pokemontools prior to the submodule bump.
--- a/Makefile
+++ b/Makefile
@@ -7,8 +7,8 @@
LZ_GFX := $(shell find gfx/ -type f -name '*.lz')
TWOBPP_GFX := $(shell find gfx/ -type f -name '*.2bpp')
-all: pokecrystal.gbc
- cmp baserom.gbc $<
+all: baserom.gbc pokecrystal.gbc
+ cmp baserom.gbc pokecrystal.gbc
clean:
rm -f pokecrystal.o pokecrystal.gbc
@echo 'rm -f $(TEXTFILES:.asm=.tx)'
@@ -19,6 +19,8 @@
.asm.tx:
$(eval TEXTQUEUE := $(TEXTQUEUE) $<)
@rm -f $@
+baserom.gbc:
+ python -c "import os; assert 'baserom.gbc' in os.listdir('.'), 'Wait! Need baserom.gbc first. Check README and INSTALL for details.';"
pokecrystal.gbc: pokecrystal.o
rgblink -n pokecrystal.sym -m pokecrystal.map -o $@ $<
--- a/battle/ai/scoring.asm
+++ b/battle/ai/scoring.asm
@@ -129,7 +129,7 @@
jr .checkmove
.discourage
- call RNG
+ call Random
cp 30
jr c, .checkmove
inc [hl]
@@ -430,7 +430,7 @@
ret
.asm_38815
- call RNG
+ call Random
cp $64
ret c
@@ -575,7 +575,7 @@
call AICheckEnemyQuarterHP
ret nc
- call RNG
+ call Random
cp 20
ret c
@@ -588,7 +588,7 @@
AIScoring_DreamEater: ; 388ca
- call RNG
+ call Random
cp $19
ret c
@@ -612,7 +612,7 @@
bit 0, a
jr nz, .asm_388ef
- call RNG
+ call Random
cp $b2
jr nc, .asm_38911
@@ -628,7 +628,7 @@
jr nc, .asm_3890f
- call RNG
+ call Random
cp $a
jr c, .asm_388ef
@@ -683,7 +683,7 @@
ret
.asm_38938
- call RNG
+ call Random
cp $50
ret c
dec [hl]
@@ -744,7 +744,7 @@
call AICompareSpeed
ret nc
- call RNG
+ call Random
cp $19
ret c
@@ -766,7 +766,7 @@
bit 0, a
jr nz, .asm_3899d
- call RNG
+ call Random
cp $b2
jr nc, .asm_389bf
@@ -782,7 +782,7 @@
jr nc, .asm_389bd
- call RNG
+ call Random
cp $a
jr c, .asm_3899d
@@ -837,7 +837,7 @@
ret
.asm_389e6
- call RNG
+ call Random
cp $50
ret c
dec [hl]
@@ -878,7 +878,7 @@
.asm_38a12
pop hl
- call RNG
+ call Random
cp $28
ret c
dec [hl]
@@ -894,7 +894,7 @@
AIScoring_Bide: ; 38a1e
call AICheckEnemyMaxHP
ret c
- call RNG
+ call Random
cp $19
ret c
inc [hl]
@@ -926,7 +926,7 @@
ret
.asm_38a45
- call RNG
+ call Random
cp $19
ret c
dec [hl]
@@ -948,7 +948,7 @@
AIScoring_Reflect: ; 38a54
call AICheckEnemyMaxHP
ret c
- call RNG
+ call Random
cp $14
ret c
inc [hl]
@@ -1041,7 +1041,7 @@
ret c
.asm_38acd
- call RNG
+ call Random
cp $c8
ret c
@@ -1061,7 +1061,7 @@
AIScoring_Confuse: ; 38adb
call AICheckPlayerHalfHP
ret c
- call RNG
+ call Random
cp $19
jr c, .asm_38ae7
inc [hl]
@@ -1156,7 +1156,7 @@
ret nz
call AICompareSpeed
ret c
- call RNG
+ call Random
cp 30
ret c
dec [hl]
@@ -1183,7 +1183,7 @@
ret
.asm_38b72
- call RNG
+ call Random
cp 40
ret c
inc [hl]
@@ -1334,7 +1334,7 @@
.asm_38c30
- call RNG
+ call Random
cp $64
jr c, .asm_38c38
@@ -1388,7 +1388,7 @@
jr nc, .asm_38c81
.asm_38c78
- call RNG
+ call Random
cp $46
ret c
dec [hl]
@@ -1527,7 +1527,7 @@
cp $f
jr nc, .asm_38d0b
- call RNG
+ call Random
cp $64
ret nc
@@ -1536,7 +1536,7 @@
ret
.asm_38d0d
- call RNG
+ call Random
cp $64
ret c
dec [hl]
@@ -1700,7 +1700,7 @@
ret
.asm_38dc9
- call RNG
+ call Random
cp $19
ret c
@@ -1722,7 +1722,7 @@
pop hl
jr nc, .asm_38dee
- call RNG
+ call Random
cp 100
ret c
dec [hl]
@@ -1734,7 +1734,7 @@
ret nz
.asm_38df3
- call RNG
+ call Random
cp 20
ret c
inc [hl]
@@ -1961,7 +1961,7 @@
inc [hl]
.asm_38f14
- call RNG
+ call Random
cp 20
ret c
inc [hl]
@@ -1985,7 +1985,7 @@
cp GHOST
jr z, .asm_38f41
- call RNG
+ call Random
cp 20
ret c
inc [hl]
@@ -1992,7 +1992,7 @@
ret
.asm_38f41
- call RNG
+ call Random
cp 100
ret c
dec [hl]
@@ -2169,7 +2169,7 @@
cp 8
jr nc, .asm_39020
- call RNG
+ call Random
cp 200
ret nc
dec [hl]
@@ -2196,7 +2196,7 @@
ret
.asm_39032
- call RNG
+ call Random
cp 200
ret nc
dec [hl]
@@ -2558,7 +2558,7 @@
.asm_391ca
- call RNG
+ call Random
cp 100
jr c, .asm_391d2
dec [hl]
@@ -2634,7 +2634,7 @@
cp WEATHER_RAIN
ret nz
- call RNG
+ call Random
cp 25 ; 1/10
ret c
@@ -2657,7 +2657,7 @@
cp WEATHER_SUN
ret nz
- call RNG
+ call Random
cp 25 ; 1/10
ret c
@@ -3150,7 +3150,7 @@
pop hl
jr nc, .asm_39425
- call RNG
+ call Random
cp 230
ret nc
@@ -3274,7 +3274,7 @@
call AICheckEnemyMaxHP
jr c, .nextmove
- call RNG
+ call Random
cp 200 ; 1/5
jr c, .nextmove
@@ -3347,7 +3347,7 @@
Function_0x39521: ; 39521
- call RNG
+ call Random
cp 50 ; 1/5
ret
; 39527
@@ -3354,7 +3354,7 @@
Function_0x39527: ; 39527
- call RNG
+ call Random
cp $80 ; 1/2
ret
; 3952d
--- a/battle/effect_commands.asm
+++ b/battle/effect_commands.asm
@@ -154,7 +154,7 @@
; 'must recharge!'
ld hl, MustRechargeText
- call FarBattleTextBox
+ call StdBattleTextBox
call CantMove
jp Function0x34385
@@ -179,7 +179,7 @@
.WokeUp
; 'woke up!'
ld hl, WokeUpText
- call FarBattleTextBox
+ call StdBattleTextBox
call CantMove
call UpdateBattleMonInParty
@@ -195,7 +195,7 @@
.FastAsleep
; 'fast asleep!'
ld hl, FastAsleepText
- call FarBattleTextBox
+ call StdBattleTextBox
; Snore and Sleep Talk bypass sleep.
ld a, [CurPlayerMove]
@@ -221,7 +221,7 @@
; 'frozen solid!'
ld hl, FrozenSolidText
- call FarBattleTextBox
+ call StdBattleTextBox
call CantMove
jp Function0x34385
@@ -236,7 +236,7 @@
; 'flinched!'
ld hl, FlinchedText
- call FarBattleTextBox
+ call StdBattleTextBox
call CantMove
jp Function0x34385
@@ -256,7 +256,7 @@
; 'disabled no more!'
ld hl, DisabledNoMoreText
- call FarBattleTextBox
+ call StdBattleTextBox
.CheckConfused
@@ -272,7 +272,7 @@
; 'confused no more!'
ld hl, ConfusedNoMoreText
- call FarBattleTextBox
+ call StdBattleTextBox
jr .CheckAttract
@@ -280,7 +280,7 @@
.Confused
; 'confused!'
ld hl, IsConfusedText
- call FarBattleTextBox
+ call StdBattleTextBox
xor a
ld [$cfca], a
@@ -288,7 +288,7 @@
call FarPlayBattleAnimation
; 50% chance of hitting itself
- call FarBattleRNG
+ call BattleRandom
cp $80
jr nc, .CheckAttract
@@ -310,7 +310,7 @@
; 'in love with'
ld hl, InLoveWithText
- call FarBattleTextBox
+ call StdBattleTextBox
xor a
ld [$cfca], a
@@ -319,13 +319,13 @@
call FarPlayBattleAnimation
; 50% chance of infatuation
- call FarBattleRNG
+ call BattleRandom
cp $80
jr c, .CheckDisabledMove
; 'infatuation kept it from attacking!'
ld hl, InfatuationText
- call FarBattleTextBox
+ call StdBattleTextBox
call CantMove
jp Function0x34385
@@ -353,13 +353,13 @@
ret z
; 25% chance to be fully paralyzed
- call FarBattleRNG
+ call BattleRandom
cp $3f
ret nc
; 'fully paralyzed!'
ld hl, FullyParalyzedText
- call FarBattleTextBox
+ call StdBattleTextBox
call CantMove
jp Function0x34385
; 341f0
@@ -412,7 +412,7 @@
; 'must recharge!'
ld hl, MustRechargeText
- call FarBattleTextBox
+ call StdBattleTextBox
call CantMove
jp Function0x34385
@@ -429,7 +429,7 @@
; 'fast asleep!'
ld hl, FastAsleepText
- call FarBattleTextBox
+ call StdBattleTextBox
xor a
ld [$cfca], a
ld de, ANIM_SLEEP
@@ -440,7 +440,7 @@
.WokeUp
; 'woke up!'
ld hl, WokeUpText
- call FarBattleTextBox
+ call StdBattleTextBox
call CantMove
call UpdateEnemyMonInParty
ld hl, $6036
@@ -475,7 +475,7 @@
; 'frozen solid!'
ld hl, FrozenSolidText
- call FarBattleTextBox
+ call StdBattleTextBox
call CantMove
jp Function0x34385
@@ -489,7 +489,7 @@
; 'flinched!'
ld hl, FlinchedText
- call FarBattleTextBox
+ call StdBattleTextBox
call CantMove
jp Function0x34385
@@ -511,7 +511,7 @@
; 'disabled no more!'
ld hl, DisabledNoMoreText
- call FarBattleTextBox
+ call StdBattleTextBox
.CheckConfused
@@ -528,7 +528,7 @@
; 'confused no more!'
ld hl, ConfusedNoMoreText
- call FarBattleTextBox
+ call StdBattleTextBox
jr .CheckAttract
@@ -536,7 +536,7 @@
.Confused
; 'confused!'
ld hl, IsConfusedText
- call FarBattleTextBox
+ call StdBattleTextBox
xor a
ld [$cfca], a
@@ -544,7 +544,7 @@
call FarPlayBattleAnimation
; 50% chance of hitting itself
- call FarBattleRNG
+ call BattleRandom
cp $80
jr nc, .CheckAttract
@@ -555,7 +555,7 @@
; 'hurt itself in its confusion!'
ld hl, HurtItselfText
- call FarBattleTextBox
+ call StdBattleTextBox
call Function0x355dd
@@ -589,7 +589,7 @@
; 'in love with'
ld hl, InLoveWithText
- call FarBattleTextBox
+ call StdBattleTextBox
xor a
ld [$cfca], a
@@ -598,13 +598,13 @@
call FarPlayBattleAnimation
; 50% chance of infatuation
- call FarBattleRNG
+ call BattleRandom
cp $80
jr c, .CheckDisabledMove
; 'infatuation kept it from attacking!'
ld hl, InfatuationText
- call FarBattleTextBox
+ call StdBattleTextBox
call CantMove
jp Function0x34385
@@ -633,13 +633,13 @@
ret z
; 25% chance to be fully paralyzed
- call FarBattleRNG
+ call BattleRandom
cp $3f
ret nc
; 'fully paralyzed!'
ld hl, FullyParalyzedText
- call FarBattleTextBox
+ call StdBattleTextBox
call CantMove
@@ -668,7 +668,7 @@
; 'disabled!'
ld hl, DisabledMoveText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 343a5
@@ -676,7 +676,7 @@
; 'hurt itself in its confusion!'
ld hl, HurtItselfText
- call FarBattleTextBox
+ call StdBattleTextBox
xor a
ld [CriticalHit], a
@@ -808,7 +808,7 @@
; Random number from 0 to obedience level + monster level
.rand1
- call FarBattleRNG
+ call BattleRandom
swap a
cp b
jr nc, .rand1
@@ -826,7 +826,7 @@
; Another random number from 0 to obedience level + monster level
.rand2
- call FarBattleRNG
+ call BattleRandom
cp b
jr nc, .rand2
@@ -843,7 +843,7 @@
ld b, a
; The chance of napping is the difference out of 256.
- call FarBattleRNG
+ call BattleRandom
swap a
sub b
jr c, .Nap
@@ -854,7 +854,7 @@
; 'won't obey!'
ld hl, WontObeyText
- call FarBattleTextBox
+ call StdBattleTextBox
call HitConfusion
@@ -862,7 +862,7 @@
.Nap
- call FarBattleRNG
+ call BattleRandom
add a
swap a
and 7
@@ -876,7 +876,7 @@
.DoNothing
- call FarBattleRNG
+ call BattleRandom
and 3
; 'loafing around!'
@@ -898,7 +898,7 @@
ld hl, IgnoredOrdersText
- call FarBattleTextBox
+ call StdBattleTextBox
jp Function0x3450c
@@ -964,7 +964,7 @@
.RandomMove
- call FarBattleRNG
+ call BattleRandom
and 3
cp b
@@ -1043,7 +1043,7 @@
; 'ignored orders…sleeping!'
ld hl, IgnoredSleepingText
- call FarBattleTextBox
+ call StdBattleTextBox
call EndMoveEffect
@@ -1192,7 +1192,7 @@
; 'but no pp is left for the move'
ld hl, NoPPLeftText
- call FarBattleTextBox
+ call StdBattleTextBox
ld b, 1
ret
; 34602
@@ -1324,7 +1324,7 @@
ld hl, .Chances
ld b, 0
add hl, bc
- call FarBattleRNG
+ call BattleRandom
cp [hl]
ret nc
ld a, 1
@@ -2338,7 +2338,7 @@
; Multiply by 85-100%...
.loop
- call FarBattleRNG
+ call BattleRandom
rrca
cp $d9 ; 85%
jr c, .loop
@@ -2423,7 +2423,7 @@
cp $ff
jr z, .Hit
- call FarBattleRNG
+ call BattleRandom
cp b
jr nc, .Miss
@@ -2471,7 +2471,7 @@
; 'protecting itself!'
ld hl, ProtectingItselfText
- call FarBattleTextBox
+ call StdBattleTextBox
ld c, 40
call DelayFrames
@@ -2701,7 +2701,7 @@
ld hl, EnemyMoveEffectChance
.asm_34ee1
- call FarBattleRNG
+ call BattleRandom
cp [hl]
pop hl
ret c
@@ -2986,7 +2986,7 @@
cp HELD_FOCUS_BAND
ld b, $0
jr nz, .asm_3508b ; 3507a $f
- call FarBattleRNG
+ call BattleRandom
cp c
jr nc, .asm_3508b ; 35080 $9
call BattleCommand4b
@@ -3014,7 +3014,7 @@
dec a
jr nz, .asm_350ab ; 350a3 $6
ld hl, EnduredText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_350ab
call GetOpponentItem
@@ -3023,7 +3023,7 @@
call GetItemName
ld hl, HungOnText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_50bb
ld a, BATTLE_VARS_SUBSTATUS4_OPP
@@ -3105,7 +3105,7 @@
ld [hl], a
.asm_3513e
ld hl, CrashedText
- call FarBattleTextBox
+ call StdBattleTextBox
ld a, $1
ld [$c689], a
call Function0x37e36
@@ -3123,7 +3123,7 @@
ld h, d
ld l, e
.asm_35162
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 35165
@@ -3157,7 +3157,7 @@
ld a, [hli]
ld h, [hl]
ld l, a
- call FarBattleTextBox
+ call StdBattleTextBox
xor a
ld [CriticalHit], a
@@ -3211,7 +3211,7 @@
jr nc, .print
ld hl, NotVeryEffectiveText ; 'not very effective'
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 351c0
@@ -3237,7 +3237,7 @@
jr z, .asm_35231
ld hl, TookDownWithItText
- call FarBattleTextBox
+ call StdBattleTextBox
ld a, [hBattleTurn]
and a
@@ -3332,7 +3332,7 @@
call SwitchTurn
ld hl, RageBuildingText
- call FarBattleTextBox
+ call StdBattleTextBox
jp SwitchTurn
; 3527b
@@ -3822,7 +3822,7 @@
ld a, $1
ld [$c72d], a
ld hl, BeatUpAttackText
- call FarBattleTextBox
+ call StdBattleTextBox
ld a, [EnemyMonSpecies]
ld [CurSpecies], a
call $3856
@@ -3923,11 +3923,11 @@
ld [$d265], a
call $343b
ld hl, BeatUpAttackText
- call FarBattleTextBox
+ call StdBattleTextBox
jp EnemyAttackDamage
.asm_3557d
ld hl, BeatUpAttackText
- call FarBattleTextBox
+ call StdBattleTextBox
ld a, [BattleMonSpecies]
ld [CurSpecies], a
call GetBaseData
@@ -4332,7 +4332,7 @@
add b
ld b, a
.asm_3575d
- call FarBattleRNG
+ call BattleRandom
and a
jr z, .asm_3575d ; 35761 $fa
cp b
@@ -4555,7 +4555,7 @@
bit 4, [hl]
jp nz, Function0x35923
set 4, [hl]
- call FarBattleRNG
+ call BattleRandom
and $3
inc a
inc a
@@ -4626,7 +4626,7 @@
call Function0x37e01
ld hl, GotAnEncoreText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 35923
@@ -4673,7 +4673,7 @@
rst FarCall
ld hl, SharedPainText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_3597d
ld a, [hld]
@@ -4782,7 +4782,7 @@
call SwitchTurn
.asm_35a13
- call FarBattleRNG
+ call BattleRandom
and $1f
cp $a
jr c, .asm_35a24 ; 35a1a $8
@@ -4815,7 +4815,7 @@
ld a, $29
call Predef
ld hl, $5452
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_35a50
jp Function0x37354
; 35a53
@@ -4835,7 +4835,7 @@
call Function0x37e01
ld hl, TookAimText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_35a6e
call Function0x37e77
@@ -4938,7 +4938,7 @@
call Function0x37e01
ld hl, SketchedText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_35b10
call Function0x37e77
@@ -5005,7 +5005,7 @@
dec hl
.asm_35b62
push hl
- call FarBattleRNG
+ call BattleRandom
and $3
ld c, a
ld b, $0
@@ -5131,7 +5131,7 @@
set 6, [hl]
call Function0x37e01
ld hl, DestinyBondEffectText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 35c0f
@@ -5173,7 +5173,7 @@
jr z, .asm_35c91 ; 35c46 $49
push bc
call GetMoveName
- call FarBattleRNG
+ call BattleRandom
and $3
inc a
inc a
@@ -5216,7 +5216,7 @@
ld a, d
ld [$d265], a
ld hl, SpiteEffectText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_35c91
jp PrintDidntAffect2
; 35c94
@@ -5294,7 +5294,7 @@
call Function0x37e01
ld hl, BellChimedText
- call FarBattleTextBox
+ call StdBattleTextBox
ld a, [hBattleTurn]
and a
@@ -5452,7 +5452,7 @@
Function0x35de0: ; 35de0
ld hl, SubTookDamageText
- call FarBattleTextBox
+ call StdBattleTextBox
ld de, $c6e0
ld a, [hBattleTurn]
@@ -5479,7 +5479,7 @@
res 4, [hl]
ld hl, SubFadedText
- call FarBattleTextBox
+ call StdBattleTextBox
call SwitchTurn
call BattleCommanda7
@@ -5576,7 +5576,7 @@
ld b, $3
.asm_35ea4
- call FarBattleRNG
+ call BattleRandom
and b
jr z, .asm_35ea4
cp 7
@@ -5587,7 +5587,7 @@
call RefreshBattleHuds
ld hl, FellAsleepText
- call FarBattleTextBox
+ call StdBattleTextBox
ld a, $f
ld hl, $5de9
@@ -5600,7 +5600,7 @@
push hl
call Function0x37e77
pop hl
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 35ece
@@ -5625,7 +5625,7 @@
bit 5, a
jr nz, .asm_35eec
- call FarBattleRNG
+ call BattleRandom
cp $40
ret c
@@ -5664,7 +5664,7 @@
call RefreshBattleHuds
ld hl, WasPoisonedText
- call FarBattleTextBox
+ call StdBattleTextBox
ld a, $f
ld hl, $5de9
@@ -5715,7 +5715,7 @@
ld a, [PlayerSubStatus5]
bit 5, a
jr nz, .asm_35f89 ; 35f80 $7
- call FarBattleRNG
+ call BattleRandom
cp $40
jr c, .asm_35fb8 ; 35f87 $2f
.asm_35f89
@@ -5729,7 +5729,7 @@
call Function0x35fc0
ld hl, WasPoisonedText
- call FarBattleTextBox
+ call StdBattleTextBox
jr .asm_35fb1 ; 35fa2 $d
.asm_35fa4
@@ -5739,7 +5739,7 @@
call Function0x35fc0
ld hl, BadlyPoisonedText
- call FarBattleTextBox
+ call StdBattleTextBox
.asm_35fb1
ld a, $f
@@ -5751,7 +5751,7 @@
push hl
call Function0x37e77
pop hl
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 35fc0
@@ -5807,7 +5807,7 @@
; draintarget
call Function0x36011
ld hl, SuckedHealthText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 36008
@@ -5815,7 +5815,7 @@
; eatdream
call Function0x36011
ld hl, DreamEatenText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 36011
@@ -5938,7 +5938,7 @@
call RefreshBattleHuds
ld hl, WasBurnedText
- call FarBattleTextBox
+ call StdBattleTextBox
ld a, $f
ld hl, $5de9
@@ -5970,7 +5970,7 @@
call UpdateOpponentInParty
ld hl, DefrostedOpponentText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 36102
@@ -6011,7 +6011,7 @@
call RefreshBattleHuds
ld hl, WasFrozenText
- call FarBattleTextBox
+ call StdBattleTextBox
ld a, $f
ld hl, $5de9
@@ -6375,7 +6375,7 @@
cp EFFECT_ACCURACY_DOWN_HIT
jr z, .DidntMiss
- call FarBattleRNG
+ call BattleRandom
cp $40
jr c, .Failed
@@ -6596,7 +6596,7 @@
inc b
call GetStatName
ld hl, WontRiseAnymoreText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 3646a
@@ -6612,7 +6612,7 @@
jp z, TryPrintButItFailed
dec a
ld hl, ProtectedByMistText
- jp z, FarBattleTextBox
+ jp z, StdBattleTextBox
ld a, [LoweredStat]
and $f
ld b, a
@@ -6619,7 +6619,7 @@
inc b
call GetStatName
ld hl, WontDropAnymoreText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 3648f
@@ -6789,7 +6789,7 @@
; 1/3 chance of each status
.loop
- call FarBattleRNG
+ call BattleRandom
swap a
and 3
jr z, .loop
@@ -6972,7 +6972,7 @@
res 0, [hl]
ld hl, UnleashedEnergyText
- call FarBattleTextBox
+ call StdBattleTextBox
ld a, BATTLE_VARS_MOVE_POWER
call GetBattleVarPair
@@ -7018,7 +7018,7 @@
.asm_366dc
ld hl, StoringEnergyText
- call FarBattleTextBox
+ call StdBattleTextBox
jp EndMoveEffect
; 366e5
@@ -7043,7 +7043,7 @@
ld [de], a
ld [PlayerMoveEffect], a
ld [EnemyMoveEffect], a
- call FarBattleRNG
+ call BattleRandom
and $1
inc a
inc a
@@ -7080,7 +7080,7 @@
pop af
jr nz, .asm_3674c ; 3673f $b
set 7, [hl]
- call FarBattleRNG
+ call BattleRandom
and $1
inc a
inc a
@@ -7110,7 +7110,7 @@
ld a, BATTLE_VARS_SUBSTATUS3
call GetBattleVarPair
set 1, [hl]
- call FarBattleRNG
+ call BattleRandom
and $1
inc a
ld [de], a
@@ -7152,7 +7152,7 @@
ld c, a
inc c
.asm_367ac
- call FarBattleRNG
+ call BattleRandom
cp c
jr nc, .asm_367ac ; 367b0 $fa
srl b
@@ -7177,7 +7177,7 @@
ld c, a
inc c
.asm_367d2
- call FarBattleRNG
+ call BattleRandom
cp c
jr nc, .asm_367d2 ; 367d6 $fa
srl b
@@ -7199,7 +7199,7 @@
call Function0x36804
ld hl, FledFromBattleText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 36804
@@ -7242,7 +7242,7 @@
ld c, a
inc c
.asm_36845
- call FarBattleRNG
+ call BattleRandom
cp c
jr nc, .asm_36845 ; 36849 $fa
srl b
@@ -7282,7 +7282,7 @@
ld a, [CurOTMon]
ld c, a
.asm_3689a
- call FarBattleRNG
+ call BattleRandom
and $7
cp b
jr nc, .asm_3689a ; 368a0 $f8
@@ -7305,7 +7305,7 @@
rst FarCall
ld hl, DraggedOutText
- call FarBattleTextBox
+ call StdBattleTextBox
ld hl, $5c23
jp CallBankF
@@ -7332,7 +7332,7 @@
ld c, a
inc c
.asm_368e6
- call FarBattleRNG
+ call BattleRandom
cp c
jr nc, .asm_368e6
@@ -7378,7 +7378,7 @@
ld a, [CurBattleMon]
ld c, a
.asm_3693a
- call FarBattleRNG
+ call BattleRandom
and $7
cp b
jr nc, .asm_3693a
@@ -7402,7 +7402,7 @@
call CallBankF
ld hl, DraggedOutText
- call FarBattleTextBox
+ call StdBattleTextBox
ld hl, $5c23
jp CallBankF
@@ -7428,7 +7428,7 @@
jr z, .asm_36991
ld hl, BlownAwayText
.asm_36991
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 36994
@@ -7496,7 +7496,7 @@
cp EFFECT_TRIPLE_KICK
jr nz, .asm_36a2b
.asm_369ec
- call FarBattleRNG
+ call BattleRandom
and $3
jr z, .asm_369ec
dec a
@@ -7530,11 +7530,11 @@
call BattleCommanda8
jp EndMoveEffect
.asm_36a2b
- call FarBattleRNG
+ call BattleRandom
and $3
cp $2
jr c, .asm_36a39 ; 36a32 $5
- call FarBattleRNG
+ call BattleRandom
and $3
.asm_36a39
inc a
@@ -7569,7 +7569,7 @@
call CleanGetBattleVarPair
cp EFFECT_BEAT_UP
jr z, .asm_36a67
- call FarBattleTextBox
+ call StdBattleTextBox
.asm_36a67
pop bc
@@ -7670,7 +7670,7 @@
ld d, h
ld e, l
call GetUserItem
- call FarBattleRNG
+ call BattleRandom
cp c
ret nc
call EndRechargeOpp
@@ -7767,7 +7767,7 @@
ld hl, IgnoredOrders2Text
ld a, [AlreadyDisobeyed]
and a
- call nz, FarBattleTextBox
+ call nz, StdBattleTextBox
call BattleCommand0a
xor a
@@ -7917,7 +7917,7 @@
call CleanGetBattleVarPair
bit 4, a
ret nz
- call FarBattleRNG
+ call BattleRandom
and 3
inc a
inc a
@@ -7941,7 +7941,7 @@
ld a, [hli]
ld h, [hl]
ld l, a
- jp FarBattleTextBox
+ jp StdBattleTextBox
.Traps
dbw BIND, UsedBindText ; 'used BIND on'
@@ -7962,7 +7962,7 @@
set 1, [hl]
call Function0x37e01
ld hl, MistText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_36c92
call Function0x37e77
jp PrintButItFailed
@@ -7979,7 +7979,7 @@
set 2, [hl]
call Function0x37e01
ld hl, GettingPumpedText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_36cac
call Function0x37e77
jp PrintButItFailed
@@ -8048,7 +8048,7 @@
call Predef
call RefreshBattleHuds
ld hl, RecoilText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 36d1d
@@ -8085,7 +8085,7 @@
call GetItemName
call Function0x37e77
ld hl, ProtectedByText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_36d53
ld a, BATTLE_VARS_SUBSTATUS3_OPP
@@ -8094,7 +8094,7 @@
jr z, .asm_36d65
call Function0x37e77
ld hl, AlreadyConfusedText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_36d65
call CheckSubstituteOpp
@@ -8116,7 +8116,7 @@
.asm_36d7b
set 7, [hl]
- call FarBattleRNG
+ call BattleRandom
and 3
inc a
inc a
@@ -8137,7 +8137,7 @@
call Function0x37e54
ld hl, BecameConfusedText
- call FarBattleTextBox
+ call StdBattleTextBox
call GetOpponentItem
ld a, b
@@ -8182,7 +8182,7 @@
call GetItemName
call Function0x37e77
ld hl, ProtectedByText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_36def
ld a, [hBattleTurn]
and a
@@ -8196,7 +8196,7 @@
ld a, [PlayerSubStatus5]
bit 5, a
jr nz, .asm_36e0e ; 36e05 $7
- call FarBattleRNG
+ call BattleRandom
cp $40
jr c, .asm_36e52 ; 36e0c $44
.asm_36e0e
@@ -8227,7 +8227,7 @@
.asm_36e49
call Function0x37e77
ld hl, AlreadyParalyzedText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_36e52
jp PrintDidntAffect2
.asm_36e55
@@ -8338,7 +8338,7 @@
call BattleCommanda6
.asm_36eeb
ld hl, MadeSubstituteText
- call FarBattleTextBox
+ call StdBattleTextBox
jp RefreshBattleHuds
.asm_36ef4
call Function0x34548
@@ -8350,7 +8350,7 @@
call nz, BattleCommand0c
ld hl, TooWeakSubText
.asm_36f08
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 36f0b
BattleCommand32: ; 36f0b
@@ -8463,7 +8463,7 @@
call GetMoveName
call Function0x37e01
ld hl, LearnedMoveText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_36f9a
jp Function0x37357
; 36f9d
@@ -8496,7 +8496,7 @@
set 7, [hl]
call Function0x37e01
ld hl, WasSeededText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_36fd2
call Function0x37e77
jp PrintDoesntAffect
@@ -8503,7 +8503,7 @@
.asm_36fd8
call Function0x37e77
ld hl, EvadedText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 36fe1
@@ -8558,7 +8558,7 @@
and a
jr z, .asm_37059 ; 3702c $2b
.asm_3702e
- call FarBattleRNG
+ call BattleRandom
and $7
jr z, .asm_3702e ; 37033 $f9
inc a
@@ -8579,7 +8579,7 @@
ld [$d265], a
call GetMoveName
ld hl, WasDisabledText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_37059
jp Function0x37354
; 3705c
@@ -8608,7 +8608,7 @@
inc [hl]
.asm_37079
ld hl, CoinsScatteredText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 3707f
@@ -8677,7 +8677,7 @@
call Function0x37e77
jp PrintButItFailed
.asm_370d9
- call FarBattleRNG
+ call BattleRandom
and $3
ld c, a
ld b, $0
@@ -8706,7 +8706,7 @@
rst FarCall
call Function0x37e01
ld hl, TransformedTypeText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 3710e
@@ -8733,7 +8733,7 @@
call Function0x37e01
ld hl, EliminatedStatsText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.Fill
ld b, PlayerStatLevelsEnd - PlayerStatLevels
@@ -8787,7 +8787,7 @@
jr z, .asm_37186 ; 37181 $3
ld hl, RestedText
.asm_37186
- call FarBattleTextBox
+ call StdBattleTextBox
ld a, [hBattleTurn]
and a
jr nz, .asm_37193 ; 3718c $5
@@ -8816,12 +8816,12 @@
call UpdateUserInParty
call RefreshBattleHuds
ld hl, RegainedHealthText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_371c4
call Function0x37e77
ld hl, HPIsFullText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 371cd
@@ -8958,7 +8958,7 @@
ld a, $a4
call nz, Function0x37e44
ld hl, TransformedText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 372c6
@@ -9056,7 +9056,7 @@
.asm_37331
call Function0x37e01
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_37337
call Function0x37e77
@@ -9067,7 +9067,7 @@
PrintDoesntAffect: ; 3733d
; 'it doesn't affect'
ld hl, DoesntAffectText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 37343
@@ -9074,7 +9074,7 @@
PrintNothingHappened: ; 37343
; 'but nothing happened!'
ld hl, NothingHappenedText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 37349
@@ -9090,7 +9090,7 @@
PrintButItFailed: ; 3734e
; 'but it failed!'
ld hl, ButItFailedText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 37354
@@ -9109,7 +9109,7 @@
PrintDidntAffect: ; 37360
; 'it didn't affect'
ld hl, DidntAffect1Text
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 37366
@@ -9124,7 +9124,7 @@
PrintParalyze: ; 37372
; 'paralyzed! maybe it can't attack!'
ld hl, ParalyzedText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 37378
@@ -9189,7 +9189,7 @@
.asm_373de
call Function0x37e77
ld hl, MirrorMoveFailedText
- call FarBattleTextBox
+ call StdBattleTextBox
jp EndMoveEffect
.asm_373ea
ld a, b
@@ -9235,7 +9235,7 @@
call Function0x37e36
.GetMove
- call FarBattleRNG
+ call BattleRandom
; No invalid moves.
cp BEAT_UP + 1
@@ -9391,7 +9391,7 @@
.asm_374f8
call GetItemName
ld hl, StoleText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_37501
ld a, 1
@@ -9422,7 +9422,7 @@
set 7, [hl]
call Function0x37e01
ld hl, CantEscapeNowText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_37530
call Function0x37e77
jp PrintButItFailed
@@ -9447,7 +9447,7 @@
set 0, [hl]
call Function0x37e01
ld hl, StartedNightmareText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_3755d
call Function0x37e77
jp PrintButItFailed
@@ -9475,7 +9475,7 @@
.asm_3757f
call RefreshBattleHuds
ld hl, WasDefrostedText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 37588
@@ -9536,7 +9536,7 @@
call CallBankF
call UpdateUserInParty
ld hl, PutACurseText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_37604
call Function0x37e77
jp PrintButItFailed
@@ -9545,7 +9545,7 @@
call GetStatName
call Function0x37e77
ld hl, WontRiseAnymoreText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 37618
@@ -9559,7 +9559,7 @@
set 2, [hl]
call Function0x37e01
ld hl, ProtectedItselfText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 3762c
@@ -9596,7 +9596,7 @@
jr .asm_37665
.asm_37656
- call FarBattleRNG
+ call BattleRandom
and a
jr z, .asm_37656
@@ -9631,7 +9631,7 @@
set SUBSTATUS_ENDURE, [hl]
call Function0x37e01
ld hl, BracedItselfText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 37683
@@ -9651,7 +9651,7 @@
set 0, [hl]
call Function0x37e01
ld hl, SpikesText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.failed
jp Function0x37354
@@ -9673,7 +9673,7 @@
set SUBSTATUS_IDENTIFIED, [hl]
call Function0x37e01
ld hl, IdentifiedText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_376bf
jp Function0x37354
; 376c2
@@ -9706,7 +9706,7 @@
.asm_376e9
call Function0x37e01
ld hl, StartPerishText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_376f2
call Function0x37e77
jp PrintButItFailed
@@ -9725,7 +9725,7 @@
ld [WeatherCount], a
call Function0x37e01
ld hl, SandstormBrewedText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_37712
call Function0x37e77
jp PrintButItFailed
@@ -9911,7 +9911,7 @@
; 'fell in love!'
ld hl, FellInLoveText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_377f2
jp Function0x37354
@@ -10029,7 +10029,7 @@
and a
jp nz, Function0x37e77
push bc
- call FarBattleRNG
+ call BattleRandom
ld b, a
ld hl, .table_37907
ld c, 0
@@ -10071,7 +10071,7 @@
call CallBankF
call SwitchTurn
ld hl, RegainedHealthText
- call FarBattleTextBox
+ call StdBattleTextBox
call SwitchTurn
call UpdateOpponentInParty
jr .asm_37904 ; 378f1 $11
@@ -10081,7 +10081,7 @@
jr nc, .asm_37904 ; 378f9 $9
call Function0x37e77
ld hl, RefusedGiftText
- call FarBattleTextBox
+ call StdBattleTextBox
.asm_37904
jp EndMoveEffect
@@ -10141,7 +10141,7 @@
ld [de], a
call Function0x37e01
ld hl, CoveredByVeilText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_3795c
call Function0x37e77
jp PrintButItFailed
@@ -10177,7 +10177,7 @@
ld [AttackMissed], a
call BattleCommandaa
ld hl, SafeguardProtectText
- call FarBattleTextBox
+ call StdBattleTextBox
jp EndMoveEffect
; 37991
@@ -10186,7 +10186,7 @@
; getmagnitude
push bc
- call FarBattleRNG
+ call BattleRandom
ld b, a
ld hl, .Magnitudes
.asm_37999
@@ -10204,7 +10204,7 @@
ld [$d265], a
call BattleCommandaa
ld hl, MagnitudeText
- call FarBattleTextBox
+ call StdBattleTextBox
pop de
pop bc
ret
@@ -10485,7 +10485,7 @@
jr z, .asm_37b4a ; 37b40 $8
res 7, [hl]
ld hl, ShedLeechSeedText
- call FarBattleTextBox
+ call StdBattleTextBox
.asm_37b4a
ld hl, PlayerScreens
ld de, $c730
@@ -10500,7 +10500,7 @@
res 0, [hl]
ld hl, BlewSpikesText
push de
- call FarBattleTextBox
+ call StdBattleTextBox
pop de
.asm_37b69
ld a, [de]
@@ -10509,7 +10509,7 @@
xor a
ld [de], a
ld hl, ReleasedByText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 37b74
@@ -10600,7 +10600,7 @@
; 'regained health!'
ld hl, RegainedHealthText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.Full
call Function0x37e77
@@ -10607,7 +10607,7 @@
; 'hp is full!'
ld hl, HPIsFullText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.Multipliers
dw GetEighthMaxHP
@@ -10636,7 +10636,7 @@
ld [WeatherCount], a
call Function0x37e01
ld hl, DownpourText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 37c07
@@ -10648,7 +10648,7 @@
ld [WeatherCount], a
call Function0x37e01
ld hl, SunGotBrightText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 37c1a
@@ -10685,7 +10685,7 @@
jr nz, .asm_37c41 ; 37c47 $f8
ld hl, BellyDrumText
- jp FarBattleTextBox
+ jp StdBattleTextBox
.asm_37c4f
call Function0x37e77
jp PrintButItFailed
@@ -10735,7 +10735,7 @@
.asm_37c8c
call Function0x37e01
ld hl, CopiedStatsText
- jp FarBattleTextBox
+ jp StdBattleTextBox
; 37c95
@@ -10884,7 +10884,7 @@
call BattleCommand0a
call BattleCommandaa
ld hl, ForesawAttackText
- call FarBattleTextBox
+ call StdBattleTextBox
call BattleCommand0c
ld de, $c727
ld a, [hBattleTurn]
--- a/constants.asm
+++ b/constants.asm
@@ -13,6 +13,8 @@
INCLUDE "constants/item_constants.asm"
INCLUDE "constants/trainer_constants.asm"
INCLUDE "constants/script_constants.asm"
+INCLUDE "constants/event_flags.asm"
+INCLUDE "constants/engine_flags.asm"
INCLUDE "constants/music_constants.asm"
@@ -231,6 +233,7 @@
PREDEF_UPDATE_PLAYER_HUD EQU $12
PREDEF_FILL_BOX EQU $13
PREDEF_UPDATE_ENEMY_HUD EQU $15
+PREDEF_START_BATTLE EQU $16
PREDEF_FILL_IN_EXP_BAR EQU $17
PREDEF_FILLMOVES EQU $1B
PREDEF_GET_GENDER EQU $24
@@ -243,6 +246,7 @@
PREDEF_GET_UNOWN_LETTER EQU $2D
PREDEF_LOAD_SGB_LAYOUT EQU $31
PREDEF_CHECK_CONTEST_MON EQU $33
+PREDEF_BATTLE_TRANSITION EQU $34
PREDEF_PARTYMON_ITEM_NAME EQU $3B
PREDEF_DECOMPRESS EQU $40
--- /dev/null
+++ b/constants/engine_flags.asm
@@ -1,0 +1,163 @@
+ENGINE_RADIO_CARD EQU $00
+ENGINE_MAP_CARD EQU $01
+ENGINE_PHONE_CARD EQU $02
+ENGINE_EXPN_CARD EQU $03
+ENGINE_POKEGEAR EQU $04
+ENGINE_DAYCARE_MONS_ARE_COMPATIBLE EQU $05
+ENGINE_DAYCARE_MAN_HAS_MON EQU $06
+ENGINE_DAYCARE_LADY_HAS_MON EQU $07
+ENGINE_MOM_SAVING_MONEY EQU $08
+ENGINE_DST EQU $09
+ENGINE_0A EQU $0a
+ENGINE_POKEDEX EQU $0b
+ENGINE_UNOWN_DEX EQU $0c
+ENGINE_POKERUS EQU $0d
+ENGINE_ROCKET_SIGNAL_ON_CH20 EQU $0e
+ENGINE_CREDITS_SKIP EQU $0f
+ENGINE_BUG_CONTEST_ON EQU $10
+ENGINE_BUG_CONTEST_TIMER EQU $11
+ENGINE_ROCKETS_IN_RADIO_TOWER EQU $12
+ENGINE_BIKE_SHOP_CALL_ENABLED EQU $13
+ENGINE_14 EQU $14
+ENGINE_GIVE_POKERUS EQU $15
+ENGINE_16 EQU $16
+ENGINE_ROCKETS_IN_MAHOGANY EQU $17
+ENGINE_STRENGTH_ACTIVE EQU $18
+ENGINE_ALWAYS_ON_BIKE EQU $19
+ENGINE_DOWNHILL EQU $1a
+ENGINE_ZEPHYRBADGE EQU $1b
+ENGINE_HIVEBADGE EQU $1c
+ENGINE_PLAINBADGE EQU $1d
+ENGINE_FOGBADGE EQU $1e
+ENGINE_MINERALBADGE EQU $1f
+ENGINE_STORMBADGE EQU $20
+ENGINE_GLACIERBADGE EQU $21
+ENGINE_RISINGBADGE EQU $22
+ENGINE_BOULDERBADGE EQU $23
+ENGINE_CASCADEBADGE EQU $24
+ENGINE_THUNDERBADGE EQU $25
+ENGINE_RAINBOWBADGE EQU $26
+ENGINE_SOULBADGE EQU $27
+ENGINE_MARSHBADGE EQU $28
+ENGINE_VOLCANOBADGE EQU $29
+ENGINE_EARTHBADGE EQU $2a
+ENGINE_UNLOCKED_UNOWNS_1 EQU $2b
+ENGINE_UNLOCKED_UNOWNS_2 EQU $2c
+ENGINE_UNLOCKED_UNOWNS_3 EQU $2d
+ENGINE_UNLOCKED_UNOWNS_4 EQU $2e
+ENGINE_UNLOCKED_UNOWNS_5 EQU $2f
+ENGINE_UNLOCKED_UNOWNS_6 EQU $30
+ENGINE_UNLOCKED_UNOWNS_7 EQU $31
+ENGINE_UNLOCKED_UNOWNS_8 EQU $32
+ENGINE_FLYPOINT_KRISS_HOUSE EQU $33
+ENGINE_FLYPOINT_VIRIDIAN_POKECENTER EQU $34
+ENGINE_FLYPOINT_PALLET EQU $35
+ENGINE_FLYPOINT_VIRIDIAN EQU $36
+ENGINE_FLYPOINT_PEWTER EQU $37
+ENGINE_FLYPOINT_CERULEAN EQU $38
+ENGINE_FLYPOINT_ROCK_TUNNEL EQU $39
+ENGINE_FLYPOINT_VERMILION EQU $3a
+ENGINE_FLYPOINT_LAVENDER EQU $3b
+ENGINE_FLYPOINT_SAFFRON EQU $3c
+ENGINE_FLYPOINT_CELADON EQU $3d
+ENGINE_FLYPOINT_FUCHSIA EQU $3e
+ENGINE_FLYPOINT_CINNABAR EQU $3f
+ENGINE_FLYPOINT_INDIGO_PLATEAU EQU $40
+ENGINE_FLYPOINT_NEW_BARK EQU $41
+ENGINE_FLYPOINT_CHERRYGROVE EQU $42
+ENGINE_FLYPOINT_VIOLET EQU $43
+ENGINE_FLYPOINT_AZALEA EQU $44
+ENGINE_FLYPOINT_CIANWOOD EQU $45
+ENGINE_FLYPOINT_GOLDENROD EQU $46
+ENGINE_FLYPOINT_OLIVINE EQU $47
+ENGINE_FLYPOINT_ECRUTEAK EQU $48
+ENGINE_FLYPOINT_MAHOGANY EQU $49
+ENGINE_FLYPOINT_LAKE_OF_RAGE EQU $4a
+ENGINE_FLYPOINT_BLACKTHORN EQU $4b
+ENGINE_FLYPOINT_SILVER_CAVE EQU $4c
+ENGINE_FLYPOINT_UNUSED EQU $4d
+ENGINE_LUCKY_NUMBER_SHOW EQU $4e
+ENGINE_4F EQU $4f
+ENGINE_KURT_MAKING_BALLS EQU $50
+ENGINE_51 EQU $51
+ENGINE_SPECIAL_WILDDATA EQU $52
+ENGINE_TIME_CAPSULE EQU $53
+ENGINE_ALL_FRUIT_TREES EQU $54
+ENGINE_SHUCKLE_GIVEN EQU $55
+ENGINE_GOLDENROD_UNDERGROUND_MERCHANT_CLOSED EQU $56
+ENGINE_FOUGHT_IN_TRAINER_HALL_TODAY EQU $57
+ENGINE_MT_MOON_SQUARE_CLEFAIRY EQU $58
+ENGINE_UNION_CAVE_LAPRAS EQU $59
+ENGINE_GOLDENROD_UNDERGROUND_GOT_HAIRCUT EQU $5a
+ENGINE_GOLDENROD_MALL_5F_HAPPINESS_EVENT EQU $5b
+ENGINE_TEA_IN_BLUES_HOUSE EQU $5c
+ENGINE_INDIGO_PLATEAU_RIVAL_FIGHT EQU $5d
+ENGINE_5E EQU $5e
+ENGINE_5F EQU $5f
+ENGINE_60 EQU $60
+ENGINE_GOLDENROD_DEPT_STORE_SALE_IS_ON EQU $61
+ENGINE_62 EQU $62
+ENGINE_PLAYER_IS_FEMALE EQU $63
+ENGINE_HAVE_EXAMINED_GS_BALL EQU $64
+ENGINE_JACK EQU $65
+ENGINE_HUEY EQU $66
+ENGINE_GAVEN EQU $67
+ENGINE_BETH EQU $68
+ENGINE_JOSE EQU $69
+ENGINE_REENA EQU $6a
+ENGINE_JOEY EQU $6b
+ENGINE_WADE EQU $6c
+ENGINE_RALPH EQU $6d
+ENGINE_LIZ EQU $6e
+ENGINE_ANTHONY EQU $6f
+ENGINE_TODD EQU $70
+ENGINE_GINA EQU $71
+ENGINE_ARNIE EQU $72
+ENGINE_ALAN EQU $73
+ENGINE_DANA EQU $74
+ENGINE_CHAD EQU $75
+ENGINE_TULLY EQU $76
+ENGINE_BRENT EQU $77
+ENGINE_TIFFANY EQU $78
+ENGINE_VANCE EQU $79
+ENGINE_WILTON EQU $7a
+ENGINE_PARRY EQU $7b
+ENGINE_ERIN EQU $7c
+ENGINE_BEVERLY_HAS_NUGGET EQU $7d
+ENGINE_JOSE_HAS_STAR_PIECE EQU $7e
+ENGINE_WADE_HAS_ITEM EQU $7f
+ENGINE_GINA_HAS_LEAF_STONE EQU $80
+ENGINE_ALAN_HAS_FIRE_STONE EQU $81
+ENGINE_LIZ_HAS_THUNDERSTONE EQU $82
+ENGINE_DEREK_HAS_NUGGET EQU $83
+ENGINE_TULLY_HAS_WATER_STONE EQU $84
+ENGINE_TIFFANY_HAS_PINK_BOW EQU $85
+ENGINE_WILTON_HAS_ITEM EQU $86
+ENGINE_87 EQU $87
+ENGINE_88 EQU $88
+ENGINE_89 EQU $89
+ENGINE_8A EQU $8a
+ENGINE_8B EQU $8b
+ENGINE_8C EQU $8c
+ENGINE_8D EQU $8d
+ENGINE_8E EQU $8e
+ENGINE_8F EQU $8f
+ENGINE_90 EQU $90
+ENGINE_91 EQU $91
+ENGINE_92 EQU $92
+ENGINE_93 EQU $93
+ENGINE_94 EQU $94
+ENGINE_95 EQU $95
+ENGINE_96 EQU $96
+ENGINE_97 EQU $97
+ENGINE_98 EQU $98
+ENGINE_99 EQU $99
+ENGINE_9A EQU $9a
+ENGINE_9B EQU $9b
+ENGINE_9C EQU $9c
+ENGINE_9D EQU $9d
+ENGINE_9E EQU $9e
+ENGINE_KRIS_IN_CABLE_CLUB EQU $9f
+ENGINE_DUNSPARCE_SWARM EQU $a0
+ENGINE_YANMA_SWARM EQU $a1
+
--- /dev/null
+++ b/constants/event_flags.asm
@@ -1,0 +1,6 @@
+EVENT_FOUGHT_SUDOWOODO EQU $02a
+EVENT_FOUGHT_HO_OH EQU $317
+EVENT_FOUGHT_LUGIA EQU $318
+EVENT_FOUGHT_SUICUNE EQU $335
+EVENT_FOUGHT_SNORLAX EQU $750
+
--- a/constants/pokemon_constants.asm
+++ b/constants/pokemon_constants.asm
@@ -1,3 +1,5 @@
+NUM_POKEMON EQU 251
+
BULBASAUR EQU 1
IVYSAUR EQU 2
VENUSAUR EQU 3
--- a/engine/bittable2.asm
+++ /dev/null
@@ -1,198 +1,0 @@
-; All locations are in WRAM bank 1.
-
- ; location, bit
-
- ; pokegear
- dwb $d957, %00000010 ; radio card
- dwb $d957, %00000001 ; map card
- dwb $d957, %00000100 ; phone card
- dwb $d957, %00001000 ; expn card
- dwb $d957, %10000000 ; on/off
-
- ; DaycareMan, %10000000 ; daycare 1 on
- dwb DaycareMan, %01000000 ; monster 1 and 2 are compatible
- ; DaycareMan, %00100000 ; egg is ready
- dwb DaycareMan, %00000001 ; monster 1 in daycare
-
- ; DaycareLady, %10000000 = daycare 2 on
- dwb DaycareLady, %00000001 ; monster 2 in daycare
-
- dwb $d854, %00000001 ; mom saving money
- dwb $d854, %10000000 ; dst
-
- dwb $dc39, %00000001
-
- dwb $d84c, %00000001 ; pokedex
- dwb $d84c, %00000010 ; unown dex
- dwb $d84c, %00001000 ; pokerus
- dwb $d84c, %00010000 ; rocket signal on ch20
- dwb $d84c, %01000000 ; credits skip
- dwb $d84c, %10000000 ; bug contest on
- dwb $d84d, %00000100 ; bug contest timer
- dwb $d84d, %00000010 ; rockets in radio tower
- dwb $d84d, %00000001 ; bike shop call enabled (1024 bike steps reqd)
- dwb $d84d, %00010000
- dwb $d84d, %00100000 ; give pokerus; berry -> berry juice when trading?
- dwb $d84d, %01000000
- dwb $d84d, %10000000 ; rockets in mahogany
-
- dwb $dbf5, %00000001 ; strength active
- dwb $dbf5, %00000010 ; always on bike (cant surf)
- dwb $dbf5, %00000100 ; downhill (cycling road)
-
- dwb JohtoBadges, %00000001 ; zephyrbadge
- dwb JohtoBadges, %00000010 ; hivebadge
- dwb JohtoBadges, %00000100 ; plainbadge
- dwb JohtoBadges, %00001000 ; fogbadge
- dwb JohtoBadges, %00010000 ; mineralbadge
- dwb JohtoBadges, %00100000 ; stormbadge
- dwb JohtoBadges, %01000000 ; glacierbadge
- dwb JohtoBadges, %10000000 ; risingbadge
-
- dwb KantoBadges, %00000001 ; boulderbadge
- dwb KantoBadges, %00000010 ; cascadebadge
- dwb KantoBadges, %00000100 ; thunderbadge
- dwb KantoBadges, %00001000 ; rainbowbadge
- dwb KantoBadges, %00010000 ; soulbadge
- dwb KantoBadges, %00100000 ; marshbadge
- dwb KantoBadges, %01000000 ; volcanobadge
- dwb KantoBadges, %10000000 ; earthbadge
-
- ; unown sets
- dwb UnlockedUnowns, %00000001 ; 1
- dwb UnlockedUnowns, %00000010 ; 2
- dwb UnlockedUnowns, %00000100 ; 3
- dwb UnlockedUnowns, %00001000 ; 4
- dwb UnlockedUnowns, %00010000 ; 5
- dwb UnlockedUnowns, %00100000 ; 6
- dwb UnlockedUnowns, %01000000 ; 7
- dwb UnlockedUnowns, %10000000 ; 8
-
- ; fly
- dwb FlypointPerms, %00000001 ; your house
- dwb FlypointPerms, %00000010 ; viridian pokecenter
- dwb FlypointPerms, %00000100 ; pallet
- dwb FlypointPerms, %00001000 ; viridian
- dwb FlypointPerms, %00010000 ; pewter
- dwb FlypointPerms, %00100000 ; cerulean
- dwb FlypointPerms, %01000000 ; rock tunnel
- dwb FlypointPerms, %10000000 ; vermilion
- dwb FlypointPerms + 1, %00000001 ; lavender
- dwb FlypointPerms + 1, %00000010 ; saffron
- dwb FlypointPerms + 1, %00000100 ; celadon
- dwb FlypointPerms + 1, %00001000 ; fuchsia
- dwb FlypointPerms + 1, %00010000 ; cinnabar
- dwb FlypointPerms + 1, %00100000 ; indigo plateau
- dwb FlypointPerms + 1, %01000000 ; new bark
- dwb FlypointPerms + 1, %10000000 ; cherrygrove
- dwb FlypointPerms + 2, %00000001 ; violet
- dwb FlypointPerms + 2, %00000100 ; azalea
- dwb FlypointPerms + 2, %00001000 ; cianwood
- dwb FlypointPerms + 2, %00010000 ; goldenrod
- dwb FlypointPerms + 2, %00100000 ; olivine
- dwb FlypointPerms + 2, %01000000 ; ecruteak
- dwb FlypointPerms + 2, %10000000 ; mahogany
- dwb FlypointPerms + 3, %00000001 ; lake of rage
- dwb FlypointPerms + 3, %00000010 ; blackthorn
- dwb FlypointPerms + 3, %00000100 ; silver cave
- dwb FlypointPerms + 3, %00010000 ; unused
-
- dwb $dc9d, %00000001 ; lucky number show
- dwb $d84d, %00001000
-
- dwb $dc1e, %00000001 ; kurt making balls
- dwb $dc1e, %00000010
- dwb $dc1e, %00000100 ; special wilddata?
- dwb $dc1e, %00001000 ; time capsule (24h wait)
- dwb $dc1e, %00010000 ; all fruit trees
- dwb $dc1e, %00100000 ; shuckle given
- dwb $dc1e, %01000000 ; goldenrod underground merchant closed
- dwb $dc1e, %10000000 ; fought in trainer hall today
-
- dwb $dc1f, %00000001 ; mt moon square clefairy
- dwb $dc1f, %00000010 ; union cave lapras
- dwb $dc1f, %00000100 ; goldenrod underground haircut used
- dwb $dc1f, %00001000 ; goldenrod mall happiness event floor05 person07
- dwb $dc1f, %00010000 ; tea in blues house
- dwb $dc1f, %00100000 ; indigo plateau rival fight
- dwb $dc1f, %01000000
- dwb $dc1f, %10000000
-
- dwb $dc20, %00000001 ; $60
- dwb $dc20, %00000010 ; goldenrod dept store sale is on
-
- dwb $cfbc, %10000000 ; $62
-
- dwb PlayerGender, %00000001 ; player is female
-
- dwb $dbf3, %00000100 ; have gs ball after kurt examined it
-
- ; rematches
- dwb $dc4c, %00000001 ; jack
- dwb $dc4c, %00000010 ; huey
- dwb $dc4c, %00000100 ; gaven
- dwb $dc4c, %00001000 ; beth
- dwb $dc4c, %00010000 ; jose
- dwb $dc4c, %00100000 ; reena
- dwb $dc4c, %01000000 ; joey
- dwb $dc4c, %10000000 ; wade
- dwb $dc4d, %00000001 ; ralph
- dwb $dc4d, %00000010 ; liz
- dwb $dc4d, %00000100 ; anthony
- dwb $dc4d, %00001000 ; todd
- dwb $dc4d, %00010000 ; gina
- dwb $dc4d, %00100000 ; arnie
- dwb $dc4d, %01000000 ; alan
- dwb $dc4d, %10000000 ; dana
- dwb $dc4e, %00000001 ; chad
- dwb $dc4e, %00000010 ; tully
- dwb $dc4e, %00000100 ; brent
- dwb $dc4e, %00001000 ; tiffany
- dwb $dc4e, %00010000 ; vance
- dwb $dc4e, %00100000 ; wilton
- dwb $dc4e, %01000000 ; parry
- dwb $dc4e, %10000000 ; erin
-
- dwb $dc50, %00000001 ; beverly has nugget
- dwb $dc50, %00000010 ; jose has star piece
- dwb $dc50, %00000100 ; wade has item (see bittable1 $032b-e)
- dwb $dc50, %00001000 ; gina has leaf stone
- dwb $dc50, %00010000 ; alan has fire stone
- dwb $dc50, %00100000 ; liz has thunderstone
- dwb $dc50, %01000000 ; derek has nugget
- dwb $dc50, %10000000 ; tully has water stone
-
- dwb $dc51, %00000001 ; tiffany has pink bow
- dwb $dc51, %00000010 ; wilton has item (see bittable1 $032f-31)
-
- dwb $dc54, %00000001
- dwb $dc54, %00000010
- dwb $dc54, %00000100
- dwb $dc54, %00001000
- dwb $dc54, %00010000
- dwb $dc54, %00100000
- dwb $dc54, %01000000
- dwb $dc54, %10000000
-
- dwb $dc55, %00000001
- dwb $dc55, %00000010
- dwb $dc55, %00000100
- dwb $dc55, %00001000
- dwb $dc55, %00010000
- dwb $dc55, %00100000
- dwb $dc55, %01000000
- dwb $dc55, %10000000
-
- dwb $dc56, %00000001
- dwb $dc56, %00000010
- dwb $dc56, %00000100
- dwb $dc56, %00001000
- dwb $dc56, %00010000
- dwb $dc56, %00100000
- dwb $dc56, %01000000
- dwb $dc56, %10000000
-
- dwb $d45b, %00000100 ; female player has been transformed into male
-
- dwb $dc20, %00000100 ; dunsparce swarm
- dwb $dc20, %00001000 ; yanma swarm
--- /dev/null
+++ b/engine/copy.asm
@@ -1,0 +1,431 @@
+; Functions to copy data from ROM.
+
+
+Functiondc9: ; dc9
+ ld a, [rLCDC]
+ bit 7, a
+ jp z, Copy2bpp
+
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(Function104284)
+ rst Bankswitch
+ call Function104284
+ pop af
+ rst Bankswitch
+
+ ret
+; ddc
+
+Functionddc: ; ddc
+ ld a, [rLCDC]
+ bit 7, a
+ jp z, Copy1bpp
+
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(Function1042b2)
+ rst Bankswitch
+ call Function1042b2
+ pop af
+ rst Bankswitch
+
+ ret
+; def
+
+Functiondef: ; def
+ ld [hBuffer], a
+ ld a, [hROMBank]
+ push af
+ ld a, [hBuffer]
+ rst Bankswitch
+ call FarCopyBytesDouble
+ pop af
+ rst Bankswitch
+ ret
+; dfd
+
+Functiondfd: ; dfd
+ dec c
+ ld a, [hBGMapMode]
+ push af
+ xor a
+ ld [hBGMapMode], a
+ ld a, [hROMBank]
+ push af
+ ld a, b
+ rst Bankswitch
+
+.asm_e09
+ ld a, d
+ ld [rHDMA1], a
+ ld a, e
+ and $f0
+ ld [rHDMA2], a
+ ld a, h
+ and $1f
+ ld [rHDMA3], a
+ ld a, l
+ and $f0
+ ld [rHDMA4], a
+ ld a, c
+ cp $8
+ jr c, .asm_e3c
+ sub $8
+ ld c, a
+ ld a, $f
+ ld [hDMATransfer], a
+ call DelayFrame
+ ld a, l
+ add $0
+ ld l, a
+ ld a, h
+ adc $1
+ ld h, a
+ ld a, e
+ add $0
+ ld e, a
+ ld a, d
+ adc $1
+ ld d, a
+ jr .asm_e09
+
+.asm_e3c
+ ld a, c
+ and $7f
+ ld [hDMATransfer], a
+ call DelayFrame
+ pop af
+ rst Bankswitch
+
+ pop af
+ ld [hBGMapMode], a
+ ret
+; e4a
+
+
+
+Functione4a: ; e4a
+ ld a, $5
+ ld hl, $4135
+ rst FarCall
+ ret
+; e51
+
+
+
+Functione51: ; e51
+ ld a, $3e
+ ld hl, $7449
+ rst FarCall
+ ret
+; e58
+
+Functione58: ; e58
+ ld a, $3e
+ ld hl, $74be
+ rst FarCall
+ ret
+; e5f
+
+
+
+Functione5f: ; e5f
+ ld a, $3e
+ ld hl, $748a
+ rst FarCall
+ ld a, $3e
+ ld hl, $74b0
+ rst FarCall
+ ret
+; e6c
+
+Functione6c: ; e6c
+ ld a, $3e
+ ld hl, $74b0
+ rst FarCall
+ ret
+; e73
+
+Functione73: ; e73
+ push de
+ ld a, $0
+ call GetSRAMBank
+ push bc
+ ld de, $a000
+ ld a, b
+ call FarDecompress
+ pop bc
+ pop hl
+ ld de, $a000
+ call Request2bpp
+ call CloseSRAM
+ ret
+; e8d
+
+
+
+FarCopyBytes: ; e8d
+; copy bc bytes from a:hl to de
+
+ ld [hBuffer], a
+ ld a, [hROMBank]
+ push af
+ ld a, [hBuffer]
+ rst Bankswitch
+
+ call CopyBytes
+
+ pop af
+ rst Bankswitch
+ ret
+; 0xe9b
+
+
+FarCopyBytesDouble: ; e9b
+; Copy bc bytes from a:hl to bc*2 bytes at de,
+; doubling each byte in the process.
+
+ ld [hBuffer], a
+ ld a, [hROMBank]
+ push af
+ ld a, [hBuffer]
+ rst Bankswitch
+
+; switcheroo, de <> hl
+ ld a, h
+ ld h, d
+ ld d, a
+ ld a, l
+ ld l, e
+ ld e, a
+
+ inc b
+ inc c
+ jr .dec
+
+.loop
+ ld a, [de]
+ inc de
+ ld [hli], a
+ ld [hli], a
+.dec
+ dec c
+ jr nz, .loop
+ dec b
+ jr nz, .loop
+
+ pop af
+ rst Bankswitch
+ ret
+; 0xeba
+
+
+Request2bpp: ; eba
+ ld a, [hBGMapMode]
+ push af
+ xor a
+ ld [hBGMapMode], a
+
+ ld a, [hROMBank]
+ push af
+ ld a, b
+ rst Bankswitch
+
+ ld a, [$ffd3]
+ push af
+
+ ld a, $8
+ ld [$ffd3], a
+ ld a, [InLinkBattle]
+ cp $4
+ jr nz, .asm_edc
+ ld a, [$ffe9]
+ and a
+ jr nz, .asm_edc
+ ld a, $6
+ ld [$ffd3], a
+
+.asm_edc
+ ld a, e
+ ld [$cf68], a
+ ld a, d
+ ld [$cf69], a
+ ld a, l
+ ld [$cf6a], a
+ ld a, h
+ ld [$cf6b], a
+
+.asm_eec
+ ld a, c
+ ld hl, $ffd3
+ cp [hl]
+ jr nc, .asm_f08
+
+ ld [$cf67], a
+.wait
+ call DelayFrame
+ ld a, [$cf67]
+ and a
+ jr nz, .wait
+
+ pop af
+ ld [$ffd3], a
+
+ pop af
+ rst Bankswitch
+
+ pop af
+ ld [hBGMapMode], a
+ ret
+
+.asm_f08
+ ld a, [$ffd3]
+ ld [$cf67], a
+.asm_f0d
+ call DelayFrame
+ ld a, [$cf67]
+ and a
+ jr nz, .asm_f0d
+ ld a, c
+ ld hl, $ffd3
+ sub [hl]
+ ld c, a
+ jr .asm_eec
+; f1e
+
+
+Request1bpp: ; f1e
+ ld a, [hBGMapMode]
+ push af
+ xor a
+ ld [hBGMapMode], a
+
+ ld a, [hROMBank]
+ push af
+ ld a, b
+ rst Bankswitch
+
+ ld a, [$ffd3]
+ push af
+
+ ld a, $8
+ ld [$ffd3], a
+ ld a, [InLinkBattle]
+ cp $4
+ jr nz, .asm_f40
+ ld a, [$ffe9]
+ and a
+ jr nz, .asm_f40
+ ld a, $6
+ ld [$ffd3], a
+
+.asm_f40
+ ld a, e
+ ld [$cf6d], a
+ ld a, d
+ ld [$cf6e], a
+ ld a, l
+ ld [$cf6f], a
+ ld a, h
+ ld [$cf70], a
+.asm_f50
+ ld a, c
+ ld hl, $ffd3
+ cp [hl]
+ jr nc, .asm_f6c
+
+ ld [$cf6c], a
+.wait
+ call DelayFrame
+ ld a, [$cf6c]
+ and a
+ jr nz, .wait
+
+ pop af
+ ld [$ffd3], a
+
+ pop af
+ rst Bankswitch
+
+ pop af
+ ld [hBGMapMode], a
+ ret
+
+.asm_f6c
+ ld a, [$ffd3]
+ ld [$cf6c], a
+.asm_f71
+ call DelayFrame
+ ld a, [$cf6c]
+ and a
+ jr nz, .asm_f71
+ ld a, c
+ ld hl, $ffd3
+ sub [hl]
+ ld c, a
+ jr .asm_f50
+; f82
+
+
+Get2bpp: ; f82
+ ld a, [rLCDC]
+ bit 7, a
+ jp nz, Request2bpp
+
+Copy2bpp: ; f89
+; copy c 2bpp tiles from b:de to hl
+
+ push hl
+ ld h, d
+ ld l, e
+ pop de
+
+; bank
+ ld a, b
+
+; bc = c * $10
+ push af
+ swap c
+ ld a, $f
+ and c
+ ld b, a
+ ld a, $f0
+ and c
+ ld c, a
+ pop af
+
+ jp FarCopyBytes
+; f9d
+
+
+Get1bpp: ; f9d
+ ld a, [rLCDC]
+ bit 7, a
+ jp nz, Request1bpp
+
+Copy1bpp: ; fa4
+; copy c 1bpp tiles from b:de to hl
+
+ push de
+ ld d, h
+ ld e, l
+
+; bank
+ ld a, b
+
+; bc = c * $10 / 2
+ push af
+ ld h, 0
+ ld l, c
+ add hl, hl
+ add hl, hl
+ add hl, hl
+ ld b, h
+ ld c, l
+ pop af
+
+ pop hl
+ jp FarCopyBytesDouble
+; fb6
+
--- /dev/null
+++ b/engine/engine_flags.asm
@@ -1,0 +1,198 @@
+; All locations are in WRAM bank 1.
+
+ ; location, bit
+
+ ; pokegear
+ dwb $d957, %00000010 ; radio card
+ dwb $d957, %00000001 ; map card
+ dwb $d957, %00000100 ; phone card
+ dwb $d957, %00001000 ; expn card
+ dwb $d957, %10000000 ; on/off
+
+ ; DaycareMan, %10000000 ; daycare 1 on
+ dwb DaycareMan, %01000000 ; monster 1 and 2 are compatible
+ ; DaycareMan, %00100000 ; egg is ready
+ dwb DaycareMan, %00000001 ; monster 1 in daycare
+
+ ; DaycareLady, %10000000 = daycare 2 on
+ dwb DaycareLady, %00000001 ; monster 2 in daycare
+
+ dwb $d854, %00000001 ; mom saving money
+ dwb $d854, %10000000 ; dst
+
+ dwb $dc39, %00000001
+
+ dwb $d84c, %00000001 ; pokedex
+ dwb $d84c, %00000010 ; unown dex
+ dwb $d84c, %00001000 ; pokerus
+ dwb $d84c, %00010000 ; rocket signal on ch20
+ dwb $d84c, %01000000 ; credits skip
+ dwb $d84c, %10000000 ; bug contest on
+ dwb $d84d, %00000100 ; bug contest timer
+ dwb $d84d, %00000010 ; rockets in radio tower
+ dwb $d84d, %00000001 ; bike shop call enabled (1024 bike steps reqd)
+ dwb $d84d, %00010000
+ dwb $d84d, %00100000 ; give pokerus; berry -> berry juice when trading?
+ dwb $d84d, %01000000
+ dwb $d84d, %10000000 ; rockets in mahogany
+
+ dwb $dbf5, %00000001 ; strength active
+ dwb $dbf5, %00000010 ; always on bike (cant surf)
+ dwb $dbf5, %00000100 ; downhill (cycling road)
+
+ dwb JohtoBadges, %00000001 ; zephyrbadge
+ dwb JohtoBadges, %00000010 ; hivebadge
+ dwb JohtoBadges, %00000100 ; plainbadge
+ dwb JohtoBadges, %00001000 ; fogbadge
+ dwb JohtoBadges, %00010000 ; mineralbadge
+ dwb JohtoBadges, %00100000 ; stormbadge
+ dwb JohtoBadges, %01000000 ; glacierbadge
+ dwb JohtoBadges, %10000000 ; risingbadge
+
+ dwb KantoBadges, %00000001 ; boulderbadge
+ dwb KantoBadges, %00000010 ; cascadebadge
+ dwb KantoBadges, %00000100 ; thunderbadge
+ dwb KantoBadges, %00001000 ; rainbowbadge
+ dwb KantoBadges, %00010000 ; soulbadge
+ dwb KantoBadges, %00100000 ; marshbadge
+ dwb KantoBadges, %01000000 ; volcanobadge
+ dwb KantoBadges, %10000000 ; earthbadge
+
+ ; unown sets
+ dwb UnlockedUnowns, %00000001 ; 1
+ dwb UnlockedUnowns, %00000010 ; 2
+ dwb UnlockedUnowns, %00000100 ; 3
+ dwb UnlockedUnowns, %00001000 ; 4
+ dwb UnlockedUnowns, %00010000 ; 5
+ dwb UnlockedUnowns, %00100000 ; 6
+ dwb UnlockedUnowns, %01000000 ; 7
+ dwb UnlockedUnowns, %10000000 ; 8
+
+ ; fly
+ dwb FlypointPerms, %00000001 ; your house
+ dwb FlypointPerms, %00000010 ; viridian pokecenter
+ dwb FlypointPerms, %00000100 ; pallet
+ dwb FlypointPerms, %00001000 ; viridian
+ dwb FlypointPerms, %00010000 ; pewter
+ dwb FlypointPerms, %00100000 ; cerulean
+ dwb FlypointPerms, %01000000 ; rock tunnel
+ dwb FlypointPerms, %10000000 ; vermilion
+ dwb FlypointPerms + 1, %00000001 ; lavender
+ dwb FlypointPerms + 1, %00000010 ; saffron
+ dwb FlypointPerms + 1, %00000100 ; celadon
+ dwb FlypointPerms + 1, %00001000 ; fuchsia
+ dwb FlypointPerms + 1, %00010000 ; cinnabar
+ dwb FlypointPerms + 1, %00100000 ; indigo plateau
+ dwb FlypointPerms + 1, %01000000 ; new bark
+ dwb FlypointPerms + 1, %10000000 ; cherrygrove
+ dwb FlypointPerms + 2, %00000001 ; violet
+ dwb FlypointPerms + 2, %00000100 ; azalea
+ dwb FlypointPerms + 2, %00001000 ; cianwood
+ dwb FlypointPerms + 2, %00010000 ; goldenrod
+ dwb FlypointPerms + 2, %00100000 ; olivine
+ dwb FlypointPerms + 2, %01000000 ; ecruteak
+ dwb FlypointPerms + 2, %10000000 ; mahogany
+ dwb FlypointPerms + 3, %00000001 ; lake of rage
+ dwb FlypointPerms + 3, %00000010 ; blackthorn
+ dwb FlypointPerms + 3, %00000100 ; silver cave
+ dwb FlypointPerms + 3, %00010000 ; unused
+
+ dwb $dc9d, %00000001 ; lucky number show
+ dwb $d84d, %00001000
+
+ dwb $dc1e, %00000001 ; kurt making balls
+ dwb $dc1e, %00000010
+ dwb $dc1e, %00000100 ; special wilddata?
+ dwb $dc1e, %00001000 ; time capsule (24h wait)
+ dwb $dc1e, %00010000 ; all fruit trees
+ dwb $dc1e, %00100000 ; shuckle given
+ dwb $dc1e, %01000000 ; goldenrod underground merchant closed
+ dwb $dc1e, %10000000 ; fought in trainer hall today
+
+ dwb $dc1f, %00000001 ; mt moon square clefairy
+ dwb $dc1f, %00000010 ; union cave lapras
+ dwb $dc1f, %00000100 ; goldenrod underground haircut used
+ dwb $dc1f, %00001000 ; goldenrod mall happiness event floor05 person07
+ dwb $dc1f, %00010000 ; tea in blues house
+ dwb $dc1f, %00100000 ; indigo plateau rival fight
+ dwb $dc1f, %01000000
+ dwb $dc1f, %10000000
+
+ dwb $dc20, %00000001 ; $60
+ dwb $dc20, %00000010 ; goldenrod dept store sale is on
+
+ dwb $cfbc, %10000000 ; $62
+
+ dwb PlayerGender, %00000001 ; player is female
+
+ dwb $dbf3, %00000100 ; have gs ball after kurt examined it
+
+ ; rematches
+ dwb $dc4c, %00000001 ; jack
+ dwb $dc4c, %00000010 ; huey
+ dwb $dc4c, %00000100 ; gaven
+ dwb $dc4c, %00001000 ; beth
+ dwb $dc4c, %00010000 ; jose
+ dwb $dc4c, %00100000 ; reena
+ dwb $dc4c, %01000000 ; joey
+ dwb $dc4c, %10000000 ; wade
+ dwb $dc4d, %00000001 ; ralph
+ dwb $dc4d, %00000010 ; liz
+ dwb $dc4d, %00000100 ; anthony
+ dwb $dc4d, %00001000 ; todd
+ dwb $dc4d, %00010000 ; gina
+ dwb $dc4d, %00100000 ; arnie
+ dwb $dc4d, %01000000 ; alan
+ dwb $dc4d, %10000000 ; dana
+ dwb $dc4e, %00000001 ; chad
+ dwb $dc4e, %00000010 ; tully
+ dwb $dc4e, %00000100 ; brent
+ dwb $dc4e, %00001000 ; tiffany
+ dwb $dc4e, %00010000 ; vance
+ dwb $dc4e, %00100000 ; wilton
+ dwb $dc4e, %01000000 ; parry
+ dwb $dc4e, %10000000 ; erin
+
+ dwb $dc50, %00000001 ; beverly has nugget
+ dwb $dc50, %00000010 ; jose has star piece
+ dwb $dc50, %00000100 ; wade has item (see bittable1 $032b-e)
+ dwb $dc50, %00001000 ; gina has leaf stone
+ dwb $dc50, %00010000 ; alan has fire stone
+ dwb $dc50, %00100000 ; liz has thunderstone
+ dwb $dc50, %01000000 ; derek has nugget
+ dwb $dc50, %10000000 ; tully has water stone
+
+ dwb $dc51, %00000001 ; tiffany has pink bow
+ dwb $dc51, %00000010 ; wilton has item (see bittable1 $032f-31)
+
+ dwb $dc54, %00000001
+ dwb $dc54, %00000010
+ dwb $dc54, %00000100
+ dwb $dc54, %00001000
+ dwb $dc54, %00010000
+ dwb $dc54, %00100000
+ dwb $dc54, %01000000
+ dwb $dc54, %10000000
+
+ dwb $dc55, %00000001
+ dwb $dc55, %00000010
+ dwb $dc55, %00000100
+ dwb $dc55, %00001000
+ dwb $dc55, %00010000
+ dwb $dc55, %00100000
+ dwb $dc55, %01000000
+ dwb $dc55, %10000000
+
+ dwb $dc56, %00000001
+ dwb $dc56, %00000010
+ dwb $dc56, %00000100
+ dwb $dc56, %00001000
+ dwb $dc56, %00010000
+ dwb $dc56, %00100000
+ dwb $dc56, %01000000
+ dwb $dc56, %10000000
+
+ dwb $d45b, %00000100 ; female player has been transformed into male
+
+ dwb $dc20, %00000100 ; dunsparce swarm
+ dwb $dc20, %00001000 ; yanma swarm
--- /dev/null
+++ b/engine/fade.asm
@@ -1,0 +1,134 @@
+; Functions to fade the screen in and out.
+
+
+Function48c: ; 48c
+ ld a, [TimeOfDayPal]
+ ld b, a
+ ld hl, IncGradGBPalTable_11
+ ld a, l
+ sub b
+ ld l, a
+ jr nc, .asm_499
+ dec h
+
+.asm_499
+ ld a, [hli]
+ ld [rBGP], a
+ ld a, [hli]
+ ld [rOBP0], a
+ ld a, [hli]
+ ld [rOBP1], a
+ ret
+; 4a3
+
+
+Function4a3: ; 4a3
+ ld a, [hCGB]
+ and a
+ jr z, .asm_4af
+ ld hl, IncGradGBPalTable_00
+ ld b, 4
+ jr FadeOut
+
+.asm_4af
+ ld hl, IncGradGBPalTable_08
+ ld b, 4
+ jr FadeOut
+; 4b6
+
+Function4b6: ; 4b6
+ ld a, [hCGB]
+ and a
+ jr z, .asm_4c2
+ ld hl, IncGradGBPalTable_05
+ ld b, 3
+ jr FadeOut
+
+.asm_4c2
+ ld hl, IncGradGBPalTable_13
+ ld b, 3
+; 4c7
+
+FadeOut: ; 4c7
+ push de
+ ld a, [hli]
+ call DmgToCgbBGPals
+ ld a, [hli]
+ ld e, a
+ ld a, [hli]
+ ld d, a
+ call DmgToCgbObjPals
+ ld c, 8
+ call DelayFrames
+ pop de
+ dec b
+ jr nz, FadeOut
+ ret
+; 4dd
+
+Function4dd: ; 4dd
+ ld a, [hCGB]
+ and a
+ jr z, .asm_4e9
+ ld hl, IncGradGBPalTable_04 - 1
+ ld b, 4
+ jr FadeIn
+
+.asm_4e9
+ ld hl, IncGradGBPalTable_12 - 1
+ ld b, 4
+ jr FadeIn
+; 4f0
+
+Function4f0: ; 4f0
+ ld a, [hCGB]
+ and a
+ jr z, .asm_4fc
+ ld hl, IncGradGBPalTable_07 - 1
+ ld b, 3
+ jr FadeIn
+
+.asm_4fc
+ ld hl, IncGradGBPalTable_15 - 1
+ ld b, 3
+ ; fallthrough
+; 501
+
+FadeIn: ; 501
+ push de
+ ld a, [hld]
+ ld d, a
+ ld a, [hld]
+ ld e, a
+ call DmgToCgbObjPals
+ ld a, [hld]
+ call DmgToCgbBGPals
+ ld c, 8
+ call DelayFrames
+ pop de
+ dec b
+ jr nz, FadeIn
+ ret
+; 517
+
+
+; 517
+IncGradGBPalTable_00: db %11111111, %11111111, %11111111
+IncGradGBPalTable_01: db %11111110, %11111110, %11111110
+IncGradGBPalTable_02: db %11111001, %11111001, %11111001
+IncGradGBPalTable_03: db %11100100, %11100100, %11100100
+IncGradGBPalTable_04: db %11100100, %11100100, %11100100
+IncGradGBPalTable_05: db %10010000, %10010000, %10010000
+IncGradGBPalTable_06: db %01000000, %01000000, %01000000
+IncGradGBPalTable_07: db %00000000, %00000000, %00000000
+; bgp obp1 obp2
+IncGradGBPalTable_08: db %11111111, %11111111, %11111111
+IncGradGBPalTable_09: db %11111110, %11111110, %11111000
+IncGradGBPalTable_10: db %11111001, %11100100, %11100100
+IncGradGBPalTable_11: db %11100100, %11010000, %11100000
+IncGradGBPalTable_12: db %11100100, %11010000, %11100000
+IncGradGBPalTable_13: db %10010000, %10000000, %10010000
+IncGradGBPalTable_14: db %01000000, %01000000, %01000000
+IncGradGBPalTable_15: db %00000000, %00000000, %00000000
+; 547
+
--- a/engine/init.asm
+++ b/engine/init.asm
@@ -79,7 +79,7 @@
or c
jr nz, .asm_1b1
- ld sp, Stack - 1
+ ld sp, Stack
; Clear HRAM
ld a, [hCGB]
--- a/engine/joypad.asm
+++ b/engine/joypad.asm
@@ -273,3 +273,219 @@
ret
; a1b
+
+Functiona1b: ; a1b
+
+ call DelayFrame
+
+ push bc
+ call Functiona57
+ pop bc
+
+ ld a, [hJoyDown]
+ cp D_UP | SELECT | BUTTON_B
+ jr z, .asm_a34
+
+ ld a, [$ffa9]
+ and START | BUTTON_A
+ jr nz, .asm_a34
+
+ dec c
+ jr nz, Functiona1b
+
+ and a
+ ret
+
+.asm_a34
+ scf
+ ret
+; a36
+
+
+Functiona36: ; a36
+ call DelayFrame
+ call GetJoypadPublic
+ ld a, [hJoyPressed]
+ and BUTTON_A | BUTTON_B
+ ret nz
+ call RTC
+ jr Functiona36
+; a46
+
+Functiona46: ; a46
+ ld a, [hOAMUpdate]
+ push af
+ ld a, 1
+ ld [hOAMUpdate], a
+ call WaitBGMap
+ call Functiona36
+ pop af
+ ld [hOAMUpdate], a
+ ret
+; a57
+
+Functiona57: ; a57
+ call GetJoypadPublic
+ ld a, [$ffaa]
+ and a
+ ld a, [hJoyPressed]
+ jr z, .asm_a63
+ ld a, [hJoyDown]
+.asm_a63
+ ld [$ffa9], a
+ ld a, [hJoyPressed]
+ and a
+ jr z, .asm_a70
+ ld a, 15
+ ld [TextDelayFrames], a
+ ret
+
+.asm_a70
+ ld a, [TextDelayFrames]
+ and a
+ jr z, .asm_a7a
+ xor a
+ ld [$ffa9], a
+ ret
+
+.asm_a7a
+ ld a, 5
+ ld [TextDelayFrames], a
+ ret
+; a80
+
+Functiona80: ; a80
+ ld a, [$ffaf]
+ push af
+ ld a, [$ffb0]
+ push af
+ xor a
+ ld [$ffaf], a
+ ld a, $6
+ ld [$ffb0], a
+.asm_a8d
+ push hl
+ ld hl, $c606
+ call Functionb06
+ pop hl
+ call Functiona57
+ ld a, [$ffa9]
+ and $3
+ jr z, .asm_a8d
+ pop af
+ ld [$ffb0], a
+ pop af
+ ld [$ffaf], a
+ ret
+; aa5
+
+Functionaa5: ; aa5
+ call Functiona57
+ ld a, [$ffa9]
+ and BUTTON_A | BUTTON_B
+ jr z, Functionaa5
+ ret
+; aaf
+
+Functionaaf: ; aaf
+ ld a, [InLinkBattle]
+ and a
+ jr nz, .asm_ac1
+ call Functionac6
+ push de
+ ld de, SFX_READ_TEXT_2
+ call StartSFX
+ pop de
+ ret
+
+.asm_ac1
+ ld c, 65
+ jp DelayFrames
+; ac6
+
+Functionac6: ; ac6
+ ld a, [hOAMUpdate]
+ push af
+ ld a, $1
+ ld [hOAMUpdate], a
+ ld a, [InputType]
+ or a
+ jr z, .asm_ad9
+ callba Function1de28a
+.asm_ad9
+ call Functionaf5
+ call Functiona57
+ ld a, [hJoyPressed]
+ and $3
+ jr nz, .asm_af1
+ call RTC
+ ld a, $1
+ ld [hBGMapMode], a
+ call DelayFrame
+ jr .asm_ad9
+
+.asm_af1
+ pop af
+ ld [hOAMUpdate], a
+ ret
+; af5
+
+Functionaf5: ; af5
+ ld a, [$ff9b]
+ and $10
+ jr z, .asm_aff
+ ld a, $ee
+ jr .asm_b02
+
+.asm_aff
+ ld a, [$c605]
+
+.asm_b02
+ ld [$c606], a
+ ret
+; b06
+
+Functionb06: ; b06
+ push bc
+ ld a, [hl]
+ ld b, a
+ ld a, $ee
+ cp b
+ pop bc
+ jr nz, .asm_b27
+ ld a, [$ffaf]
+ dec a
+ ld [$ffaf], a
+ ret nz
+ ld a, [$ffb0]
+ dec a
+ ld [$ffb0], a
+ ret nz
+ ld a, $7a
+ ld [hl], a
+ ld a, $ff
+ ld [$ffaf], a
+ ld a, $6
+ ld [$ffb0], a
+ ret
+
+.asm_b27
+ ld a, [$ffaf]
+ and a
+ ret z
+ dec a
+ ld [$ffaf], a
+ ret nz
+ dec a
+ ld [$ffaf], a
+ ld a, [$ffb0]
+ dec a
+ ld [$ffb0], a
+ ret nz
+ ld a, $6
+ ld [$ffb0], a
+ ld a, $ee
+ ld [hl], a
+ ret
+; b40
+
--- /dev/null
+++ b/engine/lcd.asm
@@ -1,0 +1,81 @@
+; LCD handling
+
+
+Function547: ; 547
+ ld a, [hLCDStatCustom]
+ cp rSCX & $ff
+ ret nz
+ ld c, a
+ ld a, [LYOverrides]
+ ld [$ff00+c], a
+ ret
+; 552
+
+
+LCD: ; 552
+ push af
+ ld a, [hLCDStatCustom]
+ and a
+ jr z, .done
+
+; At this point it's assumed we're in WRAM bank 5!
+ push bc
+ ld a, [rLY]
+ ld c, a
+ ld b, LYOverrides >> 8
+ ld a, [bc]
+ ld b, a
+ ld a, [hLCDStatCustom]
+ ld c, a
+ ld a, b
+ ld [$ff00+c], a
+ pop bc
+
+.done
+ pop af
+ reti
+; 568
+
+
+DisableLCD: ; 568
+; Turn the LCD off
+
+; Don't need to do anything if the LCD is already off
+ ld a, [rLCDC]
+ bit 7, a ; lcd enable
+ ret z
+
+ xor a
+ ld [rIF], a
+ ld a, [rIE]
+ ld b, a
+
+; Disable VBlank
+ res 0, a ; vblank
+ ld [rIE], a
+
+.wait
+; Wait until VBlank would normally happen
+ ld a, [rLY]
+ cp 145
+ jr nz, .wait
+
+ ld a, [rLCDC]
+ and %01111111 ; lcd enable off
+ ld [rLCDC], a
+
+ xor a
+ ld [rIF], a
+ ld a, b
+ ld [rIE], a
+ ret
+; 58a
+
+
+EnableLCD: ; 58a
+ ld a, [rLCDC]
+ set 7, a ; lcd enable
+ ld [rLCDC], a
+ ret
+; 591
+
--- /dev/null
+++ b/engine/palettes.asm
@@ -1,0 +1,347 @@
+; Functions dealing with palettes.
+
+
+UpdatePalsIfCGB: ; c2f
+; update bgp data from BGPals
+; update obp data from OBPals
+; return carry if successful
+
+; check cgb
+ ld a, [hCGB]
+ and a
+ ret z
+
+
+UpdateCGBPals: ; c33
+; return carry if successful
+; any pals to update?
+ ld a, [hCGBPalUpdate]
+ and a
+ ret z
+
+
+ForceUpdateCGBPals: ; c37
+
+ ld a, [rSVBK]
+ push af
+ ld a, 5 ; BANK(BGPals)
+ ld [rSVBK], a
+
+ ld hl, BGPals ; 5:d080
+
+; copy 8 pals to bgpd
+ ld a, %10000000 ; auto increment, index 0
+ ld [rBGPI], a
+ ld c, rBGPD % $100
+ ld b, 4 ; NUM_PALS / 2
+.bgp
+ rept $10
+ ld a, [hli]
+ ld [$ff00+c], a
+ endr
+
+ dec b
+ jr nz, .bgp
+
+; hl is now 5:d0c0 OBPals
+
+; copy 8 pals to obpd
+ ld a, %10000000 ; auto increment, index 0
+ ld [rOBPI], a
+ ld c, rOBPD - rJOYP
+ ld b, 4 ; NUM_PALS / 2
+.obp
+ rept $10
+ ld a, [hli]
+ ld [$ff00+c], a
+ endr
+
+ dec b
+ jr nz, .obp
+
+ pop af
+ ld [rSVBK], a
+
+; clear pal update queue
+ xor a
+ ld [hCGBPalUpdate], a
+
+ scf
+ ret
+; c9f
+
+
+DmgToCgbBGPals: ; c9f
+; exists to forego reinserting cgb-converted image data
+
+; input: a -> bgp
+
+ ld [rBGP], a
+ push af
+
+ ld a, [hCGB]
+ and a
+ jr z, .end
+
+ push hl
+ push de
+ push bc
+ ld a, [rSVBK]
+ push af
+
+ ld a, 5
+ ld [rSVBK], a
+
+; copy & reorder bg pal buffer
+ ld hl, BGPals ; to
+ ld de, Unkn1Pals ; from
+; order
+ ld a, [rBGP]
+ ld b, a
+; all pals
+ ld c, 8
+ call CopyPals
+; request pal update
+ ld a, 1
+ ld [hCGBPalUpdate], a
+
+ pop af
+ ld [rSVBK], a
+ pop bc
+ pop de
+ pop hl
+.end
+ pop af
+ ret
+; ccb
+
+
+DmgToCgbObjPals: ; ccb
+; exists to forego reinserting cgb-converted image data
+
+; input: d -> obp1
+; e -> obp2
+
+ ld a, e
+ ld [rOBP0], a
+ ld a, d
+ ld [rOBP1], a
+
+ ld a, [hCGB]
+ and a
+ ret z
+
+ push hl
+ push de
+ push bc
+ ld a, [rSVBK]
+ push af
+
+ ld a, 5
+ ld [rSVBK], a
+
+; copy & reorder obj pal buffer
+ ld hl, OBPals ; to
+ ld de, Unkn2Pals ; from
+; order
+ ld a, [rOBP0]
+ ld b, a
+; all pals
+ ld c, 8
+ call CopyPals
+; request pal update
+ ld a, 1
+ ld [hCGBPalUpdate], a
+
+ pop af
+ ld [rSVBK], a
+ pop bc
+ pop de
+ pop hl
+ ret
+; cf8
+
+
+Functioncf8: ; cf8
+ ld [rOBP0], a
+ push af
+ ld a, [hCGB]
+ and a
+ jr z, .asm_d22
+ push hl
+ push de
+ push bc
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, $d0c0
+ ld de, MartPointer
+ ld a, [rOBP0]
+ ld b, a
+ ld c, $1
+ call CopyPals
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ pop af
+ ld [rSVBK], a
+ pop bc
+ pop de
+ pop hl
+
+.asm_d22
+ pop af
+ ret
+; d24
+
+Functiond24: ; d24
+ ld [rOBP1], a
+ push af
+ ld a, [hCGB]
+ and a
+ jr z, .asm_d4e
+ push hl
+ push de
+ push bc
+ ld a, [rSVBK]
+ push af
+ ld a, $5
+ ld [rSVBK], a
+ ld hl, $d0c8
+ ld de, $d048
+ ld a, [rOBP1]
+ ld b, a
+ ld c, $1
+ call CopyPals
+ ld a, $1
+ ld [hCGBPalUpdate], a
+ pop af
+ ld [rSVBK], a
+ pop bc
+ pop de
+ pop hl
+
+.asm_d4e
+ pop af
+ ret
+; d50
+
+
+
+CopyPals: ; d50
+; copy c palettes in order b from de to hl
+
+ push bc
+ ld c, 4 ; NUM_PAL_COLORS
+.loop
+ push de
+ push hl
+
+; get pal color
+ ld a, b
+ and %11 ; color
+; 2 bytes per color
+ add a
+ ld l, a
+ ld h, 0
+ add hl, de
+ ld e, [hl]
+ inc hl
+ ld d, [hl]
+
+; dest
+ pop hl
+; write color
+ ld [hl], e
+ inc hl
+ ld [hl], d
+ inc hl
+; next pal color
+ srl b
+ srl b
+; source
+ pop de
+; done pal?
+ dec c
+ jr nz, .loop
+
+; de += 8 (next pal)
+ ld a, 8 ; NUM_PAL_COLORS * 2 ; bytes per pal
+ add e
+ jr nc, .ok
+ inc d
+.ok
+ ld e, a
+
+; how many more pals?
+ pop bc
+ dec c
+ jr nz, CopyPals
+ ret
+; d79
+
+
+Functiond79: ; d79
+ ld a, [hCGB]
+ and a
+ ret z
+ ld a, 1
+ ld [rVBK], a
+ ld hl, VTiles0
+ ld bc, $2000
+ xor a
+ call ByteFill
+ ld a, 0
+ ld [rVBK], a
+ ret
+; d90
+
+
+Functiond90: ; d90
+ ret
+; d91
+
+
+Functiond91: ; d91
+ ld a, [hCGB]
+ and a
+ ret z
+ ld a, [rSVBK]
+ push af
+ ld a, 5 ; BANK(BGPals)
+ ld [rSVBK], a
+ ld hl, BGPals
+ ld bc, $40 + $10
+ xor a
+ call ByteFill
+ pop af
+ ld [rSVBK], a
+ ld a, 1
+ ld [hCGBPalUpdate], a
+ call DelayFrame
+ ret
+; db1
+
+
+Functiondb1: ; db1
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(Function4c000)
+ rst Bankswitch
+ call Function4c000
+ pop af
+ rst Bankswitch
+ ret
+; dbd
+
+Functiondbd: ; dbd
+ ld a, [hROMBank]
+ push af
+ ld a, BANK(Function4c03f)
+ rst Bankswitch
+ call Function4c03f
+ pop af
+ rst Bankswitch
+ ret
+; dc9
+
--- a/engine/scripting.asm
+++ b/engine/scripting.asm
@@ -308,7 +308,7 @@
ld h, a
ld a, [ScriptBank]
ld b, a
- call $269a
+ call Function269a
ret
; 0x96eab
@@ -323,7 +323,7 @@
ld l, a
call GetScriptByte
ld h, a
- call $269a
+ call Function269a
ret
; 0x96ebb
@@ -348,7 +348,7 @@
ld a, [hli]
ld h, [hl]
ld l, a
- call $269a
+ call Function269a
ret
.asm_96ed8
ret
@@ -357,7 +357,7 @@
Script_closetext: ; 0x96ed9
; script command 0x54
- jp $0a46
+ jp Functiona46
; 0x96edc
Script_keeptextopen: ; 0x96edc
@@ -367,8 +367,8 @@
push af
ld a, $1
ld [$ffd8], a
- call $31f6
- call $0aaf
+ call WaitBGMap
+ call Functionaaf
pop af
ld [$ffd8], a
ret
@@ -377,7 +377,7 @@
Script_yesorno: ; 0x96eed
; script command 0x4e
- call $1dcf
+ call Function1dcf
ld a, $0
jr c, .asm_96ef6 ; 0x96ef2 $2
ld a, $1
@@ -397,8 +397,8 @@
ld h, a
ld de, $1d35
ld a, [ScriptBank]
- call $26b7
- call $1ad2
+ call Function26b7
+ call Function1ad2
ret
; 0x96f0f
@@ -405,8 +405,8 @@
Script_writebackup: ; 0x96f0f
; script command 0x50
- call $1c17
- call $1ad2
+ call Function1c17
+ call Function1ad2
ret
; 0x96f16
@@ -470,7 +470,7 @@
; pointer (PointerLabelBeforeBank)
; memory (SingleByteParam)
- call $106c
+ call Function106c
call GetScriptByte
ld c, a
ld a, $47
@@ -539,7 +539,7 @@
ld a, [de]
ld [$d10c], a
ld hl, $d892
- call $2f66
+ call Function2f66
ld a, $1
jr c, .asm_96fb0 ; 0x96fad $1
xor a
@@ -561,7 +561,7 @@
call CurItemName
ld b, BANK(PutItemInPocketText)
ld hl, PutItemInPocketText
- call $269a
+ call Function269a
ret
; 0x96fd5
@@ -572,7 +572,7 @@
call CurItemName
ld b, BANK(PocketIsFullText)
ld hl, PocketIsFullText
- call $269a
+ call Function269a
ret
; 0x96fe4
@@ -732,7 +732,7 @@
; parameters:
; number (SingleByteParam)
- call $1dcf
+ call Function1dcf
jr c, .asm_970d6 ; 0x970c1 $13
call GetScriptByte
ld c, a
@@ -814,7 +814,7 @@
ld l, a
ld a, [$d03e]
ld b, a
- call $269a
+ call Function269a
ret
; 0x97125
@@ -843,7 +843,7 @@
ld d, [hl]
call GetScriptByte
ld b, a
- call BitTable1Func
+ call EventFlagAction
ld a, c
and a
ret z
@@ -907,7 +907,7 @@
Script_playmapmusic: ; 0x97185
; script command 0x82
- call $3cdf
+ call Function3cdf
ret
; 0x97189
@@ -988,7 +988,7 @@
jr nz, .asm_971df ; 0x971da $3
ld a, [$c2dd]
.asm_971df
- call $37ce
+ call Function37ce
ret
; 0x971e3
@@ -1039,7 +1039,7 @@
ld h, a
ld a, [ScriptBank]
ld b, a
- call $26c7
+ call Function26c7
ret c
ld a, SCRIPT_WAIT_MOVEMENT
ld [ScriptMode], a
@@ -1145,13 +1145,13 @@
Unknown_0x9728b: ; 0x9728b
ld a, d
push de
- call $18de
+ call Function18de
jr c, .asm_972b9 ; 0x97290 $27
ld hl, $0000
add hl, bc
ld a, [hl]
push bc
- call $1836
+ call Function1836
pop bc
jr c, .asm_972b9 ; 0x9729c $1b
ld hl, $0004
@@ -1160,13 +1160,13 @@
jr nz, .asm_972b9 ; 0x972a4 $13
pop de
ld a, e
- call $1af8
+ call Function1af8
ld hl, $d0ed
bit 6, [hl]
jr nz, .asm_972b5 ; 0x972b0 $3
call Unknown_0x972bc
.asm_972b5
- call $1ad2
+ call Function1ad2
ret
.asm_972b9
pop de
@@ -1175,7 +1175,7 @@
; 0x972bc
Unknown_0x972bc: ; 0x972bc
- call $217a
+ call Function217a
ld hl, TileMap
ld bc, $0168
.asm_972c5
@@ -1211,7 +1211,7 @@
call GetScriptByte
call Unknown_0x971e3
- call $1956
+ call Function1956
ld a, [$ffaf]
ld b, $0
call Unknown_0x9730b
@@ -1229,7 +1229,7 @@
jr nz, .asm_972fa ; 0x972f6 $2
ld a, [$ffe0]
.asm_972fa
- call $199f
+ call Function199f
ld a, [$ffaf]
ld b, $1
call Unknown_0x9730b
@@ -1241,7 +1241,7 @@
Unknown_0x9730b: ; 0x9730b
push bc
- call $18d2
+ call GetMapObject
ld hl, $000c
add hl, bc
pop bc
@@ -1256,7 +1256,7 @@
xor a
ret
.asm_97321
- call BitTable1Func
+ call EventFlagAction
ret
; 0x97325
@@ -1497,9 +1497,9 @@
Script_startbattle: ; 0x97436
; script command 0x5f
- call $2879
- ld a, $16
- call $2d83
+ call Function2879
+ ld a, PREDEF_START_BATTLE
+ call Predef
ld a, [$d0ee]
and $3f
ld [$c2dd], a
@@ -1513,7 +1513,7 @@
call GetScriptByte
ld [$d230], a
- call $2879
+ call Function2879
ld a, $13
ld hl, $6554
rst $8
@@ -1559,7 +1559,7 @@
ld a, $f3
ld [$ff9f], a
ld a, $1
- call $261b
+ call Function261b
call StopScript
ret
; 0x974a2
@@ -1835,7 +1835,7 @@
Script_checktriggers: ; 0x975c2
; script command 0x13
- call $211b
+ call Function211b
jr z, .asm_975cb ; 0x975c5 $4
ld [$c2dd], a
ret
@@ -1855,7 +1855,7 @@
ld b, a
call GetScriptByte
ld c, a
- call $2147
+ call Function2147
ld a, d
or e
jr z, .asm_975e5 ; 0x975de $5
@@ -1894,7 +1894,7 @@
; fallthrough
Unknown_975fd: ; 0x975fd
- call $2147
+ call Function2147
ld a, d
or e
jr z, .asm_97608 ; 0x97602 $4
@@ -1988,7 +1988,7 @@
ld b, a
.asm_97653
push bc
- call $2f8c
+ call Random
pop bc
ld a, [$ffe1]
cp b
@@ -1996,7 +1996,7 @@
jr .asm_97666 ; 0x9765d $7
.asm_9765f
push bc
- call $2f8c
+ call Random
pop bc
ld a, [$ffe1]
.asm_97666
@@ -2004,7 +2004,7 @@
ld a, [$c2dd]
ld c, a
pop af
- call $3110
+ call SimpleDivide
ld [$c2dd], a
ret
; 0x97673
@@ -2091,7 +2091,7 @@
ld a, [$c2dd]
.asm_976b7
ld [$d265], a
- call $343b
+ call GetPokemonName
ld de, StringBuffer1
Unknown_976c0: ; 0x976c0
@@ -2205,7 +2205,7 @@
call Unknown_0x97861
ld hl, StringBuffer1
ld bc, $4306
- call $3198
+ call PrintNum
ld de, StringBuffer1
jp Unknown_976c0
; 0x97747
@@ -2217,9 +2217,9 @@
call Unknown_0x97771
ld hl, StringBuffer1
- ld de, $d855
+ ld de, Coins
ld bc, $4206
- call $3198
+ call PrintNum
ld de, StringBuffer1
jp Unknown_976c0
; 0x9775c
@@ -2233,7 +2233,7 @@
ld de, $c2dd
ld hl, StringBuffer1
ld bc, $4103
- call $3198
+ call PrintNum
ld de, StringBuffer1
jp Unknown_976c0
; 0x97771
@@ -2320,7 +2320,7 @@
call GetScriptByte
ld [$d10c], a
ld hl, $d892
- call $2f66
+ call Function2f66
jr nc, .asm_977eb ; 0x977e3 $6
ld a, $1
ld [$c2dd], a
@@ -2346,7 +2346,7 @@
ld a, $ff
ld [$d107], a
ld hl, $d892
- call $2f53
+ call Function2f53
ret nc
ld a, $1
ld [$c2dd], a
@@ -2363,7 +2363,7 @@
call GetScriptByte
ld [$d106], a
ld hl, $d892
- call $2f79
+ call PickUpItem
ret nc
ld a, $1
ld [$c2dd], a
@@ -2677,7 +2677,7 @@
call GetScriptByte
ld d, a
ld b, $1
- call BitTable1Func
+ call EventFlagAction
ret
; 0x97996
@@ -2691,7 +2691,7 @@
call GetScriptByte
ld d, a
ld b, $0
- call BitTable1Func
+ call EventFlagAction
ret
; 0x979a4
@@ -2705,7 +2705,7 @@
call GetScriptByte
ld d, a
ld b, $2
- call BitTable1Func
+ call EventFlagAction
ld a, c
and a
jr z, .asm_979b7 ; 0x979b3 $2
@@ -2839,7 +2839,7 @@
ld a, $f1
ld [$ff9f], a
ld a, $1
- call $261b
+ call Function261b
call StopScript
ret
.asm_97a4a
@@ -2851,7 +2851,7 @@
ld a, $fb
ld [$ff9f], a
ld a, $1
- call $261b
+ call Function261b
call StopScript
ret
; 0x97a65
@@ -2935,8 +2935,8 @@
ld [$d1a1], a
call GetScriptByte
ld [$d1a2], a
- call $24e4
- call $2879
+ call Function24e4
+ call Function2879
ret
; 0x97acc
@@ -2953,10 +2953,10 @@
call GetScriptByte
add $4
ld e, a
- call $2a66
+ call Function2a66
call GetScriptByte
ld [hl], a
- call $2879
+ call Function2879
ret
; 0x97ae3
@@ -2965,12 +2965,12 @@
xor a
ld [$ffd4], a
- call $2173
- call $2914
+ call Function2173
+ call Function2914
ld a, $41
ld hl, $4061
rst $8
- call $1ad2
+ call Function1ad2
ret
; 0x97af6
@@ -2977,7 +2977,7 @@
Script_warpcheck: ; 0x97af6
; script command 0x8e
- call $224a
+ call Function224a
ret nc
callba Function966d0
ret
@@ -2996,7 +2996,7 @@
call GetScriptByte
ld [$ff9f], a
ld a, $1
- call $261b
+ call Function261b
call StopScript
ret
; 0x97b16
@@ -3011,7 +3011,7 @@
Script_loadfont: ; 0x97b1c
; script command 0x47
- call $2e08
+ call Function2e08
ret
; 0x97b20
@@ -3020,7 +3020,7 @@
; parameters:
; dummy (SingleByteParam)
- call $2dba
+ call ResetWindow
call GetScriptByte
ret
; 0x97b27
@@ -3043,8 +3043,8 @@
Script_loadmovesprites: ; 0x97b2f
; script command 0x49
- call $2e20
- call $2dcf
+ call Function2e20
+ call Function2dcf
ret
; 0x97b36
@@ -3206,7 +3206,7 @@
DisplayCredits:
call Script_resetfuncs
ld a, $3
- call $261b
+ call Function261b
call StopScript
ret
; 0x97c05
--- /dev/null
+++ b/engine/serial.asm
@@ -1,0 +1,408 @@
+Serial: ; 6ef
+; The serial interrupt.
+
+ push af
+ push bc
+ push de
+ push hl
+
+ ld a, [$ffc9]
+ and a
+ jr nz, .asm_71c
+
+ ld a, [$c2d4]
+ bit 0, a
+ jr nz, .asm_721
+
+ ld a, [$ffcb]
+ inc a
+ jr z, .asm_726
+
+ ld a, [rSB]
+ ld [hSerialReceive], a
+
+ ld a, [hSerialSend]
+ ld [rSB], a
+
+ ld a, [$ffcb]
+ cp $2
+ jr z, .asm_752
+
+ ld a, 0 << rSC_ON
+ ld [rSC], a
+ ld a, 1 << rSC_ON
+ ld [rSC], a
+ jr .asm_752
+
+.asm_71c
+ call Function3e80
+ jr .asm_75a
+
+.asm_721
+ call Function2057
+ jr .asm_75a
+
+.asm_726
+ ld a, [rSB]
+ cp $1
+ jr z, .asm_730
+ cp $2
+ jr nz, .asm_752
+
+.asm_730
+ ld [hSerialReceive], a
+ ld [$ffcb], a
+ cp $2
+ jr z, .asm_74f
+
+ xor a
+ ld [rSB], a
+ ld a, $3
+ ld [rDIV], a
+
+.asm_73f
+ ld a, [rDIV]
+ bit 7, a
+ jr nz, .asm_73f
+
+ ld a, 0 << rSC_ON
+ ld [rSC], a
+ ld a, 1 << rSC_ON
+ ld [rSC], a
+ jr .asm_752
+
+.asm_74f
+ xor a
+ ld [rSB], a
+
+.asm_752
+ ld a, $1
+ ld [$ffca], a
+ ld a, $fe
+ ld [hSerialSend], a
+
+.asm_75a
+ pop hl
+ pop de
+ pop bc
+ pop af
+ reti
+; 75f
+
+Function75f: ; 75f
+ ld a, $1
+ ld [$ffcc], a
+.asm_763
+ ld a, [hl]
+ ld [hSerialSend], a
+ call Function78a
+ push bc
+ ld b, a
+ inc hl
+ ld a, $30
+.asm_76e
+ dec a
+ jr nz, .asm_76e
+ ld a, [$ffcc]
+ and a
+ ld a, b
+ pop bc
+ jr z, .asm_782
+ dec hl
+ cp $fd
+ jr nz, .asm_763
+ xor a
+ ld [$ffcc], a
+ jr .asm_763
+
+.asm_782
+ ld [de], a
+ inc de
+ dec bc
+ ld a, b
+ or c
+ jr nz, .asm_763
+ ret
+; 78a
+
+Function78a: ; 78a
+ xor a
+ ld [$ffca], a
+ ld a, [$ffcb]
+ cp $2
+ jr nz, .asm_79b
+ ld a, $1
+ ld [rSC], a
+ ld a, $81
+ ld [rSC], a
+
+.asm_79b
+ ld a, [$ffca]
+ and a
+ jr nz, .asm_7e5
+ ld a, [$ffcb]
+ cp $1
+ jr nz, .asm_7c0
+ call Function82b
+ jr z, .asm_7c0
+ call .asm_825
+ push hl
+ ld hl, $cf5c
+ inc [hl]
+ jr nz, .asm_7b7
+ dec hl
+ inc [hl]
+
+.asm_7b7
+ pop hl
+ call Function82b
+ jr nz, .asm_79b
+ jp Function833
+
+.asm_7c0
+ ld a, [rIE]
+ and $f
+ cp $8
+ jr nz, .asm_79b
+ ld a, [$cf5d]
+ dec a
+ ld [$cf5d], a
+ jr nz, .asm_79b
+ ld a, [$cf5e]
+ dec a
+ ld [$cf5e], a
+ jr nz, .asm_79b
+ ld a, [$ffcb]
+ cp $1
+ jr z, .asm_7e5
+ ld a, $ff
+.asm_7e2
+ dec a
+ jr nz, .asm_7e2
+
+.asm_7e5
+ xor a
+ ld [$ffca], a
+ ld a, [rIE]
+ and $f
+ sub $8
+ jr nz, .asm_7f8
+ ld [$cf5d], a
+ ld a, $50
+ ld [$cf5e], a
+
+.asm_7f8
+ ld a, [hSerialReceive]
+ cp $fe
+ ret nz
+ call Function82b
+ jr z, .asm_813
+ push hl
+ ld hl, $cf5c
+ ld a, [hl]
+ dec a
+ ld [hld], a
+ inc a
+ jr nz, .asm_80d
+ dec [hl]
+
+.asm_80d
+ pop hl
+ call Function82b
+ jr z, Function833
+
+.asm_813
+ ld a, [rIE]
+ and $f
+ cp $8
+ ld a, $fe
+ ret z
+ ld a, [hl]
+ ld [hSerialSend], a
+ call DelayFrame
+ jp Function78a
+
+.asm_825
+ ld a, $f
+.asm_827
+ dec a
+ jr nz, .asm_827
+ ret
+; 82b
+
+Function82b: ; 82b
+ push hl
+ ld hl, $cf5b
+ ld a, [hli]
+ or [hl]
+ pop hl
+ ret
+; 833
+
+Function833: ; 833
+ dec a
+ ld [$cf5b], a
+ ld [$cf5c], a
+ ret
+; 83b
+
+Function83b: ; 83b
+ ld hl, $cf56
+ ld de, $cf51
+ ld c, $2
+ ld a, $1
+ ld [$ffcc], a
+.asm_847
+ call DelayFrame
+ ld a, [hl]
+ ld [hSerialSend], a
+ call Function78a
+ ld b, a
+ inc hl
+ ld a, [$ffcc]
+ and a
+ ld a, $0
+ ld [$ffcc], a
+ jr nz, .asm_847
+ ld a, b
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_847
+ ret
+; 862
+
+Function862: ; 862
+ call Function309d
+ callab Function4000
+ call Function87d
+ jp Function30b4
+; 871
+
+
+Function871: ; 871
+ call Function309d
+ callab Function4000
+ jp Function87d
+; 87d
+
+
+
+Function87d: ; 87d
+ ld a, $ff
+ ld [$cf52], a
+.asm_882
+ call Function8c1
+ call DelayFrame
+ call Function82b
+ jr z, .asm_89e
+ push hl
+ ld hl, $cf5c
+ dec [hl]
+ jr nz, .asm_89d
+ dec hl
+ dec [hl]
+ jr nz, .asm_89d
+ pop hl
+ xor a
+ jp Function833
+
+.asm_89d
+ pop hl
+
+.asm_89e
+ ld a, [$cf52]
+ inc a
+ jr z, .asm_882
+ ld b, $a
+.asm_8a6
+ call DelayFrame
+ call Function8c1
+ dec b
+ jr nz, .asm_8a6
+ ld b, $a
+.asm_8b1
+ call DelayFrame
+ call Function908
+ dec b
+ jr nz, .asm_8b1
+ ld a, [$cf52]
+ ld [$cf51], a
+ ret
+; 8c1
+
+Function8c1: ; 8c1
+ push bc
+ ld b, $60
+ ld a, [InLinkBattle]
+ cp $1
+ jr z, .asm_8d7
+ ld b, $60
+ jr c, .asm_8d7
+ cp $2
+ ld b, $70
+ jr z, .asm_8d7
+ ld b, $80
+
+.asm_8d7
+ call Function8f3
+ ld a, [$cf56]
+ add b
+ ld [hSerialSend], a
+ ld a, [$ffcb]
+ cp $2
+ jr nz, .asm_8ee
+ ld a, $1
+ ld [rSC], a
+ ld a, $81
+ ld [rSC], a
+
+.asm_8ee
+ call Function8f3
+ pop bc
+ ret
+; 8f3
+
+Function8f3: ; 8f3
+ ld a, [hSerialReceive]
+ ld [$cf51], a
+ and $f0
+ cp b
+ ret nz
+ xor a
+ ld [hSerialReceive], a
+ ld a, [$cf51]
+ and $f
+ ld [$cf52], a
+ ret
+; 908
+
+Function908: ; 908
+ xor a
+ ld [hSerialSend], a
+ ld a, [$ffcb]
+ cp $2
+ ret nz
+ ld a, $1
+ ld [rSC], a
+ ld a, $81
+ ld [rSC], a
+ ret
+; 919
+
+Function919: ; 919
+ ld a, [InLinkBattle]
+ and a
+ ret nz
+ ld a, $2
+ ld [rSB], a
+ xor a
+ ld [hSerialReceive], a
+ ld a, $0
+ ld [rSC], a
+ ld a, $80
+ ld [rSC], a
+ ret
+; 92e
+
+
--- /dev/null
+++ b/engine/time.asm
@@ -1,0 +1,311 @@
+; Functions relating to the timer interrupt and the real-time-clock.
+
+
+AskTimer: ; 591
+ push af
+ ld a, [$ffe9]
+ and a
+ jr z, .asm_59a
+ call Timer
+
+.asm_59a
+ pop af
+ reti
+; 59c
+
+
+LatchClock: ; 59c
+; latch clock counter data
+ ld a, 0
+ ld [MBC3LatchClock], a
+ ld a, 1
+ ld [MBC3LatchClock], a
+ ret
+; 5a7
+
+
+UpdateTime: ; 5a7
+ call GetClock
+ call FixDays
+ call FixTime
+ callba GetTimeOfDay
+ ret
+; 5b7
+
+
+GetClock: ; 5b7
+; store clock data in hRTCDayHi-hRTCSeconds
+
+; enable clock r/w
+ ld a, SRAM_ENABLE
+ ld [MBC3SRamEnable], a
+
+; clock data is 'backwards' in hram
+
+ call LatchClock
+ ld hl, MBC3SRamBank
+ ld de, MBC3RTC
+
+ ld [hl], RTC_S
+ ld a, [de]
+ and $3f
+ ld [hRTCSeconds], a
+
+ ld [hl], RTC_M
+ ld a, [de]
+ and $3f
+ ld [hRTCMinutes], a
+
+ ld [hl], RTC_H
+ ld a, [de]
+ and $1f
+ ld [hRTCHours], a
+
+ ld [hl], RTC_DL
+ ld a, [de]
+ ld [hRTCDayLo], a
+
+ ld [hl], RTC_DH
+ ld a, [de]
+ ld [hRTCDayHi], a
+
+; unlatch clock / disable clock r/w
+ call CloseSRAM
+ ret
+; 5e8
+
+
+FixDays: ; 5e8
+; fix day count
+; mod by 140
+
+; check if day count > 255 (bit 8 set)
+ ld a, [hRTCDayHi] ; DH
+ bit 0, a
+ jr z, .daylo
+; reset dh (bit 8)
+ res 0, a
+ ld [hRTCDayHi], a ; DH
+
+; mod 140
+; mod twice since bit 8 (DH) was set
+ ld a, [hRTCDayLo] ; DL
+.modh
+ sub 140
+ jr nc, .modh
+.modl
+ sub 140
+ jr nc, .modl
+ add 140
+
+; update dl
+ ld [hRTCDayLo], a ; DL
+
+; unknown output
+ ld a, $40 ; %1000000
+ jr .set
+
+.daylo
+; quit if fewer than 140 days have passed
+ ld a, [hRTCDayLo] ; DL
+ cp 140
+ jr c, .quit
+
+; mod 140
+.mod
+ sub 140
+ jr nc, .mod
+ add 140
+
+; update dl
+ ld [hRTCDayLo], a ; DL
+
+; unknown output
+ ld a, $20 ; %100000
+
+.set
+; update clock with modded day value
+ push af
+ call SetClock
+ pop af
+ scf
+ ret
+
+.quit
+ xor a
+ ret
+; 61d
+
+
+FixTime: ; 61d
+; add ingame time (set at newgame) to current time
+; day hr min sec
+; store time in CurDay, hHours, hMinutes, hSeconds
+
+; second
+ ld a, [hRTCSeconds] ; S
+ ld c, a
+ ld a, [StartSecond]
+ add c
+ sub 60
+ jr nc, .updatesec
+ add 60
+.updatesec
+ ld [hSeconds], a
+
+; minute
+ ccf ; carry is set, so turn it off
+ ld a, [hRTCMinutes] ; M
+ ld c, a
+ ld a, [StartMinute]
+ adc c
+ sub 60
+ jr nc, .updatemin
+ add 60
+.updatemin
+ ld [hMinutes], a
+
+; hour
+ ccf ; carry is set, so turn it off
+ ld a, [hRTCHours] ; H
+ ld c, a
+ ld a, [StartHour]
+ adc c
+ sub 24
+ jr nc, .updatehr
+ add 24
+.updatehr
+ ld [hHours], a
+
+; day
+ ccf ; carry is set, so turn it off
+ ld a, [hRTCDayLo] ; DL
+ ld c, a
+ ld a, [StartDay]
+ adc c
+ ld [CurDay], a
+ ret
+; 658
+
+Function658: ; 658
+ xor a
+ ld [StringBuffer2], a
+ ld a, $0
+ ld [$d089], a
+ jr .asm_677
+
+ call UpdateTime
+ ld a, [hHours]
+ ld [$d087], a
+ ld a, [hMinutes]
+ ld [$d088], a
+ ld a, [hSeconds]
+ ld [$d089], a
+ jr .asm_677
+
+.asm_677
+ ld a, $5
+ ld hl, $40ed
+ rst FarCall
+ ret
+; 67e
+
+
+
+Function67e: ; 67e
+ call Function685
+ call SetClock
+ ret
+; 685
+
+Function685: ; 685
+ xor a
+ ld [hRTCSeconds], a
+ ld [hRTCMinutes], a
+ ld [hRTCHours], a
+ ld [hRTCDayLo], a
+ ld [hRTCDayHi], a
+ ret
+; 691
+
+
+SetClock: ; 691
+; set clock data from hram
+
+; enable clock r/w
+ ld a, SRAM_ENABLE
+ ld [MBC3SRamEnable], a
+
+; set clock data
+; stored 'backwards' in hram
+
+ call LatchClock
+ ld hl, MBC3SRamBank
+ ld de, MBC3RTC
+
+; seems to be a halt check that got partially commented out
+; this block is totally pointless
+ ld [hl], RTC_DH
+ ld a, [de]
+ bit 6, a ; halt
+ ld [de], a
+
+; seconds
+ ld [hl], RTC_S
+ ld a, [hRTCSeconds]
+ ld [de], a
+; minutes
+ ld [hl], RTC_M
+ ld a, [hRTCMinutes]
+ ld [de], a
+; hours
+ ld [hl], RTC_H
+ ld a, [hRTCHours]
+ ld [de], a
+; day lo
+ ld [hl], RTC_DL
+ ld a, [hRTCDayLo]
+ ld [de], a
+; day hi
+ ld [hl], RTC_DH
+ ld a, [hRTCDayHi]
+ res 6, a ; make sure timer is active
+ ld [de], a
+
+; cleanup
+ call CloseSRAM ; unlatch clock, disable clock r/w
+ ret
+; 6c4
+
+
+Function6c4: ; 6c4
+ xor a
+ push af
+ ld a, $0
+ call GetSRAMBank
+ pop af
+ ld [$ac60], a
+ call CloseSRAM
+ ret
+; 6d3
+
+Function6d3: ; 6d3
+ ld hl, $ac60
+ push af
+ ld a, $0
+ call GetSRAMBank
+ pop af
+ or [hl]
+ ld [hl], a
+ call CloseSRAM
+ ret
+; 6e3
+
+Function6e3: ; 6e3
+ ld a, $0
+ call GetSRAMBank
+ ld a, [$ac60]
+ call CloseSRAM
+ ret
+; 6ef
+
--- a/engine/vblank.asm
+++ b/engine/vblank.asm
@@ -6,6 +6,8 @@
; This prevents the display and audio output from lagging.
+
+VBlank: ; 283
push af
push bc
push de
@@ -26,7 +28,7 @@
ld l, a
; down to business
- call JpHl
+ call _hl_
; since this is called once per frame
call GameTimer