Clean up the diffs a bit between qw and nq sv_pr_cmds

Add some missing functions to nq.
In qw, Sys_Printf is mapped to SV_Printf, so no harm there.
This commit is contained in:
Bill Currie 2011-09-04 20:34:21 +09:00
parent dcbe23b3d3
commit e1b6f50345
4 changed files with 204 additions and 227 deletions

View file

@ -32,76 +32,6 @@
#ifndef __sv_pr_cmds_h
#define __sv_pr_cmds_h
void PF_error (progs_t * pr);
void PF_objerror (progs_t * pr);
void PF_makevectors (progs_t * pr);
void PF_setorigin (progs_t * pr);
void PF_setsize (progs_t * pr);
void PF_setmodel (progs_t * pr);
void PF_bprint (progs_t * pr);
void PF_sprint (progs_t * pr);
void PF_centerprint (progs_t * pr);
void PF_normalize (progs_t * pr);
void PF_vlen (progs_t * pr);
void PF_vectoyaw (progs_t * pr);
void PF_vectoangles (progs_t * pr);
void PF_random (progs_t * pr);
void PF_particle (progs_t * pr);
void PF_ambientsound (progs_t * pr);
void PF_sound (progs_t * pr);
void PF_break (progs_t * pr);
void PF_traceline (progs_t * pr);
void PF_TraceToss (progs_t * pr);
void PF_checkpos (progs_t * pr);
int PF_newcheckclient (progs_t * pr, int check);
void PF_checkclient (progs_t * pr);
void PF_stuffcmd (progs_t * pr);
void PF_localcmd (progs_t * pr);
void PF_cvar (progs_t * pr);
void PF_cvar_set (progs_t * pr);
void PF_findradius (progs_t * pr);
void PF_dprint (progs_t * pr);
void PF_ftos (progs_t * pr);
void PF_fabs (progs_t * pr);
void PF_vtos (progs_t * pr);
void PF_etos (progs_t * pr);
void PF_Spawn (progs_t * pr);
void PF_Remove (progs_t * pr);
void PF_Find (progs_t * pr);
void PF_precache_file (progs_t * pr);
void PF_precache_sound (progs_t * pr);
void PF_precache_model (progs_t * pr);
void PF_coredump (progs_t * pr);
void PF_traceon (progs_t * pr);
void PF_traceoff (progs_t * pr);
void PF_eprint (progs_t * pr);
void PF_walkmove (progs_t * pr);
void PF_droptofloor (progs_t * pr);
void PF_lightstyle (progs_t * pr);
void PF_rint (progs_t * pr);
void PF_floor (progs_t * pr);
void PF_ceil (progs_t * pr);
void PF_checkbottom (progs_t * pr);
void PF_pointcontents (progs_t * pr);
void PF_nextent (progs_t * pr);
void PF_aim (progs_t * pr);
void PF_changeyaw (progs_t * pr);
void PF_changepitch (progs_t * pr);
void PF_WriteByte (progs_t * pr);
void PF_WriteChar (progs_t * pr);
void PF_WriteShort (progs_t * pr);
void PF_WriteLong (progs_t * pr);
void PF_WriteAngle (progs_t * pr);
void PF_WriteCoord (progs_t * pr);
void PF_WriteString (progs_t * pr);
void PF_WriteEntity (progs_t * pr);
void PF_makestatic (progs_t * pr);
void PF_setspawnparms (progs_t * pr);
void PF_changelevel (progs_t * pr);
void PF_WaterMove (progs_t * pr);
void PF_sin (progs_t * pr);
void PF_cos (progs_t * pr);
void PF_sqrt (progs_t * pr);
void PF_Fixme (progs_t * pr);
#endif // __sv_pr_cmds_h

View file

