From fa1f8488f00622175ec35beab770c84cd67b9b54 Mon Sep 17 00:00:00 2001 From: Kp Date: Sat, 24 Dec 2016 22:44:08 +0000 Subject: [PATCH] Use uint8_t for sidenum --- common/main/effects.h | 2 +- common/main/game.h | 2 +- common/main/segment.h | 4 ++-- common/main/wall.h | 2 +- similar/main/effects.cpp | 11 ++++++----- similar/main/gameseg.cpp | 2 +- 6 files changed, 12 insertions(+), 11 deletions(-) diff --git a/common/main/effects.h b/common/main/effects.h index 6d99e1a06..fd3b6af88 100644 --- a/common/main/effects.h +++ b/common/main/effects.h @@ -64,7 +64,7 @@ struct eclip : public prohibit_void_ptr fix dest_size; //3d size of explosion int sound_num; //what sound this makes segnum_t segnum; - int sidenum; //what seg & side, for one-shot clips + uint8_t sidenum; //what seg & side, for one-shot clips }; constexpr int eclip_none = -1; diff --git a/common/main/game.h b/common/main/game.h index 8970248d2..a272c5169 100644 --- a/common/main/game.h +++ b/common/main/game.h @@ -266,7 +266,7 @@ objptridx_t find_escort(); //Flickering light system struct flickering_light { segnum_t segnum; - short sidenum; + uint8_t sidenum; uint32_t mask; // determines flicker pattern fix timer; // time until next change fix delay; // time between changes diff --git a/common/main/segment.h b/common/main/segment.h index a0a1db434..f5297eeb7 100644 --- a/common/main/segment.h +++ b/common/main/segment.h @@ -269,14 +269,14 @@ namespace dsx { struct delta_light : prohibit_void_ptr { segnum_t segnum; - sbyte sidenum; + uint8_t sidenum; array vert_light; }; // Light at segnum:sidenum casts light on count sides beginning at index (in array Delta_lights) struct dl_index { segnum_t segnum; - sbyte sidenum; + uint8_t sidenum; uint8_t count; uint16_t index; }; diff --git a/common/main/wall.h b/common/main/wall.h index e83595ac4..4d057a55a 100644 --- a/common/main/wall.h +++ b/common/main/wall.h @@ -122,7 +122,7 @@ namespace dsx { struct wall : public prohibit_void_ptr { segnum_t segnum; - int8_t sidenum; // Seg & side for this wall + uint8_t sidenum; // Seg & side for this wall uint8_t type; // What kind of special wall. fix hps; // "Hit points" of the wall. wallnum_t linked_wall; // number of linked wall diff --git a/similar/main/effects.cpp b/similar/main/effects.cpp index c46033f77..0d9043b6e 100644 --- a/similar/main/effects.cpp +++ b/similar/main/effects.cpp @@ -90,12 +90,13 @@ void do_special_effects() ec.frame_count++; if (ec.frame_count >= ec.vc.num_frames) { if (ec.flags & EF_ONE_SHOT) { - Assert(ec.segnum!=segment_none); - Assert(ec.sidenum>=0 && ec.sidenum<6); - Assert(ec.dest_bm_num!=0 && Segments[ec.segnum].sides[ec.sidenum].tmap_num2!=0); - Segments[ec.segnum].sides[ec.sidenum].tmap_num2 = ec.dest_bm_num | (Segments[ec.segnum].sides[ec.sidenum].tmap_num2&0xc000); //replace with destoyed ec.flags &= ~EF_ONE_SHOT; + auto &seg = *vsegptr(ec.segnum); ec.segnum = segment_none; //done with this + assert(ec.sidenum < 6); + auto &side = seg.sides[ec.sidenum]; + assert(ec.dest_bm_num != 0 && side.tmap_num2 != 0); + side.tmap_num2 = ec.dest_bm_num | (side.tmap_num2 & 0xc000); //replace with destoyed } ec.frame_count = 0; @@ -169,7 +170,7 @@ void restart_effect(int effect_num) } DEFINE_VCLIP_SERIAL_UDT(); -DEFINE_SERIAL_UDT_TO_MESSAGE(eclip, ec, (ec.vc, ec.time_left, ec.frame_count, ec.changing_wall_texture, ec.changing_object_texture, ec.flags, ec.crit_clip, ec.dest_bm_num, ec.dest_vclip, ec.dest_eclip, ec.dest_size, ec.sound_num, ec.segnum, serial::pad<2>(), ec.sidenum)); +DEFINE_SERIAL_UDT_TO_MESSAGE(eclip, ec, (ec.vc, ec.time_left, ec.frame_count, ec.changing_wall_texture, ec.changing_object_texture, ec.flags, ec.crit_clip, ec.dest_bm_num, ec.dest_vclip, ec.dest_eclip, ec.dest_size, ec.sound_num, ec.segnum, serial::pad<2>(), ec.sidenum, serial::pad<3>())); ASSERT_SERIAL_UDT_MESSAGE_SIZE(eclip, 130); /* diff --git a/similar/main/gameseg.cpp b/similar/main/gameseg.cpp index 9c3791915..806a65963 100644 --- a/similar/main/gameseg.cpp +++ b/similar/main/gameseg.cpp @@ -1696,10 +1696,10 @@ static void change_light(const vsegptridx_t segnum, int sidenum, int dir) continue; range_for (auto &j, partial_const_range(Delta_lights, static_cast(i.index), static_cast(i.count))) { + assert(j.sidenum < MAX_SIDES_PER_SEGMENT); const auto &&segp = vsegptr(j.segnum); auto &uvls = segp->sides[j.sidenum].uvls; for (int k=0; k<4; k++) { - Assert(j.sidenum >= 0 && j.sidenum < MAX_SIDES_PER_SEGMENT); auto &l = uvls[k].l; const fix dl = ds * j.vert_light[k]; if ((l += dl) < 0)