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

Project1

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

[已经解决] 更新:修改“超级横版战斗”脚本成功了,不会结贴

[复制链接]

Lv2.观梦者

梦石
0
星屑
431
在线时间
43 小时
注册时间
2009-5-6
帖子
62
跳转到指定楼层
1
发表于 2019-8-22 18:07:29 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 yumeyuuya 于 2019-8-31 14:15 编辑

造福大家,现在放上修改过的完全脚本。(我不会把帖子编辑成【已经解决】,是否需要版主帮忙??)
这个脚本要用到的战斗图是4列8行的,这是示意图。
如果懒得画动态的,你可以一行都是同一张图片,就静止了比较呆。

修改过的超级横版战斗脚本


—————————原帖子的问题—————————————
很久以前保存的了,以前觉得不用设置太多动画,它一张图4*8每行都有动作,普攻也能位移,横版效果挺省事的,文件夹里也不用1个角色/怪物就放很多图片。

但是现在发现这个脚本有这个问题:技能使用时,人物图像是位于原地不动的。

这种情况如果人物的职业是远程类的那还好,但如果是近战类职业使用技能却还站在原地,就很违和啊!!!!
本人是脚本小白,想法是有了,在脚本里搜索了move、attack、skill这种关键词了,但是读不懂……

是否有大佬能修改,让这个脚本可以根据设置,让人物在使用技能时可以有位移施展与原地施展的两种效果???


未改的超级横版战斗


现在我改了,我模仿的是武器攻击那一段,仿照之后角色施展技能是可以跑到对面敌人那边去了,但是使用类似“治疗”这种,也一样跑过去了……

我改的部分

评分

参与人数 1+1 收起 理由
larbi + 1 我很赞同

查看全部评分

Lv3.寻梦者

梦石
0
星屑
3078
在线时间
764 小时
注册时间
2008-7-5
帖子
760
11
发表于 2019-9-1 08:55:09 | 只看该作者
哦哦楼主发了完整的修改版啊
这对我这种现在还在坚持用RMXP的人来说,是个值得收藏的好脚本
看来我也要学习脚本了
阿姨我还未填平坑.....
自己是“擅长美工的笨蛋策划在干着程序的活”
  
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
431
在线时间
43 小时
注册时间
2009-5-6
帖子
62
10
 楼主| 发表于 2019-8-31 14:18:54 | 只看该作者
自顶一下,请不要说我连帖。
因为我不会把“有事请教”变成“已经解决”,版主可否帮忙???

点评

MV后来自带的横版也是一张战斗图包含很多动作很多帧啊。不过敌人战斗图的确大,在做敌人队伍的时候是挺麻烦哈~  发表于 2019-8-31 21:21
话说4*8一个人物的超大动作图片,你制作游戏不麻烦吗?人物一多,PS方面也会吃不消,并且时不时图片体积会增大。  发表于 2019-8-31 21:03
你把你的帖子标题前面加上,已经解决,过段时间版主看到就会改了  发表于 2019-8-31 21:02
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
431
在线时间
43 小时
注册时间
2009-5-6
帖子
62
9
 楼主| 发表于 2019-8-29 21:33:25 | 只看该作者
灯笼菜刀王 发表于 2019-8-28 22:21
自己动手是学会脚本最好的途径

这里加个变量判断就行了 比如 做一个  @贴脸  的变量用来控制是否要移动

谢谢大佬点拨,我往前看他的作者有写@moving = fasle,然后用了您说的分歧方法,现在把我方施展技能这一段改成这样,笨是笨了点,但是可以喽~~~

RUBY 代码复制
  1. #--------------我方施展技能的位移----------------------------     
  2.     if @active_battler.is_a?(Game_Actor)
  3.       if @active_battler.restriction == 3 #限制为[我方为普通攻击]的情况下
  4.         target = $game_party.random_target_actor
  5.       elsif @active_battler.restriction == 2 #限制为[敌人为普通攻击]的情况下
  6.         target = $game_troop.random_target_enemy
  7.       else
  8.         case @skill.id
  9.         #远距离技能的id,不位移
  10.         when 1,2,3,4,5,6,53,54
  11.           index = @active_battler.current_action.target_index
  12.           target = $game_party.smooth_target_actor(index)
  13.           @moving = false
  14.           @spriteset.actor_sprites[@active_battler.index].pose(5)
  15.         # 近身技能的id
  16.         when 57,58,9,60,61,62,63,64
  17.           index = @active_battler.current_action.target_index
  18.           target = $game_troop.smooth_target_enemy(index)
  19.           x = target.screen_x + RPG::Cache.battler(@active_battler.battler_name, @active_battler.battler_hue).width/8
  20.           @spriteset.actor_sprites[@active_battler.index].pose(5)
  21.           @spriteset.actor_sprites[@active_battler.index].move(x, target.screen_y, 10)
  22.        end
  23.      end

点评

可以的~修改好了好物共享啊!  发表于 2019-8-29 21:41
恭喜你,我可以在我的游戏里用你修改后的这个脚本吗?  发表于 2019-8-29 21:39
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39034
在线时间
5725 小时
注册时间
2006-11-10
帖子
6622
8
发表于 2019-8-28 22:21:15 | 只看该作者
本帖最后由 灯笼菜刀王 于 2019-8-28 23:04 编辑

自己动手是学会脚本最好的途径

这里加个变量判断就行了 比如 做一个  @贴脸  的变量用来控制是否要移动

像这样  @spriteset.actor_sprites[@active_battler.index].move(x, target.screen_y, 10) if @贴脸

当 @贴脸 的值为真的时候, 才会进行移动,  接下来就处理这个 @贴脸 变量

首先,  在 Scene_Battle 4    找到 @active_battler = @action_battlers.shift  这句, 上面加一个  @贴脸 = false  初始化它,  这样每个战斗者判定之前都是关闭的

然后, 攻击时候会有几种情况,  1,普攻, 2技能, 3道具  所以, 要分别到这些地方去处理 @贴脸

普攻在这里 def make_basic_action_result  , 找到 if @active_battler.current_action.basic == 0,   在它的下面加上一句 @贴脸 = true , 这样普通攻击就会跑过去砍了

技能在这里 def make_skill_action_result,  找到  @skill = $data_skills[@active_battler.current_action.skill_id], 在它的下面加一句 @贴脸 = true ,这样特技也会跑上去砍了

道具在这里 def make_item_action_result 找到 @item = $data_items[@active_battler.current_action.item_id], 在它下面也加一句 @贴脸 = true, 这样丢道具也会冲上去砍了......

显然跑到敌人面前吃药很傻,  所以, 现在要想办法让这个@贴脸 按我们的需要开和关

常用的方法有四种

1, 按ID穷举....  
case @item.id
when 1,2,3,4,5
   @贴脸 = true
else
   @贴脸 = false
end

这方法虽然很傻, 但是绿色无污染没任何副作用(除非你手贱整天折腾数据库), 缺点就是数量一多要检查要设置都麻烦

2, 勾属性法
比如,把10086号属性当做判断用, 起名"贴脸",  然后, 勾上这个属性的 道具, 技能, 武器, 攻击就是贴脸攻击了

平砍 :  @贴脸 = @active_battler.element_set.include?(10086)
技能:  @贴脸 = @skill.element_set.include?(10086)
道具:  @贴脸 = @item.element_set.include?(10086)

这方法设置简单, 勾上属性就可以简单区分近身和远程,  但是, 缺点就是敌人平砍不好设置, 而且它会影响属性修正计算, 会导致 DEF 设置无效,(原因默认的属性修正会取最高值) 除非你把所有人的 10086属性的抗性都改为F

当然, 改默认公式的计算方法也是可以的, 想用这个方法就自己研究吧

3, 备注法
用备注的方式来做,  不会写备注可以用猫姐大的通用备注接口,

这方法通用性强,影响小, 可以为所欲为,  缺点就是备注不好检查, 时间久了可能会忘记它是干嘛用的

4, 技能用伪位移法来做,

偷个图片来举栗子


像这样位移是用动画"使用方消失, 对象方播放攻击动作" 的方式来制造位移假象, 其实战斗图根本没移动

此方法优点是绿色无污染而且可以随心控制速度和方式, 缺点就是 状态动画,攻方伤害等,会留在原地(因为实际没移动嘛), 而且有些效果想实现起来会比较麻烦(比如图上的这个攻击一个敌人周围敌人溅射伤害效果)


自己选择吧

评分

参与人数 2星屑 +50 +2 收起 理由
guoxiaomi + 50 + 1 认可答案
yumeyuuya + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
3078
在线时间
764 小时
注册时间
2008-7-5
帖子
760
7
发表于 2019-8-28 15:05:17 | 只看该作者
以我的水平,能在这个脚本基础上做放技能位移,但是问题出现在用回复这种对象是己方的,己方战斗图还是会跑到对面去

点评

尝试想用技能id做分歧(想区分近战技能和远程技能),发现我脚本还是不及格,做不出来  发表于 2019-8-28 21:01
可以考虑用状态法,回复作为一种独立的状态,有回复状态时,不进行角色移动,原地更改角色图像。在脚本里慢慢分歧每一种情况?  发表于 2019-8-28 17:31
这个也是我照猫画虎改了以后发现的问题,我去1楼更新下  发表于 2019-8-28 17:25
阿姨我还未填平坑.....
自己是“擅长美工的笨蛋策划在干着程序的活”
  
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
14636
在线时间
2198 小时
注册时间
2019-1-24
帖子
1123

R考场第七期纪念奖

6
发表于 2019-8-28 07:37:03 | 只看该作者
本帖最后由 miantouchi 于 2019-8-28 07:44 编辑

你试试这个全局行走战斗图范例,应该是你要的。柳柳的超级横版需要大量图片,并且要合并的,他的视频教程里面有介绍,但是我找不到他的PS合并动作,适合做动作特别多的游戏。
修改的话,你就在脚本这个地方修改,是近战还是远程,武器和技能。
RUBY 代码复制
  1. module RPG
  2.   class Weapon
  3.     #--------------------------------------------------------------------------
  4.     # ● アクション設定
  5.     #--------------------------------------------------------------------------
  6.     def battle_actions
  7.       case @id
  8.       when 17,18,19,20,21,22,23,24  # 远程武器的id回旋攻撃
  9.         return BattleActions::Actions["弓箭攻撃"]
  10.       when 34                       # 回旋武器的id
  11.         return BattleActions::Actions["回旋攻撃"]
  12.       end
  13.       else
  14.       return BattleActions::Actions["通常攻撃"]
  15.     end
  16.   end
  17.   class Skill
  18.     #--------------------------------------------------------------------------
  19.     # ● アクション設定
  20.     #--------------------------------------------------------------------------
  21.     def battle_actions
  22.       case @id
  23.       when 73,74,75,76,77,78,79,80  # 远程技能的id
  24.         return BattleActions::Actions["远距离発動"]
  25.       when 82                       # 回旋技能的id
  26.         return BattleActions::Actions["回旋発動"]
  27.       end
  28.       else
  29.       if self.magic?
  30.         return BattleActions::Actions["術発動"]
  31.       else
  32.         return BattleActions::Actions["払い抜け"]
  33.       end
  34.     end
  35.   end
  36.   class Item
  37.     #--------------------------------------------------------------------------
  38.     # ● アクション設定
  39.     #--------------------------------------------------------------------------
  40.     def battle_actions
  41.       return BattleActions::Actions["アイテム使用"]
  42.     end
  43.   end
  44. end

全局行走图战斗.rar

461.55 KB, 下载次数: 81

评分

参与人数 1星屑 +20 +1 收起 理由
guoxiaomi + 20 + 1 塞糖

查看全部评分

回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
431
在线时间
43 小时
注册时间
2009-5-6
帖子
62
5
 楼主| 发表于 2019-8-26 19:58:51 | 只看该作者

你这个虽然不是我要的效果,不过我打算读一下这个脚本,也算是一种学习。
我的问题在于主楼我放的这个脚本在释放技能的时候人物都是在原地,有的技能可以在原地,但有的技能我想要角色过到对面去。

(图片仅为测试效果用的素材,正式制作的时候会换成原创图的)
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
476
在线时间
30 小时
注册时间
2019-8-23
帖子
61
4
发表于 2019-8-26 19:35:27 | 只看该作者
yumeyuuya 发表于 2019-8-26 19:03
过了几天也没有人回复我的帖子啊……那我只能硬着头皮尝试自己瞎改这个脚本了? ...

这个行不行啊?
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
476
在线时间
30 小时
注册时间
2019-8-23
帖子
61
3
发表于 2019-8-26 19:34:49 | 只看该作者
本帖最后由 guoxiaomi 于 2019-9-1 00:46 编辑

