Últimos temas
» Karinter (segunda tanda de vídeos) [Rpg maker Vx]
por Rpgman001 Hoy a las 1:23 am

» Análisis con Japo: "The Holy War 1.3 (demo)"
por JapoZero Hoy a las 12:07 am

» Taller de ZororoWhite
por Klayer Ayer a las 11:41 pm

» Duda sobre un iconset
por Greninja555 Ayer a las 9:51 pm

» Tileset "realistas" Modernos para MV
por cebmetal Sáb Mar 23, 2019 3:46 am

» Algún maestro del dibujo?
por Klayer Vie Mar 22, 2019 7:59 pm

» Norfair (nombre provisional)
por Greninja555 Vie Mar 22, 2019 6:18 pm

» Dudas x 2 Im Back To Foro!
por cebmetal Vie Mar 22, 2019 6:07 pm

» Forget-Me-Not [RPG Maker MV] (W.I.P)
por Muzgar Vie Mar 22, 2019 5:48 pm

» [Ace] Holy Knight Natalie (Presentación)
por Greninja555 Vie Mar 22, 2019 4:54 pm

» Conozcan mi primer juego.. The Mana's Adventure
por Greninja555 Vie Mar 22, 2019 4:27 pm

» Zaza no konpatsu (La Brújula de Zaza) [VXACE]
por Pocari Vie Mar 22, 2019 1:58 pm


[ENGINE] Better random events: eventos aleatorios mejorados

Ir abajo

[ENGINE] Better random events: eventos aleatorios mejorados

Mensaje por Frägarach el Jue Mar 14, 2019 1:31 am



Existen algunas ocasiones en que nos encontramos en la situación de hacer sucesos aleatorios. El caso más general es —quizá — diálogos distintos. Ya sea porque un aldeano te da información variada y distinta cada vez que interactúas con él, o te encuentras encerrado en un evento infinito con tu waifu por el resto de la eternidad (el que entendió la referencia, excelente).
En este tutorial, abordaré el tema de las opciones aleatorias.

¿Qué necesitamos?


Dos variables distintas: una que tomará valores aleatorios, y otra que tomará el estado anterior.

¿Estado anterior?


Verán, el usuario promedio hará un “evento aleatorio” de la siguiente manera:
1.- Darle un valor a una variable entre un intervalo (sea el que sea).
2.- Iterar cada posibilidad de la variable.
Esto, creo yo, que se entiende mejor con la siguiente imagen:
Screenshot:
¿Qué problema tiene esto? Habrá ocasiones en que los sucesos dentro de las condicionales se repetirán consecutivamente. Para ejemplificar esto, mostraré los resultados de la prueba que hice: 0, 4, 1, 1, 4, 0, 2, 3, 3, 1, 1, 1, 2…
Como pueden ver, hay ocasiones en que el suceso 1 y 3 se repitieron consecutivamente.
Esto se ve evidenciado de forma engorrosa si, por ejemplo, tratamos de aplicar esto para que los NPC’s nos suelten diálogo distinto cada vez que interactuemos con ellos.

Así que, para resolver esto, utilizaremos dos variables; y además, dos conceptos: estado actual, y estado anterior.

Creando un evento aleatorio mejorado


Para entender la idea, permítanme mostrarles el siguiente gráfico:
Diagrama de bloques V1.0:
Como podemos ver, es exactamente lo mismo que he mostrado en la imagen anterior, pero visto desde un diagrama de bloques.

¿Qué hacer para resolver este conflicto? Tener una variable que almacene el estado que acaba de salir en un ciclo, y luego compararlo con el que salga en el siguiente ciclo.

El diagrama de bloques se vería ahora así:


Diagrama de bloques V2.0:

Primero, asignaremos un valor aleatorio a una variable, por ejemplo, la #483. También, tendremos preparada otra variable, la #484 en mi caso, la cual almacenará el valor del estado del ciclo actual. Es decir, si por ejemplo la variable #483 tomó un valor de 2, entonces la variable #484 tomará ese 2 y será su nuevo valor.

