Sunday, February 3, 2013

A New Start, a New Project, and Keeping Motivated

A lot has happened in the past month, and I've decided I want to keep a fairly regular journal as I move forward.

First of all, I lost my job as Producer at Cricket Moon Media as of January 31st and am now pursuing a new job making games. It was an amicable split, and I learned a ton in my time there and received glowing references from those I worked for and with, but that's part of the risk in the games industry. It is a ton of fun and an exciting field to work in, but it certainly isn't stable.

At about the same time that I learned I was losing my job, Gas Powered Games laid off almost their entire workforce. Chris Taylor, the CEO of GPG, has been very forthcoming about his reasons for doing so, and I was lucky enough to get to meet with him during the Washington Interactive Network's 2013 Power of Play Conference. He's a good man facing some hard times. It seems to be a bit of a trend across the industry - later that week THQ finally announced their final bankruptcy and laid off all of their staff. Scary stuff.

I've been looking for work, applying to various companies in the Seattle area, but it's early yet. To keep busy during the downtime, I am working with my friend and former GPG employee, Vincent Leone, on building a game in the Unity Engine. I am teaching myself more about programming by doing Python tutorials and the excellent C#/Unity Tutorials over at BergZergArcade.com, and have been making fantastic progress.

When Vinny got ahold of me and asked if I wanted to work on something together, I was absolutely thrilled -- this is what I needed! A partner and a project to keep busy, to give me goals to learn new things. It was time to put what I'd learned over the past five years, through DigiPen and Cricket Moon, and put it to work.

My first task was to learn more of the basics of programming from scratch, building on the rudimentary exposure to Python I was given at DigiPen. As an art student, we don't get nearly enough of an opportunity to learn programming basics, so this was a wonderful chance to dive in and figure it out.

I gave myself a project I knew I could handle - building a Dungeons & Dragons-style character builder and combat engine. First I set up a basic dice roller, then used that function to create specific dice roll types, such as stat roll (3d6 six times, pass the results into a list), combat rolls (1d20 + stat bonus, check against target) and similar sets.

By building the stat roller, I could then display each roll result and ask the user to assign the number to a stat, remove the item from the list and repeat the process for the next stat. Once completed, I calculated the stat bonuses per attribute, applied them to various other attributes (health, armor class bonus and other defenses, damage bonus and to-hit bonus), had the player select a race and apply attribute bonuses and/or penalties based on the race, then print the completed character sheet. Pretty sweet stuff! It was great using a set of mechanics I knew by heart and could tweak and hack to teach myself the basics of this new language.

Once I had a character set up, I was able to generate a monster - I pre-set a handful of monsters, like Rats, Slimes, Trolls and a Dragon, and gave each of them various attributes and experience points. Once the monster was selected, the player could encounter them, attack them or run away like a coward. The program would calculate the player's attack first and display the results ("Roll was a 13 + 3, target was a 9! You swing your at the , cleaving into its flesh for points! has / hp remaining."). If the monster was killed it would assign xp to the player and allow them to continue searching. If it was still alive it would attack the player, and so on.



Pretty rudimentary stuff, but it only took a day or so, then another day to completely rewrite it more efficiently once I learned what I was doing. Fun!

From there, I've been taking what I've learned and going through the Hack & Slash tutorial over at Bergzergarcade, which is very much in line with what I had in mind for the roguelike. When Vinny first asked to work together, we got together and planned out what the project would be in as much detail as we could in an evening, breaking the core game down to the most base components and figuring out where our first milestone would be. What would it take to make this thing into a roughly playable prototype? From there, I would take the elements and break them down into further steps while trying to flesh out the details of the entire project as a whole.

I've gone through the first twenty or so tutorials, building a basic movement and AI system just to get the feel for the language and engineering process and how it differs from Python and learning better technique. Next was building the character generation, which required building a series of scripts that others would inherit, then creating instances of them and tying it all into a GUI. That's as far as I've gotten tonight, but tomorrow marks the real start of the project - we're doing daily check-ins at 10 am and plotting out the project and hacking away at it piece by piece. I need to spend a lot of next week working on documentation, planning it out in more concrete detail. A lot of this project stems from a road trip conversation with my friend Karl Parakenings, where we spent three days hammering on and elaborating on the ideas presented in the roguelike as a genre and what they could mean given a certain perspective, then gestating in my head ever since, so there is a lot I want to get down. I find the documentation process to be a lot about discovery and revelation, and there are so many ways this could go that it will be a lot of fun to really tie this concept down and begin building it.

I'm going to try to keep this journal updated as much as possible - at least weekly if not more frequently, and would like it to serve as a development journal for this project.

I'm looking forward to seeing where I'm at this time next week.