[Tutorial] Colorear los rom de GB Parte II (modo experto)

Moderadores: Kravenbcn, largeroliker, fidelcastro, cerealkiller, pspCaracas, dark_sasuke, m0skit0, LnD, ka69, zacky06

Responder
Avatar de Usuario
Mirlo_PJ
Enteradillo
Enteradillo
Mensajes: 45
Registrado: 14 Oct 2009, 19:52

[Tutorial] Colorear los rom de GB Parte II (modo experto)

Mensaje por Mirlo_PJ »

En los párrafos anteriores, hemos visto que en la sección [default], se crea una paleta de grises que se asocia a todas las celdas de forma predeterminada. Cuando se asocian varias gamas de colores a la misma ficha, siempre es el último que gana sobre los demás. Aquí, por ejemplo todos las celdas de entre 0 y 383 se convirtió en gris con el primer comando, pero el segundo no cambia el color de bloques de 128 a 131 en color azul. El resultado es que todos las celdas será gris, excepto las que existen entre 128 y 131 que se han redefinido más tarde. Esto puede ser muy útil en determinadas situaciones.

¿Como Conocer el nivel de juego actual?

Por el momento se ve bastante bien en el nivel 1, pero muy feo en otros. Ahora vamos a ver cómo podemos definir un nivel de configuración específica. En primer lugar, hay que saber que, a excepción de los habilitados en Super Game Boy, los juegos de Game Boy no fueron diseñados para ser coloreados en absoluto. Este hecho no tiene ninguna indicación del tipo "El nivel ha cambiado, los colores pueden ser diferentes ahora". De hecho, no sabemos en absoluto cuando el juego cambia de nivel. Si nos fijamos en el mapa de las celdas en VBA, y hacemos clic en él la opción de actualización automática, nos daremos cuenta de que las celdas son siempre idénticas para todo el nivel o el escenario actual (excepto los de animación, pero que más tarde hablaremos de ellos). Cuando entramos en otro nivel, por otra parte, en general, una gran cantidad de cambios en las celdas, sólo los elementos tan comunes como el personaje, el texto y algunos enemigos siguen siendo los mismas en la memoria de vídeo. Así, la solución que es identificar un nivel de acuerdo a lo que está en la memoria de vídeo.

Según el caso, podemos saber que la paleta cargar.
Con el fin de identificar el contenido de la memoria de vídeo, vamos a utilizar una forma sencilla de que tal vez ya se ha reunido para los archivos: la CRC. Un CRC (o Control de Redundancia Cíclica) da un número único de acuerdo a los datos contenidos en el archivo. Así, el CRC de dos archivos idénticos es también idéntico. Pero si un error en la transmisión se produce el valor es diferente, esto sería aunque sólo sea en un byte, el CRC será diferente también. El CRC hace posible estar seguro de que realmente estamos en la zona que estamos esperando. En el caso de la memoria de vídeo, podemos estar seguros de que estamos en un nivel específico, porque la memoria de vídeo será diferente en otro nivel y lo hará su CRC. Así que, básicamente vamos a definir una serie de paletas que se aplicarán de acuerdo a la CRC.

Para comenzar

Vimos a un problema anteriormente: algunos cuadros están animados y por lo tanto cambian en la mitad del nivel! Si tomamos en cuenta en el CRC, será diferente cada vez que estos cuadros cambien, y así tendríamos muchos casos que manejar. VBA permite elegir los cuadros mediante el CRC para resolver este problema. Para elegir los cuadros en el cada CRC que ha aplicado, intenta jugar a algunos niveles con VBA y mirar el visor de cuadros (con actualización automática activada), y encontrar algunos cuadros que cambian en cada nivel, pero no son animados. De hecho, basta con encontrar algunos cuadros que permiten, sin duda, determinar en qué nivel está, sin confusión posible.

