- handle the portals in Duke and Blood.

This commit is contained in:
Christoph Oelckers 2022-09-06 00:43:53 +02:00
parent 0e628ed222
commit b53e4b824e
4 changed files with 10 additions and 28 deletions

View file

@ -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;
}

View file

@ -87,9 +87,7 @@ struct MIRROR
{
int type;
int link;
int dx;
int dy;
int dz;
DVector3 diff;
int wallnum;
};

View file

@ -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();
}

View file

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