Skip to content

Game Configs System

Configuration data that defines game difficulty, levels, and balance.

See also: GameConfigsParsing.md for detailed documentation on JSON parsing, level inheritance, and where config values are used.

Key Files

FileLocationPurpose
RunDifficultyAssets/_Game/Scripts/Data/RunDifficulty.csDifficulty presets
LevelConfigAssets/_Game/Scripts/Data/LevelConfig.csIndividual level definitions
LevelDefinitionDataAssets/_Game/Scripts/Data/Config/LevelDefinitionData.csJSON-loadable level data
GameConfigDataAssets/_Game/Scripts/Data/Config/GameConfigData.csGlobal game settings
GameConfigManagerAssets/_Game/Scripts/Managers/GameConfigManager.csConfig loading and access

RunDifficulty

ScriptableObject defining difficulty presets:

[CreateAssetMenu]
public class RunDifficulty : ScriptableObject
{
public string difficultyName;
public float scoreMultiplier;
public bool EndGameOnTargetScore;
// ... more settings
}

Located in: Assets/_Game/Data/Difficulties/

LevelConfig

Defines a single level’s gameplay parameters:

PropertyTypeDescription
IdstringUnique identifier
scoreRequiredintTarget score to pass
timeLimitfloatSession duration in seconds
catSpawnsConfigCatSpawnInfo[]Which cats appear and when
availableCategoriesCakeCategory[]Cake types available
catBaseOrderTimeMultiplierfloatPatience modifier
numberOfTablesintActive table positions

GameConfigData

Root container for JSON-loaded configuration:

[Serializable]
public class GameConfigData
{
public GlobalGameSettings globalSettings;
public List<ItemConfigData> items;
public List<LevelDefinitionData> levels;
public List<UniqueCatsConfigData> uniqueCats;
}

Remote Config System

Location: Assets/_Game/Scripts/Systems/GameConfig/

  • RemoteGameConfigManager - Handles config selection and caching
  • RemoteGameConfigService - HTTP requests to config server
  • Supports: Default (StreamingAssets), Dev (Editor), Remote (server)
  • Disk caching via Application.persistentDataPath

Adding New Configs

  1. ScriptableObject approach:

    • Create asset in Assets/_Game/Data/Configs/
    • Assign to appropriate database or campaign
  2. JSON approach:

    • Add to GameConfigData structure
    • Load via GameConfigManager
  3. Test via Unity Test Runner