Ativa o menu
Alternar menu de preferências
Alternar menu pessoal
Não autenticado(a)
Your IP address will be publicly visible if you make any edits.

TEXTURES é um lump de texto usado para definir imagens compostas e/ou escaladas no ZDoom. Apesar do nome, ele pode ser usado para definir não apenas texturas de nível, mas todos os tipos de imagens, incluindo sprites. É um formato de substituição, baseado em texto, para os lumps originais TEXTURE1 e TEXTURE2.

Este lump anteriormente se chamava HIRESTEX, mas o nome foi alterado para refletir melhor o seu significado. Lumps HIRESTEX ainda são lidos, porém esse nome é considerado obsoleto ((deprecated)).

O objetivo principal do TEXTURES é permitir criar novas imagens a partir de imagens existentes, sem precisar criar novos gráficos “fisicamente” em um software de edição. Por exemplo, se você usa várias variações da mesma textura que só diferem na escala, o TEXTURES permite, usando um único arquivo de imagem, definir múltiplas texturas “virtuais” que referenciam o mesmo arquivo, mas são exibidas em escalas diferentes.

Outro exemplo comum são as texturas compostas (isto é, texturas que consistem de várias imagens), como uma textura de parede e uma textura de switch que precisam ser combinadas para criar uma textura de um switch na parede: com TEXTURES você pode definir uma textura virtual que combina as duas imagens em uma só; uma vez feito isso, você poderá usar tanto as texturas separadas quanto a textura composta no seu projeto.

As vantagens dessa abordagem são:

  • Você pode reduzir o tamanho do seu projeto criando texturas virtuais em vez de precisar criar múltiplos arquivos de imagens parecidas.
  • Se você decidir atualizar uma das texturas base (como a textura de parede), todas as texturas virtuais compostas que a usam como patch (como um switch na parede) serão atualizadas automaticamente, sem precisar editar/recriar várias imagens.
Note: TEXTURES é um lump opcional. Enquanto no Doom vanilla todas as texturas precisavam ser adicionadas como patches em um lump TEXTURE1/TEXTURE2 para poderem ser usadas no mapa, no ZDoom isso só é necessário para texturas compostas ou escaladas. Se você tem uma imagem que vai ser usada diretamente como textura, sem escalonar nem combinar com outras imagens, basta colocá-la na pasta /textures/ dentro do seu arquivo PK3, e desde que o nome tenha 8 caracteres ou menos, ela ficará disponível diretamente no editor de mapas.


Estrutura e terminologia

Primeiro, é importante ter um entendimento claro de como o TEXTURES funciona:

  • Uma definição em TEXTURES é uma imagem virtual que pode ser de um entre vários tipos (Texture, Walltexture, Flat, Sprite, Graphic), o que define em qual namespace ela ficará disponível. Ela também tem o próprio tamanho em pixels e propriedades de escala.
  • Para exibir algo de fato, a definição precisa ter um patch associado. Um patch é uma imagem física (isto é, o arquivo de imagem, como um PNG) que normalmente fica na pasta patches/ do seu PK3; porém, o TEXTURES pode usar qualquer gráfico como patch. Você pode criar automaticamente uma definição de TEXTURES para um patch no SLADE clicando com o botão direito no arquivo de imagem e escolhendo Graphic > Add to TEXTUREx. Como o propósito principal do TEXTURES é criar imagens compostas a partir de várias imagens-fonte, naturalmente vários patches podem ser anexados a uma única definição.

Como criar uma definição de TEXTURES

