スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

web拍手 by FC2   

[RGSS]アクター融合

使い方は → こちら

※このスクリプトは修正する可能性があります。

[RGSS]アクター融合
最終更新:2011/06/07

複数のアクターを融合したかのようなスキル作れます。

スクリーンショット サムネイルクリックで拡大画像が見られます。
rgss_acfu1.jpg  rgss_acfu2.jpg

プログラムは続きにあります。

=begin
===============================================================================
    ☆★☆★☆★☆★ アクター融合 ★☆★☆★☆★☆
=============================================================================== 

 製作・開発:STERS
  アイデア:ルルベル様

  Page::http://gamemaking.web.fc2.com/

導入方法------------------------------------------------------------------

    このスクリプトを Scene_Debug より下 Main より上に
   新しく作ったセクションにコピペして入れてください。

--------------------------------------------------------------------------

これを導入することで、
アクター(2人以上)が融合し
新たなアクターを呼ぶことができます。

使い方--------------------------------------------------------------------
1.まずはこのスクリプトを導入してください。

2.設定項目らしき部分の編集をやってください。

3.融合用属性の持ったスキルをつくり、
  アクターに覚えさせる

4.戦闘時に指定した融合元アクターで
  指定したスキルを発動する

-------------------------------------------------------------------------
同一ターン内で同時融合
(パーティに[A,B,C,D]がいた場合、[A,B]で融合、[C,D]で融合)
は今のところできません。

融合してできたアクターと、
別のアクターを融合
(パーティに[A,B,C,D]がいた場合、[A,B]で融合し[E]が出てきて、[E,C,D]を融合)
させることもできます。

