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

Nuestros miembros han publicado un total de 85199 mensajes en 12130 argumentos.

Algunas dudas resueltas por MP

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP Algunas dudas resueltas por MP

Mensaje por Wecoc el 2017-07-08, 18:50

No me gusta demasiado que la gente haga dudas genéricas por MP.
Está bien pedir ayuda sobre algunas cosas por MP si es para casos puntuales de tu proyecto, pero si es algo más genérico es mejor abrir un tema, porque a parte de que te ayudarán más rápido también será ayudada más gente que pueda tener el mismo problema.
De esa premisa parte éste topic, en el que responderé algunas dudas frecuentes que me han llegado por MP.

¿Cómo puedo hacer Parallax Mapping en RPG maker XP?

Qué es el Parallax Mapping:
La idea principal de un Parallax Mapping es la siguiente: Usar los panoramas como parte del mapa, y los tiles reservarlos para las cosas que quedan por encima de los charas.
Esos panoramas se hacen con el Photoshop o programas similares, muchas veces partes de tiles pero sin seguir estrictamente una rejilla de 32 x 32 (vaya, que te permite total libertad) Si buscas en Google Imagenes "RPG maker Parallax Mapping" verás cómo quedan los mapas.

En VX y Ace es totalmente factible ese sistema porque puedes poner la opción en el editor de ver el panorama, y así mapear las pasabilidades y los tiles que quedan por encima del chara fácilmente. En XP es un caos porque no se ve el panorama en el editor, a la hora de definir lo demás vas totalmente a ciegas. Además panorama y tileset scrollean a diferente velocidad, por lo que usar el sistema de parallax mapping en XP requiere retocar scripts y es un jaleo.

Pero lo importante del mapeado de XP es que los tilesets son ilimitados; usando esa ventaja se puede hacer Parallax Mapping sin requerir ningún cambio de script, viendo el mapa en el editor, y controlando la pasabilidad como siempre.

Lo único que hay que hacer una vez se ha creado el gráfico que se usaría como panorama es en vez de eso pasarlo a un tileset tal cual, sabiendo que el único requerimiento es que haga 256px de ancho, así que habrá que recortar la imagen varias veces para que quepa todo. Pasado todo el fondo en el tileset, también debajo se pasan las partes que quedan encima del personaje. Hecho eso luego "mapear" en el programa es un momento. Ese método también te deja la ranura libre de panorama, que puedes usarlo como siempre.

Esa es por lo tanto sin duda la forma más fácil de hacer parallax en RPG maker XP.

¿Cómo obtener el evento actual mediante script?

Hay dos modos, el primero es usar @event_id en la llamada de script en vez de la id normal así que quedará así, le pongo de ejemplo usarlo para comprobar si se está moviendo:
$game_map.events[@event_id].moving?

El segundo modo no es tan elegante ni intuitivo y aprovecha el modo como el intérprete entiende donde aplicar una ruta, siendo -1 el personaje, 0 el evento actual y 1,2,3... el ID del evento. Sería así:
get_character(0).moving?

Hay que comentar que si es un evento común que ha sido llamado desde un evento sigue siendo efectivo para obtener el ID de ese vento, mientras que si ha sido llamado con un objeto o habilidad o desde script, luego @event_id vale 0.

¿Qué diferencias hay entre los distintos tipos de Llamar Script?

Tanto el Llamar Script como la opción Script de Condiciones y Efectos se evalúan sobre la clase Interpreter.
Eso significa que se pueden controlar desde allí las variables de la clase Interpreter, las principales son @map_id, @event_id, @wait_count; y también se puede llamar a sus métodos directamente, lo que a veces en scripts se usa para crear atajos.

El Llamar Script del Mover Evento en cambio se aplica sobre el propio evento o personaje, es decir sobre su clase Game_Event o Game_Player (que ámbas son Game_Character). Eso significa que desde ahí nuevamente se pueden controlar las variables de esa clase, como @pattern, @direction, @animation_id... hay un montón, la mayoría se pueden ver al principio de cada uno de esos scripts. También, nuevamente, se pueden llamar métodos de esas clases.

