tuts_gbc
Thread Id: 24018
Thread Name: [GBC] Agregar Eventos
#0
Chamber4315♪ 26330



Antes de empezar hay que aclarar que la palabra “eventos” se refiere a las personas, warps (entradas y salidas), señalamientos y localización de scripts de gatillo, ya que se puede confundir propiamente con agregar nuevos scripts a un mapa y no es asi.

Cada mapa en el juego se compone de un Primary Mapheader, que de este a su vez se deriva un Secondary Mapheader. El Primary Mapheader o Cabezal Primario define el Tileset, el spriteset, la música, el tipo de mapa (exterior o interior) y la tabla de pesca, mientras que el Secondary Mapheader o Cabezal Secundario define la localización del mapa, su tamaño, los bordes, las conexiones de mapa y el Script Header y el Event Header. Nosotros en este tutorial nos enfocaremos plenamente al Event Header.

Como ya se dijo en un principio el Event Header controla los eventos que ocurren dentro de un mapa, tales como el número de personas, dato que es importante saber si uno quiere agregar nuevos personajes a un mapa sin eliminar los existentes. También podemos modificar los Warps, o lo que es lo mismo, las entradas y salidas del mapa, por si queremos hacer algún patio trasero en una casa o agregar una cámara extra a una cueva.

Para conocer el Map Header de un mapa sugiero que usen Megamap ya que cuenta con una pestaña dedicada únicamente a esta característica.

Para nuestro tutorial usaremos como ejemplo la planta baja de nuestra casa en New Bark Town, la cual se ve así junto a su Cabezal Secundario.



Como podremos notar, el mapa se compone de lo siguiente:



Lo que nos interesa del map header, es la localización de los eventos, por eso en nuestra calculadora de offsets (Apoint) vamos a convertir el pointer a offset usando el Byte del Bank y los 2-Bytes del Event. Por lo tanto 60895B se convierten a 0x181B89.

Abrimos nuestro Rom en esa dirección con nuestro editor Hex.



Para saber que significan cada uno de los datos seguiremos la siguiente estructura:

00 00 [Number of warps] [Warp data][Number of triggers] [Trigger data][Number of signposts] [Signpost data][Number of people] [People data]




■ Movement setting: numero de casillas que puede avanzar un sprite que se mueve.

■ Clock/Time setting:
Si el 1er. Byte <> FF, se trata de un ajuste de reloj.
Si el 1er. Byte = FF , se trata de un ajuste de tiempo.

■ Clock setting:
2do. Byte < Hora Actual < 1er.byte – El sprite permacera oculto mientras no sea la hora actual.

■ Time setting:
2do. byte debe sere 01, 02 o 04. 01 para mostrar por las mañanas, 02 para mostrar al medio dia y 04 para la noche.

Hay un maximo de 14 personas por mapa.

■ Color|Function setting:
Este Byte es un poco dificl dominarlo mediante hex, ya que se divide en 2 partes de 4 bits cada una.

Los primeros 4 bits definen el color:
00 = color estandard (de la tabla de Overworlds)
<> 00 = color de la paleta de sprites.

La segunda mitad de 4 bits determina la funcion:



■Range of sight setting: Cuando se trata de entrenadores, es el numero de casillas que te pueden ver para retarte a pelear.

■Flag setting: El primer byte define el flag que al estar activado hace que nuestro sprite desaparesca, muy util si queremos bloquear entradas o caminos hasta que cierto evento se cumpla. El segundo byte debe ser 06 o 07 para que funcione. FF FF si no queremos que el Sprite se esconda.[/SPOILER]


Una vez explicado cada uno de estos aspectos, procedemos a volver a nuestro editor Hexadecimal y comprobar los datos o simplemente saber hasta dónde es que vamos a copiar la información para repuntearla.

Comenzamos en 0x181B89 y después de los doble 00 (00 00) hay un 03 que indica el numero de warps y como cada warp se compone de 5 bytes avanzamos 15 espacios. Después nos encontramos con un 00 que pertenece a los Triggers, como no hay triggers en el mapa el juego interpreta que ahí terminan los datos, así que el siguiente byte es el de los Singpost. 04 es el número de Singpost y como cada uno se compone de 5-Bytes avanzamos 20 espacios. El siguiente byte es 04, curioso… se supone que solo hay 3 Sprites dentro de la planta baja de tu casa, pero si revisas bien, veras que hay dos sprites encimados, por eso el “04”. Como cada Persona se compone de 13-bytes, avanzamos 52 espacios y vemos que los datos terminan en 0x181BE5.

Seleccionamos y copiamos de 0x181B89 a 0x181BE5 y lo pegamos en un espacio en blanco dentro de ese mismo banco. En mi caso será en 0x182670. Escribimos el pointer de la nueva ubicación porque lo necesitaremos posteriormente = [607066]

Como esta nueva ubicación nos permite agregar más datos, comenzaremos agregando otro warp a manera de puerta trasera y otra persona, como una mascota o algo asi. Tengan mucho cuidado de que siempre que agregan nuevos eventos, tener seleccionado y copiado los eventos posteriores, es decir, si voy a agregar más warps, SELECCIONO y COPIO los Singpost, Triggers y People para que no se pierda información del mapa.

