Project1

标题: 新人求教,sideview45度和横纵版合并脚本结合老出错! [打印本页]

作者: 剑质师    时间: 2016-4-9 08:52
标题: 新人求教,sideview45度和横纵版合并脚本结合老出错!
本帖最后由 剑质师 于 2016-4-9 09:03 编辑


#==============================================================================
# ■ SideViewアクション設定 Ver100
#------------------------------------------------------------------------------
#  サイドビューバトル全般のセッティングやアクションを作成します
#==============================================================================
module N03
#--------------------------------------------------------------------------
# ● 全体队员设置
#--------------------------------------------------------------------------
  ACTOR_POSITION = [];ACTOR_POSITIONS = []
  # 战斗中行动结束后,到下个角色行动开始的等待时间。
  ACTION_END_WAIT = 8
  # 战斗中行动结束后(等待时间・单位帧(1/60)秒)
  TURN_END_WAIT = 12
  # 背后攻击(偷袭时的画面反转)使用的话是true不使用的是false
  BACK_ATTACK = false
  # 我方角色受到伤害时、如果采用默认的效果就是true
  ACTOR_DAMAGE = false
  # 敌方角色受到伤害时、如果采用默认的效果就是true
  ENEMY_DAMAGE = false
  # 敌人角色的X坐标、旋转计算、战斗自动反转就是true
  ENEMY_MIRROR = true
  # 战斗不能禁止使用处理、数据库的无敌状态ID
  IMMORTAL_ID = 10
  
  # 战斗记录(战斗进行实况显示的窗口)如果显示就是true
  # 如果OFF的场合、显示技能名窗口出现在屏幕上方
  BATTLE_LOG = true
  # 技能名在改窗口ON时、不显示的技能ID排列放进去
  NO_DISPLAY_SKILL_ID = [1,2,3,4,5,6,7]
  # 如果显示伤害数字POP就是true
  DAMAGE_POP = true
  # 如果显示附加状态POP就是true
  STATE_POP = true
  # 伤害数字图片的文件名(横向等距的从零到九依次排列的图片(Graphics/System))
  DAMAGE_PLUS = "damage_num+"
  # 回复数字图片的文件名(Graphics/System)
  DAMAGE_MINUS = "damage_num-"
  # MP数字图片的文件名(Graphics/System)
  DAMAGE_MP = "damage_mp"
  # TP数字图片的文件名(Graphics/System)
  DAMAGE_TP = "damage_tp"
  # 显示伤害数字的文字间隔进行调整。
  DAMAGE_ADJUST = -4
  
  # 战斗相机的焦点(转到焦点)调整 [X轴, Y轴]
  CAMERA_POSITION = [   0, -40]
  
#--------------------------------------------------------------------------
# ● 战斗背景设定  背景的坐标调整及扩大率设定
#--------------------------------------------------------------------------
  # 地背景文件名…设定地背景图像的文件名(Battlebacks1)。
  #               "全Battlebacks1"在指定的Battlebacks1图像,设定的项目。
  # 壁背景文件名…设定壁背景图像的文件名(Battlebacks1)。
  #               "全Battlebacks2"在指定的Battlebacks2图像,设定的项目。
  # 坐标调整…[X轴, Y轴]
  # 扩大率……[横扩大率, 纵扩大率]
  # 允许摇动……攻击动作摇动、如果允许摇动就true、不允许就false
  # 开关触发…游戏数字为 ON 自动在战斗开始时。侧视图开关是对温室气体
  #           如果您希望将受控制的战斗程序和背景集,请使用
  #           如果为 0 则不操作
  
   FLOOR1_DATA = {
# 床背景文件名                 坐标调整      扩大率   允许摇动 开关触发
  "Sea_ex01"              => [ [   0, 120], [ 150, 150], false,   -1],
  "全Battlebacks1"        => [ [   0, 120], [ 150, 150],  true,    0],
  
  }
   FLOOR2_DATA = {
  # 壁背景文件名                 坐标调整      扩大率   允许摇动 开关触发
  "Ship_ex"               => [ [   0, 120], [ 150, 150],  true,    0],
  "全Battlebacks2"        => [ [   0, 120], [ 150, 150],  true,    0],
  

}  
  
ACTION={};ACTIONS={}
#==============================================================================
# ■ 完整动作
#------------------------------------------------------------------------------
#  将上边的行动动作组合起来、这里是实际做出的动作。
#   这里的完整动作名将是下面主人公或者敌方所指定用的。
#   条件分岐的下一个完整动作、为方便使用放在这。
#==============================================================================
  FULLACTION = {
  
  # ―――待机系―――
  "通常待機"        => ["待机"],
  "通常待機固定"    => ["待机(固定)WT"],
  "ピンチ待機"      => ["状態異常/ピンチ","ピンチ色調","待机","待机"],
  "防御待機"        => ["待机(固定)WT"],
  "毒待機"          => ["状態異常/汎用","毒色調","待机","待机","エネミー限定","80"],
  "睡眠待機"        => ["状態異常/睡眠","エネミー限定","40","エネミー中止","死亡","死亡"],
  "汎用状態異常待機"=> ["状態異常/汎用","汎用状態異常色調","待机","待机","エネミー限定","80"],
  "様子見"          => ["待机","60"],
  "戦闘不能"        => ["死亡"],
  
  # ――系统系――
  "戦闘開始味方"    => ["戦闘前の味方配置","delay(4)","座標リセット左向き"],
  "味方退場"        => ["退場"],
  "逃走"            => ["対象アニメ","カメラリセット","delay(4)","退場"],
  "敵逃走"          => ["対象アニメ","逃走透明","退場"],
  "逃走失敗"        => ["カメラリセット","delay(4)","逃走途中","一歩後移動","座標リセット左向き"],
  "コマンド入力"    => ["戦闘アニメ消去","コマンド入力移動"],
  "コマンド入力終了"=> ["座標リセット早"],
  "コマンド後防御"  => ["待机(固定)WT"],
  "コマンド後魔法"  => ["待机(固定)","魔法詠唱中"],
  "コマンド後特技"  => ["待机(固定)","特技待機中"],
  "防御"            => ["対象アニメ","待机(固定)WT"],
  "回避"            => ["アクター限定","右1回転","一歩後ジャンプ","10","座標リセット左向き"],
  "盾ガード"        => ["se('Evasion2')","盾防御","60"],
  "身代わり開始"    => ["敵中移動早","初期位置変更"],
  "身代わり終了"    => ["初期位置変更解除","座標リセット左向き"],
  "被身代わり開始"  => ["一歩後移動","一歩後移動","待机(固定)WT"],
  "被身代わり終了"  => ["座標リセット左向き"],
  "勝利ポーズ振り"  => ["戦闘アニメ消去","勝利ジャンプ武器","勝利ジャンプ着地","120"],
  "勝利ポーズバク転"=> ["戦闘アニメ消去","右1回転","勝利ジャンプ","拳限定","武器拳突き","拳除外","武器振りR","120"],
  "閃き"            => ["anime_me(119)","20"],
  
  # ―反应系―
  "被ダメージ"      => ["ダメージのけぞり","座標リセット左向き"],
  "被ダメージ大"    => ["シェイク中","ダメージのけぞり大","座標リセット左向き"],
  "縦揺れ"          => ["縦揺れ01","縦揺れ02","縦揺れ01","縦揺れ02","縦揺れ01","縦揺れ02"],
  
  # ―捷径系(从其他全面的行动被称为零件)―
  "斬り"            => ["武器振りR","対象アニメ武器","10"],
  "拳"              => ["武器拳突き","対象アニメ武器","10"],
  "弓"              => ["Bow1","弓撃ち","矢発射","9"],
  "攻撃"            => ["拳限定","拳","弓限定","弓","拳弓除外","斬り"],
  "通常攻撃始め"    => ["敵前移動","コラプス禁止","個別開始","二刀流限定","二刀左"],
  "通常攻撃終わり"  => ["死亡確認","対象アニメ武器WT","個別終了","コラプス禁止解除","次の行動者へ","座標リセットカーブ"],
  "二刀左"          => ["武器振りL","対象アニメ武器LWT"],
  "特技発動"        => ["一歩前移動","武器掲げ","特技発動アニメ"],
  "魔法発動"        => ["一歩前移動","武器掲げ","魔法発動アニメ"],
  "カットイン"      => ["カットイン背景始","カットイン分岐","70","カットイン終","カットイン背景終","20"],
  "カットイン分岐"  => ["アクターID1限定","カットインA1","アクターID2限定","カットインA2","アクターID6限定","カットインA3","アクターID7限定","カットインA4"],
  "死亡フラグ動画"  => ["白フェードイン","50","死亡フラグムービー","白フェードアウト","50"],
  "背景を宇宙に"    => ["ズームアウト","se('Blind',70)","背景のみ暗転","自分以外味方全員","強制2","透明化","透明化","40","背景を宇宙に変更","色調初期化"],
  "背景宇宙解除"    => ["カメラリセット","背景のみ暗転","target2('透明化解除WT')","透明化解除","40","背景宇宙を解除","色調初期化"],
  "魔方陣表示"      => ["se('Blind',70)","画面固定","魔方陣ON","サークル"],
  "魔方陣消去"      => ["40","画面固定","魔方陣OFF","サークル"],
  
  # ――通常攻击系――
  "通常攻撃"        => ["通常攻撃始め","待机(固定)","通常攻撃終わり"],
  "斬り攻撃"        => ["通常攻撃始め","死亡確認","武器振りR","通常攻撃終わり"],
  "拳攻撃"          => ["通常攻撃始め","武器拳突き","通常攻撃終わり"],
  "突き攻撃"        => ["通常攻撃始め","武器突き","通常攻撃終わり"],
  "弓攻撃"          => ["一歩前移動","コラプス禁止","個別開始","Bow1","弓撃ち",
                        "矢発射WT","個別終了","コラプス禁止解除","座標リセット"],
  
  # ――技能系―――
  "汎用スキル"      => ["特技発動","武器振りR","ダメージアニメ","座標リセット"],
  "汎用魔法"        => ["魔法発動","武器振りR","ダメージアニメ","座標リセット"],
  
  "水鉄砲"          => ["特技発動","武器振りR","水鉄砲発射","座標リセット"],
  "武器投げ"        => ["特技発動","Bow1","武器振りR","6","待机(固定)","武器投げ開始","武器投げ戻し","座標リセット"],
  "カットイン攻撃"  => ["特技発動","カットイン","攻撃","座標リセット"],
  "ムービー攻撃"    => ["特技発動","待机(固定)","死亡フラグ動画","通常攻撃始め","武器振りR","通常攻撃終わり"],
  "オオカミ変身"    => ["特技発動","anime(110,false)","オオカミに変身","待机(固定)","120","座標リセット"],
  "5回攻撃"         => ["特技発動","コラプス禁止","弓除外","敵前移動","攻撃","攻撃","攻撃","攻撃","攻撃","コラプス禁止解除","座標リセット"],
  "スキル派生"      => ["武器投げ","多段攻撃に派生","斬り攻撃"],
  "背景変更攻撃"    => ["魔法発動","武器振りR","背景を宇宙に","ダメージアニメ","背景宇宙解除","座標リセット"],
  "ピクチャ攻撃"    => ["魔法発動","魔方陣表示","武器振りR","anime(80,false)","60","シェイク大","対象アニメ","魔方陣消去","座標リセット"],
  "暗転攻撃"        => ["特技発動","自分とターゲット以外暗転","se('Laser',150)",
                        "残像ON","敵前移動","anime(35,false)","敵後移動","対象アニメ",
                        "武器振りR","20","色調初期化","座標リセット","残像OFF"],
  "空中攻撃"        => ["特技発動","Bow1","一歩前ジャンプ","叩き付け前ジャンプ",
                        "待机(固定)","左1回転","10","anime(117,false)","叩き付け",
                        "対象アニメ","シェイク中","強制","縦揺れ","20",
                        "一歩後ジャンプ","座標リセット"],
  
  # ――项目系―――
  "アイテム使用"     => ["敵前移動","待机(固定)","対象アニメWT","座標リセット左向き"],
  
  
  
  }
  
  
  
#==============================================================================
# ■ 战斗程序
#------------------------------------------------------------------------------
#  战斗场景的演出时间管理
#  控制游戏开关・侧面图专用按钮来进行
#==============================================================================
  BATTLE_PROGRAM = {
  
#--------------------------------------------------------------------------
# ● 开关的控制  开关的时间操作、演出编程
#--------------------------------------------------------------------------
  # 开关…实行游戏开关号码的程序。号码将只打开侧视图
  #       当开关OFF、正在实行的程序将被中止
  #       战斗结束时侧视图专用开关将被初始化(全部OFF)
  #       在事件战斗前侧视图专用开关操作的场合。请把
  #       在事件脚本写上$sv_camera.switches[1] = true
  #       [1]操作的开关号码、如果ON就true 如果OFF就false)
  # ON号码…假设游戏开关号码为OFF时。号码将只打开侧视图
  #         号码一次性排列到里面。
  #         例…[1,2,-5]游戏开关1号2号侧视图专用开关5号是ON
  # OFF号码…假设游戏开关号码为OFF时。号码将只打开侧视图
  #          不能操作的场合的号码一次性排列到[]里
  # 时间…以上的开关来实行该操作的时间。单位帧(1/60秒))
  #       例100的场合、开关操作从程序开始后进行100帧
  #       [参考数值] 30秒…1800 1分…3600 5分…18000 10分…36000 1時間…216000
  # 随机宽度…随机宽度的时间被添加。单位帧(1/60秒)
  #           例时间是300、时间是300-600帧,最终它的随机宽度为300

  # 程序名                 判別    开关  ON号码   OFF号码 时间  随机宽度
  "背景を砦に"       => ["switch",  -1,   [-2],      [],  1200,     0],
  "背景を海に"       => ["switch",  -2,   [-3],      [],  2400,     0],
  
#--------------------------------------------------------------------------
# ● SE/BGM/BGS的演奏  
#--------------------------------------------------------------------------
  # 开关…实行游戏开关号码的信号。负面仅查看开关。
  # 种別…SE的操作为"se"  BGM的操作为"bgm"  BGS的操作为"bgs"
  # 速度…速度。50~150之间指定的最多 不管哪个都要默认为100。
  # 音量…音量。50~150之间指定的指定 不管哪个都要默认为100。
  # 文件名…播放的文件名。""时不改变任何BGM和BGS的设定。

  # 程序名               判別    开关 种别   速度  音量 文件名
  "潮騒"            => ["sound",  -1, "bgs",  100,  80, "Sea"],
  
#--------------------------------------------------------------------------
# ● 背景的控制  画像变更自动进行滚动
#--------------------------------------------------------------------------
  # 开关…实行开关号码的信号
  # No.…操作背景的号码。1地背景、2墙壁背景(远景)
  # 滚动速度…背景的移动速度。[X轴, Y轴]
  #           单位每100帧前往像素数。
  #           当在高速移动的场合、1000是一个标准的单位数值
  # BA反转…偷袭时背景的X坐标滚动如果反转就true 图像不反转
  # 图像…背景图像变更的場合、放进文件的文件名。不变更的场合""
  #       地背景Battlebacks1文件夹里、壁背景参考该Battlebacks2文件夹
  #       设定想变更的背景、变更前的继承
  # 联合图像…背景滚动时、背景变更自然显示的联合图像文件名
  #           滚动途中进行背景变更的场合、滚动结束后进行变更。
  #           性质上、不对应与斜滚动
  # 打断…出现这种行为时的背景能够控制的情况下
  #       如果允许打断就true(在显示图像,延续滚动的情况下的打断背景)
  #       如果不允许打断就false(另一个背景控制处于正在等待处理的背景消失进行了变更时)

  # 程序名                判別   开关 No.    滚动速度   BA反转   图像        联合图像    打断
  "遠景右移動"      => ["scroll", -1,  1, [  40,    0],  true,  "",                 "",  true],
  "海背景3に変更"   => ["scroll", -2,  1, [ 120,    0],  true,  "Sea_ex03", "Sea_ex02",  true],
  "海背景4に変更"   => ["scroll", -3,  1, [  40,    0],  true,  "Sea_ex01", "Sea_ex04",  true],
  "宇宙に変更1"     => ["scroll", -4,  1, [   0,    0],  true,  "DarkSpace",        "", false],
  "宇宙に変更2"     => ["scroll", -4,  2, [   0,    0],  true,  "DarkSpace",        "", false],
  
#--------------------------------------------------------------------------
# ● 期间的图片 期间的瓷砖状的一幅画操作。风或巨大魔方阵等
#--------------------------------------------------------------------------
  # 开关…实行开关号码的信号
  # No.…操作的图像数。可以显示许多图片
  # 移动速度…每100帧图片移动的速度。[X轴, Y轴] 0与滚动背景同步
  # 期间…改程序进行的时间。单位帧(1/60秒)。时间0表示无限制的循环
  # 透明操作…图片的透明度操作。[开始透明度, 每秒100帧添加到的透明度]
  #           透明度255成为开始透明度到备份。
  # Z轴…图片的Z坐标。100以上如果它被显示在窗口的前面
  # 允许摇动…攻击动作摇动、如果允许摇动就true
  # BA反转…偷袭时背景的X坐标滚动如果反转就true 图像不反转
  # 文件名…图像的文件名。图像放到Pictures文件夹中

  # 程序名             判別  开关  No.   移动速度     期间   透明操作   Z轴   允许摇动 BA反转  文件名
  "風"            => ["kpic", -1,  0, [  500,    0],    0, [ 255,   0],  90,   false,  true, "back_wind"],
  "魔方陣"        => ["kpic", -5,  1, [    0,    0],    0, [ 255,   0],  90,    true,  true, "magic_square01"],
  
#--------------------------------------------------------------------------
# ● 期间SE 期间的效果音响起了。如雷轰潮骚
#--------------------------------------------------------------------------
  # 开关…实行开关号码的信号 开始进行就是ON
  # 期间…効果音响起的期间。单位帧(1/60秒)。在此间隔中效果音定期听到
  # 随机宽度…随机宽度的期间被添加。单位帧(1/60秒)
  # 速度…速度。50~150之间指定的最多 不管哪个都要默认为100。
  # 音量…音量。50~150之间指定的指定 不管哪个都要默认为100。
  # 开始实行…实行程序之后无需等待的期间内响起就true
  # 文件名…播放效果音文件名。

  # 程序名                判別    开关 期间  随机宽度 速度 音量 开始实行 文件名
  "カモメ"         => ["keep_se", -1,  400,    100,  150,  60,  false,  "Crow"],
  "カモメ2"        => ["keep_se", -1,  300,    200,  140,  45,   true,  "Crow"],
  
#--------------------------------------------------------------------------
# ● 期间移动 期间的画面摇动
#--------------------------------------------------------------------------
  # 开关…实行开关号码的信号。开始进行就是ON
  # 期间…画面摇动期间。单位帧(1/60秒)
  # 随机宽度…随机宽度的期间被添加。单位帧(1/60秒)
  # 方向…摇动的方向 [横,纵] 数字越大摇晃范围将扩大。
  # 速度…摇动的速度。规模较小的摇动就快。
  # 時間…摇动的持续时间。振动宽度随着时间一起弱
  # 开始实行…实行程序之后无需等待的期间内摇动就true

  # 程序名               判別    开关  期间 随机宽度  方向  速度  时间 开始实行
  "船の揺れ"       => ["keep_sk", -1,  130,    0,  [  0, 4], 80,  120,  true],
  
#--------------------------------------------------------------------------
# ● 期间色调变更 期间的画面的色调变更
#--------------------------------------------------------------------------
  # 开关…实行开关号码的信号。开始进行就是ON
  # 期间…色调变更期间。单位帧(1/60秒)
  # 随机宽度…随机宽度的期间被添加。单位帧(1/60秒)
  # 对象…色调变更的对象 [0=背景] [1=敌全] [2=我方全] [3=敌我方全] [4=所有]
  # 色调水平…[ R, G, B分别是红、绿、蓝。最初(色调强度), 变更时间, ※返回]
  # ※返回…变更结束返回颜色的时间。不返回就0
  # 开始实行…实行程序之后无需等待的期间内色调变更就true

  # 程序名                 判別   开关 期间 随机宽度  对象    R,   G,   B, 最初  时间 返回  开始实行
  "雷光"             => ["keep_c",  0,  300,  100,     4,  [ 255, 255, 255, 255,   8,   8],  true],
  "エマージェンシー" => ["keep_c",  0,  150,    0,     4,  [ 255,   0,   0, 100,  40,  40],  true],
   
}
#==============================================================================
# ■ 相机设定
#------------------------------------------------------------------------------
#  除了行动和战斗场面的每个要点,进行摄影的工作
#  动作名由于相机移动、请不要变更名称
#==============================================================================
  BATTLE_CAMERA = {
#--------------------------------------------------------------------------
# ● 摄影的工作  画面进行的缩放和滚动
#--------------------------------------------------------------------------
  # 对象…移动和缩放的对象 [2=敌全] [3=我方全] [4=敌我方全] [6=画面]
  # 调整坐标…微调整相机坐标的最后地点 [X轴(正画面→), Y轴(正画面↓)]
  # 时间…摄影的工作所花费的时间
  # 放大…相机的放大率(%)。放大没有100。

  # 目标动作名           判別    对象  调整坐标   放大 时间
  "ターン開始前"   => ["camera",   6, [  40,   0],  95, 40],
  "ターン開始後"   => ["camera",   6, [   0,   0], 100, 40],
  "戦闘終了時"     => ["camera",   6, [ 100,   0], 100, 50],
  

}  
end

#==============================================================================
# ■ SideViewバトラー設定 Ver100
#------------------------------------------------------------------------------
#  アクション設定で作ったアクションをバトラーに貼り付けたり
#  バトラーに関する設定を行います
#==============================================================================
class SideView
  #--------------------------------------------------------------------------
  # ● 角色动画图像的单元数横,纵宽[ 横, 纵] 不要动画的场合[1, 1]
  #--------------------------------------------------------------------------
  def max_pattern
    # 角色ID分岐
    case id
    when  1 # 主角第1号
      return [ 3, 4]
    when -1 # 敌人第1号(敌人所指定的负ID)
      return [ 1, 1]
    else # 上面主角和敌人ID以外的设定
      return [ 3, 4] if id > 0 # 全体主角(ID加入)
      return [ 1, 1] if id < 0 # 全体敌人(ID负数)
    end
    # 在随后设定ID分歧的场合、参考一下过去的记述
  end
  #--------------------------------------------------------------------------
  # ● 影图像的图形名 图像放到Graphics/Characters里,如果不要影就false
  #--------------------------------------------------------------------------
  def shadow
    return "shadow01" if id > 0 # 全体主角
    return false      if id < 0 # 全体敌人
  end
  #--------------------------------------------------------------------------
  # ● 角色图像反转设定 初期角色状态图像,如果反转就true
  #--------------------------------------------------------------------------
  def graphic_mirror_flag
    return false if id > 0 # 全体主角
    return true  if id < 0 # 全体敌人
  end
  #--------------------------------------------------------------------------
  # ● 角色图像固定参照 角色动画设定的指数如果始终参考""就true
  #--------------------------------------------------------------------------
  def graphic_fix
    return false if id > 0 # 全体主角
    return true  if id < 0 # 全体敌人
  end
  #--------------------------------------------------------------------------
  # ● 通常待机
  #--------------------------------------------------------------------------
  def normal
    return "通常待機"   if id > 0 # 全体主角
    return "待机(固定)WT" if id < 0 # 全体敌人
    # 不是一个完整的动作也可以粘贴的唯一动作
  end
  #--------------------------------------------------------------------------
  # ● 消减待机  HP剩1/4以下的状态进行待机动作
  #--------------------------------------------------------------------------
  def pinch
    return "ピンチ待機" if id > 0 # 全体主角
  end
  #--------------------------------------------------------------------------
  # ● 状态动作 多个重叠场合时、状态显示在最高优先级就为优先
  #--------------------------------------------------------------------------
  def state(state_id)
    # 状态ID分岐
    case state_id
    when 1
      return "戦闘不能"     if id > 0 # 全体主角
      return "敵コラプス"   if id < 0 # 全体敌人
    when 2
      return "毒待機"
    when 6
      return "睡眠待機"
    when 3,4,5,7,8
      return "汎用状態異常待機"
    when 9
      return "防御待機"
    end
  end
  #--------------------------------------------------------------------------
  # ● 输入动作命令后
  #--------------------------------------------------------------------------
  def command
    # 选定的技能ID分岐
    case skill_id
    when 2
      return "コマンド後防御"
    end
    # 所选指定的技能类型
    case skill_type
    when 1 # 特技
      return "コマンド後特技"
    when 2 # 魔法
      return "コマンド後魔法"
    end
  end
  #--------------------------------------------------------------------------
  # ● 战斗开始动作
  #--------------------------------------------------------------------------
  def first_action
    return "戦闘開始味方" if id > 0 # 全体角色
    return "待机(固定)WT"   if id < 0 # 全体敌人
  end
  #--------------------------------------------------------------------------
  # ● 胜利动作
  #--------------------------------------------------------------------------
  def win
    case id
    when  2,7,10 # 第2, 7, 10角色动作
      return "勝利ポーズバク転"
    else # 上述以外的
      return "勝利ポーズ振り"
    end
  end
  #--------------------------------------------------------------------------
  # ● 战斗退场动作  退场时更换的队伍动作
  #--------------------------------------------------------------------------
  def remove_action
    return "味方退場"
  end
  #--------------------------------------------------------------------------
  # ● 逃走动作
  #--------------------------------------------------------------------------
  def escape
    return "逃走"   if id > 0 # 全体主角
    return "敵逃走" if id < 0 # 全体敌人
  end
  #--------------------------------------------------------------------------
  # ● 逃走失败敗动作
  #--------------------------------------------------------------------------
  def escape_ng
    return "逃走失敗"
  end
  #--------------------------------------------------------------------------
  # ● 输入命令的开始动作
  #--------------------------------------------------------------------------
  def command_b
    return "コマンド入力"
  end
  #--------------------------------------------------------------------------
  # ● 输入命令的结束动作
  #--------------------------------------------------------------------------
  def command_a
    return "コマンド入力終了"
  end
  #--------------------------------------------------------------------------
  # ● 伤害动作 
  #--------------------------------------------------------------------------
  def damage(attacker)
    # 受到攻击的致命一击的场合
    if critical?
      return "被ダメージ大"
    # 回复的场合
    elsif recovery?
      # 如果不想采取动作在这里只描述的return
      return
    end
    # 受到伤害技能ID分岐
    case damage_skill_id
    when 1 # 1号技能的场合
      return "被ダメージ"
    when 136 # 如果不想采取特定技能伤害的动作在这里只描述的return
      return
    end
    # 受到伤害指定的物品ID(回复的场合已经被确定在指定画面)
    case damage_item_id
    when 1 # 1号物品的场合
      return
    else
      # 上述物品ID以外
      if damage_item_id != 0
        return
      end  
    end
    # 伤害0的场合 (強化・弱化魔法和防御、逃跑的敌人)
    if damage_zero?
      return
    end
    # 上述设定不符合的場合
    return "被ダメージ"
  end
  #--------------------------------------------------------------------------
  # ● 回避動作  被动作伤害可能是一样
  #--------------------------------------------------------------------------
  def evasion(attacker)
    return "盾ガード" if shield? # 如果装备盾的场合
    return "回避"
  end
  #--------------------------------------------------------------------------
  # ● 对方的攻击失误时的动作  在同一个分支的伤害行动是可能的
  #--------------------------------------------------------------------------
  def miss(attacker)
    return "盾ガード" if shield? # 如果装备盾的场合
    return "回避"
  end
  #--------------------------------------------------------------------------
  # ● 武器动作 通常攻击的动作指定的装备武器
  #             下面是敌人的武器设定
  #--------------------------------------------------------------------------
  def weapon_action
    # 武器ID指定
    case weapon_id
    when 0 # 武器0号的场合(空手)
      return "通常攻撃"
    when 1 # 武器1号的场合
      return "斬り攻撃"
    end
    # 武器种类指定
    case weapon_type
    when 1 # 武器种类1号的场合
      return "斬り攻撃"
    when 4,5,7,8,9 # 被指定为复数的场合
      return "斬り攻撃"
    when 2
      return "拳攻撃"
    when 3
      return "突き攻撃"
    when 6
      return "弓攻撃"
    end
  end
  #--------------------------------------------------------------------------
  # ● 敌人右手武器 敌人装备武器ID指定
  #--------------------------------------------------------------------------
  def enemy_weapon1_id
    case id
    when -1 # 1号的敌人(敌人ID为-,使其分歧)
      return 10 # 武器ID指定。0号是赤手待遇
    else
      return 0
    end
  end
  #--------------------------------------------------------------------------
  # ● 敌人左手武器 敌人二刀装备武器ID指定
  #--------------------------------------------------------------------------
  def enemy_weapon2_id
    return 0
  end
  #--------------------------------------------------------------------------
  # ● 敌人盾 敌人盾ID指定 左手武器优先考虑
  #--------------------------------------------------------------------------
  def enemy_shield_id
    return 0
  end
  #--------------------------------------------------------------------------
  # ● 武器图形指定 
  #--------------------------------------------------------------------------
  # 武器动作的类型设定 [1:原始图像] [2:2003规范]选择了
  # 参考先进的图像,并在这里指定
  # return "001-Weapon01" ←请输入对应的武器图像的文件名
  #                         武器图像放在Graphics/Characters文件中
  # 隐藏特定武器的场合、提供了一个图象指定
  def weapon_graphic(weapon_id, weapon_type)
    # 武器ID指定
    case weapon_id
    when 1 # 武器1号的图像文件名
      return ""
    end
    # 武器种类指定
    case weapon_type
    when 6 # 武器种类6号的图像文件名
      return "bow01"
    end
  end
  #--------------------------------------------------------------------------
  # ● 盾图像指定 
  #--------------------------------------------------------------------------
  # 武器动作的类型设定設定 [1:独自画像] [2:2003规范]选择了
  # 武器动作二刀设定为true的場合的参考盾的图像先在这里指定。
  #
  # return "001-Shield01" ←请输入对应的盾图像的文件名
  #                         防具图像放在Graphics/Characters文件中
  def shield_graphic(weapon_id, shield_type)
    # 防具ID指定
    case shield_id
    when 41 # 防具41号(圆盾)的图像文件名
      return ""
    end
    # 防具种类指定
    case shield_type
    when 5 # 防具种类5号(小型盾)的图像文件名
      return ""
    end
  end
  
  #--------------------------------------------------------------------------
  # ● 技能动作
  #--------------------------------------------------------------------------
  def skill_action
    # 技能ID指定
    case skill_id
    when 1 # 技能1号是普通攻击执行动作的武器
      return weapon_action
    when 2 # 技能2号防御
      return "防御"
    when 3,4,5 # 技能3/4/5号是连续攻击
      return weapon_action
    when 6 # 技能6号是逃跑
      return escape
    when 7 # 技能7号是观望
      return "様子見"
    when 128
      return "水鉄砲"
    when 129
      return "武器投げ"
    when 130
      return "5回攻撃"
    when 131
      return "カットイン攻撃"
    when 132
      return "ムービー攻撃"
    when 133
      return "オオカミ変身"
    when 134
      return "スキル派生"
    when 135
      return "暗転攻撃"
    when 136
      return "空中攻撃"
    end
    # 技能名指定(在该数据库ID也能移动)
    case skill_name
    when "背景変更サンプル"
      return "背景変更攻撃"
    when "ピクチャ攻撃サンプル"
      return "ピクチャ攻撃"
    end
    # # 技能种类指定
    case skill_type
    when 1 # 特技
      return "汎用スキル"
    when 2 # 魔法
      return "汎用魔法"
    end
    # 上述以外
    return "汎用スキル"
  end
  #--------------------------------------------------------------------------
  # ● 物品动作
  #--------------------------------------------------------------------------
  def item_action
    case item_id # 物品ID指定
    when 1
      return "アイテム使用"
    else
      return "アイテム使用"
    end
  end
  #--------------------------------------------------------------------------
  # ● 反击技能ID 计数器时的技能ID指定
  #--------------------------------------------------------------------------
  # ※技能設定几次攻击被反击
  def counter_skill_id
    return 1
  end
  #--------------------------------------------------------------------------
  # ● 魔法反射技能ID 魔法反射时的技能ID指定
  #--------------------------------------------------------------------------
  def reflection_anime_id
    return 118
  end
  #--------------------------------------------------------------------------
  # ● 开始动作代替
  #--------------------------------------------------------------------------
  def substitute_start_action
    return "身代わり開始"
  end
  #--------------------------------------------------------------------------
  # ● 结束动作代替
  #--------------------------------------------------------------------------
  def substitute_end_action
    return "身代わり終了"
  end
  #--------------------------------------------------------------------------
  # ● 开始动作在实行代替
  #--------------------------------------------------------------------------
  def substitute_receiver_start_action
    return "被身代わり開始"
  end
  #--------------------------------------------------------------------------
  # ● 结束动作在实行代替
  #--------------------------------------------------------------------------
  def substitute_receiver_end_action
    return "被身代わり終了"
  end
  #--------------------------------------------------------------------------
  # ● 敌人的等级 条件分歧等的,反映参数
  #--------------------------------------------------------------------------
  def level
    case id
    when -1 # 1号的敌人
      return 0
    end
    return 0
  end
  
end
左右
module N03
  # 主人公初期位置       第一人       第二人       第三人       第四人
  #                    X轴 Y轴 H轴  X轴 Y轴 H轴  X轴 Y轴 H轴  X轴 Y轴 H轴
  ACTOR_POSITIONS[0] = [[415,160, 0],[435,185, 0],[455,210, 0],[475,235, 0]]
#==============================================================================
# ■ 战斗角色行动
#------------------------------------------------------------------------------
#  角色战斗中单独行动。可以组合完整的行动
#==============================================================================
# 完整的行动和行动名称在这里。
  ACTIONS[0] = {
  
#--------------------------------------------------------------------------
# ● 角色动画的设定
#--------------------------------------------------------------------------
  # 默认的一个角色芯片的图像文件中包含多个的角色已经配置好
  # 使用角色芯片(Charachip)的场合、添加一个角色图像的图像被配置使其符合。
  # 一个角色中的一个字符的图像的运用(文件的开头名字写入"$"才名字)没有问题的场合
  #
  # 指数…使用角色图像文件的附在后面的Index(指数)名称。
  #       侧视图的角色的场合参考文件字符和文件名。
  #       指数达到时、角色文件名+指数文件的图像、参考该文件
  #       例)实行Actor1的角色指数"_1"的动画的场合时、参考该文件名"Actor1_1"
  #       使用角色芯片的场合的指数的动画
  #       角色放在Characters文件夹中、敌人图像放在Battlers文件夹中
  # 纵元件…图像文件的单元格的垂直对齐方式。其次从顶部的 0-3。任何数量的级别元
  #         件编号角色设置中的设置
  # 横元件…在图像文件单元格的水平对齐方式、开始播放元件。随后由 0-3 和从左侧。
  #         杆发挥此下一级别元件的从左到右。任何数量的级别元件
  #         这个横元件的动画从左到右播放。元件数量不限
  # 模式… 0:元件固定 1:单程 2:往返 3:单程循环 4:往返循环
  # 速度…动画的更新速度。数值越低更新速度越快。
  # Z轴…另外,如果您在顶部显示。通常出现在屏幕的底部。
  # 等待…动画模式到最后如果也被播放的行动就true
  # 影…表示阴影效果的话是true、不表示为false
  # 武器…武器表示的情况填入武器动作名。不表示的情况为""。
  #       可能同时追加任意数量的武器动作、将追加在阵列后面

  #目标动画名(待机系)―   判別     指数  纵件 横件 模式  速度 Z轴  等待   影  武器
  "待机"            => ["motion",   "",    1,   0,   4,   12,   0, true, true, "" ],
  "待机(固定)WT"      => ["motion",   "",    1,   1,   0,   12,   0, true, true, "" ],
  "待机(固定)"        => ["motion",   "",    1,   1,   0,   12,   0,false, true, "" ],
  "死亡"            => ["motion", "_1",    0,   0,   0,   12,   0, true,false, "" ],
  "面向右边待机"          => ["motion",   "",    2,   0,   4,   12,   0, true, true, "" ],
  
  #目标动画名(移动系)―   判別    文件No 纵件 横件 模式  速度 Z轴  等待   影  武器
  "左向き移動"      => ["motion",   "",    1,   0,   4,    6,  10, true, true, "" ],
  "右向き移動"      => ["motion",   "",    2,   0,   4,    6,  10, true, true, "" ],
  
  #目标动画名(姿态系)―   判別    文件No 纵件 横件 模式  速度 Z轴  等待   影    武器
  "武器掲げ"        => ["motion",   "",    1,   0,   1,    2, 200,false, true, "掲げ" ],
  
  #目标动画名(攻击系)―   判別    文件No 纵件 横件 模式  速度 Z轴  等待   影    武器
  "武器振りR"       => ["motion",   "",    1,   0,   1,    2, 200,false, true, "縦振り"],
  "武器振りL"       => ["motion",   "",    1,   0,   1,    2, 200,false, true, "縦振りL"],
  "武器振りLR"      => ["motion",   "",    1,   0,   1,    2, 200,false, true, "縦振り","縦振りL"],
  "盾防御"          => ["motion",   "",    1,   0,   1,    2, 200,false, true, "盾"],
  "武器拳突き"      => ["motion",   "",    1,   0,   1,    2, 200,false, true, "拳突き" ],
  "武器突き"        => ["motion",   "",    1,   0,   1,    2, 200,false, true, "突き" ],
  "弓撃ち"          => ["motion",   "",    1,   0,   1,    2, 200,false, true, "弓"],
  
#--------------------------------------------------------------------------
# ● 角色移动  X轴移动是敌人的自动反向计算
#--------------------------------------------------------------------------
  # 目标…要移动引用的目标坐标。编号引用的是当前的位置,积极的消极的初始位置;(是所以负不能设置到 7)
  #       [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敵我方全] [5=第二个目标] [6=画面]
  # X轴…从对象所看X坐标。绝对值就算是最低时也会比时间高
  # Y轴…从对象所看Y坐标。绝对值就算是最低时也会比时间高
  # H軸…从对象所看H坐标。(离地面的高度) 当H轴是nil无视xy的移动
  # 速度…移动1帧的像素数。指定的时间长度将是一个负数、移动完毕后这将是一个帧的总数的百分比
  # 曲线…移动时的轨道正上、负面向下曲线。
  # 跳跃…跳跃抛物线轨道。[开始跳跃到顶点的轨道, 顶点到着地的轨道]
  # 动画…这里的移动所使用的角色动画名。

  # 目标行动名(系统系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  "戦闘前の味方配置"    => ["move",-7, 180,   0,   0,  0,   0, [  0,  0], "左向き移動"],
  "退場"                => ["move",-7, 180,    0,   0,  7,   0, [  0,  0], "右向き移動"],
  "逃走途中"            => ["move",-7, 80,    0,   0,  7,   0, [  0,  0], "右向き移動"],
  "コマンド入力移動"    => ["move",-7, -20,   0, nil,-10,   0, [  0,  0], "左向き移動"],
  "ダメージのけぞり"    => ["move", 0,  20,   0, nil,-10,   0, [  0,  0], ""],
  "ダメージのけぞり大"  => ["move", 0,  60,   0, nil,-10,   0, [  0,  0], ""],
  
  # 目标行动名(复位系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  "座標リセット早"      => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "右向き移動"],
  "座標リセット"        => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "右向き移動"],
  "座標リセットカーブ"  => ["move",-7,   0,   0,   0,-20,  -2, [  0,  0], "右向き移動"],
  "座標リセット左向き"  => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  
  # 目标行动名(自身系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  "一歩前移動"          => ["move", 0, -20,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  "一歩後移動"          => ["move", 0,  20,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  "一歩前ジャンプ"      => ["move", 0, -30,   0,   0,-10,   0, [ 20,-20], "左向き移動"],
  "一歩後ジャンプ"      => ["move", 0,  30,   0,   0,-10,   0, [ 20,-20], "左向き移動"],
  "勝利ジャンプ"        => ["move", 0,  10,   0,   0,-25,   0, [ 30,-30], "待机(固定)"],
  "勝利ジャンプ武器"    => ["move", 0,   0,   0,   0,-15,   0, [ 20,  0], "武器掲げ"],
  "勝利ジャンプ着地"    => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "武器振りR"],
  "縦揺れ01"            => ["move", 0,   0,   0,  20, -2,   0, [  0,  0], ""],
  "縦揺れ02"            => ["move", 0,   0,   0, -20, -2,   0, [  0,  0], ""],
  
  # 目标行动名(目标系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  "敵前移動"            => ["move", 1,  30,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  "敵後移動"            => ["move", 1, -60,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  "敵中移動早"          => ["move", 1,   0,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  "叩き付け前ジャンプ"  => ["move",-1,   0,   0, 100,-20,   0, [ 40,-20], "武器掲げ"],
  "叩き付け"            => ["move",-1,   0,   0,   0,-10,   0, [  0,  0], "武器振りR"],
  
#--------------------------------------------------------------------------
# ● 武器动作 让武器图像动起来的方法
#--------------------------------------------------------------------------
  # 类型…[0…使用图标]
  #       [1…独自图像(图像名角色设定的武器项目中进行。参考Characters文件夹)]
  #       [2…动画元件(※2003规范。同样数量的元件和角色的动画。图像名角色设定的武器项目中进行。
  #           参考Characters文件夹)]
  # 移动…移动图像的距离。[X轴, Y轴]
  # 调整…要微调整图像初始的坐标。[X轴, Y轴]
  # 始度…武器在动作前的最初角度。半圆的0~360度。复数情况为反半圆。
  # 終度…动作后的角度
  # 原点…武器旋转时的原点。[0…中心] [1…左上] [2…右上] [3…左下] [4…右下] [5…和角色同样(一半宽以下的图像)]
  # 反转…当为true时,动作前武器的图像将会显示为反转的。
  # 扩大…[X轴扩大率, Y轴扩大率] 小数点也接受  
  #       [X轴放大率、武器横向放大率。1是同等、2是2倍、0.5是1/2。]
  #       [Y轴放大率、武器纵向放大率。1是同等、2是2倍、0.5是1/2。]
  # Z轴…如果让此动作显示时武器在人物前方写作true。
  # 二刀…限定于二刀流为true、将以二刀流来显示左边武器动作的武器画像。
  #       如果不是二刀流的情况会自动跳过角色动画。
  # 更新…-1个角色动画更新和同步。独立配置的场合[更新时间间隔, 更新模式数, 循环的状况]
  # 指数…武器图像的武器装备(盾)被设定为图像文件将参考、
  #       指数放在这里、图像文件名+指数名的图像将参考
  #       一个以上的武器复数的有规律的使用图像的场合
  #       例) "縦振り"的指数"" => 图像文件名"IconSet"将参考
  #       例) "縦振り2"的指数"_1" => 画像文件名"IconSet_1"将参考
  #       使用该图标的场合将参考System文件夹、独自图像动画和元件放在Characters文件夹中
  # 图像…武器、盾牌设定的图片文件和指数、直接指定的武器图像
  #       这里给的图像文件名。图像放到Characters文件夹中将参考

  # 目标动作名    判別 类型  移动     调整   始度 终度 原点 反转   扩大    Z轴   二刀   更新   指数   画像
  "縦振り"    => ["wp", 0,[  6, 0],[ -4,-10], -45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  "盾"        => ["wp", 0,[  0, 0],[ 12,  0],   0,   0,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  "縦振りL"   => ["wp", 0,[  6, 0],[  0, -8],-135,  45,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  "拳突き"    => ["wp", 0,[-20, 0],[  5,  5], -45, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  "突き"      => ["wp", 0,[-25, 0],[ 25,-10],  45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  "掲げ"      => ["wp", 0,[  6,-4],[ -4,-10],  90, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  
  # 2003规范      判別 类型  移动     调整   始度 终度 原点 反转   扩大    Z轴   二刀   更新   指数   画像
  "弓"        => ["wp", 2,[  0, 0],[  0,  0],   0,   0,  5, false, [1,1],  true, false,   -1,   "",    ""],
  
  # 使用飞行武器  判別 类型  移动     调整   始度 终度 原点 反转   扩大    Z轴   二刀     更新       指数     画像
  "矢"        => ["wp", 0,[  0, 0],[  0,  0],   0,  45,  0, false, [1,1],  true, false,[2,6,false],   "",    "arrow01"],
  "回転"      => ["wp", 0,[  0, 0],[  0,  0],   0, 360,  0, false, [1,1],  true, false,[1,8, true],   "",    ""],
  
#--------------------------------------------------------------------------
# ● 武器・动画飞出 让战斗动画飞出去。飞行道具、远距离攻击用
#--------------------------------------------------------------------------
  # ID…数据库里设定的动画ID。[动画移动ID,被击中时的动画ID] 0是不显示动画。-1是显示武器的动画。
  # 始…动画飞出时的开始位置。当减少时、实行一个以上目标的复数的动画
  #     [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标] [6=画面]
  # 后…动画发出后的结束位置。当减少时、实行一个以上目标的复数的动画
  #     [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标] [6=画面]
  # 始调整…移动开始坐标的微调整。[X轴, Y轴] 敌人的X轴自动反计算的
  # 后调整…移动结束坐标的微调整。[X轴, Y轴] 敌人的X轴自动反计算的
  # 速度…X轴移动1帧的像素数目。负增长将成为处理时间、距离速度会有所变化。
  # 类型…移动后的处理。[0=消失(失误时自动改变为贯穿] [1=直线贯穿] [2=消失(失误时消失)]
  # 轨道…动画飞出去时候的轨道。[从开始到顶点的轨道, 从顶点到结束的轨道]
  #       填入数值的话是走抛物线。正数为向下的抛物线、负数为向上。
  # Z轴…动画或者武器在角色面前显示的话是true
  # 等待…动作行动直到下一个不想迁移就true [移动到动画的等待, 打击时动画的等待]
  # 伤害…达到目标时、如果计算伤害就true
  # 复位…如果移动目标归位时就true。如果不归位就false
  # 相机…如果相机的根据变焦缩放动画就true
  # 循环…当播放的动画已经完成移动时、如果最初循环往复的就true
  # 反转不可…任何的场合、如果不能反转动画就true
  # 武器…填入下面贴附的武器、技能动作名。如果不是用为""

  # 目标行动名         判別     ID   始 后   始调整   后调整 速度 类型  轨道    Z轴       等待       伤害   复位   相机   循环 反转不可 武器
  "矢発射WT"       => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [ true, true],  true,  true,  true, false, false,  "矢"],
  "矢発射"         => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [false,false],  true,  true,  true, false, false,  "矢"],
  "水鉄砲発射"     => ["m_a",[69,69], 0, 1, [ 0, 0], [ 0, 0], 10,  0, [ 0, 0], true, [ true, true],  true,  true,  true,  true, false,  ""],
  "武器投げ開始"   => ["m_a",[ 0,-1], 0, 1, [ 4,-6], [ 0, 0], 10,  2, [-3,-3], true, [ true,false],  true,  true,  true, false, false,  "回転"],
  "武器投げ戻し"   => ["m_a",[ 0, 0], 1, 0, [ 0, 0], [ 4,-6], 10,  0, [ 3, 3], true, [ true,false], false,  true,  true, false, false,  "回転"],
  
#--------------------------------------------------------------------------
# ● 战斗动画 数据库的战斗动画 显示动画在战斗
#--------------------------------------------------------------------------
  # ID…动画ID。-1时武器设定为动画 -2时另一端二刀流的动画
  #             -3时技能也变成武器上所带的动画。
  # 对象…[0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标]
  # 复位…对象的坐标移动、如果在追踪动画就是true
  # 等待…如果显示动画等到结束就是true
  # 伤害…如果要计算伤害就是true
  # 相机…如果相机的根据变焦缩放动画就true
  # 反转不可…任何的场合、如果不能反转动画就true
  # 反转…true时动画的图像将被反转。
  # Z轴…如果想显示在前面的动画字符就true

  # 目标行动名(伤害系)       判別     ID 对象  复位   等待   伤害   相机 反转不可  反转    Z轴
  "対象アニメ武器"      => ["anime",  -1,  1, false, false,  true,  true, false,  false,  true],
  "対象アニメ武器WT"    => ["anime",  -1,  1, false,  true,  true,  true, false,  false,  true],
  "対象アニメ武器LWT"   => ["anime",  -2,  1, false,  true,  true,  true, false,  false,  true],
  "対象アニメ"          => ["anime",  -3,  1, false, false,  true,  true, false,  false,  true],
  "対象アニメWT"        => ["anime",  -3,  1, false,  true,  true,  true, false,  false,  true],
  
  # 目标行动名(自身系)       判別     ID 对象  复位   重量   伤害   相机 反转不可  反转    Z轴
  "魔法詠唱中"          => ["anime", 113,  0,  true,  true, false,  true, false,  false,  true],
  "特技待機中"          => ["anime", 114,  0,  true,  true, false,  true, false,  false,  true],
  "魔法発動アニメ"      => ["anime", 115,  0, false,  true, false,  true, false,  false, false],
  "特技発動アニメ"      => ["anime", 116,  0, false,  true, false,  true, false,  false, false],
  
#--------------------------------------------------------------------------
# ● 摄影的工作  画面的缩放和滚动
#--------------------------------------------------------------------------
  # 对象…移动和缩放的对象
  #       [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标] [6=画面]
  # 调整坐标…微调整相机坐标的最后地点 [X轴(正画面→), Y轴(正画面↓)]
  # 时间…摄影的工作所花费的时间
  # 等待…摄影结束为止等待话就true。不要等待的话就false
  # 放大…相机的放大率(%)。放大没有100。

  # 目标动作名          判別    对象   调整坐标   放大 时间  等待
  "カメラリセット"=> ["camera",   6, [   0,   0], 100,  40, false],
  "ズームイン"    => ["camera",   6, [   0, 100], 120,  40, false],
  "ズームアウト"  => ["camera",   6, [   0,   0],  80,  40, false],
  
#--------------------------------------------------------------------------
# ● 画面的摇动  画面摇晃。空中坐标(H坐标是0以上)的角色不要摇动
#--------------------------------------------------------------------------
  # 方向…摇动的方向 [横,纵] 数字越大摇晃范围将扩大。
  # 速度…摇动的速度。规模较小的摇动就快。
  # 時間…摇动的持续时间。振动宽度随着时间一起弱
  # 等待…摇动结束为止等待话就true。不要等待的话就false

  # 目标动作名          判別       方向   速度  时间  等待
  "シェイク小"     => ["shake", [  0, 4],  2,    16, false],
  "シェイク中"     => ["shake", [  0, 6],  3,    30, false],
  "シェイク大"     => ["shake", [  0,12],  3,    40, false],
  
#--------------------------------------------------------------------------
# ● 画面色调变更 角色背景的色调变更
#--------------------------------------------------------------------------
  # 对象…变更色调的对象
  #       [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标]
  #       [6=背景] [7=自身+目标] [8=自身以外] [9=自分+目标以外] [10=所有]
  # 色调水平…[ R, G, B分别是红、绿、蓝。最初(色调强度), 变更时间, ※返回]
  # ※返回…变更结束返回颜色的时间。不返回就0
  # 等待…色调变更更结束为止等待话就true。不要等待的话就false

  # 色调变更名                    判別    对象     R,   G,   B, 最初 时间 返回  等待
  "色調初期化"               => ["color",  10, [   0,   0,   0,   0,  30,   0], false],
  "ピンチ色調"               => ["color",   0, [ 255,  50,  50, 100,  40,  40], false],
  "毒色調"                   => ["color",   0, [ 170,  50, 255, 170,  30,  30], false],
  "汎用状態異常色調"         => ["color",   0, [ 255, 255,  50, 170,  40,  40], false],
  "背景のみ暗転"             => ["color",   6, [   0,   0,   0, 255,  30,   0], false],
  "自分とターゲット以外暗転" => ["color",   9, [   0,   0,   0, 255,  30,   0], false],
   
#--------------------------------------------------------------------------
# ● 过渡 实行固定画面后过渡
#--------------------------------------------------------------------------
  # 实行动作前"画面固定"将实行、请固定在画面上。
  # 边界…边界的模糊。数值越大变得模糊。
  # 时间…过渡花费的时间。在过渡期间的游戏画面是固定的
  # 过渡文件名…过渡图像。图像放到Pictures文件夹中

  # 目标动作名           判別  边界  时间 过渡文件名
  "サークル"         => ["ts",  40,   60,  "circle"],
  
#--------------------------------------------------------------------------
# ● 残像  角色动作留下的残影
#--------------------------------------------------------------------------
  # 数…残像数。0是显示残像关闭。非常大的负载增加时
  # 间隔…残像显示的时间间隔。数值越小就越狭窄。单位帧(1/60秒)
  # 处理…残像后的处理。true表示直到战斗结束消失,false表示一直没有消失
  # 透明度…残像的透明度 255-不透明,0-透明

  # 目标动作名          判別    数  间隔  处理  透明度
  "残像ON"        => ["mirage",  4,   3,  true,  160],
  "残像OFF"       => ["mirage",  0,   0,  true,    0],
  
#--------------------------------------------------------------------------
# ● 角色旋转。画像旋转。与反转不同、武器动作不能被反映
#--------------------------------------------------------------------------
  # 旋转着角色的动作结束后、旋转角度被复位
  # 旋转中的图像传输原点成为中心。反转不同、不能反映武器动作
  # 时间…旋转过程所需时间。0表示立即反映
  # 始度…旋转开始时的角度。指定于0~360度之间。正数为正半圆、负数为反半圆。
  # 终度…旋转完毕时的角度。指定于0~360度之间。跟上边所记相同,但敌人的设定是与其相反的。
  # 类型…旋转结束后的处理。[0…旋转复位] [1…结束角度左端] [2…循环]

  # 目标动作名         判別    时间  始度  终度  类型
  "右1回転"        => ["angle",  12,    0, -360,   0],
  "左1回転"        => ["angle",  12,    0,  360,   0],
  
#--------------------------------------------------------------------------
# ● 角色放大缩小 武器动作不能被反映
#--------------------------------------------------------------------------
  # 扩大缩小角色的全部动作已经完成、扩大缩小被复位。
  # 反转不同、不反映武器动作
  # 时间…扩大缩小过程所需时间。
  # 开始大小…扩大缩小开始时的大小。小数点也接受。[X轴(横), Y轴(纵)]
  # 结束大小…扩大缩小结束时的大小。小数点也接受。[X轴(横), Y轴(纵)]
  # 类型…扩大缩小结束后的处理。[0…大小重设] [1…结束后大小保持] [2…循环]

  # 目标动作名         判別   时间   开始大小     结束大小  类型
  "横縮み"         => ["zoom",  12,  [1.0, 1.0],  [0.5, 1.0],  0],
  "縦縮み"         => ["zoom",  12,  [1.0, 1.0],  [1.0, 0.5],  0],

#--------------------------------------------------------------------------
# ● 角色透明度操作 画像的透明度变更
#--------------------------------------------------------------------------
  # 透明度操作角色的全部动作已经完成、透明度操作被复位。
  # 时间…透明度变更过程所需时间。
  # 开始…开始时变更的透明度。0-透明 255-不透明
  # 结束…结束时变更的透明度
  # 影…表示阴影效果的话是true、不表示为false
  # 武器…武器也同样透明度操作就true
  # 循环…透明度变更结束后、如果自动操作逆转就true
  # 等待…操作结束后迁移无需等到下一个动作表示true

  # 目标行动名            判別     时间  开始  结束    影   武器   循环   等待
  "逃走透明"         => ["opacity",   30,  255,   0,  true,  true, false, false],
  "透明化"           => ["opacity",   60,  255,   0,  true,  true, false, false],
  "透明化WT"         => ["opacity",   60,  255,   0,  true,  true, false,  true],
  "透明化解除"       => ["opacity",   60,    0, 255,  true,  true, false, false],
  "透明化解除WT"     => ["opacity",   60,    0, 255,  true,  true, false,  true],
  
#--------------------------------------------------------------------------
# ● 状态动画 显示事件使用的状态ICON
#--------------------------------------------------------------------------
  # 种类…状态的种类(纵位置)在0~9之间。
  # 速度…更新速度。2种元件从第一帧将播放
  # 大小…气球的大小

  #  气球名             判別     种类 速度  大小
  "状態異常/汎用"   => ["balloon",   6,  10,  0.6],
  "状態異常/ピンチ" => ["balloon",   5,  10,  0.6],
  "状態異常/睡眠"   => ["balloon",   9,  10,  0.6],
  
#--------------------------------------------------------------------------
# ● 图片的表示  一名角色对应显示一枚图片
#--------------------------------------------------------------------------
  # 号码…要使用图片的号码。它是用于管理图片的号码。不管多少都显示。
  #       完整动作结束后自动自动删除(Bitmap释放)
  # 开始坐标…移动的开始位置。图片的左上角处的原点。[X轴, Y轴]
  #           已经有图像的场合、当开始坐标是在其位置[]
  # 结束坐标…移动的结束位置。开始位置显示成为相同数值
  #           平面使用的场合、开始和结束将保持的移动速度[]
  # 时间…移动时间。0是删除的图片
  # Z轴…图片Z坐标。100以上如果它被显示在窗口的前面
  # 透明度…透明度设定。[开始时的透明度, 每1帧透明度的制度]
  # 平面使用…平面类(图像瓷砖状排列着图像)使用矩形的场合。[X轴,Y轴]
  #           不想使用平面的场合就[]
  # BA反转…偷袭时图像反转X坐标移动如果反向就true
  #         平面使用时的图像不逆转就true、X坐标移动的是相反的
  # 图片文件名…图片文件夹内的文件名。

  # 目标行动名          判別  号码  开始坐标     结束坐标   时间 Z轴   透明度     平面使用  BA反转  图片文件名
  "カットインA1"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-1"],
  "カットインA2"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-2"],
  "カットインA3"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-2"],
  "カットインA4"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-3"],
  "カットイン終"    => ["pic",  0,          [], [ 600,   8],  30, 90, [255,  0],        [],  true, ""],
  "カットイン背景始"=> ["pic",  1, [   0,   8], [ 100,   8],  10, 80, [  0, 10], [544,288],  true, "cutin_back"],
  "カットイン背景終"=> ["pic",  1,          [],          [],  10, 80, [255, -7], [544,288],  true, ""],
  "白フェードイン"  => ["pic",  0, [   0,   0], [   0,   0],  50,500, [  0,  6],        [], false, "white"],
  "白フェードアウト"=> ["pic",  0, [   0,   0], [   0,   0],  50,500, [255, -6],        [], false, "white"],
  
#--------------------------------------------------------------------------
# ● 状态操作
#--------------------------------------------------------------------------
  # 対象…[0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标]
  # 扩张…扩张对象的设定 [0=没有扩张] [1=随机1体] [2=自身以外]
  # 操作…如果赋予状态就"+",如果解除状态就"-"
  # 状态ID…操作切换状态的ID一起排列放进去

  # 状态赋予名               判別  对象 扩张 操作 状态ID
  "戦闘不能付与"         => ["sta",  0,   0, "+",  [1]],
  
#--------------------------------------------------------------------------
# ● FPS(游戏整体的速度变更) 检查行动的细节
#--------------------------------------------------------------------------
  # 游戏速度…60是默认的数值、比这个值低的时候就会放慢。 

  # 目标行动名       判別  游戏速度
  "スロー再生"   => ["fps",  15],
  "通常再生"     => ["fps",  60],
  
#--------------------------------------------------------------------------
# ● 角色画像变更 角色画像引用的文件变更
#--------------------------------------------------------------------------
  # 维持…角色的场合。战斗后图像变更维持表示true
  # 指数…角色的场合。行走图的图像,数字排列方式如下:
  #          [0][1][2][3]
  #          [4][5][6][7]
  #
  # 文件名…变更图像文件名。角色放在Characters文件夹、
  #         敌人放在Battlers文件夹。
  # 脸图…主角的場合、战斗后的变更角色脸图[脸图指数, 文件名]
  #       如果不变更则是[]

  # 目标行动名              判別     维持    指数    文件名        脸图
  "オオカミに変身"    => ["change", false,    6,    "Animal", [0, "Actor4"]],

#--------------------------------------------------------------------------
# ● 技能连发  行动中断后、导出不同的技能
#--------------------------------------------------------------------------
  # 习得…如果连发的技能没有被习得也可以实行的话是true
  # 成本条件…技能连发的成本不足而可能就true
  # 技能ID…连发技能的ID

  # 目标行动名           判別   习得  成本条件 技能ID
  "多段攻撃に派生"   => ["der",  true,  false,   130],

#--------------------------------------------------------------------------
# ● 声音的演奏  BGM・BGS・SE按响了
#--------------------------------------------------------------------------
  # 种别…効果音为"se" BGM为"bgm" BGS为"bgs"
  # 速度…速度。50~150之间指定的最多 不管哪个都要默认为100。
  # 音量…音量。50~150之间指定的指定 不管哪个都要默认为100。
  # 文件名…播放的文件名。""时不改变任何BGM和BGS的设定。

  # 目标行动名         判別    种别  速度 音量 文件名
  "Bow1"          => ["sound",  "se", 100,  80, "Bow1"],
  
#--------------------------------------------------------------------------
# ● 电影的播放  ogv电影文件播放
#--------------------------------------------------------------------------
  # 文件名…播放电影文件名。电影放在Movies文件夹

  # 目标行动名              判別     文件名
  "死亡フラグムービー" => ["movie", "sample1"],
  
#--------------------------------------------------------------------------
# ● 游戏开关的设置(侧面图专用开关)的操作
#--------------------------------------------------------------------------
  # ID正值游戏开关、侧视图中专用开关的操作
  # ON号码…ON开关ID整理排列放进去
  # OFF号码号…OFF开关ID整理排列放进去
  #
  # 开关设置名           判別     ON号码   OFF号码  
  "スイッチNo1/ON"  => ["switch",  [ 1],   []],
  "背景を宇宙に変更"=> ["switch",  [-4],   []],
  "背景宇宙を解除"  => ["switch",    [],   [-4]],
  "魔方陣ON"        => ["switch",  [-5],   []],
  "魔方陣OFF"       => ["switch",    [],   [-5]],
  
#--------------------------------------------------------------------------
# ● 游戏变量的操作
#--------------------------------------------------------------------------
  # 变量No…设置哪个变量
  # 操作…[0=代入] [1=加法] [2=减法] [3=乘法] [4=除法] [5=剩余]
  # 设置数值…指定成为演算对象的数值。负增长、至于这个具体数字
  #           绝对值的变量No这些值存储在计算的对象
  #
  # 变量设置名         判別     变量No  操作 设置数值
  "変数No1/+1"     => ["variable",   1,     1,     1],
  
#--------------------------------------------------------------------------
# ● 条件分岐 (游戏开关) 条件设定、满足条件以后将停止所有行动
#--------------------------------------------------------------------------
  # 开关No…设置哪个开关。侧视图专用开关操作
  # 条件…如果ON就true、如果OFF就false
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名           判別  开关No  条件  分岐
  "スイッチNo1=ONで実行" => ["n_1",   1,   true,   0],
  
#--------------------------------------------------------------------------
# ● 条件分岐 (游戏变量)
#--------------------------------------------------------------------------
  # 变量No…设置哪个变量
  # 数值…条件的数字。它在减的绝对值的变量被内定为参考。
  # 条件…引用变量条件的数字…[0=等于] [1=小于] [2=大于]
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別  变量No 数値  条件  分岐
  "変数No1=1で実行"      => ["n_2",   1,    1,    0,    0],

#--------------------------------------------------------------------------
# ● 条件分岐 (状态)
#--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 状态ID…设置哪个状态
  # 条件…[0=赋予状态] [1=解除状态]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別   对象 状态ID  条件  人数  分岐
  "死亡確認"             => ["n_3",   1,    1,    0,     1,   1],

#--------------------------------------------------------------------------
# ● 条件分岐 (技能)
#--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 技能ID…设置哪个技能
  # 条件…[0=可以使用] [1=不能使用]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別  对象 技能ID 条件  人数  分岐
  "強撃使用可限定"       => ["n_4",  0,   80,    0,    1,   0],

#--------------------------------------------------------------------------
# ● 条件分岐 (参数)
#--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 种別…设置参数条件
  #       [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP] [7=攻击力]
  #       [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=幸运]
  # 数值…条件的数字。从最大值减去的百分比%(HP・MP・TP限定)
  # 条件…引用变量条件的数字…[0=等于] [1=小于] [2=大于]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別  对象  种别  数值  条件  人数 分岐
  "HP50%以上で実行"      => ["n_5",  0,    4,  -50,    2,    1,   0],

#--------------------------------------------------------------------------
# ● 条件分岐 (装备)
#--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 种别…条件装备的种类 [0=武器] [1=防具]
  # 装备ID…在改类型的项目ID。一次性排列在[]里。
  #         在下降武器(防具)类型参考
  # 条件…[0=有装备] [1=没有装备]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別  对象  种别    ID    条件  人数 分岐
  "ハンドアクス限定"     => ["n_6",  0,    0,    [1],    0,    1,   0],
  "拳限定"               => ["n_6",  0,    0,   [-2],    0,    1,   0],
  "拳除外"               => ["n_6",  0,    0,   [-2],    0,    1,   1],
  "弓限定"               => ["n_6",  0,    0,   [-6],    0,    1,   0],
  "弓除外"               => ["n_6",  0,    0,   [-6],    0,    1,   1],
  "拳弓除外"             => ["n_6",  0,    0,[-2,-6],    0,    1,   1],
  
#--------------------------------------------------------------------------
# ● 条件分岐 (脚本) 
#--------------------------------------------------------------------------
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  # 脚本…true或false返回给脚本
  #
  # 目标行动名               判別   分岐   脚本
  "50%の確率で実行"      => ["n_7",   0,  "rand(100) < 50"],
  "アクター限定"         => ["n_7",   0,  "@battler.actor?"],
  "アクターID1限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 1"],
  "アクターID2限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 2"],
  "アクターID6限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 6"],
  "アクターID7限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 7"],
  "エネミー限定"         => ["n_7",   0,  "[email protected]?"],
  "エネミー中止"         => ["n_7",   2,  "[email protected]?"],
  "二刀流限定"           => ["n_7",   0,  "@battler.dual_wield?"],
  
#--------------------------------------------------------------------------
# ● 第二个目标操作
#--------------------------------------------------------------------------
  # 第二个目标时、通常单独的目标的独立的目标信息
  # 不想进行任何操作的场合、通常目标相同的对象所配置。
  # 对象…[0=自身] [1=目标] [2=敌全体] [3=我方全体] [4=敌我方全体] [5=第二个目标]
  # INDEX…对象队伍的指数(排列顺序)在选择。 INDEX = [指数, 判別]
  #        指数…指数数値
  #        判別…数值条件 [0=没有缩小] [1=对象指数] [2=该指数排除]
  # ID…对象角色(敌人)ID进入选择ID的数字。0是选择不要
  #     负增长的绝对值的ID会消除的条件
  # 状态…对象当前增加状态ID进入选择状态ID的数字。0是选择不要
  #       负增长的增加没有条件。
  # 技能…对象可以使用的技能ID进入选择技能ID的数字。0是选择不要
  #       负增长不可能使用的条件。
  # 参数…对象的参数条件选择 参数 = [种别, 数值, 判別]
  #       种别…[0=没有缩小] [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP]
  #             [7=攻击力] [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=幸运]
  #       数值…种别决定一个数值。从最大值减去的百分比%(HP・MP・TP限定)
  #       判別…数值的条件 [0=同样] [1=小于] [2=多于]
  # 装备…对象装备品的条件选择。角色限定装备 = [种类, ID]
  #       种类…[0=武器] [1=防具]
  #       ID…装备种别的条件项目ID一次性排列到[]里。0是选择不要
  #           在下降为(防具)类型的。
  # 扩张…扩张对象的设定 [0=没有扩张] [1=随机1体] [2=自身以外]
  # 操作…[0=不操作] [1=通常目标和第二个目标变更] [2=第二个目标・通常目标初始化]

  # 目标行动名          判別 对象  INDEX  ID 状态 技能    参数       装备   扩张 操作
  "自分以外味方全員"=> ["s_t", 3, [ 0, 0], 0,  0,   0, [ 0, 0, 0], [ 0,[0]],  2,   0],
  "全域化"          => ["s_t", 4, [ 0, 0], 0, -1,   0, [ 0, 0, 0], [ 0,[0]],  0,   1],
  
#--------------------------------------------------------------------------
# ● 公共事件的呼叫  
#--------------------------------------------------------------------------
  # ID…公共事件ID
  # ウエイト…运行中的事件,停止就true
  #
  # 公共事件设置名        判別    ID   ウエイト
  "コモンNo1"       => ["common",  1,  true],
  
#--------------------------------------------------------------------------
# ● 脚本的操作  
#--------------------------------------------------------------------------
  # 使动作被添加到建议的脚本中。样品p=1可以添加任何自己想要设置的脚本。
  # 功能中、不能处理文字列。
  #
  #  脚本设置名  
  "テストスクリプト" => ["p = 1 "],

#--------------------------------------------------------------------------
# ● 其它 没有设定项目的完整动作放进这
#--------------------------------------------------------------------------
  # 战斗角色消除…显示战斗动画消除(飞行动画被消除)
  # 强制战斗结束…战斗强制结束
  # 画面固定…让游戏画面固定。放进过渡前
  # 伤害动画…技能动画播放、就在结束之前伤害POP
  # 反转…武器图像动画反转。反转结束时的完全版或动作再次反转它
  # 武器消除…显示武器图像消除
  # 武器消除解除…消除要显示的武器图像
  # 敌人战斗不能…实行战斗不能效果。主要敌人使用的战斗不能
  # 战斗不能禁止…对象的HP是0的场合的禁止战斗不能。连续攻击开始时等
  # 战斗不能禁止解除…禁止解除战斗不能。连续攻击的结束。工作结束时允许战斗不能。
  # 待机取消…待机动作将不执行。战斗动作中演出等
  # 待机消除解除…待机取消解除、进行等待动作
  # 初期位置变更…原本的坐标(初期位置)目前的坐标变更
  # 初期位置变更解除…初期位置变更改变其正常恢复原状。
  # 强制…下次的行动强制目标(反应)
  # 强制2…下次的行动强制第二个目标(反应)
  # 下个行动者…战斗结束认定、之后的角色都采取行动。
  # 个别开始…复数目标单独攻击处理的场合、重复行动开始的标记
  # 个别结束…复数目标单独攻击处理的场合、重复行动结束的标记
  # 循环开始…"循环开始"和"循环结束"的之间的动作一直重复
  # 循环结束…"循环开始"和"循环结束"的之间的动作一直重复

  # 目标动作名              判別
  "戦闘アニメ消去"    => ["anime_off"],
  "強制戦闘終了"      => ["battle_end"],
  "画面固定"          => ["graphics_freeze"],
  "ダメージアニメ"    => ["damage_anime"],
  "反転"              => ["mirror"],
  "武器消去"          => ["weapon_off"],
  "武器消去解除"      => ["weapon_on"],
  "敵コラプス"        => ["normal_collapse"],
  "コラプス禁止"      => ["no_collapse"],
  "コラプス禁止解除"  => ["collapse"],
  "待機キャンセル"    => ["non_motion"],
  "待機キャンセル解除"=> ["non_motion_cancel"],
  "初期位置変更"      => ["change_base_position"],
  "初期位置変更解除"  => ["set_base_position"],
  "強制"              => ["force_action"],
  "強制2"             => ["force_action2"],
  "次の行動者へ"      => ["next_battler"],
  "個別開始"          => ["individual_start"],
  "個別終了"          => ["individual_end"],
  "ループ開始"        => ["loop_start"],
  "ループ終了"        => ["loop_end"],
  
#--------------------------------------------------------------------------
# ● 等待 下一个动作而不需要等待的时间
#--------------------------------------------------------------------------
  # 在动作数值的场合、时间和等待
  # (例) "20" …下一个动作不需要等待20帧
  #
  # 负增长数值将成为随机等待、这个数值的0~绝对值之间
  # 随机等待时间的决定。
  # (例) "-20" …随机等待0-20帧

#--------------------------------------------------------------------------
# ● 快捷命令
#--------------------------------------------------------------------------
  # 动作名通常设定全部动作排列放到行动制作里
  # 动作设定没有记载了指令、可以减少一些工作
  # 经常使用让你在过去的快捷方式使用和登记动作没有增加。
  #
  # [战斗动画]
  # (例) "anime(20)" …实行数据库20号的动画目标(有等待)
  # (例) "anime(20,false)" …实行数据库20号的动画目标(无需等待)
  # (例) "anime_me(20)" …实行数据库20号的动画自身(有等待)
  # (例) "anime_me(20,false)" …实行数据库20号的动画自身(无需等待)
  #
  # [等待 延迟指数] ※独立队伍等待延迟
  # (例) "delay(12)"…指数1号的等待是0帧 2号的等待是12帧  3号的等待是24帧
  #
  # [効果音(SE)]
  # (例) "se('Bow1')" …文件名Bow1的SE按响了
  # (例) "se('Bow1',50)" …文件名Bow1的SE音调50按响了
  #
  # [目标动作(全部动作)强制]
  # (例) "target('伤害弯向后')" …目标伤害强制操作
  # (例) "target2('被伤害')" …第二个目标被伤害的强制全部动作
   
  }
end
45度
module N03
  # 主人公初期位置       第一人       第二人       第三人       第四人
  #                    X轴 Y轴 H轴  X轴 Y轴 H轴  X轴 Y轴 H轴  X轴 Y轴 H轴
  ACTOR_POSITIONS[2] = [[700,240, 0],[435,185, 0],[455,210, 0],[475,235, 0]]
#==============================================================================
# ■ 战斗角色行动
#------------------------------------------------------------------------------
#  角色战斗中单独行动。可以组合完整的行动
#==============================================================================
# 完整的行动和行动名称在这里。
  ACTIONS[2] = {
  
#-------------------------------------------------------------------------
# ● 角色动画的设定
#--------------------------------------------------------------------------
  # 默认的一个角色芯片的图像文件中包含多个的角色已经配置好
  # 使用角色芯片(Charachip)的场合、添加一个角色图像的图像被配置使其符合。
  # 一个角色中的一个字符的图像的运用(文件的开头名字写入"$"才名字)没有问题的场合
  #
  # 指数…使用角色图像文件的附在后面的Index(指数)名称。
  #       侧视图的角色的场合参考文件字符和文件名。
  #       指数达到时、角色文件名+指数文件的图像、参考该文件
  #       例)实行Actor1的角色指数"_1"的动画的场合时、参考该文件名"Actor1_1"
  #       使用角色芯片的场合的指数的动画
  #       角色放在Characters文件夹中、敌人图像放在Battlers文件夹中
  # 纵元件…图像文件的单元格的垂直对齐方式。其次从顶部的 0-3。任何数量的级别元
  #         件编号角色设置中的设置
  # 横元件…在图像文件单元格的水平对齐方式、开始播放元件。随后由 0-3 和从左侧。
  #         杆发挥此下一级别元件的从左到右。任何数量的级别元件
  #         这个横元件的动画从左到右播放。元件数量不限
  # 模式… 0:元件固定 1:单程 2:往返 3:单程循环 4:往返循环
  # 速度…动画的更新速度。数值越低更新速度越快。
  # Z轴…另外,如果您在顶部显示。通常出现在屏幕的底部。
  # 等待…动画模式到最后如果也被播放的行动就true
  # 影…表示阴影效果的话是true、不表示为false
  # 武器…武器表示的情况填入武器动作名。不表示的情况为""。
  #       可能同时追加任意数量的武器动作、将追加在阵列后面

  #目标动画名(待机系)―   判別     指数    纵件 横件 模式  速度 Z轴  等待   影  武器
  "待机"            => ["motion", "_1",    0,   0,   1,    8,   0, true, true, "" ],
  "普通闪避"        => ["motion", "_6",    0,   0,   1,    6,   0, true, true, "" ],
  "普通防御"        => ["motion", "_6",    0,   0,   1,    6,   0, true, true, "" ],
  "普通攻击"        => ["motion", "_2",    0,   0,   1,    6,   0, true, true, ""],
  "大伤害"          => ["motion", "_3",    0,   0,   1,    6,  0, true, true, ""],
  "施展魔法"        => ["motion", "_8",    0,   0,   1,    6,   0, true, true, ""],
  "施展特技"        => ["motion", "_7",    0,   0,   1,    6,   0, true, true, ""],
  "死亡"            => ["motion", "_9",    0,   0,   0,    8,   0, false,false, "" ],
  "左向移动"        => ["motion", "_4",    0,   0,   1,    6,  10, true, true, "" ],
  "右向移动"        => ["motion", "_5",    0,   0,   1,    6,  10, true, true, "" ],
  "胜利"           => ["motion", "_10",    0,   0,   1,    8,   0, true,false, "" ],
  
  #目标动画名(姿态系)―   判別    文件No   纵件 横件 模式  速度 Z轴  等待   影    武器
  "举起武器"        => ["motion", "",    0,   3,   0,    2, 200,false, true, "" ],
  
  #目标动画名(攻击系)―   判別    文件No   纵件 横件 模式  速度 Z轴  等待   影    武器
  "武器挥动L"       => ["motion", "",    1,   0,   1,    2, 200,false, true, ""],
  "武器挥动LR"      => ["motion", "",    1,   0,   1,    2, 200,false, true, "",""],
  "盾防御"          => ["motion", "",    0,   0,   1,    6, 200,false, true, ""],
  "武器拳抛掷"      => ["motion",   "",    1,   0,   1,    2, 200,false, true, ""],
  "武器抛掷"        => ["motion",   "",    1,   0,   1,    2, 200,false, true, "" ],
  "弓射击"          => ["motion",   "",    1,   0,   1,    2, 200,false, true, ""],

   
#--------------------------------------------------------------------------
# ● 角色移动  X轴移动是敌人的自动反向计算
#--------------------------------------------------------------------------
  # 目标…要移动引用的目标坐标。编号引用的是当前的位置,积极的消极的初始位置;(是所以负不能设置到 7)
  #       [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敵我方全] [5=第二个目标] [6=画面]
  # X轴…从对象所看X坐标。绝对值就算是最低时也会比时间高
  # Y轴…从对象所看Y坐标。绝对值就算是最低时也会比时间高
  # H軸…从对象所看H坐标。(离地面的高度) 当H轴是nil无视xy的移动
  # 速度…移动1帧的像素数。指定的时间长度将是一个负数、移动完毕后这将是一个帧的总数的百分比
  # 曲线…移动时的轨道正上、负面向下曲线。
  # 跳跃…跳跃抛物线轨道。[开始跳跃到顶点的轨道, 顶点到着地的轨道]
  # 动画…这里的移动所使用的角色动画名。

  # 目标行动名(系统系)       判別  目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  "战斗前的我方配置"    => ["move",-7, 180,   0,   0,  0,   0, [  0,  0], "左向移动"],
  "退场"                => ["move",-7, 180,   0,   0,  7,   0, [  0,  0], "右向移动"],
  "逃走途中"            => ["move",-7,  80,   0,   0,  7,   0, [  0,  0], "右向移动"],
  "指令输入移动"        => ["move",-7, -20,   0, nil,-10,   0, [  0,  0], "左向移动"],
  "伤害后弯向后"        => ["move", 0,  20,   0, nil,-10,   0, [  0,  0], ""],
  "重击向后"            => ["move", 0,  40,   20, nil,-10,   0, [  0,  0], ""],

  # 目标行动名(复位系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  "初期目标复位"        => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "右向移动"],
  "坐标重置"            => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "右向移动"],
  "坐标曲线重置"        => ["move", -7,   0,   0,   0,-20,  -2, [  0,  0], "右向移动"],
  "坐标左向复位"        => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "左向移动"],
  
  # 目标行动名(自身系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  "一歩前移动"          => ["move", 0, -20,   0,   0,-10,   0, [  0,  0], "左向移动"],
  "一歩后移动"          => ["move", 0,  20,   0,   0,-10,   0, [  0,  0], "右向移动"],
  "一歩前跳跃"          => ["move", 0, -30,   0,   0,-10,   0, [ 20,-20], "左向移动"],
  "一歩后跳跃"          => ["move", 0,  30,   0,   0,-10,   0, [ 20,-20], "左向移动"],
  "一歩后大跳跃"        => ["move", 0,  190,   0,   0,-10,   0, [ 20,-20], "剑系统攻击移动"],
  "胜利跳转"            => ["move", 0,  10,   0,   0,-25,   0, [ 30,-30], "待机固定"],
  "胜利武器跳转"        => ["move", 0,   0,   0,   0,-15,   0, [ 20,  0], "举起武器"],
  "胜利跳转着地"        => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "武器挥动R"],
  "纵摇动01"            => ["move", 0,   0,   0,  20, -2,   0, [  0,  0], ""],
  "纵摇动02"            => ["move", 0,   0,   0, -20, -2,   0, [  0,  0], ""],
  
  # 目标行动名(目标系)       判別 目标  X轴  Y轴  H轴 速度  曲线   跳跃      动画
  "敌前移动"            => ["move", 1,  50,  10,   0,  -50,   0, [  0,  0], "左向移动"],
  "敌后移动"            => ["move", 1,  -60,  0,   0,-20,   0, [  0,  0], "右向移动"],
  "初期敌移动"          => ["move", 1,   0,   0,   0,-10,   0, [  0,  0], "左向移动"],
  "跳前拍击"            => ["move", 1,   0,   0,   0,-50,   0, [ 40,-20], "左向移动"],
  "拍击"                => ["move",-1,   0,   0,   0,-10,   0, [  0,  0], "武器挥动R"],
  
#--------------------------------------------------------------------------
# ● 武器动作 让武器图像动起来的方法
#--------------------------------------------------------------------------
  # 类型…[0…使用图标]
  #       [1…独自图像(图像名角色设定的武器项目中进行。参考Characters文件夹)]
  #       [2…动画元件(※2003规范。同样数量的元件和角色的动画。图像名角色设定的武器项目中进行。
  #           参考Characters文件夹)]
  # 移动…移动图像的距离。[X轴, Y轴]
  # 调整…要微调整图像初始的坐标。[X轴, Y轴]
  # 始度…武器在动作前的最初角度。半圆的0~360度。复数情况为反半圆。
  # 終度…动作后的角度
  # 原点…武器旋转时的原点。[0…中心] [1…左上] [2…右上] [3…左下] [4…右下] [5…和角色同样(一半宽以下的图像)]
  # 反转…当为true时,动作前武器的图像将会显示为反转的。
  # 扩大…[X轴扩大率, Y轴扩大率] 小数点也接受  
  #       [X轴放大率、武器横向放大率。1是同等、2是2倍、0.5是1/2。]
  #       [Y轴放大率、武器纵向放大率。1是同等、2是2倍、0.5是1/2。]
  # Z轴…如果让此动作显示时武器在人物前方写作true。
  # 二刀…限定于二刀流为true、将以二刀流来显示左边武器动作的武器画像。
  #       如果不是二刀流的情况会自动跳过角色动画。
  # 更新…-1个角色动画更新和同步。独立配置的场合[更新时间间隔, 更新模式数, 循环的状况]
  # 指数…武器图像的武器装备(盾)被设定为图像文件将参考、
  #       指数放在这里、图像文件名+指数名的图像将参考
  #       一个以上的武器复数的有规律的使用图像的场合
  #       例) "縦振り"的指数"" => 图像文件名"IconSet"将参考
  #       例) "縦振り2"的指数"_1" => 画像文件名"IconSet_1"将参考
  #       使用该图标的场合将参考System文件夹、独自图像动画和元件放在Characters文件夹中
  # 图像…武器、盾牌设定的图片文件和指数、直接指定的武器图像
  #       这里给的图像文件名。图像放到Characters文件夹中将参考
  
  # 目标动作名    判別 类型  移动     调整   始度 终度 原点 反转   扩大    Z轴   二刀   更新   指数   画像
  "纵挥动"    => ["wp", 0,[  6, 0],[ -4,-10], -45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  "盾"        => ["wp", 0,[  0, 0],[ 12,  0],   0,   0,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  "纵挥动L"   => ["wp", 0,[  6, 0],[  0, -8],-135,  45,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  "拳抛掷"    => ["wp", 0,[-20, 0],[  5,  5], -45, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  "抛掷"      => ["wp", 0,[-25, 0],[ 25,-10],  45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  "举起"      => ["wp", 0,[  6,-4],[ -4,-10],  45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  
  # 2003规范      判別 类型  移动     调整   始度 终度 原点 反转   扩大    Z轴   二刀   更新   指数   画像
  "弓"        => ["wp", 2,[  0, 0],[  0,  0],   0,   0,  5, false, [1,1],  true, false,   -1,   "",    ""],
  
  # 使用飞行武器  判別 类型  移动     调整   始度 终度 原点 反转   扩大    Z轴   二刀     更新       指数     画像
  "箭头"      => ["wp", 0,[  0, 0],[  0,  0],   0,  45,  0, false, [1,1],  true, false,[2,6,false],   "",    "arrow01"],
  "旋转"      => ["wp", 0,[  0, 0],[  0,  0],   0, 360,  0, false, [1,1],  true, false,[1,8, true],   "",    ""],
  
  #--------------------------------------------------------------------------
# ● 武器・动画飞出 让战斗动画飞出去。飞行道具、远距离攻击用
#--------------------------------------------------------------------------
  # ID…数据库里设定的动画ID。[动画移动ID,被击中时的动画ID] 0是不显示动画。-1是显示武器的动画。
  # 始…动画飞出时的开始位置。当减少时、实行一个以上目标的复数的动画
  #     [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标] [6=画面]
  # 后…动画发出后的结束位置。当减少时、实行一个以上目标的复数的动画
  #     [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标] [6=画面]
  # 始调整…移动开始坐标的微调整。[X轴, Y轴] 敌人的X轴自动反计算的
  # 后调整…移动结束坐标的微调整。[X轴, Y轴] 敌人的X轴自动反计算的
  # 速度…X轴移动1帧的像素数目。负增长将成为处理时间、距离速度会有所变化。
  # 类型…移动后的处理。[0=消失(失误时自动改变为贯穿] [1=直线贯穿] [2=消失(失误时消失)]
  # 轨道…动画飞出去时候的轨道。[从开始到顶点的轨道, 从顶点到结束的轨道]
  #       填入数值的话是走抛物线。正数为向下的抛物线、负数为向上。
  # Z轴…动画或者武器在角色面前显示的话是true
  # 等待…动作行动直到下一个不想迁移就true [移动到动画的等待, 打击时动画的等待]
  # 伤害…达到目标时、如果计算伤害就true
  # 复位…如果移动目标归位时就true。如果不归位就false
  # 相机…如果相机的根据变焦缩放动画就true
  # 循环…当播放的动画已经完成移动时、如果最初循环往复的就true
  # 反转不可…任何的场合、如果不能反转动画就true
  # 武器…填入下面贴附的武器、技能动作名。如果不是用为""

  # 目标行动名         判別     ID   始 后   始调整   后调整 速度 类型  轨道    Z轴       等待       伤害   复位   相机   循环 反转不可 武器
  "箭头射击WT"     => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [ true, true],  true,  true,  true, false, false,  "箭头"],
  "箭头射击"       => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [false,false],  true,  true,  true, false, false,  "箭头"],
  "水铁炮射击"     => ["m_a",[69,69], 0, 1, [ 0, 0], [ 0, 0], 10,  0, [ 0, 0], true, [ true, true],  true,  true,  true,  true, false,  ""],
  "武器开始抛出"   => ["m_a",[ 0,-1], 0, 1, [ 4,-6], [ 0, 0], 10,  2, [-3,-3], true, [ true,false],  true,  true,  true, false, false,  "旋转"],
  "武器抛出返回"   => ["m_a",[ 0, 0], 1, 0, [ 0, 0], [ 4,-6], 10,  0, [ 3, 3], true, [ true,false], false,  true,  true, false, false,  "旋转"],
  
#--------------------------------------------------------------------------
# ● 战斗动画 数据库的战斗动画 显示动画在战斗
#--------------------------------------------------------------------------
  # ID…动画ID。-1时武器设定为动画 -2时另一端二刀流的动画
  #             -3时技能也变成武器上所带的动画。
  # 对象…[0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标]
  # 复位…对象的坐标移动、如果在追踪动画就是true
  # 等待…如果显示动画等到结束就是true
  # 伤害…如果要计算伤害就是true
  # 相机…如果相机的根据变焦缩放动画就true
  # 反转不可…任何的场合、如果不能反转动画就true
  # 反转…true时动画的图像将被反转。
  # Z轴…如果想显示在前面的动画字符就true
  
  # 目标行动名(伤害系)       判別     ID 对象  复位   等待   伤害   相机 反转不可  反转    Z轴
  "对象动画武器"      => ["anime",  -1,  1, false, false,  true,  true, false,  false,  true],
  "对象动画武器WT"    => ["anime",  -1,  1, false,  true,  true,  true, false,  false,  true],
  "对象动画武器LWT"   => ["anime",  -2,  1, false,  true,  true,  true, false,  false,  true],
  "对象动画"          => ["anime",  -3,  1, false, false,  true,  true, false,  false,  true],
  "对象动画WT"        => ["anime",  -3,  1, false,  true,  true,  true, false,  false,  true],
  "剑挑动画"          => ["anime",  130, 1, false, true,  true,  true, false,  false,  true],
  "敌人剑挑动画"      => ["anime",  131, 1, false, true,  true,  true, false,  false,  true],
  
  "斩击/必杀技1"       => ["anime",  11,  1, false,  true, true,  true, false,  false, false],
  
  # 目标行动名(自身系)       判別     ID 对象  复位   重量   伤害   相机 反转不可  反转    Z轴
  "魔法吟唱中"          => ["anime", 113,  0,  true,  true, false,  true, false,  false,  true],
  "特技待机中"          => ["anime", 114,  0,  true,  true, false,  true, false,  false,  true],
  "魔法动画"            => ["anime", 115,  0,  true,  true, false,  true, false,  false,  true],
  "特技动画"            => ["anime", 116,  0,  true,  true, false,  true, false,  false,  true],

  "对象动画等待"        => ["anime",  -1,  1, false,  true, false,  true, false,  false, false],
  
  
#--------------------------------------------------------------------------
# ● 摄影的工作  画面的缩放和滚动
#--------------------------------------------------------------------------
  # 对象…移动和缩放的对象
  #       [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标] [6=画面]
  # 调整坐标…微调整相机坐标的最后地点 [X轴(正画面→), Y轴(正画面↓)]
  # 时间…摄影的工作所花费的时间
  # 等待…摄影结束为止等待话就true。不要等待的话就false
  # 放大…相机的放大率(%)。放大没有100。
   
  # 目标动作名          判別    对象   调整坐标   放大 时间  等待
  "重置相机"      => ["camera",   6, [   0,   0], 100,  40, false],
  "放大"          => ["camera",   6, [   0, 100], 120,  40, false],
  "缩小"          => ["camera",   6, [   0,   0],  80,  40, false],
  
#--------------------------------------------------------------------------
# ● 画面的摇动  画面摇晃。空中坐标(H坐标是0以上)的角色不要摇动
#--------------------------------------------------------------------------
  # 方向…摇动的方向 [横,纵] 数字越大摇晃范围将扩大。
  # 速度…摇动的速度。规模较小的摇动就快。
  # 時間…摇动的持续时间。振动宽度随着时间一起弱
  # 等待…摇动结束为止等待话就true。不要等待的话就false
  
  # 目标动作名          判別       方向   速度  时间  等待
  "摇动小"         => ["shake", [  0, 4],  2,    16, false],
  "摇动中"         => ["shake", [  0, 6],  3,    30, false],
  "摇动大"         => ["shake", [  0,12],  3,    40, false],
  
#--------------------------------------------------------------------------
# ● 画面色调变更 角色背景的色调变更
#--------------------------------------------------------------------------
  # 对象…变更色调的对象
  #       [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标]
  #       [6=背景] [7=自身+目标] [8=自身以外] [9=自分+目标以外] [10=所有]
  # 色调水平…[ R, G, B分别是红、绿、蓝。最初(色调强度), 变更时间, ※返回]
  # ※返回…变更结束返回颜色的时间。不返回就0
  # 等待…色调变更更结束为止等待话就true。不要等待的话就false
  
  # 色调变更名                    判別    对象     R,   G,   B, 最初 时间 返回  等待
  "色调初始化"               => ["color",  10, [   0,   0,   0,   0,  30,   0], false],
  "消减色调"                 => ["color",   0, [ 255,  50,  50, 100,  40,  40], false],
  "毒色调"                   => ["color",   0, [ 170,  50, 255, 170,  30,  30], false],
  "通用状态异常色调"         => ["color",   0, [ 255, 255,  50, 170,  40,  40], false],
  "昏暗的背景"               => ["color",   6, [   0,   0,   0, 255,  30,   0], false],
  "自身和目标以外昏暗"       => ["color",   9, [   0,   0,   0, 255,  30,   0], false],
  "自身和目标以外昏红"       => ["color",   9, [  100,   0,   0, 255,  30,   0], false],
   
#--------------------------------------------------------------------------
# ● 过渡 实行固定画面后过渡
#--------------------------------------------------------------------------
  # 实行动作前"画面固定"将实行、请固定在画面上。
  # 边界…边界的模糊。数值越大变得模糊。
  # 时间…过渡花费的时间。在过渡期间的游戏画面是固定的
  # 过渡文件名…过渡图像。图像放到Pictures文件夹中
  
  # 目标动作名           判別  边界  时间 过渡文件名
  "圈"               => ["ts",  40,   60,  "circle"],
  
#--------------------------------------------------------------------------
# ● 残像  角色动作留下的残影
#--------------------------------------------------------------------------
  # 数…残像数。0是显示残像关闭。非常大的负载增加时
  # 间隔…残像显示的时间间隔。数值越小就越狭窄。单位帧(1/60秒)
  # 处理…残像后的处理。true表示直到战斗结束消失,false表示一直没有消失
  # 透明度…残像的透明度 255-不透明,0-透明
  
  # 目标动作名          判別    数  间隔  处理  透明度
  "残像ON"        => ["mirage",  4,   3,  true,  160],
  "残像OFF"       => ["mirage",  0,   0,  true,    0],
  
#--------------------------------------------------------------------------
# ● 角色旋转。画像旋转。与反转不同、武器动作不能被反映
#--------------------------------------------------------------------------
  # 旋转着角色的动作结束后、旋转角度被复位
  # 旋转中的图像传输原点成为中心。反转不同、不能反映武器动作
  # 时间…旋转过程所需时间。0表示立即反映
  # 始度…旋转开始时的角度。指定于0~360度之间。正数为正半圆、负数为反半圆。
  # 终度…旋转完毕时的角度。指定于0~360度之间。跟上边所记相同,但敌人的设定是与其相反的。
  # 类型…旋转结束后的处理。[0…旋转复位] [1…结束角度左端] [2…循环]

  # 目标动作名         判別    时间  始度  终度  类型
  "右1旋转"        => ["angle",  12,    0, -360,   0],
  "左1旋转"        => ["angle",  12,    0,  360,   0],
  
#--------------------------------------------------------------------------
# ● 角色放大缩小 武器动作不能被反映
#--------------------------------------------------------------------------
  # 扩大缩小角色的全部动作已经完成、扩大缩小被复位。
  # 反转不同、不反映武器动作
  # 时间…扩大缩小过程所需时间。
  # 开始大小…扩大缩小开始时的大小。小数点也接受。[X轴(横), Y轴(纵)]
  # 结束大小…扩大缩小结束时的大小。小数点也接受。[X轴(横), Y轴(纵)]
  # 类型…扩大缩小结束后的处理。[0…大小重设] [1…结束后大小保持] [2…循环]

  # 目标动作名         判別   时间   开始大小     结束大小  类型
  "横收缩"         => ["zoom",  12,  [1.0, 1.0],  [0.5, 1.0],  0],
  "纵收缩"         => ["zoom",  12,  [1.0, 1.0],  [1.0, 0.5],  0],

#--------------------------------------------------------------------------
# ● 角色透明度操作 画像的透明度变更
#--------------------------------------------------------------------------
  # 透明度操作角色的全部动作已经完成、透明度操作被复位。
  # 时间…透明度变更过程所需时间。
  # 开始…开始时变更的透明度。0-透明 255-不透明
  # 结束…结束时变更的透明度
  # 影…表示阴影效果的话是true、不表示为false
  # 武器…武器也同样透明度操作就true
  # 循环…透明度变更结束后、如果自动操作逆转就true
  # 等待…操作结束后迁移无需等到下一个动作表示true
  
  # 目标行动名            判別     时间  开始  结束    影   武器   循环   等待
  "逃走透明"         => ["opacity",   30,  255,   0,  true,  true, false, false],
  "透明化"           => ["opacity",   60,  255,   0,  true,  true, false, false],
  "透明化WT"         => ["opacity",   60,  255,   0,  true,  true, false,  true],
  "透明化解除"       => ["opacity",   60,    0, 255,  true,  true, false, false],
  "透明化解除WT"     => ["opacity",   60,    0, 255,  true,  true, false,  true],
  
#--------------------------------------------------------------------------
# ● 状态动画 显示事件使用的状态ICON
#--------------------------------------------------------------------------
  # 种类…状态的种类(纵位置)在0~9之间。
  # 速度…更新速度。2种元件从第一帧将播放
  # 大小…气球的大小
  
  #  气球名             判別     种类 速度  大小
  "状态异常/通用"   => ["balloon",   6,  10,  0.6],
  "状态异常/消减"   => ["balloon",   5,  10,  0.6],
  "状态异常/睡眠"   => ["balloon",   9,  10,  0.6],
  
#--------------------------------------------------------------------------
# ● 图片的表示  一名角色对应显示一枚图片
#--------------------------------------------------------------------------
  # 号码…要使用图片的号码。它是用于管理图片的号码。不管多少都显示。
  #       完整动作结束后自动自动删除(Bitmap释放)
  # 开始坐标…移动的开始位置。图片的左上角处的原点。[X轴, Y轴]
  #           已经有图像的场合、当开始坐标是在其位置[]
  # 结束坐标…移动的结束位置。开始位置显示成为相同数值
  #           平面使用的场合、开始和结束将保持的移动速度[]
  # 时间…移动时间。0是删除的图片
  # Z轴…图片Z坐标。100以上如果它被显示在窗口的前面
  # 透明度…透明度设定。[开始时的透明度, 每1帧透明度的制度]
  # 平面使用…平面类(图像瓷砖状排列着图像)使用矩形的场合。[X轴,Y轴]
  #           不想使用平面的场合就[]
  # BA反转…偷袭时图像反转X坐标移动如果反向就true
  #         平面使用时的图像不逆转就true、X坐标移动的是相反的
  # 图片文件名…图片文件夹内的文件名。

  # 目标行动名          判別   号码  开始坐标      结束坐标    时间 Z轴   透明度     平面使用  BA反转  图片文件名
  "切入A1"          => ["pic",  0, [-300,   8], [ 100,   8],  10, 90, [  0, 10],        [],  true, "致命一击"],
  "切入A2"          => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-2"],
  "切入A3"          => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-2"],
  "切入A4"          => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-3"],
  "切入结束"        => ["pic",  0,          [], [100,   8],  10, 90, [255,  0],        [],  true, ""],
  "切入背景开始"    => ["pic",  1, [   0,   8], [ 100,   8],  10, 80, [  0, 10], [544,288],  true, "cutin_back"],
  "切入背景结束"    => ["pic",  1,          [],          [],  10, 80, [255, -7], [544,288],  true, ""],
  "白色淡入"        => ["pic",  0, [   0,   0], [   0,   0],  50,500, [  0,  6],        [], false, "white"],
  "白色淡出"        => ["pic",  0, [   0,   0], [   0,   0],  50,500, [255, -6],        [], false, "white"],
  
#--------------------------------------------------------------------------
# ● 状态操作
#--------------------------------------------------------------------------
  # 対象…[0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标]
  # 扩张…扩张对象的设定 [0=没有扩张] [1=随机1体] [2=自身以外]
  # 操作…如果赋予状态就"+",如果解除状态就"-"
  # 状态ID…操作切换状态的ID一起排列放进去
  
  # 状态赋予名               判別  对象 扩张 操作 状态ID
  "赋予战斗不能"         => ["sta",  0,   0, "+",  [1]],
  
#--------------------------------------------------------------------------
# ● FPS(游戏整体的速度变更) 检查行动的细节
#--------------------------------------------------------------------------
  # 游戏速度…60是默认的数值、比这个值低的时候就会放慢。 
  
  # 目标行动名       判別  游戏速度
  "慢播放"       => ["fps",  25],
  "通常播放"     => ["fps",  60],
  
#--------------------------------------------------------------------------
# ● 角色画像变更 角色画像引用的文件变更
#--------------------------------------------------------------------------
  # 维持…角色的场合。战斗后图像变更维持表示true
  # 指数…角色的场合。行走图的图像,数字排列方式如下:
  #          [0][1][2][3]
  #          [4][5][6][7]
  #
  # 文件名…变更图像文件名。角色放在Characters文件夹、
  #         敌人放在Battlers文件夹。
  # 脸图…主角的場合、战斗后的变更角色脸图[脸图指数, 文件名]
  #       如果不变更则是[]
  
  # 目标行动名              判別     维持    指数    文件名        脸图
  "灰太狼变身"        => ["change", false,    6,    "Animal", [0, "Actor4"]],

#--------------------------------------------------------------------------
# ● 技能连发  行动中断后、导出不同的技能
#--------------------------------------------------------------------------
  # 习得…如果连发的技能没有被习得也可以实行的话是true
  # 成本条件…技能连发的成本不足而可能就true
  # 技能ID…连发技能的ID
  
  # 目标行动名           判別   习得  成本条件 技能ID
  "多段攻击连发"     => ["der", true,  false,   130],

#--------------------------------------------------------------------------
# ● 声音的演奏  BGM・BGS・SE按响了
#--------------------------------------------------------------------------
  # 种别…効果音为"se" BGM为"bgm" BGS为"bgs"
  # 速度…速度。50~150之间指定的最多 不管哪个都要默认为100。
  # 音量…音量。50~150之间指定的指定 不管哪个都要默认为100。
  # 文件名…播放的文件名。""时不改变任何BGM和BGS的设定。
  
  # 目标行动名         判別    种别  速度 音量 文件名
  "Bow1"          => ["sound", "se", 100,  80, "Bow1"],
  
#--------------------------------------------------------------------------
# ● 电影的播放  ogv电影文件播放
#--------------------------------------------------------------------------
  # 文件名…播放电影文件名。电影放在Movies文件夹
  
  # 目标行动名              判別     文件名
  "死亡标记电影"       => ["movie", "sample1"],
  
#--------------------------------------------------------------------------
# ● 游戏开关的设置(侧面图专用开关)的操作
#--------------------------------------------------------------------------
  # ID正值游戏开关、侧视图中专用开关的操作
  # ON号码…ON开关ID整理排列放进去
  # OFF号码号…OFF开关ID整理排列放进去
  #
  # 开关设置名           判別     ON号码   OFF号码   
  "开关No1/ON"      => ["switch",  [ 1],   []],
  "背景宇宙变更"    => ["switch",  [-4],   []],
  "背景宇宙解除"    => ["switch",    [],   [-4]],
  "魔法阵ON"        => ["switch",  [-5],   []],
  "魔法阵OFF"       => ["switch",    [],   [-5]],
  
#--------------------------------------------------------------------------
# ● 游戏变量的操作
#--------------------------------------------------------------------------
  # 变量No…设置哪个变量
  # 操作…[0=代入] [1=加法] [2=减法] [3=乘法] [4=除法] [5=剩余]
  # 设置数值…指定成为演算对象的数值。负增长、至于这个具体数字
  #           绝对值的变量No这些值存储在计算的对象
  #
  # 变量设置名         判別     变量No  操作 设置数值
  "变量No1/+1"     => ["variable",   1,     1,     1],
  
#--------------------------------------------------------------------------
# ● 条件分岐 (游戏开关) 条件设定、满足条件以后将停止所有行动
#--------------------------------------------------------------------------
  # 开关No…设置哪个开关。侧视图专用开关操作
  # 条件…如果ON就true、如果OFF就false
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名           判別  开关No  条件  分岐
  "实行开关No1=ON" =>   ["n_1",   1,   true,   0],
  
#--------------------------------------------------------------------------
# ● 条件分岐 (游戏变量)
#--------------------------------------------------------------------------
  # 变量No…设置哪个变量
  # 数值…条件的数字。它在减的绝对值的变量被内定为参考。
  # 条件…引用变量条件的数字…[0=等于] [1=小于] [2=大于]
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別  变量No 数値  条件  分岐
  "实行变量No1=1"        => ["n_2",   1,    1,    0,    0],

#--------------------------------------------------------------------------
# ● 条件分岐 (状态)
#--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 状态ID…设置哪个状态
  # 条件…[0=赋予状态] [1=解除状态]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別   对象 状态ID  条件  人数  分岐
  "死亡确认"             => ["n_3",   1,    1,    0,     1,   1],

#--------------------------------------------------------------------------
# ● 条件分岐 (技能)
#--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 技能ID…设置哪个技能
  # 条件…[0=可以使用] [1=不能使用]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別  对象 技能ID 条件  人数  分岐
  "强击使用可限定"       => ["n_4",  0,   80,    0,    1,   0],

#--------------------------------------------------------------------------
# ● 条件分岐 (参数)
#--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 种別…设置参数条件
  #       [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP] [7=攻击力]
  #       [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=幸运]
  # 数值…条件的数字。从最大值减去的百分比%(HP・MP・TP限定)
  # 条件…引用变量条件的数字…[0=等于] [1=小于] [2=大于]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別  对象  种别  数值  条件  人数 分岐
  "实行HP50%以上"        => ["n_5",  0,    4,  -50,    2,    1,   0],

#--------------------------------------------------------------------------
# ● 条件分岐 (装备)
#--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 种别…条件装备的种类 [0=武器] [1=防具]
  # 装备ID…在改类型的项目ID。一次性排列在[]里。
  #         在下降武器(防具)类型参考
  # 条件…[0=有装备] [1=没有装备]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別  对象  种别    ID    条件  人数 分岐
  "手斧限定"             => ["n_6",  0,    0,    [1],    0,    1,   0],
  "拳限定"               => ["n_6",  0,    0,   [-2],    0,    1,   0],
  "拳禁止"               => ["n_6",  0,    0,   [-2],    0,    1,   1],
  "弓限定"               => ["n_6",  0,    0,   [-6],    0,    1,   0],
  "弓禁止"               => ["n_6",  0,    0,   [-6],    0,    1,   1],
  "拳弓禁止"             => ["n_6",  0,    0,[-2,-6],    0,    1,   1],
  
#--------------------------------------------------------------------------
# ● 条件分岐 (脚本) 
#--------------------------------------------------------------------------
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  # 脚本…true或false返回给脚本
  #
  # 目标行动名               判別   分岐   脚本
  "实行50%的确率"        => ["n_7",   0,  "rand(100) < 50"],
  "角色限定"             => ["n_7",   0,  "@battler.actor?"],
  "角色ID1限定"          => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 1"],
  "角色ID2限定"          => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 2"],
  "角色ID6限定"          => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 6"],
  "角色ID7限定"          => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 7"],
  "敌人限定"             => ["n_7",   0,  "[email protected]?"],
  "敌人停止"             => ["n_7",   2,  "[email protected]?"],
  "二刀流限定"           => ["n_7",   0,  "@battler.dual_wield?"],
  
#--------------------------------------------------------------------------
# ● 第二个目标操作
#--------------------------------------------------------------------------
  # 第二个目标时、通常单独的目标的独立的目标信息
  # 不想进行任何操作的场合、通常目标相同的对象所配置。
  # 对象…[0=自身] [1=目标] [2=敌全体] [3=我方全体] [4=敌我方全体] [5=第二个目标]
  # INDEX…对象队伍的指数(排列顺序)在选择。 INDEX = [指数, 判別]
  #        指数…指数数値
  #        判別…数值条件 [0=没有缩小] [1=对象指数] [2=该指数排除]
  # ID…对象角色(敌人)ID进入选择ID的数字。0是选择不要
  #     负增长的绝对值的ID会消除的条件
  # 状态…对象当前增加状态ID进入选择状态ID的数字。0是选择不要
  #       负增长的增加没有条件。
  # 技能…对象可以使用的技能ID进入选择技能ID的数字。0是选择不要
  #       负增长不可能使用的条件。
  # 参数…对象的参数条件选择 参数 = [种别, 数值, 判別]
  #       种别…[0=没有缩小] [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP]
  #             [7=攻击力] [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=幸运]
  #       数值…种别决定一个数值。从最大值减去的百分比%(HP・MP・TP限定)
  #       判別…数值的条件 [0=同样] [1=小于] [2=多于]
  # 装备…对象装备品的条件选择。角色限定装备 = [种类, ID]
  #       种类…[0=武器] [1=防具]
  #       ID…装备种别的条件项目ID一次性排列到[]里。0是选择不要
  #           在下降为(防具)类型的。
  # 扩张…扩张对象的设定 [0=没有扩张] [1=随机1体] [2=自身以外]
  # 操作…[0=不操作] [1=通常目标和第二个目标变更] [2=第二个目标・通常目标初始化]
  
  # 目标行动名          判別 对象  INDEX  ID 状态 技能    参数       装备   扩张 操作
  "自身以外我方全员"=> ["s_t", 3, [ 0, 0], 0,  0,   0, [ 0, 0, 0], [ 0,[0]],  2,   0],
  "所有领域"        => ["s_t", 4, [ 0, 0], 0, -1,   0, [ 0, 0, 0], [ 0,[0]],  0,   1],
  
#--------------------------------------------------------------------------
# ● 公共事件的呼叫  
#--------------------------------------------------------------------------
  # ID…公共事件ID
  # ウエイト…运行中的事件,停止就true
  #
  # 公共事件设置名        判別    ID   ウエイト
  "公共事件No1"      => ["common",  1,  true],
  
#--------------------------------------------------------------------------
# ● 脚本的操作  
#--------------------------------------------------------------------------
  # 使动作被添加到建议的脚本中。样品p=1可以添加任何自己想要设置的脚本。
  # 功能中、不能处理文字列。
  #
  #  脚本设置名  
  "脚本测试"         => ["p = 1 "],

#--------------------------------------------------------------------------
# ● 其它 没有设定项目的完整动作放进这
#--------------------------------------------------------------------------
  # 战斗角色消除…显示战斗动画消除(飞行动画被消除)
  # 强制战斗结束…战斗强制结束
  # 画面固定…让游戏画面固定。放进过渡前
  # 伤害动画…技能动画播放、就在结束之前伤害POP
  # 反转…武器图像动画反转。反转结束时的完全版或动作再次反转它
  # 武器消除…显示武器图像消除
  # 武器消除解除…消除要显示的武器图像
  # 敌人战斗不能…实行战斗不能效果。主要敌人使用的战斗不能
  # 战斗不能禁止…对象的HP是0的场合的禁止战斗不能。连续攻击开始时等
  # 战斗不能禁止解除…禁止解除战斗不能。连续攻击的结束。工作结束时允许战斗不能。
  # 待机取消…待机动作将不执行。战斗动作中演出等
  # 待机消除解除…待机取消解除、进行等待动作
  # 初期位置变更…原本的坐标(初期位置)目前的坐标变更
  # 初期位置变更解除…初期位置变更改变其正常恢复原状。
  # 强制…下次的行动强制目标(反应)
  # 强制2…下次的行动强制第二个目标(反应)
  # 下个行动者…战斗结束认定、之后的角色都采取行动。
  # 个别开始…复数目标单独攻击处理的场合、重复行动开始的标记
  # 个别结束…复数目标单独攻击处理的场合、重复行动结束的标记
  # 循环开始…"循环开始"和"循环结束"的之间的动作一直重复
  # 循环结束…"循环开始"和"循环结束"的之间的动作一直重复
   
  # 目标动作名              判別
  "战斗角色消除"      => ["anime_off"],
  "强制战斗结束"      => ["battle_end"],
  "画面固定"          => ["graphics_freeze"],
  "伤害动画"          => ["damage_anime"],
  "反转"              => ["mirror"],
  "武器消除"          => ["weapon_off"],
  "武器消除解除"      => ["weapon_on"],
  "敌人战斗不能"      => ["normal_collapse"],
  "战斗不能禁止"      => ["no_collapse"],
  "战斗不能禁止解除"  => ["collapse"],
  "待机取消"          => ["non_motion"],
  "待机取消解除"      => ["non_motion_cancel"],
  "初期位置变更"      => ["change_base_position"],
  "初期位置变更解除"  => ["set_base_position"],
  "强制"              => ["force_action"],
  "强制2"             => ["force_action2"],
  "下个行动者"        => ["next_battler"],
  "个别开始"          => ["individual_start"],
  "个别结束"          => ["individual_end"],
  "循环开始"          => ["loop_start"],
  "循环结束"          => ["loop_end"],
  
#--------------------------------------------------------------------------
# ● 等待 下一个动作而不需要等待的时间
#--------------------------------------------------------------------------
  # 在动作数值的场合、时间和等待
  # (例) "20" …下一个动作不需要等待20帧
  #
  # 负增长数值将成为随机等待、这个数值的0~绝对值之间
  # 随机等待时间的决定。
  # (例) "-20" …随机等待0-20帧
   
#--------------------------------------------------------------------------
# ● 快捷命令
#--------------------------------------------------------------------------
  # 动作名通常设定全部动作排列放到行动制作里
  # 动作设定没有记载了指令、可以减少一些工作
  # 经常使用让你在过去的快捷方式使用和登记动作没有增加。
  #
  # [战斗动画]
  # (例) "anime(20)" …实行数据库20号的动画目标(有等待)
  # (例) "anime(20,false)" …实行数据库20号的动画目标(无需等待)
  # (例) "anime_me(20)" …实行数据库20号的动画自身(有等待)
  # (例) "anime_me(20,false)" …实行数据库20号的动画自身(无需等待)
  #
  # [等待 延迟指数] ※独立队伍等待延迟
  # (例) "delay(12)"…指数1号的等待是0帧 2号的等待是12帧  3号的等待是24帧
  #
  # [効果音(SE)]
  # (例) "se('Bow1')" …文件名Bow1的SE按响了
  # (例) "se('Bow1',50)" …文件名Bow1的SE音调50按响了
  #
  # [目标动作(全部动作)强制]
  # (例) "target('伤害弯向后')" …目标伤害强制操作
  # (例) "target2('被伤害')" …第二个目标被伤害的强制全部动作
   
  }  
end
前后
module N03
  # 主人公初期位置       第一人       第二人       第三人       第四人
  #                    X轴 Y轴 H轴  X轴 Y轴 H轴  X轴 Y轴 H轴  X轴 Y轴 H轴
  ACTOR_POSITIONS[1] = [[100,280, 0],[200,280, 0],[300,280, 0],[400,280, 0]]
#==============================================================================
# ■ 战斗角色行动
#------------------------------------------------------------------------------
#  角色战斗中单独行动。可以组合完整的行动
#==============================================================================
# 完整的行动和行动名称在这里。
  ACTIONS[1] = {
  
#--------------------------------------------------------------------------
# ● 角色动画的设定
#--------------------------------------------------------------------------
  # 默认的一个角色芯片的图像文件中包含多个的角色已经配置好
  # 使用角色芯片(Charachip)的场合、添加一个角色图像的图像被配置使其符合。
  # 一个角色中的一个字符的图像的运用(文件的开头名字写入"$"才名字)没有问题的场合
  #
  # 指数…使用角色图像文件的附在后面的Index(指数)名称。
  #       侧视图的角色的场合参考文件字符和文件名。
  #       指数达到时、角色文件名+指数文件的图像、参考该文件
  #       例)实行Actor1的角色指数"_1"的动画的场合时、参考该文件名"Actor1_1"
  #       使用角色芯片的场合的指数的动画
  #       角色放在Characters文件夹中、敌人图像放在Battlers文件夹中
  # 纵元件…图像文件的单元格的垂直对齐方式。其次从顶部的 0-3。任何数量的级别元
  #         件编号角色设置中的设置
  # 横元件…在图像文件单元格的水平对齐方式、开始播放元件。随后由 0-3 和从左侧。
  #         杆发挥此下一级别元件的从左到右。任何数量的级别元件
  #         这个横元件的动画从左到右播放。元件数量不限
  # 模式… 0:元件固定 1:单程 2:往返 3:单程循环 4:往返循环
  # 速度…动画的更新速度。数值越低更新速度越快。
  # Z轴…另外,如果您在顶部显示。通常出现在屏幕的底部。
  # 等待…动画模式到最后如果也被播放的行动就true
  # 影…表示阴影效果的话是true、不表示为false
  # 武器…武器表示的情况填入武器动作名。不表示的情况为""。
  #       可能同时追加任意数量的武器动作、将追加在阵列后面

  #目标动画名(待机系)―   判別     指数  纵件 横件 模式  速度 Z轴  等待   影  武器
  "待机"            => ["motion",   "",    3,   0,   4,   12,   0, true, true, "" ],
  "待机(固定)WT"      => ["motion",   "",    3,   1,   0,   12,   0, true, true, "" ],
  "待机(固定)"        => ["motion",   "",    3,   1,   0,   12,   0,false, true, "" ],
  "死亡"            => ["motion", "_1",    0,   0,   0,   12,   0, true,false, "" ],
  "面向右边待机"          => ["motion",   "",    0,   0,   4,   12,   0, true, true, "" ],
  
  #目标动画名(移动系)―   判別    文件No 纵件 横件 模式  速度 Z轴  等待   影  武器
  "左向き移動"      => ["motion",   "",    3,   0,   4,    6,  10, true, true, "" ],
  "右向き移動"      => ["motion",   "",    0,   0,   4,    6,  10, true, true, "" ],
  
  #目标动画名(姿态系)―   判別    文件No 纵件 横件 模式  速度 Z轴  等待   影    武器
  "武器掲げ"        => ["motion",   "",    3,   0,   1,    2, 200,false, true, "掲げ" ],
  
  #目标动画名(攻击系)―   判別    文件No 纵件 横件 模式  速度 Z轴  等待   影    武器
  "武器振りR"       => ["motion",   "",    3,   0,   1,    2, 200,false, true, "縦振り"],
  "武器振りL"       => ["motion",   "",    3,   0,   1,    2, 200,false, true, "縦振りL"],
  "武器振りLR"      => ["motion",   "",    3,   0,   1,    2, 200,false, true, "縦振り","縦振りL"],
  "盾防御"          => ["motion",   "",    3,   0,   1,    2, 200,false, true, "盾"],
  "武器拳突き"      => ["motion",   "",    3,   0,   1,    2, 200,false, true, "拳突き" ],
  "武器突き"        => ["motion",   "",    3,   0,   1,    2, 200,false, true, "突き" ],
  "弓撃ち"          => ["motion",   "",    3,   0,   1,    2, 200,false, true, "弓"],
  
#--------------------------------------------------------------------------
# ● 角色移动  X轴移动是敌人的自动反向计算
#--------------------------------------------------------------------------
  # 目标…要移动引用的目标坐标。编号引用的是当前的位置,积极的消极的初始位置;(是所以负不能设置到 7)
  #       [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敵我方全] [5=第二个目标] [6=画面]
  # X轴…从对象所看X坐标。绝对值就算是最低时也会比时间高
  # Y轴…从对象所看Y坐标。绝对值就算是最低时也会比时间高
  # H軸…从对象所看H坐标。(离地面的高度) 当H轴是nil无视xy的移动
  # 速度…移动1帧的像素数。指定的时间长度将是一个负数、移动完毕后这将是一个帧的总数的百分比
  # 曲线…移动时的轨道正上、负面向下曲线。
  # 跳跃…跳跃抛物线轨道。[开始跳跃到顶点的轨道, 顶点到着地的轨道]
  # 动画…这里的移动所使用的角色动画名。

  # 目标行动名(系统系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  "戦闘前の味方配置"    => ["move",-7, 10,   80,   0,  0,   0, [  0,  0], "左向き移動"],
  "退場"                => ["move",-7, 0,    80,   0,  7,   0, [  0,  0], "右向き移動"],
  "逃走途中"            => ["move",-7, 0,    80,   0,  7,   0, [  0,  0], "右向き移動"],
  "コマンド入力移動"    => ["move",-7, 0,   -20, nil,-10,   0, [  0,  0], "左向き移動"],
  "ダメージのけぞり"    => ["move", 0,  0,   10, nil,-10,   0, [  0,  0], ""],
  "ダメージのけぞり大"  => ["move", 0,  0,   10, nil,-10,   0, [  0,  0], ""],
  
  # 目标行动名(复位系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  "座標リセット早"      => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "右向き移動"],
  "座標リセット"        => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "右向き移動"],
  "座標リセットカーブ"  => ["move",-7,   0,   0,   0,-20,  -2, [  0,  0], "右向き移動"],
  "座標リセット左向き"  => ["move",-7,   0,   0,   0,-20,   0, [  0,  0], "左向き移動"],
  
  # 目标行动名(自身系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  "一歩前移動"          => ["move", 0, 0,   -20,   0,-10,   0, [  0,  0], "左向き移動"],
  "一歩後移動"          => ["move", 0,  0,   20,   0,-10,   0, [  0,  0], "左向き移動"],
  "一歩前ジャンプ"      => ["move", 0, 0,   -30,   0,-10,   0, [ 20,-20], "左向き移動"],
  "一歩後ジャンプ"      => ["move", 0,  0,   30,   0,-10,   0, [ 20,-20], "左向き移動"],
  "勝利ジャンプ"        => ["move", 0,  10,   0,   0,-25,   0, [ 30,-30], "待机(固定)"],
  "勝利ジャンプ武器"    => ["move", 0,   0,   0,   0,-15,   0, [ 20,  0], "武器掲げ"],
  "勝利ジャンプ着地"    => ["move",-7,   0,   0,   0,-10,   0, [  0,  0], "武器振りR"],
  "縦揺れ01"            => ["move", 0,   0,   0,  20, -2,   0, [  0,  0], ""],
  "縦揺れ02"            => ["move", 0,   0,   0, -20, -2,   0, [  0,  0], ""],
  
  # 目标行动名(目标系)       判別 目标 X轴  Y轴  H轴 速度  曲线   跳跃      动画
  "敵前移動"            => ["move", 1,  0,   30,   0,-20,   0, [  0,  0], "左向き移動"],
  "敵後移動"            => ["move", 1, 0,   -60,   0,-20,   0, [  0,  0], "左向き移動"],
  "敵中移動早"          => ["move", 1,   0,   0,   0,-10,   0, [  0,  0], "左向き移動"],
  "叩き付け前ジャンプ"  => ["move",-1,   0,   0, 100,-20,   0, [ 40,-20], "武器掲げ"],
  "叩き付け"            => ["move",-1,   0,   0,   0,-10,   0, [  0,  0], "武器振りR"],
  
#--------------------------------------------------------------------------
# ● 武器动作 让武器图像动起来的方法
#--------------------------------------------------------------------------
  # 类型…[0…使用图标]
  #       [1…独自图像(图像名角色设定的武器项目中进行。参考Characters文件夹)]
  #       [2…动画元件(※2003规范。同样数量的元件和角色的动画。图像名角色设定的武器项目中进行。
  #           参考Characters文件夹)]
  # 移动…移动图像的距离。[X轴, Y轴]
  # 调整…要微调整图像初始的坐标。[X轴, Y轴]
  # 始度…武器在动作前的最初角度。半圆的0~360度。复数情况为反半圆。
  # 終度…动作后的角度
  # 原点…武器旋转时的原点。[0…中心] [1…左上] [2…右上] [3…左下] [4…右下] [5…和角色同样(一半宽以下的图像)]
  # 反转…当为true时,动作前武器的图像将会显示为反转的。
  # 扩大…[X轴扩大率, Y轴扩大率] 小数点也接受  
  #       [X轴放大率、武器横向放大率。1是同等、2是2倍、0.5是1/2。]
  #       [Y轴放大率、武器纵向放大率。1是同等、2是2倍、0.5是1/2。]
  # Z轴…如果让此动作显示时武器在人物前方写作true。
  # 二刀…限定于二刀流为true、将以二刀流来显示左边武器动作的武器画像。
  #       如果不是二刀流的情况会自动跳过角色动画。
  # 更新…-1个角色动画更新和同步。独立配置的场合[更新时间间隔, 更新模式数, 循环的状况]
  # 指数…武器图像的武器装备(盾)被设定为图像文件将参考、
  #       指数放在这里、图像文件名+指数名的图像将参考
  #       一个以上的武器复数的有规律的使用图像的场合
  #       例) "縦振り"的指数"" => 图像文件名"IconSet"将参考
  #       例) "縦振り2"的指数"_1" => 画像文件名"IconSet_1"将参考
  #       使用该图标的场合将参考System文件夹、独自图像动画和元件放在Characters文件夹中
  # 图像…武器、盾牌设定的图片文件和指数、直接指定的武器图像
  #       这里给的图像文件名。图像放到Characters文件夹中将参考

  # 目标动作名    判別 类型  移动     调整   始度 终度 原点 反转   扩大    Z轴   二刀   更新   指数   画像
  "縦振り"    => ["wp", 0,[  6, 0],[ -4,-10], -45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  "盾"        => ["wp", 0,[  0, 0],[ 12,  0],   0,   0,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  "縦振りL"   => ["wp", 0,[  6, 0],[  0, -8],-135,  45,  4, false, [1,1],  true,  true,   -1,   "",    ""],
  "拳突き"    => ["wp", 0,[-20, 0],[  5,  5], -45, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  "突き"      => ["wp", 0,[-25, 0],[ 25,-10],  45,  45,  4, false, [1,1], false, false,   -1,   "",    ""],
  "掲げ"      => ["wp", 0,[  6,-4],[ -4,-10],  90, -45,  4, false, [1,1], false, false,   -1,   "",    ""],
  
  # 2003规范      判別 类型  移动     调整   始度 终度 原点 反转   扩大    Z轴   二刀   更新   指数   画像
  "弓"        => ["wp", 2,[  0, 0],[  0,  0],   0,   0,  5, false, [1,1],  true, false,   -1,   "",    ""],
  
  # 使用飞行武器  判別 类型  移动     调整   始度 终度 原点 反转   扩大    Z轴   二刀     更新       指数     画像
  "矢"        => ["wp", 0,[  0, 0],[  0,  0],   0,  45,  0, false, [1,1],  true, false,[2,6,false],   "",    "arrow01"],
  "回転"      => ["wp", 0,[  0, 0],[  0,  0],   0, 360,  0, false, [1,1],  true, false,[1,8, true],   "",    ""],
  
#--------------------------------------------------------------------------
# ● 武器・动画飞出 让战斗动画飞出去。飞行道具、远距离攻击用
#--------------------------------------------------------------------------
  # ID…数据库里设定的动画ID。[动画移动ID,被击中时的动画ID] 0是不显示动画。-1是显示武器的动画。
  # 始…动画飞出时的开始位置。当减少时、实行一个以上目标的复数的动画
  #     [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标] [6=画面]
  # 后…动画发出后的结束位置。当减少时、实行一个以上目标的复数的动画
  #     [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标] [6=画面]
  # 始调整…移动开始坐标的微调整。[X轴, Y轴] 敌人的X轴自动反计算的
  # 后调整…移动结束坐标的微调整。[X轴, Y轴] 敌人的X轴自动反计算的
  # 速度…X轴移动1帧的像素数目。负增长将成为处理时间、距离速度会有所变化。
  # 类型…移动后的处理。[0=消失(失误时自动改变为贯穿] [1=直线贯穿] [2=消失(失误时消失)]
  # 轨道…动画飞出去时候的轨道。[从开始到顶点的轨道, 从顶点到结束的轨道]
  #       填入数值的话是走抛物线。正数为向下的抛物线、负数为向上。
  # Z轴…动画或者武器在角色面前显示的话是true
  # 等待…动作行动直到下一个不想迁移就true [移动到动画的等待, 打击时动画的等待]
  # 伤害…达到目标时、如果计算伤害就true
  # 复位…如果移动目标归位时就true。如果不归位就false
  # 相机…如果相机的根据变焦缩放动画就true
  # 循环…当播放的动画已经完成移动时、如果最初循环往复的就true
  # 反转不可…任何的场合、如果不能反转动画就true
  # 武器…填入下面贴附的武器、技能动作名。如果不是用为""

  # 目标行动名         判別     ID   始 后   始调整   后调整 速度 类型  轨道    Z轴       等待       伤害   复位   相机   循环 反转不可 武器
  "矢発射WT"       => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [ true, true],  true,  true,  true, false, false,  "矢"],
  "矢発射"         => ["m_a",[ 0,-1], 0, 1, [ 0, 0], [ 0, 0], 10,  2, [-3,-3], true, [false,false],  true,  true,  true, false, false,  "矢"],
  "水鉄砲発射"     => ["m_a",[69,69], 0, 1, [ 0, 0], [ 0, 0], 10,  0, [ 0, 0], true, [ true, true],  true,  true,  true,  true, false,  ""],
  "武器投げ開始"   => ["m_a",[ 0,-1], 0, 1, [ 4,-6], [ 0, 0], 10,  2, [-3,-3], true, [ true,false],  true,  true,  true, false, false,  "回転"],
  "武器投げ戻し"   => ["m_a",[ 0, 0], 1, 0, [ 0, 0], [ 4,-6], 10,  0, [ 3, 3], true, [ true,false], false,  true,  true, false, false,  "回転"],
  
#--------------------------------------------------------------------------
# ● 战斗动画 数据库的战斗动画 显示动画在战斗
#--------------------------------------------------------------------------
  # ID…动画ID。-1时武器设定为动画 -2时另一端二刀流的动画
  #             -3时技能也变成武器上所带的动画。
  # 对象…[0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标]
  # 复位…对象的坐标移动、如果在追踪动画就是true
  # 等待…如果显示动画等到结束就是true
  # 伤害…如果要计算伤害就是true
  # 相机…如果相机的根据变焦缩放动画就true
  # 反转不可…任何的场合、如果不能反转动画就true
  # 反转…true时动画的图像将被反转。
  # Z轴…如果想显示在前面的动画字符就true

  # 目标行动名(伤害系)       判別     ID 对象  复位   等待   伤害   相机 反转不可  反转    Z轴
  "対象アニメ武器"      => ["anime",  -1,  1, false, false,  true,  true, false,  false,  true],
  "対象アニメ武器WT"    => ["anime",  -1,  1, false,  true,  true,  true, false,  false,  true],
  "対象アニメ武器LWT"   => ["anime",  -2,  1, false,  true,  true,  true, false,  false,  true],
  "対象アニメ"          => ["anime",  -3,  1, false, false,  true,  true, false,  false,  true],
  "対象アニメWT"        => ["anime",  -3,  1, false,  true,  true,  true, false,  false,  true],
  
  # 目标行动名(自身系)       判別     ID 对象  复位   重量   伤害   相机 反转不可  反转    Z轴
  "魔法詠唱中"          => ["anime", 113,  0,  true,  true, false,  true, false,  false,  true],
  "特技待機中"          => ["anime", 114,  0,  true,  true, false,  true, false,  false,  true],
  "魔法発動アニメ"      => ["anime", 115,  0, false,  true, false,  true, false,  false, false],
  "特技発動アニメ"      => ["anime", 116,  0, false,  true, false,  true, false,  false, false],
  
#--------------------------------------------------------------------------
# ● 摄影的工作  画面的缩放和滚动
#--------------------------------------------------------------------------
  # 对象…移动和缩放的对象
  #       [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标] [6=画面]
  # 调整坐标…微调整相机坐标的最后地点 [X轴(正画面→), Y轴(正画面↓)]
  # 时间…摄影的工作所花费的时间
  # 等待…摄影结束为止等待话就true。不要等待的话就false
  # 放大…相机的放大率(%)。放大没有100。

  # 目标动作名          判別    对象   调整坐标   放大 时间  等待
  "カメラリセット"=> ["camera",   6, [   0,   0], 100,  40, false],
  "ズームイン"    => ["camera",   6, [   0, 100], 120,  40, false],
  "ズームアウト"  => ["camera",   6, [   0,   0],  80,  40, false],
  
#--------------------------------------------------------------------------
# ● 画面的摇动  画面摇晃。空中坐标(H坐标是0以上)的角色不要摇动
#--------------------------------------------------------------------------
  # 方向…摇动的方向 [横,纵] 数字越大摇晃范围将扩大。
  # 速度…摇动的速度。规模较小的摇动就快。
  # 時間…摇动的持续时间。振动宽度随着时间一起弱
  # 等待…摇动结束为止等待话就true。不要等待的话就false

  # 目标动作名          判別       方向   速度  时间  等待
  "シェイク小"     => ["shake", [  0, 4],  2,    16, false],
  "シェイク中"     => ["shake", [  0, 6],  3,    30, false],
  "シェイク大"     => ["shake", [  0,12],  3,    40, false],
  
#--------------------------------------------------------------------------
# ● 画面色调变更 角色背景的色调变更
#--------------------------------------------------------------------------
  # 对象…变更色调的对象
  #       [0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标]
  #       [6=背景] [7=自身+目标] [8=自身以外] [9=自分+目标以外] [10=所有]
  # 色调水平…[ R, G, B分别是红、绿、蓝。最初(色调强度), 变更时间, ※返回]
  # ※返回…变更结束返回颜色的时间。不返回就0
  # 等待…色调变更更结束为止等待话就true。不要等待的话就false

  # 色调变更名                    判別    对象     R,   G,   B, 最初 时间 返回  等待
  "色調初期化"               => ["color",  10, [   0,   0,   0,   0,  30,   0], false],
  "ピンチ色調"               => ["color",   0, [ 255,  50,  50, 100,  40,  40], false],
  "毒色調"                   => ["color",   0, [ 170,  50, 255, 170,  30,  30], false],
  "汎用状態異常色調"         => ["color",   0, [ 255, 255,  50, 170,  40,  40], false],
  "背景のみ暗転"             => ["color",   6, [   0,   0,   0, 255,  30,   0], false],
  "自分とターゲット以外暗転" => ["color",   9, [   0,   0,   0, 255,  30,   0], false],
   
#--------------------------------------------------------------------------
# ● 过渡 实行固定画面后过渡
#--------------------------------------------------------------------------
  # 实行动作前"画面固定"将实行、请固定在画面上。
  # 边界…边界的模糊。数值越大变得模糊。
  # 时间…过渡花费的时间。在过渡期间的游戏画面是固定的
  # 过渡文件名…过渡图像。图像放到Pictures文件夹中

  # 目标动作名           判別  边界  时间 过渡文件名
  "サークル"         => ["ts",  40,   60,  "circle"],
  
#--------------------------------------------------------------------------
# ● 残像  角色动作留下的残影
#--------------------------------------------------------------------------
  # 数…残像数。0是显示残像关闭。非常大的负载增加时
  # 间隔…残像显示的时间间隔。数值越小就越狭窄。单位帧(1/60秒)
  # 处理…残像后的处理。true表示直到战斗结束消失,false表示一直没有消失
  # 透明度…残像的透明度 255-不透明,0-透明

  # 目标动作名          判別    数  间隔  处理  透明度
  "残像ON"        => ["mirage",  4,   3,  true,  160],
  "残像OFF"       => ["mirage",  0,   0,  true,    0],
  
#--------------------------------------------------------------------------
# ● 角色旋转。画像旋转。与反转不同、武器动作不能被反映
#--------------------------------------------------------------------------
  # 旋转着角色的动作结束后、旋转角度被复位
  # 旋转中的图像传输原点成为中心。反转不同、不能反映武器动作
  # 时间…旋转过程所需时间。0表示立即反映
  # 始度…旋转开始时的角度。指定于0~360度之间。正数为正半圆、负数为反半圆。
  # 终度…旋转完毕时的角度。指定于0~360度之间。跟上边所记相同,但敌人的设定是与其相反的。
  # 类型…旋转结束后的处理。[0…旋转复位] [1…结束角度左端] [2…循环]

  # 目标动作名         判別    时间  始度  终度  类型
  "右1回転"        => ["angle",  12,    0, -360,   0],
  "左1回転"        => ["angle",  12,    0,  360,   0],
  
#--------------------------------------------------------------------------
# ● 角色放大缩小 武器动作不能被反映
#--------------------------------------------------------------------------
  # 扩大缩小角色的全部动作已经完成、扩大缩小被复位。
  # 反转不同、不反映武器动作
  # 时间…扩大缩小过程所需时间。
  # 开始大小…扩大缩小开始时的大小。小数点也接受。[X轴(横), Y轴(纵)]
  # 结束大小…扩大缩小结束时的大小。小数点也接受。[X轴(横), Y轴(纵)]
  # 类型…扩大缩小结束后的处理。[0…大小重设] [1…结束后大小保持] [2…循环]

  # 目标动作名         判別   时间   开始大小     结束大小  类型
  "横縮み"         => ["zoom",  12,  [1.0, 1.0],  [0.5, 1.0],  0],
  "縦縮み"         => ["zoom",  12,  [1.0, 1.0],  [1.0, 0.5],  0],

#--------------------------------------------------------------------------
# ● 角色透明度操作 画像的透明度变更
#--------------------------------------------------------------------------
  # 透明度操作角色的全部动作已经完成、透明度操作被复位。
  # 时间…透明度变更过程所需时间。
  # 开始…开始时变更的透明度。0-透明 255-不透明
  # 结束…结束时变更的透明度
  # 影…表示阴影效果的话是true、不表示为false
  # 武器…武器也同样透明度操作就true
  # 循环…透明度变更结束后、如果自动操作逆转就true
  # 等待…操作结束后迁移无需等到下一个动作表示true

  # 目标行动名            判別     时间  开始  结束    影   武器   循环   等待
  "逃走透明"         => ["opacity",   30,  255,   0,  true,  true, false, false],
  "透明化"           => ["opacity",   60,  255,   0,  true,  true, false, false],
  "透明化WT"         => ["opacity",   60,  255,   0,  true,  true, false,  true],
  "透明化解除"       => ["opacity",   60,    0, 255,  true,  true, false, false],
  "透明化解除WT"     => ["opacity",   60,    0, 255,  true,  true, false,  true],
  
#--------------------------------------------------------------------------
# ● 状态动画 显示事件使用的状态ICON
#--------------------------------------------------------------------------
  # 种类…状态的种类(纵位置)在0~9之间。
  # 速度…更新速度。2种元件从第一帧将播放
  # 大小…气球的大小

  #  气球名             判別     种类 速度  大小
  "状態異常/汎用"   => ["balloon",   6,  10,  0.6],
  "状態異常/ピンチ" => ["balloon",   5,  10,  0.6],
  "状態異常/睡眠"   => ["balloon",   9,  10,  0.6],
  
#--------------------------------------------------------------------------
# ● 图片的表示  一名角色对应显示一枚图片
#--------------------------------------------------------------------------
  # 号码…要使用图片的号码。它是用于管理图片的号码。不管多少都显示。
  #       完整动作结束后自动自动删除(Bitmap释放)
  # 开始坐标…移动的开始位置。图片的左上角处的原点。[X轴, Y轴]
  #           已经有图像的场合、当开始坐标是在其位置[]
  # 结束坐标…移动的结束位置。开始位置显示成为相同数值
  #           平面使用的场合、开始和结束将保持的移动速度[]
  # 时间…移动时间。0是删除的图片
  # Z轴…图片Z坐标。100以上如果它被显示在窗口的前面
  # 透明度…透明度设定。[开始时的透明度, 每1帧透明度的制度]
  # 平面使用…平面类(图像瓷砖状排列着图像)使用矩形的场合。[X轴,Y轴]
  #           不想使用平面的场合就[]
  # BA反转…偷袭时图像反转X坐标移动如果反向就true
  #         平面使用时的图像不逆转就true、X坐标移动的是相反的
  # 图片文件名…图片文件夹内的文件名。

  # 目标行动名          判別  号码  开始坐标     结束坐标   时间 Z轴   透明度     平面使用  BA反转  图片文件名
  "カットインA1"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-1"],
  "カットインA2"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor4-2"],
  "カットインA3"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-2"],
  "カットインA4"    => ["pic",  0, [-300,   8], [ 100,   8],  30, 90, [  0, 10],        [],  true, "Actor5-3"],
  "カットイン終"    => ["pic",  0,          [], [ 600,   8],  30, 90, [255,  0],        [],  true, ""],
  "カットイン背景始"=> ["pic",  1, [   0,   8], [ 100,   8],  10, 80, [  0, 10], [544,288],  true, "cutin_back"],
  "カットイン背景終"=> ["pic",  1,          [],          [],  10, 80, [255, -7], [544,288],  true, ""],
  "白フェードイン"  => ["pic",  0, [   0,   0], [   0,   0],  50,500, [  0,  6],        [], false, "white"],
  "白フェードアウト"=> ["pic",  0, [   0,   0], [   0,   0],  50,500, [255, -6],        [], false, "white"],
  
#--------------------------------------------------------------------------
# ● 状态操作
#--------------------------------------------------------------------------
  # 対象…[0=自身] [1=目标] [2=敌全] [3=我方全] [4=敌我方全] [5=第二个目标]
  # 扩张…扩张对象的设定 [0=没有扩张] [1=随机1体] [2=自身以外]
  # 操作…如果赋予状态就"+",如果解除状态就"-"
  # 状态ID…操作切换状态的ID一起排列放进去

  # 状态赋予名               判別  对象 扩张 操作 状态ID
  "戦闘不能付与"         => ["sta",  0,   0, "+",  [1]],
  
#--------------------------------------------------------------------------
# ● FPS(游戏整体的速度变更) 检查行动的细节
#--------------------------------------------------------------------------
  # 游戏速度…60是默认的数值、比这个值低的时候就会放慢。 

  # 目标行动名       判別  游戏速度
  "スロー再生"   => ["fps",  15],
  "通常再生"     => ["fps",  60],
  
#--------------------------------------------------------------------------
# ● 角色画像变更 角色画像引用的文件变更
#--------------------------------------------------------------------------
  # 维持…角色的场合。战斗后图像变更维持表示true
  # 指数…角色的场合。行走图的图像,数字排列方式如下:
  #          [0][1][2][3]
  #          [4][5][6][7]
  #
  # 文件名…变更图像文件名。角色放在Characters文件夹、
  #         敌人放在Battlers文件夹。
  # 脸图…主角的場合、战斗后的变更角色脸图[脸图指数, 文件名]
  #       如果不变更则是[]

  # 目标行动名              判別     维持    指数    文件名        脸图
  "オオカミに変身"    => ["change", false,    6,    "Animal", [0, "Actor4"]],

#--------------------------------------------------------------------------
# ● 技能连发  行动中断后、导出不同的技能
#--------------------------------------------------------------------------
  # 习得…如果连发的技能没有被习得也可以实行的话是true
  # 成本条件…技能连发的成本不足而可能就true
  # 技能ID…连发技能的ID

  # 目标行动名           判別   习得  成本条件 技能ID
  "多段攻撃に派生"   => ["der",  true,  false,   130],

#--------------------------------------------------------------------------
# ● 声音的演奏  BGM・BGS・SE按响了
#--------------------------------------------------------------------------
  # 种别…効果音为"se" BGM为"bgm" BGS为"bgs"
  # 速度…速度。50~150之间指定的最多 不管哪个都要默认为100。
  # 音量…音量。50~150之间指定的指定 不管哪个都要默认为100。
  # 文件名…播放的文件名。""时不改变任何BGM和BGS的设定。

  # 目标行动名         判別    种别  速度 音量 文件名
  "Bow1"          => ["sound",  "se", 100,  80, "Bow1"],
  
#--------------------------------------------------------------------------
# ● 电影的播放  ogv电影文件播放
#--------------------------------------------------------------------------
  # 文件名…播放电影文件名。电影放在Movies文件夹

  # 目标行动名              判別     文件名
  "死亡フラグムービー" => ["movie", "sample1"],
  
#--------------------------------------------------------------------------
# ● 游戏开关的设置(侧面图专用开关)的操作
#--------------------------------------------------------------------------
  # ID正值游戏开关、侧视图中专用开关的操作
  # ON号码…ON开关ID整理排列放进去
  # OFF号码号…OFF开关ID整理排列放进去
  #
  # 开关设置名           判別     ON号码   OFF号码  
  "スイッチNo1/ON"  => ["switch",  [ 1],   []],
  "背景を宇宙に変更"=> ["switch",  [-4],   []],
  "背景宇宙を解除"  => ["switch",    [],   [-4]],
  "魔方陣ON"        => ["switch",  [-5],   []],
  "魔方陣OFF"       => ["switch",    [],   [-5]],
  
#--------------------------------------------------------------------------
# ● 游戏变量的操作
#--------------------------------------------------------------------------
  # 变量No…设置哪个变量
  # 操作…[0=代入] [1=加法] [2=减法] [3=乘法] [4=除法] [5=剩余]
  # 设置数值…指定成为演算对象的数值。负增长、至于这个具体数字
  #           绝对值的变量No这些值存储在计算的对象
  #
  # 变量设置名         判別     变量No  操作 设置数值
  "変数No1/+1"     => ["variable",   1,     1,     1],
  
#--------------------------------------------------------------------------
# ● 条件分岐 (游戏开关) 条件设定、满足条件以后将停止所有行动
#--------------------------------------------------------------------------
  # 开关No…设置哪个开关。侧视图专用开关操作
  # 条件…如果ON就true、如果OFF就false
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名           判別  开关No  条件  分岐
  "スイッチNo1=ONで実行" => ["n_1",   1,   true,   0],
  
#--------------------------------------------------------------------------
# ● 条件分岐 (游戏变量)
#--------------------------------------------------------------------------
  # 变量No…设置哪个变量
  # 数值…条件的数字。它在减的绝对值的变量被内定为参考。
  # 条件…引用变量条件的数字…[0=等于] [1=小于] [2=大于]
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別  变量No 数値  条件  分岐
  "変数No1=1で実行"      => ["n_2",   1,    1,    0,    0],

#--------------------------------------------------------------------------
# ● 条件分岐 (状态)
#--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 状态ID…设置哪个状态
  # 条件…[0=赋予状态] [1=解除状态]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別   对象 状态ID  条件  人数  分岐
  "死亡確認"             => ["n_3",   1,    1,    0,     1,   1],

#--------------------------------------------------------------------------
# ● 条件分岐 (技能)
#--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 技能ID…设置哪个技能
  # 条件…[0=可以使用] [1=不能使用]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別  对象 技能ID 条件  人数  分岐
  "強撃使用可限定"       => ["n_4",  0,   80,    0,    1,   0],

#--------------------------------------------------------------------------
# ● 条件分岐 (参数)
#--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 种別…设置参数条件
  #       [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP] [7=攻击力]
  #       [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=幸运]
  # 数值…条件的数字。从最大值减去的百分比%(HP・MP・TP限定)
  # 条件…引用变量条件的数字…[0=等于] [1=小于] [2=大于]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別  对象  种别  数值  条件  人数 分岐
  "HP50%以上で実行"      => ["n_5",  0,    4,  -50,    2,    1,   0],

#--------------------------------------------------------------------------
# ● 条件分岐 (装备)
#--------------------------------------------------------------------------
  # 对象…条件参考角色对象 [0=自己] [1=目标] [2=敌全体] [3=我方全体] [4=敌我全体] [5=第二个目标]
  # 种别…条件装备的种类 [0=武器] [1=防具]
  # 装备ID…在改类型的项目ID。一次性排列在[]里。
  #         在下降武器(防具)类型参考
  # 条件…[0=有装备] [1=没有装备]
  # 人数…上面条件的必要人数。条件对象队伍的場合、0队伍全员的数量
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  #
  # 目标行动名               判別  对象  种别    ID    条件  人数 分岐
  "ハンドアクス限定"     => ["n_6",  0,    0,    [1],    0,    1,   0],
  "拳限定"               => ["n_6",  0,    0,   [-2],    0,    1,   0],
  "拳除外"               => ["n_6",  0,    0,   [-2],    0,    1,   1],
  "弓限定"               => ["n_6",  0,    0,   [-6],    0,    1,   0],
  "弓除外"               => ["n_6",  0,    0,   [-6],    0,    1,   1],
  "拳弓除外"             => ["n_6",  0,    0,[-2,-6],    0,    1,   1],
  
#--------------------------------------------------------------------------
# ● 条件分岐 (脚本) 
#--------------------------------------------------------------------------
  # 分岐…当条件满足的分支处理。如果不符合却恰恰相反被处理
  #       [0=请执行以下操作] [1=取消以下操作] [2=全部动作结束]
  # 脚本…true或false返回给脚本
  #
  # 目标行动名               判別   分岐   脚本
  "50%の確率で実行"      => ["n_7",   0,  "rand(100) < 50"],
  "アクター限定"         => ["n_7",   0,  "@battler.actor?"],
  "アクターID1限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 1"],
  "アクターID2限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 2"],
  "アクターID6限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 6"],
  "アクターID7限定"      => ["n_7",   0,  "@battler.actor? && @battler.actor_id == 7"],
  "エネミー限定"         => ["n_7",   0,  "[email protected]?"],
  "エネミー中止"         => ["n_7",   2,  "[email protected]?"],
  "二刀流限定"           => ["n_7",   0,  "@battler.dual_wield?"],
  
#--------------------------------------------------------------------------
# ● 第二个目标操作
#--------------------------------------------------------------------------
  # 第二个目标时、通常单独的目标的独立的目标信息
  # 不想进行任何操作的场合、通常目标相同的对象所配置。
  # 对象…[0=自身] [1=目标] [2=敌全体] [3=我方全体] [4=敌我方全体] [5=第二个目标]
  # INDEX…对象队伍的指数(排列顺序)在选择。 INDEX = [指数, 判別]
  #        指数…指数数値
  #        判別…数值条件 [0=没有缩小] [1=对象指数] [2=该指数排除]
  # ID…对象角色(敌人)ID进入选择ID的数字。0是选择不要
  #     负增长的绝对值的ID会消除的条件
  # 状态…对象当前增加状态ID进入选择状态ID的数字。0是选择不要
  #       负增长的增加没有条件。
  # 技能…对象可以使用的技能ID进入选择技能ID的数字。0是选择不要
  #       负增长不可能使用的条件。
  # 参数…对象的参数条件选择 参数 = [种别, 数值, 判別]
  #       种别…[0=没有缩小] [1=Lv] [2=最大HP] [3=最大MP] [4=HP] [5=MP] [6=TP]
  #             [7=攻击力] [8=防御力] [9=魔法力] [10=魔法防御] [11=敏捷性] [12=幸运]
  #       数值…种别决定一个数值。从最大值减去的百分比%(HP・MP・TP限定)
  #       判別…数值的条件 [0=同样] [1=小于] [2=多于]
  # 装备…对象装备品的条件选择。角色限定装备 = [种类, ID]
  #       种类…[0=武器] [1=防具]
  #       ID…装备种别的条件项目ID一次性排列到[]里。0是选择不要
  #           在下降为(防具)类型的。
  # 扩张…扩张对象的设定 [0=没有扩张] [1=随机1体] [2=自身以外]
  # 操作…[0=不操作] [1=通常目标和第二个目标变更] [2=第二个目标・通常目标初始化]

  # 目标行动名          判別 对象  INDEX  ID 状态 技能    参数       装备   扩张 操作
  "自分以外味方全員"=> ["s_t", 3, [ 0, 0], 0,  0,   0, [ 0, 0, 0], [ 0,[0]],  2,   0],
  "全域化"          => ["s_t", 4, [ 0, 0], 0, -1,   0, [ 0, 0, 0], [ 0,[0]],  0,   1],
  
#--------------------------------------------------------------------------
# ● 公共事件的呼叫  
#--------------------------------------------------------------------------
  # ID…公共事件ID
  # ウエイト…运行中的事件,停止就true
  #
  # 公共事件设置名        判別    ID   ウエイト
  "コモンNo1"       => ["common",  1,  true],
  
#--------------------------------------------------------------------------
# ● 脚本的操作  
#--------------------------------------------------------------------------
  # 使动作被添加到建议的脚本中。样品p=1可以添加任何自己想要设置的脚本。
  # 功能中、不能处理文字列。
  #
  #  脚本设置名  
  "テストスクリプト" => ["p = 1 "],

#--------------------------------------------------------------------------
# ● 其它 没有设定项目的完整动作放进这
#--------------------------------------------------------------------------
  # 战斗角色消除…显示战斗动画消除(飞行动画被消除)
  # 强制战斗结束…战斗强制结束
  # 画面固定…让游戏画面固定。放进过渡前
  # 伤害动画…技能动画播放、就在结束之前伤害POP
  # 反转…武器图像动画反转。反转结束时的完全版或动作再次反转它
  # 武器消除…显示武器图像消除
  # 武器消除解除…消除要显示的武器图像
  # 敌人战斗不能…实行战斗不能效果。主要敌人使用的战斗不能
  # 战斗不能禁止…对象的HP是0的场合的禁止战斗不能。连续攻击开始时等
  # 战斗不能禁止解除…禁止解除战斗不能。连续攻击的结束。工作结束时允许战斗不能。
  # 待机取消…待机动作将不执行。战斗动作中演出等
  # 待机消除解除…待机取消解除、进行等待动作
  # 初期位置变更…原本的坐标(初期位置)目前的坐标变更
  # 初期位置变更解除…初期位置变更改变其正常恢复原状。
  # 强制…下次的行动强制目标(反应)
  # 强制2…下次的行动强制第二个目标(反应)
  # 下个行动者…战斗结束认定、之后的角色都采取行动。
  # 个别开始…复数目标单独攻击处理的场合、重复行动开始的标记
  # 个别结束…复数目标单独攻击处理的场合、重复行动结束的标记
  # 循环开始…"循环开始"和"循环结束"的之间的动作一直重复
  # 循环结束…"循环开始"和"循环结束"的之间的动作一直重复

  # 目标动作名              判別
  "戦闘アニメ消去"    => ["anime_off"],
  "強制戦闘終了"      => ["battle_end"],
  "画面固定"          => ["graphics_freeze"],
  "ダメージアニメ"    => ["damage_anime"],
  "反転"              => ["mirror"],
  "武器消去"          => ["weapon_off"],
  "武器消去解除"      => ["weapon_on"],
  "敵コラプス"        => ["normal_collapse"],
  "コラプス禁止"      => ["no_collapse"],
  "コラプス禁止解除"  => ["collapse"],
  "待機キャンセル"    => ["non_motion"],
  "待機キャンセル解除"=> ["non_motion_cancel"],
  "初期位置変更"      => ["change_base_position"],
  "初期位置変更解除"  => ["set_base_position"],
  "強制"              => ["force_action"],
  "強制2"             => ["force_action2"],
  "次の行動者へ"      => ["next_battler"],
  "個別開始"          => ["individual_start"],
  "個別終了"          => ["individual_end"],
  "ループ開始"        => ["loop_start"],
  "ループ終了"        => ["loop_end"],
  
#--------------------------------------------------------------------------
# ● 等待 下一个动作而不需要等待的时间
#--------------------------------------------------------------------------
  # 在动作数值的场合、时间和等待
  # (例) "20" …下一个动作不需要等待20帧
  #
  # 负增长数值将成为随机等待、这个数值的0~绝对值之间
  # 随机等待时间的决定。
  # (例) "-20" …随机等待0-20帧

#--------------------------------------------------------------------------
# ● 快捷命令
#--------------------------------------------------------------------------
  # 动作名通常设定全部动作排列放到行动制作里
  # 动作设定没有记载了指令、可以减少一些工作
  # 经常使用让你在过去的快捷方式使用和登记动作没有增加。
  #
  # [战斗动画]
  # (例) "anime(20)" …实行数据库20号的动画目标(有等待)
  # (例) "anime(20,false)" …实行数据库20号的动画目标(无需等待)
  # (例) "anime_me(20)" …实行数据库20号的动画自身(有等待)
  # (例) "anime_me(20,false)" …实行数据库20号的动画自身(无需等待)
  #
  # [等待 延迟指数] ※独立队伍等待延迟
  # (例) "delay(12)"…指数1号的等待是0帧 2号的等待是12帧  3号的等待是24帧
  #
  # [効果音(SE)]
  # (例) "se('Bow1')" …文件名Bow1的SE按响了
  # (例) "se('Bow1',50)" …文件名Bow1的SE音调50按响了
  #
  # [目标动作(全部动作)强制]
  # (例) "target('伤害弯向后')" …目标伤害强制操作
  # (例) "target2('被伤害')" …第二个目标被伤害的强制全部动作
   
  }
end
#==============================================================================
# ■ Sideview Ver100
#------------------------------------------------------------------------------
#  サイドビューバトラーを管理するクラスです。
#==============================================================================
class SideView
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数 
  #--------------------------------------------------------------------------
  attr_accessor   :x                    # 画面X座標
  attr_accessor   :y                    # 画面Y座標
  attr_accessor   :z                    # 画面Z座標
  attr_accessor   :h                    # 高さ座標
  attr_accessor   :j                    # ジャンプ座標
  attr_accessor   :c                    # カーブ座標
  attr_accessor   :ox                   # 横原点
  attr_accessor   :oy                   # 縦原点
  attr_accessor   :oy_adjust            # 縦原点補正
  attr_accessor   :angle                # 回転角度
  attr_accessor   :zoom_x               # 横の拡大率
  attr_accessor   :zoom_y               # 縦の拡大率
  attr_accessor   :pattern_w            # セル横位置(矩形内)
  attr_accessor   :pattern_h            # セル縦位置(矩形内)
  attr_accessor   :sx                   # セル横位置(画像全体)
  attr_accessor   :sy                   # セル縦位置(画像全体)
  attr_accessor   :pattern_type         # セル更新タイプ
  attr_accessor   :pattern_time         # セル更新間隔
  attr_accessor   :graphic_name         # バトラー画像ファイル名
  attr_accessor   :graphic_file_index   # バトラー画像ファイル名インデックス
  attr_accessor   :graphic_index        # バトラー画像インデックス
  attr_accessor   :cw                   # セル横矩形
  attr_accessor   :ch                   # セル縦矩形
  attr_accessor   :shadow_visible       # 影表示
  attr_accessor   :weapon_visible       # 武器表示
  
  attr_accessor   :wait                 # 次の動作待ち時間
  attr_accessor   :weapon_index         # 表示中の武器画像インデックス配列
  attr_accessor   :weapon_end           # 武器アニメ終了フラグ
  attr_accessor   :force_action         # 強制アクション
  attr_accessor   :target_battler       # ターゲットバトラー情報
  attr_accessor   :second_targets       # セカンドターゲット情報
  attr_accessor   :m_a_targets          # アニメ飛ばしターゲット情報
  attr_accessor   :individual_targets   # 個別処理ターゲットバトラー情報
  attr_accessor   :effect_data          # エフェクトデータ
  attr_accessor   :anime_id             # アニメID配列
  attr_accessor   :anime_move_id        # 飛ばしアニメID配列
  attr_accessor   :mirror               # 反転フラグ
  attr_accessor   :opacity              # 透明度
  attr_accessor   :opacity_data         # 透明度操作情報
  attr_accessor   :set_damage           # バトルシーンでのダメージ処理
  attr_accessor   :m_a_data             # アニメ飛ばし情報
  attr_accessor   :m_a_starter          # アニメ飛ばし開始ターゲット情報
  attr_accessor   :action_end           # バトルシーンでの行動終了
  attr_accessor   :damage_anime_data    # ダメージ戦闘アニメのデータ
  attr_accessor   :anime_no_mirror      # 戦闘アニメの反転禁止フラグ
  attr_accessor   :anime_horming        # 戦闘アニメのホーミングフラグ
  attr_accessor   :anime_camera_zoom    # 戦闘アニメがカメラに合わせて拡大縮小するか
  attr_accessor   :anime_plus_z         # 戦闘アニメZ座標補正
  attr_accessor   :derivation_skill_id  # スキル派生ID
  attr_accessor   :immortal             # 不死身フラグ
  attr_accessor   :mirage               # 残像データ
  attr_accessor   :balloon_data         # ふきだしデータ
  attr_accessor   :timing               # 別バトラーからのタイミングデータ
  attr_accessor   :timing_targets       # タイミングデータを渡す別バトラー
  attr_accessor   :color_set            # 色調変更データ
  attr_accessor   :color                # 色調データ
  attr_accessor   :change_up            # 画像変更フラグ
  attr_accessor   :hit                  # 被攻撃回数
  attr_accessor   :add_state            # 何度も付加ステートの表示を防ぐフラグ
  attr_accessor   :counter_id           # カウンター時のスキルID
  attr_accessor   :reflection_id        # 魔法反射時のアニメID
  attr_accessor   :result_damage        # ターン終了時のHP変動データ
  attr_accessor   :active               # 行動権
  attr_accessor   :anime_off            # 戦闘アニメ消去
  attr_accessor   :command_action       # コマンドアクションフラグ
   
  attr_accessor   :base_x               # 初期位置 X座標
  attr_accessor   :base_y               # 初期位置 Y座標
  attr_accessor   :base_h               # 初期位置 高さ座標
  attr_accessor   :max_pattern_w        # セルの横分割数
  attr_accessor   :max_pattern_h        # セルの縦分割数
  
  attr_reader     :collapse             # コラプスフラグ
  attr_reader     :picture              # ピクチャ表示フラグ
  #--------------------------------------------------------------------------
  # ● 初始化物件
  #--------------------------------------------------------------------------
  def initialize(battler)
    @battler = battler
    reset
  end
  #--------------------------------------------------------------------------
  # ● 初始化
  #--------------------------------------------------------------------------
  def reset
    @x = 0
    @y = 0
    @z = 0
    @h = 0
    @j = 0
    @c = 0
    @jump = []
    @curve = []
    @ox = 0
    @oy = 0
    @oy_adjust = 0
    @z_plus = 0
    @move_time = 0
    @Angle = 0
    @angle_time = 0
    @zoom_x = 1
    @zoom_y = 1
    @zoom_time = 0
    @pattern_w = 0
    @pattern_h = 0
    @sx = 0
    @sy = 0
    @pattern_type = 0
    @pattern_time = 0
    @pattern_rest_time = 0
    @graphic_name = ""
    @graphic_file_index = ""
    @graphic_index = 0
    @cw = 0
    @ch = 0
    @shadow_visible = false
    @weapon_visible = true
   
    @Wait = 0
    @weapon_index = []
    @weapon_end = true
    @full_action = []
    @action = []
    @force_action = ""
    @target_battler = []
    @second_targets = []
    @individual_targets = []
    @m_a_targets = []
    @effect_data = []
    @anime_id = []
    @anime_move_id = []
    @opacity = 255
    @opacity_data = []
    @set_damage = false
    @m_a_data = []
    @m_a_starter = []
    @action_end = false
    @damage_anime_data = []
    @anime_no_mirror = false
    @anime_horming = false
    @anime_camera_zoom = false
    @anime_plus_z = true
    @derivation_skill_id = 0
    @immortal = false
    @mirage = []
    @play_data = []
    @balloon_data = []
    @picture = false
    @timing = []
    @timing_targets = []
    @color_set = []
    @color = []
    @change_up = false
    @non_motion = false
    @graphics_change = false
    @hit = []
    @add_state = []
    @collapse = false
    @counter_id = 0
    @reflection_id = 0
    @result_damage = [0,0]
    @active = false
    @anime_off = false
    @command_action = false
   
    @base_x = 0
    @base_y = 0
    @base_z = 0
    @base_h = 0
    @max_pattern_w = 0
    @max_pattern_h = 0
    @pattern_kind = 0
    @pattern_count = 0
    @move_time = 0
    @mirror = false
    @battler.set_graphic(@pre_change_data[0], @pre_change_data[1], @pre_change_data[2], @pre_change_data[3]) if @pre_change_data != nil
    @pre_change_data = nil
  end  
  #--------------------------------------------------------------------------
  # ● 格局
  #--------------------------------------------------------------------------
  def setup(bitmap_width, bitmap_height, first_action_flag)
    reset if first_action_flag
    set_data
    set_base_position if !@graphics_change
    set_graphics(bitmap_width, bitmap_height)
    set_target
    setup_graphics_change if @graphics_change
    first_battler_anime_set if first_action_flag
  end  
  #--------------------------------------------------------------------------
  # ● 取得角色数据
  #--------------------------------------------------------------------------
  def set_data
    return if @battler == nil
    if @battler.actor?
      @graphic_name = @battler.character_name
      @graphic_index = @battler.character_index
    else
      @graphic_name = @battler.battler_name
      @graphic_index = 0
    end
    @max_pattern_w = max_pattern[0]
    @max_pattern_h = max_pattern[1]
  end
  #--------------------------------------------------------------------------
  # ● 基础坐标设置 data=[X轴, Y轴, H轴]  moment_set…即时配置
  #--------------------------------------------------------------------------
  def set_base_position(moment_set = true)
    mirroring_reset
    if @battler.actor?
      data = N03::ACTOR_POSITION[@battler.index].dup
      @base_x = data[0] * 100 if !@mirror
      @base_x = (Graphics.width - data[0]) * 100 if @mirror
    else
      data = [@battler.screen_x, @battler.screen_y, 0].dup
      @base_x = data[0] * 100 if !$sv_camera.mirror
      @base_x = (Graphics.width - data[0]) * 100 if $sv_camera.mirror
    end
    @base_y = data[1] * 100
    @base_h = data[2] * 100
    @base_z = @y
    return if !moment_set
    @x = @base_x
    @y = @base_y
    @z = @base_z
  end
  #--------------------------------------------------------------------------
  # ● 取得图像数据
  #--------------------------------------------------------------------------
  def set_graphics(bitmap_width, bitmap_height)
    sign = @graphic_name[/^[\!\$]./]
    if sign && sign.include?('$')
      @cw = bitmap_width / @max_pattern_w
      @ch = bitmap_height / @max_pattern_h
    elsif @max_pattern_w == 1 && @max_pattern_h == 1
      @cw = bitmap_width
      @ch = bitmap_height
    else
      @cw = bitmap_width / (@max_pattern_w * 4)
      @ch = bitmap_height / (@max_pattern_h * 2)
    end
    @ox = @cw / 2
    @oy = @ch
    @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
    @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  end
  #--------------------------------------------------------------------------
  # ● 设定目标
  #--------------------------------------------------------------------------
  def set_target(target = nil)
    @target_battler = target
    @target_battler = [@battler] if target == nil
    @second_targets = @target_battler
  end
  #--------------------------------------------------------------------------
  # ● 设置图像的变更
  #--------------------------------------------------------------------------
  def setup_graphics_change
    @graphics_change = false
    @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
    @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
  end  
  #--------------------------------------------------------------------------
  # ● 取得战斗开始时的待机动画图像数据
  #--------------------------------------------------------------------------
  def first_battler_anime_set
    loop do
      update
      break if @action_data == nil
      break if @action_data[0] == "motion"
      break if @action_data[0] == "move" && @action_data[8] != ""
      break if @full_action == []
    end
    start_action(first_action) if @battler.movable?
  end
  #--------------------------------------------------------------------------
  # ● 开始动作
  #--------------------------------------------------------------------------
  def start_action(kind = nil)
    return if @event_fix && $game_troop.interpreter.running?
    # 等待中的场合取消
    return @wait -= 1 if @wait > 0 && kind == nil
    action_setup(false) if kind != nil
    set_action(kind)
    @action = kind if @action == nil
    # 动作顺序行动结束处理转变
    action_terminate if @action == nil
    # 决定下一个动作
    @action_data = N03::ACTION[@action]
    next_action
  end
  #--------------------------------------------------------------------------
  # ● 初始化行动参数
  #--------------------------------------------------------------------------
  def action_setup(reset = true)
    @event_fix = false
    @set_damage = false
    @action_end = false
    @balloon_data = []
    @loop_act = []
    angle_reset if reset
    zoom_reset if reset
    opacity_reset if reset
    @curve = []
    @c = 0
    convert_jump
  end  
  #--------------------------------------------------------------------------
  # ● 行动结束的处理
  #--------------------------------------------------------------------------
  def action_terminate
    @mirage = [] if @mirage_end
    mirroring_reset
    @picture = false
    @individual_targets = []
    action_setup if @active
    action_setup(false) if !@active
    # 待机开始行动迁移
    stand_by_action if !@non_motion
    # 战斗行动激活结束权利
    next_battler
  end  
  #--------------------------------------------------------------------------
  # ● 新动作内容的決定
  #--------------------------------------------------------------------------
  def set_action(kind = nil)
    full_act = N03::FULLACTION[kind]
    @full_action = full_act.dup if full_act != nil
    @action = @full_action.shift
    # 参考全部动作如果全部动作统合
    full_act2 = N03::FULLACTION[@action]
    @full_action = full_act2.dup + @full_action if full_act2 != nil
  end
  #--------------------------------------------------------------------------
  # ● 采取下个行动
  #--------------------------------------------------------------------------
  def next_action
    @wait = 0
    #  捷径确认
    eval(@action) if @action != nil && @action_data == nil && N03::FULLACTION[@action] == nil
    # 体能设定
    @wait = @action.to_i if @wait == 0 && @action_data == nil
    @wait = rand(@wait.abs + 1) if @wait < 0
    # 开始动作
    action_play
  end
  #--------------------------------------------------------------------------
  # ● 待机开始动作迁移
  #--------------------------------------------------------------------------
  def stand_by_action
    # 通常待机
    stand_by_act = normal
    # HP的1/4紧要关头行动
    stand_by_act = pinch if @battler.hp <= @battler.mhp / 4
    # 状态检查
    stand_by_act = state(@battler.states[0].id) if @battler.states[0] != nil && state(@battler.states[0].id) != nil
    # 指令检查
    stand_by_act = command if @command_action && command != nil
    set_action(stand_by_act)
    @action = stand_by_act if @action == nil
  end
  #--------------------------------------------------------------------------
  # ● 开始强制动作
  #--------------------------------------------------------------------------
  def start_force_action
    return if @active
    start_action(@force_action)
    @force_action = ""
  end  
  #--------------------------------------------------------------------------
  # ● 追加动作
  #--------------------------------------------------------------------------
  def add_action(kind)
    @full_action.push(kind)
  end  
  #--------------------------------------------------------------------------
  # ● 插入动作
  #--------------------------------------------------------------------------
  def unshift_action(kind)
    @full_action.unshift(kind)
  end  
  #--------------------------------------------------------------------------
  # ● 更新帧数
  #--------------------------------------------------------------------------
  def update
    # 开始动作
    start_action
    # 开始强制动作
    start_force_action if @force_action != ""
    # 更新动画模式
    update_pattern
    # 更新移动
    update_move
    # 更新旋转
    update_angle if @angle_time != 0
    # 更新扩大缩小
    update_zoom if @zoom_time != 0
    # 更新透明度
    update_opacity if @opacity_data != []
  end
  #--------------------------------------------------------------------------
  # ● 更新动画模式
  #--------------------------------------------------------------------------
  def update_pattern
    return @pattern_rest_time -= 1 if @pattern_rest_time != 0
    return if @max_pattern_w == 1 && @max_pattern_h == 1
    @pattern_rest_time = @pattern_time
    # 开始播放・取得结束单元位置
    if @pattern_kind > 0 # 通常播放中
      @pattern_start = 0
      @pattern_end = @max_pattern_w - 1
    elsif @pattern_kind < 0 # 逆转播放中
      @pattern_start = @max_pattern_w - 1
      @pattern_end = 0
    end
    # 结束单程的播放
    @pattern_count += 1 if @pattern_w == @pattern_end && @pattern_kind != 0
    # 循环处理
    case @pattern_type.abs
    when  1,3 # 单程
      @pattern_kind =  0 if @pattern_count != 0 && @pattern_type ==  1
      @pattern_kind =  0 if @pattern_count != 0 && @pattern_type == -1
      @pattern_kind =  1 if @pattern_count != 0 && @pattern_type ==  3
      @pattern_kind = -1 if @pattern_count != 0 && @pattern_type == -3
      @pattern_w = @pattern_start - @pattern_kind if @pattern_count != 0 && @pattern_type.abs == 3
      @pattern_count = 0
    when  2,4 # 往返
      @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  2
      @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -2
      @pattern_kind =  0 if @pattern_count == 2 && @pattern_type ==  2
      @pattern_kind =  0 if @pattern_count == 2 && @pattern_type == -2
      @pattern_kind = -1 if @pattern_count == 1 && @pattern_type ==  4
      @pattern_kind =  1 if @pattern_count == 1 && @pattern_type == -4
      @pattern_kind =  1 if @pattern_count == 2 && @pattern_type ==  4
      @pattern_kind = -1 if @pattern_count == 2 && @pattern_type == -4
      @pattern_count = 0 if @pattern_count == 2
    end
    # 更新单元
    @pattern_w += 1 * @pattern_kind
    @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
  end
  #--------------------------------------------------------------------------
  # ● 更新移动
  #--------------------------------------------------------------------------
  def update_move
    @z = @y / 100 + @z_plus
    return if @move_time == 0
    target_position_set if @horming_move
    @x = (@x * (@move_time - 1) + @target_x) / @move_time
    @y = (@y * (@move_time - 1) + @target_y) / @move_time
    @h = (@h * (@move_time - 1) + @target_h) / @move_time if @move_h != nil
    @c += @curve[@move_time - 1] if @curve[@move_time - 1] != nil
    @j += @jump[@move_time - 1] if @jump[@move_time - 1] != nil
    @move_time -= 1
    convert_jump if @move_time == 0
  end
  #--------------------------------------------------------------------------
  # ● 更新移动目标
  #--------------------------------------------------------------------------
  def target_position_set
    target_position = N03.get_targets_position(@move_targets, @horming_move)
    @target_x = target_position[0] + @move_x
    @target_y = target_position[1] + @move_y
    @target_h = target_position[2] + @move_h if @move_h != nil
  end  
  #--------------------------------------------------------------------------
  # ● 更新旋转
  #--------------------------------------------------------------------------
  def update_angle
    @angle += @angling
    @angle_time -= 1
    return if @angle_time != 0
    return angle_reset if @angle_data[4] == 0
    angling(@angle_data) if @angle_data[4] == 2
  end  
  #--------------------------------------------------------------------------
  # ● 更新扩大缩小
  #--------------------------------------------------------------------------
  def update_zoom
    @zoom_x += @zooming_x
    @zoom_y += @zooming_y
    @zoom_time -= 1
    return if @zoom_time != 0
    return zoom_reset if @zoom_data[4] == 0
    zooming(@zoom_data) if @zoom_data[4] == 2
  end
  #--------------------------------------------------------------------------
  # ● 透明度更新
  #--------------------------------------------------------------------------
  def update_opacity
    @opacity += @opacity_data[2]
    @opacity_data[0] -= 1
    return if @opacity_data[0] != 0
    return if !@opacity_data[5]
    @opacity_data[2] *= -1
    @opacity_data[0] = @opacity_data[1]
  end
  #--------------------------------------------------------------------------
  # ● 实行动作
  #--------------------------------------------------------------------------
  def action_play
    return if @action_data == nil
    action = @action_data[0]
    # 战斗角色反转的场合
    return mirroring                    if action == "mirror"
    # 残像的场合
    return mirage_set                   if action == "mirage"
    # 回转的场合  
    return angling                      if action == "angle"
    # 扩大缩小的场合  
    return zooming                      if action == "zoom"
    # 透明度操作的场合  
    return set_opacity                  if action == "opacity"
    # 战斗角色动画的場合
    return battler_anime                if action == "motion"
    # 移动的場合
    return move                         if action == "move"
    # 武器动画的場合
    return weapon_anime([@action_data]) if action == "wp"
    # 跳过动画的場合
    return move_anime                   if action == "m_a"
    # 战斗场景通讯的场合(战斗不能)
    return set_play_data                if action == "collapse" or action == "no_collapse"
    # 显示战斗数据库的动画的場合   
    return battle_anime                 if action == "anime"
    # 摄影的場合
    return camera                       if action == "camera"
    # 画面摇动的場合
    return shake                        if action == "shake"
    # 画面色调变更的場合
    return color_effect                 if action == "color"
    # 过渡的場合
    return transition                   if action == "ts"
    # 气球动画显示的場合  
    return balloon_anime                if action == "balloon"
    # 图片显示的場合
    return picture_set                  if action == "pic"
    # 状态操作的場合
    return state_set                    if action == "sta"
    # FPS变更的場合
    return fps                          if action == "fps"
    # 战斗角色图像变更的場合   
    return graphics_change              if action == "change"
    # 技能衍生的場合
    return derivating_skill             if action == "der"
    # BGM/BGS/SE演奏的場合  
    return sound                        if action == "sound"
    # 电影再生的場合
    return movie                        if action == "movie"
    # 游戏开关操作的場合  
    return switches                     if action == "switch"
    # 变量开关操作的場合  
    return variable                     if action == "variable"
    # 条件分岐(游戏开关)的場合
    return nece_1                       if action == "n_1"
    # 条件分岐(游戏变量)的場合
    return nece_2                       if action == "n_2"
    # 条件分岐(状态)的場合
    return nece_3                       if action == "n_3"
    # 条件分岐(技能)的場合
    return nece_4                       if action == "n_4"
    # 条件分岐(参数)的場合
    return nece_5                       if action == "n_5"
    # 条件分岐(装备)的場合
    return nece_6                       if action == "n_6"
    # 条件分岐(脚本)的場合
    return nece_7                       if action == "n_7"
    # 第二目标操作的場合  
    return second_targets_set           if action == "s_t"
    # 呼叫公共事件的場合  
    return call_common_event            if action == "common"
    # 战斗动画关闭的場合  
    return @anime_off = true            if action == "anime_off"
    # 强制战斗结束的場合  
    return BattleManager.process_abort  if action == "battle_end"
    # 画面固定的場合  
    return Graphics.freeze              if action == "graphics_freeze"
    # 损坏动画的場合  
    return damage_anime                 if action == "damage_anime"
    # 武器不可见的場合  
    return @weapon_visible = false      if action == "weapon_off"
    # 武器可见的場合  
    return @weapon_visible = true       if action == "weapon_on"
    # 等待取消的場合
    return @non_motion = true           if action == "non_motion"
    # 等待取消解除的場合
    return @non_motion = false          if action == "non_motion_cancel"
    # 初期位置变更的場合
    return change_base_position         if action == "change_base_position"
    # 初期位置变更解除的場合
    return set_base_position(false)     if action == "set_base_position"
    # 强制行动的場合  
    return force_act                    if action == "force_action"
    # 强制行动的場合 (第二目标)
    return force_act2                   if action == "force_action2"
    # 个人开始的場合
    return individual_start             if action == "individual_start"
    # 个人结束的場合
    return individual_end               if action == "individual_end"
    # 循环开始的場合
    return loop_start                   if action == "loop_start"
    # 循环结束的場合
    return loop_end                     if action == "loop_end"
    # 只有行动的場合
    return only_action_on               if action == "only_action_on"
    # 只有行动解除的場合
    return only_action_off              if action == "only_action_off"
    # 下个战斗角色的場合
    return next_battler                 if action == "next_battler"
    # 画面变更标记的場合
    return set_change                   if action == "set_change"
    # 脚本操作的場合
    p @action_data
    return eval(@action_data[0])
  end
  #--------------------------------------------------------------------------
  # ● 实行角色反转
  #--------------------------------------------------------------------------
  def mirroring
    @mirror = !@mirror
  end  
  #--------------------------------------------------------------------------
  # ● 初始化反转
  #--------------------------------------------------------------------------
  def mirroring_reset
    @mirror = false
    mirroring if [email protected]? && N03::ENEMY_MIRROR
    mirroring if $sv_camera.mirror
  end  
  #--------------------------------------------------------------------------
  # ● 实行残像
  #--------------------------------------------------------------------------
  def mirage_set
    @mirage = @action_data.dup
    @mirage_end = @mirage[3]
    @mirage = [] if @mirage[1] == 0
  end  
  #--------------------------------------------------------------------------
  # ● 实行旋转
  #--------------------------------------------------------------------------
  def angling(data = @action_data)
    @angle_data = data.dup
    @oy = @ch / 2
    @oy_adjust = @ch * 50
    @angle_time = data[1]
    start_angle = data[2] * N03.mirror_num(@mirror)
    end_angle = data[3] * N03.mirror_num(@mirror)
    # 时间要是0以下时立即到最后角度
    @angle_time = 1 if @angle_time <= 0
    # 从旋转时间计算一格相当于的角度
    @angling = (end_angle - start_angle) / @angle_time
    # 不能整除的剩余到初期角度
    @angle = (end_angle - start_angle) % @angle_time + start_angle
  end
  #--------------------------------------------------------------------------
  # ● 初始化旋转
  #--------------------------------------------------------------------------
  def angle_reset
    @oy = @ch
    @angle = @angle_time = @oy_adjust = 0
  end  
  #--------------------------------------------------------------------------
  # ● 实行扩大缩小
  #--------------------------------------------------------------------------
  def zooming(data = @action_data)
    @zoom_data = data.dup
    @zoom_time = data[1]
    start_zoom_x = data[2][0]
    start_zoom_y = data[2][1]
    end_zoom_x = data[3][0]
    end_zoom_y = data[3][1]
    # 时间是0以下时跳过
    @zoom_time = 1 if @zoom_time <= 0
    # 从放大时间中计算一格相当于的放大率
    @zooming_x = (end_zoom_x - start_zoom_x) / @zoom_time
    @zooming_y = (end_zoom_y - start_zoom_y) / @zoom_time
    # 开始的大小
    @zoom_x = start_zoom_x
    @zoom_y = start_zoom_y
  end  
  #--------------------------------------------------------------------------
  # ● 实行扩大缩小
  #--------------------------------------------------------------------------
  def zoom_reset
    @zoom_x = @zoom_y = 1
    @zoom_time = 0
  end  
  #--------------------------------------------------------------------------
  # ● 角色透明度操作
  #--------------------------------------------------------------------------
  def set_opacity
    data = @action_data.dup
    @opacity = data[2]
    opacity_move = (data[3] - data[2])/ data[1]
    @opacity_data = [data[1], data[1], opacity_move, data[4], data[5], data[6]]
    @wait = data[1] if data[7]
    @wait *= 2 if data[6] && data[7]
  end
  #--------------------------------------------------------------------------
  # ● 初始化透明度操作
  #--------------------------------------------------------------------------
  def opacity_reset
    @opacity = 255
    @opacity = 0 if @battler.hidden?
    @opacity_data = []
  end
  #--------------------------------------------------------------------------
  # ● 实行角色动画
  #--------------------------------------------------------------------------
  def battler_anime(anime_data = nil)
    anime_data = @action_data.dup if anime_data == nil
    @graphic_file_index = anime_data[1] if !graphic_fix
    @pattern_h = anime_data[2]
    @pattern_w = anime_data[3]
    @pattern_h = 0 if @max_pattern_w == 1
    @pattern_w = 0 if @max_pattern_h == 1
    @pattern_type = anime_data[4]
    @pattern_time = anime_data[5]
    @pattern_rest_time = anime_data[5]
    @pattern_count = 0
    @pattern_kind = 1
    @pattern_kind = -1 if @pattern_type < 0
    @pattern_kind = 0 if @pattern_type == 0
    @sx = (@graphic_index % 4 * @max_pattern_w + @pattern_w) * @cw
    @sy = (@graphic_index / 4 * @max_pattern_h + @pattern_h) * @ch
    @z_plus = anime_data[6]
    @wait = set_anime_wait if anime_data[7]
    @shadow_visible = anime_data[8]
    weapon_anime(anime_data)
  end
  #--------------------------------------------------------------------------
  # ● 计算等待动画
  #--------------------------------------------------------------------------
  def set_anime_wait
    if @pattern_type > 0
      pattern_time_a = @max_pattern_w - @pattern_w.abs
    elsif @pattern_type < 0
      pattern_time_a = @pattern_w.abs + 1
    else
      return @pattern_time if @pattern_type == 0
    end
    case @pattern_type
    when 1,-1, 3,-3
      return pattern_time_a * @pattern_time
    when 2,-2, 4,-4
      return pattern_time_a * @pattern_time + (@max_pattern_w - 2) * @pattern_time
    end
  end  
  #--------------------------------------------------------------------------
  # ● 实行移动
  #--------------------------------------------------------------------------
  def move
    @move_targets = N03.get_targets(@action_data[1].abs, @battler)
    return if @move_targets == []
    @move_targets = [@battler] if @action_data[1].abs == 7
    @move_x = @action_data[2] * 100 #* N03.mirror_num(@mirror)
    @move_y = @action_data[3] * 100 * N03.mirror_num(@mirror)
    @move_h = @action_data[4] * 100 if @action_data[4] != nil
    @move_h = nil if @action_data[4] == nil
    battler_anime(N03::ACTION[@action_data[8]].dup) if N03::ACTION[@action_data[8]] != nil
    @horming_move = true
    @horming_move = false if @action_data[1] < 0 or @action_data[1].abs == 7
    target_position_set
    target_position = [@target_x, @target_y, @target_z]
    distanse_move = @action_data[5] > 0
    @move_time = N03.distanse_calculation(@action_data[5].abs, target_position, [@x, @y, @z], distanse_move)
    @wait = @move_time
    curve
    jump
    @move_time = 1 if @move_time == 0
    @horming_move = false if !@move_targets or @move_targets.include?(@battler)
    update_move if @move_time == 1
  end  
  #--------------------------------------------------------------------------
  # ● 实行曲线
  #--------------------------------------------------------------------------
  def curve
    @c = 0
    return if @action_data[6] == 0
    @curve = N03.parabola([@action_data[6], -@action_data[6]], @move_time, 100, 4)
  end  
  #--------------------------------------------------------------------------
  # ● 实行跳跃
  #--------------------------------------------------------------------------
  def jump
    convert_jump
    return if @action_data[7] == [0,0]
    @jump = N03.parabola(@action_data[7].dup, @move_time, 100)
  end  
  #--------------------------------------------------------------------------
  # ● J坐标(跳跃高度)H坐标变换
  #--------------------------------------------------------------------------
  def convert_jump
    @h += @j
    @j = 0
    @jump = []
  end  
  #--------------------------------------------------------------------------
  # ● 实行数据库战斗动画
  #--------------------------------------------------------------------------
  def battle_anime
    data = @action_data.dup
    targets = N03.get_targets(data[2], @battler)
    return if targets == []
    data[8] = !data[8] if @mirror
    @set_damage           = data[5]
    @damage_anime_data[0] = N03.get_attack_anime_id(data[1], @battler)
    @damage_anime_data[1] = data[8]
    @damage_anime_data[2] = data[7]
    @damage_anime_data[3] = data[6]
    @damage_anime_data[4] = data[9]
    @wait = N03.get_anime_time(@damage_anime_data[0]) - 2 if data[4]
    return if @set_damage
    for target in targets do display_anime(targets, target, data) end
  end
  #--------------------------------------------------------------------------
  # ● 开始武器动画
  #--------------------------------------------------------------------------
  def weapon_anime(anime_data)
    @weapon_end = true
    for i in 9...anime_data.size
      set_effect_data(anime_data) if anime_data != ""
    end
  end
  #--------------------------------------------------------------------------
  # ● 开始飞行动画
  #--------------------------------------------------------------------------
  def move_anime
    @m_a_starter = []
    @m_a_targets = []
    starters = N03.get_targets(@action_data[2], @battler)
    targets = N03.get_targets(@action_data[3], @battler)
    return if starters == [] or targets == []
    single_start = true if starters != nil && @action_data[2] < 0
    single_start = true if @action_data[1][0] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][0], @battler)].position == 3
    starters = [starters[0]] if single_start
    single_end = true if targets != nil && @action_data[3] < 0
    single_end = true if @action_data[1][1] != 0 && $data_animations[N03.get_attack_anime_id(@action_data[1][1], @battler)].position == 3
    targets = [targets[0]] if single_end
    se_flag = true
    for starter in starters
      for target in targets
        data = @action_data.dup
        data[17] = se_flag
        @effect_data.push(data)
        @m_a_targets.push(target)
        @m_a_starter.push(starter)
        se_flag = false
      end
    end  
  end
  #--------------------------------------------------------------------------
  # ● 效果通讯设置
  #--------------------------------------------------------------------------
  def set_effect_data(data = @action)
    action_data = N03::ACTION[data]
    return if action_data == nil
    @effect_data.push(action_data.dup)
  end
  #--------------------------------------------------------------------------
  # ● 战斗场景通讯的数据储存
  #--------------------------------------------------------------------------
  def set_play_data(data = @action_data)
    @play_data = data.dup
  end
  #--------------------------------------------------------------------------
  # ● 战斗动画显示
  #--------------------------------------------------------------------------
  def display_anime(targets, target, data)
    return if !N03.first_of_all_screen_anime(data[1], target, targets)
    target.animation_id         = N03.get_attack_anime_id(data[1], @battler)
    target.animation_mirror     = data[8]
    target.sv.anime_horming     = data[3]
    target.sv.anime_camera_zoom = data[6]
    target.sv.anime_no_mirror   = data[7]
    target.sv.anime_plus_z      = data[9]
  end
  #--------------------------------------------------------------------------
  # ● 初始化战斗动画扩张数据
  #--------------------------------------------------------------------------
  def reset_anime_data
    @anime_no_mirror = false
    @anime_horming = false
    @anime_camera_zoom = false
    @timing_targets = []
    @anime_plus_z = true
  end  
  #--------------------------------------------------------------------------
  # ● 摄影机
  #--------------------------------------------------------------------------
  def camera
    data = @action_data.dup
    N03.camera(@battler, data)
    @wait = data[4] if data[5]
  end  
  #--------------------------------------------------------------------------
  # ● 画面的摇动
  #--------------------------------------------------------------------------
  def shake
    data = @action_data.dup
    $sv_camera.shake(data[1], data[2], data[3])
    @wait = data[3] if data[4]
  end
  #--------------------------------------------------------------------------
  # ● 画面色调变更
  #--------------------------------------------------------------------------
  def color_effect
    case @action_data[1]
    when 0,1,2,3,4,5
      targets = N03.get_targets(@action_data[1], @battler)
    when 6
      screen = true
    when 7
      targets = [@battler] + @target_battler
    when 8
      screen = true
      targets = $game_troop.members + $game_party.battle_members - [@battler]
    when 9
      screen = true
      targets = $game_troop.members + $game_party.battle_members - [@battler] - @target_battler
    when 10
      screen = true
      targets = $game_troop.members + $game_party.battle_members
    end
    return if screen == nil && targets == []
    for target in targets do target.sv.color_set = @action_data[2] end if targets
    @wait = @action_data[2][4] if @action_data[3]
    return if !screen
    $sv_camera.color_set[1] = @action_data[2]
    $sv_camera.color_set[2] = @action_data[2]
  end  
  #--------------------------------------------------------------------------
  # ● 过渡
  #--------------------------------------------------------------------------
  def transition
    $sv_camera.perform_transition(@action_data)
  end  
  #--------------------------------------------------------------------------
  # ● 气球动画显示
  #--------------------------------------------------------------------------
  def balloon_anime
    @balloon_data = @action_data.dup
  end  
  #--------------------------------------------------------------------------
  # ● 图片显示
  #--------------------------------------------------------------------------
  def picture_set
    @picture = true
    set_effect_data
  end
  #--------------------------------------------------------------------------
  # ● 状态操作
  #--------------------------------------------------------------------------
  def state_set
    targets = N03.get_targets(@action_data[1], @battler)
    return if targets == []
    case @action_data[2]
    when 1 ; targets = [targets[rand(targets.size)]]
    when 2 ; targets -= @battler if targets.include?(@battler)
    end
    for target in targets
      for id in @action_data[4]
        target.add_state(id) if @action_data[3] == "+"
        target.remove_state(id) if @action_data[3] == "-"
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● FPS变更
  #--------------------------------------------------------------------------
  def fps
    Graphics.frame_rate = @action_data[1]
    start_action
  end
  #--------------------------------------------------------------------------
  # ● 角色画像变更的場合
  #--------------------------------------------------------------------------
  def graphics_change
    @graphics_change = true
    return @battler.graphics_change(@action_data[3]) if [email protected]?
    @pre_change_data = [@battler.character_name, @battler.character_index, @battler.face_name, @battler.face_index] if @pre_change_data == nil && !@action_data[1]
    if @action_data[4] == []
      face_name = @battler.face_name
      face_index = @battler.face_index
    else
      face_name = @action_data[4][1]
      face_index = @action_data[4][0]
    end
    @battler.set_graphic(@action_data[3], @action_data[2], face_name, face_index)
  end
  #--------------------------------------------------------------------------
  # ● 技能连发
  #--------------------------------------------------------------------------
  def derivating_skill
    # 如果让没学的的技能不能连发时
    return if !@action_data[1] && [email protected]_learn?($data_skills[@action_data[3]])
    # 如果技能不能连发成本不够时
    return if !@action_data[2] && [email protected]_cost_payable?($data_skills[@action_data[3]])
    # 连发
    @derivation_skill_id = @action_data[3]
    # 取消之后的动作
    @full_action = []
  end
  #--------------------------------------------------------------------------
  # ● BGM/BGS/SE演奏
  #--------------------------------------------------------------------------
  def sound
    pitch = @action_data[2]
    vol   = @action_data[3]
    name  = @action_data[4]
    case @action_data[1]
    when "se"
      Audio.se_play("Audio/SE/" + name, vol, pitch)
    when "bgm"
      # 没有指定名字时、不改变现在的BGM
      name = RPG::BGM.last.name if @action_data[4] == ""
      Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
    when "bgs"
      name = RPG::BGS.last.name if @action_data[4] == ""
      Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
    end
  end
  #--------------------------------------------------------------------------
  # ● 电影播放
  #--------------------------------------------------------------------------
  def movie
    Graphics.play_movie('Movies/' + @action_data[1])
  end
  #--------------------------------------------------------------------------
  # ● 游戏开关的操作
  #--------------------------------------------------------------------------
  def switches
    for id in @action_data[1]
      $game_switches[id] = true if id > 0
      $sv_camera.switches[id.abs] = true  if id < 0
    end
    for id in @action_data[2]
      $game_switches[id] = false if id > 0
      $sv_camera.switches[id.abs] = false  if id < 0
    end
    $sv_camera.program_check
  end
  #--------------------------------------------------------------------------
  # ● 游戏变量操作
  #--------------------------------------------------------------------------
  def variable
    # 检查操作
    operand = @action_data[3]
    operand = $game_variables[@action_data[3].abs] if @action_data[3] < 0
    # 变数操作的分歧
    case @action_data[2]
    when 0 ; $game_variables[@action_data[1]] = operand  # 代入
    when 1 ; $game_variables[@action_data[1]] += operand # 加算
    when 2 ; $game_variables[@action_data[1]] -= operand # 減算
    when 3 ; $game_variables[@action_data[1]] *= operand # 乗算
    when 4 ; $game_variables[@action_data[1]] /= operand # 除算
    when 5 ; $game_variables[@action_data[1]] %= operand # 剰余
    end
  end  
  #--------------------------------------------------------------------------
  # ● 条件分岐 (游戏开关)
  #--------------------------------------------------------------------------
  def nece_1
    judgment = $game_switches[@action_data[1]] == @action_data[2] if @action_data[1] > 0
    judgment = $sv_camera.switches[@action_data[1].abs] == @action_data[2] if @action_data[1] < 0
    action_diverging(judgment, @action_data[3])
  end  
  #--------------------------------------------------------------------------
  # ● 条件分岐 (游戏变量)
  #--------------------------------------------------------------------------
  def nece_2
    variable = $game_variables[@action_data[1]]
    num = @action_data[2]
    num = $game_variables[@action_data[2].abs] if num < 0
    case @action_data[3]
    when 0 ; judgment = variable == num
    when 1 ; judgment = variable < num
    when 2 ; judgment = variable > num
    end  
    action_diverging(judgment, @action_data[4])
  end  
  #--------------------------------------------------------------------------
  # ● 条件分岐 (状态)
  #--------------------------------------------------------------------------
  def nece_3
    targets = N03.get_targets(@action_data[1], @battler)
    return if targets == []
    member_num = @action_data[4]
    member_num = targets.size if @action_data[4] == 0 && targets.size > 1
    hit_count = 0
    miss_count = 0
    for target in targets
      hit_count += 1 if target.state?(@action_data[2])
      miss_count += 1 if !target.state?(@action_data[2])
    end
    case @action_data[3]
    when 0 ; judgment = hit_count >= member_num
    when 1 ; judgment = miss_count >= member_num
    end
    action_diverging(judgment, @action_data[5])
  end  
  #--------------------------------------------------------------------------
  # ● 条件分岐 (技能)
  #--------------------------------------------------------------------------
  def nece_4
    targets = N03.get_targets(@action_data[1], @battler)
    return if targets == []
    member_num = @action_data[4]
    member_num = targets.size if @action_data[4] == 0 && targets.size > 1
    hit_count = 0
    miss_count = 0
    for target in targets
      hit_count += 1 if target.skill_learn?($data_skills[@action_data[2]]) && target.skill_conditions_met?($data_skills[@action_data[2]])
      miss_count += 1 if !target.skill_learn?($data_skills[@action_data[2]]) or !target.skill_conditions_met?($data_skills[@action_data[2]])
    end
    case @action_data[3]
    when 0 ; judgment = hit_count >= member_num
    when 1 ; judgment = miss_count >= member_num
    end
    action_diverging(judgment, @action_data[5])
  end  
  #--------------------------------------------------------------------------
  # ● 条件分岐 (参数)
  #--------------------------------------------------------------------------
  def nece_5
    targets = N03.get_targets(@action_data[1], @battler)
    return if targets == []
    member_num = @action_data[5]
    member_num = targets.size if @action_data[5] == 0 && targets.size > 1
    hit_count = 0
    for target in targets
      hit_count += 1 if target.comparison_parameter([@action_data[2],@action_data[3],@action_data[4]])
    end
    judgment = hit_count >= member_num
    action_diverging(judgment, @action_data[6])
  end  
  #--------------------------------------------------------------------------
  # ● 条件分岐 (装备)
  #--------------------------------------------------------------------------
  def nece_6
    targets = N03.get_targets(@action_data[1], @battler)
    return if targets == []
    member_num = @action_data[5]
    member_num = targets.size if @action_data[5] == 0 && targets.size > 1
    hit_count = 0
    miss_count = 0
    for target in targets
      hit_count += 1 if target.comparison_equip([@action_data[2],@action_data[3]])
      miss_count += 1 if !target.comparison_equip([@action_data[2],@action_data[3]])
    end
    case @action_data[4]
    when 0 ; judgment = hit_count >= member_num
    when 1 ; judgment = miss_count >= member_num
    end
    action_diverging(judgment, @action_data[6])
  end  
  #--------------------------------------------------------------------------
  # ● 条件分岐 (脚本)
  #--------------------------------------------------------------------------
  def nece_7
    judgment = eval(@action_data[2])
    action_diverging(judgment, @action_data[1])
  end  
  #--------------------------------------------------------------------------
  # ● 动作的分岐
  #--------------------------------------------------------------------------
  def action_diverging(judgment, kind)
    result = 0
    if judgment
      result = 1 if kind == 1
      result = 2 if kind == 2
    else
      result = 1 if kind == 0
    end
    # 全部动作结束
    return @full_action = []  if result == 2
    # 清楚下一个动作
    @full_action.shift if result == 1
    set_action
    # 实行下一个动作
    @action_data = N03::ACTION[@action]
    next_action
  end
  #--------------------------------------------------------------------------
  # ● 第二个目标的操作
  #--------------------------------------------------------------------------
  def second_targets_set
    targets = N03.get_targets(@action_data[1], @battler)
    for target in targets
      targets.delete(target) if @action_data[2][1] == 1 && target.index != @action_data[2][0]
      targets.delete(target) if @action_data[2][1] == 2 && target.index == @action_data[2][0].abs
      targets.delete(target) if @action_data[3] > 0 && target.id != @action_data[3]
      targets.delete(target) if @action_data[3] < 0 && target.id == @action_data[3].abs
      targets.delete(target) if @action_data[4] > 0 && !target.state?(@action_data[4])
      targets.delete(target) if @action_data[4] < 0 && target.state?(@action_data[4].abs)
      targets.delete(target) if @action_data[5] > 0 && !target.skill_conditions_met?($data_skills[@action_data[5]])
      targets.delete(target) if @action_data[5] < 0 && target.skill_conditions_met?($data_skills[@action_data[5].abs])
      targets.delete(target) if !target.comparison_parameter(@action_data[6])
      targets.delete(target) if !@action_data[7][1].include?(0) && !target.comparison_equip(@action_data[7])
    end
    return @second_targets = [] if targets.size == 0
    case @action_data[8]
    when 1 ; targets = [targets[rand(targets.size)]]
    when 2 ; targets.delete(@battler)
    end
    return @second_targets = [] if targets.size == 0
    @second_targets = targets
    case @action_data[9]
    when 0 ; return
    when 1 ; set_play_data(["second_targets_set"])
    when 2 ; set_play_data(["targets_set"])
    end
    @wait += 1
  end
  #--------------------------------------------------------------------------
  # ● 公共事件的呼叫
  #--------------------------------------------------------------------------
  def call_common_event
    $game_temp.reserve_common_event(@action_data[1])
    $sv_camera.event = true
    @event_fix = @action_data[2]
  end
  #--------------------------------------------------------------------------
  # ● 伤害动画
  #--------------------------------------------------------------------------
  def damage_anime(delay_time = 12)
    anime(N03.get_attack_anime_id(-3, @battler), wait = true)
    action_play
    @wait -= delay_time
    @full_action.unshift("eval('@damage_anime_data = []
    @set_damage = true')")
  end
  #--------------------------------------------------------------------------
  # ● 通常战斗不能
  #--------------------------------------------------------------------------
  def normal_collapse
    @collapse = true
    return
  end
  #--------------------------------------------------------------------------
  # ● 初期位置变更
  #--------------------------------------------------------------------------
  def change_base_position
    @base_x = @x
    @base_y = @y
    @base_h = @h
  end  
  #--------------------------------------------------------------------------
  # ● 实行强制动作
  #--------------------------------------------------------------------------
  def force_act
    target(@full_action.shift)
  end
  #--------------------------------------------------------------------------
  # ● 实行强制动作 (第二个目标)
  #--------------------------------------------------------------------------
  def force_act2
    target2(@full_action.shift)
  end
  #--------------------------------------------------------------------------
  # ● 开始个别处理
  #--------------------------------------------------------------------------
  def individual_start
    @individual_targets = @target_battler.dup
    @remain_targets = @target_battler.dup
    @target_battler = [@individual_targets[0]]
    # 重复部分的动作并保持
    @individual_act = @full_action.dup
  end
  #--------------------------------------------------------------------------
  # ● 结束个别处理
  #--------------------------------------------------------------------------
  def individual_end
    @individual_targets.shift
    for target in @individual_targets
      @individual_targets.shift if target.dead?
    end
    # 目标没有残留时行动完毕
    return @target_battler = @remain_targets if @individual_targets.size == 0
    @full_action = @individual_act.dup
    @target_battler = [@individual_targets[0]]
  end
  #--------------------------------------------------------------------------
  # ● 循环開始
  #--------------------------------------------------------------------------
  def loop_start
    # 重复部分的动作并保持
    @loop_act = @full_action.dup
  end
  #--------------------------------------------------------------------------
  # ● 循环结束
  #--------------------------------------------------------------------------
  def loop_end
    # 动作重复
    @full_action = @loop_act.dup if @loop_act != []
  end
  #--------------------------------------------------------------------------
  # ● 下个动作角色
  #--------------------------------------------------------------------------
  def next_battler
    @action_end = true
    @active = false
  end
  #--------------------------------------------------------------------------
  # ● 图像变更标记
  #--------------------------------------------------------------------------
  def set_change
    @change_up = true
  end
  #--------------------------------------------------------------------------
  # ● 战斗场景通讯
  #--------------------------------------------------------------------------
  def play_data
    data = @play_data
    @play_data = []
    return data
  end
  #--------------------------------------------------------------------------
  # ● 捷径指令
  #--------------------------------------------------------------------------
  def anime(anime_id, wait = true)
    @action_data = ["anime",anime_id,1,false,wait,false,true,false]
  end
  def anime_me(anime_id, wait = true)
    @action_data = ["anime",anime_id,0,false,wait,false,true,false]
  end
  def se(file, pitch = 100)
    @action_data = ["sound",  "se", pitch, 100, file]
  end
  def target(act)
    for target in @target_battler do target.sv.force_action = act end
  end
  def target2(act)
    for target in @second_targets do target.sv.force_action = act end
  end
  def delay(time)
    @wait = @battler.index * time
  end
  #--------------------------------------------------------------------------
  # ● 取得角色ID
  #--------------------------------------------------------------------------
  def id
    return @battler.id if @battler.actor?
    return [email protected]
  end
  #--------------------------------------------------------------------------
  # ● 取得被致命一击
  #--------------------------------------------------------------------------
  def critical?
    return @battler.result.critical
  end
  #--------------------------------------------------------------------------
  # ● 取得被回复标记
  #--------------------------------------------------------------------------
  def recovery?
    recovery = false
    recovery = true if @battler.result.hp_damage < 0
    recovery = true if @battler.result.mp_damage < 0
    recovery = true if @battler.result.tp_damage < 0
    return recovery
  end
  #--------------------------------------------------------------------------
  # ● 取得被损伤技能ID
  #--------------------------------------------------------------------------
  def damage_skill_id
    return @damage_skill_id
  end
  #--------------------------------------------------------------------------
  # ● 取得被损伤物品ID
  #--------------------------------------------------------------------------
  def damage_item_id
    return @damage_item_id
  end
  #--------------------------------------------------------------------------
  # ● 取得装备武器ID
  #--------------------------------------------------------------------------
  def weapon_id
    return 0 if [email protected][0]
    return @battler.weapons[0].id
  end
  #--------------------------------------------------------------------------
  # ● 取得装备武器的类型
  #--------------------------------------------------------------------------
  def weapon_type
    return 0 if [email protected][0]
    return @battler.weapons[0].wtype_id
  end
  #--------------------------------------------------------------------------
  # ● 是否装备盾
  #--------------------------------------------------------------------------
  def shield?
    for armor in @battler.armors do return true if armor != nil && armor.etype_id == 1 end
    return false
  end
  #--------------------------------------------------------------------------
  # ● 是否有伤害
  #--------------------------------------------------------------------------
  def damage_zero?
    return @battler.result.hp_damage == 0 && @battler.result.mp_damage == 0 && @battler.result.tp_damage == 0
  end
  #--------------------------------------------------------------------------
  # ● 取得技能ID
  #--------------------------------------------------------------------------
  def skill_id
    return @counter_id if @counter_id != 0
    return 0 if @battler.current_action == nil or @battler.current_action.item == nil
    return 0 if @battler.current_action.item.is_a?(RPG::Item)
    return @battler.current_action.item.id
  end
  #--------------------------------------------------------------------------
  # ● 取得技能的种类
  #--------------------------------------------------------------------------
  def skill_type
    return 0 if skill_id == 0
    return $data_skills[skill_id].stype_id
  end
  #--------------------------------------------------------------------------
  # ● 取得技能名字
  #--------------------------------------------------------------------------
  def skill_name
    return "" if skill_id == 0
    return $data_skills[skill_id].name
  end
  #--------------------------------------------------------------------------
  # ● 取得物品ID
  #--------------------------------------------------------------------------
  def item_id
    return 0 if @battler.current_action == nil or @battler.current_action.item == nil
    return @battler.current_action.item.id
  end
  #--------------------------------------------------------------------------
  # ● 攻击动作
  #--------------------------------------------------------------------------
  def attack_action(item)
    return skill_action if item.is_a?(RPG::Skill)
    return item_action
  end
  #--------------------------------------------------------------------------
  # ● 基础动作伤害
  #--------------------------------------------------------------------------
  def damage_action_base(item)
    @damage_skill_id = 0
    @damage_item_id = 0
    @damage_skill_id = item.id if item.is_a?(RPG::Skill)
    @damage_item_id = item.id if item.is_a?(RPG::Item)
  end  
  #--------------------------------------------------------------------------
  # ● 动作伤害
  #--------------------------------------------------------------------------
  def damage_action(attacker, item)
    damage_action_base(item)
    act = damage(attacker)
    return if @active
    start_action(act) if act != nil
  end
  #--------------------------------------------------------------------------
  # ● 回避动作
  #--------------------------------------------------------------------------
  def evasion_action(attacker, item)
    damage_action_base(item)
    act = evasion(attacker)
    return if @active
    start_action(act) if act != nil
  end
  #--------------------------------------------------------------------------
  # ● 失误动作
  #--------------------------------------------------------------------------
  def miss_action(attacker, item)
    damage_action_base(item)
    act = miss(attacker)
    return if @active
    start_action(act) if act != nil
  end
  #--------------------------------------------------------------------------
  # ● Flash动作同时处理
  #--------------------------------------------------------------------------
  def flash_action
    return "閃き"
  end
  
end


#==============================================================================
# ■ module N03
#------------------------------------------------------------------------------
#  这是一个侧视战斗的模块。
#==============================================================================
module N03
  #--------------------------------------------------------------------------
  # ● 取得敌人角色队伍
  #--------------------------------------------------------------------------
  def self.get_enemy_unit(battler)
    return $game_troop if battler.actor?
    return $game_party
  end
  #--------------------------------------------------------------------------
  # ● 取得我方角色队伍
  #--------------------------------------------------------------------------
  def self.get_party_unit(battler)
    return $game_party if battler.actor?
    return $game_troop
  end
  #--------------------------------------------------------------------------
  # ● 取得战斗动画时间
  #--------------------------------------------------------------------------
  def self.get_anime_time(anime_id)
    return 0 if anime_id <= 0
    return $data_animations[anime_id].frame_max * 4
  end
  #--------------------------------------------------------------------------
  # ● 取得攻击动画
  #--------------------------------------------------------------------------
  def self.get_attack_anime_id(kind, battler)
    return $data_skills[battler.sv.counter_id].animation_id if kind == -3 && battler.sv.counter_id != 0
    case kind
    when -1 ; anime_id = battler.atk_animation_id1
    when -2 ; anime_id = battler.atk_animation_id2
    when -3
      if battler.current_action != nil
        anime_id = battler.current_action.item.animation_id if battler.current_action.item != nil
      end
    else    ; anime_id = kind
    end
    case anime_id
    when -1 ; anime_id = battler.atk_animation_id1
    when -2 ; anime_id = battler.atk_animation_id2
    end
    return anime_id if anime_id
    return 0
  end  
  #--------------------------------------------------------------------------
  # ● 战斗动画数据
  #--------------------------------------------------------------------------
  def self.set_damage_anime_data(targets, target, data)
    return if !first_of_all_screen_anime(data[0], target, targets)
    target.animation_id         = data[0]
    target.animation_mirror     = data[1]
    target.sv.anime_no_mirror   = data[2]
    target.sv.anime_camera_zoom = data[3]
    target.sv.anime_plus_z      = data[4]
  end   
  #--------------------------------------------------------------------------
  # ● 取得目标
  #--------------------------------------------------------------------------
  def self.get_targets(kind, battler)
    case kind.abs
    when 0 ; return [battler].dup
    when 1 ; return battler.sv.target_battler.dup
    when 2 ; return get_enemy_unit(battler).members.dup
    when 3 ; return get_party_unit(battler).members.dup
    when 4 ; return $game_troop.members.dup + $game_party.battle_members.dup
    when 5 ; return battler.sv.second_targets.dup
    end
  end  
  #--------------------------------------------------------------------------
  # ● 目标的坐标取得
  #--------------------------------------------------------------------------
  def self.get_targets_position(targets, horming, m_a = nil)
    return [0,0,0] if targets == nil && !$sv_camera.mirror
    return [Graphics.width,0,0] if targets == nil && $sv_camera.mirror
    x = y = h = 0
    for i in 0...targets.size
      x += targets.sv.base_x if !horming
      y += targets.sv.base_y if !horming
      h += targets.sv.base_h if !horming
      x += targets.sv.x if horming
      y += targets.sv.y if horming
      h += targets.sv.h if horming
      y -= targets.sv.ch * 100 if m_a == 0
      y -= targets.sv.ch * 50 if m_a == 1
    end
    return [x / targets.size, y / targets.size, h / targets.size]
  end
  #--------------------------------------------------------------------------
  # ● 速度转换时间
  #--------------------------------------------------------------------------
  def self.distanse_calculation(time, target_position, self_position, distanse_move)
    return time if !distanse_move
    distanse_x = self_position[0] - target_position[0]
    distanse_x = target_position[0] - self_position[0] if target_position[0] > self_position[0]
    distanse_y = self_position[1] - target_position[1]
    distanse_y = target_position[1] - self_position[1] if target_position[1] > self_position[1]
    if self_position[2] != nil && target_position[2] != nil
      distanse_h = self_position[2] - target_position[2]
      distanse_h = target_position[2] - self_position[2] if target_position[2] > self_position[2]
    else
      distanse_h = 0
    end
    distanse = [distanse_x, distanse_y, distanse_h].max
    return distanse / (time * 100) + 1
  end
  #--------------------------------------------------------------------------
  # ● 计算抛物线移动
  #--------------------------------------------------------------------------
  def self.parabola(data, time, size, type = 1)
    move_data = data
    move_data[0] *= size
    move_data[1] *= size
    move = []
    move_d = []
    for i in 0...time / 2
      move = move_data[0]
      move_d = move_data[1]
      move_data[0] = move_data[0] * type / (1 + type)
      move_data[1] = move_data[1] * type / (1 + type)
    end
    move = move + move_d.reverse!
    move.reverse!
    adjust = move.inject(0) {|result, item| result + item }
    move[move.size - 1] += adjust if data[0] == data[1] && adjust != 0
    move.unshift(0) if time % 2 != 0
    return move
  end
  #--------------------------------------------------------------------------
  # ● 反转数值
  #--------------------------------------------------------------------------
  def self.mirror_num(mirror)
    return 1 if !mirror
    return -1
  end  
  #--------------------------------------------------------------------------
  # ● 摄影机
  #--------------------------------------------------------------------------
  def self.camera(battler, data)
    battler = $game_party.battle_members[0] if !battler
    cx = data[2][0] * 100
    cy = data[2][1] * 100
    return $sv_camera.move(cx, cy, data[3], data[4], true) if data[1] == 6
    targets = self.get_targets(data[1], battler)
    return if targets == nil or targets == []
    position = self.get_targets_position(targets, true)
    $sv_camera.move(position[0], position[1] - position[2], data[3], data[4], false)
  end
  #--------------------------------------------------------------------------
  # ● 禁止战斗不能
  #--------------------------------------------------------------------------
  def self.immortaling
    # 赋予全体不死状态
    for member in $game_party.battle_members + $game_troop.members
      # 事件操作等无敌设定就会解除flag的无效
      member.sv.immortal = true if member.state?(N03::IMMORTAL_ID)
      member.add_state(N03::IMMORTAL_ID)
    end
    return true
  end  
  #--------------------------------------------------------------------------
  # ● 允许战斗不能
  #--------------------------------------------------------------------------
  def self.unimmortaling
    # 解除全体不死状态(如果事件等无敌设定以外)
    for member in $game_party.battle_members + $game_troop.members
      next if member.dead?
      # 不死身状态行动中被解除的场合、从状态中解除无效
      member.sv.immortal = false if !member.state?(N03::IMMORTAL_ID) && member.sv.immortal
      next member.sv.immortal = false if member.sv.immortal
      member.remove_state(N03::IMMORTAL_ID)
      next if member.hp != 0
      member.add_state(1)
      member.perform_collapse_effect
      member.sv.action_terminate
    end
    return false
  end  
  #--------------------------------------------------------------------------
  # ● 技能连发
  #--------------------------------------------------------------------------
  def self.derived_skill(battler)
    battler.force_action(battler.sv.derivation_skill_id, -2)
    BattleManager.unshift_action_battlers(battler)
  end
  #--------------------------------------------------------------------------
  # ● 创建伤害
  #--------------------------------------------------------------------------
  def self.set_damage(battler, hp_damage, mp_damage)
    battler.result.hp_damage = hp_damage
    battler.result.mp_damage = mp_damage
  end
  #--------------------------------------------------------------------------
  # ● 确认目标生死
  #--------------------------------------------------------------------------
  def self.targets_alive?(targets)
    return false if targets == []
    for target in targets do return true if !target.dead? end
    return false
  end
  #--------------------------------------------------------------------------
  # ● 定位到第二个目标
  #--------------------------------------------------------------------------
  def self.s_targets(battler)
    battler.sv.target_battler = battler.sv.second_targets
    return battler.sv.second_targets
  end  
  #--------------------------------------------------------------------------
  # ● 定位目标到第二个目标
  #--------------------------------------------------------------------------
  def self.targets_set(battler)
    battler.sv.second_targets = battler.current_action.make_targets.compact
    battler.sv.target_battler = battler.sv.second_targets
  end  
  #--------------------------------------------------------------------------
  # ● 实行战斗动画判定 (对象:实行第一个目标时的画面的动画)
  #--------------------------------------------------------------------------
  def self.first_of_all_screen_anime(anime_id, target, targets)
    anime = $data_animations[anime_id]
    return false if !anime
    return true if anime.position != 3
    return false if anime.position == 3 && target != targets[0]
    targets.delete(target)
    target.sv.timing_targets = targets
    return true
  end
  #--------------------------------------------------------------------------
  # ● 战斗不能是否附加攻击
  #--------------------------------------------------------------------------
  def self.dead_attack?(battler, item)
    for state in battler.atk_states
      return true if state == battler.death_state_id
    end
    for effect in item.effects
      return true if effect.code == 21 && effect.data_id == battler.death_state_id
    end
    return false
  end
end

#==============================================================================
# ■ Sprite_Weapon
#------------------------------------------------------------------------------
#  ウエポン表示用のスプライトです。
#==============================================================================
class Sprite_Weapon < Sprite_Base
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数 
  #--------------------------------------------------------------------------
  attr_reader   :index                       # ウエポン画像配列のインデックス
  attr_reader   :battler                     # 画像が参照しているバトラー
  attr_reader   :move_time                   # 画像が目標に到達するまでの時間
  attr_reader   :through                     # 貫通フラグ
  attr_reader   :action_end                  # 武器アクション終了フラグ
  attr_reader   :action_end_cancel                  # 武器アクション終了フラグ
  attr_reader   :hit_position                # 画像が目標に到達した時の座標
  attr_accessor :hit_anime_id                # 画像が目標に到達した時のアニメID
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(viewport, index, battler)
    super(viewport)
    @index = index
    @battler = battler
    @position_x = @position_y = 0
    @o = 0
    @real_x = @real_y = 0
    @mirror = @battler.sv.mirror
    reset
    set_action
  end
  #--------------------------------------------------------------------------
  # ● 初期化
  #--------------------------------------------------------------------------
  def reset
    @z_plus = 0
    @weapon_data = []
    @move_data = []
    @move_x = 0
    @move_y = 0
    @orbit = []
    @through = false
    @distanse_move = false
    @weapon_width = 0
    @weapon_height = 0
    @anime_time = 0
    @anime_position = 1
    @move_time = 0
    @hit_anime_id = 0
    @move_anime = true
    @action_end = false
    @action_end_cancel = false
    reset_position
  end  
  #--------------------------------------------------------------------------
  # ● アクションをセット
  #--------------------------------------------------------------------------
  def set_action
    return if @battler.sv.effect_data == []
    weapon_anime if @battler.sv.effect_data[0][0] == "wp"
    move_anime if @battler.sv.effect_data[0][0] == "m_a"
    @battler.sv.effect_data.shift
  end
  #--------------------------------------------------------------------------
  # ● 武器アニメ実行
  #--------------------------------------------------------------------------
  def weapon_anime
    @weapon_data = @battler.sv.effect_data[0].dup
    set_graphics
    set_ox
    set_weapon_move
  end
  #--------------------------------------------------------------------------
  # ● アニメ移動実行
  #--------------------------------------------------------------------------
  def move_anime
    @move_data = @battler.sv.effect_data[0].dup
    # ターゲットを取得
    @target_battler = [@battler.sv.m_a_targets.shift]
    @target_battler = N03.get_targets(@move_data[3], @battler) if @move_data[3] < 0
    set_move
    return if @move_data[16] == ""
    weapon_data = N03::ACTION[@move_data[16]]
    return if weapon_data == nil
    @weapon_data = weapon_data.dup
    set_graphics
    set_ox
    set_weapon_move
  end
  #--------------------------------------------------------------------------
  # ● 武器画像を取得
  #--------------------------------------------------------------------------  
  def set_graphics
    # 武器に依存しない画像設定がある場合
    if @weapon_data[13] != ""
      self.bitmap = Cache.character(@weapon_data[13]).dup
      @weapon_width = self.bitmap.width
      @weapon_height = self.bitmap.height
      return
    end
    # 武器を取得
    weapon = @battler.weapons[0]
    # 逆手装備を取得
    if @weapon_data[10]
      weapon = nil
      for armor in @battler.armors do break weapon = armor if armor.is_a?(RPG::Armor) && armor.etype_id == 1 end
      weapon = @battler.weapons[1] if !weapon
    end  
    # 武器がなければ処理をキャンセル
    return if weapon == nil
    # インデックスを取得
    file_index = @weapon_data[12]
    # アイコンを利用するなら
    if @weapon_data[1] == 0
      icon_index = weapon.icon_index
      self.bitmap = Cache.system("Iconset" + file_index).dup
      self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
      @weapon_width = @weapon_height = 24
    # 独自画像指定
    else
      file_name = @battler.sv.weapon_graphic(weapon.id, weapon.wtype_id) if weapon.is_a?(RPG::Weapon)
      file_name = @battler.sv.shield_graphic(weapon.id, weapon.atype_id) if weapon.is_a?(RPG::Armor)
      self.bitmap = Cache.character(file_name + file_index).dup
      @weapon_width = self.bitmap.width
      @weapon_height = self.bitmap.height
      return if @weapon_data[1] == 1
      # 2003仕様の武器アニメ
      @weapon_width /= @battler.sv.max_pattern[0]
    end
  end
  #--------------------------------------------------------------------------
  # ● 画像の原点を取得
  #--------------------------------------------------------------------------  
  def set_ox
    # 反転時は設定を逆に
    if @mirror
      case @weapon_data[6]
      when 1 ; @weapon_data[6] = 2 # 左上→右上に
      when 2 ; @weapon_data[6] = 1 # 右上→左上に
      when 3 ; @weapon_data[6] = 4 # 左下→右下に
      when 4 ; @weapon_data[6] = 3 # 右下→左下に
      end
    end
    # 原点を設定
    case @weapon_data[6]
    when 0 # 中心
      self.ox = @weapon_width / 2
      self.oy = @weapon_height / 2
    when 1 # 左上
      self.ox = 0
      self.oy = 0
    when 2 # 右上
      self.ox = @weapon_width
      self.oy = 0
    when 3 # 左下
      self.ox = 0
      self.oy = @weapon_height
    when 4 # 右下
      self.ox = @weapon_width
      self.oy = @weapon_height
    when 5 # バトラーと同じ
      self.ox = @weapon_width / 2
      self.oy = @weapon_height
    end
  end  
  #--------------------------------------------------------------------------
  # ● バトラーの座標を取得
  #--------------------------------------------------------------------------  
  def set_battler_position
    @position_x = @battler.sv.x + @weapon_data[3][0] * 100 #* N03.mirror_num(@mirror)
    @position_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust) + @weapon_data[3][1] * 100 * N03.mirror_num(@mirror)
    reset_position
  end
  #--------------------------------------------------------------------------
  # ● 座標を初期化
  #--------------------------------------------------------------------------  
  def reset_position
    @real_x = @position_x / 100
    @real_y = @position_y / 100
    @real_zoom_x = 1
    @real_zoom_y = 1
  end
  #--------------------------------------------------------------------------
  # ● 戦闘アニメを表示
  #--------------------------------------------------------------------------  
  def set_animation(anime_id)
    return if $data_animations[anime_id] == nil
    @anime_position = $data_animations[anime_id].position
    @horming = true
    @horming = false if @anime_position == 3
    @anime_camera_zoom = true
    @anime_no_mirror = false
    start_animation($data_animations[anime_id], @mirror)
    timings = $data_animations[anime_id].timings
  end
  #--------------------------------------------------------------------------
  # ● ヒット時の戦闘アニメ実行
  #--------------------------------------------------------------------------  
  def set_hit_animation(position_data, hit_anime_id, target)
    return if $data_animations[hit_anime_id] == nil
    @real_x = position_data[0]
    @real_y = position_data[1]
    @position_x = position_data[0] * 100
    @position_y = position_data[1] * 100
    self.z = position_data[2]
    @z_plus = 1000
    @action_end = false
    @horming = true
    set_animation(hit_anime_id)
    @anime_time = $data_animations[hit_anime_id].frame_max * 4
    @timing_targets = [target]
    @move_time = @hit_anime_id = 0
    @weapon_data = []
  end
  #--------------------------------------------------------------------------
  # ● タイミングバトラー追加
  #--------------------------------------------------------------------------  
  def timing_battler_set(target)
    @timing_targets.push(target)
  end
  #--------------------------------------------------------------------------
  # ● 武器の動きを取得
  #--------------------------------------------------------------------------  
  def set_weapon_move
    # 開始位置を取得
    set_battler_position if @move_time == 0
    @z_plus = 50 if @z_plus == 0 && @weapon_data[9]
    self.z = @battler.sv.z + @z_plus
    # 反転処理
    @mirror = !@mirror if @weapon_data[7]
    self.mirror = @mirror
    # 更新パターンをセット
    set_pattern
    @max_pattern = 2 if @max_pattern == 1
    # 動きを計算
    @weapon_move_data = []
    @weapon_angle_data = []
    @weapon_zoom_data = []
    num = N03.mirror_num(@mirror)
    for i in 0...@max_pattern
      move_data_x = @weapon_data[2][0] * 100 * i / (@max_pattern - 1)
      move_data_y = @weapon_data[2][1] * num * 100 * i / (@max_pattern - 1)
      move_angle = @weapon_data[4] * num + (@weapon_data[5] * num - @weapon_data[4] * num) * i / (@max_pattern - 1)
      move_zoom_x = 1 + (@weapon_data[8][0] - 1) * i / (@max_pattern - 1)
      move_zoom_y = 1 + (@weapon_data[8][1] - 1) * i / (@max_pattern - 1)
      @weapon_move_data.push([move_data_x, move_data_y])
      @weapon_angle_data.push(move_angle)
      @weapon_zoom_data.push([move_zoom_x, move_zoom_y])
    end
  end  
  #--------------------------------------------------------------------------
  # ● 更新パターン
  #--------------------------------------------------------------------------
  def set_pattern
    if @weapon_data[11] == -1
      return @max_pattern = @battler.sv.max_pattern[0] if @battler.sv.pattern_type != 0
      @count = @battler.sv.pattern_time
      @max_count = @battler.sv.pattern_time
      @max_pattern = @battler.sv.max_pattern[0]
      @repeat = false
    else
      @count = @weapon_data[11][0]
      @max_count = @weapon_data[11][0]
      @max_pattern = @weapon_data[11][1]
      @repeat = @weapon_data[11][2]
    end
    @pattern = 0
  end
  #--------------------------------------------------------------------------
  # ● 移動実行
  #--------------------------------------------------------------------------
  def set_move
    # 戦闘アニメを取得
    set_animation(@move_data[1][0]) if $data_animations[@move_data[1][0]] != nil && $data_animations[@move_data[1][0]].position != 3
    @anime_camera_zoom = @move_data[13]
    @loop = @move_data[14]
    @loop = false if @move_data[1][0] == 0
    @anime_no_mirror = @move_data[15]
    @se_flag = @move_data[17]
    # 開始位置を取得
    start_position
    @z_plus = 1000 if @move_data[9]
    # ターゲットバトラー画像にこのアニメのSEとタイミング設定を反映させる
    @timing_targets = @target_battler
    # 座標計算
    @move_x = @move_data[5][0] * 100 #* N03.mirror_num(@mirror)
    @move_y = @move_data[5][1] * 100 * N03.mirror_num(@mirror)
    # 時間計算か速度計算か
    @distanse_move = true if @move_data[6] > 0
    @move_time = @move_data[6].abs
    # 時間0の場合、アニメが設定されていればアニメ表示時間に合わせる
    if @move_time == 0
      @move_time = $data_animations[@move_data[1][0]].frame_max * 4 if $data_animations[@move_data[1][0]]
      @move_time = 1 if !$data_animations[@move_data[1][0]]
      @distanse_move = false
    end
    # 貫通タイプの場合
    @through = true if @move_data[7] == 1
    @auto_through_flag = false
    @auto_through_flag = true if @move_data[7] == 0
    # ターゲット座標計算
    if @target_battler == nil
      @target_x = @move_x * 100
      @target_x = (Graphics.width - @move_x) * 100 if @mirror
      @target_y = @move_y * 100
    else
      move_data_set
    end
    # ターゲットに到達するまでの時間を計算
    @move_time = distanse_calculation(@move_time, @target_x, @target_y)
    # 円軌道計算
    orbit
    # バトラーのウエイト設定
    @battler.sv.wait = @move_time - 1 if @move_data[10][0]
    @move_horming = @move_data[12]
  end  
  #--------------------------------------------------------------------------
  # ● 速度を時間に変換
  #--------------------------------------------------------------------------
  def distanse_calculation(time, target_x, target_y)
    return time if !@distanse_move
    distanse_x = @position_x - @target_x
    distanse_x = @target_x - @position_x if @target_x > @position_x
    distanse_y = @position_y - @target_y
    distanse_y = @target_y - @position_y if @target_y > @position_y
    distanse = [distanse_x, distanse_y].max
    return distanse / (time * 100) + 1
  end
  #--------------------------------------------------------------------------
  # ● 移動目標の更新
  #--------------------------------------------------------------------------
  def move_data_set
    return if @target_battler == nil
    position = N03.get_targets_position(@target_battler, true, @anime_position)
    @target_x = position[0] + @move_x
    @target_y = position[1] - position[2] + @move_y
  end
  #--------------------------------------------------------------------------
  # ● 開始位置を計算
  #--------------------------------------------------------------------------
  def start_position
    starter = [@battler.sv.m_a_starter.shift]
    starter = N03.get_targets(@move_data[2], @battler) if @move_data[2] < 0
    position = [0, 0]
    position = N03.get_targets_position(starter, true, @anime_position) if starter != nil
    @position_x = position[0] + @move_data[4][0] * 100
    @position_y = position[1] + position[2] + @move_data[4][1] * 100
    @position_z = @position_y
  end  
  #--------------------------------------------------------------------------
  # ● 円軌道計算
  #--------------------------------------------------------------------------
  def orbit
    orbit_data = @move_data[8].dup
    orbit_data[0] *= 100
    orbit_data[1] *= 100
    orbit_d = []
    for i in 0...@move_time / 2
      @orbit = orbit_data[0]
      orbit_data[0] /= 2
      orbit_d = orbit_data[1]
      orbit_data[1] /= 2
    end
    @orbit = @orbit + orbit_d.reverse!
    @orbit.reverse!
  end  
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    update_hit_anime if @anime_time != 0
    update_move if @move_time != 0
    update_weapon_move if @weapon_data != []
    update_position
    update_color
    self.visible = @battler.sv.weapon_visible
    super
  end
  #--------------------------------------------------------------------------
  # ● ヒット時の戦闘アニメ
  #--------------------------------------------------------------------------
  def update_hit_anime
    @anime_time -= 1
    @action_end = true if @anime_time == 0
  end
  #--------------------------------------------------------------------------
  # ● 移動の更新
  #--------------------------------------------------------------------------
  def update_move
    move_data_set if @move_horming && !@hit_position
    through_set(@move_time, @target_x, @target_y) if @move_time == 1 && !@hit_position
    @o += @orbit[@move_time - 1] if @orbit[@move_time - 1] != nil
    @position_x = (@position_x * (@move_time - 1) + @target_x) / @move_time
    @position_y = (@position_y * (@move_time - 1) + @target_y) / @move_time + @o
    reset_position
    set_animation(@move_data[1][0]) if @loop && !animation?
    @move_time -= 1
    return if @move_time != 0
    @action_end = true if !@action_end_cancel
  end
  #--------------------------------------------------------------------------
  # ● 武器の動きを更新
  #--------------------------------------------------------------------------
  def update_weapon_move
    pattern = update_pattern
    set_battler_position if @move_time == 0 && !@action_end_cancel
    @real_x = @position_x / 100 + @weapon_move_data[pattern][0] / 100
    @real_y = @position_y / 100 + @weapon_move_data[pattern][1] / 100
    @real_zoom_x = @weapon_zoom_data[pattern][0]
    @real_zoom_y = @weapon_zoom_data[pattern][1]
    self.angle = @weapon_angle_data[pattern]
    self.src_rect.set(@weapon_width * pattern, 0, @weapon_width, @weapon_height) if @weapon_data[1] == 2
  end
  #--------------------------------------------------------------------------
  # ● パターンを更新
  #--------------------------------------------------------------------------
  def update_pattern
    return @battler.sv.pattern_w if @count == nil
    @count -= 1
    return @pattern if @count != 0
    @count = @max_count
    @pattern += 1
    if !@repeat && @pattern == @max_pattern
      @pattern = @max_pattern - 1
    elsif @pattern == @max_pattern
      @pattern = 0
    end
    return @pattern
  end
  #--------------------------------------------------------------------------
  # ● 座標を更新
  #--------------------------------------------------------------------------
  def update_position
    self.x = (@real_x - $sv_camera.x) * $sv_camera.convert / 1000
    self.y = (@real_y - $sv_camera.y) * $sv_camera.convert / 1000
    self.x += $sv_camera.sx / 100 unless @battler.sv.h != 0 && @weapon_data != []
    self.y += $sv_camera.sy / 100 unless @battler.sv.h != 0 && @weapon_data != []
    self.z = @battler.sv.z + @z_plus - 10
    self.zoom_x = @real_zoom_x * $sv_camera.zoom
    self.zoom_y = @real_zoom_y * $sv_camera.zoom
    self.opacity = @battler.sv.opacity if @battler.sv.opacity_data[4]
  end
  #--------------------------------------------------------------------------
  # ● 貫通の処理
  #--------------------------------------------------------------------------
  def through_set(time, target_x, target_y)
    @hit_anime_id = N03.get_attack_anime_id(@move_data[1][1], @battler)
    @battler.sv.wait = N03.get_anime_time(@hit_anime_id) if @move_data[10][1]
    moving_x = (target_x / 100 - @position_x / 100) / time
    moving_y = (target_y / 100 - @position_y / 100) / time
    goal_x = $sv_camera.max_left - 100 if moving_x < 0
    goal_x = Graphics.width + $sv_camera.max_right + 100 if moving_x > 0
    goal_y = $sv_camera.max_top - 100 if moving_y < 0
    goal_y = Graphics.height + $sv_camera.max_bottom + 100 if moving_y > 0
    if goal_x == nil &&  goal_y == nil
      time = 0
      reset_position
    else
      time = move_calculation(moving_x, moving_y, goal_x, goal_y)
    end
    target_x = @position_x + moving_x * time * 100
    target_y = @position_y + moving_y * time * 100
    @pre_data = [time, target_x, target_y]
    @battler.sv.m_a_data.push([@move_data[11], @target_battler, @index, @auto_through_flag, []])
    @action_end_cancel = true
    @hit_position = [@real_x, @real_y, self.z]
  end  
  #--------------------------------------------------------------------------
  # ● 到達時間試算
  #--------------------------------------------------------------------------
  def move_calculation(moving_x, moving_y, goal_x, goal_y)
    move_x = @position_x / 100
    move_y = @position_y / 100
    time = 0
    loop do
      move_x += moving_x
      move_y += moving_y
      time += 1
      return time if moving_x < 0 && move_x < goal_x
      return time if moving_x > 0 && move_x > goal_x
      return time if moving_y < 0 && move_y < goal_y
      return time if moving_y > 0 && move_y > goal_y
    end
  end   
  #--------------------------------------------------------------------------
  # ● ミス時に消える処理から貫通処理に変換
  #--------------------------------------------------------------------------
  def through_change
    @action_end_cancel = false
    @through = true
    @move_time = @pre_data[0]
    @target_x = @pre_data[1]
    @target_y = @pre_data[2]
    @pre_data = nil
  end  
  #--------------------------------------------------------------------------
  # ● SE とフラッシュのタイミング処理
  #--------------------------------------------------------------------------
  def animation_process_timing(timing)
    return if !@timing_targets
    se_flag = true
    se_flag = @se_flag if @se_flag != nil
    for target in @timing_targets
      target.sv.timing.push([se_flag, timing.dup])
      se_flag = false if @animation.position == 3
    end  
  end
  #--------------------------------------------------------------------------
  # ● 色調の更新
  #--------------------------------------------------------------------------
  def update_color
    return if @battler.sv.color == []
    self.color.set(@battler.sv.color[0], @battler.sv.color[1], @battler.sv.color[2], @battler.sv.color[3])
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    super
    self.bitmap.dispose if self.bitmap != nil
  end
end

#==============================================================================
# ■ Sprite_Battle_Picture
#------------------------------------------------------------------------------
#  ピクチャ表示用のスプライトです。
#==============================================================================
class Sprite_Battle_Picture < Sprite
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数 
  #--------------------------------------------------------------------------
  attr_accessor   :action_end           # 終了フラグ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(viewport = nil)
    super(viewport)
    @action_end = false
    self.ox = 0
  end
  #--------------------------------------------------------------------------
  # ● セット
  #--------------------------------------------------------------------------
  def set(battler)
    @battler = battler
    @data = @battler.sv.effect_data.shift
    @time = @data[4]
    @mirror = $sv_camera.mirror
    @mirror = false if !@data[8]
    self.opacity = @data[6][0]
    @s_x = @data[2][0] if @data[2] != []
    @s_x = Graphics.width - @data[2][0]  if @data[2] != [] && @mirror
    @s_y = @data[2][1] if @data[2] != []
    @e_x = @data[3][0] if @data[3] != []
    @e_x = Graphics.width - @data[3][0] if @data[3] != [] && @mirror
    @e_y = @data[3][1] if @data[3] != []
    @s_x = self.x if @data[2] == []
    @s_y = self.y if @data[2] == []
    @e_x = self.x if @data[3] == []
    @e_y = self.y if @data[3] == []
    self.x = @s_x
    self.y = @s_y
    return @action_end = true if @time == 0
    @move_x = (@e_x * 1.0 - @s_x) / @time
    @move_y = (@e_y * 1.0 - @s_y) / @time
    self.z = @data[5]
    return set_plane(battler) if @data[7] != []
    self.bitmap = Cache.picture(@data[9]) if !bitmap or @data[9] != ""
    return @action_end = true if !bitmap
    self.mirror = @mirror
    self.ox = self.bitmap.width if @mirror
  end
  #--------------------------------------------------------------------------
  # ● プレーン移行
  #--------------------------------------------------------------------------
  def set_plane(battler)
    @viewport = Viewport.new(@data[2][0],@data[2][1],@data[7][0],@data[7][1]) if !@viewport
    viewport = @viewport
    @plane = Plane.new(viewport) if !@plane
    @plane.bitmap = Cache.picture(@data[9]) if [email protected] or @data[9] != ""
    return @action_end = true if [email protected]
    @plane.ox = @data[7][0]
    @plane.oy = @data[7][1]
    @plane.opacity = @data[6][0]
    @move_x = @remain_move[0] if @data[2] == @data[3]
    @move_y = @remain_move[1] if @data[2] == @data[3]
    @remain_move = [@move_x, @move_y]
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    @action_end = true if [email protected]
    return if @time == 0
    return if @action_end
    @time -= 1
    return plane_update if @plane
    super
    self.x += @move_x
    self.y += @move_y
    self.opacity += @data[6][1]
    return if @time != 1
    self.x = @e_x
    self.y = @e_y
    @time = 0
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def plane_update
    @plane.ox += @move_x
    @plane.oy += @move_y
    @plane.opacity += @data[6][1]
    @time = @data[4] if @time == 0
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    bitmap.dispose if bitmap
    @plane.dispose if @plane
    @viewport.dispose if @viewport
    super
  end
end

#==============================================================================
# ■ Sprite_Back_Picture
#------------------------------------------------------------------------------
#  周期ピクチャ用のスプライトです。
#==============================================================================
class Sprite_Back_Picture < Plane
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数 
  #--------------------------------------------------------------------------
  attr_accessor   :action_end           # 終了フラグ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(viewport = nil, index)
    super(viewport)
    @index = index
    @real_x = 0
    @real_y = 0
    @real_opacity = 0
    @move_x = 0
    @move_y = 0
    @move_opacity = 0
    @time = 0
    @switche = 0
    @action_end = false
  end
  #--------------------------------------------------------------------------
  # ● セットアップ
  #--------------------------------------------------------------------------
  def setup(data)
    self.bitmap = Cache.picture(data[9])
    self.z = data[6]
    @switche = data[1]
    mirror = $sv_camera.mirror
    mirror = false if !data[8]
    @move_x = data[3][0]
    @move_x *= -1 if mirror
    @move_y = data[3][1]
    @time = data[4]
    @time = -1 if @time == 0
    @real_opacity = (data[5][0] + 1) * 100
    @move_opacity = data[5][1]
    @start_opacity = data[5][0]
    @shake_ok = data[7]
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    update_picture if @time != 0
    self.ox = $sv_camera.x - @real_x
    self.oy = $sv_camera.y - @real_y
    if @shake_ok
      self.ox -= $sv_camera.sx / 100
      self.oy -= $sv_camera.sy / 100
    end
    self.ox *= $sv_camera.zoom
    self.oy *= $sv_camera.zoom
    self.zoom_x = @zoom_x * $sv_camera.zoom
    self.zoom_y = @zoom_y * $sv_camera.zoom
    self.opacity = @real_opacity / 100
    @move_opacity *= -1 if self.opacity == 255 or self.opacity <= @start_opacity
    @switche
    @action_end = true if @switche > 0 && !$game_switches[@switche]
    @action_end = true if @switche < 0 && !$sv_camera.switches[@switche.abs]
  end
  #--------------------------------------------------------------------------
  # ● ピクチャの更新
  #--------------------------------------------------------------------------
  def update_picture
    @real_x += @move_x / 100
    @real_y += @move_y / 100
    @real_x = 0 if @real_x >= self.bitmap.width or @real_x <= -self.bitmap.width
    @real_y = 0 if @real_y >= self.bitmap.height or @real_y <= -self.bitmap.height
    @zoom_x = 1
    @zoom_y = 1
    @real_opacity += @move_opacity
    @time -= 1
    @time = -1 if @time < -100
  end
end

#==============================================================================
# ■ Sprite_Back_Picture
#------------------------------------------------------------------------------
#  ダメージ表示のスプライトです。
#==============================================================================
class Sprite_Damage < Sprite
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数 
  #--------------------------------------------------------------------------
  attr_reader   :action_end                  # POP終了フラグ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(viewport = nil, battler)
    super(viewport)
    @battler = battler
    @time = 0
    return @action_end = true if !@battler
    @direction = -1
    @direction *= -1 if @battler.actor?
    @direction *= -1 if $sv_camera.mirror
    set_state
    set_damage
    update
  end
  #--------------------------------------------------------------------------
  # ● ステート表示
  #--------------------------------------------------------------------------
  def set_state
    return if !N03::STATE_POP
    states = @battler.result.added_state_objects
    states.delete($data_states[@battler.death_state_id]) if @battler.result.hp_damage != 0
    return if states == []
    return if @battler.sv.add_state == @battler.result.added_state_objects
    @battler.sv.add_state = states.dup
    @st = []
    @st_base = []
    for i in 0...states.size
      @st = Sprite.new
      bitmap_state(@st, states)
      @st_base = []
      @st_base[0] = @direction * (-20 + 5 * i) + @battler.sv.x / 100
      @st_base[1] = -40 - @state_height * i + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
      @st.z = 1000 + i
      @st.opacity = 0
    end
    @time = @pop_time = 80
  end   
  #--------------------------------------------------------------------------
  # ● ステート画像
  #--------------------------------------------------------------------------
  def bitmap_state(state, state_object)
    name = state_object.name
    state.bitmap = Cache.system("Iconset").dup
    state.src_rect.set(state_object.icon_index % 16 * 24, state_object.icon_index / 16 * 24, 24, 24)
    @state_height = 24
  end
  #--------------------------------------------------------------------------
  # ● ダメージ表示
  #--------------------------------------------------------------------------
  def hit_count
    for i in [email protected]
      if @battler.sv.hit == nil
        @hit = i
        return @battler.sv.hit = @hit
      end
    end
    @hit = @battler.sv.hit.size
    @battler.sv.hit.push(@hit)
  end  
  #--------------------------------------------------------------------------
  # ● ダメージ表示
  #--------------------------------------------------------------------------
  def set_damage
    return @action_end = true if !N03::DAMAGE_POP
    damage = @battler.result.hp_damage if @battler.result.hp_damage != 0
    damage = @battler.result.hp_drain  if @battler.result.hp_drain  != 0
    damage = @battler.result.mp_damage if @battler.result.mp_damage != 0
    damage = @battler.result.mp_drain  if @battler.result.mp_drain  != 0
    damage = @battler.result.tp_damage if @battler.result.tp_damage != 0
    if !damage or damage == 0
      @action_end = true if @st == nil
      return # ステートだけPOPする設定を考慮して@action_endは返さない
    end
    hit_count
    #@hit = @battler.sv.hit
    #@battler.sv.hit += 1 if damage != 0
    file = N03::DAMAGE_PLUS if damage > 0
    file = N03::DAMAGE_MINUS if damage < 0
    add_file = N03::DAMAGE_MP if @battler.result.mp_damage != 0
    add_file = N03::DAMAGE_TP if @battler.result.tp_damage != 0
    adjust_x = N03::DAMAGE_ADJUST
    @num = []
    @num_base = []
    damage = damage.abs
    max_num = damage.to_s.size
    max_num += 1 if add_file != nil
    for i in 0...max_num
      @num = Sprite.new
      if add_file != nil && i == max_num - 1
        @num.bitmap = Cache.system(add_file)
        cw = (damage % (10 * 10 ** i))/(10 ** i)
        sw = 0 if sw == nil
      else
        @num.bitmap = Cache.system(file)
        cw = (damage % (10 * 10 ** i))/(10 ** i)
        sw = @num.bitmap.width / 10
        @num.src_rect.set(cw * sw, 0, sw, @num.bitmap.height)
      end
      @num_base = []
      @num_base[0] = (sw + adjust_x) * i * -1 + (@battler.sv.x / 100)
      @num_base[1] =  -(@num.bitmap.height / 3) - i * 2 - @hit * 2 + (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.oy_adjust)/ 100
      @num_base[0] -= @num.bitmap.width / 2 - adjust_x if add_file != nil && i == max_num - 1
      @num.z = 1000 + i + @hit * 10
    end
    @time = @pop_time = 80
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    return if @time == 0
    for i in [email protected] do update_state_move(@st, i) end if @st != nil
    for i in [email protected] do update_num_move(@num, i) end if @num != nil
    @time -= 1
    @action_end = true if @time == 0
  end
  #--------------------------------------------------------------------------
  # ● ステート画像の更新
  #--------------------------------------------------------------------------
  def update_state_move(state, index)
    min = @pop_time - index * 2
    case @time
    when min-15..min
      @st_base[index][0] += @direction
      state.opacity += 25
    when min-80..min-50
      @st_base[index][0] += @direction
      state.opacity -= 25
    end
    state.x = (@st_base[index][0] - $sv_camera.x) * $sv_camera.zoom
    state.y = (@st_base[index][1] - $sv_camera.y) * $sv_camera.zoom
  end
  #--------------------------------------------------------------------------
  # ● 数値の更新
  #--------------------------------------------------------------------------
  def update_num_move(num, index)
    min = @pop_time - index * 2
    case @time
    when min-1..min
      @num_base[index][0] += @direction * @hit
      @num_base[index][1] -= 5 + @hit * 2
    when min-3..min-2
      @num_base[index][0] += @direction * @hit
      @num_base[index][1] -= 4 + @hit * 2
    when min-6..min-4
      @num_base[index][0] += @direction
      @num_base[index][1] -= 3 + @hit * 2
    when min-14..min-7
      @num_base[index][0] += @direction
      @num_base[index][1] += 2
    when min-17..min-15
      @num_base[index][1] -= 2 + @hit * 2
    when min-23..min-18
      @num_base[index][1] += 1
    when min-27..min-24
      @num_base[index][1] -= 1
    when min-30..min-28
      @num_base[index][1] += 1
    when min-33..min-31
      @num_base[index][1] -= 1
    when min-36..min-34
      @num_base[index][1] += 1
    end
    num.x = (@num_base[index][0] - $sv_camera.x) * $sv_camera.zoom
    num.y = (@num_base[index][1] - $sv_camera.y) * $sv_camera.zoom
    num.opacity = 256 - (12 - @time) * 32
    num.visible = false if @time == 0
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    @battler.sv.hit[@hit] = nil if @hit
    bitmap.dispose if bitmap
    for i in [email protected] do @num.dispose end if @num != nil
    for i in [email protected] do @st.dispose end if @st != nil
    super
  end
end

#==============================================================================
# ■ Window_Skill_name
#------------------------------------------------------------------------------
#  スキル名を表示するウィンドウです。
#==============================================================================
class Window_Skill_name < Window_Base
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(text)
    super(0, 0, Graphics.width, line_height + standard_padding * 2)
    draw_text(4, 0, Graphics.width - 64, line_height,text, 1)
  end
end

#==============================================================================
# ■ Spriteset_Sideview
#------------------------------------------------------------------------------
#  サイドビュー独自のスプライトをまとめたクラスです。
#==============================================================================
class Spriteset_Sideview
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(viewport)
    @viewport = viewport
    @weapons = []
    @pictures = []
    @back_pic = []
    @damage = []
    $sv_camera.setup
    N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup)
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    update_battler_data
    update_damage
    update_pictures
    update_back_pic
    update_weapons
  end  
  #--------------------------------------------------------------------------
  # ● バトラーデータの更新
  #--------------------------------------------------------------------------
  def update_battler_data
    for battler in $game_party.battle_members + $game_troop.members
      weapon_end(battler) if battler.sv.weapon_end
      next if battler.sv.effect_data == []
      for effect_data in battler.sv.effect_data do set_effects(battler, effect_data) end
    end
  end
  #--------------------------------------------------------------------------
  # ● ダメージ画像の更新
  #--------------------------------------------------------------------------
  def update_damage
    for i in [email protected]
      next if @damage == nil
      @damage.update if @damage != nil
      next if !@damage.action_end
      @damage.dispose
      @damage = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● ピクチャアクションの更新
  #--------------------------------------------------------------------------
  def update_pictures
    for i in [email protected]
      next if @pictures == nil
      @pictures.update if @pictures != nil
      next if !@pictures.action_end
      @pictures.dispose
      @pictures = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● 周期ピクチャの更新
  #--------------------------------------------------------------------------
  def update_back_pic
    set_back_pic if $sv_camera.program_picture != []
    for i in 0...@back_pic.size
      next if @back_pic == nil
      @back_pic.update if @back_pic != nil
      next if !@back_pic.action_end
      @back_pic.dispose
      @back_pic = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● 武器アクションの更新
  #--------------------------------------------------------------------------
  def update_weapons
    for i in [email protected]
      next if @weapons == nil
      @weapons.update if @weapons != nil
      next if !@weapons.action_end
      @weapons.dispose
      @weapons = nil
    end
  end
  #--------------------------------------------------------------------------
  # ● ダメージ実行
  #--------------------------------------------------------------------------
  def set_damage_pop(target)
    for i in [email protected]
      next if @damage != nil
      return @damage = Sprite_Damage.new(@viewport, target)
    end
    @damage.push(Sprite_Damage.new(@viewport, target))
  end
  #--------------------------------------------------------------------------
  # ● 周期ピクチャ実行
  #--------------------------------------------------------------------------
  def set_back_pic
    for data in $sv_camera.program_picture
      if @back_pic[data[2]] != nil
        @back_pic[data[2]].dispose
        @back_pic[data[2]] = nil
      end
      @back_pic[data[2]] = Sprite_Back_Picture.new(@viewport, data[2])
      @back_pic[data[2]].setup(data)
    end
    $sv_camera.program_picture = []
  end
  #--------------------------------------------------------------------------
  # ● エフェクト開始
  #--------------------------------------------------------------------------
  def set_effects(battler, effect_data)
    case effect_data[0]
    when "pic" ; set_pictures(battler, effect_data)
    when  "wp" ; set_weapons(battler,  true)
    when "m_a" ; set_weapons(battler, false)
    end
  end
  #--------------------------------------------------------------------------
  # ● ピクチャアクション実行
  #--------------------------------------------------------------------------
  def set_pictures(battler, effect_data)
    @pictures[effect_data[1]] = Sprite_Battle_Picture.new if @pictures[effect_data[1]] == nil
    @pictures[effect_data[1]].set(battler)
  end
  #--------------------------------------------------------------------------
  # ● 武器アクション実行
  #--------------------------------------------------------------------------
  def set_weapons(battler, weapon_flag, test = true)
    for i in [email protected]
      next if @weapons != nil
      @weapons = Sprite_Weapon.new(@viewport, i, battler)
      battler.sv.weapon_index.push(i) if weapon_flag
      return i
    end
    @weapons.push(Sprite_Weapon.new(@viewport, @weapons.size, battler))
    battler.sv.weapon_index.push(@weapons.size - 1) if weapon_flag
    return @weapons.size - 1
  end
  #--------------------------------------------------------------------------
  # ● バトラーの武器アクション終了
  #--------------------------------------------------------------------------
  def weapon_end(battler)
    battler.sv.weapon_end = false
    for index in battler.sv.weapon_index
      weapon_index = battler.sv.weapon_index.shift
      @weapons[weapon_index].dispose if @weapons[weapon_index] != nil
      @weapons[weapon_index] = nil
    end
    battler.sv.weapon_index.compact!
  end  
  #--------------------------------------------------------------------------
  # ● ヒット時の戦闘アニメ実行
  #--------------------------------------------------------------------------
  def set_hit_animation(battler, weapon_index, hit_targets, miss)
    weapon = @weapons[weapon_index]
    for target in hit_targets
      next @weapons[@hit_index].timing_battler_set(target) if @hit_index != nil
      @hit_index = set_weapons(battler, false, false)
      @weapons[@hit_index].set_hit_animation(weapon.hit_position, weapon.hit_anime_id, target)
    end
    @hit_index = nil
    if !weapon.through && !miss
      @weapons[weapon_index].dispose
      @weapons[weapon_index] = nil
    else
      @weapons[weapon_index].through_change
    end
  end
  #--------------------------------------------------------------------------
  # ● サイドビューデータの初期化
  #--------------------------------------------------------------------------
  def reset_sideview
    $sv_camera.reset
    for member in $game_troop.members + $game_party.battle_members do member.sv.reset end
  end  
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    dispose_effects(@weapons)
    dispose_effects(@pictures)
    dispose_effects(@back_pic)
    dispose_effects(@damage)
    reset_sideview
  end
  #--------------------------------------------------------------------------
  # ● エフェクト画像の解放
  #--------------------------------------------------------------------------
  def dispose_effects(effects)
    for i in 0...effects.size
      effects.dispose if effects != nil
      effects = nil
    end
  end
end


#==============================================================================
# ■ Sprite_Battle_Back
#------------------------------------------------------------------------------
#  戦闘背景用のスプライトです。
#==============================================================================
class Sprite_Battle_Back < Plane
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize(viewport = nil, index, battleback_name)
    super(viewport)
    @index = index
    if @index == 1
      data = N03::FLOOR1_DATA[battleback_name]
      data = N03::FLOOR1_DATA["全Battlebacks1"] if data == nil
    elsif @index == 2
      data = N03::FLOOR2_DATA[battleback_name]
      data = N03::FLOOR2_DATA["全Battlebacks2"] if data == nil
    end   
    data = data.dup
    @adjust_position = data[0]
    @zoom_x = data[1][0] / 100.0
    @zoom_y = data[1][1] / 100.0
    @shake_on = data[2]
    $game_switches[data[3]] = true if data[3] > 0
    $sv_camera.switches[data[3].abs] = true if data[3] < 0
    reset_scroll
    reset_back_data(battleback_name)
  end
  #--------------------------------------------------------------------------
  # ● 背景スクロールを初期化
  #--------------------------------------------------------------------------
  def reset_scroll
    @scroll_x = 0
    @scroll_y = 0
    @move_x = 0
    @move_y = 0
  end
  #--------------------------------------------------------------------------
  # ● 背景データを初期化
  #--------------------------------------------------------------------------
  def reset_back_data(battleback_name)
    @back_data = []
    @active_data = ["scroll",0, @move_x, @move_y, false, battleback_name,""]
    start_back_data(@active_data)
  end  
  #--------------------------------------------------------------------------
  # ● 背景画像のセッティング
  #--------------------------------------------------------------------------
  def set_graphics(new_bitmap)
    self.bitmap = new_bitmap
    @base_x = (self.bitmap.width * @zoom_x - Graphics.width) / 2 + @adjust_position[0]
    @base_y = (self.bitmap.height * @zoom_y - Graphics.height) / 2 + @adjust_position[1]
    # 限界座標を取得
    max_top =  0
    max_bottom = self.bitmap.height * @zoom_y - Graphics.height
    max_left = 0
    max_right = self.bitmap.width * @zoom_x - Graphics.width
    exist = true
    exist = false if self.bitmap.height == 32 && self.bitmap.width == 32
    $sv_camera.setting(@index, [max_top, max_bottom, max_left, max_right, @base_x, @base_y,exist])
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    return if !bitmap
    update_back_data
    update_scroll unless @move_x == 0 && @move_y == 0
    update_color
    update_position
    update_back_adjust if @bt_back != nil
    create_back_adjust if @bt_back == nil && !@active_data[10] && @scroll_x == 0 && @scroll_y == 0
  end
  #--------------------------------------------------------------------------
  # ● 背景データを更新
  #--------------------------------------------------------------------------
  def update_back_data
    delete = true if @active_data[1] > 0 && !$game_switches[@active_data[1]]
    delete = true if @active_data[1] < 0 && !$sv_camera.switches[@active_data[1].abs]
    return if !delete
    for i in 0...@back_data.size
      @back_data = nil if @back_data[1] > 0 && !$game_switches[@back_data[1]]
      @back_data = nil if @back_data[1] < 0 && !$sv_camera.switches[@back_data[1].abs]
    end
    @back_data.compact!
    next_back_data
  end
  #--------------------------------------------------------------------------
  # ● 次の背景データをセット
  #--------------------------------------------------------------------------
  def next_back_data
    @back_data.delete(@active_data[11]) if @active_data[11] != nil
    @back_data.push(@active_data[11]) if @active_data[11] != nil
    @active_data = nil
    data = @back_data.pop
    @back_data = [@active_data] if @back_data.size == 0
    start_back_data(data)
  end  
  #--------------------------------------------------------------------------
  # ● 背景データを実行
  #--------------------------------------------------------------------------
  def start_back_data(data)
    return if back_data_remain(data)
    bt_back_dispose
    pre_active_data = @active_data
    @active_data[8] = [@back_name, @move_x, @move_y, @scroll_x, @scroll_y] if @active_data != nil
    @back_data.push(@active_data)     if @active_data != nil
    @active_data = data.dup
    @active_data[5] = @back_name      if @active_data[5] == ""
    @active_data[9] = set_back_adjust if @active_data[9] == nil
    back_data_scroll_on               if @active_data[8] == nil && @active_data[9][0] == false
    set_remain_back_data              if @active_data[8] != nil
    create_back(@active_data[5])      if @active_data[9][0] == false
    create_back_adjust                if @active_data[10]
    @active_data[11] = pre_active_data if pre_active_data && @active_data[7] == false
  end  
  #--------------------------------------------------------------------------
  # ● 背景データの保留
  #--------------------------------------------------------------------------
  def back_data_remain(data)
    remain = false
    remain = true if data[6] != "" && @active_data != nil && @active_data[9] != nil && @active_data[9][0] != false
    remain = true if @active_data != nil && @active_data[7] == false
    return remain if !remain
    @remain = true
    @back_data.push(data)
    return remain
  end  
  #--------------------------------------------------------------------------
  # ● 背景変更補正データをセット
  #--------------------------------------------------------------------------
  def set_back_adjust
    bt_adjust = []
    sign = -1
    if @active_data[6] == ""
      reset_scroll if @active_data[3][0] == 0 &&  @active_data[3][1] == 0
      bt_adjust = [false,false,0,0]
      return bt_adjust
    elsif @move_x != 0 or @active_data[3][0] != 0
      sign = 1 if @move_x < 0
      bt_adjust[0] = [self.bitmap.width * @zoom_x * sign, 0]
      bt_adjust[1] = [self.bitmap.width * @zoom_x * sign * 2, 0]
    elsif @move_y != 0 or @active_data[3][1] != 0
      sign = 1 if @move_y < 0
      bt_adjust[0] = [0, self.bitmap.height * @zoom_y * sign]
      bt_adjust[1] = [0, self.bitmap.height * @zoom_y * sign * 2]
    else
      reset_scroll if @active_data[3][0] == 0 &&  @active_data[3][1] == 0
      bt_adjust = [false,false,0,0]
      return bt_adjust
    end
    bt_adjust[2] = [bt_adjust[0][0], bt_adjust[0][1]]
    return bt_adjust
  end
  #--------------------------------------------------------------------------
  # ● 背景スクロールデータを実行
  #--------------------------------------------------------------------------
  def back_data_scroll_on
    mirror = $sv_camera.mirror
    mirror = false if !@active_data[4]
    @move_x = @active_data[3][0]
    @move_x *= -1 if mirror
    @move_y = @active_data[3][1]
  end
  #--------------------------------------------------------------------------
  # ● 保持している背景データを実行
  #--------------------------------------------------------------------------
  def set_remain_back_data
    return back_data_scroll_on if @move_x != 0 or @move_y != 0
    create_back(@active_data[8][0])
    @move_x    = @active_data[8][1]
    @move_y    = @active_data[8][2]
    @scroll_x  = @active_data[8][3]
    @scroll_y  = @active_data[8][4]
  end  
  #--------------------------------------------------------------------------
  # ● 背景画像の作成
  #--------------------------------------------------------------------------
  def create_back(back_name)
    return if back_name == @back_name or back_name == ""
    self.bitmap = Cache.battleback1(back_name) if @index == 1
    self.bitmap = Cache.battleback2(back_name) if @index == 2
    @back_name = back_name
  end  
  #--------------------------------------------------------------------------
  # ● 背景変更補正画像の作成
  #--------------------------------------------------------------------------
  def create_back_adjust
    return if @active_data[9][0] == false
    @active_data[10] = true
    mirror = $sv_camera.mirror
    mirror = false if !@active_data[4]
    @bt_back = []
    @bt_back[0] = Sprite.new(viewport)
    @bt_back[0].bitmap = Cache.battleback1(@active_data[6]) if @index == 1
    @bt_back[0].bitmap = Cache.battleback2(@active_data[6]) if @index == 2
    @bt_back[0].mirror = mirror
    @bt_back[1] = Sprite.new(viewport)
    @bt_back[1].bitmap = Cache.battleback1(@active_data[5]) if @index == 1
    @bt_back[1].bitmap = Cache.battleback2(@active_data[5]) if @index == 2
    @bt_back[1].mirror = mirror
  end
  #--------------------------------------------------------------------------
  # ● 背景スクロールの更新
  #--------------------------------------------------------------------------
  def update_scroll
    @scroll_x += @move_x
    @scroll_y += @move_y
    @scroll_x = 0 if @scroll_x / 100 >= self.bitmap.width * @zoom_x or @scroll_x / 100 <= -self.bitmap.width * @zoom_x
    @scroll_y = 0 if @scroll_y / 100 >= self.bitmap.height * @zoom_y or @scroll_y / 100 <= -self.bitmap.height * @zoom_y
  end
  #--------------------------------------------------------------------------
  # ● 色調変更の更新
  #--------------------------------------------------------------------------
  def update_color
    color_set if $sv_camera.color_set[@index] != nil
    return if @color_data == nil
    @color_data[4] -= 1
    if @color_data[4] == 0 && @color_data[5] != 0
      @color_data[4] = @color_data[5]
      @color_data[5] = 0
      @color_data[6] = [0,0,0,0]
    elsif @color_data[4] == 0
      @remain_color_data = @color_data
      return @color_data = nil
    end  
    for i in 0..3
      @color_data = (@color_data * (@color_data[4] - 1) + @color_data[6]) / @color_data[4]
    end  
    self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  end
  #--------------------------------------------------------------------------
  # ● 座標の更新
  #--------------------------------------------------------------------------
  def update_position
    self.ox = $sv_camera.x + @base_x - @scroll_x / 100
    self.oy = $sv_camera.y + @base_y - @scroll_y / 100
    self.ox -= $sv_camera.sx / 100 if @shake_on
    self.oy -= $sv_camera.sy / 100 if @shake_on
    self.zoom_x = @zoom_x * $sv_camera.zoom
    self.zoom_y = @zoom_y * $sv_camera.zoom
    self.ox *= $sv_camera.zoom
    self.oy *= $sv_camera.zoom
    self.z = @index * 10
  end
  #--------------------------------------------------------------------------
  # ● 背景変更補正画像を更新
  #--------------------------------------------------------------------------
  def update_back_adjust
    @active_data[9][0][0] = 0 if @scroll_x == 0
    @active_data[9][0][1] = 0 if @scroll_y == 0
    @active_data[9][1][0] -= @active_data[9][2][0] if @scroll_x == 0
    @active_data[9][1][1] -= @active_data[9][2][1] if @scroll_y == 0
    for i in 0...@bt_back.size
      @bt_back.x = -self.ox + @active_data[9][0] * $sv_camera.zoom
      @bt_back.y = -self.oy + @active_data[9][1] * $sv_camera.zoom
      @bt_back.zoom_x = self.zoom_x
      @bt_back.zoom_y = self.zoom_y
      @bt_back.z = self.z + 1
      @bt_back.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
    end
    back_data_scroll_on if @active_data[9][0][0] == 0 && @active_data[9][0][1] == 0
    return unless @active_data[9][1][0] == 0 && @active_data[9][1][1] == 0
    bt_back_dispose
    create_back(@active_data[5])
    @active_data[9][0] = false
    next_back_data if @remain && @back_data.size != 1
    @remain = false
  end
  #--------------------------------------------------------------------------
  # ● 色調変更
  #--------------------------------------------------------------------------
  def color_set
    set = $sv_camera.color_set[@index]
    $sv_camera.color_set[@index] = nil
    set[4] = 1 if set[4] == 0
    @remain_color_data = [0,0,0,0] if @remain_color_data == nil
    @color_data = @remain_color_data
    @color_data[4] = set[4]
    @color_data[5] = set[5]
    @color_data[6] = set
  end
  #--------------------------------------------------------------------------
  # ● 背景変更補正画像の解放
  #--------------------------------------------------------------------------
  def bt_back_dispose
    for i in 0...@bt_back.size do @bt_back.dispose end if @bt_back != nil
    @bt_back = nil
  end  
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  def dispose
    bitmap.dispose if bitmap
    bt_back_dispose
    super
  end
end  
  
#==============================================================================
# ■ Battle_Camera
#------------------------------------------------------------------------------
#  戦闘カメラやバトルプログラムを扱うクラスです。
#==============================================================================
class Battle_Camera
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数 
  #--------------------------------------------------------------------------
  attr_reader   :sx                 # シェイクX座標
  attr_reader   :sy                 # シェイクY座標
  attr_reader   :max_top            # 上限界座標
  attr_reader   :max_bottom         # 下限界座標
  attr_reader   :max_left           # 左限界座標
  attr_reader   :max_right          # 右限界座標
  attr_accessor :switches           # サイドビュー専用スイッチ
  attr_accessor :color_set          # 色調変更データ
  attr_accessor :wait               # 戦闘シーンの強制ウエイト
  attr_accessor :win_wait           # 戦闘勝利前のウエイト
  attr_accessor :mirror             # 画面反転フラグ
  attr_accessor :program_scroll     # バトルプログラム 背景の自動スクロール
  attr_accessor :program_picture    # バトルプログラム 周期ピクチャ
  attr_accessor :event              # コモンイベント呼び出し
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize
    @switches = []
    @max_data = []
    @color_set = []
    @wait = 0
    @win_wait = false
    @mirror = false
    @event = false
    setup
  end
  #--------------------------------------------------------------------------
  # ● カメラX座標
  #--------------------------------------------------------------------------
  def x
    return @x / 100
  end
  #--------------------------------------------------------------------------
  # ● カメラY座標
  #--------------------------------------------------------------------------
  def y
    return @y / 100
  end
  #--------------------------------------------------------------------------
  # ● ズーム率
  #--------------------------------------------------------------------------
  def zoom
    return @zoom * 0.001
  end
  #--------------------------------------------------------------------------
  # ● ズーム率による座標変換
  #--------------------------------------------------------------------------
  def convert
    return @zoom
  end
  #--------------------------------------------------------------------------
  # ● カメラセットアップ
  #--------------------------------------------------------------------------
  def setup
    @x = 0
    @y = 0
    @sx = 0
    @sy = 0
    @zoom = 1000
    @time = 0
    @shake_time = 0
    program_setup
  end
  #--------------------------------------------------------------------------
  # ● カメラ初期化
  #--------------------------------------------------------------------------
  def reset
    @switches = []
    @max_data = []
    @color_set = []
    @wait = 0
    @win_wait = false
    @mirror = false
    program_setup(false)
  end  
  #--------------------------------------------------------------------------
  # ● バトルプログラムのセットアップ
  #--------------------------------------------------------------------------
  def program_setup(check = true)
    @played_program  = []
    @program_switch  = []
    @program_sound   = []
    @program_scroll  = []
    @program_se      = []
    @program_shake   = []
    @program_color   = []
    @program_picture = []
    @program_base = N03::BATTLE_PROGRAM.values.dup
    program_check if check
  end  
  #--------------------------------------------------------------------------
  # ● バトルプログラムのチェック
  #--------------------------------------------------------------------------
  def program_check
    for data in @program_base
      if program_start?(data) && !@played_program.include?(data)
        @played_program.push(data.dup)
        @program_scroll.push(data.dup)  if data[0] == "scroll"
        @program_picture.push(data.dup) if data[0] == "kpic"
        start_sound(data.dup)           if data[0] == "sound"
        start_program_switch(data.dup)  if data[0] == "switch"
        start_program_se(data.dup)      if data[0] == "keep_se"
        start_program_shake(data.dup)   if data[0] == "keep_sk"
        start_program_color(data.dup)   if data[0] == "keep_c"
      else
        @played_program.delete(data)  if !program_start?(data)
        @program_scroll.delete(data)  if data[0] == "scroll"
        @program_picture.delete(data) if data[0] == "kpic"
        @program_switch.delete(data)  if data[0] == "switch"
        @program_sound.delete(data)   if data[0] == "sound"
        @program_se.delete(data)      if data[0] == "keep_se"
        @program_shake.delete(data)   if data[0] == "keep_sk"
        @program_color.delete(data)   if data[0] == "keep_c"
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● バトルプログラムの開始
  #--------------------------------------------------------------------------
  def program_start?(data)
    start = false
    start = true if $game_switches[data[1].abs] && data[1] > 0
    start = true if @switches[data[1].abs] && data[1] < 0
    return start
  end  
  #--------------------------------------------------------------------------
  # ● バトルプログラム スイッチ操作の開始
  #--------------------------------------------------------------------------
  def start_program_switch(data)
    data[4] = data[4] + rand(data[5] + 1)
    data[4] = 1 if data[4] <= 0
    @program_switch.push(data)
  end
  #--------------------------------------------------------------------------
  # ● スイッチ操作の更新
  #--------------------------------------------------------------------------
  def update_program_switch
    for data in @program_switch
      data[4] -= 1
      next @program_switch.delete(data) if data[1] > 0 && !$game_switches[data[1]]
      next @program_switch.delete(data) if data[1] < 0 && !@switches[data[1].abs]
      next if data[4] != 0
      for id in data[2]
        $game_switches[id] = true if id > 0
        @switches[id.abs] = true  if id < 0
      end
      for id in data[3]
        $game_switches[id] = false if id > 0
        @switches[id.abs] = false  if id < 0
      end
      @program_switch.delete(data)
      program_check
    end  
  end
  #--------------------------------------------------------------------------
  # ● バトルプログラム BGM/BGSの開始
  #--------------------------------------------------------------------------
  def start_sound(data)
    @program_sound.push(data)
    name = data[5]
    case data[2]
    when "se"
      Audio.se_play("Audio/SE/" + name, data[4], data[3])
    when "bgm"
      name = RPG::BGM.last.name if data[5] == ""
      Audio.bgm_play("Audio/BGM/" + name, data[4], data[3])
    when "bgs"
      name = RPG::BGS.last.name if data[5] == ""
      Audio.bgs_play("Audio/BGS/" + name, data[4], data[3])
    end
  end
  #--------------------------------------------------------------------------
  # ● バトルプログラム 周期SEの開始
  #--------------------------------------------------------------------------
  def start_program_se(data)
    data[3] = [data[2], data[3]]
    data[2] = data[3][0] + rand(data[3][1] + 1)
    @program_se.push(data)
    Audio.se_play("Audio/SE/" + data[7], data[5], data[4]) if data[6]
  end
  #--------------------------------------------------------------------------
  # ● 周期SEの更新
  #--------------------------------------------------------------------------
  def update_program_se
    for data in @program_se
      data[2] -= 1
      next @program_se.delete(data) if data[1] > 0 && !$game_switches[data[1]]
      next @program_se.delete(data) if data[1] < 0 && !@switches[data[1].abs]
      next if data[2] != 0
      Audio.se_play("Audio/SE/" + data[7], data[5], data[4])
      data[2] = data[3][0] + rand(data[3][1] + 1)
    end  
  end
  #--------------------------------------------------------------------------
  # ● バトルプログラム 周期シェイクの開始
  #--------------------------------------------------------------------------
  def start_program_shake(data)
    data[3] = [data[2], data[3]]
    data[2] = data[3][0] + rand(data[3][1] + 1)
    @program_shake.push(data)
    shake(data[4], data[5], data[6]) if data[7]
  end
  #--------------------------------------------------------------------------
  # ● 周期シェイクの更新
  #--------------------------------------------------------------------------
  def update_program_shake
    for data in @program_shake
      data[2] -= 1
      next @program_shake.delete(data) if data[1] > 0 && !$game_switches[data[1]]
      next @program_shake.delete(data) if data[1] < 0 && !@switches[data[1].abs]
      next if data[2] != 0
      shake(data[4], data[5], data[6])
      data[2] = data[3][0] + rand(data[3][1] + 1)
    end  
  end
  #--------------------------------------------------------------------------
  # ● バトルプログラム 周期色調変更の開始
  #--------------------------------------------------------------------------
  def start_program_color(data)
    data[3] = [data[2], data[3]]
    data[2] = data[3][0] + rand(data[3][1] + 1)
    data[7] = true if data[4] == 0 or data[4] == 4
    case data[4]
    when 1   ;data[4] = $game_troop.members
    when 2   ;data[4] = $game_party.battle_members
    when 3,4 ;data[4] = $game_troop.members + $game_party.battle_members
    else ;data[4] = []
    end
    @program_color.push(data)
    return if !data[6]
    for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
    @color_set[1] = data[5] if data[7]
    @color_set[2] = data[5] if data[7]
  end
  #--------------------------------------------------------------------------
  # ● 周期色調変更の更新
  #--------------------------------------------------------------------------
  def update_program_color
    for data in @program_color
      data[2] -= 1
      next @program_color.delete(data) if data[1] > 0 && !$game_switches[data[1]]
      next @program_color.delete(data) if data[1] < 0 && !@switches[data[1].abs]
      next if data[2] != 0
      for target in data[4] do target.sv.color_set = data[5] end if data[4] != []
      @color_set[1] = data[5] if data[7]
      @color_set[2] = data[5] if data[7]
      data[2] = data[3][0] + rand(data[3][1] + 1)
    end
  end
  #--------------------------------------------------------------------------
  # ● トランジション実行
  #--------------------------------------------------------------------------
  def perform_transition(data)
    Graphics.transition(data[2], "Graphics/Pictures/" + data[3], data[1])
  end  
  #--------------------------------------------------------------------------
  # ● 背景からカメラの限界値を取得  data = [max_top, max_bottom, max_left, max_right]
  #--------------------------------------------------------------------------
  def setting(index, data)
    @max_data[index - 1] = data
    return if index != 2
    setup
    # カメラの中心座標
    @center_x     = (Graphics.width / 2 + N03::CAMERA_POSITION[0]) * 100
    @center_y     = (Graphics.height / 2 + N03::CAMERA_POSITION[1]) * 100
    # 上下左右の移動限界距離
    @max_top    = [@max_data[0][5], @max_data[1][5]].min * -1
    @max_bottom = [@max_data[0][1], @max_data[1][1]].min + @max_top
    @max_left   = [@max_data[0][4], @max_data[1][4]].min  * -1
    @max_right  = [@max_data[0][3], @max_data[1][3]].min + @max_left
    exist_data = @max_data[0] if !@max_data[1][6]
    exist_data = @max_data[1] if !@max_data[0][6]
    @max_top    = exist_data[5] * -1        if exist_data != nil
    @max_bottom = exist_data[1] + @max_top  if exist_data != nil
    @max_left   = exist_data[4] * -1        if exist_data != nil
    @max_right  = exist_data[3] + @max_left if exist_data != nil
    @max_top = @max_bottom = @max_left = @max_right = 0 if !@max_data[1][6] && !@max_data[0][6]
    @max_width    = @max_right - @max_left + Graphics.width
    @max_height   = @max_bottom - @max_top + Graphics.height
    # ズームアウト限界値
    max_zoom_x    = 100 * Graphics.width / @max_width
    max_zoom_y    = 100 * Graphics.height / @max_height
    @max_zoom_out = [max_zoom_x, max_zoom_y].max
  end
  #--------------------------------------------------------------------------
  # ● カメラ移動
  #--------------------------------------------------------------------------
  def move(target_x, target_y, zoom, time, screen = true)
    # 戦闘背景以上のサイズまでズームアウトしないよう調整
    @target_zoom = [zoom * 0.01, @max_zoom_out * 0.01].max
    target_x *= -1 if screen && @mirror
    # ズーム分の中心座標補正
    if screen && @target_zoom != 1
      target_x = target_x + @center_x
      target_y = target_y + @center_y
    end
    adjust_x = @center_x * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
    adjust_y = @center_y * (@target_zoom - 1) / (@target_zoom ** 2 - @target_zoom)
    adjust_x = 0 if adjust_x.nan?
    adjust_y = 0 if adjust_y.nan?
    adjust_x = @center_x if !screen && adjust_x == 0
    adjust_y = @center_y if !screen && adjust_y == 0
    @target_x = target_x - adjust_x.to_i
    @target_y = target_y - adjust_y.to_i
    @target_zoom = (@target_zoom * 1000).to_i
    @zoom = @zoom.to_i
    limit_test
    # 時間0の場合は即実行
    return @time = time.abs if time != 0
    @time = 1
    update
  end
  #--------------------------------------------------------------------------
  # ● 限界座標の試算
  #--------------------------------------------------------------------------
  def limit_test
    new_width = @max_width * @target_zoom / 1000
    new_height = @max_height * @target_zoom / 1000
    new_max_right = @max_right - (@max_width - new_width)
    new_max_bottom = @max_bottom - (@max_height - new_height)
    # 画面の移動先が限界の場合、限界座標をセット
    if @target_x < @max_left * 100
      @target_x = @max_left * 100
    end
    if @target_x > new_max_right * 100
      @target_x = new_max_right * 100
    end
    if @target_y < @max_top * 100
      @target_y = @max_top * 100
    end
    if @target_y > new_max_bottom * 100
      @target_y = new_max_bottom * 100
    end
  end
  #--------------------------------------------------------------------------
  # ● 画面のシェイク
  #--------------------------------------------------------------------------
  def shake(power, speed, time)
    @shake_x = power[0] * 100
    @shake_y = power[1] * 100
    @power_time_base = @power_time = speed
    @shake_time = time
    update_shake
  end
  #--------------------------------------------------------------------------
  # ● シェイクの更新
  #--------------------------------------------------------------------------
  def update_shake
    @sx = (@sx * (@power_time - 1) + @shake_x) / @power_time
    @sy = (@sy * (@power_time - 1) + @shake_y) / @power_time
    @power_time -= 1
    @shake_time -= 1
    return @sx = @sy = 0 if @shake_time == 0
    return if @power_time != 0
    @power_time = @power_time_base
    @shake_x = @shake_x * -4 / 5
    @shake_y = @shake_y * -4 / 5
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update
    update_shake if @shake_time != 0
    update_program
    return if @time == 0
    @x = (@x * (@time - 1) + @target_x) / @time
    @y = (@y * (@time - 1) + @target_y) / @time
    @zoom = (@zoom * (@time - 1) + @target_zoom) / @time
    @time -= 1
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  def update_program
    update_program_switch if @program_switch != []
    update_program_se     if @program_se != []
    update_program_shake  if @program_shake != []
    update_program_color  if @program_color != []
  end
end

#==============================================================================
# ■ Scene_Battle
#------------------------------------------------------------------------------
#  バトル画面の処理を行うクラスです。
#==============================================================================
class Scene_Battle < Scene_Base
  #--------------------------------------------------------------------------
  # ● フレーム更新(基本)
  #--------------------------------------------------------------------------
  alias update_basic_scene_battle_n03 update_basic
  def update_basic
    update_basic_scene_battle_n03
    $sv_camera.update
    $sv_camera.wait = N03::TURN_END_WAIT + 1 if $sv_camera.win_wait
    camera_wait
  end
  #--------------------------------------------------------------------------
  # ● カメラウェイト
  #--------------------------------------------------------------------------
  def camera_wait
    process_event if $sv_camera.event
    $sv_camera.event = false if $sv_camera.event
    while $sv_camera.wait != 0
      Graphics.update
      Input.update
      update_all_windows
      $game_timer.update
      $game_troop.update
      $sv_camera.update
      @spriteset.update
      update_info_viewport
      update_message_open
      $sv_camera.wait -= 1 if $sv_camera.wait > 0
      $sv_camera.wait = 1 if $sv_camera.wait == 0 && @spriteset.effect?
      BattleManager.victory if $sv_camera.win_wait && $sv_camera.wait == 0
    end
  end
  #--------------------------------------------------------------------------
  # ● カメラウェイトのセット
  #--------------------------------------------------------------------------
  def set_camera_wait(time)
    $sv_camera.wait = time
    camera_wait
  end  
  #--------------------------------------------------------------------------
  # ● エフェクト実行が終わるまでウェイト ★再定義
  #--------------------------------------------------------------------------
  def wait_for_effect
  end
  #--------------------------------------------------------------------------
  # ● ターン開始
  #--------------------------------------------------------------------------
  alias turn_start_scene_battle_n03 turn_start
  def turn_start
    turn_start_scene_battle_n03
    N03.camera(nil, N03::BATTLE_CAMERA["ターン開始後"].dup)
  end
  #--------------------------------------------------------------------------
  # ● ターン終了
  #--------------------------------------------------------------------------
  alias turn_end_scene_battle_n03 turn_end
  def turn_end
    turn_end_scene_battle_n03
    for member in $game_troop.members + $game_party.members
      N03.set_damage(member, member.sv.result_damage[0],member.sv.result_damage[1])
      member.sv.result_damage = [0,0]
      @spriteset.set_damage_pop(member) if member.result.hp_damage != 0 or member.result.mp_damage != 0
    end
    set_camera_wait(N03::TURN_END_WAIT)
    N03.camera(nil, N03::BATTLE_CAMERA["ターン開始前"].dup) if $game_party.inputable?
    @log_window.clear
  end
  #--------------------------------------------------------------------------
  # ● スキル/アイテムの使用 ★再定義
  #--------------------------------------------------------------------------
  def use_item
    item = @subject.current_action.item
    display_item(item)
    @subject.use_item(item)
    refresh_status
    @targets = @subject.current_action.make_targets.compact
    @targets = [@subject] if @targets.size == 0
    set_substitute(item)
    for time in item.repeats.times do play_sideview(@targets, item) end
    end_reaction(item)
    display_end_item
  end
  #--------------------------------------------------------------------------
  # ● スキル/アイテム名の表示
  #--------------------------------------------------------------------------
  def display_item(item)
    return @log_window.display_use_item(@subject, item) if N03::BATTLE_LOG
    @log_window.off
    @skill_name_window = Window_Skill_name.new(item.name) unless N03::NO_DISPLAY_SKILL_ID.include?(item.id) && item.is_a?(RPG::Skill)
  end  
  #--------------------------------------------------------------------------
  # ● スキル/アイテム名の表示終了
  #--------------------------------------------------------------------------
  def display_end_item
    @skill_name_window.dispose if @skill_name_window != nil
    @skill_name_window = nil
    set_camera_wait(N03::ACTION_END_WAIT) if @subject.sv.derivation_skill_id == 0
    @log_window.clear if N03::BATTLE_LOG
  end  
  #--------------------------------------------------------------------------
  # ● 反撃/魔法反射/身代わり処理
  #--------------------------------------------------------------------------
  def end_reaction(item)
    end_substitute if @substitute != nil
    set_reflection(item) if @reflection_data != nil
    set_counter_attack if @counter_attacker != nil
  end  
  #--------------------------------------------------------------------------
  # ● 反撃の発動 ★再定義
  #--------------------------------------------------------------------------
  def invoke_counter_attack(target, item)
    return if @subject.sv.counter_id != 0
    @counter_attacker = [] if @counter_attacker == nil
    return apply_item_effects(apply_substitute(target, item), item) if !target.movable?
    @log_window.add_text(sprintf(Vocab::CounterAttack, target.name)) if N03::BATTLE_LOG
    target.sv.counter_id = target.sv.counter_skill_id
    @counter_attacker.push(target)
  end
  #--------------------------------------------------------------------------
  # ● 魔法反射の発動 ★再定義
  #--------------------------------------------------------------------------
  def invoke_magic_reflection(target, item)
    return if @subject.sv.reflection_id != 0
    @log_window.add_text(sprintf(Vocab::MagicReflection, target.name)) if N03::BATTLE_LOG
    target.sv.reflection_id = target.sv.reflection_anime_id
  end
  #--------------------------------------------------------------------------
  # ● 身代わりの適用 ★再定義
  #--------------------------------------------------------------------------
  def apply_substitute(target, item)
    return target if @substitute == nil
    return target if !check_substitute(target, item)
    return @substitute
  end
  #--------------------------------------------------------------------------
  # ● 身代わりセット
  #--------------------------------------------------------------------------
  def set_substitute(item)
    @substitute = N03.get_enemy_unit(@subject).substitute_battler
    return if @substitute == nil
    s_targets = []
    for i in [email protected]
      next if @targets == @substitute
      next if !check_substitute(@targets, item)
      @log_window.add_text(sprintf(Vocab::Substitute, @substitute.name, @targets.name))
      @targets.sv.start_action(@targets.sv.substitute_receiver_start_action)
      s_targets.push(@targets)
      @targets = @substitute
    end
    return @substitute = nil if s_targets == []
    @substitute.sv.set_target(s_targets)
    @substitute.sv.start_action(@substitute.sv.substitute_start_action)
  end  
  #--------------------------------------------------------------------------
  # ● 身代わり終了
  #--------------------------------------------------------------------------
  def end_substitute
    for member in @substitute.sv.target_battler
      member.sv.start_action(member.sv.substitute_receiver_end_action)
    end  
    @substitute.sv.start_action(@substitute.sv.substitute_end_action)
    @substitute = nil
  end
  #--------------------------------------------------------------------------
  # ● 反撃
  #--------------------------------------------------------------------------
  def set_counter_attack
    pre_subject = @subject
    for attacker in @counter_attacker
      @subject = attacker
      item = $data_skills[attacker.sv.counter_skill_id]
      play_sideview([pre_subject], item)
    end
    # 同一カウンター者を考慮してカウンターIDの初期化はアクション後に実行
    for attacker in @counter_attacker do attacker.sv.counter_id = 0 end
    @subject = pre_subject
    @counter_attacker = nil
  end
  #--------------------------------------------------------------------------
  # ● 魔法反射
  #--------------------------------------------------------------------------
  def set_reflection(item)
    @log_window.back_to(1)
    for data in @reflection_data
      @subject.sv.damage_action(@subject, item)
      N03.set_damage_anime_data([@subject], @subject, data)
      apply_item_effects(@subject, item)
      @spriteset.set_damage_pop(@subject)
    end
    set_camera_wait(N03.get_anime_time(@reflection_data[0][0]))
    @reflection_data = nil
  end
  #--------------------------------------------------------------------------
  # ● サイドビューアクション実行
  #--------------------------------------------------------------------------
  def play_sideview(targets, item)
    @subject.sv.set_target(targets)
    return if @subject.sv.attack_action(item) == nil
    return if [email protected]?
    return if item.scope != 9 && item.scope != 10 && !N03.targets_alive?(targets)
    @subject.sv.start_action(@subject.sv.attack_action(item))
    @subject.sv.unshift_action(@subject.sv.flash_action) if @subject.flash_flg
    @subject.sv.active = true
    @subject.sv.command_action = false
    loop do
      update_basic
      data = @subject.sv.play_data
      @targets = N03.s_targets(@subject) if data[0] == "second_targets_set"
      N03.targets_set(@subject)          if data[0] == "targets_set"
      @immortal = N03.immortaling        if data[0] == "no_collapse" && !N03.dead_attack?(@subject, item)
      @immortal = N03.unimmortaling      if data[0] == "collapse"
      next set_move_anime(item)          if @subject.sv.m_a_data != []
      set_damage(item)                   if @subject.sv.set_damage
      break N03.derived_skill(@subject)  if @subject.sv.derivation_skill_id != 0
      break                              if @subject.sv.action_end or @subject.hidden?
    end
    @immortal = N03.unimmortaling        if @immortal
  end
  #--------------------------------------------------------------------------
  # ● ダメージの実行
  #--------------------------------------------------------------------------
  def set_damage(item)
    targets = @targets
    targets = [@subject.sv.individual_targets[0]] if @subject.sv.individual_targets.size != 0
    for target in targets do damage_anime(targets.dup, target, item) end
    @subject.sv.set_damage = false
    @subject.sv.damage_anime_data = []
  end
  #--------------------------------------------------------------------------
  # ● ダメージ戦闘アニメ処理
  #--------------------------------------------------------------------------
  def damage_anime(targets, target, item)
    @log_window.back_to(1) if @log_window.line_number == 5
    return if item.scope != 9 && item.scope != 10 && target.dead?
    @miss = false
    invoke_item(target,item)
    if target.result.missed
      target.sv.miss_action(@subject, item)
      return @miss = true
    elsif target.result.evaded or target.sv.counter_id != 0
      target.sv.evasion_action(@subject, item)
      return @miss = true
    elsif target.sv.reflection_id != 0
      N03.set_damage_anime_data(targets, target, [target.sv.reflection_id, false, false, true])
      target.sv.reflection_id = 0
      @reflection_data = [] if @reflection_data == nil
      return @reflection_data.push([N03.get_attack_anime_id(-3, @subject), false, false, true])
    end
    target.sv.damage_action(@subject, item)
    N03.set_damage(@subject, -target.result.hp_drain, -target.result.mp_drain) if target != @subject
    @spriteset.set_damage_pop(target)
    @spriteset.set_damage_pop(@subject) if target != @subject && (@subject.result.hp_damage != 0 or @subject.result.mp_damage != 0)#SideView的BUG
    N03.set_damage_anime_data(targets, target, @subject.sv.damage_anime_data) if @subject.sv.damage_anime_data != []
  end
  #--------------------------------------------------------------------------
  # ● 飛ばしアニメ処理
  #--------------------------------------------------------------------------
  def set_move_anime(item)
    for data in @subject.sv.m_a_data
      @subject.sv.damage_anime_data = data[4]
      hit_targets = []
      for target in data[1]
        damage_anime(data[1], target, item) if data[0]
        hit_targets.push(target) if !@miss
      end
      @miss = false if !data[3]
      @spriteset.set_hit_animation(@subject, data[2], hit_targets, @miss)
    end
    @subject.sv.set_damage = false
    @subject.sv.m_a_data = []
  end
end

#==============================================================================
# ■ DataManager
#------------------------------------------------------------------------------
#  データベースとゲームオブジェクトを管理するモジュールです。
#==============================================================================
module DataManager
  #--------------------------------------------------------------------------
  # ● 各種ゲームオブジェクトの作成 ★再定義
  #--------------------------------------------------------------------------
  def self.create_game_objects
    $game_temp          = Game_Temp.new
    $game_system        = Game_System.new
    $game_timer         = Game_Timer.new
    $game_message       = Game_Message.new
    $game_switches      = Game_Switches.new
    $game_variables     = Game_Variables.new
    $game_self_switches = Game_SelfSwitches.new
    $game_actors        = Game_Actors.new
    $game_party         = Game_Party.new
    $game_troop         = Game_Troop.new
    $game_map           = Game_Map.new
    $game_player        = Game_Player.new
    $sv_camera          = Battle_Camera.new
  end
end

#==============================================================================
# ■ BattleManager
#------------------------------------------------------------------------------
#  戦闘の進行を管理するモジュールです。
#==============================================================================
module BattleManager
  #--------------------------------------------------------------------------
  # ● エンカウント時の処理 ★再定義
  #--------------------------------------------------------------------------
  def self.on_encounter
    @preemptive = (rand < rate_preemptive)
    @surprise = (rand < rate_surprise && !@preemptive)
    $sv_camera.mirror = @surprise if N03::BACK_ATTACK
  end
  #--------------------------------------------------------------------------
  # ● 勝利の処理 ★再定義
  #--------------------------------------------------------------------------
  def self.process_victory
    $sv_camera.win_wait = true
  end  
  #--------------------------------------------------------------------------
  # ● 勝利
  #--------------------------------------------------------------------------
  def self.victory
    $sv_camera.win_wait = false
    N03.camera(nil, N03::BATTLE_CAMERA["戦闘終了時"].dup)
    for member in $game_party.members do member.sv.start_action(member.sv.win) if member.movable? end
    play_battle_end_me
    replay_bgm_and_bgs
    $game_message.add(sprintf(Vocab::Victory, $game_party.name))
    display_exp
    gain_gold
    gain_drop_items
    gain_exp
    SceneManager.return
    battle_end(0)
    return true
  end
  #--------------------------------------------------------------------------
  # ● 逃走の処理 ★再定義
  #--------------------------------------------------------------------------
  def self.process_escape
    $game_message.add(sprintf(Vocab::EscapeStart, $game_party.name))
    success = @preemptive ? true : (rand < @escape_ratio)
    Sound.play_escape
    if success
      process_abort
      for member in $game_party.members do member.sv.start_action(member.sv.escape) if member.movable? end
    else
      @escape_ratio += 0.1
      $game_message.add('\.' + Vocab::EscapeFailure)
      $game_party.clear_actions
      for member in $game_party.members do member.sv.start_action(member.sv.escape_ng) if member.movable? end
    end
    wait_for_message
    return success
  end
  #--------------------------------------------------------------------------
  # ● 次のコマンド入力へ ★再定義
  #--------------------------------------------------------------------------
  def self.next_command
    begin
      if !actor || !actor.next_command
        $game_party.battle_members[@actor_index].sv.command_action = true
        @actor_index += 1
        if @actor_index >= $game_party.members.size
          for member in $game_party.battle_members.reverse
            break member.sv.start_action(member.sv.command_a) if member.inputable?
          end
          return false
        end
      end
    end until actor.inputable?
    actor.sv.start_action(actor.sv.command_b) if actor != nil && actor.inputable?
    if pre_actor
      pre_actor.sv.start_action(pre_actor.sv.command_a) if pre_actor != nil && pre_actor.inputable?
    end
    return true
  end
  #--------------------------------------------------------------------------
  # ● 前のコマンド入力へ ★再定義
  #--------------------------------------------------------------------------
  def self.prior_command
    begin
      if !actor || !actor.prior_command
        $game_party.battle_members[@actor_index].sv.command_action = false
        @actor_index -= 1
        if @actor_index < 0
          for member in $game_party.battle_members
            break member.sv.start_action(member.sv.command_a) if member.inputable?
          end
          return false
        end
      end
    end until actor.inputable?
    actor.make_actions if actor.inputable?
    actor.sv.start_action(actor.sv.command_b) if actor.inputable?
    after_actor.sv.start_action(after_actor.sv.command_a) if after_actor != nil && after_actor.inputable?
    return true
  end
  #--------------------------------------------------------------------------
  # ● コマンド入力前のアクターを取得
  #--------------------------------------------------------------------------
  def self.pre_actor
    return if @actor_index == 0
    $game_party.members[@actor_index - 1]
  end
  #--------------------------------------------------------------------------
  # ● コマンド入力後のアクターを取得
  #--------------------------------------------------------------------------
  def self.after_actor
    $game_party.members[@actor_index + 1]
  end
  #--------------------------------------------------------------------------
  # ● 戦闘行動者を前に追加
  #--------------------------------------------------------------------------
  def self.unshift_action_battlers(battler)
    @action_battlers.unshift(battler)
  end
end  

#==============================================================================
# ■ Game_Battler
#------------------------------------------------------------------------------
#  スプライトや行動に関するメソッドを追加したバトラーのクラスです。
#==============================================================================
class Game_Battler < Game_BattlerBase
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader   :sv                     # サイドビューデータ
  attr_accessor :flash_flg              # 閃きフラグ
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_game_battler_n03 initialize
  def initialize
    initialize_game_battler_n03
    @sv = SideView.new(self)
  end
  #--------------------------------------------------------------------------
  # ● 現在の戦闘行動を除去
  #--------------------------------------------------------------------------
  alias remove_current_action_game_battler_n03 remove_current_action
  def remove_current_action
    return @sv.derivation_skill_id = 0 if @sv.derivation_skill_id != 0
    remove_current_action_game_battler_n03
  end
  #--------------------------------------------------------------------------
  # ● ターン終了処理
  #--------------------------------------------------------------------------
  alias on_turn_end_game_battler_n03 on_turn_end
  def on_turn_end
    on_turn_end_game_battler_n03
    @sv.add_state = []
    @sv.result_damage = [@result.hp_damage, @result.mp_damage]
  end
  #--------------------------------------------------------------------------
  # ● パラメータ条件比較 data = [種別, 数値, 判別]
  #--------------------------------------------------------------------------
  def comparison_parameter(data)
    return true if data[0][0] == 0
    kind = data[0]
    num = data[1]
    select = data[2]
    case kind
    when  1 ; par = level
    when  2 ; par = mhp
    when  3 ; par = mmp
    when  4 ; par = hp
    when  5 ; par = mp
    when  6 ; par = tp
    when  7 ; par = atk
    when  8 ; par = self.def
    when  9 ; par = mat
    when 10 ; par = mdf
    when 11 ; par = agi
    when 12 ; par = luk
    end
    if num < 0
      case kind
      when  4 ; num = mhp * num / 100
      when  5 ; num = mmp * num / 100
      when  6 ; num = max_tp * num / 100
      end
      num = num.abs
    end  
    case select
    when  0 ; return par == num
    when  1 ; return par < num
    when  2 ; return par > num
    end
  end
  #--------------------------------------------------------------------------
  # ● 装備条件比較 data = [装備種別, タイプID]
  #--------------------------------------------------------------------------
  def comparison_equip(data)
    kind = data[0]
    items = weapons if kind == 0
    items = armors  if kind == 1
    for item in items
      for id in data[1]
        return true if id > 0 && item.is_a?(RPG::Weapon) && item == $data_weapons[id.abs]
        return true if id > 0 && item.is_a?(RPG::Armor) && item == $data_armors[id.abs]
        return true if id < 0 && item.is_a?(RPG::Weapon) && item.wtype_id == id.abs
        return true if id < 0 && item.is_a?(RPG::Armor) && item.stype_id == id.abs
      end
    end
    return false
  end
  
end  
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
#  アクターを扱うクラスです。
#==============================================================================
class Game_Actor < Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader :actor_id                    # ID
  #--------------------------------------------------------------------------
  # ● ID
  #--------------------------------------------------------------------------
  def id
    return @actor_id
  end
  #--------------------------------------------------------------------------
  # ● スプライトを使うか? ★再定義
  #--------------------------------------------------------------------------
  def use_sprite?
    return true
  end
  #--------------------------------------------------------------------------
  # ● ダメージ効果の実行 ★再定義
  #--------------------------------------------------------------------------
  def perform_damage_effect
    return if !N03::ACTOR_DAMAGE
    $game_troop.screen.start_shake(5, 5, 10)
    @sprite_effect_type = :blink
    Sound.play_actor_damage
  end
  
end

#==============================================================================
# ■ Game_Enemy
#------------------------------------------------------------------------------
#  敵キャラを扱うクラスです。
#==============================================================================
class Game_Enemy < Game_Battler
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_reader :enemy_id                    # ID
  #--------------------------------------------------------------------------
  # ● ID
  #--------------------------------------------------------------------------
  def id
    return @enemy_id
  end
  #--------------------------------------------------------------------------
  # ● レベル
  #--------------------------------------------------------------------------
  def level
    return @sv.level
  end
  #--------------------------------------------------------------------------
  # ● ダメージ効果の実行 ★再定義
  #--------------------------------------------------------------------------
  def perform_damage_effect
    return if !N03::ENEMY_DAMAGE
    @sprite_effect_type = :blink
    Sound.play_enemy_damage
  end
  #--------------------------------------------------------------------------
  # ● 武器
  #--------------------------------------------------------------------------
  def weapons
    weapon1 = $data_weapons[@sv.enemy_weapon1_id]
    weapon2 = $data_weapons[@sv.enemy_weapon2_id]
    return [weapon1, weapon2]
  end
  #--------------------------------------------------------------------------
  # ● 防具
  #--------------------------------------------------------------------------
  def armors
    return [$data_armors[@sv.enemy_shield_id]]
  end
  #--------------------------------------------------------------------------
  # ● 二刀流の判定
  #--------------------------------------------------------------------------
  def dual_wield?
    return $data_weapons[@sv.enemy_weapon2_id] != nil
  end
  #--------------------------------------------------------------------------
  # ● バトラー画像変更
  #--------------------------------------------------------------------------
  def graphics_change(battler_name)
    @battler_name = battler_name
  end
  #--------------------------------------------------------------------------
  # ● 通常攻撃 アニメーション ID の取得
  #--------------------------------------------------------------------------
  def atk_animation_id1
    return weapons[0].animation_id if weapons[0]
    return weapons[1] ? 0 : 1
  end
  #--------------------------------------------------------------------------
  # ● 通常攻撃 アニメーション ID の取得(二刀流:武器2)
  #--------------------------------------------------------------------------
  def atk_animation_id2
    return weapons[1] ? weapons[1].animation_id : 0
  end
end

#==============================================================================
# ■ Sprite_Base
#------------------------------------------------------------------------------
#  アニメーションの表示処理を追加したスプライトのクラスです。
#==============================================================================
class Sprite_Base < Sprite
  #--------------------------------------------------------------------------
  # ● アニメーションの座標更新 (ホーミングあり)
  #--------------------------------------------------------------------------
  def update_animation_position_horming
    return if @action_end_cancel
    ani_ox_set if @horming
    camera_zoom = $sv_camera.zoom
    camera_zoom = 1 if @move_anime
    kind = 1
    kind = -1 if @ani_mirror && !@anime_no_mirror
    cell_data = @animation.frames[@animation.frame_max - (@ani_duration + @ani_rate - 1) / @ani_rate].cell_data
    for i in 0..15
      @ani_sprites.x = (@ani_ox + cell_data[i, 1] * kind - $sv_camera.x) * camera_zoom if @ani_sprites != nil && cell_data[i, 1] != nil
      @ani_sprites.y = (@ani_oy + cell_data[i, 2] - $sv_camera.y) * camera_zoom if @ani_sprites != nil && cell_data[i, 2] != nil
    end
  end
  #--------------------------------------------------------------------------
  # ● アニメーション元の座標をセット
  #--------------------------------------------------------------------------
  def ani_ox_set
    if !SceneManager.scene_is?(Scene_Battle)
      @real_x = x
      @real_y = y
    end
    @ani_ox = @real_x - ox + width / 2
    @ani_oy = @real_y - oy + height / 2
    @ani_oy -= height / 2 if @animation.position == 0
    @ani_oy += height / 2 if @animation.position == 2
  end
  #--------------------------------------------------------------------------
  # ● アニメーションの更新
  #--------------------------------------------------------------------------
  alias update_animation_sprite_base_n03 update_animation
  def update_animation
    update_animation_position_horming if animation? && SceneManager.scene_is?(Scene_Battle) && @animation.position != 3
    update_animation_sprite_base_n03
  end
  #--------------------------------------------------------------------------
  # ● アニメーションの原点設定 ★再定義
  #--------------------------------------------------------------------------
  def set_animation_origin
    return ani_ox_set if @animation.position != 3
    if viewport == nil
      @ani_ox = Graphics.width / 2
      @ani_oy = Graphics.height / 2
    else
      @ani_ox = viewport.rect.width / 2
      @ani_oy = viewport.rect.height / 2
    end
  end
  #--------------------------------------------------------------------------
  # ● アニメーションスプライトの設定 ★再定義
  #--------------------------------------------------------------------------
  def animation_set_sprites(frame)
    camera_zoom = 1
    camera_zoom = $sv_camera.zoom if @anime_camera_zoom && @animation.position != 3 && SceneManager.scene_is?(Scene_Battle)
    camera_x = $sv_camera.x
    camera_y = $sv_camera.y
    camera_x = camera_y = 0 if @animation.position == 3 or !SceneManager.scene_is?(Scene_Battle)
    plus_z = 5
    plus_z = 1000 if @animation.position == 3
    plus_z = -17 if @plus_z != nil && @plus_z == false
    plus_z = -self.z + 10 if @plus_z != nil && @plus_z == false && @animation.position == 3
    cell_data = frame.cell_data
    @ani_sprites.each_with_index do |sprite, i|
      next unless sprite
      pattern = cell_data[i, 0]
      if !pattern || pattern < 0
        sprite.visible = false
        next
      end
      sprite.bitmap = pattern < 100 ? @ani_bitmap1 : @ani_bitmap2
      sprite.visible = true
      sprite.src_rect.set(pattern % 5 * 192,
        pattern % 100 / 5 * 192, 192, 192)
      if @ani_mirror && !@anime_no_mirror
        sprite.x = (@ani_ox - cell_data[i, 1] - camera_x) * camera_zoom
        sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
        sprite.angle = (360 - cell_data[i, 4])
        sprite.mirror = (cell_data[i, 5] == 0)
      else
        sprite.x = (@ani_ox + cell_data[i, 1] - camera_x) * camera_zoom
        sprite.y = (@ani_oy + cell_data[i, 2] - camera_y) * camera_zoom
        sprite.angle = cell_data[i, 4]
        sprite.mirror = (cell_data[i, 5] == 1)
      end
      sprite.z = self.z + plus_z + i
      sprite.ox = 96
      sprite.oy = 96
      sprite.zoom_x = cell_data[i, 3] * camera_zoom / 100.0
      sprite.zoom_y = cell_data[i, 3] * camera_zoom/ 100.0
      sprite.opacity = cell_data[i, 6] * self.opacity / 255.0
      sprite.blend_type = cell_data[i, 7]
    end
  end
  #--------------------------------------------------------------------------
  # ● 子スプライトフラグ
  #--------------------------------------------------------------------------
  def set(battler, horming, camera_zoom, no_mirror)
    @battler = battler
    @next = true
    self.bitmap = Bitmap.new(@battler.sv.cw, @battler.sv.ch)
    self.ox = bitmap.width / 2
    self.oy = bitmap.height
    @horming = horming
    @anime_camera_zoom = camera_zoom
    @anime_no_mirror = no_mirror
    @battler.sv.reset_anime_data
  end  
  #--------------------------------------------------------------------------
  # ● 子スプライト座標セット
  #--------------------------------------------------------------------------
  def set_position(z, zoom_x, zoom_y, real_x, real_y)
    self.z = z
    self.zoom_x = zoom_x
    self.zoom_y = zoom_y
    @real_x = real_x
    @real_y = real_y
  end
  #--------------------------------------------------------------------------
  # ● 他スプライトへのタイミング処理
  #--------------------------------------------------------------------------
  def other_process_timing(timing)
    se_flag = true
    se_flag = @se_flag if @se_flag != nil
    @battler.sv.timing.push([se_flag, timing.dup])
  end
  #--------------------------------------------------------------------------
  # ● 他バトラーへのタイミング処理
  #--------------------------------------------------------------------------
  def target_battler_process_timing(timing)
    for target in @timing_targets
      target.sv.timing.push([false, timing.dup])
    end  
  end
  #--------------------------------------------------------------------------
  # ● SE とフラッシュのタイミング処理
  #--------------------------------------------------------------------------
  alias animation_process_timing_sprite_base_n03 animation_process_timing
  def animation_process_timing(timing)
    target_battler_process_timing(timing) if @timing_targets && @timing_targets != []
    return other_process_timing(timing) if @next != nil
    animation_process_timing_sprite_base_n03(timing)
  end
  #--------------------------------------------------------------------------
  # ● アニメーションの解放
  #--------------------------------------------------------------------------
  alias dispose_animation_sprite_base_n03 dispose_animation
  def dispose_animation
    dispose_animation_sprite_base_n03
  end
end


#==============================================================================
# ■ Sprite_Battler
#------------------------------------------------------------------------------
#  バトラー表示用のスプライトです。
#==============================================================================
class Sprite_Battler < Sprite_Base
  #--------------------------------------------------------------------------
  # ● 公開インスタンス変数 
  #--------------------------------------------------------------------------
  attr_accessor   :removing             # パーティ離脱中
  #--------------------------------------------------------------------------
  # ● オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_sprite_battler_n03 initialize
  def initialize(viewport, battler = nil)
    initialize_sprite_battler_n03(viewport, battler)
    @real_x = @real_y = 0
    update_bitmap if @battler != nil
  end
  #--------------------------------------------------------------------------
  # ● アニメーションの開始 ★再定義
  #--------------------------------------------------------------------------
  def start_animation(animation, mirror = false)
    return next_animation(animation, mirror) if animation?
    @animation = animation
    if @animation
      @horming = @battler.sv.anime_horming
      @anime_camera_zoom = @battler.sv.anime_camera_zoom
      @anime_no_mirror = @battler.sv.anime_no_mirror
      @timing_targets = @battler.sv.timing_targets
      @plus_z = @battler.sv.anime_plus_z
      @battler.sv.reset_anime_data
      @ani_mirror = mirror
      set_animation_rate
      @ani_duration = @animation.frame_max * @ani_rate + 1
      load_animation_bitmap
      make_animation_sprites
      set_animation_origin
    end
  end
  #--------------------------------------------------------------------------
  # ● 次のアニメを開始
  #--------------------------------------------------------------------------
  def next_animation(animation, mirror)
    @next_anime = [] if @next_anime == nil
    @next_anime.push(Sprite_Base.new(viewport))
    @next_anime[@next_anime.size - 1].set(battler, @battler.sv.anime_horming, @battler.sv.anime_camera_zoom, @battler.sv.anime_no_mirror)
    @next_anime[@next_anime.size - 1].set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y)
    @next_anime[@next_anime.size - 1].start_animation(animation, mirror)
  end
  #--------------------------------------------------------------------------
  # ● 影グラフィック作成
  #--------------------------------------------------------------------------
  def create_shadow
    reset_shadow
    return if @battler.sv.shadow == false
    @shadow = Sprite.new(viewport) if @shadow == nil
    @shadow.bitmap = Cache.character(@battler.sv.shadow)
    @shadow.ox = @shadow.bitmap.width / 2
    @shadow.oy = @shadow.bitmap.height / 2
  end
  #--------------------------------------------------------------------------
  # ● 影グラフィック初期化
  #--------------------------------------------------------------------------
  def reset_shadow
    return if @shadow == nil
    @shadow.dispose
    @shadow = nil
  end  
  #--------------------------------------------------------------------------
  # ● 転送元ビットマップの更新 ★再定義
  #--------------------------------------------------------------------------
  def update_bitmap
    update_bitmap_enemy if [email protected]?
    update_bitmap_actor if @battler.actor?
    update_src_rect if @battler != nil
    update_color if @battler != nil
  end
  #--------------------------------------------------------------------------
  # ● 転送元ビットマップ:エネミー
  #--------------------------------------------------------------------------
  def update_bitmap_enemy
    if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
      @battler_name = @battler.battler_name
      @battler_hue = @battler.battler_hue
      @battler_graphic_file_index = @battler.sv.graphic_file_index
      @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
      self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue)
      @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
      create_shadow
      init_visibility
      @battler_id = @battler.id
    end
  end  
  #--------------------------------------------------------------------------
  # ● 転送元ビットマップ:アクター
  #--------------------------------------------------------------------------
  def update_bitmap_actor
    if @battler.character_name != @battler_name or @battler.character_index != @battler_index
      @battler_name = @battler.character_name
      @battler_index = @battler.character_index
      @battler_graphic_file_index = @battler.sv.graphic_file_index
      @graphic_mirror_flag = @battler.sv.graphic_mirror_flag
      self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index)
      @battler.sv.setup(self.bitmap.width, self.bitmap.height, @battler_id != @battler.id)
      create_shadow
      init_visibility
      @battler_id = @battler.id
    end
  end
  #--------------------------------------------------------------------------
  # ● 可視状態の初期化 ★再定義
  #--------------------------------------------------------------------------
  def init_visibility
    @battler_visible = @battler.alive?
    @battler_visible = true if @battler.sv.state(1) != "敵コラプス"
    @battler_visible = false if @battler.hidden?
    @battler.sv.opacity = 0 unless @battler_visible
    self.opacity = 0 unless @battler_visible
    self.opacity = 255 if @battler_visible
    @battler.sv.weapon_visible = @battler_visible
  end
  #--------------------------------------------------------------------------
  # ● 転送元矩形の更新
  #--------------------------------------------------------------------------
  def update_src_rect
    return if @battler.sv.collapse
    if @battler_graphic_file_index != @battler.sv.graphic_file_index
      @battler_graphic_file_index = @battler.sv.graphic_file_index
      self.bitmap = Cache.character(@battler_name + @battler_graphic_file_index) if @battler.actor?
      self.bitmap = Cache.battler(@battler_name + @battler_graphic_file_index, @battler_hue) if [email protected]?
      @battler.sv.set_graphics(self.bitmap.width, self.bitmap.height)
    end
    anime_off if @battler.sv.anime_off
    self.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
    self.opacity = @battler.sv.opacity if @battler_visible
    set_process_timing(@battler.sv.timing) if @battler && @battler.sv.timing != []
  end
  #--------------------------------------------------------------------------
  # ● 位置の更新 ★再定義
  #--------------------------------------------------------------------------
  def update_position
    @real_x = @battler.sv.x / 100
    @real_y = (@battler.sv.y - @battler.sv.h - @battler.sv.j - @battler.sv.c - @battler.sv.oy_adjust)/ 100
    self.x = @real_x - $sv_camera.x
    self.y = @real_y - $sv_camera.y
    self.z = @battler.sv.z - @battler.sv.c / 100
    if @battler.sv.h <= 0
      self.x += $sv_camera.sx / 100
      self.y += $sv_camera.sy / 100
    end  
    self.x *= $sv_camera.zoom
    self.y *= $sv_camera.zoom
  end
  #--------------------------------------------------------------------------
  # ● 原点の更新 ★再定義
  #--------------------------------------------------------------------------
  def update_origin
    return if !bitmap or @battler.sv.collapse
    self.ox = @battler.sv.ox
    self.oy = @battler.sv.oy
    self.angle = @battler.sv.angle
    self.zoom_x = @battler.sv.zoom_x * $sv_camera.zoom
    self.zoom_y = @battler.sv.zoom_y * $sv_camera.zoom
    self.mirror = @battler.sv.mirror if !@graphic_mirror_flag
    self.mirror = [email protected] if @graphic_mirror_flag
  end
  #--------------------------------------------------------------------------
  # ● 影グラフィックの更新
  #--------------------------------------------------------------------------
  def update_shadow
    @shadow.visible = @battler.sv.shadow_visible
    @shadow.opacity = @battler.sv.opacity if @battler.sv.opacity_data[3]
    @shadow.opacity = self.opacity if [email protected]_data[3]
    @shadow.x = @real_x - $sv_camera.x
    @shadow.y = (@battler.sv.y - @battler.sv.c)/ 100 - $sv_camera.y
    @shadow.z = @battler.sv.z - 10
    @shadow.zoom_x = $sv_camera.zoom
    @shadow.zoom_y = $sv_camera.zoom
    @shadow.x += $sv_camera.sx / 100
    @shadow.y += $sv_camera.sy / 100
    @shadow.x *= $sv_camera.zoom
    @shadow.y *= $sv_camera.zoom
    @shadow.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  end
  #--------------------------------------------------------------------------
  # ● ふきだしの更新
  #--------------------------------------------------------------------------
  def update_balloon
    if @battler.sv.balloon_data == [] && @balloon
      @balloon_data = []
      @balloon.dispose
      return @balloon = nil
    elsif @battler.sv.balloon_data != [] && @battler.sv.balloon_data != @balloon_data
      @balloon_data = @battler.sv.balloon_data
      @balloon = Sprite.new(self.viewport)
      @balloon.bitmap = Cache.system("Balloon")
      @balloon.zoom_x = @balloon_data[3]
      @balloon.zoom_y = @balloon_data[3]
      @balloon.ox = 32 if @battler.sv.mirror
      @balloon.oy = 16
      @balloon_count = 0
    end
    return if !@balloon
    @balloon.opacity = self.opacity
    @balloon.x = self.x
    @balloon.y = self.y - @battler.sv.ch * $sv_camera.zoom
    @balloon.z = self.z + 20
    @balloon.src_rect.set(32 + @balloon_count / @balloon_data[2] * 32, @balloon_data[1] * 32, 32, 32) if @balloon_count % @balloon_data[2] == 0
    @balloon.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
    @balloon_count += 1
    @balloon_count = 0 if @balloon_count == @balloon_data[2] * 7
  end
  #--------------------------------------------------------------------------
  # ● 色調変更の更新
  #--------------------------------------------------------------------------
  def update_color
    color_set if @battler.sv.color_set != []
    return if @color_data == nil
    @color_data[4] -= 1
    if @color_data[4] == 0 && @color_data[5] != 0
      @color_data[4] = @color_data[5]
      @color_data[5] = 0
      @color_data[6] = [0,0,0,0]
    elsif @color_data[4] == 0
      @remain_color_data = @color_data
      @battler.sv.color = @color_data.dup
      return @color_data = nil
    end  
    for i in 0..3
      @color_data = (@color_data * (@color_data[4] - 1) + @color_data[6]) / @color_data[4]
    end  
    @battler.sv.color = @color_data.dup
    self.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3])
  end
  #--------------------------------------------------------------------------
  # ● 残像の更新
  #--------------------------------------------------------------------------
  def update_mirage
    if @battler.sv.mirage == [] && @mirages
      @mirage_data = []
      for mirage in @mirages do mirage.dispose end
      return @mirages = nil
    elsif @battler.sv.mirage != [] && @battler.sv.mirage != @mirage_data
      @mirage_data = @battler.sv.mirage
      @mirages = []
      for i in 0...@mirage_data[1] do @mirages = Sprite.new(self.viewport) end
      @mirage_count = 0
    end
    return if !@mirages
    @mirage_count += 1
    @mirage_count = 0 if @mirage_count == @mirage_data[2] * @mirages.size
    for i in [email protected]
      mirage_body(@mirages, @mirage_data[4]) if @mirage_count == 1 + i * @mirage_data[2]
    end
  end
  #--------------------------------------------------------------------------
  # ● 残像本体
  #--------------------------------------------------------------------------
  def mirage_body(body, opacity)
    body.bitmap = self.bitmap.dup
    body.x = self.x
    body.y = self.y
    body.ox = self.ox
    body.oy = self.oy
    body.z = self.z - 20
    body.mirror = self.mirror
    body.angle = self.angle
    body.opacity = opacity * self.opacity / 255
    body.zoom_x = self.zoom_x
    body.zoom_y = self.zoom_y   
    body.src_rect.set(@battler.sv.sx, @battler.sv.sy, @battler.sv.cw, @battler.sv.ch)
    body.color.set(@color_data[0], @color_data[1], @color_data[2], @color_data[3]) if @color_data != nil
  end   
  #--------------------------------------------------------------------------
  # ● 次のアニメを更新
  #--------------------------------------------------------------------------
  def update_next_anime
    return if !@next_anime
    for anime in @next_anime
      anime.update
      anime.set_position(self.z, self.zoom_x, self.zoom_y, @real_x, @real_y) if @horming
      anime.dispose if !anime.animation?
      @next_anime.delete(anime) if !anime.animation?
    end  
  end
  #--------------------------------------------------------------------------
  # ● フレーム更新
  #--------------------------------------------------------------------------
  alias update_sprite_battler_n03 update
  def update
    @battler.sv.update if @battler
    update_sprite_battler_n03
    update_next_anime
    update_shadow  if @battler && @shadow
    update_mirage  if @battler
    update_balloon if @battler
    update_remove if @battler && @removing && @battler.sv.change_up
  end
  #--------------------------------------------------------------------------
  # ● 戦闘アニメ消去
  #--------------------------------------------------------------------------
  def anime_off
    @battler.sv.anime_off = false
    dispose_animation
    for anime in @next_anime do anime.dispose_animation end if @next_anime
  end
  #--------------------------------------------------------------------------
  # ● バトラー入れ替え
  #--------------------------------------------------------------------------
  def remove
    @battler.sv.start_action(@battler.sv.remove_action)
    $sv_camera.wait = 40
    @battler.sv.add_action("eval('set_change')")
    @removing = true
  end
  #--------------------------------------------------------------------------
  # ● バトラー入れ替えの更新
  #--------------------------------------------------------------------------
  def update_remove
    @battler.sv.change_up = false
    @removing = false
    @battler = nil
  end  
  #--------------------------------------------------------------------------
  # ● バトラー加入
  #--------------------------------------------------------------------------
  def join(join_battler)
    $sv_camera.wait = 30
    @battler = join_battler
    @battler_name = @battler.character_name
    @battler_index = @battler.character_index
    @battler_graphic_file_index = @battler.sv.graphic_file_index
    self.bitmap = Cache.character(@battler_name)
    @battler.sv.setup(self.bitmap.width, self.bitmap.height, true)
    create_shadow
    init_visibility
  end
  #--------------------------------------------------------------------------
  # ● 通常の設定に戻す ★再定義
  #--------------------------------------------------------------------------
  def revert_to_normal
    self.blend_type = 0
    self.opacity = 255
  end
  #--------------------------------------------------------------------------
  # ● 崩壊エフェクトの更新
  #--------------------------------------------------------------------------
  alias update_collapse_sprite_battler_n03 update_collapse
  def update_collapse
    return if @battler.sv.state(1) != "敵コラプス"
    update_collapse_sprite_battler_n03
    @battler.sv.weapon_visible = false
  end
  #--------------------------------------------------------------------------
  # ● ボス崩壊エフェクトの更新 ★再定義
  #--------------------------------------------------------------------------
  def update_boss_collapse
    @effect_duration = @battler.sv.ch if @effect_duration >= @battler.sv.ch
    alpha = @effect_duration * 120 / @battler.sv.ch
    self.ox = @battler.sv.cw / 2 + @effect_duration % 2 * 4 - 2
    self.blend_type = 1
    self.color.set(255, 255, 255, 255 - alpha)
    self.opacity = alpha
    self.src_rect.y -= 1
    Sound.play_boss_collapse2 if @effect_duration % 20 == 19
  end
  #--------------------------------------------------------------------------
  # ● 別スプライトからのタイミング処理
  #--------------------------------------------------------------------------
  def set_process_timing(timing_data)
    for data in timing_data
      set_timing(data[0],data[1])
    end
    @battler.sv.timing = []
  end
  #--------------------------------------------------------------------------
  # ● タイミング処理
  #--------------------------------------------------------------------------
  def set_timing(se_flag, data)
    @ani_rate = 4
    data.se.play if se_flag
    case data.flash_scope
    when 1 ;self.flash(data.flash_color, data.flash_duration * @ani_rate)
    when 2 ;viewport.flash(data.flash_color, data.flash_duration * @ani_rate) if viewport
    when 3 ;self.flash(nil, data.flash_duration * @ani_rate)
    end
  end
  #--------------------------------------------------------------------------
  # ● 色調変更
  #--------------------------------------------------------------------------
  def color_set
    set = @battler.sv.color_set
    @battler.sv.color_set= []
    set[4] = 1 if set[4] == 0
    @remain_color_data = [0,0,0,0] if @remain_color_data == nil
    @color_data = @remain_color_data
    @color_data[4] = set[4]
    @color_data[5] = set[5]
    @color_data[6] = set
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  alias dispose_sprite_battler_n03 dispose
  def dispose
    dispose_sprite_battler_n03
    @shadow.dispose if @shadow != nil
    @balloon.dispose if @balloon != nil
    for mirage in @mirages do mirage.dispose end if @mirages != nil
    for anime in @next_anime do anime.dispose end if @next_anime
  end
end


#==============================================================================
# ■ Spriteset_Battle
#------------------------------------------------------------------------------
#  バトル画面のスプライトをまとめたクラスです。
#==============================================================================
class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● 戦闘背景(床)スプライトの作成 ★再定義
  #--------------------------------------------------------------------------
  def create_battleback1
    @back1_sprite = Sprite_Battle_Back.new(@viewport1, 1, battleback1_name)
    @back1_sprite.set_graphics(battleback1_bitmap) if battleback1_name != nil
    @back1_sprite.z = 0
  end
  #--------------------------------------------------------------------------
  # ● 戦闘背景(壁)スプライトの作成 ★再定義
  #--------------------------------------------------------------------------
  def create_battleback2
    @back2_sprite = Sprite_Battle_Back.new(@viewport1, 2, battleback2_name)
    @back2_sprite.set_graphics(battleback2_bitmap) if battleback2_name != nil
    @back2_sprite.z = 1
  end
  #--------------------------------------------------------------------------
  # ● アクタースプライトの作成 ★再定義
  #--------------------------------------------------------------------------
  def create_actors
    @actor_sprites = []
    for i in 0...$game_party.max_battle_members
      @actor_sprites = Sprite_Battler.new(@viewport1, $game_party.members)
    end
    @effect_sprites = Spriteset_Sideview.new(@viewport1)
  end
  #--------------------------------------------------------------------------
  # ● アクタースプライトの更新 ★再定義
  #--------------------------------------------------------------------------
  def update_actors
    @actor_sprites.each_with_index do |sprite, i|
      sprite_join($game_party.members, sprite) if sprite.battler == nil && sprite.battler != $game_party.members
      sprite.remove if sprite.battler != nil && !sprite.removing && sprite.battler != $game_party.members
      sprite.update
    end
    @effect_sprites.update
    update_program
  end
  #--------------------------------------------------------------------------
  # ● メンバーを加える
  #--------------------------------------------------------------------------
  def sprite_join(member, sprite)
    for sp in @actor_sprites
      sp.update_remove if member == sp.battler && !sp.battler.sv.change_up
    end
    sprite.join(member)
  end
  #--------------------------------------------------------------------------
  # ● バトルプログラムの更新
  #--------------------------------------------------------------------------
  def update_program
    return if $sv_camera.program_scroll == []
    for data in  $sv_camera.program_scroll
      @back1_sprite.start_back_data(data) if data[2] == 1
      @back2_sprite.start_back_data(data) if data[2] == 2
    end
    $sv_camera.program_scroll = []
  end
  #--------------------------------------------------------------------------
  # ● ヒット時の戦闘アニメ実行
  #--------------------------------------------------------------------------
  def set_hit_animation(battler, weapon_index, hit_targets, miss)
    @effect_sprites.set_hit_animation(battler, weapon_index, hit_targets, miss)
  end
  #--------------------------------------------------------------------------
  # ● ダメージPOP
  #--------------------------------------------------------------------------
  def set_damage_pop(target)
    @effect_sprites.set_damage_pop(target)
  end
  #--------------------------------------------------------------------------
  # ● 解放
  #--------------------------------------------------------------------------
  alias dispose_spriteset_battle_n03 dispose
  def dispose
    dispose_spriteset_battle_n03
    @effect_sprites.dispose
  end
  
  
  
end


#==============================================================================
# ■ Window_BattleLog
#------------------------------------------------------------------------------
#  戦闘の進行を実況表示するウィンドウです。
#==============================================================================
class Window_BattleLog < Window_Selectable
  #--------------------------------------------------------------------------
  # ● ウェイト ★再定義
  #--------------------------------------------------------------------------
  def wait
  end
  #--------------------------------------------------------------------------
  # ● ウェイトとクリア ★再定義
  #--------------------------------------------------------------------------
  def wait_and_clear
    $sv_camera.wait = 10
  end
  #--------------------------------------------------------------------------
  # ● 行動結果の表示 ★再定義
  #--------------------------------------------------------------------------
  def display_action_results(target, item)
    if target.result.used
      last_line_number = line_number
      display_critical(target, item)
      display_damage(target, item)
      display_affected_status(target, item)
      display_failure(target, item)
    end
    off if !N03::BATTLE_LOG
  end
  #--------------------------------------------------------------------------
  # ● ウインドウ非表示
  #--------------------------------------------------------------------------
  def off
    @back_sprite.visible = self.visible = false
  end
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
#  イベントコマンドを実行するインタプリタです。
#==============================================================================
class Game_Interpreter
  #--------------------------------------------------------------------------
  # ● スイッチの操作
  #--------------------------------------------------------------------------
  alias command_121_game_interpreter_n03 command_121
  def command_121
    command_121_game_interpreter_n03
    $sv_camera.program_check
  end
end

左右和前后是没问题的45度是我照着改的结果出错了,求大神们解答~~~~(>_<)~~~~
作者: Vortur    时间: 2016-4-18 00:07
本帖最后由 Vortur 于 2016-4-22 19:56 编辑

脚本兼容性的问题在下见过不少,看起来解答率比较低.因此,阁下在制作游戏的时候,是否考虑:
1.尽量减少脚本的混合配搭
2.尽量使用同一作者的脚本
3.平日里积攒一些不会冲突的脚本

对于此贴中的问题,在下估计爱莫能助,即使尝试,也是一件极其没有效率的事情;所以建议阁下参考上述3种途径解决


PS:
脚本可以使用“脚本框”框起来。这样可以使它在一定程度上被折叠,并且方便复制。不过会有一些bug,例如“@”后面通常会被论坛错误理解,导致自动增加一些字段,进而使脚本失效(或者其他未知bug),此类信息可参考论坛使用说明。因此使用一个可以“保存格式”的txt文本编辑软件是十分重要的,推荐notepad++与UltraEdit,或者GeminiRelease。对于脚本的入门,推荐使用这个教程:https://rpg.blue/thread-315743-1-1.html

新手礼包:https://rpg.blue/forum.php?mod=v ... p;extra=#pid2673159




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1