Posts Tagged ‘ld48_15’
This was probably the best Ludum Dare weekend I’ve had. My game was more than just a tech demo or an ‘unfinished’ idea. Of course, they never are truly complete after 48 hours time; there is always something else that can be tweaked or added. When all was said and done, however, my entry was a playable game.
The theme was not one that I had put much thought into before it was announced so I really had zero ideas at Go time. One thing that kept popping into my head was the Kroz series of games by Apogee software back in the late 80′s/early 90′s. They’re all pretty much the same engine with a new collection of levels, but one was called Caverns of Kroz. The object of the game is to take your hero through twenty or thirty levels to find or capture some relic. Along the way you had to run, whip or out-maneuver swarms of monsters and solve puzzles. I had always thought those games were neat, and it would be interesting to try and ‘recreate’ some of that nostaliga. Caverns of Kroz didn’t have anything special that made it more caverny than the rest in the series, but I thought I could do better with actual graphics instead of ASCII art.
One of the first things I do in a LD is grab a piece of printer paper and start sketching some objects. More is better, even if I think I may not use them. For LSC, I sketched a few doodles and scanned them in. The designs were done in homage of the original ASCII characters and colors. For example, my monsters look remiscent of the Ä, Ö and Ω characters. The first problem I had to resolve was how big to make the map. Kroz uses something like 60×24, but I don’t really like how smushed that is. I wanted a square ratio on an 800×600 pixel window. This led me to pick 16×16 as the tile size, which seemed small to me. For the first couple tiles, the floor and the walls, I used 16×16 image to create them. That went OK. Next I took a look at my scans to turn them into tiles. I did an overhead view of the player, basically just a head and shoulders. I created the tile originally as a full 120×120 image with margins. I colored him yellow and red like the Kroz hero. I copied the merged image and pasted it into a new document that I then resized to 32×32. Inside the drawing routines I have it again resized on the fly as 16×16. The reason for this was that I may want to add a ‘zoom’ feature to the game in the future and it would be great if the images didn’t get pixelated. I followed the same procedure for all the rest of the tiles.
The style of the art is not much different than the other LD entries I’ve done. I don’t try to draw the straightest or the best. I just draw to my ability. Those are then scanned in and then modified in Photoshop. Since I shrunk these down, you don’t see the imperfections as much, and maybe that’s better? I don’t think some people ‘get’ that the imperfect art is part of my style and I think I get marked down for it sometimes.
This is the fourth time I’m using the same general base code for my LD entry. I think it shows because I have a hang of it’s abilities and limitations and I can get what I need to get done faster and more efficiently. Also, each LD I add more basic functionality to it so I don’t have to reinvent the wheel each time, as they say. Additions this time are an unfinished menu system and a tile/map data structure.
Most everything that I coded worked fairly soon thereafter, even the changes that take 30 minutes in between builds. I think I had only two major problems: monsters moving over walls and monsters not dying when they move onto the player. The first problem was because I couldn’t figure out why my collision detection logic was failing for monsters. And it wasn’t. I had an errant semicolon tagging along the end of an if statement. My logic was fine and the if was completing an empty statement. Then the next line moved the monster anyway. The second problem was weird in that the monsters would sometimes die when they moved into the player, but not always. A majority of that problem was due to how I keep track of the monsters. I have two references for them. One is in a two dimentional array similar to the tile map. Either the cell has a link to a monster, or it’s null. The second reference is in a linked list. The grid is used for monster-monster collision detection since I only have to check the cell next to the monster for another monster. The linked list is used when I have to traverse each monster object and is faster than checking every cell in the grid. It’s actually a great idea but I was trying to solve the monster-player collision problem without actually having a fully implemented monster-monster collision. It turned out that the monsters were moving into the same spot and the second monster was overwriting the first monster’s entry in the grid. It was weird but once I finished implementing that code the rest fell into place.
These two problems cost me about eight hours split over Saturday night and Sunday morning. If I didn’t have those problems, then my game would have been that much more complete.
I didn’t try to do anything too fancy in my code. I could have spent more time doing things in a more efficient way for the future, but instead I hardcoded some functions just to get it done. For example, I have eight different functions for the different directions in many parts of the code. Those could probably be pared down to one in each situation if I passed some variables in. I’d also like to combine the collision detection and movement between the player and the monsters. Maybe base them from the same Mobile class or something.
What I did Wrong
Other than those two issues that I mentioned above, there wasn’t a whole lot that I did wrong while coding. I did have a few too many distractions over the weekend. My folks came over on Saturday to swim (which is great because it was triple-digit weather) and have dinner so I lost a few hours there. That by itself wasn’t a problem but when I was actually coding I had the TV on which split my attention.
I also forgot to tie the score in with anything being done by the player. Not a big deal, since score isn’t really much in the game yet, but it should have added some points for killing monsters and grabbing gems and whips.
Apparently my sounds were a bit harsh. I used DrPetter’s sfxr to create them, but I must have used some weird settings because they sound fine through my 5.1 speakers, but they are harsh through headphones. I guess I’ll have to do sound through headphones next time and hope that translates through the speakers.
What I did Right
I think I was helped by trying to emulate the Kroz series of games and it wasn’t because I had a model to ‘copy’ from. I think the key was that the limits on what I was setting out to accomplish were already fairly firm. I didn’t have to try to build in some weird functionality for the future, since I already knew where I was ending up. The other LD weekends started with an idea that was to be flushed out later. The only problem is that later usually doesn’t come and I am stuck with an incomplete game or a complete ‘thing’ that isn’t fun.
What I Wanted to Do After Last Compo
I wanted to work on my basecode after LD48 #14, and I did that. I also wanted to scale down my goals, and I think I was able to manage my goals this time around by not setting them too high. I think it’s a win.
I’d like to continue with this project and there are a few obvious things I can do.
- Make the code more efficient and easier to read
- Profiling execution. I haven’t tested lots of monsters or animated tiles yet, but it will probably suffer from performance issues.
- Level editor
- More objects and tiles
- Better level file format
- Continue adding basic functions to the basecode
So Mortem? This thing’s just getting started!
I was really busy so I didn’t upload my latest food photos. Here goes!
And then I totally forgot to take a picture of my In’n'Out burger, but I guess pretty much everyone can guess what it looked like. Here’s dinner though:
I finally got my entry done. It’s not nearly what I wanted it to be, but that’s ok. It’s ok because it’s still a game. Most of the time my entries end up being tech demos or proofs of some concept at the deadline. This one is different though. The engine itself is complete enough that you can create levels for it and actually play them.
If you’ve ever played the Kroz games, you’ll see the similarities. I used it as massive inspiration. I tend to forget about it when I think about my favorite games growing up, but there’s no denying that I spend hours upon hours playing it.
I can see myself working with this afterward, making the engine more robust and fixing some of the things that can be done in a more efficient manner. There are plenty of new objects and mechanisms to create. I only created a few of them. I could create other monsters too.
Right now there is only one level, and it doesn’t have any kind of ‘campaign’ code to link more of them together, but that would certainly be in the cards. A level editor would also be a must, as I did this first level using just a text editor and about twenty minutes.
For now though, I’m going to go spend time with my family who I have ignored this weekend. And hey, maybe go to bed early. There is work tomorrow.
Have fun with LoneStranger’s Caverns!
I had a major breakthrough when I figured out why my monsters were walking through walls, other monsters and the player. I had an errant semicolon at the end of an if statement and though the logic was correctly false, the functions were still executing. After removing that, things are looking much brighter.
But not that much brighter. I still have a few more things to do before this passes as a game, and I still need to create other levels. I suppose the other levels aren’t mandatory, as I can show a decent amount in just one level if I do it right.
Current item on the agenda is whips. I’m trying to get them to affect their environment, and once that is done, I can move on to something else, most likely keys and doors.
No screenshot as it looks much like it did before.
Got some good sleep last night, woke up and started working again. I figured out why the monsters were having issues walking more than one space (missing else before an if), but they keep walking through walls and sometimes the player. I’ll have to insert some more debug code to figure it out. I also had a Concurrency exception last night that I seemed to have fixed by placing a syncronized block around the code that loops through a LinkedList. So far it hasn’t come back. I also added the status area to the right.
Here’s a screen shot with the monsters:
For breakfast, I just had a bowl of granola cereal:
After I can figure out this monster collision stuff, I’ll work on whips.
My folks came over and I haven’t had much time in front of the computer since then. We went swimming for awhile and then grilled some burgers. The doofus I am, I forgot to take a picture of our picnic out in the back yard. Burgers with bean salad and pork and beans. Wow, did we have enough beans there? Anyway, my mom had a few cake mixes that were getting close to expiring so she brought down a cake.
So where am I in development… I’ve got a hero that moves around the map and collision detection works great against the walls. I’m putting the finishing touches on the gem tile type and have begun the monsters. I still need to do more tiles, but I think I can wait until I get enemies done.
Most of the work is all behind the scenes, which I hope means that the rest of it will start to fall into place at a faster pace later. Hopefully the next screen shot will show some monsters, even if their AI isn’t ready.
Turns out my folks aren’t coming down until after lunch, which means probably an early dinner… so early lunch it is!
Just some left overs from the other night:
An update on the game front… I’ve finalized my two wall tiles and am getting ready to start with the player character sprite and code, and his movement around the board. I did some more code work to facilitate the transition and change of the player based on reactions of the tiles. Also in this time I took a shower, did some pool maintenance, and tried to ignore the TV before it was shut off. So here’s to a good work effort over the next hour and a half!
I forgot to grab my photos of my camera for dinner last night, so here it is:
And here’s this morning’s simple breakfast:
I think I’m going to get some toast too…. I’ll post my desk photo later on
I did some more work after last night’s post. I worked on the tile map classes and scanned in my sketches, then created a couple image files to load in the tile map. First shot, blammo, it displayed the map perfect on the screen. I did a little tweaking of the map size so that it would take up more real estate on the screen and was left with this:
Not much to see, but the designs are all mine. They’re loaded from a text file with some level metadata and the grid layout. The space on the right will be the status area. The graphcis are not text, like my Kroz inspiration, so they will get better than what I have above.
My work this morning will consist of making more sprites for the tiles, and of course, the hero dude. After that, I’ll work on moving him around.
Caverns isn’t a bad theme to have, though I hadn’t thought much about what to do if it was selected.
One of the first things that comes to my mind is the old Apogee game series Kroz, of which one game was titled Caverns of Kroz. It’s sort of rogue-like, but more action oriented. Probably best described as a single-player Gauntlet-like game.
Here’s a screenshot of a level in a Kroz game:
The ohm signs are the monsters in this particular level and they will do their best to march toward the character, represented by the red and yellow smiley. Monsters disappear when they collide with the player, but they also take gems, which are the measure of health the player has. The only way to destroy monsters is to get them to run into destructable walls, or use a precious whip.
I decided that for my LD entry I would try to remake a basic version of this game, only using better graphics. We’ll see how much I can get done. At the very least, I hope to have a movable hero, monsters with rudimentary AI and a couple types of terrain.
I spent some time early into the compo sketching some creatures with inspiration from the original Kroz games. So far in the code I’ve been working on my tile map data structures. It’s kind of a pain in the ass, but it should make things easier tomorrow.
I will likely be going to bed soon, even without a game screen shot to post, but sleep will do me good.
It’s generally the same basecode that I’ve used for the past few compos. After each compo though I go through and find the things that make it more robust and they get to live on.
Here’s the latest version.
Now, Let the games….BEGIN!
First time LD’er here, looking forwards to seeing what odd combination of themes combine to inspire us to greatness this time! I’ve got a long weekend free (it’s a Bank Holiday – woo!) and nothing to get in the way but my own procrastination. I’m intending to do my entry in XNA/C#, if that’s allowed, using SketchUp with a .X exporter for any 3d graphics I may happen to need. Of course, never having used XNA or C# in anger before, it should be a hell of a learning experience – hence the title of this post!
In real life I’m a professional Level Designer – which usually means I know a bit of scripting, and a bit of art – but not that much of either! Wish me luck, as I wish you all the same!
If you stay up late enough, you might just catch them…
Oh wow. I’ve been looking forward to this over the past month. I even blocked off time on the calendar and made sure that no other events were being held. No baseball games to attend. No weddings. No parties. Nothing but wide open schedule.
I dusted off the basecode from the last few compos and created a project just to make sure that I don’t have any crazy problems right before I start to code.
I’m not partial to any themes this year, though there are plenty that I could do without. So far it’s Burrowing, Caverns and Castle as the favorites of Day One voting. I guess any of those are fine and are open enough to not restrict creativity.
Again, I’m going to use mostly the same tools as before:
- Java 6 SDK
- Eclipse IDE
- Photoshop, maybe some Illustrator
- DrPetter’s sfxr for sound effects
- Audition, if I can get it to play well with my sound card
- HP OfficeJet 6450 All-In-One for scanning doodles
- No Fear Energy Drink Sugar Free (Go Boris Said/Carter Racing #60 & #08!)
- Everlasting Gobstoppers
- mIRC for chattery
- Killer Game Programming in Java and the base code I used from last compo.
Good luck to all, and see you in two days and five hours!