¡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 3786 miembros registrados.
El último usuario registrado es DarkLink543.

Nuestros miembros han publicado un total de 82623 mensajes en 11716 argumentos.
Navega con Google Chrome
[DESCARGA]

[Colectivo][XP] Bug del acantilado

 :: RPG Maker :: Scripts

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [Colectivo][XP] Bug del acantilado

Mensaje por Wecoc el 2017-02-16, 11:12

Hace tiempo que no hacemos un colectivo entre scripters. El que os propongo que solucionemos entre todos ésta vez es todo un reto, porque es un bug interno del maker, y afrontarlo es todo un rompecabezas.

El problema es que hay acantilados "altos" por los que puedes pasar por detrás (o debajo) y acantilados "bajos" por lo que puedes pasar por encima, pero lo lógico, que sería que según la posición en la que esté el chara (tanto personaje como eventos) ocurra una situación o la otra, no es viable con las opciones que te da el maker.



Ideas de cómo afrontarlo y códigos para avanzar son bienvenidos, mi idea inicial es hacerlo por sustitución de tiles según desde dónde llegues a éste, pero hay muchos contratiempos.

Enlazo aquí el material básico:

Spoiler:





¡Venga, animaos a participar, por el bien del maker! ;D
avatar
Wecoc
Administrador
Administrador



Créditos 8885

Gracias : 424

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por silvanash el 2017-02-16, 11:30

La universidad me está matando, así que no tengo tiempo para revisar el funciomiento del tilemap, pero yo cambiaría la prioridad de los tiles de acantilado y modificaría su pasabilidad si el jugador está sobre ciertos tiles. Habría que tener identificados esos tiles en algún sitio, pero la idea es que si el jugador pisa un tile de "infra-acantilado", los tiles de acantilado suben de prioridad e "invierten" sus pasabilidades. Eso de invertirlas sería algo así:

Si prohibido pasar por arriba
-> Permitido pasar por abajo
-> Prohibir pasar por arriba
Fin

Y eso para todas las direcciones, pero usando siempre que sea pasable como condición. O se hace una hash con las IDs de los tiles y sus pasabilidades. Una vez más, no tengo claro cómo funciona el tilemap a nivel interno.

Si el personaje pisa un tile de "supra-acantilado", se vuelven a cambiar prioridades y pasabilidades de los tiles.

Y ahora marcho a estudiar.

Edito: acabo de darme cuenta de otra cosa. El tile problemático es el de la cima del acantilado, y para acceder por primera vez a ese tile hay que cumplir la condición de que el personaje esté mirando en la dirección adecuada.


Para que el personaje quede por debajo el acantilado, el personaje tiene que estar mirando hacia abajo. Luego puede moverse hacia la derecha/izquierda, pero para acceder al acantilado, ha tenido que mirar hacia abajo en algún momento. Eso o el mapa tiene una fila de esos tiles de acantilado de lado a lado de la pantalla, así que el jugador no tiene que caminar hacia abajo para meterse ahí.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1537

Gracias : 208

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por Ledai el 2017-02-16, 12:07

¿¿Y qué tal comprobando el tiles que tiene debajo el propio acantilado??

Normalmente en los tiles de acantilado del XP, los que tapan al personaje tienen bordes irregulares que trabajan con opacidad, por lo que se hace necesario usar debajo un tiles normal de suelo, por lo que hay dos tiles, uno sobre otro... uno normal, y el otro con prioridad ¿Y si se logra comprobar de algún modo que esos dos tiles están uno sobre otro para poder identificar los acantilados de algún modo y luego ya con lo que dice Silva o Wecoc cambiar la prioridad y el paso para corregirlo...  Es solo una idea para identificarlos sin tener que configurar un script por parte del makero. No sé si es una buena idea ya que no soy scipter, pero al menos es lo primero que se me ha ocurrido XDD Si no sirve de nada la idea o es imposible de llevar a cabo ignoren el comentario ;)
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 2450

Gracias : 161

http://ahurallg.blogspot.com.es/

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por Wecoc el 2017-02-16, 13:02

