|
| 1 | +# Portal 2: Community Edition - March 18th, 2026 Update |
| 2 | + |
| 3 | +## Additions (17) |
| 4 | +- Added 360 video export to `startmovie` |
| 5 | +- Added a `sound` KV to `env_spark` to change the spark sound |
| 6 | +- Added ability to configure the filter used for floor buttons |
| 7 | +- Added Controller LED coloring by last shot portal (stolen from Portal 2) |
| 8 | +- Added ConVar `cl_portal_use_old_fizzle_effects` for using old Portal 1 style portal fizzle effects |
| 9 | +- Added `-debug_dynamic_mounts` to debug Steam dynamic mounts |
| 10 | +- Added enabled field to particle operators to toggle operator on/off |
| 11 | +- Added new customization option to show Conversion Gel on cubes. This is also available as an `info_portal_gamerules` keyvalue for mapmakers |
| 12 | +- Added `OnFizzled` output to `prop_portal` |
| 13 | +- Added `OnPressedCube` / `OnPressedPlayer` to floor buttons |
| 14 | +- Added `player_weapons_removed` & `player_equipped` game events |
| 15 | +- Added `sv_force_upgrade_weighted_cube` ConVar, 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 models |
| 16 | +- Added texture flag to fully ignore `mat_picmip` (NOLOD only ignores `mat_picmip` when ConVar is positive) at 2^18 |
| 17 | +- All paintable props now have `OnPainted` and `OnUnpainted` outputs |
| 18 | +- Floor buttons will now use the second hitbox set, if present to configure the trigger bounds |
| 19 | +- `prop_monster_box` now 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 cubes |
| 20 | +- `prop_physics_paintable` can specify which skins to swap to in order to use gel overlays |
| 21 | + |
| 22 | +## Fixes (25) |
| 23 | +- Allowed .dat files to be included in addons |
| 24 | +- Fixed a crash if entity filters are evaluated on dead entities |
| 25 | +- Fixed a crash in some cases when cubes are pulled out of the way of a laser |
| 26 | +- Fixed an issue where scenes inside `scenes.image` files would not be properly precached, which resulted in their associated audio files being unable to play |
| 27 | +- Fixed crash with ragdolls |
| 28 | +- Fixed crash with the netconsole |
| 29 | +- Fixed `cvar_defaults.cfg` not properly overriding ConVars marked with FCVAR_REPLICATED |
| 30 | +- Fixed `host_map_mount_order_detection` not prioritizing custom asset paths in some cases |
| 31 | +- Fixed issues with map name handling for `trigger_changelevel` and `point_changelevel` |
| 32 | +- Fixed local splitscreen |
| 33 | +- Fixed misspelled KV on `snd_op_occlusion`: `occlusio_db_loss` is now `occlusion_db_loss` (old KV still works though) |
| 34 | +- Fixed painted cubes not displaying adhesion gel skins |
| 35 | +- Fixed pellets produced by `fire_energy_ball` not hurting players |
| 36 | +- Fixed rare crash when using `point_template` under some circumstances |
| 37 | +- Fixed save screenshots containing garbage |
| 38 | +- Fixed saves not working properly on Linux, due to a file system bug |
| 39 | +- Fixed splitscreen mode not rendering correctly |
| 40 | +- Fixed `sv_alternateticks` being forced off on Linux. Apparently it's even doing this in Portal 2 |
| 41 | +- Fixed `sv_schrodinger_emit_sound` |
| 42 | +- Fixed the game not responding to `SIGINT` |
| 43 | +- Fixed WebM video export |
| 44 | +- Make `env_global`'s GetCounter input usable |
| 45 | +- Preserve bodygroups (frankenturret heads, etc) when fizzling objects |
| 46 | +- Properly clear `env_global` counters when initially created |
| 47 | +- VTF textures below `v7.5` are no longer allowed to set `v7.5`-specific flags to guard against flags from TF2 being set |
| 48 | + |
| 49 | +## Improvements (18) |
| 50 | +- Cloth no longer simulates while the game is paused by default |
| 51 | +- `cl_portal_use_new_dissolve` and `fx_new_sparks` no longer require cheats to be enabled |
| 52 | +- Console input autocomplete suggestions now include fuzzy matches |
| 53 | +- Entity filters will no longer crash if chained in an infinite loop |
| 54 | +- `env_spark` entities can now override `fx_new_sparks` to use new or old sparks |
| 55 | +- Exposed 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_distance` |
| 56 | +- `fps_max_menu` is now also respected while in game with opened menu |
| 57 | +- High Energy Pellets will now obey damage filters on the player |
| 58 | +- Lightboard KeyValues definitions file no longer needs to exist for the game to boot |
| 59 | +- Made `sv_gravity` affect cloth |
| 60 | +- Marked `hud_fastswitch` as archive |
| 61 | +- Marked `r_portal_light_intensity` as archived |
| 62 | +- Marked `sv_portal_legacy_compat`, `sv_enableholdrotation`, `mv_uncrouch_on_jump`, `mv_duckjump`, and `mv_bhop` ConVars as executable by maps |
| 63 | +- Move rumble to Steam input |
| 64 | +- Removed devonly flag from `net_fakelag` |
| 65 | +- Removed `soundsystem.dll` |
| 66 | +- Reworked how `prop_weighted_cube` functions. Every cube type has its own model, with identical skin layout. Cube type has been split into `behavior` and `shape` fields, allowing things like a spherical reflection cube. These new models dynamically tint, allowing showing all gel types as well as matching the configured colors |
| 67 | +- Schrödinger cubes now emit `SchrodingerCube.Music` for music |
| 68 | + |
| 69 | +## AngelScript (27) |
| 70 | +- `util::TraceLine` can now take `array<CBaseEntity@>` as ent to ignore |
| 71 | +- `util::TraceLinePortal` can now take `array<CBaseEntity@>` as ent to ignore |
| 72 | +- Added (cl|sv)_scriptsystem_dump_lsp commands to game |
| 73 | +- Added `CBaseEntity::GetGroundEntity` `CBaseEntity::IsOnGround` `CBaseAnimating::IsOnFire` |
| 74 | +- Added `EHandle<>` template type to AS |
| 75 | +- Added `scriptsystem_dump` (and _json/_lsp) variant commands to Hammer |
| 76 | +- Added access masks to angelscript bindings. This will prevent client/server functions from being called in the wrong places |
| 77 | +- Added bindings for `AngleVectors` |
| 78 | +- Added ConVar change callback support to scriptsystem |
| 79 | +- Added KV and output support for script classes |
| 80 | +- Added parameter names to a lot of AS functions/methods |
| 81 | +- Applied access masks to attributes. ServerCommand/ClientCommand are only available in their respective domains |
| 82 | +- Entities in AS can now be casted |
| 83 | +- Entity outputs now have `Init` and `Get` methods |
| 84 | +- Exposed `CBaseEntity::KeyValues` methods to AS |
| 85 | +- Exposed more base entity classes to AS (only a stub for now) |
| 86 | +- Fixed AngelScript malformed attribute error displaying 'Entity' attribute name instead of the real name in some cases |
| 87 | +- Fixed AS debugger not working |
| 88 | +- Fixed casting in AS |
| 89 | +- Fixed issue where `CommandArgs@` in custom commands had to be non-const. It now requires const |
| 90 | +- Fixed Scriptsystem in Hammer not being able to load any scripts |
| 91 | +- Refactored script loading. Each search path will now load `sv_init.as` `cl_init.as` and `init.as` and define `SERVER` and `CLIENT` to differentiate where the modules are to be loaded |
| 92 | +- Scriptsystem debugger now works properly |
| 93 | +- Scriptsystem dumps now contain global funcdefs |
| 94 | +- Scriptsystem json dumps now use AS method names |
| 95 | +- Scriptsystem lsp dumps now doesn't duplicate methods from parent classes |
| 96 | +- Scriptsystem's `string.toInt` and `string.toUInt` can now convert numbers from any base |
| 97 | + |
| 98 | +## Graphics (21) |
| 99 | +- Added `$emissiontransform` to PBR, to apply transform to the emission texture specifically |
| 100 | +- Added `nearz` property to clustered light entities |
| 101 | +- Added `sv_reloadmaterialsonmapload` ConVar that controls material reload behavior when loading map, can improve map load times when disabled |
| 102 | +- Added DoSSAO function to viewpostprocess |
| 103 | +- Added light cookies to `light_rt` entities |
| 104 | +- Added various ConVars to control AO |
| 105 | +- Doubled cookie atlas size, allowing 4 times the texture data to be allocated before exhaustion |
| 106 | +- Fixed `r_ssao` breaking cubemap building |
| 107 | +- Fixed `SetLightScale` on clustered lights not changing the light intensity |
| 108 | +- Fixed cookied lights only displaying cookies when shadowed |
| 109 | +- Fixed crashes when using some material proxies on non-standard stuff |
| 110 | +- Fixed flashlight and `env_projectedtexture` shadows being 4x larger per-dimension than their pre-clustered equivalents |
| 111 | +- Fixed lightmappedgeneric ssbump detail textures not working properly |
| 112 | +- Fixed multi-frame texture cookies only ever displaying the first frame |
| 113 | +- Fixed SSAO crashing game in some cases |
| 114 | +- Fixed sun specular not blending with lightmaps properly on PBR textures |
| 115 | +- Increased default clustered shadow budget from 6 to 12 |
| 116 | +- Light cookies now correctly use the light entity orientation |
| 117 | +- PBR materials with manually specified `$envmap` will no longer be overridden to use `env_cubemap` |
| 118 | +- Rate limited the clustered atlas allocator warning to 1 message per second |
| 119 | +- Replaced general clustered light modes with independent lighting component modes |
| 120 | + |
| 121 | +## Panorama (5) |
| 122 | +- Added `SettingsEnumBitField` Panorama control |
| 123 | +- Added `WeaponEquipped` and `WeaponsDropped` Panorama events |
| 124 | +- Fixed `SettingsSlider` `invert` not working correctly when the slider is set to display a percentage |
| 125 | +- Fixed crash with the video settings screen when an incorrect panel type is used for the setting dropdowns |
| 126 | +- Fixed Panorama rendertargets being invalidated when `mat_picmip` is changed |
| 127 | + |
| 128 | +## Tools (41) |
| 129 | +- `devui_auto_scale` will now use the smallest window dimension to calculate scale factor |
| 130 | +- Added "Paste Special Again" context menu option in Hammer, which will use the last saved Paste Special options in the session without a prompt |
| 131 | +- Added `-EnvCubemapNotForcedForPBR` parameter to VBSP, for mappers that need PBR materials with handmade envmaps |
| 132 | +- Added `-help`/`-?` to StudioMDL |
| 133 | +- Added `-nowinerenderfix` to disable rerendering Hammer views on each frame in Wine |
| 134 | +- Added a "Use Native File Browser" option in Hammer, to allow using Qt file dialogs and vice versa |
| 135 | +- Added an ImGui game events debugger |
| 136 | +- Added an in-game cloth/softbody debugger |
| 137 | +- Added an in-game ImGui material inspector/rudimentary editor |
| 138 | +- Added ConVar `devui_auto_scale` which, when enabled, automatically scales DevUI to match the reference resolution of 1920x1080, like Panorama |
| 139 | +- Added displays thickness of ropes and cables in Hammer |
| 140 | +- Added manual inputs to clustered light inspector |
| 141 | +- Added mdl2dmx, a very basic static prop decompiler |
| 142 | +- Added Near Z property slider to clustered light inspector |
| 143 | +- Added position/angle inputs to clustered light inspector |
| 144 | +- Added script module info DevUI panel |
| 145 | +- 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.ttf` |
| 146 | +- Added support for Hammer++ rectangle map hotspot definitions |
| 147 | +- Added vtex config flag "ignorepicmip" to control setting the IGNORE_PICMIP flag in the compiled VTF |
| 148 | +- Allow `bool`/`boolean` to be interchangably for FGD IO and KV definitions |
| 149 | +- Displacement tools now edit continuously without needing to move mouse |
| 150 | +- Entity report dialog can now be sorted |
| 151 | +- Fixed `devui_auto_scale` not performing any scaling |
| 152 | +- Fixed `devui_auto_scale` turning text into a blurry mess below 1080p |
| 153 | +- Fixed a crash in Hammer when copy-pasting brushes |
| 154 | +- Fixed a crash when removing/changing loaded FGDs in Hammer |
| 155 | +- Fixed copy+paste in ImGui windows |
| 156 | +- Fixed ImGui looking blurry due to autoscaling |
| 157 | +- Fixed Paste Special entity name prefix field not retaining its value across multiple different invocations of the dialog |
| 158 | +- Fixed StudioMDL trying to run `md` on Linux to create the output dir. It now runs `mkdir -p` |
| 159 | +- Hammer now does not spam warning about unknown detail object types |
| 160 | +- Hammer prints more FGD errors when something goes wrong |
| 161 | +- Hammer's Discord Rich Presence no longer shares map name by default |
| 162 | +- Model browser getting sometimes getting stuck |
| 163 | +- Removed `-winecompat` from Hammer, fixes will be applied when Wine is detected automatically |
| 164 | +- Removed zlib and libxml2 dependencies from StudioMDL on Linux |
| 165 | +- Shift+F1 keybind will now toggle the DevUI menu instead of failing to open a nonexistent VGUI window |
| 166 | +- The `-noao` VRAD parameter now sets `LVLFLAGS_DISABLE_BAKED_AO` |
| 167 | +- Updated VRAD help text |
| 168 | +- VRAD AO is now DISABLED by default and can be enabled by passing `-ao`. XeGTAO should be preferred for VRAD baked AO |
| 169 | +- When using the eyedropper tool, Hammer will prompt to name entities if they did not have one already |
| 170 | + |
| 171 | +## VScript (8) |
| 172 | +- `prop_weighted_cube` now has `GetCubeBehavior()`, `GetCubeShape()`, `GetLaser()`, `IsEmissionLocked()`, `IsPressingButton()` and `GetPaint()` VScript functions. `GetCubeType()` *was removed*, use behavior/shape instead or a model check |
| 173 | +- Added `CBasePortal::IsActive` |
| 174 | +- Added `vscript_script_max_exec_time` to control max allowed script execution time. Use with caution |
| 175 | +- Fixed a crash in VScript when calling `CreateEntityByName` on a non-existing class |
| 176 | +- Fixed rare crash from VScript while converting some values to string |
| 177 | +- Fixed VScript crash related to saving tables that reference themselves |
| 178 | +- VScript `TraceLineEx` can now take an array of entities to ignore |
| 179 | +- VScript `TracePortalLine` can now take an array of entities to ignore |
0 commit comments