index af6fa38e78d27de654cd04e39e75aa7c394eec5a..6e587868d4114524cb45887784d91528fdc99a9c 100644 (file)
procedure r_Game_DrawLoadingStat;
procedure r_Game_DrawMenuBackground (tex: AnsiString);
+ procedure r_Game_SetupScreenSize;
+
var
gStdFont: DWORD;
g_holmes,
{$ENDIF}
SysUtils, Classes, Math,
- g_base, r_graphics,
+ g_base, g_basic, r_graphics,
g_system, g_touch,
MAPDEF, xprofiler, utils, wadreader,
e_input, e_sound,
FPSTime: LongWord;
hasPBarGfx: Boolean;
+ BackID: DWORD = DWORD(-1);
+ gBackSize: TDFPoint;
+
procedure r_Game_Load;
var
wl, hl: Integer;
g_Texture_Delete('TEXTURE_PLAYER_INVULPENTA');
end;
+procedure r_Game_SetupScreenSize;
+const
+ RES_FACTOR = 4.0 / 3.0;
+var
+ s: Single;
+ rf: Single;
+ bw, bh: Word;
+begin
+// Размер экранов игроков:
+ gPlayerScreenSize.X := gScreenWidth-196;
+ if (gPlayer1 <> nil) and (gPlayer2 <> nil) then
+ gPlayerScreenSize.Y := gScreenHeight div 2
+ else
+ gPlayerScreenSize.Y := gScreenHeight;
+
+// Размер заднего плана:
+ if BackID <> DWORD(-1) then
+ begin
+ s := SKY_STRETCH;
+ if (gScreenWidth*s > gMapInfo.Width) or
+ (gScreenHeight*s > gMapInfo.Height) then
+ begin
+ gBackSize.X := gScreenWidth;
+ gBackSize.Y := gScreenHeight;
+ end
+ else
+ begin
+ e_GetTextureSize(BackID, @bw, @bh);
+ rf := Single(bw) / Single(bh);
+ if (rf > RES_FACTOR) then bw := Round(Single(bh) * RES_FACTOR)
+ else if (rf < RES_FACTOR) then bh := Round(Single(bw) / RES_FACTOR);
+ s := Max(gScreenWidth / bw, gScreenHeight / bh);
+ if (s < 1.0) then s := 1.0;
+ gBackSize.X := Round(bw*s);
+ gBackSize.Y := Round(bh*s);
+ end;
+ end;
+end;
+
procedure r_Game_LoadTextures;
begin
g_Texture_CreateWADEx('TEXTURE_endpic', EndPicPath, gTextureFilter);
+ if gMapInfo.SkyFullName <> '' then
+ g_Texture_CreateWAD(BackID, gMapInfo.SkyFullName, gTextureFilter);
+ r_Game_SetupScreenSize;
end;
procedure r_Game_FreeTextures;
begin
- g_Texture_Delete('TEXTURE_endpic')
+ g_Texture_Delete('TEXTURE_endpic');
+ if BackID <> DWORD(-1) then
+ begin
+ gBackSize.X := 0;
+ gBackSize.Y := 0;
+ e_DeleteTexture(BackID);
+ BackID := DWORD(-1);
+ end
end;
+procedure r_Map_DrawBack(dx, dy: Integer);
+begin
+ if gDrawBackGround and (BackID <> DWORD(-1)) then
+ e_DrawSize(BackID, dx, dy, 0, False, False, gBackSize.X, gBackSize.Y)
+ else
+ e_Clear(GL_COLOR_BUFFER_BIT, 0, 0, 0);
+end;
+
function GetActivePlayer_ByID(ID: Integer): TPlayer;
var
a: Integer;
// HACK: take stats screenshot immediately after the first frame of the stats showing
if gScreenshotStats and (not StatShotDone) and (Length(CustomStat.PlayerStat) > 1) then
begin
+{$IFNDEF HEADLESS}
g_TakeScreenShot('stats/' + StatFilename);
+{$ENDIF}
StatShotDone := True;
end;
end;
back: string;
plView1, plView2: TPlayer;
Split: Boolean;
+ MsgLineLength: Integer;
+ MsgText: String;
begin
if gExit = EXIT_QUIT then Exit;
w := 0;
h := 0;
e_CharFont_GetSizeFmt(gMenuFont, MessageText, w, h);
+ MsgLineLength := (gScreenWidth - 204) div e_CharFont_GetMaxWidth(gMenuFont);
+ MsgText := b_Text_Wrap(b_Text_Format(MessageText), MsgLineLength);
if Split then
e_CharFont_PrintFmt(gMenuFont, (gScreenWidth div 2)-(w div 2),
- (gScreenHeight div 2)-(h div 2), MessageText)
+ (gScreenHeight div 2)-(h div 2), MsgText)
else
e_CharFont_PrintFmt(gMenuFont, (gScreenWidth div 2)-(w div 2),
- Round(gScreenHeight / 2.75)-(h div 2), MessageText);
+ Round(gScreenHeight / 2.75)-(h div 2), MsgText);
end;
if IsDrawStat or (gSpectMode = SPECT_STATS) then