DEADSOFTWARE

added optional framebuffer and resolution scaling
[d2df-sdl.git] / src / game / g_options.pas
index 481eb70c9491c354976b8aa2475aecaf573bb308..706ca33a1a357d740a82b0282c9557e590a8f929 100644 (file)
@@ -35,14 +35,14 @@ procedure g_Options_Commands (p: SSArray);
 const DF_Default_Megawad_Start = 'megawads/DOOM2D.WAD:\MAP01';
 
 var
-  gScreenWidth: Word;
-  gScreenHeight: Word;
   gBPP: Integer;
   gFreq: Byte;
   gFullscreen: Boolean;
+  gWinSizeX, gWinSizeY: Integer;
   gWinMaximized: Boolean;
   gVSync: Boolean;
   glLegacyNPOT: Boolean;
+  glRenderToFBO: Boolean = True;
   gTextureFilter: Boolean;
   gNoSound: Boolean;
   gSoundLevel: Integer;
@@ -60,6 +60,8 @@ var
   gRevertPlayers: Boolean;
   gLanguage: String;
   gAskLanguage: Boolean;
+  gSaveStats: Boolean = False;
+  gScreenshotStats: Boolean = False;
   gcMap: String;
   gcGameMode: String;
   gcTimeLimit: Word;
@@ -71,6 +73,9 @@ var
   gcWeaponStay: Boolean;
   gcMonsters: Boolean;
   gcBotsVS: String;
+  gcDeathmatchKeys: Boolean = True;
+  gcRespawnItems: Boolean = True;
+  gcSpawnInvul: Integer = 0;
   gnMap: String;
   gnGameMode: String;
   gnTimeLimit: Word;
@@ -82,6 +87,9 @@ var
   gnWeaponStay: Boolean;
   gnMonsters: Boolean;
   gnBotsVS: String;
+  gnDeathmatchKeys: Boolean = True;
+  gnRespawnItems: Boolean = True;
+  gnSpawnInvul: Integer = 0;
   gsSDLSampleRate: Integer;
   gsSDLBufferSize: Integer;
   gDefaultMegawadStart: AnsiString;
@@ -124,6 +132,8 @@ begin
   (* Display 0 = Primary display *)
   gScreenWidth := 640;
   gScreenHeight := 480;
+  gWinSizeX := 640;
+  gWinSizeY := 480;
   //gBPP := SDL_BITSPERPIXEL(dispaly.format);
   gBPP := 32;
   {$IFDEF ANDROID}
@@ -134,8 +144,8 @@ begin
   if SDL_GetDesktopDisplayMode(0, @display) = 0 then
   begin
   {$IFDEF ANDROID}
-    gScreenWidth := display.w;
-    gScreenHeight := display.h;
+    gWinSizeX := display.w;
+    gWinSizeY := display.h;
   {$ELSE}
     (* Window must be smaller than display *)
     closest.w := display.w;
@@ -157,8 +167,8 @@ begin
       SDL_GetClosestDisplayMode(0, @target, @closest);
       Dec(percentage);
     end;
-    gScreenWidth := closest.w;
-    gScreenHeight := closest.h;
+    gWinSizeX := closest.w;
+    gWinSizeY := closest.h;
     //gBPP := SDL_BITSPERPIXEL(closest.format); (* Resolution list didn't work for some reason *)
   {$ENDIF}
   end
@@ -171,21 +181,31 @@ begin
   gVSync := True;
   gTextureFilter := True;
   glLegacyNPOT := False;
-  e_LogWriteLn('g_Options_SetDefaultVideo: w = ' + IntToStr(gScreenWidth) + ' h = ' + IntToStr(gScreenHeight));
+  gRC_Width := gWinSizeX;
+  gRC_Height := gWinSizeY;
+  gRC_FullScreen := gFullScreen;
+  gRC_Maximized := gWinMaximized;
+  e_LogWriteLn('g_Options_SetDefaultVideo: w = ' + IntToStr(gWinSizeX) + ' h = ' + IntToStr(gWinSizeY));
   g_Console_ResetBinds;
 end;
 {$ELSE}
 procedure g_Options_SetDefaultVideo;
 begin
