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
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 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.
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. As
skillz_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
To find the
skillz_difficulty game parameter in native Android, check the output for
Skillz.getMatchRules(). The key to the hash table will be
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
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
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.
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.
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.
When uploading your game binary to the Skillz Developer Portal, be sure to check the "This binary implements Automatic Difficulty" option.
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.