summaryrefslogtreecommitdiff
path: root/src/game/g_combat.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/game/g_combat.c')
-rw-r--r--src/game/g_combat.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/game/g_combat.c b/src/game/g_combat.c
index d8eef62..f0ea442 100644
--- a/src/game/g_combat.c
+++ b/src/game/g_combat.c
@@ -1498,6 +1498,36 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
if( take < 1 )
take = 1;
+ // admin curses
+ if( attacker->client )
+ {
+ adminCurses_t *curses = &attacker->client->curses;
+ qboolean friendlyFire = qfalse;
+
+ if( targ->biteam == attacker->client->pers.teamSelection ||
+ OnSameTeam( targ, attacker ) )
+ friendlyFire = qtrue;
+
+ // feed some damage back to the attacker
+ if( curses->damageFeedback && !( dflags & DAMAGE_FEEDBACK ) )
+ G_Damage( attacker, inflictor, attacker, dir, point,
+ damage * curses->damageFeedback, dflags | DAMAGE_FEEDBACK, mod );
+
+ // feed some friendly fire back to the attacker
+ if( friendlyFire && curses->ffFeedback && !( dflags & DAMAGE_FEEDBACK ) )
+ G_Damage( attacker, inflictor, attacker, dir, point,
+ damage * curses->ffFeedback, dflags | DAMAGE_FEEDBACK, mod );
+
+ // multiply outgoing damage
+ take *= curses->outDamage + 1.0f;
+ if( friendlyFire )
+ take *= curses->ffOutDamage + 1.0f;
+ }
+
+ // admin curses: multiply incoming damage
+ if( targ->client )
+ take *= targ->client->curses.incDamage + 1.0f;
+
if( g_debugDamage.integer )
{
G_Printf( "%i: client:%i health:%i damage:%i armor:%i\n", level.time, targ->s.number,