diff -r 29b477319854 -r 3c3dc6a148ca hedgewars/uStore.pas --- a/hedgewars/uStore.pas Sun Jul 16 08:13:51 2006 +0000 +++ b/hedgewars/uStore.pas Thu Jul 20 20:11:32 2006 +0000 @@ -51,7 +51,7 @@ procedure RenderHealth(var Hedgehog: THedgehog); function RenderString(var s: shortstring; Color, Pos: integer): TSDL_Rect; procedure AddProgress; -function LoadImage(filename: string; hasAlpha: boolean): PSDL_Surface; +function LoadImage(filename: string; hasAlpha: boolean; const critical: boolean = true): PSDL_Surface; var PixelFormat: PSDL_PixelFormat; SDLPrimSurface: PSDL_Surface; @@ -248,24 +248,24 @@ procedure GetSkyColor; var p: Longword; begin - if SDL_MustLock(StoreSurface) then - SDLTry(SDL_LockSurface(StoreSurface) >= 0, true); - p:= Longword(StoreSurface.pixels) + Word(StuffPoz[sSky].x) * StoreSurface.format.BytesPerPixel; - case StoreSurface.format.BytesPerPixel of + if SDL_MustLock(SpritesData[sprSky].Surface) then + SDLTry(SDL_LockSurface(SpritesData[sprSky].Surface) >= 0, true); + p:= Longword(SpritesData[sprSky].Surface.pixels); + case SpritesData[sprSky].Surface.format.BytesPerPixel of 1: cSkyColor:= PByte(p)^; 2: cSkyColor:= PWord(p)^; 3: cSkyColor:= (PByte(p)^) or (PByte(p + 1)^ shl 8) or (PByte(p + 2)^ shl 16); 4: cSkyColor:= PLongword(p)^; end; - if SDL_MustLock(StoreSurface) then - SDL_UnlockSurface(StoreSurface) + if SDL_MustLock(SpritesData[sprSky].Surface) then + SDL_UnlockSurface(SpritesData[sprSky].Surface) end; procedure GetExplosionBorderColor; var f: textfile; c: integer; begin - s:= Pathz[ptThemeCurrent] + '/' + cThemeCFGFilename; + s:= Pathz[ptCurrTheme] + '/' + cThemeCFGFilename; WriteToConsole(msgLoading + s + ' '); AssignFile(f, s); {$I-} @@ -319,12 +319,22 @@ MakeCrossHairs; LoadGraves; -GetSkyColor; - AddProgress; for ii:= Low(TSprite) to High(TSprite) do with SpritesData[ii] do - Surface:= LoadImage(Pathz[Path] + '/' + FileName, hasAlpha); + begin + if AltPath = ptNone then + Surface:= LoadImage(Pathz[Path] + '/' + FileName, hasAlpha) + else begin + Surface:= LoadImage(Pathz[Path] + '/' + FileName, hasAlpha, false); + if Surface = nil then + Surface:= LoadImage(Pathz[AltPath] + '/' + FileName, hasAlpha) + end; + if Width = 0 then Width:= Surface.w; + if Height = 0 then Height:= Surface.h + end; + +GetSkyColor; AddProgress; tmpsurf:= LoadImage(Pathz[ptGraphics] + '/' + cHHFileName, false); @@ -484,21 +494,25 @@ end; end; -function LoadImage(filename: string; hasAlpha: boolean): PSDL_Surface; +function LoadImage(filename: string; hasAlpha: boolean; const critical: boolean = true): PSDL_Surface; var tmpsurf: PSDL_Surface; begin WriteToConsole(msgLoading + filename + '... '); tmpsurf:= IMG_Load(PChar(filename + '.' + cBitsStr + '.png')); if tmpsurf = nil then tmpsurf:= IMG_Load(PChar(filename + '.png')); -TryDo(tmpsurf <> nil, msgFailed, true); + +if tmpsurf = nil then + if critical then OutError(msgFailed, true) + else begin + WriteLnToConsole(msgFailed); + Result:= nil; + exit + end; + TryDo(SDL_SetColorKey(tmpsurf, SDL_SRCCOLORKEY or SDL_RLEACCEL, 0) = 0, errmsgTransparentSet, true); -if cFullScreen then - begin - if hasAlpha then Result:= SDL_DisplayFormatAlpha(tmpsurf) - else Result:= SDL_DisplayFormat(tmpsurf); - SDL_FreeSurface(tmpsurf); - end else Result:= tmpsurf; +if hasAlpha then Result:= SDL_DisplayFormatAlpha(tmpsurf) + else Result:= SDL_DisplayFormat(tmpsurf); WriteLnToConsole(msgOK) end;