From b53e4b824e3b19a65483355dc73eae9701db4219 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Tue, 6 Sep 2022 00:43:53 +0200 Subject: [PATCH] - handle the portals in Duke and Blood. --- source/core/rendering/render.h | 13 +------------ source/games/blood/src/blood.h | 4 +--- source/games/blood/src/mirrors.cpp | 16 +++++----------- source/games/duke/src/premap.cpp | 5 +++-- 4 files changed, 10 insertions(+), 28 deletions(-) diff --git a/source/core/rendering/render.h b/source/core/rendering/render.h index 39d61072b..19943c3eb 100644 --- a/source/core/rendering/render.h +++ b/source/core/rendering/render.h @@ -34,17 +34,6 @@ inline void portalClear() allPortals.Clear(); } -inline int portalAdd(int type, int target, int dx = 0, int dy = 0, int dz = 0) -{ - auto& pt = allPortals[allPortals.Reserve(1)]; - pt.type = type; - if (target >= 0) pt.targets.Push(target); - pt.dx = dx; - pt.dy = dy; - pt.dz = dz; - return allPortals.Size() - 1; -} - inline int portalAdd(int type, int target, const DVector3& offset) { auto& pt = allPortals[allPortals.Reserve(1)]; @@ -52,7 +41,7 @@ inline int portalAdd(int type, int target, const DVector3& offset) if (target >= 0) pt.targets.Push(target); pt.dx = offset.X * worldtoint; pt.dy = offset.Y * worldtoint; - pt.dz = offset.Y * zworldtoint; + pt.dz = offset.Z * zworldtoint; return allPortals.Size() - 1; } diff --git a/source/games/blood/src/blood.h b/source/games/blood/src/blood.h index e53e09448..89ed3f35c 100644 --- a/source/games/blood/src/blood.h +++ b/source/games/blood/src/blood.h @@ -87,9 +87,7 @@ struct MIRROR { int type; int link; - int dx; - int dy; - int dz; + DVector3 diff; int wallnum; }; diff --git a/source/games/blood/src/mirrors.cpp b/source/games/blood/src/mirrors.cpp index 90ac01214..294c6892e 100644 --- a/source/games/blood/src/mirrors.cpp +++ b/source/games/blood/src/mirrors.cpp @@ -128,24 +128,20 @@ void InitMirrors(void) if (sectj->ceilingpicnum != 504) I_Error("Lower link sector %d doesn't have mirror picnum\n", j); mirror[mirrorcnt].type = 2; - mirror[mirrorcnt].dx = link2->int_pos().X - link->int_pos().X; - mirror[mirrorcnt].dy = link2->int_pos().Y - link->int_pos().Y; - mirror[mirrorcnt].dz = link2->int_pos().Z - link->int_pos().Z; + mirror[mirrorcnt].diff = link2->spr.pos - link->spr.pos; mirror[mirrorcnt].wallnum = i; mirror[mirrorcnt].link = j; secti->floorpicnum = 4080 + mirrorcnt; secti->portalflags = PORTAL_SECTOR_FLOOR; - secti->portalnum = portalAdd(PORTAL_SECTOR_FLOOR, j, mirror[mirrorcnt].dx, mirror[mirrorcnt].dy, mirror[mirrorcnt].dz); + secti->portalnum = portalAdd(PORTAL_SECTOR_FLOOR, j, mirror[mirrorcnt].diff); mirrorcnt++; mirror[mirrorcnt].type = 1; - mirror[mirrorcnt].dx = link->int_pos().X - link2->int_pos().X; - mirror[mirrorcnt].dy = link->int_pos().Y - link2->int_pos().Y; - mirror[mirrorcnt].dz = link->int_pos().Z - link2->int_pos().Z; + mirror[mirrorcnt].diff = link->spr.pos - link2->spr.pos; mirror[mirrorcnt].wallnum = j; mirror[mirrorcnt].link = i; sectj->ceilingpicnum = 4080 + mirrorcnt; sectj->portalflags = PORTAL_SECTOR_CEILING; - sectj->portalnum = portalAdd(PORTAL_SECTOR_CEILING, i, mirror[mirrorcnt].dx, mirror[mirrorcnt].dy, mirror[mirrorcnt].dz); + sectj->portalnum = portalAdd(PORTAL_SECTOR_CEILING, i, mirror[mirrorcnt].diff); mirrorcnt++; } } @@ -165,9 +161,7 @@ FSerializer& Serialize(FSerializer& arc, const char* keyname, MIRROR& w, MIRROR* { arc("type", w.type) ("link", w.link) - ("dx", w.dx) - ("dy", w.dy) - ("dz", w.dz) + ("diff", w.diff) ("wallnum", w.wallnum) .EndObject(); } diff --git a/source/games/duke/src/premap.cpp b/source/games/duke/src/premap.cpp index 695af7dff..4c974e705 100644 --- a/source/games/duke/src/premap.cpp +++ b/source/games/duke/src/premap.cpp @@ -877,8 +877,9 @@ static void SpawnPortals() sectortype* s1 = act->sector(), *s2 = act2->sector(); s1->portalflags = PORTAL_SECTOR_FLOOR; s2->portalflags = PORTAL_SECTOR_CEILING; - s1->portalnum = portalAdd(PORTAL_SECTOR_FLOOR, sectnum(s2), act2->int_pos().X - act->int_pos().X, act2->int_pos().Y - act->int_pos().Y, act->spr.hitag); - s2->portalnum = portalAdd(PORTAL_SECTOR_CEILING, sectnum(s1), act->int_pos().X - act2->int_pos().X, act->int_pos().Y - act2->int_pos().Y, act->spr.hitag); + DVector2 diff = act->spr.pos.XY() - act2->spr.pos.XY(); + s1->portalnum = portalAdd(PORTAL_SECTOR_FLOOR, sectnum(s2), DVector3(-diff, act->spr.hitag * zmaptoworld)); + s2->portalnum = portalAdd(PORTAL_SECTOR_CEILING, sectnum(s1), DVector3(diff, act->spr.hitag * zmaptoworld)); processedTags.Push(act->spr.hitag); } else