ref: 1fc397741ffd103629cce3d06946865a7bc437c3
parent: ded5e702b8f28f9eb2d5322d47f0cd08e93cb74b
author: Samuel Villareal <svkaiser@gmail.com>
date: Sat Sep 4 17:06:30 EDT 2010
+ p_pspr.c almost completed. Needs A_FireSigil to be implemented + ammo arrays updated + All codepointers (except a_firesigil) added + Additional enumerations added to psprites Subversion-branch: /branches/strife-branch Subversion-revision: 2010
--- a/src/strife/p_enemy.c
+++ b/src/strife/p_enemy.c
@@ -2532,30 +2532,4 @@
void A_ClearForceField(mobj_t* actor)
{
-}
-
-
-void A_FireSigil(mobj_t* actor)
-{
-
-}
-
-void A_GunFlashThinker(mobj_t* actor)
-{
-
-}
-
-void A_SigilShock(mobj_t* actor)
-{
-
-}
-
-void A_TorpedoExplode(mobj_t* actor)
-{
-
-}
-
-void A_MaulerSound(mobj_t* actor)
-{
-
}
\ No newline at end of file
--- a/src/strife/p_inter.c
+++ b/src/strife/p_inter.c
@@ -55,8 +55,9 @@
// a weapon is found with two clip loads,
// a big item has five clip loads
-int maxammo[NUMAMMO] = {200, 50, 300, 50};
-int clipammo[NUMAMMO] = {10, 4, 20, 1};
+// villsa [STRIFE] updated arrays
+int maxammo[NUMAMMO] = { 250, 50, 25, 400, 100, 30, 16 };
+int clipammo[NUMAMMO] = { 10, 4, 2, 20, 4, 6, 4 };
//
--- a/src/strife/p_local.h
+++ b/src/strife/p_local.h
@@ -59,7 +59,7 @@
#define MAXMOVE (30*FRACUNIT)
#define USERANGE (64*FRACUNIT)
-#define MELEERANGE (64*FRACUNIT)
+#define MELEERANGE (80*FRACUNIT) // villsa [STRIFE] changed from 64 to 80
#define MISSILERANGE (32*64*FRACUNIT)
// follow a player exlusively for 3 seconds
--- a/src/strife/p_pspr.c
+++ b/src/strife/p_pspr.c
@@ -143,15 +143,23 @@
player->pendingweapon = player->readyweapon;
// villsa [STRIFE] unused
- /*if (player->pendingweapon == wp_chainsaw)
- S_StartSound (player->mo, sfx_swish); // villsa [STRIFE] TODO - fix sounds*/
+ if (player->pendingweapon == wp_flame)
+ S_StartSound (player->mo, sfx_flidl); // villsa [STRIFE] flame sounds
newstate = weaponinfo[player->pendingweapon].upstate;
- player->pendingweapon = wp_nochange;
player->psprites[ps_weapon].sy = WEAPONBOTTOM;
-
P_SetPsprite (player, ps_weapon, newstate);
+
+ // villsa [STRIFE] set various flash states
+ if(player->pendingweapon == wp_elecbow)
+ P_SetPsprite(player, ps_flash, S_XBOW_10);
+ else if(player->pendingweapon == wp_sigil && player->sigiltype)
+ P_SetPsprite(player, ps_flash, S_SIGH_00 + player->sigiltype);
+ else
+ P_SetPsprite(player, ps_flash, S_NULL);
+
+ player->pendingweapon = wp_nochange;
}
//
@@ -164,18 +172,14 @@
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.
- // villsa [STRIFE] unused
- /*if (player->readyweapon == wp_bfg)
- count = deh_bfg_cells_per_shot;
- else if (player->readyweapon == wp_supershotgun)
- count = 2; // Double barrel.
- else*/
+ if (player->readyweapon == wp_torpedo)
+ count = 30;
+ else if (player->readyweapon == wp_mauler)
+ count = 20;
+ else
count = 1; // Regular.
// Some do not need ammunition anyway.
@@ -185,62 +189,41 @@
// Out of ammo, pick a weapon to change to.
// Preferences are set here.
- // villsa [STRIFE] TODO - BEWARE, NO WEAPON PREFERENCE, MUST FIX!
- /*do
- {
- if (player->weaponowned[wp_plasma]
- && player->ammo[am_cell]
- && (gamemode != shareware) )
- {
- player->pendingweapon = wp_plasma;
- }
- else if (player->weaponowned[wp_supershotgun]
- && player->ammo[am_shell]>2
- && (gamemode == commercial) )
- {
- player->pendingweapon = wp_supershotgun;
- }
- else if (player->weaponowned[wp_chaingun]
- && player->ammo[am_clip])
- {
- player->pendingweapon = wp_chaingun;
- }
- else if (player->weaponowned[wp_shotgun]
- && player->ammo[am_shell])
- {
- player->pendingweapon = wp_shotgun;
- }
- else if (player->ammo[am_clip])
- {
- player->pendingweapon = wp_pistol;
- }
- else if (player->weaponowned[wp_chainsaw])
- {
- player->pendingweapon = wp_chainsaw;
- }
- else if (player->weaponowned[wp_missile]
- && player->ammo[am_misl])
- {
- player->pendingweapon = wp_missile;
- }
- else if (player->weaponowned[wp_bfg]
- && player->ammo[am_cell]>40
- && (gamemode != shareware) )
- {
- player->pendingweapon = wp_bfg;
- }
- else
- {
- // If everything fails.
- player->pendingweapon = wp_fist;
- }
-
- } while (player->pendingweapon == wp_nochange);*/
+ // villsa [STRIFE] new weapon preferences
+ if (player->weaponowned[wp_mauler] && player->ammo[am_cell] >= 20)
+ player->pendingweapon = wp_mauler;
+
+ else if(player->weaponowned[wp_rifle] && player->ammo[am_bullets])
+ player->pendingweapon = wp_rifle;
+
+ else if (player->weaponowned[wp_elecbow] && player->ammo[am_elecbolts])
+ player->pendingweapon = wp_elecbow;
+
+ else if (player->weaponowned[wp_missile] && player->ammo[am_missiles])
+ player->pendingweapon = wp_missile;
+
+ else if (player->weaponowned[wp_flame] && player->ammo[am_cell])
+ player->pendingweapon = wp_flame;
+
+ else if (player->weaponowned[wp_hegrenade] && player->ammo[am_hegrenades])
+ player->pendingweapon = wp_hegrenade;
+
+ else if (player->weaponowned[wp_poisonbow] && player->ammo[am_poisonbolts])
+ player->pendingweapon = wp_poisonbow;
+
+ else if (player->weaponowned[wp_wpgrenade] && player->ammo[am_wpgrenades])
+ player->pendingweapon = wp_wpgrenade;
+
+ else if (player->weaponowned[wp_torpedo] && player->ammo[am_cell] >= 30)
+ player->pendingweapon = wp_torpedo;
+
+ else
+ player->pendingweapon = wp_fist;
+
+
// Now set appropriate weapon overlay.
- P_SetPsprite (player,
- ps_weapon,
- weaponinfo[player->readyweapon].downstate);
+ P_SetPsprite(player, ps_weapon, weaponinfo[player->readyweapon].downstate);
return false;
}
@@ -256,11 +239,13 @@
if (!P_CheckAmmo (player))
return;
- // villsa [STRIFE] TODO - verify
P_SetMobjState (player->mo, S_PLAY_05);
newstate = weaponinfo[player->readyweapon].atkstate;
P_SetPsprite (player, ps_weapon, newstate);
- P_NoiseAlert (player->mo, player->mo);
+
+ // villsa [STRIFE] exclude these weapons from causing noise
+ if(player->readyweapon > wp_elecbow && player->readyweapon != wp_poisonbow)
+ P_NoiseAlert (player->mo, player->mo);
}
@@ -285,28 +270,24 @@
// Follows after getting weapon up,
// or after previous attack/fire sequence.
//
-void
-A_WeaponReady
-( player_t* player,
- pspdef_t* psp )
+void A_WeaponReady( player_t* player, pspdef_t* psp)
{
statenum_t newstate;
int angle;
// get out of attack state
- // villsa [STRIFE] TODO - verify
if (player->mo->state == &states[S_PLAY_05]
- || player->mo->state == &states[S_PLAY_06] )
+ || player->mo->state == &states[S_PLAY_06])
{
P_SetMobjState (player->mo, S_PLAY_00);
}
- // villsa [STRIFE] unused
- /*if (player->readyweapon == wp_chainsaw
- && psp->state == &states[S_SAW])
+ // villsa [STRIFE] check for wp_flame instead of chainsaw
+ if (player->readyweapon == wp_flame
+ && psp->state == &states[S_FLMT_01])
{
- S_StartSound (player->mo, sfx_swish); // villsa [STRIFE] TODO - fix sounds
- }*/
+ S_StartSound (player->mo, sfx_flidl);
+ }
// check for change
// if player is dead, put the weapon away
@@ -325,8 +306,8 @@
{
if ( !player->attackdown
- /*|| (player->readyweapon != wp_missile // villsa [STRIFE] unused?
- && player->readyweapon != wp_bfg)*/ )
+ || (player->readyweapon != wp_missile
+ && player->readyweapon != wp_torpedo)) // villsa [STRIFE] replace bfg with torpedo
{
player->attackdown = true;
P_FireWeapon (player);
@@ -371,17 +352,16 @@
}
}
-
-void
-A_CheckReload
-( player_t* player,
- pspdef_t* psp )
+//
+// A_CheckReload
+//
+void A_CheckReload(player_t* player, pspdef_t* psp)
{
- P_CheckAmmo (player);
-#if 0
- if (player->ammo[am_shell]<2)
- P_SetPsprite (player, ps_weapon, S_DSNR1);
-#endif
+ P_CheckAmmo(player);
+
+ // villsa [STRIFE] set animating sprite for crossbow
+ if(player->readyweapon == wp_elecbow)
+ P_SetPsprite(player, player->readyweapon, S_XBOW_10);
}
@@ -460,7 +440,6 @@
( player_t* player,
pspdef_t* psp )
{
- // villsa [STRIFE] TODO - verify
P_SetMobjState (player->mo, S_PLAY_06);
P_SetPsprite (player,ps_flash,weaponinfo[player->readyweapon].flashstate);
}
@@ -475,18 +454,18 @@
//
// A_Punch
//
-void
-A_Punch
-( player_t* player,
- pspdef_t* psp )
+
+void A_Punch(player_t* player, pspdef_t* psp)
{
- angle_t angle;
- int damage;
- int slope;
+ angle_t angle;
+ int damage;
+ int slope;
+ int sound;
- damage = (P_Random ()%10+1)<<1;
+ // villsa [STRIFE] new damage formula
+ damage = ((player->stamina / 10) + 2) * (psp->tics + 3) & P_Random();
- if (player->powers[pw_strength])
+ if(player->powers[pw_strength])
damage *= 10;
angle = player->mo->angle;
@@ -495,14 +474,27 @@
P_LineAttack (player->mo, angle, MELEERANGE, slope, damage);
// turn to face target
- if (linetarget)
+ if(linetarget)
{
- S_StartSound (player->mo, sfx_swish); // villsa [STRIFE] TODO - fix sounds
+ // villsa [STRIFE] check for non-flesh types
+ if(linetarget->flags & MF_NOBLOOD)
+ sound = sfx_mtalht;
+ else
+ sound = sfx_meatht;
+
+ S_StartSound (player->mo, sound);
player->mo->angle = R_PointToAngle2 (player->mo->x,
player->mo->y,
linetarget->x,
linetarget->y);
+
+ // villsa [STRIFE] apply flag
+ player->mo->flags |= MF_JUSTATTACKED;
+ // villsa [STRIFE] do punch alert routine
+ P_DoPunchAlert(player->mo, linetarget);
}
+ else
+ S_StartSound (player->mo, sfx_swish);
}
@@ -527,7 +519,7 @@
//
// A_FireFlameThrower
-// villsa [STRIFE] completly new compared to the original
+// villsa [STRIFE] new codepointer
//
void A_FireFlameThrower(player_t* player, pspdef_t* psp)
@@ -771,8 +763,32 @@
}
+//
+// A_FireSigil
+// villsa [STRIFE] - new codepointer
+//
+void A_FireSigil(player_t* player, pspdef_t* pspr)
+{
+
+}
+
//
+// A_GunFlashThinker
+// villsa [STRIFE] - new codepointer
+//
+
+void A_GunFlashThinker(player_t* player, pspdef_t* pspr)
+{
+ if(player->readyweapon == wp_sigil && player->sigiltype)
+ P_SetPsprite(player, ps_flash, S_SIGH_00 + player->sigiltype);
+ else
+ P_SetPsprite(player, ps_flash, S_NULL);
+
+}
+
+
+//
// ?
//
void A_Light0 (player_t *player, pspdef_t *psp)
@@ -790,22 +806,63 @@
player->extralight = 2;
}
+//
+// A_SigilShock
+// villsa [STRIFE] - new codepointer
+//
+void A_SigilShock (player_t *player, pspdef_t *psp)
+{
+ player->extralight = -3;
+}
+
//
+// A_TorpedoExplode
+// villsa [STRIFE] - new codepointer
+//
+
+void A_TorpedoExplode(mobj_t* actor)
+{
+ int i = 0;
+
+ actor->angle -= ANG180;
+
+ for(i = 0; i < 80; i++)
+ {
+ actor->angle += 0x3333333;
+ P_SpawnMortar(actor, MT_TORPEDOSPREAD)->target = actor->target;
+ }
+}
+
+//
+// A_MaulerSound
+// villsa [STRIFE] - new codepointer
+//
+
+void A_MaulerSound(player_t *player, pspdef_t *psp)
+{
+ S_StartSound(player->mo, sfx_proton);
+ psp->sx += (P_Random() - P_Random()) << 10;
+ psp->sy += (P_Random() - P_Random()) << 10;
+
+}
+
+
+//
// P_SetupPsprites
// Called at start of level for each player.
//
-void P_SetupPsprites (player_t* player)
+void P_SetupPsprites(player_t* player)
{
int i;
// remove all psprites
- for (i=0 ; i<NUMPSPRITES ; i++)
+ for(i = 0; i < NUMPSPRITES; i++)
player->psprites[i].state = NULL;
// spawn the gun
player->pendingweapon = player->readyweapon;
- P_BringUpWeapon (player);
+ P_BringUpWeapon(player);
}
@@ -822,18 +879,18 @@
state_t* state;
psp = &player->psprites[0];
- for (i=0 ; i<NUMPSPRITES ; i++, psp++)
+ for(i = 0; i < NUMPSPRITES; i++, psp++)
{
// a null state means not active
- if ( (state = psp->state) )
+ if((state = psp->state))
{
// drop tic count and possibly change state
// a -1 tic count never changes
- if (psp->tics != -1)
+ if(psp->tics != -1)
{
psp->tics--;
- if (!psp->tics)
+ if(!psp->tics)
P_SetPsprite (player, i, psp->state->nextstate);
}
}
@@ -841,6 +898,10 @@
player->psprites[ps_flash].sx = player->psprites[ps_weapon].sx;
player->psprites[ps_flash].sy = player->psprites[ps_weapon].sy;
+
+ // villsa [STRIFE] extra stuff for targeter
+ player->psprites[ps_targleft].sx = (100 - player->accuracy) - (160*FRACUNIT);
+ player->psprites[ps_targright].sx = (100 - player->accuracy) + (160*FRACUNIT);
}
--- a/src/strife/p_pspr.h
+++ b/src/strife/p_pspr.h
@@ -63,6 +63,9 @@
{
ps_weapon,
ps_flash,
+ ps_targleft, // villsa [STRIFE]
+ ps_targright, // villsa [STRIFE]
+ ps_targcenter, // villsa [STRIFE]
NUMPSPRITES
} psprnum_t;