[SUPPORT] Advanced Turn Based Tile Toolkit

Hey all, a new hotfix is live (v.3.02). This is again not a feature update, but a hotfix that fix some remaining issues introduced in the last, big refactor. Normally I wouldn’t want to send out a new update so quickly, but since this fixes a bug that could easily cause a crash I felt it was best to get it out as fast as possible. For the full changelog see my Trello.

v3.02 (live 10.03.21)

  • Fixed an infinite loop crash that occured if the player pressed EndTurn repeatedly
  • Fixed an issue where the health bar (and Unit HUD generally) would get pixelated when zooming in close.

Hey, glad you figured out how to get it working. Putting it into SetupFromUnit makes sense here. As for having it update during the game, changing your health number from the part of the code of the puppet that would normally lead to a change in the health bar also makes sense. However, displaying AP changing would have to be called from somewhere else, as you will probably want to change AP at times when Health does not also change. I recommend first watching the action system tutorials and then following the line of breadcrumbs from where the health bar is changed back to when the actions that lead to them are called. See if that gets you to the finish line, and if not let me know and I’ll give you a detailed rundown when I have the time.

I’m using the latest version available to unreal 4.26, the initial bug I reported I realized I was on an older Unreal and was thus working with an older version but now I’m all updated and should be on the latest version. I’m trying to get the enemy range displayed when you click on them, I’ve been able to do it by following through break points but I don’t think I’ve added it in the right place because there is this strange delay before it shows the enemy tiles but has no problem immediately showing the players move tiles which has a lot more tiles so I don’t think the delay is because of processing.

Ah, I see. Thanks for making me aware of it. The move and range display stuff got broken during my recent big refactor. I was aware of this and thought I had disabled accessing it, but it seems I forgot to do so in BP_AbilityBase_Idle. I’m guessing you’re using the strategy game mode, which would let you use this ability? I intend to reimplement this feature in the future when I’ve found a solution I’m more happy with, but at the moment I recommend just disabling it like so:

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

Apologies for the inconvenience. This feature should not be enabled currently, but I’ll bump up reimplementing it on my list of priorities.

New tutorial video is up! This is the first of three videos in which I show how to implement a combat system similar to Heroes of Might and Magic or King’s Bounty. I will cover many different topics in the topics, most of which will be of use in a number of different projects, so I’d recommend watching even if you are not making this type of game. In this first video I show how to modify the health bar to allow for displaying the number of units in a stack. This video is the result of me investigating a request by @ser.man94. Enjoy!

Second part of the HoMM tutorial is up. Here I go into how to set up the gameplay logic behind using stack sizes as a separate type of health. Check it out!

Third and final tutorial video on HoMM style combat is up!

Thank you vary much for video. How to download the version wath you use for editin? i wach firs video and make all steps. on second script are diferit. on description is version 3.02 but i try to do from epic but is the same version?

I’m back with a curiosity question - Is there a way to make the path system try to move around certain tiles but still allow players through without movement reduction? Like say a lava tile that going through would hurt the player so you’d want to stay away from but they can still move through if they really need to reach a certain tile but take damage doing so.

Hmm, it seems that you are right. I sent an update to Epic and got a confirmation, but downloading it from the launcher it seems like it didn’t update after all. Thanks for letting me know. I’ll send them a new version.

This is a tough one, and one I have tried to solve previously. I have not really found a great way to do this. Best I have been able to do so far is to run pathfinding twice. First with all “bad tiles” blocked and then again with nothing blocked. I store both pathfinding results and when trying to get to a tile I first look at the blocked one. If the tile cannot be reached from it I check the unblocked. Works okay if all bad tiles can be considered equally bad and if there are few enough of them that you are unlikely to pass through multiple ones. For something more complex you could do multiple iterations with various types and numbers of tiles blocked etc., but it will quickly become expensive. If you find a better solution to this problem, please let me know. It is something I have thought quite a bit about, but unsure what the best solution would be.

[quote=“, post:3750, topic:21930”]

Hmm, it seems that you are right. I sent an update to Epic and got a confirmation, but downloading it from the launcher it seems like it didn’t update after all. Thanks for letting me know. I’ll send them a new version.

i try to mace a chieldo of BP_UNit but is not lice a video no accesto pupet and other setings.

It is posible to download te projectfrom video?

[quote=“ser.man94, post:3751, topic:21930”]

Do you mean that there is no actor called BP_Actor_Puppet in your ATBTT project? If so then you are not just missing a hotfix. The newest version of ATBTT that includes puppets etc. is the 4.26 version. You need to use UE4.26 and create a new ATBTT project with that version selected from the launcher.

[quote=“, post:3752, topic:21930”]

i use the version 4.26 also clear local cache and download it again.
https://drive.google.com/file/d/1KCwZbdlstG_W-rP6PmpnLUKkFoqxBjD_/view?usp=sharing
maibi is posible to donload the projekt from video or only cheanget files?

