Catching up


Introduction

So basically I've been working on this roguelike project in GameMaker: Studio off and on for a little over a year now but have decided to start posting my progress on itch.io as opposed to the occasional tweet. The progress I've made up until now will be posted below.

The Idea

Originally, I wanted to make an roguelike encompassing tabletop RPG mechanics as seen in Dungeons & Dragons with dice rolls and attribute modifiers as well as skill checks. After playing Freehold Games' Caves of Qud as well as Dwarf Fortress: Adventure Mode i knew i wanted to try to expand the idea into an open world setting.

First Steps

First thing i did was start researching roguelike movement and AI in GameMaker and came across this reddit post. This basically worked perfectly as a base for my roguelike game. After this I started setting up the HUD for the player with what would later be a text field at the bottom and sides of the screen.

The "event text box" as I'm calling it is the GUI element at the bottom of the screen. Using a list data structure I am storing each new string into the structure and printing each new line from the bottom up. This system is really handy as I have made a script that can be called from anywhere called "addEventText()" where you enter a string as an argument and it will be printed at the bottom of the screen. At the moment the text will never reset itself which may pose a problem later in development but i will worry about that when the time comes.

Random Generation

After this I started working on some random generation stuff. First working on a name generator, and later a town generator. The name generator works by concatenating  a prefix and a suffix taken randomly from 2 lists. So far there is lists for goblin names, human names, and town names.

Town generation is still a work in progress but works for the most part. Basically, multiple rectangles of different sizes are allocated in the empty town space, After checking that none overlap, walls get created around each rectangle effectively creating the building. One (or more) of the walls on the southern side of each building will be turned into a doorway. After this, each doorway will locate another doorway in the town and using A* path-finding, start drawing dirt tiles towards the other door way. This creates a town full of buildings and pathways between them.



As it stands the town generation is very basic and needs some work but for the time being it will suffice. The next step in the random generation process would have to be small scale terrain generation in the same vein as Caves of Qud where each over-world tile corresponds to one or two play spaces.

Death

Being a roguelike, death should matter. As such I've integrated a system where you can gain or lose what I'm calling glory and fame The death message changes based on how much glory/fame you have. As an example, if you have a lot of fame but negative glory, you are presented with a death message that reflects your infamy as your lasting impression on the world. These values can be modified throughout the players game so when they actually die, they get an idea on what kind of character they played and how they were viewed morally.


Inventory and Equipment

Next i started work on the inventory and equipment system. At this point i hadn't really used data structures much other than the list system i used for the event text box but i didn't really know how to  go about making and storing items within other data structures. So i came up with this:

I have a control object that stores a whole bunch of map data structures representing each item. These items hold multiple values such as name, examine text, whether or not its wieldable, the slot its equipped into, etc. I can then reference theses maps in other objects and add them to the inventory or equipment of the player or any enemy. You can equip things out of your inventory into your equipment and it puts it into the correct slot and when you unequip they will be put back into the first available slot of your inventory.


Revamping Combat

In light of the equipment system, i gave all armor items an armor value and a dodge value, as well as all weapons having a hit dice, armor penetration, and attribute scalar. These are represented by an orange shield for armor, a purple feather for dodge value, a red heart for hit dice and a blue arrow for armor penetration. The combined armor and dodge value of your armor is also listed on the side information panel

Basically how combat works now is that when you are attacking something a d20 is rolled. If this roll is higher than the combined dodge value of the enemy's armor then the attack will hit. As for damage, The hit dice of the attacker's main hand weapon is rolled (ie d4) and the attribute modifier of the weapon (ie. dexterity) and armor penetration is added to the damage.  This damage is then subtracted by the enemy's armor value divided by 2.

If the damage ends up equaling zero or less, the attack did not penetrate the enemy's armor and is negated completely. Otherwise the enemy takes the damage.


In addition to this the next logical step for me was to properly integrate experience and leveling up. After researching the xp curves of different games, i decided to go for the exponential function approach where the amount of xp until your next level equals 10*e^(level/2). After leveling up  you are awarded 3 attribute points to spend on any combination of your attributes.


Inspect Action

In the interest of giving more detailed descriptions than one line examine text, I completed an action you can make in the inventory screen where you "inspect" an item instead of examining it. This gives a more detailed description of the item as well as any of its combat modifiers if they exist.


Conclusion

So this is pretty much everything i have so far condensed into one(extremely long) devlog post. If you haven't already, you can follow me on twitter for more updates on what I'm working on.

Thanks,

Jason Accardo

https://twitter.com/thinginger

Get Deadwind

Download NowName your own price

Comments

Log in with itch.io to leave a comment.

Nice!