From cdbcfb9e206ea6430e4fcd1f12e8bf60027ddb68 Mon Sep 17 00:00:00 2001 From: Ashley Newson Date: Tue, 28 Jan 2025 20:06:56 +0000 Subject: [PATCH] Fix illegal ore rings popping up around spawns in generated maps Reorders and groups selective clearing of the resource placement plan to -int.MaxValue to avoid subsequent code from inappropriately trying to use it in arithmetic, which may just underflow to some completely wrong value and lead to resources in illegal places. --- OpenRA.Mods.Common/Traits/World/RaMapGenerator.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/OpenRA.Mods.Common/Traits/World/RaMapGenerator.cs b/OpenRA.Mods.Common/Traits/World/RaMapGenerator.cs index aead5839fc..d7de7b5df3 100644 --- a/OpenRA.Mods.Common/Traits/World/RaMapGenerator.cs +++ b/OpenRA.Mods.Common/Traits/World/RaMapGenerator.cs @@ -1481,10 +1481,7 @@ namespace OpenRA.Mods.Common.Traits // Closer to +inf means "more preferable" for plan. var plan1024ths = new CellLayer(map); foreach (var mpos in map.AllCells.MapCoords) - if (playableArea[mpos] && param.AllowedTerrainResourceCombos.Contains((bestResource[mpos], map.GetTerrainIndex(mpos)))) - plan1024ths[mpos] = pattern1024ths[mpos] * maxStrength1024ths[mpos] / 1024; - else - plan1024ths[mpos] = -int.MaxValue; + plan1024ths[mpos] = pattern1024ths[mpos] * maxStrength1024ths[mpos] / 1024; var wSpawnBuildSizeSq = (long)param.SpawnBuildSize * param.SpawnBuildSize * 1024 * 1024; foreach (var actorPlan in actorPlans) @@ -1497,6 +1494,10 @@ namespace OpenRA.Mods.Common.Traits action: (mpos, _, _, rSq) => plan1024ths[mpos] += (int)(plan1024ths[mpos] * param.SpawnResourceBias * wSpawnBuildSizeSq / Math.Max(rSq, 1024 * 1024) / FractionMax)); + foreach (var mpos in map.AllCells.MapCoords) + if (!playableArea[mpos] || !param.AllowedTerrainResourceCombos.Contains((bestResource[mpos], map.GetTerrainIndex(mpos)))) + plan1024ths[mpos] = -int.MaxValue; + foreach (var actorPlan in actorPlans) if (actorPlan.Reference.Type == "mpspawn") CellLayerUtils.OverCircle(