Registrarse

[ASM] Repuntear paletas de Tilesets a otro banco

Gold

Porrero a tiempo parcial
Miembro insignia
Bien, despues de estar de lleno en la beta de mi hack vuelvo con mas tutoriales, esta vez les traigo un tutorial muy util, el cual requiere de conocimientos minimos de ASM.

====================
Proposito del tutorial
====================

Al extender los tilesets nos alegramos al ver la cantidad de nuevos tiles disponibles, a veces se nos ocurre extender los 27 tilesets que el juego nos ofrece, pero una limitacion que encontramos es que en el banco 0x2 (de $8000 a $BFFFF) hay muy poco espacio donde repuntear las paletas, por lo cual se nos dificulta esto, el proposito de pasar a otro banco es para tener el espacio suficiente para extender todos los tilesets y que tengan una paleta correcta, asi que a empezar!

=====================
Herramientas a usar
=====================

• Gold Finger (o cualquier editor hex)
• Tileset Editor de Melash
• A- Point (o cualquier calculadora de punteros)

======================
¿Que Haremos?
======================

Modificar la rutina ASM que carga las paletas de los tilesets en la VRAM0 y VRAM1 respectivamente.

====================
Paso 1
====================
Buscaremos un banco libre en el cual pondremos la nueva rutina, yo la pondre en 0xA0000, ustedes pueden escoger donde ponerla. Ya ubicados en donde la pondremos vamos a copiar la rutina al ROM, la cual es:
Código:
Rutina extendida 1

21 A0 C3         ld   hl,C3A0
11 D9 CC         ld   de,CCD9
06 12               ld   b,12
0E 14               ld   c,14
7E                    ld   a,(hl)
E5                    push hl
CB 3F               srl  a
38 10                jr   c,4020
21 CF D0           ld   hl,D0CF
86                     add  (hl)
6F                      ld   l,a
FA D0 D0           ld   a,(D0D0)
CE 00                adc  a,00
67                      ld   h,a
7E                      ld   a,(hl)
E6 0F                and  a,0F
18 10                 jr   4030
21 CF D0            ld   hl,D0CF
86                      add  (hl)
6F                       ld   l,a
FA D0 D0            ld   a,(D0D0)
CE 00                 adc  a,00
67                      ld   h,a
7E                      ld   a,(hl)
CB 37                swap a
E6 0F                and  a,0F
E1                     pop  hl
12                     ld   (de),a
CB BE               res  7,(hl)
23                    inc  hl
13                    inc  de
0D                   dec  c
20 D1              jr   nz,400A
05                  dec  b
20 CC             jr   nz,4008
C9                 ret
Y justo donde termina la anterior rutina nos disponemos a copiar esta
Código:
21 20 CC         ld   hl,CC20
11 48 CC         ld   de,CC48
7E                   ld   a,(hl)
E5                   push hl
CB 3F              srl  a
38 10              jr   c,4059
21 CF D0        ld   hl,D0CF
86                  add  (hl)
6F                   ld   l,a
FA D0 D0        ld   a,(D0D0)
CE 00             adc  a,00
67                   ld   h,a
7E                   ld   a,(hl)
E6 0F              and  a,0F
18 10              jr   4069
21 CF D0         ld   hl,D0CF
86                   add  (hl)
6F                    ld   l,a
FA D0 D0         ld   a,(D0D0)
CE 00             adc  a,00
67                   ld   h,a
7E                   ld   a,(hl)
CB 37             swap a
E6 0F             and  a,0F
E1                  pop  hl
12                  ld   (de),a
CB BE            res  7,(hl)
23                 inc  hl
13                 inc  de
0D                 dec  c
20 D1            jr   nz,4043
C9                 ret
======================
Paso 2
======================

Ahora usando a-point sacaremos el puntero de las anteriores rutinas, ahora que tenemos el puntero nos iremos a las rutinas principales, y les modificaremos quedando asi:
Código:
 $D58

F0 9F F5  ret, p $F559
3E ZZ     ld a, zz
D7        rst, 10
CD XX YY  Call $YYXX
F1 D7     pop, af
C9        ret
Código:
$D64

F0 9F F5  ret, p $F559
3E ZZ     ld a, zz
D7        rst, 10
CD XX YY  Call $YYXX
F1 D7     pop, af
C9        ret
ahora despues de ubicarnos en la rutina de carga de tilesets y paletas en la VRAM (La primera esta en 0xD58 y la otra esta en 0xD64), y modiicaremos ambas rutinas, donde:

zz= banco donde pusimos la rutina nueva
yyxx= puntero de 2-bytes donde pusimos las rutinas nuevas.

Modificaremos ambas rutinas apuntando a la nueva rutina, guardamos y listo!

===================
Paso 3
===================

Ahora si todo quedo bien, abrimos nuestro ROM con el tileset editor, y al abrirlo notamos que ¡TODOS LOS TILESETS ESTAN EN BLANCO Y NEGRO!, ademas, ahora las paletas estan en el banco donde pusiste las rutinas. Ahora puedes reasignar las paletas una por una o copiarlas de un backup, siempre recordando que:
• Las paletas de un tileset normal pesan $30 bytes, mientras los tilesets extendidos pesan $70 bytes, asi que deja un espacio de $70 bytes entre paleta, asi podras extender todos los tilesets sin ningun problema.

Bien es todo, espero les sea de utilidad.
 

Chamber

Miembro insignia
Miembro insignia
Respuesta: [GBC][ASM]Repuntear Paletas de Tilesets a otro banco

Buen tutorial, algun dia lo pondre en practica ya que no tengo todos los tiles extendidos.

Como consejo puedo agregar que ese nuevo banco al que le asignes las palettas, copies las paletas anteriores en la misma ubicación para asi no tener que reasignarlas una por una.

Este tutorial lo vi hace mucho en Skeetendo, es el mismo o es diferente?
 
Arriba