设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1328|回复: 2
打印 上一主题 下一主题

[已经解决] sideview使用弓做武器有错误

[复制链接]

Lv2.观梦者

梦石
0
星屑
439
在线时间
330 小时
注册时间
2012-8-16
帖子
31
跳转到指定楼层
1
发表于 2013-3-17 21:50:53 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
使用弓做武器时仍然按照近战武器模式战斗,没有射箭的动作,之前加的铳的脚本,同样是不起作用跟弓一样都变成了近战
帮我检查一下代码到底哪里出了问题,还是其它什么问题(最近真的太倒霉了,接二连三地出问题)
VXAce_SP1
  1. #==============================================================================
  2. # ■ VXAce_SP1
  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. class Game_Battler
  28.   attr_accessor :magic_reflection
  29.   #--------------------------------------------------------------------------
  30.   # ● 敵対関係の判定
  31.   #--------------------------------------------------------------------------
  32.   alias vxace_sp1_opposite? opposite?
  33.   def opposite?(battler)
  34.     vxace_sp1_opposite?(battler) || battler.magic_reflection
  35.   end
  36. end
  37. #------------------------------------------------------------------------------
  38. class Game_Actor
  39.   #--------------------------------------------------------------------------
  40.   # ● 装備できない装備品を外す
  41.   #     item_gain : 外した装備品をパーティに戻す
  42.   #--------------------------------------------------------------------------
  43.   alias vxace_sp1_release_unequippable_items release_unequippable_items
  44.   def release_unequippable_items(item_gain = true)
  45.     loop do
  46.       last_equips = equips.dup
  47.       vxace_sp1_release_unequippable_items(item_gain)
  48.       return if equips == last_equips
  49.     end
  50.   end
  51.   #--------------------------------------------------------------------------
  52.   # ● 自動戦闘時の戦闘行動を作成
  53.   #--------------------------------------------------------------------------
  54.   def make_auto_battle_actions
  55.     @actions.size.times do |i|
  56.       @actions[i] = make_action_list.max_by {|action| action.value }
  57.     end
  58.   end
  59. end
  60. #------------------------------------------------------------------------------
  61. class Game_Player
  62.   #--------------------------------------------------------------------------
  63.   # ● マップイベントの起動
  64.   #     triggers : トリガーの配列
  65.   #     normal   : プライオリティ[通常キャラと同じ]かそれ以外か
  66.   #--------------------------------------------------------------------------
  67.   alias vxace_sp1_start_map_event start_map_event
  68.   def start_map_event(x, y, triggers, normal)
  69.     return if $game_map.interpreter.running?
  70.     vxace_sp1_start_map_event(x, y, triggers, normal)
  71.   end
  72. end
  73. #------------------------------------------------------------------------------
  74. class Game_Picture
  75.   #--------------------------------------------------------------------------
  76.   # ● ピクチャの消去
  77.   #--------------------------------------------------------------------------
  78.   alias vxace_sp1_erase erase
  79.   def erase
  80.     vxace_sp1_erase
  81.     [url=home.php?mod=space&uid=27559]@origin[/url] = 0
  82.   end
  83. end
  84. #------------------------------------------------------------------------------
  85. class Game_Interpreter
  86.   #--------------------------------------------------------------------------
  87.   # ● ステートの変更
  88.   #--------------------------------------------------------------------------
  89.   alias vxace_sp1_command_313 command_313
  90.   def command_313
  91.     vxace_sp1_command_313
  92.     $game_party.clear_results
  93.   end
  94. end
  95. #------------------------------------------------------------------------------
  96. class Sprite_Character
  97.   #--------------------------------------------------------------------------
  98.   # ● 位置の更新
  99.   #--------------------------------------------------------------------------
  100.   alias vxace_sp1_update_position update_position
  101.   def update_position
  102.     move_animation(@character.screen_x - x, @character.screen_y - y)
  103.     vxace_sp1_update_position
  104.   end
  105.   #--------------------------------------------------------------------------
  106.   # ● アニメーションの移動
  107.   #--------------------------------------------------------------------------
  108.   def move_animation(dx, dy)
  109.     if @animation && @animation.position != 3
  110.       @ani_ox += dx
  111.       @ani_oy += dy
  112.       @ani_sprites.each do |sprite|
  113.         sprite.x += dx
  114.         sprite.y += dy
  115.       end
  116.     end
  117.   end
  118. end
  119. #------------------------------------------------------------------------------
  120. class Sprite_Picture
  121.   #--------------------------------------------------------------------------
  122.   # ● 転送元ビットマップの更新
  123.   #--------------------------------------------------------------------------
  124.   alias vxace_sp1_update_bitmap update_bitmap
  125.   def update_bitmap
  126.     if @picture.name.empty?
  127.       self.bitmap = nil
  128.     else
  129.       vxace_sp1_update_bitmap
  130.     end
  131.   end
  132. end
  133. #------------------------------------------------------------------------------
  134. class Window_Base
  135.   #--------------------------------------------------------------------------
  136.   # ● フォント設定のリセット
  137.   #--------------------------------------------------------------------------
  138.   alias vxace_sp1_reset_font_settings reset_font_settings
  139.   def reset_font_settings
  140.     vxace_sp1_reset_font_settings
  141.     contents.font.bold = Font.default_bold
  142.     contents.font.italic = Font.default_italic
  143.   end
  144. end
  145. #------------------------------------------------------------------------------
  146. class Scene_Battle
  147.   #--------------------------------------------------------------------------
  148.   # ● 魔法反射の発動
  149.   #--------------------------------------------------------------------------
  150.   alias vxace_sp1_invoke_magic_reflection invoke_magic_reflection
  151.   def invoke_magic_reflection(target, item)
  152.     @subject.magic_reflection = true
  153.     vxace_sp1_invoke_magic_reflection(target, item)
  154.     @subject.magic_reflection = false
  155.   end
  156. end
