📄 actors.c
字号:
s->shade += (sector[s->sectnum].floorshade-s->shade)>>1;
BOLT:
i = nexti;
}
}
void movefx(void)
{
short i, j, nexti, p;
long x, ht;
spritetype *s;
i = headspritestat[11];
while(i >= 0)
{
s = &sprite[i];
nexti = nextspritestat[i];
switch(s->picnum)
{
case RESPAWN:
if(sprite[i].extra == 66)
{
j = spawn(i,SHT);
// sprite[j].pal = sprite[i].pal;
KILLIT(i);
}
else if(sprite[i].extra > (66-13))
sprite[i].extra++;
break;
case MUSICANDSFX:
ht = s->hitag;
if(T2 != SoundToggle)
{
T2 = SoundToggle;
T1 = 0;
}
if(s->lotag >= 1000 && s->lotag < 2000)
{
x = ldist(&sprite[ps[screenpeek].i],s);
if( x < ht && T1 == 0 )
{
FX_SetReverb( s->lotag - 1000 );
T1 = 1;
}
if( x >= ht && T1 == 1 )
{
FX_SetReverb(0);
FX_SetReverbDelay(0);
T1 = 0;
}
}
else if(s->lotag < 999 && (unsigned)sector[s->sectnum].lotag < 9 && AmbienceToggle && sector[SECT].floorz != sector[SECT].ceilingz)
{
if( (soundm[s->lotag]&2) )
{
x = dist(&sprite[ps[screenpeek].i],s);
if( x < ht && T1 == 0 && FX_VoiceAvailable(soundpr[s->lotag]-1) )
{
if(numenvsnds == NumVoices)
{
j = headspritestat[11];
while(j >= 0)
{
if( PN == MUSICANDSFX && j != i && sprite[j].lotag < 999 && hittype[j].temp_data[0] == 1 && dist(&sprite[j],&sprite[ps[screenpeek].i]) > x )
{
stopenvsound(sprite[j].lotag,j);
break;
}
j = nextspritestat[j];
}
if(j == -1) goto BOLT;
}
spritesound(s->lotag,i);
T1 = 1;
}
if( x >= ht && T1 == 1 )
{
T1 = 0;
stopenvsound(s->lotag,i);
}
}
if( (soundm[s->lotag]&16) )
{
if(T5 > 0) T5--;
else for(p=connecthead;p>=0;p=connectpoint2[p])
if( p == myconnectindex && ps[p].cursectnum == s->sectnum )
{
j = s->lotag+((unsigned)global_random%(s->hitag+1));
sound(j);
T5 = 26*40 + (global_random%(26*40));
}
}
}
break;
}
BOLT:
i = nexti;
}
}
void movefallers(void)
{
short i, nexti, sect, j;
spritetype *s;
long x;
i = headspritestat[12];
while(i >= 0)
{
nexti = nextspritestat[i];
s = &sprite[i];
sect = s->sectnum;
if( T1 == 0 )
{
s->z -= (16<<8);
T2 = s->ang;
x = s->extra;
IFHIT
{
if( j == FIREEXT || j == RPG || j == RADIUSEXPLOSION || j == SEENINE || j == OOZFILTER )
{
if(s->extra <= 0)
{
T1 = 1;
j = headspritestat[12];
while(j >= 0)
{
if(sprite[j].hitag == SHT)
{
hittype[j].temp_data[0] = 1;
sprite[j].cstat &= (65535-64);
if(sprite[j].picnum == CEILINGSTEAM || sprite[j].picnum == STEAM)
sprite[j].cstat |= 32768;
}
j = nextspritestat[j];
}
}
}
else
{
hittype[i].extra = 0;
s->extra = x;
}
}
s->ang = T2;
s->z += (16<<8);
}
else if(T1 == 1)
{
if(s->lotag > 0)
{
s->lotag-=3;
if(s->lotag <= 0)
{
s->xvel = (32+TRAND&63);
s->zvel = -(1024+(TRAND&1023));
}
}
else
{
if( s->xvel > 0)
{
s->xvel -= 8;
ssp(i,CLIPMASK0);
}
if( floorspace(s->sectnum) ) x = 0;
else
{
if(ceilingspace(s->sectnum))
x = gc/6;
else
x = gc;
}
if( s->z < (sector[sect].floorz-FOURSLEIGHT) )
{
s->zvel += x;
if(s->zvel > 6144)
s->zvel = 6144;
s->z += s->zvel;
}
if( (sector[sect].floorz-s->z) < (16<<8) )
{
j = 1+(TRAND&7);
for(x=0;x<j;x++) RANDOMSCRAP;
KILLIT(i);
}
}
}
BOLT:
i = nexti;
}
}
void movestandables(void)
{
short i, j, k, m, nexti, nextj, nextk, p, q, sect;
long l, x, *t, x1, y1;
spritetype *s;
i = headspritestat[6];
while(i >= 0)
{
nexti = nextspritestat[i];
t = &hittype[i].temp_data[0];
s = &sprite[i];
sect = s->sectnum;
if( sect < 0 ) KILLIT(i);
hittype[i].bposx = s->x;
hittype[i].bposy = s->y;
hittype[i].bposz = s->z;
IFWITHIN(CRANE,CRANE+3)
{
//t[0] = state
//t[1] = checking sector number
if(s->xvel) getglobalz(i);
if( t[0] == 0 ) //Waiting to check the sector
{
j = headspritesect[t[1]];
while(j>=0)
{
nextj = nextspritesect[j];
switch( sprite[j].statnum )
{
case 1:
case 2:
case 6:
case 10:
s->ang = getangle(msx[t[4]+1]-s->x,msy[t[4]+1]-s->y);
setsprite(j,msx[t[4]+1],msy[t[4]+1],sprite[j].z);
t[0]++;
goto BOLT;
}
j = nextj;
}
}
else if(t[0]==1)
{
if( s->xvel < 184 )
{
s->picnum = CRANE+1;
s->xvel += 8;
}
IFMOVING;
if(sect == t[1])
t[0]++;
}
else if(t[0]==2 || t[0]==7)
{
s->z += (1024+512);
if(t[0]==2)
{
if( (sector[sect].floorz - s->z) < (64<<8) )
if(s->picnum > CRANE) s->picnum--;
if( (sector[sect].floorz - s->z) < (4096+1024))
t[0]++;
}
if(t[0]==7)
{
if( (sector[sect].floorz - s->z) < (64<<8) )
{
if(s->picnum > CRANE) s->picnum--;
else
{
if(s->owner==-2)
{
spritesound(DUKE_GRUNT,ps[p].i);
p = findplayer(s,&x);
if(ps[p].on_crane == i)
ps[p].on_crane = -1;
}
t[0]++;
s->owner = -1;
}
}
}
}
else if(t[0]==3)
{
s->picnum++;
if( s->picnum == (CRANE+2) )
{
p = checkcursectnums(t[1]);
if(p >= 0 && ps[p].on_ground)
{
s->owner = -2;
ps[p].on_crane = i;
spritesound(DUKE_GRUNT,ps[p].i);
ps[p].ang = s->ang+1024;
}
else
{
j = headspritesect[t[1]];
while(j>=0)
{
switch( sprite[j].statnum )
{
case 1:
case 6:
s->owner = j;
break;
}
j = nextspritesect[j];
}
}
t[0]++;//Grabbed the sprite
t[2]=0;
goto BOLT;
}
}
else if(t[0]==4) //Delay before going up
{
t[2]++;
if(t[2] > 10)
t[0]++;
}
else if(t[0]==5 || t[0] == 8)
{
if(t[0]==8 && s->picnum < (CRANE+2))
if( (sector[sect].floorz-s->z) > 8192)
s->picnum++;
if(s->z < msx[t[4]+2])
{
t[0]++;
s->xvel = 0;
}
else
s->z -= (1024+512);
}
else if(t[0]==6)
{
if( s->xvel < 192 )
s->xvel += 8;
s->ang = getangle(msx[t[4]]-s->x,msy[t[4]]-s->y);
IFMOVING;
if( ((s->x-msx[t[4]])*(s->x-msx[t[4]])+(s->y-msy[t[4]])*(s->y-msy[t[4]]) ) < (128*128) )
t[0]++;
}
else if(t[0]==9)
t[0] = 0;
setsprite(msy[t[4]+2],s->x,s->y,s->z-(34<<8));
if(s->owner != -1)
{
p = findplayer(s,&x);
IFHIT
{
if(s->owner == -2)
if(ps[p].on_crane == i)
ps[p].on_crane = -1;
s->owner = -1;
s->picnum = CRANE;
goto BOLT;
}
if(s->owner >= 0)
{
setsprite(s->owner,s->x,s->y,s->z);
hittype[s->owner].bposx = s->x;
hittype[s->owner].bposy = s->y;
hittype[s->owner].bposz = s->z;
s->zvel = 0;
}
else if(s->owner == -2)
{
ps[p].oposx = ps[p].posx = s->x-(sintable[(ps[p].ang+512)&2047]>>6);
ps[p].oposy = ps[p].posy = s->y-(sintable[ps[p].ang&2047]>>6);
ps[p].oposz = ps[p].posz = s->z+(2<<8);
setsprite(ps[p].i,ps[p].posx,ps[p].posy,ps[p].posz);
ps[p].cursectnum = sprite[ps[p].i].sectnum;
}
}
goto BOLT;
}
IFWITHIN(WATERFOUNTAIN,WATERFOUNTAIN+3)
{
if(t[0] > 0)
{
if( t[0] < 20 )
{
t[0]++;
s->picnum++;
if( s->picnum == ( WATERFOUNTAIN+3 ) )
s->picnum = WATERFOUNTAIN+1;
}
else
{
p = findplayer(s,&x);
if(x > 512)
{
t[0] = 0;
s->picnum = WATERFOUNTAIN;
}
else t[0] = 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -