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:
parent
4e299e4f83
commit
0df7146226
|
@ -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
|
||||||
--------
|
--------
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
20
main/wall.c
20
main/wall.c
|
@ -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);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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();
|
||||||
|
|
Loading…
Reference in a new issue