Categories
games design security

OS X: You don’t have permission to read your own files

Removing words isn’t always the best route to UX design. Here’s an example (that just bit me) of Apple’s obsession with “remove words, look pretty” making their systems/applications unusable:

“Copying 3,000 files…”
“STOP! One or more of these files you don’t have permission to read. Stop, Retry, Continue?”

Which one, Apple? (it turns out that there were precisely 2 files affected, out of the 3,000+ – although Apple wouldn’t share this info, I had to calculate it after the fact)

Oh, I see. You won’t tell me. I’m supposed to go and do “cmd-i” on every single file, until I find the one where OS X has incorrectly set the file permissions. (NB: selecting everything and trying to do a mass permission set … doesn’t change anything).

The cheap alternative design, as used by normal developers, would have been to give the names of the files. Apple won’t do that – maybe because it would clutter their “pretty” user-interface?

What caused this?

Severe bugs in OS X’s handling of “downloading files from the internet” and/or “receiving files via email”.

In a move reminiscent of the worst days of Microsoft, Apple assumes that you only have one computer, and that the internet doesn’t exist. If you transfer a file from one computer to another – even just download it from a website – then Apple will try and enforce the file permissions from the original computer.

Just to be clear, there is NO security benefit to this: the moment you sent the file over the internet, all security permissions were effectively faked/deleted/nullified anyway.

In this case, simply because the file was authored on a different OS X computer, Apple took away all permissions, marking the file “Top Secret” (only visible to one user on my computer – can’t even copy it over the network). Stupid.

Categories
games design programming

Have you made a Data/Entity System? Will you share source?

Making a trivial ES … is almost trivially easy, once you know how. But usually it’s too trivial to be used in anything except small indie projects, and nothing too real-time.

Making a production-quality one, including all the associated tools, suitable for a AAA game project … is a massive undertaking.

Somewhere in-between, I hope there’s a low-cost middle ground where some of you reading this blog would like to collaborate to make + publish complete, working, documented, OPEN SOURCE, Entity Systems.

Yes?

First questions (there will be more blog posts later):

  1. Do you have a fully working ES?
  2. Is it live in a game or app? (i.e. launched)
  3. Can you / will you / have you open-sourced it?

EDIT: there’s now a bunch of source examples here: http://entity-systems.wikidot.com/es-approaches

Categories
games design recruiting

XEOPlay is looking for an iPhone App Developer

Nicole Lazzaro’s XEO is looking for an iPhone developer (Bay Area/SF)

Contact: hr@xeodesign.com

If you don’t know who Nicole is, the design process for Tilt gives a good idea. She’s well known for her work on studying emotional reactions in people playing games (and designing appropriately):

How we created Tilt

XEODesign’s interviews of people waiting to buy their iPhones finds that much of the success of the Apple iPhone comes from unique attibutes of its emotion profile, especially social emotions. To demonstate the practical application of XEODesign’s approach we used this research to make a game called Tilt that creates a player experience (PX) that feels like a natural extension of the iPhone because the game mechanic builds on the same emotion profile. Read Nicole’s Fast Company interview on designing the emotions for Tilt.

iPhone App Developer
+ Take ownership of the development, maintenance of the project’s code.
+ Collaborate with designers, artists, researchers, and QA to create the best experience in the time and budget constraints
+ Passion for good UI design and maximizing the fun factor
+ Enthusiasm for incorporating feedback from player testing to increase engagement
+ Strong initiative to tackle big problems with global impact

We find resumes a bit dry, but love to play games you have already built or worked on. Include App Store Links, URLs, and titles.

Categories
games design

Your Animator just broke your game design…

Here’s a great example of why so many Flash authors write crap games:

http://www.kongregate.com/games/JacksmackDotCom/primary?tab=achievements

What the F happened?

Someone let an animator dictate the game-design.

This is one of the side-effects of Flash: it encourages people to base games off animations, instead of basing animations off game-design.

The game is actively unpleasant to play because the controls suck so badly. They suck so badly because:

  1. they won’t “allow” you to do a new action until the current anim finishes
  2. if the engine cannot visually playback the anim it’s trying to, it cancels your keypress (!!)
  3. your “position” in game terms is dicated by the current anim-frame

In case that last one is too subtle: the main character has a very camp “skip” walk-anim. But your character is physically “taller” during that anim, because they keyed CD off the anim, rather than off the game-logic.

So, when you’re doing fine movement, you have to wait-and-watch the individual frames of animation to decide when to jump. I find it hard to believe that this is what the authors intended. In practice, you end up spending most of the time watching anim frames, and/or counting frames, instead of playing the game.

I suspect – partly from the documentation from the authors – that they thought everyone would admire the “prettiness”. No. You made a game. People will judge it on the playability. In fact, they have (read the comments – endless complaints about the infernal control system).

Who cares?

For the record, I’ve seen this exact same problem on at least one 7-figure-budget game, and it contributed to the entire project getting cancelled. The studio making it had a background making animations for other people’s games. I shan’t name names because they were skilled and competent – just naive at the time – and my impression was they learned a *lot* from the experience. (I doubt they’d make the same mistake today).

I have seen very similar issues on a couple of other games – most of which got canned; at least one SHOULD have been canned, but instead cost an ungodly amount of money before putting the studio out of business.

It’s not a small issue. Any real game player will spot it. Any professional game developer will recognise the n00b mistake and scoff at it. The sad truth is that many artists – and most animators – won’t even notice it.

Until they get terrible reviews, and wonder why no-one is buying their games :(.

Categories
computer games design games design games industry massively multiplayer

A little game called Minecraft…

I’m an idiot. It only just occured to me today to wonder how common a name “Markus Persson” actually is.

My first reaction on playing with Minecraft was: “Ah, this (much success, this quickly, with this style of game) is what the WurmOnline guys would have loved to achieve, I think”. Oh, the irony. Not that I expect the WO guys are unhappy with what they’ve achieved – WO is an achievement in and of itself, and continues to evolve in beauty and depth – but it’s too slow / too little to become a mainstream success. It’s a technical and personal success, not a business success. Unlike MC.

Now that I know it’s the *same* Markus – Wurm’s Markus_Persson from JavaGaming.org, and the author of Minecraft – I’m revisiting that first impression. Incidentally, in checking out this authorship, I saw I still have the 2nd highest post count on JGO (!), despite almost 5 years of personal absence. Wow. I really did talk a *lot* of crap, I guess ;)…

Simplicity…

There are two things in MC that jumped out at me early on. The first one was pure simplicity. This game/world is bursting with a sense that someone has ended up with nothing left to take away.

Art

The art has a nice style in and of itself. This is something I’ve often talked about with other veterans of making cheap games … mostly, that means indie developers (many of the folks from JGO, for instance – especially look at the 4k Java games contest, and look at the frequent winners such as Kev), but it also includes folks from the big-budget games industry, like Thomas Bidaux and Ken Malcolm. And, of course, Matt Mihaly, whose Earth Eternal started out explicitly using an art-style to keep production costs low.

It’s a trick. It’s the avoidance of the uncanny-valley. Make your art look deliberately cheap, instead of accidentally, and you can achieve the same level of pleasure in your audience as if you’d built photo-realistic graphics. As far as I recall, it’s even been tested (in movies and visual art) and found to be literally true.

Interaction

Here’s one key point where Wurm fell down … there was a vast amount to do, but it was damned hard to know WTF you could do, how, when, why, where.

And at this point, I’m going to pull out and dust off Runescape, circa 2001. Back when it was a few thousand players, and was already taking off, but long before it became famous. RS has changed plenty over the years, and has finessed their interface, but it started off with Andrew’s unrelenting insistence that the UI must have “no menus”. Everything had to be achievable with the LMB or the RMB. There were already examples of places where the interface was crippled and made complex because 3 (or 4) buttons were needed … and eventually Andrew relented and allowed for RMB to be a menu, with LMB being the “most likely option from that menu”.

The point being that if he’d not clung so hard to that desire for ultra simplicity in the GUI, then he’d probably have ended up with a series of rich menus – or more likely a many-button interface. Sure, it had to be modified as the game grew, but IMHO it was one of the greatest attractions to RS, and helped enormously with RS’s growth and success among the school-age market (where RS thrived).

Now back to MC. In MC, your actions are very narrowly limited. Indeed, they reminded me a lot of early RS. Everything relies upon context. In MC’s case, the compromise with game-richness comes in the form of the crafting interface. Here you have to step beyond the LMB/RMB setup, the “purely contextual” actionset, and move to a new UI element. It’s new, it’s extra UI, but … it’s still brutally simple, and yet (so far) proving more than adequate to the enormous demands of variety in MC.

… and logic

This is the second one that struck me, and it took a bit longer, a bit more playing around (and watching other players in their more advanced worlds), for me to spot.

Wurm Online was always one of the richest “physical universe simulators”: there was a huge amount of physical laws implemented and underlying everything you saw on-screen. This is not a good path for a developer to take: it’s a steep slope into exponentially large CPU and content-production costs … and even worse in terms of balancing and game-design.

Oh, you think that a world with “full physics” has no content production cost? Ha! How much time do you think it takes to implement each of the laws of physics? Even with a rigid-body physics engine to start from? May seem like there’s not many of them around, but just try coding it…

But many of WO’s laws were barely noticed by the majority of the players, while others were smack in their faces a large amount of the time. MC very nearly appeared to cherry-pick only the “frequently significant” laws, and focus on those. MC’s world is breaktaking in it’s depth, and yet if you analyse it closely, you quickly notice it’s lacking some very basic essentials of a world-simulator.

And, back to the irony, I felt that last point made MC feel very much like a direct sequel (in spirit) to Wurm Online: a “lessons learned … and acted upon” when it came down to the most addictive and engaging (and unique) part of WO. And yet I was still too dumb to connect the names together. Doh!

Categories
games design MMOG development programming

Entity Systems for Objective-C (iPhone)…prologue

I’ve just started a new game project for iPad which I hope will end up with a commercial release. At Red Glasses, we’ve got comparitively few projects for the next couple of months. If anything comes in, I’m expecting one of the other coders can pick it up, and I can concentrate on this in-house iPad game.

Schedule: 1. Prototype; 2. Refine

I wrote the first prototype this weekend – it looks like a very basic Flight Control right now (the game design is trying to do something novel with FC mechanics – I like that control system, but I think we can do a lot more with it than people have done so far).

Now it’s time to implement some of the novel mechanics, and prototyping our core game design. This will mean creating a lot of game-logic, lots of behaviours, etc. And so … I’d really like to use an Entity System.

Objective-C: the bad bits of C … without the good bits of C

The thought of building an ES without templating makes me weep.

Unfortunately, Obj-C continues to show it’s age/mediocrity/general-lack-of-usefulness: it’s finally (this year!) acquired an implementation of closures, but it still doesn’t have generic classes.

NB: *I believe* it doesn’t have generics; it might have, but I’ve not noticed them in any ObjC projects, code, libraries, etc. A quick google came up with nothing.

ES without generic classes is like OOP in Perl: techically possible, but liable to contain a lot of painful bugs which a compiler would have spotted for you … and contain a *lot* of boiler-plate code you really shouldn’t need to write in this day and age.

I could fix all this with C++ – it has probably the world’s best implementation of generic classes. It’s not perfect, but IME it’s the best overall balance of functionality.

Unfortunately, unlike C, Obj-C is incompatible with C++.

What next?

Ideas and suggestions are *very* welcome…

Assuming I can get an ES to work on iPhone, I’ll be blogging it. I’ll aim to open-source the ES I build.

I’ve had a quick look at using C++ classes and objects in ObjC. Using the objects has a lot of boilerplate code from Apple, that looks pretty good (but painfully verbose :( ).

…but using the *classes* appears pretty horrific. Since ObjC doesn’t have any kind of generics (that’s how we got to this point :)), it can’t handle those parts of C++ in a meaningful way.

Then again, since Obj-C is *very* dynamic as a language, I might be able to do something cunning with passing around NSClass instances / references. Combine that with runtime method dispatch / message-passing, and *maybe* I can code a decent C++ ES … while using ObjC to write logic that acts on the data from that ES, without having to write so many extra lines of code that the “saving” is lost.

As I said … ideas welcomed!

Categories
computer games games design

Games and the loss of Art

If a picture paints a thousand words, then a 3D engine wipes-away 900.

Even a 3D engine with “a great game” and “good level-designers” still only manages five hundred.

It’s taken me a long time to realise this, but … games published today often have inferior visual Art to games published 20 years ago.

Working inside game studios you still get to see stunning art on a daily basis – it’s just that none of that ever makes it into the game. It’s all “concepting”: static, one-off paintings. And although it’s only a minor issue, I feel we’ve lost something in having these moments fade away from the games themselves.

I don’t have time to carefully research and pick my examples, so I’ll just pull straight from memory (and hope the point still makes sense by the end :))

1991-1994: in-game graphics

This is going to be hard to demonstrate if you judge each image too literally, but bear with me…

I’ll start with one of the most “art” games of the 1990s: Another World (1991):

Another World is easy for this post: the whole game was designed around “how good can the visual art be … with a very small colour palette, no shading, and very blocky characters?”

Here’s a screenshot from Ishar 2 (I think; could be Ishar 3?) – either way, 1993-1994:

From GOG.com

Ugly, horrible. Composition is mediocre.

And yet … just have a look at the open book on the left-hand side, opened, with the pages caught in the act of riffling in a breeze. Hand-painted in *very* low resolution, with readable text.

Look around the room, look at how much stuff is crammed in a single image. Why? Because none of it had to be modelled in 3D – the game was crammed full of this kind of whimsical artistic painting, full of imagination.

Or look at Elf – published 19 years ago! Here’s two screenshots. First, look at the “normal” graphics in this platform game:

http://www.mobygames.com/game/dos/elf/screenshots/gameShotId,315213/

…now look at one of the “boss” screens:

http://www.mobygames.com/game/dos/elf/screenshots/gameShotId,315213/

In the second screenshot look at the background: hand-painted, but also soft-focus, to provide greater contrast with the player and the boss. I want you to consider the technique, rather than the actual screenshot – this is a poor example, sadly – but my copy of Elf is FUBAR so I can’t take a good one.

2010: the missing Art

15 years later, how has the artwork improved?

The engines produce stunning visual effects, fully animated, in 3D. Sony and Nintendo are now putting their games onto mass-market 3D displays so you see *actual* 3D images, rather than 2D simulation of a 3D scene.

But the artwork has atrophied. Modern games have no time to spare for epic vistas – there’s no room in the gameplay for static screens.

And it’s phenomenally expensive too: it used to be that painting a 100×100 pixel area of screen required 10,000 pixels to be painted – a matter of minutes with a good photo app.

Nowadays, you have to create 3D models – separately – for each item that will appear in that area. Then you have to paint textures for each one – usually 100 times as many pixels *each* as in the 2D equivalent – and apply lighting by hand, and positioning in 3 dimensions.

Net effect: low-importance areas of scenes are empty and ill considered (artistically). Flights of fancy are rarely possible (developers literally can’t afford them – it costs too much money in the salaries of extra staff)

“You don’t take a photograph, you make it”

Don’t believe me? Then try this site, find a game you’ve played, and compare the images here to the images you *actually saw* in the game:

http://deadendthrills.com/

From the about page:

an emerging art form that’s as far from the average screenshot as it is the average photograph.

So … what?

Go back to the Ishar screenshot.

Fire up Oblivion (a modern equivalent: a sword-and-sorcery RPG), and look for anywhere in the game with even half as many “interesting” items that might spark the imagination. What are those things? What do they tell about the character of the person who lives here?

(in Oblivion, you’ll find that everyone has a fetish for broken crates and buys their chairs and tables from the same – apprentice – carpenter. Some of them have a couple of houseplants. That’s it.)

This post was about the visual art, but the loss is felt in the games themselves, in a loss of immersion, and a loss of *player* imagination. Sole-author flash games – often made by artists working alone – go some way to redressing the balance. Even if they didn’t, it’s small, and it’s subtle – it’s really not that important. But it’s a loss nevertheless.

(some of my favourites from Dead End Thrills)

Categories
computer games design games design games industry marketing

One Hundred MEELLEON Dollar! (…wasted, on RTW/APB)

18 months ago, Scott and I described our perspectives on the fall of Tabula Rasa. I said that if you’re going to spend $100m on an MMO, you’d better be aware of MMO history and not repeat those mistakes.

It would seem that Real Time Worlds wasn’t listening – coincidentally, $100m is how much *publically announced* money just went down the pan, now they’ve gone into administration.

No-one in this industry likes to talk openly about their enormous fuck-ups – and the few that do tend to become pariahs, sued by their employers or shunned by future investors. No major company openly documents – or “allows to be documented” – anything of import. It’s a system that punishes progress in the professional field.

There’s a single public analysis on RTW/APB right now. It’s an anonymous source (oh, for god’s sake! When will we stop shooting the messengers?), but some non-anonymous sources have backed it up. So, let’s take a look…

Anonymous: ExRTW on RPS

(source is here)

APB:

“lead you to think it’s going to come right by release … You end up in this situation where you’re heads down working your ass off”

Me, 18 months ago:

“The implication being that they didn’t do anything wrong, perhaps, but that they stood by and watched the train rolling slowly towards the brick wall and didn’t try (hard enough) to stop the collision.”

APB:

“APB … came together… relatively late in its development cycle … leaving too little time for content production and polish … lacking any real quality in some of its core mechanics”

Me, 18 months ago:

It wasn’t ready for beta. I said so. Many others said so.

APB:

“it was pretty clear to me that the game was going to get a kicking at review – the gap between expectation and the reality was huge.”

Me, 18 months ago:

A survey was taken, internally, asking what people thought. The results were never published – so no-one (apart from the survey takers) knows exactly what the results were, but we were told that the *company* knew.

Incidentally … I was afraid to come clean at the time (and upset individuals), but that survey of all staff was EXTREMELY negative about the project, and I have been told (but you’ll have to take this as unsubstantiated rumour) that the reaction of the top-level execs on seeing the results was simple:

“Bury it”

APB:

“I wasn’t on the APB team, so I played it infrequently, during internal test days etc. I was genuinely shocked when I played the release candidate – I couldn’t believe Dave J would be willing to release this.”

Me, 18 months ago:

[I wasn’t on the TR dev team, but] given my position I had the luxury of a lot of insights that other people wouldn’t have had.

I played TR in the alpha, and I actually enjoyed it

it was a good pre-production prototype [but – at best – YEARS away from being a finished project – and they went to beta only 6 months later]

APB:

“The real purpose of beta is publicity, not bug fixing. We never took that lesson on board.”

[I didn’t cover this, but Scott’s post did, IIRC]

And, finally…

“MyWorld is an innocent bystander caught up in the demise of APB. Which is a real shame, because it is genuinely ground breaking, though not aimed at the traditional gamer audience. ”

…which sounds an awful lot like Scott’s team and Steve Nichols team (the former very basic playable but unreleased, the latter Dungeon Runners)

Major differences

EDIT: it’s 100k sales, not 10k.

APB:

“the real killer, IMO, is the business model. This was out of the team’s hands. The game has issues, but I think if you separate the business model from the game itself, it holds up at least a little better.”

I originally (mis-)understood
the figures that Nicholas Lovell has dug out, but apparently sales were over 100k (presumably that means practically zero sales in USA?).

By comparison, the previous big-failure MMO which went down because of the “bad business model” was Hellgate: London.

Hellgate sold 500,000 units, and estimated that even if they’d made their subscription compulsory, they’d still have sold 250,000.

So, not as strongly as I originally put it, but I’m still dubious about the business model being the cause. This stinks to me of a marketing/sales failure (unless those 100k sales are spread equally across territories)

APB:

“we should have kept our powder dry. Our PR felt tired and dragged on and on, rather than building a short, sharp crescendo of excitement pre-release.”

IMHO this is a really bad idea – unless you remove the entire “MMO” part of the game. Big Bang Marketing doesn’t work for MMOs; this is the old-school of game-marketing.

Although, given how ineffective RTW’s marketing seems to have been, I doubt a big-bank-marketing-campaign could have done any worse.

Conclusions … and “moving forwards from here”

Two parts of this industry need to talk, one part doesn’t. As I said in 2009: “We need to talk [about failure]; when will we talk [about failure]?”

The professionals: you’re getting burned out, chewed up, and spat out. Your lives are being wasted.

The investors: you’re getting screwed. You write it off as random failure, and you can afford it, but you’re shying away from “games” as a result, leaving good profits behind on the table.

The inexperienced, the mediocre, and all those people who don’t actually MAKE the game, but do get to ruin the process (rockstar-designers, producers, marketers, directors, managers, etc) : you’re doing great. Your lack of skill hasn’t held you back, and the company will often go bankrupt before anyone gets around to firing you for incompetence.

…Can we actually move forwards, though?

When I left NCsoft, I was cold-contacted with some new job offers.

A typical example: “make a success of” a project that had already spent several years and many millions of dollars and was about to launch. But I wasn’t allowed to move said launch, and they had “infinite” funding (I kid you not).

There was a fat salary for anyone willing to shepherd that disaster (and, I suspect, become the public fall-guy). The game itself launched as they insisted, and was a laughable failure. I doubted it could have been fixed without another 12-18 months of development.

And me, personally? Nowadays, I run a freeform studio developing mobile apps and games for corporate clients. Each employee is responsible for themself and for their own decisions. If you need a project-manager to mollycoddle you every day, you can’t work here.

Personal responsibility, and personal authority; so far, it’s working pretty well…

Categories
alternate reality games computer games games design

Graduate/intern games job, London (SixToStart)

Details here

a six-week paid internship, beginning in October. We’re looking for smart people who are interested in making social and story-based online games. You must be able to demonstrate experience of having worked on games in the past, whether you helped make a big game, or worked on your own in your spare time, and we’re particularly interested in:

* Front and back-end web developers
* Game designers
* Artists and graphic designers (aimed at games)

This is one of those “exceptional” opportunities – SixToStart is a tiny tiny company, but they have a habit of winning awards for their unique mix of modern games, at the cutting-edge of game-design, using computers as only a part of the overall game. Google if you don’t know them…

Categories
computer games games design marketing

How not to market an MMO: EA/Mythic Entertainment

Mythic Entertainment – End of Subscription

(subtitle: EA/Mythic forces themselves into commercial failure)

8 months ago, I tried to play Warhammer Online.

Tried, and failed, because EA Mythic told me – in no uncertain terms – that it was completely impossible for me to play.

This was after releasing press announcements and running a big campaign trying to get people like me to play. They’d been too lazy / stupid to remove the “you cannot play this game” message from their own website, even several days after the marketing campaign started.

Net result: I never got around to playing. They made it such a pain in the ass that even when offered this *for free*, I never got that far.

So, I got this message today. And this just double-underlines my previous point. Read this message, and ask yourself: does it entice me into the game?

Throwing away money, one customer at a time

End of Subscription Notification

Your subscription for Mythic Entertainment Warhammer Online: Age of Reckoning for Game Account [username] has ended for the following reason:

* Subscription is not set to renew

If you did not authorize this, please contact support at (650) 628-1001. Phone support hours are 10:00 am – 10:00 pm eastern time, Monday through Friday. You can find further information on account security at http://help.warhammeronline.com.

Thank you!

This is an automated email from the Account Management site for Mythic Entertainment.

Games Workshop, Warhammer, Warhammer Online, Age of Reckoning, and all associated marks, names, races, race insignia, characters, vehicles, locations, units, illustrations and images from the Warhammer world are either ®, ™ and/or © Games Workshop Ltd 2000-2009. Used under license by Electronic Arts Inc

Let’s do a quick analysis. Here you have a DIRECT contact with the consumer – moreover a consumer who isn’t yet paying you any money, and who you know has NEVER logged-in to the game.

  1. 36% of the message is an IRRELEVANT copyright notice that shouldn’t be there
  2. 30% of the message is an INCORRECT security advisory
  3. 12% of the message is “this is an automated email”
  4. …leaving a mere 22% of actual content

Let’s look at the content, as any good marketing person would.

  1. What’s the Call To Action? (we’re talking to a customer; what are we asking them to do?)
  2. How easy do we make it to respond to the CTA? (the easier we make it, the more people will do it)
  3. Where’s the Appeal – a.k.a. what do we do to make the CTA attractive? (the more attractive it is, NOT ONLY will more people do it, but a great percentage will follow-through by paying money / engaging after the CTA)

Hmm. Respectively:

  1. None
  2. Make a international phone call – at cost! – to an unrelated department
  3. Technical language with no hint of “game”, or welcome. Wording is both appallingly bad English ( “is not set to renew”), and also fundamentally negative (implies that I *shouldn’t* want to renew, even if I do want to)

As I said 8 months ago, someone ought to deploy the PlayFish folks onto the smoking remains of Mythic. I very much doubt they’d allow such terrible excuse for marketing to go on…

Categories
entity systems games design massively multiplayer programming

Entity System 1: Java/Android

Please note: the design described in this blog post has been much improved and updated and put up – with full source – on http://entity-systems.wikidot.com/.

On the wiki linked above, there is now a wholly new Entity System design, based on this one, but much improved. There’s a brief post about it here, recommended instead of this ES design: http://t-machine.org/index.php/2011/08/22/entity-system-rdbms-beta-a-new-example-with-source/.

I’ve been writing about Entity Systems sporadically for the last few years. Recently, I finally had the time and the excuse to build one of my own (i.e. not owned by an employer). If you haven’t read the main series of ES posts, you should do that first. There are many things in the world masquerading under the Entity/Component banner – and even more that just coincidentally share the name, but describe something else completely. It’s worth understanding which variant I’m talking about before you read about what I’ve done :).

Why build an Entity System?

At a generic level, this is covered in the other posts. But it’s taken years for me to have the time/inclination to write a new one from scratch outside of my day-job. What happened?

  1. I left my iPhone in America, and it took 2 months to get it back
  2. Google gave me a free Nexus One, in the hope I’d write something for it (ha! Their cunning plan worked…)
  3. The Android marketplace is such a miserable morasss of third-rate crap that eventually I was compelled to write my own Android game … just so that I would have something to play (there are very few games on the Android store that are even worth the time it takes to download them)

I’ve been making games for a long time. I know how much effort will go into it, how much time, and how much slog there is before it becomes worth it. Writing a game on your own often means putting in 90% of the effort to get 10% of the reward.

Enter … the Entity System. If I were to pick a game-design that mostly used data-driven game features, I could implement it around an ES, and massively reduce the amount of planning needed to get the game running. I could maybe have a working game after a mere 20% of the effort. Hmm…

Building the ES for Android

Android runs something that’s *almost* Java (although more on that later – Android’s version of Java is very slow at some of the core libraries, and it really shouldn’t be). Technically, Android supports all the core data structures from Java (Collections), and the templating system (Generics).

If I were writing an ES in C++, I’d do it using templates without pausing to think; I wondered how well the same might work with Generics, given that Generics is *not* a complete templating system, although it provides quite a lot.

Getting started: early ES decisions

How to design/implement this thing? Well, we know one thing for sure:

Entities have a single name/label/global-ID. Entities MUST NOT contain ANY DATA: these are NOT objects, this is NOT OOP!

There you go, the Entity class wrote itself:
[java]
public class Entity
{
public int id;
}
[/java]
This immediately raised some concerns for me, being the seasoned coder I am (ha!). How the heck was I going to write any code that dealt with these things if I didn’t have references to them? Obviously, sometimes you do have references, but other times you expect to follow refs from within the objects you have, to get to the objects you need. That wouldn’t be happening here, since there are no inter-object refs.

[java]
public class BaseEntitySystem implements EntitySystem
{
/** I’m too lazy to write a "safe" method to get a globally-unique ID; for now,
I just return 1 the first time I’m called, 2 the second time, etc… */
protected int getNextAvailableID();

/** Whenever you create an entity, you’d better invoke this method too!*/
public void registerEntity( Entity e );

/** The method to solve my fears above */
public Entity getEntity( int id )

/**
* Merely removes the entity from the store. It becomes a GC candidate
* almost immediately (since all other refs are transient)
*/
public void killEntity( Entity e )
}
[/java]

…but, again, being a Veteran coder, the survivor of many painful battles on the field of programming … I didn’t trust myself in the slightest to “always remember” to invoke registerEntity. Quick trick: give the Entity class a static reference to a default EntitySystem, and have each EntitySystem check if that reference is null when starting; if so, set itself as the “default”.

[java]
public class Entity
{

public static EntitySystem defaultEntitySystem;

public Entity( int i )
{
id = i;

if( defaultEntitySystem == null )
throw new IllegalArgumentException( "There is no global EntitySystem; create a new EntitySystem before creating Entity’s" );

defaultEntitySystem.registerEntity( this );
}

}

public class BaseEntitySystem implements EntitySystem
{

public BaseEntitySystem()
{
if( Entity.defaultEntitySystem == null )
{
slog( "Setting myself as default entity system (Entity.default… is currently null) self = " + this );
Entity.defaultEntitySystem = this;
}
}

}
[/java]

W00t! I can create Entity’s, and I can find them later on. Awesome. What about those Components, then?

Getting started: Components in Java

I’ve done ES in C++ before, with real templates, so I wasn’t really thinking at this point … I just ran with what seemed natural based on prior experience. The thought process (had there been one) would have been something like this:

  1. This is java, I use Eclipse: I absolutely *must* have the IDE know what data/fields exist in each component so that Content-Assist/Autocomplete works 100%. Otherwise I will gouge my own eyes out having to remember, and doubly so each time the app compiles but dies at runtime because of a typo in a field-name.
    • Requirement: each unique Component must be defined as a java Class, with each of the fields being a public member of that class
    • Requirement: to access a Component of a given Entity, you must invoke a method which returns something that is typed (as in language typing) to the correct Class

I made a Component class, and had all Components extend it; there is a particular reason for this, but it doesn’t matter right now – essentially, it lets you define shared behaviour for all Component subclasses, and just saves you time on typing.

My first real Component:

(NB: I defined this *inside* another class, because I couldn’t be bothered having N source files for the (large number of) N Components I was bound to create. Hence the “static”):
[java]
public class MyEntitySystemExperiment
{

static class Position extends Component
{
float x, y;
int width, height;
float rotationDegrees;

@Override public String toString()
{
return "("+super.toString()+" @ ("+x+","+y+") * rot."+rotationDegrees+")";
}
}

}
[/java]

Great. I have a component. Now comes the largest single piece of work in the entire implementation of the ES: writing the methods to:

  1. Add a component to an Entity
  2. Fetch a component from an Entity
  3. Remove a component from an Entity

Fetching a Component from an Entity

This is the win/lose point: if this works well, our ES will be nice and easy to use. The other two methods (add and remove) are simply twiddling bits of data. This one is the challenge: can you make it *easy* to write code that uses the ES, and for that code to be clearly *understandable*?

[java]
public class EntitySystemSimple extends BaseEntitySystem
{
HashMap<Class, HashMap<Entity, ? extends Component>> componentStores;

public <T> T getComponent( Entity e, Class<T> exampleClass )
{
HashMap<Entity, ? extends Component> store = componentStores.get( exampleClass );

T result = (T) store.get( e );
if( result == null )
throw new IllegalArgumentException( "GET FAIL: "+e+" does not
possess Component of class\n missing: "+exampleClass );

return result;
}

}
[/java]

Boom! It works.

Let’s just stop briefly and I’ll explain why. Reading Java generics code from cold (just like reading C++ templates) often takes a lot of hard thinking.

Looking at the “result” of this method, we want it to be (enforced by the compiler):

  1. “an instance of a class that extends Component”
  2. “an instance of the particular class/Component that we requested – not just any old subclass”

[java]
/** based on comments at end of blog post, think this is correct,
but not checked */
public <T extends Component> T getComponent( Entity e, Class<T> exampleClass )
[/java]

It causes you to write application code that looks something like this:

[java]
public void doSomethingWithAnEntity( int globalId )
{
// remember, we NEVER hold refs to Entity objects for long
Entity e = entitySystem.get( globalId );

Position position = entitySystem.getComponent( e, Position.class );
position.x = 5;
}
[/java]

…and what’s important is that the “type” of the “Position position = …” line is already hard-typed to “Position”. So, the content-assist will *auto-complete* anything put after a dot on the end of that line, e.g.:

[java]
entitySystem.getComponent( e, Position.class ).AUTO_COMPLETE
[/java]

…so you can instead write your method much quicker, and yet very clearly, as:

[java]
public void doSomethingWithAnEntity( int globalId )
{
// remember, we NEVER hold refs to Entity objects for long
Entity e = entitySystem.get( globalId );

entitySystem.getComponent( e, Position.class ).x = 5;
entitySystem.getComponent( e, Damage.class ).hitpoints = 145;
entitySystem.getComponent( e, Renderable.class ).foregroundColour = Color.red;
}
[/java]

Time-out: HashMap

HashMap is the “correct” class to use in Java for this setup: it’s the exact equivalent of Hashtable / Dictionary / etc in other languages. We need to map (somewhere, somehow) from one thing (an entity) to another thing (a component).

NB: this does not mean that you have to use HashMap as your data-store for the ES; I positively encourage you to consider other options. I used it here as the most obvious, simplest possible structure that would do the job. If you think back to my posts on Entity Systems for MMO development, I’ve often suggested that the data store could *and should* be any of many different things. In particular, SQL databases make for an excellent data-store (and remember you can get in-memory SQL implementations that do away with all the expensive write-to-disk stuff).

Unfortunately … Android seems to only partially support HashMap. You can use the class, but it runs an order of magnitude slower than you expect for a normal JVM (compared to the speed with which it runs other methods). It seems to have problems with the hashcode methods, but also even with basic iteration over the Map contents. Odd. Later on, I had to do some tricks to speed up the ES, just because of this problem.

Fetching a Component from an Entity: Redux

The examples I gave above for accessing components were lean and clear on the right hand side (thanks to autocomplete and strong typing), but terrible on the left-hand-side. By the magic of OOP, I’m going to clean up the LHS. BUT (and this is a big “but”) … make sure you fully understand what I’m doing here. With what I’m about to do, it would be very easy to fall into one of the traps of ES development: slipping back into OOP techniques.

Looking at the example:

[java]
entitySystem.getComponent( e, Position.class ).x = 5;
entitySystem.getComponent( e, Damage.class ).hitpoints = 145;
entitySystem.getComponent( e, Renderable.class ).foregroundColour = Color.red;
[/java]

… applying OOP mindset, we see that the first argument is redundant; the Entity already knows about the EntitySystem to which it’s registered.

Also, we know that the Entity class will never have any methods or data other than the ID. If that’s the case, the only thing we’d ever “get” from an Entity is a Component. So, we can add this to Entity:

[java]
public class Entity
{

/** Gets a filtered view of the entity’s data, only returning the subset that
* corresponds to a particular one of its components */
public <T extends Component> T getAs( Class<T> type )
{
return source.getComponent( this, type );
}

}
[/java]

…which converts our usage example to:

[java]
e.getAs( Position.class ).x = 5;
e.getAs( Damage.class ).hitpoints = 145;
e.getAs( Renderable.class ).foregroundColour = Color.red;
[/java]

Using the ES with Systems

Recap: right now, we can:

  1. Create entities
  2. Add components to entities
  3. Read/Write the data inside each component, on a per-entity basis
  4. Fetch entities by globally unique ID

One last thing is needed before the ES can work: we need a way to fetch Entities “by component”.

e.g.:

[java]
public class MyEntitySystemExperiment
{

public void runLoop()
{
while( true )
{
// move all the entities
positionSystem.move( MOVEABLE_ENTITIES );

// check for collisions
collisionDetectionSystem.process( MOVEABLE_ENTITIES );

// render all the visible entities
renderingSystem.render( RENDERABLE_ENTITIES );
}
}

}
[/java]

We need a way to provide the arguments that are capitalized above. We know that these should be plain-old lists of entities. We know they have to come from the EntitySystem. Finally, we know that the only defining characteristic of these lists is that everything in the list has *at least* a particular Component.

(respectively, in the example above, the lists contain: “all entities that are moveable”, “all entities that are moveable AND all entities that are barriers to movement (e.g. solid walls)”, and “all entities that should be displayed on-screen”)

So, one more method for the EntitySystem interface:

[java]
public interface EntitySystem
{

public List<Entity> getAllEntitiesPossessing( Class… requiredComponents );

}
[/java]

“Class…” is just a convenience; in many cases, you’ll be insisting on a single Component. In many other cases, you’ll be insisting on a set of components. Java varargs provide the minor convenience of doing both of those in one method, while retaining type-safety.

The implementation of this method is obvious: it iterates over every entity that’s been registered, and checks it against ALL the required components. If it possesses all of them, it goes into the output list.

Finis

That’s it. So easy! Obviously, there’s more to it – the other methods you need to create should be mostly self-evident – but this should be enough to get you started.

Now, I’m not sure where to go from here. I’ve got a working Java ES. I’ve got some performance improvements and feature improvements. But … in practice, hardly anyone writes games in Java (except Android programmers, and there aren’t many of those), so … is it worth it?

Alternatively, I might just run through some of the practical pros and cons I encountered when actually using the ES in writing the game-logic. There’s some interesting things that came up which most people encounter sooner or later when doing their first ES, and which might be worth looking at in more detail.

One last thought…

Did it work? Did this ES allow me to write a decent Android game?

Yep. I wrote a space-invaders / bullet-hell game with it. It worked fine on Android phones for a hundred-odd enemies and bullets on screen. On Android, thanks to the crappy JVM, it started to chug after that (dropped below 30 FPS), so I had to make some substantial performance improvements, and now it’s happily rendering 300 things all flying around at 20-30 FPS. The game is far from finished, but it’s playable and fun for a minute or so – a definite achievement considering how little of it I’ve written so far.

many-entities-at-10-fps

NB: it’s got some way to go before I’ll be happy releasing it. But, given a few more spare evenings, I hope to get this up on the Android Market as a free download in the near future.

I’m pleasantly surprised that the Android phones can handle something as high-level as an ES, in a pure, unoptimized “simplest possible” implementation.

Did this post help you?

You can say “thank you” by giving me your email address, and letting me contact you next time I make a game of my own:

[smlsubform emailtxt=”” showname=” mailinglist=”pif-entity-systems”]
Categories
amusing games design

3D gaming? What if…

So neatly done, I find it hard to believe it’s not real

“3D gaming? What if the game characters saw the GAMER in 3D instead of the other way around? Is it really only myself that thinks like this?”

(along with other greats such as: “A good game can be played on a 12″ black and white TV. Fact.” … and “What do all games require? The answer is someone to play them. What if a game went against that very concept?”)

Categories
games design

Judging Game Ideas: Galaxy Trader

(if you haven’t read the main post explaining this, read this first)

Submission

  • Author: (tony.almazan at gmail.com)
  • Title: Galaxy Trader
  • Type: Casual mutliplayer Facebook game
  • Word count: 373 words
Categories
computer games design dev-process games design

Assasin’s Creed 2: Understatement of the Century

From the IGN walkthrough:

“If you have trouble grabbing the beam, just keep trying—we promise it works, but lots of readers have told us it’s not always easy.”

I’m a pretty good AC player, but after 10 minutes of trying to do that one standing jump, I gave up and stopped playing for a long time in frustration.

When game developers talk about “games should be so easy that all players can complete them; no-one should ever have to give up / fail to complete a game because something is too hard”, I usually disagree.

But in this instance, where the game is extremely, excessively difficult on something that the designer obviously intended to be extremely simple – and where the player has spent hours being taught that this will be easy – you have something different going on. It’s a failure of the control scheme; in fact, it’s a bug.

It’s a side-effect of the heuristics that AC uses to decide “what the player is trying to do” – heuristics that are far from perfect, while being very good.

In the first game, it took me a long time to get past the intro – no, really – because if you *try* to jump over gaps, then you fail. The heuristics were so heavily weighted towards “allowing” you to jump off buildings that running over a small gap became very difficult – until you learnt that the character “automatically” jumps small distances.

On the whole, I’m very impressed by the AC2 heuristics – compare it to Mirror’s Edge (a beautiful game, but feels a lot less fluid). I find them a bit too simplistic – I would love another 25% or so of user-control, and another 50% of precision on directional control – but (as ME shows) they got closer to perfect than any other game so far.

BUT … what do you do about a bug like this, one severe enough to make me stop playing the game entirely?

They had a huge QA team already (this is Ubisoft, after all), and such a vast amount of content in this game (multiple entire cities, modelled in fine detail), that there’s no way they could be sure to catch this bug.

Or is there?

This is the raison d’etre for a whole segment of in-game analytics / metrics: data-mining to discover undiscovered bugs.

Good metrics for game designers are VERY hard to describe, and IME the vast majority of the industry doesn’t know how to carefully hand-pick the few numbers they really need out of the millions of stats availalbe. Here’s a good example of how to pick well.

If the game reported

“the quest-point at which people stopped playing”

…then you *might* discover this bug. But it’s too coarse-grained.

If the game reported either/both:

“the segment on the map where people stopped playing”
“the segment on the map where people spent most-time during a mission”

…then you’d quickly and easily discover this bug. By “segment” I mean, essentially, a small patch of polygons approximately 6’x6′. This is relatively easy to measure algorithmically using greedy-polygon grabbing and hashing – although it would take a little care to make sure the measurement of the value didn’t take much CPU time (it could easily be pre-compiled for any given map, of course).

I’m not 100% of the “stopped playing” part – this is a console game, and while that info would be useful, it would mostly stop evenly distributed over quest-end points. Where it was more / less likely, it would be obvious just from knowledge of the story. ALTHOUGH: still well worth doing *in case* there were anomalies there – that should set off alarm bells.

However, the “spent most time during a mission” is more cut-and-dried.

This probe gives you a set of local maxima. It’s categoriesed by mission, making it one level finer than doing it over the entire world-map (which is too much, too uncategorised info), and it’s also coarse enough to correlate closely with user-behaviour (it merges results mission-by-mission; recurring bugs are very likely to show up by people doing the same mission and getting stuck at the same point).

The mission-based merge of results also has a nice side-effect: it tends to iron-out any anomalous results due to people wandering around the open-world game.

So. With a little bit of probing, using probes that you could/should have invented at the start of development (i.e. without knowledge of exact bugs that would occur) this bug could be ironed out. The three remaining questions are:

