summaryrefslogtreecommitdiffhomepage
path: root/src/ent.h
diff options
context:
space:
mode:
authorMichael Smith <mikesmiffy128@gmail.com>2023-05-17 23:27:05 +0100
committerMichael Smith <mikesmiffy128@gmail.com>2023-05-17 23:33:33 +0100
commitd03e4138f637027908b52764a2ce3669097947c6 (patch)
treec6596f4169a11410679bbd3add4415b4cc6cc002 /src/ent.h
parentec85df6d2cbb25211613e550bcc21422ee5eb78e (diff)
Add some server entity code-crawling machinery
Diffstat (limited to 'src/ent.h')
-rw-r--r--src/ent.h23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/ent.h b/src/ent.h
index 0273d86..4d2ddd9 100644
--- a/src/ent.h
+++ b/src/ent.h
@@ -18,6 +18,7 @@
#define INC_ENT_H
#include "engineapi.h"
+#include "vcall.h"
/* Returns a server-side edict pointer, or null if not found. */
struct edict *ent_getedict(int idx);
@@ -25,6 +26,28 @@ struct edict *ent_getedict(int idx);
/* Returns an opaque pointer to a server-side entity, or null if not found. */
void *ent_get(int idx);
+struct CEntityFactory; // opaque for now, can move out of ent.c if needed later
+
+/*
+ * Returns the CEntityFactory for a given entity name, or null if not found or
+ * unavailable. This provides a means to create and destroy entities of that
+ * type on the server, as well as opportunities to dig through instructions to
+ * find useful stuff.
+ */
+const struct CEntityFactory *ent_getfactory(const char *name);
+
+/*
+ * Attempts to find the virtual table of an entity class given only its factory.
+ * Returns null if that couldn't be done. Can be used to hook things without
+ * having an instance of the class up-front, or perform further snooping to get
+ * even deeper into an entity's code.
+ *
+ * The classname parameter is used for error messages on failed instruction
+ * searches and isn't used for the search itself.
+ */
+void **ent_findvtable(const struct CEntityFactory *factory,
+ const char *classname);
+
#endif
// vi: sw=4 ts=4 noet tw=80 cc=80