aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordannye <33dannye@gmail.com>2023-11-21 20:56:28 -0600
committerdannye <33dannye@gmail.com>2023-11-21 20:56:28 -0600
commit04f7f7f506a1dbb877e4678601261e8157fd0e57 (patch)
treebfe62d3872c5f031ee40df9488910bd58b0e1b15
parentExtend tools/pcm.c to allow decoding .pcm to .wav (diff)
parentFix some map text constants (diff)
downloadpokeyellow-04f7f7f506a1dbb877e4678601261e8157fd0e57.tar.gz
pokeyellow-04f7f7f506a1dbb877e4678601261e8157fd0e57.tar.xz
pokeyellow-04f7f7f506a1dbb877e4678601261e8157fd0e57.zip
Merge branch 'master' of https://github.com/pret/pokered
-rwxr-xr-x.github/webhook.sh2
-rw-r--r--INSTALL.md4
-rw-r--r--constants/battle_anim_constants.asm8
-rw-r--r--constants/battle_constants.asm9
-rw-r--r--constants/item_constants.asm8
-rw-r--r--constants/pokemon_data_constants.asm9
-rw-r--r--data/items/key_items.asm4
-rw-r--r--data/items/names.asm6
-rw-r--r--data/items/prices.asm4
-rw-r--r--data/maps/objects/FightingDojo.asm10
-rw-r--r--data/maps/objects/PewterNidoranHouse.asm6
-rw-r--r--data/maps/objects/Route18.asm10
-rw-r--r--data/maps/objects/SSAnneB1FRooms.asm6
-rw-r--r--data/pokemon/evos_moves.asm155
-rw-r--r--engine/battle/animations.asm54
-rw-r--r--engine/battle/battle_transitions.asm24
-rw-r--r--engine/battle/core.asm46
-rw-r--r--engine/battle/display_effectiveness.asm2
-rw-r--r--engine/battle/effects.asm4
-rw-r--r--engine/battle/init_battle.asm3
-rw-r--r--engine/battle/scale_sprites.asm21
-rw-r--r--engine/events/hidden_objects/bookshelves.asm4
-rw-r--r--engine/gfx/sprite_oam.asm8
-rw-r--r--engine/items/item_effects.asm4
-rw-r--r--engine/menus/party_menu.asm12
-rw-r--r--engine/menus/pokedex.asm2
-rw-r--r--engine/movie/credits.asm8
-rw-r--r--engine/movie/oak_speech/oak_speech.asm12
-rw-r--r--engine/overworld/auto_movement.asm4
-rw-r--r--engine/overworld/movement.asm6
-rw-r--r--engine/overworld/sprite_collisions.asm63
-rw-r--r--engine/pokemon/evos_moves.asm6
-rw-r--r--home/fade.asm18
-rw-r--r--home/hidden_objects.asm2
-rw-r--r--home/overworld.asm2
-rw-r--r--home/pathfinding.asm2
-rw-r--r--home/text_script.asm2
-rw-r--r--includes.asm1
-rw-r--r--macros/data.asm11
-rw-r--r--ram/hram.asm13
-rw-r--r--ram/wram.asm17
-rw-r--r--scripts/FightingDojo.asm10
-rw-r--r--scripts/PalletTown.asm10
-rw-r--r--scripts/Route18.asm10
-rw-r--r--scripts/Route22.asm24
-rw-r--r--scripts/SafariZoneGate.asm18
-rw-r--r--scripts/SilphCo11F.asm10
-rw-r--r--scripts/SilphCo7F.asm8
-rw-r--r--scripts/VermilionCity.asm2
-rwxr-xr-xtools/palfix.py24
50 files changed, 346 insertions, 362 deletions
diff --git a/.github/webhook.sh b/.github/webhook.sh
index 70a219c9..bd083aaf 100755
--- a/.github/webhook.sh
+++ b/.github/webhook.sh
@@ -2,7 +2,7 @@
set -e
# Report unnamed symbols
-content="$(tools/unnamed.py -r . pokeyellow.sym | head)"
+content="$(tools/unnamed.py -r . -l 30 pokeyellow.sym | head)"
curl -H 'Content-Type: application/json' -X POST "$DISCORD_WEBHOOK_URL" -d@- << EOF
{
diff --git a/INSTALL.md b/INSTALL.md
index 02192a0f..aa4e4ca3 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -101,11 +101,9 @@ Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building
To install the software required for **pokeyellow**:
```bash
-sudo pacman -S make gcc git
+sudo pacman -S make gcc git rgbds
```
-Then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#pre-built) for Arch Linux to install **rgbds 0.6.1**.
-
If you want to compile and install **rgbds** yourself instead, then follow the [**rgbds** instructions](https://rgbds.gbdev.io/install#building-from-source) to build **rgbds 0.6.1** from source.
### Termux
diff --git a/constants/battle_anim_constants.asm b/constants/battle_anim_constants.asm
new file mode 100644
index 00000000..db57d6c4
--- /dev/null
+++ b/constants/battle_anim_constants.asm
@@ -0,0 +1,8 @@
+; AnimationTypePointerTable indexes (see engine/battle/animations.asm)
+ const_def 1
+ const ANIMATIONTYPE_SHAKE_SCREEN_VERTICALLY ; 1
+ const ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_HEAVY ; 2
+ const ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_SLOW ; 3
+ const ANIMATIONTYPE_BLINK_ENEMY_MON_SPRITE ; 4
+ const ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_LIGHT ; 5
+ const ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_SLOW_2 ; 6
diff --git a/constants/battle_constants.asm b/constants/battle_constants.asm
index 3e53e194..90f4c3d3 100644
--- a/constants/battle_constants.asm
+++ b/constants/battle_constants.asm
@@ -1,15 +1,20 @@
DEF MAX_LEVEL EQU 100
+; maximum moves known per mon
DEF NUM_MOVES EQU 4
+; significant stat values
+DEF BASE_STAT_LEVEL EQU 7
+DEF MAX_STAT_LEVEL EQU 13
+
; VitaminStats indexes (see data/battle/stat_names.asm)
- const_def
+ const_def 1
const STAT_HEALTH
const STAT_ATTACK
const STAT_DEFENSE
const STAT_SPEED
const STAT_SPECIAL
-DEF NUM_STATS EQU const_value
+DEF NUM_STATS EQU const_value - 1
; StatModTextStrings indexes (see data/battle/stat_mod_names.asm)
const_def
diff --git a/constants/item_constants.asm b/constants/item_constants.asm
index b6f0e7c9..e55ee89c 100644
--- a/constants/item_constants.asm
+++ b/constants/item_constants.asm
@@ -28,9 +28,9 @@
const SUPER_POTION ; $13
const POTION ; $14
const BOULDERBADGE ; $15
+DEF SAFARI_BAIT EQU BOULDERBADGE ; overload
const CASCADEBADGE ; $16
-DEF SAFARI_BAIT EQU $15 ; overload
-DEF SAFARI_ROCK EQU $16 ; overload
+DEF SAFARI_ROCK EQU CASCADEBADGE ; overload
const THUNDERBADGE ; $17
const RAINBOWBADGE ; $18
const SOULBADGE ; $19
@@ -52,13 +52,13 @@ DEF SAFARI_ROCK EQU $16 ; overload
const DOME_FOSSIL ; $29
const HELIX_FOSSIL ; $2A
const SECRET_KEY ; $2B
- const UNUSED_ITEM ; $2C "?????"
+ const ITEM_2C ; $2C
const BIKE_VOUCHER ; $2D
const X_ACCURACY ; $2E
const LEAF_STONE ; $2F
const CARD_KEY ; $30
const NUGGET ; $31
- const PP_UP_2 ; $32
+ const ITEM_32 ; $32
const POKE_DOLL ; $33
const FULL_HEAL ; $34
const REVIVE ; $35
diff --git a/constants/pokemon_data_constants.asm b/constants/pokemon_data_constants.asm
index 028d6711..5cc2d344 100644
--- a/constants/pokemon_data_constants.asm
+++ b/constants/pokemon_data_constants.asm
@@ -79,12 +79,9 @@ DEF HOF_TEAM_CAPACITY EQU 50
; Evolution types
const_def 1
- const EV_LEVEL ; 1
- const EV_ITEM ; 2
- const EV_TRADE ; 3
-
-DEF MAX_EVOLUTIONS EQU 3
-DEF EVOLUTION_SIZE EQU 4
+ const EVOLVE_LEVEL ; 1
+ const EVOLVE_ITEM ; 2
+ const EVOLVE_TRADE ; 3
; wMonHGrowthRate values
diff --git a/data/items/key_items.asm b/data/items/key_items.asm
index b0c4b1ad..97f5f093 100644
--- a/data/items/key_items.asm
+++ b/data/items/key_items.asm
@@ -43,13 +43,13 @@ KeyItemFlags:
dbit TRUE ; DOME_FOSSIL
dbit TRUE ; HELIX_FOSSIL
dbit TRUE ; SECRET_KEY
- dbit TRUE ; UNUSED_ITEM
+ dbit TRUE ; ITEM_2C
dbit TRUE ; BIKE_VOUCHER
dbit FALSE ; X_ACCURACY
dbit FALSE ; LEAF_STONE
dbit TRUE ; CARD_KEY
dbit FALSE ; NUGGET
- dbit FALSE ; PP_UP_2
+ dbit FALSE ; ITEM_32
dbit FALSE ; POKE_DOLL
dbit FALSE ; FULL_HEAL
dbit FALSE ; REVIVE
diff --git a/data/items/names.asm b/data/items/names.asm
index af51446b..44a21c38 100644
--- a/data/items/names.asm
+++ b/data/items/names.asm
@@ -6,7 +6,7 @@ ItemNames::
li "POKé BALL"
li "TOWN MAP"
li "BICYCLE"
- li "?????"
+ li "?????" ; SURFBOARD
li "SAFARI BALL"
li "POKéDEX"
li "MOON STONE"
@@ -43,13 +43,13 @@ ItemNames::
li "DOME FOSSIL"
li "HELIX FOSSIL"
li "SECRET KEY"
- li "?????"
+ li "?????" ; ITEM_2C
li "BIKE VOUCHER"
li "X ACCURACY"
li "LEAF STONE"
li "CARD KEY"
li "NUGGET"
- li "PP UP"
+ li "PP UP" ; ITEM_32
li "POKé DOLL"
li "FULL HEAL"
li "REVIVE"
diff --git a/data/items/prices.asm b/data/items/prices.asm
index 6c1c2891..d01c0b7e 100644
--- a/data/items/prices.asm
+++ b/data/items/prices.asm
@@ -43,13 +43,13 @@ ItemPrices::
bcd3 0 ; DOME_FOSSIL
bcd3 0 ; HELIX_FOSSIL
bcd3 0 ; SECRET_KEY
- bcd3 0 ; XXX
+ bcd3 0 ; ITEM_2C
bcd3 0 ; BIKE_VOUCHER
bcd3 950 ; X_ACCURACY
bcd3 2100 ; LEAF_STONE
bcd3 0 ; CARD_KEY
bcd3 10000 ; NUGGET
- bcd3 9800 ; XXX PP_UP
+ bcd3 9800 ; ITEM_32
bcd3 1000 ; POKE_DOLL
bcd3 600 ; FULL_HEAL
bcd3 1500 ; REVIVE
diff --git a/data/maps/objects/FightingDojo.asm b/data/maps/objects/FightingDojo.asm
index 9d364a46..daf1112c 100644
--- a/data/maps/objects/FightingDojo.asm
+++ b/data/maps/objects/FightingDojo.asm
@@ -17,11 +17,11 @@ FightingDojo_Object:
def_bg_events
def_object_events
- object_event 5, 3, SPRITE_HIKER, STAY, DOWN, 1, OPP_BLACKBELT, TEXT_FIGHTINGDOJO_KARATE_MASTER
- object_event 3, 4, SPRITE_HIKER, STAY, RIGHT, 2, OPP_BLACKBELT, TEXT_FIGHTINGDOJO_BLACKBELT1
- object_event 3, 6, SPRITE_HIKER, STAY, RIGHT, 3, OPP_BLACKBELT, TEXT_FIGHTINGDOJO_BLACKBELT2
- object_event 5, 5, SPRITE_HIKER, STAY, LEFT, 4, OPP_BLACKBELT, TEXT_FIGHTINGDOJO_BLACKBELT3
- object_event 5, 7, SPRITE_HIKER, STAY, LEFT, 5, OPP_BLACKBELT, TEXT_FIGHTINGDOJO_BLACKBELT4
+ object_event 5, 3, SPRITE_HIKER, STAY, DOWN, TEXT_FIGHTINGDOJO_KARATE_MASTER, OPP_BLACKBELT, 1
+ object_event 3, 4, SPRITE_HIKER, STAY, RIGHT, TEXT_FIGHTINGDOJO_BLACKBELT1, OPP_BLACKBELT, 2
+ object_event 3, 6, SPRITE_HIKER, STAY, RIGHT, TEXT_FIGHTINGDOJO_BLACKBELT2, OPP_BLACKBELT, 3
+ object_event 5, 5, SPRITE_HIKER, STAY, LEFT, TEXT_FIGHTINGDOJO_BLACKBELT3, OPP_BLACKBELT, 4
+ object_event 5, 7, SPRITE_HIKER, STAY, LEFT, TEXT_FIGHTINGDOJO_BLACKBELT4, OPP_BLACKBELT, 5
object_event 4, 1, SPRITE_POKE_BALL, STAY, NONE, TEXT_FIGHTINGDOJO_HITMONLEE_POKE_BALL
object_event 5, 1, SPRITE_POKE_BALL, STAY, NONE, TEXT_FIGHTINGDOJO_HITMONCHAN_POKE_BALL
diff --git a/data/maps/objects/PewterNidoranHouse.asm b/data/maps/objects/PewterNidoranHouse.asm
index 15419cba..8065c148 100644
--- a/data/maps/objects/PewterNidoranHouse.asm
+++ b/data/maps/objects/PewterNidoranHouse.asm
@@ -13,8 +13,8 @@ PewterNidoranHouse_Object:
def_bg_events
def_object_events
- object_event 4, 5, SPRITE_MONSTER, STAY, LEFT, PEWTERNIDORANHOUSE_NIDORAN
- object_event 3, 5, SPRITE_LITTLE_BOY, STAY, RIGHT, PEWTERNIDORANHOUSE_LITTLE_BOY
- object_event 1, 2, SPRITE_MIDDLE_AGED_MAN, STAY, NONE, PEWTERNIDORANHOUSE_MIDDLE_AGED_MAN
+ object_event 4, 5, SPRITE_MONSTER, STAY, LEFT, TEXT_PEWTERNIDORANHOUSE_NIDORAN
+ object_event 3, 5, SPRITE_LITTLE_BOY, STAY, RIGHT, TEXT_PEWTERNIDORANHOUSE_LITTLE_BOY
+ object_event 1, 2, SPRITE_MIDDLE_AGED_MAN, STAY, NONE, TEXT_PEWTERNIDORANHOUSE_MIDDLE_AGED_MAN
def_warps_to PEWTER_NIDORAN_HOUSE
diff --git a/data/maps/objects/Route18.asm b/data/maps/objects/Route18.asm
index 29bafe90..383da81c 100644
--- a/data/maps/objects/Route18.asm
+++ b/data/maps/objects/Route18.asm
@@ -13,12 +13,12 @@ Route18_Object:
warp_event 40, 9, ROUTE_18_GATE_1F, 3
def_bg_events
- bg_event 43, 7, SCRIPT_ROUTE18_SIGN
- bg_event 33, 5, SCRIPT_ROUTE18_CYCLING_ROAD_SIGN
+ bg_event 43, 7, TEXT_ROUTE18_SIGN
+ bg_event 33, 5, TEXT_ROUTE18_CYCLING_ROAD_SIGN
def_object_events
- object_event 36, 11, SPRITE_COOLTRAINER_M, STAY, RIGHT, SCRIPT_ROUTE18_COOLTRAINER_M1, OPP_BIRD_KEEPER, 8
- object_event 40, 15, SPRITE_COOLTRAINER_M, STAY, LEFT, SCRIPT_ROUTE18_COOLTRAINER_M2, OPP_BIRD_KEEPER, 9
- object_event 42, 13, SPRITE_COOLTRAINER_M, STAY, LEFT, SCRIPT_ROUTE18_COOLTRAINER_M3, OPP_BIRD_KEEPER, 10
+ object_event 36, 11, SPRITE_COOLTRAINER_M, STAY, RIGHT, TEXT_ROUTE18_COOLTRAINER_M1, OPP_BIRD_KEEPER, 8
+ object_event 40, 15, SPRITE_COOLTRAINER_M, STAY, LEFT, TEXT_ROUTE18_COOLTRAINER_M2, OPP_BIRD_KEEPER, 9
+ object_event 42, 13, SPRITE_COOLTRAINER_M, STAY, LEFT, TEXT_ROUTE18_COOLTRAINER_M3, OPP_BIRD_KEEPER, 10
def_warps_to ROUTE_18
diff --git a/data/maps/objects/SSAnneB1FRooms.asm b/data/maps/objects/SSAnneB1FRooms.asm
index 7846186e..10b56e62 100644
--- a/data/maps/objects/SSAnneB1FRooms.asm
+++ b/data/maps/objects/SSAnneB1FRooms.asm
@@ -37,8 +37,8 @@ SSAnneB1FRooms_Object:
object_event 0, 4, SPRITE_FISHER, STAY, RIGHT, TEXT_SSANNEB1FROOMS_FISHER, OPP_FISHER, 2
object_event 10, 13, SPRITE_SUPER_NERD, STAY, RIGHT, TEXT_SSANNEB1FROOMS_SUPER_NERD
object_event 11, 12, SPRITE_MONSTER, STAY, NONE, TEXT_SSANNEB1FROOMS_MACHOKE
- object_event 20, 2, SPRITE_POKE_BALL, STAY, NONE, 9, ETHER
- object_event 10, 2, SPRITE_POKE_BALL, STAY, NONE, 10, TM_REST
- object_event 12, 11, SPRITE_POKE_BALL, STAY, NONE, 11, MAX_POTION
+ object_event 20, 2, SPRITE_POKE_BALL, STAY, NONE, TEXT_SSANNEB1FROOMS_ETHER, ETHER
+ object_event 10, 2, SPRITE_POKE_BALL, STAY, NONE, TEXT_SSANNEB1FROOMS_TM_REST, TM_REST
+ object_event 12, 11, SPRITE_POKE_BALL, STAY, NONE, TEXT_SSANNEB1FROOMS_MAX_POTION, MAX_POTION
def_warps_to SS_ANNE_B1F_ROOMS
diff --git a/data/pokemon/evos_moves.asm b/data/pokemon/evos_moves.asm
index d3a8ed1c..d6ba0da1 100644
--- a/data/pokemon/evos_moves.asm
+++ b/data/pokemon/evos_moves.asm
@@ -1,5 +1,12 @@
-; See constants/pokemon_data_constants.asm
-; The max number of evolutions per monster is MAX_EVOLUTIONS
+; Evos+moves data structure:
+; - Evolution methods:
+; * db EVOLVE_LEVEL, level, species
+; * db EVOLVE_ITEM, used item, min level (1), species
+; * db EVOLVE_TRADE, min level (1), species
+; - db 0 ; no more evolutions
+; - Learnset (in increasing level order):
+; * db level, move
+; - db 0 ; no more level-up moves
EvosMovesPointerTable:
table_width 2, EvosMovesPointerTable
@@ -220,7 +227,7 @@ KangaskhanEvosMoves:
NidoranMEvosMoves:
; Evolutions
- db EV_LEVEL, 16, NIDORINO
+ db EVOLVE_LEVEL, 16, NIDORINO
db 0
; Learnset
db 8, HORN_ATTACK
@@ -233,7 +240,7 @@ NidoranMEvosMoves:
ClefairyEvosMoves:
; Evolutions
- db EV_ITEM, MOON_STONE, 1, CLEFABLE
+ db EVOLVE_ITEM, MOON_STONE, 1, CLEFABLE
db 0
; Learnset
db 13, SING
@@ -246,7 +253,7 @@ ClefairyEvosMoves:
SpearowEvosMoves:
; Evolutions
- db EV_LEVEL, 20, FEAROW
+ db EVOLVE_LEVEL, 20, FEAROW
db 0
; Learnset
db 9, LEER
@@ -258,7 +265,7 @@ SpearowEvosMoves:
VoltorbEvosMoves:
; Evolutions
- db EV_LEVEL, 30, ELECTRODE
+ db EVOLVE_LEVEL, 30, ELECTRODE
db 0
; Learnset
db 17, SONICBOOM
@@ -292,7 +299,7 @@ SlowbroEvosMoves:
IvysaurEvosMoves:
; Evolutions
- db EV_LEVEL, 32, VENUSAUR
+ db EVOLVE_LEVEL, 32, VENUSAUR
db 0
; Learnset
db 7, LEECH_SEED
@@ -324,7 +331,7 @@ LickitungEvosMoves:
ExeggcuteEvosMoves:
; Evolutions
- db EV_ITEM, LEAF_STONE, 1, EXEGGUTOR
+ db EVOLVE_ITEM, LEAF_STONE, 1, EXEGGUTOR
db 0
; Learnset
db 25, REFLECT
@@ -337,7 +344,7 @@ ExeggcuteEvosMoves:
GrimerEvosMoves:
; Evolutions
- db EV_LEVEL, 38, MUK
+ db EVOLVE_LEVEL, 38, MUK
db 0
; Learnset
db 30, POISON_GAS
@@ -358,7 +365,7 @@ GengarEvosMoves:
NidoranFEvosMoves:
; Evolutions
- db EV_LEVEL, 16, NIDORINA
+ db EVOLVE_LEVEL, 16, NIDORINA
db 0
; Learnset
db 8, SCRATCH
@@ -380,7 +387,7 @@ NidoqueenEvosMoves:
CuboneEvosMoves:
; Evolutions
- db EV_LEVEL, 28, MAROWAK
+ db EVOLVE_LEVEL, 28, MAROWAK
db 0
; Learnset
db 10, BONE_CLUB
@@ -395,7 +402,7 @@ CuboneEvosMoves:
RhyhornEvosMoves:
; Evolutions
- db EV_LEVEL, 42, RHYDON
+ db EVOLVE_LEVEL, 42, RHYDON
db 0
; Learnset
db 30, STOMP
@@ -447,7 +454,7 @@ GyaradosEvosMoves:
ShellderEvosMoves:
; Evolutions
- db EV_ITEM, WATER_STONE, 1, CLOYSTER
+ db EVOLVE_ITEM, WATER_STONE, 1, CLOYSTER
db 0
; Learnset
db 18, SUPERSONIC
@@ -459,7 +466,7 @@ ShellderEvosMoves:
TentacoolEvosMoves:
; Evolutions
- db EV_LEVEL, 30, TENTACRUEL
+ db EVOLVE_LEVEL, 30, TENTACRUEL
db 0
; Learnset
db 7, SUPERSONIC
@@ -474,7 +481,7 @@ TentacoolEvosMoves:
GastlyEvosMoves:
; Evolutions
- db EV_LEVEL, 25, HAUNTER
+ db EVOLVE_LEVEL, 25, HAUNTER
db 0
; Learnset
db 27, HYPNOSIS
@@ -496,7 +503,7 @@ ScytherEvosMoves:
StaryuEvosMoves:
; Evolutions
- db EV_ITEM, WATER_STONE, 1, STARMIE
+ db EVOLVE_ITEM, WATER_STONE, 1, STARMIE
db 0
; Learnset
db 17, WATER_GUN
@@ -561,7 +568,7 @@ MissingNo20EvosMoves:
GrowlitheEvosMoves:
; Evolutions
- db EV_ITEM, FIRE_STONE, 1, ARCANINE
+ db EVOLVE_ITEM, FIRE_STONE, 1, ARCANINE
db 0
; Learnset
db 18, EMBER
@@ -595,7 +602,7 @@ FearowEvosMoves:
PidgeyEvosMoves:
; Evolutions
- db EV_LEVEL, 18, PIDGEOTTO
+ db EVOLVE_LEVEL, 18, PIDGEOTTO
db 0
; Learnset
db 5, SAND_ATTACK
@@ -608,7 +615,7 @@ PidgeyEvosMoves:
SlowpokeEvosMoves:
; Evolutions
- db EV_LEVEL, 37, SLOWBRO
+ db EVOLVE_LEVEL, 37, SLOWBRO
db 0
; Learnset
db 18, DISABLE
@@ -621,7 +628,7 @@ SlowpokeEvosMoves:
KadabraEvosMoves:
; Evolutions
- db EV_TRADE, 1, ALAKAZAM
+ db EVOLVE_TRADE, 1, ALAKAZAM
db 0
; Learnset
db 16, CONFUSION
@@ -634,7 +641,7 @@ KadabraEvosMoves:
GravelerEvosMoves:
; Evolutions
- db EV_TRADE, 1, GOLEM
+ db EVOLVE_TRADE, 1, GOLEM
db 0
; Learnset
db 11, DEFENSE_CURL
@@ -660,7 +667,7 @@ ChanseyEvosMoves:
MachokeEvosMoves:
; Evolutions
- db EV_TRADE, 1, MACHAMP
+ db EVOLVE_TRADE, 1, MACHAMP
db 0
; Learnset
db 20, LOW_KICK
@@ -727,7 +734,7 @@ ParasectEvosMoves:
PsyduckEvosMoves:
; Evolutions
- db EV_LEVEL, 33, GOLDUCK
+ db EVOLVE_LEVEL, 33, GOLDUCK
db 0
; Learnset
db 28, TAIL_WHIP
@@ -739,7 +746,7 @@ PsyduckEvosMoves:
DrowzeeEvosMoves:
; Evolutions
- db EV_LEVEL, 26, HYPNO
+ db EVOLVE_LEVEL, 26, HYPNO
db 0
; Learnset
db 12, DISABLE
@@ -811,7 +818,7 @@ MagnetonEvosMoves:
KoffingEvosMoves:
; Evolutions
- db EV_LEVEL, 35, WEEZING
+ db EVOLVE_LEVEL, 35, WEEZING
db 0
; Learnset
db 32, SLUDGE
@@ -829,7 +836,7 @@ MissingNo38EvosMoves:
MankeyEvosMoves:
; Evolutions
- db EV_LEVEL, 28, PRIMEAPE
+ db EVOLVE_LEVEL, 28, PRIMEAPE
db 0
; Learnset
db 9, LOW_KICK
@@ -843,7 +850,7 @@ MankeyEvosMoves:
SeelEvosMoves:
; Evolutions
- db EV_LEVEL, 34, DEWGONG
+ db EVOLVE_LEVEL, 34, DEWGONG
db 0
; Learnset
db 30, GROWL
@@ -855,7 +862,7 @@ SeelEvosMoves:
DiglettEvosMoves:
; Evolutions
- db EV_LEVEL, 26, DUGTRIO
+ db EVOLVE_LEVEL, 26, DUGTRIO
db 0
; Learnset
db 15, GROWL
@@ -907,7 +914,7 @@ FarfetchdEvosMoves:
VenonatEvosMoves:
; Evolutions
- db EV_LEVEL, 31, VENOMOTH
+ db EVOLVE_LEVEL, 31, VENOMOTH
db 0
; Learnset
db 11, SUPERSONIC
@@ -951,7 +958,7 @@ MissingNo45EvosMoves:
DoduoEvosMoves:
; Evolutions
- db EV_LEVEL, 31, DODRIO
+ db EVOLVE_LEVEL, 31, DODRIO
db 0
; Learnset
db 20, GROWL
@@ -964,7 +971,7 @@ DoduoEvosMoves:
PoliwagEvosMoves:
; Evolutions
- db EV_LEVEL, 25, POLIWHIRL
+ db EVOLVE_LEVEL, 25, POLIWHIRL
db 0
; Learnset
db 16, HYPNOSIS
@@ -1022,7 +1029,7 @@ DittoEvosMoves:
MeowthEvosMoves:
; Evolutions
- db EV_LEVEL, 28, PERSIAN
+ db EVOLVE_LEVEL, 28, PERSIAN
db 0
; Learnset
db 12, BITE
@@ -1034,7 +1041,7 @@ MeowthEvosMoves:
KrabbyEvosMoves:
; Evolutions
- db EV_LEVEL, 28, KINGLER
+ db EVOLVE_LEVEL, 28, KINGLER
db 0
; Learnset
db 20, VICEGRIP
@@ -1064,7 +1071,7 @@ MissingNo51EvosMoves:
VulpixEvosMoves:
; Evolutions
- db EV_ITEM, FIRE_STONE, 1, NINETALES
+ db EVOLVE_ITEM, FIRE_STONE, 1, NINETALES
db 0
; Learnset
db 16, QUICK_ATTACK
@@ -1082,7 +1089,7 @@ NinetalesEvosMoves:
PikachuEvosMoves:
; Evolutions
- db EV_ITEM, THUNDER_STONE, 1, RAICHU
+ db EVOLVE_ITEM, THUNDER_STONE, 1, RAICHU
db 0
; Learnset
db 6, TAIL_WHIP
@@ -1116,7 +1123,7 @@ MissingNo57EvosMoves:
DratiniEvosMoves:
; Evolutions
- db EV_LEVEL, 30, DRAGONAIR
+ db EVOLVE_LEVEL, 30, DRAGONAIR
db 0
; Learnset
db 10, THUNDER_WAVE
@@ -1128,7 +1135,7 @@ DratiniEvosMoves:
DragonairEvosMoves:
; Evolutions
- db EV_LEVEL, 55, DRAGONITE
+ db EVOLVE_LEVEL, 55, DRAGONITE
db 0
; Learnset
db 10, THUNDER_WAVE
@@ -1140,7 +1147,7 @@ DragonairEvosMoves:
KabutoEvosMoves:
; Evolutions
- db EV_LEVEL, 40, KABUTOPS
+ db EVOLVE_LEVEL, 40, KABUTOPS
db 0
; Learnset
db 34, ABSORB
@@ -1161,7 +1168,7 @@ KabutopsEvosMoves:
HorseaEvosMoves:
; Evolutions
- db EV_LEVEL, 32, SEADRA
+ db EVOLVE_LEVEL, 32, SEADRA
db 0
; Learnset
db 19, SMOKESCREEN
@@ -1196,7 +1203,7 @@ MissingNo5FEvosMoves:
SandshrewEvosMoves:
; Evolutions
- db EV_LEVEL, 22, SANDSLASH
+ db EVOLVE_LEVEL, 22, SANDSLASH
db 0
; Learnset
db 10, SAND_ATTACK
@@ -1219,7 +1226,7 @@ SandslashEvosMoves:
OmanyteEvosMoves:
; Evolutions
- db EV_LEVEL, 40, OMASTAR
+ db EVOLVE_LEVEL, 40, OMASTAR
db 0
; Learnset
db 34, HORN_ATTACK
@@ -1240,7 +1247,7 @@ OmastarEvosMoves:
JigglypuffEvosMoves:
; Evolutions
- db EV_ITEM, MOON_STONE, 1, WIGGLYTUFF
+ db EVOLVE_ITEM, MOON_STONE, 1, WIGGLYTUFF
db 0
; Learnset
db 9, POUND
@@ -1260,9 +1267,9 @@ WigglytuffEvosMoves:
EeveeEvosMoves:
; Evolutions
- db EV_ITEM, FIRE_STONE, 1, FLAREON
- db EV_ITEM, THUNDER_STONE, 1, JOLTEON
- db EV_ITEM, WATER_STONE, 1, VAPOREON
+ db EVOLVE_ITEM, FIRE_STONE, 1, FLAREON
+ db EVOLVE_ITEM, THUNDER_STONE, 1, JOLTEON
+ db EVOLVE_ITEM, WATER_STONE, 1, VAPOREON
db 0
; Learnset
db 8, SAND_ATTACK
@@ -1318,7 +1325,7 @@ VaporeonEvosMoves:
MachopEvosMoves:
; Evolutions
- db EV_LEVEL, 28, MACHOKE
+ db EVOLVE_LEVEL, 28, MACHOKE
db 0
; Learnset
db 20, LOW_KICK
@@ -1330,7 +1337,7 @@ MachopEvosMoves:
ZubatEvosMoves:
; Evolutions
- db EV_LEVEL, 22, GOLBAT
+ db EVOLVE_LEVEL, 22, GOLBAT
db 0
; Learnset
db 10, SUPERSONIC
@@ -1342,7 +1349,7 @@ ZubatEvosMoves:
EkansEvosMoves:
; Evolutions
- db EV_LEVEL, 22, ARBOK
+ db EVOLVE_LEVEL, 22, ARBOK
db 0
; Learnset
db 10, POISON_STING
@@ -1354,7 +1361,7 @@ EkansEvosMoves:
ParasEvosMoves:
; Evolutions
- db EV_LEVEL, 24, PARASECT
+ db EVOLVE_LEVEL, 24, PARASECT
db 0
; Learnset
db 13, STUN_SPORE
@@ -1366,7 +1373,7 @@ ParasEvosMoves:
PoliwhirlEvosMoves:
; Evolutions
- db EV_ITEM, WATER_STONE, 1, POLIWRATH
+ db EVOLVE_ITEM, WATER_STONE, 1, POLIWRATH
db 0
; Learnset
db 16, HYPNOSIS
@@ -1387,14 +1394,14 @@ PoliwrathEvosMoves:
WeedleEvosMoves:
; Evolutions
- db EV_LEVEL, 7, KAKUNA
+ db EVOLVE_LEVEL, 7, KAKUNA
db 0
; Learnset
db 0
KakunaEvosMoves:
; Evolutions
- db EV_LEVEL, 10, BEEDRILL
+ db EVOLVE_LEVEL, 10, BEEDRILL
db 0
; Learnset
db 0
@@ -1491,14 +1498,14 @@ MissingNo7AEvosMoves:
CaterpieEvosMoves:
; Evolutions
- db EV_LEVEL, 7, METAPOD
+ db EVOLVE_LEVEL, 7, METAPOD
db 0
; Learnset
db 0
MetapodEvosMoves:
; Evolutions
- db EV_LEVEL, 10, BUTTERFREE
+ db EVOLVE_LEVEL, 10, BUTTERFREE
db 0
; Learnset
db 7, HARDEN
@@ -1592,7 +1599,7 @@ SnorlaxEvosMoves:
MagikarpEvosMoves:
; Evolutions
- db EV_LEVEL, 20, GYARADOS
+ db EVOLVE_LEVEL, 20, GYARADOS
db 0
; Learnset
db 15, TACKLE
@@ -1713,7 +1720,7 @@ MissingNo92EvosMoves:
HaunterEvosMoves:
; Evolutions
- db EV_TRADE, 1, GENGAR
+ db EVOLVE_TRADE, 1, GENGAR
db 0
; Learnset
db 29, HYPNOSIS
@@ -1722,7 +1729,7 @@ HaunterEvosMoves:
AbraEvosMoves:
; Evolutions
- db EV_LEVEL, 16, KADABRA
+ db EVOLVE_LEVEL, 16, KADABRA
db 0
; Learnset
db 0
@@ -1741,7 +1748,7 @@ AlakazamEvosMoves:
PidgeottoEvosMoves:
; Evolutions
- db EV_LEVEL, 36, PIDGEOT
+ db EVOLVE_LEVEL, 36, PIDGEOT
db 0
; Learnset
db 5, SAND_ATTACK
@@ -1772,7 +1779,7 @@ StarmieEvosMoves:
BulbasaurEvosMoves:
; Evolutions
- db EV_LEVEL, 16, IVYSAUR
+ db EVOLVE_LEVEL, 16, IVYSAUR
db 0
; Learnset
db 7, LEECH_SEED
@@ -1819,7 +1826,7 @@ MissingNo9CEvosMoves:
GoldeenEvosMoves:
; Evolutions
- db EV_LEVEL, 33, SEAKING
+ db EVOLVE_LEVEL, 33, SEAKING
db 0
; Learnset
db 19, SUPERSONIC
@@ -1868,7 +1875,7 @@ MissingNoA2EvosMoves:
PonytaEvosMoves:
; Evolutions
- db EV_LEVEL, 40, RAPIDASH
+ db EVOLVE_LEVEL, 40, RAPIDASH
db 0
; Learnset
db 30, TAIL_WHIP
@@ -1893,7 +1900,7 @@ RapidashEvosMoves:
RattataEvosMoves:
; Evolutions
- db EV_LEVEL, 20, RATICATE
+ db EVOLVE_LEVEL, 20, RATICATE
db 0
; Learnset
db 7, QUICK_ATTACK
@@ -1914,7 +1921,7 @@ RaticateEvosMoves:
NidorinoEvosMoves:
; Evolutions
- db EV_ITEM, MOON_STONE, 1, NIDOKING
+ db EVOLVE_ITEM, MOON_STONE, 1, NIDOKING
db 0
; Learnset
db 8, HORN_ATTACK
@@ -1927,7 +1934,7 @@ NidorinoEvosMoves:
NidorinaEvosMoves:
; Evolutions
- db EV_ITEM, MOON_STONE, 1, NIDOQUEEN
+ db EVOLVE_ITEM, MOON_STONE, 1, NIDOQUEEN
db 0
; Learnset
db 8, SCRATCH
@@ -1940,7 +1947,7 @@ NidorinaEvosMoves:
GeodudeEvosMoves:
; Evolutions
- db EV_LEVEL, 25, GRAVELER
+ db EVOLVE_LEVEL, 25, GRAVELER
db 0
; Learnset
db 11, DEFENSE_CURL
@@ -1979,7 +1986,7 @@ MissingNoACEvosMoves:
MagnemiteEvosMoves:
; Evolutions
- db EV_LEVEL, 30, MAGNETON
+ db EVOLVE_LEVEL, 30, MAGNETON
db 0
; Learnset
db 21, SONICBOOM
@@ -2004,7 +2011,7 @@ MissingNoAFEvosMoves:
CharmanderEvosMoves:
; Evolutions
- db EV_LEVEL, 16, CHARMELEON
+ db EVOLVE_LEVEL, 16, CHARMELEON
db 0
; Learnset
db 9, EMBER
@@ -2017,7 +2024,7 @@ CharmanderEvosMoves:
SquirtleEvosMoves:
; Evolutions
- db EV_LEVEL, 16, WARTORTLE
+ db EVOLVE_LEVEL, 16, WARTORTLE
db 0
; Learnset
db 8, BUBBLE
@@ -2030,7 +2037,7 @@ SquirtleEvosMoves:
CharmeleonEvosMoves:
; Evolutions
- db EV_LEVEL, 36, CHARIZARD
+ db EVOLVE_LEVEL, 36, CHARIZARD
db 0
; Learnset
db 9, EMBER
@@ -2043,7 +2050,7 @@ CharmeleonEvosMoves:
WartortleEvosMoves:
; Evolutions
- db EV_LEVEL, 36, BLASTOISE
+ db EVOLVE_LEVEL, 36, BLASTOISE
db 0
; Learnset
db 8, BUBBLE
@@ -2092,7 +2099,7 @@ MonGhostEvosMoves:
OddishEvosMoves:
; Evolutions
- db EV_LEVEL, 21, GLOOM
+ db EVOLVE_LEVEL, 21, GLOOM
db 0
; Learnset
db 15, POISONPOWDER
@@ -2105,7 +2112,7 @@ OddishEvosMoves:
GloomEvosMoves:
; Evolutions
- db EV_ITEM, LEAF_STONE, 1, VILEPLUME
+ db EVOLVE_ITEM, LEAF_STONE, 1, VILEPLUME
db 0
; Learnset
db 15, POISONPOWDER
@@ -2127,7 +2134,7 @@ VileplumeEvosMoves:
BellsproutEvosMoves:
; Evolutions
- db EV_LEVEL, 21, WEEPINBELL
+ db EVOLVE_LEVEL, 21, WEEPINBELL
db 0
; Learnset
db 13, WRAP
@@ -2141,7 +2148,7 @@ BellsproutEvosMoves:
WeepinbellEvosMoves:
; Evolutions
- db EV_ITEM, LEAF_STONE, 1, VICTREEBEL
+ db EVOLVE_ITEM, LEAF_STONE, 1, VICTREEBEL
db 0
; Learnset
db 13, WRAP
diff --git a/engine/battle/animations.asm b/engine/battle/animations.asm
index ffa7e5a8..da758332 100644
--- a/engine/battle/animations.asm
+++ b/engine/battle/animations.asm
@@ -1016,7 +1016,7 @@ AnimationFlashScreenLong:
push hl
.innerLoop
ld a, [hli]
- cp $01 ; is it the end of the palettes?
+ cp 1
jr z, .endOfPalettes
ldh [rBGP], a
call UpdateGBCPal_BGP
@@ -1032,35 +1032,35 @@ AnimationFlashScreenLong:
; BG palettes
FlashScreenLongMonochrome:
- db %11111001 ; 3, 3, 2, 1
- db %11111110 ; 3, 3, 3, 2
- db %11111111 ; 3, 3, 3, 3
- db %11111110 ; 3, 3, 3, 2
- db %11111001 ; 3, 3, 2, 1
- db %11100100 ; 3, 2, 1, 0
- db %10010000 ; 2, 1, 0, 0
- db %01000000 ; 1, 0, 0, 0
- db %00000000 ; 0, 0, 0, 0
- db %01000000 ; 1, 0, 0, 0
- db %10010000 ; 2, 1, 0, 0
- db %11100100 ; 3, 2, 1, 0
- db $01 ; terminator
+ dc 3, 3, 2, 1
+ dc 3, 3, 3, 2
+ dc 3, 3, 3, 3
+ dc 3, 3, 3, 2
+ dc 3, 3, 2, 1
+ dc 3, 2, 1, 0
+ dc 2, 1, 0, 0
+ dc 1, 0, 0, 0
+ dc 0, 0, 0, 0
+ dc 1, 0, 0, 0
+ dc 2, 1, 0, 0
+ dc 3, 2, 1, 0
+ db 1 ; end
; BG palettes
FlashScreenLongSGB:
- db %11111000 ; 3, 3, 2, 0
- db %11111100 ; 3, 3, 3, 0
- db %11111111 ; 3, 3, 3, 3
- db %11111100 ; 3, 3, 3, 0
- db %11111000 ; 3, 3, 2, 0
- db %11100100 ; 3, 2, 1, 0
- db %10010000 ; 2, 1, 0, 0
- db %01000000 ; 1, 0, 0, 0
- db %00000000 ; 0, 0, 0, 0
- db %01000000 ; 1, 0, 0, 0
- db %10010000 ; 2, 1, 0, 0
- db %11100100 ; 3, 2, 1, 0
- db $01 ; terminator
+ dc 3, 3, 2, 0
+ dc 3, 3, 3, 0
+ dc 3, 3, 3, 3
+ dc 3, 3, 3, 0
+ dc 3, 3, 2, 0
+ dc 3, 2, 1, 0
+ dc 2, 1, 0, 0
+ dc 1, 0, 0, 0
+ dc 0, 0, 0, 0
+ dc 1, 0, 0, 0
+ dc 2, 1, 0, 0
+ dc 3, 2, 1, 0
+ db 1 ; end
; causes a delay of 2 frames for the first cycle
; causes a delay of 1 frame for the second and third cycles
diff --git a/engine/battle/battle_transitions.asm b/engine/battle/battle_transitions.asm
index b0289d7e..77f2ba89 100644
--- a/engine/battle/battle_transitions.asm
+++ b/engine/battle/battle_transitions.asm
@@ -339,18 +339,18 @@ BattleTransition_FlashScreen_:
ret
BattleTransition_FlashScreenPalettes:
- db %11111001
- db %11111110
- db %11111111
- db %11111110
- db %11111001
- db %11100100
- db %10010000
- db %01000000
- db %00000000
- db %01000000
- db %10010000
- db %11100100
+ dc 3, 3, 2, 1
+ dc 3, 3, 3, 2
+ dc 3, 3, 3, 3
+ dc 3, 3, 3, 2
+ dc 3, 3, 2, 1
+ dc 3, 2, 1, 0
+ dc 2, 1, 0, 0
+ dc 1, 0, 0, 0
+ dc 0, 0, 0, 0
+ dc 1, 0, 0, 0
+ dc 2, 1, 0, 0
+ dc 3, 2, 1, 0
db 1 ; end
; used for low level trainer dungeon battles
diff --git a/engine/battle/core.asm b/engine/battle/core.asm
index 3bc59a4f..b7b10d06 100644
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -18,7 +18,7 @@ SlidePlayerAndEnemySilhouettesOnScreen:
call LoadFontTilePatterns
call LoadHudAndHpBarAndStatusTilePatterns
ld hl, vBGMap0
- ld bc, $400
+ ld bc, BG_MAP_WIDTH * BG_MAP_HEIGHT
.clearBackgroundLoop
ld a, " "
ld [hli], a
@@ -29,9 +29,9 @@ SlidePlayerAndEnemySilhouettesOnScreen:
; copy the work RAM tile map to VRAM
hlcoord 0, 0
ld de, vBGMap0
- ld b, 18 ; number of rows
+ ld b, SCREEN_HEIGHT
.copyRowLoop
- ld c, 20 ; number of columns
+ ld c, SCREEN_WIDTH
.copyColumnLoop
ld a, [hli]
ld [de], a
@@ -834,7 +834,7 @@ FaintEnemyPokemon:
; the enemy mon base stats are added to stat exp, so they are halved
; the base exp (which determines normal exp) is also halved
ld hl, wEnemyMonBaseStats
- ld b, $7
+ ld b, NUM_STATS + 2
.halveExpDataLoop
srl [hl]
inc hl
@@ -1298,7 +1298,7 @@ SlideTrainerPicOffScreen:
dec c
jr nz, .columnLoop
pop hl
- ld de, 20
+ ld de, SCREEN_WIDTH
add hl, de
dec b
jr nz, .rowLoop
@@ -3245,7 +3245,7 @@ ExecutePlayerMove:
ld [wMoveMissed], a
ld [wMonIsDisobedient], a
ld [wMoveDidntMiss], a
- ld a, $a
+ ld a, EFFECTIVE
ld [wDamageMultipliers], a
ld a, [wActionResultOrTookBattleTurn]
and a ; has the player already used the turn (e.g. by using an item, trying to run or switching pokemon)
@@ -3323,9 +3323,9 @@ handleIfPlayerMoveMissed:
getPlayerAnimationType:
ld a, [wPlayerMoveEffect]
and a
- ld a, 4 ; move has no effect other than dealing damage
+ ld a, ANIMATIONTYPE_BLINK_ENEMY_MON_SPRITE ; move has no effect other than dealing damage
jr z, playPlayerMoveAnimation
- ld a, 5 ; move has effect
+ ld a, ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_LIGHT ; move has effect
playPlayerMoveAnimation:
push af
ld a, [wPlayerBattleStatus2]
@@ -4352,7 +4352,7 @@ GetDamageVarsForPlayerAttack:
and a ; check for critical hit
jr z, .scaleStats
; in the case of a critical hit, reset the player's attack and the enemy's defense to their base values
- ld c, 3 ; defense stat
+ ld c, STAT_DEFENSE
call GetEnemyMonStat
ldh a, [hProduct + 2]
ld b, a
@@ -4384,7 +4384,7 @@ GetDamageVarsForPlayerAttack:
and a ; check for critical hit
jr z, .scaleStats
; in the case of a critical hit, reset the player's and enemy's specials to their base values
- ld c, 5 ; special stat
+ ld c, STAT_SPECIAL
call GetEnemyMonStat
ldh a, [hProduct + 2]
ld b, a
@@ -4473,7 +4473,7 @@ GetDamageVarsForEnemyAttack:
ld b, a
ld c, [hl]
push bc
- ld c, 2 ; attack stat
+ ld c, STAT_ATTACK
call GetEnemyMonStat
ld hl, hProduct + 2
pop bc
@@ -4505,7 +4505,7 @@ GetDamageVarsForEnemyAttack:
ld b, a
ld c, [hl]
push bc
- ld c, 5 ; special stat
+ ld c, STAT_SPECIAL
call GetEnemyMonStat
ld hl, hProduct + 2
pop bc
@@ -4549,7 +4549,7 @@ GetDamageVarsForEnemyAttack:
ret
; get stat c of enemy mon
-; c: stat to get (HP=1,Attack=2,Defense=3,Speed=4,Special=5)
+; c: stat to get (STAT_* constant)
GetEnemyMonStat:
push de
push bc
@@ -5456,7 +5456,7 @@ AdjustDamageForMoveType:
call Multiply
ld a, 10
ldh [hDivisor], a
- ld b, $04
+ ld b, 4
call Divide
ldh a, [hQuotient + 2]
ld [hli], a
@@ -5484,7 +5484,6 @@ AdjustDamageForMoveType:
; this doesn't take into account the effects that dual types can have
; (e.g. 4x weakness / resistance, weaknesses and resistances canceling)
; the result is stored in [wTypeEffectiveness]
-; ($05 is not very effective, $10 is neutral, $14 is super effective)
; as far is can tell, this is only used once in some AI code to help decide which move to use
AIGetTypeEffectiveness:
ld a, [wEnemyMoveType]
@@ -5493,8 +5492,9 @@ AIGetTypeEffectiveness:
ld b, [hl] ; b = type 1 of player's pokemon
inc hl
ld c, [hl] ; c = type 2 of player's pokemon
- ld a, $10
- ld [wTypeEffectiveness], a ; initialize to neutral effectiveness
+ ; initialize to neutral effectiveness
+ ld a, $10 ; bug: should be EFFECTIVE (10)
+ ld [wTypeEffectiveness], a
ld hl, TypeEffects
.loop
ld a, [hli]
@@ -5782,7 +5782,7 @@ ExecuteEnemyMove:
xor a
ld [wMoveMissed], a
ld [wMoveDidntMiss], a
- ld a, $a
+ ld a, EFFECTIVE
ld [wDamageMultipliers], a
call CheckEnemyStatusConditions
jr nz, .enemyHasNoSpecialConditions
@@ -5861,9 +5861,9 @@ handleIfEnemyMoveMissed:
GetEnemyAnimationType:
ld a, [wEnemyMoveEffect]
and a
- ld a, $1
+ ld a, ANIMATIONTYPE_SHAKE_SCREEN_VERTICALLY
jr z, playEnemyMoveAnimation
- ld a, $2
+ ld a, ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_HEAVY
jr playEnemyMoveAnimation
handleExplosionMiss:
call SwapPlayerAndEnemyLevels
@@ -6935,9 +6935,11 @@ HandleExplodingAnimation:
ld a, [wMoveMissed]
and a
ret nz
- ld a, 5
+ ld a, ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_LIGHT
ld [wAnimationType], a
-
+ assert ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_LIGHT == MEGA_PUNCH
+ ; ld a, MEGA_PUNCH
+; fallthrough
PlayMoveAnimation:
ld [wAnimationID], a
call Delay3
diff --git a/engine/battle/display_effectiveness.asm b/engine/battle/display_effectiveness.asm
index b23695cf..2879f847 100644
--- a/engine/battle/display_effectiveness.asm
+++ b/engine/battle/display_effectiveness.asm
@@ -1,7 +1,7 @@
DisplayEffectiveness:
ld a, [wDamageMultipliers]
and $7F
- cp $0A
+ cp EFFECTIVE
ret z
ld hl, SuperEffectiveText
jr nc, .done
diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm
index c6ec7628..51dc1d37 100644
--- a/engine/battle/effects.asm
+++ b/engine/battle/effects.asm
@@ -1516,9 +1516,9 @@ PlayBattleAnimation2:
ld [wAnimationID], a
ldh a, [hWhoseTurn]
and a
- ld a, $6
+ ld a, ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_SLOW_2
jr z, .storeAnimationType
- ld a, $3
+ ld a, ANIMATIONTYPE_SHAKE_SCREEN_HORIZONTALLY_SLOW
.storeAnimationType
ld [wAnimationType], a
jp PlayBattleAnimationGotID
diff --git a/engine/battle/init_battle.asm b/engine/battle/init_battle.asm
index e4c56d6d..d23df283 100644
--- a/engine/battle/init_battle.asm
+++ b/engine/battle/init_battle.asm
@@ -151,7 +151,6 @@ _InitBattleCommon:
db "@"
_LoadTrainerPic:
-; wd033-wd034 contain pointer to pic
ld a, [wTrainerPicPointer]
ld e, a
ld a, [wTrainerPicPointer + 1]
@@ -183,7 +182,7 @@ LoadMonBackPic:
call InterlaceMergeSpriteBuffers ; combine the two buffers to a single 2bpp sprite
ld hl, vSprites
ld de, vBackPic
- ld c, (2*SPRITEBUFFERSIZE)/16 ; count of 16-byte chunks to be copied
+ ld c, (2 * SPRITEBUFFERSIZE) / 16 ; count of 16-byte chunks to be copied
ldh a, [hLoadedROMBank]
ld b, a
jp CopyVideoData
diff --git a/engine/battle/scale_sprites.asm b/engine/battle/scale_sprites.asm
index 38ebff21..2e33f536 100644
--- a/engine/battle/scale_sprites.asm
+++ b/engine/battle/scale_sprites.asm
@@ -84,21 +84,8 @@ ScalePixelsByTwo:
add hl, bc ; add offset
ret
-; repeats each input bit twice
+; repeats each input bit twice, e.g. DuplicateBitsTable[%0101] = %00110011
DuplicateBitsTable:
- db %00000000
- db %00000011
- db %00001100
- db %00001111
- db %00110000
- db %00110011
- db %00111100
- db %00111111
- db %11000000
- db %11000011
- db %11001100
- db %11001111
- db %11110000
- db %11110011
- db %11111100
- db %11111111
+FOR n, 16
+ db (n & 1) * 3 + (n & 2) * 6 + (n & 4) * 12 + (n & 8) * 24
+ENDR
diff --git a/engine/events/hidden_objects/bookshelves.asm b/engine/events/hidden_objects/bookshelves.asm
index b58444af..813cfc49 100644
--- a/engine/events/hidden_objects/bookshelves.asm
+++ b/engine/events/hidden_objects/bookshelves.asm
@@ -24,7 +24,7 @@ PrintBookshelfText::
pop af
call PrintPredefTextID
xor a
- ldh [hFFDB], a
+ ldh [hInteractedWithBookshelf], a
ret
.nextBookshelfEntry1
inc hl
@@ -33,7 +33,7 @@ PrintBookshelfText::
jr .loop
.noMatch
ld a, $ff
- ldh [hFFDB], a
+ ldh [hInteractedWithBookshelf], a
farjp PrintCardKeyText
INCLUDE "data/tilesets/bookshelf_tile_ids.asm"
diff --git a/engine/gfx/sprite_oam.asm b/engine/gfx/sprite_oam.asm
index 406d44fd..4660eaf6 100644
--- a/engine/gfx/sprite_oam.asm
+++ b/engine/gfx/sprite_oam.asm
@@ -30,7 +30,7 @@ PrepareOAMData::
inc e
inc e
ld a, [de] ; [x#SPRITESTATEDATA1_IMAGEINDEX]
- ld [wd5cd], a
+ ld [wSavedSpriteImageIndex], a
cp $ff ; off-screen (don't draw)
jr nz, .visible
@@ -79,7 +79,7 @@ PrepareOAMData::
jr nc, .asm_4a41
.hidden
call Func_4a7b
- ld [wd5cd], a
+ ld [wSavedSpriteImageIndex], a
ldh a, [hOAMBufferOffset]
ld e, a
@@ -101,7 +101,7 @@ PrepareOAMData::
ld [de], a
inc hl
inc e
- ld a, [wd5cd]
+ ld a, [wSavedSpriteImageIndex]
add [hl]
cp $80
jr c, .asm_4a1c
@@ -188,7 +188,7 @@ GetSpriteScreenXY:
Func_4a7b:
push bc
- ld a, [wd5cd] ; temp copy of [x#SPRITESTATEDATA1_IMAGEINDEX]
+ ld a, [wSavedSpriteImageIndex]
swap a ; high nybble determines sprite used (0 is always player sprite, next are some npcs)
and $f
diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm
index 4430c6fb..2ce6587e 100644
--- a/engine/items/item_effects.asm
+++ b/engine/items/item_effects.asm
@@ -771,7 +771,7 @@ ItemUseSurfboard:
ld a, b
ld [wSimulatedJoypadStatesEnd], a
xor a
- ld [wWastedByteCD39], a
+ ld [wUnusedCD39], a
inc a
ld [wSimulatedJoypadStatesIndex], a
ret
@@ -873,7 +873,7 @@ Func_d85d:
jr z, .cannotEvolveWithUsedStone
inc hl
inc hl
- cp EV_ITEM
+ cp EVOLVE_ITEM
jr nz, .loop
dec hl
dec hl
diff --git a/engine/menus/party_menu.asm b/engine/menus/party_menu.asm
index c64ce70a..022ae206 100644
--- a/engine/menus/party_menu.asm
+++ b/engine/menus/party_menu.asm
@@ -129,19 +129,19 @@ RedrawPartyMenu_::
rl b
ld c, a
add hl, bc
- ld de, wEvosMoves
+ ld de, wcd6d
ld a, BANK(EvosMovesPointerTable)
ld bc, 2
call FarCopyData
- ld hl, wEvosMoves
+ ld hl, wcd6d
ld a, [hli]
ld h, [hl]
ld l, a
- ld de, wEvosMoves
+ ld de, wcd6d
ld a, BANK(EvosMovesPointerTable)
- ld bc, wEvosMovesEnd - wEvosMoves
+ ld bc, 4 * 3 + 1 ; enough for Eevee's three 4-byte evolutions and 0 terminator
call FarCopyData
- ld hl, wEvosMoves
+ ld hl, wcd6d
ld de, .notAbleToEvolveText
; loop through the pokemon's evolution entries
.checkEvolutionsLoop
@@ -150,7 +150,7 @@ RedrawPartyMenu_::
jr z, .placeEvolutionStoneString ; if so, place the "NOT ABLE" string
inc hl
inc hl
- cp EV_ITEM
+ cp EVOLVE_ITEM
jr nz, .checkEvolutionsLoop
; if it's a stone evolution entry
dec hl
diff --git a/engine/menus/pokedex.asm b/engine/menus/pokedex.asm
index 36b2bb04..899b70ed 100644
--- a/engine/menus/pokedex.asm
+++ b/engine/menus/pokedex.asm
@@ -37,7 +37,7 @@ ShowPokedexMenu:
ld [wCurrentMenuItem], a
ld [wLastMenuItem], a
ldh [hJoy7], a
- ld [wWastedByteCD3A], a
+ ld [wUnusedCD3A], a
ld [wOverrideSimulatedJoypadStatesMask], a
pop af
ld [wListScrollOffset], a
diff --git a/engine/movie/credits.asm b/engine/movie/credits.asm
index 938579f3..489569d1 100644
--- a/engine/movie/credits.asm
+++ b/engine/movie/credits.asm
@@ -54,10 +54,10 @@ FadeInCreditsText:
ret
HoFGBPalettes:
- db %11000000
- db %11010000
- db %11100000
- db %11110000
+ dc 3, 0, 0, 0
+ dc 3, 1, 0, 0
+ dc 3, 2, 0, 0
+ dc 3, 3, 0, 0
DisplayCreditsMon:
ld hl, vBGMap1
diff --git a/engine/movie/oak_speech/oak_speech.asm b/engine/movie/oak_speech/oak_speech.asm
index 3e874560..6e09cfad 100644
--- a/engine/movie/oak_speech/oak_speech.asm
+++ b/engine/movie/oak_speech/oak_speech.asm
@@ -198,12 +198,12 @@ FadeInIntroPic:
ret
IntroFadePalettes:
- db %01010100
- db %10101000
- db %11111100
- db %11111000
- db %11110100
- db %11100100
+ dc 1, 1, 1, 0
+ dc 2, 2, 2, 0
+ dc 3, 3, 3, 0
+ dc 3, 3, 2, 0
+ dc 3, 3, 1, 0
+ dc 3, 2, 1, 0
MovePicLeft:
ld a, 119
diff --git a/engine/overworld/auto_movement.asm b/engine/overworld/auto_movement.asm
index 65888294..39c1f380 100644
--- a/engine/overworld/auto_movement.asm
+++ b/engine/overworld/auto_movement.asm
@@ -17,7 +17,7 @@ PlayerStepOutFromDoor::
ret
.notStandingOnDoor
xor a
- ld [wWastedByteCD3A], a
+ ld [wUnusedCD3A], a
ld [wSimulatedJoypadStatesIndex], a
ld [wSimulatedJoypadStatesEnd], a
ld hl, wd736
@@ -39,7 +39,7 @@ _EndNPCMovementScript::
ld [wNPCMovementScriptSpriteOffset], a
ld [wNPCMovementScriptFunctionNum], a
ld [wNPCMovementScriptPointerTableNum], a
- ld [wWastedByteCD3A], a
+ ld [wUnusedCD3A], a
ld [wSimulatedJoypadStatesIndex], a
ld [wSimulatedJoypadStatesEnd], a
ret
diff --git a/engine/overworld/movement.asm b/engine/overworld/movement.asm
index e6ca8748..48a6f3aa 100644
--- a/engine/overworld/movement.asm
+++ b/engine/overworld/movement.asm
@@ -114,7 +114,7 @@ UpdateNPCSprite:
and a
jp z, InitializeSpriteStatus
call CheckSpriteAvailability
- ret c ; if sprite is invisible, on tile >=MAP_TILESET_SIZE, in grass or player is currently walking
+ ret c ; don't do anything if sprite is invisible
ld h, HIGH(wSpriteStateData1)
ldh a, [hCurrentSpriteOffset]
ld l, a
@@ -135,7 +135,7 @@ UpdateNPCSprite:
jp z, Func_5357
ld a, [wWalkCounter]
and a
- ret nz ; don't do anything yet if player is currently moving (redundant, already tested in CheckSpriteAvailability)
+ ret nz ; don't do anything yet if player is currently moving
call InitializeSpriteScreenPosition
ld h, HIGH(wSpriteStateData2)
ldh a, [hCurrentSpriteOffset]
@@ -166,7 +166,7 @@ UpdateNPCSprite:
res 0, [hl]
xor a
ld [wSimulatedJoypadStatesIndex], a
- ld [wWastedByteCD3A], a
+ ld [wUnusedCD3A], a
ret
.next
cp WALK
diff --git a/engine/overworld/sprite_collisions.asm b/engine/overworld/sprite_collisions.asm
index b29dc108..186ff504 100644
--- a/engine/overworld/sprite_collisions.asm
+++ b/engine/overworld/sprite_collisions.asm
@@ -82,7 +82,7 @@ DetectCollisionBetweenSprites:
and $f0
or c
- ldh [hFF90], a ; store Y coordinate adjusted for direction of movement
+ ldh [hCollidingSpriteTempYValue], a ; y adjusted for direction of movement
ld a, [hli] ; a = [i#SPRITESTATEDATA1_XSTEPVECTOR] (-1, 0, or 1)
call SetSpriteCollisionValues
@@ -95,7 +95,7 @@ DetectCollisionBetweenSprites:
and $f0
or c
- ldh [hFF91], a ; store X coordinate adjusted for direction of movement
+ ldh [hCollidingSpriteTempXValue], a ; x adjusted for direction of movement
ld a, l
add 7
@@ -105,15 +105,15 @@ DetectCollisionBetweenSprites:
ld [hld], a ; zero [i#SPRITESTATEDATA1_0D] XXX what's this for?
ld [hld], a ; zero [i#SPRITESTATEDATA1_COLLISIONDATA]
- ldh a, [hFF91]
+ ldh a, [hCollidingSpriteTempXValue]
ld [hld], a ; [i#SPRITESTATEDATA1_XADJUSTED]
- ldh a, [hFF90]
+ ldh a, [hCollidingSpriteTempYValue]
ld [hl], a ; [i#SPRITESTATEDATA1_YADJUSTED]
xor a ; zero the loop counter
.loop
- ldh [hFF8F], a ; store loop counter
+ ldh [hCollidingSpriteOffset], a
swap a
ld e, a
ldh a, [hCurrentSpriteOffset]
@@ -157,7 +157,7 @@ DetectCollisionBetweenSprites:
cpl
inc a
.noCarry1
- ldh [hFF90], a ; store the distance between the two sprites' adjusted Y values
+ ldh [hCollidingSpriteTempYValue], a ; store the distance between the two sprites' adjusted Y values
; Use the carry flag set by the above subtraction to determine which sprite's
; Y coordinate is larger. This information is used later to set
@@ -179,11 +179,11 @@ DetectCollisionBetweenSprites:
ld b, 9
.next1
- ldh a, [hFF90] ; a = distance between adjusted Y coordinates
+ ldh a, [hCollidingSpriteTempYValue] ; a = distance between adjusted Y coordinates
sub b
- ldh [hFF92], a ; store distance adjusted using sprite i's direction
+ ldh [hCollidingSpriteAdjustedDistance], a
ld a, b
- ldh [hFF90], a ; store 7 or 9 depending on sprite i's delta Y
+ ldh [hCollidingSpriteTempYValue], a ; store 7 or 9 depending on sprite i's delta Y
jr c, .checkXDistance
; If sprite j's delta Y is 0, then b = 7, else b = 9.
@@ -196,7 +196,7 @@ DetectCollisionBetweenSprites:
ld b, 9
.next2
- ldh a, [hFF92] ; a = distance adjusted using sprite i's direction
+ ldh a, [hCollidingSpriteAdjustedDistance]
sub b ; adjust distance using sprite j's direction
jr z, .checkXDistance
jr nc, .next ; go to next sprite if distance is still positive after both adjustments
@@ -228,7 +228,7 @@ DetectCollisionBetweenSprites:
cpl
inc a
.noCarry2
- ldh [hFF91], a ; store the distance between the two sprites' adjusted X values
+ ldh [hCollidingSpriteTempXValue], a ; store the distance between the two sprites' adjusted X values
; Use the carry flag set by the above subtraction to determine which sprite's
; X coordinate is larger. This information is used later to set
@@ -250,11 +250,11 @@ DetectCollisionBetweenSprites:
ld b, 9
.next3
- ldh a, [hFF91] ; a = distance between adjusted X coordinates
+ ldh a, [hCollidingSpriteTempXValue] ; a = distance between adjusted X coordinates
sub b
- ldh [hFF92], a ; store distance adjusted using sprite i's direction
+ ldh [hCollidingSpriteAdjustedDistance], a
ld a, b
- ldh [hFF91], a ; store 7 or 9 depending on sprite i's delta X
+ ldh [hCollidingSpriteTempXValue], a ; store 7 or 9 depending on sprite i's delta X
jr c, .collision
; If sprite j's delta X is 0, then b = 7, else b = 9.
@@ -267,7 +267,7 @@ DetectCollisionBetweenSprites:
ld b, 9
.next4
- ldh a, [hFF92] ; a = distance adjusted using sprite i's direction
+ ldh a, [hCollidingSpriteAdjustedDistance]
sub b ; adjust distance using sprite j's direction
jr z, .collision
jr nc, .next ; go to next sprite if distance is still positive after both adjustments
@@ -278,15 +278,15 @@ DetectCollisionBetweenSprites:
jr nz, .asm_4cd9
xor a
ld [wd434], a
- ldh a, [hFF8F]
+ ldh a, [hCollidingSpriteOffset]
cp $f
jr nz, .asm_4cd9
call Func_4d0a
jr .asm_4cef
.asm_4cd9
- ldh a, [hFF91] ; a = 7 or 9 depending on sprite i's delta X
+ ldh a, [hCollidingSpriteTempXValue] ; a = 7 or 9 depending on sprite i's delta X
ld b, a
- ldh a, [hFF90] ; a = 7 or 9 depending on sprite i's delta Y
+ ldh a, [hCollidingSpriteTempYValue] ; a = 7 or 9 depending on sprite i's delta Y
inc l
; If delta X isn't 0 and delta Y is 0, then b = %0011, else b = %1100.
@@ -310,7 +310,7 @@ DetectCollisionBetweenSprites:
inc l
inc l
.asm_4cef
- ldh a, [hFF8F] ; a = loop counter
+ ldh a, [hCollidingSpriteOffset]
ld de, SpriteCollisionBitTable
add a
add e
@@ -327,7 +327,7 @@ DetectCollisionBetweenSprites:
ld [hl], a
.next
- ldh a, [hFF8F] ; a = loop counter
+ ldh a, [hCollidingSpriteOffset]
inc a
cp $10
jp nz, .loop
@@ -339,9 +339,9 @@ DetectCollisionBetweenSprites:
; c = 7 if delta X/Y is 1
; c = 9 if delta X/Y is -1
Func_4d0a:
- ldh a, [hFF91]
+ ldh a, [hCollidingSpriteTempXValue]
ld b, a
- ldh a, [hFF90]
+ ldh a, [hCollidingSpriteTempYValue]
inc l
cp b
jr c, .asm_4d17
@@ -374,19 +374,6 @@ SetSpriteCollisionValues:
ret
SpriteCollisionBitTable:
- db %00000000,%00000001
- db %00000000,%00000010
- db %00000000,%00000100
- db %00000000,%00001000
- db %00000000,%00010000
- db %00000000,%00100000
- db %00000000,%01000000
- db %00000000,%10000000
- db %00000001,%00000000
- db %00000010,%00000000
- db %00000100,%00000000
- db %00001000,%00000000
- db %00010000,%00000000
- db %00100000,%00000000
- db %01000000,%00000000
- db %10000000,%00000000
+FOR n, $10
+ bigdw 1 << n
+ENDR
diff --git a/engine/pokemon/evos_moves.asm b/engine/pokemon/evos_moves.asm
index 6ff91597..4536453e 100644
--- a/engine/pokemon/evos_moves.asm
+++ b/engine/pokemon/evos_moves.asm
@@ -67,20 +67,20 @@ Evolution_PartyMonLoop: ; loop over party mons
and a ; have we reached the end of the evolution data?
jr z, Evolution_PartyMonLoop
ld b, a ; evolution type
- cp EV_TRADE
+ cp EVOLVE_TRADE
jr z, .checkTradeEvo
; not trade evolution
ld a, [wLinkState]
cp LINK_STATE_TRADING
jr z, Evolution_PartyMonLoop ; if trading, go the next mon
ld a, b
- cp EV_ITEM
+ cp EVOLVE_ITEM
jr z, .checkItemEvo
ld a, [wForceEvolution]
and a
jr nz, Evolution_PartyMonLoop
ld a, b
- cp EV_LEVEL
+ cp EVOLVE_LEVEL
jr z, .checkLevel
.checkTradeEvo
ld a, [wLinkState]
diff --git a/home/fade.asm b/home/fade.asm
index f38878b1..3180db7b 100644
--- a/home/fade.asm
+++ b/home/fade.asm
@@ -71,12 +71,12 @@ GBFadeDecCommon:
jr nz, GBFadeDecCommon
ret
-FadePal1:: db %11111111, %11111111, %11111111
-FadePal2:: db %11111110, %11111110, %11111000
-FadePal3:: db %11111001, %11100100, %11100100
-FadePal4:: db %11100100, %11010000, %11100000
-; rBGP rOBP0 rOBP1
-FadePal5:: db %11100100, %11010000, %11100000
-FadePal6:: db %10010000, %10000000, %10010000
-FadePal7:: db %01000000, %01000000, %01000000
-FadePal8:: db %00000000, %00000000, %00000000
+FadePal1:: dc 3,3,3,3, 3,3,3,3, 3,3,3,3
+FadePal2:: dc 3,3,3,2, 3,3,3,2, 3,3,2,0
+FadePal3:: dc 3,3,2,1, 3,2,1,0, 3,2,1,0
+FadePal4:: dc 3,2,1,0, 3,1,0,0, 3,2,0,0
+; rBGP rOBP0 rOBP1
+FadePal5:: dc 3,2,1,0, 3,1,0,0, 3,2,0,0
+FadePal6:: dc 2,1,0,0, 2,0,0,0, 2,1,0,0
+FadePal7:: dc 1,0,0,0, 1,0,0,0, 1,0,0,0
+FadePal8:: dc 0,0,0,0, 0,0,0,0, 0,0,0,0
diff --git a/home/hidden_objects.asm b/home/hidden_objects.asm
index d22bd3d8..986ce38f 100644
--- a/home/hidden_objects.asm
+++ b/home/hidden_objects.asm
@@ -25,7 +25,7 @@ CheckForHiddenObjectOrBookshelfOrCardKeyDoor::
.hiddenObjectNotFound
predef GetTileAndCoordsInFrontOfPlayer
farcall PrintBookshelfText
- ldh a, [hFFDB]
+ ldh a, [hInteractedWithBookshelf]
and a
jr z, .done
.nothingFound
diff --git a/home/overworld.asm b/home/overworld.asm
index 201d5d42..a6acecd2 100644
--- a/home/overworld.asm
+++ b/home/overworld.asm
@@ -1629,7 +1629,7 @@ AreInputsSimulated::
; if done simulating button presses
.doneSimulating
xor a
- ld [wWastedByteCD3A], a
+ ld [wUnusedCD3A], a
ld [wSimulatedJoypadStatesIndex], a
ld [wSimulatedJoypadStatesEnd], a
ld [wJoyIgnore], a
diff --git a/home/pathfinding.asm b/home/pathfinding.asm
index 53f98847..77cb5c4b 100644
--- a/home/pathfinding.asm
+++ b/home/pathfinding.asm
@@ -40,7 +40,7 @@ MoveSprite_::
ld [wSimulatedJoypadStatesEnd], a
dec a
ld [wJoyIgnore], a
- ld [wWastedByteCD3A], a
+ ld [wUnusedCD3A], a
ret
; divides [hDividend2] by [hDivisor2] and stores the quotient in [hQuotient2]
diff --git a/home/text_script.asm b/home/text_script.asm
index ab0cd804..a70e0f9c 100644
--- a/home/text_script.asm
+++ b/home/text_script.asm
@@ -201,7 +201,7 @@ DisplayPlayerBlackedOutText::
ld [wSafariSteps], a
ld [wSafariSteps + 1], a
EventFlagAddressA EVENT_IN_SAFARI_ZONE
- ld [wcf0d], a
+ ld [wNextSafariZoneGateScript], a
ld [wSafariZoneGateCurScript], a
.didnotblackoutinsafari
jp HoldTextDisplayOpen
diff --git a/includes.asm b/includes.asm
index fb19bf35..f58c49eb 100644
--- a/includes.asm
+++ b/includes.asm
@@ -24,6 +24,7 @@ INCLUDE "constants/serial_constants.asm"
INCLUDE "constants/script_constants.asm"
INCLUDE "constants/type_constants.asm"
INCLUDE "constants/battle_constants.asm"
+INCLUDE "constants/battle_anim_constants.asm"
INCLUDE "constants/move_constants.asm"
INCLUDE "constants/move_animation_constants.asm"
INCLUDE "constants/move_effect_constants.asm"
diff --git a/macros/data.asm b/macros/data.asm
index 775b6adc..eeb3a2fd 100644
--- a/macros/data.asm
+++ b/macros/data.asm
@@ -56,6 +56,17 @@ MACRO dn ; nybbles
ENDR
ENDM
+MACRO dc ; "crumbs"
+ REPT _NARG / 4
+ db ((\1) << 6) | ((\2) << 4) | ((\3) << 2) | (\4)
+ SHIFT 4
+ ENDR
+ENDM
+
+MACRO bigdw ; big-endian word
+ db HIGH(\1), LOW(\1)
+ENDM
+
MACRO dba ; dbw bank, address
REPT _NARG
dbw BANK(\1), \1
diff --git a/ram/hram.asm b/ram/hram.asm
index 0e9a61e1..b396450e 100644
--- a/ram/hram.asm
+++ b/ram/hram.asm
@@ -85,10 +85,10 @@ hSpriteScreenX:: db
hSpriteScreenY:: db
NEXTU
-hFF8F:: db
-hFF90:: db
-hFF91:: db
-hFF92:: db
+hCollidingSpriteOffset:: db
+hCollidingSpriteTempYValue:: db
+hCollidingSpriteTempXValue:: db
+hCollidingSpriteAdjustedDistance:: db
ENDU
hTilePlayerStandingOn:: db
@@ -327,13 +327,10 @@ hItemCounter::
hSavedCoordIndex::
hMissableObjectIndex::
hGymTrashCanRandNumMask::
+hInteractedWithBookshelf::
db
NEXTU
-hFFDB:: db
-hFFDC:: db
-
-NEXTU
hCanceledPrinting:: db
ENDU
diff --git a/ram/wram.asm b/ram/wram.asm
index b67b4749..74d6ae34 100644
--- a/ram/wram.asm
+++ b/ram/wram.asm
@@ -745,10 +745,10 @@ wFilteredBagItemsCount:: db
wSimulatedJoypadStatesIndex:: db
; written to but nothing ever reads it
-wWastedByteCD39:: db
+wUnusedCD39:: db
; written to but nothing ever reads it
-wWastedByteCD3A:: db
+wUnusedCD3A:: db
; mask indicating which real button presses can override simulated ones
; XXX is it ever not 0?
@@ -1061,10 +1061,6 @@ UNION
wcd6d:: ds NAME_BUFFER_LENGTH ; buffer for various data
NEXTU
-wEvosMoves:: ds MAX_EVOLUTIONS * EVOLUTION_SIZE + 1
-wEvosMovesEnd::
-
-NEXTU
ds 4
; temp variable used to print a move's current PP on the status screen
wStatusScreenCurrentPP:: db
@@ -1153,7 +1149,10 @@ wBattleResult:: db
; bit 0: if set, DisplayTextID automatically draws a text box
wAutoTextBoxDrawingControl:: db
-wcf0d:: db ; used with some overworld scripts (not exactly sure what it's used for)
+; used in some overworld scripts to vary scripted movement
+wSavedCoordIndex::
+wOakWalkedToPlayer::
+wNextSafariZoneGateScript:: db
; used in CheckForTilePairCollisions2 to store the tile the player is on
wTilePlayerStandingOn:: db
@@ -2171,8 +2170,8 @@ wMissableObjectFlagsEnd::
ds 7
-; temp copy of SPRITESTATEDATA1_IMAGEINDEX (used for sprite facing/anim)
-wd5cd:: db
+; saved copy of SPRITESTATEDATA1_IMAGEINDEX (used for sprite facing/anim)
+wSavedSpriteImageIndex:: db
; each entry consists of 2 bytes
; * the sprite ID (depending on the current map)
diff --git a/scripts/FightingDojo.asm b/scripts/FightingDojo.asm
index 298c2fcb..d434f681 100644
--- a/scripts/FightingDojo.asm
+++ b/scripts/FightingDojo.asm
@@ -32,15 +32,15 @@ FightingDojoDefaultScript:
ret nz
xor a
ldh [hJoyHeld], a
- ld [wcf0d], a
+ ld [wSavedCoordIndex], a
ld a, [wYCoord]
cp 3
ret nz
ld a, [wXCoord]
cp 4
ret nz
- ld a, $1
- ld [wcf0d], a
+ ld a, 1
+ ld [wSavedCoordIndex], a
ld a, PLAYER_DIR_RIGHT
ld [wPlayerMovingDirection], a
ld a, FIGHTINGDOJO_KARATE_MASTER
@@ -57,8 +57,8 @@ FightingDojoKarateMasterPostBattleScript:
ld a, [wIsInBattle]
cp $ff
jp z, FightingDojoResetScripts
- ld a, [wcf0d]
- and a
+ ld a, [wSavedCoordIndex]
+ and a ; nz if the player was at (4, 3), left of the Karate Master
jr z, .already_facing
ld a, PLAYER_DIR_RIGHT
ld [wPlayerMovingDirection], a
diff --git a/scripts/PalletTown.asm b/scripts/PalletTown.asm
index 07e59cc0..9c8ab449 100644
--- a/scripts/PalletTown.asm
+++ b/scripts/PalletTown.asm
@@ -55,7 +55,7 @@ PalletTownOakHeyWaitScript:
ld a, ~(A_BUTTON | B_BUTTON)
ld [wJoyIgnore], a
xor a
- ld [wcf0d], a
+ ld [wOakWalkedToPlayer], a
ld a, TEXT_PALLETTOWN_OAK
ldh [hSpriteIndexOrTextID], a
call DisplayTextID
@@ -109,7 +109,7 @@ PalletTownOakGreetsPlayerScript:
ld a, ~(A_BUTTON | B_BUTTON)
ld [wJoyIgnore], a
ld a, 1
- ld [wcf0d], a
+ ld [wOakWalkedToPlayer], a
ld a, $2
ld [wSprite01StateData1MovementStatus], a
ld a, SPRITE_FACING_UP
@@ -153,8 +153,8 @@ PalletTownPikachuBattleScript:
ret
PalletTownAfterPikachuBattleScript:
- ld a, $2
- ld [wcf0d], a
+ ld a, 2
+ ld [wOakWalkedToPlayer], a
ld a, TEXT_PALLETTOWN_OAK
ldh [hSpriteIndexOrTextID], a
call DisplayTextID
@@ -232,7 +232,7 @@ PalletTown_TextPointers:
PalletTownOakText:
text_asm
- ld a, [wcf0d]
+ ld a, [wOakWalkedToPlayer]
and a
jr nz, .next
ld a, 1
diff --git a/scripts/Route18.asm b/scripts/Route18.asm
index 26d660c8..43ae9318 100644
--- a/scripts/Route18.asm
+++ b/scripts/Route18.asm
@@ -15,11 +15,11 @@ Route18_ScriptPointers:
Route18_TextPointers:
def_text_pointers
- dw_const Route18CooltrainerM1Text, SCRIPT_ROUTE18_COOLTRAINER_M1
- dw_const Route18CooltrainerM2Text, SCRIPT_ROUTE18_COOLTRAINER_M2
- dw_const Route18CooltrainerM3Text, SCRIPT_ROUTE18_COOLTRAINER_M3
- dw_const Route18SignText, SCRIPT_ROUTE18_SIGN
- dw_const Route18CyclingRoadSignText, SCRIPT_ROUTE18_CYCLING_ROAD_SIGN
+ dw_const Route18CooltrainerM1Text, TEXT_ROUTE18_COOLTRAINER_M1
+ dw_const Route18CooltrainerM2Text, TEXT_ROUTE18_COOLTRAINER_M2
+ dw_const Route18CooltrainerM3Text, TEXT_ROUTE18_COOLTRAINER_M3
+ dw_const Route18SignText, TEXT_ROUTE18_SIGN
+ dw_const Route18CyclingRoadSignText, TEXT_ROUTE18_CYCLING_ROAD_SIGN
Route18TrainerHeaders:
def_trainers
diff --git a/scripts/Route22.asm b/scripts/Route22.asm
index a1b8d0ea..40e2ea92 100644
--- a/scripts/Route22.asm
+++ b/scripts/Route22.asm
@@ -39,7 +39,7 @@ Route22Script_50ee1:
Route22MoveRivalRightScript:
ld de, Route22RivalMovementData
- ld a, [wcf0d]
+ ld a, [wSavedCoordIndex]
cp $1
jr z, .skip_first_right
inc de
@@ -63,7 +63,7 @@ Route22DefaultScript:
call ArePlayerCoordsInArray
ret nc
ld a, [wCoordIndex]
- ld [wcf0d], a
+ ld [wSavedCoordIndex], a
xor a
ldh [hJoyHeld], a
ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
@@ -106,8 +106,8 @@ Route22Rival1StartBattleScript:
ld a, [wd730]
bit 0, a
ret nz
- ld a, [wcf0d]
- cp $1
+ ld a, [wSavedCoordIndex]
+ cp 1 ; index of second, lower entry in Route22DefaultScript.Route22RivalBattleCoords
jr nz, .set_rival_facing_right
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
@@ -174,8 +174,8 @@ Route22Rival1AfterBattleScript:
call DisplayTextID
call StopAllMusic
farcall Music_RivalAlternateStart
- ld a, [wcf0d]
- cp $1
+ ld a, [wSavedCoordIndex]
+ cp 1 ; index of second, lower entry in Route22DefaultScript.Route22RivalBattleCoords
jr nz, .exit_movement_2
call .RivalExit1Script
jr .next_script
@@ -261,8 +261,8 @@ Route22Rival2StartBattleScript:
ret nz
ld a, ROUTE22_RIVAL2
ldh [hSpriteIndex], a
- ld a, [wcf0d]
- cp $1
+ ld a, [wSavedCoordIndex]
+ cp 1 ; index of second, lower entry in Route22DefaultScript.Route22RivalBattleCoords
jr nz, .set_player_direction_left
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
@@ -305,8 +305,8 @@ Route22Rival2AfterBattleScript:
jp z, Route22SetDefaultScript
ld a, ROUTE22_RIVAL2
ldh [hSpriteIndex], a
- ld a, [wcf0d]
- cp $1
+ ld a, [wSavedCoordIndex]
+ cp 1 ; index of second, lower entry in Route22DefaultScript.Route22RivalBattleCoords
jr nz, .set_player_direction_left
ld a, PLAYER_DIR_DOWN
ld [wPlayerMovingDirection], a
@@ -327,8 +327,8 @@ Route22Rival2AfterBattleScript:
call DisplayTextID
call StopAllMusic
farcall Music_RivalAlternateStartAndTempo
- ld a, [wcf0d]
- cp $1
+ ld a, [wSavedCoordIndex]
+ cp 1 ; index of second, lower entry in Route22DefaultScript.Route22RivalBattleCoords
jr nz, .exit_movement_2
call .RivalExit1Script
jr .next_script
diff --git a/scripts/SafariZoneGate.asm b/scripts/SafariZoneGate.asm
index f6ca2277..db91146c 100644
--- a/scripts/SafariZoneGate.asm
+++ b/scripts/SafariZoneGate.asm
@@ -30,14 +30,14 @@ SafariZoneGateDefaultScript:
ld a, SPRITE_FACING_RIGHT
ld [wSpritePlayerStateData1FacingDirection], a
ld a, [wCoordIndex]
- cp $1
+ cp 1 ; index of second, lower entry in .PlayerNextToSafariZoneWorker1CoordsArray
jr z, .player_not_next_to_worker
ld a, SCRIPT_SAFARIZONEGATE_WOULD_YOU_LIKE_TO_JOIN
ld [wSafariZoneGateCurScript], a
ret
.player_not_next_to_worker
ld a, D_RIGHT
- ld c, $1
+ ld c, 1
call SafariZoneEntranceAutoWalk
ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
ld [wJoyIgnore], a
@@ -91,7 +91,7 @@ SafariZoneGateLeavingSafariScript:
ld [wSafariSteps], a
ld [wSafariSteps], a ; ?????
ld a, D_DOWN
- ld c, $3
+ ld c, 3
call SafariZoneEntranceAutoWalk
ld a, SCRIPT_SAFARIZONEGATE_PLAYER_MOVING_DOWN
ld [wSafariZoneGateCurScript], a
@@ -116,7 +116,7 @@ SafariZoneGateSetScriptAfterMoveScript:
call SafariZoneGateReturnSimulatedJoypadStateScript
ret nz
call Delay3
- ld a, [wcf0d]
+ ld a, [wNextSafariZoneGateScript]
ld [wSafariZoneGateCurScript], a
ret
@@ -165,11 +165,11 @@ SafariZoneGateSafariZoneWorker1LeavingEarlyText:
xor a
ld [wSpritePlayerStateData1FacingDirection], a
ld a, D_DOWN
- ld c, $3
+ ld c, 3
call SafariZoneEntranceAutoWalk
ResetEvents EVENT_SAFARI_GAME_OVER, EVENT_IN_SAFARI_ZONE
- ld a, $0
- ld [wcf0d], a
+ ld a, SCRIPT_SAFARIZONEGATE_DEFAULT
+ ld [wNextSafariZoneGateScript], a
jr .set_current_script
.not_ready_to_leave
ld hl, .GoodLuckText
@@ -177,10 +177,10 @@ SafariZoneGateSafariZoneWorker1LeavingEarlyText:
ld a, SPRITE_FACING_UP
ld [wSpritePlayerStateData1FacingDirection], a
ld a, D_UP
- ld c, $1
+ ld c, 1
call SafariZoneEntranceAutoWalk
ld a, SCRIPT_SAFARIZONEGATE_LEAVING_SAFARI
- ld [wcf0d], a
+ ld [wNextSafariZoneGateScript], a
.set_current_script
ld a, SCRIPT_SAFARIZONEGATE_SET_SCRIPT_AFTER_MOVE
ld [wSafariZoneGateCurScript], a
diff --git a/scripts/SilphCo11F.asm b/scripts/SilphCo11F.asm
index 237efd0b..abc5cb02 100644
--- a/scripts/SilphCo11F.asm
+++ b/scripts/SilphCo11F.asm
@@ -116,7 +116,7 @@ SilphCo11FScript_621c5:
call ArePlayerCoordsInArray
jp nc, CheckFightingMapTrainers
ld a, [wCoordIndex]
- ld [wcf0d], a
+ ld [wSavedCoordIndex], a
xor a
ldh [hJoyHeld], a
ld a, D_RIGHT | D_LEFT | D_UP | D_DOWN
@@ -156,8 +156,8 @@ SilphCo11FGiovanniAfterBattleScript:
ld a, [wIsInBattle]
cp $ff
jp z, SilphCo11FResetCurScript
- ld a, [wcf0d]
- cp $1
+ ld a, [wSavedCoordIndex]
+ cp 1 ; index of second, upper-right entry in SilphCo11FDefaultScript.PlayerCoordsArray
jr z, .face_player_up
ld a, PLAYER_DIR_LEFT
ld b, SPRITE_FACING_RIGHT
@@ -189,8 +189,8 @@ SilphCo11FGiovanniStartBattleScript:
ld a, SILPHCO11F_GIOVANNI
ldh [hSpriteIndex], a
call SetSpriteMovementBytesToFF
- ld a, [wcf0d]
- cp $1
+ ld a, [wSavedCoordIndex]
+ cp 1 ; index of second, upper-right entry in SilphCo11FDefaultScript.PlayerCoordsArray
jr z, .face_player_up
ld a, PLAYER_DIR_LEFT
ld b, SPRITE_FACING_RIGHT
diff --git a/scripts/SilphCo7F.asm b/scripts/SilphCo7F.asm
index 131cf851..74788bf6 100644
--- a/scripts/SilphCo7F.asm
+++ b/scripts/SilphCo7F.asm
@@ -143,8 +143,8 @@ SilphCo7FDefaultScript:
call SetSpriteMovementBytesToFF
ld de, .RivalMovementUp
ld a, [wCoordIndex]
- ld [wcf0d], a
- cp $1
+ ld [wSavedCoordIndex], a
+ cp 1 ; index of second, lower entry in .RivalEncounterCoordinates
jr z, .full_rival_movement
inc de
.full_rival_movement
@@ -211,8 +211,8 @@ SilphCo7FRivalAfterBattleScript:
call StopAllMusic
farcall Music_RivalAlternateStart
ld de, .RivalWalkAroundPlayerMovement
- ld a, [wcf0d]
- cp $1
+ ld a, [wSavedCoordIndex]
+ cp 1 ; index of second, lower entry in SilphCo7FDefaultScript.RivalEncounterCoordinates
jr nz, .walk_around_player
ld de, .RivalExitRightMovement
.walk_around_player
diff --git a/scripts/VermilionCity.asm b/scripts/VermilionCity.asm
index 0f69174c..7056a337 100644
--- a/scripts/VermilionCity.asm
+++ b/scripts/VermilionCity.asm
@@ -62,7 +62,7 @@ VermilionCityDefaultScript:
jr nc, .return
xor a
ldh [hJoyHeld], a
- ld [wcf0d], a
+ ld [wSavedCoordIndex], a ; unnecessary
ld a, TEXT_VERMILIONCITY_SAILOR1
ldh [hSpriteIndexOrTextID], a
call DisplayTextID
diff --git a/tools/palfix.py b/tools/palfix.py
index e7841958..3a997d54 100755
--- a/tools/palfix.py
+++ b/tools/palfix.py
@@ -4,10 +4,9 @@
"""
Usage: python palfix.py image.png
-Fix the palette format of the input image. Colored images (Gen 2 Pokémon or
-trainer sprites) will become indexed, with a palette sorted {white, light
-color, dark color, black}. Grayscale images (all Gen 1 images) will become
-two-bit grayscale.
+Fix the palette format of the input image to two-bit grayscale.
+Colored images will have their palette sorted {white, light
+color, dark color, black}.
"""
import sys
@@ -18,10 +17,6 @@ def rgb8_to_rgb5(c):
r, g, b = c
return (r // 8, g // 8, b // 8)
-def rgb5_to_rgb8(c):
- r, g, b = c
- return (r * 8 + r // 4, g * 8 + g // 4, b * 8 + b // 4)
-
def invert(c):
r, g, b = c
return (31 - r, 31 - g, 31 - b)
@@ -33,10 +28,6 @@ def luminance(c):
def rgb5_pixels(row):
yield from (rgb8_to_rgb5(row[x:x+3]) for x in range(0, len(row), 4))
-def is_grayscale(palette):
- return (palette == ((31, 31, 31), (21, 21, 21), (10, 10, 10), (0, 0, 0)) or
- palette == ((31, 31, 31), (20, 20, 20), (10, 10, 10), (0, 0, 0)))
-
def fix_pal(filename):
with open(filename, 'rb') as file:
width, height, rows = png.Reader(file).asRGBA8()[:3]
@@ -52,13 +43,8 @@ def fix_pal(filename):
return False
palette = tuple(sorted(colors | b_and_w, key=luminance, reverse=True))
assert len(palette) == 4
- rows = [list(map(palette.index, rgb5_pixels(row))) for row in rows]
- if is_grayscale(palette):
- rows = [[3 - c for c in row] for row in rows]
- writer = png.Writer(width, height, greyscale=True, bitdepth=2, compression=9)
- else:
- palette = tuple(map(rgb5_to_rgb8, palette))
- writer = png.Writer(width, height, palette=palette, bitdepth=8, compression=9)
+ rows = [[3 - palette.index(c) for c in rgb5_pixels(row)] for row in rows]
+ writer = png.Writer(width, height, greyscale=True, bitdepth=2, compression=9)
with open(filename, 'wb') as file:
writer.write(file, rows)
return True