⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 player.c

📁 game duke3d source
💻 C
📖 第 1 页 / 共 5 页
字号:
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 + -