]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_parse.c
MOVETYPE_FLY_WORLDONLY (movetype 33)
[xonotic/darkplaces.git] / cl_parse.c
index dd9f550420347e45551e55c1326e47324ffa6e2f..3d56d11199524f718b880249a9707b05a3952524 100644 (file)
@@ -26,6 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include "libcurl.h"
 #include "utf8lib.h"
 #include "menu.h"
+#include "cl_video.h"
 
 const char *svc_strings[128] =
 {
@@ -166,7 +167,6 @@ cvar_t cl_worldname = {CVAR_READONLY, "cl_worldname", "", "name of current world
 cvar_t cl_worldnamenoextension = {CVAR_READONLY, "cl_worldnamenoextension", "", "name of current worldmodel without extension"};
 cvar_t cl_worldbasename = {CVAR_READONLY, "cl_worldbasename", "", "name of current worldmodel without maps/ prefix or extension"};
 
-cvar_t demo_nehahra = {0, "demo_nehahra", "0", "reads all quake demos as nehahra movie protocol"};
 cvar_t developer_networkentities = {0, "developer_networkentities", "0", "prints received entities, value is 0-4 (higher for more info)"};
 cvar_t cl_gameplayfix_soundsmovewithentities = {0, "cl_gameplayfix_soundsmovewithentities", "1", "causes sounds made by lifts, players, projectiles, and any other entities, to move with the entity, so for example a rocket noise follows the rocket rather than staying at the starting position"};
 cvar_t cl_sound_wizardhit = {0, "cl_sound_wizardhit", "wizard/hit.wav", "sound to play during TE_WIZSPIKE (empty cvar disables sound)"};
@@ -247,7 +247,7 @@ void CL_ParseStartSoundPacket(int largesoundindex)
                if (field_mask & SND_LARGEENTITY)
                {
                        ent = (unsigned short) MSG_ReadShort ();
-                       channel = MSG_ReadByte ();
+                       channel = MSG_ReadChar ();
                }
                else
                {
@@ -262,6 +262,8 @@ void CL_ParseStartSoundPacket(int largesoundindex)
                        sound_num = MSG_ReadByte ();
        }
 
+       channel = CHAN_NET2ENGINE(channel);
+
        MSG_ReadVector(pos, cls.protocol);
 
        if (sound_num >= MAX_SOUNDS)
@@ -1620,7 +1622,11 @@ void CL_ParseServerInfo (void)
        protocolversion_t protocol;
        int nummodels, numsounds;
 
+       // if we start loading a level and a video is still playing, stop it
+       CL_VideoStop();
+
        Con_DPrint("Serverinfo packet received.\n");
+       Collision_Cache_Reset(true);
 
        // if server is active, we already began a loading plaque
        if (!sv.active)
@@ -1651,7 +1657,7 @@ void CL_ParseServerInfo (void)
                return;
        }
        // hack for unmarked Nehahra movie demos which had a custom protocol
-       if (protocol == PROTOCOL_QUAKEDP && cls.demoplayback && demo_nehahra.integer)
+       if (protocol == PROTOCOL_QUAKEDP && cls.demoplayback && gamemode == GAME_NEHAHRA)
                protocol = PROTOCOL_NEHAHRAMOVIE;
        cls.protocol = protocol;
        Con_DPrintf("Server protocol is %s\n", Protocol_NameForEnum(cls.protocol));
@@ -3198,6 +3204,7 @@ qboolean CL_ExaminePrintString(const char *text)
 }
 
 extern cvar_t slowmo;
+extern cvar_t cl_lerpexcess;
 extern void CSQC_UpdateNetworkTimes(double newtime, double oldtime);
 static void CL_NetworkTimeReceived(double newtime)
 {
@@ -3281,6 +3288,20 @@ static void CL_NetworkTimeReceived(double newtime)
 
        if (cl.mtime[0] > cl.mtime[1])
                World_Physics_Frame(&cl.world, cl.mtime[0] - cl.mtime[1], cl.movevars_gravity);
+
+       // only lerp entities that also get an update in this frame, when lerp excess is used
+       if(cl_lerpexcess.value > 0)
+       {
+               int i;
+               for (i = 1;i < cl.num_entities;i++)
+               {
+                       if (cl.entities_active[i])
+                       {
+                               entity_t *ent = cl.entities + i;
+                               ent->persistent.lerpdeltatime = 0;
+                       }
+               }
+       }
 }
 
 #define SHOWNET(x) if(cl_shownet.integer==2)Con_Printf("%3i:%s(%i)\n", msg_readcount-1, x, cmd);
@@ -3782,7 +3803,7 @@ void CL_ParseServerMessage(void)
                                if (protocol == PROTOCOL_UNKNOWN)
                                        Host_Error("CL_ParseServerMessage: Server is unrecognized protocol number (%i)", i);
                                // hack for unmarked Nehahra movie demos which had a custom protocol
-                               if (protocol == PROTOCOL_QUAKEDP && cls.demoplayback && demo_nehahra.integer)
+                               if (protocol == PROTOCOL_QUAKEDP && cls.demoplayback && gamemode == GAME_NEHAHRA)
                                        protocol = PROTOCOL_NEHAHRAMOVIE;
                                cls.protocol = protocol;
                                break;
@@ -4193,10 +4214,6 @@ void CL_Parse_Init(void)
        Cvar_RegisterVariable(&cl_worldnamenoextension);
        Cvar_RegisterVariable(&cl_worldbasename);
 
-       // LordHavoc: added demo_nehahra cvar
-       Cvar_RegisterVariable (&demo_nehahra);
-       if (gamemode == GAME_NEHAHRA)
-               Cvar_SetValue("demo_nehahra", 1);
        Cvar_RegisterVariable(&developer_networkentities);
        Cvar_RegisterVariable(&cl_gameplayfix_soundsmovewithentities);