Click for Trello with more detailed changelog, known issues and planned features](https://trello.com/b/FlK7ccYO/advanced-turn-based-tile-toolkit)
v3.01 (live 23.02.21)**
- New pathfinding type preferring snaking paths to long turns on hex grids
- Added animation input pin to PuppetComponent event dispatchers, allowing bound events to know what animation has triggered.
- Custom Game Over text re-added.
- Fixed Place Actor at Anchor (was broken).
- Various fixes to units spawned at runtime.
- Fixed PassThroughFriendly pathfinding type. No longer removed units passed over from GridUnits.
- Fixed issue where some puppets would sporadically not spawn for clients in networked games.
v3.0 (live 12.12.20)
- Refactored action system. Actions are now separate actors. This makes it a lot easier to keep track of actions and enables the manipulation of actions in many new ways.
- Split units into BP_Unit, for data and game logic and various Puppet actors. Makes the game logic/action distinction less muddied and makes it simpler to for instance use Character actors for units.
- Moved all UI code from abilities into separate BP_GridUI actors.
- Moved pathfinding functions into modular BP_Pathfinding objects.
- Widget-based screen space health bars
- Hex grid can be generated in a hexagonal shape
- Mouse look for Grid Camera
- Simplified splitting movement and interrupting actions
- General cleanup and refactoring of most blueprints included in the toolkit
v2.61 (live 08.06.20)
- Fixed infinite loop error if all AI abilities were simultaneously given a value of 0.
- Reduced game start delay for standalone games.
v.2.6 (live 13.05.20)
- Option to restrain Grid Camera panning to the bounds of the grid.
- Added the UpdateTilesInRange function, which simplifies adding new tiles and updating edges during runtime
- Added several getters to FAction, making it simpler and cleaner to access action variables
- Improved updating of the hover mesh and path spline on networked clients
- Several network-related bug fixed
- Many other small fixes and changes (see full log on Trello)
Various bug fixes (see Trello for details)
- Experimental hybrid real time third person/top-down turn based map
- Refactored Turn Manager
- Added variant Turn Managers similar to XCOM, D&D and Fire Emblem, respectively
- Simplified and optimized unit ownership for networked multiplayer
- Added display of range and movement when selecting enemy units
- Added WASD for movement and TAB for unit switching.
- Added a new macro for actions that interrupt the ongoing action queue.
- Fixed Game Over error for maps with a single faction.
- Experimental: Spike trap and overwatch ability
- Added function for drawing lines in Grid Manager
- Added climb animation in experimental map
- Several bug fixes (see Trello)
- Refactored how tiles are indexed to allow for adding tiles beyond the edge of the grid manager at runtime.
- Refactored multi-level heightmaps so that they are predictably indexed based on their relative height.
- Added subgrids, which are blueprints that can be placed outside the grid and treated as being part of the grid.
- Moved hexagonal grid math to separate child blueprint.
- Hex grid math now uses a cube coordinate system, simplifying math and making it more efficient. Thanks to Amit Patel for his useful guides on hex math.
- Switched the skeletal mesh of BP_Unit_Anim and its children to the default UE4 mannequin instead of the mobile mannequin.
- Experimental: Added outline post processing material for displaying move range as an outline. Thanks to Tom Looman for his tutorial.
- Experimental: Added new blueprints (ladders and teleforters) for automatically adding custom tile edges.
- Experimental: Added new experimental unit, which has movement animations that change based on the underlying array (utilizing a new SpecialEdges TMap in BP_GridManager)
- Minor refactoring of the Turn Manager to make it more flexible for different turn implementations.
- Added idle ability that is active when no other abilities are active.
- Added client-side validity check system in BP_ActionManager
- Several minor bug fixes (see Trello for details).
- Moved big units out of experimental
- Refactored ability system
- Initiative order can now include non-unit actors
- Added AI prediction to player skills for suggesting actions to players
- Several minor changes and bug fixes. (see Trello for details)
- Workaround in BP_ActionManager to get around UE4.20 bug of arrays not being passed to clients.
- Multi-level grids now work for rotated grids. (thanks to JinPengfei for reporting)
- Tile actors no longer remove incorrect edges between levels on multi-level grids. (thanks to JinPengfei for reporting)
- Health bars no longer hidden in HydrasLair map.
- Re-added refactored version of the 2D example map “Hydra’s Lair”
- Added object system for interacting with custom objects on tiles (see weapons in Hydra’s Lair for an example)
- Various minor changes and bug fixes (see Trello for details).
- Networked multiplayer support.
- “Action System” for handling sequences of animated actions.
- Transform-independed grid manager (allows for scaling and rotation)
- Changes most grid-sized arrays into maps, reducing memory usage.
- Multiple performance improvements, including less reliance on ticks and casts.
- Initiative bar.
- Ability system made default. Replaces much of the functionality in player controller and ai controller.
- “Simple” edge array option for tiles with a single cost value.
- Join server and host menus.
- Renaming of most functions and variables to better comply with Epic’s scripting standard (shoutout to @Allar for his invaluable style guide.
- Updated folder structure.
- General reorganization of functionality to better comply with UE4 standards (use of game mode, game state etc.)
New example map of an XCOM-style turn based tactics game, including the following:
Skill system (with premade skills laser beam, explosive shot, heal and mind control. Particle effects borrowed from Infinity Blade assets.
Advanced AI to work along with the skill system to assess and select the best skill and location depending on the situation.
UI for selecting skills.
AI units in example map begin the game inactive and enter the combat if hearing or spotting a unit or being damaged (handy for stealth games).
Dodge, accuracy, random damage ++
An awesome selection of creative commons sci-fi assets. Skeletal meshes have been rigged by u/Bankworthy (thanks!)
Edge scrolling and scroll limits.
New WallTrace trace channel to improve automatic map generation.
Basic VR example map for room-scale VR board games with motion controls.
VR example unit that gets materials and attributes set automatically based on faction and range.
Win condition added back. Now works with blueprint nativization due to new function library set to not be nativized.
Disable rotation in BP_GridManager now works as intended.
Fixerd bug that causes units to consider all units to be friendly (felt like Ford in Westworld fixing this one :,( )
Added new functions for searching for and selecting units in range. Greatly improves efficiency of calculations in AI Controller.
Various bug fixes and performance improvements for functions.
- UE4.13 support.
- Now supports blueprint nativization causing massive performance improvements when packaging.
- Custom Pathfinding types were not working in AI controller. This has been fixed.
- Spawn Unit and Move Unit on Grid functions now take into account the location of the grid manager if it is not at 0,0,0.
- The blueprint name for the sea-monster head in the 2D game example was too long and caused issues when packaging. Name has been shortened.
- Pathfinding per tick caused issues for child actors based on BP_GridManager. AI controller has been altered to not use the per tick function by default. Using it should still not cause any issues if using the BP_GridManager parent blueprint.
- Walls in the heightmap example were not turning translucent on mouse over as intended. This has been fixed.
- Free roam mode now takes into account custom pathfinding.
- Red “tiles in range” markers no longer appear under the current unit.
- Changed the function for determining if the game is over once only one faction remains. This still causes problems after nativization (see known issues above) and is thus disabled by default at the moment, though can be activated by setting nativization to false in BP_GridManager.
- All tiles now cast shadows as if static by default, improving performance.
- Support for multi-level grids. Multi-level grids are generated automatically from underlying meshes.
- Added walls and platforms that turn semi-transparent when zoomed in or hovered over. Especially useful for multi-level grids. A simple example map is included demonstrating their use.
- Support for multiple factions. An arbitrary number of factions can be added. Units can be setup individually to be allies or enemies of the various factions.
- Any unit can be designated as AI or player controlled, regardless of faction. Allows for hot seat multiplayer among other things.
- Added option for using custom pathfinding specified for each unit. Included examples such as units that can pass through friendly units, units that ignore difficult terrain and units that cannot move diagonally.
- The path spline now uses a linear instead of a curved spline, which usually looks a lot better. Movement is still guided my a curved spline, as this makes for the most fluid movement.
- The default grid mesh can now be set as a hierarchical instanced static mesh, further increasing performance on large maps compared to regular instances static meshes.
- Various smaller changes including blueprint organization and commenting improvements.
v1.5 (released along with 1.6)](https://forums.unrealengine.com/unreal-engine/marketplace/31005-support-advanced-turn-based-tile-toolkit?p=710119#post710119)
- Changed the edge array to be a nested array of structs, with each struct representing a single edge. This change required major changes to all parts of the toolkit that utilize edges, but makes pathfinding even quicker and opens for grids with customized connections between tiles.
- Added touch controls and an option for rotation 90 degrees at a time (currently default, but can be unchecked in BP_GridCamera)
- AI has been improved significantly. AI now selects from all possible tiles to attack its target from, choosing depending on a personality enum. The AI will now move as close as possible to units it cannot reach if the path is blocked by a friendly unit.
- Player units can be set to display all possible tiles that can be attacked from all tiles in move range, similar to Fire Emblem and many other TBS games.
- Tiles in Sight Range and Move Range can be displayed as a frame.
- Improved commenting and organization across the board. Variables and functions are now grouped in categories.
- Included a variety of utility functions in BP_GridManager such as spawning units and tiles during gameplay among other things.
- Split up the Event Graph of Unit_Parent into several sub-graphs for easier modification. Unit_Parent’s event tick now only fires when it is needed for movement, improving performance.
- Added several “slow loops” which spread loops over multiple ticks. These can be used to improve performance when necessary. These are used by default when displaying all possible visible tiles for player units, since this is a demanding operation, and when an AI unit is activated.
- Added an example game called Hydra’s Lair that demonstrates how the toolkit can be tweaked to create a 2D dungeon crawler. This includes many experimental features such as fog of war, weapons and armor.
- The example game contains sprites from Dungeon Crawl Stone Soup, which are licenced under Creative Commons Zero and can be found here: http://opengameart.org/content/dunge…wl-32x32-tiles
- The example game includes music made by Jon Lunde that can be freely used by anyone owning the toolkit. More of his music can be found at https://soundcloud.com/marengs
- Many additional minor changes to blueprints.
- Rebuilt the landscape in the heightmap example map as the old one was causing the Get Hit Tile Location and Index to sometimes return the wrong value.
- Changed the height of the meshes in the Tile_Cost tiles from 0.5 to 0.3 as it was clipping through the tiles in sight range/move range.
- Changed all Set Visibility nodes of markers to Set Marker Visibility Functions to prevent an error in the log.
- Removed Clear all Instances from the Clear range array, reachable pawns array and path meshes collapsed graph in the Find Tiles in Range function in BP_GridManager to prevent an error in the log.
- Changed all Get World Location/Rotation And Distance Along Spline nodes to the newer Get Location at Distance Along Spline (with coordinate space set to “world”) nodes.
- Removed unnecessary cast in HUD_Faction_Turn and changed the name of Tile Spawner 2 to Grid Manager Ref to make it consistent with other blueprints.
- Replaced the landscape in the landscape example level as it was having some collision issues.
- Changed the skeletal meshes of the default pawns to the new 4.8 mobile mannequin. Changed the animation of the ranged units to shotgun animations, which have a more visible attack animation.
- Removed the casts for “self” in Unit_Parent that were added as a crutch for 4.8 issues in the last update. Epic have corrected this bug, so the workaround is no longer necessary.
- Added a branch in the Add Viewport Terrain To Arrays function in BP_GridManager to prevent an error message from showing when getting heightmaps from tracing.
- Updated the toolkit as per the “updating to 4.8” guidelines found here. Note: some of these changes are workarounds for bugs Epic introduced in 4.8, and will be changed back when these engine bugs are fixed.
- Fixed the Create Walls on Edges function in ATBTT_GridManager. This function was not creating walls on edges correctly before.
- Modified Add Viewport Terrain to Arrays to allow for getting height information from placed tile actors.
- Changed the AI controller to appropriately account for difficult terrain when choosing a target to move towards.
- Walkability can now be generated automatically without placing a single tile. This means that you can use whatever static meshes you want or even the terrain tool and a grid will be generated based on what you have placed, as long as they have collision set to block PathTrace. Generates height information and can optionally be set to generate edge costs automatically based on height differences between tiles.
- Tiles in range and the various other markers can now optionally be set to decals instead of static meshes, meaning they will conform to any underlying terrain. Static meshes will also change rotation depending on the rotation of underlying meshes, though this only looks good in truly tile based games.
- Done a massive reorganization of the toolkit blueprints, making the toolkit more modular and making user modication much simpler. The blueprint is now organized as follows:
Grid_Manager creates the visible grid and holds all grid arrays. Holds all functions pertaining to the grid, including pathfinding and visibility. The grid manager does not call any functions on its own during runtime, but exists to be queried by other blueprints.
ATBTT_GameMode sets up the toolkit by spawning the grid camera and HUD and handles the turn based structure, including selecting the current pawn and starting and ending turns.
ATBTT_PlayerController handles all mouse input, which mostly means deciding what happens when a tile is clicked or hovered over. Posesses the Grid_Camera.
Grid_Camera works like before and is responsible for panning, rotating and zooming as well as following the current pawn if this is enabled. Does no longer have to be placed in the viewport.
ATBTT_AIController controls the current active pawn if it is controlled by the AI and decides what action the AI takes during its turn.
Unit_Parent handles the physical movement of units across the grid as well as attacking, taking damage and being killed/destroyed. Does not handle animation.
Unit_[varies] handles the animation of the various units in conjunction with Anim_BP_Parent.
Tile_Parent functions as before.
- Added new options for calculating movement and visibility. These include:
Calculating visibility and movement simultaneously. This is now the default. If the unit has movement points left it only checks visibility to enemies in range, not every single tile.
Displaying tiles that units can move to in subsequent turns making it easy to add features like running in XCOM or setting up movement over several turns like in Civ.
Visibility in diamond shape patterns (on square grids).
Minimum range of visibility, for units that can only attack beyond a certain range.
Corner crossing, diagonal movement and splitting up turns can be set individually for each pawn. Speed and acceleration along the spline can also be set up individually.
- Added option for displaying the grid as a plane with a repeating texture instead of meshes (currently only supports square grids)
- Option for sorting pawns in initiative based on an initiative value (not fully implemented by default, but easy to set up)
- New macros for handling spreading loops over multiple ticks (unused at the moment, but included for users who want to try them out)
- Lots of small improvements and improved commenting in general.
Changed a small error that caused the last index on the grid to always be considered empty.
- Added an option for changing between player pawns when clicking on them. Only works for pawns that have not acted yet this turn.
- Added some more variables that are useful for adding gameplay features. These include an “has acted this turn” variable for pawns and a turn counter in the grid manager.
- Fixed a bug where tiles in move range would always be transparent blue, regardless of the mesh used.
- Simplified the pathfinding by removing checking for edges and instead populating the edge nodes with unwalkable nodes at grid generation. This is easier to read, speeds up the pathfinding slightly and fixes a bug that created suboptimal paths to tiles on edges for hex grids.
- Fixed a bug that caused auto generation of walkability based on height to fail if the grid manager was not placed at 0 on the Z-axis.
- Various minor fixes.