📄 player.c
字号:
char animateknuckles(short gs,short snum)
{
short knuckle_frames[] = {0,1,2,2,3,3,3,2,2,1,0};
short looking_arc, pal;
if(ps[snum].knuckle_incs == 0 || sprite[ps[snum].i].extra <= 0) return 0;
looking_arc = 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;
myospal(160+(sync[snum].avel>>4)-(ps[snum].look_ang>>1),looking_arc+180-((ps[snum].horiz-ps[snum].horizoff)>>4),CRACKKNUCKLES+knuckle_frames[ps[snum].knuckle_incs>>1],gs,4,pal);
return 1;
}
long lastvisinc;
void displaymasks(short snum)
{
short i, p;
if(sprite[ps[snum].i].pal == 1)
p = 1;
else
p = sector[ps[snum].cursectnum].floorpal;
if(ps[snum].scuba_on)
{
if(ud.screen_size > 4)
{
rotatesprite(43<<16,(200-8-(tilesizy[SCUBAMASK])<<16),65536,0,SCUBAMASK,0,p,2+16,windowx1,windowy1,windowx2,windowy2);
rotatesprite((320-43)<<16,(200-8-(tilesizy[SCUBAMASK])<<16),65536,1024,SCUBAMASK,0,p,2+4+16,windowx1,windowy1,windowx2,windowy2);
}
else
{
rotatesprite(43<<16,(200-(tilesizy[SCUBAMASK])<<16),65536,0,SCUBAMASK,0,p,2+16,windowx1,windowy1,windowx2,windowy2);
rotatesprite((320-43)<<16,(200-(tilesizy[SCUBAMASK])<<16),65536,1024,SCUBAMASK,0,p,2+4+16,windowx1,windowy1,windowx2,windowy2);
}
}
}
char animatetip(short gs,short snum)
{
short p,looking_arc;
short tip_y[] = {0,-8,-16,-32,-64,-84,-108,-108,-108,-108,-108,-108,-108,-108,-108,-108,-96,-72,-64,-32,-16};
if(ps[snum].tipincs == 0) return 0;
looking_arc = klabs(ps[snum].look_ang)/9;
looking_arc -= (ps[snum].hard_landing<<3);
if(sprite[ps[snum].i].pal == 1)
p = 1;
else
p = sector[ps[snum].cursectnum].floorpal;
/* if(ps[snum].access_spritenum >= 0)
p = sprite[ps[snum].access_spritenum].pal;
else
p = wall[ps[snum].access_wallnum].pal;
*/
myospal(170+(sync[snum].avel>>4)-(ps[snum].look_ang>>1),
(tip_y[ps[snum].tipincs]>>1)+looking_arc+240-((ps[snum].horiz-ps[snum].horizoff)>>4),TIP+((26-ps[snum].tipincs)>>4),gs,0,p);
return 1;
}
char animateaccess(short gs,short snum)
{
short access_y[] = {0,-8,-16,-32,-64,-84,-108,-108,-108,-108,-108,-108,-108,-108,-108,-108,-96,-72,-64,-32,-16};
short looking_arc;
char p;
if(ps[snum].access_incs == 0 || sprite[ps[snum].i].extra <= 0) return 0;
looking_arc = access_y[ps[snum].access_incs] + klabs(ps[snum].look_ang)/9;
looking_arc -= (ps[snum].hard_landing<<3);
if(ps[snum].access_spritenum >= 0)
p = sprite[ps[snum].access_spritenum].pal;
else p = 0;
// else
// p = wall[ps[snum].access_wallnum].pal;
if((ps[snum].access_incs-3) > 0 && (ps[snum].access_incs-3)>>3)
myospal(170+(sync[snum].avel>>4)-(ps[snum].look_ang>>1)+(access_y[ps[snum].access_incs]>>2),looking_arc+266-((ps[snum].horiz-ps[snum].horizoff)>>4),HANDHOLDINGLASER+(ps[snum].access_incs>>3),gs,0,p);
else
myospal(170+(sync[snum].avel>>4)-(ps[snum].look_ang>>1)+(access_y[ps[snum].access_incs]>>2),looking_arc+266-((ps[snum].horiz-ps[snum].horizoff)>>4),HANDHOLDINGACCESS,gs,4,p);
return 1;
}
short fistsign;
void displayweapon(short snum)
{
long gun_pos, looking_arc, cw;
long weapon_xoffset, i, j, x1, y1, x2;
char o,pal;
signed char gs;
struct player_struct *p;
short *kb;
p = &ps[snum];
kb = &p->kickback_pic;
o = 0;
looking_arc = klabs(p->look_ang)/9;
gs = sprite[p->i].shade;
if(gs > 24) gs = 24;
if(p->newowner >= 0 || ud.camerasprite >= 0 || p->over_shoulder_on > 0 || (sprite[p->i].pal != 1 && sprite[p->i].extra <= 0) || animatefist(gs,snum) || animateknuckles(gs,snum) || animatetip(gs,snum) || animateaccess(gs,snum) )
return;
animateknee(gs,snum);
gun_pos = 80-(p->weapon_pos*p->weapon_pos);
weapon_xoffset = (160)-90;
weapon_xoffset -= (sintable[((p->weapon_sway>>1)+512)&2047]/(1024+512));
weapon_xoffset -= 58 + p->weapon_ang;
if( sprite[p->i].xrepeat < 32 )
gun_pos -= klabs(sintable[(p->weapon_sway<<2)&2047]>>9);
else gun_pos -= klabs(sintable[(p->weapon_sway>>1)&2047]>>10);
gun_pos -= (p->hard_landing<<3);
if(p->last_weapon >= 0)
cw = p->last_weapon;
else cw = p->curr_weapon;
j = 14-p->quick_kick;
if(j != 14)
{
if(sprite[p->i].pal == 1)
pal = 1;
else
{
pal = sector[p->cursectnum].floorpal;
if(pal == 0)
pal = p->palookup;
}
if( j < 5 || j > 9 )
myospal(weapon_xoffset+80-(p->look_ang>>1),
looking_arc+250-gun_pos,KNEE,gs,o|4,pal);
else myospal(weapon_xoffset+160-16-(p->look_ang>>1),
looking_arc+214-gun_pos,KNEE+1,gs,o|4,pal);
}
if( sprite[p->i].xrepeat < 40 )
{
if(p->jetpack_on == 0 )
{
i = sprite[p->i].xvel;
looking_arc += 32-(i>>1);
fistsign += i>>1;
}
cw = weapon_xoffset;
weapon_xoffset += sintable[(fistsign)&2047]>>10;
myos(weapon_xoffset+250-(p->look_ang>>1),
looking_arc+258-(klabs(sintable[(fistsign)&2047]>>8)),
FIST,gs,o);
weapon_xoffset = cw;
weapon_xoffset -= sintable[(fistsign)&2047]>>10;
myos(weapon_xoffset+40-(p->look_ang>>1),
looking_arc+200+(klabs(sintable[(fistsign)&2047]>>8)),
FIST,gs,o|4);
}
else switch(cw)
{
case KNEE_WEAPON:
if( (*kb) > 0 )
{
if(sprite[p->i].pal == 1)
pal = 1;
else
{
pal = sector[p->cursectnum].floorpal;
if(pal == 0)
pal = p->palookup;
}
if( (*kb) < 5 || (*kb) > 9 )
myospal(weapon_xoffset+220-(p->look_ang>>1),
looking_arc+250-gun_pos,KNEE,gs,o,pal);
else
myospal(weapon_xoffset+160-(p->look_ang>>1),
looking_arc+214-gun_pos,KNEE+1,gs,o,pal);
}
break;
case TRIPBOMB_WEAPON:
if(sprite[p->i].pal == 1)
pal = 1;
else
pal = sector[p->cursectnum].floorpal;
weapon_xoffset += 8;
gun_pos -= 10;
if((*kb) > 6)
looking_arc += ((*kb)<<3);
else if((*kb) < 4)
myospal(weapon_xoffset+142-(p->look_ang>>1),
looking_arc+234-gun_pos,HANDHOLDINGLASER+3,gs,o,pal);
myospal(weapon_xoffset+130-(p->look_ang>>1),
looking_arc+249-gun_pos,
HANDHOLDINGLASER+((*kb)>>2),gs,o,pal);
myospal(weapon_xoffset+152-(p->look_ang>>1),
looking_arc+249-gun_pos,
HANDHOLDINGLASER+((*kb)>>2),gs,o|4,pal);
break;
case RPG_WEAPON:
if(sprite[p->i].pal == 1)
pal = 1;
else pal = sector[p->cursectnum].floorpal;
weapon_xoffset -= sintable[(768+((*kb)<<7))&2047]>>11;
gun_pos += sintable[(768+((*kb)<<7)&2047)]>>11;
if(*kb > 0)
{
if(*kb < 8)
{
myospal(weapon_xoffset+164,(looking_arc<<1)+176-gun_pos,
RPGGUN+((*kb)>>1),gs,o,pal);
}
}
myospal(weapon_xoffset+164,(looking_arc<<1)+176-gun_pos,
RPGGUN,gs,o,pal);
break;
case SHOTGUN_WEAPON:
if(sprite[p->i].pal == 1)
pal = 1;
else
pal = sector[p->cursectnum].floorpal;
weapon_xoffset -= 8;
switch(*kb)
{
case 1:
case 2:
myospal(weapon_xoffset+168-(p->look_ang>>1),looking_arc+201-gun_pos,
SHOTGUN+2,-128,o,pal);
case 0:
case 6:
case 7:
case 8:
myospal(weapon_xoffset+146-(p->look_ang>>1),looking_arc+202-gun_pos,
SHOTGUN,gs,o,pal);
break;
case 3:
case 4:
case 5:
case 9:
case 10:
case 11:
case 12:
if( *kb > 1 && *kb < 5 )
{
gun_pos -= 40;
weapon_xoffset += 20;
myospal(weapon_xoffset+178-(p->look_ang>>1),looking_arc+194-gun_pos,
SHOTGUN+1+((*(kb)-1)>>1),-128,o,pal);
}
myospal(weapon_xoffset+158-(p->look_ang>>1),looking_arc+220-gun_pos,
SHOTGUN+3,gs,o,pal);
break;
case 13:
case 14:
case 15:
myospal(32+weapon_xoffset+166-(p->look_ang>>1),looking_arc+210-gun_pos,
SHOTGUN+4,gs,o,pal);
break;
case 16:
case 17:
case 18:
case 19:
myospal(64+weapon_xoffset+170-(p->look_ang>>1),looking_arc+196-gun_pos,
SHOTGUN+5,gs,o,pal);
break;
case 20:
case 21:
case 22:
case 23:
myospal(64+weapon_xoffset+176-(p->look_ang>>1),looking_arc+196-gun_pos,
SHOTGUN+6,gs,o,pal);
break;
case 24:
case 25:
case 26:
case 27:
myospal(64+weapon_xoffset+170-(p->look_ang>>1),looking_arc+196-gun_pos,
SHOTGUN+5,gs,o,pal);
break;
case 28:
case 29:
case 30:
myospal(32+weapon_xoffset+156-(p->look_ang>>1),looking_arc+206-gun_pos,
SHOTGUN+4,gs,o,pal);
break;
}
break;
case CHAINGUN_WEAPON:
if(sprite[p->i].pal == 1)
pal = 1;
else
pal = sector[p->cursectnum].floorpal;
if(*kb > 0)
gun_pos -= sintable[(*kb)<<7]>>12;
if(*kb > 0 && sprite[p->i].pal != 1) weapon_xoffset += 1-(rand()&3);
myospal(weapon_xoffset+168-(p->look_ang>>1),looking_arc+260-gun_pos,
CHAINGUN,gs,o,pal);
switch(*kb)
{
case 0:
myospal(weapon_xoffset+178-(p->look_ang>>1),looking_arc+233-gun_pos,
CHAINGUN+1,gs,o,pal);
break;
default:
if(*kb > 4 && *kb < 12)
{
i = 0;
if(sprite[p->i].pal != 1) i = rand()&7;
myospal(i+weapon_xoffset-4+140-(p->look_ang>>1),i+looking_arc-((*kb)>>1)+208-gun_pos,
CHAINGUN+5+((*kb-4)/5),gs,o,pal);
if(sprite[p->i].pal != 1) i = rand()&7;
myospal(i+weapon_xoffset-4+184-(p->look_ang>>1),i+looking_arc-((*kb)>>1)+208-gun_pos,
CHAINGUN+5+((*kb-4)/5),gs,o,pal);
}
if(*kb < 8)
{
i = rand()&7;
myospal(i+weapon_xoffset-4+162-(p->look_ang>>1),i+looking_arc-((*kb)>>1)+208-gun_pos,
CHAINGUN+5+((*kb-2)/5),gs,o,pal);
myospal(weapon_xoffset+178-(p->look_ang>>1),looking_arc+233-gun_pos,
CHAINGUN+1+((*kb)>>1),gs,o,pal);
}
else myospal(weapon_xoffset+178-(p->look_ang>>1),looking_arc+233-gun_pos,
CHAINGUN+1,gs,o,pal);
break;
}
break;
case PISTOL_WEAPON:
if(sprite[p->i].pal == 1)
pal = 1;
else
pal = sector[p->cursectnum].floorpal;
if( (*kb) < 5)
{
short kb_frames[] = {0,1,2,0,0},l;
l = 195-12+weapon_xoffset;
if((*kb) == 2)
l -= 3;
myospal(
(l-(p->look_ang>>1)),
(looking_arc+244-gun_pos),
FIRSTGUN+kb_frames[*kb],
gs,2,pal);
}
else
{
if((*kb) < 10)
myospal(194-(p->look_ang>>1),looking_arc+230-gun_pos,FIRSTGUN+4,gs,o,pal);
else if((*kb) < 15)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -