Registrarse

Sistema de Evolución de día y noche con DNS

Taiyo_Force

Taiyo Force
Hola de nuevo a todos, aquí estoy de regreso con mis dudas XD. Como bien saben, Pokémon Fire Red no posee un sistema de día y noche interno lo que complica la evolución de pokémon como Umbreon, y si se quiere añadir evoluciones por día o noche a otros pasa lo mismo.

El sistema DNS aunque permite el día y noche en fired red no hace directamente que se pueda evolucionar con el horario de la pc o celular.

¿Cuál es mi duda? ¿Se puede crear una rutina o alguna otra cosa para que el sistema de evolución de día y noche sea controlado por DNS? Y también, ¿existe forma de que ese sistema evolutivo no solo detecte día y noche sino separar en más fracciones un día y poder así incluir evoluciones como el Lycanroc crepuscular?
 

KiddKey

Fuck off!
Para no complicarte tanto puedes cambiar el sistema evolutivo a las piedras o de una forma más chapuza crear un item dia y noche XD

Te recomiendo cambiar a las piedras. Salu2
 

Taiyo_Force

Taiyo Force
Ya conocía ese método, y si pensaba usarlo si no quedaba otra solución, pero quería ver si era posible hacer algo como un rutina. Soy un poco ambicioso aunque no tenga mucho conocimiento, y siguiendo instrucciones se que puedo llegar lejos con lo que hago. Si no hay otra forma lo aré así con las piedras evolutivas, pero si existe y conoces la forma de cumplir mi idea original, por difícil que sea, me gustaría intentarlo.
 

Lunos

Enfrentando a La Organización
Miembro insignia
Hola de nuevo a todos, aquí estoy de regreso con mis dudas XD. Como bien saben, Pokémon Fire Red no posee un sistema de día y noche interno lo que complica la evolución de pokémon como Umbreon, y si se quiere añadir evoluciones por día o noche a otros pasa lo mismo.

El sistema DNS aunque permite el día y noche en fired red no hace directamente que se pueda evolucionar con el horario de la pc o celular.
¿Tú estás seguro de que estás usando Pokefirered?
Quiero decir, posteaste esto en la sección de dudas sobre los proyectos de decompilación de los juegos de GBA, pero no suena a que lo estés usando.

Hiroshi Sotomura, creador de Pokémon Rijon Adventures, porteó el reloj en tiempo real de Pokeemerald a Pokefirered.
Implementandolo, tú puedes hacer chequeos por tiempo del mismo modo en que se haria usando Pokeemerald.
Es decir que tú sin dudas puedes chequear por una franja de horario, que es como GF implementó las evoluciones por dia y noche en Pokémon RSE.
Game Freak lo que hace es comprobar si la hora actual está entre las 12:00 y las 23:59 para evolucionar de dia, y comprobar si está entre las 00:00 y las 11:59 para comprobar si es de noche.
¿Cuál es mi duda? ¿Se puede crear una rutina o alguna otra cosa para que el sistema de evolución de día y noche sea controlado por DNS?
No existe un "sistema de evolución".
La evolución dia/noche es un chequeo explicito dentro de una función de codigo que comprueba una condición y le da el valor de la especie evolucionada a una variable local.
Si el chequeo no se satisface, la variable queda en 0 y la función de codigo donde ocurre esto no hace nada como resultado.
Y también, ¿existe forma de que ese sistema evolutivo no solo detecte día y noche sino separar en más fracciones un día y poder así incluir evoluciones como el Lycanroc crepuscular?
Sí. Modificas los chequeos pertinentes y ya, es tan simple como eso.
En lugar de comprobar if (gLocalTime.hours >= 12 && gLocalTime.hours < 24 && friendship >= 220) para el dia y if (gLocalTime.hours >= 0 && gLocalTime.hours < 12 && friendship >= 220) para la noche, podrias hacer algo en plan:
if (gLocalTime.hours >= 4 && gLocalTime.hours < 9 && friendship >= 220) // Comprueba si es de dia y el Pokémon tiene 220 de amistad o más.
if (gLocalTime.hours >= 19 && gLocalTime.hours < 4 && friendship >= 220) // Comprueba si es de noche y el Pokémon tiene 220 de amistad o más.

En el caso de añadir una nueva evolución, pues tendrás que definirla en include/constants/pokemon.h, y escribir su codigo del mismo modo en que está escrito el codigo de cualquier otro tipo de evolución.
Ejemplo rapido:
Código:
            case EVO_FRIENDSHIP_DUSK:
                RtcCalcLocalTime();
                if (gLocalTime.hours >= 17 && gLocalTime.hours < 19 && friendship >= 220)
                    targetSpecies = gEvolutionTable[species][i].targetSpecies;
                break;
 

Taiyo_Force

Taiyo Force
¿Tú estás seguro de que estás usando Pokefirered?
Quiero decir, posteaste esto en la sección de dudas sobre los proyectos de decompilación de los juegos de GBA, pero no suena a que lo estés usando.

Hiroshi Sotomura, creador de Pokémon Rijon Adventures, porteó el reloj en tiempo real de Pokeemerald a Pokefirered.
Implementandolo, tú puedes hacer chequeos por tiempo del mismo modo en que se haria usando Pokeemerald.
Es decir que tú sin dudas puedes chequear por una franja de horario, que es como GF implementó las evoluciones por dia y noche en Pokémon RSE.
Game Freak lo que hace es comprobar si la hora actual está entre las 12:00 y las 23:59 para evolucionar de dia, y comprobar si está entre las 00:00 y las 11:59 para comprobar si es de noche.

