index af6fa38e78d27de654cd04e39e75aa7c394eec5a..f838360e4156efb0634ff3d112cb150dcab9a5c7 100644 (file)
procedure r_Game_DrawLoadingStat;
procedure r_Game_DrawMenuBackground (tex: AnsiString);
+ procedure r_Game_SetupScreenSize;
+
var
gStdFont: DWORD;
+ gMenuFont: DWORD;
+ gMenuSmallFont: DWORD;
implementation
uses
{$INCLUDE ../nogl/noGLuses.inc}
-{$IFDEF ENABLE_HOLMES}
- g_holmes,
-{$ENDIF}
+ {$IFDEF ENABLE_HOLMES}
+ g_holmes,
+ {$ENDIF}
+ {$IFDEF ENABLE_MENU}
+ g_gui, g_menu,
+ {$ENDIF}
+ {$IFDEF ENABLE_GFX}
+ g_gfx, r_gfx,
+ {$ENDIF}
SysUtils, Classes, Math,
- g_base, r_graphics,
- g_system, g_touch,
- MAPDEF, xprofiler, utils, wadreader,
+ g_base, g_basic, r_graphics,
+ g_system,
+ MAPDEF, xprofiler, utils, wadreader, CONFIG,
e_input, e_sound,
- g_language, g_console, g_menu, g_triggers, g_player, g_options, g_monsters, g_map, g_panel,
- g_items, g_weapons, g_gfx, g_phys, g_net, g_gui, g_netmaster,
- g_game, r_console, r_gfx, r_items, r_map, r_monsters, r_weapons, r_netmaster, r_player, r_textures,
+ g_language, g_console, g_triggers, g_player, g_options, g_monsters, g_map, g_panel,
+ g_items, g_weapons, g_phys, g_net, g_netmaster,
+ g_game, r_console, r_items, r_map, r_monsters, r_weapons, r_netmaster, r_player, r_textures,
r_playermodel
;
FPSTime: LongWord;
hasPBarGfx: Boolean;
+ BackID: DWORD = DWORD(-1);
+ gBackSize: TDFPoint;
+
+procedure LoadStdFont(cfgres, texture: string; var FontID: DWORD);
+var
+ cwdt, chgt: Byte;
+ spc: ShortInt;
+ ID: DWORD;
+ wad: TWADFile;
+ cfgdata: Pointer;
+ cfglen: Integer;
+ config: TConfig;
+begin
+ cfglen := 0;
+
+ wad := TWADFile.Create;
+ if wad.ReadFile(GameWAD) then
+ wad.GetResource('FONTS/'+cfgres, cfgdata, cfglen);
+ wad.Free();
+
+ if cfglen <> 0 then
+ begin
+ g_Texture_CreateWADEx('FONT_STD', GameWAD+':FONTS\'+texture);
+
+ config := TConfig.CreateMem(cfgdata, cfglen);
+ cwdt := Min(Max(config.ReadInt('FontMap', 'CharWidth', 0), 0), 255);
+ chgt := Min(Max(config.ReadInt('FontMap', 'CharHeight', 0), 0), 255);
+ spc := Min(Max(config.ReadInt('FontMap', 'Kerning', 0), -128), 127);
+
+ if g_Texture_Get('FONT_STD', ID) then
+ e_TextureFontBuild(ID, FontID, cwdt, chgt, spc);
+
+ config.Free();
+ end;
+
+ if cfglen <> 0 then FreeMem(cfgdata);
+end;
+
+procedure LoadFont(txtres, fntres: string; var FontID: DWORD);
+var
+ cwdt, chgt: Byte;
+ spc: ShortInt;
+ CharID: DWORD;
+ wad: TWADFile;
+ cfgdata, fntdata: Pointer;
+ cfglen, fntlen: Integer;
+ config: TConfig;
+ chrwidth: Integer;
+ a: Byte;
+begin
+ cfglen := 0;
+ fntlen := 0;
+
+ wad := TWADFile.Create;
+ if wad.ReadFile(GameWAD) then
+ begin
+ wad.GetResource('FONTS/'+txtres, cfgdata, cfglen);
+ wad.GetResource('FONTS/'+fntres, fntdata, fntlen);
+ end;
+ wad.Free();
+
+ if cfglen <> 0 then
+ begin
+ config := TConfig.CreateMem(cfgdata, cfglen);
+ cwdt := Min(Max(config.ReadInt('FontMap', 'CharWidth', 0), 0), 255);
+ chgt := Min(Max(config.ReadInt('FontMap', 'CharHeight', 0), 0), 255);
+
+ spc := Min(Max(config.ReadInt('FontMap', 'Kerning', 0), -128), 127);
+ FontID := e_CharFont_Create(spc);
+
+ for a := 0 to 255 do
+ begin
+ chrwidth := config.ReadInt(IntToStr(a), 'Width', 0);
+ if chrwidth = 0 then Continue;
+
+ if e_CreateTextureMemEx(fntdata, fntlen, CharID, cwdt*(a mod 16), chgt*(a div 16),
+ cwdt, chgt) then
+ e_CharFont_AddChar(FontID, CharID, Chr(a), chrwidth);
+ end;
+
+ config.Free();
+ end;
+
+ if cfglen <> 0 then FreeMem(cfgdata);
+ if fntlen <> 0 then FreeMem(fntdata);
+end;
+
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;
drawOther('monsters', @r_Monsters_Draw);
drawOther('itemdrop', @r_Items_DrawDrop);
drawPanelType('*door', PANEL_CLOSEDOOR, g_rlayer_door);
- drawOther('gfx', @r_GFX_Draw);
+ {$IFDEF ENABLE_GFX}
+ drawOther('gfx', @r_GFX_Draw);
+ {$ENDIF}
drawOther('flags', @r_Map_DrawFlags);
drawPanelType('*acid1', PANEL_ACID1, g_rlayer_acid1);
drawPanelType('*acid2', PANEL_ACID2, g_rlayer_acid2);
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
end;
end;
+{$IFDEF ENABLE_MENU}
if gPauseMain and gGameOn and (g_ActiveWindow = nil) then
+{$ELSE}
+ if gPauseMain and gGameOn then
+{$ENDIF}
begin
//e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
if not gGameOn then
begin
- if (gState = STATE_MENU) then
- begin
- if (g_ActiveWindow = nil) or (g_ActiveWindow.BackTexture = '') then r_Game_DrawMenuBackground('MENU_BACKGROUND');
- // F3 at menu will show game loading dialog
- if e_KeyPressed(IK_F3) then g_Menu_Show_LoadMenu(true);
- if (g_ActiveWindow <> nil) then
- begin
- //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
- e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
- end
- else
+ {$IFDEF ENABLE_MENU}
+ if (gState = STATE_MENU) then
begin
- // F3 at titlepic will show game loading dialog
- if e_KeyPressed(IK_F3) then
+ if (g_ActiveWindow = nil) or (g_ActiveWindow.BackTexture = '') then r_Game_DrawMenuBackground('MENU_BACKGROUND');
+ // F3 at menu will show game loading dialog
+ if e_KeyPressed(IK_F3) then g_Menu_Show_LoadMenu(true);
+ if (g_ActiveWindow <> nil) then
+ begin
+ //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ end
+ else
begin
- g_Menu_Show_LoadMenu(true);
- if (g_ActiveWindow <> nil) then e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ // F3 at titlepic will show game loading dialog
+ if e_KeyPressed(IK_F3) then
+ begin
+ g_Menu_Show_LoadMenu(true);
+ if (g_ActiveWindow <> nil) then e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ end;
end;
end;
- end;
+ {$ELSE}
+ r_Game_DrawMenuBackground('MENU_BACKGROUND');
+ {$ENDIF}
if gState = STATE_FOLD then
begin
DrawCustomStat();
- if g_ActiveWindow <> nil then
- begin
- //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
- e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
- end;
+ {$IFDEF ENABLE_MENU}
+ if g_ActiveWindow <> nil then
+ begin
+ //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ end;
+ {$ENDIF}
end;
if gState = STATE_INTERSINGLE then
DrawSingleStat();
- if g_ActiveWindow <> nil then
- begin
- //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
- e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
- end;
+ {$IFDEF ENABLE_MENU}
+ if g_ActiveWindow <> nil then
+ begin
+ //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ end;
+ {$ENDIF}
end;
end;
if g_Texture_Get('TEXTURE_endpic', ID) then r_Game_DrawMenuBackground('TEXTURE_endpic')
else r_Game_DrawMenuBackground(_lc[I_TEXTURE_ENDPIC]);
- if g_ActiveWindow <> nil then
- begin
- //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
- e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
- end;
+ {$IFDEF ENABLE_MENU}
+ if g_ActiveWindow <> nil then
+ begin
+ //e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
+ e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
+ end;
+ {$ENDIF}
end;
if gState = STATE_SLIST then
end;
end;
+{$IFDEF ENABLE_MENU}
if g_ActiveWindow <> nil then
begin
if gGameOn then
end;
g_ActiveWindow.Draw();
end;
+{$ENDIF}
{$IFNDEF HEADLESS}
r_Console_Draw();
e_SetRendertarget(False);
e_SetViewPort(0, 0, gWinSizeX, gWinSizeY);
e_BlitFramebuffer(gWinSizeX, gWinSizeY);
-
- // draw the overlay stuff on top of it
-
- g_Touch_Draw;
end;
end.