Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 4064 miembros registrados.
El último usuario registrado es cesarseb233.

Nuestros miembros han publicado un total de 84115 mensajes en 11982 argumentos.

Consejos para hacer Engines (Mi forma de ver los Ingenios)

Ver el tema anterior Ver el tema siguiente Ir abajo

Consejos para hacer Engines (Mi forma de ver los Ingenios)

Mensaje por MaddManu el 2012-12-31, 04:21

En primer lugar definir que es un Engine. Yo personalmente trato al engine como si de un ingenio se tratara. Esta palabra la aprendí en el museo de la fabrica de azucar de mi ciudad. Esta fábrica hacía azucar hace ya siglos pero realmente su calificación se ajusta más a lo que es un ingenio. Pondré una defición sacada de internet de lo que es un ingenio.

Ingenio: Así se les llamaba a las maquinarias sofisticadas que eran creadas en la edad media y el renacimiento.
Eran dispositivos que usaban los conocimientos con mucho "ingenio".
Y de ahí también se comenzó a llamar INGENIEROS a las personas que eran capaz de hacer dichos dispositivos, mucho antes de que hubiera alguna escuela para dicho oficio.


De ahí mi forma de ver a los Engines, estos son mecanismos construidos con herramientas muy básicas pero que mediante el Ingenio de los Enginer, osea nosotros, realizan las funciones que queremos, (en la medida de lo posible).

Dicho esto empezemos con el "tutorial" o los "consejos", llamadlo como queráis pero vamos al tema:

Antes de crear la primera variable, la primera llave, (como yo llamo a los interruptores), mentalizate. Métete en el papel de ese ingenioso de la edad media que tenía que hacer un molino utilizando madera. Cuando tengas este chip, cambia esos materiales por estos tres: Variables, Llaves y Condiciones. Con estos 3 componentes puedes hacerlo TODO.

Con TODO me refiero a TODO, ya sea un juego o el mismisimo programa Rpg MaKer. Claro está que aqui entra en juego el rendimiento, la complejidad y sobre todo, tu tiempo.

Llegados a este punto, una breve explicación.
- Variable: "Cosa donde se guardan Números. Solo puedes guardar un número por variable y este puede ser negativo, positivo o tener varias cifras. No puede ser decimal."
- Llave: "Cosa que o esta encendida o esta apagada. En comparación, como su nombre indica funcionan igual que una llave y su puerta. Ejemplo: La Llave 1 puede estar abierta o cerrada pero no ambos casos a la vez."
-Condición: "Esta Cosa es un poco más amplia que las anteriores pero básicamente funciona de una manera: Si la cosa X es X, pasa X. La X puede ser una variable, una llave o cualquier valor como el dinero, la cantidad de objetos que tengas etc...No entraré en detalle ya que yo solo uso la Condición con respecto a Variables y Llaves."

Doi por hecho que los conceptos anteriores se conocen en su plenitud y continuo;

Ya tienes los materiales, un gran descampado y un montón de obreros para realizar el trabajo sucio, ahora solo te queda ponerte y hacer los planos de tu grandioso Ingenio, (Engine).

Tal y como lo presento parece que el engine esta casi hecho casi que antes de empezar xD

Planifica lo que quieres hacer y divide tu objetivo en metas más pequeñas. Para este tutorial vamos a hacer algo sencillo en la practica del mundo real pero complicado si queremos pasarlo a engine. Vamos a barajar una baraja de cartas (10) y a sacar una carta, y luego otra, y luego otra, y luego otra y así hasta que se acabe la baraja.

[Ahora empieza la parte del Post seria] ()

Cosa 1 a tener en cuenta - En la vida real damos muchas cosas por lógicas que en realidad no lo son tanto.

Cosa 2 a tener en cuenta - Distingue todos los procesos de la acción antes de pasar esta a engine.

Paso 1 - A corde con los puntos anteriores empecemos por enumerar los procesos.

