About Empyrealhell (twitter: @empyrealhell)

I am the founder of Electric Horse Software. I have a 9-5 writing boring enterprise code, so I use my free time to make games. I've been doing so for years, and recently decided that I should start releasing my games to the public. This company is my means to do so.

Entries

 
Ludum Dare 35
 
Ludum Dare 33
 
Ludum Dare 32
 
Ludum Dare 31
 
Ludum Dare 30
 
Ludum Dare 29
 
Ludum Dare 27

Empyrealhell's Trophies

Empyrealhell's Archive

Count me in

Posted by (twitter: @empyrealhell)
Thursday, December 4th, 2014 7:48 pm

Using Unity with C# for code, Inkscape & GIMP for graphics, Spine to animate things (if I get to that), and Audacity with my electric bass/guitar for music and sounds. I’m going in with a new plan this time, so hopefully I’ll end up with something a bit more polished than my last couple of entries.

Fusebox Post Mortem

Posted by (twitter: @empyrealhell)
Wednesday, August 27th, 2014 12:01 am

This past weekend I participated in the 30th Ludum Dare 48-hour competition and created Fusebox, an energy management simulation game. What follows is a summary of my experiences creating it, and what I learned from doing so. I had a lot stacked against me, and while I missed some milestones that would have taken the game from mediocre to great, I think that I did really well considering the situation. Before we can assess that though, we have to start from the beginning.

Sure-footed as a Mountain Goat

One week before the Ludum Dare competition started, I was at the local rock gym with a friend of mine. They had more than just rock walls there, and in my first (and most likely last) attempt at this whole slack-lining thing, I fell and landed sideways on my foot. It instantly swelled up to the size of a potato, and I haven’t been able to walk properly since. I have made a pretty decent recovery so far, but one thing I can’t do is sit up. If my foot isn’t elevated above my head, it swells back up like a balloon and becomes incredibly painful. Since working on a computer with any amount of comfort necessitates putting your feet beneath the desk, I wasn’t sure how it would turn out.

This is what you get for hanging out with extroverted adrenaline junkies.

This is what you get for hanging out with extroverted adrenaline junkies.

Over the course of the weekend, my foot turned out to be both more and less of a problem than I expected. By lowering my chair, throwing a pillow on my desk, and leaning back, I could actually sit somewhat comfortably for more than an hour at my desk. It required me to be a bit twisted, and it probably wasn’t good for my back, but I was actually able to sit at the computer. Had this not been possible, I had a backup plan of writing a game in javascript from my laptop, since it can’t run Unity. In retrospect, I probably should have gone that route, but I really wanted to try this out with Unity, so I suffered through.

The downside to this was that I couldn’t get into a position that was ideal for either my foot or for writing code. I was at least slightly uncomfortable the entire time, and several times throughout the weekend I had to stop and move to the couch to give my foot a proper rest. This had two side effects. The first was that I lost a lot of development time to laying on the couch with my foot on the back. The second was that in order to try and take advantage of this time I brought my notepad and did as much design and planning as I could while I was away from the computer. This is probably the main reason the game is so complicated and over-engineered.

This is the first time I've taken hand-written notes in years. I had to use one of those weird scratchy tube things to scrape my thoughts in stone.

This is the first time I’ve taken hand-written notes in years. I had to use one of those weird scratchy tube things to scrape my thoughts in stone.

What is it Even Uniting?

One of the main reasons I do these competitions is to force myself to try something new. I’ve used new engines, tools, or frameworks every time, and I’ve never made a game in a genre that I’ve done before. It’s a great way to learn a lot in a very short amount of time, and when you’ve been programming for a length of time measured in decades, it’s not a stretch to try and figure something out in that time frame. Since my current game project is in Unity, and I’ve been struggling with it since day, I decided that I would force myself to figure out and use Unity for this competition. In retrospect, I’m glad that I did, but it definitely slowed me down quite a bit.

I also chose to do a very UI-intensive project this time around, for a couple of a reasons. I felt that my foot might get in the way, and I wanted something I could work on from the couch if the need arose. I also know that I hate writing interface code, mostly due to the fact that I’m not very good at designing interfaces, and I find the whole thing very tedious. I may have been setting myself up for failure here, but the goal was never to win the competition. In all of the work I’ve done on Project Dunwich, I have not even touched the interface yet. At one point I actually had to look up how to make a button. I was starting from scratch here.

