Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
50 lines (43 sloc) 7.05 KB


A UT2004 mutator that provides special team balancing rules for public Onslaught matches.


Team balance can be affected in many different ways:

  • Teams can be shuffled at match start in a way that tries to balance the potential team skill on both sides by aiming for only little difference in combined points per hour (PPH) for the players on each team
  • Particularly short first rounds (e.g. caused by skilled players joining shortly after match start) can be reset with another team shuffling and PPH balancing
  • After each round of a multi-round match, teams can be rebalanced to equal size
  • Players that join the match can be put specifically on the team that needs additional players
  • Players attempting to switch to the winning team can be forced to switch back to their original team
  • If teams get uneven during the match (e.g. due to leaving players), rebalancing by size can be triggered either automatically or on player request


INI setting Name in webadmin Default value Description
ActivationDelay Activation delay 10 Team balance checks only start after this number of seconds elapsed in the match.
MinDesiredFirstRoundDuration Minimum desired first round length (minutes) 5 If the first round is shorter than this number of minutes, scores are reset and the round is restarted with shuffled teams.
bShuffleTeamsAtMatchStart Shuffle teams at match start True Initially assign players to teams based on PPH from the previous matches to achieve even teams.
bRandomlyStartWithSidesSwapped Randomly start with sides swapped True Initially swap team bases randomly in 50% of matches.
bAssignConnectingPlayerTeam Assign connecting player's team True Override the team preference of a connecting player to balance team sizes.
bIgnoreConnectingPlayerTeamPreference Ignore connecting player team preference True Ignore player preferences for a team color, allowing the game or Even Match to pick a team.
bAnnounceTeamChange Announce team change True Players receive a reminder message of their team color whenever they respawn in a different team.
bIgnoreBotsForTeamSize Ignore bots for team size True Don't count bots when comparing team sizes.
bBalanceTeamsBetweenRounds Balance teams between rounds True Balance team sizes when a new round starts.
bBalanceTeamsWhilePlaying Automatically balance teams while playing True Apply balancing during a round if the game becomes one-sided due to team size differences.
bBalanceTeamsDuringOvertime Allow balance teams during overtime False Whether to allow team balancing after overtime started. Applies to automatic and player-requested balancing.
bBalanceTeamsOnPlayerRequest Allow balance teams on player request True Whether to allow players to balance teams via 'mutate teams' or the configured teams call chat text.
bBalanceTeamsOnAdminRequest Allow balance teams on admin request True Whether to allow admins to balance teams via 'mutate teams' or the configured teams call chat text.
bDisplayRoundProgressIndicator Display round progress indicator False Displays a HUD gauge indicating, how close to victory either team seems to be. (This isn't a team balance indicator!)
SmallTeamProgressThreshold Small team progress threshold 0.3 Switch players from the bigger team if the smaller team has less than this share of the total match progress.
SoftRebalanceDelay Soft rebalance delay 10 If teams stay unbalanced longer than this this, respawning players are switched to achieve rebalance.
ForcedRebalanceDelay Forced rebalance delay 30 If soft balancing is unsuccessful for longer than this this, alive players are switched to achieve rebalance.
SwitchToWinnerProgressLimit Switch to winner progress limit 0.6 Only allow players to switch teams if their new team has less than this share of the total match progress. (1.0: no limit)
ValuablePlayerRankingPct Valuable player ranking % 50 If players rank higher than percentage of the team (not counting bots), they are considered too valuable to be switched during rebalancing.
RecentBalancingPlayerTime Recent balancing player time 120 A player who was assigned to a new team by the balancer will be considered a 'recent balancer' for this number of seconds.
UndoSwitchCheckTime Undo switch check time 30 A player will usually not be allowed to undo a forced team switch by EvenMatch for this number of seconds.
MinPlayerCount Minimum player count 2 Minimum player count required before doing any kind of balancing.
TeamsCallString Teams call chat text (empty) Players can 'say' this text in the chat to manually trigger a team balance check as alternative to the console command 'mutate teams'.
DeletePlayerPPHAfterDaysNotSeen Delete a player's PPH after X days inactivity 30 To keep PPH data from piling up indefinitely, delete PPH of players who have not been seen in this number of days.
PlayerGameSecondsBeforeStoringPPH Player in-game seconds before storing PPH 60 A player must have accummulated at least this number of seconds play time in the current match before his or her PPH will be considered meaningful enough to store in the database.
PlayerMinScoreBeforeStoringPPH Player minimum score before storing PPH 10 A player must have scored at least this many points in the current match before his or her PPH will be considered meaningful enough to store in the database.


If you are a member of the Omnipotents or CEONSS communities, you can participate directly in the corresponding forums. Each of them has an Even Match thread in the Mappers' Corner and The Creative Corner, respectively. Of course you are also free to contribute code via pull requests or report issues via Github's issue tracker. You can also just fork this repository and modify the code yourself within the (very generous) bounds of the "license"/terms of use.

One final thing: If you are going to build your own version from source, please use a unique package name so it won't interfere with the "official" version. Colliding package names may cause a Version Mismatch error for players who come in contact with both versions. I recommend modifying Build\ProjectName.cfg in your fork to include a specific suffix identifying your builds.

To build your copy of the mutator, simply clone the repository (or check out the trunk via Subversion, if you prefer that) to any folder you like and run make.cmd. It will automatically attempt to locate your copy of UT2004 and create the necessary folder structure to compile the package. If you installed UT2004 somewhere in the Program Files folder, you will probably have to run the build script as administrator. (It is generally recommended to install Unreal Engine 1 and 2 games in a path without spaces that can be written to without adminsitrator privileges.)