• Counter-Strike 2 update from August 25, 2026: custom HUD tools and player camera scripting

Valve shipped a Counter-Strike 2 update on August 25, 2026, aimed squarely at mapmakers. This patch is all about scripted maps: custom HUD support, a new player camera entity, more bomb-related hooks, and better script debugging. Regular matchmaking players probably won't notice much tonight, but anyone building custom CS2 content just got a much bigger toolbox.

Counter-Strike 2 update expands scripted map UI

The headline feature in this Counter-Strike 2 update is the new custom_hud_layout entity. Valve says it acts as the entry point for scripted maps to provide custom UI, which is a pretty big unlock for workshop creators and custom mode developers.

Right now, it supports four panel types:

  • Panel
  • Label
  • Image
  • Button

Valve also added CSS styling support, so creators can shape the HUD beyond the usual bare-bones debug look. That matters more than it sounds. A custom mode lives or dies on readability. If the interface looks like a dev test screen from 2009, players will bounce quickly.

There are limits, though. Valve explicitly says events and client-side scripting are not supported. So this is not a full browser-like UI framework dropped into CS2. It's more controlled than that. You can build cleaner, more tailored interfaces, but you're not getting free rein to run arbitrary client logic through the HUD layer.

One practical touch stands out: custom_hud_layout maintains state during tools mode reloads. If you've spent time iterating inside Hammer or debugging scripted content, you know how annoying reload churn gets. Keeping UI state alive through tools mode reloads should shave time off testing loops.

Valve also added several methods tied directly to this system:

  • CustomHudLayout.SetHasClass
  • CustomHudLayout.SetHasClassForPlayer
  • CustomHudLayout.SetDialogVariableString
  • CustomHudLayout.SetDialogVariableStringForPlayer
  • CustomHudLayout.SetInputCaptureEnabled
  • CustomHudLayout.IsInputCaptureEnabled

That gives map authors control over classes, per-player state, dialog variables, and whether the UI captures input. The last one is especially useful for modes that need menu interaction without going fully invasive.

There's also a new callback, Instance.OnCustomHudClicked, which connects the UI layer back into gameplay scripting. That closes the loop. Before this, you could fake some interactions in custom content, but now Valve is clearly supporting proper clickable interface elements for scripted maps.

New camera and movement controls give creators more control

The second big piece in this Counter-Strike 2 update is the new cs_player_camera entity. Valve describes it simply: it can control a player's view without moving their pawn.

That distinction matters.

A mapper can now manipulate what a player sees while leaving their actual character position alone. For custom intros, guided sequences, puzzle maps, training scenarios, or experimental modes, that opens up much cleaner design options. Valve also says the entity can be configured so the player can look around from the scripted position, which avoids the stiff "you are now trapped in a cutscene" feeling.

New camera methods include:

  • CSPlayerCamera.IsEnabled
  • CSPlayerCamera.SetEnabled
  • CSPlayerCamera.SetIsControllingAngles

Valve also added movement helpers on the entity side:

  • Entity.Move
  • Entity.GetMoveType
  • Entity.SetMoveType
  • enum CSMoveType

Taken together, this gives creators tighter control over both what players see and how scripted entities behave. I wouldn't go so far as to call it "cinematic CS2" overnight, but for custom servers and workshop maps, this is a real step forward.

Bomb flow hooks got a lot more granular

Valve also expanded scripting around bomb interactions, and this part is quietly one of the most useful additions in the whole patch. Instead of relying on broader plant and defuse events, creators now get more precise hooks for when those actions begin or get canceled.

New instance events:

  • Instance.OnBombPlantStart
  • Instance.OnBombPlantAbort
  • Instance.OnBombDefuseStart
  • Instance.OnBombDefuseAbort

Those events let scripts react at the exact start or cancellation point of the action, which is cleaner for custom game logic. If someone wants to build a mode with alternate bomb rules, staged objectives, anti-defuse mechanics, or UI prompts tied to progress states, these hooks make that much easier.

