The Animal Farm

June 27th, 2010

Designing an XNA Art Build System

Introduction
If your project’s artists have to open Visual Studio to work, you’ve failed them. If they have to come to you to get every piece of art implemented, you’ve failed them worse.

The primary driving motivator behind every engineering decision I’ve made for Iron Heinrich is thus: I want to allow the artist (Nate) to do awesome things. Each barrier in his way is a high priority for me.

There are plenty of barriers, and we’re working on addressing a lot of them. The purpose of this post in particular is the art build system. The system set in place so that when an artist does something, after he’s modified the data, he can see everything running.

The Goals
The current XNA content workflow is pretty much the following:
(1) Start Visual Studio
(2) Add your content to the Content project
(3) Set any necessary importers or content processors
(4) Build and wonder why you got all those errors
(5) Fix up those errors
(6) Build and run

Which isn’t particularly good for an artist. It’s cumbersome. It’s error-pone. It requires technical knowledge. Here’s the ideal:
(1) Build and run.

A lofty goal, but can it be done? It’s not entirely trivial, but I do believe it can.

Changing the Art Build Step
The first thing we need to do is take Visual Studio out of the equation. Artists shouldn’t need to know about IDEs or content projects or importers. Artists should be able to double-click on a file and watch it go. This is an art build step, and a good art build step hides all the ugly details from the artist.

How is this done with XNA? Here’s an outline of the current process we’re using now:
(1) The Content directory is crawled by a program. Each file is evaluated against an Art Manifest which details how that file should get built. The artist doesn’t need to know about the Art Manifest.

(2) Based on the above, a new Content project file gets generated that the XNA build system can interpret. This file is actually a mashup of a Template file (which contains all the standard stuff that goes in a Content project) and the new data determined by the crawler/manifest.

(3) msbuild is run on the new Content project, which performs the necessary art build.

All this is fairly simple. The trick is in the details - the details specified by the Art Manifest.

The Art Manifest
Each type of file has a few things associated with it:
(1) An importer & exporter
(2) An asset name
(3) Various parameters

It’s not enough to specify these once per file type and be done with it. That would lead to a broken build within minutes. Consider:

Level1.x is a level file. It uses an exporter that spits out its vertices for collision purposes.
Char1.x is a character. It uses an exporter that spits out a skeleton for animation.

The same “type” of file, but they meet radically different requirements. The art system has to manage that.

The Iron Heinrich build system specifies a hierarchy, where each part of the hierarchy takes precedence over the previous:
(1) Default (Per File Type) - If a file of this type is encountered, this is how it will be built by default

(2) Group (Per Directory) - Build information can be set at the directory level such that if a file is in the directory, the ‘Default’ no longer applies. For instance, all levels may go in a group “Levels” and will be built specially.

(3) Override (Per File) - Specific files have specific requirements regardless of where they are.

(4) Ignore (Per File) - Sometimes you just don’t want a file in the Content directory to get built. For example, we definitely want the crawler to ignore Content.contentproj.

I as a programmer handle that - I setup the manifest, specify the importers, exporters, etc, and the artist almost never has to worry about it. Sometimes he may need to add something to the Ignore list or even the Override list, but 99% of the time he just puts his assets in place, executes a script, and runs the program.

Final Thoughts
The system isn’t perfect. Some errors will still require some technical knowledge, and the manifest is more cumbersome to make small changes to than settings within Visual Studio. Comparatively, though, I think it allows for a much smoother workflow, which is vital to artists.

This is all overkill for small projects, but for larger projects (and especially projects which are largely data driven), it can be pretty helpful. It also sets up the framework for a rapid iteration scheme which I’ll talk about… if/when I ever implement it.

Not nearly as complex as some of the build systems I’ve worked with.

June 20th, 2010

See the Light is OUT!

The Android edition of See the Light was released late last night. There’s a paid version and a free version for the cheaper among you. If you have an Android phone, go check it out!

Unfortunately, I can’t find a way to link to an Android app, so you’ll just have find it the hard way.

Super special thanks to Ricky. I don’t think he knew what he was getting into when he casually offered to try the game out, but he went above and beyond with his testing. Were it not for him, the game would’ve likely been a buggy mess.

I’m sorry, but the display issue is still there…

May 29th, 2010

Book Review! : Blink by Malcolm Gladwell

About a month ago I moved into the new apartment and Laura purchased a few books; of the three that she acquired, one did not appeal at all, one was by Sarah Silverman and thus appealed negatively, and one was mildly interesting. I decided to read the most interesting of the three: Blink by Malcolm Gladwell.

A combination research, case studies, interpretation, and original thoughts, Blink’s main premise is thus: the brain does a lot of stuff subconsciously. Some of those things, ala split-second decision making, it can do really well. In certain instances the rapid thought processes can outperform calculated decision making. Moreover, a lot of problems that seem very complex on the outside - for instance determining whether a marriage will succeed or a doctor will be sued for malpractice - can be determined based on an incredibly small amount of data.

Unfortunately, the book spends about 50-80 pages establishing those points and then the next ~150 floundering, repeating itself, and making suspect connections. The first few research endeavors presented are very interesting, but when the author starts to deviate from those or is left to his own evaluations of events, he comes up short.

A quick example: In his discussion of the medical malpractice study, Malcolm manages to undermine his entire focus in the final sentence.

The text quite often goes back to the early studies, sometimes drawing them in where they’re only tangentially connected to the point, sometimes trying to show things through them that isn’t quite appropriate, and sometimes just brazenly repeating things over and over. At best it’s unnecessary padding; at worst it’s misleading.

The final 1/3rd of the book is especially painful; the author seemed to have lost his point by then and was presenting case studies, forcing in his own ideas and hoping the previous text would back up those interpretations. He all but abandons research, instead relying on his own interpretations to carry him, but he never lives up to the actual studies he presented earlier.

I can’t recommend this book. I was excited about it when I was starting, and it created some interesting talking points with coworkers, but after that it left me unimpressed. I’d suggest finding a researcher in the field to point to some good academic articles instead.

It ends in QED. You can’t argue with math.

March 20th, 2010

Reviews for Zach

Zach asked me to fulfill my reviewing obligations, and although he hasn’t visited me once since we parted, citing lamer and lamer excuses each time (”I’m getting married” or “I just bought a house”), I will oblige. With not one but two reviews - and one of those reviews will be a sweeping generalization of multiple games at the same time.

First the generalized review:
While trying to push Word Duelist out the door, I had the pleasure of reviewing something like 20+ games. Plus I’ve playtested quite a number. I won’t go into each game individually - I don’t want to talk about games that aren’t out yet, nor do I have the time to touch on each game individually - but I will give you the general state of XBLIG: Unfortunate.

With something like 18 different variations of Blackjack, 5 massage apps, a host of Avatar games that are little more than screensavers, and a series of games that literally just show you a screen and ask you to pass the game pad around, the volume of junk is absurd. There are gems - beautiful gems that deserve your time - but wading through the rubbish is an exercise in pain.

Here are some of the gems to watch out for: Rotor’scope, Mega Monster Madness, Dungeon Adventure, Missing Reel, Zombie Armageddon.

One day I’m going to write up a nasty attack on $1 games, Race to the Bottom economics, and voluntary peer reviewing, and by the end of it I think I’ll hurt even my own feelings.

And Now a Resonance of Fate Review
I’m only about six hours deep into Resonance of Fate (RoF), so I can’t really talk about the deeper story, but I feel like I have enough feeling for the battle system and game flow to talk about it.

First an overview: RoF is a JRPG that came out a week after FF13. It takes place in a futuristic dystopia where mankind lives in a giant tower, and the cast features three bounty hunters taking on missions to survive. None of this should be new if you’ve played games since the year 2000.

Where RoF breaks the mold is that it throws away conventional battle mechanics for something much more stylized - your characters are John Woo-inspired gunslingers, jumping around the battlefield and over enemies, hiding behind cover, rolling and dodging and darting around the map as they fire submachines or dual pistols into their enemies.

There’s a lot going on in the battle system, and you’re not gently nudged into this - the game has a monolithic battle tutorial in the beginning which shows you everything you’ll be doing from start to finish. Luckily it’s mostly intuitive - the tutorial makes it seem more daunting than it is, but a lot of things just happen fluidly, and you have plenty of time to react.

Which is not to say that battle is easy, because it isn’t. It’s actually very, very hard. Mismanage for a moment, and you can get snubbed out quickly. So while getting the hang of battle isn’t too bad, getting the hang of battling well is a job in itself. But it’s a rewarding job.

Outside of battle, you’re greeted with at times a very linear and at others a very non-linear game, and I think this game hits the perfect balance. There’s a main hub town where you accept missions - one story mission per chapter and a host of optional side missions. You have your choice of how your approach things.

When you’re on a mission, the mission is generally pretty linear. Dungeon design is light - often a line of connected rooms, where each room has a new battle. And you know what? I like this. Finally a game that realizes that I don’t need to explore every nook, that wasting my time with worthless rooms is really just wasting my time, that there is no shame in going from Point A - Point B with each point in between punctuated with something interesting.

The game also introduces a lot of nifty things, like an interesting weapon customization system that semi-mirrors what I had planned for Steam Powered.

In short, it’s a pretty fun game, and I’ll probably be playing it through to completion.

But my battery is about to die, so I’d better cut this off.

Dont’ make passes.

January 24th, 2010

Word Duelist Back in Review

The seven day jail has elapsed, and as far as I can tell Word Duelist is bug free - it’s been tested and retested and has had other sets of eyes on it. So it’s back in Review. The list is short this time around, so hopefully it won’t take a full two weeks like both my previous experiences, but who knows.

As for the next project: I’m hoping to make an announcement soon. Its release is still well off (and to be quite honest, uncertain), but there’s been enough progress on it that a pretty teaser screenshot might be coming your way in the next couple weeks.

All they want to do is talk about words and word-related things. Dictionaries and stuff.

November 30th, 2009

Game Polish 4: Fonts

Anyone familiar with XNA games knows Kootenay. It’s the default sprite font, and it’s widespread. And it’s ugly and overused.

I know nothing about font selection. I’m not a multimedia designer, I don’t make web pages or advertisements for a living. I wouldn’t be able to tell Times New Roman from Arial by sight. So obviously I’m ill prepared to talk about how to pick a good font. Find someone else to ask or guess wildly like I do.

I can, however, point to a few places to find fonts. urbanfonts is my first point of contact. It has a lot of free stuff and not horrible search capacity. dafont is also a site I look to. And there’s FontSpace.

Of course, there’s one thing you have to be very careful of when using a font: fonts are subject to copyright like anything else. Many of the fonts you’ll find are marked for personal use only. Some don’t even come with a license, and those are the ones I immediately delete to stay safe. It’s important to read those notices and not just trust that a site claiming free fonts actually has free free fonts.

Free as in beer or free as in speech?

October 30th, 2009

Wal-Mart Starts Selling Coffins

“But an industry spokesman said it was not gravely concerned about Wal-Mart’s move because he said the firm could not offer bereaved families the human touch.”

Bless BBC News.

July 12th, 2009

Board Game Extravaganza

I was living on a budget, restricting my purchases and making reasonable decisions. Then the desire to play board games hit me, and I went on a spree, devouring niche stores in my wake. Here’s what I’ve got and what I have to say and if you don’t like it you can shut up:

Carcassonne. One of the classics, I hear. I hear this among geeks, and they don’t really get to define ‘classic’ in any meaningful definition of the word, but still. Some people like it. It’s a tile placement game where you try to get points by strategic placement of units and get in the way of your opponent getting points. It’s an extremely simple game to learn and play, and it’s really pretty fun even with only two people.

Catan. Another classic. It’s a game about trading resources and building up an empire. Slightly harder to learn than Carcassonne, but not really. This one almost requires four people to be appealing, but with the right group it’s fantastic.

Zombies!!!. I’d never heard of this, but it had three exclamations in the title, so my hand was forced. It’s another tile placement game, where the goal is to either escape a zombie hoard or murder a ton of zombies. A little more complicated to learn than Carcassonne but perhaps not as deep strategically? It’s fast and fun. I’m not sure. It can be played well with two but I think will scale up well.

Escalation. I haven’t tried it yet, but from reading over the rules this one actually seems disappointing. Just a superficially simple card game. Place some cards of a certain value and when you can’t hit a value, take some cards while trying to be the person that ends up with the fewest. Honestly, I’d rather play Uno.

Grave Robbers II: Skippy’s Revenge. This is part of the B-Movie Card Game series, which is a ton of fun. The premise is to build a movie by placing cast, locations, props, effects, etc. It’s more fun if players narrate the movie while playing the cards. Gameplay wise, the mechanics seem a bit lopsided, but the game is more about the social experience than dominating opponents.

Dominion. One of my favorite card games. It’s more of a deck-building game - you purchase more cards as you play and try to be the one who’s purchased the most points by the end. That description doesn’t really do it justice; the game has a breadth of strategy and is extremely fast paced.

That’s all, and it’s all I’m going to be purchasing for a while even though I’d like to add Race for the Galaxy to my collection. All the games are relatively fast, taking less than an hour (sometimes a little more depending on conversations and number of players and such). I don’t have much of a stomach for the longer Arkham style games. Still need more people to play these games with, but I’m hoping that will come with time.

You stole my city!

June 22nd, 2009

Bread Bowls

I just tried Domino’s bread bowl pasta - the Italian Sausage Marinara if you want details. I can’t really recommend them. The pasta was cooked awkwardly, and in general it was just bland. This comes as a mild surprise, since Domino’s cheese bread is heavenly.

That’s all. An entire post about my dinner. Get over it.

Fire woman you’re to blame.

February 23rd, 2009

Hilarity Ensues

Media to talk about, and fast before a meeting starts:

Y: The Last Man. Awesome graphic novel. About, well, the last man on Earth (all the women are still around, mind you). Lots of fun events, and the main character is an escape artist - how can you not love magicians?

Coupling. Hilarious. It’s akin to a British version of Friends, but more direct and with better humor at times. There are a few moments that had me doubled over in laughter.

Secretary. Weird movie. I believe Ricky said that he wanted to do everything in that movie to Maggie Gyllenhall. Ricky is a Monster with a capital M. It’s not a bad movie, but don’t watch it with your family or small children or any women you want to talk to you again.

Interview with a Vampire. Still one of the best vampire movies around. Upon rewatching, it’s clear that at times the acting leaves something to be desired, but that’s OK.

Supermarket. Also a pretty cool graphic novel. Very short (one volume), very simple, and very stylish. It’s not expensive and doesn’t involve the investment Y: The Last Man does. It’s also recommended by one of the more pleasant clerks in the comic shop, so take that for what it’s worth. A lot.

Fin!

A lack of realistic gore is not a sensible criticism for Chess.