August 18th, 2010 by adam

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…

August 13th, 2010 by adam

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…

August 1st, 2010 by adam

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…

May 9th, 2010 by adam

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:

public class Entity
{
   public int id;
}

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.

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 ) }

…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”.

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; } } ... }

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”):

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+")"; } } ... }

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*?

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; } ... }

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”
public <T> T getComponent( Entity e, Class<T> exampleClass )

Here, I failed. I wanted the signature to be:

public <T extends Component> T getComponent( Entity e, Class<T extends Component> exampleClass )

…but I couldn’t quite get it to work. I’m too rusty with Java Generics (hopefully someone else can point out my stupid mistake(s)).

But for the most part, it works. Because it causes you to write application code that looks something like this:

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; }

…and what’s far more 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.:

entitySystem.getComponent( e, Position.class ).AUTO_COMPLETE

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

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; }

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:

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

… 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:

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> T getAs( Class<T> type ) { return source.getComponent( this, type ); } ... }

…which converts our usage example to:

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

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.:

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 ); } } ... }

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:

public interface EntitySystem { ... public List<Entity> getAllEntitiesPossessing( Class... requiredComponents ); ... }

“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.

April 23rd, 2010 by adam

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?”)

April 4th, 2010 by adam

(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

(more…)

April 4th, 2010 by adam

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?
January 18th, 2010 by adam

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…

January 14th, 2010 by adam

(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

(more…)

January 11th, 2010 by adam

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!

January 11th, 2010 by adam

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?

December 24th, 2009 by adam

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).

October 26th, 2009 by adam

(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.
(more…)

October 13th, 2009 by adam

Let’s get this straight: if we judge him solely by output (games), then he is not a genius – he’s lazy. Everyone knows the 1% inspiration/99% perspiration quote, and – looking at the last shipped title – IMHO it’s inexcusable to ship crap and pretend it’s OK. You can’t just abrogate responsibility once you stick your name on Spore…

(disclaimer: when I say “lazy” I don’t mean universally; I mean that in at least one crucial aspect, he failed to apply simple due diligence to his own named project; arguably, it’s a kind of laziness in itself not to have checked this stuff, or a kind of cowardice not to have insisted it be done “correctly”; but this post is really about the overall impact of the game, and the way that an individual, if they were to stamp their persona on a project – and expect us to read their persona from interacting with the product – comes across. I have no idea what Will Wright is like as an individual; this is a post about Will Wright as the PR entity…)
(more…)

October 9th, 2009 by adam

Tim Schafer recently posted scans of his rejection letters over the years from various tech and games companies he applied to. There’s one from Atari, one from Hewlett Packard – and, eventually, his acceptance letter from Lucasfilm / Lucasarts.

But far, far more important to this post is the cover-letter that Tim sent to Lucasfilm (it’s a truly special cover letter (go have a look now, before you read on)).

There’s also a rich array of comments at the end of Tim’s post. The HR manager (now head of HR at Pixar) who handled his job application all those years ago even chimes in to say hi. But, again, that’s not what I found interesting; what I liked was the large number of comments from wannabe game developers trying to get into the industry right now.

What’s wrong with this picture?

Reading those comments, here’s a couple of things I noticed:

  • They feel “inspired” and full of “renewed hope” / “confidence” that they have a chance of getting into the industry at all
  • Lots of wishful comments fishing for a confirmation that this technique would “still work today”, while declaring that they’re sure it doesn’t (supposedly demonstrating their realism)
  • The realization that lack of experience is no barrier to becoming an industry legend; coincidentally, most of the people saying this have no experience of their own

…and here’s the conclusions that leapt to my mind:

  • New entrants to the industry are convinced it’s very hard to “break in”; they sound by turns cynical and hopeless. This is merely to get a *job*, not to actually achieve anything. Ouch
  • No-one seems to have told them how easy it can be (how straight-forward it often is)
  • They’re guessing at the reasons this was successful, and are picking the wrong ones (hint: what worked for Tim still works today, if anything *even more* than it did 20 years ago)
  • Their understanding of what it takes to become a major industry figure is back-to-front

Why was Tim successful? How can you re-create that today?

OK, so Tim was: funny, dedicated, and inventive.

But we’ve all heard (I hope) of many occasions when any or all three of those have not only failed to win people jobs but have got them ridiculed (sometimes even had their desperate exploits broadcast at the company or industry level). I’m not thinking simply of the games industry here – although I noticed one the other week where a hopeful Quest Designer tried it on with Blizzard (they spent a thousand dollars on fancy-printed design docs for their proposed Raid Dungeon, drove to Blizzard’s offices, and spent a couple of days sitting on the sidewalk handing copies to staff as they arrived / left the office each day).

Rather, I was thinking of all the stories of people doing everything from sending in their Resume/CV wrapped in shiny metallic paper, to sending gifts (including alcohol) to the hiring managers, to stuff that comes dangerously close to stalking.

Reading the comments on Tim’s post, in at least a couple of cases, I’m not convinced that the posters see the difference between those disasters and what Tim did. I don’t know any of the people involved, but I do know there are positions we’ve recruited for in the past 5 years where a cover letter akin to Tim’s would have gone a very long way (possibly even “all the way”) towards single-handedly getting us to hire someone.

IMHO, it’s all about skill and enthusiasm (although few companies hire on enthusiasm, so we’ll just stick to the “skill” part)

What Tim shows is skill for the *underlying* things that his (potential) employers would love to see him employ in his day job. That requires showing ALL of the following:

  • Personal interest (he plays games. He plays them enough for the next part to be possible)
  • Understanding of a genre (he understands a genre well enough to pastiche it effectively; you can’t do that if all you’ve done is dabble in it (unless you’re particularly skilled at literary/experience analysis – which is great, we want that too! ))
  • Ability to polish (look at the images; notice how he sends up each of LA and Silicon Valley in panels 2a and 2b, and makes out San Rafael to be the land of Nature and Sunshine and happiness)
  • Knowing when to stop (again, look at the images. The “volume” of detail is actually very small; apart from the final image, they are very simple, and quick to execute)

One thing we don’t know, that I’d love to know, is the timing: how long after the phone call did he send this in? I’ve known candidates to take *more than a month* to complete something that was offered (by them!) in a job interview. WTF? If you say you have something, we assume you either have it, or will complete it imminently. i.e. days – a week at the most.

TO GET A JOB IN THE GAMES INDUSTRY, ALL YOU NEED TO DO IS …

Let’s see how simple I can make this…

Make a game.

3 words. Not bad. I think that’s pretty clear.

Sadly, most people misunderstand it *completely*.

Look back at the rest of this blog post; it all lead up to this. When college students ask senior people, and hiring managers, what to do to get their first job, and we say “make a game; make several games”, our reasons for saying that are all encapsulated in what I’ve already said.

Even if you’re in a discipline that has read-made degrees (Programming: Computer Science; Art: Fine Art, etc), what you’re usually showing with your degree is a small amount of education and a large amount of skill / aptitude. University/College rarely teaches the things you’ll need every day to do your job, but it prepares you in a more general way to be/become skilled more quickly.

Imagining a game is easy; if you like games, you should be able to imagine games you’d like to play, or make.

Making a game is easy, if you only ever make a game that fits within your abilities and resources. I’ve made games in under a day. Some of them were even fun! ;). I have a friend who *frequently* writes entire games in a single evening. He’s a programmer, with no art or game-design skills – but some of what he makes looks gorgeous and is great fun; he cheats; so should you. So … never tell me that making a game is “beyond” you; just shrink your ambition to fit.

(incidentally, “I can’t program” is not a valid excuse; pre-teen children regularly learn to program – (IIRC it’s still in the national curriculum in most western countries, although it’s not labelled “computer programming”) – and if they can handle it, what’s wrong with you that you’re too stupid/lazy to do it too? No-one’s asking you to learn highly optimized C++, that would be insane. But … all you need is Basic, PHP, Javascript, or something similar)

Finishing making a game – removing all the “doesn’t actually work” parts – is hard. But everyone who’s been there should understand: it’s *hard* to include all the bits that weren’t fun for you to make. It’s hard to force yourself to check all the buttons still work every time you change something. It’s hard to force yourself to write in-game instructions *and keep them up-to-date* each time you change the game-design, or add/remove a feature.

And that’s a big part of why we judge you on it. Because if you can do that – more than anything else – all the other problems are smaller, more tractable.

August 23rd, 2009 by adam

Last night, I had another game approved for the App Store…

ss1

iTunes: click here to open iTunes download page

I started writing this as a real-life demo on how to use the tech for my new company (if any of our early access licensees are reading this, a project ZIP with full source code should appear on your dashboard imminently), but I gave it to a few friends to test, and they liked it so much I thought I’d put it up on the App Store too.

I’ll be updating it over time to add more of the features from our tech. If enough people download it, I might even make a paid version (which would be pretty handy as an example, too :)) with some more features, more powerups, etc.

