Registrarse

[Script] GBA | Scripting | "Climas Dinámicos" [Ahora también influye la estación]

Dani_SR_17

¡Pokémon LionHeart!


Climas Dinámicos


Saludos Hackers de GBA, hoy traigo un nuevo script que como siempre es de libre uso con créditos, el script en cuestión es bastante sencillito, pero te permite tener mapas con climas dinámicos.

No veo necesario añadir imágenes, ni un vídeo que muestre el script porque espero que el script sea bastante claro, aun así no descarto subir un vídeo en un futuro.

Requisitos:
  • Saber usar Scripts de nivel, ya que debes poner el script en uno.
  • Tener introducido el DNS.
  • 2 Variables por cada mapa, y 1 variable dinámica.


El script debéis insertarlo como un script de nivel 05. Recomiendo este >>Manual<< de Javi

También como he dicho, debeís tener insertado el >>DNS<<, mas concrétamente la rutina de esta herramienta del "RTC".


Voy a poner 2 versiones del script.
  • Versión simple
  • Versión compleja




Versión simple

Como su propio nombre indica, es la versión más simple del script, esta forma simplemente guardará la última hora a la que entraste al mapa en una variable y el clima que hacía en otra, al volver a entrar comprobará si la hora a cambiado y en tal caso volverá a recalcular el clima.

Script Clima Dinámico Sencillo - Dani_SR_17

Código:
#dynamic 0x800000

' Este es un script para crear un clima dinámico en los mapas.
' Se necesitará una variable dinámica (solo 1 para todos los mapas, no 1 por cada mapa) y dos variable para cada mapa.
' En la variable 1 de cada mapa, se almacenará la última hora en la que entraste al mapa, si entrás a las 3pm, y después a las 4pm el clima podrá cambiar.
' En la variable 2 de cada mapa, se almacenará el clima que hacía en la última hora en la que entraste, en caso de que siga siendo la misma hora.

#org @start
copybyte 0x20370D0 0x3005542 'Vamos a revisar si ha cambiado la hora o no.
comparevars LASTRESULT 0x(Variable 1)
if 0x1 goto @Nada 'Si es la misma hora que la última vez que el script se ejecuto, no pasa nada.
goto   [MENTION=26827]Camb[/MENTION]ioDeClima

#org @Nada 'Sigue el clima anterior
compare 0x(Variable 2) 0x0
if 0x1 goto @Sol
compare 0x(Variable 2) 0x1
if 0x1 goto @Nublado 
compare 0x(Variable 2) 0x2
if 0x1 goto @Llueve

#org   [MENTION=26827]Camb[/MENTION]ioDeClima
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Sol 'Tienes un 60% de tener Sol.
compare 0x(Variable dinámica) 0x9
if 0x0 goto @Nublado 'Tienes un 30% de tener Nublado
goto @Llueve 'Tienes un 10% de tener Lluvia.

#org @Sol
setvar 0x(Variable 2) 0x0
setweather 0x0
nop
doweather
end

#org @Nublado 
setvar 0x(Variable 2) 0x1
setweather 0x0B
nop
doweather
end

#org @Llueve
setvar 0x(Variable 2) 0x2
setweather 0x3
nop
doweather
end



Versión compleja

Esta versión, funciona como la anterior, solo que esta tiene más factores a tener en cuenta y además usa las mismas variables.
La particularidad de esta versión, es que en función del clima anterior en el mapa variarán los % de futuros climas, traducio, que si a las 3pm hay tormenta es muy poco probable que a las 4pm haga un sol bestial.

Script Clima Dinámico Complejo - Dani_SR_17

Código:
#dynamic 0x800000

' Este es un script para crear un clima dinámico en los mapas.
' Se necesitará una variable dinámica (1 para todos los mapas, no 1 por cada mapa) y dos variable para cada mapa.
' En la variable 1 de cada mapa, se almacenará la última hora en la que entraste al mapa, si entrás a las 3pm, y después a las 4pm, el clima podrá cambiar.
' En la variable 2 de cada mapa, se almacenará el clima que hacía en la última hora en la que entraste, en caso de que siga siendo la misma hora.

' Esta es una versión un poco más compleja del script, según el clima anterior variarán los % de los siguientes climas.

#org @start
copybyte 0x20370D0 0x3005542 'Vamos a revisar si ha cambiado la hora o no.
comparevars LASTRESULT 0x(Variable 1)
if 0x1 goto @Nada
goto   [MENTION=26827]Camb[/MENTION]ioDeClima

#org @Nada 'Sigue el clima anterior
compare 0x(Variable 2) 0x0
if 0x1 goto @Sol
compare 0x(Variable 2) 0x1
if 0x1 goto @Nublado 
compare 0x(Variable 2) 0x2
if 0x1 goto @Llueve


#org   [MENTION=26827]Camb[/MENTION]ioDeClima 'En este caso, el script es más complejo, según el clima de la hora anterior, variarán los % para horas siguientes.
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
compare 0x(Variable 2) 0x0
if 0x1 goto @TeniamosSol
compare 0x(Variable 2) 0x1
if 0x1 goto @TeniamosNublado 
compare 0x(Variable 2) 0x2
if 0x1 goto @TeniamosLlueve


#org @TeniamosSol
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x8
if 0x0 goto @Sol 'Tienes un 80% de tener Sol.
goto @Nublado 'Tienes un 20% de tener Nublado

#org @TeniamosNublado
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x3
if 0x0 goto @Sol 'Tienes un 30% de tener Sol.
compare 0x(Variable dinámica) 0x7
if 0x0 goto @Nublado 'Tienes un 40% de tener Nublado.
goto @Llueve 'Tienes un 30% de tener Llueve.

#org @TeniamosLlueve
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Llueve 'Tienes un 60% de tener Llueve.
goto @Nublado 'Tienes un 40% de tener Nublado.



#org @Sol
setvar 0x(Variable 2) 0x0
setweather 0x0
nop
doweather
end

#org @Nublado 
setvar 0x(Variable 2) 0x1
setweather 0x0B
nop
doweather
end

#org @Llueve
setvar 0x(Variable 2) 0x2
setweather 0x3
nop
doweather
end


Actualización del post
Sistema de Estaciones añadido

Como dije, he mejorado los scripts, ahora son compatibles con las Estaciones del DNS, evidentemente, requiere tener insertada la rutina de las Estaciones de DNS.

Para entender mejor el script recomiendo leer este >>tutorial<< de @Javi4315♪



Tengo que aclarar, que como podréis ver, hay 3 scripts, el primero como explico más abajo es opcional.

También, si veis que los climas son los mismos para todas las estaciones, aunque tengo notas en los scripts que explican el motivo, lo aclaro aquí, como es una base y vais a cambiar lo % y los climas seguramente, he puesto los que ya tenia más que nada porque si los vais a cambiar es inútil pegarme el curo de cambiarlos.



Script cambio de Estación

Ahora tengo que explicar una cosa, este fragmento, debéis insertarlo en el script solo si queréis que al cambiar de estación el cambio de clima pueda ser brusco, me explico, si no lo ponéis y el último día de Otoño tenéis Sol, al comenzar el Invierno tendréis Sol (en principio), mientras que si lo ponéis es más probable de que cambie.

Script cambio de Estación - Dani_SR_17

Código:
' Este script es por si lo queréis añadir al del clima con estaciones, aahora explico como añadirlo.

' Lo primero, necesitamos una 3º Variable, en este caso solo 1 para todos los mapas, voy a llamarla (Variable 3)
' Después, en cada "@(Estación)", por ejemplo, @Verano, debéis poner un "setvar 0x(Variable 3) 0x(Nº Estación)", los Nº de las estaciones son: Verano -> 0, Otoño -> 1, Invierno -> 2, Primavera -> 3.
' Y ahora, debéis añadir esto, nada más comenzar, antes del "@Start".

#org @MirarEstación
copybyte 0x20370D0 0x203C001
comparevars LASTRESULT 0x(Variable 3) 'Vamos a ver si estamos en la misma estación.
if 0x1 goto @Start 'Si lo estamos, el script del clima comienza normalmente, mirando si ha cambiado la hora y tal.
goto @Estaciones 'Si es una nueva estación, pasamos directamente a ver en que estacción estamos, para un nuevo clima.


Versión simple con Estaciones

Ahora le toca a la versión simple del script, pero con la influencia de las estaciones.

Script Clima Dinámico Sencillo con Estaciones - Dani_SR_17

Código:
#dynamic 0x800000

' Este es un script para crear un clima dinámico en los mapas.
' Se necesitará una variable dinámica (solo 1 para todos los mapas, no 1 por cada mapa) y dos variable para cada mapa.
' En la variable 1 de cada mapa, se almacenará la última hora en la que entraste al mapa, si entrás a las 3pm, y después a las 4pm el clima podrá cambiar.
' En la variable 2 de cada mapa, se almacenará el clima que hacía en la última hora en la que entraste, en caso de que siga siendo la misma hora.

' Esta es una versión mejorada del script sencillo, compatible con las estaciones del DNS.
' Voy a poner las 4 estaciones con los mismos climas, porque es algo muy personal lo que queráis poner, así que los % y los climas los ponéis vosotros.
' ¿Por qué no guardo la estación en una Variable? Pues muy sencillo, se puede hacer que si se cambia de estación (lo pondré a parte aun así), cambié el clima, pero es gastar una variable más para algo que no es necesario, porque aunque se cambié de estación de golpe el clima no tiene por qué cambiar.

#org @Start
copybyte 0x20370D0 0x3005542 'Vamos a revisar si ha cambiado la hora o no.
comparevars LASTRESULT 0x(Variable 1)
if 0x1 goto @Nada 'Si es la misma hora que la última vez que el script se ejecuto, no pasa nada.
goto @Estaciones

#org @Nada 'Sigue el clima anterior
compare 0x(Variable 2) 0x0
if 0x1 goto @Sol
compare 0x(Variable 2) 0x1
if 0x1 goto @Nublado 
compare 0x(Variable 2) 0x2
if 0x1 goto @Llueve