-  gScreenWidth := 640;
-  gScreenHeight := 480;
+  gWinSizeX := 640;
+  gWinSizeY := 480;
   gBPP := 32;
   gFullScreen := False;
   gWinMaximized := False;
   gVSync := True;
   gTextureFilter := True;
   glLegacyNPOT := False;
-  e_LogWriteLn('g_Options_SetDefaultVideo: w = ' + IntToStr(gScreenWidth) + ' h = ' + IntToStr(gScreenHeight));
+  gScreenWidth := gWinSizeX;
+  gScreenHeight := gWinSizeY;
+  gRC_Width := gWinSizeX;
+  gRC_Height := gWinSizeY;
+  gRC_FullScreen := gFullScreen;
+  gRC_Maximized := gWinMaximized;
+  e_LogWriteLn('g_Options_SetDefaultVideo: w = ' + IntToStr(gWinSizeX) + ' h = ' + IntToStr(gWinSizeY));
   g_Console_ResetBinds;
 end;
 {$ENDIF}
@@ -256,6 +276,7 @@ begin
   gDefaultMegawadStart := DF_Default_Megawad_Start;
   gBerserkAutoswitch := True;
   g_dbg_scale := 1.0;
+  gSaveStats := False;
 
   gAskLanguage := True;
   gLanguage := LANGUAGE_ENGLISH;
@@ -272,6 +293,9 @@ begin
   gcWeaponStay := False;
   gcMonsters := False;
   gcBotsVS := 'Everybody';
+  gcDeathmatchKeys := True;
+  gcRespawnItems := True;
+  gcSpawnInvul := 0;
 
   (* section GameplayNetwork *)
   gnMap := '';
@@ -285,6 +309,9 @@ begin
   gnWeaponStay := False;
   gnMonsters := False;
   gnBotsVS := 'Everybody';
+  gnDeathmatchKeys := True;
+  gnRespawnItems := True;
+  gnSpawnInvul := 0;
 
   (* section MasterServer *)
   NetSlistIP := 'mpms.doom2d.org';
@@ -399,6 +426,9 @@ begin
   ReadBoolean(gcWeaponStay, 'WeaponStay');
   ReadBoolean(gcMonsters, 'Monsters');
   ReadString(gcBotsVS, 'BotsVS');
+  ReadBoolean(gcDeathmatchKeys, 'DeathmatchKeys');
+  ReadBoolean(gcRespawnItems, 'RespawnItems');
+  ReadInteger(gcSpawnInvul, 'SpawnInvul');
 
   with gGameSettings do
   begin
@@ -426,6 +456,10 @@ begin
       Options := Options or GAME_OPTION_BOTVSPLAYER;
     if gcBotsVS = 'Monsters' then
       Options := Options or GAME_OPTION_BOTVSMONSTER;
+    if gcDeathmatchKeys then
+      Options := Options or GAME_OPTION_DMKEYS;
+    if gcRespawnItems then
+      Options := Options or GAME_OPTION_RESPAWNITEMS;
   end;
 
   section := 'GameplayNetwork';
@@ -440,6 +474,9 @@ begin
   ReadBoolean(gnWeaponStay, 'WeaponStay');
   ReadBoolean(gnMonsters, 'Monsters');
   ReadString(gnBotsVS, 'BotsVS');
+  ReadBoolean(gnDeathmatchKeys, 'DeathmatchKeys');
+  ReadBoolean(gnRespawnItems, 'RespawnItems');
+  ReadInteger(gnSpawnInvul, 'SpawnInvul');
 
   section := 'MasterServer';
   ReadString(NetSlistIP, 'IP');
@@ -510,6 +547,9 @@ begin
   config.WriteBool('GameplayCustom', 'WeaponStay', gcWeaponStay);
   config.WriteBool('GameplayCustom', 'Monsters', gcMonsters);
   config.WriteStr ('GameplayCustom', 'BotsVS', gcBotsVS);
