martes, 21 de febrero de 2012

[RPGMACE]: Minimapa


Script para mostrar un minimapa en la pantalla de juego para saber por donde nos movemos. No es muy estético pero si funcional.

Código:

#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ? Minimap - KMS_MiniMap ? VXAce ?
#_/ ? Last update : 2012/02/12 (TOMY@Kamesoft) ?
#_/ ? Website: http://ytomy.sakura.ne.jp/ ?
#_/ ? Translated by Mr. Bubble ?
#_/----------------------------------------------------------------------------
#_/ Createts a minimap HUD based off the passability settings of the map.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
# This script is plug-and-play, but various customization options are available.
#----------------------------------------------------------------------------
# Map Notetags
#----------------------------------------------------------------------------
# Notetags are added to "Notes" boxes. Right-click a map and select
# Map Properties to find the "Notes" box for maps.
#
# <minimap hide>
# Completely disables the minimap on a specific map. [NOMAP] can also be
# added to the beginning of map names for the same effect.
#----------------------------------------------------------------------------
# Event Comment Tags
#----------------------------------------------------------------------------
# Since events do not have noteboxes, comment tags are used instead. Open the
# event, create a new event command, go to Tab 1, and click the "Comment..."
# event command. A box will open up allowing you to enter tags.
#
# <minimap wall>
# Add this tag to an event's comment to change its minimap color to the
# same as an impassable tile.
#
# <minimap move>
# Add this tag to an event's comment to have them blink in the minimap.
#
# <minimap obj n>
# Add this tag to an event's comment to have them blink in the minimap with
# a specified color where n is the OBJ value defined in OBJECT_COLOR which
# is found in the customization module below.
#----------------------------------------------------------------------------
# Script Calls
#----------------------------------------------------------------------------
# Script calls are used in "Script..." event commands located under Tab 3.
#
# hide_minimap
# Use this script call to hide the minimap on command.
#
# show_minimap
# Use this script call to show the minimap on command.
#
# refresh_minimap
# Use this script call to refresh the minimap.
#
# update_minimap_object
# Use this script call to refresh objects on the minimap such as events.
#----------------------------------------------------------------------------
# Script Calls : Conditional Branches
#----------------------------------------------------------------------------
# The following script calls can be used in Conditional Branches.
#
# minimap_showing?
# Determines if the minimap is currently showing/hidden.
#----------------------------------------------------------------------------
# Usage Notes
#----------------------------------------------------------------------------
# Impassable events will not appear as the correct color in the minimap.
# This effect is intended. If you want an event to appear as impassable
# on the minimap, add the tag <minimap wall> to an event's comment.
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/

#==============================================================================
# ? BEGIN Setting ?
#==============================================================================
module KMS_MiniMap
# * Minimap Display Toggle Button
# Set to nil to disable this function
SWITCH_BUTTON = :Z

# * Minimap Size and Position (x, y, width, height)
MAP_RECT = Rect.new(364, 20, 160, 120)
# * Minimap z-layer Priority
# Glitchy if this value is set too high
MAP_Z = 0
# * Minimap Grid Size
# A size of 3 or higher is recommended
GRID_SIZE = 5

# * Mini-Map Color Settings
# Color.new(red, green, blue, opacity)
FOREGROUND_COLOR = Color.new(224, 224, 255, 160) # Foreground (passable)
BACKGROUND_COLOR = Color.new( 0, 0, 160, 160) # Background (not passable)
POSITION_COLOR = Color.new(255, 0, 0, 192) # Current Position color
MOVE_EVENT_COLOR = Color.new(255, 160, 0, 192) # Moving event color
VEHICLE_COLOR = Color.new( 96, 128, 0, 192) # Vehicle color

# * Object Color Presets
# Create custom color presets for events tagged with the
# corresponding OBJ tag
OBJECT_COLOR = [
# Color.new(red, green, blue, opacity)
Color.new( 0, 128, 0, 192), # OBJ 1
Color.new( 0, 160, 160, 192), # OBJ 2
Color.new(160, 0, 160, 192), # OBJ 3

# More color presets may be added in this array where OBJ number is
# determined by the position in the list (OBJ 4, OBJ 5, etc.)

] # <- Do not delete this line

# * Minimap Blinking Frequency
# Values 5~8 are recommended
BLINK_LEVEL = 7

