summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTim Angus <tim@ngus.net>2001-09-07 15:11:46 +0000
committerTim Angus <tim@ngus.net>2001-09-07 15:11:46 +0000
commit03091e5b87d1d0aa5f153ccda8a0316733cf01f4 (patch)
tree61cd0d896d888bf5718f12653b82aefb0f295de2 /src
parentfa0922d0e311a68daf24aa1ae48dd35c29d894bf (diff)
Destroy anims for alien stuff
Diffstat (limited to 'src')
-rw-r--r--src/cgame/cg_event.c2
-rw-r--r--src/game/g_buildable.c75
-rw-r--r--src/game/g_client.c2
-rw-r--r--src/game/g_local.h2
4 files changed, 61 insertions, 20 deletions
diff --git a/src/cgame/cg_event.c b/src/cgame/cg_event.c
index b5034fd3..289205df 100644
--- a/src/cgame/cg_event.c
+++ b/src/cgame/cg_event.c
@@ -908,7 +908,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
//TA: trigger an anim on a buildable item
case EV_BUILD_ANIM:
DEBUGNAME("EV_BUILD_ANIM");
- if( cent->buildableAnim == es->torsoAnim )
+ if( cent->buildableAnim == es->torsoAnim || es->eventParm & ANIM_TOGGLEBIT )
cent->buildableAnim = es->eventParm;
break;
diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c
index f7769613..8256b1cf 100644
--- a/src/game/g_buildable.c
+++ b/src/game/g_buildable.c
@@ -33,9 +33,14 @@ G_setBuildableAnim
Triggers an animation client side
================
*/
-void G_setBuildableAnim( gentity_t *ent, buildableAnimNumber_t anim )
+void G_setBuildableAnim( gentity_t *ent, buildableAnimNumber_t anim, qboolean force )
{
- G_AddEvent( ent, EV_BUILD_ANIM, anim );
+ int localAnim = anim;
+
+ if( force )
+ localAnim |= ANIM_TOGGLEBIT;
+
+ G_AddEvent( ent, EV_BUILD_ANIM, localAnim );
}
/*
@@ -265,12 +270,12 @@ void DSpawn_Melt( gentity_t *self )
/*
================
-DSpawn_Die
+DSpawn_Blast
Called when an droid spawn dies
================
*/
-void DSpawn_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod )
+void DSpawn_Blast( gentity_t *self )
{
vec3_t dir;
@@ -287,7 +292,6 @@ void DSpawn_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
G_AddEvent( self, EV_GIB_DROID, DirToByte( dir ) );
self->r.contents = CONTENTS_TRIGGER;
self->timestamp = level.time;
- self->die = nullDieFunction;
self->think = DSpawn_Melt;
self->nextthink = level.time + 500; //wait .5 seconds before damaging others
@@ -296,6 +300,25 @@ void DSpawn_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int
/*
================
+DSpawn_Die
+
+Called when an droid spawn dies
+================
+*/
+void DSpawn_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod )
+{
+ G_setBuildableAnim( self, BANIM_DESTROY1, qtrue );
+ G_setIdleBuildableAnim( self, BANIM_DESTROYED );
+
+ self->die = nullDieFunction;
+ self->think = DSpawn_Blast;
+ self->nextthink = level.time + 1500; //wait .5 seconds before damaging others
+
+ trap_LinkEntity( self );
+}
+
+/*
+================
DSpawn_Think
think function for Droid Spawn
@@ -314,7 +337,7 @@ pain function for Droid Spawn
*/
void DSpawn_Pain( gentity_t *self, gentity_t *attacker, int damage )
{
- G_setBuildableAnim( self, BANIM_PAIN1 );
+ G_setBuildableAnim( self, BANIM_PAIN1, qfalse );
}
@@ -333,22 +356,22 @@ pain function for Droid Spawn
void DBarricade_Pain( gentity_t *self, gentity_t *attacker, int damage )
{
if( random() > 0.5f )
- G_setBuildableAnim( self, BANIM_PAIN1 );
+ G_setBuildableAnim( self, BANIM_PAIN1, qfalse );
else
- G_setBuildableAnim( self, BANIM_PAIN2 );
+ G_setBuildableAnim( self, BANIM_PAIN2, qfalse );
}
/*
================
-DBarricade_Die
+DBarricade_Blast
Called when an droid spawn dies
================
*/
-void DBarricade_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod )
+void DBarricade_Blast( gentity_t *self )
{
vec3_t dir;
-
+
// we don't have a valid direction, so just point straight up
dir[0] = dir[1] = 0;
dir[2] = 1;
@@ -362,9 +385,27 @@ void DBarricade_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker,
G_AddEvent( self, EV_GIB_DROID, DirToByte( dir ) );
self->r.contents = CONTENTS_TRIGGER;
self->timestamp = level.time;
- self->die = nullDieFunction;
self->think = D_CreepRecede;
- self->nextthink = level.time + 100;
+ self->nextthink = level.time + 500; //wait .5 seconds before damaging others
+
+ trap_LinkEntity( self );
+}
+
+/*
+================
+DBarricade_Die
+
+Called when an droid spawn dies
+================
+*/
+void DBarricade_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod )
+{
+ G_setBuildableAnim( self, BANIM_DESTROY1, qtrue );
+ G_setIdleBuildableAnim( self, BANIM_DESTROYED );
+
+ self->die = nullDieFunction;
+ self->think = DBarricade_Blast;
+ self->nextthink = level.time + 1500;
trap_LinkEntity( self );
}
@@ -464,7 +505,7 @@ void DAcidTube_Think( gentity_t *self )
self->timestamp = level.time;
self->think = DAcidTube_Damage;
self->nextthink = level.time + 100;
- G_setBuildableAnim( self, BANIM_ATTACK1 );
+ G_setBuildableAnim( self, BANIM_ATTACK1, qfalse );
}
}
@@ -495,7 +536,7 @@ void ddef_fireonenemy( gentity_t *self, int firespeed )
//fire at target
FireWeapon( self );
- G_setBuildableAnim( self, BANIM_ATTACK1 );
+ G_setBuildableAnim( self, BANIM_ATTACK1, qfalse );
self->count = level.time + firespeed;
}
@@ -993,7 +1034,7 @@ void hdef_fireonenemy( gentity_t *self, int firespeed )
{
//fire at target
FireWeapon( self );
- G_setBuildableAnim( self, BANIM_ATTACK1 );
+ G_setBuildableAnim( self, BANIM_ATTACK1, qfalse );
self->count = level.time + firespeed;
}
@@ -1172,7 +1213,7 @@ Called when a human spawn dies
void HSpawn_Die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int mod )
{
//pretty events and cleanup
- G_setBuildableAnim( self, BANIM_DESTROY1 );
+ G_setBuildableAnim( self, BANIM_DESTROY1, qtrue );
G_setIdleBuildableAnim( self, BANIM_DESTROYED );
self->die = nullDieFunction;
diff --git a/src/game/g_client.c b/src/game/g_client.c
index 739529ec..32940b87 100644
--- a/src/game/g_client.c
+++ b/src/game/g_client.c
@@ -1302,7 +1302,7 @@ void ClientSpawn( gentity_t *ent, gentity_t *spawn ) {
}
//start spawn animation on egg
- G_setBuildableAnim( spawnPoint, BANIM_SPAWN1 );
+ G_setBuildableAnim( spawnPoint, BANIM_SPAWN1, qtrue );
}
}
client->pers.teamState.state = TEAM_ACTIVE;
diff --git a/src/game/g_local.h b/src/game/g_local.h
index 0fcfdc75..633c29e9 100644
--- a/src/game/g_local.h
+++ b/src/game/g_local.h
@@ -542,7 +542,7 @@ typedef enum
itemBuildError_t G_itemFits( gentity_t *ent, buildable_t buildable, int distance );
gentity_t *G_buildItem( gentity_t *ent, buildable_t buildable, int distance, float speed );
-void G_setBuildableAnim( gentity_t *ent, buildableAnimNumber_t anim );
+void G_setBuildableAnim( gentity_t *ent, buildableAnimNumber_t anim, qboolean force );
void G_setIdleBuildableAnim( gentity_t *ent, buildableAnimNumber_t anim );
//