script Mini-mapa

Ver o tópico anterior Ver o tópico seguinte Ir em baixo

script Mini-mapa

Mensagem  roberto em Sex Mar 12, 2010 9:14 pm

script para seu projeto que consiste em um mini-mapa.

Para usar crie um evento,com o seguinte comentário
Spoiler:
minimap x
esse "x" significa o ícone que representará o personagem,sendo que tem que estar na pasta grapich/pictures
ou você que deixar o ícone estático no mapa usa-se
Spoiler:
destino x
esse "x" e o destino do mapa,que pode ser personalizado no script
scipt criador por Renan Tsuneo Hangai Junior
Spoiler:
################################################################################
################################################################################
########################### RTH Mini_Mapa #########################################
################################################################################
################################################################################
#===============================================================================
# Criado por Renan Tsuneo Hangai Junior
#===============================================================================
# Mini Mapa
#===============================================================================

module RTH

# Largura do mini mapa
MINI_MAP_LARG = 160
# Altura do mini mapa
MINI_MAP_ALT = 120
# Transparencia do mini mapa
MINI_MAP_OPACITY = 140
# Nome do arquivo de imagem da pasta pictures do fundo do mini mapa
MINI_MAP_BACK_NAME = ""
# Largura do fundo mini mapa ( Igual ao da imagem na pasta Pictures )
MINI_MAP_BACK_LARG = 180
# Altura do fundo mini mapa ( Igual ao da imagem na pasta Pictures )
MINI_MAP_BACK_ALT = 140
# Transparencia do fundo do mini mapa
MINI_MAP_BACK_OPACITY = 255
# Nome do arquivo de imagem da pasta pictures do herói
MINI_MAP_HERO_BITMAP_NAME = ""
# Switch que ativa o mapa
MAP_ON_SWITCH = 1
# Variavel que define o canto do mapa
MAP_CANTO_VARIABLE = 1

end

$RTHScript = {} if $RTHScript.nil?
$RTHScript["Mini_Map"] = true

class Mini_Map_Base

attr_reader :map_rect, :bitmap_rect, :map_dif_width, :map_dif_height

def initialize(canto)
@canto = canto
@x = 0
@y = 0
@difbx = (RTH::MINI_MAP_BACK_LARG - RTH::MINI_MAP_LARG) / 2
@difby = (RTH::MINI_MAP_BACK_ALT - RTH::MINI_MAP_ALT) / 2
draw_map
self.visible = false
end

def draw_map
@id = $game_map.map_id
@layers = []
viewport = Viewport.new(0, 0, 640, 480)
viewport.z = 6000
@bitmap_rect = Rect.new(0, 0, RTH::MINI_MAP_LARG, RTH::MINI_MAP_ALT)
@back_bitmap_rect = Rect.new(0, 0, RTH::MINI_MAP_BACK_LARG, RTH::MINI_MAP_BACK_ALT)
w = RTH::MINI_MAP_LARG.to_f * ($game_map.width.to_f * 32.0) / 640.0
h = RTH::MINI_MAP_ALT.to_f * ($game_map.height.to_f * 32.0) / 480.0
@map_dif_width = ($game_map.width.to_f * 32.0) / w
@map_dif_height = ($game_map.height.to_f * 32.0) / h
@map_rect = Rect.new(0, 0, w, h)
@back_sprite = Sprite.new(viewport)
@back_sprite.bitmap = Bitmap.new(@back_bitmap_rect.width, @back_bitmap_rect.height)
back_bitmap = RPG::Cache.picture(RTH::MINI_MAP_BACK_NAME)
@back_sprite.bitmap.stretch_blt(@back_bitmap_rect, back_bitmap, Rect.new(0, 0, back_bitmap.width, back_bitmap.height))
src_rect = Rect.new(0, 0, $game_map.width * 32, $game_map.height * 32)
for i in 0..5
@layers[i] = Sprite.new(viewport)
@layers[i].z = 10000 + (i * 20)
@layers[i].x = (@back_bitmap_rect.width - @bitmap_rect.width) / 2
@layers[i].y = (@back_bitmap_rect.height - @bitmap_rect.height) / 2
@layers[i].bitmap = Bitmap.new(@map_rect.width, @map_rect.height)
@layers[i].bitmap.stretch_blt(@map_rect, RPG::Cache.map_bitmap(@id, i), src_rect)
end
end

def update
if @layers.nil?
draw_map
end
canto = $game_variables[RTH::MAP_CANTO_VARIABLE] % 4
case canto
when 0
@x, @y = 16, 16
when 1
@x, @y = (640 - 16 - @back_bitmap_rect.width), 16
when 2
@x, @y = 16, (480 - 16 - @back_bitmap_rect.height)
when 3
@x, @y = (640 - 16 - @back_bitmap_rect.width), (480 - 16 - @back_bitmap_rect.height)
end
@back_sprite.x = @x
@back_sprite.y = @y
@back_sprite.opacity = RTH::MINI_MAP_BACK_OPACITY
for layer in @layers
layer.x = @x + @difbx
layer.y = @y + @difby
layer.opacity = RTH::MINI_MAP_OPACITY
ox = ($game_map.display_x / 4) / @map_dif_width
oy = ($game_map.display_y / 4) / @map_dif_height
layer.src_rect.set(ox, oy, @bitmap_rect.width, @bitmap_rect.height)
end
end

def dispose(dp=false)
for layer in @layers
layer.bitmap.dispose
layer.dispose
end
@layers = nil
@back_sprite.bitmap.dispose
@back_sprite.dispose
@back_sprite = nil
RPG::Cache.dispose_map_bitmap(@id) if dp
end

end

class Mini_Map < Mini_Map_Base

def draw_map
super
viewport = Viewport.new(0, 0, 640, 480)
viewport.z = 10010
@hero = Sprite.new(viewport)
@hero.bitmap = RPG::Cache.picture(RTH::MINI_MAP_HERO_BITMAP_NAME)
@events = []
@events_sprites = []
@destinies = []
@destinies_event = []
for event in $game_map.events.values
next if event.nil?
next if event.list.nil? or event.list.size <= 0
for item in event.list
next if item.nil?
if item.code == 108 or item.code == 408
if item.parameters[0].downcase.include?("minimap")
name = item.parameters[0].split[1]
sprite = Sprite.new(viewport)
sprite.bitmap = RPG::Cache.picture(name)
@events.push(event)
@events_sprites.push(sprite)
break
elsif item.parameters[0].downcase.include?("destino")
name = item.parameters[0].split[1]
sprite = Sprite.new(viewport)
sprite.bitmap = RPG::Cache.picture(name)
@destinies.push(sprite)
@destinies_event.push(event)
break
end
end
end
end
end

def visible=(valor)
return if !@visible.nil? and @visible == valor
@visible = valor
@back_sprite.visible = valor
for layer in @layers
layer.visible = valor
end
for sprite in @events_sprites + @destinies
next if sprite.nil?
sprite.visible = valor
end
@hero.visible = valor
end

def update
self.visible = $game_switches[RTH::MAP_ON_SWITCH]
return if @visible == false
super
if @destinies.size > 0
for i in 0...@destinies.size
max_x = RTH::MINI_MAP_LARG + @layers[0].x - (@destinies[i].src_rect.width / 2)
max_y = RTH::MINI_MAP_ALT + @layers[0].y - (@destinies[i].src_rect.height / 2)
x = (@destinies_event[i].screen_x.to_f / self.map_dif_width) + @layers[0].x - (@destinies[i].src_rect.width / 2)
y = (@destinies_event[i].screen_y.to_f / self.map_dif_height) + @layers[0].y - @destinies[i].src_rect.height
@destinies[i].x = (x >= max_x ? max_x : x <= @layers[0].x ? @layers[0].x : x)
@destinies[i].y = (y >= max_y ? max_y : y <= @layers[0].y ? @layers[0].y : y)
end
end
for i in 0...@events_sprites.size
@events_sprites[i].x = (@events[i].screen_x.to_f / self.map_dif_width) + @layers[0].x - (@events_sprites[i].src_rect.width / 2)
@events_sprites[i].y = (@events[i].screen_y.to_f / self.map_dif_height) + @layers[0].y - @events_sprites[i].src_rect.height
@events_sprites[i].visible = (@events_sprites[i].x >= @layers[0].x and @events_sprites[i].x <= @layers[0].x + @bitmap_rect.width and @events_sprites[i].y >= @layers[0].y and @events_sprites[i].y <= @layers[0].y + @bitmap_rect.height)
end
@hero.x = ($game_player.screen_x.to_f / self.map_dif_width) + @layers[0].x - (@hero.src_rect.width / 2)
@hero.y = ($game_player.screen_y / self.map_dif_height) + @layers[0].y - @hero.src_rect.height
end

def dispose(dp=false)
super(dp)
for sprite in @events_sprites + @destinies
next if sprite.nil?
sprite.bitmap.dispose
sprite.dispose
end
@hero.bitmap.dispose
@hero.dispose
end

end

class Spriteset_Map

attr_reader :mini_mapa

alias rth_mini_map_spmap_initialize initialize
alias rth_mini_map_spmap_dispose dispose
alias rth_mini_map_spmap_update update

def initialize
@mini_mapa = Mini_Map.new(0)
rth_mini_map_spmap_initialize
end

def dispose
@mini_mapa.dispose(true)
rth_mini_map_spmap_dispose
end

def update
@mini_mapa.update
rth_mini_map_spmap_update
end

end

class Scene_Map

alias rth_mini_map_smap_update update

def update
if Input.trigger?(Input::ALT)
$scene = Scene_Full_Map.new
end
rth_mini_map_smap_update
end
end



class Scene_Full_Map

def main
@rw = $game_map.width * 32
@rh = $game_map.height * 32
@full_map = Sprite.new
@full_map.bitmap = Bitmap.new(@rw, @rh)
for i in 0..5
@full_map.bitmap.blt(0, 0, RPG::Cache.map_bitmap($game_map.map_id, i), Rect.new(0, 0, @rw, @rh))
end
#RPG::Cache.dispose_map_bitmap($game_map.map_id)
@ox = ($game_map.display_x / 4)
@oy = ($game_map.display_y / 4)
@full_map.ox = @ox
@full_map.oy = @oy
@full_map.zoom_x = 0.8
@full_map.zoom_y = 0.8
@full_map.x = (640 - (640 * @full_map.zoom_x)) / 2
@full_map.y = (480 - (480 * @full_map.zoom_y)) / 2
Graphics.transition(20)
while $scene == self
Graphics.update
Input.update
update
end
Graphics.freeze
@full_map.bitmap.dispose
@full_map.dispose
end

def update
@full_map.update
cw = (@rw * @full_map.zoom_x)
ch = (@rh * @full_map.zoom_y)
if cw + @full_map.x > 640 - @full_map.x
if [1, 4, 7].include?(Input.dir8) and @ox > 0
@ox -= 10
elsif [3, 6, 9].include?(Input.dir8) and @ox < (@rw - (@full_map.x * 2) - (640 * @full_map.zoom_x))
@ox += 10
end
end
if ch + @full_map.y > 480 - @full_map.y
if [7, 8, 9].include?(Input.dir8) and @oy > 0
@oy -= 10
elsif [1, 2, 3].include?(Input.dir8) and @oy < (@rh - (@full_map.y * 2) - (480 * @full_map.zoom_y))
@oy += 10
end
end
#@full_map.src_rect.set(@ox, @oy, @rw, @rh)
@full_map.ox = @ox
@full_map.oy = @oy
if Input.trigger?(Input::C) or Input.trigger?(Input::B)
$scene = Scene_Map.new
end
end

end

class Game_Map

def mmsetup(id)
@map_id = id
@map = load_data(sprintf("Data/Map%03d.rxdata", @map_id))
tilesets = load_data("Data/Tilesets.rxdata")
tileset = tilesets[@map.tileset_id]
@tileset_name = tileset.tileset_name
@autotile_names = tileset.autotile_names
@priorities = tileset.priorities
end

