diff --git a/constants/text_constants.asm b/constants/text_constants.asm index 88a42bbe..f4587736 100644 --- a/constants/text_constants.asm +++ b/constants/text_constants.asm @@ -1,9 +1,11 @@ -DEF PLAYER_NAME_LENGTH EQU 8 -DEF NAME_LENGTH EQU 11 -DEF ITEM_NAME_LENGTH EQU 13 -DEF MOVE_NAME_LENGTH EQU 14 -DEF NAME_BUFFER_LENGTH EQU 20 -DEF GYM_CITY_LENGTH EQU 17 +DEF PLAYER_NAME_LENGTH EQU 8 +DEF STAT_NAME_LENGTH EQU 10 +DEF NAME_LENGTH EQU 11 +DEF ITEM_NAME_LENGTH EQU 13 +DEF TRAINER_NAME_LENGTH EQU 13 +DEF MOVE_NAME_LENGTH EQU 14 +DEF GYM_CITY_LENGTH EQU 17 +DEF NAME_BUFFER_LENGTH EQU 20 ; PrintNumber, PrintBCDNumber const_def 5 diff --git a/data/battle/stat_mod_names.asm b/data/battle/stat_mod_names.asm index 63c956d7..6c68db4e 100644 --- a/data/battle/stat_mod_names.asm +++ b/data/battle/stat_mod_names.asm @@ -2,7 +2,7 @@ ; The relevant move effect IDs correspond to the stats StatModTextStrings: - list_start + list_start STAT_NAME_LENGTH - 1 li "ATTACK" li "DEFENSE" li "SPEED" diff --git a/data/battle/stat_names.asm b/data/battle/stat_names.asm index 30401a99..08685e83 100644 --- a/data/battle/stat_names.asm +++ b/data/battle/stat_names.asm @@ -1,7 +1,7 @@ ; Stats that vitamins can raise or lower VitaminStats: - list_start + list_start STAT_NAME_LENGTH - 1 li "HEALTH" li "ATTACK" li "DEFENSE" diff --git a/data/items/names.asm b/data/items/names.asm index bab26efc..f5c0f27e 100644 --- a/data/items/names.asm +++ b/data/items/names.asm @@ -1,5 +1,5 @@ ItemNames:: - list_start + list_start ITEM_NAME_LENGTH - 1 li "MASTER BALL" li "ULTRA BALL" li "GREAT BALL" diff --git a/data/moves/names.asm b/data/moves/names.asm index 025172d5..caecc06c 100644 --- a/data/moves/names.asm +++ b/data/moves/names.asm @@ -1,5 +1,6 @@ MoveNames:: - list_start + ; in-battle "used !" text can only fit 12 (MOVE_NAME_LENGTH - 2) characters + list_start MOVE_NAME_LENGTH - 2 li "POUND" li "KARATE CHOP" li "DOUBLESLAP" diff --git a/data/player/names_list.asm b/data/player/names_list.asm index 786c1229..44f3c7f1 100644 --- a/data/player/names_list.asm +++ b/data/player/names_list.asm @@ -2,7 +2,7 @@ DefaultNamesPlayerList: db "NEW NAME@" - list_start + list_start PLAYER_NAME_LENGTH - 1 FOR n, 1, NUM_PLAYER_NAMES + 1 li #PLAYERNAME{d:n} ENDR @@ -10,7 +10,7 @@ ENDR DefaultNamesRivalList: db "NEW NAME@" - list_start + list_start PLAYER_NAME_LENGTH - 1 FOR n, 1, NUM_PLAYER_NAMES + 1 li #RIVALNAME{d:n} ENDR diff --git a/data/trainers/move_choices.asm b/data/trainers/move_choices.asm index 1624b326..98c068a1 100644 --- a/data/trainers/move_choices.asm +++ b/data/trainers/move_choices.asm @@ -1,14 +1,15 @@ +DEF __move_choices__ = 0 + MACRO move_choices IF _NARG db \# ; all args ENDC db 0 ; end - DEF list_index += 1 + DEF __move_choices__ += 1 ENDM ; move choice modification methods that are applied for each trainer class TrainerClassMoveChoiceModifications: - list_start move_choices ; YOUNGSTER move_choices 1 ; BUG CATCHER move_choices 1 ; LASS @@ -56,4 +57,5 @@ TrainerClassMoveChoiceModifications: move_choices 1 ; CHANNELER move_choices 1 ; AGATHA move_choices 1, 3 ; LANCE - assert_list_length NUM_TRAINERS + assert __move_choices__ == NUM_TRAINERS, \ + "TrainerClassMoveChoiceModifications: expected {d:NUM_TRAINERS} entries, got {d:__move_choices__}" diff --git a/data/trainers/names.asm b/data/trainers/names.asm index d7c5677c..1b6f2382 100644 --- a/data/trainers/names.asm +++ b/data/trainers/names.asm @@ -1,5 +1,5 @@ TrainerNames:: - list_start + list_start TRAINER_NAME_LENGTH - 1 li "YOUNGSTER" li "BUG CATCHER" li "LASS" diff --git a/engine/battle/effects.asm b/engine/battle/effects.asm index 22765140..394e07e5 100644 --- a/engine/battle/effects.asm +++ b/engine/battle/effects.asm @@ -754,7 +754,7 @@ PrintStatText: jr .findStatName_inner .foundStatName ld de, wStringBuffer - ld bc, NAME_LENGTH - 1 ; all StatModTextStrings are at most 10 bytes + ld bc, STAT_NAME_LENGTH jp CopyData INCLUDE "data/battle/stat_mod_names.asm" diff --git a/engine/battle/get_trainer_name.asm b/engine/battle/get_trainer_name.asm index a0e869fc..1983b08a 100644 --- a/engine/battle/get_trainer_name.asm +++ b/engine/battle/get_trainer_name.asm @@ -20,5 +20,5 @@ GetTrainerName_:: ld hl, wNameBuffer .foundName ld de, wTrainerName - ld bc, ITEM_NAME_LENGTH + ld bc, TRAINER_NAME_LENGTH jp CopyData diff --git a/engine/items/item_effects.asm b/engine/items/item_effects.asm index 12b5bd00..c4ce13de 100644 --- a/engine/items/item_effects.asm +++ b/engine/items/item_effects.asm @@ -1308,7 +1308,7 @@ ItemUseMedicine: jr .statNameLoop .gotStatName ld de, wStringBuffer - ld bc, NAME_LENGTH - 1 ; all VitaminStats are at most 10 bytes + ld bc, STAT_NAME_LENGTH call CopyData ; copy the stat's name to wStringBuffer ld a, SFX_HEAL_AILMENT call PlaySound diff --git a/macros/asserts.asm b/macros/asserts.asm index e2de1505..11e0ee99 100644 --- a/macros/asserts.asm +++ b/macros/asserts.asm @@ -4,8 +4,8 @@ MACRO? _redef_current_label IF DEF(\1) PURGE \1 ENDC - IF _NARG == 3 + (\3) - DEF \1 EQUS "\<_NARG>" + IF _NARG > 2 + DEF \1 EQUS "\3" ELIF STRLEN(#__SCOPE__) IF {{__SCOPE__}} - @ == 0 DEF \1 EQUS #{__SCOPE__} @@ -19,7 +19,8 @@ ENDM MACRO? table_width DEF CURRENT_TABLE_WIDTH = \1 - _redef_current_label CURRENT_TABLE_START, "._table_width\@", 2, \# + SHIFT + _redef_current_label CURRENT_TABLE_START, "._table_width\@", \# ENDM MACRO? assert_table_length @@ -40,11 +41,20 @@ ENDM MACRO? list_start DEF list_index = 0 - _redef_current_label CURRENT_LIST_START, "._list_start\@", 1, \# + DEF list_item_length = 0 + IF _NARG > 0 + DEF list_item_length = \1 + SHIFT + ENDC + _redef_current_label CURRENT_LIST_START, "._list_start\@", \# ENDM MACRO? li ASSERT STRFIND(\1, "@") == -1, "String terminator \"@\" in list entry: \1" + IF list_item_length + ASSERT CHARLEN(\1) <= list_item_length, \ + "List entry longer than {d:list_item_length} characters: \1" + ENDC db \1, "@" DEF list_index += 1 ENDM