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.
DoomWiki.org
For more information on this article, visit the Sprite page on the Doom Wiki.

No Doom, um sprite é uma série de imagens que pode ser usada para exibir uma animação de um actor. O ZDoom permite que autores adicionem ou alterem sprites facilmente com um PWAD.

Arquivos de sprite

Colocação no arquivo

Em um PK3, sprites devem ser colocados na pasta /sprites/. Você pode organizá-los em subpastas mais profundas (como sprites/weapons/, sprites/items, etc.), mas tome cuidado: cada arquivo de sprite ainda exige um nome único.

Em um arquivo WAD, sprites devem ser colocados entre os marcadores S_START e S_END. Porém, hoje em dia é altamente recomendado não usar WADs para armazenamento de assets e reservar esse formato para mapas. PK3 é uma opção muito mais preferível para armazenar assets.

Como todos os gráficos, sprites podem ser usados diretamente, ou por meio de uma definição TEXTURES. Usando TEXTURES, você pode criar sprites compostos a partir de várias imagens, e também pode armazenar os offsets do sprite (descritos abaixo) no arquivo TEXTURES, em vez de no próprio arquivo de imagem. Se você quiser seguir por esse caminho, observe o seguinte:

  1. Sprites que devem ser usados apenas via TEXTURES precisarão ser colocados em /patches/.
  2. O nome da definição em TEXTURES deve seguir as regras de nomenclatura (descritas abaixo). Por exemplo, sprite SPRTA0, 128, 128 é uma definição válida.
  3. É recomendado que o nome do arquivo em si seja diferente do nome da sua definição em TEXTURES. Por exemplo:

Caminho do arquivo: /patches/weapon/pSWRDA0.png

Definição em TEXTURES:

Sprite SWRDA0, 128, 64
{
  Offset 21, 64
  Patch "pSWRDA0", 0, 0
}

Isso cria um sprite SWRDA0, com offsets 21, 64, e ele usa a imagem chamada pSWRDA0 como seu gráfico.

Observação: se você usar nomes de arquivo longos (mais de 8 caracteres), a instrução Patch precisará de um caminho completo, por exemplo, "patches/weapon/patch_SWRDA0.png".

Você pode encontrar mais informações sobre a criação de imagens virtuais na página TEXTURES.

Formatos de imagem

O ZDoom suporta um grande número de formatos de imagem. O Doom vanilla usava um formato específico com paleta, mas usá-lo em projetos específicos de ZDoom/GZDoom é desnecessário. O formato de imagem mais comumente usado para sprites é PNG.

PNG pode ser tanto com paleta quanto truecolor. Você pode paletizar PNG usando seu programa de edição de imagens ou no SLADE. Para paletizar uma imagem no SLADE, clique com o botão direito nela e escolha Graphic > Convert to..., depois selecione a paleta desejada no campo Convert to e clique em Convert.

PNGs truecolor são totalmente suportados e não são limitados ao PLAYPAL do jogo. Porém, note que aplicar tradução de cores a um ator (por exemplo, com A_SetTranslation) primeiro irá esmagar todos os sprites dele para o PLAYPAL, e não há como reverter isso dinamicamente. Para impedir que um ator seja traduzido, usar a flag NOTRANSLATION pode ser uma boa ideia.

Offsets da imagem

Warning: Sprites sempre precisam de offsets! Se você pular esta etapa e tentar anexar sprites a um ator, eles vão acabar debaixo do chão (porque é assim que sprites são posicionados com seus offsets padrão de 0,0).

Offsets normalmente são definidos usando SLADE. Aqui está o que você precisa saber sobre os offsets:

  • Offsets normalmente são armazenados no próprio arquivo de imagem, mas não podem ser visualizados por softwares de edição de imagem como o Photoshop.
  • Se você definir offsets em algum momento, mas depois editar a imagem em um programa externo, como o Photoshop, na maioria das vezes seus offsets serão redefinidos para 0, 0, e você terá que defini-los manualmente novamente.
  • As únicas imagens que exigem offsets são sprites e gráficos da barra de status do Doom. Texturas de nível, gráficos de HUD/UI em tela cheia e afins não precisam de offsets.
  • Offsets também podem ser definidos em TEXTURES, como mostrado acima. Se você usar seus sprites via TEXTURES em vez de diretamente, é recomendado também aplicar offsets em TEXTURES: assim esses offsets serão armazenados separadamente do arquivo, e você poderá editar o arquivo livremente em um editor gráfico externo sem que os offsets sejam apagados.

