youkaiDom Mar 10, 2013 1:06 am
Moderador
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:
Bueno, finalmente termine con todo este lio....-.-" Ahora pasemos al script
Script:
Enjoy it!!
Saludos,
¥oukai
PD: Este es mi script mas reciente, si desean y les agrada mi programacion(?) me dicen para ir pasando el resto de ellos a esta pagina.(son unos cuantos...XDDD)
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
PD: Este es mi script mas reciente, si desean y les agrada mi programacion(?) me dicen para ir pasando el resto de ellos a esta pagina.(son unos cuantos...XDDD)