26 procedure StoreRelease; |
26 procedure StoreRelease; |
27 procedure DrawGear(Stuff : TStuff; X, Y: integer; Surface: PSDL_Surface); |
27 procedure DrawGear(Stuff : TStuff; X, Y: integer; Surface: PSDL_Surface); |
28 procedure DrawSpriteFromRect(r: TSDL_Rect; X, Y, Height, Position: integer; Surface: PSDL_Surface); |
28 procedure DrawSpriteFromRect(r: TSDL_Rect; X, Y, Height, Position: integer; Surface: PSDL_Surface); |
29 procedure DrawSprite (Sprite: TSprite; X, Y, Frame: integer; Surface: PSDL_Surface); |
29 procedure DrawSprite (Sprite: TSprite; X, Y, Frame: integer; Surface: PSDL_Surface); |
30 procedure DrawSprite2(Sprite: TSprite; X, Y, FrameX, FrameY: integer; Surface: PSDL_Surface); |
30 procedure DrawSprite2(Sprite: TSprite; X, Y, FrameX, FrameY: integer; Surface: PSDL_Surface); |
|
31 procedure DrawSurfSprite(X, Y, Height, Frame: integer; Source, Surface: PSDL_Surface); |
31 procedure DrawLand (X, Y: integer; Surface: PSDL_Surface); |
32 procedure DrawLand (X, Y: integer; Surface: PSDL_Surface); |
32 procedure DXOutText(X, Y: Integer; Font: THWFont; s: string; Surface: PSDL_Surface); |
33 procedure DXOutText(X, Y: Integer; Font: THWFont; s: string; Surface: PSDL_Surface); |
33 procedure DrawCaption(X, Y: integer; Rect: TSDL_Rect; Surface: PSDL_Surface); |
34 procedure DrawCaption(X, Y: integer; Rect: TSDL_Rect; Surface: PSDL_Surface); |
34 procedure DrawCentered(X, Top: integer; Source, Surface: PSDL_Surface); |
35 procedure DrawCentered(X, Top: integer; Source, Surface: PSDL_Surface); |
35 procedure DrawFromStoreRect(X, Y: integer; Rect: PSDL_Rect; Surface: PSDL_Surface); |
36 procedure DrawFromStoreRect(X, Y: integer; Rect: PSDL_Rect; Surface: PSDL_Surface); |
36 procedure DrawHedgehog(X, Y: integer; Dir: integer; Pos, Step: LongWord; Surface: PSDL_Surface); |
37 procedure DrawHedgehog(X, Y: integer; Dir: integer; Pos, Step: LongWord; Surface: PSDL_Surface); |
37 function RenderString(s: string; Color: integer; font: THWFont): PSDL_Surface; |
38 function RenderString(s: string; Color: integer; font: THWFont): PSDL_Surface; |
38 procedure RenderHealth(var Hedgehog: THedgehog); |
39 procedure RenderHealth(var Hedgehog: THedgehog); |
39 procedure AddProgress; |
40 procedure AddProgress; |
40 function LoadImage(filename: string; hasAlpha: boolean; const critical: boolean = true): PSDL_Surface; |
41 function LoadImage(filename: string; hasAlpha: boolean; const critical: boolean = true; const setTransparent: boolean = true): PSDL_Surface; |
41 |
42 |
42 var PixelFormat: PSDL_PixelFormat; |
43 var PixelFormat: PSDL_PixelFormat; |
43 SDLPrimSurface: PSDL_Surface; |
44 SDLPrimSurface: PSDL_Surface; |
44 |
45 |
45 implementation |
46 implementation |
108 clr.g:= (Color shr 8) and $FF; |
109 clr.g:= (Color shr 8) and $FF; |
109 clr.b:= Color and $FF; |
110 clr.b:= Color and $FF; |
110 tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, PChar(s), clr); |
111 tmpsurf:= TTF_RenderUTF8_Blended(Fontz[Font].Handle, PChar(s), clr); |
111 Result.x:= X + 3; |
112 Result.x:= X + 3; |
112 Result.y:= Y + 1; |
113 Result.y:= Y + 1; |
|
114 TryDo(tmpsurf <> nil, errmsgRenderText, true); |
113 SDL_UpperBlit(tmpsurf, nil, Surface, @Result); |
115 SDL_UpperBlit(tmpsurf, nil, Surface, @Result); |
114 SDL_FreeSurface(tmpsurf); |
116 SDL_FreeSurface(tmpsurf); |
115 Result.x:= X; |
117 Result.x:= X; |
116 Result.y:= Y; |
118 Result.y:= Y; |
117 Result.w:= w + 6; |
119 Result.w:= w + 6; |
157 end; |
159 end; |
158 end; |
160 end; |
159 |
161 |
160 procedure MakeCrossHairs; |
162 procedure MakeCrossHairs; |
161 var Team: PTeam; |
163 var Team: PTeam; |
162 r: TSDL_Rect; |
|
163 tmpsurf: PSDL_Surface; |
164 tmpsurf: PSDL_Surface; |
164 s: string; |
165 s: string; |
165 TransColor: Longword; |
166 begin |
166 begin |
|
167 r.x:= 0; |
|
168 r.y:= 256; |
|
169 r.w:= 16; |
|
170 r.h:= 16; |
|
171 s:= Pathz[ptGraphics] + '/' + cCHFileName; |
167 s:= Pathz[ptGraphics] + '/' + cCHFileName; |
172 tmpsurf:= LoadImage(PChar(s), false); |
168 tmpsurf:= LoadImage(PChar(s), true, true, false); |
173 TransColor:= SDL_MapRGB(tmpsurf.format, $FF, $FF, $FF); |
|
174 TryDo(SDL_SetColorKey(tmpsurf, SDL_SRCCOLORKEY, TransColor) = 0, errmsgTransparentSet, true); |
|
175 |
169 |
176 Team:= TeamsList; |
170 Team:= TeamsList; |
177 while Team<>nil do |
171 while Team<>nil do |
178 begin |
172 begin |
179 SDL_FillRect(StoreSurface, @r, Team.AdjColor); |
173 Team.CrosshairSurf:= SDL_CreateRGBSurface(SDL_HWSURFACE, 24, 360, cBits, PixelFormat.RMask, PixelFormat.GMask, PixelFormat.BMask, PixelFormat.AMask); |
180 SDL_UpperBlit(tmpsurf, nil, StoreSurface, @r); |
174 TryDo(Team.CrosshairSurf <> nil, errmsgCreateSurface, true); |
181 Team.CrossHairRect:= r; |
175 SDL_FillRect(Team.CrosshairSurf, nil, Team.AdjColor); |
182 inc(r.x, 16); |
176 SDL_UpperBlit(tmpsurf, nil, Team.CrosshairSurf, nil); |
|
177 TryDo(SDL_SetColorKey(Team.CrosshairSurf, SDL_SRCCOLORKEY or SDL_RLEACCEL, 0) = 0, errmsgTransparentSet, true); |
183 Team:= Team.Next |
178 Team:= Team.Next |
184 end; |
179 end; |
185 |
180 |
186 SDL_FreeSurface(tmpsurf) |
181 SDL_FreeSurface(tmpsurf) |
187 end; |
182 end; |
343 r.h:= Height; |
338 r.h:= Height; |
344 DrawFromRect(X, Y, @r, StoreSurface, Surface) |
339 DrawFromRect(X, Y, @r, StoreSurface, Surface) |
345 end; |
340 end; |
346 |
341 |
347 procedure DrawSprite (Sprite: TSprite; X, Y, Frame: integer; Surface: PSDL_Surface); |
342 procedure DrawSprite (Sprite: TSprite; X, Y, Frame: integer; Surface: PSDL_Surface); |
348 var r: TSDL_Rect; |
343 begin |
349 begin |
344 DrawSurfSprite(X, Y, SpritesData[Sprite].Height, Frame, SpritesData[Sprite].Surface, Surface) |
350 r.x:= 0; |
|
351 r.w:= SpritesData[Sprite].Width; |
|
352 r.y:= Frame * SpritesData[Sprite].Height; |
|
353 r.h:= SpritesData[Sprite].Height; |
|
354 DrawFromRect(X, Y, @r, SpritesData[Sprite].Surface, Surface) |
|
355 end; |
345 end; |
356 |
346 |
357 procedure DrawSprite2(Sprite: TSprite; X, Y, FrameX, FrameY: integer; Surface: PSDL_Surface); |
347 procedure DrawSprite2(Sprite: TSprite; X, Y, FrameX, FrameY: integer; Surface: PSDL_Surface); |
358 var r: TSDL_Rect; |
348 var r: TSDL_Rect; |
359 begin |
349 begin |
360 r.x:= FrameX * SpritesData[Sprite].Width; |
350 r.x:= FrameX * SpritesData[Sprite].Width; |
361 r.w:= SpritesData[Sprite].Width; |
351 r.w:= SpritesData[Sprite].Width; |
362 r.y:= FrameY * SpritesData[Sprite].Height; |
352 r.y:= FrameY * SpritesData[Sprite].Height; |
363 r.h:= SpritesData[Sprite].Height; |
353 r.h:= SpritesData[Sprite].Height; |
364 DrawFromRect(X, Y, @r, SpritesData[Sprite].Surface, Surface) |
354 DrawFromRect(X, Y, @r, SpritesData[Sprite].Surface, Surface) |
|
355 end; |
|
356 |
|
357 procedure DrawSurfSprite(X, Y, Height, Frame: integer; Source, Surface: PSDL_Surface); |
|
358 var r: TSDL_Rect; |
|
359 begin |
|
360 r.x:= 0; |
|
361 r.w:= Source.w; |
|
362 r.y:= Frame * Height; |
|
363 r.h:= Height; |
|
364 DrawFromRect(X, Y, @r, Source, Surface) |
365 end; |
365 end; |
366 |
366 |
367 procedure DXOutText(X, Y: Integer; Font: THWFont; s: string; Surface: PSDL_Surface); |
367 procedure DXOutText(X, Y: Integer; Font: THWFont; s: string; Surface: PSDL_Surface); |
368 var clr: TSDL_Color; |
368 var clr: TSDL_Color; |
369 tmpsurf: PSDL_Surface; |
369 tmpsurf: PSDL_Surface; |
373 r.y:= Y; |
373 r.y:= Y; |
374 clr.r:= $FF; |
374 clr.r:= $FF; |
375 clr.g:= $FF; |
375 clr.g:= $FF; |
376 clr.b:= $FF; |
376 clr.b:= $FF; |
377 tmpsurf:= TTF_RenderUTF8_Solid(Fontz[Font].Handle, PChar(s), clr); |
377 tmpsurf:= TTF_RenderUTF8_Solid(Fontz[Font].Handle, PChar(s), clr); |
|
378 TryDo(tmpsurf <> nil, errmsgRenderText, true); |
378 SDL_UpperBlit(tmpsurf, nil, Surface, @r); |
379 SDL_UpperBlit(tmpsurf, nil, Surface, @r); |
379 SDL_FreeSurface(tmpsurf) |
380 SDL_FreeSurface(tmpsurf) |
380 end; |
381 end; |
381 |
382 |
382 procedure DrawLand(X, Y: integer; Surface: PSDL_Surface); |
383 procedure DrawLand(X, Y: integer; Surface: PSDL_Surface); |
468 WriteLnToConsole('Freeing progress surface... '); |
469 WriteLnToConsole('Freeing progress surface... '); |
469 SDL_FreeSurface(ProgrSurf) |
470 SDL_FreeSurface(ProgrSurf) |
470 end; |
471 end; |
471 end; |
472 end; |
472 |
473 |
473 function LoadImage(filename: string; hasAlpha: boolean; const critical: boolean = true): PSDL_Surface; |
474 function LoadImage(filename: string; hasAlpha: boolean; const critical: boolean = true; const setTransparent: boolean = true): PSDL_Surface; |
474 var tmpsurf: PSDL_Surface; |
475 var tmpsurf: PSDL_Surface; |
475 begin |
476 begin |
476 WriteToConsole(msgLoading + filename + '... '); |
477 WriteToConsole(msgLoading + filename + '... '); |
477 tmpsurf:= IMG_Load(PChar(filename + '.' + cBitsStr + '.png')); |
478 tmpsurf:= IMG_Load(PChar(filename + '.' + cBitsStr + '.png')); |
478 if tmpsurf = nil then |
479 if tmpsurf = nil then |
484 WriteLnToConsole(msgFailed); |
485 WriteLnToConsole(msgFailed); |
485 Result:= nil; |
486 Result:= nil; |
486 exit |
487 exit |
487 end; |
488 end; |
488 |
489 |
489 TryDo(SDL_SetColorKey(tmpsurf, SDL_SRCCOLORKEY or SDL_RLEACCEL, 0) = 0, errmsgTransparentSet, true); |
490 if setTransparent then TryDo(SDL_SetColorKey(tmpsurf, SDL_SRCCOLORKEY or SDL_RLEACCEL, 0) = 0, errmsgTransparentSet, true); |
490 if hasAlpha then Result:= SDL_DisplayFormatAlpha(tmpsurf) |
491 if hasAlpha then Result:= SDL_DisplayFormatAlpha(tmpsurf) |
491 else Result:= SDL_DisplayFormat(tmpsurf); |
492 else Result:= SDL_DisplayFormat(tmpsurf); |
492 WriteLnToConsole(msgOK) |
493 WriteLnToConsole(msgOK) |
493 end; |
494 end; |
494 |
495 |