#org @Estaciones
copybyte 0x20370D0 0x203C001
compare LASTRESULT 0x0 'Si estamos en Verano.
if 0x1 goto @Verano
copybyte 0x20370D0 0x203C001
compare LASTRESULT 0x1 'Si estamos en Otoño.
if 0x1 goto @Otoño
copybyte 0x20370D0 0x203C001
compare LASTRESULT 0x2 'Si estamos en Primavera.
if 0x1 goto @Invierno
goto @Primavera 'Aquí nos ahorramos la comparación, porque si lleguamos aquí es porque es Primavera.


' Ahora solo debemos hacer el script para cada estación, en este caso como es un script "base", no voy a ponerme a cambiar climas ni nada, de eso ya os encargais vosotros.


'--------------------------------- Verano ---------------------------------

#org @Verano
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Sol 'Tienes un 60% de tener Sol.
compare 0x(Variable dinámica) 0x9
if 0x0 goto @Nublado 'Tienes un 30% de tener Nublado
goto @Llueve 'Tienes un 10% de tener Lluvia.


'--------------------------------- Otoño ---------------------------------

#org @Otoño
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Sol 'Tienes un 60% de tener Sol.
compare 0x(Variable dinámica) 0x9
if 0x0 goto @Nublado 'Tienes un 30% de tener Nublado
goto @Llueve 'Tienes un 10% de tener Lluvia.


'--------------------------------- Invierno ---------------------------------

#org @Invierno
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Sol 'Tienes un 60% de tener Sol.
compare 0x(Variable dinámica) 0x9
if 0x0 goto @Nublado 'Tienes un 30% de tener Nublado
goto @Llueve 'Tienes un 10% de tener Lluvia.


'--------------------------------- Primavera ---------------------------------

#org @Primavera 
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Sol 'Tienes un 60% de tener Sol.
compare 0x(Variable dinámica) 0x9
if 0x0 goto @Nublado 'Tienes un 30% de tener Nublado
goto @Llueve 'Tienes un 10% de tener Lluvia.


'--------------------------------- Los climas --------------------------------- 

' No hace falta poner los climas en cada estación, como con ellos acaba el script se pueden poner al final.

#org @Sol
setvar 0x(Variable 2) 0x0
setweather 0x0
nop
doweather
end

#org @Nublado 
setvar 0x(Variable 2) 0x1
setweather 0x0B
nop
doweather
end

#org @Llueve
setvar 0x(Variable 2) 0x2
setweather 0x3
nop
doweather
end


Versión compleja con Estaciones

Versión compleja del script, pero con la influencia de las estaciones.

Script Clima Dinámico Complejo con Estaciones - Dani_SR_17

Código:
#dynamic 0x800000

' Este es un script para crear un clima dinámico en los mapas.
' Se necesitará una variable dinámica (1 para todos los mapas, no 1 por cada mapa) y dos variable para cada mapa.
' En la variable 1 de cada mapa, se almacenará la última hora en la que entraste al mapa, si entrás a las 3pm, y después a las 4pm, el clima podrá cambiar.
' En la variable 2 de cada mapa, se almacenará el clima que hacía en la última hora en la que entraste, en caso de que siga siendo la misma hora.

' Esta es una versión un poco más compleja del script, según el clima anterior variarán los % de los siguientes climas.

' Esta es una versión mejorada del script complejo, compatible con las estaciones del DNS.
' Voy a poner las 4 estaciones con los mismos climas, porque es algo muy personal lo que queráis poner, así que los % y los climas los ponéis vosotros.
' ¿Por qué no guardo la estación en una Variable? Pues muy sencillo, se puede hacer que si se cambia de estación (lo pondré a parte aun así), cambié el clima, pero es gastar una variable más para algo que no es necesario, porque aunque se cambié de estación de golpe el clima no tiene por qué cambiar.

#org @start
copybyte 0x20370D0 0x3005542 'Vamos a revisar si ha cambiado la hora o no.
comparevars LASTRESULT 0x(Variable 1)
if 0x1 goto @Nada
goto @Estaciones

#org @Nada 'Sigue el clima anterior
compare 0x(Variable 2) 0x0
if 0x1 goto @Sol
compare 0x(Variable 2) 0x1
if 0x1 goto @Nublado 
compare 0x(Variable 2) 0x2
if 0x1 goto @Llueve

#org @Estaciones
copybyte 0x20370D0 0x203C001
compare LASTRESULT 0x0 'Si estamos en Verano.
if 0x1 goto @Verano
copybyte 0x20370D0 0x203C001
compare LASTRESULT 0x1 'Si estamos en Otoño.
if 0x1 goto @Otoño
copybyte 0x20370D0 0x203C001
compare LASTRESULT 0x2 'Si estamos en Primavera.
if 0x1 goto @Invierno
goto @Primavera 'Aquí nos ahorramos la comparación, porque si lleguamos aquí es porque es Primavera.


