#============================================================================== # ■ RGSS3 装備拡張対応ステータス画面 Ver1.05 by 星潟 #------------------------------------------------------------------------------ # 当方の装備拡張を導入している前提のステータス画面改変スクリプトです。 # なるべく、素材スクリプト欄の上側に挿入してください。 # また、当方の装備拡張を導入していない場合、確実にエラーを吐きます。 # 本スクリプトを導入される場合、必ず当方の装備拡張スクリプトを導入して下さい。 # # ステータス画面と、能力値表示画面にページ制を採用し # 莫大な情報を格納させ、切り替えて表示します。 # これにより、フォントサイズを過度に小さくする事なく # 大量の情報を表示する事が可能となります。 # # 1ページ目では、デフォルトのステータス画面から装備品を除き # 能力値の幅を大幅に増加させました。 # この能力値の表示箇所は、下記で設定する能力値ページ切り替えキーを使用する事で # 別の能力表示に切り替える事が出来ます。 # (ここでのページ毎の能力値表示は、装備拡張での設定に依存します) # # 2ページ目は、装備品の同時表示量を装備拡張に対応させる為 # 装備欄を全て表示させる為の専用ページとしました。 # # 3ページ目は、アクターの詳細プロフィール表示画面です。 # 最初に二行に渡りアクター簡易説明が表示され # 次の行から詳細な説明の描写が開始されます。 # # また、バストアップ画像等の専用グラフィックを表示する機能もあります。 # # 専用グラフィックの名前は、ACTOR_X(Xには各アクターのアクターナンバーを入れる)で # 統一し、ピクチャフォルダに入れてください。 # # Ver1.01 能力値の数値表示横幅が可能になりました。 # HP等のように4桁に到達しやすい数値について # 縮小表示される事なく表示できるようになります。 # # Ver1.02 属性有効度・ステート有効度の表示不具合を修正しました。 # # Ver1.03 特殊能力値の表示不具合を修正しました。 # # Ver1.04 装備品の行間設定を修正しました。 # # Ver1.05 余計な記述を一部削除しました。 # 640×480の画面サイズも想定し、設定を見直しました。 # 専用グラフィックのファイルが存在しない場合でも # エラー落ちしないようにしました。 # この場合、コンソール画面上に警告が表示されます。 #============================================================================== module STATUS_EX #============================================================================== #★★★基本カスタマイズ項目はここからです★★★ #============================================================================== #ステータス画面のページ数を設定します。 PAGE_MAX = 3 #設定対象の行の高さ line_height = 24 #名前を表示するか? NAME = true #名前の位置 NAXY = [4, line_height * 0] #職業を表示するか? JODT = true #職業の位置 JOXY = [136, line_height * 0] #二つ名を表示するか? SNDT = true #二つ名の位置 SNXY = [304, line_height * 0] #顔グラフィックを表示するか? FACE = true #顔グラフィックの位置 FAXY = [8, line_height * 2] #基本情報を表示するか? BDDT = true #基本情報の位置 BDXY = [136, line_height * 2] #経験情報を表示するか? EXDT = true #経験情報の位置 EXXY = [304, BDXY[1]] #レベルを表示するか? LVDT = true #レベルの位置 LVXY = [BDXY[0], BDXY[1]] #レベルを表示するか? LVDT = true #レベルの位置 LVXY = [BDXY[0], BDXY[1]] #ステートアイコンを表示するか? STAT = true #ステートアイコンの位置 STXY = [BDXY[0] + 90, BDXY[1]] #HPを表示するか? HPBA = true #HPの位置 HPXY = [BDXY[0], BDXY[1] + line_height * 1] #MPを表示するか? MPBA = true #MPの位置 MPXY = [BDXY[0], BDXY[1] + line_height * 2] #TPを表示するか? TPBA = true #TPの位置 TPXY = [BDXY[0], BDXY[1] + line_height * 3] #ステータス画面の能力値ページ切り替え用キーを設定します。(使用しない場合はnil) ESP_KEY2 = :SHIFT #能力値の行間空白追加 V_LINE_PSP = 16 #装備品の行間空白追加 V_LINE_PSP2= 16 #能力値の数値表示横幅を設定します。 STNWD = 72 #立ち絵の大きさ(デフォルトでは公式配布画像準拠) BUP_SIZE = [272, 288] #立ち絵の描写位置 BUP_XY = [272, 128] #アクターの追加説明用ワード #アクターのメモ欄にSTARTで設定したワードが記入された次の行から #DSENDで設定した行までを追加説明として認識して描写します。 #改行はメモ欄の改行がそのまま有効となりますが #行が長すぎて次の行に描写されている場合は改行されません。 #きちんとENTERキー等で改行した場合のみ有効ですので注意。 START = "<説明ここから>" DSEND = "<説明ここまで>" #専用グラフィックを表示するか? GRAPHIC = true #専用グラフィックのフォーマットを指定。 #%sの箇所に各アクターのIDが入るものとします。 #基本的に変更は不要です。 GNAME_F = "ACTOR_%s" #============================================================================== #★★★基本カスタマイズ項目はここまでです。以下は基本的にそのままを推奨★★★ #============================================================================== #ステータス画面の能力値ページ数を設定します。 PAGE_MAX2 = EQ_EX::ESP_MAX #能力値桁数(横) LINE_MAX = EQ_EX::ES_CLM #能力値桁数(縦) V_LINE_MAX = EQ_EX::ES_LM #能力値桁数(横)2ページ目 LINE_MAX2 = EQ_EX::ES_CLM2 #能力値桁数(縦)2ページ目 V_LINE_MAX2 = EQ_EX::ES_LM2 #能力値桁数(横)3ページ目 LINE_MAX3 = EQ_EX::ES_CLM3 #能力値桁数(縦)3ページ目 V_LINE_MAX3 = EQ_EX::ES_LM3 #能力値桁数(横)4ページ目 LINE_MAX4 = EQ_EX::ES_CLM4 #能力値桁数(縦)4ページ目 V_LINE_MAX4 = EQ_EX::ES_LM4 #能力値桁数(横)5ページ目 LINE_MAX5 = EQ_EX::ES_CLM5 #能力値桁数(縦)5ページ目 V_LINE_MAX5 = EQ_EX::ES_LM5 #能力値桁数(横)6ページ目 LINE_MAX6 = EQ_EX::ES_CLM6 #能力値桁数(縦)6ページ目 V_LINE_MAX6 = EQ_EX::ES_LM6 end #============================================================================== # ■ Window_Status #------------------------------------------------------------------------------ #  ステータス画面で表示する、フル仕様のステータスウィンドウです。 #============================================================================== class Window_Status < Window_Selectable attr_accessor :page_data attr_accessor :page_data2 #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_equip_enh initialize def initialize(actor) @page_data = 0 @page_data2 = 0 initialize_equip_enh(actor) end #-------------------------------------------------------------------------- # アクターの設定 #-------------------------------------------------------------------------- alias actor_equip_enh actor= def actor=(actor) @page_data = 0 @page_data2 = 0 actor_equip_enh(actor) end #-------------------------------------------------------------------------- # リフレッシュ #-------------------------------------------------------------------------- def refresh contents.clear draw_block1 (line_height * 0) draw_horz_line(line_height * 1) if @page_data == 0 draw_block2 (line_height * 2) draw_horz_line(line_height * 6) draw_block3 (line_height * 7) draw_horz_line(line_height * 13) draw_block4 (line_height * 14) elsif @page_data == 1 draw_equipments(4, line_height * 2) draw_horz_line(line_height * 3) elsif @page_data == 2 draw_block4 (line_height * 2) text = $data_actors[@actor.id].note lines = text.split(/(?:[ ]|\\n)/i) start_flag = false line_data = 0 lines.each_with_index { |text, i| if text.include?(STATUS_EX::START) start_flag = true elsif text.include?(STATUS_EX::DSEND) && start_flag == true break elsif start_flag == true self.contents.draw_text(4, (line_data + 4)* line_height, self.width - 40, line_height, text, 0) line_data += 1 if start_flag == true end} draw_bup_graphic(STATUS_EX::BUP_XY[0], STATUS_EX::BUP_XY[1]) if STATUS_EX::GRAPHIC == true end end #-------------------------------------------------------------------------- # ● 立ち絵の描画 #-------------------------------------------------------------------------- def draw_bup_graphic(x, y) begin bitmap = bup_graphic_decide rescue return draw_bup_graphic_caution end rect = Rect.new(0, 0, 0, 0) rect.x = 0 rect.y = 0 rect.width = STATUS_EX::BUP_SIZE[0] rect.height =STATUS_EX::BUP_SIZE[1] self.contents.blt(x, y, bitmap, rect) end def draw_bup_graphic_caution return p "アクターが存在しません。" unless @actor p sprintf("アクターID%s:%sの画像「%s」が確認出来ません。",@actor.id,@actor.name,bup_graphic_name) end def bup_graphic_decide Cache.picture(bup_graphic_name) end def bup_graphic_name sprintf(STATUS_EX::GNAME_F,@actor.id.to_s) end #-------------------------------------------------------------------------- # ● ブロック 1 の描画 #-------------------------------------------------------------------------- def draw_block1(y) draw_actor_name(@actor, STATUS_EX::NAXY[0], STATUS_EX::NAXY[1]) if STATUS_EX::NAME draw_actor_class(@actor, STATUS_EX::JOXY[0], STATUS_EX::JOXY[1]) if STATUS_EX::JODT draw_actor_nickname(@actor, STATUS_EX::SNXY[0], STATUS_EX::SNXY[1]) if STATUS_EX::SNDT end #-------------------------------------------------------------------------- # ● ブロック 2 の描画 #-------------------------------------------------------------------------- def draw_block2(y) draw_actor_face(@actor, STATUS_EX::FAXY[0], STATUS_EX::FAXY[1]) if STATUS_EX::FACE draw_basic_info(STATUS_EX::BDXY[0], STATUS_EX::BDXY[1]) if STATUS_EX::BDDT draw_exp_info(STATUS_EX::EXXY[0], STATUS_EX::EXXY[1]) if STATUS_EX::EXDT end #-------------------------------------------------------------------------- # ● ブロック 3 の描画 #-------------------------------------------------------------------------- def draw_block3(y) draw_parameters(4, y) end #-------------------------------------------------------------------------- # ● ブロック 4 の描画 #-------------------------------------------------------------------------- def draw_block4(y) draw_description(4, y) end #-------------------------------------------------------------------------- # ● 基本情報の描画 #-------------------------------------------------------------------------- def draw_basic_info(x, y) draw_actor_level(@actor, STATUS_EX::LVXY[0], STATUS_EX::LVXY[1]) if STATUS_EX::LVDT draw_actor_icons(@actor, STATUS_EX::STXY[0], STATUS_EX::STXY[1]) if STATUS_EX::STAT draw_actor_hp(@actor, STATUS_EX::HPXY[0], STATUS_EX::HPXY[1]) if STATUS_EX::HPBA draw_actor_mp(@actor, STATUS_EX::MPXY[0], STATUS_EX::MPXY[1]) if STATUS_EX::MPBA draw_actor_tp(@actor, STATUS_EX::TPXY[0], STATUS_EX::TPXY[1]) if STATUS_EX::TPBA end #-------------------------------------------------------------------------- # ● 能力値の描画 #-------------------------------------------------------------------------- def draw_parameters(x, y) line_data = 0 v_line_data = 0 case @page_data2 when 0;plm = STATUS_EX::LINE_MAX ;pvlm = STATUS_EX::V_LINE_MAX ;data = EQ_EX::ES_MAX when 1;plm = STATUS_EX::LINE_MAX2;pvlm = STATUS_EX::V_LINE_MAX2;data = EQ_EX::ES_MAX2 when 2;plm = STATUS_EX::LINE_MAX3;pvlm = STATUS_EX::V_LINE_MAX3;data = EQ_EX::ES_MAX3 when 3;plm = STATUS_EX::LINE_MAX4;pvlm = STATUS_EX::V_LINE_MAX4;data = EQ_EX::ES_MAX4 when 4;plm = STATUS_EX::LINE_MAX5;pvlm = STATUS_EX::V_LINE_MAX5;data = EQ_EX::ES_MAX5 when 5;plm = STATUS_EX::LINE_MAX6;pvlm = STATUS_EX::V_LINE_MAX6;data = EQ_EX::ES_MAX6 end line_plus = contents_width / plm for i in data draw_actor_param(@actor, x + line_data, y + (line_height + STATUS_EX::V_LINE_PSP) * v_line_data, i) v_line_data += 1 if (pvlm - 2) < v_line_data line_data += line_plus v_line_data = 0 end end end #-------------------------------------------------------------------------- # ● 経験値情報の描画 #-------------------------------------------------------------------------- def draw_exp_info(x, y) s1 = @actor.max_level? ? "-------" : @actor.exp s2 = @actor.max_level? ? "-------" : @actor.next_level_exp - @actor.exp s_next = sprintf(Vocab::ExpNext, Vocab::level) change_color(system_color) draw_text(x, y + line_height * 0, 180, line_height, Vocab::ExpTotal) draw_text(x, y + line_height * 2, 180, line_height, s_next) change_color(normal_color) draw_text(x, y + line_height * 1, 180, line_height, s1, 2) draw_text(x, y + line_height * 3, 180, line_height, s2, 2) end #-------------------------------------------------------------------------- # ● 装備品の描画 #-------------------------------------------------------------------------- def draw_equipments(x, y) data = 0 l_data = 0 change_color(system_color) draw_text(x, y + line_height * l_data, contents_width, line_height, "装備品一覧", 1) l_data += 2 @actor.equips.each_with_index {|item, i| xd = data == 0 ? 0 : contents.width / 2 data = data == 0 ? 1 : 0 change_color(system_color) draw_text(x + xd, y + (line_height + STATUS_EX::V_LINE_PSP2) * l_data, 60, line_height, Vocab::etype(@actor.equip_slots[i])) change_color(normal_color) draw_item_name(item, x + 60 + xd, y + (line_height + STATUS_EX::V_LINE_PSP2) * l_data) l_data += 1 if xd != 0} end #-------------------------------------------------------------------------- # 説明の描画 #-------------------------------------------------------------------------- def draw_description(x, y) draw_text_ex(x, y, @actor.description) end #-------------------------------------------------------------------------- # ページの切り替え #-------------------------------------------------------------------------- def p_change Sound.play_cursor @page_data2 = 0 @page_data = @page_data == STATUS_EX::PAGE_MAX - 1 ? 0 : @page_data + 1 refresh end #-------------------------------------------------------------------------- # ステータスの切り替え #-------------------------------------------------------------------------- def p_change2 return if @page_data != 0 Sound.play_cursor @page_data2 = (@page_data2 == STATUS_EX::PAGE_MAX2 - 1) ? 0 : @page_data2 + 1 refresh end end class Window_Base < Window #-------------------------------------------------------------------------- # 能力値の描画 #-------------------------------------------------------------------------- def draw_actor_param(actor, x, y, param_id) if param_id > 3000 change_color(system_color) draw_text(x, y, 90, line_height, Vocab::debuff_rate(param_id - 3001)) change_color(normal_color) draw_text(x + 90, y, STATUS_EX::STNWD, line_height, ((actor.debuff_rate(param_id - 3001) * -1 + 1) * 100).round, 2) elsif param_id > 2000 change_color(system_color) draw_text(x, y, 90, line_height, $data_system.elements[param_id - 2000]) change_color(normal_color) draw_text(x + 90, y, STATUS_EX::STNWD, line_height, ((actor.element_rate(param_id - 2000) * -1 + 1) * 100).round, 2) elsif param_id > 1000 change_color(system_color) draw_text(x, y, 90, line_height, $data_states[param_id - 1000].name) change_color(normal_color) if @actor.state_resist?(param_id - 1000) draw_text(x + 90, y, STATUS_EX::STNWD, line_height, "無効", 2) else draw_text(x + 90, y, STATUS_EX::STNWD, line_height, ((actor.state_rate(param_id - 1000) * -1 + 1) * 100).round, 2) end elsif param_id > 17 change_color(system_color) draw_text(x, y, 90, line_height, Vocab::sparam(param_id - 18)) change_color(normal_color) draw_text(x + 90, y, STATUS_EX::STNWD, line_height, ((actor.sparam(param_id - 18) * 100)).round, 2) elsif param_id > 7 change_color(system_color) draw_text(x, y, 90, line_height, Vocab::xparam(param_id - 8)) change_color(normal_color) draw_text(x + 90, y, STATUS_EX::STNWD, line_height, (actor.xparam(param_id - 8) * 100).round, 2) else change_color(system_color) draw_text(x, y, 90, line_height, Vocab::param(param_id)) change_color(normal_color) draw_text(x + 90, y, STATUS_EX::STNWD, line_height, actor.param(param_id), 2) end end end #============================================================================== # ■ Scene_Status #------------------------------------------------------------------------------ #  ステータス画面の処理を行うクラスです。 #============================================================================== class Scene_Status < Scene_MenuBase #-------------------------------------------------------------------------- # 開始処理 #-------------------------------------------------------------------------- alias start_exeq start def start start_exeq @status_window.set_handler(:pagechange, method(:p_change)) @status_window.set_handler(:pagechange2, method(:p_change2)) end #-------------------------------------------------------------------------- # ページの切り替え #-------------------------------------------------------------------------- def p_change @status_window.p_change @status_window.activate end #-------------------------------------------------------------------------- # ページの切り替え #-------------------------------------------------------------------------- def p_change2 @status_window.p_change2 @status_window.activate end end class Window_Selectable < Window_Base #-------------------------------------------------------------------------- # 決定やキャンセルなどのハンドリング処理 #-------------------------------------------------------------------------- alias process_handling_exeqs process_handling def process_handling process_handling_exeqs return p_change2 if handle?(:pagechange2) && Input.trigger?(STATUS_EX::ESP_KEY2) end end