On Monsta Punch! — A Postmortem

I just finished Monsta Punch! yesterday. My goal with this project was to simply gain enough familiarity with Unity and Blender to be able to work at full speed before it came time to begin 2012′s big project.

Here! Play it! The character you don’t touch the controls for will get taken over by the AI after a few seconds.

It’s a simple enough game. Two Monstas punch each other until one of them wins. You have three actions: a quick punch combo, a heavy punch, and a block. Quick punches can be blocked, heavy punches can be interrupted by a quick punch, and blocks can be broken through by a heavy punch. Rocks, papers, scissors.

I was the sole developer, with Francis serving as producer during the last few days of the project.

The game was developed for the Unity engine and targeted at PC/Mac, web, and iOS platforms. Scripting was done in MonoDevelop (kill me). Character art was done in Photoshop, and animations were created in Blender.

What Went Right

1 – Art and animation: Oh my HELL did I have fun animating the characters for this game. Everyone I showed the game to loved the art style, which made me verrrry happy. I’m really excited to do more of this in my next project.

2 – Simple mechanics: The rock-paper-scissor fighting system is a lot of fun and adds a big layer of psychology to two-player matches without the AI.

3 – Architecture: Thank the gods I nuked the code base halfway through and started over. After just a couple weeks of intense textbook digestion, I feel like a leaps-and-bounds better software architect. The ease with which I was able to work with my own code at the end of the project (a rarity for me) confirms the progress I’ve made.

4 – First time writing a realtime AI: Writing AI for Fortress was pretty straightforward. When it was the AI’s turn, it could analyze a static snapshot of the game state and decide what to do. Monsta Punch!‘s AI needed to be realtime, making decisions as events unfolded. I’d never written such an AI before, but thanks again to lots of pre-reading, I was able to create a reasonably effective AI that was easy to extend and tweak.

5 – Test driven development: This was my first time using TDD, and while I got lazy with it after a couple weeks, I found it very useful and will continue using it in the future.

What Went Wrong

1 – Bad early architecture: I went into this project remembering the ASCII fustercluck that was Fortress, thinking that this time will be different. It wasn’t, and I ended up nuking everything after it became clear I was repeating old mistakes.

2 – No tuning or tweaking: This was by design, as I was only going for “good enough”, for extremely forgiving interpretations of “good enough”, but still, the game has very poor balance. The AI is dumb dumb dumb, and you can easily win by just mashing the quick punch button. But again, making the game perfect was never the point of this project.

3 – No art other than the characters: Again, no big deal, “GOOD ENOUGH”, but still.

4 – Test driven development fail: I stopped using TDD toward the end. It didn’t bite me in the ass, but the same may not hold true in larger, future projects.

5 – My drumming: That’s me playing the drums in the background music. Sorry guys.

AND SO

I had a ton of fun developing Monsta Punch!. I learned a lot, and that was my only real goal apart from making the game at least a little bit fun. With the knowledge I’ve built, I feel like I’m in good shape to dive into Guys! Stop Pressing Buttons! and really make some good progress right out of the gate.

Developers: 1 (me)
Producers: 1 (Francis)
Budget: $3000 – Had to buy my Unity license at long last
Length of development: About two-and-a-half months
Release date: 24 January 2012
Platforms: PC, Mac, Web, and iOS devices more recent than iPhone 3GS (so iPads and anything with a Retina display)
Development hardware: Late 2008 15″ MacBook Pro, 27″ Cinema Display
Development software: Unity, MonoDevelop, Photoshop, Blender, Xcode (for iOS deployment only)
Final SLOC count: 1821 SLOC, which actually seems a bit high, but I don’t argue with my tools when they behave as well as sloccount does

Posted in Monsta Punch!, Portmortem | Leave a comment

On Suffering For Your Work

It’s horseshit.

This kind of plays back to the problem of cowboys in the game industry, but you see it in almost every creative discipline, the idea that it’s noble to suffer in the name of your creation. And let’s be fair, there are certainly subjectively unpleasant processes in every art form, from wrestling with an IDE to cleaning brushes to writing lab reports and so on. But, the fact is that you would not be doing what you are doing if you didn’t love it enough to not mind the struggles and chores of your craft.

Furthermore, in most cases, a creator gets a hypnotic charge out of focussing on every little element of their work. Every task, no matter how menial or painful, is another step towards the realization of your creative vision. Whether you realize it or not, you are likely still in a state of flow during these moments of drudgery.

If you genuinely are suffering when you work, you need to stop doing the work. Life is too short to spend all of it delaying gratification. Step away from what you’re doing and explore the world until you find something you love to do, no matter its warts of tedium. You’ll be happier for it.

Posted in iDevBlogADay, Mental Health, Opinion | 1 Comment

On Downswings and a Quid Pro Quo cum Pro Bono Producership

My bipolar rhythm has been in the trough stage for a few weeks, so work-getting-doneage has been on a deficiency kick. I finally pulled out of it yesterday, though, and probably in record time (thank you Lexapro and Abilify).

It turns out the only good way to get out of a downswing is to choose to do so. That’s both good and bad. On one hand, it means all you have to do is pick yourself up and get back to work. On the other hand, that’s impossible most of the time.

Depression is stupid like that. You know consciously how to make it stop because you’ve done so countless times over the last 31 agonizing years of your life, er, my life, I mean, wait, it hasn’t been agonizing, well, maybe yes, you get my meaning. You know how to pull out of a downswing when you’ve had depression issues long enough. It really only takes a little bit of willpower.

But when you’re depressed, you only have enough willpower to keep yourself fed and maintain the most basic hygienic rituals, and that’s if you’re doing well. Summoning the self control to flip your entire psyche right side up again takes tremendous effort.

In my case, that flip doesn’t usually happen until I hit a stratum of rock-bottomship so hyperbolic and asinine that I can only shake my head in rage and scream, “Fuck it, this is stupid!” We with bipolar call this the start of the manic phase.

Thankfully (again to Lexapro and Abilify), neither my downswings nor my upswings are as dramatic anymore. If you’re finding yourself blasting between bad moods and RADICAL moods every few weeks, look into medication. A small amount of anti-depressant combined with a small amount of mood stabilizer could end up changing your life like they did mine.

In other news, I’d like you all to welcome Mister Francis Fernandez, my new producer. Francis and I know each other as fellow Jonathan Coulton cruisers, and he was the first to answer my call for a producer two weeks ago. While he doesn’t require my services in turn, he has plenty of experience both as a producer and as a Unity developer, and we already know each other anyway, so it made perfect sense to bring him on. Already, he is utilizing such trade phrases as, “Since this is basically a short week now, I won’t need as much from you next time we meet.” My hope is that having someone like Francis to check in with every week will keep me on task and productive, which I’m certain will keep me from slipping into any more significant depressive swings. I hope I hope I hope.

Posted in iDevBlogADay, Mental Health, Progress Reports | Leave a comment

On The Nuclear Option With Regards To Test Driven Development

If you’ve been following me on Twitter, you’re aware of a little get-to-know-ya project I’ve been working on to learn Unity and Blender, called Monsta Punch!. You might have even played it (A/D: move; J: Quick punch; K: Heavy punch; SPACE: block — Note that I can’t guarantee that link will work forever).

Because Monsta Punch! exists solely for the sake of my own education, it has come along veeerrrrryyyy slowly as it frequently loses priority to reading and research. That priority reached the ultimate low point this week as I nuked the whole thing from orbit and started from scratch.

Psychotic!

It became evident to me while I was working on Fortress that I am an awful coder. More specifically, I’m a perfectly good programmer, but I’m a terrible software engineer. While I can make things happen on the screen, my code always has this kind of beautiful mind thing going on that makes it not only difficult but even disheartening to modify. This is actually the biggest reason why I cancelled Fortress: I couldn’t bear to work with its code any more.

Going into Monsta Punch!, I swore things would be different, and sure enough, things did not be different. Not 500 lines in, my Unity scripts began to spaghettify. Unacceptable. Something had to change.

I decided to spend the next two weeks doing nothing but reading. I started with the Gang of Four book, hoping for some insight into what I was doing wrong with respect to my architectural practices (I also picked up Programming Game AI By Example, mostly so I could take frequent breaks from reading about patterns). Turns out? My architecture actually wasn’t that bad. It had some suck, mind, but something else was wrong.

Changing gears, I grabbed Clean Code, which quickly proved to be my favorite textbook of 2011. So many wonderful insights that felt so obvious once I read them. If you are a coder, you must read this book.

The opening chapter of Clean Code made the briefest mention of test driven development. I dabbled with TDD a little bit in school (because I had to in order to complete the homework assignment), and randomly — thankfully — decided I wanted to know more about it. This led me to Noel Llopis’ series of blog posts on what TDD is all about and how to get started. My eyes were opened. Again, I encourage you to read up on the practice.

And so when I sat down with Unity again with a copy of Growing Object-Oriented Software, Guided by Tests looking up at me from my Kindle, the first thing I did was move my scripts elsewhere and start over. Now here I stand, the proud owner of a handful of tests that don’t do much yet, but I can already see that my code is more modular and readable. This is me hoping these last few weeks of non-productivity have paid off.

Posted in Monsta Punch!, Progress Reports, Technical, Test Driven Development | Tagged | 2 Comments

On a Quid Pro Quo Producership

I’d like to put a call out to the community at large: Would you like to be my producer?

This is a strange thing for me to ask for. Moving over to self-employment land had the wondrous effect of extricating myself from management of all kinds, and now here I am basically asking the world for someone to become my boss.

Why do I want this? Because I am the creative type, and creative types never finish what they’re working on unless someone tears it out of their hands. Thus, I desire a person to help me manage my objectives and hold me to them.

This would be a very low impact commitment, rarely more than a few minutes each week. I would need to sit down with you over Skype or IM at the beginning of the week to hash out what I want to accomplish by the time I stop working Friday afternoon. I would also report my previous week’s progress at that time. All you would need to do is hold me accountable.

In exchange, I offer to provide you the same service.

Interested? Post in the comments or email me at raymerkler@hindrances.com!

Posted in iDevBlogADay, Indie Game Development | 1 Comment

On Brain Pills

In my last post, I asked how people experience and process worry, and I got some great responses with helpful advice. However, almost all of that advice was based on one unfortunate prerequisite: That worry is something that can usually be willpowered away.

In my case, it is not.

You know how when you burn your hand, it hurts? Can you choose to not feel the pain? Sure, but it takes a tremendous amount of focus to tune it out. So it is with me and worry. I can try not to feel it, but the worry has a mind of its own. It wants to be experienced. I can’t always simply choose to focus on something else. It will fight.

Which brings me to the subject of today’s post: Pills.

Pills are good.

The problem with the brain is that it’s a thing. As a thing, it is subject to the myriad laws of the universe, from the top of its behavior as a Newtonian blob of rippling whatsit, all the way down to the lowest quantum level. Everything it does is done because it did something else previously. The inescapable consequence of this truth is that consciousness is nothing more than the perceived product of countless quantum, nuclear, and chemical reactions that we can never completely understand and that we can only abstract away into a flimsy concept we call “free will” in order to keep ourselves from going mad under the weight of the sheer horror of existing.

So we don’t get to choose what our brains do. Banish that notion now, if your brain will allow it. Thoughts, memories, emotions, all involuntary. It’s an autonomous machine. It is a thing.

But the great thing about things is that they are manipulable! Rock in the way? Yell at it! That didn’t work? Try jumping! No? Push it! Hey! That did something! The rock isn’t in the way anymore! Now I have a theory! JOURNAL TIME!

