foxygit / doom Log in
commit 583406a2ba2a10bfe0e654a0ede285da46c9bd88
Author:     Samuel Villareal <svkaiser@gmail.com>
AuthorDate: Sat Sep 4 04:06:10 2010 +0000
Commit:     Samuel Villareal <svkaiser@gmail.com>
CommitDate: Sat Sep 4 04:06:10 2010 +0000

    + 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/d_items.c | 16 ++++++-------
 src/strife/doomdef.h | 33 ++++++++++++++++++++------
 src/strife/g_game.c  |  4 ++--
 src/strife/p_enemy.c | 16 +++++++++----
 src/strife/p_local.h |  3 +++
 src/strife/p_map.c   | 14 +++++++----
 src/strife/p_mobj.c  | 66 ++++++++++++++++++++++++++++++++++++++++++++++++----
 src/strife/p_pspr.c  | 60 +++++++++++++++++++++++++++++++++++++++++++++++
 src/strife/p_user.c  | 25 +++++++++++++-------
 9 files changed, 198 insertions(+), 39 deletions(-)

diff --git a/src/strife/d_items.c b/src/strife/d_items.c
index d9da946e..8a8547bf 100644
--- a/src/strife/d_items.c
+++ b/src/strife/d_items.c
@@ -58,7 +58,7 @@ weaponinfo_t	weaponinfo[NUMWEAPONS] =
     },
     {
 	// electric bow
-	am_clip,
+	am_elecbolts,
 	S_XBOW_02,
 	S_XBOW_01,
 	S_XBOW_00,
@@ -68,7 +68,7 @@ weaponinfo_t	weaponinfo[NUMWEAPONS] =
     },
     {
 	// rifle
-	am_shell,
+	am_bullets,
 	S_RIFG_02,
 	S_RIFG_01,
 	S_RIFG_00,
@@ -78,7 +78,7 @@ weaponinfo_t	weaponinfo[NUMWEAPONS] =
     },
     {
 	// missile launcher
-	am_clip,
+	am_missiles,
 	S_MMIS_02,
 	S_MMIS_01,
 	S_MMIS_00,
@@ -88,12 +88,12 @@ weaponinfo_t	weaponinfo[NUMWEAPONS] =
     },
     {
 	// grenade launcher
-	am_misl,
+	am_hegrenades,
 	S_GREN_02,
 	S_GREN_01,
 	S_GREN_00,
 	S_GREN_03,
-	103,
+	S_GREF_00,
         0
     },
     {
@@ -128,7 +128,7 @@ weaponinfo_t	weaponinfo[NUMWEAPONS] =
     },
     {
 	// poison bow
-	am_shell,
+	am_poisonbolts,
 	S_XBOW_15,
 	S_XBOW_14,
 	S_XBOW_13,
@@ -138,7 +138,7 @@ weaponinfo_t	weaponinfo[NUMWEAPONS] =
     },
     {
 	// wp grenade launcher
-	am_shell,
+	am_wpgrenades,
 	S_GREN_10,
 	S_GREN_09,
 	S_GREN_08,
@@ -148,7 +148,7 @@ weaponinfo_t	weaponinfo[NUMWEAPONS] =
     },
     {
 	// torpedo
-	am_shell,
+	am_cell,
 	S_BLST_18,
 	S_BLST_17,
 	S_BLST_13,
diff --git a/src/strife/doomdef.h b/src/strife/doomdef.h
index ffdcc02e..50db2fc8 100644
--- a/src/strife/doomdef.h
+++ b/src/strife/doomdef.h
@@ -82,9 +82,23 @@ typedef enum
 #define	MTF_EASY		1
 #define	MTF_NORMAL		2
 #define	MTF_HARD		4
-
+// villsa [STRIFE] standing monsters
+#define MTF_STAND               8
+// villsa [STRIFE] don't spawn in single player
+#define MTF_NOTSINGLE           16
 // Deaf monsters/do not react to sound.
-#define	MTF_AMBUSH		8
+#define MTF_AMBUSH              32
+// villsa [STRIFE] friendly to players
+#define MTF_FRIEND              64
+// villsa [STRIFE] TODO - identify
+#define MTF_UNKNOWN             128
+// villsa [STRIFE] thing is translucent
+#define MTF_TRANSLUCENT         256
+// villsa [STRIFE] TODO - identify
+#define MTF_MVIS                512
+// villsa [STRIFE] TODO - identify
+#define MTF_RESERVED            1024
+


 //
@@ -135,12 +149,17 @@ typedef enum
 // Ammunition types defined.
 typedef enum
 {
-    am_clip,	// Pistol / chaingun ammo.
-    am_shell,	// Shotgun / double barreled shotgun.
-    am_cell,	// Plasma rifle, BFG.
-    am_misl,	// Missile launcher.
+    am_bullets,
+    am_elecbolts,
+    am_poisonbolts,
+    am_cell,
+    am_missiles,
+    am_hegrenades,
+    am_wpgrenades,
+
     NUMAMMO,
-    am_noammo	// Unlimited for chainsaw / fist.
+
+    am_noammo   // unlimited ammo

 } ammotype_t;

diff --git a/src/strife/g_game.c b/src/strife/g_game.c
index 352e65de..2b7c2cb0 100644
--- a/src/strife/g_game.c
+++ b/src/strife/g_game.c
@@ -1068,8 +1068,8 @@ void G_PlayerReborn (int player)
     p->health = deh_initial_health;     // Use dehacked value
     p->readyweapon = p->pendingweapon = wp_fist; // villsa [STRIFE] default to fists
     p->weaponowned[wp_fist] = true;
-    //p->weaponowned[wp_pistol] = true; // villsa [STRIFE]
-    p->ammo[am_clip] = deh_initial_bullets;
+    //p->weaponowned[wp_pistol] = true; // villsa [STRIFE] unused
+    //p->ammo[am_clip] = deh_initial_bullets;   // villsa [STRIFE] unused

     for (i=0 ; i<NUMAMMO ; i++)
 	p->maxammo[i] = maxammo[i];
diff --git a/src/strife/p_enemy.c b/src/strife/p_enemy.c
index 09567e99..cf610285 100644
--- a/src/strife/p_enemy.c
+++ b/src/strife/p_enemy.c
@@ -2374,9 +2374,20 @@ void A_RaiseAlarm(mobj_t* actor)

 }

+//
+// A_MissileTick
+// villsa [STRIFE] - new codepointer
+//
+
 void A_MissileTick(mobj_t* actor)
 {
+    int r = actor->reactiontime--;

+    if(r - 1 <= 0)
+    {
+        P_ExplodeMissile(actor);
+        actor->flags &= ~MF_MISSILE;
+    }
 }

 void A_SpawnGrenadeFire(mobj_t* actor)
@@ -2464,11 +2475,6 @@ void A_FireMauler2(mobj_t* actor)

 }

-void A_FireGrenade(mobj_t* actor)
-{
-
-}
-
 void A_FireElectricBolt(mobj_t* actor)
 {

diff --git a/src/strife/p_local.h b/src/strife/p_local.h
index 0c59ec0d..87370e09 100644
--- a/src/strife/p_local.h
+++ b/src/strife/p_local.h
@@ -129,7 +129,10 @@ void	P_SpawnPuff (fixed_t x, fixed_t y, fixed_t z);
 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_SpawnMortar(mobj_t *source, mobjtype_t type); // villsa [STRIFE]
+void    P_ExplodeMissile (mobj_t* mo); // villsa [STRIFE]


 //
diff --git a/src/strife/p_map.c b/src/strife/p_map.c
index cd289c88..4897d164 100644
--- a/src/strife/p_map.c
+++ b/src/strife/p_map.c
@@ -530,9 +530,14 @@ P_TryMove
 	     &&*/tmceilingz - thing->z < thing->height)
 	    return false;	// mobj must lower itself to fit

-	if ( /*!(thing->flags&MF_TELEPORT) // villsa [STRIFE] unused
-	     &&*/ tmfloorz - thing->z > 24*FRACUNIT )
-	    return false;	// too big a step up
+        // villsa [STRIFE] non-robots are limited to 16 unit step height
+        if(!(thing->flags & MF_NOBLOOD) && tmfloorz - thing->z > (16*FRACUNIT) ||
+            tmfloorz - thing->z > 24*FRACUNIT)
+            return false;       // too big a step up
+
+        // villsa [STRIFE] special case for missiles
+        if(thing->flags & MF_MISSILE && tmfloorz - thing->z > (4*FRACUNIT))
+            return false;

 	if ( !(thing->flags&(MF_DROPOFF|MF_FLOAT))
 	     && tmfloorz - tmdropoffz > 24*FRACUNIT )
@@ -792,7 +797,8 @@ boolean PTR_SlideTraverse (intercept_t* in)
     if (opentop - slidemo->z < slidemo->height)
 	goto isblocking;		// mobj is too high

-    if (openbottom - slidemo->z > 24*FRACUNIT )
+    // villsa [STRIFE] change from 24 to 16
+    if (openbottom - slidemo->z > 16*FRACUNIT )
 	goto isblocking;		// too big a step up

     // this line doesn't block movement
diff --git a/src/strife/p_mobj.c b/src/strife/p_mobj.c
index baa8fa05..a64397d8 100644
--- a/src/strife/p_mobj.c
+++ b/src/strife/p_mobj.c
@@ -174,6 +174,21 @@ void P_XYMovement (mobj_t* mo)
 	    {	// try to slide along it
 		P_SlideMove (mo);
 	    }
