if (num >= cl_max_entities)
{
if (!cl_entities)
- Sys_Error("CL_ExpandEntities: cl_entities not initialized\n");
+ Sys_Error("CL_ExpandEntities: cl_entities not initialized");
if (num >= MAX_EDICTS)
- Host_Error("CL_ExpandEntities: num %i >= %i\n", num, MAX_EDICTS);
+ Host_Error("CL_ExpandEntities: num %i >= %i", num, MAX_EDICTS);
oldmaxentities = cl_max_entities;
oldentities = cl_entities;
cl_max_entities = (num & ~255) + 256;
// stop demo loop in case this fails
CL_Disconnect();
- NetConn_ClientFrame();
- NetConn_ServerFrame();
+
+ // run a network frame
+ //NetConn_ClientFrame();SV_VM_Begin();NetConn_ServerFrame();SV_VM_End();
if (LHNETADDRESS_FromString(&cls.connect_address, host, 26000) && (cls.connect_mysocket = NetConn_ChooseClientSocketForAddress(&cls.connect_address)))
{
cls.connect_remainingtries = 3;
cls.connect_nextsendtime = 0;
M_Update_Return_Reason("Trying to connect...");
- if (sv.active)
- {
- NetConn_ClientFrame();
- NetConn_ServerFrame();
- NetConn_ClientFrame();
- NetConn_ServerFrame();
- NetConn_ClientFrame();
- NetConn_ServerFrame();
- NetConn_ClientFrame();
- NetConn_ServerFrame();
- }
+ // run several network frames to jump into the game quickly
+ //if (sv.active)
+ //{
+ // NetConn_ClientFrame();SV_VM_Begin();NetConn_ServerFrame();SV_VM_End();
+ // NetConn_ClientFrame();SV_VM_Begin();NetConn_ServerFrame();SV_VM_End();
+ // NetConn_ClientFrame();SV_VM_Begin();NetConn_ServerFrame();SV_VM_End();
+ // NetConn_ClientFrame();SV_VM_Begin();NetConn_ServerFrame();SV_VM_End();
+ //}
}
else
{
strcpy(name, "--no model--");
for (j = (int)strlen(name);j < 25;j++)
name[j] = ' ';
- Con_Printf("%3i: %s:%4i (%5i %5i %5i) [%3i %3i %3i] %4.2f %5.3f\n", i, name, ent->render.frame, (int) ent->render.origin[0], (int) ent->render.origin[1], (int) ent->render.origin[2], (int) ent->render.angles[0] % 360, (int) ent->render.angles[1] % 360, (int) ent->render.angles[2] % 360, ent->render.scale, ent->render.alpha);
+ Con_Printf("%3i: %s:%4i (%5i %5i %5i) [%3i %3i %3i] %4.2f %5.3f\n", i, name, ent->render.frame, (int) ent->render.matrix.m[0][3], (int) ent->render.matrix.m[1][3], (int) ent->render.matrix.m[2][3], (int) ent->render.angles[0] % 360, (int) ent->render.angles[1] % 360, (int) ent->render.angles[2] % 360, ent->render.scale, ent->render.alpha);
}
}
dlightsetup:
//Con_Printf("dlight %i : %f %f %f : %f %f %f\n", i, org[0], org[1], org[2], red * radius, green * radius, blue * radius);
memset (dl, 0, sizeof(*dl));
- dl->matrix = *matrix;
+ Matrix4x4_Normalize(&dl->matrix, matrix);
dl->ent = ent;
dl->origin[0] = dl->matrix.m[0][3];
dl->origin[1] = dl->matrix.m[1][3];
else if (e->render.model->flags & EF_TRACER)
{
trailtype = 3;
- dlightradius = max(dlightradius, 100);
- dlightcolor[0] += 0.25f;
- dlightcolor[1] += 1.00f;
- dlightcolor[2] += 0.25f;
+ //dlightradius = max(dlightradius, 100);
+ //dlightcolor[0] += 0.25f;
+ //dlightcolor[1] += 1.00f;
+ //dlightcolor[2] += 0.25f;
}
else if (e->render.model->flags & EF_TRACER2)
{
trailtype = 5;
- dlightradius = max(dlightradius, 100);
- dlightcolor[0] += 1.00f;
- dlightcolor[1] += 0.60f;
- dlightcolor[2] += 0.20f;
+ //dlightradius = max(dlightradius, 100);
+ //dlightcolor[0] += 1.00f;
+ //dlightcolor[1] += 0.60f;
+ //dlightcolor[2] += 0.20f;
}
else if (e->render.model->flags & EF_ROCKET)
{
// transparent stuff can't be lit during the opaque stage
if (e->render.effects & (EF_ADDITIVE | EF_NODEPTHTEST) || e->render.alpha < 1)
e->render.flags |= RENDER_TRANSPARENT;
+ // double sided rendering mode causes backfaces to be visible
+ // (mostly useful on transparent stuff)
+ if (e->render.effects & EF_DOUBLESIDED)
+ e->render.flags |= RENDER_NOCULLFACE;
// either fullbright or lit
if (!(e->render.effects & EF_FULLBRIGHT) && !r_fullbright.integer)
e->render.flags |= RENDER_LIGHT;
// if coming from the player, update the start position
//if (b->entity == cl.viewentity)
- // VectorCopy (cl_entities[cl.viewentity].render.origin, b->start);
- if (cl_beams_relative.integer && b->entity == cl.viewentity && b->entity && cl_entities[b->entity].state_current.active && b->relativestartvalid)
+ // Matrix4x4_OriginFromMatrix(&cl_entities[cl.viewentity].render.matrix, b->start);
+ if (cl_beams_relative.integer && b->entity && cl_entities[b->entity].state_current.active && b->relativestartvalid)
{
- entity_state_t *p = &cl_entities[b->entity].state_previous;
- //entity_state_t *c = &cl_entities[b->entity].state_current;
entity_render_t *r = &cl_entities[b->entity].render;
- matrix4x4_t matrix, imatrix;
- if (b->relativestartvalid == 2)
- {
- // not really valid yet, we need to get the orientation now
- // (ParseBeam flagged this because it is received before
- // entities are received, by now they have been received)
- // note: because players create lightning in their think
- // function (which occurs before movement), they actually
- // have some lag in it's location, so compare to the
- // previous player state, not the latest
- if (b->entity == cl.viewentity)
- Matrix4x4_CreateFromQuakeEntity(&matrix, p->origin[0], p->origin[1], p->origin[2] + 16, cl.viewangles[0], cl.viewangles[1], cl.viewangles[2], 1);
- else
- Matrix4x4_CreateFromQuakeEntity(&matrix, p->origin[0], p->origin[1], p->origin[2] + 16, p->angles[0], p->angles[1], p->angles[2], 1);
- Matrix4x4_Invert_Simple(&imatrix, &matrix);
- Matrix4x4_Transform(&imatrix, b->start, b->relativestart);
- Matrix4x4_Transform(&imatrix, b->end, b->relativeend);
- b->relativestartvalid = 1;
- }
- else
- {
- if (b->entity == cl.viewentity)
- Matrix4x4_CreateFromQuakeEntity(&matrix, r->origin[0], r->origin[1], r->origin[2] + 16, cl.viewangles[0], cl.viewangles[1], cl.viewangles[2], 1);
- else
- Matrix4x4_CreateFromQuakeEntity(&matrix, r->origin[0], r->origin[1], r->origin[2] + 16, r->angles[0], r->angles[1], r->angles[2], 1);
- Matrix4x4_Transform(&matrix, b->relativestart, b->start);
- Matrix4x4_Transform(&matrix, b->relativeend, b->end);
- }
+ //Matrix4x4_OriginFromMatrix(&r->matrix, origin);
+ //Matrix4x4_CreateFromQuakeEntity(&matrix, r->origin[0], r->origin[1], r->origin[2] + 16, r->angles[0], r->angles[1], r->angles[2], 1);
+ Matrix4x4_Transform(&r->matrix, b->relativestart, b->start);
+ Matrix4x4_Transform(&r->matrix, b->relativeend, b->end);
}
if (b->lightning)
r_refdef.maxentities = MAX_EDICTS + 256 + 512;
r_refdef.entities = (entity_render_t **)Mem_Alloc(cl_mempool, sizeof(entity_render_t *) * r_refdef.maxentities);
// 256k drawqueue buffer
+ // TODO: make dynamic
r_refdef.maxdrawqueuesize = 256 * 1024;
r_refdef.drawqueue = (unsigned char *)Mem_Alloc(cl_mempool, r_refdef.maxdrawqueuesize);