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
--------
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
--------

View file

@ -210,7 +210,7 @@ void do_controlcen_destroyed_stuff(object *objp)
// Must toggle walls whether it is a boss or control center.
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.
Control_center_destroyed = 1;

View file

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

View file

@ -87,7 +87,7 @@ void do_link(sbyte trigger_num)
if (trigger_num != -1) {
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.
void wall_toggle(segment *seg, int side)
void wall_toggle(int segnum, int side)
{
int wall_num;
Assert( seg-Segments <= Highest_segment_index);
Assert( side < MAX_SIDES_PER_SEGMENT );
if (segnum < 0 || segnum > Highest_segment_index || side < 0 || 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) {
return;
}
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)
wall_destroy(seg, side);
wall_destroy(&Segments[segnum], side);
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 );
// 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.
extern void reset_walls();