Navigation

Unnamed Dungeon Crawler

After the Unity fiasco I decided I wanted to make a game, both to polish up my independent game development skills, but also to learn a new engine after realising Unity would not be a viable option in the future. This initial game was to be styled after games like Neverwinter Nights and Dungeon Siege, with an isometric camera and focus on combat, after writing a setting that I really enjoyed the game's scope ballooned beyond my control and I decided I should put it on the back burner and work on something smaller in scope. After becoming sick with covid I had a dream of crawling around a pipe underneath a walkway in an underwater city, and it was from there this idea began to form of a dungeon crawler akin to Ultima Underworld, System Shock, and Bioshock, and here we are.

I borrowed a lot of the mechanics from the first game, simplified for more action orientated gameplay and have something I can work with. All that's left is to make it...

The game would have simple mechanics, borrowing a lot from immersive sims and dungeon crawlers, with a focus on exploration and combat. The player is left alone in a city filled with hostile enemies that the player must fight or otherwise navigate around to progress. The main plot would be very loose and something the player is doing in the background while finding notes, not only providing gameplay benefits, but also explaining what the city was like and, if the player is attentive, what they might be trying to accomplish.

For now the most I have for visuals is a moodboard of the kind of vibe I want to aim for.

My first priority was the player controller, since I need to get in to have a feel of things like the movement and scale, which became about 2 hours of me scouring forums and cursing Godot for having a proprietary scripting language in GDScript. The point of making a game in Godot was to no longer be constrained to the sinking ship that was Unity, and one of the deciding factors for going with Godot was that I could transport my experience with C# to Godot, however this comes at a cost. Most other developers use GDScript, which means most user created tutorials on things, like say a first person character controller, are for GDScript, which meant I had to translate the GDScript syntax to, you know, something useable.

I am not a fan of GDScript's syntax, it feels to loose and backwards for me, but personal gripes aside I also don't want to spend my time harnessing my programming skills on a proprietary language, since in the event Godot were to pull a Unity that time would have been for naught. Thankfully GDScript is similar to Godot's C# libraries so it wasn't too bad to translate for my code, although I also had to deal with Godot's different code design.

To attach a script to a node that script must inherit the node type, so if you want a script to attach to a rigidbody that script must inherit from the rigidbody node class or a class the rigidbody inherits from. So if you were building a generic character entity system, knowing that you'll have character entities of at least two different methods of movement, you can't exactly make a character entity that inherits from the CharacterBody3D if you also want to use the script for NavMeshAgents. The only solution I could come up with was the entity scene/prefab having the CharacterBody3D as the root and having child nodes for the entity script and such, which seems to work fine enough, it's just not very clean.

I also took the time when building the testing scene to play with the environment settings, creating a dark and foreboding underwater atmosphere, I am by no means an artist so there's still a bunch to play around with.

So I've spent that last few months working on the design document for the game since I hadn't had the energy to work on the game itself in engine. I now know the flow of the plot, the layout of the city the player will be navigating, all the various items, the notes, and player progression of the game (at least in theory) so all I have left is to actually take the words from the pages and implement them.

I've added the inventory screen, currently just something thrown together for displaying the stats, and I plan on updating it later down the line. I have the inventory added, again just a simple list for testing, I plan on categorising the items based on their type, with the player able to jump between the categories.

I used this opportunity to start working on the generic list script, so I can create lists of cells for displaying generic data, and it should (emphasis on should) also handle updating cells with new data when reloading, so cells will be reassigned data rather than clearing and reinstantiating all the cells every time the player opens their inventory.

For the attributes they're a script for the attributes that are assigned a certain attribute type, from there the panel script has a reference to all of the nodes because you can't have a list of scripts for some fucking reason >:( and the scripts are given the player's character data model, which the cells can get the data from. This should be generic enough that I can easily add and remove attributes or change calculations as necessary.

The next thing I plan on adding is combat, just starting with the player being able to deal melee and ranged damage, from there enemy AI and enemy combat should be simple enough.

Also I only realised after adding that screenshot that it says "DMP" instead of "DPM" :P