复制代码
SideViewアクション設定
  1. #==============================================================================
  2. # ■ SideViewアクション設定 Ver100
  3. #------------------------------------------------------------------------------
  4. #  サイドビューバトル全般のセッティングやアクションを作成します
  5. #==============================================================================
  6. module N03
  7. #--------------------------------------------------------------------------
  8. # ● 全体のセッティング
  9. #--------------------------------------------------------------------------
  10.   # アクター初期位置     一人目       二人目       三人目       四人目
  11.   #                    X軸 Y軸 H軸  X軸 Y軸 H軸  X軸 Y軸 H軸  X軸 Y軸 H軸
  12.   ACTOR_POSITION   = [[415,160, 0],[435,185, 0],[455,210, 0],[475,235, 0]]
  13.   # 行動終了時のウエイト(待ち時間・単位は1フレーム)
  14.   ACTION_END_WAIT = 8
  15.   # ターン終了時のウエイト(待ち時間・単位は1フレーム)
  16.   TURN_END_WAIT = 12
  17.   # 敵の不意打ち時にバックアタック(左右反転)を許可するならtrue しないならfalse
  18.   BACK_ATTACK = true
  19.   # 味方バトラーがダメージを受けた時、デフォルトのエフェクトを採用するならtrue
  20.   ACTOR_DAMAGE = false
  21.   # 敵バトラーがダメージを受けた時、デフォルトのエフェクトを採用するならtrue
  22.   ENEMY_DAMAGE = false
  23.   # 敵バトラーのX座標、回転計算、戦闘アニメを自動で反転させるならtrue
  24.   ENEMY_MIRROR = true
  25.   # コラプス禁止処理に使う、データベースの不死身ステートID
  26.   IMMORTAL_ID = 10
  27.   
  28.   # バトルログ(戦闘の進行を実況表示するウィンドウ)を表示させるならtrue
  29.   # OFFにした場合、スキル名ウインドウが画面上部に表示されます
  30.   BATTLE_LOG = true
  31.   # スキル名ウインドウON時の、非表示にするスキルIDを配列に入れます
  32.   NO_DISPLAY_SKILL_ID = [1,2,3,4,5,6,7]
  33.   # ダメージ数字をPOPさせるならtrue
  34.   DAMAGE_POP = true
  35.   # ステート付加をPOPさせるならtrue
  36.   STATE_POP = true
  37.   # ダメージ数字画像のファイル名(Systemフォルダを参照します)
  38.   DAMAGE_PLUS = "damage_num+"
  39.   # 回復数字画像のファイル名(Systemフォルダを参照します)
  40.   DAMAGE_MINUS = "damage_num-"
  41.   # MPダメージ数字画像のファイル名(Systemフォルダを参照します)
  42.   DAMAGE_MP = "damage_mp"
  43.   # TPダメージ数字画像のファイル名(Systemフォルダを参照します)
  44.   DAMAGE_TP = "damage_tp"
  45.   # ダメージ数字の文字間隔を調整
  46.   DAMAGE_ADJUST = -4
  47.   
  48.   # 戦闘カメラのフォーカス(移動先の焦点)を調整 [X軸, Y軸]
  49.   CAMERA_POSITION = [   0, -40]
  50.   
  51. #--------------------------------------------------------------------------
  52. # ● 戦闘背景セッティング  背景の座標調整や拡大率を設定します
  53. #--------------------------------------------------------------------------
  54.   # 床背景ファイル名…設定する床背景(Battlebacks1)画像ファイル名。
  55.   #               "全Battlebacks1"は指定のないBattlebacks1画像を一括設定する項目です
  56.   # 壁背景ファイル名…設定する壁背景(Battlebacks2)画像ファイル名。
  57.   #               "全Battlebacks2"は指定のないBattlebacks2画像を一括設定する項目です
  58.   # 座標調整…[X軸, Y軸]
  59.   # 拡大率……[横拡大率, 縦拡大率]
  60.   # シェイク可……シェイクアクションで揺れを許可するならtrue しないならfalse
  61.   # スイッチトリガー…戦闘開始時に自動でONにするゲームスイッチ番号。マイナスでサイドビュー専用スイッチがON
  62.   #            背景とバトルプログラムをセットで管理したい場合などに利用します
  63.   #            スイッチ操作をしないなら0
  64.   
  65.    FLOOR1_DATA = {
  66. #――床背景ファイル名―――         座標調整      拡大率    シェイク可  スイッチトリガー
  67.   "Sea_ex01"              => [ [   0, 120], [ 150, 150], false,   -1],
  68.   "全Battlebacks1"        => [ [   0, 120], [ 150, 150],  true,    0],
  69.   
  70.   }
  71.    FLOOR2_DATA = {
  72.   #――壁背景ファイル名―――        座標調整      拡大率    シェイク可  スイッチトリガー
  73.   "Ship_ex"               => [ [   0, 120], [ 150, 150],  true,    0],
  74.   "全Battlebacks2"        => [ [   0, 120], [ 150, 150],  true,    0],
  75.   

  76. }  
  77.   
  78. #==============================================================================
  79. # ■ アクション
  80. #------------------------------------------------------------------------------
  81. #  バトラーが戦闘中に行う単発行動です。組み合わせてフルアクションにできます
  82. #==============================================================================
  83. # ここのアクション名やフルアクション名は、かぶらないようにしてください
  84.   ACTION = {
  85.   
  86. #--------------------------------------------------------------------------
  87. # ● バトラーアニメ設定
  88. #--------------------------------------------------------------------------
  89.   # デフォルトのキャラチップは一つの画像ファイルに複数のキャラが配置されています
  90.   # キャラチップを利用する場合、追加画像はキャラの画像配置に合うようにしてください
  91.   # 一人のキャラで一つの画像を用いる(ファイルの頭に$がある)場合は特に問題ありません
  92.   
  93.   # インデックス…利用するバトラー画像ファイルの後ろに付くインデックス名。
  94.   #          サイドビューのバトラーはアクターの場合だとキャラクターファイル名を参照しますが
  95.   #          インデックスが付くと、キャラクターファイル名+インデックス名の画像ファイルを参照します
  96.   #          例)Actor1のバトラーがインデックス"_1"のアニメを実行する場合の参照ファイルはActor1_1
  97.   #          キャラチップを利用する場合のアニメのインデックスは""になります
  98.   #          アクターはCharactersフォルダ、エネミーはBattlersフォルダに画像を入れます
  99.   #
  100.   # 縦セル…画像ファイルのセルの縦位置。上から0~3と続きます。数に制限はありません
  101.   #       セル数の設定はバトラー設定で行ってください
  102.   # 横セル…画像ファイルのセルの横位置で、再生開始セル。左から0~3と続きます。
  103.   #       アニメはこの横セルの左から右へと再生します。セル数に制限はありません
  104.   # パターン… 0:セル固定 1:片道 2:往復 3:片道ループ 4:往復ループ
  105.   # 速度…アニメの更新速度。数字が低いほど早く更新します
  106.   # Z軸…手前に表示するならプラス。通常は画面下ほど手前に表示されます
  107.   # ウエイト…アニメパターンが最後まで再生されてから次の行動に移るならtrue
  108.   # 影…影グラフィックを表示するならtrue、しない場合はfalse
  109.   # 武器…武器を表示する場合は武器アクション名を。しない場合は""
  110.   #       武器アクションはいくつでも同時追加可能で、追加分は配列の後ろに入れていきます
  111.   
  112.   #―アクション名(待機系)―   判別   インデックス  縦セル 横セル パターン 速度  Z軸  ウエイト   影   武器
  113.   "待機"            => ["motion",   "",    1,   0,   4,   12,   0, true, true, "" ],
  114.   "待機固定WT"      => ["motion",   "",    1,   1,   0,   12,   0, true, true, "" ],
  115.   "待機固定"        => ["motion",   "",    1,   1,   0,   12,   0,false, true, "" ],
  116.   "倒れ"            => ["motion", "_1",    0,   0,   0,   12,   0, true,false, "" ],
  117.   "右向き"          => ["motion",   "",    2,   0,   4,   12,   0, true, true, "" ],
  118.   
  119.   #―アクション名(移動系)―    判別   ファイルNo 縦セル 横セル パターン 速度  Z軸 ウエイト   影    武器
  120.   "左向き移動"      => ["motion",   "",    1,   0,   4,    6,  10, true, true, "" ],
  121.   "右向き移動"      => ["motion",   "",    2,   0,   4,    6,  10, true, true, "" ],
  122.   
  123.   #―アクション名(ポーズ系)―   判別   ファイルNo 縦セル 横セル パターン 速度  Z軸 ウエイト   影    武器
  124.   "武器掲げ"        => ["motion",   "",    1,   0,   1,    2, 200,false, true, "掲げ" ],
  125.   
  126.   #―アクション名(攻撃系)―    判別   ファイルNo 縦セル 横セル パターン 速度  Z軸 ウエイト   影    武器
  127.   "武器振りR"       => ["motion",   "",    1,   0,   1,    2, 200,false, true, "縦振り"],
  128.   "武器振りL"       => ["motion",   "",    1,   0,   1,    2, 200,false, true, "縦振りL"],
  129.   "武器振りLR"      => ["motion",   "",    1,   0,   1,    2, 200,false, true, "縦振り","縦振りL"],
  130.   "盾防御"          => ["motion",   "",    1,   0,   1,    2, 200,false, true, "盾"],
  131.   "武器拳突き"      => ["motion",   "",    1,   0,   1,    2, 200,false, true, "拳突き" ],
  132.   "武器突き"        => ["motion",   "",    1,   0,   1,    2, 200,false, true, "突き" ],
  133.   "弓撃ち"          => ["motion",   "",    1,   0,   1,    2, 200,false, true, "弓"],
  134.   "铳撃ち"          => ["motion",   "",    1,   0,   1,    2, 200,false, true, "铳"],
  135.   
  136. #--------------------------------------------------------------------------
  137. # ● バトラー移動  エネミーのX軸移動は自動で逆計算になります
  138. #--------------------------------------------------------------------------
  139.   # 目標…移動する目標座標の参照先。数値が正で現在地、負で初期位置を参照します([0=自分]は負が設定できないので-7にしてください)
  140.   #       [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  141.   # X軸…対象から見たX座標
  142.   # Y軸…対象から見たY座標
  143.   # H軸…対象から見たH座標(地面からの高さ) nilにするとH軸を無視してXYのみの移動に
  144.   # 速度…1フレームで移動するピクセル数。数値をマイナスにすると時間指定になり、移動完了までの総フレーム数になります
  145.   # カーブ…移動時の軌道が正は上、負は下にカーブします。
  146.   # ジャンプ…ジャンプ放物線軌道。[ジャンプ開始から頂点までの軌道, 頂点から着地までの軌道]
  147.   # アニメ…その移動に利用するバトラーアニメのアクション名。

  148.   #――アクション名(システム系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  149.   "戦闘前の味方配置"    => ["move",-7, 180,   0,   0,  0,   0, [  0,  0], "左向き移動"],
  150.   "退場"                => ["move",-7, 180,   0,   0,  7,   0, [  0,  0], "右向き移動"],
  151.   "逃走途中"            => ["move",-7,  80,   0,   0,  7,   0, [  0,  0], "右向き移動"],
  152.   "コマンド入力移動"    => ["move",-7, -20,   0, nil,-10,   0, [  0,  0], "左向き移動"],
  153.   "ダメージのけぞり"    => ["move", 0,  20,   0, nil,-10,   0, [  0,  0], ""],
  154.   "ダメージのけぞり大"  => ["move", 0,  60,   0, nil,-10,   0, [  0,  0], ""],
  155.   
  156.   #――アクション名(リセット系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  157.   "座標リセット早"      => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "右向き移動"],
  158.   "座標リセット"        => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "右向き移動"],
  159.   "座標リセットカーブ"  => ["move",-7,   0,   0,   0,-20,  -2, [  0,  0], "右向き移動"],
  160.   "座標リセット左向き"  => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  161.   
  162.   #――アクション名(自身系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  163.   "一歩前移動"          => ["move", 0, -20,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  164.   "一歩後移動"          => ["move", 0,  20,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  165.   "一歩前ジャンプ"      => ["move", 0, -30,   0,   0,-10,   0, [ 20,-20], "左向き移動"],
  166.   "一歩後ジャンプ"      => ["move", 0,  30,   0,   0,-10,   0, [ 20,-20], "左向き移動"],
  167.   "勝利ジャンプ"        => ["move", 0,  10,   0,   0,-25,   0, [ 30,-30], "待機固定"],
  168.   "勝利ジャンプ武器"    => ["move", 0,   0,   0,   0,-15,   0, [ 20,  0], "武器掲げ"],
  169.   "勝利ジャンプ着地"    => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "武器振りR"],
  170.   "縦揺れ01"            => ["move", 0,   0,   0,  20, -2,   0, [  0,  0], ""],
  171.   "縦揺れ02"            => ["move", 0,   0,   0, -20, -2,   0, [  0,  0], ""],
  172.   
  173.   #――アクション名(目標系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  174.   "敵前移動"            => ["move", 1,  30,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  175.   "敵後移動"            => ["move", 1, -60,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  176.   "敵中移動早"          => ["move", 1,   0,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  177.   "叩き付け前ジャンプ"  => ["move",-1,   0,   0, 100,-20,   0, [ 40,-20], "武器掲げ"],
  178.   "叩き付け"            => ["move",-1,   0,   0,   0,-10,   0, [  0,  0], "武器振りR"],
  179.   
  180. #--------------------------------------------------------------------------
  181. # ● 武器アクション バトラーアニメや武器・アニメ飛ばしに利用するアクション
  182. #--------------------------------------------------------------------------
  183.   # タイプ…[0…アイコン利用]
  184.   #       [1…独自画像(画像名はバトラー設定の武器の項目で行います。参照先はCharactersフォルダ)]
  185.   #       [2…アニメセル(※2003仕様。バトラーと同じセル数でアニメします。画像名はバトラー設定の武器の項目で行います。参照先はCharactersフォルダ)]
  186.   # 移動…画像を動かす距離。[X軸, Y軸]
  187.   # 調整…微調整する画像の初期座標。[X軸, Y軸]
  188.   # 始度…動作前の最初の角度。反時計回りで0~360度。負が時計回り
  189.   # 終度…動作後の角度
  190.   # 原点…画像の原点。[0…中心] [1…左上] [2…右上] [3…左下] [4…右下] [5…バトラーと同じ(画像下と縦半分)]
  191.   # 反転…trueにすると画像を反転して表示
  192.   # 拡大…[X軸拡大率, Y軸拡大率] 小数点でも受け付けます
  193.   # Z軸…画像をキャラより手前に表示するならtrue
  194.   # 逆手…盾画像、もしくは二刀流時の左(項目だと下)の武器画像を表示
  195.   #       アイコンを利用しない場合、盾の画像はバトラー設定の盾の項目で行います
  196.   # 更新…-1でバトラーアニメ更新と同期化。独立させる場合は [更新時間間隔, 更新パターン数, ループするか]
  197.   #         
  198.   # インデックス…武器画像は装備している武器(盾)に設定された画像ファイルを参照しますが、
  199.   #          ここでインデックスを付けると、画像ファイル名+インデックス名の画像を参照します
  200.   #          一つの武器で複数のパターンがある画像を用いる場合に利用します
  201.   #          例) "縦振り"のインデックスは"" => 画像ファイル名"IconSet"を参照
  202.   #          例) "縦振り2"のインデックスは"_1" => 画像ファイル名"IconSet_1"を参照
  203.   #          参照フォルダはアイコン利用の場合はSystemフォルダ、独自画像とアニメセルはCharactersフォルダです
  204.   #         
  205.   # 画像…武器や盾に設定された画像ファイルやインデックスを無視して、武器画像を直接指定する場合は
  206.   #       ここに画像ファイル名を入れます。画像はCharactersフォルダを参照します
  207.   
  208.   #―アクション名―    判別 タイプ  移動     調整   始度 終度 原点 反転   拡大    Z軸   逆手   更新  インデックス  画像
  209.   "縦振り"    => ["wp", 0,[  6, 0],[ -4,-10], -45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  210.   "盾"        => ["wp", 0,[  0, 0],[ 12,  0],   0,   0,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  211.   "縦振りL"   => ["wp", 0,[  6, 0],[  0, -8],-135,  45,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  212.   "拳突き"    => ["wp", 0,[-20, 0],[  5,  5], -45, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  213.   "突き"      => ["wp", 0,[-25, 0],[ 25,-10],  45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  214.   "掲げ"      => ["wp", 0,[  6,-4],[ -4,-10],  90, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  215.   
  216.   #―2003仕様―   判別 タイプ  移動     調整   始度 終度 原点 反転   拡大    Z軸   逆手   更新  インデックス  画像
  217.   "弓"        => ["wp", 2,[  0, 0],[  0,  0],   0,   0,  5, false, [1,1],  true, false,   -1,   "",    ""],
  218.   "铳"        => ["wp", 2,[ 0, 0], [ 0, 0],     0,   0,  5, false, [1,1],  true, false,   -1,   "",    ""],
  219.   
  220.   # 武器飛ばし用  判別 タイプ  移動     調整   始度 終度 原点 反転   拡大    Z軸   二刀     更新      インデックス  画像
  221.   "矢"        => ["wp", 0,[  0, 0],[  0,  0],   0,  45,  0, false, [1,1],  true, false,[2,6,false],   "",    "arrow01"],
  222.   "回転"      => ["wp", 0,[  0, 0],[  0,  0],   0, 360,  0, false, [1,1],  true, false,[1,8, true],   "",    ""],
  223.   
  224. #--------------------------------------------------------------------------
  225. # ● 武器・アニメ飛ばし 武器や戦闘アニメを移動させます。飛び道具などに
  226. #--------------------------------------------------------------------------
  227.   # ID…データベースのアニメID。[移動させるアニメID, ヒット時のアニメID] 0はアニメ非表示、-1は武器のアニメを表示。
  228.   # 始…アニメ移動の開始位置。マイナスにすると、複数ターゲットでも一個のアニメだけ実行
  229.   #     [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  230.   # 後…アニメ移動の終了位置。マイナスにすると、複数ターゲットでも一個のアニメだけ実行
  231.   #     [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  232.   # 始調整…移動開始座標の微調整。[X軸, Y軸] エネミーはX軸が自動で逆計算に
  233.   # 後調整…移動終了座標の微調整。[X軸, Y軸] エネミーはX軸が自動で逆計算に
  234.   # 速度…1フレームに移動するX軸ピクセル数。マイナスにすると時間扱いになり、距離によって速度が変わります
  235.   # タイプ…移動後の処理。[0=消える(ミス時は自動で貫通に変化)] [1=貫通] [2=消える(ミス時も消える)]
  236.   # 軌道…移動の軌道。[開始から頂点までの軌道, 頂点から終了までの軌道]
  237.   # Z軸…アニメや武器をキャラより手前に表示するならtrue
  238.   # ウエイト…アクションが終わるまで次のアクションに移行しないならtrue [移動させるアニメのウエイト, ヒット時アニメのウエイト]
  239.   # ダメージ…目標到達時にダメージ計算を適用するならtrue
  240.   # ホーミング…移動するターゲットに対してホーミングするならtrue。しないならfalse
  241.   # カメラ…カメラのズームに合わせてアニメを拡大縮小するならtrue
  242.   # ループ…移動させるアニメの再生が終わった時、最初にループさせるならtrue
  243.   # 反転不可…いかなる場合でもアニメを反転させないならtrue
  244.   # 武器…武器アクション名を入れます。利用しないなら""
  245.   
  246.   #――アクション名――     判別     ID   始 後  始調整   後調整  速度 タイプ  軌道    Z軸       ウエイト      ダメージ  ホーミング カメラ    ループ 反転不可 武器
  247.   "矢発射WT"       => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [ true, true],  true,  true,  true, false, false,  "矢"],
  248.   "矢発射"         => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [false,false],  true,  true,  true, false, false,  "矢"],
  249.   "弹発射WT"       => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [0,0],   true, [ true, true],  true,  true,  true, false, false, "弹"],
  250.   "弹発射"         => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [0,0],   true, [false,false],  true,  true,  true, false, false, "弹"],
  251.   "水鉄砲発射"     => ["m_a",[69,69], 0, 1, [ 0, 0], [ 0, 0], 10,  0, [ 0, 0], true, [ true, true],  true,  true,  true,  true, false,  ""],
  252.   "武器投げ開始"   => ["m_a",[ 0,-1], 0, 1, [ 4,-6], [ 0, 0], 10,  2, [-3,-3], true, [ true,false],  true,  true,  true, false, false,  "回転"],
  253.   "武器投げ戻し"   => ["m_a",[ 0, 0], 1, 0, [ 0, 0], [ 4,-6], 10,  0, [ 3, 3], true, [ true,false], false,  true,  true, false, false,  "回転"],
  254.   
  255. #--------------------------------------------------------------------------
  256. # ● 戦闘アニメ データベースの戦闘アニメを表示します
  257. #--------------------------------------------------------------------------
  258.   # ID…アニメID。-1で武器に設定されたアニメに  -2は二刀流のもう片方の武器アニメに
  259.   #               -3でスキルに設定されたアニメに
  260.   # 対象…[0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット]
  261.   # ホーミング… 対象の座標移動にアニメが追尾するならtrue
  262.   # ウエイト…アニメ表示が終わるまで待つならtrue
  263.   # ダメージ…ダメージ計算を適用するならtrue
  264.   # カメラ…カメラのズームに合わせてアニメを拡大縮小するならtrue
  265.   # 反転不可…いかなる場合でもアニメを反転させないならtrue
  266.   # 反転…アニメを反転させるならtrue
  267.   # Z軸…アニメをキャラより手前に表示するならtrue
  268.   
  269.   #―アクション名(ダメージ系)―     判別     ID 対象  ホーミング ウエイト  ダメージ   カメラ 反転不可  反転    Z軸
  270.   "対象アニメ武器"      => ["anime",  -1,  1, false, false,  true,  true, false,  false,  true],
  271.   "対象アニメ武器WT"    => ["anime",  -1,  1, false,  true,  true,  true, false,  false,  true],
  272.   "対象アニメ武器LWT"   => ["anime",  -2,  1, false,  true,  true,  true, false,  false,  true],
  273.   "対象アニメ"          => ["anime",  -3,  1, false, false,  true,  true, false,  false,  true],
  274.   "対象アニメWT"        => ["anime",  -3,  1, false,  true,  true,  true, false,  false,  true],
  275.   
  276.   #――アクション名(自身系)――   判別     ID 対象  ホーミング ウエイト  ダメージ   カメラ 反転不可  反転    Z軸
  277.   "魔法詠唱中"          => ["anime", 113,  0,  true,  true, false,  true, false,  false,  true],
  278.   "特技待機中"          => ["anime", 114,  0,  true,  true, false,  true, false,  false,  true],
  279.   "魔法発動アニメ"      => ["anime", 115,  0, false,  true, false,  true, false,  false, false],
  280.   "特技発動アニメ"      => ["anime", 116,  0, false,  true, false,  true, false,  false, false],
  281.   
  282. #--------------------------------------------------------------------------
  283. # ● カメラワーク  画面のズームやスクロールを行います
  284. #--------------------------------------------------------------------------
  285.   # 対象…移動やズームの対象
  286.   #       [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  287.   # 調整座標…カメラ座標の最終地点微調整 [X軸(プラスで画面→), Y軸(プラスで画面↓)]
  288.   # 時間…カメラワークにかける時間
  289.   # ズーム…カメラのズーム率(%)。100でズームなし。
  290.   # ウエイト…カメラワークが終わるまで待つならtrue。待たないならfalse
  291.   
  292.   #――アクション名――      判別    対象  調整座標   ズーム  時間  ウエイト
  293.   "カメラリセット"=> ["camera",   6, [   0,   0], 100,  40, false],
  294.   "ズームイン"    => ["camera",   6, [   0, 100], 120,  40, false],
  295.   "ズームアウト"  => ["camera",   6, [   0,   0],  80,  40, false],
  296.   
  297. #--------------------------------------------------------------------------
  298. # ● 画面のシェイク  画面を揺らします。空中座標(H座標が0以上)のバトラーは揺れません
  299. #--------------------------------------------------------------------------
  300.   # 方向…揺れる方向 [横,縦] 数値が大きいほど揺れ幅は大きくなります
  301.   # 速度…揺れの速度。小さいほど早く揺れます
  302.   # 時間…揺れの続く時間。揺れ幅は時間と共に弱まっていきます
  303.   # ウエイト…シェイクが終わるまで待つならtrue。待たないならfalse
  304.   
  305.   #――アクション名――       判別      方向   速度  時間  ウエイト
  306.   "シェイク小"     => ["shake", [  0, 4],  2,    16, false],
  307.   "シェイク中"     => ["shake", [  0, 6],  3,    30, false],
  308.   "シェイク大"     => ["shake", [  0,12],  3,    40, false],
  309.   
  310. #--------------------------------------------------------------------------
  311. # ● 画面色調変更 背景やバトラーの色調を変更します
  312. #--------------------------------------------------------------------------
  313.   # 対象…色調変更の対象
  314.   #       [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット]
  315.   #       [6=背景] [7=自分+ターゲット] [8=自分以外] [9=自分+ターゲット以外] [10=全て]
  316.   # 色調レベル…[ R, G, B, アルファ(色の強さ), 変更時間, ※戻り]
  317.   #             ※戻り…変更完了してから元の色に戻す時間。戻さないなら0
  318.   # ウエイト…色調変更が終わるまで待つならtrue。待たないならfalse
  319.   
  320.   # 変更名                        判別    対象     R,   G,   B,アルファ  時間 戻り  ウエイト
  321.   "色調初期化"               => ["color",  10, [   0,   0,   0,   0,  30,   0], false],
  322.   "ピンチ色調"               => ["color",   0, [ 255,  50,  50, 100,  40,  40], false],
  323.   "毒色調"                   => ["color",   0, [ 170,  50, 255, 170,  30,  30], false],
  324.   "汎用状態異常色調"         => ["color",   0, [ 255, 255,  50, 170,  40,  40], false],
  325.   "背景のみ暗転"             => ["color",   6, [   0,   0,   0, 255,  30,   0], false],
  326.   "自分とターゲット以外暗転" => ["color",   9, [   0,   0,   0, 255,  30,   0], false],
  327.    
  328. #--------------------------------------------------------------------------
  329. # ● トランジション 画面を固定した後に実行するトランジションです
  330. #--------------------------------------------------------------------------
  331.   # 実行する前にアクション"画面固定"を実行し、画面を固定させてください
  332.   #
  333.   # 境界…境界の曖昧さ。値が大きいほど曖昧になります
  334.   # 時間…トランジションにかける時間。トランジション中はゲーム画面は固定されます
  335.   # トランジションファイル名…トランジション画像。Picturesフォルダに入れてください
  336.   
  337.   #―――アクション名―――   判別  境界  時間  トランジションファイル名
  338.   "サークル"         => ["ts",  40,   60,  "circle"],
  339.   
  340. #--------------------------------------------------------------------------
  341. # ● 残像  バトラーの移動に残像を残します
  342. #--------------------------------------------------------------------------
  343.   # 数…残像数。0は表示中の残像を消します。あまり多いと負荷が高くなります
  344.   # 間隔…残像の表示間隔。小さいほど狭い。単位は1フレーム
  345.   # 処理…残像の後処理。trueはフルアクション終了時に消え、falseは消えずにずっと表示
  346.   # 透明度…残像の透明度
  347.   
  348.   #――アクション名――      判別    数  間隔  処理  透明度
  349.   "残像ON"        => ["mirage",  4,   3,  true,  160],
  350.   "残像OFF"       => ["mirage",  0,   0,  true,    0],
  351.   
  352. #--------------------------------------------------------------------------
  353. # ● バトラー回転 画像を回転
  354. #--------------------------------------------------------------------------
  355.   # 回転しているバトラーのフルアクションが終了すると、回転角度はリセットされます
  356.   # 回転中の画像転送元原点は中心になります。反転と違い、武器アクションは反映されません
  357.   #
  358.   # 時間…回転にかける時間。0で即座に反映されます
  359.   # 始度…回転開始時の角度。0~360度を指定。正が反時計周り、負が時計周り
  360.   # 終度…回転終了時の角度。0~360度を指定。上記ともにエネミーは逆計算になります
  361.   # タイプ…回転終了後の処理。[0…回転リセット] [1…終了角度のまま] [2…ループ]

  362.   #――アクション名――     判別    時間  始度  終度  タイプ
  363.   "右1回転"        => ["angle",  12,    0, -360,   0],
  364.   "左1回転"        => ["angle",  12,    0,  360,   0],
  365.   
  366. #--------------------------------------------------------------------------
  367. # ● バトラー拡大縮小 画像を拡大縮小
  368. #--------------------------------------------------------------------------
  369.   # 拡大縮小しているバトラーのフルアクションが終了すると、拡大縮小はリセットされます
  370.   # 反転と違い、武器アクションは反映されません
  371.   #
  372.   # 時間…拡大縮小にかける時間。
  373.   # 開始サイズ…拡大縮小開始時のサイズ。小数点で入れてください。[X軸(横), Y軸(縦)]
  374.   # 終了サイズ…拡大縮小終了時のサイズ。小数点で入れてください。[X軸(横), Y軸(縦)]
  375.   # タイプ…拡大縮小終了後の処理。[0…サイズリセット] [1…終了サイズのまま] [2…ループ]

  376.   #――アクション名――     判別   時間    開始サイズ     終了サイズ  タイプ
  377.   "横縮み"         => ["zoom",  12,  [1.0, 1.0],  [0.5, 1.0],  0],
  378.   "縦縮み"         => ["zoom",  12,  [1.0, 1.0],  [1.0, 0.5],  0],

  379. #--------------------------------------------------------------------------
  380. # ● バトラー透明度操作 画像の透明度を変更
  381. #--------------------------------------------------------------------------
  382.   # 透明度操作しているバトラーのフルアクションが終了すると、透明度操作はリセットされます
  383.   #
  384.   # 時間…透明度変更にかける時間。
  385.   # 開始…変更開始時の透明度。0が完全に消えた状態、255が完全に不透明な状態
  386.   # 終了…変更終了時の透明度
  387.   # 影…影も同じ透明度操作をするならtrue
  388.   # 武器…武器も同じ透明度操作をするならtrue
  389.   # ループ…透明度変更が終了した後、操作を自動で逆転させ続けるならtrue
  390.   # ウエイト…操作終了まで次のアクションに移行せず待つならtrue
  391.   
  392.   #――アクション名――         判別    時間  開始  終了    影   武器   ループ  ウエイト
  393.   "逃走透明"         => ["opacity",   30,  255,   0,  true,  true, false, false],
  394.   "透明化"           => ["opacity",   60,  255,   0,  true,  true, false, false],
  395.   "透明化WT"         => ["opacity",   60,  255,   0,  true,  true, false,  true],
  396.   "透明化解除"       => ["opacity",   60,    0, 255,  true,  true, false, false],
  397.   "透明化解除WT"     => ["opacity",   60,    0, 255,  true,  true, false,  true],
  398.   
  399. #--------------------------------------------------------------------------
  400. # ● ふきだしアニメ イベントに使うふきだしアイコンを表示
  401. #--------------------------------------------------------------------------
  402.   # 種類…ふきだしの種類(縦位置)を0~9で指定
  403.   # 速度…更新速度。セルは2コマ目から再生されます
  404.   # サイズ…ふきだしのサイズ
  405.   
  406.   # ふきだし名         判別      種類 速度  サイズ
  407.   "状態異常/汎用"   => ["balloon",   6,  10,  0.6],
  408.   "状態異常/ピンチ" => ["balloon",   5,  10,  0.6],
  409.   "状態異常/睡眠"   => ["balloon",   9,  10,  0.6],
  410.   
  411. #--------------------------------------------------------------------------
  412. # ● ピクチャの表示  カットインなどに
  413. #--------------------------------------------------------------------------
  414.   # 番号…使用するピクチャの番号。ピクチャを管理するための番号です。何枚でも表示できます
  415.   #       フルアクションが終了すると自動で消去(Bitmap解放)されます
  416.   # 開始座標…移動開始位置。ピクチャの左上を原点とします。[X軸, Y軸]
  417.   #           既にピクチャがある場合、[]にすると開始座標はその場所になります
  418.   # 終了座標…移動終了位置。開始位置と同じ値にすると移動せず表示のみになります
  419.   #           プレーン使用の場合、開始と終了を[]にすると移動速度を維持します
  420.   # 時間…移動時間。0でピクチャを消去します
  421.   # Z軸…ピクチャのZ座標。100以上にするとウインドウより手前に表示されます
  422.   # 透明度…透明度設定。[開始時の透明度, 1フレームごとに加算される透明度]
  423.   # プレーン使用…プレーンクラス(画像がタイル状に並ぶ画像)を使用する場合の矩形。[X軸,Y軸]
  424.   #            プレーンを使用しない場合は[]
  425.   # BA反転…バックアタック時に画像反転とX座標移動を逆にするならtrue
  426.   #         プレーン使用時の画像はtrueでも反転せず、X座標移動のみ逆になります
  427.   # ピクチャファイル名…ピクチャフォルダ内のファイル名。

  428.   #―――アクション名―――    判別  番号  開始座標     終了座標   時間 Z軸   透明度    プレーン使用  BA反転 ピクチャファイル名
  429.   "カットインA1"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-1"],
  430.   "カットインA2"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-2"],
  431.   "カットインA3"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-2"],
  432.   "カットインA4"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-3"],
  433.   "カットイン終"    => ["pic",  0,          [], [ 600,   8],  30, 90, [255,  0],        [],  true, ""],
  434.   "カットイン背景始"=> ["pic",  1, [   0,   8], [ 100,   8],  10, 80, [  0, 10], [544,288],  true, "cutin_back"],
  435.   "カットイン背景終"=> ["pic",  1,          [],          [],  10, 80, [255, -7], [544,288],  true, ""],
  436.   "白フェードイン"  => ["pic",  0, [   0,   0], [   0,   0],  50,500, [  0,  6],        [], false, "white"],
  437.   "白フェードアウト"=> ["pic",  0, [   0,   0], [   0,   0],  50,500, [255, -6],        [], false, "white"],
  438.   
  439. #--------------------------------------------------------------------------
  440. # ● ステート操作
  441. #--------------------------------------------------------------------------
  442.   # 対象…[0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット]
  443.   # 拡張…上で設定した対象をさらに拡張します [0=拡張なし] [1=ランダム1体] [2=自分を除く]
  444.   # 操作…ステートを付与するなら"+" 解除するなら"-"
  445.   # ステートID…操作するステートのIDをまとめて配列に入れます
  446.   
  447.   # ステート付与名           判別  対象 拡張 操作 ステートID
  448.   "戦闘不能付与"         => ["sta",  0,   0, "+",  [1]],
  449.   
  450. #--------------------------------------------------------------------------
  451. # ● FPS(ゲーム全体のスピード)変更  アクションの細部チェック用
  452. #--------------------------------------------------------------------------
  453.   # ゲームスピード…60がデフォルトで、低くなるほどスローになります。 
  454.   
  455.   #――アクション名――   判別  ゲームスピード
  456.   "スロー再生"   => ["fps",  15],
  457.   "通常再生"     => ["fps",  60],
  458.   
  459. #--------------------------------------------------------------------------
  460. # ● バトラー画像変更  バトラー画像の参照先ファイルを変更します
  461. #--------------------------------------------------------------------------
  462.   # 維持…アクターの場合、戦闘後も変更を維持するならtrue
  463.   # インデックス…アクターの場合、歩行グラのどの矩形かを設定します
  464.   #          [0][1][2][3]
  465.   #          [4][5][6][7]
  466.   #
  467.   # ファイル名…変更する画像ファイル名。アクターはCharactersフォルダ、
  468.   #         エネミーはBattlersフォルダを参照します
  469.   # 顔グラ…アクターの場合、戦闘後の顔グラも変更するなら[顔グラインデックス, ファイル名]
  470.   #        変更しないなら[]
  471.   
  472.   #―――アクション名―――      判別     維持  インデックス  ファイル名        顔グラ
  473.   "オオカミに変身"    => ["change", false,    6,    "Animal", [0, "Actor4"]],

  474. #--------------------------------------------------------------------------
  475. # ● スキル派生  アクションを中断し、別のスキルに派生させます
  476. #--------------------------------------------------------------------------
  477.   # 習得…派生するスキルが未修得でも実行可能ならtrue
  478.   # コスト条件…派生するスキルのコストが足りなくても実行可能ならtrue
  479.   # スキルID…派生するスキルID
  480.   
  481.   #―――アクション名―――    判別   習得  コスト条件  スキルID
  482.   "多段攻撃に派生"   => ["der",  true,  false,   130],

  483. #--------------------------------------------------------------------------
  484. # ● サウンドの演奏  BGM・BGS・SEを鳴らします
  485. #--------------------------------------------------------------------------
  486.   # 種別…効果音は"se"  BGMは"bgm"  BGSは"bgs"
  487.   # ピッチ…ピッチ。50~150まで指定できます。100がデフォルトです
  488.   # 音量…ボリューム。50~150まで指定できます。100がデフォルトです
  489.   # ファイル名…再生するファイル名。""にするとBGM、BGSを変えずに各種設定可能。
  490.   
  491.   #――アクション名――     判別    種別  ピッチ  音量  ファイル名
  492.   "Bow1"          => ["sound",  "se", 100,  80, "Bow1"],
  493.   "Gun1"          => ["sound",  "se", 100,  80, "Bow1"],
  494.   
  495. #--------------------------------------------------------------------------
  496. # ● ムービーの再生  ogvファイルのムービーを再生します
  497. #--------------------------------------------------------------------------
  498.   # ファイル名…再生するムービーファイル名。Moviesフォルダを参照します
  499.   
  500.   #――アクション名――          判別     ファイル名
  501.   "死亡フラグムービー" => ["movie", "sample1"],
  502.   
  503. #--------------------------------------------------------------------------
  504. # ● ゲームスイッチ(サイドビュー専用スイッチ)の操作
  505. #--------------------------------------------------------------------------
  506.   # IDがプラスでゲームスイッチ、マイナスでサイドビュー専用スイッチの操作になります
  507.   #
  508.   # ON番号…ONにするスイッチIDをまとめて配列に入れます
  509.   # OFF番号…OFFにするスイッチIDをまとめて配列に入れます
  510.   #
  511.   #――アクション名――       判別     ON番号   OFF番号   
  512.   "スイッチNo1/ON"  => ["switch",  [ 1],   []],
  513.   "背景を宇宙に変更"=> ["switch",  [-4],   []],
  514.   "背景宇宙を解除"  => ["switch",    [],   [-4]],
  515.   "魔方陣ON"        => ["switch",  [-5],   []],
  516.   "魔方陣OFF"       => ["switch",    [],   [-5]],
  517.   
  518. #--------------------------------------------------------------------------
  519. # ● ゲーム変数の操作
  520. #--------------------------------------------------------------------------
  521.   # 変数No…何番の変数を操作するか
  522.   # 操作…[0=代入] [1=加算] [2=減算] [3=乗算] [4=除算] [5=剰余]
  523.   # オペランド…演算の対象となる数値を指定します。マイナスにすると、その数字の
  524.   #          絶対値の変数Noに格納されている数値が演算の対象となります
  525.   #
  526.   # ――アクション名――     判別     変数No  操作  オペランド
  527.   "変数No1/+1"     => ["variable",   1,     1,     1],
  528.   
  529. #--------------------------------------------------------------------------
  530. # ● 条件分岐 (ゲームスイッチ) 条件を設定し、アクションを分岐させます
  531. #--------------------------------------------------------------------------
  532.   # スイッチNo…何番のスイッチを参照するか。マイナスでサイドビュー専用スイッチを操作します
  533.   # 条件…ONならtrue、OFFならfalse
  534.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  535.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  536.   #
  537.   #―――アクション名―――       判別  スイッチNo  条件  分岐
  538.   "スイッチNo1=ONで実行" => ["n_1",   1,   true,   0],
  539.   
  540. #--------------------------------------------------------------------------
  541. # ● 条件分岐 (ゲーム変数)
  542. #--------------------------------------------------------------------------
  543.   # 変数No…何番の変数を参照するか
  544.   # 数値…条件となる数字を入れます。マイナスでその絶対値の変数に格納された数値を参照します
  545.   # 条件…参照した変数が条件の数字と比べて…[0=同値] [1=少ない] [2=多い]
  546.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  547.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  548.   #
  549.   #―――アクション名―――       判別  変数No 数値  条件  分岐
  550.   "変数No1=1で実行"      => ["n_2",   1,    1,    0,    0],

  551. #--------------------------------------------------------------------------
  552. # ● 条件分岐 (ステート)
  553. #--------------------------------------------------------------------------
  554.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  555.   # ステートID…何番のステートを条件にするか
  556.   # 条件…[0=付加している] [1=付加していない]
  557.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  558.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  559.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  560.   #
  561.   #―――アクション名―――       判別  対象  ステートID 条件  人数  分岐
  562.   "死亡確認"             => ["n_3",   1,    1,    0,     1,   1],

  563. #--------------------------------------------------------------------------
  564. # ● 条件分岐 (スキル)
  565. #--------------------------------------------------------------------------
  566.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  567.   # スキルID…何番のスキルを条件にするか
  568.   # 条件…[0=使える] [1=使えない]
  569.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  570.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  571.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  572.   #
  573.   #―――アクション名―――       判別  対象 スキルID  条件  人数  分岐
  574.   "強撃使用可限定"       => ["n_4",  0,   80,    0,    1,   0],

  575. #--------------------------------------------------------------------------
  576. # ● 条件分岐 (パラメータ)
  577. #--------------------------------------------------------------------------
  578.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  579.   # 種別…どのパラメータを条件にするか
  580.   #       [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP] [7=攻撃力]
  581.   #       [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=運]
  582.   #
  583.   # 数値…条件となる数字を入れます。マイナスで最大値からの割合%に(HP・MP・TP限定)
  584.   # 条件…参照したパラメータが条件の数字と比べて…[0=同じ] [1=少ない] [2=多い]
  585.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  586.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  587.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  588.   #
  589.   #―――アクション名―――       判別  対象  種別  数値  条件  人数  分岐
  590.   "HP50%以上で実行"      => ["n_5",  0,    4,  -50,    2,    1,   0],

  591. #--------------------------------------------------------------------------
  592. # ● 条件分岐 (装備)
  593. #--------------------------------------------------------------------------
  594.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  595.   # 種類…条件となる装備の種類 [0=武器] [1=防具]
  596.   # 装備ID…上の種類のアイテムID。IDは一括して配列[]に入れます。
  597.   #         マイナスで武器(防具)タイプを参照します
  598.   # 条件…[0=装備している] [1=装備していない]
  599.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  600.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  601.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  602.   #
  603.   #―――アクション名―――       判別  対象  種類     ID   条件  人数  分岐
  604.   "ハンドアクス限定"     => ["n_6",  0,    0,    [1],    0,    1,   0],
  605.   "拳限定"               => ["n_6",  0,    0,   [-2],    0,    1,   0],
  606.   "拳除外"               => ["n_6",  0,    0,   [-2],    0,    1,   1],
  607.   "弓限定"               => ["n_6",  0,    0,   [-6],    0,    1,   0],
  608.   "弓除外"               => ["n_6",  0,    0,   [-6],    0,    1,   1],
  609.   "铳限定"               => ["n_6",  0,    0,   [-10],   0,    1,   0],
  610.   "铳除外"               => ["n_6",  0,    0,   [-10],   0,    1,   1],
  611.   "拳弓除外"             => ["n_6",  0,    0,[-2,-6,-10],    0,    1,   1],
  612.   
  613. #--------------------------------------------------------------------------
  614. # ● 条件分岐 (スクリプト) 
  615. #--------------------------------------------------------------------------
  616.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  617.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  618.   # スクリプト…trueかfalseを返すスクリプトを入れます
  619.   #
  620.   #―――アクション名―――       判別   分岐  スクリプト
  621.   "50%の確率で実行"      => ["n_7",   0,  "rand(100) < 50"],
  622.   "アクター限定"         => ["n_7",   0,  "@battler.actor?"],
  623.   "アクターID1限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 1"],
  624.   "アクターID2限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 2"],
  625.   "アクターID6限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 6"],
  626.   "アクターID7限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 7"],
  627.   "エネミー限定"         => ["n_7",   0,  "[email protected]?"],
  628.   "エネミー中止"         => ["n_7",   2,  "[email protected]?"],
  629.   "二刀流限定"           => ["n_7",   0,  "@battler.dual_wield?"],
  630.   
  631. #--------------------------------------------------------------------------
  632. # ● セカンドターゲット操作
  633. #--------------------------------------------------------------------------
  634.   # セカンドターゲットとは、通常のターゲットとは別の独立したターゲット情報です
  635.   # 何も操作しない場合、通常ターゲットと同じ対象がセットされています
  636.   #
  637.   # 対象…[0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  638.   #
  639.   # INDEX…対象をパーティのインデックス(並び順)で絞込みます INDEX = [インデックス, 判別]
  640.   #        インデックス…パーティのインデックス数値
  641.   #        判別…数値の条件 [0=絞込まない] [1=そのインデックスが対象に] [2=そのインデックスを排除]
  642.   #
  643.   # ID…対象をアクター(エネミー)IDで絞込むならIDの数字を入れる。0で絞込まない
  644.   #     マイナスにするとその絶対値のIDが排除条件になります
  645.   #
  646.   # ステート…対象を現在付加しているステートIDで絞込むならステートIDの数字を入れる。0で絞込まない
  647.   #       マイナスにすると付加していないことが条件になります
  648.   #
  649.   # スキル…対象を使用可能なスキルIDで絞込むならスキルIDの数字を入れる。0で絞込まない
  650.   #      マイナスにすると使用不可能が条件になります
  651.   #
  652.   # パラメータ…対象のパラメータを条件に絞込みます パラメータ = [種別, 数値, 判別]
  653.   #         種別…[0=絞込まない] [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP]
  654.   #               [7=攻撃力] [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=運]
  655.   #         数値…種別で決定した数値を入れる。マイナスで最大値からの割合%に(HP・MP・TP限定)
  656.   #         判別…数値の条件 [0=同じ] [1=少ない] [2=多い]
  657.   #
  658.   # 装備…対象の装備物を条件に絞込みます。アクター限定 装備 = [種類, ID]
  659.   #       種類…[0=武器] [1=防具]
  660.   #       ID…装備種別の条件となるアイテムIDを配列[]に入れます。0で絞込まない
  661.   #           マイナスで武器(防具)タイプを参照します
  662.   #
  663.   # 拡張…上で設定した対象をさらに拡張します [0=拡張なし] [1=ランダム1体]  [2=自分を除く]
  664.   # 操作…[0=操作しない] [1=通常ターゲットをセカンドターゲットに変更]  [2=セカンドターゲット・通常ターゲットを初期化]
  665.   
  666.   #――アクション名――      判別 対象  INDEX  ID  ステート スキル   パラメータ      装備   拡張 操作
  667.   "自分以外味方全員"=> ["s_t", 3, [ 0, 0], 0,  0,   0, [ 0, 0, 0], [ 0,[0]],  2,   0],
  668.   "全域化"          => ["s_t", 4, [ 0, 0], 0, -1,   0, [ 0, 0, 0], [ 0,[0]],  0,   1],
  669.   
  670. #--------------------------------------------------------------------------
  671. # ● コモンイベントの呼び出し  
  672. #--------------------------------------------------------------------------
  673.   # ID…コモンイベントID
  674.   # ウエイト…イベント実行中はアクションをストップさせるならtrue
  675.   #
  676.   #―――アクション名―――    判別    ID   ウエイト
  677.   "コモンNo1"       => ["common",  1,  true],
  678.   
  679. #--------------------------------------------------------------------------
  680. # ● スクリプトの操作  
  681. #--------------------------------------------------------------------------
  682.   # スクリプトを実行。サンプルのp = 1 の部分にevalで実行するスクリプトを入れます
  683.   #
  684.   #―――アクション名―――  
  685.   "テストスクリプト" => ["p = 1 "],
  686.   
  687. #--------------------------------------------------------------------------
  688. # ● その他 設定項目なしでフルアクションに入れます
  689. #--------------------------------------------------------------------------
  690.   # 戦闘アニメ消去…表示中の戦闘アニメを消去します(飛ばしアニメは消去されません)
  691.   # 強制戦闘終了…戦闘を強制終了させます
  692.   # 画面固定…ゲーム画面を固定させます。トランジション前に入れます
  693.   # ダメージアニメ…スキルアニメを再生し、それが終わる直前にダメージをPOPさせます
  694.   # 反転…画像と武器アニメを反転します。再度反転させるかフルアクション終了で反転解除
  695.   # 武器消去…表示中の武器画像を消去します
  696.   # 武器消去解除…消去した武器画像を表示します
  697.   # 敵コラプス…崩御エフェクトを実行します。主に敵の戦闘不能に使用します
  698.   # コラプス禁止…対象のHPが0になった場合のコラプスを禁止します。連続攻撃開始時などに
  699.   # コラプス禁止解除…コラプス禁止を解除します。連続攻撃の終わりなどに。入れなくても行動終了時にコラプス許可になります
  700.   # 待機キャンセル…待機アクションを行わないようになります。戦闘イベントでの演出などに
  701.   # 待機キャンセル解除…待機キャンセルを解除し、待機アクションを行います
  702.   # 初期位置変更…元の座標(初期位置)を現在の座標に変更します
  703.   # 初期位置変更解除…初期位置変更で変更した座標を元に戻します
  704.   # 強制…この次にある行動をターゲットに強制させます(リアクション)
  705.   # 強制2…この次にある行動をセカンドターゲットに強制させます(リアクション)
  706.   # 次の行動者へ…戦闘行動が終了したとみなし、直後に次のキャラが行動開始します
  707.   # 個別開始…複数ターゲット攻撃を個別で処理する場合の、リピート行動開始の目印です
  708.   # 個別終了…複数ターゲット攻撃を個別で処理する場合の、リピート行動終了の目印です
  709.   # ループ開始…"ループ開始"と"ループ終了"の間のアクションを永遠に繰り返します
  710.   # ループ終了…"ループ開始"と"ループ終了"の間のアクションを永遠に繰り返します
  711.    
  712.   #―――アクション名―――       判別
  713.   "戦闘アニメ消去"    => ["anime_off"],
  714.   "強制戦闘終了"      => ["battle_end"],
  715.   "画面固定"          => ["graphics_freeze"],
  716.   "ダメージアニメ"    => ["damage_anime"],
  717.   "反転"              => ["mirror"],
  718.   "武器消去"          => ["weapon_off"],
  719.   "武器消去解除"      => ["weapon_on"],
  720.   "敵コラプス"        => ["normal_collapse"],
  721.   "コラプス禁止"      => ["no_collapse"],
  722.   "コラプス禁止解除"  => ["collapse"],
  723.   "待機キャンセル"    => ["non_motion"],
  724.   "待機キャンセル解除"=> ["non_motion_cancel"],
  725.   "初期位置変更"      => ["change_base_position"],
  726.   "初期位置変更解除"  => ["set_base_position"],
  727.   "強制"              => ["force_action"],
  728.   "強制2"             => ["force_action2"],
  729.   "次の行動者へ"      => ["next_battler"],
  730.   "個別開始"          => ["individual_start"],
  731.   "個別終了"          => ["individual_end"],
  732.   "ループ開始"        => ["loop_start"],
  733.   "ループ終了"        => ["loop_end"],
  734.   
  735. #--------------------------------------------------------------------------
  736. # ● ウエイト 次のアクションに行かずに待つ時間
  737. #--------------------------------------------------------------------------
  738.   # アクションで数値のみの場合、それがそのままウエイト時間となります。
  739.   # (例) "20" …次のアクションに行かずに20フレーム待つ
  740.   #
  741.   # 数値をマイナスにするとランダムウエイトとなり、その数値の0~絶対値の間で
  742.   # ランダムにウエイト時間が決定されます。
  743.   # (例) "-20" …ランダムで0~20フレーム待つ
  744.    
  745. #--------------------------------------------------------------------------
  746. # ● ショートカットコマンド
  747. #--------------------------------------------------------------------------
  748.   # 通常は設定したアクション名をフルアクション配列に入れて行動を作りますが
  749.   # アクション設定せず直接コマンドを記述して、作業を短縮できるものがあります
  750.   # 頻繁に利用するものはこのショートカットを使うと登録アクションが増えないのでお勧めです
  751.   #
  752.   # [戦闘アニメ]
  753.   # (例) "anime(20)" …データベース20番のアニメをターゲットに実行(ウエイトあり)
  754.   # (例) "anime(20,false)" …データベース20番のアニメをターゲットに実行(ウエイトなし)
  755.   # (例) "anime_me(20)" …データベース20番のアニメを自分に実行(ウエイトあり)
  756.   # (例) "anime_me(20,false)" …データベース20番のアニメを自分に実行(ウエイトなし)
  757.   #
  758.   # [ウエイト インデックスディレイ] ※パーティインデックスでウエイトにディレイを掛けます
  759.   # (例) "delay(12)"…インデックス1番のウエイトが0フレーム 2番のウエイトが12フレーム  3番のウエイトが24フレーム…
  760.   #
  761.   # [効果音(SE)]
  762.   # (例) "se('Bow1')" …ファイル名がBow1のSEを鳴らします
  763.   # (例) "se('Bow1',50)" …ファイル名がBow1のSEをピッチ50で鳴らします
  764.   #
  765.   # [ターゲットへアクション(フルアクション)を強制]
  766.   # (例) "target('ダメージのけぞり')" …ターゲットに"ダメージのけぞり"のアクションを強制します
  767.   # (例) "target2('被ダメージ')" …セカンドターゲットに"被ダメージ"のフルアクションを強制します
  768.    
  769.   }  
  770. #==============================================================================
  771. # ■ フルアクション
  772. #------------------------------------------------------------------------------
  773. #  アクションを組み合わせたもので、行動は左側から順番に行われます。
  774. #   フルアクションの中にフルアクションを入れることも可能で、アクションのパーツ化や
  775. #   条件分岐の次にフルアクションを置く等の使い方が便利です
  776. #==============================================================================
  777.   FULLACTION = {
  778.   
  779.   # ―――待機系―――
  780.   "通常待機"        => ["待機"],
  781.   "通常待機固定"    => ["待機固定WT"],
  782.   "ピンチ待機"      => ["状態異常/ピンチ","ピンチ色調","待機","待機"],
  783.   "防御待機"        => ["待機固定WT"],
  784.   "毒待機"          => ["状態異常/汎用","毒色調","待機","待機","エネミー限定","80"],
  785.   "睡眠待機"        => ["状態異常/睡眠","エネミー限定","40","エネミー中止","倒れ","倒れ"],
  786.   "汎用状態異常待機"=> ["状態異常/汎用","汎用状態異常色調","待機","待機","エネミー限定","80"],
  787.   "様子見"          => ["待機","60"],
  788.   "戦闘不能"        => ["倒れ"],
  789.   
  790.   # ――システム系――
  791.   "戦闘開始味方"    => ["戦闘前の味方配置","delay(4)","座標リセット左向き"],
  792.   "味方退場"        => ["退場"],
  793.   "逃走"            => ["対象アニメ","カメラリセット","delay(4)","退場"],
  794.   "敵逃走"          => ["対象アニメ","逃走透明","退場"],
  795.   "逃走失敗"        => ["カメラリセット","delay(4)","逃走途中","一歩後移動","座標リセット左向き"],
  796.   "コマンド入力"    => ["戦闘アニメ消去","コマンド入力移動"],
  797.   "コマンド入力終了"=> ["座標リセット早"],
  798.   "コマンド後防御"  => ["待機固定WT"],
  799.   "コマンド後魔法"  => ["待機固定","魔法詠唱中"],
  800.   "コマンド後特技"  => ["待機固定","特技待機中"],
  801.   "防御"            => ["対象アニメ","待機固定WT"],
  802.   "回避"            => ["アクター限定","右1回転","一歩後ジャンプ","10","座標リセット左向き"],
  803.   "盾ガード"        => ["se('Evasion2')","盾防御","60"],
  804.   "身代わり開始"    => ["敵中移動早","初期位置変更"],
  805.   "身代わり終了"    => ["初期位置変更解除","座標リセット左向き"],
  806.   "被身代わり開始"  => ["一歩後移動","一歩後移動","待機固定WT"],
  807.   "被身代わり終了"  => ["座標リセット左向き"],
  808.   "勝利ポーズ振り"  => ["戦闘アニメ消去","勝利ジャンプ武器","勝利ジャンプ着地","120"],
  809.   "勝利ポーズバク転"=> ["戦闘アニメ消去","右1回転","勝利ジャンプ","拳限定","武器拳突き","拳除外","武器振りR","120"],
  810.   "閃き"            => ["anime_me(119)","20"],
  811.   
  812.   # ―リアクション系―
  813.   "被ダメージ"      => ["ダメージのけぞり","座標リセット左向き"],
  814.   "被ダメージ大"    => ["シェイク中","ダメージのけぞり大","座標リセット左向き"],
  815.   "縦揺れ"          => ["縦揺れ01","縦揺れ02","縦揺れ01","縦揺れ02","縦揺れ01","縦揺れ02"],
  816.   
  817.   # ―ショートカット系(他のフルアクションから呼び出されるパーツ)―
  818.   "斬り"            => ["武器振りR","対象アニメ武器","10"],
  819.   "拳"              => ["武器拳突き","対象アニメ武器","10"],
  820.   "弓"              => ["Bow1","弓撃ち","矢発射","9"],
  821.   "铳"              => ["Gun1","铳撃ち","弹発射","9"],
  822.   "攻撃"            => ["拳限定","拳","弓限定","弓","拳弓除外","斬り"],
  823.   "通常攻撃始め"    => ["敵前移動","コラプス禁止","個別開始","二刀流限定","二刀左"],
  824.   "通常攻撃終わり"  => ["死亡確認","対象アニメ武器WT","個別終了","コラプス禁止解除","次の行動者へ","座標リセットカーブ"],
  825.   "二刀左"          => ["武器振りL","対象アニメ武器LWT"],
  826.   "特技発動"        => ["一歩前移動","武器掲げ","特技発動アニメ"],
  827.   "魔法発動"        => ["一歩前移動","武器掲げ","魔法発動アニメ"],
  828.   "カットイン"      => ["カットイン背景始","カットイン分岐","70","カットイン終","カットイン背景終","20"],
  829.   "カットイン分岐"  => ["アクターID1限定","カットインA1","アクターID2限定","カットインA2","アクターID6限定","カットインA3","アクターID7限定","カットインA4"],
  830.   "死亡フラグ動画"  => ["白フェードイン","50","死亡フラグムービー","白フェードアウト","50"],
  831.   "背景を宇宙に"    => ["ズームアウト","se('Blind',70)","背景のみ暗転","自分以外味方全員","強制2","透明化","透明化","40","背景を宇宙に変更","色調初期化"],
  832.   "背景宇宙解除"    => ["カメラリセット","背景のみ暗転","target2('透明化解除WT')","透明化解除","40","背景宇宙を解除","色調初期化"],
  833.   "魔方陣表示"      => ["se('Blind',70)","画面固定","魔方陣ON","サークル"],
  834.   "魔方陣消去"      => ["40","画面固定","魔方陣OFF","サークル"],
  835.   
  836.   # ――通常攻撃系――
  837.   "通常攻撃"        => ["通常攻撃始め","待機固定","通常攻撃終わり"],
  838.   "斬り攻撃"        => ["通常攻撃始め","死亡確認","武器振りR","通常攻撃終わり"],
  839.   "拳攻撃"          => ["通常攻撃始め","武器拳突き","通常攻撃終わり"],
  840.   "突き攻撃"        => ["通常攻撃始め","武器突き","通常攻撃終わり"],
  841.   "弓攻撃"          => ["一歩前移動","コラプス禁止","個別開始","Bow1","弓撃ち",
  842.                         "矢発射WT","個別終了","コラプス禁止解除","座標リセット"],
  843.   "铳攻撃"          => ["一歩前移動","コラプス禁止","個別開始","Bow1","铳撃ち",
  844.                         "弹発射WT","個別終了","コラプス禁止解除","座標リセット"],
  845.   
  846.   # ――スキル系―――
  847.   "汎用スキル"      => ["特技発動","武器振りR","ダメージアニメ","座標リセット"],
  848.   "汎用魔法"        => ["魔法発動","武器振りR","ダメージアニメ","座標リセット"],
  849.   
  850.   "水鉄砲"          => ["特技発動","武器振りR","水鉄砲発射","座標リセット"],
  851.   "武器投げ"        => ["特技発動","Bow1","武器振りR","6","待機固定","武器投げ開始","武器投げ戻し","座標リセット"],
  852.   "カットイン攻撃"  => ["特技発動","カットイン","攻撃","座標リセット"],
  853.   "ムービー攻撃"    => ["特技発動","待機固定","死亡フラグ動画","通常攻撃始め","武器振りR","通常攻撃終わり"],
  854.   "オオカミ変身"    => ["特技発動","anime(110,false)","オオカミに変身","待機固定","120","座標リセット"],
  855.   "5回攻撃"         => ["特技発動","コラプス禁止","弓除外","敵前移動","攻撃","攻撃","攻撃","攻撃","攻撃","コラプス禁止解除","座標リセット"],
  856.   "スキル派生"      => ["武器投げ","多段攻撃に派生","斬り攻撃"],
  857.   "背景変更攻撃"    => ["魔法発動","武器振りR","背景を宇宙に","ダメージアニメ","背景宇宙解除","座標リセット"],
  858.   "ピクチャ攻撃"    => ["魔法発動","魔方陣表示","武器振りR","anime(80,false)","60","シェイク大","対象アニメ","魔方陣消去","座標リセット"],
  859.   "暗転攻撃"        => ["特技発動","自分とターゲット以外暗転","se('Laser',150)",
  860.                         "残像ON","敵前移動","anime(35,false)","敵後移動","対象アニメ",
  861.                         "武器振りR","20","色調初期化","座標リセット","残像OFF"],
  862.   "空中攻撃"        => ["特技発動","Bow1","一歩前ジャンプ","叩き付け前ジャンプ",
  863.                         "待機固定","左1回転","10","anime(117,false)","叩き付け",
  864.                         "対象アニメ","シェイク中","強制","縦揺れ","20",
  865.                         "一歩後ジャンプ","座標リセット"],
  866.   
  867.   # ――アイテム系―――
  868.   "アイテム使用"     => ["敵前移動","待機固定","対象アニメWT","座標リセット左向き"],
  869.   
  870.   
  871.   
  872.   }
  873.   
  874.   
  875.   
  876. #==============================================================================
  877. # ■ バトルプログラム
  878. #------------------------------------------------------------------------------
  879. #  バトルシーンの演出を時間管理します
  880. #  制御はゲームスイッチ・サイドビュー専用スイッチで行います
  881. #==============================================================================
  882.   BATTLE_PROGRAM = {
  883.   
  884. #--------------------------------------------------------------------------
  885. # ● スイッチの制御  スイッチの時間操作で、演出をプログラムします
  886. #--------------------------------------------------------------------------
  887.   # スイッチ…プログラム実行合図となるゲームスイッチ番号。マイナスでサイドビュー専用スイッチ番号になります
  888.   #       OFFにすると、実行中のプログラムは中止されます
  889.   #       サイドビュー専用スイッチは戦闘終了時に初期化(全てOFFに)されます
  890.   #       イベントで戦闘前にサイドビュー専用スイッチを操作する場合、イベントスクリプトで
  891.   #       $sv_camera.switches[1] = true と入れてください
  892.   #       (1は操作するスイッチ番号、ONにするならtrue OFFにするならfalse)
  893.   #
  894.   # ON番号…ONにするするゲームスイッチ番号。マイナスでサイドビュー専用スイッチ番号になります
  895.   #         番号は一括して配列に入れます。
  896.   #         例…[1,2,-5] ゲームスイッチ1番2番とサイドビュー専用スイッチ5番がON
  897.   #
  898.   # OFF番号…OFFにするするゲームスイッチ番号。マイナスでサイドビュー専用スイッチ番号になります
  899.   #          操作しない場合は[]と入れます
  900.   #
  901.   # 時間…上のスイッチ操作を実行するまでの時間(単位は1フレーム)
  902.   #       例えば100とした場合、プログラム開始から100フレーム後にスイッチ操作が実行されます
  903.   #       [参考値] 30秒…1800 1分…3600 5分…18000 10分…36000 1時間…216000
  904.   #
  905.   # ランダム幅…時間に加算されるランダム幅。単位は1フレーム
  906.   #          例えば時間300、ランダム幅300だと最終的に300~600フレームの時間になります
  907.    
  908.   #――プログラム名――       判別   スイッチ   ON番号  OFF番号   時間  ランダム幅
  909.   "背景を砦に"       => ["switch",  -1,   [-2],      [],  1200,     0],
  910.   "背景を海に"       => ["switch",  -2,   [-3],      [],  2400,     0],
  911.   
  912. #--------------------------------------------------------------------------
  913. # ● SE/BGM/BGSの演奏  
  914. #--------------------------------------------------------------------------
  915.   # スイッチ…実行合図となるゲームスイッチ番号。マイナスはサイドビュー専用スイッチ。
  916.   #
  917.   # 種別…SEの操作なら"se"  BGMの操作なら"bgm"  BGSの操作なら"bgs"
  918.   #
  919.   # ピッチ…ピッチ。50~150まで指定できます。100がデフォルトです
  920.   # 音量…ボリューム。50~150まで指定できます。100がデフォルトです
  921.   # ファイル名…再生するファイル名。""にするとBGM、BGSを変えずに各種設定可能。
  922.    
  923.   #――プログラム名――      判別   スイッチ  種別  ピッチ  音量  ファイル名
  924.   "潮騒"            => ["sound",  -1, "bgs",  100,  80, "Sea"],
  925.   
  926. #--------------------------------------------------------------------------
  927. # ● 背景の制御  画像変更や自動スクロールを行います
  928. #--------------------------------------------------------------------------
  929.   # スイッチ…実行合図となるスイッチ番号
  930.   #
  931.   # No.…操作する背景のナンバー。1が床背景、2が壁背景(遠景)になります
  932.   #
  933.   # スクロール速度…背景の移動する速度。[X軸, Y軸]
  934.   #            単位は100フレームあたりに移動するピクセル数になります
  935.   #            高速で移動させる場合は、1000単位の数値が目安です
  936.   #
  937.   # BA反転…バックアタック時に背景のX座標スクロールを逆にするならtrue 画像は反転しません
  938.   #
  939.   # 画像…背景画像を変更する場合、ファイル名を入れます。変更しない場合は""
  940.   #       床背景はBattlebacks1フォルダ、壁背景はBattlebacks2フォルダから参照します
  941.   #       変更する背景設定は、変更前のものを引き継ぎます
  942.   #
  943.   # 繋ぎ画像…背景スクロール時、背景変更を自然に見せるための繋ぎ画像ファイル名
  944.   #           スクロール途中で背景変更が行われた場合、スクロールが終わってから変更が行われます
  945.   #           性質上、斜めスクロールには対応していません
  946.   #
  947.   # 割込み…この背景が表示されている時に別の背景制御が割り込んできた場合、
  948.   #         割込みを許可するならtrue(繋ぎ画像表示中はスクロールなしの背景だけが割込みます)
  949.   #         割込みを許可しないならfalse(別の背景制御は保留され、この背景が消えた時に変更されます)
  950.    
  951.   #――プログラム名――      判別   スイッチ No.   スクロール速度   BA反転   画像       繋ぎ画像     割込み
  952.   "遠景右移動"      => ["scroll", -1,  1, [  40,    0],  true,  "",                 "",  true],
  953.   "海背景3に変更"   => ["scroll", -2,  1, [ 120,    0],  true,  "Sea_ex03", "Sea_ex02",  true],
  954.   "海背景4に変更"   => ["scroll", -3,  1, [  40,    0],  true,  "Sea_ex01", "Sea_ex04",  true],
  955.   "宇宙に変更1"     => ["scroll", -4,  1, [   0,    0],  true,  "DarkSpace",        "", false],
  956.   "宇宙に変更2"     => ["scroll", -4,  2, [   0,    0],  true,  "DarkSpace",        "", false],
  957.   
  958. #--------------------------------------------------------------------------
  959. # ● 周期ピクチャ 周期的にタイル状のピクチャを操作します。風や巨大魔方陣などに
  960. #--------------------------------------------------------------------------
  961.   # スイッチ…実行合図となるゲームスイッチ番号
  962.   # No.…操作するピクチャの番号。ピクチャは何枚も表示できます
  963.   # 移動速度…100フレームあたりに移動するピクチャの速度。[X軸, Y軸] 0で背景スクロールと同期化
  964.   # 期間…このプログラムを行う期間。単位は1フレーム。0にすると時間無制限でループ
  965.   #
  966.   # 透明操作…ピクチャの透明度操作。[開始透明度, 100フレームあたりに加算する透明度]
  967.   #           透明度が255になると開始透明度まで戻り、それを繰り返します
  968.   # Z軸…ピクチャのZ座標。100以上にするとウインドウより手前に表示されます
  969.   # シェイク許可…シェイクアクションの揺れと連動するならtrue
  970.   # BA反転…バックアタック時にピクチャのX座標移動を逆にするならtrue 画像は反転しません
  971.   # ファイル名…ピクチャのファイル名。Picturesフォルダを参照します
  972.    
  973.   #――プログラム名――  判別   スイッチ  No.    移動速度   期間    透明操作   Z軸  シェイク許可 BA反転 ファイル名
  974.   "風"            => ["kpic", -1,  0, [  500,    0],    0, [ 255,   0],  90,   false,  true, "back_wind"],
  975.   "魔方陣"        => ["kpic", -5,  1, [    0,    0],    0, [ 255,   0],  90,    true,  true, "magic_square01"],
  976.   
  977. #--------------------------------------------------------------------------
  978. # ● 周期SE 周期的に効果音を鳴らします。雷鳴や潮騒などに
  979. #--------------------------------------------------------------------------
  980.   # スイッチ…実行合図となるゲームスイッチ番号
  981.   # 周期…効果音を鳴らす周期。単位は1フレーム。この間隔で効果音が定期的に鳴ります
  982.   # ランダム幅…周期に加算されるランダム幅。単位は1フレーム
  983.   #
  984.   # ピッチ…ピッチ。50~150まで指定できます。100がデフォルトです
  985.   # 音量…ボリューム。50~150まで指定できます。100がデフォルトです
  986.   # 開始実行…プログラム実行直後に周期を待たず鳴らすならtrue
  987.   # ファイル名…再生するファイル名。
  988.    
  989.   #――プログラム名――      判別   スイッチ 周期  ランダム幅  ピッチ 音量 開始実行 ファイル名
  990.   "カモメ"         => ["keep_se", -1,  400,    100,  150,  60,  false,  "Crow"],
  991.   "カモメ2"        => ["keep_se", -1,  300,    200,  140,  45,   true,  "Crow"],
  992.   
  993. #--------------------------------------------------------------------------
  994. # ● 周期シェイク 周期的に画面を揺らします
  995. #--------------------------------------------------------------------------
  996.   # スイッチ…実行合図となるゲームスイッチ番号。これがONになることで開始されます
  997.   # 周期…画面を揺らす周期。単位は1フレーム
  998.   # ランダム幅…周期に加算されるランダム幅。単位は1フレーム
  999.   #
  1000.   # 方向…揺れる方向 [横,縦] 数値が大きいほど揺れも大きくなります
  1001.   # 速度…揺れの速度。小さいほど早く揺れます
  1002.   # 時間…揺れの続く時間。揺れ幅は時間と共に少しずつ弱まっていきます
  1003.   # 開始実行…プログラム実行直後に周期を待たず揺らすならtrue
  1004.    
  1005.   #――プログラム名――     判別    スイッチ 周期 ランダム幅   方向   速度  時間 開始実行
  1006.   "船の揺れ"       => ["keep_sk", -1,  130,    0,  [  0, 4], 80,  120,  true],
  1007.   
  1008. #--------------------------------------------------------------------------
  1009. # ● 周期色調変更 周期的に画面の色調を変更します
  1010. #--------------------------------------------------------------------------
  1011.   # スイッチ…実行合図となるゲームスイッチ番号。これがONになることで開始されます
  1012.   # 周期…色調変更させる周期。単位は1フレーム
  1013.   # ランダム幅…周期に加算されるランダム幅。単位は1フレーム
  1014.   #
  1015.   # 対象…色調変更の対象 [0=背景] [1=敵全] [2=味方全] [3=敵味方全] [4=全て]
  1016.   # 色調レベル…[ R, G, B, アルファ(色の強さ), 変更時間, ※戻り]
  1017.   #             ※戻り…変更完了してから元の色に戻す時間。戻さないなら0
  1018.   # 開始実行…プログラム実行直後に周期を待たず色調変更するならtrue
  1019.   
  1020.   #――プログラム名――       判別   スイッチ 周期 ランダム幅  対象     R,   G,   B, アルファ  時間 戻り  開始実行
  1021.   "雷光"             => ["keep_c",  0,  300,  100,     4,  [ 255, 255, 255, 255,   8,   8],  true],
  1022.   "エマージェンシー" => ["keep_c",  0,  150,    0,     4,  [ 255,   0,   0, 100,  40,  40],  true],
  1023.    
  1024. }
  1025. #==============================================================================
  1026. # ■ カメラ設定
  1027. #------------------------------------------------------------------------------
  1028. #  アクションとは別にバトルシーンの各ポイントでカメラワークを行います
  1029. #  アクション名でカメラが動くため、名前は変えないようにしてください
  1030. #==============================================================================
  1031.   BATTLE_CAMERA = {
  1032. #--------------------------------------------------------------------------
  1033. # ● カメラワーク  画面のズームやスクロールを行います
  1034. #--------------------------------------------------------------------------
  1035.   # 対象…移動やズームの対象 [2=敵全] [3=味方全] [4=敵味方全] [6=画面]
  1036.   # 調整座標…カメラ座標の最終地点微調整 [X軸(プラスで画面→), Y軸(プラスで画面↓)]
  1037.   # 時間…カメラワークにかける時間
  1038.   # ズーム…カメラのズーム率(%)。100でズームなし。
  1039.   
  1040.   #――アクション名――       判別    対象  調整座標   ズーム  時間
  1041.   "ターン開始前"   => ["camera",   6, [  40,   0],  95, 40],
  1042.   "ターン開始後"   => ["camera",   6, [   0,   0], 100, 40],
  1043.   "戦闘終了時"     => ["camera",   6, [ 100,   0], 100, 50],
  1044.   

  1045. }  
  1046. end

  1047. SideViewバトラー設定
