# ▽△▽ XRXSv17-ES1. フォーライン ▽△▽ # # publish 2010/ 3/25 # update - 11/ 1/ 9b # #============================================================================== # カスタマイズポイント #============================================================================== module XRXSV17 # # 背面・数字スキン(Graphics/System) # StatusBack = "MenuParameterFrame" NumberL = "NumberL" NumberS = "NumberS" NumMarks = "NumberS_Marks" # # 表示ステータスの設定 - 最大8個まで # 0 :  空欄 # 1 :  攻撃力 # 2 :  防御力 # 3 :  精神力 # 4 : ※魔法防御力      (※ベーシック・セッティング連動) # 5 :  敏捷性 # 6 : ※元々の攻撃力 # 7 : ※元々の防御力 # 8 : ※元々の精神力 # 9 : ※元々の魔法防御力 # 10 : ※元々の敏捷性 # 11 :  最大HP # 12 :  最大MP # 13 :  命中 # 14 :  回避 # 15 :  必殺(クリティカル率) # 16 : ※器用さ # 17 : ※MP軽減力 # 18 : ※幸運 # 19 : ※装備攻撃力 # 20 : ※装備防御力 # 21 :※2詠唱速度       (※2ATBエンジン連動) # 22 :※3ステートガードレベル (※3詳細設定、属性&ステートレベル連動) # 23 : ※魔法回避率 # Powers = [1,2,3,4,13,14,5] # # 用語 ([]内の番号は上と一致) # Words = [] Words[13]= "命中" Words[14]= "回避" Words[15]= "必殺" Words[21]= "詠唱速度" Words[22]= "健康Lv" end #============================================================================== # データベースから用語を取得 #============================================================================== module XRXSV17 def self.set_vocab Words[1] = Vocab::atk Words[2] = Vocab::def Words[3] = Vocab::spi Words[4] = (Vocab::mnd rescue "") Words[5] = Vocab::agi Words[6] = (Vocab::str rescue "") Words[7] = (Vocab::vit rescue "") Words[8] = (Vocab::int rescue "") Words[9] = (Vocab::mnd_base rescue "") Words[10] = (Vocab::agi_base rescue "") Words[11] = Vocab::hp Words[12] = Vocab::mp Words[16] = (Vocab::dex rescue "") Words[17] = (Vocab::mpr rescue "") Words[18] = (Vocab::lck rescue "") Words[19] = (Vocab::equip_atk rescue "") Words[20] = (Vocab::equip_def rescue "") Words[23] = (Vocab::meva rescue "") end Methods = [nil, :atk, :def, :spi, :mnd, :agi, :str, :vit, :int, :mnd_base, :agi_base, :maxhp, :maxmp, :hit, :eva, :cri, :dex, :mpr, :lck, :equip_atk, :equip_def, :cst, :state_guard_level, :meva ] end #============================================================================== # 各パラメータ値への対応 #============================================================================== module XRXSV17ES1_AdditionalParameters def base_mnd return self.base_spi end def mnd return self.spi end def meva return 0 end def cst return 10 end def state_guard_level(state_id = nil) return 0 end end class Game_Battler include XRXSV17ES1_AdditionalParameters end #============================================================================== # 武器攻撃力の取得 #============================================================================== class Game_Battler def equip_atk n = 0 for item in equips.compact do n += item.atk end return n end def equip_def n = 0 for item in equips.compact do n += item.def end return n end end #============================================================================== # デザイン変更 #============================================================================== class Window_SetStatus < Window_EquipStatus #-------------------------------------------------------------------------- # 値のセット #-------------------------------------------------------------------------- def set_new_parameters(new_atk, new_def, new_spi, new_agi) if @new_actor @new_actor = nil refresh end super end def set_new_actor(actor) if @new_actor != actor @new_actor = actor refresh end end #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(x, y, actor) @clear_style = ((XRXSV10::BG_NAME rescue "").size >= 1) @sprites = [] @done = false @new_actor = nil @draw_x_start = 16 @numberl = Cache.system(XRXSV17::NumberL) @numbers = Cache.system(XRXSV17::NumberS) @nummarks = Cache.system(XRXSV17::NumMarks) rescue Bitmap.new(16,16) XRXSV17.set_vocab #* # @refresh_ban = true super(x, y, actor) @refresh_ban = false if @clear_style self.opacity = 0 self.x = -16 end for i in 0..7 sprite = Sprite.new sprite.bitmap = Bitmap.new(96, WLH) sprite.x = self.x + 112 + (i / 4) * 126 + @draw_x_start sprite.y = self.y + 16 + (i % 4) * WLH sprite.z = self.z + 105 @sprites.push(sprite) end @back_sprite = Sprite.new @back_sprite.bitmap = (Cache.system(XRXSV17::StatusBack) rescue nil) @back_sprite.x = self.x + 16 @back_sprite.y = self.y + 16 @back_sprite.z = self.z - 1 @back_sprite.visible = @clear_style refresh end def z=(n) super for sprite in @sprites sprite.z = n + 105 end @back_sprite.z = self.z - 1 if @back_sprite end #-------------------------------------------------------------------------- # 解放 #-------------------------------------------------------------------------- def dispose @sprites.each{|sprite| sprite.dispose } @back_sprite.dispose super end #-------------------------------------------------------------------------- # リフレッシュ #-------------------------------------------------------------------------- def refresh return if @refresh_ban for i in 0..7 line_step(i) end end #-------------------------------------------------------------------------- # 1ラインステップ進行 #-------------------------------------------------------------------------- def line_step(index) x3 = @draw_x_start x4 = @draw_x_start + 144 xn = (index >= 4 ? x4 : x3) return draw_parameter(xn, WLH * (index % 4), index) end #-------------------------------------------------------------------------- # ● 能力値の描画 #-------------------------------------------------------------------------- def draw_parameter(x, y, type) power_id = XRXSV17::Powers[type] if power_id.to_i == 0 @done = true return false end method = XRXSV17::Methods[power_id] name = XRXSV17::Words[power_id].to_s value = @actor.send(method) new_value = (@new_actor ? @new_actor.send(method) : nil) if type <= 3 num_skin = @numberl nw1 = 80 nw2 = 60 y1 = y + 3 self.contents.font.size = 18 else num_skin = @numbers nw1 = 48 nw2 = 40 y1 = y + 5 self.contents.font.size = 14 end rect = Rect.new(x, y, nw1 + 34, WLH) self.contents.clear_rect(rect) n = (new_value != nil ? new_value : value) self.contents.draw_number(x + 4 + nw2, y1, 30, WLH, n, 2, num_skin) self.contents.font.color = system_color self.contents.font.size = 14 self.contents.draw_text(x + 4, y + 6, nw1, WLH, name) sprite = @sprites[type] result = false if new_value != nil new_color = new_parameter_color(value, new_value) #self.contents.draw_text(x + 142, y, 30, WLH, new_value, 2) new_value = new_value - value skin_rect = @nummarks.rect.dup skin_rect.width /= 8 skin_rect.x = skin_rect.width * (new_value >= 0 ? 5 : 1) sprite.bitmap.clear sprite.bitmap.blt(0, WLH - skin_rect.height, @nummarks, skin_rect) sprite.bitmap.font.size = 14 sprite.bitmap.draw_number(10, 5, 42, WLH, new_value.abs, 0, @numbers) sprite.color = new_color end result = (new_value.to_i.abs >= 1) sprite.visible = result self.contents.font.size = Font.default_size @done |= (type == 7) return result end end #============================================================================== # --- XRXSV : draw_number(x, y, width, height, number, align, skin[, opacity]) #============================================================================== class Bitmap def draw_number(x, y, width, height, number, align, skin, opacity = 224) number_digits = [] n = number loop do number_digits.push(n % 10) n /= 10 break if n == 0 end number_width = skin.rect.width / 10 number_height = skin.rect.height case align when 0 n = number_digits.size * number_width when 1 n = (width - number_digits.size * number_width) / 2 when 2 n = width end draw_end_x = x + n ny = y + (height - number_height) / 2 # 描画開始 skin_rect = Rect.new(0, 0, number_width, number_height) for i in 0...number_digits.size n = number_digits[i] nx = draw_end_x - number_width * (i + 1) skin_rect.x = n * number_width self.blt(nx, ny, skin, skin_rect, opacity) end end end