diff --git a/Core/GameEngine/Include/Common/AudioEventInfo.h b/Core/GameEngine/Include/Common/AudioEventInfo.h index 112db47826..cebe6af4ec 100644 --- a/Core/GameEngine/Include/Common/AudioEventInfo.h +++ b/Core/GameEngine/Include/Common/AudioEventInfo.h @@ -48,17 +48,19 @@ enum AudioType CPP_11(: Int) AT_SoundEffect }; -extern const char *theAudioPriorityNames[]; +extern const char* const theAudioPriorityNames[]; enum AudioPriority CPP_11(: Int) { AP_LOWEST, AP_LOW, AP_NORMAL, AP_HIGH, - AP_CRITICAL + AP_CRITICAL, + + AP_COUNT }; -extern const char *theSoundTypeNames[]; +extern const char *const theSoundTypeNames[]; enum SoundType CPP_11(: Int) { ST_UI = 0x0001, @@ -72,7 +74,7 @@ enum SoundType CPP_11(: Int) ST_EVERYONE = 0x0100, }; -extern const char *theAudioControlNames[]; +extern const char *const theAudioControlNames[]; enum AudioControl CPP_11(: Int) { AC_LOOP = 0x0001, diff --git a/Core/GameEngine/Include/GameClient/ClientRandomValue.h b/Core/GameEngine/Include/GameClient/ClientRandomValue.h index 9a12e3229f..af62e59cad 100644 --- a/Core/GameEngine/Include/GameClient/ClientRandomValue.h +++ b/Core/GameEngine/Include/GameClient/ClientRandomValue.h @@ -68,10 +68,11 @@ class GameClientRandomVariable */ enum DistributionType { - CONSTANT, UNIFORM, GAUSSIAN, TRIANGULAR, LOW_BIAS, HIGH_BIAS + CONSTANT, UNIFORM, GAUSSIAN, TRIANGULAR, LOW_BIAS, HIGH_BIAS, + DISTRIBUTION_COUNT }; - static const char *DistributionTypeNames[]; + static const char *const DistributionTypeNames[]; /// define the range of random values, and the distribution of values void setRange( Real low, Real high, DistributionType type = UNIFORM ); diff --git a/Core/GameEngine/Include/GameLogic/LogicRandomValue.h b/Core/GameEngine/Include/GameLogic/LogicRandomValue.h index e11bd811d3..2427355f58 100644 --- a/Core/GameEngine/Include/GameLogic/LogicRandomValue.h +++ b/Core/GameEngine/Include/GameLogic/LogicRandomValue.h @@ -68,10 +68,11 @@ class GameLogicRandomVariable */ enum DistributionType { - CONSTANT, UNIFORM, GAUSSIAN, TRIANGULAR, LOW_BIAS, HIGH_BIAS + CONSTANT, UNIFORM, GAUSSIAN, TRIANGULAR, LOW_BIAS, HIGH_BIAS, + DISTRIBUTION_COUNT }; - static const char *DistributionTypeNames[]; + static const char *const DistributionTypeNames[]; /// define the range of random values, and the distribution of values void setRange( Real low, Real high, DistributionType type = UNIFORM ); diff --git a/Core/GameEngine/Source/Common/INI/INIAudioEventInfo.cpp b/Core/GameEngine/Source/Common/INI/INIAudioEventInfo.cpp index a8b4d29587..74d403069f 100644 --- a/Core/GameEngine/Source/Common/INI/INIAudioEventInfo.cpp +++ b/Core/GameEngine/Source/Common/INI/INIAudioEventInfo.cpp @@ -179,7 +179,7 @@ static void parsePitchShift( INI* ini, void *instance, void *store, const void* // STATIC DEFINIITIONS //////////////////////////////////////////////////////////////////////////// -const char *theAudioPriorityNames[] = +const char *const theAudioPriorityNames[] = { "LOWEST", "LOW", @@ -188,8 +188,9 @@ const char *theAudioPriorityNames[] = "CRITICAL", NULL }; +static_assert(ARRAY_SIZE(theAudioPriorityNames) == AP_COUNT + 1, "Incorrect array size"); -const char *theSoundTypeNames[] = +const char *const theSoundTypeNames[] = { "UI", "WORLD", @@ -203,7 +204,7 @@ const char *theSoundTypeNames[] = NULL }; -const char *theAudioControlNames[] = +const char *const theAudioControlNames[] = { "LOOP", "RANDOM", diff --git a/Core/GameEngine/Source/Common/RandomValue.cpp b/Core/GameEngine/Source/Common/RandomValue.cpp index 801a604d01..5fcc8aac6e 100644 --- a/Core/GameEngine/Source/Common/RandomValue.cpp +++ b/Core/GameEngine/Source/Common/RandomValue.cpp @@ -350,10 +350,11 @@ DEBUG_LOG(( "%d: GetGameAudioRandomValueReal = %f, %s line %d", // GameClientRandomVariable // -/*static*/ const char *GameClientRandomVariable::DistributionTypeNames[] = +const char *const GameClientRandomVariable::DistributionTypeNames[] = { "CONSTANT", "UNIFORM", "GAUSSIAN", "TRIANGULAR", "LOW_BIAS", "HIGH_BIAS", NULL }; +static_assert(ARRAY_SIZE(GameClientRandomVariable::DistributionTypeNames) == GameClientRandomVariable::DISTRIBUTION_COUNT + 1, "Incorrect array size"); /** define the range of random values, and the distribution of values @@ -395,10 +396,11 @@ Real GameClientRandomVariable::getValue( void ) const // GameLogicRandomVariable // -/*static*/ const char *GameLogicRandomVariable::DistributionTypeNames[] = +const char *const GameLogicRandomVariable::DistributionTypeNames[] = { "CONSTANT", "UNIFORM", "GAUSSIAN", "TRIANGULAR", "LOW_BIAS", "HIGH_BIAS", NULL }; +static_assert(ARRAY_SIZE(GameLogicRandomVariable::DistributionTypeNames) == GameLogicRandomVariable::DISTRIBUTION_COUNT + 1, "Incorrect array size"); /** define the range of random values, and the distribution of values diff --git a/Core/Libraries/Source/WWVegas/WW3D2/rendobj.h b/Core/Libraries/Source/WWVegas/WW3D2/rendobj.h index 4b758e8ca3..43758e4e08 100644 --- a/Core/Libraries/Source/WWVegas/WW3D2/rendobj.h +++ b/Core/Libraries/Source/WWVegas/WW3D2/rendobj.h @@ -85,20 +85,6 @@ template class DynamicVectorClass; // "unreferenced formal parameter" #pragma warning(disable : 4100) -#ifdef DEFINE_W3DANIMMODE_NAMES -static const char* TheAnimModeNames[] = -{ - "MANUAL", - "LOOP", - "ONCE", - "LOOP_PINGPONG", - "LOOP_BACKWARDS", - "ONCE_BACKWARDS", - NULL -}; -#endif - - ////////////////////////////////////////////////////////////////////////////////// // RenderObjClass // This is the interface for all objects that get rendered by WW3D. @@ -336,6 +322,8 @@ class RenderObjClass : public RefCountClass , public PersistClass, public MultiL ANIM_MODE_LOOP_PINGPONG, ANIM_MODE_LOOP_BACKWARDS, //make sure only backwards playing animations after this one ANIM_MODE_ONCE_BACKWARDS, + + ANIM_MODE_COUNT }; virtual void Set_Animation( void ) { } @@ -653,6 +641,19 @@ WWINLINE bool RenderObjClass::Is_Transform_Identity_No_Validity_Check() const } +#ifdef DEFINE_W3DANIMMODE_NAMES +static const char* const TheAnimModeNames[] = +{ + "MANUAL", + "LOOP", + "ONCE", + "LOOP_PINGPONG", + "LOOP_BACKWARDS", + "ONCE_BACKWARDS", + NULL +}; +static_assert(ARRAY_SIZE(TheAnimModeNames) == RenderObjClass::ANIM_MODE_COUNT + 1, "Incorrect array size"); +#endif #endif diff --git a/Core/Libraries/Source/WWVegas/WWDebug/wwmemlog.cpp b/Core/Libraries/Source/WWVegas/WWDebug/wwmemlog.cpp index e55eef369e..40be136f77 100644 --- a/Core/Libraries/Source/WWVegas/WWDebug/wwmemlog.cpp +++ b/Core/Libraries/Source/WWVegas/WWDebug/wwmemlog.cpp @@ -95,7 +95,7 @@ static unsigned FreeCount; ** Name for each memory category. I'm padding the array with some "undefined" strings in case ** someone forgets to set the name when adding a new category. */ -static const char * _MemoryCategoryNames[] = +static const char *const _MemoryCategoryNames[] = { "UNKNOWN", "Geometry", diff --git a/Core/Libraries/Source/WWVegas/WWLib/Except.cpp b/Core/Libraries/Source/WWVegas/WWLib/Except.cpp index fe1d939101..8829a550ec 100644 --- a/Core/Libraries/Source/WWVegas/WWLib/Except.cpp +++ b/Core/Libraries/Source/WWVegas/WWLib/Except.cpp @@ -138,7 +138,7 @@ static StackWalkType _StackWalk = NULL; static SymFunctionTableAccessType _SymFunctionTableAccess = NULL; static SymGetModuleBaseType _SymGetModuleBase = NULL; -static char const *ImagehelpFunctionNames[] = +static char const *const ImagehelpFunctionNames[] = { "SymCleanup", "SymGetSymFromAddr", diff --git a/Core/Libraries/Source/WWVegas/WWLib/WWCommon.h b/Core/Libraries/Source/WWVegas/WWLib/WWCommon.h index 859eb54496..a2a2248ecc 100644 --- a/Core/Libraries/Source/WWVegas/WWLib/WWCommon.h +++ b/Core/Libraries/Source/WWVegas/WWLib/WWCommon.h @@ -20,6 +20,13 @@ #include "stringex.h" + +// This macro serves as a general way to determine the number of elements within an array. +#ifndef ARRAY_SIZE +#define ARRAY_SIZE(x) int(sizeof(x)/sizeof(x[0])) +#endif + + #if defined(_MSC_VER) && _MSC_VER < 1300 typedef unsigned MemValueType; #else diff --git a/Core/Libraries/Source/WWVegas/WWLib/always.h b/Core/Libraries/Source/WWVegas/WWLib/always.h index d9c912b462..592d2aa073 100644 --- a/Core/Libraries/Source/WWVegas/WWLib/always.h +++ b/Core/Libraries/Source/WWVegas/WWLib/always.h @@ -254,13 +254,6 @@ template T max(T a,T b) #define NULL 0 #endif -/********************************************************************** -** This macro serves as a general way to determine the number of elements -** within an array. -*/ -#ifndef ARRAY_SIZE -#define ARRAY_SIZE(x) int(sizeof(x)/sizeof(x[0])) -#endif #ifndef size_of #define size_of(typ,id) sizeof(((typ*)0)->id) diff --git a/Core/Libraries/Source/WWVegas/WWLib/cpudetect.cpp b/Core/Libraries/Source/WWVegas/WWLib/cpudetect.cpp index 686af13be3..b972a50ec7 100644 --- a/Core/Libraries/Source/WWVegas/WWLib/cpudetect.cpp +++ b/Core/Libraries/Source/WWVegas/WWLib/cpudetect.cpp @@ -120,7 +120,7 @@ char CPUDetectClass::ProcessorString[48]; const char* CPUDetectClass::Get_Processor_Manufacturer_Name() { - static const char* ManufacturerNames[] = { + static const char* const ManufacturerNames[] = { "", "Intel", "UMC", @@ -131,6 +131,7 @@ const char* CPUDetectClass::Get_Processor_Manufacturer_Name() "Rise", "Transmeta" }; + static_assert(ARRAY_SIZE(ManufacturerNames) == MANUFACTURER_COUNT, "Incorrect array size"); return ManufacturerNames[ProcessorManufacturer]; } diff --git a/Core/Libraries/Source/WWVegas/WWLib/cpudetect.h b/Core/Libraries/Source/WWVegas/WWLib/cpudetect.h index 23318f6507..8e31d41881 100644 --- a/Core/Libraries/Source/WWVegas/WWLib/cpudetect.h +++ b/Core/Libraries/Source/WWVegas/WWLib/cpudetect.h @@ -67,7 +67,9 @@ class CPUDetectClass MANUFACTURER_NEXTGEN, MANUFACTURER_VIA, MANUFACTURER_RISE, - MANUFACTURER_TRANSMETA + MANUFACTURER_TRANSMETA, + + MANUFACTURER_COUNT } ProcessorManufacturerType; typedef enum diff --git a/Core/Libraries/Source/debug/debug_stack.cpp b/Core/Libraries/Source/debug/debug_stack.cpp index 60a5aae4fd..e40e573ebc 100644 --- a/Core/Libraries/Source/debug/debug_stack.cpp +++ b/Core/Libraries/Source/debug/debug_stack.cpp @@ -47,7 +47,7 @@ static union #undef DBGHELP #define DBGHELP(name,ret,par) #name, -static char const *DebughelpFunctionNames[] = +static char const *const DebughelpFunctionNames[] = { #include "debug_stack.inl" NULL diff --git a/Generals/Code/GameEngine/Include/Common/BitFlags.h b/Generals/Code/GameEngine/Include/Common/BitFlags.h index 33f7f792a2..2126b37c1f 100644 --- a/Generals/Code/GameEngine/Include/Common/BitFlags.h +++ b/Generals/Code/GameEngine/Include/Common/BitFlags.h @@ -53,9 +53,10 @@ class BitFlags { private: std::bitset m_bits; - static const char* s_bitNameList[]; public: + CPP_11(static constexpr size_t NumBits = NUMBITS); + static const char* const s_bitNameList[]; /* just a little syntactic sugar so that there is no "foo = 0" compatible constructor @@ -261,7 +262,7 @@ class BitFlags return true; } - static const char** getBitNames() + static const char* const* getBitNames() { return s_bitNameList; } @@ -274,7 +275,7 @@ class BitFlags static Int getSingleBitFromName(const char* token) { Int i = 0; - for(const char** name = s_bitNameList; *name; ++name, ++i ) + for(const char* const* name = s_bitNameList; *name; ++name, ++i ) { if( stricmp( *name, token ) == 0 ) { diff --git a/Generals/Code/GameEngine/Include/Common/GameCommon.h b/Generals/Code/GameEngine/Include/Common/GameCommon.h index 833e6374ac..87813783e1 100644 --- a/Generals/Code/GameEngine/Include/Common/GameCommon.h +++ b/Generals/Code/GameEngine/Include/Common/GameCommon.h @@ -186,7 +186,7 @@ enum // NOTE NOTE NOTE: Keep TheVeterencyNames in sync with these. enum VeterancyLevel CPP_11(: Int) { - LEVEL_REGULAR = 0, + LEVEL_REGULAR, LEVEL_VETERAN, LEVEL_ELITE, LEVEL_HEROIC, @@ -194,12 +194,12 @@ enum VeterancyLevel CPP_11(: Int) LEVEL_COUNT, LEVEL_INVALID, - LEVEL_FIRST = LEVEL_REGULAR, + LEVEL_FIRST = 0, LEVEL_LAST = LEVEL_HEROIC }; // TheVeterancyNames is defined in GameCommon.cpp -extern const char *TheVeterancyNames[]; +extern const char *const TheVeterancyNames[]; //------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------- @@ -211,6 +211,7 @@ enum CommandSourceType CPP_11(: Int) CMD_FROM_AI, CMD_FROM_DOZER, // Special rare command when the dozer originates a command to attack a mine. Mines are not ai-attackable, and it seems deceitful for the dozer to generate a player or script command. jba. + COMMAND_SOURCE_TYPE_COUNT }; //------------------------------------------------------------------------------------------------- @@ -478,14 +479,16 @@ inline Real stdAngleDiff(Real a1, Real a2) // NOTE NOTE NOTE: Keep TheRelationShipNames in sync with this enum enum Relationship CPP_11(: Int) { - ENEMIES = 0, + ENEMIES, NEUTRAL, - ALLIES + ALLIES, + + RELATIONSHIP_COUNT }; // TheRelationShipNames is defined in Common/GameCommon.cpp -extern const char *TheRelationshipNames[]; +extern const char *const TheRelationshipNames[]; #endif // _GAMECOMMON_H_ diff --git a/Generals/Code/GameEngine/Include/Common/GameLOD.h b/Generals/Code/GameEngine/Include/Common/GameLOD.h index 7eab7454f0..2d08f9f161 100644 --- a/Generals/Code/GameEngine/Include/Common/GameLOD.h +++ b/Generals/Code/GameEngine/Include/Common/GameLOD.h @@ -69,6 +69,8 @@ enum CpuType CPP_11(: Int) P3, P4, K7, + + CPU_MAX }; //Keep this in sync with VideoNames in Gamelod.cpp diff --git a/Generals/Code/GameEngine/Include/Common/GameType.h b/Generals/Code/GameEngine/Include/Common/GameType.h index 8fbe7dea77..203e91bdb6 100644 --- a/Generals/Code/GameEngine/Include/Common/GameType.h +++ b/Generals/Code/GameEngine/Include/Common/GameType.h @@ -67,17 +67,18 @@ class INI; //------------------------------------------------------------------------------------------------- enum TimeOfDay CPP_11(: Int) { - TIME_OF_DAY_INVALID = 0, - TIME_OF_DAY_FIRST = 1, - TIME_OF_DAY_MORNING = TIME_OF_DAY_FIRST, + TIME_OF_DAY_INVALID, + + TIME_OF_DAY_MORNING, TIME_OF_DAY_AFTERNOON, TIME_OF_DAY_EVENING, TIME_OF_DAY_NIGHT, - TIME_OF_DAY_COUNT + TIME_OF_DAY_COUNT, + TIME_OF_DAY_FIRST = TIME_OF_DAY_MORNING, }; -extern const char *TimeOfDayNames[]; +extern const char *const TimeOfDayNames[]; // defined in Common/GameType.cpp //------------------------------------------------------------------------------------------------- @@ -89,7 +90,7 @@ enum Weather CPP_11(: Int) WEATHER_COUNT }; -extern const char *WeatherNames[]; +extern const char *const WeatherNames[]; enum Scorches CPP_11(: Int) { diff --git a/Generals/Code/GameEngine/Include/Common/Geometry.h b/Generals/Code/GameEngine/Include/Common/Geometry.h index 9dc49463f5..daa963ce5f 100644 --- a/Generals/Code/GameEngine/Include/Common/Geometry.h +++ b/Generals/Code/GameEngine/Include/Common/Geometry.h @@ -48,22 +48,23 @@ class INI; //------------------------------------------------------------------------------------------------- enum GeometryType CPP_11(: Int) { - GEOMETRY_SPHERE = 0, ///< partition/collision testing as sphere. (majorRadius = radius) + GEOMETRY_SPHERE, ///< partition/collision testing as sphere. (majorRadius = radius) GEOMETRY_CYLINDER, ///< partition/collision testing as cylinder. (majorRadius = radius, height = height) GEOMETRY_BOX, ///< partition/collision testing as rectangular box (majorRadius = half len in forward dir; minorRadius = half len in side dir; height = height) GEOMETRY_NUM_TYPES, - GEOMETRY_FIRST = GEOMETRY_SPHERE + GEOMETRY_FIRST = 0 }; #ifdef DEFINE_GEOMETRY_NAMES -static const char *GeometryNames[] = +static const char *const GeometryNames[] = { "SPHERE", "CYLINDER", "BOX", NULL }; +static_assert(ARRAY_SIZE(GeometryNames) == GEOMETRY_NUM_TYPES + 1, "Incorrect array size"); #endif // end DEFINE_GEOMETRY_NAMES //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Include/Common/INI.h b/Generals/Code/GameEngine/Include/Common/INI.h index 02ba66aa04..defb17dd40 100644 --- a/Generals/Code/GameEngine/Include/Common/INI.h +++ b/Generals/Code/GameEngine/Include/Common/INI.h @@ -91,14 +91,14 @@ enum /** Function typedef for parsing data block fields. * * buffer - the character buffer of the line from INI that we are reading and parsing - * instance - instance of what we're loading (for example a thingtemplate instance) + * instance - instance of what we're loading (for example a ThingTemplate instance) * store - where to store the data parsed, this is a field in the *instance* 'instance' */ //------------------------------------------------------------------------------------------------- typedef void (*INIFieldParseProc)( INI *ini, void *instance, void *store, const void* userData ); //------------------------------------------------------------------------------------------------- -typedef const char* ConstCharPtr; +typedef const char* const ConstCharPtr; typedef ConstCharPtr* ConstCharPtrArray; //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Include/Common/KindOf.h b/Generals/Code/GameEngine/Include/Common/KindOf.h index 848ec363da..1185b4100f 100644 --- a/Generals/Code/GameEngine/Include/Common/KindOf.h +++ b/Generals/Code/GameEngine/Include/Common/KindOf.h @@ -43,8 +43,8 @@ enum KindOfType CPP_11(: Int) { KINDOF_INVALID = -1, - KINDOF_FIRST = 0, - KINDOF_OBSTACLE = KINDOF_FIRST, ///< an obstacle to land-based pathfinders + + KINDOF_OBSTACLE, ///< an obstacle to land-based pathfinders KINDOF_SELECTABLE, ///< Selectable KINDOF_IMMOBILE, ///< fixed in location KINDOF_CAN_ATTACK, ///< can attack @@ -143,8 +143,8 @@ enum KindOfType CPP_11(: Int) KINDOF_IGNORES_SELECT_ALL, ///< Too late to figure out intelligently if something should respond to a Select All command KINDOF_DONT_AUTO_CRUSH_INFANTRY, ///< These units don't try to crush the infantry if ai. - KINDOF_COUNT // total number of kindofs - + KINDOF_COUNT, // total number of kindofs + KINDOF_FIRST = 0, }; typedef BitFlags KindOfMaskType; diff --git a/Generals/Code/GameEngine/Include/Common/ModelState.h b/Generals/Code/GameEngine/Include/Common/ModelState.h index 4259a39f0a..9291c89666 100644 --- a/Generals/Code/GameEngine/Include/Common/ModelState.h +++ b/Generals/Code/GameEngine/Include/Common/ModelState.h @@ -91,13 +91,11 @@ enum ModelConditionFlagType CPP_11(: Int) { MODELCONDITION_INVALID = -1, - MODELCONDITION_FIRST = 0, - // // Note: these values are saved in save files, so you MUST NOT REMOVE OR CHANGE // existing values! // - MODELCONDITION_TOPPLED = MODELCONDITION_FIRST, + MODELCONDITION_TOPPLED, MODELCONDITION_FRONTCRUSHED, MODELCONDITION_BACKCRUSHED, MODELCONDITION_DAMAGED, @@ -214,7 +212,8 @@ enum ModelConditionFlagType CPP_11(: Int) // existing values! // - MODELCONDITION_COUNT + MODELCONDITION_COUNT, + MODELCONDITION_FIRST = 0, }; //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Include/Common/Player.h b/Generals/Code/GameEngine/Include/Common/Player.h index 380520ed35..df1e60782a 100644 --- a/Generals/Code/GameEngine/Include/Common/Player.h +++ b/Generals/Code/GameEngine/Include/Common/Player.h @@ -101,13 +101,14 @@ enum ScienceAvailabilityType CPP_11(: Int) }; #ifdef DEFINE_SCIENCE_AVAILABILITY_NAMES -static const char *ScienceAvailabilityNames[] = +static const char *const ScienceAvailabilityNames[] = { "Available", "Disabled", "Hidden", NULL }; +static_assert(ARRAY_SIZE(ScienceAvailabilityNames) == SCIENCE_AVAILABILITY_COUNT + 1, "Incorrect array size"); #endif // end DEFINE_SCIENCE_AVAILABILITY_NAMES static const Int NUM_HOTKEY_SQUADS = 10; diff --git a/Generals/Code/GameEngine/Include/Common/Radar.h b/Generals/Code/GameEngine/Include/Common/Radar.h index e1c583dee4..aae4e8d102 100644 --- a/Generals/Code/GameEngine/Include/Common/Radar.h +++ b/Generals/Code/GameEngine/Include/Common/Radar.h @@ -145,7 +145,7 @@ enum RadarPriorityType CPP_11(: Int) RADAR_PRIORITY_NUM_PRIORITIES }; #ifdef DEFINE_RADAR_PRIORITY_NAMES -static const char *RadarPriorityNames[] = +static const char *const RadarPriorityNames[] = { "INVALID", // a priority that has not been set (in general it won't show up on the radar) "NOT_ON_RADAR", // object specifically forbidden from being on the radar @@ -155,6 +155,7 @@ static const char *RadarPriorityNames[] = NULL }; +static_assert(ARRAY_SIZE(RadarPriorityNames) == RADAR_PRIORITY_NUM_PRIORITIES + 1, "Incorrect array size"); #endif // DEFINE_RADAR_PRIOTITY_NAMES //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Include/Common/TerrainTypes.h b/Generals/Code/GameEngine/Include/Common/TerrainTypes.h index 20aaf10871..9715b282d3 100644 --- a/Generals/Code/GameEngine/Include/Common/TerrainTypes.h +++ b/Generals/Code/GameEngine/Include/Common/TerrainTypes.h @@ -74,7 +74,7 @@ typedef enum } TerrainClass; #ifdef DEFINE_TERRAIN_TYPE_NAMES -static const char *terrainTypeNames[] = +static const char *const terrainTypeNames[] = { "NONE", "DESERT_1", @@ -104,6 +104,7 @@ static const char *terrainTypeNames[] = NULL }; +static_assert(ARRAY_SIZE(terrainTypeNames) == TERRAIN_NUM_CLASSES + 1, "Incorrect array size"); #endif // end DEFINE_TERRAIN_TYPE_NAMES //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Include/Common/ThingSort.h b/Generals/Code/GameEngine/Include/Common/ThingSort.h index 2f1a8a48c4..c12eb63731 100644 --- a/Generals/Code/GameEngine/Include/Common/ThingSort.h +++ b/Generals/Code/GameEngine/Include/Common/ThingSort.h @@ -32,12 +32,12 @@ #ifndef __THINGSORT_H_ #define __THINGSORT_H_ +#include "GameCommon.h" + //------------------------------------------------------------------------------------------------- enum EditorSortingType CPP_11(: Int) { - ES_FIRST = 0, - - ES_NONE = ES_FIRST, + ES_NONE, ES_STRUCTURE, ES_INFANTRY, ES_VEHICLE, @@ -52,11 +52,12 @@ enum EditorSortingType CPP_11(: Int) ES_ROAD, // road objects...should never actually be in the object panel. ES_WAYPOINT, // waypoint objects...should never actually be in the object panel. - ES_NUM_SORTING_TYPES - + ES_NUM_SORTING_TYPES, + ES_FIRST = 0, }; + #ifdef DEFINE_EDITOR_SORTING_NAMES -static const char *EditorSortingNames[] = +static const char *const EditorSortingNames[] = { "NONE", "STRUCTURE", @@ -75,6 +76,7 @@ static const char *EditorSortingNames[] = NULL }; +static_assert(ARRAY_SIZE(EditorSortingNames) == ES_NUM_SORTING_TYPES + 1, "Incorrect array size"); #endif #endif // __THINGSORT_H_ diff --git a/Generals/Code/GameEngine/Include/Common/ThingTemplate.h b/Generals/Code/GameEngine/Include/Common/ThingTemplate.h index 37a0fbfbd7..aaf7a2e7c6 100644 --- a/Generals/Code/GameEngine/Include/Common/ThingTemplate.h +++ b/Generals/Code/GameEngine/Include/Common/ThingTemplate.h @@ -207,7 +207,7 @@ enum BuildCompletionType CPP_11(: Int) BC_NUM_TYPES }; #ifdef DEFINE_BUILD_COMPLETION_NAMES -static const char *BuildCompletionNames[] = +static const char *const BuildCompletionNames[] = { "INVALID", "APPEARS_AT_RALLY_POINT", @@ -215,6 +215,7 @@ static const char *BuildCompletionNames[] = NULL }; +static_assert(ARRAY_SIZE(BuildCompletionNames) == BC_NUM_TYPES + 1, "Incorrect array size"); #endif // end DEFINE_BUILD_COMPLETION_NAMES enum BuildableStatus CPP_11(: Int) @@ -229,7 +230,7 @@ enum BuildableStatus CPP_11(: Int) }; #ifdef DEFINE_BUILDABLE_STATUS_NAMES -static const char *BuildableStatusNames[] = +static const char *const BuildableStatusNames[] = { "Yes", "Ignore_Prerequisites", @@ -237,6 +238,7 @@ static const char *BuildableStatusNames[] = "Only_By_AI", NULL }; +static_assert(ARRAY_SIZE(BuildableStatusNames) == BSTATUS_NUM_TYPES + 1, "Incorrect array size"); #endif // end DEFINE_BUILDABLE_STATUS_NAMES //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Include/Common/Upgrade.h b/Generals/Code/GameEngine/Include/Common/Upgrade.h index a1b45943af..e443c1f9f7 100644 --- a/Generals/Code/GameEngine/Include/Common/Upgrade.h +++ b/Generals/Code/GameEngine/Include/Common/Upgrade.h @@ -151,7 +151,7 @@ enum UpgradeType CPP_11(: Int) NUM_UPGRADE_TYPES }; -extern const char *TheUpgradeTypeNames[]; //Change above, change this! +extern const char *const TheUpgradeTypeNames[]; //Change above, change this! //------------------------------------------------------------------------------------------------- /** A single upgrade template definition */ diff --git a/Generals/Code/GameEngine/Include/GameClient/Anim2D.h b/Generals/Code/GameEngine/Include/GameClient/Anim2D.h index 5c36e0277e..ef856aa9c9 100644 --- a/Generals/Code/GameEngine/Include/GameClient/Anim2D.h +++ b/Generals/Code/GameEngine/Include/GameClient/Anim2D.h @@ -56,7 +56,7 @@ enum Anim2DMode CPP_11(: Int) }; #ifdef DEFINE_ANIM_2D_MODE_NAMES -static const char *Anim2DModeNames[] = +static const char *const Anim2DModeNames[] = { "NONE", "ONCE", @@ -67,6 +67,7 @@ static const char *Anim2DModeNames[] = "PING_PONG_BACKWARDS", NULL }; +static_assert(ARRAY_SIZE(Anim2DModeNames) == ANIM_2D_NUM_MODES + 1, "Incorrect array size"); #endif // ------------------------------------------------------------------------------------------------ diff --git a/Generals/Code/GameEngine/Include/GameClient/ControlBar.h b/Generals/Code/GameEngine/Include/GameClient/ControlBar.h index 65b4642c0a..681a46daa0 100644 --- a/Generals/Code/GameEngine/Include/GameClient/ControlBar.h +++ b/Generals/Code/GameEngine/Include/GameClient/ControlBar.h @@ -99,12 +99,10 @@ enum CommandOption CPP_11(: Int) SCRIPT_ONLY = 0x00080000, // Only a script can use this command (not by users) IGNORES_UNDERPOWERED = 0x00100000, // this button isn't disabled if its object is merely underpowered USES_MINE_CLEARING_WEAPONSET= 0x00200000, // uses the special mine-clearing weaponset, even if not current - - NUM_COMMAND_OPTIONS }; #ifdef DEFINE_COMMAND_OPTION_NAMES -static const char *TheCommandOptionNames[] = +static const char *const TheCommandOptionNames[] = { "NEED_TARGET_ENEMY_OBJECT", "NEED_TARGET_NEUTRAL_OBJECT", @@ -212,7 +210,7 @@ enum GUICommandType CPP_11(: Int) }; #ifdef DEFINE_GUI_COMMMAND_NAMES -static const char *TheGuiCommandNames[] = +static const char *const TheGuiCommandNames[] = { "NONE", "DOZER_CONSTRUCT", @@ -254,6 +252,7 @@ static const char *TheGuiCommandNames[] = NULL }; +static_assert(ARRAY_SIZE(TheGuiCommandNames) == GUI_COMMAND_NUM_COMMANDS + 1, "Incorrect array size"); #endif // end DEFINE_GUI_COMMAND_NAMES enum CommandButtonMappedBorderType CPP_11(: Int) @@ -277,6 +276,7 @@ static const LookupListRec CommandButtonMappedBorderTypeNames[] = { NULL, 0 } }; +static_assert(ARRAY_SIZE(CommandButtonMappedBorderTypeNames) == COMMAND_BUTTON_BORDER_COUNT + 1, "Incorrect array size"); //------------------------------------------------------------------------------------------------- /** Command buttons are used to load the buttons we place on throughout the command bar * interface in different context sensitive windows depending on the situation and diff --git a/Generals/Code/GameEngine/Include/GameClient/Credits.h b/Generals/Code/GameEngine/Include/GameClient/Credits.h index 9e8c851f7b..48aaf014ed 100644 --- a/Generals/Code/GameEngine/Include/GameClient/Credits.h +++ b/Generals/Code/GameEngine/Include/GameClient/Credits.h @@ -83,9 +83,10 @@ static const LookupListRec CreditStyleNames[] = { "MINORTITLE", CREDIT_STYLE_POSITION }, { "NORMAL", CREDIT_STYLE_NORMAL }, { "COLUMN", CREDIT_STYLE_COLUMN }, - + // CREDIT_STYLE_BLANK { NULL, 0 } }; +static_assert(ARRAY_SIZE(CreditStyleNames) == MAX_CREDIT_STYLES, "Incorrect array size"); class CreditsLine diff --git a/Generals/Code/GameEngine/Include/GameClient/DisconnectMenu.h b/Generals/Code/GameEngine/Include/GameClient/DisconnectMenu.h index 7561cc3705..a9423f5b13 100644 --- a/Generals/Code/GameEngine/Include/GameClient/DisconnectMenu.h +++ b/Generals/Code/GameEngine/Include/GameClient/DisconnectMenu.h @@ -69,13 +69,13 @@ class DisconnectMenu { DisconnectManager *m_disconnectManager; ///< For retrieving status updates from the disconnect manager. DisconnectMenuStateType m_menuState; ///< The current state of the menu screen. - static const char *m_playerNameTextControlNames[MAX_SLOTS]; ///< names of the player name controls in the window. - static const char *m_playerTimeoutTextControlNames[MAX_SLOTS]; ///< names of the timeout controls in the window. - static const char *m_playerVoteButtonControlNames[MAX_SLOTS]; ///< names of the vote button controls in the window. - static const char *m_playerVoteCountControlNames[MAX_SLOTS]; ///< names of the vote count static text controls in the window. - static const char *m_packetRouterTimeoutControlName; ///< name of the packet router timeout control window. - static const char *m_packetRouterTimeoutLabelControlName; ///< name of the packet router timeout label control window. - static const char *m_textDisplayControlName; ///< name of the text display listbox control window. + static const char *const m_playerNameTextControlNames[MAX_SLOTS]; ///< names of the player name controls in the window. + static const char *const m_playerTimeoutTextControlNames[MAX_SLOTS]; ///< names of the timeout controls in the window. + static const char *const m_playerVoteButtonControlNames[MAX_SLOTS]; ///< names of the vote button controls in the window. + static const char *const m_playerVoteCountControlNames[MAX_SLOTS]; ///< names of the vote count static text controls in the window. + static const char *const m_packetRouterTimeoutControlName; ///< name of the packet router timeout control window. + static const char *const m_packetRouterTimeoutLabelControlName; ///< name of the packet router timeout label control window. + static const char *const m_textDisplayControlName; ///< name of the text display listbox control window. }; extern DisconnectMenu *TheDisconnectMenu; diff --git a/Generals/Code/GameEngine/Include/GameClient/Drawable.h b/Generals/Code/GameEngine/Include/GameClient/Drawable.h index 7111d9e26e..42a48f9eee 100644 --- a/Generals/Code/GameEngine/Include/GameClient/Drawable.h +++ b/Generals/Code/GameEngine/Include/GameClient/Drawable.h @@ -81,9 +81,8 @@ enum DrawableIconType CPP_11(: Int) /** NOTE: This enum MUST appear in the same order as TheDrawableIconNames array to be * indexed correctly using that array */ ICON_INVALID = -1, - ICON_FIRST = 0, - ICON_DEFAULT_HEAL = ICON_FIRST, + ICON_DEFAULT_HEAL, ICON_STRUCTURE_HEAL, ICON_VEHICLE_HEAL, #ifdef ALLOW_DEMORALIZE @@ -102,7 +101,8 @@ enum DrawableIconType CPP_11(: Int) ICON_ENTHUSIASTIC_SUBLIMINAL, ICON_CARBOMB, - MAX_ICONS + MAX_ICONS, + ICON_FIRST = 0, }; //----------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Include/GameClient/EstablishConnectionsMenu.h b/Generals/Code/GameEngine/Include/GameClient/EstablishConnectionsMenu.h index 7018d5d42e..50351552e0 100644 --- a/Generals/Code/GameEngine/Include/GameClient/EstablishConnectionsMenu.h +++ b/Generals/Code/GameEngine/Include/GameClient/EstablishConnectionsMenu.h @@ -47,9 +47,9 @@ class EstablishConnectionsMenu { protected: EstablishConnectionsMenuStateType m_menuState; - static const char *m_playerReadyControlNames[MAX_SLOTS]; - static const char *m_playerNameControlNames[MAX_SLOTS]; - static const char *m_playerStatusControlNames[MAX_SLOTS]; + static const char *const m_playerReadyControlNames[MAX_SLOTS]; + static const char *const m_playerNameControlNames[MAX_SLOTS]; + static const char *const m_playerStatusControlNames[MAX_SLOTS]; }; extern EstablishConnectionsMenu *TheEstablishConnectionsMenu; diff --git a/Generals/Code/GameEngine/Include/GameClient/Eva.h b/Generals/Code/GameEngine/Include/GameClient/Eva.h index 313453163b..b2ddbd1aff 100644 --- a/Generals/Code/GameEngine/Include/GameClient/Eva.h +++ b/Generals/Code/GameEngine/Include/GameClient/Eva.h @@ -39,8 +39,7 @@ class Player; // Keep in sync with TheEvaMessageNames AND Eva::s_shouldPlayFuncs enum EvaMessage CPP_11(: Int) { - EVA_FIRST = 0, - EVA_LowPower = EVA_FIRST, + EVA_LowPower, EVA_InsufficientFunds, EVA_SuperweaponDetected_ParticleCannon, EVA_SuperweaponDetected_Nuke, @@ -61,9 +60,10 @@ enum EvaMessage CPP_11(: Int) EVA_BuildingBeingStolen, EVA_COUNT, + EVA_FIRST = 0, }; -extern const char *TheEvaMessageNames[]; +extern const char *const TheEvaMessageNames[]; //------------------------------------------------------------------------------------ EvaCheckInfo struct EvaSideSounds diff --git a/Generals/Code/GameEngine/Include/GameClient/GameWindow.h b/Generals/Code/GameEngine/Include/GameClient/GameWindow.h index 7de2f66079..ad34564485 100644 --- a/Generals/Code/GameEngine/Include/GameClient/GameWindow.h +++ b/Generals/Code/GameEngine/Include/GameClient/GameWindow.h @@ -500,8 +500,8 @@ extern void GameWinDefaultTooltip( GameWindow *window, WinInstanceData *instData, UnsignedInt mouse ); -extern const char *WindowStatusNames[]; -extern const char *WindowStyleNames[]; +extern const char *const WindowStatusNames[]; +extern const char *const WindowStyleNames[]; #endif // __GAMEWINDOW_H_ diff --git a/Generals/Code/GameEngine/Include/GameClient/GameWindowTransitions.h b/Generals/Code/GameEngine/Include/GameClient/GameWindowTransitions.h index c91f7a73e5..35ed971446 100644 --- a/Generals/Code/GameEngine/Include/GameClient/GameWindowTransitions.h +++ b/Generals/Code/GameEngine/Include/GameClient/GameWindowTransitions.h @@ -48,6 +48,8 @@ #ifndef __GAME_WINDOW_TRANSITIONS_H_ #define __GAME_WINDOW_TRANSITIONS_H_ +#include "Common/GameCommon.h" + //----------------------------------------------------------------------------- // SYSTEM INCLUDES //////////////////////////////////////////////////////////// //----------------------------------------------------------------------------- @@ -106,6 +108,7 @@ static const LookupListRec TransitionStyleNames[] = { "REVERSESOUND", REVERSE_SOUND_TRANSITION }, { NULL, 0 } }; +static_assert(ARRAY_SIZE(TransitionStyleNames) == MAX_TRANSITION_WINDOW_STYLES + 1, "Incorrect array size"); // base class for the transitions // inherit off of this adding in all the values diff --git a/Generals/Code/GameEngine/Include/GameClient/Image.h b/Generals/Code/GameEngine/Include/GameClient/Image.h index 2517ec5ade..0fc166c55f 100644 --- a/Generals/Code/GameEngine/Include/GameClient/Image.h +++ b/Generals/Code/GameEngine/Include/GameClient/Image.h @@ -51,7 +51,7 @@ typedef enum } ImageStatus; #ifdef DEFINE_IMAGE_STATUS_NAMES -static const char *imageStatusNames[] = +static const char *const imageStatusNames[] = { "ROTATED_90_CLOCKWISE", "RAW_TEXTURE", diff --git a/Generals/Code/GameEngine/Include/GameClient/InGameUI.h b/Generals/Code/GameEngine/Include/GameClient/InGameUI.h index dfb21199e6..8e712e5961 100644 --- a/Generals/Code/GameEngine/Include/GameClient/InGameUI.h +++ b/Generals/Code/GameEngine/Include/GameClient/InGameUI.h @@ -102,7 +102,7 @@ enum RadiusCursorType CPP_11(: Int) }; #ifdef DEFINE_RADIUSCURSOR_NAMES -static const char *TheRadiusCursorNames[] = +static const char *const TheRadiusCursorNames[] = { "NONE", "ATTACK_DAMAGE_AREA", @@ -135,6 +135,7 @@ static const char *TheRadiusCursorNames[] = NULL }; +static_assert(ARRAY_SIZE(TheRadiusCursorNames) == RADIUSCURSOR_COUNT + 1, "Incorrect array size"); #endif // ------------------------------------------------------------------------------------------------ diff --git a/Generals/Code/GameEngine/Include/GameClient/MetaEvent.h b/Generals/Code/GameEngine/Include/GameClient/MetaEvent.h index 9107a293b2..ebbc5a24b4 100644 --- a/Generals/Code/GameEngine/Include/GameClient/MetaEvent.h +++ b/Generals/Code/GameEngine/Include/GameClient/MetaEvent.h @@ -269,7 +269,9 @@ enum MappableKeyTransition CPP_11(: Int) { DOWN, UP, - DOUBLEDOWN // if a key transition is repeated immediately, we generate this. + DOUBLEDOWN, // if a key transition is repeated immediately, we generate this. + + MAPPABLE_KEY_TRANSITION_COUNT }; static const LookupListRec TransitionNames[] = @@ -279,6 +281,7 @@ static const LookupListRec TransitionNames[] = { "DOUBLEDOWN", DOUBLEDOWN }, { NULL, 0 } }; +static_assert(ARRAY_SIZE(TransitionNames) == MAPPABLE_KEY_TRANSITION_COUNT + 1, "Incorrect array size"); // ------------------------------------------------------------------------------- // an easier-to-type subset of the KEY_STATE stuff. @@ -322,7 +325,7 @@ enum CommandUsableInType CPP_11(: Int) COMMANDUSABLE_EVERYWHERE = ~0, }; -static const char* TheCommandUsableInNames[] = +static const char* const TheCommandUsableInNames[] = { "SHELL", "GAME", diff --git a/Generals/Code/GameEngine/Include/GameClient/ParticleSys.h b/Generals/Code/GameEngine/Include/GameClient/ParticleSys.h index 5bb10628c0..4970317cfc 100644 --- a/Generals/Code/GameEngine/Include/GameClient/ParticleSys.h +++ b/Generals/Code/GameEngine/Include/GameClient/ParticleSys.h @@ -107,8 +107,8 @@ enum ParticlePriorityType CPP_11(: Int) CRITICAL, ///< super special top priority like a superweapon ALWAYS_RENDER, ///< used for logically important display (not just fluff), so must never be culled, regardless of particle cap, lod, etc // !!! *Noting* goes here ... special is the top priority !!! - PARTICLE_PRIORITY_HIGHEST = ALWAYS_RENDER, - NUM_PARTICLE_PRIORITIES + NUM_PARTICLE_PRIORITIES, + PARTICLE_PRIORITY_HIGHEST = NUM_PARTICLE_PRIORITIES - 1, }; /** @@ -250,46 +250,6 @@ class Particle : public MemoryPoolObject, }; - -//-------------------------------------------------------------------------------------------------------------- - -#ifdef DEFINE_PARTICLE_SYSTEM_NAMES - -/**** NOTE: These MUST be kept in sync with the enumerations below *****/ - -static const char *ParticleShaderTypeNames[] = -{ - "NONE", "ADDITIVE", "ALPHA", "ALPHA_TEST", "MULTIPLY", NULL -}; - -static const char *ParticleTypeNames[] = -{ - "NONE", "PARTICLE", "DRAWABLE", "STREAK", "VOLUME_PARTICLE", NULL -}; - -static const char *EmissionVelocityTypeNames[] = -{ - "NONE", "ORTHO", "SPHERICAL", "HEMISPHERICAL", "CYLINDRICAL", "OUTWARD", NULL -}; - -static const char *EmissionVolumeTypeNames[] = -{ - "NONE", "POINT", "LINE", "BOX", "SPHERE", "CYLINDER", NULL -}; - -//"NONE", "FLUFF", "DEBRIS", "NATURE", "WEAPON", "DAMAGE", "SPECIAL" -static const char *ParticlePriorityNames[] = -{ - "NONE", "WEAPON_EXPLOSION","SCORCHMARK","DUST_TRAIL","BUILDUP","DEBRIS_TRAIL","UNIT_DAMAGE_FX","DEATH_EXPLOSION","SEMI_CONSTANT","CONSTANT","WEAPON_TRAIL","AREA_EFFECT","CRITICAL", "ALWAYS_RENDER", NULL -}; - -static const char *WindMotionNames[] = -{ - "NONE", "Unused", "PingPong", "Circular", NULL -}; - -#endif - /** * All of the properties of a particle system, used by both ParticleSystemTemplates * and ParticleSystem classes. @@ -310,13 +270,15 @@ class ParticleSystemInfo : public Snapshot enum ParticleShaderType { - INVALID_SHADER=0, ADDITIVE, ALPHA, ALPHA_TEST, MULTIPLY + INVALID_SHADER=0, ADDITIVE, ALPHA, ALPHA_TEST, MULTIPLY, + PARTICLE_SHADER_TYPE_COUNT } m_shaderType; ///< how this particle is rendered enum ParticleType { - INVALID_TYPE=0, PARTICLE, DRAWABLE, STREAK, VOLUME_PARTICLE ///< is a particle a 2D-screen-facing particle, or a Drawable, or a Segment in a streak? + INVALID_TYPE=0, PARTICLE, DRAWABLE, STREAK, VOLUME_PARTICLE, ///< is a particle a 2D-screen-facing particle, or a Drawable, or a Segment in a streak? + PARTICLE_TYPE_COUNT } m_particleType; @@ -376,7 +338,8 @@ class ParticleSystemInfo : public Snapshot // The direction and speed at which particles are emitted enum EmissionVelocityType { - INVALID_VELOCITY=0, ORTHO, SPHERICAL, HEMISPHERICAL, CYLINDRICAL, OUTWARD + INVALID_VELOCITY=0, ORTHO, SPHERICAL, HEMISPHERICAL, CYLINDRICAL, OUTWARD, + EMISSION_VELOCITY_TYPE_COUNT } m_emissionVelocityType; @@ -419,7 +382,8 @@ class ParticleSystemInfo : public Snapshot // Note that the volume is relative to the system's position and orientation enum EmissionVolumeType { - INVALID_VOLUME=0, POINT, LINE, BOX, SPHERE, CYLINDER + INVALID_VOLUME=0, POINT, LINE, BOX, SPHERE, CYLINDER, + EMISSION_VOLUME_TYPE_COUNT } m_emissionVolumeType; ///< the type of volume where particles are created @@ -468,7 +432,9 @@ class ParticleSystemInfo : public Snapshot WIND_MOTION_INVALID = 0, WIND_MOTION_NOT_USED, WIND_MOTION_PING_PONG, - WIND_MOTION_CIRCULAR + WIND_MOTION_CIRCULAR, + + WIND_MOTION_COUNT }; WindMotion m_windMotion; ///< motion of the wind angle updating Real m_windAngle; ///< angle of the "wind" associated with this system @@ -485,6 +451,49 @@ class ParticleSystemInfo : public Snapshot }; +//-------------------------------------------------------------------------------------------------------------- + +#ifdef DEFINE_PARTICLE_SYSTEM_NAMES + +/**** NOTE: These MUST be kept in sync with the enumerations above *****/ + +static const char *const ParticleShaderTypeNames[] = +{ + "NONE", "ADDITIVE", "ALPHA", "ALPHA_TEST", "MULTIPLY", NULL +}; +static_assert(ARRAY_SIZE(ParticleShaderTypeNames) == ParticleSystemInfo::PARTICLE_SHADER_TYPE_COUNT + 1, "Incorrect array size"); + +static const char *const ParticleTypeNames[] = +{ + "NONE", "PARTICLE", "DRAWABLE", "STREAK", "VOLUME_PARTICLE", NULL +}; +static_assert(ARRAY_SIZE(ParticleTypeNames) == ParticleSystemInfo::PARTICLE_TYPE_COUNT + 1, "Incorrect array size"); + +static const char *const EmissionVelocityTypeNames[] = +{ + "NONE", "ORTHO", "SPHERICAL", "HEMISPHERICAL", "CYLINDRICAL", "OUTWARD", NULL +}; +static_assert(ARRAY_SIZE(EmissionVelocityTypeNames) == ParticleSystemInfo::EMISSION_VELOCITY_TYPE_COUNT + 1, "Incorrect array size"); + +static const char *const EmissionVolumeTypeNames[] = +{ + "NONE", "POINT", "LINE", "BOX", "SPHERE", "CYLINDER", NULL +}; +static_assert(ARRAY_SIZE(EmissionVolumeTypeNames) == ParticleSystemInfo::EMISSION_VOLUME_TYPE_COUNT + 1, "Incorrect array size"); + +static const char *const ParticlePriorityNames[] = +{ + "NONE", "WEAPON_EXPLOSION","SCORCHMARK","DUST_TRAIL","BUILDUP","DEBRIS_TRAIL","UNIT_DAMAGE_FX","DEATH_EXPLOSION","SEMI_CONSTANT","CONSTANT","WEAPON_TRAIL","AREA_EFFECT","CRITICAL", "ALWAYS_RENDER", NULL +}; +static_assert(ARRAY_SIZE(ParticlePriorityNames) == NUM_PARTICLE_PRIORITIES + 1, "Incorrect array size"); + +static const char *const WindMotionNames[] = +{ + "NONE", "Unused", "PingPong", "Circular", NULL +}; +static_assert(ARRAY_SIZE(WindMotionNames) == ParticleSystemInfo::WIND_MOTION_COUNT + 1, "Incorrect array size"); + +#endif /** * A ParticleSystemTemplate, used by the ParticleSystemManager to instantiate ParticleSystems. diff --git a/Generals/Code/GameEngine/Include/GameClient/Shadow.h b/Generals/Code/GameEngine/Include/GameClient/Shadow.h index e0da19a527..2a3c842362 100644 --- a/Generals/Code/GameEngine/Include/GameClient/Shadow.h +++ b/Generals/Code/GameEngine/Include/GameClient/Shadow.h @@ -50,7 +50,7 @@ enum ShadowType CPP_11(: Int) SHADOW_ADDITIVE_DECAL = 0x00000040 //not really for shadows but for other decal uses. Additive blended. }; #ifdef DEFINE_SHADOW_NAMES -static const char* TheShadowNames[] = +static const char* const TheShadowNames[] = { "SHADOW_DECAL", "SHADOW_VOLUME", diff --git a/Generals/Code/GameEngine/Include/GameClient/ShellHooks.h b/Generals/Code/GameEngine/Include/GameClient/ShellHooks.h index 8af63cfc08..7e7e426ea5 100644 --- a/Generals/Code/GameEngine/Include/GameClient/ShellHooks.h +++ b/Generals/Code/GameEngine/Include/GameClient/ShellHooks.h @@ -80,7 +80,7 @@ enum SHELL_SCRIPT_HOOK_TOTAL }; -extern const char *TheShellHookNames[]; ///< Contains a list of the text representation of the shell hooks Used in WorldBuilder and in the shell. +extern const char *const TheShellHookNames[]; ///< Contains a list of the text representation of the shell hooks Used in WorldBuilder and in the shell. void SignalUIInteraction(Int interaction); #endif // SHELLHOOKS_H diff --git a/Generals/Code/GameEngine/Include/GameClient/TerrainVisual.h b/Generals/Code/GameEngine/Include/GameClient/TerrainVisual.h index 72b6801091..29cc26146e 100644 --- a/Generals/Code/GameEngine/Include/GameClient/TerrainVisual.h +++ b/Generals/Code/GameEngine/Include/GameClient/TerrainVisual.h @@ -47,22 +47,22 @@ class Drawable; //------------------------------------------------------------------------------------------------- typedef enum _TerrainLOD CPP_11(: Int) { - TERRAIN_LOD_INVALID = 0, - TERRAIN_LOD_MIN = 1, // note that this is less than max - TERRAIN_LOD_STRETCH_NO_CLOUDS = 2, - TERRAIN_LOD_HALF_CLOUDS = 3, - TERRAIN_LOD_NO_CLOUDS = 4, - TERRAIN_LOD_STRETCH_CLOUDS = 5, - TERRAIN_LOD_NO_WATER = 6, - TERRAIN_LOD_MAX = 7, // note that this is larger than min - TERRAIN_LOD_AUTOMATIC = 8, - TERRAIN_LOD_DISABLE = 9, + TERRAIN_LOD_INVALID, + TERRAIN_LOD_MIN, // note that this is less than max + TERRAIN_LOD_STRETCH_NO_CLOUDS, + TERRAIN_LOD_HALF_CLOUDS, + TERRAIN_LOD_NO_CLOUDS, + TERRAIN_LOD_STRETCH_CLOUDS, + TERRAIN_LOD_NO_WATER, + TERRAIN_LOD_MAX, // note that this is larger than min + TERRAIN_LOD_AUTOMATIC, + TERRAIN_LOD_DISABLE, TERRAIN_LOD_NUM_TYPES } TerrainLOD; #ifdef DEFINE_TERRAIN_LOD_NAMES -static const char * TerrainLODNames[] = +static const char *const TerrainLODNames[] = { "NONE", "MIN", @@ -77,6 +77,7 @@ static const char * TerrainLODNames[] = NULL }; +static_assert(ARRAY_SIZE(TerrainLODNames) == TERRAIN_LOD_NUM_TYPES + 1, "Incorrect array size"); #endif // end DEFINE_TERRAIN_LOD_NAMES //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Include/GameLogic/AI.h b/Generals/Code/GameEngine/Include/GameLogic/AI.h index 5fb25d4ae3..f1a0b29af6 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/AI.h +++ b/Generals/Code/GameEngine/Include/GameLogic/AI.h @@ -329,14 +329,16 @@ enum CommandSourceType CPP_11(: Int); typedef UnsignedInt CommandSourceMask; #ifdef DEFINE_COMMANDSOURCEMASK_NAMES -static const char *TheCommandSourceMaskNames[] = +static const char *const TheCommandSourceMaskNames[] = { "FROM_PLAYER", "FROM_SCRIPT", "FROM_AI", + "FROM_DOZER", //don't use this NULL }; +static_assert(ARRAY_SIZE(TheCommandSourceMaskNames) == COMMAND_SOURCE_TYPE_COUNT + 1, "Incorrect array size"); #endif //------------------------------------------------------------------------------------------------------------ diff --git a/Generals/Code/GameEngine/Include/GameLogic/Damage.h b/Generals/Code/GameEngine/Include/GameLogic/Damage.h index 369b058848..9d324e4247 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Damage.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Damage.h @@ -100,7 +100,7 @@ enum DamageType CPP_11(: Int) }; #ifdef DEFINE_DAMAGE_NAMES -static const char *TheDamageNames[] = +static const char *const TheDamageNames[] = { "EXPLOSION", "CRUSH", @@ -137,6 +137,7 @@ static const char *TheDamageNames[] = NULL }; +static_assert(ARRAY_SIZE(TheDamageNames) == DAMAGE_NUM_TYPES + 1, "Incorrect array size"); #endif // end DEFINE_DAMAGE_NAMES @@ -200,7 +201,7 @@ enum DeathType CPP_11(: Int) }; #ifdef DEFINE_DEATH_NAMES -static const char *TheDeathNames[] = +static const char *const TheDeathNames[] = { "NORMAL", "NONE", @@ -226,6 +227,7 @@ static const char *TheDeathNames[] = NULL }; +static_assert(ARRAY_SIZE(TheDeathNames) == DEATH_NUM_TYPES + 1, "Incorrect array size"); #endif // end DEFINE_DEATH_NAMES diff --git a/Generals/Code/GameEngine/Include/GameLogic/Locomotor.h b/Generals/Code/GameEngine/Include/GameLogic/Locomotor.h index ba558d2735..2c10426ee2 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Locomotor.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Locomotor.h @@ -60,18 +60,22 @@ enum LocomotorAppearance CPP_11(: Int) LOCO_THRUST, LOCO_WINGS, LOCO_CLIMBER, // human climber - backs down cliffs. - LOCO_OTHER + LOCO_OTHER, + + LOCOMOTOR_APPEARANCE_COUNT }; enum LocomotorPriority CPP_11(: Int) { - LOCO_MOVES_BACK=0, // In a group, this one moves toward the back - LOCO_MOVES_MIDDLE=1, // In a group, this one stays in the middle - LOCO_MOVES_FRONT=2 // In a group, this one moves toward the front of the group + LOCO_MOVES_BACK, // In a group, this one moves toward the back + LOCO_MOVES_MIDDLE, // In a group, this one stays in the middle + LOCO_MOVES_FRONT, // In a group, this one moves toward the front of the group + + LOCOMOTOR_PRIORITY_COUNT }; #ifdef DEFINE_LOCO_APPEARANCE_NAMES -static const char *TheLocomotorAppearanceNames[] = +static const char *const TheLocomotorAppearanceNames[] = { "TWO_LEGS", "FOUR_WHEELS", @@ -84,6 +88,7 @@ static const char *TheLocomotorAppearanceNames[] = NULL }; +static_assert(ARRAY_SIZE(TheLocomotorAppearanceNames) == LOCOMOTOR_APPEARANCE_COUNT + 1, "Array size"); #endif //------------------------------------------------------------------------------------------------- @@ -96,11 +101,13 @@ enum LocomotorBehaviorZ CPP_11(: Int) Z_FIXED_SURFACE_RELATIVE_HEIGHT, // stays fixed at surface-rel height, regardless of physics Z_FIXED_ABSOLUTE_HEIGHT, // stays fixed at absolute height, regardless of physics Z_RELATIVE_TO_GROUND_AND_BUILDINGS, // stays fixed at surface-rel height including buildings, regardless of physics - Z_SMOOTH_RELATIVE_TO_HIGHEST_LAYER // try to follow a height relative to the highest layer. + Z_SMOOTH_RELATIVE_TO_HIGHEST_LAYER, // try to follow a height relative to the highest layer. + + LOCOMOTOR_BEHAVIOR_Z_COUNT }; #ifdef DEFINE_LOCO_Z_NAMES -static const char *TheLocomotorBehaviorZNames[] = +static const char *const TheLocomotorBehaviorZNames[] = { "NO_Z_MOTIVE_FORCE", "SEA_LEVEL", @@ -113,6 +120,7 @@ static const char *TheLocomotorBehaviorZNames[] = NULL }; +static_assert(ARRAY_SIZE(TheLocomotorBehaviorZNames) == LOCOMOTOR_BEHAVIOR_Z_COUNT + 1, "Array size"); #endif //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Include/GameLogic/LocomotorSet.h b/Generals/Code/GameEngine/Include/GameLogic/LocomotorSet.h index 09c87d2ebf..af118cdc7b 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/LocomotorSet.h +++ b/Generals/Code/GameEngine/Include/GameLogic/LocomotorSet.h @@ -61,7 +61,7 @@ const LocomotorSurfaceTypeMask NO_SURFACES = (LocomotorSurfaceTypeMask)0x0000; const LocomotorSurfaceTypeMask ALL_SURFACES = (LocomotorSurfaceTypeMask)0xffff; #ifdef DEFINE_SURFACECATEGORY_NAMES -static const char *TheLocomotorSurfaceTypeNames[] = +static const char *const TheLocomotorSurfaceTypeNames[] = { "GROUND", "WATER", diff --git a/Generals/Code/GameEngine/Include/GameLogic/Module/AIUpdate.h b/Generals/Code/GameEngine/Include/GameLogic/Module/AIUpdate.h index e9d9db388d..6c176b0ebb 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Module/AIUpdate.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Module/AIUpdate.h @@ -96,7 +96,7 @@ enum GuardTargetType CPP_11(: Int) }; #ifdef DEFINE_LOCOMOTORSET_NAMES -static const char *TheLocomotorSetNames[] = +static const char *const TheLocomotorSetNames[] = { "SET_NORMAL", "SET_NORMAL_UPGRADED", @@ -109,6 +109,7 @@ static const char *TheLocomotorSetNames[] = NULL }; +static_assert(ARRAY_SIZE(TheLocomotorSetNames) == LOCOMOTORSET_COUNT + 1, "Incorrect array size"); #endif enum AutoAcquireStates CPP_11(: Int) @@ -121,7 +122,7 @@ enum AutoAcquireStates CPP_11(: Int) }; #ifdef DEFINE_AUTOACQUIRE_NAMES -static const char *TheAutoAcquireEnemiesNames[] = +static const char *const TheAutoAcquireEnemiesNames[] = { "YES", "STEALTHED", diff --git a/Generals/Code/GameEngine/Include/GameLogic/Module/BodyModule.h b/Generals/Code/GameEngine/Include/GameLogic/Module/BodyModule.h index 2468bd7cae..707b66b75e 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Module/BodyModule.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Module/BodyModule.h @@ -61,7 +61,7 @@ enum BodyDamageType CPP_11(: Int) }; #ifdef DEFINE_BODYDAMAGETYPE_NAMES -static const char* TheBodyDamageTypeNames[] = +static const char* const TheBodyDamageTypeNames[] = { "PRISTINE", "DAMAGED", @@ -70,6 +70,7 @@ static const char* TheBodyDamageTypeNames[] = NULL }; +static_assert(ARRAY_SIZE(TheBodyDamageTypeNames) == BODYDAMAGETYPE_COUNT + 1, "Incorrect array size"); #endif enum MaxHealthChangeType CPP_11(: Int) @@ -77,16 +78,19 @@ enum MaxHealthChangeType CPP_11(: Int) SAME_CURRENTHEALTH, PRESERVE_RATIO, ADD_CURRENT_HEALTH_TOO, + + MAX_HEALTH_CHANGE_COUNT }; #ifdef DEFINE_MAXHEALTHCHANGETYPE_NAMES -static const char* TheMaxHealthChangeTypeNames[] = +static const char* const TheMaxHealthChangeTypeNames[] = { "SAME_CURRENTHEALTH", "PRESERVE_RATIO", "ADD_CURRENT_HEALTH_TOO", NULL }; +static_assert(ARRAY_SIZE(TheMaxHealthChangeTypeNames) == MAX_HEALTH_CHANGE_COUNT + 1, "Incorrect array size"); #endif diff --git a/Generals/Code/GameEngine/Include/GameLogic/Module/DozerAIUpdate.h b/Generals/Code/GameEngine/Include/GameLogic/Module/DozerAIUpdate.h index a88c30eb74..31a33564dd 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Module/DozerAIUpdate.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Module/DozerAIUpdate.h @@ -71,12 +71,13 @@ class DozerPrimaryStateMachine : public StateMachine enum DozerTask CPP_11(: Int) // These enums are saved in the game save file, so DO NOT renumber them. jba. { DOZER_TASK_INVALID = -1, - DOZER_TASK_FIRST = 0, - DOZER_TASK_BUILD = DOZER_TASK_FIRST, ///< go build something - DOZER_TASK_REPAIR = 1, ///< go repair something - DOZER_TASK_FORTIFY = 2, ///< go fortify something - DOZER_NUM_TASKS + DOZER_TASK_BUILD, ///< go build something + DOZER_TASK_REPAIR, ///< go repair something + DOZER_TASK_FORTIFY, ///< go fortify something + + DOZER_NUM_TASKS, // keep this last + DOZER_TASK_FIRST = 0, }; // ------------------------------------------------------------------------------------------------ diff --git a/Generals/Code/GameEngine/Include/GameLogic/Module/HordeUpdate.h b/Generals/Code/GameEngine/Include/GameLogic/Module/HordeUpdate.h index fb9e97ae4a..a1979e0f41 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Module/HordeUpdate.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Module/HordeUpdate.h @@ -52,11 +52,12 @@ enum HordeActionType CPP_11(: Int) }; #ifdef DEFINE_HORDEACTION_NAMES -static const char *TheHordeActionTypeNames[] = +static const char *const TheHordeActionTypeNames[] = { "HORDE", NULL }; +static_assert(ARRAY_SIZE(TheHordeActionTypeNames) == HORDEACTION_COUNT + 1, "Incorrect array size"); #endif //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Include/GameLogic/Module/OCLSpecialPower.h b/Generals/Code/GameEngine/Include/GameLogic/Module/OCLSpecialPower.h index ba2cc52b12..c428030197 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Module/OCLSpecialPower.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Module/OCLSpecialPower.h @@ -47,6 +47,8 @@ enum OCLCreateLocType CPP_11(: Int) USE_OWNER_OBJECT, CREATE_ABOVE_LOCATION, CREATE_AT_EDGE_FARTHEST_FROM_TARGET, + + OCL_CREATE_LOC_COUNT }; //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Include/GameLogic/Module/SlowDeathBehavior.h b/Generals/Code/GameEngine/Include/GameLogic/Module/SlowDeathBehavior.h index 570c0c4547..86edf379ca 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Module/SlowDeathBehavior.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Module/SlowDeathBehavior.h @@ -58,7 +58,7 @@ enum SlowDeathPhaseType CPP_11(: Int) }; #ifdef DEFINE_SLOWDEATHPHASE_NAMES -static const char *TheSlowDeathPhaseNames[] = +static const char *const TheSlowDeathPhaseNames[] = { "INITIAL", "MIDPOINT", @@ -66,6 +66,7 @@ static const char *TheSlowDeathPhaseNames[] = NULL }; +static_assert(ARRAY_SIZE(TheSlowDeathPhaseNames) == SD_PHASE_COUNT + 1, "Incorrect array size"); #endif diff --git a/Generals/Code/GameEngine/Include/GameLogic/Module/StealthUpdate.h b/Generals/Code/GameEngine/Include/GameLogic/Module/StealthUpdate.h index 04db57fb93..0d970c75a0 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Module/StealthUpdate.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Module/StealthUpdate.h @@ -52,7 +52,7 @@ enum }; #ifdef DEFINE_STEALTHLEVEL_NAMES -static const char *TheStealthLevelNames[] = +static const char *const TheStealthLevelNames[] = { "ATTACKING", "MOVING", diff --git a/Generals/Code/GameEngine/Include/GameLogic/Module/StructureToppleUpdate.h b/Generals/Code/GameEngine/Include/GameLogic/Module/StructureToppleUpdate.h index dd51933a5a..cea5ad278b 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Module/StructureToppleUpdate.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Module/StructureToppleUpdate.h @@ -73,7 +73,7 @@ enum StructureTopplePhaseType CPP_11(: Int) ST_PHASE_COUNT }; -static const char *TheStructureTopplePhaseNames[] = +static const char *const TheStructureTopplePhaseNames[] = { "INITIAL", "DELAY", @@ -81,6 +81,7 @@ static const char *TheStructureTopplePhaseNames[] = NULL }; +static_assert(ARRAY_SIZE(TheStructureTopplePhaseNames) == ST_PHASE_COUNT + 1, "Incorrect array size"); //------------------------------------------------------------------------------------------------- class StructureToppleUpdateModuleData : public UpdateModuleData diff --git a/Generals/Code/GameEngine/Include/GameLogic/Powers.h b/Generals/Code/GameEngine/Include/GameLogic/Powers.h index 83d0a07a1c..ecdf1634eb 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Powers.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Powers.h @@ -48,7 +48,7 @@ enum }; #ifdef DEFINE_POWER_NAMES -static const char *PowerNames[] = +static const char *const PowerNames[] = { "NONE", "FASTER", @@ -56,6 +56,7 @@ static const char *PowerNames[] = "SELF_HEALING", NULL }; +static_assert(ARRAY_SIZE(PowerNames) == POWERS_NUM_POWERS + 1, "Incorrect array size"); #endif // end DEFINE_POWER_NAMES #endif // __POWERS_H_ diff --git a/Generals/Code/GameEngine/Include/GameLogic/Scripts.h b/Generals/Code/GameEngine/Include/GameLogic/Scripts.h index 40d68f7d4a..77f6130f13 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Scripts.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Scripts.h @@ -832,7 +832,7 @@ class Parameter : public MemoryPoolObject }; EMPTY_DTOR(Parameter) -extern const char* TheObjectFlagsNames[]; +extern const char* const TheObjectFlagsNames[]; //------------------------------------------------------------------------------------------------- // ******************************** class Condition *********************************************** diff --git a/Generals/Code/GameEngine/Include/GameLogic/Weapon.h b/Generals/Code/GameEngine/Include/GameLogic/Weapon.h index a01b6f7b5d..dda3d86b33 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/Weapon.h +++ b/Generals/Code/GameEngine/Include/GameLogic/Weapon.h @@ -60,17 +60,20 @@ enum WeaponReloadType CPP_11(: Int) { AUTO_RELOAD, NO_RELOAD, - RETURN_TO_BASE_TO_RELOAD + RETURN_TO_BASE_TO_RELOAD, + + WEAPON_RELOAD_COUNT }; #ifdef DEFINE_WEAPONRELOAD_NAMES -static const char *TheWeaponReloadNames[] = +static const char *const TheWeaponReloadNames[] = { "YES", "NO", "RETURN_TO_BASE", NULL }; +static_assert(ARRAY_SIZE(TheWeaponReloadNames) == WEAPON_RELOAD_COUNT + 1, "Incorrect array size"); #endif //------------------------------------------------------------------------------------------------- @@ -84,13 +87,14 @@ enum WeaponPrefireType CPP_11(: Int) }; #ifdef DEFINE_WEAPONPREFIRE_NAMES -static const char *TheWeaponPrefireNames[] = +static const char *const TheWeaponPrefireNames[] = { "PER_SHOT", "PER_ATTACK", "PER_CLIP", NULL }; +static_assert(ARRAY_SIZE(TheWeaponPrefireNames) == PREFIRE_COUNT + 1, "Incorrect array size"); #endif //------------------------------------------------------------------------------------------------- @@ -119,7 +123,7 @@ enum WeaponAffectsMaskType CPP_11(: Int) }; #ifdef DEFINE_WEAPONAFFECTSMASK_NAMES -static const char *TheWeaponAffectsMaskNames[] = +static const char *const TheWeaponAffectsMaskNames[] = { "SELF", "ALLIES", @@ -149,7 +153,7 @@ enum WeaponCollideMaskType CPP_11(: Int) }; #ifdef DEFINE_WEAPONCOLLIDEMASK_NAMES -static const char *TheWeaponCollideMaskNames[] = +static const char *const TheWeaponCollideMaskNames[] = { "ALLIES", "ENEMIES", @@ -204,7 +208,7 @@ enum WeaponBonusConditionType CPP_11(: Int) WEAPONBONUSCONDITION_COUNT }; #ifdef DEFINE_WEAPONBONUSCONDITION_NAMES -static const char *TheWeaponBonusNames[] = +static const char *const TheWeaponBonusNames[] = { // This is a RHS enum (weapon.ini will have WeaponBonus = IT) so it is all caps "GARRISONED", @@ -235,6 +239,7 @@ static const char *TheWeaponBonusNames[] = "SOLO_AI_HARD", NULL }; +static_assert(ARRAY_SIZE(TheWeaponBonusNames) == WEAPONBONUSCONDITION_COUNT + 1, "Incorrect array size"); #endif // For WeaponBonusConditionFlags @@ -280,7 +285,7 @@ class WeaponBonus }; #ifdef DEFINE_WEAPONBONUSFIELD_NAMES -static const char *TheWeaponBonusFieldNames[] = +static const char *const TheWeaponBonusFieldNames[] = { "DAMAGE", "RADIUS", @@ -289,6 +294,7 @@ static const char *TheWeaponBonusFieldNames[] = "PRE_ATTACK", NULL }; +static_assert(ARRAY_SIZE(TheWeaponBonusFieldNames) == WeaponBonus::FIELD_COUNT + 1, "Incorrect array size"); #endif diff --git a/Generals/Code/GameEngine/Include/GameLogic/WeaponSet.h b/Generals/Code/GameEngine/Include/GameLogic/WeaponSet.h index 4c905ce37e..51638bb3e4 100644 --- a/Generals/Code/GameEngine/Include/GameLogic/WeaponSet.h +++ b/Generals/Code/GameEngine/Include/GameLogic/WeaponSet.h @@ -53,7 +53,7 @@ enum DamageType CPP_11(: Int); #include "GameLogic/WeaponSetFlags.h" #ifdef DEFINE_WEAPONSLOTTYPE_NAMES -static const char *TheWeaponSlotTypeNames[] = +static const char *const TheWeaponSlotTypeNames[] = { "PRIMARY", "SECONDARY", @@ -61,6 +61,7 @@ static const char *TheWeaponSlotTypeNames[] = NULL }; +static_assert(ARRAY_SIZE(TheWeaponSlotTypeNames) == WEAPONSLOT_COUNT + 1, "Incorrect array size"); static const LookupListRec TheWeaponSlotTypeNamesLookupList[] = { @@ -70,6 +71,7 @@ static const LookupListRec TheWeaponSlotTypeNamesLookupList[] = { NULL, 0 } }; +static_assert(ARRAY_SIZE(TheWeaponSlotTypeNamesLookupList) == WEAPONSLOT_COUNT + 1, "Incorrect array size"); #endif diff --git a/Generals/Code/GameEngine/Source/Common/BitFlags.cpp b/Generals/Code/GameEngine/Source/Common/BitFlags.cpp index ae27998b83..ceb943c974 100644 --- a/Generals/Code/GameEngine/Source/Common/BitFlags.cpp +++ b/Generals/Code/GameEngine/Source/Common/BitFlags.cpp @@ -38,7 +38,7 @@ #include "GameLogic/ArmorSet.h" template<> -const char* ModelConditionFlags::s_bitNameList[] = +const char* const ModelConditionFlags::s_bitNameList[] = { "TOPPLED", "FRONTCRUSHED", @@ -148,15 +148,17 @@ const char* ModelConditionFlags::s_bitNameList[] = NULL }; +static_assert(ARRAY_SIZE(ModelConditionFlags::s_bitNameList) == ModelConditionFlags::NumBits + 1, "Incorrect array size"); template<> -const char* ArmorSetFlags::s_bitNameList[] = +const char* const ArmorSetFlags::s_bitNameList[] = { "VETERAN", "ELITE", "HERO", "PLAYER_UPGRADE", + "WEAK_VERSUS_BASEDEFENSES", NULL }; - +static_assert(ARRAY_SIZE(ArmorSetFlags::s_bitNameList) == ArmorSetFlags::NumBits + 1, "Incorrect array size"); diff --git a/Generals/Code/GameEngine/Source/Common/GameLOD.cpp b/Generals/Code/GameEngine/Source/Common/GameLOD.cpp index 1aeaf7e656..93ef42d558 100644 --- a/Generals/Code/GameEngine/Source/Common/GameLOD.cpp +++ b/Generals/Code/GameEngine/Source/Common/GameLOD.cpp @@ -71,13 +71,14 @@ static const FieldParse TheStaticGameLODFieldParseTable[] = { "TextureReductionFactor", INI::parseInt, NULL, offsetof( StaticGameLODInfo, m_textureReduction ) }, }; -static const char *StaticGameLODNames[]= +static const char *const StaticGameLODNames[]= { "Low", "Medium", "High", "Custom" }; +static_assert(ARRAY_SIZE(StaticGameLODNames) == STATIC_GAME_LOD_COUNT, "Incorrect array size"); StaticGameLODInfo::StaticGameLODInfo(void) { @@ -115,13 +116,14 @@ static const FieldParse TheDynamicGameLODFieldParseTable[] = { "MinParticleSkipPriority", INI::parseIndexList, ParticlePriorityNames, offsetof( DynamicGameLODInfo, m_minDynamicParticleSkipPriority)}, }; -static const char *DynamicGameLODNames[]= +static const char *const DynamicGameLODNames[]= { "Low", "Medium", "High", "VeryHigh" }; +static_assert(ARRAY_SIZE(DynamicGameLODNames) == DYNAMIC_GAME_LOD_COUNT, "Incorrect array size"); DynamicGameLODInfo::DynamicGameLODInfo(void) { @@ -134,16 +136,18 @@ DynamicGameLODInfo::DynamicGameLODInfo(void) }; //Keep this in sync with enum in GameLOD.h -static const char *CPUNames[] = +static const char *const CPUNames[] = { "XX","P3", "P4","K7", NULL }; +static_assert(ARRAY_SIZE(CPUNames) == CPU_MAX + 1, "Incorrect array size"); //Keep this in sync with enum in GameLOD.h -static const char *VideoNames[] = +static const char *const VideoNames[] = { "XX","V2","V3","V4","V5","TNT","TNT2","GF2","R100","PS11","GF3","GF4","PS14","R200","PS20","R300", NULL }; +static_assert(ARRAY_SIZE(VideoNames) == DC_MAX + 1, "Incorrect array size"); void parseReallyLowMHz(INI* ini) { diff --git a/Generals/Code/GameEngine/Source/Common/INI/INIWater.cpp b/Generals/Code/GameEngine/Source/Common/INI/INIWater.cpp index ff73a59359..14addebfa8 100644 --- a/Generals/Code/GameEngine/Source/Common/INI/INIWater.cpp +++ b/Generals/Code/GameEngine/Source/Common/INI/INIWater.cpp @@ -57,7 +57,7 @@ void INI::parseWaterSettingDefinition( INI* ini ) name.set( token ); // get the water setting we want to load based on name - const char **timeOfDayName = TimeOfDayNames; + const char *const *timeOfDayName = TimeOfDayNames; Int timeOfDayIndex = 0; // TIME_OF_DAY_INVALID while( timeOfDayName && *timeOfDayName ) { diff --git a/Generals/Code/GameEngine/Source/Common/RTS/Player.cpp b/Generals/Code/GameEngine/Source/Common/RTS/Player.cpp index 9e1c643450..bd01821872 100644 --- a/Generals/Code/GameEngine/Source/Common/RTS/Player.cpp +++ b/Generals/Code/GameEngine/Source/Common/RTS/Player.cpp @@ -158,7 +158,7 @@ static void findClosestKindOf( Object *obj, void *userData ) AsciiString kindofMaskAsAsciiString(KindOfMaskType m) { AsciiString s; - const char** kindofNames = KindOfMaskType::getBitNames(); + const char* const* kindofNames = KindOfMaskType::getBitNames(); for (Int i=KINDOF_FIRST; i -const char* SpecialPowerMaskType::s_bitNameList[] = +const char* const SpecialPowerMaskType::s_bitNameList[] = { "SPECIAL_INVALID", @@ -102,6 +102,7 @@ const char* SpecialPowerMaskType::s_bitNameList[] = NULL }; +static_assert(ARRAY_SIZE(SpecialPowerMaskType::s_bitNameList) == SpecialPowerMaskType::NumBits + 1, "Incorrect array size"); //------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Source/Common/System/DisabledTypes.cpp b/Generals/Code/GameEngine/Source/Common/System/DisabledTypes.cpp index 4fa5071942..7bc538d7cd 100644 --- a/Generals/Code/GameEngine/Source/Common/System/DisabledTypes.cpp +++ b/Generals/Code/GameEngine/Source/Common/System/DisabledTypes.cpp @@ -31,7 +31,7 @@ #include "Common/BitFlagsIO.h" template<> -const char* DisabledMaskType::s_bitNameList[] = +const char* const DisabledMaskType::s_bitNameList[] = { "DEFAULT", "DISABLED_HACKED", @@ -47,6 +47,7 @@ const char* DisabledMaskType::s_bitNameList[] = NULL }; +static_assert(ARRAY_SIZE(DisabledMaskType::s_bitNameList) == DisabledMaskType::NumBits + 1, "Incorrect array size"); DisabledMaskType DISABLEDMASK_NONE; // inits to all zeroes DisabledMaskType DISABLEDMASK_ALL; diff --git a/Generals/Code/GameEngine/Source/Common/System/GameCommon.cpp b/Generals/Code/GameEngine/Source/Common/System/GameCommon.cpp index f47338d4d9..84b76bc6d5 100644 --- a/Generals/Code/GameEngine/Source/Common/System/GameCommon.cpp +++ b/Generals/Code/GameEngine/Source/Common/System/GameCommon.cpp @@ -30,7 +30,7 @@ #include "Common/GameCommon.h" -const char *TheVeterancyNames[] = +const char *const TheVeterancyNames[] = { "REGULAR", "VETERAN", @@ -38,14 +38,16 @@ const char *TheVeterancyNames[] = "HEROIC", NULL }; +static_assert(ARRAY_SIZE(TheVeterancyNames) == LEVEL_COUNT + 1, "Incorrect array size"); -const char *TheRelationshipNames[] = +const char *const TheRelationshipNames[] = { "ENEMIES", "NEUTRAL", "ALLIES", NULL }; +static_assert(ARRAY_SIZE(TheRelationshipNames) == RELATIONSHIP_COUNT + 1, "Incorrect array size"); //------------------------------------------------------------------------------------------------- // TheSuperHackers @todo DO NOT USE THIS FUNCTION! Use WWMath::Normalize_Angle instead. Delete this. diff --git a/Generals/Code/GameEngine/Source/Common/System/GameType.cpp b/Generals/Code/GameEngine/Source/Common/System/GameType.cpp index f7142f9a82..c75330ece7 100644 --- a/Generals/Code/GameEngine/Source/Common/System/GameType.cpp +++ b/Generals/Code/GameEngine/Source/Common/System/GameType.cpp @@ -26,7 +26,7 @@ #include "PreRTS.h" // This must go first in EVERY cpp file int the GameEngine -const char *TimeOfDayNames[] = +const char *const TimeOfDayNames[] = { "NONE", "MORNING", @@ -36,11 +36,13 @@ const char *TimeOfDayNames[] = NULL }; +static_assert(ARRAY_SIZE(TimeOfDayNames) == TIME_OF_DAY_COUNT + 1, "Incorrect array size"); -const char *WeatherNames[] = +const char *const WeatherNames[] = { "NORMAL", "SNOWY", NULL }; +static_assert(ARRAY_SIZE(WeatherNames) == WEATHER_COUNT + 1, "Incorrect array size"); diff --git a/Generals/Code/GameEngine/Source/Common/System/KindOf.cpp b/Generals/Code/GameEngine/Source/Common/System/KindOf.cpp index a32bf9b02a..0d77c3ffc6 100644 --- a/Generals/Code/GameEngine/Source/Common/System/KindOf.cpp +++ b/Generals/Code/GameEngine/Source/Common/System/KindOf.cpp @@ -32,7 +32,7 @@ #include "Common/BitFlagsIO.h" template<> -const char* KindOfMaskType::s_bitNameList[] = +const char* const KindOfMaskType::s_bitNameList[] = { "OBSTACLE", "SELECTABLE", @@ -133,6 +133,7 @@ const char* KindOfMaskType::s_bitNameList[] = "DONT_AUTO_CRUSH_INFANTRY", NULL }; +static_assert(ARRAY_SIZE(KindOfMaskType::s_bitNameList) == KindOfMaskType::NumBits + 1, "Incorrect array size"); KindOfMaskType KINDOFMASK_NONE; // inits to all zeroes diff --git a/Generals/Code/GameEngine/Source/Common/System/ObjectStatusTypes.cpp b/Generals/Code/GameEngine/Source/Common/System/ObjectStatusTypes.cpp index 2e90a40f9a..01dff2c26b 100644 --- a/Generals/Code/GameEngine/Source/Common/System/ObjectStatusTypes.cpp +++ b/Generals/Code/GameEngine/Source/Common/System/ObjectStatusTypes.cpp @@ -33,7 +33,7 @@ #include "Common/BitFlagsIO.h" template<> -const char* ObjectStatusMaskType::s_bitNameList[] = +const char* const ObjectStatusMaskType::s_bitNameList[] = { "NONE", "DESTROYED", @@ -66,5 +66,6 @@ const char* ObjectStatusMaskType::s_bitNameList[] = "IS_CARBOMB", NULL }; +static_assert(ARRAY_SIZE(ObjectStatusMaskType::s_bitNameList) == ObjectStatusMaskType::NumBits + 1, "Incorrect array size"); ObjectStatusMaskType OBJECT_STATUS_MASK_NONE; // inits to all zeroes diff --git a/Generals/Code/GameEngine/Source/Common/System/Upgrade.cpp b/Generals/Code/GameEngine/Source/Common/System/Upgrade.cpp index 296ed3799d..73be233ffb 100644 --- a/Generals/Code/GameEngine/Source/Common/System/Upgrade.cpp +++ b/Generals/Code/GameEngine/Source/Common/System/Upgrade.cpp @@ -39,12 +39,13 @@ #include "GameClient/Image.h" -const char *TheUpgradeTypeNames[] = +const char *const TheUpgradeTypeNames[] = { "PLAYER", "OBJECT", NULL }; +static_assert(ARRAY_SIZE(TheUpgradeTypeNames) == NUM_UPGRADE_TYPES + 1, "Incorrect array size"); // PUBLIC ///////////////////////////////////////////////////////////////////////////////////////// class UpgradeCenter *TheUpgradeCenter = NULL; diff --git a/Generals/Code/GameEngine/Source/GameClient/Drawable.cpp b/Generals/Code/GameEngine/Source/GameClient/Drawable.cpp index 3fa3a88ece..3d85bef2b6 100644 --- a/Generals/Code/GameEngine/Source/GameClient/Drawable.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/Drawable.cpp @@ -82,7 +82,7 @@ #define VERY_TRANSPARENT_HEATVISION (0.001f) #define HEATVISION_FADE_SCALAR (0.8f) -static const char *TheDrawableIconNames[] = +static const char *const TheDrawableIconNames[] = { "DefaultHeal", "StructureHeal", @@ -104,6 +104,7 @@ static const char *TheDrawableIconNames[] = "CarBomb", NULL }; +static_assert(ARRAY_SIZE(TheDrawableIconNames) == MAX_ICONS + 1, "Incorrect array size"); diff --git a/Generals/Code/GameEngine/Source/GameClient/Eva.cpp b/Generals/Code/GameEngine/Source/GameClient/Eva.cpp index 3f2dd08bd5..b69c40232a 100644 --- a/Generals/Code/GameEngine/Source/GameClient/Eva.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/Eva.cpp @@ -34,7 +34,7 @@ //------------------------------------------------------------------------------------------------- -const char *TheEvaMessageNames[] = +static const char *const TheEvaMessageNames[] = { "LOWPOWER", "INSUFFICIENTFUNDS", @@ -55,8 +55,8 @@ const char *TheEvaMessageNames[] = "CASHSTOLEN", "UPGRADECOMPLETE", "BUILDINGBEINGSTOLEN", - "EVA_INVALID", }; +static_assert(ARRAY_SIZE(TheEvaMessageNames) == EVA_COUNT, "Incorrect array size"); //------------------------------------------------------------------------------ INI::parseEvaEvent void INI::parseEvaEvent( INI* ini ) @@ -142,7 +142,6 @@ const ShouldPlayFunc Eva::s_shouldPlayFuncs[] = Eva::shouldPlayGenericHandler, Eva::shouldPlayGenericHandler, Eva::shouldPlayGenericHandler, - NULL, }; //------------------------------------------------------------------------------------------------- @@ -332,6 +331,8 @@ Bool Eva::messageShouldPlay(EvaMessage messageToTest, UnsignedInt currentFrame) return FALSE; } + static_assert(ARRAY_SIZE(s_shouldPlayFuncs) == EVA_COUNT, "Incorrect array size"); + m_messageBeingTested = messageToTest; return s_shouldPlayFuncs[messageToTest](m_localPlayer); } diff --git a/Generals/Code/GameEngine/Source/GameClient/FXList.cpp b/Generals/Code/GameEngine/Source/GameClient/FXList.cpp index baaf025f31..95d33879c7 100644 --- a/Generals/Code/GameEngine/Source/GameClient/FXList.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/FXList.cpp @@ -423,6 +423,8 @@ class ViewShakeFXNugget : public FXNugget { "CINE_INSANE", View::SHAKE_CINE_INSANE }, { 0, 0 } }; + static_assert(ARRAY_SIZE(shakeTypeNames) == View::SHAKE_COUNT + 1, "Incorrect array size"); + *(Int *)store = INI::scanLookupList(ini->getNextToken(), shakeTypeNames); } @@ -487,6 +489,8 @@ class TerrainScorchFXNugget : public FXNugget { "RANDOM", -1 }, { 0, 0 } }; + static_assert(ARRAY_SIZE(scorchTypeNames) == SCORCH_COUNT + 2, "Incorrect array size"); + *(Int *)store = INI::scanLookupList(ini->getNextToken(), scorchTypeNames); } diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarScheme.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarScheme.cpp index afb11f304e..b50c88f6bb 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarScheme.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarScheme.cpp @@ -165,6 +165,7 @@ static const LookupListRec AnimTypeNames[] = { "SLIDE_RIGHT", ControlBarSchemeAnimation::CB_ANIM_SLIDE_RIGHT }, { NULL, 0 } }; +static_assert(ARRAY_SIZE(AnimTypeNames) == ControlBarSchemeAnimation::CB_ANIM_MAX + 1, "Incorrect array size"); static void animSlideRight( ControlBarSchemeAnimation *anim ); diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/DisconnectMenu/DisconnectMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/DisconnectMenu/DisconnectMenu.cpp index 37be2f4c16..183bbddff5 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/DisconnectMenu/DisconnectMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/DisconnectMenu/DisconnectMenu.cpp @@ -35,7 +35,7 @@ #include "GameNetwork/GameInfo.h" #include "GameNetwork/NetworkInterface.h" -const char *DisconnectMenu::m_playerNameTextControlNames[] = { +const char *const DisconnectMenu::m_playerNameTextControlNames[] = { "DisconnectScreen.wnd:StaticPlayer1Name", "DisconnectScreen.wnd:StaticPlayer2Name", "DisconnectScreen.wnd:StaticPlayer3Name", @@ -46,7 +46,7 @@ const char *DisconnectMenu::m_playerNameTextControlNames[] = { NULL }; -const char *DisconnectMenu::m_playerTimeoutTextControlNames[] = { +const char *const DisconnectMenu::m_playerTimeoutTextControlNames[] = { "DisconnectScreen.wnd:StaticPlayer1Timeout", "DisconnectScreen.wnd:StaticPlayer2Timeout", "DisconnectScreen.wnd:StaticPlayer3Timeout", @@ -57,7 +57,7 @@ const char *DisconnectMenu::m_playerTimeoutTextControlNames[] = { NULL }; -const char *DisconnectMenu::m_playerVoteButtonControlNames[] = { +const char *const DisconnectMenu::m_playerVoteButtonControlNames[] = { "DisconnectScreen.wnd:ButtonKickPlayer1", "DisconnectScreen.wnd:ButtonKickPlayer2", "DisconnectScreen.wnd:ButtonKickPlayer3", @@ -68,7 +68,7 @@ const char *DisconnectMenu::m_playerVoteButtonControlNames[] = { NULL }; -const char *DisconnectMenu::m_playerVoteCountControlNames[] = { +const char *const DisconnectMenu::m_playerVoteCountControlNames[] = { "DisconnectScreen.wnd:StaticPlayer1Votes", "DisconnectScreen.wnd:StaticPlayer2Votes", "DisconnectScreen.wnd:StaticPlayer3Votes", @@ -79,9 +79,9 @@ const char *DisconnectMenu::m_playerVoteCountControlNames[] = { NULL }; -const char *DisconnectMenu::m_packetRouterTimeoutControlName = "DisconnectScreen.wnd:StaticPacketRouterTimeout"; -const char *DisconnectMenu::m_packetRouterTimeoutLabelControlName = "DisconnectScreen.wnd:StaticPacketRouterTimeoutLabel"; -const char *DisconnectMenu::m_textDisplayControlName = "DisconnectScreen.wnd:ListboxTextDisplay"; +const char *const DisconnectMenu::m_packetRouterTimeoutControlName = "DisconnectScreen.wnd:StaticPacketRouterTimeout"; +const char *const DisconnectMenu::m_packetRouterTimeoutLabelControlName = "DisconnectScreen.wnd:StaticPacketRouterTimeoutLabel"; +const char *const DisconnectMenu::m_textDisplayControlName = "DisconnectScreen.wnd:ListboxTextDisplay"; static const Color chatNormalColor = GameMakeColor(255,0,0,255); diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/EstablishConnectionsMenu/EstablishConnectionsMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/EstablishConnectionsMenu/EstablishConnectionsMenu.cpp index bac079ed1f..46c77bdc47 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/EstablishConnectionsMenu/EstablishConnectionsMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/EstablishConnectionsMenu/EstablishConnectionsMenu.cpp @@ -36,7 +36,7 @@ EstablishConnectionsMenu *TheEstablishConnectionsMenu = NULL; -const char *EstablishConnectionsMenu::m_playerReadyControlNames[] = { +const char *const EstablishConnectionsMenu::m_playerReadyControlNames[] = { "EstablishConnectionsScreen.wnd:ButtonAccept1", "EstablishConnectionsScreen.wnd:ButtonAccept2", "EstablishConnectionsScreen.wnd:ButtonAccept3", @@ -46,7 +46,7 @@ const char *EstablishConnectionsMenu::m_playerReadyControlNames[] = { "EstablishConnectionsScreen.wnd:ButtonAccept7", NULL}; -const char *EstablishConnectionsMenu::m_playerNameControlNames[] = { +const char *const EstablishConnectionsMenu::m_playerNameControlNames[] = { "EstablishConnectionsScreen.wnd:StaticPlayer1Name", "EstablishConnectionsScreen.wnd:StaticPlayer2Name", "EstablishConnectionsScreen.wnd:StaticPlayer3Name", @@ -57,7 +57,7 @@ const char *EstablishConnectionsMenu::m_playerNameControlNames[] = { NULL }; -const char *EstablishConnectionsMenu::m_playerStatusControlNames[] = { +const char *const EstablishConnectionsMenu::m_playerStatusControlNames[] = { "EstablishConnectionsScreen.wnd:StaticPlayer1Status", "EstablishConnectionsScreen.wnd:StaticPlayer2Status", "EstablishConnectionsScreen.wnd:StaticPlayer3Status", diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupPlayerInfo.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupPlayerInfo.cpp index 1928f2a5e7..4841fedc66 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupPlayerInfo.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupPlayerInfo.cpp @@ -90,7 +90,7 @@ static Int lookAtPlayerID = 0; static std::string lookAtPlayerName; -static const char *rankNames[] = { +static const char *const rankNames[] = { "Private", "Corporal", "Sergeant", @@ -102,6 +102,8 @@ static const char *rankNames[] = { "Brigadier", "Commander", }; +static_assert(ARRAY_SIZE(rankNames) == MAX_RANKS, "Incorrect array size"); + static const Image* lookupRankImage(AsciiString side, Int rank) { diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp index 439aafc56b..8eb8db217f 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp @@ -366,7 +366,7 @@ static void populateGroupRoomListbox(GameWindow *lb) GadgetComboBoxSetSelectedPos(lb, indexToSelect); } -static const char *rankNames[] = { +static const char *const rankNames[] = { "Private", "Corporal", "Sergeant", @@ -378,6 +378,8 @@ static const char *rankNames[] = { "Brigadier", "Commander", }; +static_assert(ARRAY_SIZE(rankNames) == MAX_RANKS, "Incorrect array size"); + const Image* LookupSmallRankImage(Int side, Int rankPoints) { diff --git a/Generals/Code/GameEngine/Source/GameClient/GUI/GameWindowManagerScript.cpp b/Generals/Code/GameEngine/Source/GameClient/GUI/GameWindowManagerScript.cpp index 4f477e461a..7c846295ed 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GUI/GameWindowManagerScript.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GUI/GameWindowManagerScript.cpp @@ -137,7 +137,7 @@ static GameFont *defFont = NULL; // These strings must be in the same order as they are in their definitions // (see WIN_STATUS_* enums and GWS_* enums). // -const char *WindowStatusNames[] = { "ACTIVE", "TOGGLE", "DRAGABLE", "ENABLED", "HIDDEN", +const char *const WindowStatusNames[] = { "ACTIVE", "TOGGLE", "DRAGABLE", "ENABLED", "HIDDEN", "ABOVE", "BELOW", "IMAGE", "TABSTOP", "NOINPUT", "NOFOCUS", "DESTROYED", "BORDER", "SMOOTH_TEXT", "ONE_LINE", "NO_FLUSH", "SEE_THRU", @@ -145,7 +145,7 @@ const char *WindowStatusNames[] = { "ACTIVE", "TOGGLE", "DRAGABLE", "ENABLED", " "USE_OVERLAY_STATES", "NOT_READY", "FLASHING", "ALWAYS_COLOR", NULL }; -const char *WindowStyleNames[] = { "PUSHBUTTON", "RADIOBUTTON", "CHECKBOX", +const char *const WindowStyleNames[] = { "PUSHBUTTON", "RADIOBUTTON", "CHECKBOX", "VERTSLIDER", "HORZSLIDER", "SCROLLLISTBOX", "ENTRYFIELD", "STATICTEXT", "PROGRESSBAR", "USER", "MOUSETRACK", "ANIMATED", @@ -199,9 +199,9 @@ static GameWindow *parseWindow( File *inFile, char *buffer ); * if successful. Returns TRUE on success, else FALSE. */ //============================================================================= static Bool parseBitFlag( const char *flagString, UnsignedInt *bits, - const char **flagList ) + ConstCharPtrArray flagList ) { - const char **c; + ConstCharPtrArray c; int i; for( i = 0, c = flagList; *c; i++, c++ ) @@ -225,7 +225,7 @@ static Bool parseBitFlag( const char *flagString, UnsignedInt *bits, * argument. * Note that this routine does not clear any bits, only sets them. */ //============================================================================= -static void parseBitString( const char *inBuffer, UnsignedInt *bits, const char **flagList ) +static void parseBitString( const char *inBuffer, UnsignedInt *bits, ConstCharPtrArray flagList ) { char buffer[256]; char *tok; diff --git a/Generals/Code/GameEngine/Source/GameClient/GameClient.cpp b/Generals/Code/GameEngine/Source/GameClient/GameClient.cpp index f1012f7b59..6f47b700f5 100644 --- a/Generals/Code/GameEngine/Source/GameClient/GameClient.cpp +++ b/Generals/Code/GameEngine/Source/GameClient/GameClient.cpp @@ -1108,7 +1108,7 @@ void GameClient::preloadAssets( TimeOfDay timeOfDay ) DEBUG_LOG(("Preloading memory dwAvailVirtual %d --> %d : %d", before.dwAvailVirtual, after.dwAvailVirtual, before.dwAvailVirtual - after.dwAvailVirtual)); - const char *textureNames[] = { + const char *const textureNames[] = { "ptspruce01.tga", "exrktflame.tga", "cvlimo3_d2.tga", diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/Locomotor.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/Locomotor.cpp index d53f56d7ae..e3715d69f5 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/Locomotor.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/Locomotor.cpp @@ -59,7 +59,7 @@ LocomotorStore *TheLocomotorStore = NULL; ///< the Locomotor store definitio const Real BIGNUM = 99999.0f; -static const char *TheLocomotorPriorityNames[] = +static const char *const TheLocomotorPriorityNames[] = { "MOVES_BACK", "MOVES_MIDDLE", @@ -67,7 +67,7 @@ static const char *TheLocomotorPriorityNames[] = NULL }; - +static_assert(ARRAY_SIZE(TheLocomotorPriorityNames) == LOCOMOTOR_PRIORITY_COUNT + 1, "Array size"); /////////////////////////////////////////////////////////////////////////////////////////////////// // PRIVATE DATA /////////////////////////////////////////////////////////////////////////////////// diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/ObjectCreationList.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/ObjectCreationList.cpp index 16f9ee8b08..4524f79c53 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/ObjectCreationList.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/ObjectCreationList.cpp @@ -693,7 +693,7 @@ enum DebrisDisposition CPP_11(: Int) WHIRLING = 0x00000100 }; -static const char* DebrisDispositionNames[] = +static const char* const DebrisDispositionNames[] = { "LIKE_EXISTING", "ON_GROUND_ALIGNED", diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/SpecialPower/OCLSpecialPower.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/SpecialPower/OCLSpecialPower.cpp index 19059cc77c..8f4bda80c1 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/SpecialPower/OCLSpecialPower.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/SpecialPower/OCLSpecialPower.cpp @@ -49,7 +49,7 @@ enum CREATE_ABOVE_LOCATION_HEIGHT = 300 }; -static const char* TheOCLCreateLocTypeNames[] = +static const char* const TheOCLCreateLocTypeNames[] = { "CREATE_AT_EDGE_NEAR_SOURCE", "CREATE_AT_EDGE_NEAR_TARGET", @@ -59,6 +59,7 @@ static const char* TheOCLCreateLocTypeNames[] = "CREATE_AT_EDGE_FARTHEST_FROM_TARGET", NULL }; +static_assert(ARRAY_SIZE(TheOCLCreateLocTypeNames) == OCL_CREATE_LOC_COUNT + 1, "Incorrect array size"); //------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/Update/StructureCollapseUpdate.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/Update/StructureCollapseUpdate.cpp index 42014a77fc..758f6812a6 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/Update/StructureCollapseUpdate.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/Update/StructureCollapseUpdate.cpp @@ -50,7 +50,7 @@ const Int MAX_IDX = 32; //------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------- -static const char *TheStructureCollapsePhaseNames[] = +static const char *const TheStructureCollapsePhaseNames[] = { "INITIAL", "DELAY", @@ -59,6 +59,7 @@ static const char *TheStructureCollapsePhaseNames[] = NULL }; +static_assert(ARRAY_SIZE(TheStructureCollapsePhaseNames) == SC_PHASE_COUNT + 1, "Wrong array size"); //------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------- diff --git a/Generals/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp b/Generals/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp index 95aba31082..450370feb9 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp @@ -59,7 +59,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// template<> -const char* WeaponSetFlags::s_bitNameList[] = +const char* const WeaponSetFlags::s_bitNameList[] = { "VETERAN", "ELITE", @@ -73,6 +73,7 @@ const char* WeaponSetFlags::s_bitNameList[] = NULL }; +static_assert(ARRAY_SIZE(WeaponSetFlags::s_bitNameList) == WeaponSetFlags::NumBits + 1, "Incorrect array size"); /////////////////////////////////////////////////////////////////////////////////////////////////// // PRIVATE DATA /////////////////////////////////////////////////////////////////////////////////// diff --git a/Generals/Code/GameEngine/Source/GameLogic/ScriptEngine/Scripts.cpp b/Generals/Code/GameEngine/Source/GameLogic/ScriptEngine/Scripts.cpp index 261c82695d..e97e15edaf 100644 --- a/Generals/Code/GameEngine/Source/GameLogic/ScriptEngine/Scripts.cpp +++ b/Generals/Code/GameEngine/Source/GameLogic/ScriptEngine/Scripts.cpp @@ -75,7 +75,7 @@ static ScriptGroup *s_mtGroup = NULL; // These strings must be in the same order as they are in their definitions // (See SHELL_SCRIPT_HOOK_* ) // -const char *TheShellHookNames[]= +static const char *const TheShellHookNames[]= { "ShellMainMenuCampaignPushed", //SHELL_SCRIPT_HOOK_MAIN_MENU_CAMPAIGN_SELECTED, "ShellMainMenuCampaignHighlighted", //SHELL_SCRIPT_HOOK_MAIN_MENU_CAMPAIGN_HIGHLIGHTED, @@ -116,6 +116,8 @@ const char *TheShellHookNames[]= "ShellLANClosed", //SHELL_SCRIPT_HOOK_LAN_CLOSED, "ShellLANEnteredFromGame", //SHELL_SCRIPT_HOOK_LAN_ENTERED_FROM_GAME, }; +static_assert(ARRAY_SIZE(TheShellHookNames) == SHELL_SCRIPT_HOOK_TOTAL, "Incorrect array size"); + void SignalUIInteraction(Int interaction) { if (TheScriptEngine) @@ -2094,7 +2096,7 @@ Parameter *Parameter::ReadParameter(DataChunkInput &file) if (pParm->getParameterType() == KIND_OF_PARAM) { // Need to change the string to an integer - const char** kindofNames = KindOfMaskType::getBitNames(); + const char* const* kindofNames = KindOfMaskType::getBitNames(); if (!pParm->m_string.isEmpty()) { Bool found = false; @@ -2494,10 +2496,10 @@ Bool ScriptAction::ParseActionFalseDataChunk(DataChunkInput &file, DataChunkInfo return true; } -// NOTE: Changing these or adding ot TheOBjectFlagNames requires changes to +// NOTE: Changing these or adding to TheObjectFlagsNames requires changes to // ScriptActions::changeObjectPanelFlagForSingleObject // THEY SHOULD STAY IN SYNC. -const char* TheObjectFlagsNames[] = +const char* const TheObjectFlagsNames[] = { "Enabled", "Powered", @@ -2506,5 +2508,4 @@ const char* TheObjectFlagsNames[] = "Selectable", "AI Recruitable", "Player Targetable", - NULL, }; diff --git a/Generals/Code/GameEngineDevice/Include/W3DDevice/GameClient/Module/W3DModelDraw.h b/Generals/Code/GameEngineDevice/Include/W3DDevice/GameClient/Module/W3DModelDraw.h index 352c6c0516..6829691cb4 100644 --- a/Generals/Code/GameEngineDevice/Include/W3DDevice/GameClient/Module/W3DModelDraw.h +++ b/Generals/Code/GameEngineDevice/Include/W3DDevice/GameClient/Module/W3DModelDraw.h @@ -46,6 +46,8 @@ class RenderObjClass { ANIM_MODE_LOOP_PINGPONG, ANIM_MODE_LOOP_BACKWARDS, //make sure only backwards playing animations after this one ANIM_MODE_ONCE_BACKWARDS, + + ANIM_MODE_COUNT }; }; diff --git a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp index 022f359a54..d1d3a0c946 100644 --- a/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp +++ b/Generals/Code/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp @@ -227,9 +227,11 @@ enum ACBits CPP_11(: Int) MAINTAIN_FRAME_ACROSS_STATES2, MAINTAIN_FRAME_ACROSS_STATES3, MAINTAIN_FRAME_ACROSS_STATES4, + + AC_BITS_COUNT }; -static const char *ACBitsNames[] = +static const char *const ACBitsNames[] = { "RANDOMSTART", "START_FRAME_FIRST", @@ -244,6 +246,7 @@ static const char *ACBitsNames[] = NULL }; +static_assert(ARRAY_SIZE(ACBitsNames) == AC_BITS_COUNT + 1, "Incorrect array size"); static const Int ALL_MAINTAIN_FRAME_FLAGS = (1< m_bits; - static const char* s_bitNameList[]; public: + CPP_11(static constexpr size_t NumBits = NUMBITS); + static const char* const s_bitNameList[]; /* just a little syntactic sugar so that there is no "foo = 0" compatible constructor @@ -261,7 +262,7 @@ class BitFlags return true; } - static const char** getBitNames() + static const char* const* getBitNames() { return s_bitNameList; } @@ -274,7 +275,7 @@ class BitFlags static Int getSingleBitFromName(const char* token) { Int i = 0; - for(const char** name = s_bitNameList; *name; ++name, ++i ) + for(const char* const* name = s_bitNameList; *name; ++name, ++i ) { if( stricmp( *name, token ) == 0 ) { diff --git a/GeneralsMD/Code/GameEngine/Include/Common/GameCommon.h b/GeneralsMD/Code/GameEngine/Include/Common/GameCommon.h index cd4b46e715..723ab57d2b 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/GameCommon.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/GameCommon.h @@ -204,7 +204,7 @@ enum // NOTE NOTE NOTE: Keep TheVeterencyNames in sync with these. enum VeterancyLevel CPP_11(: Int) { - LEVEL_REGULAR = 0, + LEVEL_REGULAR, LEVEL_VETERAN, LEVEL_ELITE, LEVEL_HEROIC, @@ -212,12 +212,12 @@ enum VeterancyLevel CPP_11(: Int) LEVEL_COUNT, LEVEL_INVALID, - LEVEL_FIRST = LEVEL_REGULAR, + LEVEL_FIRST = 0, LEVEL_LAST = LEVEL_HEROIC }; // TheVeterancyNames is defined in GameCommon.cpp -extern const char *TheVeterancyNames[]; +extern const char *const TheVeterancyNames[]; //------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------- @@ -230,6 +230,7 @@ enum CommandSourceType CPP_11(: Int) CMD_FROM_DOZER, // Special rare command when the dozer originates a command to attack a mine. Mines are not ai-attackable, and it seems deceitful for the dozer to generate a player or script command. jba. CMD_DEFAULT_SWITCH_WEAPON, // Special case: A weapon that can be chosen -- this is the default case (machine gun vs flashbang). + COMMAND_SOURCE_TYPE_COUNT }; //------------------------------------------------------------------------------------------------- @@ -497,14 +498,16 @@ inline Real stdAngleDiff(Real a1, Real a2) // NOTE NOTE NOTE: Keep TheRelationShipNames in sync with this enum enum Relationship CPP_11(: Int) { - ENEMIES = 0, + ENEMIES, NEUTRAL, - ALLIES + ALLIES, + + RELATIONSHIP_COUNT }; // TheRelationShipNames is defined in Common/GameCommon.cpp -extern const char *TheRelationshipNames[]; +extern const char *const TheRelationshipNames[]; #endif // _GAMECOMMON_H_ diff --git a/GeneralsMD/Code/GameEngine/Include/Common/GameLOD.h b/GeneralsMD/Code/GameEngine/Include/Common/GameLOD.h index cff9f53076..0ae0e8e200 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/GameLOD.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/GameLOD.h @@ -69,6 +69,8 @@ enum CpuType CPP_11(: Int) P3, P4, K7, + + CPU_MAX }; //Keep this in sync with VideoNames in Gamelod.cpp diff --git a/GeneralsMD/Code/GameEngine/Include/Common/GameType.h b/GeneralsMD/Code/GameEngine/Include/Common/GameType.h index b84aabf119..2110d8138b 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/GameType.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/GameType.h @@ -67,17 +67,18 @@ class INI; //------------------------------------------------------------------------------------------------- enum TimeOfDay CPP_11(: Int) { - TIME_OF_DAY_INVALID = 0, - TIME_OF_DAY_FIRST = 1, - TIME_OF_DAY_MORNING = TIME_OF_DAY_FIRST, + TIME_OF_DAY_INVALID, + + TIME_OF_DAY_MORNING, TIME_OF_DAY_AFTERNOON, TIME_OF_DAY_EVENING, TIME_OF_DAY_NIGHT, - TIME_OF_DAY_COUNT + TIME_OF_DAY_COUNT, + TIME_OF_DAY_FIRST = TIME_OF_DAY_MORNING, }; -extern const char *TimeOfDayNames[]; +extern const char *const TimeOfDayNames[]; // defined in Common/GameType.cpp //------------------------------------------------------------------------------------------------- @@ -89,7 +90,7 @@ enum Weather CPP_11(: Int) WEATHER_COUNT }; -extern const char *WeatherNames[]; +extern const char *const WeatherNames[]; enum Scorches CPP_11(: Int) { diff --git a/GeneralsMD/Code/GameEngine/Include/Common/Geometry.h b/GeneralsMD/Code/GameEngine/Include/Common/Geometry.h index a0c27f8b0c..4d745501e5 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/Geometry.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/Geometry.h @@ -48,22 +48,23 @@ class INI; //------------------------------------------------------------------------------------------------- enum GeometryType CPP_11(: Int) { - GEOMETRY_SPHERE = 0, ///< partition/collision testing as sphere. (majorRadius = radius) + GEOMETRY_SPHERE, ///< partition/collision testing as sphere. (majorRadius = radius) GEOMETRY_CYLINDER, ///< partition/collision testing as cylinder. (majorRadius = radius, height = height) GEOMETRY_BOX, ///< partition/collision testing as rectangular box (majorRadius = half len in forward dir; minorRadius = half len in side dir; height = height) GEOMETRY_NUM_TYPES, - GEOMETRY_FIRST = GEOMETRY_SPHERE + GEOMETRY_FIRST = 0 }; #ifdef DEFINE_GEOMETRY_NAMES -static const char *GeometryNames[] = +static const char *const GeometryNames[] = { "SPHERE", "CYLINDER", "BOX", NULL }; +static_assert(ARRAY_SIZE(GeometryNames) == GEOMETRY_NUM_TYPES + 1, "Incorrect array size"); #endif // end DEFINE_GEOMETRY_NAMES //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Include/Common/INI.h b/GeneralsMD/Code/GameEngine/Include/Common/INI.h index 75f7ec6845..33259945e8 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/INI.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/INI.h @@ -91,14 +91,14 @@ enum /** Function typedef for parsing data block fields. * * buffer - the character buffer of the line from INI that we are reading and parsing - * instance - instance of what we're loading (for example a thingtemplate instance) + * instance - instance of what we're loading (for example a ThingTemplate instance) * store - where to store the data parsed, this is a field in the *instance* 'instance' */ //------------------------------------------------------------------------------------------------- typedef void (*INIFieldParseProc)( INI *ini, void *instance, void *store, const void* userData ); //------------------------------------------------------------------------------------------------- -typedef const char* ConstCharPtr; +typedef const char* const ConstCharPtr; typedef ConstCharPtr* ConstCharPtrArray; //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Include/Common/KindOf.h b/GeneralsMD/Code/GameEngine/Include/Common/KindOf.h index 0f8d015ab8..104a384305 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/KindOf.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/KindOf.h @@ -44,8 +44,8 @@ enum KindOfType CPP_11(: Int) { KINDOF_INVALID = -1, - KINDOF_FIRST = 0, - KINDOF_OBSTACLE = KINDOF_FIRST, ///< an obstacle to land-based pathfinders + + KINDOF_OBSTACLE, ///< an obstacle to land-based pathfinders KINDOF_SELECTABLE, ///< Actually means MOUSE-INTERACTABLE (doesn't mean you can select it!) KINDOF_IMMOBILE, ///< fixed in location KINDOF_CAN_ATTACK, ///< can attack @@ -171,8 +171,8 @@ enum KindOfType CPP_11(: Int) KINDOF_CONSERVATIVE_BUILDING, ///< Conservative structures aren't considered part of your base for sneak attack boundary calculations... KINDOF_IGNORE_DOCKING_BONES, ///< Structure will not look up docking bones. Patch 1.03 hack. - KINDOF_COUNT // total number of kindofs - + KINDOF_COUNT, // total number of kindofs + KINDOF_FIRST = 0, }; typedef BitFlags KindOfMaskType; diff --git a/GeneralsMD/Code/GameEngine/Include/Common/ModelState.h b/GeneralsMD/Code/GameEngine/Include/Common/ModelState.h index 429b605833..41efd75267 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/ModelState.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/ModelState.h @@ -94,13 +94,11 @@ enum ModelConditionFlagType CPP_11(: Int) { MODELCONDITION_INVALID = -1, - MODELCONDITION_FIRST = 0, - // // Note: these values are saved in save files, so you MUST NOT REMOVE OR CHANGE // existing values! // - MODELCONDITION_TOPPLED = MODELCONDITION_FIRST, + MODELCONDITION_TOPPLED, MODELCONDITION_FRONTCRUSHED, MODELCONDITION_BACKCRUSHED, MODELCONDITION_DAMAGED, @@ -242,7 +240,8 @@ enum ModelConditionFlagType CPP_11(: Int) // existing values! // - MODELCONDITION_COUNT + MODELCONDITION_COUNT, + MODELCONDITION_FIRST = 0, }; //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Include/Common/Player.h b/GeneralsMD/Code/GameEngine/Include/Common/Player.h index 25d0e8daae..2e1dd36b2e 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/Player.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/Player.h @@ -101,13 +101,14 @@ enum ScienceAvailabilityType CPP_11(: Int) }; #ifdef DEFINE_SCIENCE_AVAILABILITY_NAMES -static const char *ScienceAvailabilityNames[] = +static const char *const ScienceAvailabilityNames[] = { "Available", "Disabled", "Hidden", NULL }; +static_assert(ARRAY_SIZE(ScienceAvailabilityNames) == SCIENCE_AVAILABILITY_COUNT + 1, "Incorrect array size"); #endif // end DEFINE_SCIENCE_AVAILABILITY_NAMES static const Int NUM_HOTKEY_SQUADS = 10; diff --git a/GeneralsMD/Code/GameEngine/Include/Common/Radar.h b/GeneralsMD/Code/GameEngine/Include/Common/Radar.h index 321234598c..43afe9a55d 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/Radar.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/Radar.h @@ -145,7 +145,7 @@ enum RadarPriorityType CPP_11(: Int) RADAR_PRIORITY_NUM_PRIORITIES }; #ifdef DEFINE_RADAR_PRIORITY_NAMES -static const char *RadarPriorityNames[] = +static const char *const RadarPriorityNames[] = { "INVALID", // a priority that has not been set (in general it won't show up on the radar) "NOT_ON_RADAR", // object specifically forbidden from being on the radar @@ -155,6 +155,7 @@ static const char *RadarPriorityNames[] = NULL }; +static_assert(ARRAY_SIZE(RadarPriorityNames) == RADAR_PRIORITY_NUM_PRIORITIES + 1, "Incorrect array size"); #endif // DEFINE_RADAR_PRIOTITY_NAMES //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Include/Common/TerrainTypes.h b/GeneralsMD/Code/GameEngine/Include/Common/TerrainTypes.h index 278abf5340..6858c5e255 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/TerrainTypes.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/TerrainTypes.h @@ -93,7 +93,7 @@ typedef enum } TerrainClass; #ifdef DEFINE_TERRAIN_TYPE_NAMES -static const char *terrainTypeNames[] = +static const char *const terrainTypeNames[] = { "NONE", "DESERT_1", @@ -142,6 +142,7 @@ static const char *terrainTypeNames[] = NULL }; +static_assert(ARRAY_SIZE(terrainTypeNames) == TERRAIN_NUM_CLASSES + 1, "Incorrect array size"); #endif // end DEFINE_TERRAIN_TYPE_NAMES //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Include/Common/ThingSort.h b/GeneralsMD/Code/GameEngine/Include/Common/ThingSort.h index 4950819a7d..a7029d622a 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/ThingSort.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/ThingSort.h @@ -32,12 +32,12 @@ #ifndef __THINGSORT_H_ #define __THINGSORT_H_ +#include "GameCommon.h" + //------------------------------------------------------------------------------------------------- enum EditorSortingType CPP_11(: Int) { - ES_FIRST = 0, - - ES_NONE = ES_FIRST, + ES_NONE, ES_STRUCTURE, ES_INFANTRY, ES_VEHICLE, @@ -52,11 +52,12 @@ enum EditorSortingType CPP_11(: Int) ES_ROAD, // road objects...should never actually be in the object panel. ES_WAYPOINT, // waypoint objects...should never actually be in the object panel. - ES_NUM_SORTING_TYPES - + ES_NUM_SORTING_TYPES, + ES_FIRST = 0, }; + #ifdef DEFINE_EDITOR_SORTING_NAMES -static const char *EditorSortingNames[] = +static const char *const EditorSortingNames[] = { "NONE", "STRUCTURE", @@ -75,6 +76,7 @@ static const char *EditorSortingNames[] = NULL }; +static_assert(ARRAY_SIZE(EditorSortingNames) == ES_NUM_SORTING_TYPES + 1, "Incorrect array size"); #endif #endif // __THINGSORT_H_ diff --git a/GeneralsMD/Code/GameEngine/Include/Common/ThingTemplate.h b/GeneralsMD/Code/GameEngine/Include/Common/ThingTemplate.h index f8c8ec22d8..aa18d38321 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/ThingTemplate.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/ThingTemplate.h @@ -203,7 +203,7 @@ enum BuildCompletionType CPP_11(: Int) BC_NUM_TYPES }; #ifdef DEFINE_BUILD_COMPLETION_NAMES -static const char *BuildCompletionNames[] = +static const char *const BuildCompletionNames[] = { "INVALID", "APPEARS_AT_RALLY_POINT", @@ -211,6 +211,7 @@ static const char *BuildCompletionNames[] = NULL }; +static_assert(ARRAY_SIZE(BuildCompletionNames) == BC_NUM_TYPES + 1, "Incorrect array size"); #endif // end DEFINE_BUILD_COMPLETION_NAMES enum BuildableStatus CPP_11(: Int) @@ -225,7 +226,7 @@ enum BuildableStatus CPP_11(: Int) }; #ifdef DEFINE_BUILDABLE_STATUS_NAMES -static const char *BuildableStatusNames[] = +static const char *const BuildableStatusNames[] = { "Yes", "Ignore_Prerequisites", @@ -233,6 +234,7 @@ static const char *BuildableStatusNames[] = "Only_By_AI", NULL }; +static_assert(ARRAY_SIZE(BuildableStatusNames) == BSTATUS_NUM_TYPES + 1, "Incorrect array size"); #endif // end DEFINE_BUILDABLE_STATUS_NAMES //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Include/Common/Upgrade.h b/GeneralsMD/Code/GameEngine/Include/Common/Upgrade.h index c7bb5c2981..afcc79b82a 100644 --- a/GeneralsMD/Code/GameEngine/Include/Common/Upgrade.h +++ b/GeneralsMD/Code/GameEngine/Include/Common/Upgrade.h @@ -152,7 +152,7 @@ enum UpgradeType CPP_11(: Int) NUM_UPGRADE_TYPES }; -extern const char *TheUpgradeTypeNames[]; //Change above, change this! +extern const char *const TheUpgradeTypeNames[]; //Change above, change this! //------------------------------------------------------------------------------------------------- /** A single upgrade template definition */ diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/Anim2D.h b/GeneralsMD/Code/GameEngine/Include/GameClient/Anim2D.h index 91d4a2985d..b8346c589f 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/Anim2D.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/Anim2D.h @@ -56,7 +56,7 @@ enum Anim2DMode CPP_11(: Int) }; #ifdef DEFINE_ANIM_2D_MODE_NAMES -static const char *Anim2DModeNames[] = +static const char *const Anim2DModeNames[] = { "NONE", "ONCE", @@ -67,6 +67,7 @@ static const char *Anim2DModeNames[] = "PING_PONG_BACKWARDS", NULL }; +static_assert(ARRAY_SIZE(Anim2DModeNames) == ANIM_2D_NUM_MODES + 1, "Incorrect array size"); #endif // ------------------------------------------------------------------------------------------------ diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/ControlBar.h b/GeneralsMD/Code/GameEngine/Include/GameClient/ControlBar.h index dbc8dc48b1..077d845ab0 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/ControlBar.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/ControlBar.h @@ -102,12 +102,10 @@ enum CommandOption CPP_11(: Int) USES_MINE_CLEARING_WEAPONSET= 0x00200000, // uses the special mine-clearing weaponset, even if not current CAN_USE_WAYPOINTS = 0x00400000, // button has option to use a waypoint path MUST_BE_STOPPED = 0x00800000, // Unit must be stopped in order to be able to use button. - - NUM_COMMAND_OPTIONS }; #ifdef DEFINE_COMMAND_OPTION_NAMES -static const char *TheCommandOptionNames[] = +static const char *const TheCommandOptionNames[] = { "NEED_TARGET_ENEMY_OBJECT", "NEED_TARGET_NEUTRAL_OBJECT", @@ -222,7 +220,7 @@ enum GUICommandType CPP_11(: Int) }; #ifdef DEFINE_GUI_COMMMAND_NAMES -static const char *TheGuiCommandNames[] = +static const char *const TheGuiCommandNames[] = { "NONE", "DOZER_CONSTRUCT", @@ -268,6 +266,7 @@ static const char *TheGuiCommandNames[] = NULL }; +static_assert(ARRAY_SIZE(TheGuiCommandNames) == GUI_COMMAND_NUM_COMMANDS + 1, "Incorrect array size"); #endif // end DEFINE_GUI_COMMAND_NAMES enum CommandButtonMappedBorderType CPP_11(: Int) @@ -291,6 +290,7 @@ static const LookupListRec CommandButtonMappedBorderTypeNames[] = { NULL, 0 } }; +static_assert(ARRAY_SIZE(CommandButtonMappedBorderTypeNames) == COMMAND_BUTTON_BORDER_COUNT + 1, "Incorrect array size"); //------------------------------------------------------------------------------------------------- /** Command buttons are used to load the buttons we place on throughout the command bar * interface in different context sensitive windows depending on the situation and diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/Credits.h b/GeneralsMD/Code/GameEngine/Include/GameClient/Credits.h index 2c1524bdbf..45c2971203 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/Credits.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/Credits.h @@ -83,9 +83,10 @@ static const LookupListRec CreditStyleNames[] = { "MINORTITLE", CREDIT_STYLE_POSITION }, { "NORMAL", CREDIT_STYLE_NORMAL }, { "COLUMN", CREDIT_STYLE_COLUMN }, - + // CREDIT_STYLE_BLANK { NULL, 0 } }; +static_assert(ARRAY_SIZE(CreditStyleNames) == MAX_CREDIT_STYLES, "Incorrect array size"); class CreditsLine diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/DisconnectMenu.h b/GeneralsMD/Code/GameEngine/Include/GameClient/DisconnectMenu.h index bf120b7cd7..3578157169 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/DisconnectMenu.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/DisconnectMenu.h @@ -69,13 +69,13 @@ class DisconnectMenu { DisconnectManager *m_disconnectManager; ///< For retrieving status updates from the disconnect manager. DisconnectMenuStateType m_menuState; ///< The current state of the menu screen. - static const char *m_playerNameTextControlNames[MAX_SLOTS]; ///< names of the player name controls in the window. - static const char *m_playerTimeoutTextControlNames[MAX_SLOTS]; ///< names of the timeout controls in the window. - static const char *m_playerVoteButtonControlNames[MAX_SLOTS]; ///< names of the vote button controls in the window. - static const char *m_playerVoteCountControlNames[MAX_SLOTS]; ///< names of the vote count static text controls in the window. - static const char *m_packetRouterTimeoutControlName; ///< name of the packet router timeout control window. - static const char *m_packetRouterTimeoutLabelControlName; ///< name of the packet router timeout label control window. - static const char *m_textDisplayControlName; ///< name of the text display listbox control window. + static const char *const m_playerNameTextControlNames[MAX_SLOTS]; ///< names of the player name controls in the window. + static const char *const m_playerTimeoutTextControlNames[MAX_SLOTS]; ///< names of the timeout controls in the window. + static const char *const m_playerVoteButtonControlNames[MAX_SLOTS]; ///< names of the vote button controls in the window. + static const char *const m_playerVoteCountControlNames[MAX_SLOTS]; ///< names of the vote count static text controls in the window. + static const char *const m_packetRouterTimeoutControlName; ///< name of the packet router timeout control window. + static const char *const m_packetRouterTimeoutLabelControlName; ///< name of the packet router timeout label control window. + static const char *const m_textDisplayControlName; ///< name of the text display listbox control window. }; extern DisconnectMenu *TheDisconnectMenu; diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/Drawable.h b/GeneralsMD/Code/GameEngine/Include/GameClient/Drawable.h index 5f17f3ebc6..428868e900 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/Drawable.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/Drawable.h @@ -82,9 +82,8 @@ enum DrawableIconType CPP_11(: Int) /** NOTE: This enum MUST appear in the same order as TheDrawableIconNames array to be * indexed correctly using that array */ ICON_INVALID = -1, - ICON_FIRST = 0, - ICON_DEFAULT_HEAL = ICON_FIRST, + ICON_DEFAULT_HEAL, ICON_STRUCTURE_HEAL, ICON_VEHICLE_HEAL, #ifdef ALLOW_DEMORALIZE @@ -103,7 +102,8 @@ enum DrawableIconType CPP_11(: Int) ICON_ENTHUSIASTIC_SUBLIMINAL, ICON_CARBOMB, - MAX_ICONS + MAX_ICONS, + ICON_FIRST = 0, }; //----------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/EstablishConnectionsMenu.h b/GeneralsMD/Code/GameEngine/Include/GameClient/EstablishConnectionsMenu.h index 8a18a6adf3..2ef62d5d95 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/EstablishConnectionsMenu.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/EstablishConnectionsMenu.h @@ -47,9 +47,9 @@ class EstablishConnectionsMenu { protected: EstablishConnectionsMenuStateType m_menuState; - static const char *m_playerReadyControlNames[MAX_SLOTS]; - static const char *m_playerNameControlNames[MAX_SLOTS]; - static const char *m_playerStatusControlNames[MAX_SLOTS]; + static const char *const m_playerReadyControlNames[MAX_SLOTS]; + static const char *const m_playerNameControlNames[MAX_SLOTS]; + static const char *const m_playerStatusControlNames[MAX_SLOTS]; }; extern EstablishConnectionsMenu *TheEstablishConnectionsMenu; diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/Eva.h b/GeneralsMD/Code/GameEngine/Include/GameClient/Eva.h index 785ba04978..5878cf86b5 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/Eva.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/Eva.h @@ -42,8 +42,7 @@ enum EvaMessage CPP_11(: Int) { EVA_Invalid = -1, - EVA_FIRST = 0, - EVA_LowPower = EVA_FIRST, + EVA_LowPower, EVA_InsufficientFunds, EVA_SuperweaponDetected_Own_ParticleCannon, EVA_SuperweaponDetected_Own_Nuke, @@ -98,9 +97,10 @@ enum EvaMessage CPP_11(: Int) EVA_SuperweaponLaunched_Enemy_Sneak_Attack, EVA_COUNT, + EVA_FIRST = 0, }; -extern const char *TheEvaMessageNames[]; +extern const char *const TheEvaMessageNames[]; //------------------------------------------------------------------------------------ EvaCheckInfo struct EvaSideSounds diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/GameWindow.h b/GeneralsMD/Code/GameEngine/Include/GameClient/GameWindow.h index 5cf628a9bd..0c49d5ba71 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/GameWindow.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/GameWindow.h @@ -502,8 +502,8 @@ extern void GameWinDefaultTooltip( GameWindow *window, WinInstanceData *instData, UnsignedInt mouse ); -extern const char *WindowStatusNames[]; -extern const char *WindowStyleNames[]; +extern const char *const WindowStatusNames[]; +extern const char *const WindowStyleNames[]; #endif // __GAMEWINDOW_H_ diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/GameWindowTransitions.h b/GeneralsMD/Code/GameEngine/Include/GameClient/GameWindowTransitions.h index 9987eafc50..8fb89c4e15 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/GameWindowTransitions.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/GameWindowTransitions.h @@ -48,6 +48,8 @@ #ifndef __GAME_WINDOW_TRANSITIONS_H_ #define __GAME_WINDOW_TRANSITIONS_H_ +#include "Common/GameCommon.h" + //----------------------------------------------------------------------------- // SYSTEM INCLUDES //////////////////////////////////////////////////////////// //----------------------------------------------------------------------------- @@ -106,6 +108,7 @@ static const LookupListRec TransitionStyleNames[] = { "REVERSESOUND", REVERSE_SOUND_TRANSITION }, { NULL, 0 } }; +static_assert(ARRAY_SIZE(TransitionStyleNames) == MAX_TRANSITION_WINDOW_STYLES + 1, "Incorrect array size"); // base class for the transitions // inherit off of this adding in all the values diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/Image.h b/GeneralsMD/Code/GameEngine/Include/GameClient/Image.h index 148362dca4..274ff1944a 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/Image.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/Image.h @@ -52,7 +52,7 @@ typedef enum } ImageStatus; #ifdef DEFINE_IMAGE_STATUS_NAMES -static const char *imageStatusNames[] = +static const char *const imageStatusNames[] = { "ROTATED_90_CLOCKWISE", "RAW_TEXTURE", diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/InGameUI.h b/GeneralsMD/Code/GameEngine/Include/GameClient/InGameUI.h index 70dc784e80..631f371fc5 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/InGameUI.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/InGameUI.h @@ -108,7 +108,7 @@ enum RadiusCursorType CPP_11(: Int) }; #ifdef DEFINE_RADIUSCURSOR_NAMES -static const char *TheRadiusCursorNames[] = +static const char *const TheRadiusCursorNames[] = { "NONE", "ATTACK_DAMAGE_AREA", @@ -147,6 +147,7 @@ static const char *TheRadiusCursorNames[] = NULL }; +static_assert(ARRAY_SIZE(TheRadiusCursorNames) == RADIUSCURSOR_COUNT + 1, "Incorrect array size"); #endif // ------------------------------------------------------------------------------------------------ diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/MetaEvent.h b/GeneralsMD/Code/GameEngine/Include/GameClient/MetaEvent.h index 227b3d2471..562d8faafb 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/MetaEvent.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/MetaEvent.h @@ -269,7 +269,9 @@ enum MappableKeyTransition CPP_11(: Int) { DOWN, UP, - DOUBLEDOWN // if a key transition is repeated immediately, we generate this. + DOUBLEDOWN, // if a key transition is repeated immediately, we generate this. + + MAPPABLE_KEY_TRANSITION_COUNT }; static const LookupListRec TransitionNames[] = @@ -279,6 +281,7 @@ static const LookupListRec TransitionNames[] = { "DOUBLEDOWN", DOUBLEDOWN }, { NULL, 0 } }; +static_assert(ARRAY_SIZE(TransitionNames) == MAPPABLE_KEY_TRANSITION_COUNT + 1, "Incorrect array size"); // ------------------------------------------------------------------------------- // an easier-to-type subset of the KEY_STATE stuff. @@ -322,7 +325,7 @@ enum CommandUsableInType CPP_11(: Int) COMMANDUSABLE_EVERYWHERE = ~0, }; -static const char* TheCommandUsableInNames[] = +static const char* const TheCommandUsableInNames[] = { "SHELL", "GAME", diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/ParticleSys.h b/GeneralsMD/Code/GameEngine/Include/GameClient/ParticleSys.h index 62c808aa14..9b56bff6ff 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/ParticleSys.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/ParticleSys.h @@ -107,8 +107,8 @@ enum ParticlePriorityType CPP_11(: Int) CRITICAL, ///< super special top priority like a superweapon ALWAYS_RENDER, ///< used for logically important display (not just fluff), so must never be culled, regardless of particle cap, lod, etc // !!! *Noting* goes here ... special is the top priority !!! - PARTICLE_PRIORITY_HIGHEST = ALWAYS_RENDER, - NUM_PARTICLE_PRIORITIES + NUM_PARTICLE_PRIORITIES, + PARTICLE_PRIORITY_HIGHEST = NUM_PARTICLE_PRIORITIES - 1, }; /** @@ -244,46 +244,6 @@ class Particle : public MemoryPoolObject, }; - -//-------------------------------------------------------------------------------------------------------------- - -#ifdef DEFINE_PARTICLE_SYSTEM_NAMES - -/**** NOTE: These MUST be kept in sync with the enumerations below *****/ - -static const char *ParticleShaderTypeNames[] = -{ - "NONE", "ADDITIVE", "ALPHA", "ALPHA_TEST", "MULTIPLY", NULL -}; - -static const char *ParticleTypeNames[] = -{ - "NONE", "PARTICLE", "DRAWABLE", "STREAK", "VOLUME_PARTICLE","SMUDGE", NULL -}; - -static const char *EmissionVelocityTypeNames[] = -{ - "NONE", "ORTHO", "SPHERICAL", "HEMISPHERICAL", "CYLINDRICAL", "OUTWARD", NULL -}; - -static const char *EmissionVolumeTypeNames[] = -{ - "NONE", "POINT", "LINE", "BOX", "SPHERE", "CYLINDER", NULL -}; - -//"NONE", "FLUFF", "DEBRIS", "NATURE", "WEAPON", "DAMAGE", "SPECIAL" -static const char *ParticlePriorityNames[] = -{ - "NONE", "WEAPON_EXPLOSION","SCORCHMARK","DUST_TRAIL","BUILDUP","DEBRIS_TRAIL","UNIT_DAMAGE_FX","DEATH_EXPLOSION","SEMI_CONSTANT","CONSTANT","WEAPON_TRAIL","AREA_EFFECT","CRITICAL", "ALWAYS_RENDER", NULL -}; - -static const char *WindMotionNames[] = -{ - "NONE", "Unused", "PingPong", "Circular", NULL -}; - -#endif - /** * All of the properties of a particle system, used by both ParticleSystemTemplates * and ParticleSystem classes. @@ -304,13 +264,15 @@ class ParticleSystemInfo : public Snapshot enum ParticleShaderType { - INVALID_SHADER=0, ADDITIVE, ALPHA, ALPHA_TEST, MULTIPLY + INVALID_SHADER=0, ADDITIVE, ALPHA, ALPHA_TEST, MULTIPLY, + PARTICLE_SHADER_TYPE_COUNT } m_shaderType; ///< how this particle is rendered enum ParticleType { - INVALID_TYPE=0, PARTICLE, DRAWABLE, STREAK, VOLUME_PARTICLE, SMUDGE ///< is a particle a 2D-screen-facing particle, or a Drawable, or a Segment in a streak? + INVALID_TYPE=0, PARTICLE, DRAWABLE, STREAK, VOLUME_PARTICLE, SMUDGE, ///< is a particle a 2D-screen-facing particle, or a Drawable, or a Segment in a streak? + PARTICLE_TYPE_COUNT } m_particleType; @@ -366,7 +328,8 @@ class ParticleSystemInfo : public Snapshot // The direction and speed at which particles are emitted enum EmissionVelocityType { - INVALID_VELOCITY=0, ORTHO, SPHERICAL, HEMISPHERICAL, CYLINDRICAL, OUTWARD + INVALID_VELOCITY=0, ORTHO, SPHERICAL, HEMISPHERICAL, CYLINDRICAL, OUTWARD, + EMISSION_VELOCITY_TYPE_COUNT } m_emissionVelocityType; @@ -409,7 +372,8 @@ class ParticleSystemInfo : public Snapshot // Note that the volume is relative to the system's position and orientation enum EmissionVolumeType { - INVALID_VOLUME=0, POINT, LINE, BOX, SPHERE, CYLINDER + INVALID_VOLUME=0, POINT, LINE, BOX, SPHERE, CYLINDER, + EMISSION_VOLUME_TYPE_COUNT } m_emissionVolumeType; ///< the type of volume where particles are created @@ -458,7 +422,9 @@ class ParticleSystemInfo : public Snapshot WIND_MOTION_INVALID = 0, WIND_MOTION_NOT_USED, WIND_MOTION_PING_PONG, - WIND_MOTION_CIRCULAR + WIND_MOTION_CIRCULAR, + + WIND_MOTION_COUNT }; WindMotion m_windMotion; ///< motion of the wind angle updating Real m_windAngle; ///< angle of the "wind" associated with this system @@ -475,6 +441,49 @@ class ParticleSystemInfo : public Snapshot }; +//-------------------------------------------------------------------------------------------------------------- + +#ifdef DEFINE_PARTICLE_SYSTEM_NAMES + +/**** NOTE: These MUST be kept in sync with the enumerations above *****/ + +static const char *const ParticleShaderTypeNames[] = +{ + "NONE", "ADDITIVE", "ALPHA", "ALPHA_TEST", "MULTIPLY", NULL +}; +static_assert(ARRAY_SIZE(ParticleShaderTypeNames) == ParticleSystemInfo::PARTICLE_SHADER_TYPE_COUNT + 1, "Incorrect array size"); + +static const char *const ParticleTypeNames[] = +{ + "NONE", "PARTICLE", "DRAWABLE", "STREAK", "VOLUME_PARTICLE","SMUDGE", NULL +}; +static_assert(ARRAY_SIZE(ParticleTypeNames) == ParticleSystemInfo::PARTICLE_TYPE_COUNT + 1, "Incorrect array size"); + +static const char *const EmissionVelocityTypeNames[] = +{ + "NONE", "ORTHO", "SPHERICAL", "HEMISPHERICAL", "CYLINDRICAL", "OUTWARD", NULL +}; +static_assert(ARRAY_SIZE(EmissionVelocityTypeNames) == ParticleSystemInfo::EMISSION_VELOCITY_TYPE_COUNT + 1, "Incorrect array size"); + +static const char *const EmissionVolumeTypeNames[] = +{ + "NONE", "POINT", "LINE", "BOX", "SPHERE", "CYLINDER", NULL +}; +static_assert(ARRAY_SIZE(EmissionVolumeTypeNames) == ParticleSystemInfo::EMISSION_VOLUME_TYPE_COUNT + 1, "Incorrect array size"); + +static const char *const ParticlePriorityNames[] = +{ + "NONE", "WEAPON_EXPLOSION","SCORCHMARK","DUST_TRAIL","BUILDUP","DEBRIS_TRAIL","UNIT_DAMAGE_FX","DEATH_EXPLOSION","SEMI_CONSTANT","CONSTANT","WEAPON_TRAIL","AREA_EFFECT","CRITICAL", "ALWAYS_RENDER", NULL +}; +static_assert(ARRAY_SIZE(ParticlePriorityNames) == NUM_PARTICLE_PRIORITIES + 1, "Incorrect array size"); + +static const char *const WindMotionNames[] = +{ + "NONE", "Unused", "PingPong", "Circular", NULL +}; +static_assert(ARRAY_SIZE(WindMotionNames) == ParticleSystemInfo::WIND_MOTION_COUNT + 1, "Incorrect array size"); + +#endif /** * A ParticleSystemTemplate, used by the ParticleSystemManager to instantiate ParticleSystems. diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/Shadow.h b/GeneralsMD/Code/GameEngine/Include/GameClient/Shadow.h index e3d7016960..f9b728a827 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/Shadow.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/Shadow.h @@ -50,7 +50,7 @@ enum ShadowType CPP_11(: Int) SHADOW_ADDITIVE_DECAL = 0x00000040 //not really for shadows but for other decal uses. Additive blended. }; #ifdef DEFINE_SHADOW_NAMES -static const char* TheShadowNames[] = +static const char* const TheShadowNames[] = { "SHADOW_DECAL", "SHADOW_VOLUME", diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/ShellHooks.h b/GeneralsMD/Code/GameEngine/Include/GameClient/ShellHooks.h index b29f51cdd1..3741f42104 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/ShellHooks.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/ShellHooks.h @@ -80,7 +80,7 @@ enum SHELL_SCRIPT_HOOK_TOTAL }; -extern const char *TheShellHookNames[]; ///< Contains a list of the text representation of the shell hooks Used in WorldBuilder and in the shell. +extern const char *const TheShellHookNames[]; ///< Contains a list of the text representation of the shell hooks Used in WorldBuilder and in the shell. void SignalUIInteraction(Int interaction); #endif // SHELLHOOKS_H diff --git a/GeneralsMD/Code/GameEngine/Include/GameClient/TerrainVisual.h b/GeneralsMD/Code/GameEngine/Include/GameClient/TerrainVisual.h index 7ff72cf887..63a47121f5 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameClient/TerrainVisual.h +++ b/GeneralsMD/Code/GameEngine/Include/GameClient/TerrainVisual.h @@ -172,22 +172,22 @@ class DomeStyleSeismicFilter : public SeismicSimulationFilterBase //------------------------------------------------------------------------------------------------- typedef enum _TerrainLOD CPP_11(: Int) { - TERRAIN_LOD_INVALID = 0, - TERRAIN_LOD_MIN = 1, // note that this is less than max - TERRAIN_LOD_STRETCH_NO_CLOUDS = 2, - TERRAIN_LOD_HALF_CLOUDS = 3, - TERRAIN_LOD_NO_CLOUDS = 4, - TERRAIN_LOD_STRETCH_CLOUDS = 5, - TERRAIN_LOD_NO_WATER = 6, - TERRAIN_LOD_MAX = 7, // note that this is larger than min - TERRAIN_LOD_AUTOMATIC = 8, - TERRAIN_LOD_DISABLE = 9, + TERRAIN_LOD_INVALID, + TERRAIN_LOD_MIN, // note that this is less than max + TERRAIN_LOD_STRETCH_NO_CLOUDS, + TERRAIN_LOD_HALF_CLOUDS, + TERRAIN_LOD_NO_CLOUDS, + TERRAIN_LOD_STRETCH_CLOUDS, + TERRAIN_LOD_NO_WATER, + TERRAIN_LOD_MAX, // note that this is larger than min + TERRAIN_LOD_AUTOMATIC, + TERRAIN_LOD_DISABLE, TERRAIN_LOD_NUM_TYPES } TerrainLOD; #ifdef DEFINE_TERRAIN_LOD_NAMES -static const char * TerrainLODNames[] = +static const char *const TerrainLODNames[] = { "NONE", "MIN", @@ -202,6 +202,7 @@ static const char * TerrainLODNames[] = NULL }; +static_assert(ARRAY_SIZE(TerrainLODNames) == TERRAIN_LOD_NUM_TYPES + 1, "Incorrect array size"); #endif // end DEFINE_TERRAIN_LOD_NAMES //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/AI.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/AI.h index 056ff90382..fb2b226ea9 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/AI.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/AI.h @@ -337,7 +337,7 @@ enum CommandSourceType CPP_11(: Int); typedef UnsignedInt CommandSourceMask; #ifdef DEFINE_COMMANDSOURCEMASK_NAMES -static const char *TheCommandSourceMaskNames[] = +static const char *const TheCommandSourceMaskNames[] = { "FROM_PLAYER", "FROM_SCRIPT", @@ -347,6 +347,7 @@ static const char *TheCommandSourceMaskNames[] = NULL }; +static_assert(ARRAY_SIZE(TheCommandSourceMaskNames) == COMMAND_SOURCE_TYPE_COUNT + 1, "Incorrect array size"); #endif //------------------------------------------------------------------------------------------------------------ diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Damage.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Damage.h index f43f184fc8..77b5b80068 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Damage.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Damage.h @@ -199,7 +199,7 @@ enum DeathType CPP_11(: Int) }; #ifdef DEFINE_DEATH_NAMES -static const char *TheDeathNames[] = +static const char *const TheDeathNames[] = { "NORMAL", "NONE", @@ -225,6 +225,7 @@ static const char *TheDeathNames[] = NULL }; +static_assert(ARRAY_SIZE(TheDeathNames) == DEATH_NUM_TYPES + 1, "Incorrect array size"); #endif // end DEFINE_DEATH_NAMES diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Locomotor.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Locomotor.h index 1d7faaffa9..3d605bfd95 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Locomotor.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Locomotor.h @@ -61,18 +61,22 @@ enum LocomotorAppearance CPP_11(: Int) LOCO_WINGS, LOCO_CLIMBER, // human climber - backs down cliffs. LOCO_OTHER, - LOCO_MOTORCYCLE + LOCO_MOTORCYCLE, + + LOCOMOTOR_APPEARANCE_COUNT }; enum LocomotorPriority CPP_11(: Int) { - LOCO_MOVES_BACK=0, // In a group, this one moves toward the back - LOCO_MOVES_MIDDLE=1, // In a group, this one stays in the middle - LOCO_MOVES_FRONT=2 // In a group, this one moves toward the front of the group + LOCO_MOVES_BACK, // In a group, this one moves toward the back + LOCO_MOVES_MIDDLE, // In a group, this one stays in the middle + LOCO_MOVES_FRONT, // In a group, this one moves toward the front of the group + + LOCOMOTOR_PRIORITY_COUNT }; #ifdef DEFINE_LOCO_APPEARANCE_NAMES -static const char *TheLocomotorAppearanceNames[] = +static const char *const TheLocomotorAppearanceNames[] = { "TWO_LEGS", "FOUR_WHEELS", @@ -86,6 +90,7 @@ static const char *TheLocomotorAppearanceNames[] = NULL }; +static_assert(ARRAY_SIZE(TheLocomotorAppearanceNames) == LOCOMOTOR_APPEARANCE_COUNT + 1, "Array size"); #endif //------------------------------------------------------------------------------------------------- @@ -98,11 +103,13 @@ enum LocomotorBehaviorZ CPP_11(: Int) Z_FIXED_SURFACE_RELATIVE_HEIGHT, // stays fixed at surface-rel height, regardless of physics Z_FIXED_ABSOLUTE_HEIGHT, // stays fixed at absolute height, regardless of physics Z_RELATIVE_TO_GROUND_AND_BUILDINGS, // stays fixed at surface-rel height including buildings, regardless of physics - Z_SMOOTH_RELATIVE_TO_HIGHEST_LAYER // try to follow a height relative to the highest layer. + Z_SMOOTH_RELATIVE_TO_HIGHEST_LAYER, // try to follow a height relative to the highest layer. + + LOCOMOTOR_BEHAVIOR_Z_COUNT }; #ifdef DEFINE_LOCO_Z_NAMES -static const char *TheLocomotorBehaviorZNames[] = +static const char *const TheLocomotorBehaviorZNames[] = { "NO_Z_MOTIVE_FORCE", "SEA_LEVEL", @@ -115,6 +122,7 @@ static const char *TheLocomotorBehaviorZNames[] = NULL }; +static_assert(ARRAY_SIZE(TheLocomotorBehaviorZNames) == LOCOMOTOR_BEHAVIOR_Z_COUNT + 1, "Array size"); #endif //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/LocomotorSet.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/LocomotorSet.h index 4c4a21b588..bbf84cc4ca 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/LocomotorSet.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/LocomotorSet.h @@ -61,7 +61,7 @@ const LocomotorSurfaceTypeMask NO_SURFACES = (LocomotorSurfaceTypeMask)0x0000; const LocomotorSurfaceTypeMask ALL_SURFACES = (LocomotorSurfaceTypeMask)0xffff; #ifdef DEFINE_SURFACECATEGORY_NAMES -static const char *TheLocomotorSurfaceTypeNames[] = +static const char *const TheLocomotorSurfaceTypeNames[] = { "GROUND", "WATER", diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/AIUpdate.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/AIUpdate.h index cf8b812e5e..1c04e27d68 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/AIUpdate.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/AIUpdate.h @@ -97,7 +97,7 @@ enum GuardTargetType CPP_11(: Int) }; #ifdef DEFINE_LOCOMOTORSET_NAMES -static const char *TheLocomotorSetNames[] = +static const char *const TheLocomotorSetNames[] = { "SET_NORMAL", "SET_NORMAL_UPGRADED", @@ -110,6 +110,7 @@ static const char *TheLocomotorSetNames[] = NULL }; +static_assert(ARRAY_SIZE(TheLocomotorSetNames) == LOCOMOTORSET_COUNT + 1, "Incorrect array size"); #endif enum AutoAcquireStates CPP_11(: Int) @@ -122,7 +123,7 @@ enum AutoAcquireStates CPP_11(: Int) }; #ifdef DEFINE_AUTOACQUIRE_NAMES -static const char *TheAutoAcquireEnemiesNames[] = +static const char *const TheAutoAcquireEnemiesNames[] = { "YES", "STEALTHED", diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/BodyModule.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/BodyModule.h index d6b80eff8a..3750d63889 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/BodyModule.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/BodyModule.h @@ -61,7 +61,7 @@ enum BodyDamageType CPP_11(: Int) }; #ifdef DEFINE_BODYDAMAGETYPE_NAMES -static const char* TheBodyDamageTypeNames[] = +static const char* const TheBodyDamageTypeNames[] = { "PRISTINE", "DAMAGED", @@ -70,6 +70,7 @@ static const char* TheBodyDamageTypeNames[] = NULL }; +static_assert(ARRAY_SIZE(TheBodyDamageTypeNames) == BODYDAMAGETYPE_COUNT + 1, "Incorrect array size"); #endif enum MaxHealthChangeType CPP_11(: Int) @@ -78,10 +79,12 @@ enum MaxHealthChangeType CPP_11(: Int) PRESERVE_RATIO, ADD_CURRENT_HEALTH_TOO, FULLY_HEAL, + + MAX_HEALTH_CHANGE_COUNT }; #ifdef DEFINE_MAXHEALTHCHANGETYPE_NAMES -static const char* TheMaxHealthChangeTypeNames[] = +static const char* const TheMaxHealthChangeTypeNames[] = { "SAME_CURRENTHEALTH", "PRESERVE_RATIO", @@ -89,6 +92,7 @@ static const char* TheMaxHealthChangeTypeNames[] = "FULLY_HEAL", NULL }; +static_assert(ARRAY_SIZE(TheMaxHealthChangeTypeNames) == MAX_HEALTH_CHANGE_COUNT + 1, "Incorrect array size"); #endif diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/DozerAIUpdate.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/DozerAIUpdate.h index f7fd288321..1ae1566a26 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/DozerAIUpdate.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/DozerAIUpdate.h @@ -71,12 +71,13 @@ class DozerPrimaryStateMachine : public StateMachine enum DozerTask CPP_11(: Int) // These enums are saved in the game save file, so DO NOT renumber them. jba. { DOZER_TASK_INVALID = -1, - DOZER_TASK_FIRST = 0, - DOZER_TASK_BUILD = DOZER_TASK_FIRST, ///< go build something - DOZER_TASK_REPAIR = 1, ///< go repair something - DOZER_TASK_FORTIFY = 2, ///< go fortify something - DOZER_NUM_TASKS + DOZER_TASK_BUILD, ///< go build something + DOZER_TASK_REPAIR, ///< go repair something + DOZER_TASK_FORTIFY, ///< go fortify something + + DOZER_NUM_TASKS, // keep this last + DOZER_TASK_FIRST = 0, }; // ------------------------------------------------------------------------------------------------ diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/HordeUpdate.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/HordeUpdate.h index ccf98e68f1..5ac02b4752 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/HordeUpdate.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/HordeUpdate.h @@ -52,11 +52,12 @@ enum HordeActionType CPP_11(: Int) }; #ifdef DEFINE_HORDEACTION_NAMES -static const char *TheHordeActionTypeNames[] = +static const char *const TheHordeActionTypeNames[] = { "HORDE", NULL }; +static_assert(ARRAY_SIZE(TheHordeActionTypeNames) == HORDEACTION_COUNT + 1, "Incorrect array size"); #endif //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/OCLSpecialPower.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/OCLSpecialPower.h index 8ac9672ee5..710d54d192 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/OCLSpecialPower.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/OCLSpecialPower.h @@ -47,6 +47,8 @@ enum OCLCreateLocType CPP_11(: Int) USE_OWNER_OBJECT, CREATE_ABOVE_LOCATION, CREATE_AT_EDGE_FARTHEST_FROM_TARGET, + + OCL_CREATE_LOC_COUNT }; //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SlowDeathBehavior.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SlowDeathBehavior.h index 4ea2843660..12f7952dce 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SlowDeathBehavior.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SlowDeathBehavior.h @@ -58,7 +58,7 @@ enum SlowDeathPhaseType CPP_11(: Int) }; #ifdef DEFINE_SLOWDEATHPHASE_NAMES -static const char *TheSlowDeathPhaseNames[] = +static const char *const TheSlowDeathPhaseNames[] = { "INITIAL", "MIDPOINT", @@ -66,6 +66,7 @@ static const char *TheSlowDeathPhaseNames[] = NULL }; +static_assert(ARRAY_SIZE(TheSlowDeathPhaseNames) == SD_PHASE_COUNT + 1, "Incorrect array size"); #endif diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SpectreGunshipDeploymentUpdate.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SpectreGunshipDeploymentUpdate.h index 5b377cfead..c192cef5ef 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SpectreGunshipDeploymentUpdate.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/SpectreGunshipDeploymentUpdate.h @@ -55,6 +55,8 @@ enum GunshipCreateLocType CPP_11(: Int) CREATE_GUNSHIP_AT_EDGE_FARTHEST_FROM_SOURCE, CREATE_GUNSHIP_AT_EDGE_NEAR_TARGET, CREATE_GUNSHIP_AT_EDGE_FARTHEST_FROM_TARGET, + + GUNSHIP_CREATE_LOC_COUNT }; diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/StealthUpdate.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/StealthUpdate.h index d35b94b58e..dff2b95de6 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/StealthUpdate.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/StealthUpdate.h @@ -51,12 +51,13 @@ enum STEALTH_NOT_WHILE_FIRING_TERTIARY = 0x00000020, STEALTH_ONLY_WITH_BLACK_MARKET = 0x00000040, STEALTH_NOT_WHILE_TAKING_DAMAGE = 0x00000080, - STEALTH_NOT_WHILE_FIRING_WEAPON = (STEALTH_NOT_WHILE_FIRING_PRIMARY | STEALTH_NOT_WHILE_FIRING_SECONDARY | STEALTH_NOT_WHILE_FIRING_TERTIARY), STEALTH_NOT_WHILE_RIDERS_ATTACKING = 0x00000100, + + STEALTH_NOT_WHILE_FIRING_WEAPON = (STEALTH_NOT_WHILE_FIRING_PRIMARY | STEALTH_NOT_WHILE_FIRING_SECONDARY | STEALTH_NOT_WHILE_FIRING_TERTIARY), }; #ifdef DEFINE_STEALTHLEVEL_NAMES -static const char *TheStealthLevelNames[] = +static const char *const TheStealthLevelNames[] = { "ATTACKING", "MOVING", diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/StructureToppleUpdate.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/StructureToppleUpdate.h index 1155b5f2d4..000a93eec3 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/StructureToppleUpdate.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Module/StructureToppleUpdate.h @@ -73,7 +73,7 @@ enum StructureTopplePhaseType CPP_11(: Int) ST_PHASE_COUNT }; -static const char *TheStructureTopplePhaseNames[] = +static const char *const TheStructureTopplePhaseNames[] = { "INITIAL", "DELAY", @@ -81,6 +81,7 @@ static const char *TheStructureTopplePhaseNames[] = NULL }; +static_assert(ARRAY_SIZE(TheStructureTopplePhaseNames) == ST_PHASE_COUNT + 1, "Incorrect array size"); //------------------------------------------------------------------------------------------------- class StructureToppleUpdateModuleData : public UpdateModuleData diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Powers.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Powers.h index 1b9e4eb143..9b0d00b64d 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Powers.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Powers.h @@ -48,7 +48,7 @@ enum }; #ifdef DEFINE_POWER_NAMES -static const char *PowerNames[] = +static const char *const PowerNames[] = { "NONE", "FASTER", @@ -56,6 +56,7 @@ static const char *PowerNames[] = "SELF_HEALING", NULL }; +static_assert(ARRAY_SIZE(PowerNames) == POWERS_NUM_POWERS + 1, "Incorrect array size"); #endif // end DEFINE_POWER_NAMES #endif // __POWERS_H_ diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Scripts.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Scripts.h index 8c569e7f08..6800bbf5f3 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Scripts.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Scripts.h @@ -842,7 +842,7 @@ class Parameter : public MemoryPoolObject }; EMPTY_DTOR(Parameter) -extern const char* TheObjectFlagsNames[]; +extern const char* const TheObjectFlagsNames[]; //------------------------------------------------------------------------------------------------- // ******************************** class Condition *********************************************** diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/Weapon.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/Weapon.h index 88b19bfc93..3435cb95e1 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/Weapon.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/Weapon.h @@ -60,17 +60,20 @@ enum WeaponReloadType CPP_11(: Int) { AUTO_RELOAD, NO_RELOAD, - RETURN_TO_BASE_TO_RELOAD + RETURN_TO_BASE_TO_RELOAD, + + WEAPON_RELOAD_COUNT }; #ifdef DEFINE_WEAPONRELOAD_NAMES -static const char *TheWeaponReloadNames[] = +static const char *const TheWeaponReloadNames[] = { "YES", "NO", "RETURN_TO_BASE", NULL }; +static_assert(ARRAY_SIZE(TheWeaponReloadNames) == WEAPON_RELOAD_COUNT + 1, "Incorrect array size"); #endif //------------------------------------------------------------------------------------------------- @@ -84,13 +87,14 @@ enum WeaponPrefireType CPP_11(: Int) }; #ifdef DEFINE_WEAPONPREFIRE_NAMES -static const char *TheWeaponPrefireNames[] = +static const char *const TheWeaponPrefireNames[] = { "PER_SHOT", "PER_ATTACK", "PER_CLIP", NULL }; +static_assert(ARRAY_SIZE(TheWeaponPrefireNames) == PREFIRE_COUNT + 1, "Incorrect array size"); #endif //------------------------------------------------------------------------------------------------- @@ -119,7 +123,7 @@ enum WeaponAffectsMaskType CPP_11(: Int) }; //#ifdef DEFINE_WEAPONAFFECTSMASK_NAMES ; Removed protection so other clases can use these strings... not sure why this was protected in the 1st place -static const char *TheWeaponAffectsMaskNames[] = +static const char *const TheWeaponAffectsMaskNames[] = { "SELF", "ALLIES", @@ -149,7 +153,7 @@ enum WeaponCollideMaskType CPP_11(: Int) }; #ifdef DEFINE_WEAPONCOLLIDEMASK_NAMES -static const char *TheWeaponCollideMaskNames[] = +static const char *const TheWeaponCollideMaskNames[] = { "ALLIES", "ENEMIES", @@ -209,7 +213,7 @@ enum WeaponBonusConditionType CPP_11(: Int) WEAPONBONUSCONDITION_COUNT }; #ifdef DEFINE_WEAPONBONUSCONDITION_NAMES -static const char *TheWeaponBonusNames[] = +static const char *const TheWeaponBonusNames[] = { // This is a RHS enum (weapon.ini will have WeaponBonus = IT) so it is all caps "GARRISONED", @@ -246,6 +250,7 @@ static const char *TheWeaponBonusNames[] = NULL }; +static_assert(ARRAY_SIZE(TheWeaponBonusNames) == WEAPONBONUSCONDITION_COUNT + 1, "Incorrect array size"); #endif // For WeaponBonusConditionFlags @@ -291,7 +296,7 @@ class WeaponBonus }; #ifdef DEFINE_WEAPONBONUSFIELD_NAMES -static const char *TheWeaponBonusFieldNames[] = +static const char *const TheWeaponBonusFieldNames[] = { "DAMAGE", "RADIUS", @@ -300,6 +305,7 @@ static const char *TheWeaponBonusFieldNames[] = "PRE_ATTACK", NULL }; +static_assert(ARRAY_SIZE(TheWeaponBonusFieldNames) == WeaponBonus::FIELD_COUNT + 1, "Incorrect array size"); #endif diff --git a/GeneralsMD/Code/GameEngine/Include/GameLogic/WeaponSet.h b/GeneralsMD/Code/GameEngine/Include/GameLogic/WeaponSet.h index eec67045ce..352fd20544 100644 --- a/GeneralsMD/Code/GameEngine/Include/GameLogic/WeaponSet.h +++ b/GeneralsMD/Code/GameEngine/Include/GameLogic/WeaponSet.h @@ -54,7 +54,7 @@ enum DamageType CPP_11(: Int); #include "GameLogic/WeaponSetFlags.h" #ifdef DEFINE_WEAPONSLOTTYPE_NAMES -static const char *TheWeaponSlotTypeNames[] = +static const char *const TheWeaponSlotTypeNames[] = { "PRIMARY", "SECONDARY", @@ -62,6 +62,7 @@ static const char *TheWeaponSlotTypeNames[] = NULL }; +static_assert(ARRAY_SIZE(TheWeaponSlotTypeNames) == WEAPONSLOT_COUNT + 1, "Incorrect array size"); static const LookupListRec TheWeaponSlotTypeNamesLookupList[] = { @@ -71,6 +72,7 @@ static const LookupListRec TheWeaponSlotTypeNamesLookupList[] = { NULL, 0 } }; +static_assert(ARRAY_SIZE(TheWeaponSlotTypeNamesLookupList) == WEAPONSLOT_COUNT + 1, "Incorrect array size"); #endif diff --git a/GeneralsMD/Code/GameEngine/Source/Common/BitFlags.cpp b/GeneralsMD/Code/GameEngine/Source/Common/BitFlags.cpp index b5ec7c8f46..8fb0da908e 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/BitFlags.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/BitFlags.cpp @@ -38,7 +38,7 @@ #include "GameLogic/ArmorSet.h" template<> -const char* ModelConditionFlags::s_bitNameList[] = +const char* const ModelConditionFlags::s_bitNameList[] = { "TOPPLED", "FRONTCRUSHED", @@ -174,9 +174,10 @@ const char* ModelConditionFlags::s_bitNameList[] = NULL }; +static_assert(ARRAY_SIZE(ModelConditionFlags::s_bitNameList) == ModelConditionFlags::NumBits + 1, "Incorrect array size"); template<> -const char* ArmorSetFlags::s_bitNameList[] = +const char* const ArmorSetFlags::s_bitNameList[] = { "VETERAN", "ELITE", @@ -189,4 +190,4 @@ const char* ArmorSetFlags::s_bitNameList[] = NULL }; - +static_assert(ARRAY_SIZE(ArmorSetFlags::s_bitNameList) == ArmorSetFlags::NumBits + 1, "Incorrect array size"); diff --git a/GeneralsMD/Code/GameEngine/Source/Common/GameLOD.cpp b/GeneralsMD/Code/GameEngine/Source/Common/GameLOD.cpp index 8805ce5e4b..2ea3cb362a 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/GameLOD.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/GameLOD.cpp @@ -72,13 +72,14 @@ static const FieldParse TheStaticGameLODFieldParseTable[] = { "TextureReductionFactor", INI::parseInt, NULL, offsetof( StaticGameLODInfo, m_textureReduction ) }, }; -static const char *StaticGameLODNames[]= +static const char *const StaticGameLODNames[]= { "Low", "Medium", "High", "Custom" }; +static_assert(ARRAY_SIZE(StaticGameLODNames) == STATIC_GAME_LOD_COUNT, "Incorrect array size"); StaticGameLODInfo::StaticGameLODInfo(void) { @@ -117,13 +118,14 @@ static const FieldParse TheDynamicGameLODFieldParseTable[] = { "MinParticleSkipPriority", INI::parseIndexList, ParticlePriorityNames, offsetof( DynamicGameLODInfo, m_minDynamicParticleSkipPriority)}, }; -static const char *DynamicGameLODNames[]= +static const char *const DynamicGameLODNames[]= { "Low", "Medium", "High", "VeryHigh" }; +static_assert(ARRAY_SIZE(DynamicGameLODNames) == DYNAMIC_GAME_LOD_COUNT, "Incorrect array size"); DynamicGameLODInfo::DynamicGameLODInfo(void) { @@ -136,16 +138,18 @@ DynamicGameLODInfo::DynamicGameLODInfo(void) }; //Keep this in sync with enum in GameLOD.h -static const char *CPUNames[] = +static const char *const CPUNames[] = { "XX","P3", "P4","K7", NULL }; +static_assert(ARRAY_SIZE(CPUNames) == CPU_MAX + 1, "Incorrect array size"); //Keep this in sync with enum in GameLOD.h -static const char *VideoNames[] = +static const char *const VideoNames[] = { "XX","V2","V3","V4","V5","TNT","TNT2","GF2","R100","PS11","GF3","GF4","PS14","R200","PS20","R300", NULL }; +static_assert(ARRAY_SIZE(VideoNames) == DC_MAX + 1, "Incorrect array size"); void parseReallyLowMHz(INI* ini) { diff --git a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIWater.cpp b/GeneralsMD/Code/GameEngine/Source/Common/INI/INIWater.cpp index ba248f8d58..de0320d854 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/INI/INIWater.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/INI/INIWater.cpp @@ -57,7 +57,7 @@ void INI::parseWaterSettingDefinition( INI* ini ) name.set( token ); // get the water setting we want to load based on name - const char **timeOfDayName = TimeOfDayNames; + const char *const *timeOfDayName = TimeOfDayNames; Int timeOfDayIndex = 0; // TIME_OF_DAY_INVALID while( timeOfDayName && *timeOfDayName ) { diff --git a/GeneralsMD/Code/GameEngine/Source/Common/RTS/AcademyStats.cpp b/GeneralsMD/Code/GameEngine/Source/Common/RTS/AcademyStats.cpp index 87f9ec9824..094e3b800d 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/RTS/AcademyStats.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/RTS/AcademyStats.cpp @@ -63,13 +63,14 @@ #include "GameLogic/Module/ContainModule.h" -const char *TheAcademyClassificationTypeNames[] = +const char *const TheAcademyClassificationTypeNames[] = { "ACT_NONE", "ACT_UPGRADE_RADAR", "ACT_SUPERPOWER", NULL }; +static_assert(ARRAY_SIZE(TheAcademyClassificationTypeNames) == ACT_COUNT + 1, "Incorrect array size"); #define FRAMES_BETWEEN_UPDATES 30 diff --git a/GeneralsMD/Code/GameEngine/Source/Common/RTS/Player.cpp b/GeneralsMD/Code/GameEngine/Source/Common/RTS/Player.cpp index d6c845ffad..03f7c01735 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/RTS/Player.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/RTS/Player.cpp @@ -160,7 +160,7 @@ static void findClosestKindOf( Object *obj, void *userData ) AsciiString kindofMaskAsAsciiString(KindOfMaskType m) { AsciiString s; - const char** kindofNames = KindOfMaskType::getBitNames(); + const char* const* kindofNames = KindOfMaskType::getBitNames(); for (Int i=KINDOF_FIRST; i -const char* SpecialPowerMaskType::s_bitNameList[] = +const char* const SpecialPowerMaskType::s_bitNameList[] = { "SPECIAL_INVALID", @@ -131,6 +131,7 @@ const char* SpecialPowerMaskType::s_bitNameList[] = NULL }; +static_assert(ARRAY_SIZE(SpecialPowerMaskType::s_bitNameList) == SpecialPowerMaskType::NumBits + 1, "Incorrect array size"); //------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Source/Common/System/DisabledTypes.cpp b/GeneralsMD/Code/GameEngine/Source/Common/System/DisabledTypes.cpp index 56af9b84de..643d3c0611 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/System/DisabledTypes.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/System/DisabledTypes.cpp @@ -31,7 +31,7 @@ #include "Common/BitFlagsIO.h" template<> -const char* DisabledMaskType::s_bitNameList[] = +const char* const DisabledMaskType::s_bitNameList[] = { "DEFAULT", "DISABLED_HACKED", @@ -51,6 +51,7 @@ const char* DisabledMaskType::s_bitNameList[] = NULL }; +static_assert(ARRAY_SIZE(DisabledMaskType::s_bitNameList) == DisabledMaskType::NumBits + 1, "Incorrect array size"); DisabledMaskType DISABLEDMASK_NONE; // inits to all zeroes DisabledMaskType DISABLEDMASK_ALL; diff --git a/GeneralsMD/Code/GameEngine/Source/Common/System/GameCommon.cpp b/GeneralsMD/Code/GameEngine/Source/Common/System/GameCommon.cpp index db9914e003..ad4ec11bc7 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/System/GameCommon.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/System/GameCommon.cpp @@ -30,7 +30,7 @@ #include "Common/GameCommon.h" -const char *TheVeterancyNames[] = +const char *const TheVeterancyNames[] = { "REGULAR", "VETERAN", @@ -38,14 +38,16 @@ const char *TheVeterancyNames[] = "HEROIC", NULL }; +static_assert(ARRAY_SIZE(TheVeterancyNames) == LEVEL_COUNT + 1, "Incorrect array size"); -const char *TheRelationshipNames[] = +const char *const TheRelationshipNames[] = { "ENEMIES", "NEUTRAL", "ALLIES", NULL }; +static_assert(ARRAY_SIZE(TheRelationshipNames) == RELATIONSHIP_COUNT + 1, "Incorrect array size"); //------------------------------------------------------------------------------------------------- // TheSuperHackers @todo DO NOT USE THIS FUNCTION! Use WWMath::Normalize_Angle instead. Delete this. diff --git a/GeneralsMD/Code/GameEngine/Source/Common/System/GameType.cpp b/GeneralsMD/Code/GameEngine/Source/Common/System/GameType.cpp index 3461b93a7a..7c8e7fc8ca 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/System/GameType.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/System/GameType.cpp @@ -26,7 +26,7 @@ #include "PreRTS.h" // This must go first in EVERY cpp file int the GameEngine -const char *TimeOfDayNames[] = +const char *const TimeOfDayNames[] = { "NONE", "MORNING", @@ -36,11 +36,13 @@ const char *TimeOfDayNames[] = NULL }; +static_assert(ARRAY_SIZE(TimeOfDayNames) == TIME_OF_DAY_COUNT + 1, "Incorrect array size"); -const char *WeatherNames[] = +const char *const WeatherNames[] = { "NORMAL", "SNOWY", NULL }; +static_assert(ARRAY_SIZE(WeatherNames) == WEATHER_COUNT + 1, "Incorrect array size"); diff --git a/GeneralsMD/Code/GameEngine/Source/Common/System/KindOf.cpp b/GeneralsMD/Code/GameEngine/Source/Common/System/KindOf.cpp index 15b6acaef0..7e703a508a 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/System/KindOf.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/System/KindOf.cpp @@ -32,7 +32,7 @@ #include "Common/BitFlagsIO.h" template<> -const char* KindOfMaskType::s_bitNameList[] = +const char* const KindOfMaskType::s_bitNameList[] = { "OBSTACLE", "SELECTABLE", @@ -161,6 +161,7 @@ const char* KindOfMaskType::s_bitNameList[] = NULL }; +static_assert(ARRAY_SIZE(KindOfMaskType::s_bitNameList) == KindOfMaskType::NumBits + 1, "Incorrect array size"); KindOfMaskType KINDOFMASK_NONE; // inits to all zeroes KindOfMaskType KINDOFMASK_FS; // inits to all zeroes diff --git a/GeneralsMD/Code/GameEngine/Source/Common/System/ObjectStatusTypes.cpp b/GeneralsMD/Code/GameEngine/Source/Common/System/ObjectStatusTypes.cpp index 4e5f9442f3..8b07bbc5a9 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/System/ObjectStatusTypes.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/System/ObjectStatusTypes.cpp @@ -33,7 +33,7 @@ #include "Common/BitFlagsIO.h" template<> -const char* ObjectStatusMaskType::s_bitNameList[] = +const char* const ObjectStatusMaskType::s_bitNameList[] = { "NONE", "DESTROYED", @@ -82,5 +82,6 @@ const char* ObjectStatusMaskType::s_bitNameList[] = "DEPLOYED", NULL }; +static_assert(ARRAY_SIZE(ObjectStatusMaskType::s_bitNameList) == ObjectStatusMaskType::NumBits + 1, "Incorrect array size"); ObjectStatusMaskType OBJECT_STATUS_MASK_NONE; // inits to all zeroes diff --git a/GeneralsMD/Code/GameEngine/Source/Common/System/Upgrade.cpp b/GeneralsMD/Code/GameEngine/Source/Common/System/Upgrade.cpp index a77f3cc44b..17515a59d7 100644 --- a/GeneralsMD/Code/GameEngine/Source/Common/System/Upgrade.cpp +++ b/GeneralsMD/Code/GameEngine/Source/Common/System/Upgrade.cpp @@ -38,12 +38,13 @@ #include "GameClient/Image.h" -const char *TheUpgradeTypeNames[] = +const char *const TheUpgradeTypeNames[] = { "PLAYER", "OBJECT", NULL }; +static_assert(ARRAY_SIZE(TheUpgradeTypeNames) == NUM_UPGRADE_TYPES + 1, "Incorrect array size"); // PUBLIC ///////////////////////////////////////////////////////////////////////////////////////// class UpgradeCenter *TheUpgradeCenter = NULL; diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp index 0c6b39fc25..46d261a6c0 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/Drawable.cpp @@ -89,7 +89,7 @@ #define VERY_TRANSPARENT_MATERIAL_PASS_OPACITY (0.001f) #define MATERIAL_PASS_OPACITY_FADE_SCALAR (0.8f) -static const char *TheDrawableIconNames[] = +static const char *const TheDrawableIconNames[] = { "DefaultHeal", "StructureHeal", @@ -111,6 +111,7 @@ static const char *TheDrawableIconNames[] = "CarBomb", NULL }; +static_assert(ARRAY_SIZE(TheDrawableIconNames) == MAX_ICONS + 1, "Incorrect array size"); /** diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/Eva.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/Eva.cpp index 5bfcb5bed6..8f63959d3c 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/Eva.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/Eva.cpp @@ -34,7 +34,7 @@ //------------------------------------------------------------------------------------------------- -const char *TheEvaMessageNames[] = +static const char *const TheEvaMessageNames[] = { "LOWPOWER", "INSUFFICIENTFUNDS", @@ -93,9 +93,8 @@ const char *TheEvaMessageNames[] = //**************************************************************************** //Kris: Don't forget to add another handler below -- it's ghey-ly implemented. //**************************************************************************** - - "EVA_INVALID", }; +static_assert(ARRAY_SIZE(TheEvaMessageNames) == EVA_COUNT, "Incorrect array size"); //------------------------------------------------------------------------------------------------- const ShouldPlayFunc Eva::s_shouldPlayFuncs[] = @@ -153,7 +152,6 @@ const ShouldPlayFunc Eva::s_shouldPlayFuncs[] = Eva::shouldPlayGenericHandler, Eva::shouldPlayGenericHandler, Eva::shouldPlayGenericHandler, - NULL, }; @@ -316,10 +314,6 @@ void Eva::update() //------------------------------------------------------------------------------------------------- EvaMessage Eva::nameToMessage(const AsciiString& name) { - DEBUG_ASSERTCRASH( ARRAY_SIZE( TheEvaMessageNames ) == EVA_COUNT + 1, ("TheEvaMessageNames out of sync" ) ); - DEBUG_ASSERTCRASH( stricmp( TheEvaMessageNames[ EVA_COUNT ], "EVA_INVALID" ) == 0, ("TheEvaMessageNames out of sync" ) ); - DEBUG_ASSERTCRASH( stricmp( TheEvaMessageNames[ EVA_COUNT - 1], "EVA_INVALID" ) != 0, ("TheEvaMessageNames out of sync" ) ); - for (Int i = EVA_FIRST; i < EVA_COUNT; ++i) { if (name.compareNoCase(TheEvaMessageNames[i]) == 0) { return (EvaMessage) i; @@ -333,10 +327,6 @@ EvaMessage Eva::nameToMessage(const AsciiString& name) //------------------------------------------------------------------------------------------------- AsciiString Eva::messageToName(EvaMessage message) { - DEBUG_ASSERTCRASH( ARRAY_SIZE( TheEvaMessageNames ) == EVA_COUNT + 1, ("TheEvaMessageNames out of sync" ) ); - DEBUG_ASSERTCRASH( stricmp( TheEvaMessageNames[ EVA_COUNT ], "EVA_INVALID" ) == 0, ("TheEvaMessageNames out of sync" ) ); - DEBUG_ASSERTCRASH( stricmp( TheEvaMessageNames[ EVA_COUNT - 1], "EVA_INVALID" ) != 0, ("TheEvaMessageNames out of sync" ) ); - if (message >= EVA_FIRST && message < EVA_COUNT) return TheEvaMessageNames[message]; @@ -415,9 +405,7 @@ Bool Eva::messageShouldPlay(EvaMessage messageToTest, UnsignedInt currentFrame) return FALSE; } - DEBUG_ASSERTCRASH( ARRAY_SIZE( s_shouldPlayFuncs ) == EVA_COUNT + 1, ("Eva::s_shouldPlayFuncs out of sync" ) ); - DEBUG_ASSERTCRASH( s_shouldPlayFuncs[ EVA_COUNT ] == NULL, ("Eva::s_shouldPlayFuncs out of sync" ) ); - DEBUG_ASSERTCRASH( s_shouldPlayFuncs[ EVA_COUNT - 1] != NULL, ("Eva::s_shouldPlayFuncs out of sync" ) ); + static_assert(ARRAY_SIZE(s_shouldPlayFuncs) == EVA_COUNT, "Incorrect array size"); m_messageBeingTested = messageToTest; return s_shouldPlayFuncs[messageToTest](m_localPlayer); diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/FXList.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/FXList.cpp index f208071207..125b16c72f 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/FXList.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/FXList.cpp @@ -423,6 +423,8 @@ class ViewShakeFXNugget : public FXNugget { "CINE_INSANE", View::SHAKE_CINE_INSANE }, { 0, 0 } }; + static_assert(ARRAY_SIZE(shakeTypeNames) == View::SHAKE_COUNT + 1, "Incorrect array size"); + *(Int *)store = INI::scanLookupList(ini->getNextToken(), shakeTypeNames); } @@ -487,6 +489,8 @@ class TerrainScorchFXNugget : public FXNugget { "RANDOM", -1 }, { 0, 0 } }; + static_assert(ARRAY_SIZE(scorchTypeNames) == SCORCH_COUNT + 2, "Incorrect array size"); + *(Int *)store = INI::scanLookupList(ini->getNextToken(), scorchTypeNames); } diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarScheme.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarScheme.cpp index 36d0d69e0c..1e269d1802 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarScheme.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/ControlBar/ControlBarScheme.cpp @@ -166,6 +166,7 @@ static const LookupListRec AnimTypeNames[] = { "SLIDE_RIGHT", ControlBarSchemeAnimation::CB_ANIM_SLIDE_RIGHT }, { NULL, 0 } }; +static_assert(ARRAY_SIZE(AnimTypeNames) == ControlBarSchemeAnimation::CB_ANIM_MAX + 1, "Incorrect array size"); static void animSlideRight( ControlBarSchemeAnimation *anim ); diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/DisconnectMenu/DisconnectMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/DisconnectMenu/DisconnectMenu.cpp index b56969b3d3..a3c1cad0ce 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/DisconnectMenu/DisconnectMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/DisconnectMenu/DisconnectMenu.cpp @@ -34,7 +34,7 @@ #include "GameClient/GameText.h" #include "GameNetwork/NetworkInterface.h" -const char *DisconnectMenu::m_playerNameTextControlNames[] = { +const char *const DisconnectMenu::m_playerNameTextControlNames[] = { "DisconnectScreen.wnd:StaticPlayer1Name", "DisconnectScreen.wnd:StaticPlayer2Name", "DisconnectScreen.wnd:StaticPlayer3Name", @@ -45,7 +45,7 @@ const char *DisconnectMenu::m_playerNameTextControlNames[] = { NULL }; -const char *DisconnectMenu::m_playerTimeoutTextControlNames[] = { +const char *const DisconnectMenu::m_playerTimeoutTextControlNames[] = { "DisconnectScreen.wnd:StaticPlayer1Timeout", "DisconnectScreen.wnd:StaticPlayer2Timeout", "DisconnectScreen.wnd:StaticPlayer3Timeout", @@ -56,7 +56,7 @@ const char *DisconnectMenu::m_playerTimeoutTextControlNames[] = { NULL }; -const char *DisconnectMenu::m_playerVoteButtonControlNames[] = { +const char *const DisconnectMenu::m_playerVoteButtonControlNames[] = { "DisconnectScreen.wnd:ButtonKickPlayer1", "DisconnectScreen.wnd:ButtonKickPlayer2", "DisconnectScreen.wnd:ButtonKickPlayer3", @@ -67,7 +67,7 @@ const char *DisconnectMenu::m_playerVoteButtonControlNames[] = { NULL }; -const char *DisconnectMenu::m_playerVoteCountControlNames[] = { +const char *const DisconnectMenu::m_playerVoteCountControlNames[] = { "DisconnectScreen.wnd:StaticPlayer1Votes", "DisconnectScreen.wnd:StaticPlayer2Votes", "DisconnectScreen.wnd:StaticPlayer3Votes", @@ -78,9 +78,9 @@ const char *DisconnectMenu::m_playerVoteCountControlNames[] = { NULL }; -const char *DisconnectMenu::m_packetRouterTimeoutControlName = "DisconnectScreen.wnd:StaticPacketRouterTimeout"; -const char *DisconnectMenu::m_packetRouterTimeoutLabelControlName = "DisconnectScreen.wnd:StaticPacketRouterTimeoutLabel"; -const char *DisconnectMenu::m_textDisplayControlName = "DisconnectScreen.wnd:ListboxTextDisplay"; +const char *const DisconnectMenu::m_packetRouterTimeoutControlName = "DisconnectScreen.wnd:StaticPacketRouterTimeout"; +const char *const DisconnectMenu::m_packetRouterTimeoutLabelControlName = "DisconnectScreen.wnd:StaticPacketRouterTimeoutLabel"; +const char *const DisconnectMenu::m_textDisplayControlName = "DisconnectScreen.wnd:ListboxTextDisplay"; static const Color chatNormalColor = GameMakeColor(255,0,0,255); diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/EstablishConnectionsMenu/EstablishConnectionsMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/EstablishConnectionsMenu/EstablishConnectionsMenu.cpp index cd22e2b556..a7fbcf6080 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/EstablishConnectionsMenu/EstablishConnectionsMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/EstablishConnectionsMenu/EstablishConnectionsMenu.cpp @@ -36,7 +36,7 @@ EstablishConnectionsMenu *TheEstablishConnectionsMenu = NULL; -const char *EstablishConnectionsMenu::m_playerReadyControlNames[] = { +const char *const EstablishConnectionsMenu::m_playerReadyControlNames[] = { "EstablishConnectionsScreen.wnd:ButtonAccept1", "EstablishConnectionsScreen.wnd:ButtonAccept2", "EstablishConnectionsScreen.wnd:ButtonAccept3", @@ -46,7 +46,7 @@ const char *EstablishConnectionsMenu::m_playerReadyControlNames[] = { "EstablishConnectionsScreen.wnd:ButtonAccept7", NULL}; -const char *EstablishConnectionsMenu::m_playerNameControlNames[] = { +const char *const EstablishConnectionsMenu::m_playerNameControlNames[] = { "EstablishConnectionsScreen.wnd:StaticPlayer1Name", "EstablishConnectionsScreen.wnd:StaticPlayer2Name", "EstablishConnectionsScreen.wnd:StaticPlayer3Name", @@ -57,7 +57,7 @@ const char *EstablishConnectionsMenu::m_playerNameControlNames[] = { NULL }; -const char *EstablishConnectionsMenu::m_playerStatusControlNames[] = { +const char *const EstablishConnectionsMenu::m_playerStatusControlNames[] = { "EstablishConnectionsScreen.wnd:StaticPlayer1Status", "EstablishConnectionsScreen.wnd:StaticPlayer2Status", "EstablishConnectionsScreen.wnd:StaticPlayer3Status", diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupPlayerInfo.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupPlayerInfo.cpp index a3c3dc9d1e..2576ed9ca6 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupPlayerInfo.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/PopupPlayerInfo.cpp @@ -90,7 +90,7 @@ static Int lookAtPlayerID = 0; static std::string lookAtPlayerName; -static const char *rankNames[] = { +static const char *const rankNames[] = { "Private", "Corporal", "Sergeant", @@ -102,6 +102,7 @@ static const char *rankNames[] = { "Brigadier", "Commander", }; +static_assert(ARRAY_SIZE(rankNames) == MAX_RANKS, "Incorrect array size"); static const Image* lookupRankImage(AsciiString side, Int rank) diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp index 7f4c1d74d2..7553bf5f03 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GUICallbacks/Menus/WOLLobbyMenu.cpp @@ -366,7 +366,7 @@ static void populateGroupRoomListbox(GameWindow *lb) GadgetComboBoxSetSelectedPos(lb, indexToSelect); } -static const char *rankNames[] = { +static const char *const rankNames[] = { "Private", "Corporal", "Sergeant", @@ -378,6 +378,8 @@ static const char *rankNames[] = { "Brigadier", "Commander", }; +static_assert(ARRAY_SIZE(rankNames) == MAX_RANKS, "Incorrect array size"); + const Image* LookupSmallRankImage(Int side, Int rankPoints) { diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GameWindowManagerScript.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GameWindowManagerScript.cpp index 21c42bd748..51b25e8045 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GameWindowManagerScript.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GUI/GameWindowManagerScript.cpp @@ -137,16 +137,16 @@ static GameFont *defFont = NULL; // These strings must be in the same order as they are in their definitions // (see WIN_STATUS_* enums and GWS_* enums). // -const char *WindowStatusNames[] = { "ACTIVE", "TOGGLE", "DRAGABLE", "ENABLED", "HIDDEN", +const char *const WindowStatusNames[] = { "ACTIVE", "TOGGLE", "DRAGABLE", "ENABLED", "HIDDEN", "ABOVE", "BELOW", "IMAGE", "TABSTOP", "NOINPUT", "NOFOCUS", "DESTROYED", "BORDER", "SMOOTH_TEXT", "ONE_LINE", "NO_FLUSH", "SEE_THRU", "RIGHT_CLICK", "WRAP_CENTERED", "CHECK_LIKE","HOTKEY_TEXT", "USE_OVERLAY_STATES", "NOT_READY", "FLASHING", "ALWAYS_COLOR", - "ON_MOUSE_DOWN", + "ON_MOUSE_DOWN", /*"SHORTCUT_BUTTON",*/ NULL }; -const char *WindowStyleNames[] = { "PUSHBUTTON", "RADIOBUTTON", "CHECKBOX", +const char *const WindowStyleNames[] = { "PUSHBUTTON", "RADIOBUTTON", "CHECKBOX", "VERTSLIDER", "HORZSLIDER", "SCROLLLISTBOX", "ENTRYFIELD", "STATICTEXT", "PROGRESSBAR", "USER", "MOUSETRACK", "ANIMATED", @@ -200,9 +200,9 @@ static GameWindow *parseWindow( File *inFile, char *buffer ); * if successful. Returns TRUE on success, else FALSE. */ //============================================================================= static Bool parseBitFlag( const char *flagString, UnsignedInt *bits, - const char **flagList ) + ConstCharPtrArray flagList ) { - const char **c; + ConstCharPtrArray c; int i; for( i = 0, c = flagList; *c; i++, c++ ) @@ -226,7 +226,7 @@ static Bool parseBitFlag( const char *flagString, UnsignedInt *bits, * argument. * Note that this routine does not clear any bits, only sets them. */ //============================================================================= -static void parseBitString( const char *inBuffer, UnsignedInt *bits, const char **flagList ) +static void parseBitString( const char *inBuffer, UnsignedInt *bits, ConstCharPtrArray flagList ) { char buffer[256]; char *tok; diff --git a/GeneralsMD/Code/GameEngine/Source/GameClient/GameClient.cpp b/GeneralsMD/Code/GameEngine/Source/GameClient/GameClient.cpp index 5ec7b1aaba..b22987b235 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameClient/GameClient.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameClient/GameClient.cpp @@ -1153,7 +1153,7 @@ void GameClient::preloadAssets( TimeOfDay timeOfDay ) DEBUG_LOG(("Preloading memory dwAvailVirtual %d --> %d : %d", before.dwAvailVirtual, after.dwAvailVirtual, before.dwAvailVirtual - after.dwAvailVirtual)); - const char *textureNames[] = { + const char *const textureNames[] = { "ptspruce01.tga", "exrktflame.tga", "cvlimo3_d2.tga", diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Locomotor.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Locomotor.cpp index 4c2ed1b8e3..a1fb21ec30 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Locomotor.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Locomotor.cpp @@ -59,7 +59,7 @@ LocomotorStore *TheLocomotorStore = NULL; ///< the Locomotor store definitio const Real BIGNUM = 99999.0f; -static const char *TheLocomotorPriorityNames[] = +static const char *const TheLocomotorPriorityNames[] = { "MOVES_BACK", "MOVES_MIDDLE", @@ -67,7 +67,7 @@ static const char *TheLocomotorPriorityNames[] = NULL }; - +static_assert(ARRAY_SIZE(TheLocomotorPriorityNames) == LOCOMOTOR_PRIORITY_COUNT + 1, "Array size"); /////////////////////////////////////////////////////////////////////////////////////////////////// // PRIVATE DATA /////////////////////////////////////////////////////////////////////////////////// diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/ObjectCreationList.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/ObjectCreationList.cpp index 2c7dfeab02..703c49b47a 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/ObjectCreationList.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/ObjectCreationList.cpp @@ -702,7 +702,7 @@ enum DebrisDisposition CPP_11(: Int) WHIRLING = 0x00000100 }; -static const char* DebrisDispositionNames[] = +static const char* const DebrisDispositionNames[] = { "LIKE_EXISTING", "ON_GROUND_ALIGNED", diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/SpecialPower/OCLSpecialPower.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/SpecialPower/OCLSpecialPower.cpp index f628c97647..50b4b3bf1b 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/SpecialPower/OCLSpecialPower.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/SpecialPower/OCLSpecialPower.cpp @@ -51,7 +51,7 @@ enum MAX_ADJUST_RADIUS = 500 }; -static const char* TheOCLCreateLocTypeNames[] = +static const char* const TheOCLCreateLocTypeNames[] = { "CREATE_AT_EDGE_NEAR_SOURCE", "CREATE_AT_EDGE_NEAR_TARGET", @@ -61,6 +61,7 @@ static const char* TheOCLCreateLocTypeNames[] = "CREATE_AT_EDGE_FARTHEST_FROM_TARGET", NULL }; +static_assert(ARRAY_SIZE(TheOCLCreateLocTypeNames) == OCL_CREATE_LOC_COUNT + 1, "Incorrect array size"); //------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/SpectreGunshipDeploymentUpdate.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/SpectreGunshipDeploymentUpdate.cpp index 2b52bfe668..7e98567da3 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/SpectreGunshipDeploymentUpdate.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/SpectreGunshipDeploymentUpdate.cpp @@ -77,7 +77,7 @@ SpectreGunshipDeploymentUpdateModuleData::SpectreGunshipDeploymentUpdateModuleDa } -static const char* TheGunshipCreateLocTypeNames[] = +static const char* const TheGunshipCreateLocTypeNames[] = { "CREATE_AT_EDGE_NEAR_SOURCE", "CREATE_AT_EDGE_FARTHEST_FROM_SOURCE", @@ -85,7 +85,7 @@ static const char* TheGunshipCreateLocTypeNames[] = "CREATE_AT_EDGE_FARTHEST_FROM_TARGET", NULL }; - +static_assert(ARRAY_SIZE(TheGunshipCreateLocTypeNames) == GUNSHIP_CREATE_LOC_COUNT + 1, "Wrong array size"); static Real zero = 0.0f; diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/StructureCollapseUpdate.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/StructureCollapseUpdate.cpp index fad84d6aaf..be6b7be447 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/StructureCollapseUpdate.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/Update/StructureCollapseUpdate.cpp @@ -50,7 +50,7 @@ const Int MAX_IDX = 32; //------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------- -static const char *TheStructureCollapsePhaseNames[] = +static const char *const TheStructureCollapsePhaseNames[] = { "INITIAL", "DELAY", @@ -59,6 +59,7 @@ static const char *TheStructureCollapsePhaseNames[] = NULL }; +static_assert(ARRAY_SIZE(TheStructureCollapsePhaseNames) == SC_PHASE_COUNT + 1, "Wrong array size"); //------------------------------------------------------------------------------------------------- //------------------------------------------------------------------------------------------------- diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp index 0e92431fd3..b8391512d3 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/Object/WeaponSet.cpp @@ -59,7 +59,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// template<> -const char* WeaponSetFlags::s_bitNameList[] = +const char* const WeaponSetFlags::s_bitNameList[] = { "VETERAN", "ELITE", @@ -81,6 +81,7 @@ const char* WeaponSetFlags::s_bitNameList[] = NULL }; +static_assert(ARRAY_SIZE(WeaponSetFlags::s_bitNameList) == WeaponSetFlags::NumBits + 1, "Incorrect array size"); /////////////////////////////////////////////////////////////////////////////////////////////////// // PRIVATE DATA /////////////////////////////////////////////////////////////////////////////////// diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/ScriptEngine/Scripts.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/ScriptEngine/Scripts.cpp index 66d9780e82..657cc8cb77 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/ScriptEngine/Scripts.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/ScriptEngine/Scripts.cpp @@ -76,7 +76,7 @@ static ScriptGroup *s_mtGroup = NULL; // These strings must be in the same order as they are in their definitions // (See SHELL_SCRIPT_HOOK_* ) // -const char *TheShellHookNames[]= +static const char *const TheShellHookNames[]= { "ShellMainMenuCampaignPushed", //SHELL_SCRIPT_HOOK_MAIN_MENU_CAMPAIGN_SELECTED, "ShellMainMenuCampaignHighlighted", //SHELL_SCRIPT_HOOK_MAIN_MENU_CAMPAIGN_HIGHLIGHTED, @@ -117,6 +117,8 @@ const char *TheShellHookNames[]= "ShellLANClosed", //SHELL_SCRIPT_HOOK_LAN_CLOSED, "ShellLANEnteredFromGame", //SHELL_SCRIPT_HOOK_LAN_ENTERED_FROM_GAME, }; +static_assert(ARRAY_SIZE(TheShellHookNames) == SHELL_SCRIPT_HOOK_TOTAL, "Incorrect array size"); + void SignalUIInteraction(Int interaction) { if (TheScriptEngine) @@ -2169,7 +2171,7 @@ Parameter *Parameter::ReadParameter(DataChunkInput &file) if (pParm->getParameterType() == KIND_OF_PARAM) { // Need to change the string to an integer - const char** kindofNames = KindOfMaskType::getBitNames(); + const char* const* kindofNames = KindOfMaskType::getBitNames(); if (!pParm->m_string.isEmpty()) { Bool found = false; @@ -2671,10 +2673,10 @@ Bool ScriptAction::ParseActionFalseDataChunk(DataChunkInput &file, DataChunkInfo return true; } -// NOTE: Changing these or adding ot TheOBjectFlagNames requires changes to +// NOTE: Changing these or adding to TheObjectFlagsNames requires changes to // ScriptActions::changeObjectPanelFlagForSingleObject // THEY SHOULD STAY IN SYNC. -const char* TheObjectFlagsNames[] = +const char* const TheObjectFlagsNames[] = { "Enabled", "Powered", @@ -2683,5 +2685,4 @@ const char* TheObjectFlagsNames[] = "Selectable", "AI Recruitable", "Player Targetable", - NULL, }; diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/Damage.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/Damage.cpp index 2ed63aab60..15a07b0c60 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/Damage.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/Damage.cpp @@ -40,7 +40,7 @@ /////////////////////////////////////////////////////////////////////////////////////////////////// template<> -const char* DamageTypeFlags::s_bitNameList[] = +const char* const DamageTypeFlags::s_bitNameList[] = { "EXPLOSION", "CRUSH", @@ -83,6 +83,7 @@ const char* DamageTypeFlags::s_bitNameList[] = NULL }; +static_assert(ARRAY_SIZE(DamageTypeFlags::s_bitNameList) == DamageTypeFlags::NumBits + 1, "Incorrect array size"); DamageTypeFlags DAMAGE_TYPE_FLAGS_NONE; // inits to all zeroes DamageTypeFlags DAMAGE_TYPE_FLAGS_ALL; diff --git a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp index e7a561e26c..0b627ac5bd 100644 --- a/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp +++ b/GeneralsMD/Code/GameEngine/Source/GameLogic/System/GameLogic.cpp @@ -3476,7 +3476,7 @@ static void unitTimings(void) #endif - static char *illegalTemplateNames[] = + static const char *const illegalTemplateNames[] = { "EMPPulseBomb", "GLAAngryMobRockProjectileObject", diff --git a/GeneralsMD/Code/GameEngineDevice/Include/W3DDevice/GameClient/Module/W3DModelDraw.h b/GeneralsMD/Code/GameEngineDevice/Include/W3DDevice/GameClient/Module/W3DModelDraw.h index c1e98a8412..7dedf11d76 100644 --- a/GeneralsMD/Code/GameEngineDevice/Include/W3DDevice/GameClient/Module/W3DModelDraw.h +++ b/GeneralsMD/Code/GameEngineDevice/Include/W3DDevice/GameClient/Module/W3DModelDraw.h @@ -46,6 +46,8 @@ class RenderObjClass { ANIM_MODE_LOOP_PINGPONG, ANIM_MODE_LOOP_BACKWARDS, //make sure only backwards playing animations after this one ANIM_MODE_ONCE_BACKWARDS, + + ANIM_MODE_COUNT }; }; diff --git a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp index 9a17a70d60..c7423e7fc8 100644 --- a/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp +++ b/GeneralsMD/Code/GameEngineDevice/Source/W3DDevice/GameClient/Drawable/Draw/W3DModelDraw.cpp @@ -227,9 +227,11 @@ enum ACBits CPP_11(: Int) MAINTAIN_FRAME_ACROSS_STATES2, MAINTAIN_FRAME_ACROSS_STATES3, MAINTAIN_FRAME_ACROSS_STATES4, + + AC_BITS_COUNT }; -static const char *ACBitsNames[] = +static const char *const ACBitsNames[] = { "RANDOMSTART", "START_FRAME_FIRST", @@ -244,6 +246,7 @@ static const char *ACBitsNames[] = NULL }; +static_assert(ARRAY_SIZE(ACBitsNames) == AC_BITS_COUNT + 1, "Incorrect array size"); static const Int ALL_MAINTAIN_FRAME_FLAGS = (1<