Wednesday, April 17, 2013

Screenshot Time!

Expect a gameplay video soon. But until then I'll post screenshots every now and then.
(Click to embiggen)

Wednesday, April 10, 2013

FAILURE DRAMA

Ugh. This is the painful part of the blog thing. Sure I get to share my successes with an enraptured audience of dozens, and that's fun. But I'm also committed to sharing my failures.

And fail I have. All bullshit aside nobody would mistake FRONTIERS for a releasable product right now. My deadline has come and gone. Now I get to choose whether to stick to my guns and shelve the game like I threatened to back in dick-swinging March or wuss out and pretend I never made such a threat.

Okay, that's a false dilemma. A third option is to reflect on why I failed, admit I made mistakes, resolve not to make those mistakes again and remain committed to finishing the game.

Spoiler: I'm not shelving the game. As much as I'd love to be a badass and walk away, the pain of shelving it would be too much.

Missing this deadline was rough. It may be hard to see from the outside, because deadlines seem so arbitrary when they're self-imposed. But this one wasn't. It was a measured calculation. It was based on objective self-appraisal. Failing means I overestimated myself in skill or self-honesty or both.

Before I go on, yes, this is a pity party. None of this wailing and drama really helps anything. But fuck it, it's *my* pity party and I'll boo hoo hoo if I want to. If this post reads like a eulogy it's because I feel like part of me died when I missed that deadline.

I'm not even kidding.

When you try something new you have to pretend you can do it or you'd never start. 'Yeah sure I can *totally* make a game even though I never have before.' You're like a kid outlining yourself on the wall, then drawing the outline you *think* you'll fill 10 years from now. Unless you're really morbid you're going to assume you'll grow a couple of inches and keep all your limbs.

When I started this project I drew a mental outline of myself as a game developer, hoping that I would grow to fill it. It wasn't overly ambitious, but it did assume a full set of limbs. As I worked I'd fill in bits of the outline with real observations - hey, it looks like I *am* pragmatic when it comes to design and hey, it looks like I *can* make art assets quickly. Go me! It was a promising start. So promising (even intoxicating) that I stopped wondering whether I'd grow to fill this outline and started assuming I would.

That was cocky. I can see that now. I treated my goal like a reality. Doing that is like using your '10-years-from-now' outline to buy all your clothes in advance. They ain't gonna fit right.

This deadline didn't fit right. In fact very little about the past two or three months has fit right. I'm not the game developer I sincerely believed I was. It's like looking down and realizing I've been missing a leg this whole time. Fuck! No wonder these pants were loose!

So this is me tossing a rose on that imagined self's coffin and saying some final words before burying it in the ground. Goodbye. It was nice thinking I knew you, but I've got to move on. Cue rain machine and sad folk song as I walk away in slow motion, etc.

Okay. Moving on.

Wednesday, March 6, 2013

Deadlines

Last post: Dec 31st, 2012. What the hell happened?

Two things. First, my wife & I moved into our first house - that's part of what motivated my self-imposed Christmas deadline, knowing that I'd lose most of January to the move - and second, I got busy on the newer 'leaner' Frontiers.

Last time I posted I said I achieved my goal of a playable game by Christmas, but not without cost. Remember how Frontiers started as a Minecraft clone with a dynamic terrain engine, with survival elements built on top? Well around November I realized that if I was going to make this thing playable by Christmas, one of two things had to go - the survival elements, or the sandbox elements. Yeah, sucks huh. After a few tough nights of waffling I decided to ditch the sandbox elements. I salvaged everything else I could - the interface, interactivity engine, survival engine and art - and started over from scratch. The rest - eight painful months of development and an engine that was 80% there - I tossed in the bin.

Why not just keep working on the terrain engine if I was 80% there? Because I had a deadline. And if I didn't make that deadline I'd sworn to shelve the game permanently. Yeah, it was painful. I still feel sick when I think about how much time I spent on something people may never see. But when the alternative was giving up entirely, the choice was clear.

This is why deadlines matter - they motivate the really tough decision. Of course, you have to take your deadlines seriously, and when you're a one man shop that means taking yourself seriously. I knew I wasn't playing around - I really meant to drop the whole project if I didn't have a playable game by Christmas. If I thought for an instant that I'd let myself off the hook, I'd still be tweaking the terrain engine for an unplayable game.

My next deadline is in March- my goal is to have a releasable game by then. Not perfectly balanced, not totally finished, but releasable. If I can't pull that off, I'm shelving it.

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.

*sigh*

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

FRONTIERS

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.