August 13th, 2009 by adam

A lot of people asked me to blog as this volunteer project progressed, share some insight into how things were going. I’ve not had enough time until just now, and it’s a mix: Some good news, some bad news.
(more…)

August 13th, 2009 by adam

(c.f. my original post here: http://t-machine.org/index.php/2009/06/28/want-to-help-write-a-simple-rpg-for-iphone/)

I’ve been playing around with GUI setups for DM / EOTB / Wizardry clones on iPhone, and thought I’d post some of the more interesting results here – I’m interested to see what other people think of each of them.

The first three are all assuming a single-character RPG, the fourth is something more like DM / Wizardry (could be 6 chars, could be 3).

Everything is clickable – small maps become full screen map, blue buttons fire spells, character portraits go to the inventory screens.

Screens with no arrow buttons require you to drag your finger forwards/backwards/left/right to move, and allow 360 degree movement. Screens with arrow buttons assume you can only turn 90 degrees at a time (like the original games), although they smoothly animate the rotations (UN-like the original games – because I have access to OpenGL to do the 3D for me).

What do you think?

concept-ss-1

concept-ss-2

concept-ss-3concept-ss-4

June 28th, 2009 by adam

Now I’ve recovered from GDC illness, I’ve got a little free time again, and I’m starting one of the iPhone games I wanted to write. This is a “for fun and learning” project, so it’s deliberately chosen to be low maintenance / easy to make a first version / easy to extend later / etc. I need artists, designers, quest-writers, and programmers.

Well, I don’t *need* anyone; I can do this all myself. But I’d rather do it with other people, and I thought there might be some hobbyists reading this who’d like to do something similar.

EDIT: there’s now a googlegroup for people working on this. You *must* contact me first via email (see below) or your request to join will be automatically rejected. http://groups.google.com/group/dmclone
(more…)

May 18th, 2009 by adam

Richard has often been accused of being “arrogant”, “insane”, and even, simply, “wrong” for his comments along the lines of:

  1. He hasn’t “played” an MMO in decades (possibly “ever”) … because he can’t stop himself from interpreting as he uses them
  2. Surprisingly many MMOs are just WoW by another name
  3. He only needs to play the first few levels of a new MMO to see if it’s really new; he needn’t bother with the rest of it

He’s explained before, in abstract terms, why this is all true *to him*, and pretty much left people to stew if they don’t understand that (while always actively engaging them in conversation to try and explain further).

Now he’s blogged a concrete example of what goes through his head when playing a particular quest-chain / zone: WoW’s STV. If you’ve ever wondered, and/or been confused/horrified/dismayed/insulted by Richard’s statements online and haven’t had the chance to speak to him about it all in person, then I’d highly recommend reading it. I suspect that this concrete analysis will elucidate to a lot more people most of the meaning that the abstract explanations failed to convey. Well, we’ll see…