Introducing VSP Excessive Plus Edition

VSP extracts statistical and other data from the log files of games and mods based on id’s Tech 3 engine by utilizing MySQL and PHP.


The original application (created by Myrddin) was broken by Excessive Plus 1.03 back in 2005 and therefore I (WASP.Beast) created a fork to primarily support the Quake III and OpenArena Excessive Plus (E+) Mods.


Please note that as of version 1.2, we will no longer support other id Tech 3 engine based games or Quake III Mods. That is, version 1.2 only supports Quake III Arena, Q3 Team Arena, OpenArena, and Xreal (2009 version).


However, you may continue to use version 1.1.1 and older versions (see sidebar for downloads) which also supports:

Other games created with id’s Tech 3 Engine: Call of Duty 1, Half-Life 1, Medal of Honor 1, Return to Castle Wolfenstein, Soldier of Fortune 2, and Wolfenstein: Enemy Territory.

Other Quake III Mods: BattleMod, CPMA Promode, Excessive Plus, FreezeTag/uFreeze, Lokis Revenge CTF, OSP, Rocket Arena 3, Threewave, and UrbanTerror.

Further modifications may be necessary especially since some of the code used have been deprecated by newer version of PHP and MySQL. If using WHM (Web Host Manager), WASP.Killer recommends installing OWASP’s free Mod Security Add-on.


To successfully use VSP, your server must have a version of MySQL 5.x and PHP 5.x released in 2009 or later.


You will need to customize the following files to suit your server (i.e., Server name, IP and Port, etc,):

  • pub/configs/cfg-default.php: Connection to database, ftp (if any), general options for your site and several options for the parser.
  • pub/include/ List of banned players – not recommended.
  • pub/include/ List of excluded players.
  • pub/themes/bismarck/skins/*: Skins of the theme.
  • pub/themes/bismarck/ Portions of the site presents in all the pages: header, footer, menu, credits, etc.
  • pub/themes/bismarck/ Some settings that affects the pages.

Optional Configuration:

  • pub/games/q3a/awardsets/default/default-awards.php: Awards definition.
  • pub/games/q3a/skillsets/default/default-skill.php: Skills definition.

To see the program in action take a look at the LINKS section (in the sidebar).

Skill system:

The main idea was taking from here: However, I went further and applied the same concepts for events and team events. This was done in such a way that skill points are now “transferred” among players. That is, the final sum of all the players of the system remain the same at every time.

The purpose of this change is to keep the stats indefinitely without resetting them in some period basis, because the skill of each player is based on the quality of the opponents he plays against, not the quantity of frags he makes.

All skill configuration is located in the default-skills.php file. The first 2 parameters are the mean and variance for the logistical distribution used to compute the probability of winning. When a new player is encountered, he is given the value of the mean, and his skill changes depending of the type of event he plays on.

For frag events, the most basic example, you compute the probability of the killer fragging the victim with both players skills as parameters along with the variance, like this:
prob_winning = 1/(1+e^((loser_skill-winner_skill)/variance)).

Then, the the killer gets his skill points increased in (1-prob_winning)*weapon_factor, and the victim skills decrease by the same amount. Use of negative weapon factors are allowed, so if you decide that killing someone with the grapple (to say an example) is lame you can penalty the killer for making a frag. The good thing about the system is that if you kill someone with higher skill points than you, you’ll get more skill points, but if you keep fragging noobs, your skill points will increase very little.

For normal events (thaw, ctf events, suicide, teamkills, item pickup, ammo pickup, weapon pickup and a few more), a variant of the above calculation is used: you (the player to which the event is awarded) get skill points increased (or decreased in case of negative values, i.e. for suicides of team kills) by the same (1-prob_winning)*event_factor, using the average skill level of the enemy team in the probability calculation, and the same points are subtracted (or added) to the enemy team, making individual calculation for probability of losing against you to calculate how much will actually be subtracted (or added) to each player of the enemy team, so that the sum of the amounts are the same that will be increased (or decreased) to your points. Also, if the enemy team has less players than the winner, the skill points you’ll earn will be reduced by the factor players_of_loser_team/players_of_winner_team, so that the points are more carefully awarded on unbalanced teams. However, the opposite is not true: you won’t earn more points if the enemy team has more players than your team.

Team events are events that affects the entire team. They are only three: score (for round based and flag gametypes only, i.e. all team gametypes except team deathmatch), wins, and loses. They all are fired at the end of the match. The points are increased/decreased for every one of the team (even players that left earlier in the game or players that switched sides in the middle of the game) using the system explained in the previous section, and multiplied by the amount of events (wins and loses will always be one per game, but not for score). Also, team unbalance penalties/rewards are applied.

Permanent link to this article: