rott/kf_sources/GUI2K4/Classes/UT2K4Tab_DetailSettings.uc
2026-07-14 20:27:09 +07:00

2148 lines
60 KiB
Ucode

//==============================================================================
// Description
//
// Created by Ron Prestenback
// © 2003, Epic Games, Inc. All Rights Reserved
//==============================================================================
class UT2K4Tab_DetailSettings extends Settings_Tabs;
struct DisplayMode
{
var int Width,
Height;
};
// if _RO_
const RENDERMODECOUNT = 3;
// else
//const RENDERMODECOUNT = 2;
// end if _RO_
var() DisplayMode DisplayModes[22];
var() localized string BitDepthText[2];
var() localized string DetailLevels[9];
var() localized string ShadowOptions[3];
var() localized string RenderModeText[RENDERMODECOUNT];
var() array<int> MultiSampleModes;
var() array<int> MultiSampleQualityModes;
var() localized array<int> AnisotropyModes;
var() string RenderMode[RENDERMODECOUNT];
var() string DisplayPromptMenu;
var() bool bPlayedSound;
var automated GUISectionBackground sb_Section1, sb_Section2, sb_Section3;
var automated GUIImage i_Gamma, i_GammaBar;
var automated moComboBox co_Texture, co_Char, co_World, co_Physics, co_Decal, co_MeshLOD,
co_Resolution, co_ColorDepth, co_RenderDevice, co_Shadows, co_MultiSamples, co_Anisotropy;
var automated moCheckBox ch_Decals, ch_DynLight, ch_Coronas,
ch_Textures, ch_Projectors, ch_DecoLayers,
ch_Trilinear, ch_FullScreen, ch_Weather,
ch_ForceFSAAScreenshotSupport;
var automated moSlider sl_Gamma, sl_Brightness, sl_Contrast, sl_DistanceLOD;
// Instance values
var() noexport transient string sRes, sResD, sRenDev, sRenDevD;
var() noexport transient float fGamma, fBright, fContrast, fDistance, fDistanceD;
var() noexport transient bool bDecal, bDynLight, bTexture, bCorona, bTrilin,
bProj, bFol, bFullScreen, bWeather,
bDecalD, bDynLightD, bTextureD, bCoronaD, bTrilinD,
bProjD, bFolD, bFullScreenD, bWeatherD,
bForceFSAAScreenshotSupportD, bForceFSAAScreenshotSupport;
var() noexport transient int iColDepth, iTexture, iChar, iPhys, iWorld, iDecal, iShadow, iMeshLOD,
iColDepthD, iTextureD, iCharD, iWorldD, iPhysD, iDecalD, iShadowD, iMeshLODD,
iMultiSamplesD, iMultiSamples, iMultiSamplesQLD, iMultiSamplesQL, iAnisotropyD, iAnisotropy;
var() private noexport editconst transient bool bDemo;
var() noexport bool bIgnoreResNotice, bInvalidRes, bIgnoreChange;
var() localized string RelaunchQuestion, InvalidSelectionText;
function InitComponent(GUIController MyController, GUIComponent MyOwner)
{
Super.InitComponent(MyController, MyOwner);
// IF _RO_
//bDemo = PlayerOwner().Level.IsDemoBuild();
InitializeCombos();
SetupPositions();
}
event Opened(GUIComponent Sender)
{
Super.Opened(Sender);
CheckSupportedResolutions();
}
function ShowPanel(bool bShow)
{
Super.ShowPanel(bShow);
if ( bShow )
CheckSliders();
}
function InitializeCombos()
{
local int i;
local array<GUIListElem> Options;
for (i = 0; i < Components.Length; i++)
{
if (moComboBox(Components[i]) != None)
{
GetComboOptions( moComboBox(Components[i]), Options );
moComboBox(Components[i]).MyComboBox.List.Elements = Options;
moComboBox(Components[i]).MyComboBox.List.ItemCount = Options.Length;
moComboBox(Components[i]).ReadOnly(True);
}
}
if ( !bDemo )
{
co_Texture.MyComboBox.MaxVisibleItems = 9;
co_Char.MyComboBox.MaxVisibleItems = 9;
}
}
function CheckSliders()
{
// SDLDrv can adjust gamma ramps in a Window, WinDrv can't... --ryan.
if ( ( bFullscreen ) || ( !PlatformIsWindows() ) )
{
EnableComponent(sl_Gamma);
EnableComponent(sl_Contrast);
EnableComponent(sl_Brightness);
}
else
{
DisableComponent(sl_Gamma);
DisableComponent(sl_Contrast);
DisableComponent(sl_Brightness);
}
}
function SetupPositions()
{
sb_Section1.ManageComponent(co_RenderDevice);
sb_Section1.ManageComponent(co_Resolution);
sb_Section1.ManageComponent(co_ColorDepth);
sb_Section1.ManageComponent(ch_Fullscreen);
sb_Section1.ManageComponent(sl_Gamma);
sb_Section1.ManageComponent(sl_Brightness);
sb_Section1.ManageComponent(sl_Contrast);
sb_Section2.Managecomponent(co_Texture);
sb_Section2.ManageComponent(co_Char);
sb_Section2.ManageComponent(co_World);
sb_Section2.ManageComponent(co_Physics);
sb_Section2.ManageComponent(co_Decal);
sb_Section2.ManageComponent(co_Shadows);
sb_Section2.ManageComponent(co_MeshLOD);
sb_Section2.ManageComponent(co_MultiSamples);
sb_Section2.ManageComponent(co_Anisotropy);
sb_Section2.ManageComponent(ch_ForceFSAAScreenshotSupport);
sb_Section2.ManageComponent(ch_Decals);
sb_Section2.ManageComponent(ch_DynLight);
sb_Section2.ManageComponent(ch_Coronas);
sb_Section2.ManageComponent(ch_Textures);
sb_Section2.ManageComponent(ch_Projectors);
sb_Section2.ManageComponent(ch_DecoLayers);
sb_Section2.ManageComponent(ch_Trilinear);
sb_Section2.ManageComponent(ch_Weather);
sb_Section2.ManageComponent(sl_DistanceLOD);
sb_Section3.ManageComponent(i_GammaBar);
}
function CheckSupportedResolutions()
{
local int i, Index, BitDepth;
local string CurrentSelection, Str, W, H, WH;
local bool bStandard, bSupported, bOldIgnoreChange;
local PlayerController PC;
PC = PlayerOwner();
CurrentSelection = co_Resolution.GetText();
// Disable all notifications!!
bOldIgnoreChange = bIgnoreChange;
bIgnoreChange = True;
if (co_ColorDepth != None && co_ColorDepth.ItemCount() > 0)
BitDepth = int(Left(co_ColorDepth.GetText(), 2));
// Don't let user create non-fullscreen window bigger than highest
// supported resolution, or MacOS X client crashes. --ryan.
for(i = 0; i < ArrayCount(DisplayModes); i++)
{
W = string(DisplayModes[i].Width);
H = string(DisplayModes[i].Height);
WH = W $ "x" $ H;
Str = "SUPPORTEDRESOLUTION WIDTH="$W@"HEIGHT="$H@"BITDEPTH="$BitDepth;
if (CurrentSelection ~= WH)
bStandard = True;
Index = co_Resolution.FindIndex(WH);
bSupported = bool(PC.ConsoleCommand(Str));
if ( !bSupported && co_Resolution.MyComboBox.List.IsValidIndex(Index) )
co_Resolution.RemoveItem(Index, 1);
else if ( bSupported && !co_Resolution.MyComboBox.List.IsValidIndex(Index) )
AddNewResolution(WH);
}
if (!bStandard)
{
Divide(CurrentSelection, "x", W, H);
Str = "SUPPORTEDRESOLUTION WIDTH="$W@"HEIGHT="$H@"BITDEPTH="$BitDepth;
bSupported = bool(PC.ConsoleCommand(Str));
if ( !bSupported )
{
Index = co_Resolution.FindIndex(CurrentSelection);
bInvalidRes = True;
}
}
CheckSliders();
co_Resolution.SetText(CurrentSelection);
bIgnoreChange = bOldIgnoreChange;
}
function bool InternalOnPreDraw(Canvas C)
{
if ( Controller.ActivePage == PageOwner && bInvalidRes )
{
bInvalidRes = False;
Controller.OpenMenu("GUI2K4.UT2K4GenericMessageBox","",InvalidSelectionText);
}
return False;
}
function ResolutionChanged(int NewX, int NewY)
{
if ( !bIgnoreResNotice )
{
if ( Controller.ActivePage == PageOwner )
PageOwner.CheckResolution(false, Controller);
Refresh();
}
else
InternalOnLoadINI(co_ColorDepth,"");
}
function Refresh()
{
InternalOnLoadINI(co_Resolution,"");
InternalOnLoadINI(co_ColorDepth,"");
InternalOnLoadINI(ch_FullScreen,"");
InternalOnLoadINI(co_MultiSamples,"");
InternalOnLoadINI(co_Anisotropy,"");
CheckSupportedResolutions();
}
function int AddNewResolution(string NewDisplayMode)
{
local int i, ItemW, ItemH, InWidth, InHeight;
local bool bTemp;
local string Str, StrW, StrH;
bTemp = bIgnoreChange;
bIgnoreChange = True;
// first, find out if this resolution exists already
i = co_Resolution.FindIndex(NewDisplayMode);
if (i >= 0)
{
bIgnoreChange = bTemp;
return i;
}
Divide(NewDisplayMode, "x", StrW, StrH);
InWidth = int(StrW);
InHeight = int(StrH);
// not there, so add it in the appropriate spot
for (i = 0; i < co_Resolution.ItemCount(); i++)
{
Str = co_Resolution.GetItem(i);
Divide(Str, "x", StrW, StrH);
ItemW = int(StrW);
ItemH = int(StrH);
if ( ItemW == InWidth )
{
if ( ItemH > InHeight )
break;
}
else if ( ItemW > InWidth )
break;
}
if (i == co_Resolution.ItemCount())
co_Resolution.AddItem(NewDisplayMode);
else
co_Resolution.MyComboBox.List.Insert(i, NewDisplayMode);
bIgnoreChange = bTemp;
return i;
}
function InternalOnLoadINI(GUIComponent Sender, string s)
{
local bool a, b;
local int i;
local PlayerController PC;
local string tempStr;
PC = PlayerOwner();
switch (Sender)
{
case co_Texture:
s = GetGUIString(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager TextureDetailWorld"));
iTexture = co_Texture.FindIndex(s);
iTextureD = iTexture;
co_Texture.SilentSetIndex(iTexture);
break;
case co_Char:
s = GetGUIString(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager TextureDetailPlayerSkin"));
iChar = co_Char.FindIndex(s);
iCharD = iChar;
co_Char.SilentSetIndex(iChar);
break;
case co_World:
a = bool(PC.ConsoleCommand("get ini:Engine.Engine.RenderDevice HighDetailActors"));
b = bool(PC.ConsoleCommand("get ini:Engine.Engine.RenderDevice SuperHighDetailActors"));
if(b)
iWorld = 5;
else if(a)
iWorld = 4;
else
iWorld = 3;
iWorldD = iWorld;
i = co_World.FindIndex(DetailLevels[iWorld]);
if ( i != -1 )
co_World.SilentSetIndex(i);
break;
case co_MeshLOD:
switch ( class'LevelInfo'.default.MeshLODDetailLevel )
{
case MDL_Low: iMeshLOD = 3; break;
case MDL_Medium: iMeshLOD = 4; break;
case MDL_High: iMeshLOD = 5; break;
case MDL_Ultra: iMeshLOD = 8; break;
}
iMeshLODD = iMeshLOD;
i = co_MeshLOD.FindIndex(DetailLevels[iMeshLOD]);
if ( i != -1 )
co_MeshLOD.SilentSetIndex(i);
break;
case co_Physics:
if(class'LevelInfo'.default.PhysicsDetailLevel == PDL_Low)
{
iPhys = 3;
i = co_Physics.FindIndex(DetailLevels[3]);
if ( i != -1 )
co_Physics.SilentSetIndex(i);
}
else if(class'LevelInfo'.default.PhysicsDetailLevel == PDL_Medium)
{
iPhys = 4;
i = co_Physics.FindIndex(DetailLevels[4]);
if ( i != -1 )
co_Physics.SilentSetIndex(i);
}
else
{
iPhys = 5;
i = co_Physics.FindIndex(DetailLevels[5]);
if ( i != -1 )
co_Physics.SilentSetIndex(i);
}
iPhysD = iPhys;
break;
case co_Decal:
iDecal = class'LevelInfo'.default.DecalStayScale;
iDecalD = iDecal;
co_Decal.SilentSetIndex(iDecal);
break;
case co_Resolution:
// Resolution
// GameResolution is set if menu requires 640x480 but current resolution is smaller than that
if(Controller.GameResolution != "")
sRes = Controller.GameResolution;
else sRes = Controller.GetCurrentRes();
sResD = sRes;
i = AddNewResolution(sRes);
if ( i >= 0 && i < co_Resolution.ItemCount() )
co_Resolution.SilentSetIndex(i);
break;
case co_ColorDepth:
if (bool(PC.ConsoleCommand("get ini:Engine.Engine.RenderDevice Use16bit")))
iColDepth = 0;
else iColDepth = 1;
iColDepthD = iColDepth;
co_ColorDepth.SilentSetIndex(iColDepth);
if (! bool(PC.ConsoleCommand("ISFULLSCREEN")) )
co_ColorDepth.DisableMe();
else
co_ColorDepth.EnableMe();
break;
case co_RenderDevice:
sRenDev = GetNativeClassName("Engine.Engine.RenderDevice");
sRenDevD = sRenDev;
co_RenderDevice.SetComponentValue(sRenDev,true);
break;
case co_Shadows:
tempStr = GetNativeClassName("Engine.Engine.RenderDevice");
// No render-to-texture on anything but Direct3D.
if ((tempStr == "D3DDrv.D3DRenderDevice") ||
(tempStr == "D3D9Drv.D3D9RenderDevice"))
{
a = bool(PC.ConsoleCommand("get UnrealGame.UnrealPawn bPlayerShadows"));
b = bool(PC.ConsoleCommand("get UnrealGame.UnrealPawn bBlobShadow"));
if ( b )
iShadow = 1;
else if (a)
iShadow = 2;
else
iShadow = 0;
}
else
{
b = bool(PC.ConsoleCommand("get UnrealGame.UnrealPawn bBlobShadow"));
if ( b )
iShadow = 1;
else
iShadow = 0;
}
iShadowD = iShadow;
co_Shadows.SilentSetIndex(iShadow);
break;
case co_MultiSamples:
iMultiSamples = int(PC.ConsoleCommand("get ini:Engine.Engine.RenderDevice MultiSamples"));
iMultiSamplesQL = int(PC.ConsoleCommand("get ini:Engine.Engine.RenderDevice QualityLevels"));
if (iMultiSamples!=0&&iMultiSamples!=1)
if (bool(PC.ConsoleCommand("ISNVIDIAGPU"))==true&&int(PC.ConsoleCommand("SUPPORTEDQUALITYLEVELS MS=1"))==4)
{
if (iMultiSamples==2)
iMultiSamplesQL=0;
else if (iMultiSamples==4)
iMultiSamplesQL=2;
else if (iMultiSamples==8)
iMultiSamplesQL=2;
else
iMultiSamplesQL=0;
iMultiSamples=1;
}
for(i=0;i<=MultiSampleModes.Length;++i)
{
if (i == MultiSampleModes.Length)
{
iMultiSamples = i-1;
iMultiSamplesQL=MultiSampleQualityModes[i-1];
break;
}
else if(MultiSampleModes[i]==iMultiSamples&&MultiSampleQualityModes[i]==iMultiSamplesQL)
{
iMultiSamples=i;
break;
}
else if(MultiSampleModes[i]>iMultiSamples)
{
if(i>0)
{
iMultiSamples=i-1;
iMultiSamplesQL=MultiSampleQualityModes[i-1];
}
else
{
iMultiSamples=0;
iMultiSamplesQL=0;
}
break;
}
}
iMultiSamplesD=iMultiSamples;
iMultiSamplesQLD = iMultiSamples;
co_MultiSamples.SilentSetIndex(iMultiSamples);
break;
case co_Anisotropy:
iAnisotropy = int(PC.ConsoleCommand("get ini:Engine.Engine.RenderDevice LevelOfAnisotropy"));
for(i=0;i<=AnisotropyModes.Length;++i)
{
if(i==AnisotropyModes.Length)
{
iAnisotropy=i-1;
break;
}
else if(AnisotropyModes[i]==iAnisotropy)
{
iAnisotropy=i;
break;
}
else if(AnisotropyModes[i]>iAnisotropy)
{
if(i>0)
{
iAnisotropy=i-1;
}
else
{
iAnisotropy=0;
}
break;
}
}
iAnisotropyD = iAnisotropy;
co_Anisotropy.SilentSetIndex(iAnisotropy);
break;
case ch_ForceFSAAScreenshotSupport:
bForceFSAAScreenshotSupport = bool(PC.ConsoleCommand("get ini:Engine.Engine.RenderDevice ForceFSAAScreenshotSupport"));
bForceFSAAScreenshotSupportD = bForceFSAAScreenshotSupport;
ch_ForceFSAAScreenshotSupport.SetComponentValue(bForceFSAAScreenshotSupport,true);
break;
case ch_DynLight:
bDynLight = !bool(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager NoDynamicLights"));
bDynLightD = bDynLight;
ch_DynLight.SetComponentValue(bDynLight,true);
break;
case ch_FullScreen:
bFullScreen = bool(PC.ConsoleCommand("ISFULLSCREEN"));
bFullScreenD = bFullScreen;
moCheckBox(Sender).SetComponentValue(bFullScreen,true);
break;
case ch_Trilinear:
bTrilin = bool(PC.ConsoleCommand("get ini:Engine.Engine.RenderDevice UseTrilinear"));
bTrilinD = bTrilin;
ch_Trilinear.SetComponentValue(bTrilin,true);
break;
case ch_Projectors:
bProj = bool(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager Projectors"));
bProjD = bProj;
ch_Projectors.SetComponentValue(bProj,true);
break;
case ch_DecoLayers:
bFol = bool(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager DecoLayers"));
bFolD = bFol;
ch_DecoLayers.SetComponentValue(bFol,true);
break;
case ch_Textures:
bTexture = bool(PC.ConsoleCommand("get ini:Engine.Engine.RenderDevice DetailTextures"));
bTextureD = bTexture;
ch_Textures.SetComponentValue(bTexture,true);
break;
case ch_Coronas:
bCorona = bool(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager Coronas"));
bCoronaD = bCorona;
ch_Coronas.SetComponentValue(bCorona,true);
break;
case ch_Decals:
bDecal = bool(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager Decals"));
bDecalD = bDecal;
ch_Decals.SetComponentValue(bDecal,true);
UpdateDecalStay();
break;
case sl_Gamma:
fGamma = float(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager Gamma"));
sl_Gamma.SetComponentValue(fGamma,true);
break;
case sl_Brightness:
fBright = float(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager Brightness"));
sl_Brightness.SetComponentValue(fBright,true);
break;
case sl_Contrast:
fContrast = float(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager Contrast"));
sl_Contrast.SetComponentValue(fContrast,true);
break;
case ch_Weather:
bWeather = bool(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager WeatherEffects"));
bWeatherD = bWeather;
ch_Weather.SetComponentValue(bWeather,true);
break;
case sl_DistanceLOD:
fDistance = float(PC.ConsoleCommand("get ini:Engine.Engine.ViewportManager DrawDistanceLOD"));
fDistanceD = fDistance;
sl_DistanceLOD.SetComponentValue(fDistance,true);
break;
default:
log(Name@"Unknown component calling LoadINI:"$ GUIMenuOption(Sender).Caption);
GUIMenuOption(Sender).SetComponentValue(s,true);
}
}
function ResetClicked()
{
local int i;
Super.ResetClicked();
class'LevelInfo'.static.ResetConfig("MeshLODDetailLevel");
class'LevelInfo'.static.ResetConfig("PhysicsDetailLevel");
class'LevelInfo'.static.ResetConfig("DecalStayScale");
class'UnrealPawn'.static.ResetConfig("bPlayerShadows");
class'UnrealPawn'.static.ResetConfig("bBlobShadow");
ResetViewport();
ResetRenderDevice();
for (i = 0; i < Components.Length; i++)
Components[i].LoadINI();
}
function ResetViewport()
{
local class<Client> ViewportClass;
ViewportClass = class<Client>(DynamicLoadObject(GetNativeClassName("Engine.Engine.ViewportManager"), class'Class'));
ViewportClass.static.ResetConfig("WindowedViewportX");
ViewportClass.static.ResetConfig("WindowedViewportY");
ViewportClass.static.ResetConfig("FullscreenViewportX");
ViewportClass.static.ResetConfig("FullscreenViewportY");
ViewportClass.static.ResetConfig("Brightness");
ViewportClass.static.ResetConfig("Contrast");
ViewportClass.static.ResetConfig("Gamma");
ViewportClass.static.ResetConfig("StartupFullScreen");
ViewportClass.static.ResetConfig("NoLighting");
ViewportClass.static.ResetConfig("MinDesiredFrameRate");
ViewportClass.static.ResetConfig("Decals");
ViewportClass.static.ResetConfig("Coronas");
ViewportClass.static.ResetConfig("DecoLayers");
ViewportClass.static.ResetConfig("Projectors");
ViewportClass.static.ResetConfig("NoDynamicLights");
ViewportClass.static.ResetConfig("ReportDynamicUploads");
ViewportClass.static.ResetConfig("TextureDetailInterface");
ViewportClass.static.ResetConfig("TextureDetailTerrain");
ViewportClass.static.ResetConfig("TextureDetailWeaponSkin");
ViewportClass.static.ResetConfig("TextureDetailPlayerSkin");
ViewportClass.static.ResetConfig("TextureDetailWorld");
ViewportClass.static.ResetConfig("TextureDetailRendermap");
ViewportClass.static.ResetConfig("TextureDetailLightmap");
ViewportClass.static.ResetConfig("NoFractalAnim");
ViewportClass.static.ResetConfig("WeatherEffects");
ViewportClass.static.ResetConfig("DrawDistanceLOD");
}
function ResetRenderDevice()
{
local class<RenderDevice> RenderClass;
if ( !(sRenDev ~= sRenDevD) )
Controller.SetRenderDevice(sRenDevD);
RenderClass = class<RenderDevice>(DynamicLoadObject(sRenDevD, class'Class'));
RenderClass.static.ResetConfig("DetailTextures");
RenderClass.static.ResetConfig("HighDetailActors");
RenderClass.static.ResetConfig("SuperHighDetailActors");
RenderClass.static.ResetConfig("UsePrecaching");
RenderClass.static.ResetConfig("UseTrilinear");
RenderClass.static.ResetConfig("UseTripleBuffering");
RenderClass.static.ResetConfig("UseHardwareTL");
RenderClass.static.ResetConfig("UseHardwareVS");
RenderClass.static.ResetConfig("UseCubemaps");
RenderClass.static.ResetConfig("DesiredRefreshRate");
RenderClass.static.ResetConfig("UseCompressedLightmaps");
RenderClass.static.ResetConfig("UseStencil");
RenderClass.static.ResetConfig("Use16bit");
RenderClass.static.ResetConfig("Use16bitTextures");
RenderClass.static.ResetConfig("MaxPixelShaderVersion");
RenderClass.static.ResetConfig("UseVSync");
RenderClass.static.ResetConfig("LevelOfAnisotropy");
RenderClass.static.ResetConfig("DetailTexMipBias");
RenderClass.static.ResetConfig("DefaultTexMipBias");
RenderClass.static.ResetConfig("UseNPatches");
RenderClass.static.ResetConfig("TesselationFactor");
RenderClass.static.ResetConfig("CheckForOverflow");
RenderClass.static.ResetConfig("AvoidHitches");
RenderClass.static.ResetConfig("OverrideDesktopRefreshRate");
RenderClass.static.ResetConfig("MultiSamples");
RenderClass.static.ResetConfig("ForceFSAAScreenshotSupport");
}
function SaveSettings()
{
local string t, v, Str;
local PlayerController PC;
local bool bUnreal, bLevel;
local bool bResetWindow;
Super.SaveSettings();
PC = PlayerOwner();
bResetWindow = false;
if ( sRenDev != sRenDevD )
{
if ( Controller.SetRenderDevice(sRenDev) )
sRenDevD = sRenDev;
}
if (iTexture != iTextureD)
{
t = "set ini:Engine.Engine.ViewportManager TextureDetail";
Str = DetailLevels[iTexture];
v = GetConfigString(Str);
PC.ConsoleCommand(t$"Terrain"@v);
PC.ConsoleCommand(t$"World"@v);
PC.ConsoleCommand(t$"Rendermap"@v);
PC.ConsoleCommand(t$"Lightmap"@v);
PC.ConsoleCommand("flush");
iTextureD = iTexture;
}
if (iChar != iCharD)
{
t = "set ini:Engine.Engine.ViewportManager TextureDetail";
Str = DetailLevels[iChar];
v = GetConfigString(Str);
PC.ConsoleCommand(t$"WeaponSkin"@v);
PC.ConsoleCommand(t$"PlayerSkin"@v);
PC.ConsoleCommand("flush");
iCharD = iChar;
}
if (iWorld != iWorldD)
{
Str = DetailLevels[iWorld];
v = GetConfigString(Str);
switch (iWorld)
{
case 3:
PC.ConsoleCommand("set ini:Engine.Engine.RenderDevice HighDetailActors False");
PC.ConsoleCommand("set ini:Engine.Engine.RenderDevice SuperHighDetailActors False");
PC.Level.DetailChange(DM_Low);
break;
case 4:
PC.ConsoleCommand("set ini:Engine.Engine.RenderDevice HighDetailActors True");
PC.ConsoleCommand("set ini:Engine.Engine.RenderDevice SuperHighDetailActors False");
PC.Level.DetailChange(DM_High);
break;
case 5:
PC.ConsoleCommand("set ini:Engine.Engine.RenderDevice HighDetailActors True");
PC.ConsoleCommand("set ini:Engine.Engine.RenderDevice SuperHighDetailActors True");
PC.Level.DetailChange(DM_SuperHigh);
break;
}
iWorldD = iWorld;
}
if ( iMeshLOD != iMeshLODD )
{
switch (iMeshLOD)
{
case 3:
class'LevelInfo'.default.MeshLODDetailLevel = MDL_Low;
PC.Level.MeshLODDetailLevel = MDL_Low;
break;
case 4:
class'LevelInfo'.default.MeshLODDetailLevel = MDL_Medium;
PC.Level.MeshLODDetailLevel = MDL_Medium;
break;
case 5:
class'LevelInfo'.default.MeshLODDetailLevel = MDL_High;
PC.Level.MeshLODDetailLevel = MDL_High;
break;
case 8:
class'LevelInfo'.default.MeshLODDetailLevel = MDL_Ultra;
PC.Level.MeshLODDetailLevel = MDL_Ultra;
break;
}
iMeshLODD = iMeshLOD;
bLevel = True;
}
if (iPhys != iPhysD)
{
switch (iPhys)
{
case 3:
class'LevelInfo'.default.PhysicsDetailLevel = PDL_Low;
PC.Level.PhysicsDetailLevel = PDL_Low;
break;
case 4:
class'LevelInfo'.default.PhysicsDetailLevel = PDL_Medium;
PC.Level.PhysicsDetailLevel = PDL_Medium;
break;
case 5:
class'LevelInfo'.default.PhysicsDetailLevel = PDL_High;
PC.Level.PhysicsDetailLevel = PDL_High;
break;
}
iPhysD = iPhys;
bLevel = True;
}
// if _RO_
/*
// end if _RO_
if ( iShadow != iShadowD )
{
if ( PC.Pawn != None && UnrealPawn(PC.Pawn) != None )
{
UnrealPawn(PC.Pawn).bBlobShadow = iShadow == 1;
UnrealPawn(PC.Pawn).bPlayerShadows = iShadow > 0;
}
class'UnrealPawn'.default.bBlobShadow = iShadow == 1;
class'UnrealPawn'.default.bPlayerShadows = iShadow > 0;
iShadowD = iShadow;
bUnreal = True;
}
if ( class'Vehicle'.default.bVehicleShadows != (iShadow > 0) )
{
class'Vehicle'.default.bVehicleShadows = iShadow > 0;
class'Vehicle'.static.StaticSaveConfig();
}
// if _RO_
*/
// end if _RO_
if (bDynLight != bDynLightD)
{
PC.ConsoleCommand("set ini:Engine.Engine.ViewportManager NoDynamicLights"@!bDynLight);
bDynLightD = bDynLight;
}
if (iDecal != iDecalD)
{
if (PC.Level != None)
PC.Level.DecalStayScale = iDecal;
class'LevelInfo'.default.DecalStayScale = iDecal;
iDecalD = iDecal;
bLevel = True;
}
if (iMultiSamples != iMultiSamplesD)
{
PC.ConsoleCommand("set ini:Engine.Engine.RenderDevice MultiSamples"@MultiSampleModes[iMultiSamples]);
PC.ConsoleCommand("set ini:Engine.Engine.RenderDevice QualityLevels"@iMultiSamplesQL);
iMultiSamplesQLD = iMultiSamplesQL;
iMultiSamplesD = iMultiSamples;
bResetWindow=true;
}
if (iAnisotropy != iAnisotropyD)
{
PC.ConsoleCommand("set ini:Engine.Engine.RenderDevice LevelOfAnisotropy"@AnisotropyModes[iAnisotropy]);
iAnisotropyD = iAnisotropy;
bResetWindow=true;
}
if (bForceFSAAScreenshotSupport != bForceFSAAScreenshotSupportD)
{
PC.ConsoleCommand("set ini:Engine.Engine.RenderDevice ForceFSAAScreenshotSupport"@bForceFSAAScreenshotSupport);
bForceFSAAScreenshotSupportD = bForceFSAAScreenshotSupport;
bResetWindow=true;
}
if (bTrilin != bTrilinD)
{
PC.ConsoleCommand("set ini:Engine.Engine.RenderDevice UseTrilinear"@bTrilin);
bTrilinD = bTrilin;
}
if (bFol != bFolD)
{
PC.ConsoleCommand("set ini:Engine.Engine.ViewportManager DecoLayers"@bFol);
bFolD = bFol;
}
if (bProj != bProjD)
{
PC.ConsoleCommand("set ini:Engine.Engine.ViewportManager Projectors"@bProj);
bProjD = bProj;
}
if (bTexture != bTextureD)
{
PC.ConsoleCommand("set ini:Engine.Engine.RenderDevice DetailTextures"@bTexture);
bTextureD = bTexture;
}
if (bCorona != bCoronaD)
{
PC.ConsoleCommand("set ini:Engine.Engine.ViewportManager Coronas"@bCorona);
bCoronaD = bCorona;
}
if (bDecal != bDecalD)
{
PC.ConsoleCommand("set ini:Engine.Engine.ViewportManager Decals"@bDecal);
bDecalD = bDecal;
}
if (bWeather != bWeatherD)
{
PC.ConsoleCommand("set ini:Engine.Engine.ViewportManager WeatherEffects"@bWeather);
bWeatherD = bWeather;
}
if ( fDistance != fDistanceD )
{
PC.ConsoleCommand("set ini:Engine.Engine.ViewportManager DrawDistanceLOD" @ fDistance);
PC.Level.UpdateDistanceFogLOD(fDistance);
fDistanceD = fDistance;
}
if (bUnreal)
{
if (PC.Pawn != None && UnrealPawn(PC.Pawn) != None)
UnrealPawn(PC.Pawn).SaveConfig();
else class'UnrealPawn'.static.StaticSaveConfig();
}
if (bLevel)
{
if (PC.Level != None)
PC.Level.SaveConfig();
else class'LevelInfo'.static.StaticSaveConfig();
}
if(bResetWindow)
{
PC.ConsoleCommand("SETRES"@sRes);
}
}
function InternalOnChange(GUIComponent Sender)
{
local string str;
local bool bGoingUp;
local int i;
local PlayerController PC;
PC = PlayerOwner();
// IF _RO_
// we don't want this
//local sound snd;
Super.InternalOnChange(Sender);
if ( bIgnoreChange )
return;
switch (Sender)
{
// These changes take effect immediately
case co_Resolution:
sRes = co_Resolution.GetText();
if (bFullScreen)
str = "f";
else
str = "w";
if (Controller.OpenMenu(DisplayPromptMenu))
{
bIgnoreResNotice = True;
UT2K4VideoChangeOK(Controller.ActivePage).OnClose = VideoChangeClose;
UT2K4VideoChangeOK(Controller.ActivePage).Execute(sRes$"x"$Left(BitDepthText[iColDepth], 2)$str);
}
break;
case ch_FullScreen:
bFullScreen = ch_FullScreen.IsChecked();
if (bFullScreen)
str = "f";
else
str = "w";
if (Controller.OpenMenu(DisplayPromptMenu))
{
bIgnoreResNotice = True;
UT2K4VideoChangeOK(Controller.ActivePage).OnClose = VideoChangeClose;
UT2K4VideoChangeOK(Controller.ActivePage).Execute(sRes$"x"$Left(BitDepthText[iColDepth], 2)$str);
}
break;
case co_RenderDevice:
sRenDev = co_RenderDevice.GetExtra();
if ( sRenDev != sRenDevD && Controller.OpenMenu(Controller.QuestionMenuClass) )
{
GUIQuestionPage(Controller.ActivePage).SetupQuestion(RelaunchQuestion, QBTN_YesNoCancel, QBTN_Cancel);
GUIQuestionPage(Controller.ActivePage).NewOnButtonClick = RenderDeviceClick;
}
break;
case co_ColorDepth:
iColDepth = co_ColorDepth.GetIndex();
if (bFullScreen)
str = "f";
else
str = "w";
if (Controller.OpenMenu(DisplayPromptMenu))
{
bIgnoreResNotice = True;
UT2K4VideoChangeOK(Controller.ActivePage).OnClose = VideoChangeClose;
UT2K4VideoChangeOK(Controller.ActivePage).Execute(sRes$"x"$Left(BitDepthText[iColDepth], 2)$str);
}
break;
// These changes are saved all together during SaveSettings()
case co_Texture:
i = co_Texture.GetIndex();
bGoingUp = i > iTexture && i != iTextureD;
iTexture = i;
break;
case co_Char:
i = co_Char.GetIndex();
bGoingUp = i > iChar && i != iCharD;
iChar = i;
break;
case co_World:
str = co_World.GetText();
i = GetDetailIndex(str);
bGoingUp = i > iWorld && i != iWorldD;
iWorld = i;
break;
case co_MeshLOD:
str = co_MeshLOD.GetText();
i = GetDetailIndex(str);
bGoingUp = i > iMeshLOD && i != iMeshLODD;
iMeshLOD = i;
break;
case co_Physics:
str = co_Physics.GetText();
i = GetDetailIndex(str);
bGoingUp = i > iPhys && i != iPhysD;
iPhys = i;
break;
case co_Decal:
iDecal = co_Decal.GetIndex();
break;
case co_Shadows:
i = co_Shadows.GetIndex();
bGoingUp = i > iShadow && i != iShadowD;
iShadow = i;
break;
case co_MultiSamples:
i = co_MultiSamples.GetIndex();
iMultiSamples = i;
iMultiSamplesQL = MultiSampleQualityModes[i];
//bGoingUp = iMultiSamples > iMultiSamplesD;
PC.ConsoleCommand("SETADVMULTISAMPLES MS="$MultiSampleModes[iMultiSamples]@"QL="$iMultiSamplesQL);
//PC.ConsoleCommand("SETRES"@sRes);
break;
case co_Anisotropy:
i = co_Anisotropy.GetIndex();
iAnisotropy=i;
//bGoingUp = iAnisotropy > iAnisotropyD;
PC.ConsoleCommand("SETANISOTROPY"@AnisotropyModes[iAnisotropy]);
//PC.ConsoleCommand("SETRES"@sRes);
break;
case ch_ForceFSAAScreenshotSupport:
bForceFSAAScreenshotSupport = ch_ForceFSAAScreenshotSupport.IsChecked();
bGoingUp = bForceFSAAScreenshotSupport && bForceFSAAScreenshotSupport != bForceFSAAScreenshotSupportD;
if(bForceFSAAScreenshotSupport)
PC.ConsoleCommand("FORCEFSAASCREENSHOTSUPPORT 1");
else
PC.ConsoleCommand("FORCEFSAASCREENSHOTSUPPORT 0");
break;
case ch_DynLight:
bDynLight = ch_DynLight.IsChecked();
bGoingUp = bDynLight && bDynLight != bDynLightD;
break;
case ch_Trilinear:
bTrilin = ch_Trilinear.IsChecked();
bGoingUp = bTrilin && bTrilin != bTrilinD;
break;
case ch_Projectors:
bProj = ch_Projectors.IsChecked();
bGoingUp = bProj && bProjD != bProj;
break;
case ch_DecoLayers:
bFol = ch_DecoLayers.IsChecked();
bGoingUp = bFol && bFol != bFolD;
break;
case ch_Textures:
bTexture = ch_Textures.IsChecked();
bGoingUp = bTexture && bTexture != bTextureD;
break;
case ch_Coronas:
bCorona = ch_Coronas.IsChecked();
bGoingUp = bCorona && bCorona != bCoronaD;
break;
case ch_Decals:
bDecal = ch_Decals.IsChecked();
bGoingUp = bDecal && bDecal != bDecalD;
UpdateDecalStay();
break;
case sl_Gamma:
fGamma = sl_Gamma.GetValue();
PlayerOwner().ConsoleCommand("GAMMA"@fGamma);
break;
case sl_Brightness:
fBright = sl_Brightness.GetValue();
PlayerOwner().ConsoleCommand("BRIGHTNESS"@fBright);
break;
case sl_Contrast:
fContrast = sl_Contrast.GetValue();
PlayerOwner().ConsoleCommand("CONTRAST"@fContrast);
break;
case sl_DistanceLOD:
fDistance = sl_DistanceLOD.GetValue();
break;
case ch_Weather:
bWeather = ch_Weather.IsChecked();
bGoingUp = bWeather && bWeather != bWeatherD;
break;
}
if (bGoingUp)
ShowPerformanceWarning();
// Check if we are maxed out (and mature-enabled)!
// IF _RO_
// we don't want this
// if( !bPlayedSound && !PlayerOwner().bNoMatureLanguage && iTexture == 8
// && iChar == 8 && iWorld == 5 && iPhys == 5 && iShadow == 2 &&
// bWeather && bDecal && bDynLight && bProj && bFol &&
// bCorona && bTexture && iDecal == 2 && iMeshLOD == 8 )
// {
// snd = sound(DynamicLoadObject("AnnouncerMale2K4.HolyShit_F", class'Sound'));
// if ( snd != None ) PlayerOwner().ClientPlaySound(snd);
// bPlayedSound = true;
// }
// end if _RO_
}
function bool RenderDeviceClick( byte Btn )
{
switch ( Btn )
{
case QBTN_Yes:
SaveSettings();
Console(Controller.Master.Console).DelayedConsoleCommand("relaunch");
break;
case QBTN_Cancel:
sRenDev = sRenDevD;
co_RenderDevice.Find(sRenDev);
co_RenderDevice.SetComponentValue(sRenDev,true);
break;
}
return true;
}
// Video change OK page was closed
function VideoChangeClose(optional bool bCancelled)
{
local bool bTemp;
local string NewX, NewY;
Divide(sRes,"x",NewX,NewY);
if (bCancelled)
{
// Prevent the components from sending OnChange events
bTemp = bIgnoreChange;
bIgnoreChange = True;
// Reload the components values
co_Resolution.LoadINI();
co_ColorDepth.LoadINI();
ch_Fullscreen.LoadINI();
co_MultiSamples.LoadINI();
co_Anisotropy.LoadINI();
bIgnoreChange = bTemp;
}
else
{
if ( int(NewX) < 640 || int(NewY) < 480 )
Controller.GameResolution = NewX $ "x" $ NewY;
else Controller.GameResolution = "";
iColDepthD = iColDepth;
sResD = sRes;
if ( bFullScreen != bFullScreenD )
{
PlayerOwner().ConsoleCommand("set ini:Engine.Engine.ViewportManager StartupFullScreen"@bFullScreen);
bFullScreenD = bFullScreen;
}
}
CheckSliders();
bIgnoreResNotice = False;
}
function int GetDetailIndex(string DetailString)
{
local int i;
for (i = 0; i < ArrayCount(DetailLevels); i++)
if (DetailString == DetailLevels[i])
return i;
return 0;
}
final function string GetGUIString(string ConfigString)
{
switch (ConfigString)
{
case "UltraLow": return DetailLevels[0];
case "VeryLow": return DetailLevels[1];
case "Low": return DetailLevels[2];
case "Lower": return DetailLevels[3];
case "Normal": return DetailLevels[4];
case "Higher": return DetailLevels[5];
case "High": return DetailLevels[6];
case "VeryHigh": return DetailLevels[7];
case "UltraHigh": return DetailLevels[8];
}
return "";
}
final function string GetConfigString(string DetailString)
{
switch (DetailString)
{
case DetailLevels[0]: return "UltraLow";
case DetailLevels[1]: return "VeryLow";
case DetailLevels[2]: return "Low";
case DetailLevels[3]: return "Lower";
case DetailLevels[4]: return "Normal";
case DetailLevels[5]: return "Higher";
case DetailLevels[6]: return "High";
case DetailLevels[7]: return "VeryHigh";
case DetailLevels[8]: return "UltraHigh";
}
return "";
}
final function MapMultiSampleModes(out array<string> ComboBoxTags)
{
local PlayerController PC;
local int SupportedQL;
local bool bNVidiaGPU;
PC = PlayerOwner();
ComboBoxTags.Remove(0,ComboBoxTags.Length);
MultiSampleModes.Remove(0,MultiSampleModes.Length);
bNVidiaGPU = false;
bNVidiaGPU = bool(PC.ConsoleCommand("ISNVIDIAGPU"));
if(true==bool(PC.ConsoleCommand("SUPPORTEDMULTISAMPLE 0")))
{
MultiSampleModes[MultiSampleModes.Length]=0;
MultiSampleQualityModes[MultiSampleQualityModes.Length]=0;
ComboBoxTags[ComboBoxTags.Length]="None";
}
SupportedQL = int(PC.ConsoleCommand("SUPPORTEDQUALITYLEVELS MS=1"));
if(bNVidiaGPU&&SupportedQL==4)
{
MultiSampleModes[MultiSampleModes.Length]=1;
MultiSampleQualityModes[MultiSampleQualityModes.Length]=0;
ComboBoxTags[ComboBoxTags.Length]="2x";
MultiSampleModes[MultiSampleModes.Length]=1;
MultiSampleQualityModes[MultiSampleQualityModes.Length]=2;
ComboBoxTags[ComboBoxTags.Length]="4x";
MultiSampleModes[MultiSampleModes.Length]=1;
MultiSampleQualityModes[MultiSampleQualityModes.Length]=1;
ComboBoxTags[ComboBoxTags.Length]="2xQ";
MultiSampleModes[MultiSampleModes.Length]=1;
MultiSampleQualityModes[MultiSampleQualityModes.Length]=3;
if ( true==bool(PC.ConsoleCommand("ISNVIDIAPREFX")) )
ComboBoxTags[ComboBoxTags.Length]="4xS";
else
ComboBoxTags[ComboBoxTags.Length]="8xS";
// Specifically mapping the cards
return;
}
if(true==bool(PC.ConsoleCommand("SUPPORTEDMULTISAMPLE 2")))
{
MultiSampleModes[MultiSampleModes.Length]=2;
MultiSampleQualityModes[MultiSampleQualityModes.Length]=0;
ComboBoxTags[ComboBoxTags.Length]="2x";
}
if(true==bool(PC.ConsoleCommand("SUPPORTEDMULTISAMPLE 4")))
{
MultiSampleModes[MultiSampleModes.Length]=4;
MultiSampleQualityModes[MultiSampleQualityModes.Length]=0;
ComboBoxTags[ComboBoxTags.Length]="4x";
if(bNVidiaGPU)
{
SupportedQL = int(PC.ConsoleCommand("SUPPORTEDQUALITYLEVELS MS=4"));
if ( SupportedQL > 2 )
{
MultiSampleModes[MultiSampleModes.Length]=4;
MultiSampleQualityModes[MultiSampleQualityModes.Length]=2;
ComboBoxTags[ComboBoxTags.Length]="8x CSAA";
}
if ( SupportedQL > 4 )
{
MultiSampleModes[MultiSampleModes.Length]=4;
MultiSampleQualityModes[MultiSampleQualityModes.Length]=4;
ComboBoxTags[ComboBoxTags.Length]="16x CSAA";
}
}
}
if(true==bool(PC.ConsoleCommand("SUPPORTEDMULTISAMPLE 6"))) // Only Supported by ATI
{
MultiSampleModes[MultiSampleModes.Length]=6;
MultiSampleQualityModes[MultiSampleQualityModes.Length]=0;
ComboBoxTags[ComboBoxTags.Length]="6x";
}
if(true==bool(PC.ConsoleCommand("SUPPORTEDMULTISAMPLE 8")))
{
MultiSampleModes[MultiSampleModes.Length]=8;
MultiSampleQualityModes[MultiSampleQualityModes.Length]=0;
if(bNVidiaGPU)
ComboBoxTags[ComboBoxTags.Length]="8xQ CSAA";
else
ComboBoxTags[ComboBoxTags.Length]="8x";
if(bNVidiaGPU)
{
SupportedQL = int(PC.ConsoleCommand("SUPPORTEDQUALITYLEVELS MS=8"));
if ( SupportedQL > 2 )
{
MultiSampleModes[MultiSampleModes.Length]=8;
MultiSampleQualityModes[MultiSampleQualityModes.Length]=2;
ComboBoxTags[ComboBoxTags.Length]="16xQ CSAA";
}
}
}
}
final function MapAnisotropyModes(out array<string> ComboBoxTags)
{
local PlayerController PC;
PC = PlayerOwner();
ComboBoxTags.Remove(0,ComboBoxTags.Length);
AnisotropyModes.Remove(0,AnisotropyModes.Length);
if(true==bool(PC.ConsoleCommand("SUPPORTEDANISOTROPY 0")))
{
AnisotropyModes[AnisotropyModes.Length]=1;
ComboBoxTags[ComboBoxTags.Length]="None";
}
if(true==bool(PC.ConsoleCommand("SUPPORTEDANISOTROPY 2")))
{
AnisotropyModes[AnisotropyModes.Length]=2;
ComboBoxTags[ComboBoxTags.Length]="2x";
}
if(true==bool(PC.ConsoleCommand("SUPPORTEDANISOTROPY 4")))
{
AnisotropyModes[AnisotropyModes.Length]=4;
ComboBoxTags[ComboBoxTags.Length]="4x";
}
if(true==bool(PC.ConsoleCommand("SUPPORTEDANISOTROPY 8")))
{
AnisotropyModes[AnisotropyModes.Length]=8;
ComboBoxTags[ComboBoxTags.Length]="8x";
}
if(true==bool(PC.ConsoleCommand("SUPPORTEDANISOTROPY 16")))
{
AnisotropyModes[AnisotropyModes.Length]=16;
ComboBoxTags[ComboBoxTags.Length]="16x";
}
}
final function GetComboOptions(moComboBox Combo, out array<GUIListElem> Ar)
{
local int i;
local string tempStr;
local array<string> combo_options;
Ar.Remove(0, Ar.Length);
if (Combo == None)
return;
switch (Combo)
{
case co_Texture:
case co_Char:
for (i = 0; i < ArrayCount(DetailLevels); i++)
{
if (bDemo && i == 5)
break;
Ar.Length = Ar.Length + 1;
Ar[i].Item = DetailLevels[i];
}
break;
case co_Physics:
case co_World:
case co_Decal:
Ar.Length = 3;
Ar[0].Item = DetailLevels[3];
Ar[1].Item = DetailLevels[4];
Ar[2].Item = DetailLevels[5];
break;
case co_ColorDepth:
Ar.Length = 2;
Ar[0].Item = BitDepthText[0];
Ar[1].Item = BitDepthText[1];
break;
case co_Resolution:
Ar.Length = ArrayCount(DisplayModes);
for (i = 0; i < Ar.Length; i++)
Ar[i].Item = DisplayModes[i].Width$"x"$DisplayModes[i].Height;
break;
case co_RenderDevice:
// Win64 has OpenGLDrv and D3D9Drv (NOT D3DDrv!). --ryan.
if ( ( PlatformIsWindows() ) && ( PlatformIs64Bit() ) )
{
Ar.Length = 2;
Ar[0].Item = RenderModeText[0] @ "9";
Ar[0].ExtraStrData = "D3D9Drv.D3D9RenderDevice";
Ar[1].Item = "OpenGL";
Ar[1].ExtraStrData = "OpenGLDrv.OpenGLRenderDevice";
}
else if ( PlatformIsMacOS() ) // Just OpenGLDrv on MacOSX. --ryan.
{
Ar.Length = 1;
Ar[0].Item = "OpenGL";
Ar[0].ExtraStrData = "OpenGLDrv.OpenGLRenderDevice";
}
else if ( PlatformIsUnix() ) // OpenGLDrv and maybe Pixomatic.
{
Ar.Length = 1;
Ar[0].Item = "OpenGL";
Ar[0].ExtraStrData = "OpenGLDrv.OpenGLRenderDevice";
if ( !PlatformIs64Bit() )
{
Ar.Length = 2;
Ar[1].Item = RenderModeText[1];
Ar[1].ExtraStrData = "PixoDrv.PixoRenderDevice";
}
}
else // pretty much win32.
{
Ar.Length = RENDERMODECOUNT;
for ( i = 0; i < RENDERMODECOUNT; i++ )
{
Ar[i].Item = RenderModeText[i];
Ar[i].ExtraStrData = RenderMode[i];
}
}
break;
case co_Shadows:
tempStr = GetNativeClassName("Engine.Engine.RenderDevice");
// No render-to-texture on anything but Direct3D.
if ((tempStr == "D3DDrv.D3DRenderDevice") ||
(tempStr == "D3D9Drv.D3D9RenderDevice"))
{
Ar.Length = ArrayCount(ShadowOptions);
for ( i = 0; i < ArrayCount(ShadowOptions); i++ )
Ar[i].Item = ShadowOptions[i];
}
else
{
Ar.Length = 2;
Ar[0].Item = ShadowOptions[0];
Ar[1].Item = ShadowOptions[1];
}
break;
case co_MeshLOD:
Ar.Length = 4;
Ar[0].Item = DetailLevels[3];
Ar[1].Item = DetailLevels[4];
Ar[2].Item = DetailLevels[5];
Ar[3].Item = DetailLevels[8];
break;
case co_MultiSamples:
MapMultiSampleModes(combo_options);
Ar.Length = combo_options.Length;
for(i=0;i<combo_options.Length;++i)
Ar[i].Item=combo_options[i];
break;
case co_Anisotropy:
MapAnisotropyModes(combo_options);
Ar.Length = combo_options.Length;
for(i=0;i<combo_options.Length;++i)
Ar[i].Item=combo_options[i];
break;
}
}
function UpdateDecalStay()
{
if ( ch_Decals.IsChecked() )
EnableComponent(co_Decal);
else DisableComponent(co_Decal);
}
defaultproperties
{
OnPreDraw=InternalOnPreDraw
// if _RO_
RelaunchQuestion="The graphics mode has been successfully changed. However, it will not take effect until the next time the game is started. Would you like to restart Killing Floor right now?"
// else
// RelaunchQuestion="The graphics mode has been successfully changed. However, it will not take effect until the next time the game is started. Would you like to restart UT2004 right now?"
// end if _RO_
Begin Object class=GUISectionBackground Name=sbSection1
WinWidth=0.491849
WinHeight=0.440729
WinLeft=0.000948
WinTop=0.012761
Caption="Resolution"
RenderWeight=0.01
End Object
sb_Section1=sbSection1
Begin Object class=GUISectionBackground Name=sbSection2
WinWidth=0.502751
WinHeight=0.975228
WinLeft=0.495826
WinTop=0.012761
Caption="Options"
RenderWeight=0.01
End Object
sb_Section2=sbSection2
Begin Object class=GUISectionBackground Name=sbSection3
WinWidth=0.462891
WinHeight=0.511261
WinLeft=0.011132
WinTop=0.476061
Caption="Gamma Test"
RenderWeight=0.01
bFillClient=true
End Object
sb_Section3=sbSection3
Begin Object Class=moComboBox Name=RenderDeviceCombo
Caption="Render Device"
ComponentJustification=TXTA_Left
Hint="Alternate rendering devices may offer better performance on your machine."
WinWidth=0.401953
WinLeft=0.547773
WinTop=0.335021
CaptionWidth=0.55
TabOrder=0
bBoundToParent=True
bScaleToParent=True
OnLoadINI=InternalOnLoadINI
OnChange=InternalOnChange
IniOption="@Internal"
End Object
co_RenderDevice=RenderDeviceCombo
Begin Object class=moComboBox Name=VideoResolution
WinWidth=0.390000
WinLeft=0.030508
WinTop=0.060417
Caption="Resolution"
INIOption="@INTERNAL"
INIDefault="640x480"
OnLoadINI=InternalOnLoadINI
OnChange=InternalOnChange
Hint="Select the video resolution at which you wish to play."
bReadOnly=true
CaptionWidth=0.55
bHeightFromComponent=false
TabOrder=1
End Object
co_Resolution=VideoResolution
Begin Object class=moComboBox Name=VideoColorDepth
WinWidth=0.390000
WinLeft=0.030234
WinTop=0.117188
Caption="Color Depth"
INIOption="@Internal"
INIDefault="false"
OnChange=InternalOnChange
OnLoadINI=InternalOnLoadINI
Hint="Select the maximum number of colors to display at one time."
CaptionWidth=0.55
bHeightFromComponent=false
TabOrder=2
End Object
co_ColorDepth=VideoColorDepth
Begin Object class=moCheckBox Name=VideoFullScreen
WinWidth=0.387500
WinLeft=0.030976
WinTop=0.169531
Caption="Full Screen"
INIOption="@Internal"
INIDefault="True"
OnLoadINI=InternalOnLoadINI
OnChange=InternalOnChange
Hint="Check this box to run the game full screen."
bSquare=true
ComponentJustification=TXTA_Left
CaptionWidth=0.94
TabOrder=3
End Object
ch_FullScreen=VideoFullScreen
Begin Object class=moSlider Name=BrightnessSlider
WinWidth=0.461445
WinLeft=0.012188
WinTop=0.229951
MinValue=0.0
MaxValue=1.0
Caption="Brightness"
CaptionWidth=0.55
ComponentWidth=-1
LabelJustification=TXTA_Left
OnLoadINI=InternalOnLoadINI
OnChange=InternalOnChange
INIOption="@Internal"
INIDefault="0.8"
Hint="Use the slider to adjust the Brightness to suit your monitor."
TabOrder=4
bHeightFromComponent=False
SliderCaptionStyleName=""
End Object
sl_Brightness=BrightnessSlider
Begin Object class=moSlider Name=GammaSlider
WinWidth=0.461133
WinLeft=0.012501
WinTop=0.272918
MinValue=0.5
MaxValue=2.5
Caption="Gamma"
CaptionWidth=0.55
ComponentWidth=-1
LabelJustification=TXTA_Left
bHeightFromComponent=False
OnLoadINI=InternalOnLoadINI
OnChange=InternalOnChange
INIOption="@Internal"
INIDefault="0.8"
Hint="Use the slider to adjust the Gamma to suit your monitor."
TabOrder=5
SliderCaptionStyleName=""
End Object
sl_Gamma=GammaSlider
Begin Object class=moSlider Name=ContrastSlider
WinWidth=0.461133
WinLeft=0.012188
WinTop=0.313285
MinValue=0.0
MaxValue=1.0
Caption="Contrast"
CaptionWidth=0.55
ComponentWidth=-1
bHeightFromComponent=False
LabelJustification=TXTA_Left
OnLoadINI=InternalOnLoadINI
OnChange=InternalOnChange
INIOption="@Internal"
INIDEfault="0.8"
Hint="Use the slider to adjust the Contrast to suit your monitor."
TabOrder=6
SliderCaptionStyleName=""
End Object
sl_Contrast=ContrastSlider
Begin Object class=GUIImage Name=GammaBar
WinWidth=0.456250
WinHeight=0.532117
WinLeft=0.013477
WinTop=0.450001
// ifndef _RO_
//Image=material'2K4Menus.Controls.gamma'
ImageColor=(R=255,G=255,B=255,A=255)
OnChange=InternalOnChange
ImageRenderStyle=MSTY_Normal
ImageStyle=ISTY_Scaled
End Object
i_GammaBar=GammaBar
Begin Object class=moComboBox Name=DetailTextureDetail
WinWidth=0.400000
WinLeft=0.550000
WinTop=0.063021
Caption="Texture Detail"
INIOption="@Internal"
INIDefault="High"
OnLoadINI=InternalOnLoadINI
Hint="Changes how much world detail will be rendered."
CaptionWidth=0.65
ComponentJustification=TXTA_Left
TabOrder=7
bHeightFromComponent=false
OnChange=InternalOnChange
End Object
co_Texture=DetailTextureDetail
Begin Object class=moComboBox Name=DetailCharacterDetail
WinWidth=0.400000
WinLeft=0.550000
WinTop=0.116667
Caption="Character Detail"
INIOption="@Internal"
INIDefault="High"
OnLoadINI=InternalOnLoadINI
Hint="Changes how much character detail will be rendered."
CaptionWidth=0.65
ComponentJustification=TXTA_Left
TabOrder=8
bHeightFromComponent=false
OnChange=InternalOnChange
End Object
co_Char=DetailCharacterDetail
Begin Object class=moComboBox Name=DetailWorldDetail
WinWidth=0.400000
WinLeft=0.550000
WinTop=0.170312
Caption="World Detail"
INIOption="@Internal"
INIDefault="High"
OnLoadINI=InternalOnLoadINI
Hint="Changes the level of detail used for optional geometry and effects."
CaptionWidth=0.65
ComponentJustification=TXTA_Left
TabOrder=9
bHeightFromComponent=false
OnChange=InternalOnChange
End Object
co_World=DetailWorldDetail
Begin Object class=moComboBox Name=DetailPhysics
WinWidth=0.400000
WinLeft=0.550000
WinTop=0.223958
Caption="Physics Detail"
INIOption="@Internal"
INIDefault="High"
OnLoadINI=InternalOnLoadINI
Hint="Changes the physics simulation level of detail."
CaptionWidth=0.65
ComponentJustification=TXTA_Left
TabOrder=10
OnChange=InternalOnChange
End Object
co_Physics=DetailPhysics
Begin Object class=moComboBox Name=MeshLOD
WinWidth=0.4
WinLeft=0.55
WinTop=0.223958
Caption="Dynamic Mesh LOD"
Hint="Adjusts how aggressively character and vehicle details are reduced at a distance. Higher settings increase the distance at which details are reduced, possibly improving visual detail at a cost in performance"
IniOption="@Internal"
OnLoadINI=InternalOnLoadINI
CaptionWidth=0.65
ComponentJustification=TXTA_Left
TabOrder=11
OnChange=InternalOnChange
End Object
co_MeshLOD=MeshLOD
Begin Object class=moComboBox Name=DetailDecalStay
WinWidth=0.400000
WinLeft=0.550000
WinTop=0.282032
Caption="Decal Stay"
INIOption="@Internal"
INIDefault="Normal"
OnLoadINI=InternalOnLoadINI
Hint="Changes how long weapon scarring effects stay around."
CaptionWidth=0.65
ComponentJustification=TXTA_Left
TabOrder=12
OnChange=InternalOnChange
End Object
co_Decal=DetailDecalStay
Begin Object class=moComboBox Name=DetailCharacterShadows
WinWidth=0.40000
WinLeft=0.550000
WinTop=0.431378
Caption="Character Shadows"
INIOption="@Internal"
OnLoadINI=InternalOnLoadINI
Hint="Adjust the detail of character shadows. 'Blob' or 'None' recommended for low-performance PC's"
CaptionWidth=0.65
ComponentJustification=TXTA_Left
TabOrder=12
OnChange=InternalOnChange
End Object
co_Shadows=DetailCharacterShadows
Begin Object class=moComboBox Name=DetailAntialiasing
WinWidth=0.400000
WinLeft=0.550000
WinTop=0.45
Caption="Antialiasing"
INIOption="@Internal"
OnLoadINI=InternalOnLoadINI
Hint="Adjust the detail of multisampling for antialiasing. 'None' recommended for low-performance PC's"
CaptionWidth=0.65
ComponentJustification=TXTA_Left
TabOrder=12
OnChange=InternalOnChange
End Object
co_MultiSamples=DetailAntialiasing
Begin Object class=moComboBox Name=DetailAnisotropy
WinWidth=0.400000
WinLeft=0.600000
WinTop=0.48
Caption="Anisotropic Filtering"
INIOption="@Internal"
OnLoadINI=InternalOnLoadINI
Hint="Adjust the level of anisotropic filtering. 'None' recommended for low-performance PC's"
CaptionWidth=0.65
ComponentJustification=TXTA_Left
TabOrder=12
OnChange=InternalOnChange
End Object
co_Anisotropy=DetailAnisotropy
Begin Object class=moCheckBox name=DetailForceFSAASS
WinWidth=0.300000
WinHeight=0.040000
WinLeft=0.600000
WinTop=0.499308
Caption="Force FSAA Screenshots"
INIOption="@Internal"
INIDefault="False"
OnLoadINI=InternalOnLoadINI
Hint="Forces screenshots to work in fullscreen if driver AA is implemented and not game AA."
CaptionWidth=0.94
bSquare=true
ComponentJustification=TXTA_Left
TabOrder=12
OnChange=InternalOnChange
End Object
ch_ForceFSAAScreenshotSupport=DetailForceFSAASS
Begin Object class=moCheckBox Name=DetailDecals
WinWidth=0.300000
WinHeight=0.040000
WinLeft=0.600000
WinTop=0.479308
Caption="Decals"
INIOption="@Internal"
INIDefault="True"
OnLoadINI=InternalOnLoadINI
Hint="Enables weapon scarring effects."
CaptionWidth=0.94
bSquare=true
ComponentJustification=TXTA_Left
TabOrder=15
OnChange=InternalOnChange
End Object
ch_Decals=DetailDecals
Begin Object class=moCheckBox Name=DetailDynamicLighting
WinWidth=0.300000
WinHeight=0.040000
WinLeft=0.600000
WinTop=0.526716
Caption="Dynamic Lighting"
INIOption="@Internal"
INIDefault="True"
OnLoadINI=InternalOnLoadINI
Hint="Enables dynamic lights."
CaptionWidth=0.94
bSquare=true
ComponentJustification=TXTA_Left
TabOrder=16
OnChange=InternalOnChange
End Object
ch_DynLight=DetailDynamicLighting
Begin Object class=moCheckBox Name=DetailDetailTextures
WinWidth=0.300000
WinHeight=0.040000
WinLeft=0.600000
WinTop=0.575425
Caption="Detail Textures"
INIOption="@Internal"
INIDefault="True"
OnLoadINI=InternalOnLoadINI
Hint="Enables detail textures."
CaptionWidth=0.94
bSquare=true
ComponentJustification=TXTA_Left
TabOrder=17
OnChange=InternalOnChange
End Object
ch_Textures=DetailDetailTextures
Begin Object class=moCheckBox Name=DetailCoronas
WinWidth=0.300000
WinHeight=0.040000
WinLeft=0.600000
WinTop=0.624136
Caption="Coronas"
INIOption="@Internal"
INIDefault="True"
OnLoadINI=InternalOnLoadINI
Hint="Enables coronas."
CaptionWidth=0.94
bSquare=true
ComponentJustification=TXTA_Left
TabOrder=18
OnChange=InternalOnChange
End Object
ch_Coronas=DetailCoronas
Begin Object class=moCheckBox Name=DetailTrilinear
WinWidth=0.300000
WinHeight=0.040000
WinLeft=0.600000
WinTop=0.673263
Caption="Trilinear Filtering"
INIOption="@Internal"
INIDefault="False"
OnLoadINI=InternalOnLoadINI
Hint="Enables trilinear filtering, recommended for high-performance PCs."
CaptionWidth=0.94
bSquare=true
ComponentJustification=TXTA_Left
TabOrder=19
OnChange=InternalOnChange
End Object
ch_Trilinear=DetailTrilinear
Begin Object class=moCheckBox Name=DetailProjectors
WinWidth=0.300000
WinHeight=0.040000
WinLeft=0.600000
WinTop=0.721195
Caption="Projectors"
INIOption="@Internal"
INIDefault="True"
OnLoadINI=InternalOnLoadINI
Hint="Enables projectors."
CaptionWidth=0.94
bSquare=true
ComponentJustification=TXTA_Left
TabOrder=20
OnChange=InternalOnChange
End Object
ch_Projectors=DetailProjectors
Begin Object class=moCheckBox Name=DetailDecoLayers
WinWidth=0.300000
WinHeight=0.040000
WinLeft=0.599727
WinTop=0.769906
Caption="Foliage"
INIOption="@Internal"
INIDefault="True"
OnLoadINI=InternalOnLoadINI
Hint="Enables grass and other decorative foliage."
CaptionWidth=0.94
bSquare=true
ComponentJustification=TXTA_Left
TabOrder=21
OnChange=InternalOnChange
End Object
ch_DecoLayers=DetailDecoLayers
Begin Object Class=moCheckBox Name=WeatherEffects
WinWidth=0.300000
WinHeight=0.040000
WinLeft=0.599727
WinTop=0.864910
Caption="Weather Effects"
Hint="Enable weather effects like rain-drops and lightning."
OnLoadINI=InternalOnLoadIni
IniOption="@Internal"
IniDefault="False"
CaptionWidth=0.94
bSquare=True
ComponentJustification=TXTA_Left
TabOrder=22
OnChange=InternalOnChange
End Object
ch_Weather=WeatherEffects
Begin Object Class=moSlider Name=DistanceLODSlider
MaxValue=1.000000
Value=0.500000
Caption="Fog Distance"
SliderCaptionStyleName=""
Hint="Reduce the fog distance to improve performance."
IniOption="@Internal"
bAutoSizeCaption=True
CaptionWidth=0.65
OnLoadIni=InternalOnLoadIni
OnChange=InternalOnChange
WinTop=0.910000
WinLeft=0.560000
WinWidth=0.400000
TabOrder=23
End Object
sl_DistanceLOD=DistanceLODSlider
WinTop=0.15
WinLeft=0
WinWidth=1
WinHeight=0.74
bAcceptsInput=false
DetailLevels(0)="Lowest"
DetailLevels(1)="Very Low"
DetailLevels(2)="Lower"
DetailLevels(3)="Low"
DetailLevels(4)="Normal"
DetailLevels(5)="High"
DetailLevels(6)="Higher"
DetailLevels(7)="Very High"
DetailLevels(8)="Highest"
bExpert=false;
DisplayModes(0)=(Width=640,Height=480)
DisplayModes(1)=(Width=800,Height=600)
DisplayModes(2)=(Width=854,Height=480)
DisplayModes(3)=(Width=1024,Height=640)
DisplayModes(4)=(Width=1024,Height=768)
DisplayModes(5)=(Width=1152,Height=768)
DisplayModes(6)=(Width=1280,Height=720)
DisplayModes(7)=(Width=1280,Height=768)
DisplayModes(8)=(Width=1280,Height=800)
DisplayModes(9)=(Width=1280,Height=854)
DisplayModes(10)=(Width=1280,Height=960)
DisplayModes(11)=(Width=1280,Height=1024)
DisplayModes(12)=(Width=1366,Height=768)
DisplayModes(13)=(Width=1400,Height=1050)
DisplayModes(14)=(Width=1440,Height=900)
DisplayModes(15)=(Width=1600,Height=1200)
DisplayModes(16)=(Width=1680,Height=1050)
DisplayModes(17)=(Width=1800,Height=1440)
DisplayModes(18)=(Width=1920,Height=1080)
DisplayModes(19)=(Width=1920,Height=1200)
DisplayModes(20)=(Width=2048,Height=1536)
DisplayModes(21)=(Width=2560,Height=1600)
RenderModeText(0)="Direct 3D"
RenderModeText(1)="Software"
RenderMode(0)="D3DDrv.D3DRenderDevice"
RenderMode(1)="PixoDrv.PixoRenderDevice"
BitDepthText(0)="16-bit"
BitDepthText(1)="32-bit"
ShadowOptions(0)="None"
ShadowOptions(1)="Blob"
ShadowOptions(2)="Full"
PanelCaption="Display"
DisplayPromptMenu="GUI2K4.UT2K4VideoChangeOK"
InvalidSelectionText="The selected custom resolution is reported to be incompatible with your machine. In order to ensure maximum stability, it is recommended that you choose a compatible resolution from the 'Resolution' drop-down menu"
}