The same goes for brains. In my case, I get depressed easily and I worry excessively. So I tried some pills. First, Lexapro. Okay, that’s a start. I’m less depressed and I’m worrying a little less, but I keep getting overly excited about stupid shit. Let’s add Depakote. It’s supposed to help with manic spurts like that. WAIT SHIT NOW I’M PANICKING ABOUT EVERYTHING OH GODS I’M JUST GONNA SIT HERE IN THE CORNER OF THE KITCHEN AND SOB FOR AN HOUR. Gah. Okay. What about Abilify? Hey, not bad. I’m still getting depressed and worrying, but instead of getting bogged down in stuff like, “What if the whole world is plotting against me?”, it takes things like, “What if the bullet making its way through my leg right now hits the femur?” to get my worry gland palpating. Y’know what? I think I’ve got this worry thing licked!

Imagine that! Before the pills, I was depressed and worrytastic, and after the pills, I wasn’t. If you can read that and still believe in free will, you have demonstrated a level of stubbornness that I could never attribute to anything but the same.

Pills are great. If you find yourself entertaining thoughts that ultimately harm you, go to your doctor right now and tell them about those thoughts. Say you want to try pills. Set your pride in the umbrella rack on your way in. There’s no room for shame here, unless you subscribe to the stigma that pills are for crazy people, in which case fuck your stupid brain.

Posted in iDevBlogADay, Mental Health | Leave a comment

On Worry

I have a question for my fellow iDevBlogADayers: How much worrying do you do?

Yeah, I know, kind of out of left field there, but it’s been on my mind a lot ever since I went self-employed. I have a lot more to think about and be responsible for now than I did when I jockeyed a desk and did what I was told. Excessive worry has tended to run in my family on my paternal grandmother’s side, so I’m curious whether the worrying I’m getting up to these days is normal. How do other people handle worry?

So I ask: Do you worry often, like more than once a day? It can be about anything. Does it ever get in the way of being productive? Do you just not worry? Do you worry but then are able to process it and channel it into being productive?

Speak out in the comments!

 

Posted in iDevBlogADay, Mental Health | 7 Comments

On Fortress — A Postmortem

Fortress was a failure. That’s not necessarily a bad thing, but it was a failure. Let us acknowledge at least that, and get to learning some lessons.

First, in the interest of proper postmortem formatting: Fortress is a turn-based strategy card game designed to be played with a standard deck of cards. Each player receives one King and half of the remaining cards above 7 (including the two remaining Kings). Each of these cards represent a soldier with an Attack and Defense rating based on its face value, suit, and whether its suit matches the player’s King or the opponent’s King. Players use these soldiers to attack each other’s fortresses and try to destroy each other’s Kings. Cards valued Ace through 6 are set aside and used in place of a six-sided die during attacks.

Fortress was developed primarily by one developer (me), with art and music assets contributed by two contractors, both rookies at game development like myself. These individuals began the project under contract for shares, which I eventually bought back for various reasons. Overall, everyone got along well, with some friction I’ll expound on below.

The game was targeted from day one for iPhone OS (now simply iOS). All coding was done in Xcode, using the cocos2d package for graphics and audio.

What Went Right

1 – Based on a well-honed card game: Fortress had existed as a card game for over four years before I began making the video game version. Because of that, the gameplay was already tried and tested. The card game essentially served as a paper prototype.

2 – Early beta: I didn’t hesitate to put the game in front of people. The beta began well before the game was even remotely stable, and had dozens of eyes on it from the beginning. Feedback came early and often, and a lot of poor design decisions got backed out before they could do any lasting harm as a result.

3 – Cohesive art direction: Both contractors took direction extremely well while making their own contributions to the game’s creative vision. The graphic artist in particular had to adapt to my cartooning style, and successfully combined it with his own methods to create a silly, lighthearted motif that I hope will influence all of my future projects.

