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

Project1

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

[已经解决] 关于SIDEVIEW的侧视战斗脚本(VA)

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
24 小时
注册时间
2014-3-21
帖子
13
跳转到指定楼层
1
发表于 2014-4-20 01:50:49 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 Sion 于 2014-5-24 21:35 编辑

我是下了一个超级整合范例中有这个脚本的  它分为SideView アクション設定  SideViewバトラー設定  横版 Sprite_Sideview  Battle_Camera  エイリアス・再定義  这6个脚本
能实现侧视战斗  但是一用技能或者魔法  “横版”的“return $data_animations[anime_id].frame_max * 4”这一行就会出错   带有此脚本的范例同样不能使用特技或魔法
问题一:有人说是缺少待机 吟唱魔法等动画   我该去哪找这些动画  找到后放在哪里  又怎么关联到每个不同的技能
问题二:另外这6个脚本能实现的功能具体都有哪些  我肉眼看就只能看出有个侧视战斗的效果 有没有推荐的比较好的有中文备注的相对简单的侧视战斗脚本
问题三:我下了不少标注Sprite_Sideview可用的战斗素材  每个素材都有单独的文件夹  并且有pnd文件还有psd文件  我要以此素材为怪物1的话  需要怎么操作  从而实现这些文件都能利用到  达到最好效果

下面是这6 个脚本


