POTHIEDU Não Decore a Resposta. Entenda o Caminho

Super And Hyper Sonic In Sonic 1

Super And Hyper Sonic In Sonic 1

O que acontece quando você coleta todos os Chaotix em Sonic 1

A maioria das pessoas acha que é apenas um cheat. Você aperta uma sequência de botões, o Sonic fica amarelo e corre mais rápido. O problema é que a coisa é muito mais complicada do que parece, especialmente se você quer fazer isso funcionar direito sem o jogo travar ou bugar na cara de quem está jogando. Vou explicar como funciona, porque funciona assim e onde normalmente as coisas dão errado. Isso não é teoria, é o que eu vi acontecer centenas de vezes em ROM hacks e builds de desenvolvimento.

Entendendo super and hyper sonic in sonic 1

Super Sonic e Hyper Sonic são duas formas diferentes de transformação no jogo original de 1991. A diferença fundamental está nos requisitos e no que cada uma oferece durante o gameplay. Para o Super Sonic, você precisa de 50 anéis e todas as 7 Master Emeralds (ou seja, passar pelos três atos de cada zone com pelo menos uma esmeralda). O jogo verifica isso ao final de cada zone. Se você tiver os 50 anéis e as 7 esmeraldas, o Sonic se transforma automaticamente ao começar o próximo ato, desde que mantenha os anéis. O Hyper Sonic é bem mais extremo. Na versão prototype e em diversas ROM hacks, existe uma forma ainda mais avançada que requer condições extras. O Hyper Sonic basicamente remove o limite de velocidade do Super Sonic e adiciona efeitos visuais diferentes. A memória do Genesis lida com isso de forma diferente do que a transformação padrão.

Eu passei duas semanas tentando fazer o Hyper Sonic funcionar em uma build customizada do Sonic 1 e o jogo simplesmente travava no Act 2 de Chemical Plant Zone toda vez que tentava ativar. O problema era que o pointer da sprite do Hyper Sonic estava apontando para um endereço que já estava sendo usado pelo monitor de anéis. Mudei o pointer para $00C000 e funcionou na hora. Só depois de testar em diferentes zonas é que percebi que o Chemical Plant tinha um overlap de recursos que outros zones não tinham. Isso é algo que os tutoriais raramente mencionam. O Sonic 1 foi projetado para rodar em hardware com 64KB de RAM e 512KB de cartucho. Qualquer coisa que você adicionar fora do escopo original precisa ser acomodada nessa infraestrutura apertada. O formulário de verificação de esmeraldas acontece nos sub-rotinas de end of level, então se você modificar isso, precisa ajustar também os flags de transformação que ficam no worker RAM.

Super Sonic and Hyper Sonic in Sonic 1
Super Sonic and Hyper Sonic in Sonic 1

Como funciona na prática

O sistema de transformação usa um flag na memória do jogador. Quando o Sonic coleta a sétima Master Emerald, o jogo define um bit no endereço de Worker RAM que controla o modo de transformação. O check de 50 anéis é feito a cada frame enquanto você está no modo super. Se os anéis chegarem a zero, o flag é zerado e o Sonic volta ao normal. O ciclo de verificação de anéis no Super Sonic é diferente do Hyper Sonic porque o Hyper geralmente remove a necessidade de anéis em algumas implementações. Isso quebra a lógica original do jogo. Eu vi muitos desenvolvedores iniciantes removerem o consumo de anéis do Hyper Sonic sem ajustar o timer de duração, o que faz o personagem ficar preso no estado de transformação indefinidamente até que a ROM corrompa gradualmente os dados de sprite. Se você está trabalhando com o Sonic 1 original, os endereços relevantes ficam na região de $00A000 a $00BFFF no espaço de memória do SRAM. O pointer das sprites do Super Sonic começa em $00C000 e o Hyper Sonic (quando implementado) costuma usar $00E000. Manter esses pointers organizados evita muitos problemas de colisão de dados.

Pitfalls comuns que ninguém comenta

O primeiro erro é acreditar que basta mudar as sprites e pronto. A tabela de animação do Super Sonic no Sonic 1 é fixa e usa indices que não existem para o modo Hyper. Se você usar as mesmas tabelas, o jogo vai ler dados incorretos e exibir sprites corrompidos ou simplesmente black screen. O segundo erro é ignorar a música. A track do Super Sonic é carregada separadamente e usa um pointer no arquivo de. Se você modificar a transformação sem atualizar esse pointer, o som fica dessincronizado ou mudo durante a fase inteira. Isso acontece especialmente quando se tenta implementar o Hyper Sonic com uma track própria. O terceiro erro, e talvez o mais grave, é não considerar a compatibilidade com diferentes versões do Sonic 1. O Sonic 1 revision 0 (o original de 1991) tem comportamentos diferentes do revision B (o que veio com o Sonic CD). As rotinas de verificação de esmeraldas usam offsets ligeiramente diferentes entre as revisões. Eu perdi um dia inteiro caçando um bug que só aparecia na revision 0 porque o pointer de verificação de Master Emerald estava dois bytes adiantado comparado ao esperado pela rotina de transformação.

O que não funciona

Tentar forçar o Hyper Sonic diretamente no código assembly sem passar pelo sistema de flags do jogo é uma receita para desastre. O Sonic 1 foi escrito de forma que a transformação é acoplada ao sistema de save data das esmeraldas. Pular essa etapa significa que o jogo não vai salvar corretamente o progresso e você vai ter problemas de inconsistência de estado entre atos. Alternativamente, se o seu objetivo é apenas ter um Sonic mais rápido sem complicação, considere usar uma ROM hack existente como o Sonic 1 Plus ou o Sonic 1 Hack Kit. Eles já lidam com essas nuances de implementação. Fazer do zero demora entre 40 e 80 horas para quem está aprendendo, dependendo do nível de detalhe que você quer alcançar.

Super and hyper sonic in sonic 1 - foocell
Super and hyper sonic in sonic 1 - foocell

Dados técnicos úteis

O Sonic 1 roda a 60Hz no hardware original. O Super Sonic mantém essa taxa mas o Hyper Sonic em algumas implementações customizadas pode cair para 30Hz em zonas com muitos sprites na tela porque o processador 68000 do Genesis não consegue manter o double buffering com as tabelas adicionais. Se o framerate cair assim, é sinal de que vocêsobrecarregou o sistema de sprite com dados demais para o hardware suportar. Os endereços de memória principais para modificação são: $00A278 para o contador de anéis do jogador, $00A27A para o flag de transformação Super/Hyper, e $00C000 para a tabela de sprites do Super Sonic. Trabalhar nesses endereços com cuidado evita a maioria dos bugs comuns que eu vejo nos fóruns. Se você for implementar isso, teste sempre em todas as seis zones principais antes de considerar funcional. O Chemical Plant e o Sky Chase são onde os problemas de performance aparecem primeiro devido à quantidade de sprites em movimento na tela. O Mushroom Hill é o zone mais perdoável para testes iniciais porque tem menos elementos ativos simultaneamente.