  1. does Ubisoft do this level of automated-bug-detection,
  2. do their designers bother to look at the anomaly-date,
  3. and if so … why hasn’t the game been patched?
Categories
computer games design games design web 2.0

2010 and the Browser MMO

What’s a browser MMO? Today, not 5 years ago?

In the previous post I poked Earth Eternal for claiming to be the “*REAL* MMO for your browser”, and disappointing on that front (although it could be awesome on all other fronts). I finished with:

So … EE may be a great game … and it may be launchable from within a browser … but it’s a long way from a poster-child for browser-based MMOs. It’s still fighting the browser as much as it’s complementing it.

It’s 2010. I know a lot of people in the industry still haven’t accepted even the concept of a “browser-based” MMO, let alone realise where they’ve got to now.

I’m not in the loop on this stuff any more, but it set me to wondering what I’d be chasing if I weren’t doing iPhone exclusively right now.

What about you? Are you fighting the browser?

The Executive’s impression

Game developers aren’t stupid. Executives aren’t clueless. But some are.

In the minds of those who make games but “don’t do” browser games on principle, I’ve found “a browser MMO” often means some or all of:

  1. A text-only game running off a single Perl webpage, where each action causes the whole page to be refreshed.
  2. Non-real-time interaction (because, you know … web-servers aren’t powerful enough to run anything in real-time)
  3. High-latency, jerky, shallow movement of characters and objects
  4. Weak 3D graphics – 5 years or more behind the curve of Console graphics
  5. Fat client downloads that “no-one” can be bothered to wait for, and would be better-off distributed on a DVD

What’s reality? Well, here’s a few observations…

Drop-dead gorgeous graphics … are the norm

For a look at today, go browse some of the Unity demos. Unity is *not* the “best” 3D engine, the fastest, the best language – but it’s nicely balanced towards ease of adoption. It’s very easy for new developers to get into. And so it’s setting a very achievable base standard that’s higher than many people would believe. With anyone able to produce 3D to this level, and embed it in the browser almost as an afterthought, the use of plugins becomes a new landscape.

Right now, crappy Flash MMO’s are still re-treading the ground of Dragon Fable (which is coming up to it’s 4th birthday) et al – albeit that’s now the “standard” and there is better and better appearing. But just as it only took a few games to adopt this approach and show how good it could look, widespread adoption of Unity, and a few high-profile innovative products, will drag forwards the rest of us.

(by “us” I don’t mean professional developers, I mean primarily the amateur and semi-pro teams who don’t yet work for a living – the students etc)

2 years ago I wouldn’t have thought it would be necessary to say this (I assumed that FB would have kicked everyone’s butts) but maybe it’s still relevant: going forwards, I suspect “browser MMOs” still need to be a lot more “browser” and a lot less “traditional MMO” if they wish to stand out.

The facebook question

Browser MMO, huh? So … Why is there no option to use Facebook Connect to login? In 2010, I think that’s what browser-MMO probably means to most people: “it works from Facebook”.

The massive, fundamental changes to Facebook that are coming in this year may push a lot of content-providers off FB, and back to the web – but users will continue to demand single-sign-on access, and shared access to friends lists. This already works, off-site, thanks to Facebook Connect (both for websites and for other hardware platforms, e.g. iPhone).

I may be completely wrong, but my suspicion is that many developers still want to “use Facebook”, by which they mean:

“use (the large number of accounts on) Facebook (to get lots of users in our game without having to do so much advertising)”.

…while (again, merely a suspicion) users want their games to “use Facebook”, by which they mean:

“use (the apps, data, and list of friends I already have on) Facebook (to reduce the effort I go through to play the game)”

The problem here is the developer is chasing more signups, and the user is chasing ease-of-access. IMHO, the FB changes are going to cut off most of the former, leaving the question: who will do best at fulfilling the latter?

The Glottal-Stops and Square Pegs of User Experience

When people surf to your MMO direct from the Web, do they get a feeling akin to the glottal-stop? Do they feel like they mentally “stumbled”, as the paradigms and user-interface go through a sudden change?

Embedded within an ordinary web-browser, does your MMO look like a square peg forced into a round hole?

The effects are subtle, but they decrease virality, decrease engagement. The effects are tiny, but with millions of web-users out there, they can be cumulative. Each time a user experiences this, you marginally shrink your maximum user-base, and you push your conversion rate down.

Why was I so shocked that Earth Eternal is (silently) Windows-only? (as is/was Free Realms, for that matter)

Well, largely because it reminded me of years ago, when you’d occasionally go to a website only to see:

“This site is only valid in Internet Explorer; you are not running that browser, so you are seeing this special page instead of the site. Please download IE now and then come back.” (or Netscape, or “desktop, but you are using a mobile phone”, etc)

History suggests that this is not a viable strategy when you’re fighting it out on the web…

I’ll know it when I see it

I’m waiting for one feature in a major MMO. I’ve seen it in a few “amateur” MMOs, and you get it on Facebook apps etc. It’s a fundamental expectation from the Web, and it is incredibly powerful:

Each piece of interesting content is *named* … it has a unique URL … so that I can directly tweet places, events, people, and things. I can bookmark conversations I’ve had. I can archive, I can cite, save, and return.

Bonus points for incorporating a bit.ly service in the client, so I can literally copy/paste direct into twitter

I’m hoping it’s out there already, and I just haven’t spotted it yet. When it comes, someone let me know; until then, I’ll be spending more time in flash games, and less in mainstream MMO’s. I prefer my gaming to be Web-compatible, thanks…

Categories
games design

Judging Game Ideas: Net Quest

(if you haven’t read the main post explaining this, read this first)

Submission

  • Author: Chris Locher (calocher at gmail.com)
  • Title: “Net Quest: The Search for the win”
  • Word count: 500 words
Categories
computer games conferences games design games industry

Got an idea for a new game? Want some feedback and publicity?

In general, it seems that most entrants to game-design-competitions could get huge benefit from just a small amount of fairly simple advice and feedback.

I’ve been a judge on several game-design competitions. I’ve seen a lot of recurring mistakes and successes, and I’d like to see less of the former, more of the latter.

I’m hereby offering to provide *public* feedback to anyone who wants to send me their idea. I’ll publish your idea on my blog, along with my thoughts and reactions.

Here are my rules:

