Search Unity

TurnBased-Toolkit (TBTK)

Discussion in 'Assets and Asset Store' started by Song_Tan, Aug 11, 2013.

  1. copperrobot

    copperrobot

    Joined:
    May 22, 2013
    Posts:
    69
    Hey @songtan, I'm hoping to be able to use this asset for a game. A couple of questions regarding customisability during play:

    -It would be useful to have quite a lot of variety in the grids. What would be good is to not have to make dozens of individual maps, but to perhaps have some preset layouts (a corridor or open area or battlefield), but then be able to customise them to add variety. So perhaps there's a type of location like a city street, but I want to change the contents in the scene depending on the situation. Perhaps there are more walls, or more chatic obstacles. Is it possible to make those sorts of changes, or are maps unchangable (position of walls, collectables etc) once they are saved in a scene?

    -Does each grid need to have a unique scene? Is there perhaps a way to save a map and then load it into a scene, including the placement of walls etc?

    -Perhaps I want to alter the visual style but keep the layout of the grid. Is it possible to change what prefabs (like walls, units, obstacles) for different ones before the scene starts?

    -If I have a party of units, which might increase or alter over time (along with add different weapons/abilities), is it possible to specify which units will be used in a scene upon loading it? Perhaps I have 12 different possible party members and I bring 4 into the scene with me?

    -Same with the enemies. I can procedurally spawn them it seems, but is it possible to alter the types of units spawned before the battle starts?
     
    Stexe likes this.
  2. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    There's the 'Generate Grid On Start' option which force the grid to regenerate itself when the game start. So you start a scene with different grid layout every time. That said, these are totally random, you have no control over the placement. Other than that, once a scene is saved, that's pretty much it. To your point of having some preset layout, you will need to a procedural generator that are purpose for that. One where you can lock certain feature on the layout while randomized/regenerate the rest. The default generator doesn't support that I'm afraid. The closet thing I can probably do is to instead of regenerate the grid and everything on it, having a separate option for the obstacles and wall. So you can still keep the grid layout, but things on it will be different.


    The only way to do this (probably) is to set the whole TBTK gameobject into a prefab. You can load the prefab into any scene (different background, same grid setup).


    I'm afraid there's no easy way to do this at the moment. Referring back to your earlier question where you want a preset layout, you will need a script that scan the grid at the start of the scene, and replace all the objects on it with the specific sets of object prefab you want.


    You can look into the persistent demo scene and how you can set the starting unit for a particular faction in the next TBTK scene (Check the documentation too, look for the section 'Integrating TBTK with your game'). You can do this for both player units and the enemies.
     
    Last edited: May 2, 2021
    copperrobot and Stexe like this.
  3. copperrobot

    copperrobot

    Joined:
    May 22, 2013
    Posts:
    69
    @songtan thanks for all that! I think that there's a way there to achieve all I want to.

    Thanks!
     
  4. dc774

    dc774

    Joined:
    Feb 14, 2021
    Posts:
    3
    Hi Songtan,
    just wondering how can I customize an unit's attack range, not just the distance but I want to make it into a specific grid shape and having a fixed direction. Is it posible?
     
  5. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    Well it's possible as long as you can code it. The code in question is GetAttackableList() in GridManager.cs. That's the function that determine which tile the selected unit can attack based on its attack range and other factors. You can always modify that function yourself to give your unit a custom attack area.
     
  6. dc774

    dc774

    Joined:
    Feb 14, 2021
    Posts:
    3
    Thanks for the help!
     
  7. bangoo

    bangoo

    Joined:
    Apr 25, 2015
    Posts:
    12
    Is it possible to set various AP cost depending on type of the hex (forest, road) with the asset settings?
    If there is an option to move through friendly units?
     
    Stexe likes this.
  8. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    Unfortunately no. All hex share the same AP cost.

    Yes, there's settings for each unit prefab in UnitEditor that allow you to set if a unit can move pass friendly unit, hostile unit, obstacle.
     
  9. Stexe

    Stexe

    Joined:
    Feb 2, 2014
    Posts:
    217
    Yeah, I was surprised about the lack of that option too a while ago. Most node based games have that in it. Doesn't really apply to what I'm working on so I never looked into how to modify it, but it was odd.
     
  10. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    Well, I hope you are please to know that I'll be adding support for node based movement ap cost in the coming update.
     
    Stexe likes this.
  11. Gatskop_Software

    Gatskop_Software

    Joined:
    Sep 21, 2014
    Posts:
    86
    When is the ETA for the new update and what changes will be in it
     
  12. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    The most notable addition in the next update will be the additional of movement cost in each individual node. The rest are just minor fix, tweak and optimization. At the moment, I haven't decided when to release it yet.
     
    Stexe likes this.
  13. mario_code4ever

    mario_code4ever

    Joined:
    Jan 9, 2020
    Posts:
    36
    Hello there, i just bought this asset today. I was wondering how i change tilesets in this tool. I got my own and i wanna implement them. Could you please help me with this? Thanks!
     
  14. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    Select the game-object 'GRID_MANAGER_GENERATOR' in the scene. You will see the script component GridGenerator. Expand the 'Show Default Editor' option and you will see 'Node Prefab Sq' (for square grid) and 'Node Prefab Hex' (for hex grid). These are the tile prefab used to form the grid. You can swap them out with your own and regenerate the grid.
     
    Stexe likes this.
  15. navy3001

    navy3001

    Joined:
    Jun 1, 2017
    Posts:
    23
    When ever I try to go into one of the editors, I get this error

    "
    ArgumentException: method return type is incompatible
    System.Delegate.CreateDelegate (System.Type type, System.Object firstArgument, System.Reflection.MethodInfo method, System.Boolean throwOnBindFailure, System.Boolean allowClosed) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
    System.Delegate.CreateDelegate (System.Type type, System.Object firstArgument, System.Reflection.MethodInfo method) (at <eae584ce26bc40229c1b1aa476bfa589>:0)
    UnityEditor.HostView.CreateDelegate (System.String methodName) (at <0c3742f371b24679bcaa6fcc508d0cca>:0)
    UnityEditor.HostView.CreateDelegates () (at <0c3742f371b24679bcaa6fcc508d0cca>:0)
    UnityEditor.HostView.SetActualViewInternal (UnityEditor.EditorWindow value, System.Boolean sendEvents) (at <0c3742f371b24679bcaa6fcc508d0cca>:0)
    UnityEditor.DockArea.SetSelectedPrivate (System.Int32 value, System.Boolean sendEvents) (at <0c3742f371b24679bcaa6fcc508d0cca>:0)
    UnityEditor.DockArea.AddTab (System.Int32 idx, UnityEditor.EditorWindow pane, System.Boolean sendPaneEvents) (at <0c3742f371b24679bcaa6fcc508d0cca>:0)
    UnityEditor.DockArea.AddTab (UnityEditor.EditorWindow pane, System.Boolean sendPaneEvents) (at <0c3742f371b24679bcaa6fcc508d0cca>:0)
    UnityEditor.EditorWindow.CreateNewWindowForEditorWindow (UnityEditor.EditorWindow window, System.Boolean loadPosition, System.Boolean showImmediately, System.Boolean setFocus) (at <0c3742f371b24679bcaa6fcc508d0cca>:0)
    UnityEditor.EditorWindow.Show (System.Boolean immediateDisplay) (at <0c3742f371b24679bcaa6fcc508d0cca>:0)
    UnityEditor.EditorWindow.Show () (at <0c3742f371b24679bcaa6fcc508d0cca>:0)
    UnityEditor.EditorWindow.GetWindowPrivate (System.Type t, System.Boolean utility, System.String title, System.Boolean focus) (at <0c3742f371b24679bcaa6fcc508d0cca>:0)
    UnityEditor.EditorWindow.GetWindow (System.Type t, System.Boolean utility, System.String title) (at <0c3742f371b24679bcaa6fcc508d0cca>:0)
    TBTK.NewFactionAbilityEditorWindow.Init (System.Int32 prefabID) (at Assets/TBTK/Scripts/Editor/W_FactionAbilityEditorWindow.cs:19)
    TBTK.MenuExtension.OpenFactionAbilityEditor () (at Assets/TBTK/Scripts/Editor/__MenuExtension.cs:89)
    "
     
  16. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    I believe you are using TBTK2. I've just sent you a fix. Please check your pm.
     
  17. chaosmonger

    chaosmonger

    Joined:
    Jan 23, 2019
    Posts:
    71
    Hello, I'm interested in this ToolKit, but before buying it I've a question...
    Basically I'd like my game to have turn-based combats similar to Divinity Original Sin, meaning: not grid-based, but with "free movements" (that are however costing AP based on the distance). Is that possible? Maybe also "faking" it, like not showing the grid even if it's there? Also, my combats start on the same way as Divinity, meaning: I'm walking around a city, then I encounter an enemy (or a bunch of enemies) and the turn-combat starts. In that case, is the grid (if using one) automatically generated to avoid colliders? Keep in mind I'm on a city, so there are streets, cars and buildings, and of course I'd like to avoid walking inside the building, but creating the grid only in the "walkable" areas.
    Do I have to set that each time (i.e. forcing the attack area to be in a specific place/specific grid, where my enemies are), or can it be generated calculating the obstacles the moment I encounter the enemies and engage in an attack (either because they saw me or because I clicked to attack them).
     
  18. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    First, TBTK is designed for small to medium set pieces in a self-contained level/scene. The map size of Divinity Original Sin is quite large compare to what TBTK is intended for. Also, it/'s definitely not designed support a 'free-movement' phase. I have to say it's going to be a lot of work to get this working.

    With that in mind, there's two way of getting it done. The first one is getting the grid generated on the map from the get go. The biggest problem with this solution is I'm not sure if the grid system in TBTK can support map of such size. Depend on your map size, you might be able to get away with it. Or you will need to do some optimization.

    The second solution is have a free-form map and generate the grid in combat area when combat starts. The problem is like you said, how to make sure the gird is generated in a manner that fits the map, and then place all the units on the grid. How well this will work is largely depend on how your map is designed.

    Either way, you'll still need to add the code to support 'free-movement' phase of the game, and the transition into the turn-based combat phase and back.

    In short, it can be done but it's not going to be easy. Honestly, if you are proficient in coding the rest of the game ( Since you mention Divinity, I imagine there will be quest, inventory, conversation, etc. ), I think it will probably be easier if you just code the TBTK part instead of trying to get TBTK to work with your existing system. I hope that answer your question.
     
    Stexe likes this.
  19. chaosmonger

    chaosmonger

    Joined:
    Jan 23, 2019
    Posts:
    71
    Uhmmm... tricky. But what if the scene (map) is big, but the combat areas are confined in like 5-6 small invisible grids only to specific point of the city? Could that be a possibility? So I can design a grid fitting that area of my city (like a parking lot, a crossroad, an alley) and when the player enters in it, it starts the combat.
     
  20. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    That's one way of doing it. This goes back to "TBTK is designed for small to medium set pieces in a self-contained level/scene". Most of the class in TBTK is a singleton since there shouldn't be more than one instance of grid/battle in the scene. You will have to modify the code to address this. All thing considered, I suppose this is probably a more feasible solution comparing to the other two.
     
  21. chaosmonger

    chaosmonger

    Joined:
    Jan 23, 2019
    Posts:
    71
    I see... You said "there shouldn't be more than one instance of grid/battle in the scene", but what if there are, let's say, 6 areas, but at start they are all deactivated, and one is activated only when starting a combat, will that work? Or the singleton won't understand which one has been activated?
     
  22. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    I don't remember all the details on top of my head so I'm not 100% sure. The singleton in this case are script component that keeps reference and initiate various things. The key here is the initiation (like setting up grid state, placing unit, etc.), which some script runs in Awake(), a function that get called even when the game object is inactive. So unless you instantiate the whole set piece when you need them, they probably won't work correctly. You can still get this to work, it just that you need to modify the existing code to make sure that the system is using the active grid.
     
  23. chaosmonger

    chaosmonger

    Joined:
    Jan 23, 2019
    Posts:
    71
    Understood, thanks a lot.
     
  24. chaosmonger

    chaosmonger

    Joined:
    Jan 23, 2019
    Posts:
    71
    So, I'm back here... By the way, do you have a Discord server where to discuss these things?
    I bought your asset and I'm trying to re-adapt it to my needs. The premise is that I've some coding experience, so I'm not a noob, but I'm neither a master, even if I've developed two games on my own.
    This said, I'm trying to figure out if handling the grid in non-zero is a possibility. For instance: I created my grid in an area of my bigger scene (the grid is rather small, just 12x12 size), but when I move it on a different position of my scene which is not 0,0,0 (for instance 10,0,8), I cannot edit it. For example I cannot put obstacles directly on my grid (but if I go to 0,0,0 and place the obstacles there, then they appear on my grid which is far away)... Is there a way to achieve that? That somehow the Grid Editor works on a non 0,0,0 placed grid?
     
    Stexe likes this.
  25. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    Unfortunately I don't have a discord server. I don't use it very much. You could email me directly at k.songtan@gmail.com.

    The problem is the code the detect which node you are interacting with assume the grid is centred on (0, 0, 0). Not only that there's problem editing the grid. You will find that you won't be able to select the right node during runtime. Now the easiest solution is factoring in the positional offset of the grid when trying to determine which node the mouse is clicking on. The code in question is GetNode() in GridManager.cs (line373). See the lines that calculating the coordinates of the node? You will need to add the offset in the calculation. Take the example for the square grid, I would change it to:

    Vector3 offset=GetNode(0, 0).objT.parent.position;
    Vector2 coor=new Vector2(point.x+instance.offsetX-offset.x, point.z+instance.offsetZ-offset.z)/GetNodeSize();

    Obviously it's a bit hacky the way I obtain the value of offset (it would only work with the default hierarchy). You can use a method best suite the way you setup/reposition the grid.
     
    Stexe likes this.
  26. Cdy0774

    Cdy0774

    Joined:
    Dec 29, 2014
    Posts:
    9
    play demo -->won-->error
    How to fix it?
     

    Attached Files:

  27. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    I tried the same demo scene to replicate the error but I end up getting a different set of errors, probably from the same causes. Looking at it I think it's harmless and shouldn't break your game since the game has ended. You should have no problem proceed to menu or the next scene. I'll fix the error in the next update but you can ignore for now. If you like to get rid of it asap, please let me know. I'll send you a fix as soon as it's ready.
     
  28. Koldur

    Koldur

    Joined:
    Feb 2, 2016
    Posts:
    2
    Hello!
    I'm trying out your tool and I'm wondering if there's any way to make the units move in a straight line between pont A and pont B, letting the units move diagonally (like the red line in the image).
    Thanks!
     

    Attached Files:

    Stexe likes this.
  29. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    Not without code modification I'm afraid. The good news is there's a hack that you can try. However, the unit will move in straight line regardless of any thing in it's path. And it will most definitely break overwatch. Other than that, you will need a more elaborate algorithm for the unit to figure out when to follow the node, or take a short cut.

    If you want to try the hack, you can add following line in MoveRoutine(), Unit.cs. Just before the while loop.

    path=new List<Node>{ path[path.Count-1] };
     
    Koldur and Stexe like this.
  30. Koldur

    Koldur

    Joined:
    Feb 2, 2016
    Posts:
    2
    Thanks! I'll try it later for sure :)
     
  31. raszop

    raszop

    Joined:
    Jan 18, 2016
    Posts:
    7
    Hi.

    We're basing our game's fight system on tbtk. everything is great though what concerns us is the jagged movement of units. i've tried to modify unit.cs and change movement routine to a different movement styles but i always get jagged movement. is there any easy way of fixing this? are you aware of this?

    for example if my unit moves straight forward on square grid it jitters from time to time. the game is running 60 fps, animation disabled, no rigidbody. standard tbtk movement.
     
  32. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    The creep movement is pretty smooth as far as I can tell. The code I'm using is pretty standard. Assume the unit is moving in a straight-line, the only lag it could have is whenever a unit reaches a new node. It needs to stop to check for various thing like for-of-war, AI-trigger, overwatch. But that only takes a single frame so it shouldn't be that noticeable. This jagged movement that you observed, does it happen when the unit is between node? Also are you using the default units? They has a hover script on the mesh object that makes them 'hover' along the y-axis. Try remove them just to be sure.
     
  33. raszop

    raszop

    Joined:
    Jan 18, 2016
    Posts:
    7
    Yes it is smooth most of the time i agree. I've seen the code and tried to apply some changes to it already but no luck with removing jittery movement.

    yes the lag is mostly when the unit reaches new node (when it's in the center of a square node and goes to the next square on grid). i'm familiar with movement coroutine.

    no i'm not using the default units but it's not the issue with units. i've disabled everything on units including animator and the problem is still notice'able. We're using very detailed maps on hdrp project, but the build runs in 60 fps and even on build the jitter is observable.

    can it be due to garbage collection?
     
  34. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    It's hard to say. But as far as I know garbage collection would only become an issue if you destroy a lot of objects. So I doubt it's that in this case.

    Anyway I would disable all the checks in the MoveRoutine() to see if that make any difference. If you are familiar with the code, you know which line to comment out (CheckOverwatch, SetupFogOfWar and CheckAITrigger). Alternatively you can try a small scene with a single unit from each faction, with fog of war and overwatch disabled. If disabling the checks doesn't help, it's something else.

    Also does the default scenes have the same problem?
     
  35. raszop

    raszop

    Joined:
    Jan 18, 2016
    Posts:
    7
    yes even the empty scene has problems with it. we're using unity 2020.3.6f1 HDRP project
     
  36. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    You mean the clean TBTK scene you create using the drop down menu? Even after you disable fog-of-war?

    Honestly I'm not sure what is wrong. There shouldn't be any reason for game or unit to lag with a small scene. Also it's hard for me to tell without being able to see how what the problem actually are. Do you have a video or something that I can look at?
     
    Stexe likes this.
  37. alberto_rng

    alberto_rng

    Joined:
    Sep 24, 2021
    Posts:
    1
    Hi, I'm trying to make a multiplayer game based on TBTK, I already have everything prepared but my problem starts when trying to use the tool Mirror for creating the servers and all that. Unity stops playing and says the following:
    "
    Scene Assets/Scenes/... needs to be opened and resaved, because the scene object "One of my players"(Clone) has no valid sceneId yet.
    UnityEngine.Debug:LogError(Object)
    Mirror.NetworkScenePostProcess:OnPostProcessScene() (at Assets/Mirror/Editor/NetworkScenePostProcess.cs:68)
    UnityEditor.Build.BuildPipelineInterfaces:OnSceneProcess(Scene, BuildReport)
    "
    I did what the error says but nothing new happened.

    I need to have the players spawned when connected to the server, I added the NetworkIdentity as Mirror says to the player prefab but it always throw me this errors. Any idea of what could I do?
     
  38. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    I'm afraid I'm not familiar with the tool, or any online multiplayer solution. I'm very sorry but I can't help here.
     
  39. Cdy0774

    Cdy0774

    Joined:
    Dec 29, 2014
    Posts:
    9
    You cannot pause the game trigger event in the game
     
  40. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    I'm sorry but I'm afraid I don't understand. What is this game trigger event you are referring to?
     
  41. Cdy0774

    Cdy0774

    Joined:
    Dec 29, 2014
    Posts:
    9
    A pause function is required
    Trigger dialog event
    (Fire Emblem)
     
  42. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    There's no pause function. You can try set Time.timeScale to 0. That should stop everything in the game.
     
  43. tomaz52

    tomaz52

    Joined:
    Feb 12, 2014
    Posts:
    22
  44. raszop

    raszop

    Joined:
    Jan 18, 2016
    Posts:
    7
    this is caused by waiting for coroutine that checks overwatch. but i've noticed the enemy units does not use overwatch ability at all. do they use abilities? i've played and didnt notice units to use any abilities ever
     
  45. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    The AI does not use ability yes. But the overwatch check is universally apply to all units. For a start when the AI moves, the unit needs to check if any player unit is in overwatch. Also the way the framework works, there could be other opposing player controlled unit in overwatch.
     
  46. raszop

    raszop

    Joined:
    Jan 18, 2016
    Posts:
    7
    and this is what causes lag, as coroutine is waiting for numerous other coroutines to finish, and each node its being checked if unit is in overwatch. i think about doing it async, do you think this might help?

    how would you approwach implementing using skills by AI? i am going to implement ability for them to use some basic skills. any tips?
     
  47. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    You can't use async in this case. It's a series of check and event that has to take place in a specific sequence. The unit move into a node. If there are hostile overwatching, they get triggered and attack the moving unit. Then the moving unit check if it has survive the attack and move on to the next node. And repeat. If this is not done in a fixed sequence, the whole logic falls apart.

    Also I doubt it's the overwatch check that cause the lag. Unless you have hundreds of hostile units on the grid, all overwatching and somehow not one of them get triggered. Can you elaborate how does it lag? Does the reach a point, the game freeze for a moment and then get smooth again? Or the unit movement becomes jerky or not smooth for a brief moment?

    For getting AI to use ability, I would suggest you to look into the script AI.cs. You will have to modify that anyway to get things to work. Without getting into too much details, the script uses a predetermined set of logic to evaluate what action is available for a particular unit and give those actions a score. The action with best score get selected. So far these 'actions' only consist of where to move to and what to attack. So you will need to set up and add the logic to determine if an ability is viable and give it an arbitrary score to compare against other option. Obviously depending on what the ability do, they all need their own logic to evaluate their availability and effectiveness.
     
    Stexe likes this.
  48. KitBarry1809

    KitBarry1809

    Joined:
    Jun 27, 2018
    Posts:
    34
    I've noticed a bug with the grid editor in TBTK3: if I replace the wall artwork references in GenerateGrid and generate a grid it works just fine with my full- and half-height walls. But if I try to manually add walls the half-height prefab is fine and the full-height wall is always the original prefab even when it's not referenced any more in the slot on the GridGenerator script. Is it hard-coded somewhere?
     
  49. Song_Tan

    Song_Tan

    Joined:
    Apr 9, 2011
    Posts:
    2,993
    It's not hard coded. But it's cached when the GridEditor is initiated. So if you changed the assigned prefab after enabling the editor, it doesn't update the prefab until you reselect which prefab to use (Note that you can assign multiple prefab and select which one to use in the editor). It's an oversight from my end.

    You can fix this by changing line-289 of I_GridEditor.cs to return prefabList.Count>0 ? prefabList[0] : prefab;.

    Sorry for the trouble.
     
    Stexe likes this.
  50. raszop

    raszop

    Joined:
    Jan 18, 2016
    Posts:
    7
    i have kinda successfuly implemented AI using skills. i don't need them to determine best action, i've done it randomly with few determinants like healing themselves or attacking player etc. works kinda fine but needed few more adjustments here and there.

    I have another question. I would like to add let's say "exploding barrels". how would you approach that? they can't be units, yet they must be targetable and while being shot explode and hurt enemies. is it possible, and if so, is it possible to do it easily?
     
    Stexe likes this.