RUBY 代码复制
  1. #==============================================================================
  2. # ■ SideViewアクション設定
  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. # ここのアクション名やフルアクション名は、かぶらないようにしてください
  85.   ACTION = {
  86.  
  87. #--------------------------------------------------------------------------
  88. # ● バトラーアニメ設定
  89. #--------------------------------------------------------------------------
  90.   # デフォルトのキャラチップは一つの画像ファイルに複数のキャラが配置されています
  91.   # キャラチップを利用する場合、追加画像はキャラの画像配置に合うようにしてください
  92.   # 一人のキャラで一つの画像を用いる(ファイルの頭に$がある)場合は特に問題ありません
  93.  
  94.   # インデックス…利用するバトラー画像ファイルの後ろに付くインデックス名。
  95.   #          サイドビューのバトラーはアクターの場合だとキャラクターファイル名を参照しますが
  96.   #          インデックスが付くと、キャラクターファイル名+インデックス名の画像ファイルを参照します
  97.   #          例)Actor1のバトラーがインデックス"_1"のアニメを実行する場合の参照ファイルはActor1_1
  98.   #          キャラチップを利用する場合のアニメのインデックスは""になります
  99.   #          アクターはCharactersフォルダ、エネミーはBattlersフォルダに画像を入れます
  100.   #
  101.   # 縦セル…画像ファイルのセルの縦位置。上から0~3と続きます。数に制限はありません
  102.   #       セル数の設定はバトラー設定で行ってください
  103.   # 横セル…画像ファイルのセルの横位置で、再生開始セル。左から0~3と続きます。
  104.   #       アニメはこの横セルの左から右へと再生します。セル数に制限はありません
  105.   # パターン… 0:セル固定 1:片道 2:往復 3:片道ループ 4:往復ループ
  106.   # 速度…アニメの更新速度。数字が低いほど早く更新します
  107.   # Z軸…手前に表示するならプラス。通常は画面下ほど手前に表示されます
  108.   # ウエイト…アニメパターンが最後まで再生されてから次の行動に移るならtrue
  109.   # 影…影グラフィックを表示するならtrue、しない場合はfalse
  110.   # 武器…武器を表示する場合は武器アクション名を。しない場合は""
  111.   #       武器アクションはいくつでも同時追加可能で、追加分は配列の後ろに入れていきます
  112.  
  113.   #―アクション名(待機系)―   判別   インデックス  縦セル 横セル パターン 速度  Z軸  ウエイト   影   武器
  114.   "待機"            => ["motion",   "",    1,   0,   4,   12,   0, true, true, "" ],
  115.   "待機固定WT"      => ["motion",   "",    1,   1,   0,   12,   0, true, true, "" ],
  116.   "待機固定"        => ["motion",   "",    1,   1,   0,   12,   0,false, true, "" ],
  117.   "倒れ"            => ["motion", "_1",    0,   0,   0,   12,   0, true,false, "" ],
  118.   "右向き"          => ["motion",   "",    2,   0,   4,   12,   0, true, true, "" ],
  119.  
  120.   #―アクション名(移動系)―    判別   ファイルNo 縦セル 横セル パターン 速度  Z軸 ウエイト   影    武器
  121.   "左向き移動"      => ["motion",   "",    1,   0,   4,    6,  10, true, true, "" ],
  122.   "右向き移動"      => ["motion",   "",    2,   0,   4,    6,  10, true, true, "" ],
  123.  
  124.   #―アクション名(ポーズ系)―   判別   ファイルNo 縦セル 横セル パターン 速度  Z軸 ウエイト   影    武器
  125.   "武器掲げ"        => ["motion",   "",    1,   0,   1,    2, 200,false, true, "掲げ" ],
  126.  
  127.   #―アクション名(攻撃系)―    判別   ファイルNo 縦セル 横セル パターン 速度  Z軸 ウエイト   影    武器
  128.   "武器振りR"       => ["motion",   "",    1,   0,   1,    2, 200,false, true, "縦振り"],
  129.   "武器振りL"       => ["motion",   "",    1,   0,   1,    2, 200,false, true, "縦振りL"],
  130.   "武器振りLR"      => ["motion",   "",    1,   0,   1,    2, 200,false, true, "縦振り","縦振りL"],
  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. #--------------------------------------------------------------------------
  138. # ● バトラー移動  エネミーのX軸移動は自動で逆計算になります
  139. #--------------------------------------------------------------------------
  140.   # 目標…移動する目標座標の参照先。数値が正で現在地、負で初期位置を参照します([0=自分]は負が設定できないので-7にしてください)
  141.   #       [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  142.   # X軸…対象から見たX座標
  143.   # Y軸…対象から見たY座標
  144.   # H軸…対象から見たH座標(地面からの高さ) nilにするとH軸を無視してXYのみの移動に
  145.   # 速度…1フレームで移動するピクセル数。数値をマイナスにすると時間指定になり、移動完了までの総フレーム数になります
  146.   # カーブ…移動時の軌道が正は上、負は下にカーブします。
  147.   # ジャンプ…ジャンプ放物線軌道。[ジャンプ開始から頂点までの軌道, 頂点から着地までの軌道]
  148.   # アニメ…その移動に利用するバトラーアニメのアクション名。
  149.  
  150.   #――アクション名(システム系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  151.   "戦闘前の味方配置"    => ["move",-7, 180,   0,   0,  0,   0, [  0,  0], "左向き移動"],
  152.   "退場"                => ["move",-7, 180,   0,   0,  7,   0, [  0,  0], "右向き移動"],
  153.   "逃走途中"            => ["move",-7,  80,   0,   0,  7,   0, [  0,  0], "右向き移動"],
  154.   "コマンド入力移動"    => ["move",-7, -20,   0, nil,-10,   0, [  0,  0], "左向き移動"],
  155.   "ダメージのけぞり"    => ["move", 0,  20,   0, nil,-10,   0, [  0,  0], ""],
  156.   "ダメージのけぞり大"  => ["move", 0,  60,   0, nil,-10,   0, [  0,  0], ""],
  157.  
  158.   #――アクション名(リセット系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  159.   "座標リセット早"      => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "右向き移動"],
  160.   "座標リセット"        => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "右向き移動"],
  161.   "座標リセットカーブ"  => ["move",-7,   0,   0,   0,-20,  -2, [  0,  0], "右向き移動"],
  162.   "座標リセット左向き"  => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  163.  
  164.   #――アクション名(自身系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  165.   "一歩前移動"          => ["move", 0, -20,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  166.   "一歩後移動"          => ["move", 0,  20,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  167.   "一歩前ジャンプ"      => ["move", 0, -30,   0,   0,-10,   0, [ 20,-20], "左向き移動"],
  168.   "一歩後ジャンプ"      => ["move", 0,  30,   0,   0,-10,   0, [ 20,-20], "左向き移動"],
  169.   "勝利ジャンプ"        => ["move", 0,  10,   0,   0,-25,   0, [ 30,-30], "待機固定"],
  170.   "勝利ジャンプ武器"    => ["move", 0,   0,   0,   0,-15,   0, [ 20,  0], "武器掲げ"],
  171.   "勝利ジャンプ着地"    => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "武器振りR"],
  172.   "縦揺れ01"            => ["move", 0,   0,   0,  20, -2,   0, [  0,  0], ""],
  173.   "縦揺れ02"            => ["move", 0,   0,   0, -20, -2,   0, [  0,  0], ""],
  174.  
  175.   #――アクション名(目標系)――   判別 目標 X軸  Y軸  H軸 速度  カーブ  ジャンプ    アニメ
  176.   "敵前移動"            => ["move", 1,  30,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  177.   "敵後移動"            => ["move", 1, -60,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  178.   "敵中移動早"          => ["move", 1,   0,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  179.   "叩き付け前ジャンプ"  => ["move",-1,   0,   0, 100,-20,   0, [ 40,-20], "武器掲げ"],
  180.   "叩き付け"            => ["move",-1,   0,   0,   0,-10,   0, [  0,  0], "武器振りR"],
  181.  
  182. #--------------------------------------------------------------------------
  183. # ● 武器アクション バトラーアニメや武器・アニメ飛ばしに利用するアクション
  184. #--------------------------------------------------------------------------
  185.   # タイプ…[0…アイコン利用]
  186.   #       [1…独自画像(画像名はバトラー設定の武器の項目で行います。参照先はCharactersフォルダ)]
  187.   #       [2…アニメセル(※2003仕様。バトラーと同じセル数でアニメします。画像名はバトラー設定の武器の項目で行います。参照先はCharactersフォルダ)]
  188.   # 移動…画像を動かす距離。[X軸, Y軸]
  189.   # 調整…微調整する画像の初期座標。[X軸, Y軸]
  190.   # 始度…動作前の最初の角度。反時計回りで0~360度。負が時計回り
  191.   # 終度…動作後の角度
  192.   # 原点…画像の原点。[0…中心] [1…左上] [2…右上] [3…左下] [4…右下] [5…バトラーと同じ(画像下と縦半分)]
  193.   # 反転…trueにすると画像を反転して表示
  194.   # 拡大…[X軸拡大率, Y軸拡大率] 小数点でも受け付けます
  195.   # Z軸…画像をキャラより手前に表示するならtrue
  196.   # 逆手…盾画像、もしくは二刀流時の左(項目だと下)の武器画像を表示
  197.   #       アイコンを利用しない場合、盾の画像はバトラー設定の盾の項目で行います
  198.   # 更新…-1でバトラーアニメ更新と同期化。独立させる場合は [更新時間間隔, 更新パターン数, ループするか]
  199.   #         
  200.   # インデックス…武器画像は装備している武器(盾)に設定された画像ファイルを参照しますが、
  201.   #          ここでインデックスを付けると、画像ファイル名+インデックス名の画像を参照します
  202.   #          一つの武器で複数のパターンがある画像を用いる場合に利用します
  203.   #          例) "縦振り"のインデックスは"" => 画像ファイル名"IconSet"を参照
  204.   #          例) "縦振り2"のインデックスは"_1" => 画像ファイル名"IconSet_1"を参照
  205.   #          参照フォルダはアイコン利用の場合はSystemフォルダ、独自画像とアニメセルはCharactersフォルダです
  206.   #         
  207.   # 画像…武器や盾に設定された画像ファイルやインデックスを無視して、武器画像を直接指定する場合は
  208.   #       ここに画像ファイル名を入れます。画像はCharactersフォルダを参照します
  209.  
  210.   #―アクション名―    判別 タイプ  移動     調整   始度 終度 原点 反転   拡大    Z軸   逆手   更新  インデックス  画像
  211.   "縦振り"    => ["wp", 0,[  6, 0],[ -4,-10], -45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  212.   "盾"        => ["wp", 0,[  0, 0],[ 12,  0],   0,   0,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  213.   "縦振りL"   => ["wp", 0,[  6, 0],[  0, -8],-135,  45,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  214.   "拳突き"    => ["wp", 0,[-20, 0],[  5,  5], -45, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  215.   "突き"      => ["wp", 0,[-25, 0],[ 25,-10],  45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  216.   "掲げ"      => ["wp", 0,[  6,-4],[ -4,-10],  90, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  217.  
  218.   #―2003仕様―   判別 タイプ  移動     調整   始度 終度 原点 反転   拡大    Z軸   逆手   更新  インデックス  画像
  219.   "弓"        => ["wp", 2,[  0, 0],[  0,  0],   0,   0,  5, false, [1,1],  true, false,   -1,   "",    ""],
  220.  
  221.   # 武器飛ばし用  判別 タイプ  移動     調整   始度 終度 原点 反転   拡大    Z軸   二刀     更新      インデックス  画像
  222.   "矢"        => ["wp", 0,[  0, 0],[  0,  0],   0,  45,  0, false, [1,1],  true, false,[2,6,false],   "",    "arrow01"],
  223.   "回転"      => ["wp", 0,[  0, 0],[  0,  0],   0, 360,  0, false, [1,1],  true, false,[1,8, true],   "",    ""],
  224.  
  225. #--------------------------------------------------------------------------
  226. # ● 武器・アニメ飛ばし 武器や戦闘アニメを移動させます。飛び道具などに
  227. #--------------------------------------------------------------------------
  228.   # ID…データベースのアニメID。[移動させるアニメID, ヒット時のアニメID] 0はアニメ非表示、-1は武器のアニメを表示。
  229.   # 始…アニメ移動の開始位置。マイナスにすると、複数ターゲットでも一個のアニメだけ実行
  230.   #     [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  231.   # 後…アニメ移動の終了位置。マイナスにすると、複数ターゲットでも一個のアニメだけ実行
  232.   #     [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  233.   # 始調整…移動開始座標の微調整。[X軸, Y軸] エネミーはX軸が自動で逆計算に
  234.   # 後調整…移動終了座標の微調整。[X軸, Y軸] エネミーはX軸が自動で逆計算に
  235.   # 速度…1フレームに移動するX軸ピクセル数。マイナスにすると時間扱いになり、距離によって速度が変わります
  236.   # タイプ…移動後の処理。[0=消える(ミス時は自動で貫通に変化)] [1=貫通] [2=消える(ミス時も消える)]
  237.   # 軌道…移動の軌道。[開始から頂点までの軌道, 頂点から終了までの軌道]
  238.   # Z軸…アニメや武器をキャラより手前に表示するならtrue
  239.   # ウエイト…アクションが終わるまで次のアクションに移行しないならtrue [移動させるアニメのウエイト, ヒット時アニメのウエイト]
  240.   # ダメージ…目標到達時にダメージ計算を適用するならtrue
  241.   # ホーミング…移動するターゲットに対してホーミングするならtrue。しないならfalse
  242.   # カメラ…カメラのズームに合わせてアニメを拡大縮小するならtrue
  243.   # ループ…移動させるアニメの再生が終わった時、最初にループさせるならtrue
  244.   # 反転不可…いかなる場合でもアニメを反転させないならtrue
  245.   # 武器…武器アクション名を入れます。利用しないなら""
  246.  
  247.   #――アクション名――     判別     ID   始 後  始調整   後調整  速度 タイプ  軌道    Z軸       ウエイト      ダメージ  ホーミング カメラ    ループ 反転不可 武器
  248.   "矢発射WT"       => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [ true, true],  true,  true,  true, false, false,  "矢"],
  249.   "矢発射"         => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [false,false],  true,  true,  true, false, false,  "矢"],
  250.   "水鉄砲発射"     => ["m_a",[69,69], 0, 1, [ 0, 0], [ 0, 0], 10,  0, [ 0, 0], true, [ true, true],  true,  true,  true,  true, false,  ""],
  251.   "武器投げ開始"   => ["m_a",[ 0,-1], 0, 1, [ 4,-6], [ 0, 0], 10,  2, [-3,-3], true, [ true,false],  true,  true,  true, false, false,  "回転"],
  252.   "武器投げ戻し"   => ["m_a",[ 0, 0], 1, 0, [ 0, 0], [ 4,-6], 10,  0, [ 3, 3], true, [ true,false], false,  true,  true, false, false,  "回転"],
  253.  
  254. #--------------------------------------------------------------------------
  255. # ● 戦闘アニメ データベースの戦闘アニメを表示します
  256. #--------------------------------------------------------------------------
  257.   # ID…アニメID。-1で武器に設定されたアニメに  -2は二刀流のもう片方の武器アニメに
  258.   #               -3でスキルに設定されたアニメに
  259.   # 対象…[0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット]
  260.   # ホーミング… 対象の座標移動にアニメが追尾するならtrue
  261.   # ウエイト…アニメ表示が終わるまで待つならtrue
  262.   # ダメージ…ダメージ計算を適用するならtrue
  263.   # カメラ…カメラのズームに合わせてアニメを拡大縮小するならtrue
  264.   # 反転不可…いかなる場合でもアニメを反転させないならtrue
  265.   # 反転…アニメを反転させるならtrue
  266.   # Z軸…アニメをキャラより手前に表示するならtrue
  267.  
  268.   #―アクション名(ダメージ系)―     判別     ID 対象  ホーミング ウエイト  ダメージ   カメラ 反転不可  反転    Z軸
  269.   "対象アニメ武器"      => ["anime",  -1,  1, false, false,  true,  true, false,  false,  true],
  270.   "対象アニメ武器WT"    => ["anime",  -1,  1, false,  true,  true,  true, false,  false,  true],
  271.   "対象アニメ武器LWT"   => ["anime",  -2,  1, false,  true,  true,  true, false,  false,  true],
  272.   "対象アニメ"          => ["anime",  -3,  1, false, false,  true,  true, false,  false,  true],
  273.   "対象アニメWT"        => ["anime",  -3,  1, false,  true,  true,  true, false,  false,  true],
  274.  
  275.   #――アクション名(自身系)――   判別     ID 対象  ホーミング ウエイト  ダメージ   カメラ 反転不可  反転    Z軸
  276.   "魔法詠唱中"          => ["anime", 113,  0,  true,  true, false,  true, false,  false,  true],
  277.   "特技待機中"          => ["anime", 114,  0,  true,  true, false,  true, false,  false,  true],
  278.   "魔法発動アニメ"      => ["anime", 115,  0, false,  true, false,  true, false,  false, false],
  279.   "特技発動アニメ"      => ["anime", 116,  0, false,  true, false,  true, false,  false, false],
  280.  
  281. #--------------------------------------------------------------------------
  282. # ● カメラワーク  画面のズームやスクロールを行います
  283. #--------------------------------------------------------------------------
  284.   # 対象…移動やズームの対象
  285.   #       [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット] [6=画面]
  286.   # 調整座標…カメラ座標の最終地点微調整 [X軸(プラスで画面→), Y軸(プラスで画面↓)]
  287.   # 時間…カメラワークにかける時間
  288.   # ズーム…カメラのズーム率(%)。100でズームなし。
  289.   # ウエイト…カメラワークが終わるまで待つならtrue。待たないならfalse
  290.  
  291.   #――アクション名――      判別    対象  調整座標   ズーム  時間  ウエイト
  292.   "カメラリセット"=> ["camera",   6, [   0,   0], 100,  40, false],
  293.   "ズームイン"    => ["camera",   6, [   0, 100], 120,  40, false],
  294.   "ズームアウト"  => ["camera",   6, [   0,   0],  80,  40, false],
  295.  
  296. #--------------------------------------------------------------------------
  297. # ● 画面のシェイク  画面を揺らします。空中座標(H座標が0以上)のバトラーは揺れません
  298. #--------------------------------------------------------------------------
  299.   # 方向…揺れる方向 [横,縦] 数値が大きいほど揺れ幅は大きくなります
  300.   # 速度…揺れの速度。小さいほど早く揺れます
  301.   # 時間…揺れの続く時間。揺れ幅は時間と共に弱まっていきます
  302.   # ウエイト…シェイクが終わるまで待つならtrue。待たないならfalse
  303.  
  304.   #――アクション名――       判別      方向   速度  時間  ウエイト
  305.   "シェイク小"     => ["shake", [  0, 4],  2,    16, false],
  306.   "シェイク中"     => ["shake", [  0, 6],  3,    30, false],
  307.   "シェイク大"     => ["shake", [  0,12],  3,    40, false],
  308.  
  309. #--------------------------------------------------------------------------
  310. # ● 画面色調変更 背景やバトラーの色調を変更します
  311. #--------------------------------------------------------------------------
  312.   # 対象…色調変更の対象
  313.   #       [0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット]
  314.   #       [6=背景] [7=自分+ターゲット] [8=自分以外] [9=自分+ターゲット以外] [10=全て]
  315.   # 色調レベル…[ R, G, B, アルファ(色の強さ), 変更時間, ※戻り]
  316.   #             ※戻り…変更完了してから元の色に戻す時間。戻さないなら0
  317.   # ウエイト…色調変更が終わるまで待つならtrue。待たないならfalse
  318.  
  319.   # 変更名                        判別    対象     R,   G,   B,アルファ  時間 戻り  ウエイト
  320.   "色調初期化"               => ["color",  10, [   0,   0,   0,   0,  30,   0], false],
  321.   "ピンチ色調"               => ["color",   0, [ 255,  50,  50, 100,  40,  40], false],
  322.   "毒色調"                   => ["color",   0, [ 170,  50, 255, 170,  30,  30], false],
  323.   "汎用状態異常色調"         => ["color",   0, [ 255, 255,  50, 170,  40,  40], false],
  324.   "背景のみ暗転"             => ["color",   6, [   0,   0,   0, 255,  30,   0], false],
  325.   "自分とターゲット以外暗転" => ["color",   9, [   0,   0,   0, 255,  30,   0], false],
  326.  
  327. #--------------------------------------------------------------------------
  328. # ● トランジション 画面を固定した後に実行するトランジションです
  329. #--------------------------------------------------------------------------
  330.   # 実行する前にアクション"画面固定"を実行し、画面を固定させてください
  331.   #
  332.   # 境界…境界の曖昧さ。値が大きいほど曖昧になります
  333.   # 時間…トランジションにかける時間。トランジション中はゲーム画面は固定されます
  334.   # トランジションファイル名…トランジション画像。Picturesフォルダに入れてください
  335.  
  336.   #―――アクション名―――   判別  境界  時間  トランジションファイル名
  337.   "サークル"         => ["ts",  40,   60,  "circle"],
  338.  
  339. #--------------------------------------------------------------------------
  340. # ● 残像  バトラーの移動に残像を残します
  341. #--------------------------------------------------------------------------
  342.   # 数…残像数。0は表示中の残像を消します。あまり多いと負荷が高くなります
  343.   # 間隔…残像の表示間隔。小さいほど狭い。単位は1フレーム
  344.   # 処理…残像の後処理。trueはフルアクション終了時に消え、falseは消えずにずっと表示
  345.   # 透明度…残像の透明度
  346.  
  347.   #――アクション名――      判別    数  間隔  処理  透明度
  348.   "残像ON"        => ["mirage",  4,   3,  true,  160],
  349.   "残像OFF"       => ["mirage",  0,   0,  true,    0],
  350.  
  351. #--------------------------------------------------------------------------
  352. # ● バトラー回転 画像を回転
  353. #--------------------------------------------------------------------------
  354.   # 回転しているバトラーのフルアクションが終了すると、回転角度はリセットされます
  355.   # 回転中の画像転送元原点は中心になります。反転と違い、武器アクションは反映されません
  356.   #
  357.   # 時間…回転にかける時間。0で即座に反映されます
  358.   # 始度…回転開始時の角度。0~360度を指定。正が反時計周り、負が時計周り
  359.   # 終度…回転終了時の角度。0~360度を指定。上記ともにエネミーは逆計算になります
  360.   # タイプ…回転終了後の処理。[0…回転リセット] [1…終了角度のまま] [2…ループ]
  361.  
  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.   #――アクション名――     判別   時間    開始サイズ     終了サイズ  タイプ
  378.   "横縮み"         => ["zoom",  12,  [1.0, 1.0],  [0.5, 1.0],  0],
  379.   "縦縮み"         => ["zoom",  12,  [1.0, 1.0],  [1.0, 0.5],  0],
  380.  
  381. #--------------------------------------------------------------------------
  382. # ● バトラー透明度操作 画像の透明度を変更
  383. #--------------------------------------------------------------------------
  384.   # バトラーのフルアクションが終了すると、透明度操作はリセットされます
  385.   #
  386.   # 時間…透明度変更にかける時間。
  387.   # 開始…変更開始時の透明度。0が完全に消えた状態、255が完全に不透明な状態
  388.   # 終了…変更終了時の透明度
  389.   # 影…影も同じ透明度操作をするならtrue
  390.   # 武器…武器も同じ透明度操作をするならtrue
  391.   # ループ…透明度変更が終了した後、操作を自動で逆転させ続けるならtrue
  392.   # ウエイト…操作終了まで次のアクションに移行せず待つならtrue
  393.  
  394.   #――アクション名――         判別    時間  開始  終了    影   武器   ループ  ウエイト
  395.   "逃走透明"         => ["opacity",   30,  255,   0,  true,  true, false, false],
  396.   "透明化"           => ["opacity",   60,  255,   0,  true,  true, false, false],
  397.   "透明化WT"         => ["opacity",   60,  255,   0,  true,  true, false,  true],
  398.   "透明化解除"       => ["opacity",   60,    0, 255,  true,  true, false, false],
  399.   "透明化解除WT"     => ["opacity",   60,    0, 255,  true,  true, false,  true],
  400.  
  401. #--------------------------------------------------------------------------
  402. # ● ふきだしアニメ イベントに使うふきだしアイコンを表示
  403. #--------------------------------------------------------------------------
  404.   # 種類…ふきだしの種類(縦位置)を0~9で指定
  405.   # 速度…更新速度。セルは2コマ目から再生されます
  406.   # サイズ…ふきだしのサイズ
  407.  
  408.   # ふきだし名         判別      種類 速度  サイズ
  409.   "状態異常/汎用"   => ["balloon",   6,  10,  0.6],
  410.   "状態異常/ピンチ" => ["balloon",   5,  10,  0.6],
  411.   "状態異常/睡眠"   => ["balloon",   9,  10,  0.6],
  412.  
  413. #--------------------------------------------------------------------------
  414. # ● ピクチャの表示  カットインなどに
  415. #--------------------------------------------------------------------------
  416.   # 番号…使用するピクチャの番号。ピクチャを管理するための番号です。何枚でも表示できます
  417.   #       フルアクションが終了すると自動で消去(Bitmap解放)されます
  418.   # 開始座標…移動開始位置。ピクチャの左上を原点とします。[X軸, Y軸]
  419.   #           既にピクチャがある場合、[]にすると開始座標はその場所になります
  420.   # 終了座標…移動終了位置。開始位置と同じ値にすると移動せず表示のみになります
  421.   #           プレーン使用の場合、開始と終了を[]にすると移動速度を維持します
  422.   # 時間…移動時間。0でピクチャを消去します
  423.   # Z軸…ピクチャのZ座標。100以上にするとウインドウより手前に表示されます
  424.   # 透明度…透明度設定。[開始時の透明度, 1フレームごとに加算される透明度]
  425.   # プレーン使用…プレーンクラス(画像がタイル状に並ぶ画像)を使用する場合の矩形。[X軸,Y軸]
  426.   #            プレーンを使用しない場合は[]
  427.   # BA反転…バックアタック時に画像反転とX座標移動を逆にするならtrue
  428.   #         プレーン使用時の画像はtrueでも反転せず、X座標移動のみ逆になります
  429.   # ピクチャファイル名…ピクチャフォルダ内のファイル名。
  430.  
  431.   #―――アクション名―――    判別  番号  開始座標     終了座標   時間 Z軸   透明度    プレーン使用  BA反転 ピクチャファイル名
  432.   "カットインA1"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-1"],
  433.   "カットインA2"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-2"],
  434.   "カットインA3"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-2"],
  435.   "カットインA4"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-3"],
  436.   "カットイン終"    => ["pic",  0,          [], [ 600,   8],  30, 90, [255,  0],        [],  true, ""],
  437.   "カットイン背景始"=> ["pic",  1, [   0,   8], [ 100,   8],  10, 80, [  0, 10], [544,288],  true, "cutin_back"],
  438.   "カットイン背景終"=> ["pic",  1,          [],          [],  10, 80, [255, -7], [544,288],  true, ""],
  439.   "白フェードイン"  => ["pic",  0, [   0,   0], [   0,   0],  50,500, [  0,  6],        [], false, "white"],
  440.   "白フェードアウト"=> ["pic",  0, [   0,   0], [   0,   0],  50,500, [255, -6],        [], false, "white"],
  441.  
  442. #--------------------------------------------------------------------------
  443. # ● ステート操作
  444. #--------------------------------------------------------------------------
  445.   # 対象…[0=自分] [1=ターゲット] [2=敵全] [3=味方全] [4=敵味方全] [5=セカンドターゲット]
  446.   # 拡張…上で設定した対象をさらに拡張します [0=拡張なし] [1=ランダム1体] [2=自分を除く]
  447.   # 操作…ステートを付与するなら"+" 解除するなら"-"
  448.   # ステートID…操作するステートのIDをまとめて配列に入れます
  449.  
  450.   # ステート付与名           判別  対象 拡張 操作 ステートID
  451.   "戦闘不能付与"         => ["sta",  0,   0, "+",  [1]],
  452.  
  453. #--------------------------------------------------------------------------
  454. # ● FPS(ゲーム全体のスピード)変更  アクションの細部チェック用
  455. #--------------------------------------------------------------------------
  456.   # ゲームスピード…60がデフォルトで、低くなるほどスローになります。 
  457.  
  458.   #――アクション名――   判別  ゲームスピード
  459.   "スロー再生"   => ["fps",  15],
  460.   "通常再生"     => ["fps",  60],
  461.  
  462. #--------------------------------------------------------------------------
  463. # ● バトラー画像変更  バトラー画像の参照先ファイルを変更します
  464. #--------------------------------------------------------------------------
  465.   # 維持…アクターの場合、戦闘後も変更を維持するならtrue
  466.   # インデックス…アクターの場合、歩行グラのどの矩形かを設定します
  467.   #          [0][1][2][3]
  468.   #          [4][5][6][7]
  469.   #
  470.   # ファイル名…変更する画像ファイル名。アクターはCharactersフォルダ、
  471.   #         エネミーはBattlersフォルダを参照します
  472.   # 顔グラ…アクターの場合、戦闘後の顔グラも変更するなら[顔グラインデックス, ファイル名]
  473.   #        変更しないなら[]
  474.  
  475.   #―――アクション名―――      判別     維持  インデックス  ファイル名        顔グラ
  476.   "オオカミに変身"    => ["change", false,    6,    "Animal", [0, "Actor4"]],
  477.  
  478. #--------------------------------------------------------------------------
  479. # ● スキル派生  アクションを中断し、別のスキルに派生させます
  480. #--------------------------------------------------------------------------
  481.   # 習得…派生するスキルが未修得でも実行可能ならtrue
  482.   # コスト条件…派生するスキルのコストが足りなくても実行可能ならtrue
  483.   # スキルID…派生するスキルID
  484.  
  485.   #―――アクション名―――    判別   習得  コスト条件  スキルID
  486.   "多段攻撃に派生"   => ["der",  true,  false,   1],
  487.  
  488. #--------------------------------------------------------------------------
  489. # ● サウンドの演奏  BGM・BGS・SEを鳴らします
  490. #--------------------------------------------------------------------------
  491.   # 種別…効果音は"se"  BGMは"bgm"  BGSは"bgs"
  492.   # ピッチ…ピッチ。50~150まで指定できます。100がデフォルトです
  493.   # 音量…ボリューム。50~150まで指定できます。100がデフォルトです
  494.   # ファイル名…再生するファイル名。""にするとBGM、BGSを変えずに各種設定可能。
  495.  
  496.   #――アクション名――     判別    種別  ピッチ  音量  ファイル名
  497.   "Bow1"          => ["sound",  "se", 100,  80, "Bow1"],
  498.  
  499. #--------------------------------------------------------------------------
  500. # ● ムービーの再生  ogvファイルのムービーを再生します
  501. #--------------------------------------------------------------------------
  502.   # ファイル名…再生するムービーファイル名。Moviesフォルダを参照します
  503.  
  504.   #――アクション名――          判別     ファイル名
  505.   "死亡フラグムービー" => ["movie", "sample1"],
  506.  
  507. #--------------------------------------------------------------------------
  508. # ● ゲームスイッチ(サイドビュー専用スイッチ)の操作
  509. #--------------------------------------------------------------------------
  510.   # IDがプラスでゲームスイッチ、マイナスでサイドビュー専用スイッチの操作になります
  511.   #
  512.   # ON番号…ONにするスイッチIDをまとめて配列に入れます
  513.   # OFF番号…OFFにするスイッチIDをまとめて配列に入れます
  514.   #
  515.   #――アクション名――       判別     ON番号   OFF番号   
  516.   "スイッチNo1/ON"  => ["switch",  [ 1],   []],
  517.   "背景を宇宙に変更"=> ["switch",  [-4],   []],
  518.   "背景宇宙を解除"  => ["switch",    [],   [-4]],
  519.   "魔方陣ON"        => ["switch",  [-5],   []],
  520.   "魔方陣OFF"       => ["switch",    [],   [-5]],
  521.  
  522. #--------------------------------------------------------------------------
  523. # ● ゲーム変数の操作
  524. #--------------------------------------------------------------------------
  525.   # 変数No…何番の変数を操作するか
  526.   # 操作…[0=代入] [1=加算] [2=減算] [3=乗算] [4=除算] [5=剰余]
  527.   # オペランド…演算の対象となる数値を指定します。マイナスにすると、その数字の
  528.   #          絶対値の変数Noに格納されている数値が演算の対象となります
  529.   #
  530.   # ――アクション名――     判別     変数No  操作  オペランド
  531.   "変数No1/+1"     => ["variable",   1,     1,     1],
  532.  
  533. #--------------------------------------------------------------------------
  534. # ● 条件分岐 (ゲームスイッチ) 条件を設定し、アクションを分岐させます
  535. #--------------------------------------------------------------------------
  536.   # スイッチNo…何番のスイッチを参照するか。マイナスでサイドビュー専用スイッチを操作します
  537.   # 条件…ONならtrue、OFFならfalse
  538.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  539.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  540.   #
  541.   #―――アクション名―――       判別  スイッチNo  条件  分岐
  542.   "スイッチNo1=ONで実行" => ["n_1",   1,   true,   0],
  543.  
  544. #--------------------------------------------------------------------------
  545. # ● 条件分岐 (ゲーム変数)
  546. #--------------------------------------------------------------------------
  547.   # 変数No…何番の変数を参照するか
  548.   # 数値…条件となる数字を入れます。マイナスでその絶対値の変数に格納された数値を参照します
  549.   # 条件…参照した変数が条件の数字と比べて…[0=同値] [1=少ない] [2=多い]
  550.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  551.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  552.   #
  553.   #―――アクション名―――       判別  変数No 数値  条件  分岐
  554.   "変数No1=1で実行"      => ["n_2",   1,    1,    0,    0],
  555.  
  556. #--------------------------------------------------------------------------
  557. # ● 条件分岐 (ステート)
  558. #--------------------------------------------------------------------------
  559.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  560.   # ステートID…何番のステートを条件にするか
  561.   # 条件…[0=付加している] [1=付加していない]
  562.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  563.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  564.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  565.   #
  566.   #―――アクション名―――       判別  対象  ステートID 条件  人数  分岐
  567.   "死亡確認"             => ["n_3",   1,    1,    0,     1,   1],
  568.  
  569. #--------------------------------------------------------------------------
  570. # ● 条件分岐 (スキル)
  571. #--------------------------------------------------------------------------
  572.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  573.   # スキルID…何番のスキルを条件にするか
  574.   # 条件…[0=使える] [1=使えない]
  575.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  576.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  577.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  578.   #
  579.   #―――アクション名―――       判別  対象 スキルID  条件  人数  分岐
  580.   "強撃使用可限定"       => ["n_4",  0,   80,    0,    1,   0],
  581.  
  582. #--------------------------------------------------------------------------
  583. # ● 条件分岐 (パラメータ)
  584. #--------------------------------------------------------------------------
  585.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  586.   # 種別…どのパラメータを条件にするか
  587.   #       [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP] [7=攻撃力]
  588.   #       [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=運]
  589.   #
  590.   # 数値…条件となる数字を入れます。マイナスで最大値からの割合%に(HP・MP・TP限定)
  591.   # 条件…参照したパラメータが条件の数字と比べて…[0=同じ] [1=少ない] [2=多い]
  592.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  593.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  594.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  595.   #
  596.   #―――アクション名―――       判別  対象  種別  数値  条件  人数  分岐
  597.   "HP50%以上で実行"      => ["n_5",  0,    4,  -50,    2,    1,   0],
  598.  
  599. #--------------------------------------------------------------------------
  600. # ● 条件分岐 (装備)
  601. #--------------------------------------------------------------------------
  602.   # 対象…条件を参照する対象 [0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  603.   # 種類…条件となる装備の種類 [0=武器] [1=防具]
  604.   # 装備ID…上の種類のアイテムID。IDは一括して配列[]に入れます。
  605.   #         マイナスで武器(防具)タイプを参照します
  606.   # 条件…[0=装備している] [1=装備していない]
  607.   # 人数…上の条件となる必要人数。条件対象がグループの場合、0でグループ全員の数になります
  608.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  609.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  610.   #
  611.   #―――アクション名―――       判別  対象  種類     ID   条件  人数  分岐
  612.   "ハンドアクス限定"     => ["n_6",  0,    0,    [1],    0,    1,   0],
  613.   "拳限定"               => ["n_6",  0,    0,   [-2],    0,    1,   0],
  614.   "拳除外"               => ["n_6",  0,    0,   [-2],    0,    1,   1],
  615.   "弓限定"               => ["n_6",  0,    0,   [-6],    0,    1,   0],
  616.   "弓除外"               => ["n_6",  0,    0,   [-6],    0,    1,   1],
  617.   "拳弓除外"             => ["n_6",  0,    0,[-2,-6],    0,    1,   1],
  618.  
  619. #--------------------------------------------------------------------------
  620. # ● 条件分岐 (スクリプト) 
  621. #--------------------------------------------------------------------------
  622.   # 分岐…条件を満たした場合の分岐処理。満たさない場合はその逆の処理がされます
  623.   #       [0=次のアクションを実行] [1=次のアクションをキャンセル] [2=フルアクション終了]
  624.   # スクリプト…trueかfalseを返すスクリプトを入れます
  625.   #
  626.   #―――アクション名―――       判別   分岐  スクリプト
  627.   "50%の確率で実行"      => ["n_7",   0,  "rand(100) < 50"],
  628.   "アクター限定"         => ["n_7",   0,  "@battler.actor?"],
  629.   "アクターID1限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 1"],
  630.   "アクターID2限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 2"],
  631.   "アクターID6限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 6"],
  632.   "アクターID7限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 7"],
  633.   "エネミー限定"         => ["n_7",   0,  "[email protected]?"],
  634.   "エネミー中止"         => ["n_7",   2,  "[email protected]?"],
  635.   "二刀流限定"           => ["n_7",   0,  "@battler.dual_wield?"],
  636.  
  637. #--------------------------------------------------------------------------
  638. # ● セカンドターゲット操作
  639. #--------------------------------------------------------------------------
  640.   # セカンドターゲットとは、通常のターゲットとは別の独立したターゲット情報です
  641.   # 何も操作しない場合、通常ターゲットと同じ対象がセットされています
  642.   #
  643.   # 対象…[0=自分] [1=ターゲット] [2=敵全体] [3=味方全体] [4=敵味方全体] [5=セカンドターゲット]
  644.   #
  645.   # INDEX…対象をパーティのインデックス(並び順)で絞込みます INDEX = [インデックス, 判別]
  646.   #        インデックス…パーティのインデックス数値
  647.   #        判別…数値の条件 [0=絞込まない] [1=そのインデックスが対象に] [2=そのインデックスを排除]
  648.   #
  649.   # ID…対象をアクター(エネミー)IDで絞込むならIDの数字を入れる。0で絞込まない
  650.   #     マイナスにするとその絶対値のIDが排除条件になります
  651.   #
  652.   # ステート…対象を現在付加しているステートIDで絞込むならステートIDの数字を入れる。0で絞込まない
  653.   #       マイナスにすると付加していないことが条件になります
  654.   #
  655.   # スキル…対象を使用可能なスキルIDで絞込むならスキルIDの数字を入れる。0で絞込まない
  656.   #      マイナスにすると使用不可能が条件になります
  657.   #
  658.   # パラメータ…対象のパラメータを条件に絞込みます パラメータ = [種別, 数値, 判別]
  659.   #         種別…[0=絞込まない] [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP]
  660.   #               [7=攻撃力] [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=運]
  661.   #         数値…種別で決定した数値を入れる。マイナスで最大値からの割合%に(HP・MP・TP限定)
  662.   #         判別…数値の条件 [0=同じ] [1=少ない] [2=多い]
  663.   #
  664.   # 装備…対象の装備物を条件に絞込みます。アクター限定 装備 = [種類, ID]
  665.   #       種類…[0=武器] [1=防具]
  666.   #       ID…装備種別の条件となるアイテムIDを配列[]に入れます。0で絞込まない
  667.   #           マイナスで武器(防具)タイプを参照します
  668.   #
  669.   # 拡張…上で設定した対象をさらに拡張します [0=拡張なし] [1=ランダム1体]  [2=自分を除く]
  670.   # 操作…[0=操作しない] [1=通常ターゲットをセカンドターゲットに変更]  [2=セカンドターゲット・通常ターゲットを初期化]
  671.  
  672.   #――アクション名――      判別 対象  INDEX  ID  ステート スキル   パラメータ      装備   拡張 操作
  673.   "自分以外味方全員"=> ["s_t", 3, [ 0, 0], 0,  0,   0, [ 0, 0, 0], [ 0,[0]],  2,   0],
  674.   "全域化"          => ["s_t", 4, [ 0, 0], 0, -1,   0, [ 0, 0, 0], [ 0,[0]],  0,   1],
  675.  
  676. #--------------------------------------------------------------------------
  677. # ● コモンイベントの呼び出し  
  678. #--------------------------------------------------------------------------
  679.   # ID…コモンイベントID
  680.   # ウエイト…イベント実行中はアクションをストップさせるならtrue
  681.   #
  682.   #―――アクション名―――    判別    ID   ウエイト
  683.   "コモンNo1"       => ["common",  1,  true],
  684.  
  685. #--------------------------------------------------------------------------
  686. # ● スクリプトの操作  
  687. #--------------------------------------------------------------------------
  688.   # スクリプトを実行。サンプルのp = 1 の部分にevalで実行するスクリプトを入れます
  689.   #
  690.   #―――アクション名―――  
  691.   "テストスクリプト" => ["p = 1 "],
  692.  
  693. #--------------------------------------------------------------------------
  694. # ● その他 設定項目なしでフルアクションに入れます
  695. #--------------------------------------------------------------------------
  696.   # 戦闘アニメ消去…表示中の戦闘アニメを消去します(飛ばしアニメは消去されません)
  697.   # 強制戦闘終了…戦闘を強制終了させます
  698.   # 画面固定…ゲーム画面を固定させます。トランジション前に入れます
  699.   # ダメージアニメ…スキルアニメを再生し、それが終わる直前にダメージをPOPさせます
  700.   # 反転…画像と武器アニメを反転します。再度反転させるかフルアクション終了で反転解除
  701.   # 武器消去…表示中の武器画像を消去します
  702.   # 武器消去解除…消去した武器画像を表示します
  703.   # 敵コラプス…崩御エフェクトを実行します。主に敵の戦闘不能に使用します
  704.   # コラプス禁止…対象のHPが0になった場合のコラプスを禁止します。連続攻撃開始時などに
  705.   # コラプス禁止解除…コラプス禁止を解除します。連続攻撃の終わりなどに。入れなくても行動終了時にコラプス許可になります
  706.   # 待機キャンセル…待機アクションを行わないようになります。戦闘イベントでの演出などに
  707.   # 待機キャンセル解除…待機キャンセルを解除し、待機アクションを行います
  708.   # 初期位置変更…元の座標(初期位置)を現在の座標に変更します
  709.   # 初期位置変更解除…初期位置変更で変更した座標を元に戻します
  710.   # 強制…この次にある行動をターゲットに強制させます(リアクション)
  711.   # 強制2…この次にある行動をセカンドターゲットに強制させます(リアクション)
  712.   # 次の行動者へ…戦闘行動が終了したとみなし、直後に次のキャラが行動開始します
  713.   # 個別開始…複数ターゲット攻撃を個別で処理する場合の、リピート行動開始の目印です
  714.   # 個別終了…複数ターゲット攻撃を個別で処理する場合の、リピート行動終了の目印です
  715.   # ループ開始…"ループ開始"と"ループ終了"の間のアクションを永遠に繰り返します
  716.   # ループ終了…"ループ開始"と"ループ終了"の間のアクションを永遠に繰り返します
  717.  
  718.   #―――アクション名―――       判別
  719.   "戦闘アニメ消去"    => ["anime_off"],
  720.   "強制戦闘終了"      => ["battle_end"],
  721.   "画面固定"          => ["graphics_freeze"],
  722.   "ダメージアニメ"    => ["damage_anime"],
  723.   "反転"              => ["mirror"],
  724.   "武器消去"          => ["weapon_off"],
  725.   "武器消去解除"      => ["weapon_on"],
  726.   "敵コラプス"        => ["normal_collapse"],
  727.   "コラプス禁止"      => ["no_collapse"],
  728.   "コラプス禁止解除"  => ["collapse"],
  729.   "待機キャンセル"    => ["non_motion"],
  730.   "待機キャンセル解除"=> ["non_motion_cancel"],
  731.   "初期位置変更"      => ["change_base_position"],
  732.   "初期位置変更解除"  => ["set_base_position"],
  733.   "強制"              => ["force_action"],
  734.   "強制2"             => ["force_action2"],
  735.   "次の行動者へ"      => ["next_battler"],
  736.   "個別開始"          => ["individual_start"],
  737.   "個別終了"          => ["individual_end"],
  738.   "ループ開始"        => ["loop_start"],
  739.   "ループ終了"        => ["loop_end"],
  740.  
  741. #--------------------------------------------------------------------------
  742. # ● ウエイト 次のアクションに行かずに待つ時間
  743. #--------------------------------------------------------------------------
  744.   # アクションで数値のみの場合、それがそのままウエイト時間となります。
  745.   # (例) "20" …次のアクションに行かずに20フレーム待つ
  746.   #
  747.   # 数値をマイナスにするとランダムウエイトとなり、その数値の0~絶対値の間で
  748.   # ランダムにウエイト時間が決定されます。
  749.   # (例) "-20" …ランダムで0~20フレーム待つ
  750.  
  751. #--------------------------------------------------------------------------
  752. # ● ショートカットコマンド
  753. #--------------------------------------------------------------------------
  754.   # 通常は設定したアクション名をフルアクション配列に入れて行動を作りますが
  755.   # アクション設定せず直接コマンドを記述して、作業を短縮できるものがあります
  756.   # 頻繁に利用するものはこのショートカットを使うと登録アクションが増えないのでお勧めです
  757.   #
  758.   # [戦闘アニメ]
  759.   # (例) "anime(20)" …データベース20番のアニメをターゲットに実行(ウエイトあり)
  760.   # (例) "anime(20,false)" …データベース20番のアニメをターゲットに実行(ウエイトなし)
  761.   # (例) "anime_me(20)" …データベース20番のアニメを自分に実行(ウエイトあり)
  762.   # (例) "anime_me(20,false)" …データベース20番のアニメを自分に実行(ウエイトなし)
  763.   #
  764.   # [ウエイト インデックスディレイ] ※パーティインデックスでウエイトにディレイを掛けます
  765.   # (例) "delay(12)"…インデックス1番のウエイトが0フレーム 2番のウエイトが12フレーム  3番のウエイトが24フレーム…
  766.   #
  767.   # [効果音(SE)]
  768.   # (例) "se('Bow1')" …ファイル名がBow1のSEを鳴らします
  769.   # (例) "se('Bow1',50)" …ファイル名がBow1のSEをピッチ50で鳴らします
  770.   #
  771.   # [ターゲットへアクション(フルアクション)を強制]
  772.   # (例) "target('ダメージのけぞり')" …ターゲットに"ダメージのけぞり"のアクションを強制します
  773.   # (例) "target2('被ダメージ')" …セカンドターゲットに"被ダメージ"のフルアクションを強制します
  774.  
  775.   }  
  776. #==============================================================================
  777. # ■ フルアクション
  778. #------------------------------------------------------------------------------
  779. #  アクションを組み合わせたもので、行動は左側から順番に行われます。
  780. #   フルアクションの中にフルアクションを入れることも可能で、アクションのパーツ化や
  781. #   条件分岐の次にフルアクションを置く等の使い方が便利です
  782. #==============================================================================
  783.   FULLACTION = {
  784.  
  785.   # ―――待機系―――
  786.   "通常待機"        => ["待機"],
  787.   "通常待機固定"    => ["待機固定WT"],
  788.   "ピンチ待機"      => ["状態異常/ピンチ","ピンチ色調","待機","待機"],
  789.   "防御待機"        => ["待機固定WT"],
  790.   "毒待機"          => ["状態異常/汎用","毒色調","待機","待機","エネミー限定","80"],
  791.   "睡眠待機"        => ["状態異常/睡眠","エネミー限定","40","エネミー中止","倒れ","倒れ"],
  792.   "汎用状態異常待機"=> ["状態異常/汎用","汎用状態異常色調","待機","待機","エネミー限定","80"],
  793.   "様子見"          => ["待機","60"],
  794.   "戦闘不能"        => ["退場"],
  795.  
  796.  
  797.  
  798.  
  799.   # ――システム系――
  800.   "戦闘開始味方"    => ["戦闘前の味方配置","delay(4)","座標リセット左向き"],
  801.   "味方退場"        => ["退場"],
  802.   "逃走"            => ["対象アニメ","カメラリセット","delay(4)","退場"],
  803.   "敵逃走"          => ["対象アニメ","逃走透明","退場"],
  804.   "逃走失敗"        => ["カメラリセット","delay(4)","逃走途中","一歩後移動","座標リセット左向き"],
  805.   "コマンド入力"    => ["戦闘アニメ消去","コマンド入力移動"],
  806.   "コマンド入力終了"=> ["座標リセット早"],
  807.   "コマンド後防御"  => ["待機固定WT"],
  808.   "コマンド後魔法"  => ["待機固定","魔法詠唱中"],
  809.   "コマンド後特技"  => ["待機固定","特技待機中"],
  810.   "防御"            => ["対象アニメ","待機固定WT"],
  811.   "回避"            => ["アクター限定","右1回転","一歩後ジャンプ","10","座標リセット左向き"],
  812.   "盾ガード"        => ["se('Evasion2')","盾防御","60"],
  813.   "身代わり開始"    => ["敵中移動早","初期位置変更"],
  814.   "身代わり終了"    => ["初期位置変更解除","座標リセット左向き"],
  815.   "被身代わり開始"  => ["一歩後移動","一歩後移動","待機固定WT"],
  816.   "被身代わり終了"  => ["座標リセット左向き"],
  817.   "勝利ポーズ振り"  => ["戦闘アニメ消去","勝利ジャンプ武器","勝利ジャンプ着地","120"],
  818.   "勝利ポーズバク転"=> ["戦闘アニメ消去","右1回転","勝利ジャンプ","拳限定","武器拳突き","拳除外","武器振りR","120"],
  819.   "閃き"            => ["anime_me(119)","20"],
  820.  
  821.   # ―リアクション系―
  822.   "被ダメージ"      => ["ダメージのけぞり","座標リセット左向き"],
  823.   "被ダメージ大"    => ["シェイク中","ダメージのけぞり大","座標リセット左向き"],
  824.   "透明"            => ["透明化","ループ開始","120","ループ終了"],
  825.   "縦揺れ"          => ["縦揺れ01","縦揺れ02","縦揺れ01","縦揺れ02","縦揺れ01","縦揺れ02"],
  826.  
  827.   # ―ショートカット系(他のフルアクションから呼び出されるパーツ)―
  828.   "斬り"            => ["武器振りR","対象アニメ武器","10"],
  829.   "拳"              => ["武器拳突き","対象アニメ武器","10"],
  830.   "弓"              => ["Bow1","弓撃ち","矢発射","9"],
  831.   "攻撃"            => ["拳限定","拳","弓限定","弓","拳弓除外","斬り"],
  832.   "通常攻撃始め"    => ["敵前移動","コラプス禁止","個別開始","二刀流限定","二刀左"],
  833.   "通常攻撃終わり"  => ["死亡確認","対象アニメ武器WT","個別終了","コラプス禁止解除","次の行動者へ","座標リセットカーブ"],
  834.   "二刀左"          => ["武器振りL","対象アニメ武器LWT"],
  835.   "特技発動"        => ["一歩前移動","武器掲げ","特技発動アニメ"],
  836.   "魔法発動"        => ["一歩前移動","武器掲げ","魔法発動アニメ"],
  837.   "カットイン"      => ["カットイン背景始","カットイン分岐","70","カットイン終","カットイン背景終","20"],
  838.   "カットイン分岐"  => ["アクターID1限定","カットインA1","アクターID2限定","カットインA2","アクターID6限定","カットインA3","アクターID7限定","カットインA4"],
  839.   "死亡フラグ動画"  => ["白フェードイン","50","死亡フラグムービー","白フェードアウト","50"],
  840.   "背景を宇宙に"    => ["ズームアウト","se('Blind',70)","背景のみ暗転","自分以外味方全員","強制2","透明","透明化","40","背景を宇宙に変更","色調初期化"],
  841.   "背景宇宙解除"    => ["カメラリセット","背景のみ暗転","target2('透明化解除WT')","透明化解除","40","背景宇宙を解除","色調初期化"],
  842.   "魔方陣表示"      => ["se('Blind',70)","画面固定","魔方陣ON","サークル"],
  843.   "魔方陣消去"      => ["40","画面固定","魔方陣OFF","サークル"],
  844.  
  845.   # ――通常攻撃系――
  846.   "通常攻撃"        => ["通常攻撃始め","待機固定","通常攻撃終わり"],
  847.   "斬り攻撃"        => ["通常攻撃始め","死亡確認","武器振りR","通常攻撃終わり"],
  848.   "拳攻撃"          => ["通常攻撃始め","武器拳突き","通常攻撃終わり"],
  849.   "突き攻撃"        => ["通常攻撃始め","武器突き","通常攻撃終わり"],
  850.   "弓攻撃"          => ["一歩前移動","コラプス禁止","個別開始","Bow1","弓撃ち",
  851.                         "矢発射WT","個別終了","コラプス禁止解除","座標リセット"],
  852.   "铳攻击"          => ["一歩前移動","武器掲げ","通常攻撃終わり"],
  853.   "现代武器攻击"          => ["一歩前移動","武器掲げ","通常攻撃終わり"],
  854.   "匕首攻撃"        => ["通常攻撃始め","待機固定","通常攻撃終わり"],
  855.   "锤攻撃"        => ["通常攻撃始め","待機固定","通常攻撃終わり"],
  856.   "杖攻撃"        => ["通常攻撃始め","待機固定","通常攻撃終わり"],
  857.  
  858.  
  859.  
  860.  
  861.   # ――スキル系―――
  862.   "汎用スキル"      => ["特技発動","武器振りR","ダメージアニメ","座標リセット"],
  863.   "汎用魔法"        => ["魔法発動","武器振りR","ダメージアニメ","座標リセット"],
  864.  
  865.   "水鉄砲"          => ["特技発動","武器振りR","水鉄砲発射","座標リセット"],
  866.   "武器投げ"        => ["特技発動","Bow1","武器振りR","6","待機固定","武器投げ開始","武器投げ戻し","座標リセット"],
  867.   "カットイン攻撃"  => ["特技発動","カットイン","攻撃","座標リセット"],
  868.   "ムービー攻撃"    => ["特技発動","待機固定","死亡フラグ動画","通常攻撃始め","武器振りR","通常攻撃終わり"],
  869.   "オオカミ変身"    => ["特技発動","anime(110,false)","オオカミに変身","待機固定","120","座標リセット"],
  870.   "5回攻撃"         => ["特技発動","コラプス禁止","弓除外","敵前移動","攻撃","攻撃","攻撃","攻撃","攻撃","コラプス禁止解除","座標リセット"],
  871.   "スキル派生"      => ["武器投げ","多段攻撃に派生","斬り攻撃"],
  872.   "背景変更攻撃"    => ["魔法発動","武器振りR","背景を宇宙に","ダメージアニメ","背景宇宙解除","座標リセット"],
  873.   "ピクチャ攻撃"    => ["魔法発動","魔方陣表示","武器振りR","anime(80,false)","60","シェイク大","対象アニメ","魔方陣消去","座標リセット"],
  874.   "暗転攻撃"        => ["特技発動","自分とターゲット以外暗転","se('Laser',150)",
  875.                         "残像ON","敵前移動","anime(35,false)","敵後移動","対象アニメ",
  876.                         "武器振りR","20","色調初期化","座標リセット","残像OFF"],
  877.   "空中攻撃"        => ["特技発動","Bow1","一歩前ジャンプ","叩き付け前ジャンプ",
  878.                         "待機固定","左1回転","10","anime(117,false)","叩き付け",
  879.                         "対象アニメ","シェイク中","強制","縦揺れ","20",
  880.                         "一歩後ジャンプ","座標リセット"],
  881.  
  882.   # ――アイテム系―――
  883.   "アイテム使用"     => ["敵前移動","待機固定","対象アニメWT","座標リセット左向き"],
  884.  
  885.  
  886.  
  887.   }
  888.  
  889.  
  890.  
  891. #==============================================================================
  892. # ■ バトルプログラム
  893. #------------------------------------------------------------------------------
  894. #  バトルシーンの演出を時間管理します
  895. #  制御はゲームスイッチ・サイドビュー専用スイッチで行います
  896. #==============================================================================
  897.   BATTLE_PROGRAM = {
  898.  
  899. #--------------------------------------------------------------------------
  900. # ● スイッチの制御  スイッチの時間操作で、演出をプログラムします
  901. #--------------------------------------------------------------------------
  902.   # スイッチ…プログラム実行合図となるゲームスイッチ番号。マイナスでサイドビュー専用スイッチ番号になります
  903.   #       OFFにすると、実行中のプログラムは中止されます
  904.   #       サイドビュー専用スイッチは戦闘終了時に初期化(全てOFFに)されます
  905.   #       イベントで戦闘前にサイドビュー専用スイッチを操作する場合、イベントスクリプトで
  906.   #       $sv_camera.switches[1] = true と入れてください
  907.   #       (1は操作するスイッチ番号、ONにするならtrue OFFにするならfalse)
  908.   #
  909.   # ON番号…ONにするするゲームスイッチ番号。マイナスでサイドビュー専用スイッチ番号になります
  910.   #         番号は一括して配列に入れます。
  911.   #         例…[1,2,-5] ゲームスイッチ1番2番とサイドビュー専用スイッチ5番がON
  912.   #
  913.   # OFF番号…OFFにするするゲームスイッチ番号。マイナスでサイドビュー専用スイッチ番号になります
  914.   #          操作しない場合は[]と入れます
  915.   #
  916.   # 時間…上のスイッチ操作を実行するまでの時間(単位は1フレーム)
  917.   #       例えば100とした場合、プログラム開始から100フレーム後にスイッチ操作が実行されます
  918.   #       [参考値] 30秒…1800 1分…3600 5分…18000 10分…36000 1時間…216000
  919.   #
  920.   # ランダム幅…時間に加算されるランダム幅。単位は1フレーム
  921.   #          例えば時間300、ランダム幅300だと最終的に300~600フレームの時間になります
  922.  
  923.   #――プログラム名――       判別   スイッチ   ON番号  OFF番号   時間  ランダム幅
  924.   "背景を砦に"       => ["switch",  -1,   [-2],      [],  1200,     0],
  925.   "背景を海に"       => ["switch",  -2,   [-3],      [],  2400,     0],
  926.  
  927. #--------------------------------------------------------------------------
  928. # ● SE/BGM/BGSの演奏  
  929. #--------------------------------------------------------------------------
  930.   # スイッチ…実行合図となるゲームスイッチ番号。マイナスはサイドビュー専用スイッチ。
  931.   #
  932.   # 種別…SEの操作なら"se"  BGMの操作なら"bgm"  BGSの操作なら"bgs"
  933.   #
  934.   # ピッチ…ピッチ。50~150まで指定できます。100がデフォルトです
  935.   # 音量…ボリューム。50~150まで指定できます。100がデフォルトです
  936.   # ファイル名…再生するファイル名。""にするとBGM、BGSを変えずに各種設定可能。
  937.  
  938.   #――プログラム名――      判別   スイッチ  種別  ピッチ  音量  ファイル名
  939.   "潮騒"            => ["sound",  -1, "bgs",  100,  80, "Sea"],
  940.  
  941. #--------------------------------------------------------------------------
  942. # ● 背景の制御  画像変更や自動スクロールを行います
  943. #--------------------------------------------------------------------------
  944.   # スイッチ…実行合図となるスイッチ番号
  945.   #
  946.   # No.…操作する背景のナンバー。1が床背景、2が壁背景(遠景)になります
  947.   #
  948.   # スクロール速度…背景の移動する速度。[X軸, Y軸]
  949.   #            単位は100フレームあたりに移動するピクセル数になります
  950.   #            高速で移動させる場合は、1000単位の数値が目安です
  951.   #
  952.   # BA反転…バックアタック時に背景のX座標スクロールを逆にするならtrue 画像は反転しません
  953.   #
  954.   # 画像…背景画像を変更する場合、ファイル名を入れます。変更しない場合は""
  955.   #       床背景はBattlebacks1フォルダ、壁背景はBattlebacks2フォルダから参照します
  956.   #       変更する背景設定は、変更前のものを引き継ぎます
  957.   #
  958.   # 繋ぎ画像…背景スクロール時、背景変更を自然に見せるための繋ぎ画像ファイル名
  959.   #           スクロール途中で背景変更が行われた場合、スクロールが終わってから変更が行われます
  960.   #           性質上、斜めスクロールには対応していません
  961.   #
  962.   # 割込み…この背景が表示されている時に別の背景制御が割り込んできた場合、
  963.   #         割込みを許可するならtrue(繋ぎ画像表示中はスクロールなしの背景だけが割込みます)
  964.   #         割込みを許可しないならfalse(別の背景制御は保留され、この背景が消えた時に変更されます)
  965.  
  966.   #――プログラム名――      判別   スイッチ No.   スクロール速度   BA反転   画像       繋ぎ画像     割込み
  967.   "遠景右移動"      => ["scroll", -1,  1, [  40,    0],  true,  "",                 "",  true],
  968.   "海背景3に変更"   => ["scroll", -2,  1, [ 120,    0],  true,  "Sea_ex03", "Sea_ex02",  true],
  969.   "海背景4に変更"   => ["scroll", -3,  1, [  40,    0],  true,  "Sea_ex01", "Sea_ex04",  true],
  970.   "宇宙に変更1"     => ["scroll", -4,  1, [   0,    0],  true,  "DarkSpace",        "", false],
  971.   "宇宙に変更2"     => ["scroll", -4,  2, [   0,    0],  true,  "DarkSpace",        "", false],
  972.  
  973. #--------------------------------------------------------------------------
  974. # ● 周期ピクチャ 周期的にタイル状のピクチャを操作します。風や巨大魔方陣などに
  975. #--------------------------------------------------------------------------
  976.   # スイッチ…実行合図となるゲームスイッチ番号
  977.   # No.…操作するピクチャの番号。ピクチャは何枚も表示できます
  978.   # 移動速度…100フレームあたりに移動するピクチャの速度。[X軸, Y軸] 0で背景スクロールと同期化
  979.   # 期間…このプログラムを行う期間。単位は1フレーム。0にすると時間無制限でループ
  980.   #
  981.   # 透明操作…ピクチャの透明度操作。[開始透明度, 100フレームあたりに加算する透明度]
  982.   #           透明度が255になると開始透明度まで戻り、それを繰り返します
  983.   # Z軸…ピクチャのZ座標。100以上にするとウインドウより手前に表示されます
  984.   # シェイク許可…シェイクアクションの揺れと連動するならtrue
  985.   # BA反転…バックアタック時にピクチャのX座標移動を逆にするならtrue 画像は反転しません
  986.   # ファイル名…ピクチャのファイル名。Picturesフォルダを参照します
  987.  
  988.   #――プログラム名――  判別   スイッチ  No.    移動速度   期間    透明操作   Z軸  シェイク許可 BA反転 ファイル名
  989.   "風"            => ["kpic", -1,  0, [  500,    0],    0, [ 255,   0],  90,   false,  true, "back_wind"],
  990.   "魔方陣"        => ["kpic", -5,  1, [    0,    0],    0, [ 255,   0],  90,    true,  true, "magic_square01"],
  991.  
  992. #--------------------------------------------------------------------------
  993. # ● 周期SE 周期的に効果音を鳴らします。雷鳴や潮騒などに
  994. #--------------------------------------------------------------------------
  995.   # スイッチ…実行合図となるゲームスイッチ番号
  996.   # 周期…効果音を鳴らす周期。単位は1フレーム。この間隔で効果音が定期的に鳴ります
  997.   # ランダム幅…周期に加算されるランダム幅。単位は1フレーム
  998.   #
  999.   # ピッチ…ピッチ。50~150まで指定できます。100がデフォルトです
  1000.   # 音量…ボリューム。50~150まで指定できます。100がデフォルトです
  1001.   # 開始実行…プログラム実行直後に周期を待たず鳴らすならtrue
  1002.   # ファイル名…再生するファイル名。
  1003.  
  1004.   #――プログラム名――      判別   スイッチ 周期  ランダム幅  ピッチ 音量 開始実行 ファイル名
  1005.   "カモメ"         => ["keep_se", -1,  400,    100,  150,  60,  false,  "Crow"],
  1006.   "カモメ2"        => ["keep_se", -1,  300,    200,  140,  45,   true,  "Crow"],
  1007.  
  1008. #--------------------------------------------------------------------------
  1009. # ● 周期シェイク 周期的に画面を揺らします
  1010. #--------------------------------------------------------------------------
  1011.   # スイッチ…実行合図となるゲームスイッチ番号。これがONになることで開始されます
  1012.   # 周期…画面を揺らす周期。単位は1フレーム
  1013.   # ランダム幅…周期に加算されるランダム幅。単位は1フレーム
  1014.   #
  1015.   # 方向…揺れる方向 [横,縦] 数値が大きいほど揺れも大きくなります
  1016.   # 速度…揺れの速度。小さいほど早く揺れます
  1017.   # 時間…揺れの続く時間。揺れ幅は時間と共に少しずつ弱まっていきます
  1018.   # 開始実行…プログラム実行直後に周期を待たず揺らすならtrue
  1019.  
  1020.   #――プログラム名――     判別    スイッチ 周期 ランダム幅   方向   速度  時間 開始実行
  1021.   "船の揺れ"       => ["keep_sk", -1,  130,    0,  [  0, 4], 80,  120,  true],
  1022.  
  1023. #--------------------------------------------------------------------------
  1024. # ● 周期色調変更 周期的に画面の色調を変更します
  1025. #--------------------------------------------------------------------------
  1026.   # スイッチ…実行合図となるゲームスイッチ番号。これがONになることで開始されます
  1027.   # 周期…色調変更させる周期。単位は1フレーム
  1028.   # ランダム幅…周期に加算されるランダム幅。単位は1フレーム
  1029.   #
  1030.   # 対象…色調変更の対象 [0=背景] [1=敵全] [2=味方全] [3=敵味方全] [4=全て]
  1031.   # 色調レベル…[ R, G, B, アルファ(色の強さ), 変更時間, ※戻り]
  1032.   #             ※戻り…変更完了してから元の色に戻す時間。戻さないなら0
  1033.   # 開始実行…プログラム実行直後に周期を待たず色調変更するならtrue
  1034.  
  1035.   #――プログラム名――       判別   スイッチ 周期 ランダム幅  対象     R,   G,   B, アルファ  時間 戻り  開始実行
  1036.   "雷光"             => ["keep_c",  0,  300,  100,     4,  [ 255, 255, 255, 255,   8,   8],  true],
  1037.   "エマージェンシー" => ["keep_c",  0,  150,    0,     4,  [ 255,   0,   0, 100,  40,  40],  true],
  1038.  
  1039. }
  1040. #==============================================================================
  1041. # ■ カメラ設定
  1042. #------------------------------------------------------------------------------
  1043. #  アクションとは別にバトルシーンの各ポイントでカメラワークを行います
  1044. #  アクション名でカメラが動くため、名前は変えないようにしてください
  1045. #==============================================================================
  1046.   BATTLE_CAMERA = {
  1047. #--------------------------------------------------------------------------
  1048. # ● カメラワーク  画面のズームやスクロールを行います
  1049. #--------------------------------------------------------------------------
  1050.   # 対象…移動やズームの対象 [2=敵全] [3=味方全] [4=敵味方全] [6=画面]
  1051.   # 調整座標…カメラ座標の最終地点微調整 [X軸(プラスで画面→), Y軸(プラスで画面↓)]
  1052.   # 時間…カメラワークにかける時間
  1053.   # ズーム…カメラのズーム率(%)。100でズームなし。
  1054.  
  1055.   #――アクション名――       判別    対象  調整座標   ズーム  時間
  1056.   "ターン開始前"   => ["camera",   6, [  40,   0],  95, 40],
  1057.   "ターン開始後"   => ["camera",   6, [   0,   0], 100, 40],
  1058.   "戦闘終了時"     => ["camera",   6, [ 100,   0], 100, 50],
  1059.  
  1060.  
  1061. }  
  1062. end
  1063. #==============================================================================
  1064. # ■ SideViewバトラー設定
  1065. #------------------------------------------------------------------------------
  1066. #  アクション設定で作ったアクションをバトラーに貼り付けたり
  1067. #  バトラーに関する設定を行います
  1068. #==============================================================================
  1069. class SideView
  1070.   #--------------------------------------------------------------------------
  1071.   # ● バトラーアニメ画像の横・縦セル数 = [ 横, 縦] アニメさせない場合は[1, 1]
  1072.   #--------------------------------------------------------------------------
  1073.   def max_pattern
  1074.     # バトラーIDで分岐
  1075.     case id
  1076.     when  1 # 1番のアクター
  1077.       return [ 3, 4]
  1078.     when -1 # 1番のエネミー(エネミーはIDをマイナスにすることで指定します)
  1079.       return [ 1, 1]
  1080.     else # 上のID以外を一括で設定
  1081.       return [ 3, 4] if id > 0 # 全アクター(IDがプラス)
  1082.       return [ 1, 1] if id < 0 # 全エネミー(IDがマイナス)
  1083.     end
  1084.     # 以降の設定でID分岐させる場合はこの記述を参考にしてください
  1085.   end
  1086.   #--------------------------------------------------------------------------
  1087.   # ● 影画像ファイル名  画像はCharactersフォルダに入れてください falseで影なし
  1088.   #--------------------------------------------------------------------------
  1089.   def shadow
  1090.     return "shadow01" if id > 0 # 全アクター
  1091.     return false      if id < 0 # 全エネミー
  1092.   end
  1093.   #--------------------------------------------------------------------------
  1094.   # ● バトラー画像反転設定 初期状態でバトラー画像を反転させるならtrue
  1095.   #--------------------------------------------------------------------------
  1096.   def graphic_mirror_flag
  1097.     return false if id > 0 # 全アクター
  1098.     return true  if id < 0 # 全エネミー
  1099.   end
  1100.   #--------------------------------------------------------------------------
  1101.   # ● バトラー画像参照先固定 バトラーアニメ設定のインデックス参照を必ず""にするならtrue
  1102.   #--------------------------------------------------------------------------
  1103.   def graphic_fix
  1104.     return false if id > 0 # 全アクター
  1105.     return true  if id < 0 # 全エネミー
  1106.   end
  1107.   #--------------------------------------------------------------------------
  1108.   # ● 通常待機
  1109.   #--------------------------------------------------------------------------
  1110.   def normal
  1111.     return "通常待機"   if id > 0 # 全アクター
  1112.     return "待機固定WT" if id < 0 # 全エネミー
  1113.     # フルアクションではなくアクションだけを貼り付けることもできます
  1114.   end
  1115.   #--------------------------------------------------------------------------
  1116.   # ● ピンチ待機  HPが1/4以下の状態で行う待機アクション
  1117.   #--------------------------------------------------------------------------
  1118.   def pinch
  1119.     return "ピンチ待機" if id > 0 # 全アクター
  1120.   end
  1121.   #--------------------------------------------------------------------------
  1122.   # ● ステートアクション  複数重なった場合、表示優先度の高いステートが優先されます
  1123.   #--------------------------------------------------------------------------
  1124.   def state(state_id)
  1125.     # ステートIDで分岐
  1126.     case state_id
  1127.     when 1
  1128.       return "戦闘不能"     if id > 0 # 全アクター
  1129.       return "敵コラプス"   if id < 0 # 全エネミー
  1130.     when 2
  1131.       return "毒待機"
  1132.     when 6
  1133.       return "睡眠待機"
  1134.     when 3,4,5,7,8
  1135.       return "汎用状態異常待機"
  1136.     when 9
  1137.       return "防御待機"
  1138.     end
  1139.   end
  1140.   #--------------------------------------------------------------------------
  1141.   # ● コマンド入力後のアクション
  1142.   #--------------------------------------------------------------------------
  1143.   def command
  1144.     # 選択したスキルIDで分岐
  1145.     case skill_id
  1146.     when 2
  1147.       return "コマンド後防御"
  1148.     end
  1149.     # 選択したスキルタイプで指定
  1150.     case skill_type
  1151.     when 1 # 特技
  1152.       return "コマンド後特技"
  1153.     when 2 # 魔法
  1154.       return "コマンド後魔法"
  1155.     end
  1156.   end
  1157.   #--------------------------------------------------------------------------
  1158.   # ● 戦闘開始アクション
  1159.   #--------------------------------------------------------------------------
  1160.   def first_action
  1161.     return "戦闘開始味方" if id > 0 # 全アクター
  1162.     return "待機固定WT"   if id < 0 # 全エネミー
  1163.   end
  1164.   #--------------------------------------------------------------------------
  1165.   # ● 勝利アクション
  1166.   #--------------------------------------------------------------------------
  1167.   def win
  1168.     case id
  1169.     when  2,7,10 # 2・7・10番のアクター
  1170.       return "勝利ポーズバク転"
  1171.     else # 上記以外
  1172.       return "勝利ポーズ振り"
  1173.     end
  1174.   end
  1175.   #--------------------------------------------------------------------------
  1176.   # ● 戦闘退場アクション  パーティの入れ替えが行われた際の退場アクション
  1177.   #--------------------------------------------------------------------------
  1178.   def remove_action
  1179.     return "味方退場"
  1180.   end
  1181.   #--------------------------------------------------------------------------
  1182.   # ● 逃走アクション
  1183.   #--------------------------------------------------------------------------
  1184.   def escape
  1185.     return "逃走"   if id > 0 # 全アクター
  1186.     return "敵逃走" if id < 0 # 全エネミー
  1187.   end
  1188.   #--------------------------------------------------------------------------
  1189.   # ● 逃走失敗アクション
  1190.   #--------------------------------------------------------------------------
  1191.   def escape_ng
  1192.     return "逃走失敗"
  1193.   end
  1194.   #--------------------------------------------------------------------------
  1195.   # ● コマンド入力開始動作
  1196.   #--------------------------------------------------------------------------
  1197.   def command_b
  1198.     return "コマンド入力"
  1199.   end
  1200.   #--------------------------------------------------------------------------
  1201.   # ● コマンド入力終了動作
  1202.   #--------------------------------------------------------------------------
  1203.   def command_a
  1204.     return "コマンド入力終了"
  1205.   end
  1206.   #--------------------------------------------------------------------------
  1207.   # ● 被ダメージアクション 
  1208.   #--------------------------------------------------------------------------
  1209.   def damage(attacker)
  1210.     # 受けた攻撃がクリティカルの場合
  1211.     if critical?
  1212.       return "被ダメージ大"
  1213.     # 回復の場合
  1214.     elsif recovery?
  1215.       # アクションを取らせたくない時はreturnのみを記述します
  1216.       return
  1217.     end
  1218.     # 受けたスキルIDで分岐
  1219.     case damage_skill_id
  1220.     when 1 # スキル1番の場合
  1221.       return "被ダメージ"
  1222.     when 136 # 特定のスキルにダメージアクションを取らせたくない時はここでreturnのみを記述します
  1223.       return
  1224.     end
  1225.     # 受けたアイテムIDで指定(回復の場合は既にアクションが決定されています)
  1226.     case damage_item_id
  1227.     when 1 # アイテム1番の場合
  1228.       return
  1229.     else
  1230.       # 上のアイテムID以外
  1231.       if damage_item_id != 0
  1232.         return
  1233.       end  
  1234.     end
  1235.     # ダメージが0の場合 (強化・弱体化魔法や防御、エネミーの逃走など)
  1236.     if damage_zero?
  1237.       return
  1238.     end
  1239.     # 上の設定に当てはまらない場合
  1240.     return "被ダメージ"
  1241.   end
  1242.   #--------------------------------------------------------------------------
  1243.   # ● 回避動作  被ダメージアクションと同じ分岐が可能です
  1244.   #--------------------------------------------------------------------------
  1245.   def evasion(attacker)
  1246.     return "盾ガード" if shield? # 盾を装備している場合
  1247.     return "回避"
  1248.   end
  1249.   #--------------------------------------------------------------------------
  1250.   # ● 相手の攻撃ミス時の動作  被ダメージアクションと同じ分岐が可能です
  1251.   #--------------------------------------------------------------------------
  1252.   def miss(attacker)
  1253.     return "盾ガード" if shield? # 盾を装備している場合
  1254.     return "回避"
  1255.   end
  1256.   #--------------------------------------------------------------------------
  1257.   # ● 武器アクション  通常攻撃のアクションを装備武器で指定します
  1258.   #                    エネミーは下のエネミー武器設定で持たせることができます
  1259.   #--------------------------------------------------------------------------
  1260.   def weapon_action
  1261.     # 武器IDで指定
  1262.     case weapon_id
  1263.     when 0 # 武器0番の場合(素手)
  1264.       return "通常攻撃"
  1265.     when 1 # 武器1番の場合
  1266.       return "斬り攻撃"
  1267.     end
  1268.     # 武器タイプで指定
  1269.     case weapon_type
  1270.     when 1 # 武器タイプ1番の場合
  1271.       return "斬り攻撃"
  1272.     when 4,5,7,8,9 # 複数まとめて指定する場合
  1273.       return "斬り攻撃"
  1274.     when 2
  1275.       return "拳攻撃"
  1276.     when 3
  1277.       return "突き攻撃"
  1278.     when 6
  1279.       return "弓攻撃"
  1280.       when 7#武器类型
  1281.     return "匕首攻击"
  1282.     when 8#武器类型
  1283.     return "锤攻击"
  1284.     when 9#武器类型
  1285.     return "杖攻击"
  1286.       when 10#武器类型
  1287.     return "铳攻击"
  1288.     when 11#武器类型
  1289.     return "现代武器攻击"
  1290.  
  1291.  
  1292.     end
  1293.   end
  1294.   #--------------------------------------------------------------------------
  1295.   # ● エネミー右手武器 エネミーにも装備武器をID指定します
  1296.   #--------------------------------------------------------------------------
  1297.   def enemy_weapon1_id
  1298.     case id
  1299.     when -1 # 1番のエネミー(エネミーはIDをマイナスにすることで分岐させます)
  1300.       return 10 # 武器IDを指定。0番は素手扱いです
  1301.     else
  1302.       return 0
  1303.     end
  1304.   end
  1305.   #--------------------------------------------------------------------------
  1306.   # ● エネミー左手武器 エネミーにも二刀装備武器をID指定します
  1307.   #--------------------------------------------------------------------------
  1308.   def enemy_weapon2_id
  1309.     return 0
  1310.   end
  1311.   #--------------------------------------------------------------------------
  1312.   # ● エネミー盾 エネミーにも盾をID指定します 左手武器より優先されます
  1313.   #--------------------------------------------------------------------------
  1314.   def enemy_shield_id
  1315.     return 0
  1316.   end
  1317.   #--------------------------------------------------------------------------
  1318.   # ● 武器グラフィック指定 
  1319.   #--------------------------------------------------------------------------
  1320.   # 武器アクションのタイプ設定で [1:独自画像] [2:2003仕様]を選択した際の
  1321.   # 参照先の画像をここで指定します
  1322.   # return "001-Weapon01" ←対応する武器グラフィックのファイル名を入れてください
  1323.   #                         武器グラフィックはCharactersフォルダに入れてください
  1324.   # 特定の武器を非表示にしたい場合は空の画像を用意して、それを指定します
  1325.   def weapon_graphic(weapon_id, weapon_type)
  1326.     # 武器IDで指定
  1327.     case weapon_id
  1328.     when 1 # 武器1番の画像ファイル名
  1329.       return ""
  1330.     end
  1331.     # 武器タイプで指定
  1332.     case weapon_type
  1333.     when 6 # 武器タイプ6番の画像ファイル名
  1334.       return "bow01"
  1335.     end
  1336.   end
  1337.   #--------------------------------------------------------------------------
  1338.   # ● 盾グラフィック指定 
  1339.   #--------------------------------------------------------------------------
  1340.   # 武器アクションのタイプ設定で [1:独自画像] [2:2003仕様]を選択し、さらに
  1341.   # 武器アクションの逆手設定をtrueにした場合の参照先の盾画像をここで指定します
  1342.   #
  1343.   # return "001-Shield01" ←対応する盾グラフィックのファイル名を入れてください
  1344.   #                         盾グラフィックはCharactersフォルダに入れてください
  1345.   def shield_graphic(weapon_id, shield_type)
  1346.     # 防具IDで指定
  1347.     case shield_id
  1348.     when 41 # 防具41番(バックラー)の画像ファイル名
  1349.       return ""
  1350.     end
  1351.     # 防具タイプで指定
  1352.     case shield_type
  1353.     when 5 # 防具タイプ5番(小型盾)の画像ファイル名
  1354.       return ""
  1355.     end
  1356.   end
  1357.  
  1358.   #--------------------------------------------------------------------------
  1359.   # ● スキルアクション
  1360.   #--------------------------------------------------------------------------
  1361.   def skill_action
  1362.     # スキルIDで指定
  1363.     case skill_id
  1364.     when 1 # スキル1番は通常攻撃なので、上の武器アクションを実行します
  1365.       return weapon_action
  1366.     when 2 # スキル2番は防御
  1367.       return "防御"
  1368.     when 3,4,5 # スキル3/4/5番は連続攻撃
  1369.       return weapon_action
  1370.     when 6 # スキル6番はエネミー逃走
  1371.       return escape
  1372.     when 7 # スキル7番は様子を見る
  1373.       return "様子見"
  1374.     when 128
  1375.       return "水鉄砲"
  1376.     when 129
  1377.       return "武器投げ"
  1378.     when 130
  1379.       return "5回攻撃"
  1380.     when 131
  1381.       return "カットイン攻撃"
  1382.     when 132
  1383.       return "ムービー攻撃"
  1384.     when 133
  1385.       return "オオカミ変身"
  1386.     when 134
  1387.       return "スキル派生"
  1388.     when 135
  1389.       return "暗転攻撃"
  1390.     when 136
  1391.       return "空中攻撃"
  1392.     end
  1393.     # スキル名で指定(データベースでIDを移動させても大丈夫なのでお勧めです)
  1394.     case skill_name
  1395.     when "背景変更サンプル"
  1396.       return "背景変更攻撃"
  1397.     when "ピクチャ攻撃サンプル"
  1398.       return "ピクチャ攻撃"
  1399.     end
  1400.     # スキルタイプで指定
  1401.     case skill_type
  1402.     when 1 # 特技
  1403.       return "汎用スキル"
  1404.     when 2 # 魔法
  1405.       return "汎用魔法"
  1406.     end
  1407.     # 上記以外
  1408.     return "汎用スキル"
  1409.   end
  1410.   #--------------------------------------------------------------------------
  1411.   # ● アイテムアクション
  1412.   #--------------------------------------------------------------------------
  1413.   def item_action
  1414.     case item_id # アイテムIDで指定
  1415.     when 1
  1416.       return "アイテム使用"
  1417.     else
  1418.       return "アイテム使用"
  1419.     end
  1420.   end
  1421.   #--------------------------------------------------------------------------
  1422.   # ● カウンタースキルID カウンター時のスキルIDを指定します
  1423.   #--------------------------------------------------------------------------
  1424.   # ※データベースで設定された複数回攻撃は反映されません
  1425.   def counter_skill_id
  1426.     return 1
  1427.   end
  1428.   #--------------------------------------------------------------------------
  1429.   # ● 魔法反射アニメID 魔法反射時のアニメIDを指定します
  1430.   #--------------------------------------------------------------------------
  1431.   def reflection_anime_id
  1432.     return 118
  1433.   end
  1434.   #--------------------------------------------------------------------------
  1435.   # ● 身代わり開始アクション
  1436.   #--------------------------------------------------------------------------
  1437.   def substitute_start_action
  1438.     return "身代わり開始"
  1439.   end
  1440.   #--------------------------------------------------------------------------
  1441.   # ● 身代わり終了アクション
  1442.   #--------------------------------------------------------------------------
  1443.   def substitute_end_action
  1444.     return "身代わり終了"
  1445.   end
  1446.   #--------------------------------------------------------------------------
  1447.   # ● 身代わりされた側のアクション開始
  1448.   #--------------------------------------------------------------------------
  1449.   def substitute_receiver_start_action
  1450.     return "被身代わり開始"
  1451.   end
  1452.   #--------------------------------------------------------------------------
  1453.   # ● 身代わりされた側のアクション終了
  1454.   #--------------------------------------------------------------------------
  1455.   def substitute_receiver_end_action
  1456.     return "被身代わり終了"
  1457.   end
  1458.   #--------------------------------------------------------------------------
  1459.   # ● エネミーのレベル  条件分岐などに利用するためのもので、パラメータは反映されません
  1460.   #--------------------------------------------------------------------------
  1461.   def level
  1462.     case id
  1463.     when -1 # 1番のエネミー
  1464.       return 0
  1465.     end
  1466.     return 0
  1467.   end
  1468.  
  1469. end
  1470.  
  1471. #==============================================================================
  1472. # ■ Sideview
  1473. #------------------------------------------------------------------------------
  1474. #  サイドビューバトラーを管理するクラスです。
  1475. #==============================================================================
  1476. class SideView
  1477.   #--------------------------------------------------------------------------
  1478.   # ● 公開インスタンス変数 
  1479.   #--------------------------------------------------------------------------
  1480.   attr_accessor   :x                    # 画面X座標
  1481.   attr_accessor   :y                    # 画面Y座標
  1482.   attr_accessor   :z                    # 画面Z座標
  1483.   attr_accessor   :h                    # 高さ座標
  1484.   attr_accessor   :j                    # ジャンプ座標
  1485.   attr_accessor   :c                    # カーブ座標
  1486.   attr_accessor   :ox                   # 横原点
  1487.   attr_accessor   :oy                   # 縦原点
  1488.   attr_accessor   :oy_adjust            # 縦原点補正
  1489.   attr_accessor   :angle                # 回転角度
  1490.   attr_accessor   :zoom_x               # 横の拡大率
  1491.   attr_accessor   :zoom_y               # 縦の拡大率
  1492.   attr_accessor   :pattern_w            # セル横位置(矩形内)
  1493.   attr_accessor   :pattern_h            # セル縦位置(矩形内)
  1494.   attr_accessor   :sx                   # セル横位置(画像全体)
  1495.   attr_accessor   :sy                   # セル縦位置(画像全体)
  1496.   attr_accessor   :pattern_type         # セル更新タイプ
  1497.   attr_accessor   :pattern_time         # セル更新間隔
  1498.   attr_accessor   :graphic_name         # バトラー画像ファイル名
  1499.   attr_accessor   :graphic_file_index   # バトラー画像ファイル名インデックス
  1500.   attr_accessor   :graphic_index        # バトラー画像インデックス
  1501.   attr_accessor   :cw                   # セル横矩形
  1502.   attr_accessor   :ch                   # セル縦矩形
  1503.   attr_accessor   :shadow_visible       # 影表示
  1504.   attr_accessor   :weapon_visible       # 武器表示
  1505.  
  1506.   attr_accessor   :wait                 # 次の動作待ち時間
  1507.   attr_accessor   :weapon_index         # 表示中の武器画像インデックス配列
  1508.   attr_accessor   :weapon_end           # 武器アニメ終了フラグ
  1509.   attr_accessor   :force_action         # 強制アクション
  1510.   attr_accessor   :target_battler       # ターゲットバトラー情報
  1511.   attr_accessor   :second_targets       # セカンドターゲット情報
  1512.   attr_accessor   :m_a_targets          # アニメ飛ばしターゲット情報
  1513.   attr_accessor   :individual_targets   # 個別処理ターゲットバトラー情報
  1514.   attr_accessor   :effect_data          # エフェクトデータ
  1515.   attr_accessor   :anime_id             # アニメID配列
  1516.   attr_accessor   :anime_move_id        # 飛ばしアニメID配列
  1517.   attr_accessor   :mirror               # 反転フラグ
  1518.   attr_accessor   :opacity              # 透明度
  1519.   attr_accessor   :opacity_data         # 透明度操作情報
  1520.   attr_accessor   :set_damage           # バトルシーンでのダメージ処理
  1521.   attr_accessor   :m_a_data             # アニメ飛ばし情報
  1522.   attr_accessor   :m_a_starter          # アニメ飛ばし開始ターゲット情報
  1523.   attr_accessor   :action_end           # バトルシーンでの行動終了
  1524.   attr_accessor   :damage_anime_data    # ダメージ戦闘アニメのデータ
  1525.   attr_accessor   :anime_no_mirror      # 戦闘アニメの反転禁止フラグ
  1526.   attr_accessor   :anime_horming        # 戦闘アニメのホーミングフラグ
  1527.   attr_accessor   :anime_camera_zoom    # 戦闘アニメがカメラに合わせて拡大縮小するか
  1528.   attr_accessor   :anime_plus_z         # 戦闘アニメZ座標補正
  1529.   attr_accessor   :derivation_skill_id  # スキル派生ID
  1530.   attr_accessor   :immortal             # 不死身フラグ
  1531.   attr_accessor   :mirage               # 残像データ
  1532.   attr_accessor   :balloon_data         # ふきだしデータ
  1533.   attr_accessor   :timing               # 別バトラーからのタイミングデータ
  1534.   attr_accessor   :timing_targets       # タイミングデータを渡す別バトラー
  1535.   attr_accessor   :color_set            # 色調変更データ
  1536.   attr_accessor   :color                # 色調データ
  1537.   attr_accessor   :change_up            # 画像変更フラグ
  1538.   attr_accessor   :hit                  # 被攻撃回数
  1539.   attr_accessor   :add_state            # 何度も付加ステートの表示を防ぐフラグ
  1540.   attr_accessor   :counter_id           # カウンター時のスキルID
  1541.   attr_accessor   :reflection_id        # 魔法反射時のアニメID
  1542.   attr_accessor   :result_damage        # ターン終了時のHP変動データ
  1543.   attr_accessor   :active               # 行動権
  1544.   attr_accessor   :anime_off            # 戦闘アニメ消去
  1545.   attr_accessor   :command_action       # コマンドアクションフラグ
  1546.  
  1547.   attr_accessor   :base_x               # 初期位置 X座標
  1548.   attr_accessor   :base_y               # 初期位置 Y座標
  1549.   attr_accessor   :base_h               # 初期位置 高さ座標
  1550.   attr_accessor   :max_pattern_w        # セルの横分割数
  1551.   attr_accessor   :max_pattern_h        # セルの縦分割数
  1552.  
  1553.   attr_reader     :collapse             # コラプスフラグ
  1554.   attr_reader     :picture              # ピクチャ表示フラグ
  1555.   #--------------------------------------------------------------------------
  1556.   # ● オブジェクト初期化
  1557.   #--------------------------------------------------------------------------
  1558.   def initialize(battler)
  1559.     [url=home.php?mod=space&uid=133701]@battler[/url] = battler
  1560.     reset
  1561.   end
  1562.   #--------------------------------------------------------------------------
  1563.   # ● 初期化
  1564.   #--------------------------------------------------------------------------
  1565.   def reset
  1566.     @x = 0
  1567.     @y = 0
  1568.     @z = 0
  1569.     @h = 0
  1570.     @j = 0
  1571.     @c = 0
  1572.     [url=home.php?mod=space&uid=271873]@jump[/url] = []
  1573.     @curve = []
  1574.     @ox = 0
  1575.     @oy = 0
  1576.     @oy_adjust = 0
  1577.     @z_plus = 0
  1578.     @move_time = 0
  1579.     [url=home.php?mod=space&uid=124954]@Angle[/url] = 0
  1580.     @angle_time = 0
  1581.     @zoom_x = 1
  1582.     @zoom_y = 1
  1583.     @zoom_time = 0
  1584.     @pattern_w = 0
  1585.     @pattern_h = 0
  1586.     @sx = 0
  1587.     @sy = 0
  1588.     @pattern_type = 0
  1589.     @pattern_time = 0
  1590.     @pattern_rest_time = 0
  1591.     @graphic_name = ""
  1592.     @graphic_file_index = ""
  1593.     @graphic_index = 0
  1594.     @cw = 0
  1595.     @ch = 0
  1596.     @shadow_visible = false
  1597.     @weapon_visible = true
  1598.  
  1599.     [url=home.php?mod=space&uid=36110]@Wait[/url] = 0
  1600.     @weapon_index = []
  1601.     @weapon_end = true
  1602.     @full_action = []
  1603.     @action = []
  1604.     @force_action = ""
  1605.     @target_battler = []
  1606.     @second_targets = []
  1607.     @individual_targets = []
  1608.     @m_a_targets = []
  1609.     @effect_data = []
  1610.     @anime_id = []
  1611.     @anime_move_id = []
  1612.     [url=home.php?mod=space&uid=316553]@opacity[/url] = 255
  1613.     @opacity_data = []
  1614.     @set_damage = false
  1615.     @m_a_data = []
  1616.     @m_a_starter = []
  1617.     @action_end = false
  1618.     @damage_anime_data = []
  1619.     @anime_no_mirror = false
  1620.     @anime_horming = false
  1621.     @anime_camera_zoom = false
  1622.     @anime_plus_z = true
  1623.     @derivation_skill_id = 0
  1624.     @immortal = false
  1625.     @mirage = []
  1626.     @play_data = []
  1627.     @balloon_data = []
  1628.     @picture = false
  1629.     @timing = []
  1630.     @timing_targets = []
  1631.     @color_set = []
  1632.     [url=home.php?mod=space&uid=10453]@color[/url] = []
  1633.     @change_up = false
  1634.     @non_motion = false
  1635.     @graphics_change = false
  1636.     @hit = 0
  1637.     @add_state = []
  1638.     @collapse = false
  1639.     @counter_id = 0
  1640.     @reflection_id = 0
  1641.     @result_damage = [0,0]
  1642.     @active = false
  1643.     @anime_off = false
  1644.     @command_action = false
  1645.  
  1646.     @base_x = 0
  1647.     @base_y = 0
  1648.     @base_z = 0
  1649.     @base_h = 0
  1650.     @max_pattern_w = 0
  1651.     @max_pattern_h = 0
  1652.     @pattern_kind = 0
  1653.     @pattern_count = 0
  1654.     @move_time = 0
  1655.     [url=home.php?mod=space&uid=111303]@mirror[/url] = false
  1656.     @battler.set_graphic(@pre_change_data[0], @pre_change_data[1], @pre_change_data[2], @pre_change_data[3]) if @pre_change_data != nil
  1657.     @pre_change_data = nil
  1658.   end  
  1659.   #--------------------------------------------------------------------------
  1660.   # ● セットアップ
  1661.   #--------------------------------------------------------------------------
  1662.   def setup(bitmap_width, bitmap_height, first_action_flag)
  1663.     reset if first_action_flag
  1664.     set_data
  1665.     set_base_position if !@graphics_change
  1666.     set_graphics(bitmap_width, bitmap_height)
  1667.     set_target
  1668.     setup_graphics_change if @graphics_change
  1669.     first_battler_anime_set if first_action_flag
  1670.   end  
  1671.   #--------------------------------------------------------------------------
  1672.   # ● バトラーデータ取得
  1673.   #--------------------------------------------------------------------------
  1674.   def set_data
  1675.     return if @battler == nil
  1676.     if @battler.actor?
  1677.       @graphic_name = @battler.character_name
  1678.       @graphic_index = @battler.character_index
  1679.     else
  1680.       @graphic_name = @battler.battler_name
  1681.       @graphic_index = 0
  1682.     end
  1683.     @max_pattern_w = max_pattern[0]
  1684.     @max_pattern_h = max_pattern[1]
  1685.   end
  1686.   #--------------------------------------------------------------------------
  1687.   # ● ベース座標をセット data = [X軸, Y軸, H軸]  moment_set…瞬間配置
  1688.   #--------------------------------------------------------------------------
  1689.   def set_base_position(moment_set = true)
  1690.     mirroring_reset
  1691.     if @battler.actor?
  1692.       data = N03::ACTOR_POSITION[@battler.index].dup
  1693.       @base_x = data[0] * 100 if !@mirror
  1694.       @base_x = (Graphics.width - data[0]) * 100 if @mirror
  1695.     else
  1696.       data = [@battler.screen_x, @battler.screen_y, 0].dup
  1697.       @base_x = data[0] * 100 if !$sv_camera.mirror
  1698.       @base_x = (Graphics.width - data[0]) * 100 if $sv_camera.mirror
  1699.     end
  1700.     @base_y = data[1] * 100
  1701.     @base_h = data[2] * 100
  1702.     @base_z = @y
  1703.     return if !moment_set
  1704.     @x = @base_x
  1705.     @y = @base_y
  1706.     @z = @base_z
  1707.   end
  1708.   #--------------------------------------------------------------------------
  1709.   # ● グラフィックデータ取得
  1710.   #--------------------------------------------------------------------------
  1711.   def set_graphics(bitmap_width, bitmap_height)
  1712.     sign = @graphic_name[/^[\!\$]./]
  1713.     if sign && sign.include?('$')
  1714.       @cw = bitmap_width / @max_pattern_w
  1715.       @ch = bitmap_height / @max_pattern_h
  1716.     elsif @max_pattern_w == 1 && @max_pattern_h == 1
  1717.       @cw = bitmap_width
  1718.       @ch = bitmap_height
  1719.     else
  1720.       @cw = bitmap_width / (@max_pattern_w * 4)
  1721.       @ch = bitmap_height / (@max_pattern_h * 2)
  1722.     end
  1723.     @ox = @cw / 2
  1724.     @oy = @ch
  1725.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  1726.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  1727.   end
  1728.   #--------------------------------------------------------------------------
  1729.   # ● ターゲットをセット
  1730.   #--------------------------------------------------------------------------
  1731.   def set_target(target = nil)
  1732.     @target_battler = target
  1733.     @target_battler = [@battler] if target == nil
  1734.     @second_targets = @target_battler
  1735.   end
  1736.   #--------------------------------------------------------------------------
  1737.   # ● 画像変更用のセットアップ
  1738.   #--------------------------------------------------------------------------
  1739.   def setup_graphics_change
  1740.     @graphics_change = false
  1741.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  1742.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  1743.   end  
  1744.   #--------------------------------------------------------------------------
  1745.   # ● 戦闘開始時の待機アニメ画像データ取得
  1746.   #--------------------------------------------------------------------------
  1747.   def first_battler_anime_set
  1748.     loop do
  1749.       update
  1750.       break if @action_data[0] == "motion"
  1751.       break if @action_data[0] == "move" && @action_data[8] != ""
  1752.       break if @full_action == []
  1753.     end
  1754.     start_action(first_action) if @battler.movable?
  1755.   end
  1756.   #--------------------------------------------------------------------------
  1757.   # ● アクション開始
  1758.   #--------------------------------------------------------------------------
  1759.   def start_action(kind = nil)
  1760.     return if @event_fix && $game_troop.interpreter.running?
  1761.     # ウェイト中の場合キャンセル
  1762.     return @wait -= 1 if @wait > 0 && kind == nil
  1763.     action_setup if kind != nil
  1764.     set_action(kind)
  1765.     @action = kind if @action == nil
  1766.     # 行動配列が無い場合は行動終了処理へ移行
  1767.     action_terminate if @action == nil
  1768.     # 次のアクション決定
  1769.     @action_data = N03::ACTION[@action]
  1770.     next_action
  1771.   end
  1772.   #--------------------------------------------------------------------------
  1773.   # ● 行動パラメータの初期化
  1774.   #--------------------------------------------------------------------------
  1775.   def action_setup
  1776.     @event_fix = false
  1777.     @set_damage = false
  1778.     @action_end = false
  1779.     @balloon_data = []
  1780.     @loop_act = []
  1781.     angle_reset
  1782.     zoom_reset
  1783.     opacity_reset
  1784.     @curve = []
  1785.     @c = 0
  1786.     convert_jump
  1787.   end  
  1788.   #--------------------------------------------------------------------------
  1789.   # ● 行動終了処理
  1790.   #--------------------------------------------------------------------------
  1791.   def action_terminate
  1792.     @mirage = [] if @mirage_end
  1793.     mirroring_reset
  1794.     @picture = false
  1795.     @individual_targets = []
  1796.     action_setup
  1797.     # 待機アクションへ移行
  1798.     stand_by_action if !@non_motion
  1799.     # 戦闘行動のアクティブ権を終了
  1800.     next_battler
  1801.   end  
  1802.   #--------------------------------------------------------------------------
  1803.   # ● 新しいアクション内容の決定
  1804.   #--------------------------------------------------------------------------
  1805.   def set_action(kind = nil)
  1806.     full_act = N03::FULLACTION[kind]
  1807.     @full_action = full_act.dup if full_act != nil
  1808.     @action = @full_action.shift
  1809.     # 参照したアクションがフルアクションであれば全体のアクションを統合
  1810.     full_act2 = N03::FULLACTION[@action]
  1811.     @full_action = full_act2.dup + @full_action if full_act2 != nil
  1812.   end
  1813.   #--------------------------------------------------------------------------
  1814.   # ● 次のアクションへ
  1815.   #--------------------------------------------------------------------------
  1816.   def next_action
  1817.     @wait = 0
  1818.     # ショートカット確認
  1819.     eval(@action) if @action != nil && @action_data == nil && N03::FULLACTION[@action] == nil
  1820.     # ウエイト設定
  1821.     @wait = @action.to_i if @wait == 0 && @action_data == nil
  1822.     @wait = rand(@wait.abs + 1) if @wait < 0
  1823.     # アクション開始
  1824.     action_play
  1825.   end
  1826.   #--------------------------------------------------------------------------
  1827.   # ● 待機アクションへ移行
  1828.   #--------------------------------------------------------------------------
  1829.   def stand_by_action
  1830.     # 通常待機に
  1831.     stand_by_act = normal
  1832.     # HPが1/4でピンチアクションに
  1833.     stand_by_act = pinch if @battler.hp <= @battler.mhp / 4
  1834.     # ステートチェック
  1835.     stand_by_act = state(@battler.states[0].id) if @battler.states[0] != nil && state(@battler.states[0].id) != nil
  1836.     # コマンドチェック
  1837.     stand_by_act = command if @command_action && command != nil
  1838.     set_action(stand_by_act)
  1839.     @action = stand_by_act if @action == nil
  1840.   end
  1841.   #--------------------------------------------------------------------------
  1842.   # ● 強制アクション開始
  1843.   #--------------------------------------------------------------------------
  1844.   def start_force_action
  1845.     return if @active
  1846.     start_action(@force_action)
  1847.     @force_action = ""
  1848.   end  
  1849.   #--------------------------------------------------------------------------
  1850.   # ● アクション追加
  1851.   #--------------------------------------------------------------------------
  1852.   def add_action(kind)
  1853.     @full_action.push(kind)
  1854.   end  
  1855.   #--------------------------------------------------------------------------
  1856.   # ● アクションの挿入
  1857.   #--------------------------------------------------------------------------
  1858.   def unshift_action(kind)
  1859.     @full_action.unshift(kind)
  1860.   end  
  1861.   #--------------------------------------------------------------------------
  1862.   # ● フレーム更新
  1863.   #--------------------------------------------------------------------------
  1864.   def update
  1865.     # アクション開始
  1866.     start_action
  1867.     # 強制アクション開始
  1868.     start_force_action if @force_action != ""
  1869.     # アニメパターン更新
  1870.     update_pattern
  1871.     # 移動更新
  1872.     update_move
  1873.     # 回転更新
  1874.     update_angle if @angle_time != 0
  1875.     # 拡大縮小更新
  1876.     update_zoom if @zoom_time != 0
  1877.     # 透明度更新
  1878.     update_opacity if @opacity_data != []
  1879.   end
  1880.   #--------------------------------------------------------------------------
  1881.   # ● アニメパターン更新
  1882.   #--------------------------------------------------------------------------
  1883.   def update_pattern
  1884.     return @pattern_rest_time -= 1 if @pattern_rest_time != 0
  1885.     return if @max_pattern_w == 1 && @max_pattern_h == 1
  1886.     @pattern_rest_time = @pattern_time
  1887.     # 再生開始・終了セル位置を取得
  1888.     if @pattern_kind > 0 # 通常再生中
  1889.       @pattern_start = 0
  1890.       @pattern_end = @max_pattern_w - 1
  1891.     elsif @pattern_kind < 0 # 逆転再生中
  1892.       @pattern_start = @max_pattern_w - 1
  1893.       @pattern_end = 0
  1894.     end
  1895.     # 片道の再生が終了
  1896.     @pattern_count += 1 if @pattern_w == @pattern_end && @pattern_kind != 0
  1897.     # ループ処理
  1898.     case @pattern_type.abs
  1899.     when  1,3 # 片道
  1900.       @pattern_kind =  0 if @pattern_count != 0 && @pattern_type ==  1
  1901.       @pattern_kind =  0 if @pattern_count != 0 && @pattern_type == -1
  1902.       @pattern_kind =  1 if @pattern_count != 0 && @pattern_type ==  3
  1903.       @pattern_kind = -1 if @pattern_count != 0 && @pattern_type == -3
  1904.       @pattern_w = @pattern_start - @pattern_kind if @pattern_count != 0 && @pattern_type.abs == 3
  1905.       @pattern_count = 0
  1906.     when  2,4 # 往復
  1907.       @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  2
  1908.       @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -2
  1909.       @pattern_kind =  0 if @pattern_count == 2 && @pattern_type ==  2
  1910.       @pattern_kind =  0 if @pattern_count == 2 && @pattern_type == -2
  1911.       @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  4
  1912.       @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -4
  1913.       @pattern_kind =  1 if @pattern_count == 2 && @pattern_type ==  4
  1914.       @pattern_kind = -1 if @pattern_count == 2 && @pattern_type == -4
  1915.       @pattern_count = 0 if @pattern_count == 2
  1916.     end
  1917.     # セル更新
  1918.     @pattern_w += 1 * @pattern_kind
  1919.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  1920.   end
  1921.   #--------------------------------------------------------------------------
  1922.   # ● 移動の更新
  1923.   #--------------------------------------------------------------------------
  1924.   def update_move
  1925.     @z = @y / 100 + @z_plus
  1926.     return if @move_time == 0
  1927.     target_position_set if @horming_move
  1928.     @x = (@x * (@move_time - 1) + @target_x) / @move_time
  1929.     @y = (@y * (@move_time - 1) + @target_y) / @move_time
  1930.     @h = (@h * (@move_time - 1) + @target_h) / @move_time if @move_h != nil
  1931.     @c += @curve[@move_time - 1] if @curve[@move_time - 1] != nil
  1932.     @j += @jump[@move_time - 1] if @jump[@move_time - 1] != nil
  1933.     @move_time -= 1
  1934.     convert_jump if @move_time == 0
  1935.   end
  1936.   #--------------------------------------------------------------------------
  1937.   # ● 移動目標の更新
  1938.   #--------------------------------------------------------------------------
  1939.   def target_position_set
  1940.     target_position = N03.get_targets_position(@move_targets, @horming_move)
  1941.     @target_x = target_position[0] + @move_x
  1942.     @target_y = target_position[1] + @move_y
  1943.     @target_h = target_position[2] + @move_h if @move_h != nil
  1944.   end  
  1945.   #--------------------------------------------------------------------------
  1946.   # ● 回転更新
  1947.   #--------------------------------------------------------------------------
  1948.   def update_angle
  1949.     @angle += @angling
  1950.     @angle_time -= 1
  1951.     return if @angle_time != 0
  1952.     return angle_reset if @angle_data[4] == 0
  1953.     angling(@angle_data) if @angle_data[4] == 2
  1954.   end  
  1955.   #--------------------------------------------------------------------------
  1956.   # ● 拡大縮小更新
  1957.   #--------------------------------------------------------------------------
  1958.   def update_zoom
  1959.     @zoom_x += @zooming_x
  1960.     @zoom_y += @zooming_y
  1961.     @zoom_time -= 1
  1962.     return if @zoom_time != 0
  1963.     return zoom_reset if @zoom_data[4] == 0
  1964.     zooming(@zoom_data) if @zoom_data[4] == 2
  1965.   end
  1966.   #--------------------------------------------------------------------------
  1967.   # ● 透明度更新
  1968.   #--------------------------------------------------------------------------
  1969.   def update_opacity
  1970.     @opacity += @opacity_data[2]
  1971.     @opacity_data[0] -= 1
  1972.     return if @opacity_data[0] != 0
  1973.     return if !@opacity_data[5]
  1974.     @opacity_data[2] *= -1
  1975.     @opacity_data[0] = @opacity_data[1]
  1976.   end
  1977.   #--------------------------------------------------------------------------
  1978.   # ● アクション実行
  1979.   #--------------------------------------------------------------------------
  1980.   def action_play
  1981.     return if @action_data == nil
  1982.     action = @action_data[0]
  1983.     # バトラー反転の場合
  1984.     return mirroring                    if action == "mirror"
  1985.     # 残像の場合
  1986.     return mirage_set                   if action == "mirage"
  1987.     # 回転の場合  
  1988.     return angling                      if action == "angle"
  1989.     # 拡大縮小の場合  
  1990.     return zooming                      if action == "zoom"
  1991.     # 透明度操作の場合  
  1992.     return set_opacity                  if action == "opacity"
  1993.     # バトラーアニメの場合
  1994.     return battler_anime                if action == "motion"
  1995.     # 移動の場合
  1996.     return move                         if action == "move"
  1997.     # 武器アニメの場合
  1998.     return weapon_anime([@action_data]) if action == "wp"
  1999.     # アニメ飛ばしの場合
  2000.     return move_anime                   if action == "m_a"
  2001.     # 戦闘シーン通信の場合(コラプス)
  2002.     return set_play_data                if action == "collapse" or action == "no_collapse"
  2003.     # データベース戦闘アニメ表示の場合  
  2004.     return battle_anime                 if action == "anime"
  2005.     # カメラワークの場合
  2006.     return camera                       if action == "camera"
  2007.     # 画面のシェイクの場合
  2008.     return shake                        if action == "shake"
  2009.     # 画面色調変更の場合
  2010.     return color_effect                 if action == "color"
  2011.     # トランジションの場合
  2012.     return transition                   if action == "ts"
  2013.     # ふきだしアニメ表示の場合  
  2014.     return balloon_anime                if action == "balloon"
  2015.     # ピクチャ表示の場合
  2016.     return picture_set                  if action == "pic"
  2017.     # ステート操作の場合
  2018.     return state_set                    if action == "sta"
  2019.     # FPS変更の場合
  2020.     return fps                          if action == "fps"
  2021.     # バトラー画像変更の場合  
  2022.     return graphics_change              if action == "change"
  2023.     # スキル派生の場合  
  2024.     return derivating_skill             if action == "der"
  2025.     # BGM/BGS/SE演奏の場合  
  2026.     return sound                        if action == "sound"
  2027.     # ムービー再生の場合  
  2028.     return movie                        if action == "movie"
  2029.     # ゲームスイッチ操作の場合  
  2030.     return switches                     if action == "switch"
  2031.     # ゲーム変数操作の場合  
  2032.     return variable                     if action == "variable"
  2033.     # 条件分岐(ゲームスイッチ)の場合
  2034.     return nece_1                       if action == "n_1"
  2035.     # 条件分岐(ゲーム変数)の場合
  2036.     return nece_2                       if action == "n_2"
  2037.     # 条件分岐(ステート)の場合
  2038.     return nece_3                       if action == "n_3"
  2039.     # 条件分岐(スキル)の場合
  2040.     return nece_4                       if action == "n_4"
  2041.     # 条件分岐(パラメータ)の場合
  2042.     return nece_5                       if action == "n_5"
  2043.     # 条件分岐(装備)の場合
  2044.     return nece_6                       if action == "n_6"
  2045.     # 条件分岐(スクリプト)の場合
  2046.     return nece_7                       if action == "n_7"
  2047.     # セカンドターゲット操作の場合  
  2048.     return second_targets_set           if action == "s_t"
  2049.     # コモンイベント呼び出しの場合  
  2050.     return call_common_event            if action == "common"
  2051.     # 戦闘アニメ消去の場合  
  2052.     return @anime_off = true            if action == "anime_off"
  2053.     # 強制戦闘終了の場合  
  2054.     return BattleManager.process_abort  if action == "battle_end"
  2055.     # 画面固定の場合  
  2056.     return Graphics.freeze              if action == "graphics_freeze"
  2057.     # ダメージアニメの場合  
  2058.     return damage_anime                 if action == "damage_anime"
  2059.     # 武器消去の場合  
  2060.     return @weapon_visible = false      if action == "weapon_off"
  2061.     # 武器消去解除の場合  
  2062.     return @weapon_visible = true       if action == "weapon_on"
  2063.     # 待機キャンセルの場合
  2064.     return @non_motion = true           if action == "non_motion"
  2065.     # 待機キャンセル解除の場合
  2066.     return @non_motion = false          if action == "non_motion_cancel"
  2067.     # 初期位置変更の場合
  2068.     return change_base_position         if action == "change_base_position"
  2069.     # 初期位置変更解除の場合
  2070.     return set_base_position(false)     if action == "set_base_position"
  2071.     # 強制アクションの場合  
  2072.     return force_act                    if action == "force_action"
  2073.     # 強制アクションの場合 (セカンドターゲット)
  2074.     return force_act2                   if action == "force_action2"
  2075.     # 個別開始の場合
  2076.     return individual_start             if action == "individual_start"
  2077.     # 個別終了の場合
  2078.     return individual_end               if action == "individual_end"
  2079.     # ループ開始の場合
  2080.     return loop_start                   if action == "loop_start"
  2081.     # ループ終了の場合
  2082.     return loop_end                     if action == "loop_end"
  2083.     # 自分のみ更新の場合
  2084.     return only_action_on               if action == "only_action_on"
  2085.     # 自分のみ更新解除の場合
  2086.     return only_action_off              if action == "only_action_off"
  2087.     # 次の行動者へ移行の場合
  2088.     return next_battler                 if action == "next_battler"
  2089.     # 画像変更フラグの場合
  2090.     return set_change                   if action == "set_change"
  2091.     # スクリプト操作の場合   
  2092.     return eval(@action_data[0])
  2093.   end
  2094.   #--------------------------------------------------------------------------
  2095.   # ● バトラー反転実行
  2096.   #--------------------------------------------------------------------------
  2097.   def mirroring
  2098.     @mirror = !@mirror
  2099.   end  
  2100.   #--------------------------------------------------------------------------
  2101.   # ● 反転初期化
  2102.   #--------------------------------------------------------------------------
  2103.   def mirroring_reset
  2104.     @mirror = false
  2105.     mirroring if !@battler.actor? && N03::ENEMY_MIRROR
  2106.     mirroring if $sv_camera.mirror
  2107.   end  
  2108.   #--------------------------------------------------------------------------
  2109.   # ● 残像実行
  2110.   #--------------------------------------------------------------------------
  2111.   def mirage_set
  2112.     @mirage = @action_data.dup
  2113.     @mirage_end = @mirage[3]
  2114.     @mirage = [] if @mirage[1] == 0
  2115.   end  
  2116.   #--------------------------------------------------------------------------
  2117.   # ● 回転実行
  2118.   #--------------------------------------------------------------------------
  2119.   def angling(data = @action_data)
  2120.     @angle_data = data.dup
  2121.     @oy = @ch / 2
  2122.     @oy_adjust = @ch * 50
  2123.     @angle_time = data[1]
  2124.     start_angle = data[2] * N03.mirror_num(@mirror)
  2125.     end_angle = data[3] * N03.mirror_num(@mirror)
  2126.     # 時間が0以下なら即座に最終角度へ
  2127.     @angle_time = 1 if @angle_time <= 0
  2128.     # 回転時間から1フレームあたりの角度を出す
  2129.     @angling = (end_angle - start_angle) / @angle_time
  2130.     # 割り切れない余りを初期角度に
  2131.     @angle = (end_angle - start_angle) % @angle_time + start_angle
  2132.   end
  2133.   #--------------------------------------------------------------------------
  2134.   # ● 回転初期化
  2135.   #--------------------------------------------------------------------------
  2136.   def angle_reset
  2137.     @oy = @ch
  2138.     @angle = @angle_time = @oy_adjust = 0
  2139.   end  
  2140.   #--------------------------------------------------------------------------
  2141.   # ● 拡大縮小実行
  2142.   #--------------------------------------------------------------------------
  2143.   def zooming(data = @action_data)
  2144.     @zoom_data = data.dup
  2145.     @zoom_time = data[1]
  2146.     start_zoom_x = data[2][0]
  2147.     start_zoom_y = data[2][1]
  2148.     end_zoom_x = data[3][0]
  2149.     end_zoom_y = data[3][1]
  2150.     # 時間が0以下なら即座に最終サイズへ
  2151.     @zoom_time = 1 if @zoom_time <= 0
  2152.     # 拡大縮小時間から1フレームあたりの拡大縮小率を出す
  2153.     @zooming_x = (end_zoom_x - start_zoom_x) / @zoom_time
  2154.     @zooming_y = (end_zoom_y - start_zoom_y) / @zoom_time
  2155.     # 開始サイズに
  2156.     @zoom_x = start_zoom_x
  2157.     @zoom_y = start_zoom_y
  2158.   end  
  2159.   #--------------------------------------------------------------------------
  2160.   # ● 拡大縮小初期化
  2161.   #--------------------------------------------------------------------------
  2162.   def zoom_reset
  2163.     @zoom_x = @zoom_y = 1
  2164.     @zoom_time = 0
  2165.   end  
  2166.   #--------------------------------------------------------------------------
  2167.   # ● バトラー透明度操作
  2168.   #--------------------------------------------------------------------------
  2169.   def set_opacity
  2170.     data = @action_data.dup
  2171.     @opacity = data[2]
  2172.     opacity_move = (data[3] - data[2])/ data[1]
  2173.     @opacity_data = [data[1], data[1], opacity_move, data[4], data[5], data[6]]
  2174.     @wait = data[1] if data[7]
  2175.     @wait *= 2 if data[6] && data[7]
  2176.   end
  2177.   #--------------------------------------------------------------------------
  2178.   # ● 透明度操作初期化
  2179.   #--------------------------------------------------------------------------
  2180.   def opacity_reset
  2181.     @opacity = 255
  2182.     @opacity = 0 if @battler.hidden?
  2183.     @opacity_data = []
  2184.   end
  2185.   #--------------------------------------------------------------------------
  2186.   # ● バトラーアニメ実行
  2187.   #--------------------------------------------------------------------------
  2188.   def battler_anime(anime_data = nil)
  2189.     anime_data = @action_data.dup if anime_data == nil
  2190.     @graphic_file_index = anime_data[1] if !graphic_fix
  2191.     @pattern_h = anime_data[2]
  2192.     @pattern_w = anime_data[3]
  2193.     @pattern_h = 0 if @max_pattern_w == 1
  2194.     @pattern_w = 0 if @max_pattern_h == 1
  2195.     @pattern_type = anime_data[4]
  2196.     @pattern_time = anime_data[5]
  2197.     @pattern_rest_time = anime_data[5]
  2198.     @pattern_count = 0
  2199.     @pattern_kind = 1
  2200.     @pattern_kind = -1 if @pattern_type < 0
  2201.     @pattern_kind = 0 if @pattern_type == 0
  2202.     @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  2203.     @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  2204.     @z_plus = anime_data[6]
  2205.     @wait = set_anime_wait if anime_data[7]
  2206.     @shadow_visible = anime_data[8]
  2207.     weapon_anime(anime_data)
  2208.   end
  2209.   #--------------------------------------------------------------------------
  2210.   # ● アニメウエイト計算
  2211.   #--------------------------------------------------------------------------
  2212.   def set_anime_wait
  2213.     if @pattern_type > 0
  2214.       pattern_time_a = @max_pattern_w - @pattern_w.abs
  2215.     elsif @pattern_type < 0
  2216.       pattern_time_a = @pattern_w.abs + 1
  2217.     else
  2218.       return @pattern_time if @pattern_type == 0
  2219.     end
  2220.     case @pattern_type
  2221.     when 1,-1, 3,-3
  2222.       return pattern_time_a * @pattern_time
  2223.     when 2,-2, 4,-4
  2224.       return pattern_time_a * @pattern_time + (@max_pattern_w - 2) * @pattern_time
  2225.     end
  2226.   end  
  2227.   #--------------------------------------------------------------------------
  2228.   # ● 移動実行
  2229.   #--------------------------------------------------------------------------
  2230.   def move
  2231.     @move_targets = N03.get_targets(@action_data[1].abs, @battler)
  2232.     return if @move_targets == []
  2233.     @move_targets = [@battler] if @action_data[1].abs == 7
  2234.     @move_x = @action_data[2] * 100 * N03.mirror_num(@mirror)
  2235.     @move_y = @action_data[3] * 100
  2236.     @move_h = @action_data[4] * 100 if @action_data[4] != nil
  2237.     @move_h = nil if @action_data[4] == nil
  2238.     battler_anime(N03::ACTION[@action_data[8]].dup) if N03::ACTION[@action_data[8]] != nil
  2239.     @horming_move = true
  2240.     @horming_move = false if @action_data[1] < 0 or @action_data[1].abs == 7
  2241.     target_position_set
  2242.     target_position = [@target_x, @target_y, @target_z]
  2243.     distanse_move = @action_data[5] > 0
  2244.     @move_time = N03.distanse_calculation(@action_data[5].abs, target_position, [@x, @y, @z], distanse_move)
  2245.     @wait = @move_time
  2246.     curve
  2247.     jump
  2248.     @move_time = 1 if @move_time == 0
  2249.     @horming_move = false if !@move_targets or @move_targets.include?(@battler)
  2250.     update_move if @move_time == 1
  2251.   end  
  2252.   #--------------------------------------------------------------------------
  2253.   # ● カーブ実行
  2254.   #--------------------------------------------------------------------------
  2255.   def curve
  2256.     @c = 0
  2257.     return if @action_data[6] == 0
  2258.     @curve = N03.parabola([@action_data[6], -@action_data[6]], @move_time, 100, 4)
  2259.   end  
  2260.   #--------------------------------------------------------------------------
  2261.   # ● ジャンプ実行
  2262.   #--------------------------------------------------------------------------
  2263.   def jump
  2264.     convert_jump
  2265.     return if @action_data[7] == [0,0]
  2266.     @jump = N03.parabola(@action_data[7].dup, @move_time, 100)
  2267.   end  
  2268.   #--------------------------------------------------------------------------
  2269.   # ● J座標(ジャンプ高度)をH座標に変換
  2270.   #--------------------------------------------------------------------------
  2271.   def convert_jump
  2272.     @h += @j
  2273.     @j = 0
  2274.     @jump = []
  2275.   end  
  2276.   #--------------------------------------------------------------------------
  2277.   # ● データベース戦闘アニメ実行
  2278.   #--------------------------------------------------------------------------
  2279.   def battle_anime
  2280.     data = @action_data.dup
  2281.     targets = N03.get_targets(data[2], @battler)
  2282.     return if targets == []
  2283.     data[8] = !data[8] if @mirror
  2284.     @set_damage           = data[5]
  2285.     @damage_anime_data[0] = N03.get_attack_anime_id(data[1], @battler)
  2286.     @damage_anime_data[1] = data[8]
  2287.     @damage_anime_data[2] = data[7]
  2288.     @damage_anime_data[3] = data[6]
  2289.     @damage_anime_data[4] = data[9]
  2290.     @wait = N03.get_anime_time(@damage_anime_data[0]) - 2 if data[4]
  2291.     return if @set_damage
  2292.     for target in targets do display_anime(targets, target, data) end
  2293.   end
  2294.   #--------------------------------------------------------------------------
  2295.   # ● 武器アニメ開始
  2296.   #--------------------------------------------------------------------------
  2297.   def weapon_anime(anime_data)
  2298.     @weapon_end = true
  2299.     for i in 9...anime_data.size
  2300.       set_effect_data(anime_data[i]) if anime_data[i] != ""
  2301.     end
  2302.   end
  2303.   #--------------------------------------------------------------------------
  2304.   # ● アニメ飛ばし開始
  2305.   #--------------------------------------------------------------------------
  2306.   def move_anime
  2307.     @m_a_starter = []
  2308.     @m_a_targets = []
  2309.     starters = N03.get_targets(@action_data[2], @battler)
  2310.     targets = N03.get_targets(@action_data[3], @battler)
  2311.     return if starters == [] or targets == []
  2312.     single_start = true if starters != nil && @action_data[2] < 0
  2313.     single_start = true if @action_data[1][0] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][0], @battler)].position == 3
  2314.     starters = [starters[0]] if single_start
  2315.     single_end = true if targets != nil && @action_data[3] < 0
  2316.     single_end = true if @action_data[1][1] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][1], @battler)].position == 3
  2317.     targets = [targets[0]] if single_end
  2318.     se_flag = true
  2319.     for starter in starters
  2320.       for target in targets
  2321.         data = @action_data.dup
  2322.         data[17] = se_flag
  2323.         @effect_data.push(data)
  2324.         @m_a_targets.push(target)
  2325.         @m_a_starter.push(starter)
  2326.         se_flag = false
  2327.       end
  2328.     end  
  2329.   end
  2330.   #--------------------------------------------------------------------------
  2331.   # ● スプライトセット通信
  2332.   #--------------------------------------------------------------------------
  2333.   def set_effect_data(data = @action)
  2334.     action_data = N03::ACTION[data]
  2335.     return if action_data == nil
  2336.     @effect_data.push(action_data.dup)
  2337.   end
  2338.   #--------------------------------------------------------------------------
  2339.   # ● 戦闘シーン通信のデータを格納
  2340.   #--------------------------------------------------------------------------
  2341.   def set_play_data(data = @action_data)
  2342.     @play_data = data.dup
  2343.   end
  2344.   #--------------------------------------------------------------------------
  2345.   # ● 戦闘アニメの表示
  2346.   #--------------------------------------------------------------------------
  2347.   def display_anime(targets, target, data)
  2348.     return if !N03.first_of_all_screen_anime(data[1], target, targets)
  2349.     target.animation_id         = N03.get_attack_anime_id(data[1], @battler)
  2350.     target.animation_mirror     = data[8]
  2351.     target.sv.anime_horming     = data[3]
  2352.     target.sv.anime_camera_zoom = data[6]
  2353.     target.sv.anime_no_mirror   = data[7]
  2354.     target.sv.anime_plus_z      = data[9]
  2355.   end
  2356.   #--------------------------------------------------------------------------
  2357.   # ● 戦闘アニメ拡張データの初期化
  2358.   #--------------------------------------------------------------------------
  2359.   def reset_anime_data
  2360.     @anime_no_mirror = false
  2361.     @anime_horming = false
  2362.     @anime_camera_zoom = false
  2363.     @timing_targets = []
  2364.     @anime_plus_z = true
  2365.   end  
  2366.   #--------------------------------------------------------------------------
  2367.   # ● カメラワーク
  2368.   #--------------------------------------------------------------------------
  2369.   def camera
  2370.     data = @action_data.dup
  2371.     N03.camera(@battler, data)
  2372.     @wait = data[4] if data[5]
  2373.   end  
  2374.   #--------------------------------------------------------------------------
  2375.   # ● 画面のシェイク
  2376.   #--------------------------------------------------------------------------
  2377.   def shake
  2378.     data = @action_data.dup
  2379.     $sv_camera.shake(data[1], data[2], data[3])
  2380.     @wait = data[3] if data[4]
  2381.   end
  2382.   #--------------------------------------------------------------------------
  2383.   # ● 画面色調変更
  2384.   #--------------------------------------------------------------------------
  2385.   def color_effect
  2386.     case @action_data[1]
  2387.     when 0,1,2,3,4,5
  2388.       targets = N03.get_targets(@action_data[1], @battler)
  2389.     when 6
  2390.       screen = true
  2391.     when 7
  2392.       targets = [@battler] + @target_battler
  2393.     when 8
  2394.       screen = true
  2395.       targets = $game_troop.members + $game_party.battle_members - [@battler]
  2396.     when 9
  2397.       screen = true
  2398.       targets = $game_troop.members + $game_party.battle_members - [@battler] - @target_battler
  2399.     when 10
  2400.       screen = true
  2401.       targets = $game_troop.members + $game_party.battle_members
  2402.     end
  2403.     return if screen == nil && targets == []
  2404.     for target in targets do target.sv.color_set = @action_data[2] end if targets
  2405.     @wait = @action_data[2][4] if @action_data[3]
  2406.     return if !screen
  2407.     $sv_camera.color_set[1] = @action_data[2]
  2408.     $sv_camera.color_set[2] = @action_data[2]
  2409.   end  
  2410.   #--------------------------------------------------------------------------
  2411.   # ● トランジション
  2412.   #--------------------------------------------------------------------------
  2413.   def transition
  2414.     $sv_camera.perform_transition(@action_data)
  2415.   end  
  2416.   #--------------------------------------------------------------------------
  2417.   # ● ふきだしアニメ表示
  2418.   #--------------------------------------------------------------------------
  2419.   def balloon_anime
  2420.     @balloon_data = @action_data.dup
  2421.   end  
  2422.   #--------------------------------------------------------------------------
  2423.   # ● ピクチャ表示
  2424.   #--------------------------------------------------------------------------
  2425.   def picture_set
  2426.     @picture = true
  2427.     set_effect_data
  2428.   end
  2429.   #--------------------------------------------------------------------------
  2430.   # ● ステート操作
  2431.   #--------------------------------------------------------------------------
  2432.   def state_set
  2433.     targets = N03.get_targets(@action_data[1], @battler)
  2434.     return if targets == []
  2435.     case @action_data[2]
  2436.     when 1 ; targets = [targets[rand(targets.size)]]
  2437.     when 2 ; targets -= @battler if targets.include?(@battler)
  2438.     end
  2439.     for target in targets
  2440.       for id in @action_data[4]
  2441.         target.add_state(id) if @action_data[3] == "+"
  2442.         target.remove_state(id) if @action_data[3] == "-"
  2443.       end
  2444.     end
  2445.   end
  2446.   #--------------------------------------------------------------------------
  2447.   # ● FPS変更
  2448.   #--------------------------------------------------------------------------
  2449.   def fps
  2450.     Graphics.frame_rate = @action_data[1]
  2451.     start_action
  2452.   end
  2453.   #--------------------------------------------------------------------------
  2454.   # ● バトラー画像変更の場合
  2455.   #--------------------------------------------------------------------------
  2456.   def graphics_change
  2457.     @graphics_change = true
  2458.     return @battler.graphics_change(@action_data[3]) if !@battler.actor?
  2459.     @pre_change_data = [@battler.character_name, @battler.character_index, @battler.face_name, @battler.face_index] if @pre_change_data == nil && !@action_data[1]
  2460.     if @action_data[4] == []
  2461.       face_name = @battler.face_name
  2462.       face_index = @battler.face_index
  2463.     else
  2464.       face_name = @action_data[4][1]
  2465.       face_index = @action_data[4][0]
  2466.     end
  2467.     @battler.set_graphic(@action_data[3], @action_data[2], face_name, face_index)
  2468.   end
  2469.   #--------------------------------------------------------------------------
  2470.   # ● スキル派生
  2471.   #--------------------------------------------------------------------------
  2472.   def derivating_skill
  2473.     # 未修得スキルは派生不可なら
  2474.     return if !@action_data[1] && !@battler.skill_learn?($data_skills[@action_data[3]])
  2475.     # コスト不足は派生不可なら
  2476.     return if !@action_data[2] && !@battler.skill_cost_payable?($data_skills[@action_data[3]])
  2477.     # 派生
  2478.     @derivation_skill_id = @action_data[3]
  2479.     # 以降のアクションをキャンセル
  2480.     @full_action = []
  2481.   end
  2482.   #--------------------------------------------------------------------------
  2483.   # ● BGM/BGS/SE演奏
  2484.   #--------------------------------------------------------------------------
  2485.   def sound
  2486.     pitch = @action_data[2]
  2487.     vol   = @action_data[3]
  2488.     name  = @action_data[4]
  2489.     case @action_data[1]
  2490.     when "se"
  2491.       Audio.se_play("Audio/SE/" + name, vol, pitch)
  2492.     when "bgm"
  2493.       # 名前指定のない場合、現在のBGMを変えないように
  2494.       name = RPG::BGM.last.name if @action_data[4] == ""
  2495.       Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
  2496.     when "bgs"
  2497.       name = RPG::BGS.last.name if @action_data[4] == ""
  2498.       Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
  2499.     end
  2500.   end
  2501.   #--------------------------------------------------------------------------
  2502.   # ● ムービーの再生
  2503.   #--------------------------------------------------------------------------
  2504.   def movie
  2505.     Graphics.play_movie('Movies/' + @action_data[1])
  2506.   end
  2507.   #--------------------------------------------------------------------------
  2508.   # ● ゲームスイッチ操作
  2509.   #--------------------------------------------------------------------------
  2510.   def switches
  2511.     for id in @action_data[1]
  2512.       $game_switches[id] = true if id > 0
  2513.       $sv_camera.switches[id.abs] = true  if id < 0
  2514.     end
  2515.     for id in @action_data[2]
  2516.       $game_switches[id] = false if id > 0
  2517.       $sv_camera.switches[id.abs] = false  if id < 0
  2518.     end
  2519.     $sv_camera.program_check
  2520.   end
  2521.   #--------------------------------------------------------------------------
  2522.   # ● ゲーム変数操作
  2523.   #--------------------------------------------------------------------------
  2524.   def variable
  2525.     # オペランドチェック
  2526.     operand = @action_data[3]
  2527.     operand = $game_variables[@action_data[3].abs] if @action_data[3] < 0
  2528.     # 変数操作で分岐
  2529.     case @action_data[2]
  2530.     when 0 ; $game_variables[@action_data[1]] = operand  # 代入
  2531.     when 1 ; $game_variables[@action_data[1]] += operand # 加算
  2532.     when 2 ; $game_variables[@action_data[1]] -= operand # 減算
  2533.     when 3 ; $game_variables[@action_data[1]] *= operand # 乗算
  2534.     when 4 ; $game_variables[@action_data[1]] /= operand # 除算
  2535.     when 5 ; $game_variables[@action_data[1]] %= operand # 剰余
  2536.     end
  2537.   end  
  2538.   #--------------------------------------------------------------------------
  2539.   # ● 条件分岐 (ゲームスイッチ)
  2540.   #--------------------------------------------------------------------------
  2541.   def nece_1
  2542.     judgment = $game_switches[@action_data[1]] == @action_data[2] if @action_data[1] > 0
  2543.     judgment = $sv_camera.switches[@action_data[1].abs] == @action_data[2] if @action_data[1] < 0
  2544.     action_diverging(judgment, @action_data[3])
  2545.   end  
  2546.   #--------------------------------------------------------------------------
  2547.   # ● 条件分岐 (ゲーム変数)
  2548.   #--------------------------------------------------------------------------
  2549.   def nece_2
  2550.     variable = $game_variables[@action_data[1]]
  2551.     num = @action_data[2]
  2552.     num = $game_variables[@action_data[2].abs] if num < 0
  2553.     case @action_data[3]
  2554.     when 0 ; judgment = variable == num
  2555.     when 1 ; judgment = variable < num
  2556.     when 2 ; judgment = variable > num
  2557.     end  
  2558.     action_diverging(judgment, @action_data[4])
  2559.   end  
  2560.   #--------------------------------------------------------------------------
  2561.   # ● 条件分岐 (ステート)
  2562.   #--------------------------------------------------------------------------
  2563.   def nece_3
  2564.     targets = N03.get_targets(@action_data[1], @battler)
  2565.     return if targets == []
  2566.     member_num = @action_data[4]
  2567.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  2568.     hit_count = 0
  2569.     miss_count = 0
  2570.     for target in targets
  2571.       hit_count += 1 if target.state?(@action_data[2])
  2572.       miss_count += 1 if !target.state?(@action_data[2])
  2573.     end
  2574.     case @action_data[3]
  2575.     when 0 ; judgment = hit_count >= member_num
  2576.     when 1 ; judgment = miss_count >= member_num
  2577.     end
  2578.     action_diverging(judgment, @action_data[5])
  2579.   end  
  2580.   #--------------------------------------------------------------------------
  2581.   # ● 条件分岐 (スキル)
  2582.   #--------------------------------------------------------------------------
  2583.   def nece_4
  2584.     targets = N03.get_targets(@action_data[1], @battler)
  2585.     return if targets == []
  2586.     member_num = @action_data[4]
  2587.     member_num = targets.size if @action_data[4] == 0 && targets.size > 1
  2588.     hit_count = 0
  2589.     miss_count = 0
  2590.     for target in targets
  2591.       hit_count += 1 if target.skill_learn?($data_skills[@action_data[2]]) && target.skill_conditions_met?($data_skills[@action_data[2]])
  2592.       miss_count += 1 if !target.skill_learn?($data_skills[@action_data[2]]) or !target.skill_conditions_met?($data_skills[@action_data[2]])
  2593.     end
  2594.     case @action_data[3]
  2595.     when 0 ; judgment = hit_count >= member_num
  2596.     when 1 ; judgment = miss_count >= member_num
  2597.     end
  2598.     action_diverging(judgment, @action_data[5])
  2599.   end  
  2600.   #--------------------------------------------------------------------------
  2601.   # ● 条件分岐 (パラメータ)
  2602.   #--------------------------------------------------------------------------
  2603.   def nece_5
  2604.     targets = N03.get_targets(@action_data[1], @battler)
  2605.     return if targets == []
  2606.     member_num = @action_data[5]
  2607.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  2608.     hit_count = 0
  2609.     for target in targets
  2610.       hit_count += 1 if target.comparison_parameter([@action_data[2],@action_data[3],@action_data[4]])
  2611.     end
  2612.     judgment = hit_count >= member_num
  2613.     action_diverging(judgment, @action_data[6])
  2614.   end  
  2615.   #--------------------------------------------------------------------------
  2616.   # ● 条件分岐 (装備)
  2617.   #--------------------------------------------------------------------------
  2618.   def nece_6
  2619.     targets = N03.get_targets(@action_data[1], @battler)
  2620.     return if targets == []
  2621.     member_num = @action_data[5]
  2622.     member_num = targets.size if @action_data[5] == 0 && targets.size > 1
  2623.     hit_count = 0
  2624.     miss_count = 0
  2625.     for target in targets
  2626.       hit_count += 1 if target.comparison_equip([@action_data[2],@action_data[3]])
  2627.       miss_count += 1 if !target.comparison_equip([@action_data[2],@action_data[3]])
  2628.     end
  2629.     case @action_data[4]
  2630.     when 0 ; judgment = hit_count >= member_num
  2631.     when 1 ; judgment = miss_count >= member_num
  2632.     end
  2633.     action_diverging(judgment, @action_data[6])
  2634.   end  
  2635.   #--------------------------------------------------------------------------
  2636.   # ● 条件分岐 (スクリプト)
  2637.   #--------------------------------------------------------------------------
  2638.   def nece_7
  2639.     judgment = eval(@action_data[2])
  2640.     action_diverging(judgment, @action_data[1])
  2641.   end  
  2642.   #--------------------------------------------------------------------------
  2643.   # ● アクション分岐  
  2644.   #--------------------------------------------------------------------------
  2645.   def action_diverging(judgment, kind)
  2646.     result = 0
  2647.     if judgment
  2648.       result = 1 if kind == 1
  2649.       result = 2 if kind == 2
  2650.     else
  2651.       result = 1 if kind == 0
  2652.     end
  2653.     # フルアクション終了
  2654.     return @full_action = []  if result == 2
  2655.     # 次のアクションを除去
  2656.     @full_action.shift if result == 1
  2657.     set_action
  2658.     # 次のアクションを実行
  2659.     @action_data = N03::ACTION[@action]
  2660.     next_action
  2661.   end
  2662.   #--------------------------------------------------------------------------
  2663.   # ● セカンドターゲット操作
  2664.   #--------------------------------------------------------------------------
  2665.   def second_targets_set
  2666.     targets = N03.get_targets(@action_data[1], @battler)
  2667.     for target in targets
  2668.       targets.delete(target) if @action_data[2][1] == 1 && target.index != @action_data[2][0]
  2669.       targets.delete(target) if @action_data[2][1] == 2 && target.index == @action_data[2][0].abs
  2670.       targets.delete(target) if @action_data[3] > 0 && target.id != @action_data[3]
  2671.       targets.delete(target) if @action_data[3] < 0 && target.id == @action_data[3].abs
  2672.       targets.delete(target) if @action_data[4] > 0 && !target.state?(@action_data[4])
  2673.       targets.delete(target) if @action_data[4] < 0 && target.state?(@action_data[4].abs)
  2674.       targets.delete(target) if @action_data[5] > 0 && !target.skill_conditions_met?($data_skills[@action_data[5]])
  2675.       targets.delete(target) if @action_data[5] < 0 && target.skill_conditions_met?($data_skills[@action_data[5].abs])
  2676.       targets.delete(target) if !target.comparison_parameter(@action_data[6])
  2677.       targets.delete(target) if !@action_data[7][1].include?(0) && !target.comparison_equip(@action_data[7])
  2678.     end
  2679.     return @second_targets = [] if targets.size == 0
  2680.     case @action_data[8]
  2681.     when 1 ; targets = [targets[rand(targets.size)]]
  2682.     when 2 ; targets.delete(@battler)
  2683.     end
  2684.     return @second_targets = [] if targets.size == 0
  2685.     @second_targets = targets
  2686.     case @action_data[9]
  2687.     when 0 ; return
  2688.     when 1 ; set_play_data(["second_targets_set"])
  2689.     when 2 ; set_play_data(["targets_set"])
  2690.     end
  2691.     @wait += 1
  2692.   end
  2693.   #--------------------------------------------------------------------------
  2694.   # ● コモンイベント呼び出し
  2695.   #--------------------------------------------------------------------------
  2696.   def call_common_event
  2697.     $game_temp.reserve_common_event(@action_data[1])
  2698.     $sv_camera.event = true
  2699.     @event_fix = @action_data[2]
  2700.   end
  2701.   #--------------------------------------------------------------------------
  2702.   # ● ダメージアニメ
  2703.   #--------------------------------------------------------------------------
  2704.   def damage_anime(delay_time = 12)
  2705.     anime(N03.get_attack_anime_id(-3, @battler), wait = true)
  2706.     action_play
  2707.     @wait -= delay_time
  2708.     @full_action.unshift("eval('@damage_anime_data = []
  2709.     @set_damage = true')")
  2710.   end
  2711.   #--------------------------------------------------------------------------
  2712.   # ● 通常コラプス
  2713.   #--------------------------------------------------------------------------
  2714.   def normal_collapse
  2715.     @collapse = true
  2716.     return
  2717.   end
  2718.   #--------------------------------------------------------------------------
  2719.   # ● 初期位置変更
  2720.   #--------------------------------------------------------------------------
  2721.   def change_base_position
  2722.     @base_x = @x
  2723.     @base_y = @y
  2724.     @base_h = @h
  2725.   end  
  2726.   #--------------------------------------------------------------------------
  2727.   # ● 強制アクション実行
  2728.   #--------------------------------------------------------------------------
  2729.   def force_act
  2730.     target(@full_action.shift)
  2731.   end
  2732.   #--------------------------------------------------------------------------
  2733.   # ● 強制アクション実行 (セカンドターゲット)
  2734.   #--------------------------------------------------------------------------
  2735.   def force_act2
  2736.     target2(@full_action.shift)
  2737.   end
  2738.   #--------------------------------------------------------------------------
  2739.   # ● 個別処理開始
  2740.   #--------------------------------------------------------------------------
  2741.   def individual_start
  2742.     @individual_targets = @target_battler.dup
  2743.     @remain_targets = @target_battler.dup
  2744.     @target_battler = [@individual_targets[0]]
  2745.     # リピート部分のアクションを保持
  2746.     @individual_act = @full_action.dup
  2747.   end
  2748.   #--------------------------------------------------------------------------
  2749.   # ● 個別処理終了
  2750.   #--------------------------------------------------------------------------
  2751.   def individual_end
  2752.     @individual_targets.shift
  2753.     for target in @individual_targets
  2754.       @individual_targets.shift if target.dead?
  2755.     end
  2756.     # ターゲットが残っているなら行動リピート
  2757.     return @target_battler = @remain_targets if @individual_targets.size == 0
  2758.     @full_action = @individual_act.dup
  2759.     @target_battler = [@individual_targets[0]]
  2760.   end
  2761.   #--------------------------------------------------------------------------
  2762.   # ● ループ開始
  2763.   #--------------------------------------------------------------------------
  2764.   def loop_start
  2765.     # ループ部分のアクションを保持
  2766.     @loop_act = @full_action.dup
  2767.   end
  2768.   #--------------------------------------------------------------------------
  2769.   # ● ループ終了
  2770.   #--------------------------------------------------------------------------
  2771.   def loop_end
  2772.     # 行動リピート
  2773.     @full_action = @loop_act.dup if @loop_act != []
  2774.   end
  2775.   #--------------------------------------------------------------------------
  2776.   # ● 次の行動者へ移行
  2777.   #--------------------------------------------------------------------------
  2778.   def next_battler
  2779.     @action_end = true
  2780.     @active = false
  2781.   end
  2782.   #--------------------------------------------------------------------------
  2783.   # ● 画像変更フラグ
  2784.   #--------------------------------------------------------------------------
  2785.   def set_change
  2786.     @change_up = true
  2787.   end
  2788.   #--------------------------------------------------------------------------
  2789.   # ● 戦闘シーン通信
  2790.   #--------------------------------------------------------------------------
  2791.   def play_data
  2792.     data = @play_data
  2793.     @play_data = []
  2794.     return data
  2795.   end
  2796.   #--------------------------------------------------------------------------
  2797.   # ● ショートカットコマンド
  2798.   #--------------------------------------------------------------------------
  2799.   def anime(anime_id, wait = true)
  2800.     @action_data = ["anime",anime_id,1,false,wait,false,true,false]
  2801.   end
  2802.   def anime_me(anime_id, wait = true)
  2803.     @action_data = ["anime",anime_id,0,false,wait,false,true,false]
  2804.   end
  2805.   def se(file, pitch = 100)
  2806.     @action_data = ["sound",  "se", pitch, 100, file]
  2807.   end
  2808.   def target(act)
  2809.     for target in @target_battler do target.sv.force_action = act end
  2810.   end
  2811.   def target2(act)
  2812.     for target in @second_targets do target.sv.force_action = act end
  2813.   end
  2814.   def delay(time)
  2815.     @wait = @battler.index * time
  2816.   end
  2817.   #--------------------------------------------------------------------------
  2818.   # ● バトラーのIDを取得
  2819.   #--------------------------------------------------------------------------
  2820.   def id
  2821.     return @battler.id if @battler.actor?
  2822.     return [email]-@battler.id[/email]
  2823.   end
  2824.   #--------------------------------------------------------------------------
  2825.   # ● 被クリティカルフラグを取得
  2826.   #--------------------------------------------------------------------------
  2827.   def critical?
  2828.     return @battler.result.critical
  2829.   end
  2830.   #--------------------------------------------------------------------------
  2831.   # ● 被回復フラグを取得
  2832.   #--------------------------------------------------------------------------
  2833.   def recovery?
  2834.     recovery = false
  2835.     recovery = true if @battler.result.hp_damage < 0
  2836.     recovery = true if @battler.result.mp_damage < 0
  2837.     recovery = true if @battler.result.tp_damage < 0
  2838.     return recovery
  2839.   end
  2840.   #--------------------------------------------------------------------------
  2841.   # ● 被スキルIDを取得
  2842.   #--------------------------------------------------------------------------
  2843.   def damage_skill_id
  2844.     return @damage_skill_id
  2845.   end
  2846.   #--------------------------------------------------------------------------
  2847.   # ● 被アイテムIDを取得
  2848.   #--------------------------------------------------------------------------
  2849.   def damage_item_id
  2850.     return @damage_item_id
  2851.   end
  2852.   #--------------------------------------------------------------------------
  2853.   # ● 装備武器を取得
  2854.   #--------------------------------------------------------------------------
  2855.   def weapon_id
  2856.     return 0 if !@battler.weapons[0]
  2857.     return @battler.weapons[0].id
  2858.   end
  2859.   #--------------------------------------------------------------------------
  2860.   # ● 装備武器のタイプを取得
  2861.   #--------------------------------------------------------------------------
  2862.   def weapon_type
  2863.     return 0 if !@battler.weapons[0]
  2864.     return @battler.weapons[0].wtype_id
  2865.   end
  2866.   #--------------------------------------------------------------------------
  2867.   # ● 盾を装備しているか
  2868.   #--------------------------------------------------------------------------
  2869.   def shield?
  2870.     for armor in @battler.armors do return true if armor != nil && armor.etype_id == 1 end
  2871.     return false
  2872.   end
  2873.   #--------------------------------------------------------------------------
  2874.   # ● ダメージがあるか
  2875.   #--------------------------------------------------------------------------
  2876.   def damage_zero?
  2877.     return @battler.result.hp_damage == 0 && @battler.result.mp_damage == 0 && @battler.result.tp_damage == 0
  2878.   end
  2879.   #--------------------------------------------------------------------------
  2880.   # ● スキルIDを取得
  2881.   #--------------------------------------------------------------------------
  2882.   def skill_id
  2883.     return @counter_id if @counter_id != 0
  2884.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  2885.     return 0 if @battler.current_action.item.is_a?(RPG::Item)
  2886.     return @battler.current_action.item.id
  2887.   end
  2888.   #--------------------------------------------------------------------------
  2889.   # ● スキルのタイプを取得
  2890.   #--------------------------------------------------------------------------
  2891.   def skill_type
  2892.     return 0 if skill_id == 0
  2893.     return $data_skills[skill_id].stype_id
  2894.   end
  2895.   #--------------------------------------------------------------------------
  2896.   # ● スキル名を取得
  2897.   #--------------------------------------------------------------------------
  2898.   def skill_name
  2899.     return "" if skill_id == 0
  2900.     return $data_skills[skill_id].name
  2901.   end
  2902.   #--------------------------------------------------------------------------
  2903.   # ● アイテムIDを取得
  2904.   #--------------------------------------------------------------------------
  2905.   def item_id
  2906.     return 0 if @battler.current_action == nil or @battler.current_action.item == nil
  2907.     return @battler.current_action.item.id
  2908.   end
  2909.   #--------------------------------------------------------------------------
  2910.   # ● 攻撃アクション
  2911.   #--------------------------------------------------------------------------
  2912.   def attack_action(item)
  2913.     return skill_action if item.is_a?(RPG::Skill)
  2914.     return item_action
  2915.   end
  2916.   #--------------------------------------------------------------------------
  2917.   # ● ダメージアクションベース
  2918.   #--------------------------------------------------------------------------
  2919.   def damage_action_base(item)
  2920.     @damage_skill_id = 0
  2921.     @damage_item_id = 0
  2922.     @damage_skill_id = item.id if item.is_a?(RPG::Skill)
  2923.     @damage_item_id = item.id if item.is_a?(RPG::Item)
  2924.   end  
  2925.   #--------------------------------------------------------------------------
  2926.   # ● ダメージアクション
  2927.   #--------------------------------------------------------------------------
  2928.   def damage_action(attacker, item)
  2929.     damage_action_base(item)
  2930.     act = damage(attacker)
  2931.     return if @active
  2932.     start_action(act) if act != nil
  2933.   end
  2934.   #--------------------------------------------------------------------------
  2935.   # ● 回避アクション
  2936.   #--------------------------------------------------------------------------
  2937.   def evasion_action(attacker, item)
  2938.     damage_action_base(item)
  2939.     act = evasion(attacker)
  2940.     return if @active
  2941.     start_action(act) if act != nil
  2942.   end
  2943.   #--------------------------------------------------------------------------
  2944.   # ● ミスアクション
  2945.   #--------------------------------------------------------------------------
  2946.   def miss_action(attacker, item)
  2947.     damage_action_base(item)
  2948.     act = miss(attacker)
  2949.     return if @active
  2950.     start_action(act) if act != nil
  2951.   end
  2952.   #--------------------------------------------------------------------------
  2953.   # ● 閃きスクリプト併用処理
  2954.   #--------------------------------------------------------------------------
  2955.   def flash_action
  2956.     return "閃き"
  2957.   end
  2958.  
  2959. end
  2960.  
  2961.  
  2962. #==============================================================================
  2963. # ■ module N03
  2964. #------------------------------------------------------------------------------
  2965. #  サイドビューバトルのモジュールです。
  2966. #==============================================================================
  2967. module N03
  2968.   #--------------------------------------------------------------------------
  2969.   # ● バトラーの敵グループを取得
  2970.   #--------------------------------------------------------------------------
  2971.   def self.get_enemy_unit(battler)
  2972.     return $game_troop if battler.actor?
  2973.     return $game_party
  2974.   end
  2975.   #--------------------------------------------------------------------------
  2976.   # ● バトラーの味方グループを取得
  2977.   #--------------------------------------------------------------------------
  2978.   def self.get_party_unit(battler)
  2979.     return $game_party if battler.actor?
  2980.     return $game_troop
  2981.   end
  2982.   #--------------------------------------------------------------------------
  2983.   # ● 戦闘アニメ時間の取得
  2984.   #--------------------------------------------------------------------------
  2985.   def self.get_anime_time(anime_id)
  2986.     return 0 if anime_id <= 0
  2987.     return $data_animations[anime_id].frame_max * 4
  2988.   end
  2989.   #--------------------------------------------------------------------------
  2990.   # ● 攻撃アニメの取得
  2991.   #--------------------------------------------------------------------------
  2992.   def self.get_attack_anime_id(kind, battler)
  2993.     return $data_skills[battler.sv.counter_id].animation_id if kind == -3 && battler.sv.counter_id != 0
  2994.     case kind
  2995.     when -1 ; anime_id = battler.atk_animation_id1
  2996.     when -2 ; anime_id = battler.atk_animation_id2
  2997.     when -3
  2998.       if battler.current_action != nil
  2999.         anime_id = battler.current_action.item.animation_id if battler.current_action.item != nil
  3000.       end
  3001.     else    ; anime_id = kind
  3002.     end
  3003.     case anime_id
  3004.     when -1 ; anime_id = battler.atk_animation_id1
  3005.     when -2 ; anime_id = battler.atk_animation_id2
  3006.     end
  3007.     return anime_id if anime_id
  3008.     return 0
  3009.   end  
  3010.   #--------------------------------------------------------------------------
  3011.   # ● 戦闘アニメデータをセット
  3012.   #--------------------------------------------------------------------------
  3013.   def self.set_damage_anime_data(targets, target, data)
  3014.     return if !first_of_all_screen_anime(data[0], target, targets)
  3015.     target.animation_id         = data[0]
  3016.     target.animation_mirror     = data[1]
  3017.     target.sv.anime_no_mirror   = data[2]
  3018.     target.sv.anime_camera_zoom = data[3]
  3019.     target.sv.anime_plus_z      = data[4]
  3020.   end   
  3021.   #--------------------------------------------------------------------------
  3022.   # ● ターゲットの取得
  3023.   #--------------------------------------------------------------------------
  3024.   def self.get_targets(kind, battler)
  3025.     case kind.abs
  3026.     when 0 ; return [battler].dup
  3027.     when 1 ; return battler.sv.target_battler.dup
  3028.     when 2 ; return get_enemy_unit(battler).members.dup
  3029.     when 3 ; return get_party_unit(battler).members.dup
  3030.     when 4 ; return $game_troop.members.dup + $game_party.battle_members.dup
  3031.     when 5 ; return battler.sv.second_targets.dup
  3032.     end
  3033.   end  
  3034.   #--------------------------------------------------------------------------
  3035.   # ● ターゲットの座標を取得
  3036.   #--------------------------------------------------------------------------
  3037.   def self.get_targets_position(targets, horming, m_a = nil)
  3038.     return [0,0,0] if targets == nil && !$sv_camera.mirror
  3039.     return [Graphics.width,0,0] if targets == nil && $sv_camera.mirror
  3040.     x = y = h = 0
  3041.     for i in 0...targets.size
  3042.       x += targets[i].sv.base_x if !horming
  3043.       y += targets[i].sv.base_y if !horming
  3044.       h += targets[i].sv.base_h if !horming
  3045.       x += targets[i].sv.x if horming
  3046.       y += targets[i].sv.y if horming
  3047.       h += targets[i].sv.h if horming
  3048.       y -= targets[i].sv.ch * 100 if m_a == 0
  3049.       y -= targets[i].sv.ch * 50 if m_a == 1
  3050.     end
  3051.     return [x / targets.size, y / targets.size, h / targets.size]
  3052.   end
  3053.   #--------------------------------------------------------------------------
  3054.   # ● 速度を時間に変換
  3055.   #--------------------------------------------------------------------------
  3056.   def self.distanse_calculation(time, target_position, self_position, distanse_move)
  3057.     return time if !distanse_move
  3058.     distanse_x = self_position[0] - target_position[0]
  3059.     distanse_x = target_position[0] - self_position[0] if target_position[0] > self_position[0]
  3060.     distanse_y = self_position[1] - target_position[1]
  3061.     distanse_y = target_position[1] - self_position[1] if target_position[1] > self_position[1]
  3062.     if self_position[2] != nil && target_position[2] != nil
  3063.       distanse_h = self_position[2] - target_position[2]
  3064.       distanse_h = target_position[2] - self_position[2] if target_position[2] > self_position[2]
  3065.     else
  3066.       distanse_h = 0
  3067.     end
  3068.     distanse = [distanse_x, distanse_y, distanse_h].max
  3069.     return distanse / (time * 100) + 1
  3070.   end
  3071.   #--------------------------------------------------------------------------
  3072.   # ● 放物線移動計算
  3073.   #--------------------------------------------------------------------------
  3074.   def self.parabola(data, time, size, type = 1)
  3075.     move_data = data
  3076.     move_data[0] *= size
  3077.     move_data[1] *= size
  3078.     move = []
  3079.     move_d = []
  3080.     for i in 0...time / 2
  3081.       move[i] = move_data[0]
  3082.       move_d[i] = move_data[1]
  3083.       move_data[0] = move_data[0] * type / (1 + type)
  3084.       move_data[1] = move_data[1] * type / (1 + type)
  3085.     end
  3086.     move = move + move_d.reverse!
  3087.     move.reverse!
  3088.     adjust = move.inject(0) {|result, item| result + item }
  3089.     move[move.size - 1] += adjust if data[0] == data[1] && adjust != 0
  3090.     move.unshift(0) if time % 2 != 0
  3091.     return move
  3092.   end
  3093.   #--------------------------------------------------------------------------
  3094.   # ● 反転値
  3095.   #--------------------------------------------------------------------------
  3096.   def self.mirror_num(mirror)
  3097.     return 1 if !mirror
  3098.     return -1
  3099.   end  
  3100.   #--------------------------------------------------------------------------
  3101.   # ● カメラワーク
  3102.   #--------------------------------------------------------------------------
  3103.   def self.camera(battler, data)
  3104.     battler = $game_party.battle_members[0] if !battler
  3105.     cx = data[2][0] * 100
  3106.     cy = data[2][1] * 100
  3107.     return $sv_camera.move(cx, cy, data[3], data[4], true) if data[1] == 6
  3108.     targets = self.get_targets(data[1], battler)
  3109.     return if targets == nil or targets == []
  3110.     position = self.get_targets_position(targets, true)
  3111.     $sv_camera.move(position[0], position[1] - position[2], data[3], data[4], false)
  3112.   end
  3113.   #--------------------------------------------------------------------------
  3114.   # ● コラプス禁止
  3115.   #--------------------------------------------------------------------------
  3116.   def self.immortaling
  3117.     # 全員に不死身付与
  3118.     for member in $game_party.battle_members + $game_troop.members
  3119.       # イベント操作等で不死身設定になっていたら解除を無効にするフラグを立てる
  3120.       member.sv.immortal = true if member.state?(N03::IMMORTAL_ID)
  3121.       member.add_state(N03::IMMORTAL_ID)
  3122.     end
  3123.     return true
  3124.   end  
  3125.   #--------------------------------------------------------------------------
  3126.   # ● コラプス許可
  3127.   #--------------------------------------------------------------------------
  3128.   def self.unimmortaling
  3129.     # 全員の不死身化解除(イベント等で不死身設定がされていれば除く)
  3130.     for member in $game_party.battle_members + $game_troop.members
  3131.       next if member.dead?
  3132.       # 不死身ステートが行動中に解除されていた場合、解除無効を解除
  3133.       member.sv.immortal = false if !member.state?(N03::IMMORTAL_ID) && member.sv.immortal
  3134.       next member.sv.immortal = false if member.sv.immortal
  3135.       member.remove_state(N03::IMMORTAL_ID)
  3136.       next if member.hp != 0
  3137.       member.add_state(1)
  3138.       member.perform_collapse_effect
  3139.       member.sv.action_terminate
  3140.     end
  3141.     return false
  3142.   end  
  3143.   #--------------------------------------------------------------------------
  3144.   # ● スキル派生
  3145.   #--------------------------------------------------------------------------
  3146.   def self.derived_skill(battler)
  3147.     battler.force_action(battler.sv.derivation_skill_id, -2)
  3148.     BattleManager.unshift_action_battlers(battler)
  3149.   end
  3150.   #--------------------------------------------------------------------------
  3151.   # ● ダメージの作成
  3152.   #--------------------------------------------------------------------------
  3153.   def self.set_damage(battler, hp_damage, mp_damage)
  3154.     battler.result.hp_damage = hp_damage
  3155.     battler.result.mp_damage = mp_damage
  3156.   end
  3157.   #--------------------------------------------------------------------------
  3158.   # ● ターゲット生死確認
  3159.   #--------------------------------------------------------------------------
  3160.   def self.targets_alive?(targets)
  3161.     return false if targets == []
  3162.     for target in targets do return true if !target.dead? end
  3163.     return false
  3164.   end
  3165.   #--------------------------------------------------------------------------
  3166.   # ● ターゲットをセカンドターゲットへ
  3167.   #--------------------------------------------------------------------------
  3168.   def self.s_targets(battler)
  3169.     battler.sv.target_battler = battler.sv.second_targets
  3170.     return battler.sv.second_targets
  3171.   end  
  3172.   #--------------------------------------------------------------------------
  3173.   # ● セカンドターゲットをターゲットへ
  3174.   #--------------------------------------------------------------------------
  3175.   def self.targets_set(battler)
  3176.     battler.sv.second_targets = battler.current_action.make_targets.compact
  3177.     battler.sv.target_battler = battler.sv.second_targets
  3178.   end  
  3179.   #--------------------------------------------------------------------------
  3180.   # ● 戦闘アニメ実行判定 (対象:画面時は最初のターゲットのみアニメ実行)
  3181.   #--------------------------------------------------------------------------
  3182.   def self.first_of_all_screen_anime(anime_id, target, targets)
  3183.     anime = $data_animations[anime_id]
  3184.     return false if !anime
  3185.     return true if anime.position != 3
  3186.     return false if anime.position == 3 && target != targets[0]
  3187.     targets.delete(target)
  3188.     target.sv.timing_targets = targets
  3189.     return true
  3190.   end
  3191.   #--------------------------------------------------------------------------
  3192.   # ● 戦闘不能付加攻撃か
  3193.   #--------------------------------------------------------------------------
  3194.   def self.dead_attack?(battler, item)
  3195.     for state in battler.atk_states
  3196.       return true if state == battler.death_state_id
  3197.     end
  3198.     for effect in item.effects
  3199.       return true if effect.code == 21 && effect.data_id == battler.death_state_id
  3200.     end
  3201.     return false
  3202.   end  
  3203.  
  3204. end
  3205.  
  3206. #==============================================================================
  3207. # ■ Sprite_Weapon
  3208. #------------------------------------------------------------------------------
  3209. #  ウエポン表示用のスプライトです。
  3210. #==============================================================================
  3211. class Sprite_Weapon < Sprite_Base
  3212.   #--------------------------------------------------------------------------
  3213.   # ● 公開インスタンス変数 
  3214.   #--------------------------------------------------------------------------
  3215.   attr_reader   :index                       # ウエポン画像配列のインデックス
  3216.   attr_reader   :battler                     # 画像が参照しているバトラー
  3217.   attr_reader   :move_time                   # 画像が目標に到達するまでの時間
  3218.   attr_reader   :through                     # 貫通フラグ
  3219.   attr_reader   :action_end                  # 武器アクション終了フラグ
  3220.   attr_reader   :action_end_cancel                  # 武器アクション終了フラグ
  3221.   attr_reader   :hit_position                # 画像が目標に到達した時の座標
  3222.   attr_accessor :hit_anime_id                # 画像が目標に到達した時のアニメID
  3223.   #--------------------------------------------------------------------------
  3224.   # ● オブジェクト初期化
  3225.   #--------------------------------------------------------------------------
  3226.   def initialize(viewport, index, battler)
  3227.     super(viewport)
  3228.     @index = index
  3229.     @battler = battler
  3230.     @position_x = @position_y = 0
  3231.     @o = 0
  3232.     @real_x = @real_y = 0
  3233.     @mirror = @battler.sv.mirror
  3234.     reset
  3235.     set_action
  3236.   end
  3237.   #--------------------------------------------------------------------------
  3238.   # ● 初期化
  3239.   #--------------------------------------------------------------------------
  3240.   def reset
  3241.     @z_plus = 0
  3242.     @weapon_data = []
  3243.     @move_data = []
  3244.     @move_x = 0
  3245.     @move_y = 0
  3246.     @orbit = []
  3247.     @through = false
  3248.     @distanse_move = false
  3249.     @weapon_width = 0
  3250.     @weapon_height = 0
  3251.     @anime_time = 0
  3252.     @anime_position = 1
  3253.     @move_time = 0
  3254.     @hit_anime_id = 0
  3255.     @move_anime = true
  3256.     @action_end = false
  3257.     @action_end_cancel = false
  3258.     reset_position
  3259.   end  
  3260.   #--------------------------------------------------------------------------
  3261.   # ● アクションをセット
  3262.   #--------------------------------------------------------------------------
  3263.   def set_action
  3264.     return if @battler.sv.effect_data == []
  3265.     weapon_anime if @battler.sv.effect_data[0][0] == "wp"
  3266.     move_anime if @battler.sv.effect_data[0][0] == "m_a"
  3267.     @battler.sv.effect_data.shift
  3268.   end
  3269.   #--------------------------------------------------------------------------
  3270.   # ● 武器アニメ実行
  3271.   #--------------------------------------------------------------------------
  3272.   def weapon_anime
  3273.     @weapon_data = @battler.sv.effect_data[0].dup
  3274.     set_graphics
  3275.     set_ox
  3276.     set_weapon_move
  3277.   end
  3278.   #--------------------------------------------------------------------------
  3279.   # ● アニメ移動実行
  3280.   #--------------------------------------------------------------------------
  3281.   def move_anime
  3282.     @move_data = @battler.sv.effect_data[0].dup
  3283.     # ターゲットを取得
  3284.     @target_battler = [@battler.sv.m_a_targets.shift]
  3285.     @target_battler = N03.get_targets(@move_data[3], @battler) if @move_data[3] < 0
  3286.     set_move
  3287.     return if @move_data[16] == ""
  3288.     weapon_data = N03::ACTION[@move_data[16]]
  3289.     return if weapon_data == nil
  3290.     @weapon_data = weapon_data.dup
  3291.     set_graphics
  3292.     set_ox
  3293.     set_weapon_move
  3294.   end
  3295.   #--------------------------------------------------------------------------
  3296.   # ● 武器画像を取得
  3297.   #--------------------------------------------------------------------------  
  3298.   def set_graphics
  3299.     # 武器に依存しない画像設定がある場合
  3300.     if @weapon_data[13] != ""
  3301.       self.bitmap = Cache.character(@weapon_data[13]).dup
  3302.       @weapon_width = self.bitmap.width
  3303.       @weapon_height = self.bitmap.height
  3304.       return
  3305.     end
  3306.     # 武器を取得
  3307.     weapon = @battler.weapons[0]
  3308.     # 逆手装備を取得
  3309.     if @weapon_data[10]
  3310.       weapon = nil
  3311.       for armor in @battler.armors do break weapon = armor if armor.is_a?(RPG::Armor) && armor.etype_id == 1 end
  3312.       weapon = @battler.weapons[1] if !weapon
  3313.     end  
  3314.     # 武器がなければ処理をキャンセル
  3315.     return if weapon == nil
  3316.     # インデックスを取得
  3317.     file_index = @weapon_data[12]
  3318.     # アイコンを利用するなら
  3319.     if @weapon_data[1] == 0
  3320.       icon_index = weapon.icon_index
  3321.       self.bitmap = Cache.system("Iconset" + file_index).dup
  3322.       self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  3323.       @weapon_width = @weapon_height = 24
  3324.     # 独自画像指定
  3325.     else
  3326.       file_name = @battler.sv.weapon_graphic(weapon.id, weapon.wtype_id) if weapon.is_a?(RPG::Weapon)
  3327.       file_name = @battler.sv.shield_graphic(weapon.id, weapon.atype_id) if weapon.is_a?(RPG::Armor)
  3328.       self.bitmap = Cache.character(file_name + file_index).dup
  3329.       @weapon_width = self.bitmap.width
  3330.       @weapon_height = self.bitmap.height
  3331.       return if @weapon_data[1] == 1
  3332.       # 2003仕様の武器アニメ
  3333.       @weapon_width /= @battler.sv.max_pattern[0]
  3334.     end
  3335.   end
  3336.   #--------------------------------------------------------------------------
  3337.   # ● 画像の原点を取得
  3338.   #--------------------------------------------------------------------------  
  3339.   def set_ox
  3340.     # 反転時は設定を逆に
  3341.     if @mirror
  3342.       case @weapon_data[6]
  3343.       when 1 ; @weapon_data[6] = 2 # 左上→右上に
  3344.       when 2 ; @weapon_data[6] = 1 # 右上→左上に
  3345.       when 3 ; @weapon_data[6] = 4 # 左下→右下に
  3346.       when 4 ; @weapon_data[6] = 3 # 右下→左下に
  3347.       end
  3348.     end
  3349.     # 原点を設定
  3350.     case @weapon_data[6]
  3351.     when 0 # 中心
  3352.       self.ox = @weapon_width / 2
  3353.       self.oy = @weapon_height / 2
  3354.     when 1 # 左上
  3355.       self.ox = 0
  3356.       self.oy = 0
  3357.     when 2 # 右上
  3358.       self.ox = @weapon_width
  3359.       self.oy = 0
  3360.     when 3 # 左下
  3361.       self.ox = 0
  3362.       self.oy = @weapon_height
  3363.     when 4 # 右下
  3364.       self.ox = @weapon_width
  3365.       self.oy = @weapon_height
  3366.     when 5 # バトラーと同じ
  3367.       self.ox = @weapon_width / 2
  3368.       self.oy = @weapon_height
  3369.     end
  3370.   end  
  3371.   #--------------------------------------------------------------------------
  3372.   # ● バトラーの座標を取得
  3373.   #--------------------------------------------------------------------------  
  3374.   def set_battler_position
  3375.     @position_x = @battler.sv.x + @weapon_data[3][0] * N03.mirror_num(@mirror) * 100
  3376.     @position_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust) + @weapon_data[3][1] * 100
  3377.     reset_position
  3378.   end
  3379.   #--------------------------------------------------------------------------
  3380.   # ● 座標を初期化
  3381.   #--------------------------------------------------------------------------  
  3382.   def reset_position
  3383.     @real_x = @position_x / 100
  3384.     @real_y = @position_y / 100
  3385.     @real_zoom_x = 1
  3386.     @real_zoom_y = 1
  3387.   end
  3388.   #--------------------------------------------------------------------------
  3389.   # ● 戦闘アニメを表示
  3390.   #--------------------------------------------------------------------------  
  3391.   def set_animation(anime_id)
  3392.     return if $data_animations[anime_id] == nil
  3393.     @anime_position = $data_animations[anime_id].position
  3394.     @horming = true
  3395.     @horming = false if @anime_position == 3
  3396.     @anime_camera_zoom = true
  3397.     @anime_no_mirror = false
  3398.     start_animation($data_animations[anime_id], @mirror)
  3399.     timings = $data_animations[anime_id].timings
  3400.   end
  3401.   #--------------------------------------------------------------------------
  3402.   # ● ヒット時の戦闘アニメ実行
  3403.   #--------------------------------------------------------------------------  
  3404.   def set_hit_animation(position_data, hit_anime_id, target)
  3405.     return if $data_animations[hit_anime_id] == nil
  3406.     @real_x = position_data[0]
  3407.     @real_y = position_data[1]
  3408.     @position_x = position_data[0] * 100
  3409.     @position_y = position_data[1] * 100
  3410.     self.z = position_data[2]
  3411.     @z_plus = 1000
  3412.     @action_end = false
  3413.     @horming = true
  3414.     set_animation(hit_anime_id)
  3415.     @anime_time = $data_animations[hit_anime_id].frame_max * 4
  3416.     @timing_targets = [target]
  3417.     @move_time = @hit_anime_id = 0
  3418.     @weapon_data = []
  3419.   end
  3420.   #--------------------------------------------------------------------------
  3421.   # ● タイミングバトラー追加
  3422.   #--------------------------------------------------------------------------  
  3423.   def timing_battler_set(target)
  3424.     @timing_targets.push(target)
  3425.   end
  3426.   #--------------------------------------------------------------------------
  3427.   # ● 武器の動きを取得
  3428.   #--------------------------------------------------------------------------  
  3429.   def set_weapon_move
  3430.     # 開始位置を取得
  3431.     set_battler_position if @move_time == 0
  3432.     @z_plus = 50 if @z_plus == 0 && @weapon_data[9]
  3433.     self.z = @battler.sv.z + @z_plus
  3434.     # 反転処理
  3435.     @mirror = !@mirror if @weapon_data[7]
  3436.     self.mirror = @mirror
  3437.     # 更新パターンをセット
  3438.     set_pattern
  3439.     @max_pattern = 2 if @max_pattern == 1
  3440.     # 動きを計算
  3441.     @weapon_move_data = []
  3442.     @weapon_angle_data = []
  3443.     @weapon_zoom_data = []
  3444.     num = N03.mirror_num(@mirror)
  3445.     for i in 0...@max_pattern
  3446.       move_data_x = @weapon_data[2][0] * num * 100 * i / (@max_pattern - 1)
  3447.       move_data_y = @weapon_data[2][1] * 100 * i / (@max_pattern - 1)
  3448.       move_angle = @weapon_data[4] * num + (@weapon_data[5] * num - @weapon_data[4] * num) * i / (@max_pattern - 1)
  3449.       move_zoom_x = 1 + (@weapon_data[8][0] - 1) * i / (@max_pattern - 1)
  3450.       move_zoom_y = 1 + (@weapon_data[8][1] - 1) * i / (@max_pattern - 1)
  3451.       @weapon_move_data.push([move_data_x, move_data_y])
  3452.       @weapon_angle_data.push(move_angle)
  3453.       @weapon_zoom_data.push([move_zoom_x, move_zoom_y])
  3454.     end
  3455.   end  
  3456.   #--------------------------------------------------------------------------
  3457.   # ● 更新パターン
  3458.   #--------------------------------------------------------------------------
  3459.   def set_pattern
  3460.     if @weapon_data[11] == -1
  3461.       return @max_pattern = @battler.sv.max_pattern[0] if @battler.sv.pattern_type != 0
  3462.       @count = @battler.sv.pattern_time
  3463.       @max_count = @battler.sv.pattern_time
  3464.       @max_pattern = @battler.sv.max_pattern[0]
  3465.       @repeat = false
  3466.     else
  3467.       @count = @weapon_data[11][0]
  3468.       @max_count = @weapon_data[11][0]
  3469.       @max_pattern = @weapon_data[11][1]
  3470.       @repeat = @weapon_data[11][2]
  3471.     end
  3472.     @pattern = 0
  3473.   end
  3474.   #--------------------------------------------------------------------------
  3475.   # ● 移動実行
  3476.   #--------------------------------------------------------------------------
  3477.   def set_move
  3478.     # 戦闘アニメを取得
  3479.     set_animation(@move_data[1][0]) if $data_animations[@move_data[1][0]] != nil && $data_animations[@move_data[1][0]].position != 3
  3480.     @anime_camera_zoom = @move_data[13]
  3481.     @loop = @move_data[14]
  3482.     @loop = false if @move_data[1][0] == 0
  3483.     @anime_no_mirror = @move_data[15]
  3484.     @se_flag = @move_data[17]
  3485.     # 開始位置を取得
  3486.     start_position
  3487.     @z_plus = 1000 if @move_data[9]
  3488.     # ターゲットバトラー画像にこのアニメのSEとタイミング設定を反映させる
  3489.     @timing_targets = @target_battler
  3490.     # 座標計算
  3491.     @move_x = @move_data[5][0] * 100 * N03.mirror_num(@mirror)
  3492.     @move_y = @move_data[5][1] * 100
  3493.     # 時間計算か速度計算か
  3494.     @distanse_move = true if @move_data[6] > 0
  3495.     @move_time = @move_data[6].abs
  3496.     # 時間0の場合、アニメが設定されていればアニメ表示時間に合わせる
  3497.     if @move_time == 0
  3498.       @move_time = $data_animations[@move_data[1][0]].frame_max * 4 if $data_animations[@move_data[1][0]]
  3499.       @move_time = 1 if !$data_animations[@move_data[1][0]]
  3500.       @distanse_move = false
  3501.     end
  3502.     # 貫通タイプの場合
  3503.     @through = true if @move_data[7] == 1
  3504.     @auto_through_flag = false
  3505.     @auto_through_flag = true if @move_data[7] == 0
  3506.     # ターゲット座標計算
  3507.     if @target_battler == nil
  3508.       @target_x = @move_x * 100
  3509.       @target_x = (Graphics.width - @move_x) * 100 if @mirror
  3510.       @target_y = @move_y * 100
  3511.     else
  3512.       move_data_set
  3513.     end
  3514.     # ターゲットに到達するまでの時間を計算
  3515.     @move_time = distanse_calculation(@move_time, @target_x, @target_y)
  3516.     # 円軌道計算
  3517.     orbit
  3518.     # バトラーのウエイト設定
  3519.     @battler.sv.wait = @move_time - 1 if @move_data[10][0]
  3520.     @move_horming = @move_data[12]
  3521.   end  
  3522.   #--------------------------------------------------------------------------
  3523.   # ● 速度を時間に変換
  3524.   #--------------------------------------------------------------------------
  3525.   def distanse_calculation(time, target_x, target_y)
  3526.     return time if !@distanse_move
  3527.     distanse_x = @position_x - @target_x
  3528.     distanse_x = @target_x - @position_x if @target_x > @position_x
  3529.     distanse_y = @position_y - @target_y
  3530.     distanse_y = @target_y - @position_y if @target_y > @position_y
  3531.     distanse = [distanse_x, distanse_y].max
  3532.     return distanse / (time * 100) + 1
  3533.   end
  3534.   #--------------------------------------------------------------------------
  3535.   # ● 移動目標の更新
  3536.   #--------------------------------------------------------------------------
  3537.   def move_data_set
  3538.     return if @target_battler == nil
  3539.     position = N03.get_targets_position(@target_battler, true, @anime_position)
  3540.     @target_x = position[0] + @move_x
  3541.     @target_y = position[1] - position[2] + @move_y
  3542.   end
  3543.   #--------------------------------------------------------------------------
  3544.   # ● 開始位置を計算
  3545.   #--------------------------------------------------------------------------
  3546.   def start_position
  3547.     starter = [@battler.sv.m_a_starter.shift]
  3548.     starter = N03.get_targets(@move_data[2], @battler) if @move_data[2] < 0
  3549.     position = [0, 0]
  3550.     position = N03.get_targets_position(starter, true, @anime_position) if starter != nil
  3551.     @position_x = position[0] + @move_data[4][0] * 100
  3552.     @position_y = position[1] + position[2] + @move_data[4][1] * 100
  3553.     @position_z = @position_y
  3554.   end  
  3555.   #--------------------------------------------------------------------------
  3556.   # ● 円軌道計算
  3557.   #--------------------------------------------------------------------------
  3558.   def orbit
  3559.     orbit_data = @move_data[8].dup
  3560.     orbit_data[0] *= 100
  3561.     orbit_data[1] *= 100
  3562.     orbit_d = []
  3563.     for i in 0...@move_time / 2
  3564.       @orbit[i] = orbit_data[0]
  3565.       orbit_data[0] /= 2
  3566.       orbit_d[i] = orbit_data[1]
  3567.       orbit_data[1] /= 2
  3568.     end
  3569.     @orbit = @orbit + orbit_d.reverse!
  3570.     @orbit.reverse!
  3571.   end  
  3572.   #--------------------------------------------------------------------------
  3573.   # ● フレーム更新
  3574.   #--------------------------------------------------------------------------
  3575.   def update
  3576.     update_hit_anime if @anime_time != 0
  3577.     update_move if @move_time != 0
  3578.     update_weapon_move if @weapon_data != []
  3579.     update_position
  3580.     update_color
  3581.     self.visible = @battler.sv.weapon_visible
  3582.     super
  3583.   end
  3584.   #--------------------------------------------------------------------------
  3585.   # ● ヒット時の戦闘アニメ
  3586.   #--------------------------------------------------------------------------
  3587.   def update_hit_anime
  3588.     @anime_time -= 1
  3589.     @action_end = true if @anime_time == 0
  3590.   end
  3591.   #--------------------------------------------------------------------------
  3592.   # ● 移動の更新
  3593.   #--------------------------------------------------------------------------
  3594.   def update_move
  3595.     move_data_set if @move_horming && !@hit_position
  3596.     through_set(@move_time, @target_x, @target_y) if @move_time == 1 && !@hit_position
  3597.     @o += @orbit[@move_time - 1] if @orbit[@move_time - 1] != nil
  3598.     @position_x = (@position_x * (@move_time - 1) + @target_x) / @move_time
  3599.     @position_y = (@position_y * (@move_time - 1) + @target_y) / @move_time + @o
  3600.     reset_position
  3601.     set_animation(@move_data[1][0]) if @loop && !animation?
  3602.     @move_time -= 1
  3603.     return if @move_time != 0
  3604.     @action_end = true if !@action_end_cancel
  3605.   end
  3606.   #--------------------------------------------------------------------------
  3607.   # ● 武器の動きを更新
  3608.   #--------------------------------------------------------------------------
  3609.   def update_weapon_move
  3610.     pattern = update_pattern
  3611.     set_battler_position if @move_time == 0 && !@action_end_cancel
  3612.     @real_x = @position_x / 100 + @weapon_move_data[pattern][0] / 100
  3613.     @real_y = @position_y / 100 + @weapon_move_data[pattern][1] / 100
  3614.     @real_zoom_x = @weapon_zoom_data[pattern][0]
  3615.     @real_zoom_y = @weapon_zoom_data[pattern][1]
  3616.     self.angle = @weapon_angle_data[pattern]
  3617.     self.src_rect.set(@weapon_width * pattern, 0, @weapon_width, @weapon_height) if @weapon_data[1] == 2
  3618.   end
  3619.   #--------------------------------------------------------------------------
  3620.   # ● パターンを更新
  3621.   #--------------------------------------------------------------------------
  3622.   def update_pattern
  3623.     return @battler.sv.pattern_w if @count == nil
  3624.     @count -= 1
  3625.     return @pattern if @count != 0
  3626.     @count = @max_count
  3627.     @pattern += 1
  3628.     if !@repeat && @pattern == @max_pattern
  3629.       @pattern = @max_pattern - 1
  3630.     elsif @pattern == @max_pattern
  3631.       @pattern = 0
  3632.     end
  3633.     return @pattern
  3634.   end
  3635.   #--------------------------------------------------------------------------
  3636.   # ● 座標を更新
  3637.   #--------------------------------------------------------------------------
  3638.   def update_position
  3639.     self.x = (@real_x - $sv_camera.x) * $sv_camera.convert / 1000
  3640.     self.y = (@real_y - $sv_camera.y) * $sv_camera.convert / 1000
  3641.     self.x += $sv_camera.sx / 100 unless @battler.sv.h != 0 && @weapon_data != []
  3642.     self.y += $sv_camera.sy / 100 unless @battler.sv.h != 0 && @weapon_data != []
  3643.     self.z = @battler.sv.z + @z_plus - 10
  3644.     self.zoom_x = @real_zoom_x * $sv_camera.zoom
  3645.     self.zoom_y = @real_zoom_y * $sv_camera.zoom
  3646.     self.opacity = @battler.sv.opacity if @battler.sv.opacity_data[4]
  3647.   end
  3648.   #--------------------------------------------------------------------------
  3649.   # ● 貫通の処理
  3650.   #--------------------------------------------------------------------------
  3651.   def through_set(time, target_x, target_y)
  3652.     @hit_anime_id = N03.get_attack_anime_id(@move_data[1][1], @battler)
  3653.     @battler.sv.wait = N03.get_anime_time(@hit_anime_id) if @move_data[10][1]
  3654.     moving_x = (target_x / 100 - @position_x / 100) / time
  3655.     moving_y = (target_y / 100 - @position_y / 100) / time
  3656.     goal_x = $sv_camera.max_left - 100 if moving_x < 0
  3657.     goal_x = Graphics.width + $sv_camera.max_right + 100 if moving_x > 0
  3658.     goal_y = $sv_camera.max_top - 100 if moving_y < 0
  3659.     goal_y = Graphics.height + $sv_camera.max_bottom + 100 if moving_y > 0
  3660.     if goal_x == nil &&  goal_y == nil
  3661.       time = 0
  3662.       reset_position
  3663.     else
  3664.       time = move_calculation(moving_x, moving_y, goal_x, goal_y)
  3665.     end
  3666.     target_x = @position_x + moving_x * time * 100
  3667.     target_y = @position_y + moving_y * time * 100
  3668.     @pre_data = [time, target_x, target_y]
  3669.     @battler.sv.m_a_data.push([@move_data[11], @target_battler, @index, @auto_through_flag, []])
  3670.     @action_end_cancel = true
  3671.     @hit_position = [@real_x, @real_y, self.z]
  3672.   end  
  3673.   #--------------------------------------------------------------------------
  3674.   # ● 到達時間試算
  3675.   #--------------------------------------------------------------------------
  3676.   def move_calculation(moving_x, moving_y, goal_x, goal_y)
  3677.     move_x = @position_x / 100
  3678.     move_y = @position_y / 100
  3679.     time = 0
  3680.     loop do
  3681.       move_x += moving_x
  3682.       move_y += moving_y
  3683.       time += 1
  3684.       return time if moving_x < 0 && move_x < goal_x
  3685.       return time if moving_x > 0 && move_x > goal_x
  3686.       return time if moving_y < 0 && move_y < goal_y
  3687.       return time if moving_y > 0 && move_y > goal_y
  3688.     end
  3689.   end   
  3690.   #--------------------------------------------------------------------------
  3691.   # ● ミス時に消える処理から貫通処理に変換
  3692.   #--------------------------------------------------------------------------
  3693.   def through_change
  3694.     @action_end_cancel = false
  3695.     @through = true
  3696.     @move_time = @pre_data[0]
  3697.     @target_x = @pre_data[1]
  3698.     @target_y = @pre_data[2]
  3699.     @pre_data = nil
  3700.   end  
  3701.   #--------------------------------------------------------------------------
  3702.   # ● SE とフラッシュのタイミング処理
  3703.   #--------------------------------------------------------------------------
  3704.   def animation_process_timing(timing)
  3705.     return if !@timing_targets
  3706.     se_flag = true
  3707.     se_flag = @se_flag if @se_flag != nil
  3708.     for target in @timing_targets
  3709.       target.sv.timing.push([se_flag, timing.dup])
  3710.       se_flag = false if @animation.position == 3
  3711.     end  
  3712.   end
  3713.   #--------------------------------------------------------------------------
  3714.   # ● 色調の更新
  3715.   #--------------------------------------------------------------------------
  3716.   def update_color
  3717.     return if @battler.sv.color == []
  3718.     self.color.set(@battler.sv.color[0], @battler.sv.color[1], @battler.sv.color[2], @battler.sv.color[3])
  3719.   end
  3720.   #--------------------------------------------------------------------------
  3721.   # ● 解放
  3722.   #--------------------------------------------------------------------------
  3723.   def dispose
  3724.     super
  3725.     self.bitmap.dispose if self.bitmap != nil
  3726.   end
  3727. end
  3728.  
  3729. #==============================================================================
  3730. # ■ Sprite_Battle_Picture
  3731. #------------------------------------------------------------------------------
  3732. #  ピクチャ表示用のスプライトです。
  3733. #==============================================================================
  3734. class Sprite_Battle_Picture < Sprite
  3735.   #--------------------------------------------------------------------------
  3736.   # ● 公開インスタンス変数 
  3737.   #--------------------------------------------------------------------------
  3738.   attr_accessor   :action_end           # 終了フラグ
  3739.   #--------------------------------------------------------------------------
  3740.   # ● オブジェクト初期化
  3741.   #--------------------------------------------------------------------------
  3742.   def initialize(viewport = nil)
  3743.     super(viewport)
  3744.     @action_end = false
  3745.     self.ox = 0
  3746.   end
  3747.   #--------------------------------------------------------------------------
  3748.   # ● セット
  3749.   #--------------------------------------------------------------------------
  3750.   def set(battler)
  3751.     @battler = battler
  3752.     @data = @battler.sv.effect_data.shift
  3753.     @time = @data[4]
  3754.     @mirror = $sv_camera.mirror
  3755.     @mirror = false if !@data[8]
  3756.     self.opacity = @data[6][0]
  3757.     @s_x = @data[2][0] if @data[2] != []
  3758.     @s_x = Graphics.width - @data[2][0]  if @data[2] != [] && @mirror
  3759.     @s_y = @data[2][1] if @data[2] != []
  3760.     @e_x = @data[3][0] if @data[3] != []
  3761.     @e_x = Graphics.width - @data[3][0] if @data[3] != [] && @mirror
  3762.     @e_y = @data[3][1] if @data[3] != []
  3763.     @s_x = self.x if @data[2] == []
  3764.     @s_y = self.y if @data[2] == []
  3765.     @e_x = self.x if @data[3] == []
  3766.     @e_y = self.y if @data[3] == []
  3767.     self.x = @s_x
  3768.     self.y = @s_y
  3769.     return @action_end = true if @time == 0
  3770.     @move_x = (@e_x * 1.0 - @s_x) / @time
  3771.     @move_y = (@e_y * 1.0 - @s_y) / @time
  3772.     self.z = @data[5]
  3773.     return set_plane(battler) if @data[7] != []
  3774.     self.bitmap = Cache.picture(@data[9]) if !bitmap or @data[9] != ""
  3775.     return @action_end = true if !bitmap
  3776.     self.mirror = @mirror
  3777.     self.ox = self.bitmap.width if @mirror
  3778.   end
  3779.   #--------------------------------------------------------------------------
  3780.   # ● プレーン移行
  3781.   #--------------------------------------------------------------------------
  3782.   def set_plane(battler)
  3783.     @viewport = Viewport.new(@data[2][0],@data[2][1],@data[7][0],@data[7][1]) if !@viewport
  3784.     viewport = @viewport
  3785.     @plane = Plane.new(viewport) if !@plane
  3786.     @plane.bitmap = Cache.picture(@data[9]) if !@plane.bitmap or @data[9] != ""
  3787.     return @action_end = true if !@plane.bitmap
  3788.     @plane.ox = @data[7][0]
  3789.     @plane.oy = @data[7][1]
  3790.     @plane.opacity = @data[6][0]
  3791.     @move_x = @remain_move[0] if @data[2] == @data[3]
  3792.     @move_y = @remain_move[1] if @data[2] == @data[3]
  3793.     @remain_move = [@move_x, @move_y]
  3794.   end
  3795.   #--------------------------------------------------------------------------
  3796.   # ● フレーム更新
  3797.   #--------------------------------------------------------------------------
  3798.   def update
  3799.     @action_end = true if !@battler.sv.picture
  3800.     return if @time == 0
  3801.     return if @action_end
  3802.     @time -= 1
  3803.     return plane_update if @plane
  3804.     super
  3805.     self.x += @move_x
  3806.     self.y += @move_y
  3807.     self.opacity += @data[6][1]
  3808.     return if @time != 1
  3809.     self.x = @e_x
  3810.     self.y = @e_y
  3811.     @time = 0
  3812.   end
  3813.   #--------------------------------------------------------------------------
  3814.   # ● フレーム更新
  3815.   #--------------------------------------------------------------------------
  3816.   def plane_update
  3817.     @plane.ox += @move_x
  3818.     @plane.oy += @move_y
  3819.     @plane.opacity += @data[6][1]
  3820.     @time = @data[4] if @time == 0
  3821.   end
  3822.   #--------------------------------------------------------------------------
  3823.   # ● 解放
  3824.   #--------------------------------------------------------------------------
  3825.   def dispose
  3826.     bitmap.dispose if bitmap
  3827.     @plane.dispose if @plane
  3828.     @viewport.dispose if @viewport
  3829.     super
  3830.   end
  3831. end
  3832.  
  3833. #==============================================================================
  3834. # ■ Sprite_Back_Picture
  3835. #------------------------------------------------------------------------------
  3836. #  周期ピクチャ用のスプライトです。
  3837. #==============================================================================
  3838. class Sprite_Back_Picture < Plane
  3839.   #--------------------------------------------------------------------------
  3840.   # ● 公開インスタンス変数 
  3841.   #--------------------------------------------------------------------------
  3842.   attr_accessor   :action_end           # 終了フラグ
  3843.   #--------------------------------------------------------------------------
  3844.   # ● オブジェクト初期化
  3845.   #--------------------------------------------------------------------------
  3846.   def initialize(viewport = nil, index)
  3847.     super(viewport)
  3848.     @index = index
  3849.     @real_x = 0
  3850.     @real_y = 0
  3851.     @real_opacity = 0
  3852.     @move_x = 0
  3853.     @move_y = 0
  3854.     @move_opacity = 0
  3855.     @time = 0
  3856.     @switche = 0
  3857.     @action_end = false
  3858.   end
  3859.   #--------------------------------------------------------------------------
  3860.   # ● セットアップ
  3861.   #--------------------------------------------------------------------------
  3862.   def setup(data)
  3863.     self.bitmap = Cache.picture(data[9])
  3864.     self.z = data[6]
  3865.     @switche = data[1]
  3866.     mirror = $sv_camera.mirror
  3867.     mirror = false if !data[8]
  3868.     @move_x = data[3][0]
  3869.     @move_x *= -1 if mirror
  3870.     @move_y = data[3][1]
  3871.     @time = data[4]
  3872.     @time = -1 if @time == 0
  3873.     @real_opacity = (data[5][0] + 1) * 100
  3874.     @move_opacity = data[5][1]
  3875.     @start_opacity = data[5][0]
  3876.     @shake_ok = data[7]
  3877.   end
  3878.   #--------------------------------------------------------------------------
  3879.   # ● フレーム更新
  3880.   #--------------------------------------------------------------------------
  3881.   def update
  3882.     update_picture if @time != 0
  3883.     self.ox = $sv_camera.x - @real_x
  3884.     self.oy = $sv_camera.y - @real_y
  3885.     if @shake_ok
  3886.       self.ox -= $sv_camera.sx / 100
  3887.       self.oy -= $sv_camera.sy / 100
  3888.     end
  3889.     self.ox *= $sv_camera.zoom
  3890.     self.oy *= $sv_camera.zoom
  3891.     self.zoom_x = @zoom_x * $sv_camera.zoom
  3892.     self.zoom_y = @zoom_y * $sv_camera.zoom
  3893.     self.opacity = @real_opacity / 100
  3894.     @move_opacity *= -1 if self.opacity == 255 or self.opacity <= @start_opacity
  3895.     @switche
  3896.     @action_end = true if @switche > 0 && !$game_switches[@switche]
  3897.     @action_end = true if @switche < 0 && !$sv_camera.switches[@switche.abs]
  3898.   end
  3899.   #--------------------------------------------------------------------------
  3900.   # ● ピクチャの更新
  3901.   #--------------------------------------------------------------------------
  3902.   def update_picture
  3903.     @real_x += @move_x / 100
  3904.     @real_y += @move_y / 100
  3905.     @real_x = 0 if @real_x >= self.bitmap.width or @real_x <= -self.bitmap.width
  3906.     @real_y = 0 if @real_y >= self.bitmap.height or @real_y <= -self.bitmap.height
  3907.     @zoom_x = 1
  3908.     @zoom_y = 1
  3909.     @real_opacity += @move_opacity
  3910.     @time -= 1
  3911.     @time = -1 if @time < -100
  3912.   end
  3913. end
  3914.  
  3915. #==============================================================================
  3916. # ■ Sprite_Back_Picture
  3917. #------------------------------------------------------------------------------
  3918. #  ダメージ表示のスプライトです。
  3919. #==============================================================================
  3920. class Sprite_Damage < Sprite
  3921.   #--------------------------------------------------------------------------
  3922.   # ● 公開インスタンス変数 
  3923.   #--------------------------------------------------------------------------
  3924.   attr_reader   :action_end                  # POP終了フラグ
  3925.   #--------------------------------------------------------------------------
  3926.   # ● オブジェクト初期化
  3927.   #--------------------------------------------------------------------------
  3928.   def initialize(viewport = nil, battler)
  3929.     super(viewport)
  3930.     @battler = battler
  3931.     @time = 0
  3932.     return @action_end = true if !@battler
  3933.     @direction = -1
  3934.     @direction *= -1 if @battler.actor?
  3935.     @direction *= -1 if $sv_camera.mirror
  3936.     set_state
  3937.     set_damage
  3938.     update
  3939.   end
  3940.   #--------------------------------------------------------------------------
  3941.   # ● ステート表示
  3942.   #--------------------------------------------------------------------------
  3943.   def set_state
  3944.     return if !N03::STATE_POP
  3945.     states = @battler.result.added_state_objects
  3946.     states.delete($data_states[@battler.death_state_id]) if @battler.result.hp_damage != 0
  3947.     return if states == []
  3948.     return if @battler.sv.add_state == @battler.result.added_state_objects
  3949.     @battler.sv.add_state = states.dup
  3950.     @st = []
  3951.     @st_base = []
  3952.     for i in 0...states.size
  3953.       @st[i] = Sprite.new
  3954.       bitmap_state(@st[i], states[i])
  3955.       @st_base[i] = []
  3956.       @st_base[i][0] = @direction * (-20 + 5 * i) + @battler.sv.x / 100
  3957.       @st_base[i][1] = -40 - @state_height * i + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
  3958.       @st[i].z = 1000 + i
  3959.       @st[i].opacity = 0
  3960.     end
  3961.     @time = @pop_time = 80
  3962.   end   
  3963.   #--------------------------------------------------------------------------
  3964.   # ● ステート画像
  3965.   #--------------------------------------------------------------------------
  3966.   def bitmap_state(state, state_object)
  3967.     name = state_object.name
  3968.     state.bitmap = Cache.system("Iconset").dup
  3969.     state.src_rect.set(state_object.icon_index % 16 * 24, state_object.icon_index / 16 * 24, 24, 24)
  3970.     @state_height = 24
  3971.   end
  3972.   #--------------------------------------------------------------------------
  3973.   # ● ダメージ表示
  3974.   #--------------------------------------------------------------------------
  3975.   def set_damage
  3976.     return @action_end = true if !N03::DAMAGE_POP
  3977.     damage = @battler.result.hp_damage if @battler.result.hp_damage != 0
  3978.     damage = @battler.result.hp_drain  if @battler.result.hp_drain  != 0
  3979.     damage = @battler.result.mp_damage if @battler.result.mp_damage != 0
  3980.     damage = @battler.result.mp_drain  if @battler.result.mp_drain  != 0
  3981.     damage = @battler.result.tp_damage if @battler.result.tp_damage != 0
  3982.     if !damage or damage == 0
  3983.       @action_end = true if @st == nil
  3984.       return # ステートだけPOPする設定を考慮して@action_endは返さない
  3985.     end
  3986.     @hit = @battler.sv.hit
  3987.     @battler.sv.hit += 1 if damage > 0
  3988.     file = N03::DAMAGE_PLUS if damage > 0
  3989.     file = N03::DAMAGE_MINUS if damage < 0
  3990.     add_file = N03::DAMAGE_MP if @battler.result.mp_damage != 0
  3991.     add_file = N03::DAMAGE_TP if @battler.result.tp_damage != 0
  3992.     adjust_x = N03::DAMAGE_ADJUST
  3993.     @num = []
  3994.     @num_base = []
  3995.     damage = damage.abs
  3996.     max_num = damage.to_s.size
  3997.     max_num += 1 if add_file != nil
  3998.     for i in 0...max_num
  3999.       @num[i] = Sprite.new
  4000.       if add_file != nil && i == max_num - 1
  4001.         @num[i].bitmap = Cache.system(add_file)
  4002.         cw = (damage % (10 * 10 ** i))/(10 ** i)
  4003.         sw = 0 if sw == nil
  4004.       else
  4005.         @num[i].bitmap = Cache.system(file)
  4006.         cw = (damage % (10 * 10 ** i))/(10 ** i)
  4007.         sw = @num[i].bitmap.width / 10
  4008.         @num[i].src_rect.set(cw * sw, 0, sw, @num[i].bitmap.height)
  4009.       end
  4010.       @num_base[i] = []
  4011.       @num_base[i][0] = (sw + adjust_x) * i * -1 + (@battler.sv.x / 100)
  4012.       @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
  4013.       @num_base[i][0] -= @num[i].bitmap.width / 2 - adjust_x if add_file != nil && i == max_num - 1
  4014.       @num[i].z = 1000 + i + @hit * 10
  4015.     end
  4016.     @time = @pop_time = 80
  4017.   end
  4018.   #--------------------------------------------------------------------------
  4019.   # ● フレーム更新
  4020.   #--------------------------------------------------------------------------
  4021.   def update
  4022.     return if @time == 0
  4023.     for i in [email]0...@st.size[/email] do update_state_move(@st[i], i) end if @st != nil
  4024.     for i in [email]0...@num.size[/email] do update_num_move(@num[i], i) end if @num != nil
  4025.     @time -= 1
  4026.     @action_end = true if @time == 0
  4027.   end
  4028.   #--------------------------------------------------------------------------
  4029.   # ● ステート画像の更新
  4030.   #--------------------------------------------------------------------------
  4031.   def update_state_move(state, index)
  4032.     min = @pop_time - index * 2
  4033.     case @time
  4034.     when min-15..min
  4035.       @st_base[index][0] += @direction
  4036.       state.opacity += 25
  4037.     when min-80..min-50
  4038.       @st_base[index][0] += @direction
  4039.       state.opacity -= 25
  4040.     end
  4041.     state.x = (@st_base[index][0] - $sv_camera.x) * $sv_camera.zoom
  4042.     state.y = (@st_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  4043.   end
  4044.   #--------------------------------------------------------------------------
  4045.   # ● 数値の更新
  4046.   #--------------------------------------------------------------------------
  4047.   def update_num_move(num, index)
  4048.     min = @pop_time - index * 2
  4049.     case @time
  4050.     when min-1..min
  4051.       @num_base[index][0] += @direction * @hit
  4052.       @num_base[index][1] -= 5 + @hit * 2
  4053.     when min-3..min-2
  4054.       @num_base[index][0] += @direction * @hit
  4055.       @num_base[index][1] -= 4 + @hit * 2
  4056.     when min-6..min-4
  4057.       @num_base[index][0] += @direction
  4058.       @num_base[index][1] -= 3 + @hit * 2
  4059.     when min-14..min-7
  4060.       @num_base[index][0] += @direction
  4061.       @num_base[index][1] += 2
  4062.     when min-17..min-15
  4063.       @num_base[index][1] -= 2 + @hit * 2
  4064.     when min-23..min-18
  4065.       @num_base[index][1] += 1
  4066.     when min-27..min-24
  4067.       @num_base[index][1] -= 1
  4068.     when min-30..min-28
  4069.       @num_base[index][1] += 1
  4070.     when min-33..min-31
  4071.       @num_base[index][1] -= 1
  4072.     when min-36..min-34
  4073.       @num_base[index][1] += 1
  4074.     end
  4075.     num.x = (@num_base[index][0] - $sv_camera.x) * $sv_camera.zoom
  4076.     num.y = (@num_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  4077.     num.opacity = 256 - (12 - @time) * 32
  4078.     num.visible = false if @time == 0
  4079.   end
  4080.   #--------------------------------------------------------------------------
  4081.   # ● 解放
  4082.   #--------------------------------------------------------------------------
  4083.   def dispose
  4084.     @battler.sv.hit = 0
  4085.     bitmap.dispose if bitmap
  4086.     for i in [email]0...@num.size[/email] do @num[i].dispose end if @num != nil
  4087.     for i in [email]0...@st.size[/email] do @st[i].dispose end if @st != nil
  4088.     super
  4089.   end
  4090. end
  4091.  
  4092. #==============================================================================
  4093. # ■ Window_Skill_name
  4094. #------------------------------------------------------------------------------
  4095. #  スキル名を表示するウィンドウです。
  4096. #==============================================================================
  4097. class Window_Skill_name < Window_Base
  4098.   #--------------------------------------------------------------------------
  4099.   # ● オブジェクト初期化
  4100.   #--------------------------------------------------------------------------
  4101.   def initialize(text)
  4102.     super(0, 0, Graphics.width, line_height + standard_padding * 2)
  4103.     draw_text(4, 0, Graphics.width - 64, line_height,text, 1)
  4104.   end
  4105. end
  4106.  
  4107. #==============================================================================
  4108. # ■ Spriteset_Sideview
  4109. #------------------------------------------------------------------------------
  4110. #  サイドビュー独自のスプライトをまとめたクラスです。
  4111. #==============================================================================
  4112. class Spriteset_Sideview
  4113.   #--------------------------------------------------------------------------
  4114.   # ● オブジェクト初期化
  4115.   #--------------------------------------------------------------------------
  4116.   def initialize(viewport)
  4117.     @viewport = viewport
  4118.     @weapons = []
  4119.     @pictures = []
  4120.     @back_pic = []
  4121.     @damage = []
  4122.     $sv_camera.setup
  4123.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup)
  4124.   end
  4125.   #--------------------------------------------------------------------------
  4126.   # ● フレーム更新
  4127.   #--------------------------------------------------------------------------
  4128.   def update
  4129.     update_battler_data
  4130.     update_damage
  4131.     update_pictures
  4132.     update_back_pic
  4133.     update_weapons
  4134.   end  
  4135.   #--------------------------------------------------------------------------
  4136.   # ● バトラーデータの更新
  4137.   #--------------------------------------------------------------------------
  4138.   def update_battler_data
  4139.     for battler in $game_party.battle_members + $game_troop.members
  4140.       weapon_end(battler) if battler.sv.weapon_end
  4141.       next if battler.sv.effect_data == []
  4142.       for effect_data in battler.sv.effect_data do set_effects(battler, effect_data) end
  4143.     end
  4144.   end
  4145.   #--------------------------------------------------------------------------
  4146.   # ● ダメージ画像の更新
  4147.   #--------------------------------------------------------------------------
  4148.   def update_damage
  4149.     for i in [email]0...@damage.size[/email]
  4150.       next if @damage[i] == nil
  4151.       @damage[i].update if @damage[i] != nil
  4152.       next if !@damage[i].action_end
  4153.       @damage[i].dispose
  4154.       @damage[i] = nil
  4155.     end
  4156.   end
  4157.   #--------------------------------------------------------------------------
  4158.   # ● ピクチャアクションの更新
  4159.   #--------------------------------------------------------------------------
  4160.   def update_pictures
  4161.     for i in [email]0...@pictures.size[/email]
  4162.       next if @pictures[i] == nil
  4163.       @pictures[i].update if @pictures[i] != nil
  4164.       next if !@pictures[i].action_end
  4165.       @pictures[i].dispose
  4166.       @pictures[i] = nil
  4167.     end
  4168.   end
  4169.   #--------------------------------------------------------------------------
  4170.   # ● 周期ピクチャの更新
  4171.   #--------------------------------------------------------------------------
  4172.   def update_back_pic
  4173.     set_back_pic if $sv_camera.program_picture != []
  4174.     for i in [email]0...@back_pic.size[/email]
  4175.       next if @back_pic[i] == nil
  4176.       @back_pic[i].update if @back_pic[i] != nil
  4177.       next if !@back_pic[i].action_end
  4178.       @back_pic[i].dispose
  4179.       @back_pic[i] = nil
  4180.     end
  4181.   end
  4182.   #--------------------------------------------------------------------------
  4183.   # ● 武器アクションの更新
  4184.   #--------------------------------------------------------------------------
  4185.   def update_weapons
  4186.     for i in [email]0...@weapons.size[/email]
  4187.       next if @weapons[i] == nil
  4188.       @weapons[i].update if @weapons[i] != nil
  4189.       next if !@weapons[i].action_end
  4190.       @weapons[i].dispose
  4191.       @weapons[i] = nil
  4192.     end
  4193.   end
  4194.   #--------------------------------------------------------------------------
  4195.   # ● ダメージ実行
  4196.   #--------------------------------------------------------------------------
  4197.   def set_damage_pop(target)
  4198.     for i in [email]0...@damage.size[/email]
  4199.       next if @damage[i] != nil
  4200.       return @damage[i] = Sprite_Damage.new(@viewport, target)
  4201.     end
  4202.     @damage.push(Sprite_Damage.new(@viewport, target))
  4203.   end
  4204.   #--------------------------------------------------------------------------
  4205.   # ● 周期ピクチャ実行
  4206.   #--------------------------------------------------------------------------
  4207.   def set_back_pic
  4208.     for data in $sv_camera.program_picture
  4209.       if @back_pic[data[2]] != nil
  4210.         @back_pic[data[2]].dispose
  4211.         @back_pic[data[2]] = nil
  4212.       end
  4213.       @back_pic[data[2]] = Sprite_Back_Picture.new(@viewport, data[2])
  4214.       @back_pic[data[2]].setup(data)
  4215.     end
  4216.     $sv_camera.program_picture = []
  4217.   end
  4218.   #--------------------------------------------------------------------------
  4219.   # ● エフェクト開始
  4220.   #--------------------------------------------------------------------------
  4221.   def set_effects(battler, effect_data)
  4222.     case effect_data[0]
  4223.     when "pic" ; set_pictures(battler, effect_data)
  4224.     when  "wp" ; set_weapons(battler,  true)
  4225.     when "m_a" ; set_weapons(battler, false)
  4226.     end
  4227.   end
  4228.   #--------------------------------------------------------------------------
  4229.   # ● ピクチャアクション実行
  4230.   #--------------------------------------------------------------------------
  4231.   def set_pictures(battler, effect_data)
  4232.     @pictures[effect_data[1]] = Sprite_Battle_Picture.new if @pictures[effect_data[1]] == nil
  4233.     @pictures[effect_data[1]].set(battler)
  4234.   end
  4235.   #--------------------------------------------------------------------------
  4236.   # ● 武器アクション実行
  4237.   #--------------------------------------------------------------------------
  4238.   def set_weapons(battler, weapon_flag, test = true)
  4239.     for i in [email]0...@weapons.size[/email]
  4240.       next if @weapons[i] != nil
  4241.       @weapons[i] = Sprite_Weapon.new(@viewport, i, battler)
  4242.       battler.sv.weapon_index.push(i) if weapon_flag
  4243.       return i
  4244.     end
  4245.     @weapons.push(Sprite_Weapon.new(@viewport, @weapons.size, battler))
  4246.     battler.sv.weapon_index.push(@weapons.size - 1) if weapon_flag
  4247.     return @weapons.size - 1
  4248.   end
  4249.   #--------------------------------------------------------------------------
  4250.   # ● バトラーの武器アクション終了
  4251.   #--------------------------------------------------------------------------
  4252.   def weapon_end(battler)
  4253.     battler.sv.weapon_end = false
  4254.     for index in battler.sv.weapon_index
  4255.       weapon_index = battler.sv.weapon_index.shift
  4256.       @weapons[weapon_index].dispose if @weapons[weapon_index] != nil
  4257.       @weapons[weapon_index] = nil
  4258.     end
  4259.     battler.sv.weapon_index.compact!
  4260.   end  
  4261.   #--------------------------------------------------------------------------
  4262.   # ● ヒット時の戦闘アニメ実行
  4263.   #--------------------------------------------------------------------------
  4264.   def set_hit_animation(battler, weapon_index, hit_targets, miss)
  4265.     weapon = @weapons[weapon_index]
  4266.     for target in hit_targets
  4267.       next @weapons[@hit_index].timing_battler_set(target) if @hit_index != nil
  4268.       @hit_index = set_weapons(battler, false, false)
  4269.       @weapons[@hit_index].set_hit_animation(weapon.hit_position, weapon.hit_anime_id, target)
  4270.     end
  4271.     @hit_index = nil
  4272.     if !weapon.through && !miss
  4273.       @weapons[weapon_index].dispose
  4274.       @weapons[weapon_index] = nil
  4275.     else
  4276.       @weapons[weapon_index].through_change
  4277.     end
  4278.   end
  4279.   #--------------------------------------------------------------------------
  4280.   # ● サイドビューデータの初期化
  4281.   #--------------------------------------------------------------------------
  4282.   def reset_sideview
  4283.     $sv_camera.reset
  4284.     for member in $game_troop.members + $game_party.battle_members do member.sv.reset end
  4285.   end  
  4286.   #--------------------------------------------------------------------------
  4287.   # ● 解放
  4288.   #--------------------------------------------------------------------------
  4289.   def dispose
  4290.     dispose_effects(@weapons)
  4291.     dispose_effects(@pictures)
  4292.     dispose_effects(@back_pic)
  4293.     dispose_effects(@damage)
  4294.     reset_sideview
  4295.   end
  4296.   #--------------------------------------------------------------------------
  4297.   # ● エフェクト画像の解放
  4298.   #--------------------------------------------------------------------------
  4299.   def dispose_effects(effects)
  4300.     for i in 0...effects.size
  4301.       effects[i].dispose if effects[i] != nil
  4302.       effects[i] = nil
  4303.     end
  4304.   end
  4305. end
  4306.  
  4307.  
  4308. #==============================================================================
  4309. # ■ Sprite_Battle_Back
  4310. #------------------------------------------------------------------------------
  4311. #  戦闘背景用のスプライトです。
  4312. #==============================================================================
  4313. class Sprite_Battle_Back < Plane
  4314.   #--------------------------------------------------------------------------
  4315.   # ● オブジェクト初期化
  4316.   #--------------------------------------------------------------------------
  4317.   def initialize(viewport = nil, index, battleback_name)
  4318.     super(viewport)
  4319.     @index = index
  4320.     if @index == 1
  4321.       data = N03::FLOOR1_DATA[battleback_name]
  4322.       data = N03::FLOOR1_DATA["全Battlebacks1"] if data == nil
  4323.     elsif @index == 2
  4324.       data = N03::FLOOR2_DATA[battleback_name]
  4325.       data = N03::FLOOR2_DATA["全Battlebacks2"] if data == nil
  4326.     end   
  4327.     data = data.dup
  4328.     @adjust_position = data[0]
  4329.     @zoom_x = data[1][0] / 100.0
  4330.     @zoom_y = data[1][1] / 100.0
  4331.     @shake_on = data[2]
  4332.     $game_switches[data[3]] = true if data[3] > 0
  4333.     $sv_camera.switches[data[3].abs] = true if data[3] < 0
  4334.     reset_scroll
  4335.     reset_back_data(battleback_name)
  4336.   end
  4337.   #--------------------------------------------------------------------------
  4338.   # ● 背景スクロールを初期化
  4339.   #--------------------------------------------------------------------------
  4340.   def reset_scroll
  4341.     @scroll_x = 0
  4342.     @scroll_y = 0
  4343.     @move_x = 0
  4344.     @move_y = 0
  4345.   end
  4346.   #--------------------------------------------------------------------------
  4347.   # ● 背景データを初期化
  4348.   #--------------------------------------------------------------------------
  4349.   def reset_back_data(battleback_name)
  4350.     @back_data = []
  4351.     @active_data = ["scroll",0, @move_x, @move_y, false, battleback_name,""]
  4352.     start_back_data(@active_data)
  4353.   end  
  4354.   #--------------------------------------------------------------------------
  4355.   # ● 背景画像のセッティング
  4356.   #--------------------------------------------------------------------------
  4357.   def set_graphics(new_bitmap)
  4358.     self.bitmap = new_bitmap
  4359.     @base_x = (self.bitmap.width * @zoom_x - Graphics.width) / 2 + @adjust_position[0]
  4360.     @base_y = (self.bitmap.height * @zoom_y - Graphics.height) / 2 + @adjust_position[1]
  4361.     # 限界座標を取得
  4362.     max_top =  0
  4363.     max_bottom = self.bitmap.height * @zoom_y - Graphics.height
  4364.     max_left = 0
  4365.     max_right = self.bitmap.width * @zoom_x - Graphics.width
  4366.     exist = true
  4367.     exist = false if self.bitmap.height == 32 && self.bitmap.width == 32
  4368.     $sv_camera.setting(@index, [max_top, max_bottom, max_left, max_right, @base_x, @base_y,exist])
  4369.   end
  4370.   #--------------------------------------------------------------------------
  4371.   # ● フレーム更新
  4372.   #--------------------------------------------------------------------------
  4373.   def update
  4374.     return if !bitmap
  4375.     update_back_data
  4376.     update_scroll unless @move_x == 0 && @move_y == 0
  4377.     update_color
  4378.     update_position
  4379.     update_back_adjust if @bt_back != nil
  4380.     create_back_adjust if @bt_back == nil && !@active_data[10] && @scroll_x == 0 && @scroll_y == 0
  4381.   end
  4382.   #--------------------------------------------------------------------------
  4383.   # ● 背景データを更新
  4384.   #--------------------------------------------------------------------------
  4385.   def update_back_data
  4386.     delete = true if @active_data[1] > 0 && !$game_switches[@active_data[1]]
  4387.     delete = true if @active_data[1] < 0 && !$sv_camera.switches[@active_data[1].abs]
  4388.     return if !delete
  4389.     for i in [email]0...@back_data.size[/email]
  4390.       @back_data[i] = nil if @back_data[i][1] > 0 && !$game_switches[@back_data[i][1]]
  4391.       @back_data[i] = nil if @back_data[i][1] < 0 && !$sv_camera.switches[@back_data[i][1].abs]
  4392.     end
  4393.     @back_data.compact!
  4394.     next_back_data
  4395.   end
  4396.   #--------------------------------------------------------------------------
  4397.   # ● 次の背景データをセット
  4398.   #--------------------------------------------------------------------------
  4399.   def next_back_data
  4400.     @back_data.delete(@active_data[11]) if @active_data[11] != nil
  4401.     @back_data.push(@active_data[11]) if @active_data[11] != nil
  4402.     @active_data = nil
  4403.     data = @back_data.pop
  4404.     @back_data = [@active_data] if @back_data.size == 0
  4405.     start_back_data(data)
  4406.   end  
  4407.   #--------------------------------------------------------------------------
  4408.   # ● 背景データを実行
  4409.   #--------------------------------------------------------------------------
  4410.   def start_back_data(data)
  4411.     return if back_data_remain(data)
  4412.     bt_back_dispose
  4413.     pre_active_data = @active_data
  4414.     @active_data[8] = [@back_name, @move_x, @move_y, @scroll_x, @scroll_y] if @active_data != nil
  4415.     @back_data.push(@active_data)     if @active_data != nil
  4416.     @active_data = data.dup
  4417.     @active_data[5] = @back_name      if @active_data[5] == ""
  4418.     @active_data[9] = set_back_adjust if @active_data[9] == nil
  4419.     back_data_scroll_on               if @active_data[8] == nil && @active_data[9][0] == false
  4420.     set_remain_back_data              if @active_data[8] != nil
  4421.     create_back(@active_data[5])      if @active_data[9][0] == false
  4422.     create_back_adjust                if @active_data[10]
  4423.     @active_data[11] = pre_active_data if pre_active_data && @active_data[7] == false
  4424.   end  
  4425.   #--------------------------------------------------------------------------
  4426.   # ● 背景データの保留
  4427.   #--------------------------------------------------------------------------
  4428.   def back_data_remain(data)
  4429.     remain = false
  4430.     remain = true if data[6] != "" && @active_data != nil && @active_data[9] != nil && @active_data[9][0] != false
  4431.     remain = true if @active_data != nil && @active_data[7] == false
  4432.     return remain if !remain
  4433.     @remain = true
  4434.     @back_data.push(data)
  4435.     return remain
  4436.   end  
  4437.   #--------------------------------------------------------------------------
  4438.   # ● 背景変更補正データをセット
  4439.   #--------------------------------------------------------------------------
  4440.   def set_back_adjust
  4441.     bt_adjust = []
  4442.     sign = -1
  4443.     if @active_data[6] == ""
  4444.       reset_scroll if @active_data[3][0] == 0 &&  @active_data[3][1] == 0
  4445.       bt_adjust = [false,false,0,0]
  4446.       return bt_adjust
  4447.     elsif @move_x != 0 or @active_data[3][0] != 0
  4448.       sign = 1 if @move_x < 0
  4449.       bt_adjust[0] = [self.bitmap.width * @zoom_x * sign, 0]
  4450.       bt_adjust[1] = [self.bitmap.width * @zoom_x * sign * 2, 0]
  4451.     elsif @move_y != 0 or @active_data[3][1] != 0
  4452.       sign = 1 if @move_y < 0
  4453.       bt_adjust[0] = [0, self.bitmap.height * @zoom_y * sign]
  4454.       bt_adjust[1] = [0, self.bitmap.height * @zoom_y * sign * 2]
  4455.     else
  4456.       reset_scroll if @active_data[3][0] == 0 &&  @active_data[3][1] == 0
  4457.       bt_adjust = [false,false,0,0]
  4458.       return bt_adjust
  4459.     end
  4460.     bt_adjust[2] = [bt_adjust[0][0], bt_adjust[0][1]]
  4461.     return bt_adjust
  4462.   end
  4463.   #--------------------------------------------------------------------------
  4464.   # ● 背景スクロールデータを実行
  4465.   #--------------------------------------------------------------------------
  4466.   def back_data_scroll_on
  4467.     mirror = $sv_camera.mirror
  4468.     mirror = false if !@active_data[4]
  4469.     @move_x = @active_data[3][0]
  4470.     @move_x *= -1 if mirror
  4471.     @move_y = @active_data[3][1]
  4472.   end
  4473.   #--------------------------------------------------------------------------
  4474.   # ● 保持している背景データを実行
  4475.   #--------------------------------------------------------------------------
  4476.   def set_remain_back_data
  4477.     return back_data_scroll_on if @move_x != 0 or @move_y != 0
  4478.     create_back(@active_data[8][0])
  4479.     @move_x    = @active_data[8][1]
  4480.     @move_y    = @active_data[8][2]
  4481.     @scroll_x  = @active_data[8][3]
  4482.     @scroll_y  = @active_data[8][4]
  4483.   end  
  4484.   #--------------------------------------------------------------------------
  4485.   # ● 背景画像の作成
  4486.   #--------------------------------------------------------------------------
  4487.   def create_back(back_name)
  4488.     return if back_name == @back_name or back_name == ""
  4489.     self.bitmap = Cache.battleback1(back_name) if @index == 1
  4490.     self.bitmap = Cache.battleback2(back_name) if @index == 2
  4491.     @back_name = back_name
  4492.   end  
  4493.   #--------------------------------------------------------------------------
  4494.   # ● 背景変更補正画像の作成
  4495.   #--------------------------------------------------------------------------
  4496.   def create_back_adjust
  4497.     return if @active_data[9][0] == false
  4498.     @active_data[10] = true
  4499.     mirror = $sv_camera.mirror
  4500.     mirror = false if !@active_data[4]
  4501.     @bt_back = []
  4502.     @bt_back[0] = Sprite.new(viewport)
  4503.     @bt_back[0].bitmap = Cache.battleback1(@active_data[6]) if @index == 1
  4504.     @bt_back[0].bitmap = Cache.battleback2(@active_data[6]) if @index == 2
  4505.     @bt_back[0].mirror = mirror
  4506.     @bt_back[1] = Sprite.new(viewport)
  4507.     @bt_back[1].bitmap = Cache.battleback1(@active_data[5]) if @index == 1
  4508.     @bt_back[1].bitmap = Cache.battleback2(@active_data[5]) if @index == 2
  4509.     @bt_back[1].mirror = mirror
  4510.   end
  4511.   #--------------------------------------------------------------------------
  4512.   # ● 背景スクロールの更新
  4513.   #--------------------------------------------------------------------------
  4514.   def update_scroll
  4515.     @scroll_x += @move_x
  4516.     @scroll_y += @move_y
  4517.     @scroll_x = 0 if @scroll_x / 100 >= self.bitmap.width * @zoom_x or @scroll_x / 100 <= -self.bitmap.width * @zoom_x
  4518.     @scroll_y = 0 if @scroll_y / 100 >= self.bitmap.height * @zoom_y or @scroll_y / 100 <= -self.bitmap.height * @zoom_y
  4519.   end
  4520.   #--------------------------------------------------------------------------
  4521.   # ● 色調変更の更新
  4522.   #--------------------------------------------------------------------------
  4523.   def update_color
  4524.     color_set if $sv_camera.color_set[@index] != nil
  4525.     return if @color_data == nil
  4526.     @color_data[4] -= 1
  4527.     if @color_data[4] == 0 && @color_data[5] != 0
  4528.       @color_data[4] = @color_data[5]
  4529.       @color_data[5] = 0
  4530.       @color_data[6] = [0,0,0,0]
  4531.     elsif @color_data[4] == 0
  4532.       @remain_color_data = @color_data
  4533.       return @color_data = nil
  4534.     end  
  4535.     for i in 0..3
  4536.       @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  4537.     end  
  4538.     self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  4539.   end
  4540.   #--------------------------------------------------------------------------
  4541.   # ● 座標の更新
  4542.   #--------------------------------------------------------------------------
  4543.   def update_position
  4544.     self.ox = $sv_camera.x + @base_x - @scroll_x / 100
  4545.     self.oy = $sv_camera.y + @base_y - @scroll_y / 100
  4546.     self.ox -= $sv_camera.sx / 100 if @shake_on
  4547.     self.oy -= $sv_camera.sy / 100 if @shake_on
  4548.     self.zoom_x = @zoom_x * $sv_camera.zoom
  4549.     self.zoom_y = @zoom_y * $sv_camera.zoom
  4550.     self.ox *= $sv_camera.zoom
  4551.     self.oy *= $sv_camera.zoom
  4552.     self.z = @index * 10
  4553.   end
  4554.   #--------------------------------------------------------------------------
  4555.   # ● 背景変更補正画像を更新
  4556.   #--------------------------------------------------------------------------
  4557.   def update_back_adjust
  4558.     @active_data[9][0][0] = 0 if @scroll_x == 0
  4559.     @active_data[9][0][1] = 0 if @scroll_y == 0
  4560.     @active_data[9][1][0] -= @active_data[9][2][0] if @scroll_x == 0
  4561.     @active_data[9][1][1] -= @active_data[9][2][1] if @scroll_y == 0
  4562.     for i in [email]0...@bt_back.size[/email]
  4563.       @bt_back[i].x = -self.ox + @active_data[9][i][0] * $sv_camera.zoom
  4564.       @bt_back[i].y = -self.oy + @active_data[9][i][1] * $sv_camera.zoom
  4565.       @bt_back[i].zoom_x = self.zoom_x
  4566.       @bt_back[i].zoom_y = self.zoom_y
  4567.       @bt_back[i].z = self.z + 1
  4568.       @bt_back[i].color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  4569.     end
  4570.     back_data_scroll_on if @active_data[9][0][0] == 0 && @active_data[9][0][1] == 0
  4571.     return unless @active_data[9][1][0] == 0 && @active_data[9][1][1] == 0
  4572.     bt_back_dispose
  4573.     create_back(@active_data[5])
  4574.     @active_data[9][0] = false
  4575.     next_back_data if @remain && @back_data.size != 1
  4576.     @remain = false
  4577.   end
  4578.   #--------------------------------------------------------------------------
  4579.   # ● 色調変更
  4580.   #--------------------------------------------------------------------------
  4581.   def color_set
  4582.     set = $sv_camera.color_set[@index]
  4583.     $sv_camera.color_set[@index] = nil
  4584.     set[4] = 1 if set[4] == 0
  4585.     @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  4586.     @color_data = @remain_color_data
  4587.     @color_data[4] = set[4]
  4588.     @color_data[5] = set[5]
  4589.     @color_data[6] = set
  4590.   end
  4591.   #--------------------------------------------------------------------------
  4592.   # ● 背景変更補正画像の解放
  4593.   #--------------------------------------------------------------------------
  4594.   def bt_back_dispose
  4595.     for i in [email]0...@bt_back.size[/email] do @bt_back[i].dispose end if @bt_back != nil
  4596.     @bt_back = nil
  4597.   end  
  4598.   #--------------------------------------------------------------------------
  4599.   # ● 解放
  4600.   #--------------------------------------------------------------------------
  4601.   def dispose
  4602.     bitmap.dispose if bitmap
  4603.     bt_back_dispose
  4604.     super
  4605.   end
  4606. end  
  4607.  
  4608. #==============================================================================
  4609. # ■ Battle_Camera
  4610. #------------------------------------------------------------------------------
  4611. #  戦闘カメラやバトルプログラムを扱うクラスです。
  4612. #==============================================================================
  4613. class Battle_Camera
  4614.   #--------------------------------------------------------------------------
  4615.   # ● 公開インスタンス変数 
  4616.   #--------------------------------------------------------------------------
  4617.   attr_reader   :sx                 # シェイクX座標
  4618.   attr_reader   :sy                 # シェイクY座標
  4619.   attr_reader   :max_top            # 上限界座標
  4620.   attr_reader   :max_bottom         # 下限界座標
  4621.   attr_reader   :max_left           # 左限界座標
  4622.   attr_reader   :max_right          # 右限界座標
  4623.   attr_accessor :switches           # サイドビュー専用スイッチ
  4624.   attr_accessor :color_set          # 色調変更データ
  4625.   attr_accessor :wait               # 戦闘シーンの強制ウエイト
  4626.   attr_accessor :win_wait           # 戦闘勝利前のウエイト
  4627.   attr_accessor :mirror             # 画面反転フラグ
  4628.   attr_accessor :program_scroll     # バトルプログラム 背景の自動スクロール
  4629.   attr_accessor :program_picture    # バトルプログラム 周期ピクチャ
  4630.   attr_accessor :event              # コモンイベント呼び出し
  4631.   #--------------------------------------------------------------------------
  4632.   # ● オブジェクト初期化
  4633.   #--------------------------------------------------------------------------
  4634.   def initialize
  4635.     @switches = []
  4636.     @max_data = []
  4637.     @color_set = []
  4638.     @wait = 0
  4639.     @win_wait = false
  4640.     @mirror = false
  4641.     @event = false
  4642.     setup
  4643.   end
  4644.   #--------------------------------------------------------------------------
  4645.   # ● カメラX座標
  4646.   #--------------------------------------------------------------------------
  4647.   def x
  4648.     return @x / 100
  4649.   end
  4650.   #--------------------------------------------------------------------------
  4651.   # ● カメラY座標
  4652.   #--------------------------------------------------------------------------
  4653.   def y
  4654.     return @y / 100
  4655.   end
  4656.   #--------------------------------------------------------------------------
  4657.   # ● ズーム率
  4658.   #--------------------------------------------------------------------------
  4659.   def zoom
  4660.     return @zoom * 0.001
  4661.   end
  4662.   #--------------------------------------------------------------------------
  4663.   # ● ズーム率による座標変換
  4664.   #--------------------------------------------------------------------------
  4665.   def convert
  4666.     return @zoom
  4667.   end
  4668.   #--------------------------------------------------------------------------
  4669.   # ● カメラセットアップ
  4670.   #--------------------------------------------------------------------------
  4671.   def setup
  4672.     @x = 0
  4673.     @y = 0
  4674.     @sx = 0
  4675.     @sy = 0
  4676.     @zoom = 1000
  4677.     @time = 0
  4678.     @shake_time = 0
  4679.     program_setup
  4680.   end
  4681.   #--------------------------------------------------------------------------
  4682.   # ● カメラ初期化
  4683.   #--------------------------------------------------------------------------
  4684.   def reset
  4685.     @switches = []
  4686.     @max_data = []
  4687.     @color_set = []
  4688.     @wait = 0
  4689.     @win_wait = false
  4690.     @mirror = false
  4691.     program_setup(false)
  4692.   end  
  4693.   #--------------------------------------------------------------------------
  4694.   # ● バトルプログラムのセットアップ
  4695.   #--------------------------------------------------------------------------
  4696.   def program_setup(check = true)
  4697.     @played_program  = []
  4698.     @program_switch  = []
  4699.     @program_sound   = []
  4700.     @program_scroll  = []
  4701.     @program_se      = []
  4702.     @program_shake   = []
  4703.     @program_color   = []
  4704.     @program_picture = []
  4705.     @program_base = N03::BATTLE_PROGRAM.values.dup
  4706.     program_check if check
  4707.   end  
  4708.   #--------------------------------------------------------------------------
  4709.   # ● バトルプログラムのチェック
  4710.   #--------------------------------------------------------------------------
  4711.   def program_check
  4712.     for data in @program_base
  4713.       if program_start?(data) && !@played_program.include?(data)
  4714.         @played_program.push(data.dup)
  4715.         @program_scroll.push(data.dup)  if data[0] == "scroll"
  4716.         @program_picture.push(data.dup) if data[0] == "kpic"
  4717.         start_sound(data.dup)           if data[0] == "sound"
  4718.         start_program_switch(data.dup)  if data[0] == "switch"
  4719.         start_program_se(data.dup)      if data[0] == "keep_se"
  4720.         start_program_shake(data.dup)   if data[0] == "keep_sk"
  4721.         start_program_color(data.dup)   if data[0] == "keep_c"
  4722.       else
  4723.         @played_program.delete(data)  if !program_start?(data)
  4724.         @program_scroll.delete(data)  if data[0] == "scroll"
  4725.         @program_picture.delete(data) if data[0] == "kpic"
  4726.         @program_switch.delete(data)  if data[0] == "switch"
  4727.         @program_sound.delete(data)   if data[0] == "sound"
  4728.         @program_se.delete(data)      if data[0] == "keep_se"
  4729.         @program_shake.delete(data)   if data[0] == "keep_sk"
  4730.         @program_color.delete(data)   if data[0] == "keep_c"
  4731.       end
  4732.     end
  4733.   end
  4734.   #--------------------------------------------------------------------------
  4735.   # ● バトルプログラムの開始
  4736.   #--------------------------------------------------------------------------
  4737.   def program_start?(data)
  4738.     start = false
  4739.     start = true if $game_switches[data[1].abs] && data[1] > 0
  4740.     start = true if @switches[data[1].abs] && data[1] < 0
  4741.     return start
  4742.   end  
  4743.   #--------------------------------------------------------------------------
  4744.   # ● バトルプログラム スイッチ操作の開始
  4745.   #--------------------------------------------------------------------------
  4746.   def start_program_switch(data)
  4747.     data[4] = data[4] + rand(data[5] + 1)
  4748.     data[4] = 1 if data[4] <= 0
  4749.     @program_switch.push(data)
  4750.   end
  4751.   #--------------------------------------------------------------------------
  4752.   # ● スイッチ操作の更新
  4753.   #--------------------------------------------------------------------------
  4754.   def update_program_switch
  4755.     for data in @program_switch
  4756.       data[4] -= 1
  4757.       next @program_switch.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  4758.       next @program_switch.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  4759.       next if data[4] != 0
  4760.       for id in data[2]
  4761.         $game_switches[id] = true if id > 0
  4762.         @switches[id.abs] = true  if id < 0
  4763.       end
  4764.       for id in data[3]
  4765.         $game_switches[id] = false if id > 0
  4766.         @switches[id.abs] = false  if id < 0
  4767.       end
  4768.       @program_switch.delete(data)
  4769.       program_check
  4770.     end  
  4771.   end
  4772.   #--------------------------------------------------------------------------
  4773.   # ● バトルプログラム BGM/BGSの開始
  4774.   #--------------------------------------------------------------------------
  4775.   def start_sound(data)
  4776.     @program_sound.push(data)
  4777.     name = data[5]
  4778.     case data[2]
  4779.     when "se"
  4780.       Audio.se_play("Audio/SE/" + name, data[4], data[3])
  4781.     when "bgm"
  4782.       name = RPG::BGM.last.name if data[5] == ""
  4783.       Audio.bgm_play("Audio/BGM/" + name, data[4], data[3])
  4784.     when "bgs"
  4785.       name = RPG::BGS.last.name if data[5] == ""
  4786.       Audio.bgs_play("Audio/BGS/" + name, data[4], data[3])
  4787.     end
  4788.   end
  4789.   #--------------------------------------------------------------------------
  4790.   # ● バトルプログラム 周期SEの開始
  4791.   #--------------------------------------------------------------------------
  4792.   def start_program_se(data)
  4793.     data[3] = [data[2], data[3]]
  4794.     data[2] = data[3][0] + rand(data[3][1] + 1)
  4795.     @program_se.push(data)
  4796.     Audio.se_play("Audio/SE/" + data[7], data[5], data[4]) if data[6]
  4797.   end
  4798.   #--------------------------------------------------------------------------
  4799.   # ● 周期SEの更新
  4800.   #--------------------------------------------------------------------------
  4801.   def update_program_se
  4802.     for data in @program_se
  4803.       data[2] -= 1
  4804.       next @program_se.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  4805.       next @program_se.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  4806.       next if data[2] != 0
  4807.       Audio.se_play("Audio/SE/" + data[7], data[5], data[4])
  4808.       data[2] = data[3][0] + rand(data[3][1] + 1)
  4809.     end  
  4810.   end
  4811.   #--------------------------------------------------------------------------
  4812.   # ● バトルプログラム 周期シェイクの開始
  4813.   #--------------------------------------------------------------------------
  4814.   def start_program_shake(data)
  4815.     data[3] = [data[2], data[3]]
  4816.     data[2] = data[3][0] + rand(data[3][1] + 1)
  4817.     @program_shake.push(data)
  4818.     shake(data[4], data[5], data[6]) if data[7]
  4819.   end
  4820.   #--------------------------------------------------------------------------
  4821.   # ● 周期シェイクの更新
  4822.   #--------------------------------------------------------------------------
  4823.   def update_program_shake
  4824.     for data in @program_shake
  4825.       data[2] -= 1
  4826.       next @program_shake.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  4827.       next @program_shake.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  4828.       next if data[2] != 0
  4829.       shake(data[4], data[5], data[6])
  4830.       data[2] = data[3][0] + rand(data[3][1] + 1)
  4831.     end  
  4832.   end
  4833.   #--------------------------------------------------------------------------
  4834.   # ● バトルプログラム 周期色調変更の開始
  4835.   #--------------------------------------------------------------------------
  4836.   def start_program_color(data)
  4837.     data[3] = [data[2], data[3]]
  4838.     data[2] = data[3][0] + rand(data[3][1] + 1)
  4839.     data[7] = true if data[4] == 0 or data[4] == 4
  4840.     case data[4]
  4841.     when 1   ;data[4] = $game_troop.members
  4842.     when 2   ;data[4] = $game_party.battle_members
  4843.     when 3,4 ;data[4] = $game_troop.members + $game_party.battle_members
  4844.     else ;data[4] = []
  4845.     end
  4846.     @program_color.push(data)
  4847.     return if !data[6]
  4848.     for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
  4849.     @color_set[1] = data[5] if data[7]
  4850.     @color_set[2] = data[5] if data[7]
  4851.   end
  4852.   #--------------------------------------------------------------------------
  4853.   # ● 周期色調変更の更新
  4854.   #--------------------------------------------------------------------------
  4855.   def update_program_color
  4856.     for data in @program_color
  4857.       data[2] -= 1
  4858.       next @program_color.delete(data) if data[1] > 0 && !$game_switches[data[1]]
  4859.       next @program_color.delete(data) if data[1] < 0 && !@switches[data[1].abs]
  4860.       next if data[2] != 0
  4861.       for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
  4862.       @color_set[1] = data[5] if data[7]
  4863.       @color_set[2] = data[5] if data[7]
  4864.       data[2] = data[3][0] + rand(data[3][1] + 1)
  4865.     end
  4866.   end
  4867.   #--------------------------------------------------------------------------
  4868.   # ● トランジション実行
  4869.   #--------------------------------------------------------------------------
  4870.   def perform_transition(data)
  4871.     Graphics.transition(data[2], "Graphics/Pictures/" + data[3], data[1])
  4872.   end  
  4873.   #--------------------------------------------------------------------------
  4874.   # ● 背景からカメラの限界値を取得  data = [max_top, max_bottom, max_left, max_right]
  4875.   #--------------------------------------------------------------------------
  4876.   def setting(index, data)
  4877.     @max_data[index - 1] = data
  4878.     return if index != 2
  4879.     setup
  4880.     # カメラの中心座標
  4881.     @center_x     = (Graphics.width / 2 + N03::CAMERA_POSITION[0]) * 100
  4882.     @center_y     = (Graphics.height / 2 + N03::CAMERA_POSITION[1]) * 100
  4883.     # 上下左右の移動限界距離
  4884.     @max_top    = [@max_data[0][5], @max_data[1][5]].min * -1
  4885.     @max_bottom = [@max_data[0][1], @max_data[1][1]].min + @max_top
  4886.     @max_left   = [@max_data[0][4], @max_data[1][4]].min  * -1
  4887.     @max_right  = [@max_data[0][3], @max_data[1][3]].min + @max_left
  4888.     exist_data = @max_data[0] if !@max_data[1][6]
  4889.     exist_data = @max_data[1] if !@max_data[0][6]
  4890.     @max_top    = exist_data[5] * -1        if exist_data != nil
  4891.     @max_bottom = exist_data[1] + @max_top  if exist_data != nil
  4892.     @max_left   = exist_data[4] * -1        if exist_data != nil
  4893.     @max_right  = exist_data[3] + @max_left if exist_data != nil
  4894.     @max_top = @max_bottom = @max_left = @max_right = 0 if !@max_data[1][6] && !@max_data[0][6]
  4895.     @max_width    = @max_right - @max_left + Graphics.width
  4896.     @max_height   = @max_bottom - @max_top + Graphics.height
  4897.     # ズームアウト限界値
  4898.     max_zoom_x    = 100 * Graphics.width / @max_width
  4899.     max_zoom_y    = 100 * Graphics.height / @max_height
  4900.     @max_zoom_out = [max_zoom_x, max_zoom_y].max
  4901.   end
  4902.   #--------------------------------------------------------------------------
  4903.   # ● カメラ移動
  4904.   #--------------------------------------------------------------------------
  4905.   def move(target_x, target_y, zoom, time, screen = true)
  4906.     # 戦闘背景以上のサイズまでズームアウトしないよう調整
  4907.     @target_zoom = [zoom * 0.01, @max_zoom_out * 0.01].max
  4908.     target_x *= -1 if screen && @mirror
  4909.     # ズーム分の中心座標補正
  4910.     if screen && @target_zoom != 1
  4911.       target_x = target_x + @center_x
  4912.       target_y = target_y + @center_y
  4913.     end
  4914.     adjust_x = @center_x * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
  4915.     adjust_y = @center_y * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
  4916.     adjust_x = 0 if adjust_x.nan?
  4917.     adjust_y = 0 if adjust_y.nan?
  4918.     adjust_x = @center_x if !screen && adjust_x == 0
  4919.     adjust_y = @center_y if !screen && adjust_y == 0
  4920.     @target_x = target_x - adjust_x.to_i
  4921.     @target_y = target_y - adjust_y.to_i
  4922.     @target_zoom = (@target_zoom * 1000).to_i
  4923.     @zoom = @zoom.to_i
  4924.     limit_test
  4925.     # 時間0の場合は即実行
  4926.     return @time = time.abs if time != 0
  4927.     @time = 1
  4928.     update
  4929.   end
  4930.   #--------------------------------------------------------------------------
  4931.   # ● 限界座標の試算
  4932.   #--------------------------------------------------------------------------
  4933.   def limit_test
  4934.     new_width = @max_width * @target_zoom / 1000
  4935.     new_height = @max_height * @target_zoom / 1000
  4936.     new_max_right = @max_right - (@max_width - new_width)
  4937.     new_max_bottom = @max_bottom - (@max_height - new_height)
  4938.     # 画面の移動先が限界の場合、限界座標をセット
  4939.     if @target_x < @max_left * 100
  4940.       @target_x = @max_left * 100
  4941.     end
  4942.     if @target_x > new_max_right * 100
  4943.       @target_x = new_max_right * 100
  4944.     end
  4945.     if @target_y < @max_top * 100
  4946.       @target_y = @max_top * 100
  4947.     end
  4948.     if @target_y > new_max_bottom * 100
  4949.       @target_y = new_max_bottom * 100
  4950.     end
  4951.   end
  4952.   #--------------------------------------------------------------------------
  4953.   # ● 画面のシェイク
  4954.   #--------------------------------------------------------------------------
  4955.   def shake(power, speed, time)
  4956.     @shake_x = power[0] * 100
  4957.     @shake_y = power[1] * 100
  4958.     @power_time_base = @power_time = speed
  4959.     @shake_time = time
  4960.     update_shake
  4961.   end
  4962.   #--------------------------------------------------------------------------
  4963.   # ● シェイクの更新
  4964.   #--------------------------------------------------------------------------
  4965.   def update_shake
  4966.     @sx = (@sx * (@power_time - 1) + @shake_x) / @power_time
  4967.     @sy = (@sy * (@power_time - 1) + @shake_y) / @power_time
  4968.     @power_time -= 1
  4969.     @shake_time -= 1
  4970.     return @sx = @sy = 0 if @shake_time == 0
  4971.     return if @power_time != 0
  4972.     @power_time = @power_time_base
  4973.     @shake_x = @shake_x * -4 / 5
  4974.     @shake_y = @shake_y * -4 / 5
  4975.   end
  4976.   #--------------------------------------------------------------------------
  4977.   # ● フレーム更新
  4978.   #--------------------------------------------------------------------------
  4979.   def update
  4980.     update_shake if @shake_time != 0
  4981.     update_program
  4982.     return if @time == 0
  4983.     @x = (@x * (@time - 1) + @target_x) / @time
  4984.     @y = (@y * (@time - 1) + @target_y) / @time
  4985.     @zoom = (@zoom * (@time - 1) + @target_zoom) / @time
  4986.     @time -= 1
  4987.   end
  4988.   #--------------------------------------------------------------------------
  4989.   # ● フレーム更新
  4990.   #--------------------------------------------------------------------------
  4991.   def update_program
  4992.     update_program_switch if @program_switch != []
  4993.     update_program_se     if @program_se != []
  4994.     update_program_shake  if @program_shake != []
  4995.     update_program_color  if @program_color != []
  4996.   end
  4997. end
  4998.  
  4999. #==============================================================================
  5000. # ■ Scene_Battle
  5001. #------------------------------------------------------------------------------
  5002. #  バトル画面の処理を行うクラスです。
  5003. #==============================================================================
  5004. class Scene_Battle < Scene_Base
  5005.   #--------------------------------------------------------------------------
  5006.   # ● フレーム更新(基本)
  5007.   #--------------------------------------------------------------------------
  5008.   alias update_basic_scene_battle_n03 update_basic
  5009.   def update_basic
  5010.     update_basic_scene_battle_n03
  5011.     $sv_camera.update
  5012.     $sv_camera.wait = N03::TURN_END_WAIT + 1 if $sv_camera.win_wait
  5013.     camera_wait
  5014.   end
  5015.   #--------------------------------------------------------------------------
  5016.   # ● カメラウェイト
  5017.   #--------------------------------------------------------------------------
  5018.   def camera_wait
  5019.     process_event if $sv_camera.event
  5020.     $sv_camera.event = false if $sv_camera.event
  5021.     while $sv_camera.wait != 0
  5022.       Graphics.update
  5023.       Input.update
  5024.       update_all_windows
  5025.       $game_timer.update
  5026.       $game_troop.update
  5027.       $sv_camera.update
  5028.       @spriteset.update
  5029.       update_info_viewport
  5030.       update_message_open
  5031.       $sv_camera.wait -= 1 if $sv_camera.wait > 0
  5032.       $sv_camera.wait = 1 if $sv_camera.wait == 0 && @spriteset.effect?
  5033.       BattleManager.victory if $sv_camera.win_wait && $sv_camera.wait == 0
  5034.     end
  5035.   end
  5036.   #--------------------------------------------------------------------------
  5037.   # ● カメラウェイトのセット
  5038.   #--------------------------------------------------------------------------
  5039.   def set_camera_wait(time)
  5040.     $sv_camera.wait = time
  5041.     camera_wait
  5042.   end  
  5043.   #--------------------------------------------------------------------------
  5044.   # ● エフェクト実行が終わるまでウェイト ★再定義
  5045.   #--------------------------------------------------------------------------
  5046.   def wait_for_effect
  5047.   end
  5048.   #--------------------------------------------------------------------------
  5049.   # ● ターン開始
  5050.   #--------------------------------------------------------------------------
  5051.   alias turn_start_scene_battle_n03 turn_start
  5052.   def turn_start
  5053.     turn_start_scene_battle_n03
  5054.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始後"].dup)
  5055.   end
  5056.   #--------------------------------------------------------------------------
  5057.   # ● ターン終了
  5058.   #--------------------------------------------------------------------------
  5059.   alias turn_end_scene_battle_n03 turn_end
  5060.   def turn_end
  5061.     turn_end_scene_battle_n03
  5062.     for member in $game_troop.members + $game_party.members
  5063.       N03.set_damage(member, member.sv.result_damage[0],member.sv.result_damage[1])
  5064.       member.sv.result_damage = [0,0]
  5065.       @spriteset.set_damage_pop(member) if member.result.hp_damage != 0 or member.result.mp_damage != 0
  5066.     end
  5067.     set_camera_wait(N03::TURN_END_WAIT)
  5068.     N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup) if $game_party.inputable?
  5069.     @log_window.clear
  5070.   end
  5071.   #--------------------------------------------------------------------------
  5072.   # ● スキル/アイテムの使用 ★再定義
  5073.   #--------------------------------------------------------------------------
  5074.   def use_item
  5075.     item = @subject.current_action.item
  5076.     display_item(item)
  5077.     @subject.use_item(item)
  5078.     refresh_status
  5079.     @targets = @subject.current_action.make_targets.compact
  5080.     @targets = [@subject] if @targets.size == 0
  5081.     set_substitute(item)
  5082.     for time in item.repeats.times do play_sideview(@targets, item) end
  5083.     end_reaction(item)
  5084.     display_end_item
  5085.   end
  5086.   #--------------------------------------------------------------------------
  5087.   # ● スキル/アイテム名の表示
  5088.   #--------------------------------------------------------------------------
  5089.   def display_item(item)
  5090.     return @log_window.display_use_item(@subject, item) if N03::BATTLE_LOG
  5091.     @log_window.off
  5092.     @skill_name_window = Window_Skill_name.new(item.name) unless N03::NO_DISPLAY_SKILL_ID.include?(item.id) && item.is_a?(RPG::Skill)
  5093.   end  
  5094.   #--------------------------------------------------------------------------
  5095.   # ● スキル/アイテム名の表示終了
  5096.   #--------------------------------------------------------------------------
  5097.   def display_end_item
  5098.     @skill_name_window.dispose if @skill_name_window != nil
  5099.     @skill_name_window = nil
  5100.     set_camera_wait(N03::ACTION_END_WAIT) if @subject.sv.derivation_skill_id == 0
  5101.     @log_window.clear if N03::BATTLE_LOG
  5102.   end  
  5103.   #--------------------------------------------------------------------------
  5104.   # ● 反撃/魔法反射/身代わり処理
  5105.   #--------------------------------------------------------------------------
  5106.   def end_reaction(item)
  5107.     end_substitute if @substitute != nil
  5108.     set_reflection(item) if @reflection_data != nil
  5109.     set_counter_attack if @counter_attacker != nil
  5110.   end  
  5111.   #--------------------------------------------------------------------------
  5112.   # ● 反撃の発動 ★再定義
  5113.   #--------------------------------------------------------------------------
  5114.   def invoke_counter_attack(target, item)
  5115.     return if @subject.sv.counter_id != 0
  5116.     @counter_attacker = [] if @counter_attacker == nil
  5117.     return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
  5118.     @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
  5119.     target.sv.counter_id = target.sv.counter_skill_id
  5120.     @counter_attacker.push(target)
  5121.   end
  5122.   #--------------------------------------------------------------------------
  5123.   # ● 魔法反射の発動 ★再定義
  5124.   #--------------------------------------------------------------------------
  5125.   def invoke_magic_reflection(target, item)
  5126.     return if @subject.sv.reflection_id != 0
  5127.     @log_window.add_text(sprintf(Vocab::MagicReflection, target.name)) if N03::BATTLE_LOG
  5128.     target.sv.reflection_id = target.sv.reflection_anime_id
  5129.   end
  5130.   #--------------------------------------------------------------------------
  5131.   # ● 身代わりの適用 ★再定義
  5132.   #--------------------------------------------------------------------------
  5133.   def apply_substitute(target, item)
  5134.     return target if @substitute == nil
  5135.     return target if !check_substitute(target, item)
  5136.     return @substitute
  5137.   end
  5138.   #--------------------------------------------------------------------------
  5139.   # ● 身代わりセット
  5140.   #--------------------------------------------------------------------------
  5141.   def set_substitute(item)
  5142.     @substitute = N03.get_enemy_unit(@subject).substitute_battler
  5143.     return if @substitute == nil
  5144.     s_targets = []
  5145.     for i in [email]0...@targets.size[/email]
  5146.       next if @targets[i] == @substitute
  5147.       next if !check_substitute(@targets[i], item)
  5148.       @log_window.add_text(sprintf(Vocab::Substitute, @substitute.name, @targets[i].name))
  5149.       @targets[i].sv.start_action(@targets[i].sv.substitute_receiver_start_action)
  5150.       s_targets.push(@targets[i])
  5151.       @targets[i] = @substitute
  5152.     end
  5153.     return @substitute = nil if s_targets == []
  5154.     @substitute.sv.set_target(s_targets)
  5155.     @substitute.sv.start_action(@substitute.sv.substitute_start_action)
  5156.   end  
  5157.   #--------------------------------------------------------------------------
  5158.   # ● 身代わり終了
  5159.   #--------------------------------------------------------------------------
  5160.   def end_substitute
  5161.     for member in @substitute.sv.target_battler
  5162.       member.sv.start_action(member.sv.substitute_receiver_end_action)
  5163.     end  
  5164.     @substitute.sv.start_action(@substitute.sv.substitute_end_action)
  5165.     @substitute = nil
  5166.   end
  5167.   #--------------------------------------------------------------------------
  5168.   # ● 反撃
  5169.   #--------------------------------------------------------------------------
  5170.   def set_counter_attack
  5171.     pre_subject = @subject
  5172.     for attacker in @counter_attacker
  5173.       @subject = attacker
  5174.       item = $data_skills[attacker.sv.counter_skill_id]
  5175.       play_sideview([pre_subject], item)
  5176.     end
  5177.     # 同一カウンター者を考慮してカウンターIDの初期化はアクション後に実行
  5178.     for attacker in @counter_attacker do attacker.sv.counter_id = 0 end
  5179.     @subject = pre_subject
  5180.     @counter_attacker = nil
  5181.   end
  5182.   #--------------------------------------------------------------------------
  5183.   # ● 魔法反射
  5184.   #--------------------------------------------------------------------------
  5185.   def set_reflection(item)
  5186.     @log_window.back_to(1)
  5187.     for data in @reflection_data
  5188.       @subject.sv.damage_action(@subject, item)
  5189.       N03.set_damage_anime_data([@subject], @subject, data)
  5190.       apply_item_effects(@subject, item)
  5191.       @spriteset.set_damage_pop(@subject)
  5192.     end
  5193.     set_camera_wait(N03.get_anime_time(@reflection_data[0][0]))
  5194.     @reflection_data = nil
  5195.   end
  5196.   #--------------------------------------------------------------------------
  5197.   # ● サイドビューアクション実行
  5198.   #--------------------------------------------------------------------------
  5199.   def play_sideview(targets, item)
  5200.     @subject.sv.set_target(targets)
  5201.     return if @subject.sv.attack_action(item) == nil
  5202.     return if !@subject.movable?
  5203.     return if item.scope != 9 && item.scope != 10 && !N03.targets_alive?(targets)
  5204.     @subject.sv.start_action(@subject.sv.attack_action(item))
  5205.     @subject.sv.unshift_action(@subject.sv.flash_action) if @subject.flash_flg
  5206.     @subject.sv.active = true
  5207.     @subject.sv.command_action = false
  5208.     loop do
  5209.       update_basic
  5210.       data = @subject.sv.play_data
  5211.       @targets = N03.s_targets(@subject) if data[0] == "second_targets_set"
  5212.       N03.targets_set(@subject)          if data[0] == "targets_set"
  5213.       @immortal = N03.immortaling        if data[0] == "no_collapse" && !N03.dead_attack?(@subject, item)
  5214.       @immortal = N03.unimmortaling      if data[0] == "collapse"
  5215.       next set_move_anime(item)          if @subject.sv.m_a_data != []
  5216.       set_damage(item)                   if @subject.sv.set_damage
  5217.       break N03.derived_skill(@subject)  if @subject.sv.derivation_skill_id != 0
  5218.       break                              if @subject.sv.action_end or @subject.hidden?
  5219.     end
  5220.     @immortal = N03.unimmortaling        if @immortal
  5221.   end
  5222.   #--------------------------------------------------------------------------
  5223.   # ● ダメージの実行
  5224.   #--------------------------------------------------------------------------
  5225.   def set_damage(item)
  5226.     targets = @targets
  5227.     targets = [@subject.sv.individual_targets[0]] if @subject.sv.individual_targets.size != 0
  5228.     for target in targets do damage_anime(targets.dup, target, item) end
  5229.     @subject.sv.set_damage = false
  5230.     @subject.sv.damage_anime_data = []
  5231.   end
  5232.   #--------------------------------------------------------------------------
  5233.   # ● ダメージ戦闘アニメ処理
  5234.   #--------------------------------------------------------------------------
  5235.   def damage_anime(targets, target, item)
  5236.     @log_window.back_to(1) if @log_window.line_number == 5
  5237.     return if item.scope != 9 && item.scope != 10 && target.dead?
  5238.     @miss = false
  5239.     invoke_item(target,item)
  5240.     if target.result.missed
  5241.       target.sv.miss_action(@subject, item)
  5242.       return @miss = true
  5243.     elsif target.result.evaded or target.sv.counter_id != 0
  5244.       target.sv.evasion_action(@subject, item)
  5245.       return @miss = true
  5246.     elsif target.sv.reflection_id != 0
  5247.       N03.set_damage_anime_data(targets, target, [target.sv.reflection_id, false, false, true])
  5248.       target.sv.reflection_id = 0
  5249.       @reflection_data = [] if @reflection_data == nil
  5250.       return @reflection_data.push([N03.get_attack_anime_id(-3, @subject), false, false, true])
  5251.     end
  5252.     target.sv.damage_action(@subject, item)
  5253.     N03.set_damage(@subject, -target.result.hp_drain, -target.result.mp_drain) if target != @subject
  5254.     @spriteset.set_damage_pop(target)
  5255.     @spriteset.set_damage_pop(@subject) if target != @subject && @subject.result.hp_damage != 0 or @subject.result.mp_damage != 0
  5256.     N03.set_damage_anime_data(targets, target, @subject.sv.damage_anime_data) if @subject.sv.damage_anime_data != []
  5257.   end
  5258.   #--------------------------------------------------------------------------
  5259.   # ● 飛ばしアニメ処理
  5260.   #--------------------------------------------------------------------------
  5261.   def set_move_anime(item)
  5262.     for data in @subject.sv.m_a_data
  5263.       @subject.sv.damage_anime_data = data[4]
  5264.       hit_targets = []
  5265.       for target in data[1]
  5266.         damage_anime(data[1], target, item) if data[0]
  5267.         hit_targets.push(target) if !@miss
  5268.       end
  5269.       @miss = false if !data[3]
  5270.       @spriteset.set_hit_animation(@subject, data[2], hit_targets, @miss)
  5271.     end
  5272.     @subject.sv.set_damage = false
  5273.     @subject.sv.m_a_data = []
  5274.   end
  5275. end
  5276.  
  5277. #==============================================================================
  5278. # ■ DataManager
  5279. #------------------------------------------------------------------------------
  5280. #  データベースとゲームオブジェクトを管理するモジュールです。
  5281. #==============================================================================
  5282. module DataManager
  5283.   #--------------------------------------------------------------------------
  5284.   # ● 各種ゲームオブジェクトの作成 ★再定義
  5285.   #--------------------------------------------------------------------------
  5286.   def self.create_game_objects
  5287.     $game_temp          = Game_Temp.new
  5288.     $game_system        = Game_System.new
  5289.     $game_timer         = Game_Timer.new
  5290.     $game_message       = Game_Message.new
  5291.     $game_switches      = Game_Switches.new
  5292.     $game_variables     = Game_Variables.new
  5293.     $game_self_switches = Game_SelfSwitches.new
  5294.     $game_actors        = Game_Actors.new
  5295.     $game_party         = Game_Party.new
  5296.     $game_troop         = Game_Troop.new
  5297.     $game_map           = Game_Map.new
  5298.     $game_player        = Game_Player.new
  5299.     $sv_camera          = Battle_Camera.new
  5300.   end
  5301. end
  5302.  
  5303. #==============================================================================
  5304. # ■ BattleManager
  5305. #------------------------------------------------------------------------------
  5306. #  戦闘の進行を管理するモジュールです。
  5307. #==============================================================================
  5308. module BattleManager
  5309.   #--------------------------------------------------------------------------
  5310.   # ● エンカウント時の処理 ★再定義
  5311.   #--------------------------------------------------------------------------
  5312.   def self.on_encounter
  5313.     @preemptive = (rand < rate_preemptive)
  5314.     @surprise = (rand < rate_surprise && !@preemptive)
  5315.     $sv_camera.mirror = @surprise if N03::BACK_ATTACK
  5316.   end
  5317.   #--------------------------------------------------------------------------
  5318.   # ● 勝利の処理 ★再定義
  5319.   #--------------------------------------------------------------------------
  5320.   def self.process_victory
  5321.     $sv_camera.win_wait = true
  5322.   end  
  5323.   #--------------------------------------------------------------------------
  5324.   # ● 勝利
  5325.   #--------------------------------------------------------------------------
  5326.   def self.victory
  5327.     $sv_camera.win_wait = false
  5328.     N03.camera(nil, N03::BATTLE_CAMERA["戦闘終了時"].dup)
  5329.     for member in $game_party.members do member.sv.start_action(member.sv.win) if member.movable? end
  5330.     play_battle_end_me
  5331.     replay_bgm_and_bgs
  5332.     $game_message.add(sprintf(Vocab::Victory, $game_party.name))
  5333.     display_exp
  5334.     gain_gold
  5335.     gain_drop_items
  5336.     gain_exp
  5337.     SceneManager.return
  5338.     battle_end(0)
  5339.     return true
  5340.   end
  5341.   #--------------------------------------------------------------------------
  5342.   # ● 逃走の処理 ★再定義
  5343.   #--------------------------------------------------------------------------
  5344.   def self.process_escape
  5345.     $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
  5346.     success = @preemptive ? true : (rand < @escape_ratio)
  5347.     Sound.play_escape
  5348.     if success
  5349.       process_abort
  5350.       for member in $game_party.members do member.sv.start_action(member.sv.escape) if member.movable? end
  5351.     else
  5352.       @escape_ratio += 0.1
  5353.       $game_message.add('\.' + Vocab::EscapeFailure)
  5354.       $game_party.clear_actions
  5355.       for member in $game_party.members do member.sv.start_action(member.sv.escape_ng) if member.movable? end
  5356.     end
  5357.     wait_for_message
  5358.     return success
  5359.   end
  5360.   #--------------------------------------------------------------------------
  5361.   # ● 次のコマンド入力へ ★再定義
  5362.   #--------------------------------------------------------------------------
  5363.   def self.next_command
  5364.     begin
  5365.       if !actor || !actor.next_command
  5366.         $game_party.battle_members[@actor_index].sv.command_action = true
  5367.         @actor_index += 1
  5368.         if @actor_index >= $game_party.members.size
  5369.           for member in $game_party.battle_members.reverse
  5370.             break member.sv.start_action(member.sv.command_a) if member.inputable?
  5371.           end
  5372.           return false
  5373.         end
  5374.       end
  5375.     end until actor.inputable?
  5376.     actor.sv.start_action(actor.sv.command_b) if actor != nil && actor.inputable?
  5377.     if pre_actor
  5378.       pre_actor.sv.start_action(pre_actor.sv.command_a) if pre_actor != nil && pre_actor.inputable?
  5379.     end
  5380.     return true
  5381.   end
  5382.   #--------------------------------------------------------------------------
  5383.   # ● 前のコマンド入力へ ★再定義
  5384.   #--------------------------------------------------------------------------
  5385.   def self.prior_command
  5386.     begin
  5387.       if !actor || !actor.prior_command
  5388.         $game_party.battle_members[@actor_index].sv.command_action = false
  5389.         @actor_index -= 1
  5390.         if @actor_index < 0
  5391.           for member in $game_party.battle_members
  5392.             break member.sv.start_action(member.sv.command_a) if member.inputable?
  5393.           end
  5394.           return false
  5395.         end
  5396.       end
  5397.     end until actor.inputable?
  5398.     actor.make_actions if actor.inputable?
  5399.     actor.sv.start_action(actor.sv.command_b) if actor.inputable?
  5400.     after_actor.sv.start_action(after_actor.sv.command_a) if after_actor != nil && after_actor.inputable?
  5401.     return true
  5402.   end
  5403.   #--------------------------------------------------------------------------
  5404.   # ● コマンド入力前のアクターを取得
  5405.   #--------------------------------------------------------------------------
  5406.   def self.pre_actor
  5407.     return if @actor_index == 0
  5408.     $game_party.members[@actor_index - 1]
  5409.   end
  5410.   #--------------------------------------------------------------------------
  5411.   # ● コマンド入力後のアクターを取得
  5412.   #--------------------------------------------------------------------------
  5413.   def self.after_actor
  5414.     $game_party.members[@actor_index + 1]
  5415.   end
  5416.   #--------------------------------------------------------------------------
  5417.   # ● 戦闘行動者を前に追加
  5418.   #--------------------------------------------------------------------------
  5419.   def self.unshift_action_battlers(battler)
  5420.     @action_battlers.unshift(battler)
  5421.   end
  5422. end  
  5423.  
  5424. #==============================================================================
  5425. # ■ Game_Battler
  5426. #------------------------------------------------------------------------------
  5427. #  スプライトや行動に関するメソッドを追加したバトラーのクラスです。
  5428. #==============================================================================
  5429. class Game_Battler < Game_BattlerBase
  5430.   #--------------------------------------------------------------------------
  5431.   # ● 公開インスタンス変数
  5432.   #--------------------------------------------------------------------------
  5433.   attr_reader   :sv                     # サイドビューデータ
  5434.   attr_accessor :flash_flg              # 閃きフラグ
  5435.   #--------------------------------------------------------------------------
  5436.   # ● オブジェクト初期化
  5437.   #--------------------------------------------------------------------------
  5438.   alias initialize_game_battler_n03 initialize
  5439.   def initialize
  5440.     initialize_game_battler_n03
  5441.     @sv = SideView.new(self)
  5442.   end
  5443.   #--------------------------------------------------------------------------
  5444.   # ● 現在の戦闘行動を除去
  5445.   #--------------------------------------------------------------------------
  5446.   alias remove_current_action_game_battler_n03 remove_current_action
  5447.   def remove_current_action
  5448.     return @sv.derivation_skill_id = 0 if @sv.derivation_skill_id != 0
  5449.     remove_current_action_game_battler_n03
  5450.   end
  5451.   #--------------------------------------------------------------------------
  5452.   # ● ターン終了処理
  5453.   #--------------------------------------------------------------------------
  5454.   alias on_turn_end_game_battler_n03 on_turn_end
  5455.   def on_turn_end
  5456.     on_turn_end_game_battler_n03
  5457.     @sv.add_state = []
  5458.     @sv.result_damage = [@result.hp_damage, @result.mp_damage]
  5459.   end
  5460.   #--------------------------------------------------------------------------
  5461.   # ● パラメータ条件比較 data = [種別, 数値, 判別]
  5462.   #--------------------------------------------------------------------------
  5463.   def comparison_parameter(data)
  5464.     return true if data[0][0] == 0
  5465.     kind = data[0]
  5466.     num = data[1]
  5467.     select = data[2]
  5468.     case kind
  5469.     when  1 ; par = level
  5470.     when  2 ; par = mhp
  5471.     when  3 ; par = mmp
  5472.     when  4 ; par = hp
  5473.     when  5 ; par = mp
  5474.     when  6 ; par = tp
  5475.     when  7 ; par = atk
  5476.     when  8 ; par = self.def
  5477.     when  9 ; par = mat
  5478.     when 10 ; par = mdf
  5479.     when 11 ; par = agi
  5480.     when 12 ; par = luk
  5481.     end
  5482.     if num < 0
  5483.       case kind
  5484.       when  4 ; num = mhp * num / 100
  5485.       when  5 ; num = mmp * num / 100
  5486.       when  6 ; num = max_tp * num / 100
  5487.       end
  5488.       num = num.abs
  5489.     end  
  5490.     case select
  5491.     when  0 ; return par == num
  5492.     when  1 ; return par < num
  5493.     when  2 ; return par > num
  5494.     end
  5495.   end
  5496.   #--------------------------------------------------------------------------
  5497.   # ● 装備条件比較 data = [装備種別, タイプID]
  5498.   #--------------------------------------------------------------------------
  5499.   def comparison_equip(data)
  5500.     kind = data[0]
  5501.     items = weapons if kind == 0
  5502.     items = armors  if kind == 1
  5503.     for item in items
  5504.       for id in data[1]
  5505.         return true if id > 0 && item.is_a?(RPG::Weapon) && item == $data_weapons[id.abs]
  5506.         return true if id > 0 && item.is_a?(RPG::Armor) && item == $data_armors[id.abs]
  5507.         return true if id < 0 && item.is_a?(RPG::Weapon) && item.wtype_id == id.abs
  5508.         return true if id < 0 && item.is_a?(RPG::Armor) && item.stype_id == id.abs
  5509.       end
  5510.     end
  5511.     return false
  5512.   end
  5513.  
  5514. end  
  5515. #==============================================================================
  5516. # ■ Game_Actor
  5517. #------------------------------------------------------------------------------
  5518. #  アクターを扱うクラスです。
  5519. #==============================================================================
  5520. class Game_Actor < Game_Battler
  5521.   #--------------------------------------------------------------------------
  5522.   # ● 公開インスタンス変数
  5523.   #--------------------------------------------------------------------------
  5524.   attr_reader :actor_id                    # ID
  5525.   #--------------------------------------------------------------------------
  5526.   # ● ID
  5527.   #--------------------------------------------------------------------------
  5528.   def id
  5529.     return @actor_id
  5530.   end
  5531.   #--------------------------------------------------------------------------
  5532.   # ● スプライトを使うか? ★再定義
  5533.   #--------------------------------------------------------------------------
  5534.   def use_sprite?
  5535.     return true
  5536.   end
  5537.   #--------------------------------------------------------------------------
  5538.   # ● ダメージ効果の実行 ★再定義
  5539.   #--------------------------------------------------------------------------
  5540.   def perform_damage_effect
  5541.     return if !N03::ACTOR_DAMAGE
  5542.     $game_troop.screen.start_shake(5, 5, 10)
  5543.     @sprite_effect_type = :blink
  5544.     Sound.play_actor_damage
  5545.   end
  5546.  
  5547. end
  5548.  
  5549. #==============================================================================
  5550. # ■ Game_Enemy
  5551. #------------------------------------------------------------------------------
  5552. #  敵キャラを扱うクラスです。
  5553. #==============================================================================
  5554. class Game_Enemy < Game_Battler
  5555.   #--------------------------------------------------------------------------
  5556.   # ● 公開インスタンス変数
  5557.   #--------------------------------------------------------------------------
  5558.   attr_reader :enemy_id                    # ID
  5559.   #--------------------------------------------------------------------------
  5560.   # ● ID
  5561.   #--------------------------------------------------------------------------
  5562.   def id
  5563.     return @enemy_id
  5564.   end
  5565.   #--------------------------------------------------------------------------
  5566.   # ● レベル
  5567.   #--------------------------------------------------------------------------
  5568.   def level
  5569.     return @sv.level
  5570.   end
  5571.   #--------------------------------------------------------------------------
  5572.   # ● ダメージ効果の実行 ★再定義
  5573.   #--------------------------------------------------------------------------
  5574.   def perform_damage_effect
  5575.     return if !N03::ENEMY_DAMAGE
  5576.     @sprite_effect_type = :blink
  5577.     Sound.play_enemy_damage
  5578.   end
  5579.   #--------------------------------------------------------------------------
  5580.   # ● 武器
  5581.   #--------------------------------------------------------------------------
  5582.   def weapons
  5583.     weapon1 = $data_weapons[@sv.enemy_weapon1_id]
  5584.     weapon2 = $data_weapons[@sv.enemy_weapon2_id]
  5585.     return [weapon1, weapon2]
  5586.   end
  5587.   #--------------------------------------------------------------------------
  5588.   # ● 防具
  5589.   #--------------------------------------------------------------------------
  5590.   def armors
  5591.     return [$data_armors[@sv.enemy_shield_id]]
  5592.   end
  5593.   #--------------------------------------------------------------------------
  5594.   # ● 二刀流の判定
  5595.   #--------------------------------------------------------------------------
  5596.   def dual_wield?
  5597.     return $data_weapons[@sv.enemy_weapon2_id] != nil
  5598.   end
  5599.   #--------------------------------------------------------------------------
  5600.   # ● バトラー画像変更
  5601.   #--------------------------------------------------------------------------
  5602.   def graphics_change(battler_name)
  5603.     @battler_name = battler_name
  5604.   end
  5605.   #--------------------------------------------------------------------------
  5606.   # ● 通常攻撃 アニメーション ID の取得
  5607.   #--------------------------------------------------------------------------
  5608.   def atk_animation_id1
  5609.     return weapons[0].animation_id if weapons[0]
  5610.     return weapons[1] ? 0 : 1
  5611.   end
  5612.   #--------------------------------------------------------------------------
  5613.   # ● 通常攻撃 アニメーション ID の取得(二刀流:武器2)
  5614.   #--------------------------------------------------------------------------
  5615.   def atk_animation_id2
  5616.     return weapons[1] ? weapons[1].animation_id : 0
  5617.   end
  5618. end
  5619.  
  5620. #==============================================================================
  5621. # ■ Sprite_Base
  5622. #------------------------------------------------------------------------------
  5623. #  アニメーションの表示処理を追加したスプライトのクラスです。
  5624. #==============================================================================
  5625. class Sprite_Base < Sprite
  5626.   #--------------------------------------------------------------------------
  5627.   # ● アニメーションの座標更新 (ホーミングあり)
  5628.   #--------------------------------------------------------------------------
  5629.   def update_animation_position_horming
  5630.     return if @action_end_cancel
  5631.     ani_ox_set if @horming
  5632.     camera_zoom = $sv_camera.zoom
  5633.     camera_zoom = 1 if @move_anime
  5634.     kind = 1
  5635.     kind = -1 if @ani_mirror && !@anime_no_mirror
  5636.     cell_data = @animation.frames[@animation.frame_max - (@ani_duration + @ani_rate - 1) / @ani_rate].cell_data
  5637.     for i in 0..15
  5638.       @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
  5639.       @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
  5640.     end
  5641.   end
  5642.   #--------------------------------------------------------------------------
  5643.   # ● アニメーション元の座標をセット
  5644.   #--------------------------------------------------------------------------
  5645.   def ani_ox_set
  5646.     if !SceneManager.scene_is?(Scene_Battle)
  5647.       @real_x = x
  5648.       @real_y = y
  5649.     end
  5650.     @ani_ox = @real_x - ox + width / 2
  5651.     @ani_oy = @real_y - oy + height / 2
  5652.     @ani_oy -= height / 2 if @animation.position == 0
  5653.     @ani_oy += height / 2 if @animation.position == 2
  5654.   end
  5655.   #--------------------------------------------------------------------------
  5656.   # ● アニメーションの更新
  5657.   #--------------------------------------------------------------------------
  5658.   alias update_animation_sprite_base_n03 update_animation
  5659.   def update_animation
  5660.     update_animation_position_horming if animation? && SceneManager.scene_is?(Scene_Battle) && @animation.position != 3
  5661.     update_animation_sprite_base_n03
  5662.   end
  5663.   #--------------------------------------------------------------------------
  5664.   # ● アニメーションの原点設定 ★再定義
  5665.   #--------------------------------------------------------------------------
  5666.   def set_animation_origin
  5667.     return ani_ox_set if @animation.position != 3
  5668.     if viewport == nil
  5669.       @ani_ox = Graphics.width / 2
  5670.       @ani_oy = Graphics.height / 2
  5671.     else
  5672.       @ani_ox = viewport.rect.width / 2
  5673.       @ani_oy = viewport.rect.height / 2
  5674.     end
  5675.   end
  5676.   #--------------------------------------------------------------------------
  5677.   # ● アニメーションスプライトの設定 ★再定義
  5678.   #--------------------------------------------------------------------------
  5679.   def animation_set_sprites(frame)
  5680.     camera_zoom = 1
  5681.     camera_zoom = $sv_camera.zoom if @anime_camera_zoom && @animation.position != 3 && SceneManager.scene_is?(Scene_Battle)
  5682.     camera_x = $sv_camera.x
  5683.     camera_y = $sv_camera.y
  5684.     camera_x = camera_y = 0 if @animation.position == 3 or !SceneManager.scene_is?(Scene_Battle)
  5685.     plus_z = 5
  5686.     plus_z = 1000 if @animation.position == 3
  5687.     plus_z = -17 if @plus_z != nil && @plus_z == false
  5688.     plus_z = -self.z + 10 if @plus_z != nil && @plus_z == false && @animation.position == 3
  5689.     cell_data = frame.cell_data
  5690.     @ani_sprites.each_with_index do |sprite, i|
  5691.       next unless sprite
  5692.       pattern = cell_data[i, 0]
  5693.       if !pattern || pattern < 0
  5694.         sprite.visible = false
  5695.         next
  5696.       end
  5697.       sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
  5698.       sprite.visible = true
  5699.       sprite.src_rect.set(pattern % 5 * 192,
  5700.         pattern % 100 / 5 * 192, 192, 192)
  5701.       if @ani_mirror && !@anime_no_mirror
  5702.         sprite.x = (@ani_ox - cell_data[i, 1] - camera_x) * camera_zoom
  5703.         sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  5704.         sprite.angle = (360 - cell_data[i, 4])
  5705.         sprite.mirror = (cell_data[i, 5] == 0)
  5706.       else
  5707.         sprite.x = (@ani_ox + cell_data[i, 1] - camera_x) * camera_zoom
  5708.         sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
  5709.         sprite.angle = cell_data[i, 4]
  5710.         sprite.mirror = (cell_data[i, 5] == 1)
  5711.       end
  5712.       sprite.z = self.z + plus_z + i
  5713.       sprite.ox = 96
  5714.       sprite.oy = 96
  5715.       sprite.zoom_x = cell_data[i, 3] * camera_zoom / 100.0
  5716.       sprite.zoom_y = cell_data[i, 3] * camera_zoom/ 100.0
  5717.       sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
  5718.       sprite.blend_type = cell_data[i, 7]
  5719.     end
  5720.   end
  5721.   #--------------------------------------------------------------------------
  5722.   # ● 子スプライトフラグ
  5723.   #--------------------------------------------------------------------------
  5724.   def set(battler, horming, camera_zoom, no_mirror)
  5725.     @battler = battler
  5726.     @next = true
  5727.     self.bitmap = Bitmap.new(@battler.sv.cw, @battler.sv.ch)
  5728.     self.ox = bitmap.width / 2
  5729.     self.oy = bitmap.height
  5730.     @horming = horming
  5731.     @anime_camera_zoom = camera_zoom
  5732.     @anime_no_mirror = no_mirror
  5733.     @battler.sv.reset_anime_data
  5734.   end  
  5735.   #--------------------------------------------------------------------------
  5736.   # ● 子スプライト座標セット
  5737.   #--------------------------------------------------------------------------
  5738.   def set_position(z, zoom_x, zoom_y, real_x, real_y)
  5739.     self.z = z
  5740.     self.zoom_x = zoom_x
  5741.     self.zoom_y = zoom_y
  5742.     @real_x = real_x
  5743.     @real_y = real_y
  5744.   end
  5745.   #--------------------------------------------------------------------------
  5746.   # ● 他スプライトへのタイミング処理
  5747.   #--------------------------------------------------------------------------
  5748.   def other_process_timing(timing)
  5749.     se_flag = true
  5750.     se_flag = @se_flag if @se_flag != nil
  5751.     @battler.sv.timing.push([se_flag, timing.dup])
  5752.   end
  5753.   #--------------------------------------------------------------------------
  5754.   # ● 他バトラーへのタイミング処理
  5755.   #--------------------------------------------------------------------------
  5756.   def target_battler_process_timing(timing)
  5757.     for target in @timing_targets
  5758.       target.sv.timing.push([false, timing.dup])
  5759.     end  
  5760.   end
  5761.   #--------------------------------------------------------------------------
  5762.   # ● SE とフラッシュのタイミング処理
  5763.   #--------------------------------------------------------------------------
  5764.   alias animation_process_timing_sprite_base_n03 animation_process_timing
  5765.   def animation_process_timing(timing)
  5766.     target_battler_process_timing(timing) if @timing_targets && @timing_targets != []
  5767.     return other_process_timing(timing) if @next != nil
  5768.     animation_process_timing_sprite_base_n03(timing)
  5769.   end
  5770.   #--------------------------------------------------------------------------
  5771.   # ● アニメーションの解放
  5772.   #--------------------------------------------------------------------------
  5773.   alias dispose_animation_sprite_base_n03 dispose_animation
  5774.   def dispose_animation
  5775.     dispose_animation_sprite_base_n03
  5776.   end
  5777. end
  5778.  
  5779.  
  5780. #==============================================================================
  5781. # ■ Sprite_Battler
  5782. #------------------------------------------------------------------------------
  5783. #  バトラー表示用のスプライトです。
  5784. #==============================================================================
  5785. class Sprite_Battler < Sprite_Base
  5786.   #--------------------------------------------------------------------------
  5787.   # ● 公開インスタンス変数 
  5788.   #--------------------------------------------------------------------------
  5789.   attr_accessor   :removing             # パーティ離脱中
  5790.   #--------------------------------------------------------------------------
  5791.   # ● オブジェクト初期化
  5792.   #--------------------------------------------------------------------------
  5793.   alias initialize_sprite_battler_n03 initialize
  5794.   def initialize(viewport, battler = nil)
  5795.     initialize_sprite_battler_n03(viewport, battler)
  5796.     @real_x = @real_y = 0
  5797.     update_bitmap if @battler != nil
  5798.   end
  5799.   #--------------------------------------------------------------------------
  5800.   # ● アニメーションの開始 ★再定義
  5801.   #--------------------------------------------------------------------------
  5802.   def start_animation(animation, mirror = false)
  5803.     return next_animation(animation, mirror) if animation?
  5804.     @animation = animation
  5805.     if @animation
  5806.       @horming = @battler.sv.anime_horming
  5807.       @anime_camera_zoom = @battler.sv.anime_camera_zoom
  5808.       @anime_no_mirror = @battler.sv.anime_no_mirror
  5809.       @timing_targets = @battler.sv.timing_targets
  5810.       @plus_z = @battler.sv.anime_plus_z
  5811.       @battler.sv.reset_anime_data
  5812.       @ani_mirror = mirror
  5813.       set_animation_rate
  5814.       @ani_duration = @animation.frame_max * @ani_rate + 1
  5815.       load_animation_bitmap
  5816.       make_animation_sprites
  5817.       set_animation_origin
  5818.     end
  5819.   end
  5820.   #--------------------------------------------------------------------------
  5821.   # ● 次のアニメを開始
  5822.   #--------------------------------------------------------------------------
  5823.   def next_animation(animation, mirror)
  5824.     @next_anime = [] if @next_anime == nil
  5825.     @next_anime.push(Sprite_Base.new(viewport))
  5826.     @next_anime[@next_anime.size - 1].set(battler, @battler.sv.anime_horming, @battler.sv.anime_camera_zoom, @battler.sv.anime_no_mirror)
  5827.     @next_anime[@next_anime.size - 1].set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y)
  5828.     @next_anime[@next_anime.size - 1].start_animation(animation, mirror)
  5829.   end
  5830.   #--------------------------------------------------------------------------
  5831.   # ● 影グラフィック作成
  5832.   #--------------------------------------------------------------------------
  5833.   def create_shadow
  5834.     reset_shadow
  5835.     return if @battler.sv.shadow == false
  5836.     @shadow = Sprite.new(viewport) if @shadow == nil
  5837.     @shadow.bitmap = Cache.character(@battler.sv.shadow)
  5838.     @shadow.ox = @shadow.bitmap.width / 2
  5839.     @shadow.oy = @shadow.bitmap.height / 2
  5840.   end
  5841.   #--------------------------------------------------------------------------
  5842.   # ● 影グラフィック初期化
  5843.   #--------------------------------------------------------------------------
  5844.   def reset_shadow
  5845.     return if @shadow == nil
  5846.     @shadow.dispose
  5847.     @shadow = nil
  5848.   end  
  5849.   #--------------------------------------------------------------------------
  5850.   # ● 転送元ビットマップの更新 ★再定義
  5851.   #--------------------------------------------------------------------------
  5852.   def update_bitmap
  5853.     update_bitmap_enemy if !@battler.actor?
  5854.     update_bitmap_actor if @battler.actor?
  5855.     update_src_rect if @battler != nil
  5856.     update_color if @battler != nil
  5857.   end
  5858.   #--------------------------------------------------------------------------
  5859.   # ● 転送元ビットマップ:エネミー
  5860.   #--------------------------------------------------------------------------
  5861.   def update_bitmap_enemy
  5862.     if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
  5863.       @battler_name = @battler.battler_name
  5864.       @battler_hue = @battler.battler_hue
  5865.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  5866.       @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  5867.       self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue)
  5868.       @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  5869.       create_shadow
  5870.       init_visibility
  5871.       @battler_id = @battler.id
  5872.     end
  5873.   end  
  5874.   #--------------------------------------------------------------------------
  5875.   # ● 転送元ビットマップ:アクター
  5876.   #--------------------------------------------------------------------------
  5877.   def update_bitmap_actor
  5878.     if @battler.character_name != @battler_name or @battler.character_index != @battler_index
  5879.       @battler_name = @battler.character_name
  5880.       @battler_index = @battler.character_index
  5881.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  5882.       @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
  5883.       self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index)
  5884.       @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
  5885.       create_shadow
  5886.       init_visibility
  5887.       @battler_id = @battler.id
  5888.     end
  5889.   end
  5890.   #--------------------------------------------------------------------------
  5891.   # ● 可視状態の初期化 ★再定義
  5892.   #--------------------------------------------------------------------------
  5893.   def init_visibility
  5894.     @battler_visible = @battler.alive?
  5895.     @battler_visible = true if @battler.sv.state(1) != "敵コラプス"
  5896.     @battler_visible = false if @battler.hidden?
  5897.     @battler.sv.opacity = 0 unless @battler_visible
  5898.     self.opacity = 0 unless @battler_visible
  5899.     self.opacity = 255 if @battler_visible
  5900.     @battler.sv.weapon_visible = @battler_visible
  5901.   end
  5902.   #--------------------------------------------------------------------------
  5903.   # ● 転送元矩形の更新
  5904.   #--------------------------------------------------------------------------
  5905.   def update_src_rect
  5906.     return if @battler.sv.collapse
  5907.     if @battler_graphic_file_index != @battler.sv.graphic_file_index
  5908.       @battler_graphic_file_index = @battler.sv.graphic_file_index
  5909.       self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index) if @battler.actor?
  5910.       self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue) if !@battler.actor?
  5911.       @battler.sv.set_graphics(self.bitmap.width, self.bitmap.height)
  5912.     end
  5913.     anime_off if @battler.sv.anime_off
  5914.     self.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  5915.     self.opacity = @battler.sv.opacity if @battler_visible
  5916.     set_process_timing(@battler.sv.timing) if @battler && @battler.sv.timing != []
  5917.   end
  5918.   #--------------------------------------------------------------------------
  5919.   # ● 位置の更新 ★再定義
  5920.   #--------------------------------------------------------------------------
  5921.   def update_position
  5922.     @real_x = @battler.sv.x / 100
  5923.     @real_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust)/ 100
  5924.     self.x = @real_x - $sv_camera.x
  5925.     self.y = @real_y - $sv_camera.y
  5926.     self.z = @battler.sv.z - @battler.sv.c / 100
  5927.     if @battler.sv.h <= 0
  5928.       self.x += $sv_camera.sx / 100
  5929.       self.y += $sv_camera.sy / 100
  5930.     end  
  5931.     self.x *= $sv_camera.zoom
  5932.     self.y *= $sv_camera.zoom
  5933.   end
  5934.   #--------------------------------------------------------------------------
  5935.   # ● 原点の更新 ★再定義
  5936.   #--------------------------------------------------------------------------
  5937.   def update_origin
  5938.     return if !bitmap or @battler.sv.collapse
  5939.     self.ox = @battler.sv.ox
  5940.     self.oy = @battler.sv.oy
  5941.     self.angle = @battler.sv.angle
  5942.     self.zoom_x = @battler.sv.zoom_x * $sv_camera.zoom
  5943.     self.zoom_y = @battler.sv.zoom_y * $sv_camera.zoom
  5944.     self.mirror = @battler.sv.mirror if !@graphic_mirror_flag
  5945.     self.mirror = !@battler.sv.mirror if @graphic_mirror_flag
  5946.   end
  5947.   #--------------------------------------------------------------------------
  5948.   # ● 影グラフィックの更新
  5949.   #--------------------------------------------------------------------------
  5950.   def update_shadow
  5951.     @shadow.visible = @battler.sv.shadow_visible
  5952.     @shadow.opacity = @battler.sv.opacity if @battler.sv.opacity_data[3]
  5953.     @shadow.opacity = self.opacity if !@battler.sv.opacity_data[3]
  5954.     @shadow.x = @real_x - $sv_camera.x
  5955.     @shadow.y = (@battler.sv.y - @battler.sv.c)/ 100 - $sv_camera.y
  5956.     @shadow.z = @battler.sv.z - 10
  5957.     @shadow.zoom_x = $sv_camera.zoom
  5958.     @shadow.zoom_y = $sv_camera.zoom
  5959.     @shadow.x += $sv_camera.sx / 100
  5960.     @shadow.y += $sv_camera.sy / 100
  5961.     @shadow.x *= $sv_camera.zoom
  5962.     @shadow.y *= $sv_camera.zoom
  5963.     @shadow.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  5964.   end
  5965.   #--------------------------------------------------------------------------
  5966.   # ● ふきだしの更新
  5967.   #--------------------------------------------------------------------------
  5968.   def update_balloon
  5969.     if @battler.sv.balloon_data == [] && @balloon
  5970.       @balloon_data = []
  5971.       @balloon.dispose
  5972.       return @balloon = nil
  5973.     elsif @battler.sv.balloon_data != [] && @battler.sv.balloon_data != @balloon_data
  5974.       @balloon_data = @battler.sv.balloon_data
  5975.       @balloon = Sprite.new(self.viewport)
  5976.       @balloon.bitmap = Cache.system("Balloon")
  5977.       @balloon.zoom_x = @balloon_data[3]
  5978.       @balloon.zoom_y = @balloon_data[3]
  5979.       @balloon.ox = 32 if @battler.sv.mirror
  5980.       @balloon.oy = 16
  5981.       @balloon_count = 0
  5982.     end
  5983.     return if !@balloon
  5984.     @balloon.opacity = self.opacity
  5985.     @balloon.x = self.x
  5986.     @balloon.y = self.y - @battler.sv.ch * $sv_camera.zoom
  5987.     @balloon.z = self.z + 20
  5988.     @balloon.src_rect.set(32 + @balloon_count / @balloon_data[2] * 32, @balloon_data[1] * 32, 32, 32) if @balloon_count % @balloon_data[2] == 0
  5989.     @balloon.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  5990.     @balloon_count += 1
  5991.     @balloon_count = 0 if @balloon_count == @balloon_data[2] * 7
  5992.   end
  5993.   #--------------------------------------------------------------------------
  5994.   # ● 色調変更の更新
  5995.   #--------------------------------------------------------------------------
  5996.   def update_color
  5997.     color_set if @battler.sv.color_set != []
  5998.     return if @color_data == nil
  5999.     @color_data[4] -= 1
  6000.     if @color_data[4] == 0 && @color_data[5] != 0
  6001.       @color_data[4] = @color_data[5]
  6002.       @color_data[5] = 0
  6003.       @color_data[6] = [0,0,0,0]
  6004.     elsif @color_data[4] == 0
  6005.       @remain_color_data = @color_data
  6006.       @battler.sv.color = @color_data.dup
  6007.       return @color_data = nil
  6008.     end  
  6009.     for i in 0..3
  6010.       @color_data[i] = (@color_data[i] * (@color_data[4] - 1) + @color_data[6][i]) / @color_data[4]
  6011.     end  
  6012.     @battler.sv.color = @color_data.dup
  6013.     self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  6014.   end
  6015.   #--------------------------------------------------------------------------
  6016.   # ● 残像の更新
  6017.   #--------------------------------------------------------------------------
  6018.   def update_mirage
  6019.     if @battler.sv.mirage == [] && @mirages
  6020.       @mirage_data = []
  6021.       for mirage in @mirages do mirage.dispose end
  6022.       return @mirages = nil
  6023.     elsif @battler.sv.mirage != [] && @battler.sv.mirage != @mirage_data
  6024.       @mirage_data = @battler.sv.mirage
  6025.       @mirages = []
  6026.       for i in 0...@mirage_data[1] do @mirages[i] = Sprite.new(self.viewport) end
  6027.       @mirage_count = 0
  6028.     end
  6029.     return if !@mirages
  6030.     @mirage_count += 1
  6031.     @mirage_count = 0 if @mirage_count == @mirage_data[2] * @mirages.size
  6032.     for i in [email]0...@mirages.size[/email]
  6033.       mirage_body(@mirages[i], @mirage_data[4]) if @mirage_count == 1 + i * @mirage_data[2]
  6034.     end
  6035.   end
  6036.   #--------------------------------------------------------------------------
  6037.   # ● 残像本体
  6038.   #--------------------------------------------------------------------------
  6039.   def mirage_body(body, opacity)
  6040.     body.bitmap = self.bitmap.dup
  6041.     body.x = self.x
  6042.     body.y = self.y
  6043.     body.ox = self.ox
  6044.     body.oy = self.oy
  6045.     body.z = self.z - 20
  6046.     body.mirror = self.mirror
  6047.     body.angle = self.angle
  6048.     body.opacity = opacity * self.opacity / 255
  6049.     body.zoom_x = self.zoom_x
  6050.     body.zoom_y = self.zoom_y   
  6051.     body.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
  6052.     body.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  6053.   end   
  6054.   #--------------------------------------------------------------------------
  6055.   # ● 次のアニメを更新
  6056.   #--------------------------------------------------------------------------
  6057.   def update_next_anime
  6058.     return if !@next_anime
  6059.     for anime in @next_anime
  6060.       anime.update
  6061.       anime.set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y) if @horming
  6062.       anime.dispose if !anime.animation?
  6063.       @next_anime.delete(anime) if !anime.animation?
  6064.     end  
  6065.   end
  6066.   #--------------------------------------------------------------------------
  6067.   # ● フレーム更新
  6068.   #--------------------------------------------------------------------------
  6069.   alias update_sprite_battler_n03 update
  6070.   def update
  6071.     @battler.sv.update if @battler
  6072.     update_sprite_battler_n03
  6073.     update_next_anime
  6074.     update_shadow  if @battler && @shadow
  6075.     update_mirage  if @battler
  6076.     update_balloon if @battler
  6077.     update_remove if @battler && @removing && @battler.sv.change_up
  6078.   end
  6079.   #--------------------------------------------------------------------------
  6080.   # ● 戦闘アニメ消去
  6081.   #--------------------------------------------------------------------------
  6082.   def anime_off
  6083.     @battler.sv.anime_off = false
  6084.     dispose_animation
  6085.     for anime in @next_anime do anime.dispose_animation end if @next_anime
  6086.   end
  6087.   #--------------------------------------------------------------------------
  6088.   # ● バトラー入れ替え
  6089.   #--------------------------------------------------------------------------
  6090.   def remove
  6091.     @battler.sv.start_action(@battler.sv.remove_action)
  6092.     $sv_camera.wait = 40
  6093.     @battler.sv.add_action("eval('set_change')")
  6094.     @removing = true
  6095.   end
  6096.   #--------------------------------------------------------------------------
  6097.   # ● バトラー入れ替えの更新
  6098.   #--------------------------------------------------------------------------
  6099.   def update_remove
  6100.     @battler.sv.change_up = false
  6101.     @removing = false
  6102.     @battler = nil
  6103.   end  
  6104.   #--------------------------------------------------------------------------
  6105.   # ● バトラー加入
  6106.   #--------------------------------------------------------------------------
  6107.   def join(join_battler)
  6108.     $sv_camera.wait = 30
  6109.     @battler = join_battler
  6110.     @battler_name = @battler.character_name
  6111.     @battler_index = @battler.character_index
  6112.     @battler_graphic_file_index = @battler.sv.graphic_file_index
  6113.     self.bitmap = Cache.character(@battler_name)
  6114.     @battler.sv.setup(self.bitmap.width, self.bitmap.height, true)
  6115.     create_shadow
  6116.     init_visibility
  6117.   end
  6118.   #--------------------------------------------------------------------------
  6119.   # ● 通常の設定に戻す ★再定義
  6120.   #--------------------------------------------------------------------------
  6121.   def revert_to_normal
  6122.     self.blend_type = 0
  6123.     self.opacity = 255
  6124.   end
  6125.   #--------------------------------------------------------------------------
  6126.   # ● 崩壊エフェクトの更新
  6127.   #--------------------------------------------------------------------------
  6128.   alias update_collapse_sprite_battler_n03 update_collapse
  6129.   def update_collapse
  6130.     return if @battler.sv.state(1) != "敵コラプス"
  6131.     update_collapse_sprite_battler_n03
  6132.     @battler.sv.weapon_visible = false
  6133.   end
  6134.   #--------------------------------------------------------------------------
  6135.   # ● ボス崩壊エフェクトの更新 ★再定義
  6136.   #--------------------------------------------------------------------------
  6137.   def update_boss_collapse
  6138.     @effect_duration = @battler.sv.ch if @effect_duration >= @battler.sv.ch
  6139.     alpha = @effect_duration * 120 / @battler.sv.ch
  6140.     self.ox = @battler.sv.cw / 2 + @effect_duration % 2 * 4 - 2
  6141.     self.blend_type = 1
  6142.     self.color.set(255, 255, 255, 255 - alpha)
  6143.     self.opacity = alpha
  6144.     self.src_rect.y -= 1
  6145.     Sound.play_boss_collapse2 if @effect_duration % 20 == 19
  6146.   end
  6147.   #--------------------------------------------------------------------------
  6148.   # ● 別スプライトからのタイミング処理
  6149.   #--------------------------------------------------------------------------
  6150.   def set_process_timing(timing_data)
  6151.     for data in timing_data
  6152.       set_timing(data[0],data[1])
  6153.     end
  6154.     @battler.sv.timing = []
  6155.   end
  6156.   #--------------------------------------------------------------------------
  6157.   # ● タイミング処理
  6158.   #--------------------------------------------------------------------------
  6159.   def set_timing(se_flag, data)
  6160.     @ani_rate = 4
  6161.     data.se.play if se_flag
  6162.     case data.flash_scope
  6163.     when 1 ;self.flash(data.flash_color, data.flash_duration * @ani_rate)
  6164.     when 2 ;viewport.flash(data.flash_color, data.flash_duration * @ani_rate) if viewport
  6165.     when 3 ;self.flash(nil, data.flash_duration * @ani_rate)
  6166.     end
  6167.   end
  6168.   #--------------------------------------------------------------------------
  6169.   # ● 色調変更
  6170.   #--------------------------------------------------------------------------
  6171.   def color_set
  6172.     set = @battler.sv.color_set
  6173.     @battler.sv.color_set= []
  6174.     set[4] = 1 if set[4] == 0
  6175.     @remain_color_data = [0,0,0,0] if @remain_color_data == nil
  6176.     @color_data = @remain_color_data
  6177.     @color_data[4] = set[4]
  6178.     @color_data[5] = set[5]
  6179.     @color_data[6] = set
  6180.   end
  6181.   #--------------------------------------------------------------------------
  6182.   # ● 解放
  6183.   #--------------------------------------------------------------------------
  6184.   alias dispose_sprite_battler_n03 dispose
  6185.   def dispose
  6186.     dispose_sprite_battler_n03
  6187.     @shadow.dispose if @shadow != nil
  6188.     @balloon.dispose if @balloon != nil
  6189.     for mirage in @mirages do mirage.dispose end if @mirages != nil
  6190.     for anime in @next_anime do anime.dispose end if @next_anime
  6191.   end
  6192. end
  6193.  
  6194.  
  6195. #==============================================================================
  6196. # ■ Spriteset_Battle
  6197. #------------------------------------------------------------------------------
  6198. #  バトル画面のスプライトをまとめたクラスです。
  6199. #==============================================================================
  6200. class Spriteset_Battle
  6201.   #--------------------------------------------------------------------------
  6202.   # ● 戦闘背景(床)スプライトの作成 ★再定義
  6203.   #--------------------------------------------------------------------------
  6204.   def create_battleback1
  6205.     @back1_sprite = Sprite_Battle_Back.new(@viewport1, 1, battleback1_name)
  6206.     @back1_sprite.set_graphics(battleback1_bitmap) if battleback1_name != nil
  6207.     @back1_sprite.z = 0
  6208.   end
  6209.   #--------------------------------------------------------------------------
  6210.   # ● 戦闘背景(壁)スプライトの作成 ★再定義
  6211.   #--------------------------------------------------------------------------
  6212.   def create_battleback2
  6213.     @back2_sprite = Sprite_Battle_Back.new(@viewport1, 2, battleback2_name)
  6214.     @back2_sprite.set_graphics(battleback2_bitmap) if battleback2_name != nil
  6215.     @back2_sprite.z = 1
  6216.   end
  6217.   #--------------------------------------------------------------------------
  6218.   # ● アクタースプライトの作成 ★再定義
  6219.   #--------------------------------------------------------------------------
  6220.   def create_actors
  6221.     @actor_sprites = []
  6222.     for i in 0...$game_party.max_battle_members
  6223.       @actor_sprites[i] = Sprite_Battler.new(@viewport1, $game_party.members[i])
  6224.     end
  6225.     @effect_sprites = Spriteset_Sideview.new(@viewport1)
  6226.   end
  6227.   #--------------------------------------------------------------------------
  6228.   # ● アクタースプライトの更新 ★再定義
  6229.   #--------------------------------------------------------------------------
  6230.   def update_actors
  6231.     @actor_sprites.each_with_index do |sprite, i|
  6232.       sprite_join($game_party.members[i], sprite) if sprite.battler == nil && sprite.battler != $game_party.members[i]
  6233.       sprite.remove if sprite.battler != nil && !sprite.removing && sprite.battler != $game_party.members[i]
  6234.       sprite.update
  6235.     end
  6236.     @effect_sprites.update
  6237.     update_program
  6238.   end
  6239.   #--------------------------------------------------------------------------
  6240.   # ● メンバーを加える
  6241.   #--------------------------------------------------------------------------
  6242.   def sprite_join(member, sprite)
  6243.     for sp in @actor_sprites
  6244.       sp.update_remove if member == sp.battler && !sp.battler.sv.change_up
  6245.     end
  6246.     sprite.join(member)
  6247.   end
  6248.   #--------------------------------------------------------------------------
  6249.   # ● バトルプログラムの更新
  6250.   #--------------------------------------------------------------------------
  6251.   def update_program
  6252.     return if $sv_camera.program_scroll == []
  6253.     for data in  $sv_camera.program_scroll
  6254.       @back1_sprite.start_back_data(data) if data[2] == 1
  6255.       @back2_sprite.start_back_data(data) if data[2] == 2
  6256.     end
  6257.     $sv_camera.program_scroll = []
  6258.   end
  6259.   #--------------------------------------------------------------------------
  6260.   # ● ヒット時の戦闘アニメ実行
  6261.   #--------------------------------------------------------------------------
  6262.   def set_hit_animation(battler, weapon_index, hit_targets, miss)
  6263.     @effect_sprites.set_hit_animation(battler, weapon_index, hit_targets, miss)
  6264.   end
  6265.   #--------------------------------------------------------------------------
  6266.   # ● ダメージPOP
  6267.   #--------------------------------------------------------------------------
  6268.   def set_damage_pop(target)
  6269.     @effect_sprites.set_damage_pop(target)
  6270.   end
  6271.   #--------------------------------------------------------------------------
  6272.   # ● 解放
  6273.   #--------------------------------------------------------------------------
  6274.   alias dispose_spriteset_battle_n03 dispose
  6275.   def dispose
  6276.     dispose_spriteset_battle_n03
  6277.     @effect_sprites.dispose
  6278.   end
  6279.  
  6280.  
  6281.  
  6282. end
  6283.  
  6284.  
  6285. #==============================================================================
  6286. # ■ Window_BattleLog
  6287. #------------------------------------------------------------------------------
  6288. #  戦闘の進行を実況表示するウィンドウです。
  6289. #==============================================================================
  6290. class Window_BattleLog < Window_Selectable
  6291.   #--------------------------------------------------------------------------
  6292.   # ● ウェイト ★再定義
  6293.   #--------------------------------------------------------------------------
  6294.   def wait
  6295.   end
  6296.   #--------------------------------------------------------------------------
  6297.   # ● ウェイトとクリア ★再定義
  6298.   #--------------------------------------------------------------------------
  6299.   def wait_and_clear
  6300.     $sv_camera.wait = 10
  6301.   end
  6302.   #--------------------------------------------------------------------------
  6303.   # ● 行動結果の表示 ★再定義
  6304.   #--------------------------------------------------------------------------
  6305.   def display_action_results(target, item)
  6306.     if target.result.used
  6307.       last_line_number = line_number
  6308.       display_critical(target, item)
  6309.       display_damage(target, item)
  6310.       display_affected_status(target, item)
  6311.       display_failure(target, item)
  6312.     end
  6313.     off if !N03::BATTLE_LOG
  6314.   end
  6315.   #--------------------------------------------------------------------------
  6316.   # ● ウインドウ非表示
  6317.   #--------------------------------------------------------------------------
  6318.   def off
  6319.     @back_sprite.visible = self.visible = false
  6320.   end
  6321. end
  6322. #==============================================================================
  6323. # ■ Game_Interpreter
  6324. #------------------------------------------------------------------------------
  6325. #  イベントコマンドを実行するインタプリタです。
  6326. #==============================================================================
  6327. class Game_Interpreter
  6328.   #--------------------------------------------------------------------------
  6329.   # ● スイッチの操作
  6330.   #--------------------------------------------------------------------------
  6331.   alias command_121_game_interpreter_n03 command_121
  6332.   def command_121
  6333.     command_121_game_interpreter_n03
  6334.     $sv_camera.program_check
  6335.   end
  6336. end