# * Minimap Cache Setting
# This script creates a cache for each map. If the number of cached
# maps exceed CACHE_NUM, oldest cached maps are deleted.
CACHE_NUM = 10
end
#==============================================================================
# ? END Setting ?
#==============================================================================

$kms_imported = {} if $kms_imported == nil
$kms_imported["MiniMap"] = true

module KMS_MiniMap
# ????????
REGEX_NO_MINIMAP_NOTE = /<(?:?????|MINIMAP)\s*(?:???|HIDE)>/i
REGEX_NO_MINIMAP_NAME = /\[NOMAP\]/i

# ???
REGEX_WALL_EVENT = /<(?:?????|MINIMAP)\s*(?:?|???|WALL)>/i

# ??????
REGEX_MOVE_EVENT = /<(?:?????|MINIMAP)\s*(?:??|MOVE)>/i

# ??????
REGEX_OBJECT = /<(?:?????|MINIMAP)\s+OBJ(?:ECT)?\s*(\d+)>/i
end

# *****************************************************************************

#==============================================================================
# ? KMS_Commands
#==============================================================================

module KMS_Commands
module_function
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def show_minimap
$game_temp.minimap_manual_visible = true
$game_system.minimap_show = true
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def hide_minimap
$game_system.minimap_show = false
end
#--------------------------------------------------------------------------
# ? ????????????
#--------------------------------------------------------------------------
def minimap_showing?
return $game_system.minimap_show
end
#--------------------------------------------------------------------------
# ? ????????????
#--------------------------------------------------------------------------
def refresh_minimap
return unless SceneManager.scene_is?(Scene_Map)

$game_map.refresh if $game_map.need_refresh
SceneManager.scene.refresh_minimap
end
#--------------------------------------------------------------------------
# ? ???????????????
#--------------------------------------------------------------------------
def update_minimap_object
return unless SceneManager.scene_is?(Scene_Map)

$game_map.refresh if $game_map.need_refresh
SceneManager.scene.update_minimap_object
end
end

#==============================================================================
# ¦ Game_Interpreter
#==============================================================================

class Game_Interpreter
# ?????????????????????????
include KMS_Commands
end

#==============================================================================
# ¦ RPG::Map
#==============================================================================

class RPG::Map
#--------------------------------------------------------------------------
# ? ?????????????
#--------------------------------------------------------------------------
def create_minimap_cache
@__minimap_show = true

note.each_line { |line|
if line =~ KMS_MiniMap::REGEX_NO_MINIMAP_NOTE # ??????
@__minimap_show = false
end
}
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
def minimap_show?
create_minimap_cache if @__minimap_show.nil?
return @__minimap_show
end
end

#==============================================================================
# ¦ RPG::MapInfo
#==============================================================================

class RPG::MapInfo
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def name
return @name.gsub(/\[.*\]/) { "" }
end
#--------------------------------------------------------------------------
# ? ???????????
#--------------------------------------------------------------------------
def original_name
return @name
end
#--------------------------------------------------------------------------
# ? ?????????????
#--------------------------------------------------------------------------
def create_minimap_cache
@__minimap_show = !(@name =~ KMS_MiniMap::REGEX_NO_MINIMAP_NAME)
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
def minimap_show?
create_minimap_cache if @__minimap_show == nil
return @__minimap_show
end
end

#==============================================================================
# ¦ Game_Temp
#==============================================================================

class Game_Temp
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
attr_accessor :minimap_manual_visible # ????????????????
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
alias initialize_KMS_MiniMap initialize
def initialize
initialize_KMS_MiniMap

@minimap_manual_visible = true
end
end

#==============================================================================
# ¦ Game_System
#==============================================================================

class Game_System
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
attr_accessor :minimap_show # ??????????
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
alias initialize_KMS_MiniMap initialize
def initialize
initialize_KMS_MiniMap

@minimap_show = true
end
end

#==============================================================================
# ¦ Game_Map
#==============================================================================

