Skip to content

Commit

Permalink
- Duke: let neartag return pointers
Browse files Browse the repository at this point in the history
  • Loading branch information
coelckers committed Nov 21, 2021
1 parent 719f9cf commit b31966f
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 39 deletions.
6 changes: 3 additions & 3 deletions source/games/duke/src/dukeactor.h
Expand Up @@ -209,15 +209,15 @@ inline int hitscan(int x, int y, int z, int sectnum, int32_t vx, int32_t vy, int
}

inline void neartag(int32_t xs, int32_t ys, int32_t zs, int sectnum, int ange,
int* neartagsector, int* neartagwall, DDukeActor** neartagsprite,
sectortype** neartagsector, walltype** neartagwall, DDukeActor** neartagsprite,
int32_t* neartaghitdist, int32_t neartagrange, uint8_t tagsearch)
{
int16_t nts;
int16_t ntsec, ntwal;
::neartag(xs, ys, zs, sectnum, ange, &ntsec, &ntwal, &nts, neartaghitdist, neartagrange, tagsearch);
*neartagsprite = nts == -1 ? nullptr : &hittype[nts];
*neartagsector = ntsec;
*neartagwall = ntwal;
*neartagsector = ntsec == -1? nullptr : &sector[ntsec];
*neartagwall = ntwal == -1? nullptr : &wall[ntwal];
}


Expand Down
12 changes: 6 additions & 6 deletions source/games/duke/src/gameexec.cpp
Expand Up @@ -2475,18 +2475,18 @@ int ParseState::parse(void)
insptr++;
if( g_sp->sector()->lotag == 0 )
{
int neartagsector, neartagwall;
sectortype* sectp;
walltype* neartagwall;
DDukeActor* neartagsprite;
int32_t neartaghitdist;
neartag(g_sp->x, g_sp->y, g_sp->z - (32 << 8), g_sp->sectnum, g_sp->ang, &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 768L, 1);
if (neartagsector >= 0)
neartag(g_sp->x, g_sp->y, g_sp->z - (32 << 8), g_sp->sectnum, g_sp->ang, &sectp, &neartagwall, &neartagsprite, &neartaghitdist, 768L, 1);
if (sectp)
{
auto sectp = &sector[neartagsector];
if (isanearoperator(sectp->lotag))
if ((sectp->lotag & 0xff) == ST_23_SWINGING_DOOR || sectp->floorz == sectp->ceilingz)
if ((sectp->lotag & 16384) == 0 && (sectp->lotag & 32768) == 0)
{
DukeSectIterator it(neartagsector);
DukeSectIterator it(sectp);
DDukeActor* a2;
while ((a2 = it.Next()))
{
Expand All @@ -2495,7 +2495,7 @@ int ParseState::parse(void)
break;
}
if (a2 == nullptr)
operatesectors(neartagsector, g_ac);
operatesectors(sectnum(sectp), g_ac);
}
}
}
Expand Down
25 changes: 12 additions & 13 deletions source/games/duke/src/sectors_d.cpp
Expand Up @@ -1520,7 +1520,8 @@ void checksectors_d(int snum)
struct player_struct* p;
int j;
walltype* hitscanwall;
int neartagsector = -1, neartagwall = -1;
sectortype* ntsector = nullptr;
walltype* ntwall = nullptr;
DDukeActor* neartagsprite = nullptr;
int neartaghitdist = 0;

