]> de.git.xonotic.org Git - xonotic/darkplaces.git/commitdiff
Added CSQC globals dmg_take, dmg_save and dmg_origin. These globals correspond to...
authordresk <dresk@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 13 Aug 2007 18:04:50 +0000 (18:04 +0000)
committerdresk <dresk@d7cf8633-e32d-0410-b094-e92efae38249>
Mon, 13 Aug 2007 18:04:50 +0000 (18:04 +0000)
These globals are optional, and do not interfere with the CRC of the CSQC definitions.

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@7524 d7cf8633-e32d-0410-b094-e92efae38249

csprogs.c
progsvm.h
prvm_edict.c
view.c

index bb51c500407901a6684019106685cb94aa4169de..116381fc8154eb22b3ef17f9f8037f23ce380134 100644 (file)
--- a/csprogs.c
+++ b/csprogs.c
@@ -44,7 +44,28 @@ void CL_VM_Error (const char *format, ...)   //[515]: hope it will be never execut
 //     Host_AbortCurrentFrame();       //[515]: hmmm... if server says it needs csqc then client MUST disconnect
        Host_Error(va("CL_VM_Error: %s", errorstring));
 }
-
+void CL_VM_UpdateDmgGlobals (int dmg_take, int dmg_save, vec3_t dmg_origin)
+{
+       prvm_eval_t *val;
+       if(cl.csqc_loaded)
+       {
+               CSQC_BEGIN
+               val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.dmg_take);
+               if(val)
+                       val->_float = dmg_take;
+               val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.dmg_save);
+               if(val)
+                       val->_float = dmg_save;
+               val = PRVM_GLOBALFIELDVALUE(prog->globaloffsets.dmg_origin);
+               if(val)
+               {
+                       val->vector[0] = dmg_origin[0];
+                       val->vector[1] = dmg_origin[1];
+                       val->vector[2] = dmg_origin[2];
+               }
+               CSQC_END
+       }
+}
 //[515]: set globals before calling R_UpdateView, WEIRD CRAP
 static void CSQC_SetGlobals (void)
 {
@@ -232,6 +253,10 @@ qboolean CL_VM_InputEvent (qboolean pressed, int key)
 
 qboolean CL_VM_UpdateView (void)
 {
+       vec3_t emptyvector;
+       emptyvector[0] = 0;
+       emptyvector[1] = 0;
+       emptyvector[2] = 0;
 //     vec3_t oldangles;
        if(!cl.csqc_loaded)
                return false;
@@ -245,6 +270,8 @@ qboolean CL_VM_UpdateView (void)
                r_refdef.numlights = 0;
                PRVM_ExecuteProgram(prog->funcoffsets.CSQC_UpdateView, "QC function CSQC_UpdateView is missing");
                //VectorCopy(oldangles, cl.viewangles);
+               // Dresk : Reset Dmg Globals Here
+               CL_VM_UpdateDmgGlobals(0, 0, emptyvector);
        CSQC_END
        return true;
 }
@@ -446,7 +473,6 @@ void CL_VM_UpdateCoopDeathmatchGlobals (int gametype)
                CSQC_END
        }
 }
-
 float CL_VM_Event (float event)                //[515]: needed ? I'd say "YES", but don't know for what :D
 {
        float r = 0;
index 727fa402c6ab0abb48be9d29de6585506e13419c..9d50da706ee6a22b01d943321ea1c01b34f3fa77 100644 (file)
--- a/progsvm.h
+++ b/progsvm.h
@@ -239,6 +239,10 @@ typedef struct prvm_prog_globaloffsets_s
        int intermission; // csqc
        int coop; // csqc
        int deathmatch; // csqc
+       int dmg_take; // csqc
+       int dmg_save; // csqc
+       int dmg_origin; // csqc
+       
 }
 prvm_prog_globaloffsets_t;
 
index 50bd175aa508bdbc411d59c804465c2f857bd901..102a40c73a304c9a9fc91bb30c25fe2bbe79a418 100644 (file)
@@ -1443,6 +1443,9 @@ void PRVM_FindOffsets(void)
        prog->globaloffsets.intermission                  = PRVM_ED_FindGlobalOffset("intermission");
        prog->globaloffsets.coop                          = PRVM_ED_FindGlobalOffset("coop");
        prog->globaloffsets.deathmatch                    = PRVM_ED_FindGlobalOffset("deathmatch");
+       prog->globaloffsets.dmg_take                      = PRVM_ED_FindGlobalOffset("dmg_take");
+       prog->globaloffsets.dmg_save                      = PRVM_ED_FindGlobalOffset("dmg_save");
+       prog->globaloffsets.dmg_origin                    = PRVM_ED_FindGlobalOffset("dmg_origin");
 
        // menu qc only uses some functions, nothing else
        prog->funcoffsets.m_display                       = PRVM_ED_FindFunctionOffset("m_display");
diff --git a/view.c b/view.c
index 6ee1a201bda1e38cd1fafc7fdfac9ddb0811cc06..dc75debebe1185571ec7111ec968d049e166a2fe 100644 (file)
--- a/view.c
+++ b/view.c
@@ -22,6 +22,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include "quakedef.h"
 #include "cl_collision.h"
 
+void CL_VM_UpdateDmgGlobals (int dmg_take, int dmg_save, vec3_t dmg_origin);
+
 /*
 
 The view is allowed to move slightly from it's true position for bobbing,
@@ -226,6 +228,9 @@ void V_ParseDamage (void)
        blood = MSG_ReadByte ();
        MSG_ReadVector(from, cls.protocol);
 
+       // Send the Dmg Globals to CSQC
+       CL_VM_UpdateDmgGlobals(blood, armor, from);
+
        count = blood*0.5 + armor*0.5;
        if (count < 10)
                count = 10;