No existe un "sistema de evolución".
La evolución dia/noche es un chequeo explicito dentro de una función de codigo que comprueba una condición y le da el valor de la especie evolucionada a una variable local.
Si el chequeo no se satisface, la variable queda en 0 y la función de codigo donde ocurre esto no hace nada como resultado.

Sí. Modificas los chequeos pertinentes y ya, es tan simple como eso.
En lugar de comprobar if (gLocalTime.hours >= 12 && gLocalTime.hours < 24 && friendship >= 220) para el dia y if (gLocalTime.hours >= 0 && gLocalTime.hours < 12 && friendship >= 220) para la noche, podrias hacer algo en plan:
if (gLocalTime.hours >= 4 && gLocalTime.hours < 9 && friendship >= 220) // Comprueba si es de dia y el Pokémon tiene 220 de amistad o más.
if (gLocalTime.hours >= 19 && gLocalTime.hours < 4 && friendship >= 220) // Comprueba si es de noche y el Pokémon tiene 220 de amistad o más.

En el caso de añadir una nueva evolución, pues tendrás que definirla en include/constants/pokemon.h, y escribir su codigo del mismo modo en que está escrito el codigo de cualquier otro tipo de evolución.
Ejemplo rapido:
Código:
            case EVO_FRIENDSHIP_DUSK:
                RtcCalcLocalTime();
                if (gLocalTime.hours >= 17 && gLocalTime.hours < 19 && friendship >= 220)
                    targetSpecies = gEvolutionTable[species][i].targetSpecies;
                break;
Muchas Gracias por la información, de verdad me es de gran utilidad para lo que quiero hacer. Con respecto a que hice la duda en esta sección, no lograba encontrar el sitio correcto para poner esta clase de dudas, entonces busque lo que más se pareciera a lo que intentaba preguntar, lo siento por la equivocación, es solo que me cuesta un poco ubicarme en dónde colocar correctamente lo que voy a poner. Te agradezco grandemente por tu ayuda (y por tenerle paciencia a este noob XD), aunque ya he programado en otros lenguajes soy un poco nuevo en la programación del room hacking, lo más avanzado que he hecho es incluir tipo hada (sin Mr. Doll steak, yo haciéndolo desde cero) e instalar rutinas ASM a la rom, así que si pudieras decirme como implemento el relog de tiempo real estaría mucho más agradecido.
 

Lunos

Enfrentando a La Organización
Miembro insignia
lo más avanzado que he hecho es incluir tipo hada (sin Mr. Doll steak, yo haciéndolo desde cero) e instalar rutinas ASM a la rom, así que si pudieras decirme como implemento el relog de tiempo real estaría mucho más agradecido.
Bueno, primero que nada, lo que acabas de decir implica que tú estás haciendo ROM Hacking por metodos binarios.
Tocará pedirle a un mod que mueve esto a la sección de Dudas sobre ROM Hacking Binario.

Ahora, yo sé que en ROM Hacking Binario hay al menos dos implementaciones del sistema de reloj en tiempo real.
Una se inyecta en la ROM mediante una herramienta, y la otra es una inyección de codigo.
Ambas implementaciones tienen sus ventajas y desventajas. Un conocido mio llamado Leon las describió en una vieja versión de su parche que yo aun conservo.
Versión de Shiny Quagsire:
-----------------------------------
Ventajas:
*El sistema de paletas cambiar progresivamente basado en el horario
*Luce más guapo
*La implementación en temas de codigo es más robusta

Desventajas:
*Puede causar errores menores en las paletas una vez cada tanto
*Puede causar errores con tiles personalizados, particularmente los del tileset 0/1
*Los efectos de clima donde se oscurece el cielo o donde ocurren efectos de rayos están rotos

-----------------------------------
Versión de Prime Dialga:
-----------------------------------
Ventajas:
*No genera problemas con tiles personalizados
*Puede ser modificado o removido por completo mediante la herramienta que se usó para insertarlo
*Compatible con un sistema de estaciones del año
*El clima parece funcionar correctamente en general

Desventajas:
*Colores más simples, con un matíz que puede ser un poco más molesto al ojo en mi opinión
*El cambio de color se aplica por encima de mugshots y otros sprites (podria ser una ventaja para ti)
Te tocará decidir a ti cual usar, y descubrir como implementarla, pero. La herramienta de Prime-Dialga deberia ser sencilla de usar, en principio.
Esta es una de las cosas que yo jamas hice en binario, y hace como 4 años me pasé a los decomps.
 
Última edición:

Taiyo_Force

Taiyo Force
Bueno, primero que nada, lo que acabas de decir implica que tú estás haciendo ROM Hacking por metodos binarios.
Tocará pedirle a un mod que mueve esto a la sección de Dudas sobre ROM Hacking Binario.

Ahora, yo sé que en ROM Hacking Binario hay al menos dos implementaciones del sistema de reloj en tiempo real.
Una se inyecta en la ROM mediante una herramienta, y la otra mediante una inyección de codigo.
Ambas implementaciones tienen sus ventajas y desvantajas. Un conocido mio llamado Leon las describió en una vieja versión de su parche que yo aun conservo.


Te tocará decidir a ti cual usar, y descubrir como implementarla, pero. La herramienta de Prime-Dialga deberia ser sencilla de usar, en principio.
Esta es una de las cosas que yo jamas hice en binario, y hace como 4 años me pasé a los decomps.
Entiendo, nuevamente, muchas gracias por la información.
 
Arriba