Portal 2: Community Edition · build 22394218 · published
To begin, as of today, all dynamic lights in the engine have been upgraded with the abiliy to produce real-time Volumetric Lighting effects within the game world.
Our new Volumetric Lighting simulates aspects of light scattering through the environment, colliding with all the little particles and dust which float around our atmosphere.
To see Volumetric Lighting in action in an enhanced version of Portal 2's Core Transfer sequence, see the video below:
There are multiple styles of Volumetric Lighting available to be used by level designers! Let's get into them now...
Cast from light_rt_spot entities, this is likely to be the most common form of Volumetric Lighting which will be present in our community's levels.
Similar to a lighting setup you'd see on a stage, or with the old point_spotlight entity in-game, this style creates light within a cone, producing a 'frustum' of fog which raidiates outwards based on the light's field of view.
These can often be used to direct the player to various places, or simply just to look cool in maps.
(Dustmotes are not included with Volumetric Lighting by default. They have been added here to enhance the effect, and can be added to maps using the func_dustmotes brush entity: https://developer.valvesoftware.com/wiki/Func_dustmotes)
Produced by light_rt entities, this is more akin to the style of fog you'd see created by a light bulb within a dusty old house.
These can be used to add special visual-flare to specific areas within levels.
(Reflection Cube lighting will be available via the 'Reflection Cube Lights' local addon in-game in a future update - Volumetric Lighting exaggerated for explanatory purposes.)
(Hard-Light Bridge lighting is available via the 'Dynamic Light Bridge Lights' local addon in-game.)
These can be cast from light_environment entities within levels, provided they make use of CSM (Cascaded Shadowmaps - env_casecade_light entity).
They have the ability to make sunlit, outdoor environments look especially stunning.
NOTE: These don't currently create Volumetric Density on their own, and require already-existing fog to be present. This is planned to change in a future update.
(Scene created for explanatory purposes, not present within Portal 2's campaign.)
Inspired by Source 2, our all-new obb_volumefog entity allow you to do just that! With this entity, you have the ability to define a bounding-box you'd like fog to be created in, no specific light entities required.
You can have the fog fill up the whole cuboidal area, or appear in a more spherical fashion.
All dynamic lights in the engine will interact with the fog and colour/illuminate it realistically, regardless of if they themselves have Volumetric Lighting enabled or not.
NOTE: This entity is still a W.I.P and is subject to change at any time.
Further, this entity also accepts 3D textures to define its shape!
Having fancy new lighting effects is great and all, but why should we bother adding them if you need a supercomputer to run them?
Fortunately, from our testing we have observed little-to-no performance drop when using Volumetric Lighting compared to standard lighting with Clustered.
Volumetric Lighting has been our most requested feature ever, especially since we added Clustered Lighting to Strata Source back in May last year.
Volumetric Lighting is available to play with NOW on the steam branch 'volumetrics'!
We really hope you enjoy creating, or playing, community levels with it!
NOTE: Volumetric Lighting as a whole is still in an early stage, and is subject to change a lot in the short term.
Our Panorama UI overhaul is almost complete, and with it comes a campaign system designed to make playing Workshop content as simple as possible.
NOTE: The new UI and campaign system still a W.I.P, any issues currently present in the screenshots below will be addressed in due course.
This is the central hub for Portal 2: Community Edition. From here, you can access various campaigns, manage mounted addons and adjust settings.
The main-menu background randomly rotates from a set of curated images created by the community, this one was provided to us by Discord user: @mika.tastrophe (Thanks!)
On the topic of campaigns, here is where you can choose what campaign you would like to play!
Subscribing to any campaign uploaded on the workshop automatically adds it to this list! And entering it will automatically mount any of it's required addons as well. (No more forgetting to mount required content!)
Each campaign is provided with it's own mini main-menu which can be customised! Creators can provide various different assets to suit their campaign!
The campaign shown below is "Portal: System Failure - Alpha Preview", and can be found on the P2:CE workshop here:
Making your own campaign, like shown above, is very simple!
Whilst we won't be going into the full details here, check out our Wiki page on making full use of the system here: https://wiki.stratasource.org/modding/p2ce-campaigns
Weighted Storage Cubes have been given a large update to make them much more useful for mappers and modders alike.
Previously, the prop_weighted_cube entity contained a set of predefined cube 'Types', which could be selected by the mapper. These included: Standard, Companion, Reflection, etc.
Now, all cube types have now been split into 'Model', 'Behaviour' and 'Shape'!
This provides the mapper with much more flexibility, allowing you to create... strange concoctions such as a Companion Reflection Cube, or a Schrödinger Sphere, if you're into that...
'Shape' and 'Model' can also have custom values provided!
See below for a list of 'Models', 'Behaviours' and 'Shapes!
Models:
Weighted Storage Cube
Weighted Storage Cube (Rusty)
Weighted Companion Cube
Discouragement Redirection Cube
Discouragement Redirection Cube (Rusty)
Edgeless Safety Cube
Antique Cube
Schrödinger's Cube
Schrödinger's Cube (Rusty)
Behaviours:
Auto (Chosen based on selected 'Model')
Standard
Reflection
Schrödinger
Shapes:
Auto (Chosen based on selected 'Model')
Cubic
Spherical
Internally, each model now has a consistent layout of skins, corresponding to if they are on/off a button, and if they are painted/unpainted (with any type of gel).
On the topic of gel...
As a result of the skin reorganisation for cube models, all cubes now have the ability to be dynamically tinted and covered by paint!
This allows all paint types to be visible on all cube models, and it even matches your own configured paint colours!
Cubes can now also be painted with conversion gel! Whilst this remains disabled by default for consistency with vanilla Portal 2, it can be enabled within the info_portal_gamerules entity.
These new cube changes do not apply to old maps! Only new maps, which will use the new functionality.
Further, we are working on a new 'color vars' feature! This will allow you to tell Static Props and Overlays to use a special identifying name, and then the game can provide a tint to override any props/overlays with that identifer. This can allow for creating gel pipes and paint splatters which match the player's configured paint colours, as an example. This feature is not quite ready yet, however it will be available in a future update.
Finally, for any VScripters, the old GetCubeType() method has been removed, and replaced with GetCubeBehavior() and GetCubeShape() methods instead. Any scripts using the old method must be updated in order to continue functioning correctly.
With all these new additions to Portal 2: Community Edition over the past year, you are probably wondering what the release of this mod will look like.
When that happens, you will no longer be required to apply through https://p2ce.org/beta, and will be able to simply download P2:CE off Steam, like any other mod - all going well.
(As a reminder, ownership of vanilla Portal 2 is required).
Please note that is this an open beta, not a final v1.0 release. As such, there will be bugs and issues, but we're working hard to ensure everything will go as smoothly as possible.
We'd like to thank you for sticking with us after all these years. It is extremely exciting for us to finally be getting this project out the door and in the hands of the general public, and we cannot wait to see what you'll do with P2:CE.
Please join our Discord server to keep up with any future updates: https://p2ce.org/discord
Thanks, and have fun!
- The P2:CE Team
(See below for the full changelog...)
Added a whole new UI and the Campaign System
Added 360 video export to 'startmovie'
Added a 'sound' KV to 'env_spark' to change the spark sound
Added 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_effects' for using old Portal 1 style portal fizzle effects
Added '-debug_dynamic_mounts' to debug Steam dynamic mounts
Added 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_gamerules' keyvalue for mapmakers
Added 'OnFizzled' output to 'prop_portal'
Added 'OnPressedCube' / 'OnPressedPlayer' to floor buttons
Added 'player_weapons_removed' & 'player_equipped' game events
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
Added texture flag to fully ignore 'mat_picmip' (NOLOD only ignores 'mat_picmip' when ConVar is positive) at 2^18
All paintable props now have 'OnPainted' and 'OnUnpainted' outputs
Floor buttons will now use the second hitbox set, if present to configure the trigger bounds
'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
'prop_physics_paintable' can specify which skins to swap to in order to use gel overlays
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.image' files would not be properly precached, which resulted in their associated audio files being unable to play
Fixed crash with ragdolls
Fixed crash with the netconsole
Fixed 'cvar_defaults.cfg' not properly overriding ConVars marked with FCVAR_REPLICATED
Fixed 'host_map_mount_order_detection' not prioritizing custom asset paths in some cases
Fixed issues with map name handling for 'trigger_changelevel' and 'point_changelevel'
Fixed local splitscreen
Fixed misspelled KV on 'snd_op_occlusion': 'occlusio_db_loss' is now 'occlusion_db_loss' (old KV still works though)
Fixed painted cubes not displaying adhesion gel skins
Fixed pellets produced by 'fire_energy_ball' not hurting players
Fixed rare crash when using 'point_template' under some circumstances
Fixed 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_alternateticks' being forced off on Linux. Apparently it's even doing this in Portal 2
Fixed 'sv_schrodinger_emit_sound'
Fixed the game not responding to 'SIGINT'
Fixed WebM video export
Make 'env_global''s GetCounter input usable
Preserve bodygroups (frankenturret heads, etc) when fizzling objects
Properly clear 'env_global' counters when initially created
VTF textures below 'v7.5' are no longer allowed to set 'v7.5'-specific flags to guard against flags from TF2 being set
Cloth no longer simulates while the game is paused by default
'cl_portal_use_new_dissolve' and 'fx_new_sparks' no longer require cheats to be enabled
Console input autocomplete suggestions now include fuzzy matches
Entity filters will no longer crash if chained in an infinite loop
'env_spark' entities can now override 'fx_new_sparks' to use new or old sparks
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'
'fps_max_menu' is now also respected while in game with opened menu
High 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_gravity' affect cloth
Marked 'hud_fastswitch' as archive
Marked 'r_portal_light_intensity' as archived
Marked 'sv_portal_legacy_compat', 'sv_enableholdrotation', 'mv_uncrouch_on_jump', 'mv_duckjump', and 'mv_bhop' ConVars as executable by maps
Move rumble to Steam input
Removed devonly flag from 'net_fakelag'
Removed 'soundsystem.dll'
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
Schrödinger cubes now emit 'SchrodingerCube.Music' for music
'util::TraceLine' can now take 'array<CBaseEntity@>' as ent to ignore
'util::TraceLinePortal' can now take 'array<CBaseEntity@>' as ent to ignore
Added (cl|sv)_scriptsystem_dump_lsp commands to game
Added 'CBaseEntity::GetGroundEntity' 'CBaseEntity::IsOnGround' 'CBaseAnimating::IsOnFire'
Added 'EHandle<>' template type to AS
Added 'scriptsystem_dump' (and _json/_lsp) variant commands to Hammer
Added access masks to angelscript bindings. This will prevent client/server functions from being called in the wrong places
Added bindings for 'AngleVectors'
Added 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 'Init' and 'Get' methods
Exposed 'CBaseEntity::KeyValues' methods to AS
Exposed 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 const
Fixed Scriptsystem in Hammer not being able to load any scripts
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
Scriptsystem 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.toInt' and 'string.toUInt' can now convert numbers from any base
Added '$emissiontransform' to PBR, to apply transform to the emission texture specifically
Added 'nearz' property to clustered light entities
Added 'sv_reloadmaterialsonmapload' ConVar that controls material reload behavior when loading map, can improve map load times when disabled
Added DoSSAO function to viewpostprocess
Added light cookies to 'light_rt' entities
Added various ConVars to control AO
Doubled cookie atlas size, allowing 4 times the texture data to be allocated before exhaustion
Fixed 'r_ssao' breaking cubemap building
Fixed 'SetLightScale' on clustered lights not changing the light intensity
Fixed cookied lights only displaying cookies when shadowed
Fixed crashes when using some material proxies on non-standard stuff
Fixed flashlight and 'env_projectedtexture' shadows being 4x larger per-dimension than their pre-clustered equivalents
Fixed 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 '$envmap' will no longer be overridden to use 'env_cubemap'
Rate limited the clustered atlas allocator warning to 1 message per second
Replaced general clustered light modes with independent lighting component modes
Added 'SettingsEnumBitField' Panorama control
Added 'WeaponEquipped' and 'WeaponsDropped' Panorama events
Fixed 'SettingsSlider' 'invert' not working correctly when the slider is set to display a percentage
Fixed crash with the video settings screen when an incorrect panel type is used for the setting dropdowns
Fixed Panorama rendertargets being invalidated when 'mat_picmip' is changed
'devui_auto_scale' will now use the smallest window dimension to calculate scale factor
Added "Paste Special Again" context menu option in Hammer, which will use the last saved Paste Special options in the session without a prompt
Added '-EnvCubemapNotForcedForPBR' parameter to VBSP, for mappers that need PBR materials with handmade envmaps
Added '-help'/'-?' to StudioMDL
Added '-nowinerenderfix' to disable rerendering Hammer views on each frame in Wine
Added 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_scale' which, when enabled, automatically scales DevUI to match the reference resolution of 1920x1080, like Panorama
Added 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.ttf'
Added 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'/'boolean' to be interchangably for FGD IO and KV definitions
Displacement tools now edit continuously without needing to move mouse
Entity report dialog can now be sorted
Fixed 'devui_auto_scale' not performing any scaling
Fixed 'devui_auto_scale' turning text into a blurry mess below 1080p
Fixed 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 'md' on Linux to create the output dir. It now runs 'mkdir -p'
Hammer 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 '-winecompat' from Hammer, fixes will be applied when Wine is detected automatically
Removed 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 '-noao' VRAD parameter now sets 'LVLFLAGS_DISABLE_BAKED_AO'
Updated VRAD help text
VRAD AO is now DISABLED by default and can be enabled by passing '-ao'. XeGTAO should be preferred for VRAD baked AO
When using the eyedropper tool, Hammer will prompt to name entities if they did not have one already
'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
Added 'CBasePortal::IsActive'
Added 'vscript_script_max_exec_time' to control max allowed script execution time. Use with caution
Fixed a crash in VScript when calling 'CreateEntityByName' on a non-existing class
Fixed rare crash from VScript while converting some values to string
Fixed VScript crash related to saving tables that reference themselves
VScript 'TraceLineEx' can now take an array of entities to ignore
VScript 'TracePortalLine' can now take an array of entities to ignore