Novidades: arcade, quadrinhos, Material 3 e um visual para crianças
Quatro famílias novas se juntam à padrão, à sci-fi e à medieval — agora são catorze visuais embutidos, cada um em versão escura e clara. Todo widget, popup e peça do HUD os adota sem nenhuma mudança no seu código: troque o preset e a tela inteira acompanha.

material_light
material_dark
kids_light
kids_dark
comic_light
comic_dark
arcade_light
arcade_darkMaterial 3 — para telas de apps
Material 3 Expressive, medido contra os tokens oficiais do M3: botões em pílula com uma placa de 40dp dentro da área de toque de 48dp, diálogos e folhas de 28dp, cartões preenchidos, campos com contorno e o controle deslizante Expressive. Os componentes de app — barra de navegação, barra superior, FAB, barra de busca, chips, progresso e o seletor de data — seguem os tokens de componente do M3, e os títulos usam a Roboto que acompanha o pacote. Para lojas, configurações, caixas de entrada e qualquer tela que deva parecer um app.
Infantil — a caixa de brinquedos
Feito para crianças: cada tecla, linha e painel é uma bala de gelatina com um contorno grosso e uma borda sólida que afunda ao ser pressionada, e cada tipo de controle tem sua própria cor de giz de cera. Os slots rápidos são blocos de bala, os emblemas são adesivos, o joystick é um arco-íris, as janelas ganham uma faixa de título ensolarada e um botão de fechar redondo de bala, e tudo se amassa ao ser tocado. Os tamanhos e a fonte do seu projeto continuam exatamente como eram.
Quadrinhos — tinta forte
Cada face é um quadro de história em quadrinhos: a cor da superfície dentro de um contorno grosso de tinta, com uma sombra dura atrás que some quando a face é pressionada. Uma configuração liga ou desliga todas as sombras, outras duas definem a largura do contorno e o tamanho da sombra, e uma única chamada faz o mesmo para um só widget. As janelas ganham uma legenda de título amarela.
Arcade — teclas pintadas
Cada tecla é pintada — um degradê, um brilho branco e uma borda que afunda ao ser pressionada, dentro de um contorno de tinta azul-marinho — e tem o rótulo em branco com contorno de tinta: verde para jogar, azul para o resto, vermelho para apagar. Os painéis são grossos, uma moldura colorida em volta de um fundo claro, e as janelas ganham uma faixa de título dourada e uma tecla de fechar vermelha e redonda.
GoUi.use_preset(GoThemePresets.MATERIAL_LIGHT) # ou MATERIAL_DARK
GoUi.use_preset(&"kids_light") # ou &"kids_dark"
GoUi.use_preset(&"comic_light") # ou &"comic_dark"
GoUi.use_preset(&"arcade_light") # ou &"arcade_dark"
Material 3 em detalhe → · O visual infantil em detalhe → · Arcade, widget por widget ↓ · Quadrinhos, widget por widget ↓ · O mesmo popup nos catorze visuais →
Arcade: teclas pintadas e painéis grossos
O visual mais novo veste cada tela como um fliperama. Cada tecla é pintada — um degradê do topo claro
à base mais intensa, um traço de brilho branco e uma borda que afunda ao ser pressionada, tudo dentro de um contorno de tinta azul-marinho — e seu rótulo é
branco com contorno de tinta. Cada painel é grosso: uma moldura colorida com brilho próprio em volta de um fundo claro.
arcade_light põe painéis brancos sobre uma página azul-céu; arcade_dark põe painéis azul-marinho sobre uma página noturna.
Cada imagem abaixo é uma tela real do gohud — o mesmo código, uma linha de preset.
GoUi.use_preset(&"arcade_light") # ou &"arcade_dark"

arcade_light · a galeria
arcade_dark · a galeria
GoDialogs
GoSheet
GoCoachMark
GoDrawer
GoPopover
GoDialogs.alert()
GoSnackbarCada tecla, pintada

GoStyle.button()
GoStyle.tabs()


GoStyle.card()
GoForm
GoStyle.choice_grid()
GoSlotGrid