So... Much... UI Code...

So… Much… UI Code…

The Thought

Despite using tools and techniques I was unfamiliar with, and dealing with Quato growing on my foot, I felt pretty good going into the competition. I had read through the list of themes, and I focused my thoughts on the highest rated candidates from the first four days of voting. This is by no means a fool-proof method of predicting the winner, and I wasn’t writing any code or committing anything to paper, just idly thinking about the design possibilities. I ran through some ideas while I went about my day, and initially I wanted to make something with more action, since my last two attempts sort of fell flat in that regard. Most of the ideas I thought of with any amount of action seemed either too obvious, or not connected enough to the theme, and UI was another focus area, so I settled for a management sim game.

Once the theme was actually announced, I was a bit relieved that the top theme won out, since it meant I already at least knew what genre of game I would make for it. The idea was simple, connect worlds together through some interface, but give those worlds multiple, intricate layers of connection. I like to make my games hit the theme in multiple ways, and that satisfied that requirement. Connecting worlds to an energy source was the obvious take on the theme, but having them be linked to each other as well added a nice extra layer of depth to the interpretation. I’m not sure any ever notices these little touches, but it makes me feel better about my interpretations.

I'm really happy with how the planet rendering turned out. It's a shame I never got a chance to make that interface actually useful though.

I’m really happy with how the planet rendering turned out. It’s a shame I never got a chance to make that interface actually useful though.

The Look

I immediately started with graphics, since I didn’t think there would be very many, and I wanted to get it out of the way. I drew up a mock interface, some icons for the planet stats, and some graphics for the planets themselves, and actually had something passable by the end of the first night. I have used Inkscape quite a bit over the past few months, but I had never done clouds or noise in it, so that was a fun little challenge to overcome. In the end, I spent less than four hours total on graphics, and I’m glad I didn’t have to fight with them at all once I got into the interface code.

With graphics in hand, I set to create the game objects and renderers that would use them to actually put the images on screen. Unity actually made this really easy, though I have no idea if the setup I used is proper for an entity-component system. Since most of the game objects were just data containers, that didn’t take very long, and well before the half-way mark, all I had left was to write the code to process the interactions on the game objects, and then do a whole lot of UI work. After a brief stint on the couch to rest my foot, I started in on the UI.

It is a damn good thing I don't have to actually draw interfaces. I drew it and I can't even tell what's going on in some spots.

It is a damn good thing I don’t have to actually draw interfaces. I drew it and I can’t even tell what’s going on in some spots.

As I mentioned earlier, I had no idea how to approach the interface. I created things using GUIText and GUITextures, I switched to converting screen coordinates to world coordinates and driving the UI with game objects, and eventually discovered the OnGUI method and settled on using that. Throughout the course of the day on Saturday I created as many interfaces as I could, to enable interaction with the game objects. I could just as easily have started by coding that all into the setup and working on the simulation, but that seemed like it would be harder to iterate on. Once I learned how to make the interfaces, it was a pretty smooth ride of create, test for usability, modify, repeat. I didn’t do things in a very efficient way, there’s a lot of copy/pasted code for UI stuff, but I just kind of zoned out and started writing.

The Logic

By the end of Saturday, I had about half of the interface done, and none of the game logic. That seemed like a bad situation to be in, so I set out to right that first thing on Sunday. Since I had spent a fair amount of couch time writing out notes on how I wanted it to work, that actually went pretty fast. The logic is pretty complicated, there are a lot of moving parts that determine how the hardware will react, and how the planets will respond to their situations. The biggest problem with all of that is that I couldn’t get the interfaces done in time to actually explain all of that to the player.

My half-baked attempt at a tutorial. The best part is that I didn't even get to implement some of the stuff I explained in here. Super useful.

My half-baked attempt at a tutorial. The best part is that I didn’t even get to implement some of the stuff I explained in here. Super useful.

The final interfaces were the ones that told you what was going to happen when you advanced the day, and the one that you manage your circuit board. You know, where you actually play the game. I knew what needed to be done, but by Sunday my foot was in open revolt against me. I spent a lot of that final day on the couch resting, and with nothing to plan, I just sat there mentally writing interface code to draw out how I wanted it to look. The funny thing about mentally writing out code, is that it’s a completely useless activity. When I felt good enough to try and implement it, everything fell apart on me. I had planned on whipping up those last two screens and then playtesting the game for bugs and balance. What ended up happening was a mad dash to get the interfaces working that ended about 15 minutes before the deadline.

At Least I Finished… Sort Of

I decided that I was done, and 15 minutes wasn’t enough time to get any of the last things I needed from where they were to where they needed to be to even be passable. I set to build my project and upload, and then Unity decided to remind me why I hate it so much. Apparently the method I was using to color the planets with HSV colors was only available when you ran the game through the editor. It wouldn’t even compile. Fortunately, HSV to RGB implementations are a easy to code, so I started throwing one together. In the past I’ve worked on them with hue being an angle from 0 to 360. Unity’s method had it as a float from 0 to 1. No sweat I thought, I’ll just multiply it by 255. If that doesn’t make sense to you, it’s because it shouldn’t. All of the planets turned green because I mixed up angles with rgb values, but I didn’t have time to figure out why. Up it went, and just like that it was all over.

I’m glad that I made the choices I did. I learned more about unity and its UI features in this past weekend than I have in the past four months. Sure, I could have scrapped the planet interface and focused more on good UI, and I probably would have been better off spending time on tutorials rather than tweaking button positions. Given the constraints I was working under, I’m really happy with how things turned out. I do have some ideas for how to improve next time though.

  • Simple design with good balance – I had so much time away from the computer that my end product was as overly complicated mess, and there’s really no way for the average player to figure out what’s going on. Having a more simple design with a better balance would have been a better approach. Instead of having four types of compatibility and a two-hundred line calculation for fuse load, cut it down to two stats and spend more time on making sure the numbers work out over the course of the game.
  • Interaction before eye candy – My planets look way better than they need to for a game that is mainly driven by button clicks. If I had put that off until the end, I would have been able to see that before wasting time on them, and I might have had time to implement things like a proper tutorial or a win condition.
  • Playtest as early as possible – I put the core logic off for so long, that by the time I had it finished, I was already in crunch mode. This left me no time to make sure the numbers worked out, or that the game was even fun. With a game like this there’s really no excuse, I could have had unit tests written to test out the formulas and algorithms through all 100 days by Saturday morning if I had prioritized it. Good balance is going to be my main goal for next time.

That about covers it. I had a good time, and in the end I have another game to throw on the website and say “look what I can do in a weekend.” No matter how bad I do, or how stressful it is, that sense of accomplishment will always be worth it.

And back in again

Posted by (twitter: @empyrealhell)
Friday, August 22nd, 2014 3:23 pm

I’m in, using unity, inkscape, spine, and audacity.

I also wrote a random name generator in javascript that might be helpful for people. It’s up on plunker right here, if you want to use it as a tool, or grab the code and use it in your entries. I’ll probably port it to C# at some point during the compo. If anyone wants that, just let me know and I’ll post it on github or something.

I threw my hat into the ring for the second time as a solo entrant in the 48-hour competition, and here is a breakdown of how it all went developing my entry Darkness Shines Through. I realize this is a bit late, but it’s been a hectic week for me, and I didn’t have the time or the drive to do this until today. Ludum Dare takes a lot out of me, and trying to rate a large number of games to get widespread exposure is almost more work than making the game in the first place. Almost.

Man against machine

If you’ve followed this blog at all, you know I’ve been making games for a long, long time, as a hobby. I was content to put my prototypes out to my friends and family and leave it at that. A while back that all changed, and I decided to try and go public with my work. After making a moderately popular Minecraft mod that took almost two years to write, I decided to go much smaller scale to save my sanity and have a better chance at finishing something cohesive. I tried to make an RPG, but I bit off a bit more than I could chew at the time, and when Ludum Dare 27 came around, I decided I would give it a go. I’ve always thought it was a fun idea, and that seemed as good a time as any to give it a try. It went pretty well, I turned that game into my first commercial product and earned my first dollars through making games. The feeling was incredible, though the project was a bit underwhelming as it didn’t exactly target the broadest of audiences. I finished up the final touches on the last patch for that game a mere week before this round started; the timing couldn’t have been better.