Nota: En el caso de WarioLand, al igual que muchos juegos, podemos observar que varios cursos (etapas) utilizar los mismos gráficos. Por ejemplo, los que, por supuesto, 1 ("La playa") también se utilizan en curso 3. En este caso, es suficiente para detectar la decoración del tipo "playa" y el color, y todos los cursos que utilizan la misma decoración se podrán directamente colorear con la misma paleta también.
Si tomamos WarioLand, ya podemos decir que las celdas que enmarcadas en rojo son muy buenas candidatos, porque si se conoce el juego, usted también sabe que usted encuentra los gráficos sólo en este nivel, por lo tanto tienen muy pocas posibilidades de existir en la memoria de vídeo de los otros niveles. Ahora, nos queda comprobar que ninguno de ellas se anima (en este nivel, así como las otras). Lo mejor es que las celdas incluidas menos posible a cambios en la CRC (con el efecto de limitar los riesgos), pero sin embargo lo suficiente como para estar seguros de qué nivel estamos.
Imagen

Un pequeño control en otro nivel nos garantizará que realmente cambiado.

En el mejor de los casos, también podemos asegurarnos de que es posible distinguir el título de la pantalla, los créditos y mini-juegos, pero se requiere de muchas horas de juego! Pero normalmente no debería ser necesario. En el peor de los casos, si se incluye demasiadas celdas, siempre podrás cambiarlas más adelante, pero, lamentablemente, tendrá que volver a calcular todos los CRC, ya que dependerá del número de celdas! (Esto significa volver a jugar en todos los niveles, para indicárselo a VBA, como veremos más adelante) Por lo tanto, podemos introducir una cosa importante antes de empezar: Salvar en cada nivel a fin de poder volver más tarde . En el caso de WarioLand no es realmente necesario, gracias al mapa que permite explorar los niveles de cada nivel cuando queramos.

¿Cómo configurarlo?

Esto se hará en el archivo de comandos, con una modificación de los comandos que se copian en el principio:

Código: Seleccionar todo

# Inicialización 
Init:
# Las celdas que dependemos del CRC
ColorIt.addTileCrc 0, 383
# Para la depuración
ColorIt.autoShowVramCrc = true


Este código,es el que define las celdas que desea utilizar(como ya vimos anterior mente en el otro apartado) para calcular el CRC. De forma predeterminada, incluye a todos, de 0 a 383 (hay 384 fichas en el conjunto, la última de las cuales 255, es + el sentido de desplazamiento de 128, es decir, 383). La segunda línea, autoShowVramCrc, permiten activar el desplazamiento automático del CRC cuando cambia de escena. VBA considera que una escena termina cuando la pantalla se vuelve blanca, como en el momento de transición del logo de Nintendo a la pantalla de título, o de un nivel a otro. Es en este momento que posiblemente será necesario cambiar la paleta de colores.

Nota: pueden existir algunos juegos que el cambio de nivel no pasar por una pantalla blanca. En este caso, nunca verá el mensaje "Nueva VRAM CRC" en la parte inferior de la pantalla. Estos juegos son, lamentablemente, incompatibles con el sistema actual.

En el caso de WarioLand, utilizaremos los cuadros de 176 a 191. Esperemos que sea una buena elección. El código para definir los convierte en:

Código: Seleccionar todo

# Las celdas que dependemos para el CRC 
ColorIt.addTileCrc 176, 191


Usted puede agregar grupos de celdas en las diferentes zonas, poniendo varias líneas. Por ejemplo, para incluir los cuadros 1 y 2, 10 a 11 y de 20 a 50:

Código: Seleccionar todo

ColorIt.addTileCrc 1, 2 
ColorIt.addTileCrc 10, 11
ColorIt.addTileCrc 20, 50


La línea de autoShowVramCrc podría ser comentadas o borradas una vez que la coloración está finalizado, pero debemos dejar que mientras estamos trabajando en ello, ya que le permitirá conocer la CRC de las diferentes escenas del juego. Cuando vea este mensaje que aparece en la pantalla de título, por ejemplo, toma nota de la CRC asociada, por ejemplo:

Imagen


El resto es sencillo. En lugar de poner nuestro código de creación de paletas en la sección [default], pondremos en una sección que contiene el valor CRC entre llaves. Ejemplo:

Código: Seleccionar todo

# Título de pantalla 
[7d0f0982]:
... ... ... ... ...
END


He aquí un ejemplo de archivo que contiene todo lo que hemos visto en este manual:

Código: Seleccionar todo

