index 9b5d96718405dfd8f0fa9dda2598088bf3101f22..213b27e471f090def65d8f4a9a272191f84a5fea 100644 (file)
interface
interface
+ procedure r_Game_Load;
+ procedure r_Game_Free;
+
+ procedure r_Game_LoadTextures;
+ procedure r_Game_FreeTextures;
+
procedure r_Game_Draw;
procedure r_Game_DrawLoadingStat;
procedure r_Game_DrawMenuBackground (tex: AnsiString);
procedure r_Game_Draw;
procedure r_Game_DrawLoadingStat;
procedure r_Game_DrawMenuBackground (tex: AnsiString);
+ procedure r_Game_SetupScreenSize;
+
+ var
+ gStdFont: DWORD;
+
implementation
uses
implementation
uses
g_base, r_graphics,
g_system, g_touch,
MAPDEF, xprofiler, utils, wadreader,
g_base, r_graphics,
g_system, g_touch,
MAPDEF, xprofiler, utils, wadreader,
- g_textures, e_input, e_sound,
- g_language, g_console, g_menu, g_triggers, g_player, g_options, g_monsters, g_map, g_panel, g_window,
+ 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_items, g_weapons, g_gfx, g_phys, g_net, g_gui, g_netmaster,
- g_game, r_console, r_gfx, r_items, r_map, r_panel, r_monsters, r_weapons, r_netmaster, r_player
+ g_game, r_console, r_gfx, r_items, r_map, r_monsters, r_weapons, r_netmaster, r_player, r_textures,
+ r_playermodel
;
var
;
var
FPS: Word;
FPSCounter: Word;
FPSTime: LongWord;
FPS: Word;
FPSCounter: Word;
FPSTime: LongWord;
+ hasPBarGfx: Boolean;
+
+ BackID: DWORD = DWORD(-1);
+ gBackSize: TDFPoint;
+
+ procedure r_Game_Load;
+ var
+ wl, hl: Integer;
+ wr, hr: Integer;
+ wb, hb: Integer;
+ wm, hm: Integer;
+ begin
+ // early load
+ g_Texture_CreateWADEx('MENU_BACKGROUND', GameWAD + ':TEXTURES\TITLE', gTextureFilter);
+ g_Texture_CreateWADEx('INTER', GameWAD + ':TEXTURES\INTER', gTextureFilter);
+ g_Texture_CreateWADEx('ENDGAME_EN', GameWAD + ':TEXTURES\ENDGAME_EN', gTextureFilter);
+ g_Texture_CreateWADEx('ENDGAME_RU', GameWAD + ':TEXTURES\ENDGAME_RU', gTextureFilter);
+ LoadStdFont('STDTXT', 'STDFONT', gStdFont);
+ LoadFont('MENUTXT', 'MENUFONT', gMenuFont);
+ LoadFont('SMALLTXT', 'SMALLFONT', gMenuSmallFont);
+ // game data
+ g_Texture_CreateWADEx('NOTEXTURE', GameWAD + ':TEXTURES\NOTEXTURE');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_HUD', GameWAD + ':TEXTURES\HUD');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_HUDAIR', GameWAD + ':TEXTURES\AIRBAR');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_HUDJET', GameWAD + ':TEXTURES\JETBAR');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_HUDBG', GameWAD + ':TEXTURES\HUDBG');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_ARMORHUD', GameWAD + ':TEXTURES\ARMORHUD');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_REDFLAG', GameWAD + ':TEXTURES\FLAGHUD_R_BASE');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_REDFLAG_S', GameWAD + ':TEXTURES\FLAGHUD_R_STOLEN');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_REDFLAG_D', GameWAD + ':TEXTURES\FLAGHUD_R_DROP');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_BLUEFLAG', GameWAD + ':TEXTURES\FLAGHUD_B_BASE');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_BLUEFLAG_S', GameWAD + ':TEXTURES\FLAGHUD_B_STOLEN');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_BLUEFLAG_D', GameWAD + ':TEXTURES\FLAGHUD_B_DROP');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_TALKBUBBLE', GameWAD + ':TEXTURES\TALKBUBBLE');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_INVULPENTA', GameWAD + ':TEXTURES\PENTA');
+ g_Texture_CreateWADEx('TEXTURE_PLAYER_INDICATOR', GameWAD + ':TEXTURES\PLRIND');
+ // bar
+ hasPBarGfx := true;
+ if not g_Texture_CreateWADEx('UI_GFX_PBAR_LEFT', GameWAD+':TEXTURES\LLEFT') then hasPBarGfx := false;
+ if not g_Texture_CreateWADEx('UI_GFX_PBAR_MARKER', GameWAD+':TEXTURES\LMARKER') then hasPBarGfx := false;
+ if not g_Texture_CreateWADEx('UI_GFX_PBAR_MIDDLE', GameWAD+':TEXTURES\LMIDDLE') then hasPBarGfx := false;
+ if not g_Texture_CreateWADEx('UI_GFX_PBAR_RIGHT', GameWAD+':TEXTURES\LRIGHT') then hasPBarGfx := false;
+ if hasPBarGfx then
+ begin
+ g_Texture_GetSize('UI_GFX_PBAR_LEFT', wl, hl);
+ g_Texture_GetSize('UI_GFX_PBAR_RIGHT', wr, hr);
+ g_Texture_GetSize('UI_GFX_PBAR_MIDDLE', wb, hb);
+ g_Texture_GetSize('UI_GFX_PBAR_MARKER', wm, hm);
+ if (wl > 0) and (hl > 0) and (wr > 0) and (hr = hl) and (wb > 0) and (hb = hl) and (wm > 0) and (hm > 0) and (hm <= hl) then
+ begin
+ // yay!
+ end
+ else
+ hasPBarGfx := false;
+ end;
+ end;
+
+ procedure r_Game_Free;
+ begin
+ g_Texture_Delete('NOTEXTURE');
+ g_Texture_Delete('TEXTURE_PLAYER_HUD');
+ g_Texture_Delete('TEXTURE_PLAYER_HUDBG');
+ g_Texture_Delete('TEXTURE_PLAYER_ARMORHUD');
+ g_Texture_Delete('TEXTURE_PLAYER_REDFLAG');
+ g_Texture_Delete('TEXTURE_PLAYER_REDFLAG_S');
+ g_Texture_Delete('TEXTURE_PLAYER_REDFLAG_D');
+ g_Texture_Delete('TEXTURE_PLAYER_BLUEFLAG');
+ g_Texture_Delete('TEXTURE_PLAYER_BLUEFLAG_S');
+ g_Texture_Delete('TEXTURE_PLAYER_BLUEFLAG_D');
+ g_Texture_Delete('TEXTURE_PLAYER_TALKBUBBLE');
+ 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');
+ 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
function GetActivePlayer_ByID(ID: Integer): TPlayer;
var
drawOther('weapons', @r_Weapon_Draw);
drawOther('shells', @r_Player_DrawShells);
drawOther('drawall', @r_Player_DrawAll);
drawOther('weapons', @r_Weapon_Draw);
drawOther('shells', @r_Player_DrawShells);
drawOther('drawall', @r_Player_DrawAll);
+ drawOther('gibs', @r_PlayerModel_DrawGibs);
drawOther('corpses', @r_Player_DrawCorpses);
drawPanelType('*wall', PANEL_WALL, g_rlayer_wall);
drawOther('monsters', @r_Monsters_Draw);
drawOther('corpses', @r_Player_DrawCorpses);
drawPanelType('*wall', PANEL_WALL, g_rlayer_wall);
drawOther('monsters', @r_Monsters_Draw);
begin
if gExit = EXIT_QUIT then Exit;
begin
if gExit = EXIT_QUIT then Exit;
- Time := sys_GetTicks() {div 1000};
+ Time := GetTickCount64() {div 1000};
FPSCounter := FPSCounter+1;
if Time - FPSTime >= 1000 then
begin
FPSCounter := FPSCounter+1;
if Time - FPSTime >= 1000 then
begin