"GameInfo"
{
game "citadel"
title "Citadel"
type multiplayer_only
nomodels 1
nohimodel 1
nocrosshair 0
hidden_maps
{
"test_speakers" 1
"test_hardware" 1
}
nodegraph 0
perfwizard 0
tonemapping 0
GameData "citadel.fgd"
PGIVersion "39A735A413003C88A806B364C32DFC6D077E551B9E4EC6C7B11D41E8E67BFA0C"
Localize
{
DuplicateTokensAssert 1
}
SupportedLanguages
{
"brazilian" "3"
"czech" "3"
"english" "3"
"french" "3"
"german" "3"
"italian" "3"
"indonesian" "3"
"japanese" "3"
"koreana" "3"
"latam" "3"
"polish" "3"
"russian" "3"
"schinese" "3"
"spanish" "3"
"thai" "3"
"turkish" "3"
"ukrainian" "3"
}
FileSystem
{
//
// The code that loads this file automatically does a few things here:
//
// 1. For each "Game" search path, it adds a "GameBin" path, in
\bin
// 2. For each "Game" search path, it adds another "Game" path in front of it with _ at the end.
// For example: c:\hl2\cstrike on a french machine would get a c:\hl2\cstrike_french path added to it.
// 3. If no "Mod" key, for the first "Game" search path, it adds a search path called "MOD".
// 4. If no "Write" key, for the first "Game" search path, it adds a search path called "DEFAULT_WRITE_PATH".
//
//
// Search paths are relative to the exe directory\..\
//
SearchPaths
{
// These are optional language paths. They must be mounted first, which is why there are first in the list.
// *LANGUAGE* will be replaced with the actual language name. If not running a specific language, these paths will not be mounted
// These currently hold localized images containing text, so they need to follow the UI language, not the audio language.
// When we ship localized VO, it should go in a separate Game_AudioLanguage path (e.g. citadel_vo_*LANGUAGE*)
Game_UILanguage citadel_*LANGUAGE*
// These are optional low-violence paths. They will only get mounted if you're in a low-violence mode.
Game_LowViolence citadel_lv
Game citadel
Game core
}
"UserSettingsPathID" "USRLOCAL"
"LegacyUserSettingsPathID" "MOD"
}
MaterialSystem2
{
RenderModes
{
game Default
game Forward
game Deferred
game Outline
game Depth
game FrontDepth
game ShadowSilhouette
dev ToolsVis // Visualization modes for all shaders (lighting only, normal maps only, etc.)
dev ToolsWireframe // This should use the ToolsVis mode above instead of being its own mode\
tools ToolsUtil // Meant to be used to render tools sceneobjects that are mod-independent, like the origin grid
}
}
MaterialEditor
{
"DefaultShader" "environment_texture_set"
}
NetworkSystem
{
BetaUniverse
{
FakeLag 40
FakeLoss .1
//FakeReorderPct 0.05
//FakeReorderDelay 10
//FakeJitter "low"
// Turning off fake jitter for now while I work on making the CQ totally solid
FakeReorderPct 0
FakeReorderDelay 0
FakeJitter "off"
}
"SkipRedundantChangeCallbacks" "1"
}
RenderSystem
{
IndexBufferPoolSizeMB 32
UseReverseDepth 1
Use32BitDepthBuffer 0
Use32BitDepthBufferWithoutStencil 0
VulkanMutableSwapchain 1
"LowLatency" "1"
"VulkanRequireSubgroupWaveOpSupport" "1"
"VulkanRequireDescriptorIndexing" "1"
"VulkanStagingPMBSizeLimitMB" "384"
"VulkanOnlyTestProbability" "0"
"VulkanDefrag" "1"
"MinStreamingPoolSizeMB" "1024"
"MinStreamingPoolSizeMBTools" "2048"
}
NVNGX
{
AppID 103371621
SupportsDLSS 1
}
Engine2
{
HasModAppSystems 1
Capable64Bit 1
URLName citadel
RenderingPipeline
{
SupportsMSAA 0
DistanceField 1
}
PauseSinglePlayerOnGameOverlay 1
PauseOnCtrlConsole 0 // Src2 issues a 'setpause' on holding down CTRL + toggleconsole key, disable this for Deadlock.
DefensiveConCommands 1
DisableLoadingPlaque 1
LocalServerClientAccess 1
"MapMaxCoord" "32768"
}
ContentBuilder
{
ResourceCompilerDirectXUsesWARP "0"
}
SoundSystem
{
SteamAudioEnabled "1"
WaveDataCacheSizeMB "256"
"UsePlatTime" "1"
}
Sounds
{
HierarchicalEncodingFiles "1"
}
ToolsEnvironment
{
"Engine" "Source 2"
"ToolsDir" "../sdktools" // NOTE: Default Tools path. This is relative to the mod path.
}
pulse
{
"pulse_enabled" "1"
}
Hammer
{
"fgd" "citadel.fgd" // NOTE: This is relative to the 'game' path.
"GameFeatureSet" "Citadel"
"DefaultSolidEntity" "trigger_multiple"
"DefaultPointEntity" "info_player_start"
"NavMarkupEntity" "func_nav_markup"
"OverlayBoxSize" "8"
"TileMeshesEnabled" "1"
"RenderMode" "ToolsVis"
"CreateRenderClusters" "1"
"DefaultMinDrawVolumeSize" "2048"
"DefaultMinTrianglesPerCluster" "16384"
"TileGridSupportsBlendHeight" "1"
"TileGridBlendDefaultColor" "0 255 0"
"LoadScriptEntities" "0"
"UsesBakedLighting" "1"
"UseAnalyticGrid" "0"
"SupportsDisplacementMapping" "0"
"SteamAudioEnabled" "1"
"LatticeDeformerEnabled" "1"
"ShadowAtlasWidth" "16384"
"ShadowAtlasHeight" "16384"
"TimeSlicedShadowMapRendering" "1"
}
SoundTool
{
"DefaultSoundEventType" "src1_3d"
SoundEventBaseOptions
{
"Base.Announcer.VO.2d" ""
"Base.World.VO.Emitter.3d" ""
"Base.Hero.VO.Ping.2d" ""
"Base.Hero.VO.2d" ""
"Base.Hero.VO.3d" ""
"Base.Hero.VO.Ability.3d" ""
"Base.Hero.VO.Ultimate.3d" ""
"Base.Hero.VO.Dash.3d" ""
"Base.Hero.VO.Effort.3d" ""
"Base.Hero.VO.Pain.3d" ""
"Base.Hero.VO.Melee.3d" ""
"Base.Hero.VO.Death.3d" ""
}
}
RenderPipelineAliases
{
}
ResourceCompiler
{
ForceVulkanForMapBuild 1
// Overrides of the default builders as specified in code, this controls which map builder steps
// will be run when resource compiler is run for a map without specifiying any specific map builder
// steps. Additionally this controls which builders are displayed in the hammer build dialog.
DefaultMapBuilders
{
"bakedlighting" "1" // Enable lightmapping during compile time
"envmap" "0" // turned off since it currently causes an assert and doesn't work due to some build issue
"nav" "1" // Generate nav mesh data
"sareverb" "0" // Bake Steam Audio reverb
"sapaths" "0" // Bake Steam Audio pathing
"sacustomdata" "1" // Bake Steam Audio custom data
}
// Game specific steps run after the map has been built, in the order they are listed here
GameSpecificPostMapBuildSteps
{
"pve_nav_cache" "1" // Bake the spots the PVE directors spawn things on
}
MeshCompiler
{
OptimizeForMeshlets 1
TrianglesPerMeshlet 64 // Maximum valid value currently is 126
UseMikkTSpace 1
EncodeVertexBuffer 1
EncodeVertexBufferVersion 1
EncodeVertexBufferLevel 3
EncodeIndexBuffer 1
SplitDepthStream 1
}
WorldRendererBuilder
{
VisibilityGuidedMeshClustering "1"
MinimumTrianglesPerClusteredMesh "8192"
MinimumVerticesPerClusteredMesh "8192"
MinimumVolumePerClusteredMesh "8192" // ~20x20x20 cube
MaxPrecomputedVisClusterMembership "96"
MaxCullingBoundsGroups "128"
UseAggregateInstances "1"
AggregateInstancingMeshlets "1"
BakePropsWithExtraVertexStreams "1"
MergeTranslucents "1"
}
BakedLighting
{
Version 4
ImportanceVolumeTransitionRegion 512 // distance we transition from high to low resolution charts
LightmapChannels
{
direct_light_shadows 1
debug_chart_color 1
directional_irradiance_sh2_dc 1
directional_irradiance_sh2_r
{
CompressedFormat DXT1
}
directional_irradiance_sh2_g
{
CompressedFormat DXT1
}
directional_irradiance_sh2_b
{
CompressedFormat DXT1
}
}
LightmapGutterSize 2 // For bicubic filtering
UseStaticLightProbes 0
LPVAtlas 1
}
SteamAudio
{
ReverbDefaults
{
GridGenerationType "0" // 0: Automatic, Everywhere, 1: Automatic, Use Probe Generation Volume, 2: Manual
FilterUsingVolumes "1" // Filter Using Probe Exclusion Volumes ( boolean )
FilterUsingNavMesh "0" // Filter Using NavMesh
GridSpacing "3.0"
HeightAboveFloor "1.5"
RebakeOption "0" // 0: cleanup, 1: manual, 2: auto
NumRays "32768"
NumBounces "64"
IRDuration "1.0"
AmbisonicsOrder "1"
ClusteringEnabled "0"
ClusteringCubemapResolution "16.0"
ClusteringDepthThreshold "10.0"
}
PathingDefaults
{
GridGenerationType "0" // 0: Automatic, Everywhere, 1: Automatic, Use Probe Generation Volume, 2: Manual
FilterUsingVolumes "1" // Filter Using Probe Exclusion Volumes ( boolean )
FilterUsingNavMesh "0" // Filter Using NavMesh
GridSpacing "3.0"
HeightAboveFloor "1.5"
RebakeOption "0" // 0: cleanup, 1: manual, 2: auto
NumVisSamples "1"
ProbeVisRadius "0"
ProbeVisThreshold "0.1"
ProbeVisPathRange "1000.0"
}
CustomDataDefaults
{
GridGenerationType "0" // 0: Automatic, Everywhere, 1: Automatic, Use Probe Generation Volume, 2: Manual
FilterUsingVolumes "1" // Filter Using Probe Exclusion Volumes ( boolean )
FilterUsingNavMesh "1" // Filter Using NavMesh
GridSpacing "6"
HeightAboveFloor "1.5"
RebakeOption "0" // 0: cleanup, 1: manual, 2: auto
BakeOcclusion "0" // 0: Disabled, 1: Enabled
BakeDimensions "1" // 0: Disabled, 1: Enabled
BakeMaterials "0" // 0: Disabled, 1: Enabled
OcclusionPathing "1"
OcclusionReflection "0"
OcclusionReflectionRays "16384"
OcclusionReflectionBounces "16"
DimensionsOutsideThreshold "0.02"
}
ProbeGenerationVolumeDefaults
{
Spacing "3.0"
Height "1.5"
HeightSpacing "12"
UseForReverb "0"
UseForPathing "0"
UseForCustomData "1"
FilterUsingVolumes "1"
FilterUsingNavMesh "1"
}
}
SoundEventScripts
{
OmitMetadataAndLineText "1"
}
SoundStackScripts
{
CompileStacksStrict "1"
}
VisBuilder
{
MaxVisClusters "4096"
PreMergeOpenSpaceDistanceThreshold "128.0"
PreMergeOpenSpaceMaxDimension "2048.0"
PreMergeOpenSpaceMaxRatio "8.0"
PreMergeSmallRegionsSizeThreshold "20.0"
}
VDataLocalization
{
GameOutputPath "resource/localization/citadel_vdata"
TokenPrefix "Citadel_VData_"
}
TextureCompiler
{
//Compressor "lz4"
//CompressMipsOnDisk "1"
//CompressMinRatio "95"
AllowNP2Textures "1"
AllowPanoramaMipGeneration "1"
//PublicToolsDefaultMaxRes "2048"
}
}
Source1Import
{
"forcevtxfileupconvert" 1
}
WorldRenderer
{
EnvironmentMaps 1
EnvironmentMapFaceSize 256
EnvironmentMapRenderSize 1024
EnvironmentMapFormat BC6H
EnvironmentMapPreviewFormat BC6H
EnvironmentMapColorSpace linear
EnvironmentMapMipProcessor GGXCubeMapBlur
// Build cubemaps into a cube array instead of individual cubemaps.
"EnvironmentMapUseCubeArray" 1
"EnvironmentMapCacheSizeTools" 300
BindlessSceneObjectDesc CitadelBindlessDesc
GrassCastsShadows 1
}
SceneSystem
{
GpuLightBinner 1
FogCachedShadowAtlasWidth 2048
FogCachedShadowAtlasHeight 2048
FogCachedShadowTileSize 128
GpuLightBinnerSunLightFastPath 1
CSMCascadeResolution 2048
SunLightManagerCount 0
SunLightManagerCountTools 0
DefaultShadowTextureWidth 6144
DefaultShadowTextureHeight 6144
DynamicShadowResolution 1
TransformTextureRowCount 1024
TransformTextureRowCountToolsMode 6144
SunLightMaxCascadeSize 4
SunLightShadowRenderMode Depth
NonTexturedGradientFog 1
CubemapFog 1
VolumetricFog 1
FrameBufferCopyFormat R11G11B10F
Tonemapping 0
WellKnownLightCookies
{
"blank" "materials/effects/lightcookies/blank.vtex"
"flashlight" "materials/effects/lightcookies/flashlight.vtex"
}
ComputeShaderSkinning 1
}
NavSystem
{
"NavTileSize" "128.0"
"NavCellSize" "1.5"
"NavCellHeight" "2.0"
// Hull definitions live in scripts/nav_hulls.vdata
// Preset definitions live in scripts/nav_hulls_presets.vdata
"NavHullsPreset" "default"
"NavRegionMinSize" "8"
"NavRegionMergeSize" "20"
"NavEdgeMaxLen" "1200"
"NavEdgeMaxError" "51.0"
"NavVertsPerPoly" "4"
"NavDetailSampleDistance" "120.0"
"NavDetailSampleMaxError" "2.0"
"NavSmallAreaOnEdgeRemovalSize" "81.0"
}
AnimationSystem
{
"DisableServerInterpCompensation" "1"
"DisableAnimationScript" "1"
"ServerPoseRecipeHistorySize" "60"
"ClientPoseRecipeHistorySize" "60"
}
ModelDoc
{
"models_gamedata" "models_gamedata.fgd"
"features" "modelconfig;gamepreview;wireframe_backfaces;distancefield"
}
Particles
{
"EnableParticleShaderFeatureBranching" "1"
"Float16HDRBackBuffer" "1"
"PET_SupportFadingOpaqueModels" "1"
"BindlessParticleShader" "1"
"Features" "non_homogenous_forward_layer_only"
}
Physics
{
"EnableWorldCompounds" "1"
}
ConVars
{
"rate"
{
"min" "98304"
"default" "786432"
"max" "1000000"
}
// Networking - General
"sv_minrate" "98304"
"sv_maxunlag" "0.500"
"sv_maxunlag_player" "0.200"
"sv_lagcomp_filterbyviewangle" "false"
"cl_usesocketsforloopback" "1"
"cl_poll_network_early" "0"
"cq_buffer_bloat_msecs_max" "120" // 7.68 ticks @64hz max cq bloat
// Networking - Induced latency (pred offset)
"cl_tickpacket_recvmargin_desired" "5" // 5 ms base, min. floor for protecting against thrashing the queue
"cl_tickpacket_desired_queuelength" "1"
"cl_async_usercmd_send_disabled_recvmargin_min" "0.5" // Additional frame since we do not use the async usercmd send (potentially unneccessary)
"cl_clock_buffer_ticks" "1" // Buffer added to the simulation clock margin ( affects pred offset and cadence of client world ticks )
"cl_interp_ratio" "0"
"cl_async_usercmd_send" "false" // We don't support early prediction at the moment, which async send requires
// Nav gen
"nav_gen_connect_dist_a" "2.0"
// Spew warning when adding/removing classes to/from the top of the hierarchy
"panorama_classes_perf_warning_threshold_ms" "0.75"
// Panorama - enable minidumps on JS exceptions
"panorama_js_minidumps" "1"
// Enable the render target cache optimization.
"panorama_disable_render_target_cache" "0"
// Enable the composition layer optimization
"panorama_skip_composition_layer_content_paint" "1"
// Steam audio loading data
"snd_steamaudio_load_reverb_data" "0"
"snd_steamaudio_load_pathing_data" "0"
"snd_steamaudio_load_occlusion_data" "0"
"snd_steamaudio_load_dimensions_data" "1"
"snd_steamaudio_load_materials_data" "0"
// Steam Audio project specific convars
"snd_steamaudio_enable_custom_hrtf" "0"
"snd_steamaudio_active_hrtf" "0"
"snd_steamaudio_pathing_order" "3"
"snd_steamaudio_pathing_order_rendering" "3"
"snd_steamaudio_enable_pathing" "0"
"snd_steamaudio_enable_reverb" "0"
"snd_steamaudio_reverb_level_db" "-6"
"snd_steamaudio_enable_pathing" "0"
"snd_steamaudio_invalid_path_length" "0.0"
"snd_steamaudio_max_probes_customdata_dimensions" "100000"
"snd_steamaudio_dimensions_grid_height_max" "100"
"snd_steamaudio_baked_dimensions_probelookup_usealternate" "1"
"snd_steamaudio_custombake_dimensions_size_and_inout_bake_enabled" "1"
"snd_steamaudio_custombake_dimensions_outsidefield_bake_enabled" "0"
"snd_steamaudio_custombake_dimensions_smallsizefield_bake_enabled" "0"
"snd_steamaudio_dimensions_max_ray_length" "2500"
"cl_disconnect_soundevent" "citadel.convar.stop_all_game_layer_soundevents"
"snd_event_browser_default_stack" "citadel_default_3d"
// voip
"voice_in_process" "1"
// Sound debugging
"snd_report_audio_nan" "1"
// Audio system settings
"snd_sos_max_event_base_depth" "10"
"sos_use_guid_filter" "1"
"voice_always_sample_mic"
{
"version" "2"
"default" "0"
}
"reset_voice_on_input_stallout" "0"
"voice_input_stallout" "0.5"
"audio_enclosure_calc_enabled" "0"
"sc_layer_batch_threshold_fullsort" "20"
// Perf/Parallelism
"iv_parallel_restore" "1"
// For perf reasons, since we don't use source-based DSP:
"disable_source_soundscape_trace" "1"
"fps_max" "400"
"fps_max_ui" "120"
"in_button_double_press_window" "0.3"
// Convars that control spatialization of UI audio.
"snd_ui_positional" "1"
"snd_ui_spatialization_spread" "2.4"
// sound volume rate change limiting
"snd_envelope_rate" "100.0"
"snd_soundmixer_update_maximum_frame_rate" "0"
//don't let people mess with speaker config settings.
"speaker_config"
{
"min" "0"
"default" "0"
"max" "2"
}
"snd_soundmixer" "Default_Mix"
"cloth_filter_transform_stateless" "0"
"cl_joystick_enabled" "0"
"panorama_joystick_enabled" "0"
"snd_event_browser_focus_events" "true"
"cl_max_particle_pvs_aabb_edge_length" "100"
// Particles
"cl_aggregate_particles" "true"
"r_particle_batch_collections" "1"
"citadel_enable_vdata_sound_preload" "true"
"r_add_views_in_pre_output" "1"
// Disable Cubemap Brightening
"lb_cubemap_normalization_max" "1"
"update_all_keyframed_in_spatial_partition_update" "0"
"parallel_update_surrounding_bounds_in_spatial_partition_update" "1"
"always_perform_full_spatial_partition_update" "1"
"cl_interp_parallel" "1"
"parallel_perform_invalidate_physics" "1"
"phys_agg_world_compounds" "0"
"cl_updaterate" "128"
"sv_parallel_checktransmit" "2"
"net_gather_child_fields_only" "1"
}
Memory
{
"EstimatedMaxCPUMemUsageMB" "1"
"EstimatedMinGPUMemUsageMB" "1"
"ShowInsufficientPageFileMessageBox" "1"
"ShowLowAvailableVirtualMemoryMessageBox" "1"
}
}