Offsets podem ser modificados da seguinte forma:

Arquivo:SLADE offsets.jpg
  • Navegue até a imagem no SLADE e clique nela com o botão esquerdo. Você verá a imagem à direita.
  • Na janela de visualização, você verá o campo Offsets na área inferior esquerda.
  • À direita do campo Offsets você também verá a lista suspensa com opções chamadas "Auto", "Graphic", "Sprite" e "HUD". Ao ajustar offsets de sprites para um ator no mundo, use "Sprite". Para sprites de arma na tela, use "HUD".
  • Clique com o botão esquerdo na imagem e segure para arrastá-la.
  • Clique no pequeno ícone de disquete Save no canto superior esquerdo da janela de visualização para salvar as alterações.

Se o seu sprite estiver definido via TEXTURES, a abordagem é exatamente a mesma, exceto que primeiro você precisa dar duplo clique no arquivo TEXTURES para abrir o editor visual dele. A partir daí, selecione seus sprites virtuais e ajuste os offsets conforme necessário.

Note: Ao ajustar offsets de um gráfico definido em TEXTURES, certifique-se de clicar e arrastar fora dos limites da imagem, caso contrário você estará arrastando o patch dentro da imagem virtual, e não a imagem em si!

Você também pode definir offsets em massa. Segure Shift ou Control para selecionar várias imagens, então clique com o botão direito > Graphic > Modify Gfx offsets. Isso oferece as seguintes opções:

  • Automatic Offsets: ajusta o gráfico automaticamente, oferecendo várias opções. Para atores no mundo, escolha "Monster". Isso pode ser uma boa opção para definir offsets rapidamente, mas provavelmente você precisará corrigir manualmente depois.
  • Set Offsets: permite inserir os offsets manualmente, e eles serão aplicados a todas as imagens selecionadas. Observe que, se você marcar a caixa Relative, os valores inseridos serão somados aos offsets existentes em vez de sobrescrevê-los.

Resolução da imagem

No Doom vanilla e no ZDoom por padrão 1 pixel = 1 unidade de mapa. Então, se um ator tem 64 unidades de mapa de altura, seu sprite provavelmente terá aproximadamente 64 pixels de altura. Da mesma forma, uma parede de 128x128 um no Doom vanilla terá uma textura de 128x128px nela.

Porém, o ZDoom/GZDoom permite escalar sprites (e qualquer outra imagem). Em um ator, você pode usar a propriedade Scale para escalar todos os sprites dele. Por exemplo, se você tem um sprite 64x128 e quer escalá-lo para 50%, use Scale 0.5 na definição ZScript do seu ator. Esse método permite usar sprites com resolução mais alta do que no Doom vanilla, já que o tamanho físico deles será reduzido no jogo. Note que não é recomendado usar imagens de resolução muito alta como sprites, pois isso pode resultar em consumo excessivo de VRAM. Se você está planejando um ator de alta fidelidade com centenas de frames de animação, usar um modelo 3D pode ser uma escolha melhor.

Se você estiver usando seus sprites via TEXTURES, você também pode escalá-los lá.

Note que sprites, como todo o resto, são afetados pela Aspect ratio correction.

Regras de nomenclatura

Formatação do nome

Nomes de imagens de sprite têm que seguir este formato:

 NNNNA#[A#]

onde NNNN é o nome base do sprite, A é a letra do frame (uma letra que especifica o frame), e # especifica o ângulo.

As regras são as seguintes:

  1. Nome base: uma sequência de 4 caracteres que pode incluir números e letras. Não pode incluir espaços. No Doom original todos os atores tinham que usar um único nome base para o seu sprite (por exemplo, todos os sprites do Zombieman começam com POSS), mas essa limitação não existe no ZDoom.
  2. Letra do frame: qualquer letra. Também suporta os caracteres [, \ e ], mas muitos autores escolhem não usá-los para manter os frames como letras.
  3. Ângulo: se o sprite não tiver rotações, isso deve ser 0. Se o sprite tiver 8 rotações, isso deve ser um número entre 1 e 8. Se o sprite tiver 16 rotações, é um número entre 1-9 para os primeiros 9 ângulos, e depois uma letra de A a G para o restante. Veja Angles abaixo para detalhes. Todas as rotações devem ser fornecidas, caso contrário o ZDoom não irá iniciar.

