Ludum Dare 33 Post Mortem

This is my third Ludum Dare, and I think I did much better this time than my previous attempts. Still things learned, and I feel like I did more right than wrong! For me, the meat of any project is the code, and so I'll probably write quite a bit more time on the subject, but I want to get the non-code stuff out of the way first. On that note, let me tell you about the game...

This time around, I wanted to be better prepared for the theme, and tried not to get too caught-up in the want for one theme. There's a lot of psychology as to why you shouldn't hope too much for one theme, and I tried to break this early on. However, I think my brain got the better of me, and I started trying to predict which theme was the most likely to win. I picked the top-4 from the previous 4 rounds of voting, and brainstormed on them. The theme came out to be "You Are The Monster", and I made an effort to do something that wasn't painfully obvious or super-likely to be done a ton of times. In my game, which I titled "Boss Fight Simulator 2015", you are a robot that is the boss fight for "the Bros" in their quest for more beer and weights to lift. I didn't spend much time on the story, obviously, but there really wasn't much to focus on with it, given the game concept.

The graphics were retro-style 2d side-scroller. I'm not much of an artist, but I think they came out okay. I spent quite a bit of time working on them, probably to the detriment of the game. However, I didn't want to completely skimp out with something truly, horrifyingly bad. The player character has a good bit of detail, and a lot more frames of animation than the enemies you fight. Not all of the animations line up correctly, so in some frames, there's a small bit of jumping around. It's only noticeable when attacking, as the idle and run animations line up correctly. I'm proud of my first attempt at animating every frame, but this is where we come back to me being a programmer, and not an artist...

The run/walk animation for the player, looks more like a weird leg spasm than walking. The enemies aren't all that much better, but at least they sort of look like they're running. Punches for the melee enemies causes them to jump backwards to make up for the fact that the attack animation frame is larger than the rest of the sprite frames. This also applies to the various attack animations of the player. The sprite positions don't quite line up like you expect them to, which causes them to look jumpy. But, overall, they maintain a good appearance, even if they jump positionally a bit.

Sound wise, Artuir did great with the music track he provided. He had numerous things come up, and so he wasn't able to devote as much time as either of us would have liked, but that's okay. Artuir is a personal friend of mine, so I understood his situation and worked with him. The voices were his, and they were as comical as I expected him to be with it. The sound effects were produced with BFXR, and worked great. BFXR is a great tool for sound effects for jam games. SInce I'm not a sound effects engineer (and neither is Artuir), this is my go-to tool for those. The effects came out well, and worked with the art style. 

In terms of code, there's a few things I'd say went right, and a few things that went wrong. Firstly, I have been writing a code library for use with game projects, built on the Monogame framework. Some of it feels like it would be Unity code, given that was where I started and learned. I started probably about 2-3 weeks before LD33 writing this library. I really put this framework to the test with jam. This let me find strengths, and weaknesses, in the codebase. However, I also wrote my animation system during the jam. Since I'd never written an animation system, and only had a vague idea of how any of it would work, this was both great, and a bit of a curse. Since it wasn't a major thing I'd never tackled any part of before (like the A* pathfinding in my last Ludum Dare, LD31) I was able to get it done somewhat quickly, though, not without some serious problems. 

The animation system wasn't quite playing animations correctly, and required some weird timing and doubling-up of animation frames to account for. Some things were ultimately left in the final submission that have issues. I corrected these later after Ludum Dare was over, and released an updated version of the game. Many of these issues were due to the way I was managing both sprite components, and animation components, coupling with how I was handling calling the animation component for both playing animations, and changing animations. I corrected this later by abstracting both the SpriteComponent class and AnimationComponent class to inherit from a new "DrawableGameObjectComponent" class. There is now, however, a new issue with how updates are processed, which is causing some problems.

The physics code for the game is scraped and modified from several places, and was really a complete and total mess. It worked, but it was fairly convoluted, and shows that I'm not super-knowledgeable about handling physics in games. While it's fun to play with, having a proper physics system is a huge time and code commitment, and requires a non-trivial amount of knowledge. It also has to be efficient, which was something I wasn't going to cram into a jam weekend, and didn't start writing code for until just 3 days before hand. It worked, and worked fairly well in the jam release, but was a lot of code (for me), and wasn't very well centralized as it should have been. Each object ran its own physics calculations, instead of a proper broad-phase/narrow-phase system that was more centralized. Thankfully, there wasn't all that much to process on-screen. Additionally, a quad-tree system was used to narrow down just what needed to be checked against what, and that saved a lot of CPU cycles.

What worked out fantastically, and I didn't have to modify even a character of code for, was the entity/component system itself. This system is fairly robust, and hasn't presented with any problems either before, or after, the jam. Since the jam has finished, I have gone through and commented the code completely, and intend to make it more robust, and have a little more error-checking and handling, which should make it very robust. I am very happy with that system, and I'm planning on expanding on it in the future. 

In terms of design, I was much happier with the idea I had come up with this time. It was much simpler than my previous efforts, and showed a bit more restraint in features. The concept was more of a wave-based survival mode inspired by several retro-style games that had come out recently. I didn't want to focus too much on having too many enemy types, and didn't want to focus on enemies having complex AI, so I stuck with them being as simple as possible. This turned out fairly well, and haven't heard anyone complain about the enemies, which was fairly relieving. 

The things that didn't turn out well were how the difficulty progressed, and there being more feedback for the player. It was difficult to register when you'd taken damage, and when the enemy had taken damage. It wasn't particularly obvious, and left it feeling a little empty. In terms of progression, the scaling was all kinds of wrong, and the attacks that the player could perform weren't particularly well balanced. This led to simple strategies for victory. Namely, going to one side of the map, and holding down the range attack (S) button, and killing all of the enemies with little effort. After about wave 20, it simply devolved into standing anywhere on the map and one-shotting everything with the super attack. I still haven't managed a good progression after the jam that allowed for difficulty that scales properly.

So, quick recap:

What went wrong:
  • Too much time was spent on art
  • Not enough time was spent on gameplay design/code
  • Life issues of teammates caused some things to suffer
  • Untested codebase was used, and should have been avoided for this jam
  • Some design decisions hurt the enjoyment of the game
  • Not enough time spent prepping my workspace

What went right:
  • The art style came out much better than expected, and looked consistent/great (IMO)
  • Portions of the codebase turned out to be stable and reliable
  • The game concept was simple and fun, despite lacking better execution
  • More breaks and changes in time management skills lead to better quality work
  • I was less attached to a single theme prior to starting
  • Had plenty of time to work until the deadline

What I learned:
  • To make sure your codebase is used at least once prior to using it in a jam
  • That more frequent, sometimes longer, breaks leads to better quality work
  • That my art doesn't suck as much as I thought it did
  • That I should spend less time on art and more on code
  • How sprite animation systems work
  • That more time spent preparing your workspace leads to less clutter
  • To be more confident in my skill

Thanks for reading! Download links for this game are below:
Original LD33 Jam release: Jam Release
Most recently updated release: (9/4/2015) Post Jam Update

Engines to Maximum!

So here we are. It's August ninth already, and there's a few milestones I'm creeping up on, but a quick update on what I've been working on, and where I'm headed...

Firstly, I announced that I was working on a project that I was super excited about last time I blogged. I feel like I fleshed out a good prototype, but between struggling with some serious coding issues, and an on-going series of problems in my personal life, I put it on an indefinite freeze. But first, let me go over what it was, and where I started running into issues, and where I'm going to go after that...

The project I was working on was a survival/mangement game in the vein of Gnomoria, Dwarf Fortress, Goblin Camp, etc. I was successfully generating a world with rivers, river banks, mountains, and recognizable elevations changes (on a top-down 2D aesthetic). In this world, were trees, items, actors that could acquire jobs on their own, navigate to those locations (granted, I had yet to implement proper path-finding), placement of jobs and a job management system, placing buildings, generating construction jobs automatically, the actors could build structures on their own, among many other things in a 500x500 tile world, with framerates still over 60fps. I started this project in Monogame, as I've really come to love the Monogame framework. Though, my desire to build something completely, absolutely from scratch, is getting stronger. Below is a screenshot demonstrating the map, entities, and job system. All of the art and coding were my own work.