1 -- Crear 10 cartas para hacer la baraja
2 -- Imprimir las cartas para darle una identidad a cada carta
3 -- Barajar/mezclar las cartas
4 -- Coger una carta
5 -- Eliminar la posibilidad de coger la carta extraida de la baraja de nuevo
6 -- Coger otra carta
7 -- Repetir el proceso 5 y 6 hasta que no haya cartas.

Estos serían los procesos necesarios para cumplir con nuestro objetivo. Hagamoslo ahora en modo Engine: (Esto es más interesante).

1 -- Creamos 10 variables, una por cada carta de la baraja, ejemplo "Carta 1,2,3...".
2 -- Sustituimos cada variable por un número, este número será la id de la carta. Claro, aqui la cosa se complica ya que nosotros no vemos las Ids de las variables. Necesitaremos entonces un "Interprete de variables", a esto le llamo módulo. Un módulo es una parte del engine que se encarga de una función muy especifica.
El módulo "Interprete de variables" se encargará de leer la información de las variables de las cartas y actuará en consecuencia. Básicamente es una Concidición que reacciona con respecto a la Id de las cartas. Recordad que aunque cada carta tenga su propia variable, lo que define la id de las cartas es el número que introduzcamos en la variable.
3 -- Tenemos 10 cartas, cada carta es una variable distinta. En este punto tienes que abrir tu mente. En realidad no tenemos 10 cartas sino 10 posiciones y cada posición podemos grabarla con una ID.
Para plasmar el hecho de barajar vamos a crear una variable "Barajar". Luego vamos a realizar con ella un cálculo; sustituir "Barajar" por un número aleatorio entre 1 y 10. Este resultado indica a que carta/posición accederemos en el siguiente paso.
4 -- En nuestro caso al coger la carta se nos mostrara un mensaje diciendonos: Has cogido la carta X. Para ello necesitamos saber cual es la Id de la carta que hemos sacado ya que el mensaje no depende de la posición que hemos seleccionado al sacar una carta sino de la identidad de la carta que hemos sacado. Para hacer esto hacemos una condición con la siguiente estructura:

Si "Barajar" es = a 1: Sustituir "ID dinámica" por Carta1
Si "Barajar" es = a 2: Sustituir "ID dinámica" por Carta2
Si "Barajar" es = a 3: Sustituir "ID dinámica" por Carta3

Despues de esto tendrémos la variable "ID dinámica grabada con la Id de la carta seleccionada y de esta manera pasaremos a trabajar con la ID de la carta sin importarnos la carta en si o la posicion (carta y posición es lo mismo).

Después con una Condición podemos finalmente mostrar el texto que queramos. La condición tendría la siguiente estructura:

Si "ID dinámica" es = a 1: Mostrar texto "Has cogido la carta A"
Si "ID dinámica" es = a 2: Mostrar texto "Has cogido la carta B"
Si "ID dinámica" es = a 3: Mostrar texto "Has cogido la carta C"

Con esto ya podemos sacar una carta de la baraja y el engine detecta la identidad de la misma. De esta manera podemos guardar de manera externa cualquier identidad en las cartas. Ejemplo: Que quieres que la carta nº 3 de tu baraja sea X y esa X tiene la ID 253 pues solo sustituyes la variable carta 3 por 253. Despues en el proceso 4 en condiciones añades la nueva.

Si "ID dinámica" es = a 253: Mostrar texto "Has cogido la carta Cualquiera"

Con este sistema puedes añadir cualquier carta de manera infinita a tu baraja. De esta manera ya tienes la base para un juego de cartas coleccionable en el que la baraja se modifica costantemente pero lo que haces con ella no.

5 -- En el paso anterior sacamos una carta pero cuando volvamos a sacar carta podemos sacar la misma. Esto sería un caos y una incoherencia. Yo no puedo sacar de la baraja 2 veces la misma carta a menos que yo haya metido 2 cartas iguales pero detallo, en este caso no son la misma cartas, son 2 cartas/posiciones diferentes con la misma ID.

Bien, entonces ahora hay que crear un módulo nuevo para evitar que se saque la misma carta 2 veces.
En primer lugar creamos 10 llaves, una por cada carta/posición. Estas llaves nos indicarán si la carta esta en la baraja o no está. Ejemplo: Si la llave de la carta 1 esta on, significa que la carta 1 está dentro de la baraja, si esta en off, significa que está fuera. Esto es más sencillo de lo que parece y me voy a ahorra la explicación. Solo me voy a limitar a mostrar la estructura.

Cuando se llega a este paso:
Si "Barajar" es = a 1: Sustituir "ID dinámica" por Carta1 en realidad tenemos que hacerlo así.

Si "Barajar" es = a 1:
Si Llave carta 1 On:
Sustituir "ID dinámica" por Carta1
Llave carta 1 poner en off
Si Llave carta 1 Off:
[Repetir el proceso 3]

Si "Barajar" es = a 2:
Si Llave carta 2 On:
Sustituir "ID dinámica" por Carta1
Llave carta 2 poner en off
Si Llave carta 2 Off:
[Repetir el proceso 3]

Si "Barajar" es = a 3:
Si Llave carta 3 On:
Sustituir "ID dinámica" por Carta1
Llave carta 3 poner en off
Si Llave carta 3 Off:
[Repetir el proceso 3]

Estudia el modelo de arriba y repasa todos los procesos. Hacer engines al nivel en el que los engines son verdaderos engines y no 3 llaves y 2 variables mal puestas es una tarea muy abstracta pero entretenida y divertida cuando se domina.

6 -- Este paso es igual al 4.

Fin del post. Comprendo que sea complicado pero si le pones empeño quizas aprendas algo o al menos, obtengas otro punto de vista diferente. No cuelgo demo ya que estoy acostado mientras escribo xD pero cualquier duda no "dudeis" en decirmela.

Esto no es un tutorial de como hacer un juego de cartas, ni de como barajar unas cartas en Rpg Maker. Esto es un post para transmitir una forma de afrontar el "arte" del engine.. (arte no, pero si la tarea que supone). Sin más, gracias por leerme, Maddmanu, ha sido un placer.
avatar
MaddManu
Soñador
Soñador

0/3

Créditos 373

Gracias : 4

http://silegames.blogspot.com.es/

Volver arriba Ir abajo

Re: Consejos para hacer Engines (Mi forma de ver los Ingenios)

Mensaje por Wecoc el 2012-12-31, 14:52

Las variables ($game_variables) pueden ser decimales (prueba a hacer $game_variables[1] = Math::PI por ejemplo) y no estan limitadas a solo números.
Es un error común pensar eso cuando se hacen los engines sin usar Llamar Script. Claro, las opciones del Interpreter tienen una serie de limitaciones. Pero en realidad no las hay.

Yo a veces he usado de variable una array para ahorrarme Condiciones y Efectos y número de variables y simplificarme un poco las cosas.

Youkai me hizo un arreglo al engine de batalla en la que la variable es una llamada a la ventana hud. (y a parte de ser muy astuto va requetebien) Y se pueden hacer cosas aún más raras y él las ha usado a veces según me dijo. Supongo que también podrías hacer de una variable una string (que la variable valiera "A", "Hola", "Pollo"...), aunque yo no lo he usado nunca así.

El engine que planteas lo hubieras podido hacer con muchas menos variables que las planteadas usando estos recursos. Aunque cada uno lo hace como mejor le vaya.

La diferencia entre las variables y los interruptores tal y como los uso yo (aunque en realidad no hay una diferencia tan clara*) es que los interruptores devuelven ON o OFF, es decir true o false. Pero estamos en lo mismo, podemos hacer un interruptor que sea una array con varios valores si eso tiene que ahorrarte número de interruptores y condiciones ($game_switches[1] = [false,true,false]). Puedes controlarlo con Condiciones y Efectos perfectamente desde el momento en que Condiciones y Efectos incluye una llamada a script (gracias Enterbrain, por una vez fuiste cool xD)

