Tuesday, July 27, 2010

libAdMob.a missing from iPhone project

Did you check out someone's iPhone project (or sample code) from SVN and get a "library not found, -lAdMob" error?

That's because some SVN clients are set up to ignore .a files, which is how the AdMob library is distributed. What you'll need to do is to contact the person who checked in the project and get them to add the .a file (it's about 2MB) to the SVN repository. Or, you can download it yourself.

To download libAdMob.a, go to admob.com, sign up, create a new App for them, and THEN it will let you download the SDK code. No, you can't just download the SDK, the AdMob developers are a bunch of stupid cunts that don't want to let you have an easy day; they'd rather force you to sign up and create an app you'll never actually ship, instead. They *want* the clutter. They *want* to hassle you, one of their developers. That's because (and I hate to repeat myself) they are a bunch of stupid cunts.

Saturday, July 24, 2010

Sharing to Facebook from an iPhone App

First, let me say that the sample code provided by Facebook and others is teh suck. Some of the top hits when you search for stuff are broken samples. Be careful out there!

Second, the documentation itself is crap.

So I'm here to go over the flow that I used to share to facebook. If you're developing an iPhone app and want a "Share on facebook!" sort of thing, then start by perusing the readme: http://wiki.developers.facebook.com/index.php/Facebook_iPhone_SDK That's nice and all, but it's not shippable.

Background #1: Facebook updates. The 'stories' that appear on your wall, and are shared to your friends' home pages, are all little text doodads with links to content stored elsewhere. Adding a story to a user's wall is the simplest thing, and it's what most of those Facebook games do. There are status updates and then there are other stories; a status update is what happens when you don't include an actionable item (a 'call to action' type link). Mostly you just pull some key/value pairs together (see Facebook's list of attachments) then make a request.

Background #2: You can't upload images to a wall, only to your photo album, for example. Developers making utilities, games, and entertainment want to add a story that contains a custom image. You might note that most facebook games don't do that; they use a generic image instead, like a picture of a cow or sheep or barn as FarmVille does. Uploading a custom image is tricky. If you want a wall story with a custom picture, you have to either (a) first upload the image to the user's photo album (the default one has a limit of 500 photos, one dedicated to your app will have a 1000-photo limit), which means that two stories will appear back-to-back on the user's wall, or (b) store the image somewhere else instead and link to that.

What you wanna do:
0) First, allow the Facebook Developer application. Go to http://www.facebook.com/developers and 'Allow' it.
1) Create an application (see the image on the right). Yes, you might need to make your application page pretty.
2) Go to XCode. Create your own facebook helper class. I called mine FacebookHelper, cuz I'm creative like that. The point of creating this class is to not mix facebook delegates and dialog handlers and all that crap into your other classes. Posting isn't just one function call (there can be three or more callbacks involved), so partitioning it all into a separate class will help.
3) Add an entry point to this class. I haven't yet refactored this out; right now, I copy-n-paste the class into a new project and edit the implementation. So my entry point isn't
- (void) Share:(NSString*)shareText;
blah blah blah, but just
- (void) Share;
4) That entry point will look roughly like this:
{
if (self.session==nil || !self.session.isConnected)
 [self ShowLogin];
else if (!havePermission)
 [self AskPermission];
else
 [self PostToWall];
}
5) Write the FB login code and delegates. This means creating an FBLoginDialog and show'ing it.
6) If you need extended permissions of any type, create & show an FBPermissionDialog. Note that your FBDialog delegate callbacks will need to differentiate the type of dialog shown. I did this by sticking an enum in the dialog's "tag" field, and switching on it in the dialog:didFailWithError, dialogDidSucceed:, and dialogDidCancel: callbacks.
7) Finally, post to the wall. Do this by creating an FBStreamDialog, add an attachment string with all your parameters, like so:
 "name":"My App Name","message":"User enters this text, this is placeholder","caption":"etc"
These key-value pairs will include a link to your app and a link to the image to use in the post.
7b) If you're uploading an image to one of the user's albums, you use an FBRequest instead of showing an FBStreamDialog.
{
 NSMutableDictionary* args = [[[NSMutableDictionary alloc]init]autorelease];
 [args setObject:@"my caption" forKey:@"caption"];
 FBRequest* request = [FBRequest requestWithDelegate:self];
 [request call:@"photos.upload" params:args dataParam:image];
}

Later on I'll upload the entirety of the class so that you can see it all in process. Plus I'll probably clean this post up, too... meanwhile, I've got to run.

Saturday, July 10, 2010

some notes on learning

The best teacher will show you theory, give you both good & bad examples, explain why the bad examples don't work, then watch you try it and give you feedback. The lower the time lapse between trying something and getting feedback, the faster you'll learn.

If you don't have the spare $50k laying about to hire a personal instructor for your desired task, you're stuck searching and finding this stuff on your own.

Programmers

What if you're a programmer? The best place to go for theory is textbooks. Usually they're thick with theory but light on practice, and some of their theory will only work in the toy examples that academics are used to. But that's fine; you're here for the theory.

Good & bad examples are somewhat easy to google for. "Best practices" and "horror stories" are good keywords. Look for people that suggest bad experiences and ask them to expand on it.

Newbs tend to have bad habits, but finding out what those are and why they're bad is difficult. Books and didactic websites are again your best bets here.

The hard part is feedback. For that you need a coding buddy; someone (and I would suggest someone you don't work with) to serve as a sounding board, and will develop their own library of best practices, bad habits, and good feedback. You can give yourself feedback by (as I mentioned early) refactoring your own code shortly after you write it. Go back and rewrite the last app/utility/website you built! Might seem like "a waste," but it's amazing what you'll learn in the process.

Gamers

Game theory is woefully light. Good luck with that.

Good examples are easy to find; there's tons of videos of good players and really bad players. The hard part is figuring out why the good players succeed. Sorry. Good luck with that.

The easiest way to get better, actually, is to study mistakes. Look at people that get crushed and try to figure out what they did wrong. Fraps your own play and study it. A lot of people just hate doing that. Suck it up, cowboy. You'll learn fastest that way.

Three Steps to Being a Better Programmer

How to Be an Awesome Programmer in three easy steps:
1) Practice
2) Study the experts
3) Learn from your mistakes

Practice is by far the easiest thing to do. As I've mentioned before, I think the great lesson of Gladwell's Outliers: The Story of Success is that one gets better at something by practicing. In anything competitive, by practicing against better players (that's #2). But time on the field isn't enough; you actually have to learn something.

I've been thinking about playing Warcraft again, and in preparation I've watched a few Arena videos to get me motivated. That lead to watching some Quake videos, and that reminded me of my old days playing Quake. Obviously, the top players (at any online game) have played a lot. But time on the battlefield isn't enough; being smart by itself isn't enough.

I also read a number of "how to get better at Arena/Quake/Whatever" articles, and that led me back to Gladwell, a bunch of other articles and books, and eventually to the pickup community. A lot of people go to coaches for learning. This mostly gives the student a chance to find out who the masters are, so that he can study what they do. It's difficult to get better when you're around people that are as good as you; you're forced to learn everything yourself. Coaches will tell you what to practice, and they'll show you better players, too.

But learning that way is still pretty much learning by yourself. You just have better examples to teach you.

The better way to learn is to have a teacher. The teacher will look at your performance and suggest what to do different. They'll point out your mistakes.

That's the hardest part of getting better

Most people don't like to go back and revisit old work, but it's potentially the most instructive. And watching the pros at work isn't enough; a good teacher will point out what they're doing.

The the pickup community, "instructors" either "teach by example" (which is really doing what they do and then hoping that you figure it out on your own) or stick to mechanical skills (like body language).

In online games, there are no coaches; everyone learns by themselves. In this sort of community, the best thing to do is to play with the best.

In programming, the cost of practice is extreme; there's a plethora of experts; and they all say different things. About the easiest way to improve your programming is to refactor.

The best way to be a better programmer

The easiest way to improve is to try different tools, languages, and platforms. Until you try a decent interface builder, you'll probably think the one you're using is good enough. Until you try a functional language, you'll think your OO skills are all you need. Until you use a modern compiler, you might think the crap you have to do to satisfy your current compiler are acceptable.

Theory is nice. Where's the practice?

One of the things I learned while working on my other blog is just saying "try a new platform" is vague. Are there any that I could name that would be good?

Why, yes. Yes there are.

1) F#. Try building little Windows utility apps using it. Dive into the community to find better ways of doing it. Read a book or two and pick up the common wisdom.
2) iPhone dev. This is a great place to learn from other's mistakes, because the platform and tools are such utter shite. Seriously. The rest of the world is using modern compilers and tools that work. (OK, honestly, this entry is a bit of a joke, but you will learn message-passing.)
3) Find an open-source project using Perl or Python. Diving into one of these languages is the best way to learn them.
4) Website dev using C# and ASP.NET. Modern compilers & tools are an amazing thing.

I'm sure there's better examples out there; use these suggestions as a start.

