解決済み【VX・RGSS2改造リクエスト】戦闘コマンド入力中 立ち絵表示

金田一光彦
記事: 33
登録日時: 2016年7月21日(木) 23:19

解決済み【VX・RGSS2改造リクエスト】戦闘コマンド入力中 立ち絵表示

投稿記事by 金田一光彦 » 2018年5月22日(火) 22:52

こんばんわ。
白の魔様の戦闘コマンド入力中 立ち絵表示
http://izumiwhite.web.fc2.com/rgss2/rgss2_004.html
こちらのスクリプトの改造(追加機能)をお願いしたく書き込みました。
デフォルト仕様としてカスタムできるのが画像の位置と透明度ですが、更に以下のオプションを追加したいです:
①画像をスライド表示させる。最初に表示させる位置と最終的に表示できる位置を設定可能にすればイベントコマンドのようにスライド表示できるかと思いました。
 イベントコマンドでしたら簡単に設定できるのでスクリプトで難しくはないと思いますがプログラミング知識0のため改造方法がわかりません。
②瀕死状態の時グラフィック変化。残りHPが少ない時わかりやすくするためグラフィック変更をしたいです。危険時は人によってパーセンテージも変わると思うので(30%が危険と思う人や10%以下でないと危険と思わない方や様々だと思うので)個々でカスタムできるように改造したいです。
③ステート別にグラフィック変更可能にしたいです。例えば全身緑色のグラフィックを用意し、ステートID2(毒)の場合そのグラフィックに変更する。
④各キャラクターに設定できる画像をランダムに。例えばアクターID1のラルフのバストアップを通常時5枚、瀕死時3枚、ステート別1枚ずつ(毒1枚、麻痺1枚等)用意します。通常時5枚の中からランダムで表示(ニコニコ表情の1枚・力んでる表情1枚・やる気ある1枚・余裕かましてる表情の1枚・警戒してる表情1枚からランダムで表示)、瀕死時3枚ある中から1枚をランダムに表示(傷だらけの1枚・血を吐いているのを1枚・ガーンっとやばそうな表情のを1枚、この3種類からランダムで1枚表示)
⑤画像がないキャラの場合ポップアップで「画像がありません」と言うメッセージは表示せず、そのまま何も表示しないで続行。デフォルトの仕様ですと画像がないとポップアップメッセージからの強制終了なので、強制終了しないようにしたいです。

改造できる方に設定部分の操作仕様はお任せします。

全ての要望が可能でなくても、一部の改造が可能な場合でも構いません。
よろしくお願いします。
最後に編集したユーザー 金田一光彦 on 2018年6月06日(水) 13:55 [ 編集 1 回目 ]

TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: 【VX・RGSS2改造リクエスト】戦闘コマンド入力中 立ち絵表示

投稿記事by TOMO » 2018年5月23日(水) 04:41

こんな感じでいいですか?

コード: 全て選択

module WD_battlepicture_ini
  # 瀕死状態の条件式
  # (「a.〇〇」と「v[n]」のみです。「b.〇〇」は使えません)
  CrisisHp = "a.hp <= a.maxhp * 0.3"  # HPが最大HPの30%以下
 
  # 立ち絵の設定
  # 立ち絵ファイル名には、「文字列」または「配列」で設定して下さい
  # 配列時にはその中からランダムで決定されます
  #
  # 顔グラファイル名 => {
  #   :normal => 通常時の立ち絵ファイル名,
  #   :crisis => 瀕死時の立ち絵ファイル名,
  #   :state => {ステートID => ステート別の立ち絵ファイル名,},
  # },
  FaceName = {
    "Actor5" => {
      :normal => ["Actor5_n1.png", "Actor5_n2.png"],
      :crisis => "Actor5_c.png",
      :state => {
        2 => "Actor5_s2.png",
      },
    },
  }
 
  # スライド開始座標
  Start_x = -80 # x
  Start_y = -16 # y
  # スライド終了座標
  End_x = 0     # x
  End_y = -16   # y
  # スライド速度
  Move_x = 10   # 横
  Move_y = 10   # 縦
