diff --git a/src/game/g_menu.pas b/src/game/g_menu.pas
index 85334b3bf14b8331ed5c2bc114266c667a0db93f..fca66beba93f4e99812a0570f864adb2b66ff58a 100644 (file)
--- a/src/game/g_menu.pas
+++ b/src/game/g_menu.pas
-(* Copyright (C) DooM 2D:Forever Developers
+(* 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
procedure g_Menu_AskLanguage();
procedure g_Menu_Show_SaveMenu();
-procedure g_Menu_Show_LoadMenu();
+procedure g_Menu_Show_LoadMenu(standalone: Boolean=false);
procedure g_Menu_Show_GameSetGame();
procedure g_Menu_Show_OptionsVideo();
procedure g_Menu_Show_OptionsSound();
implementation
uses
+{$IFDEF USE_NANOGL}
+ nanoGL,
+{$ELSE}
+ GL, GLExt,
+{$ENDIF}
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,
- MAPDEF, wadreader, Math, g_saveload,
- e_texture, GL, GLExt, g_language,
- g_net, g_netmsg, g_netmaster, g_items, e_input;
+ e_log, SysUtils, CONFIG, g_playermodel, DateUtils, sdl2,
+ MAPDEF, Math, g_saveload,
+ e_texture, g_language,
+ g_net, g_netmsg, g_netmaster, g_items, e_input,
+ utils, wadreader;
type TYNCallback = procedure (yes:Boolean);
var
menu: TGUIMenu;
i: Integer;
+ ovs: Boolean;
begin
menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoMenu').GetControl('mOptionsVideoMenu'));
gBPP := 16
else
gBPP := 32;
+
+ ovs := gVSync;
gVSync := TGUISwitch(menu.GetControl('swVSync')).ItemIndex = 0;
+ if (ovs <> gVSync) then g_SetVSync(gVSync);
+
gTextureFilter := TGUISwitch(menu.GetControl('swTextureFilter')).ItemIndex = 0;
glLegacyNPOT := not (TGUISwitch(menu.GetControl('swLegacyNPOT')).ItemIndex = 0);
gMuteWhenInactive := TGUISwitch(menu.GetControl('swInactiveSounds')).ItemIndex = 1;
gAnnouncer := TGUISwitch(menu.GetControl('swAnnouncer')).ItemIndex;
gSoundEffectsDF := TGUISwitch(menu.GetControl('swSoundEffects')).ItemIndex = 1;
+ gUseChatSounds := TGUISwitch(menu.GetControl('swChatSpeech')).ItemIndex = 0;
menu := TGUIMenu(g_GUI_GetWindow('OptionsGameMenu').GetControl('mOptionsGameMenu'));
else
ItemIndex := 0;
+ with TGUISwitch(menu.GetControl('swChatSpeech')) do
+ if gUseChatSounds then
+ ItemIndex := 0
+ else
+ ItemIndex := 1;
+
menu := TGUIMenu(g_GUI_GetWindow('OptionsControlsP1Menu').GetControl('mOptionsControlsP1Menu'));
with menu, gGameControls.P1Control do
begin
Map := TGUILabel(GetControl('lbMap')).Text;
if Map = '' then
Exit;
- if Pos(':\', Map) = 0 then
+ if not isWadPath(Map) then
Exit;
GameMode := TGUISwitch(GetControl('swGameMode')).ItemIndex+1;
Map := TGUILabel(GetControl('lbMap')).Text;
if Map = '' then
Exit;
- if Pos(':\', Map) = 0 then
+ if not isWadPath(Map) then
Exit;
GameMode := TGUISwitch(GetControl('swGameMode')).ItemIndex+1;
procedure ProcSelectWAD(Sender: TGUIControl);
var
wad: String;
- list: SArray;
+ list: SSArray;
begin
with TGUIMenu(g_GUI_GetWindow('SelectMapMenu').GetControl('mSelectMapMenu')) do
begin
procedure MenuLoadData();
begin
- e_WriteLog('Loading menu data...', MSG_NOTIFY);
+ e_WriteLog('Loading menu data...', TMsgType.Notify);
g_Texture_CreateWADEx('MAINMENU_MARKER1', GameWAD+':TEXTURES\MARKER1');
g_Texture_CreateWADEx('MAINMENU_MARKER2', GameWAD+':TEXTURES\MARKER2');
procedure ProcLoadMenu();
var
a: Integer;
+ valid: Boolean;
begin
for a := 1 to 8 do
- TGUIEdit(TGUIMenu(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')).GetControl('edSlot'+IntToStr(a))).Text :=
- g_GetSaveName(a);
+ begin
+ TGUIEdit(TGUIMenu(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')).GetControl('edSlot'+IntToStr(a))).Text := g_GetSaveName(a, valid);
+ TGUIEdit(TGUIMenu(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')).GetControl('edSlot'+IntToStr(a))).Invalid := not valid;
+ //TGUIMenu(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu')).GetControl('edSlot'+IntToStr(a)).Enabled := valid;
+ end;
end;
procedure ProcSaveMenu();
var
a: Integer;
+ valid: Boolean;
+ name: AnsiString;
begin
for a := 1 to 8 do
- TGUIEdit(TGUIMenu(g_GUI_GetWindow('SaveMenu').GetControl('mmSaveMenu')).GetControl('edSlot'+IntToStr(a))).Text :=
- g_GetSaveName(a);
+ begin
+ name := g_GetSaveName(a, valid);
+ TGUIEdit(TGUIMenu(g_GUI_GetWindow('SaveMenu').GetControl('mmSaveMenu')).GetControl('edSlot'+IntToStr(a))).Text := name;
+ TGUIEdit(TGUIMenu(g_GUI_GetWindow('SaveMenu').GetControl('mmSaveMenu')).GetControl('edSlot'+IntToStr(a))).Invalid := (name <> '') and (not valid);
+ end;
end;
procedure ProcSaveGame(Sender: TGUIControl);
if g_Game_IsNet then Exit;
a := StrToInt(Copy(Sender.Name, Length(Sender.Name), 1));
if g_LoadGame(a) then
+ begin
g_Game_PauseAllSounds(False)
+ end
else // Íå çàãðóçèëîñü - âîçâðàò â ìåíþ
+ begin
+ g_Console_Add(_lc[I_MSG_BAD_SAVE_VERSION], true);
g_GUI_GetWindow('LoadMenu').SetActive(g_GUI_GetWindow('LoadMenu').GetControl('mmLoadMenu'));
+ //g_ActiveWindow := nil;
+ end;
end;
procedure ProcSingle1Player();
begin
if g_ActiveWindow.Name = 'OptionsPlayersP1Menu' then s := 'P1' else s := 'P2';
with TGUIModelView(g_ActiveWindow.GetControl('mv'+s+'Model')).Model do
- if Direction = D_LEFT then Direction := D_RIGHT else Direction := D_LEFT;
+ begin
+ if Direction = TDirection.D_LEFT then Direction := TDirection.D_RIGHT else Direction := TDirection.D_LEFT;
+ end;
end;
procedure ProcDefaultMenuKeyDown (yes: Boolean);
begin
Enabled := True;
if (gGameSettings.GameType = GT_SINGLE) and
- ((gPlayer1 = nil) or (not gPlayer1.Live)) and
- ((gPlayer2 = nil) or (not gPlayer2.Live)) then
+ ((gPlayer1 = nil) or (not gPlayer1.alive)) and
+ ((gPlayer2 = nil) or (not gPlayer2.alive)) then
Enabled := False; // Îäèí èç èãðîêîâ ïîãèá â ñèíãëå
if not gGameOn then
Enabled := False; // Çàïðåòèòü ñîõðàíåíèå â èíòåðìèññèè (íå ðåàëèçîâàíî)
procedure ProcVideoOptionsRes();
var
menu: TGUIMenu;
- list: SArray;
+ list: SSArray;
SR: DWORD;
begin
menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoResMenu').GetControl('mOptionsVideoResMenu'));
Menu: TGUIWindow;
//SR: TSearchRec;
a, cx, _y, i: Integer;
- //list: SArray;
+ //list: SSArray;
begin
Menu := TGUIWindow.Create('MainMenu');
with TGUIMainMenu(Menu.AddChild(TGUIMainMenu.Create(gMenuFont, _lc[I_MENU_MAIN_MENU]))) do
AddItem(_lc[I_MENU_COMPAT_DOOM2]);
AddItem(_lc[I_MENU_COMPAT_DF]);
end;
+ // Ïåðåêëþ÷àòåëü çâóêîâ ÷àòà
+ with AddSwitch (_lc[I_MENU_SOUND_CHAT]) do
+ begin;
+ Name := 'swChatSpeech';
+ AddItem(_lc[I_MENU_YES]);
+ AddItem(_lc[I_MENU_NO]);
+ end;
with AddSwitch(_lc[I_MENU_SOUND_INACTIVE_SOUNDS]) do
begin
Name := 'swInactiveSounds';
g_Sound_PlayEx('MENU_OPEN');
end;
-procedure g_Menu_Show_LoadMenu();
+procedure g_Menu_Show_LoadMenu (standalone: Boolean=false);
begin
+ if (g_ActiveWindow <> nil) and (g_ActiveWindow.name = 'LoadMenu') then exit; // nothing to do
if gGameSettings.GameType = GT_SINGLE then
- g_GUI_ShowWindow('GameSingleMenu')
+ begin
+ if not standalone then g_GUI_ShowWindow('GameSingleMenu')
+ end
else
begin
- if g_Game_IsClient then
- Exit
- else
- if g_Game_IsNet then
- Exit
- else
- g_GUI_ShowWindow('GameCustomMenu');
+ if g_Game_IsClient then exit;
+ if g_Game_IsNet then exit;
+ if not standalone then g_GUI_ShowWindow('GameCustomMenu');
end;
g_GUI_ShowWindow('LoadMenu');
g_Sound_PlayEx('MENU_OPEN');
begin
g_GUI_Destroy();
- e_WriteLog('Releasing menu data...', MSG_NOTIFY);
+ e_WriteLog('Releasing menu data...', TMsgType.Notify);
MenuFreeData();
end;
if ex then
begin
- e_WriteLog('Recreating menu...', MSG_NOTIFY);
+ e_WriteLog('Recreating menu...', TMsgType.Notify);
CreateAllMenus();