mirror of
https://github.com/ZDoom/raze-gles.git
synced 2024-12-25 19:20:46 +00:00
sector.c and related cleanup, round 2.
- use SPRITES_OF* iterator macros - new function: E_SpriteIsValid(); add some safety checks (e.g. hitag used as sprite index) - the rest is mostly "the usual code transformations" git-svn-id: https://svn.eduke32.com/eduke32@4281 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
8fbefe829a
commit
ab5c89430c
3 changed files with 182 additions and 233 deletions
|
@ -1203,6 +1203,11 @@ static inline int32_t redwallp(const walltype *wal)
|
||||||
return (wal->nextwall >= 0 && wal->nextsector >= 0);
|
return (wal->nextwall >= 0 && wal->nextsector >= 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int32_t E_SpriteIsValid(const int32_t i)
|
||||||
|
{
|
||||||
|
return ((unsigned)i < MAXSPRITES && sprite[i].statnum != MAXSTATUS);
|
||||||
|
}
|
||||||
|
|
||||||
void alignceilslope(int16_t dasect, int32_t x, int32_t y, int32_t z);
|
void alignceilslope(int16_t dasect, int32_t x, int32_t y, int32_t z);
|
||||||
void alignflorslope(int16_t dasect, int32_t x, int32_t y, int32_t z);
|
void alignflorslope(int16_t dasect, int32_t x, int32_t y, int32_t z);
|
||||||
int32_t sectorofwall(int16_t theline);
|
int32_t sectorofwall(int16_t theline);
|
||||||
|
|
|
@ -11915,7 +11915,7 @@ int32_t nextsectorneighborz(int16_t sectnum, int32_t thez, int16_t topbottom, in
|
||||||
int32_t nextz = (direction==1) ? INT32_MAX : INT32_MIN;
|
int32_t nextz = (direction==1) ? INT32_MAX : INT32_MIN;
|
||||||
int32_t sectortouse = -1;
|
int32_t sectortouse = -1;
|
||||||
|
|
||||||
walltype *wal = &wall[sector[sectnum].wallptr];
|
const walltype *wal = &wall[sector[sectnum].wallptr];
|
||||||
int32_t i = sector[sectnum].wallnum;
|
int32_t i = sector[sectnum].wallnum;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -11924,20 +11924,17 @@ int32_t nextsectorneighborz(int16_t sectnum, int32_t thez, int16_t topbottom, in
|
||||||
|
|
||||||
if (ns >= 0)
|
if (ns >= 0)
|
||||||
{
|
{
|
||||||
const int32_t testz = (topbottom==1) ?
|
const int32_t testz = (topbottom == 1) ?
|
||||||
sector[ns].floorz : sector[ns].ceilingz;
|
sector[ns].floorz : sector[ns].ceilingz;
|
||||||
|
|
||||||
int32_t ok;
|
const int32_t update = (direction == 1) ?
|
||||||
|
(testz > thez && testz < nextz) :
|
||||||
|
(testz < thez && testz > nextz);
|
||||||
|
|
||||||
if (direction == 1)
|
if (update)
|
||||||
ok = (testz > thez && testz < nextz);
|
|
||||||
else
|
|
||||||
ok = (testz < thez && testz > nextz);
|
|
||||||
|
|
||||||
if (ok)
|
|
||||||
{
|
{
|
||||||
nextz = testz;
|
nextz = testz;
|
||||||
sectortouse = wal->nextsector;
|
sectortouse = ns;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -11946,7 +11943,7 @@ int32_t nextsectorneighborz(int16_t sectnum, int32_t thez, int16_t topbottom, in
|
||||||
}
|
}
|
||||||
while (i != 0);
|
while (i != 0);
|
||||||
|
|
||||||
return(sectortouse);
|
return sectortouse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -46,19 +46,22 @@ int32_t A_CallSound(int32_t sn, int32_t whatsprite)
|
||||||
|
|
||||||
for (SPRITES_OF_SECT(sn, i))
|
for (SPRITES_OF_SECT(sn, i))
|
||||||
{
|
{
|
||||||
if (PN == MUSICANDSFX && (unsigned)SLT < 1000) // XXX: in other places, 999
|
const int32_t snd = sprite[i].lotag;
|
||||||
|
EDUKE32_STATIC_ASSERT(MAXSOUNDS >= 1000);
|
||||||
|
|
||||||
|
if (PN == MUSICANDSFX && (unsigned)snd < 1000) // XXX: in other places, 999
|
||||||
{
|
{
|
||||||
if (whatsprite == -1)
|
if (whatsprite == -1)
|
||||||
whatsprite = i;
|
whatsprite = i;
|
||||||
|
|
||||||
if (T1 == 0)
|
if (T1 == 0)
|
||||||
{
|
{
|
||||||
if ((g_sounds[SLT].m & SF_GLOBAL) == 0)
|
if ((g_sounds[snd].m & SF_GLOBAL) == 0)
|
||||||
{
|
{
|
||||||
if (SLT)
|
if (snd)
|
||||||
{
|
{
|
||||||
A_PlaySound(SLT,whatsprite);
|
A_PlaySound(snd, whatsprite);
|
||||||
if (SHT && SLT != SHT && SHT < MAXSOUNDS)
|
if (SHT && snd != SHT && SHT < MAXSOUNDS)
|
||||||
S_StopEnvSound(SHT,T6);
|
S_StopEnvSound(SHT,T6);
|
||||||
T6 = whatsprite;
|
T6 = whatsprite;
|
||||||
}
|
}
|
||||||
|
@ -69,15 +72,18 @@ int32_t A_CallSound(int32_t sn, int32_t whatsprite)
|
||||||
}
|
}
|
||||||
else if (SHT < MAXSOUNDS)
|
else if (SHT < MAXSOUNDS)
|
||||||
{
|
{
|
||||||
if (SHT) A_PlaySound(SHT,whatsprite);
|
if (SHT)
|
||||||
if ((g_sounds[SLT].m & SF_LOOP) || (SHT && SHT != SLT))
|
A_PlaySound(SHT, whatsprite);
|
||||||
S_StopEnvSound(SLT,T6);
|
if ((g_sounds[snd].m & SF_LOOP) || (SHT && SHT != snd))
|
||||||
|
S_StopEnvSound(snd, T6);
|
||||||
T6 = whatsprite;
|
T6 = whatsprite;
|
||||||
T1 = 0;
|
T1 = 0;
|
||||||
}
|
}
|
||||||
return SLT;
|
|
||||||
|
return snd;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -271,13 +277,9 @@ void G_DoSectorAnimations(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (v > 0)
|
if (v > 0)
|
||||||
{
|
a = min(a+v, animategoal[i]);
|
||||||
a = min(a+v,animategoal[i]);
|
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
a = max(a+v, animategoal[i]);
|
||||||
a = max(a+v,animategoal[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (animateptr[i] == §or[animatesect[i]].floorz)
|
if (animateptr[i] == §or[animatesect[i]].floorz)
|
||||||
{
|
{
|
||||||
|
@ -470,59 +472,58 @@ void G_AnimateWalls(void)
|
||||||
|
|
||||||
int32_t G_ActivateWarpElevators(int32_t s, int32_t d) //Parm = sectoreffectornum
|
int32_t G_ActivateWarpElevators(int32_t s, int32_t d) //Parm = sectoreffectornum
|
||||||
{
|
{
|
||||||
int32_t i = headspritestat[STAT_EFFECTOR], sn = sprite[s].sectnum;
|
int32_t i;
|
||||||
|
const int32_t sn = sprite[s].sectnum;
|
||||||
|
|
||||||
while (i >= 0)
|
for (SPRITES_OF(STAT_EFFECTOR, i))
|
||||||
{
|
|
||||||
if (SLT == SE_17_WARP_ELEVATOR && SHT == sprite[s].hitag)
|
if (SLT == SE_17_WARP_ELEVATOR && SHT == sprite[s].hitag)
|
||||||
if ((klabs(sector[sn].floorz-actor[s].t_data[2]) > SP) ||
|
{
|
||||||
(sector[SECT].hitag == (sector[sn].hitag-d)))
|
if (klabs(sector[sn].floorz - actor[s].t_data[2]) > SP ||
|
||||||
|
sector[SECT].hitag == sector[sn].hitag - d)
|
||||||
break;
|
break;
|
||||||
i = nextspritestat[i];
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (i == -1)
|
if (i == -1)
|
||||||
return 1; // No find
|
return 1; // No find
|
||||||
else
|
|
||||||
A_PlaySound(d ? ELEVATOR_ON : ELEVATOR_OFF, s);
|
|
||||||
|
|
||||||
i = headspritestat[STAT_EFFECTOR];
|
A_PlaySound(d ? ELEVATOR_ON : ELEVATOR_OFF, s);
|
||||||
do
|
|
||||||
{
|
for (SPRITES_OF(STAT_EFFECTOR, i))
|
||||||
if (SLT == SE_17_WARP_ELEVATOR && SHT == sprite[s].hitag)
|
if (SLT == SE_17_WARP_ELEVATOR && SHT == sprite[s].hitag)
|
||||||
T1 = T2 = d; //Make all check warp
|
T1 = T2 = d; //Make all check warp
|
||||||
i = nextspritestat[i];
|
|
||||||
}
|
|
||||||
while (i >= 0);
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void G_OperateSectors(int32_t sn, int32_t ii)
|
void G_OperateSectors(int32_t sn, int32_t ii)
|
||||||
{
|
{
|
||||||
int32_t j=0, l, q, startwall, endwall;
|
int32_t j=0, l;
|
||||||
int32_t i;
|
int32_t i;
|
||||||
sectortype *sptr = §or[sn];
|
sectortype *const sptr = §or[sn];
|
||||||
|
|
||||||
switch (sptr->lotag&(0xffff-49152))
|
switch (sptr->lotag&(0xffff-49152))
|
||||||
{
|
{
|
||||||
|
|
||||||
case ST_30_ROTATE_RISE_BRIDGE:
|
case ST_30_ROTATE_RISE_BRIDGE:
|
||||||
j = sector[sn].hitag;
|
j = sector[sn].hitag;
|
||||||
if (actor[j].tempang == 0 || actor[j].tempang == 256)
|
|
||||||
A_CallSound(sn,ii);
|
if (E_SpriteIsValid(j))
|
||||||
if (sprite[j].extra == 1)
|
{
|
||||||
sprite[j].extra = 3;
|
if (actor[j].tempang == 0 || actor[j].tempang == 256)
|
||||||
else sprite[j].extra = 1;
|
A_CallSound(sn,ii);
|
||||||
|
sprite[j].extra = (sprite[j].extra == 1) ? 3 : 1;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ST_31_TWO_WAY_TRAIN:
|
case ST_31_TWO_WAY_TRAIN:
|
||||||
|
|
||||||
j = sector[sn].hitag;
|
j = sector[sn].hitag;
|
||||||
if (actor[j].t_data[4] == 0)
|
|
||||||
actor[j].t_data[4] = 1;
|
|
||||||
|
|
||||||
A_CallSound(sn,ii);
|
if (E_SpriteIsValid(j))
|
||||||
|
{
|
||||||
|
if (actor[j].t_data[4] == 0)
|
||||||
|
actor[j].t_data[4] = 1;
|
||||||
|
|
||||||
|
A_CallSound(sn,ii);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ST_26_SPLITTING_ST_DOOR: //The split doors
|
case ST_26_SPLITTING_ST_DOOR: //The split doors
|
||||||
|
@ -542,16 +543,16 @@ void G_OperateSectors(int32_t sn, int32_t ii)
|
||||||
|
|
||||||
case ST_9_SLIDING_ST_DOOR:
|
case ST_9_SLIDING_ST_DOOR:
|
||||||
{
|
{
|
||||||
int32_t dax,day,dax2,day2,sp;
|
int32_t dax, day;
|
||||||
int32_t wallfind[2];
|
int32_t wallfind[2];
|
||||||
|
|
||||||
startwall = sptr->wallptr;
|
const int32_t startwall = sptr->wallptr;
|
||||||
endwall = startwall+sptr->wallnum-1;
|
const int32_t endwall = startwall+sptr->wallnum-1;
|
||||||
|
|
||||||
sp = sptr->extra>>4;
|
const int32_t sp = sptr->extra>>4;
|
||||||
|
|
||||||
//first find center point by averaging all points
|
//first find center point by averaging all points
|
||||||
dax = 0L, day = 0L;
|
dax = 0, day = 0;
|
||||||
for (i=startwall; i<=endwall; i++)
|
for (i=startwall; i<=endwall; i++)
|
||||||
{
|
{
|
||||||
dax += wall[i].x;
|
dax += wall[i].x;
|
||||||
|
@ -565,7 +566,7 @@ void G_OperateSectors(int32_t sn, int32_t ii)
|
||||||
wallfind[0] = -1;
|
wallfind[0] = -1;
|
||||||
wallfind[1] = -1;
|
wallfind[1] = -1;
|
||||||
for (i=startwall; i<=endwall; i++)
|
for (i=startwall; i<=endwall; i++)
|
||||||
if ((wall[i].x == dax) || (wall[i].y == day))
|
if (wall[i].x == dax || wall[i].y == day)
|
||||||
{
|
{
|
||||||
if (wallfind[0] == -1)
|
if (wallfind[0] == -1)
|
||||||
wallfind[0] = i;
|
wallfind[0] = i;
|
||||||
|
@ -577,51 +578,51 @@ void G_OperateSectors(int32_t sn, int32_t ii)
|
||||||
|
|
||||||
for (j=0; j<2; j++)
|
for (j=0; j<2; j++)
|
||||||
{
|
{
|
||||||
if ((wall[wallfind[j]].x == dax) && (wall[wallfind[j]].y == day))
|
const int32_t wf = wallfind[j];
|
||||||
|
int32_t dax2, day2;
|
||||||
|
|
||||||
|
i = wf-1;
|
||||||
|
if (i < startwall) i = endwall;
|
||||||
|
dax2 = ((wall[i].x+wall[wall[wf].point2].x)>>1) - wall[wf].x;
|
||||||
|
day2 = ((wall[i].y+wall[wall[wf].point2].y)>>1) - wall[wf].y;
|
||||||
|
|
||||||
|
if (wall[wf].x == dax && wall[wf].y == day)
|
||||||
{
|
{
|
||||||
//find what direction door should open by averaging the
|
//find what direction door should open by averaging the
|
||||||
// 2 neighboring points of wallfind[0] & wallfind[1].
|
// 2 neighboring points of wallfind[0] & wallfind[1].
|
||||||
i = wallfind[j]-1;
|
|
||||||
if (i < startwall) i = endwall;
|
|
||||||
dax2 = ((wall[i].x+wall[wall[wallfind[j]].point2].x)>>1)-wall[wallfind[j]].x;
|
|
||||||
day2 = ((wall[i].y+wall[wall[wallfind[j]].point2].y)>>1)-wall[wallfind[j]].y;
|
|
||||||
if (dax2 != 0)
|
if (dax2 != 0)
|
||||||
{
|
{
|
||||||
dax2 = wall[wall[wall[wallfind[j]].point2].point2].x;
|
dax2 = wall[wall[wall[wf].point2].point2].x;
|
||||||
dax2 -= wall[wall[wallfind[j]].point2].x;
|
dax2 -= wall[wall[wf].point2].x;
|
||||||
SetAnimation(sn,&wall[wallfind[j]].x,wall[wallfind[j]].x+dax2,sp);
|
SetAnimation(sn,&wall[wf].x,wall[wf].x+dax2,sp);
|
||||||
SetAnimation(sn,&wall[i].x,wall[i].x+dax2,sp);
|
SetAnimation(sn,&wall[i].x,wall[i].x+dax2,sp);
|
||||||
SetAnimation(sn,&wall[wall[wallfind[j]].point2].x,wall[wall[wallfind[j]].point2].x+dax2,sp);
|
SetAnimation(sn,&wall[wall[wf].point2].x,wall[wall[wf].point2].x+dax2,sp);
|
||||||
A_CallSound(sn,ii);
|
A_CallSound(sn,ii);
|
||||||
}
|
}
|
||||||
else if (day2 != 0)
|
else if (day2 != 0)
|
||||||
{
|
{
|
||||||
day2 = wall[wall[wall[wallfind[j]].point2].point2].y;
|
day2 = wall[wall[wall[wf].point2].point2].y;
|
||||||
day2 -= wall[wall[wallfind[j]].point2].y;
|
day2 -= wall[wall[wf].point2].y;
|
||||||
SetAnimation(sn,&wall[wallfind[j]].y,wall[wallfind[j]].y+day2,sp);
|
SetAnimation(sn,&wall[wf].y,wall[wf].y+day2,sp);
|
||||||
SetAnimation(sn,&wall[i].y,wall[i].y+day2,sp);
|
SetAnimation(sn,&wall[i].y,wall[i].y+day2,sp);
|
||||||
SetAnimation(sn,&wall[wall[wallfind[j]].point2].y,wall[wall[wallfind[j]].point2].y+day2,sp);
|
SetAnimation(sn,&wall[wall[wf].point2].y,wall[wall[wf].point2].y+day2,sp);
|
||||||
A_CallSound(sn,ii);
|
A_CallSound(sn,ii);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
i = wallfind[j]-1;
|
|
||||||
if (i < startwall) i = endwall;
|
|
||||||
dax2 = ((wall[i].x+wall[wall[wallfind[j]].point2].x)>>1)-wall[wallfind[j]].x;
|
|
||||||
day2 = ((wall[i].y+wall[wall[wallfind[j]].point2].y)>>1)-wall[wallfind[j]].y;
|
|
||||||
if (dax2 != 0)
|
if (dax2 != 0)
|
||||||
{
|
{
|
||||||
SetAnimation(sn,&wall[wallfind[j]].x,dax,sp);
|
SetAnimation(sn,&wall[wf].x,dax,sp);
|
||||||
SetAnimation(sn,&wall[i].x,dax+dax2,sp);
|
SetAnimation(sn,&wall[i].x,dax+dax2,sp);
|
||||||
SetAnimation(sn,&wall[wall[wallfind[j]].point2].x,dax+dax2,sp);
|
SetAnimation(sn,&wall[wall[wf].point2].x,dax+dax2,sp);
|
||||||
A_CallSound(sn,ii);
|
A_CallSound(sn,ii);
|
||||||
}
|
}
|
||||||
else if (day2 != 0)
|
else if (day2 != 0)
|
||||||
{
|
{
|
||||||
SetAnimation(sn,&wall[wallfind[j]].y,day,sp);
|
SetAnimation(sn,&wall[wf].y,day,sp);
|
||||||
SetAnimation(sn,&wall[i].y,day+day2,sp);
|
SetAnimation(sn,&wall[i].y,day+day2,sp);
|
||||||
SetAnimation(sn,&wall[wall[wallfind[j]].point2].y,day+day2,sp);
|
SetAnimation(sn,&wall[wall[wf].point2].y,day+day2,sp);
|
||||||
A_CallSound(sn,ii);
|
A_CallSound(sn,ii);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -634,12 +635,12 @@ void G_OperateSectors(int32_t sn, int32_t ii)
|
||||||
if (sprite[ii].picnum != APLAYER)
|
if (sprite[ii].picnum != APLAYER)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
i = headspritesect[sn];
|
for (SPRITES_OF_SECT(sn, i))
|
||||||
while (i >= 0)
|
if (PN==SECTOREFFECTOR && SLT == SE_17_WARP_ELEVATOR)
|
||||||
{
|
break;
|
||||||
if (PN==SECTOREFFECTOR && SLT == SE_17_WARP_ELEVATOR) break;
|
|
||||||
i = nextspritesect[i];
|
if (i < 0)
|
||||||
}
|
return;
|
||||||
|
|
||||||
if (sprite[ii].sectnum == sn)
|
if (sprite[ii].sectnum == sn)
|
||||||
{
|
{
|
||||||
|
@ -647,7 +648,6 @@ void G_OperateSectors(int32_t sn, int32_t ii)
|
||||||
G_ActivateWarpElevators(i,1);
|
G_ActivateWarpElevators(i,1);
|
||||||
else if (G_ActivateWarpElevators(i,1))
|
else if (G_ActivateWarpElevators(i,1))
|
||||||
G_ActivateWarpElevators(i,-1);
|
G_ActivateWarpElevators(i,-1);
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -691,6 +691,8 @@ void G_OperateSectors(int32_t sn, int32_t ii)
|
||||||
|
|
||||||
if (i==-1)
|
if (i==-1)
|
||||||
{
|
{
|
||||||
|
int32_t q;
|
||||||
|
|
||||||
i = nextsectorneighborz(sn,sptr->floorz,1,-1);
|
i = nextsectorneighborz(sn,sptr->floorz,1,-1);
|
||||||
if (i==-1) i = nextsectorneighborz(sn,sptr->floorz,1,1);
|
if (i==-1) i = nextsectorneighborz(sn,sptr->floorz,1,1);
|
||||||
if (i==-1) return;
|
if (i==-1) return;
|
||||||
|
@ -705,19 +707,14 @@ void G_OperateSectors(int32_t sn, int32_t ii)
|
||||||
|
|
||||||
case ST_29_TEETH_DOOR:
|
case ST_29_TEETH_DOOR:
|
||||||
|
|
||||||
i = headspritestat[STAT_EFFECTOR]; //Effectors
|
for (SPRITES_OF(STAT_EFFECTOR, i))
|
||||||
while (i >= 0)
|
if (SLT == SE_22_TEETH_DOOR && SHT == sptr->hitag)
|
||||||
{
|
|
||||||
if ((SLT == SE_22_TEETH_DOOR) &&
|
|
||||||
(SHT == sptr->hitag))
|
|
||||||
{
|
{
|
||||||
sector[SECT].extra = -sector[SECT].extra;
|
sector[SECT].extra = -sector[SECT].extra;
|
||||||
|
|
||||||
T1 = sn;
|
T1 = sn;
|
||||||
T2 = 1;
|
T2 = 1;
|
||||||
}
|
}
|
||||||
i = nextspritestat[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
A_CallSound(sn, ii);
|
A_CallSound(sn, ii);
|
||||||
|
|
||||||
|
@ -755,16 +752,13 @@ REDODOOR:
|
||||||
|
|
||||||
if (sptr->lotag&0x8000)
|
if (sptr->lotag&0x8000)
|
||||||
{
|
{
|
||||||
i = headspritesect[sn];
|
for (SPRITES_OF_SECT(sn, i))
|
||||||
while (i >= 0)
|
|
||||||
{
|
|
||||||
if (sprite[i].statnum == STAT_EFFECTOR && SLT==SE_9_DOWN_OPEN_DOOR_LIGHTS)
|
if (sprite[i].statnum == STAT_EFFECTOR && SLT==SE_9_DOWN_OPEN_DOOR_LIGHTS)
|
||||||
{
|
{
|
||||||
j = SZ;
|
j = SZ;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
i = nextspritesect[i];
|
|
||||||
}
|
|
||||||
if (i==-1)
|
if (i==-1)
|
||||||
j = sptr->floorz;
|
j = sptr->floorz;
|
||||||
}
|
}
|
||||||
|
@ -794,7 +788,6 @@ REDODOOR:
|
||||||
if (animategoal[sn] == sptr->ceilingz)
|
if (animategoal[sn] == sptr->ceilingz)
|
||||||
animategoal[i] = sector[nextsectorneighborz(sn,sptr->ceilingz,1,1)].floorz;
|
animategoal[i] = sector[nextsectorneighborz(sn,sptr->ceilingz,1,1)].floorz;
|
||||||
else animategoal[i] = sptr->ceilingz;
|
else animategoal[i] = sptr->ceilingz;
|
||||||
j = animategoal[i];
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -811,18 +804,16 @@ REDODOOR:
|
||||||
|
|
||||||
case ST_22_SPLITTING_DOOR:
|
case ST_22_SPLITTING_DOOR:
|
||||||
|
|
||||||
// REDODOOR22:
|
if (sptr->lotag&0x8000)
|
||||||
|
|
||||||
if ((sptr->lotag&0x8000))
|
|
||||||
{
|
{
|
||||||
q = (sptr->ceilingz+sptr->floorz)>>1;
|
int32_t q = (sptr->ceilingz+sptr->floorz)>>1;
|
||||||
j = SetAnimation(sn,&sptr->floorz,q,sptr->extra);
|
j = SetAnimation(sn, &sptr->floorz, q, sptr->extra);
|
||||||
j = SetAnimation(sn,&sptr->ceilingz,q,sptr->extra);
|
j = SetAnimation(sn, &sptr->ceilingz, q, sptr->extra);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int32_t fneigh=nextsectorneighborz(sn,sptr->floorz,1,1);
|
int32_t fneigh = nextsectorneighborz(sn, sptr->floorz, 1, 1);
|
||||||
int32_t cneigh=nextsectorneighborz(sn,sptr->ceilingz,-1,-1);
|
int32_t cneigh = nextsectorneighborz(sn, sptr->ceilingz, -1, -1);
|
||||||
|
|
||||||
if (fneigh>=0 && cneigh>=0)
|
if (fneigh>=0 && cneigh>=0)
|
||||||
{
|
{
|
||||||
|
@ -846,121 +837,102 @@ REDODOOR:
|
||||||
case ST_23_SWINGING_DOOR: //Swingdoor
|
case ST_23_SWINGING_DOOR: //Swingdoor
|
||||||
|
|
||||||
j = -1;
|
j = -1;
|
||||||
q = 0;
|
|
||||||
|
|
||||||
i = headspritestat[STAT_EFFECTOR];
|
for (SPRITES_OF(STAT_EFFECTOR, i))
|
||||||
while (i >= 0)
|
|
||||||
{
|
|
||||||
if (SLT == SE_11_SWINGING_DOOR && SECT == sn && !T5)
|
if (SLT == SE_11_SWINGING_DOOR && SECT == sn && !T5)
|
||||||
{
|
{
|
||||||
j = i;
|
j = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
i = nextspritestat[i];
|
|
||||||
}
|
if (i < 0)
|
||||||
if (i<0)
|
|
||||||
{
|
{
|
||||||
OSD_Printf("WARNING: SE23 i<0!\n");
|
OSD_Printf("WARNING: SE23 i<0!\n");
|
||||||
return;
|
return;
|
||||||
} // JBF
|
} // JBF
|
||||||
|
|
||||||
l = sector[SECT].lotag&0x8000;
|
l = sector[SECT].lotag&0x8000;
|
||||||
|
|
||||||
if (j >= 0)
|
if (j >= 0)
|
||||||
{
|
{
|
||||||
i = headspritestat[STAT_EFFECTOR];
|
int32_t playedsnd = 0;
|
||||||
while (i >= 0)
|
|
||||||
{
|
for (SPRITES_OF(STAT_EFFECTOR, i))
|
||||||
if (l == (sector[SECT].lotag&0x8000) && SLT == SE_11_SWINGING_DOOR && sprite[j].hitag == SHT && !T5)
|
if (l == (sector[SECT].lotag&0x8000) && SLT == SE_11_SWINGING_DOOR && sprite[j].hitag == SHT && !T5)
|
||||||
{
|
{
|
||||||
if (sector[SECT].lotag&0x8000) sector[SECT].lotag &= 0x7fff;
|
if (sector[SECT].lotag&0x8000) sector[SECT].lotag &= 0x7fff;
|
||||||
else sector[SECT].lotag |= 0x8000;
|
else sector[SECT].lotag |= 0x8000;
|
||||||
|
|
||||||
T5 = 1;
|
T5 = 1;
|
||||||
T4 = -T4;
|
T4 = -T4;
|
||||||
if (q == 0)
|
|
||||||
|
if (!playedsnd)
|
||||||
{
|
{
|
||||||
A_CallSound(sn,i);
|
A_CallSound(sn,i);
|
||||||
q = 1;
|
playedsnd = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i = nextspritestat[i];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case ST_25_SLIDING_DOOR: //Subway type sliding doors
|
case ST_25_SLIDING_DOOR: //Subway type sliding doors
|
||||||
|
|
||||||
j = headspritestat[STAT_EFFECTOR];
|
for (SPRITES_OF(STAT_EFFECTOR, j))
|
||||||
while (j >= 0)//Find the sprite
|
if (sprite[j].lotag == SE_15_SLIDING_DOOR && sprite[j].sectnum == sn)
|
||||||
{
|
|
||||||
if ((sprite[j].lotag) == SE_15_SLIDING_DOOR && sprite[j].sectnum == sn)
|
|
||||||
break; //Found the sectoreffector.
|
break; //Found the sectoreffector.
|
||||||
j = nextspritestat[j];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (j < 0)
|
if (j < 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
i = headspritestat[STAT_EFFECTOR];
|
for (SPRITES_OF(STAT_EFFECTOR, i))
|
||||||
while (i >= 0)
|
|
||||||
{
|
|
||||||
if (SHT==sprite[j].hitag)
|
if (SHT==sprite[j].hitag)
|
||||||
{
|
{
|
||||||
if (SLT == SE_15_SLIDING_DOOR)
|
if (SLT == SE_15_SLIDING_DOOR)
|
||||||
{
|
{
|
||||||
sector[SECT].lotag ^= 0x8000; // Toggle the open or close
|
sector[SECT].lotag ^= 0x8000; // Toggle the open or close
|
||||||
SA += 1024;
|
SA += 1024;
|
||||||
if (T5) A_CallSound(SECT,i);
|
|
||||||
|
if (T5)
|
||||||
|
A_CallSound(SECT,i);
|
||||||
A_CallSound(SECT,i);
|
A_CallSound(SECT,i);
|
||||||
if (sector[SECT].lotag&0x8000) T5 = 1;
|
|
||||||
else T5 = 2;
|
T5 = (sector[SECT].lotag&0x8000) ? 1 : 2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i = nextspritestat[i];
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case ST_27_STRETCH_BRIDGE: //Extended bridge
|
case ST_27_STRETCH_BRIDGE: //Extended bridge
|
||||||
|
|
||||||
j = headspritestat[STAT_EFFECTOR];
|
for (SPRITES_OF(STAT_EFFECTOR, j))
|
||||||
while (j >= 0)
|
|
||||||
{
|
|
||||||
if ((sprite[j].lotag&0xff)==SE_20_STRETCH_BRIDGE && sprite[j].sectnum == sn) //Bridge
|
if ((sprite[j].lotag&0xff)==SE_20_STRETCH_BRIDGE && sprite[j].sectnum == sn) //Bridge
|
||||||
{
|
{
|
||||||
|
|
||||||
sector[sn].lotag ^= 0x8000;
|
sector[sn].lotag ^= 0x8000;
|
||||||
if (sector[sn].lotag&0x8000) //OPENING
|
// Highest bit now set means we're opening.
|
||||||
actor[j].t_data[0] = 1;
|
|
||||||
else actor[j].t_data[0] = 2;
|
actor[j].t_data[0] = (sector[sn].lotag&0x8000) ? 1 : 2;
|
||||||
A_CallSound(sn,ii);
|
A_CallSound(sn,ii);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
j = nextspritestat[j];
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
|
|
||||||
|
return;
|
||||||
|
|
||||||
case ST_28_DROP_FLOOR:
|
case ST_28_DROP_FLOOR:
|
||||||
//activate the rest of them
|
//activate the rest of them
|
||||||
|
|
||||||
j = headspritesect[sn];
|
for (SPRITES_OF_SECT(sn, j))
|
||||||
while (j >= 0)
|
|
||||||
{
|
|
||||||
if (sprite[j].statnum==STAT_EFFECTOR && (sprite[j].lotag&0xff)==SE_21_DROP_FLOOR)
|
if (sprite[j].statnum==STAT_EFFECTOR && (sprite[j].lotag&0xff)==SE_21_DROP_FLOOR)
|
||||||
break; //Found it
|
break;
|
||||||
j = nextspritesect[j];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (j >= 0) // PK: The matching SE21 might have gone, see SE_21_KILLIT in actors.c
|
if (j >= 0) // PK: The matching SE21 might have gone, see SE_21_KILLIT in actors.c
|
||||||
{
|
{
|
||||||
j = sprite[j].hitag;
|
j = sprite[j].hitag;
|
||||||
|
|
||||||
l = headspritestat[STAT_EFFECTOR];
|
for (SPRITES_OF(STAT_EFFECTOR, l))
|
||||||
while (l >= 0)
|
|
||||||
{
|
{
|
||||||
if ((sprite[l].lotag&0xff)==SE_21_DROP_FLOOR && !actor[l].t_data[0] &&
|
if ((sprite[l].lotag&0xff)==SE_21_DROP_FLOOR && !actor[l].t_data[0] &&
|
||||||
(sprite[l].hitag) == j)
|
sprite[l].hitag == j)
|
||||||
actor[l].t_data[0] = 1;
|
actor[l].t_data[0] = 1;
|
||||||
l = nextspritestat[l];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
A_CallSound(sn,ii);
|
A_CallSound(sn,ii);
|
||||||
|
@ -994,13 +966,12 @@ void G_OperateRespawns(int32_t low)
|
||||||
|
|
||||||
void G_OperateActivators(int32_t low, int32_t snum)
|
void G_OperateActivators(int32_t low, int32_t snum)
|
||||||
{
|
{
|
||||||
int32_t i, j, k;
|
int32_t i, nexti, j, k;
|
||||||
int16_t *p;
|
|
||||||
walltype *wal;
|
walltype *wal;
|
||||||
|
|
||||||
for (i=g_numCyclers-1; i>=0; i--)
|
for (i=g_numCyclers-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
p = &cyclers[i][0];
|
int16_t *const p = &cyclers[i][0];
|
||||||
|
|
||||||
if (p[4] == low)
|
if (p[4] == low)
|
||||||
{
|
{
|
||||||
|
@ -1013,56 +984,40 @@ void G_OperateActivators(int32_t low, int32_t snum)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
i = headspritestat[STAT_ACTIVATOR];
|
|
||||||
k = -1;
|
k = -1;
|
||||||
|
|
||||||
while (i >= 0)
|
for (SPRITES_OF_STAT_SAFE(STAT_ACTIVATOR, i, nexti))
|
||||||
{
|
{
|
||||||
if (sprite[i].lotag == low)
|
if (sprite[i].lotag == low)
|
||||||
{
|
{
|
||||||
if (sprite[i].picnum == ACTIVATORLOCKED)
|
if (sprite[i].picnum == ACTIVATORLOCKED)
|
||||||
{
|
{
|
||||||
if (sector[SECT].lotag&16384)
|
sector[SECT].lotag ^= 16384;
|
||||||
sector[SECT].lotag &= ~16384;
|
|
||||||
else
|
|
||||||
sector[SECT].lotag |= 16384;
|
|
||||||
|
|
||||||
if (snum >= 0 && snum < ud.multimode)
|
if (snum >= 0 && snum < ud.multimode)
|
||||||
{
|
P_DoQuote((sector[SECT].lotag&16384) ? QUOTE_LOCKED : QUOTE_UNLOCKED,
|
||||||
if (sector[SECT].lotag&16384)
|
g_player[snum].ps);
|
||||||
P_DoQuote(QUOTE_LOCKED,g_player[snum].ps);
|
|
||||||
else P_DoQuote(QUOTE_UNLOCKED,g_player[snum].ps);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
switch (SHT)
|
switch (SHT)
|
||||||
{
|
{
|
||||||
case 0:
|
|
||||||
break;
|
|
||||||
case 1:
|
case 1:
|
||||||
if (sector[SECT].floorz != sector[SECT].ceilingz)
|
if (sector[SECT].floorz != sector[SECT].ceilingz)
|
||||||
{
|
|
||||||
i = nextspritestat[i];
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
if (sector[SECT].floorz == sector[SECT].ceilingz)
|
if (sector[SECT].floorz == sector[SECT].ceilingz)
|
||||||
{
|
|
||||||
i = nextspritestat[i];
|
|
||||||
continue;
|
continue;
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ST_2_UNDERWATER
|
// ST_2_UNDERWATER
|
||||||
if (sector[sprite[i].sectnum].lotag < 3)
|
if (sector[sprite[i].sectnum].lotag < 3)
|
||||||
{
|
{
|
||||||
j = headspritesect[sprite[i].sectnum];
|
for (SPRITES_OF_SECT(sprite[i].sectnum, j))
|
||||||
while (j >= 0)
|
if (sprite[j].statnum == STAT_EFFECTOR)
|
||||||
{
|
switch (sprite[j].lotag)
|
||||||
if (sprite[j].statnum == STAT_EFFECTOR) switch (sprite[j].lotag)
|
|
||||||
{
|
{
|
||||||
case SE_36_PROJ_SHOOTER:
|
case SE_36_PROJ_SHOOTER:
|
||||||
case SE_31_FLOOR_RISE_FALL:
|
case SE_31_FLOOR_RISE_FALL:
|
||||||
|
@ -1072,8 +1027,6 @@ void G_OperateActivators(int32_t low, int32_t snum)
|
||||||
A_CallSound(SECT,j);
|
A_CallSound(SECT,j);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
j = nextspritesect[j];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (k == -1 && (sector[SECT].lotag&0xff) == ST_22_SPLITTING_DOOR)
|
if (k == -1 && (sector[SECT].lotag&0xff) == ST_22_SPLITTING_DOOR)
|
||||||
|
@ -1082,7 +1035,6 @@ void G_OperateActivators(int32_t low, int32_t snum)
|
||||||
G_OperateSectors(SECT,i);
|
G_OperateSectors(SECT,i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
i = nextspritestat[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
G_OperateRespawns(low);
|
G_OperateRespawns(low);
|
||||||
|
@ -1090,22 +1042,20 @@ void G_OperateActivators(int32_t low, int32_t snum)
|
||||||
|
|
||||||
void G_OperateMasterSwitches(int32_t low)
|
void G_OperateMasterSwitches(int32_t low)
|
||||||
{
|
{
|
||||||
int32_t i = headspritestat[STAT_STANDABLE];
|
int32_t i;
|
||||||
while (i >= 0)
|
|
||||||
{
|
for (SPRITES_OF(STAT_STANDABLE, i))
|
||||||
if (PN == MASTERSWITCH && SLT == low && SP == 0)
|
if (PN == MASTERSWITCH && SLT == low && SP == 0)
|
||||||
SP = 1;
|
SP = 1;
|
||||||
i = nextspritestat[i];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void G_OperateForceFields(int32_t s, int32_t low)
|
void G_OperateForceFields(int32_t s, int32_t low)
|
||||||
{
|
{
|
||||||
int32_t i, p=g_numAnimWalls;
|
int32_t p=g_numAnimWalls;
|
||||||
|
|
||||||
for (; p>=0; p--)
|
for (; p>=0; p--)
|
||||||
{
|
{
|
||||||
i = animwall[p].wallnum;
|
const int32_t i = animwall[p].wallnum;
|
||||||
|
|
||||||
if (low == wall[i].lotag || low == -1)
|
if (low == wall[i].lotag || low == -1)
|
||||||
if (G_GetForcefieldPicnum(i) == W_FORCEFIELD
|
if (G_GetForcefieldPicnum(i) == W_FORCEFIELD
|
||||||
|
@ -1590,18 +1540,15 @@ int32_t P_ActivateSwitch(int32_t snum,int32_t w,int32_t switchissprite)
|
||||||
|
|
||||||
void G_ActivateBySector(int32_t sect, int32_t j)
|
void G_ActivateBySector(int32_t sect, int32_t j)
|
||||||
{
|
{
|
||||||
int32_t i = headspritesect[sect];
|
int32_t i;
|
||||||
int32_t didit = 0;
|
int32_t didit = 0;
|
||||||
|
|
||||||
while (i >= 0)
|
for (SPRITES_OF_SECT(sect, i))
|
||||||
{
|
|
||||||
if (PN == ACTIVATOR)
|
if (PN == ACTIVATOR)
|
||||||
{
|
{
|
||||||
G_OperateActivators(SLT,-1);
|
G_OperateActivators(SLT,-1);
|
||||||
didit = 1;
|
didit = 1;
|
||||||
}
|
}
|
||||||
i = nextspritesect[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
if (didit == 0)
|
if (didit == 0)
|
||||||
G_OperateSectors(sect,j);
|
G_OperateSectors(sect,j);
|
||||||
|
@ -1659,11 +1606,9 @@ void A_DamageWall(int32_t spr, int32_t dawallnum, const vec3_t *pos, int32_t atw
|
||||||
|
|
||||||
if (((wal->cstat&16) || wal->overpicnum == BIGFORCE) && wal->nextsector >= 0)
|
if (((wal->cstat&16) || wal->overpicnum == BIGFORCE) && wal->nextsector >= 0)
|
||||||
if (sector[wal->nextsector].floorz > pos->z)
|
if (sector[wal->nextsector].floorz > pos->z)
|
||||||
if (sector[wal->nextsector].floorz-sector[wal->nextsector].ceilingz)
|
if (sector[wal->nextsector].floorz != sector[wal->nextsector].ceilingz)
|
||||||
{
|
{
|
||||||
int32_t switchpicnum = wal->overpicnum;
|
int32_t switchpicnum = G_GetForcefieldPicnum(dawallnum);
|
||||||
if (switchpicnum > W_FORCEFIELD && switchpicnum <= W_FORCEFIELD+2)
|
|
||||||
switchpicnum = W_FORCEFIELD;
|
|
||||||
|
|
||||||
switch (DYNAMICTILEMAP(switchpicnum))
|
switch (DYNAMICTILEMAP(switchpicnum))
|
||||||
{
|
{
|
||||||
|
@ -1836,10 +1781,7 @@ void A_DamageWall(int32_t spr, int32_t dawallnum, const vec3_t *pos, int32_t atw
|
||||||
case WALLLIGHT4__STATIC:
|
case WALLLIGHT4__STATIC:
|
||||||
case TECHLIGHT2__STATIC:
|
case TECHLIGHT2__STATIC:
|
||||||
case TECHLIGHT4__STATIC:
|
case TECHLIGHT4__STATIC:
|
||||||
|
A_PlaySound(rnd(128) ? GLASS_HEAVYBREAK : GLASS_BREAKING, spr);
|
||||||
if (rnd(128))
|
|
||||||
A_PlaySound(GLASS_HEAVYBREAK,spr);
|
|
||||||
else A_PlaySound(GLASS_BREAKING,spr);
|
|
||||||
A_SpawnWallGlass(spr,dawallnum,30);
|
A_SpawnWallGlass(spr,dawallnum,30);
|
||||||
|
|
||||||
if (wal->picnum == WALLLIGHT1)
|
if (wal->picnum == WALLLIGHT1)
|
||||||
|
@ -2470,7 +2412,7 @@ void P_HandleSharedKeys(int32_t snum)
|
||||||
{
|
{
|
||||||
int32_t i, k = 0, dainv;
|
int32_t i, k = 0, dainv;
|
||||||
uint32_t sb_snum = g_player[snum].sync->bits, j;
|
uint32_t sb_snum = g_player[snum].sync->bits, j;
|
||||||
DukePlayer_t *p = g_player[snum].ps;
|
DukePlayer_t *const p = g_player[snum].ps;
|
||||||
|
|
||||||
if (p->cheat_phase == 1) return;
|
if (p->cheat_phase == 1) return;
|
||||||
|
|
||||||
|
@ -3035,9 +2977,9 @@ static int32_t our_neartag_blacklist(int32_t i)
|
||||||
|
|
||||||
void P_CheckSectors(int32_t snum)
|
void P_CheckSectors(int32_t snum)
|
||||||
{
|
{
|
||||||
int32_t i = -1,oldz;
|
int32_t i = -1;
|
||||||
DukePlayer_t *p = g_player[snum].ps;
|
DukePlayer_t *const p = g_player[snum].ps;
|
||||||
int16_t j,hitscanwall;
|
int16_t hitscanwall = -1; // CAUTION with goto's!!!
|
||||||
|
|
||||||
if (p->cursectnum > -1)
|
if (p->cursectnum > -1)
|
||||||
switch (sector[p->cursectnum].lotag)
|
switch (sector[p->cursectnum].lotag)
|
||||||
|
@ -3134,12 +3076,8 @@ void P_CheckSectors(int32_t snum)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hitscanwall >= 0 && (wall[hitscanwall].cstat&16))
|
if (hitscanwall >= 0 && (wall[hitscanwall].cstat&16))
|
||||||
switch (wall[hitscanwall].overpicnum)
|
if (wall[hitscanwall].lotag)
|
||||||
{
|
return;
|
||||||
default:
|
|
||||||
if (wall[hitscanwall].lotag)
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (p->newowner >= 0)
|
if (p->newowner >= 0)
|
||||||
neartag(p->opos.x,p->opos.y,p->opos.z,sprite[p->i].sectnum,p->oang,&neartagsector,
|
neartag(p->opos.x,p->opos.y,p->opos.z,sprite[p->i].sectnum,p->oang,&neartagsector,
|
||||||
|
@ -3196,8 +3134,9 @@ void P_CheckSectors(int32_t snum)
|
||||||
if (neartagsprite == -1 && neartagwall == -1)
|
if (neartagsprite == -1 && neartagwall == -1)
|
||||||
if (p->cursectnum >= 0 && sector[p->cursectnum].lotag == 2)
|
if (p->cursectnum >= 0 && sector[p->cursectnum].lotag == 2)
|
||||||
{
|
{
|
||||||
oldz = A_CheckHitSprite(p->i,&neartagsprite);
|
int32_t oldz = A_CheckHitSprite(p->i,&neartagsprite);
|
||||||
if (oldz > 1280) neartagsprite = -1;
|
if (oldz > 1280)
|
||||||
|
neartagsprite = -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (neartagsprite >= 0)
|
if (neartagsprite >= 0)
|
||||||
|
@ -3233,7 +3172,11 @@ void P_CheckSectors(int32_t snum)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case NUKEBUTTON__STATIC:
|
case NUKEBUTTON__STATIC:
|
||||||
P_FindWall(p,&j);
|
{
|
||||||
|
int16_t j;
|
||||||
|
|
||||||
|
P_FindWall(p, &j);
|
||||||
|
|
||||||
if (j >= 0 && wall[j].overpicnum == 0)
|
if (j >= 0 && wall[j].overpicnum == 0)
|
||||||
if (actor[neartagsprite].t_data[0] == 0)
|
if (actor[neartagsprite].t_data[0] == 0)
|
||||||
{
|
{
|
||||||
|
@ -3252,6 +3195,7 @@ void P_CheckSectors(int32_t snum)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
case WATERFOUNTAIN__STATIC:
|
case WATERFOUNTAIN__STATIC:
|
||||||
if (actor[neartagsprite].t_data[0] != 1)
|
if (actor[neartagsprite].t_data[0] != 1)
|
||||||
|
@ -3288,11 +3232,12 @@ void P_CheckSectors(int32_t snum)
|
||||||
sprite[neartagsprite].owner = i;
|
sprite[neartagsprite].owner = i;
|
||||||
sprite[neartagsprite].yvel = 1;
|
sprite[neartagsprite].yvel = 1;
|
||||||
|
|
||||||
|
{
|
||||||
j = p->cursectnum;
|
int32_t j = p->cursectnum;
|
||||||
p->cursectnum = SECT;
|
p->cursectnum = SECT;
|
||||||
P_UpdateScreenPal(p);
|
P_UpdateScreenPal(p);
|
||||||
p->cursectnum = j;
|
p->cursectnum = j;
|
||||||
|
}
|
||||||
|
|
||||||
// parallaxtype = 2;
|
// parallaxtype = 2;
|
||||||
p->newowner = i;
|
p->newowner = i;
|
||||||
|
@ -3317,8 +3262,10 @@ CLEARCAMERAS:
|
||||||
} // switch
|
} // switch
|
||||||
}
|
}
|
||||||
|
|
||||||
if (TEST_SYNC_KEY(g_player[snum].sync->bits, SK_OPEN) == 0) return;
|
if (TEST_SYNC_KEY(g_player[snum].sync->bits, SK_OPEN) == 0)
|
||||||
else if (p->newowner >= 0)
|
return;
|
||||||
|
|
||||||
|
if (p->newowner >= 0)
|
||||||
{
|
{
|
||||||
i = -1;
|
i = -1;
|
||||||
goto CLEARCAMERAS;
|
goto CLEARCAMERAS;
|
||||||
|
@ -3348,27 +3295,27 @@ CLEARCAMERAS:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (neartagsector >= 0 && (sector[neartagsector].lotag&16384) == 0 && isanearoperator(sector[neartagsector].lotag))
|
if (neartagsector >= 0 && (sector[neartagsector].lotag&16384) == 0 &&
|
||||||
|
isanearoperator(sector[neartagsector].lotag))
|
||||||
{
|
{
|
||||||
i = headspritesect[neartagsector];
|
for (SPRITES_OF_SECT(neartagsector, i))
|
||||||
while (i >= 0)
|
|
||||||
{
|
{
|
||||||
if (PN == ACTIVATOR || PN == MASTERSWITCH)
|
if (PN == ACTIVATOR || PN == MASTERSWITCH)
|
||||||
return;
|
return;
|
||||||
i = nextspritesect[i];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
G_OperateSectors(neartagsector,p->i);
|
G_OperateSectors(neartagsector,p->i);
|
||||||
}
|
}
|
||||||
else if ((sector[sprite[p->i].sectnum].lotag&16384) == 0)
|
else if ((sector[sprite[p->i].sectnum].lotag&16384) == 0)
|
||||||
{
|
{
|
||||||
if (isanunderoperator(sector[sprite[p->i].sectnum].lotag))
|
if (isanunderoperator(sector[sprite[p->i].sectnum].lotag))
|
||||||
{
|
{
|
||||||
i = headspritesect[sprite[p->i].sectnum];
|
for (SPRITES_OF_SECT(sprite[p->i].sectnum, i))
|
||||||
while (i >= 0)
|
|
||||||
{
|
{
|
||||||
if (PN == ACTIVATOR || PN == MASTERSWITCH) return;
|
if (PN == ACTIVATOR || PN == MASTERSWITCH)
|
||||||
i = nextspritesect[i];
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
G_OperateSectors(sprite[p->i].sectnum,p->i);
|
G_OperateSectors(sprite[p->i].sectnum,p->i);
|
||||||
}
|
}
|
||||||
else P_ActivateSwitch(snum,neartagwall,0);
|
else P_ActivateSwitch(snum,neartagwall,0);
|
||||||
|
|
Loading…
Reference in a new issue