cl.sensitivityscale = 1.0f;
// enable rendering of the world and such
- cl.csqc_vidvars.drawworld = r_drawworld.integer;
+ cl.csqc_vidvars.drawworld = r_drawworld.integer != 0;
cl.csqc_vidvars.drawenginesbar = true;
cl.csqc_vidvars.drawcrosshair = true;
cl.entities[i].state_current = defaultstate;
}
- if (gamemode == GAME_NEXUIZ)
+ if (gamemode == GAME_NEXUIZ || gamemode == GAME_XONOTIC)
{
VectorSet(cl.playerstandmins, -16, -16, -24);
VectorSet(cl.playerstandmaxs, 16, 16, 45);
void CL_ExpandCSQCRenderEntities(int num)
{
+ int i;
int oldmaxcsqcrenderentities;
entity_render_t *oldcsqcrenderentities;
if (num >= cl.max_csqcrenderentities)
if (oldcsqcrenderentities)
{
memcpy(cl.csqcrenderentities, oldcsqcrenderentities, oldmaxcsqcrenderentities * sizeof(entity_render_t));
+ for (i = 0;i < r_refdef.scene.numentities;i++)
+ if(r_refdef.scene.entities[i] >= oldcsqcrenderentities && r_refdef.scene.entities[i] < (oldcsqcrenderentities + oldmaxcsqcrenderentities))
+ r_refdef.scene.entities[i] = cl.csqcrenderentities + (r_refdef.scene.entities[i] - oldcsqcrenderentities);
Mem_Free(oldcsqcrenderentities);
}
}
Host should be either "local" or a net address
=====================
*/
-void CL_EstablishConnection(const char *host)
+void CL_EstablishConnection(const char *host, int firstarg)
{
if (cls.state == ca_dedicated)
return;
cls.connect_trying = true;
cls.connect_remainingtries = 3;
cls.connect_nextsendtime = 0;
+
+ // only NOW, set connect_userinfo
+ if(firstarg >= 0)
+ {
+ int i;
+ *cls.connect_userinfo = 0;
+ for(i = firstarg; i+2 <= Cmd_Argc(); i += 2)
+ InfoString_SetValue(cls.connect_userinfo, sizeof(cls.connect_userinfo), Cmd_Argv(i), Cmd_Argv(i+1));
+ }
+ else if(firstarg < -1)
+ {
+ // -1: keep as is (reconnect)
+ // -2: clear
+ *cls.connect_userinfo = 0;
+ }
+
M_Update_Return_Reason("Trying to connect...");
+
// run several network frames to jump into the game quickly
//if (sv.active)
//{
int frame;
float origin[3], angles[3], lerp;
entity_t *t;
+ entity_render_t *r;
//entity_persistent_t *p = &e->persistent;
//entity_render_t *r = &e->render;
// skip inactive entities and world
return;
t = cl.entities + e->state_current.tagentity;
// if the tag entity is inactive, skip it
- if (!t->state_current.active)
- return;
- // update the parent first
- CL_UpdateNetworkEntity(t, recursionlimit - 1, interpolate);
+ if (t->state_current.active)
+ {
+ // update the parent first
+ CL_UpdateNetworkEntity(t, recursionlimit - 1, interpolate);
+ r = &t->render;
+ }
+ else
+ {
+ // it may still be a CSQC entity... trying to use its
+ // info from last render frame (better than nothing)
+ if(!cl.csqc_server2csqcentitynumber[e->state_current.tagentity])
+ return;
+ r = cl.csqcrenderentities + cl.csqc_server2csqcentitynumber[e->state_current.tagentity];
+ if(!r->entitynumber)
+ return; // neither CSQC nor legacy entity... can't attach
+ }
// make relative to the entity
- matrix = &t->render.matrix;
+ matrix = &r->matrix;
// some properties of the tag entity carry over
- e->render.flags |= t->render.flags & (RENDER_EXTERIORMODEL | RENDER_VIEWMODEL);
+ e->render.flags |= r->flags & (RENDER_EXTERIORMODEL | RENDER_VIEWMODEL);
// if a valid tagindex is used, make it relative to that tag instead
- // FIXME: use a model function to get tag info (need to handle skeletal)
- if (e->state_current.tagentity && e->state_current.tagindex >= 1 && t->render.model)
+ if (e->state_current.tagentity && e->state_current.tagindex >= 1 && r->model)
{
- if(!Mod_Alias_GetTagMatrix(t->render.model, t->render.frameblend, t->render.skeleton, e->state_current.tagindex - 1, &blendmatrix)) // i.e. no error
+ if(!Mod_Alias_GetTagMatrix(r->model, r->frameblend, r->skeleton, e->state_current.tagindex - 1, &blendmatrix)) // i.e. no error
{
// concat the tag matrices onto the entity matrix
- Matrix4x4_Concat(&tempmatrix, &t->render.matrix, &blendmatrix);
+ Matrix4x4_Concat(&tempmatrix, &r->matrix, &blendmatrix);
// use the constructed tag matrix
matrix = &tempmatrix;
}
{
if (e->render.effects & EF_BRIGHTFIELD)
{
- if (gamemode == GAME_NEXUIZ)
+ if (gamemode == GAME_NEXUIZ || gamemode == GAME_XONOTIC)
trailtype = EFFECT_TR_NEXUIZPLASMA;
else
CL_EntityParticles(e);
return;
// if the tag entity is inactive, skip it
if (!cl.entities[e->state_current.tagentity].state_current.active)
- return;
+ {
+ if(!cl.csqc_server2csqcentitynumber[e->state_current.tagentity])
+ return;
+ if(!cl.csqcrenderentities[cl.csqc_server2csqcentitynumber[e->state_current.tagentity]].entitynumber)
+ return;
+ // if we get here, it's properly csqc networked and attached
+ }
}
// create entity dlights associated with this entity
{
if (e->render.effects & EF_BRIGHTFIELD)
{
- if (gamemode == GAME_NEXUIZ)
+ if (gamemode == GAME_NEXUIZ || gamemode == GAME_XONOTIC)
trailtype = EFFECT_TR_NEXUIZPLASMA;
}
if (e->render.effects & EF_DIMLIGHT)