Rotates.org

February 21, 2013 - UI and the lobby

I’ve spent the last two months refactoring a lot of code, tidying up and making everything more manageable. I’ve also spent the time working on implementing a Feathers-based GUI so that the game works more like a game should (i.e. with an opening screen, the ability to select which game you want to play and so on).

I won’t lie, Feathers has been difficult to get my head around – it seems to be an excellent library once you’ve sussed it out, but it’s not well documented (relying mainly on examples rather than proper documentation, and leaving you to even look at the library’s code itself to figure some things out) and took me a long time to get comfortable with. The upshot is I now have a very nice, fast, flexible native-feeling interface to Archaos which will work the same on all platforms.

You can see a short video of me demonstrating it on my desktop below – and you’ll just have to take my word for it that it works just as well on a mobile device 😉

None of what you see here is mocked up – the games you’ve joined or created are being retrieved from the server, and their details are being displayed. The isometric mini-map shows a real-time view of the game, and will update even while you view it from the lobby.

More features will need to be added to make the lobby fully featured, such as an interface that allows you to add friends (and so see their newly created games and join them), the ability to sort and filter the games by various criteria and of course the ‘create new game’ screen itself, where you’ll be able to set things such as the board size, maximum number of players, round/turn lengths and so on.

One last thing – I had a discussion with one of my friends about Archaos and realised that the words I was using to describe various things didn’t make sense. Because of this conversation I’ve settled on the following:

  • Board: The rectangular grid upon which the game is played.
  • Unit: A piece on the board, be it a wizard, wall, creature or corpse.
  • Turn: An individual player’s ‘go’ – i.e. selecting a spell, casting a spell or moving his/her units.
  • Phase: The three distinct gameplay segments, consisting of spell selection, spell casting and unit movement. Technically a fourth non-playable phase happens after spell casting and before unit movement, in which gooey blobs and magic fire spread, magic wood and castles/citadels may disappear and so on. Other phases may be introduced with new game modes.
  • Round: One set of phases, beginning in Classic mode with spell selection, and ending after the last player’s turn in the unit movement phase.

This means that each round has several phases, and within each phase each active player has a turn. Not all phases force the players to take turns one after the other – the spell selection phase will allow all players to select their spells together, and the phase will only end when either all of the players have selected a spell (or cancelled) or the time runs out for that phase. The spell casting and movement phases that follow will work as normal, with every player taking their turn one after another in the correct order. Timers here will work on an individual’s turn, so each player will have (for instance) five minutes to cast their spell, before the game cancels their turn and moves on to the next player. The same goes for the movement phase’s turns. All of this will of course be configurable upon creation of a new game.

November 14, 2012 - Meet the cast

I’m happy (for now) with the performance I’m getting on all tested devices, and so I’ve spent the last few days on the units and visual tweaks. The coloured background is now back in (and more subtle, like the original concepts I posted before) and I’ve painstakingly redrawn each of the original creatures from the game, keeping as true to the originals as I can while injecting a bit more detail and colour variation.

Plenty for the blobs to eat…

One of the important factors for me is to give every unit a distinct presence. I’ve kept myself within a relatively small palette of colours, but tried to ensure that every unit is easily discernible. My first test had Hydras, Green Dragons, Gooey Blobs and to a lesser extent Crocodiles all looking very similar due to them using the same green. I’ve now varied the colours a bit to make the Hydra more yellowish, and given the Crocodile a tan belly. This will help when the board gets cluttered with units – especially given the isometric perspective which serves to make the board look even more hectic.

There are a few units I’m not entirely happy with at the moment – the Gryphon looks a little bit like a big goose or something, and needs to look more eagle-like. The Wall presented an interesting challenge and I decided it’d be best if I rendered it isometrically. I may yet do the same for the other large structural units too (i.e. Dark Citadel and Magic Castle).