GoDatePicker
GoStyle.slider()
GoStyle.radio_group()
GoStyle.filter_chip()
GoSearchBar
GoStepper
GoTable
GoNavBar
GoTimePicker
GoCodeInput
GoWheelPickerÀ noite: arcade_dark
Numa página escura a tinta passa a ser a própria página, bem mais profunda, e as cores pintadas continuam igualmente vivas.

GoStyle.button() à noite
GoBar
GoStyle.hud_panel()
GoSlot
GoJoystick

GoFab
GoRewardCalendar

GoTabView
GoScroll

GoStyle.chip()
GoSlotGrid
GoRangeSlider
GoPagination
GoBadgeComo o visual arcade funciona
A face
Cada tecla e cada painel é um GoStyleBoxArcade: um contorno de tinta, um corpo em degradê, uma borda e um brilho, desenhados
dentro do próprio retângulo do controle — uma tecla mantém o tamanho de um estado para outro, e ao ser pressionada apenas afunda.
Rótulos que se leem
Um rótulo branco com contorno de tinta se lê sobre qualquer cor da qual o contorno o destaca — a WCAG conta o contorno como parte da letra. Cada cor é ajustada até que seu rótulo passe de 4,6:1 em qualquer altura do degradê.
Janelas
O título de uma janela fica sobre uma faixa dourada, em letras brancas contornadas de tinta, ao lado de uma tecla de fechar vermelha e redonda. Diálogos, folhas, gavetas e popovers são painéis grossos emoldurados.
Uma tecla pode ter a sua própria cor — uma tecla de loja laranja num menu de pausa:
menu.add_child(GoStyle.arcade_paint(GoStyle.button("Shop", _shop), Color("#FF8A1E")))
O visual arcade em detalhe → · O mesmo popup nos catorze visuais →
Quadrinhos: tinta forte e uma sombra dura
O visual de quadrinhos desenha cada face como um quadro de história em quadrinhos — a cor da superfície dentro de um contorno grosso de tinta,
com uma sombra dura e sólida projetada para baixo e para a direita. comic_light entinta em preto sobre uma página creme de papel
com um primário cobalto; comic_dark entinta em creme sobre uma página noturna com um primário amarelo. Cada imagem abaixo é
uma tela real do gohud — o mesmo código, uma linha de preset.
GoUi.use_preset(&"comic_light") # ou &"comic_dark"

comic_light · a galeria
comic_dark · a galeria
GoSheet
GoCoachMark
GoDrawer
GoPopoverTodo widget, entintado
Botões, interruptores, abas, controles deslizantes, cartões, formulários, tabelas, seletores e chips usam a tinta — você não precisa estilizá-los um por um. Pressione uma tecla e a sombra dela some: a face afunda no lugar, como um carimbo. Faces desativadas perdem a sombra e esmaecem, então o que pode ser pressionado se destaca do que não pode.

GoStyle.button() — todos os tipos


GoStyle.tabs()

GoStyle.slider()

GoStyle.card()
GoForm

GoTable
GoDatePicker
GoTimePicker
GoStepper

GoNavBar
GoInputGroup
GoSplitButton
GoPaginationÀ noite: comic_dark
Em uma página escura um contorno preto sumiria, então o comic_dark o desenha em creme e projeta uma sombra suave
tingida com a mesma tinta. As peças do HUD — slots rápidos, barras, o joystick e o calendário de recompensas — seguem as mesmas regras.

GoStyle.button() à noite
GoSlot
GoBar
GoJoystick

GoSlotGrid
GoRewardCalendar

