Category Archives: computer games

Made an iPhone game in 2hrs 15mins (native code)

How slow is making iPhone apps using native code?

You have to write HTML5, right, if you want FAST app development on iPhone? Or Unity? Or cocos2d?


Or … write it in Objective-C … a beginner-friendly “native” language: 2 hrs and 15 mins to create the artwork, design the game, code it in native Objective-C, debug it, and push to iPhone devices

NB: first half shows: “Collect the fish, avoid the dynamite, grow bigger!”
Second half shows: “if you hit dynamite, you shrink; when you’re tiny, if you hit dynamite, you’re fishfood :(”

For the love of … WHY?

Because I entered a voluntary “48-hour game jam” (you have one weekend to make a game), and last time I went to the Apple shop for a repair, they dislodged my network card. It fell out, internally, and it’s not user-fixable (believe me, I tried – even specialist screwdrivers aren’t enough :( ).

So I did something else with my weekend. But a few hours before the competition deadline, I figured “what the heck; what could I do in a couple of hours?” … with some encouragement from The Mighty Git.

The code?

222 lines of code, including comments, blank lines – and code that I commented out because I replaced it with other code.

That’s all it takes for a working, playable, iPhone game.

…and the art?

You can’t see it from the video, but the art is resolution-independent – as your whale gets bigger, it re-renders, so that all the curves ALWAYS have razor-sharp edges. No effort required on my part.

I did all the artwork in Inkscape (free image editor for vector images), and saved as SVG (web-standard for vector images).

Then, courtesy of the open-source SVGKit project (renders vector images on iOS, because Apple doesn’t add support to their libaries – shame), and the following few lines of code:

	self.sivWhale = [[SVGKImageView alloc] initWithSVGKImage:[SVGKImage imageNamed:@"whale-1.svg"]];
	sivWhale.frame = CGRectMake( 0, 0, sivWhale.frame.size.width * sivWhale.scaleMultiplier.width, sivWhale.frame.size.height * sivWhale.scaleMultiplier.height ); = CGPointMake( self.view.frame.size.width/2.0f, 0.75f * self.view.frame.size.height );
	[self.view addSubview:sivWhale];

If that looks rather like using a built-in UIImage and UIImageView … it’s because it’s intended to. SVGKit adds a new type of image – SVGKImage – that’s almost the same as an Apple UIImage, except it’s better (it’s resolution independent). And the SVGKImageView does for SVGKImage what UIImageView does for UIImage…

Want the code?

Sadly, the version of SVGKit I used here has some bugs in it – it’s live at: – but until it’s been tested and fixed by the SVGKit maintainers, it won’t appear on the main SVGKit project page.

So, feel free to use that link and play with it – but be warned: it’s NOT as stable as the main SVGKit. Yet.

AAA iPhone games more profitable than AAA Xbox/PlayStation games

Tim Sweeney, Epic Games (owners of Unreal Engine, and deelopers of AAA games on 360/PS3/iOS):

“The most profitable game we’ve ever made, in terms of man years invested versus revenue, is actually Infinity Blade. It’s more profitable than Gears of War.”

Touch Arcade has some terrible analysis (don’t listen to a word of it), but I quite liked their summary:

“Just let that sink in for a minute. Infinity Blade, an iOS exclusive title that has been priced anywhere between $5.99 and 99¢ over the years, is more profitable than a $60 AAA title that enjoyed all the glitz and glamor that comes along side a multi-million dollar game launch marketing blitz. We’re talking major network TV commercials, prime shelf space in nationwide retailers like Wal-Mart, and everything else …and Infinity Blade wins.”

…although *ouch* at that last 4 words, where they show some stunning foolishness. Console games make *more overall profit* than iOS games – Tim’s words clearly only covered the profit *margin* – making it very stupid to say “Infinity Blade wins”.

And we have to factor in (again, GAH! TouchArcade … do you really have so little idea what goes on in your own area of news?) that InfinityBlade *did indeed* get major TV exposure etc – it’s just that Epic didn’t provide it, Apple did.

What we really want to know is … what’s the ratio of profit margins between the two games – Gears of War 1/2 (their premier console AAA title), and Infiity Blade 1/2 (their premier iOS AAA title)?

My pure guess is that it’s a fairly small multiple – maybe only 1.2 x margin – so that if you have a LOT of money to invest, console is still a good target. Meanwhile, Epic will use this as justification that “everyone should license Unreal Engine v4 – because otherwise your dev costs are too high on console, compared to other platforms”

(as I hope we all realise … Epic stopped being “an independent game developer” many years ago; Epic in the 21st century is “a middleware company, that sometimes makes games on the side”)

Idiot-proof, physics-based, Martial arts arcade game

Toribash is, simply, awesome. You need no knowledge, you work in bullet-time, deciding which limbs to bend or stiffen, and see a second-by-second preview of what each change would do. String them together, build jaw-dropping martial arts attacks.

The build quality’s poor (no docs, no installer, poor handling for savefiles, etc) – but it’s great fun, and easy enough to understand with just a little clicking around. Play it now!

Realm of the Mad God – a great game, interesting monetization

I’ve recently been playing the excellent Realm of the Mad God – a very fast-paced 2d co-operative shooter. My feeling is that it’s going to be one of the most important games of 2011/2012, as it continues to grow in popularity. Typical experience of this game is that within 30 seconds of being dumped into the main level, you’re surrounded by monsters, and then surrounded by other players, all on the same screen as you, blasting away in a rainbow of colours.

Sounds good. As if that’s not enough … it’s the guys who’ve been working with AmitP (Amit J Patel) (Amit maintains one of the best up-to-date collections of links and algorithms for indie game-developers). If you haven’t seen Amit’s pages, I recommend browsing through the blog – his links collection is OK, but his blog posts on algorithm design are excellent. If you get as far as the posts on “how I auto-generated a realistic 3D-world”, you may notice a striking similarity to the 2D worlds used in RotMG …

Anyway, it parallels an idea for an MMO shooter I’ve had kicking around for a long, long time. For me, it’s been a delight to see what works (and doesn’t) about the core ideas. The RotMG authors have done a great job of making a fast, simple, quick, easy-to-grasp game.

The Good

Fast. No barriers to play

This is how MMO-shooters should be: fast, furious, permadeath – but very quick to get back into the fray. You should expect to die tens of times every hour.

Permadeath – but paralled with some perma-advancement

Your progress is split evenly between items (which can be banked) and avatar stats (which are lost forever upon death).

Perma-advancement increases variety, unlocks new features

With 10 classes, there’s plenty of variety – and each class can only be unlocked by achieving a minimum level of progress with one or more other classes.

NB: this part could be improved and expanded IMHO. In particular, the classes are wonderfully varied – but merely unlocking classes isn’t enough these days. Plenty of games have shown that permanent-unlocks work best when there’s a variety of game-features in there. Also, the classes themselves would work better if there were some cross-effects (c.f. Diablo 2’s Lord of Destruction expansion, which had abilities in one class improve abilities in your older classes, re-vitalizing them for re-play)

Free game, paying is optional – payment kicks in when you’re most bought-in to the design

Free players get a tiny storage for permanent items (1/50th of what paying players get – it’s not enough! … so pay!), and are only allowed 1 class “alive” at once.

In a delicious twist, if you don’t pay for the game, the only way to take advantage of a newly-unlocked class is … to commit suicide … since you’re only allowed a single character per account (unless you pay)

You can ONLY benefit from other players, never suffer

(there’s actually a case where you can suffer, sadly – Thief’s get killed as a secondary-effect of other players teleporting to them, since the game doesn’t have a “prevent people from teleporting to me” flag)

This is the one that should have most wannabe-MMO-designers sitting up and paying attention. If you group-up with other players:

  1. You all get the same experience-points as if you’d single-handedly killed every monster
  2. You get the points just for being nearby – no need to score hits just to “tag” it for yourself
  3. Mob strength is constant, but player damage is multiplicative on number of players present

Net effect:

Every player is willing and eager (*) to collaborate with every other player, without words being exchanged, without fear of being ripped-off.

In a game that’s fast paced and frantic, you don’t have to keep pausing to negotiate. Other players can ONLY benefit you, so … run with them.

(*) – or just ignores the other players. Their presence doesn’t provide negative impact on you. It’s only their absence that is negative (in game-design terms).

Interesting design choices for lag

As a real-time game with dozens of players on screen at once, lag is guaranteed to effect gameplay. We’re always saying “try to work around lag through game-design changes”, so here’s the decisions they made:

  1. When packets are lost, everything moves in exactly the same direction it was going, at exactly the same speed, forever
  2. “Speed” used above is the “on-screen speed, including any rubber-banding effect”
    • FAIL: this means monsters and players often move MANY times faster than they are allowed to – so that when the lag stops, the side-effects are magnified
  3. Your avatar can’t be hit NOR damaged while it’s missing packets from the server
    • For the early parts of the game, this *almost* completely fixes lag problems
  4. Projectiles (bullets etc) that your client didn’t receive are queued up and sent to you all in one go once the packet-dropping stops
    • FAIL: this multiplies the damage output of enemies (NB: not players!), breaking all the designed-in balance in the game
    • In mid to late game, this ruins the gameplay – players end up running around never seeing a single enemy, because if you’re close enough to see it, a single flicker of lag will cause you to receive ZERO damage initially, followed by MORE damage than the monster is capable of – delivered instantaneously
  5. The client is authoritative on player liveness/death
    • MILD FAIL: in effect, coupled with the other features of the game, and the lack of lag compensation … this means you CAN and SHOULD (and, for some cases, effectively: MUST) cheat. You can run a bot on your machine – and if the network is less than perfect, you have to, in order to play the game properly.

Overall, apart from the massive security flaw (where anyone could write a bot to be invulnerable – and the developers are encouraging them to do so), it seems very close to a good solution for an MMO shooter.

I’m surprised by the way they approached the “save up the enemy bullets, then unleash them all at once”. My guess is that it wasn’t designed, it was just an accident: maybe they took a slightly lazy approach to compensating for lag (they don’t), and the net effect is this. It looks very much like what you get when using TCP for game-data packets (I really hope they’re not using TCP; if so, most of the lag is the developers’ own fault)

The Bad

I’ve unlocked half the classes, and looked at what classes other people play (and which classes rise high on the leaderboards). There’s good variety, and almost all the classes get used – even the beginning class, the one you get for free, works well.

Except one.

Unfortunately, at around 50% through unlocking the special classes, one of the classes is horribly unbalanced. The Assassin (which is supposedly an upgraded Thief – but is a massive downgrade) is almost impossible to play. The special ability fails completely when there’s lag (which is frequent in this game), and the class is the weakest, lowest-range of the lot. Looking around, you rarely see Assassins (I suspect: you only see them when people are desperately trying to upgrade them, to get past this dull and frustrating point in the upgrade tree).

Worse, because the *only* way to unlock the higher level classes is to reach the level cap with this class … you’re forced to play it. Over and over again. Watching the bad game-design … over and over … and over … again.

Every time the assassin dies, it’s like another twist of the knife:

We know you don’t enjoy this

We know that a mistake in our game design has you stuck here

(and our overall game design makes that “mistake” into “a disaster”)

We know that this whole process is turning “a class that wasn’t much fun” into “a class you hate”

And there’s nothing you can do about it!

So, single-handedly, it’s driven me to *not* purchase any game credit. I’d enjoyed the game enough to that point that I’d already decided to buy it – and if this had been on iTunes, I’d have paid already. But since it’s not an iPhone/iPad game, and paying for it is a bit more difficult, I hadn’t made the payment yet.

As it stands, I’m still playing occasionally, but now it’s for research rather than for enjoyment, which is a great pity.

Monetization: money thrown away

I think the developers are missing an ENORMOUSLY successful way to make money from this game. In fact, it’s so big, I suspect they could increase their revenues by a substantial multiplier.

With a permadeath game, there really is no need to actually delete the dead character. If the player isn’t paying, they are forced to kill their character sooner or later to change characters.

Taking a leaf from Flickr’s book, why not keep ONE single character in storage, with a tempting “buy now, for goodies *and to have this one returned to you, ready to play*”?

I’d set it so that when you change class (if you’re a free player), only the last character of the PREVIOUS class is retained. If you switch from Warrior to Knight, you can die many times as a Knight, and your Warrior remains on ice. But if you then grow tired of the Knight and switch to a Rogue … the Warrior is tipped out, and replaced with the last Knight you had.

i.e. you setup the exact flow of decision-making and options and “safety” that the player would have had, if only they’d purchased sooner, and allow them to benefit from it retroactively – if only they make the decision to pay.

Of course, it’s a very limited “retroactively” – it’s a sampler, to let you see the benefits of paying.

(*) – Flickr’s early promise was “upload your photos in highest resolution, you can view them for free – but only low-res versions. HOWEVER, we keep the high-res versions for you – forever, for free – until you decide to purchase a subscription. At which point, not just your new photos, but ALL your photos, become magically available at highest res”. It was a great way of simultaneously offering a high-value to paying customers, while making non-paying customers feel they weren’t committing themselves to loss. It reassured a lot of potential customers at a time when Flickr wasn’t yet famous, and most people weren’t yet “hooked” – it bridged that gap.

Analyse this

So, the interesting question is: how common is this problem?

Are the dev team correlating “players who pay” and “the point at which they pay”?

More importantly, are they correlating “players who DON’T pay” and “how their experience differed from the average”?

The last time I saw an MMO with a level-based kick in the teeth this bad … was in Tabula Rasa. We had a point where poor signposting by the quest designers meant many players were given quests that were many levels too hard for them, and effectively impossible to do. Those players died over and over and over again in a short time – and they hated it.

The dev team knew “you’re not supposed to do that quest”, but often they (randomly) gave it to new players as the first quest. I wasn’t privy to the arguments over whether this needed to be changed (and there were definitely arguments), but I did see the analytics that eventually got produced. They showed an almost perfectly smooth, averaged, graph of player behaviour – bar a big notch at this particular location. It stuck out like Rudolph’s nose on a snowy day.

I wonder if there’s a similar notch in RotMG? For a game that’s almost *designed* to drive people to rage-quit … what stats do they see on “what the last thing was before a player stopped playing forever?” … and what stats do they see on “…stopped playing for a long time, but eventually came back”?

TCE iPhone Games by Indie (and mainstream) Game Professionals

TheChaosEngine – private forums hangout for games-industry professionals. There’s an epic thread on there where people post projects they / their team / their employer has published on iPhone. It’s currently 40 pages long, so I went through and pulled out the links to the iTunes pages for each game.

NB: these run the gamut from “my first iPhone app” to “large-team of developers working for multinational publisher”. Quality here will vary hugely – YMMV!

Also, interesting to note … these are listed in order of posting to the forums, so … as you go down the list, you’re seeing an evolution over time of personal/indie (and occasionally “big team / AAA”) games on the app store.

TCE games, in first-launched order (earliest first)



These posters didn’t provide a real iTunes link – I had to hunt it down on their websites – so they’re out of order:


New game (Risk clone) – need SVG maps!

As a free-time project, I’ve been writing a Risk clone (*) for iPad.

One of the bits I like best right now is that you can give it the URL of *any* SVG file on the web, and it automatically turns it into a Risk map.

(e.g. all the maps in Wikipedia articles are SVG files – it’s a common file format with good browser support)

This was one of those “interesting” technical challenges – I had to find an algorithm that would automatically work out which territories a human would “assume” were connected to each other.

I’m using an open-source SVG library which works fine for basic SVG files but has a lot of bugs with the more esoteric ones. I’ve already fixed a few of the major bugs (they’re now merged into the GitHub project) – but I’d like to get more SVG files to test with.

The one thing to bear in mind is that the colour-data gets wiped when it imports. So … SVG files that make heavy use of different colours or gradient-fills/pattern-fills lose detail when imported.

Also, files where none of the elements are close enough to be deemed “connected territories” … work poorly.

Everything else works fine.

So … if you’ve got any, please post a comment here with URL, or email them to me directly (address in the About link at top of this page).

(*) – I say “clone” because it’s the same genre – but the gameplay is “fixed” quite a lot. If you once loved Risk, but grew to hate it, you’ll see why I wanted to change the baic game design :).

Prototyping: Chess Quest v0.4

(I’m prototyping a new game (working title: “ChessQuest”) – original post here)

Major changes:

  1. Enemies have health, and can be killed by touching them
  2. Performance is another 30% faster (should be running OK on most phones now?)
  3. Enemies have a direction indicator (not necessary right now, but it’ll become important in a later version…)

Download link

Chess Quest-0.4.0

Game prototype: Chess Quest

Last weekend, I was playing around with some ideas for a Chess / RPG mashup. I did some prototyping with Android (because iPhone apps can’t be shared, and Java is much faster to debug than ObjC).

If you’ve got an Android phone, try this, and let me know if it runs:

There’s not much you can do – touch and drag on the screen to move up/down/left/right (you’re the Rook – hence no diagonal moves). Bishops and pawns wander around randomly, pawns slower than bishops.

UPDATED: if you rotate the screen sideways, it’ll randomly pick a different size / zoom level. There’s four sizes, from 20×20 squares up to 100×100 squares. Player moves at different speeds based on the size too.

I wanted to make it a dungeon-exploration style, but with a Chess theme – and (like in chess) each time you complete a dungeon (kill the boss) you get to “pawn” and switch your character to the chess piece you killed.

i.e. first boss would be the Rook, second the Bishop, third the Knight, etc.

…but I’m not sure I’ll stick with that. If I get some more time this weekend, I’ll prototype a bit more.

NB: the APK above might run slow – I’m interested if it looks jerky / doesn’t work on your phone. It runs fine on an old Nexus One.

D&D on Facebook

Step 1

follow link

Step 2

app demands your date of birth, for no reason (one day … Facebook will stop being so ridiculous about this, and give the user power, rather than the advertisers. One day…)

Step 3

app fails to install (having taken your private data)

Step 4: tell them what to do with it


Alarm bells for Game Design failure: “evolving” someone else’s IP

There’s a new Syndicate game in development. After one of the most facepalm moments in game design – taking a unique game-genre and replacing it with an FPS, at a time when FPS market is massively over-saturated – the studio has gone one further:

“we’re taking the Persuadatron and evolving it”

It’s always possible that they’re going to make it better. On the balance of probability, that’s unlikely.

Even leaving aside the amazing decision to remove the single most important feature of the original IP – the genre itself. NB: this has been tried before: Syndicate Wars changed the core gameplay, and was a commercial failure (given the previous sales of the IP).

Sadly, it seems that in press conversations, “evolving” is often short-hand for “putting our own “stamp” on it, by changing it; it’s the change that matters, not the improvement. We MUST be able to claim this is “our” game, and not the original designers'”.

Often, it seems the thought process has gone something like this:

“the original idea was unique. At our studio, we don’t have many unique ideas – so we’re CERTAINLY not going to let anyone see how weak they are when contrasted with the genuinely strong ones in the IP we’ve just taken over.

Our cunning plan is to remove all the unique, innovative aspects of the IP, and replace them with dumbed-down, crappier mechanics that we thought up ourselves. But stick the original name on the new mechanics.

This way:

  1. we won’t be made to look stupid by our own game
  2. google searches will turn up YouTube videos of our scuppered mechanic, and people hearing “X was a great idea” will look at it and go: “Hmm. Not really”, without realising they’re looking at the scuppered version

(I’ve worked on two teams that tried to get approval for re-making Syndicate (not Wars!) over the years; I’m a big fan of the original, and still occasionally play it on an emulator. It’s amazing how much people want to over-complicate it – somehow forgetting that the original studio (Bullfrog) was reknowned for it’s quirky/bizarre/unusually inventive game designs, and that they’ll have a lot to live up to if they want to “extend” that)

RPS says it best:

designer Rickard Johansson: “I don’t want people to stop playing the old games, but time has moved on.”

Has it? Has it really? Perhaps he didn’t notice that Starcraft 2 outsold most of EA’s (and everyone else’s) portfolio last year. Perhaps he didn’t notice that SEGA refer to Total War as one of the major jewels in their crown. Perhaps he didn’t notice that Valve are spending a fortune on a DOTA remake. Perhaps what he really means is ‘publishers will give us a bigger development and marketing budget if we make it a first-person shooter.’

LudumDare 21: Escape from the (Android) Pit

I couldn’t enter this LudumDare competition on a technicality, but here’s my entry which plays by the spirit of the rules. I took a total of 24 hours (out of 48), of which only 12 were actual design + development (see below). Hopefully next time I’ll be able to do it properly, and actually compete. I’ve kept to every rule, except that I did my 48 hours time-shifted :) from everyone else (two successive Sundays, instead of a contiguous Saturday + Sunday).

