diff --git a/base/src/shared/weapon_common.qc b/base/src/shared/weapon_common.qc index 4dc60d91..4b2b5fbc 100644 --- a/base/src/shared/weapon_common.qc +++ b/base/src/shared/weapon_common.qc @@ -186,6 +186,8 @@ Weapons_Draw(player pl) if (g_weapons[i].updateammo != __NULL__) g_weapons[i].updateammo(pl); + + pl.gflags |= GF_SEMI_TOGGLED; } void @@ -204,6 +206,9 @@ Weapons_Primary(player pl) if (pl.flags & FL_NOATTACK) return; + + if (pl.gflags & GF_SEMI_TOGGLED) + return; if (g_weapons[i].primary != __NULL__) g_weapons[i].primary(pl); diff --git a/src/client/player.qc b/src/client/player.qc index 31dc8a24..fb6ba87b 100644 --- a/src/client/player.qc +++ b/src/client/player.qc @@ -71,8 +71,8 @@ player::predraw(void) if (autocvar_cl_thirdperson == TRUE || !this_us) { Voice_Draw3D(this); Player_PreDraw(this, TRUE); - if (p_model) - addentity(p_model); + //if (p_model) + // addentity(p_model); //addentity(this); } else { Player_PreDraw(this, FALSE); diff --git a/src/gs-entbase/shared/spraylogo.qc b/src/gs-entbase/shared/spraylogo.qc index c580c132..f465cc2e 100644 --- a/src/gs-entbase/shared/spraylogo.qc +++ b/src/gs-entbase/shared/spraylogo.qc @@ -89,6 +89,7 @@ CSEv_Spraylogo(void) #ifdef CLIENT class CSpraylogo { + vector m_vecColor; vector m_vecPosition; vector m_vecAngles; int m_iOwnerID; @@ -104,7 +105,7 @@ const string g_spray_mat = \ "polygonOffset\n" \ "{\n" \ "map $rt:%s\n" \ - "blendfunc blendFunc GL_DST_COLOR GL_ZERO\n" \ + "blendfunc GL_DST_COLOR GL_ZERO\n" \ "rgbGen vertex\n" \ "}\n" \ "}"; @@ -137,14 +138,21 @@ CSpraylogo::predraw(void) vector width; vector height; vector light; + vector color; + vector combined; + color = stov(getplayerkeyvalue(m_iOwnerID, "spraycolor")); + light = (getlight(m_vecPosition) / 255); - light = getlight(m_vecPosition) / 255; + /* unrolling this because the compiler spat out garbage */ + combined[0] = m_vecColor[0] * light[0]; + combined[1] = m_vecColor[1] * light[1]; + combined[2] = m_vecColor[2] * light[2]; /* TODO: handle spray dimensions independently */ makevectors(m_vecAngles); width = v_up / 64; height = v_forward / 64; - adddecal(m_strName, m_vecPosition, width, height, light, 1.0f); + adddecal(m_strName, m_vecPosition, width, height, combined, 1.0f); } return (PREDRAW_NEXT); } @@ -165,5 +173,6 @@ Spray_Parse(void) spSelf.m_iOwnerID = readentitynum() - 1; spSelf.m_strName = sprintf("spray_%i", spSelf.m_iOwnerID); spSelf.m_m_strPath = sprintf("simg_%i", spSelf.m_iOwnerID); + spSelf.m_vecColor = stov(getplayerkeyvalue(spSelf.m_iOwnerID, "spraycolor")); } #endif diff --git a/src/server/gamerules.qc b/src/server/gamerules.qc index 995c6ac3..9094b8f7 100644 --- a/src/server/gamerules.qc +++ b/src/server/gamerules.qc @@ -14,6 +14,8 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +var bool autocvar_sv_friendlyFire = false; + /* init */ void CGameRules::InitPostEnts(void) @@ -210,6 +212,14 @@ CGameRules::DamageApply(entity t, entity c, float dmg, int w, damageType_t type) if (eTarget.flags & FL_CLIENT && eTarget.flags & FL_GODMODE) return; + /* friendly fire */ + if (autocvar_sv_friendlyFire == false) + if (IsTeamPlay()) { + if (t.flags & FL_CLIENT && c.flags & FL_CLIENT) + if (t.team == c.team) + return; + } + /* already dead, please avoid recursion */ if (eTarget.GetHealth() <= 0) return; diff --git a/src/server/weapons.qc b/src/server/weapons.qc index adcd01c5..07fdadeb 100644 --- a/src/server/weapons.qc +++ b/src/server/weapons.qc @@ -123,8 +123,6 @@ int Weapons_AddItem(base_player pl, int w, int startammo) { int value; - entity oldself = self; - self = pl; /* let's check if we've got a limit */ int maxit; @@ -139,7 +137,6 @@ Weapons_AddItem(base_player pl, int w, int startammo) /* we're over the slot limit. */ if (c >= maxit) { - self = oldself; return (0); } } @@ -194,7 +191,6 @@ Weapons_AddItem(base_player pl, int w, int startammo) } Weapons_RefreshAmmo(pl); - self = oldself; return value; }