Category Archives: News

Game Is Released

We are live on Steam!


Grounds of Glory started as a passion project more than 4 years ago. It slowly became more than that, despite the fact that everyone associated with the game still had full-time jobs. In recent weeks, we’ve been working tirelessly, polishing the game’s features and implementing some of the suggestions we’ve received from you. We released a trailer video.

The time has finally come and the game will be released on Steam on Friday 22 February 2019. We would like to thank everyone for their comments, suggestions and overwhelming support on this journey and we hope to see you in arenas.

GG Team

Development Update 20

It has been a few productive weeks. We felt that it was time to start the polishing phase. That meant no new gameplay stuff (at least this update), but a lot of bug fixes, user experience improvements and finishing off some on-going features. We also made many visual improvements for recent specialization spells and talents.

Firstly we would like to showcase a new character creation screen. It is not swamped with information like the previous one, and has some nice UI transitions to get you started.

Many other UI parts have also been enhanced. We have a new achievements tab that shows which titles you have received and which are still to be achieved, as well as quests pane that shows pending (daily) quests. Shop has also been reworked, showcasing the rarity of items and the rating/game requirement for each item.

In the game, there was confusion with how to setup controls for you spells. The game now has a new keybinding system in the Controls Menu where you can visually set the keybinds for spells. We still allow you to set “special” keybinds, like focus, self and mouse-over casting for each spell.

As far as gameplay is concerned, we went through all skills, talents and specializations. There are quite a few. We needed to test 4 masteries per specialization (x3) per class (x3), all together 36 masteries. There are even more talents (72 altogether) and 35 skills. We have found bugs, description mistakes and inconsistencies, and have fixed the majority of them.

We also (finally) imported a new gear set for fighter. A new weapon is also included in the preview.

The new build is now live and includes many smaller but noticeable fixes that we never managed to incorporate before. We have listed just a few important ones (and omitted some really nasty bugs that we are not proud of). We will continue to try to polish the game in the future as there are still a few bad experiences.

In the near future, we are looking forward to providing a better Steam integration like chat, leaderboards and achievements. There is still a lot of work to be done, but we think we are on the right path to supply a polished product to each and every one of you!

Development Update 19

This time, we have some really exciting gameplay news. After quite a lot of testing (and feedback) we felt that it is time to make some more substantial gameplay changes. The most important drive for new changes are specializations. We wanted to make them more unique, so each specialization is not just a small niche but almost feels like a new class. The other drive was to make things simpler for new players and combat more fluid.

We will showcase those changes but not that some aspects are still not visually complete and all of them are missing sounds. So let us go through the changes class by class.

Fighter Changes

Fighter swings more fluid now because Bash and Rend reset auto swing timers. This means if you activate them when not swinging, they are executed immediatelly (otherwise they are queued right after autoswing). Default fighter’s weapon is now two-hander in all specializations. We made healing reduction modifier Bleed (applied by Bash) flat 40% healing reduction instead of stacking. Fighters should use it tactically now instead of spamming it on cooldown.

The biggest change was complete rework of Weapon Swap. It now changes to specialization’s specific weapons; Sellsword retains the two-hander and applies slow with generators, Assasin wields faster, one-handed weapons for duration of Weapon Swap, and Templar transfers 50% of damage from nearby allies to self.

Mage Changes

Mage’s slow on energetic sphere is now flat 45% instead of stacking. This should promote using Energetic Sphere in all specializations to slow targets and then focus on damage with Cosmic Shards and Fire Ball. We made damage over time (DoT) ticks of Fire Ball twice as powerful and twice as short. We wanted to remedy the situations when player’s felt DoTs did not do enough damage (while in fact they were a very significant and annoying damage dealing source).

The most substantial improvement was simplification of spirits spawned by Possess and Spirit Explosion. The spirit is now based of your specialization and not current attunement. We also made spirits more powerful. The Elemental Spirit is very simple now (I don’t want to explain what it did before …); it periodically fires damaging projectiles at target. Stargazer spirit replicated 70% of Mage’s damage and really provides a huge burst opportunity, while Oracle spirit slows all targets around him and explodes at the end, dealing damage and immobilizing targets.

Healer Changes

Healer is one of the hardest class to test as it always needs a team to function properly. One of the things that was pointed was that microplays, like dispelling slows and DoTs, while cool, were targeted too deeply at some specializations and really annoying for opponents. We therefore removed this skill and replaced it with Empower. Empower is targeted at healer only as we wanted to make his dueling better without empowering allies. Devout can make himself immune to movement reducing effects (slows), Hermit can knockback target around himself and Spiritualist gain a magic barrier that reduces damage by 50% and explodes for significant damage.

Sum Up

