foxygit / doom Log in
commit d112932e1efaa6588ed7276021847a28eb596900
Author:     Samuel Villareal <svkaiser@gmail.com>
AuthorDate: Tue Sep 7 03:16:54 2010 +0000
Commit:     Samuel Villareal <svkaiser@gmail.com>
CommitDate: Tue Sep 7 03:16:54 2010 +0000

    + All linedef flags added
    + Translucent line/wall drawing supported
    + Jumpover/Blockfloater flag behavior implemented
    + Puff behavior implemented
    + Some changes to PIT_AttackRadius
    + Some changes to PIT_ChangeSector

    Subversion-branch: /branches/strife-branch
    Subversion-revision: 2030
---
 src/strife/doomdata.h | 12 ++++++++
 src/strife/p_enemy.c  |  8 ++---
 src/strife/p_map.c    | 83 +++++++++++++++++++++++++++++++++++++++++++--------
 src/strife/p_mobj.c   | 11 ++-----
 src/strife/p_pspr.c   |  4 +--
 src/strife/r_segs.c   | 10 +++++++
 6 files changed, 101 insertions(+), 27 deletions(-)

diff --git a/src/strife/doomdata.h b/src/strife/doomdata.h
index 66733aea..db57a539 100644
--- a/src/strife/doomdata.h
+++ b/src/strife/doomdata.h
@@ -139,6 +139,18 @@ typedef struct
 // Set if already seen, thus drawn in automap.
 #define ML_MAPPED		256

+// villsa [STRIFE] jump over rails?
+#define ML_JUMPOVER             512
+
+// villsa [STRIFE] block flying things
+#define ML_BLOCKFLOATERS        1024
+
+// villsa [STRIFE] TODO - 25% or 75% transcluency?
+#define ML_TRANSPARENT1         2048
+
+// villsa [STRIFE] TODO - 25% or 75% transcluency?
+#define ML_TRANSPARENT2         4096
+



diff --git a/src/strife/p_enemy.c b/src/strife/p_enemy.c
index 3f3b08d8..6cb2aff3 100644
--- a/src/strife/p_enemy.c
+++ b/src/strife/p_enemy.c
@@ -1619,7 +1619,7 @@ void A_InqGrenade(mobj_t* actor)

     A_FaceTarget(actor);

-    actor->z += (32*FRACUNIT);
+    actor->z += MAXRADIUS;

     // grenade 1
     actor->angle -= (ANG45 / 32);
@@ -1631,7 +1631,7 @@ void A_InqGrenade(mobj_t* actor)
     mo = P_SpawnFacingMissile(actor, actor->target, MT_INQGRENADE);
     mo->momz += (16*FRACUNIT);

-    actor->z -= (32*FRACUNIT);
+    actor->z -= MAXRADIUS;
 }

 //
@@ -2022,12 +2022,12 @@ void A_BishopAttack(mobj_t* actor)
     if(!actor->target)
         return;

-    actor->z += (32*FRACUNIT);
+    actor->z += MAXRADIUS;

     mo = P_SpawnMissile(actor, actor->target, MT_SEEKMISSILE);
     mo->tracer = actor->target;

-    actor->z -= (32*FRACUNIT);
+    actor->z -= MAXRADIUS;
 }

 //
diff --git a/src/strife/p_map.c b/src/strife/p_map.c
index f83851cf..f31cbf86 100644
--- a/src/strife/p_map.c
+++ b/src/strife/p_map.c
@@ -249,11 +249,19 @@ boolean PIT_CheckLine (line_t* ld)

     if (!(tmthing->flags & MF_MISSILE) )
     {
-	if ( ld->flags & ML_BLOCKING )
+        // villsa [STRIFE] include jumpover flag
+	if ( ld->flags & ML_BLOCKING &&
+            (!(ld->flags & ML_JUMPOVER) || tmfloorz + (32*FRACUNIT) > tmthing->z) )
 	    return false;	// explicitly blocking everything

-	if ( !tmthing->player && ld->flags & ML_BLOCKMONSTERS )
+        // villsa [STRIFE] exclude floaters from blockmonster lines
+	if ( !tmthing->player && ld->flags & ML_BLOCKMONSTERS &&
+            !(tmthing->flags & MF_FLOAT))
 	    return false;	// block monsters only
+
+        // villsa [STRIFE]
+        if ( ld->flags & ML_BLOCKFLOATERS && tmthing->flags & MF_FLOAT )
+            return false;   // block floaters only
     }

     // set openrange, opentop, openbottom