class Game_Map
#--------------------------------------------------------------------------
# ? ??
#--------------------------------------------------------------------------
MINIMAP_FADE_NONE = 0 # ????? ??????
MINIMAP_FADE_IN = 1 # ????? ??????
MINIMAP_FADE_OUT = 2 # ????? ???????
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
attr_accessor :minimap_fade
#--------------------------------------------------------------------------
# ? ???????????
#--------------------------------------------------------------------------
def minimap_show?
return $data_mapinfos[map_id].minimap_show? && @map.minimap_show?
end
#--------------------------------------------------------------------------
# ? ????????????
#--------------------------------------------------------------------------
def fadein_minimap
@minimap_fade = MINIMAP_FADE_IN
end
#--------------------------------------------------------------------------
# ? ?????????????
#--------------------------------------------------------------------------
def fadeout_minimap
@minimap_fade = MINIMAP_FADE_OUT
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias refresh_KMS_MiniMap refresh
def refresh
refresh_KMS_MiniMap

SceneManager.scene.refresh_minimap if SceneManager.scene_is?(Scene_Map)
end
end

#==============================================================================
# ¦ Game_Event
#==============================================================================

class Game_Event < Game_Character
#--------------------------------------------------------------------------
# ? ???????????????
#--------------------------------------------------------------------------
def __create_minimap_cache
@__last_page = @page
@__minimap_wall_event = false
@__minimap_move_event = false
@__minimap_object_type = -1

return if @page.nil?

@page.list.each { |cmd|
# ????????????
break unless [108, 408].include?(cmd.code)

# ??????
case cmd.parameters[0]
when KMS_MiniMap::REGEX_WALL_EVENT
@__minimap_wall_event = true
when KMS_MiniMap::REGEX_MOVE_EVENT
@__minimap_move_event = true
when KMS_MiniMap::REGEX_OBJECT
@__minimap_object_type = $1.to_i
end
}
end
private :__create_minimap_cache
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
def graphic_exist?
return (character_name != "" || tile_id > 0)
end
#--------------------------------------------------------------------------
# ? ????
#--------------------------------------------------------------------------
def is_minimap_wall_event?
if @__minimap_wall_event.nil? || @__last_page != @page
__create_minimap_cache
end

return @__minimap_wall_event
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
def is_minimap_move_event?
if @__minimap_move_event.nil? || @__last_page != @page
__create_minimap_cache
end

return @__minimap_move_event
end
#--------------------------------------------------------------------------
# ? ????????????
#--------------------------------------------------------------------------
def is_minimap_object?
if @__minimap_object_type.nil? || @__last_page != @page
__create_minimap_cache
end

return @__minimap_object_type > 0
end
#--------------------------------------------------------------------------
# ? ??????????????
#--------------------------------------------------------------------------
def minimap_object_type
if @__minimap_object_type.nil? || @__last_page != @page
__create_minimap_cache
end

return @__minimap_object_type
end
end

#==============================================================================
# ? Game_MiniMap
#------------------------------------------------------------------------------
# ??????????????
#==============================================================================

class Game_MiniMap
#--------------------------------------------------------------------------
# ? ???
#--------------------------------------------------------------------------
Point = Struct.new(:x, :y)
Size = Struct.new(:width, :height)
PassageCache = Struct.new(:map_id, :table, :scan_table)
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
@@passage_cache = [] # ??????????????
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def initialize(tilemap)
@map_rect = KMS_MiniMap::MAP_RECT
@grid_size = [KMS_MiniMap::GRID_SIZE, 1].max

@x = 0
@y = 0
@grid_num = Point.new(
(@map_rect.width + @grid_size - 1) / @grid_size,
(@map_rect.height + @grid_size - 1) / @grid_size
)
@draw_grid_num = Point.new(@grid_num.x + 2, @grid_num.y + 2)
@draw_range_begin = Point.new(0, 0)
@draw_range_end = Point.new(0, 0)
@tilemap = tilemap

@last_x = $game_player.x
@last_y = $game_player.y

@showing = false
@hiding = false

create_sprites
refresh

unless $game_temp.minimap_manual_visible
self.opacity = 0
end
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
def create_sprites
@viewport = Viewport.new(@map_rect)
@viewport.z = KMS_MiniMap::MAP_Z

# ???????????
@bmp_size = Size.new(
(@grid_num.x + 2) * @grid_size,
(@grid_num.y + 2) * @grid_size
)
@buf_bitmap = Bitmap.new(@bmp_size.width, @bmp_size.height)

# ???????????
@map_sprite = Sprite.new(@viewport)
@map_sprite.x = -@grid_size
@map_sprite.y = -@grid_size
@map_sprite.z = 0
@map_sprite.bitmap = Bitmap.new(@bmp_size.width, @bmp_size.height)

