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

📄 player.c

📁 game duke3d source
💻 C
📖 第 1 页 / 共 5 页
字号:
                {
                    myospal(244-((*kb)<<3)-(p->look_ang>>1),looking_arc+130-gun_pos+((*kb)<<4),FIRSTGUN+6,gs,o,pal);
                    myospal(224-(p->look_ang>>1),looking_arc+220-gun_pos,FIRSTGUN+5,gs,o,pal);
                }
                else if((*kb) < 20)
                {
                    myospal(124+((*kb)<<1)-(p->look_ang>>1),looking_arc+430-gun_pos-((*kb)<<3),FIRSTGUN+6,gs,o,pal);
                    myospal(224-(p->look_ang>>1),looking_arc+220-gun_pos,FIRSTGUN+5,gs,o,pal);
                }
                else if((*kb) < 23)
                {
                    myospal(184-(p->look_ang>>1),looking_arc+235-gun_pos,FIRSTGUN+8,gs,o,pal);
                    myospal(224-(p->look_ang>>1),looking_arc+210-gun_pos,FIRSTGUN+5,gs,o,pal);
                }
                else if((*kb) < 25)
                {
                    myospal(164-(p->look_ang>>1),looking_arc+245-gun_pos,FIRSTGUN+8,gs,o,pal);
                    myospal(224-(p->look_ang>>1),looking_arc+220-gun_pos,FIRSTGUN+5,gs,o,pal);
                }
                else if((*kb) < 27)
                    myospal(194-(p->look_ang>>1),looking_arc+235-gun_pos,FIRSTGUN+5,gs,o,pal);
            }

            break;
        case HANDBOMB_WEAPON:
        {
            if(sprite[p->i].pal == 1)
                pal = 1;
            else
                pal = sector[p->cursectnum].floorpal;

            if((*kb))
            {
                char throw_frames[]
                    = {0,0,0,0,0,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2};

                if((*kb) < 7)
                    gun_pos -= 10*(*kb);        //D
                else if((*kb) < 12)
                    gun_pos += 20*((*kb)-10); //U
                else if((*kb) < 20)
                    gun_pos -= 9*((*kb)-14);  //D

                myospal(weapon_xoffset+190-(p->look_ang>>1),looking_arc+250-gun_pos,HANDTHROW+throw_frames[(*kb)],gs,o,pal);
            }
            else
                myospal(weapon_xoffset+190-(p->look_ang>>1),looking_arc+260-gun_pos,HANDTHROW,gs,o,pal);
        }
        break;

        case HANDREMOTE_WEAPON:
        {
                signed char remote_frames[] = {0,1,1,2,1,1,0,0,0,0,0};
                if(sprite[p->i].pal == 1)
                    pal = 1;
                else
                    pal = sector[p->cursectnum].floorpal;

                weapon_xoffset = -48;

                if((*kb))
                    myospal(weapon_xoffset+150-(p->look_ang>>1),looking_arc+258-gun_pos,HANDREMOTE+remote_frames[(*kb)],gs,o,pal);
                else
                    myospal(weapon_xoffset+150-(p->look_ang>>1),looking_arc+258-gun_pos,HANDREMOTE,gs,o,pal);
            }
            break;
        case DEVISTATOR_WEAPON:
            if(sprite[p->i].pal == 1)
                pal = 1;
            else
                pal = sector[p->cursectnum].floorpal;

            if((*kb))
            {
                char cycloidy[] = {0,4,12,24,12,4,0};

                i = sgn((*kb)>>2);

                if(p->hbomb_hold_delay)
                {
                    myospal( (cycloidy[*kb]>>1)+weapon_xoffset+268-(p->look_ang>>1),cycloidy[*kb]+looking_arc+238-gun_pos,DEVISTATOR+i,-32,o,pal);
                    myospal(weapon_xoffset+30-(p->look_ang>>1),looking_arc+240-gun_pos,DEVISTATOR,gs,o|4,pal);
                }
                else
                {
                    myospal( -(cycloidy[*kb]>>1)+weapon_xoffset+30-(p->look_ang>>1),cycloidy[*kb]+looking_arc+240-gun_pos,DEVISTATOR+i,-32,o|4,pal);
                    myospal(weapon_xoffset+268-(p->look_ang>>1),looking_arc+238-gun_pos,DEVISTATOR,gs,o,pal);
                }
            }
            else
            {
                myospal(weapon_xoffset+268-(p->look_ang>>1),looking_arc+238-gun_pos,DEVISTATOR,gs,o,pal);
                myospal(weapon_xoffset+30-(p->look_ang>>1),looking_arc+240-gun_pos,DEVISTATOR,gs,o|4,pal);
            }
            break;

        case FREEZE_WEAPON:
            if(sprite[p->i].pal == 1)
                pal = 1;
            else
                pal = sector[p->cursectnum].floorpal;

            if((*kb))
            {
                char cat_frames[] = { 0,0,1,1,2,2 };

                if(sprite[p->i].pal != 1)
                {
                    weapon_xoffset += rand()&3;
                    looking_arc += rand()&3;
                }
                gun_pos -= 16;
                myospal(weapon_xoffset+210-(p->look_ang>>1),looking_arc+261-gun_pos,FREEZE+2,-32,o,pal);
                myospal(weapon_xoffset+210-(p->look_ang>>1),looking_arc+235-gun_pos,FREEZE+3+cat_frames[*kb%6],-32,o,pal);
            }
            else myospal(weapon_xoffset+210-(p->look_ang>>1),looking_arc+261-gun_pos,FREEZE,gs,o,pal);

            break;

        case SHRINKER_WEAPON:
        case GROW_WEAPON:
            weapon_xoffset += 28;
            looking_arc += 18;
            if(sprite[p->i].pal == 1)
                pal = 1;
            else
                pal = sector[p->cursectnum].floorpal;
            if((*kb) == 0)
            {
                if(cw == GROW_WEAPON)
                {
                     myospal(weapon_xoffset+184-(p->look_ang>>1),
                        looking_arc+240-gun_pos,SHRINKER+2,
                        16-(sintable[p->random_club_frame&2047]>>10),
                        o,2);

                     myospal(weapon_xoffset+188-(p->look_ang>>1),
                       looking_arc+240-gun_pos,SHRINKER-2,gs,o,pal);
                }
                else
                {
                    myospal(weapon_xoffset+184-(p->look_ang>>1),
                     looking_arc+240-gun_pos,SHRINKER+2,
                     16-(sintable[p->random_club_frame&2047]>>10),
                     o,0);

                    myospal(weapon_xoffset+188-(p->look_ang>>1),
                     looking_arc+240-gun_pos,SHRINKER,gs,o,pal);
                }
            }
            else
            {
                if(sprite[p->i].pal != 1)
                {
                    weapon_xoffset += rand()&3;
                    gun_pos += (rand()&3);
                }

                if(cw == GROW_WEAPON)
                {
                    myospal(weapon_xoffset+184-(p->look_ang>>1),
                        looking_arc+240-gun_pos,SHRINKER+3+((*kb)&3),-32,
                        o,2);

                    myospal(weapon_xoffset+188-(p->look_ang>>1),
                       looking_arc+240-gun_pos,SHRINKER-1,gs,o,pal);

                }
                else
                {
                    myospal(weapon_xoffset+184-(p->look_ang>>1),
                     looking_arc+240-gun_pos,SHRINKER+3+((*kb)&3),-32,
                     o,0);

                     myospal(weapon_xoffset+188-(p->look_ang>>1),
                     looking_arc+240-gun_pos,SHRINKER+1,gs,o,pal);
                }
            }
            break;
    }

    displayloogie(snum);

}

