From 94057c7726995b0da484a39c22497876b7c22997 Mon Sep 17 00:00:00 2001 From: Rangi Date: Mon, 22 Mar 2021 17:15:21 -0400 Subject: [PATCH] Verify uneven list sizes with list_start, li, and assert_list_length macros This was discussed in #815 --- constants/deco_constants.asm | 4 +- data/battle/stat_names.asm | 18 +- data/decorations/names.asm | 54 ++-- data/items/names.asm | 517 +++++++++++++++++----------------- data/mon_menu.asm | 17 +- data/moves/names.asm | 504 ++++++++++++++++----------------- data/player_names.asm | 2 +- data/trainers/class_names.asm | 136 ++++----- data/wild/roammon_maps.asm | 4 +- macros/asserts.asm | 25 ++ 10 files changed, 663 insertions(+), 618 deletions(-) diff --git a/constants/deco_constants.asm b/constants/deco_constants.asm index 27fa09f2c..8ed1b2934 100644 --- a/constants/deco_constants.asm +++ b/constants/deco_constants.asm @@ -18,7 +18,8 @@ DECOATTR_STRUCT_LENGTH EQU _RS NUM_DECO_TYPES EQU const_value - 1 ; DecorationNames indexes (see data/decorations/names.asm) - const_def 1 + const_def + const CANCEL_DECO const PUT_IT_AWAY const MAGNAPLANT const TROPICPLANT @@ -44,6 +45,7 @@ NUM_DECO_TYPES EQU const_value - 1 const BLUE_CARPET const YELLOW_CARPET const GREEN_CARPET +NUM_DECO_NAMES EQU const_value ; DoDecorationAction2.DecoActions indexes (see engine/overworld/decorations.asm) const_def 1 diff --git a/data/battle/stat_names.asm b/data/battle/stat_names.asm index a144a225f..ae6c6cfdd 100644 --- a/data/battle/stat_names.asm +++ b/data/battle/stat_names.asm @@ -1,10 +1,12 @@ StatNames: ; entries correspond to stat ids - db "ATTACK@" - db "DEFENSE@" - db "SPEED@" - db "SPCL.ATK@" - db "SPCL.DEF@" - db "ACCURACY@" - db "EVASION@" - db "ABILITY@" ; used for BattleCommand_Curse + list_start StatNames + li "ATTACK" + li "DEFENSE" + li "SPEED" + li "SPCL.ATK" + li "SPCL.DEF" + li "ACCURACY" + li "EVASION" + li "ABILITY" ; used for BattleCommand_Curse + assert_list_length NUM_LEVEL_STATS diff --git a/data/decorations/names.asm b/data/decorations/names.asm index 1e3a00140..db418b836 100644 --- a/data/decorations/names.asm +++ b/data/decorations/names.asm @@ -1,28 +1,30 @@ DecorationNames: ; entries correspond to constants/deco_constants.asm - db "CANCEL@" - db "PUT IT AWAY@" - db "MAGNAPLANT@" - db "TROPICPLANT@" - db "JUMBOPLANT@" - db "TOWN MAP@" - db "NES@" - db "SUPER NES@" - db "NINTENDO 64@" - db "VIRTUAL BOY@" - db "GOLD TROPHY@" - db "SILVER TROPHY@" - db "SURF PIKACHU DOLL@" - db " BED@" - db " CARPET@" - db " POSTER@" - db " DOLL@" - db "BIG @" - db "FEATHERY@" - db "PIKACHU@" - db "PINK@" - db "POLKADOT@" - db "RED@" - db "BLUE@" - db "YELLOW@" - db "GREEN@" + list_start DecorationNames + li "CANCEL" + li "PUT IT AWAY" + li "MAGNAPLANT" + li "TROPICPLANT" + li "JUMBOPLANT" + li "TOWN MAP" + li "NES" + li "SUPER NES" + li "NINTENDO 64" + li "VIRTUAL BOY" + li "GOLD TROPHY" + li "SILVER TROPHY" + li "SURF PIKACHU DOLL" + li " BED" + li " CARPET" + li " POSTER" + li " DOLL" + li "BIG " + li "FEATHERY" + li "PIKACHU" + li "PINK" + li "POLKADOT" + li "RED" + li "BLUE" + li "YELLOW" + li "GREEN" + assert_list_length NUM_DECO_NAMES diff --git a/data/items/names.asm b/data/items/names.asm index f44100ab3..93b83d9c5 100644 --- a/data/items/names.asm +++ b/data/items/names.asm @@ -1,257 +1,262 @@ ItemNames:: - db "MASTER BALL@" - db "ULTRA BALL@" - db "BRIGHTPOWDER@" - db "GREAT BALL@" - db "# BALL@" - db "TERU-SAMA@" - db "BICYCLE@" - 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 "ESCAPE ROPE@" - db "REPEL@" - db "MAX ELIXER@" - db "FIRE STONE@" - db "THUNDERSTONE@" - db "WATER STONE@" - db "TERU-SAMA@" - db "HP UP@" - db "PROTEIN@" - db "IRON@" - db "CARBOS@" - db "LUCKY PUNCH@" - db "CALCIUM@" - db "RARE CANDY@" - db "X ACCURACY@" - db "LEAF STONE@" - db "METAL POWDER@" - db "NUGGET@" - db "# DOLL@" - db "FULL HEAL@" - db "REVIVE@" - db "MAX REVIVE@" - db "GUARD SPEC.@" - db "SUPER REPEL@" - db "MAX REPEL@" - db "DIRE HIT@" - db "TERU-SAMA@" - db "FRESH WATER@" - db "SODA POP@" - db "LEMONADE@" - db "X ATTACK@" - db "TERU-SAMA@" - db "X DEFEND@" - db "X SPEED@" - db "X SPECIAL@" - db "COIN CASE@" - db "ITEMFINDER@" - db "TERU-SAMA@" - db "EXP.SHARE@" - db "OLD ROD@" - db "GOOD ROD@" - db "SILVER LEAF@" - db "SUPER ROD@" - db "PP UP@" - db "ETHER@" - db "MAX ETHER@" - db "ELIXER@" - db "RED SCALE@" - db "SECRETPOTION@" - db "S.S.TICKET@" - db "MYSTERY EGG@" - db "CLEAR BELL@" - db "SILVER WING@" - db "MOOMOO MILK@" - db "QUICK CLAW@" - db "PSNCUREBERRY@" - db "GOLD LEAF@" - db "SOFT SAND@" - db "SHARP BEAK@" - db "PRZCUREBERRY@" - db "BURNT BERRY@" - db "ICE BERRY@" - db "POISON BARB@" - db "KING'S ROCK@" - db "BITTER BERRY@" - db "MINT BERRY@" - db "RED APRICORN@" - db "TINYMUSHROOM@" - db "BIG MUSHROOM@" - db "SILVERPOWDER@" - db "BLU APRICORN@" - db "TERU-SAMA@" - db "AMULET COIN@" - db "YLW APRICORN@" - db "GRN APRICORN@" - db "CLEANSE TAG@" - db "MYSTIC WATER@" - db "TWISTEDSPOON@" - db "WHT APRICORN@" - db "BLACKBELT@" - db "BLK APRICORN@" - db "TERU-SAMA@" - db "PNK APRICORN@" - db "BLACKGLASSES@" - db "SLOWPOKETAIL@" - db "PINK BOW@" - db "STICK@" - db "SMOKE BALL@" - db "NEVERMELTICE@" - db "MAGNET@" - db "MIRACLEBERRY@" - db "PEARL@" - db "BIG PEARL@" - db "EVERSTONE@" - db "SPELL TAG@" - db "RAGECANDYBAR@" - db "GS BALL@" - db "BLUE CARD@" - db "MIRACLE SEED@" - db "THICK CLUB@" - db "FOCUS BAND@" - db "TERU-SAMA@" - db "ENERGYPOWDER@" - db "ENERGY ROOT@" - db "HEAL POWDER@" - db "REVIVAL HERB@" - db "HARD STONE@" - db "LUCKY EGG@" - db "CARD KEY@" - db "MACHINE PART@" - db "EGG TICKET@" - db "LOST ITEM@" - db "STARDUST@" - db "STAR PIECE@" - db "BASEMENT KEY@" - db "PASS@" - db "TERU-SAMA@" - db "TERU-SAMA@" - db "TERU-SAMA@" - db "CHARCOAL@" - db "BERRY JUICE@" - db "SCOPE LENS@" - db "TERU-SAMA@" - db "TERU-SAMA@" - db "METAL COAT@" - db "DRAGON FANG@" - db "TERU-SAMA@" - db "LEFTOVERS@" - db "TERU-SAMA@" - db "TERU-SAMA@" - db "TERU-SAMA@" - db "MYSTERYBERRY@" - db "DRAGON SCALE@" - db "BERSERK GENE@" - db "TERU-SAMA@" - db "TERU-SAMA@" - db "TERU-SAMA@" - db "SACRED ASH@" - db "HEAVY BALL@" - db "FLOWER MAIL@" - db "LEVEL BALL@" - db "LURE BALL@" - db "FAST BALL@" - db "TERU-SAMA@" - db "LIGHT BALL@" - db "FRIEND BALL@" - db "MOON BALL@" - db "LOVE BALL@" - db "NORMAL BOX@" - db "GORGEOUS BOX@" - db "SUN STONE@" - db "POLKADOT BOW@" - db "TERU-SAMA@" - db "UP-GRADE@" - db "BERRY@" - db "GOLD BERRY@" - db "SQUIRTBOTTLE@" - db "TERU-SAMA@" - db "PARK BALL@" - db "RAINBOW WING@" - db "TERU-SAMA@" - db "BRICK PIECE@" - db "SURF MAIL@" - db "LITEBLUEMAIL@" - db "PORTRAITMAIL@" - db "LOVELY MAIL@" - db "EON MAIL@" - db "MORPH MAIL@" - db "BLUESKY MAIL@" - db "MUSIC MAIL@" - db "MIRAGE MAIL@" - db "TERU-SAMA@" - db "TM01@" - db "TM02@" - db "TM03@" - db "TM04@" - db "TERU-SAMA@" - db "TM05@" - db "TM06@" - db "TM07@" - db "TM08@" - db "TM09@" - db "TM10@" - db "TM11@" - db "TM12@" - db "TM13@" - db "TM14@" - db "TM15@" - db "TM16@" - db "TM17@" - db "TM18@" - db "TM19@" - db "TM20@" - db "TM21@" - db "TM22@" - db "TM23@" - db "TM24@" - db "TM25@" - db "TM26@" - db "TM27@" - db "TM28@" - db "TERU-SAMA@" - db "TM29@" - db "TM30@" - db "TM31@" - db "TM32@" - db "TM33@" - db "TM34@" - db "TM35@" - db "TM36@" - db "TM37@" - db "TM38@" - db "TM39@" - db "TM40@" - db "TM41@" - db "TM42@" - db "TM43@" - db "TM44@" - db "TM45@" - db "TM46@" - db "TM47@" - db "TM48@" - db "TM49@" - db "TM50@" - db "HM01@" - db "HM02@" - db "HM03@" - db "HM04@" - db "HM05@" - db "HM06@" - db "HM07@" - db "TERU-SAMA@" - db "TERU-SAMA@" - db "TERU-SAMA@" - db "TERU-SAMA@" - db "TERU-SAMA@" - db "TERU-SAMA@" - db "?@" + list_start ItemNames + li "MASTER BALL" + li "ULTRA BALL" + li "BRIGHTPOWDER" + li "GREAT BALL" + li "# BALL" + li "TERU-SAMA" + li "BICYCLE" + 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 "ESCAPE ROPE" + li "REPEL" + li "MAX ELIXER" + li "FIRE STONE" + li "THUNDERSTONE" + li "WATER STONE" + li "TERU-SAMA" + li "HP UP" + li "PROTEIN" + li "IRON" + li "CARBOS" + li "LUCKY PUNCH" + li "CALCIUM" + li "RARE CANDY" + li "X ACCURACY" + li "LEAF STONE" + li "METAL POWDER" + li "NUGGET" + li "# DOLL" + li "FULL HEAL" + li "REVIVE" + li "MAX REVIVE" + li "GUARD SPEC." + li "SUPER REPEL" + li "MAX REPEL" + li "DIRE HIT" + li "TERU-SAMA" + li "FRESH WATER" + li "SODA POP" + li "LEMONADE" + li "X ATTACK" + li "TERU-SAMA" + li "X DEFEND" + li "X SPEED" + li "X SPECIAL" + li "COIN CASE" + li "ITEMFINDER" + li "TERU-SAMA" + li "EXP.SHARE" + li "OLD ROD" + li "GOOD ROD" + li "SILVER LEAF" + li "SUPER ROD" + li "PP UP" + li "ETHER" + li "MAX ETHER" + li "ELIXER" + li "RED SCALE" + li "SECRETPOTION" + li "S.S.TICKET" + li "MYSTERY EGG" + li "CLEAR BELL" + li "SILVER WING" + li "MOOMOO MILK" + li "QUICK CLAW" + li "PSNCUREBERRY" + li "GOLD LEAF" + li "SOFT SAND" + li "SHARP BEAK" + li "PRZCUREBERRY" + li "BURNT BERRY" + li "ICE BERRY" + li "POISON BARB" + li "KING'S ROCK" + li "BITTER BERRY" + li "MINT BERRY" + li "RED APRICORN" + li "TINYMUSHROOM" + li "BIG MUSHROOM" + li "SILVERPOWDER" + li "BLU APRICORN" + li "TERU-SAMA" + li "AMULET COIN" + li "YLW APRICORN" + li "GRN APRICORN" + li "CLEANSE TAG" + li "MYSTIC WATER" + li "TWISTEDSPOON" + li "WHT APRICORN" + li "BLACKBELT" + li "BLK APRICORN" + li "TERU-SAMA" + li "PNK APRICORN" + li "BLACKGLASSES" + li "SLOWPOKETAIL" + li "PINK BOW" + li "STICK" + li "SMOKE BALL" + li "NEVERMELTICE" + li "MAGNET" + li "MIRACLEBERRY" + li "PEARL" + li "BIG PEARL" + li "EVERSTONE" + li "SPELL TAG" + li "RAGECANDYBAR" + li "GS BALL" + li "BLUE CARD" + li "MIRACLE SEED" + li "THICK CLUB" + li "FOCUS BAND" + li "TERU-SAMA" + li "ENERGYPOWDER" + li "ENERGY ROOT" + li "HEAL POWDER" + li "REVIVAL HERB" + li "HARD STONE" + li "LUCKY EGG" + li "CARD KEY" + li "MACHINE PART" + li "EGG TICKET" + li "LOST ITEM" + li "STARDUST" + li "STAR PIECE" + li "BASEMENT KEY" + li "PASS" + li "TERU-SAMA" + li "TERU-SAMA" + li "TERU-SAMA" + li "CHARCOAL" + li "BERRY JUICE" + li "SCOPE LENS" + li "TERU-SAMA" + li "TERU-SAMA" + li "METAL COAT" + li "DRAGON FANG" + li "TERU-SAMA" + li "LEFTOVERS" + li "TERU-SAMA" + li "TERU-SAMA" + li "TERU-SAMA" + li "MYSTERYBERRY" + li "DRAGON SCALE" + li "BERSERK GENE" + li "TERU-SAMA" + li "TERU-SAMA" + li "TERU-SAMA" + li "SACRED ASH" + li "HEAVY BALL" + li "FLOWER MAIL" + li "LEVEL BALL" + li "LURE BALL" + li "FAST BALL" + li "TERU-SAMA" + li "LIGHT BALL" + li "FRIEND BALL" + li "MOON BALL" + li "LOVE BALL" + li "NORMAL BOX" + li "GORGEOUS BOX" + li "SUN STONE" + li "POLKADOT BOW" + li "TERU-SAMA" + li "UP-GRADE" + li "BERRY" + li "GOLD BERRY" + li "SQUIRTBOTTLE" + li "TERU-SAMA" + li "PARK BALL" + li "RAINBOW WING" + li "TERU-SAMA" + li "BRICK PIECE" + li "SURF MAIL" + li "LITEBLUEMAIL" + li "PORTRAITMAIL" + li "LOVELY MAIL" + li "EON MAIL" + li "MORPH MAIL" + li "BLUESKY MAIL" + li "MUSIC MAIL" + li "MIRAGE MAIL" + li "TERU-SAMA" + assert_list_length NUM_ITEMS + li "TM01" + li "TM02" + li "TM03" + li "TM04" + li "TERU-SAMA" + li "TM05" + li "TM06" + li "TM07" + li "TM08" + li "TM09" + li "TM10" + li "TM11" + li "TM12" + li "TM13" + li "TM14" + li "TM15" + li "TM16" + li "TM17" + li "TM18" + li "TM19" + li "TM20" + li "TM21" + li "TM22" + li "TM23" + li "TM24" + li "TM25" + li "TM26" + li "TM27" + li "TM28" + li "TERU-SAMA" + li "TM29" + li "TM30" + li "TM31" + li "TM32" + li "TM33" + li "TM34" + li "TM35" + li "TM36" + li "TM37" + li "TM38" + li "TM39" + li "TM40" + li "TM41" + li "TM42" + li "TM43" + li "TM44" + li "TM45" + li "TM46" + li "TM47" + li "TM48" + li "TM49" + li "TM50" + assert_list_length NUM_ITEMS + NUM_TMS + 2 ; count ITEM_C3 and ITEM_DC + li "HM01" + li "HM02" + li "HM03" + li "HM04" + li "HM05" + li "HM06" + li "HM07" + assert_list_length NUM_ITEMS + NUM_TMS + 2 + NUM_HMS ; count ITEM_C3 and ITEM_DC + li "TERU-SAMA" + li "TERU-SAMA" + li "TERU-SAMA" + li "TERU-SAMA" + li "TERU-SAMA" + li "TERU-SAMA" + li "?" + assert_list_length $100 diff --git a/data/mon_menu.asm b/data/mon_menu.asm index a69f4132f..59535cad1 100644 --- a/data/mon_menu.asm +++ b/data/mon_menu.asm @@ -7,16 +7,19 @@ const MONMENUVALUE_MOVE ; 5 const MONMENUVALUE_MAIL ; 6 const MONMENUVALUE_ERROR ; 7 +NUM_MONMENUVALUES EQU const_value - 1 MonMenuOptionStrings: ; entries correspond to MONMENUVALUE_* constants - db "STATS@" - db "SWITCH@" - db "ITEM@" - db "CANCEL@" - db "MOVE@" - db "MAIL@" - db "ERROR!@" + list_start MonMenuOptionStrings + li "STATS" + li "SWITCH" + li "ITEM" + li "CANCEL" + li "MOVE" + li "MAIL" + li "ERROR!" + assert_list_length NUM_MONMENUVALUES MonMenuOptions: ; category, item, value; actions are in PokemonActionSubmenu (see engine/pokemon/mon_menu.asm) diff --git a/data/moves/names.asm b/data/moves/names.asm index cfc7ac54f..8b6103837 100644 --- a/data/moves/names.asm +++ b/data/moves/names.asm @@ -1,252 +1,254 @@ 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@" - db "SKETCH@" - db "TRIPLE KICK@" - db "THIEF@" - db "SPIDER WEB@" - db "MIND READER@" - db "NIGHTMARE@" - db "FLAME WHEEL@" - db "SNORE@" - db "CURSE@" - db "FLAIL@" - db "CONVERSION2@" - db "AEROBLAST@" - db "COTTON SPORE@" - db "REVERSAL@" - db "SPITE@" - db "POWDER SNOW@" - db "PROTECT@" - db "MACH PUNCH@" - db "SCARY FACE@" - db "FAINT ATTACK@" - db "SWEET KISS@" - db "BELLY DRUM@" - db "SLUDGE BOMB@" - db "MUD-SLAP@" - db "OCTAZOOKA@" - db "SPIKES@" - db "ZAP CANNON@" - db "FORESIGHT@" - db "DESTINY BOND@" - db "PERISH SONG@" - db "ICY WIND@" - db "DETECT@" - db "BONE RUSH@" - db "LOCK-ON@" - db "OUTRAGE@" - db "SANDSTORM@" - db "GIGA DRAIN@" - db "ENDURE@" - db "CHARM@" - db "ROLLOUT@" - db "FALSE SWIPE@" - db "SWAGGER@" - db "MILK DRINK@" - db "SPARK@" - db "FURY CUTTER@" - db "STEEL WING@" - db "MEAN LOOK@" - db "ATTRACT@" - db "SLEEP TALK@" - db "HEAL BELL@" - db "RETURN@" - db "PRESENT@" - db "FRUSTRATION@" - db "SAFEGUARD@" - db "PAIN SPLIT@" - db "SACRED FIRE@" - db "MAGNITUDE@" - db "DYNAMICPUNCH@" - db "MEGAHORN@" - db "DRAGONBREATH@" - db "BATON PASS@" - db "ENCORE@" - db "PURSUIT@" - db "RAPID SPIN@" - db "SWEET SCENT@" - db "IRON TAIL@" - db "METAL CLAW@" - db "VITAL THROW@" - db "MORNING SUN@" - db "SYNTHESIS@" - db "MOONLIGHT@" - db "HIDDEN POWER@" - db "CROSS CHOP@" - db "TWISTER@" - db "RAIN DANCE@" - db "SUNNY DAY@" - db "CRUNCH@" - db "MIRROR COAT@" - db "PSYCH UP@" - db "EXTREMESPEED@" - db "ANCIENTPOWER@" - db "SHADOW BALL@" - db "FUTURE SIGHT@" - db "ROCK SMASH@" - db "WHIRLPOOL@" - db "BEAT UP@" + 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" + li "SKETCH" + li "TRIPLE KICK" + li "THIEF" + li "SPIDER WEB" + li "MIND READER" + li "NIGHTMARE" + li "FLAME WHEEL" + li "SNORE" + li "CURSE" + li "FLAIL" + li "CONVERSION2" + li "AEROBLAST" + li "COTTON SPORE" + li "REVERSAL" + li "SPITE" + li "POWDER SNOW" + li "PROTECT" + li "MACH PUNCH" + li "SCARY FACE" + li "FAINT ATTACK" + li "SWEET KISS" + li "BELLY DRUM" + li "SLUDGE BOMB" + li "MUD-SLAP" + li "OCTAZOOKA" + li "SPIKES" + li "ZAP CANNON" + li "FORESIGHT" + li "DESTINY BOND" + li "PERISH SONG" + li "ICY WIND" + li "DETECT" + li "BONE RUSH" + li "LOCK-ON" + li "OUTRAGE" + li "SANDSTORM" + li "GIGA DRAIN" + li "ENDURE" + li "CHARM" + li "ROLLOUT" + li "FALSE SWIPE" + li "SWAGGER" + li "MILK DRINK" + li "SPARK" + li "FURY CUTTER" + li "STEEL WING" + li "MEAN LOOK" + li "ATTRACT" + li "SLEEP TALK" + li "HEAL BELL" + li "RETURN" + li "PRESENT" + li "FRUSTRATION" + li "SAFEGUARD" + li "PAIN SPLIT" + li "SACRED FIRE" + li "MAGNITUDE" + li "DYNAMICPUNCH" + li "MEGAHORN" + li "DRAGONBREATH" + li "BATON PASS" + li "ENCORE" + li "PURSUIT" + li "RAPID SPIN" + li "SWEET SCENT" + li "IRON TAIL" + li "METAL CLAW" + li "VITAL THROW" + li "MORNING SUN" + li "SYNTHESIS" + li "MOONLIGHT" + li "HIDDEN POWER" + li "CROSS CHOP" + li "TWISTER" + li "RAIN DANCE" + li "SUNNY DAY" + li "CRUNCH" + li "MIRROR COAT" + li "PSYCH UP" + li "EXTREMESPEED" + li "ANCIENTPOWER" + li "SHADOW BALL" + li "FUTURE SIGHT" + li "ROCK SMASH" + li "WHIRLPOOL" + li "BEAT UP" + assert_list_length NUM_ATTACKS diff --git a/data/player_names.asm b/data/player_names.asm index 8d1b6ef51..0faadf1ab 100644 --- a/data/player_names.asm +++ b/data/player_names.asm @@ -14,7 +14,7 @@ MalePlayerNameArray: db "MAT@" db "ALLAN@" db "JON@" - db 2 ; displacement + db 2 ; title indent db " NAME @" ; title KrisNameMenuHeader: diff --git a/data/trainers/class_names.asm b/data/trainers/class_names.asm index 66c953492..513d15e3a 100644 --- a/data/trainers/class_names.asm +++ b/data/trainers/class_names.asm @@ -1,69 +1,71 @@ TrainerClassNames:: ; entries correspond to trainer classes (see constants/trainer_constants.asm) - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "RIVAL@" - db "#MON PROF.@" - db "ELITE FOUR@" - db " TRAINER@" - db "ELITE FOUR@" - db "ELITE FOUR@" - db "ELITE FOUR@" - db "CHAMPION@" - db "LEADER@" - db "LEADER@" - db "LEADER@" - db "SCIENTIST@" - db "LEADER@" - db "YOUNGSTER@" - db "SCHOOLBOY@" - db "BIRD KEEPER@" - db "LASS@" - db "LEADER@" - db "COOLTRAINER@" - db "COOLTRAINER@" - db "BEAUTY@" - db "#MANIAC@" - db "ROCKET@" - db "GENTLEMAN@" - db "SKIER@" - db "TEACHER@" - db "LEADER@" - db "BUG CATCHER@" - db "FISHER@" - db "SWIMMER♂@" - db "SWIMMER♀@" - db "SAILOR@" - db "SUPER NERD@" - db "RIVAL@" - db "GUITARIST@" - db "HIKER@" - db "BIKER@" - db "LEADER@" - db "BURGLAR@" - db "FIREBREATHER@" - db "JUGGLER@" - db "BLACKBELT@" - db "ROCKET@" - db "PSYCHIC@" - db "PICNICKER@" - db "CAMPER@" - db "ROCKET@" - db "SAGE@" - db "MEDIUM@" - db "BOARDER@" - db "#FAN@" - db "KIMONO GIRL@" - db "TWINS@" - db "#FAN@" - db " TRAINER@" - db "LEADER@" - db "OFFICER@" - db "ROCKET@" - db "MYSTICALMAN@" + list_start TrainerClassNames + li "LEADER" + li "LEADER" + li "LEADER" + li "LEADER" + li "LEADER" + li "LEADER" + li "LEADER" + li "LEADER" + li "RIVAL" + li "#MON PROF." + li "ELITE FOUR" + li " TRAINER" + li "ELITE FOUR" + li "ELITE FOUR" + li "ELITE FOUR" + li "CHAMPION" + li "LEADER" + li "LEADER" + li "LEADER" + li "SCIENTIST" + li "LEADER" + li "YOUNGSTER" + li "SCHOOLBOY" + li "BIRD KEEPER" + li "LASS" + li "LEADER" + li "COOLTRAINER" + li "COOLTRAINER" + li "BEAUTY" + li "#MANIAC" + li "ROCKET" + li "GENTLEMAN" + li "SKIER" + li "TEACHER" + li "LEADER" + li "BUG CATCHER" + li "FISHER" + li "SWIMMER♂" + li "SWIMMER♀" + li "SAILOR" + li "SUPER NERD" + li "RIVAL" + li "GUITARIST" + li "HIKER" + li "BIKER" + li "LEADER" + li "BURGLAR" + li "FIREBREATHER" + li "JUGGLER" + li "BLACKBELT" + li "ROCKET" + li "PSYCHIC" + li "PICNICKER" + li "CAMPER" + li "ROCKET" + li "SAGE" + li "MEDIUM" + li "BOARDER" + li "#FAN" + li "KIMONO GIRL" + li "TWINS" + li "#FAN" + li " TRAINER" + li "LEADER" + li "OFFICER" + li "ROCKET" + li "MYSTICALMAN" + assert_list_length NUM_TRAINER_CLASSES diff --git a/data/wild/roammon_maps.asm b/data/wild/roammon_maps.asm index 628a26795..de5b60c74 100644 --- a/data/wild/roammon_maps.asm +++ b/data/wild/roammon_maps.asm @@ -9,10 +9,11 @@ rept _NARG - 1 shift endr db 0 +list_index = list_index + 1 ENDM RoamMaps: -; there are NUM_ROAMMON_MAPS entries + list_start RoamMaps ; start map, ...other maps roam_map ROUTE_29, ROUTE_30, ROUTE_46 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_45, ROUTE_44, ROUTE_46 roam_map ROUTE_46, ROUTE_45, ROUTE_29 + assert_list_length NUM_ROAMMON_MAPS db -1 ; end diff --git a/macros/asserts.asm b/macros/asserts.asm index 306fc4c34..04c039ecc 100644 --- a/macros/asserts.asm +++ b/macros/asserts.asm @@ -19,6 +19,31 @@ x = \1 "{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: map id if DEF(CURRENT_GRASS_WILDMONS_MAP)