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 3819 miembros registrados.
El último usuario registrado es MaikelNox.

Nuestros miembros han publicado un total de 86272 mensajes en 12298 argumentos.

[Tutorial] LAGUIADELNOOB - Empujar rocas

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [Tutorial] LAGUIADELNOOB - Empujar rocas

Mensaje por Calayax el 2017-07-13, 14:59

EMPUJAR ROCAS



El evento de empujar rocas tiene una lógica bastante sencilla que radica en que si el JUGADOR se mueve hacia ella, la ROCA se mueve. Hay tantas formas de hacerlo y calentarnos la cabeza como se nos pueda ocurrir. Haré un orden sistemático según cómo las fui construyendo yo para explicar también el motivo detrás de no quedarme con un modelo y optar por otro, además de los errores comunes y la alternativa para hacerles frente.
I) “MODO SUPER FUERZA NIVEL SAYAYIN DIOS”
Hay un par de eventos que nos resuelven aparentemente el conflicto de manera casi inmediata, para lo cual sólo necesitamos que en la ROCA haya un “Si jugador mira hacia XXXX” y un “Mover: este evento” que bien puede ser un “Mover hacia XXXX” o un “Huir del Personaje” y lo podemos ordenar con excepciones o sin ellas pero el resultado in game será prácticamente el mismo: 
 
El Personaje tocará/se acercará a la ROCA y esta se desplazará rápidamente por el mapa el equivalente a un espacio. Claramente nos resuelve el asunto de querer EMPUJAR ROCAS. Pero no resulta del todo eficaz si lo que queremos es que nuestro juego tenga cierta armonía y realismo. De modo que yo lo he descartado.

Ahora bien, la verdad es que hacer Humano a Son-Gokú no resulta tan complicado. Sólo debemos ir a la parte en EVENTO que nos indica el “Movimiento Autónomo”. Esto está justo por encima de donde colocamos el gráfico y definimos el detonante de nuestro evento. Yo lo he colocado en el 2, pero pueden jugar (e incluso hacerlo más Sayayin Dios seguro a Toriyama le gusta la idea sólo es cosa de probar)


II) “MODO FOFO”

Algo Fofo es definido como algo blando, poco consistente. Para mí un ENGINE FOFO es uno sin gracia, sin brillo, llegas te acercas a la ROCA y se desplaza con tus poderes de Maestra Roca. Hay elementos que siendo accidentales darán forma al ENGINE para quitarle esta poca consistencia y hacerlo sentir más completo.


0) La Pregunta: En los juegos se le suele preguntar al jugador lo que quiere hacer. De modo que si de pronto llega y la ROCA se desplaza como bala frente a él… resulta un poco extraño. La solución: “Mostrar mensaje: Mover Roca?” -> “Opciones: SI/NO” -> “Si: (El ENGINE propiamente tal”/ “No: (Nada)” Y ¡Listo! Nuestro jugador no se llevará ninguna sorpresa.
1) Sonido: Añadirle un efecto sonoro no es complicado y permitirá que al desplazar la ROCA “la escuchemos” y pueda el Jugador sentir que su personaje realmente está desplazando la ROCA.
2) Ignorar si no se puede: Es frecuente que en la primera forma de hacer el ENGINE se repita un error al usar el mover evento y es que quiera el jugador empujarla contra otra ROCA o una pared y el evento nos trabe el juego porque no sabe que hacer. Dar click en la opción “Ignorar si no puede” al momento de crear el mover evento nos facilitará el día, y el Jugador no te posteará “Oye se me traba el juego cuando…”
3) Como dijo el Capitán América “Paciencia”: El jugador empujará la roca y la misma simplemente avanzará y cuando el jugador se mueva para… OH GOD WHY! Un bug frecuente cuando se usa “Si Pulsar tecla” es que si no se espera a que el movimiento acabe la ROCA podrá hacer zig-zags por el mundo. Hay 2 formas de hacer que el jugador sea paciente:
- Colocar un “Esperar a finalizar movimiento” (que está debajo de “Mover evento”) pero que presente el problema de que *cof cof* está bugeado y funciona mal *cof cof*. En palabras de Wecoc
 

