Amish Brothers Complete

Who are more minimalist than the Amish? Welcome to Amish Brothers where you play as Brother Jebidiah, who must return all of the farmyard animals to the barn. Ten levels of sheep catching action!

amishbrothers03

This is my first game created in Unity. The development environment has a little bit of a learning curve, but once I got the hang of it most of it made sense. I really like Unity’s ability to import Blender (.blend) models directly into the project. This is something that I have been fighting with in XNA for over six months. The biggest trick was figuring out that I had to select the “Legacy” option under the model’s “Rig” settings. Getting the models to rotate the correct way was also a bit of a challenge, since rotating at the incorrect place will cause the movement vector to change as well.

It was a really enjoyable experience creating all of the assets for the game. All of the models were created in Blender. The music was me playing the guitar with touch-up done in Audacity. The sheep sound was also me, with some pitch and speed distortion in Audacity.

I’m really anxious to hear what people think of the game. I’ll admit that it isn’t the most complex game, but I think it appropriately fits the “minimalism” theme of this Ludum Dare competition.

amishbrothers01

Play the game here: Amish Brothers

Contact me @GaTechGrad on Twitter

Amish Brothers

Amish Brothers
Play online


Amish Brothers

Amish Brothers Overview

Who are more minimalist than the Amish? Welcome to Amish Brothers where you play as Brother Jedidiah, who must return all of the farmyard animals to the barn. Ten levels of sheep catching action!  Amish Brothers was my submission for the “Minimalist” theme for a game jam.

Post Mortem

So when I heard that the theme for this year’s game jam was Minimalism, I immediately thought of an episode of the radio show Coast to Coast AM with Art Bell, where the episode was on minimalist societies. There are many who follow the minimalist lifestyle today, by using only the bare necessities to get by in life. However, the original practitioners of the minimalist lifestyle are the Amish. I started thinking and realized there has never been a video game about the Amish before, at least as far as I’m aware. Then I remembered the 90’s classic song Amish Paradise by Weird Al Yankovic. This could actually be an interesting premise for a game.

An Amish that would save the world using only the bare necessities. The next question is how would he save the world. Obviously an Amish would not want to hurt or kill anyone, so I decided narrow the grandiose premise of the game. Instead of the protagonist attacking others, he would be helpful.

Original title screen for  compo entry

For the game jam, I knew that web is the platform that could reach the most players, so Unity was the best environment to develop a game for this competition. Not knowing anything about Unity, I started watching as many tutorial videos I could the night before the competition to give me a basic feel for using the tool. Even though I’m not a Unity guru, I’ve been programming games in my spare time since around 1995. My first epic game was Mystic Sword written in QBasic on my 386. Since then I have written games using libraries such as ClanLib, SDL, and most recently XNA for XBox Live Indie Games. Last year I released my first published game called Resistor to the masses on the XBox Live Indie Game platform. While it was praised by many XBox Indie review sites, I failed to make any monetary return since it didn’t sell enough copies to get the minimum payout. I decided to start working on a new game called Blasting Bits, which would appeal to more gamers. I worked on this platformer in my spare time for about six months, then an unexpected event occurred in my life, which made me lose my enthusiasm of developing games. However, I knew I still wanted to do the game jam competition this time, since I’ve never done it before and it seemed like it would be fun.

So after my crash course in Unity, I knew enough to move an object around and how to detect an event when that object collided with another object. Hey, that sounds like enough to make a game! Not enough to make a deep and sophisticated game, but enough to make a simple collectible game. Then I decided that the hero, who I named Brother Jedidiah, would collect sheep… because sheep are cute. After sleeping on it for a night, I thought of a simple story about the farmyard animals escaping the barn. I had planned to include other animals such as chickens, cows, and goats, which would have unique characteristics and travel patterns, but I didn’t have enough time to implement those so I stuck with sheep. I also considered adding powerups such as a butter churn to make the player run faster, but that idea got left on the cutting room floor for the sake of completing the game on time.

Original compo entry gameplay

I added some simple boxes to the screen that represented the player and the sheep. Then I developed a method for automatically generating the sheep, using the Prefab technique that I learned in the Unity tutorial. Next I started working on the model assets. I’ve been modeling simple objects in Blender for over ten years, so I knew I could make a player model and sheep model for this competition. The only problem was adding the models into Unity was something I had never done before. I’ve gotten animated models working in XNA before by exporting to FBX, but I never had the ability to change animation sequences. I was delighted to discover that importing models into Unity is as simple as dragging the .blend file into the Unity project. Unfortunately, my models were not animating in Unity, which had me pulling out my hair for awhile. After some searching on the Internet, I found that the Animation Type must be set to “Legacy” on the Rig tab for animations to work. Then I created a simple barn, trees, and fence to add to the scenery. Finally, I rendered a stack of potatoes as a small Easter egg, which can be seen on the left side of the farm.

For the audio, I recorded myself reading the introduction story using Audacity. I also made a “baa” sound, which I sped up and raised the pitch in Audacity to make it sound more like a sheep. Finally, I needed some music so I recorded myself playing “Old MacDonald” and “Baa Baa Black Sheep” on the guitar. I thought those songs fit the atmosphere of my game perfectly.

The level design was really simplistic, as I just increased the number of sheep for each level. Some have expressed dissatisfaction due to the lack of a lose state. However, not all games have lose states. In a racing game, you can just sit in your car forever and never reach the finish line. I feel my game is a lot like bubble wrap. You just keep popping bubbles until they’re all gone. Adding enemies such as snakes and obstacles like briars did cross my mind, but I envisioned this being a game for the entire family, so I wanted to avoid having the main character get killed. I also wanted to make mazes out of the fence, but I knew I wouldn’t be able to compete that within 48 hours. Finally, I made a victory screen and congratulations message for when the player completes all ten levels.

So that’s Amish Brothers in a nutshell. I would like to expand the game a little more to make it more interesting, but I also have a few ideas for other games I would like to start making with Unity as well.

Videos

 

 

Released

Ambiguity

Multiple Wire Problem

Noticed a problem that doesn’t happen too often, but when it does it is really annoying.  This is when you place a wire (or resistor) next to two filled wires with different flow values.  For instance, if I place a wire where the blue square is in the first image below, then what flow value should the new wire get?  Should it be a 3 from the left wire or a 5 from the right wire?  Remember, this is my puzzle/arcadey game rules, and not a real simulation so I get to make up the rules.  Currently, it just uses the value of the first check in the if/elseif/else block.  However, this is ambiguous to the player, because the player can’t determine what the value of the wire placed will be.  That’s unless they’re clever enough to figure out that the cells are evaluated in a clockwise manner starting at the top.  So currently the new wire would get a value of 5 from the right wire.  However, if the wire were placed in the blue square in the second image, then the new wire would get a value of 3.  This was confusing me as I play tested the game, so I’m sure it would also confuse other players as well.

  

Therefore, in the checkStartFilling method in the GameLevelScreen class, I added a loop that calculates the highest value of all the adjacent cells, and uses that highest value for the new wire.  In the two images below, now placing a wire in the blue square will set the new wire’s value to 5 in both cases, since 5 is greater than 1.  It’s not realistic, but a least the player can clearly anticipate what the value will be now.

 

Connection Problem

This logically fixed the problem, but the display was still misleading, because it would make a complete loop with two different flow values in the loop.

 

To fix this problem, I updated the draw method in the GamePiece class to only make connections to wires with the same flow value.   The resistor wires are a little tricky, because it’s difficult to determine which wires carried the flow in and which ones carried the flow out.  Another visual distortion happened when two wires with different values were placed next to each other that only had one joining wire each.  Those appeared to connect since the default image for a wire with only one connection spanned all the way across the cell horizontally.  Therefore, I made wire images specifically for only one connection (N, E, S, W) on each side and an image for a no connection wire ( O ) to resolve this issue.  These new images provide a few pixels for a break padding, so that those wires don’t appear to be connected to pieces that they are not connected.  Now as shown the in the screen shot below, with the updated code and images the user can clearly see the flow through each of the wires, and there is no doubt that the value of the wire in the blue square is now 5.

Game Win Screen Updated

Moved the game win display code to the game win screen, to make it consistent with the other screens.  To to this, I had to pass the piece count, luminosity, and time values to the Game Win screen.  Additionally, I had to pass a reference to the level definition object, so that the rank values can be calculated.  I also added a win delay on the Game Level screen, so that there is a one second pause between the time when the last LED is activated and when the Game Win screen is displayed.

More Level Design

Created twenty new levels (21 to 40).  I purposely designed some of the levels to force the player to use the higher level resistors (2, 3, and 4).  I increase the highest level battery used by one for each ten levels.  One flaw that I’m making in level design is making it so that every tile must have a piece to clear the stage.  Technically, this is fine but the user will always get an S rank in pieces used.  Therefore, I should always include a few tiles that don’t have to be used, so that there is a chance for lower piece ranks.

 

During play testing, I noticed that one level didn’t have any tiles and only objects.  This was due to me exporting the wrong layer as the tile layer.  Going back and exporting the correct layer resolved this problem.

 

High Level Resistors

The player now starts out with only one selectable resistor (value 1).  Every 10 levels, the maximum selectable resistor increases by one.  This prevents the player from using a high level resistor to lower the initial wire to zero, which would allow the player to quickly complete the level.

(Gray video distortion fixed. Thanks to tip from SHADEE.)