WarLight turns four

It was four years ago today that I first started working on WarLight.

WarLight also surpassed a more impressive statistic this month than just its age. Over one million multi-player games of WarLight have now played through to completion. That’s a lot of games!

And every single one of these games is still in the WarLight database available to be viewed by its players at any time. This is one of my favorite features of WarLight. Not many games allow you to go back and watch yourself playing the game three years ago.

WarLight for Android alpha now available to all members

An alpha version of the WarLight client for Android is now available to all WarLight members!

Keep in mind that this is an alpha release. That means that it’s an unfinished product, and there are some features still missing or incomplete. However, it works well enough to take your turn in multi-player games. See mobile client on the wiki for a list of features not yet implemented.

Installation

Check out this wiki page for step-by-step instructions on how to install WarLight on your Android device: Installation Instructions

Feedback

I’d like to hear how well it works on your device! If you run into problems I’d definitely like to know about it, but even if everything is working great I’d like to hear that too. Send me e-mail at fizzer@warlight.net.

If it works on your device, it would also be great if you’d add your device name to the list of known working devices if it’s not already there.

WarLight update: 1.11

WarLight has just been updated! This blog post contains a summary of what changed.

Tournament Stats on Profiles

Players can now choose tournaments that they want to display on their profile! You can do this right now! Just click here and pick which tournaments you’d like to display.

Your profile will show a link to the tournament, as well as what place (1st, 2nd, etc.) you received if you received a place. For round-robin tournaments, all players are given a place, but for single and double-elimination only 1st and 2nd show up.

Overridden Bonus Links

When a bonus’s value is changed by a game creator, the bonus link for that bonus now uses a white border instead of yellow. This makes it a bit easier to spot which are overridden.

Further, when an overridden bonus’s number is large, it now protrudes outside of the bonus link instead of just getting cut off.

Misc Changes

– As announced in the previous blog post, WarLight’s messaging protocol is now backwards compatible.
– This release also contains something Android-related, but this deserves its own blog post, which will be posted within the next day or two.
– The maximum number of favorite games has been upped from 10 to 15. The page to modify them has also been updated to be more user friendly.
– Tournament creators can now have 5 simultaneous open tournaments instead of 2.
– A message now pops up when players do an action that causes their vacation to end. This makes it much easier to tell what’s going on with your vacation.
– E-mails are now sent to players when they first establish a ladder rank.
– When previewing a forum reply, the subject line is now shown.
– When making a post to a forum thread that creates a new page, you’re now taken to the new page instead of the current one.
– Single-player no longer displays announcements.
– The page to change an account’s e-mail address has been updated to be more user friendly.
– Added a limit to the number of open games that any one player can create at once. This helps keep the Open Games page from getting cluttered with tons of duplicates. Non-members may have 3, members may have 10.
– Games with open seats that never started are now deleted after a while if it’s clear the owner has no interest in reviving them. Real-time games are deleted 24 hours after the open seats expire, and multi-day games are deleted 10 days after the open seats expire.
– Fixed a bug that caused the booted duration to show as 0 minutes when booted players were configured to turn into AIs, and the boot caused the turn to advance.
– Fixed a bug that caused the Settings tab show a cached value for the date your vacation ended, which may have been inaccurate if a player just did something that made their vacation end.
– Fixed a bug that made the Open Games tab not show boot times for games you were in.
– Fixed a bug that made no wastelands appear when the number of players invited matched the number of territories in the selected distribution.
– Fixed a bug that broke the Bayeselo logs when someone used a greater-than sign in their name.
– Fixed a bug that caused army numbers to show incorrectly in rare circumstances after clicking Skip To End while the map was panning.
– Fixed a bug in the map designer that could allow territories to connect or disconnect when not on the connection tool.
– Fixed a bug that occurred if you tried to change your name to a name that contained an ampersand.
– Fixed a bug that caused templates to say (deleted) when a game was created based on the settings of a game that didn’t use a template.
– Fixed a bug in the map designer that caused an error if you deleted the default distribution mode.

Backwards Compatible Protocol

Warning: This post is more technical than most. If you don’t care about how WarLight works behind the scenes, you can skip this one.

