Últimos temas
» Problema con temporizador
por Klayer Ayer a las 7:33 pm

» [MV] Jabberwock
por Ruo Dom Mayo 19, 2019 2:23 pm

» Zaza no konpasu (La Brújula de Zaza) [VXACE]
por Pocari Dom Mayo 19, 2019 2:00 pm

» Analisis del juego La muerte y el Vampiro by Ruo
por Ruo Dom Mayo 19, 2019 1:32 pm

» The Misticals Yian's Dreamstales
por liendre Sáb Mayo 18, 2019 10:47 pm

» Ayuda con habilidad que aumenta de potencia mientras se usa [VX ace]
por juantru Jue Mayo 16, 2019 2:50 pm

» Problema con lag en mapa grande [Vx Ace]
por Pocari Jue Mayo 16, 2019 1:41 pm

» Problemón con la limitación de cantidad maxima de habilidades que puedes crear [Vx Ace]
por juantru Jue Mayo 16, 2019 11:58 am

» ¿Me pueden recomendar gente que dibuje y edite Tilesets a comisión?
por AitorZombie Miér Mayo 15, 2019 11:27 pm

» Crear habilidad de auras [vx ace]
por juantru Miér Mayo 15, 2019 9:05 pm

» Publicidad del Ragefest del Foro 2.0
por Turbiosoft.acho Miér Mayo 15, 2019 10:22 am

» [Completo] [MV] La muerte y el vampiro
por katosan Dom Mayo 12, 2019 2:32 am


[ENGINE] Better random events: eventos aleatorios mejorados

Ir abajo

[ENGINE] Better random events: eventos aleatorios mejorados Empty [ENGINE] Better random events: eventos aleatorios mejorados

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

[ENGINE] Better random events: eventos aleatorios mejorados M9mgJ8S

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:
[ENGINE] Better random events: eventos aleatorios mejorados Cx2Lxgv
¿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:
[ENGINE] Better random events: eventos aleatorios mejorados JwW5wgf
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:
[ENGINE] Better random events: eventos aleatorios mejorados XuLz0PN

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.

[ENGINE] Better random events: eventos aleatorios mejorados VMNeOkx

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”.
[ENGINE] Better random events: eventos aleatorios mejorados PdeQCf6
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:
[ENGINE] Better random events: eventos aleatorios mejorados GLyxx20[ENGINE] Better random events: eventos aleatorios mejorados EYeNbdO[ENGINE] Better random events: eventos aleatorios mejorados APo0Onq


También puedes encontrar su versión en PDF aquí.
Frägarach
Frägarach
Caza Limos
Caza Limos

Masculino
Perú
RPG Maker : MV
Mensajes : 51
Monedas : 1108
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.