diff options
Diffstat (limited to 'src/cgame')
| -rw-r--r-- | src/cgame/cg_event.c.orig | 1086 | ||||
| -rw-r--r-- | src/cgame/cg_main.c.orig | 1982 | 
2 files changed, 0 insertions, 3068 deletions
diff --git a/src/cgame/cg_event.c.orig b/src/cgame/cg_event.c.orig deleted file mode 100644 index e394023..0000000 --- a/src/cgame/cg_event.c.orig +++ /dev/null @@ -1,1086 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. -Copyright (C) 2000-2009 Darklegion Development - -This file is part of Tremulous. - -Tremulous is free software; you can redistribute it -and/or modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the License, -or (at your option) any later version. - -Tremulous 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.  See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Tremulous; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ - -// cg_event.c -- handle entity events at snapshot or playerstate transitions - - -#include "cg_local.h" - -/* -============= -CG_Obituary -============= -*/ -static void CG_Obituary( entityState_t *ent ) -{ -  int           mod; -  int           target, attacker; -  char          *message; -  char          *message2; -  const char    *targetInfo; -  const char    *attackerInfo; -  char          targetName[ MAX_NAME_LENGTH ]; -  char          attackerName[ MAX_NAME_LENGTH ]; -  char          className[ 64 ]; -  gender_t      gender; -  clientInfo_t  *ci; -  qboolean      teamKill = qfalse; - -  target = ent->otherEntityNum; -  attacker = ent->otherEntityNum2; -  mod = ent->eventParm; - -  if( target < 0 || target >= MAX_CLIENTS ) -    CG_Error( "CG_Obituary: target out of range" ); - -  ci = &cgs.clientinfo[ target ]; -  gender = ci->gender; - -  if( attacker < 0 || attacker >= MAX_CLIENTS ) -  { -    attacker = ENTITYNUM_WORLD; -    attackerInfo = NULL; -  } -  else -  { -    attackerInfo = CG_ConfigString( CS_PLAYERS + attacker ); -    if( ci && cgs.clientinfo[ attacker ].team == ci->team ) -      teamKill = qtrue; -  } - -  targetInfo = CG_ConfigString( CS_PLAYERS + target ); - -  if( !targetInfo ) -    return; - -  Q_strncpyz( targetName, Info_ValueForKey( targetInfo, "n" ), sizeof( targetName )); - -  message2 = ""; - -  // check for single client messages - -  switch( mod ) -  { -    case MOD_FALLING: -      message = "fell fowl to gravity"; -      break; -    case MOD_CRUSH: -      message = "was squished"; -      break; -    case MOD_WATER: -      message = "forgot to pack a snorkel"; -      break; -    case MOD_SLIME: -      message = "melted"; -      break; -    case MOD_LAVA: -      message = "did a back flip into the lava"; -      break; -    case MOD_TARGET_LASER: -      message = "saw the light"; -      break; -    case MOD_TRIGGER_HURT: -      message = "was in the wrong place"; -      break; -    case MOD_HSPAWN: -      message = "should have run further"; -      break; -    case MOD_ASPAWN: -      message = "shouldn't have trod in the acid"; -      break; -    case MOD_MGTURRET: -      message = "was gunned down by a turret"; -      break; -    case MOD_TESLAGEN: -      message = "was zapped by a tesla generator"; -      break; -    case MOD_ATUBE: -      message = "was melted by an acid tube"; -      break; -    case MOD_OVERMIND: -      message = "got too close to the overmind"; -      break; -    case MOD_REACTOR: -      message = "got too close to the reactor"; -      break; -    case MOD_SLOWBLOB: -      message = "should have visited a medical station"; -      break; -    case MOD_SWARM: -      message = "was hunted down by the swarm"; -      break; -    default: -      message = NULL; -      break; -  } - -  if( !message && attacker == target ) -  { -    switch( mod ) -    { -      case MOD_FLAMER_SPLASH: -        if( gender == GENDER_FEMALE ) -          message = "toasted herself"; -        else if( gender == GENDER_NEUTER ) -          message = "toasted itself"; -        else -          message = "toasted himself"; -        break; - -      case MOD_LCANNON_SPLASH: -        if( gender == GENDER_FEMALE ) -          message = "irradiated herself"; -        else if( gender == GENDER_NEUTER ) -          message = "irradiated itself"; -        else -          message = "irradiated himself"; -        break; - -      case MOD_GRENADE: -        if( gender == GENDER_FEMALE ) -          message = "blew herself up"; -        else if( gender == GENDER_NEUTER ) -          message = "blew itself up"; -        else -          message = "blew himself up"; -        break; - -      case MOD_LEVEL3_BOUNCEBALL: -        if( gender == GENDER_FEMALE ) -          message = "sniped herself"; -        else if( gender == GENDER_NEUTER ) -          message = "sniped itself"; -        else -          message = "sniped himself"; -        break; - -      case MOD_PRIFLE: -        if( gender == GENDER_FEMALE ) -          message = "pulse rifled herself"; -        else if( gender == GENDER_NEUTER ) -          message = "pulse rifled itself"; -        else -          message = "pulse rifled himself"; -        break; - -      default: -        if( gender == GENDER_FEMALE ) -          message = "killed herself"; -        else if( gender == GENDER_NEUTER ) -          message = "killed itself"; -        else -          message = "killed himself"; -        break; -    } -  } - -  if( message ) -  { -    CG_Printf( "%s" S_COLOR_WHITE " %s\n", targetName, message ); -    return; -  } - -  // check for double client messages -  if( !attackerInfo ) -  { -    attacker = ENTITYNUM_WORLD; -    strcpy( attackerName, "noname" ); -  } -  else -  { -    Q_strncpyz( attackerName, Info_ValueForKey( attackerInfo, "n" ), sizeof( attackerName )); -    // check for kill messages about the current clientNum -    if( target == cg.snap->ps.clientNum ) -      Q_strncpyz( cg.killerName, attackerName, sizeof( cg.killerName ) ); -  } - -  if( attacker != ENTITYNUM_WORLD ) -  { -    switch( mod ) -    { -      case MOD_PAINSAW: -        message = "was sawn by"; -        break; -      case MOD_BLASTER: -        message = "was blasted by"; -        break; -      case MOD_MACHINEGUN: -        message = "was machinegunned by"; -        break; -      case MOD_CHAINGUN: -        message = "was chaingunned by"; -        break; -      case MOD_SHOTGUN: -        message = "was gunned down by"; -        break; -      case MOD_PRIFLE: -        message = "was pulse rifled by"; -        break; -      case MOD_MDRIVER: -        message = "was mass driven by"; -        break; -      case MOD_LASGUN: -        message = "was lasgunned by"; -        break; -      case MOD_FLAMER: -        message = "was grilled by"; -        message2 = "'s flamer"; -        break; -      case MOD_FLAMER_SPLASH: -        message = "was toasted by"; -        message2 = "'s flamer"; -        break; -      case MOD_LCANNON: -        message = "felt the full force of"; -        message2 = "'s lucifer cannon"; -        break; -      case MOD_LCANNON_SPLASH: -        message = "was caught in the fallout of"; -        message2 = "'s lucifer cannon"; -        break; -      case MOD_GRENADE: -        message = "couldn't escape"; -        message2 = "'s grenade"; -        break; - -      case MOD_ABUILDER_CLAW: -        message = "should leave"; -        message2 = "'s buildings alone"; -        break; -      case MOD_LEVEL0_BITE: -        message = "was bitten by"; -        break; -      case MOD_LEVEL1_CLAW: -        message = "was swiped by"; -        Com_sprintf( className, 64, "'s %s", -            BG_ClassConfig( PCL_ALIEN_LEVEL1 )->humanName ); -        message2 = className; -        break; -      case MOD_LEVEL2_CLAW: -        message = "was clawed by"; -        Com_sprintf( className, 64, "'s %s", -            BG_ClassConfig( PCL_ALIEN_LEVEL2 )->humanName ); -        message2 = className; -        break; -      case MOD_LEVEL2_ZAP: -        message = "was zapped by"; -        Com_sprintf( className, 64, "'s %s", -            BG_ClassConfig( PCL_ALIEN_LEVEL2 )->humanName ); -        message2 = className; -        break; -      case MOD_LEVEL3_CLAW: -        message = "was chomped by"; -        Com_sprintf( className, 64, "'s %s", -            BG_ClassConfig( PCL_ALIEN_LEVEL3 )->humanName ); -        message2 = className; -        break; -      case MOD_LEVEL3_POUNCE: -        message = "was pounced upon by"; -        Com_sprintf( className, 64, "'s %s", -            BG_ClassConfig( PCL_ALIEN_LEVEL3 )->humanName ); -        message2 = className; -        break; -      case MOD_LEVEL3_BOUNCEBALL: -        message = "was sniped by"; -        Com_sprintf( className, 64, "'s %s", -            BG_ClassConfig( PCL_ALIEN_LEVEL3 )->humanName ); -        message2 = className; -        break; -      case MOD_LEVEL4_CLAW: -        message = "was mauled by"; -        Com_sprintf( className, 64, "'s %s", -            BG_ClassConfig( PCL_ALIEN_LEVEL4 )->humanName ); -        message2 = className; -        break; -      case MOD_LEVEL4_TRAMPLE: -        message = "should have gotten out of the way of"; -        Com_sprintf( className, 64, "'s %s", -            BG_ClassConfig( PCL_ALIEN_LEVEL4 )->humanName ); -        message2 = className; -        break; -      case MOD_LEVEL4_CRUSH: -        message = "was crushed under"; -        message2 = "'s weight"; -        break; - -      case MOD_POISON: -        message = "should have used a medkit against"; -        message2 = "'s poison"; -        break; -      case MOD_LEVEL1_PCLOUD: -        message = "was gassed by"; -        Com_sprintf( className, 64, "'s %s", -            BG_ClassConfig( PCL_ALIEN_LEVEL1 )->humanName ); -        message2 = className; -        break; - - -      case MOD_TELEFRAG: -        message = "tried to invade"; -        message2 = "'s personal space"; -        break; -      default: -        message = "was killed by"; -        break; -    } - -    if( message ) -    { -      CG_Printf( "%s" S_COLOR_WHITE " %s %s%s" S_COLOR_WHITE "%s\n", -        targetName, message, -        ( teamKill ) ? S_COLOR_RED "TEAMMATE " S_COLOR_WHITE : "", -        attackerName, message2 ); -      if( teamKill && attacker == cg.clientNum ) -      { -        CG_CenterPrint( va ( "You killed " S_COLOR_RED "TEAMMATE " -          S_COLOR_WHITE "%s", targetName ), -          SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH ); -      } -      return; -    } -  } - -  // we don't know what it was -  CG_Printf( "%s" S_COLOR_WHITE " died\n", targetName ); -} - - - -//========================================================================== - -/* -================ -CG_PainEvent - -Also called by playerstate transition -================ -*/ -void CG_PainEvent( centity_t *cent, int health ) -{ -  char  *snd; - -  // don't do more than two pain sounds a second -  if( cg.time - cent->pe.painTime < 500 ) -    return; - -  if( health < 25 ) -    snd = "*pain25_1.wav"; -  else if( health < 50 ) -    snd = "*pain50_1.wav"; -  else if( health < 75 ) -    snd = "*pain75_1.wav"; -  else -    snd = "*pain100_1.wav"; - -  trap_S_StartSound( NULL, cent->currentState.number, CHAN_VOICE, -    CG_CustomSound( cent->currentState.number, snd ) ); - -  // save pain time for programitic twitch animation -  cent->pe.painTime = cg.time; -  cent->pe.painDirection ^= 1; -} - -/* -========================= -CG_Level2Zap -========================= -*/ -static void CG_Level2Zap( entityState_t *es ) -{ -  int           i; -  centity_t     *source = NULL, *target = NULL; - -  if( es->misc < 0 || es->misc >= MAX_CLIENTS ) -    return; - -  source = &cg_entities[ es->misc ]; -  for( i = 0; i <= 2; i++ ) -  { -    switch( i ) -    { -      case 0: -        if( es->time <= 0 ) -          continue; - -        target = &cg_entities[ es->time ]; -        break; - -      case 1: -        if( es->time2 <= 0 ) -          continue; - -        target = &cg_entities[ es->time2 ]; -        break; - -      case 2: -        if( es->constantLight <= 0 ) -          continue; - -        target = &cg_entities[ es->constantLight ]; -        break; -    } - -    if( !CG_IsTrailSystemValid( &source->level2ZapTS[ i ] ) ) -      source->level2ZapTS[ i ] = CG_SpawnNewTrailSystem( cgs.media.level2ZapTS ); - -    if( CG_IsTrailSystemValid( &source->level2ZapTS[ i ] ) ) -    { -      CG_SetAttachmentCent( &source->level2ZapTS[ i ]->frontAttachment, source ); -      CG_SetAttachmentCent( &source->level2ZapTS[ i ]->backAttachment, target ); -      CG_AttachToCent( &source->level2ZapTS[ i ]->frontAttachment ); -      CG_AttachToCent( &source->level2ZapTS[ i ]->backAttachment ); -    } -  } -  source->level2ZapTime = cg.time; -} - -/* -============== -CG_EntityEvent - -An entity has an event value -also called by CG_CheckPlayerstateEvents -============== -*/ -void CG_EntityEvent( centity_t *cent, vec3_t position ) -{ -  entityState_t *es; -  int           event; -  vec3_t        dir; -  const char    *s; -  int           clientNum; -  clientInfo_t  *ci; -  int           steptime; -  vec3_t  cuboid; -  buildable_t   cuboidType; - -  if( cg.snap->ps.persistant[ PERS_SPECSTATE ] != SPECTATOR_NOT ) -    steptime = 200; -  else -    steptime = BG_Class( cg.snap->ps.stats[ STAT_CLASS ] )->steptime; - -  es = ¢->currentState; -  event = es->event & ~EV_EVENT_BITS; - -  if( cg_debugEvents.integer ) -    CG_Printf( "ent:%3i  event:%3i %s\n", es->number, event, -               BG_EventName( event ) ); - -  if( !event ) -    return; - -  clientNum = es->clientNum; -  if( clientNum < 0 || clientNum >= MAX_CLIENTS ) -    clientNum = 0; - -  ci = &cgs.clientinfo[ clientNum ]; - -  switch( event ) -  { -    // -    // movement generated events -    // -    case EV_FOOTSTEP: -      if( cg_footsteps.integer && ci->footsteps != FOOTSTEP_NONE ) -      { -        if( ci->footsteps == FOOTSTEP_CUSTOM ) -          trap_S_StartSound( NULL, es->number, CHAN_BODY, -            ci->customFootsteps[ rand( ) & 3 ] ); -        else -          trap_S_StartSound( NULL, es->number, CHAN_BODY, -            cgs.media.footsteps[ ci->footsteps ][ rand( ) & 3 ] ); -      } -      break; - -    case EV_FOOTSTEP_METAL: -      if( cg_footsteps.integer && ci->footsteps != FOOTSTEP_NONE ) -      { -        if( ci->footsteps == FOOTSTEP_CUSTOM ) -          trap_S_StartSound( NULL, es->number, CHAN_BODY, -            ci->customMetalFootsteps[ rand( ) & 3 ] ); -        else -          trap_S_StartSound( NULL, es->number, CHAN_BODY, -            cgs.media.footsteps[ FOOTSTEP_METAL ][ rand( ) & 3 ] ); -      } -      break; - -    case EV_FOOTSTEP_SQUELCH: -      if( cg_footsteps.integer && ci->footsteps != FOOTSTEP_NONE ) -      { -        trap_S_StartSound( NULL, es->number, CHAN_BODY, -          cgs.media.footsteps[ FOOTSTEP_FLESH ][ rand( ) & 3 ] ); -      } -      break; - -    case EV_FOOTSPLASH: -      if( cg_footsteps.integer && ci->footsteps != FOOTSTEP_NONE ) -      { -        trap_S_StartSound( NULL, es->number, CHAN_BODY, -          cgs.media.footsteps[ FOOTSTEP_SPLASH ][ rand( ) & 3 ] ); -      } -      break; - -    case EV_FOOTWADE: -      if( cg_footsteps.integer && ci->footsteps != FOOTSTEP_NONE ) -      { -        trap_S_StartSound( NULL, es->number, CHAN_BODY, -          cgs.media.footsteps[ FOOTSTEP_SPLASH ][ rand( ) & 3 ] ); -      } -      break; - -    case EV_SWIM: -      if( cg_footsteps.integer && ci->footsteps != FOOTSTEP_NONE ) -      { -        trap_S_StartSound( NULL, es->number, CHAN_BODY, -          cgs.media.footsteps[ FOOTSTEP_SPLASH ][ rand( ) & 3 ] ); -      } -      break; - - -    case EV_FALL_SHORT: -      trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.landSound ); - -      if( clientNum == cg.predictedPlayerState.clientNum ) -      { -        // smooth landing z changes -        cg.landChange = -8; -        cg.landTime = cg.time; -      } -      break; - -    case EV_FALL_MEDIUM: -      // use normal pain sound -      trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*pain100_1.wav" ) ); - -      if( clientNum == cg.predictedPlayerState.clientNum ) -      { -        // smooth landing z changes -        cg.landChange = -16; -        cg.landTime = cg.time; -      } -      break; - -    case EV_FALL_FAR: -      trap_S_StartSound (NULL, es->number, CHAN_AUTO, CG_CustomSound( es->number, "*fall1.wav" ) ); -      cent->pe.painTime = cg.time;  // don't play a pain sound right after this - -      if( clientNum == cg.predictedPlayerState.clientNum ) -      { -        // smooth landing z changes -        cg.landChange = -24; -        cg.landTime = cg.time; -      } -      break; - -    case EV_FALLING: -      trap_S_StartSound( NULL, es->number, CHAN_AUTO, CG_CustomSound( es->number, "*falling1.wav" ) ); -      break; - -    case EV_STEP_4: -    case EV_STEP_8: -    case EV_STEP_12: -    case EV_STEP_16:    // smooth out step up transitions -    case EV_STEPDN_4: -    case EV_STEPDN_8: -    case EV_STEPDN_12: -    case EV_STEPDN_16:    // smooth out step down transitions -      { -        float  oldStep; -        int    delta; -        int    step; - -        if( clientNum != cg.predictedPlayerState.clientNum ) -          break; - -        // if we are interpolating, we don't need to smooth steps -        if( cg.demoPlayback || ( cg.snap->ps.pm_flags & PMF_FOLLOW ) || -            cg_nopredict.integer || cg_synchronousClients.integer ) -          break; - -        // check for stepping up before a previous step is completed -        delta = cg.time - cg.stepTime; - -        if( delta < steptime ) -          oldStep = cg.stepChange * ( steptime - delta ) / steptime; -        else -          oldStep = 0; - -        // add this amount -        if( event >= EV_STEPDN_4 ) -        { -          step = 4 * ( event - EV_STEPDN_4 + 1 ); -          cg.stepChange = oldStep - step; -        } -        else -        { -          step = 4 * ( event - EV_STEP_4 + 1 ); -          cg.stepChange = oldStep + step; -        } - -        if( cg.stepChange > MAX_STEP_CHANGE ) -          cg.stepChange = MAX_STEP_CHANGE; -        else if( cg.stepChange < -MAX_STEP_CHANGE ) -          cg.stepChange = -MAX_STEP_CHANGE; - -        cg.stepTime = cg.time; -        break; -      } - -    case EV_JUMP: -      trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*jump1.wav" ) ); - -      if( BG_ClassHasAbility( cg.predictedPlayerState.stats[ STAT_CLASS ], SCA_WALLJUMPER ) ) -      { -        vec3_t  surfNormal, refNormal = { 0.0f, 0.0f, 1.0f }; -        vec3_t  rotAxis; - -        if( clientNum != cg.predictedPlayerState.clientNum ) -          break; - -        //set surfNormal -        VectorCopy( cg.predictedPlayerState.grapplePoint, surfNormal ); - -        //if we are moving from one surface to another smooth the transition -        if( !VectorCompare( surfNormal, cg.lastNormal ) && surfNormal[ 2 ] != 1.0f ) -        { -          CrossProduct( refNormal, surfNormal, rotAxis ); -          VectorNormalize( rotAxis ); - -          //add the op -          CG_addSmoothOp( rotAxis, 15.0f, 1.0f ); -        } - -        //copy the current normal to the lastNormal -        VectorCopy( surfNormal, cg.lastNormal ); -      } - -      break; -       -    case EV_JETJUMP: -      cent->jetPackJumpTime = cg.time; //for visual effects -      trap_S_StartSound( NULL, es->number, CHAN_VOICE, cgs.media.jetpackJumpSound );  -      break; -       -     -    case EV_JETPACK_DEACTIVATE: -      switch( cent->jetPackState ) -      { -        case JPS_DESCENDING: -          trap_S_StartSound( NULL, es->number, CHAN_VOICE, cgs.media.jetpackDescendDeactivateSound ); -          break; -        case JPS_HOVERING: -          trap_S_StartSound( NULL, es->number, CHAN_VOICE, cgs.media.jetpackIdleDeactivateSound ); -          break; -        case JPS_ASCENDING: -          trap_S_StartSound( NULL, es->number, CHAN_VOICE, cgs.media.jetpackAscendDeactivateSound ); -          break; -      } -      break; -       -    case EV_JETPACK_REFUEL: -      if( cent->jetPackRefuelTime + 1000 < cg.time ) -      {  -        cent->jetPackRefuelTime = cg.time; -        trap_S_StartSound( NULL, es->number, CHAN_VOICE, cgs.media.jetpackRefuelSound); -      } -      break; - -    case EV_LEV1_GRAB: -      trap_S_StartSound( NULL, es->number, CHAN_VOICE, cgs.media.alienL1Grab ); -      break; - -    case EV_LEV4_TRAMPLE_PREPARE: -      trap_S_StartSound( NULL, es->number, CHAN_VOICE, cgs.media.alienL4ChargePrepare ); -      break; - -    case EV_LEV4_TRAMPLE_START: -      //FIXME: stop cgs.media.alienL4ChargePrepare playing here -      trap_S_StartSound( NULL, es->number, CHAN_VOICE, cgs.media.alienL4ChargeStart ); -      break; - -    case EV_TAUNT: -      if( !cg_noTaunt.integer ) -        trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, "*taunt.wav" ) ); -      break; - -    case EV_WATER_TOUCH: -      trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.watrInSound ); -      break; - -    case EV_WATER_LEAVE: -      trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.watrOutSound ); -      break; - -    case EV_WATER_UNDER: -      trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.watrUnSound ); -      break; - -    case EV_WATER_CLEAR: -      trap_S_StartSound( NULL, es->number, CHAN_AUTO, CG_CustomSound( es->number, "*gasp.wav" ) ); -      break; - -    // -    // weapon events -    // -    case EV_NOAMMO: -      trap_S_StartSound( NULL, es->number, CHAN_WEAPON, -                         cgs.media.weaponEmptyClick ); -      break; - -    case EV_CHANGE_WEAPON: -      trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.selectSound ); -      break; - -    case EV_FIRE_WEAPON: -      CG_FireWeapon( cent, WPM_PRIMARY ); -      break; - -    case EV_FIRE_WEAPON2: -      CG_FireWeapon( cent, WPM_SECONDARY ); -      break; - -    case EV_FIRE_WEAPON3: -      CG_FireWeapon( cent, WPM_TERTIARY ); -      break; - -    //================================================================= - -    // -    // other events -    // -    case EV_PLAYER_TELEPORT_IN: -      //deprecated -      break; - -    case EV_PLAYER_TELEPORT_OUT: -      CG_PlayerDisconnect( position ); -      break; - -    case EV_BUILD_CONSTRUCT: -      //do something useful here -      break; - -    case EV_BUILD_DESTROY: -      //do something useful here -      break; - -    case EV_RPTUSE_SOUND: -      trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.repeaterUseSound ); -      break; - -    case EV_GRENADE_BOUNCE: -      if( rand( ) & 1 ) -        trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.hardBounceSound1 ); -      else -        trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.hardBounceSound2 ); -      break; - -    // -    // missile impacts -    // -    case EV_MISSILE_HIT: -      ByteToDir( es->eventParm, dir ); -      CG_MissileHitEntity( es->weapon, es->generic1, position, dir, es->otherEntityNum, es->torsoAnim ); -      break; - -    case EV_MISSILE_MISS: -      ByteToDir( es->eventParm, dir ); -      CG_MissileHitWall( es->weapon, es->generic1, 0, position, dir, IMPACTSOUND_DEFAULT, es->torsoAnim ); -      break; - -    case EV_MISSILE_MISS_METAL: -      ByteToDir( es->eventParm, dir ); -      CG_MissileHitWall( es->weapon, es->generic1, 0, position, dir, IMPACTSOUND_METAL, es->torsoAnim ); -      break; - -    case EV_HUMAN_BUILDABLE_EXPLOSION: -      ByteToDir( es->eventParm, dir ); -      CG_HumanBuildableExplosion( position, dir ); -      break; - -    case EV_ALIEN_BUILDABLE_EXPLOSION: -      ByteToDir( es->eventParm, dir ); -      CG_AlienBuildableExplosion( position, dir ); -      break; -     -    case EV_CUBOID_EXPLOSION: -      cuboidType=es->modelindex; -      CG_CuboidExplosion(cuboidType,position,es->angles); -      break; - -    case EV_TESLATRAIL: -      cent->currentState.weapon = WP_TESLAGEN; -      { -        centity_t *source = &cg_entities[ es->generic1 ]; -        centity_t *target = &cg_entities[ es->clientNum ]; -        vec3_t    sourceOffset = { 0.0f, 0.0f, 28.0f }; - -        if( !CG_IsTrailSystemValid( &source->muzzleTS ) ) -        { -          source->muzzleTS = CG_SpawnNewTrailSystem( cgs.media.teslaZapTS ); - -          if( CG_IsTrailSystemValid( &source->muzzleTS ) ) -          { -            CG_SetAttachmentCent( &source->muzzleTS->frontAttachment, source ); -            CG_SetAttachmentCent( &source->muzzleTS->backAttachment, target ); -            CG_AttachToCent( &source->muzzleTS->frontAttachment ); -            CG_AttachToCent( &source->muzzleTS->backAttachment ); -            CG_SetAttachmentOffset( &source->muzzleTS->frontAttachment, sourceOffset ); - -            source->muzzleTSDeathTime = cg.time + cg_teslaTrailTime.integer; -          } -        } -      } -      break; - -    case EV_BULLET_HIT_WALL: -      ByteToDir( es->eventParm, dir ); -      CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qfalse, ENTITYNUM_WORLD ); -      break; - -    case EV_BULLET_HIT_FLESH: -      CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qtrue, es->eventParm ); -      break; - -    case EV_SHOTGUN: -      CG_ShotgunFire( es ); -      break; - -    case EV_GENERAL_SOUND: -      if( cgs.gameSounds[ es->eventParm ] ) -        trap_S_StartSound( NULL, es->number, CHAN_VOICE, cgs.gameSounds[ es->eventParm ] ); -      else -      { -        s = CG_ConfigString( CS_SOUNDS + es->eventParm ); -        trap_S_StartSound( NULL, es->number, CHAN_VOICE, CG_CustomSound( es->number, s ) ); -      } -      break; - -    case EV_GLOBAL_SOUND: // play from the player's head so it never diminishes -      if( cgs.gameSounds[ es->eventParm ] ) -        trap_S_StartSound( NULL, cg.snap->ps.clientNum, CHAN_AUTO, cgs.gameSounds[ es->eventParm ] ); -      else -      { -        s = CG_ConfigString( CS_SOUNDS + es->eventParm ); -        trap_S_StartSound( NULL, cg.snap->ps.clientNum, CHAN_AUTO, CG_CustomSound( es->number, s ) ); -      } -      break; - -    case EV_PAIN: -      // local player sounds are triggered in CG_CheckLocalSounds, -      // so ignore events on the player -      if( cent->currentState.number != cg.snap->ps.clientNum ) -        CG_PainEvent( cent, es->eventParm ); -      break; - -    case EV_DEATH1: -    case EV_DEATH2: -    case EV_DEATH3: -      trap_S_StartSound( NULL, es->number, CHAN_VOICE, -          CG_CustomSound( es->number, va( "*death%i.wav", event - EV_DEATH1 + 1 ) ) ); -      break; - -    case EV_OBITUARY: -      CG_Obituary( es ); -      break; - -    case EV_GIB_PLAYER: -      // no gibbing -      break; - -    case EV_STOPLOOPINGSOUND: -      trap_S_StopLoopingSound( es->number ); -      es->loopSound = 0; -      break; - -    case EV_DEBUG_LINE: -      CG_Beam( cent ); -      break; - -    case EV_BUILD_DELAY: -      if( clientNum == cg.predictedPlayerState.clientNum ) -      { -        trap_S_StartLocalSound( cgs.media.buildableRepairedSound, CHAN_LOCAL_SOUND ); -        cg.lastBuildAttempt = cg.time; -      } -      break; - -    case EV_BUILD_REPAIR: -      trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.buildableRepairSound ); -      break; - -    case EV_BUILD_REPAIRED: -      trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.buildableRepairedSound ); -      break; - -    case EV_OVERMIND_ATTACK: -      if( cg.predictedPlayerState.stats[ STAT_TEAM ] == TEAM_ALIENS ) -      { -        trap_S_StartLocalSound( cgs.media.alienOvermindAttack, CHAN_ANNOUNCER ); -        CG_CenterPrint( "The Overmind is under attack!", 200, GIANTCHAR_WIDTH * 4 ); -      } -      break; - -    case EV_OVERMIND_DYING: -      if( cg.predictedPlayerState.stats[ STAT_TEAM ] == TEAM_ALIENS ) -      { -        trap_S_StartLocalSound( cgs.media.alienOvermindDying, CHAN_ANNOUNCER ); -        CG_CenterPrint( "The Overmind is dying!", 200, GIANTCHAR_WIDTH * 4 ); -      } -      break; - -    case EV_DCC_ATTACK: -      if( cg.predictedPlayerState.stats[ STAT_TEAM ] == TEAM_HUMANS ) -      { -        //trap_S_StartLocalSound( cgs.media.humanDCCAttack, CHAN_ANNOUNCER ); -        CG_CenterPrint( "Our base is under attack!", 200, GIANTCHAR_WIDTH * 4 ); -      } -      break; - -    case EV_MGTURRET_SPINUP: -      trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.turretSpinupSound ); -      break; - -    case EV_OVERMIND_SPAWNS: -      if( cg.predictedPlayerState.stats[ STAT_TEAM ] == TEAM_ALIENS ) -      { -        trap_S_StartLocalSound( cgs.media.alienOvermindSpawns, CHAN_ANNOUNCER ); -        CG_CenterPrint( "The Overmind needs spawns!", 200, GIANTCHAR_WIDTH * 4 ); -      } -      break; - -    case EV_ALIEN_EVOLVE: -      trap_S_StartSound( NULL, es->number, CHAN_BODY, cgs.media.alienEvolveSound ); -      { -        particleSystem_t *ps = CG_SpawnNewParticleSystem( cgs.media.alienEvolvePS ); - -        if( CG_IsParticleSystemValid( &ps ) ) -        { -          CG_SetAttachmentCent( &ps->attachment, cent ); -          CG_AttachToCent( &ps->attachment ); -        } -      } - -      if( es->number == cg.clientNum ) -      { -        CG_ResetPainBlend( ); -        cg.spawnTime = cg.time; -      } -      break; - -    case EV_ALIEN_EVOLVE_FAILED: -      if( clientNum == cg.predictedPlayerState.clientNum ) -      { -        //FIXME: change to "negative" sound -        trap_S_StartLocalSound( cgs.media.buildableRepairedSound, CHAN_LOCAL_SOUND ); -        cg.lastEvolveAttempt = cg.time; -      } -      break; - -    case EV_ALIEN_ACIDTUBE: -      { -        particleSystem_t *ps = CG_SpawnNewParticleSystem( cgs.media.alienAcidTubePS ); - -        if( CG_IsParticleSystemValid( &ps ) ) -        { -          CG_SetAttachmentCent( &ps->attachment, cent ); -          ByteToDir( es->eventParm, dir ); -          CG_SetParticleSystemNormal( ps, dir ); -          CG_AttachToCent( &ps->attachment ); -        } -      } -      break; - -    case EV_MEDKIT_USED: -      trap_S_StartSound( NULL, es->number, CHAN_AUTO, cgs.media.medkitUseSound ); -      break; - -    case EV_PLAYER_RESPAWN: -      if( es->number == cg.clientNum ) -        cg.spawnTime = cg.time; -      break; - -    case EV_LEV2_ZAP: -      CG_Level2Zap( es ); - -    default: -      CG_Error( "Unknown event: %i", event ); -      break; -  } -} - - -/* -============== -CG_CheckEvents - -============== -*/ -void CG_CheckEvents( centity_t *cent ) -{ -  entity_event_t event; -  entity_event_t oldEvent = EV_NONE; - -  // check for event-only entities -  if( cent->currentState.eType > ET_EVENTS ) -  { -    event = cent->currentState.eType - ET_EVENTS; - -    if( cent->previousEvent ) -      return; // already fired - -    cent->previousEvent = 1; - -    cent->currentState.event = cent->currentState.eType - ET_EVENTS; -     -    // Move the pointer to the entity that the -    // event was originally attached to -    if( cent->currentState.eFlags & EF_PLAYER_EVENT ) -    { -      cent = &cg_entities[ cent->currentState.otherEntityNum ]; -      oldEvent = cent->currentState.event; -      cent->currentState.event = event; -    } -  } -  else -  { -    // check for events riding with another entity -    if( cent->currentState.event == cent->previousEvent ) -      return; - -    cent->previousEvent = cent->currentState.event; -    if( ( cent->currentState.event & ~EV_EVENT_BITS ) == 0 ) -      return; -  } - -  // calculate the position at exactly the frame time -  BG_EvaluateTrajectory( ¢->currentState.pos, cg.snap->serverTime, cent->lerpOrigin ); -  CG_SetEntitySoundPosition( cent ); - -  CG_EntityEvent( cent, cent->lerpOrigin ); -   -  // If this was a reattached spilled event, restore the original event -  if( oldEvent != EV_NONE ) -    cent->currentState.event = oldEvent; -} - diff --git a/src/cgame/cg_main.c.orig b/src/cgame/cg_main.c.orig deleted file mode 100644 index caa80f4..0000000 --- a/src/cgame/cg_main.c.orig +++ /dev/null @@ -1,1982 +0,0 @@ -/* -=========================================================================== -Copyright (C) 1999-2005 Id Software, Inc. -Copyright (C) 2000-2009 Darklegion Development - -This file is part of Tremulous. - -Tremulous is free software; you can redistribute it -and/or modify it under the terms of the GNU General Public License as -published by the Free Software Foundation; either version 2 of the License, -or (at your option) any later version. - -Tremulous 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.  See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with Tremulous; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA -=========================================================================== -*/ - -// cg_main.c -- initialization and primary entry point for cgame - - -#include "cg_local.h" - -#include "../ui/ui_shared.h" -// display context for new ui stuff -displayContextDef_t cgDC; - -void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum ); -void CG_Shutdown( void ); -static char *CG_VoIPString( void ); - -/* -================ -vmMain - -This is the only way control passes into the module. -This must be the very first function compiled into the .q3vm file -================ -*/ -Q_EXPORT intptr_t vmMain( int command, int arg0, int arg1, int arg2, int arg3, -                                       int arg4, int arg5, int arg6, int arg7, -                                       int arg8, int arg9, int arg10, int arg11 ) -{ -  switch( command ) -  { -    case CG_INIT: -      CG_Init( arg0, arg1, arg2 ); -      return 0; - -    case CG_SHUTDOWN: -      CG_Shutdown( ); -      return 0; - -    case CG_CONSOLE_COMMAND: -      return CG_ConsoleCommand( ); - -    case CG_CONSOLE_TEXT: -      CG_AddNotifyText( ); -      return 0; - -    case CG_DRAW_ACTIVE_FRAME: -      CG_DrawActiveFrame( arg0, arg1, arg2 ); -      return 0; - -    case CG_CROSSHAIR_PLAYER: -      return CG_CrosshairPlayer( ); - -    case CG_LAST_ATTACKER: -      return CG_LastAttacker( ); - -    case CG_KEY_EVENT: -      CG_KeyEvent( arg0, arg1 ); -      return 0; - -    case CG_MOUSE_EVENT: -      // cgame doesn't care where the cursor is -      return 0; - -    case CG_EVENT_HANDLING: -      CG_EventHandling( arg0 ); -      return 0; - -    case CG_VOIP_STRING: -      return (intptr_t)CG_VoIPString( ); - -    default: -      CG_Error( "vmMain: unknown command %i", command ); -      break; -  } - -  return -1; -} - - -cg_t        cg; -cgs_t       cgs; -centity_t   cg_entities[ MAX_GENTITIES ]; - -weaponInfo_t    cg_weapons[ 32 ]; -upgradeInfo_t   cg_upgrades[ 32 ]; - -buildableInfo_t cg_buildables[ CUBOID_FIRST ]; -cuboidInfo_t    cg_cuboids[ CUBOID_TYPES ]; - -vmCvar_t  cg_teslaTrailTime; -vmCvar_t  cg_centertime; -vmCvar_t  cg_runpitch; -vmCvar_t  cg_runroll; -vmCvar_t  cg_swingSpeed; -vmCvar_t  cg_shadows; -vmCvar_t  cg_drawTimer; -vmCvar_t  cg_drawClock; -vmCvar_t  cg_drawFPS; -vmCvar_t  cg_drawDemoState; -vmCvar_t  cg_drawSnapshot; -vmCvar_t  cg_drawChargeBar; -vmCvar_t  cg_drawCrosshair; -vmCvar_t  cg_drawCrosshairNames; -vmCvar_t  cg_crosshairSize; -vmCvar_t  cg_draw2D; -vmCvar_t  cg_animSpeed; -vmCvar_t  cg_debugAnim; -vmCvar_t  cg_debugPosition; -vmCvar_t  cg_debugEvents; -vmCvar_t  cg_errorDecay; -vmCvar_t  cg_nopredict; -vmCvar_t  cg_debugMove; -vmCvar_t  cg_noPlayerAnims; -vmCvar_t  cg_showmiss; -vmCvar_t  cg_footsteps; -vmCvar_t  cg_addMarks; -vmCvar_t  cg_viewsize; -vmCvar_t  cg_drawGun; -vmCvar_t  cg_gun_frame; -vmCvar_t  cg_gun_x; -vmCvar_t  cg_gun_y; -vmCvar_t  cg_gun_z; -vmCvar_t  cg_tracerChance; -vmCvar_t  cg_tracerWidth; -vmCvar_t  cg_tracerLength; -vmCvar_t  cg_thirdPerson; -vmCvar_t  cg_thirdPersonAngle; -vmCvar_t  cg_thirdPersonShoulderViewMode; -vmCvar_t  cg_staticDeathCam; -vmCvar_t  cg_thirdPersonPitchFollow; -vmCvar_t  cg_thirdPersonRange; -vmCvar_t  cg_stereoSeparation; -vmCvar_t  cg_lagometer; -vmCvar_t  cg_drawSpeed; -vmCvar_t  cg_synchronousClients; -vmCvar_t  cg_stats; -vmCvar_t  cg_paused; -vmCvar_t  cg_blood; -vmCvar_t  cg_teamChatsOnly; -vmCvar_t  cg_drawTeamOverlay; -vmCvar_t  cg_teamOverlaySortMode; -vmCvar_t  cg_teamOverlayMaxPlayers; -vmCvar_t  cg_teamOverlayUserinfo; -vmCvar_t  cg_noPrintDuplicate; -vmCvar_t  cg_noVoiceChats; -vmCvar_t  cg_noVoiceText; -vmCvar_t  cg_hudFiles; -vmCvar_t  cg_hudFilesEnable; -vmCvar_t  cg_smoothClients; -vmCvar_t  pmove_fixed; -vmCvar_t  pmove_msec; -vmCvar_t  cg_cameraMode; -vmCvar_t  cg_timescaleFadeEnd; -vmCvar_t  cg_timescaleFadeSpeed; -vmCvar_t  cg_timescale; -vmCvar_t  cg_noTaunt; -vmCvar_t  cg_drawSurfNormal; -vmCvar_t  cg_drawBBOX; -vmCvar_t  cg_wwSmoothTime; -vmCvar_t  cg_disableBlueprintErrors; -vmCvar_t  cg_depthSortParticles; -vmCvar_t  cg_bounceParticles; -vmCvar_t  cg_consoleLatency; -vmCvar_t  cg_lightFlare; -vmCvar_t  cg_debugParticles; -vmCvar_t  cg_debugTrails; -vmCvar_t  cg_debugPVS; -vmCvar_t  cg_disableWarningDialogs; -vmCvar_t  cg_disableUpgradeDialogs; -vmCvar_t  cg_disableBuildDialogs; -vmCvar_t  cg_disableCommandDialogs; -vmCvar_t  cg_disableScannerPlane; -vmCvar_t  cg_tutorial; - -vmCvar_t  cg_modTutorial; -vmCvar_t  cg_modTutorialReference; -vmCvar_t  cg_lastModVersion; - -vmCvar_t  cg_painBlendUpRate; -vmCvar_t  cg_painBlendDownRate; -vmCvar_t  cg_painBlendMax; -vmCvar_t  cg_painBlendScale; -vmCvar_t  cg_painBlendZoom; - -vmCvar_t  cg_stickySpec; -vmCvar_t  cg_sprintToggle; -vmCvar_t  cg_unlagged; - -vmCvar_t  cg_debugVoices; - -vmCvar_t  ui_currentClass; -vmCvar_t  ui_carriage; -vmCvar_t  ui_stages; -vmCvar_t  ui_dialog; -vmCvar_t  ui_voteActive; -vmCvar_t  ui_alienTeamVoteActive; -vmCvar_t  ui_humanTeamVoteActive; - -vmCvar_t  cg_debugRandom; - -vmCvar_t  cg_optimizePrediction; -vmCvar_t  cg_projectileNudge; - -vmCvar_t  cg_voice; - -vmCvar_t  cg_emoticons; - -vmCvar_t  cg_chatTeamPrefix; - -vmCvar_t  cg_cuboidResizeAxis; -vmCvar_t  cg_cuboidPSQuality; -vmCvar_t  cg_cuboidInfoX; -vmCvar_t  cg_cuboidInfoY; - -vmCvar_t  cg_fuelInfoX; -vmCvar_t  cg_fuelInfoY; -vmCvar_t  cg_fuelInfoScale; - -typedef struct -{ -  vmCvar_t  *vmCvar; -  char      *cvarName; -  char      *defaultString; -  int       cvarFlags; -} cvarTable_t; - -static cvarTable_t cvarTable[ ] = -{ -  { &cg_drawGun, "cg_drawGun", "1", CVAR_ARCHIVE }, -  { &cg_viewsize, "cg_viewsize", "100", CVAR_ARCHIVE }, -  { &cg_stereoSeparation, "cg_stereoSeparation", "0.4", CVAR_ARCHIVE  }, -  { &cg_shadows, "cg_shadows", "1", CVAR_ARCHIVE  }, -  { &cg_draw2D, "cg_draw2D", "1", CVAR_ARCHIVE  }, -  { &cg_drawTimer, "cg_drawTimer", "1", CVAR_ARCHIVE  }, -  { &cg_drawClock, "cg_drawClock", "0", CVAR_ARCHIVE  }, -  { &cg_drawFPS, "cg_drawFPS", "1", CVAR_ARCHIVE  }, -  { &cg_drawDemoState, "cg_drawDemoState", "1", CVAR_ARCHIVE  }, -  { &cg_drawSnapshot, "cg_drawSnapshot", "0", CVAR_ARCHIVE  }, -  { &cg_drawChargeBar, "cg_drawChargeBar", "1", CVAR_ARCHIVE  }, -  { &cg_drawCrosshair, "cg_drawCrosshair", "2", CVAR_ARCHIVE }, -  { &cg_drawCrosshairNames, "cg_drawCrosshairNames", "1", CVAR_ARCHIVE }, -  { &cg_crosshairSize, "cg_crosshairSize", "1", CVAR_ARCHIVE }, -  { &cg_addMarks, "cg_marks", "1", CVAR_ARCHIVE }, -  { &cg_lagometer, "cg_lagometer", "0", CVAR_ARCHIVE }, -  { &cg_drawSpeed, "cg_drawSpeed", "0", CVAR_ARCHIVE }, -  { &cg_teslaTrailTime, "cg_teslaTrailTime", "250", CVAR_ARCHIVE  }, -  { &cg_gun_x, "cg_gunX", "0", CVAR_CHEAT }, -  { &cg_gun_y, "cg_gunY", "0", CVAR_CHEAT }, -  { &cg_gun_z, "cg_gunZ", "0", CVAR_CHEAT }, -  { &cg_centertime, "cg_centertime", "3", CVAR_CHEAT }, -  { &cg_runpitch, "cg_runpitch", "0.002", CVAR_ARCHIVE}, -  { &cg_runroll, "cg_runroll", "0.005", CVAR_ARCHIVE }, -  { &cg_swingSpeed, "cg_swingSpeed", "0.3", CVAR_CHEAT }, -  { &cg_animSpeed, "cg_animspeed", "1", CVAR_CHEAT }, -  { &cg_debugAnim, "cg_debuganim", "0", CVAR_CHEAT }, -  { &cg_debugPosition, "cg_debugposition", "0", CVAR_CHEAT }, -  { &cg_debugEvents, "cg_debugevents", "0", CVAR_CHEAT }, -  { &cg_errorDecay, "cg_errordecay", "100", 0 }, -  { &cg_nopredict, "cg_nopredict", "0", 0 }, -  { &cg_debugMove, "cg_debugMove", "0", 0 }, -  { &cg_noPlayerAnims, "cg_noplayeranims", "0", CVAR_CHEAT }, -  { &cg_showmiss, "cg_showmiss", "0", 0 }, -  { &cg_footsteps, "cg_footsteps", "1", CVAR_CHEAT }, -  { &cg_tracerChance, "cg_tracerchance", "0.4", CVAR_CHEAT }, -  { &cg_tracerWidth, "cg_tracerwidth", "1", CVAR_CHEAT }, -  { &cg_tracerLength, "cg_tracerlength", "100", CVAR_CHEAT }, -  { &cg_thirdPersonRange, "cg_thirdPersonRange", "75", CVAR_ARCHIVE }, -  { &cg_thirdPerson, "cg_thirdPerson", "0", CVAR_CHEAT }, -  { &cg_thirdPersonAngle, "cg_thirdPersonAngle", "0", CVAR_CHEAT }, -  { &cg_thirdPersonPitchFollow, "cg_thirdPersonPitchFollow", "0", 0 }, -  { &cg_thirdPersonShoulderViewMode, "cg_thirdPersonShoulderViewMode", "1", CVAR_ARCHIVE }, -  { &cg_staticDeathCam, "cg_staticDeathCam", "0", CVAR_ARCHIVE }, -  { &cg_stats, "cg_stats", "0", 0 }, -  { &cg_drawTeamOverlay, "cg_drawTeamOverlay", "1", CVAR_ARCHIVE }, -  { &cg_teamOverlaySortMode, "cg_teamOverlaySortMode", "1", CVAR_ARCHIVE }, -  { &cg_teamOverlayMaxPlayers, "cg_teamOverlayMaxPlayers", "8", CVAR_ARCHIVE }, -  { &cg_teamOverlayUserinfo, "teamoverlay", "1", CVAR_ARCHIVE|CVAR_USERINFO }, -  { &cg_teamChatsOnly, "cg_teamChatsOnly", "0", CVAR_ARCHIVE }, -  { &cg_noPrintDuplicate, "cg_noPrintDuplicate", "0", CVAR_ARCHIVE }, -  { &cg_noVoiceChats, "cg_noVoiceChats", "0", CVAR_ARCHIVE }, -  { &cg_noVoiceText, "cg_noVoiceText", "0", CVAR_ARCHIVE }, -  { &cg_drawSurfNormal, "cg_drawSurfNormal", "0", CVAR_CHEAT }, -  { &cg_drawBBOX, "cg_drawBBOX", "0", CVAR_CHEAT }, -  { &cg_wwSmoothTime, "cg_wwSmoothTime", "300", CVAR_ARCHIVE }, -  { NULL, "cg_wwFollow", "1", CVAR_ARCHIVE|CVAR_USERINFO }, -  { NULL, "cg_wwToggle", "1", CVAR_ARCHIVE|CVAR_USERINFO }, -  { NULL, "cg_disableBlueprintErrors", "0", CVAR_ARCHIVE|CVAR_USERINFO }, -  { &cg_stickySpec, "cg_stickySpec", "1", CVAR_ARCHIVE|CVAR_USERINFO }, -  { &cg_sprintToggle, "cg_sprintToggle", "0", CVAR_ARCHIVE|CVAR_USERINFO }, -  { &cg_unlagged, "cg_unlagged", "1", CVAR_ARCHIVE|CVAR_USERINFO }, -  { NULL, "cg_flySpeed", "600", 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 }, -  { &cg_lightFlare, "cg_lightFlare", "3", CVAR_ARCHIVE }, -  { &cg_debugParticles, "cg_debugParticles", "0", CVAR_CHEAT }, -  { &cg_debugTrails, "cg_debugTrails", "0", CVAR_CHEAT }, -  { &cg_debugPVS, "cg_debugPVS", "0", CVAR_CHEAT }, -  { &cg_disableWarningDialogs, "cg_disableWarningDialogs", "0", CVAR_ARCHIVE }, -  { &cg_disableUpgradeDialogs, "cg_disableUpgradeDialogs", "0", CVAR_ARCHIVE }, -  { &cg_disableBuildDialogs, "cg_disableBuildDialogs", "0", CVAR_ARCHIVE }, -  { &cg_disableCommandDialogs, "cg_disableCommandDialogs", "0", CVAR_ARCHIVE }, -  { &cg_disableScannerPlane, "cg_disableScannerPlane", "0", CVAR_ARCHIVE }, -  { &cg_tutorial, "cg_tutorial", "1", CVAR_ARCHIVE }, -  { &cg_hudFiles, "cg_hudFiles", "ui/hud.txt", CVAR_ARCHIVE}, -  { &cg_hudFilesEnable, "cg_hudFilesEnable", "0", CVAR_ARCHIVE}, -  { NULL, "cg_alienConfig", "", CVAR_ARCHIVE }, -  { NULL, "cg_humanConfig", "", CVAR_ARCHIVE }, -  { NULL, "cg_spectatorConfig", "", CVAR_ARCHIVE }, - -  { &cg_painBlendUpRate, "cg_painBlendUpRate", "10.0", 0 }, -  { &cg_painBlendDownRate, "cg_painBlendDownRate", "0.5", 0 }, -  { &cg_painBlendMax, "cg_painBlendMax", "0.7", 0 }, -  { &cg_painBlendScale, "cg_painBlendScale", "7.0", 0 }, -  { &cg_painBlendZoom, "cg_painBlendZoom", "0.65", 0 }, -   -  { &cg_debugVoices, "cg_debugVoices", "0", 0 }, - -  // communication cvars set by the cgame to be read by ui -  { &ui_currentClass, "ui_currentClass", "0", CVAR_ROM }, -  { &ui_carriage, "ui_carriage", "", CVAR_ROM }, -  { &ui_stages, "ui_stages", "0 0", CVAR_ROM }, -  { &ui_dialog, "ui_dialog", "Text not set", CVAR_ROM }, -  { &ui_voteActive, "ui_voteActive", "0", CVAR_ROM }, -  { &ui_humanTeamVoteActive, "ui_humanTeamVoteActive", "0", CVAR_ROM }, -  { &ui_alienTeamVoteActive, "ui_alienTeamVoteActive", "0", CVAR_ROM }, - -  { &cg_debugRandom, "cg_debugRandom", "0", 0 }, -   -  { &cg_optimizePrediction, "cg_optimizePrediction", "1", CVAR_ARCHIVE }, -  { &cg_projectileNudge, "cg_projectileNudge", "1", CVAR_ARCHIVE }, - -  // the following variables are created in other parts of the system, -  // but we also reference them here - -  { &cg_paused, "cl_paused", "0", CVAR_ROM }, -  { &cg_blood, "com_blood", "1", CVAR_ARCHIVE }, -  { &cg_synchronousClients, "g_synchronousClients", "0", 0 }, // communicated by systeminfo -  { &cg_timescaleFadeEnd, "cg_timescaleFadeEnd", "1", CVAR_CHEAT }, -  { &cg_timescaleFadeSpeed, "cg_timescaleFadeSpeed", "0", CVAR_CHEAT }, -  { &cg_timescale, "timescale", "1", 0}, -  { &cg_smoothClients, "cg_smoothClients", "0", CVAR_USERINFO | CVAR_ARCHIVE}, -  { &cg_cameraMode, "com_cameraMode", "0", CVAR_CHEAT}, - -  { &pmove_fixed, "pmove_fixed", "0", 0}, -  { &pmove_msec, "pmove_msec", "8", 0}, -  { &cg_noTaunt, "cg_noTaunt", "0", CVAR_ARCHIVE}, -   -  { &cg_voice, "voice", "default", CVAR_USERINFO|CVAR_ARCHIVE}, - -  { &cg_emoticons, "cg_emoticons", "1", CVAR_LATCH|CVAR_ARCHIVE}, - -  { &cg_chatTeamPrefix, "cg_chatTeamPrefix", "1", CVAR_ARCHIVE}, -   -  { &cg_cuboidResizeAxis, "cg_cuboidResizeAxis", "2", 0}, -  { &cg_cuboidPSQuality, "cg_cuboidPSQuality", "3", CVAR_ARCHIVE}, -   -  { &cg_cuboidInfoX, "cg_cuboidInfoX" ,"0", CVAR_ARCHIVE }, -  { &cg_cuboidInfoY, "cg_cuboidInfoY" ,"150", CVAR_ARCHIVE }, -   -  { &cg_modTutorial, "cg_modTutorial", "1", CVAR_ARCHIVE }, -  { &cg_modTutorialReference, "cg_modTutorialReference", "0", CVAR_ARCHIVE }, -  { &cg_lastModVersion, "cg_lastModVersion", "0", CVAR_ARCHIVE }, -   -  { &cg_fuelInfoX, "cg_fuelInfoX" ,"0", CVAR_ARCHIVE }, -  { &cg_fuelInfoY, "cg_fuelInfoY" ,"150", CVAR_ARCHIVE }, -  { &cg_fuelInfoScale, "cg_fuelInfoScale" ,"0.5", CVAR_ARCHIVE }   -}; - -static int   cvarTableSize = sizeof( cvarTable ) / sizeof( cvarTable[0] ); - -/* -================= -CG_RegisterCvars -================= -*/ -void CG_RegisterCvars( void ) -{ -  int         i; -  cvarTable_t *cv; -  char        var[ MAX_TOKEN_CHARS ]; - -  for( i = 0, cv = cvarTable; i < cvarTableSize; i++, cv++ ) -  { -    trap_Cvar_Register( cv->vmCvar, cv->cvarName, -      cv->defaultString, cv->cvarFlags ); -  } - -  // see if we are also running the server on this machine -  trap_Cvar_VariableStringBuffer( "sv_running", var, sizeof( var ) ); -  cgs.localServer = atoi( var ); -} - - -/* -=============== -CG_SetUIVars - -Set some cvars used by the UI -=============== -*/ -static void CG_SetUIVars( void ) -{ -  int   i; -  char  carriageCvar[ MAX_TOKEN_CHARS ]; - -  if( !cg.snap ) -    return; - -  *carriageCvar = 0; - -  //determine what the player is carrying -  for( i = WP_NONE + 1; i < WP_NUM_WEAPONS; i++ ) -  { -    if( BG_InventoryContainsWeapon( i, cg.snap->ps.stats ) && -        BG_Weapon( i )->purchasable ) -      strcat( carriageCvar, va( "W%d ", i ) ); -  } -  for( i = UP_NONE + 1; i < UP_NUM_UPGRADES; i++ ) -  { -    if( BG_InventoryContainsUpgrade( i, cg.snap->ps.stats ) && -        BG_Upgrade( i )->purchasable ) -      strcat( carriageCvar, va( "U%d ", i ) ); -  } -  strcat( carriageCvar, "$" ); - -  trap_Cvar_Set( "ui_carriage", carriageCvar ); - -  trap_Cvar_Set( "ui_stages", va( "%d %d", cgs.alienStage, cgs.humanStage ) ); -} - -/* -================= -CG_UpdateCvars -================= -*/ -void CG_UpdateCvars( void ) -{ -  int         i; -  cvarTable_t *cv; - -  for( i = 0, cv = cvarTable; i < cvarTableSize; i++, cv++ ) -    if( cv->vmCvar ) -      trap_Cvar_Update( cv->vmCvar ); - -  // check for modications here - -  CG_SetUIVars( ); - -} - - -int CG_CrosshairPlayer( void ) -{ -  if( cg.time > ( cg.crosshairClientTime + 1000 ) ) -    return -1; - -  return cg.crosshairClientNum; -} - - -int CG_LastAttacker( void ) -{ -  if( !cg.attackerTime ) -    return -1; - -  return cg.snap->ps.persistant[ PERS_ATTACKER ]; -} - - -/* -================= -CG_RemoveNotifyLine -================= -*/ -void CG_RemoveNotifyLine( void ) -{ -  int i, offset, totalLength; - -  if( cg.numConsoleLines == 0 ) -    return; - -  offset = cg.consoleLines[ 0 ].length; -  totalLength = strlen( cg.consoleText ) - offset; - -  //slide up consoleText -  for( i = 0; i <= totalLength; i++ ) -    cg.consoleText[ i ] = cg.consoleText[ i + offset ]; - -  //pop up the first consoleLine -  for( i = 0; i < cg.numConsoleLines; i++ ) -    cg.consoleLines[ i ] = cg.consoleLines[ i + 1 ]; - -  cg.numConsoleLines--; -} - -/* -================= -CG_AddNotifyText -================= -*/ -void CG_AddNotifyText( void ) -{ -  char buffer[ BIG_INFO_STRING ]; -  int bufferLen, textLen; - -  trap_LiteralArgs( buffer, BIG_INFO_STRING ); - -  if( !buffer[ 0 ] ) -  { -    cg.consoleText[ 0 ] = '\0'; -    cg.numConsoleLines = 0; -    return; -  } - -  bufferLen = strlen( buffer ); -  textLen = strlen( cg.consoleText ); -   -  // Ignore console messages that were just printed -  if( cg_noPrintDuplicate.integer && textLen >= bufferLen && -      !strcmp( cg.consoleText + textLen - bufferLen, buffer ) ) -    return; -       -  if( cg.numConsoleLines == MAX_CONSOLE_LINES ) -    CG_RemoveNotifyLine( ); - -  Q_strcat( cg.consoleText, MAX_CONSOLE_TEXT, buffer ); -  cg.consoleLines[ cg.numConsoleLines ].time = cg.time; -  cg.consoleLines[ cg.numConsoleLines ].length = bufferLen; -  cg.numConsoleLines++; -} - -void QDECL CG_Printf( const char *msg, ... ) -{ -  va_list argptr; -  char    text[ 1024 ]; - -  va_start( argptr, msg ); -  Q_vsnprintf( text, sizeof( text ), msg, argptr ); -  va_end( argptr ); - -  trap_Print( text ); -} - -void QDECL CG_Error( const char *msg, ... ) -{ -  va_list argptr; -  char    text[ 1024 ]; - -  va_start( argptr, msg ); -  Q_vsnprintf( text, sizeof( text ), msg, argptr ); -  va_end( argptr ); - -  trap_Error( text ); -} - -void QDECL Com_Error( int level, const char *error, ... ) -{ -  va_list argptr; -  char    text[1024]; - -  va_start( argptr, error ); -  Q_vsnprintf( text, sizeof( text ), error, argptr ); -  va_end( argptr ); - -  CG_Error( "%s", text ); -} - -void QDECL Com_Printf( const char *msg, ... ) { -  va_list   argptr; -  char    text[1024]; - -  va_start( argptr, msg ); -  Q_vsnprintf( text, sizeof( text ), msg, argptr ); -  va_end( argptr ); - -  CG_Printf ("%s", text); -} - - - -/* -================ -CG_Argv -================ -*/ -const char *CG_Argv( int arg ) -{ -  static char buffer[ MAX_STRING_CHARS ]; - -  trap_Argv( arg, buffer, sizeof( buffer ) ); - -  return buffer; -} - - -//======================================================================== - -/* -================= -CG_FileExists - -Test if a specific file exists or not -================= -*/ -qboolean CG_FileExists( char *filename ) -{ -  return trap_FS_FOpenFile( filename, NULL, FS_READ ); -} - -/* -================= -CG_RegisterSounds - -called during a precache command -================= -*/ -static void CG_RegisterSounds( void ) -{ -  int         i; -  char        name[ MAX_QPATH ]; -  const char  *soundName; -  const cuboidAttributes_t *cuboid; - -  cgs.media.alienStageTransition  = trap_S_RegisterSound( "sound/announcements/overmindevolved.wav", qtrue ); -  cgs.media.humanStageTransition  = trap_S_RegisterSound( "sound/announcements/reinforcement.wav", qtrue ); - -  cgs.media.alienOvermindAttack   = trap_S_RegisterSound( "sound/announcements/overmindattack.wav", qtrue ); -  cgs.media.alienOvermindDying    = trap_S_RegisterSound( "sound/announcements/overminddying.wav", qtrue ); -  cgs.media.alienOvermindSpawns   = trap_S_RegisterSound( "sound/announcements/overmindspawns.wav", qtrue ); - -  cgs.media.alienL1Grab           = trap_S_RegisterSound( "sound/player/level1/grab.wav", qtrue ); -  cgs.media.alienL4ChargePrepare  = trap_S_RegisterSound( "sound/player/level4/charge_prepare.wav", qtrue ); -  cgs.media.alienL4ChargeStart    = trap_S_RegisterSound( "sound/player/level4/charge_start.wav", qtrue ); - -  cgs.media.tracerSound           = trap_S_RegisterSound( "sound/weapons/tracer.wav", qfalse ); -  cgs.media.selectSound           = trap_S_RegisterSound( "sound/weapons/change.wav", qfalse ); -  cgs.media.turretSpinupSound     = trap_S_RegisterSound( "sound/buildables/mgturret/spinup.wav", qfalse ); -  cgs.media.weaponEmptyClick      = trap_S_RegisterSound( "sound/weapons/click.wav", qfalse ); - -  cgs.media.talkSound             = trap_S_RegisterSound( "sound/misc/talk.wav", qfalse ); -  cgs.media.alienTalkSound        = trap_S_RegisterSound( "sound/misc/alien_talk.wav", qfalse ); -  cgs.media.humanTalkSound        = trap_S_RegisterSound( "sound/misc/human_talk.wav", qfalse ); -  cgs.media.landSound             = trap_S_RegisterSound( "sound/player/land1.wav", qfalse ); - -  cgs.media.watrInSound           = trap_S_RegisterSound( "sound/player/watr_in.wav", qfalse ); -  cgs.media.watrOutSound          = trap_S_RegisterSound( "sound/player/watr_out.wav", qfalse ); -  cgs.media.watrUnSound           = trap_S_RegisterSound( "sound/player/watr_un.wav", qfalse ); - -  cgs.media.disconnectSound       = trap_S_RegisterSound( "sound/misc/disconnect.wav", qfalse ); - -  for( i = 0; i < 4; i++ ) -  { -    Com_sprintf( name, sizeof( name ), "sound/player/footsteps/step%i.wav", i + 1 ); -    cgs.media.footsteps[ FOOTSTEP_NORMAL ][ i ] = trap_S_RegisterSound( name, qfalse ); - -    Com_sprintf( name, sizeof( name ), "sound/player/footsteps/flesh%i.wav", i + 1 ); -    cgs.media.footsteps[ FOOTSTEP_FLESH ][ i ] = trap_S_RegisterSound( name, qfalse ); - -    Com_sprintf( name, sizeof( name ), "sound/player/footsteps/splash%i.wav", i + 1 ); -    cgs.media.footsteps[ FOOTSTEP_SPLASH ][ i ] = trap_S_RegisterSound( name, qfalse ); - -    Com_sprintf( name, sizeof( name ), "sound/player/footsteps/clank%i.wav", i + 1 ); -    cgs.media.footsteps[ FOOTSTEP_METAL ][ i ] = trap_S_RegisterSound( name, qfalse ); -  } - -  for( i = 1 ; i < MAX_SOUNDS ; i++ ) -  { -    soundName = CG_ConfigString( CS_SOUNDS + i ); - -    if( !soundName[ 0 ] ) -      break; - -    if( soundName[ 0 ] == '*' ) -      continue; // custom sound - -    cgs.gameSounds[ i ] = trap_S_RegisterSound( soundName, qfalse ); -  } - -  cgs.media.jetpackDescendSound             = trap_S_RegisterSound( "sound/upgrades/jetpack/low.wav", qfalse ); -  cgs.media.jetpackIdleSound                = trap_S_RegisterSound( "sound/upgrades/jetpack/idle.wav", qfalse ); -  cgs.media.jetpackAscendSound              = trap_S_RegisterSound( "sound/upgrades/jetpack/hi.wav", qfalse ); -  cgs.media.jetpackDescendDeactivateSound   = trap_S_RegisterSound( "sound/upgrades/jetpack/low_off.wav", qfalse ); -  cgs.media.jetpackIdleDeactivateSound      = trap_S_RegisterSound( "sound/upgrades/jetpack/idle_off.wav", qfalse ); -  cgs.media.jetpackAscendDeactivateSound    = trap_S_RegisterSound( "sound/upgrades/jetpack/hi_off.wav", qfalse ); -  cgs.media.jetpackJumpSound                = trap_S_RegisterSound( "sound/upgrades/jetpack/jump.wav", qfalse ); -  cgs.media.jetpackLowFuelSound             = trap_S_RegisterSound( "sound/upgrades/jetpack/lowfuel.wav", qfalse ); -  cgs.media.jetpackNoJumpFuelSound          = trap_S_RegisterSound( "sound/upgrades/jetpack/nojumpfuel.wav", qfalse ); -  cgs.media.jetpackRefuelSound              = trap_S_RegisterSound( "sound/upgrades/jetpack/refuel.wav", qfalse ); -   -  cgs.media.medkitUseSound          = trap_S_RegisterSound( "sound/upgrades/medkit/medkit.wav", qfalse ); - -  cgs.media.alienEvolveSound        = trap_S_RegisterSound( "sound/player/alienevolve.wav", qfalse ); - -  cgs.media.alienBuildableExplosion = trap_S_RegisterSound( "sound/buildables/alien/explosion.wav", qfalse ); -  cgs.media.alienBuildableDamage    = trap_S_RegisterSound( "sound/buildables/alien/damage.wav", qfalse ); -  cgs.media.alienBuildablePrebuild  = trap_S_RegisterSound( "sound/buildables/alien/prebuild.wav", qfalse ); - -  cgs.media.humanBuildableExplosion = trap_S_RegisterSound( "sound/buildables/human/explosion.wav", qfalse ); -  cgs.media.humanBuildablePrebuild  = trap_S_RegisterSound( "sound/buildables/human/prebuild.wav", qfalse ); - -  for( i = 0; i < 4; i++ ) -    cgs.media.humanBuildableDamage[ i ] = trap_S_RegisterSound( -        va( "sound/buildables/human/damage%d.wav", i ), qfalse ); - -  cgs.media.hardBounceSound1        = trap_S_RegisterSound( "sound/misc/hard_bounce1.wav", qfalse ); -  cgs.media.hardBounceSound2        = trap_S_RegisterSound( "sound/misc/hard_bounce2.wav", qfalse ); - -  cgs.media.repeaterUseSound        = trap_S_RegisterSound( "sound/buildables/repeater/use.wav", qfalse ); - -  cgs.media.buildableRepairSound    = trap_S_RegisterSound( "sound/buildables/human/repair.wav", qfalse ); -  cgs.media.buildableRepairedSound  = trap_S_RegisterSound( "sound/buildables/human/repaired.wav", qfalse ); - -  cgs.media.lCannonWarningSound     = trap_S_RegisterSound( "models/weapons/lcannon/warning.wav", qfalse ); -  cgs.media.lCannonWarningSound2    = trap_S_RegisterSound( "models/weapons/lcannon/warning2.wav", qfalse ); -   -  cgs.media.cuboidErrorSound        = trap_S_RegisterSound( "sound/cuboid/error.wav", qfalse ); -  cg.lastCuboidError                = cg.time; -  cgs.media.cuboidResizeSoundA      = trap_S_RegisterSound( "sound/cuboid/resizea.wav", qfalse ); -  cgs.media.cuboidResizeSoundB      = trap_S_RegisterSound( "sound/cuboid/resizeb.wav", qfalse ); -  cgs.media.cuboidRotateSound       = trap_S_RegisterSound( "sound/cuboid/rotate.wav", qfalse ); -  cgs.media.cuboidAxisChangeSound   = trap_S_RegisterSound( "sound/cuboid/axischange.wav", qfalse ); -} - - -//=================================================================================== - -/* -================= -CG_RegisterGraphics - -This function may execute for a couple of minutes with a slow disk. -================= -*/ -static void CG_RegisterGraphics( void ) -{ -  int         i,j; -  const cuboidAttributes_t *cuboid; -   -  static char *sb_nums[ 11 ] = -  { -    "gfx/2d/numbers/zero_32b", -    "gfx/2d/numbers/one_32b", -    "gfx/2d/numbers/two_32b", -    "gfx/2d/numbers/three_32b", -    "gfx/2d/numbers/four_32b", -    "gfx/2d/numbers/five_32b", -    "gfx/2d/numbers/six_32b", -    "gfx/2d/numbers/seven_32b", -    "gfx/2d/numbers/eight_32b", -    "gfx/2d/numbers/nine_32b", -    "gfx/2d/numbers/minus_32b", -  }; -  static char *buildWeaponTimerPieShaders[ 8 ] = -  { -    "ui/assets/neutral/1_5pie", -    "ui/assets/neutral/3_0pie", -    "ui/assets/neutral/4_5pie", -    "ui/assets/neutral/6_0pie", -    "ui/assets/neutral/7_5pie", -    "ui/assets/neutral/9_0pie", -    "ui/assets/neutral/10_5pie", -    "ui/assets/neutral/12_0pie", -  }; - -  // clear any references to old media -  memset( &cg.refdef, 0, sizeof( cg.refdef ) ); -  trap_R_ClearScene( ); - -  trap_R_LoadWorldMap( cgs.mapname ); -  CG_UpdateMediaFraction( 0.66f ); - -  for( i = 0; i < 11; i++ ) -    cgs.media.numberShaders[ i ] = trap_R_RegisterShader( sb_nums[ i ] ); - -  cgs.media.viewBloodShader           = trap_R_RegisterShader( "gfx/damage/fullscreen_painblend" ); - -  cgs.media.connectionShader          = trap_R_RegisterShader( "gfx/2d/net" ); - -  cgs.media.creepShader               = trap_R_RegisterShader( "creep" ); - -  cgs.media.scannerBlipShader         = trap_R_RegisterShader( "gfx/2d/blip" ); -  cgs.media.scannerLineShader         = trap_R_RegisterShader( "gfx/2d/stalk" ); - -  cgs.media.teamOverlayShader         = trap_R_RegisterShader( "gfx/2d/teamoverlay" ); - -  cgs.media.tracerShader              = trap_R_RegisterShader( "gfx/misc/tracer" ); - -  cgs.media.backTileShader            = trap_R_RegisterShader( "console" ); - - -  // building shaders -  cgs.media.greenBuildShader          = trap_R_RegisterShader("gfx/misc/greenbuild" ); -  cgs.media.redBuildShader            = trap_R_RegisterShader("gfx/misc/redbuild" ); -  cgs.media.humanSpawningShader       = trap_R_RegisterShader("models/buildables/telenode/rep_cyl" ); -   -  for( i = 0; i < CUBOID_CRACK_TEXTURES - 1; i++ ) -    cgs.media.cuboidCracks[ i ] = trap_R_RegisterShader( va( "models/cuboid/cracks_%i", i ) ); -   -  cgs.media.cuboidModel               = trap_R_RegisterModel( "models/cuboid/cuboid.md3" ); -  cgs.media.cuboidRedBuildShader      = trap_R_RegisterShader( "gfx/cuboid/build_red" ); -  cgs.media.cuboidYellowBuildShader   = trap_R_RegisterShader( "gfx/cuboid/build_yellow" ); -  cgs.media.cuboidGreenBuildShader    = trap_R_RegisterShader( "gfx/cuboid/build_green" ); -  cgs.media.cuboidAxis                = trap_R_RegisterShader( "gfx/cuboid/build_axis" ); -  cgs.media.cuboidAlienPrebuild       = trap_R_RegisterShader( "gfx/cuboid/prebuild_alien" ); -  -  cg.forbidCuboids=qfalse; -  cg.latestCBNumber=0; -   -  for( i = 0; i < 15; i++ ) -    cgs.media.splashLogo[ i ] = trap_R_RegisterShader( va( "cuboid/logo_%i.tga", i ) ); -  cgs.media.splashLeft                = trap_R_RegisterShader( "cuboid/logo_left.tga" ); -  cgs.media.splashRight               = trap_R_RegisterShader( "cuboid/logo_right.tga" ); -   -   -  for( i = 0; i < 8; i++ ) -    cgs.media.buildWeaponTimerPie[ i ] = trap_R_RegisterShader( buildWeaponTimerPieShaders[ i ] ); - -  // player health cross shaders -  cgs.media.healthCross               = trap_R_RegisterShader( "ui/assets/neutral/cross.tga" ); -  cgs.media.healthCross2X             = trap_R_RegisterShader( "ui/assets/neutral/cross2.tga" ); -  cgs.media.healthCross3X             = trap_R_RegisterShader( "ui/assets/neutral/cross3.tga" ); -  cgs.media.healthCrossMedkit         = trap_R_RegisterShader( "ui/assets/neutral/cross_medkit.tga" ); -  cgs.media.healthCrossPoisoned       = trap_R_RegisterShader( "ui/assets/neutral/cross_poison.tga" ); -   -  cgs.media.upgradeClassIconShader    = trap_R_RegisterShader( "icons/icona_upgrade.tga" ); -   -  cgs.media.balloonShader             = trap_R_RegisterShader( "gfx/sprites/chatballoon" ); - -  cgs.media.disconnectPS              = CG_RegisterParticleSystem( "disconnectPS" ); - -  CG_UpdateMediaFraction( 0.7f ); - -  memset( cg_weapons, 0, sizeof( cg_weapons ) ); -  memset( cg_upgrades, 0, sizeof( cg_upgrades ) ); - -  cgs.media.shadowMarkShader          = trap_R_RegisterShader( "gfx/marks/shadow" ); -  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" ); - -  cgs.media.jetPackDescendPS          = CG_RegisterParticleSystem( "jetPackDescendPS" ); -  cgs.media.jetPackHoverPS            = CG_RegisterParticleSystem( "jetPackHoverPS" ); -  cgs.media.jetPackAscendPS           = CG_RegisterParticleSystem( "jetPackAscendPS" ); - -  cgs.media.humanBuildableDamagedPS   = CG_RegisterParticleSystem( "humanBuildableDamagedPS" ); -  cgs.media.alienBuildableDamagedPS   = CG_RegisterParticleSystem( "alienBuildableDamagedPS" ); -  cgs.media.humanBuildableDestroyedPS = CG_RegisterParticleSystem( "humanBuildableDestroyedPS" ); -  cgs.media.alienBuildableDestroyedPS = CG_RegisterParticleSystem( "alienBuildableDestroyedPS" ); - -  cgs.media.humanBuildableBleedPS     = CG_RegisterParticleSystem( "humanBuildableBleedPS");   -  cgs.media.alienBuildableBleedPS     = CG_RegisterParticleSystem( "alienBuildableBleedPS" ); - -  cgs.media.alienBleedPS              = CG_RegisterParticleSystem( "alienBleedPS" ); -  cgs.media.humanBleedPS              = CG_RegisterParticleSystem( "humanBleedPS" ); - -  CG_BuildableStatusParse( "ui/assets/human/buildstat.cfg", &cgs.humanBuildStat ); -  CG_BuildableStatusParse( "ui/assets/alien/buildstat.cfg", &cgs.alienBuildStat ); -  -  // register the inline models -  cgs.numInlineModels = trap_CM_NumInlineModels( ); - -  for( i = 1; i < cgs.numInlineModels; i++ ) -  { -    char    name[ 10 ]; -    vec3_t  mins, maxs; -    int     j; - -    Com_sprintf( name, sizeof( name ), "*%i", i ); - -    cgs.inlineDrawModel[ i ] = trap_R_RegisterModel( name ); -    trap_R_ModelBounds( cgs.inlineDrawModel[ i ], mins, maxs ); - -    for( j = 0 ; j < 3 ; j++ ) -      cgs.inlineModelMidpoints[ i ][ j ] = mins[ j ] + 0.5 * ( maxs[ j ] - mins[ j ] ); -  } - -  // register all the server specified models -  for( i = 1; i < MAX_MODELS; i++ ) -  { -    const char *modelName; - -    modelName = CG_ConfigString( CS_MODELS + i ); - -    if( !modelName[ 0 ] ) -      break; - -    cgs.gameModels[ i ] = trap_R_RegisterModel( modelName ); -  } - -  CG_UpdateMediaFraction( 0.8f ); - -  // register all the server specified shaders -  for( i = 1; i < MAX_GAME_SHADERS; i++ ) -  { -    const char *shaderName; - -    shaderName = CG_ConfigString( CS_SHADERS + i ); - -    if( !shaderName[ 0 ] ) -      break; - -    cgs.gameShaders[ i ] = trap_R_RegisterShader( shaderName ); -  } - -  CG_UpdateMediaFraction( 0.9f ); - -  // register all the server specified particle systems -  for( i = 1; i < MAX_GAME_PARTICLE_SYSTEMS; i++ ) -  { -    const char *psName; - -    psName = CG_ConfigString( CS_PARTICLE_SYSTEMS + i ); - -    if( !psName[ 0 ] ) -      break; - -    cgs.gameParticleSystems[ i ] = CG_RegisterParticleSystem( (char *)psName ); -  } -} - - -/* -======================= -CG_BuildSpectatorString - -======================= -*/ -void CG_BuildSpectatorString( void ) -{ -  int i; - -  cg.spectatorList[ 0 ] = 0; - -  for( i = 0; i < MAX_CLIENTS; i++ ) -  { -    if( cgs.clientinfo[ i ].infoValid && cgs.clientinfo[ i ].team == TEAM_NONE ) -    { -      Q_strcat( cg.spectatorList, sizeof( cg.spectatorList ), -          va( S_COLOR_WHITE "%s     ", cgs.clientinfo[ i ].name ) ); -    } -  } -} - - - -/* -=================== -CG_RegisterClients - -=================== -*/ -static void CG_RegisterClients( void ) -{ -  int   i; - -  cg.charModelFraction = 0.0f; - -  //precache all the models/sounds/etc -  for( i = PCL_NONE + 1; i < PCL_NUM_CLASSES;  i++ ) -  { -    CG_PrecacheClientInfo( i, BG_ClassConfig( i )->modelName, -                              BG_ClassConfig( i )->skinName ); - -    cg.charModelFraction = (float)i / (float)PCL_NUM_CLASSES; -    trap_UpdateScreen( ); -  } - -  cgs.media.larmourHeadSkin    = trap_R_RegisterSkin( "models/players/human_base/head_light.skin" ); -  cgs.media.larmourMk2HeadSkin = trap_R_RegisterSkin( "models/players/human_base/head_light_mk2.skin" ); -  cgs.media.larmourLegsSkin    = trap_R_RegisterSkin( "models/players/human_base/lower_light.skin" ); -  cgs.media.larmourTorsoSkin   = trap_R_RegisterSkin( "models/players/human_base/upper_light.skin" ); - -  cgs.media.jetpackModel       = trap_R_RegisterModel( "models/players/human_base/jetpack.md3" ); -  cgs.media.jetpackFlashModel  = trap_R_RegisterModel( "models/players/human_base/jetpack_flash.md3" ); -  cgs.media.battpackModel      = trap_R_RegisterModel( "models/players/human_base/battpack.md3" ); - -  cg.charModelFraction = 1.0f; -  trap_UpdateScreen( ); - -  //load all the clientinfos of clients already connected to the server -  for( i = 0; i < MAX_CLIENTS; i++ ) -  { -    const char  *clientInfo; - -    clientInfo = CG_ConfigString( CS_PLAYERS + i ); -    if( !clientInfo[ 0 ] ) -      continue; - -    CG_NewClientInfo( i ); -  } - -  CG_BuildSpectatorString( ); -} - -//=========================================================================== - -/* -================= -CG_ConfigString -================= -*/ -const char *CG_ConfigString( int index ) -{ -  if( index < 0 || index >= MAX_CONFIGSTRINGS ) -    CG_Error( "CG_ConfigString: bad index: %i", index ); - -  return cgs.gameState.stringData + cgs.gameState.stringOffsets[ index ]; -} - -//================================================================== - -/* -====================== -CG_StartMusic - -====================== -*/ -void CG_StartMusic( void ) -{ -  char  *s; -  char  parm1[ MAX_QPATH ], parm2[ MAX_QPATH ]; - -  // start the background music -  s = (char *)CG_ConfigString( CS_MUSIC ); -  Q_strncpyz( parm1, COM_Parse( &s ), sizeof( parm1 ) ); -  Q_strncpyz( parm2, COM_Parse( &s ), sizeof( parm2 ) ); - -  trap_S_StartBackgroundTrack( parm1, parm2 ); -} - -/* -====================== -CG_PlayerCount -====================== -*/ -int CG_PlayerCount( void ) -{ -  int i, count = 0; - -  CG_RequestScores( ); - -  for( i = 0; i < cg.numScores; i++ ) -  { -    if( cg.scores[ i ].team == TEAM_ALIENS || -        cg.scores[ i ].team == TEAM_HUMANS ) -      count++; -  } - -  return count; -} - -// -// ============================== -// new hud stuff ( mission pack ) -// ============================== -// -char *CG_GetMenuBuffer( const char *filename ) -{ -  int           len; -  fileHandle_t  f; -  static char   buf[ MAX_MENUFILE ]; - -  len = trap_FS_FOpenFile( filename, &f, FS_READ ); - -  if( !f ) -  { -    trap_Print( va( S_COLOR_RED "menu file not found: %s, using default\n", filename ) ); -    return NULL; -  } - -  if( len >= MAX_MENUFILE ) -  { -    trap_Print( va( S_COLOR_RED "menu file too large: %s is %i, max allowed is %i", -                    filename, len, MAX_MENUFILE ) ); -    trap_FS_FCloseFile( f ); -    return NULL; -  } - -  trap_FS_Read( buf, len, f ); -  buf[len] = 0; -  trap_FS_FCloseFile( f ); - -  return buf; -} - -qboolean CG_Asset_Parse( int handle ) -{ -  pc_token_t token; -  const char *tempStr; - -  if( !trap_Parse_ReadToken( handle, &token ) ) -    return qfalse; - -  if( Q_stricmp( token.string, "{" ) != 0 ) -    return qfalse; - -  while( 1 ) -  { -    if( !trap_Parse_ReadToken( handle, &token ) ) -      return qfalse; - -    if( Q_stricmp( token.string, "}" ) == 0 ) -      return qtrue; - -    // font -    if( Q_stricmp( token.string, "font" ) == 0 ) -    { -      int pointSize; - -      if( !PC_String_Parse( handle, &tempStr ) || !PC_Int_Parse( handle, &pointSize ) ) -        return qfalse; - -      cgDC.registerFont( tempStr, pointSize, &cgDC.Assets.textFont ); -      continue; -    } - -    // smallFont -    if( Q_stricmp( token.string, "smallFont" ) == 0 ) -    { -      int pointSize; - -      if( !PC_String_Parse( handle, &tempStr ) || !PC_Int_Parse( handle, &pointSize ) ) -        return qfalse; - -      cgDC.registerFont( tempStr, pointSize, &cgDC.Assets.smallFont ); -      continue; -    } - -    // font -    if( Q_stricmp( token.string, "bigfont" ) == 0 ) -    { -      int pointSize; - -      if( !PC_String_Parse( handle, &tempStr ) || !PC_Int_Parse( handle, &pointSize ) ) -        return qfalse; - -      cgDC.registerFont( tempStr, pointSize, &cgDC.Assets.bigFont ); -      continue; -    } - -    // gradientbar -    if( Q_stricmp( token.string, "gradientbar" ) == 0 ) -    { -      if( !PC_String_Parse( handle, &tempStr ) ) -        return qfalse; - -      cgDC.Assets.gradientBar = trap_R_RegisterShaderNoMip( tempStr ); -      continue; -    } - -    // enterMenuSound -    if( Q_stricmp( token.string, "menuEnterSound" ) == 0 ) -    { -      if( !PC_String_Parse( handle, &tempStr ) ) -        return qfalse; - -      cgDC.Assets.menuEnterSound = trap_S_RegisterSound( tempStr, qfalse ); -      continue; -    } - -    // exitMenuSound -    if( Q_stricmp( token.string, "menuExitSound" ) == 0 ) -    { -      if( !PC_String_Parse( handle, &tempStr ) ) -        return qfalse; - -      cgDC.Assets.menuExitSound = trap_S_RegisterSound( tempStr, qfalse ); -      continue; -    } - -    // itemFocusSound -    if( Q_stricmp( token.string, "itemFocusSound" ) == 0 ) -    { -      if( !PC_String_Parse( handle, &tempStr ) ) -        return qfalse; - -      cgDC.Assets.itemFocusSound = trap_S_RegisterSound( tempStr, qfalse ); -      continue; -    } - -    // menuBuzzSound -    if( Q_stricmp( token.string, "menuBuzzSound" ) == 0 ) -    { -      if( !PC_String_Parse( handle, &tempStr ) ) -        return qfalse; - -      cgDC.Assets.menuBuzzSound = trap_S_RegisterSound( tempStr, qfalse ); -      continue; -    } - -    if( Q_stricmp( token.string, "cursor" ) == 0 ) -    { -      if( !PC_String_Parse( handle, &cgDC.Assets.cursorStr ) ) -        return qfalse; - -      cgDC.Assets.cursor = trap_R_RegisterShaderNoMip( cgDC.Assets.cursorStr ); -      continue; -    } - -    if( Q_stricmp( token.string, "fadeClamp" ) == 0 ) -    { -      if( !PC_Float_Parse( handle, &cgDC.Assets.fadeClamp ) ) -        return qfalse; - -      continue; -    } - -    if( Q_stricmp( token.string, "fadeCycle" ) == 0 ) -    { -      if( !PC_Int_Parse( handle, &cgDC.Assets.fadeCycle ) ) -        return qfalse; - -      continue; -    } - -    if( Q_stricmp( token.string, "fadeAmount" ) == 0 ) -    { -      if( !PC_Float_Parse( handle, &cgDC.Assets.fadeAmount ) ) -        return qfalse; - -      continue; -    } - -    if( Q_stricmp( token.string, "shadowX" ) == 0 ) -    { -      if( !PC_Float_Parse( handle, &cgDC.Assets.shadowX ) ) -        return qfalse; - -      continue; -    } - -    if( Q_stricmp( token.string, "shadowY" ) == 0 ) -    { -      if( !PC_Float_Parse( handle, &cgDC.Assets.shadowY ) ) -        return qfalse; - -      continue; -    } - -    if( Q_stricmp( token.string, "shadowColor" ) == 0 ) -    { -      if( !PC_Color_Parse( handle, &cgDC.Assets.shadowColor ) ) -        return qfalse; - -      cgDC.Assets.shadowFadeClamp = cgDC.Assets.shadowColor[ 3 ]; -      continue; -    } -  } - -  return qfalse; -} - -void CG_ParseMenu( const char *menuFile ) -{ -  pc_token_t  token; -  int         handle; - -  handle = trap_Parse_LoadSource( menuFile ); - -  if( !handle ) -    handle = trap_Parse_LoadSource( "ui/testhud.menu" ); - -  if( !handle ) -    return; - -  while( 1 ) -  { -    if( !trap_Parse_ReadToken( handle, &token ) ) -      break; - -    //if ( Q_stricmp( token, "{" ) ) { -    //  Com_Printf( "Missing { in menu file\n" ); -    //  break; -    //} - -    //if ( menuCount == MAX_MENUS ) { -    //  Com_Printf( "Too many menus!\n" ); -    //  break; -    //} - -    if( token.string[ 0 ] == '}' ) -      break; - -    if( Q_stricmp( token.string, "assetGlobalDef" ) == 0 ) -    { -      if( CG_Asset_Parse( handle ) ) -        continue; -      else -        break; -    } - - -    if( Q_stricmp( token.string, "menudef" ) == 0 ) -    { -      // start a new menu -      Menu_New( handle ); -    } -  } - -  trap_Parse_FreeSource( handle ); -} - -qboolean CG_Load_Menu( char **p ) -{ -  char *token; - -  token = COM_ParseExt( p, qtrue ); - -  if( token[ 0 ] != '{' ) -    return qfalse; - -  while( 1 ) -  { -    token = COM_ParseExt( p, qtrue ); - -    if( Q_stricmp( token, "}" ) == 0 ) -      return qtrue; - -    if( !token || token[ 0 ] == 0 ) -      return qfalse; - -    CG_ParseMenu( token ); -  } -  return qfalse; -} - - - -void CG_LoadMenus( const char *menuFile ) -{ -  char          *token; -  char          *p; -  int           len, start; -  fileHandle_t  f; -  static char   buf[ MAX_MENUDEFFILE ]; - -  start = trap_Milliseconds( ); - -  len = trap_FS_FOpenFile( menuFile, &f, FS_READ ); - -  if( !f ) -  { -    trap_Error( va( S_COLOR_YELLOW "menu file not found: %s, using default\n", menuFile ) ); -    len = trap_FS_FOpenFile( "ui/hud.txt", &f, FS_READ ); - -    if( !f ) -      trap_Error( va( S_COLOR_RED "default menu file not found: ui/hud.txt, unable to continue!\n" ) ); -  } - -  if( len >= MAX_MENUDEFFILE ) -  { -    trap_Error( va( S_COLOR_RED "menu file too large: %s is %i, max allowed is %i", -                menuFile, len, MAX_MENUDEFFILE ) ); -    trap_FS_FCloseFile( f ); -    return; -  } - -  trap_FS_Read( buf, len, f ); -  buf[ len ] = 0; -  trap_FS_FCloseFile( f ); - -  COM_Compress( buf ); - -  Menu_Reset( ); - -  p = buf; - -  while( 1 ) -  { -    token = COM_ParseExt( &p, qtrue ); - -    if( !token || token[ 0 ] == 0 || token[ 0 ] == '}' ) -      break; - -    if( Q_stricmp( token, "}" ) == 0 ) -      break; - -    if( Q_stricmp( token, "loadmenu" ) == 0 ) -    { -      if( CG_Load_Menu( &p ) ) -        continue; -      else -        break; -    } -  } - -  Com_Printf( "UI menu load time = %d milli seconds\n", trap_Milliseconds( ) - start ); -} - - - -static qboolean CG_OwnerDrawHandleKey( int ownerDraw, int key ) -{ -  return qfalse; -} - - -static int CG_FeederCount( int feederID ) -{ -  int i, count = 0; - -  if( feederID == FEEDER_ALIENTEAM_LIST ) -  { -    for( i = 0; i < cg.numScores; i++ ) -    { -      if( cg.scores[ i ].team == TEAM_ALIENS ) -        count++; -    } -  } -  else if( feederID == FEEDER_HUMANTEAM_LIST ) -  { -    for( i = 0; i < cg.numScores; i++ ) -    { -      if( cg.scores[ i ].team == TEAM_HUMANS ) -        count++; -    } -  } - -  return count; -} - - -void CG_SetScoreSelection( void *p ) -{ -  menuDef_t     *menu = (menuDef_t*)p; -  playerState_t *ps = &cg.snap->ps; -  int           i, alien, human; -  int           feeder; - -  alien = human = 0; - -  for( i = 0; i < cg.numScores; i++ ) -  { -    if( cg.scores[ i ].team == TEAM_ALIENS ) -      alien++; -    else if( cg.scores[ i ].team == TEAM_HUMANS ) -      human++; - -    if( ps->clientNum == cg.scores[ i ].client ) -      cg.selectedScore = i; -  } - -  if( menu == NULL ) -    // just interested in setting the selected score -    return; - -  feeder = FEEDER_ALIENTEAM_LIST; -  i = alien; - -  if( cg.scores[ cg.selectedScore ].team == TEAM_HUMANS ) -  { -    feeder = FEEDER_HUMANTEAM_LIST; -    i = human; -  } - -  Menu_SetFeederSelection(menu, feeder, i, NULL); -} - -// FIXME: might need to cache this info -static clientInfo_t * CG_InfoFromScoreIndex( int index, int team, int *scoreIndex ) -{ -  int i, count; -  count = 0; - -  for( i = 0; i < cg.numScores; i++ ) -  { -    if( cg.scores[ i ].team == team ) -    { -      if( count == index ) -      { -        *scoreIndex = i; -        return &cgs.clientinfo[ cg.scores[ i ].client ]; -      } -      count++; -    } -  } - -  *scoreIndex = index; -  return &cgs.clientinfo[ cg.scores[ index ].client ]; -} - -qboolean CG_ClientIsReady( int clientNum ) -{ -  clientList_t ready; - -  Com_ClientListParse( &ready, CG_ConfigString( CS_CLIENTS_READY ) ); - -  return Com_ClientListContains( &ready, clientNum ); -} - -static const char *CG_FeederItemText( int feederID, int index, int column, qhandle_t *handle ) -{ -  int           scoreIndex = 0; -  clientInfo_t  *info = NULL; -  int           team = -1; -  score_t       *sp = NULL; -  qboolean      showIcons = qfalse; - -  *handle = -1; - -  if( feederID == FEEDER_ALIENTEAM_LIST ) -    team = TEAM_ALIENS; -  else if( feederID == FEEDER_HUMANTEAM_LIST ) -    team = TEAM_HUMANS; - -  info = CG_InfoFromScoreIndex( index, team, &scoreIndex ); -  sp = &cg.scores[ scoreIndex ]; - -  if( cg.intermissionStarted && CG_ClientIsReady( sp->client ) ) -    showIcons = qfalse; -  else if( cg.snap->ps.pm_type == PM_SPECTATOR || -           cg.snap->ps.pm_type == PM_NOCLIP || -           cg.snap->ps.pm_flags & PMF_FOLLOW || -           team == cg.snap->ps.stats[ STAT_TEAM ] || -           cg.intermissionStarted ) -  { -    showIcons = qtrue; -  } - -  if( info && info->infoValid ) -  { -    switch( column ) -    { -      case 0: -        if( showIcons ) -        { -          if( sp->weapon != WP_NONE ) -            *handle = cg_weapons[ sp->weapon ].weaponIcon; -        } -        break; - -      case 1: -        if( showIcons ) -        { -          if( sp->team == TEAM_HUMANS && sp->upgrade != UP_NONE ) -            *handle = cg_upgrades[ sp->upgrade ].upgradeIcon; -          else if( sp->team == TEAM_ALIENS ) -          { -            switch( sp->weapon ) -            { -              case WP_ABUILD2: -              case WP_ALEVEL1_UPG: -              case WP_ALEVEL2_UPG: -              case WP_ALEVEL3_UPG: -                *handle = cgs.media.upgradeClassIconShader; -                break; - -              default: -                break; -            } -          } -        } -        break; - -      case 2: -        if( cg.intermissionStarted && CG_ClientIsReady( sp->client ) ) -          return "Ready"; -        break; - -      case 3: -        return va( S_COLOR_WHITE "%s", info->name ); -        break; - -      case 4: -        return va( "%d", sp->score ); -        break; - -      case 5: -        return va( "%4d", sp->time ); -        break; - -      case 6: -        if( sp->ping == -1 ) -          return ""; - -        return va( "%4d", sp->ping ); -        break; -    } -  } - -  return ""; -} - -static qhandle_t CG_FeederItemImage( int feederID, int index ) -{ -  return 0; -} - -static void CG_FeederSelection( int feederID, int index ) -{ -  int i, count; -  int team = ( feederID == FEEDER_ALIENTEAM_LIST ) ? TEAM_ALIENS : TEAM_HUMANS; -  count = 0; - -  for( i = 0; i < cg.numScores; i++ ) -  { -    if( cg.scores[ i ].team == team ) -    { -      if( index == count ) -        cg.selectedScore = i; - -      count++; -    } -  } -} - -static float CG_Cvar_Get( const char *cvar ) -{ -  char buff[ 128 ]; - -  memset( buff, 0, sizeof( buff ) ); -  trap_Cvar_VariableStringBuffer( cvar, buff, sizeof( buff ) ); -  return atof( buff ); -} - -void CG_Text_PaintWithCursor( float x, float y, float scale, vec4_t color, const char *text, -                              int cursorPos, char cursor, int limit, int style ) -{ -  UI_Text_Paint( x, y, scale, color, text, 0, limit, style ); -} - -static int CG_OwnerDrawWidth( int ownerDraw, float scale ) -{ -  switch( ownerDraw ) -  { -    case CG_KILLER: -      return UI_Text_Width( CG_GetKillerText( ), scale ); -      break; -  } - -  return 0; -} - -static int CG_PlayCinematic( const char *name, float x, float y, float w, float h ) -{ -  return trap_CIN_PlayCinematic( name, x, y, w, h, CIN_loop ); -} - -static void CG_StopCinematic( int handle ) -{ -  trap_CIN_StopCinematic( handle ); -} - -static void CG_DrawCinematic( int handle, float x, float y, float w, float h ) -{ -  trap_CIN_SetExtents( handle, x, y, w, h ); -  trap_CIN_DrawCinematic( handle ); -} - -static void CG_RunCinematicFrame( int handle ) -{ -  trap_CIN_RunCinematic( handle ); -} - -// hack to prevent warning -static qboolean CG_OwnerDrawVisible( int parameter ) -{ -  return qfalse; -} - -/* -================= -CG_LoadHudMenu -================= -*/ -void CG_LoadHudMenu( void ) -{ -  char        buff[ 1024 ]; -  const char  *hudSet; - -  cgDC.aspectScale = ( ( 640.0f * cgs.glconfig.vidHeight ) / -                       ( 480.0f * cgs.glconfig.vidWidth ) ); -  cgDC.xscale = cgs.glconfig.vidWidth / 640.0f; -  cgDC.yscale = cgs.glconfig.vidHeight / 480.0f; - -  cgDC.smallFontScale = CG_Cvar_Get( "ui_smallFont" ); -  cgDC.bigFontScale = CG_Cvar_Get( "ui_bigFont" ); - -  cgDC.registerShaderNoMip  = &trap_R_RegisterShaderNoMip; -  cgDC.setColor             = &trap_R_SetColor; -  cgDC.drawHandlePic        = &CG_DrawPic; -  cgDC.drawStretchPic       = &trap_R_DrawStretchPic; -  cgDC.registerModel        = &trap_R_RegisterModel; -  cgDC.modelBounds          = &trap_R_ModelBounds; -  cgDC.fillRect             = &CG_FillRect; -  cgDC.drawRect             = &CG_DrawRect; -  cgDC.drawSides            = &CG_DrawSides; -  cgDC.drawTopBottom        = &CG_DrawTopBottom; -  cgDC.clearScene           = &trap_R_ClearScene; -  cgDC.addRefEntityToScene  = &trap_R_AddRefEntityToScene; -  cgDC.renderScene          = &trap_R_RenderScene; -  cgDC.registerFont         = &trap_R_RegisterFont; -  cgDC.ownerDrawItem        = &CG_OwnerDraw; -  cgDC.getValue             = &CG_GetValue; -  cgDC.ownerDrawVisible     = &CG_OwnerDrawVisible; -  cgDC.runScript            = &CG_RunMenuScript; -  cgDC.setCVar              = trap_Cvar_Set; -  cgDC.getCVarString        = trap_Cvar_VariableStringBuffer; -  cgDC.getCVarValue         = CG_Cvar_Get; -  cgDC.setOverstrikeMode    = &trap_Key_SetOverstrikeMode; -  cgDC.getOverstrikeMode    = &trap_Key_GetOverstrikeMode; -  cgDC.startLocalSound      = &trap_S_StartLocalSound; -  cgDC.ownerDrawHandleKey   = &CG_OwnerDrawHandleKey; -  cgDC.feederCount          = &CG_FeederCount; -  cgDC.feederItemImage      = &CG_FeederItemImage; -  cgDC.feederItemText       = &CG_FeederItemText; -  cgDC.feederSelection      = &CG_FeederSelection; -  //cgDC.setBinding           = &trap_Key_SetBinding; -  //cgDC.getBindingBuf        = &trap_Key_GetBindingBuf; -  //cgDC.keynumToStringBuf    = &trap_Key_KeynumToStringBuf; -  //cgDC.executeText          = &trap_Cmd_ExecuteText; -  cgDC.Error                = &Com_Error; -  cgDC.Print                = &Com_Printf; -  cgDC.ownerDrawWidth       = &CG_OwnerDrawWidth; -  //cgDC.ownerDrawText        = &CG_OwnerDrawText; -  //cgDC.Pause                = &CG_Pause; -  cgDC.registerSound        = &trap_S_RegisterSound; -  cgDC.startBackgroundTrack = &trap_S_StartBackgroundTrack; -  cgDC.stopBackgroundTrack  = &trap_S_StopBackgroundTrack; -  cgDC.playCinematic        = &CG_PlayCinematic; -  cgDC.stopCinematic        = &CG_StopCinematic; -  cgDC.drawCinematic        = &CG_DrawCinematic; -  cgDC.runCinematicFrame    = &CG_RunCinematicFrame; - -  Init_Display( &cgDC ); - -  Menu_Reset( ); - -  trap_Cvar_VariableStringBuffer( "cg_hudFiles", buff, sizeof( buff ) ); -  hudSet = buff; - -  if( !cg_hudFilesEnable.integer || hudSet[ 0 ] == '\0' ) -    hudSet = "ui/hud.txt"; - -  CG_LoadMenus( hudSet ); -} - -void CG_AssetCache( void ) -{ -  int i; - -  cgDC.Assets.gradientBar         = trap_R_RegisterShaderNoMip( ASSET_GRADIENTBAR ); -  cgDC.Assets.scrollBar           = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR ); -  cgDC.Assets.scrollBarArrowDown  = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWDOWN ); -  cgDC.Assets.scrollBarArrowUp    = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWUP ); -  cgDC.Assets.scrollBarArrowLeft  = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWLEFT ); -  cgDC.Assets.scrollBarArrowRight = trap_R_RegisterShaderNoMip( ASSET_SCROLLBAR_ARROWRIGHT ); -  cgDC.Assets.scrollBarThumb      = trap_R_RegisterShaderNoMip( ASSET_SCROLL_THUMB ); -  cgDC.Assets.sliderBar           = trap_R_RegisterShaderNoMip( ASSET_SLIDER_BAR ); -  cgDC.Assets.sliderThumb         = trap_R_RegisterShaderNoMip( ASSET_SLIDER_THUMB ); - -  if( cg_emoticons.integer ) -  { -    cgDC.Assets.emoticonCount = BG_LoadEmoticons( cgDC.Assets.emoticons, -      MAX_EMOTICONS ); -  } -  else -    cgDC.Assets.emoticonCount = 0; - -  for( i = 0; i < cgDC.Assets.emoticonCount; i++ ) -  { -    cgDC.Assets.emoticons[ i ].shader = trap_R_RegisterShaderNoMip( -      va( "emoticons/%s_%dx1.tga", cgDC.Assets.emoticons[ i ].name, -          cgDC.Assets.emoticons[ i ].width ) ); -  } -} - -/* -================= -CG_Init - -Called after every level change or subsystem restart -Will perform callbacks to make the loading info screen update. -================= -*/ -void CG_Init( int serverMessageNum, int serverCommandSequence, int clientNum ) -{ -  const char  *s; - -  // clear everything -  memset( &cgs, 0, sizeof( cgs ) ); -  memset( &cg, 0, sizeof( cg ) ); -  memset( &cg.pmext, 0, sizeof( cg.pmext ) ); -  memset( cg_entities, 0, sizeof( cg_entities ) ); - -  cg.clientNum = clientNum; - -  cgs.processedSnapshotNum = serverMessageNum; -  cgs.serverCommandSequence = serverCommandSequence; - -  // get the rendering configuration from the client system -  trap_GetGlconfig( &cgs.glconfig ); -  cgs.screenXScale = cgs.glconfig.vidWidth / 640.0f; -  cgs.screenYScale = cgs.glconfig.vidHeight / 480.0f; - -  // load a few needed things before we do any screen updates -  cgs.media.whiteShader     = trap_R_RegisterShader( "white" ); -  cgs.media.charsetShader   = trap_R_RegisterShader( "gfx/2d/bigchars" ); -  cgs.media.outlineShader   = trap_R_RegisterShader( "outline" ); - -  // load overrides -  BG_InitClassConfigs( ); -  BG_InitBuildableConfigs( ); -  BG_InitAllowedGameElements( ); - -  // Dynamic memory -  BG_InitMemory( ); - -  CG_RegisterCvars( ); - -  CG_InitConsoleCommands( ); - -  String_Init( ); - -  CG_AssetCache( ); -  CG_LoadHudMenu( ); - -  cg.weaponSelect = WP_NONE; - -  // old servers - -  // get the gamestate from the client system -  trap_GetGameState( &cgs.gameState ); - -  // copy vote display strings so they don't show up blank if we see -  // the same one directly after connecting -  Q_strncpyz( cgs.voteString[ TEAM_NONE ], -      CG_ConfigString( CS_VOTE_STRING + TEAM_NONE ), -      sizeof( cgs.voteString ) ); -  Q_strncpyz( cgs.voteString[ TEAM_ALIENS ], -      CG_ConfigString( CS_VOTE_STRING + TEAM_ALIENS ), -      sizeof( cgs.voteString[ TEAM_ALIENS ] ) ); -  Q_strncpyz( cgs.voteString[ TEAM_HUMANS ], -      CG_ConfigString( CS_VOTE_STRING + TEAM_ALIENS ), -      sizeof( cgs.voteString[ TEAM_HUMANS ] ) ); - -  // check version -  s = CG_ConfigString( CS_GAME_VERSION ); - -  if( strcmp( s, GAME_VERSION ) ) -    CG_Error( "Client/Server game mismatch: %s/%s", GAME_VERSION, s ); - -  s = CG_ConfigString( CS_LEVEL_START_TIME ); -  cgs.levelStartTime = atoi( s ); - -  CG_ParseServerinfo( ); - -  // load the new map -  trap_CM_LoadMap( cgs.mapname ); - -  cg.loading = qtrue;   // force players to load instead of defer - -  CG_LoadTrailSystems( ); -  CG_UpdateMediaFraction( 0.05f ); - -  CG_LoadParticleSystems( ); -  CG_UpdateMediaFraction( 0.05f ); - -  CG_RegisterSounds( ); -  CG_UpdateMediaFraction( 0.60f ); - -  CG_RegisterGraphics( ); -  CG_UpdateMediaFraction( 0.90f ); - -  CG_InitWeapons( ); -  CG_UpdateMediaFraction( 0.95f ); - -  CG_InitUpgrades( ); -  CG_UpdateMediaFraction( 1.0f ); - -  CG_InitBuildables( ); -  -  cgs.voices = BG_VoiceInit( ); -  BG_PrintVoices( cgs.voices, cg_debugVoices.integer ); - -  CG_RegisterClients( );   // if low on memory, some clients will be deferred - -  cg.loading = qfalse;  // future players will be deferred -   -  CG_InitMarkPolys( ); - -  // remove the last loading update -  cg.infoScreenText[ 0 ] = 0; - -  // Make sure we have update values (scores) -  CG_SetConfigValues( ); - -  CG_StartMusic( ); - -  CG_ShaderStateChanged( ); - -  trap_S_ClearLoopingSounds( qtrue ); -} - -/* -================= -CG_Shutdown - -Called before every level change or subsystem restart -================= -*/ -void CG_Shutdown( void ) -{ -  // some mods may need to do cleanup work here, -  // like closing files or archiving session data -} - -/* -================ -CG_VoIPString -================ -*/ -static char *CG_VoIPString( void ) -{ -  // a generous overestimate of the space needed for 0,1,2...61,62,63 -  static char voipString[ MAX_CLIENTS * 4 ]; -  char voipSendTarget[ MAX_CVAR_VALUE_STRING ]; - -  trap_Cvar_VariableStringBuffer( "cl_voipSendTarget", voipSendTarget, -                                  sizeof( voipSendTarget ) ); - -  if( Q_stricmp( voipSendTarget, "team" ) == 0 ) -  { -    int i, slen, nlen; -    for( slen = i = 0; i < cgs.maxclients; i++ ) -    { -      if( !cgs.clientinfo[ i ].infoValid || i == cg.clientNum ) -        continue; -      if( cgs.clientinfo[ i ].team != cgs.clientinfo[ cg.clientNum ].team ) -        continue; - -      nlen = Q_snprintf( &voipString[ slen ], sizeof( voipString ) - slen, -                         "%s%d", ( slen > 0 ) ? "," : "", i ); -      if( slen + nlen + 1 >= sizeof( voipString ) ) -      { -        CG_Printf( S_COLOR_YELLOW "WARNING: voipString overflowed\n" ); -        break; -      } - -      slen += nlen; -    } - -    // Notice that if the snprintf was truncated, slen was not updated -    // so this will remove any trailing commas or partially-completed numbers -    voipString[ slen ] = '\0'; -  } -  else if( Q_stricmp( voipSendTarget, "crosshair" ) == 0 ) -    Com_sprintf( voipString, sizeof( voipString ), "%d", -                 CG_CrosshairPlayer( ) ); -  else if( Q_stricmp( voipSendTarget, "attacker" ) == 0 ) -    Com_sprintf( voipString, sizeof( voipString ), "%d", -                 CG_LastAttacker( ) ); -  else -    return NULL; - -  return voipString; -} -  | 
