in procgen/src/game.cpp [42:75]
void Game::parse_options(std::string name, VecOptions opts) {
opts.consume_bool("use_easy_jump", &options.use_easy_jump);
opts.consume_bool("paint_vel_info", &options.paint_vel_info);
opts.consume_bool("use_generated_assets", &options.use_generated_assets);
opts.consume_bool("use_monochrome_assets", &options.use_monochrome_assets);
opts.consume_bool("restrict_themes", &options.restrict_themes);
opts.consume_bool("use_backgrounds", &options.use_backgrounds);
opts.consume_bool("center_agent", &options.center_agent);
opts.consume_bool("use_sequential_levels", &options.use_sequential_levels);
int dist_mode = EasyMode;
opts.consume_int("distribution_mode", &dist_mode);
options.distribution_mode = static_cast<DistributionMode>(dist_mode);
if (options.distribution_mode == EasyMode) {
fassert(name != "coinrun_old");
} else if (options.distribution_mode == HardMode) {
// all environments support this mode
} else if (options.distribution_mode == ExtremeMode) {
fassert(name == "chaser" || name == "dodgeball" || name == "leaper" || name == "starpilot");
} else if (options.distribution_mode == MemoryMode) {
fassert(name == "caveflyer" || name == "dodgeball" || name == "heist" || name == "jumper" || name == "maze" || name == "miner");
} else {
fatal("invalid distribution_mode %d\n", options.distribution_mode);
}
// coinrun_old
opts.consume_int("plain_assets", &options.plain_assets);
opts.consume_int("physics_mode", &options.physics_mode);
opts.consume_int("debug_mode", &options.debug_mode);
opts.consume_int("game_type", &game_type);
opts.ensure_empty();
}