- Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization
authorunc0rr
Sun, 27 Jan 2008 20:35:40 +0000
changeset 769 788efc1d649f
parent 768 2886dafa5bcf
child 770 0138f1b5a804
- Save 8 MB of memory by freeing LandSurface and not using it anymore after game initialization - Reanimate girder (and partly teleportation tool)
hedgewars/uConsts.pas
hedgewars/uLand.pas
hedgewars/uLandGraphics.pas
hedgewars/uStore.pas
share/hedgewars/Data/Graphics/amGirder.png
--- a/hedgewars/uConsts.pas	Sun Jan 27 19:29:00 2008 +0000
+++ b/hedgewars/uConsts.pas	Sun Jan 27 20:35:40 2008 +0000
@@ -239,101 +239,102 @@
                      FileName: String[31];
                      Path, AltPath: TPathType;
                      Texture: PTexture;
+                     Surface: PSDL_Surface;
                      Width, Height: LongInt;
-                     hasAlpha: boolean;
+                     saveSurf: boolean;
                      end = (
-                     (FileName:  'BlueWater'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width: 256; Height: 48; hasAlpha: false),// sprWater
-                     (FileName:     'Clouds'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil;
-                      Width: 256; Height:128; hasAlpha: false),// sprCloud
-                     (FileName:       'Bomb'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  16; Height: 16; hasAlpha: false),// sprBomb
-                     (FileName:  'BigDigits'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha:  true),// sprBigDigit
-                     (FileName:      'Frame'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:   4; Height: 32; hasAlpha:  true),// sprFrame
-                     (FileName:        'Lag'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  65; Height: 65; hasAlpha:  true),// sprLag
-                     (FileName:      'Arrow'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  16; Height: 16; hasAlpha: false),// sprCursor
-                     (FileName:    'Grenade'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprGrenade
-                     (FileName:    'Targetp'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprTargetP
-                     (FileName:        'UFO'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprUFO
-                     (FileName: 'SmokeTrace'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha:  true),// sprSmokeTrace
-                     (FileName:   'RopeHook'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprRopeHook
-                     (FileName:     'Expl50'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  64; Height: 64; hasAlpha: false),// sprExplosion50
-                     (FileName:    'MineOff'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  16; Height: 16; hasAlpha: false),// sprMineOff
-                     (FileName:     'MineOn'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  16; Height: 16; hasAlpha: false),// sprMineOn
-                     (FileName:       'Case'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprCase
-                     (FileName:   'FirstAid'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  48; Height: 48; hasAlpha: false),// sprFAid
-                     (FileName:   'dynamite'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprDynamite
-                     (FileName:      'Power'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha:  true),// sprPower
-                     (FileName:     'ClBomb'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  16; Height: 16; hasAlpha: false),// sprClusterBomb
-                     (FileName: 'ClParticle'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  16; Height: 16; hasAlpha: false),// sprClusterParticle
-                     (FileName:      'Flame'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  16; Height: 16; hasAlpha: false),// sprFlame
-                     (FileName:   'horizont'; Path: ptCurrTheme; AltPath: ptNone; Texture: nil;
-                      Width:   0; Height:  0; hasAlpha: false),// sprHorizont
-                     (FileName:        'Sky'; Path: ptCurrTheme; AltPath: ptNone; Texture: nil;
-                      Width:   0; Height:  0; hasAlpha: false),// sprSky
-                     (FileName:  'BrdrLines'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil;
-                      Width: 202; Height:  1; hasAlpha: false),// sprAMBorders
-                     (FileName:       'Slot'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil;
-                      Width: 202; Height: 33; hasAlpha: false),// sprAMSlot
-                     (FileName:   'AmmoName'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil;
-                      Width: 202; Height: 33; hasAlpha: false),// sprAMSlotName
-                     (FileName:      'Ammos'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprAMAmmos
-                     (FileName:   'SlotKeys'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprAMSlotKeys
-                     (FileName:  'Selection'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprAMSelection
-                     (FileName:     'Finger'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 48; hasAlpha: false),// sprFinger
-                     (FileName:    'AirBomb'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprAirBomb
-                     (FileName:   'Airplane'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width: 125; Height: 42; hasAlpha: false),// sprAirplane
-                     (FileName: 'amAirplane'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  64; Height: 32; hasAlpha:  true),// sprAirplane
-                     (FileName:   'amGirder'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width: 160; Height:160; hasAlpha: false),// sprAmGirder
-                     (FileName:     'hhMask'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprHHTelepMask
-                     (FileName:     'Switch'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha:  true),// sprSwitch
-                     (FileName:  'Parachute'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  48; Height: 48; hasAlpha:  true),// sprParachute
-                     (FileName:     'Target'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprTarget
-                     (FileName:   'RopeNode'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:   6; Height:  6; hasAlpha: false),// sprRopeNode
-                     (FileName:    'Console'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width: 256; Height:256; hasAlpha: false),// sprConsoleBG
-                     (FileName:   'thinking'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  32; Height: 32; hasAlpha: false),// sprQuestion
-                     (FileName:   'PowerBar'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width: 256; Height: 32; hasAlpha: false),// sprPowerBar
-                     (FileName:    'WindBar'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width: 151; Height: 17; hasAlpha: false),// sprWindBar
-                     (FileName:      'WindL'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  80; Height: 13; hasAlpha: false),// sprWindL
-                     (FileName:      'WindR'; Path: ptGraphics; AltPath: ptNone; Texture: nil;
-                      Width:  80; Height: 13; hasAlpha: false) // sprWindR
+                     (FileName:  'BlueWater'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width: 256; Height: 48; saveSurf: false),// sprWater
+                     (FileName: 'Clouds'; Path: ptCurrTheme;AltPath: ptGraphics; Texture: nil; Surface: nil;
+                      Width: 256; Height:128; saveSurf: false),// sprCloud
+                     (FileName:       'Bomb'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  16; Height: 16; saveSurf: false),// sprBomb
+                     (FileName:  'BigDigits'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprBigDigit
+                     (FileName:      'Frame'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:   4; Height: 32; saveSurf: false),// sprFrame
+                     (FileName:        'Lag'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  65; Height: 65; saveSurf: false),// sprLag
+                     (FileName:      'Arrow'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  16; Height: 16; saveSurf: false),// sprCursor
+                     (FileName:    'Grenade'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprGrenade
+                     (FileName:    'Targetp'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprTargetP
+                     (FileName:        'UFO'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprUFO
+                     (FileName: 'SmokeTrace'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprSmokeTrace
+                     (FileName:   'RopeHook'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprRopeHook
+                     (FileName:     'Expl50'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  64; Height: 64; saveSurf: false),// sprExplosion50
+                     (FileName:    'MineOff'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  16; Height: 16; saveSurf: false),// sprMineOff
+                     (FileName:     'MineOn'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  16; Height: 16; saveSurf: false),// sprMineOn
+                     (FileName:       'Case'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprCase
+                     (FileName:   'FirstAid'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  48; Height: 48; saveSurf: false),// sprFAid
+                     (FileName:   'dynamite'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprDynamite
+                     (FileName:      'Power'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprPower
+                     (FileName:     'ClBomb'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  16; Height: 16; saveSurf: false),// sprClusterBomb
+                     (FileName: 'ClParticle'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  16; Height: 16; saveSurf: false),// sprClusterParticle
+                     (FileName:      'Flame'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  16; Height: 16; saveSurf: false),// sprFlame
+                     (FileName:   'horizont'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:   0; Height:  0; saveSurf: false),// sprHorizont
+                     (FileName:        'Sky'; Path: ptCurrTheme;AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:   0; Height:  0; saveSurf: false),// sprSky
+                     (FileName:  'BrdrLines'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width: 202; Height:  1; saveSurf: false),// sprAMBorders
+                     (FileName:       'Slot'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width: 202; Height: 33; saveSurf: false),// sprAMSlot
+                     (FileName:   'AmmoName'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width: 202; Height: 33; saveSurf: false),// sprAMSlotName
+                     (FileName:      'Ammos'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprAMAmmos
+                     (FileName:   'SlotKeys'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprAMSlotKeys
+                     (FileName:  'Selection'; Path: ptAmmoMenu; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprAMSelection
+                     (FileName:     'Finger'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 48; saveSurf: false),// sprFinger
+                     (FileName:    'AirBomb'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprAirBomb
+                     (FileName:   'Airplane'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width: 125; Height: 42; saveSurf: false),// sprAirplane
+                     (FileName: 'amAirplane'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  64; Height: 32; saveSurf: false),// sprAirplane
+                     (FileName:   'amGirder'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width: 160; Height:160; saveSurf:  true),// sprAmGirder
+                     (FileName:     'hhMask'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf:  true),// sprHHTelepMask
+                     (FileName:     'Switch'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprSwitch
+                     (FileName:  'Parachute'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  48; Height: 48; saveSurf: false),// sprParachute
+                     (FileName:     'Target'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprTarget
+                     (FileName:   'RopeNode'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:   6; Height:  6; saveSurf: false),// sprRopeNode
+                     (FileName:    'Console'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width: 256; Height:256; saveSurf: false),// sprConsoleBG
+                     (FileName:   'thinking'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  32; Height: 32; saveSurf: false),// sprQuestion
+                     (FileName:   'PowerBar'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width: 256; Height: 32; saveSurf: false),// sprPowerBar
+                     (FileName:    'WindBar'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width: 151; Height: 17; saveSurf: false),// sprWindBar
+                     (FileName:      'WindL'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  80; Height: 13; saveSurf: false),// sprWindL
+                     (FileName:      'WindR'; Path: ptGraphics; AltPath: ptNone; Texture: nil; Surface: nil;
+                      Width:  80; Height: 13; saveSurf: false) // sprWindR
                      );
 
       Soundz: array[TSound] of record
--- a/hedgewars/uLand.pas	Sun Jan 27 19:29:00 2008 +0000
+++ b/hedgewars/uLand.pas	Sun Jan 27 20:35:40 2008 +0000
@@ -640,6 +640,7 @@
    glTexSubImage2D(GL_TEXTURE_2D, 0, 0, Y, 2048, Height, GL_RGBA, GL_UNSIGNED_BYTE, @LandPixels[Y, 0]);
    end else
    begin
+   TryDo(LandSurface <> nil, 'Assert (LandSurface <> nil) failed', true);
    LandTexture:= Surface2Tex(LandSurface);
 
    if SDL_MustLock(LandSurface) then
@@ -648,7 +649,10 @@
    Move(LandSurface^.pixels^, LandPixels, 2048 * 1024 * 4);
 
    if SDL_MustLock(LandSurface) then
-      SDL_UnlockSurface(LandSurface)
+      SDL_UnlockSurface(LandSurface);
+
+   SDL_FreeSurface(LandSurface);
+   LandSurface:= nil
    end;
 
 end;
--- a/hedgewars/uLandGraphics.pas	Sun Jan 27 19:29:00 2008 +0000
+++ b/hedgewars/uLandGraphics.pas	Sun Jan 27 20:35:40 2008 +0000
@@ -281,53 +281,24 @@
 end;
 
 function TryPlaceOnLand(cpX, cpY: LongInt; Obj: TSprite; Frame: LongInt; doPlace: boolean): boolean;
-(*var X, Y, bpp, h, w: LongInt;
+var X, Y, bpp, h, w: LongInt;
     p: PByteArray;
     r, rr: TSDL_Rect;
-    Image: PSDL_Surface;*)
+    Image: PSDL_Surface;
 begin
-(*Image:= SpritesData[Obj].Surface;
+TryDo(SpritesData[Obj].Surface <> nil, 'Assert SpritesData[Obj].Surface failed', true);
+Image:= SpritesData[Obj].Surface;
 w:= SpritesData[Obj].Width;
-h:= SpritesData[Obj].Height; 
+h:= SpritesData[Obj].Height;
 
 if SDL_MustLock(Image) then
    SDLTry(SDL_LockSurface(Image) >= 0, true);
 
 bpp:= Image^.format^.BytesPerPixel;
-TryDo(bpp <> 1, 'We don''t work with 8 bit surfaces', true);
-// Check that sprites fits free space
+TryDo(bpp = 4, 'It should be 32 bpp sprite', true);
+// Check that sprite fits free space
 p:= @(PByteArray(Image^.pixels)^[Image^.pitch * Frame * h]);
 case bpp of
-     2: for y:= 0 to Pred(h) do
-            begin
-            for x:= 0 to Pred(w) do
-                if PWord(@(p^[x * 2]))^ <> 0 then
-                   if (((cpY + y) and $FFFFFC00) <> 0) or
-                      (((cpX + x) and $FFFFF800) <> 0) or
-                      (Land[cpY + y, cpX + x] <> 0) then
-                      begin
-                      if SDL_MustLock(Image) then
-                         SDL_UnlockSurface(Image);
-                      exit(false)
-                      end;
-            p:= @(p^[Image^.pitch]);
-            end;
-     3: for y:= 0 to Pred(h) do
-            begin
-            for x:= 0 to Pred(w) do
-                if  (p^[x * 3 + 0] <> 0)
-                 or (p^[x * 3 + 1] <> 0)
-                 or (p^[x * 3 + 2] <> 0) then
-                   if (((cpY + y) and $FFFFFC00) <> 0) or
-                      (((cpX + x) and $FFFFF800) <> 0) or
-                      (Land[cpY + y, cpX + x] <> 0) then
-                      begin
-                      if SDL_MustLock(Image) then
-                         SDL_UnlockSurface(Image);
-                      exit(false)
-                      end;
-            p:= @(p^[Image^.pitch]);
-            end;
      4: for y:= 0 to Pred(h) do
             begin
             for x:= 0 to Pred(w) do
@@ -345,43 +316,34 @@
      end;
 
 TryPlaceOnLand:= true;
-if not doPlace then exit;
+if not doPlace then
+   begin
+   if SDL_MustLock(Image) then
+      SDL_UnlockSurface(Image);
+   exit
+   end;
 
 // Checked, now place
 p:= @(PByteArray(Image^.pixels)^[Image^.pitch * Frame * h]);
 case bpp of
-     2: for y:= 0 to Pred(h) do
-            begin
-            for x:= 0 to Pred(w) do
-                if PWord(@(p^[x * 2]))^ <> 0 then Land[cpY + y, cpX + x]:= COLOR_LAND;
-            p:= @(p^[Image^.pitch]);
-            end;
-     3: for y:= 0 to Pred(h) do
-            begin
-            for x:= 0 to Pred(w) do
-                if  (p^[x * 3 + 0] <> 0)
-                 or (p^[x * 3 + 1] <> 0)
-                 or (p^[x * 3 + 2] <> 0) then Land[cpY + y, cpX + x]:= COLOR_LAND;
-            p:= @(p^[Image^.pitch]);
-            end;
      4: for y:= 0 to Pred(h) do
             begin
             for x:= 0 to Pred(w) do
-                if PLongword(@(p^[x * 4]))^ <> 0 then Land[cpY + y, cpX + x]:= COLOR_LAND;
+                if PLongword(@(p^[x * 4]))^ <> 0 then
+                   begin
+                   Land[cpY + y, cpX + x]:= COLOR_LAND;
+                   LandPixels[cpY + y, cpX + x]:= PLongword(@(p^[x * 4]))^
+                   end;
             p:= @(p^[Image^.pitch]);
             end;
      end;
 if SDL_MustLock(Image) then
    SDL_UnlockSurface(Image);
 
-// Draw sprite on Land surface
-r.x:= 0;
-r.y:= SpritesData[Obj].Height * Frame;
-r.w:= SpritesData[Obj].Width;
-r.h:= SpritesData[Obj].Height;
-rr.x:= cpX;
-rr.y:= cpY;
-SDL_UpperBlit(Image, @r, LandSurface, @rr)*)
+y:= max(cpY, 0);
+h:= min(cpY + Image^.h, 1023) - y;
+addfilelog(inttostr(y) + ' <<<<<<<<>>>>>>>> '+inttostr(h));
+UpdateLandTexture(y, h)
 end;
 
 
--- a/hedgewars/uStore.pas	Sun Jan 27 19:29:00 2008 +0000
+++ b/hedgewars/uStore.pas	Sun Jan 27 20:35:40 2008 +0000
@@ -268,17 +268,6 @@
          end;
 AddProgress;
 
-WriteToConsole('LandSurface tuning... ');
-tmpsurf:= LandSurface;
-TryDo(tmpsurf <> nil, msgFailed, true);
-if cFullScreen then
-   begin
-   LandSurface:= SDL_DisplayFormat(tmpsurf);
-   SDL_FreeSurface(tmpsurf);
-   end else LandSurface:= tmpsurf;
-TryDo(SDL_SetColorKey(LandSurface, SDL_SRCCOLORKEY, 0) = 0, errmsgTransparentSet, true);
-WriteLnToConsole(msgOK);
-
 GetExplosionBorderColor;
 
 AddProgress;
@@ -291,16 +280,16 @@
     with SpritesData[ii] do
          begin
          if AltPath = ptNone then
-            tmpsurf:= LoadImage(Pathz[Path] + '/' + FileName, hasAlpha, true, true)
+            tmpsurf:= LoadImage(Pathz[Path] + '/' + FileName, true, true, true)
          else begin
-            tmpsurf:= LoadImage(Pathz[Path] + '/' + FileName, hasAlpha, false, true);
+            tmpsurf:= LoadImage(Pathz[Path] + '/' + FileName, true, false, true);
             if tmpsurf = nil then
-               tmpsurf:= LoadImage(Pathz[AltPath] + '/' + FileName, hasAlpha, true, true)
+               tmpsurf:= LoadImage(Pathz[AltPath] + '/' + FileName, true, true, true)
             end;
          if Width = 0 then Width:= tmpsurf^.w;
          if Height = 0 then Height:= tmpsurf^.h;
          Texture:= Surface2Tex(tmpsurf);
-         SDL_FreeSurface(tmpsurf)
+         if saveSurf then Surface:= tmpsurf else SDL_FreeSurface(tmpsurf)
          end;
 
 GetSkyColor;
@@ -487,7 +476,10 @@
 var ii: TSprite;
 begin
 for ii:= Low(TSprite) to High(TSprite) do
+    begin
     FreeTexture(SpritesData[ii].Texture);
+    if SpritesData[ii].Surface <> nil then SDL_FreeSurface(SpritesData[ii].Surface)
+    end;
 
 FreeTexture(HHTexture);
 FreeTexture(LandTexture);
Binary file share/hedgewars/Data/Graphics/amGirder.png has changed