Gaming/Difficulty tuning

Difficulty that adjusts before the player quits.

Signals tells your game server how many times this player has failed the level this session, how long since they last won and how long they have been away, so difficulty, boosts and hints follow what the player is doing now.

Higher D1 and D7 retention

Keep more players past the first day and the first week by tuning the level while they are still playing.

Early retention moves when the level a player is stuck on changes before they close the game. Signals gives your game server this player's attempts and failures on the current level this session, how long since they last won and how long they have been away. Your designers write the rules for easing, boosting and raising the challenge, your server applies them on the next level load, and a rule changes without a client release.

Ease the level on the third failure, before the quit

A player who installed this morning has failed level four three times in a row, and the game is loading it a fourth time unchanged. Difficulty is set per level in the balance sheet, so a level that is too hard for new players shows up in the funnel review and changes in the next patch. By then this player has gone. The fourth attempt is where the level needs to give a little, with a slower wave, an extra life or a boost dropped into the inventory.

What Signals knows
level_failures_session
How many times they failed each level this session
level_attempts_session
How many times they started each level this session
levels_cleared_lifetime
Levels they have ever completed
What your game server does

Loads the fourth attempt with the easing your designers set for that level, a slower wave or an extra life, once this player's failures on it reach three this session and they are still in their first few levels, and leaves the level as designed for everyone else.

game-server.ts · 13 lines
// In the game server, when it builds the next level load
const player = await signals.getServiceAttributes({
  name: "game_difficulty_retry",
  attribute_key: "user_id",
  identifier: playerId,
});
// { level_failures_session: { "4": 3, "3": 1 }, level_attempts_session: { "4": 4, "3": 2 }, levels_cleared_lifetime: 3 }

const failures = player.level_failures_session[levelId] ?? 0;

if (failures >= 3 && player.levels_cleared_lifetime < 10) {
  level.load({ id: levelId, tuning: "eased", grant: "extra_life" });
}

Try it on your own site.

Add the SDK, define one thing you want to know about a visitor, and watch it update while you click around. The free tier runs on the real engine: no card, no sales call.