Verify uneven list sizes with list_start, li, and assert_list_length macros

This was discussed in #815
This commit is contained in:
Rangi
2021-03-22 17:15:21 -04:00
parent dbe2360ecd
commit 94057c7726
10 changed files with 663 additions and 618 deletions

View File

@@ -18,7 +18,8 @@ DECOATTR_STRUCT_LENGTH EQU _RS
NUM_DECO_TYPES EQU const_value - 1 NUM_DECO_TYPES EQU const_value - 1
; DecorationNames indexes (see data/decorations/names.asm) ; DecorationNames indexes (see data/decorations/names.asm)
const_def 1 const_def
const CANCEL_DECO
const PUT_IT_AWAY const PUT_IT_AWAY
const MAGNAPLANT const MAGNAPLANT
const TROPICPLANT const TROPICPLANT
@@ -44,6 +45,7 @@ NUM_DECO_TYPES EQU const_value - 1
const BLUE_CARPET const BLUE_CARPET
const YELLOW_CARPET const YELLOW_CARPET
const GREEN_CARPET const GREEN_CARPET
NUM_DECO_NAMES EQU const_value
; DoDecorationAction2.DecoActions indexes (see engine/overworld/decorations.asm) ; DoDecorationAction2.DecoActions indexes (see engine/overworld/decorations.asm)
const_def 1 const_def 1

View File

@@ -1,10 +1,12 @@
StatNames: StatNames:
; entries correspond to stat ids ; entries correspond to stat ids
db "ATTACK@" list_start StatNames
db "DEFENSE@" li "ATTACK"
db "SPEED@" li "DEFENSE"
db "SPCL.ATK@" li "SPEED"
db "SPCL.DEF@" li "SPCL.ATK"
db "ACCURACY@" li "SPCL.DEF"
db "EVASION@" li "ACCURACY"
db "ABILITY@" ; used for BattleCommand_Curse li "EVASION"
li "ABILITY" ; used for BattleCommand_Curse
assert_list_length NUM_LEVEL_STATS

View File

@@ -1,28 +1,30 @@
DecorationNames: DecorationNames:
; entries correspond to constants/deco_constants.asm ; entries correspond to constants/deco_constants.asm
db "CANCEL@" list_start DecorationNames
db "PUT IT AWAY@" li "CANCEL"
db "MAGNAPLANT@" li "PUT IT AWAY"
db "TROPICPLANT@" li "MAGNAPLANT"
db "JUMBOPLANT@" li "TROPICPLANT"
db "TOWN MAP@" li "JUMBOPLANT"
db "NES@" li "TOWN MAP"
db "SUPER NES@" li "NES"
db "NINTENDO 64@" li "SUPER NES"
db "VIRTUAL BOY@" li "NINTENDO 64"
db "GOLD TROPHY@" li "VIRTUAL BOY"
db "SILVER TROPHY@" li "GOLD TROPHY"
db "SURF PIKACHU DOLL@" li "SILVER TROPHY"
db " BED@" li "SURF PIKACHU DOLL"
db " CARPET@" li " BED"
db " POSTER@" li " CARPET"
db " DOLL@" li " POSTER"
db "BIG @" li " DOLL"
db "FEATHERY@" li "BIG "
db "PIKACHU@" li "FEATHERY"
db "PINK@" li "PIKACHU"
db "POLKADOT@" li "PINK"
db "RED@" li "POLKADOT"
db "BLUE@" li "RED"
db "YELLOW@" li "BLUE"
db "GREEN@" li "YELLOW"
li "GREEN"
assert_list_length NUM_DECO_NAMES

File diff suppressed because it is too large Load Diff

View File

@@ -7,16 +7,19 @@
const MONMENUVALUE_MOVE ; 5 const MONMENUVALUE_MOVE ; 5
const MONMENUVALUE_MAIL ; 6 const MONMENUVALUE_MAIL ; 6
const MONMENUVALUE_ERROR ; 7 const MONMENUVALUE_ERROR ; 7
NUM_MONMENUVALUES EQU const_value - 1
MonMenuOptionStrings: MonMenuOptionStrings:
; entries correspond to MONMENUVALUE_* constants ; entries correspond to MONMENUVALUE_* constants
db "STATS@" list_start MonMenuOptionStrings
db "SWITCH@" li "STATS"
db "ITEM@" li "SWITCH"
db "CANCEL@" li "ITEM"
db "MOVE@" li "CANCEL"
db "MAIL@" li "MOVE"
db "ERROR!@" li "MAIL"
li "ERROR!"
assert_list_length NUM_MONMENUVALUES
MonMenuOptions: MonMenuOptions:
; category, item, value; actions are in PokemonActionSubmenu (see engine/pokemon/mon_menu.asm) ; category, item, value; actions are in PokemonActionSubmenu (see engine/pokemon/mon_menu.asm)

File diff suppressed because it is too large Load Diff

View File

@@ -14,7 +14,7 @@ MalePlayerNameArray:
db "MAT@" db "MAT@"
db "ALLAN@" db "ALLAN@"
db "JON@" db "JON@"
db 2 ; displacement db 2 ; title indent
db " NAME @" ; title db " NAME @" ; title
KrisNameMenuHeader: KrisNameMenuHeader:

View File

