shithub: choc

Download patch

ref: 533755e5298ecd39bd682dfd1e33c98d80445369
parent: 69c0d2e83b1eeaf71a2badf3d3f0cda3491312a7
author: Samuel Villareal <svkaiser@gmail.com>
date: Fri Sep 17 22:32:24 EDT 2010

+ A_Tracer, A_BurnSpread and A_AcolyteSpecial done
+ Macro added for giving objective logs

Subversion-branch: /branches/strife-branch
Subversion-revision: 2100

--- a/src/strife/p_dialog.h
+++ b/src/strife/p_dialog.h
@@ -45,6 +45,11 @@
 
 extern char mission_objective[OBJECTIVE_LEN];
 
+// villsa - convenient macro for giving objective logs to player
+#define GiveObjective(x) \
+    if(W_CheckNumForName(DEH_String(x)) != -1)\
+{ strncpy(mission_objective, W_CacheLumpName(DEH_String(x), PU_CACHE), OBJECTIVE_LEN); }
+
 typedef struct mapdlgchoice_s
 {
     int  giveitem;                      // item given when successful
@@ -59,14 +64,14 @@
 
 typedef struct mapdialog_s
 {
-    int speakerid;                  // script ID# for mobjtype that will use this dialog
-    int dropitem;                   // item to drop if that thingtype is killed
-    int checkitem[MDLG_MAXITEMS];   // item(s) needed to see this dialog
-    int jumptoconv;                 // conversation to jump to when... ?
-    char name[MDLG_NAMELEN];        // name of speaker
-    char voice[MDLG_LUMPLEN];       // voice file to play
-    char backpic[MDLG_LUMPLEN];     // backdrop pic for character, if any
-    char text[MDLG_TEXTLEN];        // main message text
+    int speakerid;                      // script ID# for mobjtype that will use this dialog
+    int dropitem;                       // item to drop if that thingtype is killed
+    int checkitem[MDLG_MAXITEMS];       // item(s) needed to see this dialog
+    int jumptoconv;                     // conversation to jump to when... ?
+    char name[MDLG_NAMELEN];            // name of speaker
+    char voice[MDLG_LUMPLEN];           // voice file to play
+    char backpic[MDLG_LUMPLEN];         // backdrop pic for character, if any
+    char text[MDLG_TEXTLEN];            // main message text
     
     // options that this dialog gives the player
     mapdlgchoice_t choices[MDLG_MAXCHOICES];
--- a/src/strife/p_enemy.c
+++ b/src/strife/p_enemy.c
@@ -31,13 +31,11 @@
 
 #include "m_random.h"
 #include "i_system.h"
-
 #include "doomdef.h"
 #include "p_local.h"
-
 #include "s_sound.h"
-
 #include "g_game.h"
+#include "z_zone.h"     // villsa [STRIFE]
 
 // State.
 #include "doomstat.h"
@@ -2116,78 +2114,80 @@
 // A_BspiAttack, A_TroopAttack, A_SargAttack, A_HeadAttack, A_CyberAttack,
 // A_BruisAttack, A_SkelMissile
 
-int	TRACEANGLE = 0xc000000;
 
+int TRACEANGLE = 0xE000000; // villsa [STRIFE] changed from 0xC000000 to 0xE000000
+
+//
+// A_Tracer
+//
 void A_Tracer (mobj_t* actor)
 {
-    // villsa [STRIFE] TODO - update with strife version
-/*    angle_t	exact;
-    fixed_t	dist;
-    fixed_t	slope;
-    mobj_t*	dest;
-    mobj_t*	th;
-		
-    if (gametic & 3)
-	return;
-    
+    angle_t exact;
+    fixed_t dist;
+    fixed_t slope;
+    mobj_t* dest;
+    //mobj_t* th;
+
+    // villsa [STRIFE] not used
+    /*if(gametic & 3)
+        return;*/
+
     // spawn a puff of smoke behind the rocket		
-    P_SpawnPuff (actor->x, actor->y, actor->z);
-	
+    /*P_SpawnPuff(actor->x, actor->y, actor->z);
+
     th = P_SpawnMobj (actor->x-actor->momx,
-		      actor->y-actor->momy,
-		      actor->z, MT_SMOKE);
-    
+        actor->y-actor->momy,
+        actor->z, MT_SMOKE);
+
     th->momz = FRACUNIT;
     th->tics -= P_Random()&3;
     if (th->tics < 1)
-	th->tics = 1;
-    
+        th->tics = 1;*/
+
     // adjust direction
     dest = actor->tracer;
-	
-    if (!dest || dest->health <= 0)
-	return;
-    
+
+    if(!dest || dest->health <= 0)
+        return;
+
     // change angle	
-    exact = R_PointToAngle2 (actor->x,
-			     actor->y,
-			     dest->x,
-			     dest->y);
+    exact = R_PointToAngle2(actor->x, actor->y, dest->x, dest->y);
 
-    if (exact != actor->angle)
+    if(exact != actor->angle)
     {
-	if (exact - actor->angle > 0x80000000)
-	{
-	    actor->angle -= TRACEANGLE;
-	    if (exact - actor->angle < 0x80000000)
-		actor->angle = exact;
-	}
-	else
-	{
-	    actor->angle += TRACEANGLE;
-	    if (exact - actor->angle > 0x80000000)
-		actor->angle = exact;
-	}
+        // villsa [STRIFE] slightly different algorithm
+        if(exact - actor->angle <= 0x80000000)
+        {
+            actor->angle += TRACEANGLE;
+            if(exact - actor->angle > 0x80000000)
+                actor->angle = exact;
+        }
+        else
+        {
+            actor->angle -= TRACEANGLE;
+            if (exact - actor->angle < 0x80000000)
+                actor->angle = exact;
+        }
     }
-	
+
     exact = actor->angle>>ANGLETOFINESHIFT;
     actor->momx = FixedMul (actor->info->speed, finecosine[exact]);
     actor->momy = FixedMul (actor->info->speed, finesine[exact]);
-    
+
     // change slope
     dist = P_AproxDistance (dest->x - actor->x,
-			    dest->y - actor->y);
-    
+        dest->y - actor->y);
+
     dist = dist / actor->info->speed;
 
     if (dist < 1)
-	dist = 1;
+        dist = 1;
     slope = (dest->z+40*FRACUNIT - actor->z) / dist;
 
     if (slope < actor->momz)
-	actor->momz -= FRACUNIT/8;
+        actor->momz -= FRACUNIT/8;
     else
-	actor->momz += FRACUNIT/8;*/
+        actor->momz += FRACUNIT/8;
 }
 
 //
@@ -2820,9 +2820,42 @@
     mo->momz = (P_Random() & 7) << FRACBITS;
 }
 