About a week before the contest started, I decided I was going to try and use Unity this time around. Despite the few hiccups I ran into, I largely enjoyed my experience with LibGDX, but I would like to branch out into the console market, and Unity provides me an easy way to do that while still making small PC games in the interim. I only had a few days to try and learn how to use Unity, and that simply wasn’t enough time. I’m a programmer, I write code, it’s what I like to do, it’s how my brain works. I was not able to easily adapt to the much-more-visual style of development that Unity presents, so at the last minute I scrapped the idea and went back to LibGDX.

LibGDX is like my fried chicken. It's not what I wanted to be eating, but it's so tasty. Photo by beketchai via Flickr

LibGDX is like my fried chicken. It’s not what I wanted to be eating, but it’s so tasty. Photo by beketchai via Flickr

I also thought this would be the perfect time to give this whole game development streaming thing a go. I’ve seen it around quite a bit, and while it really didn’t sound like a good time to me, I’ve been working on breaking out of my comfort zone to get my name out there. After a few snags with that, I finally got things up and running. Sort of. For whatever reason, Twitch would not update my status from offline, no matter how online I got. Others could view my stream, it was up and running, but I was listed as offline which meant nobody could find me; I didn’t show up in the Ludum Dare list of streams. In getting set up I had to switch my account from being a Justin.tv account to a Twitch.tv account, so I assumed it was because of that, and declared myself ready.

Man against theme

As soon as I knew I would have the time to enter, I started looking at the theme voting. There were some great themes, some that were mediocre, and some that I could do naught but roll my eyes at. As the list narrowed down to the final twenty, my brain went into overdrive. Every theme I read, my mind would flood with ideas of how I could possibly interpret that theme in a way that wouldn’t be overdone, and wouldn’t be out of the reach of my capability. I jotted down the best ideas that came to mind; nothing more than an elevator pitch and maybe a title, but it helped me not go crazy in the days leading up to the event. In the end I think I wrote down about 15 different ideas, each able to be tweaked to fit one of a couple of themes depending on what the actual theme was. I even tried to give myself a leg up by looking at the voting stats for the first four rounds to get a best guess at what it would be. Don’t do this, kids, it doesn’t work and it’s not a good use of time. When the theme was announced, I looked at what I had for that theme and realized I hated it.

I took parts from what I had written down; it was a platformer, the surface I was delving beneath was the facade of a small town of cult members, and there would be no combat. Outside of that it was back to the drawing board. In the first hour after the theme was announced, I started up my Twitch stream and started brainstorming. I decided to go with stealth as the conflict mechanic to replace combat, and to go with a horror-game feel. Making a stealth game in 48 hours that feels satisfying is no easy feat, so I decided to downplay that aspect in favor of a metroidvania-style of exploration. The stealth would still be there, but instead of being an epic struggle like Mark of the Ninja, it would be something more along the lines of blasting away Skree bats in Super Metroid. Something to get in the way and maybe slow you down a bit, but not really the focus. I came up with a list of must-have features, should-have features, and nice extras to add if I had time to spare. I felt good about it.

Stealth was to be my broken escalator. Sorry for the convenience. Photo by Kevin Simpson via Flickr.

Stealth was to be my broken escalator. Sorry for the convenience. Photo by Kevin Simpson via Flickr.

Man against time

By the end of the first night I had a simple platformer up and running. No graphics, no sound, just boxes jumping around and going through doors. The last time I did this, I had a horrible method for getting level content into the game, it took forever, and I nearly didn’t finish as a result, so one of the first things I set up was a streamlined process for getting levels from Tiled into my game. That turned out to be a crucial feature later on, so I’m glad I nailed that down early. My other biggest shortcomings last time were a lack of good audio, and the fact that the game was insanely hard. Audio was easy, I just had to prioritize it higher, and to address the second issue I pulled a page from the Bioshock playbook and made death a non-issue. I simply teleported the player back to the start of the map if they got caught. No loss of upgrades or progress, just a small inconvenience, and one that was easily avoided by entering a door. Going into day two I had a plan and felt on track.

