summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 64e4a0c)
raw | patch | inline | side by side (parent: 64e4a0c)
author | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Tue, 15 Jun 2021 18:42:00 +0000 (21:42 +0300) | ||
committer | DeaDDooMER <deaddoomer@deadsoftware.ru> | |
Fri, 9 Jun 2023 07:45:41 +0000 (10:45 +0300) |
12 files changed:
diff --git a/src/game/Doom2DF.lpr b/src/game/Doom2DF.lpr
index 452b7715fe53bfcbc551b6683674a8326cc74799..ac4218ad9ec310efbd6ec98e2cb2f5a2af9b7ff0 100644 (file)
--- a/src/game/Doom2DF.lpr
+++ b/src/game/Doom2DF.lpr
fui_ctls in '../flexui/fui_ctls.pas',
{$ENDIF}
{$I ../shared/vampimg.inc}
- SysUtils;
+
+ SysUtils, Classes;
{$IFDEF WINDOWS}
{$R *.res}
noct: Boolean = False;
binPath: AnsiString = '';
forceBinDir: Boolean = False;
+ {$IFDEF USE_SDLMIXER}
+ UseNativeMusic: Boolean;
+ {$ENDIF}
+
+ wLoadingQuit: Boolean = false;
+ Time, Time_Delta, Time_Old: Int64;
+ Frame: Int64;
+ flag: Boolean = false;
+
+procedure Update ();
+begin
+ // remember old mobj positions, prepare for update
+ g_Game_PreUpdate();
+ // server: receive client commands for new frame
+ // client: receive game state changes from server
+ if (NetMode = NET_SERVER) then g_Net_Host_Update()
+ else if (NetMode = NET_CLIENT) then g_Net_Client_Update();
+ // think
+ g_Game_Update();
+ // server: send any accumulated outgoing data to clients
+ if NetMode = NET_SERVER then g_Net_Flush();
+end;
+
+procedure Init();
+ {$IFDEF USE_SDLMIXER}
+ var timiditycfg: AnsiString;
+ var oldcwd, newcwd: RawByteString;
+ {$ENDIF}
+ var NoSound: Boolean;
+begin
+ Randomize;
+
+{$IFDEF HEADLESS}
+ {$IFDEF USE_SDLMIXER}
+ NoSound := False; // hope env has set SDL_AUDIODRIVER to dummy
+ {$ELSE}
+ NoSound := True; // FMOD backend will sort it out
+ {$ENDIF}
+{$ELSE}
+ NoSound := False;
+{$ENDIF}
+
+ g_Touch_Init;
+
+(*
+ if (e_JoysticksAvailable > 0) then
+ e_WriteLog('Input: Joysticks available.', TMsgType.Notify)
+ else
+ e_WriteLog('Input: No Joysticks.', TMsgType.Notify);
+*)
+
+ if gNoSound = false then
+ begin
+ e_WriteLog('Initializing sound system', TMsgType.Notify);
+ {$IFDEF USE_SDLMIXER}
+ newcwd := '';
+ if UseNativeMusic then
+ SetEnvVar('SDL_NATIVE_MUSIC', '1');
+ timiditycfg := GetEnvironmentVariable('TIMIDITY_CFG');
+ if timiditycfg = '' then
+ begin
+ timiditycfg := 'timidity.cfg';
+ if e_FindResource(ConfigDirs, timiditycfg) OR e_FindResource(DataDirs, timiditycfg) then
+ begin
+ timiditycfg := ExpandFileName(timiditycfg);
+ newcwd := ExtractFileDir(timiditycfg);
+ SetEnvVar('TIMIDITY_CFG', timiditycfg);
+ end
+ else
+ timiditycfg := '';
+ end;
+ e_LogWritefln('TIMIDITY_CFG = "%s"', [timiditycfg]);
+ e_LogWritefln('SDL_NATIVE_MUSIC = "%s"', [GetEnvironmentVariable('SDL_NATIVE_MUSIC')]);
+ {$ENDIF}
+ e_InitSoundSystem(NoSound);
+ {$IFDEF USE_SDLMIXER}
+ if e_TimidityDecoder and (newcwd <> '') then
+ begin
+ (* HACK: Set CWD to load GUS patches relatively to cfg file. *)
+ (* CWD not restored after sound init because timidity *)
+ (* store relative pathes internally and load patches *)
+ (* later. I hope game never relies on CWD. *)
+ oldcwd := '';
+ GetDir(0, oldcwd);
+ ChDir(newcwd);
+ e_logwritefln('WARNING: USED TIMIDITY CONFIG HACK, CWD SWITCHED "%s" -> "%s"', [oldcwd, newcwd]);
+ end;
+ {$ENDIF}
+ end;
+
+ e_WriteLog('Init game', TMsgType.Notify);
+ g_Game_Init();
+
+// FillChar(charbuff, sizeof(charbuff), ' ');
+end;
+
+procedure Release();
+begin
+ e_WriteLog('Releasing engine', TMsgType.Notify);
+ e_ReleaseEngine();
+
+ e_WriteLog('Releasing input', TMsgType.Notify);
+ e_ReleaseInput();
+
+ if not gNoSound then
+ begin
+ e_WriteLog('Releasing sound', TMsgType.Notify);
+ e_ReleaseSoundSystem();
+ end;
+end;
+
+function ProcessMessage (): Boolean;
+var
+ i, t: Integer;
+begin
+ result := sys_HandleInput();
+
+ Time := sys_GetTicks();
+ Time_Delta := Time-Time_Old;
+
+ flag := false;
+
+ if wNeedTimeReset then
+ begin
+ Frame := 0;
+ Time_Delta := 28;
+ wNeedTimeReset := false;
+ end;
+
+ g_Map_ProfilersBegin();
+ g_Mons_ProfilersBegin();
+
+ t := Time_Delta div 28;
+ if (t > 0) then
+ begin
+ flag := true;
+ for i := 1 to t do
+ Update();
+ end;
+
+ g_Map_ProfilersEnd();
+ g_Mons_ProfilersEnd();
+
+ if wLoadingQuit then
+ begin
+ g_Game_Free();
+ g_Game_Quit();
+ end;
+
+ if (gExit = EXIT_QUIT) then
+ begin
+ result := true;
+ exit;
+ end;
+
+ // Время предыдущего обновления
+ if flag then
+ Time_Old := Time - (Time_Delta mod 28);
+
+ // don't wait if VSync is on, GL already probably waits enough
+ if gLerpActors then
+ flag := (Time - Frame >= gFrameTime) or gVSync;
+
+ if flag then
+ begin
+ if gPause or (not gLerpActors) or (gState = STATE_FOLD) then
+ gLerpFactor := 1.0
+ else
+ gLerpFactor := nmin(1.0, (Time - Time_Old) / 28.0);
+ r_Game_Draw;
+ sys_Repaint;
+ Frame := Time
+ end
+ else
+ sys_Delay(1);
+
+ e_SoundUpdate();
+end;
+
+
+function SDLMain (): Integer;
+var
+ idx: Integer;
+ arg: AnsiString;
+ mdfo: TStream;
+ {$IFDEF ENABLE_HOLMES}
+ itmp: Integer;
+ valres: Word;
+ {$ENDIF}
+begin
+
+ idx := 1;
+ while (idx <= ParamCount) do
+ begin
+ arg := ParamStr(idx);
+ Inc(idx);
+ //if arg = '--twinkletwinkle' then gwin_k8_enable_light_experiments := true;
+ if arg = '--jah' then g_profile_history_size := 100;
+ if arg = '--no-particles' then gpart_dbg_enabled := false;
+ if arg = '--no-los' then gmon_dbg_los_enabled := false;
+
+ if arg = '--profile-render' then g_profile_frame_draw := true;
+ if arg = '--profile-coldet' then g_profile_collision := true;
+ if arg = '--profile-los' then g_profile_los := true;
+
+ if arg = '--no-part-phys' then gpart_dbg_phys_enabled := false;
+ if arg = '--no-part-physics' then gpart_dbg_phys_enabled := false;
+ if arg = '--no-particles-phys' then gpart_dbg_phys_enabled := false;
+ if arg = '--no-particles-physics' then gpart_dbg_phys_enabled := false;
+ if arg = '--no-particle-phys' then gpart_dbg_phys_enabled := false;
+ if arg = '--no-particle-physics' then gpart_dbg_phys_enabled := false;
+
+ if arg = '--debug-input' then g_dbg_input := True;
+
+ {.$IF DEFINED(D2F_DEBUG)}
+ if arg = '--aimline' then g_dbg_aimline_on := true;
+ {.$ENDIF}
+
+{$IFDEF ENABLE_HOLMES}
+ if arg = '--holmes' then begin g_holmes_enabled := true; g_Game_SetDebugMode(); end;
+
+ if (arg = '--holmes-ui-scale') or (arg = '-holmes-ui-scale') then
+ begin
+ if (idx <= ParamCount) then
+ begin
+ if not conParseFloat(fuiRenderScale, ParamStr(idx)) then fuiRenderScale := 1.0;
+ Inc(idx);
+ end;
+ end;
+
+ if (arg = '--holmes-font') or (arg = '-holmes-font') then
+ begin
+ if (idx <= ParamCount) then
+ begin
+ itmp := 0;
+ val(ParamStr(idx), itmp, valres);
+ {$IFNDEF HEADLESS}
+ if (valres = 0) and (not g_holmes_imfunctional) then
+ begin
+ case itmp of
+ 8: uiContext.font := 'win8';
+ 14: uiContext.font := 'win14';
+ 16: uiContext.font := 'win16';
+ end;
+ end;
+ {$ELSE}
+ // fuck off, fpc!
+ itmp := itmp;
+ valres := valres;
+ {$ENDIF}
+ Inc(idx);
+ end;
+ end;
+{$ENDIF}
+
+ if (arg = '--game-scale') or (arg = '-game-scale') then
+ begin
+ if (idx <= ParamCount) then
+ begin
+ if not conParseFloat(g_dbg_scale, ParamStr(idx)) then g_dbg_scale := 1.0;
+ Inc(idx);
+ end;
+ end;
+
+ if (arg = '--write-mapdef') or (arg = '-write-mapdef') then
+ begin
+ mdfo := createDiskFile('mapdef.txt');
+ mdfo.WriteBuffer(defaultMapDef[1], Length(defaultMapDef));
+ mdfo.Free();
+ Halt(0);
+ end;
+
+ if (arg = '--pixel-scale') or (arg = '-pixel-scale') then
+ begin
+ if (idx <= ParamCount) then
+ begin
+ if not conParseFloat(r_pixel_scale, ParamStr(idx)) then r_pixel_scale := 1.0;
+ Inc(idx);
+ end;
+ end;
+ end;
+
+ r_Window_Initialize;
+
+ Init;
+ Time_Old := sys_GetTicks();
+
+ g_Net_InitLowLevel();
+
+ // game commad line
+ if (ParamCount > 0) then g_Game_Process_Params();
+
+{$IFNDEF HEADLESS}
+ if (not gGameOn) and gAskLanguage then g_Menu_AskLanguage();
+{$ENDIF}
+
+ e_WriteLog('Entering the main loop', TMsgType.Notify);
+
+ // main loop
+ while not ProcessMessage() do begin end;
+
+ g_Net_Slist_ShutdownAll();
+
+ Release();
+
+ g_Net_DeinitLowLevel();
+ result := 0;
+end;
function GetBinaryPath (): AnsiString;
{$IFDEF LINUX}
e_InitLog(LogFileName, TWriteMode.WM_NEWFILE);
e_InitWritelnDriver();
e_WriteLog('Doom 2D: Forever version ' + GAME_VERSION + ' proto ' + IntToStr(NET_PROTOCOL_VER), TMsgType.Notify);
+ e_WriteLog('Build arch: ' + g_GetBuildArch(), TMsgType.Notify);
e_WriteLog('Build date: ' + GAME_BUILDDATE + ' ' + GAME_BUILDTIME, TMsgType.Notify);
e_WriteLog('Build hash: ' + g_GetBuildHash(), TMsgType.Notify);
e_WriteLog('Build by: ' + g_GetBuilderName(), TMsgType.Notify);
var flexloaded: Boolean;
{$ENDIF}
begin
+ {$IFDEF USE_SDLMIXER}
+ conRegVar('sdl_native_music', @UseNativeMusic, 'use native midi music output when possible', 'use native midi');
+ {$IFDEF DARWIN}
+ UseNativeMusic := true; (* OSX have a good midi support, so why not? *)
+ {$ELSE}
+ UseNativeMusic := false;
+ {$ENDIF}
+ {$ENDIF}
+
InitPath;
InitPrep;
e_InitInput;
diff --git a/src/game/g_game.pas b/src/game/g_game.pas
index 85892570c59ceb9e2b65a5b8e8d140d148e173c1..b5139c37a19e1cf2d591309fdd62afb14340fe85 100644 (file)
--- a/src/game/g_game.pas
+++ b/src/game/g_game.pas
g_rlayer_water: Boolean = true;
g_rlayer_fore: Boolean = true;
+ wNeedTimeReset: Boolean = false;
procedure g_ResetDynlights ();
procedure g_AddDynLight (x, y, radius: Integer; r, g, b, a: Single);
gGameOn := True;
DisableCheats();
- ResetTimer();
+ wNeedTimeReset := True;
if gGameSettings.GameMode = GM_CTF then
begin
diff --git a/src/game/g_holmes.pas b/src/game/g_holmes.pas
index 7f74dc18f600bfd8e24343f0a1d98797560c9c61..e21faf5d8ffac4227e00fc4654e2cfd381d9fd3c 100644 (file)
--- a/src/game/g_holmes.pas
+++ b/src/game/g_holmes.pas
mempool, geom,
e_log, e_input,
g_textures, g_basic, r_graphics, g_phys, g_grid, g_player, g_monsters,
- g_window, g_map, g_triggers, g_items, g_game, g_panel, g_console, g_gfx,
+ g_map, g_triggers, g_items, g_game, g_panel, g_console, g_gfx,
xprofiler,
sdlcarcass,
fui_common, fui_events, fui_ctls,
diff --git a/src/game/g_menu.pas b/src/game/g_menu.pas
index bf16be8604bbb3ba5a91b4156d4a5fb23819d5c7..cc6f6862bbd5a0400dfb1d2cd94aee15a034765b 100644 (file)
--- a/src/game/g_menu.pas
+++ b/src/game/g_menu.pas
implementation
uses
- g_gui, g_textures, r_graphics, g_window, g_game, g_map,
+ g_gui, g_textures, r_graphics, g_game, g_map,
g_base, g_basic, g_console, g_sound, g_gfx, g_player, g_options, g_weapons,
e_log, SysUtils, CONFIG, g_playermodel, DateUtils,
MAPDEF, Math, g_saveload,
index bb6f10e521e150e7a5d0e81087ee020c533fa333..9f8af0bc4210d2fb906894bbb375af157e6d63aa 100644 (file)
--- a/src/game/g_netmaster.pas
+++ b/src/game/g_netmaster.pas
implementation
uses
- e_input, e_log, g_window, g_net, g_console,
+ e_input, e_log, g_net, g_console,
g_map, g_game, g_sound, g_gui, g_menu, g_options, g_language, g_basic, r_game,
wadreader, g_system, utils, hashtable;
diff --git a/src/game/g_options.pas b/src/game/g_options.pas
index 661d99f6986dad84ceaab0a2f96e56d8e064b984..dc45df447807a0bf31c342d080e46b10d975cffe 100644 (file)
--- a/src/game/g_options.pas
+++ b/src/game/g_options.pas
g_dbg_scale: Single = 1.0;
r_pixel_scale: Single = 1.0;
+ gwin_has_stencil: Boolean = false;
+ gwin_k8_enable_light_experiments: Boolean = false;
+ g_dbg_aimline_on: Boolean = false;
+ g_dbg_input: Boolean = False;
+
{--- Read-only dirs ---}
GameWAD: string;
DataDirs: SSArray;
{$IFDEF USE_SDL2}
SDL2,
{$ENDIF}
- e_log, e_input, g_console, g_window, g_sound, g_gfx, g_player, Math,
+ e_log, e_input, g_console, g_sound, g_gfx, g_player, Math,
g_map, g_net, g_netmaster, SysUtils, CONFIG, g_game,
g_items, wadreader, g_touch, envvars, g_system;
conRegVar('g_save_stats', @gSaveStats, '', '');
conRegVar('g_screenshot_stats', @gScreenshotStats, '', '');
conRegVar('g_lastmap', @gsMap, '', '');
+
+ conRegVar('d_input', @g_dbg_input, '', '')
end.
diff --git a/src/game/g_player.pas b/src/game/g_player.pas
index 15711235288d6f5a968934a817677d4fed5c36d0..75775079fc244b3060310b2d9618bf7577716d35 100644 (file)
--- a/src/game/g_player.pas
+++ b/src/game/g_player.pas
e_log, g_map, g_items, g_console, g_gfx, Math,
g_options, g_triggers, g_menu, g_game, g_grid, e_res,
wadreader, g_monsters, CONFIG, g_language,
- g_net, g_netmsg, g_window,
+ g_net, g_netmsg,
utils, xstreams;
const PLR_SAVE_VERSION = 0;
diff --git a/src/game/g_window.pas b/src/game/g_window.pas
index f31257236b45de2c43d6510b403ffc4d12e69a27..98d27cc1287f61af97d568de9fffb3727750dbbb 100644 (file)
--- a/src/game/g_window.pas
+++ b/src/game/g_window.pas
interface
-uses
- utils;
-
-function SDLMain (): Integer;
-procedure ResetTimer ();
-procedure ProcessLoading (forceUpdate: Boolean = False);
-
-var
- gwin_has_stencil: Boolean = false;
- gwin_k8_enable_light_experiments: Boolean = false;
- g_dbg_aimline_on: Boolean = false;
- g_dbg_input: Boolean = False;
+ procedure ProcessLoading (forceUpdate: Boolean=false);
implementation
-uses
-{$IFDEF WINDOWS}Windows,{$ENDIF}
-{$IFDEF ENABLE_HOLMES}
- g_holmes, sdlcarcass, fui_ctls,
-{$ENDIF}
- SysUtils, Classes, MAPDEF, Math, r_graphics,
- r_window, e_log, e_res, envvars, r_game,
- g_console, r_console, e_input, g_options, g_game,
- g_basic, g_textures, e_sound, g_sound, g_menu, ENet, g_net,
- g_map, g_gfx, g_monsters, xprofiler,
- g_touch, g_gui, g_system, g_netmaster;
-
-var
- Time, Time_Delta, Time_Old: Int64;
- Frame: Int64;
- flag: Boolean;
- wNeedTimeReset: Boolean = false;
- wLoadingQuit: Boolean = false;
-
- {$IFDEF USE_SDLMIXER}
- UseNativeMusic: Boolean;
- {$ENDIF}
-
-procedure Update ();
-begin
- // remember old mobj positions, prepare for update
- g_Game_PreUpdate();
- // server: receive client commands for new frame
- // client: receive game state changes from server
- if (NetMode = NET_SERVER) then g_Net_Host_Update()
- else if (NetMode = NET_CLIENT) then g_Net_Client_Update();
- // think
- g_Game_Update();
- // server: send any accumulated outgoing data to clients
- if NetMode = NET_SERVER then g_Net_Flush();
-end;
-
-
-procedure Draw ();
-begin
- r_Game_Draw();
-end;
-
-
-procedure Init();
- {$IFDEF USE_SDLMIXER}
- var timiditycfg: AnsiString;
- var oldcwd, newcwd: RawByteString;
- {$ENDIF}
- var NoSound: Boolean;
-begin
- Randomize;
-
-{$IFDEF HEADLESS}
- {$IFDEF USE_SDLMIXER}
- NoSound := False; // hope env has set SDL_AUDIODRIVER to dummy
- {$ELSE}
- NoSound := True; // FMOD backend will sort it out
- {$ENDIF}
-{$ELSE}
- NoSound := False;
-{$ENDIF}
-
- g_Touch_Init;
-
-(*
- if (e_JoysticksAvailable > 0) then
- e_WriteLog('Input: Joysticks available.', TMsgType.Notify)
- else
- e_WriteLog('Input: No Joysticks.', TMsgType.Notify);
-*)
-
- if gNoSound = false then
- begin
- e_WriteLog('Initializing sound system', TMsgType.Notify);
- {$IFDEF USE_SDLMIXER}
- newcwd := '';
- if UseNativeMusic then
- SetEnvVar('SDL_NATIVE_MUSIC', '1');
- timiditycfg := GetEnvironmentVariable('TIMIDITY_CFG');
- if timiditycfg = '' then
- begin
- timiditycfg := 'timidity.cfg';
- if e_FindResource(ConfigDirs, timiditycfg) OR e_FindResource(DataDirs, timiditycfg) then
- begin
- timiditycfg := ExpandFileName(timiditycfg);
- newcwd := ExtractFileDir(timiditycfg);
- SetEnvVar('TIMIDITY_CFG', timiditycfg);
- end
- else
- timiditycfg := '';
- end;
- e_LogWritefln('TIMIDITY_CFG = "%s"', [timiditycfg]);
- e_LogWritefln('SDL_NATIVE_MUSIC = "%s"', [GetEnvironmentVariable('SDL_NATIVE_MUSIC')]);
- {$ENDIF}
- e_InitSoundSystem(NoSound);
- {$IFDEF USE_SDLMIXER}
- if e_TimidityDecoder and (newcwd <> '') then
- begin
- (* HACK: Set CWD to load GUS patches relatively to cfg file. *)
- (* CWD not restored after sound init because timidity *)
- (* store relative pathes internally and load patches *)
- (* later. I hope game never relies on CWD. *)
- oldcwd := '';
- GetDir(0, oldcwd);
- ChDir(newcwd);
- e_logwritefln('WARNING: USED TIMIDITY CONFIG HACK, CWD SWITCHED "%s" -> "%s"', [oldcwd, newcwd]);
- end;
- {$ENDIF}
- end;
-
- e_WriteLog('Init game', TMsgType.Notify);
- g_Game_Init();
-
-// FillChar(charbuff, sizeof(charbuff), ' ');
-end;
-
-procedure Release();
-begin
- e_WriteLog('Releasing engine', TMsgType.Notify);
- e_ReleaseEngine();
-
- e_WriteLog('Releasing input', TMsgType.Notify);
- e_ReleaseInput();
-
- if not gNoSound then
- begin
- e_WriteLog('Releasing sound', TMsgType.Notify);
- e_ReleaseSoundSystem();
- end;
-end;
-
-procedure ResetTimer ();
-begin
- wNeedTimeReset := true;
-end;
-
-procedure ProcessLoading (forceUpdate: Boolean=false);
-begin
- if sys_HandleInput() = True then
- Exit;
-
-{$IFNDEF HEADLESS}
- r_Window_DrawLoading(forceUpdate);
-{$ENDIF}
-
- e_SoundUpdate();
-
- // TODO: At the moment, I left here only host network processing, because the client code must
- // handle network events on its own. Otherwise separate network cases that use different calls to
- // enet_host_service() WILL lose their packets (for example, resource downloading). So they have
- // to handle everything by themselves. But in general, this MUST be removed completely, since
- // updating the window should never affect the network. Use single enet_host_service(), period.
- if NetMode = NET_SERVER
- then g_Net_Host_Update();
-end;
-
-
-function ProcessMessage (): Boolean;
-var
- i, t: Integer;
-begin
- result := sys_HandleInput();
-
- Time := sys_GetTicks();
- Time_Delta := Time-Time_Old;
-
- flag := false;
-
- if wNeedTimeReset then
- begin
- Frame := 0;
- Time_Delta := 28;
- wNeedTimeReset := false;
- end;
-
- g_Map_ProfilersBegin();
- g_Mons_ProfilersBegin();
-
- t := Time_Delta div 28;
- if (t > 0) then
- begin
- flag := true;
- for i := 1 to t do
- Update();
- end;
-
- g_Map_ProfilersEnd();
- g_Mons_ProfilersEnd();
-
- if wLoadingQuit then
- begin
- g_Game_Free();
- g_Game_Quit();
- end;
-
- if (gExit = EXIT_QUIT) then
- begin
- result := true;
- exit;
- end;
-
- // Âðåìÿ ïðåäûäóùåãî îáíîâëåíèÿ
- if flag then
- Time_Old := Time - (Time_Delta mod 28);
+ uses e_sound, g_system, g_net, r_window;
- // don't wait if VSync is on, GL already probably waits enough
- if gLerpActors then
- flag := (Time - Frame >= gFrameTime) or gVSync;
-
- if flag then
+ procedure ProcessLoading (forceUpdate: Boolean = False);
begin
- if gPause or (not gLerpActors) or (gState = STATE_FOLD) then
- gLerpFactor := 1.0
- else
- gLerpFactor := nmin(1.0, (Time - Time_Old) / 28.0);
- Draw;
- sys_Repaint;
- Frame := Time
- end
- else
- sys_Delay(1);
-
- e_SoundUpdate();
-end;
-
-function SDLMain (): Integer;
-var
- idx: Integer;
- arg: AnsiString;
- mdfo: TStream;
- {$IFDEF ENABLE_HOLMES}
- itmp: Integer;
- valres: Word;
- {$ENDIF}
-begin
-
- idx := 1;
- while (idx <= ParamCount) do
- begin
- arg := ParamStr(idx);
- Inc(idx);
- if arg = '--jah' then g_profile_history_size := 100;
- if arg = '--no-particles' then gpart_dbg_enabled := false;
- if arg = '--no-los' then gmon_dbg_los_enabled := false;
-
- if arg = '--profile-render' then g_profile_frame_draw := true;
- if arg = '--profile-coldet' then g_profile_collision := true;
- if arg = '--profile-los' then g_profile_los := true;
-
- if arg = '--no-part-phys' then gpart_dbg_phys_enabled := false;
- if arg = '--no-part-physics' then gpart_dbg_phys_enabled := false;
- if arg = '--no-particles-phys' then gpart_dbg_phys_enabled := false;
- if arg = '--no-particles-physics' then gpart_dbg_phys_enabled := false;
- if arg = '--no-particle-phys' then gpart_dbg_phys_enabled := false;
- if arg = '--no-particle-physics' then gpart_dbg_phys_enabled := false;
-
- if arg = '--debug-input' then g_dbg_input := True;
-
- {.$IF DEFINED(D2F_DEBUG)}
- if arg = '--aimline' then g_dbg_aimline_on := true;
- {.$ENDIF}
-
-{$IFDEF ENABLE_HOLMES}
- if arg = '--holmes' then begin g_holmes_enabled := true; g_Game_SetDebugMode(); end;
-
- if (arg = '--holmes-ui-scale') or (arg = '-holmes-ui-scale') then
+ if sys_HandleInput() = False then
begin
- if (idx <= ParamCount) then
- begin
- if not conParseFloat(fuiRenderScale, ParamStr(idx)) then fuiRenderScale := 1.0;
- Inc(idx);
- end;
- end;
-
- if (arg = '--holmes-font') or (arg = '-holmes-font') then
- begin
- if (idx <= ParamCount) then
- begin
- itmp := 0;
- val(ParamStr(idx), itmp, valres);
- {$IFNDEF HEADLESS}
- if (valres = 0) and (not g_holmes_imfunctional) then
- begin
- case itmp of
- 8: uiContext.font := 'win8';
- 14: uiContext.font := 'win14';
- 16: uiContext.font := 'win16';
- end;
- end;
- {$ELSE}
- // fuck off, fpc!
- itmp := itmp;
- valres := valres;
- {$ENDIF}
- Inc(idx);
- end;
- end;
-{$ENDIF}
-
- if (arg = '--game-scale') or (arg = '-game-scale') then
- begin
- if (idx <= ParamCount) then
- begin
- if not conParseFloat(g_dbg_scale, ParamStr(idx)) then g_dbg_scale := 1.0;
- Inc(idx);
- end;
- end;
-
- if (arg = '--write-mapdef') or (arg = '-write-mapdef') then
- begin
- mdfo := createDiskFile('mapdef.txt');
- mdfo.WriteBuffer(defaultMapDef[1], Length(defaultMapDef));
- mdfo.Free();
- Halt(0);
- end;
-
- if (arg = '--pixel-scale') or (arg = '-pixel-scale') then
- begin
- if (idx <= ParamCount) then
- begin
- if not conParseFloat(r_pixel_scale, ParamStr(idx)) then r_pixel_scale := 1.0;
- Inc(idx);
- end;
- end;
+ {$IFNDEF HEADLESS}
+ r_Window_DrawLoading(forceUpdate);
+ {$ENDIF}
+ e_SoundUpdate();
+ // TODO: At the moment, I left here only host network processing, because the client code must
+ // handle network events on its own. Otherwise separate network cases that use different calls to
+ // enet_host_service() WILL lose their packets (for example, resource downloading). So they have
+ // to handle everything by themselves. But in general, this MUST be removed completely, since
+ // updating the window should never affect the network. Use single enet_host_service(), period.
+ if NetMode = NET_SERVER then g_Net_Host_Update();
+ end
end;
- r_Window_Initialize;
-
- Init;
- Time_Old := sys_GetTicks();
-
- g_Net_InitLowLevel();
-
- // Êîìàíäíàÿ ñòðîêà
- if (ParamCount > 0) then g_Game_Process_Params();
-
-{$IFNDEF HEADLESS}
- // Çàïðîñ ÿçûêà
- if (not gGameOn) and gAskLanguage then g_Menu_AskLanguage();
-{$ENDIF}
-
- e_WriteLog('Entering the main loop', TMsgType.Notify);
-
- // main loop
- while not ProcessMessage() do begin end;
-
- g_Net_Slist_ShutdownAll();
-
- Release();
-
- g_Net_DeinitLowLevel();
- result := 0;
-end;
-
-
-initialization
-{$IFDEF USE_SDLMIXER}
- conRegVar('sdl_native_music', @UseNativeMusic, 'use native midi music output when possible', 'use native midi');
- {$IFDEF DARWIN}
- UseNativeMusic := true; (* OSX have a good midi support, so why not? *)
- {$ELSE}
- UseNativeMusic := false;
- {$ENDIF}
-{$ENDIF}
- conRegVar('d_input', @g_dbg_input, '', '')
end.
index 9b5d96718405dfd8f0fa9dda2598088bf3101f22..641544f8e5978e35226f063bb8d953766c18725f 100644 (file)
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,
+ 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_panel, r_monsters, r_weapons, r_netmaster, r_player
;
index bf7ea938cb88ab83d9a15f036efe5d5484281b07..99b338cdc92f3d610c22a7d555c46c75f3070854 100644 (file)
SysUtils, SDL, Math,
{$INCLUDE ../nogl/noGLuses.inc}
e_log, r_graphics, e_input, e_sound,
- g_options, g_window, g_console, g_game, g_menu, g_gui, g_basic;
+ g_options, g_console, g_game, g_menu, g_gui, g_basic;
const
GameTitle = 'Doom 2D: Forever (SDL 1.2, %s, %s)';
index 95c3aca8151d658c07d282c33dd6a9eea609785c..bf44ceaaa23d956e52107e5a6c18c16ccc305625 100644 (file)
{$IFDEF ENABLE_HOLMES}
g_holmes, sdlcarcass, fui_ctls,
{$ENDIF}
- g_touch, g_options, g_window, g_console, g_game, g_menu, g_gui, g_basic;
+ g_touch, g_options, g_console, g_game, g_menu, g_gui, g_basic;
const
GameTitle = 'Doom 2D: Forever (SDL 2, %s)';
index 12a46645989b8d016dd6cc056c3aeab61e4ad935..629ca3a69fde4a62f866d0bcf140f2ba131f3190 100644 (file)
uses
SysUtils,
- e_log, r_graphics, e_input, g_options, g_game, g_gui, g_weapons, g_console, g_window;
+ e_log, r_graphics, e_input, g_options, g_game, g_gui, g_weapons, g_console;
var
angleFire: Boolean;