  1. MINIMUM of 300 words
  2. MAXIMUM of 500 words
  3. State whether it’s intended to be a Casual game, or a AAA game
  4. State whether it’s anonymous, or if you want me to include an email address and/or website URL (for people to contact you if they liked your idea)
  5. I will pick the most interesting ones, and publish the main text of your email, and my reactions, on this blog
  6. Email it to me directly, at adam.m.s.martin at gmail.com
  7. You must include the text: “I have read everything on the blog post, and understand and accept all the terms and conditions”
  8. If I can think of someone better-placed to comment on your idea, I *might* forward your idea to another industry-expert blogger, on the condition that they publish it on their blog with their own feedback, just as I would have done myself (unless you SPECIFICALLY state that you don’t want me to do this)

Some notes…

SXSW entrants

If you’re already entered for SXSW 2010, don’t bother sending me your idea until after the conference. I’m not going to allow this to interfere with that event.

Public vs. NDA

If you ask for an NDA, you’ve already lost. Forget it.

In general, the only people who would bother to “steal” your game idea are so incompetent / uncreative that the “best” game they could create – even using your idea! – would be so appallingly bad that no-one would ever play it or talk about it.

Spelling and grammar

I will judge you on your spelling and grammar. Get used to it. If you are so lazy you can’t be bothered to spellcheck your entry, you’ve just screamed:

“I AM TOO LAZY TO DESIGN OR MAKE A GAME, I WILL GIVE UP AS SOON AS IT GETS MILDLY CHALLENGING!!!”

Cheat, cheat, and cheat again

Anything you can do to make your pitch more convincing is acceptable. Within the 500 words limit, of course.

If you’ve got concept art, a downloadable MOD, or even better a faked gameplay video … include links!

Categories
computer games conferences dev-process games design games industry

Panel at SXSW – AAA Game Design competition

In a few months time, I’ll be in Austin, TX, sitting on a panel at SXSW … judging people’s ideas for new computer games. I’m going to make an offer here, now, to help people entering future competitions (FYI: it’s too late for SXSW 2010).

This is the fourth time I’ve been a reviewer or judge for a game-design competition/panel/etc, and I’m noticing some recurring themes. This is interesting, since everything I’ve judged has been completely different (different countries, different audiences, different rules).

Recurring themes of game-design competitions

One theme in particular is that a large percentage (circa 30%) of entries are depressingly bad; it seems that many of the wannabe-game-designers in the world are just plain lazy.

Another theme is that when someone has a good idea, they often don’t realise how good it is. They end up spending one sentence (or, if you’re lucky, two sentences) talking about the interesting part, and the next 500 words spewing out meaningless drivel that applies to every game ever made.

e.g. “you will have different choices to make in this game, there will be puzzles, and when you finish a puzzle you will get a reward, rewards will be used to unlock more levels, and to finish the game you have to get to the last level, which will be harder than the earlier levels, and … ”

… and: STFU. You’re boring. Do you think that I’ve never played a computer game before? Or do you just think I’m so stupid that I can’t remember what they’re like?

Some tragic outcomes

NB: this is just one example of what goes wrong with competition entries; I could give you countless more…

Some of the judging I’ve done was at the start of a competition, where the teams then spent the next 3+ months full-time actually building their games. On those occasions where a team was let through because we saw something special in their core idea, despite them waffling about a million other things, the team tended to make the EXACT SAME MISTAKE during production. They would spend 10% of their time on the cool idea, and 1% on each of 90 irrelevant distractions. They never won (surprise!).

For the times when we just judge ideas, not actual games, my distinct impression is that a lot of “good” ideas get thrown out because they’re submerged in so much rubbish that the judges either don’t see them … or assume the above is going to happen, and so they want to give the attention to other, more focussed teams.

So…

So, I’m offering anyone (anyone!) the chance to get some free feedback on their game idea, in the mindset of a competition judge. Maybe you’ll discover holes in your pitch, maybe you’ll discover ways to improve your core game … maybe it won’t help you at all :).

Details here: Got an idea for a new Game?

Categories
community design facebook games design games industry marketing massively multiplayer web 2.0

Farewell, Metaplace

I got this in my inbox a few days ago, and it’s been forwarded to me by a few people since:

(NB: the fact that you still have to login MERELY TO READ THE DAMN FAQ linked from the PR statement is IMHO symptomatic of some of MP’s problems :( )

metaplace.com is closing on january 1, 2010

We will be closing down our service on January 1, 2010 at 11:59pm Pacific. The official announcement is here, and you can read a FAQ guide here. We will be having a goodbye celebration party on January 1st at 12:00noon Pacific Time.

Some of the correspondence I’ve seen on this – what went wrong? what should they have done differently? – has been interesting. Personally, I’m in two minds about it. I think there were some great things about and within MP, but from the very start I felt it had no direction and too little real purpose (and if you ask around, I’m sure you’ll find plenty of people who’ll confirm I said that at the time).

I’ll hilight a couple of things that haven’t come up so much in conversations:

Bad

  1. On the face of it, MP was “the bad bits of Second Life…” (poor content tools, poor client, no direction, no purpose)
  2. “… without the good bits of Second Life” (no sex, no mainstream publicity, wrong target audience to charge millions of dollars in land-rental to)
  3. Poor discoverability (how do you find something cool in Metaplace? Go to site, login, download client, wait a lot, browse a weak index, wait for more downloads, wait for content to stream in … etc)

Discoverability was IMHO the killer: this is something that so many “hopeful” social sites and systems get wrong, and only a few get right. The best examples are still simple: browsing your friends’ friends on Facebook by looking at photos of their faces (hmm; who do I fancy?), or using Google to find things you’re looking for (the gold standard in tech, but also the base *expectation* of the modern web surfer).

The history of SLURLs in Second Life should probably be required reading for people interested in this – if you can find ways to experience / re-live life pre-SLURLs, and read through some of the trials and tribulations that Linden went through in getting them to work.

And even then, of course, SL still had no browsability – but it least it had “open” bookmarks and copy/paste references you could share with people, and embed in webpages. That was barely acceptable (and still “awful”) back when SL was in its prime; the equivalent “minimum acceptable” is probably Faceboook Connect with full Facebook integration (i.e. not just FC-login, but having a bona fide FB app too that acts as an alternate access-path for your virtual world).

Good

  1. Well, obviously, there was a lot of great content in there. I only skimmed it, but apart from the problems above, I saw a lot of interesting stuff
  2. The AJAX/CSS/HTML GUI … it was really easy for me to mess about gaining and browsing badges (both mine and other peoples).

Early on, I found the AJAX vs Flash part particularly interesting. The former showed up how weak the latter (the world-client) was: sometimes I went to the site, all happy about the badges, the popovers, etc, and as soon as I got into the Flash client, my mood would drop noticeably. Eventually, I stopped bothering visiting at all; I dreaded the slow, unwieldy, “clicking all over the place to move fractionally”, Flash experience.

One question I had was how much this was to do with the languages / platforms involved: did AJAX/CSS inspire the people working in it to make lighter-weight, faster, more abstracted core experience? Or is this just coincidence? There should be literally no reason why either of those platforms forced the designers to provide the experiences that way (Flash is capable of a much faster, snappier, fluid usability experience – it’s been excelling at this for years).

Categories
design entity systems games design massively multiplayer programming

Entity Systems are the Future of MMOs Part 5

(Start by reading Entity Systems are the Future of MMOs Part 1)

It’s been a long time since my last post on this topic. Last year, I stopped working for a big MMO publisher, and since then I’ve been having fun doing MMO Consultancy (helping other teams write their games), and iPhone development (learning how to design and write great iPhone apps).

Previously, I posed some questions and said I’d answer them later:

  • how do you define the archetypes for your entities?
  • how do you instantiate multiple new entities from a single archetype?
  • how do you STORE in-memory entities so that they can be re-instantiated later on?

Let’s answer those first.