“El problema es que no se especifica en ningún sitio qué movimiento tiene que finalizar, y si en el mapa ya hay un evento con ruta, o movimiento en proceso paralelo, esperará indefinidamente y quedará como si se hubiera colgado ese evento.”
 
 
- Usar el comando “Esperar” (Que está en la primera pestaña) y colocar los frames necesarios para que termine. El problema que considero yo es el de saber cuantos frames colocar. 
En Rpg Maker XP 20 frames = cerca de 1 segundo


III) “MODO COSTOSO”


Tal vez a primeras no nos damos cuenta, pero hacer un evento tiene peso, y el peso suma y finalmente determinará los Kb o Mb que nuestros posibles jugadores verán a la hora de querer bajar nuestros proyectos y (lo he visto) un juego muy pesado que no proponga mucho trae consigo menos jugadores. 
Lo que yo llamo “Costoso” un ENGINE que utiliza mucho para hacer muy poco y lo mostraré de la siguiente forma:
“Si PERSONAJE MIRA ABAJO”
* REPRODUCIR EFECTO SONORO: ROCA
* MOVER ROCA HACIA ABAJO
*ESPERAR 15 FRAMES
*EXCEPCION
*FIN
“Si PERSONAJE MIRA ARRIBA”
* REPRODUCIR EFECTO SONORO: ROCA
* MOVER ROCA HACIA ARRIBA
*ESPERAR 15 FRAMES
*EXCEPCION
*FIN
“Si PERSONAJE MIRA DERECHA”
* REPRODUCIR EFECTO SONORO: ROCA
* MOVER ROCA HACIA DERECHA
*ESPERAR 15 FRAMES
*EXCEPCION
*FIN
“Si PERSONAJE MIRA IZQUIERDA”
* REPRODUCIR EFECTO SONORO: ROCA
* MOVER ROCA IZQUIERDA
*ESPERAR 15 FRAMES
*EXCEPCION
*FIN
 
Como podemos ver cumple su objetivo, pero termina primero siendo largo y segundo siendo repetitivo. La solución por lo tanto no es borrar los sonidos ni esperas por ejemplo, si no que en base a lo que he ido aprendiendo sería hacer lo siguiente:

  • Primero: Reconocer lo repetitivo del ENGINE. Si observamos con atención en los cuatro casos muevo la roca, reproduzco un sonido y espero los mismos 15 frames. 
  • Segundo: Ver lo inútil. En los 4 casos tengo condiciones y efectos separadas (por tanto no utilizo las excepciones)
  • Tercero: Pensar las soluciones.
  • Cuarto: Solucionarlo. Algo que yo he hecho es primero cambiar los “Mover abajo,arriba,derecha,izquierda” por un “Huir del personaje” lo que nos permite quitar las grandes diferencias entre las distintas condiciones y efectos y tener en los cuatro casos un “Bloque que se nos repite”

* REPRODUCIR EFECTO SONORO: ROCA
* HUIR DEL PERSONAJE
*ESPERAR 15 FRAMES
 
De este modo sólo tendriamos que pensar una forma a través de la cual conseguir que ese bloque repetitivo ya no sea necesario que lo repitamos, que podamos colocarlo una vez y así hacerlo funcionar en los cuatro casos. Para ello yo utilizo las dos últimas funciones de la lista de la forma que sigue:
“Si PERSONAJE MIRA (DIRECCIÓN 1…2…3…)”
*IR ETIQUETA: HUIR
*EXCEPCION
*FIN
“Si PERSONAJE MIRA (DIRECCIÓN 4)”
*ELEGIR ETIQUETA: HUIR
* REPRODUCIR EFECTO SONORO: ROCA
* HUIR DEL PERSONAJE
*ESPERAR 15 FRAMES
*EXCEPCION
*FIN
 

Así podemos ver que sin necesidad de tener el bloque repetido cuatro veces conseguimos el efecto (si no me creen pruebenlo). Por último, no tengo claro que es “menos peso” si usar excepciones y tener un Si Mira en… como excepción del otro o no, pero puedes hacerlo así o (en caso que no uses las excepciones) deseleccionar la opción al momento de crear/editar las condiciones y efecto y así (a mi ver) quedará mejor ordenado y bastante más sencillo.
“Si PERSONAJE MIRA (DIRECCIÓN 1…2…3…)”
*IR ETIQUETA: HUIR
*FIN
“Si PERSONAJE MIRA (DIRECCIÓN 4)”
*ELEGIR ETIQUETA: HUIR
* REPRODUCIR EFECTO SONORO: ROCA
* HUIR DEL PERSONAJE
*ESPERAR 15 FRAMES
*FIN


 
III) “MODO MULTIROCAS (COSTOSO)”

