Monday, December 31, 2012

Mission Accomplished

Well, I did it. I delievered a playable game by Christmas.

Not without cost, mind you. A lot had to change. Even more had to be cut. But a lot of other fun things were added and discovered during playtesting. All of which I'll detail here once I catch my breath.

Now for my next goal - a releasable game by March. Onward!

Wednesday, November 14, 2012

The First Playtest

I said Frontiers would be ready to playtest over Christmas - my family and friends are excited to try it. I said it would be ready because I decided it was high time I got the core gameplay working, and the embarrassment of having nothing to show is an excellent motivator. But now that I have about a month left to go, I'm starting to wish I hadn't said a thing, especially since I know a new season of Breaking Bad work is scheduled to drop on me like a ton of bricks in December.

On the one hand this deadline did exactly what I'd hoped it would - it forced me to step outside of the comfort zone of Let's get this working just the way I want and into the world of This needs to happen or the game won't exist. And that's been fantastic for progress, if not stability.

On the other hand - Christ almighty there's a lot left to do. And I can already see all those sad looks I'll get if I have to tell them Sorry, it's not ready like I said it would be. It's the same look you get when you tell someone a pet died, only worse, because what really died is your integrity. And there's that half-amused undercurrent of Oh, I see, so you're NOT really doing this for a living. My mistake.

And the worst part is, because I haven't done this before - this being creating a game from start to finish - I haven't leveled up my estimation skill. Ask me how long it'll take me to complete a VFX shot and I'll give you an estimate accurate to within a half hour. Ask me how long it'll take to implement a game feature and all I can tell you is it'll happen someday. I hope.

Did I say that was the worst part? I'll do you one better. The worst part is, they will almost certainly dislike the game, for two reasons. First, it's difficult to stay alive, even when nerfed for playtesting. Second, despite being more focused than a pure sandbox like Minecraft, it can still be hard to figure out exactly what to do next. That may be remedied as I write the Almanac - The Adventurer's Almanac, which I'll get into later - but for this session I'm expecting a lot of blank stares.


The thing to remember is that my goal during a first playtest is to seek information, not validation. If go in hoping for compliments I'll walk away disappointed and make everyone uncomfortable in the process. If I go in hoping for a guiding light, I'll walk away satisfied no matter what their reaction. Because even if they hate it from top to bottom, that's information I can use to make the game better.

Alright. Enough hand-wringing. Time to get fire working properly...

Tuesday, October 23, 2012

Tell a Story

Wouldn't you know it, only a few weeks in and I'm already lagging on the blog. Truth is I'm working on a piece about why you should embrace formulaic game mechanics, and it has to be perfect before I let anyone see it or the world will end, etc.

In the meantime, I've got a random programming tip: Tell a story with your code.

When you're working on shared code I actually don't recommend this. But if you're working alone, you can waste a lot of time grappling with those chunks of code you don't touch for months at a time - you know, the buried artifacts from your own past that you dust off and hold it up to the light and wonder whether you wrote them while blackout drunk.

So when code starts getting gnarly, I try to figure out a way to make it about a character trying to accomplish a specific goal, and either succeeding or failing. It's a great memory aid.

One class I just revisited this morning is supposed to update chunks of voxels using some weird proximity rules. It's complicated and huge. When I initially created it I called it a NodeProximityUpdater, and when I cracked it open a few weeks later I felt like I'd had a stroke. So I created this base class:

public class InfectorScript : NodeScript
     public virtual void TryToReawaken ( )
     public virtual void GoDormant ( )
     public virtual void SpreadTo (Node targetNode)
     public virtual bool FindPotentialHost (out Node targetNode)
     public virtual void AttemptToAlterHost ( )
     public virtual bool IsNodeSucceptible (Node targetNode)
     public virtual bool HasNodeSuccumbed (Node targetNode)
     public virtual bool IsNodeInfected (Node targetNode)
     public virtual void Die ( )

Flash forward another month - this time when I opened it up, I felt up to speed right away. Infector, okay - an infector infects things like a virus, altering hosts until they succumb to changes, then spreading to another potential host. When it can't find a host it goes dormant, then tries to reawaken once in a while. If it's without a host for too long, it dies. Got it.

All the gnarly complexity is still buried in there, but when you're reading the highlights of a story, you only need broad strokes to summon a complete memory, even if the particulars are complicated.

Wednesday, October 3, 2012


EDIT: The game has changed quite a bit since this ambitious start, so as you read this keep in mind that I'm describing a product that doesn't exist any more. When deadlines began to slip I ditched most of the tech I was working on and started over with an existing terrain engine.

Alright. Today I'm  going to spill the beans about the game I'm working on.

