Region Display
Version: 1.3
Author: TDS
Date: January 23, 2013
Version History
- <Version 1.0> 2013.01.23 - Public Release
- <Version 1.3> 2013.01.24 - Bug fixes & Code improvements
Description
This script allows you to see Region tiles in your game by pressing F8.
Features
Screenshots
(https://rmrk.net/proxy.php?request=http%3A%2F%2Fi.imgur.com%2FqGZ8Bgn.png&hash=095669780a6afa71040d0b722ce7149a9902920b)
Instructions
Just put the script in your game and while testing press the F8 key to toggle the visibility of Region tiles.
Script
#==============================================================================
# ** TDS Region Display
# Ver: 1.3
#------------------------------------------------------------------------------
# * Description:
# This script allows you to see Region tiles in your game by pressing F8.
#------------------------------------------------------------------------------
# * Features:
# Viewing Region tiles.
#------------------------------------------------------------------------------
# * Instructions:
# Just put it in your game and pres the F8 key while testing the game to toggle
# the visibility of Region tiles.
#------------------------------------------------------------------------------
# * Notes:
# None.
#------------------------------------------------------------------------------
# WARNING:
#
# Do not release, distribute or change my work without my expressed written
# consent, doing so violates the terms of use of this work.
#
# If you really want to share my work please just post a link to the original
# site.
#
# * Not Knowing English or understanding these terms will not excuse you in any
# way from the consequenses.
#==============================================================================
# * Import to Global Hash *
#==============================================================================
($imported ||= {})[:TDS_Region_Display] = true
#==============================================================================
# ** Cache
#------------------------------------------------------------------------------
# This module loads graphics, creates bitmap objects, and retains them.
# To speed up load times and conserve memory, this module holds the
# created bitmap object in the internal hash, allowing the program to
# return preexisting objects when the same bitmap is requested again.
#==============================================================================
module Cache
#--------------------------------------------------------------------------
# * Create Region Tileset
#--------------------------------------------------------------------------
def self.create_region_tileset_bitmap
@cache ||= {}
# If Cache Does not have Region Tileset Key
if !@cache.has_key?(:region_tileset) or region_tileset_bitmap.disposed?
# Create Region Tileset Bitmap
bitmap = Bitmap.new(256, 544) ; bitmap.font.bold = true
# Go Through 64 Region Tiles (2 times for over and under tiles)
128.times {|i|
id = i % 64
# Get Region Colors and X & Y Drawing Coordinates
colors = region_colors(id, 110) ; x = (i % 8) * 32 ; y = (i / 8) * 32
# Draw Region Color Rect
bitmap.fill_rect(x, y, 32, 32, colors.at(0))
bitmap.fill_rect(x + 3, y + 3, 26, 26, colors.at(1))
# Draw Region ID
bitmap.draw_text(x, y, 32, 32, id, 1) if id != 0
}
# Get Region Colors and X & Y Drawing Coordinates
colors = region_colors(64, 110) ; x = (64 % 8) * 32 ; y = (64 / 8) * 32
# Draw Region Color Rect
bitmap.fill_rect(x, y, 32, 32, colors.at(0))
bitmap.fill_rect(x + 3, y + 3, 26, 26, colors.at(1))
# Add Region Tileset bitmap to Cache
@cache[:region_tileset] = bitmap
end
end
#--------------------------------------------------------------------------
# * Get Region Tileset Bitmap
#--------------------------------------------------------------------------
def self.region_tileset_bitmap ; @cache[:region_tileset] end
#--------------------------------------------------------------------------
# * Get Region Colors (Outer, Inner)
# id : region id
# alpha : color alpha value
#--------------------------------------------------------------------------
def self.region_colors(id, alpha = 110)
return [Color.new(0, 0, 0, alpha), Color.new(0, 0, 0, alpha)] if id > 63
case id % 12
when 0 ; [Color.new(255, 68, 164, alpha), Color.new(255, 52, 156, alpha)]
when 1 ; [Color.new(255, 67, 67, alpha), Color.new(255, 51, 51, alpha)]
when 2 ; [Color.new(255, 161, 68, alpha), Color.new(255, 153, 52, alpha)]
when 3 ; [Color.new(255, 252, 68, alpha), Color.new(255, 252, 52, alpha)]
when 4 ; [Color.new(164, 255, 68, alpha), Color.new(156, 255, 52, alpha)]
when 5 ; [Color.new(68, 255, 68, alpha), Color.new(52, 255, 52, alpha)]
when 6 ; [Color.new(68, 255, 161, alpha), Color.new(52, 255, 153, alpha)]
when 7 ; [Color.new(68, 255, 252, alpha), Color.new(52, 255, 252, alpha)]
when 8 ; [Color.new(68, 164, 255, alpha), Color.new(52, 156, 255, alpha)]
when 9 ; [Color.new(68, 72, 255, alpha), Color.new(52, 57, 255, alpha)]
when 10 ; [Color.new(156, 68, 255, alpha), Color.new(148, 52, 255, alpha)]
when 11 ; [Color.new(252, 68, 255, alpha), Color.new(252, 52, 255, alpha)]
end
end
end
#==============================================================================
# ** Spriteset_Map
#------------------------------------------------------------------------------
# This class brings together map screen sprites, tilemaps, etc. It's used
# within the Scene_Map class.
#==============================================================================
class Spriteset_Map
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_reader :region_tilemap # Region Tilemap
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias tds_region_display_spriteset_map_initialize initialize
alias tds_region_display_spriteset_map_refresh_characters refresh_characters
alias tds_region_display_spriteset_map_dispose dispose
alias tds_region_display_spriteset_map_update update
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
def initialize(*args, &block)
# Run Original Method
tds_region_display_spriteset_map_initialize(*args, &block)
# Create Region Display Tilemap
create_region_display_tilemap
end
#--------------------------------------------------------------------------
# * Refresh Characters
#--------------------------------------------------------------------------
def refresh_characters(*args, &block)
# Run Original Method
tds_region_display_spriteset_map_refresh_characters(*args, &block)
# Previous Visibility of Region Tilemap
prev_vis = @region_tilemap.visible
# Dispose of Region Tilemap & Recreate it
dispose_region_tilemap ; create_region_display_tilemap
# Set Region Tilemap Visibility
@region_tilemap.visible = prev_vis
end
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update(*args, &block)
# Run Original Method
tds_region_display_spriteset_map_update(*args, &block)
# Update Region Tilemap
update_region_tilemap
end
#--------------------------------------------------------------------------
# * Free
#--------------------------------------------------------------------------
def dispose(*args, &block)
# Run Original Method
tds_region_display_spriteset_map_dispose(*args, &block)
# Dispose of Region Tilemap
dispose_region_tilemap
end
#--------------------------------------------------------------------------
# * Free Region Tilemap
#--------------------------------------------------------------------------
def dispose_region_tilemap ; @region_tilemap.dispose end
#--------------------------------------------------------------------------
# * Create Region Display Tilemap
#--------------------------------------------------------------------------
def create_region_display_tilemap
# Create Region Tileset
Cache.create_region_tileset_bitmap
# Create Region Tilemap
@region_tilemap = Tilemap.new(@viewport1)
@region_tilemap.map_data = $game_map.data.dup
@region_tilemap.flags = Table.new(8192)
# Make Region Tilemap Invisible
@region_tilemap.visible = false
# Set Region Tilemap Flags (Over Character [?])
64.upto(128) {|n| @region_tilemap.flags[n] = 0x10}
# Go Through Game Map Tiles
$game_map.data.xsize.times {|x|
$game_map.data.ysize.times {|y|
# Clear Region Tilemap Info
4.times {|z| @region_tilemap.map_data[x, y, z] = 0}
# Get Region ID
region_id = $game_map.region_id(x, y)
# Get Passability Flags
flag1 = $game_map.tileset.flags[$game_map.data[x, y, 2]]
# If Region ID is 0 or more
if region_id > 0
next @region_tilemap.map_data[x, y, 2] = 64 + region_id if flag1 > 16 and flag1 & 0x10 != 0
@region_tilemap.map_data[x, y, 2] = region_id
else
next @region_tilemap.map_data[x, y, 2] = 64 if flag1 > 16 and flag1 & 0x10 != 0
next @region_tilemap.map_data[x, y, 1] = 64
end
}
}
# Set Region Tilemap Bitmap (Tile B)
@region_tilemap.bitmaps[5] = Cache.region_tileset_bitmap
# Update Region Tilemap
update_region_tilemap
end
#--------------------------------------------------------------------------
# * Update Region Tilemap
#--------------------------------------------------------------------------
def update_region_tilemap
# Return if Region Tilemap is nil
return if @region_tilemap.nil?
# Set Region Tilemap OX & OY Values
@region_tilemap.ox = $game_map.display_x * 32
@region_tilemap.oy = $game_map.display_y * 32
end
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# This class performs the map screen processing.
#==============================================================================
class Scene_Map < Scene_Base
#--------------------------------------------------------------------------
# * Alias Listing
#--------------------------------------------------------------------------
alias tds_region_display_scene_map_update update
#--------------------------------------------------------------------------
# * Frame Update
#--------------------------------------------------------------------------
def update(*args, &block)
# Update Region Display Input
update_region_display_input
# Run Original Method
tds_region_display_scene_map_update(*args, &block)
end
#--------------------------------------------------------------------------
# * Update Region Display Input
#--------------------------------------------------------------------------
def update_region_display_input
# If Input Trigger F8
if $TEST and Input.trigger?(:F8)
# Toggle Region Tilemap Visibility
@spriteset.region_tilemap.visible = !@spriteset.region_tilemap.visible
end
end
end
Credit
Thanks
- modern algebra for his help with the color selection method.
Support
On this topic.
Known Compatibility Issues
None that I'm aware of.
Author's Notes
I know this script might not be of much use to a lot of people, but working on it has helped me develop a lot of other more complex scripts that use the Tilemap class.
Restrictions
Only for use in non-commercial games.
This is a neat script. One minor thing I noticed on a brief review of your code was this:
case id
when 1, 13, 25, 37, 49, 61 ; [Color.new(255, 67, 67, alpha), Color.new(255, 51, 51, alpha)]
when 2, 14, 26, 38, 50, 62 ; [Color.new(255, 161, 68, alpha), Color.new(255, 153, 52, alpha)]
when 3, 15, 27, 39, 51, 63 ; [Color.new(255, 252, 68, alpha), Color.new(255, 252, 52, alpha)]
when 4, 16, 28, 40, 52 ; [Color.new(164, 255, 68, alpha), Color.new(156, 255, 52, alpha)]
when 5, 17, 29, 41, 53 ; [Color.new(68, 255, 68, alpha), Color.new(52, 255, 52, alpha)]
when 6, 18, 30, 42, 54 ; [Color.new(68, 255, 161, alpha), Color.new(52, 255, 153, alpha)]
when 7, 19, 31, 43, 55 ; [Color.new(68, 255, 252, alpha), Color.new(52, 255, 252, alpha)]
when 8, 20, 32, 44, 56 ; [Color.new(68, 164, 255, alpha), Color.new(52, 156, 255, alpha)]
when 9, 21, 33, 45, 57 ; [Color.new(68, 72, 255, alpha), Color.new(52, 57, 255, alpha)]
when 10, 22, 34, 46, 58 ; [Color.new(156, 68, 255, alpha), Color.new(148, 52, 255, alpha)]
when 11, 23, 35, 47, 59 ; [Color.new(252, 68, 255, alpha), Color.new(252, 52, 255, alpha)]
when 12, 24, 36, 48, 60 ; [Color.new(255, 68, 164, alpha), Color.new(255, 52, 156, alpha)]
else ; [Color.new(0, 0, 0, alpha), Color.new(0, 0, 0, alpha)]
end
It might be more efficient to do something like this:
return [Color.new(0, 0, 0, alpha), Color.new(0, 0, 0, alpha)] if id > 63
case id % 12
when 0 ; [Color.new(255, 68, 164, alpha), Color.new(255, 52, 156, alpha)]
when 1 ; [Color.new(255, 67, 67, alpha), Color.new(255, 51, 51, alpha)]
when 2 ; [Color.new(255, 161, 68, alpha), Color.new(255, 153, 52, alpha)]
when 3 ; [Color.new(255, 252, 68, alpha), Color.new(255, 252, 52, alpha)]
when 4 ; [Color.new(164, 255, 68, alpha), Color.new(156, 255, 52, alpha)]
when 5 ; [Color.new(68, 255, 68, alpha), Color.new(52, 255, 52, alpha)]
when 6 ; [Color.new(68, 255, 161, alpha), Color.new(52, 255, 153, alpha)]
when 7 ; [Color.new(68, 255, 252, alpha), Color.new(52, 255, 252, alpha)]
when 8 ; [Color.new(68, 164, 255, alpha), Color.new(52, 156, 255, alpha)]
when 9 ; [Color.new(68, 72, 255, alpha), Color.new(52, 57, 255, alpha)]
when 10 ; [Color.new(156, 68, 255, alpha), Color.new(148, 52, 255, alpha)]
when 11 ; [Color.new(252, 68, 255, alpha), Color.new(252, 52, 255, alpha)]
end
Anyway, that's minor. I think this is a very helpful debug tool.