#============================================================================== # ■ RGSS3 エンカウントゲージ Ver1.01 by 星潟 #------------------------------------------------------------------------------ # マップ画面でのランダムエンカウントについて # 次のエンカウントまでの歩数カウントをゲージで表示します。 # ゲージスキン(背景部分)とゲージ(歩数カウントによって変動するバーの部分)の # 2つを画面に表示するのが主な機能です。 # 自作画像をゲージスキンとゲージに用いる事も出来ます。 # その場合、GraphicsフォルダのSystemフォルダに # SkinとGaugeの項目で指定された画像ファイルを入れて下さい。 # デフォルトではゲージスキンがEncountGaugeSkin1、 # ゲージ部分がEncountGauge1というファイル名に指定されています。 #============================================================================== module EncountGauge #ゲージ・ゲージスキンを表示する条件となるスイッチIDを指定。 SID = 12 #エンカウントする敵が設定されていないマップではゲージの表示を消すか否かを指定。 #trueで消す。falseで消さない。 NoEncountMapZero = true #エンカウントする敵がいない座標ではゲージの表示を消すか否かを指定。 #(動作が重くなる場合があります。要注意) #trueで消す。falseで消さない。 NoEncountPosZero = true #エンカウント禁止状態ではゲージの表示を消すか否かを指定。 #trueで消す。falseで消さない。 NoEncountSeal = true #乗り物に乗り降り(乗っている間ではなく、乗降タイミング)している間は #ゲージ・ゲージスキンを消すか否かを指定。 VehicleGetting = true #ゲージ・ゲージスキンの表示状態が切り替わった場合、エンカウント歩数も作り直すか? #trueで作り直す。falseで作り直さない。 GVC_RemakeEncount = true #ゲージが縦向きか横向きかを指定。 #trueで縦向き、falseで横向き。 Vertical = true #ゲージスキンのX座標を指定。 SkinX = 520 #ゲージスキンのY座標を指定。 SkinY = 24 #ゲージのX座標を指定。 GaugeX = 520 #ゲージのY座標を指定。 GaugeY = 24 #ゲージ・ゲージスキンのビューポートを指定。 #特に拘りがなければ変更不要。 Viewport = "@viewport2" #独自画像を使用するか否かを指定。 #trueで使用し、false使用しない。 AnotherGraphic = false #★★★AnotherGraphicがfalseの場合の設定 #ゲージスキンの横幅を指定。(横向きゲージの場合はこちらを長く) SkinW = 4 #ゲージスキンの縦幅を指定。(縦向きゲージの場合はこちらを長く) SkinH = 100 #ゲージスキンにおいてゲージの割合が低い側のグラデーション基本色を指定。 SkinColor1 = [16,4,0] #ゲージスキンにおいてゲージの割合が高い側のグラデーション基本色を指定。 SkinColor2 = [32,8,0] #ゲージスキン画像の仮の名前を指定。基本的に変更不要。 SkinTempName = "EncountGaugeSkin" #ゲージの横幅を指定。(横向きゲージの場合はこちらを長く) GaugeW = 4 #ゲージの縦幅を指定。(縦向きゲージの場合はこちらを長く) GaugeH = 100 #ゲージにおいてゲージの割合が低い側のグラデーション基本色を指定。 GaugeColor1 = [128,32,0] #ゲージにおいてゲージの割合が高い側のグラデーション基本色を指定。 GaugeColor2 = [255,64,0] #ゲージ画像の仮の名前を指定。基本的に変更不要。 GaugeTempName = "EncountGauge" #★★★AnotherGraphicがfalseの場合の設定ここまで #★★★AnotherGraphicがtrueの場合の設定 #ゲージスキンのファイル名を指定。 Skin = "EncountGaugeSkin1" #ゲージのファイル名を指定。 Gauge = "EncountGauge1" #★★★AnotherGraphicがtrueの場合の設定ここまで end module Cache #-------------------------------------------------------------------------- # ゲージスキンの画像を作成 #-------------------------------------------------------------------------- def self.encount_gauge_skin @cache ||= {} path = EncountGauge::SkinTempName if !@cache[path] or @cache[path].disposed? @cache[path] = Bitmap.new(EncountGauge::SkinW,EncountGauge::SkinH) v = EncountGauge::Vertical c1 = v ? EncountGauge::SkinColor2 : EncountGauge::SkinColor1 c2 = v ? EncountGauge::SkinColor1 : EncountGauge::SkinColor2 @cache[path].gradient_fill_rect(@cache[path].rect, Color.new(c1[0],c1[1],c1[2]),Color.new(c2[0],c2[1],c2[2]),v) end @cache[path] end #-------------------------------------------------------------------------- # ゲージの画像を作成 #-------------------------------------------------------------------------- def self.encount_gauge @cache ||= {} path = EncountGauge::GaugeTempName if !@cache[path] or @cache[path].disposed? @cache[path] = Bitmap.new(EncountGauge::GaugeW,EncountGauge::GaugeH) v = EncountGauge::Vertical c1 = v ? EncountGauge::GaugeColor2 : EncountGauge::GaugeColor1 c2 = v ? EncountGauge::GaugeColor1 : EncountGauge::GaugeColor2 @cache[path].gradient_fill_rect(@cache[path].rect, Color.new(c1[0],c1[1],c1[2]),Color.new(c2[0],c2[1],c2[2]),v) end @cache[path] end end class Game_Player < Game_Character attr_accessor :encounter_extra_visible #-------------------------------------------------------------------------- # エンカウントカウント作成 #-------------------------------------------------------------------------- alias make_encounter_count_encount_gauge make_encounter_count def make_encounter_count make_encounter_count_encount_gauge @encounter_count_max = @encounter_count end #-------------------------------------------------------------------------- # エンカウントゲージ割合 #-------------------------------------------------------------------------- def get_encounter_count_rate return 0 unless @encounter_count_max now = (@encounter_count_max - @encounter_count) now = @encounter_count_max if @encounter_count <= 0 now.to_f / @encounter_count_max end #-------------------------------------------------------------------------- # 乗り物乗降中か? #-------------------------------------------------------------------------- def encounter_vehicle_getting? @vehicle_getting_on or @vehicle_getting_off end end class Sprite_EncountGaugeBase < Sprite #-------------------------------------------------------------------------- # 初期化 #-------------------------------------------------------------------------- def initialize(viewport = nil) super(viewport) @last_map_id = nil set_bitmap set_position update end #-------------------------------------------------------------------------- # ビットマップの設定 #-------------------------------------------------------------------------- def set_bitmap self.bitmap = EncountGauge::AnotherGraphic ? Cache.system(bitmap_name) : get_by_drawn_bitmap end #-------------------------------------------------------------------------- # 更新 #-------------------------------------------------------------------------- def update super if @last_map_id != $game_map.map_id @last_map_id = $game_map.map_id @encounter_list_empty = $game_map.encounter_list.empty? end self.visible = check_extra_visible_setting end end class Sprite_EncountGaugeSkin < Sprite_EncountGaugeBase #-------------------------------------------------------------------------- # ビットマップ名 #-------------------------------------------------------------------------- def bitmap_name EncountGauge::Skin end #-------------------------------------------------------------------------- # EncountGauge::AnotherGraphicがfalseの場合、描写したビットマップを取得 #-------------------------------------------------------------------------- def get_by_drawn_bitmap Cache.encount_gauge_skin end #-------------------------------------------------------------------------- # 座標設定 #-------------------------------------------------------------------------- def set_position self.x = EncountGauge::SkinX self.y = EncountGauge::SkinY end #-------------------------------------------------------------------------- # 可視判定 #-------------------------------------------------------------------------- def check_extra_visible_setting f = $game_switches[EncountGauge::SID] f = (@encounter_list_empty ? false : true) if f && EncountGauge::NoEncountMapZero f = $game_map.encounter_list.any? {|e| $game_player.encounter_ok?(e)} if f && EncountGauge::NoEncountPosZero f = ($game_system.encounter_disabled ? false : true) if f && EncountGauge::NoEncountSeal f = !$game_player.encounter_vehicle_getting? if f && EncountGauge::VehicleGetting if EncountGauge::GVC_RemakeEncount && $game_player.encounter_extra_visible != f $game_player.make_encounter_count end $game_player.encounter_extra_visible = f end end class Sprite_EncountGauge < Sprite_EncountGaugeBase #-------------------------------------------------------------------------- # ビットマップ名 #-------------------------------------------------------------------------- def bitmap_name EncountGauge::Gauge end #-------------------------------------------------------------------------- # 座標設定 #-------------------------------------------------------------------------- def set_position self.x = EncountGauge::GaugeX self.y = EncountGauge::GaugeY end #-------------------------------------------------------------------------- # 更新 #-------------------------------------------------------------------------- def update super update_rect end #-------------------------------------------------------------------------- # ビットマップの設定 #-------------------------------------------------------------------------- def set_bitmap super @bitmap_rect = self.bitmap.rect end #-------------------------------------------------------------------------- # EncountGauge::AnotherGraphicがfalseの場合、描写したビットマップを取得 #-------------------------------------------------------------------------- def get_by_drawn_bitmap Cache.encount_gauge end #-------------------------------------------------------------------------- # 矩形の更新 #-------------------------------------------------------------------------- def update_rect rate = $game_player.get_encounter_count_rate if @last_rate != rate @last_rate = rate rect_data = @bitmap_rect.clone if EncountGauge::Vertical wr = (rate * rect_data.height).to_i rect_data.height = wr rect_data.y = @bitmap_rect.height - wr self.oy = -rect_data.y else wr = (rate * rect_data.width).to_i rect_data.width = wr end self.src_rect = rect_data end end #-------------------------------------------------------------------------- # 可視判定 #-------------------------------------------------------------------------- def check_extra_visible_setting $game_player.encounter_extra_visible end end class Spriteset_Map #-------------------------------------------------------------------------- # タイマースプライトの作成 #-------------------------------------------------------------------------- alias create_timer_encount_gauge create_timer def create_timer create_timer_encount_gauge @encount_gauge_skin = Sprite_EncountGaugeSkin.new(eval(EncountGauge::Viewport)) @encount_gauge = Sprite_EncountGauge.new(eval(EncountGauge::Viewport)) end #-------------------------------------------------------------------------- # タイマースプライトの解放 #-------------------------------------------------------------------------- alias dispose_timer_encount_gauge dispose_timer def dispose_timer dispose_timer_encount_gauge @encount_gauge_skin.dispose @encount_gauge.dispose end #-------------------------------------------------------------------------- # タイマースプライトの更新 #-------------------------------------------------------------------------- alias update_timer_encount_gauge update_timer def update_timer update_timer_encount_gauge @encount_gauge_skin.update @encount_gauge.update end end