Category Archives: News

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.

643981b8-d680-43e8-aa44-efc5cc5a2100

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): https://www.twitch.tv/videos/229962447

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):

UndeadMageGear

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.

Trackers

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.

HighresScreenshot00084

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.

HighresScreenshot00085

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.

BestLocation

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.

SpellRank

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!

Development Update 11

We are back with more content! This time, Ice Arena is (nearly) finished and we can share some screenshots:
HighresScreenshot00078

HighresScreenshot00077

The arena is on the island on the lake, surrounded by snowy vulcanic mountains from all sides.

HighresScreenshot00076
The players from opposing teams start fairly close here, with only a big rock divising them at start. You can opt in to fight direcrly or choose to hide using the big central rock or behind the platform. All three smaller pillars are destructible so they only provide cover for one projectile.

HighresScreenshot00080

HighresScreenshot00079

We are still looking for an appropriate name for the arena. Please write to us if you have any suggestions.

We are also very close to finishing the new healer model with all animations and two tiers of gears. We hope that we can release update on that soon.

From the gameplay side, we are changing out of combat healing that did not work well in playtests. In each arena, we place a buff platform.

HighresScreenshot00081

The platform server two purpuses. When out of combat, you can step on it to receive a healing buff. The buff stays on you for 14 seconds and heals you for approximatelly 4000. Teams without healer can use it to partly recover from a bad situation. You lose the buff immediatelly when entering combat. If at any point, we come to 1v1 situation, the platform no longer provides healing buff. Instead, when out of combat the dueling players will receive slow that grows stronger and stronger over time (1% slow per second, capped to 70%). The only way to remove it is to step on the platform. As the platform is always placed in the open, we will force them to fight there. Whoever steps on the platform can easily catch or outrun the opponent and thus has a big advantage in the fight.

Development Update 10

We are really happy with the development lately. We upgraded to a new version of Unreal Engine, and got improvements in lightning quality, especially regarding the volumetric fog and lightning when you stand in shadow. We also optimized the memory usage and disk size, the packaged game is now 30% smaller than it was – we are at 4.3 GB at the moment. We expect to get further improvements when we replace old arenas and characters. We also took some time to clean up the code and get rid of all those nasty warnings.HighresScreenshot00004

We are finally ready to show the healer. While it is not yet fully animated, we are fairly confident you will be able to play it soon.

Screenshot 2017-11-08 21.03.02

The healer already has one gear set (with some recolors pending) and we are already in the process of making the second one.

The new arena is also in the making. This time we go high in the mountains to fight in the middle of the lake. The background is set but we still have a lot of work to finish the interior of arena. We hope you will like it!

HighresScreenshot00005

Until next time!

Development Update 9

We had a busy schedule lately. We have attended the Slovenian Games Conference where we also setup the boot for attendents to play!

22048027_1945068859068361_2343093143818272326_o

The feedback was really good. We especially loved that players that played it last year noticed our efforts in visuals, animation and user experience. We have also participated in Nordic Game Discovery session. Sadly, we didn’t win but hopefully we left good impressions.

22104405_1945068849068362_8381199497949747528_o

We are working really hard to deliver a polished product. While fighter is almost reworked, we are already working on the next class and hopefully the next update we can show progress on that part. We have refactored of many of our “behinds the scenes” systems: database and lobby servers are performing much faster, the game servers consume less CPU, the startup should be faster etc.

The gameplay changes are also part of this development update. We introduced stats on gear. Note that this change will NOT make Grounds of Glory pay to win as you can get the same character attributes by just playing, i.e. you cannot buy yourself an advantage that others without money cannot get over time. We opted for three stats system: power (increasing damage and healing), defence (decreasing damage taken) and cooldown reduction (reducing the cooldowns of all spells). Each season we intend to increase stats on gear by a minor amount so you want the new gear but can still easily compete with the gear from older seasons.

Screenshot 2017-10-21 10.33.53

There have been remarks that double DPS combos are doomed if they mess up the initial setup. That is why we added an experimental feature; when out of combat, you now slowly (1% per second) regenerate health. This should allow players to slowly recover health when kiting and hiding behind pillars. We know that this will break 1v1 balance slighlty but duels are not meant to be played for anything else but practice anyway.