Screenshot + Android APK

Download link (APK – you need to know how to install APK’s manually (google it if you’re not sure, it only takes 5 seconds)):

Escape From the Pit


  1. Make a LudumDare entry as an Android application – none of this easy “make it in Flash” or “make it in java” stuff – let’s go for a full mobile game, designed, developed, and launched in exactly 2 days flat!
  2. Use an Entity System (c.f. my long-running series of articles, and also the public Wiki I created), and show that ES’s facilitate you writing new games VERY VERY QUICKLY
  3. Make a game that was mildly challenging and (almost) enjoyable

Failed to officially enter the competition, but otherwise succeeded…


LudumDare challenges you to write an entire game in under 2 days (technically: 48 hours – it’s up to you how much of that you sleep). You can’t even design it in advance – there’s a theme that’s only decided shortly before the 48 hours starts.

LudumDare was the weekend before last – but I had to work that weekend on urgent day-job stuff. Like: I had to work all day Saturday, and there was no way out of it. So I couldn’t do the same 48-hour stint as everyone else.

Also, I know from previous experience that the “48 hours in one stretch” is very different from – say – “12 hours for 4 days”. When you do a 24 or 48 hour game, you tend to only manage a certain percent of “productive” hours. The challenge of designing + building something from scratch forces you to keep taking “time off” to go think about what do next.

So, I kept a diary of hours worked, and hours taken “off” as well. I’m confident I’d have fitted all of this – development time AND down-time – into the 48 hours. But I had to spread it over 2 successive weekends :(.

Day 1

(3 hours) – install Eclipse and the Android plugin, and the Android SDK. Document what I’ve done (1 hour) and check I can re-do it at will. Google, please wise-up and fix your install process – it’s not changed in almost 2 years, and it SUCKS

(1 hour) – install some extra Android OS versions, get the emulator working correctly, get projects imported, get everything in source-control, get empty app running on hardware device. Ready to start project!

— NB: everything up to this line I should have done before the contest started. If I were the kind of person that had free time on weekdays. Which sadly I’m not —

(1 hour) – getting Android base classes up and running. Takes a while: Android is insanely badly designed for the “Core application” part. Needs hundreds of lines of code to make a Hello World app that *actually* works as an app (Google’s code example that does it in 4 lines is fake: no real app could do that).

(3 hours) – on the beach, not working

(4 hours) – upgrading the open source Entity System Libraries on to support a bunch of features I’ve been using for a while in my own projects. This required writing a lot of stuff from scratch (using my own old source as inspiration), and integrating some improvements from patches/forks that other people had submitted.

— NB: everything up to this line I could have done before the contest started. Interesting though that I thought this was going to be “about to start writing the actual game” and I’ve only finally got to the point where I can write my first line of game-code —

Day 2

(0.5 hours): trying to make textures in Photoshop. Photoshop really sucks. Half the online resources for making the kinds of textures I want require PSP’s unique filters/effects – useless :(.

(0.5 hours): get a single sprite to appear on screen. A couple of idiot errors in one of my libraries – plus Google’s Eclipse plugin being really really bad at understanding “the scroll bar” (bug in ADT: it implements the world’s only non-static scrollbar)

(1 hour): random maze generation (using: ) that makes nice mazes, printing out onto the screen, still with my default “starfield” background. Rotating the screen is causing the entire game-state to be regenerated – includkng the maze – which was an accident, but actually helped A LOT with testing the maze algorithm (just tilt to re-run the algorithm instantly)

(0.5 hours): learn how to do Android input-handling correctly; en-route, discover I’m missing the SDK docs, and set about downloading + installing them … + updating my blog instructions on how to install Android to include “SDK docs” as a section.

(2.5 hours): discovering MAJOR bugs in Google’s basic “touch handling” API for Android – including bugs on Google’s own website source code, and an API designer on crack who broke the core Java contract didn’t document it. Not Happy.

Day 3

(1 hour) – implementing a collision detection system that does proper swept-collisions, but works OK with the poor fine-grained control of touch input

(1 hour) – added filters to collision detection so I could have background images that the player will NOT collide with
(previously was colliding with every on-screen rendered sprite). Also added a very simple lighting system where squares that the player has walked close to or upon gradually light up, showing how much has been explored

(1 hour) – refined the user-controls so you can hold your finger still and character keeps moving in that direction. Added handling in collision-detection system to allow character to slide along walls and into side-passages without the player having to stop and be ultra-precise (pixel perfect!) in timing the change of direction.

(0.5 hours) – added an exit, fixed bugs in the maze-generation (if started on a right or bottom edge, it crashed)

(1 hour) – fix Android’s brain-dead handlig of Bitmaps, giving a big speed boost, and re-learning how to use DDBS memory-allocation-tracking. I’m now auto-caching each bitmap inside my Sprite object. Sigh. There’s no easy workaround: Google says “don’t use getter methods” but Google also says “don’t call our getDrawable method more than once”.

(1 hour) – added ghosts, made them move around the map nicely, and collide with player was *automatic* on first compile (freebie from using an Entity System!). Also made arrows float nicely in same place on screen even while scrolling.

(1 hour) merge code from laptop back to desktop. Finally add the “win” conditions that makes the app playable!

Source Code

To make this game, I improved the basic Java Entity System up on the ES Wiki, and added some usability improvements and features. I created a whole new page for it here:

NB: It’s called “Beta” simply meaning “second generation (beta == second letter of greek alphabet)”. Not because it’s a beta-quality release :).

Source code to the game itself is also up on github right now ––Escape-from-the-Pit – although that’s a closed repository at the moment. I want to double-check there’s nothing included that shouldn’t be before I set it to “public”.

MS XBox Europe: man puts elbow in own ear

…or at least tries to, when Chris Lewis comes out with quotes like this:

“you can be very confident we seek to maximise our own advantage to ensure the playing field is even, and certainly plays to our advantage”

Wait, what? An “even playing field” is one which “plays to [Microsoft’s] advantage” ? Hmm. Talk about a crushing sense of self-entitlement…

“we just want what our consumers want from us.

If [developers don’t give us free stuff which we don’t pay for], Microsoft reserves the right to not allow the content to be released on Xbox 360”

Wait, what? Are you saying that what “our consumers want” is to be prevented from playing the games they want to play (“Microsoft … not allow the content to be released”)?

I’ve seen a lot of bullsh*t over the years from weak-willed Marketing department employees who feel that “not saying a bad word about their boss’s / employer’s incompetence and greed” is the right way to do a job, but … this is especially bad.

I think Chris needs a bit more practice at the technique of:

“say what the person you’re trying to brown-nose wants you to say, no matter how much it makes you look like a pathetic, stupid, snivelling idiot”

Euclideon: $2m scam for fake games tech?

TL;DR – notch reckons “it’s a scam” (I wouldn’t go that far – “scam” is a strong word, I reckon they’re just too naive/ignorant/foolish/arrogant to realise what a huge mistake they’re making)

My gut feeling is: this would be a terrible investment. By comparison, the middleware companies that sell for tens of millions of dollars usually don’t seek this level of investment until AFTER they have many licenses / sales already. Euclideon seems to be asking for money BEFORE demonstrating that any games company can do anything useful with it.

In the games industry, we have a name for this particular kind of exuberant, short-sighted claim:

“Infinite Monkey Engine”

(apologies to Demis Hassabis, a nice guy who created the term “Infinite Polygon Engine” intending it to be genuine. It backfired horribly when it turned out to have little or no value in game terms; IIRC it only shipped in “Republic: The Revolution”?)

IMHO … The Euclideon folks have shown no signs (in public) of being aware of what a complete waste of time and money their technology “probably” is. They apparently haven’t (bothered to?) spoken to any games-industry companies – this should be an absolute requirement LONG before they raise funding above the $50,000 level.

Maybe they have; maybe their own PR is a big confidence-trick – they know how misleading/wrong their claims are, and they’re just trying to keep potential competitors fooled. If so, I’d say that’s a rather … short-sighted … strategy.

More likely: they’re full of their own inventiveness, and have nowhere near enough startup / business experience to have run the analysis on *why* this tech isn’t used *any more*.

(public signs so far suggest they’ve picked up an old tech, convinced themselves it’s new and novel, and don’t realise that it’s a dead-end that the industry has already rejected)

Fix for Master of Mana Fay/Faerie suicides

Typical. Just as I finally brave the source code to Master of Mana (neé Fall From Heaven; the most popular / succesful mod for Civilization 4), and fix a major bug that’s bothered me for ages … the main server at goes offline :(.

Anyway, if you’re playing the Fey, and you’re tired of the fact it becomes impossible after a certain point – when you put Faeries onto ships, they self-explode, turning the tile into land (usually Never-Never), here’s the fix. It’s especially bad for True White Faeries – which means “all of your top units” beyond a certain point in the game.

Edit the file:

[C:\ … path to your Civ4 folder]\Beyond the Sword\Mods\Master of Mana\Assets\Python\Wildmana\Civs\

Find the following lines (very near the top):

		if pUnit.isHasPromotion(iPromWhite):
			if pUnit.plot().getOwner()==-1:
			if pUnit.plot().getOwner()==pUnit.getOwner():
			if iSnowChance>CyGame().getSorenRandNum(100, "snow fall"):
			if pUnit.isHasPromotion(iPromGreen):
				if pUnit.plot().getFeatureType()==-1:
					if CyGame().getSorenRandNum(100, "Faerie plant trees") <= 75:
						pUnit.plot().setFeatureType(iForest, 1)
			if pUnit.isHasPromotion(iPromTrueWhite):
		if pUnit.isHasPromotion(iPromTrueGreen):
			pUnit.plot().setFeatureType(iEternal, 0)

and replace them with this: (NB: because Civ4 is scripted in the horrid Python, you're going to have to be careful to get the indentation correct manually; Python is wonderful, except for this one feature - it makes sharing code changes like this much harder than it should be :( IMHO)

		if pUnit.plot().isLand():
			if pUnit.isHasPromotion(iPromWhite):
				if pUnit.plot().getOwner()==-1:
				if pUnit.plot().getOwner()==pUnit.getOwner():
				if iSnowChance>CyGame().getSorenRandNum(100, "snow fall"):

			if pUnit.isHasPromotion(iPromGreen):
				if pUnit.plot().getFeatureType()==-1:
					if CyGame().getSorenRandNum(100, "Faerie plant trees") <= 75:
						pUnit.plot().setFeatureType(iForest, 1)

			if pUnit.isHasPromotion(iPromTrueWhite):
			if pUnit.isHasPromotion(iPromTrueGreen):
				pUnit.plot().setFeatureType(iEternal, 0)

Yep - it's really that simple (insert one line, and re-indent the ones below):

"if you're at sea, don't turn the ground your ship is on into land. Because that will destroy the ship, you, and everyone else nearby"

I'm pretty sure it wasn't intended to do that - it would be an ultra-powerful ability to create land - automatically - instantly for the cost of a cheap ship and a level-1 faerie. If you really want to play that way (if you can be bothered), it's easy to create a Giant's Causeway like that in the current build of the game, making land out of the dead bodies of the Fey. But it's a very dull way to play, and it feels more like an innocent oversight...


If you're not playing Master of Mana, and wondering why anyone would care about a Mod for a game that originally shipped *almost 6 years ago*, then I strongly suggest you buy yourself a copy of Civ4 + Beyond the Sword expansion (usually bundled together for $30 or less), download MoM, and find out what you're missing.

The modded game is IMHO highly illegal - they stole art liberally from many many copyrighted sources - but the bulk of the content is their game-design, and that's fantastic. Many times better than many games released today - and (partly thanks to the lack of legal assets) the authors charge nothing for it.

The saddest / greatest thing about this IMHO is that 2KGames / Take Two did so little with this modding community. Beyond a few token steps (the dev team made the sensible decision to hire some of the leading mod authors, IIRC) they pretty much ignored it. They're making substantial money out of the mod authors - Civ4 should not still be selling as expensively as it does, and I'm sure this mod is the main reason it does - but they could have made a lot more. Look to Valve, and imagine what might have happened with a little more visionary leadership at Firaxis and Take Two...

Papa Sangre devs: are you sure it’s not because…?

“[with Android] We just can’t get complicated applications functioning with any kind of speed (if at all) … it’s not because we’re stupid or don’t know the platform well enough”.

(From this month’s Develop – an article by the the CCO of Somethin’ Else)

Develop is trade-press, for professional game developers (mostly coders, IME). No further explanation was given.

Kind of hard to believe, considering our own experiences on the platform. I asked a few others for their considered opinions. First three reactions:

  • “WTF?”
  • “Bollocks”
  • “Bullocks”

Hmm. I’m intrigued to know what they can code on an iPhone 3GS, but not on the more powerful Android phones from 2010 (let alone the ones from 2011).

BBC’s “The Code” maths/TV game/ARG: pre-run commentary

The Code is about to start, and Adrian’s on good form here with some concise bashing of ARG-design stereotypes:

“the ‘inverted pyramid’ model of engagement for ARGs and transmedia! But I don’t like it

feels like a post-facto justification of why only a few people get really engaged in most projects by suggesting that what you’re making is just way too awesome/hard for the public, who’ll have to make do with lightweight stuff (yes, like Flash games).”

He’s been banging this drum since PerplexCity, but IMHO there’s been comparitively little success. He’s long been wrestling with ways to make that actually work in practice, as opposed to a believable bit of theory. From the tone of this blog post, I’m pegging this as “one to watch”, and see if there’s a big step forward.

Something else to highlight, too; something *I’ve* been banging on about for a long time:

“The fact is, most people are smarter and more engaged than you might think.”

4 games, 4 *educational* games, on the BBC (who publishes some of the best pre-school games / learning content in the world). Fingers crossed this does something new and novel *and which actually works* :).

Telling stories with Minecraft and GitHub

Minecraft is great. But it has one major problem: the narrative of each world is destroyed as it is created. Unless you work hard to do otherwise, the history of your relationship with the world is lost very rapidly. There’s no strata, no wearing, no signs of your involvement – just a too-clean result.

I found myself often deliberately “preserving” key moments in my worlds, such as:

  1. never alter the place I spent the very first night, except enough to allow a tunnel out into whatever larger base/home I turned it into
  2. as much as possible, build structures WITH the landscape instead of AGAINST it; the contours of my buildings, roads, railways are very little altered from the land that they’re build on / in / around / underneath / through
  3. mine and house entrances made as subtle as possible; e.g. all-glass exits from the water that are almost invisible from a distance, but glow slightly blue at night

So, here’s an experiment: a playthrough of Minecraft, but doing frequent git-checkins (approx once a day/night) to this github project.

I don’t even know if it’ll work; in theory it should – I’m versioning the Save directory for a single world – but I haven’t tried importing it to a new PC / install of Minecraft yet.

Feel free to try it – checkout the first checkin, see if you can load the world (NB: the save-directory is named “versioned” on my copy of Minecraft; you might need to name the containing folder the same).

Then try using git to advance through the different checkins, and see if you can view the world as I explore and modify it…

Indie games: how to reduce your sales, #53

There were a few games that came up in the 10 games you should have played session at GameCamp which I’d never heard of / played. One of these was SpaceChem – sounded interesting (the 5-second description was something like “great game which teaches you how to do real Chemistry”).

Someone else mentioned this game to me today, in passing, which reminded me to go check it out. I went to the website, looks vaguely interesting (although the site design is very ugly – normally a big FAIL in web-marketing – I’m happy to ignore that since I’m after a *game* here).

The only info I’m allowed to see about the game – no screenshots etc – is an embedded Flash video that’s taking ages to download, so long in fact that I gave up.

So I try to get the demo instead.

“requires mono”

Oh, FFS. Forget it. No, I’m not going to download 500MB (or however much it is these days) and endure extra debugging, manual configuration, etc just to install your game.

If this is a commercial operation (and it is, judging by their huge “buy now for $15” text), then it’s a waste of time to release a Mac version that’s any more complicated than “drag one icon to install”.

The Apple Mac Store is *live*, people! It’s even less hassle to buy things there (the “drag icon” bit is done for you automatically).

More generally, if you’re going to release games, don’t tie yourself to a 3rd-party platform that requires a large download and isn’t pre-installed by default on desktops.