Friday, June 28, 2013

Indie Spotlight: Gunpoint

Indie Spotlight

I believe the best action games are built around a simple concept: Mario jumps, Sonic goes fast, Link explores, Cogs shoot aliens from behind cover, etcetera. Gunpoint's concept is: rewire things.

If that doesn't get you bristling with excitement, then you haven't played the game or seen the video!

From these simple concepts -- from one simple verb -- a huge array of gameplay possibilities can open up  if the game has been properly crafted. And that's the trick, isn't it? To make a structure that can withstand a hurricane of half-sleepy, over-caffeinated, or drunk gamers thrashing about with a controller, and yet retain its breezy accessibility, tempting them with One More Try?

Gunpoint accomplishes that. It gives you that tingly sensation you get when learning by trying something instinctual but untested... and succeeding. Then it does it over, and over, and over again, all wrapped in a lovely shell that you can pause and admire.

Give it a look. Three years of development have resulted in a success story, and that's always a sign of something great.

Thursday, June 27, 2013

Demo Progress

Dev Notes
It's been a steady march towards a feature complete demo, with the Friday goal still in reach!

  • The pipeline for creating tutorials has been streamlined, making them very easy to pump out. 
  • I've added the first magic spells: Enrage (move a single piece twice) and Transform (change a Pawn into anything else). Each spell "breaks" the game in a special way, so I've been altering the core logic to be a little more flexible. Having bespoke code for every single spell is a big no-no!
  • I also finished and tested the "demo flow," starting from the Title Screen all the way to "Thanks for Playing." This involved a lot of writing and re-writing, to make sure the text on screen was short and to the point! 
The two "big" tasks left on the plate are tutorials for the spells and a system which gathers survey information. After that, it's bug testing, scenario design, and polish! My aim is to send a private demo to certain folks next Friday, in anticipation of a wider launch after I process their feedback.

State Machines
I've been using State Machines to handle game states since my very first Unity project -- Ninja Baseball -- yet somehow I neglected to do so with Chess Heroes. Big mistake! There's nothing worse than having to manage 1000+ lines of code in your core logic file when there are a large number of states to enter and process, and then adding to that complexity. Yuck!

If Chess Heroes moves into "Full Production" status, I'll be overhauling it to use a state machine. It allows for the graceful addition and removal of states, and keeps logic in check when altering flow. Watch this space (all two of you!) for details on implementation.

Wednesday, June 26, 2013

Unity: Creating GUI Labels Over 3D Objects

The GUI commands built in to Unity are a fast, convenient way to present information on screen. One way to take full advantage of this is creating GUI elements that line up over 3D objects. In a standard FPS action game, for example, it could show you a monster's health and any effects that are currently active. Add a simple toggle (I prefer the question mark), and you have an easy way to turn on debug information in-game.

Here's a screenshot from Chess Heroes that shows it in action. What's shown is the type of piece and the ID of the player that owns it.

Here's the code:
bool showDebugInfoGUI;
float boxW = 150f;
float boxH = 20f;

void OnGUI ()
 if (showDebugInfoGUI)
  // As an example, this will show the name of each untagged gameobject over itself
  // But in general, this is not a good idea!
  foreach (GameObject targetObject in GameObject.FindGameObjectsWithTag("Untagged"))
   ShowObjectNameInGUIForObject (targetObject);

void ShowObjectNameInGUIForObject (GameObject targetObject)
 // Find the 2D position of the object using the main camera
 Vector2 boxPosition = Camera.main.WorldToScreenPoint(targetObject.transform.position);

 // "Flip" it into screen coordinates
 boxPosition.y = Screen.height - boxPosition.y;

 // Center the label over the coordinates
 boxPosition.x -= boxW * 0.5f;
 boxPosition.y -= boxH * 0.5f;

 // Draw the box label
 GUI.Box(new Rect(boxPosition.x, boxPosition.y, boxW, boxH),;

void Update ()
 // Toggle the labels using the forward slash key (the one with the question mark)
 // Note that this can't be put in OnGUI, as OnGUI runs twice each frame
 if (Input.GetKeyDown(KeyCode.Slash)) showDebugInfoGUI = !showDebugInfoGUI;

Updated September 10, 2013

Tuesday, June 25, 2013

Demo Plans! Office Space!

My goal is to have a feature-complete demo by Friday, so I can spend another week polishing it before pushing it out to "the wild." It's ambitious, but I really have to test this concept to see if it's viable. And the plan is to use Lumos to track metrics and answers to questions like "How much do you know about chess?"

With a playable game, survey results, and game data, I should have no trouble deciding whether to press on, or pull the plug.

In other news, I'm helping the folks at FertiLab clean out their new "thinkubator" space in downtown Eugene. Here's a shot of the central room from today:

Once their internet is up and running, this is where I'll be working (albeit in an office space you can't see from here). I'm looking forward to hosting some rad release parties and game jams up in there! w00t!

Monday, June 24, 2013

Juice it or lose it!

One of my favorite inspirational game development videos is this 15-minute nugget of goodness from Martin Jonasson and Petri Purho. In it, they take a bland Breakout clone and turn it into something that has an amazing... feel... to it. (I don't know if there's a word that captures what I'm talking about!)

I often cobble together game designs that have an intrinsic appeal, but the delight a player might get is buried beneath layers of abstraction, and useful metaphorical handles are obscured or non-existent.

When I'm at that point -- the game is good but doesn't sell itself -- I watch this video and smile at the huge number of ways a simple concept can be made Awesome.

For lots of related links, including the source code used on stage, check out the article on Rock Paper Shotgun.

And watch the video.

Friday, June 21, 2013

Indie Spotlight: Moments of Reflection

Steven An is a programmer working at Unknown Worlds, the developers of Natural Selection 2. But on his own time, he designs fantastic little games that turn a simple, original idea into a polished product. Like this one:

You might be thinking: "nice art, graph paper... bunny person? what kind of game is this?" Observe:

The right half of the screen is a reflection of the left. Before the reflection was turned on, the carrot couldn't be reached, as it was in non-accessible space. Now, with the playable space reflected, the carrot can be crunched!

Simple, right? But that's the trick, isn't it? Finding an original, simple concept is no easy task!

As you progress, you find the angle of reflection can be rotated eight ways, and clicking makes it permanent. Add a resource that allows more reflections, some key and lock puzzles, light platforming, and you get a wonderfully deep puzzler.

It's not often you can say "I've never seen anything like that before," but here's your chance. Revel in the sensation of novel cranial activity for a while.

Play Moments of Reflection on Kongregate

You should also try his game Beat Juice Radio

Thursday, June 20, 2013

Dev Notes: Week 3

It's been another great week! There's progress every day, summer is coming to Oregon, and... er... I have no idea what the game is going to look like!

Honestly, this kind of honesty gets me in trouble sometimes, but when space wayfarers from the year 45x923 (Zircon era) pass over these bits with their data scanners, they'll nod and say, "that boy spoke some truth!"

Yes. In the Zircon era, accents that echo the American southeast are all the rage.

But really, I've been getting consistent feedback that takes two forms: "Wow, yeah, you need to drop the chess thing pronto. Very confusing" and "Wow, yeah! This looks great! I'd love to play a chess variant like this!"

There's not a lot of wiggle room there. It's either ditch the chess concept, which is the "factor x" that makes my humble tactics game stand out conceptually, or keep it and risk alienating a huge swath of potential customers. Will the game still be called Chess Heroes when it's released? Watch this space!

New Features

  • A progression system is mostly intact: title, zone, area, scenario, handling player progression, saving profile data, etc. And the way I'm organizing the files is slowly becoming set in stone. I usually spend way too much time in this area, and sometimes make the wrong guess, so now it's functionality first, dev-accessibility later.
  • The game knows if it's in Demo mode or not, knows if it's in Debug mode or not. There's alternate progression models for Demo and special scripts for debug.
  • You can lose if an enemy piece reaches your home row, and win if you reach their home row.
  • There's a nifty help system for pieces that zooms in on the piece in question and brings up a diagram showing how the piece can move. It does this automatically when you load a scenario with a new piece or ability.
  • The AI will signal when it has no moves (which is possible if it only has pawns left) and pass the turn back to the player.
  • Pieces topple over and fade when captured. I love that it took all of two lines to make the toppling happen: 1. add rigidbody 2. rigidbody kick
  • New particles go from a sacrificed pawn to its "taker." This effect needs to sell better, but it's a start.
Open Questions
  • What's the look and feel I'm after? What suits the game best? Can it stand on its own as a casual turn-based tactics game? Scratch that... can it stand out as a casual turn-based tactics game? I have to come up with a hook beyond "it's cleverly designed," I think.

Wednesday, June 19, 2013

Unity: Making Meshes Fade Away

To make a model disappear in Unity over time, you lower the alpha of its materials until it reaches zero. ("alpha" is industry speak for transparency. I don't know why.)

The default material does not have an alpha channel, so set up a material that uses the Transparent/Diffuse shader.

For performance reasons, don't use a material with a Transparent/Diffuse shader unless you are fading it out. The GPU must make additional calculations for each pixel with alpha -- even if it's opaque!

Once the mesh has the right material, you can fade it out with this code:

float fadeTimerMax = 1;
float fadeTimer = 1;

void Update () 
 // Decrement the timer
 fadeTimer -= Time.deltaTime;

 // If the timer is less than or equal to zero, destroy the object
 if (fadeTimer <= 0)
  Destroy (gameObject);
 // Otherwise, adjust transparency
  // Get a normalized percentage value based on the fade timer
  float percentOpaque = fadeTimer/fadeTimerMax; 

  // Update the alpha of each renderer material on the object
  foreach (Material mat in renderer.materials)
   Color color = mat.color;
   color.a = percentOpaque;
   mat.color = color;

Grand Vision or Foolish Quest?

A Legendary Encounter Goes Badly

I had the opportune chance to sit down with an industry legend today and show him Chess Heroes.

It did not go well.

First, he correctly assumed I chose chess because the pieces don't need amazing art and animation. So I felt he and I were on the same page for a bit. Then he hit me with the same argument I often use to take down crazy mashups: the Venn diagram intersection.

What that means is one "idea" has a group of fans, and another "idea" has its own group. People intuit that putting the ideas together means getting both groups of people, when in fact you're only getting the intersection of the two. And in the case of Chess Heroes, he felt the slice was infinitesimally small.

So, one reason I chose chess was to lower the barrier to entry to a turn-based strategy game. I'd then layer mechanics on top of that to increase depth for the game I was trying to make.

His responses to that were:

  1. People who don't play chess will be put off because chess is intimidating.
  2. People who do play chess will be upset that I'm trying to "improve" it.
  3. You can't really deepen a game that's been unchanged for hundreds of years.
  4. Therefore, the game concept is unviable and not worth pursuing.
This left me in a precarious situation. I respected his opinion and knew that, from a certain perspective, it was correct. At the same time, I've received thrilling feedback on the pre-alpha build, and deeply believe it can succeed given another perspective.

The Other Perspective

That "other perspective" is fairly straightforward: As a game designer who lives and breathes it as an art, I'm experimenting with the playspace defined by chess. I'm taking it back to its roots as a strategy wargame, then bringing it up a separate evolutionary branch that sprouted right around the time Final Fantasy Tactics came into being.

I'm not trying to appeal to hardcore chess players. They are not my target market. Nor am I trying to improve chess. I'm playing around with the rules and making something different. Is it better? That's not for me to say. But it's interesting, and it's fun, and that's what I'm all about.

Now the question is: am I right? Is this a good idea that I have, and I'm acting the part of the visionary before his time? Or is it a grandiose fallacy, and I'm playing the fool ignoring his naysayers?

Time will tell. But I have nothing to lose by finishing it and releasing it. At the end of our lives, the things we regret most are not the mistakes we make, but the chances we didn't take. Chess Heroes is one of those chances. Let's go.

Tuesday, June 4, 2013

Pre Pre Pre Alpha

By creating a game built around chess, I have a very clear picture of what basic functionality should look like: namely, a reproduction of the game of chess.

After a few days, I have just that!

The models were created in a few hours in Blender, and the woodgrain-style board was directly inspired by Jeff Swenty's work as a hand-carved wooden-pixel 8-bit sculptor.

The camera angle was inspired by this photograph:

In terms of functionality, it's a two-player chess game. You can choose a piece, then move or capture according to the rules, with possible moves highlighted to make it easy on newcomers. It also hews closer to the Japanese tactical RPG interface I'm going for.

There's also spec lighting on everything, but you can't really tell unless you orbit the camera. I'm going to have to work that in somehow...

Monday, June 3, 2013


Welcome to the Oreganik Dev Blog, home of a one-man game studio in Eugene, Oregon which, legally speaking, is Oreganik LLC. My name is Ted Brown, and I'm the janitor. Also: game designer and Unity programmer. I've been working on a game called Chess Heroes since my contract with Zynga expired at the end of May 2013.

What is Chess Heroes?
Glad you asked, internet friend! Chess Heroes is a turn-based strategy game that takes chess pieces off the kitchen table, and puts them on the battlefield. Journey through a colorful kingdom built out of paper, conquer a range of tactical scenarios, unlock special abilities for your troops, and learn magic spells that can completely break the game... in your favor! Of course, you'll need all the help you can get when mysterious forces are turning your own troops against you!

My goal with Chess Heroes is to achieve a lifelong dream: sustainable independent game development. I have a family to feed and a mortgage to pay, so this is a very dear dream indeed! Should it fail, I'll probably have to take a job in a different city, robbing us of the roots we've given up so much to grow here.

But enough of those dark clouds. Let's celebrate a summer of game development!