4 – Robust audio: The same goes for the musician’s work. I’m a mediocre composer, myself, but Ryan was able to take my meandering whistles and doot doot doots and transmute them into something with some meaty weight while still fitting into the upbeat feel of the visuals.

5 – Ambiance: I have to be fair. This part didn’t get done before the axe fell. But it would have been awesome. The game was meant to be accompanied by quiet ambient noises punctuating the unbearable silence of a long siege, with a slow day/night cycle gradually fading the play field from sunrise to sunset and back again. Chirping birds, nervous men clanking as they adjust their armor, crickets, lapping water. I’m really sore that I never got this done, actually.

What Went Wrong

1 – Friction within due to differing styles of time management: I’m more right-of-center when it comes to deadlines, while the artist leans more to the left. I prefer to have set milestones that I can count on being hit on time, Parker prefers to let things flow and not get stressed (and I can’t say I disagree). This caused a bit of friction in the beginning, but we hugged it out early and I agreed to loosen up on deadlines on the condition that Parker come through in a timely manner. I still prefer to hit milestones where possible, especially when there are dependancies on assets that are holding up a project, but in this case, the compromise led to less stress and better productivity in the end.

2 – Early beta: I went to beta way too early. A lot (maybe most) of the feedback during the first two or three beta versions ended up being about stuff I was already planning to fix for subsequent pushes. Lots of time wasted as a result. Guys! Stop Pressing Buttons! absolutely will not go to beta until it is feature-and-asset complete, so the focus can be on bugs and balance where it belongs.

3 – Tutorial: The tutorial was an unmitigated catastrofuck. Text text text text text. Boring boring boring boring boring. Nobody had the patience to sit through it, and so no one understood the inner workings of the game. For G!SPB!, tutorials will use as much pantomime as possible. I may even go all the way to making the entire tutorial text free.

4 – No prototyping led to poor architecture: The game’s code base was unsound from day one. I ran with a “just make it work” mentality from the moment my fingers first touched the keyboard, and almost every line of the resulting mess ended up being the foundation for the entire game model. I was also still coding like a college kid, which means the game is saddled by layers upon layers of inheritance. To be fair, the game is heavily state-based and event-driven and probably wouldn’t have benefited in any world-changing magnitude from a more component-based architecture. Regardless, these sloppy coding decisions should have been part of a prototype, not the finished product.

5 – Mental health: By a wide margin, this is the big one. Everyone who’s read my blog before knows I have to wrestle with my brain to get it to cooperate. I’m getting better at it now! But during most of this game’s development, I spent more time depressed and procrastinating than I did working. I’m optimistic that this will be less of a problem in the future, but it’s still a long road ahead. I’m going to have to work really hard to fix these issues.

The End

Fortress was a big learning experience, and I think that’s all I ever really needed it to be. I failed to get my wings in the end, but I put myself in a good position to make a successful second flight. Guys! Stop Pressing Buttons! will get done, and if it doesn’t, I will simply choose a new career.

That sounded a lot more melancholy than I intended. I’m excited about moving on! I swear!

Developers: 1 (me)
Contractors:  2, an artist and a composer
Budget: $1500 – I bought out Parker’s (artist) share for $1000, and Ryan’s (composer) for $500. I’m not counting the cost of hardware or the Apple Developer fee, since I use those for other things outside of this project.
Length of development: 2 or 6 years, depending on how you’re counting
Release date: Heh
Platforms: All iOS devices
Development hardware: A MacBook Pro and a standing desk
Development software: Xcode
Final SLOC count: 12,054 lines of code! WAY too many!

Posted in Fortress, Guys! Stop Pressing Buttons!, iDevBlogADay, Portmortem | 2 Comments

On Shelving

I’ve got good news and I’ve got bad news!

The bad news is: I’m putting Fortress on hold indefinitely.

The good news is: I’m putting Fortress on hold indefinitely!

