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), targetObject.name);
}

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.