#============================================================================== # ■ RGSS3 マップ・キャラクター簡易モザイク Ver1.00 by 星潟 #------------------------------------------------------------------------------ # マップとキャラクターに簡易モザイクを適用します。 # 正確には、マップとキャラクターを描写しているビューポートの画像を # 一枚の画像として保存し、その画像に対して簡易モザイクを適用した上で # マップとキャラクターよりも上に表示させることで簡易モザイクを実現させています。 #============================================================================== module MapMosaicEffect #処理内容決定用の変数IDを指定。 #格納される値が2より大きい場合、モザイクを適用し #1以下の場合は適用しなくなる。 #ただし小さい値を適用すると負荷が増大。 #モザイクを適用する場合、格納する値は6以上が推奨。 VID = 43 #画像取得用のビューポートの変数名を指定。(通常は変更不要) TV = ["@viewport1"] #画像取得用のビューポートに一時的に追加するZ座標補正値を指定。 TVZ = 100000000 #モザイク中の画面更新速度を指定。 #数字が小さいほど早くなるが、負荷が増大。 Frequence = 5 end class Spriteset_Map #-------------------------------------------------------------------------- # ビューポートの更新 #-------------------------------------------------------------------------- alias update_viewports_mosaic_effect update_viewports def update_viewports update_viewports_mosaic_effect update_mosaic_sprite end #-------------------------------------------------------------------------- # ビューポートの解放 #-------------------------------------------------------------------------- alias dispose_viewports_mosaic_effect dispose_viewports def dispose_viewports dispose_mosaic_sprite dispose_viewports_mosaic_effect end #-------------------------------------------------------------------------- # モザイクスプライトの更新 #-------------------------------------------------------------------------- def update_mosaic_sprite v = $game_variables[MapMosaicEffect::VID] if @last_mosaic != v @last_mosaic = v dispose_mosaic_sprite if v > 1 a = MapMosaicEffect::TV.collect {|v| eval(v)} @mosaic_sprite = Sprite_MapMosaic.new(nil,a) end end @mosaic_sprite.update if @mosaic_sprite end #-------------------------------------------------------------------------- # モザイクスプライトの解放 #-------------------------------------------------------------------------- def dispose_mosaic_sprite if @mosaic_sprite @mosaic_sprite.dispose @mosaic_sprite = nil end end end class Sprite_MapMosaic < Sprite #-------------------------------------------------------------------------- # 初期化 #-------------------------------------------------------------------------- def initialize(main_viewport,target_viewports) super(main_viewport) @target_viewports = target_viewports self.z = (@target_viewports.max_by {|v| v.z}).z @update_count = 0 end #-------------------------------------------------------------------------- # 更新 #-------------------------------------------------------------------------- def update super update_bitmap end #-------------------------------------------------------------------------- # ビットマップの更新 #-------------------------------------------------------------------------- def update_bitmap if @update_count == 0 dispose_bitmap az = MapMosaicEffect::TVZ @target_viewports.each {|v| v.z += az} self.bitmap = Graphics.snap_to_bitmap self.bitmap.execute_star_mosaic($game_variables[MapMosaicEffect::VID]) @target_viewports.each {|v| v.z -= az} end @update_count += 1 @update_count = 0 if @update_count >= MapMosaicEffect::Frequence end #-------------------------------------------------------------------------- # 解放 #-------------------------------------------------------------------------- def dispose dispose_bitmap super end #-------------------------------------------------------------------------- # ビットマップの解放 #-------------------------------------------------------------------------- def dispose_bitmap self.bitmap.dispose if self.bitmap self.bitmap = nil end end class Bitmap #-------------------------------------------------------------------------- # モザイクの適用 #-------------------------------------------------------------------------- def execute_star_mosaic(value) xn = (self.width.to_f / value).ceil yn = (self.height.to_f / value).ceil xn.times do |xi| xivm = xi * value yn.times do |yi| yivm = yi * value fill_rect(xivm,yivm,value,value,get_pixel(xivm,yivm)) end end self end end