Fina ou clássica é decidido por 24 pixels, e você pode ver exatamente quais
Uma skin é fina se menos de 6 dos 24 pixels em (46,20)–(47,31) forem opacos. Além do mapa UV completo, por que skins legadas 64×32 são espelhadas, e por que as 128×128 da Rocha Matriz nunca carregarão no Java.
Nada em um PNG de skin diz "fina". Não há bandeira, metadados ou convenção de nome de arquivo — o modelo é inferido da própria imagem, observando um retângulo específico de 2 × 12 e contando quantos de seus pixels estão realmente lá.
O teste
sample x 46–47, y 20–31 — 2 wide, 12 tall = 24 pixels
count pixels with alpha > 0
slim if fewer than 6 are opaque
Braços clássicos têm 4 pixels de largura; braços finos têm 3. Uma skin fina, portanto, deixa a quarta coluna do braço vazia, e essa coluna é sobre a qual a amostra se encontra. Vinte e quatro pixels decidem qual modelo seu personagem usa.
O limite é 6 de 24, não 1 — um quarto da coluna precisa ser preenchido antes de ser contado como clássico. Essa tolerância importa: uma skin fina com alguns pixels dispersos na coluna morta ainda é lida como fina, o que é o desejado, porque esses pixels dispersos são quase sempre um acidente de edição, e não uma intenção.
Isso também significa que o modo de falha é silencioso. Se você desenhar uma skin clássica, mas usar apenas levemente a quarta coluna — um contorno fino, alguns pixels de sombreamento — você pode ficar abaixo de 6 e ser detectado automaticamente como fino, perdendo um pixel de largura do braço sem nada para explicar o porquê. Se uma skin sair com o modelo errado, essa coluna é o lugar para procurar.
O mapa UV, completo
Cada parte da skin é um retângulo fixo, e cada uma tem uma camada de sobreposição em outro lugar na folha:
| parte | base | sobreposição | deslocamento | tamanho |
|---|---|---|---|---|
| cabeça | (8, 8) | chapéu (40, 8) | 32 para a direita | 8 × 8 |
| corpo | (20, 20) | jaqueta (20, 36) | 16 para baixo | 8 × 12 |
| braço direito | (44, 20) | manga (44, 36) | 16 para baixo | 4 × 12 |
| perna direita | (4, 20) | calças (4, 36) | 16 para baixo | 4 × 12 |
| braço esquerdo | (36, 52) | manga (52, 52) | 16 para a direita | 4 × 12 |
| perna esquerda | (20, 52) | calças (4, 52) | 16 para a esquerda | 4 × 12 |
Cinco das seis sobreposições ficam exatamente 16 pixels de suas bases — mas não na mesma direção. As três partes originais vão 16 para baixo. O braço esquerdo e a perna esquerda, adicionados mais tarde e espremidos na metade inferior onde não havia espaço abaixo deles, vão 16 para os lados em vez disso — e em direções opostas um do outro.
O chapéu é o único que não está a 16 de distância: ele está 32 para a direita, na mesma linha da cabeça.
Então "a sobreposição está sob a base" é uma regra que vale para exatamente metade da folha. Copiar um retângulo base e deslocá-lo para baixo para encontrar sua sobreposição funciona para o corpo, braço direito e perna direita, e silenciosamente cai na parte errada para os outros três.
Em uma skin fina, cada retângulo de braço de 4 de largura é lido como 3 de largura em vez disso. Os retângulos não se movem; apenas a largura lida a partir deles muda.
O legado 64 × 32 não tem lado esquerdo algum
Uma skin pré-1.8 é 64 × 32 — a metade inferior da folha simplesmente não existe, que é onde o braço esquerdo e a perna esquerda vivem. Não há nada de onde desenhá-los.
A correção é o espelhamento: a perna direita (0, 16) é copiada para (16, 48) e o braço direito (40, 16) para (32, 48), ambos virados horizontalmente. É por isso que skins antigas são perfeitamente simétricas e as modernas não precisam ser — a assimetria é a única coisa que o formato 64 × 32 não consegue expressar, e qualquer skin antiga que você converter terá simetria imposta a ela, quer queira ou não.
O 128 × 128 da Rocha Matriz é um formato diferente, não um maior
O Java aceita 64 × 64 ou o legado 64 × 32. A Rocha Matriz aceita 128 × 128 e nada mais. O visualizador de nenhuma das edições pode exibir o arquivo da outra — esta não é uma diferença de resolução que escala, é um layout UV diferente em um tamanho diferente.
Isso é uma barreira intransponível, e não um inconveniente. Uma skin Java não "escala" para a Rocha Matriz, e uma skin da Rocha Matriz carregada em um visualizador Java não renderiza em metade do tamanho — ela é rejeitada. O editor nesta página trata os dois como compilações separadas exatamente por essa razão.