¡Bienvenido a Universo Maker!
¿Es esta la primera vez que visitas el foro? Si es así te recomendamos que te registres para tener completo acceso a todas las áreas y secciones del foro, así también podrás participar activamente en la comunidad. Si ya tienes una cuenta, conectate cuanto antes.
Iniciar Sesión Registrarme

No estás conectado. Conéctate o registrate

Ver el tema anterior Ver el tema siguiente Ir abajo Mensaje [Página 1 de 1.]

#1 [XP] Tile&Map Edit el Sáb Mar 09, 2013 9:10 pm

youkai

avatar
Hola a todos!! Debido a un gran acumulamiento de estrés finalmente decidí hacer este script para practicar un poco el trabajo con las tablas del RGSS XD

Autor: youkai
Fecha: 9/3/2013
Version: 1.0

Características:
- Modificar de forma permanente los tiles de un mapa desde un evento.
- Cambiar el tile cambiado al original que poseía el mapa.
- Copiar eventos de un mapa para otro o dentro del mismo mapa
- Eliminar de forma permanente los eventos del mapa * NO puedes borrar el evento en ejecución por problemas con el Interpreter *
- Cambiar el BGS y BGM del mapa.

Modo de uso:
Spoiler:
$game_map.change_tile([map_x, map_y], [tile_x, tile_y], layer, map_id)
Primero que todo debo decir que los corchetes([]) son obligados de usar en esa misma posicion. Lo hice de este modo porque...no se, se ve mas bonito organizar las coordenadas =}
[map_x, map_y]: Las coordenadas del tile que quieres cambiar en el mapa. ej: [4,6] cambia el tile que su x sea 4 y su Y 6 (LAS COORDENADAS EMPIEZAN A CONTAR DE 0; [0,0] es el tile superior izquierdo)

[tile_x, tile_y]: Las coordenadas del tile que quieres insertar en el tileset. Estos igual empiezan a contar desde [0,0]. Los autotiles NO SE PUEDEN CAMBIAR, solo son los tiles. ej: [0,0] en los tiles clásicos del RTP de pradera y bosque seria la yerba. Luego [1,0] seria el tile que le siga a la izquierda. [0,1] Es el que esta abajo. Y así sucesivamente. XD

layer: La capa a la que quieres colocar el tile. 1, 2 o 3.

map_id: ID del mapa en el que quieres realizar el cambio.

$game_map.restore_tile(map_id, [x_map, y_map], layer)
map_id: ID del mapa en el que quieres realizar el cambio.

[map_x, map_y]: Las coordenadas del tile que quieres restaurar a su tile original. ej: [4,6] cambia el tile que su x sea 4 y su Y 6 (LAS COORDENADAS EMPIEZAN A CONTAR DE 0; [0,0] es el tile superior izquierdo)

layer: La capa a la que quieres colocar el tile. 1, 2 o 3.

$game_map.change_bgm(map_id, bgm_name, volume, pitch, autoplay)
$game_map.change_bgs(map_id, bgm_name, volume, pitch, autoplay)

map_id: ID del mapa en el que quieres realizar el cambio.
bgm_name/bgs_name: Nombre del archivo de audio. Tiene que estar en la carpeta BGS/BGM segun sea lo que quieras modificar.
volume: Volumen del tema. 100 es el volumen maximo.
pitch: Frecuencia de audio. Va de 50 a 150.
autoplay: Si pones true en ese lugar: empezara a reproducir el tema inmediatamente si el ID del mapa en que te encuentras es igual al ID del mapa en el cual realizaste el cambio.
Si pones false: Pues el tema se reproducira cuando entres a ese mapa. Si estas dentro, no habra cambio en el sonido.

$game_map.copy_event(map_id, event_id, x, y, parameter, keep)
map_id: ID del mapa en el que esta el evento que vas a copiar.
event_id: ID del evento al que le vas a realizar la copia.

