summaryrefslogtreecommitdiff
path: root/data
diff options
context:
space:
mode:
Diffstat (limited to 'data')
-rw-r--r--data/battle/effect_command_pointers.asm2
-rw-r--r--data/battle_anims/framesets.asm2
-rw-r--r--data/battle_anims/oam.asm2
-rw-r--r--data/battle_anims/object_gfx.asm2
-rw-r--r--data/battle_anims/objects.asm2
-rw-r--r--data/battle_tower/classes.asm4
-rw-r--r--data/battle_tower/parties.asm3
-rw-r--r--data/battle_tower/unknown.asm3
-rw-r--r--data/collision/collision_permissions.asm2
-rw-r--r--data/credits_strings.asm2
-rw-r--r--data/decorations/attributes.asm4
-rw-r--r--data/decorations/decorations.asm3
-rw-r--r--data/default_options.asm2
-rw-r--r--data/events/bug_contest_flags.asm3
-rw-r--r--data/events/bug_contest_winners.asm3
-rw-r--r--data/events/elevator_floors.asm2
-rw-r--r--data/events/engine_flags.asm3
-rw-r--r--data/events/happiness_changes.asm4
-rw-r--r--data/events/npc_trades.asm2
-rw-r--r--data/events/odd_eggs.asm7
-rw-r--r--data/icon_pointers.asm4
-rw-r--r--data/items/attributes.asm7
-rw-r--r--data/items/buena_prizes.asm3
-rw-r--r--data/items/descriptions.asm5
-rw-r--r--data/items/fruit_trees.asm2
-rw-r--r--data/items/marts.asm4
-rw-r--r--data/maps/landmarks.asm3
-rw-r--r--data/maps/maps.asm2
-rw-r--r--data/maps/outdoor_sprites.asm2
-rw-r--r--data/maps/roofs.asm5
-rw-r--r--data/maps/sgb_roof_pal_inds.asm2
-rw-r--r--data/maps/spawn_points.asm3
-rw-r--r--data/mon_menu.asm4
-rw-r--r--data/moves/animations.asm4
-rw-r--r--data/moves/descriptions.asm3
-rw-r--r--data/moves/effects_pointers.asm2
-rw-r--r--data/moves/moves.asm4
-rw-r--r--data/moves/tmhm_moves.asm3
-rw-r--r--data/party_menu_qualities.asm2
-rw-r--r--data/phone/non_trainer_names.asm4
-rw-r--r--data/phone/phone_contacts.asm2
-rw-r--r--data/phone/special_calls.asm2
-rw-r--r--data/pokemon/base_stats.asm4
-rw-r--r--data/pokemon/cries.asm3
-rw-r--r--data/pokemon/dex_entry_pointers.asm2
-rw-r--r--data/pokemon/dex_order_alpha.asm2
-rw-r--r--data/pokemon/dex_order_new.asm2
-rw-r--r--data/pokemon/egg_move_pointers.asm2
-rw-r--r--data/pokemon/evos_attacks_pointers.asm2
-rw-r--r--data/pokemon/gen1_base_special.asm2
-rw-r--r--data/pokemon/gen1_order.asm4
-rw-r--r--data/pokemon/menu_icons.asm2
-rw-r--r--data/pokemon/names.asm4
-rw-r--r--data/pokemon/palettes.asm9
-rw-r--r--data/pokemon/pic_pointers.asm3
-rw-r--r--data/pokemon/unown_pic_pointers.asm2
-rw-r--r--data/pokemon/unown_words.asm4
-rw-r--r--data/radio/buenas_passwords.asm3
-rw-r--r--data/radio/channel_music.asm4
-rw-r--r--data/radio/oaks_pkmn_talk_routes.asm2
-rw-r--r--data/sprite_anims/framesets.asm4
-rw-r--r--data/sprite_anims/oam.asm4
-rw-r--r--data/sprite_anims/sequences.asm4
-rw-r--r--data/sprites/emotes.asm2
-rw-r--r--data/sprites/facings.asm9
-rw-r--r--data/sprites/map_objects.asm3
-rw-r--r--data/sprites/sprite_mons.asm2
-rw-r--r--data/sprites/sprites.asm2
-rw-r--r--data/tilesets.asm4
-rw-r--r--data/trainers/attributes.asm3
-rw-r--r--data/trainers/dvs.asm2
-rw-r--r--data/trainers/encounter_music.asm8
-rw-r--r--data/trainers/genders.asm2
-rw-r--r--data/trainers/palettes.asm4
-rw-r--r--data/trainers/party_pointers.asm2
-rw-r--r--data/trainers/pic_pointers.asm2
-rw-r--r--data/trainers/sprites.asm2
-rw-r--r--data/types/names.asm4
-rw-r--r--data/types/search_strings.asm2
-rw-r--r--data/types/search_types.asm2
-rw-r--r--data/wild/fish.asm2
-rw-r--r--data/wild/probabilities.asm4
-rw-r--r--data/wild/treemons.asm4
83 files changed, 230 insertions, 32 deletions
diff --git a/data/battle/effect_command_pointers.asm b/data/battle/effect_command_pointers.asm
index d1f747a1f..7239e8150 100644
--- a/data/battle/effect_command_pointers.asm
+++ b/data/battle/effect_command_pointers.asm
@@ -4,6 +4,7 @@
BattleCommandPointers:
; entries correspond to macros/scripts/battle_commands.asm
+ table_width 2, BattleCommandPointers
dw BattleCommand_CheckTurn
dw BattleCommand_CheckObedience
dw BattleCommand_UsedMoveText
@@ -179,3 +180,4 @@ BattleCommandPointers:
dw BattleCommand_SuperEffectiveLoopText
dw BattleCommand_StartLoop
dw BattleCommand_Curl
+ assert_table_length NUM_EFFECT_COMMANDS
diff --git a/data/battle_anims/framesets.asm b/data/battle_anims/framesets.asm
index a5641570c..555ec30f1 100644
--- a/data/battle_anims/framesets.asm
+++ b/data/battle_anims/framesets.asm
@@ -1,5 +1,6 @@
BattleAnimFrameData:
; entries correspond to BATTLEANIMFRAMESET_* constants
+ table_width 2, BattleAnimFrameData
dw .Frameset_00 ; BATTLEANIMFRAMESET_00
dw .Frameset_01 ; BATTLEANIMFRAMESET_01
dw .Frameset_02 ; BATTLEANIMFRAMESET_02
@@ -185,6 +186,7 @@ BattleAnimFrameData:
dw .Frameset_b6 ; BATTLEANIMFRAMESET_B6
dw .Frameset_b7 ; BATTLEANIMFRAMESET_B7
dw .Frameset_b8 ; BATTLEANIMFRAMESET_B8
+ assert_table_length NUM_BATTLEANIMFRAMESETS
.Frameset_00:
frame BATTLEANIMOAMSET_00, 6
diff --git a/data/battle_anims/oam.asm b/data/battle_anims/oam.asm
index 4bf4a331e..73f24ec54 100644
--- a/data/battle_anims/oam.asm
+++ b/data/battle_anims/oam.asm
@@ -1,5 +1,6 @@
BattleAnimOAMData:
; entries correspond to BATTLEANIMOAMSET_* constants
+ table_width 4, BattleAnimOAMData
; vtile offset, data length, data pointer
dbbw $00, 16, .OAMData_00 ; BATTLEANIMOAMSET_00
dbbw $04, 9, .OAMData_01 ; BATTLEANIMOAMSET_01
@@ -217,6 +218,7 @@ BattleAnimOAMData:
dbbw $00, 6, .OAMData_d5 ; BATTLEANIMOAMSET_D5
dbbw $00, 14, .OAMData_d6 ; BATTLEANIMOAMSET_D6
dbbw $00, 12, .OAMData_d7 ; BATTLEANIMOAMSET_D7
+ assert_table_length NUM_BATTLEANIMOAMSETS
.OAMData_11:
dbsprite -1, -1, 4, 0, $00, $0
diff --git a/data/battle_anims/object_gfx.asm b/data/battle_anims/object_gfx.asm
index b132c0ed6..103b97ebe 100644
--- a/data/battle_anims/object_gfx.asm
+++ b/data/battle_anims/object_gfx.asm
@@ -6,6 +6,7 @@ ENDM
AnimObjGFX:
; entries correspond to ANIM_GFX_* constants
+ table_width 4, AnimObjGFX
anim_obj_gfx 0, AnimObj00GFX
anim_obj_gfx 21, AnimObjHitGFX
anim_obj_gfx 6, AnimObjCutGFX
@@ -48,3 +49,4 @@ AnimObjGFX:
anim_obj_gfx 24, AnimObjAeroblastGFX
anim_obj_gfx 1, NULL
anim_obj_gfx 1, NULL
+ assert_table_length NUM_ANIM_GFX + 1
diff --git a/data/battle_anims/objects.asm b/data/battle_anims/objects.asm
index 16dc7e653..1f7d7b4ab 100644
--- a/data/battle_anims/objects.asm
+++ b/data/battle_anims/objects.asm
@@ -18,6 +18,7 @@ ENDM
BattleAnimObjects:
; entries correspond to ANIM_OBJ_* constants
+ table_width BATTLEANIMOBJ_LENGTH, BattleAnimObjects
; ANIM_OBJ_HIT_BIG_YFIX
battleanimobj RELATIVE_X, $ff, BATTLEANIMFRAMESET_00, BATTLEANIMFUNC_NULL, PAL_BATTLE_OB_GRAY, ANIM_GFX_HIT
; ANIM_OBJ_HIT_YFIX
@@ -394,3 +395,4 @@ BattleAnimObjects:
battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B7, BATTLEANIMFUNC_NULL, PAL_BATTLE_OB_ENEMY, ANIM_GFX_PLAYERHEAD
; ANIM_OBJ_PLAYERHEAD_2ROW
battleanimobj ABSOLUTE_X, $00, BATTLEANIMFRAMESET_B8, BATTLEANIMFUNC_NULL, PAL_BATTLE_OB_PLAYER, ANIM_GFX_ENEMYFEET
+ assert_table_length NUM_ANIM_OBJS
diff --git a/data/battle_tower/classes.asm b/data/battle_tower/classes.asm
index c53197548..863759c70 100644
--- a/data/battle_tower/classes.asm
+++ b/data/battle_tower/classes.asm
@@ -2,6 +2,8 @@ BattleTowerTrainers:
; The trainer class is not used in Crystal 1.0 due to a bug.
; Instead, the sixth character in the trainer's name is used.
; See BattleTowerText in engine/events/battle_tower/trainer_text.asm.
+ table_width (NAME_LENGTH - 1) + 1, BattleTowerTrainers
+ ; name, class
db "HANSON@@@@", FISHER
db "SAWYER@@@@", POKEMANIAC
db "MASUDA@@@@", GUITARIST
@@ -23,6 +25,7 @@ BattleTowerTrainers:
db "KAUFMAN@@@", SWIMMERM
db "LANCASTER@", SKIER
db "McMAHILL@@", CAMPER
+ assert_table_length BATTLETOWER_NUM_UNIQUE_MON
; The following can only be sampled in Crystal 1.1.
db "OBRIEN@@@@", GENTLEMAN
db "FROST@@@@@", BEAUTY
@@ -73,3 +76,4 @@ BattleTowerTrainers:
db "DYKSTRA@@@", SWIMMERF
db "EATON@@@@@", BIKER
db "WONG@@@@@@", FIREBREATHER
+ assert_table_length BATTLETOWER_NUM_UNIQUE_TRAINERS
diff --git a/data/battle_tower/parties.asm b/data/battle_tower/parties.asm
index 9c67c2f72..d972944b6 100644
--- a/data/battle_tower/parties.asm
+++ b/data/battle_tower/parties.asm
@@ -1,5 +1,6 @@
BattleTowerMons:
; 10 groups (one per floor level) of 21 mons (BATTLETOWER_NUM_UNIQUE_MON).
+ table_width NICKNAMED_MON_STRUCT_LENGTH, BattleTowerMons
; BattleTowerMons group 1
@@ -5489,3 +5490,5 @@ BattleTowerMons:
bigdw 214 ; SAtk
bigdw 214 ; SDef
db "RANTA-N@@@@"
+
+ assert_table_length 10 * BATTLETOWER_NUM_UNIQUE_MON
diff --git a/data/battle_tower/unknown.asm b/data/battle_tower/unknown.asm
index 3437c444b..af51b1e83 100644
--- a/data/battle_tower/unknown.asm
+++ b/data/battle_tower/unknown.asm
@@ -1,6 +1,7 @@
BattleTowerTrainerData:: ; ???
; 70 tables (BATTLETOWER_NUM_UNIQUE_TRAINERS) of 18 two-argument entries (total size BATTLETOWER_TRAINERDATALENGTH).
; Second argument points to an entry in Unknown_170470, to which the first argument is compared.
+ table_width BATTLETOWER_TRAINERDATALENGTH, BattleTowerTrainerData
; BattleTowerTrainerData table 1:
db $37, 3
@@ -1401,3 +1402,5 @@ BattleTowerTrainerData:: ; ???
db $22, 7
db $d1, 0
db $32, 13
+
+ assert_table_length BATTLETOWER_NUM_UNIQUE_TRAINERS
diff --git a/data/collision/collision_permissions.asm b/data/collision/collision_permissions.asm
index 57172ca51..188338ca9 100644
--- a/data/collision/collision_permissions.asm
+++ b/data/collision/collision_permissions.asm
@@ -1,5 +1,6 @@
TileCollisionTable::
; entries correspond to COLL_* constants
+ table_width 1, TileCollisionTable
db LAND_TILE ; COLL_FLOOR
db LAND_TILE ; COLL_01
db LAND_TILE ; 02
@@ -256,3 +257,4 @@ TileCollisionTable::
db LAND_TILE ; fd
db LAND_TILE ; fe
db WALL_TILE ; COLL_FF
+ assert_table_length $100
diff --git a/data/credits_strings.asm b/data/credits_strings.asm
index 22ee7c382..c3a502088 100644
--- a/data/credits_strings.asm
+++ b/data/credits_strings.asm
@@ -1,5 +1,6 @@
CreditsStringsPointers:
; entries correspond to constants/credits_constants.asm
+ table_width 2, CreditsStringsPointers
dw .SatoshiTajiri
dw .JunichiMasuda
dw .TetsuyaWatanabe
@@ -103,6 +104,7 @@ CreditsStringsPointers:
dw .UsCoordination
dw .TextTranslation
dw .PaadTesting
+ assert_table_length NUM_CREDITS_STRINGS
.SatoshiTajiri: db " SATOSHI TAJIRI@" ; "たじり さとし@"
.JunichiMasuda: db " JUNICHI MASUDA@" ; "ますだ じゅんいち@"
diff --git a/data/decorations/attributes.asm b/data/decorations/attributes.asm
index 77cd1388b..5e62c3a11 100644
--- a/data/decorations/attributes.asm
+++ b/data/decorations/attributes.asm
@@ -1,5 +1,5 @@
decoration: MACRO
- ; type, name, command, event flag, tile/sprite
+ ; type, name, action, event flag, tile/sprite
db \1, \2, \3
dw \4
db \5
@@ -7,6 +7,7 @@ ENDM
DecorationAttributes:
; entries correspond to deco constants
+ table_width DECOATTR_STRUCT_LENGTH, DecorationAttributes
decoration DECO_PLANT, 0, 0, EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1, 0
decoration DECO_PLANT, PUT_IT_AWAY, PUT_AWAY_BED, EVENT_TEMPORARY_UNTIL_MAP_RELOAD_1, 0
decoration DECO_BED, FEATHERY_BED, SET_UP_BED, EVENT_DECO_BED_1, $1b
@@ -60,3 +61,4 @@ DecorationAttributes:
decoration DECO_DOLL, TENTACOOL, SET_UP_DOLL, EVENT_DECO_TENTACOOL_DOLL, SPRITE_TENTACOOL
decoration DECO_PLANT, GOLD_TROPHY, SET_UP_DOLL, EVENT_DECO_GOLD_TROPHY, SPRITE_GOLD_TROPHY
decoration DECO_PLANT, SILVER_TROPHY, SET_UP_DOLL, EVENT_DECO_SILVER_TROPHY, SPRITE_SILVER_TROPHY
+ assert_table_length NUM_DECOS + NUM_DECO_CATEGORIES + 1
diff --git a/data/decorations/decorations.asm b/data/decorations/decorations.asm
index e3ec28f1c..a5519efa0 100644
--- a/data/decorations/decorations.asm
+++ b/data/decorations/decorations.asm
@@ -1,5 +1,7 @@
DecorationIDs:
; see constants/deco_constants.asm
+ table_width 1, DecorationIDs
+
db DECO_FEATHERY_BED ; 2
db DECO_PINK_BED ; 3
db DECO_POLKADOT_BED ; 4
@@ -52,4 +54,5 @@ DecorationIDs:
db DECO_GOLD_TROPHY_DOLL ; 33
db DECO_SILVER_TROPHY_DOLL ; 34
+ assert_table_length NUM_DECOS
db -1 ; end
diff --git a/data/default_options.asm b/data/default_options.asm
index 00fcfa10e..76de34387 100644
--- a/data/default_options.asm
+++ b/data/default_options.asm
@@ -14,3 +14,5 @@ DefaultOptions:
db $00
db $00
+.End
+ assert DefaultOptions.End - DefaultOptions == wOptionsEnd - wOptions
diff --git a/data/events/bug_contest_flags.asm b/data/events/bug_contest_flags.asm
index 734bf11f8..f3d9ff74d 100644
--- a/data/events/bug_contest_flags.asm
+++ b/data/events/bug_contest_flags.asm
@@ -1,5 +1,5 @@
BugCatchingContestantEventFlagTable:
-; there are NUM_BUG_CONTESTANTS entries
+ table_width 2, BugCatchingContestantEventFlagTable
dw EVENT_BUG_CATCHING_CONTESTANT_1A
dw EVENT_BUG_CATCHING_CONTESTANT_2A
dw EVENT_BUG_CATCHING_CONTESTANT_3A
@@ -10,3 +10,4 @@ BugCatchingContestantEventFlagTable:
dw EVENT_BUG_CATCHING_CONTESTANT_8A
dw EVENT_BUG_CATCHING_CONTESTANT_9A
dw EVENT_BUG_CATCHING_CONTESTANT_10A
+ assert_table_length NUM_BUG_CONTESTANTS
diff --git a/data/events/bug_contest_winners.asm b/data/events/bug_contest_winners.asm
index e29ce0436..525283afb 100644
--- a/data/events/bug_contest_winners.asm
+++ b/data/events/bug_contest_winners.asm
@@ -1,5 +1,5 @@
BugContestantPointers:
-; there are NUM_BUG_CONTESTANTS + 1 entries
+ table_width 2, BugContestantPointers
dw BugContestant_BugCatcherDon ; this reverts back to the player
dw BugContestant_BugCatcherDon
dw BugContestant_BugCatcherEd
@@ -11,6 +11,7 @@ BugContestantPointers:
dw BugContestant_BugCatcherJosh
dw BugContestant_YoungsterSamuel
dw BugContestant_SchoolboyKipp
+ assert_table_length NUM_BUG_CONTESTANTS + 1
; contestant format:
; db class, id
diff --git a/data/events/elevator_floors.asm b/data/events/elevator_floors.asm
index abc793cf2..861653bae 100644
--- a/data/events/elevator_floors.asm
+++ b/data/events/elevator_floors.asm
@@ -1,5 +1,6 @@
ElevatorFloorNames:
; entries correspond to FLOOR_* constants
+ table_width 2, ElevatorFloorNames
dw .B4F
dw .B3F
dw .B2F
@@ -16,6 +17,7 @@ ElevatorFloorNames:
dw ._10F
dw ._11F
dw .ROOF
+ assert_table_length NUM_FLOORS
.B4F: db "B4F@"
.B3F: db "B3F@"
diff --git a/data/events/engine_flags.asm b/data/events/engine_flags.asm
index 526413651..8b5d6b89e 100644
--- a/data/events/engine_flags.asm
+++ b/data/events/engine_flags.asm
@@ -6,6 +6,7 @@ ENDM
EngineFlags:
; entries correspond to ENGINE_* constants
+ table_width 3, EngineFlags
; pokegear
engine_flag wPokegearFlags, POKEGEAR_RADIO_CARD_F
@@ -197,3 +198,5 @@ EngineFlags:
engine_flag wSwarmFlags, SWARMFLAGS_DUNSPARCE_SWARM_F
engine_flag wSwarmFlags, SWARMFLAGS_YANMA_SWARM_F
+
+ assert_table_length NUM_ENGINE_FLAGS
diff --git a/data/events/happiness_changes.asm b/data/events/happiness_changes.asm
index c0c7b0101..e6228cf08 100644
--- a/data/events/happiness_changes.asm
+++ b/data/events/happiness_changes.asm
@@ -1,6 +1,7 @@
HappinessChanges:
; entries correspond to HAPPINESS_* constants
-; change if happiness < 100, change if happiness < 200, change otherwise
+ table_width 3, HappinessChanges
+ ; change if happiness < 100, change if happiness < 200, change otherwise
db +5, +3, +2 ; Gained a level
db +5, +3, +2 ; Vitamin
db +1, +1, +0 ; X Item
@@ -20,3 +21,4 @@ HappinessChanges:
db -15, -15, -20 ; Used Revival Herb (bitter)
db +3, +3, +1 ; Grooming
db +10, +6, +4 ; Gained a level in the place where it was caught
+ assert_table_length NUM_HAPPINESS_CHANGES
diff --git a/data/events/npc_trades.asm b/data/events/npc_trades.asm
index 03d409571..543a50b1e 100644
--- a/data/events/npc_trades.asm
+++ b/data/events/npc_trades.asm
@@ -8,6 +8,7 @@ ENDM
NPCTrades:
; entries correspond to NPCTRADE_* constants
+ table_width NPCTRADE_STRUCT_LENGTH, NPCTrades
npctrade TRADE_DIALOGSET_COLLECTOR, ABRA, MACHOP, "MUSCLE@@@@@", $37, $66, GOLD_BERRY, 37460, "MIKE@@@@@@@", TRADE_GENDER_EITHER
npctrade TRADE_DIALOGSET_COLLECTOR, BELLSPROUT, ONIX, "ROCKY@@@@@@", $96, $66, BITTER_BERRY, 48926, "KYLE@@@@@@@", TRADE_GENDER_EITHER
npctrade TRADE_DIALOGSET_HAPPY, KRABBY, VOLTORB, "VOLTY@@@@@@", $98, $88, PRZCUREBERRY, 29189, "TIM@@@@@@@@", TRADE_GENDER_EITHER
@@ -15,3 +16,4 @@ NPCTrades:
npctrade TRADE_DIALOGSET_NEWBIE, HAUNTER, XATU, "PAUL@@@@@@@", $96, $86, MYSTERYBERRY, 15616, "CHRIS@@@@@@", TRADE_GENDER_EITHER
npctrade TRADE_DIALOGSET_GIRL, CHANSEY, AERODACTYL, "AEROY@@@@@@", $96, $66, GOLD_BERRY, 26491, "KIM@@@@@@@@", TRADE_GENDER_EITHER
npctrade TRADE_DIALOGSET_COLLECTOR, DUGTRIO, MAGNETON, "MAGGIE@@@@@", $96, $66, METAL_COAT, 50082, "FOREST@@@@@", TRADE_GENDER_EITHER
+ assert_table_length NUM_NPC_TRADES
diff --git a/data/events/odd_eggs.asm b/data/events/odd_eggs.asm
index 5b251645a..20bac2dc1 100644
--- a/data/events/odd_eggs.asm
+++ b/data/events/odd_eggs.asm
@@ -1,9 +1,12 @@
+NUM_ODD_EGGS EQU 14
+
prob: MACRO
prob_total = prob_total + (\1)
dw prob_total * $ffff / 100
ENDM
OddEggProbabilities:
+ table_width 2, OddEggProbabilities
prob_total = 0
; Pichu
prob 8
@@ -26,8 +29,10 @@ prob_total = 0
; Tyrogue
prob 10
prob 1
+ assert_table_length NUM_ODD_EGGS
OddEggs:
+ table_width NICKNAMED_MON_STRUCT_LENGTH, OddEggs
db PICHU
db NO_ITEM
@@ -392,3 +397,5 @@ OddEggs:
bigdw 9 ; SAtk
bigdw 9 ; SDef
db "EGG@@@@@@@@"
+
+ assert_table_length NUM_ODD_EGGS
diff --git a/data/icon_pointers.asm b/data/icon_pointers.asm
index bfe07abb6..1ad361c1c 100644
--- a/data/icon_pointers.asm
+++ b/data/icon_pointers.asm
@@ -1,5 +1,6 @@
IconPointers:
-; entries correspond to ICON_* constants
+; entries correspond to ICON_* constants (see constants/icon_constants.asm)
+ table_width 2, IconPointers
dw NullIcon
dw PoliwagIcon
dw JigglypuffIcon
@@ -39,3 +40,4 @@ IconPointers:
dw SlowpokeIcon
dw SudowoodoIcon
dw BigmonIcon
+ assert_table_length NUM_ICONS + 1
diff --git a/data/items/attributes.asm b/data/items/attributes.asm
index 60ada8b6e..459212835 100644
--- a/data/items/attributes.asm
+++ b/data/items/attributes.asm
@@ -6,7 +6,8 @@ item_attribute: MACRO
ENDM
ItemAttributes:
-; entries correspond to item ids
+; entries correspond to item ids (see constants/item_constants.asm)
+ table_width ITEMATTR_STRUCT_LENGTH, ItemAttributes
; MASTER_BALL
item_attribute 0, HELD_NONE, 0, CANT_SELECT, BALL, ITEMMENU_NOUSE, ITEMMENU_CLOSE
; ULTRA_BALL
@@ -387,6 +388,7 @@ ItemAttributes:
item_attribute 50, HELD_NONE, 0, CANT_SELECT, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
; ITEM_BE
item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
+ assert_table_length NUM_ITEMS
; TM01
item_attribute 3000, HELD_NONE, 0, CANT_SELECT, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
; TM02
@@ -491,6 +493,7 @@ ItemAttributes:
item_attribute 3000, HELD_NONE, 0, CANT_SELECT, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
; TM50
item_attribute 2000, HELD_NONE, 0, CANT_SELECT, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
+ assert_table_length NUM_ITEMS + NUM_TMS + 2 ; count ITEM_C3 and ITEM_DC
; HM01
item_attribute 0, HELD_NONE, 0, CANT_SELECT | CANT_TOSS, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
; HM02
@@ -505,6 +508,7 @@ ItemAttributes:
item_attribute 0, HELD_NONE, 0, CANT_SELECT | CANT_TOSS, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
; HM07
item_attribute 0, HELD_NONE, 0, CANT_SELECT | CANT_TOSS, TM_HM, ITEMMENU_PARTY, ITEMMENU_NOUSE
+ assert_table_length NUM_ITEMS + NUM_TMS + 2 + NUM_HMS ; count ITEM_C3 and ITEM_DC
; ITEM_FA
item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
; $fb
@@ -519,3 +523,4 @@ ItemAttributes:
item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
; $00
item_attribute $9999, HELD_NONE, 0, NO_LIMITS, ITEM, ITEMMENU_NOUSE, ITEMMENU_NOUSE
+ assert_table_length $100
diff --git a/data/items/buena_prizes.asm b/data/items/buena_prizes.asm
index 673082a8d..4e2005c4b 100644
--- a/data/items/buena_prizes.asm
+++ b/data/items/buena_prizes.asm
@@ -1,5 +1,5 @@
BuenaPrizeItems:
-; there are NUM_BUENA_PRIZES entries
+ table_width 2, BuenaPrizeItems
db ULTRA_BALL, 2
db FULL_RESTORE, 2
db NUGGET, 3
@@ -9,3 +9,4 @@ BuenaPrizeItems:
db CARBOS, 5
db CALCIUM, 5
db HP_UP, 5
+ assert_table_length NUM_BUENA_PRIZES
diff --git a/data/items/descriptions.asm b/data/items/descriptions.asm
index 2a7900b3a..2654a3194 100644
--- a/data/items/descriptions.asm
+++ b/data/items/descriptions.asm
@@ -1,5 +1,6 @@
ItemDescriptions:
-; entries correspond to item ids
+; entries correspond to item ids (see constants/item_constants.asm)
+ table_width 2, ItemDescriptions
dw MasterBallDesc
dw UltraBallDesc
dw BrightpowderDesc
@@ -190,6 +191,7 @@ ItemDescriptions:
dw MusicMailDesc
dw MirageMailDesc
dw TeruSama25Desc
+ assert_table_length NUM_ITEMS
dw TeruSama26Desc
dw TeruSama26Desc
dw TeruSama26Desc
@@ -255,6 +257,7 @@ ItemDescriptions:
dw TeruSama31Desc
dw TeruSama32Desc
dw TeruSama33Desc
+ assert_table_length $ff
MasterBallDesc:
db "The best BALL. It"
diff --git a/data/items/fruit_trees.asm b/data/items/fruit_trees.asm
index 9c4e4793d..ff39551e7 100644
--- a/data/items/fruit_trees.asm
+++ b/data/items/fruit_trees.asm
@@ -1,5 +1,6 @@
FruitTreeItems:
; entries correspond to FRUITTREE_* constants
+ table_width 1, FruitTreeItems
db BERRY ; ROUTE_29
db BERRY ; ROUTE_30_1
db BERRY ; ROUTE_38
@@ -30,3 +31,4 @@ FruitTreeItems:
db ICE_BERRY ; PEWTER_CITY_1
db MINT_BERRY ; PEWTER_CITY_2
db BURNT_BERRY ; FUCHSIA_CITY
+ assert_table_length NUM_FRUIT_TREES
diff --git a/data/items/marts.asm b/data/items/marts.asm
index 37bf846b4..d96281dfd 100644
--- a/data/items/marts.asm
+++ b/data/items/marts.asm
@@ -1,5 +1,6 @@
Marts:
-; entries correspond to MART_* constants
+; entries correspond to MART_* constants (see constants/mart_constants.asm)
+ table_width 2, Marts
dw MartCherrygrove
dw MartCherrygroveDex
dw MartViolet
@@ -34,6 +35,7 @@ Marts:
dw MartMtMoon
dw MartIndigoPlateau
dw MartUnderground
+ assert_table_length NUM_MARTS
MartCherrygrove:
db 4 ; # items
diff --git a/data/maps/landmarks.asm b/data/maps/landmarks.asm
index 9a28ee52e..8dfff34dc 100644
--- a/data/maps/landmarks.asm
+++ b/data/maps/landmarks.asm
@@ -6,6 +6,7 @@ ENDM
Landmarks:
; entries correspond to constants/landmark_constants.asm
+ table_width 4, Landmarks
dbbw 0, 0, SpecialMapName
landmark 140, 100, NewBarkTownName
landmark 128, 100, Route29Name
@@ -53,6 +54,7 @@ Landmarks:
landmark 112, 72, DarkCaveName
landmark 124, 88, Route46Name
landmark 148, 68, SilverCaveName
+ assert_table_length KANTO_LANDMARK
landmark 52, 108, PalletTownName
landmark 52, 92, Route1Name
landmark 52, 76, ViridianCityName
@@ -102,6 +104,7 @@ Landmarks:
landmark 12, 100, TohjoFallsName
landmark 20, 68, Route28Name
landmark 140, 116, FastShipName
+ assert_table_length NUM_LANDMARKS
NewBarkTownName: db "NEW BARK¯TOWN@"
CherrygroveCityName: db "CHERRYGROVE¯CITY@"
diff --git a/data/maps/maps.asm b/data/maps/maps.asm
index bfbd91c34..381e5328f 100644
--- a/data/maps/maps.asm
+++ b/data/maps/maps.asm
@@ -16,6 +16,7 @@ ENDM
MapGroupPointers::
; pointers to the first map of each map group
+ table_width 2, MapGroupPointers
dw MapGroup_Olivine ; 1
dw MapGroup_Mahogany ; 2
dw MapGroup_Dungeons ; 3
@@ -42,6 +43,7 @@ MapGroupPointers::
dw MapGroup_NewBark ; 24
dw MapGroup_Saffron ; 25
dw MapGroup_Cherrygrove ; 26
+ assert_table_length NUM_MAP_GROUPS
MapGroup_Olivine:
map OlivinePokecenter1F, TILESET_POKECENTER, INDOOR, LANDMARK_OLIVINE_CITY, MUSIC_POKEMON_CENTER, FALSE, PALETTE_DAY, FISHGROUP_SHORE
diff --git a/data/maps/outdoor_sprites.asm b/data/maps/outdoor_sprites.asm
index 6398a9511..d666aec75 100644
--- a/data/maps/outdoor_sprites.asm
+++ b/data/maps/outdoor_sprites.asm
@@ -3,6 +3,7 @@
OutdoorSprites:
; entries correspond to map groups
+ table_width 2, OutdoorSprites
dw OlivineGroupSprites
dw MahoganyGroupSprites
dw DungeonsGroupSprites
@@ -29,6 +30,7 @@ OutdoorSprites:
dw NewBarkGroupSprites
dw SaffronGroupSprites
dw CherrygroveGroupSprites
+ assert_table_length NUM_MAP_GROUPS
PalletGroupSprites:
db SPRITE_SUICUNE
diff --git a/data/maps/roofs.asm b/data/maps/roofs.asm
index ac1ea5569..dee4991d0 100644
--- a/data/maps/roofs.asm
+++ b/data/maps/roofs.asm
@@ -5,10 +5,12 @@
const ROOF_AZALEA ; 2
const ROOF_OLIVINE ; 3
const ROOF_GOLDENROD ; 4
+NUM_ROOFS EQU const_value
MapGroupRoofs:
; entries correspond to map groups
; values are indexes for Roofs (see below)
+ table_width 1, MapGroupRoofs
db -1 ; 0
db ROOF_OLIVINE ; 1 (Olivine)
db ROOF_AZALEA ; 2 (Mahogany)
@@ -36,11 +38,14 @@ MapGroupRoofs:
db ROOF_NEW_BARK ; 24 (New Bark)
db -1 ; 25
db ROOF_NEW_BARK ; 26 (Cherrygrove)
+ assert_table_length NUM_MAP_GROUPS + 1
Roofs:
; entries correspond to ROOF_* constants
+ table_width ROOF_LENGTH * LEN_2BPP_TILE, Roofs
INCBIN "gfx/tilesets/roofs/new_bark.2bpp"
INCBIN "gfx/tilesets/roofs/violet.2bpp"
INCBIN "gfx/tilesets/roofs/azalea.2bpp"
INCBIN "gfx/tilesets/roofs/olivine.2bpp"
INCBIN "gfx/tilesets/roofs/goldenrod.2bpp"
+ assert_table_length NUM_ROOFS
diff --git a/data/maps/sgb_roof_pal_inds.asm b/data/maps/sgb_roof_pal_inds.asm
index a2620e194..617b0041a 100644
--- a/data/maps/sgb_roof_pal_inds.asm
+++ b/data/maps/sgb_roof_pal_inds.asm
@@ -2,6 +2,7 @@
MapGroupRoofSGBPalInds:
; entries correspond to map groups
+ table_width 1, MapGroupRoofSGBPalInds
db PREDEFPAL_ROUTES
db PREDEFPAL_OLIVINE
db PREDEFPAL_MAHOGANY
@@ -29,3 +30,4 @@ MapGroupRoofSGBPalInds:
db PREDEFPAL_NEW_BARK
db PREDEFPAL_SAFFRON
db PREDEFPAL_CHERRYGROVE
+ assert_table_length NUM_MAP_GROUPS + 1
diff --git a/data/maps/spawn_points.asm b/data/maps/spawn_points.asm
index 2d99fff73..326995485 100644
--- a/data/maps/spawn_points.asm
+++ b/data/maps/spawn_points.asm
@@ -6,6 +6,7 @@ ENDM
SpawnPoints:
; entries correspond to SPAWN_* constants
+ table_width 4, SpawnPoints
spawn PLAYERS_HOUSE_2F, 3, 3
spawn VIRIDIAN_POKECENTER_1F, 5, 3
@@ -39,3 +40,5 @@ SpawnPoints:
spawn FAST_SHIP_CABINS_SW_SSW_NW, 6, 2
spawn N_A, -1, -1
+
+ assert_table_length NUM_SPAWNS + 1
diff --git a/data/mon_menu.asm b/data/mon_menu.asm
index f2b9f3ac0..a69f4132f 100644
--- a/data/mon_menu.asm
+++ b/data/mon_menu.asm
@@ -20,6 +20,7 @@ MonMenuOptionStrings:
MonMenuOptions:
; category, item, value; actions are in PokemonActionSubmenu (see engine/pokemon/mon_menu.asm)
+ table_width 3, MonMenuOptions
; moves
db MONMENU_FIELD_MOVE, MONMENUITEM_CUT, CUT
db MONMENU_FIELD_MOVE, MONMENUITEM_FLY, FLY
@@ -43,4 +44,5 @@ MonMenuOptions:
db MONMENU_MENUOPTION, MONMENUITEM_MOVE, MONMENUVALUE_MOVE
db MONMENU_MENUOPTION, MONMENUITEM_MAIL, MONMENUVALUE_MAIL
db MONMENU_MENUOPTION, MONMENUITEM_ERROR, MONMENUVALUE_ERROR
- db -1
+ assert_table_length NUM_MONMENUITEMS
+ db -1 ; end
diff --git a/data/moves/animations.asm b/data/moves/animations.asm
index bba0d186f..87b904c0f 100644
--- a/data/moves/animations.asm
+++ b/data/moves/animations.asm
@@ -1,5 +1,6 @@
BattleAnimations::
; entries correspond to constants/move_constants.asm
+ table_width 2, BattleAnimations
dw BattleAnim_0
dw BattleAnim_Pound
dw BattleAnim_KarateChop
@@ -252,10 +253,12 @@ BattleAnimations::
dw BattleAnim_RockSmash
dw BattleAnim_Whirlpool
dw BattleAnim_BeatUp
+ assert_table_length NUM_ATTACKS + 1
dw BattleAnim_252
dw BattleAnim_253
dw BattleAnim_254
dw BattleAnim_SweetScent2
+ assert_table_length $100
; $100
dw BattleAnim_ThrowPokeBall
dw BattleAnim_SendOutMon
@@ -279,6 +282,7 @@ BattleAnimations::
dw BattleAnim_Wobble
dw BattleAnim_Shake
dw BattleAnim_HitConfusion
+ assert_table_length NUM_BATTLE_ANIMS + 1
BattleAnim_0:
BattleAnim_252:
diff --git a/data/moves/descriptions.asm b/data/moves/descriptions.asm
index 1d2e5b37f..697be13ee 100644
--- a/data/moves/descriptions.asm
+++ b/data/moves/descriptions.asm
@@ -1,5 +1,6 @@
MoveDescriptions::
; entries correspond to move ids (see constants/move_constants.asm)
+ table_width 2, MoveDescriptions
dw PoundDescription
dw KarateChopDescription
dw DoubleslapDescription
@@ -251,11 +252,13 @@ MoveDescriptions::
dw RockSmashDescription
dw WhirlpoolDescription
dw BeatUpDescription
+ assert_table_length NUM_ATTACKS
dw MoveFCDescription
dw MoveFDDescription
dw MoveFEDescription
dw MoveFFDescription
dw Move00Description
+ assert_table_length $100
MoveFCDescription:
MoveFDDescription:
diff --git a/data/moves/effects_pointers.asm b/data/moves/effects_pointers.asm
index 94834de71..6f8fb2e99 100644
--- a/data/moves/effects_pointers.asm
+++ b/data/moves/effects_pointers.asm
@@ -1,5 +1,6 @@
MoveEffectsPointers:
; entries correspond to EFFECT_* constants
+ table_width 2, MoveEffectsPointers
dw NormalHit
dw DoSleep
dw PoisonHit
@@ -157,3 +158,4 @@ MoveEffectsPointers:
dw BeatUp
dw Fly
dw DefenseCurl
+ assert_table_length NUM_MOVE_EFECTS
diff --git a/data/moves/moves.asm b/data/moves/moves.asm
index 49c17d9bc..31f9d27d0 100644
--- a/data/moves/moves.asm
+++ b/data/moves/moves.asm
@@ -11,7 +11,8 @@ move: MACRO
ENDM
Moves:
-; entries correspond to constants/move_constants.asm
+; entries correspond to move ids (see constants/move_constants.asm)
+ table_width MOVE_LENGTH, Moves
move POUND, EFFECT_NORMAL_HIT, 40, NORMAL, 100, 35, 0
move KARATE_CHOP, EFFECT_NORMAL_HIT, 50, FIGHTING, 100, 25, 0
move DOUBLESLAP, EFFECT_MULTI_HIT, 15, NORMAL, 85, 10, 0
@@ -263,3 +264,4 @@ Moves:
move ROCK_SMASH, EFFECT_DEFENSE_DOWN_HIT, 20, FIGHTING, 100, 15, 50
move WHIRLPOOL, EFFECT_TRAP_TARGET, 15, WATER, 70, 15, 0
move BEAT_UP, EFFECT_BEAT_UP, 10, DARK, 100, 10, 0
+ assert_table_length NUM_ATTACKS
diff --git a/data/moves/tmhm_moves.asm b/data/moves/tmhm_moves.asm
index 28f28c24d..7ecf9fec8 100644
--- a/data/moves/tmhm_moves.asm
+++ b/data/moves/tmhm_moves.asm
@@ -3,6 +3,7 @@
TMHMMoves:
; entries correspond to *_TMNUM constants (see constants/item_constants.asm)
+ table_width 1, TMHMMoves
; TMs
n = 1
@@ -43,4 +44,6 @@ PURGE MOVE_FOR_MT
n = n + 1
endr
+ assert_table_length NUM_TM_HM_TUTOR
+
db 0 ; end
diff --git a/data/party_menu_qualities.asm b/data/party_menu_qualities.asm
index 7250743af..a89e6beef 100644
--- a/data/party_menu_qualities.asm
+++ b/data/party_menu_qualities.asm
@@ -20,6 +20,7 @@ ENDM
PartyMenuQualityPointers:
; entries correspond to PARTYMENUACTION_* constants
+ table_width 2, PartyMenuQualityPointers
dw .Default ; PARTYMENUACTION_CHOOSE_POKEMON
dw .Default ; PARTYMENUACTION_HEALING_ITEM
dw .Default ; PARTYMENUACTION_SWITCH
@@ -30,6 +31,7 @@ PartyMenuQualityPointers:
dw .Gender ; PARTYMENUACTION_GIVE_MON_FEMALE
dw .Default ; PARTYMENUACTION_GIVE_ITEM
dw .Mobile ; PARTYMENUACTION_MOBILE
+ assert_table_length NUM_PARTYMENUACTIONS
.Default: partymenuqualities NICKNAMES, HP_BAR, HP_DIGITS, LEVEL, STATUS
.TMHM: partymenuqualities NICKNAMES, TMHM_COMPAT, LEVEL, STATUS
diff --git a/data/phone/non_trainer_names.asm b/data/phone/non_trainer_names.asm
index 1792c506a..deef730d5 100644
--- a/data/phone/non_trainer_names.asm
+++ b/data/phone/non_trainer_names.asm
@@ -1,11 +1,13 @@
NonTrainerCallerNames:
-; entries correspond to PHONECONTACT_* constants
+; entries correspond to PHONECONTACT_* constants (see constants/trainer_constants.asm)
+ table_width 2, NonTrainerCallerNames
dw .none
dw .mom
dw .bikeshop
dw .bill
dw .elm
dw .buena
+ assert_table_length NUM_NONTRAINER_PHONECONTACTS + 1
.none: db "----------@"
.mom: db "MOM:@"
diff --git a/data/phone/phone_contacts.asm b/data/phone/phone_contacts.asm
index 0c67e5109..aad39ae23 100644
--- a/data/phone/phone_contacts.asm
+++ b/data/phone/phone_contacts.asm
@@ -10,6 +10,7 @@ ENDM
PhoneContacts:
; entries correspond to PHONE_* constants
+ table_width PHONE_CONTACT_SIZE, PhoneContacts
phone TRAINER_NONE, PHONE_00, N_A, 0, UnusedPhoneScript, 0, UnusedPhoneScript
phone TRAINER_NONE, PHONECONTACT_MOM, PLAYERS_HOUSE_1F, ANYTIME, MomPhoneCalleeScript, 0, UnusedPhoneScript
phone TRAINER_NONE, PHONECONTACT_BIKESHOP, OAKS_LAB, 0, UnusedPhoneScript, 0, UnusedPhoneScript
@@ -48,3 +49,4 @@ PhoneContacts:
phone HIKER, PARRY1, ROUTE_45, ANYTIME, ParryPhoneCalleeScript, ANYTIME, ParryPhoneCallerScript
phone PICNICKER, ERIN1, ROUTE_46, ANYTIME, ErinPhoneCalleeScript, ANYTIME, ErinPhoneCallerScript
phone TRAINER_NONE, PHONECONTACT_BUENA, GOLDENROD_DEPT_STORE_ROOF, ANYTIME, BuenaPhoneCalleeScript, ANYTIME, BuenaPhoneCallerScript
+ assert_table_length NUM_PHONE_CONTACTS + 1
diff --git a/data/phone/special_calls.asm b/data/phone/special_calls.asm
index 826a5d283..a516e5957 100644
--- a/data/phone/special_calls.asm
+++ b/data/phone/special_calls.asm
@@ -7,6 +7,7 @@ ENDM
SpecialPhoneCallList:
; entries correspond to SPECIALCALL_* constants
+ table_width SPECIALCALL_SIZE, SpecialPhoneCallList
specialcall SpecialCallOnlyWhenOutside, PHONECONTACT_ELM, ElmPhoneCallerScript
specialcall SpecialCallOnlyWhenOutside, PHONECONTACT_ELM, ElmPhoneCallerScript
specialcall SpecialCallOnlyWhenOutside, PHONECONTACT_ELM, ElmPhoneCallerScript
@@ -15,3 +16,4 @@ SpecialPhoneCallList:
specialcall SpecialCallWhereverYouAre, PHONECONTACT_BIKESHOP, BikeShopPhoneCallerScript
specialcall SpecialCallWhereverYouAre, PHONECONTACT_MOM, MomPhoneLectureScript
specialcall SpecialCallOnlyWhenOutside, PHONECONTACT_ELM, ElmPhoneCallerScript
+ assert_table_length NUM_SPECIALCALLS
diff --git a/data/pokemon/base_stats.asm b/data/pokemon/base_stats.asm
index 74928d860..0bd395fd8 100644
--- a/data/pokemon/base_stats.asm
+++ b/data/pokemon/base_stats.asm
@@ -32,6 +32,7 @@ endr
ENDM
BaseData::
+ table_width BASE_DATA_SIZE, BaseData
INCLUDE "data/pokemon/base_stats/bulbasaur.asm"
INCLUDE "data/pokemon/base_stats/ivysaur.asm"
INCLUDE "data/pokemon/base_stats/venusaur.asm"
@@ -283,5 +284,4 @@ INCLUDE "data/pokemon/base_stats/tyranitar.asm"
INCLUDE "data/pokemon/base_stats/lugia.asm"
INCLUDE "data/pokemon/base_stats/ho_oh.asm"
INCLUDE "data/pokemon/base_stats/celebi.asm"
-.End:
- assert BaseData.End - BaseData == NUM_POKEMON * BASE_DATA_SIZE
+ assert_table_length NUM_POKEMON
diff --git a/data/pokemon/cries.asm b/data/pokemon/cries.asm
index e6255e040..dc0d08df9 100644
--- a/data/pokemon/cries.asm
+++ b/data/pokemon/cries.asm
@@ -5,6 +5,7 @@ ENDM
PokemonCries::
; entries correspond to constants/pokemon_constants.asm
+ table_width MON_CRY_LENGTH, PokemonCries
mon_cry CRY_BULBASAUR, 128, 129 ; BULBASAUR
mon_cry CRY_BULBASAUR, 32, 256 ; IVYSAUR
mon_cry CRY_BULBASAUR, 0, 320 ; VENUSAUR
@@ -256,7 +257,9 @@ PokemonCries::
mon_cry CRY_TYPHLOSION, 0, 256 ; LUGIA
mon_cry CRY_AIPOM, 0, 384 ; HO_OH
mon_cry CRY_ENTEI, 330, 273 ; CELEBI
+ assert_table_length NUM_POKEMON
mon_cry CRY_NIDORAN_M, 0, 0 ; 252
mon_cry CRY_NIDORAN_M, 0, 0 ; 253
mon_cry CRY_NIDORAN_M, 0, 0 ; 254
mon_cry CRY_NIDORAN_M, 0, 0 ; 255
+ assert_table_length $ff
diff --git a/data/pokemon/dex_entry_pointers.asm b/data/pokemon/dex_entry_pointers.asm
index 6081757e5..890745500 100644
--- a/data/pokemon/dex_entry_pointers.asm
+++ b/data/pokemon/dex_entry_pointers.asm
@@ -1,5 +1,6 @@
PokedexDataPointerTable:
; entries correspond to constants/pokemon_constants.asm
+ table_width 2, PokedexDataPointerTable
dw BulbasaurPokedexEntry
dw IvysaurPokedexEntry
dw VenusaurPokedexEntry
@@ -251,3 +252,4 @@ PokedexDataPointerTable:
dw LugiaPokedexEntry
dw HoOhPokedexEntry
dw CelebiPokedexEntry
+ assert_table_length NUM_POKEMON
diff --git a/data/pokemon/dex_order_alpha.asm b/data/pokemon/dex_order_alpha.asm
index b93238cb9..63e80c3c2 100644
--- a/data/pokemon/dex_order_alpha.asm
+++ b/data/pokemon/dex_order_alpha.asm
@@ -1,6 +1,7 @@
; Every Pokémon sorted alphabetically by name.
AlphabeticalPokedexOrder:
+ table_width 1, AlphabeticalPokedexOrder
db ABRA
db AERODACTYL
db AIPOM
@@ -252,3 +253,4 @@ AlphabeticalPokedexOrder:
db YANMA
db ZAPDOS
db ZUBAT
+ assert_table_length NUM_POKEMON
diff --git a/data/pokemon/dex_order_new.asm b/data/pokemon/dex_order_new.asm
index 853fbe73d..77977cb3a 100644
--- a/data/pokemon/dex_order_new.asm
+++ b/data/pokemon/dex_order_new.asm
@@ -1,6 +1,7 @@
; Every Pokémon sorted in New Pokédex Order.
NewPokedexOrder:
+ table_width 1, NewPokedexOrder
db CHIKORITA
db BAYLEEF
db MEGANIUM
@@ -252,3 +253,4 @@ NewPokedexOrder:
db MEWTWO
db MEW
db CELEBI
+ assert_table_length NUM_POKEMON
diff --git a/data/pokemon/egg_move_pointers.asm b/data/pokemon/egg_move_pointers.asm
index dacf4cffd..e6e087bb4 100644
--- a/data/pokemon/egg_move_pointers.asm
+++ b/data/pokemon/egg_move_pointers.asm
@@ -1,4 +1,5 @@
EggMovePointers::
+ table_width 2, EggMovePointers
dw BulbasaurEggMoves
dw NoEggMoves
dw NoEggMoves
@@ -250,3 +251,4 @@ EggMovePointers::
dw NoEggMoves
dw NoEggMoves
dw NoEggMoves
+ assert_table_length NUM_POKEMON
diff --git a/data/pokemon/evos_attacks_pointers.asm b/data/pokemon/evos_attacks_pointers.asm
index 7b27c6a74..3b4155252 100644
--- a/data/pokemon/evos_attacks_pointers.asm
+++ b/data/pokemon/evos_attacks_pointers.asm
@@ -1,6 +1,7 @@
; Evolutions and attacks are grouped together since they're both checked at level-up.
EvosAttacksPointers::
+ table_width 2, EvosAttacksPointers
dw BulbasaurEvosAttacks
dw IvysaurEvosAttacks
dw VenusaurEvosAttacks
@@ -252,3 +253,4 @@ EvosAttacksPointers::
dw LugiaEvosAttacks
dw HoOhEvosAttacks
dw CelebiEvosAttacks
+ assert_table_length NUM_POKEMON
diff --git a/data/pokemon/gen1_base_special.asm b/data/pokemon/gen1_base_special.asm
index 306ce31d9..1c523a014 100644
--- a/data/pokemon/gen1_base_special.asm
+++ b/data/pokemon/gen1_base_special.asm
@@ -1,6 +1,7 @@
; The original base Special stat for each Pokémon from Red/Blue
KantoMonSpecials:
+ table_width 1, KantoMonSpecials
db 65 ; BULBASAUR
db 80 ; IVYSAUR
db 100 ; VENUSAUR
@@ -152,3 +153,4 @@ KantoMonSpecials:
db 100 ; DRAGONITE
db 154 ; MEWTWO
db 100 ; MEW
+ assert_table_length JOHTO_POKEMON - 1
diff --git a/data/pokemon/gen1_order.asm b/data/pokemon/gen1_order.asm
index 45efcafa0..ca40398a4 100644
--- a/data/pokemon/gen1_order.asm
+++ b/data/pokemon/gen1_order.asm
@@ -1,4 +1,5 @@
Pokered_MonIndices:
+ table_width 1, Pokered_MonIndices
db RHYDON
db KANGASKHAN
db NIDORAN_M
@@ -189,7 +190,7 @@ Pokered_MonIndices:
db BELLSPROUT
db WEEPINBELL
db VICTREEBEL
-
+ assert_table_length 190 ; gen 1 mon indexes
db CHIKORITA
db BAYLEEF
db MEGANIUM
@@ -252,3 +253,4 @@ Pokered_MonIndices:
db QWILFISH
db WOBBUFFET
db WOBBUFFET
+ assert_table_length NUM_POKEMON + 1
diff --git a/data/pokemon/menu_icons.asm b/data/pokemon/menu_icons.asm
index f378cbfbe..506d060c3 100644
--- a/data/pokemon/menu_icons.asm
+++ b/data/pokemon/menu_icons.asm
@@ -1,6 +1,7 @@
; party menu icons
MonMenuIcons:
+ table_width 1, MonMenuIcons
db ICON_BULBASAUR ; BULBASAUR
db ICON_BULBASAUR ; IVYSAUR
db ICON_BULBASAUR ; VENUSAUR
@@ -252,3 +253,4 @@ MonMenuIcons:
db ICON_LUGIA ; LUGIA
db ICON_HO_OH ; HO_OH
db ICON_HUMANSHAPE ; CELEBI
+ assert_table_length NUM_POKEMON
diff --git a/data/pokemon/names.asm b/data/pokemon/names.asm
index 266b0c020..ad1d0ef57 100644
--- a/data/pokemon/names.asm
+++ b/data/pokemon/names.asm
@@ -1,4 +1,5 @@
PokemonNames::
+ table_width NAME_LENGTH - 1, PokemonNames
db "BULBASAUR@"
db "IVYSAUR@@@"
db "VENUSAUR@@"
@@ -250,8 +251,11 @@ PokemonNames::
db "LUGIA@@@@@"
db "HO-OH@@@@@"
db "CELEBI@@@@"
+ assert_table_length NUM_POKEMON
db "?????@@@@@"
db "EGG@@@@@@@"
+ assert_table_length EGG
db "?????@@@@@"
db "?????@@@@@"
db "?????@@@@@"
+ assert_table_length $100
diff --git a/data/pokemon/palettes.asm b/data/pokemon/palettes.asm
index 917a629bf..5cefbd38e 100644
--- a/data/pokemon/palettes.asm
+++ b/data/pokemon/palettes.asm
@@ -5,6 +5,9 @@ PokemonPalettes:
; only the middle two colors are included, not black or white.
; Shiny palettes are defined directly, not generated.
+ ; 2 middle palettes, front and shiny, with 2 colors each
+ table_width PAL_COLOR_SIZE * 2 * 2, PokemonPalettes
+
; 000
RGB 30, 22, 17
RGB 16, 14, 19
@@ -515,6 +518,8 @@ INCLUDE "gfx/pokemon/ho_oh/shiny.pal"
INCBIN "gfx/pokemon/celebi/front.gbcpal", middle_colors
INCLUDE "gfx/pokemon/celebi/shiny.pal"
+ assert_table_length NUM_POKEMON + 1
+
; 252
RGB 30, 26, 11
RGB 23, 16, 00
@@ -525,6 +530,8 @@ INCLUDE "gfx/pokemon/celebi/shiny.pal"
INCBIN "gfx/pokemon/egg/front.gbcpal", middle_colors
INCLUDE "gfx/pokemon/egg/shiny.pal"
+ assert_table_length EGG + 1
+
; 254
RGB 30, 26, 11
RGB 23, 16, 00
@@ -538,3 +545,5 @@ INCLUDE "gfx/pokemon/egg/shiny.pal"
; 255 shiny
RGB 23, 23, 23
RGB 17, 17, 17
+
+ assert_table_length $100
diff --git a/data/pokemon/pic_pointers.asm b/data/pokemon/pic_pointers.asm
index c45a9837e..a57c63d83 100644
--- a/data/pokemon/pic_pointers.asm
+++ b/data/pokemon/pic_pointers.asm
@@ -2,6 +2,7 @@
PokemonPicPointers::
; entries correspond to Pokémon species, two apiece
+ table_width 3 * 2, PokemonPicPointers
dba_pic BulbasaurFrontpic
dba_pic BulbasaurBackpic
dba_pic IvysaurFrontpic
@@ -507,7 +508,9 @@ PokemonPicPointers::
dba_pic HoOhBackpic
dba_pic CelebiFrontpic
dba_pic CelebiBackpic
+ assert_table_length NUM_POKEMON
dbw -1, -1 ; unused
dbw -1, -1 ; unused
dba_pic EggPic
dbw -1, -1 ; unused
+ assert_table_length EGG
diff --git a/data/pokemon/unown_pic_pointers.asm b/data/pokemon/unown_pic_pointers.asm
index 1ae0da6b6..6ecfb4e62 100644
--- a/data/pokemon/unown_pic_pointers.asm
+++ b/data/pokemon/unown_pic_pointers.asm
@@ -1,5 +1,6 @@
UnownPicPointers::
; entries correspond to Unown letters, two apiece
+ table_width 3 * 2, UnownPicPointers
dba_pic UnownAFrontpic
dba_pic UnownABackpic
dba_pic UnownBFrontpic
@@ -52,3 +53,4 @@ UnownPicPointers::
dba_pic UnownYBackpic
dba_pic UnownZFrontpic
dba_pic UnownZBackpic
+ assert_table_length NUM_UNOWN
diff --git a/data/pokemon/unown_words.asm b/data/pokemon/unown_words.asm
index 6ddd0f466..329a6aae0 100644
--- a/data/pokemon/unown_words.asm
+++ b/data/pokemon/unown_words.asm
@@ -9,7 +9,8 @@ ENDM
UnownWords:
; entries correspond to UNOWN_* form constants
- dw UnownWordA
+ table_width 2, UnownWords
+ dw UnownWordA ; unused
dw UnownWordA
dw UnownWordB
dw UnownWordC
@@ -36,6 +37,7 @@ UnownWords:
dw UnownWordX
dw UnownWordY
dw UnownWordZ
+ assert_table_length NUM_UNOWN + 1
UnownWordA: unownword "ANGRY"
UnownWordB: unownword "BEAR"
diff --git a/data/radio/buenas_passwords.asm b/data/radio/buenas_passwords.asm
index 85e1b951b..078bcdd4c 100644
--- a/data/radio/buenas_passwords.asm
+++ b/data/radio/buenas_passwords.asm
@@ -1,5 +1,5 @@
BuenasPasswordTable:
-; there are NUM_PASSWORD_CATEGORIES entries
+ table_width 2, BuenasPasswordTable
dw .JohtoStarters
dw .Beverages
dw .HealingItems
@@ -11,6 +11,7 @@ BuenasPasswordTable:
dw .Moves
dw .XItems
dw .RadioStations
+ assert_table_length NUM_PASSWORD_CATEGORIES
; string type, points, option 1, option 2, option 3
.JohtoStarters: db BUENA_MON, 10, CYNDAQUIL, TOTODILE, CHIKORITA
diff --git a/data/radio/channel_music.asm b/data/radio/channel_music.asm
index 62504ed11..5a74ea7ad 100644
--- a/data/radio/channel_music.asm
+++ b/data/radio/channel_music.asm
@@ -1,5 +1,6 @@
RadioChannelSongs:
-; entries correspond to radio channel ids
+; entries correspond to radio channel ids (see constants/radio_constants.asm)
+ table_width 2, RadioChannelSongs
dw MUSIC_POKEMON_TALK
dw MUSIC_POKEMON_CENTER
dw MUSIC_TITLE
@@ -11,3 +12,4 @@ RadioChannelSongs:
dw MUSIC_POKE_FLUTE_CHANNEL
dw MUSIC_RUINS_OF_ALPH_RADIO
dw MUSIC_LAKE_OF_RAGE_ROCKET_RADIO
+ assert_table_length NUM_RADIO_CHANNELS
diff --git a/data/radio/oaks_pkmn_talk_routes.asm b/data/radio/oaks_pkmn_talk_routes.asm
index db2447401..acef4bdd3 100644
--- a/data/radio/oaks_pkmn_talk_routes.asm
+++ b/data/radio/oaks_pkmn_talk_routes.asm
@@ -1,7 +1,6 @@
; Oak's Pokémon Talk will list wild Pokémon on these maps.
OaksPKMNTalkRoutes:
-; there are NUM_OAKS_POKEMON_TALK_ROUTES entries
map_id ROUTE_29
map_id ROUTE_46
map_id ROUTE_30
@@ -17,3 +16,4 @@ OaksPKMNTalkRoutes:
map_id ROUTE_45
map_id ROUTE_36
map_id ROUTE_31
+.End
diff --git a/data/sprite_anims/framesets.asm b/data/sprite_anims/framesets.asm
index 5a154acd8..b7ebc3352 100644
--- a/data/sprite_anims/framesets.asm
+++ b/data/sprite_anims/framesets.asm
@@ -1,5 +1,6 @@
SpriteAnimFrameData:
-; entries correspond to SPRITE_ANIM_FRAMESET_* constants
+; entries correspond to SPRITE_ANIM_FRAMESET_* constants (see constants/sprite_anim_constants.asm)
+ table_width 2, SpriteAnimFrameData
dw .Frameset_00
dw .Frameset_PartyMon
dw .Frameset_PartyMonWithMail
@@ -66,6 +67,7 @@ SpriteAnimFrameData:
dw .Frameset_IntroUnownF
dw .Frameset_CelebiLeft
dw .Frameset_CelebiRight
+ assert_table_length NUM_SPRITE_ANIM_FRAMESETS
.Frameset_00:
frame SPRITE_ANIM_OAMSET_RED_WALK_1, 32
diff --git a/data/sprite_anims/oam.asm b/data/sprite_anims/oam.asm
index 10e6ed1d9..6207c60a5 100644
--- a/data/sprite_anims/oam.asm
+++ b/data/sprite_anims/oam.asm
@@ -1,5 +1,6 @@
SpriteAnimOAMData:
-; entries correspond to SPRITE_ANIM_OAMSET_* constants
+; entries correspond to SPRITE_ANIM_OAMSET_* constants (see constants/sprite_anim_constants.asm)
+ table_width 3, SpriteAnimOAMData
; vtile offset, data pointer
dbw $00, .OAMData_RedWalk ; SPRITE_ANIM_OAMSET_RED_WALK_1
dbw $04, .OAMData_RedWalk ; SPRITE_ANIM_OAMSET_RED_WALK_2
@@ -141,6 +142,7 @@ SpriteAnimOAMData:
dbw $08, .OAMData_GameFreakLogo4_11 ; SPRITE_ANIM_OAMSET_GAMEFREAK_LOGO_9
dbw $04, .OAMData_GameFreakLogo4_11 ; SPRITE_ANIM_OAMSET_GAMEFREAK_LOGO_10
dbw $00, .OAMData_GameFreakLogo4_11 ; SPRITE_ANIM_OAMSET_GAMEFREAK_LOGO_11
+ assert_table_length NUM_SPRITE_ANIM_OAMSETS
.OAMData_1x1_Palette0:
db 1
diff --git a/data/sprite_anims/sequences.asm b/data/sprite_anims/sequences.asm
index d458d2eee..c41e96cc1 100644
--- a/data/sprite_anims/sequences.asm
+++ b/data/sprite_anims/sequences.asm
@@ -1,5 +1,6 @@
SpriteAnimSeqData:
-; entries correspond to SPRITE_ANIM_INDEX_* constants
+; entries correspond to SPRITE_ANIM_INDEX_* constants (see constants/sprite_anim_constants.asm)
+ table_width 3, SpriteAnimSeqData
; frameset, sequence, tile
; SPRITE_ANIM_INDEX_PARTY_MON
db SPRITE_ANIM_FRAMESET_PARTY_MON, SPRITE_ANIM_SEQ_PARTY_MON, SPRITE_ANIM_DICT_DEFAULT
@@ -91,3 +92,4 @@ SpriteAnimSeqData:
db SPRITE_ANIM_FRAMESET_INTRO_SUICUNE_AWAY, SPRITE_ANIM_SEQ_INTRO_SUICUNE_AWAY, SPRITE_ANIM_DICT_DEFAULT
; SPRITE_ANIM_INDEX_CELEBI
db SPRITE_ANIM_FRAMESET_CELEBI_LEFT, SPRITE_ANIM_SEQ_NULL, SPRITE_ANIM_DICT_DEFAULT
+ assert_table_length NUM_SPRITE_ANIM_INDEXES
diff --git a/data/sprites/emotes.asm b/data/sprites/emotes.asm
index 2371c4624..32f4c2598 100644
--- a/data/sprites/emotes.asm
+++ b/data/sprites/emotes.asm
@@ -7,6 +7,7 @@ ENDM
Emotes:
; entries correspond to EMOTE_* constants
+ table_width EMOTE_LENGTH, Emotes
emote ShockEmote, 4, $f8
emote QuestionEmote, 4, $f8
emote HappyEmote, 4, $f8
@@ -19,3 +20,4 @@ Emotes:
emote FishingRodGFX, 2, $fc
emote BoulderDustGFX, 2, $fe
emote GrassRustleGFX, 1, $fe
+ assert_table_length NUM_EMOTES
diff --git a/data/sprites/facings.asm b/data/sprites/facings.asm
index aebf97ff5..b1bc7abf5 100644
--- a/data/sprites/facings.asm
+++ b/data/sprites/facings.asm
@@ -1,5 +1,6 @@
Facings:
-; entries correspond to FACING_* constants
+; entries correspond to FACING_* constants (see constants/map_object_constants.asm)
+ table_width 2, Facings
dw FacingStepDown0
dw FacingStepDown1
dw FacingStepDown2
@@ -32,10 +33,8 @@ Facings:
dw FacingBoulderDust2
dw FacingGrass1
dw FacingGrass2
-.End
- dw 0
-
-NUM_FACINGS EQU (Facings.End - Facings) / 2
+ assert_table_length NUM_FACINGS
+ dw 0 ; end
; Tables used as a reference to transform OAM data.
diff --git a/data/sprites/map_objects.asm b/data/sprites/map_objects.asm
index 05b2e084b..60a718131 100644
--- a/data/sprites/map_objects.asm
+++ b/data/sprites/map_objects.asm
@@ -1,5 +1,6 @@
SpriteMovementData::
; entries correspond to SPRITEMOVEDATA_* constants
+ table_width NUM_SPRITEMOVEDATA_FIELDS, SpriteMovementData
; SPRITEMOVEDATA_00
db SPRITEMOVEFN_00 ; movement function
@@ -304,3 +305,5 @@ SpriteMovementData::
db 0 ; flags1
db 0 ; flags2
db 0 ; palette flags
+
+ assert_table_length NUM_SPRITEMOVEDATA + 1
diff --git a/data/sprites/sprite_mons.asm b/data/sprites/sprite_mons.asm
index 3d53804db..9d3e62acd 100644
--- a/data/sprites/sprite_mons.asm
+++ b/data/sprites/sprite_mons.asm
@@ -1,5 +1,6 @@
SpriteMons:
; entries correspond to SPRITE_* constants past SPRITE_POKEMON
+ table_width 1, SpriteMons
db UNOWN
db GEODUDE
db GROWLITHE
@@ -35,3 +36,4 @@ SpriteMons:
db GYARADOS
db LUGIA
db HO_OH
+ assert_table_length NUM_POKEMON_SPRITES
diff --git a/data/sprites/sprites.asm b/data/sprites/sprites.asm
index 39c962b85..0839ec971 100644
--- a/data/sprites/sprites.asm
+++ b/data/sprites/sprites.asm
@@ -6,6 +6,7 @@ ENDM
OverworldSprites:
; entries correspond to SPRITE_* constants
+ table_width NUM_SPRITEDATA_FIELDS, OverworldSprites
overworld_sprite ChrisSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
overworld_sprite ChrisBikeSpriteGFX, 12, WALKING_SPRITE, PAL_OW_RED
overworld_sprite GameboyKidSpriteGFX, 12, STANDING_SPRITE, PAL_OW_GREEN
@@ -108,3 +109,4 @@ OverworldSprites:
overworld_sprite EnteiSpriteGFX, 4, STILL_SPRITE, PAL_OW_RED
overworld_sprite RaikouSpriteGFX, 4, STILL_SPRITE, PAL_OW_RED
overworld_sprite StandingYoungsterSpriteGFX, 12, STANDING_SPRITE, PAL_OW_BLUE
+ assert_table_length NUM_OVERWORLD_SPRITES
diff --git a/data/tilesets.asm b/data/tilesets.asm
index eb5b6fe49..9d8f62382 100644
--- a/data/tilesets.asm
+++ b/data/tilesets.asm
@@ -11,7 +11,8 @@ ENDM
; - The *Anim are defined in engine/tilesets/tileset_anims.asm
Tilesets::
-; entries correspond to TILESET_* constants
+; entries correspond to TILESET_* constants (see constants/tileset_constants.asm)
+ table_width TILESET_LENGTH, Tilesets
tileset Tileset0
tileset TilesetJohto
tileset TilesetJohtoModern
@@ -49,3 +50,4 @@ Tilesets::
tileset TilesetKabutoWordRoom
tileset TilesetOmanyteWordRoom
tileset TilesetAerodactylWordRoom
+ assert_table_length NUM_TILESETS + 1
diff --git a/data/trainers/attributes.asm b/data/trainers/attributes.asm
index 67d852d83..70544977d 100644
--- a/data/trainers/attributes.asm
+++ b/data/trainers/attributes.asm
@@ -1,5 +1,6 @@
TrainerClassAttributes:
; entries correspond to trainer classes (see constants/trainer_constants.asm)
+ table_width NUM_TRAINER_ATTRIBUTES, TrainerClassAttributes
; Falkner
db NO_ITEM, NO_ITEM ; items
@@ -402,3 +403,5 @@ TrainerClassAttributes:
db 25 ; base reward
dw AI_BASIC | AI_SETUP | AI_SMART | AI_AGGRESSIVE | AI_CAUTIOUS | AI_STATUS | AI_RISKY
dw CONTEXT_USE | SWITCH_SOMETIMES
+
+ assert_table_length NUM_TRAINER_CLASSES
diff --git a/data/trainers/dvs.asm b/data/trainers/dvs.asm
index 91918b4d9..12bba0da6 100644
--- a/data/trainers/dvs.asm
+++ b/data/trainers/dvs.asm
@@ -1,5 +1,6 @@
TrainerClassDVs:
; entries correspond to trainer classes (see constants/trainer_constants.asm)
+ table_width 2, TrainerClassDVs
; atk,def,spd,spc
dn 9, 10, 7, 7 ; FALKNER
dn 8, 8, 8, 8 ; WHITNEY
@@ -68,3 +69,4 @@ TrainerClassDVs:
dn 9, 8, 8, 8 ; OFFICER
dn 7, 14, 10, 8 ; GRUNTF
dn 9, 8, 8, 8 ; MYSTICALMAN
+ assert_table_length NUM_TRAINER_CLASSES
diff --git a/data/trainers/encounter_music.asm b/data/trainers/encounter_music.asm
index a64d160fe..026646952 100644
--- a/data/trainers/encounter_music.asm
+++ b/data/trainers/encounter_music.asm
@@ -2,6 +2,7 @@
TrainerEncounterMusic::
; entries correspond to trainer classes (see constants/trainer_constants.asm)
+ table_width 1, TrainerEncounterMusic
db MUSIC_HIKER_ENCOUNTER ; none
db MUSIC_YOUNGSTER_ENCOUNTER ; falkner
db MUSIC_LASS_ENCOUNTER ; whitney
@@ -70,6 +71,7 @@ TrainerEncounterMusic::
db MUSIC_HIKER_ENCOUNTER ; officer
db MUSIC_ROCKET_ENCOUNTER ; gruntf
db MUSIC_HIKER_ENCOUNTER ; mysticalman
- db MUSIC_HIKER_ENCOUNTER
- db MUSIC_HIKER_ENCOUNTER
- db MUSIC_HIKER_ENCOUNTER
+ assert_table_length NUM_TRAINER_CLASSES + 1
+ db MUSIC_HIKER_ENCOUNTER ; unused
+ db MUSIC_HIKER_ENCOUNTER ; unused
+ db MUSIC_HIKER_ENCOUNTER ; unused
diff --git a/data/trainers/genders.asm b/data/trainers/genders.asm
index 1bfc925d2..230b29205 100644
--- a/data/trainers/genders.asm
+++ b/data/trainers/genders.asm
@@ -2,6 +2,7 @@
BTTrainerClassGenders:
; entries correspond to trainer classes
+ table_width 1, BTTrainerClassGenders
db MALE ; FALKNER
db FEMALE ; WHITNEY
db FEMALE ; BUGSY
@@ -68,3 +69,4 @@ BTTrainerClassGenders:
db MALE ; BLUE
db MALE ; OFFICER
db FEMALE ; GRUNTF
+ assert_table_length NUM_TRAINER_CLASSES - 1 ; exclude MYSTICALMAN
diff --git a/data/trainers/palettes.asm b/data/trainers/palettes.asm
index abbe519ca..342999647 100644
--- a/data/trainers/palettes.asm
+++ b/data/trainers/palettes.asm
@@ -4,6 +4,8 @@ TrainerPalettes:
; Each .gbcpal is generated from the corresponding .png, and
; only the middle two colors are included, not black or white.
+ table_width PAL_COLOR_SIZE * 2, TrainerPalettes
+
PlayerPalette: ; Chris uses the same colors as Cal
INCBIN "gfx/trainers/cal.gbcpal", middle_colors
KrisPalette: ; Kris shares Falkner's palette
@@ -74,3 +76,5 @@ INCBIN "gfx/trainers/blue.gbcpal", middle_colors
INCBIN "gfx/trainers/officer.gbcpal", middle_colors
INCBIN "gfx/trainers/grunt_f.gbcpal", middle_colors
INCBIN "gfx/trainers/mysticalman.gbcpal", middle_colors
+
+ assert_table_length NUM_TRAINER_CLASSES + 1
diff --git a/data/trainers/party_pointers.asm b/data/trainers/party_pointers.asm
index 45ba65b85..985e81ca4 100644
--- a/data/trainers/party_pointers.asm
+++ b/data/trainers/party_pointers.asm
@@ -2,6 +2,7 @@
TrainerGroups:
; entries correspond to trainer classes (see constants/trainer_constants.asm)
+ table_width 2, TrainerGroups
dw FalknerGroup
dw WhitneyGroup
dw BugsyGroup
@@ -69,3 +70,4 @@ TrainerGroups:
dw OfficerGroup
dw GruntFGroup
dw MysticalmanGroup
+ assert_table_length NUM_TRAINER_CLASSES
diff --git a/data/trainers/pic_pointers.asm b/data/trainers/pic_pointers.asm
index 6fc444eb6..31740ea3d 100644
--- a/data/trainers/pic_pointers.asm
+++ b/data/trainers/pic_pointers.asm
@@ -2,6 +2,7 @@
TrainerPicPointers::
; entries correspond to trainer classes (see constants/trainer_constants.asm)
+ table_width 3, TrainerPicPointers
dba_pic FalknerPic
dba_pic WhitneyPic
dba_pic BugsyPic
@@ -69,3 +70,4 @@ TrainerPicPointers::
dba_pic OfficerPic
dba_pic GruntfPic
dba_pic MysticalmanPic
+ assert_table_length NUM_TRAINER_CLASSES
diff --git a/data/trainers/sprites.asm b/data/trainers/sprites.asm
index b92a9032c..cf2f59961 100644
--- a/data/trainers/sprites.asm
+++ b/data/trainers/sprites.asm
@@ -1,5 +1,6 @@
BTTrainerClassSprites:
; entries correspond to trainer classes
+ table_width 1, BTTrainerClassSprites
db SPRITE_FALKNER
db SPRITE_WHITNEY
db SPRITE_BUGSY
@@ -66,3 +67,4 @@ BTTrainerClassSprites:
db SPRITE_BLUE
db SPRITE_OFFICER
db SPRITE_ROCKET_GIRL
+ assert_table_length NUM_TRAINER_CLASSES - 1 ; exclude MYSTICALMAN
diff --git a/data/types/names.asm b/data/types/names.asm
index 62d8e13bf..94fe67e13 100644
--- a/data/types/names.asm
+++ b/data/types/names.asm
@@ -1,5 +1,6 @@
TypeNames:
; entries correspond to types (see constants/type_constants.asm)
+ table_width 2, TypeNames
dw Normal
dw Fighting
dw Flying
@@ -10,6 +11,7 @@ TypeNames:
dw Bug
dw Ghost
dw Steel
+ assert_table_length UNUSED_TYPES
dw Normal
dw Normal
dw Normal
@@ -20,6 +22,7 @@ TypeNames:
dw Normal
dw Normal
dw CurseType
+ assert_table_length UNUSED_TYPES_END
dw Fire
dw Water
dw Grass
@@ -28,6 +31,7 @@ TypeNames:
dw Ice
dw Dragon
dw Dark
+ assert_table_length TYPES_END
Normal: db "NORMAL@"
Fighting: db "FIGHTING@"
diff --git a/data/types/search_strings.asm b/data/types/search_strings.asm
index d03d2786b..1345c27cd 100644
--- a/data/types/search_strings.asm
+++ b/data/types/search_strings.asm
@@ -1,5 +1,6 @@
PokedexTypeSearchStrings:
; entries correspond with PokedexTypeSearchConversionTable (see data/types/search_types.asm)
+ table_width POKEDEX_TYPE_STRING_LENGTH, PokedexTypeSearchStrings
db " ---- @"
db " NORMAL @"
db " FIRE @"
@@ -18,3 +19,4 @@ PokedexTypeSearchStrings:
db " DRAGON @"
db " DARK @"
db " STEEL @"
+ assert_table_length NUM_TYPES + 1
diff --git a/data/types/search_types.asm b/data/types/search_types.asm
index c3aba3c91..dd9ea5628 100644
--- a/data/types/search_types.asm
+++ b/data/types/search_types.asm
@@ -1,5 +1,6 @@
PokedexTypeSearchConversionTable:
; entries correspond with PokedexTypeSearchStrings (see data/types/search_strings.asm)
+ table_width 1, PokedexTypeSearchConversionTable
db NORMAL
db FIRE
db WATER
@@ -17,3 +18,4 @@ PokedexTypeSearchConversionTable:
db DRAGON
db DARK
db STEEL
+ assert_table_length NUM_TYPES
diff --git a/data/wild/fish.asm b/data/wild/fish.asm
index 1976c8f95..b849b933f 100644
--- a/data/wild/fish.asm
+++ b/data/wild/fish.asm
@@ -7,6 +7,7 @@ ENDM
FishGroups:
; entries correspond to FISHGROUP_* constants
+ table_width FISHGROUP_DATA_LENGTH, FishGroups
fishgroup 50 percent + 1, .Shore_Old, .Shore_Good, .Shore_Super
fishgroup 50 percent + 1, .Ocean_Old, .Ocean_Good, .Ocean_Super
fishgroup 50 percent + 1, .Lake_Old, .Lake_Good, .Lake_Super
@@ -20,6 +21,7 @@ FishGroups:
fishgroup 50 percent + 1, .Qwilfish_Old, .Qwilfish_Good, .Qwilfish_Super
fishgroup 50 percent + 1, .Remoraid_Old, .Remoraid_Good, .Remoraid_Super
fishgroup 50 percent + 1, .Qwilfish_NoSwarm_Old, .Qwilfish_NoSwarm_Good, .Qwilfish_NoSwarm_Super
+ assert_table_length NUM_FISHGROUPS
.Shore_Old:
db 70 percent + 1, MAGIKARP, 10
diff --git a/data/wild/probabilities.asm b/data/wild/probabilities.asm
index bf3144bbe..f3f44e0af 100644
--- a/data/wild/probabilities.asm
+++ b/data/wild/probabilities.asm
@@ -4,6 +4,7 @@ mon_prob: MACRO
ENDM
GrassMonProbTable:
+ table_width 2, GrassMonProbTable
mon_prob 30, 0 ; 30% chance
mon_prob 60, 1 ; 30% chance
mon_prob 80, 2 ; 20% chance
@@ -11,8 +12,11 @@ GrassMonProbTable:
mon_prob 95, 4 ; 5% chance
mon_prob 99, 5 ; 4% chance
mon_prob 100, 6 ; 1% chance
+ assert_table_length NUM_GRASSMON
WaterMonProbTable:
+ table_width 2, WaterMonProbTable
mon_prob 60, 0 ; 60% chance
mon_prob 90, 1 ; 30% chance
mon_prob 100, 2 ; 10% chance
+ assert_table_length NUM_WATERMON
diff --git a/data/wild/treemons.asm b/data/wild/treemons.asm
index a6b1922f3..c24df03c1 100644
--- a/data/wild/treemons.asm
+++ b/data/wild/treemons.asm
@@ -1,5 +1,6 @@
TreeMons:
; entries correspond to TREEMON_SET_* constants
+ table_width 2, TreeMons
dw TreeMonSet_City
dw TreeMonSet_Canyon
dw TreeMonSet_Town
@@ -8,7 +9,8 @@ TreeMons:
dw TreeMonSet_Lake
dw TreeMonSet_Forest
dw TreeMonSet_Rock
- dw TreeMonSet_City
+ assert_table_length NUM_TREEMON_SETS
+ dw TreeMonSet_City ; unused
; Two tables each (common, rare).
; Structure: