About Red Mike (twitter: @MikeRedhorse)

Entries

 
Ludum Dare 28
 
MiniLD 46
 
MiniLD 45
 
Ludum Dare 27
 
Ludum Dare 25
 
Ludum Dare 24
 
Ludum Dare 24 Warmup

Red Mike's Trophies

Red Mike's Archive

Postmortem — A Cycle of Ages

Posted by (twitter: @MikeRedhorse)
Monday, August 27th, 2012 9:04 am

RIP. Well, that was fun. And horrible. But still fun.

Good decisions:

  • Deciding to not use the same silly mechanics everyone was using, on account of being certain I couldn’t pull it off better than most of the others.
  • Choosing to go with a completely monochrome art style, on account of not being very good at art, myself.
  • Sleeping for at least 6 hours in the middle of the competition.
  • Dropping the target length of the game when it became apparent the performance would go down massively.
  • Recording my own guitar melody on my awful microphone, and using Audacity to somehow clean it up enough.

Bad decisions:

  • Using a single image file for each level, with the three channels describing each pixel in the game. See addendum 1.
  • Using Pygame. Over half the time was spent searching through the documentation or source code to the library due to odd errors I got.
  • Deciding to not create a robust framework, and build it on workarounds and hard code, on account of trying to stay in the timeframe.
  • Not taking a pre-emptive analysis break. See addendum 2.
  • Not posting quite as many developer logs I was hoping for. 5 is good, 10 would have been better.
  • Not setting up either a recording method to record videos to show people, or a way to stream my screen.

Addendum 1: The way I organised each level wasn’t really up to par to the huge size each of them had to have. I tried to go with the method I’ve seen used for tile-based platformers. Each level is a single image, with the RGB channels encoding information about each tile. For example, red being 0 means solid, otherwise means pass-through. This works well with tiles because you’re unlikely to have a level be more than, say, 1000 tiles by 1000 tiles. On the other hand, my game had levels that were 20000 pixels by 5000 pixels. Encoding each pixel as a pixel in the image means, yes, a 20k x 5k image. Pygame, for one, can’t load images past a certain limit (20k x 10k I believe?), and it has, second, a large overhead when reaching that limit. And I mean exponentially increasing. That’s the reason my game freezes as you move to a second level. The culprit is a single line of code, so I could have done two things: split the level into multiple images and load and stick together, or rewrite a bit of the pygame library. I wasn’t going to get either of those in the 5 hours I had left, so I left it at this, with a warning.

Addendum 2: This is related to addendum 1. What I should have done, rather than plow ahead only playing the occasional attempt through the game to check for massive errors and obvious bugs, is take a break six hours in, or even every six hours, and just play through what I have intently. Figure out if I like the direction it’s going, check for performance issues, fix everything then and there. I basically piled myself a ton of performance bugs as I kept coding, then had to fix them all at the end. Considering that, for example, if I were to fix the first bug I’d have to rewrite a good deal of the game that would have meant bugs 2, and 3 wouldn’t have popped up. However, now that bugs 2 and 3 have workarounds, fixing the first bug while keeping the same outcome would mean even more work. Basically, early playthrough-and-fix breaks, or often if possible.

Overall, I’m happy with what came out of this. To use the Ludum Dare scoring system, this is what I’d give myself objectively:

  • Innovation: 2/5 — It’s just your basic sidescroller, after all.
  • Fun: 1/5 — Not much else to do, other than follow the story.
  • Theme: 5/5 — The theme really was the focus, even if through the story and the mood.
  • Graphics: 3/5 — I like to think the graphics weren’t that awful.
  • Audio: 2/5 — No sound effects, just a single backing track.
  • Humor: 1/5 — Not much humor in it, after all.
  • Mood: 4/5 — I like to consider that with the writing and the art style, I managed to set a mood, even if a bit offset by technical issues.

Devlog #5 — END — A Cycle of Ages

Posted by (twitter: @MikeRedhorse)
Sunday, August 26th, 2012 9:08 am

And…finished. Lots of work gone into this. Solely because I was an idiot and chose badly in the beginning. Still, I’m happy it’s at least done.

Overall, I’ll say this. I’m not pleased with it as a game, since it’s…not very fun to play. As a story, I’m glad that it at least doesn’t go the ‘eat food, gain trait’ way. Technical-wise, it’s horrid. An abuse of PixelArray and pygame, everything built on workarounds.

BUT HEY, it’s done. So here we go.

A Cycle of Ages (The most pretentious name possible.)

It also has kittens. Have a picture, and the download link.