Del mismo modo que dentro de un mismo evento se nos presenta la situación de costo este costo de MULTIRROCAS ocurre cuando, si bien la ROCA tiene un ENGINE más simplificado en su interior, tenemos tantas rocas que funcionan exactamente igual con el mismo ENGINE que la cantidad hace el costo. 
En mi DEMO actual tengo 3 ROCAS. Todas ellas poseían el mismo ENGINE que mostré en el punto anterior sin embargo no es llegar y empujara la ROCA, era necesario preguntarle al jugador si empujaría la ROCA (como ocurre en Pokemon) lo que hacía que al final utilizar el siguiente ENGINE se tradujera en:
“Si: INTERRUPTOR LOCAL A = OFF”
MOSTRAR MENSAJE: “¿Empuja Roca?”
“Opciones: Si, No”
*Si:
INTERRUPTOR LOCAL A: ON
“Si PERSONAJE MIRA (DIRECCIÓN 1…2…3…4…)”
*IR ETIQUETA: HUIR
*FIN
*No: (NADA)
EXCEPCIÓN:
“Si PERSONAJE MIRA (DIRECCIÓN 1…2…3…)”
*IR ETIQUETA: HUIR
*FIN
“Si PERSONAJE MIRA (DIRECCIÓN 4)”
*ELEGIR ETIQUETA: HUIR
* REPRODUCIR EFECTO SONORO: ROCA
* HUIR DEL PERSONAJE
*ESPERAR 15 FRAMES
*FIN
 
La verdad es que probablemente no se note el tamaño, pero si consideramos que cada DIRECCIÓN era un condiciones y eventos separado se hacía realmente eterno y multiplicado por dos, tres, cuatro, cinco, etc ROCAS… Pesa bastante.
 
Al final la solución vino de la manera más inesperada.
 
Me encontraba trabajando en otro ENGINE que utilizaba las tres rocas de mi DEMO y decidí usar los Eventos comunes. Al final sólo son dos páginas.
EJEMPLO:


 
Y en el evento común el ENGINE tal y cómo lo mostré en la solución al Modo Costoso y sin inciador, así solo con “Llamar Evento Común” se logrará que la ROCA trabaje para nosotros.
 

En resumen, empujar un evento por el mapa es sencillo. Cualquiera puede hacerlo. Pero trabajarlo de modo que no caíga en los problemas que he mencionado y enfrentar cada uno de los desafíos con ingenio es lo que a mi juicio hará la diferencia entre un ENGINE mediocre y uno bueno. No digo excelente, porque aún dista demasiado de serlo.
 
El resto ya queda a la imaginación de cada uno. Tal vez cambiar gráficos para que se vea bien en el juego, cambiar la forma de la roca, colocar un sonido distinto a los predeterminados, meterle que si empujo la roca hayan posibilidades de que salga un enemigo de roca, etc. Las opciones son infinitas. 
 
--------------

A continuación una DEMO bastante ilustrativa, tiene diferentes ROCAS con detonantes distintos, formación distinta, usando más o menos comandos etc etc. (Sirve como "material práctico" para todo lo teórico anterior)

En definitiva, espero les sea de ayuda, traeré más material pronto (?) algún comentario/crítica/algo que no se explicara bien/etc y no olvide su +1 :D

Código:
https://www.mediafire.com/?i7s1g0kzmduwwzy
avatar
Calayax
Soñador
Soñador

0/3

Créditos 678

Gracias : 42

Volver arriba Ir abajo

RPG Maker XP Re: [Tutorial] LAGUIADELNOOB - Empujar rocas

Mensaje por Wecoc el 2017-07-13, 21:23

Quiero mencionar que en algunos casos el comando Huir del personaje no es buena opción. La roca no huye de nosotros, la roca nos quiere y nosotros a ella.


Lo siento era para seguir el estilo del tutorial... o algo xD