En resumen, cuando haces un llamar script es como si insertaras tu pedazo de código dentro de una clase de script; Interpreter en los principales y Game_Event o Game_Player en los de Mover Evento / Ruta de Evento.

Creo que además es importante decir que solo Llamar Script parece que soporte más de una línea, pero en realidad en todos los casos se soportan más, solo hay que tener en cuenta que para marcar cambio de línea se usa el carácter ;
Por ejemplo, en Condiciones y Efectos podrías poner en el script:
a = $game_variables[1] ; b = ((a**2)/(a+1)) ; b > 10
Eso sería lo mismo que la versión en una línea:
(($game_variables[1] ** 2) / ($game_variables[1] + 1)) > 10

¿En qué orden se dibujan las capas y prioridades en RPG maker XP?

Capa 1 es la de más abajo, y Capa 3 la de más arriba.
Pese a estar en la capa baja, un tile que tiene prioridad más alta queda por encima de la siguiente capa.

Las pseudo-capas de VX y Ace funcionan más o menos así:
1) Capa 1 - Prioridades 0-5
2) Capa 2 - Prioridades 0-5
3) Capa 3 - Prioridades 0-5


Las capas de XP en cambio estan planteadas al revés:
1) Prioridad 0 - Capas 1-3
2) Prioridad 1 - Capas 1-3
3) Prioridad 2 - Capas 1-3
4) Prioridad 3 - Capas 1-3
5) Prioridad 4 - Capas 1-3
6) Prioridad 5 - Capas 1-3


Por defecto todas las capas se dibujan allí mismo (en la misma viewport), lo que cambia es la Z, y esta se define por la propiedad en el órden que he puesto.
Los charas, el panorama, la fog y el clima también van en la misma viewport, solo cambia la Z de cada cosa para dar el efecto "capa".

Todo eso viene definido en Spriteset_Map.

Ojalá le sirva a alguien alguna de éstas directrices.
avatar
Wecoc
Administrador
Administrador



Créditos 9265

Gracias : 502

Volver arriba Ir abajo

RPG Maker XP Re: Algunas dudas resueltas por MP

Mensaje por Producciones The Golden el 2017-07-08, 19:36

Todo esto me hace preguntar: ¿por qué hay Prioridad y Capas a la vez? con la forma en la que te lo dicen te hace pensar que te da variedad, pero al fin y al cabo es lo mismo ¿no? quieres poner un tile sobre otro: lo pones en la siguiente capa, y listo, ¿no? la única diferencia que hallo es que la prioridad la configuras en el tileset teniendo... ¿cuánto? ¿una o dos "capas" (prioridades) más? mientras que las capas son menos y más prácticas de manejar.

Edit: el pedido ya lo realizó Newold, que por cierto... muchas gracias Newold! saludos.
Eso fue todo... hasta pronto!  Warrior


Última edición por Producciones The Golden el 2017-07-08, 20:07, editado 1 vez
avatar
Producciones The Golden
Veterano
Veterano

0/3

Créditos 640

Gracias : 60

Volver arriba Ir abajo

RPG Maker XP Re: Algunas dudas resueltas por MP

Mensaje por newold el 2017-07-08, 19:47

Pedido:
Mostrar imagen por engine o script que quede estática en un lugar, ya lo he hecho y queda "bien", me muevo y la imagen queda en las coordenadas que indiqué pero se ve que por momentos el juego falla al cargar las coordenadas y la imagen se mueve un tile para el lado en el que se mueve el personaje, parece un error del proceso, el resto va perfectamente.
Eso fue todo... hasta pronto!  Warrior

por código con el comando llamar script:

Código:
$una_variable_global = Sprite.new
$una_variable_global.bitmap = Bitmap.new("Ruta de la imagen")
$una_variable_global.x = 0 # Coordenada x de la imagen
$una_variable_global.y = 0 # Coordenada y de la imagen
$una_variable_global.z = 0 # priorida para mostrar esta imagen antes que otras