Usando o SLADE:

  • Encontre uma imagem no seu arquivo PK3 ou pasta do projeto, clique com o botão direito e escolha Graphic > Add to TEXTUREx. Se não existir um lump TEXTURES no projeto nesse momento, aparecerá um prompt sugerindo criar um lump TEXTURE1, TEXTURE2 ou TEXTURES. Escolha o último (já que TEXTURE1/TEXTURE2 não são particularmente úteis no ZDoom) e clique OK para criar o lump. Não esqueça de salvar as mudanças (Ctrl-S) para que o lump seja realmente criado. Se o lump TEXTURES já existir, será criada uma definição para esse patch. Essa definição terá automaticamente o tamanho do patch escolhido, e a imagem será adicionada como patch.
    • Observação: você pode fazer isso para várias imagens selecionando diversas (segurando Shift ou Ctrl) e escolhendo Add to TEXTUREx. Isso criará múltiplas definições de TEXTURES separadas (uma por patch selecionado). Não dá para usar esse método para adicionar vários patches à mesma definição.
  • Depois de ter algumas definições, você pode selecionar o lump TEXTURES para editá-lo em formato texto ou dar duplo clique nele para abrir o editor visual. Você pode usar o editor para ajustar escala e offsets da imagem virtual (útil se ela for usada como sprite), adicionar mais patches e arrastá-los manualmente, mudar a ordem de desenho e até renderstyle.

Edição manual:

  • Você pode adicionar uma definição no TEXTURES editando-o como um lump de texto. Isso é mais trabalhoso e não é muito recomendado para adicionar o primeiro patch (que, no caso de textura composta, costuma ser a maior imagem do fundo, como uma parede atrás de um switch), mas ainda é útil em alguns casos:
    • Se você quiser usar o caminho completo de um patch: se o patch tiver um nome com mais de 8 caracteres, você terá que fornecer um caminho completo, como Patch "graphics/hud/monstercompass.png". Isso só pode ser feito manualmente; o Add to TEXTUREx não adiciona caminho completo automaticamente.
    • A edição manual pode ser útil se você quiser aplicar modificações semelhantes a um grande conjunto de imagens. Por exemplo, se você tem muitas imagens que precisam receber a mesma escala, pode ser mais fácil ajustar a escala inicial via editor visual e então copiar/colar os valores para outras definições via editor de texto.
    • Você também pode precisar de edição manual para adicionar um patch vindo de outro projeto. Por exemplo, se quiser criar uma imagem virtual que use imagens do doom2.wad, você terá que criar primeiro a definição em TEXTURES e então adicionar o patch usando o nome correto. As duas formas principais são: escrever o nome no editor de texto, ou abrir seu projeto e o doom2.wad no SLADE, abrir sua definição no editor visual, clicar em + para adicionar um patch, e então selecionar patches de todos os arquivos abertos, incluindo doom2.wad.

Localização e nomes de patches

O TEXTURES pode usar qualquer imagem como patch, independentemente de onde ela esteja no seu arquivo/pasta. A escolha de onde colocar segue esta lógica:

  1. Se a imagem não vai ser usada diretamente em lugar nenhum e serve apenas como patch de uma imagem virtual em TEXTURES, é melhor colocá-la em patches/. Arquivos nessa pasta não podem ser usados diretamente e só ficam visíveis ao TEXTURES.
  2. Se tanto a imagem real quanto a imagem virtual em TEXTURES forem ser usadas, coloque a imagem na pasta relevante (como sprites/, graphics/, textures/, etc.). Por exemplo, se você tem uma textura grande que vai usar diretamente e também numa versão reduzida, use este método.

No 2º caso, é melhor garantir que o arquivo de imagem e a definição em TEXTURES tenham nomes diferentes. Caso contrário, quando você referenciar o nome do gráfico no seu código, você não saberá se o GZDoom vai pegar a imagem diretamente ou a definição de TEXTURES com o mesmo nome.

Editor visual do SLADE para TEXTURES

Arquivo:Textures visual editor.png

Coluna esquerda: contém uma lista das definições adicionadas.

Topo:

  • Apply scale: se a imagem estiver escalada, esta opção garante que ela seja exibida com a escala aplicada. Desativado por padrão.
  • Aspect Ratio Correction: exibe a imagem como ela normalmente apareceria no Doom, com alongamento vertical de pixels (veja Aspect ratio correction). Isso ajuda a visualizar como ficará de fato no renderer.
  • Show outside: se alguns patches forem movidos além das bordas da imagem virtual, marcar esta opção garante que eles ainda apareçam (em vermelho). Caso contrário, as partes fora dos limites ficam ocultas.

Parte inferior — esta área contém configurações da imagem virtual:

  • Offset Type mostra uma grade de offsets para sprites no mundo (Sprite), sprites na tela (Weapons/CustomInventory) ou nada (para HUDs/menus que não usam offsets).
  • Name: nome da imagem virtual.
  • Size: resolução da imagem virtual.
  • Scale: escala aplicada à imagem virtual. Observação: o TEXTURES usa escala inversa (2 = 50% do tamanho original, 0.5 = 200% do tamanho original, etc.).
  • Type: define o namespace da imagem virtual (Texture, Sprite, Graphic, WallTexture, Flat). Se quiser usar como sprite, ajuste para Sprite. Nos outros casos não é tão crítico, mas ainda é recomendado setar corretamente. WallTexture e Flat são em grande parte redundantes hoje.
  • Offsets: offsets da imagem virtual. Você também pode ajustar arrastando a imagem clicando fora da borda e arrastando. Se você clicar dentro da borda, você arrastará o patch selecionado, não a imagem virtual.
  • Truecolor preview: no canto inferior direito; garante que nenhuma paleta específica de jogo seja aplicada na pré-visualização. Use se estiver usando patches PNG truecolor.

Flags (abaixo do campo Offsets):

  • Optional
Suprime avisos se um patch necessário estiver faltando. A imagem virtual simplesmente não será criada.
  • WorldPanning
Especifica que offsets de textura devem ser aplicados em unidades de mundo, e não em pixels da textura. Isso ajuda texturas escaladas a terem offsets corretos ao substituir texturas de menor resolução em um mapa existente.
  • NoDecals
Não permitir decals nesta textura.
  • NullTexture
A imagem nunca será desenhada. Duplica o comportamento de AASHITTY e outras texturas especiais.
  • NoTrim (Só pode ser especificado manualmente no editor de texto.)
  • Por padrão, o GZDoom “corta” espaço vazio em imagens, o que pode causar problemas ao rotacionar/escalar sprites (ex.: o ponto âncora usado por A_OverlayRotate, A_OverlayScale e o roll do ator é definido pelo tamanho da imagem; mas como o espaço vazio é removido, pode ser difícil prever). Esse flag desativa o trimming.
  • Alternativamente, isso pode ser configurado em ANIMDEFS com outra sintaxe.

Direita — esta área contém configurações de patches:

  • Patches: lista de patches.
    • Botão + abre a seleção para adicionar um novo patch de qualquer arquivo aberto no SLADE
    • Botão - remove o patch selecionado
    • Setas mudam a ordem dos patches (o que fica por cima/por baixo)
    • O botão lateral adiciona um patch para substituir o patch selecionado
    • O botão de duplicar adiciona novamente o patch selecionado

Propriedades do patch:

  • X position e Y position: posição do patch dentro da imagem virtual
  • Use Source GFX offsets: usar os offsets embutidos na imagem original
  • Flip X e Flip Y: espelhar o patch horizontal/verticalmente
  • Rotation: rotaciona em incrementos de 90°. Para incrementos menores, use a propriedade roll do ator ou A_OverlayRotate (para sprites na tela).
  • Alpha: translucidez do patch
  • Alpha style: lista de renderstyles possíveis do patch
  • Patch Colour: Normal, Blend ou Tint
  • Translation: permite especificar uma string de translation para o patch, similar ao Translation de Actor

Editor de texto

Para definir uma nova imagem virtual, use uma das palavras-chave (texture, sprite, etc.). O formato é o mesmo:

texture [optional] Name, Width, Height (texturas genéricas)
sprite [optional] Name, Width, Height (sprites)
graphic [optional] Name, Width, Height (gráficos de menu)
walltexture [optional] Name, Width, Height (texturas de parede)
flat [optional] Name, Width, Height (pisos e tetos)