#define TURBOTURNTIME (TICRATE/8) // 7
#define NORMALTURN   15
#define PREAMBLETURN 5
#define NORMALKEYMOVE 40
#define MAXVEL       ((NORMALKEYMOVE*2)+10)
#define MAXSVEL      ((NORMALKEYMOVE*2)+10)
#define MAXANGVEL    127
#define MAXHORIZ     127

long myaimmode = 0, myaimstat = 0, omyaimstat = 0;

void getinput(short snum)
{

    short j, daang;
// MED
    ControlInfo info;
    int32 tics;
    boolean running;
    int32 turnamount;
    int32 keymove;
    int32 momx,momy;
    struct player_struct *p;

    momx = momy = 0;
    p = &ps[snum];

    CONTROL_GetInput( &info );

    if( (p->gm&MODE_MENU) || (p->gm&MODE_TYPE) || (ud.pause_on && !KB_KeyPressed(sc_Pause)) )
    {
         loc.fvel = vel = 0;
         loc.svel = svel = 0;
         loc.avel = angvel = 0;
         loc.horz = horiz = 0;
         loc.bits = (((long)gamequit)<<26);
         info.dz = info.dyaw = 0;
         return;
    }

    tics = totalclock-lastcontroltime;
    lastcontroltime = totalclock;

    if (MouseAiming)
          myaimmode = BUTTON(gamefunc_Mouse_Aiming);
     else
	 {
		  omyaimstat = myaimstat; myaimstat = BUTTON(gamefunc_Mouse_Aiming);
		  if (myaimstat > omyaimstat)
          {
				myaimmode ^= 1;
                FTA(44+myaimmode,p);
          }
	 }

    if(multiflag == 1)
    {
        loc.bits =   1<<17;
        loc.bits |=   multiwhat<<18;
        loc.bits |=   multipos<<19;
        multiflag = 0;
        return;
    }

    loc.bits =   BUTTON(gamefunc_Jump);
    loc.bits |=   BUTTON(gamefunc_Crouch)<<1;
    loc.bits |=   BUTTON(gamefunc_Fire)<<2;
    loc.bits |=   BUTTON(gamefunc_Aim_Up)<<3;
    loc.bits |=   BUTTON(gamefunc_Aim_Down)<<4;
    loc.bits |=   BUTTON(gamefunc_Run)<<5;
    loc.bits |=   BUTTON(gamefunc_Look_Left)<<6;
    loc.bits |=   BUTTON(gamefunc_Look_Right)<<7;

    j=0;
    if (BUTTON(gamefunc_Weapon_1))
       j = 1;
    if (BUTTON(gamefunc_Weapon_2))
       j = 2;
    if (BUTTON(gamefunc_Weapon_3))
       j = 3;
    if (BUTTON(gamefunc_Weapon_4))
       j = 4;
    if (BUTTON(gamefunc_Weapon_5))
       j = 5;
    if (BUTTON(gamefunc_Weapon_6))
       j = 6;

    if (BUTTON(gamefunc_Previous_Weapon))
        j = 11;
    if (BUTTON(gamefunc_Next_Weapon))
        j = 12;

    #ifndef VOLUMEONE
    if (BUTTON(gamefunc_Weapon_7))
        j = 7;
    if (BUTTON(gamefunc_Weapon_8))
       j = 8;
    if (BUTTON(gamefunc_Weapon_9))
       j = 9;
    if (BUTTON(gamefunc_Weapon_10))
       j = 10;
    #endif

    loc.bits |=   j<<8;
    loc.bits |=   BUTTON(gamefunc_Steroids)<<12;
    loc.bits |=   BUTTON(gamefunc_Look_Up)<<13;
    loc.bits |=   BUTTON(gamefunc_Look_Down)<<14;
    loc.bits |=   BUTTON(gamefunc_NightVision)<<15;
    loc.bits |=   BUTTON(gamefunc_MedKit)<<16;
    loc.bits |=   BUTTON(gamefunc_Center_View)<<18;
    loc.bits |=   BUTTON(gamefunc_Holster_Weapon)<<19;
    loc.bits |=   BUTTON(gamefunc_Inventory_Left)<<20;
    loc.bits |=   KB_KeyPressed(sc_Pause)<<21;
    loc.bits |=   BUTTON(gamefunc_Quick_Kick)<<22;
    loc.bits |=   myaimmode<<23;
    loc.bits |=   BUTTON(gamefunc_Holo_Duke)<<24;
    loc.bits |=   BUTTON(gamefunc_Jetpack)<<25;
    loc.bits |=   (((long)gamequit)<<26);
    loc.bits |=   BUTTON(gamefunc_Inventory_Right)<<27;
    loc.bits |=   BUTTON(gamefunc_TurnAround)<<28;
    loc.bits |=   BUTTON(gamefunc_Open)<<29;
    loc.bits |=   BUTTON(gamefunc_Inventory)<<30;
    loc.bits |=   KB_KeyPressed(sc_Escape)<<31;

    running = BUTTON(gamefunc_Run)|ud.auto_run;
    svel = vel = angvel = horiz = 0;

    if( CONTROL_JoystickEnabled )
        if ( running ) info.dz *= 2;

    if( BUTTON(gamefunc_Strafe) )
       svel = -info.dyaw/8;
    else angvel = info.dyaw/64;

    if( myaimmode )
    {
        if(ud.mouseflip)
            horiz -= info.dz/(314-128);
        else horiz += info.dz/(314-128);

        info.dz = 0;
    }

    svel -= info.dx;
    vel = -info.dz>>6;

    if (running)
    {
        turnamount = NORMALTURN<<1;
        keymove = NORMALKEYMOVE<<1;
    }
    else
    {
        turnamount = NORMALTURN;
        keymove = NORMALKEYMOVE;
    }

    if (BUTTON(gamefunc_Strafe))
    {
        if ( BUTTON(gamefunc_Turn_Left))
           {
           svel -= -keymove;
           }
        if ( BUTTON(gamefunc_Turn_Right))
           {
           svel -= keymove;
           }
    }
    else
    {
        if ( BUTTON(gamefunc_Turn_Left))
           {
           turnheldtime += tics;
           if (turnheldtime>=TURBOTURNTIME)
              {
              angvel -= turnamount;
              }
           else
              {
              angvel -= PREAMBLETURN;
              }
           }
        else if ( BUTTON(gamefunc_Turn_Right))
           {
           turnheldtime += tics;
           if (turnheldtime>=TURBOTURNTIME)
              {
              angvel += turnamount;
              }
           else
              {
              angvel += PREAMBLETURN;
              }
           }
        else
           {
           turnheldtime=0;
           }
    }

    if ( BUTTON( gamefunc_Strafe_Left ) )
        svel += keymove;

    if ( BUTTON( gamefunc_Strafe_Right ) )
        svel += -keymove;

    if ( BUTTON(gamefunc_Move_Forward

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -