Automatic Difficulty

What is Skillz Difficulty?

In a sentence, Skillz Difficulty is a number between 1 and 10 representing the game’s intended difficulty. A higher number represents a higher intended difficulty level. Skillz Difficulty is completely optional.

It’s also referred to as skillz_difficulty and SkillzDifficulty in the context of your source code, and is sometimes referred to as Automatic Difficulty elsewhere.

skillz_difficulty is a boolean attribute for your binary model: each binary you upload can have skillz_difficulty either enabled or disabled. When you upload a new binary in the developer portal, there’s a checkbox labeled “This binary implements Difficulty Settings”. Checking this checkbox when you upload the binary will enable the binary’s skillz_difficulty.

skillz_difficulty is also a match rule, or a game parameter. It’s part of the hash table of meta data about the player and the match made available to your game’s runtime.

 

Why would I use Skillz Difficulty?

Skillz Difficulty allows games to be equally fun for both beginners and experts, despite their difference in skill level.

With skillz_difficulty enabled, our server will calculate the skillz_difficulty value based on the player’s level of skill, which you can use to adjust the difficulty of your game automatically.

 

How does Skillz Difficulty work?

The number to denote difficulty level with skillz_difficulty is determined by the Skillz Tournament Server. When players win more matches, their player ranking goes up, and the Tournament Server gives them a higher skillz_difficulty value for their next games. Conversely, losing more will hurt a player’s ranking, and the Tournament Server will give a lower skillz_difficulty value for the player’s next games.

Players in the same match will always receive the same difficulty level.

 

Example use cases for Skillz Difficulty

Let’s say you have a mini golf game. Matches with a lower skillz_difficulty can feature simpler, more straightforward courses. Matches with a higher skillz_difficulty can feature courses which are longer and have more obstacles.

Or, let’s say you have a shooting game. Matches with a lower skillz_difficulty can give the player basic enemies. Asskillz_difficulty increases, the game can give the player a larger number of enemies with more health.

 

How to implement Skillz Difficulty

First, configure your game to accept a game parameter named skillz_difficulty with integer values between 1 and 10, inclusive.

New players start at a difficulty of 5 and are adjusted from there.

  • 1 should be very easy – playable for a true game novice who has never played video games.
  • 5 should be average difficulty – playable for a casual player who has some experience playing video games.
  • 10 should be extremely difficult – for the true experts, this should be nearly impossible for all but the very best players (who likely do not exist yet!)

To find the skillz_difficulty game parameter in native iOS, check the method params for tournamentWillBegin. The key to the hash table will be skillz_difficulty.

To find the skillz_difficulty game parameter in native Android, check the output for Skillz.getMatchRules(). The key to the hash table will be skillz_difficulty.

To find the skillz_difficulty game parameter in Skillz’s Unity wrapper, check the output for SkillzCrossPlatform.GetMatchRules(). The key to the hash table will be skillz_difficulty.

Second, make sure your code has a fallback in case the skillz_difficulty key doesn’t exist in the hash table. For instance, when the key doesn’t exist, you can set the difficulty level to 5. There are two reasons why the key might be missing: one is your sandbox binary with skillz_difficulty enabled hasn’t yet been uploaded to the developer portal, and the other is because you didn’t enable skillz_difficulty when you uploaded your binary (if you already uploaded one).

Remember, Skillz Difficulty is optional. If you do implement it, make sure to tick the “This binary implements Difficulty Settings” checkbox when you upload your binary to the Skillz Developer Portal. Otherwise, Skillz will not send you the skillz_difficulty parameter.

Third, when you upload your binary to the developer portal, be sure to check the “This binary implements Difficulty Settings”checkbox when submitting your new binary.

If your game is already in production but not yet live, reupload your game binary and make sure the option "This binary implements Automatic Difficulty" is selected.
 
If your game is already in production and is live, and Automatic Difficulty is currently disabled and you want to implement it, please email integrations@skillz.com for further support.
 

How to test Skillz Difficulty

After implementation, Skillz Difficulty should be tested in Sandbox. Log into the Skillz Developer portal, go to My Games, and choose your game. Go to the Tournaments section and edit Sandbox Tournaments to have a Game Parameter of skillz_difficulty with varying values and save your changes.

Screen_Shot_2017-09-20_at_2.45.12_PM.png

Log skillz_difficulty in your console to test the different types of tournaments in your Sandbox build and verify that the skillz_difficulty values correspond with what you entered as a Game Parameter.

  • For native iOS: Check the method params for tournamentWillBegin. The key to the hash table should be skillz_difficulty.
  • For native Android: Check the output for Skillz.getMatchRules(). The key to the hash table should be skillz_difficulty.
  • For Unity wrapper for iOS: Check the method params for OnTournamentWillBegin. The key to the hash table should be skillz_difficulty
  • For Unity wrapper for Android: Check the output for Skillz.GetMatchRules(). The key to the hash tables should be skillz_difficulty.

When you are ready to go live, delete the skillz_difficulty Game Parameter from your Developer Portal and save changes.

Screen_Shot_2017-09-20_at_2.44.55_PM.png 

When uploading your game binary to the Skillz Developer Portal, be sure to check the "This binary implements Automatic Difficulty" option.

Screen_Shot_2017-09-20_at_2.45.30_PM.png

 

Does Skillz Difficulty ensure fairness?

All matches are fair! Players in the same tournament will always receive the same difficulty level.

 

Are there any best practices with Skillz Difficulty?

If applicable to your game, players on higher difficulties should have the opportunity to earn more points (higher scores) than players on lower difficulties. For example, in an arcade survival shooter, surviving for a minute at difficulty 10 should lead to a significantly higher numeric score than surviving for a minute at difficulty 1. This could mean that higher difficulties contain more enemies to destroy, or that higher difficulties contain tougher enemies that are worth more points.