{"record":{"id":"9c38a1f42c6c4c46","repo":"OpenRA/OpenRA","slug":"failed-to-generate-map-metadata","errorCode":null,"errorMessage":"Failed to generate map metadata","messagePattern":"Failed to generate map metadata","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"OpenRA.Game/Map/MapPreview.cs","lineNumber":488,"sourceCode":"\t\t\tnewData.Class = MapClassification.Generated;\n\t\t\tnewData.Status = MapStatus.Generatable;\n\t\t\tnewData.Title = args.Title;\n\t\t\tnewData.Author = args.Author;\n\t\t\tnewData.TileSet = args.Tileset;\n\t\t\tnewData.GenerationArgs = args;\n\t\t\tnewData.MapFormat = Map.CurrentMapFormat;\n\n\t\t\ttry\n\t\t\t{\n\t\t\t\tvar generator = modData.DefaultRules.Actors[SystemActors.EditorWorld]\n\t\t\t\t\t.TraitInfos<IMapGeneratorInfo>()\n\t\t\t\t\t.FirstOrDefault(info => info.Type == args.Generator);\n\n\t\t\t\tif (generator == null)\n\t\t\t\t\tthrow new Exception($\"Unknown map generator type {args.Generator}\");\n\n\t\t\t\tif (!generator.TryGenerateMetadata(modData, args, out var players, out var ruleDefinitions))\n\t\t\t\t\tthrow new Exception(\"Failed to generate map metadata\");\n\n\t\t\t\tnewData.Players = players;\n\t\t\t\tnewData.PlayerCount = newData.Players.Players.Count(x => x.Value.Playable);\n\t\t\t\tnewData.SetCustomRules(modData, this, ruleDefinitions, null);\n\n\t\t\t\t// Placeholder to satisfy server-side lint checks\n\t\t\t\tnewData.SpawnPoints = Exts.MakeArray(newData.PlayerCount, i => new CPos(i, i)).ToImmutableArray();\n\t\t\t}\n\t\t\tcatch (Exception e)\n\t\t\t{\n\t\t\t\tLog.Write(\"debug\", \"Map generation failed with error:\");\n\t\t\t\tLog.Write(\"debug\", e);\n\n\t\t\t\tnewData.Status = MapStatus.Unavailable;\n\t\t\t}\n\n\t\t\tlock (syncRoot)\n\t\t\t\tinnerData = newData;","sourceCodeStart":470,"sourceCodeEnd":506,"githubUrl":"https://github.com/OpenRA/OpenRA/blob/a520984d91eda9de48a62b1d15c1e3bad0d4fb1a/OpenRA.Game/Map/MapPreview.cs#L470-L506","documentation":"A matching generator was found, but its TryGenerateMetadata returned false, meaning it rejected the generation arguments (e.g. invalid size, tileset, or player count) and produced no metadata.","triggerScenarios":"MapPreview metadata path: generator != null but generator.TryGenerateMetadata(modData, args, ...) returns false.","commonSituations":"Generation args with an unsupported map size, missing tileset, or out-of-range player count; a generator implementation that imposes limits the caller exceeded.","solutions":["Inspect the generator's TryGenerateMetadata implementation to see which args it rejects.","Validate generation args (size, tileset, player count) against the generator's documented limits before calling.","Check the debug log around the failure for the generator's internal reason."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":"if (!generator.TryGenerateMetadata(modData, args, out var players, out var rules))\n    throw new Exception($\"Generator {generator.Type} rejected args: size={args.Size} tileset={args.Tileset}\");","typeGuard":null,"tryCatchPattern":"try { /* generate metadata */ }\ncatch (Exception e) when (e.Message.Contains(\"Failed to generate map metadata\"))\n{ /* inspect args vs generator limits */ }","preventionTips":["Validate size/tileset/player-count against the generator's limits before calling.","Inspect TryGenerateMetadata internals for rejection conditions.","Log args on failure for diagnosis."],"tags":["map","generator","validation"],"backgroundTag":null,"analyzedSha":"a520984d91eda9de48a62b1d15c1e3bad0d4fb1a","analyzedAt":"2026-08-13T15:30:14.787Z","schemaVersion":2},"datasetVersion":"2026-08-13T19:17:28.613Z"}