X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=cgamevm.c;h=0d3026ceef685c28a61c189c2944eb5ec4032765;hb=e80a362bdb11a1192b828defe4ecc6953a4b8dbe;hp=31881975a89f2c41eb1d42c34494e85b2eac3323;hpb=e13a8c596f2c51ca815773f89fee4f4f4f723f74;p=xonotic%2Fdarkplaces.git diff --git a/cgamevm.c b/cgamevm.c index 31881975..0d3026ce 100644 --- a/cgamevm.c +++ b/cgamevm.c @@ -12,7 +12,7 @@ static mempool_t *cgvm_mempool; static void (*cgvm_networkcode[256])(unsigned char num); -static qbyte *cgvm_netbuffer; +static unsigned char *cgvm_netbuffer; static int cgvm_netbufferlength; static int cgvm_netbufferpos; @@ -26,6 +26,11 @@ void CL_CGVM_Init(void) cgvm_mempool = Mem_AllocPool("CGVM", 0, NULL); } +void CL_CGVM_Shutdown(void) +{ + Mem_FreePool (&cgvm_mempool); +} + void CL_CGVM_Clear(void) { Mem_EmptyPool(cgvm_mempool); @@ -47,7 +52,7 @@ void CL_CGVM_Start(void) CG_Init(); // API call } -void CL_CGVM_ParseNetwork(qbyte *netbuffer, int length) +void CL_CGVM_ParseNetwork(unsigned char *netbuffer, int length) { int num; cgvm_netbuffer = netbuffer; @@ -57,7 +62,7 @@ void CL_CGVM_ParseNetwork(qbyte *netbuffer, int length) { num = CGVM_MSG_ReadByte(); if (cgvm_networkcode[num]) - cgvm_networkcode[num]((qbyte)num); + cgvm_networkcode[num]((unsigned char)num); else Host_Error("CL_CGVM_ParseNetwork: unregistered network code %i", num); } @@ -87,7 +92,7 @@ unsigned char CGVM_MSG_ReadByte(void) short CGVM_MSG_ReadShort(void) { - int num; + short num; num = CGVM_MSG_ReadByte() | (CGVM_MSG_ReadByte() << 8); return num; } @@ -169,7 +174,7 @@ void CGVM_Draw_Light(const cgdrawlight_t *l) { matrix4x4_t matrix; Matrix4x4_CreateTranslate(&matrix, l->origin[0], l->origin[1], l->origin[2]); - CL_AllocDlight(NULL, &matrix, l->radius, l->color[0], l->color[1], l->color[2], 0, 0, 0, 0, true, 1); + CL_AllocDlight(NULL, &matrix, l->radius, l->color[0], l->color[1], l->color[2], 0, 0, 0, -1, true, 1, 0.25, 0, 1, 1, LIGHTFLAG_NORMALMODE | LIGHTFLAG_REALTIMEMODE); } void *CGVM_Malloc(const int size) @@ -189,24 +194,21 @@ float CGVM_RandomRange(const float r1, const float r2) float CGVM_TracePhysics(const float *start, const float *end, const float *worldmins, const float *worldmaxs, const float *entitymins, const float *entitymaxs, const cgphysentity_t *physentities, const int numphysentities, float *impactpos, float *impactnormal, int *impactentnum) { - float frac; - vec3_t start2, end2, middle; + trace_t trace; // FIXME: do tracing agains network entities and physentities here - // placeholder world only code assuming 0 size - middle[0] = (worldmins[0] + worldmaxs[0]) * 0.5f; - middle[1] = (worldmins[1] + worldmaxs[1]) * 0.5f; - middle[2] = (worldmins[2] + worldmaxs[2]) * 0.5f; - VectorAdd(start, middle, start2); - VectorAdd(end, middle, end2); - frac = CL_TraceLine((float *)start2, (float *)end2, impactpos, impactnormal, true, NULL, SUPERCONTENTS_SOLID); - VectorSubtract(impactpos, middle, impactpos); + trace = CL_TraceBox(start, vec3_origin, vec3_origin, end, true, NULL, SUPERCONTENTS_SOLID, false); + VectorCopy(trace.endpos, impactpos); + VectorCopy(trace.plane.normal, impactnormal); *impactentnum = -1; - return frac; + return trace.fraction; } char *CGVM_GetCvarString(const char *name) { cvar_t *cvar; + // fast path for common cvars + if (!strcmp(name, "sv_gravity")) + return sv_gravity.string; cvar = Cvar_FindVar((char *)name); if (cvar) return cvar->string; @@ -217,6 +219,9 @@ char *CGVM_GetCvarString(const char *name) float CGVM_GetCvarFloat(const char *name) { cvar_t *cvar; + // fast path for common cvars + if (!strcmp(name, "sv_gravity")) + return sv_gravity.value; cvar = Cvar_FindVar((char *)name); if (cvar) return cvar->value; @@ -227,6 +232,9 @@ float CGVM_GetCvarFloat(const char *name) int CGVM_GetCvarInt(const char *name) { cvar_t *cvar; + // fast path for common cvars + if (!strcmp(name, "sv_gravity")) + return sv_gravity.integer; cvar = Cvar_FindVar((char *)name); if (cvar) return cvar->integer; @@ -254,7 +262,7 @@ int CGVM_Model(const char *name) } if (i >= MAX_CGVM_MODELS) return 0; - model = Mod_ForName((char *)name, false, false, false); + model = Mod_ForName(name, false, false, false); if (!model) return 0; strcpy(cgvm_modelname[i], name);