@@ -1053,6 +1061,7 @@ boolean PTR_ShootTraverse (intercept_t* in)
     line_t*		li;

     mobj_t*		th;
+    mobj_t*             th2;    // villsa [STRIFE]

     fixed_t		slope;
     fixed_t		dist;
@@ -1118,11 +1127,18 @@ boolean PTR_ShootTraverse (intercept_t* in)
 		return false;
 	}

-	// Spawn bullet puffs.
-	P_SpawnPuff (x,y,z);
+        // villsa [STRIFE]
+        if(la_damage > 0)
+        {
+            // villsa [STRIFE] TODO - verify on whats the purpose with this
+            if(attackrange != (2112*FRACUNIT))
+                P_SpawnPuff(x, y, z); // Spawn bullet puffs.
+            else
+                P_SpawnMobj(x, y, z, MT_STRIFEPUFF3);

-	// don't go any farther
-	return false;
+	    // don't go any farther
+	    return false;
+        }
     }

     // shoot a thing
@@ -1132,6 +1148,10 @@ boolean PTR_ShootTraverse (intercept_t* in)

     if (!(th->flags&MF_SHOOTABLE))
 	return true;		// corpse or something
+
+    // villsa [STRIFE] skip mvis flagged things?
+    if(th->flags & MF_MVIS)
+        return true;

     // check angles to see if the thing can be aimed at
     dist = FixedMul (attackrange, in->frac);
@@ -1154,16 +1174,26 @@ boolean PTR_ShootTraverse (intercept_t* in)
     y = trace.y + FixedMul (trace.dy, frac);
     z = shootz + FixedMul (aimslope, FixedMul(frac, attackrange));

+    // villsa [STRIFE] TODO - verify purpose of this
+    if(attackrange == (2112*FRACUNIT))
+    {
+        th2 = P_SpawnMobj(x, y, z, MT_STRIFEPUFF3);
+        th2->momz = -FRACUNIT;
+        P_DamageMobj(th, th2, shootthing, la_damage);
+        return false;
+    }
+
+    // villsa [STRIFE] TODO - verify disabled check for damage?
+    //if (la_damage)
+	P_DamageMobj (th, shootthing, shootthing, la_damage);
+
     // Spawn bullet puffs or blod spots,
     // depending on target type.
     if (in->d.thing->flags & MF_NOBLOOD)
-	P_SpawnPuff (x,y,z);
+	P_SpawnSparkPuff(x, y, z);  // villsa [STRIFE] call spark puff function instead
     else
 	P_SpawnBlood (x,y,z, la_damage);

-    if (la_damage)
-	P_DamageMobj (th, shootthing, shootthing, la_damage);
-
     // don't go any farther
     return false;

@@ -1205,6 +1235,11 @@ P_AimLineAttack

     if (linetarget)
 	return aimslope;
+    else    // villsa [STRIFE] checks for player pitch
+    {
+        if(t1->player)
+            return (t1->player->pitch << FRACBITS) / 160;
+    }

     return 0;
 }
@@ -1225,6 +1260,7 @@ P_LineAttack
 {
     fixed_t	x2;
     fixed_t	y2;
+    int         traverseflags;

     angle >>= ANGLETOFINESHIFT;
     shootthing = t1;
@@ -1235,9 +1271,15 @@ P_LineAttack
     attackrange = distance;
     aimslope = slope;

+    // villsa [STRIFE] test lines only if damage is <= 0
+    if(damage >= 1)
+        traverseflags = (PT_ADDLINES|PT_ADDTHINGS);
+    else
+        traverseflags = PT_ADDLINES;
+
     P_PathTraverse(t1->x, t1->y,
                    x2, y2,
-                   PT_ADDLINES|PT_ADDTHINGS,
+                   traverseflags,
                    PTR_ShootTraverse);
 }

@@ -1387,6 +1429,14 @@ P_RadiusAttack
     for (y=yl ; y<=yh ; y++)
 	for (x=xl ; x<=xh ; x++)
 	    P_BlockThingsIterator (x, y, PIT_RadiusAttack );
+
+    // villsa [STRIFE] TODO - verify. what on earth is it trying to do here?
+    spot->z += MAXRADIUS;
+    P_LineAttack(spot, 0, dist, 1, 0);
+    P_LineAttack(spot, ANG90, dist, 1, 0);
+    P_LineAttack(spot, ANG180, dist, 1, 0);
+    P_LineAttack(spot, ANG270, dist, 1, 0);
+    spot->z -= MAXRADIUS;
 }