I’ve been working on some long-needed improvements to WarLight’s messaging protocol. This is what WarLight uses to talk between the Flash client or mobile client and the WarLight server.

The Problem

Today, the WarLight server can only communicate with clients that are running the latest version of WarLight. Any time the server updates, all of the clients must update at the same time to be able to play the game.

If the server gets a message from a client that didn’t update, it sends down a “client out of date” error. The Flash client deals with this error by displaying a message that says “WarLight has recently updated. Please refresh your browser.” Players who keep WarLight open 24/7 are likely familiar with this message, as they are forced to refresh every time I update the server.

Up until now, this message has only been a minor annoyance. Updating the version of a Flash app is fairly painless, as all players have to do is hit their browser’s refresh button. However, updating an iPhone or Android app takes a lot more work. There are app store approval processes to go through, and even once it’s approved it can take time for the update to be pushed out to everyone’s phones, and even then many phones require players to manually update the app. Having the WarLight app be unusable for all of this time every time the server updates isn’t an acceptable user experience.

Backwards Compatible WarLight Server

To fix this, I’ve modified the WarLight server to be backwards compatible. This means that it knows how to talk to clients of any version, not just the latest. Although the main driving force behind this is for the upcoming iPhone and Android versions, this is beneficial for Flash players too:

  1. Refreshing the browser won’t be required anymore when the server updates. It’s still a good idea to refresh at some point, as you won’t see any new features or get bug fixes without it. But the important thing is that it isn’t required, which means I can deploy server updates without interrupting players or real-time games. This eliminates a lot of work for me, as in the past I’ve had to announce updates in advance and put pop-up warnings in place to ensure players knew they were about to be interrupted.
  2. Since server updates are seamless, the time between deployments can be lower. When a bug is reported, I often have to simply say “this will be fixed in the next release” and sometimes it can take weeks for the next release to arrive. Now that updating the server doesn’t impact players, I can update as often as I want, which means that bugs can get fixed quicker. It also means I don’t need to schedule updates for the middle of the night, and instead and just update whenever it’s ready.
  3. This fixes a long-standing issue with single-player games not being recorded. If someone started a single-player level right before an update, and won after the update, the server would not know how to read their “I won” message from their out-of-date client and would instead just tell them to refresh their browser. To counter-act this, the single-player version of the game today checks the server once every 10 minutes to see if an update was coming, and tell the user to save their game for later. While this stopped players from being denied wins (as long as they don’t ignore the instruction), it still isn’t a great experience. With this new update, players won’t even know that the server updated. Everything will just work.
  4. In the past, these blog posts have always announced updates ahead of time. This was good to give an advance notice of an upcoming update, so players could make sure they didn’t start real-time games just before the update. Now that real-time games can play right through an update, I’m going to start posting about new features after they’re deployed. This is better for you, loyal blog reader, since it means that when you read about a new feature on the blog you can go check it out right away instead of having to wait.

It may not be an exciting update, but it’s a necessary prerequisite for WarLight moving forward onto other platforms.

Season II

Season II will be a 1v1 match like Season I, except this time each player will receive a diplomacy card that lasts for two turns. Since the diplomacy card stops all fighting between two players, and there are only two players in a 1v1 match, the card will essentially stop all fighting for two turns. However, neutrals are still attackable.

It is your job to figure out how this affects the your strategy. The diplomacy break could give you a chance to move defensive armies into position, give you time to travel towards to an opponent’s far-away bonus, or just allow you time to capture that bonus that you had almost completed.

Full settings:

– Each player gets exactly one diplomacy card and will never receive more. The diplomacy effect will last for two turns.
– Light Fog, just like Season I
– Cyclic move order instead of random, just like Season I
– In-distribution neutrals is back to the normal 4, unlike the 0 in Season I
– Number of cards you can hold without being forced to play one is increased from 4 to 5, to account for the diplomacy card.

You can use this template if you want to practice.

Joining Season II

If you already joined the seasonal ladder for Season I, you’re already joined to Season II and you don’t need to do anything. If you never joined Season I, or you left it, you must re-join the ladder to be in Season II here.

If you played in Season I and don’t want to play in season II, you must leave the ladder here.