' Ahora solo debemos hacer el script para cada estación, en este caso como es un script "base", no voy a ponerme a cambiar climas ni nada, de eso ya os encargais vosotros.
' Si os vijais, en cada zona, hay por ejemplo: "@TeniamosSol_", acabado en una letra, cada letra es la inicial de la estación que corresponde, por una razón muy sencilla, si en Verano tenemos Sol, es menos probable que llueva que si en Invierno tenemos Sol.


'--------------------------------- Verano ---------------------------------


#org @Verano 'En este caso, el script es más complejo, según el clima de la hora anterior, variarán los % para horas siguientes.
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
compare 0x(Variable 2) 0x0
if 0x1 goto @TeniamosSolV
compare 0x(Variable 2) 0x1
if 0x1 goto @TeniamosNubladoV
compare 0x(Variable 2) 0x2
if 0x1 goto @TeniamosLlueveV


#org @TeniamosSolV
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x8
if 0x0 goto @Sol 'Tienes un 80% de tener Sol.
goto @Nublado 'Tienes un 20% de tener Nublado

#org @TeniamosNubladoV
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x3
if 0x0 goto @Sol 'Tienes un 30% de tener Sol.
compare 0x(Variable dinámica) 0x7
if 0x0 goto @Nublado 'Tienes un 40% de tener Nublado.
goto @Llueve 'Tienes un 30% de tener Llueve.

#org @TeniamosLlueveV
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Llueve 'Tienes un 60% de tener Llueve.
goto @Nublado 'Tienes un 40% de tener Nublado.


'--------------------------------- Otoño ---------------------------------


#org @Otoño 'En este caso, el script es más complejo, según el clima de la hora anterior, variarán los % para horas siguientes.
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
compare 0x(Variable 2) 0x0
if 0x1 goto @TeniamosSolO
compare 0x(Variable 2) 0x1
if 0x1 goto @TeniamosNubladoO
compare 0x(Variable 2) 0x2
if 0x1 goto @TeniamosLlueveO


#org @TeniamosSolO
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x8
if 0x0 goto @Sol 'Tienes un 80% de tener Sol.
goto @Nublado 'Tienes un 20% de tener Nublado

#org @TeniamosNubladoO
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x3
if 0x0 goto @Sol 'Tienes un 30% de tener Sol.
compare 0x(Variable dinámica) 0x7
if 0x0 goto @Nublado 'Tienes un 40% de tener Nublado.
goto @Llueve 'Tienes un 30% de tener Llueve.

#org @TeniamosLlueveO
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Llueve 'Tienes un 60% de tener Llueve.
goto @Nublado 'Tienes un 40% de tener Nublado.


'--------------------------------- Invierno ---------------------------------


#org @Invierno 'En este caso, el script es más complejo, según el clima de la hora anterior, variarán los % para horas siguientes.
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
compare 0x(Variable 2) 0x0
if 0x1 goto @TeniamosSolI
compare 0x(Variable 2) 0x1
if 0x1 goto @TeniamosNubladoI
compare 0x(Variable 2) 0x2
if 0x1 goto @TeniamosLlueveI


#org @TeniamosSolI
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x8
if 0x0 goto @Sol 'Tienes un 80% de tener Sol.
goto @Nublado 'Tienes un 20% de tener Nublado

#org @TeniamosNubladoI
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x3
if 0x0 goto @Sol 'Tienes un 30% de tener Sol.
compare 0x(Variable dinámica) 0x7
if 0x0 goto @Nublado 'Tienes un 40% de tener Nublado.
goto @Llueve 'Tienes un 30% de tener Llueve.

#org @TeniamosLlueveI
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Llueve 'Tienes un 60% de tener Llueve.
goto @Nublado 'Tienes un 40% de tener Nublado.


'--------------------------------- Primavera ---------------------------------


#org @Primavera 'En este caso, el script es más complejo, según el clima de la hora anterior, variarán los % para horas siguientes.
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
compare 0x(Variable 2) 0x0
if 0x1 goto @TeniamosSolP
compare 0x(Variable 2) 0x1
if 0x1 goto @TeniamosNubladoP
compare 0x(Variable 2) 0x2
if 0x1 goto @TeniamosLlueveP


#org @TeniamosSolP
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x8
if 0x0 goto @Sol 'Tienes un 80% de tener Sol.
goto @Nublado 'Tienes un 20% de tener Nublado

#org @TeniamosNubladoP
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x3
if 0x0 goto @Sol 'Tienes un 30% de tener Sol.
compare 0x(Variable dinámica) 0x7
if 0x0 goto @Nublado 'Tienes un 40% de tener Nublado.
goto @Llueve 'Tienes un 30% de tener Llueve.

#org @TeniamosLlueveP
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Llueve 'Tienes un 60% de tener Llueve.
goto @Nublado 'Tienes un 40% de tener Nublado.


'--------------------------------- Los climas --------------------------------- 

' No hace falta poner los climas en cada estación, como con ellos acaba el script se pueden poner al final.

#org @Sol
setvar 0x(Variable 2) 0x0
setweather 0x0
nop
doweather
end

