#============================================================================== # ■擬似リージョン展開 for RGSS3 Ver1.00-β # □作成者 kure #============================================================================== #============================================================================== # ■ Game_Map #============================================================================== class Game_Map #-------------------------------------------------------------------------- # ● セットアップ(エイリアス) #-------------------------------------------------------------------------- alias k_dr_before_setup setup def setup(map_id) k_dr_before_setup(map_id) @dummy_region = Table.new(width, height) end #-------------------------------------------------------------------------- # ● リージョン ID の取得(エイリアス) #-------------------------------------------------------------------------- alias k_dr_before_region_id region_id def region_id(x, y) return k_dr_before_region_id(x, y) if k_dr_before_region_id(x, y) != 0 return 0 unless valid?(x, y) return @dummy_region[x,y] ? @dummy_region[x,y] : 0 end #-------------------------------------------------------------------------- # ● 擬似リージョンのセット #-------------------------------------------------------------------------- def set_dummy_region(x, y, id) @dummy_region[x, y] = id end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp #-------------------------------------------------------------------------- # ★ 展開したリージョンをキャッシュする(追加定義) #-------------------------------------------------------------------------- def region_memory(x, y, memory_id) @maked_region ||=[] @maked_region[memory_id] ||= [] @maked_region[memory_id].push([x, y]) end #-------------------------------------------------------------------------- # ★ リージョンのキャッシュを読み込む(追加定義) #-------------------------------------------------------------------------- def maked_region(memory_id) @maked_region ||=[] @maked_region[memory_id] ||= [] return @maked_region[memory_id] end #-------------------------------------------------------------------------- # ★ リージョンをキャッシュクリアする(追加定義) #-------------------------------------------------------------------------- def clear_region_memory(memory_id) @maked_region ||=[] @maked_region[memory_id] = [] end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ★ 指定座標にリージョンを展開(追加定義) #-------------------------------------------------------------------------- def make_region(x, y, id, memory = 0) $game_map.set_dummy_region(x, y, id) $game_temp.region_memory(x, y, memory) end #-------------------------------------------------------------------------- # ★ 指定座標のリージョンを削除(追加定義) #-------------------------------------------------------------------------- def clear_region(x, y) $game_map.set_dummy_region(x, y, 0) end #-------------------------------------------------------------------------- # ★ 指定記録IDのリージョンを削除(追加定義) #-------------------------------------------------------------------------- def clear_memory_region(memory_id) $game_temp.maked_region(memory_id).each{|pos| next unless pos clear_region(pos[0], pos[1])} $game_temp.clear_region_memory(memory_id) end #-------------------------------------------------------------------------- # ★ プレーヤーの足元にリージョンを展開(追加定義) #-------------------------------------------------------------------------- def make_region_foot(id, mode, range, memory = 0) x = $game_player.x y = $game_player.y area = Array.new case mode when 0 x_list = ((x - range)..(x + range)).to_a y_list = ((y - range)..(y + range)).to_a x_list.each{|x_pos| y_list.each{|y_pos| area.push([x_pos, y_pos]) }} when 1 x_list = ((x - range)..(x + range)).to_a y_list = ((y - range)..(y + range)).to_a x_list.each{|x_pos| y_list.each{|y_pos| area.push([x_pos, y_pos]) if x_pos == x or y_pos == y} } end area.each{|pos| make_region(pos[0], pos[1], id, memory)} end end