Ledai: Pese a que identificarlos sin tener que configurar los ID es interesante no creo que sea prioritario. Lo de comprobar el tile de abajo no es viable porque no solo ocurre ahí, a parte que hay muchos posibles tiles (y autotiles) de "abajo". Sé que las ID de los tiles del tileset no son nada óbvias a la hora de configurarlo, pero tengo una forma de obtenerlas rápidamente, la postearé más adelante. De momento en el primer post ya hay una imagen con las ID indicadas.

Silvanash: Lo que dices está bien, pero me parece más sencillo cambiar un tile por otro en la coordenada del mapa que cambiarle a ese tile las propiedades, porque al fin y al cabo tiene que afectar solo a esa coordenada ya que habrá distintos eventos en el mapa y en cada uno el efecto deberá ser aplicado individualmente. A parte de eso no se puede cambiar la prioridad de un tile por script sin modificar el Tilemap, así que es mejor cambiar de tile.

De hecho otra "pieza del rompecabezas" es la interacción con eventos, como qué pasaría en una situación así:



Supongo que cuando el evento está debajo lo suyo sería que su Z valiera 0 de modo similar al engine que hice de trampa con pinchos.

Si te transportas a un tile conflictivo (o un evento se inicia en un tile conflictivo) también debería haber un modo de indicar si está arriba o abajo.

Por ahora he hecho un script para identificarlos mediante configuración:
Código:
module TilesetData
  
  DoubleTiles = {}
  
  DoubleTiles[51] = {}
  DoubleTiles[51]['UL'] = [[392, 400]]
  DoubleTiles[51]['UC'] = [[393, 401]]
  DoubleTiles[51]['UR'] = [[394, 402]]
  DoubleTiles[51]['BL'] = [[395, 403]]
  DoubleTiles[51]['BR'] = [[396, 404]]
  
  module_function
  def is_cliff?(tile_id)
    return false if !DoubleTiles.keys.include?($game_map.tileset_id)
    DoubleTiles[$game_map.tileset_id].values.any? do |array|
      array.any? do |pair|
        return true if pair.include?(tile_id)
      end
    end
    return false
  end
  
  def get_type(tile_id)
    for k in DoubleTiles[$game_map.tileset_id].keys
      array = DoubleTiles[$game_map.tileset_id][k]
      array.any? do |pair|
        return k if pair.include?(tile_id)
      end
    end
    return nil
  end
end

class Game_Map
  def tileset_id
    @map.tileset_id
  end
  
  #def passable?(x, y, d, self_event = nil)
  #  tile_id = @map.data[x, y, 1]
  #  if TilesetData.is_cliff?(tile_id)
  #    p TilesetData.get_type(tile_id)
  #  end
  #  return true
  #end
end
avatar
Wecoc
Administrador
Administrador



Créditos 8885

Gracias : 424

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por teivko el 2017-02-16, 19:05

A ver. Yo es que aún soy noob respecto a Ruby y RGSS. Pero si estuviera programando algo similar en Unity por ejemplo, tendría tres objetos. Personaje, evento y tile en este caso. Estos tres tienen sus ids, coordenadas respecto al mapa y otras propiedades. Como existe algo llamado prioridad siendo un juego en 2D esto debe referirse al eje Z, no?

Entonces mi pregunta, al dibujar el escenario no se puede mirar los ejes Z (prioridad) tanto de eventos, tiles y carácter y dibujarlos por este orden(o sea, la prioridad)? Y luego, hacer un método que en medio del juego se pueda cambiar la prioridad de cualquiera de estos (eventos y jugadores) para que a la hora de dibujar se dibujen por su prioridad? Ahora, como hacemos para saber si el personaje o evento tiene que tener una prioridad u otra? Mi idea es algo similar a la de silvanash y Wecoc, seria hacer un metodo que compruebe el movimiento (o sea coordenadas de origen y finales) y dependiendo de estar hacer una cosa u otra. Lo escribo en pseudocodigo que quizás se me entienda mejor xDDD

Preparación:

Se necesita un hash, array, pila,cola, lista XD lo que sea para almacenar los ids de los tileset conflictivos, es decir, aquellos en los que se puede estar por arriba o por abajo.