Segun el valor que le otorgues a parameter(que puede ser 0 o 1) pasara lo siguiente con X y Y
Cuando parameter sea 0:
X y Y representaran las coordenadas en las cuales vas a colocar el evento.
Cuando parameter sea 1:
X y Y representaran las ID de variables que contendrán los valores X y Y respectivamente.

keep: Cuando sea true: el evento copiado se quedara permanentemente en el mapa
Cuando sea false: el evento se borrara una vez que salgas del mapa.

$game_map.erase_event(map_id, event_id)
map_id: ID del mapa en el que esta el evento que vas a eliminar.
event_id: ID del evento al que le vas a eliminar. * NO puedes borrar el evento en ejecución por problemas con el Interpreter *

NOTA: Para todos los casos, si el valor insertado en map_id es menor que 1, se tomara el ID del mapa en ejecución.

Bueno, finalmente termine con todo este lio....-.-" Ahora pasemos al script
Script:
Código:
=begin
Autor: youkai
Fecha: 9/3/2013
Version: 1.0

Características:
- Modificar de forma permanente los tiles de un mapa desde un evento.
- Cambiar el tile cambiado al original que poseía el mapa.
- Copiar eventos de un mapa para otro o dentro del mismo mapa
- Eliminar de forma permanente los eventos del mapa * NO puedes borrar el evento en ejecución por problemas con el Interpreter *
- Cambiar el BGS y BGM del mapa.
=end
module ScriptTools
  def self.get_map_id(id)
    return map_id = id < 1 ? $game_map.map_id : id
  end
end


class Game_Maps
  attr_accessor  :maps
  def initialize
    @maps = [nil]
    id = 1
    while FileTest.exist?(sprintf("Data/Map%03d.rxdata", id))
      map = load_data(sprintf("Data/Map%03d.rxdata", id))
      @maps.push(map)
      id += 1
    end
  end
end

class Scene_Title
  alias tilemod_command_new_game command_new_game
  def command_new_game
    $game_maps =      Game_Maps.new
    tilemod_command_new_game
  end
end