I had convinced a friend of mine, the one with whom I am currently building a ping pong table, to try his hand at the solo competition for the first time. On Saturday he came over and set his laptop up across from me, with the idea that we could bounce ideas off of each other, and when the time came we would have easy and quick access to a playtester. This also gave us the opportunity to try and finish painting our table. None of those things ended up happening, but it was nice to not be locked in solitude for the entire event. I am seriously considering trying to find a local gathering for the next one, the extra human interaction was a bit distracting at times, but it helped stave off panic in a big way. What didn’t help was the fact that trying to stream was causing performance issues and eventually crashed my computer. Being behind didn’t help either.

By the end of day two, the panic had set in. I felt like I had over scoped, I felt like there was no way I could finish, and my mind was going at full speed when I tried to go to sleep the first time. I had fully animated, randomly assembled characters, tiled graphics loading from the map, and all of the music complete, but the gameplay was still missing a fair bit of what I had originally listed in the mandatory category, and I hadn’t even started on the level design. I tried to think back to where I was the last time, but my memory was hazy, I was tired, and I felt mentally drained. After kicking around in bed for about thirty minutes with no sleep in sight, against my better judgement I went back to my office and sat down for some more programming. I managed to get a buggy version of one of the planned platforming moves up and running in about twenty minutes, and while it wasn’t a huge milestone, it set my mind at ease that all of my architecture up to this point had put me in a good place. It seemed like a lot, but it would go quickly.

My mind was calm. Well, as calm as it could be, given the circumstances. Photo by Robert Grant, via Flickr.

My mind was calm. Well, as calm as it could be, given the circumstances. Photo by Robert Grant, via Flickr.

Man against self

On the final day, I was all drive. I became hyper focused and started chewing through features like a programming wizard. Within the first few hours I had all of the movement upgrades I had on my mandatory list implemented with only a few bugs that I waved away as being a casualty of speed. Stealth was working, the enemies would spot and react to the player. I wanted the whole town to react to the player being spotted, like invasion of the body snatchers, they would point and scream, and some flying cultist would come in and knock you out. Instead I went with a simple screen fade and called it a day. With about four hours left, I had all of my must-haves but two put in, and after deciding that I had time for neither of them, looked at the list of cool extras. I really wanted to add windows to the buildings, have them react to the sound of the player and open with a short delay. They would spot you just like the cultists, and the result would be the same, it just added an extra dimension to the game. I started drawing, got the graphics for them ready, got the code for how they would react written up, and with about three hours left, realized I didn’t have time to tweak the level editor and loading code to put them into the game.

I got pretty upset with myself for wasting that time. It was time I should have been using to finish the level map. Then it hit me. I hadn’t even started the level map. I panicked hard. I wanted backtracking and exploration, how could I design all of that in just a couple of hours? Fortunately, the pipeline I had set up for myself at the start saved me. The process was so streamlined I didn’t even have to close the game to load in the new map. With the editor on one screen and the game running on another, I was throwing down tiles like a fiend. After the first hour I was probably a quarter done with what I had initially envisioned. Instead of trying to finish that goal, I started throwing upgrades into existing places on the map. I added a few ledges to make the tops of building accessible with the right upgrades and stashed things all over. It changed the feel from what I wanted, no more sprawling exploration, instead a densely packed town with a collectible around every corner. The town was done, all I had left was to design the final area of the map, the church, and slap it into the game. Then I looked at the clock.

I had minutes left. Less than ten of them. I had lost track of time completely, but at least the town was done enough to play. After taking a deep breath, I made a giant empty room and put it into the game. I coded up the triggers for that map, which didn’t end up working anyway, threw in the entrance and exit, and then checked the time again. Five minutes. In a frenzy I played through the game one last time to make sure it could be beaten. With just two minutes to spare I saw the ending screen, threw my hands up and called it done.

Close enough. Photo by Mr.TinDC via Flickr.

Close enough. Photo by Mr.TinDC via Flickr.

Man against society

