Monthly Archive for January, 2009

Digital golden stars, alternate ways of rewarding progress.

When I was in middle school, I had a teacher who literally gave out gold stars.  Middle school for us was grades 6-8, so that’s way to old for students to get excited about a little piece of shiny, sticky paper.  But that teacher was smart.  She did it in a very tongue-in-cheek way, making sure that we knew that SHE knew it was lame. She didn’t give out stars for getting the highest score on a test or things like that.  She knew that progressing through school was the goal and the grades were a measurement of that.  But there’s a lot ot of other things kids can do that are beneficial to an education, but aren’t shown in the grades.

  • Ask a particularly good question?  Gold star!
  • You can’t ever show up on time?  Gold star for an entire week on time!
  • Figure out something new not in the curriculum?  Gold Star!

And for some reason we loved it.  Hell, sometimes, we would wear those gold stars on our foreheads right out of that classroom.  (Foreheads being the preferred placement location.)  They were stupid, but they were fun and they made the classroom just a little bit more engaged.

The rest of this post is devoted to observations I’ve made recently of how others are using that formula in current video games.  If you’re not a big video gamer, you may have missed the trend of having achievements in games that are NOT a direct correlation of the core gameplay.  These achievements generally all follow a similar format.

  1. Achievements don’t advance you through the core progression of the game.
  2. Your ability to progress through the game does not directly translate into achievements.
  3. They usually require you to exhibit some sort of exceptional skill or luck
  4. They’re usually “just for fun”

That seems a lot like those gold stars back in middle school.

Some games give you a list of all the achievements you could earn, while others only show you achievements when you actually earn them.  Some mix achievements with rewards based on progression through the game, some keep them completely separate.

Lets look at a few examples…

World of Warcraft

Perhaps one of the biggest powerhouses in gaming these days with insane popularity and usage levels is World of Warcraft (WoW).  A couple patches ago they introduced a new system of in game achievements that people could earn.  These achievements don’t advance your character.  They don’t give you any benefit beyond the satisfaction of earning the achievement.  Yet every time I play WoW, I see countless people working on these achievements.

Upon earning an achievement you’re presented with a popup with a nice gong sound which reminds me a lot of the winning sound you might hear on a slot machine in Vegas.  In addition to your display, everyone around you and your closest friends are also notified.  I’ve seen people receive a particularly difficult achievement and be congratulated by a dozen or more people.

Besides that momentary notification there’s also a UI in game to review all of your achievements.  And you can also compare your achievements with other players to see how they stack up to you.

Some of the WoW achievements include:

  • Eat 25 different foods
  • Hug a list of furry creatures
  • Complete certain dungeons in ways that make them more difficult than normal (such as with fewer players or not taking advantage of some benefit)

Every achievement has a point value associated with it.  But the points, like the achievements themselves, serve no purpose other than the fact that you have points.

How seriously are these achievements taken?  Let me give you an example that comes to mind.  There is one encounter in the game where you fight a water elemental (think watery blob).  During various parts of the fight, he’ll split into a whole bunch of little pieces that slowly move to the original spot.  If you kill off all of those pieces before they make it back, and you do that every time he splits, you get an achievement.  You don’t have to kill them off to win the encounter, in fact running away from them is the easiest way to win.  A friend of mine wanted to earn that achievement.  He tried and was doing well until the last break up.  One of the water globs got back.  So he stood there and allowed his character to be killed so he could try again (instead of easily winning the encounter and not getting another chance until the next day).  He repeated this several times, and all in all spent almost two hours before finally getting it.  That’s two hours played with no real advancement through the game, just to get that silly pop-up.

There are a few achievements that do benefit your character.  But the benefits are always inconsequential to the power of your character.  They might grant you a new title, or allow you to ride a different kind of vehicle (which only varies in look to others that you’d already have).  They’re always just for fun.  But the vast majority of achievements don’t have any reward.

WoW takes it even one step further.  If you earn an achievement, and you’re the very first person on your server to do so, then everybody logged on is notified of that fact.  With thousands (and tens of thousands on some) of people per server, it’s very difficult to be the first.

Team Fortress 2

Team Fortess 2 is a team based game with a few scenarios like capture the flag or defending a base.  It’s probably the first game that I noticed achievements like this in.  While playing, from time to time you’ll see these achievements flash across the screen.  They’re purely for your own amusement and don’t affect who wins a given game.  Some achievements include:

  • Play a game with 7 or more players from your friends list
  • Kill 3 enemies in a row, all within the same area.
  • Do 1 million points of total fire damage.

I found a whole list of them online if you’re interested in seeing more.

In addition to those achievements that will flash across the screen, you’ll often be informed of interesting stats where you personally did better than you have before.  There’s very obvious ones like “You killed more people than you ever did before in that round.”, to less common situations like “You got revenge more times as a medic this round than ever before.”  The range of possible stats to get a best-of is so wide that you end up getting something pretty often.  In times when you don’t earn a best-of you’re often told about a stat that you almost beat or that you tied.  Again, these are all personal stats to the player and you’re not competing against other people for them.

