hedgewars/uLand.pas
changeset 1784 dfe9bafb4590
parent 1779 9d88af62a3bb
child 1792 c30c6944bd49
--- a/hedgewars/uLand.pas	Sat Jan 31 15:44:07 2009 +0000
+++ b/hedgewars/uLand.pas	Sun Feb 01 15:58:44 2009 +0000
@@ -41,7 +41,7 @@
 procedure RealLandTexUpdate;
 
 implementation
-uses uConsole, uStore, uMisc, uRandom, uTeams, uLandObjects, uSHA, uIO;
+uses uConsole, uStore, uMisc, uRandom, uTeams, uLandObjects, uSHA, uIO, uAmmos;
 
 type TPixAr = record
               Count: Longword;
@@ -584,9 +584,9 @@
 procedure MakeFortsMap;
 var tmpsurf: PSDL_Surface;
 begin
-// For now, defining a fort's playable area as 4096x1536 - there are no tall forts.  The extra height is to avoid triggering border with current code, also if user turns on a border, it'll give a bit more maneuvering room.
-playHeight:= 1536;
-playWidth:= 4096;
+// For now, defining a fort's playable area as 3072x1200 - there are no tall forts.  The extra height is to avoid triggering border with current code, also if user turns on a border, it'll give a bit more maneuvering room.
+playHeight:= 1200;
+playWidth:= 3072;
 leftX:= (LAND_WIDTH - playWidth) div 2;
 rightX:= ((playWidth + (LAND_WIDTH - playWidth) div 2) - 1);
 topY:= LAND_HEIGHT - playHeight;
@@ -594,11 +594,11 @@
 WriteLnToConsole('Generating forts land...');
 
 tmpsurf:= LoadImage(Pathz[ptForts] + '/' + ClansArray[0]^.Teams[0]^.FortName + 'L', true, true, true);
-BlitImageAndGenerateCollisionInfo(0, LAND_HEIGHT - tmpsurf^.h, tmpsurf^.w, tmpsurf);
+BlitImageAndGenerateCollisionInfo(leftX+150, LAND_HEIGHT - tmpsurf^.h, tmpsurf^.w, tmpsurf);
 SDL_FreeSurface(tmpsurf);
 
 tmpsurf:= LoadImage(Pathz[ptForts] + '/' + ClansArray[1]^.Teams[0]^.FortName + 'R', true, true, true);
-BlitImageAndGenerateCollisionInfo(LAND_WIDTH - tmpsurf^.w, LAND_HEIGHT - tmpsurf^.h, tmpsurf^.w, tmpsurf);
+BlitImageAndGenerateCollisionInfo(rightX - 150 - tmpsurf^.w, LAND_HEIGHT - tmpsurf^.h, tmpsurf^.w, tmpsurf);
 SDL_FreeSurface(tmpsurf);
 end;
 
@@ -628,8 +628,7 @@
 end;
 
 procedure GenMap;
-var i, j, t: LongInt;
-	x, y, w, c: Longword;
+var x, y, w, c: Longword;
 begin
 hasBorder:= false;
 hasGirders:= true;
@@ -644,59 +643,54 @@
 {$IFDEF DEBUGFILE}LogLandDigest;{$ENDIF}
 
 // check for land near top
-for y:= topY to topY + 5 do
-    for x:= leftX to rightX do
-		if Land[y, x] <> 0 then
-			begin
-			hasBorder:= true;
-			break;
-			end;
+c:= 0;
+if (GameFlags and gfBorder) <> 0 then
+    hasBorder:= true
+else
+    for y:= topY to topY + 5 do
+        for x:= leftX to rightX do
+            if Land[y, x] <> 0 then
+                begin
+                inc(c);
+                if c > 200 then // avoid accidental triggering
+                    begin
+                    hasBorder:= true;
+                    break;
+                    end;
+                end;
 
 if hasBorder then
 	begin
-    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]:= COLOR_INDESTRUCTIBLE;
+	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]:= COLOR_INDESTRUCTIBLE;
 	// experiment hardcoding cave
-    // also try basing cave dimensions on map/template dimensions, if they exist
-    for w:= 0 to 5 do // width of 3 allowed worms to be knocked through with grenade
-        begin
-        for y:= topY to LAND_HEIGHT - 1 do
-            begin
-            Land[y, leftX + w]:= COLOR_INDESTRUCTIBLE;
-            Land[y, rightX - w]:= COLOR_INDESTRUCTIBLE;
-            if y mod 32 < 16 then c:= $FF000000
-            else c:= $FF00FFFF;
-            LandPixels[y, leftX + w]:= c;
-            LandPixels[y, rightX - w]:= c;
-            end;
+	// also try basing cave dimensions on map/template dimensions, if they exist
+	for w:= 0 to 5 do // width of 3 allowed worms to be knocked through with grenade
+		begin
+		for y:= topY to LAND_HEIGHT - 1 do
+			begin
+			Land[y, leftX + w]:= COLOR_INDESTRUCTIBLE;
+			Land[y, rightX - w]:= COLOR_INDESTRUCTIBLE;
+			if (y + w) mod 32 < 16 then
+				c:= $FF000000
+			else
+				c:= $FF00FFFF;
+			LandPixels[y, leftX + w]:= c;
+			LandPixels[y, rightX - w]:= c;
+			end;
 
-        for x:= leftX to rightX do
-            begin
-            Land[topY + w, x]:= COLOR_INDESTRUCTIBLE;
-            if x mod 32 < 16 then c:= $FF000000
-            else c:= $FF00FFFF;
-            LandPixels[topY + w, x]:= c;
-            end;
-        end;
-     // This is almost certainly not the right place to do this
-     // I just want it to be disabled after a border is added, which could by by map constraints as well as player desire
-     t:= 0;
-     while (t < cMaxTeams) and (TeamsArray[t] <> nil) do
-         begin
-         for i:= 0 to cMaxHHIndex do
-             if TeamsArray[t]^.Hedgehogs[i].Gear <> nil then
-                 begin
-                 for j:= 0 to cMaxSlotAmmoIndex do
-                     begin
-                     TeamsArray[t]^.Hedgehogs[i].Ammo^[Ammoz[amAirAttack].Slot, j].Count:= 0;
-                     TeamsArray[t]^.Hedgehogs[i].Ammo^[Ammoz[amMineStrike].Slot, j].Count:= 0;
-                     TeamsArray[t]^.Hedgehogs[i].Ammo^[Ammoz[amNapalm].Slot, j].Count:= 0;
-                     end;
-                 end;
-         inc(t);
-         end;
+		for x:= leftX to rightX do
+			begin
+			Land[topY + w, x]:= COLOR_INDESTRUCTIBLE;
+			if (x + w) mod 32 < 16 then
+				c:= $FF000000
+			else
+				c:= $FF00FFFF;
+			LandPixels[topY + w, x]:= c;
+			end;
+		end;
 	end;
 
 if ((GameFlags and gfForts) = 0) and (Pathz[ptMapCurrent] = '') then AddObjects;