Reworked wall_toggle() to work with index for segnum instead of a pointer, hopefully making the consistency check less error prone

This commit is contained in:
zicodxx 2011-09-24 22:03:33 +02:00
parent 4e299e4f83
commit 0df7146226
6 changed files with 17 additions and 12 deletions

View file

@ -3,6 +3,7 @@ D1X-Rebirth Changelog
20110924 20110924
-------- --------
main/fvi.c, main/gameseg.c, main/object.c: Consistency check for segment number in find_vector_intersection() and obj_create(); Added more debug output for invalid segment numberin get_seg_masks() main/fvi.c, main/gameseg.c, main/object.c: Consistency check for segment number in find_vector_intersection() and obj_create(); Added more debug output for invalid segment numberin get_seg_masks()
main/cntrlcen.c, main/newdemo.c, main/switch.c, main/wall.c, main/wall.h: Reworked wall_toggle() to work with index for segnum instead of a pointer, hopefully making the consistency check less error prone
20110923 20110923
-------- --------

View file

@ -210,7 +210,7 @@ void do_controlcen_destroyed_stuff(object *objp)
// Must toggle walls whether it is a boss or control center. // Must toggle walls whether it is a boss or control center.
for (i=0;i<ControlCenterTriggers.num_links;i++) for (i=0;i<ControlCenterTriggers.num_links;i++)
wall_toggle(&Segments[ControlCenterTriggers.seg[i]], ControlCenterTriggers.side[i]); wall_toggle(ControlCenterTriggers.seg[i], ControlCenterTriggers.side[i]);
// And start the countdown stuff. // And start the countdown stuff.
Control_center_destroyed = 1; Control_center_destroyed = 1;

View file

@ -1935,7 +1935,7 @@ int newdemo_read_frame_information(int rewrite)
break; break;
} }
if (Newdemo_vcr_state != ND_STATE_PAUSED) if (Newdemo_vcr_state != ND_STATE_PAUSED)
wall_toggle(&Segments[segnum], side); wall_toggle(segnum, side);
break; break;
case ND_EVENT_CONTROL_CENTER_DESTROYED: case ND_EVENT_CONTROL_CENTER_DESTROYED:

View file

@ -87,7 +87,7 @@ void do_link(sbyte trigger_num)
if (trigger_num != -1) { if (trigger_num != -1) {
for (i=0;i<Triggers[trigger_num].num_links;i++) { for (i=0;i<Triggers[trigger_num].num_links;i++) {
wall_toggle(&Segments[Triggers[trigger_num].seg[i]], Triggers[trigger_num].side[i]); wall_toggle(Triggers[trigger_num].seg[i], Triggers[trigger_num].side[i]);
} }
} }
} }

View file

@ -877,28 +877,32 @@ int wall_hit_process(segment *seg, int side, fix damage, int playernum, object *
//----------------------------------------------------------------- //-----------------------------------------------------------------
// Opens doors/destroys wall/shuts off triggers. // Opens doors/destroys wall/shuts off triggers.
void wall_toggle(segment *seg, int side) void wall_toggle(int segnum, int side)
{ {
int wall_num; int wall_num;
Assert( seg-Segments <= Highest_segment_index); if (segnum < 0 || segnum > Highest_segment_index || side < 0 || side >= MAX_SIDES_PER_SEGMENT)
Assert( side < MAX_SIDES_PER_SEGMENT ); {
#ifndef NDEBUG
Warning("Can't toggle side %d (%i) of\nsegment %d (%i)!\n", side, MAX_SIDES_PER_SEGMENT, segnum, Highest_segment_index);
#endif
return;
}
wall_num = seg->sides[side].wall_num; wall_num = Segments[segnum].sides[side].wall_num;
if (wall_num == -1) { if (wall_num == -1) {
return; return;
} }
if ( Newdemo_state == ND_STATE_RECORDING ) if ( Newdemo_state == ND_STATE_RECORDING )
newdemo_record_wall_toggle(seg-Segments, side ); newdemo_record_wall_toggle(segnum, side );
if (Walls[wall_num].type == WALL_BLASTABLE) if (Walls[wall_num].type == WALL_BLASTABLE)
wall_destroy(seg, side); wall_destroy(&Segments[segnum], side);
if ((Walls[wall_num].type == WALL_DOOR) && (Walls[wall_num].state == WALL_DOOR_CLOSED)) if ((Walls[wall_num].type == WALL_DOOR) && (Walls[wall_num].state == WALL_DOOR_CLOSED))
wall_open_door(seg, side); wall_open_door(&Segments[segnum], side);
} }

View file

@ -215,7 +215,7 @@ extern void wall_close_door(int wall_num);
extern int wall_hit_process(segment *seg, int side, fix damage, int playernum, object *obj ); extern int wall_hit_process(segment *seg, int side, fix damage, int playernum, object *obj );
// Opens/destroys specified door. // Opens/destroys specified door.
extern void wall_toggle(segment *seg, int side); extern void wall_toggle(int segnum, int side);
// Tidy up Walls array for load/save purposes. // Tidy up Walls array for load/save purposes.
extern void reset_walls(); extern void reset_walls();