Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP] [Script+Engine] Mi sistema de Día y Noche

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] [Script+Engine] Mi sistema de Día y Noche

Mensaje por Wecoc el 2015-08-23, 02:24

Supongo que todos sabéis qué es un sistema de Día y Noche. Básicamente, las horas van pasando y el tono de pantalla va cambiando según el momento del día.

Y básicamente hice ésto. Está pensado para que cada uno se lo monte como le salga, en otras palabras; No es para novatos.

No va con la hora del ordenador, siempre me pareció un poco molesto eso xD Va con contador normal y ya.

Durante el uso de menúes no avanza el tiempo. Lo hice así porque me era más fácil y porque así se ahorran bugs de cambio de tono de pantalla y esas cosas...
Tampoco funciona bien en batalla, el tiempo no avanza mientras estás en Scene_Battle. Es algo que solucionaré en algún momento, junto con lo que me pidáis (si me es posible agregarlo).

Funcionamiento

Hay varios scripts, los más importantes son el CORE y para el sistema Day&Night concretamente el Time Features.
Los demás se pueden disactivar y borrar, siempre que en las globales del CORE se especifique bien los que están y los que no.

Usa una variable para las horas y una para los minutos, definido su ID en Time Features.
TIME_SPEED es lo rápido que va el tiempo en pasar, y TIME_INCREASE cuantos minutos se suman a la vez.

Pulsando Control en modo $DEBUG el tiempo correrá más rápido.

Lo interesante es que en todos los sistemas de éste tipo cuando salen rayos de sol por ser de día, éstos siempre apuntan desde la misma dirección.
Monté el engine de ejemplo de modo que esos rayos van rotando de modo que a plena mañana están en un lado y por la tarde en el otro.
Además en el ejemplo la opacidad de la fog que representa que son las sombras de las nubes (001-Fog01) también se va recalculando según la hora del día.

Otra diferencia es que puedes definir la viewport de los eventos, el personaje y las pictures manualmente de modo que se puede hacer que las pictures de cielo o rayos o lo que sea queden por debajo de las ventanas, por ejemplo (en el caso de interiores), o aún más interesante: se pueden hacer eventos que no tengan el tono de pantalla, como farolas totalmente encendidas de noche y esas cosas. Ésto como comprenderéis es lo más chungo del script y requiere un Tilemap especial que soporte tono. Cualquiera sirve, en la demo puse el que uso yo, una adaptación del script de Poccil. Os sonará, es la que hice para autotiles más altos, con nuevos frames. Si no os interesa esa propiedad porque no queréis usar ninguna reescritura de Tilemap, id a la línea POCCIL_TILEMAP = true y ponéis false, y directamente quitáis el script de Tilemap.

Spoiler:
Recordad; siempre que modifiquéis la viewport de algún character o picture vía Llamar Script usad "refresh_spriteset" luego para que se actualice en el mapa. En la demo sale un fuego de ejemplo. Si cambiáis más de uno a la vez con un solo "refresh_spriteset" al final ya vale.

Como el script juega bastante con pictures cambiantes adjunté en la demo el script que hizo Eron hace tiempo sobre el soporte de Pictures. No lo requiere pero es recomendable tenerlo.

También añadí la opción de usar Planes como Pictures, e incluso RPG::Sprites (aunque eso no lo uso en la demo, pero bueno).

Finalmente añadí un script que hice hace tiempo y que es un fix de un bug interno relacionado con los procesos paralelos en el primer mapa del juego. Si no os interesa podéis quiarlo directamente.

Llamadas de script

WECOC_DN.time_on --> Activa el tiempo
WECOC_DN.time_off --> Desactiva el tiempo
WECOC_DN.clock_on --> Muestra el tiempo en pantalla (de momento no funciona)
WECOC_DN.clock_off --> No muestra el tiempo en pantalla (de momento no funciona)
WECOC_DN.active? --> Mira si el tiempo está activado
WECOC_DN.clock_enabled? --> Mira si se está mostrando el tiempo  (de momento no funciona)
WECOC_DN.hour --> Muestra la hora
WECOC_DN.min --> Muestra los minutos
WECOC_DM.total_min --> Muestra el total de minutos que han pasado ese día

