[SUPPORT] Advanced Turn Based Tile Toolkit

Okay, it is time to unveil a project I’ve been working on for the past few months. The Dungeon Crawler Toolkit is a new asset for the Unreal Engine marketplace. It includes everything you need to make a first-person dungeon crawler in the style of Eye of the Beholder, Dungeon Master and Legend of Grimrock!

The project actually started out as an ATBTT example project. Over the years several developers using ATBTT have asked me if the toolkit is suited for this sort of game, so I wanted to try my hand at it. For some reason I thought it would be quick and simple, but the project just grew and grew.

First, I had movement, but then you needed to have objects to interact with. And then you needed loot, but if you needed loot you needed weapons, and if you had weapons you needed stats and if you had stats you needed classes and if you had classes you needed spells… And so on and so on. It very quickly became clear that this would have to be a standalone asset, and though there are still a couple of things shared with ATBTT (some of the grid-based level generation and pathfinding) it is very much is own thing.

It has a full character creation system, inventory, monsters with AI, powers and spells, custom grid-based movement and more. It is highly data driven, allowing you to add new monsters, items and spells by expanding the appropriate data tables.

In case someone is worrying that this will take my focus away from ATBTT, there is no reason to do so. I am making my own game in ATBTT and I love working on it. I believe that working on a different project in parallel will actually end up benefitting ATBTT greatly. It is easy to get tunnel vision when working on a single project for so long, and returning to ATBTT after working on DCT for a while let me identify many places for improvements that I did not see before. The next ATBTT update might be the most ambitious one yet

Hope there are some of you who are interested in making this sort of game, or just toying around with the blueprints. This project is probably quite a bit more niche than ATBTT, but I’m hoping there is still a market out there. I am putting the final touches on it now and will likely be submitting it to Epic in a couple of weeks. If this peaks your interest, please check out the dedicated forum thread here.

By the way, the Dungeon Crawler Toolkit uses free CC0 models by Quaternius (his Patreon can be found here Quaternius is creating lowpoly game assets | Patreon). I made sure to ask for permission for them as a courtesy, but since it is CC0 anyone is free to use the models for anything, and there is no obligation to credit the creator (though it is still a nice thing to do, of course)

https://media.discordapp.net/attachments/720553040955965471/722503532191678524/6Spells.gif

, That is just awesome. Another great product. I will be checking this out for sure !! Congrats and hats off to you.

Heyho looks very cool, ofc I will check it out :slight_smile:

  1. Can you please quick tell me where exactly the exhaused bool is set when a unit ends his turn? I am still working on the wait function. (Initiative GameMode)

  2. While making a copy of the end turn button I saw that this will lead to the “normal” turn manager even if there are override functions present in the initiative turn manager. Is that intended? Or should there be some kind of “getTurnMangerInState” or somthing before?

Btw. I have edited my cam rotation post with a clean up version of the mouse rotation.
thank you :wink:

Hi, just buyed the template and looks great!

Quick question: if I create a new level without grid it still lock on the game camera and also throw some errors ( Blueprint Runtime Error: “Accessed None trying to read property CallFunc_FindGridManagerInState_GridManager”. Blueprint: BP_TurnManager Function: Execute Ubergraph BP Turn Manager Graph: EventGraph Node: Branch).

How can I do so i can have some maps unrelated from the game system (for menu, character selection etc)?

Thanks a lot!

There isn’t an exhausted bool in the later versions of the toolkit. I found it redundant, as in each case where I used it I could instead check if it has 0 AP instead. The exhaust interface is called as part of the RunOnEndActorTurn interface event in BP_Unit, which is in turn called from the Turn Manager.

Are you sure? If you call a function or event on a child actor that overrides that event, the parent version should never be called. Can you give me the repro steps for this?

Thanks! I cleaned it up in a similar way when I implemented it after seeing your initial suggestion.

When you create new maps in UE4 they will set their GameMode blueprint based on the default game mode defined in the project settings. For ATBTT this is the BP_ATBTT GameMode blueprint, which has a built-in assumption that there is a GridManger in play. For maps that do not use a GridManager, change the GameModeOverride in the WorldSettings of that map.

  1. My foult I looked at theTurnmanagerStrategy while testing out the initiative one.

  2. Second one directly with repro steps:
    Big units wont get removed from grid after they are killed , or I have forgotten something:

Repro: Open new Project - open the basic map - set the gridmanager max unit size to 3 - place two bp unit anim with size of 3 - kill one and game wont end. Attached screenshot.

  1. You can´t reasign the normal pathfinding to a unit after changing his size back to 1. I think this is because you are declaring units with sizes >0 as big units. What would be okay but, the problem here is, when a unit got a size of 0 you just can move “in” them with big units.