Se necesita almacenar para todos los eventos moviles y el character una variable con sus coordenadas
anteriores, para saber desde donde vino.

Ejecución:

- Bucle que recorra todos los eventos y character del mapa:
- Si se ha entrado en contacto con un tile del mapa con id de conflictivo entonces:
- Se calcula desde donde se vino gracias a las coordenadas
- Si se vino desde la derecha o desde la izquierda:
- Entonces no se le cambia el eje Z al evento/character
- Si se vino desde arriba y el eje Z del evento/character es MAYOR que la del tile conflictivo:
- Entonces se pone el eje Z con un valor menor al del tile
- Si se vino desde abajo y el eje Z del evento/character es MENOR que la del tile conflictivo:
- Entonces se pone el eje Z con un valor mayor al del tile
- Final del bucle que recorre todos los eventos y el character

Espero que se me entienda, porque voy en el metro y entre el ruido y el cansancio del trabajo me cuesta centrar mis ideas. Tambien estoy pensando en otros escenarios donde a un tile de acantilado superior se entre por abajo y un tile inferior se entre por encima, pero creo que no se daria ese caso no?

Saludos.
avatar
teivko
Iniciado
Iniciado

0/3

Créditos 40

Gracias : 3

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por Wecoc el 2017-02-16, 19:40

Los tiles van por prioridad (altura), pero los eventos van por Z (screen_z). Se puede modificar el método screen_z de los eventos libremente, pero no la prioridad de los tiles.
Aún así a grandes rasgos lo que dices ya es como dijimos de afrontalo. Lo del bucle no hace falta porque se están mirando los movimientos de los charas, y efectuando cosas según si se mueve a un lado u otro; digamos que el RPG maker ya hace eso en bucle. Ten en cuenta que se habló mucho de las direcciones de arriba y abajo y hacer algo respecto cual sea, pero las demás direcciones también entran en juego de igual forma, por ejemplo aquí:



Cuando estás arriba y te mueves hacia la derecha o izquierda tu posición de "arriba" también se debe preservar si el siguiente tile sigue estando arriba, mientra que si estás abajo lo mismo.



Hablando en términos de entrada y salida, hay que hacer la acción correcta según por donde se entre al tile conflictivo, según el tipo de tile que sea dentro de los 5 conflictivos descritos y según el estado actual arriba/abajo del chara en caso de ya estar en un tile conflictivo.

He estado hablando con Eron y entre los dos hemos avanzado un poco más, ahora la pasabilidad del mapa se puede mirar en los tiles de arriba o en los de abajo (la cuestión será cuando usar cual), Eron añadió lo de la Z y lo de distinguir entre transportar al tile de arriba o al de abajo (por defecto el de arriba). De lo de hacer los cambios de tile por lo tanto aún no hay nada hecho.

También me hizo notar otras cosas que habrá que tener en cuenta:
1 - Trigger de los eventos
2 - Efecto bush (hierba alta)
3 - Comando Saltar

Código:
module TilesetData
  
  DoubleTiles = {}
  
  DoubleTiles[51] = {}
  DoubleTiles[51]['UL'] = [[392, 400]] # UL = Up Left
  DoubleTiles[51]['UC'] = [[393, 401]] # UC = Up Center
  DoubleTiles[51]['UR'] = [[394, 402]] # UR = Up Right
  DoubleTiles[51]['BL'] = [[395, 403]] # BL = Border Left
  DoubleTiles[51]['BR'] = [[396, 404]] # BR = Border Right
  
  module_function
  
  # Comprobar si un tile es un cliff
  def is_cliff?(tile_id)
    return false if !DoubleTiles.keys.include?($game_map.tileset_id)
    DoubleTiles[$game_map.tileset_id].values.any? do |array|
      array.any? do |pair|
        return true if pair.include?(tile_id)
      end
    end
    return false
  end
  
  # Si el tile es un cliff, obtener su tipo: UL, UC, UR, BL o BR
  def get_type(tile_id)
    for k in DoubleTiles[$game_map.tileset_id].keys
      array = DoubleTiles[$game_map.tileset_id][k]
      array.any? do |pair|
        return k if pair.include?(tile_id)
      end
    end
    return nil
  end
  
  # Obtener el par de ID que contienen el tile
  def get_pair(tile_id)
    type = self.get_type(tile_id)
    return [] if type == nil
    for k in DoubleTiles[$game_map.tileset_id].keys
      array = DoubleTiles[$game_map.tileset_id][k]
      for pair in array
        return pair if pair.include?(tile_id)
      end
    end
    return []
  end