# ??????????????
@object_sprite = Sprite_MiniMapIcon.new(@viewport)
@object_sprite.x = -@grid_size
@object_sprite.y = -@grid_size
@object_sprite.z = 1
@object_sprite.bitmap = Bitmap.new(@bmp_size.width, @bmp_size.height)

# ???????????
@position_sprite = Sprite_MiniMapIcon.new
@position_sprite.x = @map_rect.x + @grid_num.x / 2 * @grid_size
@position_sprite.y = @map_rect.y + @grid_num.y / 2 * @grid_size
@position_sprite.z = @viewport.z + 2
bitmap = Bitmap.new(@grid_size, @grid_size)
bitmap.fill_rect(bitmap.rect, KMS_MiniMap::POSITION_COLOR)
@position_sprite.bitmap = bitmap
end
#--------------------------------------------------------------------------
# ? ??
#--------------------------------------------------------------------------
def dispose
@buf_bitmap.dispose
@map_sprite.bitmap.dispose
@map_sprite.dispose
@object_sprite.bitmap.dispose
@object_sprite.dispose
@position_sprite.bitmap.dispose
@position_sprite.dispose
@viewport.dispose
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def visible
return @map_sprite.visible
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def visible=(value)
@viewport.visible = value
@map_sprite.visible = value
@object_sprite.visible = value
@position_sprite.visible = value
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def opacity
return @map_sprite.opacity
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def opacity=(value)
@map_sprite.opacity = value
@object_sprite.opacity = value
@position_sprite.opacity = value
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def refresh
update_draw_range
update_passage_table
update_object_list
update_position
draw_map
draw_object
Graphics.frame_reset
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def fadein
@showing = true
@hiding = false
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
def fadeout
@showing = false
@hiding = true
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def update_input
return if KMS_MiniMap::SWITCH_BUTTON.nil?

if Input.trigger?(KMS_MiniMap::SWITCH_BUTTON)
if opacity < 255 && !@showing
$game_temp.minimap_manual_visible = true
fadein
elsif opacity > 0 && !@hiding
$game_temp.minimap_manual_visible = false
fadeout
end
end
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def update_draw_range
range = []
(2).times { |i| range[i] = @draw_grid_num[i] / 2 }

@draw_range_begin.x = $game_player.x - range[0]
@draw_range_begin.y = $game_player.y - range[1]
@draw_range_end.x = $game_player.x + range[0]
@draw_range_end.y = $game_player.y + range[1]
end
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
def update_passage_table
cache = get_passage_table_cache
@passage_table = cache.table
@passage_scan_table = cache.scan_table

update_around_passage_table
end
#--------------------------------------------------------------------------
# ? ?????????????????
#--------------------------------------------------------------------------
def get_passage_table_cache
map_id = $game_map.map_id
cache = @@passage_cache.find { |c| c.map_id == map_id }

# ??????????????
if cache == nil
cache = PassageCache.new(map_id)
cache.table = Table.new($game_map.width, $game_map.height)
cache.scan_table = Table.new(
($game_map.width + @draw_grid_num.x - 1) / @draw_grid_num.x,
($game_map.height + @draw_grid_num.y - 1) / @draw_grid_num.y
)
end

# ??????????????????????????
@@passage_cache.unshift(cache)
@@passage_cache.delete_at(KMS_MiniMap::CACHE_NUM)

return cache
end
#--------------------------------------------------------------------------
# ? ??????????????????
#--------------------------------------------------------------------------
def clear_passage_table_cache
return if @passage_scan_table == nil

table = @passage_scan_table
@passage_scan_table = Table.new(table.xsize, table.ysize)
end
#--------------------------------------------------------------------------
# ? ???????????
# x, y : ????
#--------------------------------------------------------------------------
def scan_passage(x, y)
dx = x / @draw_grid_num.x
dy = y / @draw_grid_num.y

# ????
return if @passage_scan_table[dx, dy] == 1

# ??????
return unless dx.between?(0, @passage_scan_table.xsize - 1)
return unless dy.between?(0, @passage_scan_table.ysize - 1)

rx = (dx * @draw_grid_num.x)...((dx + 1) * @draw_grid_num.x)
ry = (dy * @draw_grid_num.y)...((dy + 1) * @draw_grid_num.y)
mw = $game_map.width - 1
mh = $game_map.height - 1