Season I Results

Congrats to Rubik87 for winning Season I!

I wanted to talk a little about the final results. Some have noticed that the winner went 14-1, whereas the runner up, Yeon, went 15-0. Yeon was the only player to go undefeated in Season I.

In the ratings algorithm, how strong your opponents are is a big factor in determining the final rank. A player who plays really strong opponents is often rated higher than a player with a better record who played weaker opponents. The issue here isn’t with the ratings algorithm is behaving correctly, but rather the issue has to do with the fact that the seasonal ladder does not give you an option to choose who you play against. It’s tough to tell someone that they’re not #1 when they played flawlessly, especially when players above them didn’t.

To address this, a few changes are being made for Season II. The biggest change is that the ladder now tries a lot harder to give players games against players nearer to their skill level. This means that you have a lot more control over who your opponents are. Win your early games and you’ll be rewarded with stronger opponents. This will also help the matchups be more exciting.

Second, 20 games are going to be played instead of 15. In Season I, I was worried some of the less active players would find 20 games too overwhelming, but given that it’s easy to sit out a season, I think that it’s okay to be more aggressive for those who want to play more. Having more games helps the rating system get a better picture of your skill level.

I don’t think anyone will go undefeated this time – feel free to try and prove me wrong :)

WarLight update: 1.10

Today at 3pm GMT (11pm PST), WarLight will be updated to version 1.10.0. The update should only take a few minutes, however it will require players to refresh their browser so please plan ahead for potential interruptions to real-time games. I’m working on a system to allow updates to happen seamlessly, so downtime won’t be required, so hopefully these types of interruptions can be minimized in future releases.

Instead of one big feature, this update contains a lot of small improvements to the site and a long list of bug fixes.

Bonus Border Color

When a player controls a territory whose border is the same color as they are, the border is now displayed slightly lighter. This ensures that the territory borders are always visible, even when a player controls a bonus that is the same color as they are.

Bulk Remove from Invite List

The Manage Invite List page is getting a new tool that will allow you to remove all inactive players from your invite list. Just click Bulk Remove and the site will give you an option to specify how many days inactive the player must be for them to be removed, or you can just enter 0 to remove everyone.

Tournament Interface Improvements

The tournament interface is getting some long-needed improvements.

First off, the display of single-elimination and double-elimination tournaments has been updated to fit better within the space allotted. Namely trading vertical space for horizontal space since vertical space is at a premium. Also, the game boxes are displayed in a lighter color once the game has begun so it’s easier to tell at a glance how far along a tournament is.

Second, you can now highlight the games of any specific player, just like how your own games are highlighted. To do this, just click their name in the bottom players list and click the new Highlight Games button. This makes it much easier to check the progress of another player.

Lastly, the performance of loading large tournaments has been improved significantly. This is done by not initially showing declined and invited players in the players list. If you do want to see declined and invited players, a new button is provided to show them. Further, declining tournaments no longer invokes a full refresh, so declining tournaments is even faster yet.

Ladder Tweaks

The 1 v 1 ladder now requires 15 games to receive a rank instead of 10. This will help bring more stability to the ladder.

Season II of the seasonal ladder will play 20 games instead of 15 like in Season I. Four games will be created on the first day and one more every three days after that. Further, the seasonal ladder has been adjusted so players are more likely to receive games against players closer to their skill level. The game settings for Season II will be announced once Season I ends.

Abandoned Games

WarLight will now enforce a new policy around games that are started but then are abandoned by their players. If a game goes over 101 days without advancing, the players holding it up will be sent a warning e-mail. Two weeks after the warning e-mail, they’ll be auto-booted, regardless of whether or not the game had auto-boot enabled.

The purpose of this is to clean up some of the stale games. There are some games that haven’t advanced in over 1000 days! This will allow the games to be archived, which will increase the speed of the site, namely the My Games page.

Games that are still in the lobby after the two-week warning will just be deleted, unless they’re tournament games, in which case the players will be force-joined.

101 days is a minimum. The system isn’t super aggressive about sending out warning e-mails, so it may not send them out on exactly day 101. It will get around to it usually within a week.

Template Improvements