* Si te diera por usar una variable como interruptor (true|false) o un interruptor como valor podrías hacerlo perfectamente pero sería un poco tonto, no hace falta ir contracorriente porque sí xD

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

En fin solo era ese detalle xD El engine que planteas es sencillo y está bien hecho (aunque no lo he probado de hacer a ver si funcionaba bien xD pero supongo que sí)
Mi punto de vista a la hora de hacer engines es más de un scripter que de un propio enginer, la idea con la que debes quedarte es que esas limitaciones que crees que tienes, no las tienes xD.
avatar
Wecoc
Administrador
Administrador



Créditos 9129

Gracias : 471

Volver arriba Ir abajo

Re: Consejos para hacer Engines (Mi forma de ver los Ingenios)

Mensaje por MaddManu el 2012-12-31, 15:34

Ya hablamos los llamar script para hacer cálculos con variables pero ya sabes que cuando hago engines no uso el script para nada. Quien quiera puede usar esa posibilidad.
avatar
MaddManu
Soñador
Soñador

0/3

Créditos 373

Gracias : 4

http://silegames.blogspot.com.es/

Volver arriba Ir abajo

Re: Consejos para hacer Engines (Mi forma de ver los Ingenios)

Mensaje por MaknusDave el 2013-02-18, 00:59

@Wecoc escribió:La diferencia entre las variables y los interruptores tal y como los uso yo (aunque en realidad no hay una diferencia tan clara) es que los interruptores devuelven ON o OFF, es decir true o false. Pero estamos en lo mismo, podemos hacer un interruptor que sea una array con varios valores si eso tiene que ahorrarte número de interruptores y condiciones ($game_switches[1] = [false,true,false]). Puedes controlarlo con Condiciones y Efectos perfectamente desde el momento en que Condiciones y Efectos incluye una llamada a script (gracias Enterbrain, por una vez fuiste cool xD)

estoy en contra, la diferencia de variables e interruptores es que cuando haces OFF para por completo el proceso
al menos si haces que tal variable cambie su numero igual sigue en proceso (loop ), eso por lo menos es lo que me paso a mi
avatar
MaknusDave
Soñador
Soñador

2/3

Créditos 264

Gracias : 3

Volver arriba Ir abajo

Re: Consejos para hacer Engines (Mi forma de ver los Ingenios)

Mensaje por jehyknaria el 2013-02-18, 23:16

Me gusta leer este tipo de post, cómo se plantean los problemas y cómo se van resolviendo. A mí por lo menos me da ideas y aprendo nuevos métodos para mis cosas.

@MaknusDave escribió:
estoy en contra, la diferencia de variables e interruptores es que cuando haces OFF para por completo el proceso
al menos si haces que tal variable cambie su numero igual sigue en proceso (loop ), eso por lo menos es lo que me paso a mi
Hasta donde yo sé, los interruptores son variables booleanas (true/false, 1/0, sí/no). El problema es como las uses. Si cambias el valor de una variable o interruptor no va a importar demasiado si no creas una condición o algo donde ese cambio produzca algo, ese es el problema.
avatar
jehyknaria
Principiante
Principiante

0/3

Créditos 489

Gracias : 16

http://eltrasterorpg.blogspot.com.es

Volver arriba Ir abajo

Re: Consejos para hacer Engines (Mi forma de ver los Ingenios)

Mensaje por Eron el 2013-02-19, 08:38

@MaknusDave escribió:estoy en contra, la diferencia de variables e interruptores es que cuando haces OFF para por completo el proceso

Pues yo estoy bastante de acuerdo con Weco.