GoRangeSlider
GoSearchBar
GoFabComo o visual de quadrinhos funciona
Um StyleBox para cada face
Cada face é um GoStyleBoxComic: um preenchimento, um contorno e uma sombra, desenhados dentro do próprio retângulo do controle. Ele lê os tamanhos do contorno e da sombra do GoConfig toda vez que desenha, então uma única configuração muda a tela inteira de uma vez.
Pressionado quer dizer plano
Uma tecla pressionada perde a sombra e desce para o seu lugar. O hover mantém a sombra; o foco acrescenta um anel de tinta interno que nunca cobre o contorno; faces desativadas perdem a sombra e esmaecem.
A skin entinta o resto
O GoSkinComic entinta o que o código desenha: slots rápidos, chips, emblemas, avatares, avisos, a barra de navegação, o FAB, as células de data e o joystick, cujo botão projeta uma sombra.
Janelas ganham uma legenda
O título de uma janela fica sobre uma legenda amarela, como o recordatório de uma história em quadrinhos, ao lado de um botão de fechar redondo e entintado. Diálogos, folhas, gavetas e popovers são painéis entintados opacos.
Legível de dia e de noite
As duas paletas passam nas mesmas verificações de contraste WCAG que todos os outros presets, incluindo teclas pressionadas e desativadas. Quando a cor de uma legenda ficaria próxima demais da página, o contorno dela passa a usar a cor da página.
Nenhuma mudança de layout
O contorno e a sombra cabem dentro de cada controle e o padding fica como o tema definiu, então uma tela montada em outro visual mantém o layout — e a fonte do seu projeto.
Três configurações e uma chamada
Três configurações do GoConfig mudam todas as faces de quadrinhos de uma vez. Nada é reconstruído — a tela é redesenhada assim que você as altera.
GoUi.config.comic_border_width = 2.0 # o contorno (dp) — 3 por padrão
GoUi.config.comic_shadow_size = 6.0 # a sombra (dp) — 4 por padrão
GoUi.config.comic_shadow = false # nenhuma sombra em lugar nenhum
Um widget pode seguir seu próprio caminho, não importa o que digam as configurações. Passe true como último argumento para incluir tudo o que está dentro dele.
GoStyle.comic_shadow(skip_button, false) # este botão fica plano
GoStyle.comic_shadow(card, true, true) # este cartão e tudo dentro dele mantêm a sombra
GoStyle.comic_border(title, 5.0) # um contorno mais grosso neste aqui
tools/new_theme.py inked --from comic_light copia a paleta; mude as cores
do papel, da tinta e do primário e rode tools/make_theme.py inked. A tinta, a sombra e a skin vêm junto.
O visual de quadrinhos em detalhe → · O mesmo popup nos catorze visuais →
Como fica dentro de um jogo
Os presets medieval e sci-fi — fichas de personagem, inventários e missões; formulários, grades e prompt cards; painéis angulares e controles de toque. Trocar de preset é uma linha de código.
O que ele tira das suas mãos
O que mais custa tempo em UI de jogo não é o formato de um botão — é tudo aquilo que se desencontra de um aparelho para outro. O gohud resolve esse desencontro em um só lugar.
Toda medida é um token
Espaçamentos, cantos e tamanhos de texto são chamados pelo nome, não escritos como números. Troque o tema e a tela inteira acompanha.
Tamanho visível ≠ tamanho de toque
Um botão de fechar aparenta 36dp, mas sua área de toque tem 48dp. Onde slots apertados se sobrepõem, o toque vai para aquele cujo centro está mais perto.
Notches e teclados
As peças do HUD ficam dentro da área segura, e um campo de entrada sobe acima do teclado virtual quando ele aparece.
Voltar fecha uma coisa só
Escape e o Voltar do Android fecham apenas a superfície mais acima. Janelas empilhadas não somem todas juntas.
Avisos nunca roubam o toque
Toque através de um snackbar e o botão embaixo dele recebe o toque. O foco também não é tomado.
Ícones são pedidos pelo nome
Os widgets só conhecem GoIconSet.CLOSE. Troque o conjunto e todos os desenhos mudam sem tocar em uma linha de código. Ícones →
Catorze visuais, uma linha
GoUi.use_preset() troca tema, skin e ícones de uma vez — molduras arredondadas, chanfradas sci-fi, forjadas medievais, os componentes de app do Material 3, as balas de gelatina infantis, a tinta dos quadrinhos ou a pintura arcade.
Legível por medição
Todo tema é conferido contra a WCAG, incluindo os estados dos botões e os painéis de HUD translúcidos sobre branco puro e preto puro.
Instalar o gohud
Dois caminhos. Deixe o seu agente de IA fazer, ou solte a pasta no seu projeto — não há mais nada para configurar.
Início rápido
Cinco linhas colocam um ecrã com tema no visor. O percurso completo está na página de instalação.
Mude o visual — cores e forma
Um Theme só consegue reestilizar aquilo que a engine desenha. Cantos arredondados são os únicos cantos que o StyleBoxFlat tem, e o joystick, os slots rápidos e o coach mark são desenhados por código — então um tema sozinho nunca muda a forma deles. Por isso o gohud traz presets: um tema, uma skin e um conjunto de ícones escolhidos como uma unidade só.
GoUi.use_preset(GoThemePresets.MEDIEVAL_DARK) # tema, skin e ícones de uma vez
| Preset | Visual |
|---|---|
default_dark | O gohud original — cantos arredondados, destaque em azul suave |
default_light | As mesmas formas em uma paleta clara |
scifi_dark | Cantos chanfrados, bordas e brilho em neon ciano, joystick hexagonal, colchetes de mira |
scifi_light | As mesmas formas angulares em uma paleta clara de blueprint |
medieval_dark | Ferro escuro e couro, molduras de ouro envelhecido, rebites, ícones gravados, títulos em Cinzel |
medieval_light | Pergaminho, tinta e bronze com as mesmas molduras forjadas |
material_light Novo | Material 3 para telas de apps — botões em pílula, diálogos de 28dp, cartões preenchidos, a barra de navegação, o FAB e a barra de busca de um app, Roboto |
material_dark Novo | As mesmas formas do Material 3 na base escura |
kids_light Novo | A caixa de brinquedos para crianças — teclas de bala de gelatina com contorno grosso e uma borda que afunda ao ser pressionada, cores de giz de cera, uma página ensolarada |
kids_dark Novo | A mesma caixa de brinquedos sobre uma página azul-noite |
comic_light Novo | Quadros de quadrinhos — um contorno grosso de tinta e uma sombra dura em cada face, painéis brancos sobre uma página creme de papel; a sombra, o tamanho dela e a largura do contorno são configurações |
comic_dark Novo | A mesma tinta sobre uma página noturna — contornos creme e um primário amarelo |
arcade_light Novo | Um fliperama — cada tecla pintada com um degradê, um brilho e uma borda, com o rótulo em branco e contorno de tinta; painéis grossos emoldurados sobre uma página azul-céu e uma faixa de título dourada nas janelas |
arcade_dark Novo | As mesmas teclas vivas sobre painéis azul-marinho e uma página noturna |
default_dark — cantos arredondados, destaque em azul suave
default_light — mesmas formas, paleta clara
scifi_dark — cantos chanfrados, neon ciano
scifi_light — mesmas formas angulares, paleta blueprintEssas quatro são a mesma tela de galeria. Não há uma linha de código de diferença — só o nome do preset. Cantos dos botões, formato dos interruptores, linhas de lista e bordas dos campos mudam todos juntos.
Coleção medieval
O medieval_dark combina ferro e couro com ouro envelhecido; o medieval_light usa
pergaminho e tinta. As molduras de menu levam um rebite e um pequeno ornamento de canto, enquanto o HUD sempre
visível fica discreto; 16 ícones gravados redesenham os nomes de itens, e só títulos e subtítulos usam a fonte
Cinzel que acompanha o pacote.
medieval_dark — ferro e couro
medieval_light — pergaminho e tintaAs duas capturas são examples/medieval/medieval.tscn, montadas com os widgets padrão.
O guia medieval e como criar o seu próprio reino →
A mesma tela no celular e no desktop
As capturas da galeria são de um celular em retrato. Abaixo está o mesmo código a 1280×800 — o conteúdo para em uma largura legível (480dp) e se centraliza, enquanto o HUD continua nos cantos. O formulário contorna as peças flutuantes do HUD, mas não se move quando já está livre delas: empurrar mesmo assim jogaria o conteúdo para fora do centro em uma tela larga.
default_dark · 1280×800
scifi_dark · 1280×800A mesma folha, outro visual
Escolha um em Configurações do Projeto → gohud → Theme → Preset ou defina GoConfig.preset.
Preencher theme, skin ou icons explicitamente vence o
preset, então você pode pegar um preset e sobrescrever só um deles.
new_theme.py kingdom --from medieval_dark escreve uma paleta
com todos os valores herdados escritos por extenso; make_theme.py kingdom monta o tema, a arte dos
controles e os dials da skin, e o preset aparece no seletor. Cada configuração e cada dial →
Skins — onde um Theme não alcança
Uma skin é dona do joystick, das faces dos slots rápidos, do anel do coach mark, dos chips, dos esqueletos de carregamento, dos alertas, dos divisores e dos títulos de seção. Crie uma subclasse e sobrescreva só o que quiser mudar.
class_name MySkin extends GoSkin
func slot_box(accent: Color, lit: bool) -> StyleBox:
var box := GoStyleBoxCut.new()
box.bg_color = accent
box.cut = 6.0
box.edge_color = accent
return box
| Classe | Formas que ela consegue fazer |
|---|---|
GoStyleBoxCut | Cantos cortados na diagonal (chanfro), uma borda de destaque mais grossa, um brilho externo |
GoStyleBoxBracket | Só as marcas de canto, sem cercar o conteúdo |
GoStyleBoxMedieval | Uma moldura forjada com rebites, gravação nos cantos, um realce de bisel e a textura do material |
GoStyleBoxJelly | Uma bala de gelatina — um contorno grosso, uma borda sólida que afunda ao ser pressionada, um corpo mais claro em cima e um brilho branco |
GoStyleBoxComic | Um quadro de quadrinhos — um contorno grosso de tinta e uma sombra projetada dura, ambos dimensionados pelo GoConfig enquanto o jogo roda |
GoStyleBoxArcade | Uma tecla ou um painel de arcade — um corpo em degradê, um brilho branco, uma borda que afunda ao ser pressionada e um contorno de tinta; um painel acrescenta uma moldura colorida grossa em volta de um fundo claro |
As seis serializam dentro de um recurso Theme — é isso que permite a um tema mudar a forma, não só a cor.
GoSkinSciFi, GoSkinMedieval, GoSkinMaterial, GoSkinKids, GoSkinComic e GoSkinArcade são as subclasses que já vêm prontas.