# ???????????????
rx.each { |x|
next unless x.between?(0, mw)
ry.each { |y|
next unless y.between?(0, mh)

# ?????????
# (??????? ??? 1, 2, 4, 8 ???)
flag = 0
[2, 4, 6, 8].each{ |d|
flag |= 1 << (d / 2 - 1) if $game_map.passable?(x, y, d)
}
@passage_table[x, y] = flag
}
}
@passage_scan_table[dx, dy] = 1
end
#--------------------------------------------------------------------------
# ? ?????????????
#--------------------------------------------------------------------------
def update_around_passage_table
gx = @draw_grid_num.x
gy = @draw_grid_num.y
dx = $game_player.x - gx / 2
dy = $game_player.y - gy / 2
scan_passage(dx, dy)
scan_passage(dx + gx, dy)
scan_passage(dx, dy + gy)
scan_passage(dx + gx, dy + gy)
end
#--------------------------------------------------------------------------
# ? ??????????
#--------------------------------------------------------------------------
def update_object_list
events = $game_map.events.values

# WALL
@wall_events = events.find_all { |e| e.is_minimap_wall_event? }

# MOVE
@move_events = events.find_all { |e| e.is_minimap_move_event? }

# OBJ
@object_list = events.find_all { |e| e.is_minimap_object? }
end
#--------------------------------------------------------------------------
# ? ????
#--------------------------------------------------------------------------
def update_position
# ?????
pt = Point.new($game_player.x, $game_player.y)
ox = ($game_player.real_x - pt.x) * @grid_size
oy = ($game_player.real_y - pt.y) * @grid_size

@viewport.ox = ox
@viewport.oy = oy

# ?????????????
if pt.x != @last_x || pt.y != @last_y
draw_map
@last_x = pt.x
@last_y = pt.y
end
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
def in_draw_range?(x, y)
rb = @draw_range_begin
re = @draw_range_end
return (x.between?(rb.x, re.x) && y.between?(rb.y, re.y))
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def in_map_range?(x, y)
mw = $game_map.width
mh = $game_map.height
return (x.between?(0, mw - 1) && y.between?(0, mh - 1))
end
#--------------------------------------------------------------------------
# ? ?????
#--------------------------------------------------------------------------
def draw_map
update_around_passage_table

bitmap = @map_sprite.bitmap
bitmap.fill_rect(bitmap.rect, KMS_MiniMap::BACKGROUND_COLOR)

draw_map_foreground(bitmap)
draw_map_move_event(bitmap)
end
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def draw_map_foreground(bitmap)
range_x = (@draw_range_begin.x)..(@draw_range_end.x)
range_y = (@draw_range_begin.y)..(@draw_range_end.y)
map_w = $game_map.width - 1
map_h = $game_map.height - 1
rect = Rect.new(0, 0, @grid_size, @grid_size)

range_x.each { |x|
next unless x.between?(0, map_w)
range_y.each { |y|
next unless y.between?(0, map_h)
next if @passage_table[x, y] == 0
next if @wall_events.find { |e| e.x == x && e.y == y } # ?

# ???????????
rect.set(0, 0, @grid_size, @grid_size)
rect.x = (x - @draw_range_begin.x) * @grid_size
rect.y = (y - @draw_range_begin.y) * @grid_size
flag = @passage_table[x, y]
if flag & 0x01 == 0 # ?????
rect.height -= 1
end
if flag & 0x02 == 0 # ?????
rect.x += 1
rect.width -= 1
end
if flag & 0x04 == 0 # ?????
rect.width -= 1
end
if flag & 0x08 == 0 # ?????
rect.y += 1
rect.height -= 1
end
bitmap.fill_rect(rect, KMS_MiniMap::FOREGROUND_COLOR)
}
}
end
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def draw_map_move_event(bitmap)
rect = Rect.new(0, 0, @grid_size, @grid_size)
@move_events.each { |e|
rect.x = (e.x - @draw_range_begin.x) * @grid_size
rect.y = (e.y - @draw_range_begin.y) * @grid_size
bitmap.fill_rect(rect, KMS_MiniMap::MOVE_EVENT_COLOR)
}
end
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
def update_animation
if @showing
# ??????
self.opacity += 16
if opacity == 255
@showing = false
end
elsif @hiding
# ???????
self.opacity -= 16
if opacity == 0
@hiding = false
end
end
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def draw_object
# ???
bitmap = @object_sprite.bitmap
bitmap.clear
rect = Rect.new(0, 0, @grid_size, @grid_size)

