Calling Mr. Blacksmith Postmortem

Posted by
May 4th, 2015 1:39 pm

What even is this game?
Basically it is a small roguelike (procedural generated maps, permadeath dungeon crawler) with weapon crafting and tactical, fully deterministic combat.

Link: http://ludumdare.com/compo/ludum-dare-32/?action=preview&uid=33967

NOTE: I tried to explain most of the stuff I write below but it may be better if you play the game first. Also not every aspect of this postmortem comes to a conclusion (few actually do) and a lot are just more or less interesting things that happened during development.

Typical in-game scene from level 2

Typical in-game scene from level 2

Idea:
“Doing something console based would be cool.” This was my basic premise for this LD. No matter what theme would have been chosen I would have probably made something which outputs to the console. With this in mind I started brainstorming as the themes in the final voting round got revealed. As usual I checked which themes got good results in the previous rounds and ignored the other ones. Companion, Among The Stars, Discovery, Grow all these would have meant that I made a text adventure. Adept To Survive would have been a survival game with borrows heavily from adventure mechanics (I had some really nice ideas for it) and You Are The Power Source would have been some kind of puzzle game (I don’t really remember but I had a good idea; this one wouldn’t have been in the console though). Deeper and Deeper could have just been any kind of infinite roguelike. But An Unconventional Weapon? What should I do for this theme? I had really no idea and it was pretty likely to be chosen. So I voted everything up but An Unconventional Weapon down. I know this isn’t the way voting is meant to be done and I felt bad doing it but I really had no idea what to do. Until late in the evening when I took a shower. “I could just do a roguelike with crafting of strange weapons!” This idea probably doesn’t sound impressive at all but I was tired and frustrated and so it sounded like the best idea in the world. I would have even changed my votes but my PC was already shut down and I needed sleep before LD started (it was 11.30 pm already).

Number of enemies is high for screenshot purpose

Number of enemies is this high for screenshot purpose; Enemies is light purple can spawn other enemies

Combat:
The combat mechanic which is a bit different from standard roguelikes (normally you bump into enemies a lot of times either doing damage or miss until they die; here you bump into enemies just once to kill them and all other enemies move just once but can attack a few times depending on how much turns it would have taken to kill the enemy in the normal way) was created by restrictions: My implementation of all game objects was quite strange (see below) and made it impossible to give enemies different health states so that you had to kill enemies with one hit but the crafting made it necessary to make it take a different time to kill enemies depending on how strong your weapon is. So this was more or less the only way to do it (at least I still cant think of any other) but I’m quite happy with how it turned out.
The combat was intended to be tactical which I think worked out pretty well. Most of the enemy movement sees its inspiration in DROD (Deadly Rooms Of Death; maybe the best puzzle game ever): Most monsters are like Roaches, the Q is like a Roach queen, which the S is similar to too and the B is at least a bit like a Wubba but less annoying (Wubbas in DROD can’t be killed at all). The exception to this is the F which moves twice each turn, a thing not found in DROD but nothing really innovative either. Also the T is quite different from the living tar in DROD but it also serves as inspiration (and is used as weapon part to pay some tribute).

Movement of an F

Movement of an F

Crafting:
Basically you find parts for your weapons in piles scattered in the dungeon. For a weapon you need 1 or 2 end-parts (blades, whips, …), as many between parts as you like (handles) and at maximum the number of other parts of accessory parts (spikes, paint-likes, …). Also you are just an adventurer and can’t craft weapons yourself so you need to call a blacksmith which of course costs some money. The amount of money gets higher as you go deeper into the dungeon and if you leave more monsters alive on previous floors it gets even more expensive (Somehow the blacksmith must come to you and monsters make this more dangerous of course). All this seemed like good ideas and I haven’t seen most of this before. But most of it also didn’t turned out as good as I thought. For crafting you just search for the 2 best end parts and mostly take everything else because you don’t have enough accessory to not be able to use all of it most of the time. The killing monsters for cheaper prices also was just mildly important for playing since most of time you craft a weapon on level 1 and one (maybe two) weapon later around floor 5 or 6 and then don’t have to care for monsters being alive at all. Players mostly liked the crafting system but this is probably just because you can name weapons yourself and not because it is any innovative.

"Movement" of a T; lower spawn time for screenshot purpose

“Movement” of a T; lower spawn time for screenshot purpose