XBox 360 Live / Playstation Network

Both the Playstation 3 and the XBox 360 have online communities that you can play games over the internet with.  Both of these have an achievement system built in that game developers can take advantage of.  This lets players keep track of their achievements across different games.  Both of these systems mix more traditional “how are you doing in a game” achievements with the “just for fun” achievements mentioned above.

A list of some of the XBox achievements can be found here:

http://www.xbox360achievements.org/

The Playstation “Trophies” are a very recent addition to the platform and not many games support them right now.  But Sony has decreed that any game coming out that wants to get licensed for the PS3 from now on must support the trophy system.  They think it’s that important!

http://www.ps3trophies.org/game/geon-emotions/trophies/

Not just video games – Stack Overflow

Lately, I’ve been noticing similar systems in places other than video games.

StackOverflow.com is a website dedicated to answering tough questions about software development.  It has two reward mechanisms.  One is a reputation level, which you gain by asking or answering good questions.  This is a pretty standard feedback mechanism that measures what you do and rewards you with additional privileges because of it and isn’t the focus of this post.  The other is a “badge” mechanism.  By completing tasks on the site you earn badges which others can then see.  Like the WoW achievements, the badges aren’t good for anything besides knowing that you have them.

Stack Overflow list of badges.

Others?

Please feel free to comment to point me towards other similar systems.  I’m especially interested in non-game applications.

Flex ADDED_TO_STAGE event and scrollbars

Be careful with ADDED_TO_STAGE event handlers, I ran into a interesting bug today.  Upon resizing the browser window, the current “activity” the user was working on would restart.  It should only have restarted when it was added to the stage and was confusing me why it would occur upon resizing a browser window.

A little digging, and I figured out why.

If you have a component inside a flex container like a Canvas.  And the container is resized and all of a sudden it requires a scrollbar to fit everything you will get an extra ADDED_TO_STAGE event.  Internally the container removes the component, creates a content pane to scroll around, and moves all of it’s children from the base container object onto this content pane.  That removal/addition causes the ADDED_TO_STAGE events to fire and caused my bug.

One good reason for IoC

So often I get asked why it’s a good idea to use an IoC container and it’s always difficult for me to explain.  It’s actually a fairly hard question to answer to somebody who has never used one.  I came across one great example this week.

We’re working on an educational application made up of a series of lessons.  The general flow of our app is:

  1. Start Up
  2. Login
  3. Request what the next lesson is from the server.
  4. Do the lesson
  5. Send results
  6. Goto #3

To do #3 we have a service object that knows how to make that request to the server and handle the response.

But…

We don’t want to have to deal with having a server running all of the time during development of the client.  So we created a brand new class that implements the same interface as that service.  However, instead of asking the server what the next lesson should be, it displays a UI that lets the developer/qa person select a lesson.  With IoC we simply changed the configuration that instantiated that object to use this new class and bamn, it works throughout the application.

Now, I’m working on a demo of the software for management.  We want it to go through a predefined, fixed, list of lessons for the demo.  I created a new service object that maintains a list of lessons to go through sequentially, updated the config, and bamn… our demo is ready.

So now, the exact same application code can be run three different ways depending on what configuration we give it.

Now, it’s certainly easy to do a similar thing using other non-IoC approaches.  Maybe you’d need a recompile for those (but is that all that bad?).  The benefit with IoC is that it tends to make developing like this automatic.  It pushes developers to code to interfaces and create modules that can be easily replaced with others.  It’s a developer “state of mind” benefit.

In case you’re curious, we use Parsley as our IoC container.

Backup pricing model?

I’ve been thinking about Amazon S3 for a while.  I had a moderatly interesting idea for a business model around online backup.  Imagine if backing up your computer cost you nothing.  But retrieving those backups had a substantial price.  Say, maybe $10 a gig.  So if you had 50 gig of storage, some company would back it all up for you on a daily/weekly/whatever basis for free.  You’d have the peace of mind of knowing it was safe without the hassle of paying for it.

But then if you lost it all, you could fork over the $500 and get it all back.

It’d be kind of like holding your data hostage in the event of a failure.

Through S3 it costs you about $100 a year to do that example 50gig backup.  So as long as people had failures once every 3 or 4 years, it’s a profitable situation.

Maybe even a scaling price window.  Need one document?  $20  One photo?  $2

I wonder if the human-psychology would prevent something like this from working.  Would people really place that high of a value to get their data back?  Especially people too cheap to pay for backup on an ongoing basis?  My guess is that it wouldn’t work, but it seemed like an interesting enough idea to share.

Of course if someone like Dell or Apple started doing it by default on consumer computers, I bet they could make a killing when people don’t plan ahead and lose something important.