The ‘classic’ unit set comprises 286 separate sprites, with separate sprites for left and right (because of the edge lighting always being on the right)  although some units end up with duplicates for various reasons; the Gorilla for instance, which looks the same from either direction – or the Vampire, whose cape blowing in the wind should always go in the same direction. An absolute godsend during this process has been TexturePacker – which has meant I’ve been able to quickly create, change and update a very optimised single sprite sheet with ease.

As well as these visual bits and bobs, the client now connects to the proper server (rather than a quickly hacked together server) and it can now manage multiple games. This means that I’m closing in on that first big milestone: a properly playable alpha version . Shortly after the game reaches playable alpha, I’ll be announcing my plans for beta testing.

November 11, 2012 - Optimisation

I’ve done an awful lot in the last week or so on Archaos. Primarily the focus has been on optimisation, as it quickly became apparent that as3isolib was simply not fast enough for the job at hand. This led me to explore the possibility of using Starling, a fantastic 2D-on-the-GPU framework, which tries to remain true to the standard AS3 display list as much as possible.

This of course meant I had to rewrite my entire render stack from the ground up. Bummer.

After a few days of building and tinkering with my own Starling-powered custom and very lightweight isometric rendering engine, the frame rates began to climb and climb. Today, after reading up on it a bit more, I’ve managed to get the game pretty speedy.

A whole lotta dragons

Above is a 200×200 board (that’s 40,000 squares) with approximately 20,000 animated, interactive golden dragons nodding away at just under 5 frames per second on my (admittedly pretty powerful) PC. Now this kind of test is pretty unrealistic, but it demonstrates what the engine is now capable of pretty well.

I’ve included further optimisations such as clipping (items off-screen are not drawn, which speeds things up considerably) and making use of a single ‘Texture Atlas’ for all of the units (basically a sprite sheet – gives a huge performance boost).

I’ve deployed some tests to my iPad 1 and my iPhone 4S and they’re running pretty nicely on both (my iPad is pretty much past it now but still churns the game out at a good 30-40fps) which makes me very happy indeed – especially in comparison to earlier last week when I deployed the as3isolib version to my iPhone and it ran at about 2fps!

I’ve also added other little visual touches and niceties (such as units jumping/flying between tiles rather than just sliding across) and have plans to add some really fun little things to make the whole experience of wizards and creatures fighting with one another all the more satisfying.

January 17, 2010 - Chaos Enhanced Enhanced

As another little aside, I’ve hacked in some configuration for Chaos Enhanced. Use the form below to launch a game with your desired settings – though please note that this is an abandoned demo with missing features and bugs!













Forgive the awful form and jQuery... it was quick!

December 23, 2009 - Belated excuses

It’s been a very busy year for me, mainly due to my commitments at work (let me assure you this won’t be a long winded entry which eventually leads to ‘so thanks for your support but I quit’!) and as such the big project that I’m sure 99% of visitors to this site are waiting for is still under slow methodical planning and development.

It’s dawned on me that I’ve been very secretive even about the name of the project, so I think at the very least I owe you guys that – so here it is!

Archaos

I think this is slightly more pleasing than ‘Chaos Enhanced Enhanced’!

I’d also like to talk about the plans regarding its launch and features, because I’m taking quite a different approach to the norm. Early on in the planning I wanted to make sure Archaos could be playable by as many people on as many different formats as possible. The general idea I had was that I’d write the game in haXe and then generate the various sets of code for servers and clients from that one source, and ‘et voila’ I’d have a cross-platform game. Since then, I’ve spent a lot of time at work playing with various web-based JSON APIs, and I’ve watched some fantastic projects appear (such as node.js, Persevere and CouchDB) and realised that, in fact, Archaos’s core could live on the web as a data-based API.

It makes a lot of sense when you think about it – you have a scalable server with a scalable database, written in Javascript (a language which I simply adore), using JSON as its end-to-end data format, accessible by anything with a web connection. Being turn-based, it doesn’t need to rely on any complicated comet solutions, and (and here’s the really exciting part) you can make your own client in whatever language, format or platform you like!

