Registrarse

Implementación de tiles con nuevas paletas

Estado
Cerrado para nuevas respuestas.

Nidrax

SuicuneStalker
Hola a todos!

(disculpenme la falta de signos diacriticos, pero tengo teclado polaco y como soy muy vago, no me da gana de luchar con el charmap.exe para meter letras con tilde etc.)

Bueno, yo se que hay un montón de tutos sobre los tiles, pero como yo en el campo de romhacking soy mas denso que un agujero negro, necesito preguntarme todo eso.

La pregunta, en general, es sobre como correctamente meter graficos y paletas en el rom y despues repuntearlas para que sean disponibles en el AM y el juego.

Esque AdvanceMap tiene disponibles unas 11 paletas para los tiles y no se como ańadir mas paletas en vez de reemplazar las existentes.


Gracias por las respuestas
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
Cada... digamos "estructura de tileset" del ROM, lleva un pointer a una lista de paletas.
Es decir, hay un bloque de datos por ahí al que llamaremos cabezal de tileset. Ese cabezal tiene los siguientes elementos:
  • is_compressed: bool (una variable bool que dice si la imagen está comprimida o no)
  • tileset_type: byte (de ello dependerá el número de bloques)
  • 2 bytes 00
  • tileset_image_ptr: word (puntero, en little-endian, a la imagen)
  • palettes_ptr: word (puntero, en little-endian, a las paletas)
  • block_data_ptr: word (puntero, en little-endian, a los datos que definen los diferentes bloques de 4 tiles cada uno)

En little-endian significa lo que por estos lares se llama normalmente "permutado" (11223344 -> 44 33 22 11).
Obviamente, el que nos interesa es el palettes_ptr, que apunta, como he dicho, a una lista de paletas. No de 12, sino de 6 o 7.
Si no lo tengo mal entendido (y blue spider muestra bien las paletas, así que supongo que lo tengo bien entendido), en ruby, saphire y emerald hay 6 paletas para el tileset primario, y 7 para el secundario, y en FR y LG es al revés. Aún así, podemos imaginar que son 6 y 6 para simplificar.
Cada paleta ocupa 32 bytes, y están una detrás de otra en esa dirección (la que haya en palettes_ptr, pero que tu vas a cambiar a algo vacío).
Las puedes editar facilmente con APE, cargando primero palettes_ptr, luego palettes_ptr+32, luego palettes_ptr+64, etc.
Para editar el cabezal del tileset y poner tu nuevo palettes_ptr en su sitio, tus opciones son AM (quizás?), MEH (quizás?), un editor hex de toda la vida y la interfaz de linea de comandos de blue spider.
 

Nidrax

SuicuneStalker
Ammm. Bueno, lo que entendi, es que para cada tileset puedo tener definidas 13 paletas, de 32 bytes cada una, guardadas en una serie continua y poniendo el pointer a la primera paleta en la cabezal de tile. Lo pillo bien?

Parece bastante facil. Pues, gracias por resolver mi duda ;)
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
Ammm. Bueno, lo que entendi, es que para cada tileset puedo tener definidas 13 paletas, de 32 bytes cada una, guardadas en una serie continua y poniendo el pointer a la primera paleta en la cabezal de tile. Lo pillo bien?

Parece bastante facil. Pues, gracias por resolver mi duda ;)
Casi. No 13, sino 6 o 7 (o para simplificar, 6).
Sabes que cada tileset de bloques lee los tiles de dos subtilesets, llamados el tileset primario y el tileset secundario. Son 6 para el primario y otras 6 para el secundario.
 

Nidrax

SuicuneStalker
AAAAaaaa, vale, vale. De primero no cogi bien lo de tileset primario y secundario pero son simplemente los dos que se pone en el AM (x ejemplo el pueblo Paleta tiene como el tileset primario el de uso general con arboles, suelos, etc. y el secundario es de las casas con techo rojo, laoratorio, etc.) Es decir, para cada de ellos se les puede dar ~6 paletas, mediante el puntero en la cabezal de tileset.

Pero el puntero es uno solo en el tileset de bloques y las paletas las lee todas en serie, sip?
 

cosarara97

Dejad de cambiar de nick
Miembro de honor
AAAAaaaa, vale, vale. De primero no cogi bien lo de tileset primario y secundario pero son simplemente los dos que se pone en el AM (x ejemplo el pueblo Paleta tiene como el tileset primario el de uso general con arboles, suelos, etc. y el secundario es de las casas con techo rojo, laoratorio, etc.) Es decir, para cada de ellos se les puede dar ~6 paletas, mediante el puntero en la cabezal de tileset.

Pero el puntero es uno solo en el tileset de bloques y las paletas las lee todas en serie, sip?
Exactamente.
 
Estado
Cerrado para nuevas respuestas.
Arriba