DEADSOFTWARE

Cosmetic: DooM 2D:Forever -> Doom 2D: Forever
[d2df-sdl.git] / src / game / g_options.pas
index 2ad3e6e497fd99f58d1b45c16d61a0b93dd83c9f..18debdd9a80fc0ad0f58b628d92b5cd052dd6289 100644 (file)
@@ -1,4 +1,4 @@
-(* Copyright (C)  DooM 2D:Forever Developers
+(* Copyright (C)  Doom 2D: Forever Developers
  *
  * 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
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  *)
-{$MODE DELPHI}
+{$INCLUDE ../shared/a_modes.inc}
 unit g_options;
 
 interface
 
 uses
-  g_language;
+  g_language, g_weapons;
 
 type
   TPlayerControl = record
@@ -33,6 +33,7 @@ type
     KeyPrevWeapon: Word;
     KeyOpen:       Word;
     KeyStrafe:     Word;
+    KeyWeapon:     array [WP_FIRST..WP_LAST] of Word;
 
     KeyRight2:      Word;
     KeyLeft2:       Word;
@@ -44,6 +45,7 @@ type
     KeyPrevWeapon2: Word;
     KeyOpen2:       Word;
     KeyStrafe2:     Word;
+    KeyWeapon2:     array [WP_FIRST..WP_LAST] of Word;
   end;
 
   TGameControls = record
@@ -69,6 +71,8 @@ procedure g_Options_Write_Gameplay_Net(FileName: String);
 procedure g_Options_Write_Net_Server(FileName: String);
 procedure g_Options_Write_Net_Client(FileName: String);
 
+const DF_Default_Megawad_Start = 'megawads/DOOM2D.WAD:\MAP01';
+
 var
   gGameControls: TControls;
   gScreenWidth: Word          = 800;
@@ -124,12 +128,14 @@ var
   gsSDLBufferSize: Integer    = 2048;
   gSFSDebug: Boolean          = False;
   gSFSFastMode: Boolean       = False;
+  gDefaultMegawadStart: AnsiString = DF_Default_Megawad_Start;
+  gBerserkAutoswitch: Boolean = True;
 
 implementation
 
 uses
   e_log, e_input, g_window, g_sound, g_gfx, g_player, Math,
-  g_map, g_net, g_netmaster, SysUtils, CONFIG, g_game, g_main, e_textures,
+  g_map, g_net, g_netmaster, SysUtils, CONFIG, g_game, g_main, e_texture,
   g_items, GL, GLExt, wadreader, e_graphics;
 
 procedure g_Options_SetDefault();
@@ -178,6 +184,8 @@ begin
     KeyPrevWeapon := 71;
     KeyOpen := 54;
     KeyStrafe := 0;
+    for i := 0 to High(KeyWeapon) do
+      KeyWeapon[i] := 0;
 
     KeyRight2 := 0;
     KeyLeft2 := 0;
@@ -189,6 +197,8 @@ begin
     KeyPrevWeapon2 := 0;
     KeyOpen2 := 0;
     KeyStrafe2 := 0;
+    for i := 0 to High(KeyWeapon2) do
+      KeyWeapon2[i] := 0;
   end;
 
   with gGameControls.P2Control do
@@ -203,6 +213,8 @@ begin
     KeyPrevWeapon := 17;
     KeyOpen := 58;
     KeyStrafe := 0;
+    for i := 0 to High(KeyWeapon) do
+      KeyWeapon[i] := 0;
 
     KeyRight2 := 0;
     KeyLeft2 := 0;
@@ -214,6 +226,8 @@ begin
     KeyPrevWeapon2 := 0;
     KeyOpen2 := 0;
     KeyStrafe2 := 0;
+    for i := 0 to High(KeyWeapon2) do
+      KeyWeapon2[i] := 0;
   end;
 
   with gPlayer1Settings do
@@ -247,11 +261,11 @@ var
   i: Integer;
 begin
   gAskLanguage := True;
-  e_WriteLog('Reading config', MSG_NOTIFY);
+  e_WriteLog('Reading config', TMsgType.Notify);
 
   if not FileExists(FileName) then
   begin
-    e_WriteLog('Config file '+FileName+' not found', MSG_WARNING);
+    e_WriteLog('Config file '+FileName+' not found', TMsgType.Warning);
     g_Options_SetDefault();
 
   // Default video options:
@@ -321,6 +335,8 @@ begin
     KeyPrevWeapon := ReadInt('Player1', 'KeyPrevWeapon', 17);
     KeyOpen := ReadInt('Player1', 'KeyOpen', 58);
     KeyStrafe := ReadInt('Player1', 'KeyStrafe', 0);
+    for i := 0 to High(KeyWeapon) do
+      KeyWeapon[i] := ReadInt('Player1', 'KeyWeapon' + IntToStr(i), 0);
 
     KeyRight2 := ReadInt('Player1', 'KeyRight2', 0);
     KeyLeft2 := ReadInt('Player1', 'KeyLeft2', 0);
@@ -332,6 +348,8 @@ begin
     KeyPrevWeapon2 := ReadInt('Player1', 'KeyPrevWeapon2', 0);
     KeyOpen2 := ReadInt('Player1', 'KeyOpen2', 0);
     KeyStrafe2 := ReadInt('Player1', 'KeyStrafe2', 0);
+    for i := 0 to High(KeyWeapon2) do
+      KeyWeapon2[i] := ReadInt('Player1', 'KeyWeapon2' + IntToStr(i), 0);
   end;
 
   with gPlayer1Settings, config do
@@ -358,6 +376,8 @@ begin
     KeyPrevWeapon := ReadInt('Player2', 'KeyPrevWeapon', 71);
     KeyOpen := ReadInt('Player2', 'KeyOpen', 54);
     KeyStrafe := ReadInt('Player2', 'KeyStrafe', 0);
+    for i := 0 to High(KeyWeapon) do
+      KeyWeapon[i] := ReadInt('Player2', 'KeyWeapon' + IntToStr(i), 0);
 
     KeyRight2 := ReadInt('Player2', 'KeyRight2', 0);
     KeyLeft2 := ReadInt('Player2', 'KeyLeft2', 0);
@@ -369,6 +389,8 @@ begin
     KeyPrevWeapon2 := ReadInt('Player2', 'KeyPrevWeapon2', 0);
     KeyOpen2 := ReadInt('Player2', 'KeyOpen2', 0);
     KeyStrafe2 := ReadInt('Player2', 'KeyStrafe2', 0);
+    for i := 0 to High(KeyWeapon2) do
+      KeyWeapon2[i] := ReadInt('Player2', 'KeyWeapon2' + IntToStr(i), 0);
   end;
 
   with gPlayer2Settings, config do
@@ -414,6 +436,8 @@ begin
   gSFSFastMode := config.ReadBool('Game', 'SFSFastMode', False);
   wadoptFast := gSFSFastMode;
   e_FastScreenshots := config.ReadBool('Game', 'FastScreenshots', True);
+  gDefaultMegawadStart := config.ReadStr('Game', 'DefaultMegawadStart', 'megawads/DOOM2D.WAD:\MAP01');
+  gBerserkAutoswitch := config.ReadBool('Game', 'BerserkAutoswitching', True);
 
 // Ãåéìïëåé â ñâîåé èãðå
   gcMap := config.ReadStr('GameplayCustom', 'Map', '');
@@ -505,10 +529,7 @@ begin
 
   config.Free();
 
-  if gTextureFilter then
-    TEXTUREFILTER := GL_LINEAR
-  else
-    TEXTUREFILTER := GL_NEAREST;
+  //if gTextureFilter then TEXTUREFILTER := GL_LINEAR else TEXTUREFILTER := GL_NEAREST;
 end;
 
 procedure g_Options_Write(FileName: String);
@@ -516,7 +537,7 @@ var
   config: TConfig;
   i: Integer;
 begin
-  e_WriteLog('Writing config', MSG_NOTIFY);
+  e_WriteLog('Writing config', TMsgType.Notify);
 
   config := TConfig.CreateFile(FileName);
 
@@ -561,6 +582,8 @@ begin
     WriteInt('Player1', 'KeyPrevWeapon', KeyPrevWeapon);
     WriteInt('Player1', 'KeyOpen', KeyOpen);
     WriteInt('Player1', 'KeyStrafe', KeyStrafe);
+    for i := 0 to High(KeyWeapon) do
+      WriteInt('Player1', 'KeyWeapon' + IntToStr(i), KeyWeapon[i]);
 
     WriteInt('Player1', 'KeyRight2', KeyRight2);
     WriteInt('Player1', 'KeyLeft2', KeyLeft2);
@@ -572,6 +595,8 @@ begin
     WriteInt('Player1', 'KeyPrevWeapon2', KeyPrevWeapon2);
     WriteInt('Player1', 'KeyOpen2', KeyOpen2);
     WriteInt('Player1', 'KeyStrafe2', KeyStrafe2);
+    for i := 0 to High(KeyWeapon2) do
+      WriteInt('Player1', 'KeyWeapon2' + IntToStr(i), KeyWeapon2[i]);
 
     WriteStr('Player1', 'Name', Name);
     WriteStr('Player1', 'model', Model);
@@ -593,6 +618,8 @@ begin
     WriteInt('Player2', 'KeyPrevWeapon', KeyPrevWeapon);
     WriteInt('Player2', 'KeyOpen', KeyOpen);
     WriteInt('Player2', 'KeyStrafe', KeyStrafe);
+    for i := 0 to High(KeyWeapon) do
+      WriteInt('Player2', 'KeyWeapon' + IntToStr(i), KeyWeapon[i]);
 
     WriteInt('Player2', 'KeyRight2', KeyRight2);
     WriteInt('Player2', 'KeyLeft2', KeyLeft2);
@@ -604,6 +631,8 @@ begin
     WriteInt('Player2', 'KeyPrevWeapon2', KeyPrevWeapon2);
     WriteInt('Player2', 'KeyOpen2', KeyOpen2);
     WriteInt('Player2', 'KeyStrafe2', KeyStrafe2);
+    for i := 0 to High(KeyWeapon2) do
+      WriteInt('Player2', 'KeyWeapon2' + IntToStr(i), KeyWeapon2[i]);
 
     WriteStr('Player2', 'Name', Name);
     WriteStr('Player2', 'model', Model);
@@ -642,6 +671,8 @@ begin
   config.WriteBool('Game', 'SFSDebug', gSFSDebug);
   config.WriteBool('Game', 'SFSFastMode', gSFSFastMode);
   config.WriteBool('Game', 'FastScreenshots', e_FastScreenshots);
+  config.WriteStr('Game', 'DefaultMegawadStart', gDefaultMegawadStart);
+  config.WriteBool('Game', 'BerserkAutoswitching', gBerserkAutoswitch);
 
   config.WriteStr ('GameplayCustom', 'Map', gcMap);
   config.WriteStr ('GameplayCustom', 'GameMode', gcGameMode);
@@ -695,7 +726,7 @@ procedure g_Options_Write_Language(FileName: String);
 var
   config: TConfig;
 begin
-  e_WriteLog('Writing language config', MSG_NOTIFY);
+  e_WriteLog('Writing language config', TMsgType.Notify);
 
   config := TConfig.CreateFile(FileName);
   config.WriteStr('Game', 'Language', gLanguage);
@@ -708,7 +739,7 @@ var
   config: TConfig;
   sW, sH: Integer;
 begin
-  e_WriteLog('Writing resolution to config', MSG_NOTIFY);
+  e_WriteLog('Writing resolution to config', TMsgType.Notify);
 
   config := TConfig.CreateFile(FileName);
 
@@ -738,7 +769,7 @@ procedure g_Options_Write_Gameplay_Custom(FileName: String);
 var
   config: TConfig;
 begin
-  e_WriteLog('Writing custom gameplay config', MSG_NOTIFY);
+  e_WriteLog('Writing custom gameplay config', TMsgType.Notify);
 
   config := TConfig.CreateFile(FileName);
 
@@ -762,7 +793,7 @@ procedure g_Options_Write_Gameplay_Net(FileName: String);
 var
   config: TConfig;
 begin
-  e_WriteLog('Writing network gameplay config', MSG_NOTIFY);
+  e_WriteLog('Writing network gameplay config', TMsgType.Notify);
 
   config := TConfig.CreateFile(FileName);
 
@@ -786,7 +817,7 @@ procedure g_Options_Write_Net_Server(FileName: String);
 var
   config: TConfig;
 begin
-  e_WriteLog('Writing server config', MSG_NOTIFY);
+  e_WriteLog('Writing server config', TMsgType.Notify);
 
   config := TConfig.CreateFile(FileName);
 
@@ -804,7 +835,7 @@ procedure g_Options_Write_Net_Client(FileName: String);
 var
   config: TConfig;
 begin
-  e_WriteLog('Writing client config', MSG_NOTIFY);
+  e_WriteLog('Writing client config', TMsgType.Notify);
 
   config := TConfig.CreateFile(FileName);