/* ============= 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 ); }
/* ============= 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 ); }