class Game_Map
  def setup(map_id)
    # Put map ID in @map_id memory
    @map_id = map_id
    # Load map from file and set @map
    @map = $game_maps.maps[@map_id]
    # set tile set information in opening instance variables
    tileset = $data_tilesets[@map.tileset_id]
    @tileset_name = tileset.tileset_name
    @autotile_names = tileset.autotile_names
    @panorama_name = tileset.panorama_name
    @panorama_hue = tileset.panorama_hue
    @fog_name = tileset.fog_name
    @fog_hue = tileset.fog_hue
    @fog_opacity = tileset.fog_opacity
    @fog_blend_type = tileset.fog_blend_type
    @fog_zoom = tileset.fog_zoom
    @fog_sx = tileset.fog_sx
    @fog_sy = tileset.fog_sy
    @battleback_name = tileset.battleback_name
    @passages = tileset.passages
    @priorities = tileset.priorities
    @terrain_tags = tileset.terrain_tags
    # Initialize displayed coordinates
    @display_x = 0
    @display_y = 0
    # Clear refresh request flag
    @need_refresh = false
    # Set map event data
    @events = {}
    for i in @map.events.keys
      @events[i] = Game_Event.new(@map_id, @map.events[i])
    end
    # Set common event data
    @common_events = {}
    for i in 1...$data_common_events.size
      @common_events[i] = Game_CommonEvent.new(i)
    end
    # Initialize all fog information
    @fog_ox = 0
    @fog_oy = 0
    @fog_tone = Tone.new(0, 0, 0, 0)
    @fog_tone_target = Tone.new(0, 0, 0, 0)
    @fog_tone_duration = 0
    @fog_opacity_duration = 0
    @fog_opacity_target = 0
    # Initialize scroll information
    @scroll_direction = 2
    @scroll_rest = 0
    @scroll_speed = 4
  end
   
  def change_tile(xy_map, xy_tile, layer = 0, map_id = -1)
    # 384
    # 0 => 7..1 => 8
    x_map = xy_map[0]
    y_map = xy_map[1]
    x_tile = xy_tile[0]
    y_tile = xy_tile[1]
    new_tile = x_tile >= 0 && y_tile >= 0 ? 384 + (x_tile + 8 * y_tile) : 0
    map_id = ScriptTools.get_map_id(map_id)
    $game_maps.maps[map_id].data[x_map, y_map, layer - 1] = new_tile
  end

  def restore_tile(map_id, xy_map, layer)
    map_id = ScriptTools.get_map_id(map_id)
    original_map = load_data(sprintf("Data/Map%03d.rxdata", map_id))
    old_tile = original_map.data[xy_map[0], xy_map[1], layer - 1]
    $game_maps.maps[map_id].data[xy_map[0], xy_map[1], layer - 1] = old_tile
  end
 
  def change_bgm(map_id, bgm_name, volume = 100, pitch = 100, autoplay = false)
    bgm = RPG::AudioFile.new(bgm_name, volume, pitch)
    map_id = ScriptTools.get_map_id(map_id)
    if autoplay
      $game_maps.maps[map_id].bgm = bgm
      $game_maps.maps[map_id].autoplay_bgm = true
      self.autoplay if map_id == @map_id
      $game_maps.maps[map_id].autoplay_bgm = bgm_name != "" ? true : false
    else
      $game_maps.maps[map_id].bgm = bgm
      $game_maps.maps[map_id].autoplay_bgm = bgm_name != "" ? true : false
    end
  end
 
  def change_bgs(map_id, bgs_name, volume = 100, pitch = 100, autoplay = false)
    bgs = RPG::AudioFile.new(bgs_name, volume, pitch)
    map_id = ScriptTools.get_map_id(map_id)
    if autoplay
      $game_maps.maps[map_id].bgs = bgs
      $game_maps.maps[map_id].autoplay_bgs = true
      self.autoplay if map_id == @map_id
      $game_maps.maps[map_id].autoplay_bgs = bgs_name != "" ? true : false
    else
      $game_maps.maps[map_id].bgs = bgs
      $game_maps.maps[map_id].autoplay_bgs = bgs_name != "" ? true : false
    end
  end
end


class Game_Event < Game_Character
  attr_accessor :id
end

class Game_Map
  def copy_event(map_id = 1, event_id = 1, x = 0, y = 0, parameter = 0, keep = true)
    id = @events.size + 1
    map_id = ScriptTools.get_map_id(map_id)
    event = load_data(sprintf("Data/Map%03d.rxdata", map_id)).events[event_id]
    event.id = id
    case parameter
    when 0
      event.x = x
      event.y = y
    when 1
      x, y = $game_variables[x], $game_variables[y]
    end
    $game_maps.maps[map_id].events[id] = event if keep
    if map_id == @map_id
      @events[id] = Game_Event.new(@map_id, event)
      $scene.spriteset.character_sprites.insert($scene.spriteset.character_sprites.size - 2, Sprite_Character.new($scene.spriteset.viewport1, @events[id])) if !$scene.spriteset.nil?
    end
  end
 
  def erase_event(map_id = 1, event_id = 1)
    map_id = ScriptTools.get_map_id(map_id)
    $game_maps.maps[map_id].events.delete(event_id)
    if map_id == @map_id
      $scene.spriteset.character_sprites[event_id - 1].dispose
      $scene.spriteset.character_sprites.delete_at(event_id - 1)
      @events.delete(event_id)
    end
  end
end

class Spriteset_Map
  attr_reader :viewport1, :character_sprites
end

class Scene_Map
  attr_reader :spriteset
end

Enjoy it!!
Saludos,
¥oukai

Ver el tema anterior Ver el tema siguiente Volver arriba  Mensaje [Página 1 de 1.]

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