Portal 2: Community Edition - November 23rd, 2025 Update
Additions (22)
Added a "client" time version for Sound Operators
output_entry_elapsedandoutput_stop_elapsedwhich use game client time instead of host timeAdded a note to the top of a VMF file if it's saved with any Strata extensions
Added command
cl_particles_dump_jsonto dump particle operators to a fileAdded command
mat_reloadtextureto reload a specific textureAdded command
steam_cloud_listAdded commands
sv_particles_reload/cl_particles_reloadto reload particlesAdded ConVar
cl_pause_on_steam_overlayfor whether singleplayer game should pause when Steam Overlay is openedAdded ConVar
cl_portal_crosshair_auto_scale, which when set to 1 mimics Portal 1 and Portal: Revolution crosshair scalingAdded ConVar
save_check_for_mismatch. When true, the game will not load saves which were taken on old map versions and fires asave_map_version_mismatcheventAdded ConVar
scene_preferlooseto control whether the game should load loose VCDs or cached VCDs firstAdded ConVar
sv_exactbasevelocity, which fixes basevelocity boosters giving entities an extra half tick worth of basevelocityAdded ConVar
sv_mainmenu_chapter_overrideAdded ConVar
sv_player_use_radiusto control player use radiusAdded ConVar
sv_portal_sp_door_crush(off by default) which lets players be crushed byprop_testchamber_doorin single playerAdded ConVar
sv_teleport_snaps_velocity, which makestrigger_teleportentities with "UseLandmarkAngles 1" rotate the teleported entity's horizontal velocity to match the destination angles in addition to rotating the entity's anglesAdded ConVars
save_hud_autosaveandsave_hud. These are utility ConVars to manage UI stateAdded ConVars
save_screenshot_res_x,save_screenshot_res_y,save_screenshot_res_aspectandsave_screenshot_res_fov. Settings for game save screenshotsAdded game events
portal_placedandportal_fizzledAdded game events
save_begin,save_map_version_mismatch, andmap_load_failedAdded startup parameter
-borderedwhich will force the game to start with window borderAllow directly adding ZIP files as search paths
Restored the
statscommand
Fixes (32)
Added workaround for SDL2/X11 bugginess with exclusive fullscreen windows
This makes "Fullscreen" and "Fullscreen Window" display modes identical unless -allowexclusivefs is passed
Clamped
fov_viewmodelvalue within 1-179cl_showposnow shows horizontal and vertical velocity instead of just horizontalConVar
cl_fovis now archived in the configConVars
cl_pitchupandcl_pitchdownare now clamped at 89 to prevent weird look behavior on controllersDamage inflicted by door crush is now attributed to the door instead of the world
Fixed a crash on exit when two instances of the game are open
Fixed a crash on transitioning from
d1_trainstation_04tod1_trainstation_05from the new HL2 anniversary updateFixed choreo scenes non functioning
Fixed commentary node subtitles sometimes not showing because the WAV file isn't precached
Fixed commentary nodes having choppy animations
Fixed crash if missing VOX-related files
Fixed crashes when using
mat_crosshaircommands from main menuFixed crosshair dots not scaling with crosshair scale
Fixed cursor remaining hidden on the main menu after launching the game (Linux bug)
Fixed dedicated servers failing to open a socket
Fixed find file operations being broken on Linux in some cases
Fixed
fps_max0 ignoringfps_max_menuFixed full screen resolution scaling on Linux
Fixed jittery input with
m_rawinput1/2 on LinuxFixed listen servers rejecting connections with the reason of being full, even if not full
Fixed loading games that lack a specified MOD searchpath in their
gameinfo.txtFixed paint blobs crashing game in rare cases
Fixed possible crash when loading corrupted BSP file
Fixed possible crash when tempents are used
Fixed rare crash that could happen on startup
Fixed some incompatibility with thirdparty software
Fixed some output spew being invisible in the console
Fixed Windows booting into exclusive fullscreen on first boot
Load basemodui translation files
Made SDL code respect
-displayUnchecked player dissolve
Improvements (15)
Changed ConVar
volumedefault to0.5chaos.exehas been renamed to respective gamesImproved collision logic around some brush edges
Improved performance of client side entity classname comparisons
Improved performance of debug overlay texts like
ent_textIncreased
fov_desiredbounds to 1-179 from 75-90Made low OS memory warning print a little bit less often
Made
surfaceproperties_manifest.txt,game_sounds_manifest.txt,hudanimations_manifest.txtcome from theMODsearch path instead ofGAMEMods now don't share configs
Moved configs that were under
platform/configto<default_write_path>/cfgPulled in changes from Squirrel
2.2.5for improved VScript stability/performanceRemoved check in
sv_allow_mobile_portalsto only apply cheats onsp_a2_bts5. ConVar is now marked as cheat always but maps are allowed to control itThe ConVar
engine_no_focus_sleepis now saved in configsUpdated ConVar
save_screenshot. A value of 2 will now also create a save screenshot when an autosave is madeUpdated pango, cairo, freetype2, fontconfig to their latest versions
Hammer (47)
Added a helper that better visualises
linked_portal_doorAdded a Scene Browser to Hammer for previewing VCD sounds and animations
Added commands
hammer_actandhammer_dialog_showAdded initial hotspot implementation to Hammer (thanks Baguettery!)
Added parameter
%ToolViewportTexturethat can be applied to any material to show a different material in the Hammer 3D viewport on brush surfacesAdded Particle Browser button to Hammer Tools tab
Added rotation cloning to the selection tool by holding shift (disabling rotational snapping can still be done by holding alt)
Added rotation pivot point to the selection tool
Added support for scaling
prop_staticandprop_dynamicright from the 2D viewportAdded support for uniform scaling in the 2D viewport if resizing while holding control
Added 'total elapsed time' to Hammer compile window
Default Hammer render distance for models and details has been increased from 400 to 20,000
Entities in Hammer will no longer erroneously scale with the 'scale' keyvalue
FGD flag values can now have description (currently not visible in any UI)
Fix Hammer crash when setting tinted overlay color back to white
Fixed a crash when reading malformed textures
Fixed a number of minor Hammer crashes for the Entity Properties window
Fixed crash when using Scene browser in Hammer
Fixed crash with the catapult helper in Hammer when you delete KVs on a catapult entity
Fixed discord state in Hammer not updating immediately after changing settings
Fixed Entity Help dialog having unreadable black text on dark mode
Fixed Entity Help dialog not rendering text within angled brackets
Fixed Hammer erroring out if Steam mounting is unavailable, even if the selected game doesn't need it
Fixed Hammer regression causing objects to be duplicated
Fixed Hammer scaled
prop_static2D bounding box not rotating correctlyFixed Hammer storing empty path for last opened map directory when closing the map browser without selecting a file
Fixed Hammer transformation dialog not scaling
prop_staticorprop_dynamiccorrectlyFixed line helpers not hiding when disabling show helpers
Fixed Open Map dialog not defaulting to the configured map directory sometimes
Fixed Particle Browser crashing when previewing certain new TF2 particle effects
Fixed rndwave and other soundscript features not working in Hammer Sound Browser
Fixed Sound Browser and Soundscape Browser not saving and restoring settings properly
Fixed Sound Browser Open Source button not working sometimes
Fixed Sound Browser text fields not letting users copy their value
Fixed Soundscape Browser filtering not selecting the right item
Hammer's menu option "Load Pointfile" has been renamed to "Load Pointfile (Find Leak)"
Implemented rotation and alternate group hotspot rect flags in Hammer
Improved compile tools behavior in situations when you're mapping with Hammer in Wine and running the game natively on Linux
Improved high DPI scaling in Hammer to work better on 4K displays with resolution scaling
Improved spacing on entity report dialog
Improved visual clarity of PBR in Hammer's shaded textured polygons mode
In Hammer's texture replace dialog 'Everything' is now checked by default to bring parity with stock Hammer
PBR materials should nolonger be overexposed in Hammer
Sort the default point entity and solid entity option dropdowns in Hammer alphabetically
Texture browser properly restores active texture group
The scrollbars on 2D viewports in Hammer are now disabled by default
Updated sound browser UI to use space more efficiently
Tools (23)
Added
mat_texture_listDevUI panel to quickly view the list of used materials on a mapAdded experimental VRAD optimization mode
-culllightsAdded soundscriptui for debugging sound scripts
Added particle ops and sound ops modes to docdump
Added
-reportconsole parameter to VBSP VRAD and VVIS to output compile time reports as keyvalue filesATI1N and ATI2N formats will now use their correct names in debug windows like
mat_texture_listDisplay warning when using the obsolete
-LDR,-HDR, or-bothcompile options with VRADFixed a crash in Faceposer during startup
Fixed a crash in HLMV when accessing an invalid model
Fixed crash in VGUI material browser (used in the particle editor and material editor) when viewing certain materials
Fixed Faceposer crash when loading an invalid subscene
Fixed issue where surfaceproperties would fail to parse in VBSP
Fixed non uniformly scaled static props getting bad normals in VRAD
Fixed paths being lowercased in VBSP/VRAD/VVIS
Fixed rare VRAD crash related to static prop bounce lighting
Fixed relative
-gamepaths breaking VBSP/VRAD/VVISFixed VMT patch files error when compiling a map if missing an include or replace KV pair
Fixed VRAD baking lightmaps for all light modes
Improved compiler logging for VMT patch file errors
Improved mdlinfo output and usability
Moved all HLMV and Faceposer settings to be stored on disk instead of in the registry
Revamped mdlinfo to output more data in KV format
StudioMDL properly caches models when loading
Panorama (26)
Added initial iteration of Panorama world panels
Added API
GameInterfaceAPI.GetMaps()Added API
GameSaves.CreateSaveGame()Added API
GameSaves.GetGameSaves()Added API
GameSaves.IsAutosaveInProgress()Added API
GameSaves.IsSaveInProgress()Added
$.BBCodeToHTMLhelper functionAdded event
OnAutoSaveBeginAdded event
OnAutoSaveDangerousBeginAdded event
OnSaveBeginAdded event
OnSaveMapVersionMismatchAdded
OnMenu1andOnMenu2Panorama events, which get called for controller X and Y buttons when the menu is openAdded underline
<u>, strikethrough<s>, and heading 3<h3>tagsExposed
frametimeanddefaultframeproperties on theAnimatedImageStrippanel to JavaScriptFixed a crash related to Panorama failing to read files asynchronously
Fixed applying bold styling to
<strong>element in PanoramaFixed bugs with pose parameters, flexes and sequences in the Panorama model panel
Fixed dropdown menus sometimes eating inputs while closed
Fixed issue where models in the Panorama model panel can be yeeted away by
LookAtModel()callsFixed debugger exiting the entire game when closed with the (X) button
Fixed JavaScript modules sometimes erroring on instantiation
Fixed model panel lights being a bit too weak
Fixed sounds playing from map origin
Made
panorama_blur_ecomodefunctional and applied to every panelThe game now loads the following paths for localizations:
panorama/localization/%modname%_%lang%.txtpanorama/localization/panorama_%lang%.txt
VideoSettings will no longer require an element with id
DynamicTonemappingto exist
AngelScript (17)
Added the following
CBaseCombatWeaponvirtual methods. These can be overriddenReloadItemPreFrameItemPostFrameItemBusyFrame
Added
util::Remove(CBaseEntity)andCBaseEntity.Remove()Added
util::TraceLine,util::TraceHull,util::TracePortalLine,util::GetEntityByIndex,util::GetMaxEntities,util::RemoveAdded
CGlobalEntityList, accessed bygEntList. Methods:FindByClassnameFindByNameFindInSphereNextFirstFindByTargetFindByModelBindByNameNearestFindByNameWithinFindByClassnameNearestFindByClassnameWithin
Added bindings for
CLight:GetInnerAngleGetOuterAngleGetColorHDRGetColorGetClusteredRadiusGetColorScaleGetColorScaleHDRSetColorSetColorHDRGetRadiusOverrideSetRadiusOverrideToggleTurnOffTurnOnSetShadowSizeGetShadowSizeGetPatternSetPatternSetOuterAngleGetOuterAngleGetStateSetLightFalloffCLQSetLightFalloffD50D0GetLightFalloffCLQGetLightFalloffD50D0IsHDR
Added bindings for
IPhysicsObject(too many to list)Added bindings for ConVarRef
Added bindings to fire game events (
global::GameEventManager)Added numerous method bindings to
CBaseAnimatingto make it match the VScript API (too many to list)Fixed crash on exit
Fixed dangling handles to existing scripts that registered events
Added the following bindings for
CBaseEntity:GetDebugNameGetClassnameGetEntityIndexGetEntityNameGetKeyValueGetModelNameGetElasticitySetElasticityIsFloatingIsBSPModelGetFrictionSetFrictionSetGravityGetGravityPrecacheScriptSoundHasPhysicsObjectGetPhysicsObject
Added commands
sv_scriptsystem_dump_jsonandcl_scriptsystem_dump_jsonfor dumping AngelScript API documentation to a JSON fileRenamed
global::GameEventManager->gGameEventManagerRenamed
UTIL_TraceLine->util::TraceLine,UTIL_Remove->util::RemoveRenamed namespace
Utilitytoutil
VScript (9)
Added ConVar
vscript_collect_garbageto enable the Squirrel GC and disabled it by default for performance reasons (reverts a previous change from 2022 that enabled the GC)Added bindings for paint gun
Function
SendToConsoleis now available on the client tooAdded function
CSceneManager::IsSceneRunning()Renamed
SetValue->SetStringin persistent storage APIAdded bindings for
CBaseAnimating:FindBodygroupByNameGetSkinSetSkin
Added bindings for
CPropWeightedCube:GetCubeType(as well as corresponding enum values)Added the following methods to
CLight:SetLightColorSetOuterAngleSetInnerAngleSetLightFalloffCLQGetOuterAngleGetInnerAngleSetShadowSizeGetShadowSizeTurnOffTurnOnToggleSetPatternSetLightFalloffD50D0SetClusteredRadiusOverrideGetClusteredRadiusOverrideGetState
Added the following methods to
CBaseEntity:TeleportIsFloatingGetKeyValueIntGetKeyValueFloatGetKeyValueBoolGetKeyValueStringGetElasticitySetElasticity
Entities (34)
Added "Use Global Config" and "Global Config: Sign ID" properties to
prop_testchamber_signwhich lets modders read chamber sign information from a config file. Allows for multiple signs per mapAdded
SetPushSpeedinput totrigger_pushAdded a "Strict Mode" entity setting to
trigger_setspeedwhich helps maximize boost consistencyAdded attachments
laser_attachmentandlaser_glow_attachmentfor reflection and Schrödinger cubesAdded entity
func_touch, a solid entity with the same outputs and configuration astrigger_multipleAdded input
ExplodeBombtoprop_paint_bombAdded input
LockEmitStateto laser/Schrödinger cubes to lock the current laser stateAdded inputs to
logic_playerproxyLowerWeaponReadyWeapon
Added inputs to
npc_portal_turret_floorEnableMotionDisableMotion
Added inputs to
vgui_neurotoxin_countdownPauseResumeSetTime
Added properties to
weapon_portalgunmodelviewmodelCustomPortalColorsPortal1ColorPortal2Color
Added the following inputs to the light entities:
SetLightColorSetLightScaleSetLightFalloffSetInnerAngleSetOuterAngle
Added tint color property to
info_overlay, which allows mappers to change the color of overlaysCombine and metrocops now correctly use their VOX sentences
Dissolve-related keyvalues and inputs now work on all entities derived from
CBaseAnimatingFixed
env_ambient_lightlighting changes being carried over when switching mapsFixed
env_globalnot firing theCounteroutputFixed
env_projectedtexturecrashing when failing to load a movieFixed bug on laser/Schrödinger cubes with
EmitLasercausing laser state to become permanentFixed citizens not having the correct voice lines
Fixed crash when hunters attempted to attack NPCs without being in a squad
Fixed crash when picking up personality cores, while a cool feature is enabled
Fixed input
SilentDissolvebeing disabled by defaultFixed portal gun unable to fire through angled fizzler AABB
Fixed redirected lasers looking laggy
Fixed some dynamic prop entities potentially transitioning to the next map when they're not supposed to
Fizzlers will now turn on/off visually when sent their Toggle input
Improved projected texture limit by implementing a queue. The first projected texture to be activated is the first one to be disabled when the limit is exceeded
Added ConVar
debug_flashlight_limitwhich, when enabled, prints information about the projected texture queue every time a projected texture gets enabled or disabledLaser catchers will no longer reset their skin when loading a save while powered
Portals shot from a
weapon_portalgunnow properly link to the player's portalsReworked the "Velocity Mode" options on Strata's version of
trigger_teleportReworked the settings of the
trigger_setspeedentity to be easier to useSimplified the backwards compatibility settings on Strata's version of
trigger_teleport
Graphics (55)
Added clustered renderer
Default
r_paintblob_otherviews_highresto 1Fixed testing element dynamic lights being too bright
Added a console warning for when the clustered shadow/cookie atlases are full
Added a flag to
light_rtandlight_rt_spotto force shadows to update every frameAdded launch parameter
-shadowatlassizeto specify clustered shadow atlas dimensions. Must be power of twoAdded new
$alphaditheroption to PBR shader. When set, dithering will be used instead of blending for transparencyAdded support for
$treeswayto PBR. The material parameters match VertexLitGenericAdded ConVar
cl_player_render_in_reflective_glassChanged behaviour of
$blendtintbymraoalphato apply tint when alpha is 1 rather than 0Note that this may break any PBR materials that used
$blendtintbymraoalpha
Detail objects should now render
Fixed
r_portal_light_intensitybeing too high by defaultFixed a crash on maps with lights resulting in negative radii calculations
Fixed brightness of beam halo
Fixed crash that could occur when reflective/refractive glass was being rendered
Fixed crash when drawing 3D skybox in water reflection through portals
Fixed crash when setting dof quality ConVar too high
Fixed crash when trying to use VolumeClouds shader
Fixed crash with AnimatedOffsetTexture material proxy
Fixed CSM always being disabled on water
Fixed CSM not working on world
Fixed flashlight being weird after clustered light model changes
Fixed flashlights suddenly becoming invisible far from their origin
Fixed fully dynamic named lights having lightstyles allocated for them
Fixed game crashing when loading map with missing materials and
mat_error_texture_advancedenabledFixed incorrect light falloff
Fixed issue where toggling dynamic lights can toggle light style 0
Fixed light cone and axis visualizers being inaccurate in the clustered light inspector
Fixed light reflection artifacting in the PBR shader
Fixed light specular/diffuse being incorrect on certain types of water
Fixed LightmappedGeneric being incorrectly tinted when using
$addbumpmapsFixed lights becoming fully shadowed outside their NearZ/FarZ range
Fixed models with transparent meshes being rendered incorrectly when using fast-path
Fixed overlays not being fully lit on
mat_fullbright 1Fixed potential bug with detail texcoord transforms in VLG when
$treeswayis enabledIf you notice broken VLG treesway models, please tell us!!
Fixed projected textures not rendering properly on surfaces with
$alphatest1, like gratesFixed realtime light 0% distance/50% distance brightness being incorrect
Fixed some refract textures being too dark
Fixed static lights being networked (and rendered) on client
Fixed static props compiled with Strata compilers showing black on
mat_fullbright 1Fixed viewmodels being forced to draw when using AlternativeSorting on an entity
Fixed water rendering with
pngcommand for resolutions <16384x16384Force disable
$depthblendon spritecard materials when-toolsis enabledThis is a workaround for them not rendering in the particle editor
Fully removed
$flatfromUnlitGeneric. It didn't do anything before either but now it's totally goneImplemented HDR cubemap seam/edge blending
Improved clustered lighting performance on some GPUs and maps with many lights
PBR shader will not mask off base alpha when
$blendtintbymraoalphais used (matching VLG behavior)Removed system for swapping out models based on GPU level (legacy PC code)
Stencil not being reset after mesh draw in DX11 shader
Strata Source now defaults to High settings for all users on first boot
Water draws properly when taking 360 screenshots
$lodreplacemodel works as expectedmat_error_texture_advancednow also replaces materials with missing textures360 screenshots have postprocess enabled
360 screenshots now align with viewing direction
VTF (7)
Don't fail to load a VTF if an unused resource cannot be read
Ensure VTF compression resource is always loaded
Fixed compressed VTFs (
v7.6) failing to load whenmat_picmipwas 1 or higherFixed Zstandard-compressed VTFs failing to load if a mip level has a zero-size width or height
Improved quality of compressed textures generated by vtex
Load pre-
v7.5VTFs formatted with ATI1N/ATI2N with the correct formatVTF hotspot data resource ID changed to match new specification
Workshop (14)
Added
-workshopidparameter to workshopgui and workshopcliAdded
mounted_by_defaultkey to addon config to not mount addon when first discoveredAdded documentation link to Workshop GUI help tab
Added launch argument
-noworkshop. The launch argument-safemodenow also implies-noworkshopAdded option to disable updating addon details from Steam to Workshop GUI options tab
Added reload button to Workshop GUI file tab
Allow loading ZIP file addons
Allow some more Source engine file types in addon uploader
Fixed
mapcommand autocomplete not updating after addons are enabled/disabledFixed addon list not saving sometimes
Fixed the Addon List DevUI window
Fixed Workshop GUI not always correctly loading or saving some fields
Fixed workshop uploader failing when certain keys are empty string
Videos can now be loaded from vpks and bsps
Command System (9)
Added a system to allow entities and scripts to always run certain commands regardless of
sv_cheatsAdded a system to block entities and scripts from running certain dangerous commands
Added ConVar
cl_require_servercanexecute_in_spand defaulted it to1. This will block maps from running potentially malicious commands while in singleplayerAdded ConVar
sv_allow_unsafe_map_commandsfor backwards compatibility with older maps running blocked commandsBlocked entities and scripts from running any commands marked as admin only
Fixed admin only commands not always filtering correctly
Fixed admin only commands not working while not in a map
Fixed regression preventing ConVars from being set prior to a server becoming active
Marked the following ConCommands and ConVars to always be allowed to be run and set by entities, scripts, and maps (
FCVAR_MAP_CAN_EXECUTE)change_portalgun_linkage_ident_teleportent_orientcc_emitscene_playvcdsv_regeneration_wait_timestartneurotoxinsgive_bootsremove_bootscan_carry_both_gunsgive_portalgungive_portalgun_orangeupgrade_portalgunupgrade_potatogunsv_player_collide_with_lasergive_paintgunupgrade_paintgungivesetmodelsv_gravityplayer_throwforceplayer_throwenable
Game (6)
Added a whole new Main Menu UI!
Updated
mat_bloomscale's default value to match Portal 2Fixed broken dust particles in
sp_a1_wakeupandsp_a2_coreFixed missing
prop_energy_ballsound effects and materialsFixed error model appearing inside
prop_energy_ballentities when inside a portalFixed minor visual errors on portal emitter props (Special thanks to lenship2!)
Local Addons (10)
This update includes a new local addons system. Local addons allow us to implement small, toggleable adjustments to various aspects of the game, without directly editing the engine's code. If you have made an addon in the past or are interested in producing local addons for P2:CE, see here for submission guidelines / info: https://github.com/StrataSource/p2ce-addons A list of local addons which have already been added can be found below:
Added "Portal 1 Portal Gun" local addon
This replaces the portal gun's viewmodel, particles and SFX with Portal 1's, and changes the particles and sfx for portals (Special thanks to Electrodynamite12 for providing updated particles!)
Added "Personality Sphere Visual Updates" local addon
This provides general improvements for personality spheres and related models.
Added "Old Schrödinger Cubes" local addon
This replaces the Schrödinger cube model with a version from earlier in development.
Added "Refractive Fizzlers" local addon
This adds a refractive visual effect to all fizzler types.
Added "Unused Turret VO" local addon
This reimplements any unused Turret voicelines found within Portal 2's files, and adds script logic to restore lines designed to play if Turrets become blocked by a Hard Light Bridge.
Added "Updated Media" local addon
Provides a method of toggling the changes made to menu backgrounds, loading screens and the post-credits cutscene.
Added "Player Blood" local addon
This re-enables player blood, as seen in Portal 1
Added "Adhesion/Reflection Gel Assets" local addon
This implements Adhesion/Reflection gel-related assets (Special thanks to lenship2 for creating this local addon!)
Added "Dynamic Light Bridge Lights" local addon
This makes Hard Light Bridges cast light on the surroundings, as seen in our "Clustered Graphics Showcase" . Warning, can be very expensive on lower-end hardware!