Portal 2: Community Edition - November 23rd, 2025 Update

Additions (22)

  • Added a "client" time version for Sound Operators output_entry_elapsed and output_stop_elapsed which use game client time instead of host time

  • Added a note to the top of a VMF file if it's saved with any Strata extensions

  • Added command cl_particles_dump_json to dump particle operators to a file

  • Added command mat_reloadtexture to reload a specific texture

  • Added command steam_cloud_list

  • Added commands sv_particles_reload/cl_particles_reload to reload particles

  • Added ConVar cl_pause_on_steam_overlay for whether singleplayer game should pause when Steam Overlay is opened

  • Added ConVar cl_portal_crosshair_auto_scale, which when set to 1 mimics Portal 1 and Portal: Revolution crosshair scaling

  • Added ConVar save_check_for_mismatch. When true, the game will not load saves which were taken on old map versions and fires a save_map_version_mismatch event

  • Added ConVar scene_preferloose to control whether the game should load loose VCDs or cached VCDs first

  • Added ConVar sv_exactbasevelocity, which fixes basevelocity boosters giving entities an extra half tick worth of basevelocity

  • Added ConVar sv_mainmenu_chapter_override

  • Added ConVar sv_player_use_radius to control player use radius

  • Added ConVar sv_portal_sp_door_crush (off by default) which lets players be crushed by prop_testchamber_door in single player

  • Added ConVar sv_teleport_snaps_velocity, which makes trigger_teleport entities with "UseLandmarkAngles 1" rotate the teleported entity's horizontal velocity to match the destination angles in addition to rotating the entity's angles

  • Added ConVars save_hud_autosave and save_hud. These are utility ConVars to manage UI state

  • Added ConVars save_screenshot_res_x, save_screenshot_res_y, save_screenshot_res_aspect and save_screenshot_res_fov. Settings for game save screenshots

  • Added game events portal_placed and portal_fizzled

  • Added game events save_begin, save_map_version_mismatch, and map_load_failed

  • Added startup parameter -bordered which will force the game to start with window border

  • Allow directly adding ZIP files as search paths

  • Restored the stats command

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_viewmodel value within 1-179

  • cl_showpos now shows horizontal and vertical velocity instead of just horizontal

  • ConVar cl_fov is now archived in the config

  • ConVars cl_pitchup and cl_pitchdown are now clamped at 89 to prevent weird look behavior on controllers

  • Damage 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_04 to d1_trainstation_05 from the new HL2 anniversary update

  • Fixed 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_crosshair commands from main menu

  • Fixed 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_max 0 ignoring fps_max_menu

  • Fixed full screen resolution scaling on Linux

  • Fixed jittery input with m_rawinput 1/2 on Linux

  • Fixed 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.txt

  • Fixed 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 -display

  • Unchecked player dissolve

Improvements (15)

  • Changed ConVar volume default to 0.5

  • chaos.exe has been renamed to respective games

  • Improved collision logic around some brush edges

  • Improved performance of client side entity classname comparisons

  • Improved performance of debug overlay texts like ent_text

  • Increased fov_desired bounds to 1-179 from 75-90

  • Made low OS memory warning print a little bit less often

  • Made surfaceproperties_manifest.txt, game_sounds_manifest.txt, hudanimations_manifest.txt come from the MOD search path instead of GAME

  • Mods now don't share configs

  • Moved configs that were under platform/config to <default_write_path>/cfg

  • Pulled in changes from Squirrel 2.2.5 for improved VScript stability/performance

  • Removed check in sv_allow_mobile_portals to only apply cheats on sp_a2_bts5. ConVar is now marked as cheat always but maps are allowed to control it

  • The ConVar engine_no_focus_sleep is now saved in configs

  • Updated ConVar save_screenshot. A value of 2 will now also create a save screenshot when an autosave is made

  • Updated pango, cairo, freetype2, fontconfig to their latest versions

Hammer (47)

  • Added a helper that better visualises linked_portal_door

  • Added a Scene Browser to Hammer for previewing VCD sounds and animations

  • Added commands hammer_act and hammer_dialog_show

  • Added initial hotspot implementation to Hammer (thanks Baguettery!)

  • Added parameter %ToolViewportTexture that can be applied to any material to show a different material in the Hammer 3D viewport on brush surfaces

  • Added 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_static and prop_dynamic right from the 2D viewport

  • Added 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_static 2D bounding box not rotating correctly

  • Fixed 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_static or prop_dynamic correctly

  • Fixed 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_list DevUI panel to quickly view the list of used materials on a map

  • Added experimental VRAD optimization mode -culllights

  • Added soundscriptui for debugging sound scripts

  • Added particle ops and sound ops modes to docdump

  • Added -report console parameter to VBSP VRAD and VVIS to output compile time reports as keyvalue files

  • ATI1N and ATI2N formats will now use their correct names in debug windows like mat_texture_list

  • Display warning when using the obsolete -LDR, -HDR, or -both compile options with VRAD

  • Fixed 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 -game paths breaking VBSP/VRAD/VVIS

  • Fixed 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 $.BBCodeToHTML helper function

  • Added event OnAutoSaveBegin

  • Added event OnAutoSaveDangerousBegin

  • Added event OnSaveBegin

  • Added event OnSaveMapVersionMismatch

  • Added OnMenu1 and OnMenu2 Panorama events, which get called for controller X and Y buttons when the menu is open

  • Added underline <u>, strikethrough <s>, and heading 3 <h3> tags

  • Exposed frametime and defaultframe properties on the AnimatedImageStrip panel to JavaScript

  • Fixed a crash related to Panorama failing to read files asynchronously

  • Fixed applying bold styling to <strong> element in Panorama

  • Fixed 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() calls

  • Fixed 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_ecomode functional and applied to every panel

  • The game now loads the following paths for localizations:

    • panorama/localization/%modname%_%lang%.txt

    • panorama/localization/panorama_%lang%.txt

  • VideoSettings will no longer require an element with id DynamicTonemapping to exist

