summaryrefslogtreecommitdiff
path: root/src/game/g_combat.c
diff options
context:
space:
mode:
authorTheriaca <reichmeister@protonmail.com>2019-01-21 20:47:29 +0100
committerPaweł Redman <pawel.redman@gmail.com>2019-02-10 14:47:47 +0100
commit77fcca7900b417bcaae0538879853b88aecff503 (patch)
treecf4a2e0cbf93d3215f54b023de141a792d47310f /src/game/g_combat.c
parent8808724c0296da1e59e238e9bf4e759440159b3d (diff)
implement fractional evos for aliens
- rewrite and optimize G_AddCreditToClient() - remove unclaimedFrags trashcode in player_die Overflowing of fractional evos is supported; sharing isn't (yet?)
Diffstat (limited to 'src/game/g_combat.c')
-rw-r--r--src/game/g_combat.c69
1 files changed, 10 insertions, 59 deletions
diff --git a/src/game/g_combat.c b/src/game/g_combat.c
index 8dd4a44..7b58f1f 100644
--- a/src/game/g_combat.c
+++ b/src/game/g_combat.c
@@ -131,7 +131,7 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
gentity_t *ent;
int anim;
int killer;
- int i, j;
+ int i;
char *killerName, *obit;
float totalTK = 0;
float totalDamage = 0.0f;
@@ -541,11 +541,10 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
{
//horribly complex nasty alien land
float humanValue = BG_GetValueOfHuman( &self->client->ps ) * level.alienHandicap;
- int frags;
- int unclaimedFrags = (int)humanValue;
for( i = 0; i < MAX_CLIENTS; i++ )
{
+ float frags;
player = g_entities + i;
if( !player->client )
@@ -558,19 +557,16 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
if( !self->credits[ i ] )
continue;
- //nothing left to claim
- if( !unclaimedFrags )
- break;
-
percentDamage = (float)self->credits[ i ] / totalDamage;
- if( percentDamage > 0 && percentDamage < 1)
- {
- player->client->pers.statscounters.assists++;
- player->client->pers.karma += 25;
- level.alienStatsCounters.assists++;
- }
+
+ if( percentDamage > 0 && percentDamage < 1 )
+ {
+ player->client->pers.statscounters.assists++;
+ player->client->pers.karma += 25;
+ level.alienStatsCounters.assists++;
+ }
- frags = (int)floor( humanValue * percentDamage);
+ frags = humanValue * percentDamage;
if( frags > 0 )
{
@@ -582,51 +578,6 @@ void player_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
//can't revist this account later
self->credits[ i ] = 0;
-
- //reduce frags left to be claimed
- unclaimedFrags -= frags;
- }
- }
-
- //there are frags still to be claimed
- if( unclaimedFrags )
- {
- //the clients remaining at this point do not
- //have enough credit to claim even one frag
- //so simply give the top <unclaimedFrags> clients
- //a frag each
-
- for( i = 0; i < unclaimedFrags; i++ )
- {
- int maximum = 0;
- int topClient = 0;
-
- for( j = 0; j < MAX_CLIENTS; j++ )
- {
- //this client did no damage
- if( !self->credits[ j ] )
- continue;
-
- if( self->credits[ j ] > maximum )
- {
- maximum = self->credits[ j ];
- topClient = j;
- }
- }
-
- if( maximum > 0 )
- {
- player = g_entities + topClient;
-
- //add kills
- if( spreeRate && player == attacker )
- G_AddCreditToClient( player->client, spreeRate, qtrue );
- else
- G_AddCreditToClient( player->client, 1, qtrue );
-
- //can't revist this account again
- self->credits[ topClient ] = 0;
- }
}
}
}