Esta puerta trasera estará entre la escalera y el televisor, por lo que su ubicación será 07 en X y 00 en Y, recordando que va primero el byte de la Y y que el primer espacio siempre se cuenta como “0”; Este Warp nos llevara al “Warp 0”, del mapa 0A 06 que corresponde al Mart de Violet City. Los datos a agregar son 00 07 00 0A 06

Es momento de definir a la mascota o persona. La “Picture” será la 86, la cual corresponde a un Gengar; lo pondremos en la silla inferior derecha, junto a mama, la cual esta localizada en 07 en X y 04 en Y, sin embargo recuerden que hay que sumarle 4 a cada byte e invertir el orden de X-Y por Y-X, por lo que quedaría como 08 0B. Como quiero que mire hacia abajo uso 06 en el “facing”. Para Movement uso 00 por que no quiero que se mueva, sin embargo, podemos usar 22 para que haga los movimientos de un pokemon. En Clock/Time setting uso FF FF. Para Color/Function uso 00. Como no es un entrenador con el cual haya que pelear, en Range of sight pongo 00. En Pointer tengo que elegir 2 bytes para el nuevo script, algo que al hablarle diga “Odish!” o algo similar, pero para este ejemplo usare AA AA. Ojo: recuerden que esto NO es un pointer real. En Flag ponemos FF. Al final los datos del personaje o la mascota quedan de la siguiente manera: 86 08 0B 06 00 FF FF 00 00 AA AA FF FF

Agregamos todo en la sección correspondiente, teniendo cuidado de no sobrescribir datos y siguiendo siempre la estructura que ya vimos. Recuerden siempre modificar el NUMERO de elementos.



Al final noten como los números rojos indican el número de elementos que cambiaron, mientras que los azules indican los nuevos datos agregados.

Guardamos cambios en nuestro Editor Hex y solo nos queda una cosa, decirle al Rom donde se encuntran nuestros nuevos datos, osea, repuntear.

Recordemos que el pointer de nuestra nueva dirección es [607066], por lo que escribiremos los últimos 2-bytes en el espacio correspondiente en Megamap y guardamos cambios.



Al final tendremos un resultado como este:




Al final hemos logrado modificar la cantidad de eventos en un mapa determinado, lo cual nos permite un sinfín de posibilidades, como abrir nuevos espacios en lugares cerrados, agregar eventos de pokemon legendarios en cuevas, agregar un NPC con script de MART en el centro pokemon para tener CP iguales a los de nuevas generaciones, tener scripts de gatillo donde antes no había, en fin, un montón de etcéteras.

Recuerden que los warps tienen que estar localizados en un tile que tenga la "collision data" de warp, de lo contrario no funcionara.

Espero el tutorial haya sido de su agrado, cualquier duda no duden en preguntar (valga la redundancia).

PD1: En el resultado final, tuve un error en los bordes gráficos. No me explico por que. He hecho este procedimiento fácil unas 20 veces y nunca me había pasado algo así. Cuando lleven a cabo este tutorial háganlo en un mapa diferente esperando que no suceda este fallo.

PD2: Volví a escribir el tutorial de noche, así que si ven errores de redacción o de ortografía avísenme por favor.

Saludos!!
#1
G0LD_ZTHVARD0X! 27515
Genial aporte!!!

Antes hacia este metodo con el de mateo, usando goldmap, pero este se ve mas completo, simplemente ss muy util, te invito a que sigas aportando con tutos como este
[Scroll=left]Saludos!!![/scroll]
#2
javcdark 15833
muy buen tutorial, bien explicado y todo pero yo prefiero usar jothomap, hace todo eso y sin sobreescribir datos :)
#3
Chamber4315♪ 26330
[MENTION=15833]javcdark[/MENTION]

Efectivamente, johtomap hace todo es sin sobreescribir datos, incluso nos ahorra mucho tiempo en la edicion. Lo unico que no hace es repuntear, eso tendriamos que hacerlo siempre manualmente o me equivoco?
#4
javcdark 15833
nope, de hecho si repuntea y si se vuelven a añadir mas eventos y el espacio ya no alcanza vuelve a repuntear


edito: el problema viene cuando se insertan los tiles extendidos, que da error al abrir las opciones para hacer esto, por lo cual se tendria que usar este metodo
#5
G0LD_ZTHVARD0X! 27515
Primero que nada les recuerdo que no hagan topic chat que no quiero sancionar, gracias
===================================================

Acabo de probar el metodo de repunteo de johtomap y lo resumire en lo siguiente:

1. Efectivamente repuntea datos, pero al igual que en skeetendo publican tutos de cosas para las que hay herramientas, es VITAL conocer este metodo, pues no me fio al 100% de las herramientas.

2. En este momento se me ocurrio un metodo de hacer esto con mapas de tileset extendido, con megamap abrimos el mapa y le cambiamos el tileset a uno que no este extendido, guardamos y nos pasamos a johtomap, agegamos el ow y listo, solo quedaria volver a cambiar el tileset al original del mapa.