RUBY 代码复制
  1. =begin
  2. ###############################################################################
  3.  
  4. 全局行走图战斗+连击美化 v1.0
  5. 本版本只经低测试,可能存在某些bug。
  6.  
  7.  
  8.  
  9. ###############################################################################
  10. ------------------------------------------------------------------------------
  11. 经过了两次的修改,终于完全实现了远距离攻击的效果(弓箭、铳类)
  12. 另外,也实现了简单的回旋攻击(类似回力镖的攻击)和攻击道具(类似石头或炸弹)
  13.  
  14. 这个脚本的更动分为2部分:
  15. 1)战斗动作 - 新加了数个动作,如:“弓箭攻击”、“远距离发动”等等
  16. 2)战斗动画 - 基本上是脚本原带的。只是这个功能被隐藏起来了。现在已恢复。
  17.  
  18. 用法:
  19. 在相应的脚本行加入武器/技能/道具的数据库id(id之间要用“,”来分开)
  20. 如果不要某些功能的话就随便填一个外太空id就行了(没有用到的id)
  21. 1)战斗动作(角色/行走图的动作)
  22. 脚本723行:  远程武器的id  (普通攻击时使用远程射击)
  23. 脚本725行:  回旋武器的id  (普通攻击时会飞回手上的武器,如:回力镖)
  24. 脚本738行:  远程技能的id  (使用技能时是远程射击)
  25. 脚本740行:  回旋技能的id  (使用技能时,飞出的武器会飞回手上)
  26.  
  27. 2)战斗动画(显示‘对象方的动画’之前先显示‘飞行武器射去敌人身上’的动画)
  28. 脚本821行:  回旋武器的id  (攻击时会显示一段类似回力镖的动画)
  29. 脚本823行:  弓箭武器的id  (攻击时会显示箭射去敌人身上的动画)
  30. 脚本825行:  铳类武器的id  (攻击时会显示子弹射去敌人身上的动画)
  31. 脚本838行:  回旋技能的id  (技能使用时会显示一段类似回力镖的动画)
  32. 脚本840行:  弓箭技能的id  (技能使用时会显示箭射去敌人身上的动画)
  33. 脚本842行:  铳类技能的id  (技能使用时会显示子弹射去敌人身上的动画)
  34. 脚本854行:  抛击道具的id  (使用该道具时,道具被丢到敌人身上)
  35.  
  36. 〉注意:
  37. 〉‘飞行武器射去敌人身上’的动画是在设定id之后的那句脚本里面设置
  38. 〉例子:(脚本第455和456行)
  39. 〉       when 17,18,19,20    #远程武器1(弓箭类)的id
  40. 〉       return [101,32,false,false]
  41. 〉这样,武器17~20(都是弓箭)在显示‘对象方的动画’之前会先显示第101号动画
  42. 〉而动画的轨道是从使用者身上直到敌人身上(实现子弹射出的效果)
  43.  
  44. 还有:
  45. 战斗队伍的画面位置已经被修改过,
  46. 让角色的位置与默认的战斗背景图不会有视觉上的冲突。
  47. 如果要更改请去脚本第113-116行改改就行了。
  48.  
  49. 脚本‘Arrow_Enemy’和‘Arrow_Actor’被稍微修改过(可以无视)
  50.  
  51. 这个范例附带了
  52. 一张经过修改的战斗背景图(027-castle03),其他的战斗背景图可以使用默认的。
  53. 一套横版的默认敌人的战斗图(从行走图改过来的)
  54.  
  55.                                                            #modify by darkten
  56. =end
  57. ###############################################################################
  58.  
  59. =begin
  60.  
  61. 此版本更新了以下几点:
  62.  1.支持敌人行走图战斗
  63.  2.修正与RTAB并用的bug。
  64.  3.支持敌人也玩小石头
  65.  
  66. 使用方法:
  67.  1.敌人的战斗图名称要与敌人的行走图名称相一致,具体查看本范例编号为2的敌人。
  68.  2.请自行设置 495 行的内容。
  69.  
  70.                                                                   by ONEWateR
  71. =end
  72.  
  73. ###############################################################################
  74.  
  75. =begin
  76.  
  77. 此版本更新了以下几点:
  78.  1.加入了连击效果
  79.  2.美化伤害(需把有关图片COPY到游戏\Graphics\Pictures文件夹下)
  80.  
  81. 连击使用方法:
  82.  1.输入需要连击技能的ID及要显示连击动画的ID,数据库里设置的对像方动画为最后
  83.    显示的动画。
  84.  2.请自行设置 505 行的内容。
  85.  
  86.                                                                   by Robert
  87. =end
  88.  
  89. ###############################################################################
  90.  
  91. module RPG
  92.  
  93.   class Sprite < ::Sprite
  94.     def initialize(viewport = nil)
  95.       super(viewport)
  96.       @_whiten_duration = 0
  97.       @_appear_duration = 0
  98.       @_escape_duration = 0
  99.       @_collapse_duration = 0
  100.       @_damage_duration = 0
  101.       @_damagetemp_duration = 0
  102.       @_hits_duration = 0
  103.       @_animation_duration = 0
  104.       @_blink = false
  105.       @hits = 0
  106.       @hits_way = 0
  107.       @_damage = []
  108.       @_total_damage = 0
  109.       @_total_duration = 0
  110.     end
  111.     def dispose
  112.       dispose_damage
  113.       dispose_damagetemp
  114.       dispose_animation
  115.       dispose_loop_animation
  116.       dispose_hit
  117.       super
  118.     end   
  119.     # hit数的美化描绘
  120.     def hit(hits)
  121.       dispose_hit
  122.       # 转为字符串
  123.       hits_string = hits.to_s
  124.       # 初始化位图
  125.       bitmap = Bitmap.new(320, 64)
  126.       bitmap.font.name = "Arial Black"
  127.       bitmap.font.size = 32
  128.       # 分割伤害值字符串
  129.       hits_array = hits_string.scan(/./)
  130.       hits_x = 81 - hits_string.size * 18.1
  131.       rect_y = 0
  132.       # 循环伤害值字符串
  133.       for char in hits_array
  134.         number = char.to_i
  135.         # 显示伤害数字
  136.         bitmap.blt(hits_x, 0, RPG::Cache.picture("Number"),
  137.         Rect.new(number * 36.2, rect_y, 36.2, 50))
  138.         # 后移一位
  139.         hits_x += 36.2
  140.       end
  141.       bitmap.blt(hits_x, 0, RPG::Cache.picture("HITS"),
  142.       Rect.new(0, -21, 90, 50))
  143.       # 伤害值定位
  144.       @_hits_sprite = ::Sprite.new(self.viewport)
  145.       @_hits_sprite.bitmap = bitmap
  146.       @_hits_sprite.ox = 81
  147.       @_hits_sprite.oy = 20
  148.       @_hits_sprite.x = 500
  149.       @_hits_sprite.y = 100
  150.       @_hits_sprite.z = 3001
  151.       @_hits_duration = 50
  152.     end
  153.     #美化的伤害处理
  154.     def damagetemp(value, critical)
  155.       dispose_damagetemp
  156.       # 如果伤害值是数值
  157.       if value.is_a?(Numeric)
  158.         # 绝对值转为字符串
  159.         damagetemp_string = value.abs.to_s
  160.       else
  161.         # 转为字符串
  162.         damagetemp_string = value.to_s
  163.       end
  164.       # 初始化位图
  165.       bitmap = Bitmap.new(162, 64)
  166.       bitmap.font.name = ["黑体","华文行楷", "宋体"]
  167.       bitmap.font.size = 32
  168.       # 伤害值是数值的情况下
  169.       if value.is_a?(Numeric)
  170.         # 分割伤害值字符串
  171.         damagetemp_array = damagetemp_string.scan(/./)
  172.         damagetemp_x = 81 - damagetemp_string.size * 9
  173.         # 伤害值为负的情况下
  174.         if value < 0
  175.           # 调用回复数字表
  176.           rect_y = 32
  177.         else
  178.           # 调用伤害数字表
  179.           rect_y = 0
  180.         end
  181.         # 循环伤害值字符串
  182.         for char in damagetemp_array
  183.           number = char.to_i
  184.           # 显示伤害数字
  185.           bitmap.blt(damagetemp_x, 32, RPG::Cache.picture("Damage"),
  186.           Rect.new(number * 18, rect_y, 18, 32))
  187.           # 后移一位
  188.           damagetemp_x += 18
  189.         end
  190.       # 伤害值不是数值的情况
  191.       else
  192.         # 如果伤害值不是 Miss
  193.         unless value == "Miss"
  194.           # 系统默认描画字符串
  195.           bitmap.font.color.set(0, 0, 0)
  196.           bitmap.draw_text(-1, 27, 162, 36, damagetemp_string, 1)
  197.           bitmap.draw_text(+1, 27, 162, 36, damagetemp_string, 1)
  198.           bitmap.draw_text(-1, 29, 162, 36, damagetemp_string, 1)
  199.           bitmap.draw_text(+1, 29, 162, 36, damagetemp_string, 1)
  200.           bitmap.font.color.set(255, 255, 255)
  201.           bitmap.draw_text(0, 28, 162, 36, damagetemp_string, 1)
  202.         # Miss 的情况下
  203.         else
  204.           # 显示未击中图画
  205.           bitmap.blt(36, 28, RPG::Cache.picture("Damage"), Rect.new(90, 64, 90, 32))
  206.         end
  207.       end
  208.       # 会心一击标志打开的情况
  209.       if critical
  210.         # 显示会心一击图画
  211.         bitmap.blt(36, 0, RPG::Cache.picture("Damage"), Rect.new(0, 64, 90, 32))
  212.       end
  213.       # 伤害值定位
  214.       @_damagetemp_sprite = ::Sprite.new(self.viewport)
  215.       @_damagetemp_sprite.bitmap = bitmap
  216.       @_damagetemp_sprite.ox = 81
  217.       @_damagetemp_sprite.oy = 40
  218.       @_damagetemp_sprite.x = self.x
  219.       @_damagetemp_sprite.y = self.y - self.oy / 2
  220.       @_damagetemp_sprite.z = 2999
  221.       @_damagetemp_duration = 20
  222.     end
  223.     #美化的总伤害处理
  224.     def damage(value, critical)
  225.       dispose_damage
  226.       # 如果伤害值是数值
  227.       if value.is_a?(Numeric)
  228.         # 绝对值转为字符串
  229.         damage_string = value.abs.to_s
  230.       else
  231.         # 转为字符串
  232.         damage_string = value.to_s
  233.       end
  234.       # 初始化位图
  235.       bitmap = Bitmap.new(162, 64)
  236.       bitmap.font.name = "Arial Black"
  237.       bitmap.font.size = 32
  238.       # 伤害值是数值的情况下
  239.       if value.is_a?(Numeric)
  240.         # 分割伤害值字符串
  241.         damage_array = damage_string.scan(/./)
  242.         damage_x = 81 - damage_string.size * 9
  243.         # 伤害值为负的情况下
  244.         if value < 0
  245.           # 调用回复数字表
  246.           name="Number+"
  247.         else
  248.           # 调用伤害数字表
  249.           name="Number-"
  250.         end
  251.         # 循环伤害值字符串
  252.         for char in damage_array
  253.           number = char.to_i
  254.           # 显示伤害数字
  255.           bitmap.blt(damage_x, 28, RPG::Cache.picture(name),
  256.           Rect.new(number * 18, 0, 18, 32))
  257.           # 后移一位
  258.           damage_x += 18
  259.         end
  260.       # 伤害值不是数值的情况
  261.       else
  262.         # 如果伤害值不是 Miss
  263.         unless value == "Miss"
  264.           # 系统默认描画字符串
  265.           bitmap.font.color.set(0, 0, 0)
  266.           bitmap.draw_text(-1, 27, 162, 36, damage_string, 1)
  267.           bitmap.draw_text(+1, 27, 162, 36, damage_string, 1)
  268.           bitmap.draw_text(-1, 29, 162, 36, damage_string, 1)
  269.           bitmap.draw_text(+1, 29, 162, 36, damage_string, 1)
  270.           bitmap.font.color.set(255, 255, 255)
  271.           bitmap.draw_text(0, 28, 162, 36, damage_string, 1)
  272.         # Miss 的情况下
  273.         else
  274.           name = "Numbermiss"
  275.           # 显示未击中图画
  276.           bitmap.blt(36, 32, RPG::Cache.picture(name), Rect.new(0, 0, 90, 32))
  277.         end
  278.       end
  279.       # 会心一击标志打开的情况
  280.       if critical
  281.         # 显示会心一击图画
  282.         bitmap.blt(36, 0, RPG::Cache.picture("Damage"), Rect.new(0, 64, 90, 32))
  283.       end
  284.       # 伤害值定位
  285.       @_damage_sprite = ::Sprite.new(self.viewport)
  286.       @_damage_sprite.bitmap = bitmap
  287.       @_damage_sprite.ox = 81
  288.       #@_damage_sprite.oy = 20
  289.       @_damage_sprite.oy = 40
  290.       @_damage_sprite.x = self.x
  291.       @_damage_sprite.y = self.y - self.oy / 2
  292.       @_damage_sprite.z = 3000
  293.       @_damage_duration = 40
  294.     end
  295.     def dispose_hit
  296.       if @_hits_sprite != nil
  297.         @_hits_sprite.bitmap.dispose
  298.         @_hits_sprite.dispose
  299.         @_hits_sprite = nil
  300.         @_hits_duration = 0
  301.       end
  302.     end
  303.     def dispose_damagetemp
  304.       if @_damagetemp_sprite != nil
  305.         @_damagetemp_sprite.bitmap.dispose
  306.         @_damagetemp_sprite.dispose
  307.         @_damagetemp_sprite = nil
  308.         @_damagetemp_duration = 0
  309.       end
  310.     end
  311.     def effect?
  312.       @_whiten_duration > 0 or
  313.       @_appear_duration > 0 or
  314.       @_escape_duration > 0 or
  315.       @_collapse_duration > 0 or
  316.       @_damage_duration > 0 or
  317.       @_damagetemp_duration > 0 or
  318.       @_hits_duration > 0 or
  319.       @_animation_duration > 0
  320.     end
  321.     def update
  322.       super
  323.       if @_whiten_duration > 0
  324.         @_whiten_duration -= 1
  325.         self.color.alpha = 128 - (16 - @_whiten_duration) * 10
  326.       end
  327.       if @_appear_duration > 0
  328.         @_appear_duration -= 1
  329.         self.opacity = (16 - @_appear_duration) * 16
  330.       end
  331.       if @_escape_duration > 0
  332.         @_escape_duration -= 1
  333.         self.opacity = 256 - (32 - @_escape_duration) * 10
  334.       end
  335.       if @_collapse_duration > 0
  336.         @_collapse_duration -= 1
  337.         self.opacity = 256 - (48 - @_collapse_duration) * 6
  338.       end
  339.       if @_damage_duration > 0
  340.         @_damage_duration -= 1
  341.         case @_damage_duration
  342.         when 38..39
  343.           @_damage_sprite.y -= 4
  344.         when 36..37
  345.           @_damage_sprite.y -= 2
  346.         when 34..35
  347.           @_damage_sprite.y += 2
  348.         when 28..33
  349.           @_damage_sprite.y += 4
  350.         end
  351.         @_damage_sprite.opacity = 256 - (12 - @_damage_duration) * 32
  352.         if @_damage_duration == 0
  353.           dispose_damage
  354.         end
  355.       end
  356.       if @_hits_duration > 0
  357.         @_hits_duration -= 1
  358.         if @_hits_duration == 0
  359.           dispose_hit
  360.         end
  361.       end
  362.       if @_damagetemp_duration > 0
  363.         @_damagetemp_duration -= 1
  364.         case @_damagetemp_duration
  365.         when 10..19
  366.           @_damagetemp_sprite.y -= 4
  367.         when 1..9
  368.           @_damagetemp_sprite.y += 2
  369.         end
  370.         if @hits == 0
  371.           @_damagetemp_sprite.x -= 2
  372.         else
  373.           @_damagetemp_sprite.x += 2
  374.         end
  375.         @_damagetemp_sprite.opacity = 256 - (10 - @_damagetemp_duration) * 32
  376.         if @_damagetemp_duration == 0
  377.           dispose_damagetemp
  378.           case @hits
  379.           when 0
  380.             @hits = 1
  381.           when 1
  382.             @hits = 0
  383.           end
  384.         end
  385.       end
  386.       if @_animation != nil and (Graphics.frame_count % 2 == 0)
  387.         @_animation_duration -= 1
  388.         update_animation
  389.       end
  390.       if @_loop_animation != nil and (Graphics.frame_count % 2 == 0)
  391.         update_loop_animation
  392.         @_loop_animation_index += 1
  393.         @_loop_animation_index %= @_loop_animation.frame_max
  394.       end
  395.       if @_blink
  396.         @_blink_count = (@_blink_count + 1) % 32
  397.         if @_blink_count < 16
  398.           alpha = (16 - @_blink_count) * 6
  399.         else
  400.           alpha = (@_blink_count - 16) * 6
  401.         end
  402.         self.color.set(255, 255, 255, alpha)
  403.       end
  404.       @@_animations.clear
  405.     end
  406.   end
  407. end
  408.  
  409. module Side_view
  410.   #--------------------------------------------------------------------------
  411.   # ● 是否与RATB并用 ☆自动识别(这到是不错~省了~)
  412.   #    在Scene_Battle计算方法是否是方法synthe?
  413.   #    在自动不想认识的时候,请重写。
  414.   #--------------------------------------------------------------------------
  415.   if Scene_Battle.method_defined?("synthe?")
  416.     RTAB = true
  417.   else
  418.     RTAB = false
  419.   end
  420.   #--------------------------------------------------------------------------
  421.   # ● 改正RATB中的位置误差 ☆自动识别
  422.   #    在自动不想认识的时候,请重写。
  423.   #--------------------------------------------------------------------------
  424.   def camera_correctness
  425.     return false if !RTAB
  426.     begin
  427.       return $scene.drive
  428.     rescue
  429.       return false
  430.     end
  431.   end
  432.   #--------------------------------------------------------------------------
  433.   # ● 队伍中的最大人数
  434.   #--------------------------------------------------------------------------
  435.   Party_max = 4
  436.   #--------------------------------------------------------------------------
  437.   # ● 战斗图的扩大率(1.0的时候是保持原有大小)
  438.   #--------------------------------------------------------------------------
  439.   CHAR_ZOOM = 1.0
  440.   #--------------------------------------------------------------------------
  441.   # ● 光标的位置修正(基本不需要改~)
  442.   #--------------------------------------------------------------------------
  443.   ARROW_OX = 0
  444.   ARROW_OY = 64
  445.   #--------------------------------------------------------------------------
  446.   # ● 飞行状态命名
  447.   #--------------------------------------------------------------------------
  448.   FLY_STATES = ["飞行"]
  449.   #--------------------------------------------------------------------------
  450.   # ● 战斗画面的位置
  451.   #--------------------------------------------------------------------------
  452.   PARTY_X = 455     # 队伍 X 位置
  453.   PARTY_Y = 100     # 队伍 Y 位置 原200
  454.   FORMATION_X = 15  # 各个角色之间的间隔 X
  455.   FORMATION_Y = 65  # 各个角色之间的间隔 Y 原35
  456.   #--------------------------------------------------------------------------
  457.   # ● 自定义常数
  458.   #--------------------------------------------------------------------------
  459.   NORMAL   = "NORMAL"
  460.   WALK_R   = "WALK_R"
  461.   WALK_L   = "WALK_L"
  462.   ATTACK   = "ATTACK"
  463.   ATTACK_R = "ATTACK_R"
  464.   ATTACK_L = "ATTACK_L"
  465.   MAGIC    = "MAGIC"
  466.   ITEM     = "ITEM"
  467.   # 动画的设定
  468.   ANIME = {
  469.     # [画像ID,是否循环,アニメスピード,动画速度,不能指向动画,武器放在右手or左手]
  470.     NORMAL            => [1,true , 0,false, true ,""    ], # 通常待击
  471.     WALK_R            => [2,true , 2,false, false,""    ], # 右移动
  472.     WALK_L            => [1,true , 2,false, false,""    ], # 左移动
  473.     ATTACK_R          => [1,false, 2,true , false,"右手"], # 右手攻击
  474.     ATTACK_L          => [1,false, 2,true , false,"左手"], # 左手攻击
  475.     MAGIC             => [1,false, 2,false, false,""    ], # 右手攻击
  476.     ITEM              => [1,false, 2,false, false,""    ], # 左手攻击
  477.     }
  478.  
  479.   # 债务不履行声明价值的设定(一个字一个字翻译的,不知道啥意思)  
  480.   ANIME.default = [1,false,12,false,"",""]
  481.  
  482.   # 在行动设定的时候 右手攻击 or 左手攻击 辨别を(这个不知道什么意思)的ANIME
  483.   # "角色动画变更#ATTACK"在玩了と(还是不知道啥意思..)的时候,辨别ATTACK_R或者ATTACK_L
  484.   DUAL_WEAPONS_ANIME = [ATTACK]
  485.  
  486.  
  487.   #--------------------------------------------------------------------------
  488.   # ● 战斗图不是行走图的敌人编号
  489.   #--------------------------------------------------------------------------
  490.   NOT_CHARACTER_EMEMY = [111]
  491.   #--------------------------------------------------------------------------
  492.   # ● 敌人使用的武器
  493.   #    敌人编号=>武器编号
  494.   #--------------------------------------------------------------------------
  495.   EMEMY_WEAPO = {1=>1,7=>17}
  496.   #--------------------------------------------------------------------------
  497.   # ● 敌人使用的武器 (二刀流)
  498.   #    敌人编号=>武器编号
  499.   #--------------------------------------------------------------------------
  500.   EMEMY_WEAPO2 = {}
  501.   #--------------------------------------------------------------------------
  502.   # ● 多段连击技能
  503.   #    技能编号=>动画编号
  504.   #--------------------------------------------------------------------------
  505.   RT_SKILL_ANIMATION =
  506.   $rt_animation_id = []
  507.   $rt_hits = 0
  508.   $rt_damage = {}
  509.   #--------------------------------------------------------------------------
  510.   # ● 摇晃的设定
  511.   #--------------------------------------------------------------------------
  512.   SHAKE_FILE = "摇晃"  # 文件名
  513.   SHAKE_POWER = 5          # 强度
  514.   SHAKE_SPEED = 5          # 速度
  515.   SHAKE_DURATION = 5      # 时间
  516.   #--------------------------------------------------------------------------
  517.   # ● 上下反转地的设定
  518.   #--------------------------------------------------------------------------
  519.   UPSIDE_DOWN_FILE = "上下反转" # 文件名
  520.   #--------------------------------------------------------------------------
  521.   # ● 左右反转地的设定
  522.   #--------------------------------------------------------------------------
  523.   REVERSE_FILE = "左右反转" # 文件名
  524.   #--------------------------------------------------------------------------
  525.   # ● 回转地的设定
  526.   #--------------------------------------------------------------------------
  527.   TURNING_FILE = "回转" # 文件名
  528.   TURNING_DIRECTION = 1 # 方向(1.逆时针,-1.顺时针)(|||-_-汗..怎么还有用-1做带入值的...)
  529.   TURNING_SPEED = 40    # 速度
  530.   TURNING_DURATION = 1  # 回转数
  531.   #--------------------------------------------------------------------------
  532.   # ● 移动的设定
  533.   #--------------------------------------------------------------------------
  534.   MOVE_FILE = "移动"             # 文件名
  535.   MOVE_RETURN = 1                # 回到原来的位置吗?(光写了个1,也不知道不回到该怎么写?0?)
  536.   MOVE_SPEED = 32                # 速度
  537.   MOVE_COORDINATES = [0,-640]    # 原来位置的相对坐标
  538.   #--------------------------------------------------------------------------
  539.   # ● 动画追加的设定
  540.   #--------------------------------------------------------------------------
  541.   ADD_ANIME_FILE = "动画追加"  # 文件名
  542.   ADD_ANIME_ID = 0               # 动画的ID
  543.   #--------------------------------------------------------------------------
  544.   # ● 债务不履行声明和RTAB的数据转换
  545.   #--------------------------------------------------------------------------
  546.   def convert_battler
  547.     return RTAB ? @active_actor : @active_battler
  548.   end
  549.   #--------------------------------------------------------------------------
  550.   # ● 债务不履行声明和RTAB的数据转换2
  551.   #--------------------------------------------------------------------------
  552.   def convert_battler2(*arg)
  553.     return RTAB ? arg[0] : @active_battler
  554.   end
  555. end
  556.  
  557. #--------------------------------------------------------------------------
  558. # ● 行动設定
  559. #--------------------------------------------------------------------------
  560. module BattleActions
  561.  
  562.   # 下のものはあくまでも一例なので
  563.   # 独自に作ってください。
  564.  
  565.   Actions = {
  566.  
  567.   "通常攻撃" => [
  568.  
  569.   "閃きアニメ",
  570.   "アクターアニメ変更#WALK_L",
  571.   "移動#target,32,0,64,0",
  572.   "行動アニメ",
  573.   "アクターアニメ変更#ATTACK",
  574.   "遠距離アニメ",
  575.   "対象アニメ",
  576.   "アクターアニメ変更#WALK_L",
  577.   "SEの演奏#016-Jump02,80,100",
  578.   "移動#self,0,0,48,32",
  579.   "終了"
  580.   ],
  581.  
  582.   "エネミー攻撃" => [
  583.  
  584.   "閃きアニメ",
  585.   "アクターアニメ変更#WALK_L",
  586.   "移動#target,32,0,64,0",
  587.   "行動アニメ",
  588.   "アクターアニメ変更#ATTACK",
  589.   "遠距離アニメ",
  590.   "対象アニメ",
  591.   "アクターアニメ変更#WALK_L",
  592.   "SEの演奏#016-Jump02,80,100",
  593.   "移動#self,0,0,48,32",
  594.   "終了"
  595.   ],
  596.  
  597.   "術発動" => [
  598.  
  599.   "閃きアニメ",
  600.   "アクターアニメ変更#WALK_L",
  601.   "移動#self,-32,0,4,0",
  602.   "アクターアニメ変更#MAGIC",
  603.   "行動アニメ",
  604.   "ウエイト#15",
  605.   "遠距離アニメ",
  606.   "技能#target",
  607.   "ウエイト#1",
  608.   "対象アニメ",
  609.   "アクターアニメ変更#WALK_L",
  610.   "移動#self,0,0,4,2",
  611.   "終了"
  612.   ],
  613.  
  614.   "アイテム使用" => [
  615.  
  616.   "閃きアニメ",
  617.   "アクターアニメ変更#WALK_L",
  618.   "移動#self,-32,0,4,0",
  619.   "行動アニメ",
  620.   "アクターアニメ変更#ITEM",
  621.   "ウエイト#15",
  622.   "遠距離アニメ",
  623.   "対象アニメ",
  624.   "アクターアニメ変更#WALK_L",
  625.   "移動#self,0,0,4,2",
  626.   "終了"
  627.   ],
  628.  
  629.   "払い抜け" => [
  630.  
  631.   "閃きアニメ",
  632.   "アクターアニメ変更#WALK_L",
  633.   "移動#target_near,50,0,48,30",  
  634.   "左右反転",
  635.   "アクターアニメ固定#ATTACK#3",
  636.   "行動アニメ",
  637.   "左右反転",
  638.   "残像表示",
  639.   "移動#target_far,-50,0,48,0",
  640.   "技能#target",
  641.   "ウエイト#1",
  642.   "対象アニメ",
  643.   "残像消去",
  644.   "アニメ固定解除",
  645.   "アクターアニメ変更#WALK_L",
  646.   "移動#self,0,0,48,1,0",
  647.   "終了"
  648.   ],
  649.  
  650.   "弓箭攻撃" => [
  651.  
  652.   "閃きアニメ",
  653.   "アクターアニメ変更#WALK_L",
  654.   "移動#self,-32,0,4,0",
  655.   "行動アニメ",
  656.   "アクターアニメ変更#ATTACK",
  657.   "遠距離アニメ",
  658.   "対象アニメ",
  659.   "アクターアニメ変更#WALK_L",
  660.   "移動#self,0,0,4,2",
  661.   "終了"
  662.   ],
  663.  
  664.   "回旋攻撃" => [
  665.  
  666.   "閃きアニメ",
  667.   "アクターアニメ変更#WALK_L",
  668.   "移動#self,-32,0,4,0",
  669.   "行動アニメ",
  670.   "アクターアニメ変更#STAND_L",  
  671.   "遠距離アニメ",
  672.   "対象アニメ",
  673.   "アクターアニメ変更#WALK_L",
  674.   "移動#self,0,0,4,2",
  675.   "終了"
  676.   ],
  677.  
  678.   "远距离発動" => [
  679.  
  680.   "閃きアニメ",
  681.   "アクターアニメ変更#WALK_L",
  682.   "移動#self,-32,0,4,0",
  683.   "アクターアニメ変更#MAGIC",
  684.   "行動アニメ",
  685.   "アクターアニメ変更#ATTACK",
  686.   "遠距離アニメ",
  687.   "技能#target",
  688.   "ウエイト#1",
  689.   "対象アニメ",
  690.   "アクターアニメ変更#WALK_L",
  691.   "移動#self,0,0,4,2",
  692.   "終了"
  693.   ],
  694.  
  695.   "回旋発動" => [
  696.  
  697.   "閃きアニメ",
  698.   "アクターアニメ変更#WALK_L",
  699.   "移動#self,-32,0,4,0",
  700.   "アクターアニメ変更#MAGIC",
  701.   "行動アニメ",
  702.   "アクターアニメ変更#STAND_L",  
  703.   "遠距離アニメ",
  704.   "技能#target",
  705.   "ウエイト#1",
  706.   "対象アニメ",
  707.   "アクターアニメ変更#WALK_L",
  708.   "移動#self,0,0,4,2",
  709.   "終了"
  710.   ],
  711.  
  712.   } # ここで終わり 消さないでください
  713.  
  714. end
  715.  
  716. module RPG
  717.   class Weapon
  718.     #--------------------------------------------------------------------------
  719.     # ● アクション設定
  720.     #--------------------------------------------------------------------------
  721.     def battle_actions
  722.       case @id
  723.       when 171,181,191,201,211,221,231,241  # 远程武器的id回旋攻撃
  724.         return BattleActions::Actions["弓箭攻撃"]
  725.       when 341                       # 回旋武器的id
  726.         return BattleActions::Actions["回旋攻撃"]
  727.       end
  728.       else
  729.       return BattleActions::Actions["通常攻撃"]
  730.     end
  731.   end
  732.   class Skill
  733.     #--------------------------------------------------------------------------
  734.     # ● アクション設定
  735.     #--------------------------------------------------------------------------
  736.     def battle_actions
  737.       case @id
  738.       when 86,85,84,82,173,174,175,176,177,178,179,180  # 远程技能的id
  739.         return BattleActions::Actions["远距离発動"]
  740.       when 182                       # 回旋技能的id
  741.         return BattleActions::Actions["回旋発動"]
  742.       end
  743.       else
  744.       if self.magic?
  745.         return BattleActions::Actions["術発動"]
  746.       else
  747.         return BattleActions::Actions["払い抜け"]
  748.       end
  749.     end
  750.   end
  751.   class Item
  752.     #--------------------------------------------------------------------------
  753.     # ● アクション設定
  754.     #--------------------------------------------------------------------------
  755.     def battle_actions
  756.       return BattleActions::Actions["アイテム使用"]
  757.     end
  758.   end
  759. end
  760. #class Game_Enemy < Game_Battler
  761.   #--------------------------------------------------------------------------
  762.   # ● アクション設定
  763.   #--------------------------------------------------------------------------
  764. #~  def battle_actions
  765. #~    return BattleActions::Actions["エネミー攻撃"]
  766. #~  end
  767. #end
  768. =begin
  769. #--------------------------------------------------------------------------
  770. # ● 遠距離アニメーション
  771. #--------------------------------------------------------------------------
  772.  ☆ 説明
  773.  
  774.    行動者から対象者にアニメを飛ばします。
  775.    飛ばすアニメを データベース‐アニメーション で作ります。
  776.     [アニメーションID, スピード, 往復するか?,直線(false)or曲線(true)] で指定します。
  777.  
  778.  
  779.   ● カスタマイズ方法
  780.     
  781.     case @id
  782.     when 17,18,19,20
  783.       return [101,32,false,false]
  784.     when 21,22,23,24
  785.       return [102,32,false,false]
  786.     end
  787.     return 0
  788.     
  789.     のように描くとID別に指定可能です。
  790.     
  791.     
  792.   ● アニメーションID
  793.  
  794.   飛ばすアニメーションIDです。短い場合は繰り返しで表示されます。
  795.  
  796.     
  797.   ● スピード
  798.  
  799.   大きいほうが早い(0だとアニメは移動しません)
  800.  
  801.   1 = 1フレームで1ドット進むと考えてください。
  802.  
  803.   ● 往復するか?
  804.  
  805.   true とした場合、ブーメランのようにアニメが戻ります。
  806.  
  807.   ● 直線(false)or曲線(true)
  808.  
  809.   true  = 対象に向かって曲線で、アニメが飛びます。(修正の余地ありですが・・・)
  810.   false = 対象に向かって直線で、アニメが飛びます。
  811.     
  812. =end
  813. module RPG
  814.   class Weapon
  815.     #--------------------------------------------------------------------------
  816.     # ● 遠距離アニメーション
  817.     #--------------------------------------------------------------------------
  818.     def flying_anime
  819.       # ID 指定 の例(武器的id,分类是根据飞行武器的动画id)
  820.       case @id
  821.       when 341             #回旋武器(类似回力镖)的id
  822.         return [103,32,true,true]
  823.       when 171,181,191,201    #远程武器1(弓箭类)的id
  824.         return [101,32,false,false]
  825.       when 211,221,231,241    #远程武器2(铳类)的id
  826.         return [102,32,false,false]
  827.       end
  828.       return [0,0,false,false]
  829.     end
  830.   end
  831.   class Skill
  832.     #--------------------------------------------------------------------------
  833.     # ● 遠距離アニメーション
  834.     #--------------------------------------------------------------------------
  835.     def flying_anime
  836.       # ID 指定 の例(技能的id,分类是根据飞行武器的动画id)
  837.       case @id
  838.       when 182             #回旋技能(类似回力镖)的id
  839.         return [103,32,true,true]
  840.       when 173,174,175,176    #远程技能1(弓箭类)的id
  841.         return [101,32,false,false]
  842.       when 177,178,179,180    #远程技能2(铳类)的id
  843.         return [102,32,false,false]
  844.       end
  845.       return [0,0,false,false]
  846.     end
  847.   end
  848.   class Item
  849.     #--------------------------------------------------------------------------
  850.     # ● 遠距離アニメーション
  851.     #--------------------------------------------------------------------------
  852.     def flying_anime
  853.       case @id
  854.       when 341    #抛击类道具(如炸弹一类)的id
  855.         return [104,32,false,true]
  856.       end
  857.       return [0,0,false,false]
  858.     end
  859.   end
  860. end
  861.  
  862. #class Game_Enemy < Game_Battler
  863.   #--------------------------------------------------------------------------
  864.   # ● 遠距離アニメーション
  865.   #--------------------------------------------------------------------------
  866. #~  def flying_anime
  867. #~    return [0,0,false,false]
  868. #~  end
  869. #end
  870.  
  871.  
  872.  
  873. #==============================================================================
  874. # ■ Game_Battler
  875. #==============================================================================
  876. class Game_Battler
  877.   include Side_view
  878.   #--------------------------------------------------------------------------
  879.   # ● 追加・公開インスタンス変数
  880.   #--------------------------------------------------------------------------
  881.   attr_accessor :height                  # 画像の高さ
  882.   attr_accessor :real_x                  # X座標補正
  883.   attr_accessor :real_y                  # Y座標補正
  884.   attr_accessor :real_zoom               # 拡大率
  885.   attr_accessor :wait_count              # アニメーション 待ち時間
  886.   attr_accessor :wait_count2             # アニメーション 待ち時間2
  887.   attr_accessor :pattern                 # アニメーション カウント(キャラ)
  888.   attr_accessor :shake                   # シェイク開始フラッグ
  889.   attr_accessor :reverse                 # 左右反転フラッグ
  890.   attr_accessor :shadow                  # 残像フラッグ
  891.   attr_accessor :flash_flag              # 閃きフラッグ
  892.   attr_accessor :damagetemp_pop          # 显示临时伤害标志
  893.   attr_accessor :hit_pop                 # 显示连击标志
  894.   attr_reader   :ox                      # X座標補正
  895.   attr_reader   :oy                      # Y座標補正
  896.   attr_reader   :flying_x                # 遠距離アニメX座標
  897.   attr_reader   :flying_y                # 遠距離アニメY座標
  898.   attr_reader   :flying_anime            # 遠距離アニメ
  899.   attr_reader   :animation1_on           # 行動アニメ開始フラッグ
  900.   attr_reader   :animation2_on           # 対象アニメ開始フラッグ
  901.   #--------------------------------------------------------------------------
  902.   # ● デフォルトのアニメーション待ち時間を取得
  903.   #--------------------------------------------------------------------------
  904.   def animation_duration=(animation_duration)
  905.     @_animation_duration = animation_duration
  906.   end
  907.   #--------------------------------------------------------------------------
  908.   # ● バトル開始時のセットアップ
  909.   #--------------------------------------------------------------------------
  910.   def start_battle
  911.     @height = 0
  912.     @real_x = 0
  913.     @real_y = 0
  914.     @real_zoom = 1.0
  915.     @battler_condition = ""
  916.     @action = nil
  917.     @battle_actions = []
  918.     @battler_action = false
  919.     @step = 0
  920.     @anime_on = false
  921.     @wait_count = 0
  922.     @wait_count2 = 0
  923.     @ox = 0
  924.     @oy = 0
  925.     @pattern = 0
  926.     @pattern_log = true
  927.     @pattern_freeze = false
  928.     @condition_freeze = false
  929.     @active = false
  930.     @move_distance = nil
  931.     @move_wait = 0
  932.     @move_coordinates = [0,0,0,0]
  933.     @flying_distance = nil
  934.     @flying_wait = 0
  935.     @flying_x = 0
  936.     @flying_y = 0
  937.     @flash_flag = {}
  938.     self.flying_clear
  939.   end
  940.   #--------------------------------------------------------------------------
  941.   # ● 移動中判定
  942.   #--------------------------------------------------------------------------
  943.   def moving?
  944.     # X座標補正または、Y座標補正が0でなければ、移動中
  945.     return (@ox != 0 or @oy != 0)
  946.   end
  947.   #--------------------------------------------------------------------------
  948.   # ● 移動終了判定
  949.   #--------------------------------------------------------------------------
  950.   def move_end?
  951.     return (@ox == @move_coordinates[0] and @oy == @move_coordinates[1])
  952.   end
  953.   #--------------------------------------------------------------------------
  954.   # ● アクション開始設定
  955.   #--------------------------------------------------------------------------
  956.   def action(flag = true)
  957.     @battler_action = flag
  958.     @animation1_on = false
  959.     @animation2_on = false
  960.     @step = "setup"
  961.   end   
  962.   #--------------------------------------------------------------------------
  963.   # ● アクション中判定
  964.   #--------------------------------------------------------------------------
  965.   def action?
  966.     return @battler_action
  967.   end
  968.   #--------------------------------------------------------------------------
  969.   # ● 閃き判定
  970.   #--------------------------------------------------------------------------
  971.   def flash?
  972.     return @flash_flg
  973.   end
  974.   #--------------------------------------------------------------------------
  975.   # ● 戦闘不能判定
  976.   #--------------------------------------------------------------------------
  977.   def anime_dead?
  978.     if $game_temp.in_battle and !RTAB
  979.       if [2,3,4,5].include?($scene.phase4_step)
  980.         return @last_dead
  981.       end
  982.     end
  983.     return @last_dead = self.dead?
  984.   end
  985.   #--------------------------------------------------------------------------
  986.   # ● ピンチ状態判定
  987.   #--------------------------------------------------------------------------
  988.   def crisis?
  989.     if $game_temp.in_battle and !RTAB
  990.       if [2,3,4,5].include?($scene.phase4_step)
  991.         return @last_crisis
  992.       end
  993.     end
  994.     return @last_crisis = (self.hp <= self.maxhp / 4 or badstate?)
  995.   end
  996.   #--------------------------------------------------------------------------
  997.   # ● バッドステート判定
  998.   #--------------------------------------------------------------------------
  999.   def badstate?
  1000.     for i in @states
  1001.       unless $data_states[i].nonresistance
  1002.         return true
  1003.       end
  1004.     end
  1005.     return false
  1006.   end
  1007.   #--------------------------------------------------------------------------
  1008.   # ● 飛行
  1009.   #--------------------------------------------------------------------------
  1010.   def fly
  1011.     if @fly != nil
  1012.       return @fly
  1013.     end
  1014.     for id in @states
  1015.       if FLY_STATES.include?($data_states[id].name)
  1016.         return 60
  1017.       end
  1018.     end
  1019.     return 0
  1020.   end
  1021.   #--------------------------------------------------------------------------
  1022.   # ● 遠距離アニメ目標座標の計算
  1023.   #--------------------------------------------------------------------------
  1024.   def flying_setup
  1025.     # 二度目は実行しない
  1026.     return if @flying_distance != nil && !camera_correctness
  1027.     if RTAB
  1028.       targets = @target
  1029.     else
  1030.       targets = $scene.target_battlers
  1031.     end
  1032.     # 目的座標を計算
  1033.     @f_target_x = 0
  1034.     @f_target_y = 0
  1035.     for t in targets
  1036.       @f_target_x += t.screen_x
  1037.       @f_target_y += t.screen_y
  1038.     end
  1039.     if targets != []
  1040.       @f_target_x /= targets.size
  1041.       @f_target_y /= targets.size
  1042.     else
  1043.       @flying_distance = 0
  1044.       return
  1045.     end
  1046.     # 距離の計算
  1047.     @flying_distance = (self.screen_x - @f_target_x).abs + (self.screen_y - @f_target_y).abs
  1048.   end
  1049.   #--------------------------------------------------------------------------
  1050.   # ● 遠距離アニメ
  1051.   #--------------------------------------------------------------------------
  1052.   def flying_animation
  1053.     # 戻る
  1054.     if @step != "flying" or @flying_distance.nil?
  1055.       return [false,true]
  1056.     end
  1057.     # あらかじめ計算
  1058.     self_x = self.screen_x
  1059.     self_y = self.screen_y
  1060.     @flying_distance = @flying_distance == 0 ? 1 : @flying_distance
  1061.     n1 = @flying_wait / @flying_distance.to_f
  1062.     if @flying_distance - @flying_wait > @flying_distance / 2
  1063.       n2 = 1.0 + 10.0 * @flying_wait / @flying_distance.to_f
  1064.     else
  1065.       n2 = 1.0 + 10.0 * (@flying_distance - @flying_wait) / @flying_distance.to_f
  1066.     end
  1067.     if !@flying_anime[4]
  1068.       # 直線移動
  1069.       x = (self_x + 1.0 * (@f_target_x - self_x) * n1).to_i
  1070.       y = (self_y + 1.0 * (@f_target_y - self_y) * n1).to_i
  1071.     else
  1072.       # 曲線移動
  1073.       if !@flying_proceed_end
  1074.         x = (self_x + 1.0 * (@f_target_x - self_x) * n1).to_i
  1075.         y = (self_y + 1.0 * (@f_target_y - self_y) * n1 - n2**2).to_i
  1076.       else
  1077.         x = (self_x + 1.0 * (@f_target_x - self_x) * n1).to_i
  1078.         y = (self_y + 1.0 * (@f_target_y - self_y) * n1 + n2**2).to_i
  1079.       end
  1080.     end
  1081.     # 座標代入
  1082.     @flying_x = x
  1083.     @flying_y = y
  1084.     # ウエイト
  1085.     if !@flying_proceed_end
  1086.       # 開始
  1087.       @flying_proceed_start = @flying_wait == 0
  1088.       @flying_wait += @flying_anime[1]
  1089.       @flying_wait = [@flying_wait,@flying_distance].min
  1090.       @flying_proceed_end = @flying_wait == @flying_distance
  1091.     else
  1092.       # 開始
  1093.       @flying_return_start = @flying_wait == @flying_distance
  1094.       @flying_wait -= @flying_anime[1]
  1095.       @flying_wait = [@flying_wait,0].max
  1096.       @flying_return_end = @flying_wait == 0
  1097.     end
  1098.     if @flying_anime[1] == 0
  1099.       @flying_end = true
  1100.     elsif !@flying_anime[2]
  1101.       @flying_end = @flying_proceed_end
  1102.     else
  1103.       @flying_end = @flying_return_end
  1104.     end
  1105.     # 値を返す(アニメ開始,アニメ終了)
  1106.     return [@flying_proceed_start,@flying_end]
  1107.   end
  1108.   #--------------------------------------------------------------------------
  1109.   # ● 遠距離アニメ初期化
  1110.   #--------------------------------------------------------------------------
  1111.   def flying_clear
  1112.     @flying_proceed_start = false
  1113.     @flying_proceed_end = false
  1114.     @flying_return_start = false
  1115.     @flying_return_end = false
  1116.     @flying_end = false
  1117.     @flying_anime = [0,0,false]
  1118.   end
  1119.   #--------------------------------------------------------------------------
  1120.   # ● 移動
  1121.   #--------------------------------------------------------------------------
  1122.   def move
  1123.     # 距離の計算
  1124.     @move_distance = (@move_coordinates[2] - @move_coordinates[0]).abs +
  1125.                      (@move_coordinates[3] - @move_coordinates[1]).abs
  1126.     if @move_distance > 0
  1127.       return if @ox == @move_coordinates[0] and @oy == @move_coordinates[1]
  1128.       array = @move_coordinates
  1129.       # ジャンプ補正値の計算
  1130.       if @move_distance - @move_wait > @move_distance / 2
  1131.         jump = (@move_action[4] * @move_wait / @move_distance.to_f)**2        
  1132.       else
  1133.         jump = (@move_action[4] * (@move_distance - @move_wait) / @move_distance.to_f)**2
  1134.       end
  1135.       jump = @move_action[4] > 0 ? -jump : jump
  1136.       @ox = (array[2] + 1.0 * (array[0] - array[2]) * (@move_distance - @move_wait) / @move_distance.to_f).to_i
  1137.  
  1138.       @oy = (array[3] + 1.0 * (array[1] - array[3]) * (@move_distance - @move_wait) / @move_distance.to_f + jump).to_i
  1139.       # ウエイト
  1140.       @move_wait -= @move_action[3]
  1141.       @move_wait = [@move_wait,0].max
  1142.     end
  1143.   end
  1144.   #--------------------------------------------------------------------------
  1145.   # ● 移動アクションの取得
  1146.   #--------------------------------------------------------------------------
  1147.   def get_move_action
  1148.     string = @action.split(/#/)[1]
  1149.     string = string.split(/,/)
  1150.     @move_action = [string[0],string[1].to_i,string[2].to_i,string[3].to_i,string[4].to_i,string[5].to_i]
  1151.   end
  1152.   #--------------------------------------------------------------------------
  1153.   # ● アクションの取得
  1154.   #--------------------------------------------------------------------------
  1155.   def get_step
  1156.     if @action.nil?
  1157.       @step = "finish"
  1158.       return
  1159.     end
  1160.     string = @action.split(/#/)[0]
  1161.     if string =~ "移動"
  1162.       @step = "moving_setup"
  1163.     elsif string =~ "アクターアニメ実行"
  1164.       @step = "action"
  1165.     elsif string =~ "遠距離アニメ"
  1166.       @step = "flying"
  1167.     elsif string =~ "アクターアニメ変更"
  1168.       @step = "change"
  1169.     elsif string =~ "行動アニメ"
  1170.       @step = "animation1"
  1171.     elsif string =~ "対象アニメ"
  1172.       @step = "animation2"
  1173.     elsif string =~ "ウエイト"
  1174.       @step = "wait"
  1175.     elsif string =~ "左右反転"
  1176.       @step = "reverse"
  1177.     elsif string =~ "閃きアニメ"
  1178.       @step = "flash"
  1179.     elsif string =~ "残像表示"
  1180.       @step = "shadow_on"
  1181.     elsif string =~ "残像消去"
  1182.       @step = "shadow_off"
  1183.     elsif string =~ "アクターアニメ固定"
  1184.       @step = "freeze"
  1185.     elsif string =~ "アニメ固定解除"
  1186.       @step = "freeze_lifting"
  1187.     elsif string =~ "アニメーションの表示"
  1188.       @step = "animation_start"
  1189.     elsif string =~ "技能"
  1190.       @step = "skill_start"
  1191.     elsif string =~ "SEの演奏"
  1192.       @step = "play_se"
  1193.     else
  1194.       @step = "finish"
  1195.     end
  1196.   end
  1197.   #--------------------------------------------------------------------------
  1198.   # ● フレーム更新 (次のアクションへ)
  1199.   #--------------------------------------------------------------------------
  1200.   def update_next
  1201.     @action = @battle_actions.shift
  1202.     @step = get_step
  1203.   end
  1204.   #--------------------------------------------------------------------------
  1205.   # ● フレーム更新 (動作取得)
  1206.   #--------------------------------------------------------------------------
  1207.   def update_setup
  1208.     # アクションの取得
  1209.     self.get_actions
  1210.     @action = @battle_actions.shift
  1211.     @step = get_step
  1212.   end
  1213.   #--------------------------------------------------------------------------
  1214.   # ● フレーム更新 (移動取得)
  1215.   #--------------------------------------------------------------------------
  1216.   def update_moving_setup
  1217.     # 移動アクションの取得
  1218.     self.get_move_action
  1219.     # 移動目標の設定
  1220.     self.move_setup
  1221.     @step = "moving"
  1222.   end
  1223.   #--------------------------------------------------------------------------
  1224.   # ● フレーム更新 (移動)
  1225.   #--------------------------------------------------------------------------
  1226.   def update_moving
  1227.     # 移動
  1228.     self.move
  1229.     self.condition = @battler_condition
  1230.     # 移動完了したら次のステップへ
  1231.     if move_end?
  1232.       @wait_count = 2
  1233.       @action = @battle_actions.shift
  1234.       @step = get_step
  1235.     end
  1236.   end
  1237.   #--------------------------------------------------------------------------
  1238.   # ● フレーム更新 (アニメ実行)
  1239.   #--------------------------------------------------------------------------
  1240.   def update_action
  1241.     con = @action.split(/#/)[1]
  1242.     # 右手・左手を分ける
  1243.     if DUAL_WEAPONS_ANIME.include?(con)
  1244.       if !@first_weapon and @second_weapon
  1245.         con = con + "_L"
  1246.       else
  1247.         con = con + "_R"
  1248.       end
  1249.     end
  1250.     # アニメ変更
  1251.     self.condition = con
  1252.     # ループか否か
  1253.     if !ANIME[@battler_condition][1]
  1254.       self.anime_on
  1255.     end
  1256.     @action = @battle_actions.shift
  1257.     @step = get_step
  1258.   end
  1259.   #--------------------------------------------------------------------------
  1260.   # ● フレーム更新 (遠距離アニメ)
  1261.   #--------------------------------------------------------------------------
  1262.   def update_flying
  1263.     # 目標の設定
  1264.     self.flying_setup
  1265.     # 遠距離アニメ終了
  1266.     if @flying_end
  1267.       self.flying_clear
  1268.       @action = @battle_actions.shift
  1269.       @step = get_step
  1270.     end
  1271.   end
  1272.   #--------------------------------------------------------------------------
  1273.   # ● フレーム更新 (アニメ変更)
  1274.   #--------------------------------------------------------------------------
  1275.   def update_change
  1276.     con = @action.split(/#/)[1]
  1277.     # 右手・左手を分ける
  1278.     if DUAL_WEAPONS_ANIME.include?(con)
  1279.       if !@first_weapon and @second_weapon
  1280.         con = con + "_L"
  1281.       else
  1282.         con = con + "_R"
  1283.       end
  1284.     end
  1285.     # アニメ変更
  1286.     self.condition = con
  1287.     # ループか否か
  1288.     if !ANIME[@battler_condition][1]
  1289.       self.anime_on
  1290.     end
  1291.     @action = @battle_actions.shift
  1292.     @step = get_step
  1293.   end
  1294.   #--------------------------------------------------------------------------
  1295.   # ● フレーム更新 (行動アニメ)
  1296.   #--------------------------------------------------------------------------
  1297.   def update_animation1
  1298.     @animation1_on = true
  1299.     # 行動アニメの後に行動を開始する
  1300.     if $scene.phase4_step == 3
  1301.       id = RTAB ? @anime1 : $scene.animation1_id
  1302.       animation = $data_animations[id]
  1303.       frame_max = animation != nil ? animation.frame_max : 0
  1304.       @wait_count2 = frame_max * 2
  1305.       return
  1306.     end
  1307.     @action = @battle_actions.shift
  1308.     @step = get_step
  1309.   end
  1310.   #--------------------------------------------------------------------------
  1311.   # ● フレーム更新 (対象アニメ)
  1312.   #--------------------------------------------------------------------------
  1313.   def update_animation2
  1314.     @animation2_on = true
  1315.     # 行動アニメの後に行動を開始する
  1316.     if $scene.phase4_step == 4
  1317.       id = RTAB ? @anime2 : $scene.animation2_id
  1318.       animation = $data_animations[id]
  1319.       frame_max = animation != nil ? animation.frame_max : 0
  1320.       @wait_count2 = frame_max * 2
  1321.       return
  1322.     end
  1323.     @action = @battle_actions.shift
  1324.     @step = get_step
  1325.   end
  1326.   #--------------------------------------------------------------------------
  1327.   # ● フレーム更新 (ウエイト)
  1328.   #--------------------------------------------------------------------------
  1329.   def update_wait
  1330.     @wait_count2 = @action.split(/#/)[1].to_i
  1331.     @action = @battle_actions.shift
  1332.     @step = get_step
  1333.   end
  1334.   #--------------------------------------------------------------------------
  1335.   # ● フレーム更新 (残像表示)
  1336.   #--------------------------------------------------------------------------
  1337.   def update_shadow_on
  1338.     @shadow = true
  1339.     @action = @battle_actions.shift
  1340.     @step = get_step
  1341.   end
  1342.   #--------------------------------------------------------------------------
  1343.   # ● フレーム更新 (残像消去)
  1344.   #--------------------------------------------------------------------------
  1345.   def update_shadow_off
  1346.     @shadow = false
  1347.     @action = @battle_actions.shift
  1348.     @step = get_step
  1349.   end
  1350.   #--------------------------------------------------------------------------
  1351.   # ● フレーム更新 (左右反転)
  1352.   #--------------------------------------------------------------------------
  1353.   def update_reverse
  1354.     @reverse = @reverse ? false : true
  1355.     @action = @battle_actions.shift
  1356.     @step = get_step
  1357.   end
  1358.   #--------------------------------------------------------------------------
  1359.   # ● フレーム更新 (閃きアニメ)
  1360.   #--------------------------------------------------------------------------
  1361.   def update_flash
  1362.     # 閃きアニメの後に行動を開始する
  1363.     if @flash_flag["normal"]
  1364.       @wait_count = $scene.flash_duration
  1365.       @flash_flag["normal"] = false
  1366.       return
  1367.     end
  1368.     @action = @battle_actions.shift
  1369.     @step = get_step
  1370.   end
  1371.   #--------------------------------------------------------------------------
  1372.   # ● フレーム更新 (SEの演奏)
  1373.   #--------------------------------------------------------------------------
  1374.   def update_play_se
  1375.     data = @action.split(/#/)[1]
  1376.     data = data.split(/,/)
  1377.     # SE を演奏
  1378.     Audio.se_play("Audio/SE/" + data[0], data[1].to_i, data[2].to_i)
  1379.     @action = @battle_actions.shift
  1380.     @step = get_step
  1381.   end
  1382.   #--------------------------------------------------------------------------
  1383.   # ● フレーム更新 (アクターアニメ固定)
  1384.   #--------------------------------------------------------------------------
  1385.   def update_freeze
  1386.     con = @action.split(/#/)[1]
  1387.     # 右手・左手を分ける
  1388.     if DUAL_WEAPONS_ANIME.include?(con)
  1389.       if !@first_weapon and @second_weapon
  1390.         con = con + "_L"
  1391.       else
  1392.         con = con + "_R"
  1393.       end
  1394.     end
  1395.     # アニメ変更
  1396.     self.condition = con
  1397.     @pattern = @action.split(/#/)[2].to_i
  1398.     @pattern_freeze = true
  1399.     @condition_freeze = true
  1400.     @action = @battle_actions.shift
  1401.     @step = get_step
  1402.   end
  1403.   #--------------------------------------------------------------------------
  1404.   # ● フレーム更新 (アクターアニメ固定解除)
  1405.   #--------------------------------------------------------------------------
  1406.   def update_freeze_lifting
  1407.     @pattern_freeze = false
  1408.     @condition_freeze = false
  1409.     @action = @battle_actions.shift
  1410.     @step = get_step
  1411.   end
  1412.   #--------------------------------------------------------------------------
  1413.   # ● フレーム更新 (アニメーションの表示)
  1414.   #--------------------------------------------------------------------------
  1415.   def update_animation_start
  1416.     data = @action.split(/#/)[1]
  1417.     data = data.split(/,/)
  1418.     target = data[0]
  1419.     animation_id = data[1].to_i
  1420.     if RTAB
  1421.       case target
  1422.       when "self"
  1423.         @animation.push([animation_id,true])
  1424.       when "target"
  1425.         for tar in @target
  1426.           tar.animation.push([animation_id, true])
  1427.         end
  1428.       end
  1429.     else
  1430.       case target
  1431.       when "self"
  1432.         @animation_id = animation_id
  1433.         @animation_hit = true
  1434.       when "target"
  1435.         for tar in $scene.target_battlers
  1436.           tar.animation_id = animation_id
  1437.           tar.animation_hit = true
  1438.         end
  1439.       end
  1440.     end
  1441.     @action = @battle_actions.shift
  1442.     @step = get_step
  1443.   end
  1444.   #--------------------------------------------------------------------------
  1445.   # ● フレーム更新 (技能)
  1446.   #--------------------------------------------------------------------------
  1447.   def update_skill_start
  1448.     target = @action.split(/#/)[1]
  1449.     animation_id = $rt_animation_id.shift
  1450.     if $rt_hits > 0
  1451.       $rt_hit += 1
  1452.       $scene.target_battlers[0].hit_pop = true
  1453.       case target
  1454.       when "self"
  1455.         @animation_id = animation_id
  1456.         @animation_hit = true
  1457.       when "target"
  1458.         for tar in $scene.target_battlers
  1459.           tar.animation_id = animation_id
  1460.           tar.animation_hit = true
  1461.           @wait_count = $data_animations[animation_id].frame_max * 2 + 12
  1462.           tar.damage = $rt_damage[tar].pop
  1463.           tar.damagetemp_pop = true
  1464.         end
  1465.       end
  1466.       $rt_hits -= 1
  1467.     end
  1468.     return if $rt_hits > 0
  1469.     @action = @battle_actions.shift
  1470.     @step = get_step
  1471.   end
  1472.   #--------------------------------------------------------------------------
  1473.   # ● フレーム更新 (動作終了)
  1474.   #--------------------------------------------------------------------------
  1475.   def update_finish
  1476.     # 動作終了
  1477.     @battler_action = false
  1478.     @step = "setup"
  1479.   end
  1480.   #--------------------------------------------------------------------------
  1481.   # ● バトラーの状態 変更(バトラーグラフィックのタイプ)
  1482.   #--------------------------------------------------------------------------
  1483.   def condition=(condition)
  1484.     return if @condition_freeze
  1485.     @battler_condition = condition
  1486.     @wait_count = ANIME[condition][2]
  1487.   end
  1488.   #--------------------------------------------------------------------------
  1489.   # ● バトラーの状態(バトラーグラフィックのタイプ)
  1490.   #--------------------------------------------------------------------------
  1491.   def condition
  1492.     return @battler_condition
  1493.   end
  1494.   #--------------------------------------------------------------------------
  1495.   # ● フレーム更新
  1496.   #--------------------------------------------------------------------------
  1497.   def update
  1498.     # ウェイト中の場合
  1499.     if @wait_count > 0
  1500.       return
  1501.     end
  1502.     # パターン更新
  1503.     self.char_animation
  1504.     # ウェイト中の場合
  1505.     if @wait_count2 > 0
  1506.       return
  1507.     end
  1508.  
  1509.     # 行動アニメーション
  1510.     if @battler_action
  1511.       method("update_" + @step).call
  1512.       return
  1513.     end
  1514.  
  1515.     # データ初期化
  1516.     @animation1_on = false
  1517.     @animation2_on = false
  1518.     @action = nil
  1519.     @battle_actions = []
  1520.     @move_wait = 0
  1521.     @move_distance = nil
  1522.     @flying_wait = 0
  1523.     @flying_distance = nil
  1524.     @flash = false
  1525.  
  1526.     # RTAB対応
  1527.     # 通常・待機
  1528.     return self.condition = NORMAL
  1529.   end
  1530.   #--------------------------------------------------------------------------
  1531.   # ● アクションの取得
  1532.   #--------------------------------------------------------------------------
  1533.   def get_actions
  1534.     skill = $data_skills[self.current_action.skill_id]
  1535.     item = $data_items[self.current_action.item_id]
  1536.     kind = self.current_action.kind
  1537.     # 動作取得
  1538.     @battle_actions = []
  1539.     # スキル
  1540.     if skill != nil && kind == 1
  1541.       @battle_actions = skill.battle_actions.dup
  1542.       @flying_anime = skill.flying_anime
  1543.     # アイテム
  1544.     elsif item != nil && kind == 2
  1545.       @battle_actions = item.battle_actions.dup
  1546.       @flying_anime = item.flying_anime
  1547.     # 左手攻撃
  1548.     elsif !@first_weapon and @second_weapon and (self.is_a?(Game_Actor) or (!self.is_a?(Game_Actor) and !self.nce))
  1549.  
  1550.       @battle_actions = self.battle_actions2.dup
  1551.       @flying_anime = self.flying_anime2
  1552.     # 右手攻撃
  1553.     elsif self.current_action.basic == 0 and
  1554.       (self.is_a?(Game_Actor) or (!self.is_a?(Game_Actor) and !self.nce)) and self.current_action.kind == 0
  1555.       @battle_actions = self.battle_actions1.dup
  1556.       @flying_anime = self.flying_anime1
  1557.     # 通常攻撃
  1558.     elsif self.current_action.basic == 0 and self.current_action.kind == 0
  1559.       # 这里啊~~ =。=b
  1560.       if !self.is_a?(Game_Actor) and !self.nce
  1561.         @battle_actions = self.battle_actions1.dup
  1562.       else
  1563.         @battle_actions = BattleActions::Actions["エネミー攻撃"].dup
  1564.       end
  1565.       @flying_anime = self.flying_anime
  1566.     else
  1567.       @battle_actions = ["終了"]
  1568.       @flying_anime = [0,0,false,false]
  1569.     end
  1570.   end
  1571.   #--------------------------------------------------------------------------
  1572.   # ● ループしないアニメのセット
  1573.   #--------------------------------------------------------------------------
  1574.   def anime_on
  1575.     @pattern = 0
  1576.     @pattern_log = true
  1577.     return
  1578.   end
  1579.   #--------------------------------------------------------------------------
  1580.   # ● パターン更新
  1581.   #--------------------------------------------------------------------------
  1582.   def char_animation
  1583.     # パタン固定の場合もどる
  1584.     return if @pattern_freeze
  1585.     # ループしないアニメの場合 1234 で止まる
  1586.     if !ANIME[@battler_condition][1] && @pattern == 3
  1587.       return
  1588.     end
  1589.     # アニメさせない場合 1 で止まる
  1590.     if ANIME[@battler_condition][4]
  1591.       @pattern = 0
  1592.       return
  1593.     end
  1594.     @pattern = (@pattern + 1) % 4
  1595.   end
  1596.   #--------------------------------------------------------------------------
  1597.   # ● アニメタイプ
  1598.   #--------------------------------------------------------------------------
  1599.   def anime_type
  1600.     return ANIME[self.condition] != nil ? ANIME[self.condition][0] : 0
  1601.   end
  1602. end
  1603. #==============================================================================
  1604. # ■ Game_Actor
  1605. #==============================================================================
  1606. class Game_Actor < Game_Battler
  1607.   include Side_view
  1608.   #--------------------------------------------------------------------------
  1609.   # ● セットアップ
  1610.   #--------------------------------------------------------------------------
  1611.   alias side_view_setup setup
  1612.   def setup(actor_id)
  1613.     side_view_setup(actor_id)
  1614.     start_battle
  1615.   end
  1616.   #--------------------------------------------------------------------------
  1617.   # ● 二刀武器のID取得 ※エラー回避用
  1618.   #--------------------------------------------------------------------------
  1619.   def weapon2_id
  1620.     return @weapon2_id != nil ? @weapon2_id : 0
  1621.   end
  1622.   #--------------------------------------------------------------------------
  1623.   # ● X方向 ポジション 取得 (陣形スクリプト拡張用)
  1624.   #--------------------------------------------------------------------------
  1625.   def position
  1626.     return $data_classes[@class_id].position
  1627.   end
  1628.   #--------------------------------------------------------------------------
  1629.   # ● Y方向 ポジション 取得 (陣形スクリプト拡張用)
  1630.   #--------------------------------------------------------------------------
  1631.   def position2
  1632.     return self.index
  1633.   end
  1634.   #--------------------------------------------------------------------------
  1635.   # ● 武器アニメタイプ
  1636.   #--------------------------------------------------------------------------
  1637.   def weapon_anime_type(type)
  1638.     file_name  = weapon_anime_type0(type)
  1639.     visible   = weapon_anime_type1(type)
  1640.     z         = weapon_anime_type2(type)
  1641.     return [file_name,visible,z]
  1642.   end
  1643.   # 武器アイコン取得
  1644.   def weapon_anime_type0(type)
  1645.     type = ANIME[type][5]
  1646.     return weapon_anime1 if type == "右手"
  1647.     return weapon_anime2 if type == "左手"
  1648.     return nil
  1649.   end
  1650.   # 表示・非表示の取得
  1651.   def weapon_anime_type1(type)
  1652.     return ANIME[type][3]
  1653.   end
  1654.   # バトラーより上に表示するかどうか
  1655.   def weapon_anime_type2(type)
  1656.     type = ANIME[type][5]
  1657.     return true if type == "左手"
  1658.     return false
  1659.   end
  1660.   #--------------------------------------------------------------------------
  1661.   # ● バトル画面 X 座標の取得(カメラ補正無し)
  1662.   #--------------------------------------------------------------------------
  1663.   def true_x
  1664.     return PARTY_X + position * FORMATION_X + @ox
  1665.   end
  1666.   #--------------------------------------------------------------------------
  1667.   # ● バトル画面 Y 座標の取得(カメラ補正無し)
  1668.   #--------------------------------------------------------------------------
  1669.   def true_y
  1670.     # パーティ内の並び順から Y 座標を計算して返す
  1671.     if self.index != nil
  1672.       y = position2 * FORMATION_Y + PARTY_Y + @oy - @height / 2
  1673.       return y
  1674.     else
  1675.       return 0
  1676.     end
  1677.   end
  1678.   #--------------------------------------------------------------------------
  1679.   # ● バトル画面 X 座標の取得
  1680.   #--------------------------------------------------------------------------
  1681.   def screen_x(true_x = self.true_x)
  1682.     return 320 + (true_x - 320) * @real_zoom + @real_x
  1683.   end
  1684.   #--------------------------------------------------------------------------
  1685.   # ● バトル画面 Y 座標の取得
  1686.   #--------------------------------------------------------------------------
  1687.   def screen_y(true_y = self.true_y)
  1688.     return true_y * @real_zoom + @real_y
  1689.   end
  1690.   #--------------------------------------------------------------------------
  1691.   # ● バトル画面 Z 座標の取得
  1692.   #--------------------------------------------------------------------------
  1693.   def screen_z
  1694.     return screen_y + 1000
  1695.   end
  1696.   #--------------------------------------------------------------------------
  1697.   # ● バトル画面 X 座標の取得(移動などしていない場合)
  1698.   #--------------------------------------------------------------------------
  1699.   def base_x
  1700.     return 320 + (true_x - @ox - 320) * @real_zoom + @real_x
  1701.   end
  1702.   #--------------------------------------------------------------------------
  1703.   # ● バトル画面 Y 座標の取得
  1704.   #--------------------------------------------------------------------------
  1705.   def base_y
  1706.     return (true_y - @oy) * @real_zoom + @real_y
  1707.   end
  1708.   #--------------------------------------------------------------------------
  1709.   # ● バトル画面 拡大率の取得
  1710.   #--------------------------------------------------------------------------
  1711.   def zoom
  1712.     return ($scene.zoom_rate[1] - $scene.zoom_rate[0]) *
  1713.                           (true_x + @fly) / 480 + $scene.zoom_rate[0]
  1714.   end
  1715.   #--------------------------------------------------------------------------
  1716.   # ● 攻撃用、バトル画面 X 座標の取得
  1717.   #--------------------------------------------------------------------------
  1718.   def attack_x(z)
  1719.     return (320 - true_x) * z * 0.75
  1720.   end
  1721.   #--------------------------------------------------------------------------
  1722.   # ● 攻撃用、バトル画面 Y 座標の取得
  1723.   #--------------------------------------------------------------------------
  1724.   def attack_y(z)
  1725.     return (160 - (true_y + fly / 4) * z + @height * zoom * z / 2) * 0.75
  1726.   end
  1727.   #--------------------------------------------------------------------------
  1728.   # ● 閃き待ち時間
  1729.   #--------------------------------------------------------------------------
  1730.   def flash_duration
  1731.     return $scene.flash_duration
  1732.   end
  1733.   #--------------------------------------------------------------------------
  1734.   # ● アニメーション取得
  1735.   #--------------------------------------------------------------------------
  1736.   def battle_actions1
  1737.     weapon = $data_weapons[@weapon_id]
  1738.     return weapon != nil ? weapon.battle_actions : BattleActions::Actions["通常攻撃"]
  1739.   end
  1740.   #--------------------------------------------------------------------------
  1741.   # ● アニメーション取得
  1742.   #--------------------------------------------------------------------------
  1743.   def battle_actions2
  1744.     weapon = $data_weapons[@weapon2_id]
  1745.     return weapon != nil ? weapon.battle_actions : BattleActions::Actions["通常攻撃"]
  1746.   end
  1747.   #--------------------------------------------------------------------------
  1748.   # ● 武器アニメーション取得
  1749.   #--------------------------------------------------------------------------
  1750.   def weapon_anime1
  1751.     weapon = $data_weapons[@weapon_id]
  1752.     return weapon != nil ? weapon.icon_name : ""
  1753.   end
  1754.   #--------------------------------------------------------------------------
  1755.   # ● 武器アニメーション取得
  1756.   #--------------------------------------------------------------------------
  1757.   def weapon_anime2
  1758.     weapon = $data_weapons[@weapon2_id]
  1759.     return weapon != nil ? weapon.icon_name : ""
  1760.   end
  1761.   #--------------------------------------------------------------------------
  1762.   # ● 遠距離アニメーション取得
  1763.   #--------------------------------------------------------------------------
  1764.   def flying_anime1
  1765.     weapon = $data_weapons[@weapon_id]
  1766.     return weapon != nil ? weapon.flying_anime : [0,0,false,false]
  1767.   end
  1768.   #--------------------------------------------------------------------------
  1769.   # ● 遠距離アニメーション取得
  1770.   #--------------------------------------------------------------------------
  1771.   def flying_anime2
  1772.     weapon = $data_weapons[@weapon2_id]
  1773.     return weapon != nil ? weapon.flying_anime : [0,0,false,false]
  1774.   end
  1775.   #--------------------------------------------------------------------------
  1776.   # ● 移動目標座標の計算
  1777.   #--------------------------------------------------------------------------
  1778.   def move_setup
  1779.     if RTAB
  1780.       targets = @target
  1781.     else
  1782.       targets = $scene.target_battlers
  1783.     end
  1784.     case @move_action[0]
  1785.     when "self" # 自分
  1786.       @target_x = self.base_x
  1787.       @target_y = self.base_y
  1788.     when "target_near" # 一番近くのターゲット
  1789.       targets.sort!{|a,b| a.screen_x<=>b.screen_x }
  1790.       targets.reverse!
  1791.       if targets != []
  1792.         @target_x = targets[0].screen_x
  1793.         @target_y = targets[0].screen_y
  1794.       else
  1795.         @target_x = self.base_x
  1796.         @target_y = self.base_y
  1797.       end
  1798.     when "target_far" # 一番遠くのターゲット
  1799.       targets.sort!{|a,b| a.screen_x<=>b.screen_x }
  1800.       if targets != []
  1801.         @target_x = targets[0].screen_x
  1802.         @target_y = targets[0].screen_y
  1803.       else
  1804.         @target_x = self.base_x
  1805.         @target_y = self.base_y
  1806.       end
  1807.     when "target" # ターゲット中央
  1808.       @target_x = 0
  1809.       @target_y = 0
  1810.       for t in targets
  1811.         @target_x += t.screen_x
  1812.         @target_y += t.screen_y
  1813.       end
  1814.       if targets != []
  1815.         @target_x /= targets.size
  1816.         @target_y /= targets.size
  1817.       end
  1818.     when "troop" # "トループ中央"
  1819.       @target_x = 0
  1820.       @target_y = 0
  1821.       for t in $game_troop.enemies
  1822.         @target_x += t.screen_x
  1823.         @target_y += t.screen_y
  1824.       end
  1825.       if $game_troop.enemies != []
  1826.         @target_x /= $game_troop.enemies.size
  1827.         @target_y /= $game_troop.enemies.size
  1828.       end
  1829.     when "party" # "パーティ中央"
  1830.       @target_x = 0
  1831.       @target_y = 0
  1832.       for t in $game_party.actors
  1833.         @target_x += t.screen_x
  1834.         @target_y += t.screen_y
  1835.       end
  1836.       if $game_party.actors != []
  1837.         @target_x /= $game_party.actors.size
  1838.         @target_y /= $game_party.actors.size
  1839.       end
  1840.     when "screen" # "画面"
  1841.       @target_x = self.base_x
  1842.       @target_y = self.base_y
  1843.     end
  1844.     # 補正
  1845.     @target_x += @move_action[1] - self.base_x
  1846.     @target_y += @move_action[2] - self.base_y
  1847.     # 移動目標の座標をセット
  1848.     @move_coordinates = [@target_x.to_i,@target_y.to_i,@move_coordinates[0],@move_coordinates[1]]
  1849.     # 距離の計算(ウエイトの設定)
  1850.     @move_wait     = (@move_coordinates[2] - @move_coordinates[0]).abs +
  1851.                      (@move_coordinates[3] - @move_coordinates[1]).abs
  1852.   end
  1853. end
  1854. #==============================================================================
  1855. # ■ Game_Enemy
  1856. #==============================================================================
  1857. class Game_Enemy < Game_Battler
  1858.   attr_reader   :nce
  1859.   #--------------------------------------------------------------------------
  1860.   # ● セットアップ
  1861.   #--------------------------------------------------------------------------
  1862.   alias side_view_initialize initialize
  1863.   def initialize(troop_id, member_index)
  1864.     side_view_initialize(troop_id, member_index)
  1865.     start_battle
  1866.     @nce = NOT_CHARACTER_EMEMY.include? @enemy_id
  1867.     @weapon_id  = EMEMY_WEAPO[@enemy_id] != nil ? EMEMY_WEAPO[@enemy_id] : 0
  1868.     @weapon_id2  = EMEMY_WEAPO2[@enemy_id] != nil ? EMEMY_WEAPO2[@enemy_id] : 0
  1869.   end
  1870.   def character_name
  1871.     return self.battler_name
  1872.   end
  1873.   def character_hue
  1874.     return self.battler_hue
  1875.   end
  1876.   #--------------------------------------------------------------------------
  1877.   # ● 移動
  1878.   #--------------------------------------------------------------------------
  1879.   def move
  1880.     # 距離の計算
  1881.     @move_distance = (@move_coordinates[2] - @move_coordinates[0]).abs +
  1882.                      (@move_coordinates[3] - @move_coordinates[1]).abs
  1883.     if @move_distance > 0
  1884.       return if @ox == @move_coordinates[0] and @oy == @move_coordinates[1]
  1885.       array = @move_coordinates
  1886.       # ジャンプ補正値の計算
  1887.       if @move_distance - @move_wait > @move_distance / 2
  1888.         jump = (@move_action[4] * @move_wait / @move_distance.to_f)**2        
  1889.       else
  1890.         jump = (@move_action[4] * (@move_distance - @move_wait) / @move_distance.to_f)**2
  1891.       end
  1892.       jump = @move_action[4] > 0 ? -jump : jump
  1893.       #jump = 0 if @weapon_id + @weapon_id2 == 0 #去除敌人判断跳跃
  1894.       @ox = (array[2] + 1.0 * (array[0] - array[2]) * (@move_distance - @move_wait) / @move_distance.to_f).to_i
  1895.       @oy = (array[3] + 1.0 * (array[1] - array[3]) * (@move_distance - @move_wait) / @move_distance.to_f + jump).to_i
  1896.       # ウエイト
  1897.       @move_wait -= @move_action[3]
  1898.       @move_wait = [@move_wait,0].max
  1899.     end
  1900.   end
  1901.   #--------------------------------------------------------------------------
  1902.   # ● 武器アニメタイプ
  1903.   #--------------------------------------------------------------------------
  1904.   def weapon_anime_type(type)
  1905.     file_name  = weapon_anime_type0(type)
  1906.     visible   = weapon_anime_type1(type)
  1907.     z         = weapon_anime_type2(type)
  1908.     return [file_name,visible,z]
  1909.   end
  1910.   # 武器アイコン取得
  1911.   def weapon_anime_type0(type)
  1912.     type = ANIME[type][5]
  1913.     return weapon_anime1 if type == "右手"
  1914.     return weapon_anime2 if type == "左手"
  1915.     return nil
  1916.   end
  1917.   # 表示・非表示の取得
  1918.   def weapon_anime_type1(type)
  1919.     return ANIME[type][3]
  1920.   end
  1921.   # バトラーより上に表示するかどうか
  1922.   def weapon_anime_type2(type)
  1923.     type = ANIME[type][5]
  1924.     return true if type == "左手"
  1925.     return false
  1926.   end
  1927.  
  1928.   #--------------------------------------------------------------------------
  1929.   # ● 移動目標座標の計算
  1930.   #--------------------------------------------------------------------------
  1931.   def move_setup
  1932.     if RTAB
  1933.       targets = @target
  1934.     else
  1935.       targets = $scene.target_battlers
  1936.     end
  1937.     case @move_action[0]
  1938.     when "self" # 自分
  1939.       @target_x = self.base_x
  1940.       @target_y = self.base_y
  1941.     when "target_near" # 一番近くのターゲット
  1942.       targets.sort!{|a,b| a.screen_x<=>b.screen_x }
  1943.       if targets != []
  1944.         @target_x = targets[0].screen_x
  1945.         @target_y = targets[0].screen_y
  1946.       else
  1947.         @target_x = self.base_x
  1948.         @target_y = self.base_y
  1949.       end
  1950.     when "target_far" # 一番遠くのターゲット
  1951.       targets.sort!{|a,b| a.screen_x<=>b.screen_x }
  1952.       targets.reverse!
  1953.       if targets != []
  1954.         @target_x = targets[0].screen_x
  1955.         @target_y = targets[0].screen_y
  1956.       else
  1957.         @target_x = self.base_x
  1958.         @target_y = self.base_y
  1959.       end
  1960.     when "target" # ターゲット中央
  1961.       @target_x = 0
  1962.       @target_y = 0
  1963.       for t in targets
  1964.         @target_x += t.screen_x
  1965.         @target_y += t.screen_y
  1966.       end
  1967.       if targets != []
  1968.         @target_x /= targets.size
  1969.         @target_y /= targets.size
  1970.       end
  1971.     when  "party" # "トループ中央"
  1972.       @target_x = 0
  1973.       @target_y = 0
  1974.       for t in $game_troop.enemies
  1975.         @target_x += t.screen_x
  1976.         @target_y += t.screen_y
  1977.       end
  1978.       if $game_troop.enemies != []
  1979.         @target_x /= $game_troop.enemies.size
  1980.         @target_y /= $game_troop.enemies.size
  1981.       end
  1982.     when "troop" # "パーティ中央"
  1983.       @target_x = 0
  1984.       @target_y = 0
  1985.       for t in $game_party.actors
  1986.         @target_x += t.screen_x
  1987.         @target_y += t.screen_y
  1988.       end
  1989.       if $game_party.actors != []
  1990.         @target_x /= $game_party.actors.size
  1991.         @target_y /= $game_party.actors.size
  1992.       end
  1993.     when "screen" # "画面"
  1994.       @target_x = self.base_x
  1995.       @target_y = self.base_y
  1996.     end
  1997.     # 補正
  1998.     @target_x -= @move_action[1] + self.base_x
  1999.     @target_y -= @move_action[2] + self.base_y
  2000.     # 移動目標の座標をセット
  2001.     @move_coordinates = [@target_x.to_i,@target_y.to_i,@move_coordinates[0],@move_coordinates[1]]
  2002.     # 距離の計算(ウエイトの設定)
  2003.     @move_wait     = (@move_coordinates[2] - @move_coordinates[0]).abs +
  2004.                      (@move_coordinates[3] - @move_coordinates[1]).abs
  2005.   end
  2006.   if RTAB
  2007.   alias original_x true_x
  2008.   alias original_y true_y
  2009.   else
  2010.   alias original_x screen_x
  2011.   alias original_y screen_y
  2012.   end
  2013.   #--------------------------------------------------------------------------
  2014.   # ● バトル画面 X 座標の取得(カメラ補正無し)
  2015.   #--------------------------------------------------------------------------
  2016.   def true_x
  2017.     return original_x + @ox
  2018.   end
  2019.   #--------------------------------------------------------------------------
  2020.   # ● バトル画面 Y 座標の取得(カメラ補正無し)
  2021.   #--------------------------------------------------------------------------
  2022.   def true_y
  2023.     return original_y - @height / 2 + @oy
  2024.   end
  2025.   #--------------------------------------------------------------------------
  2026.   # ● バトル画面 X 座標の取得
  2027.   #--------------------------------------------------------------------------
  2028.   def screen_x(true_x = self.true_x)
  2029.     return true_x * @real_zoom + @real_x
  2030.   end
  2031.   #--------------------------------------------------------------------------
  2032.   # ● バトル画面 Y 座標の取得
  2033.   #--------------------------------------------------------------------------
  2034.   def screen_y(true_y = self.true_y)
  2035.     return true_y * @real_zoom + @real_y
  2036.   end
  2037.   #--------------------------------------------------------------------------
  2038.   # ● バトル画面 X 座標の取得(移動などしていない場合)
  2039.   #--------------------------------------------------------------------------
  2040.   def base_x(true_x = self.true_x)
  2041.     return (true_x - @ox) * @real_zoom + @real_x
  2042.   end
  2043.   #--------------------------------------------------------------------------
  2044.   # ● バトル画面 Y 座標の取得(移動などしていない場合)
  2045.   #--------------------------------------------------------------------------
  2046.   # ● アニメーション取得
  2047.   #--------------------------------------------------------------------------
  2048.   def battle_actions1
  2049.     weapon = $data_weapons[@weapon_id]
  2050.     return weapon != nil ? weapon.battle_actions : BattleActions::Actions["通常攻撃"]
  2051.   end
  2052.   #--------------------------------------------------------------------------
  2053.   # ● アニメーション取得
  2054.   #--------------------------------------------------------------------------
  2055.   def battle_actions2
  2056.     weapon = $data_weapons[@weapon2_id]
  2057.     return weapon != nil ? weapon.battle_actions : BattleActions::Actions["通常攻撃"]
  2058.   end
  2059.   #--------------------------------------------------------------------------
  2060.   # ● 武器アニメーション取得
  2061.   #--------------------------------------------------------------------------
  2062.   def weapon_anime1
  2063.     weapon = $data_weapons[@weapon_id]
  2064.     return weapon != nil ? weapon.icon_name : ""
  2065.   end
  2066.   #--------------------------------------------------------------------------
  2067.   # ● 武器アニメーション取得
  2068.   #--------------------------------------------------------------------------
  2069.   def weapon_anime2
  2070.     weapon = $data_weapons[@weapon2_id]
  2071.     return weapon != nil ? weapon.icon_name : ""
  2072.   end
  2073.   #--------------------------------------------------------------------------
  2074.   # ● 遠距離アニメーション取得
  2075.   #--------------------------------------------------------------------------
  2076.   def flying_anime1
  2077.     weapon = $data_weapons[@weapon_id]
  2078.     return weapon != nil ? weapon.flying_anime : [0,0,false,false]
  2079.   end
  2080.   #--------------------------------------------------------------------------
  2081.   # ● 遠距離アニメーション取得
  2082.   #--------------------------------------------------------------------------
  2083.   def flying_anime2
  2084.     weapon = $data_weapons[@weapon2_id]
  2085.     return weapon != nil ? weapon.flying_anime : [0,0,false,false]
  2086.   end
  2087.   def base_y(true_y = self.true_y)
  2088.     return (true_y - @oy) * @real_zoom + @real_y
  2089.   end
  2090.   #--------------------------------------------------------------------------
  2091.  
  2092.  
  2093.  
  2094.   #--------------------------------------------------------------------------
  2095.   # ● アニメーション取得
  2096.   #--------------------------------------------------------------------------
  2097.   def battle_actions1
  2098.     weapon = $data_weapons[@weapon_id]
  2099.     return weapon != nil ? weapon.battle_actions : BattleActions::Actions["通常攻撃"]
  2100.   end
  2101.   #--------------------------------------------------------------------------
  2102.   # ● アニメーション取得
  2103.   #--------------------------------------------------------------------------
  2104.   def battle_actions2
  2105.     weapon = $data_weapons[@weapon2_id]
  2106.     return weapon != nil ? weapon.battle_actions : BattleActions::Actions["通常攻撃"]
  2107.   end
  2108.   #--------------------------------------------------------------------------
  2109.   # ● 武器アニメーション取得
  2110.   #--------------------------------------------------------------------------
  2111.   def weapon_anime1
  2112.     weapon = $data_weapons[@weapon_id]
  2113.     return weapon != nil ? weapon.icon_name : ""
  2114.   end
  2115.   #--------------------------------------------------------------------------
  2116.   # ● 武器アニメーション取得
  2117.   #--------------------------------------------------------------------------
  2118.   def weapon_anime2
  2119.     weapon = $data_weapons[@weapon2_id]
  2120.     return weapon != nil ? weapon.icon_name : ""
  2121.   end
  2122.   #--------------------------------------------------------------------------
  2123.   # ● 遠距離アニメーション取得
  2124.   #--------------------------------------------------------------------------
  2125.   def flying_anime1
  2126.     weapon = $data_weapons[@weapon_id]
  2127.     return weapon != nil ? weapon.flying_anime : [0,0,false,false]
  2128.   end
  2129.   #--------------------------------------------------------------------------
  2130.   # ● 遠距離アニメーション取得
  2131.   #--------------------------------------------------------------------------
  2132.   def flying_anime2
  2133.     weapon = $data_weapons[@weapon2_id]
  2134.     return weapon != nil ? weapon.flying_anime : [0,0,false,false]
  2135.   end  
  2136. end
  2137. #==============================================================================
  2138. # ■ Game_Party
  2139. #==============================================================================
  2140. class Game_Party
  2141.   #--------------------------------------------------------------------------
  2142.   # ● アクターを加える
  2143.   #     actor_id : アクター ID
  2144.   #--------------------------------------------------------------------------
  2145.   alias side_view_add_actor add_actor
  2146.   def add_actor(actor_id)
  2147.     # アクターを取得
  2148.     actor = $game_actors[actor_id]
  2149.     # サイドビューデータの初期化
  2150.     actor.start_battle
  2151.     # 戻す
  2152.     side_view_add_actor(actor_id)
  2153.   end
  2154. end
  2155.  
  2156. class Spriteset_Battle
  2157.   include Side_view
  2158.   #--------------------------------------------------------------------------
  2159.   # ● オブジェクト初期化
  2160.   #--------------------------------------------------------------------------
  2161.   alias side_veiw_initialize initialize
  2162.   def initialize
  2163.     side_veiw_initialize
  2164.     # アクタースプライトを解放
  2165.     for sprite in @actor_sprites
  2166.       sprite.dispose
  2167.     end
  2168.     # アクタースプライトを作成
  2169.     @actor_sprites = []
  2170.     for i in 1..Party_max
  2171.       @actor_sprites.push(Sprite_Battler.new(@viewport1))
  2172.     end
  2173.     update
  2174.   end
  2175.   #--------------------------------------------------------------------------
  2176.   # ● 画面のスクロール
  2177.   #--------------------------------------------------------------------------
  2178.   if method_defined?("screen_scroll")
  2179.   alias side_view_screen_scroll screen_scroll
  2180.   def screen_scroll
  2181.     side_view_screen_scroll
  2182.     # アクターの位置補正
  2183.     for actor in $game_party.actors
  2184.       actor.real_x = @real_x
  2185.       actor.real_y = @real_y
  2186.       actor.real_zoom = @real_zoom
  2187.     end
  2188.   end
  2189.   end
  2190. end
  2191.  
  2192. class Sprite_Battler < RPG::Sprite
  2193.   include Side_view
  2194.   #--------------------------------------------------------------------------
  2195.   # ● オブジェクト初期化
  2196.   #     viewport : ビューポート
  2197.   #     battler  : バトラー (Game_Battler)
  2198.   #--------------------------------------------------------------------------
  2199.   def initialize(viewport, battler = nil)
  2200.     super(viewport)
  2201.     @battler = battler
  2202.     @battler_visible = false
  2203.     @weapon = Sprite_Weapon.new(viewport, battler)
  2204.     @flying = Sprite_Flying.new(viewport, battler)
  2205.     @shadow = []
  2206.     @fly = 0
  2207.     @fly_direction = 1
  2208.     @rand = rand(10)
  2209.     self.effect_clear
  2210.   end
  2211.   #--------------------------------------------------------------------------
  2212.   # ● 解放
  2213.   #--------------------------------------------------------------------------
  2214.   alias side_view_dispose dispose
  2215.   def dispose
  2216.     side_view_dispose
  2217.     @weapon.dispose
  2218.     @flying.dispose
  2219.     if @_target_sprite != nil
  2220.       @_target_sprite.bitmap.dispose
  2221.       @_target_sprite.dispose
  2222.       @_target_sprite = nil
  2223.     end
  2224.   end
  2225.   #--------------------------------------------------------------------------
  2226.   # ● フレーム更新
  2227.   #--------------------------------------------------------------------------
  2228.   def update
  2229.     super
  2230.     # バトラーが nil の場合
  2231.     if @battler == nil
  2232.       self.bitmap = nil
  2233.       @weapon.bitmap = nil
  2234.       loop_animation(nil)
  2235.       return
  2236.     end
  2237.     # バトラー更新
  2238.     @battler.update
  2239.     # バトラーアニメのデータ取得
  2240.     @anime_type = @battler.anime_type
  2241.     # ファイル名か色相が現在のものと異なる場合
  2242.     if @battler.is_a?(Game_Actor) or (!@battler.is_a?(Game_Actor) and !@battler.nce)
  2243.       change = (@battler.character_name != @battler_name or @battler.character_hue != @battler_hue)
  2244.     elsif @battler.is_a?(Game_Enemy)
  2245.       change = (@battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue)
  2246.     else
  2247.       return
  2248.     end
  2249.     if change
  2250.       # ビットマップを取得、設定
  2251.       if @battler.is_a?(Game_Actor) or (!@battler.is_a?(Game_Actor) and !@battler.nce)
  2252.         @battler_name = @battler.character_name
  2253.         @battler_hue = @battler.character_hue
  2254.         self.bitmap = RPG::Cache.character(@battler_name, @battler_hue)
  2255.         @width = bitmap.width / 4
  2256.         @height = bitmap.height / 4
  2257.       else
  2258.         @battler_name = @battler.battler_name
  2259.         @battler_hue = @battler.battler_hue
  2260.         self.bitmap = RPG::Cache.battler(@battler_name, @battler_hue)
  2261.         @width = bitmap.width
  2262.         @height = bitmap.height
  2263.       end
  2264.       self.ox = @width / 2
  2265.       self.oy = @height / 2
  2266.       @battler.height = @height
  2267.       @flag = true
  2268.       # 戦闘不能または隠れ状態なら不透明度を 0 にする
  2269.       if @battler.dead? or @battler.hidden
  2270.         self.opacity = 0
  2271.       end
  2272.     end
  2273.     if (@battler.is_a?(Game_Actor) and
  2274.       (@battler.anime_type != @anime_type or @battler.pattern != @pattern or @flag)) or
  2275.       (!@battler.is_a?(Game_Actor) and !@battler.nce)
  2276.       # ビットマップを取得、設定
  2277.       @pattern = @battler.pattern
  2278.       self.ox = @width / 2
  2279.       self.oy = @height / 2
  2280.       @sx = @pattern * @width
  2281.       sy = @anime_type % 4 * @height
  2282.       x   = sy / (@height * 2) + 4
  2283.       if !@battler.is_a?(Game_Actor) and !@battler.nce and x == 4
  2284.         x = 6
  2285.       end    # here!!
  2286.       @sy = (x - 2) / 2 * @height
  2287.       self.src_rect.set(@sx, @sy, @width, @height)
  2288.       self.zoom_x = CHAR_ZOOM
  2289.       self.zoom_y = CHAR_ZOOM
  2290.       @battler.height = @height
  2291.       @flag = false
  2292.     end
  2293.     # 飛行
  2294.     update_fly
  2295.     # シェイク
  2296.     update_shake
  2297.     # 回転
  2298.     update_turning
  2299.     # 反転
  2300.     update_reverse   
  2301.     # 移動
  2302.     update_moving
  2303.     # 追加アニメ
  2304.     update_add_anime
  2305.     # エフェクト効果の適用
  2306.     update_effect
  2307.     # アニメーション ID が現在のものと異なる場合
  2308.     flag = RTAB ? true : @battler.damage == nil
  2309.     if flag and @battler.state_animation_id != @state_animation_id
  2310.       @state_animation_id = @battler.state_animation_id
  2311.       loop_animation($data_animations[@state_animation_id])
  2312.     end
  2313.     # シェイク
  2314.     if @battler.shake
  2315.       self.start_shake(5, 5, 5)
  2316.       @battler.shake = false
  2317.     end
  2318.     # 明滅
  2319.     if @battler.blink
  2320.       blink_on
  2321.     else
  2322.       blink_off
  2323.     end
  2324.     # 不可視の場合
  2325.     unless @battler_visible
  2326.       flag = RTAB ? (@battler.damage.size < 2 or @battler.damage_pop.size < 2) :
  2327.                     (@battler.damage == nil or @battler.damage_pop)
  2328.       # 出現
  2329.       if not @battler.hidden and not @battler.dead? and flag
  2330.         appear
  2331.         @battler_visible = true
  2332.       end
  2333.     end
  2334.     if RTAB
  2335.     # ダメージ
  2336.     for battler in @battler.damage_pop
  2337.       if battler[0].class == Array
  2338.         if battler[0][1] >= 0
  2339.           $scene.skill_se
  2340.         else
  2341.           $scene.levelup_se
  2342.         end
  2343.         damage(@battler.damage[battler[0]], false, 2)
  2344.       else
  2345.         damage(@battler.damage[battler[0]], @battler.critical[battler[0]])
  2346.       end
  2347.       if @battler.damage_sp.include?(battler[0])
  2348.         damage(@battler.damage_sp[battler[0]],
  2349.                 @battler.critical[battler[0]], 1)
  2350.         @battler.damage_sp.delete(battler[0])
  2351.       end
  2352.       @battler.damage_pop.delete(battler[0])
  2353.       @battler.damage.delete(battler[0])
  2354.       @battler.critical.delete(battler[0])
  2355.     end
  2356.     end
  2357.     # 可視の場合
  2358.     if @battler_visible
  2359.       # 武器アニメ
  2360.       @weapon.battler = @battler
  2361.       @weapon.update
  2362.       # 遠距離アニメ
  2363.       @flying.battler = @battler
  2364.       @flying.update
  2365.       # 逃走
  2366.       if @battler.hidden
  2367.         $game_system.se_play($data_system.escape_se)
  2368.         escape
  2369.         @battler_visible = false
  2370.       end
  2371.       # 白フラッシュ
  2372.       if @battler.white_flash
  2373.         whiten
  2374.         @battler.white_flash = false
  2375.       end
  2376.       if RTAB
  2377.         # アニメーション
  2378.         if !@battler.animation.empty?
  2379.           for animation in @battler.animation.reverse
  2380.             if animation[2]
  2381.               animation($data_animations[animation[0]], animation[1], true)
  2382.             else
  2383.               animation($data_animations[animation[0]], animation[1])
  2384.             end
  2385.             @battler.animation.delete(animation)
  2386.           end
  2387.         end
  2388.         else
  2389.         # アニメーション
  2390.         if @battler.animation_id != 0
  2391.           animation = $data_animations[@battler.animation_id]
  2392.           if !$rt_damage.empty?
  2393.             animation(animation , @battler.animation_hit)
  2394.           else
  2395.             animation(animation , @battler.animation_hit)
  2396.           end
  2397.           @battler.animation_id = 0
  2398.         end
  2399.       end
  2400.       # 技能
  2401.       if !RTAB and @battler.damagetemp_pop
  2402.         damagetemp(@battler.damage, @battler.critical)
  2403.         @battler.damagetemp_pop = false
  2404.       end
  2405.       # hit
  2406.       if !RTAB and @battler.hit_pop
  2407.         hit($rt_hit)
  2408.         @battler.hit_pop = false
  2409.       end
  2410.       # ダメージ
  2411.       if !RTAB and @battler.damage_pop
  2412.         damage(@battler.damage, @battler.critical)
  2413.         @battler.damage = nil
  2414.         @battler.critical = false
  2415.         @battler.damage_pop = false
  2416.       end
  2417.       flag = RTAB ? (@battler.damage.empty? and $scene.dead_ok?(@battler)) :
  2418.                      @battler.damage == nil
  2419.       # コラプス
  2420.       if flag and @battler.dead?
  2421.         if @battler.is_a?(Game_Actor)
  2422.           $game_system.se_play($data_system.actor_collapse_se)
  2423.         elsif @battler.is_a?(Game_Enemy)
  2424.           $game_system.se_play($data_system.enemy_collapse_se)
  2425.         end
  2426.         collapse
  2427.         @battler_visible = false
  2428.       end
  2429.     end
  2430.     # スプライトの座標を設定
  2431.     self.x = @battler.screen_x + @effect_ox
  2432.     self.y = @battler.screen_y + @effect_oy
  2433.     self.z = @battler.screen_z
  2434.     self.zoom_x = @battler.real_zoom
  2435.     self.zoom_y = @battler.real_zoom
  2436.     # ウェイトカウントを減らす
  2437.     @battler.wait_count -= 1
  2438.     @battler.wait_count2 -= 1
  2439.     # アニメーション待ち時間取得
  2440.     @battler.animation_duration = @_animation_duration
  2441.     if @battler.is_a?(Game_Actor) or (!@battler.is_a?(Game_Actor) and !@battler.nce)
  2442.       self.zoom_x *= CHAR_ZOOM
  2443.       self.zoom_y *= CHAR_ZOOM
  2444.       @weapon.x = self.x + 2
  2445.       @weapon.y = self.y + 6
  2446.       @weapon.angle = 75 - (4 - @battler.pattern) * 45
  2447.       if self.mirror
  2448.         @weapon.angle += @weapon.angle - 180
  2449.       end
  2450.       if (!@battler.is_a?(Game_Actor) and !@battler.nce)
  2451.         @weapon.angle = -@weapon.angle-90
  2452.       end
  2453.     end
  2454.     # 残像
  2455.     if @battler.shadow
  2456.       if Graphics.frame_count % 2 == 0
  2457.         shadow = ::Sprite.new(self.viewport)
  2458.         shadow.bitmap = self.bitmap.dup
  2459.         shadow.x = self.x
  2460.         shadow.y = self.y
  2461.         shadow.ox = self.ox
  2462.         shadow.oy = self.oy
  2463.         shadow.mirror = self.mirror
  2464.         shadow.angle = self.angle
  2465.         shadow.opacity = 160
  2466.         shadow.zoom_x = self.zoom_x
  2467.         shadow.zoom_y = self.zoom_y
  2468.         if @battler.is_a?(Game_Actor) or (!@battler.is_a?(Game_Actor) and !@battler.nce)
  2469.           shadow.src_rect.set(@sx, @sy, @width, @height)
  2470.         else
  2471.           shadow.src_rect.set(0, 0, @width, @height)
  2472.         end
  2473.         @shadow.push([shadow,duration = 10,@battler.true_x + @effect_ox,@battler.true_y + @effect_oy])
  2474.       end
  2475.     end
  2476.     for s in @shadow
  2477.       if !s[0].disposed?
  2478.         s[0].update
  2479.         s[1] -= 1
  2480.         if s[1] < 1
  2481.           if s[0].bitmap != nil
  2482.             s[0].bitmap.dispose
  2483.           end
  2484.           s[0].dispose
  2485.         else
  2486.           s[0].x = @battler.screen_x(s[2])
  2487.           s[0].y = @battler.screen_y(s[3])
  2488.         end
  2489.       else
  2490.         s = nil
  2491.       end
  2492.     end
  2493.     @shadow.compact!
  2494.   end
  2495.   #--------------------------------------------------------------------------
  2496.   # ● エフェクトによる座標系の更新
  2497.   #--------------------------------------------------------------------------
  2498.   def update_effect
  2499.     # 角度の修正
  2500.     if @_upside_down
  2501.       self.angle = (@_turning + 180) % 360
  2502.     else
  2503.       self.angle = @_turning
  2504.     end
  2505.     # X 座標の修正値
  2506.     @effect_ox = @_shake + @_moving[0]
  2507.     # Y 座標の修正値
  2508.     @effect_oy = -@fly + @_moving[1]
  2509.     if  @_animation == nil or (RTAB and @_animation.empty?)
  2510.       self.effect_clear
  2511.     end
  2512.   end
  2513.   #--------------------------------------------------------------------------
  2514.   # ● シェイク更新
  2515.   #--------------------------------------------------------------------------
  2516.   def update_shake
  2517.     if @_shake_duration >= 1 or @_shake != 0
  2518.       delta = (@_shake_power * @_shake_speed * @_shake_direction) / 10.0
  2519.       if @_shake_duration <= 1 and @_shake * (@_shake + delta) < 0
  2520.         @_shake = 0
  2521.       else
  2522.         @_shake += delta
  2523.       end
  2524.       if @_shake > @_shake_power * 2
  2525.         @_shake_direction = -1
  2526.       end
  2527.       if @_shake < - @_shake_power * 2
  2528.         @_shake_direction = 1
  2529.       end
  2530.       if @_shake_duration >= 1
  2531.         @_shake_duration -= 1
  2532.       end
  2533.     end
  2534.   end
  2535.   #--------------------------------------------------------------------------
  2536.   # ● 飛行更新
  2537.   #--------------------------------------------------------------------------
  2538.   def update_fly
  2539.     if @rand > 0
  2540.       @rand -= 1
  2541.       return
  2542.     end
  2543.     if @battler.fly != 0
  2544.       if @fly < @battler.fly / 4
  2545.         @fly_direction = 1
  2546.       elsif @fly > @battler.fly / 2
  2547.         @fly_direction = -1
  2548.       end
  2549.       @fly += 0.5 * @fly_direction
  2550.     end
  2551.   end
  2552.   #--------------------------------------------------------------------------
  2553.   # ● 回転更新
  2554.   #--------------------------------------------------------------------------
  2555.   def update_turning
  2556.     if @_turning_duration > 0 or @_turning != 0
  2557.       @_turning += @_turning_direction * @_turning_speed / 2.0
  2558.       # 残り回転数を減らす
  2559.       if @_turning_direction == -1
  2560.         if @_turning_duration > 0 and @_turning < 0
  2561.           @_turning_duration -= 1
  2562.         end
  2563.       elsif @_turning_direction == 1
  2564.         if @_turning_duration > 0 and @_turning >= 360
  2565.           @_turning_duration -= 1
  2566.         end
  2567.       end
  2568.       # 以下補正
  2569.       while @_turning < 0
  2570.         @_turning += 360
  2571.       end
  2572.       if @_turning_duration <= 0
  2573.         @_turning = 0
  2574.       end
  2575.       @_turning %= 360
  2576.     end
  2577.   end
  2578.   #--------------------------------------------------------------------------
  2579.   # ● 左右反転更新
  2580.   #--------------------------------------------------------------------------
  2581.   def update_reverse
  2582.     if @last_reverse != (@_reverse or @battler.reverse)
  2583.       self.mirror = (@_reverse or @battler.reverse)
  2584.       @last_reverse = (@_reverse or @battler.reverse)
  2585.     end
  2586.   end
  2587.   #--------------------------------------------------------------------------
  2588.   # ● 移動更新
  2589.   #--------------------------------------------------------------------------
  2590.   def update_moving
  2591.     @move_distance = (@_move_coordinates[2] - @_move_coordinates[0]).abs +
  2592.                      (@_move_coordinates[3] - @_move_coordinates[1]).abs
  2593.     if @move_distance > 0
  2594.       return if @_moving[0] == @_move_coordinates[0] and @_moving[1] == @_move_coordinates[1]
  2595.       array = @_move_coordinates
  2596.       x = (array[2] + 1.0 * (array[0] - array[2]) * (@move_distance - @_move_duration) / @move_distance.to_f).to_i
  2597.       y = (array[3] + 1.0 * (array[1] - array[3]) * (@move_distance - @_move_duration) / @move_distance.to_f).to_i
  2598.       @_moving = [x, y]
  2599.       if @_move_quick_return and @_move_duration == 0
  2600.         @_move_coordinates = [0,0,array[0],array[1]]
  2601.         @_move_duration = @move_distance
  2602.       end
  2603.       @_move_duration -= @_move_speed
  2604.       @_move_duration = [@_move_duration, 0].max
  2605.     end
  2606.   end
  2607.   #--------------------------------------------------------------------------
  2608.   # ● 追加アニメ更新 (RTAB限定機能)
  2609.   #--------------------------------------------------------------------------
  2610.   def update_add_anime
  2611.     if RTAB
  2612.     # アニメーション
  2613.     if @_add_anime_id != 0
  2614.       animation = $data_animations[@_add_anime_id]
  2615.       animation(animation, true)
  2616.       @_add_anime_id = 0
  2617.     end
  2618.     end
  2619.   end
  2620.   #--------------------------------------------------------------------------
  2621.   # ● エフェクト初期化
  2622.   #--------------------------------------------------------------------------
  2623.   def effect_clear
  2624.     @_effect_ox = 0
  2625.     @_effect_oy = 0
  2626.     @_shake_power = 0
  2627.     @_shake_speed = 0
  2628.     @_shake_duration = 0
  2629.     @_shake_direction = 1
  2630.     @_shake = 0
  2631.     @_upside_down = false
  2632.     @_reverse = false
  2633.     @_turning_direction = 1
  2634.     @_turning_speed = 0
  2635.     @_turning_duration = 0
  2636.     @_turning = 0
  2637.     @_move_quick_return = true
  2638.     @_move_speed = 0
  2639.     @_move_coordinates = [0,0,0,0]
  2640.     @_move_jump = false
  2641.     @_move_duration = 0
  2642.     @_moving = [0,0]
  2643.     @_add_anime_id = 0
  2644.   end
  2645.   #--------------------------------------------------------------------------
  2646.   # ● シェイクの開始
  2647.   #     power    : 強さ
  2648.   #     speed    : 速さ
  2649.   #     duration : 時間
  2650.   #--------------------------------------------------------------------------
  2651.   def start_shake(power, speed, duration)
  2652.     @_shake_power = power
  2653.     @_shake_speed = speed
  2654.     @_shake_duration = duration
  2655.   end
  2656.   #--------------------------------------------------------------------------
  2657.   # ● 上下反転を開始
  2658.   #--------------------------------------------------------------------------
  2659.   def start_upside_down
  2660.     @_upside_down = @_upside_down ? false : true
  2661.   end
  2662.   #--------------------------------------------------------------------------
  2663.   # ● 左右反転を開始
  2664.   #--------------------------------------------------------------------------
  2665.   def start_reverse
  2666.     @_reverse = @_reverse ? false : true
  2667.   end
  2668.   #--------------------------------------------------------------------------
  2669.   # ● 回転を開始
  2670.   #     direction: 方向
  2671.   #     speed    : 速さ
  2672.   #     duration : 時間
  2673.   #--------------------------------------------------------------------------
  2674.   def start_turning(direction, speed, duration)
  2675.     @_turning_direction = direction
  2676.     @_turning_speed = speed
  2677.     @_turning_duration = duration
  2678.     @_turning = @_turning_direction == 1 ? 0 : 360
  2679.   end
  2680.   #--------------------------------------------------------------------------
  2681.   # ● 移動を開始
  2682.   #     quick_return : 戻るかどうか
  2683.   #     speed        : 速さ
  2684.   #     x            : X 座標
  2685.   #     y            : Y 座標
  2686.   #--------------------------------------------------------------------------
  2687.   def start_moving(quick_return, speed, x, y)
  2688.     @_move_quick_return = quick_return == 0 ? false : true
  2689.     @_move_speed = speed
  2690.     @_move_coordinates = [x,y,@_move_coordinates[0],@_move_coordinates[1]]
  2691.     distance = (@_move_coordinates[2] - @_move_coordinates[0]).abs +
  2692.                (@_move_coordinates[3] - @_move_coordinates[1]).abs
  2693.     @_move_duration = distance
  2694.   end
  2695.   #--------------------------------------------------------------------------
  2696.   # ● アニメ追加を開始
  2697.   #     id           : ID
  2698.   #     hit          : 命中フラッグ
  2699.   #--------------------------------------------------------------------------
  2700.   def start_add_anime(id)
  2701.     @_add_anime_id = id
  2702.   end
  2703.   #--------------------------------------------------------------------------
  2704.   # ● 各種エフェクトの開始判定
  2705.   #--------------------------------------------------------------------------
  2706.   if !method_defined?("side_view_animation_process_timing")
  2707.     alias side_view_animation_process_timing animation_process_timing
  2708.   end
  2709.   def animation_process_timing(timing, hit)
  2710.     side_view_animation_process_timing(timing, hit)
  2711.     if (timing.condition == 0) or
  2712.        (timing.condition == 1 and hit == true) or
  2713.        (timing.condition == 2 and hit == false)
  2714.       if timing.se.name =~ SHAKE_FILE
  2715.         names = timing.se.name.split(/#/)
  2716.         power    = names[1].nil? ? SHAKE_POWER    : names[1].to_i
  2717.         speed    = names[2].nil? ? SHAKE_SPEED    : names[2].to_i
  2718.         duration = names[3].nil? ? SHAKE_DURATION : names[3].to_i
  2719.         # シェイクを開始
  2720.         self.start_shake(power, speed, duration)
  2721.       end
  2722.       if timing.se.name == UPSIDE_DOWN_FILE
  2723.         # 上下反転を開始
  2724.         self.start_upside_down
  2725.       end
  2726.       if timing.se.name == REVERSE_FILE
  2727.         # 左右反転を開始
  2728.         self.start_reverse
  2729.       end
  2730.       if timing.se.name =~ TURNING_FILE
  2731.         names = timing.se.name.split(/#/)
  2732.         direction = names[1].nil? ? TURNING_DIRECTION : names[1].to_i
  2733.         speed     = names[2].nil? ? TURNING_SPEED     : names[2].to_i
  2734.         duration  = names[3].nil? ? TURNING_DURATION  : names[3].to_i
  2735.         # 回転を開始
  2736.         self.start_turning(direction, speed, duration)
  2737.       end
  2738.       if timing.se.name =~ MOVE_FILE
  2739.         names = timing.se.name.split(/#/)
  2740.         quick_return= names[1].nil? ? MOVE_RETURN      : names[1].to_i
  2741.         speed       = names[2].nil? ? MOVE_SPEED       : names[2].to_i
  2742.         x           = names[3].nil? ? MOVE_COORDINATES[0] : names[3].to_i
  2743.         y           = names[3].nil? ? MOVE_COORDINATES[1] : names[4].to_i
  2744.         # 移動を開始
  2745.         self.start_moving(quick_return, speed, x, y)
  2746.       end
  2747.       if timing.se.name =~ ADD_ANIME_FILE
  2748.         names = timing.se.name.split(/#/)
  2749.         id = names[1].nil? ? ADD_ANIME_ID      : names[1].to_i
  2750.         # アニメ追加を開始
  2751.         self.start_add_anime(id)
  2752.       end
  2753.     end
  2754.   end
  2755. end
  2756.  
  2757. #==============================================================================
  2758. # ■ Sprite_Weapon
  2759. #------------------------------------------------------------------------------
  2760. #  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、
  2761. # スプライトの状態を自動的に変化させます。
  2762. #==============================================================================
  2763.  
  2764. class Sprite_Weapon < RPG::Sprite
  2765.   include Side_view
  2766.   #--------------------------------------------------------------------------
  2767.   # ● 公開インスタンス変数
  2768.   #--------------------------------------------------------------------------
  2769.   attr_accessor :battler                  # バトラー
  2770.   attr_reader   :cw                       # グラフィックの幅
  2771.   attr_reader   :ch                       # グラフィックの高さ
  2772.   #--------------------------------------------------------------------------
  2773.   # ● オブジェクト初期化
  2774.   #     viewport : ビューポート
  2775.   #     battler  : バトラー (Game_Battler)
  2776.   #--------------------------------------------------------------------------
  2777.   def initialize(viewport, battler = nil)
  2778.     super(viewport)
  2779.     @battler = battler
  2780.     @battler_visible = false
  2781.   end
  2782.   #--------------------------------------------------------------------------
  2783.   # ● 解放
  2784.   #--------------------------------------------------------------------------
  2785.   def dispose
  2786.     if self.bitmap != nil
  2787.       self.bitmap.dispose
  2788.     end
  2789.     super
  2790.   end
  2791.   #--------------------------------------------------------------------------
  2792.   # ● フレーム更新
  2793.   #--------------------------------------------------------------------------
  2794.   def update
  2795.     super
  2796.     # バトラーが nil の場合
  2797.     if @battler == nil or (!@battler.is_a?(Game_Actor) and @battler.nce)
  2798.       self.bitmap = nil
  2799.       return
  2800.     end
  2801.     # ウエポンアニメのデータ取得
  2802.     @weapon_anime_type = @battler.weapon_anime_type(@battler.condition)
  2803.     # 設定が「非表示」の場合
  2804.     if !@weapon_anime_type[1] or @weapon_anime_type[0].nil?
  2805.       self.visible = false
  2806.       return
  2807.     else
  2808.       self.visible = true
  2809.     end
  2810.     # ファイル名が現在のものと異なる場合
  2811.     if @weapon_anime_type[0] != @weapon_name
  2812.       @weapon_name = @weapon_anime_type[0]
  2813.       # ビットマップを取得、設定
  2814.       self.bitmap = RPG::Cache.icon(@weapon_name)
  2815.       @width = bitmap.width
  2816.       @height = bitmap.height
  2817.       @flag = true
  2818.     end
  2819.     # 現在アニメパターンが現在のものと異なる場合
  2820.     if @pattern != @battler.pattern or @flag or @condition != @battler.condition
  2821.       @pattern = @battler.pattern
  2822.       @condition = @battler.condition
  2823.       self.ox = @width
  2824.       self.oy = @height
  2825.       self.z = battler.screen_z
  2826.       self.zoom_x = @battler.real_zoom * CHAR_ZOOM
  2827.       self.zoom_y = @battler.real_zoom * CHAR_ZOOM
  2828.       self.src_rect.set(0, 0, @width, @height)
  2829.       self.opacity = 255
  2830.       # バトラーより手前に表示
  2831.       if @weapon_anime_type[2]
  2832.         self.z += 10
  2833.       # バトラーより奥に表示
  2834.       else
  2835.         self.z -= 10
  2836.       end
  2837.       @flag = false
  2838.     end
  2839.   end
  2840. end
  2841.  
  2842. #==============================================================================
  2843. # ■ Sprite_Flying
  2844. #------------------------------------------------------------------------------
  2845. #  バトラー表示用のスプライトです。Game_Battler クラスのインスタンスを監視し、
  2846. # スプライトの状態を自動的に変化させます。
  2847. #==============================================================================
  2848.  
  2849. class Sprite_Flying < RPG::Sprite
  2850.   include Side_view
  2851.   #--------------------------------------------------------------------------
  2852.   # ● 公開インスタンス変数
  2853.   #--------------------------------------------------------------------------
  2854.   attr_accessor :battler                  # バトラー
  2855.   #--------------------------------------------------------------------------
  2856.   # ● オブジェクト初期化
  2857.   #     viewport : ビューポート
  2858.   #     battler  : バトラー (Game_Battler)
  2859.   #--------------------------------------------------------------------------
  2860.   def initialize(viewport, battler = nil)
  2861.     super(viewport)
  2862.     @battler = battler
  2863.     @battler_visible = false
  2864.   end
  2865.   #--------------------------------------------------------------------------
  2866.   # ● 解放
  2867.   #--------------------------------------------------------------------------
  2868.   def dispose
  2869.     if self.bitmap != nil
  2870.       self.bitmap.dispose
  2871.     end
  2872.     super
  2873.   end
  2874.   #--------------------------------------------------------------------------
  2875.   # ● フレーム更新
  2876.   #--------------------------------------------------------------------------
  2877.   def update
  2878.     super
  2879.     # バトラーが nil の場合
  2880.     if @battler == nil
  2881.       self.bitmap = nil
  2882.       loop_animation(nil)
  2883.       return
  2884.     end
  2885.     # 遠距離アニメ
  2886.     flying_animation = @battler.flying_animation
  2887.     flying_start = flying_animation[0]
  2888.     flying_end   = flying_animation[1]
  2889.     # アニメーション ID が現在のものと異なる場合
  2890.     if @anime_id != @battler.flying_anime[0]
  2891.       @anime_id = @battler.flying_anime[0]
  2892.       @animation = $data_animations[@anime_id]
  2893.     end
  2894.     # アニメーション 開始
  2895.     if flying_start
  2896.       loop_animation(@animation)
  2897.     elsif flying_end
  2898.       loop_animation(nil)
  2899.     end
  2900.     self.x = @battler.flying_x
  2901.     self.y = @battler.flying_y
  2902.     self.z = @battler.screen_z + 1000
  2903.   end
  2904. end
  2905.  
  2906. module RPG
  2907.   class Skill
  2908.     #--------------------------------------------------------------------------
  2909.     # ● 魔法かどうかの判断
  2910.     #--------------------------------------------------------------------------
  2911.     def magic?
  2912.       if @atk_f == 0
  2913.         return true
  2914.       else
  2915.         return false
  2916.       end
  2917.     end
  2918.   end
  2919. end
  2920.  
  2921. # アローカーソルの位置修正
  2922. class Arrow_Actor < Arrow_Base
  2923.   include Side_view
  2924.   #--------------------------------------------------------------------------
  2925.   # ● フレーム更新
  2926.   #--------------------------------------------------------------------------
  2927.   alias side_view_update update
  2928.   def update
  2929.     side_view_update
  2930.     # スプライトの座標を設定
  2931.     if self.actor != nil && (self.x != self.actor.screen_x + ARROW_OX or self.y != self.actor.screen_y + ARROW_OY)
  2932.       self.x = self.actor.screen_x + ARROW_OX
  2933.       self.y = self.actor.screen_y + ARROW_OY
  2934.     end
  2935.   end
  2936. end
  2937. class Arrow_Enemy < Arrow_Base
  2938.   include Side_view
  2939.   #--------------------------------------------------------------------------
  2940.   # ● フレーム更新
  2941.   #--------------------------------------------------------------------------
  2942.   alias side_view_update update
  2943.   def update
  2944.     side_view_update
  2945.     # スプライトの座標を設定
  2946.     if self.enemy != nil && self.y != self.enemy.screen_y + self.enemy.height/2
  2947.       self.x = self.enemy.screen_x
  2948.       self.y = self.enemy.screen_y + self.enemy.height/2 + ARROW_OY*3/5 #原无+ ARROW_OY*3/5
  2949.     end
  2950.   end
  2951. end
  2952. module Rtab_use
  2953.   def update_phase4_step3(battler)
  2954.     # ヘルプウィンドウの更新。アクションの種別で分岐
  2955.     case battler.current_action.kind
  2956.     when 0  # 基本
  2957.       if battler.current_action.basic == 1
  2958.         @help_window.set_text($data_system.words.guard, 1)
  2959.         @help_wait = @help_time
  2960.       end
  2961.       if battler.is_a?(Game_Enemy) and battler.current_action.basic == 2
  2962.         @help_window.set_text("逃げる", 1)
  2963.         @help_wait = @help_time
  2964.       end
  2965.     when 1  # スキル
  2966.       skill =  $data_skills[battler.current_action.skill_id]
  2967.       @help_window.set_text(skill.name, 1)
  2968.       @help_wait = @help_time
  2969.     when 2  # アイテム
  2970.       item = $data_items[battler.current_action.item_id]
  2971.       @help_window.set_text(item.name, 1)
  2972.       @help_wait = @help_time
  2973.     end
  2974.     # 行動側アニメーション (ID が 0 の場合は白フラッシュ)
  2975.     if battler.anime1 == 0
  2976.       battler.white_flash = true
  2977.       battler.wait = 5
  2978.       # カメラ設定
  2979.       if battler.target[0].is_a?(Game_Enemy)
  2980.         camera_set(battler)
  2981.       end
  2982.     else
  2983.       battler.animation.push([battler.anime1, true])
  2984.       speller = synthe?(battler)
  2985.       if speller != nil
  2986.         for spell in speller
  2987.           if spell != battler
  2988.             if spell.current_action.spell_id == 0
  2989.               spell.animation.push([battler.anime1, true])
  2990.             else
  2991.               skill = spell.current_action.spell_id
  2992.               spell.animation.push([$data_skills[skill].animation1_id, true])
  2993.               spell.current_action.spell_id = 0
  2994.             end
  2995.           end
  2996.         end
  2997.       end
  2998.       battler.wait = 2 * $data_animations[battler.anime1].frame_max - 10
  2999.       battler.anime1 = 0
  3000.     end
  3001.     # ステップ 4 に移行
  3002.     battler.phase = 4 if !(!battler.animation1_on and battler.action? and !battler.flash?)
  3003.   end
  3004. end
  3005.  
  3006. #==============================================================================
  3007. # ■ Scene_Battle
  3008. #==============================================================================
  3009. class Scene_Battle
  3010.  
  3011.   include Side_view
  3012.   include Rtab_use if RTAB
  3013.   #--------------------------------------------------------------------------
  3014.   # ● 公開インスタンス変数
  3015.   #--------------------------------------------------------------------------
  3016.   attr_reader   :phase            # フェーズ
  3017.   attr_reader   :phase4_step      # フェーズ4ステップ
  3018.   attr_reader   :active_battler   # 対象の配列
  3019.   attr_reader   :target_battlers  # 対象の配列
  3020.   attr_reader   :animation1_id    # 行動アニメID
  3021.   attr_reader   :animation2_id    # 対象アニメID
  3022.   #--------------------------------------------------------------------------
  3023.   # ● メイン処理
  3024.   #--------------------------------------------------------------------------
  3025.   alias side_view_main main
  3026.   def main
  3027.     # バトラー初期化
  3028.     for battler in $game_party.actors + $game_troop.enemies
  3029.       battler.start_battle
  3030.     end
  3031.     # 戻す
  3032.     side_view_main
  3033.   end
  3034.   #--------------------------------------------------------------------------
  3035.   # ● 閃き判定
  3036.   #--------------------------------------------------------------------------
  3037.   def flash?
  3038.     return @flash_flag ? true : false
  3039.   end  
  3040.   #--------------------------------------------------------------------------
  3041.   # ● 閃きアニメ待ち時間取得
  3042.   #--------------------------------------------------------------------------
  3043.   def flash_duration
  3044.     animation = nil
  3045.     if FLASH_ANIME
  3046.       animation = $data_animations[FLASH_ANIMATION_ID]
  3047.     end
  3048.     return animation != nil ? animation.frame_max * 2 + 2 : 0
  3049.   end
  3050.   #--------------------------------------------------------------------------
  3051.   # ● フレーム更新 (メインフェーズ ステップ 2 : アクション開始)
  3052.   #--------------------------------------------------------------------------
  3053.   alias side_view_update_phase4_step2 update_phase4_step2
  3054.   def update_phase4_step2(*arg)
  3055.     battler = convert_battler2(*arg)
  3056.     battler.action
  3057.     side_view_update_phase4_step2(*arg)
  3058.   end
  3059.   #--------------------------------------------------------------------------
  3060.   # ● 生成特技行动结果
  3061.   #--------------------------------------------------------------------------
  3062.   alias rt_make_skill_action_result make_skill_action_result
  3063.   def make_skill_action_result
  3064.     rt_make_skill_action_result
  3065.     $rt_hit = 0
  3066.     if RT_SKILL_ANIMATION.include?(@skill.id)
  3067.       $rt_animation_id = RT_SKILL_ANIMATION[@skill.id].clone
  3068.       $rt_hits = $rt_animation_id.size
  3069.       hits = $rt_hits + 1
  3070.      # $rt_damage = {}
  3071.       for target in @target_battlers
  3072.         $rt_damage[target] = [target.damage]
  3073.         if $rt_damage[target] != ["Miss"]
  3074.           if $rt_damage[target] == [0]
  3075.             for i in 1..hits
  3076.               $rt_damage[target].push 0
  3077.             end
  3078.           else
  3079.             damage = $rt_damage[target][0]
  3080.             if damage > 0
  3081.               for i in 1..hits
  3082.                 $rt_damage[target][i] = (($rt_damage[target][0]).to_f / hits * (85 + rand(31)) / 100).round
  3083.                 if damage > $rt_damage[target][i]
  3084.                   if i != hits
  3085.                     damage -= $rt_damage[target][i]
  3086.                   else
  3087.                     $rt_damage[target][i] = damage
  3088.                   end
  3089.                 else
  3090.                   $rt_damage[target][i] = damage
  3091.                   for j in i..hits-1
  3092.                     $rt_damage.push 0
  3093.                   end
  3094.                   break
  3095.                 end
  3096.               end
  3097.             else
  3098.               for i in 1..hits
  3099.                 $rt_damage[target][i] = (($rt_damage[target][0]).to_f / hits * (85 + rand(31)) / 100).round
  3100.                 if damage < $rt_damage[target][i]
  3101.                   if i != hits
  3102.                     damage -= $rt_damage[target][i]
  3103.                   else
  3104.                     $rt_damage[target][i] = damage
  3105.                   end
  3106.                 else
  3107.                   $rt_damage[target][i] = damage
  3108.                   for j in i..hits-1
  3109.                     $rt_damage.push 0
  3110.                   end
  3111.                   break
  3112.                 end
  3113.               end
  3114.             end
  3115.           end
  3116.         else
  3117.           for i in 1..hits
  3118.             $rt_damage[target].push "Miss"
  3119.           end
  3120.         end
  3121.       end
  3122.     else
  3123.       $rt_animation_id = []
  3124.       $rt_hits = 0
  3125.       $rt_damage = {}
  3126.     end
  3127.   end
  3128.   #--------------------------------------------------------------------------
  3129.   # ● フレーム更新 (メインフェーズ ステップ 3 : 行動側アニメーション)
  3130.   #--------------------------------------------------------------------------
  3131.   alias side_view_update_phase4_step3 update_phase4_step3
  3132.   def update_phase4_step3(*arg)
  3133.     battler = convert_battler2(*arg)
  3134.     return if !battler.animation1_on and battler.action? and !battler.flash?#发动特技、咏唱魔法在行动完毕之后
  3135.     if battler.flash? and FLASH_ANIME
  3136.       battler.flash_flag["normal"] = true
  3137.     end
  3138.     side_view_update_phase4_step3(*arg)
  3139.   end
  3140.   #--------------------------------------------------------------------------
  3141.   # ● フレーム更新 (メインフェーズ ステップ 4 : 対象側アニメーション)
  3142.   #--------------------------------------------------------------------------
  3143.   alias side_view_update_phase4_step4 update_phase4_step4
  3144.   def update_phase4_step4(*arg)
  3145.     battler = convert_battler2(*arg)
  3146.     targets = RTAB ? battler.target : @target_battlers
  3147.     return if !battler.animation2_on and battler.action? if !RTAB
  3148.     side_view_update_phase4_step4(*arg)
  3149.     for target in targets
  3150.       if RTAB
  3151.         value = nil
  3152.         if target.damage_sp.include?(battler)
  3153.           value = target.damage_sp[battler]
  3154.         end
  3155.         if target.damage.include?(battler)
  3156.           if value == nil or value == "Miss"
  3157.             value = target.damage[battler]
  3158.           elsif value.is_a?(Numeric) && value > 0
  3159.             value = target.damage[battler] == "Miss" ? value : target.damage[battler]
  3160.           end
  3161.         end
  3162.       else
  3163.         value = target.damage
  3164.       end
  3165.       if target.is_a?(Game_Actor)
  3166.         # ダメージの場合
  3167.         if value.is_a?(Numeric) && value > 0
  3168.           # シェイクを開始
  3169.           target.shake = true
  3170.         end
  3171.       elsif target.is_a?(Game_Enemy)
  3172.         # ダメージの場合
  3173.         if value.is_a?(Numeric) && value > 0
  3174.           # シェイクを開始
  3175.           target.shake = true
  3176.         end
  3177.       end
  3178.     end
  3179.     if !$rt_damage.empty?
  3180.       $rt_hit += 1
  3181.       target.hit_pop = true
  3182.       for target in @target_battlers
  3183.         target.damage = $rt_damage[target].pop
  3184.         if  target.damage != nil
  3185.           target.damagetemp_pop = true
  3186.         end
  3187.       end
  3188.     end
  3189.   end
  3190.   #--------------------------------------------------------------------------
  3191.   # ● 刷新画面 (主回合步骤 5 : 显示伤害)
  3192.   #--------------------------------------------------------------------------
  3193.   def update_phase4_step5
  3194.     # 隐藏帮助窗口
  3195.     @help_window.visible = false
  3196.     # 刷新状态窗口
  3197.     @status_window.refresh
  3198.     # 显示伤害
  3199.     for target in @target_battlers
  3200.       target.damage = $rt_damage[target].pop if !$rt_damage.empty?
  3201.       if  target.damage != nil
  3202.         target.damage_pop = true
  3203.       end
  3204.     end
  3205.     $rt_damage = {}
  3206.     # 移至步骤 6
  3207.     @phase4_step = 6
  3208.   end
  3209.   #--------------------------------------------------------------------------
  3210.   # ● プレバトルフェーズ開始
  3211.   #--------------------------------------------------------------------------
  3212.   alias start_phase1_correct start_phase1
  3213.   def start_phase1
  3214.     # カメラの設定
  3215.     # 元々フロントビュー向けの数値になっているため
  3216.     @zoom_rate = [1.0, 1.0]
  3217.     start_phase1_correct
  3218.   end
  3219.   #--------------------------------------------------------------------------
  3220.   # ● アクターコマンドフェーズ開始
  3221.   #--------------------------------------------------------------------------
  3222.   alias start_phase3_correct start_phase3
  3223.   def start_phase3
  3224.     battler = convert_battler
  3225.     start_phase3_correct
  3226.     if RTAB
  3227.       # カメラの設定
  3228.       # 元々フロントビュー向けの数値になっているため
  3229.       @camera = "command"
  3230. #      @spriteset.screen_target(0, 0, 1.0)
  3231.     end
  3232.   end
  3233.  
  3234.  
  3235.   def action_phase(battler)
  3236.     # action が 1 の場合、バトラーが行動中かどうか確認
  3237.     if @action == 1 and battler.phase < 3
  3238.       for target in battler.target
  3239.         speller = synthe?(target)
  3240.         if speller == nil
  3241.           # ターゲットが通常行動中の場合
  3242.           if @action_battlers.include?(target)
  3243.             if target.phase > 2
  3244.               return
  3245.             end
  3246.           end
  3247.         else
  3248.           # ターゲットが連携スキル発動中の場合
  3249.           for spell in speller
  3250.             if @action_battlers.include?(spell)
  3251.               if spell.phase > 2
  3252.                 return
  3253.               end
  3254.             end
  3255.           end
  3256.         end
  3257.       end
  3258.     end
  3259. case battler.phase
  3260.   when 1
  3261.     update_phase4_step1(battler)
  3262.   when 2
  3263.     update_phase4_step2(battler)
  3264.   when 3  
  3265.     update_phase4_step3(battler) if !(!battler.animation1_on and battler.action? and !battler.flash?)
  3266.   when 4
  3267.     update_phase4_step4(battler) if !(!battler.animation2_on and battler.action?)
  3268.   when 5
  3269.     update_phase4_step5(battler)
  3270.   when 6
  3271.     update_phase4_step6(battler)
  3272.   end
  3273. end
  3274. end

评分

参与人数 1星屑 +20 +1 收起 理由
guoxiaomi + 20 + 1 参与讨论

查看全部评分

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-30 08:44

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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