#============================================================================== # ■ RGSS3 タイル色相変更 Ver1.00 by 星潟 #------------------------------------------------------------------------------ # マップタイルの色相を変更できるようになります。 # この処理はやや重い為、もし可能であれば # マップチップの画像自体の容量を軽量化ソフト等で # 軽くしておいた方が良いかもしれません。 #============================================================================== # マップのメモ欄に指定する場合 #------------------------------------------------------------------------------ # # # A1タイルの色相を30に変更する。(359が最大値) #------------------------------------------------------------------------------ # # # A2タイルの色相を60に変更する。(359が最大値) #------------------------------------------------------------------------------ # # # A3タイルの色相を90に変更する。(359が最大値) #------------------------------------------------------------------------------ # # # A4タイルの色相を120に変更する。(359が最大値) #------------------------------------------------------------------------------ # # # A5タイルの色相を150に変更する。(359が最大値) #------------------------------------------------------------------------------ # # # Bタイルの色相を180に変更する。(359が最大値) #------------------------------------------------------------------------------ # # # Cタイルの色相を210に変更する。(359が最大値) #------------------------------------------------------------------------------ # # # Dタイルの色相を240に変更する。(359が最大値) #------------------------------------------------------------------------------ # # # Eタイルの色相を270に変更する。(359が最大値) #============================================================================== # イベントコマンドのスクリプトから現在のマップの色相を変更する場合 #------------------------------------------------------------------------------ # a1 = 30 # a2 = 60 # a3 = 90 # a4 = 120 # a5 = 150 # b = 180 # c = 210 # d = 240 # e = 270 # tilemap_hue(a1,a2,a3,a4,a5,b,c,d,e) # A1タイルの色相を30、A2タイルの色相を60、A3タイルの色相を90、 # A4タイルの色相を120、A5タイルの色相を150、Bタイルの色相を180、 # Cタイルの色相を210、Dタイルの色相を240、Eタイルの色相を270に変更する。 #============================================================================== module TileMapHue #タイル色相変更用の設定用キーワードを指定。 Word = "タイル色相" end module Cache #-------------------------------------------------------------------------- # タイルセット グラフィックの取得 #-------------------------------------------------------------------------- def self.tileset_tilemap_hue(filename,hue) true_hue = (hue % 360).to_i bitmap = load_bitmap("Graphics/Tilesets/", filename, true_hue) if true_hue > 0 @hue_changed_tilemap ||= {} @hue_changed_tilemap[filename] ||= [] @hue_changed_tilemap[filename].push(true_hue) unless @hue_changed_tilemap[filename].include?(true_hue) end bitmap end #-------------------------------------------------------------------------- # 色相変更を行ったタイルセットグラフィック名のハッシュを用意 #-------------------------------------------------------------------------- def self.hue_changed_tilemap @hue_changed_tilemap ||= {} end #-------------------------------------------------------------------------- # 色相変更を行ったタイルセットグラフィックを解放 #-------------------------------------------------------------------------- def self.dispose_hue_changed_tilemap @cache ||= {} return if hue_changed_tilemap.empty? @hue_changed_tilemap.each {|k,a| path = "Graphics/Tilesets/" + k a.each {|i| key = [path,i] if @cache[key] @cache[key].dispose unless @cache[key].disposed? @cache[key] = nil end}} @hue_changed_tilemap.clear end end class Game_Map attr_accessor :tilemap_hue #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_tilemap_hue initialize def initialize @tilemap_hue = [0,0,0,0,0,0,0,0,0] initialize_tilemap_hue end #-------------------------------------------------------------------------- # セットアップ #-------------------------------------------------------------------------- alias setup_tilemap_hue setup def setup(map_id) setup_tilemap_hue(map_id) @tilemap_hue = @map.tile_hue end end class Game_Interpreter #-------------------------------------------------------------------------- # タイルセットの色相変更を一括実行 #-------------------------------------------------------------------------- def tilemap_hue(a1,a2,a3,a4,a5,b,c,d,e) $game_map.tilemap_hue = [a1,a2,a3,a4,a5,b,c,d,e] end end class Spriteset_Map #-------------------------------------------------------------------------- # タイルセットの更新 #-------------------------------------------------------------------------- alias update_tileset_tilemap_hue update_tileset def update_tileset @tileset = nil if @tilemap_hue != $game_map.tilemap_hue update_tileset_tilemap_hue end #-------------------------------------------------------------------------- # タイルセットのロード #-------------------------------------------------------------------------- alias load_tileset_tilemap_hue load_tileset def load_tileset load_tileset_tilemap_hue Cache.dispose_hue_changed_tilemap h = $game_map.tilemap_hue if @tilemap_hue != h @tilemap_hue = h @tileset.tileset_names.each_with_index do |name, i| @tilemap.bitmaps[i] = Cache.tileset_tilemap_hue(name,h[i]) if h[i] != 0 end end end end class RPG::Map #-------------------------------------------------------------------------- # タイルセットの色相を取得 #-------------------------------------------------------------------------- def tile_hue @tile_hue ||= create_tile_hue end #-------------------------------------------------------------------------- # タイルセットの色相データを作成 #-------------------------------------------------------------------------- def create_tile_hue a = [] w1 = TileMapHue::Word n = ["A1","A2","A3","A4","A5","B","C","D","E"].each_with_index {|w2,i| a[i] = /<#{w2}#{w1}[::](\d+)>/ =~ note ? $1.to_i : 0} a end end