Hurrah! I finished all my goals. There are some things I wanted to do but was not able to get around to but that is life. This whole day was actually spent almost entirely on the dungeon gen. I finally was able to get it to have the claustrophobic yet connected look I wanted. Don’t know how well that will work but it looked nice. I even made a half decent picture for the itch.io page
Because of work I am limited to having 2 actual days of programming and this is the end of my first one. Luckily I managed to get most of what I wanted done so I can focus on some more aesthetic based things tomorrow.
My starting point for this years 7drl is the completed python libtcod tutorial found here. I like the direction it went. Sadly there are some bugs and a few nitpicks that I had to fix. I actually spent the end of last month and up until the day before yesterday slowly working on it. Though admittedly that says more about how little time I had then anything else.
My first change of the day was offloading the creation of monsters into a separate file. This was more to make it easier to find them than anything else though. I much prefer a plain text style storage but I lacked the time to really go through with it this year.
Next up was working on the monsters I actually wanted instead of the generic orc and troll you get. My theme is ‘naked’ animals. More specifically the game’s name ‘Fuzzy Wuzzy Hunters’ is a reference to the old song about a furless bear. If you have ever googled what they look like you will know those things look horrifying. To go with it I included a small selection of naturally hairless mammals (technically a lie as all mammals have hair, these just have almost none). This list contains Naked Mole Rats, Naked Mole Rat Queens (mostly just because they are one of the few mammals that do this), Sphynxes (the hairless cat, not the myth), Hippos, Elephants, and finally Fuzzy Wuzzy himself.
When stating them up I wanted some randomness to the stats. This however would make the xp values a little off with some stronger ones giving just as much as the weakest of weak. I would have also had to calculate the value myself anyway. In the end I decided to use a relatively simple formula to generate the values. It was hp * defense + power squared. This actually got me values shockingly close to the originals on the orc and troll. My reasoning on this specific formula was defense is a modifier on hp. The more you have of the first the longer the second lasts. With power I originally wanted to just multiply it by 3 or something but I decided that the more you have the more it is worth (mostly because of being able to pierce defense). Since the values never get too high (I limit the game to 5 dungeon levels) simply squaring it gives it a scaling worth.
After that there was some general things like switching it to use ‘#’ for walls and such. Mostly though I worked on combat for much longer than the number of lines changed would indicate. I didn’t want a ‘fully’ random combat system like using 3d6 or something. In the end I decided on most attacks just doing their power with 25% doing 1 less (min 1) and 5% doing 1 more. This felt about right from the little bit of testing I did. Though as with many things I feel this would not hold up in the long run and likely only works as I have kept the dungeon short which limits stat inflation.
Second to last I removed the equipment system in favor of having a choice of 3 weapons at the start which act like classes. This was actually one of the main things I wanted to do in the game so I am happy I got it done today. While each weapon can still do the regular bump attack they all have their own quirks. The most normal is sword and board. Its big feature is simply that when you bump attack and until you move there will be a 50% chance to not be hit by attacks. This is to represent the character being skilled with hunkering down and defending with his shield. The next in complexity is the pike. No dodge chances or anything. It just hits not only the square in front of it but the one directly behind it as well. I actually feel I need to change the two as in the end they are still mostly the basic bump attack if fancier. Finally though is the daggers. This one has been an attack method I have long thought about. Instead of static face to face bump fighting it allows a sneaky run by attack. When moving in a direction the tile directly to the left and right get attacked by your daggers. This allows for an active fight most suited for crowded areas. I also gave them a bit of a dodge chance where as they move it is harder to hit them. Right now for every turn moving they get +5% dodge chance to a max of 25%. This feels a bit much so I might reduce it to +1%. Really though I should probably make it only count when continuously moving and next to enemies.
The last thing I did today was more of a little hidden gem sort of thing. I increased the rarity of the naked mole rat queens. Along with that I made the more powerful ones a lot rarer. However to go with that I gave the more powerful ones longer names depending on how much better they are. I am also thinking of going back later and upping the xp even more though it technically does this already with my formula.
You can find the github for my game here and if you want to look at it as it is as of this post this link should take you to my end of day 1 merge into the master branch. My plans for tomorrow is to work on the dungeon gen to make a cave map instead. This will actually be a new thing for me as I have so far focused entirely on the standard dungeons and corridors model.
I have run out of time to code because of real life matters so nothing else to do but post what I got and plan for next time. Here is what I have.
Overall I liked my dungeon generation and the fact I was able to implement a nice FoV. The AI was what stalled me in the end. I did not have enough time after getting it to work somewhat to do anything else.
Today was collage so once again not much done. I did not finish the simple ai I was working on… Well I have not finished debugging it. My creatures cheat a little in that they simply check a line between the player and them out to their sight range to see if anything is blocking its view or the player is out of range. So while it technically knows where you are at all times it only sees you when it should, or rather that is how it should work and right now it does not even see you all the time though that may be a problem with some other part of my code. At least I have it so I can only see the monster when it is in sight though that was simply checking if the monster location was visible.
Today I worked on implementing FOV using the recursive shadowcasting improved as described at Roguebasin. It even had a link to a C# implementation. I have it working but there is an error in Octant 7, maybe 6 as well. I have all the code for it posted in a post Here
The red should be lit just like the green is.
- In_Range(player.Location.X, player.Location.Y, x, y, player.Sight_Range [↩]
I was not going to post here but I have been reading the post so figured I should put something in for all I have taken out. My roguelike will be called “The Soul Lord” and I am coding it mostly all myself though I am using Malison a C# terminal graphics library similar to curses. I have the map generator working and my ‘@’ walking in the map and recognizing walls are not floors. I even have the map shift when you get near the edge of the screen. I have been documenting my progress on the Bay12 7DRL thread though I am the only one right now there.