DEADSOFTWARE

gfx: fixed OpenGL extension checks; fixed NPOT emulation detection
[d2df-sdl.git] / src / game / g_main.pas
index 960eb9eeafaccd3325d119a7a042c03b5cfd796f..45432615c04762ff01a513553de4f9b7822043af 100644 (file)
@@ -2,8 +2,7 @@
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
+ * the Free Software Foundation, version 3 of the License ONLY.
  *
  * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
@@ -32,33 +31,30 @@ var
   MapsDir: string;
   ModelsDir: string;
   GameWAD: string;
-
+  LogFileName: string;
 
 implementation
 
 uses
-{$IFDEF USE_NANOGL}
-  nanoGL,
-{$ELSE}
-  GL, GLExt,
+{$INCLUDE ../nogl/noGLuses.inc}
+{$IFDEF ENABLE_HOLMES}
+  g_holmes, sdlcarcass, fui_ctls, fui_wadread, fui_style, fui_gfx_gl,
 {$ENDIF}
-  SDL2, wadreader, e_log, g_window,
+  wadreader, e_log, g_window,
   e_graphics, e_input, g_game, g_console, g_gui,
   e_sound, g_options, g_sound, g_player, g_basic,
   g_weapons, SysUtils, g_triggers, MAPDEF, g_map,
-  g_menu, g_language, g_net, g_holmes,
-  utils, conbuf, envvars, fui_wadread, fui_style,
-  fui_gfx_gl, xparser;
+  g_menu, g_language, g_net, g_touch, g_system, g_res_downloader,
+  utils, conbuf, envvars,
+  xparser;
 
 
 var
   charbuff: packed array [0..15] of AnsiChar;
 
 procedure Main();
-var
-  sdlflags: LongWord;
-{$IFNDEF HEADLESS}
-  flexloaded: Boolean;
+{$IFDEF ENABLE_HOLMES}
+  var flexloaded: Boolean;
 {$ENDIF}
 begin
   e_InitWritelnDriver();
@@ -69,7 +65,7 @@ begin
   ModelsDir := DataDir + 'models/';
   GameWAD := DataDir + 'Game.wad';
 
-  e_InitLog(GameDir + '/' + LOG_FILENAME, TWriteMode.WM_NEWFILE);
+  e_InitLog(GameDir + '/' + LogFileName, TWriteMode.WM_NEWFILE);
 
   e_WriteLog(
     'Doom 2D: Forever version ' + GAME_VERSION +
@@ -81,50 +77,23 @@ begin
     TMsgType.Notify
   );
 
-  e_WriteLog('Read config file', TMsgType.Notify);
-  g_Options_Read(GameDir + '/' + CONFIG_FILENAME);
-
 {$IFDEF HEADLESS}
   conbufDumpToStdOut := true;
 {$ENDIF}
   e_WriteToStdOut := False; //{$IFDEF HEADLESS}True;{$ELSE}False;{$ENDIF}
 
-  //GetSystemDefaultLCID()
+  e_InitInput;
 
-  //e_WriteLog('Read language file', MSG_NOTIFY);
-  //g_Language_Load(DataDir + gLanguage + '.txt');
+  sys_Init;
+  g_Options_Read(GameDir + '/' + CONFIG_FILENAME);
+  if sys_SetDisplayMode(gScreenWidth, gScreenHeight, gBPP, gFullScreen) = False then
+    raise Exception.Create('Failed to set videomode on startup.');
+
+  g_Console_SysInit;
   e_WriteLog(gLanguage, TMsgType.Notify);
   g_Language_Set(gLanguage);
 
-{$IFDEF HEADLESS}
- {$IFDEF USE_SDLMIXER}
-  sdlflags := SDL_INIT_TIMER or SDL_INIT_AUDIO or $00004000;
-  // HACK: shit this into env and hope for the best
-  SetEnvVar('SDL_AUDIODRIVER', 'dummy');
- {$ELSE}
-  sdlflags := SDL_INIT_TIMER or $00004000;
- {$ENDIF}
-{$ELSE}
- {$IFDEF USE_SDLMIXER}
-  {*sdlflags := SDL_INIT_EVERYTHING;*}
-  sdlflags := SDL_INIT_JOYSTICK or SDL_INIT_TIMER or SDL_INIT_VIDEO;
- {$ELSE}
-  sdlflags := SDL_INIT_JOYSTICK or SDL_INIT_TIMER or SDL_INIT_VIDEO;
- {$ENDIF}
-{$ENDIF}
-
-  SDL_SetHint(SDL_HINT_ACCELEROMETER_AS_JOYSTICK, '0');
-
-  if SDL_Init(sdlflags) < 0 then
-    raise Exception.Create('SDL: Init failed: ' + SDL_GetError());
-
-{$IFNDEF HEADLESS}
-{$IFNDEF ANDROID}
-  SDL_StartTextInput();
-{$ENDIF}
-{$ENDIF}
-
-{$IFNDEF HEADLESS}
+{$IF not DEFINED(HEADLESS) and DEFINED(ENABLE_HOLMES)}
   flexloaded := true;
   if not fuiAddWad('flexui.wad') then
   begin