end

class Game_Map
  
  # Pasabilidad del mapa. Funciona como siempre pero con nuevo parámetro
  # top_cliff, que hace que frente a un tile conflictivo se tenga en cuenta
  # o bien el de arriba (true) o bien el de abajo (false)
  
  def passable?(x, y, d, self_event = nil, top_cliff = true)
    return false unless valid?(x, y)
    bit = (1 << (d / 2 - 1)) & 0x0f
    ## Por ahora no afecta a los eventos
    for event in events.values
      if event.tile_id >= 0 and event != self_event and
         event.x == x and event.y == y and not event.through
        if @passages[event.tile_id] & bit != 0
          return false
        elsif @passages[event.tile_id] & 0x0f == 0x0f
          return false
        elsif @priorities[event.tile_id] == 0
          return true
        end
      end
    end
    for i in [2, 1, 0]
      tile_id = data[x, y, i]
      ## ---- Aquí está el cambio -----
      if TilesetData.is_cliff?(tile_id)
        pair = TilesetData.get_pair(tile_id)
        tile_id = pair[(top_cliff ? 0 : 1)] if pair.size > 0
      end
      ## ------------------------------
      if tile_id == nil
        return false
      elsif @passages[tile_id] & bit != 0
        return false
      elsif @passages[tile_id] & 0x0f == 0x0f
        return false
      elsif @priorities[tile_id] == 0
        return true
      end
    end
    return true
  end
  
  # Atajo para el ID del tileset actual
  def tileset_id
    @map.tileset_id
  end
end

class Game_Character
  
  attr_reader :top_cliff
  
  # Inicio del chara con la propiedad top_cliff desactivada
  # Éste se activará solo si está encima (arriba) de un tile conflictivo
  alias top_cliff_ini initialize unless $@
  def initialize(*args)
    top_cliff_ini(*args)
    @top_cliff = false
  end
  
  # Screen Z pero si el chara tiene la priopiedad top_cliff su Z es la del tile
  alias top_cliff_z screen_z unless $@
  def screen_z(*args)
    if @always_in_top != true && @top_cliff == true
      z = (@real_y - $game_map.display_y + 3) / 4 + 32
      return z + 32
    end
    top_cliff_z(*args)
  end
  
  # moveto teletransporta el chara como siempre, pero si el tile es conflictivo,
  # por defecto se transporta encima
  alias top_cliff_moveto moveto unless $@
  def moveto(x, y, top_cliff = true)
    top_cliff_moveto(x, y)
    @top_cliff = false
    if top_cliff == true
      for tile_id in current_tiles
        if TilesetData.is_cliff?(tile_id)
          @top_cliff = true
        end
      end
    end
  end
  
  # Atajo para obtener todos los tiles que está pisando el chara, por órden
  def current_tiles
    t0 = $game_map.data[x, y, 0]
    t1 = $game_map.data[x, y, 1]
    t2 = $game_map.data[x, y, 2]
    return [t0, t1, t2]
  end
end

class Game_Player < Game_Character
  
  # moveto se reescribe en Game_Player, por eso es necesario volver a
  # reescribirlo tras los últimos cambios hechos en Game_Character
  def moveto(x, y, top_cliff=true)
    super(x, y, top_cliff)
    center(x, y)
    make_encounter_count
  end
end
avatar
Wecoc
Administrador
Administrador



Créditos 8885

Gracias : 424

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por Eron el 2017-02-17, 08:09

