Esrael s2k (Portuguese)
From Sonic Retro
This historical hacking document is preserved here for archival purposes. It has not been revised since its original writing and may be outdated. |
(These are the original notes written by Esrael in Portuguese. For an English translation, see SCHG:Esrael s2k.)
Utilizando um editor de hexadecimal é possível modificar o jogo, editando-o byte a byte. Sabendo onde fica cada instrução e alterando-a corretamente você pode personalizar o jogo. Você pode desenhar outro personagem no lugar do Sonic mas isto não é fácil já que tem que se feito ponto a ponto. Alterar o nome das fases no menu de seleção e no titulo das fases. Mas para poder programar o jogo é necessário que ele esteja no formato binário, não é muito difícil converter o jogo para binário, você pode utilizar um programa de conversão ou o emulador Genecyst que tem a opção DUMP ROM, que faz a conversão.
Apesar do Sonic 2 & Knuckles ser apenas o Sonic 2 acoplado ao Sonic & Knuckles, este jogo pode ser considerado uma nova versão de Sonic 2, pois o jogo Sonic & Knuckles após identificar o cartucho Sonic 2 acoplado ativa uma memória que fica no fim dos dois jogos, sendo que esta memória contem basicamente todas as instruções do jogo do Sonic 2 & Knuckles, utilizando o cartucho do Sonic 2 apenas para os gráficos e mapas das fases, veja que neste manual você verá que as informações que são alteradas na maioria dos caso se encontra acima do endereço 0x300000 e poucas coisa ficaram entre os endereços 0x200000 á 0x2FFFFF que é onde o jogo do Sonic 2 está na memória ao ser acoplado ao Sonic & Knuckles, tendo em mãos as informações acima e mais no decorrer do documento talvez você concorde que podemos dizer que o jogo Sonic 2 & Knuckles pode ser considerado um novo jogo do Sonic 2 com o Knuckles.
Observe a tabela abaixo com as fases e com seus respectivos ids, estes ids são importantes pois o jogo utiliza estes ids para se referenciar a determinada fase.
FASE | ID |
---|---|
EMERALD HILL | 00 |
METROPOLIS | 04 |
METROPOLIS | 05 |
WING FORTRESS | 06 |
HILL TOP | 07 |
OIL OCEAN | 0A |
MYSTIC CAVE | 0B |
CASINO NIGHT | 0C |
CHEMICAL PLANT | 0D |
DEATH EGG | 0E |
AQUATIC RUIN | 0F |
SKY CHASE | 10 |
Note que alguns números são pulados como do 01, 03, 06 e 09. Apesar de não existir um nome de fase para estes ID's na relação e nem no menu de seleção de fases. Se você colocar estes ID's que estão faltando poderá acessar níveis perdidos (Faça a experiência e veja os resultados). Observe a tabela com a localização padrão das fases e logo em seguida uma explicação.
FASE | endereço |
---|---|
EMERALD HILL ACT 1 | 307906 e 307907 |
ACT 2 | 307908 e 307909 |
CHEMICAL PLANT ACT 1 | 30790A e 3079B |
ACT 2 | 30790C e 30790D |
AQUATIC RUIN ACT 1 | 30790E e 30790F |
ACT 2 | 307910 e 307911 |
CASINO NIGHT ACT 1 | 307912 e 307913 |
ACT 2 | 307914 e 307915 |
HILL TOP ACT 1 | 307916 e 307917 |
ACT 2 | 307918 e 307919 |
MYSTIC CAVE ACT 1 | 30791A e 30791B |
ACT 2 | 30791C e 30791D |
OIL OCEAN ACT 1 | 30791E e 30791F |
ACT 2 | 307920 e 307921 |
METROPOLIS ACT 1 | 307922 e 307923 |
ACT 2 | 307924 e 307925 |
ACT 3 | 307926 e 307927 |
SKY CHASE | 307928 e 307927 |
WING FORTRESS | 30792A e 30792B |
DEATH EGG | 30792C e 30792D |
A tabela acima indica onde estão localizados os bytes de configuração na tela de seleção de fases. O 1o. endereço da tabela indica o byte da zona e o 2o. endereço indica o byte de act. Exemplo no endereço 307916 você verá o byte 07 (Hill Top zone) e no endereço 307917 você verá o byte 00 (Act 1).
Contents
Musica Das Fases
ocê também pode escolher a música a ser tocada nas fases. O formato é de apenas um byte por fase e é muito simples. Para colocar outra música de sua preferência, toque os sons no sound test , anote o número da música e coloque no byte que representa a fase escolhida. Veja na tabela abaixo a localização da seleção de músicas. Observação: Ao modificar a música das fases some 80 ao número do Sound Test e coloque no local desejado, a tabela abaixo tem alguns exemplos de como os midis estão no Rom e como aparecem no Sound Test.
FASE | Música no Rom | Música no Sound Test | Endereço |
---|---|---|---|
EMERALD HILL | 82 | 02 | 30397C |
ID 01 | 82 | 02 | 30397D |
WOOD ZONE | 85 | 05 | 30397E |
ID 03 | 84 | 04 | 30397F |
METROPOLIS | 85 | 05 | 303980 |
METROPOLIS 3 | 85 | 05 | 303981 |
WIN FORTRESS | 8F | 0F | 303982 |
HILL TOP | 86 | 06 | 303983 |
HIDDEN PALACE | 90 | 10 | 303984 |
ID 09 | 8D | 0D | 303985 |
OIL OCEAN | 84 | 04 | 303986 |
MYSTIC CAVE | 8B | 0B | 303987 |
CASINO NIGHT | 89 | 09 | 303988 |
CHEMICAL PLANT | 8E | 0E | 303989 |
DEATH EGG | 8A | 0A | 30398A |
AQUATIC RUIN | 87 | 07 | 30398B |
SKY CHASE | 8D | 0D | 30398C |
Alterando Objetos
Você também pode alterar objetos nas fases como badnicks, vidas, obstáculos, etc... A configuração dos objetos nas fases utiliza 6 bytes longos, sendo no formato XX-XX-YY-YY-OO-VV. Explicando melhor os X's indicam a posição horizontal na tela, os Y's indicam a posição vertical na tela, os O's indicam os objetos a serem colocados e os V's indicam as variações possíveis de cada objeto. Para obter a localização exata do local onde você quer por os objetos, faça o código do debug mode e anote a primeira linha de coordenadas no local do SCORE, Estas serão as coordenadas que você deverá digitar para poder colocar o objeto no local desejado. Veja a localização onde o game busca os objetos das fases. Os níveis terminam o mapeamento antes dos bytes FF-FF-00-00-00-00. A partir destes bytes começa próximo nível.
EMERALD HILL ACT 1 | DF3FE |
ACT 2 | DF7B2 |
METROPOLIS ZONE ACT 1 | DFBD2 |
ACT 2 | E005E |
ACT 3 | E05A4 |
WING FORTRESS | E0C10 |
HILL TOP ACT 1 | E1018 |
ACT 2 | E1396 |
HIDDEN PALACE | 2E8C80 |
OIL OCEAN ACT 1 | E1A4A |
ACT 2 | E1F18 |
MYSTIC CAVE ACT 1 | E23DA |
ACT 2 | E26F2 |
CASINO NIGHT ACT 1 | 33F06E |
ACT 2 | 33F74C |
CHEMICAL PLANT ACT 1 | E2A88 |
ACT 2 | E2EFC |
DEATH EGG | 2EB230 |
AQUATIC RUIN ACT 1 | E34D8 |
ACT 2 | E398E |
SKY CHASE | 2EBBDE |
Inicio do Knuckles nas Fases
Nesta parte você pode definir em que ponto da tela o Knuckles começa. Para poder selecionar um local diferente do original. Utilize o modo debug. Vá para o local de onde você deseja iniciar e anote as coordenadas (primeira linha no local do Score), Tendo em mãos as coordenadas coloque-as no local da fase escolhida conforme no endereço da tabela abaixo.
FASE | LOCALIZAÇÃO | COORDENADAS |
---|---|---|
Emerald Hill 1 | 30A488 | 0060028F |
Emerald Hill 2 | 30A48C | 006002AF |
01-00 | 30A490 | 0060028F |
01-01 | 30A494 | 006002AF |
Wood 1 | 30A498 | 006001AC |
Wood 2 | 30A49C | 006001AC |
03-00 | 30A4A0 | 0060028F |
03-01 | 30A4A4 | 006002AF |
Metropolis 1 | 30A4A8 | 0060028C |
Metropolis 2 | 30A4AC | 006005EC |
Metropolis 3 | 30A4B0 | 0060020C |
05-01 | 30A4B4 | 006002AF |
Wing Fortress 1 | 30A4B8 | 006004CC |
Wing Fortress 2 | 30A4BC | 01E004CC |
Hill Top 1 | 30A4C0 | 006003EF |
Hill Top 2 | 30A4C4 | 006006AF |
Hidden Palace 1 | 30A4C8 | 023001AC |
Hidden Palace 2 | 30A4CC | 023001AC |
09-00 | 30A4D0 | 0060028F |
09-01 | 30A4D4 | 006002AF |
Oil Ocean 1 | 30A4D8 | 006006AC |
Oil Ocean 2 | 30A4DC | 0060056C |
Mystic Cave 1 | 30A4E0 | 006006AC |
Mystic Cave 2 | 30A4E4 | 06005AC |
Casino Night 1 | 30A4E8 | 006002AC |
Casino Night 2 | 30A4EC | 0060058C |
Chemical Plant 1 | 30A4F0 | 006001EC |
Chemical Plant 2 | 30A4F4 | 0060012C |
Death Egg 1 | 30A4F8 | 0060012D |
Death Egg 2 | 30A4FC | 0060012D |
Aquatic Ruin 1 | 30A500 | 0060037E |
Aquatic Ruin 2 | 30A504 | 0060037E |
Sky Chase 1 | 30A508 | 01200070 |
Sky Chase 2 | 30A50C | 01400070 |
Eventos
Nos jogos do Sonic, o Logo da Sega, A tela de titulo, as fases, os Especiais Estágios, etc.. são eventos diferentes e são chamados com diferentes codificações e você pode aciona-los simplesmente colocando os seus valores no local adequado, os números que você verá na tabela abaixo pertencem a codificação do jogo e estes números não pulam de 4 em 4 por acaso, Se você for até o endereço 0x3000A0 você verá vários números 6000xxxxx note que o próximo 6000xxxx tem uma distancia de 4 bytes do endereço 0x3000A0, o próximo 6000xxxx tem 8 bytes do endereço 0x3000A0 e assim por diante. Antes que você me pergunte: o que isto tem de importante ? - eu respondo: sabendo se o local de inicialização exato dos eventos você pode reprograma-los sem afetar o funcionamento do jogo. Veja na tabela abaixo os eventos e seus respectivos endereços de inicialização.
EVENTO | ID | INICIO |
---|---|---|
Sega Logo | 00 | 0x303310 |
Tela Titulo | 04 | 0x3034E8 |
Demo Mode | 08 | 0x3039A0 |
Jogo Normal | 0C | 0x3039A0 |
Special Stage | 10 | 0x304A0A |
Continue | 14 | 0x3072A6 |
Seleção de Fases | 18-1C | 0x3076C2 |
Seqüência do Final | 20 | 0x308008 |
Seleção de Fases | 24 | 0x3076C2 |
Códijo dos Jogos
Menu de Seleção de Fases
Nesta parte você conhecerá os códigos do jogo e como alterá-los, o código de acesso ao menu de seleção de fases é: cima, cima, cima, baixo, baixo, baixo, esquerda, direita, esquerda, direita. No rom este código esta armazenado no formato das teclas do jogo e você pode altera simplesmente colocando o valor da tecla correspondente. O código esta armazenado no endereço 0x3038E2 e você verá os seguintes bytes: -01-01-01-02-02-02-04-08-04-08-00-FF- onde: 01-é cima, 02 é baixo, 04 é esquerda, 08 é direita e 00-FF indicam fim do código, você pode modificar o código de acesso ao menu de seleção de fases porém o jogo só aceita codificação para as teclas direcionais, você deverá colocar os bytes 00-FF no final para indicar que o código terminou.
CÓDIGO | LOCALIZAÇÃO |
---|---|
Menu de Seleção de Fases | 0x3038E2 á 0x3038ED |
TECLAS | VALOR |
cima | 01 |
baixo | 02 |
esquerda | 04 |
direita | 08 |
Modo Debug e Super Knuckles
Os código a seguir são feitos após o ter sido acessado o menu de seleção de fases e são inseridos no Sound Test tocando as respectivas músicas. Estes são mais fáceis de alterar pois estão armazenados no Rom do mesmo modo que são digitados no Sound Test. A única diferença em relação ao código de acesso ao menu de seleção de fases é que você tem que digitar FF ao invés de 00-FF para indicar o termino do código. Veja na tabela abaixo os códigos e suas respectivas localizações.
Evento | Código | Localização |
---|---|---|
Modo Debug | 01-09-09-04-01-00-01-08 | 0x307C7A á 0x307C81 |
Todas as Esmeraldas (Super Knuckles) | 01-06-07-07-07-02-01-06 | 0x307C83 á 0x307C8A |
Curiosidades
Você verá os códigos do Sonic 2 sózinho, mas sem nehuma utilidade neste jogo, agora o curioso é que se estes códigos fossem utilizados o jogo não travaria na música Oil Ocean ao ser feito o código (01-01-02-04), pois se você observar no endereço 0x307C4C você verá os bytes 10-3C-00-BF e não10-3C-00-3F como ocorre no jogo do Sonic 2 e que ocasiona o travamento na música Oil Ocean, eu estou comentando isto porque a Sega não corrigiu este bug nem no Sonic Jam apesar de não travar na musica OIL OCEAN o SONIC JAM não toca o Som do continue que deveria ser tocado ao fazer o código 01-01-02-04. Muitos outros bugs que ocorrem no cartucho do Sonic 2 não ocorrem nesta versão, um exemplo simples é o bug do debug que quando você morre e tenta colocar um objeto na tela o jogo não coloca o objeto na tela enquanto você não sair do modo de edição e retornar, evitando-se assim que o jogo congele.
References