sacred-ritual-academy/Scripts/_.19.rb
2025-03-18 19:45:34 -05:00

181 lines
No EOL
6.8 KiB
Ruby
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#==============================================================================
# ■ 碧の軌跡っぽいステータス表示
# @version 0.13 12/01/07
# @author さば缶
#------------------------------------------------------------------------------
#  マップ画面下にステータスが表示されます
#
# ■用意するもの
# Graphics\System の下に Actor_bg1 Actor_bg3
# Graphics\Faces の下に 顔グラを50%に縮小したファイル "通常のファイル名_s"
# 例 Actor1.png → Actor1_s.png
# ※このファイルが存在しない場合、プログラムで縮小するため非常に荒くなります
#
#==============================================================================
module Saba
module KisekiStatus
# このスイッチがONの場合、ステータスを表示します
INVISIBLE_SWITCH = 28
# TPを表示する場合、true に設定します。
SHOW_TP = true
end
end
class Window_KisekiStatus < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, Graphics.height-window_height+18, Graphics.width, window_height)
self.opacity = 0
self.visible = $game_switches[Saba::KisekiStatus::INVISIBLE_SWITCH]
self.z = 0 #追加
refresh
end
def refresh
@last_hps = []
@last_mps = []
@last_tps = []
super
end
#--------------------------------------------------------------------------
# ● 項目数の取得
#--------------------------------------------------------------------------
def item_max
$game_party.battle_members.size
end
#--------------------------------------------------------------------------
# ● ウィンドウの高さを取得
#--------------------------------------------------------------------------
def window_height
item_height + 32
end
#--------------------------------------------------------------------------
# ● 項目の高さを取得
#--------------------------------------------------------------------------
def item_height
#52
478
end
#--------------------------------------------------------------------------
# ● 項目の幅を取得
#--------------------------------------------------------------------------
def item_width
return 70
end
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max
return $game_party.battle_members.size
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def draw_item(index)
actor = $game_party.battle_members[index]
rect = item_rect(index)
bg_bitmap = Cache.system("Actor_bg1")
contents.blt(rect.x + 350, rect.y, bg_bitmap, bg_bitmap.rect)
small_bitmap = Bitmap.new(48, 48)
begin
bitmap = Cache.face(actor.face_name + "_s")
rescue
end
if bitmap == nil
bitmap = Cache.face(actor.face_name)
face_rect = Rect.new(actor.face_index % 4 * 96, actor.face_index / 4 * 96, 96, 96)
small_bitmap.stretch_blt(Rect.new(0 , 0, 48, 48), bitmap, face_rect)
else
small_bitmap.blt(0 , 0, bitmap, Rect.new(actor.face_index % 4 * 48, actor.face_index / 4 * 48, 48, 48))
end
bitmap.dispose
clear_edge(small_bitmap)
contents.blt(rect.x+2 + 350, 2, small_bitmap, Rect.new(0, 0, 48, 48))
small_bitmap.dispose
if actor.dead?
bg_bitmap = Cache.system("Actor_bg1")
contents.blt(rect.x, rect.y, bg_bitmap, bg_bitmap.rect)
bg_bitmap = Cache.system("Actor_bg3")
else
bg_bitmap = Cache.system("Actor_bg2")
end
contents.blt(rect.x + 350, rect.y, bg_bitmap, bg_bitmap.rect)
draw_gauge(rect.x + 402, rect.y+20, 50, actor.hp_rate, hp_gauge_color1, hp_gauge_color2)
draw_gauge(rect.x + 397, rect.y+24, 50, actor.mp_rate, mp_gauge_color1, mp_gauge_color2)
if Saba::KisekiStatus::SHOW_TP
draw_gauge(rect.x + 392, rect.y+28, 50, actor.tp_rate, tp_gauge_color1, tp_gauge_color2)
end
@last_hps.push(actor.hp_rate)
@last_mps.push(actor.mp_rate)
@last_tps.push(actor.tp_rate)
end
#--------------------------------------------------------------------------
# ● 顔画像の端を消します
#--------------------------------------------------------------------------
def clear_edge(bitmap)
22.times { |i|
#bitmap.clear_rect(0, i, 22 - i, 1)
#bitmap.clear_rect(26 + i, i, 22 - i, 1)
bitmap.clear_rect(0, i + 36, i, 1)
bitmap.clear_rect(48 - i, i + 26, i, 1)
}
end
#--------------------------------------------------------------------------
# ● ゲージの描画
# rate : 割合1.0 で満タン)
# color1 : グラデーション 左端
# color2 : グラデーション 右端
#--------------------------------------------------------------------------
def draw_gauge(x, y, width, rate, color1, color2)
fill_w = (width * rate).to_i
gauge_y = y + line_height - 8
contents.fill_rect(x-2, gauge_y-1, width+4, 4, text_color(15))
contents.fill_rect(x-1, gauge_y-2, width+2, 6, text_color(15))
contents.fill_rect(x, gauge_y, width, 2, gauge_back_color)
contents.gradient_fill_rect(x, gauge_y, fill_w, 2, color1, color2)
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
if $game_switches[Saba::KisekiStatus::INVISIBLE_SWITCH] == true &&
# ! $game_message.busy? && ! $game_message.visible
self.visible = true
else
self.visible = false
return
end
hps = []
mps = []
tps = []
for actor in $game_party.battle_members
hps.push(actor.hp_rate)
mps.push(actor.mp_rate)
tps.push(actor.tp_rate)
end
if @last_hps != hps || @last_mps != mps || @last_tps != tps
refresh
end
end
end
class Scene_Map
#--------------------------------------------------------------------------
# ● 全ウィンドウの作成
#--------------------------------------------------------------------------
alias saba_kiseki_status_create_all_windows create_all_windows
def create_all_windows
saba_kiseki_status_create_all_windows
@kiseki_status_window = Window_KisekiStatus.new
end
end