From 583406a2ba2a10bfe0e654a0ede285da46c9bd88 Mon Sep 17 00:00:00 2001 From: Samuel Villareal Date: Sat, 4 Sep 2010 04:06:10 +0000 Subject: + Map flags for things added (MTF_*) + A_FireGrenade and A_MissileTick codepointers added + Step up height changed to 16*FRACUNIT (non-human things are excluded) + Fixed bug in P_MovePlayer where player cannot climb over things when pressing forward and jumping. Missed a line of code for this + P_SpawnSubMissile renamed to P_SpawnFaceMissile + P_SpawnMortar added + Ammo types added + Fixed some inaccuracies in P_SpawnBlood Subversion-branch: /branches/strife-branch Subversion-revision: 2008 --- src/strife/p_pspr.c | 60 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) (limited to 'src/strife/p_pspr.c') diff --git a/src/strife/p_pspr.c b/src/strife/p_pspr.c index 1444cf4f..2d30c2d2 100644 --- a/src/strife/p_pspr.c +++ b/src/strife/p_pspr.c @@ -164,6 +164,9 @@ boolean P_CheckAmmo (player_t* player) ammotype_t ammo; int count; + // villsa [STRIFE] TODO - temp until this function is cleaned up + return true; + ammo = weaponinfo[player->readyweapon].ammo; // Minimal amount for one shot varies. @@ -852,6 +855,63 @@ A_BFGsound S_StartSound (player->mo, sfx_swish); // villsa [STRIFE] TODO - fix sounds } +// +// A_FireGrenade +// villsa [STRIFE] - new codepointer +// + +void A_FireGrenade(player_t* player, pspdef_t* pspr) +{ + mobjtype_t type; + mobj_t* mo; + state_t* st1; + state_t* st2; + angle_t an; + fixed_t radius; + + // decide on what type of grenade to spawn + if(player->readyweapon == wp_hegrenade) + type = MT_HEGRENADE; + else + { + if(player->readyweapon == wp_wpgrenade) + type = MT_PGRENADE; + } + + player->ammo[weaponinfo[player->readyweapon].ammo]--; + + // set flash frame + st1 = &states[(pspr->state - states) + weaponinfo[player->readyweapon].flashstate]; + st2 = &states[weaponinfo[player->readyweapon].atkstate]; + P_SetPsprite(player, ps_flash, st1 - st2); + + player->mo->z += (32*FRACUNIT); // ugh + mo = P_SpawnMortar(player->mo, type); + player->mo->z -= (32*FRACUNIT); // ugh + + // change momz based on player's pitch + mo->momz = FixedMul((player->pitch<info->speed) + (8*FRACUNIT); + S_StartSound(mo, mo->info->seesound); + + radius = mobjinfo[type].radius + player->mo->info->radius; + an = (player->mo->angle >> ANGLETOFINESHIFT); + + mo->x += FixedMul(finecosine[an], radius + (4*FRACUNIT)); + mo->y += FixedMul(finesine[an], radius + (4*FRACUNIT)); + + // shoot grenade from left or right side? + if(&states[weaponinfo[player->readyweapon].atkstate] == pspr->state) + an = (player->mo->angle - ANG90) >> ANGLETOFINESHIFT; + else + an = (player->mo->angle + ANG90) >> ANGLETOFINESHIFT; + + mo->x += FixedMul((15*FRACUNIT), finecosine[an]); + mo->y += FixedMul((15*FRACUNIT), finesine[an]); + + // set bounce flag + mo->flags |= MF_BOUNCE; +} + // -- cgit v1.2.3