The second project I've been working on was consolidating a lot of the little tools I've written for work into a single program. For those of you who don't know, I do Desktop Support for a major healthcare provider in the region. I originally wrote this with the intent of learning the MVVM design pattern, but wound up writing a disorganized mess, and put the project aside for a while. That was last September/October. I picked the project back up in April when I found myself needing to perform a number of repetitive tasks that were best suited to utilizing a combination of WMI and doing the work by-hand. I mostly stuck to C# because I was already comfortable with the language and how to accomplish what I needed with WMI using it, rather than Powershell or VBscript/, which I'm not familiar with. I rewrote it again, and completely refactored it to a proper MVVM pattern, and for that I have to thank myself. It's much cleaner than it was before, though, some of the UI lost it's styling and looks out of place. Easy enough fixes though.

The third thing I started working on was picking up ASP.Net MVC, and getting back into web development again. I haven't done it for a little over 3-4 years, and so getting back into it has been fun. I wrote my own blog software and migrated from wordpress to it. Wordpress is probably a lot easier than working with this, but where's the fun in that? Writing this has been infinitely more fun and rewarding, in my opinion. I have some more ideas for things I'd like to have/use, but don't have any good way to just pick up. Something for tracking hand-collected data is something I'd really like to have, and would really like to write for myself. Not sure what platform I'd want to develop it for, but that's farther down the road at this point.

Ludum Dare 33 is coming up in just over a week! I missed the last one due to personal circumstances; I've taken the time necessary and made the necessary plans to have that weekend free this time. Artuir will probably be doing the music again for this Ludum Dare. This next week will be practice, and learning how to implement physics into my 2D games in Monogame. I've never done collision detection and physics integration outside of what Unity provided, so this will be a first run for me. I'm hoping to get familiar enough with it before Ludum Dare that I can implement it on the run and use it without having to learn the whole thing during the jam.

Well, that's it for this post. With more things on the way, there's plenty more to write about.

Long Overdue Update

It's been entirely too long since my last update. December to May is a long time, and a lot can, and has, happened in that time. We'll start with the rough spots, and then move on to the good stuff and where I'm headed from there.

At the end of December, I wrapped up my work on my Ludum Dare game, Star Traders, and decided that I was done with it. In that time, I wrote my own UI code base, which I'm now using in my current project. I really enjoy that it works as well as it does, and I'll probably continually improve it until it just doesn't work for what I need it to anymore. Back to what I was saying... The end of December brought some terrible news: my marriage was ending. I was devastated. I didn't know what to do, but I knew I had to change my living situation. It was decided by her friends and family that the best thing would be for me to move out. I started looking for a place and was moved out on January 19th. I took very few things with me, mostly the bare-minimum I could live with, and left everything else. A bed, some kitchen supplies, clothes, the truck, a couple pieces of furniture, and my server and PC. That was about it.

Shortly after getting moved out, we set a schedule for parenting time with my son, and agreed on an amount of child support. Since she got everything, including all of the money from selling my beloved Camaro, the rest was an amicable split. No paperwork has been filed yet. Since then, I've been working on my game dev. It took a while, but I eventually got my head back into it, and started diving in.