WECOC_DM.distance(total_min) --> Muestra la distancia de tiempo (en minutos) que hay entre una hora concreta del día (puesta en minutos totales) y la actual
WECOC_DM.distance_h(hour) --> Muestra la distancia de tiempo (en minutos) que hay entre una hora concreta del día (puesta como hora) y la actual
WECOC_DM.prox_range(start_min, end_min) --> Si la hora actual no está dentro del rango de minutos totales vale 0, si no vale su aproximación al centro de ese rango (no se usa en la demo)
WECOC_DM.prox_range_h(start_h, end_h) --> Como el anterior pero escrito en formato hora (no se usa en la demo)

WECOC_DM.time_string --> Muestra la hora en formato string (por ejemplo 03:56)
WECOC_DM.time_between?(start_time, end_time) --> Mira si la hora actual está dentro de la franja horaria descrita. Se puede poner en formato hora o en formato string

WECOC_DM.am? --> Mira si la hora va de las 00:00 a las 12:00 (no se usa en la demo)
WECOC_DM.pm? --> Mira si la hora va de las 12:00 a las 00:00 (no se usa en la demo)

WECOC_DM.set_time(time) --> Define la hora actual. Se puede poner en formato hora o en formato string (no se usa en la demo)
WECOC_DM.advance(hour, min) --> Avanza cierto tiempo la hora actual. No funciona con valores negativos. (no se usa en la demo)

FAQ

P - ¿Se puede pasar a otros RPG maker?
R - No. Usa un script de Tilemap, que es de las cosas más concretas de cada RPG maker que hay. Y a parte de eso usa varias cosas que no son iguales entre los RPG maker, como Spriteset_Map, Interpreter y posiblemente también daría problemas el Weather.

P - ¿Cómo sé qué hora es?
R - La hora la puse en la variable 1 y los minutos en la variable 2 así que abre la ventana debug con F9 y mírala allí. Pronto haré un script de HUD para que se pueda ver en pantalla.

P - ¿A parte de la hora soporta clima, como días lluviosos o muy nublados o esas miérders?
R - No pero como el trascurso de los tonos del día está en un evento "sin más", ese tipo de cambios son fáciles de agregar vía engine.

P - ¿Se puede hacer que a parte de hora soporte estaciones/meses?
R - Es complicado. Limité el script a horas y minutos, ampliarlo a días, meses y años sería factible pero muy engorroso. Si es eso lo que estás buscando usad el ATES (Advanced Time and Environment System).

Screens

Aquí podéis ver cómo los rayos están en distinta posición según la hora del día. También se ve cómo va cambiando la opacidad de la fog, con máximo al mediodía.
https://2img.net/h/s7.postimg.cc/6rwp5u61n/screen_flechas.png

Registro de versiones

Spoiler:
ENG = Engine ; SCR = Script

Versión 1.0

ENG - Horas y minutos
ENG - $DEBUG -> Control para pasar el tiempo más rápido
ENG - Variable para flujo de tiempo
SCR - Control de ángulo y opacidad de pictures según tiempo virtual
SCR - Viewport modificable en eventos y pictures
SCR - Z modificable en pictures
SCR - Tono modificable ("desactivable") en eventos y pictures

SCR - No tiene opción de usar tiempo virtual.
ENG/SCR? - No funciona bien en batalla.


Versión 1.1

SCR - Pictures pueden ser Sprite, Plane o RPG::Sprite
SCR - Pictures (Plane) con "sx" y "sy"
ENG - Agregado tipo de pelo azul que te dice que si estás en $DEBUG pulses "Control" xD


Versión 1.2

SCR - Script reordenado completamente
SCR - Control de tiempo automáticamente por script y no por engine
SCR - Bugfix de checkeo de franjas horarias
ENG - Bugfix de la fórmula para la opacidad de la fog según la hora del día


Versión 1.3

SCR - z y fixed_tone en weather, panorama, fog y pictures
SCR - Soporte para display customizado en tilemap, weather, panorama, fog, y pictures
SCR - Ventana con la hora actual
SCR - Opción de usar hora virtual


Versión 1.4

