diff --git a/common/main/segment.h b/common/main/segment.h index 9501bad15..e4ab93feb 100644 --- a/common/main/segment.h +++ b/common/main/segment.h @@ -343,8 +343,8 @@ struct delta_light { struct dl_index { segnum_t segnum; sbyte sidenum; - sbyte count; - short index; + uint8_t count; + uint16_t index; }; #define MAX_DL_INDICES 500 @@ -353,7 +353,7 @@ struct dl_index { #define DL_SCALE 2048 // Divide light to allow 3 bits integer, 5 bits fraction. extern array Dl_indices; -extern delta_light Delta_lights[MAX_DELTA_LIGHTS]; +extern array Delta_lights; extern unsigned Num_static_lights; int subtract_light(segnum_t segnum, int sidenum); diff --git a/similar/main/gamesave.cpp b/similar/main/gamesave.cpp index a9d77ca01..36dc9a868 100644 --- a/similar/main/gamesave.cpp +++ b/similar/main/gamesave.cpp @@ -801,7 +801,6 @@ static int load_game_data(PHYSFS_file *LoadFile) short game_top_fileinfo_version; int object_offset; int gs_num_objects; - int num_delta_lights; int trig_size; //===================== READ FILE INFO ======================== @@ -837,8 +836,8 @@ static int load_game_data(PHYSFS_file *LoadFile) PHYSFSX_fseek(LoadFile, 4, SEEK_CUR); #if defined(DXX_BUILD_DESCENT_I) - (void)num_delta_lights; #elif defined(DXX_BUILD_DESCENT_II) + unsigned num_delta_lights; if (game_top_fileinfo_version >= 29) { PHYSFSX_fseek(LoadFile, 4, SEEK_CUR); Num_static_lights = PHYSFSX_readInt(LoadFile); @@ -1011,11 +1010,12 @@ static int load_game_data(PHYSFS_file *LoadFile) //================ READ DELTA LIGHT INFO =============== - for (int i = 0; i < num_delta_lights; i++) { if (game_top_fileinfo_version < 29) { ; } else - delta_light_read(&Delta_lights[i], LoadFile); + { + range_for (auto &i, partial_range(Delta_lights, num_delta_lights)) + delta_light_read(&i, LoadFile); } #endif @@ -1531,7 +1531,6 @@ static int save_game_data(PHYSFS_file *SaveFile) #elif defined(DXX_BUILD_DESCENT_II) short game_top_fileinfo_version = Gamesave_current_version >= 5 ? 31 : 25; int dl_indices_offset=0, delta_light_offset=0; - int num_delta_lights=0; #endif int player_offset=0, object_offset=0, walls_offset=0, doors_offset=0, triggers_offset=0, control_offset=0, matcen_offset=0; //, links_offset; int offset_offset=0, end_offset=0; @@ -1557,6 +1556,7 @@ static int save_game_data(PHYSFS_file *SaveFile) WRITE_HEADER_ENTRY(matcen_info, Num_robot_centers); #if defined(DXX_BUILD_DESCENT_II) + unsigned num_delta_lights = 0; if (game_top_fileinfo_version >= 29) { WRITE_HEADER_ENTRY(dl_index, Num_static_lights); @@ -1628,8 +1628,8 @@ static int save_game_data(PHYSFS_file *SaveFile) dl_index_write(&i, SaveFile); delta_light_offset = PHYSFS_tell(SaveFile); - for (int i = 0; i < num_delta_lights; i++) - delta_light_write(&Delta_lights[i], SaveFile); + range_for (auto &i, partial_range(Delta_lights, num_delta_lights)) + delta_light_write(&i, SaveFile); } #endif diff --git a/similar/main/gameseg.cpp b/similar/main/gameseg.cpp index b0e2b3d32..3ad343a9f 100644 --- a/similar/main/gameseg.cpp +++ b/similar/main/gameseg.cpp @@ -59,7 +59,7 @@ using std::min; #if defined(DXX_BUILD_DESCENT_II) array Dl_indices; -delta_light Delta_lights[MAX_DELTA_LIGHTS]; +array Delta_lights; unsigned Num_static_lights; #endif @@ -1691,18 +1691,17 @@ static void change_light(segnum_t segnum, int sidenum, int dir) range_for (auto &i, partial_range(Dl_indices, Num_static_lights)) if (i.segnum == segnum && i.sidenum == sidenum) { - auto dlp = &Delta_lights[i.index]; - for (int j=0; j < i.count; j++) { + range_for (auto &j, partial_range(Delta_lights, static_cast(i.index), static_cast(i.count))) + { for (int k=0; k<4; k++) { fix dl,new_l; - dl = dir * dlp->vert_light[k] * DL_SCALE; - Assert((dlp->segnum >= 0) && (dlp->segnum <= Highest_segment_index)); - Assert((dlp->sidenum >= 0) && (dlp->sidenum < MAX_SIDES_PER_SEGMENT)); - new_l = (Segments[dlp->segnum].sides[dlp->sidenum].uvls[k].l += dl); + dl = dir * j.vert_light[k] * DL_SCALE; + Assert(j.segnum >= 0 && j.segnum <= Highest_segment_index); + Assert(j.sidenum >= 0 && j.sidenum < MAX_SIDES_PER_SEGMENT); + new_l = (Segments[j.segnum].sides[j.sidenum].uvls[k].l += dl); if (new_l < 0) - Segments[dlp->segnum].sides[dlp->sidenum].uvls[k].l = 0; + Segments[j.segnum].sides[j.sidenum].uvls[k].l = 0; } - dlp++; } }