diff --git a/source/games/sw/src/game.h b/source/games/sw/src/game.h index 96a11a924..3908e6aed 100644 --- a/source/games/sw/src/game.h +++ b/source/games/sw/src/game.h @@ -1412,11 +1412,7 @@ struct SECTOR_OBJECT TObjPtr sp_child; // child sprite that holds info for the sector object - union - { - struct { int BLAHBLAHX, BLAHBLAHY, zmid; }; // midpoints of the sector object - vec3_t pmid; - }; + vec3_t pmid; // midpoints of the sector object TObjPtr so_actors[MAX_SO_SPRITE]; // hold the actors of the object TObjPtr match_event_actor; // spritenum of the match event sprite @@ -2138,7 +2134,7 @@ struct ANIM case ANIM_Floorz: return *sector[animindex].floorzptr(!write); case ANIM_SopZ: - return SectorObject[animindex].zmid; + return SectorObject[animindex].pmid.Z; case ANIM_Spritez: if (animactor == nullptr) return scratch; return animactor->spr.pos.Z; diff --git a/source/games/sw/src/interpso.cpp b/source/games/sw/src/interpso.cpp index 7f560a59e..bccf9478d 100644 --- a/source/games/sw/src/interpso.cpp +++ b/source/games/sw/src/interpso.cpp @@ -110,7 +110,7 @@ static int &getvalue(so_interp::interp_data& element, bool write) case soi_soy: return SectorObject[index].pmid.Y; case soi_soz: - return SectorObject[index].zmid; + return SectorObject[index].pmid.Z; case soi_sprx: if (element.actorofang) return element.actorofang->spr.pos.X; diff --git a/source/games/sw/src/player.cpp b/source/games/sw/src/player.cpp index 1c1638efc..309363342 100644 --- a/source/games/sw/src/player.cpp +++ b/source/games/sw/src/player.cpp @@ -4834,7 +4834,7 @@ void FindMainSector(SECTOR_OBJECT* sop) // set it to something valid sop->op_main_sector = §or[0]; - updatesectorz(sx, sy, sop->zmid, &sop->op_main_sector); + updatesectorz(sx, sy, sop->pmid.Z, &sop->op_main_sector); PlaceSectorObject(sop, sx, sy); } diff --git a/source/games/sw/src/save.cpp b/source/games/sw/src/save.cpp index 645a2755e..85c2c00ca 100644 --- a/source/games/sw/src/save.cpp +++ b/source/games/sw/src/save.cpp @@ -638,7 +638,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, SECTOR_OBJECT& w, ("child", w.sp_child, def->sp_child) ("xmid", w.pmid.X, def->pmid.X) ("ymid", w.pmid.Y, def->pmid.Y) - ("zmid", w.zmid, def->zmid) + ("zmid", w.pmid.Z, def->pmid.Z) ("vel", w.vel, def->vel) ("vel_tgt", w.vel_tgt, def->vel_tgt) ("player_xoff", w.player_xoff, def->player_xoff) diff --git a/source/games/sw/src/track.cpp b/source/games/sw/src/track.cpp index a3af0cd8e..337b1cacf 100644 --- a/source/games/sw/src/track.cpp +++ b/source/games/sw/src/track.cpp @@ -718,7 +718,7 @@ void SectorObjectSetupBounds(SECTOR_OBJECT* sop) { sop->pmid.X = BoundActor->spr.pos.X; sop->pmid.Y = BoundActor->spr.pos.Y; - sop->zmid = BoundActor->spr.pos.Z; + sop->pmid.Z = BoundActor->spr.pos.Z; KillActor(BoundActor); } @@ -943,12 +943,12 @@ cont: ASSERT(zmid != -9999999); - sop->zmid = zmid; + sop->pmid.Z = zmid; for (i = 0; sop->so_actors[i] != nullptr; i++) { auto actor = sop->so_actors[i]; - actor->user.pos.Z = sop->zmid - actor->spr.pos.Z; + actor->user.pos.Z = sop->pmid.Z - actor->spr.pos.Z; } } } @@ -1037,14 +1037,14 @@ void SetupSectorObject(sectortype* sectp, short tag) case TAG_OBJECT_CENTER - 500: sop->mid_sector = sectp; - SectorMidPoint(sectp, &sop->pmid.X, &sop->pmid.Y, &sop->zmid); + SectorMidPoint(sectp, &sop->pmid.X, &sop->pmid.Y, &sop->pmid.Z); sop->dir = 1; sop->track = sectp->hitag; // spawn a sprite to make it easier to integrate with sprite routines auto actorNew = SpawnActor(STAT_SO_SP_CHILD, 0, nullptr, sectp, - sop->pmid.X, sop->pmid.Y, sop->zmid, 0, 0); + sop->pmid.X, sop->pmid.Y, sop->pmid.Z, 0, 0); sop->sp_child = actorNew; actorNew->user.sop_parent = sop; actorNew->user.Flags2 |= (SPR2_SPRITE_FAKE_BLOCK); // for damage test @@ -1608,7 +1608,7 @@ void MovePoints(SECTOR_OBJECT* sop, short delta_ang, int nx, int ny) // setting floorz if need be if ((sop->flags & SOBJ_ZMID_FLOOR)) - sop->zmid = sop->mid_sector->floorz; + sop->pmid.Z = sop->mid_sector->floorz; for (sectp = sop->sectp, j = 0; *sectp; sectp++, j++) { @@ -1708,7 +1708,7 @@ PlayerPart: if ((sop->flags & SOBJ_SPRITE_OBJ)) { // Sprite Objects follow zmid - actor->spr.pos.Z = sop->zmid - actor->user.pos.Z; + actor->spr.pos.Z = sop->pmid.Z - actor->user.pos.Z; } else { @@ -2524,7 +2524,7 @@ void DoTrack(SECTOR_OBJECT* sop, short locktics, int *nx, int *ny) // (velocity * difference between the target and the object) // / distance - sop->z_rate = (sop->vel * (sop->zmid - dz)) / dist; + sop->z_rate = (sop->vel * (sop->pmid.Z - dz)) / dist; // take absolute value and convert to pixels (divide by 256) sop->z_rate = PIXZ(labs(sop->z_rate));