tuts_gbc
Thread Id: 26697
Thread Name: [GBC][ASM]Repuntear Paletas de Tilesets a otro banco
#0
G0LD_ZTHVARD0X! 27515
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: 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

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:

$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



$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.
#1
Chamber4315♪ 26330
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?