Those changes inheritely broke balance a bit but we feel that we are still very close. We already made a few tweaks, like increasing health pool to 13000 due to increased damage those changes bring. We also know that we still need to improve all those changes visually but we feel we are on a right track with these changes. One of the really good benefits of more diverse specializations are more different playstyles and also more balancing opportinities as we can tone up/down specialization specific abilities or classes to achieve balance.

We look forward to testing those changes with you in the Arena!

Development Update 18

And we are back! We had some time off to recharge batteries but don’t worry, we are already working really hard.

I am really happy to say that we went through some bureaucracy like creating a company (we are called GG Studios by the way), and registering the game with Steam. This means that soon we will be running tests through Steam which will simplify updates and test scheduling! We also plan to integrate services like chat and achievements with Steam.

Watch out for Beta Keys in the following month!

We don’t have new visual or gameplay related stuff to show yet but don’t worry, those are also being developed. The main goal of last month’s progress was to rewrite backend servers. We switched to MongoDB which should allows us a lot of flexibility and scalability should we need it. Servers have also been migrated to Amazon Cloud for better scalability and locality. We now host them in US-West region.

There is still a lot to be done but we are getting close to fully scalable game server architecture that should support thousands of players online at the same time.

Development Update 17

A lot has happened since the last update. We managed to pull off quite a large test. The Reddit post attacted quite a few people. We showed a new action montage to get the players interested:

As a consequence, more than 40 players played the game over previous weekend. We are really proud that servers were running smoothly and players were enjoying themselves. We also got a some feedback how to further improve the game.

On the development side we are continuously working on improving the visuals and making progression rewards better. We introduced 2H animation for fighter (a short preview available below):

We also added new cloaks and fixed a few visual and some minor gameplay bugs. Hopefully we will iron out all the glitches as soon as possible.

In the latest build we introduced the following gameplay changes (with some of them directly influenced by our beta testers for smoother gameplay experience):

  • Mage’s ice age can be dispelled
  • increased the duration of bleed (healing reduction debuff, fighter) and singed (shielding reduction debuff, mage) from 16 to 24 seconds. This will make healer combos harder
  • Mage’s ice age and lightning are now instants instead of 0.25 casts (that could be interrupted luckily, especially by AI)
  • You can cancel casting after 0.1 from start instead of 0.4 seconds as before. This should improve responsivness
  • New sounds for fighter impacts, new sounds for some abilities
  • Mage’s flash slightly longer
  • Fighter’s damage slightly increased

We are continously improving the matchmaking experience and growing the community. We are really lucky to have active community members on our Discord server!

Development Update 16

Weeks are passing like crazy! We have been stabilizing and fixing the version. We also added missing mage animations, more cloaks and in general better progression. You can check the gameplay here of all the classes here:

This week, we would like to talk about an important aspect of any player versus player game: matchmaking. This will be a more technical and detailed explaination of our matchmaking system and why we chose to do it this way.

A good matchmaking algorithm will ensure:

  • create a good match, i.e. the players are close to skill so the match will be interesting
  • the match will be found fast enough, i.e. long queue times are very undesired effect
  • will take into account player’s class (so we don’t match two healers in the same 2v2 team)
  • will allow players to play the game even if there are not enough actual players around, i.e. will spawn interesting AIs to play against

These criteria are often opposing each other. For example, waiting longer for a match will result in a better match between players but players generally dislike waiting in queue for more than a minute or two. We tried to balance our matchmaking algorithm taking those factors into account.

Each player’s skill is measured with his matchmaking rating which is hidden for the player. You start with 1500 rating and gain rating when winning and lose it when dropped. We are using a modified chess ELO rating formula for amount of points won. This ensures that winning against a better player awards you more points than winning against a player with lower rating. We added additional key features:

  • when playing in a specific bracket, like 2v2, team’s rating is the average rating from all player’s in the team. Points are awarded based on that rating.
  • we added hidden award points. You start with 300 of them. On each win, you gain more points until those are depleted. This grants you feeling of progression as your rating grows even if you lose as many matches as you have won.
  • when joining in party, your average rating is a bit higher as you typically coordinate via voice

As player (or a party of players) enters a queue, we add him to the list as a matchmaking cluster. Then each matchmaking update, we make the following update every 10 seconds:

  1. Increase the range of cluster by 60, up to a maximum range of 300 (we do not allow matches that differ by more than 300 rating).
  2. For each cluster, find all clusters in its range.
  3. If the wait time of cluster is longer than the one defined by AI matchmaking, fill possible empty spots with AI players.
  4. If there are enough clusters in range to make a match, find the best possible distribution of clusters to team A and team B (if possible). Also take class distribution into account here.
  5. If possible, start the dedicated server and tag player to join the match.