+//
+// A_BurnSpread
+// villsa [STRIFE] - new codepointer
+//
 void A_BurnSpread(mobj_t* actor)
 {
+    int t;
+    mobj_t* mo;
+    fixed_t x;
+    fixed_t y;
 
+    actor->momz -= (8*FRACUNIT);
+
+    t = P_Random();
+    actor->momx += ((t & 3) - (P_Random() & 3)) << FRACBITS;
+    t = P_Random();
+    actor->momy += ((t & 3) - (P_Random() & 3)) << FRACBITS;
+
+    S_StartSound(actor, sfx_lgfire);
+
+    if(actor->flags & MF_DROPPED)
+        return; // not the parent
+
+    x = actor->x + (((P_Random() + 12) & 31) << FRACBITS);
+    y = actor->y + (((P_Random() + 12) & 31) << FRACBITS);
+
+    // spawn child
+    mo = P_SpawnMobj(x, y, actor->z + (4*FRACUNIT), MT_PFLAME);
+
+    t = P_Random();
+    mo->momx += ((t & 7) - (P_Random() & 7)) << FRACBITS;
+    t = P_Random();
+    mo->momy += ((t & 7) - (P_Random() & 7)) << FRACBITS;
+    mo->momz -= FRACUNIT;
+    mo->flags |= MF_DROPPED;
+    mo->reactiontime = (P_Random() & 3) + 2;
 }
 
 //
@@ -2835,9 +2868,52 @@
     // villsa [STRIFE] TODO - update to strife version
 }
 
+//
+// A_AcolyteSpecial
+// villsa [STRIFE] - new codepointer
+//
 void A_AcolyteSpecial(mobj_t* actor)
 {
-   // STRIFE-TODO
+    int p;
+    int i;
+    thinker_t* th;
+
+    if(actor->type != MT_GUARD8)
+        return; // must be MT_GUARD8
+
+    for(i = 0; i < MAXPLAYERS; i++)
+    {
+        if(playeringame[i])
+            p++;
+    }
+
+    // [STRIFE] TODO - whats the point of this?
+    if(p == 8)
+        return;
+
+    for(th = thinkercap.next; th != &thinkercap; th = th->next)
+    {
+        if(th->function.acp1 == P_MobjThinker)
+        {
+            mobj_t *mo = (mobj_t *)th;
+
+            if(mo != actor && mo->type == actor->type && mo->health > 0)
+                return;
+
+            if(mo->type != MT_GUARD8)
+                continue;   // not MT_GUARD8
+
+            // give quest token #7 to all players
+            for(i = 0; i < MAXPLAYERS; i++)
+                P_GiveItemToPlayer(&players[i], SPR_TOKN, MT_TOKEN_QUEST7);
+
+            // play voice
+            I_StartVoice(DEH_String("VOC14"));
+
+            // give objective
+            GiveObjective("LOG14");
+        }
+    }
 }
 
 //
--- a/src/strife/p_inter.c
+++ b/src/strife/p_inter.c
@@ -832,11 +832,8 @@
             EV_DoFloor(&junk, lowerFloor);
 
             I_StartVoice(DEH_String("VOC13"));
-            if(W_CheckNumForName(DEH_String("LOG13")) != -1)
-            {
-                strncpy(mission_objective,
-                    W_CacheLumpName(DEH_String("LOG13"), PU_CACHE), OBJECTIVE_LEN);
-            }
+            GiveObjective("LOG13");
+
             item = MT_COUPLING_BROKEN;
             players[0].questflags |= (1 << (mobjinfo[MT_COUPLING].speed - 1));
             break;