@@ -167,20 +136,29 @@ begin
     end;
   end;
   g_holmes_imfunctional := not flexloaded;
+
+  if (not g_holmes_imfunctional) then
+  begin
+    uiInitialize();
+    uiContext.font := 'win14';
+  end;
+
+  if assigned(oglInitCB) then oglInitCB;
 {$ENDIF}
 
+  //g_Res_CreateDatabases(); // it will be done before connecting to the server for the first time
+
   e_WriteLog('Entering SDLMain', TMsgType.Notify);
 
-{$WARNINGS OFF}
-  SDLMain();
-{$WARNINGS ON}
+  {$WARNINGS OFF}
+    SDLMain();
+  {$WARNINGS ON}
 
-{$IFNDEF HEADLESS}
-  SDL_StopTextInput();
-{$ENDIF}
+  {$IFDEF ENABLE_HOLMES}
+    if assigned(oglDeinitCB) then oglDeinitCB;
+  {$ENDIF}
 
-  e_WriteLog('Releasing SDL', TMsgType.Notify);
-  SDL_Quit();
+  sys_Final;
 end;
 
 procedure Init();
@@ -199,13 +177,14 @@ begin
   NoSound := False;
 {$ENDIF}
 
-  e_WriteLog('Init Input', TMsgType.Notify);
-  e_InitInput();
+  g_Touch_Init;
 
+(*
   if (e_JoysticksAvailable > 0) then
     e_WriteLog('Input: Joysticks available.', TMsgType.Notify)
   else
     e_WriteLog('Input: No Joysticks.', TMsgType.Notify);
+*)
 
   if (not gNoSound) then
   begin
@@ -225,12 +204,12 @@ begin
   e_WriteLog('Releasing engine', TMsgType.Notify);
   e_ReleaseEngine();
 
-  e_WriteLog('Releasing Input', TMsgType.Notify);
+  e_WriteLog('Releasing input', TMsgType.Notify);
   e_ReleaseInput();
 
   if not gNoSound then
   begin
-    e_WriteLog('Releasing FMOD', TMsgType.Notify);
+    e_WriteLog('Releasing sound', TMsgType.Notify);
     e_ReleaseSoundSystem();
   end;
 end;
@@ -485,36 +464,19 @@ end;
 
 
 procedure KeyPress (K: Word);
+{$IFNDEF HEADLESS}
 var
   Msg: g_gui.TMessage;
+{$ENDIF}
 begin
+{$IFNDEF HEADLESS}
   case K of
-    IK_PAUSE: // <Pause/Break>:
-      begin
-        if (g_ActiveWindow = nil) then g_Game_Pause(not gPause);
-      end;
-
-    IK_BACKQUOTE, VK_CONSOLE: // <`/~/¨/¸>:
-      begin
-        g_Console_Switch();
-      end;
-
-    IK_ESCAPE, VK_ESCAPE: // <Esc>:
+    VK_ESCAPE: // <Esc>:
       begin
-        if gChatShow then
-        begin
-          g_Console_Chat_Switch();
-          Exit;
-        end;
-
-        if gConsoleShow then
-        begin
-          g_Console_Switch();
-        end
-        else if (g_ActiveWindow <> nil) then
+        if (g_ActiveWindow <> nil) then
         begin
           Msg.Msg := WM_KEYDOWN;
-          Msg.WParam := IK_ESCAPE;
+          Msg.WParam := VK_ESCAPE;
           g_ActiveWindow.OnMessage(Msg);
           if (not g_Game_IsNet) and (g_ActiveWindow = nil) then g_Game_Pause(false); //Fn loves to do this
         end
@@ -580,6 +542,7 @@ begin
         end;
       end;
   end;
+{$ENDIF}
 end;
 
 
@@ -588,11 +551,9 @@ var
   Msg: g_gui.TMessage;
   a: Integer;
 begin
-  if (not gChatShow) and ((C = '`') or (C = '~') or (C = '¸') or (C = '¨')) then Exit;
-
   if gConsoleShow or gChatShow then
   begin
-    g_Console_Char(C);
+    g_Console_Char(C)
   end
   else if (g_ActiveWindow <> nil) then
   begin