# HG changeset patch # User Wuzzy # Date 1560796054 -7200 # Node ID 2765731b378b9e103e4766c0f5f5da5b9bb44bd8 # Parent 3cc1a79de3fd6b3ccd5c93961ab62cdab40accc3 New formula to calculate drawn map sizes, now every FeatureSize leads to an unique size It works by using 4 hardcoded map sizes and the rest is simply interpolated. Size 1: 1024×512 Size 6: 2048×1024 Size 12: 4096×2048 (default, compatible with pre-1.0.0) Size 25: 8192×4096 diff -r 3cc1a79de3fd -r 2765731b378b hedgewars/uLand.pas --- a/hedgewars/uLand.pas Mon Jun 17 20:20:01 2019 +0200 +++ b/hedgewars/uLand.pas Mon Jun 17 20:27:34 2019 +0200 @@ -282,11 +282,9 @@ procedure GenDrawnMap; +var lowerX, upperX, lowerY, upperY, lowerFS, upperFS, value: LongInt; begin - if (cFeatureSize <= 3) then - // sizes 1-3 are identical - MaxHedgehogs:= 8 - else if (cFeatureSize <= 6) then + if (cFeatureSize <= 6) then MaxHedgehogs:= 6 + (cFeatureSize-1) * 2 else if (cFeatureSize < 11) then MaxHedgehogs:= 16 + (cFeatureSize-6) * 4 @@ -298,9 +296,56 @@ MaxHedgehogs:= cMaxHHs; if GameType = gmtLandPreview then - cFeatureSize:= 3; - playWidth:= (4096 * max(min(cFeatureSize,24),3)) div 12; - playHeight:= (2048 * max(min(cFeatureSize,24),3)) div 12; + cFeatureSize:= 1; + + // Calculate map size for drawn map, use cFeatureSize to scale. + + // We have pre-determined map size for cFeatureSize 1, 6, 12 and 25. + // The other values will be interpolated. + if cFeatureSize < 6 then + begin + // reference size for cFeatureSize 1 + lowerFS:= 1; + lowerX:= 1024; + lowerY:= 512; + upperFS:= 6; + end + else if cFeatureSize < 12 then + begin + // reference size for cFeatureSize 6 + lowerFS:= 6; + lowerX:= 2048; + lowerY:= 1024; + upperFS:= 12; + end + else + begin + // reference size for cFeatureSize 12, size of drawn maps in pre-1.0.0 versions + lowerFS:= 12; + lowerX:= 4096; + lowerY:= 2048; + upperFS:= 25; + end; + + upperX:= lowerX * 2; + upperY:= lowerY * 2; + + if cFeatureSize = 25 then + begin + // hardcoded size for size level 25 + playWidth:= 8192; + playHeight:= 4096; + end + else + begin + // Interpolation formula + playWidth:= lowerX + ((upperX-lowerX) div (upperFS-lowerFS))*(cFeatureSize-lowerFS); + playHeight:= lowerY + ((upperY-lowerY) div (upperFS-lowerFS))*(cFeatureSize-lowerFS); + end; + + if GameType <> gmtLandPreview then + WriteLnToConsole('Drawn map size: cFeatureSize='+IntToStr(cFeatureSize)+' playWidth='+IntToStr(playWidth)+' playHeight='+IntToStr(playHeight)); + ResizeLand(playWidth, playHeight); hasGirders:= true;