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

Project1

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

[已经解决] VX-横版-敌人死亡..还会出现残影.如何克服?谢谢

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2188 小时
注册时间
2011-6-23
帖子
1044
跳转到指定楼层
1
发表于 2011-6-26 04:24:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lsu666666 于 2011-6-26 04:38 编辑

这是战斗开始画面2之敌人
[img=545,321][/img]


打死一只之后剩下一只敌人

[img=545,321][/img]


过几秒钟..画面还会出现已经死亡的敌人残影
[img=545,321][/img]

大约不到1秒钟又消失了
[img=545,321][/img]
请教高手应该如何克服这问题......谢谢

以下是我安装的横版战斗脚本代码


Sideview Ver3.3

  1. #==============================================================================
  2. # ■ module N01  for Sideview Ver3.3
  3. #------------------------------------------------------------------------------
  4. #  
  5. #原版的网址 http://rpgex.sakura.ne.jp/home/sozai/sozai_top.html#VXブー
  6. #
  7. #               横版战斗系统设定项目。
  8. #==============================================================================
  9. module N01
  10. #--------------------------------------------------------------------------
  11. # ● 设定
  12. #--------------------------------------------------------------------------
  13.   # 主人公初期位置 第一人    第二人    第三人    第四人
  14.   #                  X轴 Y轴   X轴 Y轴   X轴 Y轴   X轴 Y轴
  15.   ACTOR_POSITION = [[415,120],[435,150],[455,180],[475,210]]
  16.   # 战斗成员最大数(可改动人数)  当人数变动时,上方的坐标也要相应变动
  17.   MAX_MEMBER = 4
  18.   
  19.   # 战斗中行动结束后、到下个角色行动开始之间的等待时间。
  20.   ACTION_WAIT = 10
  21.   # 敌方溃败(被击破时的退场)前的等待时间
  22.   COLLAPSE_WAIT = 12
  23.   # 胜利前的等待时间
  24.   WIN_WAIT = 70
  25.   
  26.   # 战斗背景在画面中位置的设定 FLOOR = [ X轴, Y轴, 透明度]
  27.   FLOOR = [  0, 96,128]
  28.   # 未装备武器地情况下攻击时显示的动画ID
  29.   NO_WEAPON = 82
  30.   # 二刀流设定  当双手装备武器时一次攻击的伤害数值。数值为%
  31.   #                 通常攻击  技能、物品
  32.   TWO_SWORDS_STYLE = [   50,    100]
  33.   # 状态扩张・自动复活的动画ID
  34.   RESURRECTION = 41
  35.   
  36.   # 伤害数字图片的文件名(横向等距的从零到九依次排列的图片)
  37.   DAMAGE_GRAPHICS = "Number+"
  38.   # 回复数字图片的文件名
  39.   RECOVER_GRAPHICS = "Number-"
  40.   # 显示数值时的文字间隔
  41.   NUM_INTERBAL = -3
  42.   # 显示数值时的显示时间
  43.   NUM_DURATION = 68
  44.   # 伤害窗口关闭、只显示文字时的情况是true
  45.   NON_DAMAGE_WINDOW = false
  46.   # 伤害窗口中所显示的词语。如果不想显示的情况请""这样消除掉引号中内容即可。
  47.   POP_DAMAGE0 = ""  # 伤害数值为0时(数字0将不被显示)
  48.   POP_MISS    = "MISS!"  # 攻击因攻击者原因没有击中时  
  49.   POP_EVA     = "MISS!"  # 攻击因被被攻击者躲开时 
  50.   POP_CRI     = "会心一击!"  # 会心一击
  51.   POP_MP_DAM  = "伤害MP"  # 受到MP的伤害时
  52.   POP_MP_REC  = "回复MP"  # 回复MP时
  53.   
  54.   # 阴影效果 使用的话是true不使用时是false
  55.   SHADOW = true  
  56.   # 识别步行效果 在战斗中人物使用步行效果的话是true不使用时是false
  57.   # false的情况下、一定要使用自己的行走图,不要使用脚本范例中的。
  58.   # 还有,No1之后的图片大小要统一(不是全人物统一,单一人物的统一即可)
  59.   WALK_ANIME = true
  60.   # 角色战斗图中用图的动画动作格数(横分割数)
  61.   ANIME_PATTERN = 3
  62.   # 角色战斗图中用图的动画种类数(纵分割数)
  63.   ANIME_KIND = 4
  64.   
  65.   # 背后攻击(偷袭时的画面反转) 使用的话是true不使用的是false
  66.   BACK_ATTACK = true
  67.   # 背后攻击时战斗背景不反转的情况是false
  68.   BACK_ATTACK_NON_BACK_MIRROR = true
  69.   # 将背后攻击设置为无效时  偷袭效果依然发挥。
  70.   # 全部都是装备上所需装备时、发挥技能时,才会有效果。
  71.   # 防止背后攻击的武器ID 举例) = [1] 多数时的举例) = [1,2]
  72.   NON_BACK_ATTACK_WEAPONS = []
  73.   # 防止背后攻击的盾ID
  74.   NON_BACK_ATTACK_ARMOR1 = []
  75.   # 防止背后攻击的头部防具ID
  76.   NON_BACK_ATTACK_ARMOR2 = []
  77.   # 防止背后攻击的身体防具ID
  78.   NON_BACK_ATTACK_ARMOR3 = []
  79.   # 防止背后攻击的装饰品ID
  80.   NON_BACK_ATTACK_ARMOR4 = []
  81.   # 防止背后攻击的技能ID
  82.   NON_BACK_ATTACK_SKILLS = []
  83.   # 一定会发生背后攻击的开关No(会优先于防止)
  84.   BACK_ATTACK_SWITCH = []

  85. #==============================================================================
  86. # ■ 单独战斗动作
  87. #------------------------------------------------------------------------------
  88. #  使用的是连贯动作,这里的单独是没有意义的。
  89. #==============================================================================
  90. # 这里的单独动作名,请不要重复。
  91. # 与连贯动作名重复没有问题。
  92.   ANIME = {
  93. #--------------------------------------------------------------------------
  94. # ● 角色动画的设定
  95. #--------------------------------------------------------------------------
  96.   # 文件No…使用战斗动作图的号码。
  97.   #             0的情况是使用行走图对应。
  98.   #             1以后的是像"人物行走图文件名+_1"这样,参照文件名后的附加数字
  99.   #             来判别的。例)$拉尔夫_1 的文件名No是1
  100.   #             战斗动作图全部都是从人物行走图文件夹内读取。
  101.   #
  102.   # 种类…战斗动作图的分隔纵列。从上开始0到3依次。
  103.   # 速度…动画的更新速度。数值越低更新速度越快。
  104.   # 循环… [0=往复循环] [1=循环一次] [2=不循环]
  105.   # 等待…不循环(2)的情况下、到动画显示结束的等待时间。
  106.   # 固定…如果动画不作固定的情况、指定分割号码(横向位置)。不固定的情况是-1。反向再生是-2。
  107.   # Z轴…在面前显示的话是正数。相较通常情况靠前的显示。
  108.   # 影…表示阴影效果的话是true、不表示为false
  109.   # 武器…武器表示的情况填入武器动作名。不表示的情况为""。
  110.   
  111.   # 目标动画名      文件No 种类 速度 循环 等待 固定  Z轴  影  武器
  112.   "待机"            => [ 0,  1,  15,   0,   0,  -1,   0, true,"" ],
  113.   "待机(固定)"      => [ 0,  1,  10,   2,   0,   1,   0, true,"" ],
  114.   "向右(固定)"      => [ 0,  2,  10,   1,   2,   1,   0, true,"" ],
  115.   "伤害"            => [ 0,  3,   4,   2,   0,  -1,   0, true,"" ],
  116.   "无法战斗"        => [ 0,  3,  10,   1,   8,   0,   0, true,"" ],
  117.   "前进"            => [ 0,  1,   1,   1,   0,  -1,   0, true,"" ],
  118.   "后退"            => [ 0,  2,   2,   1,   0,  -1,   0, true,"" ],
  119.   "头上显示"        => [ 0,  1,   2,   1,   0,  -1, 600, true,"" ],
  120.   "武器挥动攻击"    => [ 0,  1,   1,   2,   0,  -1,   2, true,"纵挥动"],
  121.   "武器挥动攻击L"   => [ 0,  1,   1,   2,   0,  -1,   2, true,"纵挥动L"],
  122.   "武器挥动攻击缓"  => [ 0,  1,   6,   2,   0,  -1,   2, true,"纵挥动"],
  123.   "武器下旋转"      => [ 0,  1,   2,   2,   0,  -1,   2, true,"下旋转"],
  124.   "武器上旋转"      => [ 0,  1,   2,   2,   0,  -1,   2, true,"上旋转"],
  125.   "举起武器"        => [ 0,  1,   2,   2,  28,  -1,   2, true,"举起"],
  126.   
  127. #--------------------------------------------------------------------------
  128. # ● 武器动作 让武器图像动起来的方法
  129. #--------------------------------------------------------------------------
  130.   # 这里使用的武器动作名、必须是上面角色动画中设置的武器动作名。
  131.   
  132.   # X轴…横向移动距离。
  133.   # Y轴…纵向移动距离。
  134.   # Z轴…如果让此动作显示时武器在人物前方写作true。
  135.   # 初始角度…武器在动作前的最初角度。半圆的0~360度。复数情况为反半圆。
  136.   # 完毕角度…动作完毕时的角度。
  137.   # 原点…武器旋转时的原点。[0…中心] [1…左上] [2…右上] [3…左下] [4…右下]
  138.   # 反转…当为true时,动作前武器的图像将会显示为反转的。
  139.   # X扩…X轴放大率、武器横向放大率。1是同等、2是2倍、0.5是1/2。
  140.   # Y扩…Y轴放大率、武器纵向放大率。1是同等、2是2倍、0.5是1/2。
  141.   # 调X…略微调整X轴。这里的数字是调整武器初期的X坐标。
  142.   # 调Y…略微调整Y轴。这里的数字是调整武器初期的Y坐标。
  143.   # 二刀…限定于二刀流为true、将以二刀流来显示左边武器动作的武器画像。
  144.   #       如果不是二刀流的情况会自动跳过角色动画。
  145.   
  146.   # 武器动作名   X轴  Y轴  Z轴  初始角度 完毕角度 原点 反转  X扩  Y扩  调X  调Y 二刀
  147.   "纵挥动"     => [   6,   8,false,-135,  45,  4,false,   1,  1,  -4,  -6,false],
  148.   "纵挥动L"    => [   6,   8,false,-135,  45,  4,false,   1,  1,  -4,  -6, true],
  149.   "下旋转"     => [   6,   8,false, 270,  45,  4,false,   1,  1,  -4,  -6,false],
  150.   "上旋转"     => [   6,   8,false,  45,-100,  4,false,   1,  1,  -4,  -6,false],
  151.   "举起"       => [   6,  -4,false,  90, -45,  4,false,   1,  1,  -4,  -6,false],

  152. #--------------------------------------------------------------------------
  153. # ● 角色移动  敌方的X轴移动是以相反的复数计算。
  154. #--------------------------------------------------------------------------
  155.   # 目标…坐标移动的参照 [0=自身现在的位置] [1=目标] [2=窗口] [3=初期位置]
  156.   # X轴…从对像所看X坐标。绝对值就算是最低时也会比时间高
  157.   # Y轴…从对像所看Y坐标。绝对值就算是最低时也会比时间高
  158.   # 时间…移动时间。数值越大越缓慢。这里是用距离除以时间所得每格行动距离。
  159.   # 加速…正数是加速、负数是减速。这里是每格行动的加速或减速。
  160.   # 跳跃…跳跃轨道。正数是向下跳、负数是向上跳。0是不跳。
  161.   # 动画…这里的移动所使用的角色动画名。

  162.   #                        目标  X轴  Y轴 时间 加速 跳跃 动画
  163.   "不能移动"          => [  0,   0,   0,  1,   0,   0,  "待机(固定)"],
  164.   "到战斗开始的位置"  => [  0,  54,   0,  1,   0,   0,  "前进"],
  165.   "一步向前移动"          => [  3, -32,   0, 18,  -1,   0,  "前进"],
  166.   "一步向后移动"          => [  0,  32,   0,  8,  -1,   0,  "前进"],
  167.   "四人攻击移动1"       => [  2, 444,  96, 18,  -1,   0,  "前进"],
  168.   "四人攻击移动2"       => [  2, 444, 212, 18,  -1,   0,  "前进"],
  169.   "四人攻击移动3"       => [  2, 384,  64, 18,  -1,   0,  "前进"],
  170.   "四人攻击移动4"       => [  2, 384, 244, 18,  -1,   0,  "前进"],
  171.   "被伤害"          => [  0,  32,   0,  4,  -1,   0,  "伤害"],
  172.   "推动"            => [  0,  12,   0,  1,   1,   0,  "伤害"],
  173.   "我方逃走"            => [  0, 300,   0,300,   1,   0,  "后退"],
  174.   "逃走失败"            => [  0,  48,   0, 16,   1,   0,  "后退"],
  175.   "胜利的跳跃"      => [  0,   0,   0, 20,   0,  -5,  "前进"],
  176.   "目标移动"            => [  1,   0,   0, 18,  -1,   0,  "前进"],
  177.   "目标高速移动"        => [  1,   0, -12,  8,   0,  -2,  "前进"],
  178.   "目标向前移动"          => [  1,  24,   0, 12,  -1,   0,  "前进"],
  179.   "目标向前高速移动"      => [  1,  24,   0,  1,   0,   0,  "前进"],
  180.   "目标右前移动"        => [  1,  96,  32, 16,  -1,   0,  "前进"],
  181.   "目标左前移动"        => [  1,  96, -32, 16,  -1,   0,  "前进"],
  182.   "一步向前跳跃"      => [  0, -32,   0,  8,  -1,  -4,  "前进"],
  183.   "一步向后跳跃"      => [  0,  32,   0,  8,  -1,  -4,  "后退"],
  184.   "跳跃到目标"      => [  1,  12, -12, 12,  -1,  -6,  "前进"],
  185.   "投掷我方"            => [  0, -24,   0, 16,   0,  -2,  "前进"],
  186.   "强力踩踏"            => [  1,  12, -32, 12,  -1,  -6,  "头上显示"],
  187.   "一步向前跳跃敲击"  => [  0, -32,   0, 12,  -1,  -2,  "武器挥动攻击"],
  188.   "向前跳跃敲击"      => [  1,  12,   0, 12,  -1,  -5,  "武器挥动攻击缓"],
  189.   "对后方给予提高"      => [  1,  12,   0, 16,   0,  -3,  "武器挥动攻击"],
  190.   "原地跳跃敲击"  => [  1,   0,   0, 16,   0,  -5,  "武器挥动攻击"],
  191.   "拔出"            => [  1, -96,   0, 16,   2,   0,  "武器挥动攻击"],
  192.   "右拔出"          => [  1, -96,  32, 16,   2,   0,  "武器挥动攻击"],
  193.   "左拔出"          => [  1, -96, -32, 16,   2,   0,  "武器挥动攻击"],
  194.   "右拔出2"         => [  1,-128,  48, 16,   2,   0,  "武器挥动攻击"],
  195.   "左拔出2"         => [  1,-128, -48, 16,   2,   0,  "武器挥动攻击"],
  196.   
  197. #--------------------------------------------------------------------------
  198. # ● 角色漂浮  角色与影子脱离
  199. #--------------------------------------------------------------------------
  200.   # 判别…用来判别的、请全部统一填入"float"。
  201.   # 始高…开始漂浮的高度。负数情况是在影子之上、正数是在影子下方。
  202.   # 终高…漂浮完毕的高度。因为动作系需要使用这个数值,请不要变动。
  203.   # 时间…漂浮过程所用时间。
  204.   # 动画…漂浮时候所用的角色动画名。
  205.   
  206.   #                      判别  始高 终高 时间 动画
  207.   "低空漂浮中"      => ["float", -22, -20,  2, "待机(固定)"],
  208.   "低空漂浮中2"     => ["float", -20, -18,  2, "待机(固定)"],
  209.   "低空漂浮中3"     => ["float", -18, -20,  2, "待机(固定)"],
  210.   "低空漂浮中4"     => ["float", -20, -22,  2, "待机(固定)"],
  211.   "跳跃停止"    => ["float",   0, -80,  4, "待机(固定)"],
  212.   "跳跃着地"    => ["float", -80,   0,  4, "待机(固定)"],
  213.   "抬起"  => ["float",   0, -30,  4, "待机(固定)"],
  214.   
  215. #--------------------------------------------------------------------------
  216. # ● 坐标初始化 返回到原始位置的移动设置
  217. #--------------------------------------------------------------------------
  218.   # 判别…用来判别的、请全部统一填入"reset"。
  219.   # 时间…返回过程所用时间。即使是同样的时间如果距离远的情况下移动速度也会发生变化。
  220.   # 加速…正数为加速、负数为减速。这里是每格行动的加速或减速。
  221.   # 跳跃…跳跃轨道。正数为向下跳、负数为向上跳。0是不跳。
  222.   # 动画…这里移动时使用的角色动画名。

  223.   #                      判别  时间 加速 跳跃 动画
  224.   "坐标初始化"    => ["reset", 16,  0,   0,  "前进"],
  225.   "后退初始化"    => ["reset", 16,  0,   0,  "后退"],
  226.   
  227. #--------------------------------------------------------------------------
  228. # ● 强制动作 被动形成的目标动作
  229. #--------------------------------------------------------------------------
  230.   # 识别…被动形成的动作是单独还是连贯。"单独"时直接填入单独即可。
  231.   #       "连贯"时请填入连贯。
  232.   #
  233.   # 对像…获取是指动作的对象。0是目标、除他以外的处于那个状态No
  234.   #       的全部角色视为对象。
  235.   #       数值前有负号的就会习得此数字绝对值的数字对应的技能ID上的技能
  236.   #       除自身以外的主人公作为对像(主人公限定)
  237.   #       指定引取的情况(成员位置)、引取值填入1000。
  238.   #       指定的引取是自身不在的情况(无法战斗或是逃走时)
  239.   #       从零号开始顺次参照、所有角色界不在为时,行动中段。
  240.   #
  241.   # 恢复…动作后返回原始坐标的目标动作名。
  242.   #       不返回的情况以这样""不填任何东西即可。
  243.   # 动作名…强制动作的动作名。识别是单独的话、使用单独动作名。
  244.   #               连贯的话就用连贯动作名(组合动作)。
  245.   
  246.   #                       识别    对像   恢复              动作名
  247.   "轻微吹动"     => ["单独",    0, "坐标初始化",  "推动"],
  248.   "右旋转"           => ["单独",    0, "坐标初始化",  "右旋转一周"],
  249.   "纵向压扁"   => ["单独",    0, "坐标初始化",  "纵向缩小"],
  250.   "中弹1"            => ["单独",    0, "坐标初始化",  "从对像到自身1"],
  251.   "举起我方"     => ["单独",    0,             "",  "抬起"],
  252.   "吴莉嘉连同攻击"   => ["连贯",   18, "坐标初始化",  "吴莉嘉合体攻击1"],
  253.   "四人攻击1"      => ["连贯", -101, "坐标初始化",  "四人合体攻击1"],
  254.   "四人攻击2"      => ["连贯", -102, "坐标初始化",  "四人合体攻击2"],
  255.   "四人攻击3"      => ["连贯", -103, "坐标初始化",  "四人合体攻击3"],
  256.   "将我方投掷飞出"   => ["连贯", 1000, "坐标初始化",  "可以投掷"],

  257. #--------------------------------------------------------------------------
  258. # ● 目标变更  改变现在角色作为目标对象的
  259. #--------------------------------------------------------------------------
  260.   # ※只是改变战斗动作上的目标、战斗的目标不改变。
  261.   #   只能是实行战斗中的角色执行。
  262.   # 判别…因为使用于判别、请全部统一填入"target"。
  263.   #
  264.   # 对像…被变更目标的对象。0是目标、改变这个目标以外处于那个状态No中
  265.   #       角色的全部对象。
  266.   #       数值前有负号的就会习得此数字绝对值的数字对应的技能ID上的技能(我方队员为对像)。
  267.   #       指定引取的情况(成员位置)、引取值填入1000。
  268.   #       指定的引取是自身不在的情况(无法战斗或是逃走时)
  269.   #       从零号开始顺次参照。
  270.   #
  271.   # 变更处…变更处内容   0=自身  1=自身的目标 
  272.   #                      2=成为自身的目标后、再将自己的目标变为变更对像
  273.   #                      3=将已变更为自身的目标返还(必须是在实行过2的情况下下)
  274.   
  275.   # 目标变更名             判别   对像  变更先
  276.   "以自身为目标"          => ["target",    0,  0],
  277.   "二人攻击目标统一"      => ["target",   18,  1],
  278.   "四人攻击目标统一"      => ["target",   19,  1],
  279.   "选择投掷角色"        => ["target", 1000,  2],
  280.   "投掷目标组合"    => ["target", 1000,  3],
  281.   
  282. #--------------------------------------------------------------------------
  283. # ● 技能连发 中断动作后、其他技能被连发出来
  284. #--------------------------------------------------------------------------
  285.   # 判别…用于判别、请全部统一填入"der"。
  286.   # 确率…连发的成功率、0~100之间。如果没有被连发、剩下的动作继续执行。
  287.   # 习得…如果连发的技能没有被习得也可以实行的话是true
  288.   # 技能ID…连发的技能的ID
  289.   
  290.   # 连发名               判别  确率  习得 技能ID
  291.   "回复连发"     => ["der", 100, true,  91],
  292.   "适当连发"       => ["der", 100, true,  92],

  293. #--------------------------------------------------------------------------
  294. # ● 动作条件  设定条件、满足条件以后将停止所有行动
  295. #--------------------------------------------------------------------------
  296.   # 判别…用于判别、请全部统一填入"nece"。
  297.   # 对像…用于条件参照的对象。[0=自分] [1=目标] [2=敌全体] [3=我方全体]
  298.   # 内容… [0=状态] [1=参数] [2=开关] [3=变量] [4=习得技能]
  299.   #
  300.   # 条件…填入符合上边内容确定的项目的数值。
  301.   # [0]状态…状态ID
  302.   # [1]参数…[0=现HP] [1=现MP] [2=攻击力] [3=防御力] [4=精神力] [5=敏捷性]
  303.   # [2]开关…游戏中的开关No
  304.   # [3]变量…游戏中的变量No
  305.   # [4]习得技能…习得特定技能的条件、将那个技能的ID编号填入。
  306.   #
  307.   # 补足…补足上边的条件。
  308.   # [0]状态…成为条件的被施加状态的人数。
  309.   #              符号为正号时是需要此号码对应条件,负号时为不需要。
  310.   # [1]参数…参数的数值。对像为复数时,将取平均值。
  311.   #                符号为正的数值以上、以及负的数值以下作为条件。
  312.   # [2]开关…开关ON为条件是 true、OFF为条件是 false
  313.   # [3]变量…符号为正的数值以上、以及负的数值以下作为条件。
  314.   # [4]习得技能…作为条件的技能所习得的人数。
  315.   
  316.   # 连发名                 判别  对像  内容 条件 补足
  317.   "二人攻击条件确认"  => ["nece",   3,   0,  18,    1],
  318.   "四人攻击条件确认"  => ["nece",   3,   0,  19,    3],
  319.   "漂浮状态确认"  => ["nece",   0,   0,  17,    1],
  320.   "是否已变身成猫"=> ["nece",   0,   0,  20,    1],
  321.   "死亡确认"          => ["nece",   1,   0,   1,    1],
  322.   
  323. #--------------------------------------------------------------------------
  324. # ● 角色旋转 画像旋转。与反转不同、武器动作不能被反映
  325. #--------------------------------------------------------------------------
  326.   # 判别…用于判别、请全部统一填入"angle"。
  327.   # 时间…旋转过程所需时间。
  328.   # 初始角度…旋转开始时的角度。指定于0~360度之间。正数为正半圆、负数为反半圆。
  329.   # 完毕角度…旋转完毕时的角度。指定于0~360度之间。跟上边所记相同,但敌人的设定是与其相反的。
  330.   # 回复…true是在完毕的同时恢复到通常角度。false是保持最后着动作。

  331.   #                     判别  时间 初始角度 完毕角度 回复
  332.   "倒下"     => ["angle",  1, -90, -90,false],
  333.   "右旋转一周"    => ["angle", 48,   0,-360,false],
  334.   "左高速旋转"     => ["angle",  6,   0, 360,false],

  335. #--------------------------------------------------------------------------
  336. # ● 角色放大缩小 武器动作不能被反映
  337. #--------------------------------------------------------------------------
  338.   # 判别…用于判别、请全部统一填入"zoom"。
  339.   # 时间…放大缩小过程所需时间。
  340.   # X扩…横向的放大率。1.0是等倍、0.5是原有的一半。
  341.   # Y扩…纵向的放大率。1.0是等倍、0.5是原有的一半。
  342.   # 回复…true是在完毕的同时还原成等倍。false是保持完毕时的样子。
  343.   #       放大缩小时会一时变更当前对象的原点、在恢复的时候复原。

  344.   #                   判别  时间  X扩  Y扩  回复
  345.   "横向缩小"         => ["zoom", 16, 0.5, 1.0, true],
  346.   "纵向缩小"         => ["zoom", 16, 1.0, 0.5, true],
  347.   
  348. #--------------------------------------------------------------------------
  349. # ● 战斗动画 显示数据库的战斗动画
  350. #--------------------------------------------------------------------------
  351.   # 判别…用于判别、请全部统一填入"anime"。
  352.   # ID…动画ID。-1时将显示武器或者技能上设定的动画的伤害。
  353.   #     -2时技能也变成武器上所带的动画。
  354.   # 对像… [0=自身] [1=目标]
  355.   # 反转…true时动画地画像将被反转。
  356.   # 等待…一直在动画显示完毕都存在的话是true。
  357.   # 二刀用…true时将实行二刀流的动画。动画ID为-1时通常攻击的情况
  358.   # 设定成显示为左手武器的动画。技能是技能动画的在实行。
  359.   
  360.   #                       判别      ID 对像  反转  等待  二刀用
  361.   "对像动画"        => ["anime",  -1,  1, false,false, false],
  362.   "对像动画等待"=> ["anime",  -1,  1, false, true, false],
  363.   "对像动画武器"    => ["anime",  -2,  1, false,false, false],
  364.   "对像动画L"       => ["anime",  -1,  1, false,false,  true],
  365.   "打击动画"        => ["anime",   1,  1, false,false, false],
  366.   "斩击/必杀技1"      => ["anime",  11,  1, false,false, false],
  367.    
  368. #--------------------------------------------------------------------------
  369. # ● 动画飞出 让战斗动画飞出去。飞行道具、远距离攻击用
  370. #--------------------------------------------------------------------------
  371.   # ID…数据库里设定的动画ID。0是不显示动画。
  372.   # 对像…飞出的对象 [0=目标] [1=敌全体的中心] [2=我方全体的中心] [4=自身]
  373.   # 类型…[0=碰撞时消失] [1=直线贯穿]
  374.   # 时间…动画飞出去时候的移动时间。数值越大速度越缓慢。
  375.   # 轨道…动画飞出去时候的轨道。填入数值的话是走抛物线。正数为向下的抛物线、负数为向上。
  376.   # 调X…略微调整X轴。改变飞出时的初期X坐标。敌方的情况是自动的反向运算。
  377.   # 调Y…略微调整Y轴。改变飞出时的初期Y坐标。
  378.   # 始…动画飞出时的开始位置。[0=自身] [1=对像] [2=不能移动]
  379.   # Z坐标…动画或者武器在角色面前显示的话是true
  380.   # 武器…填入下面贴附的武器、技能动作名。如果不是用为""
  381.   
  382.   #                     判别   ID 对像 类型 时间  轨道 调X 调Y 始 Z坐标 武器
  383.   "魔法发动动画"  => ["m_a", 44,   4,  0,  52,   0,  0,  0, 2,false,""],
  384.   "从对像到自身1" => ["m_a",  4,   0,  0,  24,   0,  0,  0, 1,false,""],
  385.   "开始武器投掷"    => ["m_a",  0,   0,  0,  18, -24,  0,  0, 0,false,"旋转投掷"],
  386.   "放弃武器投掷"    => ["m_a",  0,   0,  0,  18,  24,  0,  0, 1,false,"旋转投掷"],
  387.   "全体动画单体化"=> ["m_a", 80,   1,  0,  64,   0,  0,  0, 2, true,""],
  388.   
  389. #--------------------------------------------------------------------------
  390. # ● 动画飞出时贴附的武器图像动画 专用于上面的武器飞出
  391. #--------------------------------------------------------------------------
  392.   # 让贴附的武器图片动。这个画像可以和和武器动作的画像区分使用。
  393.   # 那样的情况贴附的图像请去武器设定。
  394.   # 初始角度…动作前的最初角度。前半圆0~360度。
  395.   # 完毕角度…动作后的角度。前半圆0~360度。
  396.   # 时间…旋转过程需要的时间。越小越快。动作到消失前持续保持旋转。
  397.   
  398.   # 武器动作名    初始角度 完毕角度 时间
  399.   "旋转投掷"     => [   0, 360,  8],
  400.   
  401. #--------------------------------------------------------------------------
  402. # ● 动画飞出时贴附的技能画像动画 专用于上边的动画飞出
  403. #--------------------------------------------------------------------------
  404.   # 让贴附的技能图片动。能够贴附的图像在技能设定上。
  405.   # 初始角度…动作前的最初角度。前半圆0~360度。
  406.   # 完毕角度…动作后的角度。前半圆0~360度。
  407.   # 时间…旋转过程所需要的时间。越小越快。动作到消失前持续保持旋转。
  408.   # 判别…用于判别、请全部统一填入"skill"。
  409.   
  410.   # 武器动作名    初始角度 完毕角度 时间 判别
  411.   "石投掷"       => [   0, 360,  8, "skill"],
  412.   
  413. #--------------------------------------------------------------------------
  414. # ● 状态动画 显示事件使用的状态ICON
  415. #--------------------------------------------------------------------------
  416.   # 判别…用于判别、请全部统一填入"balloon"。
  417.   # 种类…状态的种类(纵位置)在0~9之间。
  418.   # 形式…动画更新方法、在完毕时消失。[0=单线] [1=往返]
  419.   
  420.   # 状态名         判别     种类 形式
  421.   "异常状态/通用"   => ["balloon",   6,  1],
  422.   "异常状态/危急" => ["balloon",   5,  1],
  423.   "异常状态/睡眠"   => ["balloon",   9,  1],
  424.   
  425. #--------------------------------------------------------------------------
  426. # ● 声效
  427. #--------------------------------------------------------------------------
  428.   # 判别…用于判别、请全部统一填入"sound"。
  429.   # 种别…效果音为"se"  BGM为"bgm"  BGS为"bgs"
  430.   # 速度…速度、50~150之间。音量…音量 不管哪个都要默认为100。
  431.   # 文件名…播放的文件名。""时不改变任何BGM和BGS的设定。
  432.   
  433.   #   SE名              判别   种别 速度 音量  SE文件名
  434.   "absorb1"       => ["sound", "se",  80, 100, "absorb1"],
  435.   
  436. #--------------------------------------------------------------------------
  437. # ● 变更游戏整体速度  动作的慢放化
  438. #--------------------------------------------------------------------------
  439.   # 判别…用于判别、请全部统一填入"fps"。
  440.   # 游戏速度…60是默认的数值、比这个值低的时候就会放慢。 
  441.   # ※这个指令也可以直接变更FPS。请注意处理。
  442.   
  443.   # 变更名           判别  游戏速度
  444.   "缓慢再生"   => ["fps",  20],
  445.   "通常再生"   => ["fps",  60],
  446.   
  447. #--------------------------------------------------------------------------
  448. # ● 赋予状态
  449. #--------------------------------------------------------------------------
  450.   # 判别…用于判别、请全部统一填入"sta+"。
  451.   # 对像…[0=自分] [1=目标] [2=敌全体] [3=我方全体] [4=除自身以外的我方全体]
  452.   # 状态ID…赋予的状态ID编号。“不能抵抗”状态以外为抵抗。
  453.   
  454.   # 赋予的状态名           判别  对像  状态ID
  455.   "赋予二人攻击状态" => ["sta+",  0,  18],
  456.   "赋予四人攻击状态" => ["sta+",  0,  19],
  457.   "猫"                 => ["sta+",  0,  20],
  458.   
  459. #--------------------------------------------------------------------------
  460. # ● 状态解除
  461. #--------------------------------------------------------------------------
  462.   # 判别…用于判别、请全部统一填入"sta-"。
  463.   # 对像…[0=自分] [1=目标] [2=敌全体] [3=我方全体] [4=除自身以外的我方全体]
  464.   # 状态ID…解除的状态ID编号
  465.   
  466.   # 赋予的状态名           判别  对像  状态ID
  467.   "解除二人攻击状态" => ["sta-",  3,  18],
  468.   "解除四人攻击状态" => ["sta-",  3,  19],

  469. #--------------------------------------------------------------------------
  470. # ● 角色画像文件变更  只能使用于主人公们
  471. #--------------------------------------------------------------------------
  472.   # 判别…用于判别、请全部统一填入"change"。
  473.   # 复原…战斗后也显示为变化的是false。行走图也将变化。
  474.   # 文件名…变更为的文件名。因为要改变识别处,请不要用文件名加"_1"后缀的方式。
  475.   
  476.   # 变更名               判别   复原  文件名
  477.   "变身成猫"    => ["change", true,"$cat"],
  478.   "解除变身"      => ["change", true,"$ylva"],
  479.   
  480. #--------------------------------------------------------------------------
  481. # ● 图片显示 一名角色对应显示一枚图片
  482. #--------------------------------------------------------------------------
  483.   # 始X…移动开始位置。从画面所看的X坐标。图片是以左上为原点。
  484.   # 始Y…移动开始位置。从画面所看的Y坐标。
  485.   # 终X…移动完毕X坐标。
  486.   # 终Y…移动完毕Y坐标。
  487.   # 时间…移动时间。数值越大越缓慢。这里是用距离除以时间所得每格行动距离。
  488.   # Z轴…相较HP窗口靠前显示的话为true
  489.   # 图片文件名…图片文件夹内的文件名。

  490.   #                       判别   始X  始Y  终X  终Y 时间  Z轴 图片文件名
  491.   "特写1开始"     => ["pic",-280,  48,   0,  64, 14,false,"Actor2-3"],
  492.   "特写1完毕"     => ["pic",   0,  48, 550,  64, 12,false,"Actor2-3"],
  493.   
  494. #--------------------------------------------------------------------------
  495. # ● 游戏开关的设置
  496. #--------------------------------------------------------------------------
  497.   # 判别…用于判别、请全部统一填入"switch"。
  498.   # 开关No…设置哪个开关
  499.   # ON/OFF…将开关ON时是true、OFF时是false
  500.   #
  501.   # 开关设置名          判别   开关No ON/OFF   
  502.   "开关No1/ON"    => ["switch",   1,  true],
  503.   
  504. #--------------------------------------------------------------------------
  505. # ● 游戏变量的设置
  506. #--------------------------------------------------------------------------
  507.   # 判别…用于判别、请全部统一填入"variable"。
  508.   # 变量No…设置哪个开关
  509.   # 设置…[0=代入] [1=加法] [2=减法] [3=乘法] [4=除法] [5=剩余]
  510.   # 设置数值…指定成为演算对象的数值。
  511.   #
  512.   # 变量设置名           判别     变量No 设置 设置数值
  513.   "变量No1/+1"       => ["variable",   1,   1,    1],
  514.   
  515. #--------------------------------------------------------------------------
  516. # ● 脚本运行的设置  
  517. #--------------------------------------------------------------------------
  518.   # 判别…用于判别、请全部统一填入"script"。
  519.   #
  520.   # 使动作被添加到建议的脚本中。样品p = 1可以添加任何自己想要设置的脚本。
  521.   # 功能中、不能处理文字列。
  522.   #
  523.   #   设置名               判别   
  524.   "检测程序"   => ["script", "
  525.   
  526.   p = 1
  527.   
  528.   "],
  529.   
  530. #--------------------------------------------------------------------------
  531. # ● 其他  没有设定项目。这里所使用的名称请不要改动。
  532. #--------------------------------------------------------------------------
  533.   # 消去图片…消除显示的图片。
  534.   # 残像ON…留下角色轨迹中的残像。持续连贯动作中的残像。
  535.   # 残像OFF…消除残像。
  536.   # 反转…反转画像。是再次被反转回去,还是坐标不复原保持着反转后的样子。
  537.   # 待机不能移动…行动后、不做待机动作。
  538.   # 击倒许可…目标的HP变成0时、在这个时机可以被击倒。
  539.   #               如果这段没有的话,怪会在所有动作完成时被击倒。
  540.   # 限定于二刀…只是这个下面的单独动作、限定于二刀来处理。
  541.   #           如果不是二刀的话将会跳过、直接执行下一个单独动作。
  542.   # 非限定于二刀…与上边相反,只有在不是二刀的情况下个动作才会有效。
  543.   # 单独处理开始…在全体攻击处理成单独时、是播放行动的开始记号。
  544.   # 单独处理完毕…在全体攻击处理成单独时、是播放行动的完毕记号。
  545.   # 变更初期位置…原坐标(初期位置)变成现在的位置。
  546.   # 解除变更初期位置…将变更初期位置还原。
  547.   # 解除主动…当作战斗行动完毕、下一个角色开始行动。
  548.   #                 击倒许可设置也被含在其中、在这之后的所有动作都不会再对对像做出伤害。
  549.   # 完毕…行动完毕。就算没有这里,在所有动作完毕后也会自动识别成完毕。
  550.   
  551.   "消去图片"    => ["消去图片"],
  552.   "残像ON"          => ["残像ON"],
  553.   "残像OFF"         => ["残像OFF"],
  554.   "反转"            => ["反转"],
  555.   "待机不能移动"=> ["待机不能移动"],
  556.   "击倒许可"    => ["击倒许可"],
  557.   "限定于二刀"        => ["限定于二刀"],
  558.   "非限定于二刀"      => ["非限定于二刀"],
  559.   "单独处理开始"    => ["单独处理开始"],
  560.   "单独处理完毕"    => ["单独处理完毕"],
  561.   "变更初期位置"    => ["变更初期位置"],
  562.   "解除变更初期位置"=> ["解除变更初期位置"],
  563.   "解除主动"  => ["解除主动"],
  564.   "完毕"            => ["完毕"]
  565.   
  566. #--------------------------------------------------------------------------
  567. # ● 等待相关
  568. #--------------------------------------------------------------------------
  569.   # 单独动作上只有数值时、将会直接判定为等待时间。
  570.   # 总之,请不要用只有数字的单独动作名。
  571.   # 等待是到下一个动作执行前的等待时间、角色动画的更新不会被停止
  572.   
  573.   }
  574. #==============================================================================
  575. # ■ 连贯动作
  576. #------------------------------------------------------------------------------
  577. #  将上边的单独动作组合起来、这里是实际做出的动作。
  578. #==============================================================================
  579.   # 这里的连贯动作名将是下面主人公或者敌方所指定用的。
  580.   # 行动会从左到右依次进行。
  581.   ACTION = {
  582. #------------------------------- 待机系 -----------------------------------------  
  583.   # 连贯动作名     行动
  584.   
  585.   "战斗开始"          => ["到战斗开始的位置","坐标初始化"],
  586.                           
  587.   "待机"              => ["待机"],
  588.                           
  589.   "危急待机"        => ["不能移动","待机(固定)","异常状态/危急","22"],
  590.                           
  591.   "异常状态待机"      => ["不能移动","待机(固定)","异常状态/通用","22"],
  592.                           
  593.   "睡眠待机"          => ["不能移动","待机(固定)","异常状态/睡眠","22"],
  594.                           
  595.   "漂浮待机"          => ["待机(固定)","6","低空漂浮中","4",
  596.                           "低空漂浮中2","4","低空漂浮中3","4",
  597.                           "低空漂浮中4","4"],
  598.                           
  599.   "气绝"              => ["倒下","无法战斗"],
  600.                           
  601.   "伤害"          => ["被伤害","坐标初始化"],
  602.                           
  603.   "逃走"              => ["我方逃走"],
  604.                           
  605.   "敌方逃走"      => ["我方逃走","坐标初始化"],
  606.                           
  607.   "逃走失败"          => ["逃走失败","待机(固定)","8","坐标初始化"],
  608.                           
  609.   "选择指令"      => ["一步向前移动"],
  610.                           
  611.   "选择指令后"    => ["坐标初始化"],
  612.                           
  613.   "防御"              => ["待机(固定)","4","漂浮状态确认","低空漂浮中",
  614.                           "2","低空漂浮中2","2","低空漂浮中3","2",
  615.                           "低空漂浮中4","2"],
  616.                           
  617.   "回避"              => ["一步向后跳跃","一步向后跳跃","待机(固定)","16",
  618.                           "坐标初始化"],
  619.                           
  620.   "敌方回避"      => ["一步向后跳跃","待机(固定)","16","坐标初始化"],
  621.                           
  622.   "胜利"              => ["待机(固定)","16","向右(固定)","胜利的跳跃",
  623.                           "待机(固定)","待机不能移动","是否已变身成猫",
  624.                           "魔法发动动画","解除变身","待机(固定)","待机不能移动",],
  625.                           
  626.   "坐标复原"          => ["坐标初始化"],
  627.                           
  628. #------------------------------- 强制系 ----------------------------------------                          
  629.                           
  630.   "吴莉嘉合体攻击1" => ["2","目标左前移动","待机(固定)",
  631.                           "魔法发动动画","武器下旋转","举起武器",
  632.                           "48","右拔出","64","后退初始化"],
  633.                           
  634.   "四人合体攻击1"     => ["2","四人攻击移动2","待机(固定)","魔法发动动画",
  635.                           "武器下旋转","举起武器","90",
  636.                           "左拔出","96","后退初始化"],
  637.                           
  638.   "四人合体攻击2"     => ["2","四人攻击移动3","待机(固定)","魔法发动动画",
  639.                           "武器下旋转","举起武器","60","右拔出2","右旋转",
  640.                           "对像动画","128","后退初始化"],
  641.                           
  642.   "四人合体攻击3"     => ["2","四人攻击移动4","待机(固定)","魔法发动动画",
  643.                           "武器下旋转","举起武器","34","左拔出2","右旋转",
  644.                           "对像动画","144","后退初始化"],
  645.                           
  646.   "可以投掷"    => ["右旋转一周","4","目标高速移动","一步向后跳跃","4",
  647.                           "待机(固定)","一步向后跳跃","待机(固定)","32"],
  648.                           
  649. #--------------------------- 基本アクション系 ----------------------------------
  650.   
  651.   "通常攻击"          => ["目标向前移动","武器挥动攻击","对像动画等待",
  652.                           "12","武器挥动攻击L","对像动画L","限定于二刀","16",
  653.                           "击倒许可","后退初始化"],
  654.                           
  655.   "敌方无武器的攻击"    => ["目标向前移动","武器挥动攻击","对像动画等待",
  656.                           "击倒许可","后退初始化"],
  657.                           
  658.   "使用通用技能"    => ["一步向前移动","待机(固定)","魔法发动动画",
  659.                           "武器下旋转","举起武器","武器挥动攻击",
  660.                           "对像动画等待","击倒许可","24","坐标初始化"],
  661.                           
  662.   "通用技能单独处理"=> ["一步向前移动","魔法发动动画","武器下旋转","举起武器",
  663.                           "单独处理开始","武器挥动攻击","对像动画","24",
  664.                           "单独处理完毕","击倒许可","坐标初始化"],
  665.                           
  666.   "使用物品"      => ["目标向前移动","待机(固定)","24","对像动画等待",
  667.                           "击倒许可","坐标初始化"],
  668.                           
  669. #------------------------------ スキル系 ---------------------------------------                          
  670.   
  671.   "多段攻击"          => ["残像ON","向前跳跃敲击","武器挥动攻击L","对像动画武器",
  672.                           "待机(固定)","16","对像动画武器","武器下旋转",
  673.                           "武器上旋转","4","原地跳跃敲击","武器挥动攻击L",
  674.                           "对像动画武器","待机(固定)","16","对像动画武器",
  675.                           "反转","武器挥动攻击","武器挥动攻击L","12","反转",
  676.                           "原地跳跃敲击","武器挥动攻击L","对像动画武器",
  677.                           "一步向后跳跃","一步向后跳跃","待机(固定)",
  678.                           "对像动画武器","拔出","武器挥动攻击L","击倒许可",
  679.                           "残像OFF","16","后退初始化"],
  680.                           
  681.   "多段随机攻击"=> ["向前跳跃敲击","武器挥动攻击L","对像动画武器","待机(固定)","16",
  682.                           "向前跳跃敲击","武器挥动攻击L","对像动画武器","待机(固定)","16",
  683.                           "向前跳跃敲击","武器挥动攻击L","对像动画武器","待机(固定)","16",
  684.                           "向前跳跃敲击","武器挥动攻击L","对像动画武器","击倒许可","坐标初始化"],
  685.                           
  686.   "高速多段攻击"      => ["目标向前移动","武器挥动攻击","轻微吹动","对像动画武器",
  687.                           "目标向前高速移动","武器挥动攻击","轻微吹动","武器挥动攻击L","对像动画武器",
  688.                           "目标向前高速移动","武器挥动攻击","轻微吹动","武器挥动攻击L","对像动画武器",
  689.                           "目标向前高速移动","武器挥动攻击","轻微吹动","武器挥动攻击L","对像动画武器",
  690.                           "目标向前高速移动","武器挥动攻击","轻微吹动","武器挥动攻击L","对像动画武器",
  691.                           "目标向前高速移动","武器挥动攻击","轻微吹动","武器挥动攻击L","对像动画武器",
  692.                           "击倒许可","12","坐标初始化"],
  693.                           
  694.   "二人同时攻击"      => ["二人攻击条件确认","二人攻击目标统一","吴莉嘉连同攻击",
  695.                           "目标右前移动","待机(固定)","魔法发动动画","武器下旋转",
  696.                           "举起武器","48","斩击/必杀技1","左拔出","64","对像动画",
  697.                           "击倒许可","后退初始化","解除二人攻击状态"],
  698.                           
  699.   "二人同时攻击准备"  => ["赋予二人攻击状态"],  
  700.                           
  701.   "四人同时攻击"      => ["四人攻击条件确认","四人攻击目标统一","四人攻击1",
  702.                           "四人攻击2","四人攻击3","四人攻击移动1","待机(固定)",
  703.                           "魔法发动动画","武器下旋转","举起武器","90",
  704.                           "斩击/必杀技1","右拔出","64","对像动画等待",
  705.                           "击倒许可","后退初始化","合体攻击解除"],
  706.                           
  707.   "四人同时攻击准备"  => ["赋予四人攻击状态"],
  708.                           
  709.   "武器投掷"          => ["一步向前移动","武器挥动攻击","absorb1","待机(固定)",
  710.                           "开始武器投掷","12","对像动画武器","击倒许可",
  711.                           "放弃武器投掷","坐标初始化"],
  712.                           
  713.   "单独全体远距离攻击"=> ["一步向前跳跃","跳跃停止","单独处理开始",
  714.                           "以自身为目标","武器挥动攻击","中弹1","8",
  715.                           "对像动画武器","单独处理完毕","击倒许可",
  716.                           "跳跃着地","坐标初始化"],
  717.                           
  718.   "全体远距离攻击"    => ["以自身为目标","武器挥动攻击","中弹1","20",
  719.                           "对像动画等待","击倒许可"],
  720.                         
  721.   "回复连发"      => ["目标向前移动","对像动画","武器挥动攻击",
  722.                           "16","死亡确认","回复连发","坐标初始化"],
  723.                           
  724.   "适当连发"        => ["逃走失败","魔法发动动画","武器下旋转","举起武器",
  725.                           "8","对像动画","适当连发","坐标初始化"],
  726.                           
  727.   "特写"        => ["待机(固定)","魔法发动动画","特写1开始",
  728.                           "75","特写1完毕","8","目标向前移动",
  729.                           "武器挥动攻击","对像动画等待","击倒许可",
  730.                           "消去图片","后退初始化"],
  731.                           
  732.   "踩踏攻击"          => ["跳跃到目标","打击动画","纵向压扁","一步向后跳跃",
  733.                           "强力踩踏","打击动画","纵向压扁","一步向后跳跃",
  734.                           "强力踩踏","对像动画","纵向压扁","一步向后跳跃",
  735.                           "一步向后跳跃","击倒许可","待机(固定)","8","后退初始化"],
  736.                           
  737.   "全体攻击1"         => ["一步向前移动","待机(固定)","魔法发动动画","武器下旋转",
  738.                           "举起武器","全体动画单体化","武器挥动攻击","48",
  739.                           "对像动画等待","击倒许可","坐标初始化"],
  740.                           
  741.   "变身成猫"        => ["一步向前跳跃","待机(固定)","魔法发动动画","32",
  742.                           "变身成猫","待机(固定)","猫","32","一步向后跳跃"],                     
  743.                           
  744.   "人体投掷"      => ["选择投掷角色","目标移动","举起我方","4",
  745.                           "absorb1","投掷目标组合","将我方投掷飞出",
  746.                           "投掷我方","待机(固定)","对像动画","坐标初始化",
  747.                           "待机(固定)","32"],
  748.                           
  749.                           
  750.                           
  751. #-------------------------------------------------------------------------------
  752.   "完毕"              => ["完毕"]}
  753. end
  754. #==============================================================================
  755. # ■ Game_Actor
  756. #------------------------------------------------------------------------------
  757. #  设定主人公的基本动作类
  758. #==============================================================================
  759. class Game_Actor < Game_Battler
  760.   #--------------------------------------------------------------------------
  761.   # ● 从主人公ID中确定空手时的动作(无武器时)
  762.   #--------------------------------------------------------------------------
  763.   # when 1 ←这个数字是主人公ID
  764.   # return "通常攻击" ←填入对应的连贯动作名
  765.   def non_weapon
  766.     case @actor_id
  767.     when 1
  768.       return "通常攻击"
  769.     end
  770.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  771.     return "通常攻击"
  772.   end
  773.   #--------------------------------------------------------------------------
  774.   # ● 通常待机
  775.   #--------------------------------------------------------------------------
  776.   def normal
  777.     case @actor_id
  778.     when 1
  779.       return "待机"
  780.     end
  781.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  782.     return "待机"
  783.   end
  784.   #--------------------------------------------------------------------------
  785.   # ● 危急(HP1/4以下)
  786.   #--------------------------------------------------------------------------
  787.   def pinch
  788.     case @actor_id
  789.     when 1
  790.       return "危急待机"
  791.     end
  792.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  793.     return "危急待机"
  794.   end
  795.   #--------------------------------------------------------------------------
  796.   # ● 防御
  797.   #--------------------------------------------------------------------------
  798.   def defence
  799.     case @actor_id
  800.     when 1
  801.       return "防御"
  802.     end
  803.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  804.     return "防御"
  805.   end
  806.   #--------------------------------------------------------------------------
  807.   # ● 伤害 对像动画时、取得命中时的动作
  808.   #--------------------------------------------------------------------------
  809.   def damage_hit
  810.     case @actor_id
  811.     when 1
  812.       return "伤害"
  813.     end
  814.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  815.     return "伤害"
  816.   end  
  817.   #--------------------------------------------------------------------------
  818.   # ● 回避 对像动画时、取得没命中时的动作
  819.   #--------------------------------------------------------------------------
  820.   def evasion
  821.     case @actor_id
  822.     when 1
  823.       return "回避"
  824.     end
  825.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  826.     return "回避"
  827.   end  
  828.   #--------------------------------------------------------------------------
  829.   # ● 选择指令前动作
  830.   #--------------------------------------------------------------------------
  831.   def command_b
  832.     case @actor_id
  833.     when 1
  834.       return "选择指令"
  835.     end
  836.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  837.     return "选择指令"
  838.   end
  839.   #--------------------------------------------------------------------------
  840.   # ● 选择指令后动作
  841.   #--------------------------------------------------------------------------
  842.   def command_a
  843.     case @actor_id
  844.     when 1
  845.       return "选择指令后"
  846.     end
  847.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  848.     return "选择指令后"
  849.   end
  850.   #--------------------------------------------------------------------------
  851.   # ● 逃走成功
  852.   #--------------------------------------------------------------------------
  853.   def run_success
  854.     case @actor_id
  855.     when 1
  856.       return "逃走"
  857.     end
  858.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  859.     return "逃走"
  860.   end
  861.   #--------------------------------------------------------------------------
  862.   # ● 逃走失败
  863.   #--------------------------------------------------------------------------
  864.   def run_ng
  865.     case @actor_id
  866.     when 1
  867.       return "逃走失败"
  868.     end
  869.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  870.     return "逃走失败"
  871.   end
  872.   #--------------------------------------------------------------------------
  873.   # ● 胜利
  874.   #--------------------------------------------------------------------------
  875.   def win
  876.     case @actor_id
  877.     when 1
  878.       return "胜利"
  879.     end
  880.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  881.     return "胜利"
  882.   end
  883.   #--------------------------------------------------------------------------
  884.   # ● 进入战斗时的动作
  885.   #--------------------------------------------------------------------------  
  886.   def first_action
  887.     case @actor_id
  888.     when 1
  889.       return "战斗开始"
  890.     end
  891.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  892.     return "战斗开始"
  893.   end
  894.   #--------------------------------------------------------------------------
  895.   # ● 动作被中断时的恢复动作
  896.   #--------------------------------------------------------------------------  
  897.   def recover_action
  898.     case @actor_id
  899.     when 1
  900.       return "坐标复原"
  901.     end
  902.     # 上述主人公ID以外的其他主人公全部使用的连贯动作名
  903.     return "坐标复原"
  904.   end
  905.   #--------------------------------------------------------------------------
  906.   # ● 影图像  在人物行走图文件夹中读取
  907.   #--------------------------------------------------------------------------
  908.   # return "shadow00" ←在这里填入想要设定的话像文件名
  909.   def shadow
  910.     case @actor_id
  911.     when 1
  912.       return "shadow00"
  913.     end
  914.     # 上述主人公ID以外的其他主人公全部使用的影图像
  915.     return "shadow00"
  916.   end
  917.   #--------------------------------------------------------------------------
  918.   # ● 略微调整影图像的位置
  919.   #--------------------------------------------------------------------------
  920.   # return [横坐标, 纵坐标]
  921.   def shadow_plus
  922.     case @actor_id
  923.     when 1
  924.       return [ 0, 4]
  925.     end
  926.     # 上述主人公ID以外的其他主人公全部使用的位置
  927.     return [ 0, 4]
  928.   end
  929. end
  930. #==============================================================================
  931. # ■ Game_Enemy
  932. #------------------------------------------------------------------------------
  933. #  敌方的基本动作设定
  934. #==============================================================================
  935. class Game_Enemy < Game_Battler
  936.   #--------------------------------------------------------------------------
  937.   # ● 从敌方ID来确定未装备武器时的通常攻击动作
  938.   #--------------------------------------------------------------------------
  939.   # when 1 ←这里的数字是敌方ID编号
  940.   # return "敌方无武器的攻击" ←请填入对应的连贯动作名
  941.   def base_action
  942.     case @enemy_id
  943.     when 1
  944.       return "敌方无武器的攻击"
  945.     end
  946.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
  947.     return "敌方无武器的攻击"
  948.   end
  949.   #--------------------------------------------------------------------------
  950.   # ● 通常待机
  951.   #--------------------------------------------------------------------------
  952.   def normal
  953.     case @enemy_id
  954.     when 1
  955.       return "待机"
  956.     end
  957.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
  958.     return "待机"
  959.   end
  960.   #--------------------------------------------------------------------------
  961.   # ● 危急(HP1/4以下)
  962.   #--------------------------------------------------------------------------
  963.   def pinch
  964.     case @enemy_id
  965.     when 1
  966.       return "待机"
  967.     end
  968.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
  969.     return "待机"
  970.   end
  971.   #--------------------------------------------------------------------------
  972.   # ● 防御
  973.   #--------------------------------------------------------------------------  
  974.   def defence
  975.     case @enemy_id
  976.     when 1
  977.       return "防御"
  978.     end
  979.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
  980.     return "防御"
  981.   end
  982.   #--------------------------------------------------------------------------
  983.   # ● 伤害 对像动画时、取得命中时的动作
  984.   #--------------------------------------------------------------------------
  985.   def damage_hit
  986.     case @enemy_id
  987.     when 1
  988.       return "伤害"
  989.     end
  990.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
  991.     return "伤害"
  992.   end
  993.   #--------------------------------------------------------------------------
  994.   # ● 回避 对像动画时、取得未命中时的动作
  995.   #--------------------------------------------------------------------------
  996.   def evasion
  997.     case @enemy_id
  998.     when 1
  999.       return "敌方回避"
  1000.     end
  1001.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
  1002.     return "敌方回避"
  1003.   end
  1004.   #--------------------------------------------------------------------------
  1005.   # ● 逃走
  1006.   #--------------------------------------------------------------------------
  1007.   def run_success
  1008.     case @enemy_id
  1009.     when 1
  1010.       return "敌方逃走"
  1011.     end
  1012.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
  1013.     return "敌方逃走"
  1014.   end
  1015.   #--------------------------------------------------------------------------
  1016.   # ● 进入战斗时的动作
  1017.   #--------------------------------------------------------------------------  
  1018.   def first_action
  1019.     case @enemy_id
  1020.     when 1
  1021.       return "战斗开始"
  1022.     end
  1023.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
  1024.     return "战斗开始"
  1025.   end
  1026.   #--------------------------------------------------------------------------
  1027.   # ● 动作被中断时的恢复动作
  1028.   #--------------------------------------------------------------------------  
  1029.    def recover_action
  1030.     case @enemy_id
  1031.     when 1
  1032.       return "坐标复原"
  1033.     end
  1034.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
  1035.     return "坐标复原"
  1036.   end
  1037.   #--------------------------------------------------------------------------
  1038.   # ● 影图像  在人物行走图文件夹中读取
  1039.   #--------------------------------------------------------------------------
  1040.   # return "shadow01" ←在这里填入想要设定的话像文件名。
  1041.   def shadow
  1042.     case @enemy_id
  1043.     when 1
  1044.       return "shadow01"
  1045.     when 30
  1046.       return ""
  1047.     end
  1048.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID影图像
  1049.     return "shadow01"
  1050.   end
  1051.   #--------------------------------------------------------------------------
  1052.   # ● 略微调整影图像的位置
  1053.   #--------------------------------------------------------------------------
  1054.   # return [横坐标, 纵坐标]
  1055.   def shadow_plus
  1056.     case @enemy_id
  1057.     when 1
  1058.       return [ 0, -8]
  1059.     end
  1060.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID位置
  1061.     return [ 0, 0]
  1062.   end
  1063.   #--------------------------------------------------------------------------
  1064.   # ● 敌方武器设定  在动作和动画时,武器也被显示。
  1065.   #--------------------------------------------------------------------------
  1066.   # return 1 ←这个数字是武器ID。0的话将被判别为空手。
  1067.   #            只有在敌方动画NO的时候画像才被显示。
  1068.   def weapon
  1069.     case @enemy_id
  1070.     when 1
  1071.       return 0
  1072.     end
  1073.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID
  1074.     return 0
  1075.   end
  1076.   #--------------------------------------------------------------------------
  1077.   # ● 战斗配置的略微调整  在这里可以设置数据库中所不能设置的广范围坐标
  1078.   #--------------------------------------------------------------------------
  1079.   # return [ 0, 0] => [X坐标、Y坐标] 这个数值从数据库上的配置上变化
  1080.   def position_plus
  1081.     case @enemy_id
  1082.     when 1
  1083.       return [0, 0]
  1084.     end
  1085.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID坐标调整
  1086.     return [ 0, 0]
  1087.   end
  1088.   #--------------------------------------------------------------------------
  1089.   # ● 敌方击倒(击破时的退场)方式
  1090.   #--------------------------------------------------------------------------
  1091.   # 被击倒画像残留的为1、普通为2、BOSS型为3
  1092.   def collapse_type
  1093.     case @enemy_id
  1094.     when 1
  1095.       return 2
  1096.     when 30   #敌方ID为30,BOSS型击倒!
  1097.       return 3
  1098.     end
  1099.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID击倒方式
  1100.     return 2
  1101.   end
  1102.   #--------------------------------------------------------------------------
  1103.   # ● 敌方行动回数 1回合做几次行动
  1104.   #--------------------------------------------------------------------------
  1105.   #        回数  确率  补正               
  1106.   # return [  2, 100,  50]                       
  1107.   #                        
  1108.   # 回数…最大的行动回数
  1109.   # 确率…下次行动能否成功的成功率。数值为%
  1110.   # 补正…速度修正。行动的每次数值%后得出的值
  1111.   def action_time
  1112.     case @enemy_id
  1113.     when 1
  1114.       return [ 1, 100, 100]
  1115.     end
  1116.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID行动回数
  1117.     return [ 1, 100, 100]
  1118.   end
  1119.   #--------------------------------------------------------------------------
  1120.   # ● 敌方动画
  1121.   #--------------------------------------------------------------------------
  1122.   # 敌方被作成动画? true是是跟主人公同等对待。
  1123.   # [设定方法]
  1124.   # 1.敌方的动画画像变成行走图
  1125.   # 2.数据库的敌方角色名、参照着行走图文件名填写
  1126.   def anime_on
  1127.     case @enemy_id
  1128.     when 1,2,3,4
  1129.       return true
  1130.     end
  1131.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID动画设定
  1132.     return false
  1133.   end
  1134.   #--------------------------------------------------------------------------
  1135.   # ● 敌方动画时的自动反转
  1136.   #--------------------------------------------------------------------------
  1137.   # 如果想自动反转上面设定为NO的敌方画像和武器动画时为true
  1138.   def action_mirror
  1139.     case @enemy_id
  1140.     when 1,2,3,4
  1141.       return true
  1142.     end
  1143.     # 上述敌方ID以外的其他敌方队员全部使用的武器ID动画设定
  1144.     return false
  1145.   end
  1146. end
  1147. module RPG
  1148. #==============================================================================
  1149. # ■ module RPG
  1150. #------------------------------------------------------------------------------
  1151. #  设定状态动作。
  1152. #==============================================================================
  1153. class State
  1154. #--------------------------------------------------------------------------
  1155. # ● 指定ID 根据状态改变通常待机、危急时的动作。
  1156. #--------------------------------------------------------------------------
  1157. # when 1 ←这个数字是状态ID
  1158. # return "气绝" ←填入对应的连贯动作名
  1159.   def base_action
  1160.     case @id
  1161.     when 1  # 无法战斗(HP0)时。最优先。
  1162.       return "气绝"
  1163.     when 2,3,4,5,7  
  1164.       return "异常状态待机"
  1165.     when 6  
  1166.       return "睡眠待机"
  1167.     when 17  
  1168.       return "漂浮待机"
  1169.     end
  1170.     # 上述状态ID以外的其他状态全部使用的连贯动作
  1171.     return "待机"
  1172.   end
  1173. #--------------------------------------------------------------------------
  1174. # ● 扩张设定 从状态ID确定扩张设定。可以重复。
  1175. #--------------------------------------------------------------------------
  1176. # "自动复活/50"…无法战斗时自动复活。不要解除无法战斗。
  1177. #                /后的数字是回复时的HP(最大值的比例%)回复后状态会自动解除
  1178. # "魔法反弹/39"…反弹魔法(物理攻击以外)技能。/后填入反射时显示的动画ID编号
  1179. # "物理反弹/39"…反弹物理攻击(包含物理技能)。/后填入反射时显示的动画ID编号
  1180. # "魔法无效/39"…魔法(物理攻击以外)技能无效化。/后填入无效时显示的动画ID编号
  1181. # "物理无效/39"…物理攻击(包含物理技能)无效化。/后填入无效时显示的动画ID编号
  1182. # "成本吸收"…受到技能时将他的成本还原到自身。数值不显示。
  1183. # "0回合解除"…按照行动顺序的回合数解除状态。
  1184. # "敌方除外"…让敌方不显示这个状态
  1185. # "无POP"…附加这个状态时、伤害窗口上不显示状态名
  1186. # "不显示ICON"…在状态窗口上不显示状态ICON
  1187. # "禁止状态动作"…附加这个状态时不会改变人物待机状态
  1188. # "连续伤害"…调用下面的连续伤害
  1189. # "无"…无扩张
  1190.   def extension
  1191.     case @id
  1192.     when 1  # 无法战斗
  1193.       return ["无POP","敌方除外"]
  1194.     when 2  # 毒
  1195.       return ["敌方除外"]
  1196.     when 18  
  1197.       return ["0回合解除","不显示ICON"]
  1198.     when 19  
  1199.       return ["0回合解除","不显示ICON"]
  1200.     when 20  
  1201.       return ["不显示ICON","禁止状态动作"]
  1202.     end
  1203.     # 上记のID以外すべてに适用される扩张设定
  1204.     return ["无"]
  1205.   end
  1206. #--------------------------------------------------------------------------
  1207. # ● 连续伤害扩张设置 包含连续回复
  1208. #--------------------------------------------------------------------------
  1209. # when 1 ←这个数字是状态ID。上面的只有填写了"连续伤害"的扩张才会有这个效果
  1210. #      可以多数设置。例)[["hp",0,5,true],["mp",0,5,true]]
  1211. #                           
  1212. #         对像  定数  比例  POP  无法战斗许可
  1213. # return [["hp",    0,  10, true,  true]]
  1214. #
  1215. # 对像…比例伤害对象是 HP的话为"hp" MP为"mp"
  1216. # 定数…这个数值直接是伤害值。如果是负数时便成为回复。数值上多少会有些误差
  1217. # 比例…对象的最大值的比例伤害。数值以%计算。数值上多少会有些误差
  1218. # POP…在战斗画面上显示数值是true
  1219. # 无法战斗许可…许可HP0的情况是true
  1220.   def slip_extension
  1221.     case @id
  1222.     when 2  # 毒
  1223.       return [["hp", 0, 10, true, true]]
  1224.     end
  1225.     return []
  1226.   end
  1227. end
  1228. #==============================================================================
  1229. # ■ module RPG
  1230. #------------------------------------------------------------------------------
  1231. #  设置武器动作
  1232. #==============================================================================
  1233. class Weapon
  1234. #--------------------------------------------------------------------------
  1235. # ● 动作指定 从装备着的武器ID来决定通常攻击的动作。
  1236. #--------------------------------------------------------------------------
  1237. # when 1 ←这个数字是武器ID
  1238. # return "通常攻击" ←请填入对应的连贯动作名
  1239.   def base_action
  1240.     case @id
  1241.     when 1
  1242.       return "通常攻击"
  1243.     end
  1244.     # 上述ID以外的其他全部使用的动作
  1245.     return "通常攻击"
  1246.   end
  1247. #--------------------------------------------------------------------------
  1248. # ● 图像指定 从装备着的武器ID来决定通常攻击的动作。
  1249. #--------------------------------------------------------------------------
  1250. # return "001-Weapon01" ←请填入对应的武器图像的文件名
  1251. #                         武器图像请放入人物行走图文件夹中
  1252. # 使用ICON时、在ID上没有的全部使用ICON来表示
  1253. # 特定的武器想要让他们不显示的话请用空白的图像。
  1254.   def graphic
  1255.     case @id
  1256.     when 1
  1257.       return ""
  1258.     end
  1259.     # 使用上述ID以外的全ICON画像
  1260.     return ""
  1261.   end
  1262. #--------------------------------------------------------------------------
  1263. # ● 飞出动画中贴附武器图像 自人物行走图文件夹中读取
  1264. #--------------------------------------------------------------------------
  1265. # 飞出动画用武器画像另行设定。显示弓和箭之类的。
  1266. # 在这里没有被设置的武器会和上面的图像作相同处理。
  1267.   def flying_graphic
  1268.     case @id
  1269.     when 1
  1270.       return ""
  1271.     end
  1272.     # 上述ID以外一律使用的图像
  1273.     return ""
  1274.   end
  1275. end  
  1276. #==============================================================================
  1277. # ■ module RPG
  1278. #------------------------------------------------------------------------------
  1279. #  技能动作设定。
  1280. #==============================================================================
  1281. class Skill
  1282. #--------------------------------------------------------------------------
  1283. # ● 从技能ID决定动作。
  1284. #--------------------------------------------------------------------------  
  1285.   def base_action
  1286.     case @id
  1287.     when 84
  1288.       return "武器投掷"
  1289.     when 85
  1290.       return "多段攻击"
  1291.     when 86
  1292.       return "高速多段攻击"  
  1293.     when 87
  1294.       return "单独全体远距离攻击"  
  1295.     when 88
  1296.       return "全体远距离攻击"
  1297.     when 89
  1298.       return "多段随机攻击"  
  1299.     when 90
  1300.       return "回复连发"  
  1301.     when 91
  1302.       return "适当连发"  
  1303.     when 92
  1304.       return "通常攻击"  
  1305.     when 93
  1306.       return "特写"  
  1307.     when 94
  1308.       return "踩踏攻击"
  1309.     when 95
  1310.       return "全体攻击1"
  1311.     when 96
  1312.       return "通用技能单独处理"
  1313.     when 97
  1314.       return "变身成猫"
  1315.     when 98
  1316.       return "二人同时攻击"
  1317.     when 99
  1318.       return "二人同时攻击准备"
  1319.     when 100
  1320.       return "四人同时攻击"
  1321.     when 101
  1322.       return "四人同时攻击准备"
  1323.     when 102
  1324.       return "四人同时攻击准备"
  1325.     when 103
  1326.       return "四人同时攻击准备"
  1327.     when 104
  1328.       return "人体投掷"
  1329.     end
  1330.     # 上述ID以外的其他全部使用的动作  
  1331.     return "使用通用技能"
  1332.   end
  1333. #--------------------------------------------------------------------------
  1334. # ● 扩张设定 从技能ID决定扩张设定。可以重复。
  1335. #--------------------------------------------------------------------------
  1336. # "必中"…攻击绝对不会被回避
  1337. # "HP消费"…将MP消费改为HP消费
  1338. # "%成本MAX"…技能成本变为以最大MP(HP)的比例取值。例)MAXMP500的成本10是消费MP50
  1339. # "%成本NOW"…技能成本变为以现在MP(HP)的比例取值。例)现MP100的成本10是消费MP10
  1340. # "无视反射"…无视魔法、物理技能反射和无效化状态
  1341. # "%伤害MAX/30"…伤害计算变为以对象的最大HP(MP)的比例取值。/后的数值为%值伤害
  1342. # "%伤害NOW/30"…伤害计算变为以对象的现在HP(MP)的比例取值。/后的数值为%值伤害
  1343. # "成本威力"…根据使用者的最大MP(HP)判别消费MP(HP)的比例威力。MAX消费是原本威力、MAX10%是原有威力的1/10
  1344. # "现HP威力"…根据使用者的最大HP改变现在HP的比例威力。MAX是原本威力、MAX10%是原有威力的1/10
  1345. # "现MP威力"…根据使用者的最大MP改变现在MP的比例威力。MAX是原本威力、MAX10%是原有威力的1/10
  1346. # "MP消耗减半无效"…防具上的定义“MP消耗减半”被无效化
  1347. # "不显示HELP"…动作时、帮助窗口上不显示技能名
  1348. # "全区域"…目标范围为敌我方全体
  1349. # "随机目标"…目标内随机选择一个对像
  1350. # "自身以外"…在目标内将自己排除
  1351. # "伤害动作禁止"…不显示伤害命中时的动作
  1352. # "行动前无闪光"…行动时角色不发光
  1353. # "无"…无扩张
  1354.   def extension
  1355.     case @id
  1356.     when 86
  1357.       return ["伤害动作禁止"]
  1358.     when 89
  1359.       return ["随机目标"]
  1360.     when 94
  1361.       return ["伤害动作禁止"]
  1362.     when 96
  1363.       return ["全域"]
  1364.     when 98
  1365.       return ["伤害动作禁止"]
  1366.     when 99
  1367.       return ["不显示HELP","行动前无闪光"]
  1368.     when 100
  1369.       return ["伤害动作禁止"]
  1370.     when 101
  1371.       return ["不显示HELP","行动前无闪光"]
  1372.     when 102
  1373.       return ["不显示HELP","行动前无闪光"]
  1374.     when 103
  1375.       return ["不显示HELP","行动前无闪光"]
  1376.     end
  1377.     # 上述ID以外的其他全部使用的扩张设定
  1378.     return ["无"]
  1379.   end
  1380. #--------------------------------------------------------------------------
  1381. # ● 飞出动画上贴附的画像 自人物行走图文件夹中读取
  1382. #--------------------------------------------------------------------------
  1383. # 指定技能ID的画像
  1384.   def flying_graphic
  1385.     case @id
  1386.     when 1
  1387.       return ""
  1388.     end
  1389.     # 上述ID以外为画像未使用
  1390.     return ""
  1391.   end
  1392. end  
  1393. #==============================================================================
  1394. # ■ module RPG
  1395. #------------------------------------------------------------------------------
  1396. #  物品动作设定。
  1397. #==============================================================================
  1398. class Item
  1399. #--------------------------------------------------------------------------
  1400. # ● 根据物品ID决定动作。
  1401. #--------------------------------------------------------------------------  
  1402.   def base_action
  1403.     case @id
  1404.     when 1
  1405.       return "使用物品"
  1406.     end
  1407.     # 上述ID以外的其他全部使用的动作
  1408.     return "使用物品"
  1409.   end
  1410. #--------------------------------------------------------------------------
  1411. # ● 扩张设定 根据物品ID决定扩张设定。可以重复。
  1412. #--------------------------------------------------------------------------
  1413. # "必中"…攻击绝对不会被回避
  1414. # "反射无视"…无视魔法、物理反射和无效化状态
  1415. # "不显示HELP"…帮助窗口上不显示物品名
  1416. # "全区域"…目标范围为敌我全体
  1417. # "随机目标"…目标内中随机选择一个对像
  1418. # "自身以外"…目标内中将自身排除
  1419. # "伤害动作禁止"…不显示伤害命中时的动作
  1420. # "行动前无闪光"…行动时角色不发光
  1421. # "无"…无扩张
  1422.   def extension
  1423.     case @id
  1424.     when 1
  1425.       return ["无"]
  1426.     end
  1427.     # 上述ID以外的其他全部使用的扩张设定
  1428.     return ["无"]
  1429.   end
  1430. end
  1431. end
复制代码
  1. #==============================================================================
  2. # ■ Sprite_Battler Ver3.3
  3. #------------------------------------------------------------------------------
  4. #  角色用於現實的戰鬥動作。
  5. #==============================================================================
  6. class Sprite_Battler < Sprite_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初期化
  9.   #--------------------------------------------------------------------------
  10.   def initialize(viewport, battler = nil)
  11.     super(viewport)
  12.     @battler = battler
  13.     @battler_visible = false
  14.     @effect_type = 0                   # 效果的種類
  15.     @effect_duration = 0               # 效果的殘留時間
  16.     @move_x = 0                        # 已變化的X坐標的累計
  17.     @move_y = 0                        # 已變化的Y坐標的累計
  18.     @move_z = 0                        # 已變化的Z坐標的累計
  19.     @distanse_x = 0                    # X坐標的移動距離
  20.     @distanse_y = 0                    # Y坐標的移動距離
  21.     @moving_x = 0                      #1單位所相當的X坐標移動距離
  22.     @moving_y = 0                      #1單位所相當的Y坐標移動距離
  23.     @move_speed_x = 0                  # X坐標的移動速度
  24.     @move_speed_y = 0                  # Y坐標的移動速度
  25.     @move_speed_plus_x = 0             # X坐標在加減速時的補充移動速度
  26.     @move_speed_plus_y = 0             # Y坐標在加減速時的補充移動速度
  27.     @move_boost_x = 0                  # X坐標加速度
  28.     @move_boost_y = 0                  # Y坐標加速度
  29.     @jump_time = 0                     # 跳躍時間
  30.     @jump_time_plus = 0                # 跳躍時間補充
  31.     @jump_up = 0                       # 跳躍上升
  32.     @jump_down = 0                     # 跳躍下降
  33.     @jump_size = 0                     # 跳躍高度
  34.     @float_time = 0                    # 漂浮時間
  35.     @float_up = 0                      # 1單位所相當於的浮遊高度
  36.     @jump_plus = 0                     # 根據跳躍補充影位置
  37.     @angle = 0                         # 旋轉角度
  38.     @angling = 0                       # 1單位所相當於的旋轉角度
  39.     @angle_time = 0                    # 旋轉時間
  40.     @angle_reset = 0                   # 是否初始化角度
  41.     @zoom_x = 0                        # 橫向放大率
  42.     @zoom_y = 0                        # 縱向放大率
  43.     @zooming_x = 0                     # 1單位所相當於的橫向放大率
  44.     @zooming_y = 0                     # 1單位所相當於的縱向放大率
  45.     @zoom_time = 0                     # 放大時間
  46.     @zoom_reset = 0                    # 是否初始化放大
  47.     @target_battler = []               # 目標角色情報
  48.     @now_targets = []                  # 目標角色記憶
  49.     @pattern = 0                       # 橫圖片位置(更新位置)
  50.     @pattern_back = false              # 循環標誌
  51.     @wait = 0                          # 到下個動作的等待時間
  52.     @unloop_wait = 0                   # 非循環系動畫完畢時的等待時間
  53.     @action = []                       # 行動
  54.     @anime_kind = 0                    # 縱圖片位置(動畫種類位置)
  55.     @anime_speed = 0                   # 圖片更新速度
  56.     @frame = 0                         # 被消費圖片更新時間
  57.     @anime_loop = 0                    # 循環方式
  58.     @anime_end = false                 # 角色的動畫是否完畢
  59.     @anime_freeze = false              # 是否是固定動畫
  60.     @anime_freeze_kind = false         # 固定圖案位置
  61.     @anime_moving = false              # 是否在飛出動畫中
  62.     @base_width = N01::ANIME_PATTERN   # 圖片的橫分割數
  63.     @base_height = N01::ANIME_KIND     # 圖片的縱分割數
  64.     @width = 0                         # 橫矩形
  65.     @height = 0                        # 縱矩形
  66.     @picture_time = 0                  # 圖片顯示時間
  67.     @individual_targets = []           # 單獨處理的保持目標
  68.     @balloon_duration = 65             # 飛出動畫時間
  69.     @reverse = false                   # 動畫的反向再生標誌
  70.     # 角色不存在的時候將中斷處理
  71.     return @battler_visible = false if @battler == nil
  72.     # 角色是主人公時、或者敵方動畫為NO時
  73.     @anime_flug = true if @battler.actor?
  74.     @anime_flug = true if [email protected]? && @battler.anime_on
  75.   end
  76.   #--------------------------------------------------------------------------
  77.   # ● 角色作成
  78.   #--------------------------------------------------------------------------
  79.   def make_battler
  80.     # 初期配置的取得
  81.     @battler.base_position
  82.     # 色相通過角色認別
  83.     @battler_hue = @battler.battler_hue
  84.     # 角色是主人公時、或者敵方動畫為NO時
  85.     if @anime_flug
  86.       # 準備武器
  87.       @weapon_R = Sprite_Weapon.new(viewport,@battler)
  88.       # 取得我方人物名、敵人角色名
  89.       @battler_name = @battler.character_name if @battler.actor?
  90.       @battler_name = @battler.battler_name unless @battler.actor?
  91.       # 敵方角色是主人公時、或者敵方動畫為NO時為NO的時候 畫像被角色是主人公時、或者敵方動畫為NO時
  92.       self.mirror = true if [email protected]? && @battler.action_mirror
  93.       # 是不是利用行圖片圖來改變轉送前的矩形尺寸的認識處
  94.       self.bitmap = Cache.character(@battler_name) if N01::WALK_ANIME
  95.       self.bitmap = Cache.character(@battler_name + "_1") unless N01::WALK_ANIME
  96.       # 獲取轉送前的矩形
  97.       @width = self.bitmap.width / @base_width
  98.       @height = self.bitmap.height / @base_height
  99.       # 矩形設定
  100.       @sx = @pattern * @width
  101.       @sy = @anime_kind * @height
  102.       # 角色本體的描繪
  103.       self.src_rect.set(@sx, @sy, @width, @height)
  104.     # 不作動畫的角色時
  105.     else
  106.       # bitmap的獲取、設定
  107.       @battler_name = @battler.battler_name
  108.       self.bitmap = Cache.battler(@battler_name, @battler_hue)
  109.       @width = bitmap.width
  110.       @height = bitmap.height
  111.     end
  112.     # 偷襲時畫像角色是主人公時、或者敵方動畫為NO時
  113.     if $back_attack && @battler.actor?
  114.       self.mirror = true
  115.     elsif $back_attack && [email protected]?
  116.       self.mirror = true
  117.       self.mirror = false if @battler.action_mirror
  118.     else
  119.       self.mirror = false
  120.       self.mirror = true if [email protected]? && @battler.action_mirror
  121.     end
  122.     # ....
  123.     @weapon_R.mirroring if self.mirror && @weapon_R != nil
  124.     # 位置初期化
  125.     @battler.reset_coordinate
  126.     # 決定原點
  127.     self.ox = @width / 2
  128.     self.oy = @height * 2 / 3
  129.     # 設定偷襲時的坐標
  130.     update_move
  131.     # 準備飛出動畫的精靈
  132.     @move_anime = Sprite_MoveAnime.new(viewport,battler)
  133.     # 準備圖片用精靈
  134.     @picture = Sprite.new
  135.     # 作成傷害精靈
  136.     @damage = Sprite_Damage.new(viewport,battler)
  137.   end
  138.   #--------------------------------------------------------------------------
  139.   # ● 影作成
  140.   #--------------------------------------------------------------------------
  141.   def make_shadow
  142.     @shadow.dispose if @shadow != nil
  143.     @battler_hue = @battler.battler_hue
  144.     @shadow = Sprite.new(viewport)
  145.     @shadow.z = self.z - 4
  146.     @shadow.visible = false
  147.     # 準備角色的影子精靈
  148.     @shadow.bitmap = Cache.character(@battler.shadow)
  149.     @shadow_height = @shadow.bitmap.height
  150.     # 影位置的稍微調整
  151.     @shadow_plus_x = @battler.shadow_plus[0] - @width / 2
  152.     @shadow_plus_y = @battler.shadow_plus[1]
  153.     # 配合角色畫像的大小使用影畫像
  154.     @shadow.zoom_x = @width * 1.0 / @shadow.bitmap.width
  155.     # 更新
  156.     update_shadow
  157.   end
  158.   #--------------------------------------------------------------------------
  159.   # ● 解放
  160.   #--------------------------------------------------------------------------
  161.   def dispose
  162.     self.bitmap.dispose if self.bitmap != nil
  163.     @weapon_R.dispose if @weapon_R != nil
  164.     @move_anime.dispose if @move_anime != nil
  165.     @picture.dispose if @picture != nil
  166.     @shadow.dispose if @shadow != nil
  167.     @damage.dispose if @damage != nil
  168.     @balloon.dispose if @balloon != nil
  169.     mirage_off
  170.     # 畫像變更
  171.     @battler.graphic_change(@before_graphic) if @before_graphic != nil
  172.     super
  173.   end  
  174.   #--------------------------------------------------------------------------
  175.   # ● 傷害動作  action = [動畫ID,角色是主人公時、或者敵方動畫為NO時標誌,反方向許可]
  176.   #--------------------------------------------------------------------------
  177.   def damage_action(action)
  178.     damage = @battler.hp_damage
  179.     damage = @battler.mp_damage if @battler.mp_damage != 0
  180.     # 如果HP和MP兩個同時做出傷害
  181.     if @battler.hp_damage != 0 && @battler.mp_damage != 0
  182.       @battler.double_damage = true
  183.       damage = @battler.hp_damage
  184.     end  
  185.     # 吸收攻擊使HP為0的處理
  186.     if action[0] == "absorb"
  187.       absorb = true
  188.       action[0] = nil
  189.     end
  190.     # 只有在命中時動畫才被執行
  191.     unless @battler.evaded or @battler.missed or action[0] == nil
  192.       @battler.animation_id = action[0]
  193.       @battler.animation_mirror = action[1]
  194.     end
  195.     # 執行傷害動畫
  196.     start_action(@battler.damage_hit) if damage > 0 && action[2]
  197.     # 攻擊沒有命中時執行迴避動畫
  198.     if @battler.evaded or @battler.missed
  199.       start_action(@battler.evasion) if action[2]
  200.       Sound.play_evasion
  201.     end
  202.     @damage.damage_pop unless absorb or action[3] != nil
  203.   end
  204.   #--------------------------------------------------------------------------
  205.   # ● 傷害數值POP
  206.   #--------------------------------------------------------------------------
  207.   def damage_pop(damage)
  208.     @damage.damage_pop(damage)
  209.   end  
  210.   #--------------------------------------------------------------------------
  211.   # ● 戰鬥開始行動
  212.   #--------------------------------------------------------------------------
  213.   def first_action
  214.     # 檢查能否行動、只有在不能的情況下那個狀態的動作開始
  215.     action = @battler.first_action unless @battler.restriction >= 4
  216.     action = $data_states[@battler.state_id].base_action if @battler.states[0] != nil && @battler.restriction >= 4
  217.     start_action(action)
  218.     # 影用意
  219.     make_shadow if N01::SHADOW
  220.   end
  221.   #--------------------------------------------------------------------------
  222.   # ● 動作開始
  223.   #--------------------------------------------------------------------------
  224.   def start_action(kind)
  225.     # 初期化各種動作
  226.     reset
  227.     #記錄現在取得的待機動作
  228.     stand_by
  229.     # 決定新的動作內容
  230.     @action = N01::ACTION[kind].dup
  231.     # 從行動配列的前頭開始移動
  232.     active = @action.shift
  233.     # 自動完畢
  234.     @action.push("完畢")
  235.     # 確定現在的動作
  236.     @active_action = N01::ANIME[active]
  237.     # 等待設定
  238.     @wait = active.to_i if @active_action == nil
  239.     # 單獨動作開始
  240.     action
  241.   end
  242.   #--------------------------------------------------------------------------
  243.   # ● 強制單獨動作開始
  244.   #--------------------------------------------------------------------------
  245.   def start_one_action(kind,back)
  246.     # 初期化各種動作
  247.     reset
  248.     # 記錄現在取得的待機動作
  249.     stand_by
  250.     # 設置坐標初始化動作
  251.     @action = [back]
  252.     # 自動完畢
  253.     @action.push("完畢")
  254.     # 確定現在的動作
  255.     @active_action = N01::ANIME[kind]
  256.     # 單獨動作開始
  257.     action
  258.   end
  259.   #--------------------------------------------------------------------------
  260.   # ● 到下一個動作
  261.   #--------------------------------------------------------------------------
  262.   def next_action
  263.     # 等待中時取消
  264.     return @wait -= 1 if @wait > 0
  265.     # 或者全部圖片動畫沒有被完成時取消
  266.     return if @anime_end == false
  267.     # 最後的圖片顯示等待
  268.     return @unloop_wait -= 1 if @unloop_wait > 0
  269.     # 從行動配列的前頭開始移動
  270.     active = @action.shift
  271.     # 確定現在的動作
  272.     @active_action = N01::ANIME[active]
  273.     # 等待設定
  274.     @wait = active.to_i if @active_action == nil
  275.     # 單獨動作開始
  276.     action
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ● 待機動作
  280.   #--------------------------------------------------------------------------
  281.   def stand_by
  282.     # 到通常待機
  283.     @repeat_action = @battler.normal
  284.     # HP為1/4時顯示危急表情
  285.     @repeat_action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
  286.     # 防禦中
  287.     @repeat_action = @battler.defence if @battler.guarding?
  288.     # 如果什麼狀態都沒有時完畢
  289.     return if @battler.state_id == nil
  290.     for state in @battler.states.reverse
  291.       # 動作禁止的狀態時跳過處理
  292.       next if state.extension.include?("禁止狀態動作")
  293.       # 敵方被動作禁止狀態時跳過處理
  294.       next if @battler.is_a?(Game_Enemy) && state.extension.include?("敵方除外")
  295.       #  狀態的表情
  296.       @repeat_action = state.base_action
  297.     end
  298.   end
  299.   #--------------------------------------------------------------------------
  300.   # ● 待機動作的插入
  301.   #--------------------------------------------------------------------------
  302.   def push_stand_by
  303.     action = @battler.normal
  304.     action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
  305.     action = @battler.defence if @battler.guarding?
  306.     for state in @battler.states.reverse
  307.       # 動作禁止的狀態時跳過處理
  308.       next if state.extension.include?("禁止狀態動作")
  309.       # 敵方被動作禁止狀態時跳過處理
  310.       next if @battler.is_a?(Game_Enemy) && state.extension.include?("敵方除外")
  311.       #  狀態的表情
  312.       action = state.base_action
  313.     end
  314.     @repeat_action = action
  315.     #  插入
  316.     @action.delete("完畢")
  317.     act = N01::ACTION[action].dup
  318.     for i in 0...act.size
  319.       @action.push(act[i])
  320.     end  
  321.     @action.push("完畢")
  322.     @anime_end = true
  323.   end
  324.   #--------------------------------------------------------------------------
  325.   # ● 各種變化的初期化
  326.   #--------------------------------------------------------------------------
  327.   def reset
  328.     self.zoom_x = self.zoom_y = 1
  329.     self.oy = @height * 2 / 3
  330.     @angle = self.angle = 0
  331.     @anime_end = true
  332.     @non_repeat = false
  333.     @anime_freeze = false
  334.     @unloop_wait = 0
  335.   end  
  336.   #--------------------------------------------------------------------------
  337.   # ● 跳躍的初期化
  338.   #--------------------------------------------------------------------------
  339.   def jump_reset
  340.     @battler.jump = @jump_time = @jump_time_plus = @jump_up = @jump_down = 0
  341.     @jump_size = @jump_plus = @float_time = @float_up = 0
  342.   end
  343.   #--------------------------------------------------------------------------
  344.   # ● 受取目標情報
  345.   #--------------------------------------------------------------------------
  346.   def get_target(target)
  347.     # 單獨處理中是中止(全區域中自身被捲
  348.     return if @battler.individual
  349.     @target_battler = target
  350.   end
  351.   #--------------------------------------------------------------------------
  352.   # ● 動作情報在角色中收藏
  353.   #--------------------------------------------------------------------------
  354.   def send_action(action)
  355.     @battler.play = 0
  356.     @battler.play = action if @battler.active
  357.   end
  358.   #--------------------------------------------------------------------------
  359.   # ● 角色追加
  360.   #--------------------------------------------------------------------------
  361.   def battler_join
  362.     if @battler.exist? && !@battler_visible
  363.       # 從戰鬥不能的復活時的處理被跳過
  364.       if @battler.revival && @anime_flug
  365.         return @battler.revival = false
  366.       elsif @battler.revival && !@anime_flug
  367.         @battler.revival = false
  368.         self.visible = true
  369.         return
  370.       end
  371.       @anime_flug = true if @battler.actor?
  372.       @anime_flug = true if [email protected]? && @battler.anime_on
  373.       make_battler
  374.       first_action
  375.     end
  376.   end
  377.   #--------------------------------------------------------------------------
  378.   # ● 圖片更新 ※再定義
  379.   #--------------------------------------------------------------------------
  380.   def update
  381.     super
  382.     # 角色不存在時跳過
  383.     return self.bitmap = nil if @battler == nil
  384.     # 追加角色
  385.     battler_join
  386.     # 到下一個動作
  387.     next_action
  388.     # 動畫圖像更新
  389.     update_anime_pattern
  390.     # 目標更新
  391.     update_target
  392.     # 強制更新
  393.     update_force_action
  394.     # 坐標更新
  395.     update_move
  396.     # 影更新
  397.     update_shadow if @shadow != nil
  398.     # 武器更新
  399.     @weapon_R.update if @weapon_action
  400.     # 漂浮更新
  401.     update_float if @float_time > 0
  402.     # 旋轉更新
  403.     update_angle if @angle_time > 0
  404.     # 放大縮小更新
  405.     update_zoom if @zoom_time > 0
  406.     # 殘像更新
  407.     update_mirage if @mirage_flug
  408.     # 圖片更新
  409.     update_picture if @picture_time > 0
  410.     # 飛出動畫更新
  411.     update_move_anime if @anime_moving
  412.     # 飛出動畫更新(圖片動畫)
  413.     update_balloon if @balloon_duration <= 64
  414.     # 傷害精靈更新
  415.     @damage.update if @damage != nil
  416.     setup_new_effect
  417.     update_effect
  418.     update_battler_bitmap
  419.   end
  420.   #--------------------------------------------------------------------------
  421.   # ● 動畫圖像更新
  422.   #--------------------------------------------------------------------------
  423.   def update_anime_pattern
  424.     # 更新時間在到之前跳過
  425.     return @frame -= 1 if @frame != 0
  426.     # 只有在必要的時候更新武器動畫
  427.     @weapon_R.action if @weapon_action && @weapon_R != nil
  428.     # 動畫到最後是檢查是否是循環
  429.     if @pattern_back
  430.       # 往返循環
  431.       if @anime_loop == 0
  432.         # 反向再生
  433.         if @reverse
  434.           @pattern += 1
  435.           if @pattern == @base_width - 1
  436.             @pattern_back = false
  437.             @anime_end = true
  438.           end
  439.         # 通常再生
  440.         else  
  441.           @pattern -= 1
  442.           if @pattern == 0
  443.             @pattern_back = false
  444.             @anime_end = true
  445.           end  
  446.         end  
  447.       # 單程或者是不循環時
  448.       else
  449.         @anime_end = true
  450.         if @anime_loop == 1
  451.           @pattern = 0 if !@reverse
  452.           @pattern = @base_width - 1 if @reverse
  453.           @pattern_back = false
  454.         end  
  455.       end  
  456.     # 推進動畫      
  457.     else
  458.       if @reverse
  459.         @pattern -= 1
  460.         @pattern_back = true if @pattern == 0
  461.       else  
  462.         @pattern += 1
  463.         @pattern_back = true if @pattern == @base_width - 1
  464.       end  
  465.     end
  466.     # 初期化更新時間
  467.     @frame = @anime_speed
  468.     # 動畫固定時,固定橫矩形
  469.     return if @anime_freeze
  470.     # 設定轉送處的矩形
  471.     return unless @anime_flug
  472.     @sx = @pattern * @width
  473.     @sy = @anime_kind * @height
  474.     self.src_rect.set(@sx, @sy, @width, @height)
  475.   end
  476.   #--------------------------------------------------------------------------
  477.   # ● 動畫圖像更新
  478.   #--------------------------------------------------------------------------
  479.   def update_target
  480.     # 目標確認
  481.     return if @battler.force_target == 0
  482.     # 單獨處理中中止(全區域中自身被捲入時目標情報是不是)
  483.     return if @battler.individual
  484.     @target_battler = @battler.force_target[1]
  485.     @battler.force_target = 0
  486.   end  
  487.   #--------------------------------------------------------------------------
  488.   # ● 強制動作更新 action = [識別,復原,實行動作]
  489.   #--------------------------------------------------------------------------
  490.   def update_force_action
  491.     # 確認強制動作
  492.     action = @battler.force_action
  493.     return if action == 0
  494.     @battler.force_action = 0
  495.     # 主動中不能插入
  496.     return if @battler.active
  497.     # 擊倒時就那樣直接連接行動
  498.     return collapse_action if action[0] == "N01collapse"
  499.     # 單獨時就那樣直接連接
  500.     return start_one_action(action[2],action[1]) if action[0] == "單獨"
  501.     # 通用作為動作對待
  502.     start_action(action[2])
  503.     # 有無坐標復原
  504.     return if action[1] == ""
  505.     # 完畢位置替換成重複動作
  506.     @action.delete("完畢")
  507.     @action.push(action[1])
  508.     @action.push("完畢")
  509.   end   
  510.   #--------------------------------------------------------------------------
  511.   # ● 坐標更新
  512.   #--------------------------------------------------------------------------
  513.   def update_move
  514.     # 補完加減速中距離的增減
  515.     if @move_speed_plus_x > 0
  516.       # 計算移動
  517.       @move_x += @moving_x
  518.       # 實行移動
  519.       @battler.move_x = @move_x
  520.       @move_speed_plus_x -= 1
  521.     elsif @move_speed_x > 0
  522.       # 加速時
  523.       if @move_boost_x != 0
  524.         @moving_x += @move_boost_x
  525.       end  
  526.       # 計算移動
  527.       @move_x += @moving_x
  528.       # 實行移動
  529.       @battler.move_x = @move_x
  530.       @move_speed_x -= 1
  531.     end
  532.     # 補完加減速中距離的增減
  533.     if @move_speed_plus_y > 0
  534.       # 計算移動
  535.       @move_y += @moving_y
  536.       # 實行移動
  537.       @battler.move_y = @move_y
  538.       @move_speed_plus_y -= 1
  539.     elsif @move_speed_y > 0
  540.       # 加速時
  541.       if @move_boost_y != 0
  542.         @moving_y += @move_boost_y
  543.       end  
  544.       # 計算移動
  545.       @move_y += @moving_y
  546.       # 實行移動
  547.       @battler.move_y = @move_y
  548.       @move_speed_y -= 1
  549.     end
  550.     # 跳躍上升
  551.     if @jump_up != 0
  552.       # 計算移動
  553.       @jump_plus += @jump_up
  554.       # 實行移動
  555.       @battler.jump = @jump_plus
  556.       @jump_up = @jump_up / 2
  557.       @jump_time -= 1
  558.       # 如果跳躍到了頂點時
  559.       if @jump_time == 0 or @jump_up == @jump_sign
  560.         @jump_down = @jump_up * 2 * @jump_sign * @jump_sign2
  561.         @jump_time_plus += @jump_time * 2
  562.         @jump_up = 0
  563.         return
  564.       end  
  565.     end  
  566.     # 跳躍下降
  567.     if @jump_down != 0
  568.       if @jump_time_plus != 0
  569.         @jump_time_plus -= 1
  570.       elsif @jump_down != @jump_size
  571.         # 計算移動
  572.         @jump_plus += @jump_down
  573.         # 實行移動
  574.         @battler.jump = @jump_plus
  575.         @jump_down = @jump_down * 2
  576.         if @jump_down == @jump_size
  577.           if @jump_flug
  578.             @jump_flug = false
  579.           else
  580.             # 計算移動
  581.             @jump_plus += @jump_down
  582.             # 實行移動
  583.             @battler.jump = @jump_plus
  584.             @jump_down = @jump_size = 0
  585.           end
  586.         end  
  587.       end
  588.     end
  589.     # 設定精靈的坐標
  590.     self.x = @battler.position_x
  591.     self.y = @battler.position_y
  592.     self.z = @battler.position_z
  593.   end
  594.   #--------------------------------------------------------------------------
  595.   # ● 影更新
  596.   #--------------------------------------------------------------------------
  597.   def update_shadow
  598.     @shadow.opacity = self.opacity
  599.     @shadow.x = @battler.position_x + @shadow_plus_x
  600.     @shadow.y = @battler.position_y + @shadow_plus_y - @jump_plus
  601.     @shadow.z = @battler.position_z - 4
  602.   end
  603.   #--------------------------------------------------------------------------
  604.   # ● 漂浮更新
  605.   #--------------------------------------------------------------------------
  606.   def update_float
  607.     @float_time -= 1
  608.     @jump_plus += @float_up
  609.     @battler.jump = @jump_plus
  610.   end   
  611.   #--------------------------------------------------------------------------
  612.   # ● 旋轉更新
  613.   #--------------------------------------------------------------------------
  614.   def update_angle
  615.     # 實行旋轉
  616.     @angle += @angling
  617.     self.angle = @angle
  618.     @angle_time -= 1
  619.     # 旋轉時間結束時項目初始化
  620.     return @angle = 0 if @angle_time == 0
  621.     # 如果有復原標誌時角度返回0
  622.     self.angle = 0 if @angle_reset
  623.   end  
  624.   #--------------------------------------------------------------------------
  625.   # ● 擴大縮小更新
  626.   #--------------------------------------------------------------------------
  627.   def update_zoom
  628.     # 實行擴大縮小
  629.     @zoom_x += @zooming_x
  630.     @zoom_y += @zooming_y
  631.     self.zoom_x = @zoom_x
  632.     self.zoom_y = @zoom_y
  633.     @zoom_time -= 1
  634.     # 擴大縮小時間結束時項目初始化
  635.     return if @zoom_time != 0
  636.     @zoom_x = @zoom_y = 0
  637.     self.oy = @height * 2 / 3
  638.     # 如果有復原標誌時還原
  639.     self.zoom_x = self.zoom_y = 1 if @zoom_reset
  640.   end  
  641.   #--------------------------------------------------------------------------
  642.   # ● 殘像更新
  643.   #--------------------------------------------------------------------------
  644.   def update_mirage
  645.     # 殘像最大能顯示3個、2格圖片中更新
  646.     mirage(@mirage0) if @mirage_count == 1
  647.     mirage(@mirage1) if @mirage_count == 3
  648.     mirage(@mirage2) if @mirage_count == 5
  649.     @mirage_count += 1
  650.     @mirage_count = 0 if @mirage_count == 6
  651.   end
  652.   #--------------------------------------------------------------------------
  653.   # ● 圖片更新
  654.   #--------------------------------------------------------------------------
  655.   def update_picture
  656.     @picture_time -= 1
  657.     @picture.x += @moving_pic_x
  658.     @picture.y += @moving_pic_y
  659.   end  
  660.   #--------------------------------------------------------------------------
  661.   # ● 飛出動畫 更新
  662.   #--------------------------------------------------------------------------
  663.   def update_move_anime
  664.     @move_anime.update
  665.     @anime_moving = false if @move_anime.finish?
  666.     @move_anime.action_reset if @move_anime.finish?
  667.   end  
  668.   #--------------------------------------------------------------------------
  669.   # ● 崩壞效果的更新 ※再定義
  670.   #--------------------------------------------------------------------------
  671.   def update_collapse
  672.     normal_collapse if @collapse_type == 2
  673.     boss_collapse1 if @collapse_type == 3
  674.   end
  675.   #--------------------------------------------------------------------------
  676.   # ● 飛出動畫更新 (圖片動畫)
  677.   #--------------------------------------------------------------------------
  678.   def update_balloon
  679.     @balloon_duration -= 1 if @balloon_duration > 0 && !@balloon_back
  680.     @balloon_duration += 1 if @balloon_back
  681.     if @balloon_duration == 64
  682.       @balloon_back = false
  683.       @balloon.visible = false
  684.     elsif @balloon_duration == 0
  685.       @balloon.visible = false if @balloon_loop == 0
  686.       @balloon_back = true if @balloon_loop == 1
  687.     end   
  688.     @balloon.x = self.x
  689.     @balloon.y = self.y
  690.     @balloon.z = 10
  691.     @balloon.opacity = self.opacity
  692.     sx = 7 * 32 if @balloon_duration < 12
  693.     sx = (7 - (@balloon_duration - 12) / 8) * 32 unless @balloon_duration < 12
  694.     @balloon.src_rect.set(sx, @balloon_id * 32, 32, 32)
  695.   end
  696.   #--------------------------------------------------------------------------
  697.   # ● 轉送處bitmap的更新 ※再定義
  698.   #--------------------------------------------------------------------------
  699.   def update_battler_bitmap
  700.     if @battler.actor?
  701.       if @battler.character_name != @battler_name or @battler.battler_hue != @battler_hue
  702.         @battler_name = @battler.character_name
  703.         @battler_hue = @battler.battler_hue
  704.       end
  705.     else
  706.       if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
  707.         @battler_name = @battler.battler_name
  708.         @battler_hue = @battler.battler_hue
  709.       end
  710.       if [email protected]?
  711.         self.opacity = 0 if @effect_duration == 0 && @battler.collapse_type != 1
  712.       end  
  713.     end  
  714.   end
  715.   #--------------------------------------------------------------------------
  716.   # ● 實行動作
  717.   #--------------------------------------------------------------------------
  718.   def action
  719.     return if @active_action == nil
  720.     action = @active_action[0]
  721.     # 反轉時
  722.     return mirroring if action == "反轉"
  723.     # 旋轉時   
  724.     return angling if action == "angle"
  725.     # 擴大縮小時  
  726.     return zooming if action == "zoom"
  727.     # 殘像ON時
  728.     return mirage_on if action == "殘像ON"
  729.     # 殘像OFF時
  730.     return mirage_off if action == "殘像OFF"
  731.     # 圖片表示時
  732.     return picture if action == "pic"
  733.     # 圖片消去時
  734.     return @picture.visible = false && @picture_time = 0 if action == "消去圖片"
  735.     # 圖片文件變更時  
  736.     return graphics_change if action == "change"
  737.     # 戰鬥動畫表示時  
  738.     return battle_anime if action == "anime"
  739.     # 飛出動畫表示時 (圖片動畫)
  740.     return balloon_anime if action == "balloon"
  741.     #  BGM/BGS/SE演奏時   
  742.     return sound if action == "sound"
  743.     # 遊戲開關操作時  
  744.     return $game_switches[@active_action[1]] = @active_action[2] if action == "switch"
  745.     # 遊戲變量操作時   
  746.     return variable if action == "variable"
  747.     # 二刀限定時
  748.     return two_swords if action == "二刀限定"
  749.     # 非二刀限定時
  750.     return non_two_swords if action == "非二刀限定"
  751.     # 動作條件時
  752.     return necessary if action == "nece"
  753.     # 技能連發時   
  754.     return derivating if action == "der"
  755.     # 單獨處理開始時
  756.     return individual_action if action == "個別處理開始"
  757.     # 單獨處理完畢時
  758.     return individual_action_end if action == "個別處理完畢"
  759.     # 待機不能移動場合
  760.     return non_repeat if action == "待機不能移動"
  761.     # 變更初期位置時
  762.     return @battler.change_base_position(self.x, self.y) if action == "變更初期位置"
  763.     # 解除變更初期位置
  764.     return @battler.base_position if action == "變更初期位置解除"
  765.     # 變更目標時   
  766.     return change_target if action == "target"
  767.     # 目標的擊倒許可
  768.     return send_action(action) if action == "擊倒許可"
  769.     # 解除主動
  770.     return send_action(action) if action == "解除主動"
  771.     # 賦予狀態時  
  772.     return state_on if action == "sta+"
  773.     # 解除狀態時  
  774.     return state_off if action == "sta-"
  775.     # 變更遊戲整體的行進速度時
  776.     return Graphics.frame_rate = @active_action[1] if action == "fps"
  777.     # 漂浮時  
  778.     return floating if action == "float"
  779.     # 腳本操作時   
  780.     return eval(@active_action[1]) if action == "script"
  781.     # 強制動作時  
  782.     return force_action if @active_action.size == 4
  783.     # 坐標初始化時  
  784.     return reseting if @active_action.size == 5
  785.     # 移動時
  786.     return moving if @active_action.size == 7
  787.     # 角色動畫時
  788.     return battler_anime if @active_action.size == 9
  789.     # 動畫飛時
  790.     return moving_anime if @active_action.size == 11
  791.     # 完畢時
  792.     return anime_finish if action == "完畢"
  793.   end
  794.   #--------------------------------------------------------------------------
  795.   # ● 實行反轉
  796.   #--------------------------------------------------------------------------
  797.   def mirroring  
  798.     # 如果已經反轉就還原
  799.     if self.mirror
  800.       self.mirror = false
  801.       # 武器動畫也反映
  802.       @weapon_R.mirroring if @anime_flug
  803.     else
  804.       self.mirror = true
  805.       # 武器動畫也反映
  806.       @weapon_R.mirroring if @anime_flug
  807.     end
  808.   end  
  809.   #--------------------------------------------------------------------------
  810.   # ● 實行旋轉
  811.   #--------------------------------------------------------------------------
  812.   def angling  
  813.     # 初期化跳躍
  814.     jump_reset
  815.     # 情報確認
  816.     @angle_time = @active_action[1]
  817.     start_angle = @active_action[2]
  818.     end_angle = @active_action[3]
  819.     @angle_reset = @active_action[4]
  820.     # 襲擊時時逆轉
  821.     start_angle *= -1 if $back_attack
  822.     end_angle *= -1 if $back_attack
  823.     # 敵方被逆轉
  824.     start_angle *= -1 if @battler.is_a?(Game_Enemy)
  825.     end_angle *= -1 if @battler.is_a?(Game_Enemy)
  826.     # 時間要是0以下時立即到最後角度
  827.     if @angle_time <= 0
  828.       self.angle = end_angle
  829.       return  @angle_time = 0
  830.     end  
  831.     # 從旋轉時間計算一格相當於的角度
  832.     @angling = (end_angle - start_angle) / @angle_time
  833.     # 不能整除的剩餘到初期角度
  834.     @angle = (end_angle - start_angle) % @angle_time + start_angle
  835.   end
  836.   #--------------------------------------------------------------------------
  837.   # ● 實行放大縮小
  838.   #--------------------------------------------------------------------------
  839.   def zooming  
  840.     # 初期化跳躍
  841.     jump_reset
  842.     # 情報確認
  843.     @zoom_time = @active_action[1]
  844.     zoom_x = @active_action[2] - 1
  845.     zoom_y = @active_action[3] - 1
  846.     @zoom_reset = @active_action[4]
  847.     @zoom_x = @zoom_y = 1
  848.     # 時間是0以下時跳過
  849.     return @zoom_time = 0 if @zoom_time <= 0
  850.     # 從放大時間中計算一格相當於的放大率
  851.     @zooming_x = zoom_x / @zoom_time
  852.     @zooming_y = zoom_y / @zoom_time
  853.   end  
  854.   #--------------------------------------------------------------------------
  855.   # ● 殘像開始
  856.   #--------------------------------------------------------------------------
  857.   def mirage_on
  858.     # 戰鬥不能時不表現殘像
  859.     return if @battler.dead?
  860.     @mirage0 = Sprite.new(self.viewport)
  861.     @mirage1 = Sprite.new(self.viewport)
  862.     @mirage2 = Sprite.new(self.viewport)
  863.     @mirage_flug = true
  864.     @mirage_count = 0
  865.   end  
  866.   #--------------------------------------------------------------------------
  867.   # ● 殘像表示
  868.   #--------------------------------------------------------------------------
  869.   def mirage(body)
  870.     body.bitmap = self.bitmap.dup
  871.     body.x = self.x
  872.     body.y = self.y
  873.     body.ox = self.ox
  874.     body.oy = self.oy
  875.     body.z = self.z
  876.     body.mirror = self.mirror
  877.     body.angle = @angle
  878.     body.opacity = 160
  879.     body.zoom_x = self.zoom_x
  880.     body.zoom_y = self.zoom_y   
  881.     body.src_rect.set(@sx, @sy, @width, @height) if @anime_flug
  882.     body.src_rect.set(0, 0, @width, @height) unless @anime_flug
  883.   end   
  884.   #--------------------------------------------------------------------------
  885.   # ● 殘像完畢
  886.   #--------------------------------------------------------------------------
  887.   def mirage_off
  888.     @mirage_flug = false
  889.     @mirage0.dispose if @mirage0 != nil
  890.     @mirage1.dispose if @mirage1 != nil
  891.     @mirage2.dispose if @mirage2 != nil
  892.   end   
  893.   #--------------------------------------------------------------------------
  894.   # ● 圖片表示
  895.   #--------------------------------------------------------------------------
  896.   def picture
  897.     # 確認移動開始位置
  898.     pic_x = @active_action[1]
  899.     pic_y = @active_action[2]
  900.     # 確認移動完畢位置
  901.     pic_end_x = @active_action[3]
  902.     pic_end_y = @active_action[4]
  903.     @picture_time = @active_action[5]
  904.     # 用時間除、計算一個相當於的移動速度
  905.     @moving_pic_x = (pic_end_x - pic_x)/ @picture_time
  906.     @moving_pic_y = (pic_end_y - pic_y)/ @picture_time
  907.     # 不能整除時到最初上加算
  908.     plus_x = (pic_end_x - pic_x)% @picture_time
  909.     plus_y = (pic_end_y - pic_y)% @picture_time
  910.     # 圖片表示
  911.     @picture.bitmap = Cache.picture(@active_action[7])
  912.     @picture.x = pic_x + plus_x
  913.     @picture.y = pic_y + plus_y
  914.     # Z坐標調整
  915.     @picture.z = 1
  916.     @picture.z = 1000 if @active_action[6]
  917.     @picture.visible = true
  918.   end
  919.   #--------------------------------------------------------------------------
  920.   # ● 圖像文件變更
  921.   #--------------------------------------------------------------------------
  922.   def graphics_change  
  923.     # 主人公限定
  924.     return if @battler.is_a?(Game_Enemy)
  925.     # 圖像變更
  926.     @battler_name = @active_action[2]
  927.     # 是否使用步行圖像中改變轉送處的矩形
  928.     self.bitmap = Cache.character(@battler_name) if N01::WALK_ANIME
  929.     self.bitmap = Cache.character(@battler_name + "_1") unless N01::WALK_ANIME
  930.     # 獲取轉送處的矩形
  931.     @width = self.bitmap.width / @base_width
  932.     @height = self.bitmap.height / @base_height
  933.     # 如果想讓戰鬥後的人物圖也顯示為變更
  934.     @before_graphic = @battler.character_name if @active_action[1]
  935.     @battler.graphic_change(@active_action[2])
  936.   end  
  937.   #--------------------------------------------------------------------------
  938.   # ● 顯示戰鬥動畫 [判別,ID,對像,反轉,等待,二刀標誌]
  939.   #--------------------------------------------------------------------------
  940.   def battle_anime
  941.     # 取消敵人的二刀標誌動畫處理
  942.     return if @active_action[5] && [email protected]?
  943.     # 不是二刀的角色,取消二刀標誌動畫處
  944.     return if @active_action[5] && @battler.weapons[1] == nil
  945.     # 如果二刀為右手(上面設置過)無武器
  946.     if @battler.actor?
  947.       return if !@active_action[5] && @battler.weapons[0] == nil && @battler.weapons[1] != nil
  948.     end
  949.     anime_id = @active_action[1]
  950.     # 偷襲時動畫畫像被反轉
  951.     if $back_attack
  952.       mirror = true if @active_action[3] == false
  953.       mirror = false if @active_action[3]
  954.     end
  955.     # 武器和技能動畫時
  956.     if anime_id < 0
  957.       # 用行動的種類分歧動畫處
  958.       if @battler.action.skill? && anime_id != -2
  959.         anime_id = @battler.action.skill.animation_id
  960.       elsif @battler.action.item? && anime_id != -2
  961.         anime_id = @battler.action.item.animation_id
  962.       else
  963.         # 沒有武器時使用空手動畫
  964.         anime_id = N01::NO_WEAPON
  965.         if @battler.actor?
  966.           weapon_id = @battler.weapon_id
  967.           anime_id = $data_weapons[weapon_id].animation_id if weapon_id != 0
  968.           # 二刀動畫時
  969.           anime_id = @battler.atk_animation_id2 if @active_action[5]
  970.         else
  971.           weapon_id = @battler.weapon
  972.           anime_id = $data_weapons[weapon_id].animation_id if weapon_id != 0
  973.         end
  974.       end
  975.       # 等待設定
  976.       @wait = $data_animations[anime_id].frame_max * 4 if $data_animations[anime_id] != nil && @active_action[4]
  977.       waitflug = true
  978.       # 顯示傷害動畫時、為了先計算出傷害計
  979.       damage_action = [anime_id, mirror, true]
  980.       return @battler.play = ["對像動畫",damage_action] if @battler.active
  981.     end
  982.     # 實行動畫
  983.     if @active_action[2] == 0 && $data_animations[anime_id] != nil
  984.       @battler.animation_id = anime_id
  985.       @battler.animation_mirror = mirror
  986.     elsif $data_animations[anime_id] != nil
  987.       for target in @target_battler
  988.         target.animation_id = anime_id
  989.         target.animation_mirror = mirror
  990.       end  
  991.     end
  992.     # 等待設定
  993.     @wait = $data_animations[anime_id].frame_max * 4 if $data_animations[anime_id] != nil && @active_action[4] && !waitflug
  994.   end
  995.   #--------------------------------------------------------------------------
  996.   # ● 顯示飛出動畫 (圖片動畫)
  997.   #--------------------------------------------------------------------------
  998.   def balloon_anime
  999.     return if self.opacity == 0
  1000.     if @balloon == nil
  1001.       @balloon = Sprite.new
  1002.       @balloon.bitmap = Cache.system("Balloon")
  1003.       @balloon.ox = @width / 16
  1004.       @balloon.oy = @balloon.height / 10 + @height / 3
  1005.     end
  1006.     @balloon_id = @active_action[1]
  1007.     @balloon_loop = @active_action[2]
  1008.     @balloon_duration = 64
  1009.     @balloon_back = false
  1010.     update_balloon
  1011.     @balloon.visible = true
  1012.   end  
  1013.   #--------------------------------------------------------------------------
  1014.   # ● BGM/BGS/SE演奏
  1015.   #--------------------------------------------------------------------------
  1016.   def sound   
  1017.     # 獲取情報
  1018.     pitch = @active_action[2]
  1019.     vol =  @active_action[3]
  1020.     name = @active_action[4]
  1021.     # 實行
  1022.     case @active_action[1]
  1023.     when "se"
  1024.       Audio.se_play("Audio/SE/" + name, vol, pitch)
  1025.     when "bgm"
  1026.       # 沒有指定名字時、不改變現在的BGM
  1027.       if @active_action[4] == ""
  1028.         now_bgm = RPG::BGM.last
  1029.         name = now_bgm.name
  1030.       end
  1031.       Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
  1032.     when "bgs"
  1033.       # 沒有指定名字時、不改變現在的BGS
  1034.       if @active_action[4] == ""
  1035.         now_bgs = RPG::BGS.last
  1036.         name = now_bgs.name
  1037.       end
  1038.       Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
  1039.     end
  1040.   end
  1041.   #--------------------------------------------------------------------------
  1042.   # ● 遊戲變量操作
  1043.   #--------------------------------------------------------------------------
  1044.   def variable
  1045.     # 檢查操作
  1046.     operand = @active_action[3]
  1047.     # 變數操作的分歧
  1048.     case @active_action[2]
  1049.     when 0 # 代入
  1050.       $game_variables[@active_action[1]] = operand
  1051.     when 1 # 加算
  1052.       $game_variables[@active_action[1]] += operand
  1053.     when 2 # 減算
  1054.       $game_variables[@active_action[1]] -= operand
  1055.     when 3 # 乘算
  1056.       $game_variables[@active_action[1]] *= operand
  1057.     when 4 # 除算
  1058.       $game_variables[@active_action[1]] /= operand
  1059.     when 5 # 剩餘
  1060.       $game_variables[@active_action[1]] %= operand
  1061.     end
  1062.   end  
  1063.   #--------------------------------------------------------------------------
  1064.   # ● 二刀限定
  1065.   #--------------------------------------------------------------------------
  1066.   def two_swords
  1067.     # 敵方不被處理
  1068.     return @action.shift unless @battler.actor?
  1069.     # 左手(下部顯示)沒有武器就會消除下面
  1070.     return @action.shift if @battler.weapons[1] == nil
  1071.     # 從行動配類的前面移動
  1072.     active = @action.shift
  1073.     # 確定現在的動作
  1074.     @active_action = N01::ANIME[active]
  1075.     # 等待設定
  1076.     @wait = active.to_i if @active_action == nil
  1077.     # 單獨動作開始
  1078.     action
  1079.   end
  1080.   #--------------------------------------------------------------------------
  1081.   # ● 非二刀限定
  1082.   #--------------------------------------------------------------------------
  1083.   def non_two_swords
  1084.     # 敵方不被處理
  1085.     return unless @battler.actor?
  1086.     # 左手(下部顯示)沒有武器就會消除下面
  1087.     return @action.shift if @battler.weapons[1] != nil
  1088.     # 從行動配類的前面移動
  1089.     active = @action.shift
  1090.     # 確定現在的動作
  1091.     @active_action = N01::ANIME[active]
  1092.     # 等待設定
  1093.     @wait = active.to_i if @active_action == nil
  1094.     # 單獨動作開始
  1095.     action
  1096.   end
  1097.   #--------------------------------------------------------------------------
  1098.   # ● 動作條件
  1099.   #--------------------------------------------------------------------------
  1100.   def necessary
  1101.     nece1 = @active_action[3]
  1102.     nece2 = @active_action[4]
  1103.     # 目標確認
  1104.     case @active_action[1]
  1105.     #0自身 1目標 2敵全體 3我方全體
  1106.     when 0
  1107.       target = [$game_party.members[@battler.index]] if @battler.is_a?(Game_Actor)
  1108.       target = [$game_troop.members[@battler.index]] if @battler.is_a?(Game_Enemy)
  1109.     when 1
  1110.       target = @target_battler
  1111.     when 2
  1112.       target = $game_troop.members
  1113.     when 3
  1114.       target = $game_party.members
  1115.     end
  1116.     # 目標為空出時看作失敗
  1117.     return start_action(@battler.recover_action) if target.size == 0
  1118.     # 內容確認
  1119.     case @active_action[2]
  1120.     # 指定了狀態ID時
  1121.     when 0
  1122.       # 補充正號為「正在此狀態」、負號為「不在此狀態」的條件
  1123.       state_on = true if nece2 > 0
  1124.       # 獲取條件人數
  1125.       state_member = nece2.abs
  1126.       # 0從隊友數中獲取
  1127.       if nece2 == 0
  1128.         state_member = $game_party.members.size if @battler.is_a?(Game_Actor)
  1129.         state_member = $game_troop.members.size if @battler.is_a?(Game_Enemy)
  1130.       end  
  1131.       # 目標的狀態確認後清點人數
  1132.       for member in target
  1133.         state_member -= 1 if member.state?(nece1)
  1134.       end
  1135.       # 條件全部滿足後執行動作
  1136.       if state_member == 0 && state_on
  1137.         return
  1138.       elsif state_member == nece2.abs
  1139.         return if state_on == nil
  1140.       end  
  1141.     # 指定了參數時
  1142.     when 1  
  1143.       # 補充了正號為「數值以上」、負號為「數值以下」的條件
  1144.       num_over = true if nece2 > 0
  1145.       # 參照數值
  1146.       num = 0
  1147.       # 確認目標的參數
  1148.       for member in target
  1149.         # 參照參數來分歧
  1150.         case  nece1
  1151.         when 0 # 現HP
  1152.           num += member.hp
  1153.         when 1 # 現MP
  1154.           num += member.mp
  1155.         when 2 # 攻擊力
  1156.           num += member.atk
  1157.         when 3 # 防禦力
  1158.           num += member.def
  1159.         when 4 # 精神力
  1160.           num += member.spi
  1161.         when 5 # 敏捷性
  1162.           num += member.agi
  1163.         end
  1164.       end
  1165.       # 平均
  1166.       num = num / target.size
  1167.       # 條件全部滿足後執行動作
  1168.       if num > nece2.abs && num_over
  1169.         return
  1170.       elsif num < nece2.abs
  1171.         return if num_over == nil
  1172.       end
  1173.     # 指定了開關時
  1174.     when 2
  1175.       # 條件全部滿足後執行動作
  1176.       if $game_switches[nece1]
  1177.         # 補充為true時「開關ON」、false時「開關OFF」的條件
  1178.         return if nece2
  1179.       # 開關為OFF時與ON時是相反的  
  1180.       else
  1181.         return unless nece2
  1182.       end  
  1183.     # 指定了變量時
  1184.     when 3
  1185.       #補充為正號時「數值以上」、負號時「數值以下」的條件
  1186.       if nece2 > 0
  1187.         return if $game_variables[nece1] > nece2
  1188.       else
  1189.         return unless $game_variables[nece1] > nece2.abs
  1190.       end
  1191.     # 指定了習得技能時
  1192.     when 4
  1193.       # 獲取技能條件人數
  1194.       skill_member = nece2.abs
  1195.       for member in target
  1196.         skill_member -= 1 if member.skill_learn?(nece1)
  1197.         # 條件確認
  1198.         return if skill_member == 0
  1199.       end  
  1200.     end
  1201.     # 條件沒有被滿足時動作中斷
  1202.     return @action = ["完畢"] if @non_repeat
  1203.     # 不讓防禦中看起來不自然,坐標不被還原
  1204.     action = @battler.recover_action
  1205.     action = @battler.defence if @battler.guarding?
  1206.     return start_action(action)
  1207.   end  
  1208.   #--------------------------------------------------------------------------
  1209.   # ● 技能連發
  1210.   #--------------------------------------------------------------------------
  1211.   def derivating
  1212.     # 如果讓沒學的的技能不能連發時
  1213.     return if !@active_action[2] && [email protected]_id_learn?(@active_action[3])
  1214.     # 確率分岐
  1215.     return if rand(100) > @active_action[1]
  1216.     # 連發成功
  1217.     @battler.derivation = @active_action[3]
  1218.     # 之後的動作被中斷
  1219.     @action = ["完畢"]
  1220.   end
  1221.   #--------------------------------------------------------------------------
  1222.   # ● 個別處理開始
  1223.   #--------------------------------------------------------------------------
  1224.   def individual_action
  1225.     # 反覆標誌ON
  1226.     @battler.individual = true
  1227.     # 保持反覆動作
  1228.     @individual_act = @action.dup
  1229.     # 保持目標、一個一個的發出行動目標
  1230.     send_action(["個別處理"])
  1231.     @individual_targets = @target_battler.dup
  1232.     @target_battler = [@individual_targets.shift]
  1233.   end
  1234.   #--------------------------------------------------------------------------
  1235.   # ● 個別處理完畢
  1236.   #--------------------------------------------------------------------------
  1237.   def individual_action_end
  1238.     # 目標沒有殘留時行動完畢
  1239.     return @battler.individual = false if @individual_targets.size == 0
  1240.     @action = @individual_act.dup
  1241.     @target_battler = [@individual_targets.shift]
  1242.   end  
  1243.   #--------------------------------------------------------------------------
  1244.   # ● 待機不能移動
  1245.   #--------------------------------------------------------------------------
  1246.   def non_repeat
  1247.     @repeat_action = []
  1248.     @non_repeat = true
  1249.     anime_finish
  1250.   end  
  1251.   #--------------------------------------------------------------------------
  1252.   # ● 目標變更 action = [判別, 變更對像, 變更處]
  1253.   #--------------------------------------------------------------------------
  1254.   def change_target
  1255.     # 還原自身變更了的目標
  1256.     return @target_battler = @now_targets.dup if @active_action[2] == 3
  1257.     # 發送目標情報
  1258.     target = [@battler] if @active_action[2] == 0
  1259.     target = @target_battler.dup if @active_action[2] != 0
  1260.     # 自身的目標發送到對方時、記錄現在的
  1261.     if @active_action[2] == 2
  1262.       @now_targets = @target_battler.dup
  1263.       @target_battler = []
  1264.     end  
  1265.     # 發送目標指定目錄時
  1266.     if @active_action[1] >= 1000
  1267.       members = $game_party.members if @battler.actor?
  1268.       members = $game_troop.members unless @battler.actor?
  1269.       index = @active_action[1] - 1000
  1270.       if index < members.size
  1271.         if members[index].exist? && @battler.index != index
  1272.           # 目標變更
  1273.           members[index].force_target = ["N01target_change", target]
  1274.           # 自身的目標發送到相手時
  1275.           @target_battler = [members[index]] if @active_action[2] == 2
  1276.           change = true
  1277.         else
  1278.           for member in members
  1279.             next if @battler.index == member.index
  1280.             next unless member.exist?
  1281.             member.force_target = ["N01target_change", target]
  1282.             @target_battler = [member] if @active_action[2] == 2
  1283.             break change = true
  1284.           end
  1285.         end
  1286.       end
  1287.     # 指定了發送目標的狀態ID時
  1288.     elsif @active_action[1] > 0
  1289.       for member in $game_party.members + $game_troop.members
  1290.         if member.state?(@active_action[1])
  1291.           member.force_target = ["N01target_change", target]
  1292.           @target_battler.push(member) if @active_action[2] == 2
  1293.           change = true
  1294.         end  
  1295.       end  
  1296.     # 指定了發送目標學的的技能時
  1297.     elsif @active_action[1] < 0
  1298.       skill_id = @active_action[1].abs
  1299.       for actor in $game_party.members
  1300.         if actor.skill_id_learn?(skill_id)
  1301.           actor.force_target = ["N01target_change", target]
  1302.           @target_battler.push(target) if @active_action[2] == 2
  1303.           change = true
  1304.         end  
  1305.       end
  1306.     # 發送目標是目標時
  1307.     else
  1308.       for member in @target_battler
  1309.         member.force_target = ["N01target_change", target]
  1310.         @target_battler.push(member) if @active_action[2] == 2
  1311.         change = true
  1312.       end
  1313.     end
  1314.     # 條件沒有被滿足時動作中斷
  1315.     return if change
  1316.     return @action = ["完畢"] if @non_repeat
  1317.     return start_action(@battler.recover_action)
  1318.   end   
  1319.   #--------------------------------------------------------------------------
  1320.   # ● 狀態付與
  1321.   #--------------------------------------------------------------------------
  1322.   def state_on  
  1323.     state_id = @active_action[2]
  1324.     # 分歧對像
  1325.     case @active_action[1]
  1326.     when 0
  1327.       @battler.add_state(state_id) if rand(100) < @battler.state_probability(state_id)
  1328.     when 1
  1329.       if @target_battler != nil
  1330.         for target in @target_battler
  1331.           target.add_state(state_id) if rand(100) < target.state_probability(state_id)
  1332.         end
  1333.       end
  1334.     when 2
  1335.       for target in $game_troop.members
  1336.         target.add_state(state_id) if rand(100) < target.state_probability(state_id)
  1337.       end
  1338.     when 3
  1339.       for target in $game_party.members
  1340.         target.add_state(state_id) if rand(100) < target.state_probability(state_id)
  1341.       end
  1342.     when 4
  1343.       for target in $game_party.members
  1344.         if target.index != @battler.index
  1345.           target.add_state(state_id) if rand(100) < target.state_probability(state_id)
  1346.         end  
  1347.       end
  1348.     end
  1349.   end
  1350.   #--------------------------------------------------------------------------
  1351.   # ● 狀態解除
  1352.   #--------------------------------------------------------------------------
  1353.   def state_off  
  1354.     state_id = @active_action[2]
  1355.     # 分歧對像
  1356.     case @active_action[1]
  1357.     when 0
  1358.       @battler.remove_state(state_id)
  1359.     when 1
  1360.       if @target_battler != nil
  1361.         for target in @target_battler
  1362.           target.remove_state(state_id)
  1363.         end
  1364.       end
  1365.     when 2
  1366.       for target in $game_troop.members
  1367.         target.remove_state(state_id)
  1368.       end
  1369.     when 3
  1370.       for target in $game_party.members
  1371.         target.remove_state(state_id)
  1372.       end
  1373.     when 4
  1374.       for target in $game_party.members
  1375.         if target.index != @battler.index
  1376.           target.remove_state(state_id)
  1377.         end  
  1378.       end
  1379.     end
  1380.   end  
  1381.   #--------------------------------------------------------------------------
  1382.   # ● 浮遊實行
  1383.   #--------------------------------------------------------------------------
  1384.   def floating  
  1385.     # 初期化跳躍
  1386.     jump_reset
  1387.     # 情報確認
  1388.     @jump_plus = @active_action[1]
  1389.     float_end = @active_action[2]
  1390.     @float_time = @active_action[3]
  1391.     # 計算一格相當的移動高度
  1392.     @float_up = (float_end - @jump_plus)/ @float_time
  1393.     # 漂浮結束前不執行下個動作
  1394.     @wait = @float_time
  1395.     # 反映漂浮動畫的設定
  1396.     if @anime_flug
  1397.       move_anime = N01::ANIME[@active_action[4]]
  1398.       # 沒有指定圖片時跳過處理
  1399.       if move_anime != nil
  1400.         # 寫下現在的動作
  1401.         @active_action = move_anime
  1402.         # 角色動畫開始
  1403.         battler_anime
  1404.         # 漂浮完畢時即動畫完畢
  1405.         @anime_end = true
  1406.       end
  1407.     end
  1408.     # 漂浮到初期高度
  1409.     @battler.jump = @jump_plus
  1410.   end      
  1411.   #--------------------------------------------------------------------------
  1412.   # ● 強制動作
  1413.   #--------------------------------------------------------------------------
  1414.   def force_action
  1415.     # 動作是單獨還是通用的判別
  1416.     kind = @active_action[0]
  1417.     # 確認有無復原
  1418.     rebirth = @active_action[2]
  1419.     # 獲取強制動作的內容
  1420.     play = @active_action[3]
  1421.     # 歸納上面3個情報
  1422.     action = [kind,rebirth,play]
  1423.     # 目標指定目錄時
  1424.     if @active_action[1] >= 1000
  1425.       members = $game_party.members if @battler.actor?
  1426.       members = $game_troop.members unless @battler.actor?
  1427.       index = @active_action[1] - 1000
  1428.       if index < members.size
  1429.         if members[index].exist? && @battler.index != index
  1430.           # 交付角色情報
  1431.           return members[index].force_action = action
  1432.         else
  1433.           for target in members
  1434.             next if @battler.index == target.index
  1435.             next unless target.exist?
  1436.             force = true
  1437.             break target.force_action = action
  1438.           end
  1439.         end
  1440.       end
  1441.       # 條件沒有被滿足時動作中斷
  1442.       return if force
  1443.       return @action = ["完畢"] if @non_repeat
  1444.       return start_action(@battler.recover_action)
  1445.     # 指定目標時  
  1446.     elsif @active_action[1] == 0
  1447.       for target in @target_battler
  1448.         target.force_action = action if target != nil
  1449.       end
  1450.     # 指定了狀態ID時  
  1451.     elsif @active_action[1] > 0
  1452.       for target in $game_party.members + $game_troop.members
  1453.         target.force_action = action if target.state?(@active_action[1])
  1454.       end
  1455.     # 指定了習得技能時  
  1456.     elsif @active_action[1] < 0  
  1457.       # 敵方不被處理
  1458.       return if @battler.is_a?(Game_Enemy)
  1459.       for actor in $game_party.members
  1460.         # 自身除外
  1461.         unless actor.id == @battler.id
  1462.           # 交付角色情報
  1463.           actor.force_action = action if actor.skill_id_learn?(@active_action[1].abs)
  1464.         end
  1465.       end
  1466.     end
  1467.   end
  1468.   #--------------------------------------------------------------------------
  1469.   # ● 實行坐標初始化
  1470.   #--------------------------------------------------------------------------
  1471.   def reseting
  1472.     # 初期化跳躍
  1473.     jump_reset
  1474.     # 回轉元戾
  1475.     self.angle = 0
  1476.     # 情報確認
  1477.     @distanse_x   = @move_x * -1
  1478.     @distanse_y   = @move_y * -1
  1479.     @move_speed_x = @active_action[1]
  1480.     @move_speed_y = @move_speed_x
  1481.     @move_boost_x = @active_action[2]
  1482.     @move_boost_y = @move_boost_x
  1483.     @jump         = @active_action[3]
  1484.     # 計算移動
  1485.     move_distance
  1486.     # 反映移動畫面的設定
  1487.     if @anime_flug
  1488.       move_anime = N01::ANIME[@active_action[4]]
  1489.       # 沒有指定圖片時跳過處理
  1490.       if move_anime != nil
  1491.         # 寫下現在的動作
  1492.         @active_action = move_anime
  1493.         # 角色動畫開始
  1494.         battler_anime
  1495.       end
  1496.       # 移動完畢時即動畫也完畢
  1497.       @anime_end = true
  1498.     end
  1499.   end
  1500.   #--------------------------------------------------------------------------
  1501.   # ● 計算移動
  1502.   #--------------------------------------------------------------------------
  1503.   def moving  
  1504.     # 初期化跳躍
  1505.     jump_reset
  1506.     # 方便調出X軸的移動
  1507.     xx = @active_action[1]
  1508.     # 襲擊時X軸逆轉
  1509.     xx *= -1 if $back_attack
  1510.     # 確認移動目標的目標
  1511.     case @active_action[0]
  1512.     when 0 # 自身
  1513.       @distanse_x = xx
  1514.       @distanse_y = @active_action[2]
  1515.     when 1 # 目標
  1516.       # 目標沒有決定時、變換成自身
  1517.       if @target_battler == nil
  1518.         @distanse_x = xx
  1519.         @distanse_y = @active_action[2]
  1520.       else
  1521.         # 一個一個的確認目標對像
  1522.         target_x = 0
  1523.         target_y = 0
  1524.         time = 0
  1525.         for i in 0...@target_battler.size
  1526.           if @target_battler[i] != nil
  1527.             time += 1
  1528.             target_x += @target_battler[i].position_x
  1529.             target_y += @target_battler[i].position_y
  1530.           end  
  1531.         end
  1532.         # 目標空出時、變換成自身
  1533.         if time == 0
  1534.           @distanse_x = xx
  1535.           @distanse_y = @active_action[2]
  1536.         else  
  1537.           # 計算出複數目標的中心位置
  1538.           target_x = target_x / time
  1539.           target_y = target_y / time
  1540.           # 算出最終的移動距離
  1541.           @distanse_y = target_y - self.y + @active_action[2]
  1542.           # X坐標是角色和敵人的逆向計算
  1543.           if @battler.is_a?(Game_Actor)
  1544.             @distanse_x = target_x - self.x + xx
  1545.           else
  1546.             @distanse_x = self.x - target_x + xx
  1547.           end  
  1548.         end  
  1549.       end  
  1550.     when 2 # 畫面
  1551.       # X坐標是角色和敵人的逆向計算
  1552.       if @battler.is_a?(Game_Actor)
  1553.         @distanse_x = xx - self.x
  1554.         @distanse_x = Graphics.width + xx - self.x if $back_attack
  1555.       else
  1556.         @distanse_x = self.x - xx
  1557.         @distanse_x = self.x - (Graphics.width + xx) if $back_attack
  1558.       end
  1559.       @distanse_y = @active_action[2] - self.y
  1560.     when 3 # 初期位置
  1561.       # X坐標是角色和敵人的逆向計算
  1562.       if @battler.is_a?(Game_Actor)
  1563.         @distanse_x = xx + @battler.base_position_x - self.x
  1564.       else
  1565.         @distanse_x = xx + self.x - @battler.base_position_x
  1566.       end
  1567.       @distanse_y = @active_action[2] + @battler.base_position_y - @battler.position_y
  1568.     end
  1569.     @move_speed_x = @active_action[3]
  1570.     @move_speed_y = @active_action[3]
  1571.     @move_boost_x = @active_action[4]
  1572.     @move_boost_y = @active_action[4]
  1573.     @jump         = @active_action[5]
  1574.     @jump_plus = 0
  1575.     # 計算移動
  1576.     move_distance
  1577.     # 反映移動畫面的設定
  1578.     if @anime_flug
  1579.       move_anime = N01::ANIME[@active_action[6]]
  1580.       # 沒有指定圖片時跳過處理
  1581.       if move_anime != nil
  1582.         # 寫下現在的動作
  1583.         @active_action = move_anime
  1584.         # 角色動畫開始
  1585.         battler_anime
  1586.       end  
  1587.       # 移動完畢時即動畫也完畢
  1588.       @anime_end = true
  1589.     end
  1590.   end
  1591.   #--------------------------------------------------------------------------
  1592.   # ● 計算移動
  1593.   #--------------------------------------------------------------------------
  1594.   def move_distance
  1595.     # 速度為0時、停留在那個地方
  1596.     if @move_speed_x == 0
  1597.       @moving_x = 0
  1598.       @moving_y = 0
  1599.     else  
  1600.       # 計算一格相當的移動距離
  1601.       @moving_x = @distanse_x / @move_speed_x
  1602.       @moving_y = @distanse_y / @move_speed_y
  1603.       # 剩餘的距離在這時移動消化
  1604.       over_x = @distanse_x % @move_speed_x
  1605.       over_y = @distanse_y % @move_speed_y
  1606.       @move_x += over_x
  1607.       @move_y += over_y
  1608.       @battler.move_x = @move_x
  1609.       @battler.move_y = @move_y
  1610.       @distanse_x -= over_x
  1611.       @distanse_y -= over_y
  1612.     end  
  1613.     # 判定是否移動
  1614.     if @distanse_x == 0
  1615.       @move_speed_x = 0
  1616.     end
  1617.     if @distanse_y == 0
  1618.       @move_speed_y = 0
  1619.     end
  1620.     # X座標計算移動
  1621.     # 根據加減速修正移動格數
  1622.     boost_x = @moving_x
  1623.     move_x = 0
  1624.     # 加速時
  1625.     if @move_boost_x > 0 && @distanse_x != 0
  1626.       # 加減速的正負調整成左右移動
  1627.       if @distanse_x == 0
  1628.         @move_boost_x = 0
  1629.       elsif @distanse_x < 0
  1630.         @move_boost_x *= -1
  1631.       end
  1632.       # 事先計算距離的變化
  1633.       for i in 0...@move_speed_x
  1634.         boost_x += @move_boost_x
  1635.         move_x += boost_x
  1636.         # 記錄超過距離
  1637.         over_distance = @distanse_x - move_x
  1638.         # 記錄右移動時距離超越的時第幾格
  1639.         if @distanse_x > 0 && over_distance < 0
  1640.           @move_speed_x = i
  1641.           break
  1642.         # 記錄左移動時距離超越的時第幾格
  1643.         elsif @distanse_x < 0 && over_distance > 0
  1644.           @move_speed_x = i
  1645.           break
  1646.         end
  1647.       end
  1648.       # 將超越距離還原到前一次
  1649.       before = over_distance + boost_x
  1650.       # 剩餘的距離加算到等速移動的格數中
  1651.       @move_speed_plus_x = (before / @moving_x).abs
  1652.       # 即使這樣剩餘的距離也在這時移動消化
  1653.       @move_x += before % @moving_x
  1654.       @battler.move_x = @move_x
  1655.     # 減速時  
  1656.     elsif @move_boost_x < 0 && @distanse_x != 0
  1657.       # 加減速的正負調整成左右移動
  1658.       if @distanse_x == 0
  1659.         @move_boost_x = 0
  1660.       elsif @distanse_x < 0
  1661.         @move_boost_x *= -1
  1662.       end
  1663.       # 事先計算距離的變化
  1664.       for i in 0...@move_speed_x
  1665.         boost_x += @move_boost_x
  1666.         move_x += boost_x
  1667.         # 記錄不足的距離
  1668.         lost_distance = @distanse_x - move_x
  1669.         before = lost_distance
  1670.         # 記錄右移動速度到0時是第幾格
  1671.         if @distanse_x > 0 && boost_x < 0
  1672.           @move_speed_x = i - 1
  1673.           # 不足的距離還原到前一次
  1674.           before = lost_distance + boost_x
  1675.           break
  1676.         # 記錄左移動速度到0時是第幾格
  1677.         elsif @distanse_x < 0 && boost_x > 0
  1678.           @move_speed_x= i - 1
  1679.           # 不足的距離還原到前一次
  1680.           before = lost_distance + boost_x
  1681.           break
  1682.         end
  1683.       end
  1684.       # 不足的距離加算到等速移動的格數中
  1685.       plus = before / @moving_x
  1686.       @move_speed_plus_x = plus.abs
  1687.       # 即使這樣剩餘的距離也在這時移動消化
  1688.       @move_x += before % @moving_x
  1689.       @battler.move_x = @move_x
  1690.     end
  1691.     # Y座標計算移動
  1692.     # 根據加減速修正移動格數
  1693.     boost_y = @moving_y
  1694.     move_y = 0
  1695.     # 加速時
  1696.     if @move_boost_y > 0 && @distanse_y != 0
  1697.       # 加減速的正負調整成左右移動
  1698.       if @distanse_y == 0
  1699.         @move_boost_y = 0
  1700.       elsif @distanse_y < 0
  1701.         @move_boost_y *= -1
  1702.       end
  1703.       # 事先計算距離的變化
  1704.       for i in 0...@move_speed_y
  1705.         boost_y += @move_boost_y
  1706.         move_y += boost_y
  1707.         # 記錄超過距離
  1708.         over_distance = @distanse_y - move_y
  1709.         # 記錄右移動時距離超越的時第幾格
  1710.         if @distanse_y > 0 && over_distance < 0
  1711.           @move_speed_y = i
  1712.           break
  1713.         # 記錄左移動時距離超越的時第幾格
  1714.         elsif @distanse_y < 0 && over_distance > 0
  1715.           @move_speed_y = i
  1716.           break
  1717.         end
  1718.       end
  1719.       # 將超越距離還原到前一次
  1720.       before = over_distance + boost_y
  1721.       # 剩餘的距離加算到等速移動的格數中
  1722.       @move_speed_plus_y = (before / @moving_y).abs
  1723.       # 即使這樣剩餘的距離也在這時移動消化
  1724.       @move_y += before % @moving_y
  1725.       @battler.move_y = @move_y
  1726.     # 減速時  
  1727.     elsif @move_boost_y < 0 && @distanse_y != 0
  1728.       # 加減速的正負調整成左右移動
  1729.       if @distanse_y == 0
  1730.         @move_boost_y = 0
  1731.       elsif @distanse_y < 0
  1732.         @move_boost_y *= -1
  1733.       end
  1734.       # 事先計算距離的變化
  1735.       for i in 0...@move_speed_y
  1736.         boost_y += @move_boost_y
  1737.         move_y += boost_y
  1738.         # 記錄不足的距離
  1739.         lost_distance = @distanse_y - move_y
  1740.         before = lost_distance
  1741.         # 記錄右移動速度到0時是第幾格
  1742.         if @distanse_y > 0 && boost_y < 0
  1743.           @move_speed_y = i
  1744.           # 不足的距離還原到前一次
  1745.           before = lost_distance + boost_y
  1746.           break
  1747.         # 記錄左移動速度到0時是第幾格
  1748.         elsif @distanse_y < 0 && boost_y > 0
  1749.           @move_speed_y = i
  1750.           # 不足的距離還原到前一次
  1751.           before = lost_distance + boost_y
  1752.           break
  1753.         end
  1754.       end
  1755.       # 不足的距離加算到等速移動的格數中
  1756.       plus = before / @moving_y
  1757.       @move_speed_plus_y = plus.abs
  1758.       # 即使這樣剩餘的距離也在這時移動消化
  1759.       @move_y += before % @moving_y
  1760.       @battler.move_y = @move_y
  1761.     end
  1762.     # 算出移動完畢的時間
  1763.     x = @move_speed_plus_x + @move_speed_x
  1764.     y = @move_speed_plus_y + @move_speed_y
  1765.     if x > y
  1766.       end_time = x
  1767.     else
  1768.       end_time = y
  1769.     end
  1770.     # 移動完畢前不進行下個動作
  1771.     @wait = end_time
  1772.     # 計算跳躍
  1773.     if @jump != 0
  1774.       # 沒有移動只跳躍時
  1775.       if @wait == 0
  1776.         # 時間記入
  1777.         @wait = @active_action[3]
  1778.       end  
  1779.       # 從移動完畢時間算出跳躍時間
  1780.       @jump_time = @wait / 2
  1781.       # 不能插入時的剩餘時間
  1782.       @jump_time_plus = @wait % 2
  1783.       # 判別跳躍是正還是負
  1784.       @jump_sign = 0
  1785.       @jump_sign2 = 0
  1786.       if @jump < 0
  1787.         @jump_sign = -1
  1788.         @jump_sign2 = 1
  1789.         @jump = @jump * -1
  1790.       else
  1791.         @jump_sign = 1
  1792.         @jump_sign2 = -1
  1793.       end
  1794.       # 決定跳躍初始速度
  1795.       @jump_up = 2 ** @jump * @jump_sign
  1796.       # 略微調整條約時間的尾數
  1797.       if @jump_time == 0
  1798.         @jump_up = 0
  1799.       elsif @jump_time != 1
  1800.         @jump_size = @jump_up * @jump_sign * @jump_sign2
  1801.       else
  1802.         @jump_size = @jump_up * 2 * @jump_sign * @jump_sign2
  1803.         @jump_flug = true
  1804.       end  
  1805.     end
  1806.   end
  1807.   #--------------------------------------------------------------------------
  1808.   # ● 角色動畫開始
  1809.   #--------------------------------------------------------------------------
  1810.   def battler_anime
  1811.     # 反映動畫設定
  1812.     @anime_kind  = @active_action[1]
  1813.     @anime_speed = @active_action[2]
  1814.     @anime_loop  = @active_action[3]
  1815.     # 如果有等待時間時加算
  1816.     @unloop_wait = @active_action[4]
  1817.     @anime_end = true
  1818.     @reverse = false
  1819.     # 只有有武器動作時進行更新
  1820.     if @weapon_R != nil && @active_action[8] != ""
  1821.       # 確認武器的設定
  1822.       weapon_kind = N01::ANIME[@active_action[8]]
  1823.       # 敵方和不使用二刀角色的取消二刀標誌
  1824.       two_swords_flug = weapon_kind[11]
  1825.       return if two_swords_flug && [email protected]?
  1826.       return if two_swords_flug && @battler.weapons[1] == nil && @battler.actor?
  1827.       if @battler.actor? && @battler.weapons[0] == nil && !two_swords_flug
  1828.         @weapon_R.action_reset
  1829.       elsif @battler.actor? && @battler.weapons[1] == nil && two_swords_flug
  1830.         @weapon_R.action_reset
  1831.       elsif [email protected]? && @battler.weapon == 0
  1832.         @weapon_R.action_reset
  1833.       else
  1834.         # 初期化
  1835.         @weapon_R.action_reset
  1836.         # 動畫圖像是固定時的獲取武器位置
  1837.         if @active_action[5] != -1
  1838.           @weapon_R.freeze(@active_action[5])
  1839.         end
  1840.         # 設定武器畫像
  1841.         @weapon_R.weapon_graphics unless two_swords_flug
  1842.         @weapon_R.weapon_graphics(true) if two_swords_flug
  1843.         # 交付武器動作
  1844.         @weapon_R.weapon_action(@active_action[8],@anime_loop)
  1845.         @weapon_action = true
  1846.         # 更新最初的武器動作
  1847.         @weapon_R.action
  1848.       end
  1849.     elsif @weapon_R != nil
  1850.       @weapon_R.action_reset
  1851.     end  
  1852.     @anime_end = false
  1853.     # 動畫圖片是固定時
  1854.     if @active_action[5] != -1 && @active_action[5] != -2
  1855.       # 標誌ON
  1856.       @anime_freeze = true
  1857.       # 看作動畫是通常的完畢了
  1858.       @anime_end = true
  1859.     # 單程逆轉再生時
  1860.     elsif @active_action[5] == -2
  1861.       @anime_freeze = false
  1862.       # 標誌ON
  1863.       @reverse = true
  1864.       # 更新最初的動畫圖像
  1865.       @pattern = @base_width - 1
  1866.       # 只有在有武器動畫時更新
  1867.       if @weapon_action && @weapon_R != nil
  1868.         @weapon_R.action
  1869.         @weapon_R.update
  1870.       end
  1871.     # 更新通常動畫時  
  1872.     else  
  1873.       @anime_freeze = false
  1874.       # 更新最初的動畫圖像
  1875.       @pattern = 0
  1876.       # 只有在有武器動畫時更新
  1877.       if @weapon_action && @weapon_R != nil
  1878.         @weapon_R.action
  1879.         @weapon_R.update
  1880.       end
  1881.     end  
  1882.     @pattern_back = false
  1883.     @frame = @anime_speed
  1884.     # Z座標設定
  1885.     @battler.move_z = @active_action[6]
  1886.     # 是否有影
  1887.     if @shadow != nil
  1888.       @shadow.visible = true if @active_action[7]
  1889.       @shadow.visible = false unless @active_action[7]
  1890.     end
  1891.     # 分期從編號讀取文件名
  1892.     if @active_action[0] == 0
  1893.       file_name = @battler_name
  1894.     else
  1895.       file_name = @battler_name + "_" + @active_action[0].to_s
  1896.     end  
  1897.     # 無動畫角色時處理完畢
  1898.     return unless @anime_flug
  1899.     self.bitmap = Cache.character(file_name)
  1900.     # 設定轉送處的矩形
  1901.     @sx = @pattern * @width
  1902.     @sy = @anime_kind * @height
  1903.     @sx = @active_action[5] * @width if @anime_freeze
  1904.     self.src_rect.set(@sx, @sy, @width, @height)
  1905.   end
  1906.   #--------------------------------------------------------------------------
  1907.   # ● 動畫飛出
  1908.   #--------------------------------------------------------------------------
  1909.   def moving_anime
  1910.     # 如果前個飛出動畫還有殘留時初期化
  1911.     @move_anime.action_reset if @anime_moving
  1912.     @anime_moving = true
  1913.     # 襲擊中動畫、武器畫像反轉
  1914.     mirror = false
  1915.     mirror = true if $back_attack
  1916.     # 動畫ID
  1917.     id = @active_action[1]
  1918.     # 對像
  1919.     target = @active_action[2]
  1920.     x = y = mem = 0
  1921.     # 對像為單體時
  1922.     if target == 0
  1923.       # 目標沒有決定時、變換成自身
  1924.       if @target_battler == nil
  1925.         x = self.x
  1926.         y = self.y
  1927.       else
  1928.         # 沒有決定目標時、變換為自身
  1929.         if @target_battler[0] == nil
  1930.           x = self.x
  1931.           y = self.y
  1932.         else  
  1933.           # 目標空出時、變換為自身
  1934.           x = @target_battler[0].position_x
  1935.           y = @target_battler[0].position_y
  1936.         end  
  1937.       end  
  1938.     # 對像在敵方中心時  
  1939.     elsif target == 1
  1940.       # 自身是主人公時計算敵方的中心
  1941.       if @battler.is_a?(Game_Actor)
  1942.         for target in $game_troop.members
  1943.           x += target.position_x
  1944.           y += target.position_y
  1945.           mem += 1
  1946.         end
  1947.         x = x / mem
  1948.         y = y / mem
  1949.       # 自身是敵方時計算主人公的中心
  1950.       else
  1951.         for target in $game_party.members
  1952.           x += target.position_x
  1953.           y += target.position_y
  1954.           mem += 1
  1955.         end
  1956.         x = x / mem
  1957.         y = y / mem
  1958.       end
  1959.     # 對像在我方中心時  
  1960.     elsif target == 2
  1961.       # 自身是主人公時計算主人公的中心
  1962.       if @battler.is_a?(Game_Actor)
  1963.         for target in $game_party.members
  1964.           x += target.position_x
  1965.           y += target.position_y
  1966.           mem += 1
  1967.         end
  1968.         x = x / mem
  1969.         y = y / mem
  1970.       # 自身是敵方時計算敵方的中心
  1971.       else
  1972.         for target in $game_troop.members
  1973.           x += target.position_x
  1974.           y += target.position_y
  1975.           mem += 1
  1976.         end
  1977.         x = x / mem
  1978.         y = y / mem
  1979.       end
  1980.     # 對象是自身時  
  1981.     else
  1982.       x = self.x
  1983.       y = self.y
  1984.     end  
  1985.     # 開始位置的略微調整
  1986.     plus_x = @active_action[6]
  1987.     plus_y = @active_action[7]
  1988.     # 敵方是X軸逆轉
  1989.     plus_x *= -1 if @battler.is_a?(Game_Enemy)
  1990.     # 算出最終的移動距離
  1991.     distanse_x = x - self.x - plus_x
  1992.     distanse_y = y - self.y - plus_y
  1993.     # 飛出類型
  1994.     type = @active_action[3]
  1995.     # 速度
  1996.     speed = @active_action[4]
  1997.     # 軌道
  1998.     orbit = @active_action[5]
  1999.     # 如果自身在開始位置時
  2000.     if @active_action[8] == 0
  2001.       @move_anime.base_x = self.x + plus_x
  2002.       @move_anime.base_y = self.y + plus_y
  2003.     # 對像在開始位置時
  2004.     elsif @active_action[8] == 1
  2005.       @move_anime.base_x = x + plus_x
  2006.       @move_anime.base_y = y + plus_y
  2007.       # 把距離作為反面
  2008.       distanse_y = distanse_y * -1
  2009.       distanse_x = distanse_x * -1
  2010.     # 如果不能動
  2011.     else
  2012.       @move_anime.base_x = x
  2013.       @move_anime.base_y = y
  2014.       distanse_x = distanse_y = 0
  2015.     end
  2016.     # 無武器動作時不顯示武器
  2017.     if @active_action[10] == ""
  2018.       weapon = ""  
  2019.     # 無動畫的敵方不顯示武器
  2020.     elsif @anime_flug != true
  2021.       weapon = ""  
  2022.     # 武器動作時
  2023.     else
  2024.       # 確認是否指定了飛出武器圖片
  2025.       if @battler.is_a?(Game_Actor)
  2026.         battler = $game_party.members[@battler.index]
  2027.         weapon_id = battler.weapon_id
  2028.       else  
  2029.         battler = $game_troop.members[@battler.index]
  2030.         weapon_id = battler.weapon
  2031.       end  
  2032.       # 判別是武器動作情報取得還是使用武器畫像
  2033.       weapon_act = N01::ANIME[@active_action[10]].dup if @active_action[10] != ""
  2034.       # 如果利用武器畫像時並不是空手
  2035.       if weapon_id != 0 && weapon_act.size == 3
  2036.         weapon_file = $data_weapons[weapon_id].flying_graphic
  2037.         # 如果沒有指定別的畫像時獲取既存的武
  2038.         if weapon_file == ""
  2039.           weapon_name = $data_weapons[weapon_id].graphic
  2040.           icon_weapon = false
  2041.           # 然後沒有指定時使用ICON圖片
  2042.           if weapon_name == ""
  2043.             weapon_name = $data_weapons[weapon_id].icon_index
  2044.             icon_weapon = true
  2045.           end  
  2046.         # 指定時獲取那個圖片名  
  2047.         else
  2048.           icon_weapon = false
  2049.           weapon_name = weapon_file
  2050.         end
  2051.         # 武器動作情報取得
  2052.         weapon = @active_action[10]
  2053.       # 指定了武器畫像時不顯示空手
  2054.       elsif weapon_act.size == 3
  2055.         weapon = ""
  2056.       # 使用技能畫像
  2057.       elsif weapon_act != nil && @battler.action.skill != nil
  2058.         icon_weapon = false
  2059.         weapon_name = $data_skills[@battler.action.skill.id].flying_graphic
  2060.         weapon = @active_action[10]
  2061.       end
  2062.     end
  2063.     # 決定Z坐標
  2064.     @move_anime.z = 1
  2065.     @move_anime.z = 1000 if @active_action[9]
  2066.     # 已上的全部情報都已飛出動畫送到精靈
  2067.     @move_anime.anime_action(id,mirror,distanse_x,distanse_y,type,speed,orbit,weapon,weapon_name,icon_weapon)
  2068.   end  
  2069.   #--------------------------------------------------------------------------
  2070.   # ● 動作完畢
  2071.   #--------------------------------------------------------------------------
  2072.   def anime_finish
  2073.     # 單獨處理完畢省略時做反覆
  2074.     return individual_action_end if @individual_targets.size != 0
  2075.     # 主動向角色歸納動作情報
  2076.     send_action(@active_action[0]) if @battler.active
  2077.     # 如果有殘像時開放
  2078.     mirage_off if @mirage_flug
  2079.     # 重複待機動作
  2080.     start_action(@repeat_action) unless @non_repeat
  2081.   end   
  2082.   #--------------------------------------------------------------------------
  2083.   # ● 擊倒動作
  2084.   #--------------------------------------------------------------------------
  2085.   def collapse_action
  2086.     @non_repeat = true
  2087.     @effect_type = COLLAPSE
  2088.     @collapse_type = @battler.collapse_type unless @battler.actor?
  2089.     @battler_visible = false unless @battler.actor?
  2090.     @effect_duration = N01::COLLAPSE_WAIT + 48 if @collapse_type == 2
  2091.     @effect_duration = 401 if @collapse_type == 3
  2092.   end  
  2093.   #--------------------------------------------------------------------------
  2094.   # ● 普通擊倒
  2095.   #--------------------------------------------------------------------------
  2096.   def normal_collapse
  2097.     if @effect_duration == 47
  2098.       Sound.play_enemy_collapse
  2099.       self.blend_type = 1
  2100.       self.color.set(255, 128, 128, 128)
  2101.     end
  2102.     self.opacity = 256 - (48 - @effect_duration) * 6 if @effect_duration <= 47
  2103.   end  
  2104.   #--------------------------------------------------------------------------
  2105.   # ● BOSS擊倒
  2106.   #--------------------------------------------------------------------------
  2107.   def boss_collapse1
  2108.     if @effect_duration == 320
  2109.       Audio.se_play("Audio/SE/Absorb1", 100, 80)
  2110.       self.flash(Color.new(255, 255, 255), 60)
  2111.       viewport.flash(Color.new(255, 255, 255), 20)
  2112.     end
  2113.     if @effect_duration == 280
  2114.       Audio.se_play("Audio/SE/Absorb1", 100, 80)
  2115.       self.flash(Color.new(255, 255, 255), 60)
  2116.       viewport.flash(Color.new(255, 255, 255), 20)
  2117.     end
  2118.     if @effect_duration == 220
  2119.       Audio.se_play("Audio/SE/Earth4", 100, 80)
  2120.       reset
  2121.       self.blend_type = 1
  2122.       self.color.set(255, 128, 128, 128)
  2123.       self.wave_amp = 6
  2124.     end
  2125.     if @effect_duration < 220
  2126.       self.src_rect.set(0, @effect_duration / 2 - 110, @width, @height)
  2127.       self.x += 8 if @effect_duration % 4 == 0
  2128.       self.x -= 8 if @effect_duration % 4 == 2
  2129.       self.wave_amp += 1 if @effect_duration % 10 == 0
  2130.       self.opacity = @effect_duration
  2131.       return if @effect_duration < 50
  2132.       Audio.se_play("Audio/SE/Earth4", 100, 50) if @effect_duration % 50 == 0
  2133.     end
  2134.   end
  2135. end
复制代码
  1. #==============================================================================
  2. # ■ Scene_Battle Ver3.3
  3. #------------------------------------------------------------------------------
  4. #  戰鬥畫面的處理的類。
  5. #==============================================================================
  6. class Scene_Battle < Scene_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 完畢處理
  9.   #--------------------------------------------------------------------------
  10.   alias terminate_n01 terminate
  11.   def terminate
  12.     terminate_n01
  13.     # 返還二刀流的替換處理
  14.     for member in $game_party.members
  15.       if member.two_swords_change
  16.         member.change_equip_by_id(1, member.weapon_id)
  17.         member.change_equip_by_id(0, 0)
  18.         member.two_swords_change = false
  19.       end  
  20.     end
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 戰鬥開始的處理
  24.   #--------------------------------------------------------------------------
  25.   alias process_battle_start_n01 process_battle_start
  26.   def process_battle_start
  27.     process_battle_start_n01
  28.     # 如果二刀流讓左(下部顯示)手武器像右(上部表示)手武器那樣沒有持有時
  29.     # 在這裡強制替換他
  30.     for member in $game_party.members
  31.       if member.weapons[0] == nil and member.weapons[1] != nil
  32.         member.change_equip_by_id(0, member.armor1_id)
  33.         member.change_equip_by_id(1, 0)
  34.         member.two_swords_change = true
  35.       end
  36.     end  
  37.   end
  38.   #--------------------------------------------------------------------------
  39.   # ● 更新
  40.   #--------------------------------------------------------------------------
  41.   alias update_n01 update
  42.   def update
  43.     reset_stand_by_action
  44.     super
  45.     update_n01
  46.   end
  47.   #--------------------------------------------------------------------------
  48.   # ● 根據事件操作的HP變動再設置角色動畫
  49.   #--------------------------------------------------------------------------
  50.   def reset_stand_by_action
  51.     if $game_temp.status_window_refresh
  52.       $game_temp.status_window_refresh = false
  53.       for member in $game_party.members + $game_troop.members
  54.         @spriteset.set_stand_by_action(member.actor?, member.index)
  55.         # 確認自動復活
  56.         resurrection(member) if member.hp == 0
  57.       end  
  58.       @status_window.refresh
  59.     end
  60.   end  
  61.   #--------------------------------------------------------------------------
  62.   # ● 戰敗的處理
  63.   #--------------------------------------------------------------------------
  64.   alias process_defeat_n01 process_defeat
  65.   def process_defeat
  66.     for member in $game_party.members
  67.       @spriteset.set_stand_by_action(member.actor?, member.index)
  68.     end
  69.     process_defeat_n01
  70.   end
  71.   #--------------------------------------------------------------------------
  72.   # ● 幫助窗口的顯示
  73.   #--------------------------------------------------------------------------
  74.   def pop_help(obj)
  75.     return if obj.extension.include?("不顯示HELP")
  76.     @help_window = Window_Help.new if @help_window == nil
  77.     @help_window.set_text(obj.name, 1)
  78.     @help_window.visible = true
  79.   end
  80.   #--------------------------------------------------------------------------
  81.   # ● 顯示情報窗口的移動
  82.   #--------------------------------------------------------------------------
  83.   def move1_info_viewport
  84.     @info_viewport.ox = 128
  85.     loop do
  86.       update_basic
  87.       @info_viewport.ox -= 8
  88.       @party_command_window.x -= 8
  89.       @actor_command_window.x += 8
  90.       break if @info_viewport.ox == 64
  91.     end  
  92.   end
  93.   #--------------------------------------------------------------------------
  94.   # ● 顯示情報窗口的移動
  95.   #--------------------------------------------------------------------------
  96.   def move2_info_viewport
  97.     @info_viewport.ox = 64
  98.     loop do
  99.       update_basic
  100.       @info_viewport.ox -= 8
  101.       @party_command_window.x += 8
  102.       @actor_command_window.x -= 8
  103.       break if @info_viewport.ox == 0
  104.     end  
  105.   end
  106.   #--------------------------------------------------------------------------
  107.   # ● 到下個主人公的指令選擇
  108.   #--------------------------------------------------------------------------
  109.   alias next_actor_n01 next_actor
  110.   def next_actor
  111.     # 只有能動的角色顯示指令動作
  112.     if @active_battler != nil && @active_battler.inputable? && @active_battler.actor?
  113.       @spriteset.set_action(true, @actor_index,@active_battler.command_a)
  114.     end
  115.     # 最後的角色時、動作結束前等待
  116.     @wait_count = 32 if @actor_index == $game_party.members.size-1
  117.     next_actor_n01
  118.     # 只有能動的角色現實指令動作
  119.     if @active_battler != nil && @active_battler.inputable? && @active_battler.actor?
  120.       @spriteset.set_action(true, @actor_index,@active_battler.command_b)
  121.     end
  122.   end
  123.   #--------------------------------------------------------------------------
  124.   # ● 到前一個角色的指令選擇
  125.   #--------------------------------------------------------------------------
  126.   alias prior_actor_n01 prior_actor
  127.   def prior_actor
  128.     # 只有能動的角色顯示指令動作
  129.     if @active_battler != nil && @active_battler.inputable? && @active_battler.actor?
  130.       @active_battler.action.clear
  131.       @spriteset.set_action(true, @actor_index,@active_battler.command_a)
  132.     end
  133.     prior_actor_n01
  134.     # 只有能動的角色顯示指令動作
  135.     if @active_battler != nil && @active_battler.inputable? && @active_battler.actor?
  136.       @active_battler.action.clear
  137.       @spriteset.set_action(true, @actor_index,@active_battler.command_b)
  138.     end
  139.   end  
  140.   #--------------------------------------------------------------------------
  141.   # ● 目標選擇的開始  ※再定義
  142.   #--------------------------------------------------------------------------
  143.   def start_target_enemy_selection
  144.     start_target_selection
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 目標選擇的開始  ※再定義
  148.   #--------------------------------------------------------------------------
  149.   def start_target_actor_selection
  150.     start_target_selection(true)
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 目標選擇的開始
  154.   #--------------------------------------------------------------------------
  155.   def start_target_selection(actor = false)
  156.     members = $game_party.members if actor
  157.     members = $game_troop.members unless actor
  158.     # 光標精靈的作成
  159.     @cursor = Sprite.new
  160.     @cursor.bitmap = Cache.character("cursor")
  161.     @cursor.src_rect.set(0, 0, 32, 32)
  162.     @cursor_flame = 0
  163.     @cursor.x = -200
  164.     @cursor.y = -200
  165.     @cursor.ox = @cursor.width
  166.     @cursor.oy = @cursor.height
  167.     # 作成顯示目標名的幫助窗口
  168.     @help_window.visible = false if @help_window != nil
  169.     @help_window2 = Window_Help.new if @help_window2 == nil
  170.     # 消除不要的窗口
  171.     @actor_command_window.active = false
  172.     @skill_window.visible = false if @skill_window != nil
  173.     @item_window.visible = false if @item_window != nil
  174.     # 存在的目標為最底號碼的對象也想最初那樣
  175.     @index = 0
  176.     @max_index = members.size - 1
  177.     # 主人公為站都不能者也可以作為目標來與敵方區分
  178.     unless actor
  179.       members.size.times do
  180.         break if members[@index].exist?
  181.         @index += 1
  182.       end
  183.     end  
  184.     @help_window2.set_text(members[@index].name, 1)
  185.     select_member(actor)
  186.   end
  187.   #--------------------------------------------------------------------------
  188.   # ● 目標選擇
  189.   #--------------------------------------------------------------------------
  190.   def select_member(actor = false)
  191.     members = $game_party.members if actor
  192.     members = $game_troop.members unless actor
  193.     loop do
  194.       update_basic
  195.       @cursor_flame = 0 if @cursor_flame == 30
  196.       @cursor.src_rect.set(0,  0, 32, 32) if @cursor_flame == 29
  197.       @cursor.src_rect.set(0, 32, 32, 32) if @cursor_flame == 15
  198.       point = @spriteset.set_cursor(actor, @index)
  199.       @cursor.x = point[0]
  200.       @cursor.y = point[1]
  201.       @cursor_flame += 1
  202.       if Input.trigger?(Input::B)
  203.         Sound.play_cancel
  204.         end_target_selection
  205.         break
  206.       elsif Input.trigger?(Input::C)
  207.         Sound.play_decision
  208.         @active_battler.action.target_index = @index
  209.         end_target_selection
  210.         end_skill_selection
  211.         end_item_selection
  212.         next_actor
  213.         break
  214.       end
  215.       if Input.repeat?(Input::LEFT)
  216.         if actor
  217.           cursor_down(members, actor) if $back_attack
  218.           cursor_up(members, actor) unless $back_attack
  219.         else
  220.           cursor_up(members, actor) if $back_attack
  221.           cursor_down(members, actor) unless $back_attack
  222.         end  
  223.       end
  224.       if Input.repeat?(Input::RIGHT)
  225.         if actor
  226.           cursor_up(members, actor) if $back_attack
  227.           cursor_down(members, actor) unless $back_attack
  228.         else
  229.           cursor_down(members, actor) if $back_attack
  230.           cursor_up(members, actor) unless $back_attack
  231.         end
  232.       end
  233.       cursor_up(members, actor) if Input.repeat?(Input::UP)
  234.       cursor_down(members, actor) if Input.repeat?(Input::DOWN)
  235.     end
  236.   end
  237.   #--------------------------------------------------------------------------
  238.   # ● 向前移動光標
  239.   #--------------------------------------------------------------------------
  240.   def cursor_up(members, actor)
  241.     Sound.play_cursor
  242.     members.size.times do
  243.       @index += members.size - 1
  244.       @index %= members.size
  245.       break if actor
  246.       break if members[@index].exist?
  247.     end
  248.     @help_window2.set_text(members[@index].name, 1)
  249.   end
  250.   #--------------------------------------------------------------------------
  251.   # ● 向後移動光標
  252.   #--------------------------------------------------------------------------
  253.   def cursor_down(members, actor)
  254.     Sound.play_cursor
  255.     members.size.times do
  256.       @index += 1
  257.       @index %= members.size
  258.       break if actor
  259.       break if members[@index].exist? && !actor
  260.     end
  261.     @help_window2.set_text(members[@index].name, 1)
  262.   end
  263.   #--------------------------------------------------------------------------
  264.   # ● 目標選擇的完畢
  265.   #--------------------------------------------------------------------------
  266.   def end_target_selection
  267.     @actor_command_window.active = true if @actor_command_window.index == 0
  268.     @skill_window.visible = true if @skill_window != nil
  269.     @item_window.visible = true if @item_window != nil
  270.     @cursor.dispose
  271.     @cursor = nil
  272.     if @help_window2 != nil  
  273.       @help_window2.dispose
  274.       @help_window2 = nil
  275.     end
  276.     @help_window.visible = true if @help_window != nil
  277.   end
  278.   #--------------------------------------------------------------------------
  279.   # ● 逃走的處理  ※再定義
  280.   #--------------------------------------------------------------------------
  281.   def process_escape
  282.     @info_viewport.visible = false
  283.     @message_window.visible = true
  284.     text = sprintf(Vocab::EscapeStart, $game_party.name)
  285.     $game_message.texts.push(text)
  286.     if $game_troop.preemptive
  287.       success = true
  288.     else
  289.       success = (rand(100) < @escape_ratio)
  290.     end
  291.     Sound.play_escape
  292.     # 不能動的主人公除外逃走成功動作
  293.     if success
  294.       for actor in $game_party.members
  295.         unless actor.restriction >= 4
  296.           @spriteset.set_action(true, actor.index,actor.run_success)
  297.         end
  298.       end  
  299.       wait_for_message
  300.       battle_end(1)
  301.     # 不能動主人公除外逃走失敗動作
  302.     else
  303.       for actor in $game_party.members
  304.         unless actor.restriction >= 4
  305.           @spriteset.set_action(true, actor.index,actor.run_ng)
  306.         end
  307.       end
  308.       @escape_ratio += 10
  309.       $game_message.texts.push('\.' + Vocab::EscapeFailure)
  310.       wait_for_message
  311.       $game_party.clear_actions
  312.       start_main
  313.     end
  314.   end  
  315.   #--------------------------------------------------------------------------
  316.   # ● 勝利的處理
  317.   #--------------------------------------------------------------------------
  318.   alias process_victory_n01 process_victory
  319.   def process_victory
  320.     @status_window.visible = true
  321.     @message_window.visible = false
  322.     # BOSS擊倒為等待加長
  323.     for enemy in $game_troop.members
  324.       break boss_wait = true if enemy.collapse_type == 3
  325.     end
  326.     wait(440) if boss_wait
  327.     wait(N01::WIN_WAIT) unless boss_wait
  328.     # 不能動的主人公除外勝利動作
  329.     for actor in $game_party.members
  330.       unless actor.restriction >= 4
  331.         @spriteset.set_action(true, actor.index,actor.win)
  332.       end
  333.     end
  334.     process_victory_n01
  335.   end
  336.   #--------------------------------------------------------------------------
  337.   # ● 戰鬥處理的實行開始  ※再定義
  338.   #--------------------------------------------------------------------------
  339.   def start_main
  340.     $game_troop.increase_turn
  341.     @info_viewport.visible = true
  342.     @info_viewport.ox = 0
  343.     @party_command_window.active = false
  344.     @actor_command_window.active = false
  345.     @status_window.index = @actor_index = -1
  346.     @active_battler = nil
  347.     @message_window.clear
  348.     $game_troop.make_actions
  349.     make_action_orders
  350.     # 情報表示窗口的移動
  351.     move1_info_viewport
  352.     # 作成顯示技能名的幫助窗口
  353.     @help_window = Window_Help.new
  354.     @help_window.visible = false
  355.     process_battle_event
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   # ● 戰鬥事件的處理  ※再定義
  359.   #--------------------------------------------------------------------------
  360.   def process_battle_event
  361.     loop do
  362.       return if judge_win_loss
  363.       return if $game_temp.next_scene != nil
  364.       $game_troop.interpreter.update
  365.       $game_troop.setup_battle_event
  366.       @message_window.update
  367.       if $game_message.visible
  368.         @message_window.visible = true
  369.         @status_window.visible = false
  370.       end
  371.       wait_for_message
  372.       @message_window.visible = false
  373.       @status_window.visible = true
  374.       if $game_troop.forcing_battler != nil
  375.         process_action
  376.       end
  377.       return unless $game_troop.interpreter.running?
  378.       update_basic
  379.     end
  380.   end
  381.   #--------------------------------------------------------------------------
  382.   # ● 作成行動順序
  383.   #--------------------------------------------------------------------------
  384.   alias make_action_orders_n01 make_action_orders
  385.   def make_action_orders
  386.     make_action_orders_n01
  387.     # 確認敵方的行動回數
  388.     for enemy in $game_troop.members
  389.       enemy.act_time = 0
  390.       if enemy.action_time[0] != 1
  391.         action_time = 0
  392.         # 獲得確認的回數
  393.         for i in 1...enemy.action_time[0]
  394.           action_time += 1 if rand(100) < enemy.action_time[1]
  395.         end
  396.         enemy.act_time = action_time
  397.         action_time.times do
  398.           enemy_order_time(enemy)
  399.           action_time -= 1
  400.           break if action_time == 0
  401.         end  
  402.         enemy.adj_speed = nil
  403.       end
  404.     end
  405.   end
  406.   #--------------------------------------------------------------------------
  407.   # ● 作成敵方的行動回數
  408.   #--------------------------------------------------------------------------
  409.   def enemy_order_time(enemy)
  410.     enemy.make_action_speed2(enemy.action_time[2])
  411.     select_time = 0
  412.     for member in @action_battlers
  413.       select_time += 1
  414.       break @action_battlers.push(enemy) if member.action.speed < enemy.adj_speed
  415.       break @action_battlers.push(enemy) if select_time == @action_battlers.size
  416.     end
  417.   end
  418.   #--------------------------------------------------------------------------
  419.   # ● 戰鬥行動的實行
  420.   #--------------------------------------------------------------------------
  421.   alias execute_action_n01 execute_action
  422.   def execute_action
  423.     # 技能、物品擴張時如果設定了行動前不清空
  424.     if @active_battler.action.kind != 0
  425.       obj = @active_battler.action.skill if @active_battler.action.kind == 1
  426.       obj = @active_battler.action.item if @active_battler.action.kind == 2
  427.       if obj.extension.include?("行動前")
  428.         @active_battler.white_flash = false
  429.       end  
  430.     end
  431.     # 角色主動化
  432.     @active_battler.active = true
  433.     # 強制行動中派生
  434.     @active_battler.derivation = 0 if @active_battler.action.forcing
  435.     execute_action_n01
  436.     # 有技能連發時、行動繼續
  437.     if @active_battler.derivation != 0
  438.       @active_battler.action.kind = 1
  439.       @active_battler.action.skill_id = @active_battler.derivation
  440.       @action_battlers.unshift(@active_battler)
  441.       return process_action
  442.     end
  443.     # 有複數行動的敵方時、決定下個行動
  444.     if !@active_battler.actor? && @active_battler.act_time != 0
  445.       @active_battler.make_action
  446.       @active_battler.act_time -= 1
  447.     end
  448.   end
  449.   #--------------------------------------------------------------------------
  450.   # ● 回合完畢  ※再定義
  451.   #--------------------------------------------------------------------------
  452.   def turn_end
  453.     for member in $game_party.members + $game_troop.members
  454.       member.clear_action_results
  455.       next unless member.exist?
  456.       member.slip_damage = false
  457.       actor = member.actor?
  458.       damage = 0
  459.       # 確認是否有0回合解除的狀態
  460.       for state in member.states
  461.         member.remove_state(state.id) if state.extension.include?("0回合解除")
  462.         # 實行連續傷害 state = [ 對像, 定數, 比例, POP, 戰鬥不能許可]
  463.         next unless state.extension.include?("連續傷害")
  464.         for ext in state.slip_extension
  465.           if ext[0] == "hp"
  466.             base_damage = ext[1] + member.maxhp * ext[2] / 100
  467.             damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
  468.             slip_pop = ext[3]
  469.             slip_dead = ext[4]
  470.             slip_damage_flug = true
  471.             member.slip_damage = true
  472.           end
  473.         end  
  474.       end
  475.       # 默認的連續傷害
  476.       if member.slip_damage? && member.exist? && !slip_damage_flug
  477.         damage += member.apply_variance(member.maxhp / 10, 10)
  478.         slip_dead = false
  479.         slip_pop = true
  480.         slip_damage_flug = true
  481.         member.slip_damage = true
  482.       end
  483.       damage = member.hp - 1 if damage >= member.hp && slip_dead = false
  484.       member.hp -= damage
  485.       @spriteset.set_damage_pop(actor, member.index, damage) if slip_pop
  486.       member.perform_collapse if member.dead? && member.slip_damage
  487.       member.clear_action_results
  488.     end
  489.     @status_window.refresh
  490.     # HP和MP的定時改變
  491.     wait(55) if slip_damage_flug
  492.     slip_damage_flug = false
  493.     for member in $game_party.members + $game_troop.members
  494.       member.clear_action_results
  495.       next unless member.exist?
  496.       actor = member.actor?
  497.       mp_damage = 0
  498.       for state in member.states
  499.         next unless state.extension.include?("連續傷害")
  500.         for ext in state.slip_extension
  501.           if ext[0] == "mp"
  502.             base_damage = ext[1] + member.maxmp * ext[2] / 100
  503.             mp_damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
  504.             slip_pop = ext[2]
  505.             slip_damage_flug = true
  506.           end
  507.         end
  508.         member.mp_damage = mp_damage
  509.         member.mp -= mp_damage
  510.         @spriteset.set_damage_pop(actor, member.index, mp_damage) if slip_pop
  511.       end   
  512.       member.clear_action_results
  513.     end
  514.     @status_window.refresh
  515.     # 傷害和回復的定時改變
  516.     wait(55) if slip_damage_flug
  517.     # 是否有自動回復
  518.     for member in $game_party.members
  519.       if member.auto_hp_recover and member.exist?
  520.         plus_hp = member.maxhp / 20
  521.         member.hp += plus_hp
  522.         @spriteset.set_damage_pop(true, member.index, plus_hp * -1)
  523.         plus_hp_flug = true
  524.       end
  525.       member.clear_action_results
  526.     end
  527.     @status_window.refresh
  528.     wait(55) if plus_hp_flug
  529.     @help_window.dispose if @help_window != nil
  530.     @help_window = nil
  531.     move2_info_viewport
  532.     $game_troop.turn_ending = true
  533.     $game_troop.preemptive = false
  534.     $game_troop.surprise = false
  535.     process_battle_event
  536.     $game_troop.turn_ending = false
  537.     start_party_command_selection
  538.   end
  539.   #--------------------------------------------------------------------------
  540.   # ● 戰鬥行動的實行 : 攻擊  ※再定義
  541.   #--------------------------------------------------------------------------
  542.   def execute_action_attack
  543.     if @active_battler.actor?
  544.       if @active_battler.weapon_id == 0
  545.         action = @active_battler.non_weapon
  546.         # 行動中不會死的隊員全員為不死身化
  547.         immortaling
  548.       else  
  549.         action = $data_weapons[@active_battler.weapon_id].base_action
  550.         # 用賦予戰鬥不能的武器來分歧不死身設定
  551.         if $data_weapons[@active_battler.weapon_id].state_set.include?(1)
  552.           for member in $game_party.members + $game_troop.members
  553.             next if member.immortal
  554.             next if member.dead?
  555.             member.dying = true
  556.           end
  557.         else
  558.           immortaling
  559.         end
  560.       end  
  561.     else
  562.       if @active_battler.weapon == 0
  563.         action = @active_battler.base_action
  564.         immortaling
  565.       else
  566.         action = $data_weapons[@active_battler.weapon].base_action
  567.         if $data_weapons[@active_battler.weapon].state_set.include?(1)
  568.           for member in $game_party.members + $game_troop.members
  569.             next if member.immortal
  570.             next if member.dead?
  571.             member.dying = true
  572.           end
  573.         else
  574.           immortaling
  575.         end
  576.       end  
  577.     end
  578.     target_decision
  579.     @spriteset.set_action(@active_battler.actor?, @active_battler.index, action)
  580.     playing_action
  581.   end
  582.   #--------------------------------------------------------------------------
  583.   # ● 戰鬥行動的實行 : 防禦  ※再定義
  584.   #--------------------------------------------------------------------------
  585.   def execute_action_guard
  586.     @help_window.set_text("防禦", 1)
  587.     @help_window.visible = true
  588.     # 解除角色的主動化
  589.     @active_battler.active = false
  590.     wait(45)
  591.     @help_window.visible = false
  592.   end
  593.   #--------------------------------------------------------------------------
  594.   # ● 戰鬥行動的實行 : 逃走
  595.   #--------------------------------------------------------------------------
  596.   def execute_action_escape
  597.     @spriteset.set_action(false, @active_battler.index, @active_battler.run_success)
  598.     @help_window.set_text("逃走", 1)
  599.     @help_window.visible = true
  600.     # 解除角色的主動化
  601.     @active_battler.active = false
  602.     @active_battler.escape
  603.     Sound.play_escape
  604.     wait(45)
  605.     @help_window.visible = false
  606.   end
  607.   #--------------------------------------------------------------------------
  608.   # ● 戰鬥行動的實行 : 待機  ※再定義
  609.   #--------------------------------------------------------------------------
  610.   def execute_action_wait
  611.     # 解除角色的主動化
  612.     @active_battler.active = false
  613.     wait(45)
  614.   end   
  615.   #--------------------------------------------------------------------------
  616.   # ● 戰鬥行動的實行 : 技能  ※再定義
  617.   #--------------------------------------------------------------------------
  618.   def execute_action_skill
  619.     skill = @active_battler.action.skill
  620.     # 用賦予戰鬥不能的技能來分歧不死身設定
  621.     if skill.plus_state_set.include?(1)
  622.       for member in $game_party.members + $game_troop.members
  623.         next if member.immortal
  624.         next if member.dead?
  625.         member.dying = true
  626.       end
  627.     else
  628.       # 行動中不會死的隊員全員為不死身化
  629.       immortaling
  630.     end
  631.     # 判別技能使用可能
  632.     return unless @active_battler.skill_can_use?(skill)
  633.     # 決定目標
  634.     target_decision(skill)
  635.     # 動作開始
  636.     @spriteset.set_action(@active_battler.actor?, @active_battler.index, skill.base_action)
  637.     # 幫助窗口中顯示技能名
  638.     pop_help(skill)
  639.     # 動作中
  640.     playing_action
  641.     # 技能成本消費
  642.     @active_battler.consum_skill_cost(skill)
  643.     # 還原狀態窗口
  644.     @status_window.refresh
  645.     # 取得公共事件
  646.     $game_temp.common_event_id = skill.common_event_id
  647.   end
  648.   #--------------------------------------------------------------------------
  649.   # ● 戰鬥行動的實行 : 物品  ※再定義
  650.   #--------------------------------------------------------------------------
  651.   def execute_action_item
  652.     item = @active_battler.action.item
  653.     # 用賦予戰鬥不能的物品來分歧不死身設定
  654.     if item.plus_state_set.include?(1)
  655.       for member in $game_party.members + $game_troop.members
  656.         next if member.immortal
  657.         next if member.dead?
  658.         member.dying = true
  659.       end
  660.     else
  661.       # 行動中不會死的隊員全員為不死身化
  662.       immortaling
  663.     end
  664.     $game_party.consume_item(item)
  665.     target_decision(item)
  666.     @spriteset.set_action(@active_battler.actor?, @active_battler.index, item.base_action)
  667.     pop_help(item)
  668.     playing_action
  669.     $game_temp.common_event_id = item.common_event_id
  670.   end
  671.   #--------------------------------------------------------------------------
  672.   # ● 決定目標
  673.   #--------------------------------------------------------------------------
  674.   def target_decision(obj = nil)
  675.     @targets = @active_battler.action.make_targets
  676.     # 目標不存在時、動作中斷
  677.     if @targets.size == 0
  678.       action = @active_battler.recover_action
  679.       @spriteset.set_action(@active_battler.actor?, @active_battler.index, action)
  680.     end
  681.     if obj != nil
  682.       # 如果默認了設定複數回合攻擊時變換成單體目標
  683.       if obj.for_two? or obj.for_three? or obj.dual?
  684.         @targets = [@targets[0]]
  685.       end
  686.       # 隨機目標時、選擇的一體保持在隨機範圍
  687.       if obj.extension.include?("隨機目標")
  688.         randum_targets = @targets.dup
  689.         @targets = [randum_targets[rand(randum_targets.size)]]
  690.       end
  691.     end
  692.     # 目標情報發送到角色精靈
  693.     @spriteset.set_target(@active_battler.actor?, @active_battler.index, @targets)
  694.   end   
  695.   #--------------------------------------------------------------------------
  696.   # ● 實行動作中
  697.   #--------------------------------------------------------------------------
  698.   def playing_action
  699.     loop do
  700.       update_basic
  701.       # 查看被歸納在主動角色的動作情報
  702.       action = @active_battler.play
  703.       next if action == 0
  704.       @active_battler.play = 0
  705.       if action[0] == "個別處理"
  706.         individual
  707.       elsif action == "擊倒許可"
  708.         unimmortaling
  709.       elsif action == "解除主動"
  710.         break action_end
  711.       elsif action == "完畢"
  712.         break action_end
  713.       elsif action[0] == "對像動畫"
  714.         damage_action(action[1])
  715.       end
  716.     end  
  717.   end
  718.   #--------------------------------------------------------------------------
  719.   # ● 個別處理
  720.   #--------------------------------------------------------------------------
  721.   def individual
  722.     # 保持目標情報
  723.     @individual_target = @targets
  724.     @stand_by_target = @targets.dup
  725.   end
  726.   #--------------------------------------------------------------------------
  727.   # ● 擊倒禁止
  728.   #--------------------------------------------------------------------------
  729.   def immortaling
  730.     # 賦予全員不死身
  731.     for member in $game_party.members + $game_troop.members
  732.       # 如果不能戰鬥時跳過處理
  733.       next if member.dead?
  734.       # 有事件等設定不死身創立解除無效的標誌
  735.       member.non_dead = true if member.immortal
  736.       member.immortal = true
  737.     end  
  738.   end  
  739.   #--------------------------------------------------------------------------
  740.   # ● 擊倒許可
  741.   #--------------------------------------------------------------------------
  742.   def unimmortaling
  743.     # 個別處理中無擊敗許可
  744.     return if @active_battler.individual
  745.     # 解除全員的不死身化(用事件設定的不死身除外)
  746.     for member in $game_party.members + $game_troop.members
  747.       if member.dying
  748.         member.dying = false
  749.         if member.dead? or member.hp == 0
  750.           member.add_state(1)
  751.           member.perform_collapse
  752.         end
  753.       end
  754.       next if member.non_dead
  755.       next if member.dead?
  756.       member.immortal = false
  757.       member.add_state(1) if member.hp == 0
  758.       member.perform_collapse
  759.     end
  760.     # 在這個時候反映待機動作
  761.     @targets = @stand_by_target if @stand_by_target != nil
  762.     return if @targets == nil or @targets.size == 0
  763.     for target in @targets
  764.       @spriteset.set_stand_by_action(target.actor?, target.index)
  765.       # 確認自動復活
  766.       next unless target.hp == 0
  767.       resurrection(target)
  768.     end  
  769.   end
  770.   #--------------------------------------------------------------------------
  771.   # ● 自動復活
  772.   #--------------------------------------------------------------------------
  773.   def resurrection(target)
  774.     for state in target.states
  775.       for ext in state.extension
  776.         name = ext.split('')
  777.         next unless name[0] == "自"
  778.         wait(50)
  779.         name = name.join
  780.         name.slice!("自動復活/")
  781.         target.hp = target.maxhp * name.to_i / 100
  782.         target.remove_state(1)
  783.         target.remove_state(state.id)
  784.         target.animation_id = N01::RESURRECTION
  785.         target.animation_mirror = true if $back_attack
  786.         @status_window.refresh
  787.         wait($data_animations[N01::RESURRECTION].frame_max * 4)
  788.       end  
  789.     end
  790.   end
  791.   #--------------------------------------------------------------------------
  792.   # ● 魔法反射・無效
  793.   #--------------------------------------------------------------------------
  794.   def magic_reflection(target, obj)
  795.     return if obj.physical_attack
  796.     for state in target.states
  797.       for ext in state.extension
  798.         name = ext.split('')
  799.         next unless name[0] == "魔"
  800.         if name[2] == "反"
  801.           name = name.join
  802.           name.slice!("魔法反射/")
  803.           target.animation_id = name.to_i
  804.           target.animation_mirror = true if $back_attack
  805.           @reflection = true
  806.         else
  807.           name = name.join
  808.           name.slice!("魔法無效/")
  809.           target.animation_id = name.to_i
  810.           target.animation_mirror = true if $back_attack
  811.           @invalid = true
  812.         end  
  813.       end  
  814.     end
  815.   end
  816.   #--------------------------------------------------------------------------
  817.   # ● 物理反射・無效
  818.   #--------------------------------------------------------------------------
  819.   def physics_reflection(target, obj)
  820.     return if obj != nil && !obj.physical_attack
  821.     for state in target.states
  822.       for ext in state.extension
  823.         name = ext.split('')
  824.         next unless name[0] == "物"
  825.         if name[2] == "反"
  826.           name = name.join
  827.           name.slice!("物理反射/")
  828.           target.animation_id = name.to_i
  829.           target.animation_mirror = true if $back_attack
  830.           @reflection = true
  831.         else
  832.           name = name.join
  833.           name.slice!("物理無效/")
  834.           target.animation_id = name.to_i
  835.           target.animation_mirror = true if $back_attack
  836.           @invalid = true
  837.         end
  838.       end  
  839.     end
  840.   end
  841.   #--------------------------------------------------------------------------
  842.   # ● 技能成本吸收
  843.   #--------------------------------------------------------------------------
  844.   def absorb_cost(target, obj)
  845.     for state in target.states
  846.       if state.extension.include?("成本吸收")
  847.         cost = @active_battler.calc_mp_cost(obj)
  848.         # 區分為SP消費和HP消費
  849.         return target.hp += cost if obj.extension.include?("HP消耗")
  850.         return target.mp += cost
  851.       end  
  852.     end
  853.   end
  854.   #--------------------------------------------------------------------------
  855.   # ● 吸收處理
  856.   #--------------------------------------------------------------------------
  857.   def absorb_attack(obj, target, index, actor)
  858.     absorb = target.hp_damage
  859.     absorb = target.mp_damage if target.mp_damage != 0
  860.     # 目標是複數同時吸收處理
  861.     @wide_attack = true if obj.scope == 2 or obj.scope == 4 or obj.scope == 6 or obj.extension.include?("全區域")
  862.     if @wide_attack && @absorb == nil && @targets.size != 1
  863.       # 返還吸收的部分
  864.       @active_battler.hp -= @active_battler.hp_damage
  865.       @active_battler.mp -= @active_battler.mp_damage
  866.       # 之後加算吸收返還的數值
  867.       @absorb = absorb
  868.       @absorb_target_size = @targets.size - 2
  869.     elsif @absorb != nil && @absorb_target_size > 0
  870.       @active_battler.hp -= @active_battler.hp_damage
  871.       @active_battler.mp -= @active_battler.mp_damage
  872.       @absorb += absorb
  873.       @absorb_target_size -= 1
  874.     # 處理複數目標的最重吸收
  875.     elsif @absorb != nil
  876.       # 返還吸收的部分
  877.       @active_battler.hp -= @active_battler.hp_damage
  878.       @active_battler.mp -= @active_battler.mp_damage
  879.       @absorb += absorb
  880.       # 在這裡反映全部吸收部分
  881.       @active_battler.hp_damage = -@absorb
  882.       @active_battler.mp_damage = -@absorb if target.mp_damage != 0
  883.       @active_battler.hp -= @active_battler.hp_damage
  884.       @active_battler.mp -= @active_battler.mp_damage
  885.       # 吸收量是0時吸收者方面的處理
  886.       absorb_action = ["absorb", nil, false] if @absorb == 0
  887.       absorb_action = [nil, nil, false] if @absorb != 0
  888.       @spriteset.set_damage_action(actor, index, absorb_action)
  889.       @active_battler.perform_collapse
  890.       @absorb = nil
  891.       @absorb_target_size = nil
  892.     # 單體吸收的處理
  893.     else
  894.       # 吸收量是0時吸收者方面的處理
  895.       absorb_action = ["absorb", nil, false] if absorb == 0
  896.       absorb_action = [nil, nil, false] if absorb != 0
  897.       @spriteset.set_damage_action(actor, index, absorb_action)
  898.       # 逆向吸收時HP為0時
  899.       @absorb_dead = true if @active_battler.hp == 0 && !@active_battler.non_dead
  900.     end
  901.     # 吸收量是0時對像者方面的處理
  902.     return 0 if absorb == 0
  903.   end
  904.   #--------------------------------------------------------------------------
  905.   # ● 動作完畢
  906.   #--------------------------------------------------------------------------
  907.   def action_end
  908.     # 初期化
  909.     @individual_target = nil
  910.     @help_window.visible = false if @help_window != nil && @help_window.visible
  911.     @active_battler.active = false
  912.     @active_battler.clear_action_results
  913.     # 慎重起見解除不死身化
  914.     unimmortaling
  915.     # 被反射時
  916.     if @active_battler.reflex != nil
  917.       if @active_battler.action.skill?
  918.         obj = @active_battler.action.skill
  919.         @active_battler.perfect_skill_effect(@active_battler, obj)
  920.       elsif @active_battler.action.item?
  921.         obj = @active_battler.action.item
  922.         @active_battler.item_effect(@active_battler, obj)
  923.       else
  924.         @active_battler.perfect_attack_effect(@active_battler)
  925.       end
  926.       pop_damage(@active_battler, obj, @active_battler.reflex)
  927.       @active_battler.perform_collapse
  928.       @active_battler.reflex = nil
  929.       wait(N01::COLLAPSE_WAIT)
  930.     end
  931.     #因逆向吸收戰鬥不能時
  932.     if @absorb_dead
  933.       @active_battler.perform_collapse
  934.       @absorb_dead = false
  935.       wait(N01::COLLAPSE_WAIT)
  936.     end
  937.     # 縮短到下次行動前的等待
  938.     wait(N01::ACTION_WAIT)
  939.   end  
  940.   #--------------------------------------------------------------------------
  941.   # ● 傷害處理
  942.   #--------------------------------------------------------------------------
  943.   def damage_action(action)
  944.     # 單獨處理時目標一個一個發出
  945.     @targets = [@individual_target.shift] if @active_battler.individual
  946.     # 技能時
  947.     if @active_battler.action.skill?
  948.       obj = @active_battler.action.skill
  949.       for target in @targets
  950.         return if target == nil
  951.         return if target.dead? && !obj.for_dead_friend?
  952.         # HP為0時戰鬥不能復活以外不MISS
  953.         target.revival = true if obj.for_dead_friend?
  954.         if target.hp == 0 && !obj.for_dead_friend?
  955.           target.perfect_skill_effect(@active_battler, obj)
  956.         # 確認必中
  957.         elsif obj.extension.include?("必中")
  958.           target.perfect_skill_effect(@active_battler, obj)
  959.         else
  960.           # 確認反射
  961.           magic_reflection(target, obj) unless obj.extension.include?("無視反射")
  962.           physics_reflection(target, obj) unless obj.extension.include?("無視反射")
  963.           # 計算傷害
  964.           target.skill_effect(@active_battler, obj) unless @reflection or @invalid
  965.         end  
  966.         pop_damage(target, obj, action) unless @reflection or @invalid
  967.         # 確認成本吸收
  968.         absorb_cost(target, obj)
  969.         # 獲取反射動作
  970.         @active_battler.reflex = action if @reflection
  971.         @reflection = false
  972.         @invalid = false
  973.       end
  974.     # 物品時
  975.     elsif @active_battler.action.item?
  976.       obj = @active_battler.action.item
  977.       for target in @targets
  978.         return if target == nil
  979.         return if target.dead? && !obj.for_dead_friend?
  980.         target.revival = true if obj.for_dead_friend?
  981.         if target.hp == 0 && !obj.for_dead_friend?
  982.           target.perfect_item_effect(@active_battler, obj)
  983.         elsif obj.extension.include?("必中")
  984.           target.perfect_item_effect(@active_battler, obj)
  985.         else
  986.           magic_reflection(target, obj) unless obj.extension.include?("無視反射")
  987.           physics_reflection(target, obj) unless obj.extension.include?("無視反射")
  988.           target.item_effect(@active_battler, obj) unless @reflection or @invalid
  989.         end
  990.         pop_damage(target, obj, action) unless @reflection or @invalid
  991.         @active_battler.reflex = action if @reflection
  992.         @reflection = false
  993.         @invalid = false
  994.       end
  995.     # 通常攻擊時
  996.     else
  997.       for target in @targets
  998.         return if target == nil or target.dead?
  999.         physics_reflection(target, nil)
  1000.         target.perfect_attack_effect(@active_battler) if target.hp <= 0
  1001.         target.attack_effect(@active_battler) unless target.hp <= 0 or @reflection or @invalid
  1002.         pop_damage(target, nil, action) unless @reflection or @invalid
  1003.         # 獲取反射動作
  1004.         @active_battler.reflex = action if @reflection
  1005.         @reflection = false
  1006.         @invalid = false
  1007.       end
  1008.     end
  1009.     # 還原狀態窗口
  1010.     @status_window.refresh
  1011.     # 考慮連續性懂得隨機目標、立刻選擇下個目標
  1012.     return if obj == nil
  1013.     target_decision(obj) if obj.extension.include?("隨機目標")
  1014.   end
  1015.   #--------------------------------------------------------------------------
  1016.   # ● 傷害表示  action = [動畫ID,反轉標誌,動作許可]
  1017.   #--------------------------------------------------------------------------
  1018.   def pop_damage(target, obj, action)
  1019.     index = @active_battler.index
  1020.     actor = @active_battler.actor?
  1021.     if obj != nil
  1022.       # 技能或者物品是吸收屬性時
  1023.       absorb = absorb_attack(obj, target, index, actor) if obj.absorb_damage
  1024.       action.push(true) if absorb == 0
  1025.       # 擴張設定為傷害動作禁止時
  1026.       action[2] = false if obj.extension.include?("禁止傷害動作")
  1027.     end
  1028.     # 還原對像
  1029.     @spriteset.set_damage_action(target.actor?, target.index, action)
  1030.   end
  1031. end  
  1032. #==============================================================================
  1033. # ■ Game_BattleAction
  1034. #------------------------------------------------------------------------------
  1035. #  戰鬥行動處理的類。
  1036. #==============================================================================
  1037. class Game_BattleAction
  1038.   #--------------------------------------------------------------------------
  1039.   # ● 判定行動是否有效  ※再定義
  1040.   #--------------------------------------------------------------------------
  1041.   def valid?
  1042.     return false if nothing?                      # 什麼都不作
  1043.     return true if @forcing                       # 強制行動中
  1044.     return false unless battler.movable?          # 行動不能
  1045.     if skill?                                     # 技能
  1046.       if battler.derivation != 0
  1047.         battler.derivation = 0
  1048.         return true
  1049.       end  
  1050.       return false unless battler.skill_can_use?(skill)
  1051.     elsif item?                                   # 物品
  1052.       return false unless friends_unit.item_can_use?(item)
  1053.     end
  1054.     return true
  1055.   end
  1056.   #--------------------------------------------------------------------------
  1057.   # ● 作成目標的排列  ※再定義
  1058.   #--------------------------------------------------------------------------
  1059.   def make_targets
  1060.     if attack?
  1061.       return make_attack_targets
  1062.     elsif skill?
  1063.       targets = make_obj_targets(skill)
  1064.       targets = make_obj_targets2(skill, targets) if skill.extension != [""]
  1065.       return targets
  1066.     elsif item?
  1067.       targets = make_obj_targets(item)
  1068.       targets = make_obj_targets2(item, targets) if item.extension != [""]
  1069.       return targets
  1070.     end
  1071.   end
  1072.   #--------------------------------------------------------------------------
  1073.   # ● 作成技能或是物品的目標的擴張
  1074.   #--------------------------------------------------------------------------
  1075.   def make_obj_targets2(obj, targets)
  1076.     if obj.extension.include?("全區域")
  1077.       targets = []
  1078.       targets += opponents_unit.existing_members
  1079.       targets += friends_unit.existing_members
  1080.     end
  1081.     if obj.extension.include?("自分以外")
  1082.       targets.delete($game_party.members[battler.index]) if battler.actor?
  1083.       targets.delete($game_troop.members[battler.index]) unless battler.actor?
  1084.     end
  1085.     return targets.compact
  1086.   end
  1087. end
  1088. #==============================================================================
  1089. # ■ Sprite_Base
  1090. #------------------------------------------------------------------------------
  1091. #  追加了動畫的表示處理的精靈的類。
  1092. #==============================================================================
  1093. class Sprite_Base < Sprite
  1094.   #--------------------------------------------------------------------------
  1095.   # ● 動畫的更新 動畫追隨精靈
  1096.   #--------------------------------------------------------------------------
  1097.   alias update_animation_n01 update_animation
  1098.   def update_animation
  1099.     @animation_ox = x - ox + width / 2
  1100.     @animation_oy = y - oy + height / 2
  1101.     update_animation_n01
  1102.   end
  1103. end  
  1104. #==============================================================================
  1105. # ■ Spriteset_Battle
  1106. #------------------------------------------------------------------------------
  1107. #  整理戰鬥畫面的精靈的類。
  1108. #==============================================================================
  1109. class Spriteset_Battle
  1110.   #--------------------------------------------------------------------------
  1111.   # ● 敵方精靈的作成
  1112.   #--------------------------------------------------------------------------
  1113.   def create_enemies
  1114.     @enemy_sprites = []
  1115.     for i in 0...$game_troop.members.size
  1116.       @enemy_sprites.push(Sprite_Battler.new(@viewport1, $game_troop.members[i]))
  1117.       @enemy_sprites[i].opacity = 0 if $game_troop.members[i].hidden
  1118.     end
  1119.   end
  1120.   #--------------------------------------------------------------------------
  1121.   # ● 主人公精靈的作成
  1122.   #--------------------------------------------------------------------------
  1123.   def create_actors
  1124.     @actor_sprites = []
  1125.     # 準備成員最大數精靈
  1126.     for i in 0...N01::MAX_MEMBER
  1127.       @actor_sprites.push(Sprite_Battler.new(@viewport1, $game_party.members[i]))
  1128.       if $game_party.members[i] != nil
  1129.         @actor_sprites[i].make_battler
  1130.         @actor_sprites[i].first_action
  1131.       end
  1132.     end
  1133.   end
  1134.   #--------------------------------------------------------------------------
  1135.   # ● 戰鬥層精靈的作成
  1136.   #--------------------------------------------------------------------------
  1137.   def create_battlefloor
  1138.     @battlefloor_sprite = Sprite.new(@viewport1)
  1139.     @battlefloor_sprite.bitmap = Cache.system("BattleFloor")
  1140.     @battlefloor_sprite.x = N01::FLOOR[0]
  1141.     @battlefloor_sprite.y = N01::FLOOR[1]
  1142.     @battlefloor_sprite.opacity = N01::FLOOR[2]
  1143.     @battlefloor_sprite.z = 1
  1144.     # 偷襲時時、反轉層面和背景
  1145.     back_attack
  1146.     if $back_attack
  1147.       @battlefloor_sprite.mirror = true
  1148.       @battleback_sprite.mirror = true
  1149.       $game_troop.surprise = true
  1150.     else  
  1151.       $game_troop.surprise = false
  1152.     end  
  1153.   end  
  1154.   #--------------------------------------------------------------------------
  1155.   # ● 背部攻擊
  1156.   #--------------------------------------------------------------------------
  1157.   def back_attack  
  1158.     # 強制背部攻擊時標誌ON
  1159.     for i in 0...N01::BACK_ATTACK_SWITCH.size
  1160.       return $back_attack = true if $game_switches[N01::BACK_ATTACK_SWITCH[i]]
  1161.     end
  1162.     # 如果沒發生偷襲時將中斷處理
  1163.     return $back_attack = false unless $game_troop.surprise && N01::BACK_ATTACK
  1164.     # 確認根據裝備等背部攻擊的無效化
  1165.     for actor in $game_party.members
  1166.       return $back_attack = false if N01::NON_BACK_ATTACK_WEAPONS.include?(actor.weapon_id)
  1167.       return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR1.include?(actor.armor1_id)
  1168.       return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR2.include?(actor.armor2_id)
  1169.       return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR3.include?(actor.armor3_id)
  1170.       return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR4.include?(actor.armor4_id)
  1171.       for i in 0...N01::NON_BACK_ATTACK_SKILLS.size
  1172.         return $back_attack = false if actor.skill_id_learn?(N01::NON_BACK_ATTACK_SKILLS[i])
  1173.       end  
  1174.     end
  1175.     # 發生背部攻擊
  1176.     $back_attack = true
  1177.   end
  1178.   #--------------------------------------------------------------------------
  1179.   # ● 主人公精靈的更新  ※再定義
  1180.   #--------------------------------------------------------------------------
  1181.   def update_actors
  1182.     for i in 0...@actor_sprites.size
  1183.       if $party_change
  1184.         $party_change = false
  1185.         dispose_actors
  1186.         return create_actors
  1187.       end
  1188.       if @actor_sprites[i].battler.id != $game_party.members[i].id
  1189.         dispose_actors
  1190.         return create_actors
  1191.       end
  1192.       @actor_sprites[i].update
  1193.     end
  1194.   end
  1195.   #--------------------------------------------------------------------------
  1196.   # ● 傷害動作組合 
  1197.   #--------------------------------------------------------------------------  
  1198.   def set_damage_action(actor, index, action)
  1199.     @actor_sprites[index].damage_action(action) if actor
  1200.     @enemy_sprites[index].damage_action(action) unless actor
  1201.   end
  1202.   #--------------------------------------------------------------------------
  1203.   # ● 傷害POP組合 
  1204.   #--------------------------------------------------------------------------  
  1205.   def set_damage_pop(actor, index, damage)
  1206.     @actor_sprites[index].damage_pop(damage) if actor
  1207.     @enemy_sprites[index].damage_pop(damage) unless actor
  1208.   end
  1209.   #--------------------------------------------------------------------------
  1210.   # ● 目標組合
  1211.   #--------------------------------------------------------------------------  
  1212.   def set_target(actor, index, target)
  1213.     @actor_sprites[index].get_target(target) if actor
  1214.     @enemy_sprites[index].get_target(target) unless actor
  1215.   end
  1216.   #--------------------------------------------------------------------------
  1217.   # ● 動作組合
  1218.   #--------------------------------------------------------------------------  
  1219.   def set_action(actor, index, kind)
  1220.     @actor_sprites[index].start_action(kind) if actor
  1221.     @enemy_sprites[index].start_action(kind) unless actor
  1222.   end  
  1223.   #--------------------------------------------------------------------------
  1224.   # ● 待機動作組合
  1225.   #--------------------------------------------------------------------------  
  1226.   def set_stand_by_action(actor, index)
  1227.     @actor_sprites[index].push_stand_by if actor
  1228.     @enemy_sprites[index].push_stand_by unless actor
  1229.   end  
  1230.   #--------------------------------------------------------------------------
  1231.   # ● 光標移動的組合
  1232.   #--------------------------------------------------------------------------  
  1233.   def set_cursor(actor, index)
  1234.     return [@actor_sprites[index].x, @actor_sprites[index].y] if actor
  1235.     return [@enemy_sprites[index].x, @enemy_sprites[index].y] unless actor
  1236.   end
  1237. end
  1238. #==============================================================================
  1239. # ■ Sprite_MoveAnime
  1240. #------------------------------------------------------------------------------
  1241. #  動畫飛出用的精靈。
  1242. #==============================================================================
  1243. class Sprite_MoveAnime < Sprite_Base
  1244.   #--------------------------------------------------------------------------
  1245.   # ● 公開變數
  1246.   #--------------------------------------------------------------------------
  1247.   attr_accessor :battler
  1248.   attr_accessor :base_x   # 自身基本X座標
  1249.   attr_accessor :base_y   # 自身基本Y座標
  1250.   #--------------------------------------------------------------------------
  1251.   # ● 客觀初期化
  1252.   #--------------------------------------------------------------------------
  1253.   def initialize(viewport,battler = nil)
  1254.     super(viewport)
  1255.     @battler = battler
  1256.     self.visible = false
  1257.     @base_x = 0
  1258.     @base_y = 0
  1259.     @move_x = 0                # 移動後的X坐標
  1260.     @move_y = 0                # 移動後Y坐標
  1261.     @moving_x = 0              # 1單位相當移動的X坐標
  1262.     @moving_y = 0              # 1單位相當移動的Y坐標
  1263.     @orbit = 0                 # 圓軌道
  1264.     @orbit_plus = 0            # 加算的圓軌道
  1265.     @orbit_time = 0            # 圓軌道計算時間
  1266.     @through = false           # 是否貫通
  1267.     @finish = false            # 移動完畢的標誌
  1268.     @time = 0                  # 移動時間
  1269.     @angle = 0                 # 一動時間
  1270.     @angling = 0               # 1單位相當移動的武器的角度
  1271.   end
  1272.   #--------------------------------------------------------------------------
  1273.   # ● 獲取動作
  1274.   #--------------------------------------------------------------------------  
  1275.   def anime_action(id,mirror,distanse_x,distanse_y,type,speed,orbit,weapon,icon_index,icon_weapon)
  1276.     # 算出1單位相當的移動距離
  1277.     @time = speed
  1278.     @moving_x = distanse_x / speed
  1279.     @moving_y = distanse_y / speed
  1280.     # 是否貫通
  1281.     @through = true if type == 1
  1282.     # 獲取圓軌道
  1283.     @orbit_plus = orbit
  1284.     @orbit_time = @time
  1285.     # 有無武器圖片
  1286.     if weapon != ""
  1287.       action = N01::ANIME[weapon].dup
  1288.       @angle = action[0]
  1289.       end_angle = action[1]
  1290.       time = action[2]
  1291.       # 調出1單位相當的旋轉角度
  1292.       @angling = (end_angle - @angle)/ time
  1293.       # 取得開始角度
  1294.       self.angle = @angle
  1295.       # 顯示武器圖片
  1296.       self.mirror = mirror
  1297.       if icon_weapon
  1298.         self.bitmap = Cache.system("Iconset")
  1299.         self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  1300.         self.ox = 12
  1301.         self.oy = 12
  1302.       else
  1303.         self.bitmap = Cache.character(icon_index)
  1304.         self.ox = self.bitmap.width / 2
  1305.         self.oy = self.bitmap.height / 2
  1306.       end  
  1307.       self.visible = true
  1308.       # 顯示在角色面前
  1309.       self.z = 1000
  1310.     end  
  1311.     # 最初不動只顯示一次
  1312.     self.x = @base_x + @move_x
  1313.     self.y = @base_y + @move_y + @orbit
  1314.     if id != 0
  1315.       animation = $data_animations[id]
  1316.       start_animation(animation, mirror)
  1317.     end
  1318.   end  
  1319.   #--------------------------------------------------------------------------
  1320.   # ● 變化了的移動組合
  1321.   #--------------------------------------------------------------------------  
  1322.   def action_reset
  1323.     @moving_x = @moving_y = @move_x = @move_y = @base_x = @base_y = @orbit = 0
  1324.     @orbit_time = @angling = @angle = 0   
  1325.     @through = self.visible = @finish = false
  1326.     dispose_animation
  1327.   end   
  1328.   #--------------------------------------------------------------------------
  1329.   # ● 貫通完畢
  1330.   #--------------------------------------------------------------------------  
  1331.   def finish?
  1332.     return @finish
  1333.   end
  1334.   #--------------------------------------------------------------------------
  1335.   # ● 單位更新
  1336.   #--------------------------------------------------------------------------
  1337.   def update
  1338.     super
  1339.     # 時間消耗
  1340.     @time -= 1
  1341.     # 時間內指定的移動
  1342.     if @time >= 0
  1343.       @move_x += @moving_x
  1344.       @move_y += @moving_y
  1345.       # 計算圓軌道
  1346.       if @time < @orbit_time / 2
  1347.         @orbit_plus = @orbit_plus * 5 / 4
  1348.       elsif @time == @orbit_time / 2
  1349.         @orbit_plus *= -1
  1350.       else
  1351.         @orbit_plus = @orbit_plus * 2 / 3
  1352.       end  
  1353.       @orbit += @orbit_plus
  1354.     end   
  1355.     # 就算時間完畢如果是貫穿的話也會繼續直進
  1356.     @time = 100 if @time < 0 && @through
  1357.     @finish = true if @time < 0 && !@through
  1358.     # 更新精靈的坐標
  1359.     self.x = @base_x + @move_x
  1360.     self.y = @base_y + @move_y + @orbit
  1361.     # 貫穿時、從畫面消失的完畢標誌ON
  1362.     if self.x < -200 or self.x > 840 or self.y < -200 or self.y > 680
  1363.       @finish = true
  1364.     end
  1365.     # 更新武器圖片
  1366.     if self.visible
  1367.       @angle += @angling
  1368.       self.angle = @angle
  1369.     end  
  1370.   end
  1371. end
  1372. #==============================================================================
  1373. # ■ Sprite_Weapon
  1374. #------------------------------------------------------------------------------
  1375. #  顯示武器用的精靈。
  1376. #==============================================================================
  1377. class Sprite_Weapon < Sprite_Base
  1378.   #--------------------------------------------------------------------------
  1379.   # ● 公開變數
  1380.   #--------------------------------------------------------------------------
  1381.   attr_accessor :battler
  1382.   #--------------------------------------------------------------------------
  1383.   # ● 客觀初始化
  1384.   #--------------------------------------------------------------------------
  1385.   def initialize(viewport,battler = nil)
  1386.     super(viewport)
  1387.     @battler = battler
  1388.     @action = []                     # 武器的動作情報
  1389.     @move_x = 0                      # 移動後的X坐標
  1390.     @move_y = 0                      # 移動後的Y坐標
  1391.     @move_z = 0                      # 移動後的Z坐標
  1392.     @plus_x = 0                      # 略微調整X坐標
  1393.     @plus_y = 0                      # 略微調整Y坐標
  1394.     @angle = 0                       # 武器的旋轉角度
  1395.     @zoom_x = 1                      # 武器的橫向放大率
  1396.     @zoom_y = 1                      # 武器的縱向放大率
  1397.     @moving_x = 0                    # 1單位相當移動的X坐標
  1398.     @moving_y = 0                    # 1單位相當移動的Y坐標
  1399.     @angling = 0                     # 1單位相當的旋轉角度
  1400.     @zooming_x = 1                   # 1單位相當的橫向放大率
  1401.     @zooming_y = 1                   # 1單位相當的縱向放大率   
  1402.     @freeze = -1                     # 固定動畫用的武器位置
  1403.     @mirroring = false               # 角色是否為反轉
  1404.     @time = N01::ANIME_PATTERN + 1   # 更新回數
  1405.     # 獲取武器
  1406.     weapon_graphics
  1407.   end
  1408.   #--------------------------------------------------------------------------
  1409.   # ● 解放
  1410.   #--------------------------------------------------------------------------
  1411.   def dispose
  1412.     self.bitmap.dispose if self.bitmap != nil
  1413.     super
  1414.   end
  1415.   #--------------------------------------------------------------------------
  1416.   # ● 獲取武器
  1417.   #--------------------------------------------------------------------------  
  1418.   def weapon_graphics(left = false)
  1419.     if @battler.actor?
  1420.       weapon = @battler.weapons[0] unless left
  1421.       weapon = @battler.weapons[1] if left
  1422.     else
  1423.       weapon = $data_weapons[@battler.weapon]
  1424.     end
  1425.     # 確認敵方的反轉標誌
  1426.     return if weapon == nil
  1427.     # 如果沒有武器時處理被取消
  1428.     if weapon.graphic == ""
  1429.       icon_index = weapon.icon_index
  1430.       self.bitmap = Cache.system("Iconset")
  1431.       self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  1432.       @weapon_width = @weapon_height = 24
  1433.     # 如果有指定ID時、獲取不是ICON的圖片  
  1434.     else
  1435.       self.bitmap = Cache.character(weapon.graphic)
  1436.       @weapon_width = self.bitmap.width
  1437.       @weapon_height = self.bitmap.height
  1438.     end
  1439.   end
  1440.   #--------------------------------------------------------------------------
  1441.   # ● 獲取動畫固定時的武器位置
  1442.   #--------------------------------------------------------------------------  
  1443.   def freeze(action)
  1444.     @freeze = action
  1445.   end
  1446.   #--------------------------------------------------------------------------
  1447.   # ● 獲取武器動作 freeze
  1448.   #--------------------------------------------------------------------------  
  1449.   def weapon_action(action,loop)
  1450.     # 沒有名稱時不顯示
  1451.     if action == ""
  1452.       self.visible = false
  1453.     # 空手時不顯示
  1454.     elsif @weapon_id == 0
  1455.       self.visible = false
  1456.     # 受取武器的動作情報
  1457.     else
  1458.       @action = N01::ANIME[action]
  1459.       act0 = @action[0]
  1460.       act1 = @action[1]
  1461.       act2 = @action[2]
  1462.       act3 = @action[3]
  1463.       act4 = @action[4]
  1464.       act5 = @action[5]
  1465.       act6 = @action[6]
  1466.       act7 = @action[7]
  1467.       act8 = @action[8]
  1468.       act9 = @action[9]
  1469.       act10 = @action[10]
  1470.       # 角色為反轉時、X軸的動作也逆轉
  1471.       if @mirroring
  1472.         act0 *= -1
  1473.         act3 *= -1
  1474.         act4 *= -1
  1475.         act9 *= -1
  1476.       end
  1477.       # 背部攻擊時逆轉
  1478.       time = N01::ANIME_PATTERN
  1479.       # 確認Z坐標
  1480.       if act2
  1481.         self.z = @battler.position_z + 1
  1482.       else
  1483.         self.z = @battler.position_z - 1
  1484.       end
  1485.       # 在這裡實行反轉、如果已經反轉就還原
  1486.       if act6
  1487.         if self.mirror
  1488.           self.mirror = false
  1489.         else
  1490.           self.mirror = true
  1491.         end
  1492.       end
  1493.       # 反映角色的反轉
  1494.       if @mirroring
  1495.         if self.mirror
  1496.           self.mirror = false
  1497.         else
  1498.           self.mirror = true
  1499.         end
  1500.       end
  1501.       # 計算以動畫圖片數相除的變化
  1502.       @moving_x = act0 / time
  1503.       @moving_y = act1 / time
  1504.       # 代入最初的角度
  1505.       @angle = act3
  1506.       self.angle = @angle
  1507.       # 計算更新角度
  1508.       @angling = (act4 - act3)/ time
  1509.       # 角度沒有被插入時、在這裡加算剩餘旋轉的部分
  1510.       @angle += (act4 - act3) % time
  1511.       # 擴大縮小
  1512.       @zooming_x = (1 - act7) / time
  1513.       @zooming_y = (1 - act8) / time
  1514.       # 如果是反轉時、逆轉反轉前的原點
  1515.       if self.mirror
  1516.         case act5
  1517.         when 1 # 左上→到右上
  1518.           act5 = 2
  1519.         when 2 # 右上→到左上
  1520.           act5 = 1
  1521.         when 3 # 左下→到右下
  1522.           act5 = 4
  1523.         when 4 # 右下→到左下
  1524.           act5 = 3
  1525.         end  
  1526.       end   
  1527.       # 設定旋轉前的原點
  1528.       case act5
  1529.       when 0 # 中心
  1530.         self.ox = @weapon_width / 2
  1531.         self.oy = @weapon_height / 2
  1532.       when 1 # 左上
  1533.         self.ox = 0
  1534.         self.oy = 0
  1535.       when 2 # 右上
  1536.         self.ox = @weapon_width
  1537.         self.oy = 0
  1538.       when 3 # 左下
  1539.         self.ox = 0
  1540.         self.oy = @weapon_height
  1541.       when 4 # 右下
  1542.         self.ox = @weapon_width
  1543.         self.oy = @weapon_height
  1544.       end  
  1545.       # 略微調整坐標
  1546.       @plus_x = act9
  1547.       @plus_y = act10
  1548.       # 往返循環時標誌ON
  1549.       @loop = true if loop == 0
  1550.       # 第一次時0開始、在這時作-1回的動作
  1551.       @angle -= @angling
  1552.       @zoom_x -= @zooming_x
  1553.       @zoom_y -= @zooming_y
  1554.       # 更新精靈的坐標
  1555.       @move_x -= @moving_x
  1556.       @move_y -= @moving_y
  1557.       @move_z = 1000 if act2
  1558.       # 固定動畫時、在這時消化動作
  1559.       if @freeze != -1
  1560.         for i in 0..@freeze + 1
  1561.           @angle += @angling
  1562.           @zoom_x += @zooming_x
  1563.           @zoom_y += @zooming_y
  1564.           # 更新精靈的坐標
  1565.           @move_x += @moving_x
  1566.           @move_y += @moving_y
  1567.         end
  1568.         @angling = 0
  1569.         @zooming_x = 0
  1570.         @zooming_y = 0
  1571.         @moving_x = 0
  1572.         @moving_y = 0
  1573.       end
  1574.       # 可視
  1575.       self.visible = true
  1576.     end
  1577.   end  
  1578.   #--------------------------------------------------------------------------
  1579.   # ● 變化後的動作全部組合
  1580.   #--------------------------------------------------------------------------  
  1581.   def action_reset
  1582.     @moving_x = @moving_y = @move_x = @move_y = @plus_x = @plus_y = 0
  1583.     @angling = @zooming_x = @zooming_y = @angle = self.angle = @move_z = 0
  1584.     @zoom_x = @zoom_y = self.zoom_x = self.zoom_y = 1
  1585.     self.mirror = self.visible = @loop = false
  1586.     @freeze = -1
  1587.     @action = []
  1588.     @time = N01::ANIME_PATTERN + 1
  1589.   end
  1590.   #--------------------------------------------------------------------------
  1591.   # ● 作出往返循環
  1592.   #--------------------------------------------------------------------------  
  1593.   def action_loop
  1594.     # 讓動作相反
  1595.     @angling *= -1
  1596.     @zooming_x *= -1
  1597.     @zooming_y *= -1
  1598.     @moving_x *= -1
  1599.     @moving_y *= -1
  1600.   end  
  1601.   #--------------------------------------------------------------------------
  1602.   # ● 主人公是反轉時、自身也反轉
  1603.   #--------------------------------------------------------------------------
  1604.   def mirroring
  1605.     return @mirroring = false if @mirroring
  1606.     @mirroring = true
  1607.   end  
  1608.   #--------------------------------------------------------------------------
  1609.   # ● 只有在主人公動畫被更新時武器動作的變化也更新
  1610.   #--------------------------------------------------------------------------
  1611.   def action
  1612.     return if @time <= 0
  1613.     @time -= 1
  1614.     # 旋轉、更新放大縮小
  1615.     @angle += @angling
  1616.     @zoom_x += @zooming_x
  1617.     @zoom_y += @zooming_y
  1618.     # 更新精靈的坐標
  1619.     @move_x += @moving_x
  1620.     @move_y += @moving_y
  1621.     # 往返循環時動作反轉
  1622.     if @loop && @time == 0
  1623.       @time = N01::ANIME_PATTERN + 1
  1624.       action_loop
  1625.     end
  1626.   end  
  1627.   #--------------------------------------------------------------------------
  1628.   # ● 單位更新
  1629.   #--------------------------------------------------------------------------
  1630.   def update
  1631.     super
  1632.     # 旋轉、更新放大縮小
  1633.     self.angle = @angle
  1634.     self.zoom_x = @zoom_x
  1635.     self.zoom_y = @zoom_y
  1636.     # 更新精靈的坐標
  1637.     self.x = @battler.position_x + @move_x + @plus_x
  1638.     self.y = @battler.position_y + @move_y + @plus_y
  1639.     self.z = @battler.position_z + @move_z - 1
  1640.   end
  1641. end

  1642. #==============================================================================
  1643. # ■ Game_Battler (分割定義 1)
  1644. #------------------------------------------------------------------------------
  1645. #  處理角色的類。
  1646. #==============================================================================
  1647. class Game_Battler
  1648.   #--------------------------------------------------------------------------
  1649.   # ● 公開變數
  1650.   #--------------------------------------------------------------------------
  1651.   attr_accessor :hp_damage        # 行動結果: HP 傷害
  1652.   attr_accessor :mp_damage        # 行動結果: MP 傷害
  1653.   attr_accessor :move_x           # X方向的移動修正
  1654.   attr_accessor :move_y           # Y方向的移動修正
  1655.   attr_accessor :move_z           # Z方向的移動修正
  1656.   attr_accessor :jump             # 修正跳躍
  1657.   attr_accessor :active           # 是否主動
  1658.   attr_accessor :non_dead         # 不死身標誌
  1659.   attr_accessor :dying            # 即死標誌
  1660.   attr_accessor :slip_damage      # 連續傷害標誌
  1661.   attr_accessor :derivation       # 技能連發ID
  1662.   attr_accessor :individual       # 技能連發ID
  1663.   attr_accessor :play             # 動作情報
  1664.   attr_accessor :force_action     # 強制動作情報
  1665.   attr_accessor :force_target     # 目標變更情報
  1666.   attr_accessor :revival          # 復活
  1667.   attr_accessor :double_damage    # HPMP兩方同時傷害
  1668.   attr_accessor :reflex           # 技能反射情報
  1669.   attr_accessor :absorb           # 技能成本吸收
  1670.   attr_reader   :base_position_x  # 初期配置X坐標
  1671.   attr_reader   :base_position_y  # 初期配置Y座標   
  1672.   attr_accessor :force_damage     # 事件的傷害
  1673.   #--------------------------------------------------------------------------
  1674.   # ● 客觀初期化
  1675.   #--------------------------------------------------------------------------
  1676.   alias initialize_n01 initialize
  1677.   def initialize
  1678.     initialize_n01
  1679.     @move_x = @move_y = @move_z = @plus_y = @jump = @derivation = @play = 0
  1680.     @force_action = @force_target = @base_position_x = @base_position_y = 0
  1681.     @absorb = @act_time = @force_damage = 0
  1682.     @active = @non_dead = @individual = @slip_damage = @revival = false
  1683.     @double_damage = @dying = false
  1684.   end
  1685.   #--------------------------------------------------------------------------
  1686.   # ● 返還最新的狀態ID
  1687.   #--------------------------------------------------------------------------
  1688.   def state_id
  1689.     return @states[@states.size - 1]
  1690.   end
  1691.   #--------------------------------------------------------------------------
  1692.   # ● 判定技能的使用可能  ※再定義
  1693.   #--------------------------------------------------------------------------
  1694.   def skill_can_use?(skill)
  1695.     return false unless skill.is_a?(RPG::Skill)
  1696.     return false unless movable?
  1697.     return false if silent? and skill.spi_f > 0
  1698.     if skill.extension.include?("HP消耗")
  1699.       return false if calc_mp_cost(skill) > hp
  1700.     else
  1701.       return false if calc_mp_cost(skill) > mp
  1702.     end
  1703.     if $game_temp.in_battle
  1704.       return skill.battle_ok?
  1705.     else
  1706.       return skill.menu_ok?
  1707.     end
  1708.   end
  1709.   #--------------------------------------------------------------------------
  1710.   # ● 技能的消費 MP 計算  ※再定義
  1711.   #--------------------------------------------------------------------------
  1712.   def calc_mp_cost(skill)
  1713.     if half_mp_cost && !skill.extension.include?("MP消耗減半無效")
  1714.       cost = skill.mp_cost / 2
  1715.     else
  1716.       cost = skill.mp_cost
  1717.     end
  1718.     if skill.extension.include?("%成本MAX")
  1719.       return self.maxhp * cost / 100 if skill.extension.include?("HP消耗")
  1720.       return self.maxmp * cost / 100
  1721.     elsif skill.extension.include?("%成本NOW")
  1722.       return self.hp * cost / 100 if skill.extension.include?("HP消耗")
  1723.       return self.mp * cost / 100
  1724.     end
  1725.     return cost
  1726.   end
  1727.   #--------------------------------------------------------------------------
  1728.   # ● 技能成本消費
  1729.   #--------------------------------------------------------------------------
  1730.   def consum_skill_cost(skill)
  1731.     return false unless skill_can_use?(skill)
  1732.     cost = calc_mp_cost(skill)
  1733.     return self.hp -= cost if skill.extension.include?("HP消耗")
  1734.     return self.mp -= cost
  1735.   end
  1736.   #--------------------------------------------------------------------------
  1737.   # ● 根據通常攻擊計算傷害  修正二刀流
  1738.   #--------------------------------------------------------------------------
  1739.   alias make_attack_damage_value_n01 make_attack_damage_value
  1740.   def make_attack_damage_value(attacker)
  1741.     make_attack_damage_value_n01(attacker)
  1742.     # 只有在裝備了兩把武器時修正有效
  1743.     return unless attacker.actor?
  1744.     return if attacker.weapons[0] == nil
  1745.     return if attacker.weapons[1] == nil
  1746.     @hp_damage = @hp_damage * N01::TWO_SWORDS_STYLE[0] / 100
  1747.   end
  1748.   #--------------------------------------------------------------------------
  1749.   # ● 根據技能或者物品來計算傷害 修正二刀流
  1750.   #--------------------------------------------------------------------------
  1751.   alias make_obj_damage_value_n01 make_obj_damage_value
  1752.   def make_obj_damage_value(user, obj)
  1753.     make_obj_damage_value_n01(user, obj)
  1754.     # 只有在裝備了兩把武器時修正有效
  1755.     return unless user.actor?
  1756.     return if user.weapons[0] == nil
  1757.     return if user.weapons[1] == nil
  1758.     if obj.damage_to_mp  
  1759.       @mp_damage = @mp_damage * N01::TWO_SWORDS_STYLE[1] / 100 # 傷害MP
  1760.     else
  1761.       @hp_damage = @hp_damage * N01::TWO_SWORDS_STYLE[1] / 100 # 傷害HP
  1762.     end
  1763.   end
  1764.   #--------------------------------------------------------------------------
  1765.   # ● 使用通常攻擊的效果  全部戰鬥不能,不能絕對迴避的處理
  1766.   #--------------------------------------------------------------------------
  1767.   def perfect_attack_effect(attacker)
  1768.     clear_action_results
  1769.     make_attack_damage_value(attacker)            # 計算傷害
  1770.     execute_damage(attacker)                      # 反映傷害
  1771.     apply_state_changes(attacker)                 # 狀態變化
  1772.   end
  1773.   #--------------------------------------------------------------------------
  1774.   # ● 使用技能的效果  全部戰鬥不能,不能絕對迴避的處理
  1775.   #--------------------------------------------------------------------------
  1776.   def perfect_skill_effect(user, skill)
  1777.     clear_action_results
  1778.     make_obj_damage_value(user, skill)            # 傷害計算
  1779.     make_obj_absorb_effect(user, skill)           # 吸收效果計算
  1780.     execute_damage(user)                          # 傷害反映
  1781.     apply_state_changes(skill)                    # 狀態變化
  1782.   end
  1783.   #--------------------------------------------------------------------------
  1784.   # ● 使用物品的效果  全部戰鬥不能,不能絕對迴避的處理
  1785.   #--------------------------------------------------------------------------
  1786.   def perfect_item_effect(user, item)
  1787.     clear_action_results
  1788.     hp_recovery = calc_hp_recovery(user, item)    # 計算HP的回復量
  1789.     mp_recovery = calc_mp_recovery(user, item)    # 計算MP的回復量
  1790.     make_obj_damage_value(user, item)             # 計算傷害
  1791.     @hp_damage -= hp_recovery                     # 扣除HP的回復量
  1792.     @mp_damage -= mp_recovery                     # 扣除MP的回復量
  1793.     make_obj_absorb_effect(user, item)            # 計算吸收效果
  1794.     execute_damage(user)                          # 反映傷害
  1795.     item_growth_effect(user, item)                # 使用成長效果
  1796.     if item.physical_attack and @hp_damage == 0   # 物理判定
  1797.       return                                    
  1798.     end
  1799.     apply_state_changes(item)                     # 狀態變化
  1800.   end
  1801.   #--------------------------------------------------------------------------
  1802.   # ● 傷害的反映
  1803.   #--------------------------------------------------------------------------
  1804.   alias execute_damage_n01 execute_damage
  1805.   def execute_damage(user)
  1806.     execute_damage_n01(user)
  1807.     # 吸收時這裡的處理相沖
  1808.     if @absorbed               
  1809.       user.hp_damage = -@hp_damage
  1810.       user.mp_damage = -@mp_damage
  1811.     end
  1812.   end
  1813.   #--------------------------------------------------------------------------
  1814.   # ● 使用技能的效果
  1815.   #--------------------------------------------------------------------------
  1816.   alias skill_effect_n01 skill_effect
  1817.   def skill_effect(user, obj)
  1818.     # 保持變化前的HPMP
  1819.     nowhp = self.hp
  1820.     nowmp = self.mp
  1821.     # 為了計算現在HPMP的威力獲取變化前的使用者的HPMP
  1822.     if obj.extension.include?("HP消耗")
  1823.       user_hp = user.hp + user.calc_mp_cost(obj)
  1824.       user_mp = user.mp
  1825.     else  
  1826.       user_hp = user.hp
  1827.       user_mp = user.mp + user.calc_mp_cost(obj)
  1828.     end  
  1829.     # 確認擴張設定
  1830.     check_extension(obj)
  1831.     # 計算傷害
  1832.     skill_effect_n01(user, obj)
  1833.     # 有傷害系的擴張時這裡的處理會相沖
  1834.     if @extension
  1835.       self.hp = nowhp
  1836.       self.mp = nowmp
  1837.     end
  1838.     # 攻擊未名中時中斷處理
  1839.     return if self.evaded or self.missed
  1840.     # 變換傷害屬性
  1841.     damage = @hp_damage unless obj.damage_to_mp
  1842.     damage = @mp_damage if obj.damage_to_mp
  1843.     # 比例傷害
  1844.     if @ratio_maxdamage != nil
  1845.       damage = self.maxhp * @ratio_maxdamage / 100 unless obj.damage_to_mp
  1846.       damage = self.maxmp * @ratio_maxdamage / 100 if obj.damage_to_mp
  1847.     end
  1848.     if @ratio_nowdamage != nil
  1849.       damage = self.hp * @ratio_nowdamage / 100 unless obj.damage_to_mp
  1850.       damage = self.mp * @ratio_nowdamage / 100 if obj.damage_to_mp
  1851.     end
  1852.     # 成本威力
  1853.     if @cost_damage
  1854.       cost = user.calc_mp_cost(obj)
  1855.       if obj.extension.include?("HP消耗")
  1856.         damage = damage * cost / user.maxhp
  1857.       else
  1858.         damage = damage * cost / user.maxmp
  1859.       end
  1860.     end
  1861.     # 現在HP威力
  1862.     damage = damage * user_hp / user.maxhp if @nowhp_damage
  1863.     # 現在MP威力
  1864.     damage = damage * user_mp / user.maxmp if @nowmp_damage
  1865.     # 放棄傷害屬性的變換
  1866.     @hp_damage = damage unless obj.damage_to_mp
  1867.     @mp_damage = damage if obj.damage_to_mp
  1868.     # 反應擴張
  1869.     if @extension
  1870.       self.hp -= @hp_damage
  1871.       self.mp -= @mp_damage
  1872.     end
  1873.     # 初期化
  1874.     @extension = false
  1875.     @cost_damage = false
  1876.     @nowhp_damage = false
  1877.     @nowmp_damage = false
  1878.     @ratio_maxdamage = nil
  1879.     @ratio_nowdamage = nil
  1880.   end
  1881.   #--------------------------------------------------------------------------
  1882.   # ● 確認擴張設定
  1883.   #--------------------------------------------------------------------------
  1884.   def check_extension(skill)
  1885.     for ext in skill.extension
  1886.       # 成本威力
  1887.       if ext == "成本威力"  
  1888.         @extension = true
  1889.         next @cost_damage = true
  1890.       # 現在HP威力
  1891.       elsif ext == "現HP威力"
  1892.         @extension = true
  1893.         next @nowhp_damage = true
  1894.       # 現在MP威力
  1895.       elsif ext == "現MP威力"
  1896.         @extension = true
  1897.         next @nowmp_damage = true
  1898.       else
  1899.         # 比例傷害
  1900.         name = ext.split('')
  1901.         if name[5] == "M"
  1902.           name = name.join
  1903.           name.slice!("%傷害MAX/")
  1904.           @extension = true
  1905.           next @ratio_maxdamage = name.to_i
  1906.         elsif name[5] == "N"
  1907.           name = name.join
  1908.           name.slice!("%傷害NOW/")
  1909.           @extension = true
  1910.           next @ratio_nowdamage = name.to_i
  1911.         end  
  1912.       end
  1913.     end  
  1914.   end
  1915.   #--------------------------------------------------------------------------
  1916.   # ● 初期配置的變更
  1917.   #--------------------------------------------------------------------------
  1918.   def change_base_position(x, y)
  1919.     @base_position_x = x
  1920.     @base_position_y = y
  1921.   end
  1922.   #--------------------------------------------------------------------------
  1923.   # ● 初期化
  1924.   #--------------------------------------------------------------------------
  1925.   def reset_coordinate
  1926.     @move_x = @move_y = @move_z = @jump = @derivation = 0
  1927.     @active = @non_dead = @individual = false   
  1928.   end
  1929.   #--------------------------------------------------------------------------
  1930.   # ● 使用連續傷害的效果
  1931.   #--------------------------------------------------------------------------
  1932.   def slip_damage_effect
  1933.     if slip_damage? and @hp > 0
  1934.       @hp_damage = apply_variance(maxhp / 10, 10)
  1935.       @hp_damage = @hp - 1 if @hp_damage >= @hp
  1936.       self.hp -= @hp_damage
  1937.     end
  1938.   end
  1939.   #--------------------------------------------------------------------------
  1940.   # ● 事件的傷害POP
  1941.   #--------------------------------------------------------------------------
  1942.   def damage_num(num = nil)
  1943.     return if dead? or !$game_temp.in_battle or num == 0
  1944.     @force_damage = num
  1945.   end
  1946. end  
  1947. #==============================================================================
  1948. # ■ Game_Actor
  1949. #------------------------------------------------------------------------------
  1950. #  處理主人公的類。
  1951. #==============================================================================
  1952. class Game_Actor < Game_Battler
  1953.   #--------------------------------------------------------------------------
  1954.   # ● 公開變數
  1955.   #--------------------------------------------------------------------------
  1956.   attr_accessor :two_swords_change          # 強制替換二刀流的標誌
  1957.   #--------------------------------------------------------------------------
  1958.   # ● 根據ID判定技能是否習得
  1959.   #--------------------------------------------------------------------------
  1960.   def skill_id_learn?(skill_id)
  1961.     return @skills.include?(skill_id)
  1962.   end
  1963.   #--------------------------------------------------------------------------
  1964.   # ● 判定技能的使用可能  ※再定義
  1965.   #--------------------------------------------------------------------------
  1966.   def skill_can_use?(skill)
  1967.     return super
  1968.   end
  1969.   #--------------------------------------------------------------------------
  1970.   # ● 圖片的變更
  1971.   #--------------------------------------------------------------------------
  1972.   def graphic_change(character_name)
  1973.     @character_name = character_name
  1974.   end
  1975.   #--------------------------------------------------------------------------
  1976.   # ● 擊倒的實行 ※再定義
  1977.   #--------------------------------------------------------------------------
  1978.   def perform_collapse
  1979.     Sound.play_actor_collapse if $game_temp.in_battle and dead?
  1980.   end
  1981.   #--------------------------------------------------------------------------
  1982.   # ● 初期配置的取得
  1983.   #--------------------------------------------------------------------------
  1984.   def base_position
  1985.     base = N01::ACTOR_POSITION[self.index]
  1986.     @base_position_x = base[0]
  1987.     @base_position_y = base[1]
  1988.     # 時X軸逆
  1989.     @base_position_x = Graphics.width - base[0] if $back_attack && N01::BACK_ATTACK
  1990.   end
  1991.   #--------------------------------------------------------------------------
  1992.   # ● 戰鬥畫面 X 坐標的取得
  1993.   #--------------------------------------------------------------------------
  1994.   def position_x
  1995.     return 0 if self.index == nil
  1996.     return @base_position_x + @move_x
  1997.   end
  1998.   #--------------------------------------------------------------------------
  1999.   # ● 戰鬥畫面 Y 坐標的取得
  2000.   #--------------------------------------------------------------------------
  2001.   def position_y
  2002.     return 0 if self.index == nil
  2003.     return @base_position_y + @move_y + @jump
  2004.   end
  2005.   #--------------------------------------------------------------------------
  2006.   # ● 戰鬥畫面 Z 坐標的取得
  2007.   #--------------------------------------------------------------------------
  2008.   def position_z
  2009.     return 0 if self.index == nil
  2010.     return self.index + @base_position_y + @move_y + @move_z - @jump + 200
  2011.   end  
  2012. end
  2013. #==============================================================================
  2014. # ■ Game_Enemy
  2015. #------------------------------------------------------------------------------
  2016. #  處理敵方的類。
  2017. #==============================================================================
  2018. class Game_Enemy < Game_Battler
  2019.   #--------------------------------------------------------------------------
  2020.   # ● 公開變數
  2021.   #--------------------------------------------------------------------------
  2022.   attr_accessor :adj_speed        # 複數會合行動的速度修正
  2023.   attr_accessor :act_time         # 行動數回
  2024.   #--------------------------------------------------------------------------
  2025.   # ● 動作速度的決定 複數回合行動用
  2026.   #--------------------------------------------------------------------------
  2027.   def make_action_speed2(adj)
  2028.     @adj_speed = self.action.speed if @adj_speed == nil
  2029.     @adj_speed = @adj_speed * adj / 100
  2030.   end
  2031.   #--------------------------------------------------------------------------
  2032.   # ● 擊倒的實行 ※再定義
  2033.   #--------------------------------------------------------------------------
  2034.   def perform_collapse
  2035.     @force_action = ["N01collapse"] if $game_temp.in_battle and dead?
  2036.   end
  2037.   #--------------------------------------------------------------------------
  2038.   # ● 獲取初期配置
  2039.   #--------------------------------------------------------------------------
  2040.   def base_position
  2041.     return if self.index == nil
  2042.     # 確認角色畫像的大小修正Y坐標
  2043.     bitmap = Bitmap.new("Graphics/Battlers/" + @battler_name) if !self.anime_on
  2044.     bitmap = Bitmap.new("Graphics/Characters/" + @battler_name) if self.anime_on && N01::WALK_ANIME
  2045.     bitmap = Bitmap.new("Graphics/Characters/" + @battler_name + "_1") if self.anime_on && !N01::WALK_ANIME
  2046.     height = bitmap.height
  2047.     @base_position_x = self.screen_x + self.position_plus[0]
  2048.     @base_position_y = self.screen_y + self.position_plus[1] - height / 3
  2049.     bitmap.dispose
  2050.     # 背後攻擊時X軸逆轉
  2051.     if $back_attack && N01::BACK_ATTACK
  2052.       @base_position_x = Graphics.width - self.screen_x - self.position_plus[0]
  2053.     end
  2054.   end
  2055.   #--------------------------------------------------------------------------
  2056.   # ● 戰鬥畫面 X 坐標的取得
  2057.   #--------------------------------------------------------------------------
  2058.   def position_x
  2059.     return @base_position_x - @move_x
  2060.   end
  2061.   #--------------------------------------------------------------------------
  2062.   # ● 戰鬥畫面 Y 坐標的取得
  2063.   #--------------------------------------------------------------------------
  2064.   def position_y
  2065.     return @base_position_y + @move_y + @jump
  2066.   end
  2067.   #--------------------------------------------------------------------------
  2068.   # ● 戰鬥畫面 Z 坐標的取得
  2069.   #--------------------------------------------------------------------------
  2070.   def position_z
  2071.     return position_y + @move_z - @jump + 200
  2072.   end
  2073. end
  2074. #==============================================================================
  2075. # ■ Sprite_Damage
  2076. #------------------------------------------------------------------------------
  2077. #  傷害表示的精靈。
  2078. #==============================================================================
  2079. class Sprite_Damage < Sprite_Base
  2080.   #--------------------------------------------------------------------------
  2081.   # ● 公開變數
  2082.   #--------------------------------------------------------------------------
  2083.   attr_accessor :battler
  2084.   #--------------------------------------------------------------------------
  2085.   # ● 客觀初期化
  2086.   #--------------------------------------------------------------------------
  2087.   def initialize(viewport,battler = nil)
  2088.     super(viewport)
  2089.     @battler = battler
  2090.     @damage = 0
  2091.     @duration = 0
  2092.     @x = 0
  2093.     @y = 0
  2094.     @z_plus = 0
  2095.     @minus = false
  2096.     @num1 = Sprite.new(viewport)
  2097.     @num2 = Sprite.new(viewport)
  2098.     @num3 = Sprite.new(viewport)
  2099.     @num4 = Sprite.new(viewport)
  2100.     @num5 = Sprite.new(viewport)
  2101.     @num1.visible = false
  2102.     @num2.visible = false
  2103.     @num3.visible = false
  2104.     @num4.visible = false
  2105.     @num5.visible = false
  2106.   end
  2107.   #--------------------------------------------------------------------------
  2108.   # ● 更新
  2109.   #--------------------------------------------------------------------------
  2110.   def update
  2111.     force_damage
  2112.     move_damage(@num5, @pop_time) if @num5.visible
  2113.     move_damage(@num4, @pop_time - 2) if @num4.visible
  2114.     move_damage(@num3, @pop_time - 4) if @num3.visible
  2115.     move_damage(@num2, @pop_time - 6) if @num2.visible
  2116.     move_damage(@num1, @pop_time - 8) if @num1.visible
  2117.     move_window if @window != nil
  2118.     @duration -= 1 if @duration > 0
  2119.   end
  2120.   #--------------------------------------------------------------------------
  2121.   # ● 事件的傷害POP
  2122.   #--------------------------------------------------------------------------
  2123.   def force_damage
  2124.     if @battler.force_damage != 0
  2125.       damage_pop(@battler.force_damage)
  2126.       @battler.hp -= @battler.force_damage
  2127.       @force_damage = true
  2128.       @battler.force_damage = 0
  2129.       $game_temp.status_window_refresh = true
  2130.     end
  2131.   end
  2132.   #--------------------------------------------------------------------------
  2133.   # ● 數值的移動
  2134.   #--------------------------------------------------------------------------
  2135.   def move_damage(num, min)
  2136.     case @duration
  2137.     when min-1..min
  2138.       num.x -= 1
  2139.       num.y -= 4
  2140.     when min-3..min-2
  2141.       num.x -= 1
  2142.       num.y -= 3
  2143.     when min-6..min-4
  2144.       num.y -= 2
  2145.     when min-14..min-7
  2146.       num.y += 2
  2147.     when min-17..min-15
  2148.       num.y -= 2
  2149.     when min-23..min-18
  2150.       num.y += 1
  2151.     when min-27..min-24
  2152.       num.y -= 1
  2153.     when min-30..min-28
  2154.       num.y += 1
  2155.     when min-33..min-31
  2156.       num.y -= 1
  2157.     when min-36..min-34
  2158.       num.y += 1
  2159.     end
  2160.     next_damage if @battler.double_damage && @duration == min-34
  2161.     num.opacity = 256 - (12 - @duration) * 32
  2162.     num.visible = false if @duration == 0
  2163.     if @force_damage && @duration == 0
  2164.       @force_damage = false
  2165.       @battler.perform_collapse
  2166.     end
  2167.   end
  2168.   #--------------------------------------------------------------------------
  2169.   # ● 文字窗口的移動
  2170.   #--------------------------------------------------------------------------
  2171.   def move_window
  2172.     @window.x -= 6 if @window_time > 0 && @window.x > 0
  2173.     @window_time -= 1
  2174.     if @duration == 0
  2175.       @window.dispose
  2176.       @window = nil
  2177.     end
  2178.   end  
  2179.   #--------------------------------------------------------------------------
  2180.   # ● HPMP兩方同時傷害
  2181.   #--------------------------------------------------------------------------
  2182.   def next_damage
  2183.     @battler.hp_damage = 0
  2184.     @battler.double_damage = false
  2185.     damage_pop
  2186.   end
  2187.   #--------------------------------------------------------------------------
  2188.   # ● 準備傷害POP
  2189.   #--------------------------------------------------------------------------
  2190.   def damage_pop(num = nil)
  2191.     reset
  2192.     damage = battler.hp_damage
  2193.     # 抽出狀態的變化
  2194.     states = battler.added_states
  2195.     text = ""
  2196.     # MP傷害用文本(HPMP兩方同時傷害除外)
  2197.     if [email protected]_damage && @battler.mp_damage != 0
  2198.       text = N01::POP_MP_DAM if battler.mp_damage > 0
  2199.       text = N01::POP_MP_REC if battler.mp_damage < 0
  2200.       damage = battler.mp_damage
  2201.     end
  2202.     # 連續傷害不顯示MP傷害以外的文字
  2203.     if num == nil
  2204.       text = N01::POP_DAMAGE0 if damage == 0 && states == [] && !battler.revival
  2205.       text = N01::POP_MISS if battler.missed && states == []
  2206.       text = N01::POP_EVA if battler.evaded
  2207.       text = N01::POP_CRI if battler.critical
  2208.       for state in states
  2209.         # 無POP設定的狀態不顯示
  2210.         unless state.extension.include?("無POP")
  2211.           text += " " if text != ""
  2212.           text += state.name
  2213.         end
  2214.       end
  2215.     else
  2216.       damage = num
  2217.     end
  2218.     # 區分傷害和回復
  2219.     @minus = false
  2220.     @minus = true if damage < 0
  2221.     damage = damage.abs
  2222.     # 略微調整POP位置
  2223.     adjust = -16
  2224.     adjust = 16 if $back_attack
  2225.     adjust = 0 if damage == 0
  2226.     @x = battler.position_x + adjust
  2227.     @y = battler.position_y
  2228.     window(text) if text != ""
  2229.     @pop_time = N01::NUM_DURATION
  2230.     # 沒有傷害時沒有數字的POP
  2231.     return @duration = @pop_time if damage == 0
  2232.     @num_time = -1
  2233.     damage_file(@num1, damage % 10, @pop_time - 7) if damage >= 0
  2234.     damage_file(@num2, (damage % 100)/10, @pop_time - 5) if damage >= 10
  2235.     damage_file(@num3, (damage % 1000)/100, @pop_time - 3) if damage >= 100
  2236.     damage_file(@num4, (damage % 10000)/1000, @pop_time - 1) if damage >= 1000
  2237.     damage_file(@num5, (damage % 100000)/10000, @pop_time + 1) if damage >= 10000
  2238.   end  
  2239.   #--------------------------------------------------------------------------
  2240.   # ● 準備情報窗口
  2241.   #--------------------------------------------------------------------------
  2242.   def window(text)
  2243.     @window = Window_Damage.new(@x - 64, @y - 22)
  2244.     @window.pop_text(text)
  2245.     @window_time = 5
  2246.   end  
  2247.   #--------------------------------------------------------------------------
  2248.   # ● 準備數字畫像
  2249.   #--------------------------------------------------------------------------
  2250.   def damage_file(num, cw, dur)
  2251.     num.visible = true
  2252.     # 判別文件
  2253.     file = N01::DAMAGE_GRAPHICS
  2254.     file = N01::RECOVER_GRAPHICS if @minus
  2255.     # 數字
  2256.     num.bitmap = Cache.system(file)
  2257.     @num_time += 1
  2258.     sx = num.bitmap.width / 10
  2259.     num.src_rect.set(cw * sx, 0, sx, num.height)
  2260.     num.x = @x - (num.width + N01::NUM_INTERBAL) * @num_time
  2261.     num.y = @y
  2262.     num.z = 2000 - @num_time
  2263.     @duration = dur
  2264.     @window.x = num.x - @window.width + 64 if @window != nil && N01::NON_DAMAGE_WINDOW
  2265.     @window.x = num.x - @window.width + 26 if @window != nil && !N01::NON_DAMAGE_WINDOW
  2266.     @window.x = 0 if @window != nil && @window.x < 0
  2267.   end
  2268.   #--------------------------------------------------------------------------
  2269.   # ● 傷害組合
  2270.   #--------------------------------------------------------------------------
  2271.   def reset
  2272.     @num5.visible = @num4.visible = @num3.visible = @num2.visible = @num1.visible = false
  2273.     @window.dispose if @window != nil
  2274.     @window = nil
  2275.   end  
  2276.   #--------------------------------------------------------------------------
  2277.   # ● 開放
  2278.   #--------------------------------------------------------------------------
  2279.   def dispose
  2280.     super
  2281.     @num1.dispose
  2282.     @num2.dispose
  2283.     @num3.dispose
  2284.     @num4.dispose
  2285.     @num5.dispose
  2286.     @window.dispose if @window != nil
  2287.   end  
  2288. end
  2289. #==============================================================================
  2290. # ■ Window_Damage
  2291. #------------------------------------------------------------------------------
  2292. #  危機等表示的窗口。
  2293. #==============================================================================
  2294. class Window_Damage < Window_Base
  2295.   #--------------------------------------------------------------------------
  2296.   # ● 客觀初期化
  2297.   #--------------------------------------------------------------------------
  2298.   def initialize(x, y)
  2299.     super(x, y, 160, 46)
  2300.     self.opacity = 0 if N01::NON_DAMAGE_WINDOW
  2301.   end
  2302.   #--------------------------------------------------------------------------
  2303.   # ● 窗口內容的作成
  2304.   #--------------------------------------------------------------------------
  2305.   def create_contents
  2306.     self.contents.dispose
  2307.     self.contents = Bitmap.new(width - 32, height - 32)
  2308.   end
  2309.   #--------------------------------------------------------------------------
  2310.   # ● 狀態設定
  2311.   #--------------------------------------------------------------------------
  2312.   def pop_text(text, align = 1)
  2313.     self.contents.clear
  2314.     self.width = self.contents.text_size(text).width + 36
  2315.     self.contents = Bitmap.new(width - 32, height - 32)
  2316.     self.contents.font.color = normal_color
  2317.     self.contents.font.size = 16
  2318.     self.contents.draw_text(0,-8, width - 32, 32, text, align)
  2319.   end  
  2320. end  
  2321. #==============================================================================
  2322. # ■ Window_Base
  2323. #------------------------------------------------------------------------------
  2324. #  遊戲中處理所有窗口的超級類。
  2325. #==============================================================================
  2326. class Window_Base < Window  
  2327.   #--------------------------------------------------------------------------
  2328.   # ● 狀態的描畫  ※再定義(反映設定不顯示狀態ICON)
  2329.   #--------------------------------------------------------------------------
  2330.   def draw_actor_state(actor, x, y, width = 96)
  2331.     count = 0
  2332.     for state in actor.states
  2333.       break if state.extension.include?("不顯示ICON")
  2334.       draw_icon(state.icon_index, x + 24 * count, y)
  2335.       count += 1
  2336.       break if (24 * count > width - 24)
  2337.     end
  2338.   end
  2339. end
  2340. #==============================================================================
  2341. # ■ Game_Temp
  2342. #------------------------------------------------------------------------------
  2343. #  不包含存儲數據、處理一時數據的類。
  2344. #==============================================================================
  2345. class Game_Temp
  2346.   #--------------------------------------------------------------------------
  2347.   # ● 公開變數
  2348.   #--------------------------------------------------------------------------
  2349.   attr_accessor :status_window_refresh    # 狀態窗口的還原標誌
  2350.   #--------------------------------------------------------------------------
  2351.   # ● 客觀初期化
  2352.   #--------------------------------------------------------------------------
  2353.   alias initialize_n01 initialize
  2354.   def initialize
  2355.     initialize_n01
  2356.     @status_window_refresh = false
  2357.   end
  2358. end  
  2359. #==============================================================================
  2360. # ■ Game_Interpreter
  2361. #------------------------------------------------------------------------------
  2362. #  實行時間指令的解釋。
  2363. #==============================================================================
  2364. class Game_Interpreter
  2365.   #--------------------------------------------------------------------------
  2366.   # ● HP 的增減
  2367.   #--------------------------------------------------------------------------
  2368.   def command_311
  2369.     if $game_temp.in_battle
  2370.       value = operate_value(@params[1], @params[2], @params[3])
  2371.       iterate_actor_id(@params[0]) do |actor|
  2372.         next if actor.dead?
  2373.         if @params[4] == false and actor.hp + value <= 0
  2374.           actor.damage_num(actor.hp - 1) # 如果不允許戰鬥不能時變為1
  2375.         else
  2376.           actor.damage_num(-value)
  2377.         end
  2378.       end
  2379.       return true
  2380.     else
  2381.       value = operate_value(@params[1], @params[2], @params[3])
  2382.       iterate_actor_id(@params[0]) do |actor|
  2383.         next if actor.dead?
  2384.         if @params[4] == false and actor.hp + value <= 0
  2385.           actor.hp = 1    # 如果不允許戰鬥不能時變為1
  2386.         else
  2387.           actor.hp += value
  2388.         end
  2389.         actor.perform_collapse
  2390.       end
  2391.       if $game_party.all_dead?
  2392.         $game_temp.next_scene = "gameover"
  2393.       end
  2394.       return true
  2395.     end  
  2396.   end
  2397.   #--------------------------------------------------------------------------
  2398.   # ● 敵角色的 HP 增減
  2399.   #--------------------------------------------------------------------------
  2400.   def command_331
  2401.     value = operate_value(@params[1], @params[2], @params[3])
  2402.     iterate_enemy_index(@params[0]) do |enemy|
  2403.       if enemy.hp > 0
  2404.         if @params[4] == false and enemy.hp + value <= 0
  2405.           enemy.damage_num(enemy.hp - 1) # 如果不允許戰鬥不能時變為1
  2406.         else
  2407.           enemy.damage_num(-value)
  2408.         end
  2409.       end
  2410.     end
  2411.     return true
  2412.   end
  2413. end  
  2414. #==============================================================================
  2415. # ■ Game_Party
  2416. #------------------------------------------------------------------------------
  2417. #  扱。
  2418. #==============================================================================
  2419. class Game_Party < Game_Unit
  2420.   #--------------------------------------------------------------------------
  2421.   # ● 加
  2422.   #     actor_id :  ID
  2423.   #--------------------------------------------------------------------------
  2424.   alias add_actor_n01 add_actor
  2425.   def add_actor(actor_id)
  2426.     add_actor_n01(actor_id)
  2427.     $party_change = true if actor_id == 4
  2428.   end
  2429.   #--------------------------------------------------------------------------
  2430.   # ● 外
  2431.   #     actor_id :  ID
  2432.   #--------------------------------------------------------------------------
  2433.   alias remove_actor_n01 remove_actor
  2434.   def remove_actor(actor_id)
  2435.     remove_actor_n01(actor_id)
  2436.     $party_change = true if actor_id == 4
  2437.   end
  2438. end  
  2439.   
  2440.   
  2441.   
  2442.   
复制代码

Lv1.梦旅人

梦石
0
星屑
47
在线时间
557 小时
注册时间
2010-8-19
帖子
307
2
发表于 2011-6-27 20:20:53 | 只看该作者
搜索def collapse_type
地下return 1的都是有残像的敌人2为普通3为boss
如果你想大家都一样普通的话就把when 后面的数字改成0或者直接删掉条件
回复

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
2188 小时
注册时间
2011-6-23
帖子
1044
3
 楼主| 发表于 2011-6-27 21:49:40 | 只看该作者
应该说我运气好 昨天套用了一个范例的横版战斗系统..竟然就不会有此问题
好神奇...问题就这样很自然的解决了
刚好省去我很多麻烦..qq...谢谢你的回覆

点评

你用的那个范例应该是没有设置或者设置的少,为了避免以后再次出现问题还是自己改一下吧  发表于 2011-6-27 22:36
回复

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-1-11 07:15

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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