X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_options.pas;h=3d67ec0bdc9a953a28fc792e03c950eea7315328;hb=e1c1f7de2d4d90cedb74704518844133b936ff97;hp=b308b04304e9d013507137caee35eb35ccb0791f;hpb=ac201b02f10ef558087d50f6b03b4519ab567558;p=d2df-sdl.git diff --git a/src/game/g_options.pas b/src/game/g_options.pas index b308b04..3d67ec0 100644 --- a/src/game/g_options.pas +++ b/src/game/g_options.pas @@ -1,10 +1,25 @@ -{$MODE DELPHI} +(* 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 + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + *) +{$INCLUDE ../shared/a_modes.inc} unit g_options; interface uses - g_language; + g_language, g_weapons; type TPlayerControl = record @@ -17,6 +32,20 @@ type KeyNextWeapon: Word; KeyPrevWeapon: Word; KeyOpen: Word; + KeyStrafe: Word; + KeyWeapon: array [WP_FIRST..WP_LAST] of Word; + + KeyRight2: Word; + KeyLeft2: Word; + KeyUp2: Word; + KeyDown2: Word; + KeyFire2: Word; + KeyJump2: Word; + KeyNextWeapon2: Word; + KeyPrevWeapon2: Word; + KeyOpen2: Word; + KeyStrafe2: Word; + KeyWeapon2: array [WP_FIRST..WP_LAST] of Word; end; TGameControls = record @@ -42,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; @@ -97,13 +128,15 @@ 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_items, GL, GLExt; + 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(); var @@ -114,6 +147,7 @@ begin gMuteWhenInactive := False; gAnnouncer := ANNOUNCE_MEPLUS; gSoundEffectsDF := True; + gUseChatSounds := True; g_GFX_SetMax(2000); g_Gibs_SetMax(150); g_Corpses_SetMax(20); @@ -150,6 +184,22 @@ begin KeyNextWeapon := 73; KeyPrevWeapon := 71; KeyOpen := 54; + KeyStrafe := 0; + for i := 0 to High(KeyWeapon) do + KeyWeapon[i] := 0; + + KeyRight2 := 0; + KeyLeft2 := 0; + KeyUp2 := 0; + KeyDown2 := 0; + KeyFire2 := 0; + KeyJump2 := 0; + KeyNextWeapon2 := 0; + KeyPrevWeapon2 := 0; + KeyOpen2 := 0; + KeyStrafe2 := 0; + for i := 0 to High(KeyWeapon2) do + KeyWeapon2[i] := 0; end; with gGameControls.P2Control do @@ -163,6 +213,22 @@ begin KeyNextWeapon := 19; KeyPrevWeapon := 17; KeyOpen := 58; + KeyStrafe := 0; + for i := 0 to High(KeyWeapon) do + KeyWeapon[i] := 0; + + KeyRight2 := 0; + KeyLeft2 := 0; + KeyUp2 := 0; + KeyDown2 := 0; + KeyFire2 := 0; + KeyJump2 := 0; + KeyNextWeapon2 := 0; + KeyPrevWeapon2 := 0; + KeyOpen2 := 0; + KeyStrafe2 := 0; + for i := 0 to High(KeyWeapon2) do + KeyWeapon2[i] := 0; end; with gPlayer1Settings do @@ -186,6 +252,7 @@ begin end; NetUseMaster := True; + NetForwardPorts := False; g_Net_Slist_Set('mpms.doom2d.org', 25665); end; @@ -196,11 +263,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: @@ -226,12 +293,12 @@ begin gScreenHeight := config.ReadInt('Video', 'ScreenHeight', 600); if gScreenHeight < 480 then gScreenHeight := 480; - gWinRealPosX := config.ReadInt('Video', 'WinPosX', 0); + gWinRealPosX := config.ReadInt('Video', 'WinPosX', 60); if gWinRealPosX < 0 then - gWinRealPosX := 0; - gWinRealPosY := config.ReadInt('Video', 'WinPosY', 0); + gWinRealPosX := 60; + gWinRealPosY := config.ReadInt('Video', 'WinPosY', 60); if gWinRealPosY < 0 then - gWinRealPosY := 0; + gWinRealPosY := 60; gFullScreen := config.ReadBool('Video', 'Fullscreen', False); gWinMaximized := config.ReadBool('Video', 'Maximized', False); gBPP := config.ReadInt('Video', 'BPP', 32); @@ -247,6 +314,7 @@ begin gMuteWhenInactive := config.ReadBool('Sound', 'MuteInactive', False); gAnnouncer := Min(Max(config.ReadInt('Sound', 'Announcer', ANNOUNCE_MEPLUS), ANNOUNCE_NONE), ANNOUNCE_ALL); gSoundEffectsDF := config.ReadBool('Sound', 'SoundEffectsDF', True); + gUseChatSounds := config.ReadBool('Sound', 'ChatSounds', True); gsSDLSampleRate := Min(Max(config.ReadInt('Sound', 'SDLSampleRate', 44100), 11025), 96000); gsSDLBufferSize := Min(Max(config.ReadInt('Sound', 'SDLBufferSize', 2048), 64), 16384); @@ -269,6 +337,22 @@ begin KeyNextWeapon := ReadInt('Player1', 'KeyNextWeapon', 19); 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); + KeyUp2 := ReadInt('Player1', 'KeyUp2', 0); + KeyDown2 := ReadInt('Player1', 'KeyDown2', 0); + KeyFire2 := ReadInt('Player1', 'KeyFire2', 0); + KeyJump2 := ReadInt('Player1', 'KeyJump2', 0); + KeyNextWeapon2 := ReadInt('Player1', 'KeyNextWeapon2', 0); + 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 @@ -294,6 +378,22 @@ begin KeyNextWeapon := ReadInt('Player2', 'KeyNextWeapon', 73); 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); + KeyUp2 := ReadInt('Player2', 'KeyUp2', 0); + KeyDown2 := ReadInt('Player2', 'KeyDown2', 0); + KeyFire2 := ReadInt('Player2', 'KeyFire2', 0); + KeyJump2 := ReadInt('Player2', 'KeyJump2', 0); + KeyNextWeapon2 := ReadInt('Player2', 'KeyNextWeapon2', 0); + 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 @@ -335,7 +435,12 @@ begin gRevertPlayers := config.ReadBool('Game', 'RevertPlayers', False); gChatBubble := Min(Max(config.ReadInt('Game', 'ChatBubble', 4), 0), 4); gSFSDebug := config.ReadBool('Game', 'SFSDebug', False); + wadoptDebug := gSFSDebug; gSFSFastMode := config.ReadBool('Game', 'SFSFastMode', False); + wadoptFast := gSFSFastMode; + e_FastScreenshots := config.ReadBool('Game', 'FastScreenshots', True); + gDefaultMegawadStart := config.ReadStr('Game', 'DefaultMegawadStart', DF_Default_Megawad_Start); + gBerserkAutoswitch := config.ReadBool('Game', 'BerserkAutoswitching', True); // Ãåéìïëåé â ñâîåé èãðå gcMap := config.ReadStr('GameplayCustom', 'Map', ''); @@ -406,6 +511,7 @@ begin NetUpdateRate := Max(0, config.ReadInt('Server', 'UpdateInterval', 0)); NetRelupdRate := Max(0, config.ReadInt('Server', 'ReliableUpdateInterval', 18)); NetMasterRate := Max(1, config.ReadInt('Server', 'MasterSyncInterval', 60000)); + NetForwardPorts := config.ReadBool('Server', 'ForwardPorts', False); // Êëèåíò NetInterpLevel := Max(0, config.ReadInt('Client', 'InterpolationSteps', 2)); @@ -427,10 +533,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); @@ -438,7 +541,7 @@ var config: TConfig; i: Integer; begin - e_WriteLog('Writing config', MSG_NOTIFY); + e_WriteLog('Writing config', TMsgType.Notify); config := TConfig.CreateFile(FileName); @@ -460,6 +563,7 @@ begin config.WriteBool('Sound', 'MuteInactive', gMuteWhenInactive); config.WriteInt('Sound', 'Announcer', gAnnouncer); config.WriteBool('Sound', 'SoundEffectsDF', gSoundEffectsDF); + config.WriteBool('Sound', 'ChatSounds', gUseChatSounds); config.WriteInt('Sound', 'SDLSampleRate', gsSDLSampleRate); config.WriteInt('Sound', 'SDLBufferSize', gsSDLBufferSize); @@ -482,6 +586,22 @@ begin WriteInt('Player1', 'KeyNextWeapon', KeyNextWeapon); 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); + WriteInt('Player1', 'KeyUp2', KeyUp2); + WriteInt('Player1', 'KeyDown2', KeyDown2); + WriteInt('Player1', 'KeyFire2', KeyFire2); + WriteInt('Player1', 'KeyJump2', KeyJump2); + WriteInt('Player1', 'KeyNextWeapon2', KeyNextWeapon2); + 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); @@ -502,6 +622,22 @@ begin WriteInt('Player2', 'KeyNextWeapon', KeyNextWeapon); 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); + WriteInt('Player2', 'KeyUp2', KeyUp2); + WriteInt('Player2', 'KeyDown2', KeyDown2); + WriteInt('Player2', 'KeyFire2', KeyFire2); + WriteInt('Player2', 'KeyJump2', KeyJump2); + WriteInt('Player2', 'KeyNextWeapon2', KeyNextWeapon2); + 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); @@ -539,6 +675,9 @@ begin config.WriteInt('Game', 'ChatBubble', gChatBubble); 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); @@ -574,6 +713,7 @@ begin config.WriteBool('Server', 'RCON', NetAllowRCON); config.WriteStr ('Server', 'RCONPassword', NetRCONPassword); config.WriteBool('Server', 'SyncWithMaster', NetUseMaster); + config.WriteBool('Server', 'ForwardPorts', NetForwardPorts); config.WriteInt ('Server', 'UpdateInterval', NetUpdateRate); config.WriteInt ('Server', 'ReliableUpdateInterval', NetRelupdRate); config.WriteInt ('Server', 'MasterSyncInterval', NetMasterRate); @@ -592,7 +732,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); @@ -605,7 +745,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); @@ -619,6 +759,7 @@ begin sW := gScreenWidth; sH := gScreenHeight; end; + e_LogWritefln(' (ws=%dx%d) (ss=%dx%d)', [gWinSizeX, gWinSizeY, gScreenWidth, gScreenHeight]); config.WriteInt('Video', 'ScreenWidth', sW); config.WriteInt('Video', 'ScreenHeight', sH); @@ -635,7 +776,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); @@ -659,7 +800,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); @@ -683,7 +824,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); @@ -692,6 +833,7 @@ begin config.WriteInt ('Server', 'Port', NetPort); config.WriteInt ('Server', 'MaxClients', NetMaxClients); config.WriteBool('Server', 'SyncWithMaster', NetUseMaster); + config.WriteBool('Server', 'ForwardPorts', NetForwardPorts); config.SaveFile(FileName); config.Free(); @@ -701,7 +843,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);