X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_menu.pas;h=8331660c6107c21c00137101818cc3ce0aa28a37;hb=6f5375e6179294fde838bcf61f0dafeb4e018ee7;hp=6cbc68e5d96ab006b8fab7f6d7d8e8bb1b682d92;hpb=4171d8dd0b8d733da27c584616e431811bf0fdcf;p=d2df-sdl.git diff --git a/src/game/g_menu.pas b/src/game/g_menu.pas index 6cbc68e..8331660 100644 --- a/src/game/g_menu.pas +++ b/src/game/g_menu.pas @@ -47,7 +47,7 @@ uses g_basic, g_console, g_sound, g_gfx, g_player, g_options, g_weapons, 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, g_system; @@ -108,6 +108,7 @@ var menu: TGUIMenu; i: Integer; ovs: Boolean; + s: AnsiString; begin menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoMenu').GetControl('mOptionsVideoMenu')); @@ -122,7 +123,7 @@ begin 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')); @@ -374,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(); @@ -398,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')); @@ -647,6 +650,7 @@ var Map: String; GameMode: Byte; Options: LongWord; + s: AnsiString; begin with TGUIMenu(g_ActiveWindow.GetControl('mCustomGameMenu')) do begin @@ -663,12 +667,15 @@ begin gcMaxLives := StrToIntDef(TGUIEdit(GetControl('edMaxLives')).Text, 0); gcTeamDamage := TGUISwitch(GetControl('swTeamDamage')).ItemIndex = 0; + gcRespawnItems := TGUISwitch(GetControl('swRespawnItems')).ItemIndex = 0; gcAllowExit := TGUISwitch(GetControl('swEnableExits')).ItemIndex = 0; gcWeaponStay := TGUISwitch(GetControl('swWeaponStay')).ItemIndex = 0; gcMonsters := TGUISwitch(GetControl('swMonsters')).ItemIndex = 0; Options := 0; if gcTeamDamage then Options := Options or GAME_OPTION_TEAMDAMAGE; + if gcRespawnItems then + Options := Options or GAME_OPTION_RESPAWNITEMS; if gcAllowExit then Options := Options or GAME_OPTION_ALLOWEXIT; if gcWeaponStay then @@ -695,7 +702,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); @@ -707,6 +716,7 @@ var Map: String; GameMode: Byte; Options: LongWord; + s: AnsiString; begin with TGUIMenu(g_ActiveWindow.GetControl('mNetServerMenu')) do begin @@ -724,12 +734,15 @@ begin NetPort := StrToIntDef(TGUIEdit(GetControl('edPort')).Text, 0); gnTeamDamage := TGUISwitch(GetControl('swTeamDamage')).ItemIndex = 0; + gnRespawnItems := TGUISwitch(GetControl('swRespawnItems')).ItemIndex = 0; gnAllowExit := TGUISwitch(GetControl('swEnableExits')).ItemIndex = 0; gnWeaponStay := TGUISwitch(GetControl('swWeaponStay')).ItemIndex = 0; gnMonsters := TGUISwitch(GetControl('swMonsters')).ItemIndex = 0; Options := 0; if gnTeamDamage then Options := Options or GAME_OPTION_TEAMDAMAGE; + if gnRespawnItems then + Options := Options or GAME_OPTION_RESPAWNITEMS; if gnAllowExit then Options := Options or GAME_OPTION_ALLOWEXIT; if gnWeaponStay then @@ -761,8 +774,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); @@ -771,6 +788,7 @@ end; procedure ProcConnectNetGame(); var PW: String; + s: AnsiString; begin with TGUIMenu(g_ActiveWindow.GetControl('mNetClientMenu')) do begin @@ -779,13 +797,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 @@ -794,7 +815,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; @@ -811,7 +834,7 @@ begin NetInitDone := True; end; - g_Net_Slist_Set(NetSlistIP, NetSlistPort); + g_Net_Slist_Set(NetSlistIP, NetSlistPort, NetSlistList); gState := STATE_SLIST; g_ActiveWindow := nil; @@ -840,9 +863,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 @@ -1260,14 +1284,27 @@ begin end; end; -procedure ProcSingle1Player(); +procedure ProcSinglePlayer (n: Integer); + var wad, map: AnsiString; +begin + assert(n >= 1); + wad := g_ExtractWadName(gDefaultMegawadStart); + map := g_ExtractFilePathName(gDefaultMegawadStart); + if e_FindResource(AllMapDirs, wad) then + begin + wad := ExpandFileName(wad); + g_Game_StartSingle(wad + ':\' + map, n > 1, n) + end +end; + +procedure ProcSingle1Player; begin - g_Game_StartSingle(gDefaultMegawadStart, False, 1); + ProcSinglePlayer(1) end; -procedure ProcSingle2Players(); +procedure ProcSingle2Players; begin - g_Game_StartSingle(gDefaultMegawadStart, True, 2); + ProcSinglePlayer(2) end; procedure ProcSelectMapMenu(); @@ -1321,13 +1358,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; @@ -1623,32 +1662,24 @@ begin if yes then gExit := EXIT_SIMPLE else g_GUI_HideWindow; end; -procedure ProcSetRussianLanguage(); +procedure ProcSetRussianLanguage; begin if gLanguage <> LANGUAGE_RUSSIAN then begin gLanguage := LANGUAGE_RUSSIAN; gLanguageChange := True; gAskLanguage := False; - - g_Options_Write_Language(GameDir+'/'+CONFIG_FILENAME); - - // Ñîõðàíÿåì èçìåíåíèÿ âñåõ íàñòðîåê: ProcApplyOptions(); end; end; -procedure ProcSetEnglishLanguage(); +procedure ProcSetEnglishLanguage; begin if gLanguage <> LANGUAGE_ENGLISH then begin gLanguage := LANGUAGE_ENGLISH; gLanguageChange := True; gAskLanguage := False; - - g_Options_Write_Language(GameDir+'/'+CONFIG_FILENAME); - - // Ñîõðàíÿåì èçìåíåíèÿ âñåõ íàñòðîåê: ProcApplyOptions(); end; end; @@ -1835,7 +1866,7 @@ begin with TGUIListBox(menu.GetControl('lsResolution')) do begin - list := sys_GetDispalyModes(gBPP); + list := sys_GetDisplayModes(gBPP); if list <> nil then begin Items := list; @@ -1883,22 +1914,18 @@ begin ProcApplyOptions(); end; -procedure ProcSetFirstRussianLanguage(); +procedure ProcSetFirstRussianLanguage; begin gLanguage := LANGUAGE_RUSSIAN; gLanguageChange := True; gAskLanguage := False; - - g_Options_Write_Language(GameDir+'/'+CONFIG_FILENAME); end; -procedure ProcSetFirstEnglishLanguage(); +procedure ProcSetFirstEnglishLanguage; begin gLanguage := LANGUAGE_ENGLISH; gLanguageChange := True; gAskLanguage := False; - - g_Options_Write_Language(GameDir+'/'+CONFIG_FILENAME); end; procedure ProcRecallAddress(); @@ -2167,6 +2194,16 @@ begin else ItemIndex := 1; end; + with AddSwitch(_lc[I_MENU_RESPAWN_ITEMS]) do + begin + Name := 'swRespawnItems'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + if gnRespawnItems then + ItemIndex := 0 + else + ItemIndex := 1; + end; with AddSwitch(_lc[I_MENU_ENABLE_EXITS]) do begin Name := 'swEnableExits'; @@ -2367,6 +2404,16 @@ begin else ItemIndex := 1; end; + with AddSwitch(_lc[I_MENU_RESPAWN_ITEMS]) do + begin + Name := 'swRespawnItems'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + if gcRespawnItems then + ItemIndex := 0 + else + ItemIndex := 1; + end; with AddSwitch(_lc[I_MENU_ENABLE_EXITS]) do begin Name := 'swEnableExits'; @@ -2437,7 +2484,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 @@ -2492,7 +2539,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