cvar_t sv_aim = {CVAR_SAVE, "sv_aim", "2"}; //"0.93"}; // LordHavoc: disabled autoaim by default
cvar_t pr_zone_min_strings = {0, "pr_zone_min_strings", "64"};
-mempool_t *pr_strings_mempool;
-
// LordHavoc: added this to semi-fix the problem of using many ftos calls in a print
#define STRINGTEMP_BUFFERS 16
#define STRINGTEMP_LENGTH 4096
"DP_GFX_SKYBOX "
"DP_HALFLIFE_MAP "
"DP_HALFLIFE_MAP_CVAR "
+"DP_HALFLIFE_SPRITE "
"DP_INPUTBUTTONS "
"DP_LITSPRITES "
"DP_LITSUPPORT "
radius = G_FLOAT(OFS_PARM1);
radius2 = radius * radius;
- mins[0] = org[0] - radius;
- mins[1] = org[1] - radius;
- mins[2] = org[2] - radius;
- maxs[0] = org[0] + radius;
- maxs[1] = org[1] + radius;
- maxs[2] = org[2] + radius;
+ mins[0] = org[0] - (radius + 1);
+ mins[1] = org[1] - (radius + 1);
+ mins[2] = org[2] - (radius + 1);
+ maxs[0] = org[0] + (radius + 1);
+ maxs[1] = org[1] + (radius + 1);
+ maxs[2] = org[2] + (radius + 1);
numtouchedicts = SV_EntitiesInBox(mins, maxs, MAX_EDICTS, touchedicts);
if (numtouchedicts > MAX_EDICTS)
{
{
ent = touchedicts[i];
pr_xfunction->builtinsprofile++;
+ // Quake did not return non-solid entities but darkplaces does
+ // (note: this is the reason you can't blow up fallen zombies)
+ if (ent->v->solid == SOLID_NOT && !sv_gameplayfix_blowupfallenzombies.integer)
+ continue;
// LordHavoc: compare against bounding box rather than center so it
// doesn't miss large objects, and use DotProduct instead of Length
// for a major speedup
- eorg[0] = (org[0] - ent->v->origin[0]) - bound(ent->v->mins[0], (org[0] - ent->v->origin[0]), ent->v->maxs[0]);
- eorg[1] = (org[1] - ent->v->origin[1]) - bound(ent->v->mins[1], (org[1] - ent->v->origin[1]), ent->v->maxs[1]);
- eorg[2] = (org[2] - ent->v->origin[2]) - bound(ent->v->mins[2], (org[2] - ent->v->origin[2]), ent->v->maxs[2]);
+ VectorSubtract(org, ent->v->origin, eorg);
+ if (sv_gameplayfix_findradiusdistancetobox.integer)
+ {
+ eorg[0] -= bound(ent->v->mins[0], eorg[0], ent->v->maxs[0]);
+ eorg[1] -= bound(ent->v->mins[1], eorg[1], ent->v->maxs[1]);
+ eorg[2] -= bound(ent->v->mins[2], eorg[2], ent->v->maxs[2]);
+ }
+ else
+ VectorMAMAM(1, eorg, 0.5f, ent->v->mins, 0.5f, ent->v->maxs, eorg);
if (DotProduct(eorg, eorg) < radius2)
{
ent->v->chain = EDICT_TO_PROG(chain);
// radius
MSG_WriteByte(&sv.datagram, bound(0, G_FLOAT(OFS_PARM1) / 8 - 1, 255));
// lifetime
- MSG_WriteByte(&sv.datagram, bound(0, G_FLOAT(OFS_PARM2) / 256 - 1, 255));
+ MSG_WriteByte(&sv.datagram, bound(0, G_FLOAT(OFS_PARM2) * 256 - 1, 255));
// color
MSG_WriteByte(&sv.datagram, bound(0, G_VECTOR(OFS_PARM3)[0] * 255, 255));
MSG_WriteByte(&sv.datagram, bound(0, G_VECTOR(OFS_PARM3)[1] * 255, 255));
{
char *in, *out;
in = G_STRING(OFS_PARM0);
- out = Mem_Alloc(pr_strings_mempool, strlen(in) + 1);
+ out = PR_Alloc(strlen(in) + 1);
strcpy(out, in);
G_INT(OFS_RETURN) = PR_SetString(out);
}
//void(string s) strunzone = #119; // removes a copy of a string from the string zone (you can not use that string again or it may crash!!!)
void PF_strunzone(void)
{
- Mem_Free(G_STRING(OFS_PARM0));
+ PR_Free(G_STRING(OFS_PARM0));
}
//void(entity e, string s) clientcommand = #440; // executes a command string as if it came from the specified client
void PR_Cmd_Init(void)
{
- pr_strings_mempool = Mem_AllocPool("pr_stringszone", 0, NULL);
PR_Files_Init();
PR_Search_Init();
}
void PR_Cmd_Shutdown(void)
{
- Mem_FreePool (&pr_strings_mempool);
}
void PR_Cmd_Reset(void)
{
- Mem_EmptyPool(pr_strings_mempool);
PR_Search_Reset();
PR_Files_CloseAll();
}