First, strap on your time travel helmets because it's time for a lengthy flashback.

(Spoiler: the game's called FRONTIERS, and if you don't care about origin stories, skip the orange.)

Still with me? Sweet.

Way back in the early 2000s when I was still in college, I wanted to create a particle physics based game engine. I dubbed it the PPBGE. (Anyone who knows me will tell you, names are not my strong point.)

I'll resist the temptation to get into the gory details, because there were only two bits that mattered. First, all geometry would be virtualized; world objects would be stored & manipulated as point clouds and rendered at run-time as isosurfaces. Second, every point in the cloud would be treated as a physics particle. I'll let your imagination run wild at that thought.

Cool story? Definitely. But plausible? I honestly didn't know. So before I wrote a single line of code I arranged to meet a half dozen physics professors and computer science professors at my university. During these meetings I quickly realized that I was out of my depth technically. I met some computers will never be fast enough resistance, which I knew was hooey, but all the same I was blown away by how complex even a simple physics engine could be. While most of the profs agreed that there was no reason in principle why a system like this couldn't work (a hollow concession but one I still took pride in) they also stressed that if it happened it would be the work of a team of dedicated experts, not the work of a lone art student moonlighting as a programmer. And I agreed. PPGBE was way above my pay grade.

But for all the resistance I met on the technical front, what sticks out to me is the funny looks I got when I tried to explain what kind of game I wanted to make with it.

"I want to create a virtual world where you're free to do whatever you want in a physically realistic environment."

"Okay, so what's the goal?"

"Just the same as it is in real life, you wander around and change things and try not to get killed while you're doing it. Like if you want to build a bridge across a ravine, you can gather materials and build one. But have to do it without falling into the ravine."

"Right but what's the winning condition?"

"There isn't one, it just keeps going, until you die or get bored."

"Why would anyone want to PLAY that?"

I couldn't explain why. I just did.

I'm not accusing them of being obtuse, because it sounds like some pretentious film student's original screenplay: "It's a movie about real life... nothing much happens, and then it's over." Wow nothing happens huh, sounds like a blast. So instead of pushing the issue I'd usually say "It could be a first person shooter," and BOOM, instantaneous understanding.

In any case, I shelved the project before it began, knowing it was beyond my capabilities.

Flash forward several years. Minecraft hits the virtual shelves. Suddenly it wasn't a chore to explain why I would want to play that kind of game. All I had to say was, "A Minecraft clone with physics." BOOM. Instantaneous understanding. I was free to stroll down the trail Notch blazed for the rest of us. (Side note: next post I'll be talking about the pros and cons of making a clone.)

Meanwhile, I'd learned the ropes on Unity while working as lead artist on another (yet-to-be-announced) indie game, and I realized that while not ideal, the engine had pretty much everything I needed to create my PPBGE, assuming a few compromises. Not only that, but my own skills had progressed to the point where I felt I could fill in the missing pieces on my own. So I started developing alongside my other projects about six months ago.

This game eventually developed into FRONTIERS*... and that brings us up to present day.

The focus of the game has tightened since those early days, and it has become a cross between Minecraft and The Oregeon Trail.

Your goal is simple: KEEP MOVING FORWARD.

Your destination: anywhere on the massive spherical world you inhabit, from the bottom of the ocean to the top of an active volcano. How you get to that destination is completely up to you. Climb over that mountain range, or dig under it. Swim through that river, or build a bridge and walk across it. Creep through that deadly jungle, or burn it to the ground.

Just don't die of dysentery. Or hunger. Or thirst. Or rockslides. Or wolves. Or exposure to the vacuum of space.

That's right - if you're really looking for a challenge, how about choosing a destination on the surface of the moon? Hell, why not the surface of another planet altogether? Think you have what it takes to build  a space elevator or a rocket ship? Go for it.

Hey, the game is called FRONTIERS - there's no way I'd leave out the final frontier.

That gives you an idea of the scope of the game. Now before you get too excited, understand that all this flexibility comes at a price. This is an indie title after all, and compromises are necessary, especially when it comes to graphics. But you can judge for yourself as I start posting screens and demos over the coming months.

More to come...

*My wife came up with this name, by the way. You don't even want to know what I was going to call it.

Saturday, September 22, 2012

Motivation is Steam Powered, Not Solar Powered

Do you ever try to solve a small problem and end up solving a big problem along the way? I love it when that happens.

About four months ago a cloud of doom fell on my project, one more potent than your typical moment of doubt. For over a week I felt this hunch that I'd never finish the game. I couldn't put my finger on why I felt that way, I just felt it, deep down in my bones, and it was sapping my will to continue.

I hate sourceless anxiety, so for the next few days I paid close attention to when the feeling would strike. I found it hit me hardest when dealing with to-do lists - writing them, checking off completed items, disposing of them - basically whenever I touched the wretched things.

Yeah. To-do lists. That threw me for a loop. It was like finding out that my shoes were to blame, or my stylus. They're so... benign.

But like any useful tool, to-do lists have rules of operation. And it turns out I was breaking them. Oh I followed the basic rules well enough, we all know them:

  • Don't list tasks unless they're specific and concrete
  • Don't list tasks you can't finish by the end of the day
  • Don't start working until your to-do list is finished
  • Don't stop working until you've finished every task

But there's another rule I didn't follow, a golden rule, and that's what summoned my cloud of doom:

  • When you've finished the tasks on your list, STOP WORKING.

I said STOP WORKING. Pencils down.

If you're like me, your first thought is 'Fuck off, you're crazy.' If you're motivated, you're supposed to keep working, right? You'd be a fool not to use that energy. Who knows if you'll feel the same way tomorrow? It's use it or lose it. For as long as I can remember, this is how I've conceptualized motivation - these days I call it solar-powered motivation. When the sun's out, keep going. Because you're SOL when it's not out, and you can't control the weather.

Well, it turns out this was my big problem. And thanks to my little to-do list problem, I was lucky enough to discover that motivation is steam powered, not solar powered.

Backing up a minute, how exactly was my doom cloud summoned? Well, how about some gratuitous visual aids to demonstrate?

Every night I went to sleep feeling like crap. And every morning it felt like I was waking up to a crime scene. All because I assumed it was 'wasteful' not to work when I felt motivated. This cycle chewed up any memory of what I'd accomplished during the day and left only the bitter aftertaste of what I hadn't accomplished while pressing forward without a to-do list. Over time that dark cloud started to infect the whole cycle.

When I realized what was happening, I decided to try stopping after my last task. I really didn't like the idea of wasting my motivation, but I figured I couldn't possibly make things worse, and something had to change.

This was the result:

It's full of hot air!

Ah. Much better. (Result is in no way exaggerated to support my point.)

The expected result was that I avoided going to bed in a funk. The unexpected result was that my motivation actually built up pressure during my downtime, and by the next morning I was rearing to go. Quite the opposite of use it or lose it - by letting the pressure build, I gained more momentum. Sort of like a steam engine, right?

That was four months ago. So far the result hasn't varied. Every time I've slipped and worked past my to-do list, I've regretted it. In contrast, I haven't once regretted stopping while I was ahead.

At this point you might be wondering why I bother with terms like steam powered and solar powered in the first place. If we're honest, the analogies are weak the artificial boundary between the two reeks of the oversimplified bullshit you find in self-help books. Try the Steam Powered Motivation™method for only three easy installments of $19.95 - learn to let go of your inner solar panel.

Never underestimate how useful a quick mantra can be when trying to break an old habit, even a silly one. Whenever I feel anxious at the thought of wasting my motivation by stopping - and I still do, every time, though it's getting easier - I need only repeat steam powered, not solar powered to remind myself of everything I just covered here. Sometimes the dumber part of your brain needs to literally be told what's happening before it will relax.

I can't believe I got this far without mentioning steampunk. Why not close with another gratuitious visual?

Next post: I'll actually tell you about the game I'm making. Honest.

Wednesday, September 19, 2012

It's Not Paranoia If You're Really Out to Get You

As mythical curses go, Lycanthropy shouldn't rate above an inconvenience. Ask anyone with half a brain how they'd deal with it, and they'll say the same thing: on the night of the full moon, go someplace isolated and chain yourself to a wall. Voila, problem solved.

Odysseus took the same approach when he encountered the sirens. He heard their call and knew he would be too weak to resist, so he ordered his men to tie him to a mast. He had the sense to treat his future self as an adversary to outwit, not an equal to bargain with.

When you can predict your behavior and you know your trigger, any weakness is manageable.

But first you have to admit that you're weak. Truly weak. It's harder than it sounds.

I work from home - VFX work, when I'm not chipping away at my game projects. Sometimes I'll work onsite for a few weeks, but otherwise I enjoy silence, privacy and freedom. I can wake up when I want and sleep when I want. I can watch a movie after breakfast, take a nap after lunch, then eat cake for dinner. I'm not gonna lie, it's pretty cool.

What do I do with all this freedom? I get up at 6 or 7 in the morning, eat breakfast, and start working. And I don't stop working until dinner (or cake), sometimes later if the job demands. It's a strict routine.

I learned the hard way that if I break routine, even for a day or two, it triggers my transformation. I become the Beast. You know the Beast. He's the lazy bastard that procrastinates on the internet. The one that can't stay focused. The one that nearly got me fired because he wouldn't stop playing Minecraft long enough to submit a shot that I should have finished the day before. (True story.) The lazy bastard doesn't give a hoot about my career or my dreams. Sometimes I can't believe we're related.

When I meet people who have a hard time working from home, it's usually for the same reason: they think they should be able to control their beast.

Note that I didn't say they think they can control their beast - they know they can't. Most are self-aware enough to list their faults with a laugh, stuff like:

  • I'm distractible
  • I have no self-discipline
  • I can't stop watching TV while I work
  • I can't stop browsing the internet while I work
  • I use friends as an excuse to avoid work
  • I can't stop eating cake for dinner

All problematic, sure, but they leave out the one that really counts:

  • I indulge in the fantasy that a good person can always control their behavior in the moment if they try hard enough.

Emphasis on fantasy.

This is why Lycanthropy is a curse to be feared and not merely an inconvenience. Some idiot always thinks they're strong enough to beat the full moon. Don't indulge in that fantasy. Save a peasant. Chain yourself up.

Are you distractible? Clear your working space of distractions. Are you using your friends as an excuse to avoid work? Tell them about your problem and ask them to help you stop. Are you browsing the internet? Unplug the internet. Do you need the internet for your job? Block your favorite sites.

Are you irritated with these suggestions yet? You should be - they're horribly condescending. I feel like telling myself to fuck off.

I will feel that irritation until the day I die, the way someone raised Catholic still fears hell long after becoming an atheist. I want to shout: If it were that simple, I'd be doing it already.

What makes it so complicated?

I'm always tempted to say 'the very qualities I'm trying to compensate for,' because come on, that's a great excuse. But it's rarely the case. I've witnessed this with my own eyes - a motivated person asks a circle of friends for solutions to these problems, and the instant someone drags out those chains, the willpower just drains out of their eyes. They were ready to do anything except take that critical step.

No. The truth is, it isn't complicated. It's painful.

Deep down, all the way down where you keep your most sacred beliefs about your value as a human being, you feel you shouldn't have to do chain yourself up. Maybe everyone but you, but not you. That's the fantasy. That deeper part of you believes using those chains admits of a weakness so profound that you could never laugh it off like you do the others. Oh, we can pretend to laugh it off - we'll joke around and say 'oh man, I just can't stop myself, ha ha, isn't that funny.' But to truly accept that you can't stop yourself, that no matter how hard you try you really can't stop, that stings. It really does.

I don't know where this fantasy of self control comes from, or what makes it so raw. I have my suspicions - maybe it originated with the Cartesian concept of the perfectly revealed mind. Or maybe the Christian concepts of sin and free will. Or maybe it's more universal. Who knows.

Whatever the cause, we flinch when it's threatened and fall back on the dull ache that we know: the paralysis and self-loathing of holding ourselves to a literally fantastical standard. A dull ache that will throb for the rest of your life if you let it.

This is getting a little dark. What were we talking about? Working from home?

Here's my point. Rip off the fantasy like a band-aid. Yes it hurts, but you can handle it. Stop thinking of yourself as one person who can control their behavior and start thinking of yourself as two: one who can, and the lazy beast.

Then stop depending on the beast to do the right thing, and stop beating yourself up when he doesn't. Because he can't, by definition. Just like our mythical werewolf, at the point when you're most in need of self-control, you have already lost whatever qualities formally enabled you to do control yourself. If this weren't the case, you wouldn't have a problem to begin with, right?


Do this and I promise you, all those irritating 'simple' solutions will start sounding a whole lot simpler.

Now. Time for cake.

Tuesday, September 18, 2012

Hopes and Fears - Why Bother?

All the indie gaming gurus say 'start a production blog, talk about your project, play the social game.' But honestly, why bother? I read blogs for insight and inspiration - the kind you get from developers who craft two amazing games in the time it takes me to learn one new API. I would describe many of these people as 'genius level.'

I would describe myself as 'unremarkable and occasionally competent.' Not the stuff blogs are made of, in other words. So I resisted.

But then I got to thinking.

For as long as I can remember, people have told me that I'm remarkably good at two things, both intimately related: staying motivated & hopeful, and articulating my anxieties & fears. And I found myself thinking, maybe I do have something to offer. Because while you may not see them listed on a CV, they're the most bountiful and universally applicable skills in my otherwise meager arsenal, and the root of every ounce of success that I can claim to enjoy.

So that's what this blog is going to be about: the hopes and fears of indie game development. And my sincere hope is that someone out there - someone who isn't a genius, someone who's struggling - will find some insight and inspiration in my words, and keep going.

Oh, and I'll be plugging the shit out of the game I'm working on.

But more on that later.