empyrealhell

LD27

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

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

Run, 10 seconds, run!

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

In Vivo

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.

Comments

ihatetothink
02. Sep 2013 · 07:28 UTC
Your code looks so clean! and an awesome game!

LD29

This is happening

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.

Dare to Scare – reflections on the making of a creepy game.

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.

Tags: post-mortem

LD30

And back in again

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.

LD31

Count me in

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.