@@ -1425,8 +1475,15 @@ boolean PIT_ChangeSector (mobj_t*	thing)
     // crunch bodies to giblets
     if (thing->health <= 0)
     {
-	//P_SetMobjState (thing, S_GIBS);   // villsa [STRIFE] TODO - update proper gib state
+        // villsa [STRIFE] do something with the player
+        if(thing->player && thing->subsector->sector->specialdata)
+        {
+            nofit = true;
+            return false;
+        }
+	//P_SetMobjState (thing, S_GIBS);   // villsa [STRIFE] unused

+        A_BodyParts(thing); // villsa [STRIFE] spit out meat/junk stuff
 	thing->flags &= ~MF_SOLID;
 	thing->height = 0;
 	thing->radius = 0;
@@ -1454,10 +1511,10 @@ boolean PIT_ChangeSector (mobj_t*	thing)

     if (crushchange && !(leveltime&3) )
     {
+        S_StartSound(thing, sfx_pcrush);   // villsa [STRIFE]
 	P_DamageMobj(thing,NULL,NULL,10);

 	// spray blood in a random direction
-        // villsa [STRIFE] TODO - verify
 	mo = P_SpawnMobj (thing->x,
 			  thing->y,
 			  thing->z + thing->height/2, MT_BLOOD_DEATH);
diff --git a/src/strife/p_mobj.c b/src/strife/p_mobj.c
index 79f6398d..3c9d1a69 100644
--- a/src/strife/p_mobj.c
+++ b/src/strife/p_mobj.c
@@ -961,18 +961,13 @@ P_SpawnPuff
     th->momz = FRACUNIT;
     th->tics -= P_Random()&3;

-    // villsa [STRIFE] TODO - verify and update
-    /*if(shootdist == (80*FRACUNIT))
-        P_SetMobjState(th, S_POW2_00);*/
+    // don't make punches spark on the wall
+    if(attackrange == MELEERANGE)
+        P_SetMobjState(th, S_POW2_00);

     // villsa [STRIFE] unused
     /*if (th->tics < 1)
 	th->tics = 1;*/
-
-    // don't make punches spark on the wall
-    // villsa [STRIFE] TODO - proper puff state
-    //if (attackrange == MELEERANGE)
-	//P_SetMobjState (th, S_PUFF3);
 }

 //
diff --git a/src/strife/p_pspr.c b/src/strife/p_pspr.c
index 658b7190..6e2ccfad 100644
--- a/src/strife/p_pspr.c
+++ b/src/strife/p_pspr.c
@@ -562,9 +562,9 @@ void A_FireGrenade(player_t* player, pspdef_t* pspr)
     st2 = &states[weaponinfo[player->readyweapon].atkstate];
     P_SetPsprite(player, ps_flash, st1 - st2);

-    player->mo->z += (32*FRACUNIT); // ugh
+    player->mo->z += MAXRADIUS; // ugh
     mo = P_SpawnMortar(player->mo, type);
-    player->mo->z -= (32*FRACUNIT); // ugh
+    player->mo->z -= MAXRADIUS; // ugh

     // change momz based on player's pitch
     mo->momz = FixedMul((player->pitch<<FRACBITS) / 160, mo->info->speed) + (8*FRACUNIT);
diff --git a/src/strife/r_segs.c b/src/strife/r_segs.c
index d6e5e156..bd655654 100644
--- a/src/strife/r_segs.c
+++ b/src/strife/r_segs.c
@@ -158,6 +158,14 @@ R_RenderMaskedSegRange

     if (fixedcolormap)
 	dc_colormap = fixedcolormap;
+
+    // villsa [STRIFE] render as transparent (25% or 75%?)
+    if(curline->linedef->flags & ML_TRANSPARENT1)
+        colfunc = fuzzcolfunc;
+
+    // villsa [STRIFE] render as transparent (25% or 75%?)
+    if(curline->linedef->flags & ML_TRANSPARENT2)
+        colfunc = R_DrawMVisTLColumn;

     // draw the columns
     for (dc_x = x1 ; dc_x <= x2 ; dc_x++)
@@ -188,6 +196,8 @@ R_RenderMaskedSegRange
 	}
 	spryscale += rw_scalestep;
     }
+
+    colfunc = basecolfunc;  // villsa [STRIFE] reset draw routines

 }