#org @Nublado 
setvar 0x(Variable 2) 0x1
setweather 0x0B
nop
doweather
end

#org @Llueve
setvar 0x(Variable 2) 0x2
setweather 0x3
nop
doweather
end



:blush: Espero que os guste esta actualización, aunque no muchos usen las estaciones, pero bueno, puede ser útil para los que las usen. :blush:​
 

Dragonite

But where's your heart
Respuesta: GBA | Scripting | "Climas Din?micos"

Canela en rama, qué mís decir?

Excelente, excelente. Muero por aplicarlo primero en mi hack.
 

CelticFrostie

Sexador de pollos
Respuesta: GBA | Scripting | "Climas Dinámicos"

Canela en rama, qué más decir?

Excelente, excelente. Muero por aplicarlo primero en mi hack.
El primero no vas a ser jeje ;)

Eres muy grande Dani!!! Muchas gracias por ayudarme con esto y además compartirlo al foro. Me voy a poner ahora mismo a ello :blush:
 

BLAx501!

A veces comento en temas :3
Miembro de honor
Usuario de Platino
Respuesta: GBA | Scripting | "Climas Dinámicos"

Me parece una idea fenomenal. Es algo que no es demasiado difícil de hacer, pero si es un coñazo redactarlo entero, así que chapó por el aporte, sigue así perro ;)
 

Sayer301!

UnityLord!
Miembro de honor
Respuesta: GBA | Scripting | "Climas Dinámicos"

ouh fuck yeah, y es que esto demuestra la clase, unos haciendo consultorios inútiles y otros haciendo aportazos al foro!!!

Fuck yeah! voy a ver si lo pruebo o que, que todavia no tenia muy claro el tema de los climas en mi hack y la verdad que puede ser de gran ayuda.

Muy grande dani!
 

Dani_SR_17

¡Pokémon LionHeart!
Respuesta: GBA | Scripting | "Climas Dinámicos"

Actualización del post
Sistema de Estaciones añadido

Como dije, he mejorado los scripts, ahora son compatibles con las Estaciones del DNS, evidentemente, requiere tener insertada la rutina de las Estaciones de DNS.

Para entender mejor el script recomiendo leer este >>tutorial<< de @Javi4315♪



Tengo que aclarar, que como podréis ver, hay 3 scripts, el primero como explico más abajo es opcional.

También, si veis que los climas son los mismos para todas las estaciones, aunque tengo notas en los scripts que explican el motivo, lo aclaro aquí, como es una base y vais a cambiar lo % y los climas seguramente, he puesto los que ya tenia más que nada porque si los vais a cambiar es inútil pegarme el curo de cambiarlos.



Script cambio de Estación

Ahora tengo que explicar una cosa, este fragmento, debéis insertarlo en el script solo si queréis que al cambiar de estación el cambio de clima pueda ser brusco, me explico, si no lo ponéis y el último día de Otoño tenéis Sol, al comenzar el Invierno tendréis Sol (en principio), mientras que si lo ponéis es más probable de que cambie.

Script cambio de Estación - Dani_SR_17

Código:
' Este script es por si lo queréis añadir al del clima con estaciones, aahora explico como añadirlo.

' Lo primero, necesitamos una 3º Variable, en este caso solo 1 para todos los mapas, voy a llamarla (Variable 3)
' Después, en cada "@(Estación)", por ejemplo, @Verano, debéis poner un "setvar 0x(Variable 3) 0x(Nº Estación)", los Nº de las estaciones son: Verano -> 0, Otoño -> 1, Invierno -> 2, Primavera -> 3.
' Y ahora, debéis añadir esto, nada más comenzar, antes del "@Start".

#org @MirarEstación
copybyte 0x20370D0 0x203C001
comparevars LASTRESULT 0x(Variable 3) 'Vamos a ver si estamos en la misma estación.
if 0x1 goto @Start 'Si lo estamos, el script del clima comienza normalmente, mirando si ha cambiado la hora y tal.
goto @Estaciones 'Si es una nueva estación, pasamos directamente a ver en que estacción estamos, para un nuevo clima.


Versión simple con Estaciones

Ahora le toca a la versión simple del script, pero con la influencia de las estaciones.

Script Clima Dinámico Sencillo con Estaciones - Dani_SR_17

Código:
#dynamic 0x800000

' Este es un script para crear un clima dinámico en los mapas.
' Se necesitará una variable dinámica (solo 1 para todos los mapas, no 1 por cada mapa) y dos variable para cada mapa.
' En la variable 1 de cada mapa, se almacenará la última hora en la que entraste al mapa, si entrás a las 3pm, y después a las 4pm el clima podrá cambiar.
' En la variable 2 de cada mapa, se almacenará el clima que hacía en la última hora en la que entraste, en caso de que siga siendo la misma hora.

