lunariafantasia/Scripts/_.129.rb
2024-01-12 03:12:38 -06:00

352 lines
No EOL
13 KiB
Ruby

#==============================================================================
# ■ RGSS3 エンカウントゲージ Ver1.01 by 星潟
#------------------------------------------------------------------------------
# マップ画面でのランダムエンカウントについて
# 次のエンカウントまでの歩数カウントをゲージで表示します。
# ゲージスキン(背景部分)とゲージ(歩数カウントによって変動するバーの部分)の
# 2つを画面に表示するのが主な機能です。
# 自作画像をゲージスキンとゲージに用いる事も出来ます。
# その場合、GraphicsフォルダのSystemフォルダに
# SkinとGaugeの項目で指定された画像ファイルを入れて下さい。
# デフォルトではゲージスキンがEncountGaugeSkin1、
# ゲージ部分がEncountGauge1というファイル名に指定されています。
#==============================================================================
=begin
module EncountGauge
#ゲージ・ゲージスキンを表示する条件となるスイッチIDを指定。
#SID = 12
#エンカウントする敵が設定されていないマップではゲージの表示を消すか否かを指定。
#trueで消す。falseで消さない。
NoEncountMapZero = true
#エンカウントする敵がいない座標ではゲージの表示を消すか否かを指定。
#(動作が重くなる場合があります。要注意)
#trueで消す。falseで消さない。
NoEncountPosZero = true
#エンカウント禁止状態ではゲージの表示を消すか否かを指定。
#trueで消す。falseで消さない。
NoEncountSeal = true
#乗り物に乗り降り(乗っている間ではなく、乗降タイミング)している間は
#ゲージ・ゲージスキンを消すか否かを指定。
VehicleGetting = true
#ゲージ・ゲージスキンの表示状態が切り替わった場合、エンカウント歩数も作り直すか?
#trueで作り直す。falseで作り直さない。
GVC_RemakeEncount = false
#ゲージが縦向きか横向きかを指定。
#trueで縦向き、falseで横向き。
Vertical = false
#ゲージスキンのX座標を指定。
SkinX = 520
#ゲージスキンのY座標を指定。
SkinY = 24
#ゲージのX座標を指定。
GaugeX = 520
#ゲージのY座標を指定。
GaugeY = 24
#ゲージ・ゲージスキンのビューポートを指定。
#特に拘りがなければ変更不要。
Viewport = "@viewport2"
#独自画像を使用するか否かを指定。
#trueで使用し、false使用しない。
AnotherGraphic = false
#★★★AnotherGraphicがfalseの場合の設定
#ゲージスキンの横幅を指定。(横向きゲージの場合はこちらを長く)
SkinW = 100
#ゲージスキンの縦幅を指定。(縦向きゲージの場合はこちらを長く)
SkinH = 5
#ゲージスキンにおいてゲージの割合が低い側のグラデーション基本色を指定。
SkinColor1 = [16,4,0]
#ゲージスキンにおいてゲージの割合が高い側のグラデーション基本色を指定。
SkinColor2 = [32,8,0]
#ゲージスキン画像の仮の名前を指定。基本的に変更不要。
SkinTempName = "EncountGaugeSkin"
#ゲージの横幅を指定。(横向きゲージの場合はこちらを長く)
GaugeW = 100
#ゲージの縦幅を指定。(縦向きゲージの場合はこちらを長く)
GaugeH = 5
#ゲージにおいてゲージの割合が低い側のグラデーション基本色を指定。
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 if @encounter_count != @old_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 = true #$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
f = false if ($game_switches[FAKEREAL::EVENT_RUNNING] || $game_message.busy? || $game_message.visible)
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
=end