end

class Window_BattlePicture < Window_Base
  #--------------------------------------------------------------------------
  # ● リフレッシュ(変更)
  #--------------------------------------------------------------------------
  def set(a)
    self.contents.clear
   
    # 追加変更
    self.x = WD_battlepicture_ini::Start_x
    self.y = WD_battlepicture_ini::Start_y
    v = $game_variables
    condition = WD_battlepicture_ini::FaceName[a.face_name]
    return unless condition
    if a.states.any? {|state| condition[:state][state.id] }
      state = a.states.find {|state| condition[:state][state.id] }
      face_name = determine_picture(condition[:state][state.id])
    elsif eval(WD_battlepicture_ini::CrisisHp)
      face_name = determine_picture(condition[:crisis])
    else
      face_name = determine_picture(condition[:normal])
    end
    return if face_name.nil?
    # ここまで
   
    bitmap1 = Cache.picture(face_name)
    rect1 = Rect.new(0, 0, bitmap1.width, bitmap1.height)
    x = 416 - bitmap1.width / 2 + WD_battlepicture_ini::Picture_x
    y = 432 - bitmap1.height + WD_battlepicture_ini::Picture_y
    self.contents.blt(x,y,bitmap1,rect1,WD_battlepicture_ini::Picture_opacity)
  end
  #--------------------------------------------------------------------------
  # ● 立ち絵の決定
  #--------------------------------------------------------------------------
  def determine_picture(pictures)
    result = pictures.is_a?(Array) ? pictures[rand(pictures.size)] : pictures
    result = nil unless FileTest.exist?("Graphics/Pictures/" + result.to_s)
    result
  end
  #--------------------------------------------------------------------------
  # ● スライド処理
  #--------------------------------------------------------------------------
  def move
    unless self.x == WD_battlepicture_ini::End_x &&
      self.y == WD_battlepicture_ini::End_y
      move_x = WD_battlepicture_ini::Move_x
      move_y = WD_battlepicture_ini::Move_y
      if self.x > WD_battlepicture_ini::End_x
        self.x = [self.x - move_x, WD_battlepicture_ini::End_x].max
      elsif self.x < WD_battlepicture_ini::End_x
        self.x = [self.x + move_x, WD_battlepicture_ini::End_x].min
      end
      if self.y > WD_battlepicture_ini::End_y
        self.y = [self.y - move_y, WD_battlepicture_ini::End_y].max
      elsif self.y < WD_battlepicture_ini::End_y
        self.y = [self.y + move_y, WD_battlepicture_ini::End_y].min
      end
    end
  end
end

class Scene_Battle
  attr_accessor :battle_picture_window
  #--------------------------------------------------------------------------
  # ● アクターコマンド選択の開始(変更)
  #--------------------------------------------------------------------------
  def start_actor_command_selection
    wd_orig_start_actor_command_selection4
    @battle_picture_window.visible = true
    @battle_picture_window.set(@active_battler)
  end
  #--------------------------------------------------------------------------
  # ● アクターコマンド選択の更新
  #--------------------------------------------------------------------------
  alias wd_orig_update_actor_command_selection_ex update_actor_command_selection
  def update_actor_command_selection
    wd_orig_update_actor_command_selection_ex
    @battle_picture_window.move
  end
end

白の魔様のスクリプトより下に入れて下さい
金田一光彦
記事: 33
登録日時: 2016年7月21日(木) 23:19

解決【VX・RGSS2改造リクエスト】戦闘コマンド入力中 立ち絵表示

投稿記事by 金田一光彦 » 2018年5月23日(水) 10:01

TOMO様

早速作っていただきありがとうございます。テストプレイしてみました。
頂いたコードの:crisis => "Actor5_c.png",の部分に[]が抜けていたので追加してテストしたら問題なく表示されました。

ありがとうございました。

“VX / Ace:スクリプト素材のリクエスト” へ戻る