summaryrefslogtreecommitdiff
path: root/mod/src/cgame/cg_playerstate.c
diff options
context:
space:
mode:
Diffstat (limited to 'mod/src/cgame/cg_playerstate.c')
-rw-r--r--mod/src/cgame/cg_playerstate.c308
1 files changed, 0 insertions, 308 deletions
diff --git a/mod/src/cgame/cg_playerstate.c b/mod/src/cgame/cg_playerstate.c
deleted file mode 100644
index 489b024d..00000000
--- a/mod/src/cgame/cg_playerstate.c
+++ /dev/null
@@ -1,308 +0,0 @@
-// Copyright (C) 1999-2000 Id Software, Inc.
-//
-// cg_playerstate.c -- this file acts on changes in a new playerState_t
-// With normal play, this will be done after local prediction, but when
-// following another player or playing back a demo, it will be checked
-// when the snapshot transitions like all the other entities
-
-/*
- * Portions Copyright (C) 2000-2001 Tim Angus
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the OSML - Open Source Modification License v1.0 as
- * described in the file COPYING which is distributed with this source
- * code.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#include "cg_local.h"
-
-/*
-==============
-CG_DamageFeedback
-==============
-*/
-void CG_DamageFeedback( int yawByte, int pitchByte, int damage )
-{
- float left, front, up;
- float kick;
- int health;
- float scale;
- vec3_t dir;
- vec3_t angles;
- float dist;
- float yaw, pitch;
-
- // show the attacking player's head and name in corner
- cg.attackerTime = cg.time;
-
- // the lower on health you are, the greater the view kick will be
- health = cg.snap->ps.stats[STAT_HEALTH];
-
- if( health < 40 )
- scale = 1;
- else
- scale = 40.0 / health;
-
- kick = damage * scale;
-
- if( kick < 5 )
- kick = 5;
-
- if( kick > 10 )
- kick = 10;
-
- // if yaw and pitch are both 255, make the damage always centered (falling, etc)
- if( yawByte == 255 && pitchByte == 255 )
- {
- cg.damageX = 0;
- cg.damageY = 0;
- cg.v_dmg_roll = 0;
- cg.v_dmg_pitch = -kick;
- }
- else
- {
- // positional
- pitch = pitchByte / 255.0 * 360;
- yaw = yawByte / 255.0 * 360;
-
- angles[ PITCH ] = pitch;
- angles[ YAW ] = yaw;
- angles[ ROLL ] = 0;
-
- AngleVectors( angles, dir, NULL, NULL );
- VectorSubtract( vec3_origin, dir, dir );
-
- front = DotProduct( dir, cg.refdef.viewaxis[ 0 ] );
- left = DotProduct( dir, cg.refdef.viewaxis[ 1 ] );
- up = DotProduct( dir, cg.refdef.viewaxis[ 2 ] );
-
- dir[ 0 ] = front;
- dir[ 1 ] = left;
- dir[ 2 ] = 0;
- dist = VectorLength( dir );
-
- if( dist < 0.1f )
- dist = 0.1f;
-
- cg.v_dmg_roll = kick * left;
-
- cg.v_dmg_pitch = -kick * front;
-
- if( front <= 0.1 )
- front = 0.1f;
-
- cg.damageX = -left / front;
- cg.damageY = up / dist;
- }
-
- // clamp the position
- if( cg.damageX > 1.0 )
- cg.damageX = 1.0;
-
- if( cg.damageX < - 1.0 )
- cg.damageX = -1.0;
-
- if( cg.damageY > 1.0 )
- cg.damageY = 1.0;
-
- if( cg.damageY < - 1.0 )
- cg.damageY = -1.0;
-
- // don't let the screen flashes vary as much
- if( kick > 10 )
- kick = 10;
-
- cg.damageValue = kick;
- cg.v_dmg_time = cg.time + DAMAGE_TIME;
- cg.damageTime = cg.snap->serverTime;
-}
-
-
-
-
-/*
-================
-CG_Respawn
-
-A respawn happened this snapshot
-================
-*/
-void CG_Respawn( void )
-{
- // no error decay on player movement
- cg.thisFrameTeleport = qtrue;
-
- // display weapons available
- cg.weaponSelectTime = cg.time;
-
- // select the weapon the server says we are using
- cg.weaponSelect = cg.snap->ps.weapon;
-
- CG_ResetPainBlend( );
-}
-
-/*
-==============
-CG_CheckPlayerstateEvents
-
-==============
-*/
-void CG_CheckPlayerstateEvents( playerState_t *ps, playerState_t *ops )
-{
- int i;
- int event;
- centity_t *cent;
-
- if( ps->externalEvent && ps->externalEvent != ops->externalEvent )
- {
- cent = &cg_entities[ ps->clientNum ];
- cent->currentState.event = ps->externalEvent;
- cent->currentState.eventParm = ps->externalEventParm;
- CG_EntityEvent( cent, cent->lerpOrigin );
- }
-
- cent = &cg.predictedPlayerEntity; // cg_entities[ ps->clientNum ];
-
- // go through the predictable events buffer
- for( i = ps->eventSequence - MAX_PS_EVENTS; i < ps->eventSequence; i++ )
- {
- // if we have a new predictable event
- if( i >= ops->eventSequence ||
- // or the server told us to play another event instead of a predicted event we already issued
- // or something the server told us changed our prediction causing a different event
- ( i > ops->eventSequence - MAX_PS_EVENTS && ps->events[ i & ( MAX_PS_EVENTS - 1 ) ] !=
- ops->events[ i & ( MAX_PS_EVENTS - 1 ) ] ) )
- {
- event = ps->events[ i & ( MAX_PS_EVENTS - 1 ) ];
-
- cent->currentState.event = event;
- cent->currentState.eventParm = ps->eventParms[ i & ( MAX_PS_EVENTS - 1 ) ];
- CG_EntityEvent( cent, cent->lerpOrigin );
- cg.predictableEvents[ i & ( MAX_PREDICTED_EVENTS - 1 ) ] = event;
-
- cg.eventSequence++;
- }
- }
-}
-
-
-/*
-==================
-CG_CheckChangedPredictableEvents
-==================
-*/
-void CG_CheckChangedPredictableEvents( playerState_t *ps )
-{
- int i;
- int event;
- centity_t *cent;
-
- cent = &cg.predictedPlayerEntity;
-
- for( i = ps->eventSequence - MAX_PS_EVENTS; i < ps->eventSequence; i++ )
- {
- //
- if( i >= cg.eventSequence )
- continue;
-
- // if this event is not further back in than the maximum predictable events we remember
- if( i > cg.eventSequence - MAX_PREDICTED_EVENTS )
- {
- // if the new playerstate event is different from a previously predicted one
- if( ps->events[ i & ( MAX_PS_EVENTS - 1 ) ] != cg.predictableEvents[ i & ( MAX_PREDICTED_EVENTS - 1 ) ] )
- {
- event = ps->events[ i & ( MAX_PS_EVENTS - 1 ) ];
- cent->currentState.event = event;
- cent->currentState.eventParm = ps->eventParms[ i & ( MAX_PS_EVENTS - 1 ) ];
- CG_EntityEvent( cent, cent->lerpOrigin );
-
- cg.predictableEvents[ i & ( MAX_PREDICTED_EVENTS - 1 ) ] = event;
-
- if( cg_showmiss.integer )
- CG_Printf( "WARNING: changed predicted event\n" );
- }
- }
- }
-}
-
-/*
-==================
-CG_CheckLocalSounds
-==================
-*/
-void CG_CheckLocalSounds( playerState_t *ps, playerState_t *ops )
-{
- int reward;
-
- // don't play the sounds if the player just changed teams
- if( ps->persistant[ PERS_TEAM ] != ops->persistant[ PERS_TEAM ] )
- return;
-
- // health changes of more than -1 should make pain sounds
- if( ps->stats[ STAT_HEALTH ] < ops->stats[ STAT_HEALTH ] - 1 )
- {
- if( ps->stats[ STAT_HEALTH ] > 0 )
- CG_PainEvent( &cg.predictedPlayerEntity, ps->stats[ STAT_HEALTH ] );
- }
-
-
- // if we are going into the intermission, don't start any voices
- if( cg.intermissionStarted )
- return;
-
- // reward sounds
- reward = qfalse;
-}
-
-
-/*
-===============
-CG_TransitionPlayerState
-
-===============
-*/
-void CG_TransitionPlayerState( playerState_t *ps, playerState_t *ops )
-{
- // check for changing follow mode
- if( ps->clientNum != ops->clientNum )
- {
- cg.thisFrameTeleport = qtrue;
- // make sure we don't get any unwanted transition effects
- *ops = *ps;
-
- CG_ResetPainBlend( );
- }
-
- // damage events (player is getting wounded)
- if( ps->damageEvent != ops->damageEvent && ps->damageCount )
- CG_DamageFeedback( ps->damageYaw, ps->damagePitch, ps->damageCount );
-
- // respawning
- if( ps->persistant[ PERS_SPAWN_COUNT ] != ops->persistant[ PERS_SPAWN_COUNT ] )
- CG_Respawn( );
-
- if( cg.mapRestart )
- {
- CG_Respawn( );
- cg.mapRestart = qfalse;
- }
-
- if( cg.snap->ps.pm_type != PM_INTERMISSION &&
- ps->persistant[ PERS_TEAM ] != TEAM_SPECTATOR )
- CG_CheckLocalSounds( ps, ops );
-
- // run events
- CG_CheckPlayerstateEvents( ps, ops );
-
- // smooth the ducking viewheight change
- if( ps->viewheight != ops->viewheight )
- {
- cg.duckChange = ps->viewheight - ops->viewheight;
- cg.duckTime = cg.time;
- }
-}
-