Acrescentar um tema costumava significar editar quatro lugares na mão — a paleta do gerador, a forma, uma skin, um recurso de preset. Agora um comando coloca todos eles no lugar.
python3 addons/gohud/tools/new_theme.py neon --from scifi_dark --title "Neon"
python3 addons/gohud/tools/make_theme.py neon # o .tres do tema + a arte dos controles
godot --headless --path . --import # importa a arte nova uma vez
GoUi.use_preset(&"neon") # pronto — ele também aparece no seletor
A primeira linha escreve themes/palettes/neon.json e themes/presets/neon.tres. O
JSON carrega todos os valores do tema do qual ele herda, escritos por extenso, então ele serve também como
a lista do que dá para mudar: apague uma chave para manter o valor do pai, escreva uma para sobrescrevê-lo. Os
presets são encontrados varrendo themes/presets/, então nenhum código de registro muda — a
lista suspensa da configuração de projeto também o reconhece.
O que dá para mudar — em uma página
| Onde | O quê | Como |
|---|---|---|
from | o tema pai | dark · light · scifi_dark · medieval_dark · … ou outro tema em JSON. As chaves omitidas herdam os valores dele; um ciclo de herança falha |
palette | fundo · três superfícies · borda · três tons de texto · destaque · quatro cores de estado · véu · sombra · trilho da barra | "#RRGGBB", alfa como "#RRGGBB@0.35" |
cores vivas só de preenchimento *_vivid | mantêm as barras saturadas mesmo quando a cor do texto precisa escurecer — deixe uma de fora e o gerador avisa | |
| legibilidade | não é ajustada na mão. O texto, as bordas, o destaque e o rótulo sobre ele são empurrados pelo gerador até passarem dos limites — mude só o destaque e as verificações continuam passando | |
shape | kind | flat (arredondado) · cut (cantos chanfrados) · medieval (molduras forjadas) |
| tamanhos | radius · radius_small · radius_large · gap · gap_small · gap_large · padding · button_height · button_padding[4] — os tokens acompanham, então os painéis e as contas dos widgets nunca discordam | |
só para cut | cut_ratio · cut_max · corners (diagonal|all) · glow · edge | |
só para medieval | material (0 ferro · 1 couro · 2 pergaminho) · grain_alpha · ornament_scale · bevel_strength · fonts — title, subtitle, caption, body, button mapeados para arquivos de fonte res:// internos ao add-on | |
skin | base — a família dos lugares em que o próprio código desenha (joystick, slots, badges, anel do coach mark, chips, divisores) | default · scifi · medieval |
dials — os números desses lugares: largura e tonalização da borda do slot, respiro do badge, opacidade de chips e alertas, largura e opacidade do anel do joystick, tamanhos de chanfro do sci-fi, brilho e colchete | Todo valor do pai vem escrito por extenso no JSON. O gerador os escreve em themes/skins/gohud_skin_<id>.tres — nenhum código de skin é tocado. Só para mudar os desenhos em si é que você roda --new-skin, que cria o esqueleto de uma subclasse de GoSkin | |
icons | o conjunto de ícones | um caminho res:// para um recurso GoIconSet — herdado de um pai em JSON quando omitido |
dark · title | como o seletor o exibe | booleano · string |
Cada dial
A tabela abaixo é preenchida pelo tools/make_site.py direto das linhas
@export dos scripts das skins — acrescente um dial ou mude um valor padrão e a tabela
acompanha. Use esses nomes sob skin.dials no JSON. Um dial cujo padrão aparece como 14
é um inteiro, um que aparece como 10.0 é um float — escreva qualquer uma das formas no JSON e o
gerador converte para o tipo do script.
Skin padrão GoSkin — 17
| Dial | Padrão | O que ele define |
|---|---|---|
chip_fill_alpha | 0.16 | Opacidade do preenchimento do painel de um chip. |
chip_edge_alpha | 0.45 | Opacidade da borda do painel de um chip. |
alert_tint | 0.1 | O quanto o painel de uma caixa de alerta é puxado na direção da cor do estado dela. |
slot_tint_lit | 0.24 | Tonalização de destaque do painel de um slot rápido enquanto o cooldown dele corre. |
slot_tint_idle | 0.08 | Tonalização de destaque do painel de um slot rápido em repouso. |
slot_border_lit | 2 | Largura da borda (dp) do slot rápido enquanto o cooldown dele corre. |
slot_border_idle | 1 | Largura da borda (dp) do slot rápido em repouso. |
badge_pad_x | 5 | Respiro interno horizontal (dp) de um badge (quantidade, tempo restante). |
badge_pad_y | 1 | Respiro interno vertical (dp) de um badge. |
badge_edge_alpha | 0.6 | Opacidade da borda do painel de um badge. |
float_shadow_alpha | 0.45 | Opacidade da sombra dos cartões flutuantes (coach mark, prompt card). |
float_shadow_size | 14 | Desfoque (dp) da sombra dos cartões flutuantes. |
float_shadow_lift | 4 | Deslocamento para baixo (dp) da sombra de um cartão flutuante. |
float_glow_size | 10.0 | Distância do brilho (dp) de um painel flutuante que brilha em vez de projetar sombra, como o painel chanfrado do sci-fi. |
joystick_base_alpha | 0.42 | Opacidade do disco da base do joystick. |
joystick_ring_alpha | 0.45 | Opacidade do anel do joystick. |
joystick_ring_width | 2.0 | Largura (dp) do anel do joystick. |
Skin sci-fi GoSkinSciFi — 10
| Dial | Padrão | O que ele define |
|---|---|---|
cut_chip | 7.0 | Tamanho do chanfro (dp) do painel de um chip. |
cut_skeleton | 5.0 | Tamanho do chanfro (dp) de um painel de esqueleto de carregamento. |
cut_alert | 8.0 | Tamanho do chanfro (dp) de uma caixa de alerta. |
cut_segment | 8.0 | Tamanho do chanfro (dp) de um controle segmentado. |
cut_slot | 6.0 | Tamanho do chanfro (dp) do painel de um slot rápido. |
cut_disc_ratio | 0.24 | Chanfro de avatares e discos = diâmetro × esta proporção. |
slot_glow_alpha | 0.45 | Opacidade do brilho de um slot cujo cooldown está correndo. |
slot_glow_size | 6.0 | Distância do brilho (dp) de um slot cujo cooldown está correndo. |
bracket_arm | 12.0 | Comprimento do braço (dp) do colchete de mira do coach mark. |
bracket_thickness | 2.0 | Espessura da linha (dp) do colchete de mira do coach mark. |
Skin medieval GoSkinMedieval — 5
| Dial | Padrão | O que ele define |
|---|---|---|
slot_radius | 4.0 | Raio dos cantos (dp) da moldura do slot rápido medieval. |
leather_grain_alpha | 0.035 | Opacidade das marcas sutis de couro dentro dos slots rápidos. |
ornament_scale | 1.0 | Escala das decorações de metal nos cantos dos slots rápidos. As molduras de menu usam shape.ornament_scale. |
bevel_strength | 0.18 | Intensidade do realce metálico ao longo das bordas dos slots rápidos. |
slot_rivets | 1 | Mostra pequenos rebites de metal nos slots rápidos: 0 esconde, 1 mostra. |
Crie uma subclasse da skin (opcional)
Só o que o tema e a forma não alcançam — o hexágono do joystick, os badges dos slots, o colchete de mira do
coach mark — vive em uma skin. Crie uma subclasse de GoSkin, sobrescreva apenas esses métodos e
aponte o skin do JSON para esse recurso. Um tema que só muda cores pula esta etapa.
tools/check_scaffold.sh cria um tema descartável a cada
execução — muda o destaque, põe o raio em 4 — e confere a geração, a propagação dos tokens e uma passagem limpa
de contraste antes de removê-lo. Na primeira execução, um tema com apenas o destaque alterado reprovou em
8 pares: o gerador empurrava as cores de texto, mas usava o destaque como estava escrito. Agora ele
empurra também o destaque e o rótulo sobre ele.