Com esta página eu vou tentar explicar como desenhar novos tiles nos jogos do Sonic 1 / 2 / 3 / K / 3K. Com está página eu vou tentar explicar como funciona a definição dos pisos nos Sonic para que você possa atribuir corretamente os índices.
Para cada indice existem 0x10 bytes resultando num total de 0x100 bytes. Você usa um byte para definir um piso em cada tile 16x16. No Sonic 2 Beta este indice está localizado no Offset 0x4ADC e cada byte representa um piso. Quando você configura um byte de definição o jogo automaticamente selecione um série de 0x10 bytes na definição principal. Os 0x10 bytes são bem fáceis de se entender como funcionam. Como exemplo abra um rom de Sonic 2 e vá até o Offset 0x42E80 (equivalente ao index de colisão 0x03) você verá os seguintes bytes:
03=>02 04 06 08 0A 0C 0E 10 10 10 10 10 10 10 10 10
Para você entender como funciona estes bytes eu criei uma tabela. A posição dos bytes representa o eixo X na tabela e os byte em si representa o eixo Y. Veja a tabela em branco logo abaixo

Colocando os bytes de acordo (03=>) com as posições coordenadas nós obteremos a tabela abaixo. O primeiro byte é 02 este byte está na primeira posição da lista ou seja eixo X=0 e Y=2.
(
| Sonic 2 Index 03(16x16) (0x42E80) |
![]() |
| 02 04 06 08 0A 0C 0E 10 10 10 10 10 10 10 10 10 |
|
Sonic 1 index 04 (16x16) => 0x62A40 |
|
|
| 00 FF FF FE FD FC FB FA F9 F8 F7 F6 F5 F4 F3 F1 |
Se você quiser fazer novos tiles e quiser saber o valor das definições de Sólido ou não Sólido poderá saber o valor dos indexes colocando os valores na tabela conforme explicado acima.
Sonic 1 / 1J -> 0x62A00
Sonic 2 -> 0x42E50
Sonic 3 ->0x706A0
Sonic & Knuckles -> 0x96100