After I finished, worked through a stupid compatibility issue with the web version and got both versions uploaded, I took a break. I watched a movie with my oh-so-patient wife who was crucial to me not breaking down and quitting, ate some food, and just let the experience wash over me. I had done it again. Sure I didn’t get everything I wanted, or even felt I needed, in the game, but it was a product you could play from start to finish. I felt accomplished. After talking with my wife about it, she reminded me that it was just as last-minute and hectic the previous time, so at least I didn’t get worse. The game was done, but now the real challenge began. Trying to get people to care about my game.

Ludum Dare is nice in that you can steer a lot of people to your game just by voting on the entries of others. So I did that. I did that a lot. To date I have rated almost a hundred and fifty entries, which has consumed almost all of my spare time for the past week. The feedback this time around is much more positive than last time. The only glaring issues seem to be the occasional glitch in collision that results from how I handled the crouching, and the lack of a coherent introductory period in the game. Nobody seems to think it’s too hard or not fun, so I’m feeling pretty good this time around. In particular, the audio seems to be getting high praises, and since that was my worst score last time, I can’t wait to see how it turns out this time.

There are a lot of good entries this time around. Some make me feel inadequate and awful, some show a lot of promise but have a few design flaws, and some make me feel like other people don’t take this event quite as seriously as I do. It’s hard to be fair and impartial when judging, and often times the description can alter that in drastic ways. Some people didn’t get started right away, so I can understand why their game feel incomplete even for a dare entry. Should that mean they get a better score for a less complete game? I’m awful at dealing with people, so rating entries is a taxing process for me. I try to leave constructive feedback on every entry I rate, and while it makes me feel more like I’m part of the community, I think my blunt nature has left a sour taste in more than a few mouths. I try to state both the positive and the negative, but when there’s not a lot of positive, it can be hard to seem sincere with coming off as being negative.

I'm about 99% confident he's talking to me. Photo by Surian Soosay via Flickr.

I’m about 99% confident he’s talking to me. Photo by Surian Soosay via Flickr.

Initially I was going to list my favorite entries I had played so far, but since this article is already way longer than I wanted it to be, it will have to wait for another day.

This is happening

Posted by (twitter: @empyrealhell)
Tuesday, April 22nd, 2014 9:34 pm

Try and stop me! Second attempt at the 48-hour competition. I’m going to be using Unity for the first time as my engine of choice. Graphics courtesy of Gimp and Inkscape, sound courtesy of Audacity and Anvil Studio. I’ll probably use Editpad to organize stuff and maybe write some things.

In Vivo hits the market!

Posted by (twitter: @empyrealhell)
Wednesday, April 2nd, 2014 7:39 pm

After slaving away for months on the post-competition version of my Ludum Dare #27 entry, it’s finally here. A fair bit has changed since that 48-hour demonstration, and I’m pretty happy with how it turned out. The core of the gameplay is the same. You still run around an alien UFO trying to figure out how to escape, alternating between a memory exploration and a frantic dash to achieve your goals in a very limited time window. The time limit changed for the sake of playability, 10 seconds just wasn’t enough time to get any meaningful play out of. There are a couple of new upgrades, and the aliens are all over the ship just waiting to gun you down if they catch sight of you.

Head to my website to download the demo or buy the full version

 

The long road I spent a lot of time working on this game to take it from a concept to a game I would be happy to release. When I compare the difference between the two versions it’s kind of amazing. The depth of gameplay that I wanted to present in the initial entry was far too much for 48 hours, and fortunately I realized that pretty fast. The version that I released last week has every feature that I originally planned to put into the competition entry, and between that and the improved graphics, it looks like I missed the mark on my time estimate by about 500 hours, give or take. Without further ado, here’s a rundown of what you can expect in the full version.

  • Less punishingly difficult. The time limit was increased from 10 seconds to 30, puzzles were made much more flexible so you can solve them in any way that makes sense, and the collision system now has rounded corners so you don’t get stuck on the terrain.
  • Drastically improved graphics. The resolution on all graphics was increased by a factor of four, there’s a lot more diversity in the environment and the aliens, and some shaders were implemented to add pretty effects like the clouds in memory mode.
  • Better music and sound. No more computer-generated sound effects that grate the ear, a full score of actual music in the background, and more sound effects for things that happen in game. It’s an even better improvement than the graphics.
  • A bigger, better map. The map is roughly four times the size of the one used in the competition entry, it features more dynamic objects to interact with, and has better segmentation to help you understand and navigate the space.
  • More upgrades! While the first upgrade was taken away and given to you as a default ability, the remaining four upgrades are still there, along with seven other upgrades ranging from teleportation to the ability to use drugs for status effects.

