diff --git a/common/main/bm.h b/common/main/bm.h index 1dffa3e95..03b56ca34 100644 --- a/common/main/bm.h +++ b/common/main/bm.h @@ -55,8 +55,9 @@ constexpr unsigned MAX_TEXTURES = 1200; #define TMI_GOAL_HOARD 32 //this is used to remap the goals #endif -#if defined(DXX_BUILD_DESCENT_I) || defined(DXX_BUILD_DESCENT_II) +#ifdef dsx #include "inferno.h" +namespace dsx { struct tmap_info : prohibit_void_ptr { #if defined(DXX_BUILD_DESCENT_I) @@ -81,6 +82,7 @@ struct tmap_info : prohibit_void_ptr #define N_COCKPIT_BITMAPS 6 #endif }; +} extern int Num_object_types; @@ -127,14 +129,14 @@ extern int8_t ObjType[MAX_OBJTYPE]; // Type of an object, such as Robot, eg if extern int8_t ObjId[MAX_OBJTYPE]; // ID of a robot, within its class, eg if ObjType[11] == 3, then object #11 is the third robot extern fix ObjStrength[MAX_OBJTYPE]; // initial strength of each object -#define MAX_OBJ_BITMAPS 210 +constexpr unsigned MAX_OBJ_BITMAPS = 210; #elif defined(DXX_BUILD_DESCENT_II) //the model number of the marker object extern int Marker_model_num; extern int Robot_replacements_loaded; -#define MAX_OBJ_BITMAPS 610 +constexpr unsigned MAX_OBJ_BITMAPS = 610; extern unsigned N_ObjBitmaps; extern int extra_bitmap_num; #endif @@ -146,9 +148,7 @@ extern array ObjBitmapPtrs; extern int First_multi_bitmap_num; void compute_average_rgb(grs_bitmap *bm, array &rgb); void load_robot_replacements(const d_fname &level_name); -#endif -#ifdef dsx namespace dsx { // Initializes all bitmaps from BITMAPS.TBL file. int gamedata_read_tbl(int pc_shareware); @@ -165,13 +165,15 @@ int ds_load(int skip, const char * filename ); int compute_average_pixel(grs_bitmap *n); #if defined(DXX_BUILD_DESCENT_II) +namespace dsx { //these values are the number of each item in the release of d2 //extra items added after the release get written in an additional hamfile -static const unsigned N_D2_ROBOT_TYPES = 66; -static const unsigned N_D2_ROBOT_JOINTS = 1145; -static const unsigned N_D2_OBJBITMAPS = 422; -static const unsigned N_D2_OBJBITMAPPTRS = 502; -static const unsigned N_D2_WEAPON_TYPES = 62; +constexpr unsigned N_D2_ROBOT_TYPES = 66; +constexpr unsigned N_D2_ROBOT_JOINTS = 1145; +constexpr unsigned N_D2_OBJBITMAPS = 422; +constexpr unsigned N_D2_OBJBITMAPPTRS = 502; +constexpr unsigned N_D2_WEAPON_TYPES = 62; +} #endif #endif diff --git a/d1x-rebirth/main/bmread.cpp b/d1x-rebirth/main/bmread.cpp index 650abad0e..cf09700be 100644 --- a/d1x-rebirth/main/bmread.cpp +++ b/d1x-rebirth/main/bmread.cpp @@ -964,7 +964,7 @@ static void bm_read_robot_ai(char *&arg, int skip) //returns a pointer to the bitmap static grs_bitmap *load_polymodel_bitmap(int skip, const char *name) { - Assert(N_ObjBitmaps < MAX_OBJ_BITMAPS); + assert(N_ObjBitmaps < ObjBitmaps.size()); // Assert( N_ObjBitmaps == N_ObjBitmapPtrs ); diff --git a/d1x-rebirth/main/custom.cpp b/d1x-rebirth/main/custom.cpp index 551dbcf66..a5acdaecb 100644 --- a/d1x-rebirth/main/custom.cpp +++ b/d1x-rebirth/main/custom.cpp @@ -545,10 +545,7 @@ static void load_hxm(const d_fname &hxmname) { repl_num = PHYSFSX_readInt(f); auto v = PHYSFSX_readShort(f); - if (repl_num >= MAX_OBJ_BITMAPS) - { - } - else + if (repl_num < ObjBitmaps.size()) ObjBitmaps[repl_num].index = v; } } diff --git a/d2x-rebirth/main/bmread.cpp b/d2x-rebirth/main/bmread.cpp index 12d2c77d3..ed2c696bc 100644 --- a/d2x-rebirth/main/bmread.cpp +++ b/d2x-rebirth/main/bmread.cpp @@ -1095,7 +1095,7 @@ void bm_read_robot_ai(int skip) //returns a pointer to the bitmap static grs_bitmap *load_polymodel_bitmap(int skip, const char *name) { - Assert(N_ObjBitmaps < MAX_OBJ_BITMAPS); + assert(N_ObjBitmaps < ObjBitmaps.size()); // Assert( N_ObjBitmaps == N_ObjBitmapPtrs ); @@ -1111,8 +1111,8 @@ static grs_bitmap *load_polymodel_bitmap(int skip, const char *name) } else { ObjBitmapPtrs[N_ObjBitmapPtrs++] = Effects[eclip_num].changing_object_texture; } - Assert(N_ObjBitmaps < MAX_OBJ_BITMAPS); - Assert(N_ObjBitmapPtrs < MAX_OBJ_BITMAPS); + assert(N_ObjBitmaps < ObjBitmaps.size()); + assert(N_ObjBitmapPtrs < ObjBitmapPtrs.size()); return NULL; } else { @@ -1121,8 +1121,8 @@ static grs_bitmap *load_polymodel_bitmap(int skip, const char *name) Error("Bitmap <%s> is not 64x64",name); ObjBitmapPtrs[N_ObjBitmapPtrs++] = N_ObjBitmaps; N_ObjBitmaps++; - Assert(N_ObjBitmaps < MAX_OBJ_BITMAPS); - Assert(N_ObjBitmapPtrs < MAX_OBJ_BITMAPS); + assert(N_ObjBitmaps < ObjBitmaps.size()); + assert(N_ObjBitmapPtrs < ObjBitmapPtrs.size()); return &GameBitmaps[ObjBitmaps[N_ObjBitmaps-1].index]; } } diff --git a/similar/main/bm.cpp b/similar/main/bm.cpp index 6ead64119..46525526a 100644 --- a/similar/main/bm.cpp +++ b/similar/main/bm.cpp @@ -470,13 +470,13 @@ void bm_read_extra_robots(const char *fname, Mission::descent_version_type type) i = PHYSFSX_readInt(fp); t = PHYSFSX_readInt(fp); - if (N_D2_OBJBITMAPS+t >= MAX_OBJ_BITMAPS) - Error("Too many object bitmaps (%d) in <%s>. Max is %d.",t,fname,MAX_OBJ_BITMAPS-N_D2_OBJBITMAPS); + if (N_D2_OBJBITMAPS+t >= ObjBitmaps.size()) + Error("Too many object bitmaps (%d) in <%s>. Max is %lu.", t, fname, ObjBitmaps.size() - N_D2_OBJBITMAPS); bitmap_index_read_n(fp, partial_range(ObjBitmaps, N_D2_OBJBITMAPS, N_D2_OBJBITMAPS + t)); t = PHYSFSX_readInt(fp); - if (N_D2_OBJBITMAPPTRS+t >= MAX_OBJ_BITMAPS) - Error("Too many object bitmap pointers (%d) in <%s>. Max is %d.",t,fname,MAX_OBJ_BITMAPS-N_D2_OBJBITMAPPTRS); + if (N_D2_OBJBITMAPPTRS+t >= ObjBitmapPtrs.size()) + Error("Too many object bitmap pointers (%d) in <%s>. Max is %lu.", t, fname, ObjBitmapPtrs.size() - N_D2_OBJBITMAPPTRS); range_for (auto &i, partial_range(ObjBitmapPtrs, N_D2_OBJBITMAPPTRS, N_D2_OBJBITMAPPTRS + t)) i = PHYSFSX_readShort(fp); } @@ -536,16 +536,16 @@ void load_robot_replacements(const d_fname &level_name) t = PHYSFSX_readInt(fp); //read number of objbitmaps for (j=0;j=MAX_OBJ_BITMAPS) - Error("Object bitmap number (%d) out of range in (%s). Range = [0..%d].",i,static_cast(level_name),MAX_OBJ_BITMAPS-1); + if (i < 0 || i >= ObjBitmaps.size()) + Error("Object bitmap number (%d) out of range in (%s). Range = [0..%lu].", i, static_cast(level_name), ObjBitmaps.size() - 1); bitmap_index_read(fp, ObjBitmaps[i]); } t = PHYSFSX_readInt(fp); //read number of objbitmapptrs for (j=0;j=MAX_OBJ_BITMAPS) - Error("Object bitmap pointer (%d) out of range in (%s). Range = [0..%d].",i,static_cast(level_name),MAX_OBJ_BITMAPS-1); + if (i < 0 || i >= ObjBitmapPtrs.size()) + Error("Object bitmap pointer (%d) out of range in (%s). Range = [0..%lu].", i, static_cast(level_name), ObjBitmapPtrs.size() - 1); ObjBitmapPtrs[i] = PHYSFSX_readShort(fp); } Robot_replacements_loaded = 1; @@ -595,8 +595,7 @@ static bitmap_index read_extra_bitmap_iff(const char * filename ) // formerly load_exit_model_bitmap static grs_bitmap *bm_load_extra_objbitmap(const char *name) { - Assert(N_ObjBitmaps < MAX_OBJ_BITMAPS); - + assert(N_ObjBitmaps < ObjBitmaps.size()); { ObjBitmaps[N_ObjBitmaps] = read_extra_bitmap_iff(name); @@ -613,7 +612,7 @@ static grs_bitmap *bm_load_extra_objbitmap(const char *name) Error("Bitmap <%s> is not 64x64",name); ObjBitmapPtrs[N_ObjBitmaps] = N_ObjBitmaps; N_ObjBitmaps++; - Assert(N_ObjBitmaps < MAX_OBJ_BITMAPS); + assert(N_ObjBitmaps < ObjBitmaps.size()); return &GameBitmaps[ObjBitmaps[N_ObjBitmaps-1].index]; } }