# Inicialización 
Init:
# Las celdas que dependemos para el CRC
ColorIt.addTileCrc 176, 191
# Para la depuración
ColorIt.autoShowVramCrc = true
#Iniciamos aquí para establecer el perfil por defecto en la inicialización
[Default]:
# Crear una paleta de grises
ColorIt.setPalette 0, RGB (255,255,255), RGB (168,168,168), RGB (88,88,88), RGB (0,0,0)
# Por defecto, usamos la paleta de grises estándar para todo
ColorIt.addTileRule 0, 383, 0
END
# Título de pantalla
[7d0f0982]:
# Crear una paleta
ColorIt.setPalette 1, RGB (255,0,0), RGB (168,0,0), RGB (88,0,0), RGB (0,0,0)
# Asignamos algunas celdas de color con ella
ColorIt.addTileRule 128, 191, 1
ColorIt.addTileRule 1, 10, 1
END


Sugerencia: Tenga en cuenta que en este documento hemos aprendido a colorear los juegos con muchos detalles, pero en realidad podemos estar satisfechos con sólo la redefinición de la paleta n ° 0 para cada nivel: se asocia a todos los elementos de la decoración por defecto. Así, podemos definir 4 colores universales, exactamente como en Super Game Boy.

Código: Seleccionar todo

# Título de pantalla 
[7d0f0982]:
# Crear una paleta
ColorIt.setPalette 1, RGB (255,0,0), RGB (168,0,0), RGB (88,0,0), RGB (0,0,0)
# Asignamos algunas celdas de color con ella
ColorIt.addTileRule 128, 191, 1
ColorIt.addTileRule 1, 10, 1
END


Otra posibilidad es hacer común a todos los niveles en la sección por defecto. Por ejemplo, se ve que el personaje de Wario siempre utiliza el mismo número de azulejos, sea cual sea el nivel. Así pues, simplemente puede crear una paleta de color de estos cuadros y en la sección por defecto. Si alguna vez un nivel necesita algo diferente, siempre se puede especificar más tarde (recuerde que el efecto de los comandos es en cascada, en caso de conflicto, la última tiene la prioridad).

Redefinición de los gráficos
Puede ocurrir en algunos casos, te encuentras "bloqueado" porque no se puede encontrar en 4 colores perfectos para un mosaico. O quizás simplemente te gusta "personalizar" un poco los gráficos, añadir algo de estilo a estas piezas o renovar esta fuente común.

Básicamente, la redefinición de gráficos consiste en volver a dibujar un conjunto específico de celdas. Que posiblemente nos ayudará a resolver problemas importantes, ya que precisamente encontramos en WarioLand (¡qué casualidad!).
Así que volvamos a WarioLand.

Imagen


¿Ves estas monedas (rodeado en rojo)? Las encontramos en dos "versiones", que se utiliza cuando se encuentran en un fondo blanco y la otra cuando estén en un fondo gris.
Sobre un fondo blanco o gris

Imagen


Fácilmente podemos colorear la moneda en la zona blanca de la elección de colores, como blanco, amarillo, amarillo oscuro y negro.
Imagen
Por desgracia, es mucho menos evidente para cuando el fondo es gris! El tono "gris claro" se utiliza al mismo tiempo para el llenado de la moneda y el fondo (en los bordes). Esto es lo que obtendríamos si usamos la misma paleta como para la moneda en una zona en blanco:
Imagen

En el juego, es probable que (realmente no), quede muy bien:

Imagen


La única solución es, hacer de modo que el color usado para los bordes sea diferente a la de la imagen en sí misma. Una vez que mediante el uso de colores de color amarillo para el gris claro y azul para el de color gris oscuro, acabamos de conseguir lo que queremos. Entonces, ¿cómo volver a dibujar un bloque? Tomemos de nuevo el guión, y vemos lo que es necesario añadir (en el mismo lugar que por lo general).

Código: Seleccionar todo

#Creates a custom tile numbered 0 
ColorIt.setTilesetData 0, "ffffffff 00ff00ff ff00ff00 00000000"
#This cutom tile will replace the “true” tile n ° +211
ColorIt.setTile +211, 0


Los caracteres entre comillas son los datos de la imagen, utilizando el formato Game Boy. Este formato se explica en la sección de definiciones. Si tienes el valor suficiente para leerlo, es una buena idea utilizar porque es más corta.

Pero mientras tanto, vamos a ver el modo "simple". En este modo, se especifica mediante la adición al lado derecho del comando la “L” antes de las comillas, se definen así los píxeles de uno en uno, un representando los blancos el 0, 1 el gris claro, el 2 de color gris oscuro y 3 el negro. Un ejemplo:

Código: Seleccionar todo

ColorIt.setTilesetData 0, L "00000000 11111111 22222222 33333333 00000000 11111111 22222222 33333333"

Los píxeles se definen de izquierda a derecha, de arriba hasta abajo (separadas por un espacio). Este ejemplo da una ficha con toda una línea de primera (8 pixels) de color blanco (0), un segundo de gris claro, un tercero de color gris oscuro, y una última de negro, y esta razón se repite. El resultado es el siguiente:
Imagen

Vamos a hacer la primera celda, cada pixel está rodeado por un cuadrado de color rosa para verlo mejor:

Imagen


Nuestra primera línea (la de arriba) sólo se compone de píxeles grises oscuros, dando un primer grupo: 22222222. Para la segunda línea, que comienza con 6 píxeles de color gris oscuro, y luego 2 pixeles negro, dando un segundo grupo: 22222233. La tercera línea consiste en 4 píxeles de color gris oscuro, 2 píxeles de color negro y, finalmente, 2 píxeles de color blanco, dando 22223300. Y así sucesivamente, dando la siguiente serie de caracteres como resultado: "22222222 22222233 22223300 22230011 22301110 22301101 23011101 23011101".

Imagen


Quedando el código como el siguiente:

Código: Seleccionar todo

ColorIt.setTilesetData 0, L "22222222 22222233 22223300 22230011 22301110 22301101 23011101 23011101"


Se creará un azulejo personalizado número 0. A continuación, creará las celdas N ° 1, 2 y 3 para terminar la redefinición de esta moneda.

Código: Seleccionar todo

ColorIt.setTilesetData 1, L "22222222 33222222 01332222 11113222 31111322 13111322 13111132 13111132" 
ColorIt.setTilesetData 2, L "23011101 23011101 22301101 22301110 22230011 22223301 22222233 22222222"
ColorIt.setTilesetData 3, L "13111132 13111132 13111322 31111322 11113222 11332222 33222222 22222222"


Ahora sólo han de asociarse a las celdas ya existentes (a las que sustituirá). Tomamos las de las monedas (144 a 147):

Código: Seleccionar todo

ColorIt.SetTile +144, 0 
ColorIt.SetTile +145, 1
ColorIt.SetTile +146, 2
ColorIt.SetTile +147, 3


Tambien se puede reemplazar los comandos por uno solo:

Código: Seleccionar todo

ColorIt.SetTile 144, 147, 0 

MasterBoy le asignará una ficha personalizada a todos los cuadros de 144 a 147 para incrementar el número de azulejos personalizados (0, 1, 2, 3). Véase las definiciones para obtener más información.

Lo único que queda por hacer ahora es dar color a estas celdas de como se dijo antes:

Código: Seleccionar todo

ColorIt.setPalette 2, rgb(255,255,255), rgb(255,207,0), rgb(0,128,255), rgb(0,0,0) 
ColorIt.addTileRule +144, +147, 2


Y mágicamente, este es el resultado:



Casos Complicados o no manejables

Hay casos en que una celda específica tiene varios usos en el mismo nivel. Por ejemplo, un bloque gris claro se puede utilizar para el cielo, sino también para el llenado de la tierra, por ejemplo. Desafortunadamente, no hay posibilidad de distinguir entre ellos y la misma paleta se utilizará en todos los casos (porque es la misma ficha). En este caso, no existe una solución simple, es necesario encontrar colores neutros, apropiados para todos los objetos que lo utilicen. Afortunadamente estos casos son poco frecuentes, pero cuando colorean un fondo unificado, es mejor ser cautos y utilizar los colores más neutros, para evitar cualquier problema... (Por arriba, el ejemplo del fondo azul en WarioLand es una mala idea, y es probable que nos de problemas más adelante). Por experiencia, es mejor evitar las zonas de color blanco del cielo azul, por ejemplo, porque el blanco normal se usa mucho en los juegos de Game Boy, en general, y tiene un alto riesgo de conflicto.

