108 finalRect.h:= h + cFontBorder * 2; |
108 finalRect.h:= h + cFontBorder * 2; |
109 WriteInRect:= finalRect |
109 WriteInRect:= finalRect |
110 end; |
110 end; |
111 |
111 |
112 procedure MakeCrossHairs; |
112 procedure MakeCrossHairs; |
113 var t: LongInt; |
113 var tmpsurf: PSDL_Surface; |
114 tmpsurf, texsurf: PSDL_Surface; |
114 begin |
115 Color, i: Longword; |
115 tmpsurf:= LoadDataImage(ptGraphics, cCHFileName, ifAlpha or ifCritical); |
116 begin |
116 |
117 tmpsurf:= LoadDataImage(ptGraphics, cCHFileName, ifAlpha or ifCritical); |
117 CrosshairTexture:= Surface2Tex(tmpsurf, false); |
118 |
118 |
119 for t:= 0 to Pred(TeamsCount) do |
119 SDL_FreeSurface(tmpsurf) |
120 with TeamsArray[t]^ do |
|
121 begin |
|
122 texsurf:= SDL_CreateRGBSurface(SDL_SWSURFACE, tmpsurf^.w, tmpsurf^.h, 32, RMask, GMask, BMask, AMask); |
|
123 TryDo(texsurf <> nil, errmsgCreateSurface, true); |
|
124 |
|
125 Color:= Clan^.Color; |
|
126 Color:= SDL_MapRGB(texsurf^.format, Color shr 16, Color shr 8, Color and $FF); |
|
127 SDL_FillRect(texsurf, nil, Color); |
|
128 |
|
129 SDL_UpperBlit(tmpsurf, nil, texsurf, nil); |
|
130 |
|
131 TryDo(tmpsurf^.format^.BytesPerPixel = 4, 'Ooops', true); |
|
132 |
|
133 if SDL_MustLock(texsurf) then |
|
134 SDLTry(SDL_LockSurface(texsurf) >= 0, true); |
|
135 |
|
136 // make black pixel be alpha-transparent |
|
137 for i:= 0 to texsurf^.w * texsurf^.h - 1 do |
|
138 if PLongwordArray(texsurf^.pixels)^[i] = AMask then |
|
139 PLongwordArray(texsurf^.pixels)^[i]:= (RMask or GMask or BMask) and Color; |
|
140 |
|
141 if SDL_MustLock(texsurf) then |
|
142 SDL_UnlockSurface(texsurf); |
|
143 |
|
144 FreeTexture(CrosshairTex); |
|
145 CrosshairTex:= Surface2Tex(texsurf, false); |
|
146 SDL_FreeSurface(texsurf) |
|
147 end; |
|
148 |
|
149 SDL_FreeSurface(tmpsurf) |
|
150 end; |
120 end; |
151 |
121 |
152 |
122 |
153 procedure WriteNames(Font: THWFont); |
123 procedure WriteNames(Font: THWFont); |
154 var t: LongInt; |
124 var t: LongInt; |
477 ai: TAmmoType; |
447 ai: TAmmoType; |
478 i, t: LongInt; |
448 i, t: LongInt; |
479 begin |
449 begin |
480 for ii:= Low(TSprite) to High(TSprite) do |
450 for ii:= Low(TSprite) to High(TSprite) do |
481 begin |
451 begin |
482 FreeTexture(SpritesData[ii].Texture); |
452 FreeAndNilTexture(SpritesData[ii].Texture); |
483 SpritesData[ii].Texture:= nil; |
453 |
484 if (SpritesData[ii].Surface <> nil) and (not reload) then |
454 if (SpritesData[ii].Surface <> nil) and (not reload) then |
485 begin |
455 begin |
486 SDL_FreeSurface(SpritesData[ii].Surface); |
456 SDL_FreeSurface(SpritesData[ii].Surface); |
487 SpritesData[ii].Surface:= nil |
457 SpritesData[ii].Surface:= nil |
488 end |
458 end |
489 end; |
459 end; |
490 SDL_FreeSurface(MissionIcons); |
460 SDL_FreeSurface(MissionIcons); |
491 |
461 |
492 // free the textures declared in uVariables |
462 // free the textures declared in uVariables |
493 FreeTexture(WeaponTooltipTex); |
463 FreeAndNilTexture(CrosshairTexture); |
494 WeaponTooltipTex:= nil; |
464 FreeAndNilTexture(WeaponTooltipTex); |
495 FreeTexture(PauseTexture); |
465 FreeAndNilTexture(PauseTexture); |
496 PauseTexture:= nil; |
466 FreeAndNilTexture(SyncTexture); |
497 FreeTexture(SyncTexture); |
467 FreeAndNilTexture(ConfirmTexture); |
498 SyncTexture:= nil; |
468 FreeAndNilTexture(ropeIconTex); |
499 FreeTexture(ConfirmTexture); |
469 FreeAndNilTexture(HHTexture); |
500 ConfirmTexture:= nil; |
|
501 FreeTexture(ropeIconTex); |
|
502 ropeIconTex:= nil; |
|
503 FreeTexture(HHTexture); |
|
504 HHTexture:= nil; |
|
505 |
470 |
506 // free all ammo name textures |
471 // free all ammo name textures |
507 for ai:= Low(TAmmoType) to High(TAmmoType) do |
472 for ai:= Low(TAmmoType) to High(TAmmoType) do |
508 begin |
473 FreeAndNilTexture(Ammoz[ai].NameTex); |
509 FreeTexture(Ammoz[ai].NameTex); |
|
510 Ammoz[ai].NameTex:= nil |
|
511 end; |
|
512 |
474 |
513 // free all count textures |
475 // free all count textures |
514 for i:= Low(CountTexz) to High(CountTexz) do |
476 for i:= Low(CountTexz) to High(CountTexz) do |
515 begin |
477 begin |
516 FreeTexture(CountTexz[i]); |
478 FreeAndNilTexture(CountTexz[i]); |
517 CountTexz[i]:= nil |
479 CountTexz[i]:= nil |
518 end; |
480 end; |
519 |
481 |
520 // free all team and hedgehog textures |
482 // free all team and hedgehog textures |
521 for t:= 0 to Pred(TeamsCount) do |
483 for t:= 0 to Pred(TeamsCount) do |
522 begin |
484 begin |
523 if TeamsArray[t] <> nil then |
485 if TeamsArray[t] <> nil then |
524 begin |
486 begin |
525 FreeTexture(TeamsArray[t]^.NameTagTex); |
487 FreeAndNilTexture(TeamsArray[t]^.NameTagTex); |
526 TeamsArray[t]^.NameTagTex:= nil; |
488 FreeAndNilTexture(TeamsArray[t]^.GraveTex); |
527 FreeTexture(TeamsArray[t]^.CrosshairTex); |
489 FreeAndNilTexture(TeamsArray[t]^.HealthTex); |
528 TeamsArray[t]^.CrosshairTex:= nil; |
490 FreeAndNilTexture(TeamsArray[t]^.AIKillsTex); |
529 FreeTexture(TeamsArray[t]^.GraveTex); |
491 FreeAndNilTexture(TeamsArray[t]^.FlagTex); |
530 TeamsArray[t]^.GraveTex:= nil; |
492 |
531 FreeTexture(TeamsArray[t]^.HealthTex); |
|
532 TeamsArray[t]^.HealthTex:= nil; |
|
533 FreeTexture(TeamsArray[t]^.AIKillsTex); |
|
534 TeamsArray[t]^.AIKillsTex:= nil; |
|
535 FreeTexture(TeamsArray[t]^.FlagTex); |
|
536 TeamsArray[t]^.FlagTex:= nil; |
|
537 for i:= 0 to cMaxHHIndex do |
493 for i:= 0 to cMaxHHIndex do |
538 begin |
494 begin |
539 FreeTexture(TeamsArray[t]^.Hedgehogs[i].NameTagTex); |
495 FreeAndNilTexture(TeamsArray[t]^.Hedgehogs[i].NameTagTex); |
540 TeamsArray[t]^.Hedgehogs[i].NameTagTex:= nil; |
496 FreeAndNilTexture(TeamsArray[t]^.Hedgehogs[i].HealthTagTex); |
541 FreeTexture(TeamsArray[t]^.Hedgehogs[i].HealthTagTex); |
497 FreeAndNilTexture(TeamsArray[t]^.Hedgehogs[i].HatTex); |
542 TeamsArray[t]^.Hedgehogs[i].HealthTagTex:= nil; |
|
543 FreeTexture(TeamsArray[t]^.Hedgehogs[i].HatTex); |
|
544 TeamsArray[t]^.Hedgehogs[i].HatTex:= nil; |
|
545 end; |
498 end; |
546 end; |
499 end; |
547 end; |
500 end; |
548 {$IFDEF USE_VIDEO_RECORDING} |
501 {$IFDEF USE_VIDEO_RECORDING} |
549 if defaultFrame <> 0 then |
502 if defaultFrame <> 0 then |