X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=blobdiff_plain;f=src%2Fgame%2Fg_menu.pas;h=72a5c8ceeb16317cfbaf60d737cd667dcb8726d1;hp=4d2da495216be1983b5f6e38ae4454fc3f7dc6a0;hb=a959696d242bc66e6890d281eb6e5d627c2588e9;hpb=82108dd50fb12ef54f0cd04891901782781fe442 diff --git a/src/game/g_menu.pas b/src/game/g_menu.pas index 4d2da49..72a5c8c 100644 --- a/src/game/g_menu.pas +++ b/src/game/g_menu.pas @@ -45,11 +45,11 @@ uses {$INCLUDE ../nogl/noGLuses.inc} g_gui, g_textures, e_graphics, g_main, g_window, g_game, g_map, g_basic, g_console, g_sound, g_gfx, g_player, g_options, g_weapons, - e_log, SysUtils, CONFIG, g_playermodel, DateUtils, sdl2, + e_log, SysUtils, CONFIG, g_playermodel, DateUtils, MAPDEF, Math, g_saveload, - e_texture, g_language, + e_texture, g_language, e_res, g_net, g_netmsg, g_netmaster, g_items, e_input, g_touch, - utils, wadreader; + utils, wadreader, g_system; type TYNCallback = procedure (yes:Boolean); @@ -108,6 +108,7 @@ var menu: TGUIMenu; i: Integer; ovs: Boolean; + s: AnsiString; begin menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoMenu').GetControl('mOptionsVideoMenu')); @@ -118,10 +119,11 @@ begin ovs := gVSync; gVSync := TGUISwitch(menu.GetControl('swVSync')).ItemIndex = 0; - if (ovs <> gVSync) then g_SetVSync(gVSync); + if (ovs <> gVSync) then + sys_EnableVSync(gVSync); gTextureFilter := TGUISwitch(menu.GetControl('swTextureFilter')).ItemIndex = 0; - glLegacyNPOT := not (TGUISwitch(menu.GetControl('swLegacyNPOT')).ItemIndex = 0); + glNPOTOverride := not (TGUISwitch(menu.GetControl('swLegacyNPOT')).ItemIndex = 0); menu := TGUIMenu(g_GUI_GetWindow('OptionsSoundMenu').GetControl('mOptionsSoundMenu')); @@ -373,8 +375,10 @@ begin if g_Game_IsClient then MC_SEND_PlayerSettings; - g_Options_Write(GameDir+'/'+CONFIG_FILENAME); - g_Console_WriteGameConfig(); + s := e_GetWriteableDir(ConfigDirs); + if s <> '' then + g_Options_Write(s + '/' + CONFIG_FILENAME); + g_Console_WriteGameConfig; end; procedure ReadOptions(); @@ -397,7 +401,7 @@ begin if gVSync then ItemIndex := 0 else ItemIndex := 1; with TGUISwitch(menu.GetControl('swLegacyNPOT')) do - if not glLegacyNPOT then ItemIndex := 0 else ItemIndex := 1; + if not glNPOTOverride then ItemIndex := 0 else ItemIndex := 1; menu := TGUIMenu(g_GUI_GetWindow('OptionsSoundMenu').GetControl('mOptionsSoundMenu')); @@ -646,6 +650,7 @@ var Map: String; GameMode: Byte; Options: LongWord; + s: AnsiString; begin with TGUIMenu(g_ActiveWindow.GetControl('mCustomGameMenu')) do begin @@ -694,7 +699,9 @@ begin gcMap := Map; end; - g_Options_Write_Gameplay_Custom(GameDir+'/'+CONFIG_FILENAME); + s := e_GetWriteableDir(ConfigDirs); + if s <> '' then + g_Options_Write_Gameplay_Custom(s + '/' + CONFIG_FILENAME); g_Game_StartCustom(Map, GameMode, gcTimeLimit, gcGoalLimit, gcMaxLives, Options, gcPlayers); @@ -706,6 +713,7 @@ var Map: String; GameMode: Byte; Options: LongWord; + s: AnsiString; begin with TGUIMenu(g_ActiveWindow.GetControl('mNetServerMenu')) do begin @@ -760,8 +768,12 @@ begin NetUseMaster := TGUISwitch(GetControl('swUseMaster')).ItemIndex = 0; end; - g_Options_Write_Net_Server(GameDir+'/'+CONFIG_FILENAME); - g_Options_Write_Gameplay_Net(GameDir+'/'+CONFIG_FILENAME); + s := e_GetWriteableDir(ConfigDirs); + if s <> '' then + begin + g_Options_Write_Net_Server(s + '/' + CONFIG_FILENAME); + g_Options_Write_Gameplay_Net(s + '/' + CONFIG_FILENAME) + end; g_Game_StartServer(Map, GameMode, gnTimeLimit, gnGoalLimit, gnMaxLives, Options, gnPlayers, 0, NetPort); @@ -770,6 +782,7 @@ end; procedure ProcConnectNetGame(); var PW: String; + s: AnsiString; begin with TGUIMenu(g_ActiveWindow.GetControl('mNetClientMenu')) do begin @@ -778,13 +791,16 @@ begin PW := TGUIEdit(GetControl('edPW')).Text; end; - g_Options_Write_Net_Client(GameDir+'/'+CONFIG_FILENAME); + s := e_GetWriteableDir(ConfigDirs); + if s <> '' then + g_Options_Write_Net_Client(s + '/' + CONFIG_FILENAME); g_Game_StartClient(NetClientIP, NetClientPort, PW); end; procedure ProcEnterPassword(); var PW: string; + s: AnsiString; begin with TGUIMenu(g_ActiveWindow.GetControl('mClientPasswordMenu')) do begin @@ -793,7 +809,9 @@ begin PW := TGUIEdit(GetControl('edPW')).Text; end; - g_Options_Write_Net_Client(GameDir+'/'+CONFIG_FILENAME); + s := e_GetWriteableDir(ConfigDirs); + if s <> '' then + g_Options_Write_Net_Client(s + '/' + CONFIG_FILENAME); g_Game_StartClient(NetClientIP, NetClientPort, PW); end; @@ -810,7 +828,7 @@ begin NetInitDone := True; end; - g_Net_Slist_Set(NetSlistIP, NetSlistPort); + g_Net_Slist_Set(NetSlistIP, NetSlistPort, NetSlistList); gState := STATE_SLIST; g_ActiveWindow := nil; @@ -818,7 +836,7 @@ begin slWaitStr := _lc[I_NET_SLIST_WAIT]; g_Game_Draw; - ReDrawWindow; + sys_Repaint; slReturnPressed := True; if g_Net_Slist_Fetch(slCurrent) then @@ -839,9 +857,10 @@ var begin with TGUIMenu(g_ActiveWindow.GetControl('mCampaignMenu')) do begin - WAD := ExtractRelativePath(MapsDir, TGUIFileListBox(GetControl('lsWAD')).SelectedItem()); + WAD := TGUIFileListBox(GetControl('lsWAD')).SelectedItem(); TwoPlayers := TGUISwitch(GetControl('swPlayers')).ItemIndex = 1; end; + WAD := e_FindWadRel(MegawadDirs, WAD); if TwoPlayers then n := 2 @@ -1259,14 +1278,26 @@ begin end; end; -procedure ProcSingle1Player(); +procedure ProcSinglePlayer (n: Integer); + var wad, map: AnsiString; begin - g_Game_StartSingle(gDefaultMegawadStart, False, 1); + wad := g_ExtractWadName(gDefaultMegawadStart); + map := g_ExtractFilePathName(gDefaultMegawadStart); + if e_FindResource(AllMapDirs, wad) then + begin + wad := ExpandFileName(wad); + g_Game_StartSingle(wad + ':\' + map, False, n); + end; end; -procedure ProcSingle2Players(); +procedure ProcSingle1Player; begin - g_Game_StartSingle(gDefaultMegawadStart, True, 2); + ProcSinglePlayer(1) +end; + +procedure ProcSingle2Players; +begin + ProcSinglePlayer(2) end; procedure ProcSelectMapMenu(); @@ -1320,13 +1351,15 @@ var begin with TGUIMenu(g_ActiveWindow.GetControl('mSelectMapMenu')) do begin - wad := ExtractRelativePath(MapsDir, TGUIFileListBox(GetControl('lsMapWAD')).SelectedItem()); + wad := TGUIFileListBox(GetControl('lsMapWAD')).SelectedItem(); map := TGUIListBox(GetControl('lsMapRes')).SelectedItem(); end; if (wad = '') or (map = '') then Exit; + wad := e_FindWadRel(MapDirs, WAD); + res := wad+':\'+map; TGUILabel(TGUIMenu(g_GUI_GetWindow('CustomGameMenu').GetControl('mCustomGameMenu')).GetControl('lbMap')).Text := res; @@ -1622,7 +1655,8 @@ begin if yes then gExit := EXIT_SIMPLE else g_GUI_HideWindow; end; -procedure ProcSetRussianLanguage(); +procedure ProcSetRussianLanguage; + var s: AnsiString; begin if gLanguage <> LANGUAGE_RUSSIAN then begin @@ -1630,14 +1664,17 @@ begin gLanguageChange := True; gAskLanguage := False; - g_Options_Write_Language(GameDir+'/'+CONFIG_FILENAME); + s := e_GetWriteableDir(ConfigDirs); + if s <> '' then + g_Options_Write_Language(s + '/' + CONFIG_FILENAME); // Ñîõðàíÿåì èçìåíåíèÿ âñåõ íàñòðîåê: ProcApplyOptions(); end; end; -procedure ProcSetEnglishLanguage(); +procedure ProcSetEnglishLanguage; + var s: AnsiString; begin if gLanguage <> LANGUAGE_ENGLISH then begin @@ -1645,7 +1682,9 @@ begin gLanguageChange := True; gAskLanguage := False; - g_Options_Write_Language(GameDir+'/'+CONFIG_FILENAME); + s := e_GetWriteableDir(ConfigDirs); + if s <> '' then + g_Options_Write_Language(s + '/' + CONFIG_FILENAME); // Ñîõðàíÿåì èçìåíåíèÿ âñåõ íàñòðîåê: ProcApplyOptions(); @@ -1824,7 +1863,6 @@ procedure ProcVideoOptionsRes(); var menu: TGUIMenu; list: SSArray; - SR: DWORD; begin menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoResMenu').GetControl('mOptionsVideoResMenu')); @@ -1835,15 +1873,16 @@ begin with TGUIListBox(menu.GetControl('lsResolution')) do begin - list := GetDisplayModes(gBPP, SR); - + list := sys_GetDispalyModes(gBPP); if list <> nil then - begin - Items := list; - ItemIndex := SR; - end + begin + Items := list; + ItemIndex := Length(list) + end else - Clear(); + begin + Clear + end end; with TGUISwitch(menu.GetControl('swFullScreen')) do @@ -1882,22 +1921,28 @@ begin ProcApplyOptions(); end; -procedure ProcSetFirstRussianLanguage(); +procedure ProcSetFirstRussianLanguage; + var s: AnsiString; begin gLanguage := LANGUAGE_RUSSIAN; gLanguageChange := True; gAskLanguage := False; - g_Options_Write_Language(GameDir+'/'+CONFIG_FILENAME); + s := e_GetWriteableDir(ConfigDirs); + if s <> '' then + g_Options_Write_Language(s + '/' + CONFIG_FILENAME) end; -procedure ProcSetFirstEnglishLanguage(); +procedure ProcSetFirstEnglishLanguage; + var s: AnsiString; begin gLanguage := LANGUAGE_ENGLISH; gLanguageChange := True; gAskLanguage := False; - g_Options_Write_Language(GameDir+'/'+CONFIG_FILENAME); + s := e_GetWriteableDir(ConfigDirs); + if s <> '' then + g_Options_Write_Language(s + '/' + CONFIG_FILENAME) end; procedure ProcRecallAddress(); @@ -2436,7 +2481,7 @@ begin Sort := True; Dirs := True; FileMask := '*.wad|*.pk3|*.zip|*.dfz'; - SetBase(MapsDir+'megawads/'); + SetBase(MegawadDirs); end; with AddLabel(_lc[I_MENU_MAP_NAME]) do @@ -2491,7 +2536,7 @@ begin Sort := True; Dirs := True; FileMask := '*.wad|*.pk3|*.zip|*.dfz'; - SetBase(MapsDir); + SetBase(MapDirs); end; with AddList(_lc[I_MENU_MAP_RESOURCE], 12, 4) do begin @@ -2898,12 +2943,11 @@ begin begin Name := 'mOptionsControlsJoystickMenu'; for i := 0 to e_MaxJoys - 1 do - if e_JoystickAvailable[i] then - with AddScroll(Format(_lc[I_MENU_CONTROL_DEADZONE], [i + 1])) do - begin - Name := 'scDeadzone' + IntToStr(i); - Max := 20 - end + with AddScroll(Format(_lc[I_MENU_CONTROL_DEADZONE], [i + 1])) do + begin + Name := 'scDeadzone' + IntToStr(i); + Max := 20 + end end; Menu.DefControl := 'mOptionsControlsJoystickMenu'; g_GUI_AddWindow(Menu);