As the main problem with multiplayer games is that there might not be enough players available for matches, we implemented a lot of systems to remedy that:

  • at low MMR (mostly low levels of characters) we automatically fill the empty spots with AI players. We spent some time to make them intelligent to use most abilities. They can also play at different difficulty levels which is controlled by their rating. As your rating is increased, the time you need to stay in queue to get matched against AI players increases until AIs are no longer able to fill the spots as player’s simply outperform them (we did not want to scale their damage, we always want AIs to play the same game as you).
  •  we dynamically lock brackets if not enough players are online. For example, if only 10 players are online, only 2v2 bracket is avaiable and as the number of players is increased to 10, 3v3 also becomes available.
  • we allow to dynamically merged ranked and unranked bracket. This means that if you play ranked game the system will still use matchmaking rating to find a match (possibly against a player joining unranked game) but will also update ranked rating after the end of match. Ranked matches display your ranked rating and are able to grant better awards. This feature is enabled when there are not enough players queueing ranked bracket.
  • we allow to requeue from withing the game after you have won/lost. This decreases the time spent in lobby and increases match frequency.

Some of those parameters have been optimized while playtesting. To get the base statistics we also have done a few matchmaking tests. We have been mostly interested in how the system performs when the number of players is low. Here are statistics for 2v2 bracket if one player with Gaussian distributed rating (mean 1800, spread 300) joins the queue every K seconds (without AI matchmaking):

  • Players that join every 35 seconds will wait 230 seconds on average (spread 140 seconds). As complete match typically lasts 3 minutes, this means approximatelly 10 active players. In this scenario, a lot of players would be partially matched versus AI.
  • Player that joins every 10 seconds will wait 120 seconds on average (spread 100 seconds). As complete match typically lasts 3 minutes, this means approximatelly 30 active players. Low ranked players would be matched versus AI.
  • Players that joins every second will wait approximatelly 40 seconds (spread 33 seconds). As complete match typically lasts 3 minutes, this means approximatelly 200 active players.

You should also note that a better statistics than average queue time value is median value which is significantly lower (but not calculated). This means that very high ranked players will wait for a long time, maybe 10 minutes, while most players will only wait for a minute or less in the worst cast, i.e. with 10 players. Very low ranked player will be matched versus AI almost instantly.

This analysis tells the significance of number of players for a smooth experience. We need as many players as possible in the same bracket so the matchmaking system works. We estimate that the game is playable with only 10 players online (with some long wait times but mostly for really high ranked players). Most importantly, new players will have a smooth experience, mostly matching versus AI players at low levels. The experience is already smooth with 30 players queueing at the same time as we hit less than 2 minutes wait time on average (much less with AI filling the gaps).

I hope this has been useful and not too technical. If you want any more information, feel free to ask! And don’t forget to follow us on Twitter, Facebook and subscribe to our mailing list!


Development Update 15

The mage is in! I repeat, the mage is in! This concludes the rework of all characters. There are still some minor details to be done, like a few animations and cloaks, but we now have all three characters reworked, each with a few gear sets.


We are in the process of finalizing most of the aspects. We have more regular tests now (normally during weekend). You are free to join us, we usually provide a link to the current build in our Discord group. Feel free to join!

During testing we continously report new bugs and try to fix all of them until next testing. We feel the game is getting pretty solid in terms of stability, performance, and most of all, enjoyment. Until next time!

Development Update 14

We are slowly approaching a time to invite more players to test the game. We have had a few fruitful tests where we discovered a few bugs that are being fixed. The tests had focused on progression system, i.e. we disabled fast leveling and see checked how the players would really experience the game. This was also the first time AI players were part of matchmaking process – if you are in queue for too long, the missing spots are filled with AI players that try to match their difficulty to your rating.

You can view one of the testing sessions here (some amoungs each other and some against AI players):

We added some additional features to the game, visually most notably the cloak with proper cloth physics (it looks much better in animation):

ScreenCloak3 ScreenCloak2


A lot of work has been done on servers, AI not doing stupid things (there are still situations of course) and stability in general. We are also very close to completing the new mage character! We also fixed the bug that did not allow us to replay recorded game – you will be able to view your games against others really soon. This also immensely helps with debugging process. We have been tweaking the matchmaking process and we feel we are really close to a good solution. We might write more about it in the next development update. Until then, have fun, and be ready to test GG really soon!

Development Update 13

We have had eventful weeks again. We have had a few tests, also with new members of community, and they liked the game and the progress.

As for the new changes, efforts were put into making user interface in selection screen more friendly and transparent. We have reordered some functionality and replaced elements on the bottom with a popup windows. We also added camera blur on the environment to put character into focus.

Screenshot 2018-01-30 19.39.12


We also improved our gameplay sudden death element. We already have permanent damage (10% of any damage dealt cannot be healed) to limit the duration of the match. To tackle with possible infinite CC kiting scenarios that could occur in 1v1, we now also shrink the arena. If it comes down to 1v1 (and 1v1 only), the playable area will shrink towards the central healing platform. If you stand outside of the region, you take periodic damage. This will force the game to end in a minute or two.