Se um sprite é angulado, o número mínimo de imagens é 5, o que significa 8 ângulos, 3 dos quais são feitos por espelhamento. Veja Mirroring para detalhes.

Frames

Você pode ter 29 frames de animação para qualquer nome de sprite, um para cada letra do alfabeto mais [, \ ou ]. Por exemplo, POSSA1 é o primeiro frame de caminhada do soldado zumbi, POSSG1 é o frame de dor (as animações em si podem ser controladas com DEHACKED ou DECORATE ).

Se estiver usando o frame \ em um formato de arquivo PK3, note que o nome do arquivo do sprite deve usar um circunflexo (^) em vez de uma barra invertida (\). O caractere barra invertida ainda é usado em DECORATE, porém.

Se você precisar de frames adicionais além de [\], você pode simplesmente criar um novo nome de sprite. Por exemplo, depois de usar POSS]0, faria sentido usar POS2A0.

Sprites também podem ser definidos em TEXTURES.

Ângulos

Em geral, itens e decorações têm apenas um ângulo, indicado por um 0 (zero) após a letra do frame. Por exemplo, BON1A0 será usado para representar o bônus de vida não importa de que ângulo você esteja olhando. Atores móveis, como monstros e jogadores, normalmente têm oito rotações nos jogos originais. O ZDoom porém permite ter até 16 rotações para cada sprite. Aqui está uma tabela que mostra qual caractere usar para cada ângulo: <css>table.wikitable th.inner { background-color: #d3a7e5; } table.wikitable th.middle { background-color: #c1edfd; } table.wikitable th.outer { background-color: #b6fda2; }</css>

Teclas de ângulo de sprite

para cada quantidade de rotações

4

135°

C

157.5°

5

180°

D

202.5°

6

225°

B

112.5°

4 5 6 E

247.5°

Anel interno:

Sem rotação

3

90°

3 0 7 7

270°

Anel do meio:

8 rotações

A

67.5°

2 1 8 F

292.5°

Anel externo:

16 rotações

2

45°

9

22.5°

1

G

337.5°

8

315°

Assim, com a nomenclatura padrão, POSSA1 representa o Zombieman visto de frente, A5 é de trás, A3 é do lado esquerdo, A7 é do lado direito. Note que no Doom a maioria dos monstros usa espelhamento, então por exemplo o Zombieman usa o sprite POSSA3A7 que o mostra do lado esquerdo e é automaticamente espelhado para ser usado do lado direito.

Em sprites de 16 lados, POSSA9 representaria o Zombieman em um ângulo de 22.5 graus, POSSAA estaria em um ângulo de 67.5 graus, etc.

Espelhamento

Cada imagem de sprite pode ter uma posição alternativa espelhada. Basta adicionar outra letra de frame e notação de ângulo após a primeira no nome da imagem. Por exemplo, para POSSA2A8, a imagem real com esse nome será invertida para mostrar o soldado no ângulo de 315 graus.

Note que o posicionamento do frame "original" e do espelho é importante. O frame que não está sendo espelhado vem primeiro, junto com o número.

Se por exemplo, o ângulo de 90 graus de um sprite está voltado para a direita, ele deve ser nomeado como POSSA7A3. Caso contrário, se estiver voltado para a esquerda, deve ser POSSA3A7. Isso porque o primeiro lado definido (neste caso, o frame de 270 graus conhecido como 'ângulo 7') está destinado a ser o sprite "original", que o engine então espelhará se outro frame for definido após aquele.

Também é possível mudar referências de frames de sprite para imitar, por exemplo, a perna direita de um personagem avançando e pisando para baixo com POSSA8C2, para que atores possam ser mais precisos, mesmo que não seja exatamente o mesmo. Isso pode ser usado para ajudar com o fluxo, como o ciclo de caminhada de um monstro grande.

Arquivo:SLADE Monster Angles.jpg

Nomes especiais

Existem três nomes de sprite "reservados" que têm efeitos específicos.

TNT1 A
Originalmente introduzido pela TeamTNT em Boom, TNT1 é um sprite invisível. A letra do frame é irrelevante, embora "A" seja geralmente usada. Mesmo que gráficos sejam fornecidos (por exemplo, um lump TNT1A0), ele continuará invisível. Para atores que precisam ser invisíveis, use TNT1. Os detalhes sobre esse sprite dummy são cobertos aqui.
---- A
Este sprite é interpretado como "manter sprite anterior". A letra do frame é irrelevante, embora "A" seja geralmente usada. Um exemplo é o estado GenericFreezeDeath em Actor.
#### #
Este sprite é interpretado como ----, mas com a diferença de que ele permite sobrescrever seletivamente o sprite ou a letra, ou ambos. Usar #### para o sprite significa "manter sprite anterior" e usar # para a letra significa "manter letra anterior". Um exemplo é o estado GenericFreezeDeath em Actor.

Para ser analisado corretamente em DECORATE em vez de ZScript, os nomes ----, #### e # devem ser colocados entre aspas (por exemplo, "----" A -1). Eles também não devem ser usados para o primeiro frame de um ator, pois a ausência de um sprite fará com que o objeto Missing Actor seja gerado no lugar (placa vermelho-escura com um ponto de exclamação amarelo).

Atores gerados com A_SpawnItemEx podem utilizar SXF_TRANSFERSPRITEFRAME, permitindo usar os dois nomes preservadores acima para o primeiro frame do ator inicializador. Isso funciona apenas com A_SpawnItemEx e não deve ser tentado com mais nada.

Nomes de sprite em conflito

O ZDoom suporta Doom/Doom II, Heretic, Hexen e Strife. Inimigos ou itens de qualquer um desses jogos podem ser trazidos para qualquer outro jogo. Porém, isso evidencia o fato de que alguns sprites têm o mesmo nome em um jogo que outro sprite em outro jogo. Por exemplo, o Cacodemon de Doom usa sprites chamados HEAD*, mas o Iron Lich de Heretic usa o mesmo nome. Para evitar conflitos e permitir que todos os sprites coexistam pacificamente, foi feita uma mudança no ZDoom que altera o nome do sprite que o ZDoom irá procurar, contanto que ele esteja olhando para um PWAD. (Assim os IWADs originais ainda funcionarão inalterados.)

Sprites são renomeados da seguinte forma:

Heretic.wad

Original name Renamed to Comment
BLOD BLUD Isso o torna o mesmo que o sprite de sangue do Doom
HEAD LICH Evita conflitos com os sprites do Cacodemon

Hexen.wad

Original name Renamed to Comment
ARM1 AR_1
ARM2 AR_2
ARM3 AR_3
ARM4 AR_4
BARL ZBAR
BLOD BLUD Isso o torna o mesmo que o sprite de sangue do Doom
CAND BCAN
EGGM PRKM
GIBS POL5 Isso o torna o mesmo que o sprite de gibs do Doom
ROCK ROKK
SUIT ZSUI
TRE1 ZTRE
TRE2 TRES
WATR HWAT
MNTRF MNTRU Essas linhas tornam os frames de ataque do minotauro

os mesmos que em Heretic, para evitar ter que fazer patch no ator em si.

MNTRG MNTRV
MNTRH MNTRW
MNTRI MNTRX
MNTRJ MNTRY
MNTRK MNTRZ
ARTIINVU ARTIDEFN Isso o separa do item de

invulnerabilidade de Heretic

INVU DEFN

Strife1.wad

Original name Renamed to Comment
ARM1 ARM3
ARM2 ARM4
BAR1 BARC
BARL BBAR
BLST MAUL
BLOD BLUD Isso o torna o mesmo que o sprite de sangue do Doom
CNDL KNDL
LOGG LOGW
MISL SMIS
PMAP SMAP
POT1 MPOT
SHRD SHAR
SHT2 MPUF
SPID STLK
TLMP TECH
TRE1 TRET
TRCH TRHL
VASE VAZE

O resultado disso é que, se você quiser incluir gráficos personalizados do Iron Lich, você agora usará o novo sprite, LICH*, em vez de HEAD*. Se então você quiser incluir gráficos do Cacodemon, você pode adicionar com segurança gráficos HEAD* e não haverá conflitos.

Veja também