Antes de ejecutar las acciones dentro de las condicionales, revisará si ambos valores son iguales. Si no lo son, entonces repetirá el ciclo y pedirá otro valor para la variable #483. Si ambos son distintos, entonces significa que el valor no se ha repetido consecutivamente, y se procederá a ejecutar el método de su respectiva condicional.

Digamos que el valor aleatorio fue 2, pero la variable #484 que se encarga de ver el estado anterior es 1: esto significa que no se han repetido los casos, y el programa procederá a ejecutar las instrucciones para la condicional “Variable #483 = 2”.

Al finalizar esa subrutina del programa, entonces ahora la variable #484 será igual a 2 y no 1, como era previamente. Y si al repetir el ciclo, la variable #483 es 1, ambos al ser iguales, hará que se repita el ciclo hasta que ambas variables sean distintas.

Cómo implementarlo al RPG Maker



Primero, definiremos una etiqueta al inicio de todo el evento. Ya veremos su función en un momento. Luego, asignamos un valor para la variable que utilizaremos como manejador (en mi caso, la #483) entre un rango. Para este ejemplo, hice que tomara un valor entre 0 y 4.


Le estoy dando que espere 5 fotogamas solo para darle una pequeña ventana al programa (es cosa mía. Bien pueden no poner esa función).

Luego, vamos a iterar el primer caso; es decir, cuando la variable #483 (Random choice control, en mi caso) sea igual a 0.

Creamos una condicional con la variable a la que hemos dado un valor aleatorio, sin excepción. Que verifique si la variable “Random choice control” es igual a 0.

Dentro, creamos otra condicional, esta sí, con excepción. Que verifique si la variable #484 (Random choice – Actual, la variable que retiene el estado anterior) es igual a la variable “Random choice control”. Si en caso se cumple, entonces hacemos que vuelva a la etiqueta. Si no es sí, en la excepción añadimos todo lo que debe pasar en ese caso. Para este ejemplo, simplemente imprimí un mensaje en pantalla con el valor de la variable #483. Y al final de todo lo que hagamos ahí, cambiamos el valor de la variable “Random choice – Actual” por el de la variable “Random choice control”.
Para que se entienda aún más, describiré lo que lee el programa:


1.- Ve si la variable “Random choice control” es igual a 0.


2.- Si NO es así, entonces seguirá con las demás instrucciones del evento (o sea, que verá si tiene valor 1, 2, etc).


3.- Si se cumple la condición, entonces ejecutará el código que tiene dentro.


4.- En este punto, revisa si la variable “Random choice – Actual” y “Random choice control” son iguales. Es decir, revisa si la variable aleatoria es igual al de la repetición anterior.


(Nota aquí: si es la primera vez que ejecutas este evento, no ocurrirá ningún error al comparar valores).


5.- Si en este ciclo se repitió el valor, entonces volverá al inicio (a la etiqueta “loop” que pusimos inicialmente) y calculará otro valor para la variable “Random choice control”.


6.- Si los valores no son iguales, entonces mostrará un mensaje en pantalla, cambiará el valor de “Random choice – Actual” para guardar el estado que ya salió, y luego saldrá del procesamiento de evento.


Si yo trato de ejecutar este programa de nuevo y “Random choice control” toma como valor cero, entonces se reiniciará cuantas veces necesite hasta que ya no sea cero.


El mismo procedimiento se hará para cada caso. En mi ejemplo, tomé valores entre 0 y 4, entonces haré condicionales por cada uno.


Y bueno, eso es básicamente todo.


Adjunto las imágenes de todo el evento común que hice como prueba:


Screenshots:


También puedes encontrar su versión en PDF aquí.
Frägarach
Frägarach
PJ de Quest
PJ de Quest

Masculino
Perú
RPG Maker : MV
Mensajes : 49
Monedas : 1106
Reputación : 10
Edad : 20

Volver arriba Ir abajo

Volver arriba

- Temas similares

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