SCR/ENG - Bug de Tilemap arreglado
SCR/ENG - Bug de Cambio de Mapa arreglado


Versión 1.5

SCR - Bug de discordancia al entrar y salir de batalla esquivado
SCR - Eventos multi-escena



Demo

DayNight System 1.5.zip

Hay dos mapas, cambiad la posición inicial del jugador para poder probar ámbos.


Última edición por Wecoc el 2015-09-02, 03:09, editado 5 veces
avatar
Wecoc
Administrador
Administrador



Créditos 12211

Gracias : 632

Volver arriba Ir abajo

RPG Maker XP Re: [XP] [Script+Engine] Mi sistema de Día y Noche

Mensaje por orochii el 2015-08-23, 02:55

Algo que se debe pensar implementar es el diferenciar entre interiores y exteriores. Supongo es algo que puede hacer cada quien, total los tonos de pantalla son por engine xd.

Y... pues, bueno, está guay que el conteo lo lleve el sistema por script xD. No sé, me parece es más confiable así. Pero también se podría terminar de implementar los tonos y eso en el script mismo. O quiza es que no he entendido qué exactamente hace el script y qué es hecho por engine xD... ajskldjalksdjlkasd.

Pero bueno pues buen aporte, tanto que hasta me dio un delirio de querer hacer un sistema de clima "orz (ya hice uno en Dreki que comoquefunciona, ¡no voy a hacer uno de estos de nuevo!).
avatar
orochii
Reportero

0/3

Créditos 7724

Gracias : 436

Volver arriba Ir abajo

RPG Maker XP Re: [XP] [Script+Engine] Mi sistema de Día y Noche

Mensaje por Wecoc el 2015-08-28, 23:11

Orochii, ya hay diferencia entre interior y exterior, la demo tiene ámbos. Y el conteo es por engine. El script lo único que hace es permitir cambios de ángulo, z y esas cosas a pictures y eventos para optimizar el engine. Así que el script es más útil que un sistema de día y noche, jeje.

Soporta cambios de viewport y todo; en la demo puse pictures en la @viewport1 con z = -200 para que quedaran debajo de la ventana, para "nubes cambiantes".

Resumiendo; lo de "Día y Noche" es el engine. El script es multi-usos.

-----------------------

Algunas cosas aún no son tan optimizables como quisiera, no se le puede cambiar la z, ni viewport a absolutamente todo, solo charas y pictures...
Y como dije falta que funcione bien en batalla.

Edito: Ya he comprobado que es compatible con el Heretic's Caterpillar, no tiene ningún problema con ese script. También es compatible con el SDK y el MACL.

Me mandaron la sugerencia de darle cierto "soporte" al script de Shadows (ese que aplica sombras a los scripts) según la dirección del Sol en ese momento. Ese script nunca me gustó mucho y hacer eso me complicaría bastante la parte de Engine, así que de momento lo siento pero debo descartar esa idea.

Por cierto si se os ocurre alguna forma mejor de obtener la hora o franjas horarias o cosas así vía script porfavor comentadlo.
También comentad si creéis que a éste sistema le falta algo imprescindible para un Día / Noche como es debido o si conocéis alguna propiedad de otro script de éste tipo que queráis en en mío.


Última edición por Wecoc el 2015-08-31, 18:18, editado 3 veces
avatar
Wecoc
Administrador
Administrador



Créditos 12211

Gracias : 632

Volver arriba Ir abajo

RPG Maker XP Re: [XP] [Script+Engine] Mi sistema de Día y Noche

Mensaje por Wecoc el 2015-08-30, 23:11

Actualizado a la versión 1.1 (29 Ago 2015)

No hay muchos cambios por ahora, lo nuevo es que ahora las pictures pueden definirse también como Plane con su "sx" y "sy", lo que las hace más similares a si fueran fogs. Lo uso en el interior para las nubes, que ahora se van moviendo un poco, horizontalmente. Y también pueden definirse como RPG::Sprite, aunque eso no lo uso en el sistema directamente.

Y estoy haciendo ya la versión 1.2 que será mucho mejor ;D

Actualizado a la versión 1.2 (31 Ago 2015)