' Esta es una versión mejorada del script sencillo, compatible con las estaciones del DNS.
' Voy a poner las 4 estaciones con los mismos climas, porque es algo muy personal lo que queráis poner, así que los % y los climas los ponéis vosotros.
' ¿Por qué no guardo la estación en una Variable? Pues muy sencillo, se puede hacer que si se cambia de estación (lo pondré a parte aun así), cambié el clima, pero es gastar una variable más para algo que no es necesario, porque aunque se cambié de estación de golpe el clima no tiene por qué cambiar.

#org @Start
copybyte 0x20370D0 0x3005542 'Vamos a revisar si ha cambiado la hora o no.
comparevars LASTRESULT 0x(Variable 1)
if 0x1 goto @Nada 'Si es la misma hora que la última vez que el script se ejecuto, no pasa nada.
goto @Estaciones

#org @Nada 'Sigue el clima anterior
compare 0x(Variable 2) 0x0
if 0x1 goto @Sol
compare 0x(Variable 2) 0x1
if 0x1 goto @Nublado 
compare 0x(Variable 2) 0x2
if 0x1 goto @Llueve

#org @Estaciones
copybyte 0x20370D0 0x203C001
compare LASTRESULT 0x0 'Si estamos en Verano.
if 0x1 goto @Verano
copybyte 0x20370D0 0x203C001
compare LASTRESULT 0x1 'Si estamos en Otoño.
if 0x1 goto @Otoño
copybyte 0x20370D0 0x203C001
compare LASTRESULT 0x2 'Si estamos en Primavera.
if 0x1 goto @Invierno
goto @Primavera 'Aquí nos ahorramos la comparación, porque si lleguamos aquí es porque es Primavera.


' Ahora solo debemos hacer el script para cada estación, en este caso como es un script "base", no voy a ponerme a cambiar climas ni nada, de eso ya os encargais vosotros.


'--------------------------------- Verano ---------------------------------

#org @Verano
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Sol 'Tienes un 60% de tener Sol.
compare 0x(Variable dinámica) 0x9
if 0x0 goto @Nublado 'Tienes un 30% de tener Nublado
goto @Llueve 'Tienes un 10% de tener Lluvia.


'--------------------------------- Otoño ---------------------------------

#org @Otoño
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Sol 'Tienes un 60% de tener Sol.
compare 0x(Variable dinámica) 0x9
if 0x0 goto @Nublado 'Tienes un 30% de tener Nublado
goto @Llueve 'Tienes un 10% de tener Lluvia.


'--------------------------------- Invierno ---------------------------------

#org @Invierno
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Sol 'Tienes un 60% de tener Sol.
compare 0x(Variable dinámica) 0x9
if 0x0 goto @Nublado 'Tienes un 30% de tener Nublado
goto @Llueve 'Tienes un 10% de tener Lluvia.


'--------------------------------- Primavera ---------------------------------

#org @Primavera 
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Sol 'Tienes un 60% de tener Sol.
compare 0x(Variable dinámica) 0x9
if 0x0 goto @Nublado 'Tienes un 30% de tener Nublado
goto @Llueve 'Tienes un 10% de tener Lluvia.


'--------------------------------- Los climas --------------------------------- 

' No hace falta poner los climas en cada estación, como con ellos acaba el script se pueden poner al final.

#org @Sol
setvar 0x(Variable 2) 0x0
setweather 0x0
nop
doweather
end

#org @Nublado 
setvar 0x(Variable 2) 0x1
setweather 0x0B
nop
doweather
end

#org @Llueve
setvar 0x(Variable 2) 0x2
setweather 0x3
nop
doweather
end


Versión compleja con Estaciones

Versión compleja del script, pero con la influencia de las estaciones.

Script Clima Dinámico Complejo con Estaciones - Dani_SR_17

Código:
#dynamic 0x800000

' Este es un script para crear un clima dinámico en los mapas.
' Se necesitará una variable dinámica (1 para todos los mapas, no 1 por cada mapa) y dos variable para cada mapa.
' En la variable 1 de cada mapa, se almacenará la última hora en la que entraste al mapa, si entrás a las 3pm, y después a las 4pm, el clima podrá cambiar.
' En la variable 2 de cada mapa, se almacenará el clima que hacía en la última hora en la que entraste, en caso de que siga siendo la misma hora.

' Esta es una versión un poco más compleja del script, según el clima anterior variarán los % de los siguientes climas.

' Esta es una versión mejorada del script complejo, compatible con las estaciones del DNS.
' Voy a poner las 4 estaciones con los mismos climas, porque es algo muy personal lo que queráis poner, así que los % y los climas los ponéis vosotros.
' ¿Por qué no guardo la estación en una Variable? Pues muy sencillo, se puede hacer que si se cambia de estación (lo pondré a parte aun así), cambié el clima, pero es gastar una variable más para algo que no es necesario, porque aunque se cambié de estación de golpe el clima no tiene por qué cambiar.

#org @start
copybyte 0x20370D0 0x3005542 'Vamos a revisar si ha cambiado la hora o no.
comparevars LASTRESULT 0x(Variable 1)
if 0x1 goto @Nada
goto @Estaciones

