X-Git-Url: http://deadsoftware.ru/gitweb?p=d2df-sdl.git;a=blobdiff_plain;f=src%2Fgame%2Fg_menu.pas;h=fe650785d11a8b34baa3b623089b0788e1b37349;hp=3cfec36d6f79ba50f00c1d6c9748991bf9fe71b7;hb=676995a77ad243efc0abee75841f81e86a7262a0;hpb=d985a32a91a55643f61e83e9ed412686906977ca diff --git a/src/game/g_menu.pas b/src/game/g_menu.pas index 3cfec36..fe65078 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 @@ -667,12 +668,18 @@ begin 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 @@ -731,12 +738,18 @@ begin 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 @@ -1691,6 +1704,11 @@ begin ItemIndex := 0 else ItemIndex := 1; + with TGUISwitch(menu.GetControl('swDeathmatchKeys')) do + if LongBool(Options and GAME_OPTION_DMKEYS) then + ItemIndex := 0 + else + ItemIndex := 1; TGUIEdit(menu.GetControl('edTimeLimit')).Text := IntToStr(TimeLimit); TGUIEdit(menu.GetControl('edGoalLimit')).Text := IntToStr(GoalLimit); @@ -1709,6 +1727,7 @@ 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]); TGUIEdit(menu.GetControl('edTimeLimit')).Enabled := True; TGUILabel(menu.GetControlsText('edTimeLimit')).Color := MENU_ITEMSTEXT_COLOR; TGUIEdit(menu.GetControl('edGoalLimit')).Enabled := True; @@ -1720,6 +1739,7 @@ begin else begin TGUISwitch(menu.GetControl('swTeamDamage')).Enabled := True; + TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled := False; with TGUIEdit(menu.GetControl('edTimeLimit')) do begin Enabled := False; @@ -1763,6 +1783,14 @@ begin Options := Options and (not GAME_OPTION_TEAMDAMAGE); end; + if TGUISwitch(menu.GetControl('swDeathmatchKeys')).Enabled then + begin + if TGUISwitch(menu.GetControl('swDeathmatchKeys')).ItemIndex = 0 then + Options := Options or GAME_OPTION_DMKEYS + else + Options := Options and (not GAME_OPTION_DMKEYS); + end; + if TGUIEdit(menu.GetControl('edTimeLimit')).Enabled then begin n := StrToIntDef(TGUIEdit(menu.GetControl('edTimeLimit')).Text, TimeLimit); @@ -1854,8 +1882,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 @@ -1877,6 +1905,9 @@ begin ItemIndex := 0 else ItemIndex := 1; + + TempResScale := Round(r_pixel_scale - 1); + TGUIScroll(menu.GetControl('scResFactor')).Value := TempResScale; end; procedure ProcApplyVideoOptions(); @@ -1884,18 +1915,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; @@ -2188,6 +2235,26 @@ 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_DEATHMATCH_KEYS]) do + begin + Name := 'swDeathmatchKeys'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + if gnDeathmatchKeys then + ItemIndex := 0 + else + ItemIndex := 1; + end; with AddSwitch(_lc[I_MENU_ENABLE_EXITS]) do begin Name := 'swEnableExits'; @@ -2388,6 +2455,26 @@ 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_DEATHMATCH_KEYS]) do + begin + Name := 'swDeathmatchKeys'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + if gcDeathmatchKeys then + ItemIndex := 0 + else + ItemIndex := 1; + end; with AddSwitch(_lc[I_MENU_ENABLE_EXITS]) do begin Name := 'swEnableExits'; @@ -2648,6 +2735,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(); @@ -3248,6 +3340,13 @@ begin AddItem(_lc[I_MENU_NO]); ItemIndex := 1; end; + with AddSwitch(_lc[I_MENU_DEATHMATCH_KEYS]) do + begin + Name := 'swDeathmatchKeys'; + AddItem(_lc[I_MENU_YES]); + AddItem(_lc[I_MENU_NO]); + ItemIndex := 1; + end; with AddEdit(_lc[I_MENU_TIME_LIMIT]) do begin Name := 'edTimeLimit';