diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index daec002afce309a4120acfbfcb4c574e38689d30..fd0daf24a2f4282f5ded133f0e036e6fbd726bac 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
function g_Game_GetNextMap(): String;
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;
gServInterTime: Byte = 0;
gGameStartTime: LongWord = 0;
gTotalMonsters: Integer = 0;
- gPause: Boolean;
+ gPauseMain: Boolean = false;
+ gPauseHolmes: Boolean = false;
gShowTime: Boolean = True;
gShowFPS: Boolean = False;
gShowGoals: Boolean = True;
procedure g_AddDynLight (x, y, radius: Integer; r, g, b, a: Single);
procedure g_DynLightExplosion (x, y, radius: Integer; r, g, b: Single);
-function conIsCheatsEnabled (): Boolean;
+function conIsCheatsEnabled (): Boolean; inline;
+function gPause (): Boolean; inline;
implementation
// ////////////////////////////////////////////////////////////////////////// //
-function conIsCheatsEnabled (): Boolean;
+function gPause (): Boolean; inline; begin result := gPauseMain or gPauseHolmes; end;
+
+
+// ////////////////////////////////////////////////////////////////////////// //
+function conIsCheatsEnabled (): Boolean; inline;
begin
result := false;
- if (not gGameOn) or (not gCheats) or ((gGameSettings.GameType <> GT_SINGLE) and
- (gGameSettings.GameMode <> GM_COOP) and (not gDebugMode)) or g_Game_IsNet then exit;
+ if g_Game_IsNet then exit;
+ if not gDebugMode then
+ begin
+ //if not gCheats then exit;
+ if not (gGameSettings.GameType in [GT_SINGLE, GT_CUSTOM]) then exit;
+ if not (gGameSettings.GameMode in [GM_COOP, GM_SINGLE]) then exit;
+ end;
result := true;
end;
MH_SEND_GameEvent(NET_EV_MAPEND, Byte(gMissionFailed));
// Ñòîï èãðà:
- gPause := False;
- gGameOn := False;
+ gPauseMain := false;
+ gPauseHolmes := false;
+ gGameOn := false;
g_Game_StopAllSounds(False);
if FindFirst(ModelsDir+'*.wad', faAnyFile, SR) = 0 then
repeat
if not g_PlayerModel_Load(ModelsDir+SR.Name) then
- e_WriteLog(Format('Error loading model %s', [SR.Name]), MSG_WARNING);
+ e_WriteLog(Format('Error loading model %s', [SR.Name]), TMsgType.Warning);
until FindNext(SR) <> 0;
FindClose(SR);
if FindFirst(ModelsDir+'*.pk3', faAnyFile, SR) = 0 then
repeat
if not g_PlayerModel_Load(ModelsDir+SR.Name) then
- e_WriteLog(Format('Error loading model %s', [SR.Name]), MSG_WARNING);
+ e_WriteLog(Format('Error loading model %s', [SR.Name]), TMsgType.Warning);
until FindNext(SR) <> 0;
FindClose(SR);
if FindFirst(ModelsDir+'*.zip', faAnyFile, SR) = 0 then
repeat
if not g_PlayerModel_Load(ModelsDir+SR.Name) then
- e_WriteLog(Format('Error loading model %s', [SR.Name]), MSG_WARNING);
+ e_WriteLog(Format('Error loading model %s', [SR.Name]), TMsgType.Warning);
until FindNext(SR) <> 0;
FindClose(SR);
- gGameOn := False;
- gPause := False;
+ gGameOn := false;
+ gPauseMain := false;
+ gPauseHolmes := false;
gTime := 0;
LastScreenShot := 0;
// new strafe mechanics
if (strafeDir = 0) then strafeDir := MoveButton; // start strafing
// now set direction according to strafe (reversed)
- if (strafeDir = 2) then plr.SetDirection(D_LEFT)
- else if (strafeDir = 1) then plr.SetDirection(D_RIGHT);
+ if (strafeDir = 2) then plr.SetDirection(TDirection.D_LEFT)
+ else if (strafeDir = 1) then plr.SetDirection(TDirection.D_RIGHT);
end
else
begin
strafeDir := 0; // not strafing anymore
// Ðàíüøå áûëà íàæàòà "Âïðàâî", à ñåé÷àñ "Âëåâî" => áåæèì âïðàâî, ñìîòðèì âëåâî:
- if (MoveButton = 2) and isKeyPressed(KeyLeft, KeyLeft2) then plr.SetDirection(D_LEFT)
+ if (MoveButton = 2) and isKeyPressed(KeyLeft, KeyLeft2) then plr.SetDirection(TDirection.D_LEFT)
// Ðàíüøå áûëà íàæàòà "Âëåâî", à ñåé÷àñ "Âïðàâî" => áåæèì âëåâî, ñìîòðèì âïðàâî:
- else if (MoveButton = 1) and isKeyPressed(KeyRight, KeyRight2) then plr.SetDirection(D_RIGHT)
+ else if (MoveButton = 1) and isKeyPressed(KeyRight, KeyRight2) then plr.SetDirection(TDirection.D_RIGHT)
// ×òî-òî áûëî íàæàòî è íå èçìåíèëîñü => êóäà áåæèì, òóäà è ñìîòðèì:
else if MoveButton <> 0 then plr.SetDirection(TDirection(MoveButton-1));
end;
// Íóæíî ñìåíèòü ðàçðåøåíèå:
if gResolutionChange then
begin
- e_WriteLog('Changing resolution', MSG_NOTIFY);
+ e_WriteLog('Changing resolution', TMsgType.Notify);
g_Game_ChangeResolution(gRC_Width, gRC_Height, gRC_FullScreen, gRC_Maximized);
gResolutionChange := False;
end;
begin
if DataLoaded then Exit;
- e_WriteLog('Loading game data...', MSG_NOTIFY);
+ e_WriteLog('Loading game data...', TMsgType.Notify);
g_Texture_CreateWADEx('NOTEXTURE', GameWAD+':TEXTURES\NOTEXTURE');
g_Texture_CreateWADEx('TEXTURE_PLAYER_HUD', GameWAD+':TEXTURES\HUD');
g_Weapon_FreeData();
g_Monsters_FreeData();
- e_WriteLog('Releasing game data...', MSG_NOTIFY);
+ e_WriteLog('Releasing game data...', TMsgType.Notify);
g_Texture_Delete('NOTEXTURE');
g_Texture_Delete('TEXTURE_PLAYER_HUD');
//TODO: lights should be in separate grid, i think
// but on the other side: grid may be slower for dynlights, as their lifetime is short
- if (not g_playerLight) or (not gwin_has_stencil) or (g_dynLightCount < 1) then exit;
+ if (not gwin_k8_enable_light_experiments) or (not gwin_has_stencil) or (g_dynLightCount < 1) then exit;
// rendering mode
//ambColor := gCurrentMap['light_ambient'].rgba;
end;
end;
- if gPause and gGameOn and (g_ActiveWindow = nil) then
+ if gPauseMain and gGameOn and (g_ActiveWindow = nil) then
begin
//e_DrawFillQuad(0, 0, gScreenWidth-1, gScreenHeight-1, 48, 48, 48, 180);
e_DarkenQuadWH(0, 0, gScreenWidth, gScreenHeight, 150);
procedure g_FatalError(Text: String);
begin
g_Console_Add(Format(_lc[I_FATAL_ERROR], [Text]), True);
- e_WriteLog(Format(_lc[I_FATAL_ERROR], [Text]), MSG_WARNING);
+ e_WriteLog(Format(_lc[I_FATAL_ERROR], [Text]), TMsgType.Warning);
gExit := EXIT_SIMPLE;
end;
procedure g_SimpleError(Text: String);
begin
g_Console_Add(Format(_lc[I_SIMPLE_ERROR], [Text]), True);
- e_WriteLog(Format(_lc[I_SIMPLE_ERROR], [Text]), MSG_WARNING);
+ e_WriteLog(Format(_lc[I_SIMPLE_ERROR], [Text]), TMsgType.Warning);
end;
procedure g_Game_SetupScreenSize();
begin
g_Game_Free();
- e_WriteLog('Starting singleplayer game...', MSG_NOTIFY);
+ e_WriteLog('Starting singleplayer game...', TMsgType.Notify);
g_Game_ClearLoading();
begin
g_Game_Free();
- e_WriteLog('Starting custom game...', MSG_NOTIFY);
+ e_WriteLog('Starting custom game...', TMsgType.Notify);
g_Game_ClearLoading();
begin
g_Game_Free();
- e_WriteLog('Starting net game (server)...', MSG_NOTIFY);
+ e_WriteLog('Starting net game (server)...', TMsgType.Notify);
g_Game_ClearLoading();
g_Game_Free();
State := 0;
- e_WriteLog('Starting net game (client)...', MSG_NOTIFY);
- e_WriteLog('NET: Trying to connect to ' + Addr + ':' + IntToStr(Port) + '...', MSG_NOTIFY);
+ e_WriteLog('Starting net game (client)...', TMsgType.Notify);
+ e_WriteLog('NET: Trying to connect to ' + Addr + ':' + IntToStr(Port) + '...', TMsgType.Notify);
g_Game_ClearLoading();
g_Player_Init();
NetState := NET_STATE_GAME;
MC_SEND_FullStateRequest;
- e_WriteLog('NET: Connection successful.', MSG_NOTIFY);
+ e_WriteLog('NET: Connection successful.', TMsgType.Notify);
end;
procedure g_Game_SaveOptions();
end;
gExit := 0;
- gPause := False;
+ gPauseMain := false;
+ gPauseHolmes := false;
gTime := 0;
NetTimeToUpdate := 1;
NetTimeToReliable := 0;
mon: TMonster;
begin
// Êîìàíäû îòëàäî÷íîãî ðåæèìà:
- if gDebugMode then
+ if {gDebugMode}conIsCheatsEnabled then
begin
cmd := LowerCase(P[0]);
if cmd = 'd_window' then
f, a: Integer;
plr: TPlayer;
begin
- if (not gGameOn) or (not gCheats) or ((gGameSettings.GameType <> GT_SINGLE) and
- (gGameSettings.GameMode <> GM_COOP) and (not gDebugMode)) or g_Game_IsNet then
+ if (not gGameOn) or (not conIsCheatsEnabled) then
begin
g_Console_Add('not available');
exit;
else if cmd = 'pause' then
begin
if (g_ActiveWindow = nil) then
- g_Game_Pause(not gPause);
+ g_Game_Pause(not gPauseMain);
end
else if cmd = 'endgame' then
gExit := EXIT_SIMPLE
end;
end;
-procedure g_Game_Pause(Enable: Boolean);
+procedure g_Game_Pause (Enable: Boolean);
+var
+ oldPause: Boolean;
begin
- if not gGameOn then
- Exit;
+ if not gGameOn then exit;
- if gPause = Enable then
- Exit;
+ if not (gGameSettings.GameType in [GT_SINGLE, GT_CUSTOM]) then exit;
- if not (gGameSettings.GameType in [GT_SINGLE, GT_CUSTOM]) then
- Exit;
+ oldPause := gPause;
+ gPauseMain := Enable;
- gPause := Enable;
- g_Game_PauseAllSounds(Enable);
+ if (gPause <> oldPause) then g_Game_PauseAllSounds(gPause);
+end;
+
+procedure g_Game_HolmesPause (Enable: Boolean);
+var
+ oldPause: Boolean;
+begin
+ if not gGameOn then exit;
+ if not (gGameSettings.GameType in [GT_SINGLE, GT_CUSTOM]) then exit;
+
+ oldPause := gPause;
+ gPauseHolmes := Enable;
+
+ if (gPause <> oldPause) then g_Game_PauseAllSounds(gPause);
end;
procedure g_Game_PauseAllSounds(Enable: Boolean);
if (s <> '') then
begin
gMapToDelete := MapsDir + map;
- e_WriteLog('"--testdelete" is deprecated, use --tempdelete.', MSG_FATALERROR);
+ e_WriteLog('"--testdelete" is deprecated, use --tempdelete.', TMsgType.Fatal);
Halt(1);
end;
Reset(F);
if IOResult <> 0 then
begin
- e_WriteLog(Format(_lc[I_SIMPLE_ERROR], ['Failed to read file: ' + s]), MSG_WARNING);
+ e_WriteLog(Format(_lc[I_SIMPLE_ERROR], ['Failed to read file: ' + s]), TMsgType.Warning);
g_Console_Add(Format(_lc[I_CONSOLE_ERROR_READ], [s]));
CloseFile(F);
Exit;
end;
- e_WriteLog('Executing script: ' + s, MSG_NOTIFY);
+ e_WriteLog('Executing script: ' + s, TMsgType.Notify);
g_Console_Add(Format(_lc[I_CONSOLE_EXEC], [s]));
while not EOF(F) do
ReadLn(F, s);
if IOResult <> 0 then
begin
- e_WriteLog(Format(_lc[I_SIMPLE_ERROR], ['Failed to read file: ' + s]), MSG_WARNING);
+ e_WriteLog(Format(_lc[I_SIMPLE_ERROR], ['Failed to read file: ' + s]), TMsgType.Warning);
g_Console_Add(Format(_lc[I_CONSOLE_ERROR_READ], [s]));
CloseFile(F);
Exit;
conRegVar('dbg_holmes', @g_holmes_enabled, 'enable/disable Holmes', 'Holmes', true);
conRegVar('dbg_scale', @g_dbg_scale, 0.01, 100.0, 'experimental deBUG scale mode', '', false);
+
+ conRegVar('light_enabled', @gwin_k8_enable_light_experiments, 'enable/disable dynamic lighting', 'lighting');
+ conRegVar('light_player_halo', @g_playerLight, 'enable/disable player halo', 'player light halo');
end.