[quote=“ser.man94, post:3753, topic:21930”]

Puppets should be there in the version you have. I’m guessing you’re not seeing the puppet variable because you haven’t enabled ShowInheritedVariables in your child blueprint:

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

HI,Forgive my poor English. I am your fans and I appreciate your job in ATBTT3.0 . There are many changes in the new version so that I can’t understand that quickly.
The first struggle: Why does the puppet has the BP_PuppetComponent? I don’t undersantd the meaning and necessity of the BP_PuppetComponent since I open that blueprint and find there are few codes in there except an interface BPI_Puppet.
The second : How does the unit receive the damage and play hurt animation? Let’s follow the process : run the Play Action in BP_Action_Attack ,then run the Animate Puppet in BP_Actor_Puppet, then run the attack animation in ABP_Unit, then run the Notify ActionHit , then run the OnAnimationEvent in BP_PuppetComponent ?? I knew there is a binding event AttackHit on OnAnimationEvent, but this event just run EndAction ??How does the target receive the damage ?? And there is an another dispatcher OnAnimationEnd in BP_PuppetComponent ,Running ActionEnd will trigger that, but I can’t find anything which is binding on that ??
Obviously I missed something in the whole ATBTT ,So please forgive my ignorance.
But the new version is really more difficult to understand than the last version

I think I find how the unit receive damage and play hurt animation. It’s triggered by the BP_Ability_MoveAttack.It’s a great job for me, isn’t it ?? hahah…
But I can’t understand the dipatcher OnAnimationEnd stll. I try to break(disconnect) the white line between the OnAnimationEnd and the SignalAnimationEnd , and the game is still working since there is nothing bingding on the OnAnimationEnd. So I think the AnimNotify ActionEnd and HitEnd are not necessary during the game because the EndAction is not triggered by both of them. Am I right or wrong?

Hi 皮皮耍, sorry to hear that you’re struggling with the new puppet system, but good that you are making progress. I’ll readily admit that the new system of using puppets instead of just having everything inside units is more complicated, but the benefits greatly outweigh the drawbacks, I feel. I’ll start by explaining my rationale for making this system.

So in the older versions of ATBTT BP_Unit actors were responsible both for game logic (keeping track of health, moving references to BP_Unit across GridUnits etc.) and for animation. The action system of ATBTT is designed to keep game logic and what is shown to the player separate, and BP_Unit was always an awkward in-between blueprint. An example of a problem this could casue was that you might want to destroy a unit (if it is killed), but you cannot simply destroy it, because the unit might still be needed for Actions that show the unit being shot and dying, for instance. So ATBTT had to put the unit into an array and periodically check if it was still used in any actions and destroy it if it was not. That is just one example.

Another problem was that the visual actor representing a unit would always have to be a child of BP_Unit. This meant that it was impossible to for example to have units be of the Character class (which many developers wanted to use for the included movement code). It also meant that you could easily end up with very deep class hierarchies.

So to solve both these problems I decided to split units into Units (invisible and just for handling game logic) and Puppets (just for visualizing stuff. No impact on game logic). Doing this makes ATBTT much more modular, meaning you don’t have to make big changes to any core blueprints because you need a unit that is visualized in a different way. However, this came with some difficulties. I want to be able to communicate between the unit and its Puppet, but since the Puppet can be any type of class I have to use interface events.

Another problem is that I want to use even dispatchers in the puppet, in order to communicate with actions when animations are done etc. Actions referencing puppets do not know the class of the puppet (which could be anything), so I cannot bind any events in an action to an event dispatcher within the puppet (without lots of awkward casting), so my solution was to add a Puppet Component, whose only purpose is to hold event dispatchers. Now actions can communicate through event dispatcher with any Puppet of any class provided it implements the Puppet Component.

Regarding OnAnimationEnd, you are correct that they are not used in the included actions. They are there for you if you need them for some other action. They are not used because the attack animation uses OnAnimationHit instead, proceeding when the attack animation hits instead of when it is done. For the hurt animation I do not wait for it to stop before I proceed by default. So yes, neither of those are currently used, but are included to make things simpler if you want to add actions that wait for the attack or hurt animation to end before proceeding with the next action.

Thank you so much for answering my questions !!!

How can I make a map with an irregular shape without placing a bunch of no entry tiles everywhere (I imagine that would bog down the computer). I want to make a map that is actually in a hexagon shape but the grid manager makes hex maps in a “square” shape.

​​​​​​Glad I could help :slight_smile:

So generally you then want to turn off ShowDefaultTile and then create your map in whatever way you want within the grid bounds (using meshes, lanscapes, ISMs, whatever), but for your specific requirements I actually added just that a couple of updates ago. In your GridManager set bHexShapedGrid to true and you should get the result you are after.