Wednesday, July 7, 2010

Four Things Good Programmers Do

After a five-month ski vacation I'm back in civilization job-hunting. The interview process is interesting from the interviewee side, to see what many companies think that they want. To me, a good programmer isn't someone that's spent seven years with Technology X; in that much time one learns a lot of tricks, but good programmers don't just know tricks - they're supposed to be writing code.


#1 Ship

Good programmers finish what they're working on. I think being left in a cubicle by yourself makes it easy to succumb to creeping featuritis. To get caught up in 'perfecting' a system which might have a minor role in the finished product. Good programmers ship. They get things in shape to release, and they release. The more things you release, the more you learn about what customers want. And you also learn how to release better software faster.

To me the lesson of Outliers is that everyone learns by doing. The more you do something, the better you get at it. The people that are really good at stuff - from major-league sports players, to Bill Gates, to writers and artists - are good because they have had a lot of practice.

Spinning your wheels polishing bad code is practice polishing, not practice shipping. If you want to hire a good coder, you want someone that's had practice turning a working prototype into a professional, shippable product.

#2 Working

It a similar vein, good programmers write working code. I've worked with too many coders that write buggy code that barely works - or doesn't work at all. You'd think they wouldn't still have jobs programming, but the interview process is pretty damn flawed. It's like a first date. The interview I had today was mostly feel-good; a guy on the team liked talking about Agile and I could talk the talk. Walking wasn't really part of the discussion.

I'm surprised when I see someone check stuff in that doesn't actually work. It suggests that the programmer has bad habits and doesn't test what they write. To them, programming is something you do in the editor. As soon as their code compiles, they check it in and move on. Yes, I've actually worked with coders like that. They think they're gods; they think they don't make mistakes.

The good programmers on your team, the ones you want to keep and promote, are those that actually get stuff working. When a web page is supposed to do something, when a class is supposed to commit a transaction or pull data, it should do so. Some guys get 90% of the way there, and other coders step in and turn a code checkin into a working feature.

Mr. 90% won't be able to ship software. He might write a lot of code, but the stuff he checks in doesn't actually work. Ask your coders; they'll be able to tell you who on the team is Mr 90%. Fire Mr 90%.

#3 Robust

There's a lot of work that goes into the "foundation" of a feature. Some of it is gruntwork; creating the class, getting headers & dependencies set up; building the UI using a design tool. This is mostly monkey-work, and that's why bad programmers can get to 90%. Getting stuff working is the last 10% of the code that's written, but it's an essentially important 10%.

But once a feature works doesn't mean the work is done. Debugging typically doesn't add lines of code. Refactoring to get stuff working is likely to reduce lines of code. Good coders don't just run their code to see if it works; they test it, too. And they know how to write software that passes tests, and how to write tests that go after edge cases and corner cases.

Going after those edge cases is a mindset. Some programmers have, in the back of their mind, a demon that thinks of malicious calling code. What's the worst that can happen? What if they give me bad data? What sort of bad data is there? Are there possible race conditions that could screw up this process? Good coders have that demon.

"Agile" has turned into a buzzword that many software managers think they need to have. They think writing tests will remove all bugs. But if your tests don't test the right stuff, then your product will still have bugs - it will just take live testing by a QA group to find them. There's good practices in agile testing, but TDD won't get rid of bad programmers or make them irrelevant. The guys you want on your team write robust code the first time. That doesn't mean no bugs but it does mean they, as a habit, look for edge cases.

#4 Features

 I think somehow it has become verboten to discuss intelligence. Yet software is one of the few areas where intelligence has a very strong effect on productivity. Smart programmers get more done. They are good at solving problems, and they can keep track of several things at a time. If they need to keep that "what if" demon running in the back of their mind, the smarter guy will have an easier time at it.

Good programmers get features done faster. Per week, they get more features done.

It's grossly difficult to schedule software development. Agile development, in part, is a response to that. Instead of making up a list of features and then committing to a length of time to get that done, Agile commits to shipping something at a point in time. Some features are easier than others. It's hard to actually measure programmer productivity - but still true that good programmers are more productive.

Shipping Feature-Rich, Robust Software

Software development is about shipping. Guys in academia and research departments can fart around for decades and you can call it good work, but out here in the real world we need to ship software. The more features you have, the better your market position. The more robust your software, the happier your customers will be.

Good programmers make that happen. They write the code, it works when they check it in, and they know how to go after bugs. And they do it all quickly.

Hire those guys; they'll make you rich. :)

Friday, June 11, 2010

The Thousand-Hour Sim, Part 1

One of the ideas I mentioned yesterday was that there's only a few genres where a large number of players (10,000 or more) will be willing to spend multiple hundreds of hours playing the game. There's a lot of games were a good chunk of the audience will spend around 100 hours. Many single-player RPGs have that much content, and a lot of multiplayer games will keep players busy for 100 hours.

But take a game like WoW - there are millions of people that put in hundreds of hours every year, and probably millions that have put in over a thousand hours over the six years since the game has come out. Some of the friends that I worked with averaged six hours a day - usually spending a dozen hours on the weekends and a few during the week. That works out over 2000 hours a year. Even if they burned out in six months, that's a thousand hours right there.

Competitive games, like Starcraft and Counter-Strike, are another genre where thousands of people might spend thousands of hours.

What would you have to do to make a sim that could keep at least tens of thousands of players occupied for a thousand hours?

Summary of the FMMORPG Argument

There were eight factors I mentioned when I described Fantasy MMORPGs as the ultimate genre. They are:
  1. environment variety
  2. tangible, human-scale environment
  3. non-trivial gameplay
  4. opponent complexity
  5. opponent personality
  6. solo and group gameplay
  7. inspiration
  8. open end-game