Me temo que encontré una paradoja. Hasta ahora se está planteando de modo que se mira el conjunto de capas para mirar si entra o sale de un tile conflictivo.
Eso puede dar problemas en casos más liados como éstos:



Pensé que para evitarlo se podría mirar capa por capa individualmente y no en conjunto pero eso es peor tal como van las capas del XP, porque constantemente se están haciendo cosas como éstas:



Así que cada caso es peor que el otro por un motivo distinto. Empiezo a entender por qué Enterbrain desechó eso x'DD

Por suerte los casos "excepcionales" éstos no son muchos y se basan siempre en lo mismo, seguramente se pueda crear una condición en el propio script si en un mismo tile hay más de un "tile conflictivo" de éstos... Me cuesta imaginar cómo deberá quedar la cosa x'D
avatar
Eron
Soñador
Soñador

0/3

Créditos 1254

Gracias : 44

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por Wecoc el 2017-02-18, 17:22

Cierto... Entonces en vez de mirar si está arriba o abajo hay que mirar "en qué plano está".
He pensado en algo así para la variable que mira la posición, que llamé @cliff_plane:
nil si no está en tile conflictivo, 0 si está abajo, 1 si está arriba y si aún hay otro más arriba entonces sería 2 si está arriba del todo.
No creo que haya ningún caso en el que se requiera aún otro "plano".

Aquí un pequeño avance siguiendo esa idea, aunque el script sigue estando muy verde:

Código:
module TilesetData
  
  DoubleTiles = {}
  
  DoubleTiles[51] = {}
  DoubleTiles[51]['UL'] = [[392, 400]] # UL = Up Left
  DoubleTiles[51]['UC'] = [[393, 401]] # UC = Up Center
  DoubleTiles[51]['UR'] = [[394, 402]] # UR = Up Right
  DoubleTiles[51]['BL'] = [[395, 403]] # BL = Border Left
  DoubleTiles[51]['BR'] = [[396, 404]] # BR = Border Right
  
  module_function
  
  # Comprobar si un tile es un cliff
  def is_cliff?(tile_id)
    return false if !DoubleTiles.keys.include?($game_map.tileset_id)
    DoubleTiles[$game_map.tileset_id].values.any? do |array|
      array.any? do |pair|
        return true if pair.include?(tile_id)
      end
    end
    return false
  end
  
  # Si el tile es un cliff, obtener su tipo: UL, UC, UR, BL o BR
  def get_type(tile_id)
    for k in DoubleTiles[$game_map.tileset_id].keys
      array = DoubleTiles[$game_map.tileset_id][k]
      array.any? do |pair|
        return k if pair.include?(tile_id)
      end
    end
    return nil
  end
  
  # Obtener el par de ID que contienen el tile
  def get_pair(tile_id)
    type = self.get_type(tile_id)
    return [] if type == nil
    for k in DoubleTiles[$game_map.tileset_id].keys
      array = DoubleTiles[$game_map.tileset_id][k]
      for pair in array
        return pair if pair.include?(tile_id)
      end
    end
    return []
  end
end

class Game_Map
  
  # Pasabilidad del mapa. Funciona como siempre pero con nuevo parámetro
  # top_cliff, que hace que frente a un tile conflictivo se tenga en cuenta
  # o bien el de arriba (true) o bien el de abajo (false)
  
  def passable?(x, y, d, self_event = nil, top_cliff = true)
    return false unless valid?(x, y)
    bit = (1 << (d / 2 - 1)) & 0x0f
    ## Por ahora no afecta a los eventos
    for event in events.values
      if event.tile_id >= 0 and event != self_event and
         event.x == x and event.y == y and not event.through
        if @passages[event.tile_id] & bit != 0
          return false
        elsif @passages[event.tile_id] & 0x0f == 0x0f
          return false
        elsif @priorities[event.tile_id] == 0
          return true
        end
      end
    end
    for i in [2, 1, 0]
      tile_id = data[x, y, i]
      ## ---- Aquí está el cambio -----
      if TilesetData.is_cliff?(tile_id)
        pair = TilesetData.get_pair(tile_id)
        tile_id = pair[(top_cliff ? 0 : 1)] if pair.size > 0
      end
      ## ------------------------------
      if tile_id == nil
        return false
      elsif @passages[tile_id] & bit != 0
        return false
      elsif @passages[tile_id] & 0x0f == 0x0f
        return false
      elsif @priorities[tile_id] == 0
        return true
      end
    end
    return true
  end
  
  # Atajo para el ID del tileset actual
  def tileset_id
    @map.tileset_id
  end