Implementation:
I never really worked with console based games before. Maybe it was a bad idea to do a LD without experience for what you use. And it wasted quite some time. First I wanted to use libtcod (a library specially for roguelikes; uses a tile set which looks like ASCII instead of using the console) but I never got it running before (for some reason) and of course I didn’t got it running this time around. Then I wanted to use SDL (the library I usually use to make games) to handle the input but use the console for output because I had no idea how to get “real time” console input. This didn’t work either as I would have to create a window with SDL to get input. It wasted quite some time trying to get it working (as opposed to libtcod which I abandoned quite quickly). Then I though I could make the game entirely in SDL by using a tile set which looks like ASCII but as I implemented the inventory I noticed that I would have to draw every letter and not just the few ones I wanted to use for enemies (and I didn’t want to take an existing font (this wouldn’t be allowed for compo either, right?)). So I searched the internet for means to get console input in c++ without the need to press enter every time and was surprised to find something as easy as the _getch() function (I searched for this some time ago and remembered not having found a working way). All this wasted half a day but I’m kinda happy libtcod didn’t work because really using the console for output is a lot cooler then just emulating it.
Another thing which I regretted during development but which turned out to have a good effect on the game is the way I handle game objects. Nothing in this game (walls, enemies, item piles, …) is an object but just a letter in a list of string (everything is stored exactly as it is shown). This means the same enemies cant have a different health state as anything other enemy with the same letter and generally no specific object in the game can have any state (though a few thing are handled globally: the players health for example is a global state of the whole game and (technically) not really specific to the player). This created quite a few restrictions to work around (I didn’t wanted to change everything as I discovered doing this had been a bad idea in first place) but most of these restrictions resulted in interesting mechanics (as the combat one; see above) and none really hurt the game.

Movement of a Q; lower spawn time for screenshot purpose

Movement of a Q; lower spawn time for screenshot purpose

“Graphics”:
After I started using the console I felt that something looked kinda strange. I didn’t really know what it was until I thought about what problems other, bigger roguelikes had and remembered that I read a few times about the aspect ratio of fonts. In the tile set I first used, all characters were square but in the console they aren’t. So I added a space after everything (not in menus of course) and thought this was better but it still felt somewhat strange and I thought other people used to playing roguelikes without the spaces (like Dungeon Crawl Stone Soup which is quite well known) would find this annoying. As a compromise I decided to add an option to toggle between the modes when the main game was finished. I forgot to do so. Probably I just got used to the look and no one complained about it either (there didn’t seem to be a lot of people who play roguelikes at all).
There isn’t really anything too interesting to say about the color usage. The enemies were red at first but this got changed after I made the color of the player dependent on how much health he has left. So he could turns red which would have maybe led to some confusion. This first version was seen on the first screenshot I posted as I asked someone to test if the game runs on other computers (thanks to all of them again here buried deep in this wall of text) as there have been some issues with this in the past. Also if you have to choose color for this kind of thing yourself always stick with the light versions of color for important things (There are 16 colors to use in the console. 8 dark and a lighter version for all of these) to create a bigger contrast to the black background.

Old version where enemies were red

Old version where enemies were red and everything used the dark colors

Time Management:
During the previous 2 LDs I spent most of my time on non-dev stuff and so didn’t finish anything. It went reasonably well this time. The theme gets announced at 3 am here but I didn’t wanted LD to have any effect on my sleep and so I stood up at that time. Usually I wake up around 10 or 11 am during the weekend and I had no real intention to change this just for LD but I woke up at 8.30 am without knowing the exact time and just started doing something after I’d eaten something. At the end of day 1 I had most of the main mechanics ready and knew I would be able to get everything done the next day so that I even had some time to play some games. The second day went good too. I had sit in trains for 1.5 h where I couldn’t do anything but this wasn’t much of a problem either. Though after I submitted the game and had to sleep at 10 pm (damn boarding school rules) I couldn’t sleep at all and stood up again around 11 pm, did a few tiny things for the game (even fixed a serious bug where weapon names only were the first word you entered (std::cin is quite strange)), updated the online version and went to sleep around 1 am as I started to get tired.

Typical death screen with quite weak weapon

Typical death screen (with a quite weak weapon)

Religion:
The Post-LD version I posted some days ago fixed the most serious issue (the game being too hard) and also introduced a religion system. There is an altar on the first floor (which contains no serious enemies and just serves for preparation) where you can choose one of the gods. Their advantages and disadvantages aren’t supposed to be any balanced but just to provide a bit of variety and reward a different play style. My favorite god is probably Itos who creates walls wherever you move (similar to walking on trapdoors in DROD) but reduces the damage you take when moving. He isn’t very strong but he is the most interesting god (along with Sesbus who lets you only attack every second turn). All gods except Hezorr were designed at the same time and all made it into the game. Hezorr is a bit more of how the game was meant to be at first but didn’t turned out to be too fun and got included for more or less historical reasons. Sorry that all gods are male but most (all?) real monotheistic religions have male gods too.

God selection menu

God selection menu

OK. This postmortem got longer then expected. Thanks if you really read everything or even if you just scrolled down but are interested enough to at least read this last paragraph. I’m sorry but i don’t really want to write a conclusion or something because nothing can really be isolated from the great experience Ludum Dare is. If you have any questions feel free to ask.

Link: http://ludumdare.com/compo/ludum-dare-32/?action=preview&uid=33967


Leave a Reply

You must be logged in to post a comment.

[cache: storing page]