Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 627

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 691

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/kses.php on line 692
May 31

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

There’s a fascinating read on Paul Graham’s website about how to find and do work that you actually like for a living, rather than just work because you have to. You can read this very insightful essay here.

To do something well you have to like it. That idea is not exactly novel. We’ve got it down to four words: “Do what you love.” But it’s not enough just to tell people that. Doing what you love is complicated.

The very idea is foreign to what most of us learn as kids. When I was a kid, it seemed as if work and fun were opposites by definition. Life had two states: some of the time adults were making you do things, and that was called work; the rest of the time you could do what you wanted, and that was called playing. Occasionally the things adults made you do were fun, just as, occasionally, playing wasn’t—for example, if you fell and hurt yourself. But except for these few anomalous cases, work was pretty much defined as not-fun.

May 26

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

Somebody at work asked me today for a list of good book recommendations for game designers, so I figured I’d put the list here to help as many people as possible. All of these books have taught me important things about design or have helped my work even though they’re not directly about games development.

Creativity and Innovation

Project Management

  • Facts and Fallacies of Software Engineering by Robert L. Glass: Quick overviews of lots of interesting topics on software development — nothing really in-depth, but you’ll get a lot of information in few pages
  • Peopleware by Tom DeMarco and Timethy Lister: A classic on project management. The only management book I’ve read 3 times — it’s that good.
  • Patton on Leadership by Alan Axelrod: Leadership methods based on General Patton’s approach to leading his troops

Interface Design

  • The Design of Everyday Things by Donald A. Norman: Essential tips on creating interfaces that are easy to use
  •  Emotional Design by Donad A. Norman: Going beyond interfaces that are easy to use, how do you make people have an emotional reaction to your design?

Writing Well

  • The Elements of Style by William Strunk jr. and E.B. White: A small book with a ton of tips on improving your writing.
  • Creating Unforgettable Characters by Linda Seger: How to create believable and interesting characters for any kind of fiction.
  • Story by Robert McKee: Learn how to be a great screenwriter

Communication

Marketing

  • Made to Stick by Chip Heath & Dan Heath: Learn what makes ideas stick in people’s mind.
  • Positioning by Al Ries and Jack Trout: Essentials of modern marketing
  • The Anatomy of Buzz by Emanuel Rosen: How to create word-of-mouth marketing
  • The Tipping Point by Malcom Gladwell: More on word-of-mouth marketing and the effect of social networks on the popularity and impact of things.
May 20

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

PC Gaming hasn’t been doing so hot the last few years, especially for traditional games sold at retail. Here are a few causes for this and some thoughts on avoiding those pitfalls.

  • Piracy: That’s a huge factor. Sales of PC games have fallen faster than the number of actual players. It’s easier than ever to find pirated copies of games on P2P. I believe DRM and other rights restriction systems are pointless and only annoy legitimate users. There’s a number of better solutions:
    • Games as Service: Give the game away but sell the experience. Subscription games like World of Warcraft and the Korean model of free games with extras at a cost both avoid piracy very well.
    • Advertising-supported games: It works for TV, why not games?
    • Pay what you Play: Some “real world” games like Warhammer and Magic: the Gathering only make players pay for what they play — you don’t need all the Warhammer figures or Magic cards to play. Casual gamers pay a few dollars, hardcore players pay a lot. This model hasn’t been used much in video games, but I think it has potential if done well.
  • Complexity: PCs have become a commodity. Hobbyists aren’t the only ones to buy them anymore and most “ordinary” folks can’t tell the difference between an Intel Core 2 Duo and an AMD Phenom, between a Radeon HD 2900 and a GeForce 9800. Making games that run fine on a 500$ computer or a cheap laptop is more important than ever. Games that only run on the latest generation of hardware are shooting themselves in the foot. That does mean focusing less on fancy graphics and finding another way to distinguish your game from the lot.
  • Cost: Cheap PCs are more expensive than consoles — you’re not getting much of a gaming PC for the price of a PS3. This brings us back to the previous point: target lower-end PCs because that’s what a lot of people have.

So that’s for the problems. PCs do have a number of strengths over consoles for gaming:

  • Openness: There are no gate keepers for PC games. You don’t have to please Nintendo, Sony or even Microsoft. That means space for edgier content, but also lower distribution costs because there are fewer middle-men.
  • Unparalled Connectivity: Only the PC has full access to the internet, with no restrictions at all. There’s a lot of experimentation that can be done that wouldn’t work on console manufacturers’ limited networks.
  • Unique Input Devices: The mouse and keyboard allow many things that consoles just suck at (and vice-versa). I’ve yet to see a RTS that’s easy to play on consoles for example.
May 13

Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/public/wp-includes/formatting.php on line 82

I’ve been playing a lot of GTA IV recently — that’s why I missed last week’s update — and what really stands out for me is that the game doesn’t feel unfocused even though it has many different types of gameplay. A lot of games with that much stuff to do feel disjointed: one time you’re driving and another time you’re shooting, but it feels like two separate games slapped together. GTA feels very consistent throughout.

I believe this is because each of GTA gameplays is a different dimension of the same core focus. The focus is to be a gangster in New York City, and everything else flows from that. Driving, shooting and handling relationships are different parts of being a gangster, so it all feels very consistent.

Each of those dimensions of gameplay combines to make an experience that’s richer than each dimension individually. Combining driving and shooting makes the whole larger than the sum of those two parts because the intersection of those two aspects creates new gameplay: killing enemies by driving over them, shooting enemies in cars, shooting while driving, etc. Because they’re two dimensions of the same core gameplay, their effect multiplies instead of simply adding up.

A counter-example to this multiplicative effect would be Mario Party. Mario Party has a lot of different types of gameplay — dozens of mini-games are available. But each mini-game is separate from the others, so each new mini-game just adds to the total of gameplay, it doesn’t combine with anything else. Each mini-game is a separate game entirely, it’s not another dimension of the same core gameplay.

You could remove a bunch of mini-games from Mario Party with very little impact on the game. Remove driving or shooting from GTA however and you’ve changed the game entirely.

Exploring one core concept with multiple dimensions of gameplay makes for a richer experience. Each part combines with the others to create a very large amount of possibilities for players. A lot of games follow this approach: Assassin’s Creed (stealth, acrobatics and combat), Gran Turismo (racing and car tuning), Civilization (strategy, diplomacy, expansion), etc.

Focusing on a single dimension of gameplay is easier however, as it lets you focus all of your energy on one thing. Guitar Hero does one single thing but does it very well, so does Ikaruga. Casual gamers like this type of game because it’s easier to approach. Fewer dimensions reduces complexity but also the richness of the game.

The most important thing is to know what the focus of your game is. Slapping together a bunch of types of gameplay doesn’t make a game good. Each part of the game — whether it has one dimension or many — should stem from a clear core experience.