El script fue totalmente reordenado y renombrado, ahora el conteo del tiempo va distinto, más relacionado con el script (tal y como comentó Orochii) y más similar a otros sistemas como el ATES. Aún así el engine en esencia es el mismo; los tonos, las pictures...

Otra cosa interesante de ese reordenamiento a parte que algunas partes son desactivables individualmente de un modo muy similar a como hice en el ACE WF, es que la parte que realmente es un sistema de Day&Night es el script llamado "Time Features" junto con el Engine. Todo lo demás se puede usar a parte sin problema.

Finalmente la última mejora notable en ésta versión es que la comprobación de si la hora actual está dentro de una franja horaria concreta se hace directamente con un método.

Cualquier idea, sugerencia, crítica y comentario serán bienvenidos.

Actualizado a la versión 1.3 (31 Ago 2015)

Ahora se puede controlar la z del weather, fog y panorama, y no solo eso sinó que también se puede desactivar su tono tal y como ya había hecho en eventos.
A parte de eso añadí el script Display, que es una adaptación de éste.
También añadí el script Time Hud, que muestra el tiempo en pantalla.
Y finalmente añadí la posibilidad de ir con el tiempo virtual. No era el plan pero fue tan sencillo que lo integré en la global VIRTUAL_TIME xD

Pero no todo son buenas notícias; sigue sin ir en Scene_Battle, lo cual será difícil de implementar (porque quisiera hacerlo del modo más compatible posible), y además detecté un bug con tone del Tilemap. Edito: El bug del tone del Tilemap era una tremenda tontería, disculpad xDD

Actualizado a la versión 1.4 (No publicado)

Arreglado el bug del Tilemap y otro al cambiar de un mapa a otro.


Última edición por Wecoc el 2015-09-02, 11:21, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 12211

Gracias : 632

Volver arriba Ir abajo

RPG Maker XP Re: [XP] [Script+Engine] Mi sistema de Día y Noche

Mensaje por Wecoc el 2015-09-02, 03:09

Actualizado a la versión 1.5 (2 Set 2015)

Lo de la batalla es demasiado difícil implementarlo del todo, porque incluso la transición entre la batalla y el mapa se ve rara por las fogs y pictures, ya que por ejemplo si entras en batalla a las 12:00 y sales a las 19:00, durante la transición aún está todo como cuando eran las 12:00... Además no puedo hacer ahí una gran modificación en la batalla, porque la gente usa batallas demasiado distintas entre ellas como para seguir sin causar demasiadas incompatibilidades. De momento el script es compatible con la mayoría, al menos la parte troncal, y así lo dejaré.

En resumen, lo que hice fue limitar con la global TIME_ONLY_IN_MAP que el tiempo funcione solo cuando estás en mapa. De ese modo si en vuestro proyecto queréis sí o sí que el tiempo vaya en mapa tendréis que ponerle false a esa global y el tiempo ya irá.

Además para no dejar ese punto tan suelto, creé una pequeña joya de script (xD) que permite a los eventos en proceso paralelo (y eventos comunes también) funcionar en escenas alternativas al Scene_Map.

Ejemplo: $game_map.events[1].define_scene('Scene_Battle') # --> Ahora a parte de en Scene_Map el evento funciona en Scene_Battle.
En Scene_Map sigue funcionando siempre, pero con una llamada de script en el mismo evento se pueden limitar ciertos comandos a solo una escena, por ejemplo:

Código:
> Condiciones y Efectos : Script: $scene.is_a?(Scene_Battle)
> > ' (hacer algo)
> FIN

Es complejo y para hacer cambios de tono en batalla según la hora habrá que pelear mucho (literalmente).

No sé qué más decir; si no encontráis ningún bug raro el script ya está en su versión definitiva.

El objetivo era lograr superar el Moonpearl's Daily Life, al menos en algunos aspectos, y creo que lo conseguí. Siguen siendo distintos, y el suyo es muy bueno, pero al menos espero haber ofrecido una buena alternativa.
avatar
Wecoc
Administrador
Administrador



Créditos 12211

Gracias : 632

Volver arriba Ir abajo

RPG Maker XP Re: [XP] [Script+Engine] Mi sistema de Día y Noche

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.