Una vez terminado

Una vez que haya terminado su archivo de script, y quiere distribuirlo, puede cambiar el nombre para que coincida con el nombre de la ROM de Game Boy original. Después de eso, será suficiente para que cualquiera pueda poner en el directorio el Colorpak (en la raíz de la carpeta MasterBoy o VBA) que va a usar, sea cual sea el nombre del archivo de ROM (para SUPERMARIOLAND3 ejemplo es el nombre del la ROM internamente y MasterBoy o VBA lo encontrará, sin importar si el ROM es llamado WarioLand (UE) [!]. zip, WarioLand - Super Mario Land 3.zip o WarioLand.gb y así sucesivamente). Para obtener el nombre, simplemente abra el juego con VBA y valla a Archivo -- >información Rom
Cambie el nombre de archivo a SUPERMARIOLAND3.pal.ini y ponlo en Colorpak, así lo pondrán la gente que pruebe su coloración.

Fin

/---------------------------------------------------------------------/

DEFINICIONES

Aquí está el manual de los comandos que pueden ser utilizados. Un comando es una línea en el archivo de comandos que debe hacer una acción. La línea de siempre comienza con la descripción de lo que quiere hacer (es necesario conocer el nombre del comando correspondiente) y es seguido por los argumentos. Los argumentos son valores numéricos que hacen posible que el comando para saber qué hacer.

Este es un ejemplo típico de comando en Windows:
del archivo.txt
El comando del borra un archivo y pide un argumento: el nombre del archivo que desea borrar. Obviamente, del es inútil si no sabe qué archivo tiene que borrar, y es por eso que los argumentos son necesarios en casi todos los comandos. Algunas funciones pueden necesitar varios argumentos. En este caso, están separados por una coma.

ColorIt.SetPalette
Uso:
ColorIt.setPalette PalNo, palColor0, palColor1, palColor2, palColor3

Este comando define una paleta. PalNo es el número de paleta (entre 0 y 47), palColor0, palColor1, ... son los 4 colores de la paleta que desea definir. Con este comando, se puede reemplazar una paleta existente (por ejemplo, la paleta n ° 0 ya existía, pero quiere poner colores diferentes en él). Los colores se definen por un número de 24 bits, es decir, ya sea en decimal (0 a 16777215), hexadecimal (0x000000 a 0xFFFFFF) o en RGB, poniendo RGB (255, 128, 0), por ejemplo. Ver otros capítulos anteriores explicaciones adicionales en el sistema RGB.

ColorIt.AddTileRule
Uso:
ColorIt.addTileRule titleStart, tileEnd, palNo

Este comando define que la paleta a utilizar para una serie de celdas. El primer número es el número de la celda inicial y el segundo el número de la última celda. Estos números son, posiblemente, precedido por un carácter '+' para indicar que se encuentran en la segunda parte de la memoria de vídeo, es decir, con un desplazamiento de 128 cuadros desde el principio. El '+' se quiere seleccionar la zona segunda de la memoria de video 0x8800. No poner un '+' si se quiere seleccionar 0x8000 (las primeras 128 celdas).

ColorIt.AddTileCRC
Uso:
ColorIt.addTileCrc TileStart, tileEnd

Agrega un grupo específico de celdas para el cálculo del CRC. Ver arriba para las explicaciones.

ColorIt.SetTileData
Uso:
ColorIt.setTileData tileNo "Datos hexadecimales" o TileNo ColorIt.setTileData, L "manual"