When creating a game with a template that you created, the boot times and game pace (multi-day versus real-time) will now be defaulted to the values saved in the template. This makes it faster to create games when using a template.

Misc Changes

– In real time games, the clock no longer makes an audible tick if you’re not alive in the game anymore (eliminated, booted, etc.)
– Real-time games are now eligible to be archived 24 hours after they finish. Multi-day games continue to wait 10 days before archiving.
– Creating a game or accepting an open seat now cause vacations to end. This stops trolls from activating a vacation and joining/creating a bunch of games that won’t be able to advance.
– The change name page now asks for confirmation to ensure players know they can only change their name every 20 days.
– The automatic panning now waits half a second after showing a successful attack before panning, to give you a chance to see the results of the attack.
– Fixed a bug in the map designer’s SVG parser that would cause strokes to not scale along with an object.
– Fixed a bug that caused templates created on the single-player tab to not include yourself.
– Fixed bugs around game loading that caused games to be left in unusable states when connection failures occurred.
– Fixed a bug that caused playing the same game from multiple browsers to not update each-other in some cases.
– Fixed the Home and Community tabs, as their words were a pixel or two off when selected.
– Fixed a bug that caused a surrender email to be sent when a player that had turned into an AI surrendered.
– Fixed a bug that caused an error message when a teammate played a card that you were in the middle of playing if the card involved UI (blockade, spy, gift, etc.)
– Fixed a bug that caused an error message if you started to play a card that involved UI, but then opened up the cards dialog, discarded it, then finished playing the card.
– Fixed a bug that caused an error message if you started to play a card that involved UI then double-clicked its submit button.
– Fixed a bug when creating games that caused the “Create Game” button to not be visible if there were too many teams.
– Fixed a bug that caused the private message box to be active even when a game is archived and can’t receive new chat.

TrueSkill

I’ve been experimenting with TrueSkill as a potential replacement for the Bayesian ELO that the ladders use.

I’ve put together a small sample app (download at the bottom of this post) that will calculate the ratings of players using the TrueSkill algorithm. This can be used to compare the results of the algorithms side-by-side. Below is the top 30 results of the 1v1 ladder, as of the date of this blog post.

TrueSkill Bayesian ELO
Rank Player                  Rating     Wins Losses
---------------------------------------------------
1    zaeban                  2421.536   41   6
2    Gui                     2372.826   15   2
3    AceWindu                2354.958   17   3
4    Rubik87                 2308.389   32   8
5    unknownsoldier          2287.282   20   7
6    Heyheuhei               2264.112   62   23
7    Eitz                    2258.755   31   11
8    NuckLuck                2254.831   16   5
9    ????V                   2210.151   29   11
10   ????Chaos               2205.284   20   2
11   chas                    2203.465   36   15
12   Oliebol                 2187.576   21   8
13   20AquaHolic             2158.945   61   31
14   Yeon                    2151.634   18   6
15   13CHRIS37               2143.782   44   16
16   DrTypeSomething         2098.338   18   6
17   WMMekBlaze              2098.327   18   4
18   TheEmperorCornInMyTight 2079.722   61   29
19   MonsenhorChacina        2075.971   9    3
20   Mian                    2072.797   23   10
21   Hroptatyr               2071.86    26   12
22   PaniX                   2069.742   16   9
23   bytjie                  2037.808   20   11
24   Xyphistor               2018.273   71   39
25   alababi                 2010.574   18   8
26   REGLMentysh             2005.368   28   17
27   WMDazedInsane           1992.604   24   9
28   20TheWindowCleaner      1988.566   15   5
29   JimH                    1985.033   33   18
30   Tor                     1978.475   24   17
Rank Name                        Elo
------------------------------------
   1 AceWindu                   2176
   2 Gui                        2163
   3 zaeban                     2130
   4 ????Chaos                  2085
   5 NuckLuck                   2060
   6 Rubik87                    2042
   7 unknownsoldier             2039
   8 MonsenhorChacina           2029
   9 zibik21                    2021
  10 WMMekBlaze                 2004
  11 ????V                      1995
  12 Yeon                       1992
  13 Eitz                       1989
  14 Oliebol                    1981
  15 20TheWindowCleaner         1977
  16 Heyheuhei                  1963
  17 DrTypeSomething            1961
  18 chas                       1954
  19 PaniX                      1950
  20 Troll                      1943
  21 13CHRIS37                  1935
  22 TheImpaller                1933
  23 Mian                       1927
  24 fwiw                       1917
  25 alababi                    1907
  26 Hroptatyr                  1904
  27 LilEitz                    1892
  28 bytjie                     1886
  29 WMDazedInsane              1882
  30 Fizzer                     1879

