Difficulty Settings

Difficulty settings live under settings.difficultySettings in config.json. Each entry defines the name and gameplay scaling for one difficulty option.

Shape

{
  "name": "Normal",
  "enemiesDifficulty": 4,
  "maxInitialLives": 5,
  "initialCredits": 3,
  "hasInfiniteContinues": false,
  "hasInstantEnemiesPulling": true,
  "settingsPerNumPlayers": []
}

Difficulty Fields

Field Type Description
name string Name shown in difficulty selection.
enemiesDifficulty int Classic-style enemy difficulty value.
maxInitialLives int Maximum initial lives selectable or assigned.
initialCredits int Starting credits.
hasInfiniteContinues bool Enables unlimited continues for this difficulty.
hasInstantEnemiesPulling bool Pulls or activates enemies more aggressively.
settingsPerNumPlayers array Scaling rules by number of active players.

Per-Player Scaling

Each entry in settingsPerNumPlayers applies to a player-count band. The game clamps to the closest available entry when needed.

{
  "maxNumEnemies": 8,
  "enemiesHealthMultiplier": { "numerator": 3, "denominator": 2 },
  "bossesHealthMultiplier": { "numerator": 2, "denominator": 1 },
  "enemiesDamageMultiplier": { "numerator": 1, "denominator": 1 },
  "enemiesVelocityMultiplier": { "numerator": 15, "denominator": 14 },
  "playersDamageMultiplier": { "numerator": 1, "denominator": 1 },
  "enemiesOnScreenActivationMultiplier": { "numerator": 3, "denominator": 2 },
  "timeActivationMultiplier": { "numerator": 5, "denominator": 4 },
  "useNextSpawnsDifficulty": true
}
Field Description
maxNumEnemies Maximum enemies allowed on screen.
enemiesHealthMultiplier Health scaling for normal enemies.
bossesHealthMultiplier Health scaling for bosses.
enemiesDamageMultiplier Damage scaling for enemies.
enemiesVelocityMultiplier Movement speed scaling for enemies.
playersDamageMultiplier Damage scaling for players.
enemiesOnScreenActivationMultiplier How many enemies can activate based on screen presence.
timeActivationMultiplier Time-based activation scaling.
useNextSpawnsDifficulty Allows later spawn definitions to use the next difficulty band.

Editing Guidance

For Classic reskins, difficulty settings are usually left alone. Change them when the reskin also changes balance, player count, or intended challenge.

When editing by hand:

  • keep at least one difficulty
  • keep settingsPerNumPlayers non-empty
  • use fraction multipliers instead of decimals
  • test one-player and multiplayer runs
  • verify menus still display every difficulty name