📄 actors.c
字号:
}
goto BOLT;
}
if( AFLAMABLE(s->picnum) )
{
if(T1 == 1)
{
T2++;
if( (T2&3) > 0) goto BOLT;
if( s->picnum == TIRE && T2 == 32 )
{
s->cstat = 0;
j = spawn(i,BLOODPOOL);
sprite[j].shade = 127;
}
else
{
if(s->shade < 64) s->shade++;
else KILLIT(i);
}
j = s->xrepeat-(TRAND&7);
if(j < 10)
{
KILLIT(i);
}
s->xrepeat = j;
j = s->yrepeat-(TRAND&7);
if(j < 4) { KILLIT(i); }
s->yrepeat = j;
}
if(s->picnum == BOX)
{
makeitfall(i);
hittype[i].ceilingz = sector[s->sectnum].ceilingz;
}
goto BOLT;
}
if(s->picnum == TRIPBOMB)
{
if(T3 > 0)
{
T3--;
if(T3 == 8)
{
spritesound(LASERTRIP_EXPLODE,i);
for(j=0;j<5;j++) RANDOMSCRAP;
x = s->extra;
hitradius( i, tripbombblastradius, x>>2,x>>1,x-(x>>2),x);
j = spawn(i,EXPLOSION2);
sprite[j].ang = s->ang;
sprite[j].xvel = 348;
ssp(j,CLIPMASK0);
j = headspritestat[5];
while(j >= 0)
{
if(sprite[j].picnum == LASERLINE && s->hitag == sprite[j].hitag)
sprite[j].xrepeat = sprite[j].yrepeat = 0;
j = nextspritestat[j];
}
KILLIT(i);
}
goto BOLT;
}
else
{
x = s->extra;
s->extra = 1;
l = s->ang;
IFHIT { T3 = 16; }
s->extra = x;
s->ang = l;
}
if( T1 < 32 )
{
p = findplayer(s,&x);
if( x > 768 ) T1++;
else if(T1 > 16) T1++;
}
if( T1 == 32 )
{
l = s->ang;
s->ang = T6;
T4 = s->x;T5 = s->y;
s->x += sintable[(T6+512)&2047]>>9;
s->y += sintable[(T6)&2047]>>9;
s->z -= (3<<8);
setsprite(i,s->x,s->y,s->z);
x = hitasprite(i,&m);
hittype[i].lastvx = x;
s->ang = l;
k = 0;
while(x > 0)
{
j = spawn(i,LASERLINE);
setsprite(j,sprite[j].x,sprite[j].y,sprite[j].z);
sprite[j].hitag = s->hitag;
hittype[j].temp_data[1] = sprite[j].z;
s->x += sintable[(T6+512)&2047]>>4;
s->y += sintable[(T6)&2047]>>4;
if( x < 1024 )
{
sprite[j].xrepeat = x>>5;
break;
}
x -= 1024;
}
T1++;
s->x = T4;s->y = T5;
s->z += (3<<8);
setsprite(i,s->x,s->y,s->z);
T4 = 0;
if( m >= 0 )
{
T3 = 13;
spritesound(LASERTRIP_ARMING,i);
}
else T3 = 0;
}
if(T1 == 33)
{
T2++;
T4 = s->x;T5 = s->y;
s->x += sintable[(T6+512)&2047]>>9;
s->y += sintable[(T6)&2047]>>9;
s->z -= (3<<8);
setsprite(i,s->x,s->y,s->z);
x = hitasprite(i,&m);
s->x = T4;s->y = T5;
s->z += (3<<8);
setsprite(i,s->x,s->y,s->z);
if( hittype[i].lastvx != x )
{
T3 = 13;
spritesound(LASERTRIP_ARMING,i);
}
}
goto BOLT;
}
if( s->picnum >= CRACK1 && s->picnum <= CRACK4 )
{
if(s->hitag > 0)
{
t[0] = s->cstat;
t[1] = s->ang;
j = ifhitbyweapon(i);
if(j == FIREEXT || j == RPG || j == RADIUSEXPLOSION || j == SEENINE || j == OOZFILTER )
{
j = headspritestat[6];
while(j >= 0)
{
if(s->hitag == sprite[j].hitag && ( sprite[j].picnum == OOZFILTER || sprite[j].picnum == SEENINE ) )
if(sprite[j].shade != -32)
sprite[j].shade = -32;
j = nextspritestat[j];
}
goto DETONATE;
}
else
{
s->cstat = t[0];
s->ang = t[1];
s->extra = 0;
}
}
goto BOLT;
}
if( s->picnum == FIREEXT )
{
j = ifhitbyweapon(i);
if( j == -1 ) goto BOLT;
for(k=0;k<16;k++)
{
j = EGS(SECT,SX,SY,SZ-(TRAND%(48<<8)),SCRAP3+(TRAND&3),-8,48,48,TRAND&2047,(TRAND&63)+64,-(TRAND&4095)-(sprite[i].zvel>>2),i,5);
sprite[j].pal = 2;
}
spawn(i,EXPLOSION2);
spritesound(PIPEBOMB_EXPLODE,i);
spritesound(GLASS_HEAVYBREAK,i);
if(s->hitag > 0)
{
j = headspritestat[6];
while(j >= 0)
{
if(s->hitag == sprite[j].hitag && ( sprite[j].picnum == OOZFILTER || sprite[j].picnum == SEENINE ) )
if(sprite[j].shade != -32)
sprite[j].shade = -32;
j = nextspritestat[j];
}
x = s->extra;
spawn(i,EXPLOSION2);
hitradius( i, pipebombblastradius,x>>2, x-(x>>1),x-(x>>2), x);
spritesound(PIPEBOMB_EXPLODE,i);
goto DETONATE;
}
else
{
hitradius(i,seenineblastradius,10,15,20,25);
KILLIT(i);
}
goto BOLT;
}
if(s->picnum == OOZFILTER || s->picnum == SEENINE || s->picnum == SEENINEDEAD || s->picnum == (SEENINEDEAD+1) )
{
if(s->shade != -32 && s->shade != -33)
{
if(s->xrepeat)
j = (ifhitbyweapon(i) >= 0);
else
j = 0;
if( j || s->shade == -31 )
{
if(j) s->lotag = 0;
t[3] = 1;
j = headspritestat[6];
while(j >= 0)
{
if(s->hitag == sprite[j].hitag && ( sprite[j].picnum == SEENINE || sprite[j].picnum == OOZFILTER ) )
sprite[j].shade = -32;
j = nextspritestat[j];
}
}
}
else
{
if(s->shade == -32)
{
if(s->lotag > 0)
{
s->lotag-=3;
if(s->lotag <= 0) s->lotag = -99;
}
else
s->shade = -33;
}
else
{
if( s->xrepeat > 0 )
{
T3++;
if(T3 == 3)
{
if( s->picnum == OOZFILTER )
{
T3 = 0;
goto DETONATE;
}
if( s->picnum != (SEENINEDEAD+1) )
{
T3 = 0;
if(s->picnum == SEENINEDEAD) s->picnum++;
else if(s->picnum == SEENINE)
s->picnum = SEENINEDEAD;
}
else goto DETONATE;
}
goto BOLT;
}
DETONATE:
earthquaketime = 16;
j = headspritestat[3];
while(j >= 0)
{
if( s->hitag == sprite[j].hitag )
{
if(sprite[j].lotag == 13)
{
if( hittype[j].temp_data[2] == 0 )
hittype[j].temp_data[2] = 1;
}
else if(sprite[j].lotag == 8)
hittype[j].temp_data[4] = 1;
else if(sprite[j].lotag == 18)
{
if(hittype[j].temp_data[0] == 0)
hittype[j].temp_data[0] = 1;
}
else if(sprite[j].lotag == 21)
hittype[j].temp_data[0] = 1;
}
j = nextspritestat[j];
}
s->z -= (32<<8);
if( ( t[3] == 1 && s->xrepeat ) || s->lotag == -99 )
{
x = s->extra;
spawn(i,EXPLOSION2);
hitradius( i,seenineblastradius,x>>2, x-(x>>1),x-(x>>2), x);
spritesound(PIPEBOMB_EXPLODE,i);
}
if(s->xrepeat)
for(x=0;x<8;x++) RANDOMSCRAP;
KILLIT(i);
}
}
goto BOLT;
}
if(s->picnum == MASTERSWITCH)
{
if(s->yvel == 1)
{
s->hitag--;
if(s->hitag <= 0)
{
operatesectors(sect,i);
j = headspritesect[sect];
while(j >= 0)
{
if(sprite[j].statnum == 3)
{
switch(sprite[j].lotag)
{
case 2:
case 21:
case 31:
case 32:
case 36:
hittype[j].temp_data[0] = 1;
break;
case 3:
hittype[j].temp_data[4] = 1;
break;
}
}
else if(sprite[j].statnum == 6)
{
switch(sprite[j].picnum)
{
case SEENINE:
case OOZFILTER:
sprite[j].shade = -31;
break;
}
}
j = nextspritesect[j];
}
KILLIT(i);
}
}
goto BOLT;
}
switch(s->picnum)
{
case VIEWSCREEN:
case VIEWSCREEN2:
if(s->xrepeat == 0) KILLIT(i);
p = findplayer(s, &x);
if( x < 2048 )
{
if( SP == 1 )
camsprite = i;
}
else if( camsprite != -1 && T1 == 1)
{
camsprite = -1;
T1 = 0;
loadtile(s->picnum);
}
goto BOLT;
case TRASH:
if(s->xvel == 0) s->xvel = 1;
IFMOVING
{
makeitfall(i);
if(TRAND&1) s->zvel -= 256;
if( klabs(s->xvel) < 48 )
s->xvel += (TRAND&3);
}
else KILLIT(i);
break;
case SIDEBOLT1:
case SIDEBOLT1+1:
case SIDEBOLT1+2:
case SIDEBOLT1+3:
p = findplayer(s, &x);
if( x >
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -