diff options
Diffstat (limited to 'src/game/g_combat.c')
-rw-r--r-- | src/game/g_combat.c | 30 |
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, |