Devlog #4

Posted by (twitter: @MikeRedhorse)
Saturday, August 25th, 2012 2:08 pm

Very short break while I consider the direction I’m taking this. I’ve got two levels more or less designed. The only thing I’m lacking is three dialogue boxes and one enemy design. This design means both graphics-wise and game-mechanic-wise. I’ll consider it a while more.

In the meantime, my bad choices at the start are really affecting me now. Performance is an issue starting/restarting/finishing a level, and the memory use is a bit high. Next time, I’ll prepare a real system instead of hacking something together. A little bit of time spent in the beginning, while the idea is still morphing in your head, is much better than a lot of time spent fixing further along. I thought I knew this lesson before, but as it always happens, this creeps up on me.

Have a teaser picture of the second level. Think the theme linking is too ham-handed?

Devlog #3

Posted by (twitter: @MikeRedhorse)
Saturday, August 25th, 2012 10:57 am

Last break for today, still not much to show for it, on account of graphical design being so awkward to me. At the same time, I’ve got a very simple first introductory level almost done. Decorations and dialogue boxes I’ll be working on now.

I should mention at this point that I’ve already had a tough decision to make, when I noticed that my game was using almost 1GB of RAM. The reason for this was the way I’m loading the map into the memory, and storing every pixel as a different element in a huge list. This is obviously not very efficient, and not what I would’ve chosen for a proper game. At the same time, I’m not rewriting everything. I cut the maps in half, and it’s now using around 400MB of RAM, up to 500 during a level transition. That should be fine.

I also attempted recording my guitar for use as background music, but that didn’t really work out. My desktop mic catches too much noise, and not even Audacity can properly filter it out. I’ll give it another try tomorrow.

I’ve also got a tiny problem, in that my game currently plays exactly like one of those ‘artistic’ games, in that right now you only need to hold the right arrow key. Need to fix this for following levels. In the meantime, have a photo that hopefully won’t represent much of the actual game.

Devlog #2

Posted by (twitter: @MikeRedhorse)
Saturday, August 25th, 2012 3:26 am

Another small break, for now. Doing my own art is quite hard, and I’ve scrapped quite a lot of designs so far. I’ll leave it at that for now.

In other news, I’ve got the animation back-end in, and the little guy nods his head slightly every 60 frames now. Besides that, I’ve added loading levels from JSON files, with dialogue boxes to appear in every level. The level format is your basic run-of-the-mill pixel-in-image-encodes-pixel-traits-in-game system.

Oh, and this is what happens when you accidentally flip sprites the wrong way.

Devlog #1

Posted by (twitter: @MikeRedhorse)
Friday, August 24th, 2012 11:38 pm

Right, missed the start by a couple of hours as I got some needed rest. Turns out, the theme is the one I really didn’t want, on account of me fooling around with genetic algorithms earlier. <strong>Evolution.</strong> Genetic algorithms, unless done better than I can probably manage, are bad for gameplay. Not really intuitive, very limited, and not exactly robust.

I’ll be using Python, with Pygame. Paint.NET for graphics. Possibly sfxr for sound, and my guitar + Audacity (hopefully).

To that end, I looked into implementing the theme into the story/progression, rather than the actual gameplay. That just made me want to cringe on account of knowing the really basic biology needed to understand the huge period of time over which evolution occurs, and how Spore-like cell evolution is horrible. So, obviously, a mix of the two.

Hopefully, I can pull it off. We’ll see whether it actually works out. The biggest problem is likely to be the art, really. To lessen the impact, I’ll try and go for a minimalistic abstract style, with few colours. Have a dev picture, that looks horrible and will in no way reflect the final product.

At this point, I have finished 4 of my 10 steps to success (to be posted later): display framework without animation code, input framework, map loading/rendering, simple plaftormer physics/gameplay. Next up, adding some sort of UI that will mostly consist of start/end menus, and some sort of in-game dialogue boxes.

I’m also in

Posted by (twitter: @MikeRedhorse)
Thursday, August 23rd, 2012 4:21 am

I’ll be participating in the competition, hopefully finishing as well. Depending on what the theme ends up being, I’ll be using a subset of the following:

  • Language: C++, Python, C#.
  • Engines: Unity3D, OGRE, Pygame, none.
  • Content creation: Paint.NET, GIMP, sfxr, Audacity, my guitar.
  • Food and beverages: Adrenaline energy drink, lots of cookies, coffee, dark rum for the end.
  • Devlogs: Here, as well as on my personal site.

Good luck to everyone.

[cache: storing page]