Name é o nome da nova textura/sprite composto. Width e Height são inteiros que definem a largura e altura do “canvas” da imagem composta. Note que isso não é o tamanho escalado — esse é definido pelas propriedades X/YScale dentro do bloco de parâmetros (veja abaixo).

Após essa linha há um bloco opcional de parâmetros entre chaves ({}) onde ficam as opções e os patches que compõem a imagem.

Flags disponíveis:

  • XScale <value>
  • YScale <value>
  • Offset <horz>, <vert>
  • WorldPanning
  • NoDecals
  • NullTexture
  • NoTrim

NoTrim

Além de especificar dentro de definições, NoTrim pode ser especificado sem precisar criar uma definição, com uma única linha. Veja o flag acima sobre o que ele faz. Requer um gráfico existente para ter efeito.

NoTrim <nome do gráfico>

Patch

Além das opções no nível da textura, a palavra-chave Patch (e seu bloco) é usada para adicionar patches à imagem composta. Uma textura requer pelo menos um patch para funcionar. O formato é:

Patch Name, X-Origin, Y-Origin
Graphic Name, X-Origin, Y-Origin
Sprite Name, X-Origin, Y-Origin

Name é o nome do patch a adicionar. X/Y-Origin definem onde, no “canvas”, posicionar o patch, começando no pixel superior-esquerdo do patch e desenhando para a direita e para baixo.

Em vez de "patch", pode-se usar "graphic" ou "sprite". A diferença prática é a prioridade de namespace, relevante principalmente em PK3 (em WAD, patches e graphics ficam no namespace global). Na enorme maioria dos casos você pode usar Patch e ignorar o resto.

Assim como a textura, o Patch pode ter um bloco opcional de parâmetros entre chaves. As opções disponíveis nele são:

Warning: Há três coisas importantes a ter em mente:
  1. Essas opções se aplicam apenas ao patch durante a composição. A textura final resultante é apenas um conjunto de pixels que não “lembra” que houve blend/translation/rotação.
  2. Alpha, Blend e Style só são relevantes para imagens compostas. Elas não afetam como a imagem virtual final é renderizada no jogo. Em particular, se não houver informação de pixel atrás de um patch translúcido/blended, ele será combinado com preto. Isso não pode ser usado para criar imagens com translucidez variável ou múltiplos renderstyles!
  3. Blend e Translation são mutuamente incompatíveis e não podem ser usados juntos no mesmo patch.


  • FlipX
Espelha o patch da direita para a esquerda dentro da imagem.
  • FlipY
Vira o patch de cabeça para baixo.
  • UseOffsets
Os offsets embutidos no patch são subtraídos das origens X e Y, em vez de serem ignorados.
  • Rotate <value>
Rotaciona o patch no sentido horário. Valor em graus. Atualmente apenas múltiplos de 90 são válidos (0/90/180/270). (Observação: as origens não mudam; a rotação ocorre no lugar, ao redor do centro.)
  • Translation <string>
Aplica uma tradução ao patch antes de inseri-lo na imagem composta. <string> pode ser uma tradução embutida ou uma string de tradução customizada. Veja abaixo.
  • Blend <string color>[,<float alpha>]
  • Blend <int r>,<int g>,<int b>[,<float alpha>]
Tem dois efeitos dependendo do uso: Se você especifica uma cor como string e omite alpha, cria um colormap customizado (efeito semelhante a Sector_SetColor), aplicando a coloração diretamente ao patch. Se alpha é fornecido, mistura uma cor sólida no patch, parecido com “tint” de tela. No 2º formato, valores de cor devem estar entre 0 e 255.
  • Alpha <value>
Define a translucidez do patch (0.0–1.0) ao adicioná-lo na imagem. Padrão: 1.0 (opaco). Use Style para controlar como a translucidez é aplicada.
  • Style <type>
Define o renderstyle usado para um patch translúcido. Veja abaixo.

Pode haver quantas declarações Patch (com ou sem bloco) forem necessárias para criar a imagem final.

Translations

