Portal 2: Community Edition - March 18th, 2026 Update
Additions (17)
Added 360 video export to
startmovieAdded a
soundKV toenv_sparkto change the spark soundAdded ability to configure the filter used for floor buttons
Added Controller LED coloring by last shot portal (stolen from Portal 2)
Added ConVar
cl_portal_use_old_fizzle_effectsfor using old Portal 1 style portal fizzle effectsAdded
-debug_dynamic_mountsto debug Steam dynamic mountsAdded enabled field to particle operators to toggle operator on/off
Added new customization option to show Conversion Gel on cubes. This is also available as an
info_portal_gameruleskeyvalue for mapmakersAdded
OnFizzledoutput toprop_portalAdded
OnPressedCube/OnPressedPlayerto floor buttonsAdded
player_weapons_removed&player_equippedgame eventsAdded
sv_force_upgrade_weighted_cubeConVar, to force the new models, allowing always seeing paint at the cost of backwards compatibility. This is intended for situations like default levels that are known not to check for specific modelsAdded texture flag to fully ignore
mat_picmip(NOLOD only ignoresmat_picmipwhen ConVar is positive) at 2^18All paintable props now have
OnPaintedandOnUnpaintedoutputsFloor buttons will now use the second hitbox set, if present to configure the trigger bounds
prop_monster_boxnow has gel overlays like regular cubes. It also has a new keyvalue to determine whether it should use the partially broken paint behaviour like in base Portal 2, or behave the same as regular cubesprop_physics_paintablecan specify which skins to swap to in order to use gel overlays
Fixes (25)
Allowed .dat files to be included in addons
Fixed a crash if entity filters are evaluated on dead entities
Fixed a crash in some cases when cubes are pulled out of the way of a laser
Fixed an issue where scenes inside
scenes.imagefiles would not be properly precached, which resulted in their associated audio files being unable to playFixed crash with ragdolls
Fixed crash with the netconsole
Fixed
cvar_defaults.cfgnot properly overriding ConVars marked with FCVAR_REPLICATEDFixed
host_map_mount_order_detectionnot prioritizing custom asset paths in some casesFixed issues with map name handling for
trigger_changelevelandpoint_changelevelFixed local splitscreen
Fixed misspelled KV on
snd_op_occlusion:occlusio_db_lossis nowocclusion_db_loss(old KV still works though)Fixed painted cubes not displaying adhesion gel skins
Fixed pellets produced by
fire_energy_ballnot hurting playersFixed rare crash when using
point_templateunder some circumstancesFixed save screenshots containing garbage
Fixed saves not working properly on Linux, due to a file system bug
Fixed splitscreen mode not rendering correctly
Fixed
sv_alternateticksbeing forced off on Linux. Apparently it's even doing this in Portal 2Fixed
sv_schrodinger_emit_soundFixed the game not responding to
SIGINTFixed WebM video export
Make
env_global's GetCounter input usablePreserve bodygroups (frankenturret heads, etc) when fizzling objects
Properly clear
env_globalcounters when initially createdVTF textures below
v7.5are no longer allowed to setv7.5-specific flags to guard against flags from TF2 being set
Improvements (18)
Cloth no longer simulates while the game is paused by default
cl_portal_use_new_dissolveandfx_new_sparksno longer require cheats to be enabledConsole input autocomplete suggestions now include fuzzy matches
Entity filters will no longer crash if chained in an infinite loop
env_sparkentities can now overridefx_new_sparksto use new or old sparksExposed the following debug ConVars:
snd_occlusion_pos_override,snd_occlusion_material_override,snd_occlusion_visualize,snd_occlusion_visualize_filter,snd_occlusion_indirect_radius,snd_occlusion_indirect_min,snd_occlusion_indirect_max,snd_occlusion_collide_min_distancefps_max_menuis now also respected while in game with opened menuHigh Energy Pellets will now obey damage filters on the player
Lightboard KeyValues definitions file no longer needs to exist for the game to boot
Made
sv_gravityaffect clothMarked
hud_fastswitchas archiveMarked
r_portal_light_intensityas archivedMarked
sv_portal_legacy_compat,sv_enableholdrotation,mv_uncrouch_on_jump,mv_duckjump, andmv_bhopConVars as executable by mapsMove rumble to Steam input
Removed devonly flag from
net_fakelagRemoved
soundsystem.dllReworked how
prop_weighted_cubefunctions. Every cube type has its own model, with identical skin layout. Cube type has been split intobehaviorandshapefields, allowing things like a spherical reflection cube. These new models dynamically tint, allowing showing all gel types as well as matching the configured colorsSchrödinger cubes now emit
SchrodingerCube.Musicfor music
AngelScript (27)
util::TraceLinecan now takearray<CBaseEntity@>as ent to ignoreutil::TraceLinePortalcan now takearray<CBaseEntity@>as ent to ignoreAdded (cl|sv)_scriptsystem_dump_lsp commands to game
Added
CBaseEntity::GetGroundEntityCBaseEntity::IsOnGroundCBaseAnimating::IsOnFireAdded
EHandle<>template type to ASAdded
scriptsystem_dump(and _json/_lsp) variant commands to HammerAdded access masks to angelscript bindings. This will prevent client/server functions from being called in the wrong places
Added bindings for
AngleVectorsAdded ConVar change callback support to scriptsystem
Added KV and output support for script classes
Added parameter names to a lot of AS functions/methods
Applied access masks to attributes. ServerCommand/ClientCommand are only available in their respective domains
Entities in AS can now be casted
Entity outputs now have
InitandGetmethodsExposed
CBaseEntity::KeyValuesmethods to ASExposed more base entity classes to AS (only a stub for now)
Fixed AngelScript malformed attribute error displaying 'Entity' attribute name instead of the real name in some cases
Fixed AS debugger not working
Fixed casting in AS
Fixed issue where
CommandArgs@in custom commands had to be non-const. It now requires constFixed Scriptsystem in Hammer not being able to load any scripts
Refactored script loading. Each search path will now load
sv_init.ascl_init.asandinit.asand defineSERVERandCLIENTto differentiate where the modules are to be loadedScriptsystem debugger now works properly
Scriptsystem dumps now contain global funcdefs
Scriptsystem json dumps now use AS method names
Scriptsystem lsp dumps now doesn't duplicate methods from parent classes
Scriptsystem's
string.toIntandstring.toUIntcan now convert numbers from any base
Graphics (21)
Added
$emissiontransformto PBR, to apply transform to the emission texture specificallyAdded
nearzproperty to clustered light entitiesAdded
sv_reloadmaterialsonmaploadConVar that controls material reload behavior when loading map, can improve map load times when disabledAdded DoSSAO function to viewpostprocess
Added light cookies to
light_rtentitiesAdded various ConVars to control AO
Doubled cookie atlas size, allowing 4 times the texture data to be allocated before exhaustion
Fixed
r_ssaobreaking cubemap buildingFixed
SetLightScaleon clustered lights not changing the light intensityFixed cookied lights only displaying cookies when shadowed
Fixed crashes when using some material proxies on non-standard stuff
Fixed flashlight and
env_projectedtextureshadows being 4x larger per-dimension than their pre-clustered equivalentsFixed lightmappedgeneric ssbump detail textures not working properly
Fixed multi-frame texture cookies only ever displaying the first frame
Fixed SSAO crashing game in some cases
Fixed sun specular not blending with lightmaps properly on PBR textures
Increased default clustered shadow budget from 6 to 12
Light cookies now correctly use the light entity orientation
PBR materials with manually specified
$envmapwill no longer be overridden to useenv_cubemapRate limited the clustered atlas allocator warning to 1 message per second
Replaced general clustered light modes with independent lighting component modes
Panorama (5)
Added
SettingsEnumBitFieldPanorama controlAdded
WeaponEquippedandWeaponsDroppedPanorama eventsFixed
SettingsSliderinvertnot working correctly when the slider is set to display a percentageFixed crash with the video settings screen when an incorrect panel type is used for the setting dropdowns
Fixed Panorama rendertargets being invalidated when
mat_picmipis changed
Tools (41)
devui_auto_scalewill now use the smallest window dimension to calculate scale factorAdded "Paste Special Again" context menu option in Hammer, which will use the last saved Paste Special options in the session without a prompt
Added
-EnvCubemapNotForcedForPBRparameter to VBSP, for mappers that need PBR materials with handmade envmapsAdded
-help/-?to StudioMDLAdded
-nowinerenderfixto disable rerendering Hammer views on each frame in WineAdded a "Use Native File Browser" option in Hammer, to allow using Qt file dialogs and vice versa
Added an ImGui game events debugger
Added an in-game cloth/softbody debugger
Added an in-game ImGui material inspector/rudimentary editor
Added ConVar
devui_auto_scalewhich, when enabled, automatically scales DevUI to match the reference resolution of 1920x1080, like PanoramaAdded displays thickness of ropes and cables in Hammer
Added manual inputs to clustered light inspector
Added mdl2dmx, a very basic static prop decompiler
Added Near Z property slider to clustered light inspector
Added position/angle inputs to clustered light inspector
Added script module info DevUI panel
Added support for custom fonts in DevUI themes. FontScaleDpi, FontScaleMain, FontScaleBase control font size. Font property controls the actual font and is a path like
resource/MyFont.ttfAdded support for Hammer++ rectangle map hotspot definitions
Added vtex config flag "ignorepicmip" to control setting the IGNORE_PICMIP flag in the compiled VTF
Allow
bool/booleanto be interchangably for FGD IO and KV definitionsDisplacement tools now edit continuously without needing to move mouse
Entity report dialog can now be sorted
Fixed
devui_auto_scalenot performing any scalingFixed
devui_auto_scaleturning text into a blurry mess below 1080pFixed a crash in Hammer when copy-pasting brushes
Fixed a crash when removing/changing loaded FGDs in Hammer
Fixed copy+paste in ImGui windows
Fixed ImGui looking blurry due to autoscaling
Fixed Paste Special entity name prefix field not retaining its value across multiple different invocations of the dialog
Fixed StudioMDL trying to run
mdon Linux to create the output dir. It now runsmkdir -pHammer now does not spam warning about unknown detail object types
Hammer prints more FGD errors when something goes wrong
Hammer's Discord Rich Presence no longer shares map name by default
Model browser getting sometimes getting stuck
Removed
-winecompatfrom Hammer, fixes will be applied when Wine is detected automaticallyRemoved zlib and libxml2 dependencies from StudioMDL on Linux
Shift+F1 keybind will now toggle the DevUI menu instead of failing to open a nonexistent VGUI window
The
-noaoVRAD parameter now setsLVLFLAGS_DISABLE_BAKED_AOUpdated VRAD help text
VRAD AO is now DISABLED by default and can be enabled by passing
-ao. XeGTAO should be preferred for VRAD baked AOWhen using the eyedropper tool, Hammer will prompt to name entities if they did not have one already
VScript (8)
prop_weighted_cubenow hasGetCubeBehavior(),GetCubeShape(),GetLaser(),IsEmissionLocked(),IsPressingButton()andGetPaint()VScript functions.GetCubeType()was removed, use behavior/shape instead or a model checkAdded
CBasePortal::IsActiveAdded
vscript_script_max_exec_timeto control max allowed script execution time. Use with cautionFixed a crash in VScript when calling
CreateEntityByNameon a non-existing classFixed rare crash from VScript while converting some values to string
Fixed VScript crash related to saving tables that reference themselves
VScript
TraceLineExcan now take an array of entities to ignoreVScript
TracePortalLinecan now take an array of entities to ignore