@@ -1,69 +1,71 @@
TrainerClassNames:: TrainerClassNames::
; entries correspond to trainer classes (see constants/trainer_constants.asm) ; entries correspond to trainer classes (see constants/trainer_constants.asm)
db "LEADER@" list_start TrainerClassNames
db "LEADER@" li "LEADER"
db "LEADER@" li "LEADER"
db "LEADER@" li "LEADER"
db "LEADER@" li "LEADER"
db "LEADER@" li "LEADER"
db "LEADER@" li "LEADER"
db "LEADER@" li "LEADER"
db "RIVAL@" li "LEADER"
db "#MON PROF.@" li "RIVAL"
db "ELITE FOUR@" li "#MON PROF."
db "<PKMN> TRAINER@" li "ELITE FOUR"
db "ELITE FOUR@" li "<PKMN> TRAINER"
db "ELITE FOUR@" li "ELITE FOUR"
db "ELITE FOUR@" li "ELITE FOUR"
db "CHAMPION@" li "ELITE FOUR"
db "LEADER@" li "CHAMPION"
db "LEADER@" li "LEADER"
db "LEADER@" li "LEADER"
db "SCIENTIST@" li "LEADER"
db "LEADER@" li "SCIENTIST"
db "YOUNGSTER@" li "LEADER"
db "SCHOOLBOY@" li "YOUNGSTER"
db "BIRD KEEPER@" li "SCHOOLBOY"
db "LASS@" li "BIRD KEEPER"
db "LEADER@" li "LASS"
db "COOLTRAINER@" li "LEADER"
db "COOLTRAINER@" li "COOLTRAINER"
db "BEAUTY@" li "COOLTRAINER"
db "#MANIAC@" li "BEAUTY"
db "ROCKET@" li "#MANIAC"
db "GENTLEMAN@" li "ROCKET"
db "SKIER@" li "GENTLEMAN"
db "TEACHER@" li "SKIER"
db "LEADER@" li "TEACHER"
db "BUG CATCHER@" li "LEADER"
db "FISHER@" li "BUG CATCHER"
db "SWIMMER♂@" li "FISHER"
db "SWIMMER♀@" li "SWIMMER"
db "SAILOR@" li "SWIMMER♀"
db "SUPER NERD@" li "SAILOR"
db "RIVAL@" li "SUPER NERD"
db "GUITARIST@" li "RIVAL"
db "HIKER@" li "GUITARIST"
db "BIKER@" li "HIKER"
db "LEADER@" li "BIKER"
db "BURGLAR@" li "LEADER"
db "FIREBREATHER@" li "BURGLAR"
db "JUGGLER@" li "FIREBREATHER"
db "BLACKBELT@" li "JUGGLER"
db "ROCKET@" li "BLACKBELT"
db "PSYCHIC@" li "ROCKET"
db "PICNICKER@" li "PSYCHIC"
db "CAMPER@" li "PICNICKER"
db "ROCKET@" li "CAMPER"
db "SAGE@" li "ROCKET"
db "MEDIUM@" li "SAGE"
db "BOARDER@" li "MEDIUM"
db "#FAN@" li "BOARDER"
db "KIMONO GIRL@" li "#FAN"
db "TWINS@" li "KIMONO GIRL"
db "#FAN@" li "TWINS"
db "<PKMN> TRAINER@" li "#FAN"
db "LEADER@" li "<PKMN> TRAINER"
db "OFFICER@" li "LEADER"
db "ROCKET@" li "OFFICER"
db "MYSTICALMAN@" li "ROCKET"
li "MYSTICALMAN"
assert_list_length NUM_TRAINER_CLASSES

View File

@@ -9,10 +9,11 @@ rept _NARG - 1
shift shift
endr endr
db 0 db 0
list_index = list_index + 1
ENDM ENDM
RoamMaps: RoamMaps:
; there are NUM_ROAMMON_MAPS entries list_start RoamMaps
; start map, ...other maps ; start map, ...other maps
roam_map ROUTE_29, ROUTE_30, ROUTE_46 roam_map ROUTE_29, ROUTE_30, ROUTE_46
roam_map ROUTE_30, ROUTE_29, ROUTE_31 roam_map ROUTE_30, ROUTE_29, ROUTE_31
@@ -30,4 +31,5 @@ RoamMaps:
roam_map ROUTE_44, ROUTE_42, ROUTE_43, ROUTE_45 roam_map ROUTE_44, ROUTE_42, ROUTE_43, ROUTE_45
roam_map ROUTE_45, ROUTE_44, ROUTE_46 roam_map ROUTE_45, ROUTE_44, ROUTE_46
roam_map ROUTE_46, ROUTE_45, ROUTE_29 roam_map ROUTE_46, ROUTE_45, ROUTE_29
assert_list_length NUM_ROAMMON_MAPS
db -1 ; end db -1 ; end

View File

@@ -19,6 +19,31 @@ x = \1
"{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes" "{CURRENT_TABLE_START}: expected {d:x} entries, each {d:CURRENT_TABLE_WIDTH} bytes"
ENDM 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 def_grass_wildmons: MACRO
;\1: map id ;\1: map id
if DEF(CURRENT_GRASS_WILDMONS_MAP) if DEF(CURRENT_GRASS_WILDMONS_MAP)