diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index fcd73a7bb8147add3027353f37401c4ea3791c8d..019fdc48445c2c861b49055aff9302419817fc90 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
interface
interface
-uses
- SysUtils, Classes,
- MAPDEF,
- g_base, g_basic, g_player, g_res_downloader,
- g_sound, g_gui, utils, md5, mempool, xprofiler,
- g_touch, g_weapons;
+ uses
+ {$IFDEF ENABLE_MENU}
+ g_gui,
+ {$ENDIF}
+ SysUtils, Classes, MAPDEF,
+ g_base, g_basic, g_player, g_res_downloader,
+ g_sound, utils, md5, mempool, xprofiler,
+ g_weapons
+ ;
type
TGameSettings = record
type
TGameSettings = record
procedure g_Game_NextLevel();
procedure g_Game_Pause(Enable: Boolean);
procedure g_Game_HolmesPause(Enable: Boolean);
procedure g_Game_NextLevel();
procedure g_Game_Pause(Enable: Boolean);
procedure g_Game_HolmesPause(Enable: Boolean);
-procedure g_Game_InGameMenu(Show: Boolean);
function g_Game_IsWatchedPlayer(UID: Word): Boolean;
function g_Game_IsWatchedTeam(Team: Byte): Boolean;
procedure g_Game_Message(Msg: String; Time: Word);
function g_Game_IsWatchedPlayer(UID: Word): Boolean;
function g_Game_IsWatchedTeam(Team: Byte): Boolean;
procedure g_Game_Message(Msg: String; Time: Word);
function GetActivePlayerID_Next(Skip: Integer = -1): Integer;
procedure SortGameStat(var stat: TPlayerStatArray);
function GetActivePlayerID_Next(Skip: Integer = -1): Integer;
procedure SortGameStat(var stat: TPlayerStatArray);
-procedure KeyPress (K: Word);
-procedure CharPress (C: AnsiChar);
+
+{$IFDEF ENABLE_MENU}
+ procedure g_Game_InGameMenu(Show: Boolean);
+{$ENDIF}
+{$IFNDEF HEADLESS}
+ procedure CharPress (C: AnsiChar);
+{$ENDIF}
+ procedure KeyPress (K: Word);
{ procedure SetWinPause(Enable: Boolean); }
{ procedure SetWinPause(Enable: Boolean); }
GM_COOP = 4;
GM_SINGLE = 5;
GM_COOP = 4;
GM_SINGLE = 5;
- MESSAGE_DIKEY = WM_USER + 1;
-
EXIT_QUIT = 1;
EXIT_SIMPLE = 2;
EXIT_RESTART = 3;
EXIT_QUIT = 1;
EXIT_SIMPLE = 2;
EXIT_RESTART = 3;
{$IFDEF ENABLE_HOLMES}
g_holmes,
{$ENDIF}
{$IFDEF ENABLE_HOLMES}
g_holmes,
{$ENDIF}
+ {$IFDEF ENABLE_MENU}
+ g_menu,
+ {$ENDIF}
+ {$IFDEF ENABLE_GFX}
+ g_gfx,
+ {$ENDIF}
+ {$IFDEF ENABLE_GIBS}
+ g_gibs,
+ {$ENDIF}
{$IFNDEF HEADLESS}
{$IFNDEF HEADLESS}
- r_render,
+ r_render, g_system,
{$ENDIF}
{$ENDIF}
- e_res, g_window, g_menu,
+ e_res, g_window,
e_input, e_log, g_console, g_items, g_map, g_panel,
e_input, e_log, g_console, g_items, g_map, g_panel,
- g_playermodel, g_gfx, g_options, Math,
+ g_playermodel, g_options, Math,
g_triggers, g_monsters, e_sound, CONFIG,
g_language, g_net, g_phys,
ENet, e_msg, g_netmsg, g_netmaster,
g_triggers, g_monsters, e_sound, CONFIG,
g_language, g_net, g_phys,
ENet, e_msg, g_netmsg, g_netmaster,
- sfs, wadreader, g_system, r_playermodel;
+ sfs, wadreader;
var
charbuff: packed array [0..15] of AnsiChar = (
var
charbuff: packed array [0..15] of AnsiChar = (
end;
end;
+{$IFDEF ENABLE_MENU}
procedure KeyPress (K: Word);
procedure KeyPress (K: Word);
-{$IFNDEF HEADLESS}
-var
- Msg: g_gui.TMessage;
-{$ENDIF}
+ var Msg: g_gui.TMessage;
begin
begin
-{$IFNDEF HEADLESS}
case K of
VK_ESCAPE: // <Esc>:
begin
case K of
VK_ESCAPE: // <Esc>:
begin
end;
end;
end;
end;
end;
end;
-{$ENDIF}
end;
end;
-
-procedure CharPress (C: AnsiChar);
-var
- Msg: g_gui.TMessage;
- a: Integer;
-begin
- if gConsoleShow or gChatShow then
- begin
- g_Console_Char(C)
- end
- else if (g_ActiveWindow <> nil) then
+{$ELSE}
+ procedure KeyPress (K: Word);
begin
begin
- Msg.Msg := WM_CHAR;
- Msg.WParam := Ord(C);
- g_ActiveWindow.OnMessage(Msg);
- end
- else
+ gJustChatted := False;
+ if gConsoleShow or gChatShow then
+ begin
+ g_Console_Control(K);
+ end
+ end;
+{$ENDIF}
+
+{$IFNDEF HEADLESS}
+ procedure CharPress (C: AnsiChar);
+ {$IFDEF ENABLE_MENU}
+ var Msg: g_gui.TMessage;
+ {$ENDIF}
+ var a: Integer;
begin
begin
- for a := 0 to 14 do charbuff[a] := charbuff[a+1];
- charbuff[15] := upcase1251(C);
- Cheat();
+ if gConsoleShow or gChatShow then
+ begin
+ g_Console_Char(C);
+ end
+ {$IFDEF ENABLE_MENU}
+ else if g_ActiveWindow <> nil then
+ begin
+ Msg.Msg := WM_CHAR;
+ Msg.WParam := Ord(C);
+ g_ActiveWindow.OnMessage(Msg);
+ end
+ {$ENDIF}
+ else
+ begin
+ for a := 0 to 14 do
+ begin
+ charbuff[a] := charbuff[a + 1];
+ end;
+ charbuff[15] := upcase1251(C);
+ Cheat;
+ end;
end;
end;
-end;
+{$ENDIF}
// ////////////////////////////////////////////////////////////////////////// //
// ////////////////////////////////////////////////////////////////////////// //
MessageText := '';
EndingGameCounter := 0;
MessageText := '';
EndingGameCounter := 0;
+
+{$IFDEF ENABLE_MENU}
g_ActiveWindow := nil;
g_ActiveWindow := nil;
+{$ENDIF}
gLMSRespawn := LMS_RESPAWN_NONE;
gLMSRespawnTime := 0;
gLMSRespawn := LMS_RESPAWN_NONE;
gLMSRespawnTime := 0;
EXIT_SIMPLE: // Выход через меню или конец теста
begin
g_Game_Free();
EXIT_SIMPLE: // Выход через меню или конец теста
begin
g_Game_Free();
-
if gMapOnce then
if gMapOnce then
- begin // Это был тест
- g_Game_Quit();
- end
+ begin // Это был тест
+ g_Game_Quit();
+ end
else
else
- begin // Выход в главное меню
+ begin // Выход в главное меню
+ {$IFDEF DISABLE_MENU}
+ gState := STATE_MENU; // ???
+ {$ELSE}
gMusic.SetByName('MUSIC_MENU');
gMusic.Play();
if gState <> STATE_SLIST then
begin
g_GUI_ShowWindow('MainMenu');
gState := STATE_MENU;
gMusic.SetByName('MUSIC_MENU');
gMusic.Play();
if gState <> STATE_SLIST then
begin
g_GUI_ShowWindow('MainMenu');
gState := STATE_MENU;
- end else
+ end
+ else
begin
// Обновляем список серверов
slReturnPressed := True;
begin
// Обновляем список серверов
slReturnPressed := True;
slWaitStr := _lc[I_NET_SLIST_ERROR];
g_Serverlist_GenerateTable(slCurrent, slTable);
end;
slWaitStr := _lc[I_NET_SLIST_ERROR];
g_Serverlist_GenerateTable(slCurrent, slTable);
end;
-
- g_Game_ExecuteEvent('ongameend');
- end;
+ {$ENDIF}
+ g_Game_ExecuteEvent('ongameend');
+ end;
end;
EXIT_RESTART: // Начать уровень сначала
end;
EXIT_RESTART: // Начать уровень сначала
end
end;
end
end;
+{$IFDEF ENABLE_MENU}
// HACK: add dynlight here
if gwin_k8_enable_light_experiments then
begin
// HACK: add dynlight here
if gwin_k8_enable_light_experiments then
begin
end;
if gwin_has_stencil and g_playerLight then g_AddDynLight(plr.GameX+32, plr.GameY+40, 128, 1, 1, 0, 0.6);
end;
if gwin_has_stencil and g_playerLight then g_AddDynLight(plr.GameX+32, plr.GameY+40, 128, 1, 1, 0, 0.6);
+{$ENDIF}
end;
// HACK: don't have a "key was pressed" function
end;
// HACK: don't have a "key was pressed" function
end;
procedure g_Game_Update();
end;
procedure g_Game_Update();
-var
- Msg: g_gui.TMessage;
- Time: Int64;
- a: Byte;
- w: Word;
- i, b: Integer;
+ var
+ {$IFDEF ENABLE_MENU}
+ Msg: g_gui.TMessage;
+ w: Word;
+ {$ENDIF}
+ Time: Int64;
+ a: Byte;
+ i, b: Integer;
function sendMonsPos (mon: TMonster): Boolean;
begin
function sendMonsPos (mon: TMonster): Boolean;
begin
e_KeyPressed(JOY2_ATTACK) or e_KeyPressed(JOY3_ATTACK)
)
and (not gJustChatted) and (not gConsoleShow) and (not gChatShow)
e_KeyPressed(JOY2_ATTACK) or e_KeyPressed(JOY3_ATTACK)
)
and (not gJustChatted) and (not gConsoleShow) and (not gChatShow)
+{$IFDEF ENABLE_MENU}
and (g_ActiveWindow = nil)
and (g_ActiveWindow = nil)
+{$ENDIF}
)
or (g_Game_IsNet and ((gInterTime > gInterEndTime) or ((gInterReadyCount >= NetClientCount) and (NetClientCount > 0))))
)
)
or (g_Game_IsNet and ((gInterTime > gInterEndTime) or ((gInterReadyCount >= NetClientCount) and (NetClientCount > 0))))
)
begin
// Выход в главное меню:
g_Game_Free;
begin
// Выход в главное меню:
g_Game_Free;
+{$IFDEF ENABLE_MENU}
g_GUI_ShowWindow('MainMenu');
gMusic.SetByName('MUSIC_MENU');
gMusic.Play();
g_GUI_ShowWindow('MainMenu');
gMusic.SetByName('MUSIC_MENU');
gMusic.Play();
+{$ENDIF}
gState := STATE_MENU;
end else
begin
gState := STATE_MENU;
end else
begin
e_KeyPressed(JOY2_ATTACK) or e_KeyPressed(JOY3_ATTACK)
)
and (not gJustChatted) and (not gConsoleShow) and (not gChatShow)
e_KeyPressed(JOY2_ATTACK) or e_KeyPressed(JOY3_ATTACK)
)
and (not gJustChatted) and (not gConsoleShow) and (not gChatShow)
+{$IFDEF ENABLE_MENU}
and (g_ActiveWindow = nil)
and (g_ActiveWindow = nil)
+{$ENDIF}
)
then
begin
)
then
begin
// Обрабатываем клавиши игроков:
if gPlayer1 <> nil then gPlayer1.ReleaseKeys();
if gPlayer2 <> nil then gPlayer2.ReleaseKeys();
// Обрабатываем клавиши игроков:
if gPlayer1 <> nil then gPlayer1.ReleaseKeys();
if gPlayer2 <> nil then gPlayer2.ReleaseKeys();
+{$IFDEF DISABLE_MENU}
+ if (not gConsoleShow) and (not gChatShow) then
+{$ELSE}
if (not gConsoleShow) and (not gChatShow) and (g_ActiveWindow = nil) then
if (not gConsoleShow) and (not gChatShow) and (g_ActiveWindow = nil) then
+{$ENDIF}
begin
ProcessPlayerControls(gPlayer1, 0, P1MoveButton);
ProcessPlayerControls(gPlayer2, 1, P2MoveButton);
begin
ProcessPlayerControls(gPlayer1, 0, P1MoveButton);
ProcessPlayerControls(gPlayer2, 1, P2MoveButton);
end; // if server
// Наблюдатель
end; // if server
// Наблюдатель
- if (gPlayer1 = nil) and (gPlayer2 = nil) and
- (not gConsoleShow) and (not gChatShow) and (g_ActiveWindow = nil) then
+ if (gPlayer1 = nil) and (gPlayer2 = nil)
+ and (not gConsoleShow) and (not gChatShow)
+{$IFDEF ENABLE_MENU}
+ and (g_ActiveWindow = nil)
+{$ENDIF}
+ then
begin
if not gSpectKeyPress then
begin
begin
if not gSpectKeyPress then
begin
g_Triggers_Update();
g_Weapon_Update();
g_Monsters_Update();
g_Triggers_Update();
g_Weapon_Update();
g_Monsters_Update();
- g_GFX_Update();
+ {$IFDEF ENABLE_GFX}
+ g_GFX_Update;
+ {$ENDIF}
g_Player_UpdateAll();
g_Player_UpdateAll();
+ {$IFDEF ENABLE_GIBS}
+ g_Gibs_Update;
+ {$ENDIF}
g_Player_UpdatePhysicalObjects();
// server: send newly spawned monsters unconditionally
g_Player_UpdatePhysicalObjects();
// server: send newly spawned monsters unconditionally
end; // if gameOn ...
// Активно окно интерфейса - передаем клавиши ему:
end; // if gameOn ...
// Активно окно интерфейса - передаем клавиши ему:
+{$IFDEF ENABLE_MENU}
if g_ActiveWindow <> nil then
begin
w := e_GetFirstKeyPressed();
if g_ActiveWindow <> nil then
begin
w := e_GetFirstKeyPressed();
//e_WriteLog('Read language file', MSG_NOTIFY);
//g_Language_Load(DataDir + gLanguage + '.txt');
g_Language_Set(gLanguage);
//e_WriteLog('Read language file', MSG_NOTIFY);
//g_Language_Load(DataDir + gLanguage + '.txt');
g_Language_Set(gLanguage);
-{$IFNDEF HEADLESS}
g_Menu_Reset();
g_Menu_Reset();
-{$ENDIF}
gLanguageChange := False;
end;
end;
gLanguageChange := False;
end;
end;
begin
KeyPress(IK_F10);
end;
begin
KeyPress(IK_F10);
end;
+{$ENDIF}
Time := GetTickCount64() {div 1000};
Time := GetTickCount64() {div 1000};
g_Game_DeleteTestMap();
gExit := EXIT_QUIT;
g_Game_DeleteTestMap();
gExit := EXIT_QUIT;
- sys_RequestQuit;
+
+ {$IFNDEF HEADLESS}
+ sys_RequestQuit;
+ {$ENDIF}
end;
procedure g_Game_FreeData();
end;
procedure g_Game_FreeData();
g_Player_ResetAll(Force or gLastMap, gGameSettings.GameType = GT_SINGLE);
gState := STATE_NONE;
g_Player_ResetAll(Force or gLastMap, gGameSettings.GameType = GT_SINGLE);
gState := STATE_NONE;
- g_ActiveWindow := nil;
+ {$IFDEF ENABLE_MENU}
+ g_ActiveWindow := nil;
+ {$ENDIF}
gGameOn := True;
DisableCheats();
gGameOn := True;
DisableCheats();
begin
if Length(p) = 2 then
begin
begin
if Length(p) = 2 then
begin
- a := Max(0, StrToInt(p[1]));
- g_GFX_SetMax(a)
+ {$IFDEF ENABLE_GFX}
+ a := Max(0, StrToInt(p[1]));
+ g_GFX_SetMax(a)
+ {$ENDIF}
end
else if Length(p) = 1 then
begin
end
else if Length(p) = 1 then
begin
- e_LogWritefln('%s', [g_GFX_GetMax()])
+ {$IFDEF ENABLE_GFX}
+ e_LogWritefln('%s', [g_GFX_GetMax()])
+ {$ELSE}
+ e_LogWritefln('%s', [0])
+ {$ENDIF}
end
else
begin
end
else
begin
begin
if Length(p) = 2 then
begin
begin
if Length(p) = 2 then
begin
- a := Max(0, StrToInt(p[1]));
- g_Gibs_SetMax(a)
+ {$IFDEF ENABLE_GIBS}
+ a := Max(0, StrToInt(p[1]));
+ g_Gibs_SetMax(a)
+ {$ENDIF}
end
else if Length(p) = 1 then
begin
end
else if Length(p) = 1 then
begin
- e_LogWritefln('%s', [g_Gibs_GetMax()])
+ {$IFDEF ENABLE_GIBS}
+ e_LogWritefln('%s', [g_Gibs_GetMax()])
+ {$ELSE}
+ e_LogWritefln('%s', [0])
+ {$ENDIF}
end
else
begin
end
else
begin
chstr := '';
if cmd = 'pause' then
begin
chstr := '';
if cmd = 'pause' then
begin
- if (g_ActiveWindow = nil) then
+ {$IFDEF ENABLE_MENU}
+ if (g_ActiveWindow = nil) then
+ g_Game_Pause(not gPauseMain);
+ {$ELSE}
g_Game_Pause(not gPauseMain);
g_Game_Pause(not gPauseMain);
+ {$ENDIF}
end
else if cmd = 'endgame' then
gExit := EXIT_SIMPLE
end
else if cmd = 'endgame' then
gExit := EXIT_SIMPLE
end;
{$ENDIF}
end;
{$ENDIF}
+{$IFDEF ENABLE_MENU}
procedure g_Game_InGameMenu(Show: Boolean);
begin
if (g_ActiveWindow = nil) and Show then
procedure g_Game_InGameMenu(Show: Boolean);
begin
if (g_ActiveWindow = nil) and Show then
g_Game_Pause(False);
end;
end;
g_Game_Pause(False);
end;
end;
+{$ENDIF}
procedure g_Game_Pause (Enable: Boolean);
var
procedure g_Game_Pause (Enable: Boolean);
var
PBarWasHere := false;
end;
PBarWasHere := false;
end;
- g_ActiveWindow := nil;
+ {$IFDEF ENABLE_MENU}
+ g_ActiveWindow := nil;
+ {$ENDIF}
ProcessLoading(true);
end;
ProcessLoading(true);
end;
conRegVar('mon_sq_enabled', @gmon_debug_use_sqaccel, 'accelerated spatial queries for monsters', 'accelerated monster coldet');
conRegVar('wtrace_sq_enabled', @gwep_debug_fast_trace, 'accelerated spatial queries for weapon hitscan trace', 'accelerated weapon hitscan');
conRegVar('mon_sq_enabled', @gmon_debug_use_sqaccel, 'accelerated spatial queries for monsters', 'accelerated monster coldet');
conRegVar('wtrace_sq_enabled', @gwep_debug_fast_trace, 'accelerated spatial queries for weapon hitscan trace', 'accelerated weapon hitscan');
+{$IFDEF ENABLE_GFX}
conRegVar('pr_enabled', @gpart_dbg_enabled, 'enable/disable particles', 'particles');
conRegVar('pr_phys_enabled', @gpart_dbg_phys_enabled, 'enable/disable particle physics', 'particle physics');
conRegVar('pr_enabled', @gpart_dbg_enabled, 'enable/disable particles', 'particles');
conRegVar('pr_phys_enabled', @gpart_dbg_phys_enabled, 'enable/disable particle physics', 'particle physics');
+{$ENDIF}
conRegVar('los_enabled', @gmon_dbg_los_enabled, 'enable/disable monster LOS calculations', 'monster LOS', true);
conRegVar('mon_think', @gmon_debug_think, 'enable/disable monster thinking', 'monster thinking', true);
conRegVar('los_enabled', @gmon_dbg_los_enabled, 'enable/disable monster LOS calculations', 'monster LOS', true);
conRegVar('mon_think', @gmon_debug_think, 'enable/disable monster thinking', 'monster thinking', true);