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)); |