29 static double recursive = -1;
70 int restorevm_tempstringsbuf_cursize;
119 framegroupblend[0].
lerp = 1 - framegroupblend[1].
lerp - framegroupblend[2].
lerp - framegroupblend[3].
lerp;
127 int sub2, numframes,
f,
i, k;
128 int isfirstframegroup =
true;
130 double sublerp, lerp, d;
147 numframes =
model->numframes;
151 if ((
unsigned int)
f >= (
unsigned int)numframes)
154 Con_DPrintf(
"VM_FrameBlendFromFrameGroupBlend: no such frame %d in model %s\n",
f,
model->name);
162 if (isfirstframegroup)
165 isfirstframegroup =
false;
170 if (
model->animscenes)
172 scene =
model->animscenes +
f;
177 sublerp = scene->
framerate * (curtime -
g->start);
181 if (sublerp < (1.0 / 65536.0f))
183 if (sublerp > (65535.0f / 65536.0f))
200 if (blend[
i].lerp <= 0 || blend[
i].subframe == sub2)
208 d = (1 - sublerp) * lerp;
215 if (blend[
i].lerp <= 0 || blend[
i].subframe ==
f)
228 if (ed->
priv.
server->skeleton.model != edmodel)
235 if(ed->
priv.
server->skeleton.relativetransforms)
248 if (!ed->
priv.
server->skeleton.relativetransforms)
254 if(ed->
priv.
server->skeleton.relativetransforms)
263 if (ed->
priv.
server->skeleton.relativetransforms)
278 #define memccpy _memccpy
285 char *outend = out + outsize - 1;
295 p = (
char *)memccpy(out, s,
'\0', (outend + 1) - out);
300 VM_Warning(prog,
"%lu of %lu bytes available, will truncate %lu byte string \"%s\"\n", (
unsigned long)(outend - out), (
unsigned long)outsize - 1, (
unsigned long)
strlen(s), s);
309 return outsize - ((outend + 1) - out);
329 if(!strcasecmp(*e,
name))
333 if (!strncasecmp(
"DP_PHYSICS_ODE",
name, 14))
335#ifndef LINK_TO_LIBODE
336 return ode_dll ?
true :
false;
348 if (!strcasecmp(
"DP_CRYPTO",
name))
350 if (!strcasecmp(
"DP_QC_DIGEST_SHA256",
name))
354 if (!strcasecmp(
"DP_QC_URI_GET",
name) || !strcasecmp(
"DP_QC_URI_POST",
name))
448 VM_Warning(prog,
"VM_bprint: server is not active!\n");
477 VM_Warning(prog,
"VM_sprint: invalid client or server is not active!\n");
566 if (value1[1] == 0 && value1[0] == 0)
570 yaw = (
int) (atan2(value1[1], value1[0]) * 180 /
M_PI);
640 VM_Warning(prog,
"VM_localsound: Failed to play %s !\n", s);
647 VM_Warning(prog,
"VM_localsound: Failed to play %s !\n", s);
808 const char *cvar_desc;
840 VM_Warning(prog,
"VM_cvar_set: variable %s is read-only\n",
cvar->name);
1032 tmresult = localtime_s(&tm, &t);
1034 tmresult = gmtime_s(&tm, &t);
1048 result_len = strftime(result,
sizeof(result), fmt, &tm);
1050 result_len = strftime(result,
sizeof(result), fmt, tm);
1091 VM_Warning(prog,
"VM_remove: tried to remove the null entity or a reserved entity!\n" );
1096 VM_Warning(prog,
"VM_remove: tried to remove an already freed entity!\n" );
1208 prog->
error_cmd(
"VM_findchain: %s doesnt have the specified chain field !", prog->
name);
1263 prog->
error_cmd(
"VM_findchainfloat: %s doesnt have the specified chain field !", prog->
name);
1349 prog->
error_cmd(
"VM_findchainflags: %s doesnt have the specified chain field !", prog->
name);
1393 VM_Warning(prog,
"VM_precache_sound: Failed to load %s !\n", s);
1484 prog->
trace =
false;
1599 VM_Warning(prog,
"VM_changelevel: server is not active!\n");
1781 if (prog->
argc >= 3)
1785 for (
i = 1;
i < prog->
argc;
i++)
1807 if (prog->
argc >= 3)
1811 for (
i = 1;
i < prog->
argc;
i++)
1883 Con_Printf(
"VM_GetFileHandle: no such file handle %i (or file has been closed) in %s\n",
index, prog->
name);
1902 const char *modestring, *filename;
1936 VM_Warning(prog,
"VM_fopen: no such mode %i (valid: 0 = read, 1 = append, 2 = write)\n",
mode);
1944 VM_Warning(prog,
"VM_fopen: %s mode %s failed\n", filename, modestring);
1950 Con_DPrintf(
"VM_fopen: %s: %s mode %s opened as #%i\n", prog->
name, filename, modestring, filenum);
1972 VM_Warning(prog,
"VM_fclose: invalid file handle %i\n", filenum);
1977 VM_Warning(prog,
"VM_fclose: no such file handle %i (or file has been closed)\n", filenum);
2010 VM_Warning(prog,
"VM_fgets: invalid file handle %i\n", filenum);
2015 VM_Warning(prog,
"VM_fgets: no such file handle %i (or file has been closed)\n", filenum);
2022 if (c ==
'\r' || c ==
'\n' || c < 0)
2051 size_t stringlength;
2060 VM_Warning(prog,
"VM_fputs: invalid file handle %i\n", filenum);
2065 VM_Warning(prog,
"VM_fputs: no such file handle %i (or file has been closed)\n", filenum);
2068 stringlength =
VM_VarString(prog, 1,
string,
sizeof(
string));
2092 VM_Warning(prog,
"VM_writetofile: invalid or closed file handle\n");
2136 VM_Warning(prog,
"VM_entityfieldname: field index out of bounds!\n");
2160 VM_Warning(prog,
"VM_entityfieldtype: field index out of bounds!\n");
2189 VM_Warning(prog,
"VM_entityfielddata: field index out of bounds!\n");
2237 VM_Warning(prog,
"VM_entityfielddata: field index out of bounds!\n");
2285 size_t szNewString_len;
2286 const char *szString;
2307 const char *szString;
2332 size_t szNewString_len;
2333 const char *szString;
2339 szNewString_len =
COM_ToLowerString(szString, szNewString,
sizeof(szNewString) );
2355 size_t szNewString_len;
2356 const char *szString;
2362 szNewString_len =
COM_ToUpperString(szString, szNewString,
sizeof(szNewString) );
2400 int u_slength = 0, u_start;
2435 start =
bound(0, start, u_slength);
2442 length += u_slength - start + 1;
2453 if (u_length >=
sizeof(
string)-1)
2454 u_length =
sizeof(
string)-1;
2456 memcpy(
string, s + u_start, u_length);
2457 string[u_length] =
'\0';
2472 const char *search, *replace, *subject;
2474 int search_len, replace_len, subject_len;
2487 for (
i = 0;
i <= subject_len - search_len;
i++)
2489 for (j = 0; j < search_len; j++)
2490 if (subject[
i+j] != search[j])
2492 if (j == search_len)
2496 for (j = 0; j < replace_len && si < (
int)
sizeof(
string) - 1; j++)
2497 string[si++] = replace[j];
2500 i += search_len - 1;
2507 if (si < (
int)
sizeof(
string) - 1)
2508 string[si++] = subject[
i];
2515 if (si < (
int)
sizeof(
string) - 1)
2516 string[si++] = subject[
i];
2520 for (;
i < subject_len;
i++)
2521 if (si < (
int)
sizeof(
string) - 1)
2522 string[si++] = subject[
i];
2539 const char *search, *replace, *subject;
2541 int search_len, replace_len, subject_len;
2554 for (
i = 0;
i <= subject_len - search_len;
i++)
2556 for (j = 0; j < search_len; j++)
2557 if (tolower(subject[
i+j]) != tolower(search[j]))
2559 if (j == search_len)
2563 for (j = 0; j < replace_len && si < (
int)
sizeof(
string) - 1; j++)
2564 string[si++] = replace[j];
2567 i += search_len - 1;
2574 if (si < (
int)
sizeof(
string) - 1)
2575 string[si++] = subject[
i];
2582 if (si < (
int)
sizeof(
string) - 1)
2583 string[si++] = subject[
i];
2587 for (;
i < subject_len;
i++)
2588 if (si < (
int)
sizeof(
string) - 1)
2589 string[si++] = subject[
i];
2629 alloclen =
VM_VarString(prog, 0,
string,
sizeof(
string)) + 1;
2631 memcpy(out,
string, alloclen);
2742 int separatorlen[7];
2743 const char *separators[7];
2754 for (j = 1;j < prog->
argc;j++)
2760 separators[numseparators] = s;
2761 separatorlen[numseparators] = (
int)
strlen(s);
2770 token = tokentext + j;
2775 for (k = 0;k < numseparators;k++)
2777 if (!strncmp(p, separators[k], separatorlen[k]))
2779 p += separatorlen[k];
2783 if (k < numseparators)
2785 if (j < (
int)
sizeof(tokentext)-1)
2786 tokentext[j++] = *p;
2791 if (j >= (
int)
sizeof(tokentext))
2793 tokentext[j] =
'\0';
2815 if (token_num >= 0 && token_num <
num_tokens)
2833 if (token_num >= 0 && token_num <
num_tokens)
2851 if (token_num >= 0 && token_num <
num_tokens)
2933#elif defined(MACOSX)
2979 VM_Warning(prog,
"VM_gettime: unsupported timer specified, returning realtime\n");
3005 VM_Warning(prog,
"VM_getsoundtime: not supported on this progs\n");
3012 VM_Warning(prog,
"VM_getsoundtime: bad channel %i\n", entchannel);
3070 prog->
error_cmd(
"VM_parseentitydata: %s: Couldn't parse entity data:\n%s", prog->
name,
data );
3084 const char *filename;
3093 VM_Warning(prog,
"VM_loadfromfile: dangerous or non-portable filename \"%s\" not allowed. (contains : or \\ or begins with .. or /)\n", filename);
3130 VM_Warning(prog,
"Attempted modulo of %f by zero\n", val);
3164 const char *packfile =
NULL, *pattern;
3165 int caseinsens, quiet;
3216 VM_Warning(prog,
"VM_search_end: invalid handle %i\n", handle);
3221 VM_Warning(prog,
"VM_search_end: no such handle %i\n", handle);
3247 VM_Warning(prog,
"VM_search_getsize: invalid handle %i\n", handle);
3252 VM_Warning(prog,
"VM_search_getsize: no such handle %i\n", handle);
3268 int handle, filenum;
3277 VM_Warning(prog,
"VM_search_getfilename: invalid handle %i\n", handle);
3282 VM_Warning(prog,
"VM_search_getfilename: no such handle %i\n", handle);
3285 if(filenum < 0 || filenum >= prog->
opensearches[handle]->numfilenames)
3287 VM_Warning(prog,
"VM_search_getfilename: invalid filenum %i\n", filenum);
3350#define FKFC_NUMKEYS 5
3623 const char *altstr, *pos;
3631 for(
count = 0, pos = altstr ; *pos ; pos++ ) {
3632 if( *pos ==
'\\' ) {
3636 }
else if( *pos ==
'\'' ) {
3653 const char *instr, *in;
3661 for (in = instr, outpos = 0; *in && outpos <
sizeof(outstr) - 1; ++in)
3663 if (*in ==
'\'' && outpos <
sizeof(outstr) - 2)
3665 outstr[outpos++] =
'\\';
3666 outstr[outpos++] =
'\'';
3669 outstr[outpos++] = *in;
3672 outstr[outpos] =
'\0';
3685 const char *altstr, *pos;
3697 for( pos = altstr ; *pos &&
count ; pos++ )
3698 if( *pos ==
'\\' ) {
3701 }
else if( *pos ==
'\'' )
3709 for( out = outstr,
size =
sizeof(outstr) - 1 ;
size && *pos ;
size--, pos++, out++ )
3710 if( *pos ==
'\\' ) {
3715 }
else if( *pos ==
'\'' )
3734 const char *altstr, *str;
3748 for( num = num * 2 + 1, in = altstr; *in && num; *out++ = *in++ )
3753 }
else if( *in ==
'\'' ) {
3758 for( ; *str; *out++ = *str++ );
3761 if( *in ==
'\'' || (*in ==
'\\' && !*++in) )
3764 out +=
dp_strlcpy(out, in, outstr +
sizeof(outstr) - out);
3790 for( num = num * 2 + 2 ; *in && num > 0 ; *out++ = *in++ )
3795 }
else if( *in ==
'\'' ) {
3800 for( ; *set ; *out++ = *set++ );
3803 out +=
dp_strlcpy(out, in, outstr +
sizeof(outstr) - out);
3819 char **oldstrings = stringbuffer->
strings;
3850 a = *((
const char **) in1);
3851 b = *((
const char **) in2);
3852 if(!
a || !
a[0])
return 1;
3853 if(!
b || !
b[0])
return -1;
3860 a = *((
const char **) in1);
3861 b = *((
const char **) in2);
3862 if(!
a || !
a[0])
return 1;
3863 if(!
b || !
b[0])
return -1;
3882 return stringbuffer;
3899 return stringbuffer;
3906 if (!stringbuffer || strindex < 0)
3911 if (stringbuffer->
strings[strindex])
3918 alloclen =
strlen(str) + 1;
3920 memcpy(stringbuffer->
strings[strindex], str, alloclen);
3949 for (
i = 0;
i < numbuffers;
i++)
3981 if (prog->
argc >= 2)
4046 if(!srcstringbuffer)
4054 VM_Warning(prog,
"VM_buf_copy: source == destination (%i)\n",
i);
4058 if(!dststringbuffer)
4069 *dststringbuffer = *srcstringbuffer;
4080 memcpy(dststringbuffer->
strings[
i], srcstringbuffer->
strings[
i], stringlen);
4156 if (l >=
sizeof(k) - 1)
4191 if (strindex < stringbuffer->num_strings && stringbuffer->
strings[strindex])
4217 if(strindex < 0 || strindex >= 1000000)
4219 VM_Warning(prog,
"VM_bufstr_set: invalid string index %i\n", strindex);
4224 BufStr_Set(prog, stringbuffer, strindex, news);
4237 int order, strindex;
4261 for (strindex = 0;strindex < stringbuffer->
num_strings;strindex++)
4268 alloclen =
strlen(
string) + 1;
4270 memcpy(stringbuffer->
strings[strindex],
string, alloclen);
4297 VM_Warning(prog,
"VM_bufstr_free: invalid string index %i\n",
i);
4323 int strindex, c, end;
4324 const char *filename;
4338 VM_Warning(prog,
"VM_buf_loadfile: failed to open file %s\n", filename);
4361 if (c ==
'\r' || c ==
'\n' || c < 0)
4379 alloclen =
strlen(
string) + 1;
4381 memcpy(stringbuffer->
strings[strindex],
string, alloclen);
4403 int filenum, strindex, strnum, strlength;
4412 VM_Warning(prog,
"VM_buf_writefile: invalid file handle %i\n", filenum);
4417 VM_Warning(prog,
"VM_buf_writefile: no such file handle %i (or file has been closed)\n", filenum);
4436 else if (prog->
argc > 2)
4446 if (strindex < 0 || strindex >= stringbuffer->
num_strings)
4448 VM_Warning(prog,
"VM_buf_writefile: wrong start string index %i\n", strindex);
4454 VM_Warning(prog,
"VM_buf_writefile: wrong strings count %i\n", strnum);
4460 while(strindex < stringbuffer->num_strings && strnum)
4462 if (stringbuffer->
strings[strindex])
4464 if ((strlength = (
int)
strlen(stringbuffer->
strings[strindex])))
4476#define MATCH_WHOLE 1
4478#define MATCH_RIGHT 3
4479#define MATCH_MIDDLE 4
4480#define MATCH_PATTERN 5
4488 ppos = strchr(pattern,
'*');
4489 qpos = strchr(pattern,
'?');
4500 if ((ppos - pattern) == 0)
4502 ppos = strchr(pattern+1,
'*');
4510 if ((ppos - pattern) == patternlength)
4521 if ((ppos - pattern) == patternlength)
4537static qbool match_rule(
const char *
string,
int max_string,
const char *pattern,
int patternlength,
int rule)
4542 return !strncmp(
string, pattern, max_string) ?
true :
false;
4544 return !strncmp(
string, pattern, patternlength) ?
true :
false;
4547 mid = strstr(
string, pattern);
4548 return mid && !*(mid+patternlength);
4551 return strstr(
string, pattern) ?
true :
false;
4568 int matchrule, matchlen,
i, step;
4585 if (matchrule < 0 || matchrule > 5)
4587 VM_Warning(prog,
"VM_bufstr_find: invalid match rule %i\n", matchrule);
4621 const char *s, *match;
4631 if (matchrule < 0 || matchrule > 5)
4633 VM_Warning(prog,
"VM_matchpattern: invalid match rule %i\n", matchrule);
4662 const char *partial, *antipartial;
4663 size_t len, antilen;
4665 qbool ispattern, antiispattern;
4690 antilen =
strlen(antipartial);
4699 ispattern = partial && (strchr(partial,
'*') || strchr(partial,
'?'));
4700 antiispattern = antipartial && (strchr(antipartial,
'*') || strchr(antipartial,
'?'));
4729 memcpy(stringbuffer->
strings[
n],
cvar->name, alloclen);
4750 float ideal, current, move, speed;
4759 VM_Warning(prog,
"changeyaw: can not modify world entity\n");
4764 VM_Warning(prog,
"changeyaw: can not modify free entity\n");
4772 if (current == ideal)
4774 move = ideal - current;
4775 if (ideal > current)
4808 float ideal, current, move, speed;
4815 VM_Warning(prog,
"changepitch: can not modify world entity\n");
4820 VM_Warning(prog,
"changepitch: can not modify free entity\n");
4828 if (current == ideal)
4830 move = ideal - current;
4831 if (ideal > current)
4860 size_t szNewString_len;
4861 const char *szString;
4874 const char *instr, *match;
4882 if (firstofs && (firstofs < 0 || firstofs > (
int)
strlen(instr)))
4888 match = strstr(instr+firstofs, match);
4910 ch = (
unsigned char)s[
index];
4934 for(
i = 0;
i < prog->
argc && len <
sizeof(t)-1; ++
i)
4983static int chrchar_alpha(
int i,
int basec,
int baset,
int convc,
int convt,
int charnum)
5002 baset = 128*((charnum&1) == (convt-5));
5018 return i + basec + baset;
5024 int ccase, redalpha, rednum;
5028 unsigned char *result = resbuf;
5035 resbuf_len =
VM_VarString(prog, 3, (
char *) resbuf,
sizeof(resbuf));
5037 for (
i = 0;
i < resbuf_len;
i++, result++)
5039 if (*result >=
'0' && *result <=
'9')
5041 else if (*result >=
'0'+128 && *result <=
'9'+128)
5043 else if (*result >=
'0'+128-30 && *result <=
'9'+128-30)
5045 else if (*result >=
'0'-30 && *result <=
'9'-30)
5048 else if (*result >=
'a' && *result <=
'z')
5050 else if (*result >=
'A' && *result <=
'Z')
5052 else if (*result >=
'a'+128 && *result <=
'z'+128)
5054 else if (*result >=
'A'+128 && *result <=
'Z'+128)
5057 else if ((*result & 127) < 16 || !redalpha)
5059 else if (*result < 128)
5083 destbuf_len =
dpsnprintf(destbuf,
sizeof(destbuf),
"%*s", -pad,
src);
5092 const char *info, *key;
5129 const char *s1, *s2;
5147 const char *s1, *s2;
5194 if(!strcmp(digest,
"MD4"))
5197 mdfour((
unsigned char *) out, (
unsigned char *) s, len);
5202 sha256((
unsigned char *) out, (
unsigned char *) s, len);
5209 static const char *hexmap =
"0123456789abcdef";
5210 for(
i = 0;
i < outlen; ++
i)
5212 outhex[2*
i] = hexmap[(out[
i] >> 4) & 15];
5213 outhex[2*
i+1] = hexmap[(out[
i] >> 0) & 15];
5289 static const char *hex =
"0123456789ABCDEF";
5294 for(p =
src, q = dest; *p && q < dest +
sizeof(dest) - 3; ++p)
5296 if((*p >=
'A' && *p <=
'Z')
5297 || (*p >=
'a' && *p <=
'z')
5298 || (*p >=
'0' && *p <=
'9')
5299 || (*p ==
'-') || (*p ==
'_') || (*p ==
'.')
5300 || (*p ==
'!') || (*p ==
'~')
5301 || (*p ==
'\'') || (*p ==
'(') || (*p ==
')'))
5306 *q++ = hex[(*(
unsigned char *)p >> 4) & 0xF];
5307 *q++ = hex[ *(
unsigned char *)p & 0xF];
5327 for(p =
src, q = dest; *p; )
5331 if(p[1] >=
'0' && p[1] <=
'9')
5333 else if(p[1] >=
'a' && p[1] <=
'f')
5334 hi = p[1] -
'a' + 10;
5335 else if(p[1] >=
'A' && p[1] <=
'F')
5336 hi = p[1] -
'A' + 10;
5339 if(p[2] >=
'0' && p[2] <=
'9')
5341 else if(p[2] >=
'a' && p[2] <=
'f')
5342 lo = p[2] -
'a' + 10;
5343 else if(p[2] >=
'A' && p[2] <=
'F')
5344 lo = p[2] -
'A' + 10;
5347 if(hi != 0 || lo != 0)
5348 *q++ = (char) (hi * 0x10 + lo);
5366 const char *fn, *pack;
5394 prog = handle->
prog;
5408 if(length_received >=
sizeof(handle->
buffer))
5409 length_received =
sizeof(handle->
buffer) - 1;
5410 handle->
buffer[length_received] =
'\0';
5433 const char *posttype =
NULL;
5434 const char *postseparator =
NULL;
5435 int poststringbuffer = -1;
5437 const char *query_string =
NULL;
5441 prog->
error_cmd(
"uri_get called by %s without URI_Get_Callback defined", prog->
name);
5457 query_string = strchr(url,
'?');
5460 lq = query_string ?
strlen(query_string) : 0;
5462 handle->
prog = prog;
5465 if(postseparator && posttype && *posttype)
5467 size_t l =
strlen(postseparator);
5468 if(poststringbuffer >= 0)
5495 memcpy(handle->
postdata + ltotal, postseparator, l);
5505 prog->
error_cmd(
"%s: string buffer content size mismatch, possible overrun", prog->
name);
5511 memcpy(handle->
postdata, postseparator, l);
5546 if(postkeyid >= 0 && query_string)
5594 size_t normalized_len;
5653 VM_Warning(prog,
"nudgeoutofsolid: can not modify world entity\n");
5659 VM_Warning(prog,
"nudgeoutofsolid: can not modify free entity\n");
5673 Sys_Error(
"PHYS_NudgeOutOfSolid: cannot be called from %s VM\n", prog->
name);
5719 prog->
error_cmd(
"VM_callfunction: function %s not found !", s);
5725 if (builtinnumber < prog->numbuiltins && prog->
builtins[builtinnumber])
5726 prog->
builtins[builtinnumber](prog);
5728 prog->
error_cmd(
"No such builtin #%i in %s; most likely cause: outdated engine build. Try updating!", builtinnumber, prog->
name);
5776 char *o = outbuf, *end = outbuf +
sizeof(outbuf), *err;
5787#define PRINTF_ALTERNATE 1
5788#define PRINTF_ZEROPAD 2
5789#define PRINTF_LEFT 4
5790#define PRINTF_SPACEPOSITIVE 8
5791#define PRINTF_SIGNPOSITIVE 16
5797#define GETARG_FLOAT(a) (((a)>=1 && (a)<prog->argc) ? (PRVM_G_FLOAT(OFS_PARM0 + 3 * (a))) : 0)
5798#define GETARG_VECTOR(a) (((a)>=1 && (a)<prog->argc) ? (PRVM_G_VECTOR(OFS_PARM0 + 3 * (a))) : dummyvec)
5799#define GETARG_INT(a) (((a)>=1 && (a)<prog->argc) ? (PRVM_G_INT(OFS_PARM0 + 3 * (a))) : 0)
5800#define GETARG_INTVECTOR(a) (((a)>=1 && (a)<prog->argc) ? ((prvm_int_t*) PRVM_G_VECTOR(OFS_PARM0 + 3 * (a))) : dummyivec)
5801#define GETARG_STRING(a) (((a)>=1 && (a)<prog->argc) ? (PRVM_G_STRING(OFS_PARM0 + 3 * (a))) : "")
5826 if(*s >=
'0' && *s <=
'9')
5828 width = strtol(s, &err, 10);
5831 VM_Warning(prog,
"VM_sprintf: invalid directive: %s\n", s0);
5872 if(*s >=
'0' && *s <=
'9')
5874 width = strtol(s, &err, 10);
5875 if(!err || *err !=
'$')
5877 VM_Warning(prog,
"VM_sprintf: invalid directive: %s\n", s0);
5891 else if(*s >=
'0' && *s <=
'9')
5893 width = strtol(s, &err, 10);
5896 VM_Warning(prog,
"VM_sprintf: invalid directive: %s\n", s0);
5915 if(*s >=
'0' && *s <=
'9')
5917 precision = strtol(s, &err, 10);
5918 if(!err || *err !=
'$')
5920 VM_Warning(prog,
"VM_sprintf: invalid directive: %s\n", s0);
5926 precision = argpos++;
5929 else if(*s >=
'0' && *s <=
'9')
5931 precision = strtol(s, &err, 10);
5934 VM_Warning(prog,
"VM_sprintf: invalid directive: %s\n", s0);
5941 VM_Warning(prog,
"VM_sprintf: invalid directive: %s\n", s0);
5950 case 'h': isfloat = 1;
break;
5951 case 'l': isfloat = 0;
break;
5952 case 'L': isfloat = 0;
break;
5978 if(*s !=
's' && *s !=
'c')
5990 if(*s ==
'd' || *s ==
'i' || *s ==
'o' || *s ==
'u' || *s ==
'x' || *s ==
'X')
6010 case 'o':
case 'u':
case 'x':
case 'X':
6016 case 'e':
case 'E':
case 'f':
case 'F':
case 'g':
case 'G':
6025 o +=
dpsnprintf(o, end - o,
va(vabuf,
sizeof(vabuf),
"%s %s %s", formatbuf, formatbuf, formatbuf),
6031 o +=
dpsnprintf(o, end - o,
va(vabuf,
sizeof(vabuf),
"%s %s %s", formatbuf, formatbuf, formatbuf),
6053 precision = end - o - 1;
6069 precision = end - o - 1;
6077 VM_Warning(prog,
"VM_sprintf: invalid directive: %s\n", s0);
6150 if(!(
model->surfmesh.isanimated &&
model->AnimateVertices))
6239 float *
v[3], facenormal[3], edgenormal[3], sidenormal[3], temp[3], offsetdist, dist, bestdist;
6242 bestdist = 1000000000;
6254 VectorMA(p, offsetdist, facenormal, temp);
6255 for (j = 0, k = 2;j < 3;k = j, j++)
6262 VectorMA(temp, offsetdist, sidenormal, temp);
6265 if (bestdist > dist)
6275 if (surfacenum < 0 || surfacenum >=
model->submodelsurfaces_end -
model->submodelsurfaces_start)
6277 return model->data_surfaces + surfacenum +
model->submodelsurfaces_start;
6347 switch( attributetype ) {
6370 float *texcoord = &(
model->surfmesh.data_texcoordtexture2f + 2 * surface->
num_firstvertex)[pointnum * 2];
6371 result[0] = texcoord[0];
6372 result[1] = texcoord[1];
6379 float *texcoord = &(
model->surfmesh.data_texcoordlightmap2f + 2 * surface->
num_firstvertex)[pointnum * 2];
6380 result[0] = texcoord[0];
6381 result[1] = texcoord[1];
6430 int surfacenum, best;
6432 vec_t dist, bestdist;
6442 if (!ed || ed->
free)
6452 bestdist = 1000000000;
6453 for (surfacenum =
model->submodelsurfaces_start;surfacenum < model->submodelsurfaces_end;surfacenum++)
6455 surface =
model->data_surfaces + surfacenum;
6457 clipped[0] =
bound(surface->
mins[0], p[0], surface->
maxs[0]) - p[0];
6458 clipped[1] =
bound(surface->
mins[1], p[1], surface->
maxs[1]) - p[1];
6459 clipped[2] =
bound(surface->
mins[2], p[2], surface->
maxs[2]) - p[2];
6461 if (dist < bestdist)
6467 if (dist < bestdist)
6470 best = surfacenum -
model->submodelsurfaces_start;
6514 const vec3_t d = {-1, -1, -1};
6536#define VM_physics_ApplyCmd(ed,f) if (!ed->priv.server->ode_body) VM_physics_newstackfunction(prog, ed, f); else World_Physics_ApplyCmd(ed, f)
6540 edict_odefunc_t *newfunc, *func;
6543 memcpy(newfunc,
f,
sizeof(edict_odefunc_t));
6544 newfunc->next =
NULL;
6549 for (func = ed->
priv.
server->ode_func; func->next; func = func->next);
6550 func->next = newfunc;
6569 VM_Warning(prog,
"VM_physics_enable: null entity!\n");
6575 VM_Warning(prog,
"VM_physics_enable: entity is not MOVETYPE_PHYSICS!\n");
6579 VM_physics_ApplyCmd(ed, &
f);
6596 VM_Warning(prog,
"VM_physics_addforce: null entity!\n");
6602 VM_Warning(prog,
"VM_physics_addforce: entity is not MOVETYPE_PHYSICS!\n");
6605 f.type = ODEFUNC_FORCE;
6608 VM_physics_ApplyCmd(ed, &
f);
6625 VM_Warning(prog,
"VM_physics_addtorque: null entity!\n");
6631 VM_Warning(prog,
"VM_physics_addtorque: entity is not MOVETYPE_PHYSICS!\n");
6634 f.type = ODEFUNC_TORQUE;
6636 VM_physics_ApplyCmd(ed, &
f);
model_t * CL_GetModelFromEdict(prvm_edict_t *ed)
void CL_LinkEdict(prvm_edict_t *ent)
void SCR_CenterPrint(const char *str)
void CL_PurgeOwner(int owner)
void CL_GetEntityMatrix(prvm_prog_t *prog, prvm_edict_t *ent, matrix4x4_t *out, qbool viewmatrix)
void Cbuf_AddText(cmd_state_t *cmd, const char *text)
cmd_state_t * cmd_local
command interpreter for local commands injected by SVQC, CSQC, MQC, server or client engine code uses...
qbool Cmd_Exists(cmd_state_t *cmd, const char *cmd_name)
used by the cvar code to check for cvar / command name overlap
#define CF_ALLOCATED
created by Cvar_Get() (console or QC)
#define CF_READONLY
cvar cannot be changed from the console or the command buffer, and is considered CF_PERSISTENT
#define CF_MAXFLAGSVAL
used to determine if flags is valid
#define CF_ARCHIVE
cvar should have its set value saved to config.cfg and persist across sessions
#define CF_PRIVATE
cvar should not be $ expanded or sent to the server under any circumstances (rcon_password,...
unsigned short CRC_Block(const unsigned char *data, size_t size)
unsigned short CRC_Block_CaseInsensitive(const unsigned char *data, size_t size)
void InfoString_SetValue(char *buffer, size_t bufferlength, const char *key, const char *value)
size_t InfoString_GetValue(const char *buffer, const char *key, char *value, size_t valuesize)
Returns the number of bytes written to *value excluding the \0 terminator.
void MSG_WriteString(sizebuf_t *sb, const char *s)
void MSG_WriteChar(sizebuf_t *sb, int c)
int dpvsnprintf(char *buffer, size_t buffersize, const char *format, va_list args)
Returns the number of printed characters, excluding the final '\0' or returns -1 if the buffer isn't ...
char com_token[MAX_INPUTLINE]
char * va(char *buf, size_t buflen, const char *format,...)
size_t COM_StringDecolorize(const char *in, size_t size_in, char *out, size_t size_out, qbool escape_carets)
qbool COM_ParseToken_VM_Tokenize(const char **datapointer, qbool returnnewline)
qbool COM_ParseToken_Console(const char **datapointer)
size_t COM_ToUpperString(const char *in, char *out, size_t size_out)
Returns the number of bytes written to *out excluding the \0 terminator.
qbool COM_ParseToken_Simple(const char **datapointer, qbool returnnewline, qbool parsebackslash, qbool parsecomments)
int dpsnprintf(char *buffer, size_t buffersize, const char *format,...)
Returns the number of printed characters, excluding the final '\0' or returns -1 if the buffer isn't ...
size_t base64_encode(unsigned char *buf, size_t buflen, size_t outbuflen)
size_t COM_ToLowerString(const char *in, char *out, size_t size_out)
Returns the number of bytes written to *out excluding the \0 terminator.
#define dp_strlcat(dst, src, dsize)
#define dp_strlcpy(dst, src, dsize)
void Con_Print(const char *msg)
Prints to all appropriate console targets, and adds timestamps.
void Con_DPrintf(const char *fmt,...)
A Con_Printf that only shows up if the "developer" cvar is set.
void Con_Printf(const char *fmt,...)
Prints to all appropriate console targets.
void sha256(unsigned char *out, const unsigned char *in, int n)
size_t Crypto_SignDataDetached(const void *data, size_t datasize, int keyid, void *signed_data, size_t signed_size)
qbool Crypto_Available(void)
float trace_dphitcontents
float trace_dpstartcontents
string trace_dphittexturename
float trace_dphitq3surfaceflags
vector trace_plane_normal
float Cvar_VariableValue(cvar_state_t *cvars, const char *var_name, unsigned neededflags)
const char * Cvar_VariableDescription(cvar_state_t *cvars, const char *var_name, unsigned neededflags)
const char * Cvar_VariableDefString(cvar_state_t *cvars, const char *var_name, unsigned neededflags)
void Cvar_SetQuick(cvar_t *var, const char *value)
const char * Cvar_VariableString(cvar_state_t *cvars, const char *var_name, unsigned neededflags)
cvar_t * Cvar_Get(cvar_state_t *cvars, const char *name, const char *value, unsigned flags, const char *newdescription)
allocates a cvar by name and returns its address, or merely sets its value if it already exists.
cvar_t * Cvar_FindVar(cvar_state_t *cvars, const char *var_name, unsigned neededflags)
const char * cvar_dummy_description
int matchpattern_with_separator(const char *in, const char *pattern, int caseinsensitive, const char *separators, qbool wildcard_least_one)
qfile_t * FS_OpenVirtualFile(const char *filepath, qbool quiet)
fs_offset_t FS_Write(qfile_t *file, const void *data, size_t datasize)
unsigned char * FS_LoadFile(const char *path, mempool_t *pool, qbool quiet, fs_offset_t *filesizepointer)
void FS_FreeSearch(fssearch_t *search)
fssearch_t * FS_Search(const char *pattern, int caseinsensitive, int quiet, const char *packfile)
qfile_t * FS_OpenRealFile(const char *filepath, const char *mode, qbool quiet)
static int(ZEXPORT *qz_inflate)(z_stream *strm
int FS_UnGetc(qfile_t *file, unsigned char c)
int FS_Close(qfile_t *file)
const char * FS_WhichPack(const char *filename)
int FS_Getc(qfile_t *file)
int FS_CheckNastyPath(const char *path, qbool isgamedir)
GLint GLenum GLboolean normalized
GLsizei const GLfloat * value
GLsizei const GLchar ** string
GLenum GLuint GLenum GLsizei length
GLenum GLenum GLsizei count
GLint GLint GLint GLsizei GLsizei GLenum format
GLsizeiptr const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
void Key_FindKeysForCommand(const char *command, int *keys, int numkeys, int bindmap)
qbool Key_SetBinding(int keynum, int bindmap, const char *binding)
qbool Key_SetBindMap(int fg, int bg)
void Key_GetBindMap(int *fg, int *bg)
const char * Key_KeynumToString(int keynum, char *tinystr, size_t tinystrlength)
const char * Key_GetBind(int key, int bindmap)
int Key_StringToKeynum(const char *str)
int LHNETADDRESS_ToString(const lhnetaddress_t *vaddress, char *string, int stringbuffersize, int includeport)
Returns the number of bytes written to *string excluding the \0 terminator.
int LHNETADDRESS_FromString(lhnetaddress_t *vaddress, const char *string, int defaultport)
qbool Curl_Begin_ToMemory_POST(const char *URL, const char *extraheaders, double maxspeed, const char *post_content_type, const unsigned char *postbuf, size_t postbufsize, unsigned char *buf, size_t bufsize, curl_callback_t callback, void *cbdata)
qbool Curl_Available(void)
int Math_atov(const char *s, prvm_vec3_t out)
void AnglesFromVectors(vec3_t angles, const vec3_t forward, const vec3_t up, qbool flippitch)
LadyHavoc: calculates pitch/yaw/roll angles from forward and up vectors.
void AngleVectors(const vec3_t angles, vec3_t forward, vec3_t right, vec3_t up)
void VectorVectors(const vec3_t forward, vec3_t right, vec3_t up)
LadyHavoc: like AngleVectors, but taking a forward vector instead of angles, useful!
#define VectorNormalize(v)
#define bound(min, num, max)
#define lhrandom(MIN, MAX)
LadyHavoc: this function never returns exactly MIN or exactly MAX, because of a QuakeC bug in id1 whe...
#define VectorSet(vec, x, y, z)
#define VectorNormalize2(v, dest)
#define VectorDistance2(a, b)
#define VectorSubtract(a, b, out)
#define CrossProduct(a, b, out)
#define TriangleNormal(a, b, c, n)
#define VectorCopy(in, out)
#define VectorScale(in, scale, out)
#define VectorAdd(a, b, out)
#define VectorMA(a, scale, b, out)
void Matrix4x4_TransformPositivePlane(const matrix4x4_t *in, float x, float y, float z, float d, float *o)
void Matrix4x4_Transform(const matrix4x4_t *in, const float v[3], float out[3])
void Matrix4x4_Transform3x3(const matrix4x4_t *in, const float v[3], float out[3])
int Matrix4x4_Invert_Full(matrix4x4_t *out, const matrix4x4_t *in1)
const matrix4x4_t identitymatrix
void mdfour(unsigned char *out, const unsigned char *in, int n)
unsigned cl_net_extresponse_last
unsigned sv_net_extresponse_count
char sv_net_extresponse[NET_EXTRESPONSE_MAX][1400]
unsigned sv_net_extresponse_last
unsigned cl_net_extresponse_count
char cl_net_extresponse[NET_EXTRESPONSE_MAX][1400]
#define NET_EXTRESPONSE_MAX
unstickresult_t PHYS_NudgeOutOfSolid(prvm_prog_t *prog, prvm_edict_t *ent)
#define PRVM_gameedictvector(ed, fieldname)
#define PRVM_gameedictfloat(ed, fieldname)
void PRVM_ED_LoadFromFile(prvm_prog_t *prog, const char *data)
#define PRVM_serveredictvector(ed, fieldname)
#define STRINGBUFFER_QCFLAGS
int PRVM_SetTempString(prvm_prog_t *prog, const char *s, size_t slen)
Takes an strlen (not a buffer size).
char * PRVM_UglyValueString(prvm_prog_t *prog, etype_t type, prvm_eval_t *val, char *line, size_t linelength)
#define PRVM_gameglobalvector(fieldname)
#define PRVM_E_FLOAT(e, o)
void PRVM_ED_Write(prvm_prog_t *prog, struct qfile_s *f, prvm_edict_t *ed)
#define STRINGBUFFER_TEMP
#define PRVM_EDICT_TO_PROG(e)
#define PRVM_MAX_OPENFILES
mfunction_t * PRVM_ED_FindFunction(prvm_prog_t *prog, const char *name)
#define PRVM_gameglobaledict(fieldname)
void PRVM_ED_PrintNum(prvm_prog_t *prog, int ent, const char *wildcard_fieldname)
#define PRVM_G_EDICTNUM(o)
#define PRVM_EDICT_NUM(n)
void PRVM_FreeString(prvm_prog_t *prog, int num)
qbool PRVM_ED_ParseEpair(prvm_prog_t *prog, prvm_edict_t *ent, mdef_t *key, const char *s, qbool parsebackslash)
#define PRVM_NEXT_EDICT(e)
const char * PRVM_ED_ParseEdict(prvm_prog_t *prog, const char *data, prvm_edict_t *ent, qbool saveload)
int PRVM_AllocString(prvm_prog_t *prog, size_t bufferlength, char **pointer)
const char * PRVM_GetString(prvm_prog_t *prog, int num)
#define PRVM_EDICTFIELDEDICT(ed, fieldoffset)
#define PRVM_allfunction(funcname)
int prvm_type_size[8]
for consistency : I think a goal of this sub-project is to make the new vm mostly independent from th...
#define PRVM_NUM_FOR_EDICT(e)
#define PRVM_Free(buffer)
#define PRVM_gameglobalfloat(fieldname)
#define PRVM_PROG_TO_EDICT(n)
void PRVM_ExplicitCoverageEvent(prvm_prog_t *prog, mfunction_t *func, int statement)
#define PRVM_serverglobalfloat(fieldname)
#define PRVM_serveredictfloat(ed, fieldname)
#define PRVM_MAX_OPENSEARCHES
#define PRVM_gameglobalstring(fieldname)
void PRVM_ED_Free(prvm_prog_t *prog, prvm_edict_t *ed)
#define PRVM_E_STRING(e, o)
#define PRVM_allglobaledict(fieldname)
void PRVM_ED_Print(prvm_prog_t *prog, prvm_edict_t *ed, const char *wildcard_fieldname)
void PRVM_StackTrace(prvm_prog_t *prog)
void PRVM_PrintState(prvm_prog_t *prog, int stack_index)
const char * PRVM_AllocationOrigin(prvm_prog_t *prog)
prvm_edict_t * PRVM_ED_Alloc(prvm_prog_t *prog)
#define MAX_FRAMEGROUPBLENDS
void VM_strunzone(prvm_prog_t *prog)
void VM_vectorvectors(prvm_prog_t *prog)
size_t VM_VarString(prvm_prog_t *prog, int first, char *out, size_t outsize)
Returns the length of the *out string excluding the \0 terminator.
static void getmatrix(prvm_prog_t *prog, prvm_edict_t *ed, matrix4x4_t *out)
void VM_substring(prvm_prog_t *prog)
void VM_entityfieldname(prvm_prog_t *prog)
void VM_altstr_prepare(prvm_prog_t *prog)
void VM_buf_writefile(prvm_prog_t *prog)
void VM_getsoundtime(prvm_prog_t *prog)
void VM_objerror(prvm_prog_t *prog)
static void clippointtosurface(prvm_prog_t *prog, prvm_edict_t *ed, model_t *model, msurface_t *surface, vec3_t p, vec3_t out)
void VM_fabs(prvm_prog_t *prog)
void VM_isserver(prvm_prog_t *prog)
void VM_nudgeoutofsolid(prvm_prog_t *prog)
void VM_dprint(prvm_prog_t *prog)
void VM_uri_get(prvm_prog_t *prog)
void VM_chr2str(prvm_prog_t *prog)
void VM_digest_hex(prvm_prog_t *prog)
void VM_clientcount(prvm_prog_t *prog)
void BufStr_Set(prvm_prog_t *prog, prvm_stringbuffer_t *stringbuffer, int strindex, const char *str)
void VM_soundlength(prvm_prog_t *prog)
void VM_strncmp(prvm_prog_t *prog)
void VM_strtolower(prvm_prog_t *prog)
void VM_fgets(prvm_prog_t *prog)
void VM_Cmd_Init(prvm_prog_t *prog)
void VM_physics_addtorque(prvm_prog_t *prog)
void VM_search_getsize(prvm_prog_t *prog)
void VM_findkeysforcommand(prvm_prog_t *prog)
void VM_tan(prvm_prog_t *prog)
void VM_modulo(prvm_prog_t *prog)
void VM_sqrt(prvm_prog_t *prog)
void VM_stov(prvm_prog_t *prog)
void VM_random(prvm_prog_t *prog)
void VM_gecko_navigate(prvm_prog_t *prog)
static void applytransform_inverted(prvm_prog_t *prog, const vec3_t in, prvm_edict_t *ed, vec3_t out)
void VM_eprint(prvm_prog_t *prog)
void VM_bitshift(prvm_prog_t *prog)
void VM_precache_sound(prvm_prog_t *prog)
#define PRINTF_SPACEPOSITIVE
void VM_CL_getextresponse(prvm_prog_t *prog)
void VM_buf_getsize(prvm_prog_t *prog)
void VM_getsurfacetexture(prvm_prog_t *prog)
static void animatemodel(prvm_prog_t *prog, model_t *model, prvm_edict_t *ed)
static void BufStr_Expand(prvm_prog_t *prog, prvm_stringbuffer_t *stringbuffer, int strindex)
void VM_search_end(prvm_prog_t *prog)
void VM_getentityfieldstring(prvm_prog_t *prog)
void VM_bufstr_get(prvm_prog_t *prog)
void VM_altstr_get(prvm_prog_t *prog)
void VM_gecko_movemouse(prvm_prog_t *prog)
static qbool PRVM_Cvar_ReadOk(prvm_prog_t *prog, const char *string)
void VM_cvar_type(prvm_prog_t *prog)
static int chrconv_number(int i, int base, int conv)
void VM_makevectors(prvm_prog_t *prog)
static qbool match_rule(const char *string, int max_string, const char *pattern, int patternlength, int rule)
void VM_vlen(prvm_prog_t *prog)
void VM_gecko_destroy(prvm_prog_t *prog)
void VM_CheckEmptyString(prvm_prog_t *prog, const char *s)
void VM_physics_addforce(prvm_prog_t *prog)
void VM_gecko_get_texture_extent(prvm_prog_t *prog)
void VM_search_getfilename(prvm_prog_t *prog)
void VM_itof(prvm_prog_t *prog)
static void VM_Search_Reset(prvm_prog_t *prog)
void VM_centerprint(prvm_prog_t *prog)
void VM_coverage(prvm_prog_t *prog)
void VM_break(prvm_prog_t *prog)
void VM_uncolorstring(prvm_prog_t *prog)
void VM_strlennocol(prvm_prog_t *prog)
void VM_tokenize(prvm_prog_t *prog)
void VM_numentityfields(prvm_prog_t *prog)
void VM_SetTraceGlobals(prvm_prog_t *prog, const trace_t *trace)
void VM_vtos(prvm_prog_t *prog)
static int BufStr_SortStringsUP(const void *in1, const void *in2)
void VM_getsurfacenumpoints(prvm_prog_t *prog)
void VM_argv_start_index(prvm_prog_t *prog)
void VM_Cmd_Reset(prvm_prog_t *prog)
static void VM_Search_Init(prvm_prog_t *prog)
void VM_getsurfacepointattribute(prvm_prog_t *prog)
static qbool checkextension(prvm_prog_t *prog, const char *name)
void VM_setbindmaps(prvm_prog_t *prog)
void VM_CL_videoplaying(prvm_prog_t *prog)
void VM_registercvar(prvm_prog_t *prog)
void VM_uri_unescape(prvm_prog_t *prog)
void VM_infoget(prvm_prog_t *prog)
void VM_randomvec(prvm_prog_t *prog)
void VM_matchpattern(prvm_prog_t *prog)
void BufStr_Flush(prvm_prog_t *prog)
void VM_setkeybind(prvm_prog_t *prog)
void VM_atan2(prvm_prog_t *prog)
void VM_etos(prvm_prog_t *prog)
void VM_cvar_defstring(prvm_prog_t *prog)
void VM_stackdump(prvm_prog_t *prog)
static int chrchar_alpha(int i, int basec, int baset, int convc, int convt, int charnum)
void VM_altstr_count(prvm_prog_t *prog)
void VM_asin(prvm_prog_t *prog)
void VM_vectoyaw(prvm_prog_t *prog)
void VM_strlen(prvm_prog_t *prog)
static void uri_to_string_callback(int status, size_t length_received, unsigned char *buffer, void *cbdata)
void VM_strconv(prvm_prog_t *prog)
void VM_rint(prvm_prog_t *prog)
void VM_bound(prvm_prog_t *prog)
void VM_argv_end_index(prvm_prog_t *prog)
void VM_buf_implode(prvm_prog_t *prog)
void VM_precache_file(prvm_prog_t *prog)
void VM_spawn(prvm_prog_t *prog)
void VM_GenerateFrameGroupBlend(prvm_prog_t *prog, framegroupblend_t *framegroupblend, const prvm_edict_t *ed)
void VM_ClearTraceGlobals(prvm_prog_t *prog)
void VM_tokenize_console(prvm_prog_t *prog)
void VM_sprintf(prvm_prog_t *prog)
void VM_localsound(prvm_prog_t *prog)
void VM_buf_cvarlist(prvm_prog_t *prog)
static int tokens_endpos[VM_TEMPSTRING_MAXSIZE/2]
void VM_find(prvm_prog_t *prog)
void VM_stof(prvm_prog_t *prog)
void VM_getsurfacetriangle(prvm_prog_t *prog)
void VM_fputs(prvm_prog_t *prog)
void VM_bufstr_add(prvm_prog_t *prog)
void VM_strdecolorize(prvm_prog_t *prog)
void VM_uri_escape(prvm_prog_t *prog)
void VM_findchainflags(prvm_prog_t *prog)
void VM_netaddress_resolve(prvm_prog_t *prog)
void VM_writetofile(prvm_prog_t *prog)
void VM_physics_enable(prvm_prog_t *prog)
void VM_putentityfieldstring(prvm_prog_t *prog)
void VM_etof(prvm_prog_t *prog)
void VM_nextent(prvm_prog_t *prog)
void VM_parseentitydata(prvm_prog_t *prog)
#define PRINTF_SIGNPOSITIVE
void VM_gecko_resize(prvm_prog_t *prog)
static const char * detect_match_rule(char *pattern, int *matchrule)
static int tokens_startpos[VM_TEMPSTRING_MAXSIZE/2]
void VM_fclose(prvm_prog_t *prog)
void VM_Warning(prvm_prog_t *prog, const char *fmt,...)
void VM_ftoe(prvm_prog_t *prog)
void VM_findfloat(prvm_prog_t *prog)
void VM_strcat(prvm_prog_t *prog)
void VM_atan(prvm_prog_t *prog)
void VM_ceil(prvm_prog_t *prog)
void VM_buf_del(prvm_prog_t *prog)
void VM_strpad(prvm_prog_t *prog)
void VM_strtoupper(prvm_prog_t *prog)
void VM_altstr_ins(prvm_prog_t *prog)
void VM_normalize(prvm_prog_t *prog)
void VM_changeyaw(prvm_prog_t *prog)
void VM_tokenizebyseparator(prvm_prog_t *prog)
static qfile_t * VM_GetFileHandle(prvm_prog_t *prog, int index)
void VM_getkeybind(prvm_prog_t *prog)
void VM_getbindmaps(prvm_prog_t *prog)
void VM_strftime(prvm_prog_t *prog)
void VM_floor(prvm_prog_t *prog)
void VM_cos(prvm_prog_t *prog)
void VM_RemoveEdictSkeleton(prvm_prog_t *prog, prvm_edict_t *ed)
void VM_FrameBlendFromFrameGroupBlend(frameblend_t *frameblend, const framegroupblend_t *framegroupblend, const model_t *model, double curtime)
static int chrconv_punct(int i, int base, int conv)
void VM_whichpack(prvm_prog_t *prog)
void VM_CL_isdemo(prvm_prog_t *prog)
void VM_buf_sort(prvm_prog_t *prog)
void VM_bufstr_find(prvm_prog_t *prog)
void VM_strzone(prvm_prog_t *prog)
void BufStr_Del(prvm_prog_t *prog, prvm_stringbuffer_t *stringbuffer)
void VM_cvar_set(prvm_prog_t *prog)
void VM_isfunction(prvm_prog_t *prog)
void VM_getostype(prvm_prog_t *prog)
static size_t stringbuffers_sortlength
void VM_bprint(prvm_prog_t *prog)
void VM_argv(prvm_prog_t *prog)
void M_FindKeysForCommand(const char *command, int *keys)
static void applytransform_forward_direction(prvm_prog_t *prog, const vec3_t in, prvm_edict_t *ed, vec3_t out)
void VM_strreplace(prvm_prog_t *prog)
void VM_min(prvm_prog_t *prog)
void VM_changepitch(prvm_prog_t *prog)
qbool PRVM_ConsoleCommand(prvm_prog_t *prog, const char *text, size_t textlen, int *func, qbool preserve_self, int curself, double ptime, const char *error_message)
static void BufStr_Shrink(prvm_prog_t *prog, prvm_stringbuffer_t *stringbuffer)
prvm_stringbuffer_t * BufStr_FindCreateReplace(prvm_prog_t *prog, int bufindex, unsigned flags, const char *format)
void VM_checkextension(prvm_prog_t *prog)
void VM_clientstate(prvm_prog_t *prog)
void VM_ftos(prvm_prog_t *prog)
void VM_bufstr_set(prvm_prog_t *prog)
static model_t * getmodel(prvm_prog_t *prog, prvm_edict_t *ed)
void VM_findflags(prvm_prog_t *prog)
void VM_getsurfacenumtriangles(prvm_prog_t *prog)
void VM_acos(prvm_prog_t *prog)
void VM_loadfromfile(prvm_prog_t *prog)
static void animatemodel_reset(prvm_prog_t *prog)
void VM_gecko_create(prvm_prog_t *prog)
void VM_altstr_set(prvm_prog_t *prog)
void VM_gettime(prvm_prog_t *prog)
void VM_findchainfloat(prvm_prog_t *prog)
void VM_findchain(prvm_prog_t *prog)
void VM_getsurfaceclippedpoint(prvm_prog_t *prog)
void VM_traceon(prvm_prog_t *prog)
void VM_strstrofs(prvm_prog_t *prog)
void VM_fopen(prvm_prog_t *prog)
static void applytransform_forward_normal(prvm_prog_t *prog, const vec3_t in, prvm_edict_t *ed, vec3_t out)
void VM_max(prvm_prog_t *prog)
cvar_t prvm_backtraceforwarnings
static char tokenize_string[VM_TEMPSTRING_MAXSIZE]
void VM_bufstr_free(prvm_prog_t *prog)
void VM_getsurfacepoint(prvm_prog_t *prog)
void VM_getsurfacenearpoint(prvm_prog_t *prog)
void VM_buf_copy(prvm_prog_t *prog)
void VM_cvar_description(prvm_prog_t *prog)
void VM_search_begin(prvm_prog_t *prog)
void VM_crc16(prvm_prog_t *prog)
void VM_stringtokeynum(prvm_prog_t *prog)
void VM_remove(prvm_prog_t *prog)
void VM_UpdateEdictSkeleton(prvm_prog_t *prog, prvm_edict_t *ed, const model_t *edmodel, const frameblend_t *frameblend)
void VM_error(prvm_prog_t *prog)
float CDAudio_GetPosition(void)
void VM_buf_create(prvm_prog_t *prog)
void VM_str2chr(prvm_prog_t *prog)
void VM_print(prvm_prog_t *prog)
void VM_cvar(prvm_prog_t *prog)
void VM_cvar_string(prvm_prog_t *prog)
void VM_gecko_keyevent(prvm_prog_t *prog)
void VM_changelevel(prvm_prog_t *prog)
void VM_crash(prvm_prog_t *prog)
void VM_Files_CloseAll(prvm_prog_t *prog)
void VM_SV_getextresponse(prvm_prog_t *prog)
static int BufStr_SortStringsDOWN(const void *in1, const void *in2)
void VM_traceoff(prvm_prog_t *prog)
void VM_callfunction(prvm_prog_t *prog)
void VM_infoadd(prvm_prog_t *prog)
#define GETARG_INTVECTOR(a)
void VM_wasfreed(prvm_prog_t *prog)
void VM_chr(prvm_prog_t *prog)
void VM_sprint(prvm_prog_t *prog)
void VM_buf_loadfile(prvm_prog_t *prog)
void VM_localcmd(prvm_prog_t *prog)
void VM_sin(prvm_prog_t *prog)
void VM_getsurfacenormal(prvm_prog_t *prog)
void VM_pow(prvm_prog_t *prog)
void VM_log(prvm_prog_t *prog)
void VM_coredump(prvm_prog_t *prog)
void VM_strireplace(prvm_prog_t *prog)
void VM_keynumtostring(prvm_prog_t *prog)
static int tokens[VM_TEMPSTRING_MAXSIZE/2]
void VM_strncasecmp(prvm_prog_t *prog)
void VM_loadfromdata(prvm_prog_t *prog)
void VM_vectoangles(prvm_prog_t *prog)
static void applytransform_forward(prvm_prog_t *prog, const vec3_t in, prvm_edict_t *ed, vec3_t out)
static msurface_t * getsurface(model_t *model, int surfacenum)
void VM_entityfieldtype(prvm_prog_t *prog)
void VM_Files_Init(prvm_prog_t *prog)
#define VM_RETURN_EDICT(e)
#define VM_TEMPSTRING_MAXSIZE
#define VM_SAFEPARMCOUNT(p, f)
#define VM_SAFEPARMCOUNTRANGE(p1, p2, f)
#define MAX_INPUTLINE
maximum size of console commandline, QuakeC strings, and many other text processing buffers
#define MAX_EDICTS
max number of objects in game world at once (32768 protocol limit)
#define INT_LOSSLESS_FORMAT_CONVERT_U(x)
#define INT_LOSSLESS_FORMAT_CONVERT_S(x)
#define INT_LOSSLESS_FORMAT_SIZE
#define MOVETYPE_PHYSICS
indicates this object is physics controlled
void SV_LinkEdict(prvm_edict_t *ent)
void SV_GetEntityMatrix(prvm_prog_t *prog, prvm_edict_t *ent, matrix4x4_t *out, qbool viewmatrix)
model_t * SV_GetModelFromEdict(prvm_edict_t *ed)
server_static_t svs
persistant server info
void SV_BroadcastPrint(const char *msg)
qbool S_LocalSound(const char *sound)
float S_SoundLength(const char *name)
float S_GetEntChannelPosition(int entnum, int entchannel)
qbool S_LocalSoundEx(const char *sound, int chan, float fvol)
sfx_t * S_PrecacheSound(const char *name, qbool complain, qbool levelsound)
#define CHAN_USER2ENGINE(c)
frameblend_t frameblend[MAX_FRAMEBLENDS]
netconn_t * netconnection
communications handle
double dirtytime
the main loop wall time for this frame, equal to Sys_DirtyTime() at the start of this host frame
double realtime
the accumulated mainloop time since application started (with filtering), without any slowmo or clamp...
describes the textures to use on a range of triangles in the model, and mins/maxs (AABB) for culling.
int num_triangles
range of triangles and vertices in model->surfmesh
texture_t * texture
the texture to use on the surface
vec3_t mins
bounding box for onscreen checks
sizebuf_t message
writing buffer to send to peer as the next reliable message can be added to at any time,...
union prvm_edict_t::@30 fields
qbool free
true if this edict is unused
union prvm_edict_t::@29 priv
struct edict_engineprivate_s * server
FIXME: this server pointer really means world, not server (it is used by both server qc and client qc...
struct animatemodel_cache * animatemodel_cache
struct qfile_s * openfiles[PRVM_MAX_OPENFILES]
prvm_builtin_t * builtins
qbool loaded
used to indicate whether a prog is loaded
const char * name
name of the prog, e.g. "Server", "Client" or "Menu" (used for text output)
void(* error_cmd)(const char *format,...) DP_FUNC_PRINTF(1) DP_FUNC_NORETURN
[INIT]
int num_edicts
copies of some vars that were former read from sv
prvm_prog_fieldoffsets_t fieldoffsets
const char * opensearches_origin[PRVM_MAX_OPENSEARCHES]
double * explicit_profile
only incremented if prvm_statementprofiling is on
mempool_t * progs_mempool
all memory allocations related to this vm_prog (code, edicts, strings)
struct fssearch_s * opensearches[PRVM_MAX_OPENSEARCHES]
memexpandablearray_t stringbuffersarray
struct cmd_state_s * console_cmd
points to the relevant console command interpreter for this vm (cmd_local or &cmd_server),...
int max_edicts
number of edicts for which space has been (should be) allocated
void(* ExecuteProgram)(struct prvm_prog_s *prog, func_t fnum, const char *errormessage)
pointer to one of the *VM_ExecuteProgram functions
struct skeleton_s * skeletons[MAX_EDICTS]
sizebuf_t tempstringsbuf
buffer for storing all tempstrings created during one invocation of ExecuteProgram
const char * openfiles_origin[PRVM_MAX_OPENFILES]
const char ** extensionstring
double starttime
system time when PRVM_Prog_Load was called
int reserved_edicts
number of reserved edicts (allocated from 1)
struct client_s * clients
client slots
qbool changelevel_issued
cleared when at SV_SpawnServer
int maxclients
number of svs.clients slots (updated by maxplayers command)
qbool active
false if only a net client
const struct model_s * model
struct matrix4x4_s * relativetransforms
const struct texture_s * hittexture
char buffer[MAX_INPUTLINE]
void Sys_Error(const char *error,...) DP_FUNC_PRINTF(1) DP_FUNC_NORETURN
Causes the entire program to exit ASAP.
double Sys_DirtyTime(void)
char * u8_encodech(Uchar ch, size_t *l, char *buf16)
uses u8_fromchar on a static buffer
size_t u8_strpad(char *out, size_t outsize, const char *in, qbool leftalign, size_t minwidth, size_t maxwidth)
Pads a utf-8 string.
size_t u8_COM_StringLengthNoColors(const char *_s, size_t size_s, qbool *valid)
size_t u8_bytelen(const char *_s, size_t n)
Get the number of bytes used in a string to represent an amount of characters.
size_t u8_strpad_colorcodes(char *out, size_t outsize, const char *in, qbool leftalign, size_t minwidth, size_t maxwidth)
size_t u8_strlen(const char *_s)
Get the number of characters in an UTF-8 string.
int u8_byteofs(const char *_s, size_t i, size_t *len)
Get the byte-index for a character-index.
int u8_fromchar(Uchar w, char *to, size_t maxlen)
Encode a wide-character into utf-8.
size_t u8_strnlen(const char *_s, size_t n)
Get the number of characters in a part of an UTF-8 string.
#define u8_getchar_noendptr(c)
size_t Mem_ExpandableArray_IndexRange(const memexpandablearray_t *l)
void Mem_ExpandableArray_NewArray(memexpandablearray_t *l, mempool_t *mempool, size_t recordsize, int numrecordsperarray)
void Mem_ExpandableArray_FreeRecord(memexpandablearray_t *l, void *record)
void * Mem_ExpandableArray_AllocRecord(memexpandablearray_t *l)
void * Mem_ExpandableArray_RecordAtIndex(const memexpandablearray_t *l, size_t index)
#define Mem_Alloc(pool, size)