GoStyle.box() sempre devolve um StyleBoxFlat, porque quem chama
recebe o objeto e ajusta bg_color ou corner_radius. Use
GoStyle.surface() quando uma forma personalizada precisa sobreviver.
Widgets
As peças, em uma tabela só. Cada uma em detalhe → · Todos os widgets, com imagem → · Popups e diálogos, o guia completo →
| Classe | Base | O que faz |
|---|---|---|
GoSurface | Control | Casca de cartão flutuante — posicionamento ao centro, embaixo ou ancorado, cabeçalho e rodapé fixos, corpo rolável, redimensionamento por arraste |
GoSheet | CanvasLayer | Páginas que sobem de baixo, em uma camada própria para ficarem acima do HUD |
GoDialogs | Node | Confirmações e alertas que você aguarda com await; destructive para ações irreversíveis |
GoForm | MarginContainer | Formulários com largura máxima que se desviam do teclado virtual e, com avoid_hud, do HUD |
GoScroll | ScrollContainer | Rolagem por toque; a barra de rolagem se encaixa no respiro do cartão |
GoNotice | PanelContainer | Um snackbar que não toma nem o toque nem o foco |
GoPromptCard | PanelContainer | Uma pergunta que não bloqueia o jogo |
GoCoachMark | Control | Um tour guiado que aponta para controles de verdade; tocar no alvo avança |
GoHudAnchor | Control | Fixa as peças do HUD em um dos nove pontos da área segura |
GoBar | Control | Barras de vida, mana e experiência com mudanças suavizadas |
GoSlot | Button | Um slot rápido — ícone, quantidade, cooldown e atalho em uma só face |
GoJoystick | Control | Stick virtual nos modos fixo, seguir ou relativo |
GoIconButton | Button | Parece pequeno, recebe toque grande |
GoStyle | estático | Botões, linhas de lista, campos, chips, tabelas, abas e mais, feitos sempre do mesmo jeito |
Esperando, avisando, contando
| Classe | Base | O que faz |
|---|---|---|
GoSnackbar | Node | a mensagem que se posiciona sozinha |
GoSpinner | Control | uma espera sem fim à vista |
GoBadge | PanelContainer | o pontinho de não lido, a etiqueta NOVO, o 99+ |
Formulários e listas
| Classe | Base | O que faz |
|---|---|---|
GoField | VBoxContainer | a linha que pode estar errada |
GoInputGroup | HBoxContainer | uma entrada soldada ao botão dela |
GoCombobox | Button | um seletor que busca |
GoCodeInput | VBoxContainer | códigos de cupom e de presente |
GoTable | VBoxContainer | cabeçalhos ordenáveis, linhas selecionáveis |
GoPagination | HBoxContainer | páginas, ou uma linha Mais |
Formas que os jogos realmente usam
| Classe | Base | O que faz |
|---|---|---|
GoRewardCalendar | VBoxContainer | presença diária |
GoRadar · GoDonut | Control | atributos de relance |
GoCarousel | VBoxContainer | banners e seleção de personagem |
GoKbd | HBoxContainer | dicas de tecla que não mentem |
Por cima da tela
| Classe | Base | O que faz |
|---|---|---|
GoDrawer | CanvasLayer | o painel lateral |
GoPopover | RefCounted | o cartão ancorado |
GoContextMenu | RefCounted | toque longo e clique direito |
GoConsole | CanvasLayer | o console de desenvolvimento |
Go HUD Skill
O gohud traz uma skill de IA: toda a API, modelos prontos a correr e um lançador de pré-visualização. Cole um bloco no seu agente e ele instala o gohud e sabe usá-lo.
A legibilidade é medida, não avaliada no olho
"Bonito" é gosto; "legível" dá para medir. Um texto cinza fraco fica bem em um bom monitor e some em um celular sob a luz do dia — escolher no olho garante que isso vai acontecer mais cedo ou mais tarde.
python3 addons/gohud/tools/check_contrast.py
Todo par de cores e o rótulo de cada estado de botão sobre o painel em que ele está são medidos contra a WCAG, nos catorze temas. Cores translúcidas são primeiro compostas sobre o fundo real — medi-las direto relata uma razão melhor do que a tela mostra.
Por isso as cores de texto são derivadas, não escolhidas: o gerador toma a entrada da paleta como ponto de partida e empurra a luminosidade dela até passar do limite em toda superfície onde ela pode cair. Mude a paleta e o contraste acompanha. As regras e as armadilhas por trás delas →
Verificações, releases e este site
Um único ponto de entrada roda todas as verificações; cada parte enxerga algo que as outras não veem.
bash addons/gohud/tools/check_all.sh
| Verificação | O que ela pega |
|---|---|
run_tests.sh em quatro tamanhos de tela | Comportamento e layout dos widgets, posições em RTL, foco de teclado, contraste da skin em tempo de execução, todos os presets |
new_project_check.sh | Dependências escondidas de um projeto hospedeiro; com --zip, o release como ele é distribuído, com --export, um build Web |
check_contrast.py | Contraste WCAG de cada arquivo de tema, incluindo estados de botão e painéis translúcidos |
check_generated.py · check_scaffold.sh | Os temas gerados batem com suas paletas; um tema descartável é gerado e passa no contraste |
check_package.py | A versão lida do package.json, movimentação do changelog e conteúdo do ZIP, em cópias temporárias |
check_site.py | Os links deste site, as âncoras, o idioma da página, o glossário e as tabelas de dials |
Versões de release
cat addons/gohud/package.json # { "version": "1.1.0" }
bash addons/gohud/tools/release.sh # todas as verificações → ZIP → esse ZIP num projeto vazio
bash addons/gohud/tools/package.sh # 1.1.0 → builds/1.1.0/gohud-1.1.0.zip
A versão é a que está escrita em package.json — o empacotamento nunca a incrementa. Para lançar uma
versão nova, mude primeiro esse número. Uma execução bem-sucedida ajusta plugin.cfg e
GoUi.VERSION a esse valor e, na primeira vez que essa versão é empacotada, move as notas de
Unreleased do CHANGELOG.md para uma entrada datada. Empacotar de novo a mesma versão reconstrói o
ZIP dela e substitui o anterior. Uma execução que falha não muda nada. O ZIP deixa de fora este site, os testes,
as ferramentas e o package.json.
Este site
python3 addons/gohud/tools/make_site.py # glossário e tabelas de dials das skins, gerados a partir do código
python3 addons/gohud/tools/check_site.py # links, âncoras, idioma, glossário, tabelas geradas
bash addons/gohud/tools/site_shots.sh /tmp/shots # capturas de desktop e de celular de todas as páginas
As páginas são HTML puro em www/ — inglês na raiz, coreano em ko/. Um workflow do
GitHub Actions publica essa pasta como raiz do site.