r1866 - in trunk/data: . qcsrc/server
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Aug 28 19:01:55 EDT 2006
Author: div0
Date: 2006-08-28 19:01:54 -0400 (Mon, 28 Aug 2006)
New Revision: 1866
Modified:
trunk/data/default.cfg
trunk/data/qcsrc/server/constants.qh
trunk/data/qcsrc/server/g_damage.qc
Log:
more controls for teamplay 2:
- g_mirrordamage: team killer will get this factor of damage back (and the same
factor of the force too); idea shamelessly stolen from Tactical Ops ;)
- g_friendlyfire: team mate will get this factor of damage
What about setting teamplay 2 as default but with g_friendlyfire set to 0 - and
adding "friendly fire" and "mirror damage" sliders to the menu?
Modified: trunk/data/default.cfg
===================================================================
--- trunk/data/default.cfg 2006-08-28 15:28:55 UTC (rev 1865)
+++ trunk/data/default.cfg 2006-08-28 23:01:54 UTC (rev 1866)
@@ -251,6 +251,8 @@
// common team values
set g_tdm 0
seta teamplay_default 3 // default teamplay setting in team games
+seta g_mirrordamage 0.0 // for teamplay 2: mirror damage factor
+seta g_friendlyfire 1.0 // for teamplay 2: fiendly fire factor
set deathmatch_force_teamplay 0 // always play TDM on dm maps
seta g_balance_teams 0 // automatically balance out players entering instead of asking them for their preferred team
seta g_balance_teams_force 0 // automatically balance out teams when players move or disconnect
Modified: trunk/data/qcsrc/server/constants.qh
===================================================================
--- trunk/data/qcsrc/server/constants.qh 2006-08-28 15:28:55 UTC (rev 1865)
+++ trunk/data/qcsrc/server/constants.qh 2006-08-28 23:01:54 UTC (rev 1866)
@@ -150,6 +150,7 @@
float DEATH_CAMP = 10011;
float DEATH_SHOOTING_STAR = 10012;
float DEATH_ROT = 10013;
+float DEATH_MIRRORDAMAGE = 10014;
float IT_LASER = 4096;
float IT_SHOTGUN = 1;
Modified: trunk/data/qcsrc/server/g_damage.qc
===================================================================
--- trunk/data/qcsrc/server/g_damage.qc 2006-08-28 15:28:55 UTC (rev 1865)
+++ trunk/data/qcsrc/server/g_damage.qc 2006-08-28 23:01:54 UTC (rev 1866)
@@ -129,6 +129,8 @@
centermsg_setfor(targ, CENTERMSG_DEATH, "^1You were killed for running out of ammo...");
else if (deathtype == DEATH_ROT)
centermsg_setfor(targ, CENTERMSG_DEATH, "^1You grew too old without taking your medcine");
+ else if (deathtype == DEATH_MIRRORDAMAGE)
+ centermsg_setfor(targ, CENTERMSG_DEATH, "^1Don't shoot your team mates!");
else
centermsg_setfor(targ, CENTERMSG_DEATH, "^1You killed your own dumb self!");
@@ -149,6 +151,8 @@
}
else if (deathtype == DEATH_CAMP)
bprint ("^1",s, "^1 thought he found a nice camping ground\n");
+ else if (deathtype == DEATH_MIRRORDAMAGE)
+ bprint ("^1",s, "^1 didn't became friends with the Lord of Teamplay\n");
else if (deathtype != DEATH_TEAMCHANGE)
bprint ("^1",s, "^1 couldn't resist the urge to self-destruct\n");
@@ -317,6 +321,11 @@
void Damage (entity targ, entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
{
+ float mirrordamage;
+ float mirrorforce;
+ mirrordamage = 0;
+ mirrorforce = 0;
+
if (gameover || targ.killcount == -666)
return;
@@ -326,12 +335,6 @@
damage_targ = targ;
damage_inflictor = inflictor;
damage_attacker = attacker;
- // nullify damage if teamplay is on
- if (teamplay)
- if (attacker.team)
- if (attacker.team == targ.team)
- if (teamplay == 1 || (teamplay == 3 && attacker != targ))
- damage = 0;
if (targ.classname == "player")
if (attacker.classname == "player")
@@ -339,6 +342,28 @@
if (attacker.isbot)
damage = damage * bound(0.1, (skill + 5) * 0.1, 1);
+ // nullify damage if teamplay is on
+ if(teamplay == 1)
+ if(attacker.team)
+ if(attacker.team == targ.team)
+ damage = 0;
+ if(teamplay == 3)
+ if(attacker != targ)
+ if(attacker.team)
+ if(attacker.team == targ.team)
+ damage = 0;
+ if(teamplay == 2)
+ if(attacker != targ)
+ if(attacker.team == targ.team)
+ if(attacker.classname == "player")
+ if(targ.classname == "player")
+ {
+ mirrordamage = cvar("g_mirrordamage") * damage;
+ mirrorforce = cvar("g_mirrordamage") * vlen(force);
+ damage = cvar("g_friendlyfire") * damage;
+ // mirrordamage will be used LATER
+ }
+
if(cvar("g_lms"))
if(targ.classname == "player")
if(attacker.classname == "player")
@@ -398,7 +423,9 @@
if (attacker.items & IT_STRENGTH && !cvar("g_minstagib"))
{
damage = damage * cvar("g_balance_powerup_strength_damage");
+ mirrordamage = mirrordamage * cvar("g_balance_powerup_strength_damage");
force = force * cvar("g_balance_powerup_strength_force");
+ mirrorforce = mirrorforce * cvar("g_balance_powerup_strength_force");
}
// apply invincibility multiplier
if (targ.items & IT_INVINCIBLE && !cvar("g_minstagib"))
@@ -490,6 +517,13 @@
}
}
}
+
+ // apply mirror damage if any
+ if(mirrordamage > 0 || mirrorforce > 0)
+ {
+ force = normalize(attacker.origin + attacker.view_ofs - hitloc) * mirrorforce;
+ Damage(attacker, inflictor, attacker, mirrordamage, DEATH_MIRRORDAMAGE, attacker.origin, force);
+ }
}
void RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity ignore, float forceintensity, float deathtype)
More information about the nexuiz-commits
mailing list