Realm Tactics is a constantly evolving project with many different components. This page contains a sample of what it currently looks like.
- Procedurally Generated Maps
Hand crafted maps are obviously pretty awesome and have had thought put into them. However, creating many maps takes time. Therefore let me introduce the procedurally generated map system.
The map above was generated with some loose specifications. Firstly, the terrain was generated taking options from plains, mountains, rocks and forests. These have been specified to take up the whole map with defined ratios. Then neutral buildings generated in the center of the map. Finally teams entities generated in the left and right.
Different map layouts and biases can be added. the layouts currently available are Left-Right, Top-Bottom, Bottom Left-Top Right and finally chaotic where the different teams entities are all mixed together!
Along with that there is an option to specify if the map is to be mirrored so that the layout of all entities are fair between the 2 teams.
The example here has a bias to give the blue teams more entities for an extra challenge!
Next Steps
The next development steps are to add layers for line based generation, for example addition of features such as roads and rivers. This will allow for some increased tactical considerations such as additional choke points and flanking.
Currently the maps are 1v1. The next iteration will include the addition of specifying more teams using the existing create map tool and allowing the generation to add more teams with spacing accordingly.
- Animations!
An animation system has now been added which allows different spritesheets and configuration to be added to each entity actions. Here is a (very!) small sample of an attack animation and the associated config:
Which contains an idle animation and attack animation (cheating but actually using the same sprite sheet with the idle animation much slower!). The config which defines this unit is as follows:
{ "Name": "Peasant", "Description": "Standard, cheap but weak unit", "Sprite": { "FilePath": "units/peasant.png", "PixelsPerUnitX": 625, "PixelsPerUnitY": 675, "CycleTimeSeconds": 10, "Repeats": true }, "Tags": [ "Unit" ], "Movement": { "Movement": 2, "BlocksEnemies": true, "AbilityConfig": { "PointCost": 1, "UsesPerTurn": 1 } }, "Attack": { "DirectAttacks": [ { "Name": "Attack", "Detail": { "CanMoveAndAttack": true, "BasePower": 0.4, "Selector": { "AllowTags": [ "Unit" ] }, "TagPowerModifier": {}, "AbilityConfig": { "PointCost": 1 } } } ], "Sprite": { "FilePath": "units/peasant.png", "PixelsPerUnitX": 625, "PixelsPerUnitY": 675, "CycleTimeSeconds": 0.25, "NumberOfLoops": 4 } } }
There are 2 Sprite blocks, one on the Root of the config which gives the idle animation and one on the Attack configuration which is applied to any attacks that are made (unless a specific one is given to a sub attack config). The new sprite configuration is pretty clever, simply give it a sprite sheet (or a static image) with other optional values:
Key Description FilePath (Required) Points to the sprite sheet/image PixelsPerUnit(X/Y) Determines the unit size of each frame. The sprite sheet will automatically be split into each frame starting top left, proceeding along the row row and then down to the next. If not added then it assumes that the file is a single static image. CycleTimeSeconds How quickly a complete cycle showing all frames takes. Framerate Similar to the CycleTimeSeconds but allows the specific framerate (frames per second) to be defined. Repeats Define if its a continuous animation. For example, an idle animation repeats, a single attack does not. Animations that do not repeat complete for their entire duration and don’t get interrupted. NumberOfLoops How many loops of the animation to complete before it is finished. With the values give, it will automatically process the sprite sheet and incorporate it into the action at the particular level that is associated with. In this case the main attack confg but could be sub attacks, movement, capture etc.
More specific sub-mods are in the plan e.g movement in the cardinal directions (so having 4 for the set up, down, left and right which play as the entity moves) and any other specifics for other actions that I can think of. The system is generic such that the config is the same for each animation and all that is needed is adding to the format and adding the correct hook.
For illustration, the above units graphics are defined by this single example sprite sheet peasant.png:
- Show off – Purchasing, Capturing and AI
As things progress, its hard to capture all changes in a single illustration. So here is a lightning example of two AI players battling over a network (hacktics game mode):
The Hacktics game mode is all about capturing ground which generates more income which allows more expensive units to be purchased. This mode uses the ‘network’ concept such that only continuously connected captured locations generate income. Therefore it is possible to cut through an opponents network and disrupt their income. As you can see, the AI occasionally purchases additional units from one of its construction buildings.
There are 3 units available:
- Workers which can capture network but not attack
- Viruses which have a direct attack
- DDOS which have a range attack
Each unit has a different cost and although not very visible in this video there are 3 different currencies at play. The more expensive units using the rarer currencies. In addition each location generates a different amount of income – the two ‘generator’ locations for example generate a high amount of the rarer resource.
It takes a worker 2 actions to capture a location and the worker has 2 actions per turn. This leads to the ‘ability’ config where each type of ability that any entity can do can have associated ability config – detailing how many action points each ability costs, if it can be used multiple times a turn, if it ends the entities turn etc.
The AI in this scenario acts reasonably intelligently (currently no training has been performed so not bad considering!). It understands the concept of the network and attempts to capture continuous locations in order to expand its income. It also attempts to purchase the most useful units it can given its current wealth. The units also attempt to engage intelligently and cause damage with an aim to get the best attack value while preserving themselves.
Note that each entity in this scenario have direct attacks although other forms of attacks are available which have been experimented with – in particular splash attacks which causes damage to multiple units at a time.
- New game modes!
With the alpha version of the game pretty much complete, new game modes are being added as the ‘content’ of the game is only a couple of maps currently. The most recent is the ‘Medieval’ game mode which is a classic style of traditional warfare with swordsmen, archers and catapults etc.
Here is a demo of the gameplay from two AI players battling. It is just a few units put on a map and no interesting terrain yet but just an illustration of what is possible.
These are sample graphics and only a few units added so far but it does show the power of the engine as this was achieved in a few hours. More impressively the AI is not half bad considering that it is currently still completely untrained and has not been altered in any way for this game mode!
It is so easy to add new game modes using the configuration system and achieving this is pretty straight forward when you get a grips of the structures of the configuration files.
Also another disclaimer is that the timings of the AI turns are a bit quick and currently the units effectively throw particle effects at each other (which can land when the unit has already been registered as defeated!). All of these are just things that I have not got round to improving yet!
- First show off – Where we are
This is the first show off post of what Realm Tactics currently looks like. I have added a game mode which I have called Hacktics. The concept of this is that there are two hackers or similar which compete to control a network. So they move their programs around and try and capture more of the network than the opponent.
First off we have attacks. You can see that the DDOS unit (octopus thing) is currently selected to attack. It has a range attack with a minimum range currently highlighted with red. Any valid enemy units can be targeted and then attacks and counterattacks performed as required.
You can also see that this game mode has the concept of capturing the connectors and making paths of team connectors across the map. Each of the connectors (the wire things which are red/blue or grey when not captured). These share a local network so each entities that are connected to each other can share resources.
The initial iteration entity movement is also more or less complete. This will allow players to move tactically and allow them to outmanoeuvre their opponents.
All actions are essentially accomplished using the action menu. All actions that an entity can perform along with game based actions (Save, Zoom, Exit etc) will happen by selecting the option on the action menu.
Just to finish things off, we also have a main menu with a nested series of menus. This can be navigated to get to different game modes, versions of said game modes and maps within.
Obviously this needs some work as its not particularly fancy. But it works!