end

class Game_Character
  
  attr_reader :cliff_plane
  
  # Inicio del chara con la propiedad top_cliff desactivada
  # Éste se activará solo si está encima (arriba) de un tile conflictivo
  alias top_cliff_ini initialize unless $@
  def initialize(*args)
    top_cliff_ini(*args)
    @cliff_plane = nil
  end
  
  # Screen Z pero si el chara tiene la priopiedad top_cliff su Z es la del tile
  alias top_cliff_z screen_z unless $@
  def screen_z(*args)
    if @always_in_top != true && @cliff_plane != nil
      ## Habría que cambiar ésto más acorde a cada posible plano
      z = (@real_y - $game_map.display_y + 3) / 4 + 32
      return z + 32
    end
    top_cliff_z(*args)
  end
  
  # moveto teletransporta el chara como siempre, pero si el tile es conflictivo,
  # por defecto se transporta encima
  alias top_cliff_moveto moveto unless $@
  def moveto(x, y, top_cliff = true)
    top_cliff_moveto(x, y)
    @cliff_plane = nil
    for i in current_tiles.keys
      tile_id = current_tiles[i]
      if TilesetData.is_cliff?(tile_id)
        ## Habría que cambiar ésto más acorde a cada posible plano
        if top_cliff == true
          @cliff_plane = 1
        else
          @cliff_plane = 0
        end
      end
    end
  end
  
  # Atajo para obtener todos los tiles que está pisando el chara, por órden
  def current_tiles
    t0 = $game_map.data[x, y, 0]
    t1 = $game_map.data[x, y, 1]
    t2 = $game_map.data[x, y, 2]
    return {0 => t0, 1 => t1, 2 => t2}
  end
end

class Game_Player < Game_Character
  
  # moveto se reescribe en Game_Player, por eso es necesario volver a
  # reescribirlo tras los últimos cambios hechos en Game_Character
  def moveto(x, y, top_cliff = true)
    super(x, y, top_cliff)
    center(x, y)
    make_encounter_count
  end
end

¡Venga, que entre todos podemos!
avatar
Wecoc
Administrador
Administrador



Créditos 8885

Gracias : 424

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por orochii el 2017-02-18, 21:19

Como no sé en qué o cómo ayudar y no creo tener tiempo, intentaré compartir una anécdota que tuve al respecto con Drekirökr...

Cuando usaba RM2k3, había solucionado esto con un simple cambio de chipset (tileset). Y a grandes rasgos funcionaba (excepto ciertas cosas que ya diré al final).
En RMXP intenté hacer lo mismo, y en su mayor parte funcionó, excepto a un ligero contratiempo debido al workaround que tuve que hacer. Puedo cambiar los datos de colisiones y demás del tileset, pero para que la prioridad del terreno surta efecto, los tiles necesitan refrescarse. Yo en mi inexperiencia hice lo peor que podría hacerse: matar el tileset entero y recrearlo x'D. Lo hice así ya que la clase Tileset está oculta y no tenía (ni tengo) la mínima idea de cómo alterar un tileset ya creado.

Pero bueno, esa idea funciona. ¿Problema? Eventos. Si un NPC está en uno de estos tiles va a recordarnos los horrores de la existencia (?).

==
Tras todo esto, concluí que la solución real era repensar el sistema y hacer soporte de altitud xD. Cosa que no voy a hacer, prefiero rediseñar áreas o simplemente tener 1-2 mapas desérticos si voy a usar este efecto. :'D

Salut!
avatar
orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6232

Gracias : 300

http://ragnarokrproject.com/

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por Wecoc el 2017-02-18, 21:33