Valve also added bomb and player helpers:

  • CSPlayerPawn.GetC4
  • CSPlayerPawn.GetDefuseTarget
  • CSPlayerPawn.IsBuyMenuOpen
  • CSPlayerPawn.GetCamera
  • C4.GetPlantStartTime
  • C4.GetPlantFinishTime
  • C4.AbortPlant

The plant timing methods are useful because they reduce guesswork. A script can now read actual start and finish times instead of inferring timing from less direct signals. C4.AbortPlant is another strong utility function for creators who want custom interruption logic.

Valve also marked two older event parameters as deprecated:

  • planter from Instance.OnBombPlant
  • defuser from Instance.OnBombDefuse

That usually signals that a cleaner or more reliable pattern has replaced the old one. In practice, mappers maintaining older scripts will want to keep an eye on that and start moving toward the newer start/abort flow and direct getter functions.

Script debugging improved for faster iteration

A lot of patch notes like this hide the best quality-of-life fixes near the bottom. That's true here too.

Valve corrected types for some events where parameters may have been undefined. If you've debugged scripting APIs, you know how much time bad typing or inconsistent event payloads can waste. You end up chasing a bug that isn't in your logic at all. It's in the interface.

The update also improves error reporting in a few useful ways:

  • Errors during the initial script run now log to the console
  • Unhandled promise rejections now log to the console
  • CompileModule errors now include the column number

That last one is small but gold. A line number helps. A line number plus a column number helps a lot more when you're fixing syntax or module loading issues in a larger script file.

Valve also added Instance.Delay and Instance.IsDedicatedServer. Neither is flashy, but both are practical. Delay gives scripters a more direct timing utility, and the dedicated server check makes it easier to separate logic based on where the script runs.

For the average player, this Counter-Strike 2 update is easy to skim past because it doesn't touch rifles, economy, smokes, or map balance. For the people building the weird, clever stuff on top of CS2, it's a serious backend upgrade. Valve didn't add a flashy operation here. They handed mapmakers cleaner UI, camera control, better bomb scripting, and fewer excuses to fight the console for half the night.


Full changelog (Valve patch notes)

[ MAP SCRIPTING ]

  • Added custom_hud_layout entity:

  • custom_hud_layouts are the entry point for scripted maps to provide custom UI.

  • Panel, Label, Image, and Button panel types are supported.

  • Styling with css is supported.

  • Events and client side scripting are not supported.

  • Maintains state during tools mode reloads.

  • Added cs_player_camera entity:

  • Gives control of a player's view without moving their pawn.

  • Can be configured to let the player look around from the scripted position.

  • Added Instance.Delay

  • Added Instance.OnBombPlantStart

  • Added Instance.OnBombPlantAbort

  • Added Instance.OnBombDefuseStart

  • Added Instance.OnBombDefuseAbort

  • Added Instance.OnCustomHudClicked

  • Added Instance.IsDedicatedServer

  • Added Entity.Move

  • Added Entity.GetMoveType

  • Added Entity.SetMoveType

  • Added CSPlayerPawn.GetC4

  • Added CSPlayerPawn.GetDefuseTarget

  • Added CSPlayerPawn.IsBuyMenuOpen

  • Added CSPlayerPawn.GetCamera

  • Added C4.GetPlantStartTime

  • Added C4.GetPlantFinishTime

  • Added C4.AbortPlant

  • Added CustomHudLayout.SetHasClass

  • Added CustomHudLayout.SetHasClassForPlayer

  • Added CustomHudLayout.SetDialogVariableString

  • Added CustomHudLayout.SetDialogVariableStringForPlayer

  • Added CustomHudLayout.SetInputCaptureEnabled

  • Added CustomHudLayout.IsInputCaptureEnabled

  • Added CSPlayerCamera.IsEnabled

  • Added CSPlayerCamera.SetEnabled

  • Added CSPlayerCamera.SetIsControllingAngles

  • Added enum CSMoveType

  • Corrected types for some events where parameters were maybe undefined.

  • Errors encountered during initial script run are now logged to the console.

  • Unhandled promise rejections are now logged to the console.

  • Added the column number to errors caught during the CompileModule step of script loading.

  • Deprecated planter from Instance.OnBombPlant event

  • Deprecated defuser from Instance.OnBombDefuse event