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

📄 p_pspr.c

📁 PIXIL is a small footprint operating environment, complete with PDA PIM applications, a browser and
💻 C
📖 第 1 页 / 共 2 页
字号:
    //  so change to the ready state.    newstate = weaponinfo[player->readyweapon].readystate;    P_SetPsprite (player, ps_weapon, newstate);}//// A_GunFlash//voidA_GunFlash( player_t*	player,  pspdef_t*	psp ) {    P_SetMobjState (player->mo, S_PLAY_ATK2);    P_SetPsprite (player,ps_flash,weaponinfo[player->readyweapon].flashstate);}//// WEAPON ATTACKS////// A_Punch//voidA_Punch( player_t*	player,  pspdef_t*	psp ) {    angle_t	angle;    int		damage;    int		slope;	    damage = (P_Random ()%10+1)<<1;    if (player->powers[pw_strength])		damage *= 10;    angle = player->mo->angle;    angle += (P_Random()-P_Random())<<18;    slope = P_AimLineAttack (player->mo, angle, MELEERANGE);    P_LineAttack (player->mo, angle, MELEERANGE, slope, damage);    // turn to face target    if (linetarget)    {	S_StartSound (player->mo, sfx_punch);	player->mo->angle = R_PointToAngle2 (player->mo->x,					     player->mo->y,					     linetarget->x,					     linetarget->y);    }}//// A_Saw//voidA_Saw( player_t*	player,  pspdef_t*	psp ) {    angle_t	angle;    int		damage;    int		slope;    damage = 2*(P_Random ()%10+1);    angle = player->mo->angle;    angle += (P_Random()-P_Random())<<18;        // use meleerange + 1 se the puff doesn't skip the flash    slope = P_AimLineAttack (player->mo, angle, MELEERANGE+1);    P_LineAttack (player->mo, angle, MELEERANGE+1, slope, damage);    if (!linetarget)    {	S_StartSound (player->mo, sfx_sawful);	return;    }    S_StartSound (player->mo, sfx_sawhit);	    // turn to face target    angle = R_PointToAngle2 (player->mo->x, player->mo->y,			     linetarget->x, linetarget->y);    if (angle - player->mo->angle > ANG180)    {	if (angle - player->mo->angle < -ANG90/20)	    player->mo->angle = angle + ANG90/21;	else	    player->mo->angle -= ANG90/20;    }    else    {	if (angle - player->mo->angle > ANG90/20)	    player->mo->angle = angle - ANG90/21;	else	    player->mo->angle += ANG90/20;    }    player->mo->flags |= MF_JUSTATTACKED;}//// A_FireMissile//voidA_FireMissile( player_t*	player,  pspdef_t*	psp ) {    player->ammo[weaponinfo[player->readyweapon].ammo]--;    P_SpawnPlayerMissile (player->mo, MT_ROCKET);}//// A_FireBFG//voidA_FireBFG( player_t*	player,  pspdef_t*	psp ) {    player->ammo[weaponinfo[player->readyweapon].ammo] -= BFGCELLS;    P_SpawnPlayerMissile (player->mo, MT_BFG);}//// A_FirePlasma//voidA_FirePlasma( player_t*	player,  pspdef_t*	psp ) {    player->ammo[weaponinfo[player->readyweapon].ammo]--;    P_SetPsprite (player,		  ps_flash,		  weaponinfo[player->readyweapon].flashstate+(P_Random ()&1) );    P_SpawnPlayerMissile (player->mo, MT_PLASMA);}//// P_BulletSlope// Sets a slope so a near miss is at aproximately// the height of the intended target//fixed_t		bulletslope;void P_BulletSlope (mobj_t*	mo){    angle_t	an;        // see which target is to be aimed at    an = mo->angle;    bulletslope = P_AimLineAttack (mo, an, 16*64*FRACUNIT);    if (!linetarget)    {	an += 1<<26;	bulletslope = P_AimLineAttack (mo, an, 16*64*FRACUNIT);	if (!linetarget)	{	    an -= 2<<26;	    bulletslope = P_AimLineAttack (mo, an, 16*64*FRACUNIT);	}    }}//// P_GunShot//voidP_GunShot( mobj_t*	mo,  boolean	accurate ){    angle_t	angle;    int		damage;	    damage = 5*(P_Random ()%3+1);    angle = mo->angle;    if (!accurate)	angle += (P_Random()-P_Random())<<18;    P_LineAttack (mo, angle, MISSILERANGE, bulletslope, damage);}//// A_FirePistol//voidA_FirePistol( player_t*	player,  pspdef_t*	psp ) {    S_StartSound (player->mo, sfx_pistol);    P_SetMobjState (player->mo, S_PLAY_ATK2);    player->ammo[weaponinfo[player->readyweapon].ammo]--;    P_SetPsprite (player,		  ps_flash,		  weaponinfo[player->readyweapon].flashstate);    P_BulletSlope (player->mo);    P_GunShot (player->mo, !player->refire);}//// A_FireShotgun//voidA_FireShotgun( player_t*	player,  pspdef_t*	psp ) {    int		i;	    S_StartSound (player->mo, sfx_shotgn);    P_SetMobjState (player->mo, S_PLAY_ATK2);    player->ammo[weaponinfo[player->readyweapon].ammo]--;    P_SetPsprite (player,		  ps_flash,		  weaponinfo[player->readyweapon].flashstate);    P_BulletSlope (player->mo);	    for (i=0 ; i<7 ; i++)	P_GunShot (player->mo, false);}//// A_FireShotgun2//voidA_FireShotgun2( player_t*	player,  pspdef_t*	psp ) {    int		i;    angle_t	angle;    int		damage;			    S_StartSound (player->mo, sfx_dshtgn);    P_SetMobjState (player->mo, S_PLAY_ATK2);    player->ammo[weaponinfo[player->readyweapon].ammo]-=2;    P_SetPsprite (player,		  ps_flash,		  weaponinfo[player->readyweapon].flashstate);    P_BulletSlope (player->mo);	    for (i=0 ; i<20 ; i++)    {	damage = 5*(P_Random ()%3+1);	angle = player->mo->angle;	angle += (P_Random()-P_Random())<<19;	P_LineAttack (player->mo,		      angle,		      MISSILERANGE,		      bulletslope + ((P_Random()-P_Random())<<5), damage);    }}//// A_FireCGun//voidA_FireCGun( player_t*	player,  pspdef_t*	psp ) {    S_StartSound (player->mo, sfx_pistol);    if (!player->ammo[weaponinfo[player->readyweapon].ammo])	return;		    P_SetMobjState (player->mo, S_PLAY_ATK2);    player->ammo[weaponinfo[player->readyweapon].ammo]--;    P_SetPsprite (player,		  ps_flash,		  weaponinfo[player->readyweapon].flashstate		  + psp->state		  - &states[S_CHAIN1] );    P_BulletSlope (player->mo);	    P_GunShot (player->mo, !player->refire);}//// ?//void A_Light0 (player_t *player, pspdef_t *psp){    player->extralight = 0;}void A_Light1 (player_t *player, pspdef_t *psp){    player->extralight = 1;}void A_Light2 (player_t *player, pspdef_t *psp){    player->extralight = 2;}//// A_BFGSpray// Spawn a BFG explosion on every monster in view//void A_BFGSpray (mobj_t* mo) {    int			i;    int			j;    int			damage;    angle_t		an;	    // offset angles from its attack angle    for (i=0 ; i<40 ; i++)    {	an = mo->angle - ANG90/2 + ANG90/40*i;	// mo->target is the originator (player)	//  of the missile	P_AimLineAttack (mo->target, an, 16*64*FRACUNIT);	if (!linetarget)	    continue;	P_SpawnMobj (linetarget->x,		     linetarget->y,		     linetarget->z + (linetarget->height>>2),		     MT_EXTRABFG);		damage = 0;	for (j=0;j<15;j++)	    damage += (P_Random()&7) + 1;	P_DamageMobj (linetarget, mo->target,mo->target, damage);    }}//// A_BFGsound//voidA_BFGsound( player_t*	player,  pspdef_t*	psp ){    S_StartSound (player->mo, sfx_bfg);}//// P_SetupPsprites// Called at start of level for each player.//void P_SetupPsprites (player_t* player) {    int	i;	    // remove all psprites    for (i=0 ; i<NUMPSPRITES ; i++)	player->psprites[i].state = NULL;		    // spawn the gun    player->pendingweapon = player->readyweapon;    P_BringUpWeapon (player);}//// P_MovePsprites// Called every tic by player thinking routine.//void P_MovePsprites (player_t* player) {    int		i;    pspdef_t*	psp;    state_t*	state;	    psp = &player->psprites[0];    for (i=0 ; i<NUMPSPRITES ; i++, psp++)    {	// a null state means not active	if ( (state = psp->state) )		{	    // drop tic count and possibly change state	    // a -1 tic count never changes	    if (psp->tics != -1)		    {		psp->tics--;		if (!psp->tics)		    P_SetPsprite (player, i, psp->state->nextstate);	    }					}    }        player->psprites[ps_flash].sx = player->psprites[ps_weapon].sx;    player->psprites[ps_flash].sy = player->psprites[ps_weapon].sy;}

⌨️ 快捷键说明

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