=end
#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle
  # 融合設定
  #
  # [[Act1_ID,Act2_ID...],Skill_ID, Act3_ID, Option]
  #
  # の順で指定してください
  # 融合元アクターは何体でもいいです。
  #
  # Option には、
  #  0:融合キャラも、融合前キャラも全回復する。
  #  1:融合キャラは全回復するが、融合前キャラは全回復しない。
  #  2:融合キャラは全回復しないが、融合前キャラは全回復する。
  #  3:融合キャラも、融合前キャラも全回復はしない。
  # の各数字のいずれかを入れてください。
  # (これ以外だとすべて「0」になる)
  #
  
  YUGO = [
          [[1,9],83,10,1]
         ]
  
  #--------------------------------------------------------------------------
  # ● メインフェーズ開始
  #--------------------------------------------------------------------------
  alias yugo_actor_start_phase4 start_phase4 unless $@
  def start_phase4
    yugo_actor_start_phase4
    if @yugo_kai == true
      @yugo_kai = false
      @yugo_flag = false
      for i in 0...YUGO.size
        for battler in @action_battlers
          if YUGO[i][2] == battler.id
            actor = []
            for ac in YUGO[i][0]
              actor.push actor_get(ac)
            end
            actor_yugo([battler.id], actor, YUGO[i][3])
            $game_screen.start_flash(Color.new(255,255,255), 10)
            @status_window.dispose
            @status_window = Window_BattleStatus.new
            return
          end
        end
      end
      return
    end
    count = 0
    for battler in @action_battlers
      count += 1 if battler.current_action.kind != 1 and battler.instance_of?(Game_Actor)
    end
    return if count > $game_party.actors.size - 2
    re = []
    add = 0
    flag = []
    count = 0
    for i in 0...YUGO.size
      flag.push []
      for j in 0...YUGO[i][0].size
        flag[i].push false
      end
    end
    id = 0
    battler = nil
    skill_ok = [false, false]
    last_battler = ""
    for i in 0...YUGO.size
      break if skill_ok[0] == true and skill_ok[1] == true
      for battler in @action_battlers
        break if skill_ok[0] == true and skill_ok[1] == true
        next if last_battler == battler.id
        if battler.current_action.skill_id == skill_get(YUGO[i][1])
          if skill_ok[0] == true
            skill_ok[1] = true
          else
            skill_ok[0] = true
          end
          last_battler = battler.id
          id = i
        end
      end
    end
    if skill_ok[0] == true and skill_ok[1] == true
      for battler in @action_battlers
        for j in 0...YUGO[id][0].size
          flag[id][j] = true if YUGO[id][0][j] == battler.id
        end
      end
      count = 1
      for i in 0...flag.size
        for j in 0...flag[i].size
          count += 1 if flag[i][j] == true
        end
        if count >= flag[i].size
          actor_ok = true
          break
        end
      end
      return if actor_ok != true
      re = []
      for yugo in YUGO[id][0]
        re.push actor_get(yugo)
      end
      $game_screen.start_flash(Color.new(255,255,255), 10)
      actor_yugo(re, [actor_get(YUGO[id][2])], YUGO[id][3])
      s = @actor_command_window.commands
      s2 = @actor_command_window.commands.dup;s2.push("融合解除")
      @actor_command = [s,s2]
      @yugo_flag = true
      @status_window.dispose
      @status_window = Window_BattleStatus.new
    end
  end
  #--------------------------------------------------------------------------
  # ● バトル終了
  #     result : 結果 (0:勝利 1:敗北 2:逃走)
  #--------------------------------------------------------------------------
  alias yugo_actor_battle_end battle_end unless $@
  def battle_end(result)
    yugo_actor_battle_end(result)
    if @party != nil and @yugo_flag != false
      $game_party.party_all_remove
      for p in @party
        $game_party.add_actor(p.id)
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 次のアクター入力へ
  #--------------------------------------------------------------------------
  alias yugo_actor_phase3_next_actor phase3_next_actor unless $@
  def phase3_next_actor
    yugo_actor_phase3_next_actor
    return if @active_battler == nil
    if @active_battler.yugo_flag == true
      @actor_command_window.dispose
      @actor_command_window = Window_Command.new(160, @actor_command[1])
      @actor_command_window.y = 128
      @actor_command_window.x = @actor_index * 160
      @actor_command_window.back_opacity = 160
    else
      if @actor_command != nil
        if @actor_command_window.commands.size != @actor_command[0].size
          @actor_command_window.dispose
          @actor_command_window = Window_Command.new(160, @actor_command[0])
          @actor_command_window.y = 160
          @actor_command_window.x = @actor_index * 160
          @actor_command_window.back_opacity = 160
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 前のアクター入力へ
  #--------------------------------------------------------------------------
  alias yugo_actor_phase3_prior_actor phase3_prior_actor unless $@
  def phase3_prior_actor
    yugo_actor_phase3_prior_actor
    return if @active_battler == nil
    if @active_battler.yugo_flag
      @actor_command_window.dispose
      @actor_command_window = Window_Command.new(160, @actor_command[1])
      @actor_command_window.y = 128
      @actor_command_window.x = @actor_index * 160
      @actor_command_window.back_opacity = 160
    else
      if @actor_command != nil
        if @actor_command_window.commands.size != @actor_command[0].size
          @actor_command_window.dispose
          @actor_command_window = Window_Command.new(160, @actor_command[0])
          @actor_command_window.y = 160
          @actor_command_window.x = @actor_index * 160
          @actor_command_window.back_opacity = 160
        end
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新 (アクターコマンドフェーズ : 基本コマンド)
  #--------------------------------------------------------------------------
  alias yugo_actor_update_phase3_basic_command update_phase3_basic_command unless $@
  def update_phase3_basic_command
    if @yugo_flag == true and @active_battler.yugo_flag == true
      # B ボタンが押された場合
      if Input.trigger?(Input::B)
        # キャンセル SE を演奏
        $game_system.se_play($data_system.cancel_se)
        # 前のアクターのコマンド入力へ
        phase3_prior_actor
        return
      end
      if Input.trigger?(Input::C)
        # アクターコマンドウィンドウのカーソル位置で分岐
        case @actor_command_window.index
        when 0  # 攻撃
          # 決定 SE を演奏
          $game_system.se_play($data_system.decision_se)
          # アクションを設定
          @active_battler.current_action.kind = 0
          @active_battler.current_action.basic = 0
          # エネミーの選択を開始
          start_enemy_select
        when 1  # スキル
          # 決定 SE を演奏
          $game_system.se_play($data_system.decision_se)
          # アクションを設定
          @active_battler.current_action.kind = 1
          # スキルの選択を開始
          start_skill_select
        when 2  # 防御
          # 決定 SE を演奏
          $game_system.se_play($data_system.decision_se)
          # アクションを設定
          @active_battler.current_action.kind = 0
          @active_battler.current_action.basic = 1
          # 次のアクターのコマンド入力へ
          phase3_next_actor
        when 3  # アイテム
          # 決定 SE を演奏
          $game_system.se_play($data_system.decision_se)
          # アクションを設定
          @active_battler.current_action.kind = 2
          # アイテムの選択を開始
          start_item_select
        when 4
          $game_system.se_play($data_system.decision_se)
          @yugo_kai = true
          phase3_next_actor
        end
        return
      end
    else
      yugo_actor_update_phase3_basic_command
    end
  end
  #--------------------------------------------------------------------------
  # ○ 独自追加メソッド 
  #--------------------------------------------------------------------------
  def actor_yugo(re, add, flag)
    @party = $game_party.actors.dup
    for fu in re
      if add.size == 1
        $game_actors[fu].yugo_flag = false
      end
      $game_party.remove_actor(fu)
    end
    for fu in add
      if add.size == 1
        $game_actors[fu].yugo_flag = true
      end
      $game_party.add_actor(fu)
    end
    case flag
    when 0
      $game_party.actors.each{|a| a.recover_all }
    when 1
      if add.size == 1
        $game_party.actors.each{|a| a.recover_all }
      end
    when 2
      if re.size == 1
        $game_party.actors.each{|a| a.recover_all }
      end
    else
      $game_party.actors.each{|a| a.recover_all }
    end
  end
  def actor_get(name=nil)
    return name
    return if name == nil
    for actor in $data_actors
      next if actor == nil
      return actor.id if actor.name == name
    end
    return nil
  end
  def skill_get(name=nil)
    return name
    return if name == nil
    for skill in $data_skills
      next if skill == nil
      return skill.id if skill.name == name
    end
    return nil
  end
end
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party
  def party_all_remove
    @actors = []
  end
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
  attr_accessor :yugo_flag
  alias actor_yugo_setup setup unless $@
  def setup(actor_id)
    actor_yugo_setup(actor_id)
    @yugo_flag = false
  end
end
#==============================================================================
# ■ Window_Command
#==============================================================================
class Window_Command < Window_Selectable
  def commands
    @commands
  end
end


web拍手 by FC2   

コメントの投稿


非公開コメント

コメント

STERS's Development Room

STERSの開発室っぽい何か。


プロフィール

Name:STERS
Unity3D/C#/PHP/js/C++/VB
などを勉強中です

[STERS's Room]
[ファイル置き場]

カテゴリー
最近の記事
最近のコメント
カレンダー
06 ≪│2017/07│≫ 08
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
RSSリンクの表示
ブログ内Google検索
Google
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。