I’m really big on open source and open web, and so it’s really exciting for me to think that, although I will still be creating clients in Flash and (with Flash CS4’s leave) for iPhone, there’ll also be a well documented API out there that can be used by anyone. You can easily have pure HTML/Javascript clients, text-based clients to run in terminal windows and so on – and no matter which client you use, you’ll be able to play Archaos with anyone else.

As I said before, I’ll also be making the server and client source available (though the server source will likely need a closed development phase after launch so I can work out bugs, security issues and exploits before I make it available to all) so anyone with a Linux box can host their own server – though I’m not quite sure why anyone would want to do this at the moment, as a server will handle many hundreds, or possibly thousands of concurrent games with ease, and take care of matchmaking, login and so on. In fact this area of development will probably result in the separation of the login/matchmaking master server from the core gameplay servers.

So, to summarise:

  • My current work focus has shifted away from a unified client/server architecture, and my time is now being devoted to creating a robust HTTP-based server for Archaos.
  • In tandem to the server work I’ll have to develop a client for testing purposes, and so the first client may be a simple HTML/JS or Flash visual interface.
  • Once these are at a satisfactory level, I will announce a beta period to work out bugs, and then shortly after that I will release full API documentation for the Archaos server (which will have its own snappy name, already got a few ideas) and allow interested parties to get the ball rolling on their own clients.
  • Finally, I’ll finish and release my own client for Flash, and hopefully soon after for iPhone.

As you can probably tell, I’m fantastically excited by this whole project; indeed I can’t see why this hasn’t been done before – though no doubt it has, and I’ve just not looked hard enough… I’d love to hear your opinions on all of this – and I’d also love to find out if other people have attempted something similar!

Edit: Looks like someone has thought of this – in fact pretty much verbatim! http://web.archive.org/web/20031129175919/http://www.openchaos.org/

August 5, 2009 - Slipspace

Something I’ve been working on alongside the other 1,407 things in the pipeline…check back often for updates! Cursor keys or WASD to move, space to fire, and page up/page down to change your ship’s speed. I’ll let you work out the rest for yourself 🙂

Oh, and click somewhere inside the game to enable control!

Play at half size or full size.

May 16, 2009 - ArrayQuery

As I continue writing convienience classes for my Chaos project, I’ve put together something which (with a bit more testing) would be very handy for general AS3 development. It’s a simple to use class for querying an array of objects and returning the results as a new array. You can use it to recursively filter the objects by their properties until you have the ones left that you want – and yes I know about Array.filter but it’s much more usable and cleaner than that!. I’m using this to allow easy access to the units on the board (and I’ll more than likely be using it for the spells and other data structures in Chaos) – but as it’s a very universal piece of code, I think it deserves a place on its own. Keep your eyes peeled in the coming days!

May 12, 2009 - Chaos Enhanced

I’m now officially on the war path with my Chaos remake; I’m chasing Julian Gollop, and I’m spending a lot of time planning the details of the server. It’s proving to be easily the largest and most complex project I’ve ever tackled by a huge margin, and so I want to get things right from the beginning, rather than turn the codebase into hacks supporting hacks.

As a result of the work I’ve been doing lately, I think it’s now safe to ‘release’ the unfinished, somewhat buggy original Flash version that I did a while back. It’s no indication on the way the new rewrite is going to look (the interface is as temporary as it gets, for instance) but it shows some of the ideas I’ve had – not least being the move to an isometric viewpoint.

Two turns in and it's already going nuts - ah I love Chaos!

Two turns in and it's already going nuts - ah I love Chaos!

Anyway, without further ado, here’s the link. There’s no real configuration, no multiplayer, and gooey blobs, magic fire and mounts can act decidedly strangely at times, and these bugs were the reason I abandoned this codebase – the main class alone had turned into a thousand lines of semi-procedural hacks!

Website and content © 2009–2026 Lewis Lane