# HG changeset patch # User unc0rr # Date 1407957248 -14400 # Node ID cb17b79844b5d8dffb4272497c402c4d76c73d93 # Parent c9e38f8d4f9498ac8666c94db5d90673164eca09 Apply new distortion on maze gen diff -r c9e38f8d4f94 -r cb17b79844b5 hedgewars/uLand.pas --- a/hedgewars/uLand.pas Wed Aug 13 22:31:28 2014 +0400 +++ b/hedgewars/uLand.pas Wed Aug 13 23:14:08 2014 +0400 @@ -546,8 +546,8 @@ WriteLnToConsole('Generating land...'); case cMapGen of 0: GenTemplated(EdgeTemplates[SelectTemplate]); - //1: begin ResizeLand(4096,2048); GenMaze; end; - 1: begin ResizeLand(4096,2048); GenPerlin; end; + 1: begin ResizeLand(4096,2048); GenMaze; end; + //1: begin ResizeLand(4096,2048); GenPerlin; end; 2: GenDrawnMap; else OutError('Unknown mapgen', true); @@ -675,8 +675,8 @@ WriteLnToConsole('Generating preview...'); case cMapGen of 0: GenTemplated(EdgeTemplates[SelectTemplate]); - //1: begin ResizeLand(4096,2048); GenMaze; end; - 1: begin ResizeLand(4096,2048); GenPerlin; end; + 1: begin ResizeLand(4096,2048); GenMaze; end; + //1: begin ResizeLand(4096,2048); GenPerlin; end; 2: GenDrawnMap; else OutError('Unknown mapgen', true); @@ -723,8 +723,8 @@ WriteLnToConsole('Generating preview...'); case cMapGen of 0: GenTemplated(EdgeTemplates[SelectTemplate]); - //1: begin ResizeLand(4096,2048); GenMaze; end; - 1: begin ResizeLand(4096,2048); GenPerlin; end; + 1: begin ResizeLand(4096,2048); GenMaze; end; + //1: begin ResizeLand(4096,2048); GenPerlin; end; 2: GenDrawnMap; else OutError('Unknown mapgen', true); diff -r c9e38f8d4f94 -r cb17b79844b5 hedgewars/uLandGenMaze.pas --- a/hedgewars/uLandGenMaze.pas Wed Aug 13 22:31:28 2014 +0400 +++ b/hedgewars/uLandGenMaze.pas Wed Aug 13 23:14:08 2014 +0400 @@ -8,7 +8,7 @@ implementation -uses uRandom, uLandOutline, uLandTemplates, uVariables, uFloat, uConsts; +uses uRandom, uLandOutline, uLandTemplates, uVariables, uFloat, uConsts, uLandGenTemplateBased; type direction = record x, y: LongInt; end; const DIR_N: direction = (x: 0; y: -1); @@ -202,36 +202,46 @@ end; procedure add_vertex(x, y: LongInt); -var tmp_x, tmp_y: LongInt; -begin -if x = NTPX then +var tmp_x, tmp_y, nx, ny: LongInt; begin - if pa.ar[num_vertices - 6].x = NTPX then + if x = NTPX then begin - num_vertices := num_vertices - 6; + if pa.ar[num_vertices - 6].x = NTPX then + begin + num_vertices := num_vertices - 6; + end + else + begin + pa.ar[num_vertices].x := NTPX; + pa.ar[num_vertices].y := 0; + end end else begin - pa.ar[num_vertices].x := NTPX; - pa.ar[num_vertices].y := 0; - end -end -else -begin - if maze_inverted or (x mod 2 = 0) then - tmp_x := cellsize - else - tmp_x := cellsize * 2 div 3; + if maze_inverted or (x mod 2 = 0) then + tmp_x := cellsize + else + tmp_x := cellsize * 2 div 3; + + if maze_inverted or (y mod 2 = 0) then + tmp_y := cellsize + else + tmp_y := cellsize * 2 div 3; - if maze_inverted or (y mod 2 = 0) then - tmp_y := cellsize - else - tmp_y := cellsize * 2 div 3; + nx:= (x-1)*cellsize + tmp_x; + ny:= (y-1)*cellsize + tmp_y + off_y; - pa.ar[num_vertices].x := (x-1)*cellsize + tmp_x; - pa.ar[num_vertices].y := (y-1)*cellsize + tmp_y + off_y; -end; -num_vertices := num_vertices + 1; + if num_vertices > 2 then + if ((pa.ar[num_vertices - 2].x = pa.ar[num_vertices - 1].x) and (pa.ar[num_vertices - 1].x = nx)) + or ((pa.ar[num_vertices - 2].y = pa.ar[num_vertices - 1].y) and (pa.ar[num_vertices - 1].y = ny)) + then + dec(num_vertices); + + pa.ar[num_vertices].x := nx; + pa.ar[num_vertices].y := ny; + end; + + num_vertices := num_vertices + 1; end; procedure add_edge(x, y: LongInt; dir: direction); @@ -265,42 +275,43 @@ else dir := DIR_N; -if (dir = DIR_N) and is_x_edge(x, y) then - begin - x_edge_list[x, y] := false; - add_vertex(x+1, y); - add_edge(x, y-1, DIR_N); - break; - end; + if (dir = DIR_N) and is_x_edge(x, y) then + begin + x_edge_list[x, y] := false; + add_vertex(x+1, y); + add_edge(x, y-1, DIR_N); + break; + end; -if (dir = DIR_E) and is_y_edge(x+1, y) then - begin - y_edge_list[x+1, y] := false; - add_vertex(x+2, y+1); - add_edge(x+1, y, DIR_E); - break; - end; + if (dir = DIR_E) and is_y_edge(x+1, y) then + begin + y_edge_list[x+1, y] := false; + add_vertex(x+2, y+1); + add_edge(x+1, y, DIR_E); + break; + end; -if (dir = DIR_S) and is_x_edge(x, y+1) then - begin - x_edge_list[x, y+1] := false; - add_vertex(x+1, y+2); - add_edge(x, y+1, DIR_S); - break; - end; + if (dir = DIR_S) and is_x_edge(x, y+1) then + begin + x_edge_list[x, y+1] := false; + add_vertex(x+1, y+2); + add_edge(x, y+1, DIR_S); + break; + end; -if (dir = DIR_W) and is_y_edge(x, y) then - begin - y_edge_list[x, y] := false; - add_vertex(x, y+1); - add_edge(x-1, y, DIR_W); - break; + if (dir = DIR_W) and is_y_edge(x, y) then + begin + y_edge_list[x, y] := false; + add_vertex(x, y+1); + add_edge(x-1, y, DIR_W); + break; + end; end; -end; end; procedure GenMaze; +var i: LongInt; begin case cTemplateFilter of 0: begin @@ -473,15 +484,32 @@ pa.count := num_vertices; -RandomizePoints(pa); -BezierizeEdge(pa, _0_25); -RandomizePoints(pa); -BezierizeEdge(pa, _0_25); +leftX:= 0; +rightX:= playWidth; +topY:= off_y; + +// fill point +pa.ar[pa.Count].x:= 1; +pa.ar[pa.Count].y:= 1 + off_y; + +for i:= 0 to pa.Count - 1 do + begin + system.writeln(pa.ar[i].x, ', ', pa.ar[i].y); + end; + +// divide while it divides +repeat + i:= pa.Count; + DivideEdges(1, pa) +until i = pa.Count; + +// make it smooth +BezierizeEdge(pa, _0_2); DrawEdge(pa, 0); if maze_inverted then - FillLand(1, 1+off_y, 0, 0) + FillLand(1, 1 + off_y, 0, 0) else begin x := 0; @@ -497,9 +525,7 @@ hasGirders:= false else hasGirders := true; -leftX:= 0; -rightX:= playWidth; -topY:= off_y; + hasBorder := false; end; diff -r c9e38f8d4f94 -r cb17b79844b5 hedgewars/uLandGenTemplateBased.pas --- a/hedgewars/uLandGenTemplateBased.pas Wed Aug 13 22:31:28 2014 +0400 +++ b/hedgewars/uLandGenTemplateBased.pas Wed Aug 13 23:14:08 2014 +0400 @@ -1,12 +1,13 @@ unit uLandGenTemplateBased; interface -uses uLandTemplates; +uses uLandTemplates, uLandOutline; procedure GenTemplated(var Template: TEdgeTemplate); +procedure DivideEdges(fillPointsCount: LongWord; var pa: TPixAr); implementation -uses uVariables, uConsts, uFloat, uLandOutline, uLandUtils, uRandom, SDLh, math; +uses uVariables, uConsts, uFloat, uLandUtils, uRandom, SDLh, math; procedure SetPoints(var Template: TEdgeTemplate; var pa: TPixAr; fps: PPointArray);