Index: data/defaultNexuiz.cfg
===================================================================
--- data/defaultNexuiz.cfg	(revision 8076)
+++ data/defaultNexuiz.cfg	(working copy)
@@ -306,6 +306,10 @@
 set sv_qcweaponanimation 0
 
 set g_telefrags 1
+// fragmessage: This allows extra information to be displayed with the frag centerprints. 
+set sv_fragmessage_information 0 "Enable extra frag information such as ping"
+set sv_fragmessage_information_handicap 0 "Enable handicap display information, requires sv_fragmessage_information"
+set sv_fragmessage_information_stats 0 "Enable statistics (health/armor) display information, requires sv_fragmessage_information"
 
 // use default physics
 set sv_friction_on_land 0
Index: data/qcsrc/server/defs.qh
===================================================================
--- data/qcsrc/server/defs.qh	(revision 8076)
+++ data/qcsrc/server/defs.qh	(working copy)
@@ -243,6 +243,12 @@
 
 void(entity client, string s) centerprint_builtin = #73;
 .vector dest1, dest2;
+// successivecenterprint 
+.string scp_strCenterprint;
+.float scp_bNeedsFree;
+.float scp_tEndTime;
+.float scp_tPrintTime;
+void SuccessiveCenterprint(entity enReceiver, string strMessage);
 
 float gameover;
 float intermission_running;
Index: data/qcsrc/server/g_damage.qc
===================================================================
--- data/qcsrc/server/g_damage.qc	(revision 8076)
+++ data/qcsrc/server/g_damage.qc	(working copy)
@@ -369,16 +369,21 @@
 						victim_message = "^1First victim\n";  // or First casualty
 					}
 				}
-
-				if(sv_gentle > 0) {
-					centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, "^4You scored against ^7", s));
-					centerprint(targ, strcat(DAMAGE_CENTERPRINT_SPACER, a,"^1 scored against you ^7"));
+				
+				if(cvar("sv_fragmessage_information")) {
+					CheckAdvancedDeathReports(attacker, targ);
 				} else {
-					centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, blood_message, "^4You fragged ^7", s));
-					centerprint(targ, strcat(DAMAGE_CENTERPRINT_SPACER, victim_message, "^1You were fragged by ^7", a));
-					attacker.taunt_soundtime = time + 1;
+					if(sv_gentle > 0) {
+						centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, "^4You scored against ^7", s));
+						centerprint(targ, strcat(DAMAGE_CENTERPRINT_SPACER, a,"^1 scored against you ^7"));
+					} else {
+						centerprint(attacker, strcat(DAMAGE_CENTERPRINT_SPACER, blood_message, "^4You fragged ^7", s));
+						centerprint(targ, strcat(DAMAGE_CENTERPRINT_SPACER, victim_message, "^1You were fragged by ^7", a));
+					}
 				}
-
+				if not(sv_gentle > 0)
+						attacker.taunt_soundtime = time + 1;
+						
 				if(sv_gentle) {
 					bprint ("^1",s, "^1 needs a restart thanks to ", a, "\n");
 				} else {
Index: data/qcsrc/server/miscfunctions.qc
===================================================================
--- data/qcsrc/server/miscfunctions.qc	(revision 8076)
+++ data/qcsrc/server/miscfunctions.qc	(working copy)
@@ -111,6 +111,92 @@
 float logfile_open;
 float logfile;
 
+void CheckAdvancedDeathReports(entity enAttacker, entity enVictim)
+{
+	// -----------------------------------------------------
+	// Declarations
+	local string strAttackerMessage;
+	local string strTargetMessage;
+	local string strAttackerHealth;
+	local string strAttackerArmor;
+	local string strAttackerPing;
+	local string strAttackerHandicap;
+	local string strAttackerMessage;
+	local string strVictimHandicap;
+	local string strVictimPing;
+	strAttackerHealth = strzone(ftos(rint(bound(0, enAttacker.health, enAttacker.health))));
+	strAttackerArmor = strzone(ftos(rint(enAttacker.armorvalue)));
+	strAttackerHandicap = strzone(ftos(rint(bound(0, enAttacker.cvar_cl_handicap - 1, enAttacker.cvar_cl_handicap) * 100)));
+	strVictimHandicap = strzone(ftos(rint(bound(0, enVictim.cvar_cl_handicap - 1, enVictim.cvar_cl_handicap) * 100)));
+	strAttackerPing = strzone(ftos(rint(enAttacker.ping)));
+	strVictimPing = strzone(ftos(rint(enVictim.ping)));
+	if(sv_gentle > 0) {
+		strAttackerMessage = strcat("^4You scored against ^7", enVictim.netname);
+		strTargetMessage = strcat(enAttacker.netname, "^1 scored against you ^7", "\n");
+	} else {	
+		strAttackerMessage = strcat("^4You fragged ^7", enVictim.netname);
+		strTargetMessage = strcat("^1Fragged by ^7", enAttacker.netname, "\n");
+	}
+	
+	// -----------------------------------------------------
+	// Attacker (This guy just killed someone)
+	if(clienttype(enVictim) == CLIENTTYPE_BOT)
+		strAttackerMessage = strcat(strAttackerMessage, "\n^7(^2Bot");
+	else
+		strAttackerMessage = strcat(strAttackerMessage, "\n^7(Ping ^2", strVictimPing, "ms");
+	if(cvar("sv_fragmessage_information_handicap"))
+		if(strVictimHandicap == "0")
+			strAttackerMessage = strcat(strAttackerMessage, "^7 / Handicap ^2off");
+		else
+			strAttackerMessage = strcat(strAttackerMessage, "^7 / Handicap ^2", strVictimHandicap, "%");
+	strAttackerMessage = strcat(strAttackerMessage, "^7)\n\n");
+
+	// -----------------------------------------------------
+	// Target (This guy just died)
+	if(clienttype(enAttacker) == CLIENTTYPE_BOT)
+		strTargetMessage = strcat(strTargetMessage, " ^7(^2Bot");
+	else
+		strTargetMessage = strcat(strTargetMessage, " ^7(Ping ^2", strAttackerPing, "ms");
+	if(cvar("sv_fragmessage_information_handicap"))
+		if(strVictimHandicap == "0")
+			strTargetMessage = strcat(strTargetMessage, "^7 / Handicap ^2off");
+		else
+			strTargetMessage = strcat(strTargetMessage, "^7 / Handicap ^2", strAttackerHandicap, "%");
+	strTargetMessage = strcat(strTargetMessage, "^7)");
+
+	if(cvar("sv_fragmessage_information_stats"))
+		strTargetMessage = strcat(strTargetMessage, "\n^7(Health ^1", strAttackerHealth, "^7 / Armor ^2", strAttackerArmor, "^7)");
+	
+	// -----------------------------------------------------
+	// Closing
+	SuccessiveCenterprint(enAttacker, strAttackerMessage);
+	SuccessiveCenterprint(enVictim, strTargetMessage);
+	strunzone(strAttackerHealth);
+	strunzone(strAttackerArmor);
+	strunzone(strAttackerHandicap);
+	strunzone(strAttackerPing);
+	strunzone(strVictimHandicap);
+	strunzone(strVictimPing);
+}
+void SuccessiveCenterprint(entity enReceiver, string strMessage) // writen by Dresk
+{ // Successive Centerprint
+	local string strFinalCenterprint;
+	if(time < enReceiver.scp_tEndTime)
+	{ // Successive Print Necessary; Append Message to Current Centerprint
+		strFinalCenterprint = strcat(enReceiver.scp_strCenterprint, "\n");
+		strFinalCenterprint = strcat(strFinalCenterprint, strMessage);
+	}
+	else
+		strFinalCenterprint = strMessage;
+		
+	if(enReceiver.scp_bNeedsFree)
+		strunzone(enReceiver.scp_strCenterprint);
+	enReceiver.scp_strCenterprint = strFinalCenterprint;
+		enReceiver.scp_strCenterprint = strzone(enReceiver.scp_strCenterprint);
+		enReceiver.scp_bNeedsFree = 1;
+	enReceiver.scp_tEndTime = (time + enReceiver.scp_tPrintTime);
+	centerprint(enReceiver, strFinalCenterprint);
+}
 void bcenterprint(string s)
 {
     // TODO replace by MSG_ALL (would show it to spectators too, though)?