Un proceso paralelo funciona si la condición para que funcione se cumple, ya sea si el interruptor vale ON o si la variable está dentro de un rango. Si el interruptor pasa a OFF o si la variable sale del rango, los efectos son los mismos, así que en ese sentido variable y interruptor no son diferentes. O esto al menos en XP. No se si en VX/Ace la cagaron con eso, tampoco me extrañaría =D

La variables a la hora de interpretarlas en una condicion o en un if al fin y al cabo también valen true o false, como cualquier otra cosa, porque así van las condiciones lógicas.

En el interruptor se ve facil, normalmente usaremos ON --> true, OFF --> false, aunque si en Condiciones y efectos le pones de Condición que esté apagado, luego esa lectura se hará al revés, ON --> false, OFF --> true, porque será verdad lo que decimos cuando esté apagado. Claro que el interruptor en sí sigue valiendo lo que valga, pero lo que importa es cómo se lee.

En variables, usadas convencionalmente, (dentro del rango) --> true, (fuera del rango) --> false

Entonces a niveles prácticos, un Interruptor y una Variable son lo mismo xD

Youkai me hizo un arreglo al engine de batalla en la que la variable es una llamada a la ventana hud. (y a parte de ser muy astuto va requetebien) Y se pueden hacer cosas aún más raras y él las ha usado a veces según me dijo.
Me gustaría saber cuales, es algo que me parece interesante. Y no entiendo cómo usa esa llamada en realidad.

Edito: No me había dado cuenta de que el topic era antíguo, perdonadme espero que no sea necro D=
avatar
Eron
Principiante
Principiante

0/3

Créditos 1283

Gracias : 54

Volver arriba Ir abajo

Re: Consejos para hacer Engines (Mi forma de ver los Ingenios)

Mensaje por orochii el 2013-02-19, 16:05

Bueno, en una variable cualquiera puedes guardar lo que sea. Ustedes saben ya, o deberían saber xD, que las variables en Ruby son completamente sin tipo, y lo que guardan es un puntero a un objeto. Los números internamente también se manejan como objetos (sólo que lo que usas en la sintaxis es el valor directamente). Igual Arrays, Hashes, Strings, Bools...

Es posible hacer por ejemplo...
Código:
<>Llamar script:
$game_variables[1] = $data_enemies[1].name
<>Mostrar texto: \v[1] es un bicho feo =D.
Lo único es que, a como dicta el sentido común =D, si usan la variable en una comprobación, podrían pasar cosas raras xD. Igual si le sumas/restas/asdf. El poner valor sí debería funcionar, porque es un simple variable=x.

Asdf,
OZ
avatar
orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6359

Gracias : 325

http://ragnarokrproject.com/

Volver arriba Ir abajo

Re: Consejos para hacer Engines (Mi forma de ver los Ingenios)

Mensaje por Wecoc el 2013-02-19, 21:06

Orochii, te me has adelantado, porque iba a decir lo mismo xD Claro que luego para hacer sumas y estas cosas da un error feo si no vigilas, pero según qué lo uses puedes resolverlo rápidamente volviendo la variable a un integer una vez usada como string.
Código:
<>Llamar script:
$game_variables[1] = $data_enemies[1].name
<>Mostrar texto: \v[1] es un moco verde muy guapo =D
$game_variables[1] = 0
y problema resuelto xD

Luego, también para según qué creo que vale hacer cosas como esta en condiciones
Código:
$game_variables[1].is_a?(String)

En mi último script, ese del Input Number con letras, el que nadie comentó y pasasteis de él, exacto, ese xD, pues hice algo así como guardar el "valor" obtenido en la variable aún siendo una string. Entonces, uso las variables como strings, y creo que es un buen ejemplo xD

Si reservas una variable concreta para estas cosas y no le haces nunca una operación numérica, puedes estar tranquilo...
avatar
Wecoc
Administrador
Administrador



Créditos 9129

Gracias : 471

Volver arriba Ir abajo

Re: Consejos para hacer Engines (Mi forma de ver los Ingenios)

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.