• Actualización de CS2 del 25 de agosto de 2026: HUD personalizado y control de cámara

Valve lanzó una actualización de CS2 centrada casi por completo en el scripting de mapas. No afecta a las armas, la economía ni a los mapas oficiales. El cambio relevante está en el control que ahora tienen los creadores sobre la interfaz, la cámara del jugador y varias acciones relacionadas con la bomba. Eso abre la puerta a modos personalizados con más ambición.

CS2 amplía el scripting de mapas con HUD personalizado

La novedad más visible de esta actualización de CS2 es la entidad custom_hud_layout, pensada como punto de entrada para que los mapas scriptados muestren su propia interfaz. Valve habilitó cuatro tipos de panel: Panel, Label, Image y Button. Además, los autores pueden aplicar estilos con CSS, lo que en la práctica permite crear interfaces menos rudimentarias que antes.

Hay dos límites claros. El primero es que no hay soporte para eventos dentro de la interfaz ni para client side scripting. El segundo es que esto no convierte a CS2 en un sandbox total. Aun así, para mapas cooperativos, mapas de entrenamiento o experiencias tipo minijuego, alcanza para presentar objetivos, estados, avisos o botones simples.

Un detalle técnico que agradecerá quien haya peleado con herramientas de Source 2: el estado de custom_hud_layout se mantiene durante los reloads en tools mode. Parece un gesto menor, pero reduce mucho el tiempo cuando pruebas cambios una y otra vez.

Valve también incorporó varias funciones para manipular ese HUD. Entre ellas:

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

Dicho de forma simple: los mappers pueden cambiar clases, actualizar texto dinámico para todos o para un jugador concreto y decidir si ese HUD captura la entrada. Esto encaja muy bien con interfaces contextuales, menús dentro del mapa o paneles de información por equipo.

Cámara del jugador, bomba y más control para los scripts

La segunda gran novedad en CS2 es la nueva entidad cs_player_camera. Valve la presenta como una forma de controlar la vista de un jugador sin mover su pawn. Esto tiene impacto real: un mapa puede forzar una perspectiva concreta, dirigir una escena o mostrar una secuencia sin alterar físicamente al jugador dentro del mundo.

Además, esa cámara puede configurarse para permitir que el jugador mire alrededor desde la posición definida por el script. No es un detalle menor. Entre una cámara totalmente bloqueada y otra con libertad parcial hay una diferencia enorme en cómo se vive una experiencia personalizada.

Para esa entidad también llegaron funciones concretas:

  • CSPlayerCamera.IsEnabled
  • CSPlayerCamera.SetEnabled
  • CSPlayerCamera.SetIsControllingAngles
  • CSPlayerPawn.GetCamera

Junto a eso, Valve añadió herramientas de movimiento y estado para entidades:

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

Con ello, el autor del mapa obtiene un control más fino sobre cómo se desplazan o se comportan ciertos elementos del escenario y, también, sobre el estado de movimiento que utilizan.

La otra tanda de cambios se centra en la bomba. Se incorporaron nuevos eventos:

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

Y también funciones asociadas:

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

Aquí se ve hacia dónde va Valve. Antes era posible reaccionar a acciones ya completadas; ahora el script puede engancharse al inicio y al aborto de plantar o desactivar. Para modos personalizados, esto permite disparar mensajes, cámaras, sonidos, cambios en la interfaz o reglas especiales justo en el momento exacto, en lugar de hacerlo tarde.

Este tipo de eventos suele ser de los que más elevan el techo de un editor. No destacan en un tráiler, pero son los que hacen que un mapa deje de sentirse como un escenario con scripts y pase a parecer un modo de juego propio.

Mejoras para depurar scripts y ajustes de API

Valve también introdujo mejoras de calidad de vida para quienes desarrollan scripts en CS2. Los errores detectados durante la ejecución inicial ahora se registran en la consola. Lo mismo ocurre con las unhandled promise rejections. Y durante el paso CompileModule al cargar scripts, el error ahora incluye el número de columna.

