Ludum Dare 31
December 5th-8th, 2014

Cave Ninja – Post Mortem and Stuff

Posted by
September 5th, 2009 12:31 pm

The Good

Fun tech. Not only does some tech idea stuff you want to try out make it fun to actually program the entry, it can also makes the entry interesting. Or so I hope it did. There was two things I tried out: Destructible landscape rendered with marching squares and some sort of fluid simulation.

I’ve wanted to try out destructible terrain with marching squares for some time. Mostly when thinking about doing Blastup 3, though I’m probably more for doing pixel perfect (with alpha) stuff. But still, wanted to try this approach out. It worked pretty OK, though it requires more work to be anyway close perfect. As a note, the collisions just uses bilinear filtering of the nearby grid points and checks it against the threshold, so the marching square output is just for rendering here (which really simplified things).

The fluid simulation pretty much just happened. I had a world which was a grid of values of 0 to 1. There’s a lot you can do with that. I’ve thought about similar things for earlier LDs, for the theme flood, but that theme never won. Basically, it’s like those old water simulations where each pixel is a water particle, and it can either go down or to the sides if there’s room. I just had float values instead, so the whole of it didn’t have to move. Then marching squares on top. Anyway, the lava seems to be what people liked the most, so I’m glad I did it.

The actual game idea. With the destructible terrain etc, I sort of wanted a game in between Worms/Liero and Lemmings. Which I think is what I got. It’s lacking things though (see below). Overall, I think it’s a good game idea.

Once again used the D programming language, which was good and makes most things easy (except in one place where a thing I did in a loop became very slow, which cost me some time). Also used OpenGL, GLFW and Fmod. Stuff that works pretty well and that I’m used to.

The Bad

Time, time. Lack of time. Or too ambitious project, perhaps. I spent 4 hours away from the compo helping some people to move, but I’m not sure those 4 hours would have made a lot of difference. The time issue had most impact on the level design, I feel.

The level design started out sort of OK. I wanted to introduce every new element by itself in a single level, then start combining them and creating puzzles.

Well, to start with, not all elements that I wanted to introduce got introduced. There was only one weapon, there was only one enemy type. I had planned for more there. And I had planned some cool movement tools, like a jetpack (and if I really had had some extra time, a ninja rope).

Anyway, as it were, I did get the elements that existed introduced in the way I wanted (though some levels was a bit too long, making them annoying). But then suddenly I didn’t have time to introduce more elements, yet I didn’t have enough materials or ideas to make good puzzles. So that first lead to a platform/jump level.

Then there was the last level. It got too hard. A little too busy. Even its name gives it away, it was named: A little bit of everything. Basically it had become apparent that it would be the last I had time to do, so wanted it real, if you know what I mean. Nothing tutorially. As a base there was a single good puzzle. But after making it, there was lots of room left, so got another semi-puzzle, some jumping, some digging, and some kill things. Too much. But maybe it suited as being the last level. I can tell you, even I have had trouble completing it sometimes.

That’s not the only bad thing with the last level though. The last level’s win condition check is bugged. So you only actually need to reach the star to win. I realized this bug existed after having gone to bed after just submitting my entry. So I got up, “fixed” it, and re-uploaded (it was within the deadline, don’t worry). Only the next day I realized the check was still bugged. I had added the correct check, but I had also left in a call to the base class update function, which just checked the star. So that was a waste of time.

Graphics. They turned out rather bland and boring. And dark. Noticed today that even just making the game 50% brighter helped a lot. But I’m not good at creating good textures or animate stuff, so perhaps it’s OK given the time available.

The Other

Sounds. It’s thanks to sfxr that I got any sounds at all. All in all, it might have taken 15 minutes to get all the sounds in. It was a great improvement over no sounds, but beyond that it was lacking. In addition, it seems that the sounds cut out for quite a few people — I have no idea why.

Heads up

I really recommend maximize the window to get a look at the whole level (if your screen is big enough). It’ll look bad that the level just cuts off if you have too large a screen, but even then it’s well worth it.

There’s a skip level cheat — it’s pressing F1 and F11 at the same time (as in most of me entries with levels).

I used a bit of base code and some utility code for rendering, fonts, and sound. Not really a library, just some random stuff (it’s what’s available in stdf in the source folder of the package). This is probably bending the rules a little, but I hope you guys are OK with it. Absolutely not game code.

Also, it’s not like I came up with marching squares during the compo. I’ve written a few application using it earlier, and actually adapted some old code. Writing it completely new might have cost me extra 15 minutes or so but it seemed pointless. The idea is really quite simple: For each square in the grid, start making a polygon. Check one corner, if it is within the threshold, make a point. Check this corner against the next corner — if one is out and one is in, find the point in between. Then do the same for the three other corners and edges. And that’s it.

Outro

There were probably some other things worth mentioning too, but none that I can remember now. Think I’ve responded to most stuff that I’ve got comments on as well. Overall, people seems to have liked the game, so I’m pretty happy. It’s been a good LD.

Tags: , , , , , ,


Leave a Reply

You must be logged in to post a comment.

[cache: storing page]