Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[Dono un script fallido] [ACE] Multi-Frame Autotiles

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker VX ACE [Dono un script fallido] [ACE] Multi-Frame Autotiles

Mensaje por Wecoc el 2014-09-19, 23:41

Hace tiempo intenté hacer éste script y no me salió bien y no lo terminaré así que quiero dejarlo aquí por si alguien decidiera continuarlo. Mejor eso a que quede en el olvido, creo yo.

El script requiere otro script (que va con demo) llamado MGC Tilemap Ace V1.4

Y aquí mi intento de script:

Código:
# Prueba muy random (requiere MGC Tilemap Ace)

module MGC
  class Tilemap
   
    # Nombre Tileset => [[Layer, Posición Editor, nombre Autotile], ...]
    MAP_INDEX = { "World_A1" => [[0, 0, "Testing"]] }
   
    attr_accessor :autotile_bitmaps
    alias wecoc_autotile_ini initialize
    def initialize(viewport)
      wecoc_autotile_ini(viewport)
      @autotile_bitmaps = []
    end
   
    def layer_name
      return $game_map.tileset.tileset_names
    end
   
    alias wecoc_autotile_upd update
    def update
      wecoc_autotile_upd
      if Graphics.frame_count & 31 == 0
        @need_refresh_anim = true
      end
      if @need_refresh_anim
        for i in 0...map_data.xsize
          for j in 0...map_data.ysize
            for k in 0...map_data.zsize
              if $game_map.autotile_type(i, j, k) >= 0
                if MAP_INDEX[layer_name[k]] != nil
                  automap = MAP_INDEX[layer_name[k]].clone
                  for array in 0...automap.size
                    m = automap[array]
                    if m[0] == k and m[1] == $game_map.autotile_type(i,j,k)
                      draw_new_autotile(i, j, k, m[2], 0)
                    end
                  end
                end
              end
            end
          end
        end
      end
    end
   
    def draw_new_autotile(x, y, z, name, frame)
      bitmap = Cache.autotile(name)
      tile_id = $game_map.tile_id(x, y, z) % 48
      rect = Rect.new(0, 0, 32, 32)
      @sprite_render.bitmap.blt(x * 32, y * 32, bitmap, rect, 255)
    end
  end
end

module Cache
  def self.autotile(filename)
    load_bitmap("Graphics/Autotiles/", filename)
  end
end


VX Ace a diferencia de XP no soporta autotiles con frames ilimitados. Los autotiles deben tener un número fijado de frames. Entonces se me ocurrió lo siguiente: Mostrar los autotiles por defecto, puesto que son los del editor, y por encima mostrar ya sea en una nueva bitmap o en la misma, un nuevo gráfico de autotiles cargado desde la nueva carpeta Autotiles.

Ese nuevo gráfico se dibujaría bien según el tile_id del de debajo y se updatearía por su cuenta pudiendo tener los frames que se quisieran. Además, el número máximo de frames se calcularía automáticamente partiendo del ancho del Autotile, por lo que lo único que habría que configurar es la relación entre el autotile real x de ese tileset concreto y el gráfico a mostrar.

Supongo que se entiende la idea... Como añadido ya ultimérrimo se podrían definir dos tipos de autotile también automáticamente desde su altura, de modo que pudieras mapear tanto con los autotiles del tipo VX / Ace como con los del tipo XP.

El script no es estrictamente complicado en comparación con la escritura de un nuevo Tilemap, pero es muy laborioso en la parte de dibujado del autotile, por lo que me es imposible terminarlo. Encima MGC aún tiene algunos bugs preocupantes (aunque ya hay algunos bugfixes como éste: Transfer player Error Fix), y está en francés cosa que no nos ayuda mucho xD

Para quien quiera continuarlo, dono éste código totalmente de modo que no se precisarán créditos por mi parte.
avatar
Wecoc
Administrador
Administrador



Créditos 12385

Gracias : 595

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.