#============================================================================== # ■ RGSS3 新装備拡張対応ステータス画面 Ver1.06 by 星潟 #------------------------------------------------------------------------------ # 当方の新装備拡張・装備画面に対応したステータス画面を実装します。 # 旧バージョンと異なり、3ページ目のプロフィール画面上方には # データベースで設定したアクターの説明が表示されません。 # 新装備拡張&装備拡張画面1.07以上を使用されている場合 # このスクリプトを併用される際は必ずVer1.06以上を使用してください。 #============================================================================== # アクターのメモ欄に記述。 #------------------------------------------------------------------------------ # <プロフィール変数:5> # # プロフィールの変更に使用する変数IDを5にします。 #------------------------------------------------------------------------------ # <説明開始:0> # # プロフィール変数に格納されている値が0の時のプロフィール情報の取得を開始します。 #------------------------------------------------------------------------------ # <説明終了:0> # # プロフィール変数に格納されている値が0の時のプロフィール情報の取得を終了します。 #------------------------------------------------------------------------------ # 例.メモ欄に記載されている物が下記の場合 # # あいうえおかきくけこ # <説明開始:0> # さしすせそたちつてと # なにぬねのはひふへほ # <説明終了:0> # まみむめもやゆよ # <説明開始:1> # らりるれろ # わをん # <説明終了:1> # # この場合、プロフィール変数の値が0の時のプロフィール情報は # # さしすせそたちつてと # なにぬねのはひふへほ # # この2行となります。 # # プロフィール変数の値が1の時のプロフィール情報は # # らりるれろ # わをん # # この2行となります。 # なお、変数の値に対応するプロフィール情報が存在しない時は何も表示されません。 #------------------------------------------------------------------------------ # <立ち絵変数:6> # # 立ち絵の変更に使用する変数IDを6にします。 #------------------------------------------------------------------------------ # <立ち絵:0,あいうえお> # # 立ち絵変数に格納されている値が0の時 # 「あいうえお」というピクチャを立ち絵として使用します。 # なお、変数の値に対応する立ち絵設定が存在しない時は何も表示されません。 #============================================================================== module SceneStatusNextType #1行の高さを指定。 LH = 24 #装備品一覧の名称を指定。 EquipList = "装備品一覧" #デフォルト基本プロフィール変数を指定。 ProfileBaseVariables = 51 #プロフィール変数の設定用キーワードを指定。 ProfileVariablesFormat = "プロフィール変数" #プロフィール開始用キーワードを指定。 DescriptionStart = "説明開始" #プロフィール終了用キーワードを指定。 DescriptionEnd = "説明終了" #デフォルト立ち絵用変数を指定。 GraphicBaseVariables = 52 #立ち絵変数の設定用キーワードを指定。 GraphicVariablesFormat = "立ち絵変数" #変数の値に対応する立ち絵の設定用キーワードを指定。 GraphicFormat = "立ち絵" #空のハッシュを作成。 HorzLine = {} #ページ別の横線のY座標を設定。 HorzLine[0] = [LH * 1,LH * 6,LH * 11,LH * 14] HorzLine[1] = [LH * 1,LH * 3,LH * 14] HorzLine[2] = [LH * 1,LH * 14] #アクター名を描写するかどうかを指定。 ActorName = true #アクター名の座標を指定。 ActorNamePos = [4, LH * 0] #職業名を描写するかどうかを指定。 ClassName = true #職業名の座標を指定。 ClassNamePos = [136, LH * 0] #二つ名を描写するかどうかを指定。 Nickname = true #二つ名の座標を指定。 NicknamePos = [304, LH * 0] #顔グラフィックを描写するかどうかを指定。 Face = true #顔グラフィックの座標を指定。 FacePos = [8, LH * 2] #基本データを描写するかどうかを指定。 BaseData = true #基本データの座標を指定。 BaseDataPos = [136, LH * 2] #基本データ「レベル」を描写するかどうかを指定。 LVData = true #レベルの座標を指定。 LVDataPos = [BaseDataPos[0], BaseDataPos[1]] #基本データ「ステート」を描写するかどうかを指定。 StateData = true #ステートの座標を指定。 StateDataPos = [BaseDataPos[0] + 90, BaseDataPos[1]] #基本データ「HP」を描写するかどうかを指定。 HPData = true #HPの座標を指定。 HPDataPos = [BaseDataPos[0], BaseDataPos[1] + LH * 1] #基本データ「MP」を描写するかどうかを指定。 MPData = true #MPの座標を指定。 MPDataPos = [BaseDataPos[0], BaseDataPos[1] + LH * 2] #基本データ「TP」を描写するかどうかを指定。 TPData = true #TPの座標を指定。 TPDataPos = [BaseDataPos[0], BaseDataPos[1] + LH * 3] #EXPを描写するかどうかを指定。 ExpData = true #EXPの座標を指定。 ExpDataPos = [304, LH * 2] #パラメータの座標を指定。 ParameterData = true #パラメータの座標を指定。 ParameterDataPos = [4, LH * 7] #1ページ目のアクター説明を描写するかどうかを指定。 FirstPageDescription = true #1ページ目のアクター説明の座標を指定。 FirstPageDescriptionY = [4,288] #立ち絵を描写するかどうかを指定。 Graphic = true #立ち絵のサイズを指定。(横,縦) GraphicSize = [272, 288] #立ち絵の座標を指定。 GraphicPos = [272, 128] #1ページ目の追加説明を描写するかどうかを指定。 StatusDescription1 = true #1ページ目の追加説明の座標を指定。 StatusDescription1Pos = [4,LH * 15] #1ページ目の追加説明の内容を指定。 #,をつけて複数指定すると改行扱いになる。 StatusDescriptionTexts1 = [ "LR:アクター変更 左右:ページ移動 XY:ステータス切替" ] #2ページ目の追加説明を描写するかどうかを指定。 StatusDescription2 = true #2ページ目の追加説明の座標を指定。 StatusDescription2Pos = [4,LH * 15] #2ページ目の追加説明の内容を指定。 #,をつけて複数指定すると改行扱いになる。 StatusDescriptionTexts2 = [ "LR:アクター変更 左右:ページ移動" ] #3ページ目の追加説明を描写するかどうかを指定。 StatusDescription3 = true #3ページ目の追加説明の座標を指定。 StatusDescription3Pos = [4,LH * 15] #3ページ目の追加説明の内容を指定。 #,をつけて複数指定すると改行扱いになる。 StatusDescriptionTexts3 = [ "LR:アクター変更 左右:ページ移動" ] #以下データまとめにつき変更不要。 AR1 = [ActorName,ClassName,Nickname,Face, BaseData,LVData,StateData, HPData,MPData,TPData,ExpData, FirstPageDescription,Graphic,ParameterData] AR2 = [ActorNamePos,ClassNamePos,NicknamePos,FacePos, BaseDataPos,LVDataPos,StateDataPos, HPDataPos,MPDataPos,TPDataPos,ExpDataPos, FirstPageDescriptionY,GraphicPos,ParameterDataPos] StatusDescriptionTotal = [ StatusDescription1,StatusDescription2,StatusDescription3] StatusDescriptionTotalPos = [ StatusDescription1Pos,StatusDescription2Pos,StatusDescription3Pos] StatusDescriptionTextsTotal = [ StatusDescriptionTexts1,StatusDescriptionTexts2,StatusDescriptionTexts3] end class Window_Status < Window_Selectable attr_accessor :page_number1 attr_accessor :page_number2 #-------------------------------------------------------------------------- # オブジェクト初期化 #-------------------------------------------------------------------------- alias initialize_equip_enh initialize def initialize(actor) @page_number1 = 0 @page_number2 = 0 @page_ar1 = SceneStatusNextType::AR1 @page_ar2 = SceneStatusNextType::AR2 @draw_hash = SceneEquipNextType::Page[@page_number2] initialize_equip_enh(actor) end #-------------------------------------------------------------------------- # 更新 #-------------------------------------------------------------------------- unless method_defined?(:update_equip_enh) alias update_equip_enh update def update update_equip_enh ks = SceneEquipNextType::PageKey return prev_page if Input.trigger?(ks[0]) return next_page if Input.trigger?(ks[1]) return prev_main_page if Input.trigger?(:LEFT) return next_main_page if Input.trigger?(:RIGHT) end end #-------------------------------------------------------------------------- # リフレッシュ #-------------------------------------------------------------------------- def refresh contents.clear lh = line_height SceneStatusNextType::HorzLine[@page_number1].each {|i| draw_horz_line(i)} case @page_number1 when 0 draw_block1(lh) draw_block2(lh * 2) draw_block3(lh * 7) draw_block4(lh * 12) when 1 draw_block1(lh) draw_equipments(4, lh * 2) when 2 if @page_ar1[12] a = @page_ar2[12] draw_bup_graphic(a[0], a[1]) end draw_block1(lh) actor = @actor.actor text = actor.profile_text start_flag = false draw_text_ex(4,2 * lh,text) end if SceneStatusNextType::StatusDescriptionTotal[@page_number1] text = "" SceneStatusNextType::StatusDescriptionTextsTotal[@page_number1].each_with_index {|i,index| text += "\n" if index != 0 text += i} if !text.empty? a = SceneStatusNextType::StatusDescriptionTotalPos[@page_number1] draw_text_ex(a[0],a[1],text) end 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 a = SceneStatusNextType::GraphicSize rect.width = a[0] rect.height = a[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(@actor.actor.bup_graphic) end #-------------------------------------------------------------------------- # ブロック 1 の描画 #-------------------------------------------------------------------------- def draw_block1(y) if @page_ar1[0] a = @page_ar2[0] draw_actor_name(@actor, a[0], a[1]) end if @page_ar1[1] a = @page_ar2[1] draw_actor_class(@actor, a[0], a[1]) end if @page_ar1[2] a = @page_ar2[2] draw_actor_nickname(@actor, a[0], a[1]) end end #-------------------------------------------------------------------------- # ブロック 2 の描画 #-------------------------------------------------------------------------- def draw_block2(y) if @page_ar1[3] a = @page_ar2[3] draw_actor_face(@actor, a[0], a[1]) end if @page_ar1[4] a = @page_ar2[4] draw_basic_info(a[0], a[1]) end if @page_ar1[10] a = @page_ar2[10] draw_exp_info(a[0], a[1]) end end #-------------------------------------------------------------------------- # ブロック 3 の描画 #-------------------------------------------------------------------------- def draw_block3(y) if @page_ar1[13] a = @page_ar2[13] draw_parameters(a[0], a[1]) end end #-------------------------------------------------------------------------- # ブロック 4 の描画 #-------------------------------------------------------------------------- def draw_block4(y) if @page_ar1[11] a = @page_ar2[11] draw_description(a[0], a[1]) end end #-------------------------------------------------------------------------- # 基本情報の描画 #-------------------------------------------------------------------------- def draw_basic_info(x, y) if @page_ar1[5] a = @page_ar2[5] draw_actor_level(@actor, a[0], a[1]) end if @page_ar1[6] a = @page_ar2[6] draw_actor_icons(@actor, a[0], a[1]) end if @page_ar1[7] a = @page_ar2[7] draw_actor_hp(@actor, a[0], a[1]) end if @page_ar1[8] a = @page_ar2[8] draw_actor_mp(@actor, a[0], a[1]) end if @page_ar1[9] a = @page_ar2[9] draw_actor_tp(@actor, a[0], a[1]) end end #-------------------------------------------------------------------------- # 能力値の描画 #-------------------------------------------------------------------------- def draw_parameters(x, y) line_data = 0 v_line_data = 0 line_plus = contents_width / @draw_hash[:col] w = line_plus - @draw_hash[:space] l = SceneStatusNextType::LH t = line_plus - @draw_hash[:title] @draw_hash[:ids].each {|i| draw_actor_param_apequip(x + line_data,y + l * v_line_data,w,l,t,i) v_line_data += 1 if @draw_hash[:line] == v_line_data line_data += line_plus v_line_data = 0 end} end #-------------------------------------------------------------------------- # 能力値の描画 #-------------------------------------------------------------------------- def draw_actor_param_apequip(x, y, w, h, t, c) case c when 0..99 i = c d = @actor.param(i) a = [$data_system.terms.params[i],1,0,false] when 100..109 i = c - 100 d = @actor.xparam(i) a = SceneEquipNextType::XParam[i] when 200..209 i = c - 200 d = @actor.sparam(i) a = SceneEquipNextType::SParam[i] when 300..307 i = c - 300 d = @actor.debuff_rate(i) a = SceneEquipNextType::Debuff[i] when 10001..19999 i = c - 10000 d = @actor.element_rate(i) a = SceneEquipNextType::Element[i] when 20001..99999 i = c - 20000 d = @actor.state_resist?(i) ? SceneEquipNextType::StateResist : @actor.state_rate(i) a = SceneEquipNextType::State[i] else return if c < 0 i = c - 100000 d = @actor.scene_equip_next_type_extra_status(i) a = SceneEquipNextType::Extra[i] end d1 = a ? a[0] : nil return unless d1 if c > 20000 && c < 100000 && d == SceneEquipNextType::StateResist d2 = SceneEquipNextType::StateResistWord else d2 = (d * a[1]).round(10).to_i + a[2] end change_color(system_color) draw_text(x,y,t,h,d1) change_color(normal_color) draw_text(x + t,y,w - t - 24,h,d2,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, SceneStatusNextType::EquipList, 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 + SceneStatusNextType::LH * l_data, 60, line_height, Vocab::etype(@actor.equip_slots[i])) change_color(normal_color) draw_item_name(item, x + 60 + xd, y + SceneStatusNextType::LH * l_data) l_data += 1 if xd != 0} end #-------------------------------------------------------------------------- # 次のステータスページに切り替え #-------------------------------------------------------------------------- def next_page return if @page_number1 != 0 Sound.play_cursor @page_number2 += 1 @page_number2 = 0 if @page_number2 > SceneEquipNextType::StatusPageMax - 1 @draw_hash = SceneEquipNextType::Page[@page_number2] refresh end #-------------------------------------------------------------------------- # 前のステータスページに切り替え #-------------------------------------------------------------------------- def prev_page return if @page_number1 != 0 Sound.play_cursor @page_number2 -= 1 @page_number2 = SceneEquipNextType::StatusPageMax - 1 if @page_number2 < 0 @draw_hash = SceneEquipNextType::Page[@page_number2] refresh end #-------------------------------------------------------------------------- # 次のページに切り替え #-------------------------------------------------------------------------- def next_main_page Sound.play_cursor @page_number1 += 1 @page_number1 = 0 if @page_number1 >= 3 refresh end #-------------------------------------------------------------------------- # 前のページに切り替え #-------------------------------------------------------------------------- def prev_main_page Sound.play_cursor @page_number1 -= 1 @page_number1 = 2 if @page_number1 < 0 refresh end end class RPG::Actor < RPG::BaseItem #-------------------------------------------------------------------------- # プロフィール変数 #-------------------------------------------------------------------------- def profile_variables @profile_variables ||= /<#{SceneStatusNextType::ProfileVariablesFormat}[::](\S+)>/ =~ note ? $1.to_i : SceneStatusNextType::ProfileBaseVariables end #-------------------------------------------------------------------------- # プロフィールテキスト #-------------------------------------------------------------------------- def profile_text t = (@profile_text ||= create_profile_text)[$game_variables[profile_variables]] t ? t : "" end #-------------------------------------------------------------------------- # プロフィールテキストの作成 #-------------------------------------------------------------------------- def create_profile_text h = {} k = nil w1 = SceneStatusNextType::DescriptionStart w2 = SceneStatusNextType::DescriptionEnd note.each_line {|l| if k if /<#{w2}[::](\S+)>/ =~ l k = nil next end if !h[k] h[k] = l else h[k] += l end else if /<#{w1}[::](\S+)>/ =~ l k = $1.to_i next end end} h end #-------------------------------------------------------------------------- # 立ち絵変数 #-------------------------------------------------------------------------- def bup_graphic_variables @bup_graphic_variables ||= /<#{SceneStatusNextType::GraphicVariablesFormat}[::](\S+)>/ =~ note ? $1.to_i : SceneStatusNextType::GraphicBaseVariables end #-------------------------------------------------------------------------- # 立ち絵データ #-------------------------------------------------------------------------- def bup_graphic n = (@bup_graphic ||= create_bup_graphic)[$game_variables[bup_graphic_variables]] n ? n : "" end #-------------------------------------------------------------------------- # 立ち絵データの作成 #-------------------------------------------------------------------------- def create_bup_graphic h = {} note.each_line {|l| h[$1.to_i] = $2.to_s if /<#{SceneStatusNextType::GraphicFormat}[::](\S+),(\S+)>/ =~ l} h end end