#include "quakedef.h"
dprograms_t *progs;
-dfunction_t *pr_functions;
+mfunction_t *pr_functions;
char *pr_strings;
ddef_t *pr_fielddefs;
ddef_t *pr_globaldefs;
static gefv_cache gefvCache[GEFV_CACHESIZE] = {{NULL, ""}, {NULL, ""}};
ddef_t *ED_FindField (const char *name);
-dfunction_t *ED_FindFunction (const char *name);
+mfunction_t *ED_FindFunction (const char *name);
// LordHavoc: in an effort to eliminate time wasted on GetEdictFieldValue... these are defined as externs in progs.h
int eval_gravity;
int eval_punchvector;
int eval_viewzoom;
-dfunction_t *SV_PlayerPhysicsQC;
-dfunction_t *EndFrameQC;
+mfunction_t *SV_PlayerPhysicsQC;
+mfunction_t *EndFrameQC;
int FindFieldOffset(const char *field)
{
return e;
}
}
-
+
if (i == MAX_EDICTS)
Host_Error ("ED_Alloc: no free edicts");
-
+
sv.num_edicts++;
e = EDICT_NUM(i);
ED_ClearEdict (e);
VectorClear(ed->v->angles);
ed->v->nextthink = -1;
ed->v->solid = 0;
-
+
ed->freetime = sv.time;
}
{
ddef_t *def;
int i;
-
+
for (i=0 ; i<progs->numglobaldefs ; i++)
{
def = &pr_globaldefs[i];
{
ddef_t *def;
int i;
-
+
for (i=0 ; i<progs->numfielddefs ; i++)
{
def = &pr_fielddefs[i];
ED_FindFunction
============
*/
-dfunction_t *ED_FindFunction (const char *name)
+mfunction_t *ED_FindFunction (const char *name)
{
- dfunction_t *func;
+ mfunction_t *func;
int i;
for (i=0 ; i<progs->numfunctions ; i++)
{
static char line[1024]; // LordHavoc: enlarged a bit (was 256)
ddef_t *def;
- dfunction_t *f;
+ mfunction_t *f;
int n;
type &= ~DEF_SAVEGLOBAL;
int i;
char *s;
ddef_t *def;
- dfunction_t *f;
+ mfunction_t *f;
type &= ~DEF_SAVEGLOBAL;
For savegames
=============
*/
-void ED_Write (QFile *f, edict_t *ed)
+void ED_Write (qfile_t *f, edict_t *ed)
{
ddef_t *d;
int *v;
char *name;
int type;
- Qprintf (f, "{\n");
+ FS_Printf (f, "{\n");
if (ed->free)
{
- Qprintf (f, "}\n");
+ FS_Printf (f, "}\n");
return;
}
if (j == type_size[type])
continue;
- Qprintf (f,"\"%s\" ",name);
- Qprintf (f,"\"%s\"\n", PR_UglyValueString(d->type, (eval_t *)v));
+ FS_Printf (f,"\"%s\" ",name);
+ FS_Printf (f,"\"%s\"\n", PR_UglyValueString(d->type, (eval_t *)v));
}
- Qprintf (f, "}\n");
+ FS_Printf (f, "}\n");
}
void ED_PrintNum (int ent)
ED_WriteGlobals
=============
*/
-void ED_WriteGlobals (QFile *f)
+void ED_WriteGlobals (qfile_t *f)
{
ddef_t *def;
int i;
char *name;
int type;
- Qprintf (f,"{\n");
+ FS_Printf (f,"{\n");
for (i=0 ; i<progs->numglobaldefs ; i++)
{
def = &pr_globaldefs[i];
continue;
name = PR_GetString(def->s_name);
- Qprintf (f,"\"%s\" ", name);
- Qprintf (f,"\"%s\"\n", PR_UglyValueString(type, (eval_t *)&pr_globals[def->ofs]));
+ FS_Printf (f,"\"%s\" ", name);
+ FS_Printf (f,"\"%s\"\n", PR_UglyValueString(type, (eval_t *)&pr_globals[def->ofs]));
}
- Qprintf (f,"}\n");
+ FS_Printf (f,"}\n");
}
/*
ddef_t *def;
char *v, *w;
void *d;
- dfunction_t *func;
+ mfunction_t *func;
d = (void *)((int *)base + key->ofs);
case ev_string:
*(string_t *)d = PR_SetString(ED_NewString(s));
break;
-
+
case ev_float:
*(float *)d = atof (s);
break;
-
+
case ev_vector:
strcpy (string, s);
v = string;
{
edict_t *ent;
int inhibit;
- dfunction_t *func;
+ mfunction_t *func;
ent = NULL;
inhibit = 0;
pr_global_struct->time = sv.time;
-
+
// parse ents
while (1)
{
{
if (((int)ent->v->spawnflags & SPAWNFLAG_NOT_DEATHMATCH))
{
- ED_Free (ent);
+ ED_Free (ent);
inhibit++;
continue;
}
PR_LoadProgs
===============
*/
+extern void PR_Cmd_Reset (void);
void PR_LoadProgs (void)
{
int i;
dstatement_t *st;
ddef_t *infielddefs;
void *temp;
+ dfunction_t *dfunctions;
// flush the non-C variable lookup cache
for (i=0 ; i<GEFV_CACHESIZE ; i++)
Mem_EmptyPool(progs_mempool);
Mem_EmptyPool(edictstring_mempool);
- temp = COM_LoadFile ("progs.dat", false);
+ temp = FS_LoadFile ("progs.dat", false);
if (!temp)
Host_Error ("PR_LoadProgs: couldn't load progs.dat");
- progs = (dprograms_t *)Mem_Alloc(progs_mempool, com_filesize);
+ progs = (dprograms_t *)Mem_Alloc(progs_mempool, fs_filesize);
- memcpy(progs, temp, com_filesize);
+ memcpy(progs, temp, fs_filesize);
Mem_Free(temp);
- Con_DPrintf ("Programs occupy %iK.\n", com_filesize/1024);
+ Con_DPrintf ("Programs occupy %iK.\n", fs_filesize/1024);
- pr_crc = CRC_Block((qbyte *)progs, com_filesize);
+ pr_crc = CRC_Block((qbyte *)progs, fs_filesize);
// byte swap the header
for (i = 0;i < (int) sizeof(*progs) / 4;i++)
if (progs->crc != PROGHEADER_CRC)
Host_Error ("progs.dat system vars have been modified, progdefs.h is out of date");
- pr_functions = (dfunction_t *)((qbyte *)progs + progs->ofs_functions);
+ //pr_functions = (dfunction_t *)((qbyte *)progs + progs->ofs_functions);
+ dfunctions = (dfunction_t *)((qbyte *)progs + progs->ofs_functions);
pr_strings = (char *)progs + progs->ofs_strings;
pr_globaldefs = (ddef_t *)((qbyte *)progs + progs->ofs_globaldefs);
pr_statements[i].c = LittleShort(pr_statements[i].c);
}
- for (i=0 ; i<progs->numfunctions; i++)
+ pr_functions = Mem_Alloc(progs_mempool, sizeof(mfunction_t) * progs->numfunctions);
+ for (i = 0;i < progs->numfunctions;i++)
{
- pr_functions[i].first_statement = LittleLong (pr_functions[i].first_statement);
- pr_functions[i].parm_start = LittleLong (pr_functions[i].parm_start);
- pr_functions[i].s_name = LittleLong (pr_functions[i].s_name);
- pr_functions[i].s_file = LittleLong (pr_functions[i].s_file);
- pr_functions[i].numparms = LittleLong (pr_functions[i].numparms);
- pr_functions[i].locals = LittleLong (pr_functions[i].locals);
+ pr_functions[i].first_statement = LittleLong (dfunctions[i].first_statement);
+ pr_functions[i].parm_start = LittleLong (dfunctions[i].parm_start);
+ pr_functions[i].s_name = LittleLong (dfunctions[i].s_name);
+ pr_functions[i].s_file = LittleLong (dfunctions[i].s_file);
+ pr_functions[i].numparms = LittleLong (dfunctions[i].numparms);
+ pr_functions[i].locals = LittleLong (dfunctions[i].locals);
+ memcpy(pr_functions[i].parm_size, dfunctions[i].parm_size, sizeof(dfunctions[i].parm_size));
}
for (i=0 ; i<progs->numglobaldefs ; i++)
FindEdictFieldOffsets(); // LordHavoc: update field offset list
PR_Execute_ProgsLoaded();
+ PR_Cmd_Reset();
}
PR_Init
===============
*/
+extern void PR_Cmd_Init(void);
void PR_Init (void)
{
Cmd_AddCommand ("edict", ED_PrintEdict_f);
progs_mempool = Mem_AllocPool("progs.dat");
edictstring_mempool = Mem_AllocPool("edict strings");
+
+ PR_Cmd_Init();
}
// LordHavoc: turned EDICT_NUM into a #define for speed reasons