347 lines
12 KiB
Ruby
347 lines
12 KiB
Ruby
|
||
|
||
=begin
|
||
|
||
トリス 魔物図鑑Bウインドウ 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
|