Hola a todos, el dia de hoy les traigo esta rutina ASM sencilla, la cual permite el uso de los 255 bloques disponibles para cada tileset, pero sin extender ni aplicar la extension de tilesets.
Lo posteo ya que puede ser útil, aunque personalmente prefiero la extension de tiles
Solo necesitas:
*Editor Hexadecimal
*Un Rom de Pokemon Oro y Plata
*Conocimiento medio-avanzado en el RH GBC
¿Como Trabaja?:
Mueve los datos de los bloques de cada tileset hacia la VRAM1 (La cual usualmente siempre esta libre) a modo de poder usar hasta 255 bloques (FF en hex) y no los 192 que trae por defecto el ROM, lo curioso es que esta rutina te deja listo para aplicar la rutina de extension de tiles.
Ya aplique la rutina¿Como uso los 255 bloques?:
Pues solo es cuestion de repuntear los datos de bloques y colission data a un banco vacio (apoyate en el tileset editor para ello) y ya podras usar los tiles nuevos ^^
Rutinas Extendidas:
Rutina de dibujo de tilesets en la VRAM1: [Carga el tileset en la VRAM 1]
3E 01 ld a,01 ; Fijar VRAM1
E0 4F ld (FF00+4F),a ; banco de VRAM;
21 C3 D0 ld hl,D0C3 ; Puntero del Tileset Normal en el ROM
7E ld a,(hl) ;
23 inc hl ;
46 ld b,(hl) ;
6F ld l,a ;
60 ld h,b ;
FA C2 D0 ld a,(D0C2) ; Banco del Tileset
11 00 90 ld de,9000 ; Cargar tileset a: 00:9000
CD F0 0A call 0AF0 ; Dscompresion de tileset
FA CE D0 ld a,(D0CE) ; Checkear el nuevo espacio del tileset
FE 00 cp 00 ;
28 11 jr z,(pc+h11) ; Si no es asi dar un salto o retroceso a:
21 CD D0 ld hl,D0CD ; Segundo Puntero del Tileset Normal
7E ld a,(hl) ;
23 inc hl ;
46 ld b,(hl) ;
6F ld l,a ;
60 ld h,b ;
FA C2 D0 ld a,(D0C2) ; Banco del Tileset Normal
11 00 88 ld de,8800 ; Cargar segundo banco de tileset a 01:8800
CD F0 0A call 0AF0 ; Descompresion del segundo tileset
3E 00 ld a,00 ; Fijar VRAM0
E0 4F ld (FF00+4F),a ;Banco de VRAM ;
C9 ret ;
Rutina De Carga de Paletas del mapa;
[Fija las paletas del mapa en la VRAM1]
C6 08 add a,08 ; Cambia las paletas de la VRAM0 hacia la VRAM1 añadiendo uj 8 para la lectura de paletas.
12 ld (de),a ; Cambio de bytes para cada banco (0-7 para la VRAM0 y 8-F para la VRAM1)
13 inc de ; 0 y 8 , 7 y F son las mismas paletas
0D dec c ;
C9 ret ;
Rutina de Animaciones : [Cambia los tiles animados hacia la VRAM1]
F5 push af ;
3E 01 ld a,01 ; fijar la VRAM1
E0 4F ld (FF00+4F),a ;vram bank ;
CD 03 04 Call 4003 ; Copiar tiles
AF xor a ; Fijar la VRAM0
E0 4F ld (FF00+4F),a ;Banco de Vram ;
F5 push af
C9 ret ;
Rutina de Techos: [Cambia los techos de las casas hacia la VRAM1]
F5 push af ;
3E 01 ld a,01 ; Fijar VRAM1
E0 4F ld (FF00+4F),a ;banco de la vram ;
CD 1A 31 Call 311A ; Copiar tiles
AF xor a ; fijar VRAM0
E0 4F ld (FF00+4F),a ;banco de la vram ;
F5 push af
C9 ret ;
Puedes poner cada call en cualquier parte del rom,
No importa si esta lejos de la rutina, pero mejor si se sigue este formato para no perderte
Adicionalmente Punteros de cada llamada (para llamar la rutina extendida)
00:2944 (&H2944)
21 xx xx ld hl,(Puntero de la rutina de dibujo de tiles en la VRAM1)
3E zz ld a,(Banco)
CF rst 08
00 nop
00 nop
00 nop
00 nop
00 nop
00 nop
00 nop
00 nop
00 nop
Punteros de Rutinas.
02:4046 y 02:4091 (&H8046 y &H8091)
CD xxxx call (Puntero de la rutina de carga de paletas, mantenerla en el banco 02 - hasta $7ff0!)
00:1635 (&H1635)
CD xxxx call (Puntero para rutina de carga de techos- mantener en el banco 3F!! )
07:401D (&H1C01D)
CD xxxx call (Puntero de rutina de carga de animaciones- mantener en el banco 07!! )
Al aplicarse la rutina pueden aparecer algunos tiles bugeados o aparecer tras abrir o cerrar el menu, para revertir ese daño solo ve a 0x3F8ED y escribe DF en esa offset, y como por arte de magia desaparecen los tiles bugeados!!!
u
Creditos a MeanMrMustard, por hallar la rutina, pero la rutina original era todo un caos por lo inentendible, asi que creditos a mi por ordenar y explicar de la mejor manera cada cambio de offset.
OJO: si no tienes experiencia en esto NO intentes aplicar esta rutina, solo perderas tiempo, y teniendo la extension de tiles hecha un parche comodo y sencillo no tiene logica aplicar esto, aunque puede servirte para aprender.