# ????????
@object_list.each { |obj|
next unless in_draw_range?(obj.x, obj.y)

color = KMS_MiniMap::OBJECT_COLOR[obj.minimap_object_type - 1]
next if color.nil?

rect.x = (obj.real_x - @draw_range_begin.x) * @grid_size
rect.y = (obj.real_y - @draw_range_begin.y) * @grid_size
bitmap.fill_rect(rect, color)
}

# ?????
$game_map.vehicles.each { |vehicle|
next if vehicle.transparent

rect.x = (vehicle.real_x - @draw_range_begin.x) * @grid_size
rect.y = (vehicle.real_y - @draw_range_begin.y) * @grid_size
bitmap.fill_rect(rect, KMS_MiniMap::VEHICLE_COLOR)
}
end
#--------------------------------------------------------------------------
# ? ??
#--------------------------------------------------------------------------
def update
update_input

return unless need_update?

update_draw_range
update_position
update_animation
draw_object

@map_sprite.update
@object_sprite.update
@position_sprite.update
end
#--------------------------------------------------------------------------
# ? ????
#--------------------------------------------------------------------------
def need_update?
return (visible && opacity > 0) || @showing || @hiding
end
end

#==============================================================================
# ? Sprite_MiniMapIcon
#------------------------------------------------------------------------------
# ?????????????????
#==============================================================================

class Sprite_MiniMapIcon < Sprite
DURATION_MAX = 60
#--------------------------------------------------------------------------
# ? ?????????
# viewport : ??????
#--------------------------------------------------------------------------
def initialize(viewport = nil)
super(viewport)
@duration = DURATION_MAX / 2
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
def update
super
@duration += 1
if @duration == DURATION_MAX
@duration = 0
end
update_effect
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def update_effect
self.color.set(255, 255, 255,
(@duration - DURATION_MAX / 2).abs * KMS_MiniMap::BLINK_LEVEL
)
end
end

#==============================================================================
# ¦ Spriteset_Map
#==============================================================================

class Spriteset_Map
attr_reader :minimap
#--------------------------------------------------------------------------
# ? ?????????
#--------------------------------------------------------------------------
alias initialize_KMS_MiniMap initialize
def initialize
initialize_KMS_MiniMap

create_minimap
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def create_minimap
@minimap = Game_MiniMap.new(@tilemap)
@minimap.visible = $game_system.minimap_show && $game_map.minimap_show?
end
#--------------------------------------------------------------------------
# ? ??
#--------------------------------------------------------------------------
alias dispose_KMS_MiniMap dispose
def dispose
dispose_KMS_MiniMap

dispose_minimap
end
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
def dispose_minimap
@minimap.dispose
@minimap = nil
end
#--------------------------------------------------------------------------
# ? ??????
#--------------------------------------------------------------------------
alias update_KMS_MiniMap update
def update
update_KMS_MiniMap

update_minimap
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
def minimap_show?
return $game_map.minimap_show? && $game_system.minimap_show
end
#--------------------------------------------------------------------------
# ? ???????
#--------------------------------------------------------------------------
def update_minimap
return if @minimap.nil?

# ????
if minimap_show?
@minimap.visible = true
else
@minimap.visible = false
return
end

# ??????
case $game_map.minimap_fade
when Game_Map::MINIMAP_FADE_IN
@minimap.fadein
$game_map.minimap_fade = Game_Map::MINIMAP_FADE_NONE
when Game_Map::MINIMAP_FADE_OUT
@minimap.fadeout
$game_map.minimap_fade = Game_Map::MINIMAP_FADE_NONE
end

@minimap.update
end
#--------------------------------------------------------------------------
# ? ??????????????
#--------------------------------------------------------------------------
def refresh_minimap
return if @minimap.nil?

@minimap.clear_passage_table_cache
@minimap.refresh
end
#--------------------------------------------------------------------------
# ? ???????????????
#--------------------------------------------------------------------------
def update_minimap_object
@minimap.update_object_list unless @minimap.nil?
end
end

#==============================================================================
# ¦ Scene_Map
#==============================================================================

class Scene_Map
#--------------------------------------------------------------------------
# ? ????????
#--------------------------------------------------------------------------
alias post_transfer_KMS_MiniMap post_transfer
def post_transfer
refresh_minimap