If you want the full details on everything that has happened since then, you can check out the development blog at my website. Thank you all for making my first ludum dare experience a great one, and giving me the kick I needed to finally take get past the prototype stage and release a game.

In Vivo

Posted by (twitter: @empyrealhell)
Sunday, August 25th, 2013 7:31 pm

This a mirror of the post I made over at my blog.

I just finished my first Ludum Dare competetion, and I wanted to take some time to reflect on the process. I’m going to describe my general thought process and state of mind at key points throughout the process. If I do this again I might make smaller blog posts along the way, but for this one I simply did not have the time.

When the last round of voting came up I took a look at the options. I saw a few that I liked, and came up with a few vague ideas that could be easily tweaked to fit a variety of themes. I was at the gym on Friday when the theme was announced. I had my phone sitting in front of me on the treadmill just waiting for the clock to tick over. When it did I was confused, I saw 10 seconds and immediately thought it was a delay or something related to the timer. After I finished my run and hit refresh a few times it clicked. My concept for 10 seconds also included space and replication, so as I got in the car to head home, I started tweaking the idea to emphasis the selected theme, and iron out some details.

I tend to over design things. It’s a problem I have always had, and knowing this I probably should not have given myself so much time to work on design without any code, but when I got home I drew up some character prototypes in photoshop, sketched out a basic map and then went out to eat dinner. 48 hours of uninterrupted time is hard to come by when you are married, so I talked about the contest and what exactly it would entail with my wife over dinner. My wife is not a gamer, but I pitched her my idea anyway, and the artistic aspects of it appealed to her, so I felt confident. The issue was that at that point my design was far more than I could code in the time I had remaining. It was obvious to her, but I’ve always been a bit cocky about my coding speed.

After dinner I set to work. I sketched up a basic map, ironed out the gameplay details and set to rewriting the boilerplate code that I needed to get it up and running. I used LibGDX as my engine, and I while I’ve made a number of prototypes in it, this was my first attempt to actual release something with it. I realized about half way through the setup that I had no idea how to build or release this project. Those were problems for later, I had a lot of code to write. I was up until about 1:00 am working on it, and I ended the day pretty satisfied with my progress. Nothing was actually playable, but my data was all structured, I had my code organized and ready for the coming barrage. I’m glad I did that, because towards the end my adherence to standards started to dwindle and without that solid base it would have turned into mush.

This was just a mock up done in photoshop, none of this was coded yet.

This was just a mock up done in photoshop, none of this was coded yet.

Saturday was a blur. I wrote more code than was healthy. I had coffee for breakfast and didn’t eat lunch. This was a bad idea as my body started complaining at around hour 12. I had the character moving, most of the graphics were done, the map file was coming together, I was in the zone. At one point I read the same line in the data file three time looking for something that wasn’t even in that file and I decided a break was in order. My wife welcomed my return to the real world for a few hours to eat dinner. We ordered a pizza and threw some X-Files on the netflix. A quick aside, “First Person Shooter” may be the worst X-Files episode ever made.

The fact that the next episode in the list just happened to about video games was a fun coincidence.

The fact that the next episode in the list just happened to about video games was a fun coincidence.

After that I dove head first back into the code. There were still gameplay actions not coded, only half of the items were in, and I hadn’t fully designed the map. There was a lot to be done, and looking at what I had I wondered where the time had gone. Surely this wasn’t the best I could produce in 12 hours. It was mostly data management and rendering code. Probably my worst decision was to not use Tiled to do my maps. I cracked open a hex editor and got down and dirty with the bits. It worked and I’ve done it before so it wasn’t hard, for the map data it was just fine, but for the rest it was a bit of a mess. I was hand counting byte offsets and doing hex conversions in my head, not the most efficient way to make a good design. I switched to using Tiled just to map out how I wanted it to look, but I was too deep into that format to change.