As cores de cada patch podem ser traduzidas independentemente durante a composição.

Para usar uma das traduções embutidas, após Translation use uma de:

  • Desaturate, <amount>
  • Blue
  • Gold
  • Green
  • Ice
  • Inverse
  • Red

Ao usar Desaturate, um inteiro adicional entre 1 e 31 determina o quanto desaturar. 1 quase não altera; 31 desatura totalmente para tons de cinza.

Além dessas traduções, uma tradução customizada pode ser definida com a mesma sintaxe da propriedade Translation do DECORATE.

Translucency

Patches podem ser aplicados à imagem composta usando translucidez. Para isso, use Alpha para controlar a opacidade e Style para controlar o tipo. Valores disponíveis para Style:

  • Add
Efeito aditivo (clareia/brilha).
  • Copy
Renderiza normal e sólido. Padrão se Style não for especificado.
  • CopyAlpha
Igual a Copy, mas respeita o canal alpha do PNG.
  • CopyNewAlpha
Como Copy, mas multiplica o alpha de cada pixel pelo valor de Alpha.
  • Modulate
Efeito forte de escurecimento, similar ao “burn”.
  • Overlay
Como CopyAlpha, mas só copia o canal alpha onde ele for maior que o que está embaixo.
  • ReverseSubtract
Como subtract, mas reinverte o patch para parecer normal ao aplicar.
  • Subtract
Subtrai o patch do que está abaixo, escurecendo. Implica inversão.
  • Translucent
Translucidez regular.

Exemplos

Isto cria uma textura composta de “escada” aplicando várias cópias do mesmo patch e rotacionando-as 90 graus. Note que, neste exemplo, XScale/YScale não são necessários; só defina se estiver aumentando/diminuindo uma imagem.

texture ALADDER2, 72, 256
{
   Patch RW45_1, 0, 0
   {
      rotate 90
   }
   Patch RW45_1, 0, 64
   {
      rotate 90
   }
   Patch RW45_1, 0, 128
   {
      rotate 90
   }
   Patch RW45_1, 0, 172
   {
      rotate 90
   }
}

Este exemplo mostra CopyAlpha sendo usado numa textura 512x512 que é escalada para se comportar como 128x128:

Texture SWEXPLUP, 512, 512
{
   // Switch Example
   // Up position
   XScale 4
   YScale 4
   Patch AG_512_2, 0, 0
   Patch MSW1_UP, 64, 288 { Style CopyAlpha }
}

Múltiplos lumps TEXTURES

O GZDoom suporta sintaxe #include para lumps TEXTURES desde a versão 3.4.0. Se você quer que seu mod suporte versões mais antigas do código base (como Zandronum), você pode ter múltiplos lumps TEXTURES no seu PK3. Basta dar extensões diferentes além de .txt, ou da extensão de texto que você costuma usar. Por exemplo, TEXTURES.tech, TEXTURES.wood, TEXTURES.hell, e assim por diante. Organizar e categorizar as definições assim facilita muito localizar e modificar entradas.

Suporte em editores

  • Doom Builder 2 lê definições TEXTURES e as mostra no modo visual. Porém, atualmente coisas como flips, rotações, traduções, blends e imagens com caminhos longos não são refletidas.
  • SLADE 3 também lê e oferece um editor visual de texturas.

Hi-res textures (deprecated)

Warning: Considere usar o recurso mais robusto de definição de textura composta. Estes comandos antigos do HIRESTEX são considerados obsoletos e não receberão mais atualizações no futuro.

Para substituir uma textura/sprite/gráfico original, use:

remap texturename hireslumpname

E para definir uma nova textura Hi-Res, use:

define lumpname scaledwidth scaledheight

Usar o método HIRESTEX não é necessário para substituições hi-res. Apenas colocar gráficos entre HI_START/HI_END (WAD) ou na pasta /Hires/ (PK3) já fará com que eles sejam automaticamente escalados para o tamanho dos gráficos com o mesmo nome que eles substituem, e nenhum lump de texto é necessário.