From: DeaDDooMER Date: Fri, 8 Nov 2019 14:14:55 +0000 (+0300) Subject: move video, sound and language options to dfconfig.cfg X-Git-Url: http://deadsoftware.ru/gitweb?a=commitdiff_plain;h=9b4492224e2e59560931496e925333bdbe6f2b0e;p=d2df-sdl.git move video, sound and language options to dfconfig.cfg --- diff --git a/src/game/g_basic.pas b/src/game/g_basic.pas index afe112e..7df493f 100644 --- a/src/game/g_basic.pas +++ b/src/game/g_basic.pas @@ -676,7 +676,7 @@ function GetLines (Text: string; FontID: DWORD; MaxWidth: Word): SSArray; begin result := nil; lines := 0; j := 1; i := 1; len := Length(Text); - e_LogWritefln('GetLines @%s len=%s [%s]', [MaxWidth, len, Text]); + // e_LogWritefln('GetLines @%s len=%s [%s]', [MaxWidth, len, Text]); while j <= len do begin (* --- Get longest possible sequence --- *) @@ -689,7 +689,7 @@ begin (* --- Add line --- *) SetLength(result, lines + 1); result[lines] := GetLine(j, i); - e_LogWritefln(' -> (%s:%s::%s) [%s]', [j, i, GetWidth(j, i), result[lines]]); + // e_LogWritefln(' -> (%s:%s::%s) [%s]', [j, i, GetWidth(j, i), result[lines]]); Inc(lines); (* --- Skip spaces --- *) while (i <= len) and (text[i] = ' ') do Inc(i); diff --git a/src/game/g_console.pas b/src/game/g_console.pas index 288eb54..3553001 100644 --- a/src/game/g_console.pas +++ b/src/game/g_console.pas @@ -860,6 +860,9 @@ begin AddCommand('segfault', segfault, 'make segfault'); + AddCommand('r_reset', g_Options_Commands); + AddCommand('g_language', g_Options_Commands); + AddCommand('bind', BindCommands); AddCommand('bindlist', BindCommands); AddCommand('unbind', BindCommands); @@ -1957,6 +1960,11 @@ begin end end end; + if gAskLanguage then + WriteLn(f, 'g_language ask') + else + WriteLn(f, 'g_language ', gLanguage); + WriteLn(f, 'r_reset'); CloseFile(f) end; @@ -1970,12 +1978,13 @@ begin end end; -initialization +procedure Init; + var i: Integer; +begin conRegVar('chat_at_top', @ChatTop, 'draw chat at top border', 'draw chat at top border'); conRegVar('console_height', @ConsoleHeight, 0.0, 1.0, 'set console size', 'set console size'); conRegVar('console_trans', @ConsoleTrans, 0.0, 1.0, 'set console transparency', 'set console transparency'); conRegVar('console_step', @ConsoleStep, 0.0, 1.0, 'set console animation speed', 'set console animation speed'); - conRegVar('d_eres', @debug_e_res, '', ''); {$IFDEF ANDROID} ChatTop := True; ConsoleHeight := 0.35; @@ -1985,4 +1994,11 @@ initialization {$ENDIF} ConsoleTrans := 0.1; ConsoleStep := 0.07; + conRegVar('d_eres', @debug_e_res, '', ''); + for i := 1 to e_MaxJoys do + conRegVar('joy' + IntToStr(i) + '_deadzone', @e_JoystickDeadzones[i - 1], '', '') +end; + +initialization + Init end. diff --git a/src/game/g_game.pas b/src/game/g_game.pas index 8366787..27dcb90 100644 --- a/src/game/g_game.pas +++ b/src/game/g_game.pas @@ -102,7 +102,6 @@ procedure g_Game_Restart(); procedure g_Game_RestartLevel(); procedure g_Game_RestartRound(NoMapRestart: Boolean = False); function g_Game_ClientWAD (NewWAD: String; const WHash: TMD5Digest): AnsiString; -procedure g_Game_SaveOptions(); function g_Game_StartMap(asMegawad: Boolean; Map: String; Force: Boolean = False; const oldMapPath: AnsiString=''): Boolean; procedure g_Game_ChangeMap(const MapPath: String); procedure g_Game_ExitLevel(const Map: AnsiString); @@ -238,7 +237,7 @@ var gHearPoint1, gHearPoint2: THearPoint; gSoundEffectsDF: Boolean = False; gSoundTriggerTime: Word = 0; - gAnnouncer: Byte = ANNOUNCE_NONE; + gAnnouncer: Integer = ANNOUNCE_NONE; goodsnd: array[0..3] of TPlayableSound; killsnd: array[0..3] of TPlayableSound; hahasnd: array[0..2] of TPlayableSound; @@ -287,12 +286,11 @@ var gMapToDelete: String; gTempDelete: Boolean = False; gLastMap: Boolean = False; - gWinPosX, gWinPosY: Integer; gWinSizeX, gWinSizeY: Integer; gWinFrameX, gWinFrameY, gWinCaption: Integer; gWinActive: Boolean = True; // by default window is active, lol gResolutionChange: Boolean = False; - gRC_Width, gRC_Height: Word; + gRC_Width, gRC_Height: Integer; gRC_FullScreen, gRC_Maximized: Boolean; gLanguageChange: Boolean = False; gDebugMode: Boolean = False; @@ -4106,7 +4104,6 @@ procedure g_Game_Quit(); begin g_Game_StopAllSounds(True); gMusic.Free(); - g_Game_SaveOptions(); g_Game_FreeData(); g_PlayerModel_FreeData(); g_Texture_DeleteAll(); @@ -4781,16 +4778,6 @@ begin e_WriteLog('NET: Connection successful.', TMsgType.Notify); end; -procedure g_Game_SaveOptions; - var s: AnsiString; -begin - s := e_GetWriteableDir(ConfigDirs); - if s <> '' then - g_Options_Write_Video(s + '/' + CONFIG_FILENAME) - else - e_LogWritefln('unable to find or create directory for configs', []); -end; - var lastAsMegaWad: Boolean = false; @@ -5861,8 +5848,6 @@ begin cmd := LowerCase(P[0]); if cmd = 'd_window' then begin - g_Console_Add(Format('gWinPosX = %d, gWinPosY %d', [gWinPosX, gWinPosY])); - g_Console_Add(Format('gWinRealPosX = %d, gWinRealPosY %d', [gWinRealPosX, gWinRealPosY])); g_Console_Add(Format('gScreenWidth = %d, gScreenHeight = %d', [gScreenWidth, gScreenHeight])); g_Console_Add(Format('gWinSizeX = %d, gWinSizeY = %d', [gWinSizeX, gWinSizeY])); g_Console_Add(Format('Frame X = %d, Y = %d, Caption Y = %d', [gWinFrameX, gWinFrameY, gWinCaption])); diff --git a/src/game/g_main.pas b/src/game/g_main.pas index 8142dd8..def9f29 100644 --- a/src/game/g_main.pas +++ b/src/game/g_main.pas @@ -490,20 +490,15 @@ begin e_InitInput; sys_Init; + g_Options_SetDefault; + g_Options_SetDefaultVideo; s := CONFIG_FILENAME; if e_FindResource(ConfigDirs, s) = true then - begin - g_Options_Read(s) - end - else - begin - g_Options_SetDefault; - g_Options_SetDefaultVideo - end; + g_Options_Read(s); + g_Console_SysInit; 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); @@ -572,6 +567,7 @@ begin if assigned(oglDeinitCB) then oglDeinitCB; {$ENDIF} + g_Console_WriteGameConfig; sys_Final; end; diff --git a/src/game/g_menu.pas b/src/game/g_menu.pas index 11dd664..cdf0f13 100644 --- a/src/game/g_menu.pas +++ b/src/game/g_menu.pas @@ -1656,37 +1656,23 @@ begin end; procedure ProcSetRussianLanguage; - var s: AnsiString; begin if gLanguage <> LANGUAGE_RUSSIAN then begin gLanguage := LANGUAGE_RUSSIAN; gLanguageChange := True; gAskLanguage := False; - - s := e_GetWriteableDir(ConfigDirs); - if s <> '' then - g_Options_Write_Language(s + '/' + CONFIG_FILENAME); - - // Ñîõðàíÿåì èçìåíåíèÿ âñåõ íàñòðîåê: ProcApplyOptions(); end; end; procedure ProcSetEnglishLanguage; - var s: AnsiString; begin if gLanguage <> LANGUAGE_ENGLISH then begin gLanguage := LANGUAGE_ENGLISH; gLanguageChange := True; gAskLanguage := False; - - s := e_GetWriteableDir(ConfigDirs); - if s <> '' then - g_Options_Write_Language(s + '/' + CONFIG_FILENAME); - - // Ñîõðàíÿåì èçìåíåíèÿ âñåõ íàñòðîåê: ProcApplyOptions(); end; end; @@ -1922,27 +1908,17 @@ begin end; procedure ProcSetFirstRussianLanguage; - var s: AnsiString; begin gLanguage := LANGUAGE_RUSSIAN; gLanguageChange := True; gAskLanguage := False; - - s := e_GetWriteableDir(ConfigDirs); - if s <> '' then - g_Options_Write_Language(s + '/' + CONFIG_FILENAME) end; procedure ProcSetFirstEnglishLanguage; - var s: AnsiString; begin gLanguage := LANGUAGE_ENGLISH; gLanguageChange := True; gAskLanguage := False; - - s := e_GetWriteableDir(ConfigDirs); - if s <> '' then - g_Options_Write_Language(s + '/' + CONFIG_FILENAME) end; procedure ProcRecallAddress(); diff --git a/src/game/g_options.pas b/src/game/g_options.pas index 7aea70f..41f0e69 100644 --- a/src/game/g_options.pas +++ b/src/game/g_options.pas @@ -18,7 +18,7 @@ unit g_options; interface uses - g_language, g_weapons; + g_language, g_weapons, utils; function GenPlayerName (n: Integer): String; @@ -26,22 +26,18 @@ procedure g_Options_SetDefault; procedure g_Options_SetDefaultVideo; procedure g_Options_Read(FileName: String); procedure g_Options_Write(FileName: String); -procedure g_Options_Write_Language(FileName: String); -procedure g_Options_Write_Video(FileName: String); procedure g_Options_Write_Gameplay_Custom(FileName: String); procedure g_Options_Write_Gameplay_Net(FileName: String); procedure g_Options_Write_Net_Server(FileName: String); procedure g_Options_Write_Net_Client(FileName: String); +procedure g_Options_Commands (p: SSArray); const DF_Default_Megawad_Start = 'megawads/DOOM2D.WAD:\MAP01'; var -// gGameControls: TControls; gScreenWidth: Word; gScreenHeight: Word; - gWinRealPosX: Integer; - gWinRealPosY: Integer; - gBPP: Byte; + gBPP: Integer; gFreq: Byte; gFullscreen: Boolean; gWinMaximized: Boolean; @@ -49,9 +45,9 @@ var glLegacyNPOT: Boolean; gTextureFilter: Boolean; gNoSound: Boolean; - gSoundLevel: Byte; - gMusicLevel: Byte; - gMaxSimSounds: Byte; + gSoundLevel: Integer; + gMusicLevel: Integer; + gMaxSimSounds: Integer; gMuteWhenInactive: Boolean; gAdvCorpses: Boolean; gAdvBlood: Boolean; @@ -103,7 +99,7 @@ uses {$ENDIF} e_log, e_input, g_console, g_window, g_sound, g_gfx, g_player, Math, g_map, g_net, g_netmaster, SysUtils, CONFIG, g_game, g_main, e_texture, - g_items, wadreader, e_graphics, g_touch, envvars; + g_items, wadreader, e_graphics, g_touch, envvars, g_system; var machine: Integer; @@ -173,8 +169,6 @@ begin e_LogWritefln('SDL: Failed to get desktop display mode: %s', [SDL_GetError]) end; (* Must be positioned on primary display *) - gWinRealPosX := SDL_WINDOWPOS_CENTERED; - gWinRealPosY := SDL_WINDOWPOS_CENTERED; gWinMaximized := False; gVSync := True; gTextureFilter := True; @@ -189,8 +183,6 @@ begin gScreenHeight := 480; gBPP := 32; gFullScreen := False; - gWinRealPosX := 0; - gWinRealPosY := 0; gWinMaximized := False; gVSync := True; gTextureFilter := True; @@ -372,31 +364,6 @@ begin config := TConfig.CreateFile(FileName); - section := 'Video'; - ReadInteger(gScreenWidth, 'ScreenWidth', 0); - ReadInteger(gScreenHeight, 'ScreenHeight', 0); - ReadInteger(gWinRealPosX, 'WinPosX', 60); - ReadInteger(gWinRealPosY, 'WinPosY', 60); - ReadBoolean(gFullScreen, 'Fullscreen'); - ReadBoolean(gWinMaximized, 'Maximized'); - ReadInteger(gBPP, 'BPP', 0); - ReadInteger(gFreq, 'Freq', 0); - ReadBoolean(gVSync, 'VSync'); - ReadBoolean(gTextureFilter, 'TextureFilter'); - ReadBoolean(glNPOTOverride, 'LegacyCompatibleForce'); - - section := 'Sound'; - ReadBoolean(gNoSound, 'NoSound'); - ReadInteger(gSoundLevel, 'SoundLevel', 0, 255); - ReadInteger(gMusicLevel, 'MusicLevel', 0, 255); - ReadInteger(gMaxSimSounds, 'MaxSimSounds', 2, 66); - ReadBoolean(gMuteWhenInactive, 'MuteInactive'); - ReadInteger(gAnnouncer, 'Announcer', ANNOUNCE_NONE, ANNOUNCE_ALL); - ReadBoolean(gSoundEffectsDF, 'SoundEffectsDF'); - ReadBoolean(gUseChatSounds, 'ChatSounds'); - ReadInteger(gsSDLSampleRate, 'SDLSampleRate', 11025, 96000); - ReadInteger(gsSDLBufferSize, 'SDLBufferSize', 64, 16384); - section := 'Player1'; with gPlayer1Settings do begin @@ -423,12 +390,6 @@ begin Team := TEAM_RED; end; - section := 'Joysticks'; - for i := 0 to e_MaxJoys - 1 do - begin - ReadInteger(e_JoystickDeadzones[i], 'Deadzone' + IntToStr(i)) - end; - section := 'Game'; ReadInteger(i, 'MaxParticles', 0, 50000); g_GFX_SetMax(i); ReadInteger(i, 'MaxShells', 0, 600); g_Shells_SetMax(i); @@ -458,11 +419,6 @@ begin ReadString(gDefaultMegawadStart, 'DefaultMegawadStart'); ReadBoolean(gBerserkAutoswitch, 'BerserkAutoswitching'); i := Trunc(g_dbg_scale * 100); ReadInteger(i, 'Scale', 100); g_dbg_scale := i / 100; - ReadString(gLanguage, 'Language'); - if (gLanguage = LANGUAGE_RUSSIAN) or (gLanguage = LANGUAGE_ENGLISH) then - gAskLanguage := False - else - gLanguage := LANGUAGE_ENGLISH; section := 'GameplayCustom'; ReadString(gcMap, 'Map'); @@ -550,36 +506,12 @@ begin end; procedure g_Options_Write(FileName: String); -var - config: TConfig; - i: Integer; + var config: TConfig; begin e_WriteLog('Writing config', TMsgType.Notify); config := TConfig.CreateFile(FileName); - config.WriteInt('Video', 'ScreenWidth', gScreenWidth); - config.WriteInt('Video', 'ScreenHeight', gScreenHeight); - config.WriteInt('Video', 'WinPosX', gWinRealPosX); - config.WriteInt('Video', 'WinPosY', gWinRealPosY); - config.WriteBool('Video', 'Fullscreen', gFullScreen); - config.WriteBool('Video', 'Maximized', gWinMaximized); - config.WriteInt('Video', 'BPP', gBPP); - config.WriteBool('Video', 'VSync', gVSync); - config.WriteBool('Video', 'TextureFilter', gTextureFilter); - config.WriteBool('Video', 'LegacyCompatibleForce', glNPOTOverride); - - config.WriteBool('Sound', 'NoSound', gNoSound); - config.WriteInt('Sound', 'SoundLevel', gSoundLevel); - config.WriteInt('Sound', 'MusicLevel', gMusicLevel); - config.WriteInt('Sound', 'MaxSimSounds', gMaxSimSounds); - 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); - with config, gPlayer1Settings do begin WriteStr('Player1', 'Name', Name); @@ -600,9 +532,6 @@ begin WriteInt('Player2', 'team', Team); end; - for i := 0 to e_MaxJoys-1 do - config.WriteInt('Joysticks', 'Deadzone' + IntToStr(i), e_JoystickDeadzones[i]); - with config do case gGibsCount of 0: config.WriteInt('Game', 'GibsCount', 0); @@ -683,53 +612,6 @@ begin config.Free(); end; -procedure g_Options_Write_Language(FileName: String); -var - config: TConfig; -begin - e_WriteLog('Writing language config', TMsgType.Notify); - - config := TConfig.CreateFile(FileName); - config.WriteStr('Game', 'Language', gLanguage); - config.SaveFile(FileName); - config.Free(); -end; - -procedure g_Options_Write_Video(FileName: String); -var - config: TConfig; - sW, sH: Integer; -begin - e_WriteLog('Writing resolution to config', TMsgType.Notify); - - config := TConfig.CreateFile(FileName); - - if gWinMaximized and (not gFullscreen) then - begin - sW := gWinSizeX; - sH := gWinSizeY; - end - else - 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); - config.WriteInt('Video', 'WinPosX', gWinRealPosX); - config.WriteInt('Video', 'WinPosY', gWinRealPosY); - config.WriteBool('Video', 'Fullscreen', gFullscreen); - config.WriteBool('Video', 'Maximized', gWinMaximized); - - config.WriteStr('Player1', 'Name', gPlayer1Settings.Name); - config.WriteStr('Player2', 'Name', gPlayer2Settings.Name); - - config.SaveFile(FileName); - config.Free(); -end; - procedure g_Options_Write_Gameplay_Custom(FileName: String); var config: TConfig; @@ -812,7 +694,76 @@ begin config.Free(); end; +procedure g_Options_Commands (p: SSArray); + var cmd: AnsiString; +begin + cmd := LowerCase(p[0]); + case cmd of + 'r_reset': + begin + sys_EnableVSync(gVSync); + 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 + e_LogWriteln('resolution changed') + else + e_LogWriteln('resolution not changed') + end; + 'g_language': + begin + if Length(p) = 2 then + begin + gAskLanguage := true; + gLanguage := LANGUAGE_ENGLISH; + case LowerCase(p[1]) of + 'english': + begin + gAskLanguage := false; + gLanguage := LANGUAGE_ENGLISH; + end; + 'russian': + begin + gAskLanguage := false; + gLanguage := LANGUAGE_RUSSIAN; + end; + 'ask': + begin + gAskLanguage := true; + gLanguage := LANGUAGE_ENGLISH; + end; + end; + g_Language_Set(gLanguage) + end + end + end; +end; + initialization Randomize; - machine := Random(10000) + machine := Random(10000); + + (* Video *) + conRegVar('r_width', @gRC_Width, '', ''); + conRegVar('r_height', @gRC_Height, '', ''); + conRegVar('r_fullscreen', @gRC_FullScreen, '', ''); + conRegVar('r_maximized', @gRC_Maximized, '', ''); + conRegVar('r_bpp', @gBPP, '', ''); + conRegVar('r_vsync', @gVSync, '', ''); + conRegVar('r_texfilter', @gTextureFilter, '', ''); + conRegVar('r_npot', @glNPOTOverride, '', ''); + + (* Sound *) + conRegVar('s_nosound', @gNoSound, '', ''); + conRegVar('s_soundvolume', @gSoundLevel, '', ''); + conRegVar('s_musicvolume', @gMusicLevel, '', ''); + conRegVar('s_maxsim', @gMaxSimSounds, '', ''); // e_sound_fmod/sdl? + conRegVar('s_muteinactive', @gMuteWhenInactive, '', ''); + conRegVar('s_announcer', @gAnnouncer, '', ''); + conRegVar('s_sfx', @gSoundEffectsDF, '', ''); + conRegVar('s_chatsounds', @gUseChatSounds, '', ''); + {$IFDEF USE_SDLMIXER} + conRegVar('sdl_mixer_samplerate', @gsSDLSampleRate, '', ''); + conRegVar('sdl_mixer_buffersize', @gsSDLBufferSize, '', ''); + {$ENDIF} end. diff --git a/src/game/sdl/g_system.pas b/src/game/sdl/g_system.pas index bdb4add..0146720 100644 --- a/src/game/sdl/g_system.pas +++ b/src/game/sdl/g_system.pas @@ -74,8 +74,6 @@ implementation begin gWinSizeX := w; gWinSizeY := h; - gWinRealPosX := 0; - gWinRealPosY := 0; gScreenWidth := w; gScreenHeight := h; {$IFDEF ENABLE_HOLMES} diff --git a/src/game/sdl2/g_system.pas b/src/game/sdl2/g_system.pas index 6750d68..7899e9c 100644 --- a/src/game/sdl2/g_system.pas +++ b/src/game/sdl2/g_system.pas @@ -77,8 +77,6 @@ implementation begin gWinSizeX := w; gWinSizeY := h; - gWinRealPosX := 0; - gWinRealPosY := 0; gScreenWidth := w; gScreenHeight := h; {$IFDEF ENABLE_HOLMES} @@ -108,7 +106,7 @@ implementation end; function InitWindow (w, h, bpp: Integer; fullScreen: Boolean): Boolean; - var flags: UInt32; + var flags: UInt32; x, y: Integer; begin // note: on window close make: if assigned(oglDeinitCB) then oglDeinitCB; e_LogWritefln('InitWindow %s %s %s %s', [w, h, bpp, fullScreen]); @@ -131,7 +129,9 @@ implementation {$ENDIF} flags := SDL_WINDOW_OPENGL or SDL_WINDOW_RESIZABLE; if fullScreen then flags := flags or SDL_WINDOW_FULLSCREEN; - window := SDL_CreateWindow(GetTitle(), SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, w, h, flags); + x := SDL_WINDOWPOS_CENTERED; + y := SDL_WINDOWPOS_CENTERED; + window := SDL_CreateWindow(GetTitle(), x, y, w, h, flags); if window <> nil then begin context := SDL_GL_CreateContext(window);