Team at Austin Game Jam

January 30, 2010
by Joey

Coming to you live on the ground at the Austin location of the Global Game Jam!

Those of us on the team who aren’t running the jam are currently reworking Agonoid, now with version control via Google Code! This is something we’ve struggled to implement in our games during our last two projects (eek!) but we’ve finally figured it out.

Coming Soon: the Flash version of Agonoid, which means you’ll be able to play it right off the site!

Our friends from the Guildhall

Team Back To School

August 31, 2009
by Joey

The development team is back in school for the Fall. For many of our members this is the beginning of their final year. But because of this academic digression our game production will be much reduced. However, you can still expect the finished version of Agonoid to be released very soon now.

News Levels for Agonoid

July 25, 2009
by Joey

But wait, weren’t we working on our mystery game? Yes, the mystery game was the main project of the summer, but focus has shifted for the time being on to our previous game, Agonoid, for a couple of reasons.

The main one is that the mystery game ran into a challenge that will take some design work to figure out. We’ve got a sharp engine, but the content of the game is currently lacking. Instead of trying to force ideas on how to move forward with the design, we decided to finish a game that has all it’s design questions already answered. This way we can spend the school year fiddling around with the design for our mystery game but also have a game done by the end of the summer.

Enter the new content for Agonoid. Here are some new levels for our new space shooter. The levels will represent different worlds the player can choose to conquer through our new “World” mode. Pictured below are the red aftermath, the murky green gas giant, and homeworld, unofficial titles for the different worlds. We should have about six by release.

New Worlds

Algorithm Challenge!

July 10, 2009
by Joey

In our latest mystery game the player will use Agents, individual governing “heroes”, to enact their plans for world domination. The Agents will lead the people of your empire, they will convert the benighted heathens (through economic enticement or religious fervor), and they will defend your name across the land. But what happens when two Agents meet?

Enter the Challenge Mode. In Challenge Mode two opposing Agents will attempt to overcome each other through their brute charisma, cunning, and blind devotion to you, their ruler. So how do we resolve these conflicts?

While the rest of the team works on allowing our game to actually run, that is resolving core game mechanics and overcoming nasty technical issues, I’ve been messing around with how to answer the above question. I thought I’d take you through how one goes about doing something like this and give a little insight into how math can be fun! (really!)

So, when figuring out which Agent is “better” we must first take inventory of what we have to work with. In the case of our Agents, it’s not hard, because Agents only have two attributes, Economic Skill and Religious Skill. Now there a lot of things you can do with two numbers, but in the case of a game it’s usually wise to match your numbers with some sort of story. For example, we could take Religious Skill, raise it to the power of Pi, and then add Economic Skill factorial. Now we could do that, but what the hell would that amount to? And what sort of story would match such a math circus?

Instead, we decided to create the story that the most “well-rounded” Agent is the superior Agent. In other words, an Agent with comparable Economic Skill and Religious Skill will be more powerful than an Agent heavy in one area and weak in another.

Consider the four Agents below:

Agent Name Bob Bill John Jim
Religious Skill 11 15 21 5
Economic Skill 9 5 2 6

Bob would beat Bill because Bob is a more evenly balanced Agent. However, consider our next two Agents, Jim and John. John is clearly a more skilled Agent, should he be beat out by some noob like Jim? No, we answered, no he shouldn’t. To remedy this problem, we introduced the concept of level. Level is simply the sum of an Agent’s skill points divided by 3 (rounded down). In the above example, Jim would be level 3, John would be level 7. Though Jim may be more evenly developed, John is a beast and should beat Jim due to his age and experience. Now that we’ve got the concept, or story, we want our Agent Challenges to follow, we need to find an algorithm that will accurately express it.

Let’s break the algorithm down into parts. First we want to check for a healthy balance. To do this we’ll divide. Take the lower of the two skills and divide it by the higher. If the numbers are close, you should come in somewhere near 1, if not, you’ll have a small fraction. Next, to find just how far you were from a perfect balance, subtract 1.

Once this is done you’ll have a fraction. If you were balanced, you’re close to 0, if not, you’re closer to 1. Now it’s time to compensate for the Agent’s level. To do this we subtract half the level of the Agent. If the final number is a larger negative number, you come out on top. If it’s a smaller negative number, you have been overcome. This isn’t the only algorithm for determining the worth of your Agents in a challenge, but it produces a clean and accurate comparison with fairly nice numbers. Here is the final beta algorithm in the Challenge method for your viewing pleasure:

static String Challenge(Agent one, Agent two)

{

String lowest;

double oneFigure = Math.Abs((lesserSkill(one.getESkill(), one.getRSkill()) / greaterSkill(one.getESkill(), one.getRSkill())) - 1) - (one.getLevel() * .5);


double twoFigure = Math.Abs((lesserSkill(two.getESkill(), two.getRSkill()) / greaterSkill(two.getESkill(), two.getRSkill())) - 1) - (two.getLevel() * .5);


decimal oneFigureFinal = decimal.Round((decimal)oneFigure, 2);

decimal twoFigureFinal = decimal.Round((decimal)twoFigure, 2);

if (oneFigure < twoFigure)

lowest = one.getName();

else

lowest = two.getName();

return (one.getName() + ": " + oneFigureFinal + ", " + two.getName() + ": " + twoFigureFinal + "\n" + "Winner is " + lowest);

}

Educational Progress Rant

July 4, 2009
by James

Work on our mysterious summer project is progressing well.  Despite just working (most) weekends, we are making a lot of headway.  If I had to classify the state of the game, I’d say it’s in early Alpha, since we have the underlying framework in place, and a few basic features working as a proof-of-concept.

But what I most want to talk about here is the immense importance proper design is to large programs such as this.  Most programmers, when you start out in college or high school, aren’t concerned so much with making “pretty” programs that can be easily understood as you are with just getting the task done with as little effort as possible (yeah, I was there too).  But when you set foot into the big, scary world of actual software, things are very different.  Most of the time you aren’t making programs that do some tricky mathematic operations that have very rudimentary interfaces (has anyone out there not done something with the Fibonacci series?), but quite the opposite.  You’re doing a lot of relatively simple underlying computation with a huge user interface covering it.  And if you’ve ever had to code UI, you know it’s a complete mess.

You can see where I’m going with this.  Our game is a mess.  Or at least, it was a mess until this weekend, when we are now starting to see the importance of design patterns.  If you’ve never heard that phrase before (and plan to program for a living), look it up, buy a book on Software Engineering, take a class on it if you can, because you will need it.  A pattern is bascially just an underlying scheme for organizing your code.  You don’t add anything extra to what you have to use it, you just adopt it as the style you’re going to use.  Patterns like the ever-handy MVC are used to help you make sense of your code.  Those little programs you made for class aren’t complicated enough to need good design like this, but if you want to make that game you always dreamed of, it’s a must.

Like in our case, we saw no reason not to lump UI rendering elements, and their underlying logic together all in the same class.  Wrong.  Sure you always think you’ll understand every line you write at any point in time, but it doesn’t take long (about 3 weeks) before it gets hairy.  So now we’re migrating everything but UI rendering from our screen class into a controller class.  But you, dear readers, can have a leg up on us by adopting good design from the beginning of your big project.  I’ll say once again to take the SE course, because it’s probably the most real world experience you can get in the CS program.  If you go to work at Microsoft, you’ll be faced with stuff that makes our game look like your Fibonacci counter.

Summer of Game

June 21, 2009
by Joey

With the start of the summer Alchemic Studio has entered into full weekend production mode for the creation of our newest game (currently untitled). Working with me are James, Matt, and Chris, all programmers. Currently we have no artist, we’ve decided that creating the game first and then adding art and sound is the way to go.

We’re using XNA 3.0 and the XBOX 360 development environment. The project exports with every build to my 360, allowing us to test the game as we make it on the correct platform. This is something we did not do for our other on-going project, Agonoid, and looking back, it was probably a mistake not to.

Agonoid is still coming along, albeit slowly, as the team is scattered for the summer and we’re unable to work as effectively. However there are no plans to cancel the game and it should see release by the end of the summer. Something we’re particularly proud of with Agonoid is the incredible musical score our sound designer, Conor, has put together. Here’s the main theme Agonoid Main Theme, pretty awesome, huh?

And here’s a first glipse of our game! Enjoy it now, I might hide pics of early work once we near release time :)

That's a big cat!

That's a big cat!