I took my tile map system out of Star Traders and began extending it and making it a bit more robust. I created my take on a sprite sheet/atlas system and started tying things together. It was mostly just tinkering, until I started creating game entities to go with it, and suddenly it was a game project. I started throwing things together, and started working on a survival/city builder/management game (I believe they call those CMSs, if I'm not mistaken). Kind of a Dwarf Fortress/Goblin Camp/Gnomoria clone. Honestly, that's all I've got for an elevator pitch at the moment, but it'll be more soon enough. Right now, I have a first early implementation of placeholder UI, AI, and Jobs for gameplay, and some back-end stuff working. For testing purposes, there is a zoom function, but I'm probably going to remove it from the game after testing is done. There isn't anything playable just yet, but that should be something that exists soon.

In addition to working on those things, I've been trying my best to get out to the Eugene Area Game Developers meetups and meet some cool game dev people. I'll keep you posted on how that goes, as it will likely affect development of my current project (hopefully in a positive way!). So far, life has kept me from going a few times, but I'm working on making it a higher priority. Have to adjust some schedules first.

From here on out? I'm fairly dedicated to this project now. I was able to show it off at a gamedev event last night, and it drew a few people over who looked interested, which gave me some much needed motivation. As I approach something playable, I'll start posting screenshots and getting things set up. Right now, not a lot to show, not anything worth posting to play, and nothing fleshed out in terms of a road map, but that is on its way as well. I'm set to push this forward and make something of it. I love these types of games, and want to see more good ones out there. I hope my skills can add to that collection, and make it a worthwhile addition to the genre. For now, there is a lot of work to do, and only so many non-working hours to put into it.

I think that's it for this update. Hopefully more to come in the near future. Definitely more to come in regard to this project. I'll reveal the name soon, and some details on where I want to take it.


Ludum Dare 31 Entry: Ludum Traders

Happy Tuesday (or Wednesday, depending on where you are) everyone! So I decided to do a quick rundown of my game and do some shameless self-plugging, and throw out the offer to sit down and play your games! So firstly, plug:

Secondly, post a comment on this post with a link to your game, and I'll give it a play/comment as soon as I have time. I hope to see some good ones!

So... muh game!

Star Traders. I had been sick all week leading up to Ludum Dare. I had gotten in no practice, aside from some horrifying attempt at procedurally generating 2D tile terrain while doped-out on cold meds. It wasn't pretty. And I was (and still am) a little sick during the entirety of the jam. My friend, Artuir, offered to do music and was kind of excited about the idea. He'd done music for game jams before, but for reasons unbeknownst to me, was excited for this one. So I said, "Sure! Why not?" And now, Ludum Traders has some really good music! But, back to the breakdown...

I was brainstorming after the theme release. I knew it would be tile-based, but I really had no idea what. I went back and forth between a few ideas, but finally stuck on the idea of a trade tycoon or construction tycoon type of game. After boiling it down for about 3 hours, I decided on a trade game, and had no idea what setting to put it in. So, I picked space because... spaaaaaaaaace!

I got started on map and entity and tickrate and graphics and whatnot, Artuir got started on music and had something excellent by mid-day Saturday. Once he had put the music out, it was time to work on pathfinding for the trade ships. I knew I'd be using A*, but knew more about Dijkstra's and had actually implemented it before. I wrote up Dijkstras for first implementation and kept going. But once I started getting to where it was time to actually get ships to have path queues... there was a problem... Dijkstra's greedy slowness was causing about a 25ms pause every time a ship calculated its path. No good. So, I started down a path of rewriting the pathfinding for A*... which turned into 9 hours of having no idea why it wasn't working. After those 9 hours, I said "fuck this, now I'm behind..." and reverted back to my Dijkstra's implementation, and continued working on the game with the pauses. Once I got the most basic parts of the game done, and with about 6 hours left on the 48 hour clock (I was trying to follow it, despite planning to submit for the jam), I decided it was time to revisit pathfinding again. I started at about 1300hrs at rewriting for A*. This was the result after the first hour:

I was quite confused, and very, very frustrated. I rewrote it and optimized it and changed from floats to ints and from ints to decimals and doubles... I couldn't figure out where my math was wrong. Then, in one last highly frustrated and desperate moment, I converted the ENTIRE algorithm to doubles and found my mistake... a cast from double to int in my heuristics function I didn't even realize I'd made. Fixing that gave me working, fast, accurate pathfinding. I had completed something I had never done before! I implemented A* pathfinding in a game that wasn't built from a tutorial! I was so ecstatic I hopped up with my arms in the air, ran downstairs and hugged my kid and kissed my wife before coming back upstairs to finish. Looking at the total time I spent on pathfinding... It came out to about 15 hours. Absolutely too much time on one thing for a speed-based competition, but now I know it, and I'll never have that particular problem again.

However, having spent that much time on it, meant that I had to shave needed features to get it in on-time. Random events (like pirates destroying your ships), another pass on getting the goods pricing algorithm right, the ability to buy out the stars and own them as a possible winning condition... things that would have made the game challenging and fun, ultimately got cut to finish on-time. With work looming the next day, I didn't have much time between bedtime Sunday and submission time Monday to work on it. I polished up what I had, tested it as best I could, had Artuir test it as much as he could, and fixed the bugs we found, before submitting about an hour before the jam deadline. So there were a lot of lessons learned, and quite a few personal achievements earned, but it came at a bit of a cost.

What went right:
  • Stuck to a to-do list and accomplished all but two things on it before the deadline!
  • Implemented working pathfinding for the first time
  • Didn't wait until the last hour to think about sound and music
  • Didn't over-scope in terms of feature count for once
  • Had time to bug-crush (a little) before the deadline
What went wrong:
  • Spent entirely too much time on one thing, to the detriment of the game
  • Didn't have an outlined plan for implementing certain features
  • Started programming while sick
  • Did not get enough practice in
  • Did not finish all features due to a bad decision
What I learned:
  • Don't take on new, poorly-understood tasks during a timed competition
  • Stick to slightly simpler, less complex ideas if they need complex implementaiton
  • If you have a working algorithm but it's slow, work around it rather that write something that takes too long but is fast
  • Have your workspace ready 24 hours in advance, rather than start preparing it 1 hour in advance
  • Consider the resolution requirements during design, and operate around it accordingly
I had an absolute blast. I'm hoping I'm not busy during the next one, as I really want to start participating more often.

I hope everyone had a great time, and good luck during the voting round!

New project, new horizons!

So, as I said in my last post, I have been working on a new project. Don't have a good name for it, but I do have a working title. "Beyond the Stars." I know, not much, but it works for now. It's kind of a 4x/empire management game. A lot of it is still up in the air, but I started working on it towards the beginning of the month, and a few things happened...

As I started getting things moving, and getting some very base-level parts of the game setup going, I started working on the UI. Now, I originally started in Unity. Unity has been my go-to since I started learning programming and gamedev, mainly due to its simplicity in getting things going, and its extensibility. I'll always have a warm-spot in my heart for it, but I finally got so frustrated in figuring out the GUI stuff. Between NGUI's heavy reliance on the editor, and the new 4.6 uGUI's equal-or-more dependence on the editor, I finally had it. I don't care for the graphical editor, as it feels like it detracts from what I'm really wanting to do. So, after spending a couple of weeks fighting with the 4.6uGUI, I decided it was time to try something new. Enter, Monogame/XNA. I started about two weeks ago with migrating things over to Monogame, and learning the structure of things and how Monogame works. It's a lot lower-level than Unity, and needs a LOT more work to get things going, but I love it. I spent the better part of this week working on UI, as it only took me a couple of days to get the rest of my back-end ported over from Unity. I put quite a bit of effort into separating the majority of the game from Unity, and it seems to have paid off. I have some pretty basic stuff working UI-wise, but quickly building up something. I've drawn a lot of inspiration from a few open-source UI projects, and rewrote my input manager almost as soon as I finished it. A lot of it works like Unity's, and even the commands are the same names.

For example, getting a key press uses this command:    Input.GetKeyDown(KeyCode.Enter);     This is mostly because it was just easier for me since I spent so much time in Unity. But, I'm also using it to build a little bit of a framework for myself in the future. By taking that route, it makes handling future projects easier. Though, I'm hoping to actually go the distance with this project. I'm pretty excited about what I could do with it, and want to eventually sell this one. I don't know how much I'll get for it... but I'm definitely going to be working pretty hard on it.

In addition to that, I've started building a personal library of books dedicated to both software and game development. I'm moving into a new stage of my passion, and I'm really dedicated to taking this as far as I can. I picked up "Game Coding Complete: 4th Edition" by Mike McShaffry. My plan is to read it cover-to-cover, and I started reading it this morning, in-and-around working on my project when I could. My wife has given me lots of time lately, and I'm really thankful for it. I truly need as much of it as I can get. If nothing else, I'm realizing that coding is kind of an addiction for me. I can't say that's a bad thing, since it's an addiction to creating something. But that's what I've got so far. Hopefully I'll have some screenshots for the next post. I'm hoping to have something playable long before the end of the year, but Ludum Dare is coming on in just a couple of weeks, and I'm planning on taking part again. First time in a year, sadly. I wish I would have had time for the others earlier this year. I'm thinking I might do a tile-based game, but I'm not sure. And I don't know if I'm going to use Unity, or Monogame for it. I'll probably use Unity, since it does make getting something playable out much faster, and I'm still just not comfortable enough in Monogame to carry that into a 48 hour challenge yet. Perhaps the next Ludum Dare I'll use Monogame, or perhaps I'll have started using something of my own by then. Who knows. :)

Well, that's it for this post. I hope all of my US friends and family have a Happy Thanksgiving this week, and I hope that everyone else is enjoying the start to the end of the year. This has been an insane year, and I'm both sad, and happy, to have it coming to a close. Happy Holidays, everyone!

My long hiatus...

So, in case you didn't notice, I was on a long hiatus from not just the blog, but game dev too. Life took a really insane ride this year. Marriage problems, psychotic and violent roommate problems, more marriage problems, having a toddler around the house, getting a new roommate and a new place to rent, getting a new car, continuing on with high-stress work-related projects... and just not having time for game dev between those things.

However, there is good news! I am returning to game dev!

My last project, the multiplayer FPS one, turned out to be a dud. I kept having severe issues with getting animations to work correctly and not crash the game, a lack of knowledge on how to get them working, and no good info on how to implement them through the network. It was a difficult task that I simply wasn't prepared for, and then life happened. However, I've started up a new project, and one that I'm a lot more interested in than another multiplayer FPS. I've always had a much fonder love of strategy/4x games, both turn-based and real-time, and I have developed a deep love of minion management/city-builder type games (aka Gnomoria, Evil Genius, Dwarf Fortress if it were more accessible). I've decided to put my own spin on it, and started developing one of my own. I don't want to go into too many details, but I'm sure if you have known me for more than 5 minutes, you could probably guess the theme, but alas, I will post more about it when I have more to talk about.

TL;DR - I'm back. I'm devving again. I'll tell you more later.

Building My First Multiplayer Game

The new year has passed, and we're almost two weeks into 2014. The world hasn't ended, we're all still going to and from work, home, the grocery store and whatnot. I'm still developing games and learning something new as I do so.

Which brings me to my project! I decided that part of my lack of motivation was trying to build a single-player game that once I started, I just couldn't get the motivation to keep going after a few weeks because I would lose interest. I decided that, with the knowledge I now have, I should be able to make a decent multiplayer game. The learning curve would be figuring out Unity's built-in networking classes and the principals behind getting it to work. The project I started on wasn't original, innovative or anything like that... at least not yet. It is, more or less, an FPS along the lines of Unreal Tournament or Quake 3. I've really been hankering for something along those lines for a while now, and know that the industry just isn't going to produce anything like it in the near future.

So far, I have smooth-ish movement over the network, as well as weapon fire and things of that nature. I hit a snag last night in my weapon system when I tried to create a good ol' Rocket Launcher. The way I had implemented my weapon interface was overly (and unwittingly) complex, and is now too rigid. I've been working out how to simplify it, and determined that the best way was to make the weapons themselves game objects, rather than classes that implement the interface, and subsequently the character class creates the weapon. In doing so, I will (hypothetically) simplify the weapon system, require less coupled code, and create a more flexible system in the process.

I've done some testing with friends on the network movement and weapons fire (thanks Matt and Brian!), which lead me to fixing numerous bugs in the game that I didn't quite realize I was having. After I get the rocket launcher in, I'll have a fairly decent system that will let me create more weapons and weapon types, that will require less headache on behalf of getting the fire mechanics properly functional.

There is still a lot more to do, but I'm feeling pretty good about this project, and having a lot of fun with it, and even playing it with friends! So I might take this one farther than just about any of my other projects. I'll post more updates, and maybe even screenshots, later.

2013 - My Year In Review...

So, we are now past the inexorable date of December 25th. As we bring the 2013th year of the Gregorian calendar, I think we should look back and take a look at the year in review. What has come, what has gone, what am I working on, and what am I thinking of going into next year? Let's take a look...

In January, I was at a pretty low-point in my life. Things weren't particularly looking up, my job was making me miserable to an all-time low, I was having relationship issues with my beloved wife, I was still coping with the reality that my life had been forever changed by the fact that I had a 17 month-old son, we were financially unstable (read: broke as a bad joke), I had just started to have the positive effects of my anti-depressant kick in, and was probably suffering from a severe vitamin D deficiency (the life of a Pacific North-Westerner [US]). My near life-long battle with depression had lead me into that stage right after you get help: being angry at yourself and everything around you. Angry that you let things get to where they are, angry at things you had done or not done, angry at people, often for no reason... Anything and everything, actually. I still fight with it, even today. If I miss any of my medication doses, the next morning is usually impossible to wake up (sleep through the alarm and/or screaming toddler for 2 straight hours), the whole day is soured and everyone grinds on my nerves for no reason, I fail to do anything that needs to get done. I make a conscious effort to note these things, and prevent and avoid them in the future. It is much more difficult than you might imagine, if you have never had to experience deep depression before. Sometime during the first week of January, two profoundly important things happened: I discovered Unity free/indie, and 1GAM. There are any number of reasons why these two things in particular are important, but I'll only list the most important.

I discovered Unity after my friend Matt had mentioned that his dad pointed him to some job postings for a Unity programmer. I had never heard of it at that point, so I decided to look into it. The moment that I visited their website, and realized they had a free version, I had finally found the starting point I had been in search of for so long throughout my life. See, I've always wanted to do game development, but I grew up in an environment that was detrimentally discouraging through all of my formative years, leaving me with little motivation, and even less capability to learn and experiment on my own. No longer, I had finally found my opportunity, and whether it was the emotional roller-coaster that had become my consciousness, or the part of me that knew I had to grab hold for dear life or else suffer, I jumped on the Unity wagon for a ride. Unity gave me the opportunity to change my life, to pursue dreams I had long abandoned in a box, left in the every busy, dark, and cluttered attic of my mind. I found that box and pulled it out, dusted it off, and opened it once again. The things contained inside had deteriorated some, parts left completely decayed and unrecognizable, but it was there. It was worth saving, and would be rebuilt.

So I took Unity, and I started tinkering. Unity, when you first glance at it, is a monster. A beast of unwieldy power, with a simple interface and interwoven ideas. I refused to be discouraged, and went looking for ways to learn. They had to be there, on the vast ocean of knowledge that is the internet. It was, and I began pouring through every tidbit of information I could find. In that search, I found OneGameAMonth. A challenge to create one game, every month, for a year. I thought there was no way I could do that, since I have never successfully created a program, a game, or anything else along those lines. But I read, I watched and followed. Nothing, nothing in my entire life, has ever been as motivating as the wisdom page. Not once had I ever been told, in anything I've ever done, that I was welcome there and was exactly what I wanted to be. No one ever encouraged me like the words on that page. Nothing, and no one had ever been so inspiring, motivating, encouraging or welcoming. I read it every day for 5 straight months. Every single day, at work, at home, before going to bed, after getting up in the morning, whenever was convenient. It meant a lot more to me than even I realized at the time. But it encouraged me to push onward. All of this lead to start my first non-tinkering/non-educational project: Star Speeder.

At the start of February, I was working on Star Speeder on a daily basis. I spent hours every day working on it. Working with the controls and figuring out how to make them comfortable, working with the level layout, the right speed, the right rotations... just making it feel right. The hours upon hours of learning, testing, letting friends and family play it, repeat the cycle, was addicting. Most all of February was spent on Star Speeder. Learning how C# worked, learning about Unity, learning about coding in general. Worked on it through March, and submitted it a couple of days before the deadline. After that I decided I would aim for something a little more ambitious: a Space RPG.

I got a long way through the Space RPG. The last full week of April, I had taken a week off and jammed hard through that week to try and get more of the game finished... but I failed. I wasn't able to complete the game before the May 4th deadline. On top of that, I realized I had written some horrendous, nightmare-inducing code while working on that project. I was learning, and realized a very important lesson from that project: you should never mix functionality between classes, and keep your systems separated from one another (ex: never put inventory logic in your GUI code). I decided to start another project, that never really left the "get something moving on the screen" phase: "Speedball".

Speedball was a 2D platformer that had a little spherical robot guy that moved around and shot little yellow x-buster type projectiles and red squares. There were some terrible sound effects, no music, and just things that died. The level was randomly generated, and lead to me being obsessed with the idea of procedural generation. I still am, but I haven't had much opportunity to really put it to good use. I started this about half-way through May, but never finished it due to life events that came up. Instead, over the course of about 4 days in what little spare time I had left, I made a game called "Bwop!" that wasn't much more than clicking/popping little balls as they appeared and disappeared. No matter what, it was still a game!

June saw a huge number of things come up. I was offered a new job at the local hospital. We were preparing to move, our son was getting on towards talking, and game devving took a back-seat to all of these things, primarily the move to the new job and the move to the new house. The first half of June, though, I had been working on a minion-management/RTS type game, but put it down when I was offered the new job position. This lasted through until roughly half-way through August. At this point, I picked game dev back up and started working on a project I thought I had actually wanted to work on for years. As it turns out, after getting it started, I wasn't going to be able to make it fun any time soon. Not with the ideas I had in my head, anyway. In late September and through October I started tinkering with another project I'd wanted to start working on, but that one started to fall through as well as the difficulty ramped up and I couldn't get some important mechanics to work. It was November at this point, and I figured I could come back to it later when my skills had improved. I continued tinkering in other areas, including some AI tinkering, and path-finding algorithms. I successfully instituted an implementation of Dijkstra's Algorithm with some help from a few tutorials. I have an understanding of how it works, but will likely be tinkering with creating my own implementation of A* (A-star) soon enough. I still want to create a minion management game in the vein of Dwarf Fortress and/or Gnomoria, only with a different focus and my own little twist.

Towards the beginning of November, I realized that Ludum Dare 28 was coming up, the 48 hour game jam. I decided I was going to participate, hell or high-water. I scheduled the Friday and Monday around that weekend off work, and started practicing.

I was convinced I was going to make a 2D, tile-based game for Ludum Dare. I spent two weeks learning and writing an infinite 2D tile generation system, and then re-writing it from scratch as fast as possible to see if I could get it done inside of 24 hours. I did this right up until the Wednesday before Ludum Dare. I realized I wasn't going to be able to do it, but I didn't give up hope on either Ludum Dare, or the tile-based system. That Friday rolled around, and I prepared myself all day for the theme announcement. I wasn't sure what I was expecting, but "You Only Get One" turned out to be the perfect theme, even though I was hoping for something more along the lines of "Gravity" or "Fortress". You can see my previous posts for how LD28 went. :)

Post Ludum Dare, things have been busy. We still have many computers to refresh at work, as most of them have reached the end of their life cycle. On top of that, my wonderful son has been increasingly difficult as his two-year old mind develops, and tried to find the limits of not only what he can do, but we will let him do and what we will put up with. The redoubtable Christmas Day has passed, with less fanfare than I had anticipated this year. Thankfully, it means that life can slowly return to something resembling normal as we approach and breach the threshold of the new year.

However, I haven't forgotten about One Game A Month. I submitted my LD28 entry to 1GAM for this month. As the year winds down, I'm considering what I'd like to do for January 1GAM. I may take the 2D tile system and continue to perfect it, and building a game over it to submit for January. I'm still deciding, but no matter what, Game Dev is now a part of my life, and it will never leave, now that I have acquired the skills necessary to make it a reality.

Happy Holidays, everyone. Whether you celebrate a holiday, or are an Atheist like me and celebrate the days you get off, enjoy the time spent with family, friends and other important people in your life. The most important thing in the universe, is the time you have with them.

Ludum Dare #28 - Crossing the 48 Hour Finish Line

So, roughly six hours ago the Ludum Dare compo came to a close. I made my submission at 17:53 PST. My submission, Virtual Sniper Trials, was an absolutely wonderful experience. I had an absolute blast working on this throughout the weekend. I probably could have gotten more done if I had focused better towards the start, but I'm very proud of what I was able to finish.

This means a lot to me. Of the projects I've started and worked on throughout the year, this one feels like the culmination of my efforts and knowledge gained throughout the year. It's very simple, very crude, but I've listened to 4 people personally tell me they were having fun. Listening to them play and find interesting ways to break the game made me happy. It is incredibly self-validating to hear positive feedback, and to play the game and have a good time myself.

I'm not certain if I want to polish this up and release it, or if I want to work on another game with a similar concept or what. What I do know, is that, despite having worked as hard as I did all weekend, I want to keep going. I still have the itch to keep working on some kind of project, even as I'm typing this out. I had so much fun with working on a project and bringing it to "completion", that I just still have the itch for more. I don't know if that makes me crazy, passionate, or both. One thing it tells me, though... is that I have found something that I love doing. It really means the world-over to me.

I want to give special thanks to my wife for all of her support throughout the weekend, and her patience with our rowdy son, who just started a growth spurt. Additionally, I'd like to thank our roommate for her superior babysitting skills on Friday and Saturday. I'd also like to thank my best friends Brian and Matt for their support and encouragement throughout the weekend. And I'd like to thank all of the people who have played and rated my game from the compo, you all rock!

Sneak Peek at the Game Level (WIP)

Here's a little sneak peek the level I'm hoping to finish before the deadline. I'm willing to push it out into the jam to get this done. I'm really  hopeful though! Anyone guess the inspiration? ;)

You can play the current version here.