@ -37,6 +37,7 @@ static __attribute__ ((used)) const char rcsid[] =
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
#include <ctype.h>
#include "QF/cbuf.h"
#include "QF/clip_hull.h"
@ -65,7 +66,7 @@ static __attribute__ ((used)) const char rcsid[] =
error (value)
// void (string e) error
*/
void
static void
PF_error (progs_t *pr)
{
const char *s;
@ -89,7 +90,7 @@ PF_error (progs_t *pr)
objerror (value)
// void (string e) objerror
*/
void
static void
PF_objerror (progs_t *pr)
{
const char *s;
@ -109,9 +110,9 @@ PF_objerror (progs_t *pr)
PF_makevectors
Writes new values for v_forward, v_up, and v_right based on angles
void (entity e) makevectors
void (vector angles) makevectors
*/
void
static void
PF_makevectors (progs_t *pr)
{
AngleVectors (P_VECTOR (pr, 0), *sv_globals.v_forward,
@ -130,7 +131,7 @@ PF_makevectors (progs_t *pr)
setorigin (entity, origin)
// void (entity e, vector o) setorigin
*/
void
static void
PF_setorigin (progs_t *pr)
{
edict_t *e;
@ -220,7 +221,7 @@ SetMinMaxSize (progs_t *pr, edict_t *e, const vec3_t min, const vec3_t max,
setsize (entity, minvector, maxvector)
// void (entity e, vector min, vector max) setsize
*/
void
static void
PF_setsize (progs_t *pr)
{
edict_t *e;
@ -238,7 +239,7 @@ PF_setsize (progs_t *pr)
setmodel (entity, model)
// void (entity e, string m) setmodel
*/
void
static void
PF_setmodel (progs_t *pr)
{
edict_t *e;
@ -258,9 +259,9 @@ PF_setmodel (progs_t *pr)
PR_RunError (pr, "no precache: %s\n", m);
SVstring (e, model) = PR_SetString (pr, m);
SVfloat (e, modelindex) = i; // SV_ModelIndex (m);
SVfloat (e, modelindex) = i;
mod = sv.models[(int) SVfloat (e, modelindex)]; // Mod_ForName (m, true);
mod = sv.models[i];
if (mod) {
// FIXME disabled for now as setting clipmins/maxs is currently
@ -282,7 +283,7 @@ PF_setmodel (progs_t *pr)
bprint (value)
// void (string s) bprint
*/
void
static void
PF_bprint (progs_t *pr)
{
const char *s;
@ -299,7 +300,7 @@ PF_bprint (progs_t *pr)
sprint (clientent, value)
// void (entity client, string s) sprint
*/
void
static void
PF_sprint (progs_t *pr)
{
const char *s;
@ -328,7 +329,7 @@ PF_sprint (progs_t *pr)
centerprint (clientent, value)
// void (...) centerprint
*/
void
static void
PF_centerprint (progs_t *pr)
{
const char *s;
@ -350,7 +351,7 @@ PF_centerprint (progs_t *pr)
}
// void (vector o, vector d, float color, float count) particle
void
static void
PF_particle (progs_t *pr)
{
float *org, *dir;
@ -368,7 +369,7 @@ PF_particle (progs_t *pr)
PF_ambientsound
// void (vector pos, string samp, float vol, float atten) ambientsound
*/
void
static void
PF_ambientsound (progs_t *pr)
{
const char **check;
@ -424,7 +425,7 @@ PF_ambientsound (progs_t *pr)
Larger attenuations will drop off.
// void (entity e, float chan, string samp) sound
*/
void
static void
PF_sound (progs_t *pr)
{
const char *sample;
@ -458,7 +459,7 @@ PF_sound (progs_t *pr)
traceline (vector1, vector2, tryents)
// float (vector v1, vector v2, float tryents) traceline
*/
void
static void
PF_traceline (progs_t *pr)
{
float *v1, *v2;
@ -488,6 +489,45 @@ PF_traceline (progs_t *pr)
*sv_globals.trace_ent = EDICT_TO_PROG (pr, sv.edicts);
}
/*
PF_tracebox
// void (vector start, vector mins, vector maxs, vector end, float type,
// entity passent) tracebox
Wrapper around SV_Move, this makes PF_movetoground and PF_traceline
redundant.
*/
static void
PF_tracebox (progs_t *pr)
{
edict_t *ent;
float *start, *end, *mins, *maxs;
int type;
trace_t trace;
start = P_VECTOR (pr, 0);
mins = P_VECTOR (pr, 1);
maxs = P_VECTOR (pr, 2);
end = P_VECTOR (pr, 3);
type = P_FLOAT (pr, 4);
ent = P_EDICT (pr, 5);
trace = SV_Move (start, mins, maxs, end, type, ent);
*sv_globals.trace_allsolid = trace.allsolid;
*sv_globals.trace_startsolid = trace.startsolid;
*sv_globals.trace_fraction = trace.fraction;
*sv_globals.trace_inwater = trace.inwater;
*sv_globals.trace_inopen = trace.inopen;
VectorCopy (trace.endpos, *sv_globals.trace_endpos);
VectorCopy (trace.plane.normal, *sv_globals.trace_plane_normal);
*sv_globals.trace_plane_dist = trace.plane.dist;
if (trace.ent)
*sv_globals.trace_ent = EDICT_TO_PROG (pr, trace.ent);
else
*sv_globals.trace_ent = EDICT_TO_PROG (pr, sv.edicts);
}
/*
PF_checkpos
@ -496,14 +536,14 @@ PF_traceline (progs_t *pr)
FIXME: make work...
scalar checkpos (entity, vector)
*/
void
static void __attribute__ ((used))
PF_checkpos (progs_t *pr)
{
}
byte checkpvs[MAX_MAP_LEAFS / 8];
int
static int
PF_newcheckclient (progs_t *pr, int check)
{
byte *pvs;
@ -538,6 +578,7 @@ PF_newcheckclient (progs_t *pr, int check)
continue;
if ((int) SVfloat (ent, flags) & FL_NOTARGET)
continue;
// anything that is a client, or has a client as an enemy
break;
}
@ -566,9 +607,9 @@ int c_invis, c_notvis;
it is not returned at all.
name checkclient ()
// entity () clientlist
// entity () clientlist
*/
void
static void
PF_checkclient (progs_t *pr)
{
edict_t *ent, *self;
@ -610,7 +651,7 @@ PF_checkclient (progs_t *pr)
stuffcmd (clientent, value)
// void (entity client, string s) stuffcmd
*/
void
static void
PF_stuffcmd (progs_t *pr)
{
const char *str;
@ -636,7 +677,7 @@ PF_stuffcmd (progs_t *pr)
localcmd (string)
// void (string s) localcmd
*/
void
static void
PF_localcmd (progs_t *pr)
{
const char *str;
@ -653,20 +694,20 @@ PF_localcmd (progs_t *pr)
findradius (origin, radius)
// entity (vector org, float rad) findradius
*/
void
static void
PF_findradius (progs_t *pr)
{
edict_t *ent, *chain;
float rad;
float *eorigin, *emins, *emaxs, *org;
float rsqr;
vec_t *emins, *emaxs, *org;
int i, j;
vec3_t eorg;
chain = (edict_t *) sv.edicts;
org = P_VECTOR (pr, 0);
rad = P_FLOAT (pr, 1);
rad *= rad; // Square early, sqrt never
rsqr = P_FLOAT (pr, 1);
rsqr *= rsqr; // Square early, sqrt never
ent = NEXT_EDICT (pr, sv.edicts);
for (i = 1; i < sv.num_edicts; i++, ent = NEXT_EDICT (pr, ent)) {
@ -674,12 +715,11 @@ PF_findradius (progs_t *pr)
continue;
if (SVfloat (ent, solid) == SOLID_NOT)
continue;
eorigin = SVvector (ent, origin);
emins = SVvector (ent, mins);
emaxs = SVvector (ent, maxs);
emins = SVvector (ent, absmin);
emaxs = SVvector (ent, absmax);
for (j = 0; j < 3; j++)
eorg[j] = org[j] - eorigin[j] - 0.5 * (emins[j] + emaxs[j]);
if (DotProduct (eorg, eorg) > rad)
eorg[j] = org[j] - 0.5 * (emins[j] + emaxs[j]);
if (DotProduct (eorg, eorg) > rsqr)
continue;
SVentity (ent, chain) = EDICT_TO_PROG (pr, chain);
@ -690,7 +730,7 @@ PF_findradius (progs_t *pr)
}
// entity () spawn
void
static void
PF_Spawn (progs_t *pr)
{
edict_t *ed;
@ -700,7 +740,7 @@ PF_Spawn (progs_t *pr)
}
// void (entity e) remove
void
static void
PF_Remove (progs_t *pr)
{
edict_t *ed;
@ -716,9 +756,43 @@ PR_CheckEmptyString (progs_t *pr, const char *s)
PR_RunError (pr, "Bad string");
}
static void
do_precache (progs_t *pr, const char **cache, int max, const char *name,
const char *func)
{
int i;
char *s;
if (sv.state != ss_loading)
PR_RunError (pr, "%s: Precache can be done only in spawn functions",
func);
PR_CheckEmptyString (pr, name);
s = Hunk_TempAlloc (strlen (name) + 1);
for (i = 0; *name; i++, name++) {
int c = (byte) *name;
s[i] = tolower (c);
}
s[i] = 0;
for (i = 0; i < MAX_SOUNDS; i++) {
if (!cache[i]) {
char *c = Hunk_Alloc (strlen (s) + 1);
strcpy (c, s);
cache[i] = c; // blah, const
Sys_MaskPrintf (SYS_DEV, "%s: %3d %s\n", func, i, s);
return;
}
if (!strcmp (cache[i], s))
return;
}
PR_RunError (pr, "%s: overflow", func);
}
// string (string s) precache_file
// string (string s) precache_file2
void
static void
PF_precache_file (progs_t *pr)
{
// precache_file is used only to copy files with qcc, it does nothing
@ -727,57 +801,22 @@ PF_precache_file (progs_t *pr)
// void (string s) precache_sound
// string (string s) precache_sound2
void
static void
PF_precache_sound (progs_t *pr)
{
const char *s;
int i;
if (sv.state != ss_loading)
PR_RunError (pr, "PF_Precache_*: Precache can be done only in spawn "
"functions");
s = P_GSTRING (pr, 0);
do_precache (pr, sv.sound_precache, MAX_SOUNDS, P_GSTRING (pr, 0),
"precache_sound");
R_INT (pr) = P_INT (pr, 0);
PR_CheckEmptyString (pr, s);
for (i = 0; i < MAX_SOUNDS; i++) {
if (!sv.sound_precache[i]) {
sv.sound_precache[i] = s;
return;
}
if (!strcmp (sv.sound_precache[i], s))
return;
}
PR_RunError (pr, "PF_precache_sound: overflow");
}
// void (string s) precache_model
// string (string s) precache_model2
void
static void
PF_precache_model (progs_t *pr)
{
const char *s;
int i;
if (sv.state != ss_loading)
PR_RunError (pr, "PF_Precache_*: Precache can be done only in spawn "
"functions");
s = P_GSTRING (pr, 0);
do_precache (pr, sv.model_precache, MAX_MODELS, P_GSTRING (pr, 0),
"precache_model");
R_INT (pr) = P_INT (pr, 0);
PR_CheckEmptyString (pr, s);
for (i = 0; i < MAX_MODELS; i++) {
if (!sv.model_precache[i]) {
sv.model_precache[i] = s;
sv.models[i] = Mod_ForName (s, true);
return;
}
if (!strcmp (sv.model_precache[i], s))
return;
}
PR_RunError (pr, "PF_precache_model: overflow");
}
/*
@ -786,7 +825,7 @@ PF_precache_model (progs_t *pr)
float (float yaw, float dist) walkmove
// float (float yaw, float dist) walkmove
*/
void
static void
PF_walkmove (progs_t *pr)
{
edict_t *ent;
@ -824,7 +863,7 @@ PF_walkmove (progs_t *pr)
void () droptofloor
// float () droptofloor
*/
void
static void
PF_droptofloor (progs_t *pr)
{
edict_t *ent;
@ -856,11 +895,11 @@ PF_droptofloor (progs_t *pr)
void (float style, string value) lightstyle
// void (float style, string value) lightstyle
*/
void
static void
PF_lightstyle (progs_t *pr)
{
const char *val;
client_t *client;
client_t *cl;
int style, j;
style = P_FLOAT (pr, 0);
@ -873,16 +912,16 @@ PF_lightstyle (progs_t *pr)
if (sv.state != ss_active)
return;
for (j = 0, client = svs.clients; j < svs.maxclients; j++, client++)
if (client->active || client->spawned) {
MSG_WriteByte (&client->message, svc_lightstyle);
MSG_WriteByte (&client->message, style);
MSG_WriteString (&client->message, val);
for (j = 0, cl = svs.clients; j < svs.maxclients; j++, cl++)
if (cl->active || cl->spawned) {
MSG_WriteByte (&cl->message, svc_lightstyle);
MSG_WriteByte (&cl->message, style);
MSG_WriteString (&cl->message, val);
}
}
// float (entity e) checkbottom
void
static void
PF_checkbottom (progs_t *pr)
{
edict_t *ent;
@ -893,7 +932,7 @@ PF_checkbottom (progs_t *pr)
}
// float (vector v) pointcontents
void
static void
PF_pointcontents (progs_t *pr)
{
float *v;
@ -912,7 +951,7 @@ cvar_t *sv_aim;
vector aim (entity, missilespeed)
// vector (entity e, float speed) aim
*/
void
static void
PF_aim (progs_t *pr)
{
edict_t *ent, *check, *bestent;
@ -924,7 +963,7 @@ PF_aim (progs_t *pr)
ent = P_EDICT (pr, 0);
speed = P_FLOAT (pr, 1);
(void)speed; //FIXME
(void) speed; //FIXME
VectorCopy (SVvector (ent, origin), start);
start[2] += 20;
@ -1077,42 +1116,42 @@ PF_WriteBytes (progs_t *pr)
}
// void (float to, float f) WriteByte
void
static void
PF_WriteByte (progs_t *pr)
{
MSG_WriteByte (WriteDest (pr), P_FLOAT (pr, 1));
}
// void (float to, float f) WriteChar
void
static void
PF_WriteChar (progs_t *pr)
{
MSG_WriteByte (WriteDest (pr), P_FLOAT (pr, 1));
}
// void (float to, float f) WriteShort
void
static void
PF_WriteShort (progs_t *pr)
{
MSG_WriteShort (WriteDest (pr), P_FLOAT (pr, 1));
}
// void (float to, float f) WriteLong
void
static void
PF_WriteLong (progs_t *pr)
{
MSG_WriteLong (WriteDest (pr), P_FLOAT (pr, 1));
}
// void (float to, float f) WriteAngle
void
// void (float to, float f) WriteAngle
static void
PF_WriteAngle (progs_t *pr)
{
MSG_WriteAngle (WriteDest (pr), P_FLOAT (pr, 1));
}
// void (float to, float f) WriteCoord
void
static void
PF_WriteCoord (progs_t *pr)
{
MSG_WriteCoord (WriteDest (pr), P_FLOAT (pr, 1));
@ -1137,23 +1176,21 @@ PF_WriteCoordV (progs_t *pr)
}
// void (float to, string s) WriteString
void
static void
PF_WriteString (progs_t *pr)
{
MSG_WriteString (WriteDest (pr), P_GSTRING (pr, 1));
}
// void (float to, entity s) WriteEntity
void
static void
PF_WriteEntity (progs_t *pr)
{
MSG_WriteShort (WriteDest (pr), P_EDICTNUM (pr, 1));
}
// ============================================================================
// void (entity e) makestatic
void
static void
PF_makestatic (progs_t *pr)
{
const char *model;
@ -1211,7 +1248,7 @@ nosend:
}
// void (entity e) setspawnparms
void
static void
PF_setspawnparms (progs_t *pr)
{
client_t *client;
@ -1231,7 +1268,7 @@ PF_setspawnparms (progs_t *pr)
}
// void (string s) changelevel
void
static void
PF_changelevel (progs_t *pr)
{
const char *s;
@ -1245,6 +1282,14 @@ PF_changelevel (progs_t *pr)
Cbuf_AddText (host_cbuf, va ("changelevel %s\n", s));
}
// entity (entity ent) testentitypos
static void
PF_testentitypos (progs_t *pr)
{
edict_t *ent = P_EDICT (pr, 0);
ent = SV_TestEntityPosition (ent);
RETURN_EDICT (pr, ent ? ent : sv.edicts);
}
#define MAX_PF_HULLS 64 // FIXME make dynamic?
clip_hull_t *pf_hull_list[MAX_PF_HULLS];
@ -1416,12 +1461,6 @@ PF_rotate_bbox (progs_t *pr)
}
}
void
PF_Fixme (progs_t *pr)
{
PR_RunError (pr, "unimplemented bulitin function called");
}
// float () checkextension
static void
PF_checkextension (progs_t *pr)
@ -1436,29 +1475,38 @@ static builtin_t builtins[] = {
{"setorigin", PF_setorigin, 2},
{"setmodel", PF_setmodel, 3},
{"setsize", PF_setsize, 4},
{"fixme", PF_Fixme, 5},
{"sound", PF_sound, 8},
{"error", PF_error, 10},
{"objerror", PF_objerror, 11},
{"spawn", PF_Spawn, 14},
{"remove", PF_Remove, 15},
{"traceline", PF_traceline, 16},
{"checkclient", PF_checkclient, 17},
{"precache_sound", PF_precache_sound, 19},
{"precache_model", PF_precache_model, 20},
{"stuffcmd", PF_stuffcmd, 21},
{"findradius", PF_findradius, 22},
{"bprint", PF_bprint, 23},
{"sprint", PF_sprint, 24},
{"walkmove", PF_walkmove, 32},
{"droptofloor", PF_droptofloor, 34},
{"lightstyle", PF_lightstyle, 35},
{"checkbottom", PF_checkbottom, 40},
{"pointcontents", PF_pointcontents, 41},
{"aim", PF_aim, 44},
{"localcmd", PF_localcmd, 46},
{"particle", PF_particle, 48},
{"changeyaw", PF_changeyaw, 49},
{"writebyte", PF_WriteByte, 52},
{"WriteBytes", PF_WriteBytes, -1},
{"writechar", PF_WriteChar, 53},
@ -1470,26 +1518,30 @@ static builtin_t builtins[] = {
{"WriteAngleV", PF_WriteAngleV, -1},
{"writestring", PF_WriteString, 58},
{"writeentity", PF_WriteEntity, 59},
{"movetogoal", SV_MoveToGoal, 67},
{"precache_file", PF_precache_file, 68},
{"makestatic", PF_makestatic, 69},
{"changelevel", PF_changelevel, 70},
{"centerprint", PF_centerprint, 73},
{"ambientsound", PF_ambientsound, 74},
{"precache_model2", PF_precache_model, 75},
{"precache_sound2", PF_precache_sound, 76},
{"precache_file2", PF_precache_file, 77},
{"setspawnparms", PF_setspawnparms, 78},
{"testentitypos", PF_testentitypos, QF 92},
{"hullpointcontents", PF_hullpointcontents, QF 93},
{"getboxbounds", PF_getboxbounds, QF 94},
{"getboxhull", PF_getboxhull, QF 95},
{"freeboxhull", PF_freeboxhull, QF 96},
{"rotate_bbox", PF_rotate_bbox, QF 97},
{"tracebox", PF_tracebox, QF 98},
{"checkextension", PF_checkextension, QF 99},
{"EntityParseFunction", ED_EntityParseFunction, -1},
{0}
};
@ -1502,5 +1554,3 @@ SV_PR_Cmds_Init ()
PR_RegisterBuiltins (&sv_pr_state, builtins);
}
// void (entity e, vector min, vector max) setabssize
// void (float step) movetogoal

View file

@ -40,12 +40,12 @@ static __attribute__ ((used)) const char rcsid[] =
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
#ifdef HAVE_FCNTL_H
# include <fcntl.h>
#else
# include <sys/fcntl.h>
#endif
#include <stdlib.h>
#include "QF/cvar.h"
#include "QF/qargs.h"

View file

@ -44,7 +44,6 @@ static __attribute__ ((used)) const char rcsid[] =
#include "QF/cmd.h"
#include "QF/cvar.h"
#include "QF/msg.h"
#include "QF/progs.h"
#include "QF/ruamoko.h"
#include "QF/sys.h"
#include "QF/va.h"
@ -53,7 +52,6 @@ static __attribute__ ((used)) const char rcsid[] =
#include "crudefile.h"
#include "server.h"
#include "sv_gib.h"
#include "sv_pr_cmds.h"
#include "sv_progs.h"
#include "sv_recorder.h"
#include "world.h"
@ -77,7 +75,7 @@ PF_error (progs_t *pr)
edict_t *ed;
s = PF_VarString (pr, 0);
SV_Printf ("======SERVER ERROR in %s:\n%s\n",
Sys_Printf ("======SERVER ERROR in %s:\n%s\n",
PR_GetString (pr, pr->pr_xfunction->descriptor->s_name), s);
ed = PROG_TO_EDICT (pr, *sv_globals.self);
ED_Print (pr, ed);
@ -101,7 +99,7 @@ PF_objerror (progs_t *pr)
edict_t *ed;
s = PF_VarString (pr, 0);
SV_Printf ("======OBJECT ERROR in %s:\n%s\n",
Sys_Printf ("======OBJECT ERROR in %s:\n%s\n",
PR_GetString (pr, pr->pr_xfunction->descriptor->s_name), s);
ed = PROG_TO_EDICT (pr, *sv_globals.self);
ED_Print (pr, ed);
@ -114,8 +112,7 @@ PF_objerror (progs_t *pr)
PF_makevectors
Writes new values for v_forward, v_up, and v_right based on angles
makevectors (vector)
// void (entity e) makevectors
void (vector angles) makevectors
*/
static void
PF_makevectors (progs_t *pr)
@ -174,7 +171,7 @@ PF_setsize (progs_t *pr)
/*
PF_setmodel
setmodel(entity, model)
setmodel (entity, model)
// void (entity e, string m) setmodel
Also sets size, mins, and maxs for inline bmodels
*/
@ -249,7 +246,7 @@ PF_sprint (progs_t *pr)
level = P_FLOAT (pr, 1);
if (entnum < 1 || entnum > MAX_CLIENTS) {
SV_Printf ("tried to sprint to a non-client\n");
Sys_Printf ("tried to sprint to a non-client\n");
return;
}
@ -265,11 +262,11 @@ PF_sprint (progs_t *pr)
/*
PF_centerprint
// void (...) centerprint
single print to a specific client
centerprint (clientent, value)
// void (...) centerprint
*/
static void
PF_centerprint (progs_t *pr)
@ -281,7 +278,7 @@ PF_centerprint (progs_t *pr)
entnum = P_EDICTNUM (pr, 0);
if (entnum < 1 || entnum > MAX_CLIENTS) {
SV_Printf ("tried to sprint to a non-client\n");
Sys_Printf ("tried to sprint to a non-client\n");
return;
}
@ -327,7 +324,7 @@ PF_ambientsound (progs_t *pr)
break;
if (!*check) {
SV_Printf ("no precache: %s\n", samp);
Sys_Printf ("no precache: %s\n", samp);
return;
}
@ -342,7 +339,6 @@ PF_ambientsound (progs_t *pr)
/*
PF_sound
// void (entity e, float chan, string samp) sound
Each entity can have eight independant sound sources, like voice,
weapon, feet, etc.
@ -352,6 +348,7 @@ PF_ambientsound (progs_t *pr)
An attenuation of 0 will play full volume everywhere in the level.
Larger attenuations will drop off.
// void (entity e, float chan, string samp) sound
*/
static void
PF_sound (progs_t *pr)
@ -403,6 +400,7 @@ PF_traceline (progs_t *pr)
VectorCopy (trace.endpos, *sv_globals.trace_endpos);
VectorCopy (trace.plane.normal, *sv_globals.trace_plane_normal);
*sv_globals.trace_plane_dist = trace.plane.dist;
if (trace.ent)
*sv_globals.trace_ent = EDICT_TO_PROG (pr, trace.ent);
else
@ -411,7 +409,8 @@ PF_traceline (progs_t *pr)
/*
PF_tracebox
// void (vector start, vector mins, vector maxs, vector end, float type, entity passent) tracebox
// void (vector start, vector mins, vector maxs, vector end, float type,
// entity passent) tracebox
Wrapper around SV_Move, this makes PF_movetoground and PF_traceline
redundant.
@ -516,15 +515,17 @@ int c_invis, c_notvis;
/*
PF_checkclient
// entity () clientlist
Returns a client (or object that has a client enemy) that would be a
valid target.
If there are more than one valid options, they are cycled each frame
If (self.origin + self.viewofs) is not in the PVS of the current target, it
is not returned at all.
If (self.origin + self.viewofs) is not in the PVS of the current target,
it is not returned at all.
name checkclient ()
// entity () clientlist
*/
static void
PF_checkclient (progs_t *pr)
@ -620,11 +621,11 @@ PF_stuffcmd (progs_t *pr)
/*
PF_localcmd
// void (string s) localcmd
Inserts text into the server console's execution buffer
localcmd (string)
// void (string s) localcmd
*/
static void
PF_localcmd (progs_t *pr)
@ -648,15 +649,15 @@ PF_findradius (progs_t *pr)
{
edict_t *ent, *chain;
float rsqr;
//float *eorigin;
float *emins, *emaxs, *org;
vec_t *emins, *emaxs, *org;
int i, j;
vec3_t eorg;
chain = (edict_t *) sv.edicts;
org = P_VECTOR (pr, 0);
rsqr = P_FLOAT (pr, 1) * P_FLOAT (pr, 1); // Square early, sqrt never
rsqr = P_FLOAT (pr, 1);
rsqr *= rsqr; // Square early, sqrt never
ent = NEXT_EDICT (pr, sv.edicts);
for (i = 1; i < sv.num_edicts; i++, ent = NEXT_EDICT (pr, ent)) {
@ -665,14 +666,10 @@ PF_findradius (progs_t *pr)
if (SVfloat (ent, solid) == SOLID_NOT
&& !((int) SVfloat (ent, flags) & FL_FINDABLE_NONSOLID))
continue;
//eorigin = SVvector (ent, origin);
//emins = SVvector (ent, mins);
//emaxs = SVvector (ent, maxs);
emins = SVvector (ent, absmin);
emaxs = SVvector (ent, absmax);
for (j = 0; j < 3; j++)
eorg[j] = org[j] - 0.5 * (emins[j] + emaxs[j]);
//eorg[j] = org[j] - eorigin[j] - 0.5 * (emins[j] + emaxs[j]);
if (DotProduct (eorg, eorg) > rsqr)
continue;
@ -705,14 +702,14 @@ PF_Remove (progs_t *pr)
if (NUM_FOR_EDICT (pr, ed) < *pr->reserved_edicts) {
if (pr_double_remove->int_val == 1) {
PR_DumpState (pr);
SV_Printf ("Reserved entity remove\n");
Sys_Printf ("Reserved entity remove\n");
} else // == 2
PR_RunError (pr, "Reserved entity remove\n");
}
if (ed->free && pr_double_remove->int_val) {
if (pr_double_remove->int_val == 1) {
PR_DumpState (pr);
SV_Printf ("Double entity remove\n");
Sys_Printf ("Double entity remove\n");
} else // == 2
PR_RunError (pr, "Double entity remove\n");
}
@ -734,7 +731,7 @@ do_precache (progs_t *pr, const char **cache, int max, const char *name,
char *s;
if (sv.state != ss_loading)
PR_RunError (pr, "%s: Precache can be done in only spawn functions",
PR_RunError (pr, "%s: Precache can be done only in spawn functions",
func);
PR_CheckEmptyString (pr, name);
@ -764,8 +761,8 @@ do_precache (progs_t *pr, const char **cache, int max, const char *name,
// string (string s) precache_file2
static void
PF_precache_file (progs_t *pr)
{ // precache_file is used only to copy
// files with qcc, it does nothing
{
// precache_file is used only to copy files with qcc, it does nothing
R_INT (pr) = P_INT (pr, 0);
}
@ -784,10 +781,9 @@ PF_precache_sound (progs_t *pr)
static void
PF_precache_model (progs_t *pr)
{
R_INT (pr) = P_INT (pr, 0);
do_precache (pr, sv.model_precache, MAX_MODELS, P_GSTRING (pr, 0),
"precache_model");
R_INT (pr) = P_INT (pr, 0);
}
/*
@ -925,10 +921,10 @@ cvar_t *sv_aim;
/*
PF_aim
// vector (entity e, float speed) aim
Pick a vector for the player to shoot along
vector aim (entity, missilespeed)
// vector (entity e, float speed) aim
*/
static void
PF_aim (progs_t *pr)
@ -1021,9 +1017,9 @@ PF_aim (progs_t *pr)
/*
PF_changeyaw
// void () ChangeYaw
This was a major timewaster in progs, so it was converted to C
// void () ChangeYaw
*/
void
PF_changeyaw (progs_t *pr)
@ -1971,6 +1967,7 @@ static builtin_t builtins[] = {
{"aim", PF_aim, 44},
{"localcmd", PF_localcmd, 46},
{"changeyaw", PF_changeyaw, 49},
{"writebyte", PF_WriteByte, 52},
@ -2000,13 +1997,13 @@ static builtin_t builtins[] = {
{"logfrag", PF_logfrag, 79},
{"infokey", PF_infokey, 80},
{"multicast", PF_multicast, 82},
{"testentitypos", PF_testentitypos, QF 92},
{"hullpointcontents", PF_hullpointcontents, QF 93},
{"getboxbounds", PF_getboxbounds, QF 94},
{"getboxhull", PF_getboxhull, QF 95},
{"freeboxhull", PF_freeboxhull, QF 96},
{"rotate_bbox", PF_rotate_bbox, QF 97},
{"tracebox", PF_tracebox, QF 98},
{"checkextension", PF_checkextension, QF 99},
{"setinfokey", PF_setinfokey, QF 102},
@ -2025,6 +2022,7 @@ static builtin_t builtins[] = {
{"SV_Spawn", PR_SV_Spawn, -1},
{"EntityParseFunction", ED_EntityParseFunction, -1},
{0}
};
@ -2042,5 +2040,4 @@ SV_PR_Cmds_Init ()
bi->proc = PF_sv_cvar;
PR_RegisterBuiltins (&sv_pr_state, builtins);
};
// void (float step) movetogoal
}