public static void ParseFrame( ) { Int32 cmd; Int32 len; frame_t old; Globals.cl.frame.Reset(); Globals.cl.frame.serverframe = MSG.ReadLong(Globals.net_message); Globals.cl.frame.deltaframe = MSG.ReadLong(Globals.net_message); Globals.cl.frame.servertime = Globals.cl.frame.serverframe * 100; if (Globals.cls.serverProtocol != 26) { Globals.cl.surpressCount = MSG.ReadByte(Globals.net_message); } if (Globals.cl_shownet.value == 3) { Com.Printf(" frame:" + Globals.cl.frame.serverframe + " delta:" + Globals.cl.frame.deltaframe + "\\n"); } if (Globals.cl.frame.deltaframe <= 0) { Globals.cl.frame.valid = true; old = null; Globals.cls.demowaiting = false; } else { old = Globals.cl.frames[Globals.cl.frame.deltaframe & Defines.UPDATE_MASK]; if (!old.valid) { Com.Printf("Delta from invalid frame (not supposed to happen!).\\n"); } if (old.serverframe != Globals.cl.frame.deltaframe) { Com.Printf("Delta frame too old.\\n"); } else if (Globals.cl.parse_entities - old.parse_entities > Defines.MAX_PARSE_ENTITIES - 128) { Com.Printf("Delta parse_entities too old.\\n"); } else { Globals.cl.frame.valid = true; } } if (Globals.cl.time > Globals.cl.frame.servertime) { Globals.cl.time = Globals.cl.frame.servertime; } else if (Globals.cl.time < Globals.cl.frame.servertime - 100) { Globals.cl.time = Globals.cl.frame.servertime - 100; } len = MSG.ReadByte(Globals.net_message); MSG.ReadData(Globals.net_message, Globals.cl.frame.areabits, len); cmd = MSG.ReadByte(Globals.net_message); CL_parse.SHOWNET(CL_parse.svc_strings[cmd]); if (cmd != Defines.svc_playerinfo) { Com.Error(Defines.ERR_DROP, "CL_ParseFrame: not playerinfo"); } ParsePlayerstate(old, Globals.cl.frame); cmd = MSG.ReadByte(Globals.net_message); CL_parse.SHOWNET(CL_parse.svc_strings[cmd]); if (cmd != Defines.svc_packetentities) { Com.Error(Defines.ERR_DROP, "CL_ParseFrame: not packetentities"); } ParsePacketEntities(old, Globals.cl.frame); Globals.cl.frames[Globals.cl.frame.serverframe & Defines.UPDATE_MASK].Set(Globals.cl.frame); if (Globals.cl.frame.valid) { if (Globals.cls.state != Defines.ca_active) { Globals.cls.state = Defines.ca_active; Globals.cl.force_refdef = true; Globals.cl.predicted_origin[0] = Globals.cl.frame.playerstate.pmove.origin[0] * 0.125F; Globals.cl.predicted_origin[1] = Globals.cl.frame.playerstate.pmove.origin[1] * 0.125F; Globals.cl.predicted_origin[2] = Globals.cl.frame.playerstate.pmove.origin[2] * 0.125F; Math3D.VectorCopy(Globals.cl.frame.playerstate.viewangles, Globals.cl.predicted_angles); if (Globals.cls.disable_servercount != Globals.cl.servercount && Globals.cl.refresh_prepped) { SCR.EndLoadingPlaque(); } } Globals.cl.sound_prepped = true; FireEntityEvents(Globals.cl.frame); CL_pred.CheckPredictionError(); } }