#org @Nada 'Sigue el clima anterior
compare 0x(Variable 2) 0x0
if 0x1 goto @Sol
compare 0x(Variable 2) 0x1
if 0x1 goto @Nublado 
compare 0x(Variable 2) 0x2
if 0x1 goto @Llueve

#org @Estaciones
copybyte 0x20370D0 0x203C001
compare LASTRESULT 0x0 'Si estamos en Verano.
if 0x1 goto @Verano
copybyte 0x20370D0 0x203C001
compare LASTRESULT 0x1 'Si estamos en Otoño.
if 0x1 goto @Otoño
copybyte 0x20370D0 0x203C001
compare LASTRESULT 0x2 'Si estamos en Primavera.
if 0x1 goto @Invierno
goto @Primavera 'Aquí nos ahorramos la comparación, porque si lleguamos aquí es porque es Primavera.


' Ahora solo debemos hacer el script para cada estación, en este caso como es un script "base", no voy a ponerme a cambiar climas ni nada, de eso ya os encargais vosotros.
' Si os vijais, en cada zona, hay por ejemplo: "@TeniamosSol_", acabado en una letra, cada letra es la inicial de la estación que corresponde, por una razón muy sencilla, si en Verano tenemos Sol, es menos probable que llueva que si en Invierno tenemos Sol.


'--------------------------------- Verano ---------------------------------


#org @Verano 'En este caso, el script es más complejo, según el clima de la hora anterior, variarán los % para horas siguientes.
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
compare 0x(Variable 2) 0x0
if 0x1 goto @TeniamosSolV
compare 0x(Variable 2) 0x1
if 0x1 goto @TeniamosNubladoV
compare 0x(Variable 2) 0x2
if 0x1 goto @TeniamosLlueveV


#org @TeniamosSolV
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x8
if 0x0 goto @Sol 'Tienes un 80% de tener Sol.
goto @Nublado 'Tienes un 20% de tener Nublado

#org @TeniamosNubladoV
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x3
if 0x0 goto @Sol 'Tienes un 30% de tener Sol.
compare 0x(Variable dinámica) 0x7
if 0x0 goto @Nublado 'Tienes un 40% de tener Nublado.
goto @Llueve 'Tienes un 30% de tener Llueve.

#org @TeniamosLlueveV
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Llueve 'Tienes un 60% de tener Llueve.
goto @Nublado 'Tienes un 40% de tener Nublado.


'--------------------------------- Otoño ---------------------------------


#org @Otoño 'En este caso, el script es más complejo, según el clima de la hora anterior, variarán los % para horas siguientes.
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
compare 0x(Variable 2) 0x0
if 0x1 goto @TeniamosSolO
compare 0x(Variable 2) 0x1
if 0x1 goto @TeniamosNubladoO
compare 0x(Variable 2) 0x2
if 0x1 goto @TeniamosLlueveO


#org @TeniamosSolO
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x8
if 0x0 goto @Sol 'Tienes un 80% de tener Sol.
goto @Nublado 'Tienes un 20% de tener Nublado

#org @TeniamosNubladoO
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x3
if 0x0 goto @Sol 'Tienes un 30% de tener Sol.
compare 0x(Variable dinámica) 0x7
if 0x0 goto @Nublado 'Tienes un 40% de tener Nublado.
goto @Llueve 'Tienes un 30% de tener Llueve.

#org @TeniamosLlueveO
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Llueve 'Tienes un 60% de tener Llueve.
goto @Nublado 'Tienes un 40% de tener Nublado.


'--------------------------------- Invierno ---------------------------------


#org @Invierno 'En este caso, el script es más complejo, según el clima de la hora anterior, variarán los % para horas siguientes.
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
compare 0x(Variable 2) 0x0
if 0x1 goto @TeniamosSolI
compare 0x(Variable 2) 0x1
if 0x1 goto @TeniamosNubladoI
compare 0x(Variable 2) 0x2
if 0x1 goto @TeniamosLlueveI


#org @TeniamosSolI
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x8
if 0x0 goto @Sol 'Tienes un 80% de tener Sol.
goto @Nublado 'Tienes un 20% de tener Nublado

#org @TeniamosNubladoI
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x3
if 0x0 goto @Sol 'Tienes un 30% de tener Sol.
compare 0x(Variable dinámica) 0x7
if 0x0 goto @Nublado 'Tienes un 40% de tener Nublado.
goto @Llueve 'Tienes un 30% de tener Llueve.

#org @TeniamosLlueveI
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Llueve 'Tienes un 60% de tener Llueve.
goto @Nublado 'Tienes un 40% de tener Nublado.


'--------------------------------- Primavera ---------------------------------


#org @Primavera 'En este caso, el script es más complejo, según el clima de la hora anterior, variarán los % para horas siguientes.
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
compare 0x(Variable 2) 0x0
if 0x1 goto @TeniamosSolP
compare 0x(Variable 2) 0x1
if 0x1 goto @TeniamosNubladoP
compare 0x(Variable 2) 0x2
if 0x1 goto @TeniamosLlueveP


