{"record":{"id":"5928662194cfc90a","repo":"OpenRA/OpenRA","slug":"minimumbuildings-must-be-0","errorCode":null,"errorMessage":"MinimumBuildings must be >= 0","messagePattern":"MinimumBuildings must be >= 0","errorType":"exception","errorClass":"MapGenerationException","httpStatus":null,"severity":"error","filePath":"OpenRA.Mods.Common/Traits/World/ClassicMapGenerator.cs","lineNumber":387,"sourceCode":"\t\t\t\t\tthrow new MapGenerationException(\"SpawnResourceSpawns must be >= 0\");\n\t\t\t\tif (ResourceSpawnReservation < 1)\n\t\t\t\t\tthrow new MapGenerationException(\"ResourceSpawnReservation must be >= 1\");\n\t\t\t\tif (MaximumExpansionResourceSpawns < 0)\n\t\t\t\t\tthrow new MapGenerationException(\"MaximumExpansionResourceSpawns must be >= 0\");\n\t\t\t\tif (MinimumExpansionSize < 1)\n\t\t\t\t\tthrow new MapGenerationException(\"MinimumExpansionSize must be >= 1\");\n\t\t\t\tif (MaximumExpansionSize < 1)\n\t\t\t\t\tthrow new MapGenerationException(\"MaximumExpansionSize must be >= 1\");\n\t\t\t\tif (MinimumExpansionSize > MaximumExpansionSize)\n\t\t\t\t\tthrow new MapGenerationException(\"MinimumExpansionSize must be <= maximumExpansionSize\");\n\t\t\t\tif (ExpansionBorder < 1)\n\t\t\t\t\tthrow new MapGenerationException(\"ExpansionBorder must be >= 1\");\n\t\t\t\tif (ExpansionInner < 1)\n\t\t\t\t\tthrow new MapGenerationException(\"ExpansionInner must be >= 1\");\n\t\t\t\tif (MaximumResourceSpawnsPerExpansion < 1)\n\t\t\t\t\tthrow new MapGenerationException(\"MaximumResourceSpawnsPerExpansion must be >= 1\");\n\t\t\t\tif (MinimumBuildings < 0)\n\t\t\t\t\tthrow new MapGenerationException(\"MinimumBuildings must be >= 0\");\n\t\t\t\tif (MaximumBuildings < 0)\n\t\t\t\t\tthrow new MapGenerationException(\"MaximumBuildings must be >= 0\");\n\t\t\t\tif (MinimumBuildings > MaximumBuildings)\n\t\t\t\t\tthrow new MapGenerationException(\"MinimumBuildings must be <= maximumBuildings\");\n\t\t\t\tif (CivilianBuildings < 0 || CivilianBuildings > FractionMax)\n\t\t\t\t\tthrow new MapGenerationException($\"CivilianBuildings must be between 0 and {FractionMax} inclusive\");\n\t\t\t\tif (CivilianBuildingDensity < 0 || CivilianBuildingDensity > FractionMax)\n\t\t\t\t\tthrow new MapGenerationException($\"CivilianBuildingDensity must be between 0 and {FractionMax} inclusive\");\n\t\t\t\tif (MinimumCivilianBuildingDensity < 0 || MinimumCivilianBuildingDensity > FractionMax)\n\t\t\t\t\tthrow new MapGenerationException($\"MinimumCivilianBuildingDensity must be between 0 and {FractionMax} inclusive\");\n\t\t\t\tif (CivilianBuildingDensityRadius < 0)\n\t\t\t\t\tthrow new MapGenerationException(\"CivilianBuildingDensityRadius must be >= 0\");\n\t\t\t\tif (ResourcesPerPlayer < 0)\n\t\t\t\t\tthrow new MapGenerationException(\"ResourcesPerPlayer must be >= 0\");\n\t\t\t\tif (OreUniformity < 0)\n\t\t\t\t\tthrow new MapGenerationException(\"OreUniformity must be >= 0\");\n\t\t\t\tif (OreClumpiness < 0)\n\t\t\t\t\tthrow new MapGenerationException(\"OreClumpiness must be >= 0\");","sourceCodeStart":369,"sourceCodeEnd":405,"githubUrl":"https://github.com/OpenRA/OpenRA/blob/a520984d91eda9de48a62b1d15c1e3bad0d4fb1a/OpenRA.Mods.Common/Traits/World/ClassicMapGenerator.cs#L369-L405","documentation":"Thrown when MinimumBuildings is negative. MinimumBuildings is the lower bound on civilian building count placed per region; negative values are meaningless for a count and would corrupt the building placement loop.","triggerScenarios":"Map generation with the MinimumBuildings yaml field set to a negative integer.","commonSituations":"Typo/negative value in the yaml, or copying a config and sign-flipping the number. Note 0 is allowed (no minimum).","solutions":["Set MinimumBuildings to 0 or a positive integer.","Ensure MinimumBuildings <= MaximumBuildings (see error 507)."],"exampleFix":"# before\nMinimumBuildings: -1\n# after\nMinimumBuildings: 0","handlingStrategy":"validation","validationCode":"if (param.MinimumBuildings < 0)\n    throw new InvalidOperationException(\"MinimumBuildings must be >= 0\");","typeGuard":"static bool MinimumBuildingsOk(ClassicMapGeneratorInfo.Parameters p) => p.MinimumBuildings >= 0;","tryCatchPattern":"try { mapGenerator.Generate(modData, args); }\ncatch (MapGenerationException ex) when (ex.Message.Contains(\"MinimumBuildings must be >=\"))\n{ /* use 0 or a positive value */ }","preventionTips":["Use 0 (not negative) to express 'no minimum'.","Pair with MaximumBuildings to keep a valid range."],"tags":["openra","map-generation","yaml-config","validation","config-error"],"backgroundTag":null,"analyzedSha":"a520984d91eda9de48a62b1d15c1e3bad0d4fb1a","analyzedAt":"2026-08-13T15:30:14.787Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}