**Repro: **Basic Map - 2x bpunit anim - gridmanager to max unit size 3 - one unit size 3 and player - one unit size 0 and enemy. Screenshot attached.

Btw. I have increased the unit size to 3 because a size of 2 doesn´t have a center tile and will cause other problems.

Thanks in advance.

Hey, seems like I unknowingly broke some big unit functionality in the last update. Thank you for telling me and for the thorough repro steps. Try the following fix and see if it solves your issues:

https://i.imgur.com/5ZG6rOz.png

Hi,

What is the recommended way to remove abilities that a unit has in game.

I have a status effect that grants abilities on activation, which works well, however I’m not sure the best way to remove the granted ability on disabling the status effect. Removing it from the list does not seem to do the trick, and there does not seem to be a counterpart to the Add New Ability node.

Figured it out, I needed to remove the ability from the player controllers ability refs array. It would be great to know if this will cause any issues or if there is a better way to handle this.

Thanks!

Hi Clayton, I don’t recommend removing the ability from the player controller. The player controller holds a list of all abilities that are available for that player, independent of units. To remove the ability from a specific unit, remove the appropriate item from the two ability arrays in the ability system component of the unit.

Here is a quickly thrown together level blueprint with this functionality to illustrate:

https://i.imgur.com/jayk5eQ.png

Awesome, this is very helpful. Thank you!

Yes that worked, thank you. But what about the size of 0 thing?

Any ideas why the grid snapping would place things half a meter above the grid? Pressing “Place Actor at Anchor” moves the actor half a meter upward. I’m pretty sure I have misconfigured something but I cant seem to find any differences between my setup and the examples’.

Happy to help!

Sorry, I forgot the second part of your question. What you are seeing is by design. I have not intended units to be able to end their movement within the spaces occupied by big units. Big units have their positions set on the GridUnits map for all the tiles they occupy. If you end the movement of a small unit within that area, one of the references will be replaced by a reference to the small unit. I do not know what issues it would cause, but I have not designed the system with this in mind. I do not think I have played a game where you would be able to do this, so I did not even consider this as a potential feature players would have. If you want to have this in your game you will have to do quite a bit of modification, I expect.

Maybe the mesh of your actor blocks PathTrace? If so the trace will hit the top of the mesh and place the actor at that location instead.

Hmm, Ok, I will try playing around with the mesh collision settings. Not a big issue, using the ignore snap setting and just placing them manually is working well enough so far.Thanks!

What would be the recommended way of updating the edge costs of a tile during gameplay? I took a look at the video where you create a destructible tile, but it seems that the system has changed significantly since it was recorded. Basically I have re implemented the code from BP_GA_Tile’s construction script in its own function and call it when I want to update the tile’s edge costs. This seems to update the arrays correctly but does not seem to effect pathfinding.

You can use the UpdateTilesInRange function. It updates tiles in a defined tile range of a location or grid index. It uses tracing for walls, floor etc. as specified for your GridManager generally. Note that it will not take into account the edges added by BP_GA_Tile actors, but uses the procedural system instead (which I describe in this and this video)

Hello,

Seems like a great asset. I have some questions:

  1. I changed the size to add big units in the grid manager, however I cant figure how to make a particular unit take out more then one space?
  2. Is there documentation on larger units?
  3. I cant find access to simply move the camera to a different position as it hovers over units. I tried the BP camera but nothing. Sorry to ask such a simple question, but how to move the camera?

Ah maybe I was not clar enugh, sorry for that. I mean, that in a blank project an BP_Unit_Anim has a size of 0. That leads to the thing that bigger units where able to overlap their tile like shown in the screenshot :slight_smile: In addition, when you edit that value to 1 it directly marked as “big Unit” for pathfinding etc. That is not intended I think, as the standard size of a unit should be 1 I think.

Hi, big units is an experimental feature and currently has little in the way of documentation. You need to change MaxUnit size of BP_GridManager (max is 5) and then set the size variable of your units to whatever value you want.

Not sure if I understand your camera question. You can move the camera with WASD or the arrow keys, but I’m assuming you mean something else?

Ok, thanks for clarifying. So a size of 0 means that the unit ignores all big unit functionality. It does not update the GridBigUnits map when it ends its movement, for instance, so big units will be allowed to move close to the unit so that their extended big tiles overlap the unit. A size of 1 takes up one space, but does update the relevant arrays. If you are using big units you should not at the same time use units of size 0, but instead use size 1.

@Infest1908 I’ve been away for a while and I didn’t see your post. Thank you for taking the time to show me how to do that. I have a couple of questions, if you don’t mind:

Is the FloatCamRotationSensitivity an exist variable, or a new one that you created? Is there a particular range of values that you could suggest?

Is the Input Action CamRotationMouse new as well? If yes, did you just set it up in the input manager? Is it keyed to a particular mouse button?

Thanks again!