Atualização do CS2 (24 de ago. de 2026)
O CS2 adiciona um sistema experimental de HUD personalizado para mapas scriptados, APIs de script mais ricas para bomba e câmeras, e atualiza o mapa exemplo cs_script zoo para mostrar as novas ferramentas.
Resumo rápido
- A entidade experimental `custom_hud_layout` e a API CustomHudLayout permitem que scripts controlem HUDs simples com botões, classes e variáveis de diálogo.
- Novos hooks de script em torno de plant/desarm de bomba, controlo da C4, tipos de movimento e um `Instance.Delay` baseado em promise melhoram a lógica de jogos customizados.
- O mapa exemplo cs_script zoo ganha um diálogo de boas‑vindas scriptado usando o novo sistema de HUD e migra o mini‑jogo de xadrez para o helper de delay embutido.
- Schemas da engine, user messages e ferramentas foram atualizados para suportar eventos CustomHudClicked e networking de estado de HUD customizado por jogador.
Uma nova atualização do CS2 introduz discretamente um sistema experimental para HUDs personalizados controlados por mapas via script, além de novas ferramentas de script para bomba e câmeras de jogador — tudo demonstrado no mapa exemplo oficial cs_script “zoo”.
Layouts experimentais de HUD customizados para mapas scriptados
- Novo
custom_hud_layoutentity: o Hammer agora expõe uma entidade pontocustom_hud_layoutemcsgo.fgd. Isso permite que autores de mapa forneçam um layout Panorama (XML) que pode ser controlado a partir decs_script. - Elementos de UI suportados: a nova API de script documenta que layouts customizados podem conter painéis básicos:
Panelcomid,class,hittestLabelcomid,class,hittest,textImagecomid,class,hittest,src,texturewidth,textureheightButtoncomid,classEstilização via CSS é suportada; JavaScript do lado cliente embutido no HUD não é suportado.
- Estado visual dirigido pelo servidor: scripts podem agora:
- Alternar classes CSS em painéis globalmente ou por jogador com
CustomHudLayout.SetHasClass/SetHasClassForPlayer. - Definir variáveis de diálogo por painel (tokens de texto) globalmente ou por jogador com
SetDialogVariableString/SetDialogVariableStringForPlayer. Isso permite que criadores controlem prompts, temporizadores ou indicadores de estado puramente a partir da lógica do servidor.
- Alternar classes CSS em painéis globalmente ou por jogador com
- Captura de input pelo HUD:
CustomHudLayout.SetInputCaptureEnabled(playerSlot, enabled)oferece aos mapas uma forma de capturar temporariamente o mouse de um jogador para interação com a UI.IsInputCaptureEnabledindica se um layout está atualmente capturando input. Enquanto ativo, o jogador pode perder o controlo normal de movimento/mouse até que todos os layouts em captura o libertem. - Eventos de clique integrados em user messages: uma nova user message
CS_UM_CustomHudClickede o callback de scriptInstance.OnCustomHudClickedforam adicionados. Quando um jogador clica num botão em umCustomHudLayout, o servidor recebe qual layout e qualbuttonIdfoi clicado. Isso permite implementar menus, diálogos ou controles de minijogos totalmente no servidor. - Layouts de suporte no Panorama: dois novos ficheiros de layout Panorama (
hud/customhuds.xmlehud/infohudlayouts.xml) parecem hospedar o lado da engine desses layouts customizados. São estruturas internas; os jogadores provavelmente não verão um novo HUD padrão diretamente por causa deles, mas sustentam o novo recurso de HUD scriptado. - Aviso experimental: a API está explicitamente marcada como
@experimentale indica que mudanças incompatíveis podem ocorrer. Autores que construírem projetos sérios sobre ela devem esperar ajustes em builds futuros.
Melhorias de script para bombas, câmeras e movimento
Atualizações em content/csgo/maps/editor/zoo/scripts/point_script.d.ts expandem o que cs_script pode fazer em mapas personalizados ou comunitários:
- Helper de temporização baseado em Promise:
Instance.Delay(delay: number): Promise<void>está agora disponível como um delay assíncrono embutido. Isso substitui a fila de think feita à mão no script de xadrez do zoo e simplifica sequências assíncronas de longa duração.
- Eventos do ciclo de vida da bomba mais detalhados:
- Novos callbacks dividem interações com a bomba em fases de início/aborto/conclusão:
OnBombPlantStart,OnBombPlantAbort,OnBombPlantOnBombDefuseStart,OnBombDefuseAbort,OnBombDefuse, além deOnBombExplode
- Novos tipos
BombPlantEventeBombDefuseEventsão introduzidos, com alguns campos marcados como deprecated para limpeza futura. Isso deve permitir que mapas scriptados ou mods reajam com mais precisão a ações parciais de plant/defuse — por exemplo, overlays de tutorial ou condições de vitória customizadas.
- Novos callbacks dividem interações com a bomba em fases de início/aborto/conclusão:
- API de arma C4:
- A nova classe de script
C4(estendendoCSWeaponBase) inclui:GetPlantStartTime()/GetPlantFinishTime()AbortPlant()
CSPlayerPawnagora pode exporGetC4()para obter a arma C4 de um jogador, eGetDefuseTarget()para acessar a bomba plantada que ele está a desarmar. Essas ferramentas parecem direcionadas a mapas de treino avançado ou modos de jogo centrados na bomba.
- A nova classe de script
- Estado do jogador e hooks de UI:
CSPlayerPawn.IsBuyMenuOpen()permite que scripts saibam quando um jogador está no menu de compra.CSPlayerPawn.GetCamera()expõe uma entidadeCSPlayerCamerapara cada jogador.
- Nova entidade de controle de câmera:
CSPlayerCameraé uma nova entidade scriptável experimental que representa a visão de um jogador.- Scripts podem ativá‑la/desativá‑la e chamar
SetIsControllingAngles(controlling: boolean). Quando não controla os ângulos, o jogador pode olhar livremente a partir da posição da câmera. Isso pode resultar em câmeras scriptadas mais polidas para cutscenes, replays ou vistas de treino.
- Helpers de movimento e interpolação:
- O novo enum
CSMoveTypepermite que scripts inspecionem ou alterem como uma entidade se move (walk, fly, noclip, ladder, etc.) viaGetMoveType()eSetMoveType(). Move({...})é adicionado como irmão deTeleport, descrito como mover uma entidade sem reiniciar o histórico de interpolação do cliente. Isso provavelmente permite reposicionamentos visuais mais suaves para objetos movidos por script.
- O novo enum
- Adições utilitárias e refinamentos de tipos:
Instance.IsDedicatedServer()ajuda scripts a ramificarem entre servidores listen e dedicados.- Vários campos de evento (
OnPlayerChat,OnBulletImpact,ModifyPlayerDamageEvent.inflictor, etc.) foram tornados opcionais (?), tornando scripts mais robustos quando nenhuma entidade está presente.
Todas essas adições de script são expostas através das definições de tipos oficiais usadas por autores de mapa, portanto destinam‑se a ser usadas em conteúdo personalizado e devem funcionar na prática, não apenas nos exemplos internos da Valve.
Mapa exemplo zoo: diálogo de boas‑vindas scriptado e lógica de xadrez mais limpa
O mapa exemplo editor/zoo para cs_script foi expandido para demonstrar os novos HUDs e a API de temporização.
- Nova UI de popup de boas‑vindas:
- Um layout Panorama
welcome.xmlewelcome.cssdefinem um diálogo simples centralizado:- Texto: “Welcome to the cs_script zoo map!”
- Um botão
Dismiss - Uma classe CSS
Dismissedque faz o diálogo desaparecer ajustando sua opacidade para zero.
- Quando um jogador aparece (
OnPlayerActivate),ShowWelcome(playerSlot)é chamada:- Ela remove a classe
Dismissedpara esse jogador, fazendo o diálogo aparecer. - Ativa captura de input com
SetInputCaptureEnabled, para que o jogador possa clicar no botão do diálogo.
- Ela remove a classe
Instance.OnCustomHudClickedescuta eventos de clique:- Se o layout clicado for
welcome_layoute obuttonIdfordismiss_button,HideWelcomeadicionaDismissedde volta e desativa a captura de input, devolvendo o controlo ao jogador.
- Se o layout clicado for
- Um comando de debug/cheat
script_zoo_show_welcomepercorre todos os jogadores e mostra o diálogo novamente, ilustrando como autores de mapa podem reativar fluxos de HUD customizados sob demanda.
- Um layout Panorama
- Script de xadrez migrado para
Instance.Delay:- O mini‑jogo de xadrez anteriormente implementava sua própria fila de temporização e helper
Delay()baseado emInstance.SetNextThink. - Essa fila personalizada e a implementação de
Delayforam completamente removidas. - Todas as esperas assíncronas (por exemplo, dentro de
RunChess, animações de deslize de peças, animações de morte de peças e o throttle da busca minimax da IA) agora usamawait Instance.Delay(0). Isso mostra como a nova API de delay embutida é destinada a simplificar lógica assíncrona de gameplay de longa duração.
- O mini‑jogo de xadrez anteriormente implementava sua própria fila de temporização e helper
Jogadores que explorarem o mapa zoo após esta atualização deverão ver uma pequena janela de boas‑vindas no primeiro spawn, demonstrando exatamente como layouts de HUD customizados podem parecer e comportar‑se.
Infraestrutura da engine e do protocolo por trás das novas ferramentas de HUD
Embora não visíveis diretamente no gameplay normal, várias atualizações a nível de engine e schemas suportam os novos recursos de HUD:
- Estruturas de rede para HUDs customizados:
- Novos tipos de schema (
CCSCustomHudLayout,CCSCustomHudLayoutState,HUDPanelHasClass_t,HUDPanelDialogVariableString_teEHudPanelClassStatus_t) aparecem tanto no cliente quanto no servidor. Eles cobrem:- O nome do recurso de layout.
- O estado do layout global e por jogador (quais classes e variáveis de diálogo são aplicadas a quais painéis).
- Se um layout está a capturar input para um determinado jogador.
- Novos tipos de schema (
- Entidade de câmera do jogador:
CCSPlayerCameraé adicionada no cliente e no servidor, com campos ligando‑a a um handle de pawn e booleans que rastreiam se está habilitada e se está controlando o ângulo do jogador.
- User message e enum:
- O enum
ECstrike15UserMessagesganhaCS_UM_CustomHudClicked = 390, ligando a nova notificação de clique ao pipeline existente de user messages. - Uma mensagem de protocolo
CCSUsrMsg_CustomHudClickedcorrespondente transporta um identificador de layout e o button ID para o servidor.
- O enum
- Ferramentas e strings:
- Várias ferramentas internas e tabelas de strings (servidor, cliente, Panorama, VScript, compilador de recursos, etc.) foram atualizadas. Entre elas há novas estruturas de string relacionadas a HUD (
HUDPanelHasClass_t, vetores de variáveis de diálogo, etc.) e suporte V8 atualizado para scripting. - Essas mudanças são em grande parte de infraestrutura e provavelmente não afetarão diretamente os jogadores, mas são necessárias para que os novos recursos funcionem de forma fiável.
- Várias ferramentas internas e tabelas de strings (servidor, cliente, Panorama, VScript, compilador de recursos, etc.) foram atualizadas. Entre elas há novas estruturas de string relacionadas a HUD (
Impacto geral
A atualização foca principalmente criadores e scripters, mais do que o núcleo do gameplay competitivo:
- Autores de mapa ganham uma forma experimental e oficialmente suportada de construir HUDs interativos simples dirigidos por
cs_script, incluindo estado por jogador, tratamento de cliques e captura de input. - Hooks de script relacionados à bomba ficam muito mais ricos, o que pode beneficiar mapas de treino, tutoriais ou modos customizados centrados em plant/desarm.
- A nova
CSPlayerCamera, helpers de movimento e a API de delay baseada em Promise devem facilitar a implementação de experiências scriptadas avançadas (câmeras customizadas, minijogos, entidades em movimento com interpolação mais suave).
Para a maioria dos jogadores em matchmaking padrão, o impacto imediato será sutil. Com o tempo, porém, essas ferramentas podem resultar em mapas personalizados mais polidos, utilitários de treino melhores e modos comunitários mais criativos construídos sobre o sistema de scripting do CS2.