The ratings are not important, just the ordering of the players. The wins and losses are only specified in the left table, but these are comparisons over the same games so the numbers are the same for both sides.

Even though Bayesian ELO is what the site uses now, you might notice some differences between the right table and what WarLight.net shows today. They’re not identical since WarLight doesn’t give ranks to players who have left the ladder, don’t have 10 games yet, or are on vacation.

Algorithm Differences

There are advantages and disadvantages between the two algorithms. The biggest difference is that the ripple effect that Bayesian ELO uses is not existent in TrueSkill. That is, when a game ends, Bayesian ELO applies the biggest changes to the players who played that game, but also applies smaller adjustments to everyone who has played either of those players, and so on.

The nice thing about TrueSkill is that when a game ends, you can immediately know how many rating points you gained or lost. Your rating also only changes when you finish a game. This also means that you can see exactly how your rating got to its current location, as each game can show its affect on your rating.

The disadvantage of this is that *when* you defeat an opponent matters. Say player A rises from #30 to #1 on the ladder. If you defeat player A when they’re at #1, you’ll get a much bigger ratings boost than you would have if you defeated them when they were #30. This isn’t true in Bayesian ELO, since the rating points you got from defeating player A rise as they rise up the ladder.

This is most visible in contrived examples. Say Player A defeat B, B defeats C, and then C defeats A. In Bayesian ELO, all three players would be tied, as their victories form a perfect triangle, evening each other out. In TrueSkill, player C would be the highest ranked, since they defeated A who was the #1 ranked player at the time of their game.

Running TrueSkill Simulations

As mentioned above, I wrote a command-line tool that allows you to run simulations of WarLight ladders with the TrueSkill algorithm.

You can download this tool from this link: WLTrueSkill.exe.

On Windows, this requires .NET 4.0 runtime to be installed. On Mac or Linux, the tool should work fine under a recent version of Mono.

To use the tool, simply feed it one of the Bayeselo Logs linked from the wiki. For example:

WLTrueSkill < BayeseloLog0.txt

By running the program with an argument of /?, you can see some additional options.

Feedback

I'm considering using TrueSkill for Season II as a trial run. Let me know your thoughts!

Small update: 1.09.3

On Monday, January 9th at 8am GMT (midnight PST), WarLight will be updated to version 1.09.3. While the update is taking place, the website will be down for a short time. If all goes well, the downtime should last for less than 30 minutes.

The primary purpose behind this update is to add support for the upcoming Android preview. However, some other features snuck in as well.

Tips during Load

While WarLight is loading, it now shows basic information about the game. This is just a way to help teach players a few tips they might not know while they wait for the game to load. For example:

Profile Ladder Stats

Players can now control which ladder stats are shown on their profile. If there’s one you don’t want shown, you can turn it off by editing your profile and clicking the new “Show or Hide Ladder Stats” button.

Further, stats shown for the 2v2 ladder have been improved, especially in the case where players have played the 2v2 ladder multiple times with different partners. Not only does it show what rank you achieved with each partner, but it also allows you to choose which partners you wish to show on your profile and which you wish to hide.

Show Example Armies

When creating a map, there’s now a new button named Show Example Armies that will place a two-digit army number into every territory at its center point. This helps visualize how big the army numbers will be without having to go through the trouble of creating a test game.

This is useful for two main reasons:

1. When trying to place the center point, having an example army number shown makes it much easier to get the center point dead-on instead of having to guess.
2. Having the army number shown is an easy way to see if your small territories are too small. Since all territories must be big enough to fit their army number, this helps find out if a territory is big enough.

Failed Attack Visibility in the Fog

There’s a minor change being made to the way attacks show up in fog games.