Suena técnico, porque lo es. Pero quien haya rastreado un fallo difícil en una línea larga sabe que ese número de columna puede ahorrar minutos en cada intento. Si se itera con frecuencia, se nota.

Además, Valve corrigió tipos en algunos eventos donde ciertos parámetros podían aparecer como posiblemente indefinidos. No es un cambio llamativo, pero resulta útil para quien trabaja con validaciones, comprobaciones o herramientas que dependen de la API.

También hay dos deprecaciones:

  • planter en Instance.OnBombPlant
  • defuser en Instance.OnBombDefuse

No desaparecen del juego, pero Valve deja claro que ya no son la vía recomendada dentro de esos eventos. Con la llegada de los nuevos hooks de inicio y aborto, tenía sentido ordenar la API.

En esa misma línea aparecieron Instance.Delay, Instance.OnCustomHudClicked e Instance.IsDedicatedServer. Son añadidos pequeños por separado, pero en conjunto refuerzan la idea de esta actualización: menos foco en el matchmaking y más herramientas para quien construye contenido dentro de CS2.

Al final, no es una actualización pensada para el jugador que solo quiere entrar en Mirage, jugar rondas y salir. Es una actualización para mappers, creadores de modos y desarrolladores que llevan meses empujando los límites de Source 2. Y ahí está la parte importante: HUD personalizado, cámaras controladas por script, más eventos de bomba y mejores registros de errores. Para la escena creativa, esto cuenta.


Lista completa de cambios (Valve)

[ MAP SCRIPTING ]

  • Se añadió la entidad custom_hud_layout:

  • Los custom_hud_layouts son el punto de entrada para que los mapas con guiones proporcionen una interfaz de usuario personalizada.

  • Se admiten tipos de paneles Panel, Label, Image y Button.

  • Se admite el estilo con css.

  • No se admiten eventos ni scripting del lado del cliente.

  • Mantiene el estado durante las recargas en modo herramientas.

  • Se añadió la entidad cs_player_camera:

  • Da control de la vista de un jugador sin mover su peón.

  • Se puede configurar para permitir que el jugador mire alrededor desde la posición programada.

  • Se añadió Instance.Delay

  • Se añadió Instance.OnBombPlantStart

  • Se añadió Instance.OnBombPlantAbort

  • Se añadió Instance.OnBombDefuseStart

  • Se añadió Instance.OnBombDefuseAbort

  • Se añadió Instance.OnCustomHudClicked

  • Se añadió Instance.IsDedicatedServer

  • Se añadió Entity.Move

  • Se añadió Entity.GetMoveType

  • Se añadió Entity.SetMoveType

  • Se añadió CSPlayerPawn.GetC4

  • Se añadió CSPlayerPawn.GetDefuseTarget

  • Se añadió CSPlayerPawn.IsBuyMenuOpen

  • Se añadió CSPlayerPawn.GetCamera

  • Se añadió C4.GetPlantStartTime

  • Se añadió C4.GetPlantFinishTime

  • Se añadió C4.AbortPlant

  • Se añadió CustomHudLayout.SetHasClass

  • Se añadió CustomHudLayout.SetHasClassForPlayer

  • Se añadió CustomHudLayout.SetDialogVariableString

  • Se añadió CustomHudLayout.SetDialogVariableStringForPlayer

  • Se añadió CustomHudLayout.SetInputCaptureEnabled

  • Se añadió CustomHudLayout.IsInputCaptureEnabled

  • Se añadió CSPlayerCamera.IsEnabled

  • Se añadió CSPlayerCamera.SetEnabled

  • Se añadió CSPlayerCamera.SetIsControllingAngles

  • Se añadió enum CSMoveType

  • Se corrigieron tipos para algunos eventos donde los parámetros podrían estar indefinidos.

  • Los errores encontrados durante la ejecución inicial del script ahora se registran en la consola.

  • Los rechazos de promesas no manejados ahora se registran en la consola.

  • Se añadió el número de columna a los errores capturados durante el paso CompileModule de la carga del script.

  • Se ha desaprobado planter del evento Instance.OnBombPlant

  • Se ha desaprobado defuser del evento Instance.OnBombDefuse