Diagonal Mario - Diagonal Mario Sprites _ Diagonal mario sprites and extended – PYJPXH
Diagonal Mario Sprites _ Diagonal mario sprites and extended – PYJPXH

Diagonal Mario: como fazer sprite de movimento diagonal funcionar na prática

O conceito de diagonal mario aparece quando você tenta fazer sprites de Mario se moverem ou renderizarem em ângulos diagonais num jogo 2D clássico. A coisa mais simples é ter os frames direcionais (cima, baixo, esquerda, direita) e aí você precisa adicionar ou distorcer para os quatro diagonais. Se você já tentou isso num projeto próprio, sabe que o problema não é só desenhar os frames — é fazer a colisão e a física acompanharem.

diagonal mario na prática

A maneira mais comum de implementar é com um sistema de grid que calcula o vetor de movimento combinado. No meu caso, eu estava construindo um rom hack de Super Mario Bros. 1 e queria que o Mario pudesse andar na diagonal sem perder a animação correta. O problema que eu encontrei foi especificamente com a colisão horizontal versus vertical: quando o Mario se movia numa diagonal, a engine original do SMB checa colisão primeiro no eixo X e depois no eixo Y. Isso fazia com que o sprite "escorregasse" contra paredes de forma inconsistente, como se ele tivesse permissão para atravessar cantos em alguns frames e não tivesse em outros. O workaround que eu usei foi separar completamente a input do jogador da verificação de colisão. Eu li os botões do controle, calculei a velocidade diagonal usando raiz quadrada normalizada (para que a velocidade na diagonal não fosse maior que a velocidade cardinal), e então apliquei colisão em cada eixo individualmente com um pequeno "snap" de pixel na borda do tile. Basicamente, se o Mario ia colidir num canto, eu o reposicionava para o centro do tile vizinho em vez de deixá-lo preso. Isso eliminou o escorregamento e a aceleração estranha em diagonais.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Em termos de sprites, eu segui uma abordagem de 8 direções com 16 frames por direção, cada frame com 32x32 pixels. O tamanho é importante porque sprites muito pequenos ficam ilegíveis quando você começa a rotacionar ou interpolar. Se você não quer montar tudo do zero, existem kits de sprite diagonal mario disponíveis em repositórios de rom hacking que já vêm com os frames desenhados e mapeados corretamente para os endereços de ROM do NES. Uma coisa que ninguém menciona é que a CPU do NES tem limitações sérias de processamento gráfico. Quando você adiciona diagonais com interpolação de sprite, o número de operações por frame quase dobra. Eu vi jogos que rodavam a 60fps sem diagonais e caíam para 30fps intercalados quando eu ativava movimentação diagonal completa. A solução mais eficiente que encontrei foi usar apenas os dois diagonais principais (canto superior direito e inferior esquerdo) e tratar os outros dois como espelhamento horizontal dos primeiros. Isso cortou o custo de sprites pela metade sem impacto visual perceptível na maioria das situações.

Se você está começando agora, recomendo usar uma engine como nestopia ou FCEUX para testar, porque o debug de frames e colisão é muito mais simples do que rodar direto no hardware. Eu passei semanas tentando resolver um bug de sprite flickering que na verdade era causado pelo excesso de objetos na tela durante movimentos diagonais — algo que não acontecia nos movimentos cardinais simplesmente porque a sprite engine do NES lida de forma diferente com sobreposição. O link mais direto para quem quer baixar kits prontos de diagonal mario é o site do SMW Central ou o fórum do ROMhacking.net, onde há packs com sprites já convertidos para SMB1, SMB3 e super mario world. Alguns ainda exigem conversão de paleta, mas isso é coisa de dez minutos com ferramentas como YATAXE ou PPUCOLOR.