If you issue an attack, but then lose the territory before the attack happens, the attack won’t take place. The tooltip for that attack just says “This order could not be executed.”

If you don’t have any adjacent territories at the time of the failed attack, WarLight won’t even show you that the attack was there and failed. This was a really odd behavior, especially since your opponents could see the failed attack since they had adjacent territories. You could see the attack in a no-fog game or after the game ended, but not during the game.

Now, WarLight will always show you the failed attacks you made even if you don’t have adjacent territories. This doesn’t reveal any more information, so this is not game-changing in any way. However, it eliminates a point of confusion that new players often hit, since they remember that they issued an attack but WarLight doesn’t show it to them. Now, it will show them the attack at its place in the turn, which will make it clear why the attack didn’t happen.

Misc Changes

– Fixed bugs with the APIs GameFeed and GameIDFeed that caused them to fail on some archived games.
– Fixed a bug that caused there to be too many teams when copying a team tournament game’s settings.
– Fixed a bug that caused players who had left the seasonal ladder to not be ranked. All players with 5 completed games should get a rank.
– The ladder pages for seasonal ladders now indicate if a player has left the seasonal ladder.
– Fixed a bug on the map designer that caused green lines that wrap around the map to appear incorrectly on very large maps.
– Fixed a bug that caused Azerbaijan’s thumbnails to not appear.

Sign up for the Android preview

If you’re a WarLight member and want to help test the WarLight app for Android, please fill out this form. EDIT: Link taken down. Thanks to everyone who signed up!

The goal of this preview is to test the WarLight app for Android on a variety of devices to help iron out any bugs. I can’t guarantee it will work on your device, however I will do my best to make it work on as many as possible. All devices running Android 2.1 or higher are eligible.

Keep in mind that the app can’t quite do everything that the Flash version can yet, as this is just a preview and not the finished app. However, it does enough to play your multi-player games — all settings, cards, and maps are supported.

WarLight in 2011

WarLight has come a long way in 2011.

I’m amazed when I think back to what WarLight was like a year ago. The site was still in beta, and none of the ladders existed. You couldn’t save your own templates, so creating games required that you manually enter every setting every time. No auto-boot existed, so tournaments would frequently get stalled whenever one game would get abandoned.

The list of features added in 2011 goes on and on. Custom scenarios, the dashboard, the statistics panel, open tournaments, the wiki, new graphics, vacations, map categories, ability to save single-player games, the stand-alone client, and music. Wow!

WarLight has five times as many active players now as it did when 2011 started. Although WarLight has been up since 2008, 2011 hosted more than four times as many WarLight games as all the other years combined!

Mobile Update

Although I’m proud of the above list of features, those were all actually secondary goals. In fact, I spent more than half of my time in 2011 working on iPhone and Android versions of WarLight. All of the features listed above were actually completed in periods where I took breaks from working on the mobile client.

I’m committed to making WarLight a cross-platform game. WarLight is a perfect game for mobile devices due to its asynchronous nature. Unlike other multi-player games where you have to be online at the same time as your opponents, WarLight allows you to take your phone out of your pocket whenever you have a free moment, enter your orders, and put it right back.

A prototype of WarLight for the iPhone already exists, but unfortunately due to Apple’s restrictions I can’t release it until it’s ready for the app store. It may be some time until it’s polished enough for the app store, but there should be room for a few lucky testers once it gets further along. Opportunities for testers will be announced on the blog.

Over the last month I’ve been working on getting Android version ready for a preview release. Android is great in that Google allows people to install apps off the web, so WarLight will be able to release previews. Stay tuned to the blog for news on a preview of the Android client, coming soon!

Looking Forward

2011 was a great year for WarLight, but it’s definitely not the end. This was the first complete year that I worked on WarLight full-time, and I have no intentions of stopping or moving on to a new game. I still view WarLight as a very young game. I want WarLight to be the best play-by-email game in existence and to be playable on as many platforms as possible.

I’m constantly amazed that, even after living and breathing WarLight for almost four years now, I’m still not tired of the game! It’s rare for a game to stay fun for its developers after so long.

I expect 2012 to be an even bigger year for WarLight. So thanks for playing, and have a happy new year!