From c5bd78f4bc8ddc0a05474878b4e5284f703c9bf9 Mon Sep 17 00:00:00 2001 From: Kp Date: Sat, 13 Jun 2015 22:42:16 +0000 Subject: [PATCH] Use valptr for dumpmine highest_valid --- similar/main/dumpmine.cpp | 111 ++++++++++++++++++++------------------ 1 file changed, 60 insertions(+), 51 deletions(-) diff --git a/similar/main/dumpmine.cpp b/similar/main/dumpmine.cpp index 77e490ecd..c6b2ecea1 100644 --- a/similar/main/dumpmine.cpp +++ b/similar/main/dumpmine.cpp @@ -226,12 +226,15 @@ static void write_exit_text(PHYSFS_file *my_file) // ---------- Find exit doors ---------- count = 0; range_for (const auto i, highest_valid(Segments)) + { + const auto &&segp = vcsegptr(static_cast(i)); for (j=0; jchildren[j] == segment_exit) { PHYSFSX_printf(my_file, "Segment %3hu, side %i is an exit door.\n", static_cast(i), j); count++; } + } if (count == 0) err_printf(my_file, "Error: No external wall in this mine."); @@ -320,36 +323,40 @@ static void write_key_text(PHYSFS_file *my_file) range_for (const auto i, highest_valid(Objects)) { - if (Objects[i].type == OBJ_POWERUP) - if (get_powerup_id(&Objects[i]) == POW_KEY_BLUE) { - PHYSFSX_printf(my_file, "The BLUE key is object %hu in segment %i\n", static_cast(i), Objects[i].segnum); + const auto &&objp = vcobjptr(static_cast(i)); + if (objp->type == OBJ_POWERUP) + if (get_powerup_id(objp) == POW_KEY_BLUE) { + PHYSFSX_printf(my_file, "The BLUE key is object %hu in segment %i\n", static_cast(i), objp->segnum); blue_count2++; } - if (Objects[i].type == OBJ_POWERUP) - if (get_powerup_id(&Objects[i]) == POW_KEY_RED) { - PHYSFSX_printf(my_file, "The RED key is object %hu in segment %i\n", static_cast(i), Objects[i].segnum); + if (objp->type == OBJ_POWERUP) + if (get_powerup_id(objp) == POW_KEY_RED) { + PHYSFSX_printf(my_file, "The RED key is object %hu in segment %i\n", static_cast(i), objp->segnum); red_count2++; } - if (Objects[i].type == OBJ_POWERUP) - if (get_powerup_id(&Objects[i]) == POW_KEY_GOLD) { - PHYSFSX_printf(my_file, "The GOLD key is object %hu in segment %i\n", static_cast(i), Objects[i].segnum); + if (objp->type == OBJ_POWERUP) + if (get_powerup_id(objp) == POW_KEY_GOLD) { + PHYSFSX_printf(my_file, "The GOLD key is object %hu in segment %i\n", static_cast(i), objp->segnum); gold_count2++; } - if (Objects[i].contains_count) { - if (Objects[i].contains_type == OBJ_POWERUP) { - switch (Objects[i].contains_id) { + if (objp->contains_count) + { + if (objp->contains_type == OBJ_POWERUP) + { + switch (objp->contains_id) + { case POW_KEY_BLUE: - PHYSFSX_printf(my_file, "The BLUE key is contained in object %hu (a %s %s) in segment %i\n", static_cast(i), object_types(vcobjptr(static_cast(i))), Robot_names[get_robot_id(&Objects[i])], Objects[i].segnum); - blue_count2 += Objects[i].contains_count; + PHYSFSX_printf(my_file, "The BLUE key is contained in object %hu (a %s %s) in segment %i\n", static_cast(i), object_types(objp), Robot_names[get_robot_id(objp)], objp->segnum); + blue_count2 += objp->contains_count; break; case POW_KEY_GOLD: - PHYSFSX_printf(my_file, "The GOLD key is contained in object %hu (a %s %s) in segment %i\n", static_cast(i), object_types(vcobjptr(static_cast(i))), Robot_names[get_robot_id(&Objects[i])], Objects[i].segnum); - gold_count2 += Objects[i].contains_count; + PHYSFSX_printf(my_file, "The GOLD key is contained in object %hu (a %s %s) in segment %i\n", static_cast(i), object_types(objp), Robot_names[get_robot_id(objp)], objp->segnum); + gold_count2 += objp->contains_count; break; case POW_KEY_RED: - PHYSFSX_printf(my_file, "The RED key is contained in object %hu (a %s %s) in segment %i\n", static_cast(i), object_types(vcobjptr(static_cast(i))), Robot_names[get_robot_id(&Objects[i])], Objects[i].segnum); - red_count2 += Objects[i].contains_count; + PHYSFSX_printf(my_file, "The RED key is contained in object %hu (a %s %s) in segment %i\n", static_cast(i), object_types(objp), Robot_names[get_robot_id(objp)], objp->segnum); + red_count2 += objp->contains_count; break; default: break; @@ -390,11 +397,14 @@ static void write_control_center_text(PHYSFS_file *my_file) count = 0; range_for (const auto i, highest_valid(Segments)) - if (Segments[i].special == SEGMENT_IS_CONTROLCEN) { + { + const auto &&segp = vcsegptr(static_cast(i)); + if (segp->special == SEGMENT_IS_CONTROLCEN) + { count++; PHYSFSX_printf(my_file, "Segment %3hu is a control center.\n", static_cast(i)); count2 = 0; - range_for (const auto objp, objects_in(Segments[i])) + range_for (const auto objp, objects_in(segp)) { if (objp->type == OBJ_CNTRLCEN) count2++; @@ -404,6 +414,7 @@ static void write_control_center_text(PHYSFS_file *my_file) else if (count2 != 1) PHYSFSX_printf(my_file, "%i control center objects in control center segment.\n", count2); } + } if (count == 0) err_printf(my_file, "Error: No control center in this mine."); @@ -434,25 +445,24 @@ static void write_segment_text(PHYSFS_file *my_file) range_for (const auto i, highest_valid(Segments)) { - + const auto &&segp = vcsegptr(static_cast(i)); PHYSFSX_printf(my_file, "Segment %4hu: ", static_cast(i)); - if (Segments[i].special != 0) - PHYSFSX_printf(my_file, "special = %3i (%s), value = %3i ", Segments[i].special, Special_names[Segments[i].special], Segments[i].value); - - if (Segments[i].matcen_num != -1) - PHYSFSX_printf(my_file, "matcen = %3i, ", Segments[i].matcen_num); - + if (segp->special != 0) + PHYSFSX_printf(my_file, "special = %3i (%s), value = %3i ", segp->special, Special_names[segp->special], segp->value); + if (segp->matcen_num != -1) + PHYSFSX_printf(my_file, "matcen = %3i, ", segp->matcen_num); PHYSFSX_printf(my_file, "\n"); } range_for (const auto i, highest_valid(Segments)) { + const auto &&segp = vcsegptr(static_cast(i)); int depth; PHYSFSX_printf(my_file, "Segment %4hu: ", static_cast(i)); depth=0; PHYSFSX_printf(my_file, "Objects: "); - range_for (const auto objp, objects_in(Segments[i])) + range_for (const auto objp, objects_in(segp)) { short objnum = objp; PHYSFSX_printf(my_file, "[%8s %8s %3i] ", object_types(objp), object_ids(objp), objnum); @@ -537,9 +547,9 @@ static void write_wall_text(PHYSFS_file *my_file) range_for (const auto i, highest_valid(Segments)) { - segment *segp = &Segments[i]; + const auto &&segp = vcsegptr(static_cast(i)); for (j=0; jsides[j]; + const auto sidep = &segp->sides[j]; if (sidep->wall_num != wall_none) { if (wall_flags[sidep->wall_num]) @@ -561,9 +571,11 @@ static void write_player_text(PHYSFS_file *my_file) PHYSFSX_printf(my_file, "Players:\n"); range_for (const auto i, highest_valid(Objects)) { - if (Objects[i].type == OBJ_PLAYER) { + const auto &&objp = vcobjptr(static_cast(i)); + if (objp->type == OBJ_PLAYER) + { num_players++; - PHYSFSX_printf(my_file, "Player %2i is object #%3hu in segment #%3i.\n", get_player_id(&Objects[i]), static_cast(i), Objects[i].segnum); + PHYSFSX_printf(my_file, "Player %2i is object #%3hu in segment #%3i.\n", get_player_id(objp), static_cast(i), objp->segnum); } } @@ -729,12 +741,10 @@ static void determine_used_textures_level(int load_level_flag, int shareware_fla range_for (const auto segnum, highest_valid(Segments)) { - segment *segp = &Segments[segnum]; - + const auto &&segp = vcsegptr(static_cast(segnum)); for (sidenum=0; sidenumsides[sidenum]; - + const auto sidep = &segp->sides[sidenum]; if (sidep->wall_num != wall_none) { int clip_num = Walls[sidep->wall_num].clip_num; if (clip_num != -1) { @@ -794,8 +804,7 @@ static void determine_used_textures_level(int load_level_flag, int shareware_fla // Process robots. range_for (const auto objnum, highest_valid(Objects)) { - object *objp = &Objects[objnum]; - + const auto &&objp = vcobjptr(static_cast(objnum)); if (objp->render_type == RT_POLYOBJ) { polymodel *po = &Polygon_models[objp->rtype.pobj_info.model_num]; @@ -820,11 +829,9 @@ static void determine_used_textures_level(int load_level_flag, int shareware_fla // Process walls and segment sides. range_for (const auto segnum, highest_valid(Segments)) { - segment *segp = &Segments[segnum]; - + const auto &&segp = vsegptr(static_cast(segnum)); for (sidenum=0; sidenumsides[sidenum]; - + const auto sidep = &segp->sides[sidenum]; if (sidep->wall_num != wall_none) { int clip_num = Walls[sidep->wall_num].clip_num; if (clip_num != -1) { @@ -989,8 +996,10 @@ static void say_totals(PHYSFS_file *my_file, const char *level_name) range_for (const auto j, highest_valid(Objects)) { - if (!used_objects[j] && Objects[j].type!=OBJ_NONE) { - cur_obj_val = Objects[j].type * 1000 + Objects[j].id; + const auto &&objp = vcobjptr(static_cast(j)); + if (!used_objects[j] && objp->type != OBJ_NONE) + { + cur_obj_val = objp->type * 1000 + objp->id; if (cur_obj_val < min_obj_val) { min_objnum = j; min_obj_val = cur_obj_val; @@ -1007,13 +1016,13 @@ static void say_totals(PHYSFS_file *my_file, const char *level_name) range_for (const auto i, highest_valid(Objects)) { + const auto &&objp = vcobjptr(static_cast(i)); if (!used_objects[i]) { - - if (((Objects[i].type == objtype) && (Objects[i].id == objid)) || - ((Objects[i].type == objtype) && (objtype == OBJ_PLAYER)) || - ((Objects[i].type == objtype) && (objtype == OBJ_COOP)) || - ((Objects[i].type == objtype) && (objtype == OBJ_HOSTAGE))) { - if (Objects[i].type == OBJ_ROBOT) + if ((objp->type == objtype && objp->id == objid) || + (objp->type == objtype && objtype == OBJ_PLAYER) || + (objp->type == objtype && objtype == OBJ_COOP) || + (objp->type == objtype && objtype == OBJ_HOSTAGE)) { + if (objp->type == OBJ_ROBOT) total_robots++; used_objects[i] = true; objcount++;