Screenshot 2018-01-30 21.00.24


Last but not least we can show the mage rework in progress. Animations are still missing but we expect you will be able to play it soon. Here is a preview of Tier 1 gear for the mage (without textures on body):


Development Update 12

Last month, a lot of effort has been put into artificial intelligence (AI). We have somewhat neglected this aspect in Grounds of Glory as you can play against other players. What we have found out, however, is that players like to test their builds against AI players first. Having a decent AI also allows us to shorten the queue times as we plan to add AI players instead of real players for lower levels and ratings where queue times are expected to be longer.

Here is an example of fights versus only AI, 1v1 versus mage and 2v2 as a healer with mage as ally, and fighter and healer as enemies,

Lets first start by saying this will be a very technical development update. The main requirement for our AI players were:

  • the AI system is fast and does not use a lot of CPU nor memory – this is a requirement as AI will be simulated on dedicated servers that are expensive to rent

  • AI players can be used as a replacement for real players, therefore must work as a team with any other player and not just mindlesly hit random targets

  • AI player will move and position itself like normal player – a healer seeks cover when it takes a lot of damage, the mage will keep range from opposing fighter and fighter will try to stick to the target

  • AI players will use most of the abilities so real players can learn from their combinations (and mistakes) – ability sequence will not be predetermined but decided on the fly based on situation (predicted damage taken, health, positioning, resources)

  • AI players must not get stuck as we intend to use it for ranking as well

  • AI players must have more difficulty levels

The first AI system was built using Unreal Engine’s built in Behaviour Trees for spell sequence calculation and Enviormental Query System for positioning. The system worked but could not satisfy all the requirements above. It had problems mostly with performance and movement calculation – this is the reason we chose to implement our own system in C++ with a lot more flexibility. The AI system is split into a few components.


System uses per-player trackers that are shared between all AI agents. This represents additional information that is not needed by human players but proves very useful for AI agents. The tracking information is split on per-team and per-player basis. We track:

  • damage dealt

  • damage received

  • healing dealt

  • healing received

Using this data, trackers are able to predict, for example, how much damage a player will take in the next 10 seconds. To predict that, we calculate “smooth” damage average in the last few seconds, and extrapolate this data to next 10 seconds. We can also see which team deals more damage etc.

Scoring Volume

The most important and also most difficult aspect is providing good locations where to move. We split our “navigation mesh” to a discrete grid. In a preprocess, we calculate persistent properties of each grid point. These properties include whether this point is accessible, its visibility information to 16 directions and 3 distances and “exposure” of each point. A visualization of point exposure is shown in the below picture.


As you can see, points that are not that accessible from other points are less exposed (blue).

Additionally, we also dynamically calculate team-specific potential for each point, like how much damage can team A deal to each grid point. This is calculated based on player’s position and class type and changes as the game is running. We typically calculate these properties on a certain interval. The following image shows that damage potential for a team is higher around players of that team.


AI players then use this information to calculate where it should move; for example, a player might want to move to a location with low enemy damage potential, high ally team healing potential and point with line of sight to a certain player. We can express the end location as a series of weight, like -1 for enemy damage (we do not move somewhere where enemy deals damage), 0.5 for ally healing (we want to move to a location where ally healing is high but this tendency is not as high as avoiding damage) and filter out only grid locations that see a certain other point and are in range. We added a lot more options to filter best point as you can see from the point but they all follow the same pattern.


The preprocess calculation is free as we do it at level load and around destructable meshes upon their destruction. Dynamic properties are updates really fast as we do not need to perform any raytraces, just simple math arithetics in C++.

Spell ranking

All spells are already in a Data table. We did not want to re-enter all spell properties so we just linked an additional table with avaible spells to rank with some additional “AI-specific” properties.

Screenshot 2018-01-12 21.40.21

The spell ranking goes as this:

  • We calculate if spell is possible

  • We calculate its damage, healing, control and movement score

  • We calculate its overall score based on the ranking request (how important each individual spell score is)

  • We add “spell combo” factor (some spells have good combinations, like Conduit -> Projectile)

  • We sort spells by score

The system allows us to specify which spells the AI player will use in a certain mode and find out the best spell in that situation in a very generic way that is reusable by all classes.


All together

We provide implementation of AI agent for each class. Every class has different modes based on its health, resources and target’s properties. For example, healer will go to “Regenerate” mode when low on mana, or to “Aggressive DPS and healing” mode when his allies are on high health and mana is still high. Each mode has a different movement and spell ranking. After all this math, the difference between good and bad AI just depends on how many modes we had anticipated and how well we have calibrated them.

We are quite happy with current behaviours of AI players. They are actually pretty good so we might need to tone them done for beginners. There is a long path still ahead of us but we are fairly optimistic that we will provide interesting AI players for you to fight with and against!