Registrarse

[ASM] Extendiendo los bloques sin extender los Tilesets

Gold

Porrero a tiempo parcial
Miembro insignia
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 ^^

Código:
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.
 
Última edición:

Chamber

Miembro insignia
Miembro insignia
Respuesta: [GBC][ASM]Extension de Bloques sin Extender Tilesets

Buen Aporte!!

Como dices es algo "inutil" si tenemos en cuenta que la extension de tileset lo hace todo, pero quizas le posamos hayar algun uso si es que permite usar el repunteo de Johto Map sin problemas. Lo has probado?

Esto es resultado de implementar la rutina "BOY/GIRL" de RED?
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: [GBC][ASM]Extension de Bloques sin Extender Tilesets

Buen Aporte!!

Como dices es algo "inutil" si tenemos en cuenta que la extension de tileset lo hace todo, pero quizas le posamos hayar algun uso si es que permite usar el repunteo de Johto Map sin problemas. Lo has probado?

Esto es resultado de implementar la rutina "BOY/GIRL" de RED?
Pues el problema de johtomap es que el creador nunca penso que podian expandirse los tilesets y bloques, para que pueda ser mostrado seria de modificar el codigo fuente de johtomap (es libre de modificarse)

Pues aplique la rutina a un rom limpio (al mio no porque ya tiene la extension de tiles) y no veo nada dañado, pero aun no he repunteado ni agregado ningun bloque extra.

Y pues la rutina no es la rutina ni el descubrimiento del siglo, pero igual es util si no se piensa extender tiles.
 
Respuesta: [GBC][ASM]Extension de Bloques sin Extender Tilesets

Hola tanto tiempo mi querido de múltiples nicks, hace tiempo que no estuve presente aquí y me encontré con esto, bueno la pregunta es, ¿En qué offsett se encuentra esta Rutina? Quiero probarla para ver si funciona poner más bloques y que no den error en el famoso emulador móvil "Meboy". Me seria de mucha ayuda en mi hack si es que esto me funcionará. Saludos! ^_^
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: [GBC][ASM]Extension de Bloques sin Extender Tilesets

Hola tanto tiempo mi querido de múltiples nicks, hace tiempo que no estuve presente aquí y me encontré con esto, bueno la pregunta es, ¿En qué offsett se encuentra esta Rutina? Quiero probarla para ver si funciona poner más bloques y que no den error en el famoso emulador móvil "Meboy". Me seria de mucha ayuda en mi hack si es que esto me funcionará. Saludos! ^_^
Crei que estabas desaparecido Maxi, bien te explicare, primero ve hasta abajo de la rutina, donde dice punteros de la rutina estan los punteros y sus offset, echale una mirada a ver en que banco se encuentra, por ejemplo si el puntero de la rutina esta en el banco 0x2, pues buscas espacio libre en ese banco, ahi pones la rutina extendida (ya te hice el favor de pasarla a Hex) tomas el puntero de 2-bytes de donde pusiste la rutina extendida, regresas al offset del puntero, y en donde esta yyxx pones el puntero de la rutina extendida, repite el proceso con las demas y estara listo!

Si no entendiste me avisas por privado y te hago un parche.

Por cierto, para que la rutina de extension de tiles funcione en meboy debes de reparar el ROM checksum y Header Checksum, para el primero usa hack-o-matic, y para el segundo solo se que se usa la consola.de windows y el comando "rgba", pero no estoy seguro al 100%.

Saludos!!!
 
Respuesta: [GBC][ASM]Extension de Bloques sin Extender Tilesets

Crei que estabas desaparecido Maxi, bien te explicare, primero ve hasta abajo de la rutina, donde dice punteros de la rutina estan los punteros y sus offset, echale una mirada a ver en que banco se encuentra, por ejemplo si el puntero de la rutina esta en el banco 0x2, pues buscas espacio libre en ese banco, ahi pones la rutina extendida (ya te hice el favor de pasarla a Hex) tomas el puntero de 2-bytes de donde pusiste la rutina extendida, regresas al offset del puntero, y en donde esta yyxx pones el puntero de la rutina extendida, repite el proceso con las demas y estara listo!

Si no entendiste me avisas por privado y te hago un parche.

Por cierto, para que la rutina de extension de tiles funcione en meboy debes de reparar el ROM checksum y Header Checksum, para el primero usa hack-o-matic, y para el segundo solo se que se usa la consola.de windows y el comando "rgba", pero no estoy seguro al 100%.

Saludos!!!
Osea que si hay solución para los tiles extendidos genial, si no me equivoco, eso mismo hicieron en el Hack Pokémon Chrome, el juego tiene tiles extendidos y funciona de maravilla en el Meboy, ahora pondré en practica tanto la rutina como el arreglo para el parche de extensión. :D Muchas Gracias mi fiel amigo, te deseo suerte en tu hack, ya que junto a Pokémon Revolution van a revolucionar los hacks de GBC. :blush:
 

Gold

Porrero a tiempo parcial
Miembro insignia
Respuesta: [GBC][ASM]Extension de Bloques sin Extender Tilesets

Exactamente es Rgbds lo que se usa para repararlo, aqui este mensaje de IIMarckus
IIMarckus dijo:
Well, having the right checksums in a tileset extension patch are kind of pointless because the point of such an extension is to edit other parts of the rom as well.

Regardless, rgbfix should be able to fix the checksums: with this version, “rgbfix -v foo.gbc”.
Es muuuy dificil, no lo he intentado pero parece funcionar.

Saludos!!!
 
Arriba