As you can tell, this has been a simultaneously difficult and exhilarating decision. Let me tell you why in 250 words or less. Fewer, rather.

On one hand, Fortress has been Project Numero Uno for the last two-ish years. I’ve put a lot of work into it, enough for the sunk cost fallacy to kick in every time thoughts of frustration with the project enter my mind. This game is saddled by poor early-stage decisions that make it unbearable to work on, and I’m at the point now where I don’t feel like I can produce a game that I will be proud of without ripping out its guts and starting over.

Which I should really point out I will do eventually! Just not right now. Indefinitely != Forever.

SO THE OTHER HAND: Y’ever have the experience of going around with a 100 kg platinum brick hanging from your neck for years and then it suddenly occurs to you that you could just take it off and everything will feel better? That is how I felt at the moment I decided to put this thing on a shelf.

MAN.

So as of today, I’m moving on to my next game.

And that’s all there is to it!

:D <3 :D <3 :D

Posted in Fortress, Guys! Stop Pressing Buttons!, News | Leave a comment

On Cowboys

Game developers are famous for working longer hours for less pay than software developers in other industries. We like to complain that this is because our industry is run by people who don’t understand the work we do, which makes sense on the surface. It’s the owner’s fault for imposing mandatory overtime! It’s the publisher’s fault for thinking what we do is magic! It’s the manager’s fault for not knowing how to plan out a project such that it has a reasonable schedule paired with an adequate budget!

No.

It’s our fault for being such a bunch of prick-waving cowboys.

Do you like game jams? Of course you do! The camaraderie! The focus! The creativity! The collaboration! A whole weekend where the only thing you do is the thing you love the most!

What’s the first thing you sacrifice during a game jam? Sleep. Over two days, maybe you rest for, I don’t know, a couple hours in total? Why sleep, anyway, right? Sleep is for the weak! I’ll sleep when I’m dead! Sound familiar? Not only do you devalue sleep, you ridicule it! Worse yet, it leaves you exhausted before the week ahead has even begun. If you’re lucky, you’ll have made up that sleep debt by Friday. If you’re average, you’ll be groggy for two weeks.

Good thing we have caffeinated beverages, though! Who needs sleep when you’ve got a pallet of free Bawls courtesy of your gracious local sponsor? So what if you’re already obese from drinking so much sugar?

Or maybe you aren’t obese. Maybe you’re too skinny, can’t seem to build any muscle to save your life. Did you know most men build most of their muscle mass while they sleep? Same goes for women, more in terms of tone than mass. The less sleep you get, the weaker your body becomes.

And don’t forget the damage you’re doing to your immune system. Healing requires rest. No rest, no healing.

Ah, but the healthy air of competition! Really gets those juices flowing! You may not be conscious of it, but any psychologist would be able to see the tribal behaviors that go on between working groups at a really frothy game jam. Is it any wonder you hardly see any women at these events? Women want to cooperate with their community, not compete with it. As if we don’t have diversity issues enough already!

So let’s go through the list: We don’t value sleep, we don’t value our health, and we don’t value inclusiveness, all for the opportunity to work too hard. Do you think owners and publishers and managers don’t see the cowboyism in our working culture? No wonder our industry has problems!

You’ve perpetuated the perception amongst employers that all we want to do is crank out product at the expense of the rest of our lives. And for some, maybe that’s true. Maybe it’s due to depression or some other mental health issue. Maybe you don’t have a life outside of work or do anything to help yourself because you don’t want to. I would encourage you to change that mentality, because the rest of us, I would submit the majority of us, want a better life in this industry, not just for ourselves but for you, the depressed recluse, as well, and we work just as hard at achieving it as we do at our “work” work.

Let’s keep encouraging focus and creativity and collaboration, but ditch the stress and caffeine abuse and exclusion and all of that other complete fucking cowboy horseshit that we’ve told our bosses we want in our lives.

Posted in iDevBlogADay, Mental Health, Opinion, Work-Job Balance | 3 Comments