From 73fa3f4498b3b477233f3aa0b2cc2d0a2cc726be Mon Sep 17 00:00:00 2001 From: Mikko Tiusanen Date: Fri, 25 Jul 2014 23:56:53 +0300 Subject: Added lasgun portable shield secondary fire functionality. --- src/game/g_missile.c | 104 ++++++++++++++++++++++++++------------------------- src/game/tremulous.h | 3 +- 2 files changed, 56 insertions(+), 51 deletions(-) (limited to 'src/game') diff --git a/src/game/g_missile.c b/src/game/g_missile.c index 3fea37b..0cf7c5d 100644 --- a/src/game/g_missile.c +++ b/src/game/g_missile.c @@ -1032,86 +1032,90 @@ void G_LasgunPush( gentity_t *self ) VectorAdd( self->r.currentOrigin, range, maxs ); VectorSubtract( self->r.currentOrigin, range, mins ); - num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES ); - - for( i = 0; i < num; i++ ) + if (self->count++ > LASGUN_PUSH_COUNT) { - enemy = &g_entities[ entityList[ i ] ]; - - if( enemy->flags & FL_NOTARGET ) - continue; - - if( !G_Visible( self, enemy, CONTENTS_SOLID ) ) - continue; - - if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] != TEAM_HUMANS ) - { - if (!enemy->client) - continue; - - if (enemy == self->parent) - continue; - - if (!enemy->takedamage) - continue; + num = trap_EntitiesInBox( mins, maxs, entityList, MAX_GENTITIES ); - active = qtrue; - break; - } - } - - if (active) - { for( i = 0; i < num; i++ ) { enemy = &g_entities[ entityList[ i ] ]; - + if( enemy->flags & FL_NOTARGET ) continue; if( !G_Visible( self, enemy, CONTENTS_SOLID ) ) continue; - if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] != TEAM_NONE ) + if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] != TEAM_HUMANS ) { if (!enemy->client) continue; - + if (enemy == self->parent) continue; if (!enemy->takedamage) continue; - if ( enemy->client->ps.stats[ STAT_CLASS ] == PCL_ALIEN_LEVEL5 ) - force = LASGUN_PUSH_FORCE; - else - force = LASGUN_WEAK_FORCE; + active = qtrue; + break; + } + } - VectorSubtract( enemy->r.currentOrigin, self->r.currentOrigin, dir); - VectorNormalize( dir ); - VectorScale( dir, force, enemy->client->ps.velocity ); + if (active) + { + for( i = 0; i < num; i++ ) + { + enemy = &g_entities[ entityList[ i ] ]; + + if( enemy->flags & FL_NOTARGET ) + continue; + + if( !G_Visible( self, enemy, CONTENTS_SOLID ) ) + continue; + + if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] != TEAM_NONE ) + { + if (!enemy->client) + continue; + + if (enemy == self->parent) + continue; + + if (!enemy->takedamage) + continue; + + if ( enemy->client->ps.stats[ STAT_CLASS ] == PCL_ALIEN_LEVEL5 ) + force = LASGUN_PUSH_FORCE; + else + force = LASGUN_WEAK_FORCE; + + VectorSubtract( enemy->r.currentOrigin, self->r.currentOrigin, dir); + VectorNormalize( dir ); + VectorScale( dir, force, enemy->client->ps.velocity ); + } } } - } + self->count = 0; /* - if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS ) - { + if( enemy->client && enemy->client->ps.stats[ STAT_TEAM ] == TEAM_ALIENS ) + { // start the attack animation G_AddEvent( self, EV_FORCE_FIELD, DirToByte( self->s.origin2 ) ); if( level.time >= self->timestamp + 500 ) - { - self->timestamp = level.time; - G_SetBuildableAnim( self, BANIM_ATTACK1, qfalse ); - } - return; + { + self->timestamp = level.time; + G_SetBuildableAnim( self, BANIM_ATTACK1, qfalse ); + } + return; + } } - } */ - if( level.time >= self->timestamp ) { - self->freeAfterEvent = qtrue; - self->parent->parentNode = NULL; + if( level.time >= self->timestamp ) { + self->freeAfterEvent = qtrue; + self->parent->parentNode = NULL; + } } trap_LinkEntity( self ); } diff --git a/src/game/tremulous.h b/src/game/tremulous.h index ca59a92..8a393b8 100644 --- a/src/game/tremulous.h +++ b/src/game/tremulous.h @@ -453,7 +453,8 @@ TREMULOUS EDGE MOD SRC FILE #define LASGUN_REPEAT2 5000 #define LASGUN_PUSH_DURATION 4000 -#define LASGUN_PUSH_REPEAT 400 +#define LASGUN_PUSH_REPEAT 40 +#define LASGUN_PUSH_COUNT 10 #define LASGUN_PUSH_RANGE 140 #define LASGUN_PUSH_FORCE 900 #define LASGUN_WEAK_FORCE 675 -- cgit