Eron: Te recomiendo postear tus avances en el tema por aquí en vez de pasármelos por privado para que la gente se entere, al fin y al cabo es un colectivo.

Eron por MP escribió:Otro problema Wecoc, supón que el cliff es alto y puede haber árboles tal como se ve en el mapeado que he hecho, para arreglar esas cosas muchas veces en la prioridad del cliff se le pone 5 en vez de 1 aunque luego hay que asegurarse que no puedes llegar a éste desde abajo... pero en éste sistema eso es inviable, al hacer cambio de gráfico del tile se vería el error, a parte de otros problemas de alturas.



¿No sería mejor hacer otra capa o varias en Spriteset_Map con los acantilados altos y pasar el chara de una capa a otra según donde esté, similar a ese script que subiste hace tiempo? (creo que fuiste tú, no recuerdo el nombre) Al menos me suena que usaba algo similar a lo que digo, ¿no? =/

Edt: Lo encontré; RAMP Engine.

Sir Orochii: Rebienvenido, viejo amigo. Lo de cambiar de tileset enteramente ya se descartó por el problema de interacción con otros eventos... y con tiles con otras prioridades que puedan quedar por encima/debajo. El planteamiento actual es hacer más o menos lo mismo pero en el tile conflictivo. Pero sí, hay muchas pegas por todos lados.

Orochii escribió:Tras todo esto, concluí que la solución real era repensar el sistema y hacer soporte de altitud xD

Parece que ámbos llegasteis más o menos a la misma conclusión. La verdad, no consideré tener en cuenta usar un sistema como el RAMP Engine, era verdaderamente complejo (por eso no tuvo demasiado éxito, para no decir nulo...) pero quizá podría funcionar. Haré pruebas con eso, a ver si podéis hacer algunas también. Es una modificación mucho más troncal de los Spriteset y del mapa de lo que tenía pensado pero viendo la complejidad del bug quizá sea la clave para resolverlo xDD

Cualquier otro avance o idea que tengáis mantenedme al corriente por aquí.
avatar
Wecoc
Administrador
Administrador



Créditos 8885

Gracias : 424

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por orochii el 2017-02-18, 22:28

Sí, esto me recuerda justo al RAMP, y concuerdo xD...

Voy a dejar esto aquí, es una idea que me ha venido a la mente...

Lo ideal sería que con la misma información que trae el maker de prioridades en los tiles, se setee lo necesario. Osea, que prioridad *5 haga que ese tile esté a 5 tiles de altura. Y quiza descartar un poco de "features"...

Luego usar un terrainID para hacer "tiles escalera", que te permitan ir por ejemplo, de tiles prioridad 0 a tiles prioridad 1 y viceversa. El "tile escalera" (y por tanto, el jugador) necesitaría estar en la prioridad adecuada para permitir subir (o bajar si no se quiere permitir que caiga).

Por último, otra propiedad sería si el tile deja pasar por debajo o no. Creo que esto puede ser simplemente con el bloqueo de toda la vida. Si un tile bloquea el paso,

Un mockup de la idea.


Y aquí otra visualización de cuál sería la lógica detrás.


==
Pero en fin, esto es otra idea creo yo xD.

Pros: No necesita archivos extras por mapa, y no hay que tocar el dibujado del mapa.
Contras: Hay que reescribirlo todo (osea incompatibilidades), y necesita múltiples copias de un mismo tile (varias escaleras iguales con distinta prioridad, por ejemplo).

Por ahora no debo ni abrir el maker porque estoy en finales de verano xDD, pero ahorita tengo una semana de "vacaciones". Si no pierdo el hype intento hacer algo. :'D o debería mejor usar el tiempo en Drekirökr

Salut!
avatar
orochii
Caballero Shiro
Caballero Shiro

0/3

Créditos 6232

Gracias : 300

http://ragnarokrproject.com/

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por Wecoc el 2017-02-21, 09:55

