Design dungeon selection system like in Darkest Dungeon

What I meant by “like in Darkest Dungeon” is that I envision displaying a map featuring various dungeons, similar to the layout in Darkest Dungeon

In my case, each dungeon will offer a selection of missions for players to undertake, similar to in Monster Hunter games.

to summarize, players will start by accessing the world map, where they can choose a dungeon to explore. Upon selecting a dungeon, a list of available missions within that dungeon will be displayed. Once a mission is chosen, players will be directed to a dedicated scene corresponding to that mission.

However, I’m currently unsure about how to architect this system effectively.

Currently, I’m manually assigning Dungeon Scriptable Objects (SO) in the World map UI and placing all the Mission SOs inside each Dungeon SO and got system that loop throught each mission and enable the mission if certain condition is true. This setup works okay, but I’d appreciate some insight from experienced developers on a better approach.

Be sure to use UI Toolkit / UI Builder since you’ll be in a world of pain trying to make a complex, stylish UI like this with legacy UGUI (game object based UI).

I feel that’s more important than the “architecture” for progressing through missions. Hard to give any advice there, for me at least since I never played this game.

1 Like

Thanks for the reply !
I will consider using the UI Toolkit for this as you advise !

I’m currently in the process of replacing three months of UI Toolkit work with UGUI specifically because it couldn’t handle the complexity and styling of the UI for my work project which is a fairly complex card-based battle game.

It simply lacked too many features and the performance was just awful on our high-end development PCs.

I’d love to hear more of a postmortem about this, what limitations you hit, what was easier, harder, etc.

UGUI is no panacea but it has been so stable for so long now (10+ years for any library is amazing) that it’s hard to justify moving away from it.

When I hear reports like above, it reaffirms my commitment to UGUI but I want to make sure where things stand today in early 2024.

Some of it were things that we were hoping we could find alternatives to like graphical limitations (ie a complete lack of shader support). We ended up deciding that wasn’t feasible unless we used large numbers of render textures or custom built a particle system that ran inside of UITK which would have been too much to do.

Our biggest complaint was often a lack of performance. For example the deck building system has sorting options for the cards and even on my high-end PC (5950X w/ 3070) I would click the button and several seconds would pass before it was finished. I don’t remember how many cards we had but it wasn’t more than a few dozen.

Other problems included:

  • Files have some kind of weird linkage which despite containing the path and GUID would break as soon as you tried to move a file to another folder

  • Simple 9-slices only with no support for tiling which meant all kinds of workarounds if we needed borders or centers to be tiling.

  • Masking restricted to a simple rectangle (unless you relied on Unity’s slow and very incomplete vector package)

  • Templates (ie UITK prefabs) were problematic at best and because of the way they were attached you couldn’t just make modifications to the prefab once it was in the document

  • Built-in components (and templates too) were annoying or even difficult to theme because they all shared the same USS class which forced you to have tons of entries specifying a certain component by name

  • Layouts were often more trial and error than just laying things out. UGUI is far simpler to get everything in place and scaling properly but it was a nightmare with UITK.

  • No source code to be able to fix or add a feature to a built-in component

I likely can come up with more if I sit here long enough but that’s the ones that immediately come to mind.

Full source code with 10+ years of third party assets is very hard to beat. UITK has almost nothing for it from third parties because things you would have needed to improve it are often coded as internal and you have no source access aside from being able to look at but not use the UnityCsReference repo.

1 Like