Lv1.梦旅人

梦石
0
星屑
50
在线时间
92 小时
注册时间
2013-2-23
帖子
130
来自 2楼
发表于 2014-4-22 03:02:27 | 只看该作者
本帖最后由 sh0016 于 2014-4-22 03:05 编辑

随便看了一下发现超级麻烦......个人认为比起画面的华丽度应该更注重剧情跟游戏性......当然这是个人自由就当我什么都没说← ←

有几点建议给LZ:
1.贴脚本请用“代码”,打字时上排找一下就有。
  1. 就像这样,用下面复制方便贴很长的脚本
复制代码
2.如果不懂外语并找不到相关说明或翻译建议找别的,特别是横向脚本很多
请左转ACE图书馆:http://rpg.blue/thread-341966-1-1.html
另附中文的横版战斗脚本:http://rpg.blue/thread-216673-1-1.html
3.在提问前请试着搜下论坛资源,图书馆里也能找到很多东西,比起干等别人来解答还是自己去找答案更快......
比如说像这个→ →:http://rpg.blue/thread-244567-1-1.html
4.新手的情况多看看置顶资料绝对没害处(反正就是没人去看,可以无视......

评分

参与人数 1梦石 +1 收起 理由
Sion + 1 认可答案

查看全部评分

梦想是成为触手的新手DE☆SU(<ゝω·)绮罗星 ~☆
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
92 小时
注册时间
2013-2-23
帖子
130
3
发表于 2014-4-20 04:13:40 | 只看该作者
本帖最后由 sh0016 于 2014-4-20 04:24 编辑

问题一:动画是可以自己准备的,拿些魔法阵素材再自己加工不难,然后哪个是咏唱动画应该是脚本内指定(具体看脚本内容。
问题二:具体功能同样需要看内容;但我想在范例下载页面应该有详细用法讲解吧?一般来说脚本最前面也会带有用法跟来源之类的信息。
问题三:自己沒有在用這些脚本所以没办法回答这个问题,但这应该也能在用法讲解的部分里找到。
梦想是成为触手的新手DE☆SU(<ゝω·)绮罗星 ~☆
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
24 小时
注册时间
2014-3-21
帖子
13
4
 楼主| 发表于 2014-4-20 21:14:18 | 只看该作者
sh0016 发表于 2014-4-20 04:13
问题一:动画是可以自己准备的,拿些魔法阵素材再自己加工不难,然后哪个是咏唱动画应该是脚本内指定(具体 ...

我就是因为看不懂脚本呀  关键是这个脚本的备注都是日文的  想看看有没可能碰到个用过这个脚本的大侠  给我指引指引

点评

你把工程传上来说不定会有人看看(不是我!  发表于 2014-4-20 22:23
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
179 小时
注册时间
2012-11-14
帖子
94
5
发表于 2014-4-21 14:57:46 | 只看该作者
sideview有汉化的版本,里面能够自定义技能动画,自定义角色位置,自定义xx等等许多功能。你去搜搜看吧,很早前就有了
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
3 小时
注册时间
2014-4-21
帖子
36
6
发表于 2014-4-21 21:16:09 | 只看该作者
本帖最后由 蓝翎X1 于 2014-4-21 21:19 编辑

报错原因是缺少对应动画。
最简单的说,你使用一下“凌的容错脚本”可以克服这个问题。(请搜索,是个很好用的脚本)

或者把VA的动画数据库扩展到116号后面,
把113至116依次命名为【魔法詠唱】【技溜め】【魔法発動】【技発動】,应该也可以解决。
你也可以参考一下6R其他使用过sideview的游戏的工程(未加密的),里面对应位置应该都有这几个动画且不是空的,复制到你的作品里就可以啦。


回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
24 小时
注册时间
2014-3-21
帖子
13
7
 楼主| 发表于 2014-4-23 01:38:21 | 只看该作者
sh0016 发表于 2014-4-22 03:02
随便看了一下发现超级麻烦......个人认为比起画面的华丽度应该更注重剧情跟游戏性......当然这是个人自由就 ...

非常感谢
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-9-25 07:16

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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