[SUPPORT] Advanced Turn Based Tile Toolkit

Looking through this I don’t know what would not be working here. There is one performance optimization I would do, though. Don’t bind the text in the widget to the variables. Binding runs on tick, so that means that all your health bar widgets will have two text objects ticking. You only need to update the text when the value actually changes. So instead of binding and setting variable, just set the text of the text objects directly from your SetHPValue etc interface events.

How are you testing if this is working though? If you call UpdateAP text with some arbitrary value does nothing change? If you try printing the values at the various points of the execution chain what do you see?

Okay, sorted that optimization issue.

I have placed string prints in BP_UnitHUD to show AP/HP text current value. I have also placed string prints in WBP_UnitHUD. In BP_Actor_Puppet I have placed some default values into DisplayedCurrentAP and DisplayedCurrentHP (5 and 10) and it is these values that are being displayed in game and that the print strings are quoting, if I change those default values then certainly the strings and the in game display change accordingly.

If I go into BP_Unit_Anim (Whose puppet class is BP_Actor_Puppet) and change the attributes Current Hp and Current Ap there is no change in the displayed values in the strings or the on screen widget. If I get two units (both BP_Unit_Anim) to damage eachother the healthbar visibly drops but my HP value text remains unchanged.

I’m guessing that it is within step 7 that my displayed hp/ap values get connected to the current ap and current hp values?

(I’ve come back to edit this post and report my findings)

So after some tinkering I found that I can get get the displayed health number to work by sort of hijacking a node from another bit of code in the event graph of BP_Actor_Puppet.


If I just plug the currently extant float ‘Displayed max health’ directly into my own int "DisplayedCurrentHP’ and then reference that float in UpdateHUD instead of my int. Then when in game the HP number displayed gets updated on damage and correspons to the changing health bar.

I’m going to try the same with AP.

(edit, this also worked with AP in a similar way - by taking ‘current AP’ from paired unit and plugging it into my own int ‘DisplayedCurrentAP’)

I’m now going to carry on trying to get to grips with the action system through your tutorial videos. Just wanted to say thanks for being so quick to respond and ready to help. That said I’m sure I will have more questions for you in the near future!

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 !!!