rebf-gaiden/Scripts/_.51.rb
2025-04-26 17:06:34 -05:00

347 lines
12 KiB
Ruby
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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.

=begin
トリス 魔物図鑑ウインドウ ver6
2015/12/26
=end
#==============================================================================
# ■ Scene_MonsterDictionary
#==============================================================================
class Scene_MonsterDictionary < Scene_ItemBase
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
alias :ex_dic_start :start
def start
ex_dic_start
page_reset
@item_window.set_handler(:ok, method(:page_change))
end
#--------------------------------------------------------------------------
# ● ページ切り替え
#--------------------------------------------------------------------------
def page_number
@page_number
end
def page_change
@page_number = (@page_number + 1) % 2
@status_window.refresh
@item_window.activate
end
def page_reset
@page_number = 0
end
end
#==============================================================================
# ■ Window_MonsterDictionaryStatus
#==============================================================================
class Window_MonsterDictionaryStatus < Window_Selectable
include MDic_Base
include MDic_Text
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias :ex_dic_initialize :initialize
def initialize(x, y, width, height)
ex_dic_initialize(x, y, width, height)
@picture_sprite = Sprite.new(self.viewport)
@picture_sprite.x = @picture_sprite.y = 12
@picture_sprite.z = self.z - 1
@picture_sprite.bitmap = Bitmap.new(500, 500)
self.opacity = 0
@sub_window = Window_Base.new(x, y, width, height)
@sub_window.z = self.z - 2
end
#--------------------------------------------------------------------------
# ● 解放
#--------------------------------------------------------------------------
#alias :ex_dic_dispose :dispose 修正
#def dispose 修正
#@picture_sprite.dispose if @picture_sprite 修正
#@sub_window.dispose if @sub_window 修正
#ex_dic_dispose 修正
# end 修正
def dispose#修正後
@picture_sprite.dispose if @picture_sprite#修正後
@sub_window.dispose if @sub_window#修正後
super#修正後
end#修正後
#--------------------------------------------------------------------------
# ● アイテムの設定
#--------------------------------------------------------------------------
def set_item(enemy, index=-1, print=false)
return if ((@enemy == enemy) and (@index == index))
SceneManager.scene.page_reset
@enemy = enemy
@index = index
@print = print
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
@page = SceneManager.scene.page_number
contents.clear
@picture_sprite.bitmap.clear if @picture_sprite
contents.font.size = 24
if @print
draw_id if page?(:id)
draw_name if page?(:name)
draw_pic if page?(:pic)
contents.font.size = WD_monsterdictionary_layout::C_font_size
["mhp", "mmp", "atk", "def", "mat", "mdf", "agi", "luk"].each_with_index do |name, i|
draw_parameter(i, name) if page?(:par)
end
draw_xparam if page?(:par)
draw_feature if page?(:feature)
draw_element if page?(:element)
draw_exp if page?(:exp)
draw_gold if page?(:gold)
draw_drop if page?(:drop)
draw_help if page?(:help)
draw_geno if page?(:geno)
draw_steal if page?(:steal)
draw_lose if page?(:lose)
elsif @enemy != nil
draw_id
draw_no_data
end
end
def page?(name)
PAGE[@page].include?(name)
end
def ly(name, par)
name = ["id", "name", "pic", "feature",
"exp", "gold", "drop", "help",
"geno", "steal", "lose", "element"][name] if name.is_a?(Integer)
par = ["x", "y", "width", "opacity",
"text1", "text2" ,"digit"][par] if par.is_a?(Integer)
e = "WD_monsterdictionary_layout::M_" + name + "_display"
eval(par.empty? ? e : (e + "_" + par))
end
def ly_xyw(name)
return [ly(name, 0), ly(name, 1), ly(name, 2)]
end
def ly_e(par, id)
name = "element"
par = ["x", "y", "width", "id",
"icon", "text1", "text2", "color"][par] if par.is_a?(Integer)
e = "WD_monsterdictionary_layout::M_" + name + "_display"
eval(e + "_" + par + (id == -1 ? "" : "[id]"))
end
def ly_xyw_e(id, plus = 0)
return [ly_e(0, id) + plus, ly_e(1, id), ly_e( 2, id)]
end
def vic?(enemy_id)
m_dictionary_victory_switch_on?(@enemy.id)
end
def tv(text, no = "")
vic?(@enemy.id) ? text : ""
end
def csc
change_color(system_color)
end
def cnc
change_color(normal_color)
end
def fsize
contents.font.size
end
def setting_text(setting)
return [] if setting == nil
if setting.is_a?(String)
str = setting
else
str = ""
setting.each {|s| str += s + "\n"}
end
result = []
str.split("\n").each do |s|
result.push(s)
end
return result
end
# 名前
def draw_id
draw_text(*ly_xyw(0), line_height, sprintf("%0#{ly(0, 6)}d", @index+1), 0)
end
def draw_name
draw_text(*ly_xyw(1), line_height, @enemy.name, 0)
end
def draw_no_data
draw_text(*ly_xyw(1), line_height, "- No Data -", 0)
end
# 能力
def draw_parameter(num, name)
csc; draw_text(*ly_xyw(name), fsize, Vocab::param(num), 0)
cnc; draw_text(*ly_xyw(name), fsize, tv(@enemy.params[num]), 2)
end
def draw_xparam
enemy = Game_Enemy.new(0, @enemy.id)
csc; draw_text(*ly_xyw("hit"), fsize, ly("hit", "name"), 0)
cnc; draw_text(*ly_xyw("hit"), fsize, tv((100 * enemy.xparam(0)).to_i), 2)
csc; draw_text(*ly_xyw("eva"), fsize, ly("eva", "name"), 0)
cnc; draw_text(*ly_xyw("eva"), fsize, tv((100 * enemy.xparam(1)).to_i), 2)
end
# 特徴
def draw_feature
fs = fsize; x, y, w = *ly_xyw(3)
csc; draw_text(x, y, w, fsize, ly(3, 4), 0); cnc
i = 0
if vic?(@enemy.id)
setting_text(F[@enemy.id]).each do |s|
i += 1
self.contents.draw_text(x + fs, y + fs * i, w - fs, fs, s, 0)
end
end
if i == 0
self.contents.draw_text(x + fs, y + fs, w - fs, fs, tv(ly(3, 5)), 0)
end
end
def draw_element
enemy = Game_Enemy.new(0, @enemy.id)
csc; draw_text(*ly_xyw_e(0), fsize, ly_e(5, -1), 0)
for i in 1...ly_e(3, -1).size
rate = (100 * enemy.element_rate(ly_e(3, i))).to_i
draw_icon(ly_e(4, i), ly_e(0, i), ly_e(1, i))
change_color(text_color(ly_e(7, -1)))
draw_text(*ly_xyw_e(i, 24), fsize, $data_system.elements[ly_e(3, i)], 0)
cnc;
draw_text(*ly_xyw_e(i), fsize, tv(sprintf(ly_e(6, -1), rate)), 2)
end
end
def draw_exp
csc; draw_text(*ly_xyw(4), fsize, ly(4, 4), 0)
cnc; draw_text(*ly_xyw(4), fsize, tv(@enemy.exp), 2)
end
def draw_gold
x, y, width = *ly_xyw(5); cx = text_size(Vocab::currency_unit).width
csc; draw_text(x, y, width, font_size, ly(5, 4), 0)
cnc; draw_text(x, y, width - cx - 2, font_size, tv(@enemy.gold), 2)
csc; draw_text(x, y, width, font_size, Vocab::currency_unit, 2)
cnc
end
def draw_help
fs = fsize; x, y, w = *ly_xyw(7)
csc; draw_text(x, y, w, fs, ly(7, 4), 0); cnc
i = 0
if vic?(@enemy.id)
setting_text(H[@enemy.id]).each do |s|
i += 1
self.contents.draw_text(x + fs, y + fs * i, w - fs, fs, s, 0)
end
end
if i == 0
self.contents.draw_text(x + fs, y + fs, w - fs, fs, tv(ly(7, 5)), 0)
end
end
# 撃破
def draw_geno
text2 = "#{m_dictionary_genoside_number(@enemy.id)}"
csc; draw_text(*ly_xyw(8), fsize, ly( 8, 4), 0)
cnc; draw_text(*ly_xyw(8), fsize, tv(text2), 2)
end
def draw_lose
text2 = "#{m_dictionary_lose_number(@enemy.id)}"
csc; draw_text(*ly_xyw(10), fsize, ly(10, 4), 0)
cnc; draw_text(*ly_xyw(10), fsize, tv(text2), 2)
end
# ドロップ
def draw_drop
fs = fsize; x, y, w = *ly_xyw(6)
csc; draw_text(x, y, w, fs, ly(6, 4), 0); cnc
i = 0
@enemy.drop_items.each do |di|
if di.kind > 0
i += 1
item = item_object(di.kind, di.data_id)
f = (vic?(@enemy.id) and drop?(@enemy.id, i - 1))
draw_drop2(x + fs, y + fs * i, w - fs, fs, f, item.name)
draw_drop3(x + fs, y + fs * i, w - fs, fs, f, di.denominator)
end
end
if i == 0
self.contents.draw_text(x + fs, y + fs, w - fs, fs, tv(ly(6, 5), nil), 0)
end
end
def draw_steal
fs = fsize; x, y, w = *ly_xyw(9)
csc; draw_text(x, y, w, fs, ly(9, 4), 0); cnc
data_list = []
steal_list_proc = Proc.new do |sub_enemy_id|
sub_enemy = $data_enemies[sub_enemy_id]
steal_list = sub_enemy.steal_list
steal_list.each_with_index do |steal_list, list_id|
next unless steal_list
next unless list_id == 1
steal_list.each_with_index do |steal_data, list_index|
f = (vic?(@enemy.id) and steal?(sub_enemy.id, list_id, list_index))
if di = data_list.index {|d| d[0][0, 2] == steal_data[0, 2] }
data_list[di][1] ||= f
else
data_list.push([steal_data, f])
end
end
end
end
steal_list_proc.call(@enemy.id)
@enemy.sub_steal_id_list.each do |sub_id|
steal_list_proc.call(sub_id)
end
data_list.each_with_index do |data, i|
steal_data = data[0]
f = data[1]
item = item_object(steal_data[0], steal_data[1])
draw_drop2(x + fs, y + fs * (i+1), w - fs, fs, f, item.name)
draw_drop3(x + fs, y + fs * (i+1), w - fs, fs, f, steal_data[2])
end
if data_list.size == 0
self.contents.draw_text(x + fs, y + fs, w - fs, fs, tv(ly(9, 5), nil), 0)
end
end
def draw_drop2(x, y, w, h, flag, name)
text = flag ? name : ""
self.contents.draw_text(x, y, w, h, text, 0)
end
def draw_drop3(x, y, w, h, flag, rate)
text = flag ? "1/#{rate.to_i}" : ""
self.contents.draw_text(x, y, w, h, text, 2)
end
def drop?(enemy_id, n)
m_dictionary_drop_switch_on?(enemy_id, n)
end
def steal?(enemy_id, list_id, n)
m_dictionary_steal_switch_on?(enemy_id, list_id, n)
end
# 画像
def draw_pic
begin
b = Cache.battler(@enemy.battler_name + "_dic", @enemy.battler_hue)
rescue
b = Cache.battler(@enemy.battler_name , @enemy.battler_hue)
end
r = Rect.new(0, 0, b.width, b.height)
contents.blt(ly(2, 0) - r.width/2, ly(2, 1) - r.height, b, r, ly(2, 3))
end
def draw_pic
par = @enemy.dic_picture
b = Cache.battler(par[0], par[1])
r = Rect.new(0, 0, b.width, b.height)
x = par[2] ? par[2] : ly(2, 0)
y = par[3] ? par[3] : ly(2, 1)
o = par[4] ? par[4] : ly(2, 3)
z = (par[5] ? par[5] : MDic_Base::PIC_ZOOM) * 0.01
@picture_sprite.bitmap.blt(0, 0, b, r, o)
@picture_sprite.x = 12 + x - z * r.width / 2
@picture_sprite.y = 12 + y - z * r.height
@picture_sprite.zoom_x = @picture_sprite.zoom_y = z
end
end