hedgewars/uLand.pas
changeset 14418 0281b80d366c
parent 14416 96624a6cdb93
child 15010 5d8068ee16fc
equal deleted inserted replaced
14417:b2d0c72b5d89 14418:0281b80d366c
   298 end;
   298 end;
   299 
   299 
   300 function SelectTemplate: LongInt;
   300 function SelectTemplate: LongInt;
   301 var l: LongInt;
   301 var l: LongInt;
   302 begin
   302 begin
   303 	SelectTemplate:= 0;
   303     SelectTemplate:= 0;
   304     if (cReducedQuality and rqLowRes) <> 0 then
   304     if (cReducedQuality and rqLowRes) <> 0 then
   305         SelectTemplate:= SmallTemplates[getrandom(Succ(High(SmallTemplates)))]
   305         SelectTemplate:= SmallTemplates[getrandom(Succ(High(SmallTemplates)))]
   306     else
   306     else
   307 		begin
   307         begin
   308         if cTemplateFilter = 0 then
   308         if cTemplateFilter = 0 then
   309             begin
   309             begin
   310             l:= getRandom(GroupedTemplatesCount);
   310             l:= getRandom(GroupedTemplatesCount);
   311             repeat
   311             repeat
   312                 inc(cTemplateFilter);
   312                 inc(cTemplateFilter);
   313                 dec(l, TemplateCounts[cTemplateFilter]);
   313                 dec(l, TemplateCounts[cTemplateFilter]);
   314             until l < 0;
   314             until l < 0;
   315             end
   315             end
   316 			else getRandom(1);
   316             else getRandom(1);
   317 
   317 
   318 			case cTemplateFilter of
   318             case cTemplateFilter of
   319 			0: OutError('Error selecting TemplateFilter. Ask unC0Rr about what you did wrong', true);
   319             0: OutError('Error selecting TemplateFilter. Ask unC0Rr about what you did wrong', true);
   320 			1: SelectTemplate:= SmallTemplates[getrandom(TemplateCounts[cTemplateFilter])];
   320             1: SelectTemplate:= SmallTemplates[getrandom(TemplateCounts[cTemplateFilter])];
   321 			2: SelectTemplate:= MediumTemplates[getrandom(TemplateCounts[cTemplateFilter])];
   321             2: SelectTemplate:= MediumTemplates[getrandom(TemplateCounts[cTemplateFilter])];
   322 			3: SelectTemplate:= LargeTemplates[getrandom(TemplateCounts[cTemplateFilter])];
   322             3: SelectTemplate:= LargeTemplates[getrandom(TemplateCounts[cTemplateFilter])];
   323 			4: SelectTemplate:= CavernTemplates[getrandom(TemplateCounts[cTemplateFilter])];
   323             4: SelectTemplate:= CavernTemplates[getrandom(TemplateCounts[cTemplateFilter])];
   324 			5: SelectTemplate:= WackyTemplates[getrandom(TemplateCounts[cTemplateFilter])];
   324             5: SelectTemplate:= WackyTemplates[getrandom(TemplateCounts[cTemplateFilter])];
   325 	// For lua only!
   325     // For lua only!
   326 			6: begin
   326             6: begin
   327 			   SelectTemplate:= min(LuaTemplateNumber,High(EdgeTemplates));
   327                SelectTemplate:= min(LuaTemplateNumber,High(EdgeTemplates));
   328 			   GetRandom(2) // burn 1
   328                GetRandom(2) // burn 1
   329 			   end
   329                end
   330 			end
   330             end
   331 		end;
   331         end;
   332 
   332 
   333     WriteLnToConsole('Selected template #'+inttostr(SelectTemplate)+' using filter #'+inttostr(cTemplateFilter));
   333     WriteLnToConsole('Selected template #'+inttostr(SelectTemplate)+' using filter #'+inttostr(cTemplateFilter));
   334 end;
   334 end;
   335 
   335 
   336 procedure LandSurface2LandPixels(Surface: PSDL_Surface);
   336 procedure LandSurface2LandPixels(Surface: PSDL_Surface);
   884     WriteLnToConsole('Generating preview...');
   884     WriteLnToConsole('Generating preview...');
   885     case cMapGen of
   885     case cMapGen of
   886         mgRandom: GenTemplated(EdgeTemplates[SelectTemplate]);
   886         mgRandom: GenTemplated(EdgeTemplates[SelectTemplate]);
   887         mgMaze: begin ResizeLand(4096,2048); GenMaze; end;
   887         mgMaze: begin ResizeLand(4096,2048); GenMaze; end;
   888         mgPerlin: begin ResizeLand(4096,2048); GenPerlin; end;
   888         mgPerlin: begin ResizeLand(4096,2048); GenPerlin; end;
   889         mgDrawn: begin cFeatureSize:= 12;GenDrawnMap; end;
   889         mgDrawn: begin cFeatureSize:= 3;GenDrawnMap; end;
   890         mgForts: MakeFortsPreview();
   890         mgForts: MakeFortsPreview();
   891     else
   891     else
   892         OutError('Unknown mapgen', true);
   892         OutError('Unknown mapgen', true);
   893     end;
   893     end;
   894 
   894 
   895     ScriptSetMapGlobals;
   895     ScriptSetMapGlobals;
   896 
   896 
   897     // strict scaling needed here since preview assumes a rectangle
   897     // strict scaling needed here since preview assumes a rectangle
   898     rh:= max(LAND_HEIGHT,2048);
   898     if (cMapGen <> mgDrawn) then
   899     rw:= max(LAND_WIDTH,4096);
   899         begin
       
   900         rh:= max(LAND_HEIGHT, 2048);
       
   901         rw:= max(LAND_WIDTH, 4096);
       
   902         end
       
   903     else
       
   904         begin
       
   905         rh:= LAND_HEIGHT;
       
   906         rw:= LAND_WIDTH
       
   907         end;
   900     ox:= 0;
   908     ox:= 0;
   901     if rw < rh*2 then
   909     if rw < rh*2 then
   902         begin
   910         begin
   903         rw:= rh*2;
   911         rw:= rh*2;
   904         end;
   912         end;
   935     WriteLnToConsole('Generating preview...');
   943     WriteLnToConsole('Generating preview...');
   936     case cMapGen of
   944     case cMapGen of
   937         mgRandom: GenTemplated(EdgeTemplates[SelectTemplate]);
   945         mgRandom: GenTemplated(EdgeTemplates[SelectTemplate]);
   938         mgMaze: begin ResizeLand(4096,2048); GenMaze; end;
   946         mgMaze: begin ResizeLand(4096,2048); GenMaze; end;
   939         mgPerlin: begin ResizeLand(4096,2048); GenPerlin; end;
   947         mgPerlin: begin ResizeLand(4096,2048); GenPerlin; end;
   940         mgDrawn: begin cFeatureSize:= 12;GenDrawnMap; end;
   948         mgDrawn: begin cFeatureSize:= 3;GenDrawnMap; end;
   941         mgForts: MakeFortsPreview;
   949         mgForts: MakeFortsPreview;
   942     else
   950     else
   943         OutError('Unknown mapgen', true);
   951         OutError('Unknown mapgen', true);
   944     end;
   952     end;
   945 
   953 
   946     ScriptSetMapGlobals;
   954     ScriptSetMapGlobals;
   947 
   955 
       
   956 
   948     // strict scaling needed here since preview assumes a rectangle
   957     // strict scaling needed here since preview assumes a rectangle
   949     rh:= max(LAND_HEIGHT, 2048);
   958     if (cMapGen <> mgDrawn) then
   950     rw:= max(LAND_WIDTH, 4096);
   959         begin
       
   960         rh:= max(LAND_HEIGHT, 2048);
       
   961         rw:= max(LAND_WIDTH, 4096);
       
   962         end
       
   963     else
       
   964         begin
       
   965         rh:= LAND_HEIGHT;
       
   966         rw:= LAND_WIDTH
       
   967         end;
       
   968 
   951     ox:= 0;
   969     ox:= 0;
   952     if rw < rh*2 then
   970     if rw < rh*2 then
   953         begin
   971         begin
   954         rw:= rh*2;
   972         rw:= rh*2;
   955         end;
   973         end;
   984         checkFails(s = digest, 'Loaded map or other critical resource does not match across all players', true);
  1002         checkFails(s = digest, 'Loaded map or other critical resource does not match across all players', true);
   985 end;
  1003 end;
   986 
  1004 
   987 procedure chSendLandDigest(var s: shortstring);
  1005 procedure chSendLandDigest(var s: shortstring);
   988 var i: LongInt;
  1006 var i: LongInt;
   989 	landPixelDigest  : LongInt;	
  1007     landPixelDigest  : LongInt;
   990 begin
  1008 begin
   991 	landPixelDigest:= 1;
  1009     landPixelDigest:= 1;
   992     for i:= 0 to LAND_HEIGHT-1 do
  1010     for i:= 0 to LAND_HEIGHT-1 do
   993         landPixelDigest:= Adler32Update(landPixelDigest, @Land[i,0], LAND_WIDTH*2);
  1011         landPixelDigest:= Adler32Update(landPixelDigest, @Land[i,0], LAND_WIDTH*2);
   994     s:= 'M' + IntToStr(syncedPixelDigest)+'|'+IntToStr(landPixelDigest);
  1012     s:= 'M' + IntToStr(syncedPixelDigest)+'|'+IntToStr(landPixelDigest);
   995 
  1013 
   996     ScriptSetString('LandDigest',IntToStr(landPixelDigest));
  1014     ScriptSetString('LandDigest',IntToStr(landPixelDigest));