The first factor means having a wide range of environments. The second suggests using an environment that can be rich. Gameplay needs to be complex, and getting to a really rich complexity means not just having a complex puzzle but introducing AI units into the game that introduce complexity, keeping the game fresh. The fifth factor, opponent personality, is like the second: it puts a face to the game world that players can relate to; an environment that produces stories. The sixth factor is about allowing players to play whenever they want, while also giving them team goals, where they can work towards goals larger than one player. Inspiration (and something I didn't mention, commitment) are ways of giving players long-term goals to keep them coming back. The final factor says that the game can't end after a hundred hours; allowing players to stay in the same game world for the entire duration of their play-time can keep them there.

The factors can be broken down into a few threads. I'll probably redo this list at some point. Obviously, this list isn't definitive; I'm building a model for game design and there are surely many other models just as suitable. Anyway, the points I'll cover today will be:
  • Gameplay needs to be rich
  • The game world needs to be rich
  • The game has to enable stories and emotional moments
  • It should allow the player to play, and make progress, whenever they want
  • The game should provide large goals, requiring time and/or teamwork
  • The game should have an anchor that commits players to the game
Some of these feel essential to me, others feel like caveats.

Positive Attributes

I think some of the attributes should influence the core game design. The game should be built around these principles. These are the things you should be trying to do when you design the game. The negative attributes, which I mention later, are a list of things you link at and think, is there something in this design that will drive away players? I think the negative attributes can be tweaked - that once the core game mechanics are nailed down, the next step is to go through a list of "gotchas" and make sure there's nothing there that would piss off players.

First I'll tackle the attributes core to game design.

Gameplay needs to be rich. This is the single most important attribute. Without rich gameplay, the game becomes rote quickly, and play-time becomes boring. I've talked about the essence of fun before, and my theses on boredom is that it happens when the player doesn't have to think about gameplay; if the time the player spends thinking about decisions is too small. As complex as the game might be, if the player has mastered the game rules then there's nothing more for him to learn.

Take a game like Halo. They introduce new mechanics throughout the game and, by the end, you've explored all of those mechanics. Once you've beaten a level, there's no reason to go back and play it again, except maybe to find a few hidden secrets or complete it faster. New sequels really just introduce a larger game world; they don't add new gameplay elements. Players spend 20-40 hours playing through the game, and then wait two years for the sequel, then spend another 20-40 hours.

Compare this to Grand Theft Auto. The worlds are about as large, but there's a richer variety of things to do. As a result, players can spend 100 hours in the world. There's only about 100 hours of "quests" in the game, though. If they added more quests, would you keep playing? Probably not, because without more mechanics, execution of those quests becomes easier and easier. As you play through the game, you pick up new weapons and learn new game skills - but you exhaust those skills by the time the game's done. That's what I mean by new mechanics: there'd have to not just be a new place to play (ie a larger world, such as in the expansion packs) but new ways to play.

The game world needs to be rich. I touched on this above. The world shouldn't just be large, but provide new environments. There are over sixty different zones in the world, and each one has many different sub-areas. Plus well over 100 different dungeons. The starter zones can be plowed through in under an hour, but by level 50, there's at least five hours of quests in each zone. The dungeons provide a couple hours of gameplay but can be replayed, too. Each of those zones and dungeons has its own creatures; usually dozens in each zone, and each creature type (like, say, furbolg) has several variants (such as warrior and shaman).

That means a lot of art assets, of course, but that's what "rich world" means! Players can easily spend ten hours in Stranglethorn Vale. Although the whole zone is jungle, the land ranges from the beach, to the river, to hills, to villages, to caves. Creatures include pirates, goblins, trolls, panthers, tigers, raptors, basilisks, and ... much more. Each little area has its own story (told through the quests) and there's a few greater storylines that take players through the zone.

Worlds are rich because of the variety of their assets and they stories they tell. Speaking of which...

The game has to enable strong emotional moments. Stories are a player retelling of emotional moments. The strongest emotions are fear, anger, and love. WoW doesn't really want to anger its playerbase, but anger does have a greater place competition-driven games (and therefore in the PvP aspect of WoW). Fear is the most common, but it's not often remembered as such. The most memorable moments for me in WoW were when I was running in fear from high-level enemy players, or in instances when our tank died and I was panicking trying to keep the group alive (I played a healer!), or close calls when I got attacked by several creatures and was running for my life. When these encounters ended well, that fear turned to extreme relief. I wanted to tell everyone I knew about what just happened, and the story got retold the next day at work, too.

Strong emotional moments make the game into a larger part of the players' lives. When we take those stories to work the next day, to the pub, into our dreams, its more than just a way to pass the time. Am I going to tell stories about that one time in FarmVille when I planted some corn? Ugh. We hate the boring coworkers that tell that kind of dumb story. NO. Yeah, sometimes those WoW stories are the same - but not always.

Players can feel love, or something similar, in these games, too. Probably a bit more common is respect, and dedication. Players in guilds might feel commitment to their guildmates, and want to show up on raid night not just because the raid will be fun but because they want to help their guild out. It's really cool to have a good tank in the group, or to have a great healer behind you, or an awesome DPS guy that is super-great about handling adds. I really respect those players and their skill with the game, and that generates stories that I want to tell, too. (But god I hope that raid is fun, too. See section one: gameplay should be rich.)

Curiosity can also be a strong motivator. Curiosity drives suspense novels and thriller flicks. It's usually not something that the designer would want to drag out for dozens of hours, but there are a lot of cases where a bit of curiosity keeps me playing for an hour, or to keep coming back to a quest line for an hour of play every so often. Some quest text can introduce a mystery, and either dole out new bits of story in each quest or give the player a chance to go exploring and find out the solution for themselves. This is a kind of meta-game; the game proper is combat, but if you've got a player hooked on a mystery they'll play through the combat to find out who done it! Yet another way of making gameplay richer, and in this case it works because of the emotions that the game makes players feel.

The final "core principal" is: The game should provide large goals. One of the things I've bitched about with browser games is that they don't feel like there's a larger goal. Travian actually has one, and it's a very appealing goal to me, but they did a crappy job of advertising that long goal. I played Lord of Ultima for about a week but quit mostly because I felt like I had no goals. Sure I can sit there building my city up, but who cares? Compare that to Nile Online, which I'm still playing: the goal is to get to a high enough level that you can "retire". When you do, you get a pyramid built and named after you! At that point, the game is "over" and one can leave the game, but at least it's a motivation to keep playing.

MMOs provide many large goals. To get to max level, to get into a raiding guild, to get to the hardest raid instance, to get awesome gear. Even just to complete the easiest end-game raid instances is a large goal, taking weeks of play to prepare and attempt. Single boss fights used to last a half hour or more though these days they tend to be 10-15 minutes. Each fight might take a few attempts to master, and there's around ten bosses in each raid. Throw in trash encounters (which can be tricky to master as well) and "raid night" is several hours of gameplay each week.

Accomplishing large goals tends to drive other gameplay. Preparing for raid night might mean running dailies to get cash to buy a new piece of armor, or to get enough faction to be allowed to buy a new piece of armor. Hopefully those dailies are fun and don't get too repetitive, one of the few places where I think WoW falls down. But consider this like curiosity: players will engage in hours of gameplay (hopefully fun by itself!) in order to achieve a meta-goal. They're not in combat to kill the creature, they're not killing the creature to gain rep, they're not gaining rep to buy new armor -- they're buying armor to make more progress on raid night. And they're doing that for bragging rights and to support their friends.

Non-Essential (Negative) Attributes

One can probably come up with a huge list of  rules saying "don't fuck up your game by doing X". I happened to extract two from my previous post; there's dozens more that I've thought of since (another post?) but I'll cover these two in some detail to explain what I mean.

Players should be allowed to play whenever they want. If your basic game mechanic is combat, then what would keep them from playing when they want? I heard EQ basically couldn't be played solo - which meant, if you wanted to play, you've got to wait around to find a group to join. One of the things that I think made WoW wildly successful is that it doesn't have this restriction. If you log in and want to play, there's always, always some solo task you could do. You can hop into a PvP battleground, go on a solo quest, do a daily, farm some crafting resources, or find a PUG instance to run.

This principle is better expressed in the negative: don't add anything to your game that would prevent players from playing when they want to. Not being able to play is frustrating, and one of the things in browser games that piss me off. I'd enjoy them a lot more if I could play at my own leisure. Having the game say "sorry, go away, we don't want you" makes me feel bad things towards the game and that's a great way to lose players before they hit the 1000 hour mark. And it kind of means that they can't hit 1000 hours. It's basically admitting that you don't even have 1000 hours of stuff for them to do!

I'm probably going to play Nile Online til I get into the top 100 (and then retire), but there's no way I'll put 1000 hours into it - it just won't let me. It would take me years of play to get that far, and I'm far more likely to find something else to do. If I can retire after six months, what's to keep me coming back again and again? Hence:

Players should feel committed to the game. One thing that kept many players subscribed to Ultima Online was their houses. They had a lot invested in their house, and they didn't want to give it up. This is a great example because a lot of those subscribed players didn't even play! They'd log in once or twice a week to prevent their house from falling apart, but they wouldn't actually play. Imagine how many more players they could have kept around if there was something else to do?


But really my point is that commitment itself is strong enough to keep players subscribed.


Summary


So I didn't even talk about sims at all in this post, and I've been hacking away at this post for hours. In part two, I'll explore how to apply these rules to the sim genre and see what I come up with.


Meanwhile, I'm gonna go pass out... zzzz

Thursday, June 10, 2010

Gameplay Complexity and Opponents

Yesterday in my praise of the fantasy MMORPG as the ultimate genre, I touched on the notion that a game that involves human-like opponents has a lot of natural potential for rich gameplay. Today I want to expand on that a bit.

Game genres range from racing to shooters to RPGs to slot-machines to sims to platformers and on. Multiplayer games obviously pit you against other humans. Some of them have single-player variants, where the part of the enemy is played by AI that tries to act as close to human; ie, the opponents have the same range of actions and strategies as humans do. Others pit you against a puzzle, or simplified enemies with very constrained actions.

Puzzles - No Opponent

I'll start with the last. Puzzle games like Tetris don't have "opponents". It's just you against the puzzle. Simulations, including games like SimCity and Roller Coaster Tycoon, pit you against a complex puzzle. Simple puzzle games have simple mechanics; the complexity of the game is how the rules fit together. Some such games are like skill games - gameplay at the higher levels of Tetris require the player to have internalized the gameplay rules effectively to the point that it's like a sport, and where reflexes and the ability to think a few moves ahead are important.

Skill games are rarely complex. Coding their game rules is simple. Design can be difficult, however; the process of coming up with rules that are amenable to skill is tricky. Back during the golden decade of the FPS (the 1990s), many game companies tried to make competition-worthy FPS games, but most fared poorly. For a single-player game, something that's going to provide 15-40 hours of gameplay, the game mechanics don't need to be very rich. Elements that would lend themselves to longevity as a skill-based competition are hard to design in, and the economics of the game industry often mean that the people that would have experience with competition-style gameplay aren't the ones that are chosen to lead game design. It's one thing to say "we want a lively online community" and another to actually spend money and effort finding a designer that can do that well. There's a rich discussion there but I'll skip it for now.

Because my point is: the complexity of these games is usually the intricate ways in which a small set of game rules combine.

Could you turn a sim into something players would spend a thousand hours playing? How long could you play Roller Coaster Tycoon before you exhausted the whole game? Do you think you could convince a million players to each put a thousand hours into it? These games (on the PC) are lucky to sell a million copies. Most of those players might put less than a dozen hours in.

What would it take to make a sim or puzzle game that players spend that much time on? It feels silly to even think it's possible, since one hundred hours is a stretch for these games. Maybe there's some diehard fanatics that put that much time in (the Transport Tycoon community is one such example), but that's a tiny community. That's maybe a thousand players - not a million. I'd like to explore this idea further... and indeed I do in this followup post on the thousand-hour sim.

Platformers - Fake Opponents

Platformers have opponents, but they aren't anything like human players. Enemies such as the goombas in Mario follow very rigid rules. They don't even try to behave like human players. That's not the point; these are effectively puzzle games where part of the puzzle is an AI-controlled "humanoid" character with simplistic, predictable rules.

Usually there's not a lot of richness to these games. They're exploration and achievement games, with a little bit of skill thrown in. Gameplay is fun, but that's driven in part by the environments, not the opponents. The human (or sentient) appearance of the opponents just fills out the game world; makes it seem like a real place and less like an abstraction.

Recent Mario games (such as Mario Galaxy) do wind up being somewhat rich, but not too much. Most of the richness is in carefully timed execution of special moves. In other words, they are skill games. Puzzles are straightforward, the interactions of gameplay elements are rare, and the focus of the game is more on exploration than anything else.


Head-to-Head Action and Strategy Games

Whereas there's no real "opponent" in puzzle or sim games, and simplified opponents in platformers, other action games have real humans as the opponent. RTS games like Starcraft and FPS games like Counter-Strike fit this model. Even when you're playing against the AI, that AI is trying to act as human as possible.

Both you and your opponent have the same range of abilities. Chess is a simplified version of this model, where both players have exactly the same units at their disposal. FPS games are similar; often skill games (see above), but the richness in the game comes from the fact that the opponent is truly human and so not only has a huge bag of tricks but can also learn new tricks as time goes on.

RTS games rely heavily on the humanness of your opponent, but they often twist gameplay by allowing players to choose different "races." Starcraft is the standout in this model. Most Starcraft games are played by players of different races; Terran, Zerg, or Protoss. They are all basically doing the same thing - placing buildings, recruiting soldiers and ships, and sending them off to attack. Yet the units that they have are different, and their overall approach to winning is different as well.

The richness in FPS games comes primarily from the human opponent. The fine balance of rules can make the game more or less balanced; more or less random. Yet it's the humans that make them great.

RTS games, however, add much more. There's a lot more strategy to RTS games. Choices made early - not just single actions, but choices to develop in one way or another - define the game. Do you try to tech up? Rush? Expand early? Press to aerial units? Fake one build but go another way? Where FPS games often have rich tactical fights, RTS games also have strategic fights.

RPGs

RPGs are a bit like RTS games, in that you are facing human-like opponents with skills and actions similar to your own, but with a different strategic twist. In Starcraft you have Protoss vs Zerg, in WoW you'll have a Rogue against a Warlock.

Humans provide the richest opponents. Some are better than others; in RPGs, you might face someone that doesn't know their class very well at all. But most of those that engage in PvP know what they're doing. Competition ladders help great players find similar opponents, while allowing the crappy players a chance to win every know and again against other new (or... well, crappy) players.

RPGs add more to the single-player experience, however, by having a much longer stretch of new abilities. In an RTS, you'll become familiar with all of the units and buildings at your disposal over the 30 hours or so in the single-player campaign. In an MMORPG, there can be hundreds of hours of advancement before you've gotten to the top of the ability tree, learning new spells or abilities every few levels.

Instead of giving you a small set of tools with rich interactions, like chess, RPGs have a much larger set of tools, each with its own special purpose. The trick isn't to learn how the abilities interact, but usually which ability to use when; how to fight against certain types of opponents. The huge array of possible opponents is what makes the RPG rich.

Human-like Opponents with Different Tactical and Strategic Choices

My goal here was to explore the game design choices that produce a game that players could enjoy for hundreds of hours. Leaving aside the diehard fanatics that might stick to their favorite title long past when the majority of the market has gotten bored, we're left with three major avenues.

The first approach is to build a game that requires player skill, whether solo or competitive. Players spend their time getting better at those skills. Games like Counter-Strike and Tetris are the best examples, but even then they point out the weakness: although both have audiences larger than (say) Transport Tycoon, these are still relatively niche titles. Lots of people love them and (relatively) lots put in over a hundred hours playing the game, but there are bigger genres out there.

The second approach is to create simple mechanics with extremely complex interactions. Chess is the canonical example. Players have a chance to learn ever more complex interactions. Every time they play, they probably learn another new trick. The success of this genre depends on the size of the market, however. There can't be hundred of Chess-like games, because the complexity of interaction depends on the size of the market. Not everyone has the talent to be a grandmaster, and in order to even get grandmasters, you need enough people to push the curve that far.

The third approach is pitting player versus player. Whether you've got a skill-based game, one with simple rules but complex interactions, or complex rules, pitting humans against each other means that rich gameplay will evolve. You'll either need to do a whole lot of playtesting and balancing or be willing to tune the game after it ships, but with PvP, humans will figure out complex strategies.

Personally, I think the two richest game genres are the RTS and the RPG. The best, longest-lived games in both genres have PvP (sometimes simulated), complex gameplay interactions, and a measure of player skill. If you want to create a game that pulls in players for hundreds of paid hours, you'll need more than one of the approaches.

Wednesday, June 9, 2010

Most Awesomest Game Genre Ever

WoW is tremendously popular, and it's easy to see why. One can play solo, so you don't have to wait for your friends to show up or get online. Your accomplishments can be witnessed by a wide variety of players, so the game's achievements are very rewarding. Team encounters give players a chance to show their team spirit & coordination. It has a ton of content and actually has an end-game, so you can play forever. It's very approachable, unlike many other MMOs.

But it's also the most awesomest game genre ever.

A friend an I were brainstorming game ideas for the iPhone, and I spent some time after that going through a bunch of game ideas, fleshing them out, and thinking about how to make the game more appealing. At the pinnacle of game development is something like an MMORGP, which requires complex technology, precision game design, and tons of content. But more than that, there are elements to the design of WoW that place, in my mind, the fantasy MMO as the ideal genre.

I tried to think of ways to design a game that was smaller than an MMO that had many of the same benefits. In the process, I came up with a whole bunch of factors that make the fantasy MMORPG genre appealing.

Environment Variety

Games like Tetris take place in one screen. It's a skill game, like many sports and first-person-shooters, and so that doesn't matter that much - but it's just one screen. Achievement and exploration games tend to have a lot of environment variety, and it's one of the driving forces behind platformer design (as I love to mention). Give the player a new environment every 15 minutes!

A Tale in the Desert (ATITD) is an interesting game for many reasons. It's an MMO but the environment is very dry. It's 99% desert. 99% boring, flat, monochromatic fucking desert. It's a great exercise to play the game and see how one can take one environment type (hint: desert) and make landmarks and environments that feel different. Yet the exercise reminds me of the pointless toy problems and artificial domains I studied in school. It might be an interesting exercise but it has little practical value.

Take a look at WoW: every zone isn't just yet another area using the same brown and desaturated green color palette; they're very different. It's not just forest, mountain, plain. The forests are hugely varied -- from the dark, Halloween-ish Darkshore to the mystical Ashenvale Forest to diseased Felwood and Plaguelands. Feralas feels kind of generic - but I had to hunt around for an exception. Elwynn Forest is an ideal example - a larger-than-life fantasy setting. You can't mistake Grizzly Hills for any of these other areas, and Silverpine, although sharing the same kind of haunted feel as Darkshore, is obviously distinct too.

Coming up with different environments is easy; making them look good is hard. Getting the art assets is expensive. But it adds a huge amount to the game. Where ATITD is able to take "desert" and vary it, WoW does the same thing -- within each zone. But then it adds another 50 zone types! Like console platformers, there's always some neat new zone to go explore.

First-person shooters like Doom have a hard time coming up with different environments; they're all variations on the "near-future industrial/research building" theme. But put people outdoors and the variety explodes.

I guess it doesn't need to be that way. You could make an FPS that takes place all indoors and still has the variety that WoW does, but you'd have to try for it. That's kind of my point with this post - I think games are better when they have these qualities. Half Life, as fun and varied as it was, was stuck with being realistic. Which means that there's not much variation between levels. City Level 1 looks just like City Level 2. You could throw Viking Village and Alien City and Native American Pueblo in there, but it loses its believability. Fantasy games like WoW have a huge variety in environments that's enabled by the willingness to say "forget realism, we want cool environments." Like Mario platformers, WoW throws away foolish adherence to realism in the name of fun.

Tangible Environment

But zones aren't just different - they're also meaningful to humans. What's space but a bunch of rocks, stars, and the occasional planet? You can make varied star backgrounds and different-looking planets, but they feel like meaningless decoration. Earth means something to us. Running around on the ground is meaningful. Even the abstract game world of 1980s arcade games took to this: Donkey Kong takes place in a factory (and/or construction site) - it feels like a place. It's not just naked gameplay, it's a part of a world.

I was thinking of bringing up games like chess here, but then I thought: Abstract games tend to be skill games. Either your game is about the gameplay mechanisms themselves, like chess or first-person shooters or sports, or it's a game that puts the player into an avatar and says, "go play in this world!" In that case, the world itself is one of your characters and it needs to be interesting!

I think that's one of the reasons why "space" and "sci-fi" are considered niche genres for games. You can make starfields and tetris blocks look different and varied, but they don't mean anything human to us. They don't resonate with everyday experience. We can perceive the subtlest changes in human faces because that's how we evolved; give us a bunch of subtly-different alien faces and the distinctions aren't noticed. The work that you put into it is wasted. They all look the same to us.

Lesson: Familiar environments can be rich. Novel, alien environments are cool because they're new, but you can't take that very far. Because they're just new; they don't make sense to us.

Gameplay

Same games have rich gameplay, some are like slot machines. I bitched a few days ago about browser games (especially the popular Facebook games) and how they're basically slot machines. What gameplay? Click click click, win a random prize! Compared to RPGs, there's no mechanism, no learning, to strategy. Strategy makes for a richer game.

Some people have addictive personalities. Give them a slot machine and sell them rolls of tokens and you can keep them occupied and make a lot of money. I don't think you're really making those sorts of people happy; you're just feeding off of their addiction. Encouraging that addiction. I think many people hate their addictions - but they're still addicted. Intellectually, they want to quit smoking, stop gambling, but they feel compelled.

To me the more interesting challenge, and the more rewarding pursuit, is making compelling games, not compelling slot machines.

If you want rich gameplay, WoW has it. The core gameplay element is combat but each class has its own take on it, and that take changes as the character levels up and specializes. The addition of mechanics like fleeing, rooting, rage, and combos add to MMORPG staples like aggro, pets, and mana burn. I'm not sure if there's any novel mechanic in WoW (one could take the Lorite approach here) but it does have the kitchen sink. Action games - including platformers - work with a far smaller set of gameplay mechanics. An MMO means hundreds (or thousands) of hours of gameplay, and that means an extremely rich set of mechanics.

Opponent Complexity

One of the things that started me thinking about this post was, how can I make a crafting-based MMO like ATITD? Crafting in WoW is "click a button and wait 20 seconds," but ATITD and Puzzle Pirates are two games that turn "crafting" into much more.

But there's no "opponent" in these games. The combat mechanism of RPGs is rich not just because of the variety of options that the player has, but because you pit those mechanisms against a parallel set - everything that the enemy can do. WoW players have to worry about enemy casters, archers, and fighters; melee opponents with quick attacks (hard to cast long spells!) and those with big, slow attacks; abilities like fleeing and calling for help; healers and high-DPS dudes. Multiple opponents. Not knowing what "class" an opponent is until you're in combat.

How do you make a crafting game like that? WoW combat isn't just a minigame - it's huge. And part of that is that it's set up like a competition; it's not just X choices versus a random-number-generator; it's your X against his X. This is definitely something I'd like to explore more, but for now I just want to throw out there:
  • Whereas most games have X options, RPGs are X squared.
Opponent Personality

Not only does your opponent have a range of actions he can choose, but he also has personality. Who here hates murlocs? Raise your hands!

There's casters and healers, crocs and raptors, those pesky crocolisks and the goofy owlbeasts. Evil trolls and neutral zhevras that will be happy to ignore you if you ignore them. They each have their own attacks, idle animations, and deaths. It's not "simple combat opponents 1 through 47", they have shapes & sounds & animations. They have personality.

How can you do that with, say, a blacksmithing minigame?

Many other game genres do have opponents with personality, though. Action games from platformers to first-person shooters give you different opponents. Even shoot-em-ups like Galaga give you varied opponents. So this trait - opponent personality - isn't exclusive to Fantasy MMORPGs, but it is one thing that makes it a richer game genre.

Solo & Group Gameplay

I think good browser games are team games. Travian, for example, has a good bit of solo gameplay, but it's really a team game, and I think it's all the richer for that.

Skill games have both. One typically works on their own skills but measures themself against other players, either playing directly against other players or in parallel with them. FPS games tend to be against human or human-like opponents, including team variants like Counter Strike and Rainbow Six. I think those team variants are the richest.

And that's one thing that makes Fantasy MMORPGs a great genre - solo gameplay, so players can play whenever they want, but also rich, team-based objectives that they pursue with their friends.


Inspiration

I talked about inspiration a few days ago. Many games have it, and I think it's an important component. MMOs, though, have a great built-in mechanism for adding it. They don't all do a good job of it, but the opportunity is there; a low-hanging fruit.

Open End-Game

I've talked about how good games are entertainment that's powerful enough that players are willing to pay for it. I think there's a 1:1 correlation between profit and fun. (Addiction games would be an exception to this rule.)

Open-ended games are a huge profit center. Once you get a player to try your game, you can continue drawing revenue from them for years. Any game or sport that players enjoy going back to means a huge potential revenue stream. There's tons of tennis racquets, climbing shoes, skis, and other sports gear available and tons sell each year. WoW pulls in 9 figures every month.

Compare this to a console platformer. The player spends $60 and gets fifteen hours of gameplay. Kind of expensive (hence the huge aftermarket for used games), but cheaper than going out to the movies. It definitely keeps a lot of game development studios alive.

But with a long gameplay curve and a chance for play to continue for hundreds of hours, MMOs are like sports - in that players continue investing money in playing, year after year. A customer isn't a one-of-thing; you aren't selling a one-size-fits-all product. Some players pay their $60 and leave, others pay $15 a month for years. With microtransactions, some MMOs pull in over $1000 a year from certain players. That's the sort of market depth that sporting-goods retailers have: the people that really love your game can give you more than just $5 in profit! And they're paying all that extra money because they love your product; because you have an end-game, and one that's constantly being extended and improved.

Summary

WoW is the most lucrative computer game of all time. I think a lot of that has to do with the type of game it is - a fantasy MMORPG.

Stick an MMORPG in space and the opponents and environments get dull. Sure, Eve is doing well, but it's not doing 9 figures monthly. A game like Eve has, I think, a better opportunity of pulling in more revenue via microtransaction-like addons, but ... well, space is boring.

An MMO means team gameplay, inspiration from elder players, and socialization. You don't get a community for a game like Tetris.

And RPGs bring huge amounts of possible gameplay. I didn't even get into various metagames, like loot and set collections.

I think we, as game designers, can learn to make our non-FMMORPG games richer by looking at games like this, and seeing what richness we can pull from it to put into our own projects.

Friday, June 4, 2010

The Purpose of Games

What's the point of any game? Entertainment. We do it because it's fun and/or rewarding. I've talked about happiness as the achievement of value - that's reward. In that same point, I talked about fun.
Purpose

But what's the point? What's the purpose of games? What does it all mean?

Nothing. There is no point. Games are entertainment. You can play with friends and enjoy socializing, make new friends, that kind of stuff -- but games are an end in themselves. They're entertainment; that's what entertainment means.

Even sports are just entertainment.Will a high free-throw percentage help you avoid car accidents? Pay for your kids' college education? They can improve fitness, but a half hour in the gym with a high-intensity or Tabeta-protocol workout will have the same effect. Sports are entertainment, too.

What's the purpose of life?

Is it to knock some chick up then spend your days slaving away to feed her and the kids, make sure the kid doesn't die before you kick him out of the house and go back to what you were doing (and enjoying) before the kid came along? Is your purpose to produce more and more humans until the planet can't support them any longer? (Never mind the argument that it can't support us now.) Is your entire purpose in life to invent for yourself a purpose and then proclaim to your neighbors how totally awesome you are for inventing that purpose? Are you here merely to serve as a guardian and provider for others, a slave to their whims and desires? Does it matter that you're genetically related to them? If so, are you saying that adoption and orphanages are evil? If not, does it matter if you were the one that knocked up the chick or if it was the UPS guy?

Or are kids fun and rewarding? In which case, you knocked up that chick because it was fun not because you had a grand purpose in mind.

Is your purpose "to make the world a better place"? For whom? Your neighbors? People with the same skin color? People born in your state? What arbitrary subgroup of humans are you 'obligated' to provide for? Are you just saying that because you want to believe that you have a purpose and haven't discovered any of the arguments that suggest that you should find your own purpose?

The easy answer is "all of the above." That's a cop-out. That's saying that you don't want to choose a purpose; you'd rather just stumble into one.

Games

Oh, right. Games. I was talking about games.

Games are entertainment. We play them because they're fun and rewarding. Good games are fun and rewarding. Bad games aren't fun or rewarding.

Bad games are like work. They make you do stuff you don't want to do - like set your alarm for the middle of the night so that you can help your team defeat an enemy. If you don't buy into the goal at the end, then the whole process loses meaning.

Many games (and sports) are fun because we learn a skill; we get better at the game. Many people like that learning process. Others like it when the other guy loses; some like it when their performance gets better.

Some of the most fun I had playing first-person shooters was playing a heads-up competition against a guy that was way better than me. I was losing but I was learning. I could see myself every day getting better. That was a real rush. Some people can't stand losing; their goal is to win. They don't want to get better, they don't want to be a good player - they just want to win.

This comes from ego. How do you define yourself? Is it important to you that other people say that you are right? Or would you rather be right? Many times, people that feel that they are without power in their lives, without control over their own lives, seek an outlet where they can exert power and control over others. Some of those people become abusive cops or angry security guards; the rest cheat in online games to crush their enemies. They don't want to be good, they don't want to win - they want to crush.

Where does the desire for power and control come from? I'd posit it comes from having an imbalanced life. Many people have imbalanced lives. American high school seems to be the epitome; hence all the teenage ratfucks in online games that want nothing more than to crush their opponents.

The rest of us grow up, find balance, and look for games that are fun and rewarding. We try to get better at games, look for opportunities to learn, and judge our mastery by how often we do win.

But Maybe...

It could be that the purpose of your life is only to serve as a warning to others.

Friday, May 28, 2010

Players as Inspiration in Browser/Web Games

I've talked about powerful players before, and about status (or score) as a game mechanic. Playing multiplayer browser-games recently got me thinking about the mechanic from a different light.

The Facebook games I played are built around having a persistent play-space (diorama) that you can customize, and then asking other players to stop by your space to do a little something that gives you (and them) some in-game benefit. This mechanic gives you an opportunity to see what other players have done with their space, and gives you a chance to show off what you've accomplished.

A Note on Dioramas

By 'diorama' I mean your farm in FarmVille, home island in TreasureIsle or Island Life, personal kingdom in Fantasy Kingdoms, and the like. Treasure Isle is probably the best example, because there is no gameplay there, whereas in most of the other games you need to build not just for aesthetics but game mechanics, too.

Artistic Ability

Building a nice-looking space is difficult. It requires some artistic talent, plus persistence to acquire the in-game tokens to build it the way you'd like. But the better and more complex the art assets, the easier it is to build a themed level. I remember some of the amazing hotels that people built with Roller Coaster Tycoon - which seems weird, but that game had very small elements; little boards of various colors. They were extremely flexible, which meant people could express a lot of creativity in building complex and interesting structures. Facebook games, on the other hand, deal with very large art assets with little flexibility. Your choice is basically what to put in each tile - which is a small bit of real estate. In RCT, one could stack tile on top of tile, creating layers and multi-storied buildings. Facebook games lack that.

Which means, actually, that it's easy to make a good-looking diorama in a facebook game - assuming you have access to the parts you want. Say, within a given game, there are several art themes, like architectural styles for buildings. Art deco, modern, classic, brownstone, castle, wooden - whatever. Building a themed level just means buying a bunch of items in the same style and then arranging them. This is a much lower artistic threshold than RCT; something almost everyone could do. Throw in a little bit of extra flexibility, and even average joe has a chance to build a cool-looking diorama.

But... that doesn't happen. The parts are grossly expensive. The only way to build a nice themed diorama is to play for a year, or drop $100 or more. Bleh?

Lego vs Duplo

One way to resolve this is to reserve the small, creative pieces for paying customers, and give the big, bulky, pretty-art but low-personal-creativity elements away for free. Give everyone Duplo blocks, and make them pay for the Lego. If they want to get fancy, they can pay for it. This can work because:

Inspiration

Others players are inspiration. When you go visit their play-space, if they've done something cool, you want to do it yourself. Some people thrive on an empty canvas, but I've found more people are inspired by seeing something cool and wanting to make something like it. It's the rare individual that wants to be given not just a blank canvas but a huge sack of tools to decide which tools to use. Give them acrylics and a bunch of landscape scenes and they might be inspired; charcoal and portraits, and they'll run off looking for a model. Show them a cool crafted item in Warcraft, and they'll want to be a crafter. Show them Ulduar loot and they'll want to go raiding. Show them a bunch of Lego spaceships, and they'll want to buy some pieces and build their own.

It's also motivation for them to work on their own dioramas / loot / whatever. Not only is it inspiring to see something awesome created by a friend (or even a stranger), but it can be motivation for them to put pen to paper themselves - or to play the game more.

Profit

And that's where we come in. We game developers give them the tools.

The model I've seen so far in Facebook games is to charge for the "cool" Duplo blocks, but to only provide (say) red and blue blocks, and only in a few weird sizes. I don't have the flexibility to be really expressive, but I also don't have access to enough blocks to build a single theme. If I could put together a skeleton of a cool diorama, I might be tempted to pay for the really cool bits that will make it distinctive. If the option is "pay or don't be cool," then ... well, do I even want to keep playing this game? What's the point of playing a slot machine if it doesn't give any prizes?

Fancy ads can draw players into your game, but so can user-created content. If your game already has some amount of user-created content, providing the tools to make it easier for that content to be inspirational improves user fun and thereby developer profit.

Ranting Conclusion

I wish I could play with my diorama. I want to build a piratey hideout in Treasure Isle, but (1) I've got to play for another six months maybe, (2) spend $100 buying the parts, and (3) I don't really have access to the parts I want anyway. Fuck that. Plus the game is a slot machine.

I really want that game to (A) have some measure of strategy to the play so that playing it isn't a grind, (B) give me the option of pursuing the parts I want, eg digging in Pirate islands for Pirate goods, (C) and gave me basic stuff for free, so that I'm not stuck with an empty island for months.

Thursday, May 27, 2010

Things I Hate About Web Games

I'm coding again, and somehow that also means doing "research" - playing new games for a bit. A friend suggested I check out Lord of Ultima, since I like Ultima and also played Travian for a year. I also wound up playing some Facebook games, and checking out some of the other online, browser-based RTS games, including Ikariam and Nile Online. I've played Evony before, and I checked into a few other real-time strategy multiplayer browser-based games, like NationStates and Monopoly City Streets.

I've got a few major complaints against these games. The time element tends to suck in these games. The facebook games are spam-based. Help and tutorials tend to be abysmal, and goals are rarely well defined. Tack on some obsessive play-to-pay rules and I don't wonder that they're not all making bank.

Time Element

The worst sin is the time element; you can't log in and play. Log in, hang out for a bit, watch, scroll around the map, contemplate your navel - then 10 minutes later you make a move. Great! Now wait another 10 minutes before you can move again. Most people play games because they want to play games; stuff like Lord of Ultima and Travian both are centered around a mechanic where you can't make any moves for hours. I'm on my fourth day of LoU and I have to tell myself not to play, because it's a waste of time. Come back in three hours.

Nile Online does this a bit worse, because the first thing you do is stare at the map trying to figure out wtf is going on. I'll get to that later, but when you finally do read the primer, it's basically "click some stuff for about 3-4 minutes, then go get caffeine. Come back in 20 minutes cuz you won't be able to do shit for 20 minutes." You read about it, looks like fun, sign up, play for 5 minutes -- then you're done. Quit. Go do something else now, please!

They like to compare themselves to a garden or other sort of tend-it-here-and-there activity. But if you wanted to, you could go out to your garden and weed & plant & water & fertilize & fence for hours, for a whole day. And if you run out of stuff, it's easy to leave for a day, because it's not a game. You can't really tend a real garden every 10 minutes, but these virtual gardens want you to do just that. Games are fun, and can be addictive - but an addiction that you can't feed is lame. Stupid. Why do you make me hate you?

The thing to do is to log in and chat with your buddies, possibly spending your evenings chatting - while occasionally making a move or two. That's what I did in Travian, and that game did tons of things right to make such socializing possible. Coordinating with other players is a big part of the game, and it's easy to make friends there. The stuff you have to do can be done in batches, once or twice a day, so it's easy to log in and putter around for a couple hours, chatting while you wait. Raiding, especially, is something that you can kind-of-actively do: send out some raids, wait twenty minutes for them to come back and chat while you wait. Poke around your other villages.

It sucks if you're lonely. One thing WoW did very right was to allow solo gameplay. Want to log in and play for a bit? Sure! There's quests, farming, crafting, the auction house - tons of stuff to do. If you're not max level, questing solo is cake! The game is made for it. These browser-based games? Bzz! Sorry, you're not wanted! Give your money to someone else, please.

spam

Facebook games are a bit better in the time-wasting department. They can be played in 20-30 minute chunks, then you run out of energy or mana or whatever. That's a great model; 20-30 minutes of constant fun, no waiting, and then a clear indicator that I should go do something else for four hours.

Nile Online was offensive with its 5 minutes of initial gameplay. After playing it for a week, I'm a bit more at ease with the 5-minutes-here, 5-minutes-there model, but it's not really a game. It feels like the tend-me-occasionally garden that it wants to be - but it's not really a garden. Guh. I'm not really drawn into that gameplay model. Maybe you'd like it, there's others out there that seem to like it, but I think my time with that game is over. Not my cup of tea, but at least I'm not saying it's a cup of piss.

Anyway, back to spam.

The big downside to the facebook games is that they're asking me to spam all my friends with a half-dozen or more posts in my 30-minute play session. Optimum play requires being one of those boring jerks that spams all their friends with crap. And I'm not going to be that guy; most of my facebook friends don't play these games. I'm not going to crap on their wall with what are, effectively, ads. Multiple times a day. In sets of 5+ posts.

Which doesn't address the fact that all of the facebook games I've tried so far are slot machines. I ranted a bit about that when I talked about designing fun, so I'll leave it alone for today. A slot machine that asks me to piss off my friends? Fuck you.

Help and Tutorials

Mostly these games seem to be built by companies that get the idea to clone someone else's popular game, shove it out the door, then start collecting money. Game design? We've got artists to make the pixels, that's game design, right?

Tutorials are essential in complex games. They're a way of taking what can be a forbidding mess and make it appealing to new players. Another alternative is to start with a simple, obvious game and gradually add complexity to it. One of my favorite city-building games, the Settlers series, does this great. It's the gameplan for PC-based RTS games: start the player off with a few tools, let him learn to use them through the play of a scenario, then add another tool or two in the second scenario. Somehow the makers of all these browser-games never learned that lesson, or didn't bother to apply it. They throw every single tool at you in the first five minutes. Confusing = lost = bored = quit = zero revenue. Negative revenue, after including the costs of hosting that player's little play session.

Nile Online has a Primer, not an in-game tutorial. It got me started, but it didn't mention the heart of the game: upgrade stuff, balance your workers, and upgrade your palace to get more workers. That's its core gameplay. Yeah, sure, you eventually choose a specialty good and make your mark in the world that way - but that's not what you do.

Games should explain what you do as well as what you strive for. They tend, generally, to put the shine on the game's goals, how the game can be fun, but don't teach players how to play the game. That's a great way to lose players! Someone went through the work and commitment to try your game out, create an account, and start playing - keep them playing! Show them the light!

Some of the games do have good tutorials, not all are necessarily bad. The worst documentation is reserved for the goals (see next section), but I wanted to split that out so I could talk about it more. Travian, Lord of Ultima, and Ikeriam all have decent tutorial/quest chains that get you started. They don't tell you where you're going, but they do tell you how to look busy.

Goals

Some games define their goals well (like Nile Online), others have good tutorials. The most popular games, though, feel like time-wasters because they don't explain their goals. Lord of Ultima seems to be grossly negligent in this way, mostly because it doesn't actually have a goal. The "goal", if any, is to "win" the game - apparently by being Rank 1 when it ends. Maybe it doesn't end? Maybe the server keeps going? Who knows? They apparently don't. So why are you playing?

"To have fun!" Ugh. These aren't games, they're toys - but competitive toys. Someone can come into your sandbox and kick over all your castles. That's one reason why people hate Travian and quit. It markets itself as a sort of multiplayer sim-city, but that's not what it is at all. That's a fucking lie. It's a competitive game. The goal is to help your alliance build up enough members, cities, armies, and allies to grab some plans, build a world wonder, and defend it against the other alliances. It's a team game! It's a fun team game! (One that just happens to have really bad time-demand issues.) Travian really should push what it's about. It doesn't. It does something really well, and they should brag about it. That's what I mean by goals: tell everybody what their goal is! Tell them how they, too, can be great!

"Do whatever you want!" I don't want to do whatever. I'm looking for a game - something with a goal, a way to win. What's your way to win? Nile Online does this somewhat well; it doesn't have a "win" condition per se, but it does lay out the promise of being a notable player. Everyone in the game has their own specialty; everyone can be special. That's a great promise, especially since everyone wants to be special and well-known.

To be clear: I'm saying it's a bad thing to refuse to specify goals. There's games, then there's toys - sandboxes. Trying to do both tends to piss off players; doing both well is extremely difficult, such that I seriously recommend not trying. Especially if you're gonna half-ass your way through the design process. Lord of Ultima is kinda bizarre in this respect, until you figure out what must have happened. Some suit must have said "Travian is popular, Ultima is IP that we want to make money from, throw a bunch of money at this!" They then refused to hire an experienced designer (or to listen to the one they hired) and built a pile of shit.

Play-to-pay

The idea of microtransactions is to give players some cool little doodad that they can buy with just a wee bit of money. Make it optional, so that people can still play your game for free (or cheap), but allow the guys willing to spend money a chance to set themselves apart.

Travian does this well. For about $5 a month, you can double your monthly growth. You only buy a small percent increase in production, but because the game basically runs on compounded growth, a small percent each day translates into integer multiples in strength each month. But if you don't pay, you can still contribute to your team's success. Plus, by spending a bit more over that, you can jump around a bunch of other restrictions.

The last is probably the worst microtransaction model. You don't want to make gameplay annoying, and then offer to make it less annoying for a small fee. The correct response by a player to that offer is "fuck you, I'm gonna go play a different game." This is one reason why WoW has gradually reduced the level when you get horses. Travel is a pain in WoW. At low levels, it doesn't matter too much because everything you do is right there. But at some point, you have "enough to do" in the game world that you want to travel further - and getting there by foot sucks.

But browser games often commit worse microtransaction sins. The thing you buy with money is the actual game itself. The facebook games I've tried are all like this. The game that you play for free is a slot machine version of Progress Quest: pull the handle, get your chips, and brag to all you friends about how many times you pulled the handle. (WoW is kinda this game, in that you get to brag about your level, but there's strategy to killing mobs; it's not just a button-press.)

Alternately, a player can spend $50 and get a sandcastle where they can build a cool little diorama to show to their friends! Now that sounds like fun. Give me some cool diorama parts, let me find (or better yet, quest for) some rare parts, and let me create something cool. Plus, show me other people's cool dioramas, so that I can be encouraged and inspired to create my own!

but wait! You gotta pay for that!

Ugh. It's bait-n-switch. It looks like a treasure-hunting game, or a farm sim, or somesuch - but it's actually a very expensive dollhouse. Why not just get rid of the slot machine? Or, better yet, let me choose to go questing for the parts I want? And replace the 'slot machine' with something that requires strategy?

-conclusion-

Yeah, in conclusion: that last paragraph. I don't mind microtransactions. Some games, I am willing to pay a bit to be stronger, to get something cool. Others are diversions I don't enjoy enough to pay for - which really means they're sucky games.

A cool browser game would be one that's (1) not a slot machine, but requires some strategy in its play, (2) allows players to specialize the way in which they're awesome, and (3) lets me play in meaty chunks. Tell me (4) how to play, and (5) what my goal is.

Game audiences are a stochastic thing. Some people are willing to pay for the diorama. Others get caught up in building their little world and don't mind paying a bit extra for it. Others have addictive personalities and get sucked in by slot machines. And others are too stupid to realize that there are better games out there.

Like WoW. Bye, Treasure Isle / Lord of Ultima / Nile Online, time for me to start getting ready for Cataclysm.

Tuesday, May 25, 2010

Game Design: Fun Challenges

Fun & Happiness
Happiness is the emotion resulting from the achievement (or preservation) of values. Accomplishing something you don't value doesn't feel rewarding. Players are happy when they achieve something meaningful. That could be game-defined goals, player-defined goals, or even just learning.

What's the difference between fun and happiness? Grammar, for one: one "has fun" but "is happy". Does happiness come from having fun? Generally our culture views happiness as a longer-term thing, but I don't think that necessarily applies to game design -- I think players can achieve happiness from playing their game of choice. I also think that being happy isn't the same thing as having fun.

Fun is amazement, curiosity, bewilderment, happiness, laughter, vengeance, and a host of other emotions. I've talked about boring before: if you don't have anything to think about, you get bored. But being occupied isn't the same as fun. I remember working at a fast-food joint during rush hour. I didn't have time to get bored, but I wasn't having fun, either. Generally stuff that's safe (ie doesn't threaten any values) and produces a non-negative emotional response is fun. There was nothing emotional about slinging fries, but interacting with customers (especially the cute kind) was sometimes fun.

The two main groups of fun emotions are those responding to new stimuli, and those responding to positive values (happiness-related). Achieving a goal that you planned for and expected to win isn't as much fun as an unexpected victory; the emotion in the latter is stronger. I also think seeing new wonders - whether it's high-level gear or foes in Warcraft, or funky new buildings in SimCity or Travian - is stronger than happiness-related fun.

I've heard (and frequently repeated) that designers of platformers like to put players into new environments every 15 minutes. Warcraft follows a similar model (tho the time delta is hours not minutes), and RTSes and the like put players into new environments every 30-60 minutes. Players also like new games, new graphics, new expansions, etc. They want something new, because new is fun. These players are explorers, and I think it's the dominant type of players generally.

I love new stuff, new areas, exploring game mechanics, exploring the nooks and crannies of game worlds, new graphics, all that stuff - but I can also sit down and grind through some resource gathering. I turn that into a game: how quickly can I pave through this set of creatures and take their drops? How many can I kill in an hour? That's a self-created achievement goal. Some people are good at that, but most people aren't. I'm tempted to call it autistic-spectrum (the ability to focus on a narrow goal), but I actually think it's just a reframing skill.

This is achievement again. Many Asian MMOs are very grindy; players in that market are used to this type of reframing. They view the grind as an achievement path, and they can focus on maximizing their achievement performance. To them it's fun. American players, by contrast, tend to be the "fun fun fun" type that want distractions and new, shiny trinkets.

Difficulty, Perceived Difficulty, and Choice

If happiness comes from achieving meaningful value, then how does one quantify "meaningfulness?"

I think one really has to scrape the bottom of the barrel to get game challenges that aren't meaningful. It's a continuum, obviously, and I think it's related to perceived difficulty. Not actual difficulty; rather, how difficult the challenge is perceived to be by the player.

The Facebook games I've played are basically slot machines. There is no challenge; very little strategy. Do you dig in the open areas first, or go for the plants (which require more energy), or open up the gates (which require no energy and give some XP)? Ultimately you're gonna click every damn little grid square that you can. Whether you click them "smart" or not is maybe a 5% change in effectiveness. These games win on two fronts: the user can perceive some kind of magical ESP or mental brilliance in what they're doing, which is great for the vast majority of players that are fucking morons. (They play slot machines and farmville, after all.) And they get random rewards.

The two are really related. The human brain is wired to see patterns; we look for patterns, because they help us survive. Sights, sounds, tastes, smells, and even touch came into play for survival. Should I eat these berries, or wait til they change color? Does that sound mean a jungle cat is about to rip my spleen out, or is it just a harmless forest critter? Give a player a bunch of random stimulus and he'll think he sees patterns in it.

It requires a lot of discipline to avoid latching onto that perceived pattern - plus the experience to know that your brain plays these kinds of tricks, and that you need to do something other than sit there with your jaw slack and let the emotions roll across your brain. But that discipline is only useful when there's an actual pattern to be perceived. That is, in a slot-machine game, all the patterns you think you see will be fake. In Facebook games, there might be one real pattern in a hundred.

One might say "good games have real patterns for players to discover," but I'm not sure how much that's true. (It depends on what you mean by 'good' game, of course.) The facebook games are popular, even though they're just slot machines and epeen displays. I do think if you want people to pay money for your game that you need to get them to want it, to have some emotional pull to the game more than just what you get from a slot machine. (Though people do dump a lot of money both in casinos and facebook microtransactions.)

Facebook games have choice, but it's a shallow, meaningless choice. Even perceived difficulty is low.

I think perceived difficulty is better than actual difficulty. Games that are actually difficult can produce failure, and that leads to bad emotions. But without evil there can be no good: people value achievements that came with high cost. It's one of the reasons why hazing is still popular - paying dearly for something, even a gym membership, leads the human brain to bias more value.

Too many apparently difficult choices that are actually trivial can burn the player out to the point where they realize how pointless their choices are. I think I burned out of WoW once because of that. When a player realizes that all their clever strategizing was meaningless, they can shut off like a switch.

That marks your boundaries: make the difficulty too real and players give up in frustration; make it too much of a smokescreen and you risk players finding out and feeling like they've wasted their time on your game.

Challenge and Accomplishment

I want to say "the best games have some real challenge, some perceived difficulty, and reward players for making smart strategic choices." But what does best mean (i.e. on what scale)? Is this just my preferred game style? Am I just deluding myself into thinking I like challenge? I guess I'd rather be fooled into thinking I'm smart than be given a game that I can't figure out.

The point of making games is merely to feed our own values. The two major values are (1) money, and (2) the pleasure that comes from making others happy, or entertaining them. #1 is a measure of #2 - if players are entertained by your game, they'll pay you for it. The more fun and happiness they receive, the more money they'll give you. I don't think these values are separate, and it's one reason why I think discussions of "true" art and good games are pretentious and miss the point. Make a game that makes you money, and that's proof that you're making people happy.

You could make a slot machine. You could fool a bunch of ignorant rubes into thinking they're smart; give the ESP types a reason to believe in their magical powers; and amuse the easily-entertained.

Alternately, you could put some real challenge into your game. Give players choices that actually matter; where choosing wrong will mean failure. Make success cost a bit, so they value it, but not too costly to burn them. Make some choices look difficult when they're actually not. But most importantly, play with their emotions. Players want a roller-coaster ride. Give them both achievement and entertainment, and they'll give you their money.

Monday, May 24, 2010

Real Effects of Cowboy Programmers

In my previous post, I talked about the perceived strengths and weaknesses of cowboy programmers. I described cowboy coders as isolated, shoot-from-the-hip, hardworking, and antiestablishmentarian.

Cowboy coders often write unreadable code. But it that a bad thing? When someone else needs to maintain the code, yes. When someone else needs to dig through an obtuse and confusing system to figure out which parts are the external interface, yes. When someone needs to look at a clunky, poorly-named set of interface methods, yes. But most often what cowboy coders have is unreadable implementations, which is mostly harmless. The output that matters most in team projects are (1) reliability, ie does it crash, (2) reasonable performance, ie as long as it's not abysmally slow, and (3) readable and understandable interfaces. If you know what a system does and the interface is clean, it doesn't matter what's going on under the hood. That's the whole point of encapsulation; hide the messy bits from outsiders.

Cowboy coders also rarely document. Yet this is a tenet of agile programming: code should be self-documenting. Parameter names, variable names, method names, class names -- all identifiers -- should describe what they are, semantically not syntactically. (This is one reason why I think hungarian notation is foolish; it focuses on something the compiler can do for you.) Variable names like "gc" and "q" and "theFileStruct" are horrible. If that's what any programmer on your team is doing, hit them with a stick. If their identifiers are well chosen, the external interfaces obvious, and the use of those interfaces clear, then again the lack of documentation is not a weakness.

Brilliant code rarely makes sense to other coders. Any brilliant person, scientist engineer artist or craftsman, is likely to be misunderstood. Not understanding them often isn't critical. In a team environment, the interface is what matters, and it's much easier to get a cowboy to make good interfaces than to try to force him to work like everyone else. He'll probably not do a good job, and the process will just piss the both of you off.

Loners can be brilliant cowboys or they could just be slackers. Be careful to not assume that someone that prefers isolation is actually getting something done. The best way to do this is to monitor checkins. Some good cowboys won't check in code for days, but when they do check something in their progress is obvious. Slackers might have the same lax check-in habits, but when they do finally commit what shows up is tiny. Slackers are a threat to your bottom line. Don't just tell them that you want them to check in more often; tell them that you're watching the volume of their check-ins. Slackers will either step it up and get work done, or find a way to quit or get fired. This is one of the important distinctions a manager needs to make about his employees - is he a cowboy, working diligently in the dark, or a slacker, surfing diligently in the dark?

Cowboys can also have an effect on the rest of your team. The best, brilliant cowboys might be reclusive but in my experience they haven't been anti-social. Slackers, on the other hand, are sometimes passive-aggressive or rude. Having a brilliant coder nearby is often an inspiration for the rest of the team; it makes them feel like they're someplace special. Beware of how the team views the cowboy. If the team respects the cowboy's brilliance, treating him like a misbehaving child can send a message to the rest of the team that you value conformity over performance - and that's what you'll get: a bunch of rule-nazis that do the minimum required and leave the building promptly at 5pm. This is the fine line of management: you want to give the cowboy room to do his thing without upsetting the rest of the team. Make sure the rules you impose aren't just to make you feel better; usually the purpose of a software team is to ship, not to measure code metrics. What matters are features and reliability. If you're getting those on a good timetable, be happy.

Your cowboys shouldn't be driving the rest of your team away. One of my favorite software-management stories is about a new management hire that refused to fire a problem coder that was pissing off other employees (driving them to quit). When the manager went to his boss, the boss fired him! Yet, after looking at the situation, the manager agreed with what his boss did. If a problem employee is driving others to quit, the thing to do isn't to coddle the problem employee; get rid of them!

Thursday, May 20, 2010

Perceived Traits of Cowboy Coders

"Cowboy Coders" shoot from the hip. They're lone wolves, programming heroes. They're respected for their work ethic, programming speed, and brilliance - but hated for their unreadable code, lack of standards, and arrogance.

There are many types of 'bad' programmers. The 'cowboy' label is used if the bad programmer has a high opinion of himself (deserved or not), ignores standards, and writes brilliant (if complex and unmaintainable) code. Cowboys aren't stupid, but they might be ignorant. They believe strongly in standards - but only their own. They rarely work well in teams, preferring to work alone. Many cowboys are also workaholics.

One of the perceived strengths of a cowboy coder is their ability to dive into tricky bugs, figure out what's going on (maybe spending all night working on it), and coming up with a complex and brilliant solution. Especially when a deadline is near.

One of the most hated traits of the cowboy is his habit of loudly disrespecting his fellows. This is one reason why cowboys work alone; they can't stand working with others, and others can't stand working with them.

But "Cowboy Coder" is a stereotype. Real people are rarely like that. It's fun to make up or read lists of programmer types, and "cowboy" is one of the stereotypes that I've heard the most. The qualities I've found distasteful in other coders are rarely like the perceived weaknesses of cowboys, and the strengths of good coders I've worked with are more complex that the "work hard" and "brilliant" attributes given to cowboys. Next time, I'll cover the strengths of weaknesses of cowboys that really matter in my next post.