Expand Down Expand Up @@ -1606,17 +1607,17 @@ void checksectors_d(int snum)
return;
}
if (p->newOwner != nullptr)
neartag(p->oposx, p->oposy, p->oposz, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
neartag(p->oposx, p->oposy, p->oposz, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &ntsector, &ntwall, &neartagsprite, &neartaghitdist, 1280L, 1);
else
{
neartag(p->pos.x, p->pos.y, p->pos.z, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
neartag(p->pos.x, p->pos.y, p->pos.z + (8 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
neartag(p->pos.x, p->pos.y, p->pos.z + (16 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
neartag(p->pos.x, p->pos.y, p->pos.z, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &ntsector, &ntwall, &neartagsprite, &neartaghitdist, 1280L, 1);
if (neartagsprite == nullptr && ntwall == nullptr && ntsector == nullptr)
neartag(p->pos.x, p->pos.y, p->pos.z + (8 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &ntsector, &ntwall, &neartagsprite, &neartaghitdist, 1280L, 1);
if (neartagsprite == nullptr && ntwall == nullptr && ntsector == nullptr)
neartag(p->pos.x, p->pos.y, p->pos.z + (16 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &ntsector, &ntwall, &neartagsprite, &neartaghitdist, 1280L, 1);
if (neartagsprite == nullptr && ntwall == nullptr && ntsector == nullptr)
{
neartag(p->pos.x, p->pos.y, p->pos.z + (16 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 3);
neartag(p->pos.x, p->pos.y, p->pos.z + (16 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &ntsector, &ntwall, &neartagsprite, &neartaghitdist, 1280L, 3);
if (neartagsprite != nullptr)
{
switch (neartagsprite->s->picnum)
Expand All @@ -1640,12 +1641,10 @@ void checksectors_d(int snum)
}

neartagsprite = nullptr;
neartagwall = -1;
neartagsector = -1;
ntwall = nullptr;
ntsector = nullptr;
}
}
auto ntwall = neartagwall < 0? nullptr : &wall[neartagwall];
auto ntsector = neartagsector < 0 ? nullptr : &sector[neartagsector];

if (p->newOwner == nullptr && neartagsprite == nullptr && ntsector == nullptr && ntwall == nullptr)
if (isanunderoperator(p->GetActor()->getSector()->lotag))
Expand Down
32 changes: 15 additions & 17 deletions source/games/duke/src/sectors_r.cpp
Expand Up @@ -2440,9 +2440,10 @@ void checksectors_r(int snum)
int oldz;
struct player_struct* p;
walltype* hitscanwall;
int neartagsector, neartagwall;
DDukeActor* neartagsprite;
int neartaghitdist;
sectortype* ntsector = nullptr;
walltype* ntwall = nullptr;
DDukeActor* neartagsprite = nullptr;
int neartaghitdist = 0;

p = &ps[snum];
auto pact = p->GetActor();
Expand Down Expand Up @@ -2559,21 +2560,21 @@ void checksectors_r(int snum)
}
return;
}
neartag(p->pos.x, p->pos.y, p->pos.z, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 3);
neartag(p->pos.x, p->pos.y, p->pos.z, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &ntsector, &ntwall, &neartagsprite, &neartaghitdist, 1280L, 3);
}

if (p->newOwner != nullptr)
neartag(p->oposx, p->oposy, p->oposz, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
neartag(p->oposx, p->oposy, p->oposz, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &ntsector, &ntwall, &neartagsprite, &neartaghitdist, 1280L, 1);
else
{
neartag(p->pos.x, p->pos.y, p->pos.z, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
neartag(p->pos.x, p->pos.y, p->pos.z + (8 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
neartag(p->pos.x, p->pos.y, p->pos.z + (16 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 1);
if (neartagsprite == nullptr && neartagwall == -1 && neartagsector == -1)
neartag(p->pos.x, p->pos.y, p->pos.z, p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &ntsector, &ntwall, &neartagsprite, &neartaghitdist, 1280L, 1);
if (neartagsprite == nullptr && ntwall == nullptr && ntsector == nullptr)
neartag(p->pos.x, p->pos.y, p->pos.z + (8 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &ntsector, &ntwall, &neartagsprite, &neartaghitdist, 1280L, 1);
if (neartagsprite == nullptr && ntwall == nullptr && ntsector == nullptr)
neartag(p->pos.x, p->pos.y, p->pos.z + (16 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &ntsector, &ntwall, &neartagsprite, &neartaghitdist, 1280L, 1);
if (neartagsprite == nullptr && ntwall == nullptr && ntsector == nullptr)
{
neartag(p->pos.x, p->pos.y, p->pos.z + (16 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &neartagsector, &neartagwall, &neartagsprite, &neartaghitdist, 1280L, 3);
neartag(p->pos.x, p->pos.y, p->pos.z + (16 << 8), p->GetActor()->s->sectnum, p->angle.oang.asbuild(), &ntsector, &ntwall, &neartagsprite, &neartaghitdist, 1280L, 3);
if (neartagsprite != nullptr)
{
switch (neartagsprite->s->picnum)
Expand All @@ -2590,18 +2591,15 @@ void checksectors_r(int snum)
}

neartagsprite = nullptr;
neartagwall = -1;
neartagsector = -1;
ntwall = nullptr;
ntsector = nullptr;
}
}
auto ntwall = neartagwall < 0? nullptr : &wall[neartagwall];
auto ntsector = neartagsector < 0 ? nullptr : &sector[neartagsector];

if (p->newOwner == nullptr && neartagsprite == nullptr && ntsector == nullptr && ntwall == nullptr)
if (isanunderoperator(p->GetActor()->getSector()->lotag))
ntsector = p->GetActor()->s->sector();


if (ntsector && (ntsector->lotag & 16384))
return;

Expand Down

0 comments on commit b31966f

Please sign in to comment.