ref: dac95cb42bb8bc953c7a1e1d345a549846d51abf
parent: 57113a7651ba8a7f88e119ca3de7acb45a77db69
parent: 1185d69819af3493fe8ace9f576fee4b420db55e
author: U-Daniel-PC\Daniel <corrnondacqb@yahoo.com>
date: Fri Sep 19 19:19:05 EDT 2014
Merge branch 'master' of https://github.com/iimarckus/pokered
--- a/Makefile
+++ b/Makefile
@@ -1,12 +1,52 @@
+# Build Red/Blue. Yellow is WIP.
+roms := pokered.gbc pokeblue.gbc
+
+
+.PHONY: all clean red blue yellow compare
+
+all: $(roms)
+red: pokered.gbc
+blue: pokeblue.gbc
+yellow: pokeyellow.gbc
+
+versions := red blue yellow
+
+
+# Header options for rgbfix.
+dmg_opt = -jsv -k 01 -l 0x33 -m 0x13 -p 0 -r 03
+cgb_opt = -cjsv -k 01 -l 0x33 -m 0x1b -p 0 -r 03
+
+red_opt = $(dmg_opt) -t "POKEMON RED"
+blue_opt = $(dmg_opt) -t "POKEMON BLUE"
+yellow_opt = $(cgb_opt) -t "POKEMON YELLOW"
+
+
+
+# If your default python is 3, you may want to change this to python27.
PYTHON := python
-MD5 := md5sum -c --quiet
+# md5sum -c is used to compare rom hashes. The options may vary across platforms.
+MD5 := md5sum -c --quiet
+
+
+# The compare target is a shortcut to check that the build matches the original roms exactly.
+# This is for contributors to make sure a change didn't affect the contents of the rom.
+# More thorough comparison can be made by diffing the output of hexdump -C against both roms.
+compare:
+ @$(MD5) roms.md5
+
+
+# Clear the default suffixes.
.SUFFIXES:
-.SUFFIXES: .asm .tx .o .gbc
-.PHONY: all clean red blue yellow compare
-.PRECIOUS: %.2bpp
+.SUFFIXES: .asm .tx .o .gbc .png .2bpp .1bpp .pic
+
+# Secondary expansion is required for dependency variables in object rules.
.SECONDEXPANSION:
+# Suppress annoying intermediate file deletion messages.
+.PRECIOUS: %.2bpp
+
+# Filepath shortcuts to avoid overly long recipes.
poketools := extras/pokemontools
gfx := $(PYTHON) $(poketools)/gfx.py
pic := $(PYTHON) $(poketools)/pic.py
@@ -14,8 +54,9 @@
pre := $(PYTHON) prequeue.py
-versions := red blue yellow
+# Collect file dependencies for objects in red/, blue/ and yellow/.
+# These aren't provided by rgbds by default, so we have to look for file includes ourselves.
$(foreach ver, $(versions), \
$(eval $(ver)_asm := $(shell find $(ver) -iname '*.asm')) \
$(eval $(ver)_obj := $($(ver)_asm:.asm=.o)) \
@@ -26,25 +67,22 @@
)
-roms := pokered.gbc pokeblue.gbc
+# Image files are added to a queue to reduce build time. They're converted when building parent objects.
+%.png: ;
+%.2bpp: %.png ; $(eval 2bppq += $<) @rm -f $@
+%.1bpp: %.png ; $(eval 1bppq += $<) @rm -f $@
+%.pic: %.2bpp ; $(eval picq += $<) @rm -f $@
-all: $(roms)
-red: pokered.gbc
-blue: pokeblue.gbc
-yellow: pokeyellow.gbc
-
-compare:
- @$(MD5) roms.md5
-clean:
- rm -f $(roms) $(all_obj)
- find . \( -iname '*.tx' -o -iname '*.1bpp' -o -iname '*.2bpp' -o -iname '*.pic' \) -exec rm {} +
-
-
+# Source files are not fed directly into rgbasm.
+# A python preprocessor runs over them first, replacing ascii strings with correct character codes.
+# It spits out the new file with extension .tx.
+# The text preprocessor also uses a queue.
%.asm: ;
-%.tx: %.asm
- $(eval txq += $<)
- @rm -f $@
+%.tx: %.asm ; $(eval txq += $<) @rm -f $@
+# Assemble source files into objects.
+# Queue payloads are here. These are made silent since there may be hundreds of targets.
+# Use rgbasm -h to use halts without nops.
$(all_obj): $$*.tx $$(patsubst %.asm, %.tx, $$($$*_dep))
@$(pre) $(txq); $(eval txq :=)
@$(gfx) 2bpp $(2bppq); $(eval 2bppq :=)
@@ -53,29 +91,16 @@
rgbasm -h -o $@ $*.tx
-link = rgblink -n $*.sym -m $*.map
-dmg_opt := -jsv -k 01 -l 0x33 -m 0x13 -p 0 -r 03
-cgb_opt := -cjsv -k 01 -l 0x33 -m 0x1b -p 0 -r 03
+# Link objects together to build a rom.
-pokered.gbc: $(red_obj)
- $(link) -o $@ $^
- rgbfix $(dmg_opt) -t "POKEMON RED" $@
+# Make a symfile for debugging. rgblink will segfault if a mapfile isn't made too.
+link = rgblink -n poke$*.sym -m poke$*.map
-pokeblue.gbc: $(blue_obj)
+poke%.gbc: $$(%_obj)
$(link) -o $@ $^
- rgbfix $(dmg_opt) -t "POKEMON BLUE" $@
+ rgbfix $($*_opt) $@
-pokeyellow.gbc: $(yellow_obj)
- $(link) -o $@ $^
- rgbfix $(cgb_opt) -t "POKEMON YELLOW" $@
-
-%.2bpp: %.png
- $(eval 2bppq += $<)
- @rm -f $@
-%.1bpp: %.png
- $(eval 1bppq += $<)
- @rm -f $@
-%.pic: %.2bpp
- $(eval picq += $<)
- @rm -f $@
+clean:
+ rm -f $(roms) $(all_obj)
+ find . \( -iname '*.tx' -o -iname '*.1bpp' -o -iname '*.2bpp' -o -iname '*.pic' \) -exec rm {} +
--- a/constants/misc_constants.asm
+++ b/constants/misc_constants.asm
@@ -1,12 +1,3 @@
-A_BUTTON EQU %00000001
-B_BUTTON EQU %00000010
-SELECT EQU %00000100
-START EQU %00001000
-D_RIGHT EQU %00010000
-D_LEFT EQU %00100000
-D_UP EQU %01000000
-D_DOWN EQU %10000000
-
MAX_LEVEL EQU 100
NUM_MOVES EQU 4
@@ -18,3 +9,16 @@
HOF_MON EQU $10
HOF_TEAM EQU PARTY_LENGTH * HOF_MON
NUM_HOF_TEAMS EQU 50
+
+
+A_BUTTON EQU %00000001
+B_BUTTON EQU %00000010
+SELECT EQU %00000100
+START EQU %00001000
+D_RIGHT EQU %00010000
+D_LEFT EQU %00100000
+D_UP EQU %01000000
+D_DOWN EQU %10000000
+
+SCREEN_WIDTH EQU 20
+SCREEN_HEIGHT EQU 18
--- a/constants/move_constants.asm
+++ b/constants/move_constants.asm
@@ -1,184 +1,210 @@
-NUM_ATTACKS EQU $A4
+const_value = 1
-POUND EQU $01
-KARATE_CHOP EQU $02
-DOUBLESLAP EQU $03
-COMET_PUNCH EQU $04
-MEGA_PUNCH EQU $05
-PAY_DAY EQU $06
-FIRE_PUNCH EQU $07
-ICE_PUNCH EQU $08
-THUNDERPUNCH EQU $09
-SCRATCH EQU $0A
-VICEGRIP EQU $0B
-GUILLOTINE EQU $0C
-RAZOR_WIND EQU $0D
-SWORDS_DANCE EQU $0E
-CUT EQU $0F
-GUST EQU $10
-WING_ATTACK EQU $11
-WHIRLWIND EQU $12
-FLY EQU $13
-BIND EQU $14
-SLAM EQU $15
-VINE_WHIP EQU $16
-STOMP EQU $17
-DOUBLE_KICK EQU $18
-MEGA_KICK EQU $19
-JUMP_KICK EQU $1A
-ROLLING_KICK EQU $1B
-SAND_ATTACK EQU $1C
-HEADBUTT EQU $1D
-HORN_ATTACK EQU $1E
-FURY_ATTACK EQU $1F
-HORN_DRILL EQU $20
-TACKLE EQU $21
-BODY_SLAM EQU $22
-WRAP EQU $23
-TAKE_DOWN EQU $24
-THRASH EQU $25
-DOUBLE_EDGE EQU $26
-TAIL_WHIP EQU $27
-POISON_STING EQU $28
-TWINEEDLE EQU $29
-PIN_MISSILE EQU $2A
-LEER EQU $2B
-BITE EQU $2C
-GROWL EQU $2D
-ROAR EQU $2E
-SING EQU $2F
-SUPERSONIC EQU $30
-SONICBOOM EQU $31
-DISABLE EQU $32
-ACID EQU $33
-EMBER EQU $34
-FLAMETHROWER EQU $35
-MIST EQU $36
-WATER_GUN EQU $37
-HYDRO_PUMP EQU $38
-SURF EQU $39
-ICE_BEAM EQU $3A
-BLIZZARD EQU $3B
-PSYBEAM EQU $3C
-BUBBLEBEAM EQU $3D
-AURORA_BEAM EQU $3E
-HYPER_BEAM EQU $3F
-PECK EQU $40
-DRILL_PECK EQU $41
-SUBMISSION EQU $42
-LOW_KICK EQU $43
-COUNTER EQU $44
-SEISMIC_TOSS EQU $45
-STRENGTH EQU $46
-ABSORB EQU $47
-MEGA_DRAIN EQU $48
-LEECH_SEED EQU $49
-GROWTH EQU $4A
-RAZOR_LEAF EQU $4B
-SOLARBEAM EQU $4C
-POISONPOWDER EQU $4D
-STUN_SPORE EQU $4E
-SLEEP_POWDER EQU $4F
-PETAL_DANCE EQU $50
-STRING_SHOT EQU $51
-DRAGON_RAGE EQU $52
-FIRE_SPIN EQU $53
-THUNDERSHOCK EQU $54
-THUNDERBOLT EQU $55
-THUNDER_WAVE EQU $56
-THUNDER EQU $57
-ROCK_THROW EQU $58
-EARTHQUAKE EQU $59
-FISSURE EQU $5A
-DIG EQU $5B
-TOXIC EQU $5C
-CONFUSION EQU $5D
-PSYCHIC_M EQU $5E
-HYPNOSIS EQU $5F
-MEDITATE EQU $60
-AGILITY EQU $61
-QUICK_ATTACK EQU $62
-RAGE EQU $63
-TELEPORT EQU $64
-NIGHT_SHADE EQU $65
-MIMIC EQU $66
-SCREECH EQU $67
-DOUBLE_TEAM EQU $68
-RECOVER EQU $69
-HARDEN EQU $6A
-MINIMIZE EQU $6B
-SMOKESCREEN EQU $6C
-CONFUSE_RAY EQU $6D
-WITHDRAW EQU $6E
-DEFENSE_CURL EQU $6F
-BARRIER EQU $70
-LIGHT_SCREEN EQU $71
-HAZE EQU $72
-REFLECT EQU $73
-FOCUS_ENERGY EQU $74
-BIDE EQU $75
-METRONOME EQU $76
-MIRROR_MOVE EQU $77
-SELFDESTRUCT EQU $78
-EGG_BOMB EQU $79
-LICK EQU $7A
-SMOG EQU $7B
-SLUDGE EQU $7C
-BONE_CLUB EQU $7D
-FIRE_BLAST EQU $7E
-WATERFALL EQU $7F
-CLAMP EQU $80
-SWIFT EQU $81
-SKULL_BASH EQU $82
-SPIKE_CANNON EQU $83
-CONSTRICT EQU $84
-AMNESIA EQU $85
-KINESIS EQU $86
-SOFTBOILED EQU $87
-HI_JUMP_KICK EQU $88
-GLARE EQU $89
-DREAM_EATER EQU $8A
-POISON_GAS EQU $8B
-BARRAGE EQU $8C
-LEECH_LIFE EQU $8D
-LOVELY_KISS EQU $8E
-SKY_ATTACK EQU $8F
-TRANSFORM EQU $90
-BUBBLE EQU $91
-DIZZY_PUNCH EQU $92
-SPORE EQU $93
-FLASH EQU $94
-PSYWAVE EQU $95
-SPLASH EQU $96
-ACID_ARMOR EQU $97
-CRABHAMMER EQU $98
-EXPLOSION EQU $99
-FURY_SWIPES EQU $9A
-BONEMERANG EQU $9B
-REST EQU $9C
-ROCK_SLIDE EQU $9D
-HYPER_FANG EQU $9E
-SHARPEN EQU $9F
-CONVERSION EQU $A0
-TRI_ATTACK EQU $A1
-SUPER_FANG EQU $A2
-SLASH EQU $A3
-SUBSTITUTE EQU $A4
-STRUGGLE EQU $A5
+ const POUND
+ const KARATE_CHOP
+ const DOUBLESLAP
+ const COMET_PUNCH
+ const MEGA_PUNCH
+ const PAY_DAY
+ const FIRE_PUNCH
+ const ICE_PUNCH
+ const THUNDERPUNCH
+ const SCRATCH
+ const VICEGRIP
+ const GUILLOTINE
+ const RAZOR_WIND
+ const SWORDS_DANCE
+ const CUT
+ const GUST
+ const WING_ATTACK
+ const WHIRLWIND
+ const FLY
+ const BIND
+ const SLAM
+ const VINE_WHIP
+ const STOMP
+ const DOUBLE_KICK
+ const MEGA_KICK
+ const JUMP_KICK
+ const ROLLING_KICK
+ const SAND_ATTACK
+ const HEADBUTT
+ const HORN_ATTACK
+ const FURY_ATTACK
+ const HORN_DRILL
+ const TACKLE
+ const BODY_SLAM
+ const WRAP
+ const TAKE_DOWN
+ const THRASH
+ const DOUBLE_EDGE
+ const TAIL_WHIP
+ const POISON_STING
+ const TWINEEDLE
+ const PIN_MISSILE
+ const LEER
+ const BITE
+ const GROWL
+ const ROAR
+ const SING
+ const SUPERSONIC
+ const SONICBOOM
+ const DISABLE
+ const ACID
+ const EMBER
+ const FLAMETHROWER
+ const MIST
+ const WATER_GUN
+ const HYDRO_PUMP
+ const SURF
+ const ICE_BEAM
+ const BLIZZARD
+ const PSYBEAM
+ const BUBBLEBEAM
+ const AURORA_BEAM
+ const HYPER_BEAM
+ const PECK
+ const DRILL_PECK
+ const SUBMISSION
+ const LOW_KICK
+ const COUNTER
+ const SEISMIC_TOSS
+ const STRENGTH
+ const ABSORB
+ const MEGA_DRAIN
+ const LEECH_SEED
+ const GROWTH
+ const RAZOR_LEAF
+ const SOLARBEAM
+ const POISONPOWDER
+ const STUN_SPORE
+ const SLEEP_POWDER
+ const PETAL_DANCE
+ const STRING_SHOT
+ const DRAGON_RAGE
+ const FIRE_SPIN
+ const THUNDERSHOCK
+ const THUNDERBOLT
+ const THUNDER_WAVE
+ const THUNDER
+ const ROCK_THROW
+ const EARTHQUAKE
+ const FISSURE
+ const DIG
+ const TOXIC
+ const CONFUSION
+ const PSYCHIC_M
+ const HYPNOSIS
+ const MEDITATE
+ const AGILITY
+ const QUICK_ATTACK
+ const RAGE
+ const TELEPORT
+ const NIGHT_SHADE
+ const MIMIC
+ const SCREECH
+ const DOUBLE_TEAM
+ const RECOVER
+ const HARDEN
+ const MINIMIZE
+ const SMOKESCREEN
+ const CONFUSE_RAY
+ const WITHDRAW
+ const DEFENSE_CURL
+ const BARRIER
+ const LIGHT_SCREEN
+ const HAZE
+ const REFLECT
+ const FOCUS_ENERGY
+ const BIDE
+ const METRONOME
+ const MIRROR_MOVE
+ const SELFDESTRUCT
+ const EGG_BOMB
+ const LICK
+ const SMOG
+ const SLUDGE
+ const BONE_CLUB
+ const FIRE_BLAST
+ const WATERFALL
+ const CLAMP
+ const SWIFT
+ const SKULL_BASH
+ const SPIKE_CANNON
+ const CONSTRICT
+ const AMNESIA
+ const KINESIS
+ const SOFTBOILED
+ const HI_JUMP_KICK
+ const GLARE
+ const DREAM_EATER
+ const POISON_GAS
+ const BARRAGE
+ const LEECH_LIFE
+ const LOVELY_KISS
+ const SKY_ATTACK
+ const TRANSFORM
+ const BUBBLE
+ const DIZZY_PUNCH
+ const SPORE
+ const FLASH
+ const PSYWAVE
+ const SPLASH
+ const ACID_ARMOR
+ const CRABHAMMER
+ const EXPLOSION
+ const FURY_SWIPES
+ const BONEMERANG
+ const REST
+ const ROCK_SLIDE
+ const HYPER_FANG
+ const SHARPEN
+ const CONVERSION
+ const TRI_ATTACK
+ const SUPER_FANG
+ const SLASH
+ const SUBSTITUTE
-; these do double duty as animation identifiers
-SHOWPIC_ANIM EQU $A6 ; redraw monster pic
-STATUS_AFFECTED_ANIM EQU $A7 ; effect when monster receives a status aliment
-XSTATITEM_ANIM EQU $AE ; use X Attack/Defense/Speed/Special
-BURN_PSN_ANIM EQU $BA ; Plays when a monster is burned or poisoned
-SLP_ANIM EQU $BD ; sleeping monster
-CONF_ANIM EQU $BF ; confused monster
-TOSS_ANIM EQU $C1 ; toss Poké Ball
-SHAKE_ANIM EQU $C2 ; shaking Poké Ball when catching monster
-POOF_ANIM EQU $C3 ; puff of smoke
-BLOCKBALL_ANIM EQU $C4 ; trainer knocks away Poké Ball
-GREATTOSS_ANIM EQU $C5 ; toss Great Ball
-ULTRATOSS_ANIM EQU $C6 ; toss Ultra Ball or Master Ball
-HIDEPIC_ANIM EQU $C8 ; monster disappears
-ROCK_ANIM EQU $C9 ; throw rock
-BAIT_ANIM EQU $CA ; throw bait
+NUM_ATTACKS EQU const_value + -1
+
+ const STRUGGLE
+
+ ; Moves do double duty as animation identifiers.
+
+ const SHOWPIC_ANIM
+ const STATUS_AFFECTED_ANIM
+ const ANIM_A8
+ const ANIM_A9
+ const ANIM_AA
+ const ANIM_AB
+ const ANIM_AC
+ const ANIM_AD
+ const XSTATITEM_ANIM ; use X Attack/Defense/Speed/Special
+ const ANIM_AF
+ const ANIM_B0
+ const ANIM_B1
+ const ANIM_B2
+ const ANIM_B3
+ const ANIM_B4
+ const ANIM_B5
+ const ANIM_B6
+ const ANIM_B7
+ const ANIM_B8
+ const ANIM_B9
+ const BURN_PSN_ANIM ; Plays when a monster is burned or poisoned
+ const ANIM_BB
+ const ANIM_BC
+ const SLP_ANIM ; sleeping monster
+ const ANIM_BE
+ const CONF_ANIM ; confused monster
+ const ANIM_C0
+ const TOSS_ANIM ; toss Poké Ball
+ const SHAKE_ANIM ; shaking Poké Ball when catching monster
+ const POOF_ANIM ; puff of smoke
+ const BLOCKBALL_ANIM ; trainer knocks away Poké Ball
+ const GREATTOSS_ANIM ; toss Great Ball
+ const ULTRATOSS_ANIM ; toss Ultra Ball or Master Ball
+ const ANIM_C7
+ const HIDEPIC_ANIM ; monster disappears
+ const ROCK_ANIM ; throw rock
+ const BAIT_ANIM ; throw bait
--- a/data/moves.asm
+++ b/data/moves.asm
@@ -1,168 +1,177 @@
-Moves: ; 38000 (e:4000)
-; characteristics of each move
-; animation, effect, power, type, accuracy, PP
- db POUND ,NO_ADDITIONAL_EFFECT ,$28,NORMAL, $FF,35
- db KARATE_CHOP ,NO_ADDITIONAL_EFFECT ,$32,NORMAL, $FF,25
- db DOUBLESLAP ,TWO_TO_FIVE_ATTACKS_EFFECT,$0F,NORMAL, $D8,10
- db COMET_PUNCH ,TWO_TO_FIVE_ATTACKS_EFFECT,$12,NORMAL, $D8,15
- db MEGA_PUNCH ,NO_ADDITIONAL_EFFECT ,$50,NORMAL, $D8,20
- db PAY_DAY ,PAY_DAY_EFFECT ,$28,NORMAL, $FF,20
- db FIRE_PUNCH ,BURN_SIDE_EFFECT1 ,$4B,FIRE, $FF,15
- db ICE_PUNCH ,FREEZE_SIDE_EFFECT ,$4B,ICE, $FF,15
- db THUNDERPUNCH,PARALYZE_SIDE_EFFECT1 ,$4B,ELECTRIC,$FF,15
- db SCRATCH ,NO_ADDITIONAL_EFFECT ,$28,NORMAL, $FF,35
- db VICEGRIP ,NO_ADDITIONAL_EFFECT ,$37,NORMAL, $FF,30
- db GUILLOTINE ,OHKO_EFFECT ,$01,NORMAL, $4C,5
- db RAZOR_WIND ,CHARGE_EFFECT ,$50,NORMAL, $BF,10
- db SWORDS_DANCE,ATTACK_UP2_EFFECT ,$00,NORMAL, $FF,30
- db CUT ,NO_ADDITIONAL_EFFECT ,$32,NORMAL, $F2,30
- db GUST ,NO_ADDITIONAL_EFFECT ,$28,NORMAL, $FF,35
- db WING_ATTACK ,NO_ADDITIONAL_EFFECT ,$23,FLYING, $FF,35
- db WHIRLWIND ,SWITCH_AND_TELEPORT_EFFECT,$00,NORMAL, $D8,20
- db FLY ,FLY_EFFECT ,$46,FLYING, $F2,15
- db BIND ,TRAPPING_EFFECT ,$0F,NORMAL, $BF,20
- db SLAM ,NO_ADDITIONAL_EFFECT ,$50,NORMAL, $BF,20
- db VINE_WHIP ,NO_ADDITIONAL_EFFECT ,$23,GRASS, $FF,10
- db STOMP ,FLINCH_SIDE_EFFECT2 ,$41,NORMAL, $FF,20
- db DOUBLE_KICK ,ATTACK_TWICE_EFFECT ,$1E,FIGHTING,$FF,30
- db MEGA_KICK ,NO_ADDITIONAL_EFFECT ,$78,NORMAL, $BF,5
- db JUMP_KICK ,JUMP_KICK_EFFECT ,$46,FIGHTING,$F2,25
- db ROLLING_KICK,FLINCH_SIDE_EFFECT2 ,$3C,FIGHTING,$D8,15
- db SAND_ATTACK ,ACCURACY_DOWN1_EFFECT ,$00,NORMAL, $FF,15
- db HEADBUTT ,FLINCH_SIDE_EFFECT2 ,$46,NORMAL, $FF,15
- db HORN_ATTACK ,NO_ADDITIONAL_EFFECT ,$41,NORMAL, $FF,25
- db FURY_ATTACK ,TWO_TO_FIVE_ATTACKS_EFFECT,$0F,NORMAL, $D8,20
- db HORN_DRILL ,OHKO_EFFECT ,$01,NORMAL, $4C,5
- db TACKLE ,NO_ADDITIONAL_EFFECT ,$23,NORMAL, $F2,35
- db BODY_SLAM ,PARALYZE_SIDE_EFFECT2 ,$55,NORMAL, $FF,15
- db WRAP ,TRAPPING_EFFECT ,$0F,NORMAL, $D8,20
- db TAKE_DOWN ,RECOIL_EFFECT ,$5A,NORMAL, $D8,20
- db THRASH ,THRASH_PETAL_DANCE_EFFECT ,$5A,NORMAL, $FF,20
- db DOUBLE_EDGE ,RECOIL_EFFECT ,$64,NORMAL, $FF,15
- db TAIL_WHIP ,DEFENSE_DOWN1_EFFECT ,$00,NORMAL, $FF,30
- db POISON_STING,POISON_SIDE_EFFECT1 ,$0F,POISON, $FF,35
- db TWINEEDLE ,TWINEEDLE_EFFECT ,$19,BUG, $FF,20
- db PIN_MISSILE ,TWO_TO_FIVE_ATTACKS_EFFECT,$0E,BUG, $D8,20
- db LEER ,DEFENSE_DOWN1_EFFECT ,$00,NORMAL, $FF,30
- db BITE ,FLINCH_SIDE_EFFECT1 ,$3C,NORMAL, $FF,25
- db GROWL ,ATTACK_DOWN1_EFFECT ,$00,NORMAL, $FF,40
- db ROAR ,SWITCH_AND_TELEPORT_EFFECT,$00,NORMAL, $FF,20
- db SING ,SLEEP_EFFECT ,$00,NORMAL, $8C,15
- db SUPERSONIC ,CONFUSION_EFFECT ,$00,NORMAL, $8C,20
- db SONICBOOM ,SPECIAL_DAMAGE_EFFECT ,$01,NORMAL, $E5,20
- db DISABLE ,DISABLE_EFFECT ,$00,NORMAL, $8C,20
- db ACID ,DEFENSE_DOWN_SIDE_EFFECT ,$28,POISON, $FF,30
- db EMBER ,BURN_SIDE_EFFECT1 ,$28,FIRE, $FF,25
- db FLAMETHROWER,BURN_SIDE_EFFECT1 ,$5F,FIRE, $FF,15
- db MIST ,MIST_EFFECT ,$00,ICE, $FF,30
- db WATER_GUN ,NO_ADDITIONAL_EFFECT ,$28,WATER, $FF,25
- db HYDRO_PUMP ,NO_ADDITIONAL_EFFECT ,$78,WATER, $CC,5
- db SURF ,NO_ADDITIONAL_EFFECT ,$5F,WATER, $FF,15
- db ICE_BEAM ,FREEZE_SIDE_EFFECT ,$5F,ICE, $FF,10
- db BLIZZARD ,FREEZE_SIDE_EFFECT ,$78,ICE, $E5,5
- db PSYBEAM ,CONFUSION_SIDE_EFFECT ,$41,PSYCHIC, $FF,20
- db BUBBLEBEAM ,SPEED_DOWN_SIDE_EFFECT ,$41,WATER, $FF,20
- db AURORA_BEAM ,ATTACK_DOWN_SIDE_EFFECT ,$41,ICE, $FF,20
- db HYPER_BEAM ,HYPER_BEAM_EFFECT ,$96,NORMAL, $E5,5
- db PECK ,NO_ADDITIONAL_EFFECT ,$23,FLYING, $FF,35
- db DRILL_PECK ,NO_ADDITIONAL_EFFECT ,$50,FLYING, $FF,20
- db SUBMISSION ,RECOIL_EFFECT ,$50,FIGHTING,$CC,25
- db LOW_KICK ,FLINCH_SIDE_EFFECT2 ,$32,FIGHTING,$E5,20
- db COUNTER ,NO_ADDITIONAL_EFFECT ,$01,FIGHTING,$FF,20
- db SEISMIC_TOSS,SPECIAL_DAMAGE_EFFECT ,$01,FIGHTING,$FF,20
- db STRENGTH ,NO_ADDITIONAL_EFFECT ,$50,NORMAL, $FF,15
- db ABSORB ,DRAIN_HP_EFFECT ,$14,GRASS, $FF,20
- db MEGA_DRAIN ,DRAIN_HP_EFFECT ,$28,GRASS, $FF,10
- db LEECH_SEED ,LEECH_SEED_EFFECT ,$00,GRASS, $E5,10
- db GROWTH ,SPECIAL_UP1_EFFECT ,$00,NORMAL, $FF,40
- db RAZOR_LEAF ,NO_ADDITIONAL_EFFECT ,$37,GRASS, $F2,25
- db SOLARBEAM ,CHARGE_EFFECT ,$78,GRASS, $FF,10
- db POISONPOWDER,POISON_EFFECT ,$00,POISON, $BF,35
- db STUN_SPORE ,PARALYZE_EFFECT ,$00,GRASS, $BF,30
- db SLEEP_POWDER,SLEEP_EFFECT ,$00,GRASS, $BF,15
- db PETAL_DANCE ,THRASH_PETAL_DANCE_EFFECT ,$46,GRASS, $FF,20
- db STRING_SHOT ,SPEED_DOWN1_EFFECT ,$00,BUG, $F2,40
- db DRAGON_RAGE ,SPECIAL_DAMAGE_EFFECT ,$01,DRAGON, $FF,10
- db FIRE_SPIN ,TRAPPING_EFFECT ,$0F,FIRE, $B2,15
- db THUNDERSHOCK,PARALYZE_SIDE_EFFECT1 ,$28,ELECTRIC,$FF,30
- db THUNDERBOLT ,PARALYZE_SIDE_EFFECT1 ,$5F,ELECTRIC,$FF,15
- db THUNDER_WAVE,PARALYZE_EFFECT ,$00,ELECTRIC,$FF,20
- db THUNDER ,PARALYZE_SIDE_EFFECT1 ,$78,ELECTRIC,$B2,10
- db ROCK_THROW ,NO_ADDITIONAL_EFFECT ,$32,ROCK, $A5,15
- db EARTHQUAKE ,NO_ADDITIONAL_EFFECT ,$64,GROUND, $FF,10
- db FISSURE ,OHKO_EFFECT ,$01,GROUND, $4C,5
- db DIG ,CHARGE_EFFECT ,$64,GROUND, $FF,10
- db TOXIC ,POISON_EFFECT ,$00,POISON, $D8,10
- db CONFUSION ,CONFUSION_SIDE_EFFECT ,$32,PSYCHIC, $FF,25
- db PSYCHIC_M ,SPECIAL_DOWN_SIDE_EFFECT ,$5A,PSYCHIC, $FF,10
- db HYPNOSIS ,SLEEP_EFFECT ,$00,PSYCHIC, $99,20
- db MEDITATE ,ATTACK_UP1_EFFECT ,$00,PSYCHIC, $FF,40
- db AGILITY ,SPEED_UP2_EFFECT ,$00,PSYCHIC, $FF,30
- db QUICK_ATTACK,NO_ADDITIONAL_EFFECT ,$28,NORMAL, $FF,30
- db RAGE ,RAGE_EFFECT ,$14,NORMAL, $FF,20
- db TELEPORT ,SWITCH_AND_TELEPORT_EFFECT,$00,PSYCHIC, $FF,20
- db NIGHT_SHADE ,SPECIAL_DAMAGE_EFFECT ,$00,GHOST, $FF,15
- db MIMIC ,MIMIC_EFFECT ,$00,NORMAL, $FF,10
- db SCREECH ,DEFENSE_DOWN2_EFFECT ,$00,NORMAL, $D8,40
- db DOUBLE_TEAM ,EVASION_UP1_EFFECT ,$00,NORMAL, $FF,15
- db RECOVER ,HEAL_EFFECT ,$00,NORMAL, $FF,20
- db HARDEN ,DEFENSE_UP1_EFFECT ,$00,NORMAL, $FF,30
- db MINIMIZE ,EVASION_UP1_EFFECT ,$00,NORMAL, $FF,20
- db SMOKESCREEN ,ACCURACY_DOWN1_EFFECT ,$00,NORMAL, $FF,20
- db CONFUSE_RAY ,CONFUSION_EFFECT ,$00,GHOST, $FF,10
- db WITHDRAW ,DEFENSE_UP1_EFFECT ,$00,WATER, $FF,40
- db DEFENSE_CURL,DEFENSE_UP1_EFFECT ,$00,NORMAL, $FF,40
- db BARRIER ,DEFENSE_UP2_EFFECT ,$00,PSYCHIC, $FF,30
- db LIGHT_SCREEN,LIGHT_SCREEN_EFFECT ,$00,PSYCHIC, $FF,30
- db HAZE ,HAZE_EFFECT ,$00,ICE, $FF,30
- db REFLECT ,REFLECT_EFFECT ,$00,PSYCHIC, $FF,20
- db FOCUS_ENERGY,FOCUS_ENERGY_EFFECT ,$00,NORMAL, $FF,30
- db BIDE ,BIDE_EFFECT ,$00,NORMAL, $FF,10
- db METRONOME ,METRONOME_EFFECT ,$00,NORMAL, $FF,10
- db MIRROR_MOVE ,MIRROR_MOVE_EFFECT ,$00,FLYING, $FF,20
- db SELFDESTRUCT,EXPLODE_EFFECT ,$82,NORMAL, $FF,5
- db EGG_BOMB ,NO_ADDITIONAL_EFFECT ,$64,NORMAL, $BF,10
- db LICK ,PARALYZE_SIDE_EFFECT2 ,$14,GHOST, $FF,30
- db SMOG ,POISON_SIDE_EFFECT2 ,$14,POISON, $B2,20
- db SLUDGE ,POISON_SIDE_EFFECT2 ,$41,POISON, $FF,20
- db BONE_CLUB ,FLINCH_SIDE_EFFECT1 ,$41,GROUND, $D8,20
- db FIRE_BLAST ,BURN_SIDE_EFFECT2 ,$78,FIRE, $D8,5
- db WATERFALL ,NO_ADDITIONAL_EFFECT ,$50,WATER, $FF,15
- db CLAMP ,TRAPPING_EFFECT ,$23,WATER, $BF,10
- db SWIFT ,SWIFT_EFFECT ,$3C,NORMAL, $FF,20
- db SKULL_BASH ,CHARGE_EFFECT ,$64,NORMAL, $FF,15
- db SPIKE_CANNON,TWO_TO_FIVE_ATTACKS_EFFECT,$14,NORMAL, $FF,15
- db CONSTRICT ,SPEED_DOWN_SIDE_EFFECT ,$0A,NORMAL, $FF,35
- db AMNESIA ,SPECIAL_UP2_EFFECT ,$00,PSYCHIC, $FF,20
- db KINESIS ,ACCURACY_DOWN1_EFFECT ,$00,PSYCHIC, $CC,15
- db SOFTBOILED ,HEAL_EFFECT ,$00,NORMAL, $FF,10
- db HI_JUMP_KICK,JUMP_KICK_EFFECT ,$55,FIGHTING,$E5,20
- db GLARE ,PARALYZE_EFFECT ,$00,NORMAL, $BF,30
- db DREAM_EATER ,DREAM_EATER_EFFECT ,$64,PSYCHIC, $FF,15
- db POISON_GAS ,POISON_EFFECT ,$00,POISON, $8C,40
- db BARRAGE ,TWO_TO_FIVE_ATTACKS_EFFECT,$0F,NORMAL, $D8,20
- db LEECH_LIFE ,DRAIN_HP_EFFECT ,$14,BUG, $FF,15
- db LOVELY_KISS ,SLEEP_EFFECT ,$00,NORMAL, $BF,10
- db SKY_ATTACK ,CHARGE_EFFECT ,$8C,FLYING, $E5,5
- db TRANSFORM ,TRANSFORM_EFFECT ,$00,NORMAL, $FF,10
- db BUBBLE ,SPEED_DOWN_SIDE_EFFECT ,$14,WATER, $FF,30
- db DIZZY_PUNCH ,NO_ADDITIONAL_EFFECT ,$46,NORMAL, $FF,10
- db SPORE ,SLEEP_EFFECT ,$00,GRASS, $FF,15
- db FLASH ,ACCURACY_DOWN1_EFFECT ,$00,NORMAL, $B2,20
- db PSYWAVE ,SPECIAL_DAMAGE_EFFECT ,$01,PSYCHIC, $CC,15
- db SPLASH ,SPLASH_EFFECT ,$00,NORMAL, $FF,40
- db ACID_ARMOR ,DEFENSE_UP2_EFFECT ,$00,POISON, $FF,40
- db CRABHAMMER ,NO_ADDITIONAL_EFFECT ,$5A,WATER, $D8,10
- db EXPLOSION ,EXPLODE_EFFECT ,$AA,NORMAL, $FF,5
- db FURY_SWIPES ,TWO_TO_FIVE_ATTACKS_EFFECT,$12,NORMAL, $CC,15
- db BONEMERANG ,ATTACK_TWICE_EFFECT ,$32,GROUND, $E5,10
- db REST ,HEAL_EFFECT ,$00,PSYCHIC, $FF,10
- db ROCK_SLIDE ,NO_ADDITIONAL_EFFECT ,$4B,ROCK, $E5,10
- db HYPER_FANG ,FLINCH_SIDE_EFFECT1 ,$50,NORMAL, $E5,15
- db SHARPEN ,ATTACK_UP1_EFFECT ,$00,NORMAL, $FF,30
- db CONVERSION ,CONVERSION_EFFECT ,$00,NORMAL, $FF,30
- db TRI_ATTACK ,NO_ADDITIONAL_EFFECT ,$50,NORMAL, $FF,10
- db SUPER_FANG ,SUPER_FANG_EFFECT ,$01,NORMAL, $E5,10
- db SLASH ,NO_ADDITIONAL_EFFECT ,$46,NORMAL, $FF,20
- db SUBSTITUTE ,SUBSTITUTE_EFFECT ,$00,NORMAL, $FF,10
- db STRUGGLE ,RECOIL_EFFECT ,$32,NORMAL, $FF,10
+Moves:
+; Characteristics of each move.
+
+move: macro
+ db \1 ; animation (interchangeable with move id)
+ db \2 ; effect
+ db \3 ; power
+ db \4 ; type
+ db \5 percent ; accuracy
+ db \6 ; pp
+endm
+
+ move POUND, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35
+ move KARATE_CHOP, NO_ADDITIONAL_EFFECT, 50, NORMAL, 100, 25
+ move DOUBLESLAP, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 10
+ move COMET_PUNCH, TWO_TO_FIVE_ATTACKS_EFFECT, 18, NORMAL, 85, 15
+ move MEGA_PUNCH, NO_ADDITIONAL_EFFECT, 80, NORMAL, 85, 20
+ move PAY_DAY, PAY_DAY_EFFECT, 40, NORMAL, 100, 20
+ move FIRE_PUNCH, BURN_SIDE_EFFECT1, 75, FIRE, 100, 15
+ move ICE_PUNCH, FREEZE_SIDE_EFFECT, 75, ICE, 100, 15
+ move THUNDERPUNCH, PARALYZE_SIDE_EFFECT1, 75, ELECTRIC, 100, 15
+ move SCRATCH, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35
+ move VICEGRIP, NO_ADDITIONAL_EFFECT, 55, NORMAL, 100, 30
+ move GUILLOTINE, OHKO_EFFECT, 1, NORMAL, 30, 5
+ move RAZOR_WIND, CHARGE_EFFECT, 80, NORMAL, 75, 10
+ move SWORDS_DANCE, ATTACK_UP2_EFFECT, 0, NORMAL, 100, 30
+ move CUT, NO_ADDITIONAL_EFFECT, 50, NORMAL, 95, 30
+ move GUST, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35
+ move WING_ATTACK, NO_ADDITIONAL_EFFECT, 35, FLYING, 100, 35
+ move WHIRLWIND, SWITCH_AND_TELEPORT_EFFECT, 0, NORMAL, 85, 20
+ move FLY, FLY_EFFECT, 70, FLYING, 95, 15
+ move BIND, TRAPPING_EFFECT, 15, NORMAL, 75, 20
+ move SLAM, NO_ADDITIONAL_EFFECT, 80, NORMAL, 75, 20
+ move VINE_WHIP, NO_ADDITIONAL_EFFECT, 35, GRASS, 100, 10
+ move STOMP, FLINCH_SIDE_EFFECT2, 65, NORMAL, 100, 20
+ move DOUBLE_KICK, ATTACK_TWICE_EFFECT, 30, FIGHTING, 100, 30
+ move MEGA_KICK, NO_ADDITIONAL_EFFECT, 120, NORMAL, 75, 5
+ move JUMP_KICK, JUMP_KICK_EFFECT, 70, FIGHTING, 95, 25
+ move ROLLING_KICK, FLINCH_SIDE_EFFECT2, 60, FIGHTING, 85, 15
+ move SAND_ATTACK, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 100, 15
+ move HEADBUTT, FLINCH_SIDE_EFFECT2, 70, NORMAL, 100, 15
+ move HORN_ATTACK, NO_ADDITIONAL_EFFECT, 65, NORMAL, 100, 25
+ move FURY_ATTACK, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 20
+ move HORN_DRILL, OHKO_EFFECT, 1, NORMAL, 30, 5
+ move TACKLE, NO_ADDITIONAL_EFFECT, 35, NORMAL, 95, 35
+ move BODY_SLAM, PARALYZE_SIDE_EFFECT2, 85, NORMAL, 100, 15
+ move WRAP, TRAPPING_EFFECT, 15, NORMAL, 85, 20
+ move TAKE_DOWN, RECOIL_EFFECT, 90, NORMAL, 85, 20
+ move THRASH, THRASH_PETAL_DANCE_EFFECT, 90, NORMAL, 100, 20
+ move DOUBLE_EDGE, RECOIL_EFFECT, 100, NORMAL, 100, 15
+ move TAIL_WHIP, DEFENSE_DOWN1_EFFECT, 0, NORMAL, 100, 30
+ move POISON_STING, POISON_SIDE_EFFECT1, 15, POISON, 100, 35
+ move TWINEEDLE, TWINEEDLE_EFFECT, 25, BUG, 100, 20
+ move PIN_MISSILE, TWO_TO_FIVE_ATTACKS_EFFECT, 14, BUG, 85, 20
+ move LEER, DEFENSE_DOWN1_EFFECT, 0, NORMAL, 100, 30
+ move BITE, FLINCH_SIDE_EFFECT1, 60, NORMAL, 100, 25
+ move GROWL, ATTACK_DOWN1_EFFECT, 0, NORMAL, 100, 40
+ move ROAR, SWITCH_AND_TELEPORT_EFFECT, 0, NORMAL, 100, 20
+ move SING, SLEEP_EFFECT, 0, NORMAL, 55, 15
+ move SUPERSONIC, CONFUSION_EFFECT, 0, NORMAL, 55, 20
+ move SONICBOOM, SPECIAL_DAMAGE_EFFECT, 1, NORMAL, 90, 20
+ move DISABLE, DISABLE_EFFECT, 0, NORMAL, 55, 20
+ move ACID, DEFENSE_DOWN_SIDE_EFFECT, 40, POISON, 100, 30
+ move EMBER, BURN_SIDE_EFFECT1, 40, FIRE, 100, 25
+ move FLAMETHROWER, BURN_SIDE_EFFECT1, 95, FIRE, 100, 15
+ move MIST, MIST_EFFECT, 0, ICE, 100, 30
+ move WATER_GUN, NO_ADDITIONAL_EFFECT, 40, WATER, 100, 25
+ move HYDRO_PUMP, NO_ADDITIONAL_EFFECT, 120, WATER, 80, 5
+ move SURF, NO_ADDITIONAL_EFFECT, 95, WATER, 100, 15
+ move ICE_BEAM, FREEZE_SIDE_EFFECT, 95, ICE, 100, 10
+ move BLIZZARD, FREEZE_SIDE_EFFECT, 120, ICE, 90, 5
+ move PSYBEAM, CONFUSION_SIDE_EFFECT, 65, PSYCHIC, 100, 20
+ move BUBBLEBEAM, SPEED_DOWN_SIDE_EFFECT, 65, WATER, 100, 20
+ move AURORA_BEAM, ATTACK_DOWN_SIDE_EFFECT, 65, ICE, 100, 20
+ move HYPER_BEAM, HYPER_BEAM_EFFECT, 150, NORMAL, 90, 5
+ move PECK, NO_ADDITIONAL_EFFECT, 35, FLYING, 100, 35
+ move DRILL_PECK, NO_ADDITIONAL_EFFECT, 80, FLYING, 100, 20
+ move SUBMISSION, RECOIL_EFFECT, 80, FIGHTING, 80, 25
+ move LOW_KICK, FLINCH_SIDE_EFFECT2, 50, FIGHTING, 90, 20
+ move COUNTER, NO_ADDITIONAL_EFFECT, 1, FIGHTING, 100, 20
+ move SEISMIC_TOSS, SPECIAL_DAMAGE_EFFECT, 1, FIGHTING, 100, 20
+ move STRENGTH, NO_ADDITIONAL_EFFECT, 80, NORMAL, 100, 15
+ move ABSORB, DRAIN_HP_EFFECT, 20, GRASS, 100, 20
+ move MEGA_DRAIN, DRAIN_HP_EFFECT, 40, GRASS, 100, 10
+ move LEECH_SEED, LEECH_SEED_EFFECT, 0, GRASS, 90, 10
+ move GROWTH, SPECIAL_UP1_EFFECT, 0, NORMAL, 100, 40
+ move RAZOR_LEAF, NO_ADDITIONAL_EFFECT, 55, GRASS, 95, 25
+ move SOLARBEAM, CHARGE_EFFECT, 120, GRASS, 100, 10
+ move POISONPOWDER, POISON_EFFECT, 0, POISON, 75, 35
+ move STUN_SPORE, PARALYZE_EFFECT, 0, GRASS, 75, 30
+ move SLEEP_POWDER, SLEEP_EFFECT, 0, GRASS, 75, 15
+ move PETAL_DANCE, THRASH_PETAL_DANCE_EFFECT, 70, GRASS, 100, 20
+ move STRING_SHOT, SPEED_DOWN1_EFFECT, 0, BUG, 95, 40
+ move DRAGON_RAGE, SPECIAL_DAMAGE_EFFECT, 1, DRAGON, 100, 10
+ move FIRE_SPIN, TRAPPING_EFFECT, 15, FIRE, 70, 15
+ move THUNDERSHOCK, PARALYZE_SIDE_EFFECT1, 40, ELECTRIC, 100, 30
+ move THUNDERBOLT, PARALYZE_SIDE_EFFECT1, 95, ELECTRIC, 100, 15
+ move THUNDER_WAVE, PARALYZE_EFFECT, 0, ELECTRIC, 100, 20
+ move THUNDER, PARALYZE_SIDE_EFFECT1, 120, ELECTRIC, 70, 10
+ move ROCK_THROW, NO_ADDITIONAL_EFFECT, 50, ROCK, 65, 15
+ move EARTHQUAKE, NO_ADDITIONAL_EFFECT, 100, GROUND, 100, 10
+ move FISSURE, OHKO_EFFECT, 1, GROUND, 30, 5
+ move DIG, CHARGE_EFFECT, 100, GROUND, 100, 10
+ move TOXIC, POISON_EFFECT, 0, POISON, 85, 10
+ move CONFUSION, CONFUSION_SIDE_EFFECT, 50, PSYCHIC, 100, 25
+ move PSYCHIC_M, SPECIAL_DOWN_SIDE_EFFECT, 90, PSYCHIC, 100, 10
+ move HYPNOSIS, SLEEP_EFFECT, 0, PSYCHIC, 60, 20
+ move MEDITATE, ATTACK_UP1_EFFECT, 0, PSYCHIC, 100, 40
+ move AGILITY, SPEED_UP2_EFFECT, 0, PSYCHIC, 100, 30
+ move QUICK_ATTACK, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 30
+ move RAGE, RAGE_EFFECT, 20, NORMAL, 100, 20
+ move TELEPORT, SWITCH_AND_TELEPORT_EFFECT, 0, PSYCHIC, 100, 20
+ move NIGHT_SHADE, SPECIAL_DAMAGE_EFFECT, 0, GHOST, 100, 15
+ move MIMIC, MIMIC_EFFECT, 0, NORMAL, 100, 10
+ move SCREECH, DEFENSE_DOWN2_EFFECT, 0, NORMAL, 85, 40
+ move DOUBLE_TEAM, EVASION_UP1_EFFECT, 0, NORMAL, 100, 15
+ move RECOVER, HEAL_EFFECT, 0, NORMAL, 100, 20
+ move HARDEN, DEFENSE_UP1_EFFECT, 0, NORMAL, 100, 30
+ move MINIMIZE, EVASION_UP1_EFFECT, 0, NORMAL, 100, 20
+ move SMOKESCREEN, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 100, 20
+ move CONFUSE_RAY, CONFUSION_EFFECT, 0, GHOST, 100, 10
+ move WITHDRAW, DEFENSE_UP1_EFFECT, 0, WATER, 100, 40
+ move DEFENSE_CURL, DEFENSE_UP1_EFFECT, 0, NORMAL, 100, 40
+ move BARRIER, DEFENSE_UP2_EFFECT, 0, PSYCHIC, 100, 30
+ move LIGHT_SCREEN, LIGHT_SCREEN_EFFECT, 0, PSYCHIC, 100, 30
+ move HAZE, HAZE_EFFECT, 0, ICE, 100, 30
+ move REFLECT, REFLECT_EFFECT, 0, PSYCHIC, 100, 20
+ move FOCUS_ENERGY, FOCUS_ENERGY_EFFECT, 0, NORMAL, 100, 30
+ move BIDE, BIDE_EFFECT, 0, NORMAL, 100, 10
+ move METRONOME, METRONOME_EFFECT, 0, NORMAL, 100, 10
+ move MIRROR_MOVE, MIRROR_MOVE_EFFECT, 0, FLYING, 100, 20
+ move SELFDESTRUCT, EXPLODE_EFFECT, 130, NORMAL, 100, 5
+ move EGG_BOMB, NO_ADDITIONAL_EFFECT, 100, NORMAL, 75, 10
+ move LICK, PARALYZE_SIDE_EFFECT2, 20, GHOST, 100, 30
+ move SMOG, POISON_SIDE_EFFECT2, 20, POISON, 70, 20
+ move SLUDGE, POISON_SIDE_EFFECT2, 65, POISON, 100, 20
+ move BONE_CLUB, FLINCH_SIDE_EFFECT1, 65, GROUND, 85, 20
+ move FIRE_BLAST, BURN_SIDE_EFFECT2, 120, FIRE, 85, 5
+ move WATERFALL, NO_ADDITIONAL_EFFECT, 80, WATER, 100, 15
+ move CLAMP, TRAPPING_EFFECT, 35, WATER, 75, 10
+ move SWIFT, SWIFT_EFFECT, 60, NORMAL, 100, 20
+ move SKULL_BASH, CHARGE_EFFECT, 100, NORMAL, 100, 15
+ move SPIKE_CANNON, TWO_TO_FIVE_ATTACKS_EFFECT, 20, NORMAL, 100, 15
+ move CONSTRICT, SPEED_DOWN_SIDE_EFFECT, 10, NORMAL, 100, 35
+ move AMNESIA, SPECIAL_UP2_EFFECT, 0, PSYCHIC, 100, 20
+ move KINESIS, ACCURACY_DOWN1_EFFECT, 0, PSYCHIC, 80, 15
+ move SOFTBOILED, HEAL_EFFECT, 0, NORMAL, 100, 10
+ move HI_JUMP_KICK, JUMP_KICK_EFFECT, 85, FIGHTING, 90, 20
+ move GLARE, PARALYZE_EFFECT, 0, NORMAL, 75, 30
+ move DREAM_EATER, DREAM_EATER_EFFECT, 100, PSYCHIC, 100, 15
+ move POISON_GAS, POISON_EFFECT, 0, POISON, 55, 40
+ move BARRAGE, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 20
+ move LEECH_LIFE, DRAIN_HP_EFFECT, 20, BUG, 100, 15
+ move LOVELY_KISS, SLEEP_EFFECT, 0, NORMAL, 75, 10
+ move SKY_ATTACK, CHARGE_EFFECT, 140, FLYING, 90, 5
+ move TRANSFORM, TRANSFORM_EFFECT, 0, NORMAL, 100, 10
+ move BUBBLE, SPEED_DOWN_SIDE_EFFECT, 20, WATER, 100, 30
+ move DIZZY_PUNCH, NO_ADDITIONAL_EFFECT, 70, NORMAL, 100, 10
+ move SPORE, SLEEP_EFFECT, 0, GRASS, 100, 15
+ move FLASH, ACCURACY_DOWN1_EFFECT, 0, NORMAL, 70, 20
+ move PSYWAVE, SPECIAL_DAMAGE_EFFECT, 1, PSYCHIC, 80, 15
+ move SPLASH, SPLASH_EFFECT, 0, NORMAL, 100, 40
+ move ACID_ARMOR, DEFENSE_UP2_EFFECT, 0, POISON, 100, 40
+ move CRABHAMMER, NO_ADDITIONAL_EFFECT, 90, WATER, 85, 10
+ move EXPLOSION, EXPLODE_EFFECT, 170, NORMAL, 100, 5
+ move FURY_SWIPES, TWO_TO_FIVE_ATTACKS_EFFECT, 18, NORMAL, 80, 15
+ move BONEMERANG, ATTACK_TWICE_EFFECT, 50, GROUND, 90, 10
+ move REST, HEAL_EFFECT, 0, PSYCHIC, 100, 10
+ move ROCK_SLIDE, NO_ADDITIONAL_EFFECT, 75, ROCK, 90, 10
+ move HYPER_FANG, FLINCH_SIDE_EFFECT1, 80, NORMAL, 90, 15
+ move SHARPEN, ATTACK_UP1_EFFECT, 0, NORMAL, 100, 30
+ move CONVERSION, CONVERSION_EFFECT, 0, NORMAL, 100, 30
+ move TRI_ATTACK, NO_ADDITIONAL_EFFECT, 80, NORMAL, 100, 10
+ move SUPER_FANG, SUPER_FANG_EFFECT, 1, NORMAL, 90, 10
+ move SLASH, NO_ADDITIONAL_EFFECT, 70, NORMAL, 100, 20
+ move SUBSTITUTE, SUBSTITUTE_EFFECT, 0, NORMAL, 100, 10
+ move STRUGGLE, RECOIL_EFFECT, 50, NORMAL, 100, 10
--- a/engine/battle/4_2.asm
+++ b/engine/battle/4_2.asm
@@ -391,7 +391,7 @@
ld [wd0b5], a
ld a, TRAINER_NAME
ld [W_LISTTYPE], a
- ld a, $e
+ ld a, BANK(TrainerNames)
ld [wPredefBank], a
call GetName
ld hl, wcd6d
--- a/engine/battle/animations.asm
+++ b/engine/battle/animations.asm
@@ -525,9 +525,9 @@
ld [wcc79], a
ld b, $e4
ld a, [W_ANIMATIONID] ; W_ANIMATIONID
- cp $aa
+ cp ANIM_AA
jr c, .asm_78e3f
- cp $ae
+ cp ANIM_AD + 1
jr nc, .asm_78e3f
ld b, $f0
.asm_78e3f
@@ -697,13 +697,13 @@
db ROCK_SLIDE
dw DoRockSlideSpecialEffects
- db $AA
+ db ANIM_AA
dw Func_79041
- db $AB
+ db ANIM_AB
dw Func_7904c
- db $AC
+ db ANIM_AC
dw Func_7907c
db TOSS_ANIM
@@ -2855,10 +2855,10 @@
.PokeBallAnimations: ; 79e50 (1e:5e50)
; sequence of animations that make up the Poké Ball toss
- db POOF_ANIM,HIDEPIC_ANIM,$C2,POOF_ANIM,SHOWPIC_ANIM
+ db POOF_ANIM,HIDEPIC_ANIM,SHAKE_ANIM,POOF_ANIM,SHOWPIC_ANIM
.BlockBall ; 5E55
- ld a,$C1
+ ld a,TOSS_ANIM
ld [W_ANIMATIONID],a
call PlayAnimation
ld a,(SFX_08_43 - SFX_Headers_08) / 3
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -2184,7 +2184,9 @@
jr Func_3d03c
OldManItemList: ; 3d02d (f:502d)
- db $01, POKE_BALL, 50, $ff
+ db 1 ; # items
+ db POKE_BALL, 50
+ db -1
Func_3d031
ld hl, wNumBagItems ; wNumBagItems
@@ -5471,7 +5473,7 @@
res 6, [hl] ; no longer invulnerable to typcial attacks
ld a, [W_ENEMYMOVENUM] ; W_ENEMYMOVENUM
ld [wd0b5], a
- ld a, $2c
+ ld a, BANK(MoveNames)
ld [wPredefBank], a
ld a, MOVE_NAME
ld [W_LISTTYPE], a
@@ -5950,10 +5952,11 @@
call AddNTimes
ld a, BANK(Moves)
call FarCopyData
- ld a, $2c
+
+ ld a, BANK(MoveNames)
ld [wPredefBank], a
- ld a, $2
- ld [W_LISTTYPE], a ; list type 2 = move name
+ ld a, MOVE_NAME
+ ld [W_LISTTYPE], a
call GetName
ld de, wcd6d
jp CopyStringToCF4B
@@ -7059,16 +7062,16 @@
dec de
ld a, [H_WHOSETURN] ; $fff3
and a
- ld b, $c7
+ ld b, ANIM_C7
ld hl, W_PLAYERBATTSTATUS3 ; W_PLAYERBATTSTATUS3
ld a, [de]
ld de, W_PLAYERTOXICCOUNTER ; wd06c
jr nz, .asm_3f2b0
- ld b, $a9
+ ld b, ANIM_A9
ld hl, W_ENEMYBATTSTATUS3 ; W_ENEMYBATTSTATUS3
ld de, W_ENEMYTOXICCOUNTER ; wd071
.asm_3f2b0
- cp $5c
+ cp TOXIC
jr nz, .asm_3f2bd
set 0, [hl]
xor a
@@ -7170,7 +7173,7 @@
ld a, 1 << PAR
ld [wEnemyMonStatus], a
call Func_3ed27 ;quarter speed of affected monster
- ld a, $a9
+ ld a, ANIM_A9
call Func_3fbb9 ;animation
jp PrintMayNotAttackText ;print paralysis text
.burn
@@ -7177,7 +7180,7 @@
ld a, 1 << BRN
ld [wEnemyMonStatus], a
call Func_3ed64
- ld a, $a9
+ ld a, ANIM_A9
call Func_3fbb9 ;animation
ld hl, BurnedText
jp PrintText
@@ -7185,7 +7188,7 @@
call Func_3f9cf ;resets bit 5 of the D063/D068 flags
ld a, 1 << FRZ
ld [wEnemyMonStatus], a
- ld a, $a9
+ ld a, ANIM_A9
call Func_3fbb9 ;animation
ld hl, FrozenText
jp PrintText
@@ -7723,7 +7726,7 @@
inc a
ld [bc], a
ld a, [H_WHOSETURN]
- add $ae
+ add XSTATITEM_ANIM
jp Func_3fb96
ThrashPetalDanceEffect: ; 3f717 (f:7717)
@@ -7742,7 +7745,7 @@
inc a
ld [de], a
ld a, [H_WHOSETURN] ; $fff3
- add $b0
+ add ANIM_B0
jp Func_3fb96
SwitchAndTeleportEffect: ; 3f739 (f:7739)
@@ -7938,11 +7941,11 @@
ld de, W_PLAYERMOVEEFFECT ; wcfd3
ld a, [H_WHOSETURN] ; $fff3
and a
- ld b, $ae
+ ld b, XSTATITEM_ANIM
jr z, .asm_3f8a1
ld hl, W_ENEMYBATTSTATUS1 ; W_ENEMYBATTSTATUS1
ld de, W_ENEMYMOVEEFFECT ; W_ENEMYMOVEEFFECT
- ld b, $af
+ ld b, ANIM_AF
.asm_3f8a1
set 4, [hl]
ld a, [de]
@@ -7950,13 +7953,13 @@
cp FLY_EFFECT
jr nz, .asm_3f8ad
set 6, [hl] ; mon is now invulnerable to typical attacks (fly/dig)
- ld b, $64
+ ld b, TELEPORT
.asm_3f8ad
ld a, [de]
cp DIG
jr nz, .asm_3f8b6
set 6, [hl] ; mon is now invulnerable to typical attacks (fly/dig)
- ld b, $c0
+ ld b, ANIM_C0
.asm_3f8b6
xor a
ld [wcc5b], a
--- a/engine/battle/e.asm
+++ b/engine/battle/e.asm
@@ -587,7 +587,7 @@
jr z, .asm_39bc1
push hl
ld [wd0b5], a
- ld a, $2c
+ ld a, BANK(MoveNames)
ld [wPredefBank], a
ld a, MOVE_NAME
ld [W_LISTTYPE], a
@@ -1407,7 +1407,7 @@
ld [hl], $20
ld a, $f8
ld [wTrainerEngageDistance], a
- ld hl, wOAMBuffer + $18
+ ld hl, wOAMBuffer + PARTY_LENGTH * 4
jp Func_3a8e1
SetupPokeballs: ; 0x3a8a6
@@ -1414,7 +1414,7 @@
ld a, [de]
push af
ld de, wBuffer
- ld c, $6 ; max num of partymons
+ ld c, PARTY_LENGTH
ld a, $34 ; empty pokeball
.emptyloop
ld [de], a
@@ -1462,7 +1462,7 @@
Func_3a8e1: ; 3a8e1 (e:68e1)
ld de, wHPBarMaxHP
- ld c, $6
+ ld c, PARTY_LENGTH
.asm_3a8e6
ld a, [W_BASECOORDY] ; wd082
ld [hli], a
--- a/engine/cable_club.asm
+++ b/engine/cable_club.asm
@@ -537,7 +537,7 @@
ld [wTileMap + $141], a
.asm_574a
call JoypadLowSensitivity
- ld a, [$ffb5]
+ ld a, [hJoy5]
and a
jr z, .asm_574a ; 0x5750 $f8
bit 0, a
@@ -896,7 +896,7 @@
ld [W_GRASSRATE], a ; W_GRASSRATE
inc a
ld [W_ISLINKBATTLE], a ; W_ISLINKBATTLE
- ld [$ffb5], a
+ ld [hJoy5], a
ld a, $a
ld [wMusicHeaderPointer], a
ld a, BANK(Music_Celadon)
--- a/engine/evolution.asm
+++ b/engine/evolution.asm
@@ -140,7 +140,7 @@
call DelayFrame
push bc
call JoypadLowSensitivity
- ld a, [$ffb5]
+ ld a, [hJoy5]
pop bc
and $2
jr nz, .asm_7bf0d
--- a/engine/evos_moves.asm
+++ b/engine/evos_moves.asm
@@ -135,7 +135,7 @@
ld [wHPBarMaxHP + 1], a
ld a, MONSTER_NAME
ld [W_LISTTYPE], a
- ld a, $e
+ ld a, BANK(TrainerNames) ; bank is not used for monster names
ld [wPredefBank], a
call GetName
push hl
--- a/engine/give_pokemon.asm
+++ b/engine/give_pokemon.asm
@@ -3,10 +3,10 @@
xor a
ld [wccd3], a
ld a, [wPartyCount] ; wPartyCount
- cp $6
+ cp PARTY_LENGTH
jr c, .asm_4fe01
ld a, [W_NUMINBOX] ; wda80
- cp $14
+ cp MONS_PER_BOX
jr nc, .asm_4fdf9
xor a
ld [W_ENEMYBATTSTATUS3], a ; W_ENEMYBATTSTATUS3
@@ -18,18 +18,18 @@
ld hl, wcf4b
ld a, [wd5a0]
and $7f
- cp $9
+ cp 9
jr c, .asm_4fdec
- sub $9
- ld [hl], $f7
+ sub 9
+ ld [hl], "1"
inc hl
- add $f6
+ add "0"
jr .asm_4fdee
.asm_4fdec
- add $f7
+ add "1"
.asm_4fdee
ld [hli], a
- ld [hl], $50
+ ld [hl], "@"
ld hl, SetToBoxText
call PrintText
scf
--- a/engine/items/items.asm
+++ b/engine/items/items.asm
@@ -110,10 +110,10 @@
dec a
jr z,.UseBall
ld a,[wPartyCount] ;is Party full?
- cp a,6
+ cp a,PARTY_LENGTH
jr nz,.UseBall
ld a,[W_NUMINBOX] ;is Box full?
- cp a,20
+ cp a,MONS_PER_BOX
jp z,BoxFullCannotThrowBall
.UseBall ;$56a7
;ok, you can use a ball
@@ -421,7 +421,7 @@
predef ShowPokedexData
.checkParty ;$58f4
ld a,[wPartyCount]
- cp a,6 ;is party full?
+ cp a,PARTY_LENGTH ;is party full?
jr z,.sendToBox
xor a
ld [wcc49],a
--- a/engine/menu/bills_pc.asm
+++ b/engine/menu/bills_pc.asm
@@ -88,25 +88,13 @@
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
ret
-SomeonesPCText: ; 2148b (8:548b)
- db "SOMEONE's PC@"
+SomeonesPCText: db "SOMEONE's PC@"
+BillsPCText: db "BILL's PC@"
+PlayersPCText: db "'s PC@"
+OaksPCText: db "PROF.OAK's PC@"
+PKMNLeaguePCText: db $4a, "LEAGUE@"
+LogOffPCText: db "LOG OFF@"
-BillsPCText: ; 21497 (8:5497)
- db "BILL's PC@"
-
-PlayersPCText: ; 214a0 (8:54a0)
- db "'s PC@"
-
-OaksPCText: ; 214a5 (8:54a5)
- db "PROF.OAK's PC@"
-
-PKMNLeaguePCText: ; 214b2 (8:54b2)
- db $4a,"LEAGUE@"
-
-LogOffPCText: ; 214ba (8:54ba)
- db "LOG OFF@"
-
-Func_214c2:: ; 214c2 (8:54c2)
BillsPC_:: ; 0x214c2
ld hl, wd730
set 6, [hl]
@@ -167,15 +155,15 @@
call TextBoxBorder
ld a, [wd5a0]
and $7f
- cp $9
+ cp 9
jr c, .asm_2154f
- sub $9
+ sub 9
hlCoord 17, 16
- ld [hl], $f7
- add $f6
+ ld [hl], "1"
+ add "0"
jr .asm_21551
.asm_2154f
- add $f7
+ add "1"
.asm_21551
Coorda 18, 16
hlCoord 10, 16
@@ -227,7 +215,7 @@
jp BillsPCMenu
.asm_215bb
ld a, [W_NUMINBOX] ; wda80
- cp $14
+ cp MONS_PER_BOX
jr nz, .asm_215cb
ld hl, BoxFullText ; $5802
call PrintText
@@ -251,15 +239,15 @@
ld hl, wWhichTrade ; wWhichTrade
ld a, [wd5a0]
and $7f
- cp $9
+ cp 9
jr c, .asm_2160a
- sub $9
- ld [hl], $f7
+ sub 9
+ ld [hl], "1"
inc hl
- add $f6
+ add "0"
jr .asm_2160c
.asm_2160a
- add $f7
+ add "1"
.asm_2160c
ld [hli], a
ld [hl], $50
@@ -276,7 +264,7 @@
jp Func_214e8
.asm_21627
ld a, [wPartyCount] ; wPartyCount
- cp $6
+ cp PARTY_LENGTH
jr nz, .asm_21637
ld hl, CantTakeMonText ; $5811
call PrintText
@@ -353,7 +341,12 @@
ret
BillsPCMenuText: ; 216e1 (8:56e1)
- db "WITHDRAW ",$4a,$4e,"DEPOSIT ",$4a,$4e,"RELEASE ",$4a,$4e,"CHANGE BOX",$4e,"SEE YA!@"
+ db "WITHDRAW ", $4a
+ next "DEPOSIT ", $4a
+ next "RELEASE ", $4a
+ next "CHANGE BOX"
+ next "SEE YA!"
+ db "@"
BoxNoPCText: ; 21713 (8:5713)
db "BOX No.@"
@@ -389,7 +382,7 @@
db SURF
db STRENGTH
db FLASH
- db $ff
+ db -1
Func_2174b: ; 2174b (8:574b)
hlCoord 9, 10
@@ -458,15 +451,12 @@
call LoadGBPal
jr .asm_2178f
-DepositPCText: ; 217cb (8:57cb)
- db "DEPOSIT@"
+DepositPCText: db "DEPOSIT@"
+WithdrawPCText: db "WITHDRAW@"
+StatsCancelPCText:
+ db "STATS"
+ next "CANCEL@"
-WithdrawPCText: ; 217d3 (8:57d3)
- db "WITHDRAW@"
-
-StatsCancelPCText: ; 217dc (8:57dc)
- db "STATS",$4e,"CANCEL@"
-
SwitchOnText: ; 0x217e9
TX_FAR _SwitchOnText
db "@"
@@ -523,7 +513,7 @@
cp $c
ret nz
ld a, [W_CURMAP]
- cp $ef
+ cp BATTLE_CENTER
ld a, $2
jr z, .asm_2183a
inc a
@@ -541,7 +531,7 @@
cp $8
ret nz
ld a, [W_CURMAP]
- cp $ef
+ cp BATTLE_CENTER
ld a, $2
jr z, .asm_2185a
inc a
--- a/engine/menu/main_menu.asm
+++ b/engine/menu/main_menu.asm
@@ -307,7 +307,7 @@
xor a
ld [hJoyPressed], a
ld [hJoyHeld], a
- ld [$ffb5], a
+ ld [hJoy5], a
ld [wd72d], a
ld hl, wd732
set 0, [hl]
@@ -461,7 +461,7 @@
call SetOptionsFromCursorPositions
.getJoypadStateLoop
call JoypadLowSensitivity
- ld a,[$ffb5]
+ ld a,[hJoy5]
ld b,a
and a,%11111011 ; any key besides select pressed?
jr z,.getJoypadStateLoop
--- a/engine/menu/pokedex.asm
+++ b/engine/menu/pokedex.asm
@@ -10,7 +10,7 @@
ld [wLastMenuItem],a
inc a
ld [wd11e],a
- ld [$ffb7],a
+ ld [hJoy7],a
.setUpGraphics
ld b,$08
call GoPAL_SET
@@ -35,7 +35,7 @@
ld [wcc37],a
ld [wCurrentMenuItem],a
ld [wLastMenuItem],a
- ld [$ffb7],a
+ ld [hJoy7],a
ld [wcd3a],a
ld [wcd3b],a
pop af
@@ -550,7 +550,7 @@
ld [$fff4],a
.waitForButtonPress
call JoypadLowSensitivity
- ld a,[$ffb5]
+ ld a,[hJoy5]
and a,%00000011 ; A button and B button
jr z,.waitForButtonPress
pop af
--- a/engine/save.asm
+++ b/engine/save.asm
@@ -445,15 +445,15 @@
res 2, [hl]
ld a, [wd5a0]
and $7f
- cp $9
+ cp 9
jr c, .asm_739a6
- sub $9
+ sub 9
hlCoord 8, 2
- ld [hl], $f7
- add $f6
+ ld [hl], "1"
+ add "0"
jr .asm_739a8
.asm_739a6
- add $f7
+ add "1"
.asm_739a8
Coorda 9, 2
hlCoord 1, 2
--- a/engine/slot_machine.asm
+++ b/engine/slot_machine.asm
@@ -797,7 +797,7 @@
SlotMachine_37882: ; 37882 (d:7882)
call DelayFrame
call JoypadLowSensitivity
- ld a, [$ffb5]
+ ld a, [hJoy5]
and $1
ret z
ld hl, wTrainerSpriteOffset
--- a/engine/town_map.asm
+++ b/engine/town_map.asm
@@ -6,7 +6,7 @@
ld [hl], $ff
push hl
ld a, $1
- ld [$ffb7], a
+ ld [hJoy7], a
ld a, [W_CURMAP] ; W_CURMAP
push af
ld b, $0
@@ -66,7 +66,7 @@
.asm_70ec8
call Func_716c6
call JoypadLowSensitivity
- ld a, [$ffb5]
+ ld a, [hJoy5]
ld b, a
and $c3
jr z, .asm_70ec8
@@ -78,7 +78,7 @@
jr nz, .asm_70f01
xor a
ld [wd09b], a
- ld [$ffb7], a
+ ld [hJoy7], a
ld [W_SUBANIMTRANSFORM], a ; W_SUBANIMTRANSFORM
call Func_711ab
pop hl
@@ -188,7 +188,7 @@
push hl
call DelayFrame
call JoypadLowSensitivity
- ld a, [$ffb5]
+ ld a, [hJoy5]
ld b, a
pop hl
and $c3
--- a/engine/trade.asm
+++ b/engine/trade.asm
@@ -203,9 +203,9 @@
and a
jr nz, .asm_41273
call Delay50
- ld a, $ad
+ ld a, ANIM_AD
call Func_41676
- ld a, $aa
+ ld a, ANIM_AA
call Func_41676
ld a, [wWhichTrade] ; wWhichTrade
call PlayCry
@@ -242,9 +242,9 @@
ret
Func_412d2: ; 412d2 (10:52d2)
- ld a, $ab
+ ld a, ANIM_AB
call Func_41676
- ld c, $a
+ ld c, 10
call DelayFrames
ld a, $e4
ld [rOBP0], a ; $ff48
@@ -295,7 +295,7 @@
db $7E,$40,$7E,$60
Func_41336: ; 41336 (10:5336)
- ld a, $ac
+ ld a, ANIM_AC
call Func_41676
call Func_415c8
hlCoord 4, 10
@@ -308,7 +308,7 @@
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
ld a, [wTrainerEngageDistance]
call Func_415a4
- ld a, $ad
+ ld a, ANIM_AD
call Func_41676
ld a, $1
ld [H_AUTOBGTRANSFERENABLED], a ; $ffba
--- a/home.asm
+++ b/home.asm
@@ -1,35 +1,36 @@
+
; The rst vectors are unused.
-SECTION "rst00", ROM0[$00]
+SECTION "rst 00", ROM0 [$00]
rst $38
-SECTION "rst08", ROM0[$08]
+SECTION "rst 08", ROM0 [$08]
rst $38
-SECTION "rst10", ROM0[$10]
+SECTION "rst 10", ROM0 [$10]
rst $38
-SECTION "rst18", ROM0[$18]
+SECTION "rst 18", ROM0 [$18]
rst $38
-SECTION "rst20", ROM0[$20]
+SECTION "rst 20", ROM0 [$20]
rst $38
-SECTION "rst28", ROM0[$28]
+SECTION "rst 28", ROM0 [$28]
rst $38
-SECTION "rst30", ROM0[$30]
+SECTION "rst 30", ROM0 [$30]
rst $38
-SECTION "rst38", ROM0[$38]
+SECTION "rst 38", ROM0 [$38]
rst $38
-; interrupts
-SECTION "vblank", ROM0[$40]
+; Hardware interrupts
+SECTION "vblank", ROM0 [$40]
jp VBlank
-SECTION "lcdc", ROM0[$48]
+SECTION "hblank", ROM0 [$48]
rst $38
-SECTION "timer", ROM0[$50]
+SECTION "timer", ROM0 [$50]
jp Timer
-SECTION "serial", ROM0[$58]
+SECTION "serial", ROM0 [$58]
jp Serial
-SECTION "joypad", ROM0[$60]
+SECTION "joypad", ROM0 [$60]
reti
-SECTION "bank0",ROM0[$61]
+SECTION "Home", ROM0
DisableLCD::
xor a
@@ -79,39 +80,27 @@
jr nz, .loop
ret
-FarCopyData::
-; Copy bc bytes from a:hl to de.
- ld [wBuffer], a
- ld a, [H_LOADEDROMBANK]
- push af
- ld a, [wBuffer]
- ld [H_LOADEDROMBANK], a
- ld [MBC3RomBank], a
- call CopyData
- pop af
- ld [H_LOADEDROMBANK], a
- ld [MBC3RomBank], a
- ret
+INCLUDE "home/copy.asm"
-CopyData::
-; Copy bc bytes from hl to de.
- ld a, [hli]
- ld [de], a
- inc de
- dec bc
- ld a, c
- or b
- jr nz, CopyData
- ret
-SECTION "Entry", ROM0[$100]
+SECTION "Entry", ROM0 [$100]
+
nop
jp Start
-SECTION "Start", ROM0[$150]
+SECTION "Header", ROM0 [$104]
+ ; The header is generated by rgbfix.
+ ; The space here is allocated to prevent code from being overwritten.
+
+ ds $150 - $104
+
+
+
+SECTION "Main", ROM0
+
Start::
cp GBC
jr z, .gbc
@@ -125,34 +114,34 @@
INCLUDE "home/joypad.asm"
-
INCLUDE "data/map_header_pointers.asm"
-
INCLUDE "home/overworld.asm"
-; this is used to check if the player wants to interrupt the opening sequence at several points
-; XXX is this used anywhere else?
-; INPUT:
-; c = number of frames to wait
-; sets carry if Up+Select+B, Start, or A is pressed within c frames
-; unsets carry otherwise
+
CheckForUserInterruption:: ; 12f8 (0:12f8)
+; Return carry if Up+Select+B, Start or A are pressed in c frames.
+; Used only in the intro and title screen.
call DelayFrame
+
push bc
call JoypadLowSensitivity
pop bc
- ld a,[hJoyHeld] ; currently pressed buttons
- cp a,%01000110 ; Up, Select button, B button
- jr z,.setCarry ; if all three keys are pressed
- ld a,[$ffb5] ; either newly pressed buttons or currently pressed buttons at low sampling rate
- and a,%00001001 ; Start button, A button
- jr nz,.setCarry ; if either key is pressed
+
+ ld a, [hJoyHeld]
+ cp D_UP + SELECT + B_BUTTON
+ jr z, .input
+
+ ld a, [hJoy5]
+ and START | A_BUTTON
+ jr nz, .input
+
dec c
- jr nz,CheckForUserInterruption
-.unsetCarry
+ jr nz, CheckForUserInterruption
+
and a
ret
-.setCarry
+
+.input
scf
ret
@@ -180,57 +169,69 @@
ld [$2000],a
ret
-; INPUT:
-; c: if nonzero, show at least a sliver of health
-; d = number of HP bar sections (normally 6)
-; e = health (in eighths of bar sections) (normally out of 48)
+
DrawHPBar:: ; 1336 (0:1336)
+; Draw an HP bar d tiles long, and fill it to e pixels.
+; If c is nonzero, show at least a sliver regardless.
+; The right end of the bar changes with [wListMenuID].
+
push hl
push de
push bc
- ld a,$71 ; left of HP bar tile 1
- ld [hli],a
- ld a,$62 ; left of HP bar tile 2
- ld [hli],a
+
+ ; Left
+ ld a, $71 ; "HP:"
+ ld [hli], a
+ ld a, $62
+ ld [hli], a
+
push hl
- ld a,$63 ; empty bar section tile
-.drawEmptyBarLoop
+
+ ; Middle
+ ld a, $63 ; empty
+.draw
ld [hli],a
dec d
- jr nz,.drawEmptyBarLoop
+ jr nz, .draw
+
+ ; Right
ld a,[wListMenuID]
- dec a ; what should the right of HP bar tile be?
- ld a,$6d ; right of HP bar tile, in status screen and battles
- jr z,.writeTile
- dec a ; right of HP bar tile, in pokemon menu
-.writeTile
+ dec a
+ ld a, $6d ; status screen and battle
+ jr z, .ok
+ dec a ; pokemon menu
+.ok
ld [hl],a
+
pop hl
- ld a,e
- and a ; is there enough health to show up on the HP bar?
- jr nz,.loop ; if so, draw the HP bar
- ld a,c
- and a ; should a sliver of health be shown no matter what?
- jr z,.done
- ld e,1 ; if so, fill one eighth of a bar section
-; loop to draw every full bar section
-.loop
- ld a,e
- sub a,8
- jr c,.drawPartialBarSection
- ld e,a
- ld a,$6b ; filled bar section tile
- ld [hli],a
- ld a,e
+
+ ld a, e
and a
- jr z,.done
- jr .loop
-; draws a partial bar section at the end (if necessary)
-; there are 7 possible partial bar sections from 1/8 to 7/8 full
-.drawPartialBarSection
- ld a,$63 ; empty bar section tile
- add e ; add e to get the appropriate partial bar section tile
- ld [hl],a ; write the tile
+ jr nz, .fill
+
+ ; If c iz nonzero, draw a pixel anyway.
+ ld a, c
+ and a
+ jr z, .done
+ ld e, 1
+
+.fill
+ ld a, e
+ sub 8
+ jr c, .partial
+ ld e, a
+ ld a, $6b ; full
+ ld [hli], a
+ ld a, e
+ and a
+ jr z, .done
+ jr .fill
+
+.partial
+ ; Fill remaining pixels at the end if necessary.
+ ld a, $63 ; empty
+ add e
+ ld [hl], a
.done
pop bc
pop de
@@ -237,6 +238,7 @@
pop hl
ret
+
; loads pokemon data from one of multiple sources to wcf98
; loads base stats to W_MONHDEXNUM
; INPUT:
@@ -251,8 +253,8 @@
; wcf98 = base address of pokemon data
; W_MONHDEXNUM = base address of base stats
LoadMonData:: ; 1372 (0:1372)
- ld hl,LoadMonData_
- ld b,BANK(LoadMonData_)
+ ld hl, LoadMonData_
+ ld b, BANK(LoadMonData_)
jp Bankswitch
; writes c to wd0dc+b
@@ -259,7 +261,7 @@
Func_137a:: ; 137a (0:137a)
ld hl, wd0dc
ld e, b
- ld d, $0
+ ld d, 0
add hl, de
ld a, c
ld [hl], a
@@ -266,7 +268,7 @@
ret
LoadFlippedFrontSpriteByMonIndex:: ; 1384 (0:1384)
- ld a, $1
+ ld a, 1
ld [W_SPRITEFLIPPED], a
LoadFrontSpriteByMonIndex:: ; 1389 (0:1389)
@@ -282,9 +284,9 @@
ld [hl], b
and a
pop hl
- jr z, .invalidDexNumber ; dex #0 invalid
+ jr z, .invalidDexNumber ; dex #0 invalid
cp NUM_POKEMON + 1
- jr c, .validDexNumber ; dex >#151 invalid
+ jr c, .validDexNumber ; dex >#151 invalid
.invalidDexNumber
ld a, RHYDON ; $1
ld [wcf91], a
@@ -309,41 +311,44 @@
ld [$2000], a
ret
-; plays the cry of a pokemon
-; INPUT:
-; a = pokemon ID
+
PlayCry:: ; 13d0 (0:13d0)
+; Play monster a's cry.
call GetCryData
- call PlaySound ; play cry
- jp WaitForSoundToFinish ; wait for sound to be done playing
+ call PlaySound
+ jp WaitForSoundToFinish
-; gets a pokemon's cry data
-; INPUT:
-; a = pokemon ID
GetCryData:: ; 13d9 (0:13d9)
+; Load cry data for monster a.
dec a
- ld c,a
- ld b,0
- ld hl,CryData
- add hl,bc
- add hl,bc
- add hl,bc
- ld a,Bank(CryData)
+ ld c, a
+ ld b, 0
+ ld hl, CryData
+ add hl, bc
+ add hl, bc
+ add hl, bc
+
+ ld a, Bank(CryData)
call BankswitchHome
- ld a,[hli]
- ld b,a
- ld a,[hli]
- ld [wc0f1],a
- ld a,[hl]
- ld [wc0f2],a
+ ld a, [hli]
+ ld b, a ; cry id
+ ld a, [hli]
+ ld [wc0f1], a
+ ld a, [hl]
+ ld [wc0f2], a
call BankswitchBack
- ld a,b ; a = cryID
- ld c,$14 ; base sound ID for pokemon cries
- rlca
- add b ; a = cryID * 3
- add c ; a = $14 + cryID * 3
+
+ ; Cry headers have 3 channels,
+ ; and start from index $14,
+ ; so add 3 times the cry id.
+ ld a, b
+ ld c, $14
+ rlca ; * 2
+ add b
+ add c
ret
+
DisplayPartyMenu:: ; 13fc (0:13fc)
ld a,[$ffd7]
push af
@@ -365,42 +370,42 @@
jp HandlePartyMenuInput
PartyMenuInit:: ; 1420 (0:1420)
- ld a,$01
+ ld a, 1 ; hardcoded bank
call BankswitchHome
call LoadHpBarAndStatusTilePatterns
- ld hl,wd730
- set 6,[hl] ; turn off letter printing delay
+ ld hl, wd730
+ set 6, [hl] ; turn off letter printing delay
xor a
- ld [wcc49],a
- ld [wcc37],a
- ld hl,wTopMenuItemY
+ ld [wcc49], a
+ ld [wcc37], a
+ ld hl, wTopMenuItemY
inc a
- ld [hli],a ; top menu item Y
+ ld [hli], a ; top menu item Y
xor a
- ld [hli],a ; top menu item X
- ld a,[wcc2b]
+ ld [hli], a ; top menu item X
+ ld a, [wcc2b]
push af
- ld [hli],a ; current menu item ID
+ ld [hli], a ; current menu item ID
inc hl
- ld a,[wPartyCount]
+ ld a, [wPartyCount]
and a ; are there more than 0 pokemon in the party?
- jr z,.storeMaxMenuItemID
+ jr z, .storeMaxMenuItemID
dec a
; if party is not empty, the max menu item ID is ([wPartyCount] - 1)
; otherwise, it is 0
.storeMaxMenuItemID
- ld [hli],a ; max menu item ID
- ld a,[wd11f]
+ ld [hli], a ; max menu item ID
+ ld a, [wd11f]
and a
- ld a,%00000011 ; A button and B button
- jr z,.next
+ ld a, A_BUTTON + B_BUTTON
+ jr z, .next
xor a
- ld [wd11f],a
+ ld [wd11f], a
inc a
.next
- ld [hli],a ; menu watched keys
+ ld [hli], a ; menu watched keys
pop af
- ld [hl],a ; old menu item ID
+ ld [hl], a ; old menu item ID
ret
HandlePartyMenuInput:: ; 145a (0:145a)
@@ -683,7 +688,7 @@
ret
PrintBCDDigit:: ; 1604 (0:1604)
- and a,%00001111
+ and $f
and a
jr z,.zeroDigit
.nonzeroDigit
@@ -908,556 +913,14 @@
INCLUDE "data/collision.asm"
-
-
-FarCopyData2::
-; Identical to FarCopyData, but uses $ff8b
-; as temp space instead of wBuffer.
- ld [$ff8b],a
- ld a,[H_LOADEDROMBANK]
- push af
- ld a,[$ff8b]
- ld [H_LOADEDROMBANK],a
- ld [MBC3RomBank],a
- call CopyData
- pop af
- ld [H_LOADEDROMBANK],a
- ld [MBC3RomBank],a
- ret
-
-FarCopyData3::
-; Copy bc bytes from a:de to hl.
- ld [$ff8b],a
- ld a,[H_LOADEDROMBANK]
- push af
- ld a,[$ff8b]
- ld [H_LOADEDROMBANK],a
- ld [MBC3RomBank],a
- push hl
- push de
- push de
- ld d,h
- ld e,l
- pop hl
- call CopyData
- pop de
- pop hl
- pop af
- ld [H_LOADEDROMBANK],a
- ld [MBC3RomBank],a
- ret
-
-FarCopyDataDouble::
-; Expand bc bytes of 1bpp image data
-; from a:hl to 2bpp data at de.
- ld [$ff8b],a
- ld a,[H_LOADEDROMBANK]
- push af
- ld a,[$ff8b]
- ld [H_LOADEDROMBANK],a
- ld [MBC3RomBank],a
-.loop
- ld a,[hli]
- ld [de],a
- inc de
- ld [de],a
- inc de
- dec bc
- ld a,c
- or b
- jr nz,.loop
- pop af
- ld [H_LOADEDROMBANK],a
- ld [MBC3RomBank],a
- ret
-
-CopyVideoData::
-; Wait for the next VBlank, then copy c 2bpp
-; tiles from b:de to hl, 8 tiles at a time.
-; This takes c/8 frames.
-
- ld a, [H_AUTOBGTRANSFERENABLED]
- push af
- xor a ; disable auto-transfer while copying
- ld [H_AUTOBGTRANSFERENABLED], a
-
- ld a, [H_LOADEDROMBANK]
- ld [$ff8b], a
-
- ld a, b
- ld [H_LOADEDROMBANK], a
- ld [MBC3RomBank], a
-
- ld a, e
- ld [H_VBCOPYSRC], a
- ld a, d
- ld [H_VBCOPYSRC + 1], a
-
- ld a, l
- ld [H_VBCOPYDEST], a
- ld a, h
- ld [H_VBCOPYDEST + 1], a
-
-.loop
- ld a, c
- cp 8
- jr nc, .keepgoing
-
-.done
- ld [H_VBCOPYSIZE], a
- call DelayFrame
- ld a, [$ff8b]
- ld [H_LOADEDROMBANK], a
- ld [MBC3RomBank], a
- pop af
- ld [H_AUTOBGTRANSFERENABLED], a
- ret
-
-.keepgoing
- ld a, 8
- ld [H_VBCOPYSIZE], a
- call DelayFrame
- ld a, c
- sub 8
- ld c, a
- jr .loop
-
-CopyVideoDataDouble::
-; Wait for the next VBlank, then copy c 1bpp
-; tiles from b:de to hl, 8 tiles at a time.
-; This takes c/8 frames.
- ld a, [H_AUTOBGTRANSFERENABLED]
- push af
- xor a ; disable auto-transfer while copying
- ld [H_AUTOBGTRANSFERENABLED], a
- ld a, [H_LOADEDROMBANK]
- ld [$ff8b], a
-
- ld a, b
- ld [H_LOADEDROMBANK], a
- ld [MBC3RomBank], a
-
- ld a, e
- ld [H_VBCOPYDOUBLESRC], a
- ld a, d
- ld [H_VBCOPYDOUBLESRC + 1], a
-
- ld a, l
- ld [H_VBCOPYDOUBLEDEST], a
- ld a, h
- ld [H_VBCOPYDOUBLEDEST + 1], a
-
-.loop
- ld a, c
- cp 8
- jr nc, .keepgoing
-
-.done
- ld [H_VBCOPYDOUBLESIZE], a
- call DelayFrame
- ld a, [$ff8b]
- ld [H_LOADEDROMBANK], a
- ld [MBC3RomBank], a
- pop af
- ld [H_AUTOBGTRANSFERENABLED], a
- ret
-
-.keepgoing
- ld a, 8
- ld [H_VBCOPYDOUBLESIZE], a
- call DelayFrame
- ld a, c
- sub 8
- ld c, a
- jr .loop
-
-ClearScreenArea::
-; Clear tilemap area cxb at hl.
- ld a, $7f ; blank tile
- ld de, 20 ; screen width
-.y
- push hl
- push bc
-.x
- ld [hli], a
- dec c
- jr nz, .x
- pop bc
- pop hl
- add hl, de
- dec b
- jr nz, .y
- ret
-
-CopyScreenTileBufferToVRAM::
-; Copy wTileMap to the BG Map starting at b * $100.
-; This is done in thirds of 6 rows, so it takes 3 frames.
-
- ld c, 6
-
- ld hl, $600 * 0
- ld de, wTileMap + 20 * 6 * 0
- call .setup
- call DelayFrame
-
- ld hl, $600 * 1
- ld de, wTileMap + 20 * 6 * 1
- call .setup
- call DelayFrame
-
- ld hl, $600 * 2
- ld de, wTileMap + 20 * 6 * 2
- call .setup
- jp DelayFrame
-
-.setup
- ld a, d
- ld [H_VBCOPYBGSRC+1], a
- call GetRowColAddressBgMap
- ld a, l
- ld [H_VBCOPYBGDEST], a
- ld a, h
- ld [H_VBCOPYBGDEST+1], a
- ld a, c
- ld [H_VBCOPYBGNUMROWS], a
- ld a, e
- ld [H_VBCOPYBGSRC], a
- ret
-
-ClearScreen::
-; Clear wTileMap, then wait
-; for the bg map to update.
- ld bc, 20 * 18
- inc b
- ld hl, wTileMap
- ld a, $7f
-.loop
- ld [hli], a
- dec c
- jr nz, .loop
- dec b
- jr nz, .loop
- jp Delay3
-
-
+INCLUDE "home/copy2.asm"
INCLUDE "home/text.asm"
INCLUDE "home/vcopy.asm"
INCLUDE "home/init.asm"
INCLUDE "home/vblank.asm"
INCLUDE "home/fade.asm"
-
-
-Serial:: ; 2125 (0:2125)
- push af
- push bc
- push de
- push hl
- ld a, [$ffaa]
- inc a
- jr z, .asm_2142
- ld a, [$ff01]
- ld [$ffad], a
- ld a, [$ffac]
- ld [$ff01], a
- ld a, [$ffaa]
- cp $2
- jr z, .asm_2162
- ld a, $80
- ld [$ff02], a
- jr .asm_2162
-.asm_2142
- ld a, [$ff01]
- ld [$ffad], a
- ld [$ffaa], a
- cp $2
- jr z, .asm_215f
- xor a
- ld [$ff01], a
- ld a, $3
- ld [rDIV], a ; $ff04
-.asm_2153
- ld a, [rDIV] ; $ff04
- bit 7, a
- jr nz, .asm_2153
- ld a, $80
- ld [$ff02], a
- jr .asm_2162
-.asm_215f
- xor a
- ld [$ff01], a
-.asm_2162
- ld a, $1
- ld [$ffa9], a
- ld a, $fe
- ld [$ffac], a
- pop hl
- pop de
- pop bc
- pop af
- reti
-
-Func_216f:: ; 216f (0:216f)
- ld a, $1
- ld [$ffab], a
-.asm_2173
- ld a, [hl]
- ld [$ffac], a
- call Func_219a
- push bc
- ld b, a
- inc hl
- ld a, $30
-.asm_217e
- dec a
- jr nz, .asm_217e
- ld a, [$ffab]
- and a
- ld a, b
- pop bc
- jr z, .asm_2192
- dec hl
- cp $fd
- jr nz, .asm_2173
- xor a
- ld [$ffab], a
- jr .asm_2173
-.asm_2192
- ld [de], a
- inc de
- dec bc
- ld a, b
- or c
- jr nz, .asm_2173
- ret
-
-Func_219a:: ; 219a (0:219a)
- xor a
- ld [$ffa9], a
- ld a, [$ffaa]
- cp $2
- jr nz, .asm_21a7
- ld a, $81
- ld [$ff02], a
-.asm_21a7
- ld a, [$ffa9]
- and a
- jr nz, .asm_21f1
- ld a, [$ffaa]
- cp $1
- jr nz, .asm_21cc
- call Func_2237
- jr z, .asm_21cc
- call Func_2231
- push hl
- ld hl, wcc48
- inc [hl]
- jr nz, .asm_21c3
- dec hl
- inc [hl]
-.asm_21c3
- pop hl
- call Func_2237
- jr nz, .asm_21a7
- jp Func_223f
-.asm_21cc
- ld a, [rIE] ; $ffff
- and $f
- cp $8
- jr nz, .asm_21a7
- ld a, [W_NUMHITS] ; wd074
- dec a
- ld [W_NUMHITS], a ; wd074
- jr nz, .asm_21a7
- ld a, [wd075]
- dec a
- ld [wd075], a
- jr nz, .asm_21a7
- ld a, [$ffaa]
- cp $1
- jr z, .asm_21f1
- ld a, $ff
-.asm_21ee
- dec a
- jr nz, .asm_21ee
-.asm_21f1
- xor a
- ld [$ffa9], a
- ld a, [rIE] ; $ffff
- and $f
- sub $8
- jr nz, .asm_2204
- ld [W_NUMHITS], a ; wd074
- ld a, $50
- ld [wd075], a
-.asm_2204
- ld a, [$ffad]
- cp $fe
- ret nz
- call Func_2237
- jr z, .asm_221f
- push hl
- ld hl, wcc48
- ld a, [hl]
- dec a
- ld [hld], a
- inc a
- jr nz, .asm_2219
- dec [hl]
-.asm_2219
- pop hl
- call Func_2237
- jr z, Func_223f
-.asm_221f
- ld a, [rIE] ; $ffff
- and $f
- cp $8
- ld a, $fe
- ret z
- ld a, [hl]
- ld [$ffac], a
- call DelayFrame
- jp Func_219a
-
-Func_2231:: ; 2231 (0:2231)
- ld a, $f
-.asm_2233
- dec a
- jr nz, .asm_2233
- ret
-
-Func_2237:: ; 2237 (0:2237)
- push hl
- ld hl, wcc47
- ld a, [hli]
- or [hl]
- pop hl
- ret
-
-Func_223f:: ; 223f (0:223f)
- dec a
- ld [wcc47], a
- ld [wcc48], a
- ret
-
-Func_2247:: ; 2247 (0:2247)
- ld hl, wcc42
- ld de, wcc3d
- ld c, $2
- ld a, $1
- ld [$ffab], a
-.asm_2253
- call DelayFrame
- ld a, [hl]
- ld [$ffac], a
- call Func_219a
- ld b, a
- inc hl
- ld a, [$ffab]
- and a
- ld a, $0
- ld [$ffab], a
- jr nz, .asm_2253
- ld a, b
- ld [de], a
- inc de
- dec c
- jr nz, .asm_2253
- ret
-
-Func_226e:: ; 226e (0:226e)
- call SaveScreenTilesToBuffer1
- callab PrintWaitingText
- call Func_227f
- jp LoadScreenTilesFromBuffer1
-
-Func_227f:: ; 227f (0:227f)
- ld a, $ff
- ld [wcc3e], a
-.asm_2284
- call Func_22c3
- call DelayFrame
- call Func_2237
- jr z, .asm_22a0
- push hl
- ld hl, wcc48
- dec [hl]
- jr nz, .asm_229f
- dec hl
- dec [hl]
- jr nz, .asm_229f
- pop hl
- xor a
- jp Func_223f
-.asm_229f
- pop hl
-.asm_22a0
- ld a, [wcc3e]
- inc a
- jr z, .asm_2284
- ld b, $a
-.asm_22a8
- call DelayFrame
- call Func_22c3
- dec b
- jr nz, .asm_22a8
- ld b, $a
-.asm_22b3
- call DelayFrame
- call Func_22ed
- dec b
- jr nz, .asm_22b3
- ld a, [wcc3e]
- ld [wcc3d], a
- ret
-
-Func_22c3:: ; 22c3 (0:22c3)
- call asm_22d7
- ld a, [wcc42]
- add $60
- ld [$ffac], a
- ld a, [$ffaa]
- cp $2
- jr nz, asm_22d7
- ld a, $81
- ld [$ff02], a
-asm_22d7:: ; 22d7 (0:22d7)
- ld a, [$ffad]
- ld [wcc3d], a
- and $f0
- cp $60
- ret nz
- xor a
- ld [$ffad], a
- ld a, [wcc3d]
- and $f
- ld [wcc3e], a
- ret
-
-Func_22ed:: ; 22ed (0:22ed)
- xor a
- ld [$ffac], a
- ld a, [$ffaa]
- cp $2
- ret nz
- ld a, $81
- ld [$ff02], a
- ret
-
-Func_22fa:: ; 22fa (0:22fa)
- ld a, $2
- ld [$ff01], a
- xor a
- ld [$ffad], a
- ld a, $80
- ld [$ff02], a
- ret
-
-
-; timer interrupt is apparently not invoked anyway
-Timer:: ; 2306 (0:2306)
- reti
-
-
+INCLUDE "home/serial.asm"
+INCLUDE "home/timer.asm"
INCLUDE "home/audio.asm"
@@ -1912,7 +1375,7 @@
xor a
ld [H_AUTOBGTRANSFERENABLED],a ; disable auto-transfer
ld a,1
- ld [$ffb7],a ; joypad state update flag
+ ld [hJoy7],a ; joypad state update flag
ld a,[W_BATTLETYPE]
and a ; is it the Old Man battle?
jr nz,.specialBattleType
@@ -1956,7 +1419,7 @@
ld [wTopMenuItemY],a
ld a,5
ld [wTopMenuItemX],a
- ld a,%00000111 ; A button, B button, Select button
+ ld a,A_BUTTON | B_BUTTON | SELECT
ld [wMenuWatchedKeys],a
ld c,10
call DelayFrames
@@ -2044,7 +1507,7 @@
.skipGettingQuantity
ld a,[wcf91]
ld [wd0b5],a
- ld a,$01
+ ld a,BANK(ItemNames)
ld [wPredefBank],a
call GetName
jr .storeChosenEntry
@@ -2066,7 +1529,7 @@
ld a,[wCurrentMenuItem]
ld [wd12d],a
xor a
- ld [$ffb7],a ; joypad state update flag
+ ld [hJoy7],a ; joypad state update flag
ld hl,wd730
res 6,[hl] ; turn on letter printing delay
jp BankswitchBack
@@ -2227,7 +1690,7 @@
ld [wd12e],a
ld [wcc37],a
xor a
- ld [$ffb7],a
+ ld [hJoy7],a
ld hl,wd730
res 6,[hl]
call BankswitchBack
@@ -2380,7 +1843,7 @@
ld bc,20 + 8 ; 1 row down and 8 columns right
add hl,bc
ld a,"×"
- ldi [hl],a
+ ld [hli],a
ld a,[wd11e]
push af
ld a,[de]
@@ -3206,8 +2669,8 @@
FuncTX_BillsPC:: ; 346a (0:346a)
call SaveScreenTilesToBuffer2
- ld b, BANK(Func_214c2)
- ld hl, Func_214c2
+ ld b, BANK(BillsPC_)
+ ld hl, BillsPC_
jr bankswitchAndContinue
FuncTX_SlotMachine:: ; 3474 (0:3474)
@@ -3617,65 +3080,63 @@
pop hl
ret
-; copies the tile patterns for letters and numbers into VRAM
-LoadFontTilePatterns:: ; 3680 (0:3680)
- ld a,[rLCDC]
- bit 7,a ; is the LCD enabled?
- jr nz,.lcdEnabled
-.lcdDisabled
- ld hl,FontGraphics
- ld de,vFont
- ld bc,$400
- ld a,BANK(FontGraphics)
+
+LoadFontTilePatterns::
+ ld a, [rLCDC]
+ bit 7, a ; is the LCD enabled?
+ jr nz, .on
+.off
+ ld hl, FontGraphics
+ ld de, vFont
+ ld bc, $400
+ ld a, BANK(FontGraphics)
jp FarCopyDataDouble ; if LCD is off, transfer all at once
-.lcdEnabled
- ld de,FontGraphics
- ld hl,vFont
- ld bc,(BANK(FontGraphics) << 8 | $80)
+.on
+ ld de, FontGraphics
+ ld hl, vFont
+ ld bc, BANK(FontGraphics) << 8 | $80
jp CopyVideoDataDouble ; if LCD is on, transfer during V-blank
-; copies the text box tile patterns into VRAM
-LoadTextBoxTilePatterns:: ; 36a0 (0:36a0)
- ld a,[rLCDC]
- bit 7,a ; is the LCD enabled?
- jr nz,.lcdEnabled
-.lcdDisabled
- ld hl,TextBoxGraphics
- ld de,vChars2 + $600
- ld bc,$200
- ld a,BANK(TextBoxGraphics)
+LoadTextBoxTilePatterns::
+ ld a, [rLCDC]
+ bit 7, a ; is the LCD enabled?
+ jr nz, .on
+.off
+ ld hl, TextBoxGraphics
+ ld de, vChars2 + $600
+ ld bc, $200
+ ld a, BANK(TextBoxGraphics)
jp FarCopyData2 ; if LCD is off, transfer all at once
-.lcdEnabled
- ld de,TextBoxGraphics
- ld hl,vChars2 + $600
- ld bc,(BANK(TextBoxGraphics) << 8 | $20)
+.on
+ ld de, TextBoxGraphics
+ ld hl, vChars2 + $600
+ ld bc, BANK(TextBoxGraphics) << 8 | $20
jp CopyVideoData ; if LCD is on, transfer during V-blank
-; copies HP bar and status display tile patterns into VRAM
-LoadHpBarAndStatusTilePatterns:: ; 36c0 (0:36c0)
- ld a,[rLCDC]
- bit 7,a ; is the LCD enabled?
- jr nz,.lcdEnabled
-.lcdDisabled
- ld hl,HpBarAndStatusGraphics
- ld de,vChars2 + $620
- ld bc,$1e0
- ld a,BANK(HpBarAndStatusGraphics)
+LoadHpBarAndStatusTilePatterns::
+ ld a, [rLCDC]
+ bit 7, a ; is the LCD enabled?
+ jr nz, .on
+.off
+ ld hl, HpBarAndStatusGraphics
+ ld de, vChars2 + $620
+ ld bc, $1e0
+ ld a, BANK(HpBarAndStatusGraphics)
jp FarCopyData2 ; if LCD is off, transfer all at once
-.lcdEnabled
- ld de,HpBarAndStatusGraphics
- ld hl,vChars2 + $620
- ld bc,(BANK(HpBarAndStatusGraphics) << 8 | $1e)
+.on
+ ld de, HpBarAndStatusGraphics
+ ld hl, vChars2 + $620
+ ld bc, BANK(HpBarAndStatusGraphics) << 8 | $1e
jp CopyVideoData ; if LCD is on, transfer during V-blank
-;Fills memory range with the specified byte.
-;input registers a = fill_byte, bc = length, hl = address
-FillMemory:: ; 36e0 (0:36e0)
+
+FillMemory::
+; Fill bc bytes at hl with a.
push de
ld d, a
.loop
ld a, d
- ldi [hl], a
+ ld [hli], a
dec bc
ld a, b
or c
@@ -3683,9 +3144,9 @@
pop de
ret
-; loads sprite that de points to
-; bank of sprite is given in a
+
UncompressSpriteFromDE:: ; 36eb (0:36eb)
+; Decompress pic at a:de.
ld hl, W_SPRITEINPUTPTR
ld [hl], e
inc hl
@@ -3692,6 +3153,7 @@
ld [hl], d
jp UncompressSpriteData
+
SaveScreenTilesToBuffer2:: ; 36f4 (0:36f4)
ld hl, wTileMap
ld de, wTileMapBackup2
@@ -3782,8 +3244,12 @@
; returns pointer to name in de
ld a,[wd0b5]
ld [wd11e],a
- cp a,$C4 ;it's TM/HM
- jp nc,GetMachineName
+
+ ; TM names are separate from item names.
+ ; BUG: This applies to all names instead of just items.
+ cp HM_01
+ jp nc, GetMachineName
+
ld a,[H_LOADEDROMBANK]
push af
push hl
@@ -3858,8 +3324,8 @@
ld a, [H_LOADEDROMBANK]
push af
ld a, [wListMenuID] ; wListMenuID
- cp $1
- ld a, $1 ; hardcoded Bank
+ cp MOVESLISTMENU
+ ld a, BANK(ItemPrices)
jr nz, .asm_37ed
ld a, $f ; hardcoded Bank
.asm_37ed
@@ -3912,29 +3378,29 @@
ret
; this function is used when lower button sensitivity is wanted (e.g. menus)
-; OUTPUT: [$ffb5] = pressed buttons in usual format
-; there are two flags that control its functionality, [$ffb6] and [$ffb7]
+; OUTPUT: [hJoy5] = pressed buttons in usual format
+; there are two flags that control its functionality, [hJoy6] and [hJoy7]
; there are esentially three modes of operation
; 1. Get newly pressed buttons only
-; ([$ffb7] == 0, [$ffb6] == any)
-; Just copies [hJoyPressed] to [$ffb5].
+; ([hJoy7] == 0, [hJoy6] == any)
+; Just copies [hJoyPressed] to [hJoy5].
; 2. Get currently pressed buttons at low sample rate with delay
-; ([$ffb7] == 1, [$ffb6] != 0)
+; ([hJoy7] == 1, [hJoy6] != 0)
; If the user holds down buttons for more than half a second,
; report buttons as being pressed up to 12 times per second thereafter.
; If the user holds down buttons for less than half a second,
; report only one button press.
; 3. Same as 2, but report no buttons as pressed if A or B is held down.
-; ([$ffb7] == 1, [$ffb6] == 0)
+; ([hJoy7] == 1, [hJoy6] == 0)
JoypadLowSensitivity:: ; 3831 (0:3831)
call Joypad
- ld a,[$ffb7] ; flag
+ ld a,[hJoy7] ; flag
and a ; get all currently pressed buttons or only newly pressed buttons?
ld a,[hJoyPressed] ; newly pressed buttons
jr z,.storeButtonState
ld a,[hJoyHeld] ; all currently pressed buttons
.storeButtonState
- ld [$ffb5],a
+ ld [hJoy5],a
ld a,[hJoyPressed] ; newly pressed buttons
and a ; have any buttons been newly pressed since last check?
jr z,.noNewlyPressedButtons
@@ -3948,18 +3414,18 @@
jr z,.delayOver
.delayNotOver
xor a
- ld [$ffb5],a ; report no buttons as pressed
+ ld [hJoy5],a ; report no buttons as pressed
ret
.delayOver
-; if [$ffb6] = 0 and A or B is pressed, report no buttons as pressed
+; if [hJoy6] = 0 and A or B is pressed, report no buttons as pressed
ld a,[hJoyHeld]
- and a,%00000011 ; A and B buttons
+ and A_BUTTON | B_BUTTON
jr z,.setShortDelay
- ld a,[$ffb6] ; flag
+ ld a,[hJoy6] ; flag
and a
jr nz,.setShortDelay
xor a
- ld [$ffb5],a
+ ld [hJoy5],a
.setShortDelay
ld a,5 ; 1/12 of a second delay
ld [H_FRAMECOUNTER],a
@@ -3986,7 +3452,7 @@
pop hl
call JoypadLowSensitivity
predef Func_5a5f
- ld a, [$ffb5]
+ ld a, [hJoy5]
and A_BUTTON | B_BUTTON
jr z, .asm_3872
pop af
@@ -4066,7 +3532,7 @@
bit 0,a
jr z,.waitOneFrame
ld a,[W_OPTIONS]
- and a,$0f
+ and $f
ld [H_FRAMECOUNTER],a
jr .checkButtons
.waitOneFrame
@@ -4453,7 +3919,7 @@
.getJoypadState
pop hl
call JoypadLowSensitivity
- ld a,[$ffb5]
+ ld a,[hJoy5]
and a ; was a key pressed?
jr nz,.keyPressed
push hl
@@ -4476,7 +3942,7 @@
.keyPressed
xor a
ld [wcc4b],a
- ld a,[$ffb5]
+ ld a,[hJoy5]
ld b,a
bit 6,a ; pressed Up key?
jr z,.checkIfDownPressed
@@ -4518,8 +3984,8 @@
and b ; does the menu care about any of the pressed keys?
jp z,.loop1
.checkIfAButtonOrBButtonPressed
- ld a,[$ffb5]
- and a,%00000011 ; pressed A button or B button?
+ ld a,[hJoy5]
+ and A_BUTTON | B_BUTTON
jr z,.skipPlayingSound
.AButtonOrBButtonPressed
push hl
@@ -4536,7 +4002,7 @@
ld [H_DOWNARROWBLINKCNT1],a ; restore previous values
xor a
ld [wMenuWrappingEnabled],a ; disable menu wrapping
- ld a,[$ffb5]
+ ld a,[hJoy5]
ret
.noWrappingAround
ld a,[wcc37]
@@ -4549,7 +4015,7 @@
and a ; is the y coordinate 0?
jr z,.adjustForXCoord
ld hl,wTileMap
- ld bc,20 ; screen width
+ ld bc,SCREEN_WIDTH
.topMenuItemLoop
add hl,bc
dec a
@@ -4556,7 +4022,7 @@
jr nz,.topMenuItemLoop
.adjustForXCoord
ld a,[wTopMenuItemX]
- ld b,$00
+ ld b,0
ld c,a
add hl,bc
push hl
@@ -4709,7 +4175,7 @@
ret
PrintText:: ; 3c49 (0:3c49)
-; given a pointer in hl, print the text there
+; Print text hl at (1, 14).
push hl
ld a,1
ld [wd125],a
@@ -4721,256 +4187,244 @@
bcCoord 1, 14
jp TextCommandProcessor
-; converts a big-endian binary number into decimal and prints it
-; INPUT:
-; b = flags and number of bytes
-; bit 7: if set, print leading zeroes
-; if unset, do not print leading zeroes
-; bit 6: if set, left-align the string (do not pad empty digits with spaces)
-; if unset, right-align the string
-; bits 4-5: unused
-; bits 0-3: number of bytes (only 1 - 3 bytes supported)
-; c = number of decimal digits
-; de = address of the number (big-endian)
-PrintNumber:: ; 3c5f (0:3c5f)
+
+PrintNumber:: ; 3c5f
+; Print the c-digit, b-byte value at de.
+; Allows 2 to 7 digits. For 1-digit numbers, add
+; the value to char "0" instead of calling PrintNumber.
+; Flags LEADING_ZEROES and LEFT_ALIGN can be given
+; in bits 7 and 6 of b respectively.
+LEADING_ZEROES EQU 7
+LEFT_ALIGN EQU 6
+
push bc
xor a
- ld [H_PASTLEADINGZEROES],a
- ld [H_NUMTOPRINT],a
- ld [H_NUMTOPRINT + 1],a
- ld a,b
- and a,%00001111
- cp a,1
- jr z,.oneByte
- cp a,2
- jr z,.twoBytes
-.threeBytes
- ld a,[de]
- ld [H_NUMTOPRINT],a
+ ld [H_PASTLEADINGZEROES], a
+ ld [H_NUMTOPRINT], a
+ ld [H_NUMTOPRINT + 1], a
+ ld a, b
+ and $f
+ cp 1
+ jr z, .byte
+ cp 2
+ jr z, .word
+.long
+ ld a, [de]
+ ld [H_NUMTOPRINT], a
inc de
- ld a,[de]
- ld [H_NUMTOPRINT + 1],a
+ ld a, [de]
+ ld [H_NUMTOPRINT + 1], a
inc de
- ld a,[de]
- ld [H_NUMTOPRINT + 2],a
- jr .checkNumDigits
-.twoBytes
- ld a,[de]
- ld [H_NUMTOPRINT + 1],a
+ ld a, [de]
+ ld [H_NUMTOPRINT + 2], a
+ jr .start
+
+.word
+ ld a, [de]
+ ld [H_NUMTOPRINT + 1], a
inc de
- ld a,[de]
- ld [H_NUMTOPRINT + 2],a
- jr .checkNumDigits
-.oneByte
- ld a,[de]
- ld [H_NUMTOPRINT + 2],a
-.checkNumDigits
+ ld a, [de]
+ ld [H_NUMTOPRINT + 2], a
+ jr .start
+
+.byte
+ ld a, [de]
+ ld [H_NUMTOPRINT + 2], a
+
+.start
push de
- ld d,b
- ld a,c
- ld b,a
+
+ ld d, b
+ ld a, c
+ ld b, a
xor a
- ld c,a
- ld a,b ; a = number of decimal digits
- cp a,2
- jr z,.tensPlace
- cp a,3
- jr z,.hundredsPlace
- cp a,4
- jr z,.thousandsPlace
- cp a,5
- jr z,.tenThousandsPlace
- cp a,6
- jr z,.hundredThousandsPlace
-.millionsPlace
- ld a,1000000 >> 16
- ld [H_POWEROFTEN],a
- ld a,(1000000 >> 8) & $FF
- ld [H_POWEROFTEN + 1],a
- ld a,1000000 & $FF
- ld [H_POWEROFTEN + 2],a
- call PrintNumber_PrintDigit
- call PrintNumber_AdvancePointer
-.hundredThousandsPlace
- ld a,100000 >> 16
- ld [H_POWEROFTEN],a
- ld a,(100000 >> 8) & $FF
- ld [H_POWEROFTEN + 1],a
- ld a,100000 & $FF
- ld [H_POWEROFTEN + 2],a
- call PrintNumber_PrintDigit
- call PrintNumber_AdvancePointer
-.tenThousandsPlace
- xor a
- ld [H_POWEROFTEN],a
- ld a,10000 >> 8
- ld [H_POWEROFTEN + 1],a
- ld a,10000 & $FF
- ld [H_POWEROFTEN + 2],a
- call PrintNumber_PrintDigit
- call PrintNumber_AdvancePointer
-.thousandsPlace
- xor a
- ld [H_POWEROFTEN],a
- ld a,1000 >> 8
- ld [H_POWEROFTEN + 1],a
- ld a,1000 & $FF
- ld [H_POWEROFTEN + 2],a
- call PrintNumber_PrintDigit
- call PrintNumber_AdvancePointer
-.hundredsPlace
- xor a
- ld [H_POWEROFTEN],a
- xor a
- ld [H_POWEROFTEN + 1],a
- ld a,100
- ld [H_POWEROFTEN + 2],a
- call PrintNumber_PrintDigit
- call PrintNumber_AdvancePointer
-.tensPlace
- ld c,00
- ld a,[H_NUMTOPRINT + 2]
-.loop
- cp a,10
- jr c,.underflow
- sub a,10
+ ld c, a
+ ld a, b
+
+ cp 2
+ jr z, .tens
+ cp 3
+ jr z, .hundreds
+ cp 4
+ jr z, .thousands
+ cp 5
+ jr z, .ten_thousands
+ cp 6
+ jr z, .hundred_thousands
+
+print_digit: macro
+
+if (\1) / $10000
+ ld a, \1 / $10000 % $100
+else xor a
+endc
+ ld [H_POWEROFTEN + 0], a
+
+if (\1) / $100
+ ld a, \1 / $100 % $100
+else xor a
+endc
+ ld [H_POWEROFTEN + 1], a
+
+ ld a, \1 / $1 % $100
+ ld [H_POWEROFTEN + 2], a
+
+ call .PrintDigit
+ call .NextDigit
+endm
+
+.millions print_digit 1000000
+.hundred_thousands print_digit 100000
+.ten_thousands print_digit 10000
+.thousands print_digit 1000
+.hundreds print_digit 100
+
+.tens
+ ld c, 0
+ ld a, [H_NUMTOPRINT + 2]
+.mod
+ cp 10
+ jr c, .ok
+ sub 10
inc c
- jr .loop
-.underflow
- ld b,a
- ld a,[H_PASTLEADINGZEROES]
+ jr .mod
+.ok
+
+ ld b, a
+ ld a, [H_PASTLEADINGZEROES]
or c
- ld [H_PASTLEADINGZEROES],a
- jr nz,.pastLeadingZeroes
- call PrintNumber_PrintLeadingZero
- jr .advancePointer
-.pastLeadingZeroes
- ld a,"0"
+ ld [H_PASTLEADINGZEROES], a
+ jr nz, .past
+ call .PrintLeadingZero
+ jr .next
+.past
+ ld a, "0"
add c
- ld [hl],a
-.advancePointer
- call PrintNumber_AdvancePointer
-.onesPlace
- ld a,"0"
+ ld [hl], a
+.next
+
+ call .NextDigit
+.ones
+ ld a, "0"
add b
- ld [hli],a
+ ld [hli], a
pop de
dec de
pop bc
ret
-; prints a decimal digit
-; This works by repeatedely subtracting a power of ten until the number becomes negative.
-; The number of subtractions it took in order to make the number negative is the digit for the current number place.
-; The last value that the number had before becoming negative is kept as the new value of the number.
-; A more succinct description is that the number is divided by a power of ten
-; and the quotient becomes the digit while the remainder is stored as the new value of the number.
-PrintNumber_PrintDigit:: ; 3d25 (0:3d25)
- ld c,0 ; counts number of loop iterations to determine the decimal digit
+.PrintDigit:
+; Divide by the current decimal place.
+; Print the quotient, and keep the modulus.
+ ld c, 0
.loop
- ld a,[H_POWEROFTEN]
- ld b,a
- ld a,[H_NUMTOPRINT]
- ld [H_SAVEDNUMTOPRINT],a
+ ld a, [H_POWEROFTEN]
+ ld b, a
+ ld a, [H_NUMTOPRINT]
+ ld [H_SAVEDNUMTOPRINT], a
cp b
- jr c,.underflow0
+ jr c, .underflow0
sub b
- ld [H_NUMTOPRINT],a
- ld a,[H_POWEROFTEN + 1]
- ld b,a
- ld a,[H_NUMTOPRINT + 1]
- ld [H_SAVEDNUMTOPRINT + 1],a
+ ld [H_NUMTOPRINT], a
+ ld a, [H_POWEROFTEN + 1]
+ ld b, a
+ ld a, [H_NUMTOPRINT + 1]
+ ld [H_SAVEDNUMTOPRINT + 1], a
cp b
- jr nc,.noBorrowForByte1
-.byte1BorrowFromByte0
- ld a,[H_NUMTOPRINT]
- or a,0
- jr z,.underflow1
+ jr nc, .noborrow1
+
+ ld a, [H_NUMTOPRINT]
+ or 0
+ jr z, .underflow1
dec a
- ld [H_NUMTOPRINT],a
- ld a,[H_NUMTOPRINT + 1]
-.noBorrowForByte1
+ ld [H_NUMTOPRINT], a
+ ld a, [H_NUMTOPRINT + 1]
+.noborrow1
+
sub b
- ld [H_NUMTOPRINT + 1],a
- ld a,[H_POWEROFTEN + 2]
- ld b,a
- ld a,[H_NUMTOPRINT + 2]
- ld [H_SAVEDNUMTOPRINT + 2],a
+ ld [H_NUMTOPRINT + 1], a
+ ld a, [H_POWEROFTEN + 2]
+ ld b, a
+ ld a, [H_NUMTOPRINT + 2]
+ ld [H_SAVEDNUMTOPRINT + 2], a
cp b
- jr nc,.noBorrowForByte2
-.byte2BorrowFromByte1
- ld a,[H_NUMTOPRINT + 1]
+ jr nc, .noborrow2
+
+ ld a, [H_NUMTOPRINT + 1]
and a
- jr nz,.finishByte2BorrowFromByte1
-.byte2BorrowFromByte0
- ld a,[H_NUMTOPRINT]
+ jr nz, .borrowed
+
+ ld a, [H_NUMTOPRINT]
and a
- jr z,.underflow2
+ jr z, .underflow2
dec a
- ld [H_NUMTOPRINT],a
+ ld [H_NUMTOPRINT], a
xor a
-.finishByte2BorrowFromByte1
+.borrowed
+
dec a
- ld [H_NUMTOPRINT + 1],a
- ld a,[H_NUMTOPRINT + 2]
-.noBorrowForByte2
+ ld [H_NUMTOPRINT + 1], a
+ ld a, [H_NUMTOPRINT + 2]
+.noborrow2
sub b
- ld [H_NUMTOPRINT + 2],a
+ ld [H_NUMTOPRINT + 2], a
inc c
jr .loop
+
.underflow2
- ld a,[H_SAVEDNUMTOPRINT + 1]
- ld [H_NUMTOPRINT + 1],a
+ ld a, [H_SAVEDNUMTOPRINT + 1]
+ ld [H_NUMTOPRINT + 1], a
.underflow1
- ld a,[H_SAVEDNUMTOPRINT]
- ld [H_NUMTOPRINT],a
+ ld a, [H_SAVEDNUMTOPRINT]
+ ld [H_NUMTOPRINT], a
.underflow0
- ld a,[H_PASTLEADINGZEROES]
+ ld a, [H_PASTLEADINGZEROES]
or c
- jr z,PrintNumber_PrintLeadingZero
- ld a,"0"
+ jr z, .PrintLeadingZero
+
+ ld a, "0"
add c
- ld [hl],a
- ld [H_PASTLEADINGZEROES],a
+ ld [hl], a
+ ld [H_PASTLEADINGZEROES], a
ret
-; prints a leading zero unless they are turned off in the flags
-PrintNumber_PrintLeadingZero:: ; 3d83 (0:3d83)
- bit 7,d ; print leading zeroes?
+.PrintLeadingZero:
+ bit LEADING_ZEROES, d
ret z
- ld [hl],"0"
+ ld [hl], "0"
ret
-; increments the pointer unless leading zeroes are not being printed,
-; the number is left-aligned, and no nonzero digits have been printed yet
-PrintNumber_AdvancePointer:: ; 3d89 (0:3d89)
- bit 7,d ; print leading zeroes?
- jr nz,.incrementPointer
- bit 6,d ; left alignment or right alignment?
- jr z,.incrementPointer
- ld a,[H_PASTLEADINGZEROES]
+.NextDigit:
+; Increment unless the number is left-aligned,
+; leading zeroes are not printed, and no digits
+; have been printed yet.
+ bit LEADING_ZEROES, d
+ jr nz, .inc
+ bit LEFT_ALIGN, d
+ jr z, .inc
+ ld a, [H_PASTLEADINGZEROES]
and a
ret z
-.incrementPointer
+.inc
inc hl
ret
-; calls a function from a table of function pointers
-; INPUT:
-; a = index within table
-; hl = address of function pointer table
-CallFunctionInTable:: ; 3d97 (0:3d97)
+
+CallFunctionInTable::
+JumpTable::
+; Call function a in jumptable hl.
+; de is not preserved.
push hl
push de
push bc
add a
- ld d,0
- ld e,a
- add hl,de
- ld a,[hli]
- ld h,[hl]
- ld l,a
- ld de,.returnAddress
+ ld d, 0
+ ld e, a
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ ld de, .returnAddress
push de
jp [hl]
.returnAddress
@@ -5123,7 +4577,7 @@
push de
push bc
callba Random_
- ld a,[hRandomAdd]
+ ld a, [hRandomAdd]
pop bc
pop de
pop hl
@@ -5176,7 +4630,7 @@
PrintPredefTextID:: ; 3ef5 (0:3ef5)
ld [H_DOWNARROWBLINKCNT2], a ; $ff8c
- ld hl, PointerTable_3f22
+ ld hl, TextPredefs
call Func_3f0f
ld hl, wcf11
set 0, [hl]
@@ -5183,88 +4637,88 @@
call DisplayTextID
Func_3f05:: ; 3f05 (0:3f05)
- ld hl, W_MAPTEXTPTR ; wd36c
+ ld hl, W_MAPTEXTPTR
ld a, [$ffec]
ld [hli], a
- ld a, [$ffed]
+ ld a, [$ffec + 1]
ld [hl], a
ret
Func_3f0f:: ; 3f0f (0:3f0f)
- ld a, [W_MAPTEXTPTR] ; wd36c
+ ld a, [W_MAPTEXTPTR]
ld [$ffec], a
ld a, [W_MAPTEXTPTR + 1]
- ld [$ffed], a
+ ld [$ffec + 1], a
ld a, l
- ld [W_MAPTEXTPTR], a ; wd36c
+ ld [W_MAPTEXTPTR], a
ld a, h
ld [W_MAPTEXTPTR + 1], a
ret
-PointerTable_3f22:: ; 3f22 (0:3f22)
- dw CardKeySuccessText ; id = 01
- dw CardKeyFailText ; id = 02
- dw RedBedroomPC ; id = 03
- dw RedBedroomSNESText ; id = 04
- dw PushStartText ; id = 05
- dw SaveOptionText ; id = 06
- dw StrengthsAndWeaknessesText ; id = 07
- dw OakLabEmailText ; id = 08
- dw AerodactylFossilText ; id = 09
- dw Route15UpstairsBinocularsText ; id = 0A
- dw KabutopsFossilText ; id = 0B
- dw GymStatueText1 ; id = 0C
- dw GymStatueText2 ; id = 0D
- dw BookcaseText ; id = 0E
- dw ViridianCityPokecenterBenchGuyText ; id = 0F
- dw PewterCityPokecenterBenchGuyText ; id = 10
- dw CeruleanCityPokecenterBenchGuyText ; id = 11
- dw LavenderCityPokecenterBenchGuyText ; id = 12
- dw VermilionCityPokecenterBenchGuyText ; id = 13
- dw CeladonCityPokecenterBenchGuyText ; id = 14
- dw CeladonCityHotelText ; id = 15
- dw FuchsiaCityPokecenterBenchGuyText ; id = 16
- dw CinnabarIslandPokecenterBenchGuyText ; id = 17
- dw SaffronCityPokecenterBenchGuyText ; id = 18
- dw MtMoonPokecenterBenchGuyText ; id = 19
- dw RockTunnelPokecenterBenchGuyText ; id = 1A
- dw UnusedBenchGuyText1 ; id = 1B
- dw UnusedBenchGuyText2 ; id = 1C
- dw UnusedBenchGuyText3 ; id = 1D
- dw TerminatorText_62508 ; id = 1E
- dw PredefText1f ; id = 1F
- dw ViridianSchoolNotebook ; id = 20
- dw ViridianSchoolBlackboard ; id = 21
- dw JustAMomentText ; id = 22
- dw PredefText23 ; id = 23
- dw FoundHiddenItemText ; id = 24
- dw HiddenItemBagFullText ; id = 25
- dw VermilionGymTrashText ; id = 26
- dw IndigoPlateauHQText ; id = 27
- dw GameCornerOutOfOrderText ; id = 28
- dw GameCornerOutToLunchText ; id = 29
- dw GameCornerSomeonesKeysText ; id = 2A
- dw FoundHiddenCoinsText ; id = 2B
- dw DroppedHiddenCoinsText ; id = 2C
- dw BillsHouseMonitorText ; id = 2D
- dw BillsHouseInitiatedText ; id = 2E
- dw BillsHousePokemonList ; id = 2F
- dw MagazinesText ; id = 30
- dw CinnabarGymQuiz ; id = 31
- dw GameCornerNoCoinsText ; id = 32
- dw GameCornerCoinCaseText ; id = 33
- dw LinkCableHelp ; id = 34
- dw TMNotebook ; id = 35
- dw FightingDojoText ; id = 36
- dw FightingDojoText_52a10 ; id = 37
- dw FightingDojoText_52a1d ; id = 38
- dw NewBicycleText ; id = 39
- dw IndigoPlateauStatues ; id = 3A
- dw VermilionGymTrashSuccesText1 ; id = 3B
- dw VermilionGymTrashSuccesText2 ; id = 3C
- dw VermilionGymTrashSuccesText3 ; id = 3D
- dw VermilionGymTrashFailText ; id = 3E
- dw TownMapText ; id = 3F
- dw BookOrSculptureText ; id = 40
- dw ElevatorText ; id = 41
- dw PokemonStuffText ; id = 42
+TextPredefs::
+ add_tx_pre CardKeySuccessText ; 01
+ add_tx_pre CardKeyFailText ; 02
+ add_tx_pre RedBedroomPC ; 03
+ add_tx_pre RedBedroomSNESText ; 04
+ add_tx_pre PushStartText ; 05
+ add_tx_pre SaveOptionText ; 06
+ add_tx_pre StrengthsAndWeaknessesText ; 07
+ add_tx_pre OakLabEmailText ; 08
+ add_tx_pre AerodactylFossilText ; 09
+ add_tx_pre Route15UpstairsBinocularsText ; 0A
+ add_tx_pre KabutopsFossilText ; 0B
+ add_tx_pre GymStatueText1 ; 0C
+ add_tx_pre GymStatueText2 ; 0D
+ add_tx_pre BookcaseText ; 0E
+ add_tx_pre ViridianCityPokecenterBenchGuyText ; 0F
+ add_tx_pre PewterCityPokecenterBenchGuyText ; 10
+ add_tx_pre CeruleanCityPokecenterBenchGuyText ; 11
+ add_tx_pre LavenderCityPokecenterBenchGuyText ; 12
+ add_tx_pre VermilionCityPokecenterBenchGuyText ; 13
+ add_tx_pre CeladonCityPokecenterBenchGuyText ; 14
+ add_tx_pre CeladonCityHotelText ; 15
+ add_tx_pre FuchsiaCityPokecenterBenchGuyText ; 16
+ add_tx_pre CinnabarIslandPokecenterBenchGuyText ; 17
+ add_tx_pre SaffronCityPokecenterBenchGuyText ; 18
+ add_tx_pre MtMoonPokecenterBenchGuyText ; 19
+ add_tx_pre RockTunnelPokecenterBenchGuyText ; 1A
+ add_tx_pre UnusedBenchGuyText1 ; 1B
+ add_tx_pre UnusedBenchGuyText2 ; 1C
+ add_tx_pre UnusedBenchGuyText3 ; 1D
+ add_tx_pre TerminatorText_62508 ; 1E
+ add_tx_pre PredefText1f ; 1F
+ add_tx_pre ViridianSchoolNotebook ; 20
+ add_tx_pre ViridianSchoolBlackboard ; 21
+ add_tx_pre JustAMomentText ; 22
+ add_tx_pre PredefText23 ; 23
+ add_tx_pre FoundHiddenItemText ; 24
+ add_tx_pre HiddenItemBagFullText ; 25
+ add_tx_pre VermilionGymTrashText ; 26
+ add_tx_pre IndigoPlateauHQText ; 27
+ add_tx_pre GameCornerOutOfOrderText ; 28
+ add_tx_pre GameCornerOutToLunchText ; 29
+ add_tx_pre GameCornerSomeonesKeysText ; 2A
+ add_tx_pre FoundHiddenCoinsText ; 2B
+ add_tx_pre DroppedHiddenCoinsText ; 2C
+ add_tx_pre BillsHouseMonitorText ; 2D
+ add_tx_pre BillsHouseInitiatedText ; 2E
+ add_tx_pre BillsHousePokemonList ; 2F
+ add_tx_pre MagazinesText ; 30
+ add_tx_pre CinnabarGymQuiz ; 31
+ add_tx_pre GameCornerNoCoinsText ; 32
+ add_tx_pre GameCornerCoinCaseText ; 33
+ add_tx_pre LinkCableHelp ; 34
+ add_tx_pre TMNotebook ; 35
+ add_tx_pre FightingDojoText ; 36
+ add_tx_pre FightingDojoText_52a10 ; 37
+ add_tx_pre FightingDojoText_52a1d ; 38
+ add_tx_pre NewBicycleText ; 39
+ add_tx_pre IndigoPlateauStatues ; 3A
+ add_tx_pre VermilionGymTrashSuccesText1 ; 3B
+ add_tx_pre VermilionGymTrashSuccesText2 ; 3C
+ add_tx_pre VermilionGymTrashSuccesText3 ; 3D
+ add_tx_pre VermilionGymTrashFailText ; 3E
+ add_tx_pre TownMapText ; 3F
+ add_tx_pre BookOrSculptureText ; 40
+ add_tx_pre ElevatorText ; 41
+ add_tx_pre PokemonStuffText ; 42
--- /dev/null
+++ b/home/copy.asm
@@ -1,0 +1,24 @@
+FarCopyData::
+; Copy bc bytes from a:hl to de.
+ ld [wBuffer], a
+ ld a, [H_LOADEDROMBANK]
+ push af
+ ld a, [wBuffer]
+ ld [H_LOADEDROMBANK], a
+ ld [MBC3RomBank], a
+ call CopyData
+ pop af
+ ld [H_LOADEDROMBANK], a
+ ld [MBC3RomBank], a
+ ret
+
+CopyData::
+; Copy bc bytes from hl to de.
+ ld a, [hli]
+ ld [de], a
+ inc de
+ dec bc
+ ld a, c
+ or b
+ jr nz, CopyData
+ ret
--- /dev/null
+++ b/home/copy2.asm
@@ -1,0 +1,228 @@
+FarCopyData2::
+; Identical to FarCopyData, but uses $ff8b
+; as temp space instead of wBuffer.
+ ld [$ff8b],a
+ ld a,[H_LOADEDROMBANK]
+ push af
+ ld a,[$ff8b]
+ ld [H_LOADEDROMBANK],a
+ ld [MBC3RomBank],a
+ call CopyData
+ pop af
+ ld [H_LOADEDROMBANK],a
+ ld [MBC3RomBank],a
+ ret
+
+FarCopyData3::
+; Copy bc bytes from a:de to hl.
+ ld [$ff8b],a
+ ld a,[H_LOADEDROMBANK]
+ push af
+ ld a,[$ff8b]
+ ld [H_LOADEDROMBANK],a
+ ld [MBC3RomBank],a
+ push hl
+ push de
+ push de
+ ld d,h
+ ld e,l
+ pop hl
+ call CopyData
+ pop de
+ pop hl
+ pop af
+ ld [H_LOADEDROMBANK],a
+ ld [MBC3RomBank],a
+ ret
+
+FarCopyDataDouble::
+; Expand bc bytes of 1bpp image data
+; from a:hl to 2bpp data at de.
+ ld [$ff8b],a
+ ld a,[H_LOADEDROMBANK]
+ push af
+ ld a,[$ff8b]
+ ld [H_LOADEDROMBANK],a
+ ld [MBC3RomBank],a
+.loop
+ ld a,[hli]
+ ld [de],a
+ inc de
+ ld [de],a
+ inc de
+ dec bc
+ ld a,c
+ or b
+ jr nz,.loop
+ pop af
+ ld [H_LOADEDROMBANK],a
+ ld [MBC3RomBank],a
+ ret
+
+CopyVideoData::
+; Wait for the next VBlank, then copy c 2bpp
+; tiles from b:de to hl, 8 tiles at a time.
+; This takes c/8 frames.
+
+ ld a, [H_AUTOBGTRANSFERENABLED]
+ push af
+ xor a ; disable auto-transfer while copying
+ ld [H_AUTOBGTRANSFERENABLED], a
+
+ ld a, [H_LOADEDROMBANK]
+ ld [$ff8b], a
+
+ ld a, b
+ ld [H_LOADEDROMBANK], a
+ ld [MBC3RomBank], a
+
+ ld a, e
+ ld [H_VBCOPYSRC], a
+ ld a, d
+ ld [H_VBCOPYSRC + 1], a
+
+ ld a, l
+ ld [H_VBCOPYDEST], a
+ ld a, h
+ ld [H_VBCOPYDEST + 1], a
+
+.loop
+ ld a, c
+ cp 8
+ jr nc, .keepgoing
+
+.done
+ ld [H_VBCOPYSIZE], a
+ call DelayFrame
+ ld a, [$ff8b]
+ ld [H_LOADEDROMBANK], a
+ ld [MBC3RomBank], a
+ pop af
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ret
+
+.keepgoing
+ ld a, 8
+ ld [H_VBCOPYSIZE], a
+ call DelayFrame
+ ld a, c
+ sub 8
+ ld c, a
+ jr .loop
+
+CopyVideoDataDouble::
+; Wait for the next VBlank, then copy c 1bpp
+; tiles from b:de to hl, 8 tiles at a time.
+; This takes c/8 frames.
+ ld a, [H_AUTOBGTRANSFERENABLED]
+ push af
+ xor a ; disable auto-transfer while copying
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ld a, [H_LOADEDROMBANK]
+ ld [$ff8b], a
+
+ ld a, b
+ ld [H_LOADEDROMBANK], a
+ ld [MBC3RomBank], a
+
+ ld a, e
+ ld [H_VBCOPYDOUBLESRC], a
+ ld a, d
+ ld [H_VBCOPYDOUBLESRC + 1], a
+
+ ld a, l
+ ld [H_VBCOPYDOUBLEDEST], a
+ ld a, h
+ ld [H_VBCOPYDOUBLEDEST + 1], a
+
+.loop
+ ld a, c
+ cp 8
+ jr nc, .keepgoing
+
+.done
+ ld [H_VBCOPYDOUBLESIZE], a
+ call DelayFrame
+ ld a, [$ff8b]
+ ld [H_LOADEDROMBANK], a
+ ld [MBC3RomBank], a
+ pop af
+ ld [H_AUTOBGTRANSFERENABLED], a
+ ret
+
+.keepgoing
+ ld a, 8
+ ld [H_VBCOPYDOUBLESIZE], a
+ call DelayFrame
+ ld a, c
+ sub 8
+ ld c, a
+ jr .loop
+
+ClearScreenArea::
+; Clear tilemap area cxb at hl.
+ ld a, $7f ; blank tile
+ ld de, 20 ; screen width
+.y
+ push hl
+ push bc
+.x
+ ld [hli], a
+ dec c
+ jr nz, .x
+ pop bc
+ pop hl
+ add hl, de
+ dec b
+ jr nz, .y
+ ret
+
+CopyScreenTileBufferToVRAM::
+; Copy wTileMap to the BG Map starting at b * $100.
+; This is done in thirds of 6 rows, so it takes 3 frames.
+
+ ld c, 6
+
+ ld hl, $600 * 0
+ ld de, wTileMap + 20 * 6 * 0
+ call .setup
+ call DelayFrame
+
+ ld hl, $600 * 1
+ ld de, wTileMap + 20 * 6 * 1
+ call .setup
+ call DelayFrame
+
+ ld hl, $600 * 2
+ ld de, wTileMap + 20 * 6 * 2
+ call .setup
+ jp DelayFrame
+
+.setup
+ ld a, d
+ ld [H_VBCOPYBGSRC+1], a
+ call GetRowColAddressBgMap
+ ld a, l
+ ld [H_VBCOPYBGDEST], a
+ ld a, h
+ ld [H_VBCOPYBGDEST+1], a
+ ld a, c
+ ld [H_VBCOPYBGNUMROWS], a
+ ld a, e
+ ld [H_VBCOPYBGSRC], a
+ ret
+
+ClearScreen::
+; Clear wTileMap, then wait
+; for the bg map to update.
+ ld bc, 20 * 18
+ inc b
+ ld hl, wTileMap
+ ld a, $7f
+.loop
+ ld [hli], a
+ dec c
+ jr nz, .loop
+ dec b
+ jr nz, .loop
+ jp Delay3
--- /dev/null
+++ b/home/serial.asm
@@ -1,0 +1,304 @@
+Serial:: ; 2125 (0:2125)
+ push af
+ push bc
+ push de
+ push hl
+ ld a, [$ffaa]
+ inc a
+ jr z, .asm_2142
+ ld a, [$ff01]
+ ld [$ffad], a
+ ld a, [$ffac]
+ ld [$ff01], a
+ ld a, [$ffaa]
+ cp $2
+ jr z, .asm_2162
+ ld a, $80
+ ld [$ff02], a
+ jr .asm_2162
+.asm_2142
+ ld a, [$ff01]
+ ld [$ffad], a
+ ld [$ffaa], a
+ cp $2
+ jr z, .asm_215f
+ xor a
+ ld [$ff01], a
+ ld a, $3
+ ld [rDIV], a ; $ff04
+.asm_2153
+ ld a, [rDIV] ; $ff04
+ bit 7, a
+ jr nz, .asm_2153
+ ld a, $80
+ ld [$ff02], a
+ jr .asm_2162
+.asm_215f
+ xor a
+ ld [$ff01], a
+.asm_2162
+ ld a, $1
+ ld [$ffa9], a
+ ld a, $fe
+ ld [$ffac], a
+ pop hl
+ pop de
+ pop bc
+ pop af
+ reti
+
+Func_216f:: ; 216f (0:216f)
+ ld a, $1
+ ld [$ffab], a
+.asm_2173
+ ld a, [hl]
+ ld [$ffac], a
+ call Func_219a
+ push bc
+ ld b, a
+ inc hl
+ ld a, $30
+.asm_217e
+ dec a
+ jr nz, .asm_217e
+ ld a, [$ffab]
+ and a
+ ld a, b
+ pop bc
+ jr z, .asm_2192
+ dec hl
+ cp $fd
+ jr nz, .asm_2173
+ xor a
+ ld [$ffab], a
+ jr .asm_2173
+.asm_2192
+ ld [de], a
+ inc de
+ dec bc
+ ld a, b
+ or c
+ jr nz, .asm_2173
+ ret
+
+Func_219a:: ; 219a (0:219a)
+ xor a
+ ld [$ffa9], a
+ ld a, [$ffaa]
+ cp $2
+ jr nz, .asm_21a7
+ ld a, $81
+ ld [$ff02], a
+.asm_21a7
+ ld a, [$ffa9]
+ and a
+ jr nz, .asm_21f1
+ ld a, [$ffaa]
+ cp $1
+ jr nz, .asm_21cc
+ call Func_2237
+ jr z, .asm_21cc
+ call Func_2231
+ push hl
+ ld hl, wcc48
+ inc [hl]
+ jr nz, .asm_21c3
+ dec hl
+ inc [hl]
+.asm_21c3
+ pop hl
+ call Func_2237
+ jr nz, .asm_21a7
+ jp Func_223f
+.asm_21cc
+ ld a, [rIE] ; $ffff
+ and $f
+ cp $8
+ jr nz, .asm_21a7
+ ld a, [W_NUMHITS] ; wd074
+ dec a
+ ld [W_NUMHITS], a ; wd074
+ jr nz, .asm_21a7
+ ld a, [wd075]
+ dec a
+ ld [wd075], a
+ jr nz, .asm_21a7
+ ld a, [$ffaa]
+ cp $1
+ jr z, .asm_21f1
+ ld a, $ff
+.asm_21ee
+ dec a
+ jr nz, .asm_21ee
+.asm_21f1
+ xor a
+ ld [$ffa9], a
+ ld a, [rIE] ; $ffff
+ and $f
+ sub $8
+ jr nz, .asm_2204
+ ld [W_NUMHITS], a ; wd074
+ ld a, $50
+ ld [wd075], a
+.asm_2204
+ ld a, [$ffad]
+ cp $fe
+ ret nz
+ call Func_2237
+ jr z, .asm_221f
+ push hl
+ ld hl, wcc48
+ ld a, [hl]
+ dec a
+ ld [hld], a
+ inc a
+ jr nz, .asm_2219
+ dec [hl]
+.asm_2219
+ pop hl
+ call Func_2237
+ jr z, Func_223f
+.asm_221f
+ ld a, [rIE] ; $ffff
+ and $f
+ cp $8
+ ld a, $fe
+ ret z
+ ld a, [hl]
+ ld [$ffac], a
+ call DelayFrame
+ jp Func_219a
+
+Func_2231:: ; 2231 (0:2231)
+ ld a, $f
+.asm_2233
+ dec a
+ jr nz, .asm_2233
+ ret
+
+Func_2237:: ; 2237 (0:2237)
+ push hl
+ ld hl, wcc47
+ ld a, [hli]
+ or [hl]
+ pop hl
+ ret
+
+Func_223f:: ; 223f (0:223f)
+ dec a
+ ld [wcc47], a
+ ld [wcc48], a
+ ret
+
+Func_2247:: ; 2247 (0:2247)
+ ld hl, wcc42
+ ld de, wcc3d
+ ld c, $2
+ ld a, $1
+ ld [$ffab], a
+.asm_2253
+ call DelayFrame
+ ld a, [hl]
+ ld [$ffac], a
+ call Func_219a
+ ld b, a
+ inc hl
+ ld a, [$ffab]
+ and a
+ ld a, $0
+ ld [$ffab], a
+ jr nz, .asm_2253
+ ld a, b
+ ld [de], a
+ inc de
+ dec c
+ jr nz, .asm_2253
+ ret
+
+Func_226e:: ; 226e (0:226e)
+ call SaveScreenTilesToBuffer1
+ callab PrintWaitingText
+ call Func_227f
+ jp LoadScreenTilesFromBuffer1
+
+Func_227f:: ; 227f (0:227f)
+ ld a, $ff
+ ld [wcc3e], a
+.asm_2284
+ call Func_22c3
+ call DelayFrame
+ call Func_2237
+ jr z, .asm_22a0
+ push hl
+ ld hl, wcc48
+ dec [hl]
+ jr nz, .asm_229f
+ dec hl
+ dec [hl]
+ jr nz, .asm_229f
+ pop hl
+ xor a
+ jp Func_223f
+.asm_229f
+ pop hl
+.asm_22a0
+ ld a, [wcc3e]
+ inc a
+ jr z, .asm_2284
+ ld b, $a
+.asm_22a8
+ call DelayFrame
+ call Func_22c3
+ dec b
+ jr nz, .asm_22a8
+ ld b, $a
+.asm_22b3
+ call DelayFrame
+ call Func_22ed
+ dec b
+ jr nz, .asm_22b3
+ ld a, [wcc3e]
+ ld [wcc3d], a
+ ret
+
+Func_22c3:: ; 22c3 (0:22c3)
+ call asm_22d7
+ ld a, [wcc42]
+ add $60
+ ld [$ffac], a
+ ld a, [$ffaa]
+ cp $2
+ jr nz, asm_22d7
+ ld a, $81
+ ld [$ff02], a
+asm_22d7:: ; 22d7 (0:22d7)
+ ld a, [$ffad]
+ ld [wcc3d], a
+ and $f0
+ cp $60
+ ret nz
+ xor a
+ ld [$ffad], a
+ ld a, [wcc3d]
+ and $f
+ ld [wcc3e], a
+ ret
+
+Func_22ed:: ; 22ed (0:22ed)
+ xor a
+ ld [$ffac], a
+ ld a, [$ffaa]
+ cp $2
+ ret nz
+ ld a, $81
+ ld [$ff02], a
+ ret
+
+Func_22fa:: ; 22fa (0:22fa)
+ ld a, $2
+ ld [$ff01], a
+ xor a
+ ld [$ffad], a
+ ld a, $80
+ ld [$ff02], a
+ ret
--- /dev/null
+++ b/home/timer.asm
@@ -1,0 +1,3 @@
+; timer interrupt is apparently not invoked anyway
+Timer:: ; 2306 (0:2306)
+ reti
--- a/hram.asm
+++ b/hram.asm
@@ -1,8 +1,8 @@
-H_SPRITEWIDTH EQU $FF8B ; in bytes
+H_SPRITEWIDTH EQU $FF8B ; in tiles
H_SPRITEINTERLACECOUNTER EQU $FF8B
-H_SPRITEHEIGHT EQU $FF8C ; in bytes
-H_SPRITEOFFSET EQU $FF8D
+H_SPRITEHEIGHT EQU $FF8C ; in tiles
+H_SPRITEOFFSET EQU $FF8D
hSoftReset EQU $FF8A
; Initialized to 16.
@@ -14,28 +14,31 @@
H_DOWNARROWBLINKCNT1 EQU $FF8B
H_DOWNARROWBLINKCNT2 EQU $FF8C
-; Note: the following multiplication and division addresses are used for multiple purposes
-; and so they overlap with each other
+; Multiplcation and division variables are meant
+; to overlap for back-to-back usage. Big endian.
-H_MULTIPLICAND EQU $FF96 ; 3 bytes, big endian order
+H_MULTIPLICAND EQU $FF96 ; 3 bytes
H_MULTIPLIER EQU $FF99 ; 1 byte
-H_PRODUCT EQU $FF95 ; 4 bytes, big endian order
+H_PRODUCT EQU $FF95 ; 4 bytes
-H_DIVIDEND EQU $FF95 ; 4 bytes, big endian order
+H_DIVIDEND EQU $FF95 ; 4 bytes
H_DIVISOR EQU $FF99 ; 1 byte
-H_QUOTIENT EQU $FF95 ; 4 bytes, big endian order
+H_QUOTIENT EQU $FF95 ; 4 bytes
H_REMAINDER EQU $FF99 ; 1 byte
-; used to convert numbers to decimal
-H_PASTLEADINGZEROES EQU $FF95 ; flag to indicate that a nonzero digit has been printed
-H_NUMTOPRINT EQU $FF96 ; 3 bytes, big endian order
-H_POWEROFTEN EQU $FF99 ; 3 bytes, big endian order
-H_SAVEDNUMTOPRINT EQU $FF9C ; 3 bytes, big endian order (to back out of a subtraction)
+; PrintNumber (big endian).
+H_PASTLEADINGZEROES EQU $FF95 ; last char printed
+H_NUMTOPRINT EQU $FF96 ; 3 bytes
+H_POWEROFTEN EQU $FF99 ; 3 bytes
+H_SAVEDNUMTOPRINT EQU $FF9C ; 3 bytes
-hJoyHeldLast EQU $FFB1
-hJoyReleased EQU $FFB2
-hJoyPressed EQU $FFB3
-hJoyHeld EQU $FFB4
+hJoyHeldLast EQU $FFB1
+hJoyReleased EQU $FFB2
+hJoyPressed EQU $FFB3
+hJoyHeld EQU $FFB4
+hJoy5 EQU $FFB5
+hJoy6 EQU $FFB6
+hJoy7 EQU $FFB7
H_LOADEDROMBANK EQU $FFB8
--- a/macros.asm
+++ b/macros.asm
@@ -11,6 +11,20 @@
dex EQUS "db $5f, $50" ; End a Pokedex entry.
+percent EQUS "* $ff / 100"
+
+
+; Constant enumeration is useful for monsters, items, moves, etc.
+const_def: MACRO
+const_value = 0
+ENDM
+
+const: MACRO
+\1 EQU const_value
+const_value = const_value + 1
+ENDM
+
+
homecall: MACRO
ld a, [H_LOADEDROMBANK]
push af
@@ -188,6 +202,24 @@
jp Predef
ENDM
+
+add_tx_pre: MACRO
+\1_id:: dw \1
+ENDM
+
+tx_pre_id: MACRO
+ ld a, (\1_id - TextPredefs) / 2
+ENDM
+
+tx_pre: MACRO
+ tx_pre_id \1
+ call PrintPredefTextID
+ENDM
+
+tx_pre_jump: MACRO
+ tx_pre_id \1
+ jp PrintPredefTextID
+ENDM
;1_channel EQU $00
--- a/main.asm
+++ b/main.asm
@@ -3419,7 +3419,7 @@
.asm_f2f2
ld a, [de]
inc a
- cp $7
+ cp PARTY_LENGTH + 1
ret nc
ld [de], a
ld a, [de]
@@ -3681,7 +3681,7 @@
_AddEnemyMonToPlayerParty: ; f49d (3:749d)
ld hl, wPartyCount
ld a, [hl]
- cp $6
+ cp PARTY_LENGTH
scf
ret z ; party full, return failure
inc a
@@ -3750,13 +3750,13 @@
jr z, .asm_f575
ld hl, W_NUMINBOX ; wda80
ld a, [hl]
- cp $14
+ cp MONS_PER_BOX
jr nz, .partyOrBoxNotFull
jr .boxFull
.checkPartyMonSlots
ld hl, wPartyCount ; wPartyCount
ld a, [hl]
- cp $6
+ cp PARTY_LENGTH
jr nz, .partyOrBoxNotFull
.boxFull
scf
@@ -3899,7 +3899,7 @@
ld a, d
ld [W_CURENEMYLVL], a ; W_CURENEMYLVL
pop hl
- ld bc, $21
+ ld bc, wBoxMon2 - wBoxMon1
add hl, bc
ld [hli], a
ld d, h
--- a/scripts/daycarem.asm
+++ b/scripts/daycarem.asm
@@ -67,9 +67,9 @@
call LoadMonData
callab Func_58f43
ld a, d
- cp $64
+ cp MAX_LEVEL
jr c, .asm_56315
- ld d, $64
+ ld d, MAX_LEVEL
callab CalcExperience
ld hl, wDayCareMonExp
ld a, [H_NUMTOPRINT]
@@ -78,7 +78,7 @@
ld [hli], a
ld a, [$ff98]
ld [hl], a
- ld d, $64
+ ld d, MAX_LEVEL
.asm_56315
xor a
@@ -100,7 +100,7 @@
.asm_56333
call PrintText
ld a, [wPartyCount]
- cp $6
+ cp PARTY_LENGTH
ld hl, DayCareMText_56440
jp z, .asm_56403
ld de, wTrainerFacingDirection
--- a/scripts/route5gate.asm
+++ b/scripts/route5gate.asm
@@ -27,11 +27,11 @@
xor a
ld [hJoyHeld], a
callba RemoveGuardDrink
- ld a, [$ff00+$db]
+ ld a, [$ffdb]
and a
jr nz, .asm_1df82 ; 0x1df70 $10
ld a, $2
- ld [$ff00+$8c], a
+ ld [$ff8c], a
call DisplayTextID
call Route5GateScript_1df43
ld a, $1
@@ -39,7 +39,7 @@
ret
.asm_1df82
ld a, $3
- ld [$ff00+$8c], a
+ ld [$ff8c], a
call DisplayTextID
ld hl, wd728
set 6, [hl]
@@ -74,7 +74,7 @@
bit 6, a
jr nz, .asm_88856 ; 0x1dfb0 $2c
callba RemoveGuardDrink
- ld a, [$ff00+$db]
+ ld a, [$ffdb]
and a
jr nz, .asm_768a2 ; 0x1dfbd $11
ld hl, Route5GateText2
--- a/version.asm
+++ b/version.asm
@@ -1,20 +1,11 @@
-if !def(_RED)
-_RED EQU 0
+check_ver: MACRO
+if !def(\1)
+\1 EQU 0
endc
+ENDM
-if !def(_BLUE)
-_BLUE EQU 0
-endc
-
-if !def(_JAPAN)
-_JAPAN EQU 0
-endc
-
-if !def(_GREEN)
-_GREEN EQU 0
-endc
-
-if !def(_YELLOW)
-_YELLOW EQU 0
-endc
-
+ check_ver _RED
+ check_ver _BLUE
+ check_ver _JAPAN
+ check_ver _GREEN
+ check_ver _YELLOW