y para borrar esa imagen con otro comando de llamar script

Código:
$una_variable_global.dispose

Por supuesto hacer que el evento que ejecute ese código solo lo haga una vez (por ejemplo en la primera página de inicio automático ese código, y después activar interruptor local A. Crear una segunda página en el evento y como condición de inicio poner el interruptor local A)

Con ese código creas una imagen estática donde tu quieras y no se mueve
avatar
newold
Principiante
Principiante

0/3

Créditos 1096

Gracias : 71

Volver arriba Ir abajo

RPG Maker XP Re: Algunas dudas resueltas por MP

Mensaje por Wecoc el 2017-07-08, 21:38

Producciones The Golden:

Sobre la duda que has puesto sobre por qué hay tanto capas como prioridades en el maker.

Es difícil decir un solo motivo porque para poder construir bien los mapas desde el editor y que también todo se vea bien en el juego es básico que existan ambas cosas. Es de esas cosas que cuanto más las piensas más ventajas le ves, pero bueno te dejo las principales que se me ocurren.

Ventajas:
Lo que marca las diferencias de altura entre los tiles son las prioridades pero también se necesita algún modo de controlar dentro de una misma prioridad qué queda encima o debajo, y ahí entran en juego las capas. De ahí que los tiles de suelo de capas superiores queden por encima del tile de suelo de la capa de abajo, pese a tener la misma prioridad.

Además a nivel de editor es mucho más cómodo trabajar con capas tal como vienen montadas, que tener que hacerlo siempre pensando en la prioridad de cada tile.

Eso por otra parte no le quita relevancia a las prioridades, que a la hora de dibujar los tiles como ya se indicó son el modo principal de ordenar su altura.

Las prioridades además son imprescindibles para la interacción entre tiles y eventos. Piénsalo así, si los eventos estuvieran “anclados” en la capa de más abajo para tener solo el suelo debajo suyo, ya no podrías luego usar tiles (o autotiles) de suelo en una capa superior como se hace ahora, porque quedarían encima del evento.

La pasabilidad y el terreno se calculan usando ambas cosas de modo combinado, para esos cálculos los dos parámetros son necesarios a la vez.

En definitiva, sería muy difícil mapear si no existieran ambas cosas de modo separado. Por eso incluso en el sistema de pseudo-capas de los maker superiores siguen estando ambas.

Por cierto, por si fuera poco el lío, la “Z de pantalla” de eventos y tiles también depende de la coordenada Y. Eso es importante para poder hacer que la prioridad 1 quede encima o debajo del evento según si se encuentra delante o detrás. Nuevamente si el mapa solo fuera por capas eso difícilmente sería viable.

Sobre la duda que ha citado newold.

No la entiendo mucho... Parece que te la ha solucionado, así que bien por tí. A mí lo de crear un sprite mediante una global en Llamar Script nunca me gustó mucho, porque ese sprite no está siendo updateado. Hay quien dice que cuando creas un sprite hay que updatearlo siempre, sea estático o no, porque si no luego el maker a veces hace cosas raras (como borrarlo pasados unos frames). Hasta donde yo sé eso es falso y por ejemplo el sprite de la imagen de título no se updatea xD pero updatearlo óbviamente siempre te da más opciones luego, como cambiarle su visibilidad, posición y esas cosas cuando quieras.

Puedes en otro evento en proceso paralelo updatear el sprite siempre que la global no valga nil, o bien crearlo por script en una clase a parte.
Yo lo que haría en éste caso concreto sería crear una variable dentro de $game_system que indique si éste sprite está activo o no. Luego crearía el sprite en Scene_Map dependiendo de esa variable, o bien mejor dicho lo crearía a priori nada más iniciar Scene_Map y la variable controlaría su visiblidad dentro del update. De ese modo el sprite solo se ve cuando estás en el mapa y no en las escenas (creo que es lo que necesitas) y además queda guardado su estado cuando guardas partida y vuelves a cargarla.
avatar
Wecoc
Administrador
Administrador



