diff --git a/src/game/Doom2DF.lpr b/src/game/Doom2DF.lpr
index d1fbc06443004070580798c0383ac96451e82199..51d0cb9617414851a7056e02e85ddeca90aa284e 100644 (file)
--- a/src/game/Doom2DF.lpr
+++ b/src/game/Doom2DF.lpr
g_res_downloader in 'g_res_downloader.pas',
g_grid in 'g_grid.pas',
g_game in 'g_game.pas',
- g_gfx in 'g_gfx.pas',
- g_gui in 'g_gui.pas',
+ {$IFDEF ENABLE_GFX}
+ g_gfx in 'g_gfx.pas',
+ {$ENDIF}
+ {$IFDEF ENABLE_GIBS}
+ g_gibs in 'g_gibs.pas',
+ {$ENDIF}
+ {$IFDEF ENABLE_SHELLS}
+ g_shells in 'g_shells.pas',
+ {$ENDIF}
+ {$IFDEF ENABLE_CORPSES}
+ g_corpses in 'g_corpses.pas',
+ {$ENDIF}
g_items in 'g_items.pas',
g_map in 'g_map.pas',
- g_menu in 'g_menu.pas',
g_monsters in 'g_monsters.pas',
g_options in 'g_options.pas',
g_phys in 'g_phys.pas',
g_playermodel in 'g_playermodel.pas',
g_saveload in 'g_saveload.pas',
g_sound in 'g_sound.pas',
- g_textures in 'g_textures.pas',
+ g_animations in 'g_animations.pas',
g_triggers in 'g_triggers.pas',
g_weapons in 'g_weapons.pas',
g_window in 'g_window.pas',
-{$IFDEF USE_SYSSTUB}
- g_system in 'stub/g_system.pas',
- g_touch in 'stub/g_touch.pas',
-{$ENDIF}
-{$IFDEF USE_SDL}
- g_system in 'sdl/g_system.pas',
- g_touch in 'sdl/g_touch.pas',
-{$ENDIF}
-{$IFDEF USE_SDL2}
- g_system in 'sdl2/g_system.pas',
- g_touch in 'sdl2/g_touch.pas',
-{$ENDIF}
- r_console in 'opengl/r_console.pas',
- r_game in 'opengl/r_game.pas',
- r_gfx in 'opengl/r_gfx.pas',
- r_graphics in 'opengl/r_graphics.pas',
- r_items in 'opengl/r_items.pas',
- r_map in 'opengl/r_map.pas',
- r_monsters in 'opengl/r_monsters.pas',
- r_netmaster in 'opengl/r_netmaster.pas',
- r_panel in 'opengl/r_panel.pas',
- r_player in 'opengl/r_player.pas',
- r_playermodel in 'opengl/r_playermodel.pas',
- r_texture in 'opengl/r_texture.pas',
- r_weapons in 'opengl/r_weapons.pas',
- r_window in 'opengl/r_window.pas',
- r_render in 'opengl/r_render.pas',
+ {$IFDEF ENABLE_SYSTEM}
+ {$IFDEF USE_SYSSTUB}
+ g_system in 'stub/g_system.pas',
+ {$ENDIF}
+ {$IFDEF USE_SDL}
+ g_system in 'sdl/g_system.pas',
+ {$ENDIF}
+ {$IFDEF USE_SDL2}
+ g_system in 'sdl2/g_system.pas',
+ {$ENDIF}
+ {$ENDIF}
+
+ {$IFDEF ENABLE_MENU}
+ g_gui in 'g_gui.pas',
+ g_menu in 'g_menu.pas',
+ {$ENDIF}
+
+{$IFDEF ENABLE_RENDER}
+ {$IF DEFINED(USE_OPENGL) OR DEFINED(USE_GLES1) OR DEFINED(USE_GLSTUB)}
+ {$I ../shared/vampimg.inc}
+ r_animations in 'opengl/r_animations.pas',
+ r_console in 'opengl/r_console.pas',
+ r_game in 'opengl/r_game.pas',
+ {$IFDEF ENABLE_GFX}
+ r_gfx in 'opengl/r_gfx.pas',
+ {$ENDIF}
+ r_graphics in 'opengl/r_graphics.pas',
+ r_items in 'opengl/r_items.pas',
+ r_map in 'opengl/r_map.pas',
+ r_monsters in 'opengl/r_monsters.pas',
+ r_netmaster in 'opengl/r_netmaster.pas',
+ r_player in 'opengl/r_player.pas',
+ r_playermodel in 'opengl/r_playermodel.pas',
+ r_render in 'opengl/r_render.pas',
+ r_texture in 'opengl/r_texture.pas',
+ r_textures in 'opengl/r_textures.pas',
+ r_weapons in 'opengl/r_weapons.pas',
+ r_window in 'opengl/r_window.pas',
+ {$IFDEF ENABLE_TOUCH}
+ r_touch in 'opengl/r_touch.pas',
+ {$ENDIF}
+ {$IFDEF ENABLE_MENU}
+ r_gui in 'opengl/r_gui.pas',
+ {$ENDIF}
+ {$ELSEIF DEFINED(USE_STUBRENDER)}
+ r_render in 'renders/stub/r_render.pas',
+ {$ELSEIF DEFINED(USE_NEWGL)}
+ {$I ../shared/vampimg.inc}
+ r_render in 'renders/opengl/r_render.pas',
+ r_atlas in 'renders/opengl/r_atlas.pas',
+ r_textures in 'renders/opengl/r_textures.pas',
+ r_draw in 'renders/opengl/r_draw.pas',
+ r_map in 'renders/opengl/r_map.pas',
+ r_fonts in 'renders/opengl/r_fonts.pas',
+ r_common in 'renders/opengl/r_common.pas',
+ r_console in 'renders/opengl/r_console.pas',
+ r_gui in 'renders/opengl/r_gui.pas',
+ r_loadscreen in 'renders/opengl/r_loadscreen.pas',
+ {$ELSE}
+ {$FATAL render driver not selected}
+ {$ENDIF}
+{$ENDIF}
{$IFDEF USE_FMOD}
fmod in '../lib/FMOD/fmod.pas',
fui_flexlay in '../flexui/fui_flexlay.pas',
fui_ctls in '../flexui/fui_ctls.pas',
{$ENDIF}
- {$I ../shared/vampimg.inc}
SysUtils, Classes;
UseNativeMusic: Boolean;
{$ENDIF}
- wLoadingQuit: Boolean = false;
- Time, Time_Delta, Time_Old: Int64;
- Frame: Int64;
- flag: Boolean = false;
-
+ Time_Old: Int64;
NoSound: Boolean;
procedure Update ();
if (NetMode = NET_SERVER) then g_Net_Host_Update()
else if (NetMode = NET_CLIENT) then g_Net_Client_Update();
// think
+{$IFDEF ENABLE_RENDER}
+ r_Render_Update;
+{$ENDIF}
g_Game_Update();
// server: send any accumulated outgoing data to clients
if NetMode = NET_SERVER then g_Net_Flush();
function ProcessMessage (): Boolean;
var
i, t: Integer;
+ flag: Boolean;
+ Time, Time_Delta: Int64;
+ Frame: Int64;
begin
- result := sys_HandleInput();
+ {$IFDEF ENABLE_SYSTEM}
+ Result := sys_HandleInput();
+ {$ELSE}
+ Result := False;
+ {$ENDIF}
- Time := sys_GetTicks();
+ Time := GetTickCount64();
Time_Delta := Time-Time_Old;
flag := false;
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;
gLerpFactor := 1.0
else
gLerpFactor := nmin(1.0, (Time - Time_Old) / 28.0);
- r_Game_Draw;
- sys_Repaint;
+ {$IFDEF ENABLE_RENDER}
+ r_Render_Draw;
+ {$ENDIF}
Frame := Time
end
else
- sys_Delay(1);
+ Sleep(1);
e_SoundUpdate();
end;
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;
+ {$IFDEF ENABLE_GFX}
+ if arg = '--no-particles' then gpart_dbg_enabled := false;
+ 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;
+ {$ENDIF}
if arg = '--debug-input' then g_dbg_input := True;
begin
itmp := 0;
val(ParamStr(idx), itmp, valres);
- {$IFNDEF HEADLESS}
if (valres = 0) and (not g_holmes_imfunctional) then
begin
case itmp of
16: uiContext.font := 'win16';
end;
end;
- {$ELSE}
- // fuck off, fpc!
- itmp := itmp;
- valres := valres;
- {$ENDIF}
Inc(idx);
end;
end;
end;
end;
+ procedure ScreenResize (w, h: Integer);
+ begin
+ {$IFDEF ENABLE_RENDER}
+ r_Render_Resize(w, h);
+ {$IFDEF ENABLE_HOLMES}
+ fuiScrWdt := w;
+ fuiScrHgt := h;
+ {$ENDIF}
+ {$IFNDEF ANDROID}
+ (* This will fix menu reset on keyboard showing *)
+ {$IFDEF ENABLE_MENU}
+ g_Menu_Reset;
+ {$ENDIF}
+ {$ENDIF}
+ //g_Game_ClearLoading;
+ {$IFDEF ENABLE_HOLMES}
+ if assigned(oglInitCB) then oglInitCB;
+ {$ENDIF}
+ {$ENDIF}
+ end;
+
+ procedure ProcessLoading;
+ var update: Boolean;
+ begin
+ {$IFDEF ENABLE_SYSTEM}
+ update := sys_HandleInput() = False;
+ {$ELSE}
+ update := True;
+ {$ENDIF}
+ if update then
+ begin
+ 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;
+
procedure Startup;
begin
Randomize;
InitPrep;
e_Input_Initialize;
InitSound;
- sys_Init;
- sys_CharPress := @CharPress; (* install hook *)
+ {$IFDEF ENABLE_SYSTEM}
+ sys_Init;
+ sys_CharPress := @CharPress; (* install hook *)
+ sys_ScreenResize := @ScreenResize; (* install hook *)
+ {$ENDIF}
g_Options_SetDefault;
g_Options_SetDefaultVideo;
g_Console_Initialize;
// TODO move load configs here
g_Language_Set(gLanguage);
- r_Render_Initialize;
- g_Touch_Init;
+ {$IFDEF ENABLE_RENDER}
+ r_Render_Initialize;
+ {$ENDIF}
DebugOptions;
g_Net_InitLowLevel;
// TODO init serverlist
+ {$IFDEF ENABLE_RENDER}
+ r_Render_SetProcessLoadingCallback(@ProcessLoading);
+ {$ENDIF}
+ g_Game_SetLoadingText(Format('Doom 2D: Forever %s', [GAME_VERSION]), 0, False);
+ g_Game_SetLoadingText('', 0, False);
{$IFDEF ENABLE_HOLMES}
InitHolmes;
{$ENDIF}
+ {$IFDEF ENABLE_RENDER}
+ g_PlayerModel_LoadAll;
+ r_Render_Load;
+ {$ELSE}
+ g_PlayerModel_LoadFake('doomer', 'doomer.wad');
+ {$ENDIF}
g_Game_Init;
- {$IFNDEF HEADLESS}
+ {$IFDEF ENABLE_MENU}
g_Menu_Init;
- g_GUI_Init;
{$ENDIF}
g_Game_Process_Params;
// TODO reload GAME textures
g_Console_Init; // welcome message
- {$IFNDEF HEADLESS}
+ {$IFDEF ENABLE_MENU}
if (not gGameOn) and gAskLanguage then
g_Menu_AskLanguage;
{$ENDIF}
- Time_Old := sys_GetTicks();
+ Time_Old := GetTickCount64();
while not ProcessMessage() do begin end;
+ {$IFDEF ENABLE_RENDER}
+ r_Render_SetProcessLoadingCallback(nil);
+ {$ENDIF}
g_Console_WriteGameConfig;
- {$IFNDEF HEADLESS}
+ {$IFDEF ENABLE_MENU}
g_GUI_Destroy;
g_Menu_Free;
{$ENDIF}
+ {$IFDEF ENABLE_RENDER}
+ r_Render_Free;
+ {$ENDIF}
{$IFDEF ENABLE_HOLMES}
FreeHolmes;
{$ENDIF}
g_Net_Slist_ShutdownAll;
g_Net_DeinitLowLevel;
(* g_Touch_Finalize; *)
- r_Render_Finalize;
- sys_Final;
+ {$IFDEF ENABLE_RENDER}
+ r_Render_Finalize;
+ {$ENDIF}
+ {$IFDEF ENABLE_SYSTEM}
+ sys_Final;
+ {$ENDIF}
g_Console_Finalize;
e_ReleaseSoundSystem;
e_Input_Finalize;