Repeat elimination knockout tournaments
JavaScript Shell
Clone or download
Latest commit 8b27c11 Sep 6, 2017
Failed to load latest commit information.
.gitignore move back to single file as exports and conditionally include coverag… Jul 25, 2014
.travis.yml automated change of .travis.yml to enable email notifications - https… Feb 6, 2016 got full coverage of ffasub now Dec 6, 2015
LICENSE swap jscoverage for istanbul, lint tests, and run on node 4 Oct 19, 2015
ffasub.js lint Feb 20, 2016
masters.js lint Dec 6, 2015
package.json mail update Aug 29, 2017

Masters tournaments

npm status build status dependency status coverage status


Masters tournaments consist of a pool of players, repeatedly fighting against each other and gradually reducing the number of players each round. We specify the number of players to knock out each round as an array of integers.

This tournament is a special case of an FFA tournament but with the sizes set equal to the number of players in each round to ensure one match per round.


Simply specify the number of players and an array of numbers to knock out per rounds. The resulting tournament will have the same number of matches as that array's length + 1.

// 5p match -> 4p match -> 3p match -> 2p final
var trn = new Masters(5);

// see below
var trn = new Masters(10, { knockouts: [3, 2, 2] });

This example will create:

  • 10 player match in round 1
  • 7 player match in round 2
  • 5 player match in round 3
  • 3 player (final) match


Limits adds a way to ensure we get the top n players from the final without having to do re-matches. Set the limit: n on the third options argument to the constructor to activate this.

This will simly engage a disambiguation clause for the final match.

Match Ids

Like all tournament types, matches have an id object that contains three values all in {1, 2, ...}:

  s: Number, // the bracket - always 1 - only WB supported
  r: Number, // the round number in the current bracket
  m: Number  // the match number - always 1 - only single match rounds supported

Finding matches

All the normal Base class helper methods exist on a Duel instance. That said, masters are so simple you can do this very simply anyway:

var r1 = trn.findMatches({ r: 1 });
// NB: equivalent to: [trn.matches[0]]

var firstThreeRounds = trn.findMatchesRanged({}, { r: 3 });
// NB: equivalent to: trn.matches.slice(0, 3)

var upcomingForSeed1 = trn.upcoming(1);
var matchesForSeed1 = trn.matchesFor(1);

Scoring Matches

Call trn.hscore(id, [player0Score, player1Score, ...]) as for every match played. The trn.unscorable(id, scoreArray) will tell you whether the score is valid. Read the entry in the tournament commonalities doc.

NB: Ambiguity restriction

Masters allow for ties everywhere except between the first knocked out player and the last advancing player. In the final, ties are fully allowed, so multiple players can share the first place. Check for this if it's unsuited to your game/application.

Special Methods



MIT-Licensed. See LICENSE file for details.