From 6da1f3c4fa6569c4b37a31f003f58b25893527d6 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Sat, 10 Apr 2021 09:35:06 +0200 Subject: [PATCH] GS-Entbase: massive optimisation - any func_wall and illusionary without a targetname will not be networked and handled 100% client-side. --- src/gs-entbase/server.src | 2 - src/gs-entbase/server/func_illusionary.qc | 52 -- src/gs-entbase/shared.src | 2 + src/gs-entbase/shared/baseentity.h | 20 +- src/gs-entbase/shared/baseentity.qc | 459 ++++++++---------- src/gs-entbase/shared/func_illusionary.qc | 142 ++++++ .../{server => shared}/func_wall.qc | 71 ++- src/shared/flags.h | 46 +- src/shared/materials.h | 38 +- 9 files changed, 472 insertions(+), 360 deletions(-) delete mode 100644 src/gs-entbase/server/func_illusionary.qc create mode 100644 src/gs-entbase/shared/func_illusionary.qc rename src/gs-entbase/{server => shared}/func_wall.qc (54%) diff --git a/src/gs-entbase/server.src b/src/gs-entbase/server.src index 57ab4517..100b1e56 100644 --- a/src/gs-entbase/server.src +++ b/src/gs-entbase/server.src @@ -40,7 +40,6 @@ server/func_button.qc server/func_brush.qc server/func_door.qc server/func_door_rotating.qc -server/func_illusionary.qc server/func_lod.qc server/func_ladder.qc server/func_train.qc @@ -51,7 +50,6 @@ server/func_tank.qc server/func_tankmortar.qc server/func_tankcontrols.qc server/func_pushable.qc -server/func_wall.qc server/func_wall_toggle.qc server/func_conveyor.qc server/func_rotating.qc diff --git a/src/gs-entbase/server/func_illusionary.qc b/src/gs-entbase/server/func_illusionary.qc deleted file mode 100644 index 04acc145..00000000 --- a/src/gs-entbase/server/func_illusionary.qc +++ /dev/null @@ -1,52 +0,0 @@ -/* - * Copyright (c) 2016-2020 Marco Hladik - * - * Permission to use, copy, modify, and distribute this software for any - * purpose with or without fee is hereby granted, provided that the above - * copyright notice and this permission notice appear in all copies. - * - * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES - * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR - * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER - * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING - * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. - */ - -/*QUAKED func_illusionary (0 .5 .8) ? -"targetname" Name - -Brush that lets light to pass through it and is non-solid. -On idTech 2 BSPs, it will change texture variants when triggered. - -Trivia: -This entity was introduced in Quake (1996). -*/ - -class func_illusionary:CBaseEntity -{ - void(void) func_illusionary; - - virtual void(void) Use; -}; - -void func_illusionary::func_illusionary(void) -{ - CBaseEntity::CBaseEntity(); - - SetMovetype(MOVETYPE_PUSH); - SetSolid(SOLID_NOT); - SetModel(model); - SetOrigin(origin); - - // TODO: Add support for (skin) -1 = Empty, -7 = Volumetric light - if (skin < 0) { - SetSkin(0); - } -} - -void func_illusionary::Use(void) -{ - SetSkin(1-skin); -} diff --git a/src/gs-entbase/shared.src b/src/gs-entbase/shared.src index b42a3c0f..4b633080 100644 --- a/src/gs-entbase/shared.src +++ b/src/gs-entbase/shared.src @@ -9,6 +9,8 @@ shared/func_friction.qc shared/env_projectedtexture.qc shared/light_dynamic.qc shared/func_monitor.qc +shared/func_illusionary.qc +shared/func_wall.qc shared/trigger_camera.qc shared/trigger_gravity.qc shared/info_particle_system.qc diff --git a/src/gs-entbase/shared/baseentity.h b/src/gs-entbase/shared/baseentity.h index 225d1caf..214a4929 100644 --- a/src/gs-entbase/shared/baseentity.h +++ b/src/gs-entbase/shared/baseentity.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020 Marco Hladik + * Copyright (c) 2016-2021 Marco Hladik * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -30,7 +30,6 @@ class CBaseEntity void(void) CBaseEntity; virtual void(void) Init; virtual void(void) Initialized; - virtual void(string, string) SpawnKey; virtual void(string) Sentence; virtual void(void) ProcessWordQue; virtual void(float flChanged) ReceiveEntity; @@ -62,6 +61,8 @@ class CBaseEntity virtual float(entity, float) SendEntity; virtual void(void) Pain; virtual void(void) Death; + virtual void(void) SpawnInit; +#endif virtual void(float) SetEffects; virtual void(float) SetFrame; @@ -76,15 +77,19 @@ class CBaseEntity virtual void(vector) SetOrigin; virtual void(vector, vector) SetSize; virtual void(string, string) SpawnKey; - virtual void(void) SpawnInit; -#endif - + #ifdef GS_RENDERFX int m_iRenderFX; float m_iRenderMode; float m_flRenderAmt; vector m_vecRenderColor; + /* set */ + virtual void(int) SetRenderFX; + virtual void(float) SetRenderMode; + virtual void(float) SetRenderAmt; + virtual void(vector) SetRenderColor; + #ifdef CLIENT virtual void(void) RenderFXPass; #else @@ -93,11 +98,6 @@ class CBaseEntity float m_oldiRenderMode; float m_oldflRenderAmt; vector m_oldvecRenderColor; - - virtual void(int) SetRenderFX; - virtual void(float) SetRenderMode; - virtual void(float) SetRenderAmt; - virtual void(vector) SetRenderColor; #endif #endif }; diff --git a/src/gs-entbase/shared/baseentity.qc b/src/gs-entbase/shared/baseentity.qc index dd2908ea..b91f8798 100644 --- a/src/gs-entbase/shared/baseentity.qc +++ b/src/gs-entbase/shared/baseentity.qc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020 Marco Hladik + * Copyright (c) 2016-2021 Marco Hladik * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -323,61 +323,6 @@ CBaseEntity::ReceiveEntity(float flChanged) setsize(this, mins, maxs); } -void -CBaseEntity::SpawnKey(string strField, string strKey) -{ - switch (strField) { - /* compiler specific stuff */ - case "angle": - case "_minlight": - case "_cs": - break; - case "shadows": - if (stof(strKey) == 1) - effects &= ~EF_NOSHADOW; - break; - case "targetname": - targetname = strKey; - break; - case "target": - target = strKey; - break; - case "origin": - origin = stov(strKey); - setorigin(this, origin); - break; - case "angles": - angles = stov(strKey); - break; - case "model": - model = strKey; - break; - case "style": - style = stof(strKey); - break; - case "color": - color = stov(strKey); - break; - case "movetype": - movetype = stof(strKey); - break; - case "solid": - solid = stof(strKey); - break; - case "scale": - scale = stof(strKey); - break; - case "spawnflags": - spawnflags = stof(strKey); - break; - default: -#ifdef GS_DEVELOPER - print(sprintf("%s::SpawnKey: Unknown '%s' value '%s'\n", - this.classname, strField, strKey)); -#endif - } -} - void CBaseEntity::postdraw(void) { @@ -440,156 +385,6 @@ CBaseEntity_ParseSentence(void) } } #else -/* we want to really use those set functions because they'll notify of any - * networking related changes. otherwise we'll have to keep track of copies - * that get updated every frame */ -void -CBaseEntity::SetEffects(float newEffects) -{ - if (newEffects == effects) - return; - - effects = newEffects; - SendFlags |= BASEFL_CHANGED_EFFECTS; -} -void -CBaseEntity::SetFrame(float newFrame) -{ - if (newFrame == frame) - return; - - frame = newFrame; - frame1time = 0.0f; - SendFlags |= BASEFL_CHANGED_FRAME; -} -void -CBaseEntity::SetModel(string newModel) -{ - model = newModel; - setmodel(this, newModel); - SendFlags |= BASEFL_CHANGED_MODELINDEX; -} -void -CBaseEntity::SetModelindex(float newModelIndex) -{ - if (newModelIndex == modelindex) - return; - - modelindex = newModelIndex; - SendFlags |= BASEFL_CHANGED_MODELINDEX; -} -void -CBaseEntity::SetMovetype(float newMovetype) -{ - if (newMovetype == movetype) - return; - - movetype = newMovetype; - SendFlags |= BASEFL_CHANGED_MOVETYPE; -} -void -CBaseEntity::SetSkin(float newSkin) -{ - if (newSkin == skin) - return; - - skin = newSkin; - SendFlags |= BASEFL_CHANGED_SKIN; -} -void -CBaseEntity::SetSolid(float newSolid) -{ - if (newSolid == solid) - return; - - solid = newSolid; - SendFlags |= BASEFL_CHANGED_SOLID; -} -void -CBaseEntity::SetBody(int newBody) -{ - if (newBody == m_iBody) - return; - - m_iBody = newBody; - SendFlags |= BASEFL_CHANGED_BODY; -} -void -CBaseEntity::SetScale(float newScale) -{ - if (newScale == scale) - return; - - scale = newScale; - SendFlags |= BASEFL_CHANGED_SCALE; -} -void -CBaseEntity::SetAngles(vector newAngles) -{ - if (newAngles == angles) - return; - - angles = newAngles; - SendFlags |= BASEFL_CHANGED_ANGLES; -} -void -CBaseEntity::SetSize(vector newMins, vector newMaxs) -{ - if (newMins == mins && newMaxs == maxs) - return; - - setsize(this, newMins, newMaxs); - SendFlags |= BASEFL_CHANGED_SIZE; -} -void -CBaseEntity::SetOrigin(vector newOrigin) -{ - if (newOrigin == origin) - return; - - setorigin(this, newOrigin); - SendFlags |= BASEFL_CHANGED_ORIGIN; -} - -#ifdef GS_RENDERFX -void -CBaseEntity::SetRenderFX(int newFX) -{ - if (newFX == m_iRenderFX) - return; - - m_iRenderFX = newFX; - SendFlags |= BASEFL_CHANGED_RENDERFX; -} -void -CBaseEntity::SetRenderMode(float newMode) -{ - if (newMode == m_iRenderMode) - return; - - m_iRenderMode = newMode; - SendFlags |= BASEFL_CHANGED_RENDERMODE; -} -void -CBaseEntity::SetRenderAmt(float newAmt) -{ - if (newAmt == m_flRenderAmt) - return; - - m_flRenderAmt = newAmt; - SendFlags |= BASEFL_CHANGED_RENDERAMT; -} -void -CBaseEntity::SetRenderColor(vector newColor) -{ - if (newColor == m_vecRenderColor) - return; - - m_vecRenderColor = newColor; - SendFlags |= BASEFL_CHANGED_RENDERCOLOR; -} -#endif - /* Make sure StartFrame calls this */ float CBaseEntity::SendEntity(entity ePEnt, float fChanged) @@ -789,6 +584,204 @@ CBaseEntity::Hide(void) takedamage = DAMAGE_NO; } +void +CBaseEntity::CBaseEntity(void) +{ + /* Not in Deathmatch */ + if (spawnflags & 2048) { + if (cvar("sv_playerslots") > 1) { + remove(this); + return; + } + } + + identity = 1; + effects |= EF_NOSHADOW; + scale = 1.0f; + + SpawnInit(); + + m_oldAngle = angles; + m_oldOrigin = origin; + m_oldSolid = solid; + m_oldHealth = health; + m_oldModel = Util_FixModel(model); + +#ifdef GS_RENDERFX + m_oldiRenderFX = m_iRenderFX; + m_oldiRenderMode = m_iRenderMode; + m_oldvecRenderColor = m_vecRenderColor; + m_oldflRenderAmt = m_flRenderAmt; + m_oldvecRenderColor = m_vecRenderColor; + m_oldflRenderAmt = m_flRenderAmt; +#endif + + m_oldstrTarget = target; + + if (m_oldModel != "") { + precache_model(m_oldModel); + } +} +#endif + +/* we want to really use those set functions because they'll notify of any + * networking related changes. otherwise we'll have to keep track of copies + * that get updated every frame */ +void +CBaseEntity::SetSendFlags(float flSendFlags) +{ +#ifdef SERVER + SendFlags |= flSendFlags; +#endif +} + +void +CBaseEntity::SetEffects(float newEffects) +{ + if (newEffects == effects) + return; + + effects = newEffects; + SetSendFlags(BASEFL_CHANGED_EFFECTS); +} +void +CBaseEntity::SetFrame(float newFrame) +{ + if (newFrame == frame) + return; + + frame = newFrame; + frame1time = 0.0f; + SetSendFlags(BASEFL_CHANGED_FRAME); +} +void +CBaseEntity::SetModel(string newModel) +{ + model = newModel; + setmodel(this, newModel); + SetSendFlags(BASEFL_CHANGED_MODELINDEX); +} +void +CBaseEntity::SetModelindex(float newModelIndex) +{ + if (newModelIndex == modelindex) + return; + + modelindex = newModelIndex; + SetSendFlags(BASEFL_CHANGED_MODELINDEX); +} +void +CBaseEntity::SetMovetype(float newMovetype) +{ + if (newMovetype == movetype) + return; + + movetype = newMovetype; + SetSendFlags(BASEFL_CHANGED_MOVETYPE); +} +void +CBaseEntity::SetSkin(float newSkin) +{ + if (newSkin == skin) + return; + + skin = newSkin; + SetSendFlags(BASEFL_CHANGED_SKIN); +} +void +CBaseEntity::SetSolid(float newSolid) +{ + if (newSolid == solid) + return; + + solid = newSolid; + SetSendFlags(BASEFL_CHANGED_SOLID); +} +void +CBaseEntity::SetBody(int newBody) +{ + if (newBody == m_iBody) + return; + + m_iBody = newBody; + SetSendFlags(BASEFL_CHANGED_BODY); +} +void +CBaseEntity::SetScale(float newScale) +{ + if (newScale == scale) + return; + + scale = newScale; + SetSendFlags(BASEFL_CHANGED_SCALE); +} +void +CBaseEntity::SetAngles(vector newAngles) +{ + if (newAngles == angles) + return; + + angles = newAngles; + SetSendFlags(BASEFL_CHANGED_ANGLES); +} +void +CBaseEntity::SetSize(vector newMins, vector newMaxs) +{ + if (newMins == mins && newMaxs == maxs) + return; + + setsize(this, newMins, newMaxs); + SetSendFlags(BASEFL_CHANGED_SIZE); +} +void +CBaseEntity::SetOrigin(vector newOrigin) +{ + if (newOrigin == origin) + return; + + setorigin(this, newOrigin); + SetSendFlags(BASEFL_CHANGED_ORIGIN); +} + +#ifdef GS_RENDERFX +void +CBaseEntity::SetRenderFX(int newFX) +{ + if (newFX == m_iRenderFX) + return; + + m_iRenderFX = newFX; + SetSendFlags(BASEFL_CHANGED_RENDERFX); +} +void +CBaseEntity::SetRenderMode(float newMode) +{ + if (newMode == m_iRenderMode) + return; + + m_iRenderMode = newMode; + SetSendFlags(BASEFL_CHANGED_RENDERMODE); +} +void +CBaseEntity::SetRenderAmt(float newAmt) +{ + if (newAmt == m_flRenderAmt) + return; + + m_flRenderAmt = newAmt; + SetSendFlags(BASEFL_CHANGED_RENDERAMT); +} +void +CBaseEntity::SetRenderColor(vector newColor) +{ + if (newColor == m_vecRenderColor) + return; + + m_vecRenderColor = newColor; + SetSendFlags(BASEFL_CHANGED_RENDERCOLOR); +} +#endif + void CBaseEntity::SpawnKey(string strKey, string strValue) { @@ -810,9 +803,6 @@ CBaseEntity::SpawnKey(string strKey, string strValue) case "solid": solid = stof(strValue); break; - case "health": - health = stof(strValue); - break; case "shadows": if (stof(strValue) == 1) { effects &= ~EF_NOSHADOW; @@ -852,61 +842,26 @@ CBaseEntity::SpawnKey(string strKey, string strValue) m_iRenderFX = stoi(strValue); break; #endif - case "parentname": - m_parent = strValue; - break; case "model": model = strValue; break; case "classname": case "spawnflags": break; +#ifdef SERVER + case "health": + health = stof(strValue); + break; + case "parentname": + m_parent = strValue; + break; case "ignorepvs": pvsflags = PVSF_IGNOREPVS; break; +#endif default: print(sprintf("^3%s^7::SpawnKey:: Unknown key '%s' with value '%s'\n", classname, strKey, strValue)); break; } } - -void -CBaseEntity::CBaseEntity(void) -{ - /* Not in Deathmatch */ - if (spawnflags & 2048) { - if (cvar("sv_playerslots") > 1) { - remove(this); - return; - } - } - - identity = 1; - effects |= EF_NOSHADOW; - scale = 1.0f; - - SpawnInit(); - - m_oldAngle = angles; - m_oldOrigin = origin; - m_oldSolid = solid; - m_oldHealth = health; - m_oldModel = Util_FixModel(model); - -#ifdef GS_RENDERFX - m_oldiRenderFX = m_iRenderFX; - m_oldiRenderMode = m_iRenderMode; - m_oldvecRenderColor = m_vecRenderColor; - m_oldflRenderAmt = m_flRenderAmt; - m_oldvecRenderColor = m_vecRenderColor; - m_oldflRenderAmt = m_flRenderAmt; -#endif - - m_oldstrTarget = target; - - if (m_oldModel != "") { - precache_model(m_oldModel); - } -} -#endif diff --git a/src/gs-entbase/shared/func_illusionary.qc b/src/gs-entbase/shared/func_illusionary.qc new file mode 100644 index 00000000..bcf59321 --- /dev/null +++ b/src/gs-entbase/shared/func_illusionary.qc @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2016-2021 Marco Hladik + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING + * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/*QUAKED func_illusionary (0 .5 .8) ? +"targetname" Name + +Brush that lets light to pass through it and is non-solid. +On idTech 2 BSPs, it will change texture variants when triggered. + +Trivia: +This entity was introduced in Quake (1996). +*/ + +class +#ifdef CLIENT +func_illusionary:CBaseEntity +#else +func_illusionary:CBaseTrigger +#endif +{ + void(void) func_illusionary; + +#ifdef SERVER + virtual void(void) Respawn; + virtual float(entity, float) SendEntity; + virtual void(entity, int) Trigger; +#else + virtual float() predraw; + virtual void(void) Init; +#endif +}; + +#ifdef SERVER +/* we're overriding SendEntity so that we don't network func_illusionarys + * without a targetname. They'll never experience gameplay changes + * and therefore can be handled fully client-side */ +float +func_illusionary::SendEntity(entity pvsent, float fl) +{ + if (targetname) + CBaseTrigger::SendEntity(pvsent, fl); + else + return FALSE; +} + +void +func_illusionary::Trigger(entity act, int state) +{ + switch (state) { + case TRIG_OFF: + SetSkin(0); + break; + case TRIG_ON: + SetSkin(1); + break; + default: + SetSkin(1-skin); + } +} + +void +func_illusionary::Respawn(void) +{ + /* reset the visual parameters */ + CBaseEntity::Respawn(); + + /* func_illusionary specifics */ + SetAngles([0,0,0]); + SetMovetype(MOVETYPE_PUSH); + SetSolid(SOLID_BSP); + SetModel(m_oldModel); + SetOrigin(m_oldOrigin); + SetSkin(0); + + // TODO: Add support for (skin) -1 = Empty, -7 = Volumetric light + if (skin < 0) { + SetSkin(0); + } +} +#else +float +func_illusionary::predraw(void) +{ + vector vecPlayer; + + int s = (float)getproperty(VF_ACTIVESEAT); + pSeat = &g_seats[s]; + vecPlayer = pSeat->m_vecPredictedOrigin; + + if (checkpvs(vecPlayer, this) == FALSE) { + return PREDRAW_NEXT; + } + + CBaseEntity::predraw(); + addentity(self); + return PREDRAW_NEXT; +} + +void +func_illusionary::Init(void) +{ + CBaseEntity::Init(); + + /* this entity is being controlled by the server, remove it */ + if (targetname) { + think = Util_Destroy; + nextthink = time; + return; + } + + precache_model(model); + setmodel(this, model); + setorigin(this, origin); + SetAngles([0,0,0]); + SetMovetype(MOVETYPE_NONE); + SetSolid(SOLID_NOT); + drawmask = MASK_ENGINE; +} +#endif + +void +func_illusionary::func_illusionary(void) +{ +#ifdef CLIENT + Init(); +#else + CBaseTrigger::CBaseTrigger(); +#endif +} diff --git a/src/gs-entbase/server/func_wall.qc b/src/gs-entbase/shared/func_wall.qc similarity index 54% rename from src/gs-entbase/server/func_wall.qc rename to src/gs-entbase/shared/func_wall.qc index 4804042b..d06e51c3 100644 --- a/src/gs-entbase/server/func_wall.qc +++ b/src/gs-entbase/shared/func_wall.qc @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2020 Marco Hladik + * Copyright (c) 2016-2021 Marco Hladik * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -24,14 +24,38 @@ Trivia: This entity was introduced in Quake (1996). */ -class func_wall:CBaseTrigger +class +#ifdef CLIENT +func_wall:CBaseEntity +#else +func_wall:CBaseTrigger +#endif { void(void) func_wall; +#ifdef SERVER virtual void(void) Respawn; + virtual float(entity, float) SendEntity; virtual void(entity, int) Trigger; +#else + virtual float() predraw; + virtual void(void) Init; +#endif }; +#ifdef SERVER +/* we're overriding SendEntity so that we don't network func_walls + * without a targetname. They'll never experience gameplay changes + * and therefore can be handled fully client-side */ +float +func_wall::SendEntity(entity pvsent, float fl) +{ + if (targetname) + CBaseTrigger::SendEntity(pvsent, fl); + else + return FALSE; +} + void func_wall::Trigger(entity act, int state) { @@ -61,9 +85,52 @@ func_wall::Respawn(void) SetOrigin(m_oldOrigin); SetFrame(0); } +#else +float +func_wall::predraw(void) +{ + vector vecPlayer; + + int s = (float)getproperty(VF_ACTIVESEAT); + pSeat = &g_seats[s]; + vecPlayer = pSeat->m_vecPredictedOrigin; + + if (checkpvs(vecPlayer, this) == FALSE) { + return PREDRAW_NEXT; + } + + CBaseEntity::predraw(); + addentity(self); + return PREDRAW_NEXT; +} + +void +func_wall::Init(void) +{ + CBaseEntity::Init(); + + /* this entity is being controlled by the server, remove it */ + if (targetname) { + think = Util_Destroy; + nextthink = time; + return; + } + + precache_model(model); + setmodel(this, model); + setorigin(this, origin); + movetype = MOVETYPE_NONE; + drawmask = MASK_ENGINE; + solid = SOLID_BSP; +} +#endif void func_wall::func_wall(void) { +#ifdef CLIENT + Init(); +#else CBaseTrigger::CBaseTrigger(); +#endif } diff --git a/src/shared/flags.h b/src/shared/flags.h index 64864aa1..663ea5bb 100644 --- a/src/shared/flags.h +++ b/src/shared/flags.h @@ -15,29 +15,29 @@ */ /* engine reserved */ -#define FL_FLY (1<<0) -#define FL_SWIM (1<<1) -#define FL_GLIMPSE (1<<2) -#define FL_CLIENT (1<<3) -#define FL_INWATER (1<<4) -#define FL_MONSTER (1<<5) -#define FL_GODMODE (1<<6) -#define FL_NOTARGET (1<<7) -#define FL_ITEM (1<<8) -#define FL_ONGROUND (1<<9) -#define FL_PARTIALGROUND (1<<10) -#define FL_WATERJUMP (1<<11) -#define FL_JUMPRELEASED (1<<12) +#define FL_FLY (1<<0) +#define FL_SWIM (1<<1) +#define FL_GLIMPSE (1<<2) +#define FL_CLIENT (1<<3) +#define FL_INWATER (1<<4) +#define FL_MONSTER (1<<5) +#define FL_GODMODE (1<<6) +#define FL_NOTARGET (1<<7) +#define FL_ITEM (1<<8) +#define FL_ONGROUND (1<<9) +#define FL_PARTIALGROUND (1<<10) +#define FL_WATERJUMP (1<<11) +#define FL_JUMPRELEASED (1<<12) #define FL_FINDABLE_NONSOLID (1<<14) -#define FLQW_LAGGEDMOVE (1<<16) +#define FLQW_LAGGEDMOVE (1<<16) /* nuclide */ -#define FL_ONLADDER (1<<13) -#define FL_CROUCHING (1<<17) -#define FL_INVEHICLE (1<<18) -#define FL_FROZEN (1<<19) -#define FL_USE_RELEASED (1<<20) -#define FL_NOATTACK (1<<21) -#define FL_RESERVED1 (1<<22) -#define FL_RESERVED2 (1<<23) -#define FL_RESERVED3 (1<<15) +#define FL_ONLADDER (1<<13) +#define FL_CROUCHING (1<<17) +#define FL_INVEHICLE (1<<18) +#define FL_FROZEN (1<<19) +#define FL_USE_RELEASED (1<<20) +#define FL_NOATTACK (1<<21) +#define FL_RESERVED1 (1<<22) +#define FL_RESERVED2 (1<<23) +#define FL_RESERVED3 (1<<15) diff --git a/src/shared/materials.h b/src/shared/materials.h index 661ff17d..cd2a97cc 100644 --- a/src/shared/materials.h +++ b/src/shared/materials.h @@ -41,15 +41,15 @@ enum /* q3 bsp base flags */ #define SURF_NODAMAGE 0x1i // never give falling damage -#define SURF_SLICK 0x2i // effects game physics -#define SURF_SKY 0x4i // lighting from environment map -#define SURF_LADDER 0x8i // climb this surface +#define SURF_SLICK 0x2i // effects game physics +#define SURF_SKY 0x4i // lighting from environment map +#define SURF_LADDER 0x8i // climb this surface #define SURF_NOIMPACT 0x10i // don't make missile explosions #define SURF_NOMARKS 0x20i // don't leave missile marks #define SURF_Q3FLESH 0x40i // make flesh sounds and effects -#define SURF_NODRAW 0x80i // don't generate a drawsurface at all -#define SURF_HINT 0x100i // make a primary bsp splitter -#define SURF_SKIP 0x200i // completely ignore, allowing non-closed brushes +#define SURF_NODRAW 0x80i // don't generate a drawsurface at all +#define SURF_HINT 0x100i // make a primary bsp splitter +#define SURF_SKIP 0x200i // completely ignore, allowing non-closed brushes #define SURF_NOLIGHTMAP 0x400i // surface doesn't need a lightmap #define SURF_POINTLIGHT 0x800i // generate lighting info at vertexes #define SURF_METALSTEPS 0x1000i // clanking footsteps @@ -58,7 +58,7 @@ enum #define SURF_LIGHTFILTER 0x8000i // act as a light filter during q3map -light #define SURF_ALPHASHADOW 0x10000i // do per-pixel light shadow casting in q3map #define SURF_NODLIGHT 0x20000i // don't dlight even if solid (solid lava, skies) -#define SURF_DUST 0x40000i // leave a dust trail when walking on this surface +#define SURF_DUST 0x40000i // leave a dust trail when walking on this surface /* behaviour surfaceflags */ #define SURF_LEAKSTEAM 0x00080000i /* when shot, the material emits steam */ @@ -72,21 +72,21 @@ enum #define SURF_RESERVED7 0x08000000i /* material surfaceflags (need to be masked) */ -#define SURF_MASK 0x0FFFFFFFi -#define SURF_ALIEN 0x10000000i +#define SURF_MASK 0x0FFFFFFFi +#define SURF_ALIEN 0x10000000i #define SURF_BLOODYFLESH 0x20000000i #define SURF_FOLIAGE 0x30000000i #define SURF_COMPUTER 0x40000000i -#define SURF_DIRT 0x50000000i -#define SURF_VENT 0x60000000i -#define SURF_GRATE 0x70000000i -#define SURF_METAL 0x80000000i -#define SURF_GLASS 0x90000000i -#define SURF_SAND 0xA0000000i -#define SURF_SLOSH 0xB0000000i -#define SURF_SNOW 0xC0000000i -#define SURF_TILE 0xD0000000i -#define SURF_WOOD 0xE0000000i +#define SURF_DIRT 0x50000000i +#define SURF_VENT 0x60000000i +#define SURF_GRATE 0x70000000i +#define SURF_METAL 0x80000000i +#define SURF_GLASS 0x90000000i +#define SURF_SAND 0xA0000000i +#define SURF_SLOSH 0xB0000000i +#define SURF_SNOW 0xC0000000i +#define SURF_TILE 0xD0000000i +#define SURF_WOOD 0xE0000000i #define SURF_CONCRETE 0xF0000000i /* this is used for material-lookups using the external materials.txt file