📄 sector.c
字号:
}
}
i = nextspritestat[i];
}
}
return;
case 25: //Subway type sliding doors
j = headspritestat[3];
while(j >= 0)//Find the sprite
{
if( (sprite[j].lotag) == 15 && sprite[j].sectnum == sn )
break; //Found the sectoreffector.
j = nextspritestat[j];
}
if(j < 0)
return;
i = headspritestat[3];
while(i >= 0)
{
if( SHT==sprite[j].hitag )
{
if( SLT == 15 )
{
sector[SECT].lotag ^= 0x8000; // Toggle the open or close
SA += 1024;
if(T5) callsound(SECT,i);
callsound(SECT,i);
if(sector[SECT].lotag&0x8000) T5 = 1;
else T5 = 2;
}
}
i = nextspritestat[i];
}
return;
case 27: //Extended bridge
j = headspritestat[3];
while(j >= 0)
{
if( (sprite[j].lotag&0xff)==20 && sprite[j].sectnum == sn) //Bridge
{
sector[sn].lotag ^= 0x8000;
if(sector[sn].lotag&0x8000) //OPENING
hittype[j].temp_data[0] = 1;
else hittype[j].temp_data[0] = 2;
callsound(sn,ii);
break;
}
j = nextspritestat[j];
}
return;
case 28:
//activate the rest of them
j = headspritesect[sn];
while(j >= 0)
{
if(sprite[j].statnum==3 && (sprite[j].lotag&0xff)==21)
break; //Found it
j = nextspritesect[j];
}
j = sprite[j].hitag;
l = headspritestat[3];
while(l >= 0)
{
if( (sprite[l].lotag&0xff)==21 && !hittype[l].temp_data[0] &&
(sprite[l].hitag) == j )
hittype[l].temp_data[0] = 1;
l = nextspritestat[l];
}
callsound(sn,ii);
return;
}
}
void operaterespawns(short low)
{
short i, j, nexti;
i = headspritestat[11];
while(i >= 0)
{
nexti = nextspritestat[i];
if(SLT == low) switch(PN)
{
case RESPAWN:
if( badguypic(SHT) && ud.monsters_off ) break;
j = spawn(i,TRANSPORTERSTAR);
sprite[j].z -= (32<<8);
sprite[i].extra = 66-12; // Just a way to killit
break;
}
i = nexti;
}
}
void operateactivators(short low,short snum)
{
short i, j, k, *p, nexti;
walltype *wal;
for(i=numcyclers-1;i>=0;i--)
{
p = &cyclers[i][0];
if(p[4] == low)
{
p[5] = !p[5];
sector[p[0]].floorshade = sector[p[0]].ceilingshade = p[3];
wal = &wall[sector[p[0]].wallptr];
for(j=sector[p[0]].wallnum;j > 0;j--,wal++)
wal->shade = p[3];
}
}
i = headspritestat[8];
k = -1;
while(i >= 0)
{
if(sprite[i].lotag == low)
{
if( sprite[i].picnum == ACTIVATORLOCKED )
{
if(sector[SECT].lotag&16384)
sector[SECT].lotag &= 65535-16384;
else
sector[SECT].lotag |= 16384;
if(snum >= 0)
{
if(sector[SECT].lotag&16384)
FTA(4,&ps[snum]);
else FTA(8,&ps[snum]);
}
}
else
{
switch(SHT)
{
case 0:
break;
case 1:
if(sector[SECT].floorz != sector[SECT].ceilingz)
{
i = nextspritestat[i];
continue;
}
break;
case 2:
if(sector[SECT].floorz == sector[SECT].ceilingz)
{
i = nextspritestat[i];
continue;
}
break;
}
if( sector[sprite[i].sectnum].lotag < 3 )
{
j = headspritesect[sprite[i].sectnum];
while(j >= 0)
{
if( sprite[j].statnum == 3 ) switch(sprite[j].lotag)
{
case 36:
case 31:
case 32:
case 18:
hittype[j].temp_data[0] = 1-hittype[j].temp_data[0];
callsound(SECT,j);
break;
}
j = nextspritesect[j];
}
}
if( k == -1 && (sector[SECT].lotag&0xff) == 22 )
k = callsound(SECT,i);
operatesectors(SECT,i);
}
}
i = nextspritestat[i];
}
operaterespawns(low);
}
void operatemasterswitches(short low)
{
short i;
i = headspritestat[6];
while(i >= 0)
{
if( PN == MASTERSWITCH && SLT == low && SP == 0 )
SP = 1;
i = nextspritestat[i];
}
}
void operateforcefields(short s, short low)
{
short i, p;
for(p=numanimwalls;p>=0;p--)
{
i = animwall[p].wallnum;
if(low == wall[i].lotag || low == -1)
switch(wall[i].overpicnum)
{
case W_FORCEFIELD :
case W_FORCEFIELD+1:
case W_FORCEFIELD+2:
case BIGFORCE:
animwall[p].tag = 0;
if( wall[i].cstat )
{
wall[i].cstat = 0;
if( s >= 0 && sprite[s].picnum == SECTOREFFECTOR &&
sprite[s].lotag == 30)
wall[i].lotag = 0;
}
else
wall[i].cstat = 85;
break;
}
}
}
char checkhitswitch(short snum,long w,char switchtype)
{
char switchpal;
short i, x, lotag,hitag,picnum,correctdips,numdips;
long sx,sy;
if(w < 0) return 0;
correctdips = 1;
numdips = 0;
if(switchtype == 1) // A wall sprite
{
lotag = sprite[w].lotag; if(lotag == 0) return 0;
hitag = sprite[w].hitag;
sx = sprite[w].x;
sy = sprite[w].y;
picnum = sprite[w].picnum;
switchpal = sprite[w].pal;
}
else
{
lotag = wall[w].lotag; if(lotag == 0) return 0;
hitag = wall[w].hitag;
sx = wall[w].x;
sy = wall[w].y;
picnum = wall[w].picnum;
switchpal = wall[w].pal;
}
switch(picnum)
{
case DIPSWITCH:
case DIPSWITCH+1:
case TECHSWITCH:
case TECHSWITCH+1:
case ALIENSWITCH:
case ALIENSWITCH+1:
break;
case ACCESSSWITCH:
case ACCESSSWITCH2:
if(ps[snum].access_incs == 0)
{
if( switchpal == 0 )
{
if( (ps[snum].got_access&1) )
ps[snum].access_incs = 1;
else FTA(70,&ps[snum]);
}
else if( switchpal == 21 )
{
if( ps[snum].got_access&2 )
ps[snum].access_incs = 1;
else FTA(71,&ps[snum]);
}
else if( switchpal == 23 )
{
if( ps[snum].got_access&4 )
ps[snum].access_incs = 1;
else FTA(72,&ps[snum]);
}
if( ps[snum].access_incs == 1 )
{
if(switchtype == 0)
ps[snum].access_wallnum = w;
else
ps[snum].access_spritenum = w;
}
return 0;
}
case DIPSWITCH2:
case DIPSWITCH2+1:
case DIPSWITCH3:
case DIPSWITCH3+1:
case MULTISWITCH:
case MULTISWITCH+1:
case MULTISWITCH+2:
case MULTISWITCH+3:
case PULLSWITCH:
case PULLSWITCH+1:
case HANDSWITCH:
case HANDSWITCH+1:
case SLOTDOOR:
case SLOTDOOR+1:
case LIGHTSWITCH:
case LIGHTSWITCH+1:
case SPACELIGHTSWITCH:
case SPACELIGHTSWITCH+1:
case SPACEDOORSWITCH:
case SPACEDOORSWITCH+1:
case FRANKENSTINESWITCH:
case FRANKENSTINESWITCH+1:
case LIGHTSWITCH2:
case LIGHTSWITCH2+1:
case POWERSWITCH1:
case POWERSWITCH1+1:
case LOCKSWITCH1:
case LOCKSWITCH1+1:
case POWERSWITCH2:
case POWERSWITCH2+1:
if( check_activator_motion( lotag ) ) return 0;
break;
default:
if( isadoorwall(picnum) == 0 ) return 0;
break;
}
i = headspritestat[0];
while(i >= 0)
{
if( lotag == SLT ) switch(PN)
{
case DIPSWITCH:
case TECHSWITCH:
case ALIENSWITCH:
if( switchtype == 1 && w == i ) PN++;
else if( SHT == 0 ) correctdips++;
numdips++;
break;
case TECHSWITCH+1:
case DIPSWITCH+1:
case ALIENSWITCH+1:
if( switchtype == 1 && w == i ) PN--;
else if( SHT == 1 ) correctdips++;
numdips++;
break;
case MULTISWITCH:
case MULTISWITCH+1:
case MULTISWITCH+2:
case MULTISWITCH+3:
sprite[i].picnum++;
if( sprite[i].picnum > (MULTISWITCH+3) )
sprite[i].picnum = MULTISWITCH;
break;
case ACCESSSWITCH:
case ACCESSSWITCH2:
case SLOTDOOR:
case LIGHTSWITCH:
case SPACELIGHTSWITCH:
case SPACEDOORSWITCH:
case FRANKENSTINESWITCH:
case LIGHTSWITCH2:
case POWERSWITCH1:
case LOCKSWITCH1:
case POWERSWITCH2:
case HANDSWITCH:
case PULLSWITCH:
case DIPSWITCH2:
case DIPSWITCH3:
sprite[i].picnum++;
break;
case PULLSWITCH+1:
case HANDSWITCH+1:
case LIGHTSWITCH2+1:
case POWERSWITCH1+1:
case LOCKSWITCH1+1:
case POWERSWITCH2+1:
case SLOTDOOR+1:
case LIGHTSWITCH+1:
case SPACELIGHTSWITCH+1:
case SPACEDOORSWITCH+1:
case FRANKENSTINESWITCH+1:
case DIPSWITCH2+1:
case DIPSWITCH3+1:
sprite[i].picnum--;
break;
}
i = nextspritestat[i];
}
for(i=0;i<numwalls;i++)
{
x = i;
if(lotag == wall[x].lotag)
switch(wall[x].picnum)
{
case DIPSWITCH:
case TECHSWITCH:
case ALIENSWITCH:
if( switchtype == 0 && i == w ) wall[x].picnum++;
else if( wall[x].hitag == 0 ) correctdips++;
numdips++;
break;
case DIPSWITCH+1:
case TECHSWITCH+1:
case ALIENSWITCH+1:
if( switchtype == 0 && i == w ) wall[x].picnum--;
else if( wall[x].hitag == 1 ) correctdips++;
numdips++;
break;
case MULTISWITCH:
case MULTISWITCH+1:
case MULTISWITCH+2:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -