Skip to content

Commit

Permalink
FIELD: Add support for SendEntity and pvsflags.
Browse files Browse the repository at this point in the history
  • Loading branch information
dsvensson committed Feb 2, 2025
1 parent 44fa0b2 commit 1d5aa36
Show file tree
Hide file tree
Showing 2 changed files with 50 additions and 0 deletions.
2 changes: 2 additions & 0 deletions include/g_syscalls.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,8 @@ intptr_t trap_SetSendNeeded(intptr_t subject, intptr_t flags, intptr_t to);
void ExtFieldSetAlpha(gedict_t *ed, float alpha);
float ExtFieldGetAlpha(gedict_t *ed);
void ExtFieldSetColorMod(gedict_t *ed, float r, float g, float b);
void ExtFieldSetSendEntity(gedict_t *ed, func_t callback);
void ExtFieldSetPvsFlags(gedict_t *ed, float pvsflags);
void SetSendNeeded(gedict_t *ed, int sendflags, int unicast);

void trap_changelevelHub(const char *name, const char *entityname, const char *startspot);
Expand Down
48 changes: 48 additions & 0 deletions src/g_syscalls_extra.c
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ typedef union fi_s

static unsigned int field_ref_alpha = 0;
static unsigned int field_ref_colormod = 0;
static unsigned int field_ref_sendentity = 0;
static unsigned int field_ref_pvsflags = 0;

void ExtFieldSetAlpha(gedict_t *ed, float alpha)
{
Expand Down Expand Up @@ -76,6 +78,52 @@ void ExtFieldSetColorMod(gedict_t *ed, float r, float g, float b)
}
}

void ExtFieldSetSendEntity(gedict_t *ed, func_t callback)
{
if (!field_ref_sendentity && HAVEEXTENSION(G_MAPEXTFIELDPTR) && HAVEEXTENSION(G_SETEXTFIELDPTR))
{
field_ref_sendentity = trap_MapExtFieldPtr("SendEntity");
}
if (field_ref_sendentity)
{
int enable = 1;
trap_SetExtFieldPtr(ed, field_ref_sendentity, (void*)&enable, sizeof(int));
ed->SendEntity = callback; // invoked via GAME_EDICT_CSQCSEND

}
else if (HAVEEXTENSION(G_SETEXTFIELD))
{
trap_SetExtField(ed, "SendEntity", 1);
ed->SendEntity = callback; // invoked via GAME_EDICT_CSQCSEND
}
else if (cvar("developer"))
{
G_bprint(PRINT_HIGH, "SendEntity needs SetExtField or MapExtFieldPtr and SetExtFieldPtr support in server\n");
}
}

void ExtFieldSetPvsFlags(gedict_t *ed, float pvsflags)
{
if (!field_ref_pvsflags && HAVEEXTENSION(G_MAPEXTFIELDPTR) && HAVEEXTENSION(G_SETEXTFIELDPTR))
{
field_ref_pvsflags = trap_MapExtFieldPtr("pvsflags");
}
if (field_ref_pvsflags)
{
trap_SetExtFieldPtr(ed, field_ref_pvsflags, (void*)&pvsflags, sizeof(float));
}
else if (HAVEEXTENSION(G_SETEXTFIELD))
{
fi_t tmp;
tmp._float = pvsflags;
trap_SetExtField(ed, "pvsflags", tmp._int);
}
else if (cvar("developer"))
{
G_bprint(PRINT_HIGH, "pvsflags needs SetExtField or MapExtFieldPtr and SetExtFieldPtr support in server\n");
}
}

void SetSendNeeded(gedict_t *ed, int sendflags, int unicast)
{
if (!HAVEEXTENSION(G_SETSENDNEEDED))
Expand Down

0 comments on commit 1d5aa36

Please sign in to comment.