]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - cl_main.c
reenabled loading plaques (and cleaned up that code a lot)
[xonotic/darkplaces.git] / cl_main.c
index 8eab4358519d12b85eb7367e88169c7e76a93232..30b275604c1db4386e04fe46e530bd9582c24a7f 100644 (file)
--- a/cl_main.c
+++ b/cl_main.c
@@ -197,6 +197,7 @@ void CL_Disconnect (void)
                NET_SendUnreliableMessage (cls.netcon, &cls.message);
                SZ_Clear (&cls.message);
                NET_Close (cls.netcon);
+               cls.state = ca_disconnected; // prevent this code from executing again during Host_ShutdownServer
                // if running a local server, shut it down
                if (sv.active)
                        Host_ShutdownServer(false);
@@ -226,6 +227,13 @@ Host should be either "local" or a net address to be passed on
 */
 void CL_EstablishConnection (char *host)
 {
+       sizebuf_t       buf;
+       qbyte   data[128];
+
+       buf.maxsize = 128;
+       buf.cursize = 0;
+       buf.data = data;
+
        if (cls.state == ca_dedicated)
                return;
 
@@ -242,6 +250,8 @@ void CL_EstablishConnection (char *host)
        cls.demonum = -1;                       // not in the demo loop now
        cls.state = ca_connected;
        cls.signon = 0;                         // need all the signon messages before playing
+
+       CL_ClearState ();
 }
 
 /*
@@ -585,7 +595,7 @@ static void CL_RelinkNetworkEntities()
                glowcolor = ent->state_current.glowcolor;
                if (glowsize)
                {
-                       byte *tempcolor = (byte *)&d_8to24table[glowcolor];
+                       qbyte *tempcolor = (qbyte *)&d_8to24table[glowcolor];
                        dlightcolor[0] += glowsize * tempcolor[0] * (1.0f / 255.0f);
                        dlightcolor[1] += glowsize * tempcolor[1] * (1.0f / 255.0f);
                        dlightcolor[2] += glowsize * tempcolor[2] * (1.0f / 255.0f);
@@ -626,8 +636,11 @@ static void CL_RelinkNetworkEntities()
        }
 }
 
-void CL_LerpPlayerEye(float frac)
+void CL_LerpPlayer(float frac)
 {
+       int i;
+       float d;
+
        if (cl.entitydatabase.numframes)
        {
                cl.viewentorigin[0] = cl.viewentoriginold[0] + frac * (cl.viewentoriginnew[0] - cl.viewentoriginold[0]);
@@ -636,12 +649,8 @@ void CL_LerpPlayerEye(float frac)
        }
        else
                VectorCopy (cl_entities[cl.viewentity].render.origin, cl.viewentorigin);
-}
 
-static void CL_LerpPlayerVelocity (float frac)
-{
-       int i;
-       float d;
+       cl.viewzoom = cl.viewzoomold + frac * (cl.viewzoomnew - cl.viewzoomold);
 
        for (i = 0;i < 3;i++)
                cl.velocity[i] = cl.mvelocity[1][i] + frac * (cl.mvelocity[0][i] - cl.mvelocity[1][i]);
@@ -751,8 +760,7 @@ void CL_RelinkEntities (void)
        CL_MoveParticles();
        CL_UpdateTEnts();
 
-       CL_LerpPlayerEye(frac);
-       CL_LerpPlayerVelocity(frac);
+       CL_LerpPlayer(frac);
 }
 
 
@@ -823,12 +831,29 @@ void CL_SendCmd (void)
        // get basic movement from keyboard
                CL_BaseMove (&cmd);
 
+               IN_PreMove(); // OS independent code
+
        // allow mice or other external controllers to add to the move
                IN_Move (&cmd);
 
+               IN_PostMove(); // OS independent code
+
        // send the unreliable message
                CL_SendMove (&cmd);
        }
+       else
+       {
+               // LordHavoc: fix for NAT routing of netquake:
+               // bounce back a clc_nop message to the newly allocated server port,
+               // to establish a routing connection for incoming frames,
+               // the server waits for this before sending anything
+               if (realtime > cl.sendnoptime)
+               {
+                       Con_DPrintf("sending clc_nop to get server's attention\n");
+                       cl.sendnoptime = realtime + 3;
+                       MSG_WriteByte(&cls.message, clc_nop);
+               }
+       }
 
        if (cls.demoplayback)
        {