mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-10 15:22:04 +00:00
move to using a hash table for builtin number -> builtin lookup so sparse
ranges can be used efficiently. move the auto-allocated builtins to 0x10000000-0x7fffffff. should be more than enough :) use static builtin tables ("nul" terminated) instead of a series of function calls to add builtins to a vm. should be more memory efficient.
This commit is contained in:
parent
a87fc16d12
commit
acd54afff7
23 changed files with 620 additions and 526 deletions
|
@ -210,8 +210,9 @@ const char *PR_GlobalStringNoContents (progs_t *pr, int ofs, etype_t type);
|
|||
|
||||
pr_type_t *GetEdictFieldValue(progs_t *pr, edict_t *ed, const char *field);
|
||||
|
||||
void PR_AddBuiltin (progs_t *pr, const char *name, builtin_proc builtin, int num);
|
||||
void PR_RegisterBuiltins (progs_t *pr, builtin_t *builtins);
|
||||
builtin_t *PR_FindBuiltin (progs_t *pr, const char *name);
|
||||
builtin_t *PR_FindBuiltinNum (progs_t *pr, int num);
|
||||
int PR_RelocateBuiltins (progs_t *pr);
|
||||
int PR_ResolveGlobals (progs_t *pr);
|
||||
|
||||
|
@ -313,6 +314,9 @@ struct progs_s {
|
|||
int zone_size;
|
||||
|
||||
struct hashtab_s *builtin_hash;
|
||||
struct hashtab_s *builtin_num_hash;
|
||||
unsigned bi_next;
|
||||
|
||||
struct hashtab_s *function_hash;
|
||||
struct hashtab_s *global_hash;
|
||||
struct hashtab_s *field_hash;
|
||||
|
@ -378,9 +382,6 @@ struct progs_s {
|
|||
void *(*allocate_progs_mem)(progs_t *pr, int size);
|
||||
void (*free_progs_mem)(progs_t *pr, void *mem);
|
||||
|
||||
builtin_t **builtins;
|
||||
int numbuiltins;
|
||||
|
||||
pr_resource_t *resources;
|
||||
struct hashtab_s *resource_hash;
|
||||
|
||||
|
|
|
@ -414,6 +414,28 @@ menu_load_file (progs_t *pr, const char *path)
|
|||
return QFS_LoadFile (path, 0);
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"Menu_Begin", bi_Menu_Begin, -1},
|
||||
{"Menu_FadeScreen", bi_Menu_FadeScreen, -1},
|
||||
{"Menu_Draw", bi_Menu_Draw, -1},
|
||||
{"Menu_EnterHook", bi_Menu_EnterHook, -1},
|
||||
{"Menu_LeaveHook", bi_Menu_LeaveHook, -1},
|
||||
{"Menu_Pic", bi_Menu_Pic, -1},
|
||||
{"Menu_SubPic", bi_Menu_SubPic, -1},
|
||||
{"Menu_CenterPic", bi_Menu_CenterPic, -1},
|
||||
{"Menu_CenterSubPic", bi_Menu_CenterSubPic, -1},
|
||||
{"Menu_Item", bi_Menu_Item, -1},
|
||||
{"Menu_Cursor", bi_Menu_Cursor, -1},
|
||||
{"Menu_KeyEvent", bi_Menu_KeyEvent, -1},
|
||||
{"Menu_End", bi_Menu_End, -1},
|
||||
{"Menu_TopMenu", bi_Menu_TopMenu, -1},
|
||||
{"Menu_SelectMenu", bi_Menu_SelectMenu, -1},
|
||||
{"Menu_SetQuit", bi_Menu_SetQuit, -1},
|
||||
{"Menu_Quit", bi_Menu_Quit, -1},
|
||||
{"Menu_GetIndex", bi_Menu_GetIndex, -1},
|
||||
{0},
|
||||
};
|
||||
|
||||
void
|
||||
Menu_Init (void)
|
||||
{
|
||||
|
@ -426,24 +448,7 @@ Menu_Init (void)
|
|||
|
||||
menu_hash = Hash_NewTable (61, menu_get_key, menu_free, 0);
|
||||
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_Begin", bi_Menu_Begin, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_FadeScreen", bi_Menu_FadeScreen, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_Draw", bi_Menu_Draw, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_EnterHook", bi_Menu_EnterHook, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_LeaveHook", bi_Menu_LeaveHook, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_Pic", bi_Menu_Pic, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_SubPic", bi_Menu_SubPic, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_CenterPic", bi_Menu_CenterPic, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_CenterSubPic", bi_Menu_CenterSubPic, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_Item", bi_Menu_Item, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_Cursor", bi_Menu_Cursor, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_KeyEvent", bi_Menu_KeyEvent, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_End", bi_Menu_End, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_TopMenu", bi_Menu_TopMenu, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_SelectMenu", bi_Menu_SelectMenu, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_SetQuit", bi_Menu_SetQuit, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_Quit", bi_Menu_Quit, -1);
|
||||
PR_AddBuiltin (&menu_pr_state, "Menu_GetIndex", bi_Menu_GetIndex, -1);
|
||||
PR_RegisterBuiltins (&menu_pr_state, builtins);
|
||||
|
||||
PR_Obj_Progs_Init (&menu_pr_state);
|
||||
|
||||
|
|
|
@ -102,16 +102,20 @@ bi_cbuf_clear (progs_t *pr, void *data)
|
|||
{
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"Cbuf_AddText", bi_Cbuf_AddText, -1},
|
||||
{"Cbuf_InsertText", bi_Cbuf_InsertText, -1},
|
||||
{"Cbuf_Execute", bi_Cbuf_Execute, -1},
|
||||
{"Cbuf_Execute_Sets", bi_Cbuf_Execute_Sets, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
Cbuf_Progs_Init (progs_t *pr)
|
||||
{
|
||||
cbuf_resources_t *res = calloc (sizeof (cbuf_resources_t), 1);
|
||||
PR_Resources_Register (pr, "Cbuf", res, bi_cbuf_clear);
|
||||
|
||||
PR_AddBuiltin (pr, "Cbuf_AddText", bi_Cbuf_AddText, -1);
|
||||
PR_AddBuiltin (pr, "Cbuf_InsertText", bi_Cbuf_InsertText, -1);
|
||||
PR_AddBuiltin (pr, "Cbuf_Execute", bi_Cbuf_Execute, -1);
|
||||
PR_AddBuiltin (pr, "Cbuf_Execute_Sets", bi_Cbuf_Execute_Sets, -1);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -147,6 +147,14 @@ bi_Cmd_Args (progs_t *pr)
|
|||
//Cmd_ExecuteString
|
||||
//Cmd_ForwardToServer
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"Cmd_AddCommand", bi_Cmd_AddCommand, -1},
|
||||
{"Cmd_Argc", bi_Cmd_Argc, -1},
|
||||
{"Cmd_Argv", bi_Cmd_Argv, -1},
|
||||
{"Cmd_Args", bi_Cmd_Args, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
Cmd_Progs_Init (progs_t *pr)
|
||||
{
|
||||
|
@ -157,8 +165,5 @@ Cmd_Progs_Init (progs_t *pr)
|
|||
|
||||
bi_cmds = Hash_NewTable (1021, bi_cmd_get_key, bi_cmd_free, 0);
|
||||
|
||||
PR_AddBuiltin (pr, "Cmd_AddCommand", bi_Cmd_AddCommand, -1);
|
||||
PR_AddBuiltin (pr, "Cmd_Argc", bi_Cmd_Argc, -1);
|
||||
PR_AddBuiltin (pr, "Cmd_Argv", bi_Cmd_Argv, -1);
|
||||
PR_AddBuiltin (pr, "Cmd_Args", bi_Cmd_Args, -1);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
|
|
@ -56,8 +56,13 @@ bi_Cvar_GetCvarString (progs_t *pr)
|
|||
RETURN_STRING (pr, Cvar_VariableString (varname));
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"Cvar_GetCvarString", bi_Cvar_GetCvarString, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
Cvar_Progs_Init (progs_t *pr)
|
||||
{
|
||||
PR_AddBuiltin (pr, "Cvar_GetCvarString", bi_Cvar_GetCvarString, -1);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
|
|
@ -173,8 +173,13 @@ error:
|
|||
R_INT (pr) = 0;
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"File_Open", bi_File_Open, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
File_Progs_Init (progs_t *pr)
|
||||
{
|
||||
PR_AddBuiltin (pr, "File_Open", bi_File_Open, -1);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
|
|
@ -176,6 +176,15 @@ bi_GIB_Handle_Get (progs_t *pr)
|
|||
// R_INT (pr) = 0;
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"GIB_Builtin_Add", bi_GIB_Builtin_Add, -1},
|
||||
{"GIB_Return", bi_GIB_Return, -1},
|
||||
{"GIB_Handle_New", bi_GIB_Handle_New, -1},
|
||||
{"GIB_Handle_Free", bi_GIB_Handle_Free, -1},
|
||||
{"GIB_Handle_Get", bi_GIB_Handle_Get, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
GIB_Progs_Init (progs_t *pr)
|
||||
{
|
||||
|
@ -184,11 +193,8 @@ GIB_Progs_Init (progs_t *pr)
|
|||
|
||||
PR_Resources_Register (pr, "GIB", res, bi_gib_builtin_clear);
|
||||
|
||||
bi_gib_builtins = Hash_NewTable (1021, bi_gib_builtin_get_key, bi_gib_builtin_free, 0);
|
||||
bi_gib_builtins = Hash_NewTable (1021, bi_gib_builtin_get_key,
|
||||
bi_gib_builtin_free, 0);
|
||||
|
||||
PR_AddBuiltin (pr, "GIB_Builtin_Add", bi_GIB_Builtin_Add, -1);
|
||||
PR_AddBuiltin (pr, "GIB_Return", bi_GIB_Return, -1);
|
||||
PR_AddBuiltin (pr, "GIB_Handle_New", bi_GIB_Handle_New, -1);
|
||||
PR_AddBuiltin (pr, "GIB_Handle_Free", bi_GIB_Handle_Free, -1);
|
||||
PR_AddBuiltin (pr, "GIB_Handle_Get", bi_GIB_Handle_Get, -1);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
|
|
@ -303,6 +303,27 @@ bi_hash_clear (progs_t *pr, void *data)
|
|||
res->tabs = 0;
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"Hash_NewTable", bi_Hash_NewTable, -1},
|
||||
{"Hash_SetHashCompare", bi_Hash_SetHashCompare, -1},
|
||||
{"Hash_DelTable", bi_Hash_DelTable, -1},
|
||||
{"Hash_FlushTable", bi_Hash_FlushTable, -1},
|
||||
{"Hash_Add", bi_Hash_Add, -1},
|
||||
{"Hash_AddElement", bi_Hash_AddElement, -1},
|
||||
{"Hash_Find", bi_Hash_Find, -1},
|
||||
{"Hash_FindElement", bi_Hash_FindElement, -1},
|
||||
{"Hash_FindList", bi_Hash_FindList, -1},
|
||||
{"Hash_FindElementList", bi_Hash_FindElementList, -1},
|
||||
{"Hash_Del", bi_Hash_Del, -1},
|
||||
{"Hash_DelElement", bi_Hash_DelElement, -1},
|
||||
{"Hash_Free", bi_Hash_Free, -1},
|
||||
{"Hash_String", bi_Hash_String, -1},
|
||||
{"Hash_Buffer", bi_Hash_Buffer, -1},
|
||||
{"Hash_GetList", bi_Hash_GetList, -1},
|
||||
{"Hash_Stats", bi_Hash_Stats, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
Hash_Progs_Init (progs_t *pr)
|
||||
{
|
||||
|
@ -310,21 +331,5 @@ Hash_Progs_Init (progs_t *pr)
|
|||
res->tabs = 0;
|
||||
|
||||
PR_Resources_Register (pr, "Hash", res, bi_hash_clear);
|
||||
PR_AddBuiltin (pr, "Hash_NewTable", bi_Hash_NewTable, -1);
|
||||
PR_AddBuiltin (pr, "Hash_SetHashCompare", bi_Hash_SetHashCompare, -1);
|
||||
PR_AddBuiltin (pr, "Hash_DelTable", bi_Hash_DelTable, -1);
|
||||
PR_AddBuiltin (pr, "Hash_FlushTable", bi_Hash_FlushTable, -1);
|
||||
PR_AddBuiltin (pr, "Hash_Add", bi_Hash_Add, -1);
|
||||
PR_AddBuiltin (pr, "Hash_AddElement", bi_Hash_AddElement, -1);
|
||||
PR_AddBuiltin (pr, "Hash_Find", bi_Hash_Find, -1);
|
||||
PR_AddBuiltin (pr, "Hash_FindElement", bi_Hash_FindElement, -1);
|
||||
PR_AddBuiltin (pr, "Hash_FindList", bi_Hash_FindList, -1);
|
||||
PR_AddBuiltin (pr, "Hash_FindElementList", bi_Hash_FindElementList, -1);
|
||||
PR_AddBuiltin (pr, "Hash_Del", bi_Hash_Del, -1);
|
||||
PR_AddBuiltin (pr, "Hash_DelElement", bi_Hash_DelElement, -1);
|
||||
PR_AddBuiltin (pr, "Hash_Free", bi_Hash_Free, -1);
|
||||
PR_AddBuiltin (pr, "Hash_String", bi_Hash_String, -1);
|
||||
PR_AddBuiltin (pr, "Hash_Buffer", bi_Hash_Buffer, -1);
|
||||
PR_AddBuiltin (pr, "Hash_GetList", bi_Hash_GetList, -1);
|
||||
PR_AddBuiltin (pr, "Hash_Stats", bi_Hash_Stats, -1);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
|
|
@ -224,6 +224,19 @@ bi_il_clear (progs_t *pr, void *data)
|
|||
}
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"InputLine_Create", bi_InputLine_Create, -1},
|
||||
{"InputLine_SetUserData", bi_InputLine_SetUserData, -1},
|
||||
{"InputLine_SetWidth", bi_InputLine_SetWidth, -1},
|
||||
{"InputLine_SetText", bi_InputLine_SetText, -1},
|
||||
{"InputLine_GetText", bi_InputLine_GetText, -1},
|
||||
{"InputLine_Destroy", bi_InputLine_Destroy, -1},
|
||||
{"InputLine_Clear", bi_InputLine_Clear, -1},
|
||||
{"InputLine_Process", bi_InputLine_Process, -1},
|
||||
{"InputLine_Draw", bi_InputLine_Draw, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
InputLine_Progs_Init (progs_t *pr)
|
||||
{
|
||||
|
@ -232,16 +245,7 @@ InputLine_Progs_Init (progs_t *pr)
|
|||
res->lines = calloc (sizeof (inputline_t *), res->max_lines);
|
||||
|
||||
PR_Resources_Register (pr, "InputLine", res, bi_il_clear);
|
||||
PR_AddBuiltin (pr, "InputLine_Create", bi_InputLine_Create, -1);
|
||||
PR_AddBuiltin (pr, "InputLine_SetUserData",
|
||||
bi_InputLine_SetUserData, -1);
|
||||
PR_AddBuiltin (pr, "InputLine_SetWidth", bi_InputLine_SetWidth, -1);
|
||||
PR_AddBuiltin (pr, "InputLine_SetText", bi_InputLine_SetText, -1);
|
||||
PR_AddBuiltin (pr, "InputLine_GetText", bi_InputLine_GetText, -1);
|
||||
PR_AddBuiltin (pr, "InputLine_Destroy", bi_InputLine_Destroy, -1);
|
||||
PR_AddBuiltin (pr, "InputLine_Clear", bi_InputLine_Clear, -1);
|
||||
PR_AddBuiltin (pr, "InputLine_Process", bi_InputLine_Process, -1);
|
||||
PR_AddBuiltin (pr, "InputLine_Draw", bi_InputLine_Draw, -1);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -169,6 +169,20 @@ plist_compare (void *k1, void *k2, void *unused)
|
|||
return k1 == k2;
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"PL_GetPropertyList", bi_PL_GetPropertyList, -1},
|
||||
{"PL_ObjectForKey", bi_PL_ObjectForKey, -1},
|
||||
{"PL_ObjectAtIndex", bi_PL_ObjectAtIndex, -1},
|
||||
{"PL_D_AddObject", bi_PL_D_AddObject, -1},
|
||||
{"PL_A_AddObject", bi_PL_A_AddObject, -1},
|
||||
{"PL_A_InsertObjectAtIndex", bi_PL_A_InsertObjectAtIndex, -1},
|
||||
{"PL_NewDictionary", bi_PL_NewDictionary, -1},
|
||||
{"PL_NewArray", bi_PL_NewArray, -1},
|
||||
// {"PL_NewData", bi_PL_NewData, -1},
|
||||
{"PL_NewString", bi_PL_NewString, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
Plist_Progs_Init (progs_t *pr)
|
||||
{
|
||||
|
@ -177,14 +191,5 @@ Plist_Progs_Init (progs_t *pr)
|
|||
Hash_SetHashCompare (res->items, plist_get_hash, plist_compare);
|
||||
|
||||
PR_Resources_Register (pr, "plist", res, bi_plist_clear);
|
||||
PR_AddBuiltin (pr, "PL_GetPropertyList", bi_PL_GetPropertyList, -1);
|
||||
PR_AddBuiltin (pr, "PL_ObjectForKey", bi_PL_ObjectForKey, -1);
|
||||
PR_AddBuiltin (pr, "PL_ObjectAtIndex", bi_PL_ObjectAtIndex, -1);
|
||||
PR_AddBuiltin (pr, "PL_D_AddObject", bi_PL_D_AddObject, -1);
|
||||
PR_AddBuiltin (pr, "PL_A_AddObject", bi_PL_A_AddObject, -1);
|
||||
PR_AddBuiltin (pr, "PL_A_InsertObjectAtIndex", bi_PL_A_InsertObjectAtIndex, -1);
|
||||
PR_AddBuiltin (pr, "PL_NewDictionary", bi_PL_NewDictionary, -1);
|
||||
PR_AddBuiltin (pr, "PL_NewArray", bi_PL_NewArray, -1);
|
||||
//PR_AddBuiltin (pr, "PL_NewData", bi_PL_NewData, -1);
|
||||
PR_AddBuiltin (pr, "PL_NewString", bi_PL_NewString, -1);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
|
|
@ -268,6 +268,37 @@ bi_Qfilesize (progs_t *pr)
|
|||
R_INT (pr) = Qfilesize (*h);
|
||||
}
|
||||
|
||||
static builtin_t secure_builtins[] = {
|
||||
{"Qrename", secured, -1},
|
||||
{"Qremove", secured, -1},
|
||||
{"Qopen", secured, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
static builtin_t insecure_builtins[] = {
|
||||
{"Qrename", bi_Qrename, -1},
|
||||
{"Qremove", bi_Qremove, -1},
|
||||
{"Qopen", bi_Qopen, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"Qclose", bi_Qclose, -1},
|
||||
{"Qgetline", bi_Qgetline, -1},
|
||||
{"Qread", bi_Qread, -1},
|
||||
{"Qwrite", bi_Qwrite, -1},
|
||||
{"Qputs", bi_Qputs, -1},
|
||||
// {"Qgets", bi_Qgets, -1},
|
||||
{"Qgetc", bi_Qgetc, -1},
|
||||
{"Qputc", bi_Qputc, -1},
|
||||
{"Qseek", bi_Qseek, -1},
|
||||
{"Qtell", bi_Qtell, -1},
|
||||
{"Qflush", bi_Qflush, -1},
|
||||
{"Qeof", bi_Qeof, -1},
|
||||
{"Qfilesize", bi_Qfilesize, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
QFile_Progs_Init (progs_t *pr, int secure)
|
||||
{
|
||||
|
@ -275,25 +306,9 @@ QFile_Progs_Init (progs_t *pr, int secure)
|
|||
|
||||
PR_Resources_Register (pr, "QFile", res, bi_qfile_clear);
|
||||
if (secure) {
|
||||
PR_AddBuiltin (pr, "Qrename", secured, -1);
|
||||
PR_AddBuiltin (pr, "Qremove", secured, -1);
|
||||
PR_AddBuiltin (pr, "Qopen", secured, -1);
|
||||
PR_RegisterBuiltins (pr, secure_builtins);
|
||||
} else {
|
||||
PR_AddBuiltin (pr, "Qrename", bi_Qrename, -1);
|
||||
PR_AddBuiltin (pr, "Qremove", bi_Qremove, -1);
|
||||
PR_AddBuiltin (pr, "Qopen", bi_Qopen, -1);
|
||||
PR_RegisterBuiltins (pr, insecure_builtins);
|
||||
}
|
||||
PR_AddBuiltin (pr, "Qclose", bi_Qclose, -1);
|
||||
PR_AddBuiltin (pr, "Qgetline", bi_Qgetline, -1);
|
||||
PR_AddBuiltin (pr, "Qread", bi_Qread, -1);
|
||||
PR_AddBuiltin (pr, "Qwrite", bi_Qwrite, -1);
|
||||
PR_AddBuiltin (pr, "Qputs", bi_Qputs, -1);
|
||||
// PR_AddBuiltin (pr, "Qgets", bi_Qgets, -1);
|
||||
PR_AddBuiltin (pr, "Qgetc", bi_Qgetc, -1);
|
||||
PR_AddBuiltin (pr, "Qputc", bi_Qputc, -1);
|
||||
PR_AddBuiltin (pr, "Qseek", bi_Qseek, -1);
|
||||
PR_AddBuiltin (pr, "Qtell", bi_Qtell, -1);
|
||||
PR_AddBuiltin (pr, "Qflush", bi_Qflush, -1);
|
||||
PR_AddBuiltin (pr, "Qeof", bi_Qeof, -1);
|
||||
PR_AddBuiltin (pr, "Qfilesize", bi_Qfilesize, -1);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
|
|
@ -116,11 +116,16 @@ bi_QFS_WriteFile (progs_t *pr)
|
|||
QFS_WriteFile (va ("%s/%s", qfs_gamedir->dir.def, filename), buf, count);
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"QFS_Rename", bi_QFS_Rename, -1},
|
||||
{"QFS_LoadFile", bi_QFS_LoadFile, -1},
|
||||
{"QFS_OpenFile", bi_QFS_OpenFile, -1},
|
||||
{"QFS_WriteFile", bi_QFS_WriteFile, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
QFS_Progs_Init (progs_t *pr)
|
||||
{
|
||||
PR_AddBuiltin (pr, "QFS_Rename", bi_QFS_Rename, -1);
|
||||
PR_AddBuiltin (pr, "QFS_LoadFile", bi_QFS_LoadFile, -1);
|
||||
PR_AddBuiltin (pr, "QFS_OpenFile", bi_QFS_OpenFile, -1);
|
||||
PR_AddBuiltin (pr, "QFS_WriteFile", bi_QFS_WriteFile, -1);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
|
|
@ -626,16 +626,11 @@ static builtin_t builtins[] = {
|
|||
{"stoi", PF_stoi, 113},
|
||||
{"stov", PF_stov, 114},
|
||||
{"gametype", PR_gametype, 115},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
PR_Cmds_Init (progs_t *pr)
|
||||
{
|
||||
int i;
|
||||
builtin_t *bi;
|
||||
|
||||
for (i = 0; i < sizeof (builtins) / sizeof (builtins[0]); i++) {
|
||||
bi = builtins + i;
|
||||
PR_AddBuiltin (pr, bi->name, bi->proc, bi->binum);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
};
|
||||
|
|
|
@ -54,52 +54,82 @@ static __attribute__ ((unused)) const char rcsid[] =
|
|||
|
||||
#include "compat.h"
|
||||
|
||||
/*
|
||||
Builtins are arranged into groups of 65536 to allow for diffent expantion
|
||||
sets. eg, stock id is 0x0000xxxx, quakeforge is 0x000fxxxx. predefined
|
||||
groups go up to 0x0fffxxxx allowing 4096 different groups. Builtins
|
||||
0x10000000 to 0x7fffffff are reserved for auto-allocation. The range
|
||||
0x8000000 to 0xffffffff is unavailable due to the builtin number being
|
||||
a negative statement address.
|
||||
*/
|
||||
#define PR_AUTOBUILTIN 0x10000000
|
||||
|
||||
static const char *
|
||||
builtin_get_key (void *_bi, void *unused)
|
||||
{
|
||||
builtin_t *bi = (builtin_t *)_bi;
|
||||
|
||||
return bi->name;
|
||||
}
|
||||
|
||||
#define PR_AUTOBUILTIN 120
|
||||
void
|
||||
PR_AddBuiltin (progs_t *pr, const char *name, builtin_proc builtin, int num)
|
||||
static unsigned long
|
||||
builtin_get_hash (void *_bi, void *unused)
|
||||
{
|
||||
int i;
|
||||
builtin_t *bi = (builtin_t *)_bi;
|
||||
|
||||
if (!pr->builtin_hash)
|
||||
return bi->binum;
|
||||
}
|
||||
|
||||
static int
|
||||
builtin_compare (void *_bia, void *_bib, void *unused)
|
||||
{
|
||||
builtin_t *bia = (builtin_t *)_bia;
|
||||
builtin_t *bib = (builtin_t *)_bib;
|
||||
|
||||
return bia->binum == bib->binum;
|
||||
}
|
||||
|
||||
static int
|
||||
builtin_next (progs_t *pr)
|
||||
{
|
||||
if (!pr->bi_next)
|
||||
pr->bi_next = PR_AUTOBUILTIN;
|
||||
if (pr->bi_next == 0x80000000)
|
||||
PR_Error (pr, "too many auto-allocated builtins");
|
||||
return pr->bi_next++;
|
||||
}
|
||||
|
||||
void
|
||||
PR_RegisterBuiltins (progs_t *pr, builtin_t *builtins)
|
||||
{
|
||||
builtin_t *bi;
|
||||
|
||||
if (!pr->builtin_hash) {
|
||||
pr->builtin_hash = Hash_NewTable (1021, builtin_get_key, 0, pr);
|
||||
|
||||
if (pr->numbuiltins == 0) {
|
||||
pr->builtins = calloc (PR_AUTOBUILTIN, sizeof (builtin_t*));
|
||||
pr->numbuiltins = PR_AUTOBUILTIN;
|
||||
if (!pr->builtins)
|
||||
PR_Error (pr, "PR_AddBuiltin: memory allocation error!");
|
||||
pr->builtin_num_hash = Hash_NewTable (1021, 0, 0, pr);
|
||||
Hash_SetHashCompare (pr->builtin_num_hash, builtin_get_hash,
|
||||
builtin_compare);
|
||||
}
|
||||
|
||||
if (num < 0) {
|
||||
for (i = PR_AUTOBUILTIN;
|
||||
i < pr->numbuiltins && pr->builtins[i]; i++)
|
||||
;
|
||||
if (i >= pr->numbuiltins) {
|
||||
pr->numbuiltins++;
|
||||
pr->builtins = realloc (pr->builtins,
|
||||
pr->numbuiltins * sizeof (builtin_t*));
|
||||
if (!pr->builtins)
|
||||
PR_Error (pr, "PR_AddBuiltin: memory allocation error!");
|
||||
while (builtins->name) {
|
||||
if (builtins->binum == 0 || builtins->binum >= PR_AUTOBUILTIN)
|
||||
PR_Error (pr, "bad builtin number: %s = #%d", builtins->name,
|
||||
builtins->binum);
|
||||
|
||||
if (builtins->binum < 0)
|
||||
builtins->binum = builtin_next (pr);
|
||||
|
||||
if ((bi = Hash_Find (pr->builtin_hash, builtins->name))
|
||||
|| (bi = Hash_FindElement (pr->builtin_num_hash, builtins)))
|
||||
PR_Error (pr, "builtin %s = #%d already defined (%s = #%d)",
|
||||
builtins->name, builtins->binum,
|
||||
bi->name, bi->binum);
|
||||
|
||||
Hash_Add (pr->builtin_hash, builtins);
|
||||
Hash_AddElement (pr->builtin_num_hash, builtins);
|
||||
|
||||
builtins++;
|
||||
}
|
||||
} else {
|
||||
if (num >= PR_AUTOBUILTIN || num == 0)
|
||||
PR_Error (pr, "PR_AddBuiltin: invalid builtin number.");
|
||||
if (pr->builtins[num])
|
||||
PR_Error (pr, "PR_AddBuiltin: builtin number already exists.");
|
||||
i = num;
|
||||
}
|
||||
pr->builtins[i] = malloc (sizeof (builtin_t));
|
||||
pr->builtins[i]->proc = builtin;
|
||||
pr->builtins[i]->name = name;
|
||||
pr->builtins[i]->binum = i;
|
||||
Hash_Add (pr->builtin_hash, pr->builtins[i]);
|
||||
}
|
||||
|
||||
builtin_t *
|
||||
|
@ -108,6 +138,15 @@ PR_FindBuiltin (progs_t *pr, const char *name)
|
|||
return (builtin_t *) Hash_Find (pr->builtin_hash, name);
|
||||
}
|
||||
|
||||
builtin_t *
|
||||
PR_FindBuiltinNum (progs_t *pr, int num)
|
||||
{
|
||||
builtin_t bi;
|
||||
|
||||
bi.binum = num;
|
||||
return (builtin_t *) Hash_FindElement (pr->builtin_num_hash, &bi);
|
||||
}
|
||||
|
||||
static void
|
||||
bi_no_function (progs_t *pr)
|
||||
{
|
||||
|
@ -150,9 +189,8 @@ PR_RelocateBuiltins (progs_t *pr)
|
|||
func->first_statement = -bi->binum;
|
||||
}
|
||||
|
||||
ind = -func->first_statement;
|
||||
if (ind >= pr->numbuiltins || !(bi = pr->builtins[ind])
|
||||
|| !(proc = bi->proc)) {
|
||||
bi = PR_FindBuiltinNum (pr, -func->first_statement);
|
||||
if (!bi || !(proc = bi->proc)) {
|
||||
Sys_DPrintf ("WARNING: Bad builtin call number: %s = #%d\n",
|
||||
bi_name, ind);
|
||||
proc = bi_no_function;
|
||||
|
|
|
@ -53,21 +53,16 @@ static __attribute__ ((unused)) const char rcsid[] =
|
|||
static void
|
||||
call_function (progs_t *pr, func_t func)
|
||||
{
|
||||
dfunction_t *newf;
|
||||
dfunction_t *f;
|
||||
|
||||
if (!func)
|
||||
PR_RunError (pr, "NULL function");
|
||||
newf = pr->pr_functions + func;
|
||||
if (newf->first_statement < 0) {
|
||||
f = pr->pr_functions + func;
|
||||
if (f->first_statement < 0) {
|
||||
// negative statements are built in functions
|
||||
int i = -newf->first_statement;
|
||||
|
||||
if (i >= pr->numbuiltins || !pr->builtins[i]
|
||||
|| !pr->builtins[i]->proc)
|
||||
PR_RunError (pr, "Bad builtin call number");
|
||||
pr->builtins[i]->proc (pr);
|
||||
((bfunction_t *) f)->func (pr);
|
||||
} else {
|
||||
PR_EnterFunction (pr, newf);
|
||||
PR_EnterFunction (pr, f);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -919,79 +914,73 @@ pr__c_Object__conformsToProtocol_ (progs_t *pr)
|
|||
|
||||
//====================================================================
|
||||
|
||||
static struct {
|
||||
const char *name;
|
||||
void (*func)(progs_t *pr);
|
||||
} obj_methods [] = {
|
||||
{"__obj_exec_class", pr___obj_exec_class},
|
||||
static builtin_t obj_methods [] = {
|
||||
{"__obj_exec_class", pr___obj_exec_class, -1},
|
||||
|
||||
{"obj_error", pr_obj_error},
|
||||
{"obj_verror", pr_obj_verror},
|
||||
{"obj_set_error_handler", pr_obj_set_error_handler},
|
||||
{"obj_msg_lookup", pr_obj_msg_lookup},
|
||||
{"obj_msg_lookup_super", pr_obj_msg_lookup_super},
|
||||
{"obj_msg_sendv", pr_obj_msg_sendv},
|
||||
{"obj_malloc", pr_obj_malloc},
|
||||
{"obj_atomic_malloc", pr_obj_atomic_malloc},
|
||||
{"obj_valloc", pr_obj_valloc},
|
||||
{"obj_realloc", pr_obj_realloc},
|
||||
{"obj_calloc", pr_obj_calloc},
|
||||
{"obj_free", pr_obj_free},
|
||||
{"obj_get_uninstalled_dtable", pr_obj_get_uninstalled_dtable},
|
||||
{"obj_msgSend", pr_obj_msgSend},
|
||||
{"obj_msgSend_super", pr_obj_msgSend_super},
|
||||
{"obj_error", pr_obj_error, -1},
|
||||
{"obj_verror", pr_obj_verror, -1},
|
||||
{"obj_set_error_handler", pr_obj_set_error_handler, -1},
|
||||
{"obj_msg_lookup", pr_obj_msg_lookup, -1},
|
||||
{"obj_msg_lookup_super", pr_obj_msg_lookup_super, -1},
|
||||
{"obj_msg_sendv", pr_obj_msg_sendv, -1},
|
||||
{"obj_malloc", pr_obj_malloc, -1},
|
||||
{"obj_atomic_malloc", pr_obj_atomic_malloc, -1},
|
||||
{"obj_valloc", pr_obj_valloc, -1},
|
||||
{"obj_realloc", pr_obj_realloc, -1},
|
||||
{"obj_calloc", pr_obj_calloc, -1},
|
||||
{"obj_free", pr_obj_free, -1},
|
||||
{"obj_get_uninstalled_dtable", pr_obj_get_uninstalled_dtable, -1},
|
||||
{"obj_msgSend", pr_obj_msgSend, -1},
|
||||
{"obj_msgSend_super", pr_obj_msgSend_super, -1},
|
||||
|
||||
{"obj_get_class", pr_obj_get_class},
|
||||
{"obj_lookup_class", pr_obj_lookup_class},
|
||||
{"obj_next_class", pr_obj_next_class},
|
||||
{"obj_get_class", pr_obj_get_class, -1},
|
||||
{"obj_lookup_class", pr_obj_lookup_class, -1},
|
||||
{"obj_next_class", pr_obj_next_class, -1},
|
||||
|
||||
{"sel_get_name", pr_sel_get_name},
|
||||
{"sel_get_type", pr_sel_get_type},
|
||||
{"sel_get_uid", pr_sel_get_uid},
|
||||
{"sel_register_name", pr_sel_register_name},
|
||||
{"sel_is_mapped", pr_sel_is_mapped},
|
||||
{"sel_get_name", pr_sel_get_name, -1},
|
||||
{"sel_get_type", pr_sel_get_type, -1},
|
||||
{"sel_get_uid", pr_sel_get_uid, -1},
|
||||
{"sel_register_name", pr_sel_register_name, -1},
|
||||
{"sel_is_mapped", pr_sel_is_mapped, -1},
|
||||
|
||||
{"class_get_class_method", pr_class_get_class_method},
|
||||
{"class_get_instance_method", pr_class_get_instance_method},
|
||||
{"class_pose_as", pr_class_pose_as},
|
||||
{"class_create_instance", pr_class_create_instance},
|
||||
{"class_get_class_name", pr_class_get_class_name},
|
||||
{"class_get_instance_size", pr_class_get_instance_size},
|
||||
{"class_get_meta_class", pr_class_get_meta_class},
|
||||
{"class_get_super_class", pr_class_get_super_class},
|
||||
{"class_get_version", pr_class_get_version},
|
||||
{"class_is_class", pr_class_is_class},
|
||||
{"class_is_meta_class", pr_class_is_meta_class},
|
||||
{"class_set_version", pr_class_set_version},
|
||||
{"class_get_gc_object_type", pr_class_get_gc_object_type},
|
||||
{"class_ivar_set_gcinvisible", pr_class_ivar_set_gcinvisible},
|
||||
{"class_get_class_method", pr_class_get_class_method, -1},
|
||||
{"class_get_instance_method", pr_class_get_instance_method, -1},
|
||||
{"class_pose_as", pr_class_pose_as, -1},
|
||||
{"class_create_instance", pr_class_create_instance, -1},
|
||||
{"class_get_class_name", pr_class_get_class_name, -1},
|
||||
{"class_get_instance_size", pr_class_get_instance_size, -1},
|
||||
{"class_get_meta_class", pr_class_get_meta_class, -1},
|
||||
{"class_get_super_class", pr_class_get_super_class, -1},
|
||||
{"class_get_version", pr_class_get_version, -1},
|
||||
{"class_is_class", pr_class_is_class, -1},
|
||||
{"class_is_meta_class", pr_class_is_meta_class, -1},
|
||||
{"class_set_version", pr_class_set_version, -1},
|
||||
{"class_get_gc_object_type", pr_class_get_gc_object_type, -1},
|
||||
{"class_ivar_set_gcinvisible", pr_class_ivar_set_gcinvisible, -1},
|
||||
|
||||
{"method_get_imp", pr_method_get_imp},
|
||||
{"get_imp", pr_get_imp},
|
||||
{"method_get_imp", pr_method_get_imp, -1},
|
||||
{"get_imp", pr_get_imp, -1},
|
||||
|
||||
{"object_copy", pr_object_copy},
|
||||
{"object_dispose", pr_object_dispose},
|
||||
{"object_get_class", pr_object_get_class},
|
||||
{"object_get_class_name", pr_object_get_class_name},
|
||||
{"object_get_meta_class", pr_object_get_meta_class},
|
||||
{"object_get_super_class", pr_object_get_super_class},
|
||||
{"object_is_class", pr_object_is_class},
|
||||
{"object_is_instance", pr_object_is_instance},
|
||||
{"object_is_meta_class", pr_object_is_meta_class},
|
||||
{"object_copy", pr_object_copy, -1},
|
||||
{"object_dispose", pr_object_dispose, -1},
|
||||
{"object_get_class", pr_object_get_class, -1},
|
||||
{"object_get_class_name", pr_object_get_class_name, -1},
|
||||
{"object_get_meta_class", pr_object_get_meta_class, -1},
|
||||
{"object_get_super_class", pr_object_get_super_class, -1},
|
||||
{"object_is_class", pr_object_is_class, -1},
|
||||
{"object_is_instance", pr_object_is_instance, -1},
|
||||
{"object_is_meta_class", pr_object_is_meta_class, -1},
|
||||
|
||||
{"_i_Object__hash", pr__i_Object__hash},
|
||||
{"_i_Object_error_error_", pr__i_Object_error_error_},
|
||||
{"_c_Object__conformsToProtocol_", pr__c_Object__conformsToProtocol_},
|
||||
{"_i_Object__hash", pr__i_Object__hash, -1},
|
||||
{"_i_Object_error_error_", pr__i_Object_error_error_, -1},
|
||||
{"_c_Object__conformsToProtocol_", pr__c_Object__conformsToProtocol_, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
PR_Obj_Progs_Init (progs_t *pr)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < sizeof (obj_methods) / sizeof (obj_methods[0]); i++) {
|
||||
PR_AddBuiltin (pr, obj_methods[i].name, obj_methods[i].func, -1);
|
||||
}
|
||||
PR_RegisterBuiltins (pr, obj_methods);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
|
@ -221,6 +221,19 @@ bi_draw_clear (progs_t *pr, void *data)
|
|||
Hash_FlushTable (res->pic_hash);
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"Draw_CachePic", bi_Draw_CachePic, -1},
|
||||
{"Draw_Pic", bi_Draw_Pic, -1},
|
||||
{"Draw_SubPic", bi_Draw_SubPic, -1},
|
||||
{"Draw_CenterPic", bi_Draw_CenterPic, -1},
|
||||
{"Draw_Character", bi_Draw_Character, -1},
|
||||
{"Draw_String", bi_Draw_String, -1},
|
||||
{"Draw_nString", bi_Draw_nString, -1},
|
||||
{"Draw_AltString", bi_Draw_AltString, -1},
|
||||
{"Draw_Fill", bi_Draw_Fill, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
R_Progs_Init (progs_t *pr)
|
||||
{
|
||||
|
@ -228,13 +241,5 @@ R_Progs_Init (progs_t *pr)
|
|||
res->pic_hash = Hash_NewTable (61, bi_draw_get_key, bi_draw_free, 0);
|
||||
|
||||
PR_Resources_Register (pr, "Draw", res, bi_draw_clear);
|
||||
PR_AddBuiltin (pr, "Draw_CachePic", bi_Draw_CachePic, -1);
|
||||
PR_AddBuiltin (pr, "Draw_Pic", bi_Draw_Pic, -1);
|
||||
PR_AddBuiltin (pr, "Draw_SubPic", bi_Draw_SubPic, -1);
|
||||
PR_AddBuiltin (pr, "Draw_CenterPic", bi_Draw_CenterPic, -1);
|
||||
PR_AddBuiltin (pr, "Draw_Character", bi_Draw_Character, -1);
|
||||
PR_AddBuiltin (pr, "Draw_String", bi_Draw_String, -1);
|
||||
PR_AddBuiltin (pr, "Draw_nString", bi_Draw_nString, -1);
|
||||
PR_AddBuiltin (pr, "Draw_AltString", bi_Draw_AltString, -1);
|
||||
PR_AddBuiltin (pr, "Draw_Fill", bi_Draw_Fill, -1);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
|
|
@ -130,13 +130,17 @@ bi_Key_KeynumToString (progs_t *pr)
|
|||
RETURN_STRING (pr, Key_KeynumToString (keynum));
|
||||
};
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"Key_SetBinding", bi_Key_SetBinding, -1},
|
||||
{"Key_LookupBinding", bi_Key_LookupBinding, -1},
|
||||
{"Key_CountBinding", bi_Key_CountBinding, -1},
|
||||
{"Key_KeynumToString", bi_Key_KeynumToString, -1},
|
||||
// NEED THIS ?// {"Key_StringToKeynum", bi_Key_KeynumToString, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
Key_Progs_Init (progs_t *pr)
|
||||
{
|
||||
PR_AddBuiltin (pr, "Key_SetBinding", bi_Key_SetBinding, -1);
|
||||
PR_AddBuiltin (pr, "Key_LookupBinding", bi_Key_LookupBinding, -1);
|
||||
PR_AddBuiltin (pr, "Key_CountBinding", bi_Key_CountBinding, -1);
|
||||
PR_AddBuiltin (pr, "Key_KeynumToString", bi_Key_KeynumToString, -1);
|
||||
// NEED THIS ?// PR_AddBuiltin (pr, "Key_StringToKeynum", bi_Key_KeynumToString, -1);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
|
|
@ -63,6 +63,7 @@ static __attribute__ ((unused)) const char rcsid[] =
|
|||
Dumps self.
|
||||
|
||||
error (value)
|
||||
// void (string e) error
|
||||
*/
|
||||
void
|
||||
PF_error (progs_t *pr)
|
||||
|
@ -86,6 +87,7 @@ PF_error (progs_t *pr)
|
|||
removed, but the level can continue.
|
||||
|
||||
objerror (value)
|
||||
// void (string e) objerror
|
||||
*/
|
||||
void
|
||||
PF_objerror (progs_t *pr)
|
||||
|
@ -107,7 +109,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
|
||||
PF_makevectors (progs_t *pr)
|
||||
|
@ -126,6 +128,7 @@ PF_makevectors (progs_t *pr)
|
|||
teleported.
|
||||
|
||||
setorigin (entity, origin)
|
||||
// void (entity e, vector o) setorigin
|
||||
*/
|
||||
void
|
||||
PF_setorigin (progs_t *pr)
|
||||
|
@ -215,6 +218,7 @@ SetMinMaxSize (progs_t *pr, edict_t *e, const vec3_t min, const vec3_t max,
|
|||
the size box is rotated by the current angle
|
||||
|
||||
setsize (entity, minvector, maxvector)
|
||||
// void (entity e, vector min, vector max) setsize
|
||||
*/
|
||||
void
|
||||
PF_setsize (progs_t *pr)
|
||||
|
@ -232,6 +236,7 @@ PF_setsize (progs_t *pr)
|
|||
PF_setmodel
|
||||
|
||||
setmodel (entity, model)
|
||||
// void (entity e, string m) setmodel
|
||||
*/
|
||||
void
|
||||
PF_setmodel (progs_t *pr)
|
||||
|
@ -269,6 +274,7 @@ PF_setmodel (progs_t *pr)
|
|||
broadcast print to everyone on server
|
||||
|
||||
bprint (value)
|
||||
// void (string s) bprint
|
||||
*/
|
||||
void
|
||||
PF_bprint (progs_t *pr)
|
||||
|
@ -285,6 +291,7 @@ PF_bprint (progs_t *pr)
|
|||
single print to a specific client
|
||||
|
||||
sprint (clientent, value)
|
||||
// void (entity client, string s) sprint
|
||||
*/
|
||||
void
|
||||
PF_sprint (progs_t *pr)
|
||||
|
@ -313,6 +320,7 @@ PF_sprint (progs_t *pr)
|
|||
single print to a specific client
|
||||
|
||||
centerprint (clientent, value)
|
||||
// void (...) centerprint
|
||||
*/
|
||||
void
|
||||
PF_centerprint (progs_t *pr)
|
||||
|
@ -335,6 +343,7 @@ PF_centerprint (progs_t *pr)
|
|||
MSG_WriteString (&cl->message, s);
|
||||
}
|
||||
|
||||
// void (vector o, vector d, float color, float count) particle
|
||||
void
|
||||
PF_particle (progs_t *pr)
|
||||
{
|
||||
|
@ -351,6 +360,7 @@ PF_particle (progs_t *pr)
|
|||
|
||||
/*
|
||||
PF_ambientsound
|
||||
// void (vector pos, string samp, float vol, float atten) ambientsound
|
||||
*/
|
||||
void
|
||||
PF_ambientsound (progs_t *pr)
|
||||
|
@ -396,6 +406,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
|
||||
*/
|
||||
void
|
||||
PF_sound (progs_t *pr)
|
||||
|
@ -429,6 +440,7 @@ PF_sound (progs_t *pr)
|
|||
entities if the tryents flag is set.
|
||||
|
||||
traceline (vector1, vector2, tryents)
|
||||
// float (vector v1, vector v2, float tryents) traceline
|
||||
*/
|
||||
void
|
||||
PF_traceline (progs_t *pr)
|
||||
|
@ -538,6 +550,7 @@ int c_invis, c_notvis;
|
|||
it is not returned at all.
|
||||
|
||||
name checkclient ()
|
||||
// entity () clientlist
|
||||
*/
|
||||
void
|
||||
PF_checkclient (progs_t *pr)
|
||||
|
@ -579,6 +592,7 @@ PF_checkclient (progs_t *pr)
|
|||
Sends text over to the client's execution buffer
|
||||
|
||||
stuffcmd (clientent, value)
|
||||
// void (entity client, string s) stuffcmd
|
||||
*/
|
||||
void
|
||||
PF_stuffcmd (progs_t *pr)
|
||||
|
@ -604,6 +618,7 @@ PF_stuffcmd (progs_t *pr)
|
|||
Inserts text into the server console's execution buffer
|
||||
|
||||
localcmd (string)
|
||||
// void (string s) localcmd
|
||||
*/
|
||||
void
|
||||
PF_localcmd (progs_t *pr)
|
||||
|
@ -620,6 +635,7 @@ PF_localcmd (progs_t *pr)
|
|||
Returns a chain of entities that have origins within a spherical area
|
||||
|
||||
findradius (origin, radius)
|
||||
// entity (vector org, float rad) findradius
|
||||
*/
|
||||
void
|
||||
PF_findradius (progs_t *pr)
|
||||
|
@ -657,6 +673,7 @@ PF_findradius (progs_t *pr)
|
|||
RETURN_EDICT (pr, chain);
|
||||
}
|
||||
|
||||
// entity () spawn
|
||||
void
|
||||
PF_Spawn (progs_t *pr)
|
||||
{
|
||||
|
@ -666,6 +683,7 @@ PF_Spawn (progs_t *pr)
|
|||
RETURN_EDICT (pr, ed);
|
||||
}
|
||||
|
||||
// void (entity e) remove
|
||||
void
|
||||
PF_Remove (progs_t *pr)
|
||||
{
|
||||
|
@ -682,6 +700,8 @@ PR_CheckEmptyString (progs_t *pr, const char *s)
|
|||
PR_RunError (pr, "Bad string");
|
||||
}
|
||||
|
||||
// string (string s) precache_file
|
||||
// string (string s) precache_file2
|
||||
void
|
||||
PF_precache_file (progs_t *pr)
|
||||
{
|
||||
|
@ -689,6 +709,8 @@ PF_precache_file (progs_t *pr)
|
|||
R_INT (pr) = P_INT (pr, 0);
|
||||
}
|
||||
|
||||
// void (string s) precache_sound
|
||||
// string (string s) precache_sound2
|
||||
void
|
||||
PF_precache_sound (progs_t *pr)
|
||||
{
|
||||
|
@ -714,6 +736,8 @@ PF_precache_sound (progs_t *pr)
|
|||
PR_RunError (pr, "PF_precache_sound: overflow");
|
||||
}
|
||||
|
||||
// void (string s) precache_model
|
||||
// string (string s) precache_model2
|
||||
void
|
||||
PF_precache_model (progs_t *pr)
|
||||
{
|
||||
|
@ -744,6 +768,7 @@ PF_precache_model (progs_t *pr)
|
|||
PF_walkmove
|
||||
|
||||
float (float yaw, float dist) walkmove
|
||||
// float (float yaw, float dist) walkmove
|
||||
*/
|
||||
void
|
||||
PF_walkmove (progs_t *pr)
|
||||
|
@ -784,6 +809,7 @@ PF_walkmove (progs_t *pr)
|
|||
PF_droptofloor
|
||||
|
||||
void () droptofloor
|
||||
// float () droptofloor
|
||||
*/
|
||||
void
|
||||
PF_droptofloor (progs_t *pr)
|
||||
|
@ -815,6 +841,7 @@ PF_droptofloor (progs_t *pr)
|
|||
PF_lightstyle
|
||||
|
||||
void (float style, string value) lightstyle
|
||||
// void (float style, string value) lightstyle
|
||||
*/
|
||||
void
|
||||
PF_lightstyle (progs_t *pr)
|
||||
|
@ -841,6 +868,7 @@ PF_lightstyle (progs_t *pr)
|
|||
}
|
||||
}
|
||||
|
||||
// float (entity e) checkbottom
|
||||
void
|
||||
PF_checkbottom (progs_t *pr)
|
||||
{
|
||||
|
@ -851,6 +879,7 @@ PF_checkbottom (progs_t *pr)
|
|||
R_FLOAT (pr) = SV_CheckBottom (ent);
|
||||
}
|
||||
|
||||
// float (vector v) pointcontents
|
||||
void
|
||||
PF_pointcontents (progs_t *pr)
|
||||
{
|
||||
|
@ -868,6 +897,7 @@ cvar_t *sv_aim;
|
|||
|
||||
Pick a vector for the player to shoot along
|
||||
vector aim (entity, missilespeed)
|
||||
// vector (entity e, float speed) aim
|
||||
*/
|
||||
void
|
||||
PF_aim (progs_t *pr)
|
||||
|
@ -945,6 +975,7 @@ PF_aim (progs_t *pr)
|
|||
PF_changeyaw
|
||||
|
||||
This was a major timewaster in progs, so it was converted to C
|
||||
// void () ChangeYaw
|
||||
*/
|
||||
void
|
||||
PF_changeyaw (progs_t *pr)
|
||||
|
@ -1018,48 +1049,56 @@ WriteDest (progs_t *pr)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
// void (float to, float f) WriteByte
|
||||
void
|
||||
PF_WriteByte (progs_t *pr)
|
||||
{
|
||||
MSG_WriteByte (WriteDest (pr), P_FLOAT (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, float f) WriteChar
|
||||
void
|
||||
PF_WriteChar (progs_t *pr)
|
||||
{
|
||||
MSG_WriteByte (WriteDest (pr), P_FLOAT (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, float f) WriteShort
|
||||
void
|
||||
PF_WriteShort (progs_t *pr)
|
||||
{
|
||||
MSG_WriteShort (WriteDest (pr), P_FLOAT (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, float f) WriteLong
|
||||
void
|
||||
PF_WriteLong (progs_t *pr)
|
||||
{
|
||||
MSG_WriteLong (WriteDest (pr), P_FLOAT (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, float f) WriteAngle
|
||||
void
|
||||
PF_WriteAngle (progs_t *pr)
|
||||
{
|
||||
MSG_WriteAngle (WriteDest (pr), P_FLOAT (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, float f) WriteCoord
|
||||
void
|
||||
PF_WriteCoord (progs_t *pr)
|
||||
{
|
||||
MSG_WriteCoord (WriteDest (pr), P_FLOAT (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, string s) WriteString
|
||||
void
|
||||
PF_WriteString (progs_t *pr)
|
||||
{
|
||||
MSG_WriteString (WriteDest (pr), P_GSTRING (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, entity s) WriteEntity
|
||||
void
|
||||
PF_WriteEntity (progs_t *pr)
|
||||
{
|
||||
|
@ -1068,6 +1107,7 @@ PF_WriteEntity (progs_t *pr)
|
|||
|
||||
// ============================================================================
|
||||
|
||||
// void (entity e) makestatic
|
||||
void
|
||||
PF_makestatic (progs_t *pr)
|
||||
{
|
||||
|
@ -1092,6 +1132,7 @@ PF_makestatic (progs_t *pr)
|
|||
ED_Free (pr, ent);
|
||||
}
|
||||
|
||||
// void (entity e) setspawnparms
|
||||
void
|
||||
PF_setspawnparms (progs_t *pr)
|
||||
{
|
||||
|
@ -1111,6 +1152,7 @@ PF_setspawnparms (progs_t *pr)
|
|||
sv_globals.parms[i] = client->spawn_parms[i];
|
||||
}
|
||||
|
||||
// void (string s) changelevel
|
||||
void
|
||||
PF_changelevel (progs_t *pr)
|
||||
{
|
||||
|
@ -1129,6 +1171,7 @@ PF_changelevel (progs_t *pr)
|
|||
#define MAX_PF_HULLS 64 // FIXME make dynamic?
|
||||
clip_hull_t *pf_hull_list[MAX_PF_HULLS];
|
||||
|
||||
// integer (entity ent, vector point) hullpointcontents
|
||||
static void
|
||||
PF_hullpointcontents (progs_t *pr)
|
||||
{
|
||||
|
@ -1144,6 +1187,7 @@ PF_hullpointcontents (progs_t *pr)
|
|||
R_INT (pr) = SV_HullPointContents (hull, 0, offset);
|
||||
}
|
||||
|
||||
// vector (integer hull, integer max) getboxbounds
|
||||
static void
|
||||
PF_getboxbounds (progs_t *pr)
|
||||
{
|
||||
|
@ -1160,6 +1204,7 @@ PF_getboxbounds (progs_t *pr)
|
|||
}
|
||||
}
|
||||
|
||||
// integer () getboxhull
|
||||
static void
|
||||
PF_getboxhull (progs_t *pr)
|
||||
{
|
||||
|
@ -1184,6 +1229,7 @@ PF_getboxhull (progs_t *pr)
|
|||
}
|
||||
}
|
||||
|
||||
// void (integer hull) freeboxhull
|
||||
static void
|
||||
PF_freeboxhull (progs_t *pr)
|
||||
{
|
||||
|
@ -1213,6 +1259,7 @@ calc_dist (vec3_t p, vec3_t n, vec3_t *offsets)
|
|||
return DotProduct (v, n);
|
||||
}
|
||||
|
||||
// void (integer hull, vector right, vector forward, vector up, vector mins, vector maxs) rotate_bbox
|
||||
static void
|
||||
PF_rotate_bbox (progs_t *pr)
|
||||
{
|
||||
|
@ -1297,134 +1344,75 @@ PF_Fixme (progs_t *pr)
|
|||
PR_RunError (pr, "unimplemented bulitin function called");
|
||||
}
|
||||
|
||||
|
||||
// float () checkextension
|
||||
static void
|
||||
PF_checkextension (progs_t *pr)
|
||||
{
|
||||
R_FLOAT (pr) = 0; // FIXME: make this function actually useful
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"makevectors", PF_makevectors, 1},
|
||||
{"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},
|
||||
{"writechar", PF_WriteChar, 53},
|
||||
{"writeshort", PF_WriteShort, 54},
|
||||
{"writelong", PF_WriteLong, 55},
|
||||
{"writecoord", PF_WriteCoord, 56},
|
||||
{"writeangle", PF_WriteAngle, 57},
|
||||
{"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},
|
||||
{"hullpointcontents", PF_hullpointcontents, 93},
|
||||
{"getboxbounds", PF_getboxbounds, 94},
|
||||
{"getboxhull", PF_getboxhull, 95},
|
||||
{"freeboxhull", PF_freeboxhull, 96},
|
||||
{"rotate_bbox", PF_rotate_bbox, 97},
|
||||
{"checkextension", PF_checkextension, 99},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
SV_PR_Cmds_Init ()
|
||||
{
|
||||
PR_Cmds_Init (&sv_pr_state);
|
||||
PR_Obj_Progs_Init (&sv_pr_state);
|
||||
|
||||
// void (entity e) makevectors
|
||||
PR_AddBuiltin (&sv_pr_state, "makevectors", PF_makevectors, 1);
|
||||
// void (entity e, vector o) setorigin
|
||||
PR_AddBuiltin (&sv_pr_state, "setorigin", PF_setorigin, 2);
|
||||
// void (entity e, string m) setmodel
|
||||
PR_AddBuiltin (&sv_pr_state, "setmodel", PF_setmodel, 3);
|
||||
// void (entity e, vector min, vector max) setsize
|
||||
PR_AddBuiltin (&sv_pr_state, "setsize", PF_setsize, 4);
|
||||
// void (entity e, vector min, vector max) setabssize
|
||||
PR_AddBuiltin (&sv_pr_state, "fixme", PF_Fixme, 5);
|
||||
|
||||
// void (entity e, float chan, string samp) sound
|
||||
PR_AddBuiltin (&sv_pr_state, "sound", PF_sound, 8);
|
||||
|
||||
// void (string e) error
|
||||
PR_AddBuiltin (&sv_pr_state, "error", PF_error, 10);
|
||||
// void (string e) objerror
|
||||
PR_AddBuiltin (&sv_pr_state, "objerror", PF_objerror, 11);
|
||||
// entity () spawn
|
||||
PR_AddBuiltin (&sv_pr_state, "spawn", PF_Spawn, 14);
|
||||
// void (entity e) remove
|
||||
PR_AddBuiltin (&sv_pr_state, "remove", PF_Remove, 15);
|
||||
// float (vector v1, vector v2, float tryents) traceline
|
||||
PR_AddBuiltin (&sv_pr_state, "traceline", PF_traceline, 16);
|
||||
// entity () clientlist
|
||||
PR_AddBuiltin (&sv_pr_state, "checkclient", PF_checkclient, 17);
|
||||
|
||||
// void (string s) precache_sound
|
||||
PR_AddBuiltin (&sv_pr_state, "precache_sound", PF_precache_sound, 19);
|
||||
// void (string s) precache_model
|
||||
PR_AddBuiltin (&sv_pr_state, "precache_model", PF_precache_model, 20);
|
||||
// void (entity client, string s) stuffcmd
|
||||
PR_AddBuiltin (&sv_pr_state, "stuffcmd", PF_stuffcmd, 21);
|
||||
// entity (vector org, float rad) findradius
|
||||
PR_AddBuiltin (&sv_pr_state, "findradius", PF_findradius, 22);
|
||||
// void (string s) bprint
|
||||
PR_AddBuiltin (&sv_pr_state, "bprint", PF_bprint, 23);
|
||||
// void (entity client, string s) sprint
|
||||
PR_AddBuiltin (&sv_pr_state, "sprint", PF_sprint, 24);
|
||||
|
||||
// float (float yaw, float dist) walkmove
|
||||
PR_AddBuiltin (&sv_pr_state, "walkmove", PF_walkmove, 32);
|
||||
|
||||
// float () droptofloor
|
||||
PR_AddBuiltin (&sv_pr_state, "droptofloor", PF_droptofloor, 34);
|
||||
// void (float style, string value) lightstyle
|
||||
PR_AddBuiltin (&sv_pr_state, "lightstyle", PF_lightstyle, 35);
|
||||
|
||||
// float (entity e) checkbottom
|
||||
PR_AddBuiltin (&sv_pr_state, "checkbottom", PF_checkbottom, 40);
|
||||
// float (vector v) pointcontents
|
||||
PR_AddBuiltin (&sv_pr_state, "pointcontents", PF_pointcontents, 41);
|
||||
|
||||
// vector (entity e, float speed) aim
|
||||
PR_AddBuiltin (&sv_pr_state, "aim", PF_aim, 44);
|
||||
|
||||
// void (string s) localcmd
|
||||
PR_AddBuiltin (&sv_pr_state, "localcmd", PF_localcmd, 46);
|
||||
|
||||
// void (vector o, vector d, float color, float count) particle
|
||||
PR_AddBuiltin (&sv_pr_state, "particle", PF_particle, 48);
|
||||
// void () ChangeYaw
|
||||
PR_AddBuiltin (&sv_pr_state, "changeyaw", PF_changeyaw, 49);
|
||||
|
||||
// void (float to, float f) WriteByte
|
||||
PR_AddBuiltin (&sv_pr_state, "writebyte", PF_WriteByte, 52);
|
||||
// void (float to, float f) WriteChar
|
||||
PR_AddBuiltin (&sv_pr_state, "writechar", PF_WriteChar, 53);
|
||||
// void (float to, float f) WriteShort
|
||||
PR_AddBuiltin (&sv_pr_state, "writeshort", PF_WriteShort, 54);
|
||||
// void (float to, float f) WriteLong
|
||||
PR_AddBuiltin (&sv_pr_state, "writelong", PF_WriteLong, 55);
|
||||
// void (float to, float f) WriteCoord
|
||||
PR_AddBuiltin (&sv_pr_state, "writecoord", PF_WriteCoord, 56);
|
||||
// void (float to, float f) WriteAngle
|
||||
PR_AddBuiltin (&sv_pr_state, "writeangle", PF_WriteAngle, 57);
|
||||
// void (float to, string s) WriteString
|
||||
PR_AddBuiltin (&sv_pr_state, "writestring", PF_WriteString, 58);
|
||||
// void (float to, entity s) WriteEntity
|
||||
PR_AddBuiltin (&sv_pr_state, "writeentity", PF_WriteEntity, 59);
|
||||
|
||||
// void (float step) movetogoal
|
||||
PR_AddBuiltin (&sv_pr_state, "movetogoal", SV_MoveToGoal, 67);
|
||||
// string (string s) precache_file
|
||||
PR_AddBuiltin (&sv_pr_state, "precache_file", PF_precache_file, 68);
|
||||
// void (entity e) makestatic
|
||||
PR_AddBuiltin (&sv_pr_state, "makestatic", PF_makestatic, 69);
|
||||
// void (string s) changelevel
|
||||
PR_AddBuiltin (&sv_pr_state, "changelevel", PF_changelevel, 70);
|
||||
|
||||
// void (...) centerprint
|
||||
PR_AddBuiltin (&sv_pr_state, "centerprint", PF_centerprint, 73);
|
||||
// void (vector pos, string samp, float vol, float atten) ambientsound
|
||||
PR_AddBuiltin (&sv_pr_state, "ambientsound", PF_ambientsound, 74);
|
||||
// string (string s) precache_model2
|
||||
PR_AddBuiltin (&sv_pr_state, "precache_model2", PF_precache_model, 75);
|
||||
// string (string s) precache_sound2
|
||||
PR_AddBuiltin (&sv_pr_state, "precache_sound2", PF_precache_sound, 76);
|
||||
// string (string s) precache_file2
|
||||
PR_AddBuiltin (&sv_pr_state, "precache_file2", PF_precache_file, 77);
|
||||
// void (entity e) setspawnparms
|
||||
PR_AddBuiltin (&sv_pr_state, "setspawnparms", PF_setspawnparms, 78);
|
||||
|
||||
// integer (entity ent, vector point) hullpointcontents
|
||||
PR_AddBuiltin (&sv_pr_state, "hullpointcontents", PF_hullpointcontents,
|
||||
93);
|
||||
// vector (integer hull, integer max) getboxbounds
|
||||
PR_AddBuiltin (&sv_pr_state, "getboxbounds", PF_getboxbounds, 94);
|
||||
// integer () getboxhull
|
||||
PR_AddBuiltin (&sv_pr_state, "getboxhull", PF_getboxhull, 95);
|
||||
// void (integer hull) freeboxhull
|
||||
PR_AddBuiltin (&sv_pr_state, "freeboxhull", PF_freeboxhull, 96);
|
||||
// void (integer hull, vector right, vector forward, vector up, vector mins, vector maxs) rotate_bbox
|
||||
PR_AddBuiltin (&sv_pr_state, "rotate_bbox", PF_rotate_bbox, 97);
|
||||
|
||||
// float () checkextension
|
||||
PR_AddBuiltin (&sv_pr_state, "checkextension", PF_checkextension, 99);
|
||||
PR_RegisterBuiltins (&sv_pr_state, builtins);
|
||||
}
|
||||
// void (entity e, vector min, vector max) setabssize
|
||||
// void (float step) movetogoal
|
||||
|
|
|
@ -340,8 +340,6 @@ SV_Progs_Init (void)
|
|||
sv_pr_state.time = &sv.time;
|
||||
sv_pr_state.reserved_edicts = &svs.maxclients;
|
||||
sv_pr_state.unlink = SV_UnlinkEdict;
|
||||
sv_pr_state.builtins = 0;
|
||||
sv_pr_state.numbuiltins = 0;
|
||||
sv_pr_state.parse_field = parse_field;
|
||||
sv_pr_state.prune_edict = prune_edict;
|
||||
|
||||
|
|
|
@ -66,6 +66,7 @@ static __attribute__ ((unused)) const char rcsid[] =
|
|||
Dumps self.
|
||||
|
||||
error (value)
|
||||
// void (string e) error
|
||||
*/
|
||||
void
|
||||
PF_error (progs_t *pr)
|
||||
|
@ -89,6 +90,7 @@ PF_error (progs_t *pr)
|
|||
removed, but the level can continue.
|
||||
|
||||
objerror (value)
|
||||
// void (string e) objerror
|
||||
*/
|
||||
void
|
||||
PF_objerror (progs_t *pr)
|
||||
|
@ -111,6 +113,7 @@ PF_objerror (progs_t *pr)
|
|||
|
||||
Writes new values for v_forward, v_up, and v_right based on angles
|
||||
makevectors (vector)
|
||||
// void (entity e) makevectors
|
||||
*/
|
||||
void
|
||||
PF_makevectors (progs_t *pr)
|
||||
|
@ -129,6 +132,7 @@ PF_makevectors (progs_t *pr)
|
|||
teleported.
|
||||
|
||||
setorigin (entity, origin)
|
||||
// void (entity e, vector o) setorigin
|
||||
*/
|
||||
void
|
||||
PF_setorigin (progs_t *pr)
|
||||
|
@ -148,6 +152,7 @@ PF_setorigin (progs_t *pr)
|
|||
the size box is rotated by the current angle
|
||||
|
||||
setsize (entity, minvector, maxvector)
|
||||
// void (entity e, vector min, vector max) setsize
|
||||
*/
|
||||
void
|
||||
PF_setsize (progs_t *pr)
|
||||
|
@ -168,6 +173,7 @@ PF_setsize (progs_t *pr)
|
|||
PF_setmodel
|
||||
|
||||
setmodel(entity, model)
|
||||
// void (entity e, string m) setmodel
|
||||
Also sets size, mins, and maxs for inline bmodels
|
||||
*/
|
||||
void
|
||||
|
@ -208,6 +214,7 @@ PF_setmodel (progs_t *pr)
|
|||
broadcast print to everyone on server
|
||||
|
||||
bprint (value)
|
||||
// void (string s) bprint
|
||||
*/
|
||||
void
|
||||
PF_bprint (progs_t *pr)
|
||||
|
@ -227,6 +234,7 @@ PF_bprint (progs_t *pr)
|
|||
single print to a specific client
|
||||
|
||||
sprint (clientent, value)
|
||||
// void (entity client, string s) sprint
|
||||
*/
|
||||
void
|
||||
PF_sprint (progs_t *pr)
|
||||
|
@ -255,6 +263,7 @@ PF_sprint (progs_t *pr)
|
|||
|
||||
/*
|
||||
PF_centerprint
|
||||
// void (...) centerprint
|
||||
|
||||
single print to a specific client
|
||||
|
||||
|
@ -293,6 +302,7 @@ PF_centerprint (progs_t *pr)
|
|||
|
||||
/*
|
||||
PF_ambientsound
|
||||
// void (vector pos, string samp, float vol, float atten) ambientsound
|
||||
*/
|
||||
void
|
||||
PF_ambientsound (progs_t *pr)
|
||||
|
@ -329,6 +339,7 @@ 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.
|
||||
|
@ -364,6 +375,7 @@ PF_sound (progs_t *pr)
|
|||
entities if the tryents flag is set.
|
||||
|
||||
traceline (vector1, vector2, tryents)
|
||||
// float (vector v1, vector v2, float tryents) traceline
|
||||
*/
|
||||
void
|
||||
PF_traceline (progs_t *pr)
|
||||
|
@ -396,6 +408,7 @@ PF_traceline (progs_t *pr)
|
|||
|
||||
/*
|
||||
PF_checkmove
|
||||
// void (vector start, vector mins, vector maxs, vector end, float type, entity passent) checkmove
|
||||
|
||||
Wrapper around SV_Move, this makes PF_movetoground and PF_traceline
|
||||
redundant.
|
||||
|
@ -500,6 +513,7 @@ 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.
|
||||
|
@ -549,6 +563,7 @@ PF_checkclient (progs_t *pr)
|
|||
Sends text over to the client's execution buffer
|
||||
|
||||
stuffcmd (clientent, value)
|
||||
// void (entity client, string s) stuffcmd
|
||||
*/
|
||||
void
|
||||
PF_stuffcmd (progs_t *pr)
|
||||
|
@ -600,6 +615,7 @@ PF_stuffcmd (progs_t *pr)
|
|||
|
||||
/*
|
||||
PF_localcmd
|
||||
// void (string s) localcmd
|
||||
|
||||
Inserts text into the server console's execution buffer
|
||||
|
||||
|
@ -620,6 +636,7 @@ PF_localcmd (progs_t *pr)
|
|||
Returns a chain of entities that have origins within a spherical area
|
||||
|
||||
findradius (origin, radius)
|
||||
// entity (vector org, float rad) findradius
|
||||
*/
|
||||
void
|
||||
PF_findradius (progs_t *pr)
|
||||
|
@ -657,6 +674,7 @@ PF_findradius (progs_t *pr)
|
|||
RETURN_EDICT (pr, chain);
|
||||
}
|
||||
|
||||
// entity () spawn
|
||||
void
|
||||
PF_Spawn (progs_t *pr)
|
||||
{
|
||||
|
@ -668,6 +686,7 @@ PF_Spawn (progs_t *pr)
|
|||
|
||||
cvar_t *pr_double_remove;
|
||||
|
||||
// void (entity e) remove
|
||||
void
|
||||
PF_Remove (progs_t *pr)
|
||||
{
|
||||
|
@ -725,6 +744,8 @@ do_precache (progs_t *pr, const char **cache, int max, const char *name,
|
|||
PR_RunError (pr, "%s: overflow", func);
|
||||
}
|
||||
|
||||
// string (string s) precache_file
|
||||
// string (string s) precache_file2
|
||||
void
|
||||
PF_precache_file (progs_t *pr)
|
||||
{ // precache_file is only used to copy
|
||||
|
@ -732,6 +753,8 @@ PF_precache_file (progs_t *pr)
|
|||
R_INT (pr) = P_INT (pr, 0);
|
||||
}
|
||||
|
||||
// void (string s) precache_sound
|
||||
// string (string s) precache_sound2
|
||||
void
|
||||
PF_precache_sound (progs_t *pr)
|
||||
{
|
||||
|
@ -740,6 +763,8 @@ PF_precache_sound (progs_t *pr)
|
|||
R_INT (pr) = P_INT (pr, 0);
|
||||
}
|
||||
|
||||
// void (string s) precache_model
|
||||
// string (string s) precache_model2
|
||||
void
|
||||
PF_precache_model (progs_t *pr)
|
||||
{
|
||||
|
@ -753,6 +778,7 @@ PF_precache_model (progs_t *pr)
|
|||
PF_walkmove
|
||||
|
||||
float (float yaw, float dist) walkmove
|
||||
// float (float yaw, float dist) walkmove
|
||||
*/
|
||||
void
|
||||
PF_walkmove (progs_t *pr)
|
||||
|
@ -793,6 +819,7 @@ PF_walkmove (progs_t *pr)
|
|||
PF_droptofloor
|
||||
|
||||
void () droptofloor
|
||||
// float () droptofloor
|
||||
*/
|
||||
void
|
||||
PF_droptofloor (progs_t *pr)
|
||||
|
@ -824,6 +851,7 @@ PF_droptofloor (progs_t *pr)
|
|||
PF_lightstyle
|
||||
|
||||
void (float style, string value) lightstyle
|
||||
// void (float style, string value) lightstyle
|
||||
*/
|
||||
void
|
||||
PF_lightstyle (progs_t *pr)
|
||||
|
@ -857,6 +885,7 @@ PF_lightstyle (progs_t *pr)
|
|||
}
|
||||
}
|
||||
|
||||
// float (entity e) checkbottom
|
||||
void
|
||||
PF_checkbottom (progs_t *pr)
|
||||
{
|
||||
|
@ -867,6 +896,7 @@ PF_checkbottom (progs_t *pr)
|
|||
R_FLOAT (pr) = SV_CheckBottom (ent);
|
||||
}
|
||||
|
||||
// float (vector v) pointcontents
|
||||
void
|
||||
PF_pointcontents (progs_t *pr)
|
||||
{
|
||||
|
@ -881,6 +911,7 @@ 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)
|
||||
|
@ -975,6 +1006,7 @@ PF_aim (progs_t *pr)
|
|||
|
||||
/*
|
||||
PF_changeyaw
|
||||
// void () ChangeYaw
|
||||
|
||||
This was a major timewaster in progs, so it was converted to C
|
||||
*/
|
||||
|
@ -1064,6 +1096,7 @@ Write_GetClient (progs_t *pr)
|
|||
return &svs.clients[entnum - 1];
|
||||
}
|
||||
|
||||
// void (float to, ...) WriteBytes
|
||||
void
|
||||
PF_WriteBytes (progs_t *pr)
|
||||
{
|
||||
|
@ -1092,6 +1125,7 @@ PF_WriteBytes (progs_t *pr)
|
|||
}
|
||||
}
|
||||
|
||||
// void (float to, float f) WriteByte
|
||||
void
|
||||
PF_WriteByte (progs_t *pr)
|
||||
{
|
||||
|
@ -1110,6 +1144,7 @@ PF_WriteByte (progs_t *pr)
|
|||
MSG_WriteByte (WriteDest (pr), P_FLOAT (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, float f) WriteChar
|
||||
void
|
||||
PF_WriteChar (progs_t *pr)
|
||||
{
|
||||
|
@ -1128,6 +1163,7 @@ PF_WriteChar (progs_t *pr)
|
|||
MSG_WriteByte (WriteDest (pr), P_FLOAT (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, float f) WriteShort
|
||||
void
|
||||
PF_WriteShort (progs_t *pr)
|
||||
{
|
||||
|
@ -1146,6 +1182,7 @@ PF_WriteShort (progs_t *pr)
|
|||
MSG_WriteShort (WriteDest (pr), P_FLOAT (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, float f) WriteLong
|
||||
void
|
||||
PF_WriteLong (progs_t *pr)
|
||||
{
|
||||
|
@ -1164,6 +1201,7 @@ PF_WriteLong (progs_t *pr)
|
|||
MSG_WriteLong (WriteDest (pr), P_FLOAT (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, float f) WriteAngle
|
||||
void
|
||||
PF_WriteAngle (progs_t *pr)
|
||||
{
|
||||
|
@ -1182,6 +1220,7 @@ PF_WriteAngle (progs_t *pr)
|
|||
MSG_WriteAngle (WriteDest (pr), P_FLOAT (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, float f) WriteCoord
|
||||
void
|
||||
PF_WriteCoord (progs_t *pr)
|
||||
{
|
||||
|
@ -1200,6 +1239,7 @@ PF_WriteCoord (progs_t *pr)
|
|||
MSG_WriteCoord (WriteDest (pr), P_FLOAT (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, vector v) WriteAngleV
|
||||
void
|
||||
PF_WriteAngleV (progs_t *pr)
|
||||
{
|
||||
|
@ -1220,6 +1260,7 @@ PF_WriteAngleV (progs_t *pr)
|
|||
MSG_WriteAngleV (WriteDest (pr), ang);
|
||||
}
|
||||
|
||||
// void (float to, vector v) WriteCoordV
|
||||
void
|
||||
PF_WriteCoordV (progs_t *pr)
|
||||
{
|
||||
|
@ -1240,6 +1281,7 @@ PF_WriteCoordV (progs_t *pr)
|
|||
MSG_WriteCoordV (WriteDest (pr), coord);
|
||||
}
|
||||
|
||||
// void (float to, string s) WriteString
|
||||
void
|
||||
PF_WriteString (progs_t *pr)
|
||||
{
|
||||
|
@ -1259,6 +1301,7 @@ PF_WriteString (progs_t *pr)
|
|||
MSG_WriteString (WriteDest (pr), P_GSTRING (pr, 1));
|
||||
}
|
||||
|
||||
// void (float to, entity s) WriteEntity
|
||||
void
|
||||
PF_WriteEntity (progs_t *pr)
|
||||
{
|
||||
|
@ -1277,6 +1320,7 @@ PF_WriteEntity (progs_t *pr)
|
|||
MSG_WriteShort (WriteDest (pr), P_EDICTNUM (pr, 1));
|
||||
}
|
||||
|
||||
// void (entity e) makestatic
|
||||
void
|
||||
PF_makestatic (progs_t *pr)
|
||||
{
|
||||
|
@ -1304,6 +1348,7 @@ PF_makestatic (progs_t *pr)
|
|||
ED_Free (pr, ent);
|
||||
}
|
||||
|
||||
// void (entity e) setspawnparms
|
||||
void
|
||||
PF_setspawnparms (progs_t *pr)
|
||||
{
|
||||
|
@ -1326,6 +1371,7 @@ PF_setspawnparms (progs_t *pr)
|
|||
sv_globals.parms[i] = client->spawn_parms[i];
|
||||
}
|
||||
|
||||
// void (string s) changelevel
|
||||
void
|
||||
PF_changelevel (progs_t *pr)
|
||||
{
|
||||
|
@ -1345,6 +1391,7 @@ PF_changelevel (progs_t *pr)
|
|||
PF_logfrag
|
||||
|
||||
logfrag (killer, killee)
|
||||
// void (entity killer, entity killee) logfrag
|
||||
*/
|
||||
void
|
||||
PF_logfrag (progs_t *pr)
|
||||
|
@ -1406,6 +1453,7 @@ PF_logfrag (progs_t *pr)
|
|||
PF_infokey
|
||||
|
||||
string (entity e, string key) infokey
|
||||
// string (entity e, string key) infokey
|
||||
*/
|
||||
void
|
||||
PF_infokey (progs_t *pr)
|
||||
|
@ -1449,6 +1497,7 @@ PF_infokey (progs_t *pr)
|
|||
PF_multicast
|
||||
|
||||
void (vector where, float set) multicast
|
||||
// void (vector where, float set) multicast
|
||||
*/
|
||||
void
|
||||
PF_multicast (progs_t *pr)
|
||||
|
@ -1466,6 +1515,7 @@ PF_multicast (progs_t *pr)
|
|||
PF_cfopen
|
||||
|
||||
float (string path, string mode) cfopen
|
||||
// float (string path, string mode) cfopen
|
||||
*/
|
||||
static void
|
||||
PF_cfopen (progs_t *pr)
|
||||
|
@ -1477,6 +1527,7 @@ PF_cfopen (progs_t *pr)
|
|||
PF_cfclose
|
||||
|
||||
void (float desc) cfclose
|
||||
// void (float desc) cfclose
|
||||
*/
|
||||
static void
|
||||
PF_cfclose (progs_t *pr)
|
||||
|
@ -1488,6 +1539,7 @@ PF_cfclose (progs_t *pr)
|
|||
PF_cfread
|
||||
|
||||
string (float desc) cfread
|
||||
// string (float desc) cfread
|
||||
*/
|
||||
static void
|
||||
PF_cfread (progs_t *pr)
|
||||
|
@ -1499,6 +1551,7 @@ PF_cfread (progs_t *pr)
|
|||
PF_cfwrite
|
||||
|
||||
float (float desc, string buf) cfwrite
|
||||
// float (float desc, string buf) cfwrite
|
||||
*/
|
||||
static void
|
||||
PF_cfwrite (progs_t *pr)
|
||||
|
@ -1510,6 +1563,7 @@ PF_cfwrite (progs_t *pr)
|
|||
PF_cfeof
|
||||
|
||||
float () cfeof
|
||||
// float (float desc) cfeof
|
||||
*/
|
||||
static void
|
||||
PF_cfeof (progs_t *pr)
|
||||
|
@ -1521,6 +1575,7 @@ PF_cfeof (progs_t *pr)
|
|||
PF_cfquota
|
||||
|
||||
float () cfquota
|
||||
// float () cfquota
|
||||
*/
|
||||
static void
|
||||
PF_cfquota (progs_t *pr)
|
||||
|
@ -1528,6 +1583,7 @@ PF_cfquota (progs_t *pr)
|
|||
R_FLOAT (pr) = CF_Quota ();
|
||||
}
|
||||
|
||||
// void (entity ent, string key, string value) setinfokey
|
||||
static void
|
||||
PF_setinfokey (progs_t *pr)
|
||||
{
|
||||
|
@ -1543,6 +1599,7 @@ PF_setinfokey (progs_t *pr)
|
|||
}
|
||||
}
|
||||
|
||||
// entity (entity ent) testentitypos
|
||||
static void
|
||||
PF_testentitypos (progs_t *pr)
|
||||
{
|
||||
|
@ -1554,6 +1611,7 @@ PF_testentitypos (progs_t *pr)
|
|||
#define MAX_PF_HULLS 64 // FIXME make dynamic?
|
||||
clip_hull_t *pf_hull_list[MAX_PF_HULLS];
|
||||
|
||||
// integer (entity ent, vector point) hullpointcontents
|
||||
static void
|
||||
PF_hullpointcontents (progs_t *pr)
|
||||
{
|
||||
|
@ -1569,6 +1627,7 @@ PF_hullpointcontents (progs_t *pr)
|
|||
R_INT (pr) = SV_HullPointContents (hull, 0, offset);
|
||||
}
|
||||
|
||||
// vector (integer hull, integer max) getboxbounds
|
||||
static void
|
||||
PF_getboxbounds (progs_t *pr)
|
||||
{
|
||||
|
@ -1585,6 +1644,7 @@ PF_getboxbounds (progs_t *pr)
|
|||
}
|
||||
}
|
||||
|
||||
// integer () getboxhull
|
||||
static void
|
||||
PF_getboxhull (progs_t *pr)
|
||||
{
|
||||
|
@ -1609,6 +1669,7 @@ PF_getboxhull (progs_t *pr)
|
|||
}
|
||||
}
|
||||
|
||||
// void (integer hull) freeboxhull
|
||||
static void
|
||||
PF_freeboxhull (progs_t *pr)
|
||||
{
|
||||
|
@ -1638,6 +1699,7 @@ calc_dist (vec3_t p, vec3_t n, vec3_t *offsets)
|
|||
return DotProduct (v, n);
|
||||
}
|
||||
|
||||
// void (integer hull, vector right, vector forward, vector up, vector mins, vector maxs) rotate_bbox
|
||||
static void
|
||||
PF_rotate_bbox (progs_t *pr)
|
||||
{
|
||||
|
@ -1716,12 +1778,14 @@ PF_rotate_bbox (progs_t *pr)
|
|||
}
|
||||
}
|
||||
|
||||
// void (entity e, vector min, vector max) setabssize
|
||||
void
|
||||
PF_Fixme (progs_t *pr)
|
||||
{
|
||||
PR_RunError (pr, "Unimplemented builtin function called");
|
||||
}
|
||||
|
||||
// float () checkextension
|
||||
static void
|
||||
PF_checkextension (progs_t *pr)
|
||||
{
|
||||
|
@ -1743,6 +1807,7 @@ PF_sv_cvar (progs_t *pr)
|
|||
}
|
||||
}
|
||||
|
||||
// entity () SV_AllocClient
|
||||
static void
|
||||
PF_SV_AllocClient (progs_t *pr)
|
||||
{
|
||||
|
@ -1760,6 +1825,7 @@ PF_SV_AllocClient (progs_t *pr)
|
|||
RETURN_EDICT (pr, cl->edict);
|
||||
}
|
||||
|
||||
// void (entity cl) SV_FreeClient
|
||||
static void
|
||||
PF_SV_FreeClient (progs_t *pr)
|
||||
{
|
||||
|
@ -1780,6 +1846,7 @@ PF_SV_FreeClient (progs_t *pr)
|
|||
// "server");
|
||||
}
|
||||
|
||||
// void (entity cl, string userinfo) SV_SetUserinfo
|
||||
static void
|
||||
PF_SV_SetUserinfo (progs_t *pr)
|
||||
{
|
||||
|
@ -1795,6 +1862,7 @@ PF_SV_SetUserinfo (progs_t *pr)
|
|||
SV_ExtractFromUserinfo (cl);
|
||||
}
|
||||
|
||||
// void (entity cl, integer ping) SV_SetPing
|
||||
static void
|
||||
PR_SV_SetPing (progs_t *pr)
|
||||
{
|
||||
|
@ -1806,6 +1874,7 @@ PR_SV_SetPing (progs_t *pr)
|
|||
cl->ping = P_INT (pr, 1);
|
||||
}
|
||||
|
||||
// void (entity cl, float secs, vector angles, vector move, integer buttons, integer impulse) SV_UserCmd
|
||||
static void
|
||||
PR_SV_UserCmd (progs_t *pr)
|
||||
{
|
||||
|
@ -1830,6 +1899,7 @@ PR_SV_UserCmd (progs_t *pr)
|
|||
cl->lastcmd.buttons = 0; // avoid multiple fires on lag
|
||||
}
|
||||
|
||||
// void (entity cl) SV_Spawn
|
||||
static void
|
||||
PR_SV_Spawn (progs_t *pr)
|
||||
{
|
||||
|
@ -1842,172 +1912,106 @@ PR_SV_Spawn (progs_t *pr)
|
|||
SV_Spawn (cl);
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"makevectors", PF_makevectors, 1},
|
||||
{"setorigin", PF_setorigin, 2},
|
||||
{"setmodel", PF_setmodel, 3},
|
||||
{"setsize", PF_setsize, 4},
|
||||
|
||||
{"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},
|
||||
{"changeyaw", PF_changeyaw, 49},
|
||||
|
||||
{"writebyte", PF_WriteByte, 52},
|
||||
{"WriteBytes", PF_WriteBytes, -1},
|
||||
{"writechar", PF_WriteChar, 53},
|
||||
{"writeshort", PF_WriteShort, 54},
|
||||
{"writelong", PF_WriteLong, 55},
|
||||
{"writecoord", PF_WriteCoord, 56},
|
||||
{"writeangle", PF_WriteAngle, 57},
|
||||
{"WriteCoordV", PF_WriteCoordV, -1},
|
||||
{"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},
|
||||
|
||||
{"logfrag", PF_logfrag, 79},
|
||||
{"infokey", PF_infokey, 80},
|
||||
{"multicast", PF_multicast, 82},
|
||||
{"testentitypos", PF_testentitypos, 92},
|
||||
{"hullpointcontents", PF_hullpointcontents, 93},
|
||||
{"getboxbounds", PF_getboxbounds, 94},
|
||||
{"getboxhull", PF_getboxhull, 95},
|
||||
{"freeboxhull", PF_freeboxhull, 96},
|
||||
{"rotate_bbox", PF_rotate_bbox, 97},
|
||||
|
||||
{"checkmove", PF_checkmove, 98},
|
||||
{"checkextension", PF_checkextension, 99},
|
||||
{"setinfokey", PF_setinfokey, 102},
|
||||
{"cfopen", PF_cfopen, 103},
|
||||
{"cfclose", PF_cfclose, 104},
|
||||
{"cfread", PF_cfread, 105},
|
||||
{"cfwrite", PF_cfwrite, 106},
|
||||
{"cfeof", PF_cfeof, 107},
|
||||
{"cfquota", PF_cfquota, 108},
|
||||
|
||||
{"SV_AllocClient", PF_SV_AllocClient, -1},
|
||||
{"SV_FreeClient", PF_SV_FreeClient, -1},
|
||||
{"SV_SetUserinfo", PF_SV_SetUserinfo, -1},
|
||||
{"SV_SetPing", PR_SV_SetPing, -1},
|
||||
{"SV_UserCmd", PR_SV_UserCmd, -1},
|
||||
{"SV_Spawn", PR_SV_Spawn, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
SV_PR_Cmds_Init ()
|
||||
{
|
||||
builtin_t *bi;
|
||||
PR_Cmds_Init (&sv_pr_state);
|
||||
PR_Obj_Progs_Init (&sv_pr_state);
|
||||
|
||||
// (override standard builtin)
|
||||
sv_pr_state.builtins[45] = 0;
|
||||
// float (string s) cvar
|
||||
PR_AddBuiltin (&sv_pr_state, "cvar", PF_sv_cvar, 45);
|
||||
bi = PR_FindBuiltin (&sv_pr_state, "cvar");
|
||||
bi->proc = PF_sv_cvar;
|
||||
|
||||
// void (entity e) makevectors
|
||||
PR_AddBuiltin (&sv_pr_state, "makevectors", PF_makevectors, 1);
|
||||
// void (entity e, vector o) setorigin
|
||||
PR_AddBuiltin (&sv_pr_state, "setorigin", PF_setorigin, 2);
|
||||
// void (entity e, string m) setmodel
|
||||
PR_AddBuiltin (&sv_pr_state, "setmodel", PF_setmodel, 3);
|
||||
// void (entity e, vector min, vector max) setsize
|
||||
PR_AddBuiltin (&sv_pr_state, "setsize", PF_setsize, 4);
|
||||
// void (entity e, vector min, vector max) setabssize
|
||||
PR_AddBuiltin (&sv_pr_state, "fixme", PF_Fixme, 5);
|
||||
|
||||
// void (entity e, float chan, string samp) sound
|
||||
PR_AddBuiltin (&sv_pr_state, "sound", PF_sound, 8);
|
||||
|
||||
// void (string e) error
|
||||
PR_AddBuiltin (&sv_pr_state, "error", PF_error, 10);
|
||||
// void (string e) objerror
|
||||
PR_AddBuiltin (&sv_pr_state, "objerror", PF_objerror, 11);
|
||||
// entity () spawn
|
||||
PR_AddBuiltin (&sv_pr_state, "spawn", PF_Spawn, 14);
|
||||
// void (entity e) remove
|
||||
PR_AddBuiltin (&sv_pr_state, "remove", PF_Remove, 15);
|
||||
// float (vector v1, vector v2, float tryents) traceline
|
||||
PR_AddBuiltin (&sv_pr_state, "traceline", PF_traceline, 16);
|
||||
// entity () clientlist
|
||||
PR_AddBuiltin (&sv_pr_state, "checkclient", PF_checkclient, 17);
|
||||
|
||||
// void (string s) precache_sound
|
||||
PR_AddBuiltin (&sv_pr_state, "precache_sound", PF_precache_sound, 19);
|
||||
// void (string s) precache_model
|
||||
PR_AddBuiltin (&sv_pr_state, "precache_model", PF_precache_model, 20);
|
||||
// void (entity client, string s) stuffcmd
|
||||
PR_AddBuiltin (&sv_pr_state, "stuffcmd", PF_stuffcmd, 21);
|
||||
// entity (vector org, float rad) findradius
|
||||
PR_AddBuiltin (&sv_pr_state, "findradius", PF_findradius, 22);
|
||||
// void (string s) bprint
|
||||
PR_AddBuiltin (&sv_pr_state, "bprint", PF_bprint, 23);
|
||||
// void (entity client, string s) sprint
|
||||
PR_AddBuiltin (&sv_pr_state, "sprint", PF_sprint, 24);
|
||||
|
||||
// float (float yaw, float dist) walkmove
|
||||
PR_AddBuiltin (&sv_pr_state, "walkmove", PF_walkmove, 32);
|
||||
|
||||
// float () droptofloor
|
||||
PR_AddBuiltin (&sv_pr_state, "droptofloor", PF_droptofloor, 34);
|
||||
// void (float style, string value) lightstyle
|
||||
PR_AddBuiltin (&sv_pr_state, "lightstyle", PF_lightstyle, 35);
|
||||
|
||||
// float (entity e) checkbottom
|
||||
PR_AddBuiltin (&sv_pr_state, "checkbottom", PF_checkbottom, 40);
|
||||
// float (vector v) pointcontents
|
||||
PR_AddBuiltin (&sv_pr_state, "pointcontents", PF_pointcontents, 41);
|
||||
|
||||
// vector (entity e, float speed) aim
|
||||
PR_AddBuiltin (&sv_pr_state, "aim", PF_aim, 44);
|
||||
|
||||
// void (string s) localcmd
|
||||
PR_AddBuiltin (&sv_pr_state, "localcmd", PF_localcmd, 46);
|
||||
// void () ChangeYaw
|
||||
PR_AddBuiltin (&sv_pr_state, "changeyaw", PF_changeyaw, 49);
|
||||
|
||||
// void (float to, float f) WriteByte
|
||||
PR_AddBuiltin (&sv_pr_state, "writebyte", PF_WriteByte, 52);
|
||||
// void (float to, ...) WriteBytes
|
||||
PR_AddBuiltin (&sv_pr_state, "WriteBytes", PF_WriteBytes, -1);
|
||||
// void (float to, float f) WriteChar
|
||||
PR_AddBuiltin (&sv_pr_state, "writechar", PF_WriteChar, 53);
|
||||
// void (float to, float f) WriteShort
|
||||
PR_AddBuiltin (&sv_pr_state, "writeshort", PF_WriteShort, 54);
|
||||
// void (float to, float f) WriteLong
|
||||
PR_AddBuiltin (&sv_pr_state, "writelong", PF_WriteLong, 55);
|
||||
// void (float to, float f) WriteCoord
|
||||
PR_AddBuiltin (&sv_pr_state, "writecoord", PF_WriteCoord, 56);
|
||||
// void (float to, float f) WriteAngle
|
||||
PR_AddBuiltin (&sv_pr_state, "writeangle", PF_WriteAngle, 57);
|
||||
// void (float to, vector v) WriteCoordV
|
||||
PR_AddBuiltin (&sv_pr_state, "WriteCoordV", PF_WriteCoordV, -1);
|
||||
// void (float to, vector v) WriteAngleV
|
||||
PR_AddBuiltin (&sv_pr_state, "WriteAngleV", PF_WriteAngleV, -1);
|
||||
// void (float to, string s) WriteString
|
||||
PR_AddBuiltin (&sv_pr_state, "writestring", PF_WriteString, 58);
|
||||
// void (float to, entity s) WriteEntity
|
||||
PR_AddBuiltin (&sv_pr_state, "writeentity", PF_WriteEntity, 59);
|
||||
|
||||
// void (float step) movetogoal
|
||||
PR_AddBuiltin (&sv_pr_state, "movetogoal", SV_MoveToGoal, 67);
|
||||
// string (string s) precache_file
|
||||
PR_AddBuiltin (&sv_pr_state, "precache_file", PF_precache_file, 68);
|
||||
// void (entity e) makestatic
|
||||
PR_AddBuiltin (&sv_pr_state, "makestatic", PF_makestatic, 69);
|
||||
// void (string s) changelevel
|
||||
PR_AddBuiltin (&sv_pr_state, "changelevel", PF_changelevel, 70);
|
||||
|
||||
// void (...) centerprint
|
||||
PR_AddBuiltin (&sv_pr_state, "centerprint", PF_centerprint, 73);
|
||||
// void (vector pos, string samp, float vol, float atten) ambientsound
|
||||
PR_AddBuiltin (&sv_pr_state, "ambientsound", PF_ambientsound, 74);
|
||||
// string (string s) precache_model2
|
||||
PR_AddBuiltin (&sv_pr_state, "precache_model2", PF_precache_model, 75);
|
||||
// string (string s) precache_sound2
|
||||
PR_AddBuiltin (&sv_pr_state, "precache_sound2", PF_precache_sound, 76);
|
||||
// string (string s) precache_file2
|
||||
PR_AddBuiltin (&sv_pr_state, "precache_file2", PF_precache_file, 77);
|
||||
// void (entity e) setspawnparms
|
||||
PR_AddBuiltin (&sv_pr_state, "setspawnparms", PF_setspawnparms, 78);
|
||||
|
||||
// void (entity killer, entity killee) logfrag
|
||||
PR_AddBuiltin (&sv_pr_state, "logfrag", PF_logfrag, 79);
|
||||
// string (entity e, string key) infokey
|
||||
PR_AddBuiltin (&sv_pr_state, "infokey", PF_infokey, 80);
|
||||
// void (vector where, float set) multicast
|
||||
PR_AddBuiltin (&sv_pr_state, "multicast", PF_multicast, 82);
|
||||
// entity (entity ent) testentitypos
|
||||
PR_AddBuiltin (&sv_pr_state, "testentitypos", PF_testentitypos, 92);
|
||||
// integer (entity ent, vector point) hullpointcontents
|
||||
PR_AddBuiltin (&sv_pr_state, "hullpointcontents", PF_hullpointcontents,
|
||||
93);
|
||||
// vector (integer hull, integer max) getboxbounds
|
||||
PR_AddBuiltin (&sv_pr_state, "getboxbounds", PF_getboxbounds, 94);
|
||||
// integer () getboxhull
|
||||
PR_AddBuiltin (&sv_pr_state, "getboxhull", PF_getboxhull, 95);
|
||||
// void (integer hull) freeboxhull
|
||||
PR_AddBuiltin (&sv_pr_state, "freeboxhull", PF_freeboxhull, 96);
|
||||
// void (integer hull, vector right, vector forward, vector up, vector mins, vector maxs) rotate_bbox
|
||||
PR_AddBuiltin (&sv_pr_state, "rotate_bbox", PF_rotate_bbox, 97);
|
||||
|
||||
// void (vector start, vector mins, vector maxs, vector end, float type, entity passent) checkmove
|
||||
PR_AddBuiltin (&sv_pr_state, "checkmove", PF_checkmove, 98);
|
||||
// float () checkextension
|
||||
PR_AddBuiltin (&sv_pr_state, "checkextension", PF_checkextension, 99);
|
||||
// void (entity ent, string key, string value) setinfokey
|
||||
PR_AddBuiltin (&sv_pr_state, "setinfokey", PF_setinfokey, 102);
|
||||
// float (string path, string mode) cfopen
|
||||
PR_AddBuiltin (&sv_pr_state, "cfopen", PF_cfopen, 103);
|
||||
// void (float desc) cfclose
|
||||
PR_AddBuiltin (&sv_pr_state, "cfclose", PF_cfclose, 104);
|
||||
// string (float desc) cfread
|
||||
PR_AddBuiltin (&sv_pr_state, "cfread", PF_cfread, 105);
|
||||
// float (float desc, string buf) cfwrite
|
||||
PR_AddBuiltin (&sv_pr_state, "cfwrite", PF_cfwrite, 106);
|
||||
// float (float desc) cfeof
|
||||
PR_AddBuiltin (&sv_pr_state, "cfeof", PF_cfeof, 107);
|
||||
// float () cfquota
|
||||
PR_AddBuiltin (&sv_pr_state, "cfquota", PF_cfquota, 108);
|
||||
|
||||
// entity () SV_AllocClient
|
||||
PR_AddBuiltin (&sv_pr_state, "SV_AllocClient", PF_SV_AllocClient, -1);
|
||||
// void (entity cl) SV_FreeClient
|
||||
PR_AddBuiltin (&sv_pr_state, "SV_FreeClient", PF_SV_FreeClient, -1);
|
||||
// void (entity cl, string userinfo) SV_SetUserinfo
|
||||
PR_AddBuiltin (&sv_pr_state, "SV_SetUserinfo", PF_SV_SetUserinfo, -1);
|
||||
// void (entity cl, integer ping) SV_SetPing
|
||||
PR_AddBuiltin (&sv_pr_state, "SV_SetPing", PR_SV_SetPing, -1);
|
||||
// void (entity cl, float secs, vector angles, vector move, integer buttons, integer impulse) SV_UserCmd
|
||||
PR_AddBuiltin (&sv_pr_state, "SV_UserCmd", PR_SV_UserCmd, -1);
|
||||
// void (entity cl) SV_Spawn
|
||||
PR_AddBuiltin (&sv_pr_state, "SV_Spawn", PR_SV_Spawn, -1);
|
||||
PR_RegisterBuiltins (&sv_pr_state, builtins);
|
||||
};
|
||||
// void (float step) movetogoal
|
||||
|
|
|
@ -348,8 +348,6 @@ SV_Progs_Init (void)
|
|||
sv_pr_state.reserved_edicts = &reserved_edicts;
|
||||
sv_pr_state.unlink = SV_UnlinkEdict;
|
||||
sv_pr_state.flush = SV_FlushSignon;
|
||||
sv_pr_state.builtins = 0;
|
||||
sv_pr_state.numbuiltins = 0;
|
||||
sv_pr_state.parse_field = parse_field;
|
||||
sv_pr_state.prune_edict = prune_edict;
|
||||
sv_pr_state.free_edict = free_edict; // eww, I hate the need for this :(
|
||||
|
|
|
@ -1892,12 +1892,17 @@ SV_ExecuteClientMessage (client_t *cl)
|
|||
}
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"SV_AddUserCommand", PF_AddUserCommand, -1},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
SV_UserInit (void)
|
||||
{
|
||||
ucmd_table = Hash_NewTable (251, ucmds_getkey, ucmds_free, 0);
|
||||
Hash_SetHashCompare (ucmd_table, ucmd_get_hash, ucmd_compare);
|
||||
PR_AddBuiltin (&sv_pr_state, "SV_AddUserCommand", PF_AddUserCommand, -1);
|
||||
PR_RegisterBuiltins (&sv_pr_state, builtins);
|
||||
cl_rollspeed = Cvar_Get ("cl_rollspeed", "200", CVAR_NONE, NULL,
|
||||
"How quickly a player straightens out after "
|
||||
"strafing");
|
||||
|
|
|
@ -149,18 +149,23 @@ bi_printf (progs_t *pr)
|
|||
dstring_delete (dstr);
|
||||
}
|
||||
|
||||
static builtin_t builtins[] = {
|
||||
{"print", bi_print, 1},
|
||||
{"errno", bi_errno, 3},
|
||||
{"strerror", bi_strerror, 4},
|
||||
{"open", bi_open, 5},
|
||||
{"close", bi_close, 6},
|
||||
{"read", bi_read, 7},
|
||||
{"write", bi_write, 8},
|
||||
{"seek", bi_seek, 9},
|
||||
{"traceon", bi_traceon, 10},
|
||||
{"traceoff", bi_traceoff, 11},
|
||||
{"printf", bi_printf, 12},
|
||||
{0}
|
||||
};
|
||||
|
||||
void
|
||||
BI_Init (progs_t *pr)
|
||||
{
|
||||
PR_AddBuiltin (pr, "print", bi_print, 1);
|
||||
PR_AddBuiltin (pr, "errno", bi_errno, 3);
|
||||
PR_AddBuiltin (pr, "strerror", bi_strerror, 4);
|
||||
PR_AddBuiltin (pr, "open", bi_open, 5);
|
||||
PR_AddBuiltin (pr, "close", bi_close, 6);
|
||||
PR_AddBuiltin (pr, "read", bi_read, 7);
|
||||
PR_AddBuiltin (pr, "write", bi_write, 8);
|
||||
PR_AddBuiltin (pr, "seek", bi_seek, 9);
|
||||
PR_AddBuiltin (pr, "traceon", bi_traceon, 10);
|
||||
PR_AddBuiltin (pr, "traceoff", bi_traceoff, 11);
|
||||
PR_AddBuiltin (pr, "printf", bi_printf, 12);
|
||||
PR_RegisterBuiltins (pr, builtins);
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue