📄 sector.c
字号:
case MULTISWITCH+1:
case MULTISWITCH+2:
case MULTISWITCH+3:
wall[x].picnum++;
if(wall[x].picnum > (MULTISWITCH+3) )
wall[x].picnum = MULTISWITCH;
break;
case ACCESSSWITCH:
case ACCESSSWITCH2:
case SLOTDOOR:
case LIGHTSWITCH:
case SPACELIGHTSWITCH:
case SPACEDOORSWITCH:
case LIGHTSWITCH2:
case POWERSWITCH1:
case LOCKSWITCH1:
case POWERSWITCH2:
case PULLSWITCH:
case HANDSWITCH:
case DIPSWITCH2:
case DIPSWITCH3:
wall[x].picnum++;
break;
case HANDSWITCH+1:
case PULLSWITCH+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 DIPSWITCH2+1:
case DIPSWITCH3+1:
wall[x].picnum--;
break;
}
}
if(lotag == (short) 65535)
{
ps[myconnectindex].gm = MODE_EOL;
if(ud.from_bonus)
{
ud.level_number = ud.from_bonus;
ud.m_level_number = ud.level_number;
ud.from_bonus = 0;
}
else
{
ud.level_number++;
if( (ud.volume_number && ud.level_number > 10 ) || ( ud.volume_number == 0 && ud.level_number > 5 ) )
ud.level_number = 0;
ud.m_level_number = ud.level_number;
}
return 1;
}
switch(picnum)
{
default:
if(isadoorwall(picnum) == 0) break;
case DIPSWITCH:
case DIPSWITCH+1:
case TECHSWITCH:
case TECHSWITCH+1:
case ALIENSWITCH:
case ALIENSWITCH+1:
if( picnum == DIPSWITCH || picnum == DIPSWITCH+1 ||
picnum == ALIENSWITCH || picnum == ALIENSWITCH+1 ||
picnum == TECHSWITCH || picnum == TECHSWITCH+1 )
{
if( picnum == ALIENSWITCH || picnum == ALIENSWITCH+1)
{
if(switchtype == 1)
xyzsound(ALIEN_SWITCH1,w,sx,sy,ps[snum].posz);
else xyzsound(ALIEN_SWITCH1,ps[snum].i,sx,sy,ps[snum].posz);
}
else
{
if(switchtype == 1)
xyzsound(SWITCH_ON,w,sx,sy,ps[snum].posz);
else xyzsound(SWITCH_ON,ps[snum].i,sx,sy,ps[snum].posz);
}
if(numdips != correctdips) break;
xyzsound(END_OF_LEVEL_WARN,ps[snum].i,sx,sy,ps[snum].posz);
}
case DIPSWITCH2:
case DIPSWITCH2+1:
case DIPSWITCH3:
case DIPSWITCH3+1:
case MULTISWITCH:
case MULTISWITCH+1:
case MULTISWITCH+2:
case MULTISWITCH+3:
case ACCESSSWITCH:
case ACCESSSWITCH2:
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:
case HANDSWITCH:
case HANDSWITCH+1:
case PULLSWITCH:
case PULLSWITCH+1:
if( picnum == MULTISWITCH || picnum == (MULTISWITCH+1) ||
picnum == (MULTISWITCH+2) || picnum == (MULTISWITCH+3) )
lotag += picnum-MULTISWITCH;
x = headspritestat[3];
while(x >= 0)
{
if( ((sprite[x].hitag) == lotag) )
{
switch(sprite[x].lotag)
{
case 12:
sector[sprite[x].sectnum].floorpal = 0;
hittype[x].temp_data[0]++;
if(hittype[x].temp_data[0] == 2)
hittype[x].temp_data[0]++;
break;
case 24:
case 34:
case 25:
hittype[x].temp_data[4] = !hittype[x].temp_data[4];
if(hittype[x].temp_data[4])
FTA(15,&ps[snum]);
else FTA(2,&ps[snum]);
break;
case 21:
FTA(2,&ps[screenpeek]);
break;
}
}
x = nextspritestat[x];
}
operateactivators(lotag,snum);
operateforcefields(ps[snum].i,lotag);
operatemasterswitches(lotag);
if( picnum == DIPSWITCH || picnum == DIPSWITCH+1 ||
picnum == ALIENSWITCH || picnum == ALIENSWITCH+1 ||
picnum == TECHSWITCH || picnum == TECHSWITCH+1 ) return 1;
if( hitag == 0 && isadoorwall(picnum) == 0 )
{
if(switchtype == 1)
xyzsound(SWITCH_ON,w,sx,sy,ps[snum].posz);
else xyzsound(SWITCH_ON,ps[snum].i,sx,sy,ps[snum].posz);
}
else if(hitag != 0)
{
if(switchtype == 1 && (soundm[hitag]&4) == 0)
xyzsound(hitag,w,sx,sy,ps[snum].posz);
else spritesound(hitag,ps[snum].i);
}
return 1;
}
return 0;
}
void activatebysector(short sect,short j)
{
short i,didit;
didit = 0;
i = headspritesect[sect];
while(i >= 0)
{
if(PN == ACTIVATOR)
{
operateactivators(SLT,-1);
didit = 1;
// return;
}
i = nextspritesect[i];
}
if(didit == 0)
operatesectors(sect,j);
}
void breakwall(short newpn,short spr,short dawallnum)
{
wall[dawallnum].picnum = newpn;
spritesound(VENT_BUST,spr);
spritesound(GLASS_HEAVYBREAK,spr);
lotsofglass(spr,dawallnum,10);
}
void checkhitwall(short spr,short dawallnum,long x,long y,long z,short atwith)
{
short j, i, sn = -1, darkestwall;
signed char nfloors,nceilings;
short nextj;
walltype *wal;
spritetype *s;
wal = &wall[dawallnum];
if(wal->overpicnum == MIRROR)
{
switch(atwith)
{
case HEAVYHBOMB:
case RADIUSEXPLOSION:
case RPG:
case HYDRENT:
case SEENINE:
case OOZFILTER:
case EXPLODINGBARREL:
lotsofglass(spr,dawallnum,70);
wal->cstat &= ~16;
wal->overpicnum = MIRRORBROKE;
spritesound(GLASS_HEAVYBREAK,spr);
return;
}
}
if( ( (wal->cstat&16) || wal->overpicnum == BIGFORCE ) && wal->nextsector >= 0 )
if( sector[wal->nextsector].floorz > z )
if( sector[wal->nextsector].floorz-sector[wal->nextsector].ceilingz )
switch(wal->overpicnum)
{
case W_FORCEFIELD:
case W_FORCEFIELD+1:
case W_FORCEFIELD+2:
wal->extra = 1; // tell the forces to animate
case BIGFORCE:
updatesector(x,y,&sn);
if( sn < 0 ) return;
if(atwith == -1)
i = EGS(sn,x,y,z,FORCERIPPLE,-127,8,8,0,0,0,spr,5);
else
{
if(atwith == CHAINGUN)
i = EGS(sn,x,y,z,FORCERIPPLE,-127,16+sprite[spr].xrepeat,16+sprite[spr].yrepeat,0,0,0,spr,5);
else i = EGS(sn,x,y,z,FORCERIPPLE,-127,32,32,0,0,0,spr,5);
}
CS |= 18+128;
SA = getangle(wal->x-wall[wal->point2].x,
wal->y-wall[wal->point2].y)-512;
spritesound(SOMETHINGHITFORCE,i);
return;
case FANSPRITE:
wal->overpicnum = FANSPRITEBROKE;
wal->cstat &= 65535-65;
if(wal->nextwall >= 0)
{
wall[wal->nextwall].overpicnum = FANSPRITEBROKE;
wall[wal->nextwall].cstat &= 65535-65;
}
spritesound(VENT_BUST,spr);
spritesound(GLASS_BREAKING,spr);
return;
case GLASS:
updatesector(x,y,&sn); if( sn < 0 ) return;
wal->overpicnum=GLASS2;
lotsofglass(spr,dawallnum,10);
wal->cstat = 0;
if(wal->nextwall >= 0)
wall[wal->nextwall].cstat = 0;
i = EGS(sn,x,y,z,SECTOREFFECTOR,0,0,0,ps[0].ang,0,0,spr,3);
SLT = 128; T2 = 5; T3 = dawallnum;
spritesound(GLASS_BREAKING,i);
return;
case STAINGLASS1:
updatesector(x,y,&sn); if( sn < 0 ) return;
lotsofcolourglass(spr,dawallnum,80);
wal->cstat = 0;
if(wal->nextwall >= 0)
wall[wal->nextwall].cstat = 0;
spritesound(VENT_BUST,spr);
spritesound(GLASS_BREAKING,spr);
return;
}
switch(wal->picnum)
{
case COLAMACHINE:
case VENDMACHINE:
breakwall(wal->picnum+2,spr,dawallnum);
spritesound(VENT_BUST,spr);
return;
case OJ:
case FEMPIC2:
case FEMPIC3:
case SCREENBREAK6:
case SCREENBREAK7:
case SCREENBREAK8:
case SCREENBREAK1:
case SCREENBREAK2:
case SCREENBREAK3:
case SCREENBREAK4:
case SCREENBREAK5:
case SCREENBREAK9:
case SCREENBREAK10:
case SCREENBREAK11:
case SCREENBREAK12:
case SCREENBREAK13:
case SCREENBREAK14:
case SCREENBREAK15:
case SCREENBREAK16:
case SCREENBREAK17:
case SCREENBREAK18:
case SCREENBREAK19:
case BORNTOBEWILDSCREEN:
lotsofglass(spr,dawallnum,30);
wal->picnum=W_SCREENBREAK+(TRAND%3);
spritesound(GLASS_HEAVYBREAK,spr);
return;
case W_TECHWALL5:
case W_TECHWALL6:
case W_TECHWALL7:
case W_TECHWALL8:
case W_TECHWALL9:
breakwall(wal->picnum+1,spr,dawallnum);
return;
case W_MILKSHELF:
breakwall(W_MILKSHELFBROKE,spr,dawallnum);
return;
case W_TECHWALL10:
breakwall(W_HITTECHWALL10,spr,dawallnum);
return;
case W_TECHWALL1:
case W_TECHWALL11:
case W_TECHWALL12:
case W_TECHWALL13:
case W_TECHWALL14:
breakwall(W_HITTECHWALL1,spr,dawallnum);
return;
case W_TECHWALL15:
breakwall(W_HITTECHWALL15,spr,dawallnum);
return;
case W_TECHWALL16:
breakwall(W_HITTECHWALL16,spr,dawallnum);
return;
case W_TECHWALL2:
breakwall(W_HITTECHWALL2,spr,dawallnum);
return;
case W_TECHWALL3:
breakwall(W_HITTECHWALL3,spr,dawallnum);
return;
case W_TECHWALL4:
breakwall(W_HITTECHWALL4,spr,dawallnum);
return;
case ATM:
wal->picnum = ATMBROKE;
lotsofmoney(&sprite[spr],1+(TRAND&7));
spritesound(GLASS_HEAVYBREAK,spr);
break;
case WALLLIGHT1:
case WALLLIGHT2:
case WALLLIGHT3:
case WALLLIGHT4:
case TECHLIGHT2:
case TECHLIGHT4:
if( rnd(128) )
spritesound(GLASS_HEAVYBREAK,spr);
else spritesound(GLASS_BREAKING,spr);
lotsofglass(spr,dawallnum,30);
if(wal->picnum == WALLLIGHT1)
wal->picnum = WALLLIGHTBUST1;
if(wal->picnum == WALLLIGHT2)
wal->picnum = WALLLIGHTBUST2;
if(wal->picnum == WALLLIGHT3)
wal->picnum = WALLLIGHTBUST3;
if(wal->picnum == WALLLIGHT4)
wal->picnum = WALLLIGHTBUST4;
if(wal->picnum == TECHLIGHT2)
wal->picnum = TECHLIGHTBUST2;
if(wal->picnum == TECHLIGHT4)
wal->picnum = TECHLIGHTBUST4;
if(!wal->lotag) return;
sn = wal->nextsector;
if(sn < 0) return;
darkestwall = 0;
wal = &wall[sector[sn].wallptr];
for(i=sector[sn].wallnum;i > 0;i--,wal++)
if(wal->shade > darkestwall)
darkestwall=wal->shade;
j = TRAND&1;
i= headspritestat[3];
while(i >= 0)
{
if(SHT == wall[dawallnum].lotag && SLT == 3 )
{
T3 = j;
T4 = darkestwall;
T5 = 1;
}
i = nextspritestat[i];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -