Exemple #1
0
/*
=============
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[ 32 ];
  char          attackerName[ 32 ];
  char          className[ 64 ];
  gender_t      gender;
  clientInfo_t  *ci;

  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 ];

  if( attacker < 0 || attacker >= MAX_CLIENTS )
  {
    attacker = ENTITYNUM_WORLD;
    attackerInfo = NULL;
  }
  else
    attackerInfo = CG_ConfigString( CS_PLAYERS + attacker );

  targetInfo = CG_ConfigString( CS_PLAYERS + target );

  if( !targetInfo )
    return;

  Q_strncpyz( targetName, Info_ValueForKey( targetInfo, "n" ), sizeof( targetName ) - 2 );
  strcat( targetName, S_COLOR_WHITE );

  message2 = "";

  // check for single client messages

  switch( mod )
  {
    case MOD_SUICIDE:
      message = "suicides";
      break;
    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 = "does 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 ran 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( attacker == target )
  {
    gender = ci->gender;
    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;

      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.\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 ) - 2);
    strcat( attackerName, S_COLOR_WHITE );
    // 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_FindHumanNameForClassNum( PCL_ALIEN_LEVEL1 ) );
        message2 = className;
        break;
      case MOD_LEVEL2_CLAW:
        message = "was clawed by";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL2 ) );
        message2 = className;
        break;
      case MOD_LEVEL2_ZAP:
        message = "was zapped by";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL2 ) );
        message2 = className;
        break;
      case MOD_LEVEL3_CLAW:
        message = "was chomped by";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL3 ) );
        message2 = className;
        break;
      case MOD_LEVEL3_POUNCE:
        message = "was pounced upon by";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL3 ) );
        message2 = className;
        break;
      case MOD_LEVEL3_BOUNCEBALL:
        message = "was sniped by";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL3 ) );
        message2 = className;
        break;
      case MOD_LEVEL4_CLAW:
        message = "was mauled by";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL4 ) );
        message2 = className;
        break;
      case MOD_LEVEL4_CHARGE:
        message = "should have gotten out of the way of";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL4 ) );
        message2 = className;
        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_FindHumanNameForClassNum( PCL_ALIEN_LEVEL1 ) );
        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 %s%s\n",
        targetName, message, attackerName, message2 );
      return;
    }
  }

  // we don't know what it was
  CG_Printf( "%s died.\n", targetName );
}
Exemple #2
0
/*
=============
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[ 32 ];
  char          attackerName[ 32 ];
  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 ];

  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 ) - 2 );
  strcat( targetName, S_COLOR_WHITE );

  message2 = "";

  // check for single client messages

  switch( mod )
  {
    case MOD_SUICIDE:
      message = "thought that suiciding couldn't be more painful";
      break;
    case MOD_FALLING:
      message = "tried to fly";
      break;
    case MOD_CRUSH:
      message = "now can fit in a filing cabinet";
      break;
    case MOD_WATER:
      message = "didn't know how to swim properly";
      break;
    case MOD_SLIME:
      message = "thought ^2acid^7 tasted good";
      break;
    case MOD_LAVA:
      message = "melted under some mysterious blazingly hot ^1red ^7substance";
      break;
    case MOD_TARGET_LASER:
      message = "shouldn't have touched that ^1laser";
      break;
    case MOD_TRIGGER_HURT:
      message = "must've died somehow";
      break;
    case MOD_HSPAWN:
      message = "was killed in some explosion.";
      break;
    case MOD_ASPAWN:
      message = "shouldn't have been near that organic structure.";
      break;
    case MOD_MGTURRET:
      message = "was shot down by a chainret";
      break;
    case MOD_TESLAGEN:
      message = "had a deadly electrical massage";
      break;
    case MOD_ATUBE:
      message = "shouldn't have gone near the alien base for a shower";
      break;
    case MOD_OVERMIND:
      message = "shouldn't convince the ^4Overmind^7 for intercourse.";
      break;
    case MOD_REACTOR:
      message = "didn't know what the ^4product^7 from an ^5electricity ^7generator was";
      break;
    case MOD_SLOWBLOB:
      message = "was ^2gooed";
      break;
    case MOD_SWARM:
      message = "shouldn't have gone near that hive";
      break;
    default:
      message = NULL;
      break;
  }

  if( attacker == target )
  {
    gender = ci->gender;
    switch( mod )
    {
      case MOD_FLAMER_SPLASH:
        if( gender == GENDER_FEMALE )
          message = "thought this was 1.2 tremulous.";
        else if( gender == GENDER_NEUTER )
          message = "toasted oneself";
        else
          message = "tried to make barbeque";
        break;

      case MOD_LCANNON_SPLASH:
        if( gender == GENDER_FEMALE )
          message = "should've learned not to luci spam";
        else if( gender == GENDER_NEUTER )
          message = "blew oneself's body up into the air making a magnificent firework display";
        else
          message = "tried a luci jump";
        break;

      case MOD_GRENADE:
        if( gender == GENDER_FEMALE )
          message = "had her nade betray her";
        else if( gender == GENDER_NEUTER )
          message = "blew itself up";
        else
          message = "threw the pin instead of the grenade";
        break;

      default:
        if( gender == GENDER_FEMALE )
          message = "suicided";
        else if( gender == GENDER_NEUTER )
          message = "^1died.";
        else
          message = "had to get away from the war";
        break;
    }
  }

  if( message )
  {
    CG_Printf( "%s %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 ) - 2);
    strcat( attackerName, S_COLOR_WHITE );
    // 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 scratched by";
        break;
      case MOD_BLASTER:
        message = "was =Powned by";
        break;
      case MOD_MACHINEGUN:
        message = "was exterminated by";
        break;
      case MOD_CHAINGUN:
        message = "was mowed down by";
        break;
      case MOD_SHOTGUN:
        message = "was blasted apart by the pellets of";
        break;
      case MOD_PRIFLE:
        message = "had its mouth filled with plasma";
        break;
      case MOD_MDRIVER:
        message = "learned a lesson in nuclear physics from";
        break;
      case MOD_LASGUN:
        message = "was laser spammed by";
        break;
      case MOD_FLAMER:
        message = "was unintentionally tanned by";
        message2 = "'s grill";
        break;
      case MOD_FLAMER_SPLASH:
        message = "was baked by";
        message2 = "'s portable incinerater";
        break;
      case MOD_LCANNON:
        message = "saw";
        message2 = "'s pretty lights";
        break;
      case MOD_LCANNON_SPLASH:
        message = "was blown up by";
        message2 = "'s exploding sun";
        break;
      case MOD_GRENADE:
        message = "didn't see";
        message2 = "drop the bottle";
        break;

      case MOD_ABUILDER_CLAW:
        message = "was fully owned by";
        message2 = "'s ^2granger";
        break;
      case MOD_LEVEL0_BITE:
        message = "was nibbled by";
	message2 = "'s dretch";
        break;
      case MOD_LEVEL1_CLAW:
        message = "was assasinated by";
//Canceled as basi-suit shares the same death message
//        Com_sprintf( className, 64, "'s %s",
//            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL1 ) );
//        message2 = className;
        break;
      case MOD_LEVEL2_CLAW:
        message = "had his body parts robbed by";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL2 ) );
        message2 = className;
        break;
      case MOD_LEVEL2_ZAP:
        message = "'s life energy was drained by";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL2 ) );
        message2 = className;
        break;
      case MOD_LEVEL3_CLAW:
        message = "had been decapitated by";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL3 ) );
        message2 = className;
        break;
      case MOD_LEVEL3_POUNCE:
        message = "had his lovely face munted by";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL3 ) );
        message2 = className;
        break;
      case MOD_LEVEL3_BOUNCEBALL:
        message = "accidentally caught the acid barb of";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL3 ) );
        message2 = className;
        break;
      case MOD_LEVEL4_CLAW:
        message = "should've yelled '^1TAAAANK!^7' when he saw";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL4 ) );
        message2 = className;
        break;
      case MOD_LEVEL4_CHARGE:
        message = "was shoved away by";
        Com_sprintf( className, 64, "'s %s",
            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL4 ) );
        message2 = className;
        break;

      case MOD_POISON:
        message = "had became unfortunate from";
        message2 = "'s AIDS";
        break;
      case MOD_LEVEL1_PCLOUD:
        message = "was drugged by";
//        Com_sprintf( className, 64, "'s %s",
//            BG_FindHumanNameForClassNum( PCL_ALIEN_LEVEL1 ) );
//        message2 = className;
        break;


      case MOD_TELEFRAG:
        message = "should've moved from the teleporter when";
        message2 = "teleported";
        break;
      default:
        message = "was murdered by";
        break;
    }

    if( message )
    {
      CG_Printf( "%s %s %s%s%s\n",
        targetName, message,
        ( teamKill ) ? S_COLOR_RED "TEAMMATE " S_COLOR_WHITE : "",
        attackerName, message2 );
      if( teamKill && attacker == cg.clientNum )
      {
        CG_CenterPrint( va ( "You broke the law by " S_COLOR_RED "RAPING TEAMMATE "
          S_COLOR_WHITE "%s", targetName ),
          SCREEN_HEIGHT * 0.30, BIGCHAR_WIDTH );
      }
      return;
    }
  }

  // we don't know what it was
  CG_Printf( "%s pressed a red button on his ipad's screen.\n", targetName );
}