Eso implicaría prácticamente tener 6 tiles iguales de cada, cada uno con su prioridad cambiada, y además la pasabilidad normal debe seguir siendo viable y lo que dices la reescribe para interpretarla completamente distinta. Aunque bueno en vez de pasabilidad se podría asignar con el punto ese que se pone en las mesas para hablar a través... Pero sería mucho más difícil mapear y montar los tiles. Estás demasiado loco xD No deja de ser muy interesante, quizá para otro sistema de mapeado para el RPG maker, pero en éste caso creo que no es lo que buscamos.

El RAMP Engine tiene un script adicional para añadir la propiedad de altura (Height Add-on) pero no creo ni que haga falta en éste caso, RAMP solo es necesario para el cambio de viewport dinámico en esos tiles y los charas. Haré alguna prueba con éste.
avatar
Wecoc
Administrador
Administrador



Créditos 8885

Gracias : 424

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por AsFzKakarotto el 2017-04-06, 16:28

Hola amigos, quisiera en esta ocasión dar una ayudita respecto a este tema, algunos quizás ya conozcan este llamado de script y otros quizás no. Volviendo a lo que es el problema en si, con este método no se  va a solucionar un 100% pero quizás pueda ayudar a solucionar algo este BUG….
Comencemos:  Yo en mi caso añado 2 tilesets del mismo mapa (Copiar y pegar) en algunos casos puede que hasta 3 o más pero eso es para los que cambian la prioridad y pasibilidad en cada mapa de formas diferentes de una a otra, la cosa es que ustedes al usar este llamado de script:   $game_map.replace_tileset(X)  pueden pasar de un mapa a otro de una forma muy desapercibida y a su vez cambiando de tileset permitiendo que en ese otro tileset se pueda cambiar la pasibilidad y prioridad según sean sus necesidades y no solo eso, ustedes pueden volver a usar nuevamente el llamado de script para que se vuelva a colocar la pasibilidad y prioridad a como lo habían dejado con el tileset anterior. Me explico… ustedes pueden caminar por el mapa pasas por encima del objetivo y de repente al toparse con un evento (o como les sea más practico) se cambia de tileset para poder pasar por debajo de dicho objetivo y cuando vuelvan nuevamente a pasar por el evento se cambie el tileset para pasar nuevamente por encima de dicho objetivo.
Lo Malo: A excepción del héroe, todos los demás eventos en el mapa usados gráficamente no pueden estar en un tile que cambie de prioridad o pasibilidad, lo e intentado con un ciudadano y se le corta la cabeza XD… pero con un poco de ayuda del comando condiciones y efectos y algún programa editor de imágenes, añadiendo más de 2 tileset se puede añadir la cabeza en uno de los tileset con el programa editor y según las condiciones se puede pasar de un tileset en donde este la cabeza a otro en donde no lo este, en uno en donde mire a la derecha o en otra en donde mire hacia izquierda…etc.
Lo Bueno: Cada vez que se cambie de tileset todos los eventos del mapa estarán de igual forma a como han estado.
Por cierto la “X” en el llamado de Script representa la ID del tileset a cual le van a cambiar.
NOTA:
Se que el gran “rompecabezas de este puzle” es resolver este bug con todos los eventos del mapa, pero dejo mis ideas que quizás acompañen un poco de la mano a este complicado tema.
avatar
AsFzKakarotto
Iniciado
Iniciado

0/3

Créditos 16

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por Wecoc el 2017-04-06, 17:09

Lo que dices muy resumidamente viene a ser como el método para cambiar de tile, pero cambiando de tileset completamente. Por desgracia no sirve para éste bug porque afectaría a los demás eventos (de hecho no sirve ni lo de cambiar de tile como ya se estuvo debatiendo, porque evento y personaje podrían estar en la misma posición [X, Y] pero uno arriba y el otro debajo).

El tema quedó algo parado... salió una idea muy interesante a partir de esto (la de Orochii) pero va algo a parte, en cuanto a resolver el puzzle en sí estamos bastante como al principio xD De vez en cuando voy haciendo pruebas sobre ésta cuestión, si hago algún avance os mantendré informados.
avatar
Wecoc
Administrador
Administrador



Créditos 8885

Gracias : 424

Volver arriba Ir abajo

RPG Maker XP Re: [Colectivo][XP] Bug del acantilado

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Scripts

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