From ded5e702b8f28f9eb2d5322d47f0cd08e93cb74b Mon Sep 17 00:00:00 2001 From: Samuel Villareal Date: Sat, 4 Sep 2010 06:34:42 +0000 Subject: + Found nearly duplicate names (MT_MINIMISSLE and MT_MINIMISLE). Corrected names + Majority of player action code pointers implemented + Removed all unused Doom player codepointers + P_SpawnPlayerMissile now returns a mobj Subversion-branch: /branches/strife-branch Subversion-revision: 2009 --- src/strife/info.c | 2 +- src/strife/info.h | 2 +- src/strife/p_enemy.c | 103 ++++++++---- src/strife/p_local.h | 3 +- src/strife/p_mobj.c | 8 +- src/strife/p_pspr.c | 437 ++++++++++++++++++--------------------------------- 6 files changed, 234 insertions(+), 321 deletions(-) diff --git a/src/strife/info.c b/src/strife/info.c index a89c8842..d1decf6d 100644 --- a/src/strife/info.c +++ b/src/strife/info.c @@ -6938,7 +6938,7 @@ mobjinfo_t mobjinfo[NUMMOBJTYPES] = "flame thrower parts", //namepointer }, - { /*MT_MINIMISSILE*/ + { /*MT_MISSILELAUNCHER*/ 2003, //doomednum S_MMSL_00, //spawnstate 1000, //spawnhealth diff --git a/src/strife/info.h b/src/strife/info.h index 285ab9a8..8a6ab107 100644 --- a/src/strife/info.h +++ b/src/strife/info.h @@ -2037,7 +2037,7 @@ typedef enum MT_RIFLESTAND, //189 MT_FLAMETHROWER, //190 MT_TOKEN_FLAME_THROWER_PARTS, //191 - MT_MINIMISSILE, //192 + MT_MISSILELAUNCHER, //192 MT_BLASTER, //193 MT_CROSSBOW, //194 MT_GRENADELAUNCHER, //195 diff --git a/src/strife/p_enemy.c b/src/strife/p_enemy.c index cf610285..55ad8910 100644 --- a/src/strife/p_enemy.c +++ b/src/strife/p_enemy.c @@ -166,6 +166,75 @@ P_NoiseAlert P_RecursiveSound (emmiter->subsector->sector, 0); } +// +// P_WakeUpThing +// villsa [STRIFE] new function +// + +static void P_WakeUpThing(mobj_t* puncher, mobj_t* rover) +{ + if(!(rover->flags & MF_INCOMBAT)) + { + rover->target = puncher; + if(rover->info->seesound) + S_StartSound(rover, rover->info->seesound); + P_SetMobjState(rover, rover->info->seestate); + } +} + +// +// P_DoPunchAlert +// villsa [STRIFE] - new function +// Wake up buddies nearby when the player thinks he's gotten too clever +// with the punch dagger. Walks sector links. +// +void P_DoPunchAlert(mobj_t *puncher, mobj_t *punchee) +{ + mobj_t *rover; + + // don't bother with this crap if we're already on alert + if(punchee->subsector->sector->soundtarget) + return; + + // gotta still be alive to call for help + if(punchee->health <= 0) + return; + + // has to be something you can wake up and kill too + if(!(punchee->flags & MF_COUNTKILL) || punchee->flags & MF_INCOMBAT) + return; + + // wake up punchee + punchee->target = puncher; + P_SetMobjState(punchee, punchee->info->seestate); + + // wake up everybody nearby + + // scan forward on sector list + for(rover = punchee->snext; rover; rover = rover->snext) + { + // we only wake up certain thing types (Acolytes and Templars?) + if(rover->health > 0 && rover->type >= MT_GUARD1 && rover->type <= MT_PGUARD && + (P_CheckSight(rover, puncher) || P_CheckSight(rover, punchee))) + { + P_WakeUpThing(puncher, rover); + rover->flags |= MF_INCOMBAT; // huh? why? + } + } + + // scan backward on sector list + for(rover = punchee->sprev; rover; rover = rover->sprev) + { + // we only wake up certain thing types (Acolytes and Templars?) + if(rover->health > 0 && rover->type >= MT_GUARD1 && rover->type <= MT_PGUARD && + (P_CheckSight(rover, puncher) || P_CheckSight(rover, punchee))) + { + P_WakeUpThing(puncher, rover); + rover->flags |= MF_INCOMBAT; // huh? why? + } + } +} + @@ -2465,40 +2534,6 @@ void A_ClearForceField(mobj_t* actor) } -void A_FireFlameThrower(mobj_t* actor) -{ - -} - -void A_FireMauler2(mobj_t* actor) -{ - -} - -void A_FireElectricBolt(mobj_t* actor) -{ - -} - -void A_FirePoisonBolt(mobj_t* actor) -{ - -} - -void A_FireRifle(mobj_t* actor) -{ - -} - -void A_FireMauler1(mobj_t* actor) -{ - -} - -void A_SigilSound(mobj_t* actor) -{ - -} void A_FireSigil(mobj_t* actor) { diff --git a/src/strife/p_local.h b/src/strife/p_local.h index 87370e09..2560a522 100644 --- a/src/strife/p_local.h +++ b/src/strife/p_local.h @@ -130,7 +130,7 @@ mobj_t* P_SpawnSparkPuff(fixed_t x, fixed_t y, fixed_t z); // villsa [STRIFE] void P_SpawnBlood (fixed_t x, fixed_t y, fixed_t z, int damage); mobj_t* P_SpawnMissile (mobj_t* source, mobj_t* dest, mobjtype_t type); mobj_t* P_SpawnFacingMissile(mobj_t* source, mobj_t* target, mobjtype_t type); // villsa [STRIFE] -void P_SpawnPlayerMissile (mobj_t* source, mobjtype_t type); +mobj_t* P_SpawnPlayerMissile(mobj_t* source, mobjtype_t type); mobj_t* P_SpawnMortar(mobj_t *source, mobjtype_t type); // villsa [STRIFE] void P_ExplodeMissile (mobj_t* mo); // villsa [STRIFE] @@ -139,6 +139,7 @@ void P_ExplodeMissile (mobj_t* mo); // villsa [STRIFE] // P_ENEMY // void P_NoiseAlert (mobj_t* target, mobj_t* emmiter); +void P_DoPunchAlert(mobj_t *puncher, mobj_t *punchee); // villsa [STRIFE] // diff --git a/src/strife/p_mobj.c b/src/strife/p_mobj.c index a64397d8..5f7e258a 100644 --- a/src/strife/p_mobj.c +++ b/src/strife/p_mobj.c @@ -1156,11 +1156,9 @@ mobj_t* P_SpawnFacingMissile(mobj_t* source, mobj_t* target, mobjtype_t type) // // P_SpawnPlayerMissile // Tries to aim at a nearby monster +// villsa [STRIFE] now returns a mobj // -void -P_SpawnPlayerMissile -( mobj_t* source, - mobjtype_t type ) +mobj_t* P_SpawnPlayerMissile(mobj_t* source, mobjtype_t type) { mobj_t* th; angle_t an; @@ -1219,6 +1217,8 @@ P_SpawnPlayerMissile th->momz = FixedMul( th->info->speed, slope); P_CheckMissileSpawn (th); + + return th; } // diff --git a/src/strife/p_pspr.c b/src/strife/p_pspr.c index 2d30c2d2..937b746b 100644 --- a/src/strife/p_pspr.c +++ b/src/strife/p_pspr.c @@ -506,53 +506,6 @@ A_Punch } -// -// A_Saw -// -void -A_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_swish); // villsa [STRIFE] TODO - fix sounds - return; - } - S_StartSound (player->mo, sfx_swish); // villsa [STRIFE] TODO - fix sounds - - // turn to face target - angle = R_PointToAngle2 (player->mo->x, player->mo->y, - linetarget->x, linetarget->y); - if (angle - player->mo->angle > ANG180) - { - if ((signed int) (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; -} - // Doom does not check the bounds of the ammo array. As a result, // it is possible to use an ammo type > 4 that overflows into the // maxammo array and affects that instead. Through dehacked, for @@ -573,54 +526,142 @@ static void DecreaseAmmo(player_t *player, int ammonum, int amount) // -// A_FireMissile +// A_FireFlameThrower +// villsa [STRIFE] completly new compared to the original // -void -A_FireMissile -( player_t* player, - pspdef_t* psp ) + +void A_FireFlameThrower(player_t* player, pspdef_t* psp) { - DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, 1); - // villsa [STRIFE] TODO - update -// P_SpawnPlayerMissile (player->mo, MT_ROCKET); -} + mobj_t* mo; + P_SetMobjState(player->mo, S_PLAY_06); + player->ammo[weaponinfo[player->readyweapon].ammo]--; + player->mo->angle += (P_Random() - P_Random()) << 18; + + mo = P_SpawnPlayerMissile(player->mo, MT_SFIREBALL); + mo->momz += (5*FRACUNIT); +} // -// A_FireBFG +// A_FireMissile +// villsa [STRIFE] completly new compared to the original // -void -A_FireBFG -( player_t* player, - pspdef_t* psp ) + +void A_FireMissile(player_t* player, pspdef_t* psp) { - DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, - deh_bfg_cells_per_shot); - // villsa [STRIFE] unused -// P_SpawnPlayerMissile (player->mo, MT_BFG); + angle_t an; + mobj_t* mo; + + an = player->mo->angle; + player->mo->angle += (P_Random() - P_Random())<<(19 - (player->accuracy * 4 / 100)); + P_SetMobjState(player->mo, S_PLAY_06); + player->ammo[weaponinfo[player->readyweapon].ammo]--; + P_SpawnPlayerMissile(player->mo, MT_MINIMISSLE); + player->mo->angle = an; } +// +// A_FireMauler2 +// villsa [STRIFE] - new codepointer +// +void A_FireMauler2(player_t* player, pspdef_t* pspr) +{ + P_SetMobjState(player->mo, S_PLAY_06); + P_DamageMobj(player->mo, player->mo, NULL, 20); + player->ammo[weaponinfo[player->readyweapon].ammo] -= 30; + P_SpawnPlayerMissile(player->mo, MT_TORPEDO); + P_Thrust(player, player->mo->angle + ANG180, 512000); +} // -// A_FirePlasma +// A_FireGrenade +// villsa [STRIFE] - new codepointer // -void -A_FirePlasma -( player_t* player, - pspdef_t* psp ) + +void A_FireGrenade(player_t* player, pspdef_t* pspr) { - DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, 1); + mobjtype_t type; + mobj_t* mo; + state_t* st1; + state_t* st2; + angle_t an; + fixed_t radius; - P_SetPsprite (player, - ps_flash, - weaponinfo[player->readyweapon].flashstate+(P_Random ()&1) ); + // 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]--; - // villsa [STRIFE] TODO - update -// P_SpawnPlayerMissile (player->mo, MT_PLASMA); + // 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; +} + +// +// A_FireElectricBolt +// villsa [STRIFE] - new codepointer +// + +void A_FireElectricBolt(player_t* player, pspdef_t* pspr) +{ + angle_t an = player->mo->angle; + + player->mo->angle += (P_Random() - P_Random()) << (18 - (player->accuracy * 4 / 100)); + player->ammo[weaponinfo[player->readyweapon].ammo]--; + P_SpawnPlayerMissile(player->mo, MT_ELECARROW); + player->mo->angle = an; + S_StartSound(player->mo, sfx_xbow); } +// +// A_FirePoisonBolt +// villsa [STRIFE] - new codepointer +// + +void A_FirePoisonBolt(player_t* player, pspdef_t* pspr) +{ + angle_t an = player->mo->angle; + player->mo->angle += (P_Random() - P_Random())<<(18 - (player->accuracy * 4 / 100)); + player->ammo[weaponinfo[player->readyweapon].ammo]--; + P_SpawnPlayerMissile(player->mo, MT_POISARROW); + player->mo->angle = an; + S_StartSound(player->mo, sfx_xbow); +} // // P_BulletSlope @@ -662,131 +703,75 @@ P_GunShot angle_t angle; int damage; - damage = 5*(P_Random ()%3+1); + damage = 4*(P_Random ()%3+4); // villsa [STRIFE] different damage formula angle = mo->angle; + // villsa [STRIFE] apply player accuracy if (!accurate) - angle += (P_Random()-P_Random())<<18; + angle += (P_Random()-P_Random())<<(20 - (mo->player->accuracy * 4 / 100)); P_LineAttack (mo, angle, MISSILERANGE, bulletslope, damage); } - // -// A_FirePistol +// A_FireRifle +// villsa [STRIFE] - new codepointer // -void -A_FirePistol -( player_t* player, - pspdef_t* psp ) -{ - S_StartSound (player->mo, sfx_swish); // villsa [STRIFE] TODO - fix sounds - P_SetMobjState (player->mo, S_PLAY_06); // villsa [STRIFE] TODO - verify - DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, 1); - - P_SetPsprite (player, - ps_flash, - weaponinfo[player->readyweapon].flashstate); - - P_BulletSlope (player->mo); - P_GunShot (player->mo, !player->refire); -} - - -// -// A_FireShotgun -// -void -A_FireShotgun -( player_t* player, - pspdef_t* psp ) +void A_FireRifle(player_t* player, pspdef_t* pspr) { - int i; - - S_StartSound (player->mo, sfx_swish); // villsa [STRIFE] TODO - fix sounds - P_SetMobjState (player->mo, S_PLAY_06); // villsa [STRIFE] TODO - verify + S_StartSound(player->mo, sfx_rifle); - DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, 1); - - P_SetPsprite (player, - ps_flash, - weaponinfo[player->readyweapon].flashstate); - - P_BulletSlope (player->mo); - - for (i=0 ; i<7 ; i++) - P_GunShot (player->mo, false); + if(player->ammo[weaponinfo[player->readyweapon].ammo]) + { + P_SetMobjState(player->mo, S_PLAY_06); + player->ammo[weaponinfo[player->readyweapon].ammo]--; + P_BulletSlope(player->mo); + P_GunShot(player->mo, !player->refire); + } } - - // -// A_FireShotgun2 +// A_FireMauler1 +// villsa [STRIFE] - new codepointer // -void -A_FireShotgun2 -( player_t* player, - pspdef_t* psp ) -{ - int i; - angle_t angle; - int damage; - - - S_StartSound (player->mo, sfx_swish); // villsa [STRIFE] TODO - fix sounds - P_SetMobjState (player->mo, S_PLAY_06); // villsa [STRIFE] TODO - verify - DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, 2); - - P_SetPsprite (player, - ps_flash, - weaponinfo[player->readyweapon].flashstate); +void A_FireMauler1(player_t* player, pspdef_t* pspr) +{ + int i; + angle_t angle; + int damage; - P_BulletSlope (player->mo); - - for (i=0 ; i<20 ; i++) + if(player->ammo[weaponinfo[player->readyweapon].ammo] > 20) { - 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); + player->ammo[weaponinfo[player->readyweapon].ammo] -= 20; + P_BulletSlope(player->mo); + S_StartSound(player->mo, sfx_pgrdat); + + 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 +// A_SigilSound +// villsa [STRIFE] - new codepointer // -void -A_FireCGun -( player_t* player, - pspdef_t* psp ) -{ - S_StartSound (player->mo, sfx_swish); // villsa [STRIFE] TODO - fix sounds - if (!player->ammo[weaponinfo[player->readyweapon].ammo]) - return; - - P_SetMobjState (player->mo, S_PLAY_06); // villsa [STRIFE] TODO - verify - DecreaseAmmo(player, weaponinfo[player->readyweapon].ammo, 1); - - /*P_SetPsprite (player, - ps_flash, - weaponinfo[player->readyweapon].flashstate - + psp->state - - &states[S_CHAIN1] );*/ +void A_SigilSound(player_t* player, pspdef_t* pspr) +{ + S_StartSound(player->mo, sfx_siglup); + player->extralight = 2; - P_BulletSlope (player->mo); - - P_GunShot (player->mo, !player->refire); } - // // ? // @@ -806,114 +791,6 @@ void A_Light2 (player_t *player, pspdef_t *psp) } -// -// A_BFGSpray -// Spawn a BFG explosion on every monster in view -// -void A_BFGSpray (mobj_t* mo) -{ - // villsa [STRIFE] unused -/* 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 -// -void -A_BFGsound -( player_t* player, - pspdef_t* psp ) -{ - 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; -} - - - // // P_SetupPsprites // Called at start of level for each player. -- cgit v1.2.3