复制代码
#==============================================================================
# ■ SideViewバトラー設定 Ver100
#------------------------------------------------------------------------------
#  アクション設定で作ったアクションをバトラーに貼り付けたり
#  バトラーに関する設定を行います
#==============================================================================
class SideView
  #--------------------------------------------------------------------------
  # ● バトラーアニメ画像の横・縦セル数 = [ 横, 縦] アニメさせない場合は[1, 1]
  #--------------------------------------------------------------------------
  def max_pattern
    # バトラーIDで分岐
    case id
    when  1 # 1番のアクター
      return [ 3, 4]
    when -1 # 1番のエネミー(エネミーはIDをマイナスにすることで指定します)
      return [ 1, 1]
    else # 上のID以外を一括で設定
      return [ 3, 4] if id > 0 # 全アクター(IDがプラス)
      return [ 1, 1] if id < 0 # 全エネミー(IDがマイナス)
    end
    # 以降の設定でID分岐させる場合はこの記述を参考にしてください
  end
  #--------------------------------------------------------------------------
  # ● 影画像ファイル名  画像はCharactersフォルダに入れてください falseで影なし
  #--------------------------------------------------------------------------
  def shadow
    return "shadow01" if id > 0 # 全アクター
    return false      if id < 0 # 全エネミー
  end
  #--------------------------------------------------------------------------
  # ● バトラー画像反転設定 初期状態でバトラー画像を反転させるならtrue
  #--------------------------------------------------------------------------
  def graphic_mirror_flag
    return false if id > 0 # 全アクター
    return true  if id < 0 # 全エネミー
  end
  #--------------------------------------------------------------------------
  # ● バトラー画像参照先固定 バトラーアニメ設定のインデックス参照を必ず""にするならtrue
  #--------------------------------------------------------------------------
  def graphic_fix
    return false if id > 0 # 全アクター
    return true  if id < 0 # 全エネミー
  end
  #--------------------------------------------------------------------------
  # ● 通常待機
  #--------------------------------------------------------------------------
  def normal
    return "通常待機"   if id > 0 # 全アクター
    return "待機固定WT" if id < 0 # 全エネミー
    # フルアクションではなくアクションだけを貼り付けることもできます
  end
  #--------------------------------------------------------------------------
  # ● ピンチ待機  HPが1/4以下の状態で行う待機アクション
  #--------------------------------------------------------------------------
  def pinch
    return "ピンチ待機" if id > 0 # 全アクター
  end
  #--------------------------------------------------------------------------
  # ● ステートアクション  複数重なった場合、表示優先度の高いステートが優先されます
  #--------------------------------------------------------------------------
  def state(state_id)
    # ステートIDで分岐
    case state_id
    when 1
      return "戦闘不能"     if id > 0 # 全アクター
      return "敵コラプス"   if id < 0 # 全エネミー
    when 2
      return "毒待機"
    when 3,4
      return "汎用状態異常待機"
    when 9
      return "防御待機"
    end
  end
  #--------------------------------------------------------------------------
  # ● コマンド入力後のアクション
  #--------------------------------------------------------------------------
  def command
    # 選択したスキルIDで分岐
    case skill_id
    when 2
      return "コマンド後防御"
    end
    # 選択したスキルタイプで指定
    case skill_type
    when 1 # 特技
      return "コマンド後特技"
    when 2 # 魔法
      return "コマンド後魔法"
    end
  end
  #--------------------------------------------------------------------------
  # ● 戦闘開始アクション
  #--------------------------------------------------------------------------
  def first_action
    return "戦闘開始味方" if id > 0 # 全アクター
    return "待機固定WT"   if id < 0 # 全エネミー
  end
  #--------------------------------------------------------------------------
  # ● 勝利アクション
  #--------------------------------------------------------------------------
  def win
    case id
    when  2,7,10 # 2・7・10番のアクター
      return "勝利ポーズバク転"
    else # 上記以外
      return "勝利ポーズ振り"
    end
  end
  #--------------------------------------------------------------------------
  # ● 戦闘退場アクション  パーティの入れ替えが行われた際の退場アクション
  #--------------------------------------------------------------------------
  def remove_action
    return "味方退場"
  end
  #--------------------------------------------------------------------------
  # ● 逃走アクション
  #--------------------------------------------------------------------------
  def escape
    return "逃走"   if id > 0 # 全アクター
    return "敵逃走" if id < 0 # 全エネミー
  end
  #--------------------------------------------------------------------------
  # ● 逃走失敗アクション
  #--------------------------------------------------------------------------
  def escape_ng
    return "逃走失敗"
  end
  #--------------------------------------------------------------------------
  # ● コマンド入力開始動作
  #--------------------------------------------------------------------------
  def command_b
    return "コマンド入力"
  end
  #--------------------------------------------------------------------------
  # ● コマンド入力終了動作
  #--------------------------------------------------------------------------
  def command_a
    return "コマンド入力終了"
  end
  #--------------------------------------------------------------------------
  # ● 被ダメージアクション 
  #--------------------------------------------------------------------------
  def damage(attacker)
    # 受けた攻撃がクリティカルの場合
    if critical?
      return "被ダメージ大"
    # 回復の場合
    elsif recovery?
      # アクションを取らせたくない時はreturnのみを記述します
      return
    end
    # 受けたスキルIDで分岐
    case damage_skill_id
    when 1 # スキル1番の場合
      return "被ダメージ"
    when 136 # 特定のスキルにダメージアクションを取らせたくない時はここでreturnのみを記述します
      return
    end
    # 受けたアイテムIDで指定(回復の場合は既にアクションが決定されています)
    case damage_item_id
    when 1 # アイテム1番の場合
      return
    else
      # 上のアイテムID以外
      if damage_item_id != 0
        return
      end  
    end
    # ダメージが0の場合 (強化・弱体化魔法や防御、エネミーの逃走など)
    if damage_zero?
      return
    end
    # 上の設定に当てはまらない場合
    return "被ダメージ"
  end
  #--------------------------------------------------------------------------
  # ● 回避動作  被ダメージアクションと同じ分岐が可能です
  #--------------------------------------------------------------------------
  def evasion(attacker)
    return "盾ガード" if shield? # 盾を装備している場合
    return "回避"
  end
  #--------------------------------------------------------------------------
  # ● 相手の攻撃ミス時の動作  被ダメージアクションと同じ分岐が可能です
  #--------------------------------------------------------------------------
  def miss(attacker)
    return "盾ガード" if shield? # 盾を装備している場合
    return "回避"
  end
  #--------------------------------------------------------------------------
  # ● 武器アクション  通常攻撃のアクションを装備武器で指定します
  #                    エネミーは下のエネミー武器設定で持たせることができます
  #--------------------------------------------------------------------------
  def weapon_action
    # 武器IDで指定
    case weapon_id
    when 0 # 武器0番の場合(素手)
      return "通常攻撃"
    when 1 # 武器1番の場合
      return "斬り攻撃"
    end
    # 武器タイプで指定
    case weapon_type
    when 1 # 武器タイプ1番の場合
      return "斬り攻撃"
    when 4,5,7,8,9 # 複数まとめて指定する場合
      return "斬り攻撃"
    when 2
      return "拳攻撃"
    when 3
      return "突き攻撃"
    when 6
      return "弓攻撃"
    when 10
      return "铳攻撃"
    end
  end
  #--------------------------------------------------------------------------
  # ● エネミー右手武器 エネミーにも装備武器をID指定します
  #--------------------------------------------------------------------------
  def enemy_weapon1_id
    case id
    when -1 # 1番のエネミー(エネミーはIDをマイナスにすることで分岐させます)
      return 10 # 武器IDを指定。0番は素手扱いです
    else
      return 0
    end
  end
  #--------------------------------------------------------------------------
  # ● エネミー左手武器 エネミーにも二刀装備武器をID指定します
  #--------------------------------------------------------------------------
  def enemy_weapon2_id
    return 0
  end
  #--------------------------------------------------------------------------
  # ● エネミー盾 エネミーにも盾をID指定します 左手武器より優先されます
  #--------------------------------------------------------------------------
  def enemy_shield_id
    return 0
  end
  #--------------------------------------------------------------------------
  # ● 武器グラフィック指定 
  #--------------------------------------------------------------------------
  # 武器アクションのタイプ設定で [1:独自画像] [2:2003仕様]を選択した際の
  # 参照先の画像をここで指定します
  # return "001-Weapon01" ←対応する武器グラフィックのファイル名を入れてください
  #                         武器グラフィックはCharactersフォルダに入れてください
  # 特定の武器を非表示にしたい場合は空の画像を用意して、それを指定します
  def weapon_graphic(weapon_id, weapon_type)
    # 武器IDで指定
    case weapon_id
    when 1 # 武器1番の画像ファイル名
      return ""
    end
    # 武器タイプで指定
    case weapon_type
    when 6 # 武器タイプ6番の画像ファイル名
      return "bow01"
    when 10
      return "GUN"
    end
  end
  #--------------------------------------------------------------------------
  # ● 盾グラフィック指定 
  #--------------------------------------------------------------------------
  # 武器アクションのタイプ設定で [1:独自画像] [2:2003仕様]を選択し、さらに
  # 武器アクションの逆手設定をtrueにした場合の参照先の盾画像をここで指定します
  #
  # return "001-Shield01" ←対応する盾グラフィックのファイル名を入れてください
  #                         盾グラフィックはCharactersフォルダに入れてください
  def shield_graphic(weapon_id, shield_type)
    # 防具IDで指定
    case shield_id
    when 41 # 防具41番(バックラー)の画像ファイル名
      return ""
    end
    # 防具タイプで指定
    case shield_type
    when 5 # 防具タイプ5番(小型盾)の画像ファイル名
      return ""
    end
  end
  
  #--------------------------------------------------------------------------
  # ● スキルアクション
  #--------------------------------------------------------------------------
  def skill_action
    # スキルIDで指定
    case skill_id
    when 1 # スキル1番は通常攻撃なので、上の武器アクションを実行します
      return weapon_action
    when 2 # スキル2番は防御
      return "防御"
    when 3,4,5 # スキル3/4/5番は連続攻撃
      return weapon_action
    when 6 # スキル6番はエネミー逃走
      return escape
    when 7 # スキル7番は様子を見る
      return "様子見"
    when 128
      return "水鉄砲"
    when 129
      return "武器投げ"
    when 130
      return "5回攻撃"
    when 131
      return "カットイン攻撃"
    when 132
      return "ムービー攻撃"
    when 133
      return "オオカミ変身"
    when 134
      return "スキル派生"
    when 135
      return "暗転攻撃"
    when 136
      return "空中攻撃"
    end
    # スキル名で指定(データベースでIDを移動させても大丈夫なのでお勧めです)
    case skill_name
    when "背景変更サンプル"
      return "背景変更攻撃"
    when "ピクチャ攻撃サンプル"
      return "ピクチャ攻撃"
    end
    # スキルタイプで指定
    case skill_type
    when 1 # 特技
      return "汎用スキル"
    when 2 # 魔法
      return "汎用魔法"
    end
    # 上記以外
    return "汎用スキル"
  end
  #--------------------------------------------------------------------------
  # ● アイテムアクション
  #--------------------------------------------------------------------------
  def item_action
    case item_id # アイテムIDで指定
    when 1
      return "アイテム使用"
    else
      return "アイテム使用"
    end
  end
  #--------------------------------------------------------------------------
  # ● カウンタースキルID カウンター時のスキルIDを指定します
  #--------------------------------------------------------------------------
  # ※データベースで設定された複数回攻撃は反映されません
  def counter_skill_id
    return 1
  end
  #--------------------------------------------------------------------------
  # ● 魔法反射アニメID 魔法反射時のアニメIDを指定します
  #--------------------------------------------------------------------------
  def reflection_anime_id
    return 118
  end
  #--------------------------------------------------------------------------
  # ● 身代わり開始アクション
  #--------------------------------------------------------------------------
  def substitute_start_action
    return "身代わり開始"
  end
  #--------------------------------------------------------------------------
  # ● 身代わり終了アクション
  #--------------------------------------------------------------------------
  def substitute_end_action
    return "身代わり終了"
  end
  #--------------------------------------------------------------------------
  # ● 身代わりされた側のアクション開始
  #--------------------------------------------------------------------------
  def substitute_receiver_start_action
    return "被身代わり開始"
  end
  #--------------------------------------------------------------------------
  # ● 身代わりされた側のアクション終了
  #--------------------------------------------------------------------------
  def substitute_receiver_end_action
    return "被身代わり終了"
  end
  #--------------------------------------------------------------------------
  # ● エネミーのレベル  条件分岐などに利用するためのもので、パラメータは反映されません
  #--------------------------------------------------------------------------
  def level
    case id
    when -1 # 1番のエネミー
      return 0
    end
    return 0
  end
  
