]> git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - svvm_cmds.c
Merge branch 'master' into Mario/wrath-darkplaces_extra
[xonotic/darkplaces.git] / svvm_cmds.c
index 871e738633f388f1c6bcd5c373a27ddd2f373e9a..09369190cc058797b978e2a8304aceab0e708124 100644 (file)
@@ -2,6 +2,7 @@
 
 #include "prvm_cmds.h"
 #include "jpeg.h"
+#include "nodegraph.h"
 
 //============================================================================
 // Server
@@ -227,6 +228,8 @@ const char *vm_sv_extensions[] = {
 "TENEBRAE_GFX_DLIGHTS",
 "TW_SV_STEPCONTROL",
 "ZQ_PAUSE",
+"EXT_WRATH",
+"EXT_NODEGRAPH",
 "DP_RM_CLIPGROUP",
 "DP_QC_FS_SEARCH_PACKFILE",
 NULL
@@ -1123,6 +1126,71 @@ static void VM_SV_walkmove(prvm_prog_t *prog)
        PRVM_serverglobaledict(self) = oldself;
 }
 
+/*
+===============
+VM_SV_walkmovedist
+
+float(float yaw, float dist[, settrace]) walkmovedist (EXT_WRATH)
+===============
+*/
+static void VM_SV_walkmovedist(prvm_prog_t *prog)
+{
+       prvm_edict_t    *ent;
+       float   yaw, dist;
+       vec3_t  move, oldorg, neworg;
+       mfunction_t     *oldf;
+       int     oldself;
+       qboolean        settrace;
+
+       VM_SAFEPARMCOUNTRANGE(2, 3, VM_SV_walkmovedist);
+
+       // assume failure if it returns early
+       PRVM_G_FLOAT(OFS_RETURN) = 0;
+
+       ent = PRVM_PROG_TO_EDICT(PRVM_serverglobaledict(self));
+       if (ent == prog->edicts)
+       {
+               VM_Warning(prog, "walkmove: can not modify world entity\n");
+               return;
+       }
+       if (ent->priv.server->free)
+       {
+               VM_Warning(prog, "walkmove: can not modify free entity\n");
+               return;
+       }
+       yaw = PRVM_G_FLOAT(OFS_PARM0);
+       dist = PRVM_G_FLOAT(OFS_PARM1);
+       settrace = prog->argc >= 3 && PRVM_G_FLOAT(OFS_PARM2);
+
+       if ( !( (int)PRVM_serveredictfloat(ent, flags) & (FL_ONGROUND|FL_FLY|FL_SWIM) ) )
+               return;
+
+       yaw = yaw*M_PI*2 / 360;
+
+       move[0] = cos(yaw)*dist;
+       move[1] = sin(yaw)*dist;
+       move[2] = 0;
+
+// save origin before move
+       VectorCopy (PRVM_serveredictvector(ent, origin), oldorg);
+
+// save program state, because SV_movestep may call other progs
+       oldf = prog->xfunction;
+       oldself = PRVM_serverglobaledict(self);
+
+       SV_movestep(ent, move, true, false, settrace);
+
+// restore program state
+       prog->xfunction = oldf;
+       PRVM_serverglobaledict(self) = oldself;
+
+// save origin after move
+       VectorCopy (PRVM_serveredictvector(ent, origin), neworg);
+
+// return distance traveled
+       PRVM_G_FLOAT(OFS_RETURN) = VectorDistance(oldorg, neworg);
+}
+
 /*
 ===============
 VM_SV_droptofloor
@@ -3197,7 +3265,379 @@ static void VM_SV_frameduration(prvm_prog_t *prog)
                PRVM_G_FLOAT(OFS_RETURN) = model->animscenes[framenum].framecount / model->animscenes[framenum].framerate;
 }
 
+// #700 float() nodegraph_graphset_clear (EXT_NODEGRAPH)
+static void VM_nodegraph_graphset_clear(prvm_prog_t *prog)
+{
+       VM_SAFEPARMCOUNT(0, VM_nodegraph_graphset_clear);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graphset_clear();
+}
+
+// #701 float() nodegraph_graphset_load (EXT_NODEGRAPH)
+static void VM_nodegraph_graphset_load(prvm_prog_t *prog)
+{
+       VM_SAFEPARMCOUNT(0, VM_nodegraph_graphset_load);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graphset_load();
+}
+
+// #702 float() nodegraph_graphset_save (EXT_NODEGRAPH)
+static void VM_nodegraph_graphset_save(prvm_prog_t *prog)
+{
+       VM_SAFEPARMCOUNT(0, VM_nodegraph_graphset_save);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graphset_save();
+}
+
+// #703 float(float graphid) nodegraph_graph_clear (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_clear(prvm_prog_t *prog)
+{
+       short graphid;
+
+       VM_SAFEPARMCOUNT(1, VM_nodegraph_graph_clear);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_clear(graphid);
+}
+
+// #704 float(float graphid) nodegraph_graph_nodes_count (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_nodes_count(prvm_prog_t *prog)
+{
+       short graphid;
+
+       VM_SAFEPARMCOUNT(1, VM_nodegraph_graph_nodes_count);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_nodes_count(graphid);
+}
+
+// #705 float(float graphid, vector node) nodegraph_graph_add_node (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_add_node(prvm_prog_t *prog)
+{
+       short graphid;
+       vec3_t node;
+
+       VM_SAFEPARMCOUNT(2, VM_nodegraph_graph_add_node);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM1), node);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_add_node(graphid, node);
+}
+
+// #706 float(float graphid, float nodeid) nodegraph_graph_remove_node (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_remove_node(prvm_prog_t *prog)
+{
+       short graphid;
+       short nodeid;
+
+       VM_SAFEPARMCOUNT(2, VM_nodegraph_graph_remove_node);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+       nodeid = (short)PRVM_G_FLOAT(OFS_PARM1);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_remove_node(graphid, nodeid);
+}
+
+// #707 float(float graphid, float nodeid) nodegraph_graph_is_node_valid (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_is_node_valid(prvm_prog_t *prog)
+{
+       short graphid;
+       short nodeid;
+
+       VM_SAFEPARMCOUNT(2, VM_nodegraph_graph_is_node_valid);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+       nodeid = (short)PRVM_G_FLOAT(OFS_PARM1);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_is_node_valid(graphid, nodeid);
+}
+
+// #708 vector(float graphid, float nodeid) nodegraph_graph_get_node (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_get_node(prvm_prog_t *prog)
+{
+       short graphid;
+       short nodeid;
+       vec3_t outnode;
+
+       VM_SAFEPARMCOUNT(2, VM_nodegraph_graph_get_node);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+       nodeid = (short)PRVM_G_FLOAT(OFS_PARM1);
+
+       nodegraph_graph_get_node(graphid, nodeid, outnode);
+
+       VectorCopy(outnode, PRVM_G_VECTOR(OFS_RETURN));
+}
+
+// #709 float(float graphid, float nodeidfrom, float nodeidto) nodegraph_graph_add_link (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_add_link(prvm_prog_t *prog)
+{
+       short graphid;
+       short nodeidfrom;
+       short nodeidto;
+
+       VM_SAFEPARMCOUNT(3, VM_nodegraph_graph_add_link);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+       nodeidfrom = (short)PRVM_G_FLOAT(OFS_PARM1);
+       nodeidto = (short)PRVM_G_FLOAT(OFS_PARM2);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_add_link(graphid, nodeidfrom, nodeidto);
+}
+
+// #710 float(float graphid, float nodeidfrom, float nodeidto) nodegraph_graph_remove_link (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_remove_link(prvm_prog_t *prog)
+{
+       short graphid;
+       short nodeidfrom;
+       short nodeidto;
+
+       VM_SAFEPARMCOUNT(3, VM_nodegraph_graph_remove_link);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+       nodeidfrom = (short)PRVM_G_FLOAT(OFS_PARM1);
+       nodeidto = (short)PRVM_G_FLOAT(OFS_PARM2);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_remove_link(graphid, nodeidfrom, nodeidto);
+}
+// #711 float(float graphid, float nodeidfrom, float nodeidto) nodegraph_graph_does_link_exist (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_does_link_exist(prvm_prog_t *prog)
+{
+       short graphid;
+       short nodeidfrom;
+       short nodeidto;
+
+       VM_SAFEPARMCOUNT(3, VM_nodegraph_graph_does_link_exist);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+       nodeidfrom = (short)PRVM_G_FLOAT(OFS_PARM1);
+       nodeidto = (short)PRVM_G_FLOAT(OFS_PARM2);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_does_link_exist(graphid, nodeidfrom, nodeidto);
+}
+
+// #712 float(float graphid, vector position) nodegraph_graph_find_nearest_nodeid (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_find_nearest_nodeid(prvm_prog_t *prog)
+{
+       short graphid;
+       vec3_t position;
+
+       VM_SAFEPARMCOUNT(2, VM_nodegraph_graph_find_nearest_nodeid);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM1), position);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_find_nearest_nodeid(graphid, position);
+}
+
+// #713 float(float graphid, float nodeidfrom, float nodeidto) nodegraph_graph_query_path (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_query_path(prvm_prog_t *prog)
+{
+       short graphid;
+       short nodeidfrom;
+       short nodeidto;
+
+       VM_SAFEPARMCOUNT(3, VM_nodegraph_graph_query_path);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+       nodeidfrom = (short)PRVM_G_FLOAT(OFS_PARM1);
+       nodeidto = (short)PRVM_G_FLOAT(OFS_PARM2);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_query_path(graphid, nodeidfrom, nodeidto);
+}
+
+// #714 float(float graphid, float nodeid) nodegraph_graph_query_nodes_linked (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_query_nodes_linked(prvm_prog_t *prog)
+{
+       short graphid;
+       short nodeid;
+
+       VM_SAFEPARMCOUNT(2, VM_nodegraph_graph_query_nodes_linked);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+       nodeid = (short)PRVM_G_FLOAT(OFS_PARM1);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_query_nodes_linked(graphid, nodeid);
+}
+
+// #715 float(float graphid, vector position, float radius) nodegraph_graph_query_nodes_in_radius (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_query_nodes_in_radius(prvm_prog_t *prog)
+{
+       short graphid;
+       vec3_t position;
+       float radius;
+
+       VM_SAFEPARMCOUNT(3, VM_nodegraph_graph_query_nodes_in_radius);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM1), position);
+       radius = PRVM_G_FLOAT(OFS_PARM2);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_query_nodes_in_radius(graphid, position, radius);
+}
+
+// #716 float(float queryid) nodegraph_query_release (EXT_NODEGRAPH)
+static void VM_nodegraph_query_release(prvm_prog_t *prog)
+{
+       short queryid;
+
+       VM_SAFEPARMCOUNT(1, VM_nodegraph_query_release);
+
+       queryid = (short)PRVM_G_FLOAT(OFS_PARM0);
 
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_query_release(queryid);
+}
+
+// #717 float(float queryid) nodegraph_query_entries_count (EXT_NODEGRAPH)
+static void VM_nodegraph_query_entries_count(prvm_prog_t *prog)
+{
+       short queryid;
+
+       VM_SAFEPARMCOUNT(1, VM_nodegraph_query_entries_count);
+
+       queryid = (short)PRVM_G_FLOAT(OFS_PARM0);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_query_entries_count(queryid);
+}
+
+// #718 float(float queryid) nodegraph_query_is_valid (EXT_NODEGRAPH)
+static void VM_nodegraph_query_is_valid(prvm_prog_t *prog)
+{
+       short queryid;
+
+       VM_SAFEPARMCOUNT(1, VM_nodegraph_query_is_valid);
+
+       queryid = (short)PRVM_G_FLOAT(OFS_PARM0);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_query_is_valid(queryid);
+}
+
+// #719 float(float queryid) nodegraph_query_get_graphid (EXT_NODEGRAPH)
+static void VM_nodegraph_query_get_graphid(prvm_prog_t *prog)
+{
+       short queryid;
+
+       VM_SAFEPARMCOUNT(1, VM_nodegraph_query_get_graphid);
+
+       queryid = (short)PRVM_G_FLOAT(OFS_PARM0);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_query_get_graphid(queryid);
+}
+
+// #720 float(float queryid, float entryid) nodegraph_query_get_nodeid (EXT_NODEGRAPH)
+static void VM_nodegraph_query_get_nodeid(prvm_prog_t *prog)
+{
+       short queryid;
+       short entryid;
+
+       VM_SAFEPARMCOUNT(2, VM_nodegraph_query_get_nodeid);
+
+       queryid = (short)PRVM_G_FLOAT(OFS_PARM0);
+       entryid = (short)PRVM_G_FLOAT(OFS_PARM1);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_query_get_nodeid(queryid, entryid);
+}
+
+// #721 float(vector nodefrom, vector nodeto, vector mins, vector maxs, float type) nodegraph_moveprobe_fly (EXT_NODEGRAPH)
+static void VM_nodegraph_moveprobe_fly(prvm_prog_t *prog)
+{
+       vec3_t nodefrom;
+       vec3_t nodeto;
+       vec3_t mins;
+       vec3_t maxs;
+       short type;
+
+       VM_SAFEPARMCOUNT(5, VM_nodegraph_moveprobe_fly);
+
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM0), nodefrom);
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM1), nodeto);
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM2), mins);
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM3), maxs);
+
+       type = (short)PRVM_G_FLOAT(OFS_PARM4);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_moveprobe_fly(nodefrom, nodeto, mins, maxs, type);
+}
+
+// #722 (vector nodefrom, vector nodeto, vector mins, vector maxs, float stepheight, float dropheight) nodegraph_moveprobe_walk (EXT_NODEGRAPH)
+static void VM_nodegraph_moveprobe_walk(prvm_prog_t *prog)
+{
+       vec3_t nodefrom;
+       vec3_t nodeto;
+       vec3_t mins;
+       vec3_t maxs;
+       float stepheight;
+       float dropheight;
+
+       VM_SAFEPARMCOUNT(6, VM_nodegraph_moveprobe_walk);
+
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM0), nodefrom);
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM1), nodeto);
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM2), mins);
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM3), maxs);
+
+       stepheight = PRVM_G_FLOAT(OFS_PARM4);
+       dropheight = PRVM_G_FLOAT(OFS_PARM5);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_moveprobe_walk(nodefrom, nodeto, mins, maxs, stepheight, dropheight);
+}
+
+// #723 float(float graphid, vector position, float radius, vector mins, vector maxs, float type) nodegraph_graph_query_nodes_in_radius_fly_reachable (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_query_nodes_in_radius_fly_reachable(prvm_prog_t *prog)
+{
+       short graphid;
+       vec3_t position;
+       float radius;
+       vec3_t mins;
+       vec3_t maxs;
+       short type;
+
+       VM_SAFEPARMCOUNT(6, VM_nodegraph_graph_query_nodes_in_radius_fly_reachable);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM1), position);
+
+       radius = PRVM_G_FLOAT(OFS_PARM2);
+
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM3), mins);
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM4), maxs);
+
+       type = (short)PRVM_G_FLOAT(OFS_PARM5);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_query_nodes_in_radius_fly_reachable(graphid, position, radius, mins, maxs, type);
+}
+
+// #724 float(float graphid, vector position, float radius, vector mins, vector maxs, float stepheight, float dropheight) nodegraph_graph_query_nodes_in_radius_walk_reachable (EXT_NODEGRAPH)
+static void VM_nodegraph_graph_query_nodes_in_radius_walk_reachable(prvm_prog_t *prog)
+{
+       short graphid;
+       vec3_t position;
+       float radius;
+       vec3_t mins;
+       vec3_t maxs;
+       float stepheight;
+       float dropheight;
+
+       VM_SAFEPARMCOUNT(7, VM_nodegraph_graph_query_nodes_in_radius_walk_reachable);
+
+       graphid = (short)PRVM_G_FLOAT(OFS_PARM0);
+
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM1), position);
+
+       radius = PRVM_G_FLOAT(OFS_PARM2);       
+
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM3), mins);
+       VectorCopy(PRVM_G_VECTOR(OFS_PARM4), maxs);
+
+       stepheight = PRVM_G_FLOAT(OFS_PARM5);
+       dropheight = PRVM_G_FLOAT(OFS_PARM6);
+
+       PRVM_G_FLOAT(OFS_RETURN) = (float)nodegraph_graph_query_nodes_in_radius_walk_reachable(graphid, position, radius, mins, maxs, stepheight, dropheight);
+}
 prvm_builtin_t vm_sv_builtins[] = {
 NULL,                                                  // #0 NULL function (not callable) (QUAKE)
 VM_makevectors,                                        // #1 void(vector ang) makevectors (QUAKE)
@@ -3846,7 +4286,115 @@ VM_digest_hex,                                          // #639
 NULL,                                                  // #640
 NULL,                                                  // #641
 VM_coverage,                                           // #642
-NULL,                                                  // #643
+NULL,                                          // #643
+NULL,                                          // #644
+NULL,                                          // #645
+NULL,                                          // #646
+NULL,                                          // #647
+NULL,                                          // #648
+NULL,                                          // #649
+// WRATH range (#650-#???)
+VM_fcopy,                                      // #650 float(string fnfrom, string fnto) fcopy (EXT_WRATH)
+VM_frename,                                    // #651 float (string fnold, string fnnew) frename (EXT_WRATH)
+VM_fremove,                                    // #652 float (string fname) fremove (EXT_WRATH)
+VM_fexists,                                    // #653 float (string fname) fexists (EXT_WRATH)
+VM_rmtree,                                     // #654 float (string path) rmtree (EXT_WRATH)
+VM_SV_walkmovedist, // #655 float (float yaw, float dist[, float settrace]) walkmovedist (EXT_WRATH)
+NULL,                                          // #656
+NULL,                                          // #657
+NULL,                                          // #658
+NULL,                                          // #659
+NULL,                                          // #660
+NULL,                                          // #661
+NULL,                                          // #662
+NULL,                                          // #663
+NULL,                                          // #664
+NULL,                                          // #665
+NULL,                                          // #666
+NULL,                                          // #667
+NULL,                                          // #668
+NULL,                                          // #669
+NULL,                                          // #670
+NULL,                                          // #671
+NULL,                                          // #672
+NULL,                                          // #673
+NULL,                                          // #674
+NULL,                                          // #675
+NULL,                                          // #676
+NULL,                                          // #677
+NULL,                                          // #678
+NULL,                                          // #679
+NULL,                                          // #680
+NULL,                                          // #681
+NULL,                                          // #682
+NULL,                                          // #683
+NULL,                                          // #684
+NULL,                                          // #685
+NULL,                                          // #686
+NULL,                                          // #687
+NULL,                                          // #688
+NULL,                                          // #689
+NULL,                                          // #690
+NULL,                                          // #691
+NULL,                                          // #692
+NULL,                                          // #693
+NULL,                                          // #694
+NULL,                                          // #695
+NULL,                                          // #696
+NULL,                                          // #697
+NULL,                                          // #698
+NULL,                                          // #699
+VM_nodegraph_graphset_clear,                                                           // #700 float() nodegraph_graphset_clear (EXT_NODEGRAPH)
+VM_nodegraph_graphset_load,                                                                    // #701 float() nodegraph_graphset_load (EXT_NODEGRAPH)
+VM_nodegraph_graphset_save,                                                                    // #702 float() nodegraph_graphset_save (EXT_NODEGRAPH)
+VM_nodegraph_graph_clear,                                                                      // #703 float(float graphid) nodegraph_graph_clear (EXT_NODEGRAPH)
+VM_nodegraph_graph_nodes_count,                                                                // #704 float(float graphid) nodegraph_graph_nodes_count (EXT_NODEGRAPH)
+VM_nodegraph_graph_add_node,                                                           // #705 float(float graphid, vector node) nodegraph_graph_add_node (EXT_NODEGRAPH)
+VM_nodegraph_graph_remove_node,                                                                // #706 float(float graphid, float nodeid) nodegraph_graph_remove_node (EXT_NODEGRAPH)
+VM_nodegraph_graph_is_node_valid,                                                      // #707 float(float graphid, float nodeid) nodegraph_graph_is_node_valid (EXT_NODEGRAPH)
+VM_nodegraph_graph_get_node,                                                           // #708 vector(float graphid, float nodeid) nodegraph_graph_get_node (EXT_NODEGRAPH)
+VM_nodegraph_graph_add_link,                                                           // #709 float(float graphid, float nodeidfrom, float nodeidto) nodegraph_graph_add_link (EXT_NODEGRAPH)
+VM_nodegraph_graph_remove_link,                                                                // #710 float(float graphid, float nodeidfrom, float nodeidto) nodegraph_graph_remove_link (EXT_NODEGRAPH)
+VM_nodegraph_graph_does_link_exist,                                                    // #711 float(float graphid, float nodeidfrom, float nodeidto) nodegraph_graph_does_link_exist (EXT_NODEGRAPH)
+VM_nodegraph_graph_find_nearest_nodeid,                                                // #712 float(float graphid, vector position) nodegraph_graph_find_nearest_nodeid (EXT_NODEGRAPH)
+VM_nodegraph_graph_query_path,                                                         // #713 float(float graphid, float nodeidfrom, float nodeidto) nodegraph_graph_query_path (EXT_NODEGRAPH)
+VM_nodegraph_graph_query_nodes_linked,                                         // #714 float(float graphid, float nodeid) nodegraph_graph_query_nodes_linked (EXT_NODEGRAPH)
+VM_nodegraph_graph_query_nodes_in_radius,                                      // #715 float(float graphid, vector position, float radius) nodegraph_graph_query_nodes_in_radius (EXT_NODEGRAPH)
+VM_nodegraph_query_release,                                                                    // #716 float(float queryid) nodegraph_query_release (EXT_NODEGRAPH)
+VM_nodegraph_query_entries_count,                                                      // #717 float(float queryid) nodegraph_query_entries_count (EXT_NODEGRAPH)
+VM_nodegraph_query_is_valid,                                                           // #718 float(float queryid) nodegraph_query_is_valid (EXT_NODEGRAPH)
+VM_nodegraph_query_get_graphid,                                                                // #719 float(float queryid) nodegraph_query_get_graphid (EXT_NODEGRAPH)
+VM_nodegraph_query_get_nodeid,                                                         // #720 float(float queryid, float entryid) nodegraph_query_get_nodeid (EXT_NODEGRAPH)
+VM_nodegraph_moveprobe_fly,                                                                    // #721 float(vector nodefrom, vector nodeto, vector mins, vector maxs, float type) nodegraph_moveprobe_fly (EXT_NODEGRAPH)
+VM_nodegraph_moveprobe_walk,                                                           // #722 (vector nodefrom, vector nodeto, vector mins, vector maxs, float stepheight, float dropheight) nodegraph_moveprobe_walk (EXT_NODEGRAPH)
+VM_nodegraph_graph_query_nodes_in_radius_fly_reachable,                // #723 float(float graphid, vector position, float radius, vector mins, vector maxs, float type) nodegraph_graph_query_nodes_in_radius_fly_reachable (EXT_NODEGRAPH)
+VM_nodegraph_graph_query_nodes_in_radius_walk_reachable,       // #724 float(float graphid, vector position, float radius, vector mins, vector maxs, float stepheight, float dropheight) nodegraph_graph_query_nodes_in_radius_walk_reachable (EXT_NODEGRAPH)
+NULL,                                          // #725
+NULL,                                          // #726
+NULL,                                          // #727
+NULL,                                          // #728
+NULL,                                          // #729
+NULL,                                          // #730
+NULL,                                          // #731
+NULL,                                          // #732
+NULL,                                          // #733
+NULL,                                          // #734
+NULL,                                          // #735
+NULL,                                          // #736
+NULL,                                          // #737
+NULL,                                          // #738
+NULL,                                          // #739
+NULL,                                          // #740
+NULL,                                          // #741
+NULL,                                          // #742
+NULL,                                          // #743
+NULL,                                          // #744
+NULL,                                          // #745
+NULL,                                          // #746
+NULL,                                          // #747
+NULL,                                          // #748
+NULL,                                          // #749
+NULL
 };
 
 const int vm_sv_numbuiltins = sizeof(vm_sv_builtins) / sizeof(prvm_builtin_t);