CT-Eff ~~~~~~ Hello and welcome to my Quake log evaluation tool CT-Eff! It was written to evaluate CTF matches, but it can be used for Deathmatch games as well. CT-Eff generates HTML files and it can be told to insert end of level screenshots and links to Quake demos. Usage ~~~~~ To use CT-Eff you need a Quake demo or a log file. CT-Eff is compatible with demos and logs from Quake 1, QuakeWorld and Quake 2 and also logs from Q3Test. To get a client log file, you need to start Quake with the "-condebug" option. This can be done through GameSpy, a shortcut or a batch file, but *not* using the console in Quake. This will tell Quake to log all that happens during the game to a file called "qconsole.log". Depending on what kind of game you play, the file will appear in one of the sub- directories in your Quake folder, e g "qw" or "ctf". CT-Eff can also analyze server logs (from a PureCTF server, see below) and if you have a server you probably already know how to produce log files. Here's how you run CT-Eff: Usage: cteff [-1] [-f{b|t} font] [-g] [-k] [-m] [-n #] [-o] [-p wildcard] [-q wildcard] [-r] [-t team1,team2] [-w] demo/logfile -1 Tells CT-Eff to write all the statistics into one file. The default behaviour is to generate one HTML file as an overview, with the statistics separated into one file per level. -f font Sets the font to be used for the body and the table text. -fb font Sets the font to be used for the body text. -ft font Sets the font to be used for the table text. -g Tells CT-Eff to generate two graphs for each level, one shows each player's frags as a function of time, and the other shows each team's total score over time. Please note that the timescale won't be totally accurate if you use a log file as input since these usually have rather sparse time information. Obviously, if there is no time info at all, no graphs will be produced. -k For each level, CT-Eff will print a matrix that shows the number of times who killed whom. -m Tells CT-Eff to print some miscellanous information about what happened during the level. See "Miscellaneous stats" below. -n # Sets the number of players per team. Use this switch if you want to analyze a (non Pure) CTF match and there were disconnects or player changes during the match. If you don't, all players will be awarded capture bonuses. -o Calculate final score according to ONCLE rules (see http://www.ping-games.com/oncle). -p wildcard Inserts pictures (end of level screenshots) as specified by the wildcard, e g "*.jpg". If you specify a filename instead of a wildcard (e g "quake01.gif") CT-Eff will use that filename for the first level, then "quake02.gif" for the second, and so on. If you for instance don't have the picture from level 3, just name the fourth file as "quake04.gif". (CT-Eff will not link to nonexistant files) -q wildcard Inserts links to quake demo files, e g "*.qwd" or "*.zip". The link will be illustrated with the supplied picture "qdemo.gif" and it needs to be in a directory called "../../pictures/". You may give a filename instead of a wildcard, see "-p" above. -r Tells CT-Eff to sort the player list by CTF efficiency (see below) for CTF games or Rank for deathmatch games. The default is to sort the players by frags. -t team1,team2 Specifies the names of the competing teams. If CT-Eff says that "All team names could not be found", you can extend the argument to "team1=pattern1,team2=pattern2". CT-Eff will then use the patterns to do a sub-string search among the player names to find the desired team. -w For each level, CT-Eff will print a matrix that shows the number of kills for each type of weapon. demo/logfile The name of the Quake demo or log file to be analysed. Demos must have the extensions "DEM", "QWD" or "DM2" (for RQ, QW and Q2 demos, respectively). Statistics ~~~~~~~~~~ CT-Eff will generate at least one HTML file (index.html) in the current directory. Unless you used the "-1" switch, it will also produce one HTML file per level. For each player CT-Eff will show the following information: Frags The total score (as shown on the end of level screen) Efficiency Efficiency, not counting flag scores (see below) Kills Number of times you killed an enemy Deaths Number of times you were killed by an enemy Accidents Number of times you killed yourself Capture Number of points you get from captures (5 points for each bonuses capture, since the player doing the actual capture gets 5 points more than his teammates) Carrier Number of points you get from killing an enemy that has killing stolen your flag (including the assist bonus that you get if this leads to a capture) Carrier Number of points you get from defending your flag carrier defence Flag Number of points you get from defending your flag, including defence returning the flag and the return assist bonus CT-Eff. CTF efficiency (see below) In deathmatch mode, the five CTF-specific fields will be replace by "Rank" which is defined as "Kills - Deaths - Accidents". Efficiency ~~~~~~~~~~ Ok, now I'll try to explain the theory behind efficiency. The basic formula for it looks like this: Good Efficiency = ---------- Good + Bad Basically, "Good" is the number of points you acquired, and "Bad" is the number of points you give to your opponent (by being killed). For the plain "deathmatch" efficiency, "Good" equals your kills, and "Bad" is the sum of your deaths and accidents: Kills Efficiency = -------------------------- Kills + Deaths + Accidents From this follows that if you don't die or kill yourself, your efficiency is 100 percent. Or, if you play a one-on-one, and you kill your opponent as many times as (s)he kills you, your efficiency is 50 percent. Simple, isn't it? For CTF, it's a bit more complicated, but still follows the principle. In this case, "Good" and "Bad" is calculated like this: Good = Kills + Capture bonus + Carrier kills + Carrier defence + Flag defence + 10 * Friendly captures Bad = Deaths + Accidents + 3 * Flag losses + 10 * Enemy captures The variables are defined as under "Statistics" above, with the addition of "Flag losses" which is the number of times you lose the enemy flag (the enemy team will get an average of 3 points when that happens). Miscellaneous stats ~~~~~~~~~~~~~~~~~~~ If you use the "-m" option, CT-Eff will print the following information: * For ClanArena: Which player(s) had the least amount of health left at the end of a round. * For CTF: Who made the quickest and slowest captures for each team. * For CTF: A list of any players who dropped the flag (using suicide!) to a teammate enabling this teammate to capture the flag. This is actually the way to go on a map such as "The Vaults of Zin" =). * The player(s) who managed to get the highest number of quad kills. Note: Only quad-rocket kills are logged, and sometimes also quad-shaft, but no other quad kills are logged. * Which players fought each other the largest number of times. * Any player(s) who managed to discharge in the water, kill someone *and* survive it himself. Of course, this player may have been using the penta- gram of protection at the time. Talk & unknown ~~~~~~~~~~~~~~ All the communication between players that is found in the log is put into the file "talk.txt" and the lines that CT-Eff does not understand is put in "unknown.log". Notes & Limitations ~~~~~~~~~~~~~~~~~~~ * Friendly fire CT-Eff will *not* work if players are able to kill their team mates and if this is logged as normal kills. I made that decision because I never play matches with that rule, and besides, this way CT-Eff will automagically figure out the teams for you! However, if friendly fire is logged properly, CT-Eff will work fine. * CTF Unfortunately, Zoid's good old CTF patch does not log all that happens in the game, so CT-Eff cannot accurately calculate some of the numbers ("Frags" and "Carrier kills"). However, the "Pure CTF" patch has fixed this and other problems, and it's the only CTF version that CT-Eff works perfectly with. The Pure CTF patch can be found at http://www.captured.com/purectf/. * Incorrect capture bonuses Another common problem is that some players may not get the capture bonus for the very first capture in a round. This will happen if a player is unknown to CT-Eff by the time one of his/her team mates captures the enemy flag. This can be corrected using a work-around: Add this line to the beginning of the log file (but *after* the level name!): Player entered the game Obviously, you must replace the text "Player" with the name of the player who has an incorrect score! :) * Clan Arena 2 Because of a problem in CA2 logs, I had to use an alternate method to detect the end of a match. This may not work in all cases. If you experience such a problem, please mail me the log file in question. * Q3Test As of this writing, Q3Test logs have the limitation that your own frags are not logged, only your deaths. "Fun names" are not yet supported. Only one level per log is read. Fine print/other stuff ~~~~~~~~~~~~~~~~~~~~~~ CT-Eff is freely redistributable as long as it's accompanied by this text file. Send suggestions, bug reports etc to: cteff@sundin.nu Thanks to Uwe Girlich for his Quake demo file descriptions.