Este comando crea un cuadro personalizado y define sus datos de imagen. TileNo: número de celdas personalizadas, entre 0 y 383.
  • En el primer caso, los datos de la imagen (puesto entre comillas) se expresa en hexadecimal. En formato RAW Game Boy la imagen se define como sigue:
    1 byte que representa el 8 píxeles (línea A) del plano 1 1 byte que representa el 8 píxeles del plano y 2 1 byte que representa los próximos 8 de píxeles del plano 1, etc.
    Un byte representa el 8 pixels en un byte, porque hay 8 bits, cada uno representando a si el pixel está encendido o no. Aquí están los resultados en función de si los bits están encendidos o no:
    Plano 1 de descuento, fuera de plano 2:
    Plano 1 en gris claro, fuera de plano 2:
    Plano 1 de descuento en blanco,
    en el plano 2: Plano 1 en gris oscuro,
    en el plano 2 : Negro
    Ej.(Este no lo tengo muy claro)
  • En el segundo caso, los datos de azulejos se definen pixel por pixel, de izquierda a derecha, por las líneas de 8 píxeles de arriba a abajo. Puede separar las líneas de un espacio para una mejor legibilidad. Cada píxel está definido por un número entre 0 y 3, 0 representa blanco, 1 gris claro, 2 gris oscuro y 3 el negro.
    Ej. “00000000 11111111 22222222 33333333 00000000 11111111 22222222 33333333” o “0000000011111111222222223333333300000000111111112222222233333333”

ColorIt.SetTile
Uso:
ColorIt.setTile newTileNo tileNo, o ColorIt.setTile TileStart, tileEnd, newTileNo

Asocia una celda personalizada a un cuadro o un grupo de cuadros. El cuadro personalizado debe haber sido creado con ColorIt.SetTileData.
Nota: si usted asocia ua celda a un grupo de cuadros, el número se incrementa con cada mosaico. Por ejemplo, si se define el número de celdas personalizadas 0 para los cuadros de 128 a 131, el azulejo 128 utilizará el número de azulejos personalizados 0, el azulejo 129 el número de azulejos personalizado 1, y así sucesivamente.

ColorIt.AutoShowVramCrc
Uso (habilitar):
ColorIt.autoShowVramCrc = true
Uso (deshabilitar):
ColorIt.autoShowVramCrc = false

Muestra el CRC en pantalla o lo deshabilita. Nos mostrara el CRC de cada nivel o pantalla.

End
Detiene la ejecución del programa. Este comando es necesario definir el final de cualquier código (o sección). Si tienes varias secciones, pero olvidas de poner fin entre ellos, MasterBoy seguirá ejecutando el código en la sección siguiente, y así sucesivamente, de arriba a abajo, hasta que se encuentra el final (o el final del archivo). Para prevenir problemas que puede aparecer por esto es, por tanto, verificar que no olvidaste la instrucción de cierre.

GO TO
Uso:
Goto seccion

Este comando transfiere la ejecución a otra sección de código.
Ej.
Instruction1
Goto Label
Instruction2
Label:
Instrucción 3
End

En este caso, instruction1 será ejecutado, a continuación, instruction3. Eso puede ser útil si se desea definir una sección de código común, que debe ser ejecutado en muchos casos, como colorear el personaje principal. Será suficiente para que hagas Goto “tu sección” después de terminar las instrucciones específicas para ese nivel o sección.
Nota: Si el nombre de la sección está rodeado por llaves, como [default], se debe incluir también en Goto.

:oki: FIN :oki:
Imagen

77claire77
Enteradillo
Enteradillo
Mensajes: 26
Registrado: 24 Oct 2009, 17:47

Re: [Tutorial] Colorear los rom de GB Parte II (modo experto)

Mensaje por 77claire77 »

buen post ;)

Avatar de Usuario
brujitosexy
Experto
Experto
Mensajes: 1097
Registrado: 03 Sep 2009, 19:30

Re: [Tutorial] Colorear los rom de GB Parte II (modo experto)

Mensaje por brujitosexy »

Wao :!:
Aunque es larguisimo el proceso, pero esta muy interesante.
:oki:
Linus Torvalds:
“El Software es como el sexo; es mejor cuando es gratis…”

Avatar de Usuario
largeroliker
Administrador
Administrador
Mensajes: 8283
Registrado: 03 Sep 2009, 09:46
PSN ID: larger0o
Gamertag Xbox Live: larger0o
Steam ID: larger0o
Twitter: larger0o
Ubicación: Málaga
Contactar:

Re: [Tutorial] Colorear los rom de GB Parte II (modo experto)

Mensaje por largeroliker »

Al desaparecer emuladores, tutorial movido a Tecnología-> Otros Mundos, aunque mantiene un link en Master Boy.

Saludos! ;)
Imagen
Steam Deck · Xbox Series X · PS5 · Switch · PS Vita · WiiU · PS3 · new 3DS XL · Xbox 360 · PSP · PS2

Responder