Author Id: 13374 Author Name: Javi4315♪ Post Content: Vaya, Javi, me sorprende un nuevo tutorial tuyo en tan poco tiempo. Pero tengo dos importantes dudas que me corroen ¿Para qué sirve este nuevo manual tan interesante? ¿Y, sobre todo, qué te ha dado ahora para escribir los títulos en ese idioma que invade nuestro amado Gibraltar? Hola, querido yo mismo. Respondiendo a tus preguntas, esto es un sistema que diseñé para mi hack y que podéis ver si lo jugáis, se trata de un sistema que, dependiendo de la hora que sea, haya una determinada persona en la calle o no, o esté en una posición u otra. Sobre lo segundo, tiene más musicalidad (?) :P Teoría Vamos a ver. No podéis negarme que es raro si vais a hablar con una persona aleatoria a las 12:00 y esté en el mismo lugar y en el mismo sitio 10 horas después. Más si insertáis una sistema día/noche. Vas por la mañana y te dice: "¡Cómo brilla el Sol hoy!". Bien, pero es que vas en plena noche y te suelta lo mismo. Es raro. A parte, ¿Qué hace un señor todo el día en la calle? ¿No debería estar en casa a cierta hora? ¿No se ausenta del pueblo en ningún momento? ¿Para ir a la escuela? ¿Para ir a trabajar? Bueno, pues este sistema pretende que cada persona esté en un lugar determinado dependiendo de la hora. O que dependiendo de la hora diga una cosa u otra (o no). Un ejemplo de mi hack. En Ciudad Orquídea está el casino. Pero no puedes jugar sin fichas, igual que no puedes tener fichas sin un monedero. Pues el monedero te lo da un hombre. Ese hombre sólo aparece sentado en un banco por las noches (entre las 00:00 y las 4:00). Para conseguir el monedero, tienes que ir a hablar con él a esa hora, porque no aparece en ningún otro momento del día. Bueno, pues de eso se trata. Para entenderlo mejor Para el que no se haya enterado muy bien todavía, dejo la imagen de un mapa de mi hack y explico diferentes eventos: [IMG]http://imageshack.com/a/img62/5771/68zf.jpg[/IMG] 1. El chico con la gorra amarilla que está arriba sólo es visible a primeras horas de la noche. Está escondido, fumando. 2. El hombre gordo aparece 3 veces. Eso se debe a que aparece en 3 periodos del día distintos, en distintas zonas y habla sobre distintas cosas. El resto de las horas está en casa (igual que el de la gorra amarilla). 3. La mujer rubia sólo aparece por la tarde porque "le gusta ver el atardecer". 4. La pokéball que se encuentra detrás de la tienda sólo se puede alcanzar si el tendero se quita. Obviamente en determinados momentos del día, el tendero no estará y podremos acceder a la pokéball. 5. El policía aparece de noche y de madrugada para vigilar la zona de manera más intensa. El resto del día no hay presencia policial. Eso son algunos ejemplos. Se pueden hacer muchas cosas, a parte de estar hablando de un sistema mucho más realista. Real Time Clock (RTC) Para que los eventos funcionen dependiendo de la hora, debemos insertar el RTC al juego. Esto se puede hacer con [URL="http://memoryresources.de/DNS/DNS.zip"]la herramienta DNS[/URL], que también sirve para insertar el sistema día/noche. Se puede insertar el RTC sin necesidad de insertar el sistema día/noche, para el que quiera que siempre sea de día (que nunca lo entenderé xD). Pues nada, abrís la herramienta, cargáis el rom y le dais a "Insert RTC". ¿Cómo lo hago? Este es el script que yo uso en mi hack: #dynamic 0x800000 #org @comienzo copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x7 if 0x1 goto @1 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x8 if 0x1 goto @1 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x9 if 0x1 goto @1 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0xA if 0x1 goto @1 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0xB if 0x1 goto @2 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0xC if 0x1 goto @2 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0xD if 0x1 goto @2 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0xE if 0x1 goto @2 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0xF if 0x1 goto @3 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x10 if 0x1 goto @3 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x11 if 0x1 goto @3 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x12 if 0x1 goto @4 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x13 if 0x1 goto @4 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x14 if 0x1 goto @4 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x15 if 0x1 goto @4 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x16 if 0x1 goto @5 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x17 if 0x1 goto @5 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x0 if 0x1 goto @6 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x1 if 0x1 goto @6 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x2 if 0x1 goto @6 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x3 if 0x1 goto @6 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x4 if 0x1 goto @7 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x5 if 0x1 goto @7 copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x6 if 0x1 goto @7 end #org @1 clearflag 0x500 setflag 0x501 setflag 0x502 setflag 0x503 setflag 0x504 setflag 0x505 setflag 0x506 end #org @2 setflag 0x500 clearflag 0x501 setflag 0x502 setflag 0x503 setflag 0x504 setflag 0x505 setflag 0x506 end #org @3 setflag 0x500 setflag 0x501 clearflag 0x502 setflag 0x503 setflag 0x504 setflag 0x505 setflag 0x506 end #org @4 setflag 0x500 setflag 0x501 setflag 0x502 clearflag 0x503 setflag 0x504 setflag 0x505 setflag 0x506 end #org @5 setflag 0x500 setflag 0x501 setflag 0x502 setflag 0x503 clearflag 0x504 setflag 0x505 setflag 0x506 end #org @6 setflag 0x500 setflag 0x501 setflag 0x502 setflag 0x503 setflag 0x504 clearflag 0x505 setflag 0x506 end #org @7 setflag 0x500 setflag 0x501 setflag 0x502 setflag 0x503 setflag 0x504 setflag 0x505 clearflag 0x506 end copybyte 0x20370D0 0x3005542 compare LASTRESULT 0x(hora en hex) if 0x1 goto @(pointer) Lo que hace esto es copiar el byte de la ram que guarda la hora a otro byte de la ram vacío. De ese modo conseguimos guardarlo en LASTRESULT. Con el compare, comprobamos si es una determinada hora (en hex). Por último, si es esa hora, nos lleva a un pointer que queramos. Yo he divido el día en 7 partes, cada una representada por una flag. De esta manera, en cada uno de los punteros se activan todas las flags excepto una que se desactiva. Esta flag que se desactiva es la que representa ese periodo del día. Todos los minis que tengamos con otras flags, se supone que aparecen en otro momento, entonces, al estar la flag activada, desaparece. Sólo aparecerán los minis con la flag que desactivamos. Por supuesto, vosotros podéis partir más el día, o partirlo menos. Eso como queráis. Si vais a utilizar el script tal como está, estas son las flags y las horas: [quote]500 - 7:00 a 11:00 501 - 11:00 a 15:00 502 - 15:00 a 18:00 503 - 18:00 a 22:00 504 - 22:00 a 0:00 505 - 0:00 a 4:00 506 - 4:00 a 7:00[/quote] Por ejemplo, si le asignáis a un mini la flag 0x500, el mini aparecerá entre las 7:00 y las 11:00. Ahora vamos a implementarlo. Lo único que tenemos que hacer es poner un script de nivel de tipo 05 en todos los mapas que lo necesitemos. En principio, sobra con ponerlo en todos los mapas de pueblos, ciudades y rutas. En las casas y eso no tiene por qué ser necesario, pero también lo podéis poner si queréis, depende de vuestras necesidades. Obviamente, no hace falta que lo compiléis un montón de veces, con compilarlo una vez y poner en todos los mapas el script con el mismo offset es suficiente. Bueno, pues lo compilamos. Creamos el script de nivel tipo 05 en el mapa. Le asignamos el offset de nuestro script. Ahora guardamos y pulsamos ctrl+H para ver el cabezal en modo profesional. Vamos a "Map Script Offset" y copiamos el offset que nos da. Ahora vamos a XSE, ponemos el offset, marcamos la casilla de script de nivel (el último icono) y decompilamos. Ahora vemos si al principio del script hay algún "#raw 0xFFFF" y si lo hay, lo cambiamos a "#raw 0x0" y compilamos. Esto del "Map Script Offset" es porque a veces se produce ese error y no funcionan bien los scripts de nivel, así que se comprueban y, si todo está bien, hemos acabado.