end


  1. Sideview
  2. [code]#==============================================================================
  3. # ■ Sideview Ver100
  4. #------------------------------------------------------------------------------
  5. #  サイドビューバトラーを管理するクラスです。
  6. #==============================================================================
  7. class SideView
  8.   #--------------------------------------------------------------------------
  9.   # ● 公開インスタンス変数 
  10.   #--------------------------------------------------------------------------
  11.   attr_accessor   :x                    # 画面X座標
  12.   attr_accessor   :y                    # 画面Y座標
  13.   attr_accessor   :z                    # 画面Z座標
  14.   attr_accessor   :h                    # 高さ座標
  15.   attr_accessor   :j                    # ジャンプ座標
  16.   attr_accessor   :c                    # カーブ座標
  17.   attr_accessor   :ox                   # 横原点
  18.   attr_accessor   :oy                   # 縦原点
  19.   attr_accessor   :oy_adjust            # 縦原点補正
  20.   attr_accessor   :angle                # 回転角度
  21.   attr_accessor   :zoom_x               # 横の拡大率
  22.   attr_accessor   :zoom_y               # 縦の拡大率
  23.   attr_accessor   :pattern_w            # セル横位置(矩形内)
  24.   attr_accessor   :pattern_h            # セル縦位置(矩形内)
  25.   attr_accessor   :sx                   # セル横位置(画像全体)
  26.   attr_accessor   :sy                   # セル縦位置(画像全体)
  27.   attr_accessor   :pattern_type         # セル更新タイプ
  28.   attr_accessor   :pattern_time         # セル更新間隔
  29.   attr_accessor   :graphic_name         # バトラー画像ファイル名
  30.   attr_accessor   :graphic_file_index   # バトラー画像ファイル名インデックス
  31.   attr_accessor   :graphic_index        # バトラー画像インデックス
  32.   attr_accessor   :cw                   # セル横矩形
  33.   attr_accessor   :ch                   # セル縦矩形
  34.   attr_accessor   :shadow_visible       # 影表示
  35.   attr_accessor   :weapon_visible       # 武器表示
  36.   
  37.   attr_accessor   :wait                 # 次の動作待ち時間
  38.   attr_accessor   :weapon_index         # 表示中の武器画像インデックス配列
  39.   attr_accessor   :weapon_end           # 武器アニメ終了フラグ
  40.   attr_accessor   :force_action         # 強制アクション
  41.   attr_accessor   :target_battler       # ターゲットバトラー情報
  42.   attr_accessor   :second_targets       # セカンドターゲット情報
  43.   attr_accessor   :m_a_targets          # アニメ飛ばしターゲット情報
  44.   attr_accessor   :individual_targets   # 個別処理ターゲットバトラー情報
  45.   attr_accessor   :effect_data          # エフェクトデータ
  46.   attr_accessor   :anime_id             # アニメID配列
  47.   attr_accessor   :anime_move_id        # 飛ばしアニメID配列
  48.   attr_accessor   :mirror               # 反転フラグ
  49.   attr_accessor   :opacity              # 透明度
  50.   attr_accessor   :opacity_data         # 透明度操作情報
  51.   attr_accessor   :set_damage           # バトルシーンでのダメージ処理
  52.   attr_accessor   :m_a_data             # アニメ飛ばし情報
  53.   attr_accessor   :m_a_starter          # アニメ飛ばし開始ターゲット情報
  54.   attr_accessor   :action_end           # バトルシーンでの行動終了
  55.   attr_accessor   :damage_anime_data    # ダメージ戦闘アニメのデータ
  56.   attr_accessor   :anime_no_mirror      # 戦闘アニメの反転禁止フラグ
  57.   attr_accessor   :anime_horming        # 戦闘アニメのホーミングフラグ
  58.   attr_accessor   :anime_camera_zoom    # 戦闘アニメがカメラに合わせて拡大縮小するか
  59.   attr_accessor   :anime_plus_z         # 戦闘アニメZ座標補正
  60.   attr_accessor   :derivation_skill_id  # スキル派生ID
  61.   attr_accessor   :immortal             # 不死身フラグ
  62.   attr_accessor   :mirage               # 残像データ
  63.   attr_accessor   :balloon_data         # ふきだしデータ
  64.   attr_accessor   :timing               # 別バトラーからのタイミングデータ
  65.   attr_accessor   :timing_targets       # タイミングデータを渡す別バトラー
  66.   attr_accessor   :color_set            # 色調変更データ
  67.   attr_accessor   :color                # 色調データ
  68.   attr_accessor   :change_up            # 画像変更フラグ
  69.   attr_accessor   :hit                  # 被攻撃回数
  70.   attr_accessor   :add_state            # 何度も付加ステートの表示を防ぐフラグ
  71.   attr_accessor   :counter_id           # カウンター時のスキルID
  72.   attr_accessor   :reflection_id        # 魔法反射時のアニメID
  73.   attr_accessor   :result_damage        # ターン終了時のHP変動データ
  74.   attr_accessor   :active               # 行動権
  75.   attr_accessor   :anime_off            # 戦闘アニメ消去
  76.   attr_accessor   :command_action       # コマンドアクションフラグ
  77.    
  78.   attr_accessor   :base_x               # 初期位置 X座標
  79.   attr_accessor   :base_y               # 初期位置 Y座標
  80.   attr_accessor   :base_h               # 初期位置 高さ座標
  81.   attr_accessor   :max_pattern_w        # セルの横分割数
  82.   attr_accessor   :max_pattern_h        # セルの縦分割数
  83.   
  84.   attr_reader     :collapse             # コラプスフラグ
  85.   attr_reader     :picture              # ピクチャ表示フラグ
  86.   #--------------------------------------------------------------------------
  87.   # ● オブジェクト初期化
  88.   #--------------------------------------------------------------------------
  89.   def initialize(battler)
  90.     [url=home.php?mod=space&uid=133701]@battler[/url] = battler
  91.     reset
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 初期化
  95.   #--------------------------------------------------------------------------
  96.   def reset
  97.     @x = 0
  98.     @y = 0
  99.     @z = 0
  100.     @h = 0
  101.     @j = 0
  102.     @c = 0
  103.     [url=home.php?mod=space&uid=271873]@jump[/url] = []
  104.     @curve = []
  105.     @ox = 0
  106.     @oy = 0
  107.     @oy_adjust = 0
  108.     @z_plus = 0
  109.     @move_time = 0
  110.     [url=home.php?mod=space&uid=124954]@Angle[/url] = 0
  111.     @angle_time = 0
  112.     @zoom_x = 1
  113.     @zoom_y = 1
  114.     @zoom_time = 0
  115.     @pattern_w = 0
  116.     @pattern_h = 0
  117.     @sx = 0
  118.     @sy = 0
  119.     @pattern_type = 0
  120.     @pattern_time = 0
  121.     @pattern_rest_time = 0
  122.     @graphic_name = ""
  123.     @graphic_file_index = ""
  124.     @graphic_index = 0
  125.     @cw = 0
  126.     @ch = 0
  127.     @shadow_visible = false
  128.     @weapon_visible = true
  129.    
  130.     [url=home.php?mod=space&uid=36110]@Wait[/url] = 0
  131.     @weapon_index = []
  132.     @weapon_end = true
  133.     @full_action = []
  134.     @action = []
  135.     @force_action = ""
  136.     @target_battler = []
  137.     @second_targets = []
  138.     @individual_targets = []
  139.     @m_a_targets = []
  140.     @effect_data = []
  141.     @anime_id = []
  142.     @anime_move_id = []
  143.     [url=home.php?mod=space&uid=316553]@opacity[/url] = 255
  144.     @opacity_data = []
  145.     @set_damage = false
  146.     @m_a_data = []
  147.     @m_a_starter = []
  148.     @action_end = false
  149.     @damage_anime_data = []
  150.     @anime_no_mirror = false
  151.     @anime_horming = false
  152.     @anime_camera_zoom = false
  153.     @anime_plus_z = true
  154.     @derivation_skill_id = 0
  155.     @immortal = false
  156.     @mirage = []
  157.     @play_data = []
  158.     @balloon_data = []
  159.     @picture = false
  160.     @timing = []
  161.     @timing_targets = []
  162.     @color_set = []
  163.     [url=home.php?mod=space&uid=10453]@color[/url] = []
  164.     @change_up = false
  165.     @non_motion = false
  166.     @graphics_change = false
  167.     @hit = []
  168.     @add_state = []
  169.     @collapse = false
  170.     @counter_id = 0
  171.     @reflection_id = 0
  172.     @result_damage = [0,0]
  173.     @active = false
  174.     @anime_off = false
  175.     @command_action = false
  176.    
  177.     @base_x = 0
  178.     @base_y = 0
  179.     @base_z = 0
  180.     @base_h = 0
  181.     @max_pattern_w = 0
  182.     @max_pattern_h = 0
  183.     @pattern_kind = 0
  184.     @pattern_count = 0
  185.     @move_time = 0
  186.     @mirror = false
  187.     @battler.set_graphic(@pre_change_data[0], @pre_change_data[1], @pre_change_data[2], @pre_change_data[3]) if @pre_change_data != nil
  188.     @pre_change_data = nil
  189.   end  
  190.   #--------------------------------------------------------------------------
  191.   # ● セットアップ
  192.   #--------------------------------------------------------------------------
  193.   def setup(bitmap_width, bitmap_height, first_action_flag)
  194.     reset if first_action_flag
  195.     set_data
  196.     set_base_position if !@graphics_change
  197.     set_graphics(bitmap_width, bitmap_height)
  198.     set_target
  199.     setup_graphics_change if @graphics_change
  200.     first_battler_anime_set if first_action_flag
  201.   end  
  202.   #--------------------------------------------------------------------------
  203.   # ● バトラーデータ取得
  204.   #--------------------------------------------------------------------------
  205.   def set_data
  206.     return if @battler == nil
  207.     if @battler.actor?
  208.       @graphic_name = @battler.character_name
  209.       @graphic_index = @battler.character_index
  210.     else
  211.       @graphic_name = @battler.battler_name
  212.       @graphic_index = 0
  213.     end
  214.     @max_pattern_w = max_pattern[0]
  215.     @max_pattern_h = max_pattern[1]
  216.   end
  217.   #--------------------------------------------------------------------------
  218.   # ● ベース座標をセット data = [X軸, Y軸, H軸]  moment_set…瞬間配置
  219.   #--------------------------------------------------------------------------
  220.   def set_base_position(moment_set = true)
  221.     mirroring_reset
  222.     if @battler.actor?
  223.       data = N03::ACTOR_POSITION[@battler.index].dup
  224.       @base_x = data[0] * 100 if !@mirror
  225.       @base_x = (Graphics.width - data[0]) * 100 if @mirror
  226.     else
  227.       data = [@battler.screen_x, @battler.screen_y, 0].dup
  228.       @base_x = data[0] * 100 if !$sv_camera.mirror
  229.       @base_x = (Graphics.width - data[0]) * 100 if $sv_camera.mirror
  230.     end
  231.     @base_y = data[1] * 100
  232.     @base_h = data[2] * 100
  233.     @base_z = @y
  234.     return if !moment_set
  235.     @x = @base_x
  236.     @y = @base_y
  237.     @z = @base_z
  238.   end
  239.   #--------------------------------------------------------------------------
  240.   # ● グラフィックデータ取得
  241.   #--------------------------------------------------------------------------
  242.   def set_graphics(bitmap_width, bitmap_height)
  243.     sign = @graphic_name[/^[\!\$]./]
  244.     if sign && sign.include?(')
  245.       @cw = bitmap_width / @max_pattern_w
  246.       @ch = bitmap_height / @max_pattern_h
  247.     elsif @max_pattern_w == 1 && @max_pattern_h == 1
  248.       @cw = bitmap_width
  249.       @ch = bitmap_height
  250.     else
  251.       @cw = bitmap_width / (@max_pattern_w * 4)
  252.       @ch = bitmap_height / (@max_pattern_h * 2)
  253.     end
  254.     @ox = @cw / 2
  255.     @oy = @ch
  256.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  257.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ● ターゲットをセット
  261.   #--------------------------------------------------------------------------
  262.   def set_target(target = nil)
  263.     @target_battler = target
  264.     @target_battler = [@battler] if target == nil
  265.     @second_targets = @target_battler
  266.   end
  267.   #--------------------------------------------------------------------------
  268.   # ● 画像変更用のセットアップ
  269.   #--------------------------------------------------------------------------
  270.   def setup_graphics_change
  271.     @graphics_change = false
  272.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  273.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  274.   end  
  275.   #--------------------------------------------------------------------------
  276.   # ● 戦闘開始時の待機アニメ画像データ取得
  277.   #--------------------------------------------------------------------------
  278.   def first_battler_anime_set
  279.     loop do
  280.       update
  281.       break if @action_data == nil
  282.       break if @action_data[0] == "motion"
  283.       break if @action_data[0] == "move" && @action_data[8] != ""
  284.       break if @full_action == []
  285.     end
  286.     start_action(first_action) if @battler.movable?
  287.   end
  288.   #--------------------------------------------------------------------------
  289.   # ● アクション開始
  290.   #--------------------------------------------------------------------------
  291.   def start_action(kind = nil)
  292.     return if @event_fix && $game_troop.interpreter.running?
  293.     # ウェイト中の場合キャンセル
  294.     return @wait -= 1 if @wait > 0 && kind == nil
  295.     action_setup(false) if kind != nil
  296.     set_action(kind)
  297.     @action = kind if @action == nil
  298.     # 行動配列が無い場合は行動終了処理へ移行
  299.     action_terminate if @action == nil
  300.     # 次のアクション決定
  301.     @action_data = N03::ACTION[@action]
  302.     next_action
  303.   end
  304.   #--------------------------------------------------------------------------
  305.   # ● 行動パラメータの初期化
  306.   #--------------------------------------------------------------------------
  307.   def action_setup(reset = true)
  308.     @event_fix = false
  309.     @set_damage = false
  310.     @action_end = false
  311.     @balloon_data = []
  312.     @loop_act = []
  313.     angle_reset if reset
  314.     zoom_reset if reset
  315.     opacity_reset if reset
  316.     @curve = []
  317.     @c = 0
  318.     convert_jump
  319.   end  
  320.   #--------------------------------------------------------------------------
  321.   # ● 行動終了処理
  322.   #--------------------------------------------------------------------------
  323.   def action_terminate
  324.     @mirage = [] if @mirage_end
  325.     mirroring_reset
  326.     @picture = false
  327.     @individual_targets = []
  328.     action_setup if @active
  329.     action_setup(false) if !@active
  330.     # 待機アクションへ移行
  331.     stand_by_action if !@non_motion
  332.     # 戦闘行動のアクティブ権を終了
  333.     next_battler
  334.   end  
  335.   #--------------------------------------------------------------------------
  336.   # ● 新しいアクション内容の決定
  337.   #--------------------------------------------------------------------------
  338.   def set_action(kind = nil)
  339.     full_act = N03::FULLACTION[kind]
  340.     @full_action = full_act.dup if full_act != nil
  341.     @action = @full_action.shift
  342.     # 参照したアクションがフルアクションであれば全体のアクションを統合
  343.     full_act2 = N03::FULLACTION[@action]
  344.     @full_action = full_act2.dup + @full_action if full_act2 != nil
  345.   end
  346.   #--------------------------------------------------------------------------
  347.   # ● 次のアクションへ
  348.   #--------------------------------------------------------------------------
  349.   def next_action
  350.     @wait = 0
  351.     # ショートカット確認
  352.     eval(@action) if @action != nil && @action_data == nil && N03::FULLACTION[@action] == nil
  353.     # ウエイト設定
  354.     @wait = @action.to_i if @wait == 0 && @action_data == nil
  355.     @wait = rand(@wait.abs + 1) if @wait < 0
  356.     # アクション開始
  357.     action_play
  358.   end
  359.   #--------------------------------------------------------------------------
  360.   # ● 待機アクションへ移行
  361.   #--------------------------------------------------------------------------
  362.   def stand_by_action
  363.     # 通常待機に
  364.     stand_by_act = normal
  365.     # HPが1/4でピンチアクションに
  366.     stand_by_act = pinch if @battler.hp <= @battler.mhp / 4
  367.     # ステートチェック
  368.     stand_by_act = state(@battler.states[0].id) if @battler.states[0] != nil && state(@battler.states[0].id) != nil
  369.     # コマンドチェック
  370.     stand_by_act = command if @command_action && command != nil
  371.     set_action(stand_by_act)
  372.     @action = stand_by_act if @action == nil
  373.   end
  374.   #--------------------------------------------------------------------------
  375.   # ● 強制アクション開始
  376.   #--------------------------------------------------------------------------
  377.   def start_force_action
  378.     return if @active
  379.     start_action(@force_action)
  380.     @force_action = ""
  381.   end  
  382.   #--------------------------------------------------------------------------
  383.   # ● アクション追加
  384.   #--------------------------------------------------------------------------
  385.   def add_action(kind)
  386.     @full_action.push(kind)
  387.   end  
  388.   #--------------------------------------------------------------------------
  389.   # ● アクションの挿入
  390.   #--------------------------------------------------------------------------
  391.   def unshift_action(kind)
  392.     @full_action.unshift(kind)
  393.   end  
  394.   #--------------------------------------------------------------------------
  395.   # ● フレーム更新
  396.   #--------------------------------------------------------------------------
  397.   def update
  398.     # アクション開始
  399.     start_action
  400.     # 強制アクション開始
  401.     start_force_action if @force_action != ""
  402.     # アニメパターン更新
  403.     update_pattern
  404.     # 移動更新
  405.     update_move
  406.     # 回転更新
  407.     update_angle if @angle_time != 0
  408.     # 拡大縮小更新
  409.     update_zoom if @zoom_time != 0
  410.     # 透明度更新
  411.     update_opacity if @opacity_data != []
  412.   end
  413.   #--------------------------------------------------------------------------
  414.   # ● アニメパターン更新
  415.   #--------------------------------------------------------------------------
  416.   def update_pattern
  417.     return @pattern_rest_time -= 1 if @pattern_rest_time != 0
  418.     return if @max_pattern_w == 1 && @max_pattern_h == 1
  419.     @pattern_rest_time = @pattern_time
  420.     # 再生開始・終了セル位置を取得
  421.     if @pattern_kind > 0 # 通常再生中
  422.       @pattern_start = 0
  423.       @pattern_end = @max_pattern_w - 1
  424.     elsif @pattern_kind < 0 # 逆転再生中
  425.       @pattern_start = @max_pattern_w - 1
  426.       @pattern_end = 0
  427.     end
  428.     # 片道の再生が終了
  429.     @pattern_count += 1 if @pattern_w == @pattern_end && @pattern_kind != 0
  430.     # ループ処理
  431.     case @pattern_type.abs
  432.     when  1,3 # 片道
  433.       @pattern_kind =  0 if @pattern_count != 0 && @pattern_type ==  1
  434.       @pattern_kind =  0 if @pattern_count != 0 && @pattern_type == -1
  435.       @pattern_kind =  1 if @pattern_count != 0 && @pattern_type ==  3
  436.       @pattern_kind = -1 if @pattern_count != 0 && @pattern_type == -3
  437.       @pattern_w = @pattern_start - @pattern_kind if @pattern_count != 0 && @pattern_type.abs == 3
  438.       @pattern_count = 0
  439.     when  2,4 # 往復
  440.       @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  2
  441.       @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -2
  442.       @pattern_kind =  0 if @pattern_count == 2 && @pattern_type ==  2
  443.       @pattern_kind =  0 if @pattern_count == 2 && @pattern_type == -2
  444.       @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  4
  445.       @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -4
  446.       @pattern_kind =  1 if @pattern_count == 2 && @pattern_type ==  4
  447.       @pattern_kind = -1 if @pattern_count == 2 && @pattern_type == -4
  448.       @pattern_count = 0 if @pattern_count == 2
  449.     end
  450.     # セル更新
  451.     @pattern_w += 1 * @pattern_kind
  452.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  453.   end
  454.   #--------------------------------------------------------------------------
  455.   # ● 移動の更新
  456.   #--------------------------------------------------------------------------
  457.   def update_move
  458.     @z = @y / 100 + @z_plus
  459.     return if @move_time == 0
  460.     target_position_set if @horming_move
  461.     @x = (@x * (@move_time - 1) + @target_x) / @move_time
  462.     @y = (@y * (@move_time - 1) + @target_y) / @move_time
  463.     @h = (@h * (@move_time - 1) + @target_h) / @move_time if @move_h != nil
  464.     @c += @curve[@move_time - 1] if @curve[@move_time - 1] != nil
  465.     @j += @jump[@move_time - 1] if @jump[@move_time - 1] != nil
  466.     @move_time -= 1
  467.     convert_jump if @move_time == 0
  468.   end
  469.   #--------------------------------------------------------------------------
  470.   # ● 移動目標の更新
  471.   #--------------------------------------------------------------------------
  472.   def target_position_set
  473.     target_position = N03.get_targets_position(@move_targets, @horming_move)
  474.     @target_x = target_position[0] + @move_x
  475.     @target_y = target_position[1] + @move_y
  476.     @target_h = target_position[2] + @move_h if @move_h != nil
  477.   end  
  478.   #--------------------------------------------------------------------------
  479.   # ● 回転更新
  480.   #--------------------------------------------------------------------------
  481.   def update_angle
  482.     @angle += @angling
  483.     @angle_time -= 1
  484.     return if @angle_time != 0
  485.     return angle_reset if @angle_data[4] == 0
  486.     angling(@angle_data) if @angle_data[4] == 2
  487.   end  
  488.   #--------------------------------------------------------------------------
  489.   # ● 拡大縮小更新
  490.   #--------------------------------------------------------------------------
  491.   def update_zoom
  492.     @zoom_x += @zooming_x
  493.     @zoom_y += @zooming_y
  494.     @zoom_time -= 1
  495.     return if @zoom_time != 0
  496.     return zoom_reset if @zoom_data[4] == 0
  497.     zooming(@zoom_data) if @zoom_data[4] == 2
  498.   end
  499.   #--------------------------------------------------------------------------
  500.   # ● 透明度更新
  501.   #--------------------------------------------------------------------------
  502.   def update_opacity
  503.     @opacity += @opacity_data[2]
  504.     @opacity_data[0] -= 1
  505.     return if @opacity_data[0] != 0
  506.     return if !@opacity_data[5]
  507.     @opacity_data[2] *= -1
  508.     @opacity_data[0] = @opacity_data[1]
  509.   end
  510.   #--------------------------------------------------------------------------
  511.   # ● アクション実行
  512.   #--------------------------------------------------------------------------
  513.   def action_play
  514.     return if @action_data == nil
  515.     action = @action_data[0]
  516.     # バトラー反転の場合
  517.     return mirroring                    if action == "mirror"
  518.     # 残像の場合
  519.     return mirage_set                   if action == "mirage"
  520.     # 回転の場合  
  521.     return angling                      if action == "angle"
  522.     # 拡大縮小の場合  
  523.     return zooming                      if action == "zoom"
  524.     # 透明度操作の場合  
  525.     return set_opacity                  if action == "opacity"
  526.     # バトラーアニメの場合
  527.     return battler_anime                if action == "motion"
  528.     # 移動の場合
  529.     return move                         if action == "move"
  530.     # 武器アニメの場合
  531.     return weapon_anime([@action_data]) if action == "wp"
  532.     # アニメ飛ばしの場合
  533.     return move_anime                   if action == "m_a"
  534.     # 戦闘シーン通信の場合(コラプス)
  535.     return set_play_data                if action == "collapse" or action == "no_collapse"
  536.     # データベース戦闘アニメ表示の場合  
  537.     return battle_anime                 if action == "anime"
  538.     # カメラワークの場合
  539.     return camera                       if action == "camera"
  540.     # 画面のシェイクの場合
  541.     return shake                        if action == "shake"
  542.     # 画面色調変更の場合
  543.     return color_effect                 if action == "color"
  544.     # トランジションの場合
  545.     return transition                   if action == "ts"
  546.     # ふきだしアニメ表示の場合  
  547.     return balloon_anime                if action == "balloon"
  548.     # ピクチャ表示の場合
  549.     return picture_set                  if action == "pic"
  550.     # ステート操作の場合
  551.     return state_set                    if action == "sta"
  552.     # FPS変更の場合
  553.     return fps                          if action == "fps"
  554.     # バトラー画像変更の場合  
  555.     return graphics_change              if action == "change"
  556.     # スキル派生の場合  
  557.     return derivating_skill             if action == "der"
  558.     # BGM/BGS/SE演奏の場合  
  559.     return sound                        if action == "sound"
  560.     # ムービー再生の場合  
  561.     return movie                        if action == "movie"
  562.     # ゲームスイッチ操作の場合  
  563.     return switches                     if action == "switch"
  564.     # ゲーム変数操作の場合  
  565.     return variable                     if action == "variable"
  566.     # 条件分岐(ゲームスイッチ)の場合
  567.     return nece_1                       if action == "n_1"
  568.     # 条件分岐(ゲーム変数)の場合
  569.     return nece_2                       if action == "n_2"
  570.     # 条件分岐(ステート)の場合
  571.     return nece_3                       if action == "n_3"
  572.     # 条件分岐(スキル)の場合
  573.     return nece_4                       if action == "n_4"
  574.     # 条件分岐(パラメータ)の場合
  575.     return nece_5                       if action == "n_5"
  576.     # 条件分岐(装備)の場合
  577.     return nece_6                       if action == "n_6"
  578.     # 条件分岐(スクリプト)の場合
  579.     return nece_7                       if action == "n_7"
  580.     # セカンドターゲット操作の場合  
  581.     return second_targets_set           if action == "s_t"
  582.     # コモンイベント呼び出しの場合  
  583.     return call_common_event            if action == "common"
  584.     # 戦闘アニメ消去の場合  
  585.     return @anime_off = true            if action == "anime_off"
  586.     # 強制戦闘終了の場合  
  587.     return BattleManager.process_abort  if action == "battle_end"
  588.     # 画面固定の場合  
  589.     return Graphics.freeze              if action == "graphics_freeze"
  590.     # ダメージアニメの場合  
  591.     return damage_anime                 if action == "damage_anime"
  592.     # 武器消去の場合  
  593.     return @weapon_visible = false      if action == "weapon_off"
  594.     # 武器消去解除の場合  
  595.     return @weapon_visible = true       if action == "weapon_on"
  596.     # 待機キャンセルの場合
  597.     return @non_motion = true           if action == "non_motion"
  598.     # 待機キャンセル解除の場合
  599.     return @non_motion = false          if action == "non_motion_cancel"
  600.     # 初期位置変更の場合
  601.     return change_base_position         if action == "change_base_position"
  602.     # 初期位置変更解除の場合
  603.     return set_base_position(false)     if action == "set_base_position"
  604.     # 強制アクションの場合  
  605.     return force_act                    if action == "force_action"
  606.     # 強制アクションの場合 (セカンドターゲット)
  607.     return force_act2                   if action == "force_action2"
  608.     # 個別開始の場合
  609.     return individual_start             if action == "individual_start"
  610.     # 個別終了の場合
  611.     return individual_end               if action == "individual_end"
  612.     # ループ開始の場合
  613.     return loop_start                   if action == "loop_start"
  614.     # ループ終了の場合
  615.     return loop_end                     if action == "loop_end"
  616.     # 自分のみ更新の場合
  617.     return only_action_on               if action == "only_action_on"
  618.     # 自分のみ更新解除の場合
  619.     return only_action_off              if action == "only_action_off"
  620.     # 次の行動者へ移行の場合
  621.     return next_battler                 if action == "next_battler"
  622.     # 画像変更フラグの場合
  623.     return set_change                   if action == "set_change"
  624.     # スクリプト操作の場合   
  625.     return eval(@action_data[0])
  626.   end
  627.   #--------------------------------------------------------------------------
  628.   # ● バトラー反転実行
  629.   #--------------------------------------------------------------------------
  630.   def mirroring
  631.     @mirror = !@mirror
  632.   end  
  633.   #--------------------------------------------------------------------------
  634.   # ● 反転初期化
  635.   #--------------------------------------------------------------------------
  636.   def mirroring_reset
  637.     @mirror = false
  638.     mirroring if [email protected]? && N03::ENEMY_MIRROR
  639.     mirroring if $sv_camera.mirror
  640.   end  
  641.   #--------------------------------------------------------------------------
  642.   # ● 残像実行
  643.   #--------------------------------------------------------------------------
  644.   def mirage_set
  645.     @mirage = @action_data.dup
  646.     @mirage_end = @mirage[3]
  647.     @mirage = [] if @mirage[1] == 0
  648.   end  
  649.   #--------------------------------------------------------------------------
  650.   # ● 回転実行
  651.   #--------------------------------------------------------------------------
  652.   def angling(data = @action_data)
  653.     @angle_data = data.dup
  654.     @oy = @ch / 2
  655.     @oy_adjust = @ch * 50
  656.     @angle_time = data[1]
  657.     start_angle = data[2] * N03.mirror_num(@mirror)
  658.     end_angle = data[3] * N03.mirror_num(@mirror)
  659.     # 時間が0以下なら即座に最終角度へ
  660.     @angle_time = 1 if @angle_time <= 0
  661.     # 回転時間から1フレームあたりの角度を出す
  662.     @angling = (end_angle - start_angle) / @angle_time
  663.     # 割り切れない余りを初期角度に
  664.     @angle = (end_angle - start_angle) % @angle_time + start_angle
  665.   end
  666.   #--------------------------------------------------------------------------
  667.   # ● 回転初期化
  668.   #--------------------------------------------------------------------------
  669.   def angle_reset
  670.     @oy = @ch
  671.     @angle = @angle_time = @oy_adjust = 0
  672.   end  
  673.   #--------------------------------------------------------------------------
  674.   # ● 拡大縮小実行
  675.   #--------------------------------------------------------------------------
  676.   def zooming(data = @action_data)
  677.     @zoom_data = data.dup
  678.     @zoom_time = data[1]
  679.     start_zoom_x = data[2][0]
  680.     start_zoom_y = data[2][1]
  681.     end_zoom_x = data[3][0]
  682.     end_zoom_y = data[3][1]
  683.     # 時間が0以下なら即座に最終サイズへ
  684.     @zoom_time = 1 if @zoom_time <= 0
  685.     # 拡大縮小時間から1フレームあたりの拡大縮小率を出す
  686.     @zooming_x = (end_zoom_x - start_zoom_x) / @zoom_time
  687.     @zooming_y = (end_zoom_y - start_zoom_y) / @zoom_time
  688.     # 開始サイズに
  689.     @zoom_x = start_zoom_x
  690.     @zoom_y = start_zoom_y
  691.   end  
  692.   #--------------------------------------------------------------------------
  693.   # ● 拡大縮小初期化
  694.   #--------------------------------------------------------------------------
  695.   def zoom_reset
  696.     @zoom_x = @zoom_y = 1
  697.     @zoom_time = 0
  698.   end  
  699.   #--------------------------------------------------------------------------
  700.   # ● バトラー透明度操作
  701.   #--------------------------------------------------------------------------
  702.   def set_opacity
  703.     data = @action_data.dup
  704.     @opacity = data[2]
  705.     opacity_move = (data[3] - data[2])/ data[1]
  706.     @opacity_data = [data[1], data[1], opacity_move, data[4], data[5], data[6]]
  707.     @wait = data[1] if data[7]
  708.     @wait *= 2 if data[6] && data[7]
  709.   end
  710.   #--------------------------------------------------------------------------
  711.   # ● 透明度操作初期化
  712.   #--------------------------------------------------------------------------
  713.   def opacity_reset
  714.     @opacity = 255
  715.     @opacity = 0 if @battler.hidden?
  716.     @opacity_data = []
  717.   end
  718.   #--------------------------------------------------------------------------
  719.   # ● バトラーアニメ実行
  720.   #--------------------------------------------------------------------------
  721.   def battler_anime(anime_data = nil)
  722.     anime_data = @action_data.dup if anime_data == nil
  723.     @graphic_file_index = anime_data[1] if !graphic_fix
  724.     @pattern_h = anime_data[2]
  725.     @pattern_w = anime_data[3]
  726.     @pattern_h = 0 if @max_pattern_w == 1
  727.     @pattern_w = 0 if @max_pattern_h == 1
  728.     @pattern_type = anime_data[4]
  729.     @pattern_time = anime_data[5]
  730.     @pattern_rest_time = anime_data[5]
  731.     @pattern_count = 0
  732.     @pattern_kind = 1
  733.     @pattern_kind = -1 if @pattern_type < 0
  734.     @pattern_kind = 0 if @pattern_type == 0
  735.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  736.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  737.     @z_plus = anime_data[6]
  738.     @wait = set_anime_wait if anime_data[7]
  739.     @shadow_visible = anime_data[8]
  740.     weapon_anime(anime_data)
  741.   end
  742.   #--------------------------------------------------------------------------
  743.   # ● アニメウエイト計算
  744.   #--------------------------------------------------------------------------
  745.   def set_anime_wait
  746.     if @pattern_type > 0
  747.       pattern_time_a = @max_pattern_w - @pattern_w.abs
  748.     elsif @pattern_type < 0
  749.       pattern_time_a = @pattern_w.abs + 1
  750.     else
  751.       return @pattern_time if @pattern_type == 0
  752.     end
  753.     case @pattern_type
  754.     when 1,-1, 3,-3
  755.       return pattern_time_a * @pattern_time
  756.     when 2,-2, 4,-4
  757.       return pattern_time_a * @pattern_time + (@max_pattern_w - 2) * @pattern_time
  758.     end
  759.   end  
  760.   #--------------------------------------------------------------------------
  761.   # ● 移動実行
  762.   #--------------------------------------------------------------------------
  763.   def move
  764.     @move_targets = N03.get_targets(@action_data[1].abs, @battler)
  765.     return if @move_targets == []
  766.     @move_targets = [@battler] if @action_data[1].abs == 7
  767.     @move_x = @action_data[2] * 100 * N03.mirror_num(@mirror)
  768.     @move_y = @action_data[3] * 100
  769.     @move_h = @action_data[4] * 100 if @action_data[4] != nil
  770.     @move_h = nil if @action_data[4] == nil
  771.     battler_anime(N03::ACTION[@action_data[8]].dup) if N03::ACTION[@action_data[8]] != nil
  772.     @horming_move = true
  773.     @horming_move = false if @action_data[1] < 0 or @action_data[1].abs == 7
  774.     target_position_set
  775.     target_position = [@target_x, @target_y, @target_z]
  776.     distanse_move = @action_data[5] > 0
  777.     @move_time = N03.distanse_calculation(@action_data[5].abs, target_position, [@x, @y, @z], distanse_move)
  778.     @wait = @move_time
  779.     curve
  780.     jump
  781.     @move_time = 1 if @move_time == 0
  782.     @horming_move = false if !@move_targets or @move_targets.include?(@battler)
  783.     update_move if @move_time == 1
  784.   end  
  785.   #--------------------------------------------------------------------------
  786.   # ● カーブ実行
  787.   #--------------------------------------------------------------------------
  788.   def curve
  789.     @c = 0
  790.     return if @action_data[6] == 0
  791.     @curve = N03.parabola([@action_data[6], -@action_data[6]], @move_time, 100, 4)
  792.   end  
  793.   #--------------------------------------------------------------------------
  794.   # ● ジャンプ実行
  795.   #--------------------------------------------------------------------------
  796.   def jump
  797.     convert_jump
  798.     return if @action_data[7] == [0,0]
  799.     @jump = N03.parabola(@action_data[7].dup, @move_time, 100)
  800.   end  
  801.   #--------------------------------------------------------------------------
  802.   # ● J座標(ジャンプ高度)をH座標に変換
  803.   #--------------------------------------------------------------------------
  804.   def convert_jump
  805.     @h += @j
  806.     @j = 0
  807.     @jump = []
  808.   end  
  809.   #--------------------------------------------------------------------------
  810.   # ● データベース戦闘アニメ実行
  811.   #--------------------------------------------------------------------------
  812.   def battle_anime
  813.     data = @action_data.dup
  814.     targets = N03.get_targets(data[2], @battler)
  815.     return if targets == []
  816.     data[8] = !data[8] if @mirror
  817.     @set_damage           = data[5]
  818.     @damage_anime_data[0] = N03.get_attack_anime_id(data[1], @battler)
  819.     @damage_anime_data[1] = data[8]
  820.     @damage_anime_data[2] = data[7]
  821.     @damage_anime_data[3] = data[6]
  822.     @damage_anime_data[4] = data[9]
  823.     @wait = N03.get_anime_time(@damage_anime_data[0]) - 2 if data[4]
  824.     return if @set_damage
  825.     for target in targets do display_anime(targets, target, data) end
  826.   end
  827.   #--------------------------------------------------------------------------
  828.   # ● 武器アニメ開始
  829.   #--------------------------------------------------------------------------
  830.   def weapon_anime(anime_data)
  831.     @weapon_end = true
  832.     for i in 9...anime_data.size
  833.       set_effect_data(anime_data[i]) if anime_data[i] != ""
  834.     end
  835.   end
  836.   #--------------------------------------------------------------------------
  837.   # ● アニメ飛ばし開始
  838.   #--------------------------------------------------------------------------
  839.   def move_anime
  840.     @m_a_starter = []
  841.     @m_a_targets = []
  842.     starters = N03.get_targets(@action_data[2], @battler)
  843.     targets = N03.get_targets(@action_data[3], @battler)
  844.     return if starters == [] or targets == []
  845.     single_start = true if starters != nil && @action_data[2] < 0
  846.     single_start = true if @action_data[1][0] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][0], @battler)].position == 3
  847.     starters = [starters[0]] if single_start
  848.     single_end = true if targets != nil && @action_data[3] < 0
  849.     single_end = true if @action_data[1][1] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][1], @battler)].position == 3
  850.     targets = [targets[0]] if single_end
  851.     se_flag = true
  852.     for starter in starters
  853.       for target in targets
  854.         data = @action_data.dup
  855.         data[17] = se_flag
  856.         @effect_data.push(data)
  857.         @m_a_targets.push(target)
  858.         @m_a_starter.push(starter)
  859.         se_flag = false
  860.       end
  861.     end  
  862.   end
  863.   #--------------------------------------------------------------------------
  864.   # ● スプライトセット通信
  865.   #--------------------------------------------------------------------------
  866.   def set_effect_data(data = @action)
  867.     action_data = N03::ACTION[data]
  868.     return if action_data == nil
  869.     @effect_data.push(action_data.dup)
  870.   end
  871.   #--------------------------------------------------------------------------
  872.   # ● 戦闘シーン通信のデータを格納
  873.   #--------------------------------------------------------------------------
  874.   def set_play_data(data = @action_data)
  875.     @play_data = data.dup
  876.   end
  877.   #--------------------------------------------------------------------------
  878.   # ● 戦闘アニメの表示
  879.   #--------------------------------------------------------------------------
  880.   def display_anime(targets, target, data)
  881.     return if !N03.first_of_all_screen_anime(data[1], target, targets)
  882.     target.animation_id         = N03.get_attack_anime_id(data[1], @battler)
  883.     target.animation_mirror     = data[8]
  884.     target.sv.anime_horming     = data[3]
  885.     target.sv.anime_camera_zoom = data[6]
  886.     target.sv.anime_no_mirror   = data[7]
  887.     target.sv.anime_plus_z      = data[9]
  888.   end
  889.   #--------------------------------------------------------------------------
  890.   # ● 戦闘アニメ拡張データの初期化
  891.   #--------------------------------------------------------------------------
  892.   def reset_anime_data
  893.     @anime_no_mirror = false
  894.     @anime_horming = false
  895.     @anime_camera_zoom = false
  896.     @timing_targets = []
  897.     @anime_plus_z = true
  898.   end  
  899.   #--------------------------------------------------------------------------
  900.   # ● カメラワーク
  901.   #--------------------------------------------------------------------------
  902.   def camera
  903.     data = @action_data.dup
  904.     N03.camera(@battler, data)
  905.     @wait = data[4] if data[5]
  906.   end  
  907.   #--------------------------------------------------------------------------
  908.   # ● 画面のシェイク
  909.   #--------------------------------------------------------------------------
  910.   def shake
  911.     data = @action_data.dup
  912.     $sv_camera.shake(data[1], data[2], data[3])
  913.     @wait = data[3] if data[4]
  914.   end
  915.   #--------------------------------------------------------------------------
  916.   # ● 画面色調変更
  917.   #--------------------------------------------------------------------------
  918.   def color_effect
  919.     case @action_data[1]
  920.     when 0,1,2,3,4,5
  921.       targets = N03.get_targets(@action_data[1], @battler)
  922.     when 6
  923.       screen = true
  924.     when 7
  925.       targets = [@battler] + @target_battler
  926.     when 8
  927.       screen = true
  928.       targets = $game_troop.members + $game_party.battle_members - [@battler]
  929.     when 9
  930.       screen = true
  931.       targets = $game_troop.members + $game_party.battle_members - [@battler] - @target_battler
  932.     when 10
  933.       screen = true
  934.       targets = $game_troop.members + $game_party.battle_members
  935.     end
  936.     return if screen == nil && targets == []
  937.     for target in targets do target.sv.color_set = @action_data[2] end if targets
  938.     @wait = @action_data[2][4] if @action_data[3]
  939.     return if !screen
  940.     $sv_camera.color_set[1] = @action_data[2]
  941.     $sv_camera.color_set[2] = @action_data[2]
  942.   end  
  943.   #--------------------------------------------------------------------------
  944.   # ● トランジション
  945.   #--------------------------------------------------------------------------
  946.   def transition
  947.     $sv_camera.perform_transition(@action_data)
  948.   end  
  949.   #--------------------------------------------------------------------------
  950.   # ● ふきだしアニメ表示
  951.   #--------------------------------------------------------------------------
  952.   def balloon_anime
  953.     @balloon_data = @action_data.dup
  954.   end  
  955.   #--------------------------------------------------------------------------
  956.   # ● ピクチャ表示
  957.   #--------------------------------------------------------------------------
  958.   def picture_set
  959.     @picture = true
  960.     set_effect_data
  961.   end
  962.   #--------------------------------------------------------------------------
  963.   # ● ステート操作
  964.   #--------------------------------------------------------------------------
  965.   def state_set
  966.     targets = N03.get_targets(@action_data[1], @battler)
  967.     return if targets == []
  968.     case @action_data[2]
  969.     when 1 ; targets = [targets[rand(targets.size)]]
  970.     when 2 ; targets -= @battler if targets.include?(@battler)
  971.     end
  972.     for target in targets
  973.       for id in @action_data[4]
  974.         target.add_state(id) if @action_data[3] == "+"
  975.         target.remove_state(id) if @action_data[3] == "-"
  976.       end
  977.     end
  978.   end
  979.   #--------------------------------------------------------------------------
  980.   # ● FPS変更
  981.   #--------------------------------------------------------------------------
  982.   def fps
  983.     Graphics.frame_rate = @action_data[1]
  984.     start_action
  985.   end
  986.   #--------------------------------------------------------------------------
  987.   # ● バトラー画像変更の場合
  988.   #--------------------------------------------------------------------------
  989.   def graphics_change
  990.     @graphics_change = true
  991.     return @battler.graphics_change(@action_data[3]) if [email protected]?
  992.     @pre_change_data = [@battler.character_name, @battler.character_index, @battler.face_name, @battler.face_index] if @pre_change_data == nil && !@action_data[1]
  993.     if @action_data[4] == []
  994.       face_name = @battler.face_name
  995.       face_index = @battler.face_index
  996.     else
  997.       face_name = @action_data[4][1]
  998.       face_index = @action_data[4][0]
  999.     end
  1000.     @battler.set_graphic(@action_data[3], @action_data[2], face_name, face_index)
  1001.   end
  1002.   #--------------------------------------------------------------------------
  1003.   # ● スキル派生
  1004.   #--------------------------------------------------------------------------
  1005.   def derivating_skill
  1006.     # 未修得スキルは派生不可なら
  1007.     return if !@action_data[1] && [email protected]_learn?($data_skills[@action_data[3]])
  1008.     # コスト不足は派生不可なら
  1009.     return if !@action_data[2] && [email protected]_cost_payable?($data_skills[@action_data[3]])
  1010.     # 派生
  1011.     @derivation_skill_id = @action_data[3]
  1012.     # 以降のアクションをキャンセル
  1013.     @full_action = []
  1014.   end
  1015.   #--------------------------------------------------------------------------
  1016.   # ● BGM/BGS/SE演奏
  1017.   #--------------------------------------------------------------------------
  1018.   def sound
  1019.     pitch = @action_data[2]
  1020.     vol   = @action_data[3]
  1021.     name  = @action_data[4]
  1022.     case @action_data[1]
  1023.     when "se"
  1024.       Audio.se_play("Audio/SE/" + name, vol, pitch)
  1025.     when "bgm"
  1026.       # 名前指定のない場合、現在のBGMを変えないように
  1027.       name = RPG::BGM.last.name if @action_data[4] == ""
  1028.       Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
  1029.     when "bgs"
  1030.       name = RPG::BGS.last.name if @action_data[4] == ""
  1031.       Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
  1032.     end
  1033.   end
  1034.   #--------------------------------------------------------------------------
  1035.   # ● ムービーの再生
  1036.   #--------------------------------------------------------------------------
  1037.   def movie
  1038.     Graphics.play_movie('Movies/' + @action_data[1])
  1039.   end
  1040.   #--------------------------------------------------------------------------
  1041.   # ● ゲームスイッチ操作
  1042.   #--------------------------------------------------------------------------
  1043.   def switches
  1044.     for id in @action_data[1]
  1045.       $game_switches[id] = true if id > 0
  1046.       $sv_camera.switches[id.abs] = true  if id < 0
  1047.     end
  1048.     for id in @action_data[2]
  1049.       $game_switches[id] = false if id > 0
  1050.       $sv_camera.switches[id.abs] = false  if id < 0
  1051.     end
  1052.     $sv_camera.program_check
  1053.   end
  1054.   #--------------------------------------------------------------------------
  1055.   # ● ゲーム変数操作
  1056.   #--------------------------------------------------------------------------
  1057.   def variable
  1058.     # オペランドチェック
  1059.     operand = @action_data[3]
  1060.     operand = $game_variables[@action_data[3].abs] if @action_data[3] < 0
  1061.     # 変数操作で分岐
  1062.     case @action_data[2]
  1063.     when 0 ; $game_variables[@action_data[1]] = operand  # 代入
  1064.     when 1 ; $game_variables[@action_data[1]] += operand # 加算
  1065.     when 2 ; $game_variables[@action_data[1]] -= operand # 減算
  1066.     when 3 ; $game_variables[@action_data[1]] *= operand # 乗算
  1067.     when 4 ; $game_variables[@action_data[1]] /= operand # 除算
  1068.     when 5 ; $game_variables[@action_data[1]] %= operand # 剰余
  1069.     end
  1070.   end  
  1071.   #--------------------------------------------------------------------------
  1072.   # ● 条件分岐 (ゲームスイッチ)
  1073.   #--------------------------------------------------------------------------
  1074.   def nece_1
  1075.     judgment = $game_switches[@action_data[1]] == @action_data[2] if @action_data[1] > 0
  1076.     judgment = $sv_camera.switches[@action_data[1].abs] == @action_data[2] if @action_data[1] < 0
  1077.     action_diverging(judgment, @action_data[3])
  1078.   end  
  1079.   #--------------------------------------------------------------------------
  1080.   # ● 条件分岐 (ゲーム変数)
  1081.   #--------------------------------------------------------------------------
  1082.   def nece_2
  1083.     variable = $game_variables[@action_data[1]]
  1084.     num = @action_data[2]
  1085.     num = $game_variables[@action_data[2].abs] if num < 0
  1086.     case @action_data[3]
  1087.     when 0 ; judgment = variable == num
  1088.     when 1 ; judgment = variable < num
  1089.     when 2 ; judgment = variable > num
  1090.     end  
  1091.     action_diverging(judgment, @action_data[4])
  1092.   end  
  1093.   #--------------------------------------------------------------------------
  1094.   # ● 条件分岐 (ステート)
  1095.   #--------------------------------------------------------------------------
  1096.   def nece_3
  1097.     targets = N03.get_targets(@action_data[1], @battler)
  1098.     return if targets == []
  1099.     member_num = @action_data[4]
  1100.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  1101.     hit_count = 0
  1102.     miss_count = 0
  1103.     for target in targets
  1104.       hit_count += 1 if target.state?(@action_data[2])
  1105.       miss_count += 1 if !target.state?(@action_data[2])
  1106.     end
  1107.     case @action_data[3]
  1108.     when 0 ; judgment = hit_count >= member_num
  1109.     when 1 ; judgment = miss_count >= member_num
  1110.     end
  1111.     action_diverging(judgment, @action_data[5])
  1112.   end  
  1113.   #--------------------------------------------------------------------------
  1114.   # ● 条件分岐 (スキル)
  1115.   #--------------------------------------------------------------------------
  1116.   def nece_4
  1117.     targets = N03.get_targets(@action_data[1], @battler)
  1118.     return if targets == []
  1119.     member_num = @action_data[4]
  1120.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  1121.     hit_count = 0
  1122.     miss_count = 0
  1123.     for target in targets
  1124.       hit_count += 1 if target.skill_learn?($data_skills[@action_data[2]]) && target.skill_conditions_met?($data_skills[@action_data[2]])
  1125.       miss_count += 1 if !target.skill_learn?($data_skills[@action_data[2]]) or !target.skill_conditions_met?($data_skills[@action_data[2]])
  1126.     end
  1127.     case @action_data[3]
  1128.     when 0 ; judgment = hit_count >= member_num
  1129.     when 1 ; judgment = miss_count >= member_num
  1130.     end
  1131.     action_diverging(judgment, @action_data[5])
  1132.   end  
  1133.   #--------------------------------------------------------------------------
  1134.   # ● 条件分岐 (パラメータ)
  1135.   #--------------------------------------------------------------------------
  1136.   def nece_5
  1137.     targets = N03.get_targets(@action_data[1], @battler)
  1138.     return if targets == []
  1139.     member_num = @action_data[5]
  1140.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  1141.     hit_count = 0
  1142.     for target in targets
  1143.       hit_count += 1 if target.comparison_parameter([@action_data[2],@action_data[3],@action_data[4]])
  1144.     end
  1145.     judgment = hit_count >= member_num
  1146.     action_diverging(judgment, @action_data[6])
  1147.   end  
  1148.   #--------------------------------------------------------------------------
  1149.   # ● 条件分岐 (装備)
  1150.   #--------------------------------------------------------------------------
  1151.   def nece_6
  1152.     targets = N03.get_targets(@action_data[1], @battler)
  1153.     return if targets == []
  1154.     member_num = @action_data[5]
  1155.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  1156.     hit_count = 0
  1157.     miss_count = 0
  1158.     for target in targets
  1159.       hit_count += 1 if target.comparison_equip([@action_data[2],@action_data[3]])
  1160.       miss_count += 1 if !target.comparison_equip([@action_data[2],@action_data[3]])
  1161.     end
  1162.     case @action_data[4]
  1163.     when 0 ; judgment = hit_count >= member_num
  1164.     when 1 ; judgment = miss_count >= member_num
  1165.     end
  1166.     action_diverging(judgment, @action_data[6])
  1167.   end  
  1168.   #--------------------------------------------------------------------------
  1169.   # ● 条件分岐 (スクリプト)
  1170.   #--------------------------------------------------------------------------
  1171.   def nece_7
  1172.     judgment = eval(@action_data[2])
  1173.     action_diverging(judgment, @action_data[1])
  1174.   end  
  1175.   #--------------------------------------------------------------------------
  1176.   # ● アクション分岐  
  1177.   #--------------------------------------------------------------------------
  1178.   def action_diverging(judgment, kind)
  1179.     result = 0
  1180.     if judgment
  1181.       result = 1 if kind == 1
  1182.       result = 2 if kind == 2
  1183.     else
  1184.       result = 1 if kind == 0
  1185.     end
  1186.     # フルアクション終了
  1187.     return @full_action = []  if result == 2
  1188.     # 次のアクションを除去
  1189.     @full_action.shift if result == 1
  1190.     set_action
  1191.     # 次のアクションを実行
  1192.     @action_data = N03::ACTION[@action]
  1193.     next_action
  1194.   end
  1195.   #--------------------------------------------------------------------------
  1196.   # ● セカンドターゲット操作
  1197.   #--------------------------------------------------------------------------
  1198.   def second_targets_set
  1199.     targets = N03.get_targets(@action_data[1], @battler)
  1200.     for target in targets
  1201.       targets.delete(target) if @action_data[2][1] == 1 && target.index != @action_data[2][0]
  1202.       targets.delete(target) if @action_data[2][1] == 2 && target.index == @action_data[2][0].abs
  1203.       targets.delete(target) if @action_data[3] > 0 && target.id != @action_data[3]
  1204.       targets.delete(target) if @action_data[3] < 0 && target.id == @action_data[3].abs
  1205.       targets.delete(target) if @action_data[4] > 0 && !target.state?(@action_data[4])
  1206.       targets.delete(target) if @action_data[4] < 0 && target.state?(@action_data[4].abs)
  1207.       targets.delete(target) if @action_data[5] > 0 && !target.skill_conditions_met?($data_skills[@action_data[5]])
  1208.       targets.delete(target) if @action_data[5] < 0 && target.skill_conditions_met?($data_skills[@action_data[5].abs])
  1209.       targets.delete(target) if !target.comparison_parameter(@action_data[6])
  1210.       targets.delete(target) if !@action_data[7][1].include?(0) && !target.comparison_equip(@action_data[7])
  1211.     end
  1212.     return @second_targets = [] if targets.size == 0
  1213.     case @action_data[8]
  1214.     when 1 ; targets = [targets[rand(targets.size)]]
  1215.     when 2 ; targets.delete(@battler)
  1216.     end
  1217.     return @second_targets = [] if targets.size == 0
  1218.     @second_targets = targets
  1219.     case @action_data[9]
  1220.     when 0 ; return
  1221.     when 1 ; set_play_data(["second_targets_set"])
  1222.     when 2 ; set_play_data(["targets_set"])
  1223.     end
  1224.     @wait += 1
  1225.   end
  1226.   #--------------------------------------------------------------------------
  1227.   # ● コモンイベント呼び出し
  1228.   #--------------------------------------------------------------------------
  1229.   def call_common_event
  1230.     $game_temp.reserve_common_event(@action_data[1])
  1231.     $sv_camera.event = true
  1232.     @event_fix = @action_data[2]
  1233.   end
  1234.   #--------------------------------------------------------------------------
  1235.   # ● ダメージアニメ
  1236.   #--------------------------------------------------------------------------
  1237.   def damage_anime(delay_time = 12)
  1238.     anime(N03.get_attack_anime_id(-3, @battler), wait = true)
  1239.     action_play
  1240.     @wait -= delay_time
  1241.     @full_action.unshift("eval('@damage_anime_data = []
  1242.     @set_damage = true')")
  1243.   end
  1244.   #--------------------------------------------------------------------------
  1245.   # ● 通常コラプス
  1246.   #--------------------------------------------------------------------------
  1247.   def normal_collapse
  1248.     @collapse = true
  1249.     return
  1250.   end
  1251.   #--------------------------------------------------------------------------
  1252.   # ● 初期位置変更
  1253.   #--------------------------------------------------------------------------
  1254.   def change_base_position
  1255.     @base_x = @x
  1256.     @base_y = @y
  1257.     @base_h = @h
  1258.   end  
  1259.   #--------------------------------------------------------------------------
  1260.   # ● 強制アクション実行
  1261.   #--------------------------------------------------------------------------
  1262.   def force_act
  1263.     target(@full_action.shift)
  1264.   end
  1265.   #--------------------------------------------------------------------------
  1266.   # ● 強制アクション実行 (セカンドターゲット)
  1267.   #--------------------------------------------------------------------------
  1268.   def force_act2
  1269.     target2(@full_action.shift)
  1270.   end
  1271.   #--------------------------------------------------------------------------
  1272.   # ● 個別処理開始
  1273.   #--------------------------------------------------------------------------
  1274.   def individual_start
  1275.     @individual_targets = @target_battler.dup
  1276.     @remain_targets = @target_battler.dup
  1277.     @target_battler = [@individual_targets[0]]
  1278.     # リピート部分のアクションを保持
  1279.     @individual_act = @full_action.dup
  1280.   end
  1281.   #--------------------------------------------------------------------------
  1282.   # ● 個別処理終了
  1283.   #--------------------------------------------------------------------------
  1284.   def individual_end
  1285.     @individual_targets.shift
  1286.     for target in @individual_targets
  1287.       @individual_targets.shift if target.dead?
  1288.     end
  1289.     # ターゲットが残っているなら行動リピート
  1290.     return @target_battler = @remain_targets if @individual_targets.size == 0
  1291.     @full_action = @individual_act.dup
  1292.     @target_battler = [@individual_targets[0]]
  1293.   end
  1294.   #--------------------------------------------------------------------------
  1295.   # ● ループ開始
  1296.   #--------------------------------------------------------------------------
  1297.   def loop_start
  1298.     # ループ部分のアクションを保持
  1299.     @loop_act = @full_action.dup
  1300.   end
  1301.   #--------------------------------------------------------------------------
  1302.   # ● ループ終了
  1303.   #--------------------------------------------------------------------------
  1304.   def loop_end
  1305.     # 行動リピート
  1306.     @full_action = @loop_act.dup if @loop_act != []
  1307.   end
  1308.   #--------------------------------------------------------------------------
  1309.   # ● 次の行動者へ移行
  1310.   #--------------------------------------------------------------------------
  1311.   def next_battler
  1312.     @action_end = true
  1313.     @active = false
  1314.   end
  1315.   #--------------------------------------------------------------------------
  1316.   # ● 画像変更フラグ
  1317.   #--------------------------------------------------------------------------
  1318.   def set_change
  1319.     @change_up = true
  1320.   end
  1321.   #--------------------------------------------------------------------------
  1322.   # ● 戦闘シーン通信
  1323.   #--------------------------------------------------------------------------
  1324.   def play_data
  1325.     data = @play_data
  1326.     @play_data = []
  1327.     return data
  1328.   end
  1329.   #--------------------------------------------------------------------------
  1330.   # ● ショートカットコマンド
  1331.   #--------------------------------------------------------------------------
  1332.   def anime(anime_id, wait = true)
  1333.     @action_data = ["anime",anime_id,1,false,wait,false,true,false]
  1334.   end
  1335.   def anime_me(anime_id, wait = true)
  1336.     @action_data = ["anime",anime_id,0,false,wait,false,true,false]
  1337.   end
  1338.   def se(file, pitch = 100)
  1339.     @action_data = ["sound",  "se", pitch, 100, file]
  1340.   end
  1341.   def target(act)
  1342.     for target in @target_battler do target.sv.force_action = act end
  1343.   end
  1344.   def target2(act)
  1345.     for target in @second_targets do target.sv.force_action = act end
  1346.   end
  1347.   def delay(time)
  1348.     @wait = @battler.index * time
  1349.   end
  1350.   #--------------------------------------------------------------------------
  1351.   # ● バトラーのIDを取得
  1352.   #--------------------------------------------------------------------------
  1353.   def id
  1354.     return @battler.id if @battler.actor?
  1355.     return [email protected]
  1356.   end
  1357.   #--------------------------------------------------------------------------
  1358.   # ● 被クリティカルフラグを取得
  1359.   #--------------------------------------------------------------------------
  1360.   def critical?
  1361.     return @battler.result.critical
  1362.   end
  1363.   #--------------------------------------------------------------------------
  1364.   # ● 被回復フラグを取得
  1365.   #--------------------------------------------------------------------------
  1366.   def recovery?
  1367.     recovery = false
  1368.     recovery = true if @battler.result.hp_damage < 0
  1369.     recovery = true if @battler.result.mp_damage < 0
  1370.     recovery = true if @battler.result.tp_damage < 0
  1371.     return recovery
  1372.   end
  1373.   #--------------------------------------------------------------------------
  1374.   # ● 被スキルIDを取得
  1375.   #--------------------------------------------------------------------------
  1376.   def damage_skill_id
  1377.     return @damage_skill_id
  1378.   end
  1379.   #--------------------------------------------------------------------------
  1380.   # ● 被アイテムIDを取得
  1381.   #--------------------------------------------------------------------------
  1382.   def damage_item_id
  1383.     return @damage_item_id
  1384.   end
  1385.   #--------------------------------------------------------------------------
  1386.   # ● 装備武器を取得
  1387.   #--------------------------------------------------------------------------
  1388.   def weapon_id
  1389.     return 0 if [email protected][0]
  1390.     return @battler.weapons[0].id
  1391.   end
  1392.   #--------------------------------------------------------------------------
  1393.   # ● 装備武器のタイプを取得
  1394.   #--------------------------------------------------------------------------
  1395.   def weapon_type
  1396.     return 0 if [email protected][0]
  1397.     return @battler.weapons[0].wtype_id
  1398.   end
  1399.   #--------------------------------------------------------------------------
  1400.   # ● 盾を装備しているか
  1401.   #--------------------------------------------------------------------------
  1402.   def shield?
  1403.     for armor in @battler.armors do return true if armor != nil && armor.etype_id == 1 end
  1404.     return false
  1405.   end
  1406.   #--------------------------------------------------------------------------
  1407.   # ● ダメージがあるか
  1408.   #--------------------------------------------------------------------------
  1409.   def damage_zero?
  1410.     return @battler.result.hp_damage == 0 && @battler.result.mp_damage == 0 && @battler.result.tp_damage == 0
  1411.   end
  1412.   #--------------------------------------------------------------------------
  1413.   # ● スキルIDを取得
  1414.   #--------------------------------------------------------------------------
  1415.   def skill_id
  1416.     return @counter_id if @counter_id != 0
  1417.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  1418.     return 0 if @battler.current_action.item.is_a?(RPG::Item)
  1419.     return @battler.current_action.item.id
  1420.   end
  1421.   #--------------------------------------------------------------------------
  1422.   # ● スキルのタイプを取得
  1423.   #--------------------------------------------------------------------------
  1424.   def skill_type
  1425.     return 0 if skill_id == 0
  1426.     return $data_skills[skill_id].stype_id
  1427.   end
  1428.   #--------------------------------------------------------------------------
  1429.   # ● スキル名を取得
  1430.   #--------------------------------------------------------------------------
  1431.   def skill_name
  1432.     return "" if skill_id == 0
  1433.     return $data_skills[skill_id].name
  1434.   end
  1435.   #--------------------------------------------------------------------------
  1436.   # ● アイテムIDを取得
  1437.   #--------------------------------------------------------------------------
  1438.   def item_id
  1439.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  1440.     return @battler.current_action.item.id
  1441.   end
  1442.   #--------------------------------------------------------------------------
  1443.   # ● 攻撃アクション
  1444.   #--------------------------------------------------------------------------
  1445.   def attack_action(item)
  1446.     return skill_action if item.is_a?(RPG::Skill)
  1447.     return item_action
  1448.   end
  1449.   #--------------------------------------------------------------------------
  1450.   # ● ダメージアクションベース
  1451.   #--------------------------------------------------------------------------
  1452.   def damage_action_base(item)
  1453.     @damage_skill_id = 0
  1454.     @damage_item_id = 0
  1455.     @damage_skill_id = item.id if item.is_a?(RPG::Skill)
  1456.     @damage_item_id = item.id if item.is_a?(RPG::Item)
  1457.   end  
  1458.   #--------------------------------------------------------------------------
  1459.   # ● ダメージアクション
  1460.   #--------------------------------------------------------------------------
  1461.   def damage_action(attacker, item)
  1462.     damage_action_base(item)
  1463.     act = damage(attacker)
  1464.     return if @active
  1465.     start_action(act) if act != nil
  1466.   end
  1467.   #--------------------------------------------------------------------------
  1468.   # ● 回避アクション
  1469.   #--------------------------------------------------------------------------
  1470.   def evasion_action(attacker, item)
  1471.     damage_action_base(item)
  1472.     act = evasion(attacker)
  1473.     return if @active
  1474.     start_action(act) if act != nil
  1475.   end
  1476.   #--------------------------------------------------------------------------
  1477.   # ● ミスアクション
  1478.   #--------------------------------------------------------------------------
  1479.   def miss_action(attacker, item)
  1480.     damage_action_base(item)
  1481.     act = miss(attacker)
  1482.     return if @active
  1483.     start_action(act) if act != nil
  1484.   end
  1485.   #--------------------------------------------------------------------------
  1486.   # ● 閃きスクリプト併用処理
  1487.   #--------------------------------------------------------------------------
  1488.   def flash_action
  1489.     return "閃き"
  1490.   end
  1491.   
  1492. end


  1493. #==============================================================================
  1494. # ■ module N03
  1495. #------------------------------------------------------------------------------
  1496. #  サイドビューバトルのモジュールです。
  1497. #==============================================================================
  1498. module N03
  1499.   #--------------------------------------------------------------------------
  1500.   # ● バトラーの敵グループを取得
  1501.   #--------------------------------------------------------------------------
  1502.   def self.get_enemy_unit(battler)
  1503.     return $game_troop if battler.actor?
  1504.     return $game_party
  1505.   end
  1506.   #--------------------------------------------------------------------------
  1507.   # ● バトラーの味方グループを取得
  1508.   #--------------------------------------------------------------------------
  1509.   def self.get_party_unit(battler)
  1510.     return $game_party if battler.actor?
  1511.     return $game_troop
  1512.   end
  1513.   #--------------------------------------------------------------------------
  1514.   # ● 戦闘アニメ時間の取得
  1515.   #--------------------------------------------------------------------------
  1516.   def self.get_anime_time(anime_id)
  1517.     return 0 if anime_id <= 0
  1518.     return $data_animations[anime_id].frame_max * 4
  1519.   end
  1520.   #--------------------------------------------------------------------------
  1521.   # ● 攻撃アニメの取得
  1522.   #--------------------------------------------------------------------------
  1523.   def self.get_attack_anime_id(kind, battler)
  1524.     return $data_skills[battler.sv.counter_id].animation_id if kind == -3 && battler.sv.counter_id != 0
  1525.     case kind
  1526.     when -1 ; anime_id = battler.atk_animation_id1
  1527.     when -2 ; anime_id = battler.atk_animation_id2
  1528.     when -3
  1529.       if battler.current_action != nil
  1530.         anime_id = battler.current_action.item.animation_id if battler.current_action.item != nil
  1531.       end
  1532.     else    ; anime_id = kind
  1533.     end
  1534.     case anime_id
  1535.     when -1 ; anime_id = battler.atk_animation_id1
  1536.     when -2 ; anime_id = battler.atk_animation_id2
  1537.     end
  1538.     return anime_id if anime_id
  1539.     return 0
  1540.   end  
  1541.   #--------------------------------------------------------------------------
  1542.   # ● 戦闘アニメデータをセット
  1543.   #--------------------------------------------------------------------------
  1544.   def self.set_damage_anime_data(targets, target, data)
  1545.     return if !first_of_all_screen_anime(data[0], target, targets)
  1546.     target.animation_id         = data[0]
  1547.     target.animation_mirror     = data[1]
  1548.     target.sv.anime_no_mirror   = data[2]
  1549.     target.sv.anime_camera_zoom = data[3]
  1550.     target.sv.anime_plus_z      = data[4]
  1551.   end   
  1552.   #--------------------------------------------------------------------------
  1553.   # ● ターゲットの取得
  1554.   #--------------------------------------------------------------------------
  1555.   def self.get_targets(kind, battler)
  1556.     case kind.abs
  1557.     when 0 ; return [battler].dup
  1558.     when 1 ; return battler.sv.target_battler.dup
  1559.     when 2 ; return get_enemy_unit(battler).members.dup
  1560.     when 3 ; return get_party_unit(battler).members.dup
  1561.     when 4 ; return $game_troop.members.dup + $game_party.battle_members.dup
  1562.     when 5 ; return battler.sv.second_targets.dup
  1563.     end
  1564.   end  
  1565.   #--------------------------------------------------------------------------
  1566.   # ● ターゲットの座標を取得
  1567.   #--------------------------------------------------------------------------
  1568.   def self.get_targets_position(targets, horming, m_a = nil)
  1569.     return [0,0,0] if targets == nil && !$sv_camera.mirror
  1570.     return [Graphics.width,0,0] if targets == nil && $sv_camera.mirror
  1571.     x = y = h = 0
  1572.     for i in 0...targets.size
  1573.       x += targets[i].sv.base_x if !horming
  1574.       y += targets[i].sv.base_y if !horming
  1575.       h += targets[i].sv.base_h if !horming
  1576.       x += targets[i].sv.x if horming
  1577.       y += targets[i].sv.y if horming
  1578.       h += targets[i].sv.h if horming
  1579.       y -= targets[i].sv.ch * 100 if m_a == 0
  1580.       y -= targets[i].sv.ch * 50 if m_a == 1
  1581.     end
  1582.     return [x / targets.size, y / targets.size, h / targets.size]
  1583.   end
  1584.   #--------------------------------------------------------------------------
  1585.   # ● 速度を時間に変換
  1586.   #--------------------------------------------------------------------------
  1587.   def self.distanse_calculation(time, target_position, self_position, distanse_move)
  1588.     return time if !distanse_move
  1589.     distanse_x = self_position[0] - target_position[0]
  1590.     distanse_x = target_position[0] - self_position[0] if target_position[0] > self_position[0]
  1591.     distanse_y = self_position[1] - target_position[1]
  1592.     distanse_y = target_position[1] - self_position[1] if target_position[1] > self_position[1]
  1593.     if self_position[2] != nil && target_position[2] != nil
  1594.       distanse_h = self_position[2] - target_position[2]
  1595.       distanse_h = target_position[2] - self_position[2] if target_position[2] > self_position[2]
  1596.     else
  1597.       distanse_h = 0
  1598.     end
  1599.     distanse = [distanse_x, distanse_y, distanse_h].max
  1600.     return distanse / (time * 100) + 1
  1601.   end
  1602.   #--------------------------------------------------------------------------
  1603.   # ● 放物線移動計算
  1604.   #--------------------------------------------------------------------------
  1605.   def self.parabola(data, time, size, type = 1)
  1606.     move_data = data
  1607.     move_data[0] *= size
  1608.     move_data[1] *= size
  1609.     move = []
  1610.     move_d = []
  1611.     for i in 0...time / 2
  1612.       move[i] = move_data[0]
  1613.       move_d[i] = move_data[1]
  1614.       move_data[0] = move_data[0] * type / (1 + type)
  1615.       move_data[1] = move_data[1] * type / (1 + type)
  1616.     end
  1617.     move = move + move_d.reverse!
  1618.     move.reverse!
  1619.     adjust = move.inject(0) {|result, item| result + item }
  1620.     move[move.size - 1] += adjust if data[0] == data[1] && adjust != 0
  1621.     move.unshift(0) if time % 2 != 0
  1622.     return move
  1623.   end
  1624.   #--------------------------------------------------------------------------
  1625.   # ● 反転値
  1626.   #--------------------------------------------------------------------------
  1627.   def self.mirror_num(mirror)
  1628.     return 1 if !mirror
  1629.     return -1
  1630.   end  
  1631.   #--------------------------------------------------------------------------
  1632.   # ● カメラワーク
  1633.   #--------------------------------------------------------------------------
  1634.   def self.camera(battler, data)
  1635.     battler = $game_party.battle_members[0] if !battler
  1636.     cx = data[2][0] * 100
  1637.     cy = data[2][1] * 100
  1638.     return $sv_camera.move(cx, cy, data[3], data[4], true) if data[1] == 6
  1639.     targets = self.get_targets(data[1], battler)
  1640.     return if targets == nil or targets == []
  1641.     position = self.get_targets_position(targets, true)
  1642.     $sv_camera.move(position[0], position[1] - position[2], data[3], data[4], false)
  1643.   end
  1644.   #--------------------------------------------------------------------------
  1645.   # ● コラプス禁止
  1646.   #--------------------------------------------------------------------------
  1647.   def self.immortaling
  1648.     # 全員に不死身付与
  1649.     for member in $game_party.battle_members + $game_troop.members
  1650.       # イベント操作等で不死身設定になっていたら解除を無効にするフラグを立てる
  1651.       member.sv.immortal = true if member.state?(N03::IMMORTAL_ID)
  1652.       member.add_state(N03::IMMORTAL_ID)
  1653.     end
  1654.     return true
  1655.   end  
  1656.   #--------------------------------------------------------------------------
  1657.   # ● コラプス許可
  1658.   #--------------------------------------------------------------------------
  1659.   def self.unimmortaling
  1660.     # 全員の不死身化解除(イベント等で不死身設定がされていれば除く)
  1661.     for member in $game_party.battle_members + $game_troop.members
  1662.       next if member.dead?
  1663.       # 不死身ステートが行動中に解除されていた場合、解除無効を解除
  1664.       member.sv.immortal = false if !member.state?(N03::IMMORTAL_ID) && member.sv.immortal
  1665.       next member.sv.immortal = false if member.sv.immortal
  1666.       member.remove_state(N03::IMMORTAL_ID)
  1667.       next if member.hp != 0
  1668.       member.add_state(1)
  1669.       member.perform_collapse_effect
  1670.       member.sv.action_terminate
  1671.     end
  1672.     return false
  1673.   end  
  1674.   #--------------------------------------------------------------------------
  1675.   # ● スキル派生
  1676.   #--------------------------------------------------------------------------
  1677.   def self.derived_skill(battler)
  1678.     battler.force_action(battler.sv.derivation_skill_id, -2)
  1679.     BattleManager.unshift_action_battlers(battler)
  1680.   end
  1681.   #--------------------------------------------------------------------------
  1682.   # ● ダメージの作成
  1683.   #--------------------------------------------------------------------------
  1684.   def self.set_damage(battler, hp_damage, mp_damage)
  1685.     battler.result.hp_damage = hp_damage
  1686.     battler.result.mp_damage = mp_damage
  1687.   end
  1688.   #--------------------------------------------------------------------------
  1689.   # ● ターゲット生死確認
  1690.   #--------------------------------------------------------------------------
  1691.   def self.targets_alive?(targets)
  1692.     return false if targets == []
  1693.     for target in targets do return true if !target.dead? end
  1694.     return false
  1695.   end
  1696.   #--------------------------------------------------------------------------
  1697.   # ● ターゲットをセカンドターゲットへ
  1698.   #--------------------------------------------------------------------------
  1699.   def self.s_targets(battler)
  1700.     battler.sv.target_battler = battler.sv.second_targets
  1701.     return battler.sv.second_targets
  1702.   end  
  1703.   #--------------------------------------------------------------------------
  1704.   # ● セカンドターゲットをターゲットへ
  1705.   #--------------------------------------------------------------------------
  1706.   def self.targets_set(battler)
  1707.     battler.sv.second_targets = battler.current_action.make_targets.compact
  1708.     battler.sv.target_battler = battler.sv.second_targets
  1709.   end  
  1710.   #--------------------------------------------------------------------------
  1711.   # ● 戦闘アニメ実行判定 (対象:画面時は最初のターゲットのみアニメ実行)
  1712.   #--------------------------------------------------------------------------
  1713.   def self.first_of_all_screen_anime(anime_id, target, targets)
  1714.     anime = $data_animations[anime_id]
  1715.     return false if !anime
  1716.     return true if anime.position != 3
  1717.     return false if anime.position == 3 && target != targets[0]
  1718.     targets.delete(target)
  1719.     target.sv.timing_targets = targets
  1720.     return true
  1721.   end
  1722.   #--------------------------------------------------------------------------
  1723.   # ● 戦闘不能付加攻撃か
  1724.   #--------------------------------------------------------------------------
  1725.   def self.dead_attack?(battler, item)
  1726.     for state in battler.atk_states
  1727.       return true if state == battler.death_state_id
  1728.     end
  1729.     for effect in item.effects
  1730.       return true if effect.code == 21 && effect.data_id == battler.death_state_id
  1731.     end
  1732.     return false
  1733.   end
  1734. end

  1735. #==============================================================================
  1736. # ■ Sprite_Weapon
  1737. #------------------------------------------------------------------------------
  1738. #  ウエポン表示用のスプライトです。
  1739. #==============================================================================
  1740. class Sprite_Weapon < Sprite_Base
  1741.   #--------------------------------------------------------------------------
  1742.   # ● 公開インスタンス変数 
  1743.   #--------------------------------------------------------------------------
  1744.   attr_reader   :index                       # ウエポン画像配列のインデックス
  1745.   attr_reader   :battler                     # 画像が参照しているバトラー
  1746.   attr_reader   :move_time                   # 画像が目標に到達するまでの時間
  1747.   attr_reader   :through                     # 貫通フラグ
  1748.   attr_reader   :action_end                  # 武器アクション終了フラグ
  1749.   attr_reader   :action_end_cancel                  # 武器アクション終了フラグ
  1750.   attr_reader   :hit_position                # 画像が目標に到達した時の座標
  1751.   attr_accessor :hit_anime_id                # 画像が目標に到達した時のアニメID
  1752.   #--------------------------------------------------------------------------
  1753.   # ● オブジェクト初期化
  1754.   #--------------------------------------------------------------------------
  1755.   def initialize(viewport, index, battler)
  1756.     super(viewport)
  1757.     @index = index
  1758.     @battler = battler
  1759.     @position_x = @position_y = 0
  1760.     @o = 0
  1761.     @real_x = @real_y = 0
  1762.     @mirror = @battler.sv.mirror
  1763.     reset
  1764.     set_action
  1765.   end
  1766.   #--------------------------------------------------------------------------
  1767.   # ● 初期化
  1768.   #--------------------------------------------------------------------------
  1769.   def reset
  1770.     @z_plus = 0
  1771.     @weapon_data = []
  1772.     @move_data = []
  1773.     @move_x = 0
  1774.     @move_y = 0
  1775.     @orbit = []
  1776.     @through = false
  1777.     @distanse_move = false
  1778.     @weapon_width = 0
  1779.     @weapon_height = 0
  1780.     @anime_time = 0
  1781.     @anime_position = 1
  1782.     @move_time = 0
  1783.     @hit_anime_id = 0
  1784.     @move_anime = true
  1785.     @action_end = false
  1786.     @action_end_cancel = false
  1787.     reset_position
  1788.   end  
  1789.   #--------------------------------------------------------------------------
  1790.   # ● アクションをセット
  1791.   #--------------------------------------------------------------------------
  1792.   def set_action
  1793.     return if @battler.sv.effect_data == []
  1794.     weapon_anime if @battler.sv.effect_data[0][0] == "wp"
  1795.     move_anime if @battler.sv.effect_data[0][0] == "m_a"
  1796.     @battler.sv.effect_data.shift
  1797.   end
  1798.   #--------------------------------------------------------------------------
  1799.   # ● 武器アニメ実行
  1800.   #--------------------------------------------------------------------------
  1801.   def weapon_anime
  1802.     @weapon_data = @battler.sv.effect_data[0].dup
  1803.     set_graphics
  1804.     set_ox
  1805.     set_weapon_move
  1806.   end
  1807.   #--------------------------------------------------------------------------
  1808.   # ● アニメ移動実行
  1809.   #--------------------------------------------------------------------------
  1810.   def move_anime
  1811.     @move_data = @battler.sv.effect_data[0].dup
  1812.     # ターゲットを取得
  1813.     @target_battler = [@battler.sv.m_a_targets.shift]
  1814.     @target_battler = N03.get_targets(@move_data[3], @battler) if @move_data[3] < 0
  1815.     set_move
  1816.     return if @move_data[16] == ""
  1817.     weapon_data = N03::ACTION[@move_data[16]]
  1818.     return if weapon_data == nil
  1819.     @weapon_data = weapon_data.dup
  1820.     set_graphics
  1821.     set_ox
  1822.     set_weapon_move
  1823.   end
  1824.   #--------------------------------------------------------------------------
  1825.   # ● 武器画像を取得
  1826.   #--------------------------------------------------------------------------  
  1827.   def set_graphics
  1828.     # 武器に依存しない画像設定がある場合
  1829.     if @weapon_data[13] != ""
  1830.       self.bitmap = Cache.character(@weapon_data[13]).dup
  1831.       @weapon_width = self.bitmap.width
  1832.       @weapon_height = self.bitmap.height
  1833.       return
  1834.     end
  1835.     # 武器を取得
  1836.     weapon = @battler.weapons[0]
  1837.     # 逆手装備を取得
  1838.     if @weapon_data[10]
  1839.       weapon = nil
  1840.       for armor in @battler.armors do break weapon = armor if armor.is_a?(RPG::Armor) && armor.etype_id == 1 end
  1841.       weapon = @battler.weapons[1] if !weapon
  1842.     end  
  1843.     # 武器がなければ処理をキャンセル
  1844.     return if weapon == nil
  1845.     # インデックスを取得
  1846.     file_index = @weapon_data[12]
  1847.     # アイコンを利用するなら
  1848.     if @weapon_data[1] == 0
  1849.       icon_index = weapon.icon_index
  1850.       self.bitmap = Cache.system("Iconset" + file_index).dup
  1851.       self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  1852.       @weapon_width = @weapon_height = 24
  1853.     # 独自画像指定
  1854.     else
  1855.       file_name = @battler.sv.weapon_graphic(weapon.id, weapon.wtype_id) if weapon.is_a?(RPG::Weapon)
  1856.       file_name = @battler.sv.shield_graphic(weapon.id, weapon.atype_id) if weapon.is_a?(RPG::Armor)
  1857.       self.bitmap = Cache.character(file_name + file_index).dup
  1858.       @weapon_width = self.bitmap.width
  1859.       @weapon_height = self.bitmap.height
  1860.       return if @weapon_data[1] == 1
  1861.       # 2003仕様の武器アニメ
  1862.       @weapon_width /= @battler.sv.max_pattern[0]
  1863.     end
  1864.   end
  1865.   #--------------------------------------------------------------------------
  1866.   # ● 画像の原点を取得
  1867.   #--------------------------------------------------------------------------  
  1868.   def set_ox
  1869.     # 反転時は設定を逆に
  1870.     if @mirror
  1871.       case @weapon_data[6]
  1872.       when 1 ; @weapon_data[6] = 2 # 左上→右上に
  1873.       when 2 ; @weapon_data[6] = 1 # 右上→左上に
  1874.       when 3 ; @weapon_data[6] = 4 # 左下→右下に
  1875.       when 4 ; @weapon_data[6] = 3 # 右下→左下に
  1876.       end
  1877.     end
  1878.     # 原点を設定
  1879.     case @weapon_data[6]
  1880.     when 0 # 中心
  1881.       self.ox = @weapon_width / 2
  1882.       self.oy = @weapon_height / 2
  1883.     when 1 # 左上
  1884.       self.ox = 0
  1885.       self.oy = 0
  1886.     when 2 # 右上
  1887.       self.ox = @weapon_width
  1888.       self.oy = 0
  1889.     when 3 # 左下
  1890.       self.ox = 0
  1891.       self.oy = @weapon_height
  1892.     when 4 # 右下
  1893.       self.ox = @weapon_width
  1894.       self.oy = @weapon_height
  1895.     when 5 # バトラーと同じ
  1896.       self.ox = @weapon_width / 2
  1897.       self.oy = @weapon_height
  1898.     end
  1899.   end  
  1900.   #--------------------------------------------------------------------------
  1901.   # ● バトラーの座標を取得
  1902.   #--------------------------------------------------------------------------  
  1903.   def set_battler_position
  1904.     @position_x = @battler.sv.x + @weapon_data[3][0] * N03.mirror_num(@mirror) * 100
  1905.     @position_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust) + @weapon_data[3][1] * 100
  1906.     reset_position
  1907.   end
  1908.   #--------------------------------------------------------------------------
  1909.   # ● 座標を初期化
  1910.   #--------------------------------------------------------------------------  
  1911.   def reset_position
  1912.     @real_x = @position_x / 100
  1913.     @real_y = @position_y / 100
  1914.     @real_zoom_x = 1
  1915.     @real_zoom_y = 1
  1916.   end
  1917.   #--------------------------------------------------------------------------
  1918.   # ● 戦闘アニメを表示
  1919.   #--------------------------------------------------------------------------  
  1920.   def set_animation(anime_id)
  1921.     return if $data_animations[anime_id] == nil
  1922.     @anime_position = $data_animations[anime_id].position
  1923.     @horming = true
  1924.     @horming = false if @anime_position == 3
  1925.     @anime_camera_zoom = true
  1926.     @anime_no_mirror = false
  1927.     start_animation($data_animations[anime_id], @mirror)
  1928.     timings = $data_animations[anime_id].timings
  1929.   end
  1930.   #--------------------------------------------------------------------------
  1931.   # ● ヒット時の戦闘アニメ実行
  1932.   #--------------------------------------------------------------------------  
  1933.   def set_hit_animation(position_data, hit_anime_id, target)
  1934.     return if $data_animations[hit_anime_id] == nil
  1935.     @real_x = position_data[0]
  1936.     @real_y = position_data[1]
  1937.     @position_x = position_data[0] * 100
  1938.     @position_y = position_data[1] * 100
  1939.     self.z = position_data[2]
  1940.     @z_plus = 1000
  1941.     @action_end = false
  1942.     @horming = true
  1943.     set_animation(hit_anime_id)
  1944.     @anime_time = $data_animations[hit_anime_id].frame_max * 4
  1945.     @timing_targets = [target]
  1946.     @move_time = @hit_anime_id = 0
  1947.     @weapon_data = []
  1948.   end
  1949.   #--------------------------------------------------------------------------
  1950.   # ● タイミングバトラー追加
  1951.   #--------------------------------------------------------------------------  
  1952.   def timing_battler_set(target)
  1953.     @timing_targets.push(target)
  1954.   end
  1955.   #--------------------------------------------------------------------------
  1956.   # ● 武器の動きを取得
  1957.   #--------------------------------------------------------------------------  
  1958.   def set_weapon_move
  1959.     # 開始位置を取得
  1960.     set_battler_position if @move_time == 0
  1961.     @z_plus = 50 if @z_plus == 0 && @weapon_data[9]
  1962.     self.z = @battler.sv.z + @z_plus
  1963.     # 反転処理
  1964.     @mirror = !@mirror if @weapon_data[7]
  1965.     self.mirror = @mirror
  1966.     # 更新パターンをセット
  1967.     set_pattern
  1968.     @max_pattern = 2 if @max_pattern == 1
  1969.     # 動きを計算
  1970.     @weapon_move_data = []
  1971.     @weapon_angle_data = []
  1972.     @weapon_zoom_data = []
  1973.     num = N03.mirror_num(@mirror)
  1974.     for i in 0...@max_pattern
  1975.       move_data_x = @weapon_data[2][0] * num * 100 * i / (@max_pattern - 1)
  1976.       move_data_y = @weapon_data[2][1] * 100 * i / (@max_pattern - 1)
  1977.       move_angle = @weapon_data[4] * num + (@weapon_data[5] * num - @weapon_data[4] * num) * i / (@max_pattern - 1)
  1978.       move_zoom_x = 1 + (@weapon_data[8][0] - 1) * i / (@max_pattern - 1)
  1979.       move_zoom_y = 1 + (@weapon_data[8][1] - 1) * i / (@max_pattern - 1)
  1980.       @weapon_move_data.push([move_data_x, move_data_y])
  1981.       @weapon_angle_data.push(move_angle)
  1982.       @weapon_zoom_data.push([move_zoom_x, move_zoom_y])
  1983.     end
  1984.   end  
  1985.   #--------------------------------------------------------------------------
  1986.   # ● 更新パターン
  1987.   #--------------------------------------------------------------------------
  1988.   def set_pattern
  1989.     if @weapon_data[11] == -1
  1990.       return @max_pattern = @battler.sv.max_pattern[0] if @battler.sv.pattern_type != 0
  1991.       @count = @battler.sv.pattern_time
  1992.       @max_count = @battler.sv.pattern_time
  1993.       @max_pattern = @battler.sv.max_pattern[0]
  1994.       @repeat = false
  1995.     else
  1996.       @count = @weapon_data[11][0]
  1997.       @max_count = @weapon_data[11][0]
  1998.       @max_pattern = @weapon_data[11][1]
  1999.       @repeat = @weapon_data[11][2]
  2000.     end
  2001.     @pattern = 0
  2002.   end
  2003.   #--------------------------------------------------------------------------
  2004.   # ● 移動実行
  2005.   #--------------------------------------------------------------------------
  2006.   def set_move
  2007.     # 戦闘アニメを取得
  2008.     set_animation(@move_data[1][0]) if $data_animations[@move_data[1][0]] != nil && $data_animations[@move_data[1][0]].position != 3
  2009.     @anime_camera_zoom = @move_data[13]
  2010.     @loop = @move_data[14]
  2011.     @loop = false if @move_data[1][0] == 0
  2012.     @anime_no_mirror = @move_data[15]
  2013.     @se_flag = @move_data[17]
  2014.     # 開始位置を取得
  2015.     start_position
  2016.     @z_plus = 1000 if @move_data[9]
  2017.     # ターゲットバトラー画像にこのアニメのSEとタイミング設定を反映させる
  2018.     @timing_targets = @target_battler
  2019.     # 座標計算
  2020.     @move_x = @move_data[5][0] * 100 * N03.mirror_num(@mirror)
  2021.     @move_y = @move_data[5][1] * 100
  2022.     # 時間計算か速度計算か
  2023.     @distanse_move = true if @move_data[6] > 0
  2024.     @move_time = @move_data[6].abs
  2025.     # 時間0の場合、アニメが設定されていればアニメ表示時間に合わせる
  2026.     if @move_time == 0
  2027.       @move_time = $data_animations[@move_data[1][0]].frame_max * 4 if $data_animations[@move_data[1][0]]
  2028.       @move_time = 1 if !$data_animations[@move_data[1][0]]
  2029.       @distanse_move = false
  2030.     end
  2031.     # 貫通タイプの場合
  2032.     @through = true if @move_data[7] == 1
  2033.     @auto_through_flag = false
  2034.     @auto_through_flag = true if @move_data[7] == 0
  2035.     # ターゲット座標計算
  2036.     if @target_battler == nil
  2037.       @target_x = @move_x * 100
  2038.       @target_x = (Graphics.width - @move_x) * 100 if @mirror
  2039.       @target_y = @move_y * 100
  2040.     else
  2041.       move_data_set
  2042.     end
  2043.     # ターゲットに到達するまでの時間を計算
  2044.     @move_time = distanse_calculation(@move_time, @target_x, @target_y)
  2045.     # 円軌道計算
  2046.     orbit
  2047.     # バトラーのウエイト設定
  2048.     @battler.sv.wait = @move_time - 1 if @move_data[10][0]
  2049.     @move_horming = @move_data[12]
  2050.   end  
  2051.   #--------------------------------------------------------------------------
  2052.   # ● 速度を時間に変換
  2053.   #--------------------------------------------------------------------------
  2054.   def distanse_calculation(time, target_x, target_y)
  2055.     return time if !@distanse_move
  2056.     distanse_x = @position_x - @target_x
  2057.     distanse_x = @target_x - @position_x if @target_x > @position_x
  2058.     distanse_y = @position_y - @target_y
  2059.     distanse_y = @target_y - @position_y if @target_y > @position_y
  2060.     distanse = [distanse_x, distanse_y].max
  2061.     return distanse / (time * 100) + 1
  2062.   end
  2063.   #--------------------------------------------------------------------------
  2064.   # ● 移動目標の更新
  2065.   #--------------------------------------------------------------------------
  2066.   def move_data_set
  2067.     return if @target_battler == nil
  2068.     position = N03.get_targets_position(@target_battler, true, @anime_position)
  2069.     @target_x = position[0] + @move_x
  2070.     @target_y = position[1] - position[2] + @move_y
  2071.   end
  2072.   #--------------------------------------------------------------------------
  2073.   # ● 開始位置を計算
  2074.   #--------------------------------------------------------------------------
  2075.   def start_position
  2076.     starter = [@battler.sv.m_a_starter.shift]
  2077.     starter = N03.get_targets(@move_data[2], @battler) if @move_data[2] < 0
  2078.     position = [0, 0]
  2079.     position = N03.get_targets_position(starter, true, @anime_position) if starter != nil
  2080.     @position_x = position[0] + @move_data[4][0] * 100
  2081.     @position_y = position[1] + position[2] + @move_data[4][1] * 100
  2082.     @position_z = @position_y
  2083.   end  
  2084.   #--------------------------------------------------------------------------
  2085.   # ● 円軌道計算
  2086.   #--------------------------------------------------------------------------
  2087.   def orbit
  2088.     orbit_data = @move_data[8].dup
  2089.     orbit_data[0] *= 100
  2090.     orbit_data[1] *= 100
  2091.     orbit_d = []
  2092.     for i in 0...@move_time / 2
  2093.       @orbit[i] = orbit_data[0]
  2094.       orbit_data[0] /= 2
  2095.       orbit_d[i] = orbit_data[1]
  2096.       orbit_data[1] /= 2
  2097.     end
  2098.     @orbit = @orbit + orbit_d.reverse!
  2099.     @orbit.reverse!
  2100.   end  
  2101.   #--------------------------------------------------------------------------
  2102.   # ● フレーム更新
  2103.   #--------------------------------------------------------------------------
  2104.   def update
  2105.     update_hit_anime if @anime_time != 0
  2106.     update_move if @move_time != 0
  2107.     update_weapon_move if @weapon_data != []
  2108.     update_position
  2109.     update_color
  2110.     self.visible = @battler.sv.weapon_visible
  2111.     super
  2112.   end
  2113.   #--------------------------------------------------------------------------
  2114.   # ● ヒット時の戦闘アニメ
  2115.   #--------------------------------------------------------------------------
  2116.   def update_hit_anime
  2117.     @anime_time -= 1
  2118.     @action_end = true if @anime_time == 0
  2119.   end
  2120.   #--------------------------------------------------------------------------
  2121.   # ● 移動の更新
  2122.   #--------------------------------------------------------------------------
  2123.   def update_move
  2124.     move_data_set if @move_horming && !@hit_position
  2125.     through_set(@move_time, @target_x, @target_y) if @move_time == 1 && !@hit_position
  2126.     @o += @orbit[@move_time - 1] if @orbit[@move_time - 1] != nil
  2127.     @position_x = (@position_x * (@move_time - 1) + @target_x) / @move_time
  2128.     @position_y = (@position_y * (@move_time - 1) + @target_y) / @move_time + @o
  2129.     reset_position
  2130.     set_animation(@move_data[1][0]) if @loop && !animation?
  2131.     @move_time -= 1
  2132.     return if @move_time != 0
  2133.     @action_end = true if !@action_end_cancel
  2134.   end
  2135.   #--------------------------------------------------------------------------
  2136.   # ● 武器の動きを更新
  2137.   #--------------------------------------------------------------------------
  2138.   def update_weapon_move
  2139.     pattern = update_pattern
  2140.     set_battler_position if @move_time == 0 && !@action_end_cancel
  2141.     @real_x = @position_x / 100 + @weapon_move_data[pattern][0] / 100
  2142.     @real_y = @position_y / 100 + @weapon_move_data[pattern][1] / 100
  2143.     @real_zoom_x = @weapon_zoom_data[pattern][0]
  2144.     @real_zoom_y = @weapon_zoom_data[pattern][1]
  2145.     self.angle = @weapon_angle_data[pattern]
  2146.     self.src_rect.set(@weapon_width * pattern, 0, @weapon_width, @weapon_height) if @weapon_data[1] == 2
  2147.   end
  2148.   #--------------------------------------------------------------------------
  2149.   # ● パターンを更新
  2150.   #--------------------------------------------------------------------------
  2151.   def update_pattern
  2152.     return @battler.sv.pattern_w if @count == nil
  2153.     @count -= 1
  2154.     return @pattern if @count != 0
  2155.     @count = @max_count
  2156.     @pattern += 1
  2157.     if !@repeat && @pattern == @max_pattern
  2158.       @pattern = @max_pattern - 1
  2159.     elsif @pattern == @max_pattern
  2160.       @pattern = 0
  2161.     end
  2162.     return @pattern
  2163.   end
  2164.   #--------------------------------------------------------------------------
  2165.   # ● 座標を更新
  2166.   #--------------------------------------------------------------------------
  2167.   def update_position
  2168.     self.x = (@real_x - $sv_camera.x) * $sv_camera.convert / 1000
  2169.     self.y = (@real_y - $sv_camera.y) * $sv_camera.convert / 1000
  2170.     self.x += $sv_camera.sx / 100 unless @battler.sv.h != 0 && @weapon_data != []
  2171.     self.y += $sv_camera.sy / 100 unless @battler.sv.h != 0 && @weapon_data != []
  2172.     self.z = @battler.sv.z + @z_plus - 10
  2173.     self.zoom_x = @real_zoom_x * $sv_camera.zoom
  2174.     self.zoom_y = @real_zoom_y * $sv_camera.zoom
  2175.     self.opacity = @battler.sv.opacity if @battler.sv.opacity_data[4]
  2176.   end
  2177.   #--------------------------------------------------------------------------
  2178.   # ● 貫通の処理
  2179.   #--------------------------------------------------------------------------
  2180.   def through_set(time, target_x, target_y)
  2181.     @hit_anime_id = N03.get_attack_anime_id(@move_data[1][1], @battler)
  2182.     @battler.sv.wait = N03.get_anime_time(@hit_anime_id) if @move_data[10][1]
  2183.     moving_x = (target_x / 100 - @position_x / 100) / time
  2184.     moving_y = (target_y / 100 - @position_y / 100) / time
  2185.     goal_x = $sv_camera.max_left - 100 if moving_x < 0
  2186.     goal_x = Graphics.width + $sv_camera.max_right + 100 if moving_x > 0
  2187.     goal_y = $sv_camera.max_top - 100 if moving_y < 0
  2188.     goal_y = Graphics.height + $sv_camera.max_bottom + 100 if moving_y > 0
  2189.     if goal_x == nil &&  goal_y == nil
  2190.       time = 0
  2191.       reset_position
  2192.     else
  2193.       time = move_calculation(moving_x, moving_y, goal_x, goal_y)
  2194.     end
  2195.     target_x = @position_x + moving_x * time * 100
  2196.     target_y = @position_y + moving_y * time * 100
  2197.     @pre_data = [time, target_x, target_y]
  2198.     @battler.sv.m_a_data.push([@move_data[11], @target_battler, @index, @auto_through_flag, []])
  2199.     @action_end_cancel = true
  2200.     @hit_position = [@real_x, @real_y, self.z]
  2201.   end  
  2202.   #--------------------------------------------------------------------------
  2203.   # ● 到達時間試算
  2204.   #--------------------------------------------------------------------------
  2205.   def move_calculation(moving_x, moving_y, goal_x, goal_y)
  2206.     move_x = @position_x / 100
  2207.     move_y = @position_y / 100
  2208.     time = 0
  2209.     loop do
  2210.       move_x += moving_x
  2211.       move_y += moving_y
  2212.       time += 1
  2213.       return time if moving_x < 0 && move_x < goal_x
  2214.       return time if moving_x > 0 && move_x > goal_x
  2215.       return time if moving_y < 0 && move_y < goal_y
  2216.       return time if moving_y > 0 && move_y > goal_y
  2217.     end
  2218.   end   
  2219.   #--------------------------------------------------------------------------
  2220.   # ● ミス時に消える処理から貫通処理に変換
  2221.   #--------------------------------------------------------------------------
  2222.   def through_change
  2223.     @action_end_cancel = false
  2224.     @through = true
  2225.     @move_time = @pre_data[0]
  2226.     @target_x = @pre_data[1]
  2227.     @target_y = @pre_data[2]
  2228.     @pre_data = nil
  2229.   end  
  2230.   #--------------------------------------------------------------------------
  2231.   # ● SE とフラッシュのタイミング処理
  2232.   #--------------------------------------------------------------------------
  2233.   def animation_process_timing(timing)
  2234.     return if !@timing_targets
  2235.     se_flag = true
  2236.     se_flag = @se_flag if @se_flag != nil
  2237.     for target in @timing_targets
  2238.       target.sv.timing.push([se_flag, timing.dup])
  2239.       se_flag = false if @animation.position == 3
  2240.     end  
  2241.   end
  2242.   #--------------------------------------------------------------------------
  2243.   # ● 色調の更新
  2244.   #--------------------------------------------------------------------------
  2245.   def update_color
  2246.     return if @battler.sv.color == []
  2247.     self.color.set(@battler.sv.color[0], @battler.sv.color[1], @battler.sv.color[2], @battler.sv.color[3])
  2248.   end
  2249.   #--------------------------------------------------------------------------
  2250.   # ● 解放
  2251.   #--------------------------------------------------------------------------
  2252.   def dispose
  2253.     super
  2254.     self.bitmap.dispose if self.bitmap != nil
  2255.   end
  2256. end

  2257. #==============================================================================
  2258. # ■ Sprite_Battle_Picture
  2259. #------------------------------------------------------------------------------
  2260. #  ピクチャ表示用のスプライトです。
  2261. #==============================================================================
  2262. class Sprite_Battle_Picture < Sprite
  2263.   #--------------------------------------------------------------------------
  2264.   # ● 公開インスタンス変数 
  2265.   #--------------------------------------------------------------------------
  2266.   attr_accessor   :action_end           # 終了フラグ
  2267.   #--------------------------------------------------------------------------
  2268.   # ● オブジェクト初期化
  2269.   #--------------------------------------------------------------------------
  2270.   def initialize(viewport = nil)
  2271.     super(viewport)
  2272.     @action_end = false
  2273.     self.ox = 0
  2274.   end
  2275.   #--------------------------------------------------------------------------
  2276.   # ● セット
  2277.   #--------------------------------------------------------------------------
  2278.   def set(battler)
  2279.     @battler = battler
  2280.     @data = @battler.sv.effect_data.shift
  2281.     @time = @data[4]
  2282.     @mirror = $sv_camera.mirror
  2283.     @mirror = false if !@data[8]
  2284.     self.opacity = @data[6][0]
  2285.     @s_x = @data[2][0] if @data[2] != []
  2286.     @s_x = Graphics.width - @data[2][0]  if @data[2] != [] && @mirror
  2287.     @s_y = @data[2][1] if @data[2] != []
  2288.     @e_x = @data[3][0] if @data[3] != []
  2289.     @e_x = Graphics.width - @data[3][0] if @data[3] != [] && @mirror
  2290.     @e_y = @data[3][1] if @data[3] != []
  2291.     @s_x = self.x if @data[2] == []
  2292.     @s_y = self.y if @data[2] == []
  2293.     @e_x = self.x if @data[3] == []
  2294.     @e_y = self.y if @data[3] == []
  2295.     self.x = @s_x
  2296.     self.y = @s_y
  2297.     return @action_end = true if @time == 0
  2298.     @move_x = (@e_x * 1.0 - @s_x) / @time
  2299.     @move_y = (@e_y * 1.0 - @s_y) / @time
  2300.     self.z = @data[5]
  2301.     return set_plane(battler) if @data[7] != []
  2302.     self.bitmap = Cache.picture(@data[9]) if !bitmap or @data[9] != ""
  2303.     return @action_end = true if !bitmap
  2304.     self.mirror = @mirror
  2305.     self.ox = self.bitmap.width if @mirror
  2306.   end
  2307.   #--------------------------------------------------------------------------
  2308.   # ● プレーン移行
  2309.   #--------------------------------------------------------------------------
  2310.   def set_plane(battler)
  2311.     @viewport = Viewport.new(@data[2][0],@data[2][1],@data[7][0],@data[7][1]) if !@viewport
  2312.     viewport = @viewport
  2313.     @plane = Plane.new(viewport) if !@plane
  2314.     @plane.bitmap = Cache.picture(@data[9]) if [email protected] or @data[9] != ""
  2315.     return @action_end = true if [email protected]
  2316.     @plane.ox = @data[7][0]
  2317.     @plane.oy = @data[7][1]
  2318.     @plane.opacity = @data[6][0]
  2319.     @move_x = @remain_move[0] if @data[2] == @data[3]
  2320.     @move_y = @remain_move[1] if @data[2] == @data[3]
  2321.     @remain_move = [@move_x, @move_y]
  2322.   end
  2323.   #--------------------------------------------------------------------------
  2324.   # ● フレーム更新
  2325.   #--------------------------------------------------------------------------
  2326.   def update
  2327.     @action_end = true if [email protected]
  2328.     return if @time == 0
  2329.     return if @action_end
  2330.     @time -= 1
  2331.     return plane_update if @plane
  2332.     super
  2333.     self.x += @move_x
  2334.     self.y += @move_y
  2335.     self.opacity += @data[6][1]
  2336.     return if @time != 1
  2337.     self.x = @e_x
  2338.     self.y = @e_y
  2339.     @time = 0
  2340.   end
  2341.   #--------------------------------------------------------------------------
  2342.   # ● フレーム更新
  2343.   #--------------------------------------------------------------------------
  2344.   def plane_update
  2345.     @plane.ox += @move_x
  2346.     @plane.oy += @move_y
  2347.     @plane.opacity += @data[6][1]
  2348.     @time = @data[4] if @time == 0
  2349.   end
  2350.   #--------------------------------------------------------------------------
  2351.   # ● 解放
  2352.   #--------------------------------------------------------------------------
  2353.   def dispose
  2354.     bitmap.dispose if bitmap
  2355.     @plane.dispose if @plane
  2356.     @viewport.dispose if @viewport
  2357.     super
  2358.   end
  2359. end

  2360. #==============================================================================
  2361. # ■ Sprite_Back_Picture
  2362. #------------------------------------------------------------------------------
  2363. #  周期ピクチャ用のスプライトです。
  2364. #==============================================================================
  2365. class Sprite_Back_Picture < Plane
  2366.   #--------------------------------------------------------------------------
  2367.   # ● 公開インスタンス変数 
  2368.   #--------------------------------------------------------------------------
  2369.   attr_accessor   :action_end           # 終了フラグ
  2370.   #--------------------------------------------------------------------------
  2371.   # ● オブジェクト初期化
  2372.   #--------------------------------------------------------------------------
  2373.   def initialize(viewport = nil, index)
  2374.     super(viewport)
  2375.     @index = index
  2376.     @real_x = 0
  2377.     @real_y = 0
  2378.     @real_opacity = 0
  2379.     @move_x = 0
  2380.     @move_y = 0
  2381.     @move_opacity = 0
  2382.     @time = 0
  2383.     @switche = 0
  2384.     @action_end = false
  2385.   end
  2386.   #--------------------------------------------------------------------------
  2387.   # ● セットアップ
  2388.   #--------------------------------------------------------------------------
  2389.   def setup(data)
  2390.     self.bitmap = Cache.picture(data[9])
  2391.     self.z = data[6]
  2392.     @switche = data[1]
  2393.     mirror = $sv_camera.mirror
  2394.     mirror = false if !data[8]
  2395.     @move_x = data[3][0]
  2396.     @move_x *= -1 if mirror
  2397.     @move_y = data[3][1]
  2398.     @time = data[4]
  2399.     @time = -1 if @time == 0
  2400.     @real_opacity = (data[5][0] + 1) * 100
  2401.     @move_opacity = data[5][1]
  2402.     @start_opacity = data[5][0]
  2403.     @shake_ok = data[7]
  2404.   end
  2405.   #--------------------------------------------------------------------------
  2406.   # ● フレーム更新
  2407.   #--------------------------------------------------------------------------
  2408.   def update
  2409.     update_picture if @time != 0
  2410.     self.ox = $sv_camera.x - @real_x
  2411.     self.oy = $sv_camera.y - @real_y
  2412.     if @shake_ok
  2413.       self.ox -= $sv_camera.sx / 100
  2414.       self.oy -= $sv_camera.sy / 100
  2415.     end
  2416.     self.ox *= $sv_camera.zoom
  2417.     self.oy *= $sv_camera.zoom
  2418.     self.zoom_x = @zoom_x * $sv_camera.zoom
  2419.     self.zoom_y = @zoom_y * $sv_camera.zoom
  2420.     self.opacity = @real_opacity / 100
  2421.     @move_opacity *= -1 if self.opacity == 255 or self.opacity <= @start_opacity
  2422.     @switche
  2423.     @action_end = true if @switche > 0 && !$game_switches[@switche]
  2424.     @action_end = true if @switche < 0 && !$sv_camera.switches[@switche.abs]
  2425.   end
  2426.   #--------------------------------------------------------------------------
  2427.   # ● ピクチャの更新
  2428.   #--------------------------------------------------------------------------
  2429.   def update_picture
  2430.     @real_x += @move_x / 100
  2431.     @real_y += @move_y / 100
  2432.     @real_x = 0 if @real_x >= self.bitmap.width or @real_x <= -self.bitmap.width
  2433.     @real_y = 0 if @real_y >= self.bitmap.height or @real_y <= -self.bitmap.height
  2434.     @zoom_x = 1
  2435.     @zoom_y = 1
  2436.     @real_opacity += @move_opacity
  2437.     @time -= 1
  2438.     @time = -1 if @time < -100
  2439.   end
  2440. end

  2441. #==============================================================================
  2442. # ■ Sprite_Back_Picture
  2443. #------------------------------------------------------------------------------
  2444. #  ダメージ表示のスプライトです。
  2445. #==============================================================================
  2446. class Sprite_Damage < Sprite
  2447.   #--------------------------------------------------------------------------
  2448.   # ● 公開インスタンス変数 
  2449.   #--------------------------------------------------------------------------
  2450.   attr_reader   :action_end                  # POP終了フラグ
  2451.   #--------------------------------------------------------------------------
  2452.   # ● オブジェクト初期化
  2453.   #--------------------------------------------------------------------------
  2454.   def initialize(viewport = nil, battler)
  2455.     super(viewport)
  2456.     @battler = battler
  2457.     @time = 0
  2458.     return @action_end = true if !@battler
  2459.     @direction = -1
  2460.     @direction *= -1 if @battler.actor?
  2461.     @direction *= -1 if $sv_camera.mirror
  2462.     set_state
  2463.     set_damage
  2464.     update
  2465.   end
  2466.   #--------------------------------------------------------------------------
  2467.   # ● ステート表示
  2468.   #--------------------------------------------------------------------------
  2469.   def set_state
  2470.     return if !N03::STATE_POP
  2471.     states = @battler.result.added_state_objects
  2472.     states.delete($data_states[@battler.death_state_id]) if @battler.result.hp_damage != 0
  2473.     return if states == []
  2474.     return if @battler.sv.add_state == @battler.result.added_state_objects
  2475.     @battler.sv.add_state = states.dup
  2476.     @st = []
  2477.     @st_base = []
  2478.     for i in 0...states.size
  2479.       @st[i] = Sprite.new
  2480.       bitmap_state(@st[i], states[i])
  2481.       @st_base[i] = []
  2482.       @st_base[i][0] = @direction * (-20 + 5 * i) + @battler.sv.x / 100
  2483.       @st_base[i][1] = -40 - @state_height * i + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
  2484.       @st[i].z = 1000 + i
  2485.       @st[i].opacity = 0
  2486.     end
  2487.     @time = @pop_time = 80
  2488.   end   
  2489.   #--------------------------------------------------------------------------
  2490.   # ● ステート画像
  2491.   #--------------------------------------------------------------------------
  2492.   def bitmap_state(state, state_object)
  2493.     name = state_object.name
  2494.     state.bitmap = Cache.system("Iconset").dup
  2495.     state.src_rect.set(state_object.icon_index % 16 * 24, state_object.icon_index / 16 * 24, 24, 24)
  2496.     @state_height = 24
  2497.   end
  2498.   #--------------------------------------------------------------------------
  2499.   # ● ダメージ表示
  2500.   #--------------------------------------------------------------------------
  2501.   def hit_count
  2502.     for i in [email protected]
  2503.       if @battler.sv.hit[i] == nil
  2504.         @hit = i
  2505.         return @battler.sv.hit[i] = @hit
  2506.       end
  2507.     end
  2508.     @hit = @battler.sv.hit.size
  2509.     @battler.sv.hit.push(@hit)
  2510.   end  
  2511.   #--------------------------------------------------------------------------
  2512.   # ● ダメージ表示
  2513.   #--------------------------------------------------------------------------
  2514.   def set_damage
  2515.     return @action_end = true if !N03::DAMAGE_POP
  2516.     damage = @battler.result.hp_damage if @battler.result.hp_damage != 0
  2517.     damage = @battler.result.hp_drain  if @battler.result.hp_drain  != 0
  2518.     damage = @battler.result.mp_damage if @battler.result.mp_damage != 0
  2519.     damage = @battler.result.mp_drain  if @battler.result.mp_drain  != 0
  2520.     damage = @battler.result.tp_damage if @battler.result.tp_damage != 0
  2521.     if !damage or damage == 0
  2522.       @action_end = true if @st == nil
  2523.       return # ステートだけPOPする設定を考慮して@action_endは返さない
  2524.     end
  2525.     hit_count
  2526.     #@hit = @battler.sv.hit
  2527.     #@battler.sv.hit += 1 if damage != 0
  2528.     file = N03::DAMAGE_PLUS if damage > 0
  2529.     file = N03::DAMAGE_MINUS if damage < 0
  2530.     add_file = N03::DAMAGE_MP if @battler.result.mp_damage != 0
  2531.     add_file = N03::DAMAGE_TP if @battler.result.tp_damage != 0
  2532.     adjust_x = N03::DAMAGE_ADJUST
  2533.     @num = []
  2534.     @num_base = []
  2535.     damage = damage.abs
  2536.     max_num = damage.to_s.size
  2537.     max_num += 1 if add_file != nil
  2538.     for i in 0...max_num
  2539.       @num[i] = Sprite.new
  2540.       if add_file != nil && i == max_num - 1
  2541.         @num[i].bitmap = Cache.system(add_file)
  2542.         cw = (damage % (10 * 10 ** i))/(10 ** i)
  2543.         sw = 0 if sw == nil
  2544.       else
  2545.         @num[i].bitmap = Cache.system(file)
  2546.         cw = (damage % (10 * 10 ** i))/(10 ** i)
  2547.         sw = @num[i].bitmap.width / 10
  2548.         @num[i].src_rect.set(cw * sw, 0, sw, @num[i].bitmap.height)
  2549.       end
  2550.       @num_base[i] = []
  2551.       @num_base[i][0] = (sw + adjust_x) * i * -1 + (@battler.sv.x / 100)
  2552.       @num_base[i][1] =  -(@num[i].bitmap.height / 3) - i * 2 - @hit * 2 + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
  2553.       @num_base[i][0] -= @num[i].bitmap.width / 2 - adjust_x if add_file != nil && i == max_num - 1
  2554.       @num[i].z = 1000 + i + @hit * 10
  2555.     end
  2556.     @time = @pop_time = 80
  2557.   end
  2558.   #--------------------------------------------------------------------------
  2559.   # ● フレーム更新
  2560.   #--------------------------------------------------------------------------
  2561.   def update
  2562.     return if @time == 0
  2563.     for i in [email protected] do update_state_move(@st[i], i) end if @st != nil
  2564.     for i in [email protected] do update_num_move(@num[i], i) end if @num != nil
  2565.     @time -= 1
  2566.     @action_end = true if @time == 0
  2567.   end
  2568.   #--------------------------------------------------------------------------
  2569.   # ● ステート画像の更新
  2570.   #--------------------------------------------------------------------------
  2571.   def update_state_move(state, index)
  2572.     min = @pop_time - index * 2
  2573.     case @time
  2574.     when min-15..min
  2575.       @st_base[index][0] += @direction
  2576.       state.opacity += 25
  2577.     when min-80..min-50
  2578.       @st_base[index][0] += @direction
  2579.       state.opacity -= 25
  2580.     end
  2581.     state.x = (@st_base[index][0] - $sv_camera.x) * $sv_camera.zoom
  2582.     state.y = (@st_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  2583.   end
  2584.   #--------------------------------------------------------------------------
  2585.   # ● 数値の更新
  2586.   #--------------------------------------------------------------------------
  2587.   def update_num_move(num, index)
  2588.     min = @pop_time - index * 2
  2589.     case @time
  2590.     when min-1..min
  2591.       @num_base[index][0] += @direction * @hit
  2592.       @num_base[index][1] -= 5 + @hit * 2
  2593.     when min-3..min-2
  2594.       @num_base[index][0] += @direction * @hit
  2595.       @num_base[index][1] -= 4 + @hit * 2
  2596.     when min-6..min-4
  2597.       @num_base[index][0] += @direction
  2598.       @num_base[index][1] -= 3 + @hit * 2
  2599.     when min-14..min-7
  2600.       @num_base[index][0] += @direction
  2601.       @num_base[index][1] += 2
  2602.     when min-17..min-15
  2603.       @num_base[index][1] -= 2 + @hit * 2
  2604.     when min-23..min-18
  2605.       @num_base[index][1] += 1
  2606.     when min-27..min-24
  2607.       @num_base[index][1] -= 1
  2608.     when min-30..min-28
  2609.       @num_base[index][1] += 1
  2610.     when min-33..min-31
  2611.       @num_base[index][1] -= 1
  2612.     when min-36..min-34
  2613.       @num_base[index][1] += 1
  2614.     end
  2615.     num.x = (@num_base[index][0] - $sv_camera.x) * $sv_camera.zoom
  2616.     num.y = (@num_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  2617.     num.opacity = 256 - (12 - @time) * 32
  2618.     num.visible = false if @time == 0
  2619.   end
  2620.   #--------------------------------------------------------------------------
  2621.   # ● 解放
  2622.   #--------------------------------------------------------------------------
  2623.   def dispose
  2624.     @battler.sv.hit[@hit] = nil if @hit
  2625.     bitmap.dispose if bitmap
  2626.     for i in [email protected] do @num[i].dispose end if @num != nil
  2627.     for i in [email protected] do @st[i].dispose end if @st != nil
  2628.     super
  2629.   end
  2630. end

  2631. #==============================================================================
  2632. # ■ Window_Skill_name
  2633. #------------------------------------------------------------------------------
  2634. #  スキル名を表示するウィンドウです。
  2635. #==============================================================================
  2636. class Window_Skill_name < Window_Base
  2637.   #--------------------------------------------------------------------------
  2638.   # ● オブジェクト初期化
  2639.   #--------------------------------------------------------------------------
  2640.   def initialize(text)
  2641.     super(0, 0, Graphics.width, line_height + standard_padding * 2)
  2642.     draw_text(4, 0, Graphics.width - 64, line_height,text, 1)
  2643.   end
  2644. end

  2645. #==============================================================================
  2646. # ■ Spriteset_Sideview
  2647. #------------------------------------------------------------------------------
  2648. #  サイドビュー独自のスプライトをまとめたクラスです。
  2649. #==============================================================================
  2650. class Spriteset_Sideview
  2651.   #--------------------------------------------------------------------------
  2652.   # ● オブジェクト初期化
  2653.   #--------------------------------------------------------------------------
  2654.   def initialize(viewport)
  2655.     @viewport = viewport
  2656.     @weapons = []
  2657.     @pictures = []
  2658.     @back_pic = []
  2659.     @damage = []
  2660.     $sv_camera.setup
  2661.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup)
  2662.   end
  2663.   #--------------------------------------------------------------------------
  2664.   # ● フレーム更新
  2665.   #--------------------------------------------------------------------------
  2666.   def update
  2667.     update_battler_data
  2668.     update_damage
  2669.     update_pictures
  2670.     update_back_pic
  2671.     update_weapons
  2672.   end  
  2673.   #--------------------------------------------------------------------------
  2674.   # ● バトラーデータの更新
  2675.   #--------------------------------------------------------------------------
  2676.   def update_battler_data
  2677.     for battler in $game_party.battle_members + $game_troop.members
  2678.       weapon_end(battler) if battler.sv.weapon_end
  2679.       next if battler.sv.effect_data == []
  2680.       for effect_data in battler.sv.effect_data do set_effects(battler, effect_data) end
  2681.     end
  2682.   end
  2683.   #--------------------------------------------------------------------------
  2684.   # ● ダメージ画像の更新
  2685.   #--------------------------------------------------------------------------
  2686.   def update_damage
  2687.     for i in [email protected]
  2688.       next if @damage[i] == nil
  2689.       @damage[i].update if @damage[i] != nil
  2690.       next if !@damage[i].action_end
  2691.       @damage[i].dispose
  2692.       @damage[i] = nil
  2693.     end
  2694.   end
  2695.   #--------------------------------------------------------------------------
  2696.   # ● ピクチャアクションの更新
  2697.   #--------------------------------------------------------------------------
  2698.   def update_pictures
  2699.     for i in [email protected]
  2700.       next if @pictures[i] == nil
  2701.       @pictures[i].update if @pictures[i] != nil
  2702.       next if !@pictures[i].action_end
  2703.       @pictures[i].dispose
  2704.       @pictures[i] = nil
  2705.     end
  2706.   end
  2707.   #--------------------------------------------------------------------------
  2708.   # ● 周期ピクチャの更新
  2709.   #--------------------------------------------------------------------------
  2710.   def update_back_pic
  2711.     set_back_pic if $sv_camera.program_picture != []
  2712.     for i in 0...@back_pic.size
  2713.       next if @back_pic[i] == nil
  2714.       @back_pic[i].update if @back_pic[i] != nil
  2715.       next if !@back_pic[i].action_end
  2716.       @back_pic[i].dispose
  2717.       @back_pic[i] = nil
  2718.     end
  2719.   end
  2720.   #--------------------------------------------------------------------------
  2721.   # ● 武器アクションの更新
  2722.   #--------------------------------------------------------------------------
  2723.   def update_weapons
  2724.     for i in [email protected]
  2725.       next if @weapons[i] == nil
  2726.       @weapons[i].update if @weapons[i] != nil
  2727.       next if !@weapons[i].action_end
  2728.       @weapons[i].dispose
  2729.       @weapons[i] = nil
  2730.     end
  2731.   end
  2732.   #--------------------------------------------------------------------------
  2733.   # ● ダメージ実行
  2734.   #--------------------------------------------------------------------------
  2735.   def set_damage_pop(target)
  2736.     for i in [email protected]
  2737.       next if @damage[i] != nil
  2738.       return @damage[i] = Sprite_Damage.new(@viewport, target)
  2739.     end
  2740.     @damage.push(Sprite_Damage.new(@viewport, target))
  2741.   end
  2742.   #--------------------------------------------------------------------------
  2743.   # ● 周期ピクチャ実行
  2744.   #--------------------------------------------------------------------------
  2745.   def set_back_pic
  2746.     for data in $sv_camera.program_picture
  2747.       if @back_pic[data[2]] != nil
  2748.         @back_pic[data[2]].dispose
  2749.         @back_pic[data[2]] = nil
  2750.       end
  2751.       @back_pic[data[2]] = Sprite_Back_Picture.new(@viewport, data[2])
  2752.       @back_pic[data[2]].setup(data)
  2753.     end
  2754.     $sv_camera.program_picture = []
  2755.   end
  2756.   #--------------------------------------------------------------------------
  2757.   # ● エフェクト開始
  2758.   #--------------------------------------------------------------------------
  2759.   def set_effects(battler, effect_data)
  2760.     case effect_data[0]
  2761.     when "pic" ; set_pictures(battler, effect_data)
  2762.     when  "wp" ; set_weapons(battler,  true)
  2763.     when "m_a" ; set_weapons(battler, false)
  2764.     end
  2765.   end
  2766.   #--------------------------------------------------------------------------
  2767.   # ● ピクチャアクション実行
  2768.   #--------------------------------------------------------------------------
  2769.   def set_pictures(battler, effect_data)
  2770.     @pictures[effect_data[1]] = Sprite_Battle_Picture.new if @pictures[effect_data[1]] == nil
  2771.     @pictures[effect_data[1]].set(battler)
  2772.   end
  2773.   #--------------------------------------------------------------------------
  2774.   # ● 武器アクション実行
  2775.   #--------------------------------------------------------------------------
  2776.   def set_weapons(battler, weapon_flag, test = true)
  2777.     for i in [email protected]
  2778.       next if @weapons[i] != nil
  2779.       @weapons[i] = Sprite_Weapon.new(@viewport, i, battler)
  2780.       battler.sv.weapon_index.push(i) if weapon_flag
  2781.       return i
  2782.     end
  2783.     @weapons.push(Sprite_Weapon.new(@viewport, @weapons.size, battler))
  2784.     battler.sv.weapon_index.push(@weapons.size - 1) if weapon_flag
  2785.     return @weapons.size - 1
  2786.   end
  2787.   #--------------------------------------------------------------------------
  2788.   # ● バトラーの武器アクション終了
  2789.   #--------------------------------------------------------------------------
  2790.   def weapon_end(battler)
  2791.     battler.sv.weapon_end = false
  2792.     for index in battler.sv.weapon_index
  2793.       weapon_index = battler.sv.weapon_index.shift
  2794.       @weapons[weapon_index].dispose if @weapons[weapon_index] != nil
  2795.       @weapons[weapon_index] = nil
  2796.     end
  2797.     battler.sv.weapon_index.compact!
  2798.   end  
  2799.   #--------------------------------------------------------------------------
  2800.   # ● ヒット時の戦闘アニメ実行
  2801.   #--------------------------------------------------------------------------
  2802.   def set_hit_animation(battler, weapon_index, hit_targets, miss)
  2803.     weapon = @weapons[weapon_index]
  2804.     for target in hit_targets
  2805.       next @weapons[@hit_index].timing_battler_set(target) if @hit_index != nil
  2806.       @hit_index = set_weapons(battler, false, false)
  2807.       @weapons[@hit_index].set_hit_animation(weapon.hit_position, weapon.hit_anime_id, target)
  2808.     end
  2809.     @hit_index = nil
  2810.     if !weapon.through && !miss
  2811.       @weapons[weapon_index].dispose
  2812.       @weapons[weapon_index] = nil
  2813.     else
  2814.       @weapons[weapon_index].through_change
  2815.     end
  2816.   end
  2817.   #--------------------------------------------------------------------------
  2818.   # ● サイドビューデータの初期化
  2819.   #--------------------------------------------------------------------------
  2820.   def reset_sideview
  2821.     $sv_camera.reset
  2822.     for member in $game_troop.members + $game_party.battle_members do member.sv.reset end
  2823.   end  
  2824.   #--------------------------------------------------------------------------
  2825.   # ● 解放
  2826.   #--------------------------------------------------------------------------
  2827.   def dispose
  2828.     dispose_effects(@weapons)
  2829.     dispose_effects(@pictures)
  2830.     dispose_effects(@back_pic)
  2831.     dispose_effects(@damage)
  2832.     reset_sideview
  2833.   end
  2834.   #--------------------------------------------------------------------------
  2835.   # ● エフェクト画像の解放
  2836.   #--------------------------------------------------------------------------
  2837.   def dispose_effects(effects)
  2838.     for i in 0...effects.size
  2839.       effects[i].dispose if effects[i] != nil
  2840.       effects[i] = nil
  2841.     end
  2842.   end
  2843. end


  2844. #==============================================================================
  2845. # ■ Sprite_Battle_Back
  2846. #------------------------------------------------------------------------------
  2847. #  戦闘背景用のスプライトです。
  2848. #==============================================================================
  2849. class Sprite_Battle_Back < Plane
  2850.   #--------------------------------------------------------------------------
  2851.   # ● オブジェクト初期化
  2852.   #--------------------------------------------------------------------------
  2853.   def initialize(viewport = nil, index, battleback_name)
  2854.     super(viewport)
  2855.     @index = index
  2856.     if @index == 1
  2857.       data = N03::FLOOR1_DATA[battleback_name]
  2858.       data = N03::FLOOR1_DATA["全Battlebacks1"] if data == nil
  2859.     elsif @index == 2
  2860.       data = N03::FLOOR2_DATA[battleback_name]
  2861.       data = N03::FLOOR2_DATA["全Battlebacks2"] if data == nil
  2862.     end   
  2863.     data = data.dup
  2864.     @adjust_position = data[0]
  2865.     @zoom_x = data[1][0] / 100.0
  2866.     @zoom_y = data[1][1] / 100.0
  2867.     @shake_on = data[2]
  2868.     $game_switches[data[3]] = true if data[3] > 0
  2869.     $sv_camera.switches[data[3].abs] = true if data[3] < 0
  2870.     reset_scroll
  2871.     reset_back_data(battleback_name)
  2872.   end
  2873.   #--------------------------------------------------------------------------
  2874.   # ● 背景スクロールを初期化
  2875.   #--------------------------------------------------------------------------
  2876.   def reset_scroll
  2877.     @scroll_x = 0
  2878.     @scroll_y = 0
  2879.     @move_x = 0
  2880.     @move_y = 0
  2881.   end
  2882.   #--------------------------------------------------------------------------
  2883.   # ● 背景データを初期化
  2884.   #--------------------------------------------------------------------------
  2885.   def reset_back_data(battleback_name)
  2886.     @back_data = []
  2887.     @active_data = ["scroll",0, @move_x, @move_y, false, battleback_name,""]
  2888.     start_back_data(@active_data)
  2889.   end  
  2890.   #--------------------------------------------------------------------------
  2891.   # ● 背景画像のセッティング
  2892.   #--------------------------------------------------------------------------
  2893.   def set_graphics(new_bitmap)
  2894.     self.bitmap = new_bitmap
  2895.     @base_x = (self.bitmap.width * @zoom_x - Graphics.width) / 2 + @adjust_position[0]
  2896.     @base_y = (self.bitmap.height * @zoom_y - Graphics.height) / 2 + @adjust_position[1]
  2897.     # 限界座標を取得
  2898.     max_top =  0
  2899.     max_bottom = self.bitmap.height * @zoom_y - Graphics.height
  2900.     max_left = 0
  2901.     max_right = self.bitmap.width * @zoom_x - Graphics.width
  2902.     exist = true
  2903.     exist = false if self.bitmap.height == 32 && self.bitmap.width == 32
  2904.     $sv_camera.setting(@index, [max_top, max_bottom, max_left, max_right, @base_x, @base_y,exist])
  2905.   end
  2906.   #--------------------------------------------------------------------------
  2907.   # ● フレーム更新
  2908.   #--------------------------------------------------------------------------
  2909.   def update
  2910.     return if !bitmap
  2911.     update_back_data
  2912.     update_scroll unless @move_x == 0 && @move_y == 0
  2913.     update_color
  2914.     update_position
  2915.     update_back_adjust if @bt_back != nil
  2916.     create_back_adjust if @bt_back == nil && !@active_data[10] && @scroll_x == 0 && @scroll_y == 0
  2917.   end
  2918.   #--------------------------------------------------------------------------
  2919.   # ● 背景データを更新
  2920.   #--------------------------------------------------------------------------
  2921.   def update_back_data
  2922.     delete = true if @active_data[1] > 0 && !$game_switches[@active_data[1]]
  2923.     delete = true if @active_data[1] < 0 && !$sv_camera.switches[@active_data[1].abs]
  2924.     return if !delete
  2925.     for i in 0...@back_data.size
  2926.       @back_data[i] = nil if @back_data[i][1] > 0 && !$game_switches[@back_data[i][1]]
  2927.       @back_data[i] = nil if @back_data[i][1] < 0 && !$sv_camera.switches[@back_data[i][1].abs]
  2928.     end
  2929.     @back_data.compact!
  2930.     next_back_data
  2931.   end
  2932.   #--------------------------------------------------------------------------
  2933.   # ● 次の背景データをセット
  2934.   #--------------------------------------------------------------------------
  2935.   def next_back_data
  2936.     @back_data.delete(@active_data[11]) if @active_data[11] != nil
  2937.     @back_data.push(@active_data[11]) if @active_data[11] != nil
  2938.     @active_data = nil
  2939.     data = @back_data.pop
  2940.     @back_data = [@active_data] if @back_data.size == 0
  2941.     start_back_data(data)
  2942.   end  
  2943.   #--------------------------------------------------------------------------
  2944.   # ● 背景データを実行
  2945.   #--------------------------------------------------------------------------
  2946.   def start_back_data(data)
  2947.     return if back_data_remain(data)
  2948.     bt_back_dispose
  2949.     pre_active_data = @active_data
  2950.     @active_data[8] = [@back_name, @move_x, @move_y, @scroll_x, @scroll_y] if @active_data != nil
  2951.     @back_data.push(@active_data)     if @active_data != nil
  2952.     @active_data = data.dup
  2953.     @active_data[5] = @back_name      if @active_data[5] == ""
  2954.     @active_data[9] = set_back_adjust if @active_data[9] == nil
  2955.     back_data_scroll_on               if @active_data[8] == nil && @active_data[9][0] == false
  2956.     set_remain_back_data              if @active_data[8] != nil
  2957.     create_back(@active_data[5])      if @active_data[9][0] == false
  2958.     create_back_adjust                if @active_data[10]
  2959.     @active_data[11] = pre_active_data if pre_active_data && @active_data[7] == false
  2960.   end  
  2961.   #--------------------------------------------------------------------------
  2962.   # ● 背景データの保留
  2963.   #--------------------------------------------------------------------------
  2964.   def back_data_remain(data)
  2965.     remain = false
  2966.     remain = true if data[6] != "" && @active_data != nil && @active_data[9] != nil && @active_data[9][0] != false
  2967.     remain = true if @active_data != nil && @active_data[7] == false
  2968.     return remain if !remain
  2969.     @remain = true
  2970.     @back_data.push(data)
  2971.     return remain
  2972.   end  
  2973.   #--------------------------------------------------------------------------
  2974.   # ● 背景変更補正データをセット
  2975.   #--------------------------------------------------------------------------
  2976.   def set_back_adjust
  2977.     bt_adjust = []
  2978.     sign = -1
  2979.     if @active_data[6] == ""
  2980.       reset_scroll if @active_data[3][0] == 0 &&  @active_data[3][1] == 0
  2981.       bt_adjust = [false,false,0,0]
  2982.       return bt_adjust
  2983.     elsif @move_x != 0 or @active_data[3][0] != 0
  2984.       sign = 1 if @move_x < 0
  2985.       bt_adjust[0] = [self.bitmap.width * @zoom_x * sign, 0]
  2986.       bt_adjust[1] = [self.bitmap.width * @zoom_x * sign * 2, 0]
  2987.     elsif @move_y != 0 or @active_data[3][1] != 0
  2988.       sign = 1 if @move_y < 0
  2989.       bt_adjust[0] = [0, self.bitmap.height * @zoom_y * sign]
  2990.       bt_adjust[1] = [0, self.bitmap.height * @zoom_y * sign * 2]
  2991.     else
  2992.       reset_scroll if @active_data[3][0] == 0 &&  @active_data[3][1] == 0
  2993.       bt_adjust = [false,false,0,0]
  2994.       return bt_adjust
  2995.     end
  2996.     bt_adjust[2] = [bt_adjust[0][0], bt_adjust[0][1]]
  2997.     return bt_adjust
  2998.   end
  2999.   #--------------------------------------------------------------------------
  3000.   # ● 背景スクロールデータを実行
  3001.   #--------------------------------------------------------------------------
  3002.   def back_data_scroll_on
  3003.     mirror = $sv_camera.mirror
  3004.     mirror = false if !@active_data[4]
  3005.     @move_x = @active_data[3][0]
  3006.     @move_x *= -1 if mirror
  3007.     @move_y = @active_data[3][1]
  3008.   end
  3009.   #--------------------------------------------------------------------------
  3010.   # ● 保持している背景データを実行
  3011.   #--------------------------------------------------------------------------
  3012.   def set_remain_back_data
  3013.     return back_data_scroll_on if @move_x != 0 or @move_y != 0
  3014.     create_back(@active_data[8][0])
  3015.     @move_x    = @active_data[8][1]
  3016.     @move_y    = @active_data[8][2]
  3017.     @scroll_x  = @active_data[8][3]
  3018.     @scroll_y  = @active_data[8][4]
  3019.   end  
  3020.   #--------------------------------------------------------------------------
  3021.   # ● 背景画像の作成
  3022.   #--------------------------------------------------------------------------
  3023.   def create_back(back_name)
  3024.     return if back_name == @back_name or back_name == ""
  3025.     self.bitmap = Cache.battleback1(back_name) if @index == 1
  3026.     self.bitmap = Cache.battleback2(back_name) if @index == 2
  3027.     @back_name = back_name
  3028.   end  
  3029.   #--------------------------------------------------------------------------
  3030.   # ● 背景変更補正画像の作成
  3031.   #--------------------------------------------------------------------------
  3032.   def create_back_adjust
  3033.     return if @active_data[9][0] == false
  3034.     @active_data[10] = true
  3035.     mirror = $sv_camera.mirror
  3036.     mirror = false if !@active_data[4]
  3037.     @bt_back = []
  3038.     @bt_back[0] = Sprite.new(viewport)
  3039.     @bt_back[0].bitmap = Cache.battleback1(@active_data[6]) if @index == 1
  3040.     @bt_back[0].bitmap = Cache.battleback2(@active_data[6]) if @index == 2
  3041.     @bt_back[0].mirror = mirror
  3042.     @bt_back[1] = Sprite.new(viewport)
  3043.     @bt_back[1].bitmap = Cache.battleback1(@active_data[5]) if @index == 1
  3044.     @bt_back[1].bitmap = Cache.battleback2(@active_data[5]) if @index == 2
  3045.     @bt_back[1].mirror = mirror
  3046.   end
  3047.   #--------------------------------------------------------------------------
  3048.   # ● 背景スクロールの更新
  3049.   #--------------------------------------------------------------------------
  3050.   def update_scroll
  3051.     @scroll_x += @move_x
  3052.     @scroll_y += @move_y
  3053.     @scroll_x = 0 if @scroll_x / 100 >= self.bitmap.width * @zoom_x or @scroll_x / 100 <= -self.bitmap.width * @zoom_x
  3054.     @scroll_y = 0 if @scroll_y / 100 >= self.bitmap.height * @zoom_y or @scroll_y / 100 <= -self.bitmap.height * @zoom_y
  3055.   end
  3056.   #--------------------------------------------------------------------------
  3057.   # ● 色調変更の更新
  3058.   #--------------------------------------------------------------------------
  3059.   def update_color
  3060.     color_set if $sv_camera.color_set[@index] != nil
  3061.     return if @color_data == nil
  3062.     @color_data[4] -= 1
  3063.     if @color_data[4] == 0 && @color_data[5] != 0
  3064.       @color_data[4] = @color_data[5]
  3065.       @color_data[5] = 0
  3066.       @color_data[6] = [0,0,0,0]
  3067.     elsif @color_data[4] == 0
  3068.       @remain_color_data = @color_data
  3069.       return @color_data = nil
  3070.     end  
  3071.     for i in 0..3
  3072.       @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  3073.     end  
  3074.     self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  3075.   end
  3076.   #--------------------------------------------------------------------------
  3077.   # ● 座標の更新
  3078.   #--------------------------------------------------------------------------
  3079.   def update_position
  3080.     self.ox = $sv_camera.x + @base_x - @scroll_x / 100
  3081.     self.oy = $sv_camera.y + @base_y - @scroll_y / 100
  3082.     self.ox -= $sv_camera.sx / 100 if @shake_on
  3083.     self.oy -= $sv_camera.sy / 100 if @shake_on
  3084.     self.zoom_x = @zoom_x * $sv_camera.zoom
  3085.     self.zoom_y = @zoom_y * $sv_camera.zoom
  3086.     self.ox *= $sv_camera.zoom
  3087.     self.oy *= $sv_camera.zoom
  3088.     self.z = @index * 10
  3089.   end
  3090.   #--------------------------------------------------------------------------
  3091.   # ● 背景変更補正画像を更新
  3092.   #--------------------------------------------------------------------------
  3093.   def update_back_adjust
  3094.     @active_data[9][0][0] = 0 if @scroll_x == 0
  3095.     @active_data[9][0][1] = 0 if @scroll_y == 0
  3096.     @active_data[9][1][0] -= @active_data[9][2][0] if @scroll_x == 0
  3097.     @active_data[9][1][1] -= @active_data[9][2][1] if @scroll_y == 0
  3098.     for i in 0...@bt_back.size
  3099.       @bt_back[i].x = -self.ox + @active_data[9][i][0] * $sv_camera.zoom
  3100.       @bt_back[i].y = -self.oy + @active_data[9][i][1] * $sv_camera.zoom
  3101.       @bt_back[i].zoom_x = self.zoom_x
  3102.       @bt_back[i].zoom_y = self.zoom_y
  3103.       @bt_back[i].z = self.z + 1
  3104.       @bt_back[i].color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  3105.     end
  3106.     back_data_scroll_on if @active_data[9][0][0] == 0 && @active_data[9][0][1] == 0
  3107.     return unless @active_data[9][1][0] == 0 && @active_data[9][1][1] == 0
  3108.     bt_back_dispose
  3109.     create_back(@active_data[5])
  3110.     @active_data[9][0] = false
  3111.     next_back_data if @remain && @back_data.size != 1
  3112.     @remain = false
  3113.   end
  3114.   #--------------------------------------------------------------------------
  3115.   # ● 色調変更
  3116.   #--------------------------------------------------------------------------
  3117.   def color_set
  3118.     set = $sv_camera.color_set[@index]
  3119.     $sv_camera.color_set[@index] = nil
  3120.     set[4] = 1 if set[4] == 0
  3121.     @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  3122.     @color_data = @remain_color_data
  3123.     @color_data[4] = set[4]
  3124.     @color_data[5] = set[5]
  3125.     @color_data[6] = set
  3126.   end
  3127.   #--------------------------------------------------------------------------
  3128.   # ● 背景変更補正画像の解放
  3129.   #--------------------------------------------------------------------------
  3130.   def bt_back_dispose
  3131.     for i in 0...@bt_back.size do @bt_back[i].dispose end if @bt_back != nil
  3132.     @bt_back = nil
  3133.   end  
  3134.   #--------------------------------------------------------------------------
  3135.   # ● 解放
  3136.   #--------------------------------------------------------------------------
  3137.   def dispose
  3138.     bitmap.dispose if bitmap
  3139.     bt_back_dispose
  3140.     super
  3141.   end
  3142. end  
  3143.   
  3144. #==============================================================================
  3145. # ■ Battle_Camera
  3146. #------------------------------------------------------------------------------
  3147. #  戦闘カメラやバトルプログラムを扱うクラスです。
  3148. #==============================================================================
  3149. class Battle_Camera
  3150.   #--------------------------------------------------------------------------
  3151.   # ● 公開インスタンス変数 
  3152.   #--------------------------------------------------------------------------
  3153.   attr_reader   :sx                 # シェイクX座標
  3154.   attr_reader   :sy                 # シェイクY座標
  3155.   attr_reader   :max_top            # 上限界座標
  3156.   attr_reader   :max_bottom         # 下限界座標
  3157.   attr_reader   :max_left           # 左限界座標
  3158.   attr_reader   :max_right          # 右限界座標
  3159.   attr_accessor :switches           # サイドビュー専用スイッチ
  3160.   attr_accessor :color_set          # 色調変更データ
  3161.   attr_accessor :wait               # 戦闘シーンの強制ウエイト
  3162.   attr_accessor :win_wait           # 戦闘勝利前のウエイト
  3163.   attr_accessor :mirror             # 画面反転フラグ
  3164.   attr_accessor :program_scroll     # バトルプログラム 背景の自動スクロール
  3165.   attr_accessor :program_picture    # バトルプログラム 周期ピクチャ
  3166.   attr_accessor :event              # コモンイベント呼び出し
  3167.   #--------------------------------------------------------------------------
  3168.   # ● オブジェクト初期化
  3169.   #--------------------------------------------------------------------------
  3170.   def initialize
  3171.     @switches = []
  3172.     @max_data = []
  3173.     @color_set = []
  3174.     @wait = 0
  3175.     @win_wait = false
  3176.     @mirror = false
  3177.     @event = false
  3178.     setup
  3179.   end
  3180.   #--------------------------------------------------------------------------
  3181.   # ● カメラX座標
  3182.   #--------------------------------------------------------------------------
  3183.   def x
  3184.     return @x / 100
  3185.   end
  3186.   #--------------------------------------------------------------------------
  3187.   # ● カメラY座標
  3188.   #--------------------------------------------------------------------------
  3189.   def y
  3190.     return @y / 100
  3191.   end
  3192.   #--------------------------------------------------------------------------
  3193.   # ● ズーム率
  3194.   #--------------------------------------------------------------------------
  3195.   def zoom
  3196.     return @zoom * 0.001
  3197.   end
  3198.   #--------------------------------------------------------------------------
  3199.   # ● ズーム率による座標変換
  3200.   #--------------------------------------------------------------------------
  3201.   def convert
  3202.     return @zoom
  3203.   end
  3204.   #--------------------------------------------------------------------------
  3205.   # ● カメラセットアップ
  3206.   #--------------------------------------------------------------------------
  3207.   def setup
  3208.     @x = 0
  3209.     @y = 0
  3210.     @sx = 0
  3211.     @sy = 0
  3212.     @zoom = 1000
  3213.     @time = 0
  3214.     @shake_time = 0
  3215.     program_setup
  3216.   end
  3217.   #--------------------------------------------------------------------------
  3218.   # ● カメラ初期化
  3219.   #--------------------------------------------------------------------------
  3220.   def reset
  3221.     @switches = []
  3222.     @max_data = []
  3223.     @color_set = []
  3224.     @wait = 0
  3225.     @win_wait = false
  3226.     @mirror = false
  3227.     program_setup(false)
  3228.   end  
  3229.   #--------------------------------------------------------------------------
  3230.   # ● バトルプログラムのセットアップ
  3231.   #--------------------------------------------------------------------------
  3232.   def program_setup(check = true)
  3233.     @played_program  = []
  3234.     @program_switch  = []
  3235.     @program_sound   = []
  3236.     @program_scroll  = []
  3237.     @program_se      = []
  3238.     @program_shake   = []
  3239.     @program_color   = []
  3240.     @program_picture = []
  3241.     @program_base = N03::BATTLE_PROGRAM.values.dup
  3242.     program_check if check
  3243.   end  
  3244.   #--------------------------------------------------------------------------
  3245.   # ● バトルプログラムのチェック
  3246.   #--------------------------------------------------------------------------
  3247.   def program_check
  3248.     for data in @program_base
  3249.       if program_start?(data) && !@played_program.include?(data)
  3250.         @played_program.push(data.dup)
  3251.         @program_scroll.push(data.dup)  if data[0] == "scroll"
  3252.         @program_picture.push(data.dup) if data[0] == "kpic"
  3253.         start_sound(data.dup)           if data[0] == "sound"
  3254.         start_program_switch(data.dup)  if data[0] == "switch"
  3255.         start_program_se(data.dup)      if data[0] == "keep_se"
  3256.         start_program_shake(data.dup)   if data[0] == "keep_sk"
  3257.         start_program_color(data.dup)   if data[0] == "keep_c"
  3258.       else
  3259.         @played_program.delete(data)  if !program_start?(data)
  3260.         @program_scroll.delete(data)  if data[0] == "scroll"
  3261.         @program_picture.delete(data) if data[0] == "kpic"
  3262.         @program_switch.delete(data)  if data[0] == "switch"
  3263.         @program_sound.delete(data)   if data[0] == "sound"
  3264.         @program_se.delete(data)      if data[0] == "keep_se"
  3265.         @program_shake.delete(data)   if data[0] == "keep_sk"
  3266.         @program_color.delete(data)   if data[0] == "keep_c"
  3267.       end
  3268.     end
  3269.   end
  3270.   #--------------------------------------------------------------------------
  3271.   # ● バトルプログラムの開始
  3272.   #--------------------------------------------------------------------------
  3273.   def program_start?(data)
  3274.     start = false
  3275.     start = true if $game_switches[data[1].abs] && data[1] > 0
  3276.     start = true if @switches[data[1].abs] && data[1] < 0
  3277.     return start
  3278.   end  
  3279.   #--------------------------------------------------------------------------
  3280.   # ● バトルプログラム スイッチ操作の開始
  3281.   #--------------------------------------------------------------------------
  3282.   def start_program_switch(data)
  3283.     data[4] = data[4] + rand(data[5] + 1)
  3284.     data[4] = 1 if data[4] <= 0
  3285.     @program_switch.push(data)
  3286.   end
  3287.   #--------------------------------------------------------------------------
  3288.   # ● スイッチ操作の更新
  3289.   #--------------------------------------------------------------------------
  3290.   def update_program_switch
  3291.     for data in @program_switch
  3292.       data[4] -= 1
  3293.       next @program_switch.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  3294.       next @program_switch.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  3295.       next if data[4] != 0
  3296.       for id in data[2]
  3297.         $game_switches[id] = true if id > 0
  3298.         @switches[id.abs] = true  if id < 0
  3299.       end
  3300.       for id in data[3]
  3301.         $game_switches[id] = false if id > 0
  3302.         @switches[id.abs] = false  if id < 0
  3303.       end
  3304.       @program_switch.delete(data)
  3305.       program_check
  3306.     end  
  3307.   end
  3308.   #--------------------------------------------------------------------------
  3309.   # ● バトルプログラム BGM/BGSの開始
  3310.   #--------------------------------------------------------------------------
  3311.   def start_sound(data)
  3312.     @program_sound.push(data)
  3313.     name = data[5]
  3314.     case data[2]
  3315.     when "se"
  3316.       Audio.se_play("Audio/SE/" + name, data[4], data[3])
  3317.     when "bgm"
  3318.       name = RPG::BGM.last.name if data[5] == ""
  3319.       Audio.bgm_play("Audio/BGM/" + name, data[4], data[3])
  3320.     when "bgs"
  3321.       name = RPG::BGS.last.name if data[5] == ""
  3322.       Audio.bgs_play("Audio/BGS/" + name, data[4], data[3])
  3323.     end
  3324.   end
  3325.   #--------------------------------------------------------------------------
  3326.   # ● バトルプログラム 周期SEの開始
  3327.   #--------------------------------------------------------------------------
  3328.   def start_program_se(data)
  3329.     data[3] = [data[2], data[3]]
  3330.     data[2] = data[3][0] + rand(data[3][1] + 1)
  3331.     @program_se.push(data)
  3332.     Audio.se_play("Audio/SE/" + data[7], data[5], data[4]) if data[6]
  3333.   end
  3334.   #--------------------------------------------------------------------------
  3335.   # ● 周期SEの更新
  3336.   #--------------------------------------------------------------------------
  3337.   def update_program_se
  3338.     for data in @program_se
  3339.       data[2] -= 1
  3340.       next @program_se.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  3341.       next @program_se.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  3342.       next if data[2] != 0
  3343.       Audio.se_play("Audio/SE/" + data[7], data[5], data[4])
  3344.       data[2] = data[3][0] + rand(data[3][1] + 1)
  3345.     end  
  3346.   end
  3347.   #--------------------------------------------------------------------------
  3348.   # ● バトルプログラム 周期シェイクの開始
  3349.   #--------------------------------------------------------------------------
  3350.   def start_program_shake(data)
  3351.     data[3] = [data[2], data[3]]
  3352.     data[2] = data[3][0] + rand(data[3][1] + 1)
  3353.     @program_shake.push(data)
  3354.     shake(data[4], data[5], data[6]) if data[7]
  3355.   end
  3356.   #--------------------------------------------------------------------------
  3357.   # ● 周期シェイクの更新
  3358.   #--------------------------------------------------------------------------
  3359.   def update_program_shake
  3360.     for data in @program_shake
  3361.       data[2] -= 1
  3362.       next @program_shake.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  3363.       next @program_shake.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  3364.       next if data[2] != 0
  3365.       shake(data[4], data[5], data[6])
  3366.       data[2] = data[3][0] + rand(data[3][1] + 1)
  3367.     end  
  3368.   end
  3369.   #--------------------------------------------------------------------------
  3370.   # ● バトルプログラム 周期色調変更の開始
  3371.   #--------------------------------------------------------------------------
  3372.   def start_program_color(data)
  3373.     data[3] = [data[2], data[3]]
  3374.     data[2] = data[3][0] + rand(data[3][1] + 1)
  3375.     data[7] = true if data[4] == 0 or data[4] == 4
  3376.     case data[4]
  3377.     when 1   ;data[4] = $game_troop.members
  3378.     when 2   ;data[4] = $game_party.battle_members
  3379.     when 3,4 ;data[4] = $game_troop.members + $game_party.battle_members
  3380.     else ;data[4] = []
  3381.     end
  3382.     @program_color.push(data)
  3383.     return if !data[6]
  3384.     for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
  3385.     @color_set[1] = data[5] if data[7]
  3386.     @color_set[2] = data[5] if data[7]
  3387.   end
  3388.   #--------------------------------------------------------------------------
  3389.   # ● 周期色調変更の更新
  3390.   #--------------------------------------------------------------------------
  3391.   def update_program_color
  3392.     for data in @program_color
  3393.       data[2] -= 1
  3394.       next @program_color.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  3395.       next @program_color.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  3396.       next if data[2] != 0
  3397.       for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
  3398.       @color_set[1] = data[5] if data[7]
  3399.       @color_set[2] = data[5] if data[7]
  3400.       data[2] = data[3][0] + rand(data[3][1] + 1)
  3401.     end
  3402.   end
  3403.   #--------------------------------------------------------------------------
  3404.   # ● トランジション実行
  3405.   #--------------------------------------------------------------------------
  3406.   def perform_transition(data)
  3407.     Graphics.transition(data[2], "Graphics/Pictures/" + data[3], data[1])
  3408.   end  
  3409.   #--------------------------------------------------------------------------
  3410.   # ● 背景からカメラの限界値を取得  data = [max_top, max_bottom, max_left, max_right]
  3411.   #--------------------------------------------------------------------------
  3412.   def setting(index, data)
  3413.     @max_data[index - 1] = data
  3414.     return if index != 2
  3415.     setup
  3416.     # カメラの中心座標
  3417.     @center_x     = (Graphics.width / 2 + N03::CAMERA_POSITION[0]) * 100
  3418.     @center_y     = (Graphics.height / 2 + N03::CAMERA_POSITION[1]) * 100
  3419.     # 上下左右の移動限界距離
  3420.     @max_top    = [@max_data[0][5], @max_data[1][5]].min * -1
  3421.     @max_bottom = [@max_data[0][1], @max_data[1][1]].min + @max_top
  3422.     @max_left   = [@max_data[0][4], @max_data[1][4]].min  * -1
  3423.     @max_right  = [@max_data[0][3], @max_data[1][3]].min + @max_left
  3424.     exist_data = @max_data[0] if !@max_data[1][6]
  3425.     exist_data = @max_data[1] if !@max_data[0][6]
  3426.     @max_top    = exist_data[5] * -1        if exist_data != nil
  3427.     @max_bottom = exist_data[1] + @max_top  if exist_data != nil
  3428.     @max_left   = exist_data[4] * -1        if exist_data != nil
  3429.     @max_right  = exist_data[3] + @max_left if exist_data != nil
  3430.     @max_top = @max_bottom = @max_left = @max_right = 0 if !@max_data[1][6] && !@max_data[0][6]
  3431.     @max_width    = @max_right - @max_left + Graphics.width
  3432.     @max_height   = @max_bottom - @max_top + Graphics.height
  3433.     # ズームアウト限界値
  3434.     max_zoom_x    = 100 * Graphics.width / @max_width
  3435.     max_zoom_y    = 100 * Graphics.height / @max_height
  3436.     @max_zoom_out = [max_zoom_x, max_zoom_y].max
  3437.   end
  3438.   #--------------------------------------------------------------------------
  3439.   # ● カメラ移動
  3440.   #--------------------------------------------------------------------------
  3441.   def move(target_x, target_y, zoom, time, screen = true)
  3442.     # 戦闘背景以上のサイズまでズームアウトしないよう調整
  3443.     @target_zoom = [zoom * 0.01, @max_zoom_out * 0.01].max
  3444.     target_x *= -1 if screen && @mirror
  3445.     # ズーム分の中心座標補正
  3446.     if screen && @target_zoom != 1
  3447.       target_x = target_x + @center_x
  3448.       target_y = target_y + @center_y
  3449.     end
  3450.     adjust_x = @center_x * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
  3451.     adjust_y = @center_y * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
  3452.     adjust_x = 0 if adjust_x.nan?
  3453.     adjust_y = 0 if adjust_y.nan?
  3454.     adjust_x = @center_x if !screen && adjust_x == 0
  3455.     adjust_y = @center_y if !screen && adjust_y == 0
  3456.     @target_x = target_x - adjust_x.to_i
  3457.     @target_y = target_y - adjust_y.to_i
  3458.     @target_zoom = (@target_zoom * 1000).to_i
  3459.     @zoom = @zoom.to_i
  3460.     limit_test
  3461.     # 時間0の場合は即実行
  3462.     return @time = time.abs if time != 0
  3463.     @time = 1
  3464.     update
  3465.   end
  3466.   #--------------------------------------------------------------------------
  3467.   # ● 限界座標の試算
  3468.   #--------------------------------------------------------------------------
  3469.   def limit_test
  3470.     new_width = @max_width * @target_zoom / 1000
  3471.     new_height = @max_height * @target_zoom / 1000
  3472.     new_max_right = @max_right - (@max_width - new_width)
  3473.     new_max_bottom = @max_bottom - (@max_height - new_height)
  3474.     # 画面の移動先が限界の場合、限界座標をセット
  3475.     if @target_x < @max_left * 100
  3476.       @target_x = @max_left * 100
  3477.     end
  3478.     if @target_x > new_max_right * 100
  3479.       @target_x = new_max_right * 100
  3480.     end
  3481.     if @target_y < @max_top * 100
  3482.       @target_y = @max_top * 100
  3483.     end
  3484.     if @target_y > new_max_bottom * 100
  3485.       @target_y = new_max_bottom * 100
  3486.     end
  3487.   end
  3488.   #--------------------------------------------------------------------------
  3489.   # ● 画面のシェイク
  3490.   #--------------------------------------------------------------------------
  3491.   def shake(power, speed, time)
  3492.     @shake_x = power[0] * 100
  3493.     @shake_y = power[1] * 100
  3494.     @power_time_base = @power_time = speed
  3495.     @shake_time = time
  3496.     update_shake
  3497.   end
  3498.   #--------------------------------------------------------------------------
  3499.   # ● シェイクの更新
  3500.   #--------------------------------------------------------------------------
  3501.   def update_shake
  3502.     @sx = (@sx * (@power_time - 1) + @shake_x) / @power_time
  3503.     @sy = (@sy * (@power_time - 1) + @shake_y) / @power_time
  3504.     @power_time -= 1
  3505.     @shake_time -= 1
  3506.     return @sx = @sy = 0 if @shake_time == 0
  3507.     return if @power_time != 0
  3508.     @power_time = @power_time_base
  3509.     @shake_x = @shake_x * -4 / 5
  3510.     @shake_y = @shake_y * -4 / 5
  3511.   end
  3512.   #--------------------------------------------------------------------------
  3513.   # ● フレーム更新
  3514.   #--------------------------------------------------------------------------
  3515.   def update
  3516.     update_shake if @shake_time != 0
  3517.     update_program
  3518.     return if @time == 0
  3519.     @x = (@x * (@time - 1) + @target_x) / @time
  3520.     @y = (@y * (@time - 1) + @target_y) / @time
  3521.     @zoom = (@zoom * (@time - 1) + @target_zoom) / @time
  3522.     @time -= 1
  3523.   end
  3524.   #--------------------------------------------------------------------------
  3525.   # ● フレーム更新
  3526.   #--------------------------------------------------------------------------
  3527.   def update_program
  3528.     update_program_switch if @program_switch != []
  3529.     update_program_se     if @program_se != []
  3530.     update_program_shake  if @program_shake != []
  3531.     update_program_color  if @program_color != []
  3532.   end
  3533. end

  3534. #==============================================================================
  3535. # ■ Scene_Battle
  3536. #------------------------------------------------------------------------------
  3537. #  バトル画面の処理を行うクラスです。
  3538. #==============================================================================
  3539. class Scene_Battle < Scene_Base
  3540.   #--------------------------------------------------------------------------
  3541.   # ● フレーム更新(基本)
  3542.   #--------------------------------------------------------------------------
  3543.   alias update_basic_scene_battle_n03 update_basic
  3544.   def update_basic
  3545.     update_basic_scene_battle_n03
  3546.     $sv_camera.update
  3547.     $sv_camera.wait = N03::TURN_END_WAIT + 1 if $sv_camera.win_wait
  3548.     camera_wait
  3549.   end
  3550.   #--------------------------------------------------------------------------
  3551.   # ● カメラウェイト
  3552.   #--------------------------------------------------------------------------
  3553.   def camera_wait
  3554.     process_event if $sv_camera.event
  3555.     $sv_camera.event = false if $sv_camera.event
  3556.     while $sv_camera.wait != 0
  3557.       Graphics.update
  3558.       Input.update
  3559.       update_all_windows
  3560.       $game_timer.update
  3561.       $game_troop.update
  3562.       $sv_camera.update
  3563.       @spriteset.update
  3564.       update_info_viewport
  3565.       update_message_open
  3566.       $sv_camera.wait -= 1 if $sv_camera.wait > 0
  3567.       $sv_camera.wait = 1 if $sv_camera.wait == 0 && @spriteset.effect?
  3568.       BattleManager.victory if $sv_camera.win_wait && $sv_camera.wait == 0
  3569.     end
  3570.   end
  3571.   #--------------------------------------------------------------------------
  3572.   # ● カメラウェイトのセット
  3573.   #--------------------------------------------------------------------------
  3574.   def set_camera_wait(time)
  3575.     $sv_camera.wait = time
  3576.     camera_wait
  3577.   end  
  3578.   #--------------------------------------------------------------------------
  3579.   # ● エフェクト実行が終わるまでウェイト ★再定義
  3580.   #--------------------------------------------------------------------------
  3581.   def wait_for_effect
  3582.   end
  3583.   #--------------------------------------------------------------------------
  3584.   # ● ターン開始
  3585.   #--------------------------------------------------------------------------
  3586.   alias turn_start_scene_battle_n03 turn_start
  3587.   def turn_start
  3588.     turn_start_scene_battle_n03
  3589.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始後"].dup)
  3590.   end
  3591.   #--------------------------------------------------------------------------
  3592.   # ● ターン終了
  3593.   #--------------------------------------------------------------------------
  3594.   alias turn_end_scene_battle_n03 turn_end
  3595.   def turn_end
  3596.     turn_end_scene_battle_n03
  3597.     for member in $game_troop.members + $game_party.members
  3598.       N03.set_damage(member, member.sv.result_damage[0],member.sv.result_damage[1])
  3599.       member.sv.result_damage = [0,0]
  3600.       @spriteset.set_damage_pop(member) if member.result.hp_damage != 0 or member.result.mp_damage != 0
  3601.     end
  3602.     set_camera_wait(N03::TURN_END_WAIT)
  3603.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup) if $game_party.inputable?
  3604.     @log_window.clear
  3605.   end
  3606.   #--------------------------------------------------------------------------
  3607.   # ● スキル/アイテムの使用 ★再定義
  3608.   #--------------------------------------------------------------------------
  3609.   def use_item
  3610.     item = @subject.current_action.item
  3611.     display_item(item)
  3612.     @subject.use_item(item)
  3613.     refresh_status
  3614.     @targets = @subject.current_action.make_targets.compact
  3615.     @targets = [@subject] if @targets.size == 0
  3616.     set_substitute(item)
  3617.     for time in item.repeats.times do play_sideview(@targets, item) end
  3618.     end_reaction(item)
  3619.     display_end_item
  3620.   end
  3621.   #--------------------------------------------------------------------------
  3622.   # ● スキル/アイテム名の表示
  3623.   #--------------------------------------------------------------------------
  3624.   def display_item(item)
  3625.     return @log_window.display_use_item(@subject, item) if N03::BATTLE_LOG
  3626.     @log_window.off
  3627.     @skill_name_window = Window_Skill_name.new(item.name) unless N03::NO_DISPLAY_SKILL_ID.include?(item.id) && item.is_a?(RPG::Skill)
  3628.   end  
  3629.   #--------------------------------------------------------------------------
  3630.   # ● スキル/アイテム名の表示終了
  3631.   #--------------------------------------------------------------------------
  3632.   def display_end_item
  3633.     @skill_name_window.dispose if @skill_name_window != nil
  3634.     @skill_name_window = nil
  3635.     set_camera_wait(N03::ACTION_END_WAIT) if @subject.sv.derivation_skill_id == 0
  3636.     @log_window.clear if N03::BATTLE_LOG
  3637.   end  
  3638.   #--------------------------------------------------------------------------
  3639.   # ● 反撃/魔法反射/身代わり処理
  3640.   #--------------------------------------------------------------------------
  3641.   def end_reaction(item)
  3642.     end_substitute if @substitute != nil
  3643.     set_reflection(item) if @reflection_data != nil
  3644.     set_counter_attack if @counter_attacker != nil
  3645.   end  
  3646.   #--------------------------------------------------------------------------
  3647.   # ● 反撃の発動 ★再定義
  3648.   #--------------------------------------------------------------------------
  3649.   def invoke_counter_attack(target, item)
  3650.     return if @subject.sv.counter_id != 0
  3651.     @counter_attacker = [] if @counter_attacker == nil
  3652.     return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
  3653.     @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
  3654.     target.sv.counter_id = target.sv.counter_skill_id
  3655.     @counter_attacker.push(target)
  3656.   end
  3657.   #--------------------------------------------------------------------------
  3658.   # ● 魔法反射の発動 ★再定義
  3659.   #--------------------------------------------------------------------------
  3660.   def invoke_magic_reflection(target, item)
  3661.     return if @subject.sv.reflection_id != 0
  3662.     @log_window.add_text(sprintf(Vocab::MagicReflection, target.name)) if N03::BATTLE_LOG
  3663.     target.sv.reflection_id = target.sv.reflection_anime_id
  3664.   end
  3665.   #--------------------------------------------------------------------------
  3666.   # ● 身代わりの適用 ★再定義
  3667.   #--------------------------------------------------------------------------
  3668.   def apply_substitute(target, item)
  3669.     return target if @substitute == nil
  3670.     return target if !check_substitute(target, item)
  3671.     return @substitute
  3672.   end
  3673.   #--------------------------------------------------------------------------
  3674.   # ● 身代わりセット
  3675.   #--------------------------------------------------------------------------
  3676.   def set_substitute(item)
  3677.     @substitute = N03.get_enemy_unit(@subject).substitute_battler
  3678.     return if @substitute == nil
  3679.     s_targets = []
  3680.     for i in [email protected]
  3681.       next if @targets[i] == @substitute
  3682.       next if !check_substitute(@targets[i], item)
  3683.       @log_window.add_text(sprintf(Vocab::Substitute, @substitute.name, @targets[i].name))
  3684.       @targets[i].sv.start_action(@targets[i].sv.substitute_receiver_start_action)
  3685.       s_targets.push(@targets[i])
  3686.       @targets[i] = @substitute
  3687.     end
  3688.     return @substitute = nil if s_targets == []
  3689.     @substitute.sv.set_target(s_targets)
  3690.     @substitute.sv.start_action(@substitute.sv.substitute_start_action)
  3691.   end  
  3692.   #--------------------------------------------------------------------------
  3693.   # ● 身代わり終了
  3694.   #--------------------------------------------------------------------------
  3695.   def end_substitute
  3696.     for member in @substitute.sv.target_battler
  3697.       member.sv.start_action(member.sv.substitute_receiver_end_action)
  3698.     end  
  3699.     @substitute.sv.start_action(@substitute.sv.substitute_end_action)
  3700.     @substitute = nil
  3701.   end
  3702.   #--------------------------------------------------------------------------
  3703.   # ● 反撃
  3704.   #--------------------------------------------------------------------------
  3705.   def set_counter_attack
  3706.     pre_subject = @subject
  3707.     for attacker in @counter_attacker
  3708.       @subject = attacker
  3709.       item = $data_skills[attacker.sv.counter_skill_id]
  3710.       play_sideview([pre_subject], item)
  3711.     end
  3712.     # 同一カウンター者を考慮してカウンターIDの初期化はアクション後に実行
  3713.     for attacker in @counter_attacker do attacker.sv.counter_id = 0 end
  3714.     @subject = pre_subject
  3715.     @counter_attacker = nil
  3716.   end
  3717.   #--------------------------------------------------------------------------
  3718.   # ● 魔法反射
  3719.   #--------------------------------------------------------------------------
  3720.   def set_reflection(item)
  3721.     @log_window.back_to(1)
  3722.     for data in @reflection_data
  3723.       @subject.sv.damage_action(@subject, item)
  3724.       N03.set_damage_anime_data([@subject], @subject, data)
  3725.       apply_item_effects(@subject, item)
  3726.       @spriteset.set_damage_pop(@subject)
  3727.     end
  3728.     set_camera_wait(N03.get_anime_time(@reflection_data[0][0]))
  3729.     @reflection_data = nil
  3730.   end
  3731.   #--------------------------------------------------------------------------
  3732.   # ● サイドビューアクション実行
  3733.   #--------------------------------------------------------------------------
  3734.   def play_sideview(targets, item)
  3735.     @subject.sv.set_target(targets)
  3736.     return if @subject.sv.attack_action(item) == nil
  3737.     return if [email protected]?
  3738.     return if item.scope != 9 && item.scope != 10 && !N03.targets_alive?(targets)
  3739.     @subject.sv.start_action(@subject.sv.attack_action(item))
  3740.     @subject.sv.unshift_action(@subject.sv.flash_action) if @subject.flash_flg
  3741.     @subject.sv.active = true
  3742.     @subject.sv.command_action = false
  3743.     loop do
  3744.       update_basic
  3745.       data = @subject.sv.play_data
  3746.       @targets = N03.s_targets(@subject) if data[0] == "second_targets_set"
  3747.       N03.targets_set(@subject)          if data[0] == "targets_set"
  3748.       @immortal = N03.immortaling        if data[0] == "no_collapse" && !N03.dead_attack?(@subject, item)
  3749.       @immortal = N03.unimmortaling      if data[0] == "collapse"
  3750.       next set_move_anime(item)          if @subject.sv.m_a_data != []
  3751.       set_damage(item)                   if @subject.sv.set_damage
  3752.       break N03.derived_skill(@subject)  if @subject.sv.derivation_skill_id != 0
  3753.       break                              if @subject.sv.action_end or @subject.hidden?
  3754.     end
  3755.     @immortal = N03.unimmortaling        if @immortal
  3756.   end
  3757.   #--------------------------------------------------------------------------
  3758.   # ● ダメージの実行
  3759.   #--------------------------------------------------------------------------
  3760.   def set_damage(item)
  3761.     targets = @targets
  3762.     targets = [@subject.sv.individual_targets[0]] if @subject.sv.individual_targets.size != 0
  3763.     for target in targets do damage_anime(targets.dup, target, item) end
  3764.     @subject.sv.set_damage = false
  3765.     @subject.sv.damage_anime_data = []
  3766.   end
  3767.   #--------------------------------------------------------------------------
  3768.   # ● ダメージ戦闘アニメ処理
  3769.   #--------------------------------------------------------------------------
  3770.   def damage_anime(targets, target, item)
  3771.     @log_window.back_to(1) if @log_window.line_number == 5
  3772.     return if item.scope != 9 && item.scope != 10 && target.dead?
  3773.     @miss = false
  3774.     invoke_item(target,item)
  3775.     if target.result.missed
  3776.       target.sv.miss_action(@subject, item)
  3777.       return @miss = true
  3778.     elsif target.result.evaded or target.sv.counter_id != 0
  3779.       target.sv.evasion_action(@subject, item)
  3780.       return @miss = true
  3781.     elsif target.sv.reflection_id != 0
  3782.       N03.set_damage_anime_data(targets, target, [target.sv.reflection_id, false, false, true])
  3783.       target.sv.reflection_id = 0
  3784.       @reflection_data = [] if @reflection_data == nil
  3785.       return @reflection_data.push([N03.get_attack_anime_id(-3, @subject), false, false, true])
  3786.     end
  3787.     target.sv.damage_action(@subject, item)
  3788.     N03.set_damage(@subject, -target.result.hp_drain, -target.result.mp_drain) if target != @subject
  3789.     @spriteset.set_damage_pop(target)
  3790.     @spriteset.set_damage_pop(@subject) if target != @subject && @subject.result.hp_damage != 0 or @subject.result.mp_damage != 0
  3791.     N03.set_damage_anime_data(targets, target, @subject.sv.damage_anime_data) if @subject.sv.damage_anime_data != []
  3792.   end
  3793.   #--------------------------------------------------------------------------
  3794.   # ● 飛ばしアニメ処理
  3795.   #--------------------------------------------------------------------------
  3796.   def set_move_anime(item)
  3797.     for data in @subject.sv.m_a_data
  3798.       @subject.sv.damage_anime_data = data[4]
  3799.       hit_targets = []
  3800.       for target in data[1]
  3801.         damage_anime(data[1], target, item) if data[0]
  3802.         hit_targets.push(target) if !@miss
  3803.       end
  3804.       @miss = false if !data[3]
  3805.       @spriteset.set_hit_animation(@subject, data[2], hit_targets, @miss)
  3806.     end
  3807.     @subject.sv.set_damage = false
  3808.     @subject.sv.m_a_data = []
  3809.   end
  3810. end

  3811. #==============================================================================
  3812. # ■ DataManager
  3813. #------------------------------------------------------------------------------
  3814. #  データベースとゲームオブジェクトを管理するモジュールです。
  3815. #==============================================================================
  3816. module DataManager
  3817.   #--------------------------------------------------------------------------
  3818.   # ● 各種ゲームオブジェクトの作成 ★再定義
  3819.   #--------------------------------------------------------------------------
  3820.   def self.create_game_objects
  3821.     $game_temp          = Game_Temp.new
  3822.     $game_system        = Game_System.new
  3823.     $game_timer         = Game_Timer.new
  3824.     $game_message       = Game_Message.new
  3825.     $game_switches      = Game_Switches.new
  3826.     $game_variables     = Game_Variables.new
  3827.     $game_self_switches = Game_SelfSwitches.new
  3828.     $game_actors        = Game_Actors.new
  3829.     $game_party         = Game_Party.new
  3830.     $game_troop         = Game_Troop.new
  3831.     $game_map           = Game_Map.new
  3832.     $game_player        = Game_Player.new
  3833.     $sv_camera          = Battle_Camera.new
  3834.   end
  3835. end

  3836. #==============================================================================
  3837. # ■ BattleManager
  3838. #------------------------------------------------------------------------------
  3839. #  戦闘の進行を管理するモジュールです。
  3840. #==============================================================================
  3841. module BattleManager
  3842.   #--------------------------------------------------------------------------
  3843.   # ● エンカウント時の処理 ★再定義
  3844.   #--------------------------------------------------------------------------
  3845.   def self.on_encounter
  3846.     @preemptive = (rand < rate_preemptive)
  3847.     @surprise = (rand < rate_surprise && !@preemptive)
  3848.     $sv_camera.mirror = @surprise if N03::BACK_ATTACK
  3849.   end
  3850.   #--------------------------------------------------------------------------
  3851.   # ● 勝利の処理 ★再定義
  3852.   #--------------------------------------------------------------------------
  3853.   def self.process_victory
  3854.     $sv_camera.win_wait = true
  3855.   end  
  3856.   #--------------------------------------------------------------------------
  3857.   # ● 勝利
  3858.   #--------------------------------------------------------------------------
  3859.   def self.victory
  3860.     $sv_camera.win_wait = false
  3861.     N03.camera(nil, N03::BATTLE_CAMERA["戦闘終了時"].dup)
  3862.     for member in $game_party.members do member.sv.start_action(member.sv.win) if member.movable? end
  3863.     play_battle_end_me
  3864.     replay_bgm_and_bgs
  3865.     $game_message.add(sprintf(Vocab::Victory, $game_party.name))
  3866.     display_exp
  3867.     gain_gold
  3868.     gain_drop_items
  3869.     gain_exp
  3870.     SceneManager.return
  3871.     battle_end(0)
  3872.     return true
  3873.   end
  3874.   #--------------------------------------------------------------------------
  3875.   # ● 逃走の処理 ★再定義
  3876.   #--------------------------------------------------------------------------
  3877.   def self.process_escape
  3878.     $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
  3879.     success = @preemptive ? true : (rand < @escape_ratio)
  3880.     Sound.play_escape
  3881.     if success
  3882.       process_abort
  3883.       for member in $game_party.members do member.sv.start_action(member.sv.escape) if member.movable? end
  3884.     else
  3885.       @escape_ratio += 0.1
  3886.       $game_message.add('\.' + Vocab::EscapeFailure)
  3887.       $game_party.clear_actions
  3888.       for member in $game_party.members do member.sv.start_action(member.sv.escape_ng) if member.movable? end
  3889.     end
  3890.     wait_for_message
  3891.     return success
  3892.   end
  3893.   #--------------------------------------------------------------------------
  3894.   # ● 次のコマンド入力へ ★再定義
  3895.   #--------------------------------------------------------------------------
  3896.   def self.next_command
  3897.     begin
  3898.       if !actor || !actor.next_command
  3899.         $game_party.battle_members[@actor_index].sv.command_action = true
  3900.         @actor_index += 1
  3901.         if @actor_index >= $game_party.members.size
  3902.           for member in $game_party.battle_members.reverse
  3903.             break member.sv.start_action(member.sv.command_a) if member.inputable?
  3904.           end
  3905.           return false
  3906.         end
  3907.       end
  3908.     end until actor.inputable?
  3909.     actor.sv.start_action(actor.sv.command_b) if actor != nil && actor.inputable?
  3910.     if pre_actor
  3911.       pre_actor.sv.start_action(pre_actor.sv.command_a) if pre_actor != nil && pre_actor.inputable?
  3912.     end
  3913.     return true
  3914.   end
  3915.   #--------------------------------------------------------------------------
  3916.   # ● 前のコマンド入力へ ★再定義
  3917.   #--------------------------------------------------------------------------
  3918.   def self.prior_command
  3919.     begin
  3920.       if !actor || !actor.prior_command
  3921.         $game_party.battle_members[@actor_index].sv.command_action = false
  3922.         @actor_index -= 1
  3923.         if @actor_index < 0
  3924.           for member in $game_party.battle_members
  3925.             break member.sv.start_action(member.sv.command_a) if member.inputable?
  3926.           end
  3927.           return false
  3928.         end
  3929.       end
  3930.     end until actor.inputable?
  3931.     actor.make_actions if actor.inputable?
  3932.     actor.sv.start_action(actor.sv.command_b) if actor.inputable?
  3933.     after_actor.sv.start_action(after_actor.sv.command_a) if after_actor != nil && after_actor.inputable?
  3934.     return true
  3935.   end
  3936.   #--------------------------------------------------------------------------
  3937.   # ● コマンド入力前のアクターを取得
  3938.   #--------------------------------------------------------------------------
  3939.   def self.pre_actor
  3940.     return if @actor_index == 0
  3941.     $game_party.members[@actor_index - 1]
  3942.   end
  3943.   #--------------------------------------------------------------------------
  3944.   # ● コマンド入力後のアクターを取得
  3945.   #--------------------------------------------------------------------------
  3946.   def self.after_actor
  3947.     $game_party.members[@actor_index + 1]
  3948.   end
  3949.   #--------------------------------------------------------------------------
  3950.   # ● 戦闘行動者を前に追加
  3951.   #--------------------------------------------------------------------------
  3952.   def self.unshift_action_battlers(battler)
  3953.     @action_battlers.unshift(battler)
  3954.   end
  3955. end  

  3956. #==============================================================================
  3957. # ■ Game_Battler
  3958. #------------------------------------------------------------------------------
  3959. #  スプライトや行動に関するメソッドを追加したバトラーのクラスです。
  3960. #==============================================================================
  3961. class Game_Battler < Game_BattlerBase
  3962.   #--------------------------------------------------------------------------
  3963.   # ● 公開インスタンス変数
  3964.   #--------------------------------------------------------------------------
  3965.   attr_reader   :sv                     # サイドビューデータ
  3966.   attr_accessor :flash_flg              # 閃きフラグ
  3967.   #--------------------------------------------------------------------------
  3968.   # ● オブジェクト初期化
  3969.   #--------------------------------------------------------------------------
  3970.   alias initialize_game_battler_n03 initialize
  3971.   def initialize
  3972.     initialize_game_battler_n03
  3973.     @sv = SideView.new(self)
  3974.   end
  3975.   #--------------------------------------------------------------------------
  3976.   # ● 現在の戦闘行動を除去
  3977.   #--------------------------------------------------------------------------
  3978.   alias remove_current_action_game_battler_n03 remove_current_action
  3979.   def remove_current_action
  3980.     return @sv.derivation_skill_id = 0 if @sv.derivation_skill_id != 0
  3981.     remove_current_action_game_battler_n03
  3982.   end
  3983.   #--------------------------------------------------------------------------
  3984.   # ● ターン終了処理
  3985.   #--------------------------------------------------------------------------
  3986.   alias on_turn_end_game_battler_n03 on_turn_end
  3987.   def on_turn_end
  3988.     on_turn_end_game_battler_n03
  3989.     @sv.add_state = []
  3990.     @sv.result_damage = [@result.hp_damage, @result.mp_damage]
  3991.   end
  3992.   #--------------------------------------------------------------------------
  3993.   # ● パラメータ条件比較 data = [種別, 数値, 判別]
  3994.   #--------------------------------------------------------------------------
  3995.   def comparison_parameter(data)
  3996.     return true if data[0][0] == 0
  3997.     kind = data[0]
  3998.     num = data[1]
  3999.     select = data[2]
  4000.     case kind
  4001.     when  1 ; par = level
  4002.     when  2 ; par = mhp
  4003.     when  3 ; par = mmp
  4004.     when  4 ; par = hp
  4005.     when  5 ; par = mp
  4006.     when  6 ; par = tp
  4007.     when  7 ; par = atk
  4008.     when  8 ; par = self.def
  4009.     when  9 ; par = mat
  4010.     when 10 ; par = mdf
  4011.     when 11 ; par = agi
  4012.     when 12 ; par = luk
  4013.     end
  4014.     if num < 0
  4015.       case kind
  4016.       when  4 ; num = mhp * num / 100
  4017.       when  5 ; num = mmp * num / 100
  4018.       when  6 ; num = max_tp * num / 100
  4019.       end
  4020.       num = num.abs
  4021.     end  
  4022.     case select
  4023.     when  0 ; return par == num
  4024.     when  1 ; return par < num
  4025.     when  2 ; return par > num
  4026.     end
  4027.   end
  4028.   #--------------------------------------------------------------------------
  4029.   # ● 装備条件比較 data = [装備種別, タイプID]
  4030.   #--------------------------------------------------------------------------
  4031.   def comparison_equip(data)
  4032.     kind = data[0]
  4033.     items = weapons if kind == 0
  4034.     items = armors  if kind == 1
  4035.     for item in items
  4036.       for id in data[1]
  4037.         return true if id > 0 && item.is_a?(RPG::Weapon) && item == $data_weapons[id.abs]
  4038.         return true if id > 0 && item.is_a?(RPG::Armor) && item == $data_armors[id.abs]
  4039.         return true if id < 0 && item.is_a?(RPG::Weapon) && item.wtype_id == id.abs
  4040.         return true if id < 0 && item.is_a?(RPG::Armor) && item.stype_id == id.abs
  4041.       end
  4042.     end
  4043.     return false
  4044.   end
  4045.   
  4046. end  
  4047. #==============================================================================
  4048. # ■ Game_Actor
  4049. #------------------------------------------------------------------------------
  4050. #  アクターを扱うクラスです。
  4051. #==============================================================================
  4052. class Game_Actor < Game_Battler
  4053.   #--------------------------------------------------------------------------
  4054.   # ● 公開インスタンス変数
  4055.   #--------------------------------------------------------------------------
  4056.   attr_reader :actor_id                    # ID
  4057.   #--------------------------------------------------------------------------
  4058.   # ● ID
  4059.   #--------------------------------------------------------------------------
  4060.   def id
  4061.     return @actor_id
  4062.   end
  4063.   #--------------------------------------------------------------------------
  4064.   # ● スプライトを使うか? ★再定義
  4065.   #--------------------------------------------------------------------------
  4066.   def use_sprite?
  4067.     return true
  4068.   end
  4069.   #--------------------------------------------------------------------------
  4070.   # ● ダメージ効果の実行 ★再定義
  4071.   #--------------------------------------------------------------------------
  4072.   def perform_damage_effect
  4073.     return if !N03::ACTOR_DAMAGE
  4074.     $game_troop.screen.start_shake(5, 5, 10)
  4075.     @sprite_effect_type = :blink
  4076.     Sound.play_actor_damage
  4077.   end
  4078.   
  4079. end

  4080. #==============================================================================
  4081. # ■ Game_Enemy
  4082. #------------------------------------------------------------------------------
  4083. #  敵キャラを扱うクラスです。
  4084. #==============================================================================
  4085. class Game_Enemy < Game_Battler
  4086.   #--------------------------------------------------------------------------
  4087.   # ● 公開インスタンス変数
  4088.   #--------------------------------------------------------------------------
  4089.   attr_reader :enemy_id                    # ID
  4090.   #--------------------------------------------------------------------------
  4091.   # ● ID
  4092.   #--------------------------------------------------------------------------
  4093.   def id
  4094.     return @enemy_id
  4095.   end
  4096.   #--------------------------------------------------------------------------
  4097.   # ● レベル
  4098.   #--------------------------------------------------------------------------
  4099.   def level
  4100.     return @sv.level
  4101.   end
  4102.   #--------------------------------------------------------------------------
  4103.   # ● ダメージ効果の実行 ★再定義
  4104.   #--------------------------------------------------------------------------
  4105.   def perform_damage_effect
  4106.     return if !N03::ENEMY_DAMAGE
  4107.     @sprite_effect_type = :blink
  4108.     Sound.play_enemy_damage
  4109.   end
  4110.   #--------------------------------------------------------------------------
  4111.   # ● 武器
  4112.   #--------------------------------------------------------------------------
  4113.   def weapons
  4114.     weapon1 = $data_weapons[@sv.enemy_weapon1_id]
  4115.     weapon2 = $data_weapons[@sv.enemy_weapon2_id]
  4116.     return [weapon1, weapon2]
  4117.   end
  4118.   #--------------------------------------------------------------------------
  4119.   # ● 防具
  4120.   #--------------------------------------------------------------------------
  4121.   def armors
  4122.     return [$data_armors[@sv.enemy_shield_id]]
  4123.   end
  4124.   #--------------------------------------------------------------------------
  4125.   # ● 二刀流の判定
  4126.   #--------------------------------------------------------------------------
  4127.   def dual_wield?
  4128.     return $data_weapons[@sv.enemy_weapon2_id] != nil
  4129.   end
  4130.   #--------------------------------------------------------------------------
  4131.   # ● バトラー画像変更
  4132.   #--------------------------------------------------------------------------
  4133.   def graphics_change(battler_name)
  4134.     @battler_name = battler_name
  4135.   end
  4136.   #--------------------------------------------------------------------------
  4137.   # ● 通常攻撃 アニメーション ID の取得
  4138.   #--------------------------------------------------------------------------
  4139.   def atk_animation_id1
  4140.     return weapons[0].animation_id if weapons[0]
  4141.     return weapons[1] ? 0 : 1
  4142.   end
  4143.   #--------------------------------------------------------------------------
  4144.   # ● 通常攻撃 アニメーション ID の取得(二刀流:武器2)
  4145.   #--------------------------------------------------------------------------
  4146.   def atk_animation_id2
  4147.     return weapons[1] ? weapons[1].animation_id : 0
  4148.   end
  4149. end

  4150. #==============================================================================
  4151. # ■ Sprite_Base
  4152. #------------------------------------------------------------------------------
  4153. #  アニメーションの表示処理を追加したスプライトのクラスです。
  4154. #==============================================================================
  4155. class Sprite_Base < Sprite
  4156.   #--------------------------------------------------------------------------
  4157.   # ● アニメーションの座標更新 (ホーミングあり)
  4158.   #--------------------------------------------------------------------------
  4159.   def update_animation_position_horming
  4160.     return if @action_end_cancel
  4161.     ani_ox_set if @horming
  4162.     camera_zoom = $sv_camera.zoom
  4163.     camera_zoom = 1 if @move_anime
  4164.     kind = 1
  4165.     kind = -1 if @ani_mirror && !@anime_no_mirror
  4166.     cell_data = @animation.frames[@animation.frame_max - (@ani_duration + @ani_rate - 1) / @ani_rate].cell_data
  4167.     for i in 0..15
  4168.       @ani_sprites[i].x = (@ani_ox + cell_data[i, 1] * kind - $sv_camera.x) * camera_zoom if @ani_sprites[i] != nil && cell_data[i, 1] != nil
  4169.       @ani_sprites[i].y = (@ani_oy + cell_data[i, 2] - $sv_camera.y) * camera_zoom if @ani_sprites[i] != nil && cell_data[i, 2] != nil
  4170.     end
  4171.   end
  4172.   #--------------------------------------------------------------------------
  4173.   # ● アニメーション元の座標をセット
  4174.   #--------------------------------------------------------------------------
  4175.   def ani_ox_set
  4176.     if !SceneManager.scene_is?(Scene_Battle)
  4177.       @real_x = x
  4178.       @real_y = y
  4179.     end
  4180.     @ani_ox = @real_x - ox + width / 2
  4181.     @ani_oy = @real_y - oy + height / 2
  4182.     @ani_oy -= height / 2 if @animation.position == 0
  4183.     @ani_oy += height / 2 if @animation.position == 2
  4184.   end
  4185.   #--------------------------------------------------------------------------
  4186.   # ● アニメーションの更新
  4187.   #--------------------------------------------------------------------------
  4188.   alias update_animation_sprite_base_n03 update_animation
  4189.   def update_animation
  4190.     update_animation_position_horming if animation? && SceneManager.scene_is?(Scene_Battle) && @animation.position != 3
  4191.     update_animation_sprite_base_n03
  4192.   end
  4193.   #--------------------------------------------------------------------------
  4194.   # ● アニメーションの原点設定 ★再定義
  4195.   #--------------------------------------------------------------------------
  4196.   def set_animation_origin
  4197.     return ani_ox_set if @animation.position != 3
  4198.     if viewport == nil
  4199.       @ani_ox = Graphics.width / 2
  4200.       @ani_oy = Graphics.height / 2
  4201.     else
  4202.       @ani_ox = viewport.rect.width / 2
  4203.       @ani_oy = viewport.rect.height / 2
  4204.     end
  4205.   end
  4206.   #--------------------------------------------------------------------------
  4207.   # ● アニメーションスプライトの設定 ★再定義
  4208.   #--------------------------------------------------------------------------
  4209.   def animation_set_sprites(frame)
  4210.     camera_zoom = 1
  4211.     camera_zoom = $sv_camera.zoom if @anime_camera_zoom && @animation.position != 3 && SceneManager.scene_is?(Scene_Battle)
  4212.     camera_x = $sv_camera.x
  4213.     camera_y = $sv_camera.y
  4214.     camera_x = camera_y = 0 if @animation.position == 3 or !SceneManager.scene_is?(Scene_Battle)
  4215.     plus_z = 5
  4216.     plus_z = 1000 if @animation.position == 3
  4217.     plus_z = -17 if @plus_z != nil && @plus_z == false
  4218.     plus_z = -self.z + 10 if @plus_z != nil && @plus_z == false && @animation.position == 3
  4219.     cell_data = frame.cell_data
  4220.     @ani_sprites.each_with_index do |sprite, i|
  4221.       next unless sprite
  4222.       pattern = cell_data[i, 0]
  4223.       if !pattern || pattern < 0
  4224.         sprite.visible = false
  4225.         next
  4226.       end
  4227.       sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  4228.       sprite.visible = true
  4229.       sprite.src_rect.set(pattern % 5 * 192,
  4230.         pattern % 100 / 5 * 192, 192, 192)
  4231.       if @ani_mirror && !@anime_no_mirror
  4232.         sprite.x = (@ani_ox - cell_data[i, 1] - camera_x) * camera_zoom
  4233.         sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  4234.         sprite.angle = (360 - cell_data[i, 4])
  4235.         sprite.mirror = (cell_data[i, 5] == 0)
  4236.       else
  4237.         sprite.x = (@ani_ox + cell_data[i, 1] - camera_x) * camera_zoom
  4238.         sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  4239.         sprite.angle = cell_data[i, 4]
  4240.         sprite.mirror = (cell_data[i, 5] == 1)
  4241.       end
  4242.       sprite.z = self.z + plus_z + i
  4243.       sprite.ox = 96
  4244.       sprite.oy = 96
  4245.       sprite.zoom_x = cell_data[i, 3] * camera_zoom / 100.0
  4246.       sprite.zoom_y = cell_data[i, 3] * camera_zoom/ 100.0
  4247.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  4248.       sprite.blend_type = cell_data[i, 7]
  4249.     end
  4250.   end
  4251.   #--------------------------------------------------------------------------
  4252.   # ● 子スプライトフラグ
  4253.   #--------------------------------------------------------------------------
  4254.   def set(battler, horming, camera_zoom, no_mirror)
  4255.     @battler = battler
  4256.     @next = true
  4257.     self.bitmap = Bitmap.new(@battler.sv.cw, @battler.sv.ch)
  4258.     self.ox = bitmap.width / 2
  4259.     self.oy = bitmap.height
  4260.     @horming = horming
  4261.     @anime_camera_zoom = camera_zoom
  4262.     @anime_no_mirror = no_mirror
  4263.     @battler.sv.reset_anime_data
  4264.   end  
  4265.   #--------------------------------------------------------------------------
  4266.   # ● 子スプライト座標セット
  4267.   #--------------------------------------------------------------------------
  4268.   def set_position(z, zoom_x, zoom_y, real_x, real_y)
  4269.     self.z = z
  4270.     self.zoom_x = zoom_x
  4271.     self.zoom_y = zoom_y
  4272.     @real_x = real_x
  4273.     @real_y = real_y
  4274.   end
  4275.   #--------------------------------------------------------------------------
  4276.   # ● 他スプライトへのタイミング処理
  4277.   #--------------------------------------------------------------------------
  4278.   def other_process_timing(timing)
  4279.     se_flag = true
  4280.     se_flag = @se_flag if @se_flag != nil
  4281.     @battler.sv.timing.push([se_flag, timing.dup])
  4282.   end
  4283.   #--------------------------------------------------------------------------
  4284.   # ● 他バトラーへのタイミング処理
  4285.   #--------------------------------------------------------------------------
  4286.   def target_battler_process_timing(timing)
  4287.     for target in @timing_targets
  4288.       target.sv.timing.push([false, timing.dup])
  4289.     end  
  4290.   end
  4291.   #--------------------------------------------------------------------------
  4292.   # ● SE とフラッシュのタイミング処理
  4293.   #--------------------------------------------------------------------------
  4294.   alias animation_process_timing_sprite_base_n03 animation_process_timing
  4295.   def animation_process_timing(timing)
  4296.     target_battler_process_timing(timing) if @timing_targets && @timing_targets != []
  4297.     return other_process_timing(timing) if @next != nil
  4298.     animation_process_timing_sprite_base_n03(timing)
  4299.   end
  4300.   #--------------------------------------------------------------------------
  4301.   # ● アニメーションの解放
  4302.   #--------------------------------------------------------------------------
  4303.   alias dispose_animation_sprite_base_n03 dispose_animation
  4304.   def dispose_animation
  4305.     dispose_animation_sprite_base_n03
  4306.   end
  4307. end


  4308. #==============================================================================
  4309. # ■ Sprite_Battler
  4310. #------------------------------------------------------------------------------
  4311. #  バトラー表示用のスプライトです。
  4312. #==============================================================================
  4313. class Sprite_Battler < Sprite_Base
  4314.   #--------------------------------------------------------------------------
  4315.   # ● 公開インスタンス変数 
  4316.   #--------------------------------------------------------------------------
  4317.   attr_accessor   :removing             # パーティ離脱中
  4318.   #--------------------------------------------------------------------------
  4319.   # ● オブジェクト初期化
  4320.   #--------------------------------------------------------------------------
  4321.   alias initialize_sprite_battler_n03 initialize
  4322.   def initialize(viewport, battler = nil)
  4323.     initialize_sprite_battler_n03(viewport, battler)
  4324.     @real_x = @real_y = 0
  4325.     update_bitmap if @battler != nil
  4326.   end
  4327.   #--------------------------------------------------------------------------
  4328.   # ● アニメーションの開始 ★再定義
  4329.   #--------------------------------------------------------------------------
  4330.   def start_animation(animation, mirror = false)
  4331.     return next_animation(animation, mirror) if animation?
  4332.     @animation = animation
  4333.     if @animation
  4334.       @horming = @battler.sv.anime_horming
  4335.       @anime_camera_zoom = @battler.sv.anime_camera_zoom
  4336.       @anime_no_mirror = @battler.sv.anime_no_mirror
  4337.       @timing_targets = @battler.sv.timing_targets
  4338.       @plus_z = @battler.sv.anime_plus_z
  4339.       @battler.sv.reset_anime_data
  4340.       @ani_mirror = mirror
  4341.       set_animation_rate
  4342.       @ani_duration = @animation.frame_max * @ani_rate + 1
  4343.       load_animation_bitmap
  4344.       make_animation_sprites
  4345.       set_animation_origin
  4346.     end
  4347.   end
  4348.   #--------------------------------------------------------------------------
  4349.   # ● 次のアニメを開始
  4350.   #--------------------------------------------------------------------------
  4351.   def next_animation(animation, mirror)
  4352.     @next_anime = [] if @next_anime == nil
  4353.     @next_anime.push(Sprite_Base.new(viewport))
  4354.     @next_anime[@next_anime.size - 1].set(battler, @battler.sv.anime_horming, @battler.sv.anime_camera_zoom, @battler.sv.anime_no_mirror)
  4355.     @next_anime[@next_anime.size - 1].set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y)
  4356.     @next_anime[@next_anime.size - 1].start_animation(animation, mirror)
  4357.   end
  4358.   #--------------------------------------------------------------------------
  4359.   # ● 影グラフィック作成
  4360.   #--------------------------------------------------------------------------
  4361.   def create_shadow
  4362.     reset_shadow
  4363.     return if @battler.sv.shadow == false
  4364.     @shadow = Sprite.new(viewport) if @shadow == nil
  4365.     @shadow.bitmap = Cache.character(@battler.sv.shadow)
  4366.     @shadow.ox = @shadow.bitmap.width / 2
  4367.     @shadow.oy = @shadow.bitmap.height / 2
  4368.   end
  4369.   #--------------------------------------------------------------------------
  4370.   # ● 影グラフィック初期化
  4371.   #--------------------------------------------------------------------------
  4372.   def reset_shadow
  4373.     return if @shadow == nil
  4374.     @shadow.dispose
  4375.     @shadow = nil
  4376.   end  
  4377.   #--------------------------------------------------------------------------
  4378.   # ● 転送元ビットマップの更新 ★再定義
  4379.   #--------------------------------------------------------------------------
  4380.   def update_bitmap
  4381.     update_bitmap_enemy if [email protected]?
  4382.     update_bitmap_actor if @battler.actor?
  4383.     update_src_rect if @battler != nil
  4384.     update_color if @battler != nil
  4385.   end
  4386.   #--------------------------------------------------------------------------
  4387.   # ● 転送元ビットマップ:エネミー
  4388.   #--------------------------------------------------------------------------
  4389.   def update_bitmap_enemy
  4390.     if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
  4391.       @battler_name = @battler.battler_name
  4392.       @battler_hue = @battler.battler_hue
  4393.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  4394.       @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  4395.       self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue)
  4396.       @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  4397.       create_shadow
  4398.       init_visibility
  4399.       @battler_id = @battler.id
  4400.     end
  4401.   end  
  4402.   #--------------------------------------------------------------------------
  4403.   # ● 転送元ビットマップ:アクター
  4404.   #--------------------------------------------------------------------------
  4405.   def update_bitmap_actor
  4406.     if @battler.character_name != @battler_name or @battler.character_index != @battler_index
  4407.       @battler_name = @battler.character_name
  4408.       @battler_index = @battler.character_index
  4409.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  4410.       @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  4411.       self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index)
  4412.       @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  4413.       create_shadow
  4414.       init_visibility
  4415.       @battler_id = @battler.id
  4416.     end
  4417.   end
  4418.   #--------------------------------------------------------------------------
  4419.   # ● 可視状態の初期化 ★再定義
  4420.   #--------------------------------------------------------------------------
  4421.   def init_visibility
  4422.     @battler_visible = @battler.alive?
  4423.     @battler_visible = true if @battler.sv.state(1) != "敵コラプス"
  4424.     @battler_visible = false if @battler.hidden?
  4425.     @battler.sv.opacity = 0 unless @battler_visible
  4426.     self.opacity = 0 unless @battler_visible
  4427.     self.opacity = 255 if @battler_visible
  4428.     @battler.sv.weapon_visible = @battler_visible
  4429.   end
  4430.   #--------------------------------------------------------------------------
  4431.   # ● 転送元矩形の更新
  4432.   #--------------------------------------------------------------------------
  4433.   def update_src_rect
  4434.     return if @battler.sv.collapse
  4435.     if @battler_graphic_file_index != @battler.sv.graphic_file_index
  4436.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  4437.       self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index) if @battler.actor?
  4438.       self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue) if [email protected]?
  4439.       @battler.sv.set_graphics(self.bitmap.width, self.bitmap.height)
  4440.     end
  4441.     anime_off if @battler.sv.anime_off
  4442.     self.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  4443.     self.opacity = @battler.sv.opacity if @battler_visible
  4444.     set_process_timing(@battler.sv.timing) if @battler && @battler.sv.timing != []
  4445.   end
  4446.   #--------------------------------------------------------------------------
  4447.   # ● 位置の更新 ★再定義
  4448.   #--------------------------------------------------------------------------
  4449.   def update_position
  4450.     @real_x = @battler.sv.x / 100
  4451.     @real_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust)/ 100
  4452.     self.x = @real_x - $sv_camera.x
  4453.     self.y = @real_y - $sv_camera.y
  4454.     self.z = @battler.sv.z - @battler.sv.c / 100
  4455.     if @battler.sv.h <= 0
  4456.       self.x += $sv_camera.sx / 100
  4457.       self.y += $sv_camera.sy / 100
  4458.     end  
  4459.     self.x *= $sv_camera.zoom
  4460.     self.y *= $sv_camera.zoom
  4461.   end
  4462.   #--------------------------------------------------------------------------
  4463.   # ● 原点の更新 ★再定義
  4464.   #--------------------------------------------------------------------------
  4465.   def update_origin
  4466.     return if !bitmap or @battler.sv.collapse
  4467.     self.ox = @battler.sv.ox
  4468.     self.oy = @battler.sv.oy
  4469.     self.angle = @battler.sv.angle
  4470.     self.zoom_x = @battler.sv.zoom_x * $sv_camera.zoom
  4471.     self.zoom_y = @battler.sv.zoom_y * $sv_camera.zoom
  4472.     self.mirror = @battler.sv.mirror if !@graphic_mirror_flag
  4473.     self.mirror = [email protected] if @graphic_mirror_flag
  4474.   end
  4475.   #--------------------------------------------------------------------------
  4476.   # ● 影グラフィックの更新
  4477.   #--------------------------------------------------------------------------
  4478.   def update_shadow
  4479.     @shadow.visible = @battler.sv.shadow_visible
  4480.     @shadow.opacity = @battler.sv.opacity if @battler.sv.opacity_data[3]
  4481.     @shadow.opacity = self.opacity if [email protected]_data[3]
  4482.     @shadow.x = @real_x - $sv_camera.x
  4483.     @shadow.y = (@battler.sv.y - @battler.sv.c)/ 100 - $sv_camera.y
  4484.     @shadow.z = @battler.sv.z - 10
  4485.     @shadow.zoom_x = $sv_camera.zoom
  4486.     @shadow.zoom_y = $sv_camera.zoom
  4487.     @shadow.x += $sv_camera.sx / 100
  4488.     @shadow.y += $sv_camera.sy / 100
  4489.     @shadow.x *= $sv_camera.zoom
  4490.     @shadow.y *= $sv_camera.zoom
  4491.     @shadow.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  4492.   end
  4493.   #--------------------------------------------------------------------------
  4494.   # ● ふきだしの更新
  4495.   #--------------------------------------------------------------------------
  4496.   def update_balloon
  4497.     if @battler.sv.balloon_data == [] && @balloon
  4498.       @balloon_data = []
  4499.       @balloon.dispose
  4500.       return @balloon = nil
  4501.     elsif @battler.sv.balloon_data != [] && @battler.sv.balloon_data != @balloon_data
  4502.       @balloon_data = @battler.sv.balloon_data
  4503.       @balloon = Sprite.new(self.viewport)
  4504.       @balloon.bitmap = Cache.system("Balloon")
  4505.       @balloon.zoom_x = @balloon_data[3]
  4506.       @balloon.zoom_y = @balloon_data[3]
  4507.       @balloon.ox = 32 if @battler.sv.mirror
  4508.       @balloon.oy = 16
  4509.       @balloon_count = 0
  4510.     end
  4511.     return if !@balloon
  4512.     @balloon.opacity = self.opacity
  4513.     @balloon.x = self.x
  4514.     @balloon.y = self.y - @battler.sv.ch * $sv_camera.zoom
  4515.     @balloon.z = self.z + 20
  4516.     @balloon.src_rect.set(32 + @balloon_count / @balloon_data[2] * 32, @balloon_data[1] * 32, 32, 32) if @balloon_count % @balloon_data[2] == 0
  4517.     @balloon.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  4518.     @balloon_count += 1
  4519.     @balloon_count = 0 if @balloon_count == @balloon_data[2] * 7
  4520.   end
  4521.   #--------------------------------------------------------------------------
  4522.   # ● 色調変更の更新
  4523.   #--------------------------------------------------------------------------
  4524.   def update_color
  4525.     color_set if @battler.sv.color_set != []
  4526.     return if @color_data == nil
  4527.     @color_data[4] -= 1
  4528.     if @color_data[4] == 0 && @color_data[5] != 0
  4529.       @color_data[4] = @color_data[5]
  4530.       @color_data[5] = 0
  4531.       @color_data[6] = [0,0,0,0]
  4532.     elsif @color_data[4] == 0
  4533.       @remain_color_data = @color_data
  4534.       @battler.sv.color = @color_data.dup
  4535.       return @color_data = nil
  4536.     end  
  4537.     for i in 0..3
  4538.       @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  4539.     end  
  4540.     @battler.sv.color = @color_data.dup
  4541.     self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  4542.   end
  4543.   #--------------------------------------------------------------------------
  4544.   # ● 残像の更新
  4545.   #--------------------------------------------------------------------------
  4546.   def update_mirage
  4547.     if @battler.sv.mirage == [] && @mirages
  4548.       @mirage_data = []
  4549.       for mirage in @mirages do mirage.dispose end
  4550.       return @mirages = nil
  4551.     elsif @battler.sv.mirage != [] && @battler.sv.mirage != @mirage_data
  4552.       @mirage_data = @battler.sv.mirage
  4553.       @mirages = []
  4554.       for i in 0...@mirage_data[1] do @mirages[i] = Sprite.new(self.viewport) end
  4555.       @mirage_count = 0
  4556.     end
  4557.     return if !@mirages
  4558.     @mirage_count += 1
  4559.     @mirage_count = 0 if @mirage_count == @mirage_data[2] * @mirages.size
  4560.     for i in [email protected]
  4561.       mirage_body(@mirages[i], @mirage_data[4]) if @mirage_count == 1 + i * @mirage_data[2]
  4562.     end
  4563.   end
  4564.   #--------------------------------------------------------------------------
  4565.   # ● 残像本体
  4566.   #--------------------------------------------------------------------------
  4567.   def mirage_body(body, opacity)
  4568.     body.bitmap = self.bitmap.dup
  4569.     body.x = self.x
  4570.     body.y = self.y
  4571.     body.ox = self.ox
  4572.     body.oy = self.oy
  4573.     body.z = self.z - 20
  4574.     body.mirror = self.mirror
  4575.     body.angle = self.angle
  4576.     body.opacity = opacity * self.opacity / 255
  4577.     body.zoom_x = self.zoom_x
  4578.     body.zoom_y = self.zoom_y   
  4579.     body.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  4580.     body.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  4581.   end   
  4582.   #--------------------------------------------------------------------------
  4583.   # ● 次のアニメを更新
  4584.   #--------------------------------------------------------------------------
  4585.   def update_next_anime
  4586.     return if !@next_anime
  4587.     for anime in @next_anime
  4588.       anime.update
  4589.       anime.set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y) if @horming
  4590.       anime.dispose if !anime.animation?
  4591.       @next_anime.delete(anime) if !anime.animation?
  4592.     end  
  4593.   end
  4594.   #--------------------------------------------------------------------------
  4595.   # ● フレーム更新
  4596.   #--------------------------------------------------------------------------
  4597.   alias update_sprite_battler_n03 update
  4598.   def update
  4599.     @battler.sv.update if @battler
  4600.     update_sprite_battler_n03
  4601.     update_next_anime
  4602.     update_shadow  if @battler && @shadow
  4603.     update_mirage  if @battler
  4604.     update_balloon if @battler
  4605.     update_remove if @battler && @removing && @battler.sv.change_up
  4606.   end
  4607.   #--------------------------------------------------------------------------
  4608.   # ● 戦闘アニメ消去
  4609.   #--------------------------------------------------------------------------
  4610.   def anime_off
  4611.     @battler.sv.anime_off = false
  4612.     dispose_animation
  4613.     for anime in @next_anime do anime.dispose_animation end if @next_anime
  4614.   end
  4615.   #--------------------------------------------------------------------------
  4616.   # ● バトラー入れ替え
  4617.   #--------------------------------------------------------------------------
  4618.   def remove
  4619.     @battler.sv.start_action(@battler.sv.remove_action)
  4620.     $sv_camera.wait = 40
  4621.     @battler.sv.add_action("eval('set_change')")
  4622.     @removing = true
  4623.   end
  4624.   #--------------------------------------------------------------------------
  4625.   # ● バトラー入れ替えの更新
  4626.   #--------------------------------------------------------------------------
  4627.   def update_remove
  4628.     @battler.sv.change_up = false
  4629.     @removing = false
  4630.     @battler = nil
  4631.   end  
  4632.   #--------------------------------------------------------------------------
  4633.   # ● バトラー加入
  4634.   #--------------------------------------------------------------------------
  4635.   def join(join_battler)
  4636.     $sv_camera.wait = 30
  4637.     @battler = join_battler
  4638.     @battler_name = @battler.character_name
  4639.     @battler_index = @battler.character_index
  4640.     @battler_graphic_file_index = @battler.sv.graphic_file_index
  4641.     self.bitmap = Cache.character(@battler_name)
  4642.     @battler.sv.setup(self.bitmap.width, self.bitmap.height, true)
  4643.     create_shadow
  4644.     init_visibility
  4645.   end
  4646.   #--------------------------------------------------------------------------
  4647.   # ● 通常の設定に戻す ★再定義
  4648.   #--------------------------------------------------------------------------
  4649.   def revert_to_normal
  4650.     self.blend_type = 0
  4651.     self.opacity = 255
  4652.   end
  4653.   #--------------------------------------------------------------------------
  4654.   # ● 崩壊エフェクトの更新
  4655.   #--------------------------------------------------------------------------
  4656.   alias update_collapse_sprite_battler_n03 update_collapse
  4657.   def update_collapse
  4658.     return if @battler.sv.state(1) != "敵コラプス"
  4659.     update_collapse_sprite_battler_n03
  4660.     @battler.sv.weapon_visible = false
  4661.   end
  4662.   #--------------------------------------------------------------------------
  4663.   # ● ボス崩壊エフェクトの更新 ★再定義
  4664.   #--------------------------------------------------------------------------
  4665.   def update_boss_collapse
  4666.     @effect_duration = @battler.sv.ch if @effect_duration >= @battler.sv.ch
  4667.     alpha = @effect_duration * 120 / @battler.sv.ch
  4668.     self.ox = @battler.sv.cw / 2 + @effect_duration % 2 * 4 - 2
  4669.     self.blend_type = 1
  4670.     self.color.set(255, 255, 255, 255 - alpha)
  4671.     self.opacity = alpha
  4672.     self.src_rect.y -= 1
  4673.     Sound.play_boss_collapse2 if @effect_duration % 20 == 19
  4674.   end
  4675.   #--------------------------------------------------------------------------
  4676.   # ● 別スプライトからのタイミング処理
  4677.   #--------------------------------------------------------------------------
  4678.   def set_process_timing(timing_data)
  4679.     for data in timing_data
  4680.       set_timing(data[0],data[1])
  4681.     end
  4682.     @battler.sv.timing = []
  4683.   end
  4684.   #--------------------------------------------------------------------------
  4685.   # ● タイミング処理
  4686.   #--------------------------------------------------------------------------
  4687.   def set_timing(se_flag, data)
  4688.     @ani_rate = 4
  4689.     data.se.play if se_flag
  4690.     case data.flash_scope
  4691.     when 1 ;self.flash(data.flash_color, data.flash_duration * @ani_rate)
  4692.     when 2 ;viewport.flash(data.flash_color, data.flash_duration * @ani_rate) if viewport
  4693.     when 3 ;self.flash(nil, data.flash_duration * @ani_rate)
  4694.     end
  4695.   end
  4696.   #--------------------------------------------------------------------------
  4697.   # ● 色調変更
  4698.   #--------------------------------------------------------------------------
  4699.   def color_set
  4700.     set = @battler.sv.color_set
  4701.     @battler.sv.color_set= []
  4702.     set[4] = 1 if set[4] == 0
  4703.     @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  4704.     @color_data = @remain_color_data
  4705.     @color_data[4] = set[4]
  4706.     @color_data[5] = set[5]
  4707.     @color_data[6] = set
  4708.   end
  4709.   #--------------------------------------------------------------------------
  4710.   # ● 解放
  4711.   #--------------------------------------------------------------------------
  4712.   alias dispose_sprite_battler_n03 dispose
  4713.   def dispose
  4714.     dispose_sprite_battler_n03
  4715.     @shadow.dispose if @shadow != nil
  4716.     @balloon.dispose if @balloon != nil
  4717.     for mirage in @mirages do mirage.dispose end if @mirages != nil
  4718.     for anime in @next_anime do anime.dispose end if @next_anime
  4719.   end
  4720. end


  4721. #==============================================================================
  4722. # ■ Spriteset_Battle
  4723. #------------------------------------------------------------------------------
  4724. #  バトル画面のスプライトをまとめたクラスです。
  4725. #==============================================================================
  4726. class Spriteset_Battle
  4727.   #--------------------------------------------------------------------------
  4728.   # ● 戦闘背景(床)スプライトの作成 ★再定義
  4729.   #--------------------------------------------------------------------------
  4730.   def create_battleback1
  4731.     @back1_sprite = Sprite_Battle_Back.new(@viewport1, 1, battleback1_name)
  4732.     @back1_sprite.set_graphics(battleback1_bitmap) if battleback1_name != nil
  4733.     @back1_sprite.z = 0
  4734.   end
  4735.   #--------------------------------------------------------------------------
  4736.   # ● 戦闘背景(壁)スプライトの作成 ★再定義
  4737.   #--------------------------------------------------------------------------
  4738.   def create_battleback2
  4739.     @back2_sprite = Sprite_Battle_Back.new(@viewport1, 2, battleback2_name)
  4740.     @back2_sprite.set_graphics(battleback2_bitmap) if battleback2_name != nil
  4741.     @back2_sprite.z = 1
  4742.   end
  4743.   #--------------------------------------------------------------------------
  4744.   # ● アクタースプライトの作成 ★再定義
  4745.   #--------------------------------------------------------------------------
  4746.   def create_actors
  4747.     @actor_sprites = []
  4748.     for i in 0...$game_party.max_battle_members
  4749.       @actor_sprites[i] = Sprite_Battler.new(@viewport1, $game_party.members[i])
  4750.     end
  4751.     @effect_sprites = Spriteset_Sideview.new(@viewport1)
  4752.   end
  4753.   #--------------------------------------------------------------------------
  4754.   # ● アクタースプライトの更新 ★再定義
  4755.   #--------------------------------------------------------------------------
  4756.   def update_actors
  4757.     @actor_sprites.each_with_index do |sprite, i|
  4758.       sprite_join($game_party.members[i], sprite) if sprite.battler == nil && sprite.battler != $game_party.members[i]
  4759.       sprite.remove if sprite.battler != nil && !sprite.removing && sprite.battler != $game_party.members[i]
  4760.       sprite.update
  4761.     end
  4762.     @effect_sprites.update
  4763.     update_program
  4764.   end
  4765.   #--------------------------------------------------------------------------
  4766.   # ● メンバーを加える
  4767.   #--------------------------------------------------------------------------
  4768.   def sprite_join(member, sprite)
  4769.     for sp in @actor_sprites
  4770.       sp.update_remove if member == sp.battler && !sp.battler.sv.change_up
  4771.     end
  4772.     sprite.join(member)
  4773.   end
  4774.   #--------------------------------------------------------------------------
  4775.   # ● バトルプログラムの更新
  4776.   #--------------------------------------------------------------------------
  4777.   def update_program
  4778.     return if $sv_camera.program_scroll == []
  4779.     for data in  $sv_camera.program_scroll
  4780.       @back1_sprite.start_back_data(data) if data[2] == 1
  4781.       @back2_sprite.start_back_data(data) if data[2] == 2
  4782.     end
  4783.     $sv_camera.program_scroll = []
  4784.   end
  4785.   #--------------------------------------------------------------------------
  4786.   # ● ヒット時の戦闘アニメ実行
  4787.   #--------------------------------------------------------------------------
  4788.   def set_hit_animation(battler, weapon_index, hit_targets, miss)
  4789.     @effect_sprites.set_hit_animation(battler, weapon_index, hit_targets, miss)
  4790.   end
  4791.   #--------------------------------------------------------------------------
  4792.   # ● ダメージPOP
  4793.   #--------------------------------------------------------------------------
  4794.   def set_damage_pop(target)
  4795.     @effect_sprites.set_damage_pop(target)
  4796.   end
  4797.   #--------------------------------------------------------------------------
  4798.   # ● 解放
  4799.   #--------------------------------------------------------------------------
  4800.   alias dispose_spriteset_battle_n03 dispose
  4801.   def dispose
  4802.     dispose_spriteset_battle_n03
  4803.     @effect_sprites.dispose
  4804.   end
  4805.   
  4806.   
  4807.   
  4808. end


  4809. #==============================================================================
  4810. # ■ Window_BattleLog
  4811. #------------------------------------------------------------------------------
  4812. #  戦闘の進行を実況表示するウィンドウです。
  4813. #==============================================================================
  4814. class Window_BattleLog < Window_Selectable
  4815.   #--------------------------------------------------------------------------
  4816.   # ● ウェイト ★再定義
  4817.   #--------------------------------------------------------------------------
  4818.   def wait
  4819.   end
  4820.   #--------------------------------------------------------------------------
  4821.   # ● ウェイトとクリア ★再定義
  4822.   #--------------------------------------------------------------------------
  4823.   def wait_and_clear
  4824.     $sv_camera.wait = 10
  4825.   end
  4826.   #--------------------------------------------------------------------------
  4827.   # ● 行動結果の表示 ★再定義
  4828.   #--------------------------------------------------------------------------
  4829.   def display_action_results(target, item)
  4830.     if target.result.used
  4831.       last_line_number = line_number
  4832.       display_critical(target, item)
  4833.       display_damage(target, item)
  4834.       display_affected_status(target, item)
  4835.       display_failure(target, item)
  4836.     end
  4837.     off if !N03::BATTLE_LOG
  4838.   end
  4839.   #--------------------------------------------------------------------------
  4840.   # ● ウインドウ非表示
  4841.   #--------------------------------------------------------------------------
  4842.   def off
  4843.     @back_sprite.visible = self.visible = false
  4844.   end
  4845. end
  4846. #==============================================================================
  4847. # ■ Game_Interpreter
  4848. #------------------------------------------------------------------------------
  4849. #  イベントコマンドを実行するインタプリタです。
  4850. #==============================================================================
  4851. class Game_Interpreter
  4852.   #--------------------------------------------------------------------------
  4853.   # ● スイッチの操作
  4854.   #--------------------------------------------------------------------------
  4855.   alias command_121_game_interpreter_n03 command_121
  4856.   def command_121
  4857.     command_121_game_interpreter_n03
  4858.     $sv_camera.program_check
  4859.   end
  4860. end
复制代码

Lv2.观梦者

梦石
0
星屑
567
在线时间
465 小时
注册时间
2009-10-11
帖子
407
3
发表于 2013-3-18 00:25:36 | 只看该作者
SideViewバトラー設定 Ver100---在這腳本裡找到"エネミーは下のエネミー武器設定で持たせることができます"

然後修改這段的↓  X = 你弓類武器的武器類別(VA - 用語 - 武器類型的編號)
when "X"
      return "弓攻撃"

评分

参与人数 1星屑 +50 收起 理由
Mic_洛洛 + 50 回复奖励

查看全部评分

因为现实太残酷、所以我们都在打造虚幻的天堂。如果现实不再残酷,也是因为有这快乐的天堂。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
88
在线时间
1906 小时
注册时间
2012-10-5
帖子
1991

开拓者

2
发表于 2013-3-17 23:19:30 | 只看该作者

评分

参与人数 1星屑 +100 收起 理由
Mic_洛洛 + 100 回复奖励

查看全部评分

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-15 12:39

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表