--- a/hedgewars/uLand.pas Fri Mar 14 16:00:36 2014 +0400
+++ b/hedgewars/uLand.pas Fri Mar 14 19:59:34 2014 +0400
@@ -32,34 +32,11 @@
implementation
uses uConsole, uStore, uRandom, uLandObjects, uIO, uLandTexture, SysUtils,
uVariables, uUtils, uCommands, adler32, uDebug, uLandPainted, uTextures,
- uLandGenMaze, uLandOutline, uPhysFSLayer, uScript, uLandGenPerlin;
+ uLandGenMaze, uLandOutline, uPhysFSLayer, uScript, uLandGenPerlin,
+ uLandGenTemplateBased, uLandUtils;
var digest: shortstring;
-procedure ResizeLand(width, height: LongWord);
-var potW, potH: LongInt;
-begin
-potW:= toPowerOf2(width);
-potH:= toPowerOf2(height);
-if (potW <> LAND_WIDTH) or (potH <> LAND_HEIGHT) then
- begin
- LAND_WIDTH:= potW;
- LAND_HEIGHT:= potH;
- LAND_WIDTH_MASK:= not(LAND_WIDTH-1);
- LAND_HEIGHT_MASK:= not(LAND_HEIGHT-1);
- cWaterLine:= LAND_HEIGHT;
- if (cReducedQuality and rqBlurryLand) = 0 then
- SetLength(LandPixels, LAND_HEIGHT, LAND_WIDTH)
- else
- SetLength(LandPixels, LAND_HEIGHT div 2, LAND_WIDTH div 2);
-
- SetLength(Land, LAND_HEIGHT, LAND_WIDTH);
- SetLength(LandDirty, (LAND_HEIGHT div 32), (LAND_WIDTH div 32));
- // 0.5 is already approaching on unplayable
- if (width div 4096 >= 2) or (height div 2048 >= 2) then cMaxZoomLevel:= 0.5;
- cMinMaxZoomLevelDelta:= cMaxZoomLevel - cMinZoomLevel
- end;
-end;
procedure PrettifyLandAlpha();
begin
@@ -221,139 +198,6 @@
if (LandBackSurface <> nil) and GrayScale then Surface2GrayScale(LandBackSurface);
end;
-procedure SetPoints(var Template: TEdgeTemplate; var pa: TPixAr; fps: PPointArray);
-var i: LongInt;
-begin
-with Template do
- begin
- pa.Count:= BasePointsCount;
- for i:= 0 to pred(pa.Count) do
- begin
- pa.ar[i].x:= BasePoints^[i].x + LongInt(GetRandom(BasePoints^[i].w));
- if pa.ar[i].x <> NTPX then
- pa.ar[i].x:= pa.ar[i].x + ((LAND_WIDTH - Template.TemplateWidth) div 2);
- pa.ar[i].y:= BasePoints^[i].y + LongInt(GetRandom(BasePoints^[i].h)) + LAND_HEIGHT - LongInt(Template.TemplateHeight)
- end;
-
- if canMirror then
- if getrandom(2) = 0 then
- begin
- for i:= 0 to pred(BasePointsCount) do
- if pa.ar[i].x <> NTPX then
- pa.ar[i].x:= LAND_WIDTH - 1 - pa.ar[i].x;
- for i:= 0 to pred(FillPointsCount) do
- fps^[i].x:= LAND_WIDTH - 1 - fps^[i].x;
- end;
-
-(* Experiment in making this option more useful
- if ((not isNegative) and (cTemplateFilter = 4)) or
- (canFlip and (getrandom(2) = 0)) then
- begin
- for i:= 0 to pred(BasePointsCount) do
- begin
- pa.ar[i].y:= LAND_HEIGHT - 1 - pa.ar[i].y + (LAND_HEIGHT - TemplateHeight) * 2;
- if pa.ar[i].y > LAND_HEIGHT - 1 then
- pa.ar[i].y:= LAND_HEIGHT - 1;
- end;
- for i:= 0 to pred(FillPointsCount) do
- begin
- FillPoints^[i].y:= LAND_HEIGHT - 1 - FillPoints^[i].y + (LAND_HEIGHT - TemplateHeight) * 2;
- if FillPoints^[i].y > LAND_HEIGHT - 1 then
- FillPoints^[i].y:= LAND_HEIGHT - 1;
- end;
- end;
- end
-*)
-// template recycling. Pull these off the floor a bit
- if (not isNegative) and (cTemplateFilter = 4) then
- begin
- for i:= 0 to pred(BasePointsCount) do
- begin
- dec(pa.ar[i].y, 100);
- if pa.ar[i].y < 0 then
- pa.ar[i].y:= 0;
- end;
- for i:= 0 to pred(FillPointsCount) do
- begin
- dec(fps^[i].y, 100);
- if fps^[i].y < 0 then
- fps^[i].y:= 0;
- end;
- end;
-
- if (canFlip and (getrandom(2) = 0)) then
- begin
- for i:= 0 to pred(BasePointsCount) do
- pa.ar[i].y:= LAND_HEIGHT - 1 - pa.ar[i].y;
- for i:= 0 to pred(FillPointsCount) do
- fps^[i].y:= LAND_HEIGHT - 1 - fps^[i].y;
- end;
- end
-end;
-
-
-procedure GenBlank(var Template: TEdgeTemplate);
-var pa: TPixAr;
- i: Longword;
- y, x: Longword;
- fps: TPointArray;
-begin
- fps:=Template.FillPoints^;
- ResizeLand(Template.TemplateWidth, Template.TemplateHeight);
- for y:= 0 to LAND_HEIGHT - 1 do
- for x:= 0 to LAND_WIDTH - 1 do
- Land[y, x]:= lfBasic;
- {$HINTS OFF}
- SetPoints(Template, pa, @fps);
- {$HINTS ON}
-
- for i:= 1 to Template.BezierizeCount do
- begin
- BezierizeEdge(pa, _0_5);
- RandomizePoints(pa);
- RandomizePoints(pa)
- end;
- for i:= 1 to Template.RandPassesCount do
- RandomizePoints(pa);
- BezierizeEdge(pa, _0_1);
-
-
- DrawEdge(pa, 0);
-
- with Template do
- for i:= 0 to pred(FillPointsCount) do
- with fps[i] do
- FillLand(x, y, 0, 0);
-
- DrawEdge(pa, lfBasic);
-
- MaxHedgehogs:= Template.MaxHedgehogs;
- hasGirders:= Template.hasGirders;
- playHeight:= Template.TemplateHeight;
- playWidth:= Template.TemplateWidth;
- leftX:= ((LAND_WIDTH - playWidth) div 2);
- rightX:= (playWidth + ((LAND_WIDTH - playWidth) div 2)) - 1;
- topY:= LAND_HEIGHT - playHeight;
-
- // HACK: force to only cavern even if a cavern map is invertable if cTemplateFilter = 4 ?
- if (cTemplateFilter = 4)
- or (Template.canInvert and (getrandom(2) = 0))
- or (not Template.canInvert and Template.isNegative) then
- begin
- hasBorder:= true;
- for y:= 0 to LAND_HEIGHT - 1 do
- for x:= 0 to LAND_WIDTH - 1 do
- if (y < topY) or (x < leftX) or (x > rightX) then
- Land[y, x]:= 0
- else
- begin
- if Land[y, x] = 0 then
- Land[y, x]:= lfBasic
- else if Land[y, x] = lfBasic then
- Land[y, x]:= 0;
- end;
- end;
-end;
procedure GenDrawnMap;
begin
@@ -701,7 +545,7 @@
begin
WriteLnToConsole('Generating land...');
case cMapGen of
- 0: GenBlank(EdgeTemplates[SelectTemplate]);
+ 0: GenTemplated(EdgeTemplates[SelectTemplate]);
//1: begin ResizeLand(4096,2048); GenMaze; end;
1: begin ResizeLand(4096,2048); GenPerlin; end;
2: GenDrawnMap;
@@ -830,7 +674,7 @@
begin
WriteLnToConsole('Generating preview...');
case cMapGen of
- 0: GenBlank(EdgeTemplates[SelectTemplate]);
+ 0: GenTemplated(EdgeTemplates[SelectTemplate]);
//1: begin ResizeLand(4096,2048); GenMaze; end;
1: begin ResizeLand(4096,2048); GenPerlin; end;
2: GenDrawnMap;
@@ -878,7 +722,7 @@
begin
WriteLnToConsole('Generating preview...');
case cMapGen of
- 0: GenBlank(EdgeTemplates[SelectTemplate]);
+ 0: GenTemplated(EdgeTemplates[SelectTemplate]);
//1: begin ResizeLand(4096,2048); GenMaze; end;
1: begin ResizeLand(4096,2048); GenPerlin; end;
2: GenDrawnMap;