Registrarse
  • ¡Vuelven los concursos de mapas! ¿Quién será el mejor diseñador en esta ocasión? ¿Te ves capaz de demostrar todas tus habilidades en el mapeo, Invitado? ¡Inscríbete ya dándole al botón!

    El periodo de inscripción acaba el día 20 de septiembre.

[pokeemerald] Bloques triple capa

Jaizu

Decomp user
ESTE TUTORIAL ESTÁ DESACTUALIZADO, SEGUID EL COMENTARIO DE XIROS: ENLACE AQUÍ
¿No ves nada raro en esa imagen? Deja que abra Porymap y te enseñe un poco...
¿Ahora más claro no? Todos sabemos que a la hora de montar nuestro popio tileset solo tenemos dos capas de tiles por bloque. Hace mucho, una user llamada Sierra (antes conocida como diegoisawesome) hizo este maravilloso hack para binario. Obviamente, ahora que estamos en decomp, no nos vamos a quedar por detrás de binario, eso sería muy rústico para mi gusto.

Implementar esto es bastante sencillo, solo tenemos que ir al archivo src/field_camera.c y buscamos:
Código:
 static void DrawMetatile(s32 metatileLayerType, u16 *metatiles, u16 offset)
{
     switch (metatileLayerType)
     {
     case 2: // LAYER_TYPE_
         // Draw metatile's bottom layer to the bottom background layer.
         gBGTilemapBuffers3[offset] = metatiles[0];
         gBGTilemapBuffers3[offset + 1] = metatiles[1];
         gBGTilemapBuffers3[offset + 0x20] = metatiles[2];
         gBGTilemapBuffers3[offset + 0x21] = metatiles[3];
¿Veis donde pone case 2? Pues encima añadimos:
Código:
    case 3: // LAYER_TYPE_TRIPLE
        // Draw metatile's bottom layer to the bottom background layer.
        gBGTilemapBuffers3[offset] = metatiles[0];
        gBGTilemapBuffers3[offset + 1] = metatiles[1];
        gBGTilemapBuffers3[offset + 0x20] = metatiles[2];
        gBGTilemapBuffers3[offset + 0x21] = metatiles[3];

        // Draw metatile's top layer to the middle background layer.
        gBGTilemapBuffers1[offset] = metatiles[4];
        gBGTilemapBuffers1[offset + 1] = metatiles[5];
        gBGTilemapBuffers1[offset + 0x20] = metatiles[6];
        gBGTilemapBuffers1[offset + 0x21] = metatiles[7];
     
        // Draw next metatile's top layer to the top background layer
        gBGTilemapBuffers2[offset] = metatiles[12];
        gBGTilemapBuffers2[offset + 1] = metatiles[13];
        gBGTilemapBuffers2[offset + 0x20] = metatiles[14];
        gBGTilemapBuffers2[offset + 0x21] = metatiles[15];
        break;
¿Que no te ha quedado del todo claro? Pues aquí te dejo una imagen, lo que está en color verde es todo el código que tienes que añadir, sin agregar los + que hay al inicio de cada línea.


Y con eso ya tendríamos el hack en nuestro proyecto, sencillo.

Ahora viene la parte más tediosa o complicada... ¿Cómo lo inserto?
Pues, como dicen por aquí, tienes varias maneras; aunque yo recomiendo la más directa, que es buildear Porymap tu mismo editando el programa para que detecte la triple capa.

No creo que sea viable decirle a todo el mundo que se baje el código fuente de Porymap, lo editen y lo compilen, así que lo he hecho yo.

Descarga de Porymap 4.0 con soporte para bloques triple capa

Ahora que ya tenemos el código en nuestro proyecto y la herramienta adaptada vamos a implemetarlo.
Lo primero que tenemos que hacer es coger un bloque cualquiera con dos capas. Este bloque puede tener el Metatile Behavior que queráis, pero siempre estará por debajo de la tercera capa.
Y donde pone Layer Type, escogemos Triple - Bottom/Middle/Top, tal que así:


Ahora, en el bloque siguiente a ese pondremos la capa que queramos en la segunda parte del bloque, en total nos quedaría tal que así:

Aquí os dejo un ejemplo de cómo quedan en mi tileset dos bloques con triple capa.


Para mapear tenemos que seleccionar el bloque de la izquierda.
Y ale, todo listo, fácil.
 
Última edición:

Hoennwalker

Usuario de Bronce
me he dado cuenta de que muchas veces hace falta mezclar 3 tiles, o más bien gustaría mezclar 3 tiles. así que el tuto me parece bastante chulo y útil.

Pero no se programar así aún. :ROFLMAO:
 

Jaizu

Decomp user
Ah, pensaba que todo ese programa lo habías hecho tu y que lo estabas facilitando .
Oh sí, yo modifiqué el programa pero la parte de código que modifqué no es mía.
Igualmente no necesitas conocimientos de programación para seguir el tutorial, puedes descargarte el Porymap modificado en este foro mismo.
Si tienes dudas o algo crea un tema en dudas y te ayudaré.
 

InmortalKaktus

Ludiloco
Aportazo, gracias Jaizu <3.

Estaría bien que si en algún momento sale una nueva versión de Porymap de peso, actualices la build del de triple capa
 

Xiros

Miembro de honor
Miembro de honor
Excelente tutorial Jaizu!

Como comentario, yo acabo de agregar lo de triple capa siguiendo el tutorial de triple capa que está en la wiki de pokeemerald, y ahí se menciona que con porymap 4.3 o superior ya tiene integrado soportar triple capa, por lo que usar el porymap modificado ya no sería necesario. Únicamente tenes que modificar el archivo porymap.project.cfg dentro de tu proyecto de pokeemerald y poner cambiar enable_triple_layer_metatiles de 0 a 1 (es decir, enable_triple_layer_metatiles=1).
A su vez, se provee un script de python para corregir los tilesets existentes para soportar bien lo de triple capa, y algo de código adicional para que las puertas no se rompan y eso.

No se que tan necesario sea eso último que comenté (yo lo hice pero no investigué los efectos secundarios de no hacer esas cosas), pero al menos lo de que ya no es necesario modificar el código fuente de porymap estaría bueno que lo actualizaras en tu tutorial @Jaizu.

Ojalá hayan cada vez más aportes de este estilo!
 

Jaizu

Decomp user
Sí, lo suyo ahora es seguir el enlace de la wiki y usar el porymap oficial, pero como tampoco había interés en el foro pues ni me molesté en comentarlo, pero ahora actualizaré el tema, gracias Xiros.
 

Diego Mertens

Dartrix Joven
NADA NADA, RESUELTO XD
Gracias por el tutorial y el link al otro tuto. Es una buena característica para tener y creo que me va a ahorrar bastante espacio en los tileset...
 
Última edición:

Diego Mertens

Dartrix Joven
Pregunta
¿Se supone que aparezca "basura" a los costados de la pantalla al correr, o algunos tiles teniendo lineas negras cuando el jugador se mueve?
Quizá hice algún paso mal
 
Arriba