X-Git-Url: https://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fgame%2Fg_menu.pas;h=d409cc6f484bcb9974ec707452c7ea19b3fc9cc2;hb=2c147b5a7106a74252a3f71de731adff9c472070;hp=3513439d44e4b2574f2e33b1b64c9351324a74e6;hpb=d7e26c5b3bd136c429cd4e1532892b9476658126;p=d2df-sdl.git diff --git a/src/game/g_menu.pas b/src/game/g_menu.pas index 3513439..d409cc6 100644 --- a/src/game/g_menu.pas +++ b/src/game/g_menu.pas @@ -38,6 +38,7 @@ var PromptIP: string; PromptPort: Word; TempScale: Integer = -1; + TempResScale: Integer = -1; implementation @@ -108,7 +109,6 @@ var menu: TGUIMenu; i: Integer; ovs: Boolean; - s: AnsiString; begin menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoMenu').GetControl('mOptionsVideoMenu')); @@ -375,9 +375,6 @@ begin if g_Game_IsClient then MC_SEND_PlayerSettings; - s := e_GetWriteableDir(ConfigDirs); - if s <> '' then - g_Options_Write(s + '/' + CONFIG_FILENAME); g_Console_WriteGameConfig; end; @@ -645,14 +642,13 @@ begin } end; -procedure ProcStartCustomGame(); +function LatchGameOptions(const MenuName: string): Byte; var - Map: String; - GameMode: Byte; - Options: LongWord; - s: AnsiString; + Map: string; begin - with TGUIMenu(g_ActiveWindow.GetControl('mCustomGameMenu')) do + Result := GM_NONE; + + with TGUIMenu(g_ActiveWindow.GetControl(MenuName)) do begin Map := TGUILabel(GetControl('lbMap')).Text; if Map = '' then @@ -660,119 +656,63 @@ begin if not isWadPath(Map) then Exit; - GameMode := TGUISwitch(GetControl('swGameMode')).ItemIndex+1; - gcGameMode := TGUISwitch(GetControl('swGameMode')).GetText; - gcTimeLimit := StrToIntDef(TGUIEdit(GetControl('edTimeLimit')).Text, 0); - gcGoalLimit := StrToIntDef(TGUIEdit(GetControl('edGoalLimit')).Text, 0); - gcMaxLives := StrToIntDef(TGUIEdit(GetControl('edMaxLives')).Text, 0); - - gcTeamDamage := TGUISwitch(GetControl('swTeamDamage')).ItemIndex = 0; - gcRespawnItems := TGUISwitch(GetControl('swRespawnItems')).ItemIndex = 0; - gcDeathmatchKeys := TGUISwitch(GetControl('swDeathmatchKeys')).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 gcDeathmatchKeys then - Options := Options or GAME_OPTION_DMKEYS; - if gcAllowExit then - Options := Options or GAME_OPTION_ALLOWEXIT; - if gcWeaponStay then - Options := Options or GAME_OPTION_WEAPONSTAY; - if gcMonsters then - Options := Options or GAME_OPTION_MONSTERS; - gcPlayers := TGUISwitch(GetControl('swPlayers')).ItemIndex; + Result := TGUISwitch(GetControl('swGameMode')).ItemIndex+1; + gsGameMode := TGUISwitch(GetControl('swGameMode')).GetText; + gsTimeLimit := StrToIntDef(TGUIEdit(GetControl('edTimeLimit')).Text, 0); + gsGoalLimit := StrToIntDef(TGUIEdit(GetControl('edGoalLimit')).Text, 0); + gsMaxLives := StrToIntDef(TGUIEdit(GetControl('edMaxLives')).Text, 0); + gsItemRespawnTime := StrToIntDef(TGUIEdit(GetControl('edItemRespawnTime')).Text, 0); + gsPlayers := TGUISwitch(GetControl('swPlayers')).ItemIndex; + gsMap := Map; + + gsGameFlags := 0; + if TGUISwitch(GetControl('swTeamDamage')).ItemIndex = 0 then + gsGameFlags := gsGameFlags or GAME_OPTION_TEAMDAMAGE; + if TGUISwitch(GetControl('swDeathmatchKeys')).ItemIndex = 0 then + gsGameFlags := gsGameFlags or GAME_OPTION_DMKEYS; + if TGUISwitch(GetControl('swEnableExits')).ItemIndex = 0 then + gsGameFlags := gsGameFlags or GAME_OPTION_ALLOWEXIT; + if TGUISwitch(GetControl('swWeaponStay')).ItemIndex = 0 then + gsGameFlags := gsGameFlags or GAME_OPTION_WEAPONSTAY; + if TGUISwitch(GetControl('swMonsters')).ItemIndex = 0 then + gsGameFlags := gsGameFlags or GAME_OPTION_MONSTERS; case TGUISwitch(GetControl('swBotsVS')).ItemIndex of - 1: begin - Options := Options or GAME_OPTION_BOTVSMONSTER; - gcBotsVS := 'Monsters'; - end; - 2: begin - Options := Options or GAME_OPTION_BOTVSPLAYER or GAME_OPTION_BOTVSMONSTER; - gcBotsVS := 'Everybody'; - end; - else begin - Options := Options or GAME_OPTION_BOTVSPLAYER; - gcBotsVS := 'Players'; - end; + 1: gsGameFlags := gsGameFlags or GAME_OPTION_BOTVSMONSTER; + 2: gsGameFlags := gsGameFlags or GAME_OPTION_BOTVSPLAYER or GAME_OPTION_BOTVSMONSTER; + else gsGameFlags := gsGameFlags or GAME_OPTION_BOTVSPLAYER; end; - gcMap := Map; + // TODO: get this crap out of here + gGameSettings.ItemRespawnTime := gsItemRespawnTime; + gGameSettings.WarmupTime := gsWarmupTime; + gGameSettings.SpawnInvul := gsSpawnInvul; end; +end; - s := e_GetWriteableDir(ConfigDirs); - if s <> '' then - g_Options_Write_Gameplay_Custom(s + '/' + CONFIG_FILENAME); +procedure ProcStartCustomGame(); +var + GameMode: Byte; +begin + GameMode := LatchGameOptions('mCustomGameMenu'); + if GameMode = GM_NONE then Exit; - g_Game_StartCustom(Map, GameMode, gcTimeLimit, gcGoalLimit, - gcMaxLives, Options, gcPlayers); + g_Console_WriteGameConfig; + g_Game_StartCustom(gsMap, GameMode, gsTimeLimit, gsGoalLimit, + gsMaxLives, gsGameFlags, gsPlayers); end; procedure ProcStartNetGame(); var - Map: String; GameMode: Byte; - Options: LongWord; - s: AnsiString; begin + GameMode := LatchGameOptions('mNetServerMenu'); + if GameMode = GM_NONE then Exit; + with TGUIMenu(g_ActiveWindow.GetControl('mNetServerMenu')) do begin - Map := TGUILabel(GetControl('lbMap')).Text; - if Map = '' then - Exit; - if not isWadPath(Map) then - Exit; - - GameMode := TGUISwitch(GetControl('swGameMode')).ItemIndex+1; - gnGameMode := TGUISwitch(GetControl('swGameMode')).GetText; - gnTimeLimit := StrToIntDef(TGUIEdit(GetControl('edTimeLimit')).Text, 0); - gnGoalLimit := StrToIntDef(TGUIEdit(GetControl('edGoalLimit')).Text, 0); - gnMaxLives := StrToIntDef(TGUIEdit(GetControl('edMaxLives')).Text, 0); NetPort := StrToIntDef(TGUIEdit(GetControl('edPort')).Text, 0); - - gnTeamDamage := TGUISwitch(GetControl('swTeamDamage')).ItemIndex = 0; - gnRespawnItems := TGUISwitch(GetControl('swRespawnItems')).ItemIndex = 0; - gnDeathmatchKeys := TGUISwitch(GetControl('swDeathmatchKeys')).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 gnDeathmatchKeys then - Options := Options or GAME_OPTION_DMKEYS; - if gnAllowExit then - Options := Options or GAME_OPTION_ALLOWEXIT; - if gnWeaponStay then - Options := Options or GAME_OPTION_WEAPONSTAY; - if gnMonsters then - Options := Options or GAME_OPTION_MONSTERS; - gnPlayers := TGUISwitch(GetControl('swPlayers')).ItemIndex; - - case TGUISwitch(GetControl('swBotsVS')).ItemIndex of - 1: begin - Options := Options or GAME_OPTION_BOTVSMONSTER; - gnBotsVS := 'Monsters'; - end; - 2: begin - Options := Options or GAME_OPTION_BOTVSPLAYER or GAME_OPTION_BOTVSMONSTER; - gnBotsVS := 'Everybody'; - end; - else begin - Options := Options or GAME_OPTION_BOTVSPLAYER; - gnBotsVS := 'Players'; - end; - end; - - gnMap := Map; NetServerName := TGUIEdit(GetControl('edSrvName')).Text; NetMaxClients := Max(1, StrToIntDef(TGUIEdit(GetControl('edMaxPlayers')).Text, 1)); NetMaxClients := Min(NET_MAXCLIENTS, NetMaxClients); @@ -780,21 +720,14 @@ begin NetUseMaster := TGUISwitch(GetControl('swUseMaster')).ItemIndex = 0; end; - 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); + g_Console_WriteGameConfig; + g_Game_StartServer(gsMap, GameMode, gsTimeLimit, gsGoalLimit, gsMaxLives, + gsGameFlags, gsPlayers, 0, NetPort); end; procedure ProcConnectNetGame(); var PW: String; - s: AnsiString; begin with TGUIMenu(g_ActiveWindow.GetControl('mNetClientMenu')) do begin @@ -803,16 +736,13 @@ begin PW := TGUIEdit(GetControl('edPW')).Text; end; - s := e_GetWriteableDir(ConfigDirs); - if s <> '' then - g_Options_Write_Net_Client(s + '/' + CONFIG_FILENAME); + g_Console_WriteGameConfig; g_Game_StartClient(NetClientIP, NetClientPort, PW); end; procedure ProcEnterPassword(); var PW: string; - s: AnsiString; begin with TGUIMenu(g_ActiveWindow.GetControl('mClientPasswordMenu')) do begin @@ -821,9 +751,7 @@ begin PW := TGUIEdit(GetControl('edPW')).Text; end; - s := e_GetWriteableDir(ConfigDirs); - if s <> '' then - g_Options_Write_Net_Client(s + '/' + CONFIG_FILENAME); + g_Console_WriteGameConfig; g_Game_StartClient(NetClientIP, NetClientPort, PW); end; @@ -840,7 +768,7 @@ begin NetInitDone := True; end; - g_Net_Slist_Set(NetSlistIP, NetSlistPort, NetSlistList); + g_Net_Slist_Set(NetMasterList); gState := STATE_SLIST; g_ActiveWindow := nil; @@ -1726,7 +1654,16 @@ begin if GameType in [GT_CUSTOM, GT_SERVER] then begin TGUISwitch(menu.GetControl('swTeamDamage')).Enabled := True; - TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled := (GameMode in [GM_DM, GM_TDM, GM_CTF]); + if (GameMode in [GM_DM, GM_TDM, GM_CTF]) then + begin + TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled := True; + TGUILabel(menu.GetControlsText('swDeathmatchKeys')).Color := MENU_ITEMSTEXT_COLOR; + end + else + begin + TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled := False; + TGUILabel(menu.GetControlsText('swDeathmatchKeys')).Color := MENU_UNACTIVEITEMS_COLOR; + end; TGUIEdit(menu.GetControl('edTimeLimit')).Enabled := True; TGUILabel(menu.GetControlsText('edTimeLimit')).Color := MENU_ITEMSTEXT_COLOR; TGUIEdit(menu.GetControl('edGoalLimit')).Enabled := True; @@ -1739,6 +1676,7 @@ begin begin TGUISwitch(menu.GetControl('swTeamDamage')).Enabled := True; TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled := False; + TGUILabel(menu.GetControlsText('swDeathmatchKeys')).Color := MENU_UNACTIVEITEMS_COLOR; with TGUIEdit(menu.GetControl('edTimeLimit')) do begin Enabled := False; @@ -1868,6 +1806,12 @@ begin end; end; end; + + // don't forget to latch this shit + gsGameFlags := Options; + gsMaxLives := MaxLives; + gsGoalLimit := GoalLimit; + gsTimeLimit := TimeLimit; end; if g_Game_IsNet then MH_SEND_GameSettings; @@ -1881,8 +1825,8 @@ begin menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoResMenu').GetControl('mOptionsVideoResMenu')); TGUILabel(menu.GetControl('lbCurrentRes')).Text := - IntToStr(gScreenWidth) + - ' x ' + IntToStr(gScreenHeight) + + IntToStr(gWinSizeX) + + ' x ' + IntToStr(gWinSizeY) + ', ' + IntToStr(gBPP) + ' bpp'; with TGUIListBox(menu.GetControl('lsResolution')) do @@ -1904,6 +1848,9 @@ begin ItemIndex := 0 else ItemIndex := 1; + + TempResScale := Round(r_pixel_scale - 1); + TGUIScroll(menu.GetControl('scResFactor')).Value := TempResScale; end; procedure ProcApplyVideoOptions(); @@ -1911,18 +1858,34 @@ var menu: TGUIMenu; Fullscreen: Boolean; SWidth, SHeight: Integer; + ScaleChanged: Boolean; str: String; begin menu := TGUIMenu(g_GUI_GetWindow('OptionsVideoResMenu').GetControl('mOptionsVideoResMenu')); str := TGUIListBox(menu.GetControl('lsResolution')).SelectedItem; - SScanf(str, '%dx%d', [@SWidth, @SHeight]); + if str <> '' then + SScanf(str, '%dx%d', [@SWidth, @SHeight]) + else + begin + SWidth := gWinSizeX; + SHeight := gWinSizeY; + end; Fullscreen := TGUISwitch(menu.GetControl('swFullScreen')).ItemIndex = 0; - if (SWidth <> gScreenWidth) or - (SHeight <> gScreenHeight) or - (Fullscreen <> gFullscreen) then + ScaleChanged := False; + if TGUIScroll(menu.GetControl('scResFactor')).Value <> TempResScale then + begin + TempResScale := TGUIScroll(menu.GetControl('scResFactor')).Value; + r_pixel_scale := TempResScale + 1; + ScaleChanged := True; + end; + + if (SWidth <> gWinSizeX) or + (SHeight <> gWinSizeY) or + (Fullscreen <> gFullscreen) or + ScaleChanged then begin gResolutionChange := True; gRC_Width := SWidth; @@ -2150,7 +2113,7 @@ begin begin Name := 'lbMap'; FixedLength := 16; - Text := gnMap; + Text := gsMap; OnClick := @ProcSelectMapMenu; end; with AddSwitch(_lc[I_MENU_GAME_TYPE]) do @@ -2160,7 +2123,7 @@ begin AddItem(_lc[I_MENU_GAME_TYPE_TDM]); AddItem(_lc[I_MENU_GAME_TYPE_CTF]); AddItem(_lc[I_MENU_GAME_TYPE_COOP]); - case g_Game_TextToMode(gnGameMode) of + case g_Game_TextToMode(gsGameMode) of GM_NONE, GM_DM: ItemIndex := 0; GM_TDM: ItemIndex := 1; @@ -2168,7 +2131,7 @@ begin GM_SINGLE, GM_COOP: ItemIndex := 3; end; - OnChange := ProcSwitchMonstersNet; + OnChange := ProcSwitchMonstersCustom; end; with AddEdit(_lc[I_MENU_TIME_LIMIT]) do begin @@ -2176,8 +2139,8 @@ begin OnlyDigits := True; Width := 4; MaxLength := 5; - if gnTimeLimit > 0 then - Text := IntToStr(gnTimeLimit); + if gsTimeLimit > 0 then + Text := IntToStr(gsTimeLimit); end; with AddEdit(_lc[I_MENU_GOAL_LIMIT]) do begin @@ -2185,42 +2148,41 @@ begin OnlyDigits := True; Width := 4; MaxLength := 5; - if gnGoalLimit > 0 then - Text := IntToStr(gnGoalLimit); + if gsGoalLimit > 0 then + Text := IntToStr(gsGoalLimit); end; with AddEdit(_lc[I_MENU_MAX_LIVES]) do begin Name := 'edMaxLives'; OnlyDigits := True; Width := 4; - MaxLength := 3; - if gnMaxLives > 0 then - Text := IntToStr(gnMaxLives); + MaxLength := 5; + if gsMaxLives > 0 then + Text := IntToStr(gsMaxLives); + end; + with AddEdit(_lc[I_MENU_ITEM_RESPAWN_TIME]) do + begin + Name := 'edItemRespawnTime'; + OnlyDigits := True; + Width := 4; + MaxLength := 5; + if gsItemRespawnTime > 0 then + Text := IntToStr(gsItemRespawnTime); end; - with AddSwitch(_lc[I_MENU_SERVER_PLAYERS]) do + with AddSwitch(_lc[I_MENU_PLAYERS]) do begin Name := 'swPlayers'; AddItem(_lc[I_MENU_COUNT_NONE]); AddItem(_lc[I_MENU_PLAYERS_ONE]); AddItem(_lc[I_MENU_PLAYERS_TWO]); - ItemIndex := gnPlayers; + ItemIndex := gsPlayers; end; with AddSwitch(_lc[I_MENU_TEAM_DAMAGE]) do begin Name := 'swTeamDamage'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gnTeamDamage then - ItemIndex := 0 - 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 + if LongBool(gsGameFlags and GAME_OPTION_TEAMDAMAGE) then ItemIndex := 0 else ItemIndex := 1; @@ -2230,7 +2192,7 @@ begin Name := 'swDeathmatchKeys'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gnDeathmatchKeys then + if LongBool(gsGameFlags and GAME_OPTION_DMKEYS) then ItemIndex := 0 else ItemIndex := 1; @@ -2240,7 +2202,7 @@ begin Name := 'swEnableExits'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gnAllowExit then + if LongBool(gsGameFlags and GAME_OPTION_ALLOWEXIT) then ItemIndex := 0 else ItemIndex := 1; @@ -2250,7 +2212,7 @@ begin Name := 'swWeaponStay'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gnWeaponStay then + if LongBool(gsGameFlags and GAME_OPTION_WEAPONSTAY) then ItemIndex := 0 else ItemIndex := 1; @@ -2260,7 +2222,7 @@ begin Name := 'swMonsters'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gnMonsters then + if LongBool(gsGameFlags and GAME_OPTION_MONSTERS) then ItemIndex := 0 else ItemIndex := 1; @@ -2272,9 +2234,9 @@ begin AddItem(_lc[I_MENU_BOTS_VS_MONSTERS]); AddItem(_lc[I_MENU_BOTS_VS_ALL]); ItemIndex := 2; - if gnBotsVS = 'Players' then + if not LongBool(gsGameFlags and GAME_OPTION_BOTVSMONSTER) then ItemIndex := 0; - if gnBotsVS = 'Monsters' then + if not LongBool(gsGameFlags and GAME_OPTION_BOTVSPLAYER) then ItemIndex := 1; end; AddSpace(); @@ -2370,7 +2332,7 @@ begin begin Name := 'lbMap'; FixedLength := 16; - Text := gcMap; + Text := gsMap; OnClick := @ProcSelectMapMenu; end; with AddSwitch(_lc[I_MENU_GAME_TYPE]) do @@ -2380,7 +2342,7 @@ begin AddItem(_lc[I_MENU_GAME_TYPE_TDM]); AddItem(_lc[I_MENU_GAME_TYPE_CTF]); AddItem(_lc[I_MENU_GAME_TYPE_COOP]); - case g_Game_TextToMode(gcGameMode) of + case g_Game_TextToMode(gsGameMode) of GM_NONE, GM_DM: ItemIndex := 0; GM_TDM: ItemIndex := 1; @@ -2396,8 +2358,8 @@ begin OnlyDigits := True; Width := 4; MaxLength := 5; - if gcTimeLimit > 0 then - Text := IntToStr(gcTimeLimit); + if gsTimeLimit > 0 then + Text := IntToStr(gsTimeLimit); end; with AddEdit(_lc[I_MENU_GOAL_LIMIT]) do begin @@ -2405,8 +2367,8 @@ begin OnlyDigits := True; Width := 4; MaxLength := 5; - if gcGoalLimit > 0 then - Text := IntToStr(gcGoalLimit); + if gsGoalLimit > 0 then + Text := IntToStr(gsGoalLimit); end; with AddEdit(_lc[I_MENU_MAX_LIVES]) do begin @@ -2414,8 +2376,17 @@ begin OnlyDigits := True; Width := 4; MaxLength := 5; - if gcMaxLives > 0 then - Text := IntToStr(gcMaxLives); + if gsMaxLives > 0 then + Text := IntToStr(gsMaxLives); + end; + with AddEdit(_lc[I_MENU_ITEM_RESPAWN_TIME]) do + begin + Name := 'edItemRespawnTime'; + OnlyDigits := True; + Width := 4; + MaxLength := 5; + if gsItemRespawnTime > 0 then + Text := IntToStr(gsItemRespawnTime); end; with AddSwitch(_lc[I_MENU_PLAYERS]) do begin @@ -2423,24 +2394,14 @@ begin AddItem(_lc[I_MENU_COUNT_NONE]); AddItem(_lc[I_MENU_PLAYERS_ONE]); AddItem(_lc[I_MENU_PLAYERS_TWO]); - ItemIndex := gcPlayers; + ItemIndex := gsPlayers; end; with AddSwitch(_lc[I_MENU_TEAM_DAMAGE]) do begin Name := 'swTeamDamage'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gcTeamDamage then - ItemIndex := 0 - 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 + if LongBool(gsGameFlags and GAME_OPTION_TEAMDAMAGE) then ItemIndex := 0 else ItemIndex := 1; @@ -2450,7 +2411,7 @@ begin Name := 'swDeathmatchKeys'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gcDeathmatchKeys then + if LongBool(gsGameFlags and GAME_OPTION_DMKEYS) then ItemIndex := 0 else ItemIndex := 1; @@ -2460,7 +2421,7 @@ begin Name := 'swEnableExits'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gcAllowExit then + if LongBool(gsGameFlags and GAME_OPTION_ALLOWEXIT) then ItemIndex := 0 else ItemIndex := 1; @@ -2470,7 +2431,7 @@ begin Name := 'swWeaponStay'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gcWeaponStay then + if LongBool(gsGameFlags and GAME_OPTION_WEAPONSTAY) then ItemIndex := 0 else ItemIndex := 1; @@ -2480,7 +2441,7 @@ begin Name := 'swMonsters'; AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); - if gcMonsters then + if LongBool(gsGameFlags and GAME_OPTION_MONSTERS) then ItemIndex := 0 else ItemIndex := 1; @@ -2492,9 +2453,9 @@ begin AddItem(_lc[I_MENU_BOTS_VS_MONSTERS]); AddItem(_lc[I_MENU_BOTS_VS_ALL]); ItemIndex := 2; - if gcBotsVS = 'Players' then + if not LongBool(gsGameFlags and GAME_OPTION_BOTVSMONSTER) then ItemIndex := 0; - if gcBotsVS = 'Monsters' then + if not LongBool(gsGameFlags and GAME_OPTION_BOTVSPLAYER) then ItemIndex := 1; end; AddSpace(); @@ -2715,6 +2676,11 @@ begin AddItem(_lc[I_MENU_YES]); AddItem(_lc[I_MENU_NO]); end; + with AddScroll(_lc[I_MENU_GAME_SCALE_FACTOR]) do + begin + Name := 'scResFactor'; + Max := 10; + end; AddSpace(); AddButton(@ProcApplyVideoOptions, _lc[I_MENU_RESOLUTION_APPLY]); UpdateIndex();