Tal como dice el refrán: "Si la roca queda trabada hacia delante pero no a los lados, luego siempre irá a lugares indeseados"
Bueno creo que no es un refrán de verdad pero básicamente quiere decir ésto:



En ese sentido, la versión "costosa" es más correcta: hay que obtener la dirección del personaje y mover la roca conforme a esa dirección, si le es posible.
Solo hay un pequeño problema con esa versión. Normalmente si la roca no se mueve no queremos que el sonido suceda. Para poder comprobar si el sonido debe reproducirse o no hay que ampliar más el engine, comprobando antes de mover el evento si éste puede moverse o no (es decir comprobando su pasabilidad). Eso también permite ahorrarse el Esperar frames si no hay movimiento, aunque se puede dejar igual para simular que el personaje intenta moverla pero sin éxito. No solo eso, diferenciar de antemano eso permite cambiar de gráfico al chara temporalmente si se quiere ponerle un gráfico de esfuerzo o algo por el estilo.

En resumen, la versión costosa no es suficientemente costosa xD

Así es como quedaría si se tiene todo en cuenta, a partir de ahí se puede hacer alguna modificación:

Spoiler:

Llamada de script usada:
ev = $game_map.events[@event_id] ; ev.passable?(ev.x, ev.y, dir)

Ya que estoy paso ésto, que es un versión distinta de ese tipo de engine en la que a parte de arrastrar la bola adelante puedes arrastrarla hacia las demás direcciones.
Engine de bola que rueda, versión de Wecoc
avatar
Wecoc
Administrador
Administrador



Créditos 12104

Gracias : 522

Volver arriba Ir abajo

RPG Maker XP Re: [Tutorial] LAGUIADELNOOB - Empujar rocas

Mensaje por silvanash el 2017-07-13, 23:01

Para comprobar si la roca se ha movido en un Maker sin acceso a scripts, se usan variables:

Al pulsar aceptar, guarda las coordenadas X e Y de la roca en dos variables. Después de eso, compruebas dirección del personaje e intentas mover la roca en dirección opuesta (con un "ignorar si no es posible). Tras intentar hacer el movimiento, resta las nuevas coordenadas X e Y de la roca a las variables y multiplica por -1 si su valor es menor que 0. Suma ambas coordenadas y si el resultado es diferente a 0, la roca se ha movido. En código:

Al pulsar aceptar.
- Var[1] = roca X
- Var[2] = roca Y
- Condiciones: personaje mirar dirección whatever
- - Mover evento roca en dirección opuesta, ignorar si no es posible
- Fin de condiciones
- Var[1] restar roca X
- Var[2] restar roca Y
- Condiciones: var[1] menor que 0
- - Var[1] multiplicar por -1
- Fin de condiciones
- Condiciones: var[2] menor que 0
- - Var[2] multiplicar por -1
- Fin de condiciones
- Var[1] sumar var[2]
- Condiciones: var[1] != 0
- - Efecto sonoro de roca moviéndose
- Excepción
- - Efecto sonoro de error, roca chocando contra muro, whatever
- Fin de condiciones
Fin de evento

La lógica del evento es ésta:

Si un evento no se mueve, sus coordenadas no cambian, así que, al restarlas, el resultado es 0.

pos_x1 = 5 # Posición inicial
pos_x2 = 5 # Posición final
pos_x1 - pos_x2 = 0 # Diferencia de valores

Las coordenadas se convirtieron a valores absolutos (números positivos, aunque técnicamente son números sin signo) para facilitar el trabajo). Si la suma de los valores absolutos de ambos ejes vale 0, es que la roca no se ha movido en ninguno de los ejes.

dif_x = -3; a valores absolutos, dif_x = 3
dif_y = 3; a valores absolutos, dif_y = 3
La suma de ambos da 6.

Si no se convirtiera a valores absolutos, la suma de dif_x y dif_y daría 0 (-3 + 3 = 0), lo que haría que el sistema pensara que la roca no se ha movido cuando sí lo ha hecho.

Si la suma es diferente a 0, es que la roca se ha movido en alguno de los ejes, sea el que sea.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

RPG Maker XP Re: [Tutorial] LAGUIADELNOOB - Empujar rocas

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.