#org @TeniamosSolP
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x8
if 0x0 goto @Sol 'Tienes un 80% de tener Sol.
goto @Nublado 'Tienes un 20% de tener Nublado

#org @TeniamosNubladoP
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x3
if 0x0 goto @Sol 'Tienes un 30% de tener Sol.
compare 0x(Variable dinámica) 0x7
if 0x0 goto @Nublado 'Tienes un 40% de tener Nublado.
goto @Llueve 'Tienes un 30% de tener Llueve.

#org @TeniamosLlueveP
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Llueve 'Tienes un 60% de tener Llueve.
goto @Nublado 'Tienes un 40% de tener Nublado.


'--------------------------------- Los climas --------------------------------- 

' No hace falta poner los climas en cada estación, como con ellos acaba el script se pueden poner al final.

#org @Sol
setvar 0x(Variable 2) 0x0
setweather 0x0
nop
doweather
end

#org @Nublado 
setvar 0x(Variable 2) 0x1
setweather 0x0B
nop
doweather
end

#org @Llueve
setvar 0x(Variable 2) 0x2
setweather 0x3
nop
doweather
end


Espero que os guste esta actualización, aunque no muchos usen las estaciones, pero bueno, puede ser útil para los que las usen.
 

Ryurs

Usuario de oro
Quiero introducir esto en mi hack rom pero tengo problemas para insertarlo y que se ejecute correctamente.

El script que quiero introducir es el primero de todos (el más sencillo).

CÓDIGO UTILIZADO:
Código:
#dynamic 0x800000

' Este es un script para crear un clima dinámico en los mapas.
' Se necesitará una variable dinámica (solo 1 para todos los mapas, no 1 por cada mapa) y dos variable para cada mapa.
' En la variable 1 de cada mapa, se almacenará la última hora en la que entraste al mapa, si entrás a las 3pm, y después a las 4pm el clima podrá cambiar.
' En la variable 2 de cada mapa, se almacenará el clima que hacía en la última hora en la que entraste, en caso de que siga siendo la misma hora.

#org @start
copybyte 0x20370D0 0x3005542 'Vamos a revisar si ha cambiado la hora o no.
comparevars LASTRESULT 0x(Variable 1)
if 0x1 goto @Nada 'Si es la misma hora que la última vez que el script se ejecuto, no pasa nada.
goto @CambioDeClima

#org @Nada 'Sigue el clima anterior
compare 0x(Variable 2) 0x0
if 0x1 goto @Sol
compare 0x(Variable 2) 0x1
if 0x1 goto @Nublado
compare 0x(Variable 2) 0x2
if 0x1 goto @Llueve

#org @CambioDeClima
copybyte 0x20370D0 0x3005542
copyvar 0x(Variable 1) LASTRESULT 'Vamos a guardar la nueva hora
random 0x10
copyvar 0x(Variable dinámica) LASTRESULT
compare 0x(Variable dinámica) 0x6
if 0x0 goto @Sol 'Tienes un 60% de tener Sol.
compare 0x(Variable dinámica) 0x9
if 0x0 goto @Nublado 'Tienes un 30% de tener Nublado
goto @Llueve 'Tienes un 10% de tener Lluvia.

#org @Sol
setvar 0x(Variable 2) 0x0
setweather 0x0
nop
doweather
end

#org @Nublado
setvar 0x(Variable 2) 0x1
setweather 0x0B
nop
doweather
end

#org @Llueve
setvar 0x(Variable 2) 0x2
setweather 0x3
nop
doweather
end
PREMISAS:
La rom base que estoy utilizando es esmeralda. Para este tipo de script creo que da igual la rom que utilices, pues debería funcionar igual (lo único comprobar que las variables que escojas para el script sean efectivamente variables libres a utilizar en esa rom). Las 3 variables que escogí para introducirlas en el script anterior son:
- 0x4065 para la 0x(Variable dinámica)
- 0x4066 para la 0x(Variable 1)
- 0x4067 para la 0x(Variable 2)
Me guié por este hilo para escoger estas variables libres: https://www.pokecommunity.com/showthread.php?t=330008
En el post nº20 de DizzyEgg, en el cual expone una lista con flags y variables usadas en esmeralda.

Uso un script de nivel 05 en el mapa que quiero que se suceda esto y tengo insertadas las rutinas RTC y DAN de la herramienta "Day, Night and Seasons (DNS)".
El offset donde guardo el script es un offset libre (comprobadísimo).

CONCLUSIONES:
Por lo que pienso que... ¿puede faltar algo en el script?

En la línea:
random 0x10
lo cambié a:
random 0xA
(eso creo que sí que es un pequeño error en el script)

Y luego ya lo que se me puede ocurrir que esté mal son las líneas que involucren: copybyte 0x20370D0 0x3005542

El 0x20370D0 no sé a que hace alusión.
El 0x3005542 creo que sí que escoge el byte correspondiente a la hora (utilizando la herramienta DNS en la rutina del RTC):
22.png


A ver si alguien que entienda de scripts puede ver en que falla o cuál es el problema de esto.
 
Arriba