From fee76e6ced07a059d0eb38405a90f8f702b31448 Mon Sep 17 00:00:00 2001 From: Kp Date: Sat, 9 Jul 2016 17:58:34 +0000 Subject: [PATCH] Define Powerup_names only if EDITOR --- common/main/powerup.h | 10 ++++++++-- d1x-rebirth/main/bmread.cpp | 16 ++++++++++++---- d2x-rebirth/main/bmread.cpp | 16 ++++++++++++---- similar/editor/medrobot.cpp | 2 +- similar/main/dumpmine.cpp | 2 +- similar/main/gamerend.cpp | 2 +- 6 files changed, 35 insertions(+), 13 deletions(-) diff --git a/common/main/powerup.h b/common/main/powerup.h index cd1cffe98..bb43718dc 100644 --- a/common/main/powerup.h +++ b/common/main/powerup.h @@ -96,6 +96,10 @@ enum powerup_type_t : uint8_t }; #ifdef dsx +namespace dcx { +constexpr unsigned POWERUP_NAME_LENGTH = 16; +} + namespace dsx { #if defined(DXX_BUILD_DESCENT_I) #define VULCAN_AMMO_MAX (392u*2) @@ -109,7 +113,10 @@ constexpr unsigned MAX_POWERUP_TYPES = 50; #define VULCAN_WEAPON_AMMO_AMOUNT 196 #define VULCAN_AMMO_AMOUNT (49*2) -#define POWERUP_NAME_LENGTH 16 // Length of a robot or powerup name. +#ifdef EDITOR +using powerup_names_array = array, MAX_POWERUP_TYPES>; +extern powerup_names_array Powerup_names; +#endif } #endif @@ -124,7 +131,6 @@ struct powerup_type_info : public prohibit_void_ptr namespace dsx { extern array Powerup_info; -extern array Powerup_names; } void powerup_type_info_read(PHYSFS_File *fp, powerup_type_info &pti); diff --git a/d1x-rebirth/main/bmread.cpp b/d1x-rebirth/main/bmread.cpp index 4ae1afdb4..2f3f7e26d 100644 --- a/d1x-rebirth/main/bmread.cpp +++ b/d1x-rebirth/main/bmread.cpp @@ -98,7 +98,9 @@ static short N_ObjBitmaps=0; static short N_ObjBitmapPtrs=0; static int Num_robot_ais = 0; namespace dsx { -array Powerup_names; +#ifdef EDITOR +powerup_names_array Powerup_names; +#endif array Robot_names; } @@ -1673,7 +1675,9 @@ void bm_read_powerup(char *&arg, int unused_flag) Powerup_info[n].vclip_num = vclip_none; Powerup_info[n].hit_sound = sound_none; Powerup_info[n].size = DEFAULT_POWERUP_SIZE; +#ifdef EDITOR Powerup_names[n][0] = 0; +#endif // Process arguments arg = strtok( NULL, space_tab ); @@ -1691,9 +1695,13 @@ void bm_read_powerup(char *&arg, int unused_flag) } else if (!d_stricmp( arg, "hit_sound" )) { Powerup_info[n].hit_sound = atoi(equal_ptr); } else if (!d_stricmp( arg, "name" )) { - Assert(strlen(equal_ptr) < POWERUP_NAME_LENGTH); // Oops, name too long. - strcpy(Powerup_names[n], &equal_ptr[1]); - Powerup_names[n][strlen(Powerup_names[n])-1] = 0; +#ifdef EDITOR + auto &name = Powerup_names[n]; + const auto len = strlen(equal_ptr); + assert(len < name.size()); // Oops, name too long. + memcpy(name.data(), &equal_ptr[1], len - 2); + name[len - 2] = 0; +#endif } else if (!d_stricmp( arg, "size" )) { Powerup_info[n].size = fl2f(atof(equal_ptr)); } diff --git a/d2x-rebirth/main/bmread.cpp b/d2x-rebirth/main/bmread.cpp index 79648eae3..9cd5a0d9f 100644 --- a/d2x-rebirth/main/bmread.cpp +++ b/d2x-rebirth/main/bmread.cpp @@ -91,7 +91,9 @@ using std::min; static short N_ObjBitmapPtrs=0; static int Num_robot_ais = 0; namespace dsx { -array Powerup_names; +#ifdef EDITOR +powerup_names_array Powerup_names; +#endif array Robot_names; } @@ -2008,7 +2010,9 @@ void bm_read_powerup(int unused_flag) Powerup_info[n].vclip_num = vclip_none; Powerup_info[n].hit_sound = sound_none; Powerup_info[n].size = DEFAULT_POWERUP_SIZE; +#ifdef EDITOR Powerup_names[n][0] = 0; +#endif // Process arguments arg = strtok( NULL, space_tab ); @@ -2026,9 +2030,13 @@ void bm_read_powerup(int unused_flag) } else if (!d_stricmp( arg, "hit_sound" )) { Powerup_info[n].hit_sound = atoi(equal_ptr); } else if (!d_stricmp( arg, "name" )) { - Assert(strlen(equal_ptr) < POWERUP_NAME_LENGTH); // Oops, name too long. - strcpy(Powerup_names[n], &equal_ptr[1]); - Powerup_names[n][strlen(Powerup_names[n])-1] = 0; +#ifdef EDITOR + auto &name = Powerup_names[n]; + const auto len = strlen(equal_ptr); + assert(len < name.size()); // Oops, name too long. + memcpy(name.data(), &equal_ptr[1], len - 2); + name[len - 2] = 0; +#endif } else if (!d_stricmp( arg, "size" )) { Powerup_info[n].size = fl2f(atof(equal_ptr)); } else { diff --git a/similar/editor/medrobot.cpp b/similar/editor/medrobot.cpp index 8be57bf48..a84105fb5 100644 --- a/similar/editor/medrobot.cpp +++ b/similar/editor/medrobot.cpp @@ -688,7 +688,7 @@ int robot_dialog_handler(UI_DIALOG *dlg,const d_event &event, robot_dialog *r) Cur_goody_id = 0; case OBJ_POWERUP: type_text = "Powerup"; - id_text = Powerup_names[Cur_goody_id]; + id_text = Powerup_names[Cur_goody_id].data(); break; } diff --git a/similar/main/dumpmine.cpp b/similar/main/dumpmine.cpp index 1b3f29122..f118d6b7d 100644 --- a/similar/main/dumpmine.cpp +++ b/similar/main/dumpmine.cpp @@ -137,7 +137,7 @@ static const char *object_ids(const vcobjptr_t objp) case OBJ_ROBOT: return Robot_names[get_robot_id(objp)]; case OBJ_POWERUP: - return Powerup_names[get_powerup_id(objp)]; + return Powerup_names[get_powerup_id(objp)].data(); } return NULL; } diff --git a/similar/main/gamerend.cpp b/similar/main/gamerend.cpp index 91d9e4b0a..57b1ab908 100644 --- a/similar/main/gamerend.cpp +++ b/similar/main/gamerend.cpp @@ -293,7 +293,7 @@ static void draw_window_label() case OBJ_CAMERA: viewer_name = "Camera"; break; case OBJ_POWERUP: viewer_name = "Powerup"; #ifdef EDITOR - viewer_id = Powerup_names[get_powerup_id(vcobjptr(Viewer))]; + viewer_id = Powerup_names[get_powerup_id(vcobjptr(Viewer))].data(); #endif break; case OBJ_DEBRIS: viewer_name = "Debris"; break;