📄 player.c
字号:
return;
case FREEZEBLAST:
sz += (3<<8);
case RPG:
if( s->extra >= 0 ) s->shade = -96;
scount = 1;
vel = 644;
j = -1;
if(p >= 0)
{
j = aim( s, 48 );
if(j >= 0)
{
dal = ((sprite[j].xrepeat*tilesizy[sprite[j].picnum])<<1)+(8<<8);
zvel = ( (sprite[j].z-sz-dal)*vel ) / ldist(&sprite[ps[p].i], &sprite[j]);
if( sprite[j].picnum != RECON )
sa = getangle(sprite[j].x-sx,sprite[j].y-sy);
}
else zvel = (100-ps[p].horiz-ps[p].horizoff)*81;
if(atwith == RPG)
spritesound(RPG_SHOOT,i);
}
else
{
j = findplayer(s,&x);
sa = getangle(ps[j].oposx-sx,ps[j].oposy-sy);
if(PN == BOSS3)
sz -= (32<<8);
else if(PN == BOSS2)
{
vel += 128;
sz += 24<<8;
}
l = ldist(&sprite[ps[j].i],s);
zvel = ( (ps[j].oposz-sz)*vel) / l;
if( badguy(s) && (s->hitag&face_player_smart) )
sa = s->ang+(TRAND&31)-16;
}
if( p >= 0 && j >= 0)
l = j;
else l = -1;
j = EGS(sect,
sx+(sintable[(348+sa+512)&2047]/448),
sy+(sintable[(sa+348)&2047]/448),
sz-(1<<8),atwith,0,14,14,sa,vel,zvel,i,4);
sprite[j].extra += (TRAND&7);
if(atwith != FREEZEBLAST)
sprite[j].yvel = l;
else
{
sprite[j].yvel = numfreezebounces;
sprite[j].xrepeat >>= 1;
sprite[j].yrepeat >>= 1;
sprite[j].zvel -= (2<<4);
}
if(p == -1)
{
if(PN == BOSS3)
{
if(TRAND&1)
{
sprite[j].x -= sintable[sa&2047]>>6;
sprite[j].y -= sintable[(sa+1024+512)&2047]>>6;
sprite[j].ang -= 8;
}
else
{
sprite[j].x += sintable[sa&2047]>>6;
sprite[j].y += sintable[(sa+1024+512)&2047]>>6;
sprite[j].ang += 4;
}
sprite[j].xrepeat = 42;
sprite[j].yrepeat = 42;
}
else if(PN == BOSS2)
{
sprite[j].x -= sintable[sa&2047]/56;
sprite[j].y -= sintable[(sa+1024+512)&2047]/56;
sprite[j].ang -= 8+(TRAND&255)-128;
sprite[j].xrepeat = 24;
sprite[j].yrepeat = 24;
}
else if(atwith != FREEZEBLAST)
{
sprite[j].xrepeat = 30;
sprite[j].yrepeat = 30;
sprite[j].extra >>= 2;
}
}
else if(ps[p].curr_weapon == DEVISTATOR_WEAPON)
{
sprite[j].extra >>= 2;
sprite[j].ang += 16-(TRAND&31);
sprite[j].zvel += 256-(TRAND&511);
if( ps[p].hbomb_hold_delay )
{
sprite[j].x -= sintable[sa&2047]/644;
sprite[j].y -= sintable[(sa+1024+512)&2047]/644;
}
else
{
sprite[j].x += sintable[sa&2047]>>8;
sprite[j].y += sintable[(sa+1024+512)&2047]>>8;
}
sprite[j].xrepeat >>= 1;
sprite[j].yrepeat >>= 1;
}
sprite[j].cstat = 128;
if(atwith == RPG)
sprite[j].clipdist = 4;
else
sprite[j].clipdist = 40;
break;
case HANDHOLDINGLASER:
if(p >= 0)
zvel = (100-ps[p].horiz-ps[p].horizoff)*32;
else zvel = 0;
hitscan(sx,sy,sz-ps[p].pyoff,sect,
sintable[(sa+512)&2047],
sintable[sa&2047],
zvel<<6,&hitsect,&hitwall,&hitspr,&hitx,&hity,&hitz,CLIPMASK1);
j = 0;
if(hitspr >= 0) break;
if(hitwall >= 0 && hitsect >= 0)
if( ((hitx-sx)*(hitx-sx)+(hity-sy)*(hity-sy)) < (290*290) )
{
if( wall[hitwall].nextsector >= 0)
{
if( sector[wall[hitwall].nextsector].lotag <= 2 && sector[hitsect].lotag <= 2 )
j = 1;
}
else if( sector[hitsect].lotag <= 2 )
j = 1;
}
if(j == 1)
{
k = EGS(hitsect,hitx,hity,hitz,TRIPBOMB,-16,4,5,sa,0,0,i,6);
sprite[k].hitag = k;
spritesound(LASERTRIP_ONWALL,k);
sprite[k].xvel = -20;
ssp(k,CLIPMASK0);
sprite[k].cstat = 16;
hittype[k].temp_data[5] = sprite[k].ang = getangle(wall[hitwall].x-wall[wall[hitwall].point2].x,wall[hitwall].y-wall[wall[hitwall].point2].y)-512;
if(p >= 0)
ps[p].ammo_amount[TRIPBOMB_WEAPON]--;
}
return;
case BOUNCEMINE:
case MORTER:
if( s->extra >= 0 ) s->shade = -96;
j = ps[findplayer(s,&x)].i;
x = ldist(&sprite[j],s);
zvel = -x>>1;
if(zvel < -4096)
zvel = -2048;
vel = x>>4;
EGS(sect,
sx+(sintable[(512+sa+512)&2047]>>8),
sy+(sintable[(sa+512)&2047]>>8),
sz+(6<<8),atwith,-64,32,32,sa,vel,zvel,i,1);
break;
case GROWSPARK:
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);
}
else
{
sa += 16-(TRAND&31);
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 ) );
zvel += 128-(TRAND&255);
sa += 32-(TRAND&63);
}
k = 0;
// RESHOOTGROW:
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;
j = EGS(sect,hitx,hity,hitz,GROWSPARK,-16,28,28,sa,0,0,i,1);
sprite[j].pal = 2;
sprite[j].cstat |= 130;
sprite[j].xrepeat = sprite[j].yrepeat = 1;
if( hitwall == -1 && hitspr == -1 && hitsect >= 0)
{
if( zvel < 0 && (sector[hitsect].ceilingstat&1) == 0)
checkhitceiling(hitsect);
}
else if(hitspr >= 0) checkhitsprite(hitspr,j);
else if(hitwall >= 0 && wall[hitwall].picnum != ACCESSSWITCH && wall[hitwall].picnum != ACCESSSWITCH2 )
{
/* if(wall[hitwall].overpicnum == MIRROR && k == 0)
{
l = getangle(
wall[wall[hitwall].point2].x-wall[hitwall].x,
wall[wall[hitwall].point2].y-wall[hitwall].y);
sx = hitx;
sy = hity;
sz = hitz;
sect = hitsect;
sa = ((l<<1) - sa)&2047;
sx += sintable[(sa+512)&2047]>>12;
sy += sintable[sa&2047]>>12;
k++;
goto RESHOOTGROW;
}
else */
checkhitwall(j,hitwall,hitx,hity,hitz,atwith);
}
break;
case SHRINKER:
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);
zvel = ( (sprite[j].z-sz-dal-(4<<8))*768) / (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 if(s->statnum != 3)
{
j = findplayer(s,&x);
l = ldist(&sprite[ps[j].i],s);
zvel = ( (ps[j].oposz-sz)*512) / l ;
}
else zvel = 0;
j = EGS(sect,
sx+(sintable[(512+sa+512)&2047]>>12),
sy+(sintable[(sa+512)&2047]>>12),
sz+(2<<8),SHRINKSPARK,-16,28,28,sa,768,zvel,i,4);
sprite[j].cstat = 128;
sprite[j].clipdist = 32;
return;
}
return;
}
void displayloogie(short snum)
{
long i, a, x, y, z;
if(ps[snum].loogcnt == 0) return;
y = (ps[snum].loogcnt<<2);
for(i=0;i<ps[snum].numloogs;i++)
{
a = klabs(sintable[((ps[snum].loogcnt+i)<<5)&2047])>>5;
z = 4096+((ps[snum].loogcnt+i)<<9);
x = (-sync[snum].avel)+(sintable[((ps[snum].loogcnt+i)<<6)&2047]>>10);
rotatesprite(
(ps[snum].loogiex[i]+x)<<16,(200+ps[snum].loogiey[i]-y)<<16,z-(i<<8),256-a,
LOOGIE,0,0,2,0,0,xdim-1,ydim-1);
}
}
char animatefist(short gs,short snum)
{
short looking_arc,fisti,fistpal;
long fistzoom, fistz;
fisti = ps[snum].fist_incs;
if(fisti > 32) fisti = 32;
if(fisti <= 0) return 0;
looking_arc = klabs(ps[snum].look_ang)/9;
fistzoom = 65536L - (sintable[(512+(fisti<<6))&2047]<<2);
if(fistzoom > 90612L)
fistzoom = 90612L;
if(fistzoom < 40920)
fistzoom = 40290;
fistz = 194 + (sintable[((6+fisti)<<7)&2047]>>9);
if(sprite[ps[snum].i].pal == 1)
fistpal = 1;
else
fistpal = sector[ps[snum].cursectnum].floorpal;
rotatesprite(
(-fisti+222+(sync[snum].avel>>4))<<16,
(looking_arc+fistz)<<16,
fistzoom,0,FIST,gs,fistpal,2,0,0,xdim-1,ydim-1);
return 1;
}
char animateknee(short gs,short snum)
{
short knee_y[] = {0,-8,-16,-32,-64,-84,-108,-108,-108,-72,-32,-8};
short looking_arc, pal;
if(ps[snum].knee_incs > 11 || ps[snum].knee_incs == 0 || sprite[ps[snum].i].extra <= 0) return 0;
looking_arc = knee_y[ps[snum].knee_incs] + klabs(ps[snum].look_ang)/9;
looking_arc -= (ps[snum].hard_landing<<3);
if(sprite[ps[snum].i].pal == 1)
pal = 1;
else
{
pal = sector[ps[snum].cursectnum].floorpal;
if(pal == 0)
pal = ps[snum].palookup;
}
myospal(105+(sync[snum].avel>>4)-(ps[snum].look_ang>>1)+(knee_y[ps[snum].knee_incs]>>2),looking_arc+280-((ps[snum].horiz-ps[snum].horizoff)>>4),KNEE,gs,4,pal);
return 1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -