Kotaku AU's Game A Week 2: Zafehouse, The Zombie Survival Simulator

zafehouse_v1.jpgUpdate: Zafehouse now has its very own website, zafehouse.com.

Game A Week 2 is done. Done I say! Zafehouse is ready to be played by all.

As I said earlier in the week, this thing almost killed me. I had an idea that just exploded. I think the end result is quite awesome. Zafehouse has strategy, survival horror and, best of all, zombies. I love shufflers, I just love them to death, and I'm glad I got to put them into a completed game.

I have yet more plans for a version 2, which I'll release when it's done. For now, I have to get started on Game A Week 3. If you'd like to check out Game A Week 1, Wizkill, hit up this post.

Hit the jump for a development breakdown, hints and tips and unimplemented features, or download the game and give it a spin.Update: If you're running Vista, you're ready to go. If you're running Windows XP, or get the error "App failed to initialize properly (0xc0000135)", you will need to download the .NET Framework 2.0.

Update 2: Small bug with the raiding code's been fixed. Please download the game again to get the updated executable!

Update 3: New version, v1.2. Here's the info:

-Clarified help rules on buildings and resources
-Reduced the amount of meds found in a raid from 4 to 3
-Fixed the "Hours since.".. label on the GUI so its value is never hidden
-Pressing "~" while a person is selected will heal them

Zafehouse began as a random name generator. I wanted to make something different to Wizkill, which involved one character (you), into a strategy game that had many. They needed a little personality, so I started by entering about 100 first names and 50 last names into two arrays.

Zombies had to be in there as well. I'm a fan of games that demand you manage tight resources and make important decisions on a minute-by-minute basis, and these concepts turned into the idea of holding off a bunch of zombies for days on end until help arrives.

Coding began mostly with the interface. A good UI was very important. Players would need to be able to assess resources at a glance, assign weapons and ammunition easily, and move survivors around quickly. I tinkered with about ten different designs, until I came up with the one in the picture above. The graphical resource counters were added last night.

About a day into the proceedings, I realised 120 days was too much. I reduced it to 72, which gives a good balance of longevity, and allows the gamplay to "develop". Shortly after this change was made, I found I didn't like the idea of days, as the intensity wasn't there. So I changed it to hours.

The game is turn-based, with the actions of each hour affecting the encounters you have. I made a risky moving forcing the player to watch the results of their planning rather than being able to directly affect combat and raiding. It puts more weight on making good decisions beforehand, and makes your mouse hover over the "Advance one hour" button in tense contemplation.

Gameplay involves raiding for supplies, securing buildings for cover and resource bonuses and allocating weapons, barricades and ammo in an intelligent fashion. It seems basic at face value, but as the game progresses you'll find yourself keeping careful check of who has your only shotgun, or if David has enough ammo to last the hour.

The amount of zombies you encounter and the chances of encountering them is determined by something I like to call the "Zombie Mass Index". The ZMI is increased by two every hour, and reduced by one every time you win a fight. This way it regulates itself, and puts pressure on the player to be offensive. Sure, you can hold up in the House with two guys, but eventually you'll have 50 zombies banging at your door.

A late addition was the "promotion" system. I wanted to give the player more control, and make them assign importance to some survivors over others. So, for every 9, 18 and 27 hours a survivor lives, they can take a bonus, such as more damage or lower ammo usage.

I almost put in a "goal" system, but the promotion system overtook it. Essentially it would let you trade resources for permanent bonuses, such as a few hours off your rescue time and higher resource generation from certain buildings.

Some other features that didn't go in due to time were grenades, reclaiming weapons, a morale mechanic and zombie culling as a raid priority. While these would enhance the game, it's very fun and playable without them. If I could implement one right now into the version here, it'd be zombie culling, as it gives you more control over events in the planning stage.

If you're having trouble surviving, try only to hold onto one or two buildings during the day, focusing on those that give you resources you're in need of. At night, don't spread yourself out if you don't have to. I've found the Mansion and the Warehouse are a good choice, as the former can hold six people (more guns means more downed zombies) and the Warehouse (a constant stream of supplies during the night means you can reinforce your buildings).

Again, if you want the source, drop me an email. Otherwise, give it a go and post your scores!


Comments

    Looks like I know what I'll be doing tonight.

    Great little game - gratz on "week 2" game.

    I do sometimes get an error though when doing the "next round"... strange.

    BTW- when are you going to build my Print-a-Maze game????

    Looks great so far however I am getting an Unhandled exception error during encounters under Vista.

    details are:

    See the end of this message for details on invoking
    just-in-time (JIT) debugging instead of this dialog box.

    ************** Exception Text **************
    System.IndexOutOfRangeException: Index was outside the bounds of the array.
    at Zafehouse.frmEncounter.PerformSuccessfulRaid()
    at Zafehouse.frmEncounter.ExecuteEvent()
    at Zafehouse.frmEncounter.btn_NextRound_Click(Object sender, EventArgs e)
    at System.Windows.Forms.Control.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.ButtonBase.WndProc(Message& m)
    at System.Windows.Forms.Button.WndProc(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    ************** Loaded Assemblies **************
    mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1434 (REDBITS.050727-1400)
    CodeBase: file:///C:/Windows/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
    ----------------------------------------
    Zafehouse
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Users/candrews/Desktop/Zafehouse.exe
    ----------------------------------------
    Microsoft.VisualBasic
    Assembly Version: 8.0.0.0
    Win32 Version: 8.0.50727.1434 (REDBITS.050727-1400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
    ----------------------------------------
    System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1434 (REDBITS.050727-1400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1434 (REDBITS.050727-1400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1434 (REDBITS.050727-1400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    System.Runtime.Remoting
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1434 (REDBITS.050727-1400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
    ----------------------------------------
    Accessibility
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.1434 (REDBITS.050727-1400)
    CodeBase: file:///C:/Windows/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
    ----------------------------------------

    ************** JIT Debugging **************
    To enable just-in-time (JIT) debugging, the .config file for this
    application or computer (machine.config) must have the
    jitDebugging value set in the system.windows.forms section.
    The application must also be compiled with debugging
    enabled.

    For example:

    When JIT debugging is enabled, any unhandled exception
    will be sent to the JIT debugger registered on the computer
    rather than be handled by this dialog box.

    I'll check it out now. Thanks for the report!

    Getting lots of errors...

    See the end of this message for details on invoking
    just-in-time (JIT) debugging instead of this dialog box.

    ************** Exception Text **************
    System.IndexOutOfRangeException: Index was outside the bounds of the array.
    at Zafehouse.frmEncounter.PerformSuccessfulRaid()
    at Zafehouse.frmEncounter.ExecuteEvent()
    at Zafehouse.frmEncounter.btn_NextRound_Click(Object sender, EventArgs e)
    at System.Windows.Forms.Control.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnClick(EventArgs e)
    at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
    at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
    at System.Windows.Forms.Control.WndProc(Message& m)
    at System.Windows.Forms.ButtonBase.WndProc(Message& m)
    at System.Windows.Forms.Button.WndProc(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
    at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
    at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

    ************** Loaded Assemblies **************
    mscorlib
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/Microsoft.NET/Framework/v2.0.50727/mscorlib.dll
    ----------------------------------------
    Zafehouse
    Assembly Version: 1.0.0.0
    Win32 Version: 1.0.0.0
    CodeBase: file:///C:/Documents%20and%20Settings/darren.ferguson/My%20Documents/Zafehouse.exe
    ----------------------------------------
    Microsoft.VisualBasic
    Assembly Version: 8.0.0.0
    Win32 Version: 8.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Microsoft.VisualBasic/8.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualBasic.dll
    ----------------------------------------
    System
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System/2.0.0.0__b77a5c561934e089/System.dll
    ----------------------------------------
    System.Windows.Forms
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Windows.Forms/2.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
    ----------------------------------------
    System.Drawing
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Drawing/2.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
    ----------------------------------------
    System.Runtime.Remoting
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.832 (QFE.050727-8300)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/System.Runtime.Remoting/2.0.0.0__b77a5c561934e089/System.Runtime.Remoting.dll
    ----------------------------------------
    Accessibility
    Assembly Version: 2.0.0.0
    Win32 Version: 2.0.50727.42 (RTM.050727-4200)
    CodeBase: file:///C:/WINDOWS/assembly/GAC_MSIL/Accessibility/2.0.0.0__b03f5f7f11d50a3a/Accessibility.dll
    ----------------------------------------

    ************** JIT Debugging **************
    To enable just-in-time (JIT) debugging, the .config file for this
    application or computer (machine.config) must have the
    jitDebugging value set in the system.windows.forms section.
    The application must also be compiled with debugging
    enabled.

    For example:

    When JIT debugging is enabled, any unhandled exception
    will be sent to the JIT debugger registered on the computer
    rather than be handled by this dialog box.

    Is the factory or one of the buildings suppossed to produce weapons? I'm currently 62 hours left and Ive not found a weapon or had one created and therefore most of my survivors are just running around with fists

    Okay, the bug's been fixed. Teaches me to make a change without testing it. :P Please redownload for the fix.

    @Vangalorr: The bug was associated with getting a weapon during a raid, hence, it'll crash before you'll get one. Grab the new version, should fix your problem.

    Thanks Logan, guess i was missing allot of weapons cause i got the bug quite a few times

    @Vangalorr: No problem, thanks for letting me know! And playing, of course. :)

    how much ammo gets produced at the factory every round? is production tied to the number of occupants in the building in any way?

    one other issue is that I cannot see the hours since last attack figure for any of my buildings, all I see is "Hours since last attack:" then the number disappears behind the green background

    I've released a new version that should fix the text, but I can't be sure as I can't replicate it. As for ammo, no, the amount of people inside has no effect on its production. As long as it's secured, it'll produce.

    Great game - played the first 50 or so hours. At first you really need people and weapons, but later I had so many people I just needed the ammo and supplies to keep the buildings fortified and the guns firing.

    (Why is there so much ammo in this small town? :P)

    Hey Logan, I'm a long-time reader and first-time commenter.
    Great work with the game. I've spent most of this evening trying to get through the 3 days to the end (I haven't yet).
    I found a minor bug. If you pack a building with the maximum of people to capture it and they find a survivor, you can put as many people in the building as you want after it. I've got 12 people hiding in the Factory at the moment.

    @Sirk: Thanks for the kind words... and the bug! It's fixed now and I've upload V1.3. :)

    Keep trying, you'll get it eventually. I think the hardest part is having enough supplies and ammo to make it through the last night.

    I made it through on my 2nd game with a score of 2630 and I didn't exploit the bug. :)
    Would I be correct in guessing that the key to a good high score is finding lots of people early on and keeping them alive?

    nice, couldnt figure out how to secure building tho.

    I fully upgraded the house and then was overrun because apparently noone was in there. Nothing really indicating to me where people were or how to secure buildings. Has some fun tho.

    @Rowr: Oh, that's no good. If you check out the help section, it tells you what you need to know: "You can assign survivors to a building by select the building in the centre window and double-clicking their name in the top-left list box."

    The top-left box has the survivors that are outside, while the bottom-left box has those inside the currently selected building.

    Hope that helps! :)

    @Sirk: That's the way I got my score. But I've been discussing it with my flatmate, and we reckon one of the better strategies is to:

    1) Take all the buildings early, and defend the one that has the resource you're lacking (usually barricading supplies). Let the others be retaken.

    2) Send as many people as you can on raids. The more people, the more stuff you can bring back. Take the Sharp eye trait until eight people have it, then start going for grizzled.

    3) Give everyone who has a melee weapon or a pistol or rifle the Steady hand trait. Give a few the reduced ammo usage trait, and give them shotguns.

    4) A guy with a shotgun in a fortified building can take down 25 zombies before the barricades fail. This is why shotguns are so good, and a guy can often defend a building by himself if he has one.

    5) Supplies are probably the most important resource when you get down to it. 50 pieces might seem like heaps, but it's only enough to fortify two buildings, and usually for a single hour of attacks!

    ok cool, i was a bit slack and didnt bother reading the help, trying to pick things up as i went (as per usual).

    Ill give it another whirl.

    Great little game mate. The only thing that could have made it greater-er would be if it emulated the great zombie films and ended tragically. Hard to implement in a game I know. Great job!

    This is actually some addictive stuff, and I have exams on Monday!
    Will there be a Zafehouse 2.0 lol?

    well its a little bit more tactical now that im putting dudes in buildings. ;)

    quite awesome, id love to see this expanded on.

    Highest I got was 2391. I probably would have won, but I decided to try my luck having everyone outside during the last night period and unfortunately I didn't realise would mean that I would automatically lose if I held no buildings. :/ Which I promptly did.

Join the discussion!

Trending Stories Right Now