#============================================================================== # ★ RGSS3_視界制限 Ver1.2 #============================================================================== =begin 作者:tomoaky webサイト:ひきも記 ([url]http://hikimoki.sakura.ne.jp/[/url]) 設定した番号のマップだけ視界を制限します。 アクター、職業、武器(防具)、ステートなどのメモ欄にタグを書き込むことで 視界制限のサイズを補正することができます。 例)<視界補正 32> 視界が 32 ドット広がります。 視界補正値の計算をおこなうのは戦闘メンバーのみとなります。 ゲーム変数(初期設定では9番)を使って視界のサイズを補正できます。 実際の視界制限サイズは上記の設定値をすべて加算したものになります。 ただし、マップに視界制限値が設定されていない場合はすべて無効です。 プレイヤーの画面上の座標が常に変わるような状況(1画面分の小さなマップなど)、 視界補正値がリアルタイムに変化する状況などでは頻繁にスプライトの再描画を 実行するため処理が重くなります 動作に必要な画像 Graphics/System/sight_shadow.png 使用するゲーム変数(初期設定) 0009 2013.01.22 Ver1.2 ・毎フレーム再描画をおこなっていた処理を改善 ・環境によってエラー落ちの原因となる部分を修正 2012.03.07 Ver1.11 ・メニューから復帰したときに視界制限が途切れる不具合を修正 2012.02.05 Ver1.1 ・タイマーが隠れてしまわないようにZ座標を調整 ・ゲーム変数を使って視界制限サイズを補正する機能を追加 2012.01.20 Ver1.0 公開 =end #============================================================================== # □ 設定項目 #============================================================================== module TMBLSIGHT # 何番のマップをどれだけ視界制限するか # 例)SIGHT[3] = 128 # 3番のマップの視界を128ドット四方に制限する SIGHT = {} SIGHT[3] = 256 VN_SIGHT = 9 # 視界のサイズ補正に利用するゲーム変数番号 end #============================================================================== # □ RPG::BaseItem #============================================================================== class RPG::BaseItem #-------------------------------------------------------------------------- # ○ 視界制限の補正値 #-------------------------------------------------------------------------- def sight_power unless @sight_power @sight_power = /<視界補正\s*(\-*\d+)\s*>/ =~ @note ? $1.to_i : 0 end @sight_power end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor #-------------------------------------------------------------------------- # ○ 視界制限の補正値 #-------------------------------------------------------------------------- def sight_power feature_objects.inject(0) {|result, object| result + object.sight_power } end end #============================================================================== # □ Sprite_SightShadow #============================================================================== class Sprite_SightShadow < Sprite #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(viewport = nil) super(viewport) self.z = 199 self.bitmap = Bitmap.new(Graphics.width, Graphics.height) @bitmap_shadow = Bitmap.new("Graphics/System/sight_shadow") end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- def dispose self.bitmap.dispose @bitmap_shadow.dispose super end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super if TMBLSIGHT::SIGHT[$game_map.map_id] self.visible = true w = TMBLSIGHT::SIGHT[$game_map.map_id] # マップに設定された補正値 w += $game_variables[TMBLSIGHT::VN_SIGHT] # ゲーム変数による補正値 $game_party.battle_members.each do |actor| w = [w + actor.sight_power, 48].max # 戦闘メンバーの補正値 end x = $game_player.screen_x - w / 2 y = $game_player.screen_y - w / 2 - 16 if w != @last_w || x != @last_x || y != @last_y @last_w = w @last_x = x @last_y = y self.bitmap.clear rect = Rect.new(x, y, w, w) self.bitmap.stretch_blt(rect, @bitmap_shadow, @bitmap_shadow.rect) color = Color.new(0, 0, 0) self.bitmap.fill_rect(0, 0, Graphics.width, y, color) self.bitmap.fill_rect(0, y + w, Graphics.width, Graphics.height - y - w, color) self.bitmap.fill_rect(0, y, x, w, color) self.bitmap.fill_rect(x + w, y, Graphics.width - x - w, w, color) end else self.visible = false end end end #============================================================================== # ■ Spriteset_Map #============================================================================== class Spriteset_Map #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias tmblsight_spriteset_map_initialize initialize def initialize tmblsight_spriteset_map_initialize create_sight_shadow end #-------------------------------------------------------------------------- # ○ 視界制限スプライトの作成 #-------------------------------------------------------------------------- def create_sight_shadow @sight_shadow_sprite = Sprite_SightShadow.new(@viewport2) update_sight_shadow end #-------------------------------------------------------------------------- # ● 解放 #-------------------------------------------------------------------------- alias tmblsight_spriteset_map_dispose dispose def dispose dispose_sight_shadow tmblsight_spriteset_map_dispose end #-------------------------------------------------------------------------- # ○ 視界制限スプライトの解放 #-------------------------------------------------------------------------- def dispose_sight_shadow @sight_shadow_sprite.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias tmblsight_spriteset_map_update update def update update_sight_shadow tmblsight_spriteset_map_update end #-------------------------------------------------------------------------- # ○ 視界制限スプライトの更新 #-------------------------------------------------------------------------- def update_sight_shadow @sight_shadow_sprite.update if @sight_shadow_sprite end end