summaryrefslogtreecommitdiff
path: root/src/cgame
diff options
context:
space:
mode:
Diffstat (limited to 'src/cgame')
-rw-r--r--src/cgame/cg_draw.c2
-rw-r--r--src/cgame/cg_local.h5
-rw-r--r--src/cgame/cg_main.c3
-rw-r--r--src/cgame/cg_players.c24
-rw-r--r--src/cgame/cg_view.c24
5 files changed, 41 insertions, 17 deletions
diff --git a/src/cgame/cg_draw.c b/src/cgame/cg_draw.c
index 5002fc9a..32b7f44b 100644
--- a/src/cgame/cg_draw.c
+++ b/src/cgame/cg_draw.c
@@ -487,6 +487,8 @@ static void CG_DrawPlayerStaminaBolt( rectDef_t *rect, vec4_t color, qhandle_t s
if( stamina < 0 )
color[ 3 ] = HH_MIN_ALPHA;
+ else if( cg.predictedPlayerState.stats[ STAT_STATE ] & SS_SPEEDBOOST )
+ color[ 3 ] = 1.0f;
else
color[ 3 ] = HH_MAX_ALPHA;
diff --git a/src/cgame/cg_local.h b/src/cgame/cg_local.h
index 8dfd09a4..540d3d62 100644
--- a/src/cgame/cg_local.h
+++ b/src/cgame/cg_local.h
@@ -657,6 +657,8 @@ typedef struct centity_s
particleSystem_t *jetPackPS;
jetPackState_t jetPackState;
+ particleSystem_t *poisonCloudedPS;
+
particleSystem_t *entityPS;
qboolean entityPSMissing;
@@ -1122,6 +1124,7 @@ typedef struct
int numConsoleLines;
particleSystem_t *poisonCloudPS;
+ particleSystem_t *poisonCloudedPS;
float painBlendValue;
float painBlendTarget;
@@ -1252,6 +1255,7 @@ typedef struct
sfxHandle_t buildableRepairedSound;
qhandle_t poisonCloudPS;
+ qhandle_t poisonCloudedPS;
qhandle_t alienEvolvePS;
qhandle_t alienAcidTubePS;
@@ -1514,6 +1518,7 @@ extern vmCvar_t cg_painBlendScale;
extern vmCvar_t cg_painBlendZoom;
extern vmCvar_t cg_stickySpec;
+extern vmCvar_t cg_alwaysSprint;
extern vmCvar_t ui_currentClass;
extern vmCvar_t ui_carriage;
diff --git a/src/cgame/cg_main.c b/src/cgame/cg_main.c
index a2027b3e..7ad1c21f 100644
--- a/src/cgame/cg_main.c
+++ b/src/cgame/cg_main.c
@@ -225,6 +225,7 @@ vmCvar_t cg_painBlendScale;
vmCvar_t cg_painBlendZoom;
vmCvar_t cg_stickySpec;
+vmCvar_t cg_alwaysSprint;
vmCvar_t ui_currentClass;
vmCvar_t ui_carriage;
@@ -326,6 +327,7 @@ static cvarTable_t cvarTable[ ] =
{ &cg_wwFollow, "cg_wwFollow", "1", CVAR_ARCHIVE|CVAR_USERINFO },
{ &cg_wwToggle, "cg_wwToggle", "1", CVAR_ARCHIVE|CVAR_USERINFO },
{ &cg_stickySpec, "cg_stickySpec", "1", CVAR_ARCHIVE|CVAR_USERINFO },
+ { &cg_alwaysSprint, "cg_alwaysSprint", "0", CVAR_ARCHIVE|CVAR_USERINFO },
{ &cg_depthSortParticles, "cg_depthSortParticles", "1", CVAR_ARCHIVE },
{ &cg_bounceParticles, "cg_bounceParticles", "0", CVAR_ARCHIVE },
{ &cg_consoleLatency, "cg_consoleLatency", "3000", CVAR_ARCHIVE },
@@ -853,6 +855,7 @@ static void CG_RegisterGraphics( void )
cgs.media.wakeMarkShader = trap_R_RegisterShader( "gfx/marks/wake" );
cgs.media.poisonCloudPS = CG_RegisterParticleSystem( "firstPersonPoisonCloudPS" );
+ cgs.media.poisonCloudedPS = CG_RegisterParticleSystem( "poisonCloudedPS" );
cgs.media.alienEvolvePS = CG_RegisterParticleSystem( "alienEvolvePS" );
cgs.media.alienAcidTubePS = CG_RegisterParticleSystem( "alienAcidTubePS" );
diff --git a/src/cgame/cg_players.c b/src/cgame/cg_players.c
index 95ec60bb..cdfbc747 100644
--- a/src/cgame/cg_players.c
+++ b/src/cgame/cg_players.c
@@ -1667,13 +1667,6 @@ static void CG_PlayerSprites( centity_t *cent )
CG_PlayerFloatSprite( cent, cgs.media.connectionShader );
return;
}
-
- if( cent->currentState.eFlags & EF_TALK )
- {
- // the masses have decreed this to be wrong
-/* CG_PlayerFloatSprite( cent, cgs.media.balloonShader );
- return;*/
- }
}
/*
@@ -2165,6 +2158,21 @@ void CG_Player( centity_t *cent )
head.renderfx = renderfx;
trap_R_AddRefEntityToScene( &head );
+
+ // if this player has been hit with poison cloud, add an effect PS
+ if( ( es->eFlags & EF_POISONCLOUDED ) &&
+ ( es->number != cg.snap->ps.clientNum || cg.renderingThirdPerson ) )
+ {
+ if( !CG_IsParticleSystemValid( &cent->poisonCloudedPS ) )
+ cent->poisonCloudedPS = CG_SpawnNewParticleSystem( cgs.media.poisonCloudedPS );
+
+ CG_SetAttachmentTag( &cent->poisonCloudedPS->attachment,
+ head, head.hModel, "tag_head" );
+ CG_SetAttachmentCent( &cent->poisonCloudedPS->attachment, cent );
+ CG_AttachToTag( &cent->poisonCloudedPS->attachment );
+ }
+ else if( CG_IsParticleSystemValid( &cent->poisonCloudedPS ) )
+ CG_DestroyParticleSystem( &cent->poisonCloudedPS );
}
//
@@ -2179,7 +2187,7 @@ void CG_Player( centity_t *cent )
}
CG_PlayerUpgrades( cent, &torso );
-
+
//sanity check that particle systems are stopped when dead
if( es->eFlags & EF_DEAD )
{
diff --git a/src/cgame/cg_view.c b/src/cgame/cg_view.c
index 9772e1f5..94e7187c 100644
--- a/src/cgame/cg_view.c
+++ b/src/cgame/cg_view.c
@@ -577,14 +577,18 @@ static void CG_OffsetFirstPersonView( void )
cg.upMoveTime = cg.time;
}
- if( cg.predictedPlayerState.stats[ STAT_STATE ] & SS_POISONCLOUDED &&
+ if( ( cg.predictedPlayerEntity.currentState.eFlags & EF_POISONCLOUDED ) &&
!( cg.snap->ps.pm_flags & PMF_FOLLOW ) )
{
- float fraction = sin( ( (float)cg.time / 1000.0f ) * M_PI * 2 * PCLOUD_ROLL_FREQUENCY );
- float pitchFraction = sin( ( (float)cg.time / 1000.0f ) * M_PI * 5 * PCLOUD_ROLL_FREQUENCY );
-
- fraction *= 1.0f - ( ( cg.time - cg.poisonedTime ) / (float)LEVEL1_PCLOUD_TIME );
- pitchFraction *= 1.0f - ( ( cg.time - cg.poisonedTime ) / (float)LEVEL1_PCLOUD_TIME );
+ float scale, fraction, pitchFraction;
+
+ scale = 1.0f - (float)( cg.time - cg.poisonedTime ) /
+ BG_PlayerPoisonCloudTime( &cg.predictedPlayerState );
+ if( scale < 0.0f )
+ scale = 0.0f;
+ fraction = sin( cg.time / 500.0f * M_PI * PCLOUD_ROLL_FREQUENCY ) * scale;
+ pitchFraction = sin( cg.time / 200.0f * M_PI * PCLOUD_ROLL_FREQUENCY ) *
+ scale;
angles[ ROLL ] += fraction * PCLOUD_ROLL_AMPLITUDE;
angles[ YAW ] += fraction * PCLOUD_ROLL_AMPLITUDE;
@@ -780,13 +784,15 @@ static int CG_CalcFov( void )
else
inwater = qfalse;
- if( cg.predictedPlayerState.stats[ STAT_STATE ] & SS_POISONCLOUDED &&
+ if( ( cg.predictedPlayerEntity.currentState.eFlags & EF_POISONCLOUDED ) &&
cg.predictedPlayerState.stats[ STAT_HEALTH ] > 0 &&
!( cg.snap->ps.pm_flags & PMF_FOLLOW ) )
{
+ float scale = 1.0f - (float)( cg.time - cg.poisonedTime ) /
+ BG_PlayerPoisonCloudTime( &cg.predictedPlayerState );
+
phase = cg.time / 1000.0 * PCLOUD_ZOOM_FREQUENCY * M_PI * 2;
- v = PCLOUD_ZOOM_AMPLITUDE * sin( phase );
- v *= 1.0f - ( ( cg.time - cg.poisonedTime ) / (float)LEVEL1_PCLOUD_TIME );
+ v = PCLOUD_ZOOM_AMPLITUDE * sin( phase ) * scale;
fov_x += v;
fov_y += v;
}