This is what a bad decision looks like.

This is what a bad decision looks like.

Towards the end of the night I was losing focus. I couldn’t concentrate, it took me 20 minutes to add one item to the map. No sweat, I’ll do something easier, and the map still needs to be fully designed. After a long, painful hour of drawing in tiled I had finished my map design. It was untested, I didn’t know if players would be able to make the runs necessary within the time allotted, but I was done. Sleep did not come easy, my head was still reeling with what I had left to do, but eventually I drifted out. I woke up to my dogs going crazy about something stupid, what I’ll never know, but the damage was done, and hey, I had an extra hour to work I wasn’t counting on.

As the morning went on, the pieces started to fall into place. One after another, things were getting to a release-ready status. Yeah, some of the newer methods had comment like “This is the method that handles telekinesis” and my controller that was originally only supposed to handle the 10 second run phases had ballooned to handling the entire game, but hey, it was working. About two hours before the deadline I had it playable. Start to finish, you could beat the game, as intended. With the last two hours I added a splash screen, main menu and ending screen, as well as figured out how to put sound effects into the game. I have to hand it to the guys at bad logic, their sound library is incredibly easy to use. In the end, a game was made, I had fun, and I took a break to play with my dogs and talk to my wife.

The screen shot I submitted with my Ludum Dare competition entry

The screen shot I submitted with my Ludum Dare competition entry

There are a few pieces missing. No background music, the sound effects are obviously tacked on, and I forgot to change the logo on window. The flavor text indexes are off, another issue with using a hex editor, and I didn’t get to add the other humans to the beds throughout the ship. Even with all of that, I’m pretty pleased with how the game came out. If I do this again in the future, there are a few things I know now not to do, but I think for my first time doing the dare, it went pretty well.

Download In Vivo

You can find the ludum dare entry page here.

Run, 10 seconds, run!

Posted by (twitter: @empyrealhell)
Saturday, August 24th, 2013 4:03 am

After a bit of design and graphic work, I think I’m off to a good start for the first day. I have about 80% of my graphics done, most of the gameplay flow, and about 1/3 of the story.

The basic premise is that you are an alien abductee who wakes up from your drug-induced sleep. You have 10 seconds until the effects of the next dose of the drugs kick back in, and you must escape from your captors and get back home. Each time you fail, you are given a chance to review your memories up to this point by exploring the ship with no time constraint, but only able to go as far as you have already gone, and look at things you have already seen. It’s playing out sort of like an adventure game, with most of the gameplay being puzzles of some sort. A few alien genetic modifications act as upgrades that persist between your 10 second bouts of consciousness, and items scattered about the ship that you interact with are put back in place by your captors after they drag your slumbering mass back to your exam room. Here’s a screenshot of the starting room.

LD27

 

The gameplay goals I’m trying to balance here are a sense of urgency during the timed periods, and a sense of exploration and discover, during the “memory” phases. Essentially, the player will run through the stages as fast as possible while active, making sure to get close enough to things to get more detail on later. During the memory phases the player can explore the world at a slower pace, inspecting each item, looking for clues as to where to go next, and reading up on some of the extra story bits. At the end of the game, once all upgrades are attained and the player discovers the right sequence, a final 10 second run through will take the character from waking up to victory.

I’m not sure if this is a bit too ambitious for a 48 competition, but I’m hoping that the limited size of the map and relatively short game time will keep it in check. Time for bed now, tomorrow is all about code.

bg1

LD27, I’m up in you so hard right now

Posted by (twitter: @empyrealhell)
Friday, August 23rd, 2013 12:29 am

I see a lot of these posts, but didn’t see a requirement for it in the rules, so I’m not sure if this is necessary, but it can’t hurt. I’m working on my first for-profit indie game at the moment, and this seems like a welcome break/distraction. I’ve never LDed before, but I have binged and made entire prototypes in a weekend before, so this seems like a fun challenge.

  • Language: Java
  • Libraries: LibGDX
  • Tools: Eclipse, Photoshop, Audacity, bfxr

Most of the themes seem to have a lot of potential; I have high hopes for this. Anyway, enough rambling, good luck and happy coding.

bg1

[cache: storing page]