Verify data table sizes with table_width and assert_table_length macros

This was discussed in #706

It also uncovered some off-by-one issues with defining some constants.

A few structs now use rsreset/_RS to define their offset constants, as discussed in #739
This commit is contained in:
Rangi
2021-03-03 22:22:41 -05:00
parent 9c17fb14c8
commit 40902ffe24
148 changed files with 608 additions and 237 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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@" ; "ますだ じゅんいち@"

View File

@@ -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

View File

@@ -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

View File

@@ -14,3 +14,5 @@ DefaultOptions:
db $00
db $00
.End
assert DefaultOptions.End - DefaultOptions == wOptionsEnd - wOptions

View File

@@ -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

View File

@@ -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

View File

@@ -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@"

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

Some files were not shown because too many files have changed in this diff Show More