+            // villsa [STRIFE] check for bouncy missiles
+            else if(mo->flags & MF_BOUNCE)
+            {
+                mo->momx >>= 3;
+                mo->momy >>= 3;
+
+                if (P_TryMove(mo, mo->x - xmove, ymove + mo->y))
+                    mo->momy = -mo->momy;
+                else
+                    mo->momx = -mo->momx;
+
+
+                xmove = 0;
+                ymove = 0;
+            }
 	    else if (mo->flags & MF_MISSILE)
 	    {
 		// explode a missile
@@ -986,7 +1001,7 @@ P_SpawnBlood
     z += ((P_Random()-P_Random())<<10);
     th = P_SpawnMobj (x,y,z, MT_BLOOD_DEATH);
     th->momz = FRACUNIT*2;
-    th->tics -= P_Random()&3;
+    //th->tics -= P_Random()&3; // villsa [STRIFE] unused

     // villsa [STRIFE] unused
     /*if (th->tics < 1)
@@ -995,6 +1010,8 @@ P_SpawnBlood
     // villsa [STRIFE] different checks for damage range
     if (damage >= 10 && damage <= 13)
 	P_SetMobjState (th,S_BLOD_00);
+    else if (damage < 10 && damage >= 7)
+        P_SetMobjState (th,S_BLOD_01);
     else if (damage < 7)
 	P_SetMobjState (th,S_BLOD_02);
 }
@@ -1094,11 +1111,12 @@ P_SpawnMissile
 }

 //
-// P_SpawnSubMissile
-// villsa [STRIFE] new function (TODO - add description)
+// P_SpawnFacingMissile
+// villsa [STRIFE] new function
+// Spawn a missile based on source's angle
 //

-mobj_t* P_SpawnSubMissile(mobj_t* source, mobj_t* target, mobjtype_t type, fixed_t radius)
+mobj_t* P_SpawnFacingMissile(mobj_t* source, mobj_t* target, mobjtype_t type)
 {
     mobj_t* th;
     angle_t an;
@@ -1173,10 +1191,19 @@ P_SpawnPlayerMissile
 	    slope = 0;
 	}
     }
+
+    // villsa [STRIFE]
+    if(linetarget)
+        source->target = linetarget;

     x = source->x;
     y = source->y;
-    z = source->z + 4*8*FRACUNIT;
+
+    // villsa [STRIFE]
+    if(!(source->flags & MF_FEETCLIPPED))
+        z = source->z + 32*FRACUNIT;
+    else
+        z = source->z + 22*FRACUNIT;

     th = P_SpawnMobj (x,y,z, type);

@@ -1194,3 +1221,32 @@ P_SpawnPlayerMissile
     P_CheckMissileSpawn (th);
 }

+//
+// P_SpawnMortar
+// villsa [STRIFE] new function
+// Spawn a high-arcing ballistic projectile
+//
+
+mobj_t* P_SpawnMortar(mobj_t *source, mobjtype_t type)
+{
+    mobj_t* th;
+    angle_t an;
+    fixed_t slope;
+
+    an = source->angle;
+
+    th = P_SpawnMobj(source->x, source->y, source->z, type);
+    th->target = source;
+    th->angle = an;
+    an >>= ANGLETOFINESHIFT;
+
+    slope = P_AimLineAttack(source, source->angle, 1024*FRACUNIT);
+
+    th->momx = FixedMul (th->info->speed, finecosine[an]);
+    th->momy = FixedMul (th->info->speed, finesine[an]);
+    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 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<<FRACBITS) / 160, mo->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;
+}
+


 //
diff --git a/src/strife/p_user.c b/src/strife/p_user.c
index 9e038a06..5a140190 100644
--- a/src/strife/p_user.c
+++ b/src/strife/p_user.c
@@ -166,18 +166,27 @@ void P_MovePlayer (player_t* player)
     //  if not onground.
     onground = (player->mo->z <= player->mo->floorz);

-    // villsa [STRIFE] jump button
-    if (onground && cmd->buttons2 & BT2_JUMP)
+    // villsa [STRIFE] allows player to climb over things by jumping
+    if(!onground)
     {
-        if(!player->deltaviewheight)
-            player->mo->momz += (8*FRACUNIT);
+        if(cmd->forwardmove)
+            P_Thrust (player, player->mo->angle, cmd->forwardmove);
     }
+    else
+    {
+        // villsa [STRIFE] jump button
+        if (cmd->buttons2 & BT2_JUMP)
+        {
+            if(!player->deltaviewheight)
+                player->mo->momz += (8*FRACUNIT);
+        }

-    if (cmd->forwardmove && onground)
-	P_Thrust (player, player->mo->angle, cmd->forwardmove*2048);
+        if (cmd->forwardmove && onground)
+	    P_Thrust (player, player->mo->angle, cmd->forwardmove*2048);

-    if (cmd->sidemove && onground)
-	P_Thrust (player, player->mo->angle-ANG90, cmd->sidemove*2048);
+        if (cmd->sidemove && onground)
+	    P_Thrust (player, player->mo->angle-ANG90, cmd->sidemove*2048);
+    }

     // villsa [STRIFE] TODO - verify
     if ( (cmd->forwardmove || cmd->sidemove)