AngelScript (17)

  • Added the following CBaseCombatWeapon virtual methods. These can be overridden

    • Reload

    • ItemPreFrame

    • ItemPostFrame

    • ItemBusyFrame

  • Added util::Remove(CBaseEntity) and CBaseEntity.Remove()

  • Added util::TraceLine, util::TraceHull, util::TracePortalLine, util::GetEntityByIndex, util::GetMaxEntities, util::Remove

  • Added CGlobalEntityList, accessed by gEntList. Methods:

    • FindByClassname

    • FindByName

    • FindInSphere

    • Next

    • First

    • FindByTarget

    • FindByModel

    • BindByNameNearest

    • FindByNameWithin

    • FindByClassnameNearest

    • FindByClassnameWithin

  • Added bindings for CLight:

    • GetInnerAngle

    • GetOuterAngle

    • GetColorHDR

    • GetColor

    • GetClusteredRadius

    • GetColorScale

    • GetColorScaleHDR

    • SetColor

    • SetColorHDR

    • GetRadiusOverride

    • SetRadiusOverride

    • Toggle

    • TurnOff

    • TurnOn

    • SetShadowSize

    • GetShadowSize

    • GetPattern

    • SetPattern

    • SetOuterAngle

    • GetOuterAngle

    • GetState

    • SetLightFalloffCLQ

    • SetLightFalloffD50D0

    • GetLightFalloffCLQ

    • GetLightFalloffD50D0

    • IsHDR

  • 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 CBaseAnimating to 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:

    • GetDebugName

    • GetClassname

    • GetEntityIndex

    • GetEntityName

    • GetKeyValue

    • GetModelName

    • GetElasticity

    • SetElasticity

    • IsFloating

    • IsBSPModel

    • GetFriction

    • SetFriction

    • SetGravity

    • GetGravity

    • PrecacheScriptSound

    • HasPhysicsObject

    • GetPhysicsObject

  • Added commands sv_scriptsystem_dump_json and cl_scriptsystem_dump_json for dumping AngelScript API documentation to a JSON file

  • Renamed global::GameEventManager -> gGameEventManager

  • Renamed UTIL_TraceLine -> util::TraceLine, UTIL_Remove -> util::Remove

  • Renamed namespace Utility to util

VScript (9)

  • Added ConVar vscript_collect_garbage to 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 SendToConsole is now available on the client too

  • Added function CSceneManager::IsSceneRunning()

  • Renamed SetValue -> SetString in persistent storage API

  • Added bindings for CBaseAnimating:

    • FindBodygroupByName

    • GetSkin

    • SetSkin

  • Added bindings for CPropWeightedCube: GetCubeType (as well as corresponding enum values)

  • Added the following methods to CLight:

    • SetLightColor

    • SetOuterAngle

    • SetInnerAngle

    • SetLightFalloffCLQ

    • GetOuterAngle

    • GetInnerAngle

    • SetShadowSize

    • GetShadowSize

    • TurnOff

    • TurnOn

    • Toggle

    • SetPattern

    • SetLightFalloffD50D0

    • SetClusteredRadiusOverride

    • GetClusteredRadiusOverride

    • GetState

  • Added the following methods to CBaseEntity:

    • Teleport

    • IsFloating

    • GetKeyValueInt

    • GetKeyValueFloat

    • GetKeyValueBool

    • GetKeyValueString

    • GetElasticity

    • SetElasticity