end

module RPG

module Cache

@map_bitmap = []

AUTOTILES_DEFINITION = [
26, 27, 32, 33, 4, 27, 32, 33, 26, 5, 32, 33, 4, 5, 32, 33,
26, 27, 32, 11, 4, 27, 32, 11, 26, 5, 32, 11, 4, 5, 32, 11,
26, 27, 10, 33, 4, 27, 10, 33, 26, 5, 10, 33, 4, 5, 10, 33,
26, 27, 10, 11, 4, 27, 10, 11, 26, 5, 10, 11, 4, 5, 10, 11,
24, 25, 30, 31, 24, 5, 30, 31, 24, 25, 30, 11, 24, 5, 30, 11,
14, 15, 20, 21, 14, 15, 20, 11, 14, 15, 10, 21, 14, 15, 10, 11,
28, 29, 34, 35, 28, 29, 10, 35, 4, 29, 34, 35, 4, 29, 10, 35,
38, 39, 44, 45, 4, 39, 44, 45, 38, 5, 44, 45, 4, 5, 44, 45,
24, 29, 30, 35, 14, 15, 44, 45, 12, 13, 18 ,19, 12, 13, 18, 11,
16, 17, 22, 23, 16, 17, 10, 23, 40, 41, 46, 47, 4, 41, 46, 47,
36, 37, 42, 43, 36, 5, 42, 43, 12, 17, 18, 23, 12, 13, 42, 43,
36, 41, 42, 47, 16, 17, 46, 47, 12, 17, 42, 47, 0, 1, 6, 7
]

def self.map_bitmap(map_id, priority=0)
if @map_bitmap[map_id].nil?
mapa = Game_Map.new
mapa.mmsetup(map_id)
layers = [
Bitmap.new(mapa.width * 32, mapa.height * 32),
Bitmap.new(mapa.width * 32, mapa.height * 32),
Bitmap.new(mapa.width * 32, mapa.height * 32),
Bitmap.new(mapa.width * 32, mapa.height * 32),
Bitmap.new(mapa.width * 32, mapa.height * 32),
Bitmap.new(mapa.width * 32, mapa.height * 32)
]
autotiles = []
for i in 0..6
autotiles[i] = self.autotile(mapa.autotile_names[i])
end
vx = [0, 1, 0, 1]
vy = [0, 0, 1, 1]
for x in 0...mapa.width
for y in 0...mapa.height
for level in 0..2
tile_id = mapa.data[x, y, level]
prioridade = mapa.priorities[tile_id]
if tile_id >= 384
tileset_bitmap = self.tile(mapa.tileset_name, tile_id, 0)
src_rect = Rect.new(0, 0, 32, 32)
layers[prioridade].blt(x * 32, y * 32, tileset_bitmap, src_rect)
elsif tile_id >= 48 and tile_id < 384
aid = tile_id / 48 - 1
for j in 0..3
h = 4 * (tile_id % 48) + j
src_rect = Rect.new((AUTOTILES_DEFINITION[h] % 6) * 16, (AUTOTILES_DEFINITION[h] / 6 ) * 16, 16, 16)
ax = x * 32 + vx[j] * 16
ay = y * 32 + vy[j] * 16
layers[prioridade].blt(ax, ay, autotiles[aid], src_rect)
end
end
end
end
end
@map_bitmap[map_id] = layers
end
return @map_bitmap[map_id][priority]
end

def self.dispose_map_bitmap(id)
return if @map_bitmap[id].nil?
for bitmap in @map_bitmap[id]
bitmap.dispose
end
@map_bitmap[id] = nil
end

end

end
avatar
roberto
Admin

Mensagens : 75
Pontos : 204
Reputação : 3
Data de inscrição : 03/03/2010

Ver perfil do usuário http://morpgmaker.mo-rpg.com

Voltar ao Topo Ir em baixo

Ver o tópico anterior Ver o tópico seguinte Voltar ao Topo


 
Permissão deste fórum:
Você não pode responder aos tópicos neste fórum