📄 player.c
字号:
{
k = headspritesect[wall[hitwall].nextsector];
while(k >= 0)
{
if(sprite[k].statnum == 3 && sprite[k].lotag == 13)
return;
k = nextspritesect[k];
}
}
if( wall[hitwall].nextwall >= 0 &&
wall[wall[hitwall].nextwall].hitag != 0 )
return;
if(wall[hitwall].hitag == 0)
{
k = spawn(i,atwith);
sprite[k].xvel = -12;
sprite[k].ang = getangle(wall[hitwall].x-wall[wall[hitwall].point2].x,
wall[hitwall].y-wall[wall[hitwall].point2].y)+512;
sprite[k].x = hitx;
sprite[k].y = hity;
sprite[k].z = hitz;
sprite[k].cstat |= (TRAND&4);
ssp(k,CLIPMASK0);
setsprite(k,sprite[k].x,sprite[k].y,sprite[k].z);
if( PN == OOZFILTER || PN == NEWBEAST )
sprite[k].pal = 6;
}
}
return;
}
if(hitsect < 0) break;
if( ( klabs(sx-hitx)+klabs(sy-hity) ) < 1024 )
{
if(hitwall >= 0 || hitspr >= 0)
{
j = EGS(hitsect,hitx,hity,hitz,KNEE,-15,0,0,sa,32,0,i,4);
sprite[j].extra += (TRAND&7);
if(p >= 0)
{
k = spawn(j,SMALLSMOKE);
sprite[k].z -= (8<<8);
spritesound(KICK_HIT,j);
}
if ( p >= 0 && ps[p].steroids_amount > 0 && ps[p].steroids_amount < 400 )
sprite[j].extra += (max_player_health>>2);
if( hitspr >= 0 && sprite[hitspr].picnum != ACCESSSWITCH && sprite[hitspr].picnum != ACCESSSWITCH2 )
{
checkhitsprite(hitspr,j);
if(p >= 0) checkhitswitch(p,hitspr,1);
}
else if( hitwall >= 0 )
{
if( wall[hitwall].cstat&2 )
if(wall[hitwall].nextsector >= 0)
if(hitz >= (sector[wall[hitwall].nextsector].floorz) )
hitwall = wall[hitwall].nextwall;
if( hitwall >= 0 && wall[hitwall].picnum != ACCESSSWITCH && wall[hitwall].picnum != ACCESSSWITCH2 )
{
checkhitwall(j,hitwall,hitx,hity,hitz,atwith);
if(p >= 0) checkhitswitch(p,hitwall,0);
}
}
}
else if(p >= 0 && zvel > 0 && sector[hitsect].lotag == 1)
{
j = spawn(ps[p].i,WATERSPLASH2);
sprite[j].x = hitx;
sprite[j].y = hity;
sprite[j].ang = ps[p].ang; // Total tweek
sprite[j].xvel = 32;
ssp(i,CLIPMASK0);
sprite[j].xvel = 0;
}
}
break;
case SHOTSPARK1:
case SHOTGUN:
case CHAINGUN:
if( s->extra >= 0 ) s->shade = -96;
if(p >= 0)
{
j = aim( s, AUTO_AIM_ANGLE );
if(j >= 0)
{
dal = ((sprite[j].xrepeat*tilesizy[sprite[j].picnum])<<1)+(5<<8);
switch(sprite[j].picnum)
{
case GREENSLIME:
case GREENSLIME+1:
case GREENSLIME+2:
case GREENSLIME+3:
case GREENSLIME+4:
case GREENSLIME+5:
case GREENSLIME+6:
case GREENSLIME+7:
case ROTATEGUN:
dal -= (8<<8);
break;
}
zvel = ( ( sprite[j].z-sz-dal )<<8 ) / ldist(&sprite[ps[p].i], &sprite[j]) ;
sa = getangle(sprite[j].x-sx,sprite[j].y-sy);
}
if(atwith == SHOTSPARK1)
{
if(j == -1)
{
sa += 16-(TRAND&31);
zvel = (100-ps[p].horiz-ps[p].horizoff)<<5;
zvel += 128-(TRAND&255);
}
}
else
{
sa += 16-(TRAND&31);
if(j == -1) zvel = (100-ps[p].horiz-ps[p].horizoff)<<5;
zvel += 128-(TRAND&255);
}
sz -= (2<<8);
}
else
{
j = findplayer(s,&x);
sz -= (4<<8);
zvel = ( (ps[j].posz-sz) <<8 ) / (ldist(&sprite[ps[j].i], s ) );
if(s->picnum != BOSS1)
{
zvel += 128-(TRAND&255);
sa += 32-(TRAND&63);
}
else
{
zvel += 128-(TRAND&255);
sa = getangle(ps[j].posx-sx,ps[j].posy-sy)+64-(TRAND&127);
}
}
s->cstat &= ~257;
hitscan(sx,sy,sz,sect,
sintable[(sa+512)&2047],
sintable[sa&2047],
zvel<<6,&hitsect,&hitwall,&hitspr,&hitx,&hity,&hitz,CLIPMASK1);
s->cstat |= 257;
if(hitsect < 0) return;
if( (TRAND&15) == 0 && sector[hitsect].lotag == 2 )
tracers(hitx,hity,hitz,sx,sy,sz,8-(ud.multimode>>1));
if(p >= 0)
{
k = EGS(hitsect,hitx,hity,hitz,SHOTSPARK1,-15,10,10,sa,0,0,i,4);
sprite[k].extra = *actorscrptr[atwith];
sprite[k].extra += (TRAND%6);
if( hitwall == -1 && hitspr == -1)
{
if( zvel < 0 )
{
if( sector[hitsect].ceilingstat&1 )
{
sprite[k].xrepeat = 0;
sprite[k].yrepeat = 0;
return;
}
else
checkhitceiling(hitsect);
}
spawn(k,SMALLSMOKE);
}
if(hitspr >= 0)
{
checkhitsprite(hitspr,k);
if( sprite[hitspr].picnum == APLAYER && (ud.coop != 1 || ud.ffire == 1) )
{
l = spawn(k,JIBS6);
sprite[k].xrepeat = sprite[k].yrepeat = 0;
sprite[l].z += (4<<8);
sprite[l].xvel = 16;
sprite[l].xrepeat = sprite[l].yrepeat = 24;
sprite[l].ang += 64-(TRAND&127);
}
else spawn(k,SMALLSMOKE);
if(p >= 0 && (
sprite[hitspr].picnum == DIPSWITCH ||
sprite[hitspr].picnum == DIPSWITCH+1 ||
sprite[hitspr].picnum == DIPSWITCH2 ||
sprite[hitspr].picnum == DIPSWITCH2+1 ||
sprite[hitspr].picnum == DIPSWITCH3 ||
sprite[hitspr].picnum == DIPSWITCH3+1 ||
sprite[hitspr].picnum == HANDSWITCH ||
sprite[hitspr].picnum == HANDSWITCH+1) )
{
checkhitswitch(p,hitspr,1);
return;
}
}
else if( hitwall >= 0 )
{
spawn(k,SMALLSMOKE);
if( isadoorwall(wall[hitwall].picnum) == 1 )
goto SKIPBULLETHOLE;
if(p >= 0 && (
wall[hitwall].picnum == DIPSWITCH ||
wall[hitwall].picnum == DIPSWITCH+1 ||
wall[hitwall].picnum == DIPSWITCH2 ||
wall[hitwall].picnum == DIPSWITCH2+1 ||
wall[hitwall].picnum == DIPSWITCH3 ||
wall[hitwall].picnum == DIPSWITCH3+1 ||
wall[hitwall].picnum == HANDSWITCH ||
wall[hitwall].picnum == HANDSWITCH+1) )
{
checkhitswitch(p,hitwall,0);
return;
}
if(wall[hitwall].hitag != 0 || ( wall[hitwall].nextwall >= 0 && wall[wall[hitwall].nextwall].hitag != 0 ) )
goto SKIPBULLETHOLE;
if( hitsect >= 0 && sector[hitsect].lotag == 0 )
if( wall[hitwall].overpicnum != BIGFORCE )
if( (wall[hitwall].nextsector >= 0 && sector[wall[hitwall].nextsector].lotag == 0 ) ||
( wall[hitwall].nextsector == -1 && sector[hitsect].lotag == 0 ) )
if( (wall[hitwall].cstat&16) == 0)
{
if(wall[hitwall].nextsector >= 0)
{
l = headspritesect[wall[hitwall].nextsector];
while(l >= 0)
{
if(sprite[l].statnum == 3 && sprite[l].lotag == 13)
goto SKIPBULLETHOLE;
l = nextspritesect[l];
}
}
l = headspritestat[5];
while(l >= 0)
{
if(sprite[l].picnum == BULLETHOLE)
if(dist(&sprite[l],&sprite[k]) < (12+(TRAND&7)) )
goto SKIPBULLETHOLE;
l = nextspritestat[l];
}
l = spawn(k,BULLETHOLE);
sprite[l].xvel = -1;
sprite[l].ang = getangle(wall[hitwall].x-wall[wall[hitwall].point2].x,
wall[hitwall].y-wall[wall[hitwall].point2].y)+512;
ssp(l,CLIPMASK0);
}
SKIPBULLETHOLE:
if( wall[hitwall].cstat&2 )
if(wall[hitwall].nextsector >= 0)
if(hitz >= (sector[wall[hitwall].nextsector].floorz) )
hitwall = wall[hitwall].nextwall;
checkhitwall(k,hitwall,hitx,hity,hitz,SHOTSPARK1);
}
}
else
{
k = EGS(hitsect,hitx,hity,hitz,SHOTSPARK1,-15,24,24,sa,0,0,i,4);
sprite[k].extra = *actorscrptr[atwith];
if( hitspr >= 0 )
{
checkhitsprite(hitspr,k);
if( sprite[hitspr].picnum != APLAYER )
spawn(k,SMALLSMOKE);
else sprite[k].xrepeat = sprite[k].yrepeat = 0;
}
else if( hitwall >= 0 )
checkhitwall(k,hitwall,hitx,hity,hitz,SHOTSPARK1);
}
if( (TRAND&255) < 4 )
xyzsound(PISTOL_RICOCHET,k,hitx,hity,hitz);
return;
case FIRELASER:
case SPIT:
case COOLEXPLOSION1:
if( s->extra >= 0 ) s->shade = -96;
scount = 1;
if(atwith == SPIT) vel = 292;
else
{
if(atwith == COOLEXPLOSION1)
{
if(s->picnum == BOSS2) vel = 644;
else vel = 348;
sz -= (4<<7);
}
else
{
vel = 840;
sz -= (4<<7);
}
}
if(p >= 0)
{
j = aim( s, AUTO_AIM_ANGLE );
if(j >= 0)
{
dal = ((sprite[j].xrepeat*tilesizy[sprite[j].picnum])<<1)-(12<<8);
zvel = ((sprite[j].z-sz-dal)*vel ) / ldist(&sprite[ps[p].i], &sprite[j]) ;
sa = getangle(sprite[j].x-sx,sprite[j].y-sy);
}
else
zvel = (100-ps[p].horiz-ps[p].horizoff)*98;
}
else
{
j = findplayer(s,&x);
// sa = getangle(ps[j].oposx-sx,ps[j].oposy-sy);
sa += 16-(TRAND&31);
zvel = ( ( (ps[j].oposz - sz + (3<<8) ) )*vel ) / ldist(&sprite[ps[j].i],s);
}
oldzvel = zvel;
if(atwith == SPIT) { sizx = 18;sizy = 18,sz -= (10<<8); }
else
{
if( atwith == FIRELASER )
{
if(p >= 0)
{
sizx = 34;
sizy = 34;
}
else
{
sizx = 18;
sizy = 18;
}
}
else
{
sizx = 18;
sizy = 18;
}
}
if(p >= 0) sizx = 7,sizy = 7;
while(scount > 0)
{
j = EGS(sect,sx,sy,sz,atwith,-127,sizx,sizy,sa,vel,zvel,i,4);
sprite[j].extra += (TRAND&7);
if(atwith == COOLEXPLOSION1)
{
sprite[j].shade = 0;
if(PN == BOSS2)
{
l = sprite[j].xvel;
sprite[j].xvel = 1024;
ssp(j,CLIPMASK0);
sprite[j].xvel = l;
sprite[j].ang += 128-(TRAND&255);
}
}
sprite[j].cstat = 128;
sprite[j].clipdist = 4;
sa = s->ang+32-(TRAND&63);
zvel = oldzvel+512-(TRAND&1023);
scount--;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -