Torn 5

Torn 5 is a ground-up rewrite of Torn 4. It is a tournament scores manager, and can read data from Nexus, Helios and Laserforce systems. It requires .NET Framework 4.0. Note that Torn 5 is currently in a Beta state — it mostly works, but not all features are complete, and there may be bugs. If you are using it to open Torn 4 files, I recommend keeping a safe backup of those .Torn files elsewhere, just in case.

Changes from Torn 4

If you're familiar with Torn 4, here's the very quick guide:

Quick Start

Run the program. Click Preferences. If you have a lasergame system, select the appropriate system and enter the laser game database server address.

Click OK. Click Latest. This will cause Torn to query the lasergame server. A list of games should appear.

On the Leagues toolbar, click New or Open. Torn 5 can open Torn 4 .Torn files. When it saves those files it will write extra information. The latest version of Torn 4 will ignore all that extra information, so you should be able to open the file in one, make changes, then open it in the other, and then back again. But after Torn 4 has opened the file, made changes and saved it again, the extra Torn 5 data will be missing. For your new (or newly opened) .Torn file, click in the Tag cell at the left of the .Torn file's row in the Leagues list. Enter a tag. This will be used as a sub-folder for this league's reports exports, so use a tag name that is a legal folder name (i.e. does not contain special characters like /\:*?"<>|).

If you like, you can open more league files. This is a difference between Torn 4 and Torn 5 — Torn 5 allows you to have several league files open at once.

Click a game to see its packs/players. Now you can do all the usual Torn things — right-click on a team box and Remember that team, Commit the game, Edit the league, etc.

Because the games listing is now an always-visible list instead of being a drop-down "combo box", you can now select multiple games. Some features work on all selected games — e.g. Forget will remove all the selected games from whatever league they had been committed to. Set Description lets you title committed games or groups of games: "Round 1", "Repechage 3", "Cascade 2", "Finals", etc. These titles will be shown in reports. Games present in the game server are shown in white. Games only present in Torn files are shown slightly greyed.

Reporting is different in Torn 5 — click Set Folder to set an initial folder for reports to be exported to. Then click Report. Torn 5 will export a default set of reports to that folder. Note that these will include details of each team, game and player. If you would like to configure different reports for the selected league, click Configure and then add reports as desired. You can select the output format of your reports: HTML SVG is prettiest, but cannot be imported into Excel etc.

If you select multiple leagues (select one, then hold down the ctrl key as you select more) and click Report, all the selected leagues will have reports exported.

If you have enabled the web server under Preferences, any web browser that can see the machine Torn is running on can view reports directly from Torn 5's latest data, without you needing to click Report. If you're running Torn on a computer called mymachine and you've left it on the default port of 8080, point a web browser at http://mymachine:8080 to see these interactive reports.

For P&C systems, for games that are still in the lasergame server, more data is shown: each game has a "heat map" showing who shot who and a "worm" showing teams' scores. But this (extensive) data is not stored in the .Torn file, so once the lasergame server purges that data and Torn is restarted, a fresh report will not contain this additional detail.

Things not yet implemented: fixture generation, pushing scores to a scoreboard, and a variety of other bits and bobs.

The Main Window

Torn's window is divided into several areas. At the top is the "ribbon" bar.

At the left is the Leagues list, showing the currently open leagues, with details on the currently focused league shown below it. (There's a splitter between the list and the details.)

To the right of the Leagues list is the Games list showing all the games Torn knows about (because they exist in an open .Torn file, or in the lasergame server database, or both). Clicking a game will show its details to the right.

To the right of the games list is the unallocated players box: players who are in the game focused in the games list but not yet allocated to a team will show here.

To the right of this are the team boxes. These hold players from a single team. If you need more team boxes, Click Add Row or Add Column in the Teams toolbar. Right-click on team box for a variety of functions, including changing the identity of the team or of a player, or applying a handicap.

Leagues

To Torn, a league is a collection of games, teams, players and scores. Each league is saved as a .Torn file.

New: create a new league and its coresponding .Torn file. Once you've done this you'll likely want to click in the Tag cell in the Leagues list and give this league a Tag. This will be used as a sub-folder for this league's reports exports, so use a tag name that is a legal folder name (i.e. does not contain special characters like /\:*?"<>|).

Open: Open one or more existing .Torn files. (This dialog supports multi-select.)

Save: Commit the .Torn file to disk. Most of the time you don't need this button: if you Commit a game, Edit the league, etc., your changes will be automatically saved.

Close: Remove the selected leagues from the Leagues list. (Of course, you can re-Open them later.)

Edit: Here you can set a title for the league file, edit team names and player line-ups, and set victory points for the league. (Victory points options are not yet quite as rich as those in Torn 4.) (Victory points need not be whole numbers.)

Preferences: brings up the Preferences dialog. These preferences are global to all of Torn, and are not specific to a league.

Fixtures: Torn 5 can import fixtures from text. (Generation of fixtures within Torn 5 is not yet supported.) Once generated, Torn 5 will serve a list of these games from its internal web server, and can export the fixtures as HTML for upload to the web. It will also endeavour to keep track of where you are up to in your fixtures — the Now page from its internal web server will endeavour to identify the game just played (from lasergame server data) and the next game (from fixtures) automatically.

The Fixtures dialog has seven tabs: Teams, Games as a list, Games as a grid, Graphic, Finals, Pyramid and Pyramid Round. On the Teams tab, you'll see a list of teams that the fixture system already knows about. If your league has teams, they will appear here. (League teams and fixture teams are technically separate under the hood.) If not, type or paste a list here, one team per row, and click Import.

The Games as a list page lets you import games for the teams you just created (or already have). If your games have three teams, each line should be a date/time followed by three numbers that represent teams. Existing games are not automatically cleared when you click Import; if you want to clear existing games, click Clear first.

The Games as a grid page is similar. Each row is a team; each column is a game.

The Graphics page gives you a graphical editor for fixtures. Pick colours by clicking a mouse button on the palette at the bottom left — e.g. if you click the middle mouse button on the pink box, the middle mouse button is now pink, and clicking on squares in the grid with the middle mouse button will clear them (if they were not already clear) or mark them as pink (if they were already clear). If your mouse has five buttons, all five can likely be assigned colours in this way.

At the bottom of the grid is a number showing how many teams are in each game. At the right are numbers showing how many games each team plays. To the right of that is a difficulty number, calculated by averaging the difficulty of all the teams this team plays against, plus a graph plotting those difficulties. To the right of that is the who-plays-who grid. When you click a square in the main grid, the who-plays-who grid highlights the selected team in silver, and the teams this team plays against in this game in the relevant colours.

At bottom right is a control for the size of the grid: set this larger to make grid squares larger.

At the moment the Graphics page assumes that teams are contiguously numbered — if you have deleted teams, thus leaving gaps in the numbering, this display may get a little out of whack.

Finals

The Finals page lets you set up finals schemes, such as Ascension, Format D, etc. Click the buttons for the various named finals schemes, or individually adjust parameters such as how many teams should be cut from each elimination game, how many tracks there should be, etc.

The team list shown at the left of the finals grid is from your team ladder. If it's not showing the order you want, adjust the settings on your Team Ladder report, then come back here.

Pyramids

The Pyramid tab is not yet implemented. The Pyramid round is though:

For tournaments with a large number of teams, with many teams in each game (such as solos, doubles and triples) the Pyramid round tool may be useful. In the Australasian ZLTAC tournament, we give a second chance repêchage round after each main round – so: round 1, repêchage 1, round 2, repêchage 2, etc.

To construct a repêchage round, select games in the list at the right and click on Edit Game(s). This pops a dialog where you can define details for the game, including how many teams from this particular game go to the repêchage. If your rule is “top 2 teams from each game advance” then you would fill this value in. For a game with 7 teams you would mark 5 teams to go to the repêchage; for a game with 8 teams you would mark 6 teams to go the repêchage; etc. Note that as you select games (and optionally specify number of teams from each), the value at the left for Number of teams from last round will change appropriately.

Set choices at the left, for the number of games, teams, etc., overriding the automatic values if necessary. For example, if your scheme is "top 10 teams overall advance" and you have 50 teams in the round, you would set Number of teams from last round to 40. Under Top or bottom, you want bottom for a repêchage – the way to get into the repêchage is to be low-scoring or low-ranking. Under Score or Rank, select appropriately for your nominated scheme. If you would like Torn to assign colours to teams, tick the Colour tick box.

As you make changes, a sample draw is updated in the bottom half of the window. Keep changing settings until it looks correct. We zig-zag down, so the top-ranked team in the draw (in the case of the repêchage, this is the "best of the worst" team) is at the top left, then we work across the games until we run out of games, then down to the second row, and right-to-left back across the second row.

Your selections in this window are remembered if you close the dialog (but not if you close and re-open Torn). So as you approach the end of the round, you can set up the repêchage with the last game of the round not yet decided, as a "practice" run. Before you display the draw to players, ensure that the results seem sensible: the bottom team is low on the draw, the team that just barely missed the cut is at the top left of the draw, teams appears only once each, etc.

For a round draw, you typically want to take the top teams from each game in the previous round, and the top teams from each repêchage game.

Games

Latest: clicking this button re-queries the lasergame server, and selects the most recent game in the list.

Commit: this button commits the details of this game, as shown in the team boxes at the right, to Torn's list of remembered games.

Set Description: lets you title committed games: "Round 1", "Repechage 3", "Cascade 2", "Finals", etc. These titles will be shown in reports.

Forget: removes the selected games from the league.

Teams

Add Row: Adds a row of team boxes.

Remove Row: Removes a row of team boxes.

Add Column: Adds a column of team boxes.

Remove Column: Removes a column of team boxes.

Remember Teams: for any teams in this game that aren't already on the list of teams in this league, Torn will add those teams to the league. You can then edit them under Leagues ▸ Edit.

Reports

Report: generates and saves a set of HTML reports for the selected leagues. If you have not used the Configure button to configure reports for a league, a default set will be used, which may include a team ladder, a games list, a games pyramid or games grid, and a solo ladder. Exactly what reports are in the default set depends on the type of league: if Torn recognises that you're using a pyramid-style fixture, it will include a games pyramid. If not, it won't. If it detects that you're titling groups of games, it will include a report for your semifinals and a report for your grand finals; if not, it won't. In addition to these "overview" reports, detailed reports will be generated for each game, team and player.

Upload: All files in the reports folder will be uploaded to the web site you specified in Preferences.

Print: Print whatever reports you have configured. Windows has print-to-PDF available as a default prionter device, so if you'd like to save reports as a PDF, that's how to do it.

Configure: If this dialog is empty, reports for this league will be the default set described above. If you add reports here, those will be used instead. These are configured per-league. This dialog does not have an OK button — changes you make here are immediate. You can select the output format of your reports: HTML SVG is prettiest, but cannot be imported into Excel etc.

Ad Hoc: Choose a report type, and set its various settings, and you'll see the report shown in a floating window. From the floating window you can save that report. That floating window doesn't block Torn -- it's "non-modal". That means you can do other things in Torn while the floating window is still open, including generating more ad hoc reports to their own floating windows.

Set Folder: lets you set a folder that your reports, when generated, will be exported to. This same folder is used for TSV reports and fixture exports.

Misc

Help: this document.

About: a brief About dialog.

Report Types

Reporting is my favourite part of the software, so it gets all the attention. There are a variety of report types available, detailed below.

For a report you can manually set a title. If you don't set one, Torn will make up a title based on the league name and the report type.

Filters

In the Filters section you can limit reports to games within a certain date/time range. You can also limit reports to games that you've given a particular description back on the main screen: if you've told Torn that a group of games are "Round Robin", and you set the report to only show games with description "Round Robin", that's what you'll get. There's no way to tell it to only show games with no description, so... give your games descriptions.

Drops

You can tell Torn to drop some scores: for example, drop each team's worst game. You can specify by number of games or by percentage. If each team has played four games and you want to drop their worst, but one team missed out a game and thus you want to count just the three they played, tell Torn to drop the worst 25% of games for each team. For teams that played all four games, that'll drop one game; for the team that played three, it'll drop zero games.

Chart Types

You can choose various chart types for various reports, though not every type makes sense for every report. Bar chart will show little embedded bar charts in the background of each cell. These are good where each cell holds a single value -- for example, in a game grid. Where cells hold many values (for example in a team ladder, where "Average Score" is, well, an average of many scores) the bar will show the aggregate (e.g. the average). Rug shows a series of "tick marks" along the bottom of the cell showing each value. So in a team ladder, that would be every individual score. Wikipedia has more. In Torn, if several tick marks coincide or nearly coincide, they stack vertically, into a sort of drunk histogram. Speaking of which, there's also an actual histogram option, which does what you'd expect. Much more technical is the kernel density estimate, only useful for large amounts of data (e.g. the Pack Report).

Clickability

If you export reports as HTML SVG or HTML tables, your reports will contain hyperlinks, which users can click to go to the appropriate place. Anywhere you see a team name, click it to see that team's stats page. Anywhere you see a player's name, click it to see that player's stats. Anywhere you see a game title or game time, click it to see details of that game.

Team Ladder

Team ladder to end of Round Robin from 28/02/2019 to 3/03/2019 Rank Team Points Average score Games 1 Spartans 70 43,459 12 2 Wolfpack 68 44,202 12 3 Brisbane Beavers 66 43,502 12

Illustration shown at left.

Rank teams by average score, score ratio, or victory points (with average score or score ratio as a tie-breaker).

You can tick a box to scale up teams with less games. This is useful when you are halfway through a round and you want to show a comparison of how well each team is going so far.

If you tick show colours you'll get columns in the report showing how many times each team places first, second, third, etc. on each colour. Whatever colours are used in your league are shown in the report.

You can limit the report to show only the top n teams, or to show only teams with at least n games.

If you tick longitudinal chart you'll get an extra column at the right of the report that shows how well each team did in each game.

Multi Team Ladder

2019 ZLTAC Team Ladders Round Robin Cascade 1 Cascade 2 Rank Team Points Average score Games Team Points Average score Games Team 1 Spartans 70 43,459 12 Wolfpack 100 42,248 6 Brisbane Beavers 2 Wolfpack 68 44,202 12 Spartans 100 39,705 6 Spartans 3 Brisbane Beavers 66 43,502 12 Brisbane Beavers 98 39,917 6 Wolfpack 4 GP 66 40,531 12 WA Grizzlies 90 37,419 6 GP 5 Queensland Ducks 64 39,320 12 GP 88 37,808 6 NZ Cobras

If you have set descriptions for groups of games, this report will show you several incremental ladders, showing the state of play at the end of each group of games. It also has arrows showing how teams rose and fell between groups. If a group description mentions "final" it will be ranked as if it were a grand final (i.e. scores from previous games don't count). If a group description mentions "semifinal", "semi final", "ascension", "format " or "track" it will be ranked as if it were an ascension (i.e. teams that survive longer are ranked higher).

Teams vs teams

2019 ZLTAC Teams vs Teams Team Spartans Brisbane Beavers GP Wolfpack Dragons Spartans 5/9 4/4 6/10 Brisbane Beavers 4/9 2/4 6/10 GP 0/4 2/4 1/6 Wolfpack 4/10 4/10 5/6

This report (illustrated) shows a square array of teams versus teams. Each cell within the array shows how many times those teams have won against each other. If a cell represents one game (because those teams have played each other exactly once), it will be hyperlinked, and clicking the link will take you to that game. If you choose the show average victory points option, then in addition to the number of wins you'll also see the average number of victory points the team scored in games against the other team.

Solo Ladder

The solo ladder has most of the same options as the team ladder. No show colours option though.

Game Reports

2019 ZLTAC Team Games from 28/02/2019 to 8/03/2019 Game Team Score Pts Team 28/02/2019 Round Robin 9:56 AM Spartans 53,400 6 WASP Round Robin 10:12 AM Sydney Basilisk 40,386 6 1up Round Robin 10:27 AM Dragons 49,139 6 Adelaide Aftershock Round Robin 10:43 AM Spartans 45,926 6 Box Hill Sentinels

Grand Finals for 8/03/2019 Grand Finals Rank Team 4:51 PM 5:12 PM 5:30 PM Average 1 Wolfpack 23,684 21,312 27,984 24,327 2 Brisbane Beavers 25,173 27,623 19,101 23,966 3 Spartans 22,772 27,774 21,003 23,850

A Game by game report (illustrated) shows games as a list, with each game being a single row in the list. It's useful when there's only a few teams in a game (e.g. a team game), and when there are lots of games in the league. It's not so good when there's lots of teams in a game (e.g. solos or doubles).

A Game grid (illustrated) shows results in a grid, with a row for each team and a column for each game. It's good when there's lots of teams in each game, but not all that many games (say 20 or less). It also has a column at the end for average score. If you configure the report to drop best/worst games, then the average will be on only the games not dropped. So this is handy for e.g. a finals series where you get to drop your worst score or whatever.

The Game grid condensed report (see Pyramid condensed illustration below right) is like the game grid, with each row being a team's results, but columns are condensed, so that each team's games are just shown in consecutive columns. If you have set descriptions for groups of games, then there will be groups of columns for each named group of games. The condensed grid is good when there are too many games for an ordinary game grid, but each team plays just a few games.

Pyramids

2019 ZLTAC Solos Games for 1/03/2019 Round 1 Rank Team Time Score Rank Time Score Rank 1 ninja 12:08 PM 6,750 1 1:13 PM 4,070 7 2 Bootza 12:42 PM 7,120 1 2:24 PM 5,730 3 3 lakeo 1:13 PM 5,020 2 2:49 PM 6,520 1 4 Blitz 1:02 PM 5,430 4 3:00 PM 2,840 18

The pyramid report is useful when you're running a competition that gradually eliminates teams that fail to make the cut each round. (We do this for ZLTAC solos, doubles and triples.) It's laid out in a similar way to the game grid: there is a row for each team and a column for each game. It ranks teams by the last round they survived into, and within rounds by average score. You'll need to set descriptions for the games, so the report can figure out which games are in each round.

The Pyramid condensed report (illustrated) still has a row for each team, but similar to the game grid condensed, it doesn't try to put each game in a column; instead just listing all a team's games across that team's row.

Ascension

An ascension report is like a game grid, with one team per row and one game per column, but teams are ranked by the last game they survived in. This is useful for semifinals series.

Colours

2019 ZLTAC Team Colour Performance Rank Green Red Blue 1st 113 110 90 2nd 104 108 101 3rd 96 95 122

In an arena where a particular colour may have an advantage or disadvantage because of arena layout, this report (illustrated) shows how many times each colour got each placing. This report can be good to give to teams before they have to make colour choices for e.g. semifinals or finals games.

Sanity Check Report

This report helps you pick up common errors: games with atypical numbers of players, players who have not been identified, games with no victory points where subsequent games do have victory points, etc.

Pack Report

[redacted] Pack Report Rank Pack Tag Ratio t p Count 1 [redacted] 174% 3.81 0.00014 58 2 [redacted] 119% 2.81 0.0049 131 3 [redacted] 115% 1.53 0.13 109

The pack report (illustrated) endeavours to tell you how "good" or "bad" packs are. It does this via Student's t-test.

Select one or more leagues (hold down the ctrl key to select additional leagues), then click Ad Hoc and select Pack Report.

If Torn 5 has hit data, it will fill in columns for tag ratios. Here's how those are calculated: first we generate a solo ladder showing how "good" each player is. Then, for each pack in each game, we scale the number of tags that pack scored against other players by the "goodness" of the player waering it: if the pack scored 50 hits in a game but was being worn by a player who was 125% as good as the average player, we scale that to 50 / 1.25 = 40 hits. Then we take the ratio of that to the number of tags the pack received during the game.

If Torn 5 does not have hit data (because this is Laserforce data, or because this is a Torn 4 file), it will show you the score ratio instead. This is calculated in exactly the same way as tag ratio. Score ratio isn't as good as tag ratio, because we're interested here in how good the pack is at tagging other packs versus how good it is at getting tagged, but if you don't have tag data it's a reasonable proxy.

You'll see t values and p values. The t value is how many standard deviations this pack is from the mean. Look at the p value — when this is very small, there's a high chance that this pack is "good" or "bad". Any p value greater than 0.01 can be ignored — it's likely due to change, or to that pack being a favourite of particular players, etc. (You often see a level of p < 0.05 being used, but this is only appropriate when we're testing a single variable. Here we're testing one variable for each pack. The description at the bottom of the report offers a conservative p value threshold for the number of packs shown.)

Small p values will be highlighted in pink. Very small p values will be highlighted in red. These red packs are of concern — a "good" pack might have some faulty sensors; a "bad" pack might have weak IR, etc.

If pack hardware has been re-arranged (e.g. you've swapped guns between packs) or renumbered midway through data collection (e.g. you re-ID'ed packs to prevent players from picking favourites), these things will of course limit data quality.

If you tick the longitudinal checkbox, you'll get an extra column showing when each pack played and how well it did. Higher is better.

Tech Report

This report shows the number of times each pack got hit in each location in the average game. Like the pack report, if you generate this from Ad Hoc, you can select more than one league as input. But if you do this, be sure to only select leagues that are comparable to each other -- players are going to get hit a lot less in an elimination game format, for example.

If you see a pack getting hit a lot less than other packs in its left shoulder, for example, that pack might have a problem.

Everything Report

List every player in every game. Useful for data export. Export to TSV (tab-separated values) for easiest import into other tools.

Web Server

Torn 5 has an internal web server. You can enable/disable it from Preferences. You can also set its port number. The default, 8080, is a common port number for web servers that don't want to get in the way of anything else on the same machine that might be using port 80. If you're confident that nothing else is using port 80, you can set it to that if you like.

If you're running Torn on a computer called mymachine and you've left it on the default port of 8080, point a web browser at http://mymachine:8080. From the computer running Torn 5, you can use http://localhost:8080.

There's a scoreboard showing the most recent committed game at http://localhost:8080/[tag]/scoreboard.html, where [tag] is the tag you set for this league file. This doesn't auto-refresh when new games are committed, so you'll have to press F5 to cause that refresh.

In addition to HTML, Torn 5's internal web server will serve JSON.

The object of all this is to eventually allow a remote copy of Torn 5 to pull the statistics it needs from a lasergame server via a local copy of Torn 5 — the local copy pulls results from the lasergame server and in turn passes them as JSON to the remote copy of Torn 5. This avoids any need to directly expose the lasergame server to the internet. But this feature isn't well tested. It's also eventually intended to be able to push these files from the local Torn 5 to a web location, so that a remote Torn 5 can query those static files from an ordinary web server. This isn't implemented.

Download

Torn 5 can be downloaded from my Apps page. The source code is available from my GitHub page.