+  config.WriteBool('GameplayCustom', 'DeathmatchKeys', gcDeathmatchKeys);
+  config.WriteBool('GameplayCustom', 'RespawnItems', gcRespawnItems);
+  config.WriteInt ('GameplayCustom', 'SpawnInvul', gcSpawnInvul);
 
   config.WriteStr ('GameplayNetwork', 'Map', gnMap);
   config.WriteStr ('GameplayNetwork', 'GameMode', gnGameMode);
@@ -522,6 +562,9 @@ begin
   config.WriteBool('GameplayNetwork', 'WeaponStay', gnWeaponStay);
   config.WriteBool('GameplayNetwork', 'Monsters', gnMonsters);
   config.WriteStr ('GameplayNetwork', 'BotsVS', gnBotsVS);
+  config.WriteBool('GameplayNetwork', 'DeathmatchKeys', gnDeathmatchKeys);
+  config.WriteBool('GameplayNetwork', 'RespawnItems', gnRespawnItems);
+  config.WriteInt ('GameplayNetwork', 'SpawnInvul', gnSpawnInvul);
 
   config.WriteStr('MasterServer', 'IP', NetSlistIP);
   config.WriteInt('MasterServer', 'Port', NetSlistPort);
@@ -568,6 +611,9 @@ begin
   config.WriteBool('GameplayCustom', 'WeaponStay', gcWeaponStay);
   config.WriteBool('GameplayCustom', 'Monsters', gcMonsters);
   config.WriteStr ('GameplayCustom', 'BotsVS', gcBotsVS);
+  config.WriteBool('GameplayCustom', 'DeathmatchKeys', gcDeathmatchKeys);
+  config.WriteBool('GameplayCustom', 'RespawnItems', gcRespawnItems);
+  config.WriteInt ('GameplayCustom', 'SpawnInvul', gcSpawnInvul);
 
   config.SaveFile(FileName);
   config.Free();
@@ -592,6 +638,9 @@ begin
   config.WriteBool('GameplayNetwork', 'WeaponStay', gnWeaponStay);
   config.WriteBool('GameplayNetwork', 'Monsters', gnMonsters);
   config.WriteStr ('GameplayNetwork', 'BotsVS', gnBotsVS);
+  config.WriteBool('GameplayNetwork', 'DeathmatchKeys', gnDeathmatchKeys);
+  config.WriteBool('GameplayNetwork', 'RespawnItems', gnRespawnItems);
+  config.WriteInt ('GameplayNetwork', 'SpawnInvul', gnSpawnInvul);
 
   config.SaveFile(FileName);
   config.Free();
@@ -642,7 +691,7 @@ begin
         gRC_Width := Max(1, gRC_Width);
         gRC_Height := Max(1, gRC_Height);
         gBPP := Max(1, gBPP);
-        if sys_SetDisplayMode(gRC_Width, gRC_Height, gBPP, gRC_FullScreen) = True then
+        if sys_SetDisplayMode(gRC_Width, gRC_Height, gBPP, gRC_FullScreen, gRC_Maximized) = True then
           e_LogWriteln('resolution changed')
         else
           e_LogWriteln('resolution not changed')
@@ -766,6 +815,7 @@ initialization
   conRegVar('r_vsync', @gVSync, '', '');
   conRegVar('r_texfilter', @gTextureFilter, '', '');
   conRegVar('r_npot', @glNPOTOverride, '', '');
+  conRegVar('r_fbo', @glRenderToFBO, '', '');
 
   (* Sound *)
   conRegVar('s_nosound', @gNoSound, '', '');
@@ -796,5 +846,6 @@ initialization
   conRegVar('sfs_fastmode', @wadoptFast, '', '');
   conRegVar('g_fast_screenshots', @e_FastScreenshots, '', '');
   conRegVar('g_default_megawad', @gDefaultMegawadStart, '', '');
-
+  conRegVar('g_save_stats', @gSaveStats, '', '');
+  conRegVar('g_screenshot_stats', @gScreenshotStats, '', '');
 end.