Créditos 9265

Gracias : 502

Volver arriba Ir abajo

RPG Maker XP Re: Algunas dudas resueltas por MP

Mensaje por Producciones The Golden el 2017-07-08, 21:43

Bien, gracias por todo... ahora si que le veo algo útil a las Prioridades XD.
Respecto a la imagen... updatearla o no... bah, en verdad mi duda es si no hay forma de hacerlo por engine, ya que muestro una imagen por engine y queda ahí estática mas al moverme se mueve sola un poco, como dije antes, como si hubiera un problema mientras te mueves para localizar las coordenadas o el evento, pero creo que me conformaré con hacerlo vía script...
Repito, gracias, y quitaré mi firma para no spamear devuelta en tu post. Saludos.
avatar
Producciones The Golden
Veterano
Veterano

0/3

Créditos 640

Gracias : 60

Volver arriba Ir abajo

RPG Maker XP Re: Algunas dudas resueltas por MP

Mensaje por Wecoc el 2017-08-12, 12:50

Nuevamente, me han hecho un pedido interesante por MP así que lo pongo aquí.
Intentad no hacerme trabajar más de lo necesario, haced los pedidos en el foro porfa n_n"
En fin, al menos éste fue muy simple así que da igual. El pedido fue parar absolutamente todo el mapa cuando está funcionando la ventana de mensaje. Es un arreglo que puede ser interesante en varios proyectos.

Hay que usar éste pequeño script. Es compatible con todo, de hecho funciona en XP, VX y Ace.

Código:
#==============================================================================
# ** [XP/VX/Ace] Message Map Freeze
#==============================================================================

for Klass in [Game_Map, Spriteset_Map, Spriteset_Battle]
  class Klass
    alias message_window_freeze_upd update unless $@
    def update
      return if $game_temp.message_window_showing
      message_window_freeze_upd
    end
  end
end

Como ésto como aporte es algo soso os paso también éste script que hice, son compatibles entre ellos y todo. Éste permite acelerar el juego en modo Debug si pulsas una tecla (en el ejemplo F5), lo cual puede venir bien para testear. Lo acelera solo Scene_Map y Scene_Battle pero si miráis el código veréis que se puede poner en más escenas si os interesa.

Código:
#==============================================================================
# ** [XP/VX/Ace] Debug Speed Up
#==============================================================================

# Velocidad acelerada n veces
DEBUG_SPEED_SPEED = 3
# Opción "Mantener pulsado" (recomendado)
DEBUG_SPEED_PRESS = true
# Tecla a pulsar
DEBUG_SPEED_KEY = Input::F5

for Klass in [Scene_Map, Scene_Battle]
  class Klass
    unless $@
      alias debug_speed_ini initialize
      alias debug_speed_upd update
    end
    def initialize
      debug_speed_ini
      @speed_factor = 1
    end
    def update
      return debug_speed_upd unless $DEBUG || $TEST
      @speed_factor.times {debug_speed_upd}
      if DEBUG_SPEED_PRESS == false
        if Input.trigger?(DEBUG_SPEED_KEY)
          array = [1, 2, 3, 5, 10, DEBUG_SPEED_SPEED]
          array.uniq! ; array.sort!
          index = array.index(@speed_factor)
          new_index = (index + 1) % array.size
          @speed_factor = array[new_index]
          print "Speed Factor: #{@speed_factor}"
          return
        end
      end
      @speed_factor = Input.press?(DEBUG_SPEED_KEY) ? DEBUG_SPEED_SPEED : 1
    end
  end
end

En realidad ámbos son dos snippets bien sencillos pero viene bien tenerlos.
avatar
Wecoc
Administrador
Administrador



Créditos 9265

Gracias : 502

Volver arriba Ir abajo

RPG Maker XP Re: Algunas dudas resueltas por MP

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.