Entities (34)

  • Added "Use Global Config" and "Global Config: Sign ID" properties to prop_testchamber_sign which lets modders read chamber sign information from a config file. Allows for multiple signs per map

  • Added SetPushSpeed input to trigger_push

  • Added a "Strict Mode" entity setting to trigger_setspeed which helps maximize boost consistency

  • Added attachments laser_attachment and laser_glow_attachment for reflection and Schrödinger cubes

  • Added entity func_touch, a solid entity with the same outputs and configuration as trigger_multiple

  • Added input ExplodeBomb to prop_paint_bomb

  • Added input LockEmitState to laser/Schrödinger cubes to lock the current laser state

  • Added inputs to logic_playerproxy

    • LowerWeapon

    • ReadyWeapon

  • Added inputs to npc_portal_turret_floor

    • EnableMotion

    • DisableMotion

  • Added inputs to vgui_neurotoxin_countdown

    • Pause

    • Resume

    • SetTime

  • Added properties to weapon_portalgun

    • model

    • viewmodel

    • CustomPortalColors

    • Portal1Color

    • Portal2Color

  • Added the following inputs to the light entities:

    • SetLightColor

    • SetLightScale

    • SetLightFalloff

    • SetInnerAngle

    • SetOuterAngle

  • Added tint color property to info_overlay, which allows mappers to change the color of overlays

  • Combine and metrocops now correctly use their VOX sentences

  • Dissolve-related keyvalues and inputs now work on all entities derived from CBaseAnimating

  • Fixed env_ambient_light lighting changes being carried over when switching maps

  • Fixed env_global not firing the Counter output

  • Fixed env_projectedtexture crashing when failing to load a movie

  • Fixed bug on laser/Schrödinger cubes with EmitLaser causing laser state to become permanent

  • Fixed 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 SilentDissolve being disabled by default

  • Fixed 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_limit which, when enabled, prints information about the projected texture queue every time a projected texture gets enabled or disabled

  • Laser catchers will no longer reset their skin when loading a save while powered

  • Portals shot from a weapon_portalgun now properly link to the player's portals

  • Reworked the "Velocity Mode" options on Strata's version of trigger_teleport

  • Reworked the settings of the trigger_setspeed entity to be easier to use

  • Simplified the backwards compatibility settings on Strata's version of trigger_teleport

Graphics (55)

  • Added clustered renderer

  • Default r_paintblob_otherviews_highres to 1

  • Fixed 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_rt and light_rt_spot to force shadows to update every frame

  • Added launch parameter -shadowatlassize to specify clustered shadow atlas dimensions. Must be power of two

  • Added new $alphadither option to PBR shader. When set, dithering will be used instead of blending for transparency

  • Added support for $treesway to PBR. The material parameters match VertexLitGeneric

  • Added ConVar cl_player_render_in_reflective_glass

  • Changed behaviour of $blendtintbymraoalpha to apply tint when alpha is 1 rather than 0

    • Note that this may break any PBR materials that used $blendtintbymraoalpha

  • Detail objects should now render

  • Fixed r_portal_light_intensity being too high by default

  • Fixed 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_advanced enabled

  • Fixed 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 $addbumpmaps

  • Fixed 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 1

  • Fixed potential bug with detail texcoord transforms in VLG when $treesway is enabled

    • If you notice broken VLG treesway models, please tell us!!

  • Fixed projected textures not rendering properly on surfaces with $alphatest 1, like grates

  • Fixed 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 1

  • Fixed viewmodels being forced to draw when using AlternativeSorting on an entity

  • Fixed water rendering with png command for resolutions <16384x16384

  • Force disable $depthblend on spritecard materials when -tools is enabled

    • This is a workaround for them not rendering in the particle editor

  • Fully removed $flat from UnlitGeneric. It didn't do anything before either but now it's totally gone

  • Implemented 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 $blendtintbymraoalpha is 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

  • $lod replacemodel works as expected

  • mat_error_texture_advanced now also replaces materials with missing textures

  • 360 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 when mat_picmip was 1 or higher

  • Fixed 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.5 VTFs formatted with ATI1N/ATI2N with the correct format

  • VTF hotspot data resource ID changed to match new specification

Workshop (14)

  • Added -workshopid parameter to workshopgui and workshopcli

  • Added mounted_by_default key to addon config to not mount addon when first discovered

  • Added documentation link to Workshop GUI help tab

  • Added launch argument -noworkshop. The launch argument -safemode now also implies -noworkshop

  • Added 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 map command autocomplete not updating after addons are enabled/disabled

  • Fixed 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_cheats

  • Added a system to block entities and scripts from running certain dangerous commands

  • Added ConVar cl_require_servercanexecute_in_sp and defaulted it to 1. This will block maps from running potentially malicious commands while in singleplayer

  • Added ConVar sv_allow_unsafe_map_commands for backwards compatibility with older maps running blocked commands

  • Blocked 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_id

    • ent_teleport

    • ent_orient

    • cc_emit

    • scene_playvcd

    • sv_regeneration_wait_time

    • startneurotoxins

    • give_boots

    • remove_boots

    • can_carry_both_guns

    • give_portalgun

    • give_portalgun_orange

    • upgrade_portalgun

    • upgrade_potatogun

    • sv_player_collide_with_laser

    • give_paintgun

    • upgrade_paintgun

    • give

    • setmodel

    • sv_gravity

    • player_throwforce

    • player_throwenable

Game (6)

  • Added a whole new Main Menu UI!

  • Updated mat_bloomscale's default value to match Portal 2

  • Fixed broken dust particles in sp_a1_wakeup and sp_a2_core

  • Fixed missing prop_energy_ball sound effects and materials

  • Fixed error model appearing inside prop_energy_ball entities when inside a portal

  • Fixed 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!