summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordannye <33dannye@gmail.com>2021-03-25 17:39:44 -0500
committerdannye <33dannye@gmail.com>2021-03-25 17:39:44 -0500
commiteb47bda8ee5c1f002236200df36012de9e243a97 (patch)
treefc69fc5435582efebd36fc54414673dd8ac7f646
parentd07a66662728225c1422fed1072281dee71a2c9e (diff)
parent95ec2cf039f0efdc6dadfb6fe766ace231a1b6b1 (diff)
Merge branch 'master' of https://github.com/pret/pokered
-rw-r--r--audio/notes.asm2
-rw-r--r--constants.asm10
-rw-r--r--constants/audio_constants.asm1
-rw-r--r--constants/battle_constants.asm35
-rw-r--r--constants/credits_constants.asm1
-rw-r--r--constants/gfx_constants.asm1
-rw-r--r--constants/hide_show_constants.asm1
-rw-r--r--constants/item_constants.asm4
-rw-r--r--constants/map_constants.asm1
-rw-r--r--constants/menu_constants.asm1
-rw-r--r--constants/move_animation_constants.asm3
-rw-r--r--constants/move_constants.asm6
-rw-r--r--constants/move_effect_constants.asm1
-rw-r--r--constants/palette_constants.asm1
-rw-r--r--constants/pokemon_data_constants.asm31
-rw-r--r--constants/script_constants.asm1
-rw-r--r--constants/sprite_constants.asm1
-rw-r--r--constants/tileset_constants.asm1
-rw-r--r--constants/trainer_constants.asm1
-rw-r--r--constants/type_constants.asm2
-rw-r--r--data/battle/stat_mod_names.asm17
-rw-r--r--data/battle/stat_names.asm17
-rw-r--r--data/battle_anims/base_coords.asm2
-rw-r--r--data/battle_anims/frame_blocks.asm2
-rw-r--r--data/battle_anims/subanimations.asm2
-rw-r--r--data/credits/credits_mons.asm1
-rw-r--r--data/credits/credits_text.asm2
-rw-r--r--data/events/trades.asm2
-rw-r--r--data/growth_rates.asm2
-rw-r--r--data/items/key_items.asm2
-rw-r--r--data/items/names.asm197
-rw-r--r--data/items/prices.asm3
-rw-r--r--data/items/tm_prices.asm2
-rw-r--r--data/maps/hide_show_data.asm4
-rw-r--r--data/maps/map_header_banks.asm2
-rw-r--r--data/maps/map_header_pointers.asm4
-rw-r--r--data/maps/names.asm1
-rw-r--r--data/maps/songs.asm2
-rw-r--r--data/maps/sprite_sets.asm26
-rw-r--r--data/maps/town_map_entries.asm2
-rw-r--r--data/moves/animations.asm3
-rw-r--r--data/moves/effects_pointers.asm2
-rw-r--r--data/moves/field_move_names.asm1
-rw-r--r--data/moves/moves.asm8
-rw-r--r--data/moves/names.asm332
-rw-r--r--data/moves/sfx.asm2
-rw-r--r--data/moves/tmhm_moves.asm3
-rw-r--r--data/pokemon/base_stats.asm6
-rw-r--r--data/pokemon/cries.asm2
-rw-r--r--data/pokemon/dex_entries.asm2
-rw-r--r--data/pokemon/dex_order.asm2
-rw-r--r--data/pokemon/evos_moves.asm2
-rw-r--r--data/pokemon/menu_icons.asm2
-rw-r--r--data/pokemon/names.asm2
-rw-r--r--data/pokemon/palettes.asm2
-rw-r--r--data/sgb/sgb_palettes.asm4
-rw-r--r--data/sprites/sprites.asm2
-rw-r--r--data/tilemaps.asm2
-rw-r--r--data/tilesets/tileset_headers.asm2
-rw-r--r--data/tilesets/warp_tile_ids.asm2
-rw-r--r--data/trainers/ai_pointers.asm2
-rw-r--r--data/trainers/move_choices.asm3
-rw-r--r--data/trainers/pic_pointers_money.asm2
-rw-r--r--data/types/names.asm3
-rw-r--r--data/wild/grass_water.asm2
-rw-r--r--data/wild/maps/CeruleanCave1F.asm6
-rw-r--r--data/wild/maps/CeruleanCave2F.asm6
-rw-r--r--data/wild/maps/CeruleanCaveB1F.asm6
-rw-r--r--data/wild/maps/DiglettsCave.asm6
-rw-r--r--data/wild/maps/MtMoon1F.asm6
-rw-r--r--data/wild/maps/MtMoonB1F.asm6
-rw-r--r--data/wild/maps/MtMoonB2F.asm6
-rw-r--r--data/wild/maps/PokemonMansion1F.asm6
-rw-r--r--data/wild/maps/PokemonMansion2F.asm6
-rw-r--r--data/wild/maps/PokemonMansion3F.asm6
-rw-r--r--data/wild/maps/PokemonMansionB1F.asm6
-rw-r--r--data/wild/maps/PokemonTower1F.asm6
-rw-r--r--data/wild/maps/PokemonTower2F.asm6
-rw-r--r--data/wild/maps/PokemonTower3F.asm6
-rw-r--r--data/wild/maps/PokemonTower4F.asm6
-rw-r--r--data/wild/maps/PokemonTower5F.asm6
-rw-r--r--data/wild/maps/PokemonTower6F.asm6
-rw-r--r--data/wild/maps/PokemonTower7F.asm6
-rw-r--r--data/wild/maps/PowerPlant.asm6
-rw-r--r--data/wild/maps/RockTunnel1F.asm6
-rw-r--r--data/wild/maps/RockTunnelB1F.asm6
-rw-r--r--data/wild/maps/Route1.asm6
-rw-r--r--data/wild/maps/Route10.asm6
-rw-r--r--data/wild/maps/Route11.asm6
-rw-r--r--data/wild/maps/Route12.asm6
-rw-r--r--data/wild/maps/Route13.asm6
-rw-r--r--data/wild/maps/Route14.asm6
-rw-r--r--data/wild/maps/Route15.asm6
-rw-r--r--data/wild/maps/Route16.asm6
-rw-r--r--data/wild/maps/Route17.asm6
-rw-r--r--data/wild/maps/Route18.asm6
-rw-r--r--data/wild/maps/Route19.asm6
-rw-r--r--data/wild/maps/Route2.asm6
-rw-r--r--data/wild/maps/Route21.asm6
-rw-r--r--data/wild/maps/Route22.asm6
-rw-r--r--data/wild/maps/Route23.asm6
-rw-r--r--data/wild/maps/Route24.asm6
-rw-r--r--data/wild/maps/Route25.asm6
-rw-r--r--data/wild/maps/Route3.asm6
-rw-r--r--data/wild/maps/Route4.asm6
-rw-r--r--data/wild/maps/Route5.asm6
-rw-r--r--data/wild/maps/Route6.asm6
-rw-r--r--data/wild/maps/Route7.asm6
-rw-r--r--data/wild/maps/Route8.asm6
-rw-r--r--data/wild/maps/Route9.asm6
-rw-r--r--data/wild/maps/SafariZoneCenter.asm6
-rw-r--r--data/wild/maps/SafariZoneEast.asm6
-rw-r--r--data/wild/maps/SafariZoneNorth.asm6
-rw-r--r--data/wild/maps/SafariZoneWest.asm6
-rw-r--r--data/wild/maps/SeafoamIslands1F.asm6
-rw-r--r--data/wild/maps/SeafoamIslandsB1F.asm6
-rw-r--r--data/wild/maps/SeafoamIslandsB2F.asm6
-rw-r--r--data/wild/maps/SeafoamIslandsB3F.asm6
-rw-r--r--data/wild/maps/SeafoamIslandsB4F.asm6
-rw-r--r--data/wild/maps/VictoryRoad1F.asm6
-rw-r--r--data/wild/maps/VictoryRoad2F.asm6
-rw-r--r--data/wild/maps/VictoryRoad3F.asm6
-rw-r--r--data/wild/maps/ViridianForest.asm6
-rw-r--r--data/wild/maps/nothing.asm6
-rw-r--r--data/yes_no_menu_strings.asm2
-rw-r--r--engine/battle/core.asm10
-rw-r--r--engine/battle/effects.asm4
-rw-r--r--engine/battle/trainer_ai.asm2
-rw-r--r--engine/debug/debug_menu.asm6
-rw-r--r--engine/events/heal_party.asm2
-rw-r--r--engine/items/item_effects.asm11
-rw-r--r--engine/pokemon/add_mon.asm2
-rw-r--r--engine/pokemon/evos_moves.asm4
-rw-r--r--engine/pokemon/learn_move.asm2
-rw-r--r--home/pokemon.asm4
-rw-r--r--macros.asm1
-rw-r--r--macros/asserts.asm87
-rw-r--r--macros/const.asm8
-rw-r--r--wram.asm11
139 files changed, 865 insertions, 437 deletions
diff --git a/audio/notes.asm b/audio/notes.asm
index 75e1a0b7..ac4b3eb0 100644
--- a/audio/notes.asm
+++ b/audio/notes.asm
@@ -1,5 +1,6 @@
; This file is INCLUDEd three times, once in each audio engine.
+ table_width 2
dw $F82C ; C_
dw $F89D ; C#
dw $F907 ; D_
@@ -12,3 +13,4 @@
dw $FB58 ; A_
dw $FB9B ; A#
dw $FBDA ; B_
+ assert_table_length NUM_NOTES
diff --git a/constants.asm b/constants.asm
index 2a277001..99714a84 100644
--- a/constants.asm
+++ b/constants.asm
@@ -9,16 +9,16 @@ INCLUDE "constants/gfx_constants.asm"
INCLUDE "constants/input_constants.asm"
INCLUDE "constants/serial_constants.asm"
INCLUDE "constants/script_constants.asm"
-INCLUDE "constants/pokemon_constants.asm"
-INCLUDE "constants/pokedex_constants.asm"
-INCLUDE "constants/pokemon_data_constants.asm"
-INCLUDE "constants/trainer_constants.asm"
INCLUDE "constants/type_constants.asm"
+INCLUDE "constants/battle_constants.asm"
INCLUDE "constants/move_constants.asm"
INCLUDE "constants/move_animation_constants.asm"
INCLUDE "constants/move_effect_constants.asm"
-INCLUDE "constants/battle_constants.asm"
INCLUDE "constants/item_constants.asm"
+INCLUDE "constants/pokemon_constants.asm"
+INCLUDE "constants/pokedex_constants.asm"
+INCLUDE "constants/pokemon_data_constants.asm"
+INCLUDE "constants/trainer_constants.asm"
INCLUDE "constants/icon_constants.asm"
INCLUDE "constants/sprite_constants.asm"
INCLUDE "constants/sprite_data_constants.asm"
diff --git a/constants/audio_constants.asm b/constants/audio_constants.asm
index e36d2d5f..69ec4e74 100644
--- a/constants/audio_constants.asm
+++ b/constants/audio_constants.asm
@@ -13,6 +13,7 @@
const A_ ; 9
const A# ; A
const B_ ; B
+NUM_NOTES EQU const_value
; channel
; Audio[1|2|3]_HWChannelBaseAddresses, Audio[1|2|3]_HWChannelDisableMasks,
diff --git a/constants/battle_constants.asm b/constants/battle_constants.asm
index 15ba42eb..8db305a5 100644
--- a/constants/battle_constants.asm
+++ b/constants/battle_constants.asm
@@ -1,9 +1,36 @@
MAX_LEVEL EQU 100
-NUM_MOVES EQU 4
-NUM_STATS EQU 5
-NUM_STAT_MODS EQU 8
-NUM_DVS EQU 2
+NUM_MOVES EQU 4
+
+; VitaminStats indexes (see data/battle/stat_names.asm)
+ const_def
+ const STAT_HEALTH
+ const STAT_ATTACK
+ const STAT_DEFENSE
+ const STAT_SPEED
+ const STAT_SPECIAL
+NUM_STATS EQU const_value
+
+; StatModTextStrings indexes (see data/battle/stat_mod_names.asm)
+ const_def
+ const MOD_ATTACK
+ const MOD_DEFENSE
+ const MOD_SPEED
+ const MOD_SPECIAL
+ const MOD_ACCURACY
+ const MOD_EVASION
+ const_skip 2
+NUM_STAT_MODS EQU const_value
+
+; Moves struct fields (see data/moves/moves.asm)
+rsreset
+MOVE_ANIM rb
+MOVE_EFFECT rb
+MOVE_POWER rb
+MOVE_TYPE rb
+MOVE_ACC rb
+MOVE_PP rb
+MOVE_LENGTH EQU _RS
; D733 flags
BIT_TEST_BATTLE EQU 0
diff --git a/constants/credits_constants.asm b/constants/credits_constants.asm
index b04ec0b8..ff2a5179 100644
--- a/constants/credits_constants.asm
+++ b/constants/credits_constants.asm
@@ -86,6 +86,7 @@
const CRED_NAKAMICHI ; 53
const CRED_YOSHIMURA ; 54
const CRED_YAMAZAKI ; 55
+NUM_CRED_STRINGS EQU const_value
const_def -1, -1
const CRED_TEXT_FADE_MON ; $FF
diff --git a/constants/gfx_constants.asm b/constants/gfx_constants.asm
index 483bafa9..099ff2d7 100644
--- a/constants/gfx_constants.asm
+++ b/constants/gfx_constants.asm
@@ -42,3 +42,4 @@ REDRAW_ROW EQU 2
const TILEMAP_GENGAR_INTRO_3
const TILEMAP_GAME_BOY
const TILEMAP_LINK_CABLE
+NUM_TILEMAPS EQU const_value
diff --git a/constants/hide_show_constants.asm b/constants/hide_show_constants.asm
index 08bb2607..91205861 100644
--- a/constants/hide_show_constants.asm
+++ b/constants/hide_show_constants.asm
@@ -245,3 +245,4 @@ SHOW EQU $15
const HS_DAISY_SITTING_COPY ; EC
const HS_DAISY_WALKING_COPY ; ED
const HS_TOWN_MAP_COPY ; EE
+NUM_HS_OBJECTS EQU const_value
diff --git a/constants/item_constants.asm b/constants/item_constants.asm
index 4cbc8534..e7cea725 100644
--- a/constants/item_constants.asm
+++ b/constants/item_constants.asm
@@ -92,6 +92,9 @@ SAFARI_ROCK EQU $16 ; overload
const MAX_ETHER ; $51
const ELIXER ; $52
const MAX_ELIXER ; $53
+NUM_ITEMS EQU const_value - 1
+
+; elevator floors use item IDs
const FLOOR_B2F ; $54
const FLOOR_B1F ; $55
const FLOOR_1F ; $56
@@ -106,6 +109,7 @@ SAFARI_ROCK EQU $16 ; overload
const FLOOR_10F ; $5F
const FLOOR_11F ; $60
const FLOOR_B4F ; $61
+NUM_FLOORS EQU const_value - 1 - NUM_ITEMS
const_next $C4
diff --git a/constants/map_constants.asm b/constants/map_constants.asm
index b495552d..c365cd5b 100644
--- a/constants/map_constants.asm
+++ b/constants/map_constants.asm
@@ -267,6 +267,7 @@ FIRST_INDOOR_MAP EQU const_value
mapconst BRUNOS_ROOM, 6, 5 ; $F6
mapconst AGATHAS_ROOM, 6, 5 ; $F7
mapconst SUMMER_BEACH_HOUSE, 4, 7 ; $F8
+NUM_MAPS EQU const_value
; Indoor maps, such as houses, use this as the Map ID in their exit warps
; This map ID takes the player back to the last outdoor map they were on, stored in wLastMap
diff --git a/constants/menu_constants.asm b/constants/menu_constants.asm
index a53adfdc..eafebe97 100644
--- a/constants/menu_constants.asm
+++ b/constants/menu_constants.asm
@@ -42,6 +42,7 @@ PC_ITEM_CAPACITY EQU 50
const TRADE_CANCEL_MENU ; 5
const HEAL_CANCEL_MENU ; 6
const NO_YES_MENU ; 7
+NUM_TWO_OPTION_MENUS EQU const_value
; menu exit method constants for list menus and the buy/sell/quit menu
CHOSE_MENU_ITEM EQU 1 ; pressed A
diff --git a/constants/move_animation_constants.asm b/constants/move_animation_constants.asm
index f7617544..dc8c94fb 100644
--- a/constants/move_animation_constants.asm
+++ b/constants/move_animation_constants.asm
@@ -132,6 +132,7 @@ FIRST_SE_ID EQU const_value
const SUBANIM_53
const SUBANIM_54
const SUBANIM_55
+NUM_SUBANIMS EQU const_value
; types of subanimations
const_def
@@ -267,6 +268,7 @@ FIRST_SE_ID EQU const_value
const FRAMEBLOCK_77
const FRAMEBLOCK_78
const FRAMEBLOCK_79
+NUM_FRAMEBLOCKS EQU const_value
; base coordinates that are part of subanimations
; FrameBlockBaseCoords indexes (see data/battle_anims/base_coords.asm)
@@ -448,6 +450,7 @@ FIRST_SE_ID EQU const_value
const BASECOORD_AE
const BASECOORD_AF
const BASECOORD_B0
+NUM_BASECOORDS EQU const_value
; frame block modes that are part of subanimations
const_def
diff --git a/constants/move_constants.asm b/constants/move_constants.asm
index ecc28078..52c44210 100644
--- a/constants/move_constants.asm
+++ b/constants/move_constants.asm
@@ -170,10 +170,8 @@
const SUPER_FANG ; a2
const SLASH ; a3
const SUBSTITUTE ; a4
-
-NUM_ATTACKS EQU const_value - 1
-
const STRUGGLE ; a5
+NUM_ATTACKS EQU const_value - 1
; Moves do double duty as animation identifiers.
@@ -214,3 +212,5 @@ NUM_ATTACKS EQU const_value - 1
const HIDEPIC_ANIM ; monster disappears
const ROCK_ANIM ; throw rock
const BAIT_ANIM ; throw bait
+
+NUM_ATTACK_ANIMS EQU const_value - 1
diff --git a/constants/move_effect_constants.asm b/constants/move_effect_constants.asm
index 4c6d0c38..9b895490 100644
--- a/constants/move_effect_constants.asm
+++ b/constants/move_effect_constants.asm
@@ -91,3 +91,4 @@
const LEECH_SEED_EFFECT ; $54
const SPLASH_EFFECT ; $55
const DISABLE_EFFECT ; $56
+NUM_MOVE_EFFECTS EQU const_value - 1
diff --git a/constants/palette_constants.asm b/constants/palette_constants.asm
index 00b5748d..0fb63b74 100644
--- a/constants/palette_constants.asm
+++ b/constants/palette_constants.asm
@@ -75,3 +75,4 @@ SET_PAL_DEFAULT EQU $ff
const PAL_25 ; $25
const PAL_26 ; $26
const PAL_27 ; $27
+NUM_SGB_PALS EQU const_value
diff --git a/constants/pokemon_data_constants.asm b/constants/pokemon_data_constants.asm
index a0e5b257..6670f777 100644
--- a/constants/pokemon_data_constants.asm
+++ b/constants/pokemon_data_constants.asm
@@ -1,3 +1,29 @@
+; base data struct members (see data/pokemon/base_stats/*.asm)
+rsreset
+BASE_DEX_NO rb
+BASE_STATS rb NUM_STATS
+rsset BASE_STATS
+BASE_HP rb
+BASE_ATK rb
+BASE_DEF rb
+BASE_SPD rb
+BASE_SPC rb
+BASE_TYPES rw
+rsset BASE_TYPES
+BASE_TYPE_1 rb
+BASE_TYPE_2 rb
+BASE_CATCH_RATE rb
+BASE_EXP rb
+BASE_PIC_SIZE rb
+BASE_FRONTPIC rw
+BASE_BACKPIC rw
+BASE_MOVES rb NUM_MOVES
+BASE_GROWTH_RATE rb
+BASE_TMHM rb (NUM_TM_HM + 7) / 8
+ rb_skip
+BASE_DATA_SIZE EQU _RS
+
+
PARTY_LENGTH EQU 6
MONS_PER_BOX EQU 20
@@ -39,3 +65,8 @@ EVOLUTION_SIZE EQU 4
const GROWTH_MEDIUM_SLOW
const GROWTH_FAST
const GROWTH_SLOW
+NUM_GROWTH_RATES EQU const_value
+
+; wild data (see data/wild/maps/*.asm)
+NUM_WILDMONS EQU 10
+WILDDATA_LENGTH EQU 1 + NUM_WILDMONS * 2
diff --git a/constants/script_constants.asm b/constants/script_constants.asm
index e7d23e97..3195e7f4 100644
--- a/constants/script_constants.asm
+++ b/constants/script_constants.asm
@@ -35,6 +35,7 @@ SLOTS_SOMEONESKEYS EQU $ff
const TRADE_FOR_DORIS
const TRADE_FOR_CRINKLES
const TRADE_FOR_SPOT
+NUM_NPC_TRADES EQU const_value
; in game trade dialog sets
; InGameTradeTextPointers indexes (see engine/events/in_game_trades.asm)
diff --git a/constants/sprite_constants.asm b/constants/sprite_constants.asm
index 2613f707..2807663e 100644
--- a/constants/sprite_constants.asm
+++ b/constants/sprite_constants.asm
@@ -85,3 +85,4 @@ FIRST_STILL_SPRITE EQU const_value
const SPRITE_UNUSED_GAMBLER_ASLEEP_1 ; $50
const SPRITE_UNUSED_GAMBLER_ASLEEP_2 ; $51
const SPRITE_GAMBLER_ASLEEP ; $52
+NUM_SPRITES EQU const_value - 1
diff --git a/constants/tileset_constants.asm b/constants/tileset_constants.asm
index 3991ac4d..a07f9eb9 100644
--- a/constants/tileset_constants.asm
+++ b/constants/tileset_constants.asm
@@ -26,3 +26,4 @@
const FACILITY ; 22
const PLATEAU ; 23
const BEACH_HOUSE ; 24
+NUM_TILESETS EQU const_value
diff --git a/constants/trainer_constants.asm b/constants/trainer_constants.asm
index 6fdc5d4e..14b662f3 100644
--- a/constants/trainer_constants.asm
+++ b/constants/trainer_constants.asm
@@ -62,3 +62,4 @@ ENDM
trainer_const CHANNELER ; $2D
trainer_const AGATHA ; $2E
trainer_const LANCE ; $2F
+NUM_TRAINERS EQU const_value - 1
diff --git a/constants/type_constants.asm b/constants/type_constants.asm
index 6ae3408d..24817c20 100644
--- a/constants/type_constants.asm
+++ b/constants/type_constants.asm
@@ -22,3 +22,5 @@ SPECIAL EQU const_value
const PSYCHIC_TYPE ; $18
const ICE ; $19
const DRAGON ; $1A
+
+NUM_TYPES EQU const_value
diff --git a/data/battle/stat_mod_names.asm b/data/battle/stat_mod_names.asm
new file mode 100644
index 00000000..287e87e3
--- /dev/null
+++ b/data/battle/stat_mod_names.asm
@@ -0,0 +1,17 @@
+; Stats that move effects can raise or lower
+; The relevant move effect IDs correspond to the stats
+
+StatModTextStrings:
+ list_start StatModTextStrings
+ li "ATTACK"
+ li "DEFENSE"
+ li "SPEED"
+ li "SPECIAL"
+ assert_list_length SPECIAL_DOWN_SIDE_EFFECT - ATTACK_DOWN_SIDE_EFFECT + 1
+ li "ACCURACY"
+ li "EVADE"
+ assert_list_length NUM_STAT_MODS - 2 ; two bytes are unused
+ assert_list_length EVASION_UP1_EFFECT - ATTACK_UP1_EFFECT + 1
+ assert_list_length EVASION_DOWN1_EFFECT - ATTACK_DOWN1_EFFECT + 1
+ assert_list_length EVASION_UP2_EFFECT - ATTACK_UP2_EFFECT + 1
+ assert_list_length EVASION_DOWN2_EFFECT - ATTACK_DOWN2_EFFECT + 1
diff --git a/data/battle/stat_names.asm b/data/battle/stat_names.asm
index 854780c6..413ab991 100644
--- a/data/battle/stat_names.asm
+++ b/data/battle/stat_names.asm
@@ -1,7 +1,10 @@
-StatsTextStrings:
- db "ATTACK@"
- db "DEFENSE@"
- db "SPEED@"
- db "SPECIAL@"
- db "ACCURACY@"
- db "EVADE@"
+; Stats that vitamins can raise or lower
+
+VitaminStats:
+ list_start VitaminStats
+ li "HEALTH"
+ li "ATTACK"
+ li "DEFENSE"
+ li "SPEED"
+ li "SPECIAL"
+ assert_list_length NUM_STATS
diff --git a/data/battle_anims/base_coords.asm b/data/battle_anims/base_coords.asm
index ad67baff..109a06e8 100644
--- a/data/battle_anims/base_coords.asm
+++ b/data/battle_anims/base_coords.asm
@@ -1,4 +1,5 @@
FrameBlockBaseCoords:
+ table_width 2, FrameBlockBaseCoords
db $10, $68 ; BASECOORD_00
db $10, $70 ; BASECOORD_01
db $10, $78 ; BASECOORD_02
@@ -176,3 +177,4 @@ FrameBlockBaseCoords:
db $18, $4C ; BASECOORD_AE
db $1C, $48 ; BASECOORD_AF
db $48, $28 ; BASECOORD_B0
+ assert_table_length NUM_BASECOORDS
diff --git a/data/battle_anims/frame_blocks.asm b/data/battle_anims/frame_blocks.asm
index 8b9b0919..549c1c3c 100644
--- a/data/battle_anims/frame_blocks.asm
+++ b/data/battle_anims/frame_blocks.asm
@@ -1,4 +1,5 @@
FrameBlockPointers:
+ table_width 2, FrameBlockPointers
dw FrameBlock00
dw FrameBlock01
dw FrameBlock02
@@ -121,6 +122,7 @@ FrameBlockPointers:
dw FrameBlock77
dw FrameBlock78
dw FrameBlock79
+ assert_table_length NUM_FRAMEBLOCKS
FrameBlock01:
db 9 ; #
diff --git a/data/battle_anims/subanimations.asm b/data/battle_anims/subanimations.asm
index bbdc45c0..530192f6 100644
--- a/data/battle_anims/subanimations.asm
+++ b/data/battle_anims/subanimations.asm
@@ -1,4 +1,5 @@
SubanimationPointers:
+ table_width 2, SubanimationPointers
dw Subanimation00
dw Subanimation01
dw Subanimation02
@@ -85,6 +86,7 @@ SubanimationPointers:
dw Subanimation53
dw Subanimation54
dw Subanimation55
+ assert_table_length NUM_SUBANIMS
; format:
; subanim type, count
diff --git a/data/credits/credits_mons.asm b/data/credits/credits_mons.asm
index 4dd69409..4e2711be 100644
--- a/data/credits/credits_mons.asm
+++ b/data/credits/credits_mons.asm
@@ -1,4 +1,5 @@
CreditsMons:
+; one entry per CRED_TEXT_MON or CRED_TEXT_FADE_MON in CreditsOrder
db VENUSAUR
db ARBOK
db RHYHORN
diff --git a/data/credits/credits_text.asm b/data/credits/credits_text.asm
index 766690df..0dcc1d5a 100644
--- a/data/credits/credits_text.asm
+++ b/data/credits/credits_text.asm
@@ -1,5 +1,6 @@
CreditsTextPointers:
; entries correspond to CRED_* constants
+ table_width 2, CreditsTextPointers
dw CreditsText_Version
dw CreditsText_Tajiri
dw CreditsText_Oota
@@ -86,6 +87,7 @@ CreditsTextPointers:
dw CreditsText_Nakamichi
dw CreditsText_Yoshimura
dw CreditsText_Yamazaki
+ assert_table_length NUM_CRED_STRINGS
CreditsText_Version:
db -6, "YELLOW VERSION"
diff --git a/data/events/trades.asm b/data/events/trades.asm
index 44f7ec21..d7afa5ff 100644
--- a/data/events/trades.asm
+++ b/data/events/trades.asm
@@ -1,5 +1,6 @@
TradeMons:
; entries correspond to TRADE_FOR_* constants
+ table_width 3 + NAME_LENGTH, TradeMons
; give mon, get mon, dialog id, nickname
db LICKITUNG, DUGTRIO, TRADE_DIALOGSET_CASUAL, "GURIO@@@@@@"
db CLEFAIRY, MR_MIME, TRADE_DIALOGSET_CASUAL, "MILES@@@@@@"
@@ -11,3 +12,4 @@ TradeMons:
db GOLDUCK, RHYDON, TRADE_DIALOGSET_POLITE, "BUFFY@@@@@@"
db GROWLITHE, DEWGONG, TRADE_DIALOGSET_HAPPY, "CEZANNE@@@@"
db CUBONE, MACHOKE, TRADE_DIALOGSET_HAPPY, "RICKY@@@@@@"
+ assert_table_length NUM_NPC_TRADES
diff --git a/data/growth_rates.asm b/data/growth_rates.asm
index e2cb8c90..cc0955e4 100644
--- a/data/growth_rates.asm
+++ b/data/growth_rates.asm
@@ -11,9 +11,11 @@ ENDM
GrowthRateTable:
; entries correspond to GROWTH_* (see constants/pokemon_data_constants.asm)
+ table_width 4, GrowthRateTable
growth_rate 1, 1, 0, 0, 0 ; Medium Fast
growth_rate 3, 4, 10, 0, 30 ; Slightly Fast
growth_rate 3, 4, 20, 0, 70 ; Slightly Slow
growth_rate 6, 5, -15, 100, 140 ; Medium Slow
growth_rate 4, 5, 0, 0, 0 ; Fast
growth_rate 5, 4, 0, 0, 0 ; Slow
+ assert_table_length NUM_GROWTH_RATES
diff --git a/data/items/key_items.asm b/data/items/key_items.asm
index aca8cf81..13a69ea4 100644
--- a/data/items/key_items.asm
+++ b/data/items/key_items.asm
@@ -17,6 +17,7 @@ ENDC
ENDM
KeyItemBitfield:
+ table_width 1, KeyItemBitfield
key_item_bits \
FALSE, \ ; MASTER_BALL
FALSE, \ ; ULTRA_BALL
@@ -101,3 +102,4 @@ KeyItemBitfield:
FALSE, \ ; MAX_ETHER
FALSE, \ ; ELIXER
FALSE ; MAX_ELIXER
+ assert_table_length (NUM_ITEMS + 7) / 8
diff --git a/data/items/names.asm b/data/items/names.asm
index 0c07fe5d..af51446b 100644
--- a/data/items/names.asm
+++ b/data/items/names.asm
@@ -1,98 +1,101 @@
ItemNames::
- db "MASTER BALL@"
- db "ULTRA BALL@"
- db "GREAT BALL@"
- db "POKé BALL@"
- db "TOWN MAP@"
- db "BICYCLE@"
- db "?????@"
- db "SAFARI BALL@"
- db "POKéDEX@"
- db "MOON STONE@"
- db "ANTIDOTE@"
- db "BURN HEAL@"
- db "ICE HEAL@"
- db "AWAKENING@"
- db "PARLYZ HEAL@"
- db "FULL RESTORE@"
- db "MAX POTION@"
- db "HYPER POTION@"
- db "SUPER POTION@"
- db "POTION@"
- db "BOULDERBADGE@"
- db "CASCADEBADGE@"
- db "THUNDERBADGE@"
- db "RAINBOWBADGE@"
- db "SOULBADGE@"
- db "MARSHBADGE@"
- db "VOLCANOBADGE@"
- db "EARTHBADGE@"
- db "ESCAPE ROPE@"
- db "REPEL@"
- db "OLD AMBER@"
- db "FIRE STONE@"
- db "THUNDERSTONE@"
- db "WATER STONE@"
- db "HP UP@"
- db "PROTEIN@"
- db "IRON@"
- db "CARBOS@"
- db "CALCIUM@"
- db "RARE CANDY@"
- db "DOME FOSSIL@"
- db "HELIX FOSSIL@"
- db "SECRET KEY@"
- db "?????@"
- db "BIKE VOUCHER@"
- db "X ACCURACY@"
- db "LEAF STONE@"
- db "CARD KEY@"
- db "NUGGET@"
- db "PP UP@"
- db "POKé DOLL@"
- db "FULL HEAL@"
- db "REVIVE@"
- db "MAX REVIVE@"
- db "GUARD SPEC.@"
- db "SUPER REPEL@"
- db "MAX REPEL@"
- db "DIRE HIT@"
- db "COIN@"
- db "FRESH WATER@"
- db "SODA POP@"
- db "LEMONADE@"
- db "S.S.TICKET@"
- db "GOLD TEETH@"
- db "X ATTACK@"
- db "X DEFEND@"
- db "X SPEED@"
- db "X SPECIAL@"
- db "COIN CASE@"
- db "OAK's PARCEL@"
- db "ITEMFINDER@"
- db "SILPH SCOPE@"
- db "POKé FLUTE@"
- db "LIFT KEY@"
- db "EXP.ALL@"
- db "OLD ROD@"
- db "GOOD ROD@"
- db "SUPER ROD@"
- db "PP UP@"
- db "ETHER@"
- db "MAX ETHER@"
- db "ELIXER@"
- db "MAX ELIXER@"
- db "B2F@"
- db "B1F@"
- db "1F@"
- db "2F@"
- db "3F@"
- db "4F@"
- db "5F@"
- db "6F@"
- db "7F@"
- db "8F@"
- db "9F@"
- db "10F@"
- db "11F@"
- db "B4F@"
+ list_start ItemNames
+ li "MASTER BALL"
+ li "ULTRA BALL"
+ li "GREAT BALL"
+ li "POKé BALL"
+ li "TOWN MAP"
+ li "BICYCLE"
+ li "?????"
+ li "SAFARI BALL"
+ li "POKéDEX"
+ li "MOON STONE"
+ li "ANTIDOTE"
+ li "BURN HEAL"
+ li "ICE HEAL"
+ li "AWAKENING"
+ li "PARLYZ HEAL"
+ li "FULL RESTORE"
+ li "MAX POTION"
+ li "HYPER POTION"
+ li "SUPER POTION"
+ li "POTION"
+ li "BOULDERBADGE"
+ li "CASCADEBADGE"
+ li "THUNDERBADGE"
+ li "RAINBOWBADGE"
+ li "SOULBADGE"
+ li "MARSHBADGE"
+ li "VOLCANOBADGE"
+ li "EARTHBADGE"
+ li "ESCAPE ROPE"
+ li "REPEL"
+ li "OLD AMBER"
+ li "FIRE STONE"
+ li "THUNDERSTONE"
+ li "WATER STONE"
+ li "HP UP"
+ li "PROTEIN"
+ li "IRON"
+ li "CARBOS"
+ li "CALCIUM"
+ li "RARE CANDY"
+ li "DOME FOSSIL"
+ li "HELIX FOSSIL"
+ li "SECRET KEY"
+ li "?????"
+ li "BIKE VOUCHER"
+ li "X ACCURACY"
+ li "LEAF STONE"
+ li "CARD KEY"
+ li "NUGGET"
+ li "PP UP"
+ li "POKé DOLL"
+ li "FULL HEAL"
+ li "REVIVE"
+ li "MAX REVIVE"
+ li "GUARD SPEC."
+ li "SUPER REPEL"
+ li "MAX REPEL"
+ li "DIRE HIT"
+ li "COIN"
+ li "FRESH WATER"
+ li "SODA POP"
+ li "LEMONADE"
+ li "S.S.TICKET"
+ li "GOLD TEETH"
+ li "X ATTACK"
+ li "X DEFEND"
+ li "X SPEED"
+ li "X SPECIAL"
+ li "COIN CASE"
+ li "OAK's PARCEL"
+ li "ITEMFINDER"
+ li "SILPH SCOPE"
+ li "POKé FLUTE"
+ li "LIFT KEY"
+ li "EXP.ALL"
+ li "OLD ROD"
+ li "GOOD ROD"
+ li "SUPER ROD"
+ li "PP UP"
+ li "ETHER"
+ li "MAX ETHER"
+ li "ELIXER"
+ li "MAX ELIXER"
+ assert_list_length NUM_ITEMS
+ li "B2F"
+ li "B1F"
+ li "1F"
+ li "2F"
+ li "3F"
+ li "4F"
+ li "5F"
+ li "6F"
+ li "7F"
+ li "8F"
+ li "9F"
+ li "10F"
+ li "11F"
+ li "B4F"
+ assert_list_length NUM_ITEMS + NUM_FLOORS
diff --git a/data/items/prices.asm b/data/items/prices.asm
index f3d8f76b..3740df8a 100644
--- a/data/items/prices.asm
+++ b/data/items/prices.asm
@@ -1,4 +1,5 @@
ItemPrices::
+ table_width 3, ItemPrices
money 0 ; MASTER_BALL
money 1200 ; ULTRA_BALL
money 600 ; GREAT_BALL
@@ -82,6 +83,7 @@ ItemPrices::
money 0 ; MAX_ETHER
money 0 ; ELIXER
money 0 ; MAX_ELIXER
+ assert_table_length NUM_ITEMS
money 0 ; FLOOR_B2F
money 0 ; FLOOR_B1F
money 0 ; FLOOR_1F
@@ -96,3 +98,4 @@ ItemPrices::
money 0 ; FLOOR_10F
money 0 ; FLOOR_11F
money 0 ; FLOOR_B4F
+ assert_table_length NUM_ITEMS + NUM_FLOORS
diff --git a/data/items/tm_prices.asm b/data/items/tm_prices.asm
index 7f007e9d..22bcb074 100644
--- a/data/items/tm_prices.asm
+++ b/data/items/tm_prices.asm
@@ -1,5 +1,6 @@
TechnicalMachinePrices:
; In thousands (nybbles).
+ table_width 1, TechnicalMachinePrices
dn 3, 2 ; TM01, TM02
dn 2, 1 ; TM03, TM04
dn 3, 4 ; TM05, TM06
@@ -25,3 +26,4 @@ TechnicalMachinePrices:
dn 2, 4 ; TM45, TM46
dn 3, 4 ; TM47, TM48
dn 4, 2 ; TM49, TM50
+ assert_table_length (NUM_TMS + 1) / 2
diff --git a/data/maps/hide_show_data.asm b/data/maps/hide_show_data.asm
index 39e8cab4..810da263 100644
--- a/data/maps/hide_show_data.asm
+++ b/data/maps/hide_show_data.asm
@@ -2,6 +2,7 @@
MapHSPointers:
; entries correspond to map ids
+ table_width 2, MapHSPointers
dw PalletTownHS
dw ViridianCityHS
dw PewterCityHS
@@ -251,6 +252,7 @@ MapHSPointers:
dw NoHS
dw NoHS
dw NoHS ; beach house
+ assert_table_length NUM_MAPS
dw -1 ; end
NoHS:
@@ -258,6 +260,7 @@ NoHS:
MissableObjects:
; entries correspond to HS_* constants (see constants/hide_show_constants)
+ table_width 3, MissableObjects
; format: map id, object id, HIDE/SHOW
PalletTownHS:
@@ -576,3 +579,4 @@ BluesHouseHSCopy: ; unreferenced
db BLUES_HOUSE, $02, HIDE
db BLUES_HOUSE, $03, SHOW
db $FF, $01, SHOW ; end
+ assert_table_length NUM_HS_OBJECTS + 1
diff --git a/data/maps/map_header_banks.asm b/data/maps/map_header_banks.asm
index f9a107e3..454e3260 100644
--- a/data/maps/map_header_banks.asm
+++ b/data/maps/map_header_banks.asm
@@ -1,5 +1,6 @@
; see also MapHeaderPointers
MapHeaderBanks::
+ table_width 1, MapHeaderBanks
db BANK(PalletTown_h)
db BANK(ViridianCity_h)
db BANK(PewterCity_h)
@@ -249,3 +250,4 @@ MapHeaderBanks::
db BANK(BrunosRoom_h)
db BANK(AgathasRoom_h)
db BANK(SummerBeachHouse_h)
+ assert_table_length NUM_MAPS
diff --git a/data/maps/map_header_pointers.asm b/data/maps/map_header_pointers.asm
index cf02e5cc..0f37b129 100644
--- a/data/maps/map_header_pointers.asm
+++ b/data/maps/map_header_pointers.asm
@@ -1,5 +1,6 @@
; see also MapHeaderBanks
MapHeaderPointers::
+ table_width 2, MapHeaderPointers
dw PalletTown_h
dw ViridianCity_h
dw PewterCity_h
@@ -247,5 +248,6 @@ MapHeaderPointers::
dw SilphCo2F_h ; UNUSED_MAP_F4
dw LoreleisRoom_h
dw BrunosRoom_h
- dw AgathasRoom_h ;247
+ dw AgathasRoom_h
dw SummerBeachHouse_h
+ assert_table_length NUM_MAPS
diff --git a/data/maps/names.asm b/data/maps/names.asm
index 6bdb66d5..805c57c9 100644
--- a/data/maps/names.asm
+++ b/data/maps/names.asm
@@ -1,4 +1,3 @@
-MapNames:
PalletTownName: db "PALLET TOWN@"
ViridianCityName: db "VIRIDIAN CITY@"
PewterCityName: db "PEWTER CITY@"
diff --git a/data/maps/songs.asm b/data/maps/songs.asm
index 4305fc2f..7378804e 100644
--- a/data/maps/songs.asm
+++ b/data/maps/songs.asm
@@ -1,4 +1,5 @@
MapSongBanks::
+ table_width 2, MapSongBanks
db MUSIC_PALLET_TOWN, BANK(Music_PalletTown) ; PALLET_TOWN
db MUSIC_CITIES1, BANK(Music_Cities1) ; VIRIDIAN_CITY
db MUSIC_CITIES1, BANK(Music_Cities1) ; PEWTER_CITY
@@ -248,3 +249,4 @@ MapSongBanks::
db MUSIC_DUNGEON1, BANK(Music_Dungeon1) ; BRUNOS_ROOM
db MUSIC_POKEMON_TOWER, BANK(Music_PokemonTower) ; AGATHAS_ROOM
db MUSIC_ROUTES3, BANK(Music_Routes3) ; SUMMER_BEACH_HOUSE
+ assert_table_length NUM_MAPS
diff --git a/data/maps/sprite_sets.asm b/data/maps/sprite_sets.asm
index cce86d1a..b42e9245 100644
--- a/data/maps/sprite_sets.asm
+++ b/data/maps/sprite_sets.asm
@@ -1,4 +1,5 @@
MapSpriteSets:
+ table_width 1, MapSpriteSets
db $01 ; PALLET_TOWN
db $01 ; VIRIDIAN_CITY
db $02 ; PEWTER_CITY
@@ -36,6 +37,7 @@ MapSpriteSets:
db $06 ; ROUTE_23
db $02 ; ROUTE_24
db $02 ; ROUTE_25
+ assert_table_length FIRST_INDOOR_MAP
EAST_WEST EQU 1
NORTH_SOUTH EQU 2
@@ -60,7 +62,12 @@ SplitMapSpriteSets:
db EAST_WEST, 3, $07, $03 ; $fc
SpriteSets:
+
+; each sprite set has 9 walking sprites and 2 still sprites
+SPRITE_SET_LENGTH EQU 9 + 2
+
; sprite set $01
+ table_width 1
db SPRITE_PIKACHU
db SPRITE_BLUE
db SPRITE_YOUNGSTER
@@ -72,8 +79,10 @@ SpriteSets:
db SPRITE_SWIMMER
db SPRITE_POKE_BALL
db SPRITE_GAMBLER_ASLEEP
+ assert_table_length SPRITE_SET_LENGTH
; sprite set $02
+ table_width 1
db SPRITE_PIKACHU
db SPRITE_YOUNGSTER
db SPRITE_ROCKET
@@ -85,8 +94,10 @@ SpriteSets:
db SPRITE_COOLTRAINER_M
db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2
+ assert_table_length SPRITE_SET_LENGTH
; sprite set $03
+ table_width 1
db SPRITE_PIKACHU
db SPRITE_LITTLE_GIRL
db SPRITE_GIRL
@@ -98,8 +109,10 @@ SpriteSets:
db SPRITE_COOLTRAINER_M
db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2
+ assert_table_length SPRITE_SET_LENGTH
; sprite set $04
+ table_width 1
db SPRITE_PIKACHU
db SPRITE_OFFICER_JENNY
db SPRITE_SUPER_NERD
@@ -111,8 +124,10 @@ SpriteSets:
db SPRITE_COOLTRAINER_M
db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2
+ assert_table_length SPRITE_SET_LENGTH
; sprite set $05
+ table_width 1
db SPRITE_PIKACHU
db SPRITE_LITTLE_GIRL
db SPRITE_LITTLE_BOY
@@ -124,8 +139,10 @@ SpriteSets:
db SPRITE_ROCKET
db SPRITE_POKE_BALL
db SPRITE_SNORLAX
+ assert_table_length SPRITE_SET_LENGTH
; sprite set $06
+ table_width 1
db SPRITE_PIKACHU
db SPRITE_GYM_GUIDE
db SPRITE_MONSTER
@@ -137,8 +154,10 @@ SpriteSets:
db SPRITE_GAMBLER
db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2
+ assert_table_length SPRITE_SET_LENGTH
; sprite set $07
+ table_width 1
db SPRITE_PIKACHU
db SPRITE_ROCKET
db SPRITE_SCIENTIST
@@ -150,8 +169,10 @@ SpriteSets:
db SPRITE_COOLTRAINER_M
db SPRITE_POKE_BALL
db SPRITE_UNUSED_GAMBLER_ASLEEP_2
+ assert_table_length SPRITE_SET_LENGTH
; sprite set $08
+ table_width 1
db SPRITE_PIKACHU
db SPRITE_BIKER
db SPRITE_SUPER_NERD
@@ -163,8 +184,10 @@ SpriteSets:
db SPRITE_ROCKER
db SPRITE_POKE_BALL
db SPRITE_SNORLAX
+ assert_table_length SPRITE_SET_LENGTH
; sprite set $09
+ table_width 1
db SPRITE_PIKACHU
db SPRITE_BIKER
db SPRITE_COOLTRAINER_M
@@ -176,8 +199,10 @@ SpriteSets:
db SPRITE_MIDDLE_AGED_MAN
db SPRITE_POKE_BALL
db SPRITE_SNORLAX
+ assert_table_length SPRITE_SET_LENGTH
; sprite set $0a
+ table_width 1
db SPRITE_PIKACHU
db SPRITE_COOLTRAINER_M
db SPRITE_CHANSEY
@@ -189,3 +214,4 @@ SpriteSets:
db SPRITE_YOUNGSTER
db SPRITE_POKE_BALL
db SPRITE_FOSSIL
+ assert_table_length SPRITE_SET_LENGTH
diff --git a/data/maps/town_map_entries.asm b/data/maps/town_map_entries.asm
index 8ad4bc28..954a3ee9 100644
--- a/data/maps/town_map_entries.asm
+++ b/data/maps/town_map_entries.asm
@@ -5,6 +5,7 @@ ENDM
; the appearance of towns and routes in the town map
ExternalMapEntries:
+ table_width 3, ExternalMapEntries
; x, y, name
external_map 2, 11, PalletTownName
external_map 2, 8, ViridianCityName
@@ -43,6 +44,7 @@ ExternalMapEntries:
external_map 0, 6, Route23Name
external_map 10, 1, Route24Name
external_map 11, 0, Route25Name
+ assert_table_length FIRST_INDOOR_MAP
internal_map: MACRO
diff --git a/data/moves/animations.asm b/data/moves/animations.asm
index 34191472..15f1ad52 100644
--- a/data/moves/animations.asm
+++ b/data/moves/animations.asm
@@ -1,4 +1,5 @@
AttackAnimationPointers:
+ table_width 2, AttackAnimationPointers
dw PoundAnim
dw KarateChopAnim
dw DoubleSlapAnim
@@ -164,6 +165,7 @@ AttackAnimationPointers:
dw SlashAnim
dw SubstituteAnim
dw StruggleAnim
+ assert_table_length NUM_ATTACKS
dw ShowPicAnim
dw EnemyFlashAnim
dw PlayerFlashAnim
@@ -201,6 +203,7 @@ AttackAnimationPointers:
dw HidePicAnim
dw ThrowRockAnim
dw ThrowBaitAnim
+ assert_table_length NUM_ATTACK_ANIMS
; each animation is a list of subanimations
; and/or special effects, terminated by -1
diff --git a/data/moves/effects_pointers.asm b/data/moves/effects_pointers.asm
index a5e3d852..c33a5fd6 100644
--- a/data/moves/effects_pointers.asm
+++ b/data/moves/effects_pointers.asm
@@ -1,5 +1,6 @@
MoveEffectPointerTable:
; entries correspond to *_EFFECT constants
+ table_width 2, MoveEffectPointerTable
dw SleepEffect ; EFFECT_01
dw PoisonEffect ; POISON_SIDE_EFFECT1
dw DrainHPEffect ; DRAIN_HP_EFFECT
@@ -86,3 +87,4 @@ MoveEffectPointerTable:
dw LeechSeedEffect ; LEECH_SEED_EFFECT
dw SplashEffect ; SPLASH_EFFECT
dw DisableEffect ; DISABLE_EFFECT
+ assert_table_length NUM_MOVE_EFFECTS
diff --git a/data/moves/field_move_names.asm b/data/moves/field_move_names.asm
index b68ed828..f8966733 100644
--- a/data/moves/field_move_names.asm
+++ b/data/moves/field_move_names.asm
@@ -1,3 +1,4 @@
+; see also FieldMoveDisplayData
FieldMoveNames:
db "CUT@"
db "FLY@"
diff --git a/data/moves/moves.asm b/data/moves/moves.asm
index 85b6dcfc..0e52e01c 100644
--- a/data/moves/moves.asm
+++ b/data/moves/moves.asm
@@ -1,6 +1,3 @@
-Moves:
-; Characteristics of each move.
-
move: MACRO
db \1 ; animation (interchangeable with move id)
db \2 ; effect
@@ -10,8 +7,10 @@ move: MACRO
db \6 ; pp
ENDM
+Moves:
+; Characteristics of each move.
+ table_width MOVE_LENGTH, Moves
move POUND, NO_ADDITIONAL_EFFECT, 40, NORMAL, 100, 35
-MoveEnd:
move KARATE_CHOP, NO_ADDITIONAL_EFFECT, 50, NORMAL, 100, 25
move DOUBLESLAP, TWO_TO_FIVE_ATTACKS_EFFECT, 15, NORMAL, 85, 10
move COMET_PUNCH, TWO_TO_FIVE_ATTACKS_EFFECT, 18, NORMAL, 85, 15
@@ -176,3 +175,4 @@ MoveEnd:
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
+ assert_table_length NUM_ATTACKS
diff --git a/data/moves/names.asm b/data/moves/names.asm
index cbb1a322..e9591619 100644
--- a/data/moves/names.asm
+++ b/data/moves/names.asm
@@ -1,166 +1,168 @@
MoveNames::
- db "POUND@"
- db "KARATE CHOP@"
- db "DOUBLESLAP@"
- db "COMET PUNCH@"
- db "MEGA PUNCH@"
- db "PAY DAY@"
- db "FIRE PUNCH@"
- db "ICE PUNCH@"
- db "THUNDERPUNCH@"
- db "SCRATCH@"
- db "VICEGRIP@"
- db "GUILLOTINE@"
- db "RAZOR WIND@"
- db "SWORDS DANCE@"
- db "CUT@"
- db "GUST@"
- db "WING ATTACK@"
- db "WHIRLWIND@"
- db "FLY@"
- db "BIND@"
- db "SLAM@"
- db "VINE WHIP@"
- db "STOMP@"
- db "DOUBLE KICK@"
- db "MEGA KICK@"
- db "JUMP KICK@"
- db "ROLLING KICK@"
- db "SAND-ATTACK@"
- db "HEADBUTT@"
- db "HORN ATTACK@"
- db "FURY ATTACK@"
- db "HORN DRILL@"
- db "TACKLE@"
- db "BODY SLAM@"
- db "WRAP@"
- db "TAKE DOWN@"
- db "THRASH@"
- db "DOUBLE-EDGE@"
- db "TAIL WHIP@"
- db "POISON STING@"
- db "TWINEEDLE@"
- db "PIN MISSILE@"
- db "LEER@"
- db "BITE@"
- db "GROWL@"
- db "ROAR@"
- db "SING@"
- db "SUPERSONIC@"
- db "SONICBOOM@"
- db "DISABLE@"
- db "ACID@"
- db "EMBER@"
- db "FLAMETHROWER@"
- db "MIST@"
- db "WATER GUN@"
- db "HYDRO PUMP@"
- db "SURF@"
- db "ICE BEAM@"
- db "BLIZZARD@"
- db "PSYBEAM@"
- db "BUBBLEBEAM@"
- db "AURORA BEAM@"
- db "HYPER BEAM@"
- db "PECK@"
- db "DRILL PECK@"
- db "SUBMISSION@"
- db "LOW KICK@"
- db "COUNTER@"
- db "SEISMIC TOSS@"
- db "STRENGTH@"
- db "ABSORB@"
- db "MEGA DRAIN@"
- db "LEECH SEED@"
- db "GROWTH@"
- db "RAZOR LEAF@"
- db "SOLARBEAM@"
- db "POISONPOWDER@"
- db "STUN SPORE@"
- db "SLEEP POWDER@"
- db "PETAL DANCE@"
- db "STRING SHOT@"
- db "DRAGON RAGE@"
- db "FIRE SPIN@"
- db "THUNDERSHOCK@"
- db "THUNDERBOLT@"
- db "THUNDER WAVE@"
- db "THUNDER@"
- db "ROCK THROW@"
- db "EARTHQUAKE@"
- db "FISSURE@"
- db "DIG@"
- db "TOXIC@"
- db "CONFUSION@"
- db "PSYCHIC@"
- db "HYPNOSIS@"
- db "MEDITATE@"
- db "AGILITY@"
- db "QUICK ATTACK@"
- db "RAGE@"
- db "TELEPORT@"
- db "NIGHT SHADE@"
- db "MIMIC@"
- db "SCREECH@"
- db "DOUBLE TEAM@"
- db "RECOVER@"
- db "HARDEN@"
- db "MINIMIZE@"
- db "SMOKESCREEN@"
- db "CONFUSE RAY@"
- db "WITHDRAW@"
- db "DEFENSE CURL@"
- db "BARRIER@"
- db "LIGHT SCREEN@"
- db "HAZE@"
- db "REFLECT@"
- db "FOCUS ENERGY@"
- db "BIDE@"
- db "METRONOME@"
- db "MIRROR MOVE@"
- db "SELFDESTRUCT@"
- db "EGG BOMB@"
- db "LICK@"
- db "SMOG@"
- db "SLUDGE@"
- db "BONE CLUB@"
- db "FIRE BLAST@"
- db "WATERFALL@"
- db "CLAMP@"
- db "SWIFT@"
- db "SKULL BASH@"
- db "SPIKE CANNON@"
- db "CONSTRICT@"
- db "AMNESIA@"
- db "KINESIS@"
- db "SOFTBOILED@"
- db "HI JUMP KICK@"
- db "GLARE@"
- db "DREAM EATER@"
- db "POISON GAS@"
- db "BARRAGE@"
- db "LEECH LIFE@"
- db "LOVELY KISS@"
- db "SKY ATTACK@"
- db "TRANSFORM@"
- db "BUBBLE@"
- db "DIZZY PUNCH@"
- db "SPORE@"
- db "FLASH@"
- db "PSYWAVE@"
- db "SPLASH@"
- db "ACID ARMOR@"
- db "CRABHAMMER@"
- db "EXPLOSION@"
- db "FURY SWIPES@"
- db "BONEMERANG@"
- db "REST@"
- db "ROCK SLIDE@"
- db "HYPER FANG@"
- db "SHARPEN@"
- db "CONVERSION@"
- db "TRI ATTACK@"
- db "SUPER FANG@"
- db "SLASH@"
- db "SUBSTITUTE@"
- db "STRUGGLE@"
+ list_start MoveNames
+ li "POUND"
+ li "KARATE CHOP"
+ li "DOUBLESLAP"
+ li "COMET PUNCH"
+ li "MEGA PUNCH"
+ li "PAY DAY"
+ li "FIRE PUNCH"
+ li "ICE PUNCH"
+ li "THUNDERPUNCH"
+ li "SCRATCH"
+ li "VICEGRIP"
+ li "GUILLOTINE"
+ li "RAZOR WIND"
+ li "SWORDS DANCE"
+ li "CUT"
+ li "GUST"
+ li "WING ATTACK"
+ li "WHIRLWIND"
+ li "FLY"
+ li "BIND"
+ li "SLAM"
+ li "VINE WHIP"
+ li "STOMP"
+ li "DOUBLE KICK"
+ li "MEGA KICK"
+ li "JUMP KICK"
+ li "ROLLING KICK"
+ li "SAND-ATTACK"
+ li "HEADBUTT"
+ li "HORN ATTACK"
+ li "FURY ATTACK"
+ li "HORN DRILL"
+ li "TACKLE"
+ li "BODY SLAM"
+ li "WRAP"
+ li "TAKE DOWN"
+ li "THRASH"
+ li "DOUBLE-EDGE"
+ li "TAIL WHIP"
+ li "POISON STING"
+ li "TWINEEDLE"
+ li "PIN MISSILE"
+ li "LEER"
+ li "BITE"
+ li "GROWL"
+ li "ROAR"
+ li "SING"
+ li "SUPERSONIC"
+ li "SONICBOOM"
+ li "DISABLE"
+ li "ACID"
+ li "EMBER"
+ li "FLAMETHROWER"
+ li "MIST"
+ li "WATER GUN"
+ li "HYDRO PUMP"
+ li "SURF"
+ li "ICE BEAM"
+ li "BLIZZARD"
+ li "PSYBEAM"
+ li "BUBBLEBEAM"
+ li "AURORA BEAM"
+ li "HYPER BEAM"
+ li "PECK"
+ li "DRILL PECK"
+ li "SUBMISSION"
+ li "LOW KICK"
+ li "COUNTER"
+ li "SEISMIC TOSS"
+ li "STRENGTH"
+ li "ABSORB"
+ li "MEGA DRAIN"
+ li "LEECH SEED"
+ li "GROWTH"
+ li "RAZOR LEAF"
+ li "SOLARBEAM"
+ li "POISONPOWDER"
+ li "STUN SPORE"
+ li "SLEEP POWDER"
+ li "PETAL DANCE"
+ li "STRING SHOT"
+ li "DRAGON RAGE"
+ li "FIRE SPIN"
+ li "THUNDERSHOCK"
+ li "THUNDERBOLT"
+ li "THUNDER WAVE"
+ li "THUNDER"
+ li "ROCK THROW"
+ li "EARTHQUAKE"
+ li "FISSURE"
+ li "DIG"
+ li "TOXIC"
+ li "CONFUSION"
+ li "PSYCHIC"
+ li "HYPNOSIS"
+ li "MEDITATE"
+ li "AGILITY"
+ li "QUICK ATTACK"
+ li "RAGE"
+ li "TELEPORT"
+ li "NIGHT SHADE"
+ li "MIMIC"
+ li "SCREECH"
+ li "DOUBLE TEAM"
+ li "RECOVER"
+ li "HARDEN"
+ li "MINIMIZE"
+ li "SMOKESCREEN"
+ li "CONFUSE RAY"
+ li "WITHDRAW"
+ li "DEFENSE CURL"
+ li "BARRIER"
+ li "LIGHT SCREEN"
+ li "HAZE"
+ li "REFLECT"
+ li "FOCUS ENERGY"
+ li "BIDE"
+ li "METRONOME"
+ li "MIRROR MOVE"
+ li "SELFDESTRUCT"
+ li "EGG BOMB"
+ li "LICK"
+ li "SMOG"
+ li "SLUDGE"
+ li "BONE CLUB"
+ li "FIRE BLAST"
+ li "WATERFALL"
+ li "CLAMP"
+ li "SWIFT"
+ li "SKULL BASH"
+ li "SPIKE CANNON"
+ li "CONSTRICT"
+ li "AMNESIA"
+ li "KINESIS"
+ li "SOFTBOILED"
+ li "HI JUMP KICK"
+ li "GLARE"
+ li "DREAM EATER"
+ li "POISON GAS"
+ li "BARRAGE"
+ li "LEECH LIFE"
+ li "LOVELY KISS"
+ li "SKY ATTACK"
+ li "TRANSFORM"
+ li "BUBBLE"
+ li "DIZZY PUNCH"
+ li "SPORE"
+ li "FLASH"
+ li "PSYWAVE"
+ li "SPLASH"
+ li "ACID ARMOR"
+ li "CRABHAMMER"
+ li "EXPLOSION"
+ li "FURY SWIPES"
+ li "BONEMERANG"
+ li "REST"
+ li "ROCK SLIDE"
+ li "HYPER FANG"
+ li "SHARPEN"
+ li "CONVERSION"
+ li "TRI ATTACK"
+ li "SUPER FANG"
+ li "SLASH"
+ li "SUBSTITUTE"
+ li "STRUGGLE"
+ assert_list_length NUM_ATTACKS
diff --git a/data/moves/sfx.asm b/data/moves/sfx.asm
index c1f12084..c3f01f4e 100644
--- a/data/moves/sfx.asm
+++ b/data/moves/sfx.asm
@@ -1,4 +1,5 @@
MoveSoundTable:
+ table_width 3, MoveSoundTable
; ID, pitch mod, tempo mod
db SFX_POUND, $00, $80 ; POUND
db SFX_BATTLE_0C, $10, $80 ; KARATE_CHOP
@@ -165,4 +166,5 @@ MoveSoundTable:
db SFX_NOT_VERY_EFFECTIVE, $01, $ff ; SLASH
db SFX_BATTLE_2C, $d8, $04 ; SUBSTITUTE
db SFX_BATTLE_0B, $00, $80 ; STRUGGLE
+ assert_table_length NUM_ATTACKS
db SFX_BATTLE_0B, $00, $80
diff --git a/data/moves/tmhm_moves.asm b/data/moves/tmhm_moves.asm
index a313af28..850b24b4 100644
--- a/data/moves/tmhm_moves.asm
+++ b/data/moves/tmhm_moves.asm
@@ -2,6 +2,7 @@
; define constants for the item IDs and for the corresponding move values.
TechnicalMachines:
+ table_width 1, TechnicalMachines
n = 1
REPT NUM_TMS
@@ -14,6 +15,7 @@ ENDC
PURGE MOVE_FOR_TM
n = n + 1
ENDR
+ assert_table_length NUM_TMS
n = 1
REPT NUM_HMS
@@ -26,5 +28,6 @@ ENDC
PURGE MOVE_FOR_HM
n = n + 1
ENDR
+ assert_table_length NUM_TM_HM
db -1 ; end
diff --git a/data/pokemon/base_stats.asm b/data/pokemon/base_stats.asm
index 620576a6..7b478ef8 100644
--- a/data/pokemon/base_stats.asm
+++ b/data/pokemon/base_stats.asm
@@ -1,7 +1,6 @@
BaseStats::
-MonBaseStats::
+ table_width BASE_DATA_SIZE, BaseStats
INCLUDE "data/pokemon/base_stats/bulbasaur.asm"
-MonBaseStatsEnd::
INCLUDE "data/pokemon/base_stats/ivysaur.asm"
INCLUDE "data/pokemon/base_stats/venusaur.asm"
INCLUDE "data/pokemon/base_stats/charmander.asm"
@@ -152,5 +151,4 @@ INCLUDE "data/pokemon/base_stats/dragonair.asm"
INCLUDE "data/pokemon/base_stats/dragonite.asm"
INCLUDE "data/pokemon/base_stats/mewtwo.asm"
INCLUDE "data/pokemon/base_stats/mew.asm"
-BaseStatsEnd::
- assert BaseStatsEnd - BaseStats == (wMonHeaderEnd - wMonHeader) * (NUM_POKEMON)
+ assert_table_length NUM_POKEMON
diff --git a/data/pokemon/cries.asm b/data/pokemon/cries.asm
index e4bf07d9..f823cdef 100644
--- a/data/pokemon/cries.asm
+++ b/data/pokemon/cries.asm
@@ -4,6 +4,7 @@ mon_cry: MACRO
ENDM
CryData::
+ table_width 3, CryData
; base cry, pitch, length
mon_cry SFX_CRY_11, $00, $80 ; Rhydon
mon_cry SFX_CRY_03, $00, $80 ; Kangaskhan
@@ -195,3 +196,4 @@ CryData::
mon_cry SFX_CRY_21, $55, $01 ; Bellsprout
mon_cry SFX_CRY_25, $44, $20 ; Weepinbell
mon_cry SFX_CRY_25, $66, $CC ; Victreebel
+ assert_table_length NUM_POKEMON_INDEXES
diff --git a/data/pokemon/dex_entries.asm b/data/pokemon/dex_entries.asm
index 5b9acf27..ae243768 100644
--- a/data/pokemon/dex_entries.asm
+++ b/data/pokemon/dex_entries.asm
@@ -1,4 +1,5 @@
PokedexEntryPointers:
+ table_width 2, PokedexEntryPointers
dw RhydonDexEntry
dw KangaskhanDexEntry
dw NidoranMDexEntry
@@ -189,6 +190,7 @@ PokedexEntryPointers:
dw BellsproutDexEntry
dw WeepinbellDexEntry
dw VictreebelDexEntry
+ assert_table_length NUM_POKEMON_INDEXES
; string: species name
; height in feet, inches
diff --git a/data/pokemon/dex_order.asm b/data/pokemon/dex_order.asm
index 0e293946..32e7a79b 100644
--- a/data/pokemon/dex_order.asm
+++ b/data/pokemon/dex_order.asm
@@ -1,4 +1,5 @@
PokedexOrder:
+ table_width 1, PokedexOrder
db DEX_RHYDON
db DEX_KANGASKHAN
db DEX_NIDORAN_M
@@ -189,3 +190,4 @@ PokedexOrder:
db DEX_BELLSPROUT
db DEX_WEEPINBELL
db DEX_VICTREEBEL
+ assert_table_length NUM_POKEMON_INDEXES
diff --git a/data/pokemon/evos_moves.asm b/data/pokemon/evos_moves.asm
index 19016d14..d3a8ed1c 100644
--- a/data/pokemon/evos_moves.asm
+++ b/data/pokemon/evos_moves.asm
@@ -2,6 +2,7 @@
; The max number of evolutions per monster is MAX_EVOLUTIONS
EvosMovesPointerTable:
+ table_width 2, EvosMovesPointerTable
dw RhydonEvosMoves
dw KangaskhanEvosMoves
dw NidoranMEvosMoves
@@ -192,6 +193,7 @@ EvosMovesPointerTable:
dw BellsproutEvosMoves
dw WeepinbellEvosMoves
dw VictreebelEvosMoves
+ assert_table_length NUM_POKEMON_INDEXES
RhydonEvosMoves:
; Evolutions
diff --git a/data/pokemon/menu_icons.asm b/data/pokemon/menu_icons.asm
index 0fbc9260..ffec7202 100644
--- a/data/pokemon/menu_icons.asm
+++ b/data/pokemon/menu_icons.asm
@@ -1,4 +1,5 @@
MonPartyData:
+ table_width 1, MonPartyData
dn ICON_GRASS, ICON_GRASS ; Bulbasaur / Ivysaur
dn ICON_GRASS, ICON_MON ; Venusaur / Charmander
dn ICON_MON, ICON_MON ; Charmeleon / Charizard
@@ -75,3 +76,4 @@ MonPartyData:
dn ICON_SNAKE, ICON_SNAKE ; Dratini / Dragonair
dn ICON_SNAKE, ICON_MON ; Dragonite / Mewtwo
dn ICON_MON, 0 ; Mew / padding
+ assert_table_length (NUM_POKEMON + 1) / 2
diff --git a/data/pokemon/names.asm b/data/pokemon/names.asm
index 83a45b77..56aa9f5d 100644
--- a/data/pokemon/names.asm
+++ b/data/pokemon/names.asm
@@ -1,4 +1,5 @@
MonsterNames::
+ table_width NAME_LENGTH - 1, MonsterNames
db "RHYDON@@@@"
db "KANGASKHAN"
db "NIDORAN♂@@"
@@ -189,3 +190,4 @@ MonsterNames::
db "BELLSPROUT"
db "WEEPINBELL"
db "VICTREEBEL"
+ assert_table_length NUM_POKEMON_INDEXES
diff --git a/data/pokemon/palettes.asm b/data/pokemon/palettes.asm
index 8c4d0bc0..2ce500aa 100644
--- a/data/pokemon/palettes.asm
+++ b/data/pokemon/palettes.asm
@@ -1,4 +1,5 @@
MonsterPalettes:
+ table_width 1, MonsterPalettes
db PAL_MEWMON ; MISSINGNO
db PAL_GREENMON ; BULBASAUR
db PAL_GREENMON ; IVYSAUR
@@ -151,3 +152,4 @@ MonsterPalettes:
db PAL_BROWNMON ; DRAGONITE
db PAL_MEWMON ; MEWTWO
db PAL_MEWMON ; MEW
+ assert_table_length NUM_POKEMON + 1
diff --git a/data/sgb/sgb_palettes.asm b/data/sgb/sgb_palettes.asm
index 5ddca002..aa8c0b7e 100644
--- a/data/sgb/sgb_palettes.asm
+++ b/data/sgb/sgb_palettes.asm
@@ -1,4 +1,5 @@
SuperPalettes:
+ table_width 2 * 4, SuperPalettes
; entries correspond to PAL_* constants
RGB 31,31,30, 23,26,19, 23,27,31, 06,06,06 ; PAL_ROUTE
RGB 31,31,30, 28,27,31, 23,27,31, 06,06,06 ; PAL_PALLET
@@ -40,8 +41,10 @@ SuperPalettes:
RGB 31,31,30, 31,30,22, 23,27,31, 06,06,06 ; PAL_25
RGB 31,31,30, 28,23,09, 18,14,10, 06,06,06 ; PAL_26
RGB 31,31,30, 16,16,16, 31,25,09, 06,06,06 ; PAL_27
+ assert_table_length NUM_SGB_PALS
GBCBasePalettes:
+ table_width 2 * 4, GBCBasePalettes
RGB 31,31,31, 16,31,04, 11,23,31, 03,03,03 ; PAL_ROUTE
RGB 31,31,31, 23,17,31, 11,23,31, 03,03,03 ; PAL_PALLET
RGB 31,31,31, 19,31,00, 11,23,31, 03,03,03 ; PAL_VIRIDIAN
@@ -82,3 +85,4 @@ GBCBasePalettes:
RGB 31,31,31, 31,31,00, 11,23,31, 03,03,03 ; PAL_25
RGB 31,31,31, 31,18,00, 19,07,01, 03,03,03 ; PAL_26
RGB 31,31,31, 09,09,09, 31,21,00, 03,03,03 ; PAL_27
+ assert_table_length NUM_SGB_PALS
diff --git a/data/sprites/sprites.asm b/data/sprites/sprites.asm
index 217ad864..47b52b1c 100644
--- a/data/sprites/sprites.asm
+++ b/data/sprites/sprites.asm
@@ -5,6 +5,7 @@ overworld_sprite: MACRO
ENDM
SpriteSheetPointerTable:
+ table_width 4, SpriteSheetPointerTable
; graphics, tile count
overworld_sprite RedSprite, 12 ; SPRITE_RED
overworld_sprite BlueSprite, 12 ; SPRITE_BLUE
@@ -88,3 +89,4 @@ SpriteSheetPointerTable:
overworld_sprite GamblerAsleepSprite, 4 ; SPRITE_UNUSED_GAMBLER_ASLEEP_1
overworld_sprite GamblerAsleepSprite, 4 ; SPRITE_UNUSED_GAMBLER_ASLEEP_2
overworld_sprite GamblerAsleepSprite, 4 ; SPRITE_GAMBLER_ASLEEP
+ assert_table_length NUM_SPRITES
diff --git a/data/tilemaps.asm b/data/tilemaps.asm
index 97e687fd..3b1e24c9 100644
--- a/data/tilemaps.asm
+++ b/data/tilemaps.asm
@@ -5,6 +5,7 @@ ENDM
TileIDListPointerTable:
; entries correspond to TILEMAP_* constants (see constants/gfx_constants.asm)
+ table_width 3, TileIDListPointerTable
; tilemap pointer, width, height
tile_ids MonTiles, 7, 7
tile_ids SlideDownMonTiles_7x5, 7, 5
@@ -14,6 +15,7 @@ TileIDListPointerTable:
tile_ids GengarIntroTiles3, 7, 7
tile_ids GameBoyTiles, 6, 8
tile_ids LinkCableTiles, 12, 3
+ assert_table_length NUM_TILEMAPS
DownscaledMonTiles_5x5:
INCBIN "gfx/pokemon/downscaled_5x5.tilemap"
diff --git a/data/tilesets/tileset_headers.asm b/data/tilesets/tileset_headers.asm
index 71c67ec3..e96932fd 100644
--- a/data/tilesets/tileset_headers.asm
+++ b/data/tilesets/tileset_headers.asm
@@ -7,6 +7,7 @@ tileset: MACRO
ENDM
Tilesets:
+ table_width 12, Tilesets
; block, gfx, coll, 3 counter tiles, grass tile, animations
tileset Overworld_Block, Overworld_GFX, Overworld_Coll, $FF,$FF,$FF, $52, TILEANIM_WATER_FLOWER
tileset RedsHouse1_Block, RedsHouse1_GFX, RedsHouse1_Coll, $FF,$FF,$FF, $FF, TILEANIM_NONE
@@ -33,3 +34,4 @@ Tilesets:
tileset Facility_Block, Facility_GFX, Facility_Coll, $12,$FF,$FF, $FF, TILEANIM_WATER
tileset Plateau_Block, Plateau_GFX, Plateau_Coll, $FF,$FF,$FF, $45, TILEANIM_WATER
tileset BeachHouse_Block, BeachHouse_GFX, BeachHouse_Coll, $FF,$FF,$FF, $FF, TILEANIM_NONE
+ assert_table_length NUM_TILESETS
diff --git a/data/tilesets/warp_tile_ids.asm b/data/tilesets/warp_tile_ids.asm
index 7c207e27..bba7787a 100644
--- a/data/tilesets/warp_tile_ids.asm
+++ b/data/tilesets/warp_tile_ids.asm
@@ -1,4 +1,5 @@
WarpTileIDPointers:
+ table_width 2, WarpTileIDPointers
dw .OverworldWarpTileIDs
dw .RedsHouse1WarpTileIDs
dw .MartWarpTileIDs
@@ -24,6 +25,7 @@ WarpTileIDPointers:
dw .FacilityWarpTileIDs
dw .PlateauWarpTileIDs
dw .BeachHouseWarpTileIDs
+ assert_table_length NUM_TILESETS
warp_tiles: MACRO
REPT _NARG
diff --git a/data/trainers/ai_pointers.asm b/data/trainers/ai_pointers.asm
index a3c7a657..a2c6975b 100644
--- a/data/trainers/ai_pointers.asm
+++ b/data/trainers/ai_pointers.asm
@@ -1,4 +1,5 @@
TrainerAIPointers:
+ table_width 3, TrainerAIPointers
; one entry per trainer class
; first byte, number of times (per Pokémon) it can occur
; next two bytes, pointer to AI subroutine for trainer class
@@ -50,3 +51,4 @@ TrainerAIPointers:
dbw 3, GenericAI
dbw 2, AgathaAI ; agatha
dbw 1, LanceAI ; lance
+ assert_table_length NUM_TRAINERS
diff --git a/data/trainers/move_choices.asm b/data/trainers/move_choices.asm
index dd8277dc..2950e515 100644
--- a/data/trainers/move_choices.asm
+++ b/data/trainers/move_choices.asm
@@ -4,10 +4,12 @@ REPT _NARG
shift
ENDR
db 0 ; end
+list_index = list_index + 1
ENDM
; move choice modification methods that are applied for each trainer class
TrainerClassMoveChoiceModifications:
+ list_start TrainerClassMoveChoiceModifications
move_choices ; YOUNGSTER
move_choices 1 ; BUG CATCHER
move_choices 1 ; LASS
@@ -55,3 +57,4 @@ TrainerClassMoveChoiceModifications:
move_choices 1 ; CHANNELER
move_choices 1 ; AGATHA
move_choices 1, 3 ; LANCE
+ assert_list_length NUM_TRAINERS
diff --git a/data/trainers/pic_pointers_money.asm b/data/trainers/pic_pointers_money.asm
index d4007394..3143095c 100644
--- a/data/trainers/pic_pointers_money.asm
+++ b/data/trainers/pic_pointers_money.asm
@@ -4,6 +4,7 @@ pic_money: MACRO
ENDM
TrainerPicAndMoneyPointers::
+ table_width 5, TrainerPicAndMoneyPointers
; pic pointer, base reward money
; money received after battle = base money × level of highest-level enemy mon
pic_money YoungsterPic, 1500
@@ -53,3 +54,4 @@ TrainerPicAndMoneyPointers::
pic_money ChannelerPic, 3000
pic_money AgathaPic, 9900
pic_money LancePic, 9900
+ assert_table_length NUM_TRAINERS
diff --git a/data/types/names.asm b/data/types/names.asm
index b1c35f65..b63c072e 100644
--- a/data/types/names.asm
+++ b/data/types/names.asm
@@ -1,4 +1,5 @@
TypeNames:
+ table_width 2, TypeNames
dw .Normal
dw .Fighting
@@ -22,6 +23,8 @@ ENDR
dw .Ice
dw .Dragon
+ assert_table_length NUM_TYPES
+
.Normal: db "NORMAL@"
.Fighting: db "FIGHTING@"
.Flying: db "FLYING@"
diff --git a/data/wild/grass_water.asm b/data/wild/grass_water.asm
index a991e9ae..4858ab5d 100644
--- a/data/wild/grass_water.asm
+++ b/data/wild/grass_water.asm
@@ -1,4 +1,5 @@
WildDataPointers:
+ table_width 2, WildDataPointers
dw NoMons ; PALLET_TOWN
dw NoMons ; VIRIDIAN_CITY
dw NoMons ; PEWTER_CITY
@@ -248,6 +249,7 @@ WildDataPointers:
dw NoMons
dw NoMons
dw NoMons
+ assert_table_length NUM_MAPS
dw -1 ; end
; wild pokemon data is divided into two parts.
diff --git a/data/wild/maps/CeruleanCave1F.asm b/data/wild/maps/CeruleanCave1F.asm
index 24a24f60..f8a830de 100644
--- a/data/wild/maps/CeruleanCave1F.asm
+++ b/data/wild/maps/CeruleanCave1F.asm
@@ -1,5 +1,5 @@
DungeonMons1:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 50, GOLBAT
db 55, GOLBAT
db 45, GRAVELER
@@ -10,5 +10,7 @@ DungeonMons1:
db 54, PARASECT
db 55, DITTO
db 60, DITTO
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/CeruleanCave2F.asm b/data/wild/maps/CeruleanCave2F.asm
index 07b34527..712d8cec 100644
--- a/data/wild/maps/CeruleanCave2F.asm
+++ b/data/wild/maps/CeruleanCave2F.asm
@@ -1,5 +1,5 @@
DungeonMons2:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 52, GOLBAT
db 57, GOLBAT
db 50, GRAVELER
@@ -10,5 +10,7 @@ DungeonMons2:
db 58, WEEPINBELL
db 60, RHYDON
db 58, RHYDON
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/CeruleanCaveB1F.asm b/data/wild/maps/CeruleanCaveB1F.asm
index 969ab18f..5787d240 100644
--- a/data/wild/maps/CeruleanCaveB1F.asm
+++ b/data/wild/maps/CeruleanCaveB1F.asm
@@ -1,5 +1,5 @@
DungeonMonsB1:
- db 25 ; grass encounter rate
+ def_grass_wildmons 25 ; encounter rate
db 54, GOLBAT
db 59, GOLBAT
db 55, GRAVELER
@@ -10,5 +10,7 @@ DungeonMonsB1:
db 65, DITTO
db 55, LICKITUNG
db 50, LICKITUNG
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/DiglettsCave.asm b/data/wild/maps/DiglettsCave.asm
index d1e73af4..e5ba5fa5 100644
--- a/data/wild/maps/DiglettsCave.asm
+++ b/data/wild/maps/DiglettsCave.asm
@@ -1,5 +1,5 @@
CaveMons:
- db 20 ; grass encounter rate
+ def_grass_wildmons 20 ; encounter rate
db 18, DIGLETT
db 19, DIGLETT
db 17, DIGLETT
@@ -10,5 +10,7 @@ CaveMons:
db 22, DIGLETT
db 29, DUGTRIO
db 31, DUGTRIO
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/MtMoon1F.asm b/data/wild/maps/MtMoon1F.asm
index 2e426655..93edc040 100644
--- a/data/wild/maps/MtMoon1F.asm
+++ b/data/wild/maps/MtMoon1F.asm
@@ -1,5 +1,5 @@
MoonMons1:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 8, ZUBAT
db 9, ZUBAT
db 10, GEODUDE
@@ -10,5 +10,7 @@ MoonMons1:
db 11, ZUBAT
db 12, SANDSHREW
db 11, CLEFAIRY
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/MtMoonB1F.asm b/data/wild/maps/MtMoonB1F.asm
index 1eee34ce..d729dc6f 100644
--- a/data/wild/maps/MtMoonB1F.asm
+++ b/data/wild/maps/MtMoonB1F.asm
@@ -1,5 +1,5 @@
MoonMonsB1:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 8, ZUBAT
db 9, ZUBAT
db 10, ZUBAT
@@ -10,5 +10,7 @@ MoonMonsB1:
db 11, PARAS
db 10, CLEFAIRY
db 12, CLEFAIRY
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/MtMoonB2F.asm b/data/wild/maps/MtMoonB2F.asm
index d49ec585..63671cbe 100644
--- a/data/wild/maps/MtMoonB2F.asm
+++ b/data/wild/maps/MtMoonB2F.asm
@@ -1,5 +1,5 @@
MoonMonsB2:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 10, ZUBAT
db 11, GEODUDE
db 13, PARAS
@@ -10,5 +10,7 @@ MoonMonsB2:
db 9, CLEFAIRY
db 11, CLEFAIRY
db 13, CLEFAIRY
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/PokemonMansion1F.asm b/data/wild/maps/PokemonMansion1F.asm
index 75fcadfe..8aea3fac 100644
--- a/data/wild/maps/PokemonMansion1F.asm
+++ b/data/wild/maps/PokemonMansion1F.asm
@@ -1,5 +1,5 @@
MansionMons1:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 34, RATTATA
db 34, RATICATE
db 23, GRIMER
@@ -10,5 +10,7 @@ MansionMons1:
db 26, GRIMER
db 34, GROWLITHE
db 38, GROWLITHE
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/PokemonMansion2F.asm b/data/wild/maps/PokemonMansion2F.asm
index 2143532f..818e705b 100644
--- a/data/wild/maps/PokemonMansion2F.asm
+++ b/data/wild/maps/PokemonMansion2F.asm
@@ -1,5 +1,5 @@
MansionMons2:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 37, RATTATA
db 37, RATICATE
db 26, GRIMER
@@ -10,5 +10,7 @@ MansionMons2:
db 35, GRIMER
db 35, MUK
db 38, MUK
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/PokemonMansion3F.asm b/data/wild/maps/PokemonMansion3F.asm
index f0c77977..36eb701b 100644
--- a/data/wild/maps/PokemonMansion3F.asm
+++ b/data/wild/maps/PokemonMansion3F.asm
@@ -1,5 +1,5 @@
MansionMons3:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 40, RATTATA
db 40, RATICATE
db 32, GRIMER
@@ -10,5 +10,7 @@ MansionMons3:
db 38, GRIMER
db 38, MUK
db 41, MUK
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/PokemonMansionB1F.asm b/data/wild/maps/PokemonMansionB1F.asm
index c0ad432b..1954695c 100644
--- a/data/wild/maps/PokemonMansionB1F.asm
+++ b/data/wild/maps/PokemonMansionB1F.asm
@@ -1,5 +1,5 @@
MansionMonsB1:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 35, GRIMER
db 38, GRIMER
db 37, RATICATE
@@ -10,5 +10,7 @@ MansionMonsB1:
db 46, RATICATE
db 18, DITTO
db 12, DITTO
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/PokemonTower1F.asm b/data/wild/maps/PokemonTower1F.asm
index 95bef4a3..5e061298 100644
--- a/data/wild/maps/PokemonTower1F.asm
+++ b/data/wild/maps/PokemonTower1F.asm
@@ -1,4 +1,6 @@
TowerMons1:
- db 0 ; grass encounter rate
+ def_grass_wildmons 0 ; encounter rate
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/PokemonTower2F.asm b/data/wild/maps/PokemonTower2F.asm
index 77b7d415..39794a20 100644
--- a/data/wild/maps/PokemonTower2F.asm
+++ b/data/wild/maps/PokemonTower2F.asm
@@ -1,4 +1,6 @@
TowerMons2:
- db 0 ; grass encounter rate
+ def_grass_wildmons 0 ; encounter rate
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/PokemonTower3F.asm b/data/wild/maps/PokemonTower3F.asm
index b608ea15..42ee5a6f 100644
--- a/data/wild/maps/PokemonTower3F.asm
+++ b/data/wild/maps/PokemonTower3F.asm
@@ -1,5 +1,5 @@
TowerMons3:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 20, GASTLY
db 21, GASTLY
db 22, GASTLY
@@ -10,5 +10,7 @@ TowerMons3:
db 25, GASTLY
db 20, HAUNTER
db 25, HAUNTER
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/PokemonTower4F.asm b/data/wild/maps/PokemonTower4F.asm
index 425b200c..b81bc541 100644
--- a/data/wild/maps/PokemonTower4F.asm
+++ b/data/wild/maps/PokemonTower4F.asm
@@ -1,5 +1,5 @@
TowerMons4:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 20, GASTLY
db 21, GASTLY
db 22, GASTLY
@@ -10,5 +10,7 @@ TowerMons4:
db 25, GASTLY
db 20, HAUNTER
db 25, HAUNTER
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/PokemonTower5F.asm b/data/wild/maps/PokemonTower5F.asm
index 5a0c96e1..66af9751 100644
--- a/data/wild/maps/PokemonTower5F.asm
+++ b/data/wild/maps/PokemonTower5F.asm
@@ -1,5 +1,5 @@
TowerMons5:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 22, GASTLY
db 23, GASTLY
db 24, GASTLY
@@ -10,5 +10,7 @@ TowerMons5:
db 27, GASTLY
db 22, HAUNTER
db 27, HAUNTER
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/PokemonTower6F.asm b/data/wild/maps/PokemonTower6F.asm
index 5e9d23f4..1ddafd84 100644
--- a/data/wild/maps/PokemonTower6F.asm
+++ b/data/wild/maps/PokemonTower6F.asm
@@ -1,5 +1,5 @@
TowerMons6:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 22, GASTLY
db 23, GASTLY
db 24, GASTLY
@@ -10,5 +10,7 @@ TowerMons6:
db 27, GASTLY
db 22, HAUNTER
db 27, HAUNTER
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/PokemonTower7F.asm b/data/wild/maps/PokemonTower7F.asm
index 8a3467ff..5c859a00 100644
--- a/data/wild/maps/PokemonTower7F.asm
+++ b/data/wild/maps/PokemonTower7F.asm
@@ -1,5 +1,5 @@
TowerMons7:
- db 20 ; grass encounter rate
+ def_grass_wildmons 20 ; encounter rate
db 24, GASTLY
db 25, GASTLY
db 26, GASTLY
@@ -10,5 +10,7 @@ TowerMons7:
db 29, GASTLY
db 24, HAUNTER
db 29, HAUNTER
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/PowerPlant.asm b/data/wild/maps/PowerPlant.asm
index a910420e..fde69fcd 100644
--- a/data/wild/maps/PowerPlant.asm
+++ b/data/wild/maps/PowerPlant.asm
@@ -1,5 +1,5 @@
PowerPlantMons:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 30, MAGNEMITE
db 35, MAGNEMITE
db 33, MAGNETON
@@ -10,5 +10,7 @@ PowerPlantMons:
db 38, MAGNETON
db 33, MUK
db 37, MUK
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/RockTunnel1F.asm b/data/wild/maps/RockTunnel1F.asm
index 5c64bac4..98785e39 100644
--- a/data/wild/maps/RockTunnel1F.asm
+++ b/data/wild/maps/RockTunnel1F.asm
@@ -1,5 +1,5 @@
TunnelMonsB1:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 15, ZUBAT
db 16, GEODUDE
db 17, ZUBAT
@@ -10,5 +10,7 @@ TunnelMonsB1:
db 17, MACHOP
db 19, MACHOP
db 21, MACHOP
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/RockTunnelB1F.asm b/data/wild/maps/RockTunnelB1F.asm
index 3f034958..035574ef 100644
--- a/data/wild/maps/RockTunnelB1F.asm
+++ b/data/wild/maps/RockTunnelB1F.asm
@@ -1,5 +1,5 @@
TunnelMonsB2:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 20, ZUBAT
db 17, GEODUDE
db 18, MACHOP
@@ -10,5 +10,7 @@ TunnelMonsB2:
db 14, ONIX
db 18, ONIX
db 22, ONIX
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route1.asm b/data/wild/maps/Route1.asm
index df599383..7634f3b4 100644
--- a/data/wild/maps/Route1.asm
+++ b/data/wild/maps/Route1.asm
@@ -1,5 +1,5 @@
Route1Mons:
- db 25 ; grass encounter rate
+ def_grass_wildmons 25 ; encounter rate
db 3, PIDGEY
db 4, PIDGEY
db 2, RATTATA
@@ -10,5 +10,7 @@ Route1Mons:
db 4, RATTATA
db 6, PIDGEY
db 7, PIDGEY
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route10.asm b/data/wild/maps/Route10.asm
index b7ca364c..bd9ba28f 100644
--- a/data/wild/maps/Route10.asm
+++ b/data/wild/maps/Route10.asm
@@ -1,5 +1,5 @@
Route10Mons:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 16, MAGNEMITE
db 18, RATTATA
db 18, MAGNEMITE
@@ -10,5 +10,7 @@ Route10Mons:
db 20, RATICATE
db 16, MACHOP
db 18, MACHOP
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route11.asm b/data/wild/maps/Route11.asm
index eb00aa7e..e564296a 100644
--- a/data/wild/maps/Route11.asm
+++ b/data/wild/maps/Route11.asm
@@ -1,5 +1,5 @@
Route11Mons:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 16, PIDGEY
db 15, RATTATA
db 18, PIDGEY
@@ -10,5 +10,7 @@ Route11Mons:
db 20, PIDGEOTTO
db 19, DROWZEE
db 17, RATICATE
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route12.asm b/data/wild/maps/Route12.asm
index 46c4106e..40fd8e07 100644
--- a/data/wild/maps/Route12.asm
+++ b/data/wild/maps/Route12.asm
@@ -1,5 +1,5 @@
Route12Mons:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 25, ODDISH
db 25, BELLSPROUT
db 28, PIDGEY
@@ -10,8 +10,9 @@ Route12Mons:
db 29, WEEPINBELL
db 26, FARFETCHD
db 31, FARFETCHD
+ end_grass_wildmons
- db 3 ; water encounter rate
+ def_water_wildmons 3 ; encounter rate
db 15, SLOWPOKE
db 15, SLOWPOKE
db 15, SLOWPOKE
@@ -22,3 +23,4 @@ Route12Mons:
db 15, SLOWPOKE
db 15, SLOWBRO
db 20, SLOWBRO
+ end_water_wildmons
diff --git a/data/wild/maps/Route13.asm b/data/wild/maps/Route13.asm
index d19e0d83..33e097cd 100644
--- a/data/wild/maps/Route13.asm
+++ b/data/wild/maps/Route13.asm
@@ -1,5 +1,5 @@
Route13Mons:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 25, ODDISH
db 25, BELLSPROUT
db 28, PIDGEOTTO
@@ -10,8 +10,9 @@ Route13Mons:
db 29, WEEPINBELL
db 26, FARFETCHD
db 31, FARFETCHD
+ end_grass_wildmons
- db 3 ; water encounter rate
+ def_water_wildmons 3 ; encounter rate
db 15, SLOWPOKE
db 15, SLOWPOKE
db 15, SLOWPOKE
@@ -22,3 +23,4 @@ Route13Mons:
db 15, SLOWPOKE
db 15, SLOWBRO
db 20, SLOWBRO
+ end_water_wildmons
diff --git a/data/wild/maps/Route14.asm b/data/wild/maps/Route14.asm
index fe600bed..98b1f4e3 100644
--- a/data/wild/maps/Route14.asm
+++ b/data/wild/maps/Route14.asm
@@ -1,5 +1,5 @@
Route14Mons:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 26, ODDISH
db 26, BELLSPROUT
db 24, VENONAT
@@ -10,5 +10,7 @@ Route14Mons:
db 30, WEEPINBELL
db 27, VENONAT
db 30, VENOMOTH
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route15.asm b/data/wild/maps/Route15.asm
index 4374acfb..87392fa4 100644
--- a/data/wild/maps/Route15.asm
+++ b/data/wild/maps/Route15.asm
@@ -1,5 +1,5 @@
Route15Mons:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 26, ODDISH
db 26, BELLSPROUT
db 24, VENONAT
@@ -10,5 +10,7 @@ Route15Mons:
db 30, WEEPINBELL
db 27, VENONAT
db 30, VENOMOTH
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route16.asm b/data/wild/maps/Route16.asm
index f858dcdb..4265809a 100644
--- a/data/wild/maps/Route16.asm
+++ b/data/wild/maps/Route16.asm
@@ -1,5 +1,5 @@
Route16Mons:
- db 25 ; grass encounter rate
+ def_grass_wildmons 25 ; encounter rate
db 22, SPEAROW
db 22, DODUO
db 23, RATTATA
@@ -10,5 +10,7 @@ Route16Mons:
db 24, FEAROW
db 25, RATICATE
db 26, RATICATE
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route17.asm b/data/wild/maps/Route17.asm
index 3f6316f3..4c167abe 100644
--- a/data/wild/maps/Route17.asm
+++ b/data/wild/maps/Route17.asm
@@ -1,5 +1,5 @@
Route17Mons:
- db 25 ; grass encounter rate
+ def_grass_wildmons 25 ; encounter rate
db 26, DODUO
db 27, FEAROW
db 27, DODUO
@@ -10,5 +10,7 @@ Route17Mons:
db 28, DODUO
db 32, PONYTA
db 29, DODRIO
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route18.asm b/data/wild/maps/Route18.asm
index b76cef02..04b4dbfa 100644
--- a/data/wild/maps/Route18.asm
+++ b/data/wild/maps/Route18.asm
@@ -1,5 +1,5 @@
Route18Mons:
- db 25 ; grass encounter rate
+ def_grass_wildmons 25 ; encounter rate
db 22, SPEAROW
db 22, DODUO
db 23, RATTATA
@@ -10,5 +10,7 @@ Route18Mons:
db 24, FEAROW
db 25, RATICATE
db 26, RATICATE
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route19.asm b/data/wild/maps/Route19.asm
index 70b06ac8..c09ba290 100644
--- a/data/wild/maps/Route19.asm
+++ b/data/wild/maps/Route19.asm
@@ -1,7 +1,8 @@
Route19Mons:
- db 0 ; grass encounter rate
+ def_grass_wildmons 0 ; encounter rate
+ end_grass_wildmons
- db 5 ; water encounter rate
+ def_water_wildmons 5 ; encounter rate
db 5, TENTACOOL
db 10, TENTACOOL
db 15, TENTACOOL
@@ -12,3 +13,4 @@ Route19Mons:
db 30, TENTACOOL
db 35, TENTACOOL
db 40, TENTACOOL
+ end_water_wildmons
diff --git a/data/wild/maps/Route2.asm b/data/wild/maps/Route2.asm
index 40093712..eda91039 100644
--- a/data/wild/maps/Route2.asm
+++ b/data/wild/maps/Route2.asm
@@ -1,5 +1,5 @@
Route2Mons:
- db 25 ; grass encounter rate
+ def_grass_wildmons 25 ; encounter rate
db 3, RATTATA
db 3, PIDGEY
db 4, RATTATA
@@ -10,5 +10,7 @@ Route2Mons:
db 6, NIDORAN_F
db 7, PIDGEY
db 7, PIDGEY
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route21.asm b/data/wild/maps/Route21.asm
index e934e079..54a647f9 100644
--- a/data/wild/maps/Route21.asm
+++ b/data/wild/maps/Route21.asm
@@ -1,5 +1,5 @@
Route21Mons:
- db 25 ; grass encounter rate
+ def_grass_wildmons 25 ; encounter rate
db 15, PIDGEY
db 13, RATTATA
db 13, PIDGEY
@@ -10,8 +10,9 @@ Route21Mons:
db 17, PIDGEOTTO
db 19, PIDGEOTTO
db 15, PIDGEOTTO
+ end_grass_wildmons
- db 5 ; water encounter rate
+ def_water_wildmons 5 ; encounter rate
db 5, TENTACOOL
db 10, TENTACOOL
db 15, TENTACOOL
@@ -22,3 +23,4 @@ Route21Mons:
db 30, TENTACOOL
db 35, TENTACOOL
db 40, TENTACOOL
+ end_water_wildmons
diff --git a/data/wild/maps/Route22.asm b/data/wild/maps/Route22.asm
index 1b50ded0..9398fafc 100644
--- a/data/wild/maps/Route22.asm
+++ b/data/wild/maps/Route22.asm
@@ -1,5 +1,5 @@
Route22Mons:
- db 25 ; grass encounter rate
+ def_grass_wildmons 25 ; encounter rate
db 2, NIDORAN_M
db 2, NIDORAN_F
db 3, MANKEY
@@ -10,5 +10,7 @@ Route22Mons:
db 2, SPEAROW
db 4, SPEAROW
db 6, SPEAROW
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route23.asm b/data/wild/maps/Route23.asm
index cc1642e8..99e3c548 100644
--- a/data/wild/maps/Route23.asm
+++ b/data/wild/maps/Route23.asm
@@ -1,5 +1,5 @@
Route23Mons:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 41, NIDORINO
db 41, NIDORINA
db 36, MANKEY
@@ -10,5 +10,7 @@ Route23Mons:
db 45, FEAROW
db 41, PRIMEAPE
db 46, PRIMEAPE
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route24.asm b/data/wild/maps/Route24.asm
index e493dfbf..852137f4 100644
--- a/data/wild/maps/Route24.asm
+++ b/data/wild/maps/Route24.asm
@@ -1,5 +1,5 @@
Route24Mons:
- db 25 ; grass encounter rate
+ def_grass_wildmons 25 ; encounter rate
db 12, ODDISH
db 12, BELLSPROUT
db 13, PIDGEY
@@ -10,5 +10,7 @@ Route24Mons:
db 16, VENONAT
db 17, PIDGEY
db 17, PIDGEOTTO
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route25.asm b/data/wild/maps/Route25.asm
index 2daa060c..22b68eb0 100644
--- a/data/wild/maps/Route25.asm
+++ b/data/wild/maps/Route25.asm
@@ -1,5 +1,5 @@
Route25Mons:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 12, ODDISH
db 12, BELLSPROUT
db 13, PIDGEY
@@ -10,5 +10,7 @@ Route25Mons:
db 16, VENONAT
db 17, PIDGEY
db 17, PIDGEOTTO
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route3.asm b/data/wild/maps/Route3.asm
index be7afe95..49dde638 100644
--- a/data/wild/maps/Route3.asm
+++ b/data/wild/maps/Route3.asm
@@ -1,5 +1,5 @@
Route3Mons:
- db 20 ; grass encounter rate
+ def_grass_wildmons 20 ; encounter rate
db 8, SPEAROW
db 9, SPEAROW
db 9, MANKEY
@@ -10,5 +10,7 @@ Route3Mons:
db 12, RATTATA
db 11, SPEAROW
db 12, SPEAROW
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route4.asm b/data/wild/maps/Route4.asm
index 29f0aec4..7aa1f37b 100644
--- a/data/wild/maps/Route4.asm
+++ b/data/wild/maps/Route4.asm
@@ -1,5 +1,5 @@
Route4Mons:
- db 20 ; grass encounter rate
+ def_grass_wildmons 20 ; encounter rate
db 8, SPEAROW
db 9, SPEAROW
db 9, MANKEY
@@ -10,5 +10,7 @@ Route4Mons:
db 12, RATTATA
db 11, SPEAROW
db 12, SPEAROW
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route5.asm b/data/wild/maps/Route5.asm
index 7517bcb9..dc2ee194 100644
--- a/data/wild/maps/Route5.asm
+++ b/data/wild/maps/Route5.asm
@@ -1,5 +1,5 @@
Route5Mons:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 15, PIDGEY
db 14, RATTATA
db 7, ABRA
@@ -10,5 +10,7 @@ Route5Mons:
db 3, JIGGLYPUFF
db 5, JIGGLYPUFF
db 7, JIGGLYPUFF
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route6.asm b/data/wild/maps/Route6.asm
index 067d2694..df91e521 100644
--- a/data/wild/maps/Route6.asm
+++ b/data/wild/maps/Route6.asm
@@ -1,5 +1,5 @@
Route6Mons:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 15, PIDGEY
db 14, RATTATA
db 7, ABRA
@@ -10,8 +10,9 @@ Route6Mons:
db 3, JIGGLYPUFF
db 5, JIGGLYPUFF
db 7, JIGGLYPUFF
+ end_grass_wildmons
- db 3 ; water encounter rate
+ def_water_wildmons 3 ; encounter rate
db 15, PSYDUCK
db 15, PSYDUCK
db 15, PSYDUCK
@@ -22,3 +23,4 @@ Route6Mons:
db 15, PSYDUCK
db 15, GOLDUCK
db 20, GOLDUCK
+ end_water_wildmons
diff --git a/data/wild/maps/Route7.asm b/data/wild/maps/Route7.asm
index 1ebb1ce9..e0e78991 100644
--- a/data/wild/maps/Route7.asm
+++ b/data/wild/maps/Route7.asm
@@ -1,5 +1,5 @@
Route7Mons:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 20, PIDGEY
db 22, PIDGEY
db 20, RATTATA
@@ -10,5 +10,7 @@ Route7Mons:
db 19, JIGGLYPUFF
db 24, JIGGLYPUFF
db 24, JIGGLYPUFF
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route8.asm b/data/wild/maps/Route8.asm
index db07dbba..a55d5e79 100644
--- a/data/wild/maps/Route8.asm
+++ b/data/wild/maps/Route8.asm
@@ -1,5 +1,5 @@
Route8Mons:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 20, PIDGEY
db 22, PIDGEY
db 20, RATTATA
@@ -10,5 +10,7 @@ Route8Mons:
db 24, JIGGLYPUFF
db 20, KADABRA
db 27, KADABRA
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/Route9.asm b/data/wild/maps/Route9.asm
index 78512402..273452c9 100644
--- a/data/wild/maps/Route9.asm
+++ b/data/wild/maps/Route9.asm
@@ -1,5 +1,5 @@
Route9Mons:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 16, NIDORAN_M
db 16, NIDORAN_F
db 18, RATTATA
@@ -10,5 +10,7 @@ Route9Mons:
db 18, NIDORINA
db 20, RATICATE
db 19, FEAROW
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/SafariZoneCenter.asm b/data/wild/maps/SafariZoneCenter.asm
index 125fbc6a..5573d8b8 100644
--- a/data/wild/maps/SafariZoneCenter.asm
+++ b/data/wild/maps/SafariZoneCenter.asm
@@ -1,5 +1,5 @@
ZoneMonsCenter:
- db 30 ; grass encounter rate
+ def_grass_wildmons 30 ; encounter rate
db 14, NIDORAN_M
db 36, NIDORAN_F
db 24, EXEGGCUTE
@@ -10,5 +10,7 @@ ZoneMonsCenter:
db 32, PARASECT
db 22, TANGELA
db 7, CHANSEY
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/SafariZoneEast.asm b/data/wild/maps/SafariZoneEast.asm
index ba0a1954..1b634058 100644
--- a/data/wild/maps/SafariZoneEast.asm
+++ b/data/wild/maps/SafariZoneEast.asm
@@ -1,5 +1,5 @@
ZoneMons1:
- db 30 ; grass encounter rate
+ def_grass_wildmons 30 ; encounter rate
db 21, NIDORAN_M
db 29, NIDORAN_F
db 22, EXEGGCUTE
@@ -10,5 +10,7 @@ ZoneMons1:
db 24, MAROWAK
db 21, CHANSEY
db 15, SCYTHER
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/SafariZoneNorth.asm b/data/wild/maps/SafariZoneNorth.asm
index fa6dd3b4..6ce432ef 100644
--- a/data/wild/maps/SafariZoneNorth.asm
+++ b/data/wild/maps/SafariZoneNorth.asm
@@ -1,5 +1,5 @@
ZoneMons2:
- db 30 ; grass encounter rate
+ def_grass_wildmons 30 ; encounter rate
db 36, NIDORAN_M
db 14, NIDORAN_F
db 20, EXEGGCUTE
@@ -10,5 +10,7 @@ ZoneMons2:
db 33, KANGASKHAN
db 25, SCYTHER
db 15, PINSIR
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/SafariZoneWest.asm b/data/wild/maps/SafariZoneWest.asm
index b1e2fe3a..42a4d3a3 100644
--- a/data/wild/maps/SafariZoneWest.asm
+++ b/data/wild/maps/SafariZoneWest.asm
@@ -1,5 +1,5 @@
ZoneMons3:
- db 30 ; grass encounter rate
+ def_grass_wildmons 30 ; encounter rate
db 29, NIDORAN_M
db 21, NIDORAN_F
db 22, EXEGGCUTE
@@ -10,5 +10,7 @@ ZoneMons3:
db 24, MAROWAK
db 25, PINSIR
db 27, TANGELA
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/SeafoamIslands1F.asm b/data/wild/maps/SeafoamIslands1F.asm
index e37005b2..bc14de89 100644
--- a/data/wild/maps/SeafoamIslands1F.asm
+++ b/data/wild/maps/SeafoamIslands1F.asm
@@ -1,5 +1,5 @@
IslandMons1:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 18, ZUBAT
db 25, KRABBY
db 27, KRABBY
@@ -10,5 +10,7 @@ IslandMons1:
db 9, ZUBAT
db 27, GOLBAT
db 36, GOLBAT
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/SeafoamIslandsB1F.asm b/data/wild/maps/SeafoamIslandsB1F.asm
index fd9ab09a..b213df3d 100644
--- a/data/wild/maps/SeafoamIslandsB1F.asm
+++ b/data/wild/maps/SeafoamIslandsB1F.asm
@@ -1,5 +1,5 @@
IslandMonsB1:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 27, ZUBAT
db 26, KRABBY
db 36, ZUBAT
@@ -10,5 +10,7 @@ IslandMonsB1:
db 28, KINGLER
db 22, SEEL
db 26, SEEL
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/SeafoamIslandsB2F.asm b/data/wild/maps/SeafoamIslandsB2F.asm
index 53961534..4cb4805c 100644
--- a/data/wild/maps/SeafoamIslandsB2F.asm
+++ b/data/wild/maps/SeafoamIslandsB2F.asm
@@ -1,5 +1,5 @@
IslandMonsB2:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 27, ZUBAT
db 27, KRABBY
db 36, ZUBAT
@@ -10,5 +10,7 @@ IslandMonsB2:
db 36, GOLBAT
db 31, SLOWPOKE
db 31, SLOWBRO
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/SeafoamIslandsB3F.asm b/data/wild/maps/SeafoamIslandsB3F.asm
index 5435d1e6..e58c306f 100644
--- a/data/wild/maps/SeafoamIslandsB3F.asm
+++ b/data/wild/maps/SeafoamIslandsB3F.asm
@@ -1,5 +1,5 @@
IslandMonsB3:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 27, GOLBAT
db 36, ZUBAT
db 29, KRABBY
@@ -10,8 +10,9 @@ IslandMonsB3:
db 30, SEEL
db 28, DEWGONG
db 32, DEWGONG
+ end_grass_wildmons
- db 5 ; water encounter rate
+ def_water_wildmons 5 ; encounter rate
db 25, TENTACOOL
db 30, TENTACOOL
db 20, TENTACOOL
@@ -22,3 +23,4 @@ IslandMonsB3:
db 30, STARYU
db 30, STARYU
db 30, STARYU
+ end_water_wildmons
diff --git a/data/wild/maps/SeafoamIslandsB4F.asm b/data/wild/maps/SeafoamIslandsB4F.asm
index bfeb6821..84d4ba5d 100644
--- a/data/wild/maps/SeafoamIslandsB4F.asm
+++ b/data/wild/maps/SeafoamIslandsB4F.asm
@@ -1,5 +1,5 @@
IslandMonsB4:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 36, GOLBAT
db 36, ZUBAT
db 30, KRABBY
@@ -10,8 +10,9 @@ IslandMonsB4:
db 45, ZUBAT
db 30, DEWGONG
db 34, DEWGONG
+ end_grass_wildmons
- db 5 ; water encounter rate
+ def_water_wildmons 5 ; encounter rate
db 25, TENTACOOL
db 30, TENTACOOL
db 20, TENTACOOL
@@ -22,3 +23,4 @@ IslandMonsB4:
db 30, STARYU
db 30, STARYU
db 30, STARYU
+ end_water_wildmons
diff --git a/data/wild/maps/VictoryRoad1F.asm b/data/wild/maps/VictoryRoad1F.asm
index bcb16dc8..17ece17a 100644
--- a/data/wild/maps/VictoryRoad1F.asm
+++ b/data/wild/maps/VictoryRoad1F.asm
@@ -1,5 +1,5 @@
PlateauMons1:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 26, GEODUDE
db 31, GEODUDE
db 36, GEODUDE
@@ -10,5 +10,7 @@ PlateauMons1:
db 45, ONIX
db 41, GRAVELER
db 47, GRAVELER
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/VictoryRoad2F.asm b/data/wild/maps/VictoryRoad2F.asm
index 89b736cd..04ebaa6e 100644
--- a/data/wild/maps/VictoryRoad2F.asm
+++ b/data/wild/maps/VictoryRoad2F.asm
@@ -1,5 +1,5 @@
PlateauMons2:
- db 10 ; grass encounter rate
+ def_grass_wildmons 10 ; encounter rate
db 31, GEODUDE
db 36, GEODUDE
db 41, GEODUDE
@@ -10,5 +10,7 @@ PlateauMons2:
db 47, ONIX
db 39, MACHOKE
db 42, MACHOKE
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/VictoryRoad3F.asm b/data/wild/maps/VictoryRoad3F.asm
index aec2d097..cf56245e 100644
--- a/data/wild/maps/VictoryRoad3F.asm
+++ b/data/wild/maps/VictoryRoad3F.asm
@@ -1,5 +1,5 @@
PlateauMons3:
- db 15 ; grass encounter rate
+ def_grass_wildmons 15 ; encounter rate
db 36, GEODUDE
db 44, GOLBAT
db 41, GEODUDE
@@ -10,5 +10,7 @@ PlateauMons3:
db 45, MACHOKE
db 47, GRAVELER
db 47, GRAVELER
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/ViridianForest.asm b/data/wild/maps/ViridianForest.asm
index e7b1288f..93286607 100644
--- a/data/wild/maps/ViridianForest.asm
+++ b/data/wild/maps/ViridianForest.asm
@@ -1,5 +1,5 @@
ForestMons:
- db 25 ; grass encounter rate
+ def_grass_wildmons 25 ; encounter rate
db 3, CATERPIE
db 4, METAPOD
db 4, CATERPIE
@@ -10,5 +10,7 @@ ForestMons:
db 6, METAPOD
db 8, PIDGEY
db 9, PIDGEOTTO
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/wild/maps/nothing.asm b/data/wild/maps/nothing.asm
index 19570b50..1ccba991 100644
--- a/data/wild/maps/nothing.asm
+++ b/data/wild/maps/nothing.asm
@@ -1,4 +1,6 @@
NoMons:
- db 0 ; grass encounter rate
+ def_grass_wildmons 0 ; encounter rate
+ end_grass_wildmons
- db 0 ; water encounter rate
+ def_water_wildmons 0 ; encounter rate
+ end_water_wildmons
diff --git a/data/yes_no_menu_strings.asm b/data/yes_no_menu_strings.asm
index db2eeb4c..e6e23279 100644
--- a/data/yes_no_menu_strings.asm
+++ b/data/yes_no_menu_strings.asm
@@ -5,6 +5,7 @@ ENDM
TwoOptionMenuStrings:
; entries correspond to *_MENU constants
+ table_width 5, TwoOptionMenuStrings
; width, height, blank line before first menu item?, text pointer
two_option_menu 4, 3, FALSE, .YesNoMenu
two_option_menu 6, 3, FALSE, .NorthWestMenu
@@ -14,6 +15,7 @@ TwoOptionMenuStrings:
two_option_menu 7, 3, FALSE, .TradeCancelMenu
two_option_menu 7, 4, TRUE, .HealCancelMenu
two_option_menu 4, 3, FALSE, .NoYesMenu
+ assert_table_length NUM_TWO_OPTION_MENUS
.NoYesMenu:
db "NO"
diff --git a/engine/battle/core.asm b/engine/battle/core.asm
index 79defa33..45dfdc6f 100644
--- a/engine/battle/core.asm
+++ b/engine/battle/core.asm
@@ -1674,7 +1674,7 @@ LoadBattleMonFromParty:
ld bc, wPartyMon1DVs - wPartyMon1OTID
add hl, bc
ld de, wBattleMonDVs
- ld bc, NUM_DVS
+ ld bc, wPartyMon1PP - wPartyMon1DVs
call CopyData
ld de, wBattleMonPP
ld bc, NUM_MOVES
@@ -1718,7 +1718,7 @@ LoadEnemyMonFromParty:
ld bc, wEnemyMon1DVs - wEnemyMon1OTID
add hl, bc
ld de, wEnemyMonDVs
- ld bc, NUM_DVS
+ ld bc, wEnemyMon1PP - wEnemyMon1DVs
call CopyData
ld de, wEnemyMonPP
ld bc, NUM_MOVES
@@ -5270,7 +5270,7 @@ ReloadMoveData:
ld [wd11e], a
dec a
ld hl, Moves
- ld bc, MoveEnd - Moves
+ ld bc, MOVE_LENGTH
call AddNTimes
ld a, BANK(Moves)
call FarCopyData ; copy the move's stats
@@ -5302,7 +5302,7 @@ MetronomePickMove:
call BattleRandom
and a
jr z, .pickMoveLoop
- cp NUM_ATTACKS + 1 ; max normal move number + 1 (this is Struggle's move number)
+ cp NUM_ATTACKS ; max move number (including Struggle)
jr nc, .pickMoveLoop
cp METRONOME
jr z, .pickMoveLoop
@@ -6257,7 +6257,7 @@ GetCurrentMove:
ld [wd0b5], a
dec a
ld hl, Moves
- ld bc, MoveEnd - Moves
+ ld bc, MOVE_LENGTH
call AddNTimes
ld a, BANK(Moves)
call FarCopyData
diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm
index 3762caea..6f860cd2 100644
--- a/engine/battle/effects.asm
+++ b/engine/battle/effects.asm
@@ -776,7 +776,7 @@ FellText:
text_end
PrintStatText:
- ld hl, StatsTextStrings
+ ld hl, StatModTextStrings
ld c, "@"
.findStatName_outer
dec b
@@ -791,7 +791,7 @@ PrintStatText:
ld bc, $a
jp CopyData
-INCLUDE "data/battle/stat_names.asm"
+INCLUDE "data/battle/stat_mod_names.asm"
INCLUDE "data/battle/stat_modifiers.asm"
diff --git a/engine/battle/trainer_ai.asm b/engine/battle/trainer_ai.asm
index a2c5e5fb..3efbeeda 100644
--- a/engine/battle/trainer_ai.asm
+++ b/engine/battle/trainer_ai.asm
@@ -264,7 +264,7 @@ ReadMove:
push bc
dec a
ld hl, Moves
- ld bc, MoveEnd - Moves
+ ld bc, MOVE_LENGTH
call AddNTimes
ld de, wEnemyMoveNum
call CopyData
diff --git a/engine/debug/debug_menu.asm b/engine/debug/debug_menu.asm
index e0e2d511..43638be3 100644
--- a/engine/debug/debug_menu.asm
+++ b/engine/debug/debug_menu.asm
@@ -1048,7 +1048,7 @@ Func_feeef:
ld [wd11e], a
ld hl, BaseStats + 15
dec a
- ld bc, MonBaseStatsEnd - MonBaseStats
+ ld bc, BASE_DATA_SIZE
call AddNTimes
ld de, wMoves
ld bc, NUM_MOVES
@@ -1122,7 +1122,7 @@ Func_fef92:
ld a, [de]
inc a
ld [de], a
- cp NUM_ATTACKS + 1
+ cp NUM_ATTACKS
jr c, Func_fef68
ld a, 1
ld [de], a
@@ -1133,7 +1133,7 @@ Func_fef9e:
dec a
ld [de], a
jr nz, Func_fef68
- ld a, NUM_ATTACKS
+ ld a, NUM_ATTACKS - 1
ld [de], a
jr Func_fef68
diff --git a/engine/events/heal_party.asm b/engine/events/heal_party.asm
index 7aaa1bd1..b26bc90f 100644
--- a/engine/events/heal_party.asm
+++ b/engine/events/heal_party.asm
@@ -35,7 +35,7 @@ HealParty:
push bc
ld hl, Moves
- ld bc, MoveEnd - Moves
+ ld bc, MOVE_LENGTH
call AddNTimes
ld de, wcd6d
ld a, BANK(Moves)
diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm
index 9b584e9b..9d6a3c06 100644
--- a/engine/items/item_effects.asm
+++ b/engine/items/item_effects.asm
@@ -1417,7 +1417,7 @@ ItemUseMedicine:
ld [hl], a
pop hl
call .recalculateStats
- ld hl, VitaminText
+ ld hl, VitaminStats
ld a, [wcf91]
sub HP_UP - 1
ld c, a
@@ -1563,12 +1563,7 @@ VitaminNoEffectText:
text_far _VitaminNoEffectText
text_end
-VitaminText:
- db "HEALTH@"
- db "ATTACK@"
- db "DEFENSE@"
- db "SPEED@"
- db "SPECIAL@"
+INCLUDE "data/battle/stat_names.asm"
ItemUseBait:
ld hl, ThrewBaitText
@@ -2772,7 +2767,7 @@ GetMaxPP:
dec a
push hl
ld hl, Moves
- ld bc, MoveEnd - Moves
+ ld bc, MOVE_LENGTH
call AddNTimes
ld de, wcd6d
ld a, BANK(Moves)
diff --git a/engine/pokemon/add_mon.asm b/engine/pokemon/add_mon.asm
index 54d7b4de..e86b7b61 100644
--- a/engine/pokemon/add_mon.asm
+++ b/engine/pokemon/add_mon.asm
@@ -265,7 +265,7 @@ AddPartyMon_WriteMovePP:
push de
push bc
ld hl, Moves
- ld bc, MoveEnd - Moves
+ ld bc, MOVE_LENGTH
call AddNTimes
ld de, wcd6d
ld a, BANK(Moves)
diff --git a/engine/pokemon/evos_moves.asm b/engine/pokemon/evos_moves.asm
index 7c1476d3..165ae02d 100644
--- a/engine/pokemon/evos_moves.asm
+++ b/engine/pokemon/evos_moves.asm
@@ -166,7 +166,7 @@ Evolution_PartyMonLoop: ; loop over party mons
ld a, [wd11e]
dec a
ld hl, BaseStats
- ld bc, MonBaseStatsEnd - MonBaseStats
+ ld bc, BASE_DATA_SIZE
call AddNTimes
ld de, wMonHeader
call CopyData
@@ -584,7 +584,7 @@ WriteMonMoves:
push hl
dec a
ld hl, Moves
- ld bc, MoveEnd - Moves
+ ld bc, MOVE_LENGTH
call AddNTimes
ld de, wBuffer
ld a, BANK(Moves)
diff --git a/engine/pokemon/learn_move.asm b/engine/pokemon/learn_move.asm
index ff704003..9f4ac2d2 100644
--- a/engine/pokemon/learn_move.asm
+++ b/engine/pokemon/learn_move.asm
@@ -44,7 +44,7 @@ DontAbandonLearning:
push de
dec a
ld hl, Moves
- ld bc, MoveEnd - Moves
+ ld bc, MOVE_LENGTH
call AddNTimes
ld de, wBuffer
ld a, BANK(Moves)
diff --git a/home/pokemon.asm b/home/pokemon.asm
index 8dec32d9..93b536ff 100644
--- a/home/pokemon.asm
+++ b/home/pokemon.asm
@@ -426,11 +426,11 @@ GetMonHeader::
predef IndexToPokedex ; convert pokemon ID in [wd11e] to pokedex number
ld a, [wd11e]
dec a
- ld bc, MonBaseStatsEnd - MonBaseStats
+ ld bc, BASE_DATA_SIZE
ld hl, BaseStats
call AddNTimes
ld de, wMonHeader
- ld bc, MonBaseStatsEnd - MonBaseStats
+ ld bc, BASE_DATA_SIZE
call CopyData
jr .done
.specialID
diff --git a/macros.asm b/macros.asm
index cf7f21ef..7b64db91 100644
--- a/macros.asm
+++ b/macros.asm
@@ -1,3 +1,4 @@
+INCLUDE "macros/asserts.asm"
INCLUDE "macros/const.asm"
INCLUDE "macros/predef.asm"
INCLUDE "macros/farcall.asm"
diff --git a/macros/asserts.asm b/macros/asserts.asm
new file mode 100644
index 00000000..d04c7942
--- /dev/null
+++ b/macros/asserts.asm
@@ -0,0 +1,87 @@
+; Macros to verify assumptions about the data or code
+
+table_width: MACRO
+CURRENT_TABLE_WIDTH = \1
+IF DEF(CURRENT_TABLE_START)
+PURGE CURRENT_TABLE_START
+ENDC
+IF _NARG == 2
+CURRENT_TABLE_START EQUS "\2"
+ELSE
+CURRENT_TABLE_START EQUS "._table_width\@"
+CURRENT_TABLE_START:
+ENDC
+ENDM
+
+assert_table_length: MACRO
+x = \1
+ ASSERT x * CURRENT_TABLE_WIDTH == @ - CURRENT_TABLE_START, \
+ "{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes"
+ENDM
+
+list_start: MACRO
+list_index = 0
+IF DEF(CURRENT_LIST_START)
+PURGE CURRENT_LIST_START
+ENDC
+IF _NARG == 1
+CURRENT_LIST_START EQUS "\1"
+ELSE
+CURRENT_LIST_START EQUS "._list_start\@"
+CURRENT_LIST_START:
+ENDC
+ENDM
+
+li: MACRO
+ ASSERT !STRIN(\1, "@"), STRCAT("String terminator \"@\" in list entry: ", \1)
+ db \1, "@"
+list_index = list_index + 1
+ENDM
+
+assert_list_length: MACRO
+x = \1
+ ASSERT x == list_index, \
+ "{CURRENT_LIST_START}: expected {d:x} entries, got {d:list_index}"
+ENDM
+
+def_grass_wildmons: MACRO
+;\1: encounter rate
+if DEF(CURRENT_GRASS_WILDMONS_LABEL)
+PURGE CURRENT_GRASS_WILDMONS_LABEL
+endc
+CURRENT_GRASS_WILDMONS_RATE = \1
+CURRENT_GRASS_WILDMONS_LABEL EQUS "._def_grass_wildmons_\1"
+CURRENT_GRASS_WILDMONS_LABEL:
+ db \1
+ENDM
+
+end_grass_wildmons: MACRO
+ IF CURRENT_GRASS_WILDMONS_RATE == 0
+ assert 1 == @ - CURRENT_GRASS_WILDMONS_LABEL, \
+ "def_grass_wildmons {d:CURRENT_GRASS_WILDMONS_RATE}: expected 1 byte"
+ ELSE
+ assert WILDDATA_LENGTH == @ - CURRENT_GRASS_WILDMONS_LABEL, \
+ "def_grass_wildmons {d:CURRENT_GRASS_WILDMONS_RATE}: expected {d:WILDDATA_LENGTH} bytes"
+ ENDC
+ENDM
+
+def_water_wildmons: MACRO
+;\1: encounter rate
+if DEF(CURRENT_WATER_WILDMONS_LABEL)
+PURGE CURRENT_WATER_WILDMONS_LABEL
+endc
+CURRENT_WATER_WILDMONS_RATE = \1
+CURRENT_WATER_WILDMONS_LABEL EQUS "._def_water_wildmons_\1"
+CURRENT_WATER_WILDMONS_LABEL:
+ db \1
+ENDM
+
+end_water_wildmons: MACRO
+ IF CURRENT_WATER_WILDMONS_RATE == 0
+ assert 1 == @ - CURRENT_WATER_WILDMONS_LABEL, \
+ "def_water_wildmons {d:CURRENT_WATER_WILDMONS_RATE}: expected 1 byte"
+ ELSE
+ assert WILDDATA_LENGTH == @ - CURRENT_WATER_WILDMONS_LABEL, \
+ "def_water_wildmons {d:CURRENT_WATER_WILDMONS_RATE}: expected {d:WILDDATA_LENGTH} bytes"
+ ENDC
+ENDM
diff --git a/macros/const.asm b/macros/const.asm
index 57380e97..3df9ecd8 100644
--- a/macros/const.asm
+++ b/macros/const.asm
@@ -38,3 +38,11 @@ else
const_value = \1
endc
ENDM
+
+rb_skip: MACRO
+IF _NARG == 1
+rsset _RS + \1
+ELSE
+rsset _RS + 1
+ENDC
+ENDM
diff --git a/wram.asm b/wram.asm
index 64dcd152..9965b328 100644
--- a/wram.asm
+++ b/wram.asm
@@ -956,7 +956,10 @@ wPlayerMonAccuracyMod::
wPlayerMonEvasionMod::
ds 1
- ds 3
+ ds 2
+wPlayerMonStatModsEnd::
+
+ ds 1
wEnemyMonUnmodifiedLevel::
ds 1
@@ -1001,7 +1004,10 @@ wEnemyMonEvasionMod::
wInGameTradeReceiveMonSpecies::
ds 1
- ds 2
+ ds 1
+wEnemyMonStatModsEnd::
+
+ ds 1
wNPCMovementDirections2Index::
@@ -2288,6 +2294,7 @@ wMonHGrowthRate::
wMonHLearnset::
; bit field
flag_array NUM_TMS + NUM_HMS
+
ds 1
wMonHeaderEnd::