diff --git a/src/game/g_menu.pas b/src/game/g_menu.pas
index 4d2da495216be1983b5f6e38ae4454fc3f7dc6a0..11dd664dd078e80d4103dc8bed63e66d190ade31 100644 (file)
--- a/src/game/g_menu.pas
+++ b/src/game/g_menu.pas
{$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);
menu: TGUIMenu;
i: Integer;
ovs: Boolean;
+ s: AnsiString;
begin
menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoMenu').GetControl('mOptionsVideoMenu'));
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'));
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();
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'));
Map: String;
GameMode: Byte;
Options: LongWord;
+ s: AnsiString;
begin
with TGUIMenu(g_ActiveWindow.GetControl('mCustomGameMenu')) do
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);
Map: String;
GameMode: Byte;
Options: LongWord;
+ s: AnsiString;
begin
with TGUIMenu(g_ActiveWindow.GetControl('mNetServerMenu')) do
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);
procedure ProcConnectNetGame();
var
PW: String;
+ s: AnsiString;
begin
with TGUIMenu(g_ActiveWindow.GetControl('mNetClientMenu')) do
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
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;
NetInitDone := True;
end;
- g_Net_Slist_Set(NetSlistIP, NetSlistPort);
+ g_Net_Slist_Set(NetSlistIP, NetSlistPort, NetSlistList);
gState := STATE_SLIST;
g_ActiveWindow := nil;
slWaitStr := _lc[I_NET_SLIST_WAIT];
g_Game_Draw;
- ReDrawWindow;
+ sys_Repaint;
slReturnPressed := True;
if g_Net_Slist_Fetch(slCurrent) then
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
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();
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;
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
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
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();
var
menu: TGUIMenu;
list: SSArray;
- SR: DWORD;
begin
menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoResMenu').GetControl('mOptionsVideoResMenu'));
with TGUIListBox(menu.GetControl('lsResolution')) do
begin
- list := GetDisplayModes(gBPP, SR);
-
+ list := sys_GetDisplayModes(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
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();
Sort := True;
Dirs := True;
FileMask := '*.wad|*.pk3|*.zip|*.dfz';
- SetBase(MapsDir+'megawads/');
+ SetBase(MegawadDirs);
end;
with AddLabel(_lc[I_MENU_MAP_NAME]) do
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
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);