summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPetr Pudlak <petr.mvd@gmail.com>2014-09-20 18:54:42 +0200
committerPetr Pudlak <petr.mvd@gmail.com>2014-09-20 19:54:58 +0200
commit0238f457f4200a92e99e3be0a61a9870ea8ae560 (patch)
tree2c52784f73f3cddbc4de3dcb134b8409ec458ae5 /src
parent43ea36ac9bea52cd058c81a8697878c508a0eb4b (diff)
Add a separate mode of death for no-BP building suicides
Diffstat (limited to 'src')
-rw-r--r--src/game/bg_public.h1
-rw-r--r--src/game/g_buildable.c10
-rw-r--r--src/game/g_combat.c11
3 files changed, 14 insertions, 8 deletions
diff --git a/src/game/bg_public.h b/src/game/bg_public.h
index 886d29b..f8a2f9d 100644
--- a/src/game/bg_public.h
+++ b/src/game/bg_public.h
@@ -894,6 +894,7 @@ typedef enum
MOD_DECONSTRUCT,
MOD_REPLACE,
MOD_NOCREEP,
+ MOD_NOBP,
MOD_ABOMB
} meansOfDeath_t;
diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c
index 90df479..72d4d3c 100644
--- a/src/game/g_buildable.c
+++ b/src/game/g_buildable.c
@@ -527,15 +527,15 @@ G_Suicide
let the given buildable suicide
================
*/
-void G_Suicide( gentity_t *self )
+void G_Suicide( gentity_t *self, meansOfDeath_t death )
{
const gentity_t *parent = self->parentNode;
if( parent )
G_Damage( self, NULL, g_entities + parent->killedBy, NULL, NULL,
- self->health, 0, MOD_NOCREEP );
+ self->health, 0, death );
else
- G_Damage( self, NULL, NULL, NULL, NULL, self->health, 0, MOD_NOCREEP );
+ G_Damage( self, NULL, NULL, NULL, NULL, self->health, 0, death );
}
/*
@@ -978,7 +978,7 @@ void AGeneric_CreepCheck( gentity_t *self )
{
if( !G_FindCreep( self ) )
{
- G_Suicide( self );
+ G_Suicide( self, MOD_NOCREEP );
return;
}
G_CreepSlow( self );
@@ -2331,7 +2331,7 @@ static qboolean G_SuicideIfNoPower( gentity_t *self )
self->count = level.time;
else if( ( level.time - self->count ) >= HUMAN_BUILDABLE_INACTIVE_TIME )
{
- G_Suicide( self );
+ G_Suicide( self, MOD_NOCREEP );
return qtrue;
}
}
diff --git a/src/game/g_combat.c b/src/game/g_combat.c
index 073c00c..ada2f9c 100644
--- a/src/game/g_combat.c
+++ b/src/game/g_combat.c
@@ -143,7 +143,8 @@ char *modNames[ ] =
"MOD_SLAP",
"MOD_DECONSTRUCT",
"MOD_REPLACE",
- "MOD_NOCREEP",
+ "MOD_NOCREEP",
+ "MOD_NOBP",
"MOD_ABOMB"
};
@@ -1353,7 +1354,7 @@ void G_Damage( gentity_t *targ, gentity_t *inflictor, gentity_t *attacker,
if( targ->s.eType == ET_BUILDABLE && attacker->client &&
mod != MOD_DECONSTRUCT && mod != MOD_SUICIDE &&
- mod != MOD_REPLACE && mod != MOD_NOCREEP )
+ mod != MOD_REPLACE && mod != MOD_NOCREEP && mod != MOD_NOBP )
{
if( targ->buildableTeam == attacker->client->pers.teamSelection &&
!g_friendlyBuildableFire.integer )
@@ -1781,6 +1782,9 @@ void G_LogDestruction( gentity_t *self, gentity_t *actor, int mod )
case MOD_NOCREEP:
fate = ( actor->client ) ? BF_UNPOWER : BF_AUTO;
break;
+ case MOD_NOBP:
+ fate = BF_UNPOWER;
+ break;
default:
if( actor->client )
{
@@ -1813,7 +1817,8 @@ void G_LogDestruction( gentity_t *self, gentity_t *actor, int mod )
// No-power deaths for humans come after some minutes and it's confusing
// when the messages appear attributed to the deconner. Just don't print them.
- if( mod == MOD_NOCREEP && actor->client &&
+ if( ( mod == MOD_NOCREEP && mod == MOD_NOBP ) &&
+ actor->client &&
actor->client->pers.teamSelection == TEAM_HUMANS )
return;