post_transfer_KMS_MiniMap
end
#--------------------------------------------------------------------------
# ? ??????????????
#--------------------------------------------------------------------------
def refresh_minimap
@spriteset.refresh_minimap unless @spriteset.nil?
end
#--------------------------------------------------------------------------
# ? ???????????????
#--------------------------------------------------------------------------
def update_minimap_object
@spriteset.update_minimap_object unless @spriteset.nil?
end
end

Uso: Copiar en una nueva página en la parte "Personalizados" de los scripts. Durante el juego se puede desactivar / activar con la tecla D.

Si no funciona bien, se debe instalar un nuevo script de compatibilidad con el siguiente código:

#==============================================================================
# Compatibility Patch :                                         v1.1 (7/19/12)
#   Victor Engine - Pixel Movement + KMS Minimap
#   Sapphire Action System IV + KMS Minimap
#--------------------------------------------------------------------------
# Script by:
#     Mr. Bubble
#--------------------------------------------------------------------------
# Place this script below KMS Mini Map in your script edtior.
#==============================================================================

class Game_MiniMap
  #--------------------------------------------------------------------------
  # ○ 通行可否テーブルの探索
  #     x, y : 探索位置
  #--------------------------------------------------------------------------
  def scan_passage(x, y)
    dx = x / @draw_grid_num.x
    dy = y / @draw_grid_num.y

    # 探索済み
    return if @passage_scan_table[dx, dy] == 1

    # マップ範囲外
    return unless dx.between?(0, @passage_scan_table.xsize - 1)
    return unless dy.between?(0, @passage_scan_table.ysize - 1)

    rx = (dx.to_i * @draw_grid_num.x.to_i)...((dx.to_i + 1) * @draw_grid_num.x.to_i)
    ry = (dy.to_i * @draw_grid_num.y.to_i)...((dy.to_i + 1) * @draw_grid_num.y.to_i)
    mw = $game_map.width  - 1
    mh = $game_map.height - 1

    # 探索範囲内の通行テーブルを生成
    rx.each { |x|
      next unless x.between?(0, mw)
      ry.each { |y|
        next unless y.between?(0, mh)

        # 通行方向フラグ作成
        # (↓、←、→、↑ の順に 1, 2, 4, 8 が対応)
        flag = 0
        [2, 4, 6, 8].each{ |d|
          flag |= 1 << (d / 2 - 1) if $game_map.passable?(x, y, d)
        }
        @passage_table[x, y] = flag
      }
    }
    @passage_scan_table[dx, dy] = 1
  end
  #--------------------------------------------------------------------------
  # ○ 通行可能領域の描画
  #--------------------------------------------------------------------------
  def draw_map_foreground(bitmap)
    range_x = (@draw_range_begin.x.to_i)..(@draw_range_end.x.to_i)
    range_y = (@draw_range_begin.y.to_i)..(@draw_range_end.y.to_i)
    map_w   = $game_map.width  - 1
    map_h   = $game_map.height - 1
    rect    = Rect.new(0, 0, @grid_size, @grid_size)
    
    range_x.each { |x|
      next unless x.between?(0, map_w)
      range_y.each { |y|

        next unless y.between?(0, map_h)
        next if @passage_table[x, y] == 0
        next if @wall_events.find { |e| e.x == x && e.y == y }  # 壁
        # グリッド描画サイズ算出
        rect.set(0, 0, @grid_size, @grid_size)
        rect.x = (x - @draw_range_begin.x) * @grid_size
        rect.y = (y - @draw_range_begin.y) * @grid_size
        flag = @passage_table[x, y]
        if flag & 0x01 == 0  # 下通行不能
          rect.height -= 1
        end
        if flag & 0x02 == 0  # 左通行不能
          rect.x     += 1
          rect.width -= 1
        end
        if flag & 0x04 == 0  # 右通行不能
          rect.width -= 1
        end
        if flag & 0x08 == 0  # 上通行不能
          rect.y      += 1
          rect.height -= 1
        end
        bitmap.fill_rect(rect, KMS_MiniMap::FOREGROUND_COLOR)
      }
    }
  end # def
end # class

0 comentarios:

Publicar un comentario

Speak freely, friend.

Backside Games Studios

Backside Games Studios © 2014 - Designed by Templateism.com, Plugins By MyBloggerLab.com | Published By Gooyaabi Templates