赞 | 0 |
VIP | 0 |
好人卡 | 0 |
积分 | 0 |
经验 | 1777 |
最后登录 | 2013-10-19 |
在线时间 | 33 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 46
- 在线时间
- 33 小时
- 注册时间
- 2012-8-25
- 帖子
- 93
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
我用了一个VX横版战斗脚本,有三个。是互相联系的,
然后战斗时出现的问题:
求解。
这是我用的脚本(1):- #==============================================================================
- # ■ module N01 for Sideview Ver3.3
- #------------------------------------------------------------------------------
- #
- #原版的網址 http://rpgex.sakura.ne.jp/home/sozai/sozai_top.html#VXブー
- #
- # 横版战斗系统设定项目。
- #==============================================================================
- module N01
- #--------------------------------------------------------------------------
- # ● 设定
- #--------------------------------------------------------------------------
- # 主人公初期位置 第一人 第二人 第三人 第四人
- # X轴 Y轴 X轴 Y轴 X轴 Y轴 X轴 Y轴
- ACTOR_POSITION = [[415,120],[435,150],[455,180],[475,210]]
- # 战斗成员最大数(可改动人数) 当人数变动时,上方的坐标也要相应变动
- MAX_MEMBER = 4
-
- # 战斗中行动结束后、到下个角色行动开始之间的等待时间。
- ACTION_WAIT = 10
- # 敌方溃败(被击破时的退场)前的等待时间
- COLLAPSE_WAIT = 12
- # 胜利前的等待时间
- WIN_WAIT = 70
-
- # 战斗背景在画面中位置的设定 FLOOR = [ X轴, Y轴, 透明度]
- FLOOR = [ 0, 96,128]
- # 未装备武器地情况下攻击时显示的动画ID
- NO_WEAPON = 82
- # 二刀流设定 当双手装备武器时一次攻击的伤害数值。数值为%
- # 通常攻击 技能、物品
- TWO_SWORDS_STYLE = [ 50, 100]
- # 状态扩张・自动复活的动画ID
- RESURRECTION = 41
-
- # 伤害数字图片的文件名(横向等距的从零到九依次排列的图片)
- DAMAGE_GRAPHICS = "Number+"
- # 回复数字图片的文件名
- RECOVER_GRAPHICS = "Number-"
- # 显示数值时的文字间隔
- NUM_INTERBAL = -3
- # 显示数值时的显示时间
- NUM_DURATION = 68
- # 伤害窗口关闭、只显示文字时的情况是true
- NON_DAMAGE_WINDOW = false
- # 伤害窗口中所显示的词语。如果不想显示的情况请""这样消除掉引号中内容即可。
- POP_DAMAGE0 = "毫发未损!" # 伤害数值为0时(数字0将不被显示)
- POP_MISS = "未击中!" # 攻击因攻击者原因没有击中时
- POP_EVA = "闪避!" # 攻击因被被攻击者躲开时
- POP_CRI = "会心一击!" # 会心一击
- POP_MP_DAM = "伤害MP" # 受到MP的伤害时
- POP_MP_REC = "回复MP" # 回复MP时
-
- # 阴影效果 使用的话是true不使用时是false
- SHADOW = true
- # 识别步行效果 在战斗中人物使用步行效果的话是true不使用时是false
- # false的情况下、一定要使用自己的行走图,不要使用脚本范例中的。
- # 还有,No1之后的图片大小要统一(不是全人物统一,单一人物的统一即可)
- WALK_ANIME = true
- # 角色战斗图中用图的动画动作格数(横分割数)
- ANIME_PATTERN = 3
- # 角色战斗图中用图的动画种类数(纵分割数)
- ANIME_KIND = 4
-
- # 背后攻击(偷袭时的画面反转) 使用的话是true不使用的是false
- BACK_ATTACK = true
- # 背后攻击时战斗背景不反转的情况是false
- BACK_ATTACK_NON_BACK_MIRROR = true
- # 将背后攻击设置为无效时 偷袭效果依然发挥。
- # 全部都是装备上所需装备时、发挥技能时,才会有效果。
- # 防止背后攻击的武器ID 举例) = [1] 多数时的举例) = [1,2]
- NON_BACK_ATTACK_WEAPONS = []
- # 防止背后攻击的盾ID
- NON_BACK_ATTACK_ARMOR1 = []
- # 防止背后攻击的头部防具ID
- NON_BACK_ATTACK_ARMOR2 = []
- # 防止背后攻击的身体防具ID
- NON_BACK_ATTACK_ARMOR3 = []
- # 防止背后攻击的装饰品ID
- NON_BACK_ATTACK_ARMOR4 = []
- # 防止背后攻击的技能ID
- NON_BACK_ATTACK_SKILLS = []
- # 一定会发生背后攻击的开关No(会优先于防止)
- BACK_ATTACK_SWITCH = []
-
- #==============================================================================
- # ■ 单独战斗动作
- #------------------------------------------------------------------------------
- # 使用的是连贯动作,这里的单独是没有意义的。
- #==============================================================================
- # 这里的单独动作名,请不要重复。
- # 与连贯动作名重复没有问题。
- ANIME = {
- #--------------------------------------------------------------------------
- # ● 角色动画的设定
- #--------------------------------------------------------------------------
- # 文件No…使用战斗动作图的号码。
- # 0的情况是使用行走图对应。
- # 1以后的是像"人物行走图文件名+_1"这样,参照文件名后的附加数字
- # 来判别的。例)$拉尔夫_1 的文件名No是1
- # 战斗动作图全部都是从人物行走图文件夹内读取。
- #
- # 种类…战斗动作图的分隔纵列。从上开始0到3依次。
- # 速度…动画的更新速度。数值越低更新速度越快。
- # 循环… [0=往复循环] [1=循环一次] [2=不循环]
- # 等待…不循环(2)的情况下、到动画显示结束的等待时间。
- # 固定…如果动画不作固定的情况、指定分割号码(横向位置)。不固定的情况是-1。反向再生是-2。
- # Z轴…在面前显示的话是正数。相较通常情况靠前的显示。
- # 影…表示阴影效果的话是true、不表示为false
- # 武器…武器表示的情况填入武器动作名。不表示的情况为""。
-
- # 目标动画名 文件No 种类 速度 循环 等待 固定 Z轴 影 武器
- "待机" => [ 1, 0, 30, 0, 0, -1, 0, true,"普通待机武器" ],
- "待机(固定)" => [ 1, 0, 10, 2, 0, 1, 0, true,"普通待机武器" ],
- "向右(固定)" => [ 0, 2, 10, 1, 2, 1, 0, true,"" ],
- "伤害" => [ 1, 1, 7, 1, 24, -1, 0, true,"普通待机武器" ],
- "闪避" => [ 2, 1, 7, 1, 24, -1, 0, true,"" ],
- "无法战斗" => [ 2, 3, 10, 1, 8, 0, 0, true,"死亡武器位置" ],
- "前进" => [ 1, 3, 12, 1, 0, -1, 0, true,"普通待机武器" ],
- "后退" => [ 1, 3, 12, 1, 0, -1, 0, true,"普通待机武器" ],
- "逃跑" => [ 1, 3, 12, 0, 0, -1, 0, true,"普通待机武器" ],
- "头上显示" => [ 0, 1, 2, 1, 0, -1, 600, true,"" ],
- "武器挥动攻击" => [ 3, 0, 1, 2, 0, -1, 2, true,"纵挥动"],
- "武器挥动攻击L" => [ 3, 0, 1, 2, 0, -1, 2, true,"纵挥动L"],
- "武器挥动攻击缓" => [ 3, 0, 6, 2, 0, -1, 2, true,"纵挥动"],
- "武器下旋转" => [ 3, 0, 2, 2, 0, -1, 2, true,"下旋转"],
- "武器上旋转" => [ 3, 0, 2, 2, 0, -1, 2, true,"上旋转"],
- "举起武器" => [ 3, 0, 2, 2, 28, -1, 2, true,"举起"],
- "胜利动作" => [ 3, 0, 15, 0, 0, -1, 0, true,"" ],
-
- "剑系统攻击" => [ 3, 0, 2, 2, 0, -1, 0, true,"剑系统武器攻击" ],
- "剑系统后跳" => [ 2, 1, 30, 1, 0, -1, 0, true,"剑系统武器待机" ],
- "剑系统后退" => [ 1, 3, 8, 0, 0, -1, 0, true,"剑系统武器待机" ],
-
- "枪系统攻击" => [ 3, 0, 1, 2, 0, -1, 2, true,"枪系统武器攻击"],
-
- "缓慢前进" => [ 1, 3, 12, 0, 0, -1, 0, true,"缓慢待机武器" ],
- "插剑动作" => [ 3, 2, 1, 2, 0, -1, 2, true,"插剑"],
- "使用魔法" => [ 3, 3, 15, 0, 0, -1, 0, true,"" ],
-
- #--------------------------------------------------------------------------
- # ● 武器动作 让武器图像动起来的方法
- #--------------------------------------------------------------------------
- # 这里使用的武器动作名、必须是上面角色动画中设置的武器动作名。
-
- # X轴…横向移动距离。
- # Y轴…纵向移动距离。
- # Z轴…如果让此动作显示时武器在人物前方写作true。
- # 初始角度…武器在动作前的最初角度。半圆的0~360度。复数情况为反半圆。
- # 完毕角度…动作完毕时的角度。
- # 原点…武器旋转时的原点。[0…中心] [1…左上] [2…右上] [3…左下] [4…右下]
- # 反转…当为true时,动作前武器的图像将会显示为反转的。
- # X扩…X轴放大率、武器横向放大率。1是同等、2是2倍、0.5是1/2。
- # Y扩…Y轴放大率、武器纵向放大率。1是同等、2是2倍、0.5是1/2。
- # 调X…略微调整X轴。这里的数字是调整武器初期的X坐标。
- # 调Y…略微调整Y轴。这里的数字是调整武器初期的Y坐标。
- # 二刀…限定于二刀流为true、将以二刀流来显示左边武器动作的武器画像。
- # 如果不是二刀流的情况会自动跳过角色动画。
-
- # 武器动作名 X轴 Y轴 Z轴 初始角度 完毕角度 原点 反转 X扩 Y扩 调X 调Y 二刀
- "纵挥动" => [ 6, 8,false,-135, 45, 4,false, 1, 1, -4, -6,false],
- "纵挥动L" => [ 6, 8,false,-135, 45, 4,false, 1, 1, -4, -6, true],
- "下旋转" => [ 6, 8,false, 270, 45, 4,false, 1, 1, -4, -6,false],
- "上旋转" => [ 6, 8,false, 45,-100, 4,false, 1, 1, -4, -6,false],
- "举起" => [ 6, -4,false, 90, -45, 4,false, 1, 1, -4, -6,false],
- # 剑系统武器动画
- "剑系统武器待机" => [ 3, 3,false, 55, 55, 0, false, 1, 1, -20, 2,false],
- "剑系统武器前进" => [ 0, 0,false, -90, -90, 0, false, 1, 1, 10, -14,false],
- "剑系统武器被伤害" => [ 0, 0,false, 15, 15, 0, false, 1, 1, -12, -5,false],
- "剑系统武器防御" => [ -15, -15, true, 0, 0, 0, false, 1, 1, -8, -3,false],
- "剑系统武器攻击" => [ 6, 8,false, 10, 60, 4,false, 1, 1, -4, -6,false],
- "剑系统武器胜利" => [ 0, 3,false, -10, -30, 4,false, 1, 1, -7, 3,false],
- "剑系统武器斩" => [ 0, 0,false, 360, 120, 4, true, 1, 1, -4, -6,false],
- "剑系统武器强打" => [ 0, 8,false,-320, 55, 4,false, 1, 1, -4, -6,false],
- "剑系统武器举起" => [ 6, -4, true, 90, -45, 4,false, 1, 1, -4, -6,false],
- "剑系统武器下斩" => [ 0, 0,false,-320, 180, 4, true, 1, 1, 0, 0,false],
-
- "枪系统武器攻击" => [ -10, 0,false, 45, 45, 4,false, 1, 1, 4, 2,false],
-
-
- "缓慢待机武器" => [ 3, 3,false, 65, 65, 0,false, 1, 1, -10, -4,false],
- "插剑" => [ 0, 0,false, 270, 0, 3,false, 1, 1, -35, -4,false],
- "死亡武器位置" => [ 0, 0,false, 0, 0, 0,false, 1, 1, -20, 0,false],
- "普通待机武器" => [ 3, 3,false, 65, 65, 0,false, 1, 1, -18, 2,false],
-
- #--------------------------------------------------------------------------
- # ● 角色移动 敌方的X轴移动是以相反的复数计算。
- #--------------------------------------------------------------------------
- # 目标…坐标移动的参照 [0=自身现在的位置] [1=目标] [2=窗口] [3=初期位置]
- # X轴…从对象所看X坐标。绝对值就算是最低时也会比时间高
- # Y轴…从对象所看Y坐标。绝对值就算是最低时也会比时间高
- # 时间…移动时间。数值越大越缓慢。这里是用距离除以时间所得每格行动距离。
- # 加速…正数是加速、负数是减速。这里是每格行动的加速或减速。
- # 跳跃…跳跃轨道。正数是向下跳、负数是向上跳。0是不跳。
- # 动画…这里的移动所使用的角色动画名。
-
- # 目标 X轴 Y轴 时间 加速 跳跃 动画
- "不能移动" => [ 0, 0, 0, 1, 0, 0, "待机(固定)"],
- "到战斗开始的位置"=> [ 0, 54, 0, 1, 0, 0, "前进"],
- "一步向前移动" => [ 3, -32, 0, 18, -1, 0, "前进"],
- "一步向后移动" => [ 0, 32, 0, 8, -1, 0, "前进"],
- "四人攻击移动1" => [ 2, 444, 96, 18, -1, 0, "前进"],
- "四人攻击移动2" => [ 2, 444, 212, 18, -1, 0, "前进"],
- "四人攻击移动3" => [ 2, 384, 64, 18, -1, 0, "前进"],
- "四人攻击移动4" => [ 2, 384, 244, 18, -1, 0, "前进"],
- "被伤害" => [ 0, 32, 0, 4, -1, 0, "伤害"],
- "推动" => [ 0, 12, 0, 1, 1, 0, "伤害"],
- "我方逃走" => [ 0, 300, 0,300, 1, 0, "逃跑"],
- "逃走失败" => [ 0, 48, 0, 16, 1, 0, "逃跑"],
- "胜利的跳跃" => [ 0, 0, 0, 20, 0, -5, "前进"],
- "目标移动" => [ 1, 0, 0, 18, -1, 0, "前进"],
- "目标高速移动" => [ 1, 0, -12, 8, 0, -2, "前进"],
- "目标向前移动" => [ 1, 24, 0, 12, -1, 0, "前进"],
- "目标向前高速移动"=> [ 1, 24, 0, 1, 0, 0, "前进"],
- "目标右前移动" => [ 1, 96, 32, 16, -1, 0, "前进"],
- "目标左前移动" => [ 1, 96, -32, 16, -1, 0, "前进"],
- "一步向前跳跃" => [ 0, -32, 0, 8, -1, -4, "前进"],
- "一步向后跳跃" => [ 0, 32, 0, 8, -1, -4, "闪避"],
- "跳跃到目标" => [ 1, 12, -12, 12, -1, -6, "前进"],
- "投掷我方" => [ 0, -24, 0, 16, 0, -2, "前进"],
- "强力踩踏" => [ 1, 12, -32, 12, -1, -6, "头上显示"],
- "一步向前跳跃敲击"=> [ 0, -32, 0, 12, -1, -2, "武器挥动攻击"],
- "向前跳跃敲击" => [ 1, 12, 0, 12, -1, -5, "武器挥动攻击缓"],
- "对后方给予提高" => [ 1, 12, 0, 16, 0, -3, "武器挥动攻击"],
- "原地跳跃敲击" => [ 1, 0, 0, 16, 0, -5, "武器挥动攻击"],
- "拔出" => [ 1, -96, 0, 16, 2, 0, "武器挥动攻击"],
- "右拔出" => [ 1, -96, 32, 16, 2, 0, "武器挥动攻击"],
- "左拔出" => [ 1, -96, -32, 16, 2, 0, "武器挥动攻击"],
- "右拔出2" => [ 1,-128, 48, 16, 2, 0, "武器挥动攻击"],
- "左拔出2" => [ 1,-128, -48, 16, 2, 0, "武器挥动攻击"],
-
- "剑系统目标前移动" => [ 1, 24, 0, 50, -1, 0, "剑系统攻击移动"],
- "剑系统攻击后后跳" => [ 0, 32, 0, 25, -1, -3, "剑系统后跳"],
- "战场中心移动" => [ 2, 272, 208, 18, -3, -2, "缓慢前进"],
-
- #--------------------------------------------------------------------------
- # ● 角色漂浮 角色与影子脱离
- #--------------------------------------------------------------------------
- # 判別…用来判别的、请全部统一填入"float"。
- # 始高…开始漂浮的高度。负数情况是在影子之上、正数是在影子下方。
- # 终高…漂浮完毕的高度。因为动作系需要使用这个数值,请不要变动。
- # 时间…漂浮过程所用时间。
- # 动画…漂浮时候所用的角色动画名。
-
- # 判別 始高 终高 时间 动画
- "低空漂浮中" => ["float", -22, -20, 2, "待机(固定)"],
- "低空漂浮中2" => ["float", -20, -18, 2, "待机(固定)"],
- "低空漂浮中3" => ["float", -18, -20, 2, "待机(固定)"],
- "低空漂浮中4" => ["float", -20, -22, 2, "待机(固定)"],
- "跳跃停止" => ["float", 0, -80, 4, "待机(固定)"],
- "跳跃着地" => ["float", -80, 0, 4, "待机(固定)"],
- "抬起" => ["float", 0, -30, 4, "待机(固定)"],
-
- #--------------------------------------------------------------------------
- # ● 坐标初始化 返回到原始位置的移动设置
- #--------------------------------------------------------------------------
- # 判別…用来判别的、请全部统一填入"reset"。
- # 时间…返回过程所用时间。即使是同样的时间如果距离远的情况下移动速度也会发生变化。
- # 加速…正数为加速、负数为减速。这里是每格行动的加速或减速。
- # 跳跃…跳跃轨道。正数为向下跳、负数为向上跳。0是不跳。
- # 动画…这里移动时使用的角色动画名。
-
- # 判別 时间 加速 跳跃 动画
- "坐标初始化" => ["reset", 16, 0, 0, "前进"],
- "后退初始化" => ["reset", 16, 0, 0, "后退"],
- "目标面前坐标初始化" => ["reset", 50, 0, 0, "剑系统后退"],
-
- #--------------------------------------------------------------------------
- # ● 强制动作 被动形成的目标动作
- #--------------------------------------------------------------------------
- # 识别…被动形成的动作是单独还是连贯。"单独"时直接填入单独即可。
- # "连贯"时请填入连贯。
- #
- # 对象…获取是指动作的对象。0是目标、除他以外的处于那个状态No
- # 的全部角色视为对象。
- # 数值前有负号的就会习得此数字绝对值的数字对应的技能ID上的技能
- # 除自身以外的主人公作为对象(主人公限定)
- # 指定引取的情况(成员位置)、引取值填入1000。
- # 指定的引取是自身不在的情况(无法战斗或是逃走时)
- # 从零号开始顺次参照、所有角色界不在为时,行动中段。
- #
- # 恢复…动作后返回原始坐标的目标动作名。
- # 不返回的情况以这样""不填任何东西即可。
- # 动作名…强制动作的动作名。识别是单独的话、使用单独动作名。
- # 连贯的话就用连贯动作名(组合动作)。
-
- # 识别 对象 恢复 动作名
- "轻微吹动" => ["单独", 0, "坐标初始化", "推动"],
- "右旋转" => ["单独", 0, "坐标初始化", "右旋转一周"],
- "纵向压扁" => ["单独", 0, "坐标初始化", "纵向缩小"],
- "中弹1" => ["单独", 0, "坐标初始化", "从对象到自身1"],
- "举起我方" => ["单独", 0, "", "抬起"],
- "吴莉嘉连同攻击" => ["连贯", 18, "坐标初始化", "吴莉嘉合体攻击1"],
- "四人攻击1" => ["连贯", -101, "坐标初始化", "四人合体攻击1"],
- "四人攻击2" => ["连贯", -102, "坐标初始化", "四人合体攻击2"],
- "四人攻击3" => ["连贯", -103, "坐标初始化", "四人合体攻击3"],
- "将我方投掷飞出" => ["连贯", 1000, "坐标初始化", "可以投掷"],
-
- #--------------------------------------------------------------------------
- # ● 目标变更 改变现在角色作为目标对象的
- #--------------------------------------------------------------------------
- # ※只是改变战斗动作上的目标、战斗的目标不改变。
- # 只能是实行战斗中的角色执行。
- # 判別…因为使用于判别、请全部统一填入"target"。
- #
- # 对象…被变更目标的对象。0是目标、改变这个目标以外处于那个状态No中
- # 角色的全部对象。
- # 数值前有负号的就会习得此数字绝对值的数字对应的技能ID上的技能(我方队员为对象)。
- # 指定引取的情况(成员位置)、引取值填入1000。
- # 指定的引取是自身不在的情况(无法战斗或是逃走时)
- # 从零号开始顺次参照。
- #
- # 变更处…变更处内容 0=自身 1=自身的目标
- # 2=成为自身的目标后、再将自己的目标变为变更对象
- # 3=将已变更为自身的目标返还(必须是在实行过2的情况下下)
-
- # 目标変更名 判別 对象 変更先
- "以自身为目标" => ["target", 0, 0],
- "二人攻击目标统一" => ["target", 18, 1],
- "四人攻击目标统一" => ["target", 19, 1],
- "选择投掷角色" => ["target", 1000, 2],
- "投掷目标组合" => ["target", 1000, 3],
-
- #--------------------------------------------------------------------------
- # ● 技能连发 中断动作后、其他技能被连发出来
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"der"。
- # 确率…连发的成功率、0~100之间。如果没有被连发、剩下的动作继续执行。
- # 习得…如果连发的技能没有被习得也可以实行的话是true
- # 技能ID…连发的技能的ID
-
- # 连发名 判別 确率 习得 技能ID
- "回复连发" => ["der", 100, true, 91],
- "适当连发" => ["der", 100, true, 92],
- #--------------------------------------------------------------------------
- # ● 动作条件 设定条件、满足条件以后将停止所有行动
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"nece"。
- # 对象…用于条件参照的对象。[0=自分] [1=目标] [2=敌全体] [3=我方全体]
- # 内容… [0=状态] [1=参数] [2=开关] [3=变量] [4=习得技能]
- #
- # 条件…填入符合上边内容确定的项目的数值。
- # [0]状态…状态ID
- # [1]参数…[0=现HP] [1=现MP] [2=攻击力] [3=防御力] [4=精神力] [5=敏捷性]
- # [2]开关…游戏中的开关No
- # [3]变量…游戏中的变量No
- # [4]习得技能…习得特定技能的条件、将那个技能的ID编号填入。
- #
- # 补足…补足上边的条件。
- # [0]状态…成为条件的被施加状态的人数。
- # 符号为正号时是需要此号码对应条件,负号时为不需要。
- # [1]参数…参数的数值。对象为复数时,将取平均值。
- # 符号为正的数值以上、以及负的数值以下作为条件。
- # [2]开关…开关ON为条件是 true、OFF为条件是 false
- # [3]变量…符号为正的数值以上、以及负的数值以下作为条件。
- # [4]习得技能…作为条件的技能所习得的人数。
-
- # 连发名 判別 对象 内容 条件 补足
- "二人攻击条件确认" => ["nece", 3, 0, 18, 1],
- "四人攻击条件确认" => ["nece", 3, 0, 19, 3],
- "漂浮状态确认" => ["nece", 0, 0, 17, 1],
- "是否已变身成猫"=> ["nece", 0, 0, 20, 1],
- "死亡确认" => ["nece", 1, 0, 1, 1],
-
- #--------------------------------------------------------------------------
- # ● 角色旋转 画像旋转。与反转不同、武器动作不能被反映
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"angle"。
- # 时间…旋转过程所需时间。
- # 初始角度…旋转开始时的角度。指定于0~360度之间。正数为正半圆、负数为反半圆。
- # 完毕角度…旋转完毕时的角度。指定于0~360度之间。跟上边所记相同,但敌人的设定是与其相反的。
- # 回复…true是在完毕的同时恢复到通常角度。false是保持最后着动作。
-
- # 判別 时间 初始角度 完毕角度 回复
- "右旋转一周" => ["angle", 48, 0,-360,false],
- "左高速旋转" => ["angle", 6, 0, 360,false],
- #--------------------------------------------------------------------------
- # ● 角色放大缩小 武器动作不能被反映
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"zoom"。
- # 时间…放大缩小过程所需时间。
- # X扩…横向的放大率。1.0是等倍、0.5是原有的一半。
- # Y扩…纵向的放大率。1.0是等倍、0.5是原有的一半。
- # 回复…true是在完毕的同时还原成等倍。false是保持完毕时的样子。
- # 放大缩小时会一时变更当前对象的原点、在恢复的时候复原。
-
- # 判別 时间 X拡 Y拡 回复
- "横向缩小" => ["zoom", 16, 0.5, 1.0, true],
- "纵向缩小" => ["zoom", 16, 1.0, 0.5, true],
-
- #--------------------------------------------------------------------------
- # ● 战斗动画 显示数据库的战斗动画
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"anime"。
- # ID…动画ID。-1时将显示武器或者技能上设定的动画的伤害。
- # -2时技能也变成武器上所带的动画。
- # 对象… [0=自身] [1=目标]
- # 反转…true时动画地画像将被反转。
- # 等待…一直在动画显示完毕都存在的话是true。
- # 二刀用…true时将实行二刀流的动画。动画ID为-1时通常攻击的情况
- # 设定成显示为左手武器的动画。技能是技能动画的在实行。
-
- # 判別 ID 对象 反转 等待 二刀用
- "对象动画" => ["anime", -1, 1, false,false, false],
- "对象动画等待" => ["anime", -1, 1, false, true, false],
- "对象动画武器" => ["anime", -2, 1, false,false, false],
- "对象动画L" => ["anime", -1, 1, false,false, true],
- "打击动画" => ["anime", 1, 1, false,false, false],
- "斩击/必杀技1" => ["anime", 11, 1, false,false, false],
-
- "敌对象动画无" => ["anime", 0, 1, true,false, false],
-
- "幻鬼之阵" => ["anime", 201, 0, false,false, false],
- "终末之冬 杀" => ["anime", 207, 1, false,false, false],
-
- #--------------------------------------------------------------------------
- # ● 动画飞出 让战斗动画飞出去。飞行道具、远距离攻击用
- #--------------------------------------------------------------------------
- # ID…数据库里设定的动画ID。0是不显示动画。
- # 对象…飞出的对象 [0=目标] [1=敌全体的中心] [2=我方全体的中心] [4=自身]
- # 类型…[0=碰撞时消失] [1=直线贯穿]
- # 时间…动画飞出去时候的移动时间。数值越大速度越缓慢。
- # 轨道…动画飞出去时候的轨道。填入数值的话是走抛物线。正数为向下的抛物线、负数为向上。
- # 调X…略微调整X轴。改变飞出时的初期X坐标。敌方的情况是自动的反向运算。
- # 调Y…略微调整Y轴。改变飞出时的初期Y坐标。
- # 始…动画飞出时的开始位置。[0=自身] [1=对象] [2=不能移动]
- # Z坐标…动画或者武器在角色面前显示的话是true
- # 武器…填入下面贴附的武器、技能动作名。如果不是用为""
-
- # 判別 ID 对象 类型 时间 轨道 调X 调Y 始 Z坐标 武器
- "魔法发动动画" => ["m_a", 0, 4, 0, 52, 0, 0, 0, 2,false,""],
- "从对象到自身1" => ["m_a", 4, 0, 0, 24, 0, 0, 0, 1,false,""],
- "开始武器投掷" => ["m_a", 0, 0, 0, 18, -24, 0, 0, 0,false,"旋转投掷"],
- "放弃武器投掷" => ["m_a", 0, 0, 0, 18, 24, 0, 0, 1,false,"旋转投掷"],
- "全体动画单体化" => ["m_a", 80, 1, 0, 64, 0, 0, 0, 2, true,""],
-
-
- "幻鬼之阵1" => ["m_a", 202, 1, 0, 100, 0, 0, 0, 2, true,""],
- "幻鬼之阵2" => ["m_a", 203, 1, 0, 100, 0, 0, 0, 2, true,""],
- "幻鬼之阵3" => ["m_a", 204, 1, 0, 100, 0, 0, 0, 2, true,""],
- "幻鬼之阵4" => ["m_a", 205, 1, 0, 100, 0, 0, 0, 2, true,""],
- "终末之冬" => ["m_a", 206, 0, 0, 100, 0, 0, 0, 2, true,""],
- #--------------------------------------------------------------------------
- # ● 动画飞出时贴附的武器图像动画 专用于上面的武器飞出
- #--------------------------------------------------------------------------
- # 让贴附的武器图片动。这个画像可以和和武器动作的画像区分使用。
- # 那样的情况贴附的图像请去武器设定。
- # 初始角度…动作前的最初角度。前半圆0~360度。
- # 完毕角度…动作后的角度。前半圆0~360度。
- # 时间…旋转过程需要的时间。越小越快。动作到消失前持续保持旋转。
-
- # 武器动作名 初始角度 完毕角度 时间
- "旋转投掷" => [ 0, 360, 8],
-
- #--------------------------------------------------------------------------
- # ● 动画飞出时贴附的技能画像动画 专用于上边的动画飞出
- #--------------------------------------------------------------------------
- # 让贴附的技能图片动。能够贴附的图像在技能设定上。
- # 初始角度…动作前的最初角度。前半圆0~360度。
- # 完毕角度…动作后的角度。前半圆0~360度。
- # 时间…旋转过程所需要的时间。越小越快。动作到消失前持续保持旋转。
- # 判別…用于判别、请全部统一填入"skill"。
-
- # 武器动作名 初始角度 完毕角度 时间 判別
- "石投掷" => [ 0, 360, 8, "skill"],
-
- #--------------------------------------------------------------------------
- # ● 状态动画 显示事件使用的状态ICON
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"balloon"。
- # 种类…状态的种类(纵位置)在0~9之间。
- # 形式…动画更新方法、在完毕时消失。[0=单线] [1=往返]
-
- # 状态名 判別 种类 形式
- "异常状态/通用" => ["balloon", 6, 1],
- "异常状态/危急" => ["balloon", 5, 1],
- "异常状态/睡眠" => ["balloon", 9, 1],
-
- #--------------------------------------------------------------------------
- # ● 声效
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"sound"。
- # 种别…効果音为"se" BGM为"bgm" BGS为"bgs"
- # 速度…速度、50~150之间。音量…音量 不管哪个都要默认为100。
- # 文件名…播放的文件名。""时不改变任何BGM和BGS的设定。
-
- # SE名 判別 种别 速度 音量 SE文件名
- "absorb1" => ["sound", "se", 80, 100, "absorb1"],
-
- #--------------------------------------------------------------------------
- # ● 变更游戏整体速度 动作的慢放化
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"fps"。
- # 游戏速度…60是默认的数值、比这个值低的时候就会放慢。
- # ※这个指令也可以直接变更FPS。请注意处理。
-
- # 変更名 判別 游戏速度
- "缓慢再生" => ["fps", 20],
- "通常再生" => ["fps", 60],
-
- #--------------------------------------------------------------------------
- # ● 赋予状态
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"sta+"。
- # 对象…[0=自分] [1=目标] [2=敌全体] [3=我方全体] [4=除自身以外的我方全体]
- # 状态ID…赋予的状态ID编号。「不能抵抗」状态以外为抵抗。
-
- # 赋予的状态名 判別 对象 状态ID
- "赋予二人攻击状态" => ["sta+", 0, 18],
- "赋予四人攻击状态" => ["sta+", 0, 19],
- "猫" => ["sta+", 0, 20],
-
- #--------------------------------------------------------------------------
- # ● 状态解除
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"sta-"。
- # 对象…[0=自分] [1=目标] [2=敌全体] [3=我方全体] [4=除自身以外的我方全体]
- # 状态ID…解除的状态ID编号
-
- # 赋予的状态名 判別 对象 状态ID
- "解除二人攻击状态" => ["sta-", 3, 18],
- "解除四人攻击状态" => ["sta-", 3, 19],
- #--------------------------------------------------------------------------
- # ● 角色画像文件変更 只能使用于主人公们
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"change"。
- # 复原…战斗后也显示为变化的是false。行走图也将变化。
- # 文件名…变更为的文件名。因为要改变识别处,请不要用文件名加"_1"后缀的方式。
-
- # 変更名 判別 复原 文件名
- "变身成猫" => ["change", true,"$cat"],
- "解除变身" => ["change", true,"$ylva"],
- "攻击变身" => ["change", true,"_1"],
- "技能变身" => ["change", true,"_2"],
- "受击变身" => ["change", true,"_3"],
- "还原变身" => ["change", true,""],
-
- #--------------------------------------------------------------------------
- # ● 图片显示 一名角色对应显示一枚图片
- #--------------------------------------------------------------------------
- # 始X…移动开始位置。从画面所看的X坐标。图片是以左上为原点。
- # 始Y…移动开始位置。从画面所看的Y坐标。
- # 終X…移动完毕X坐标。
- # 終Y…移动完毕Y坐标。
- # 时间…移动时间。数值越大越缓慢。这里是用距离除以时间所得每格行动距离。
- # Z轴…相较HP窗口靠前显示的话为true
- # 图片文件名…图片文件夹内的文件名。
-
- # 判別 始X 始Y 终X 终Y 时间 Z轴 图片文件名
- "特写1开始" => ["pic",-280, 48, 0, 64, 14,false,"Actor2-3"],
- "特写1完毕" => ["pic", 0, 48, 550, 64, 12,false,"Actor2-3"],
-
- #--------------------------------------------------------------------------
- # ● 游戏开关的设置
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"switch"。
- # 开关No…设置哪个开关
- # ON/OFF…将开关ON时是true、OFF时是false
- #
- # 开关设置名 判別 开关No ON/OFF
- "开关No1/ON" => ["switch", 1, true],
-
- #--------------------------------------------------------------------------
- # ● 游戏变量的设置
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"variable"。
- # 变量No…设置哪个开关
- # 设置…[0=代入] [1=加法] [2=减法] [3=乘法] [4=除法] [5=剩余]
- # 设置数值…指定成为演算对象的数值。
- #
- # 变量设置名 判別 变量No 设置 设置数值
- "变量No1/+1" => ["variable", 1, 1, 1],
-
- #--------------------------------------------------------------------------
- # ● 脚本运行的设置
- #--------------------------------------------------------------------------
- # 判別…用于判别、请全部统一填入"script"。
- #
- # 使动作被添加到建议的脚本中。样品p = 1可以添加任何自己想要设置的脚本。
- # 功能中、不能处理文字列。
- #
- # 设置名 判別
- "检测程序" => ["script", "
-
- p = 1
-
- "],
-
- #--------------------------------------------------------------------------
- # ● 其他 没有设定项目。这里所使用的名称请不要改动。
- #--------------------------------------------------------------------------
- # 消去图片…消除显示的图片。
- # 残像ON…留下角色轨迹中的残像。持续连贯动作中的残像。
- # 残像OFF…消除残像。
- # 反转…反转画像。是再次被反转回去,还是坐标不复原保持着反转后的样子。
- # 待机不能移动…行动后、不做待机动作。
- # 击倒许可…目标的HP变成0时、在这个时机可以被击倒。
- # 如果这段没有的话,怪会在所有动作完成时被击倒。
- # 限定于二刀…只是这个下面的单独动作、限定于二刀来处理。
- # 如果不是二刀的话将会跳过、直接执行下一个单独动作。
- # 非限定于二刀…与上边相反,只有在不是二刀的情况下个动作才会有效。
- # 单独处理开始…在全体攻击处理成单独时、是播放行动的开始记号。
- # 单独处理完毕…在全体攻击处理成单独时、是播放行动的完毕记号。
- # 变更初期位置…原坐标(初期位置)变成现在的位置。
- # 解除变更初期位置…将变更初期位置还原。
- # 解除主动…当作战斗行动完毕、下一个角色开始行动。
- # 击倒许可设置也被含在其中、在这之后的所有动作都不会再对对象做出伤害。
- # 完毕…行动完毕。就算没有这里,在所有动作完毕后也会自动识别成完毕。
-
- "消去图片" => ["消去图片"],
- "残像ON" => ["残像ON"],
- "残像OFF" => ["残像OFF"],
- "反转" => ["反转"],
- "待机不能移动"=> ["待机不能移动"],
- "击倒许可" => ["击倒许可"],
- "限定于二刀" => ["限定于二刀"],
- "非限定于二刀" => ["非限定于二刀"],
- "单独处理开始" => ["单独处理开始"],
- "单独处理完毕" => ["单独处理完毕"],
- "变更初期位置" => ["变更初期位置"],
- "解除变更初期位置"=> ["解除变更初期位置"],
- "解除主动" => ["解除主动"],
- "完毕" => ["完毕"]
-
- #--------------------------------------------------------------------------
- # ● 等待相关
- #--------------------------------------------------------------------------
- # 单独动作上只有数值时、将会直接判定为等待时间。
- # 总之,请不要用只有数字的单独动作名。
- # 等待是到下一个动作执行前的等待时间、角色动画的更新不会被停止
-
- }
- #==============================================================================
- # ■ 连贯动作
- #------------------------------------------------------------------------------
- # 将上边的单独动作组合起来、这里是实际做出的动作。
- #==============================================================================
- # 这里的连贯动作名将是下面主人公或者敌方所指定用的。
- # 行动会从左到右依次进行。
- ACTION = {
- #------------------------------- 待机系 -----------------------------------------
- # 连贯动作名 行动
-
- "战斗开始" => ["到战斗开始的位置","坐标初始化"],
-
- "待机" => ["待机"],
-
- "危急待机" => ["不能移动","待机(固定)","异常状态/危急","22"],
-
- "异常状态待机" => ["不能移动","待机(固定)","异常状态/通用","22"],
-
- "睡眠待机" => ["不能移动","待机(固定)","异常状态/睡眠","22"],
-
- "漂浮待机" => ["待机(固定)","6","低空漂浮中","4",
- "低空漂浮中2","4","低空漂浮中3","4",
- "低空漂浮中4","4"],
-
- "气绝" => ["无法战斗"],
-
- "伤害" => ["被伤害","坐标初始化"],
-
- "敌伤害" => ["被伤害","受击变身","24","还原变身","坐标初始化"],
-
- "逃走" => ["我方逃走"],
-
- "敌方逃走" => ["我方逃走","坐标初始化"],
-
- "逃走失败" => ["逃走失败","待机(固定)","8","坐标初始化"],
-
- "选择指令" => ["一步向前移动"],
-
- "选择指令后" => ["坐标初始化"],
-
- "防御" => ["待机(固定)","4","漂浮状态确认","低空漂浮中",
- "2","低空漂浮中2","2","低空漂浮中3","2",
- "低空漂浮中4","2"],
-
- "友方回避" => ["一步向后跳跃","待机(固定)","16","坐标初始化"],
-
- "敌方回避" => ["一步向后跳跃","待机(固定)","16","坐标初始化"],
-
- "胜利" => ["待机(固定)","16","向右(固定)","胜利动作",
- "待机(固定)","待机不能移动","是否已变身成猫",
- "魔法发动动画","解除变身","待机(固定)","待机不能移动",],
-
- "坐标复原" => ["坐标初始化"],
-
- #------------------------------- 強制系 ----------------------------------------
-
- "吴莉嘉合体攻击1" => ["2","目标左前移动","待机(固定)",
- "魔法发动动画","武器下旋转","举起武器",
- "48","右拔出","64","后退初始化"],
-
- "四人合体攻击1" => ["2","四人攻击移动2","待机(固定)","魔法发动动画",
- "武器下旋转","举起武器","90",
- "左拔出","96","后退初始化"],
-
- "四人合体攻击2" => ["2","四人攻击移动3","待机(固定)","魔法发动动画",
- "武器下旋转","举起武器","60","右拔出2","右旋转",
- "对象动画","128","后退初始化"],
-
- "四人合体攻击3" => ["2","四人攻击移动4","待机(固定)","魔法发动动画",
- "武器下旋转","举起武器","34","左拔出2","右旋转",
- "对象动画","144","后退初始化"],
-
- "可以投掷" => ["右旋转一周","4","目标高速移动","一步向后跳跃","4",
- "待机(固定)","一步向后跳跃","待机(固定)","32"],
-
- #--------------------------- 基本アクション系 ----------------------------------
-
- "通常攻击" => ["目标向前移动","武器挥动攻击","对象动画等待",
- "12","武器挥动攻击L","对象动画L","限定于二刀","16",
- "击倒许可","后退初始化"],
-
- "近身技能" => ["目标向前移动","武器挥动攻击","对象动画等待",
- "12","武器挥动攻击L","对象动画L","限定于二刀","16",
- "击倒许可","后退初始化"],
-
- "使用通用技能" => ["一步向前移动","待机(固定)","使用魔法","魔法发动动画",
- "武器下旋转","举起武器","武器挥动攻击",
- "对象动画等待","击倒许可","24","坐标初始化"],
-
- "敌方使用技能" => ["一步向前移动","技能变身","待机(固定)","魔法发动动画",
- "武器下旋转","举起武器","武器挥动攻击",
- "对象动画等待","击倒许可","24","还原变身","坐标初始化"],
-
- "通用技能单独处理"=> ["一步向前移动","魔法发动动画","武器下旋转","举起武器",
- "单独处理开始","武器挥动攻击","对象动画","24",
- "单独处理完毕","击倒许可","坐标初始化"],
-
- "使用物品" => ["目标向前移动","待机(固定)","24","对象动画等待",
- "击倒许可","坐标初始化"],
-
- #------------------------------ スキル系 ---------------------------------------
-
- "乱剑狂舞" => ["残像ON","向前跳跃敲击","武器挥动攻击L","对象动画武器",
- "待机(固定)","16","对象动画武器","武器下旋转",
- "武器上旋转","4","原地跳跃敲击","武器挥动攻击L",
- "对象动画武器","待机(固定)","16","对象动画武器",
- "反转","武器挥动攻击","武器挥动攻击L","12","反转",
- "原地跳跃敲击","武器挥动攻击L","对象动画武器",
- "一步向后跳跃","一步向后跳跃","待机(固定)",
- "对象动画武器","拔出","武器挥动攻击L","击倒许可",
- "残像OFF","16","反转","后退初始化","反转"],
-
- "多段随机攻击" => ["向前跳跃敲击","武器挥动攻击L","对象动画武器","待机(固定)","16",
- "向前跳跃敲击","武器挥动攻击L","对象动画武器","待机(固定)","16",
- "向前跳跃敲击","武器挥动攻击L","对象动画武器","待机(固定)","16",
- "向前跳跃敲击","武器挥动攻击L","对象动画武器","击倒许可","坐标初始化"],
-
- "高速多段攻击" => ["目标向前移动","武器挥动攻击","轻微吹动","对象动画武器",
- "目标向前高速移动","武器挥动攻击","轻微吹动","武器挥动攻击L","对象动画武器",
- "目标向前高速移动","武器挥动攻击","轻微吹动","武器挥动攻击L","对象动画武器",
- "目标向前高速移动","武器挥动攻击","轻微吹动","武器挥动攻击L","对象动画武器",
- "目标向前高速移动","武器挥动攻击","轻微吹动","武器挥动攻击L","对象动画武器",
- "目标向前高速移动","武器挥动攻击","轻微吹动","武器挥动攻击L","对象动画武器",
- "击倒许可","12","坐标初始化"],
-
- "二人同時攻击" => ["二人攻击条件确认","二人攻击目标统一","吴莉嘉连同攻击",
- "目标右前移动","待机(固定)","魔法发动动画","武器下旋转",
- "举起武器","48","斩击/必杀技1","左拔出","64","对象动画",
- "击倒许可","后退初始化","解除二人攻击状态"],
-
- "二人同時攻击准备"=> ["赋予二人攻击状态"],
-
- "四人同時攻击" => ["四人攻击条件确认","四人攻击目标统一","四人攻击1",
- "四人攻击2","四人攻击3","四人攻击移动1","待机(固定)",
- "魔法发动动画","武器下旋转","举起武器","90",
- "斩击/必杀技1","右拔出","64","对象动画等待",
- "击倒许可","后退初始化","合体攻击解除"],
-
- "四人同時攻击准备"=> ["赋予四人攻击状态"],
-
- "武器投掷" => ["一步向前移动","武器挥动攻击","absorb1","待机(固定)",
- "开始武器投掷","12","对象动画武器","击倒许可",
- "放弃武器投掷","坐标初始化"],
-
- "单独全体远距离攻击"=> ["一步向前跳跃","跳跃停止","单独处理开始",
- "以自身为目标","武器挥动攻击","中弹1","8",
- "对象动画武器","单独处理完毕","击倒许可",
- "跳跃着地","坐标初始化"],
-
- "全体远距离攻击" => ["以自身为目标","武器挥动攻击","中弹1","20",
- "对象动画等待","击倒许可"],
-
- "回复连发" => ["目标向前移动","对象动画","武器挥动攻击",
- "16","死亡确认","回复连发","坐标初始化"],
-
- "适当连发" => ["逃走失败","魔法发动动画","武器下旋转","举起武器",
- "8","对象动画","适当连发","坐标初始化"],
-
- "特写" => ["待机(固定)","魔法发动动画","特写1开始",
- "75","特写1完毕","8","目标向前移动",
- "武器挥动攻击","对象动画等待","击倒许可",
- "消去图片","后退初始化"],
-
- "踩踏攻击" => ["跳跃到目标","打击动画","纵向压扁","一步向后跳跃",
- "强力踩踏","打击动画","纵向压扁","一步向后跳跃",
- "强力踩踏","对象动画","纵向压扁","一步向后跳跃",
- "一步向后跳跃","击倒许可","待机(固定)","8","后退初始化"],
-
- "全体攻击1" => ["一步向前移动","待机(固定)","魔法发动动画","武器下旋转",
- "举起武器","全体动画单体化","武器挥动攻击","48",
- "对象动画等待","击倒许可","坐标初始化"],
-
- "变身成猫" => ["一步向前跳跃","待机(固定)","魔法发动动画","32",
- "变身成猫","待机(固定)","猫","32","一步向后跳跃"],
-
- "人体投掷" => ["选择投掷角色","目标移动","举起我方","4",
- "absorb1","投掷目标组合","将我方投掷飞出",
- "投掷我方","待机(固定)","对象动画","坐标初始化",
- "待机(固定)","32"],
-
- # =============共通动作==============
- "剑系统攻击动作" => ["剑系统目标前移动","剑系统攻击","对象动画","10",
- "剑系统攻击后后跳","20","击倒许可","反转",
- "目标面前坐标初始化","反转"],
-
- "枪系统攻击动作" => ["剑系统目标前移动","枪系统攻击","对象动画等待","20",
- "限定于二刀","20","击倒许可","反转","目标面前坐标初始化","反转"],
-
- "敌方无武器的攻击"=> ["目标向前移动","12","攻击变身","敌对象动画无","对象动画等待",
- "12","还原变身","击倒许可","后退初始化"],
-
- # =============己方技能==============
- "幻鬼之阵(友)" => ["残像ON","战场中心移动","使用魔法","插剑动作","70","幻鬼之阵",
- "幻鬼之阵1","对象动画","55","幻鬼之阵2","对象动画","55","幻鬼之阵3","对象动画","55",
- "幻鬼之阵4","对象动画","55","幻鬼之阵2","对象动画","55","幻鬼之阵3","对象动画","55",
- "击倒许可","残像OFF","向后跳跃","反转","坐标初始化","反转"],
- # =============敌方技能==============
- "幻鬼之阵(敌)" => ["残像ON","战场中心移动","技能变身","30","幻鬼之阵",
- "幻鬼之阵1","对象动画","55","幻鬼之阵2","对象动画","55","幻鬼之阵3","对象动画","55",
- "幻鬼之阵4","对象动画","55","幻鬼之阵2","对象动画","55","幻鬼之阵3","对象动画","55",
- "击倒许可","残像OFF","向后跳跃","还原变身","反转","坐标初始化","反转"],
- "终末之冬(敌)" => ["一步向前移动","技能变身","30","终末之冬","90","终末之冬 杀",
- "60","对象动画","60","击倒许可","还原变身","坐标初始化"],
- #-------------------------------------------------------------------------------
- "完毕" => ["完毕"]}
- end
- #==============================================================================
- # ■ Game_Actor
- #------------------------------------------------------------------------------
- # 设定主人公的基本动作类
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 从主人公ID中确定空手时的动作(无武器时)
- #--------------------------------------------------------------------------
- # when 1 ←这个数字是主人公ID
- # return "通常攻击" ←填入对应的连贯动作名
- def non_weapon
- case @actor_id
- when 1
- return "通常攻击"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "通常攻击"
- end
- #--------------------------------------------------------------------------
- # ● 通常待机
- #--------------------------------------------------------------------------
- def normal
- case @actor_id
- when 1
- return "待机"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "待机"
- end
- #--------------------------------------------------------------------------
- # ● 危急(HP1/4以下)
- #--------------------------------------------------------------------------
- def pinch
- case @actor_id
- when 1
- return "危急待机"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "危急待机"
- end
- #--------------------------------------------------------------------------
- # ● 防御
- #--------------------------------------------------------------------------
- def defence
- case @actor_id
- when 1
- return "防御"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "防御"
- end
- #--------------------------------------------------------------------------
- # ● 伤害 对象动画時、取得命中时的动作
- #--------------------------------------------------------------------------
- def damage_hit
- case @actor_id
- when 1
- return "伤害"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "伤害"
- end
- #--------------------------------------------------------------------------
- # ● 回避 对象动画時、取得沒命中时的动作
- #--------------------------------------------------------------------------
- def evasion
- case @actor_id
- when 1
- return "友方回避"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "友方回避"
- end
- #--------------------------------------------------------------------------
- # ● 选择指令前動作
- #--------------------------------------------------------------------------
- def command_b
- case @actor_id
- when 1
- return "选择指令"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "选择指令"
- end
- #--------------------------------------------------------------------------
- # ● 选择指令后動作
- #--------------------------------------------------------------------------
- def command_a
- case @actor_id
- when 1
- return "选择指令后"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "选择指令后"
- end
- #--------------------------------------------------------------------------
- # ● 逃走成功
- #--------------------------------------------------------------------------
- def run_success
- case @actor_id
- when 1
- return "逃走"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "逃走"
- end
- #--------------------------------------------------------------------------
- # ● 逃走失败
- #--------------------------------------------------------------------------
- def run_ng
- case @actor_id
- when 1
- return "逃走失败"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "逃走失败"
- end
- #--------------------------------------------------------------------------
- # ● 胜利
- #--------------------------------------------------------------------------
- def win
- case @actor_id
- when 1
- return "胜利"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "胜利"
- end
- #--------------------------------------------------------------------------
- # ● 进入战斗时的动作
- #--------------------------------------------------------------------------
- def first_action
- case @actor_id
- when 1
- return "战斗开始"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "战斗开始"
- end
- #--------------------------------------------------------------------------
- # ● 动作被中断时的恢复动作
- #--------------------------------------------------------------------------
- def recover_action
- case @actor_id
- when 1
- return "坐标复原"
- end
- # 上述主人公ID以外的其他主人公全部使用的连贯动作名
- return "坐标复原"
- end
- #--------------------------------------------------------------------------
- # ● 影图像 在人物行走图文件夹中读取
- #--------------------------------------------------------------------------
- # return "shadow00" ←在这里填入想要设定的话像文件名
- def shadow
- case @actor_id
- when 1
- return "shadow00"
- end
- # 上述主人公ID以外的其他主人公全部使用的影图像
- return "shadow00"
- end
- #--------------------------------------------------------------------------
- # ● 略微调整影图像的位置
- #--------------------------------------------------------------------------
- # return [横坐标, 縦坐标]
- def shadow_plus
- case @actor_id
- when 1
- return [ 0, 4]
- end
- # 上述主人公ID以外的其他主人公全部使用的位置
- return [ 0, 4]
- end
- end
- #==============================================================================
- # ■ Game_Enemy
- #------------------------------------------------------------------------------
- # 敌方的基本动作设定
- #==============================================================================
- class Game_Enemy < Game_Battler
- #--------------------------------------------------------------------------
- # ● 从敌方ID来确定未装备武器时的通常攻击动作
- #--------------------------------------------------------------------------
- # when 1 ←这里的数字是敌方ID编号
- # return "敌方无武器的攻击" ←请填入对应的连贯动作名
- def base_action
- case @enemy_id
- when 1
- return "敌方无武器的攻击"
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
- return "敌方无武器的攻击"
- end
- #--------------------------------------------------------------------------
- # ● 通常待机
- #--------------------------------------------------------------------------
- def normal
- case @enemy_id
- when 1
- return "待机"
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
- return "待机"
- end
- #--------------------------------------------------------------------------
- # ● 危急(HP1/4以下)
- #--------------------------------------------------------------------------
- def pinch
- case @enemy_id
- when 1
- return "待机"
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
- return "待机"
- end
- #--------------------------------------------------------------------------
- # ● 防御
- #--------------------------------------------------------------------------
- def defence
- case @enemy_id
- when 1
- return "防御"
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
- return "防御"
- end
- #--------------------------------------------------------------------------
- # ● 伤害 对象动画時、取得命中时的动作
- #--------------------------------------------------------------------------
- def damage_hit
- case @enemy_id
- when 1
- return "伤害"
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
- return "敌伤害"
- end
- #--------------------------------------------------------------------------
- # ● 回避 对象动画時、取得未命中时的动作
- #--------------------------------------------------------------------------
- def evasion
- case @enemy_id
- when 1
- return "敌方回避"
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
- return "敌方回避"
- end
- #--------------------------------------------------------------------------
- # ● 逃走
- #--------------------------------------------------------------------------
- def run_success
- case @enemy_id
- when 1
- return "敌方逃走"
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
- return "敌方逃走"
- end
- #--------------------------------------------------------------------------
- # ● 进入战斗时的动作
- #--------------------------------------------------------------------------
- def first_action
- case @enemy_id
- when 1
- return "战斗开始"
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
- return "战斗开始"
- end
- #--------------------------------------------------------------------------
- # ● 动作被中断时的恢复动作
- #--------------------------------------------------------------------------
- def recover_action
- case @enemy_id
- when 1
- return "坐标复原"
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID动作
- return "坐标复原"
- end
- #--------------------------------------------------------------------------
- # ● 影图像 在人物行走图文件夹中读取
- #--------------------------------------------------------------------------
- # return "shadow01" ←在这里填入想要设定的话像文件名。
- def shadow
- case @enemy_id
- when 1
- return "shadow01"
- when 30
- return ""
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID影图像
- return "shadow01"
- end
- #--------------------------------------------------------------------------
- # ● 略微调整影图像的位置
- #--------------------------------------------------------------------------
- # return [横坐标, 縦坐标]
- def shadow_plus
- case @enemy_id
- when 3
- return [ 0, -8]
- when 301 # 索妮娅
- return [ 0, 8]
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID位置
- return [ 0, 0]
- end
- #--------------------------------------------------------------------------
- # ● 敌方武器设定 在动作和动画时,武器也被显示。
- #--------------------------------------------------------------------------
- # return 1 ←这个数字是武器ID。0的话将被判别为空手。
- # 只有在敌方动画NO的时候画像才被显示。
- def weapon
- case @enemy_id
- when 1
- return 0
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID
- return 0
- end
- #--------------------------------------------------------------------------
- # ● 战斗配置的略微调整 在这里可以设置数据库中所不能设置的广范围坐标
- #--------------------------------------------------------------------------
- # return [ 0, 0] => [X坐标、Y坐标] 这个数值从数据库上的配置上变化
- def position_plus
- case @enemy_id
- when 1
- return [0, 0]
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID坐标调整
- return [ 0, 0]
- end
- #--------------------------------------------------------------------------
- # ● 敌方击倒(击破时的退场)方式
- #--------------------------------------------------------------------------
- # 被击倒画像残留的为1、普通为2、BOSS型为3
- def collapse_type
- case @enemy_id
- when 1
- return 2
- when 30 #敌方ID为30,BOSS型击倒!
- return 3
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID击倒方式
- return 2
- end
- #--------------------------------------------------------------------------
- # ● 敌方行动回数 1回合做几次行动
- #--------------------------------------------------------------------------
- # 回数 确率 补正
- # return [ 2, 100, 50]
- #
- # 回数…最大的行动回数
- # 确率…下次行动能否成功的成功率。数值为%
- # 补正…速度修正。行动的每次数值%后得出的值
- def action_time
- case @enemy_id
- when 1
- return [ 1, 100, 100]
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID行动回数
- return [ 1, 100, 100]
- end
- #--------------------------------------------------------------------------
- # ● 敌方动画
- #--------------------------------------------------------------------------
- # 敌方被作成动画? true是是跟主人公同等对待。
- # [设定方法]
- # 1.敌方的动画画像变成行走图
- # 2.数据库的敌方角色名、参照着行走图文件名填写
- def anime_on
- case @enemy_id
- when 1,2
- return true
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID动画设定
- return false
- end
- #--------------------------------------------------------------------------
- # ● 敌方动画時的自动反转
- #--------------------------------------------------------------------------
- # 如果想自动反转上面设定为NO的敌方画像和武器动画时为true
- def action_mirror
- case @enemy_id
- when 1,2
- return true
- end
- # 上述敌方ID以外的其他敌方队员全部使用的武器ID动画设定
- return false
- end
- end
- module RPG
- #==============================================================================
- # ■ module RPG
- #------------------------------------------------------------------------------
- # 设定状态动作。
- #==============================================================================
- class State
- #--------------------------------------------------------------------------
- # ● 指定ID 根据状态改变通常待机、危急时的动作。
- #--------------------------------------------------------------------------
- # when 1 ←这个数字是状态ID
- # return "气绝" ←填入对应的连贯动作名
- def base_action
- case @id
- when 1 # 无法战斗(HP0)时。最优先。
- return "气绝"
- when 2,3,4,5,7
- return "异常状态待机"
- when 6
- return "睡眠待机"
- when 17
- return "漂浮待机"
- end
- # 上述状态ID以外的其他状态全部使用的连贯动作
- return "待机"
- end
- #--------------------------------------------------------------------------
- # ● 扩张设定 从状态ID确定扩张设定。可以重复。
- #--------------------------------------------------------------------------
- # "自动复活/50"…无法战斗时自动复活。不要解除无法战斗。
- # /后的数字是回复时的HP(最大值的比例%)回复后状态会自动解除
- # "魔法反弹/39"…反弹魔法(物理攻击以外)技能。/后填入反射时显示的动画ID编号
- # "物理反弹/39"…反弹物理攻击(包含物理技能)。/后填入反射时显示的动画ID编号
- # "魔法无效/39"…魔法(物理攻击以外)技能无效化。/后填入无效时显示的动画ID编号
- # "物理无效/39"…物理攻击(包含物理技能)无效化。/后填入无效时显示的动画ID编号
- # "成本吸収"…受到技能时将他的成本还原到自身。数值不显示。
- # "0回合解除"…按照行动顺序的回合数解除状态。
- # "敌方除外"…让敌方不显示这个状态
- # "无POP"…附加这个状态時、伤害窗口上不显示状态名
- # "不显示ICON"…在状态窗口上不显示状态ICON
- # "禁止状态动作"…附加这个状态时不会改变人物待机状态
- # "连续伤害"…调用下面的连续伤害
- # "无"…无扩张
- def extension
- case @id
- when 1 # 无法战斗
- return ["无POP","敌方除外"]
- when 2 # 毒
- return ["敌方除外"]
- when 218
- return ["0回合解除","不显示ICON"]
- when 219
- return ["0回合解除","不显示ICON"]
- when 220
- return ["不显示ICON","禁止状态动作"]
- end
- # 上記のID以外すべてに適用される拡張設定
- return ["无"]
- end
- #--------------------------------------------------------------------------
- # ● 连续伤害扩张设置 包含连续回复
- #--------------------------------------------------------------------------
- # when 1 ←这个数字是状态ID。上面的只有填写了"连续伤害"的扩张才会有这个效果
- # 可以多数设置。例)[["hp",0,5,true],["mp",0,5,true]]
- #
- # 对象 定数 比例 POP 无法战斗许可
- # return [["hp", 0, 10, true, true]]
- #
- # 对象…比例伤害对象是 HP的话为"hp" MP为"mp"
- # 定数…这个数值直接是伤害值。如果是负数时便成为回復。数值上多少会有些误差
- # 比例…对象的最大值的比例伤害。数值以%计算。数值上多少会有些误差
- # POP…在战斗画面上显示数值是true
- # 无法战斗许可…许可HP0的情况是true
- def slip_extension
- case @id
- when 2 # 毒
- return [["hp", 0, 10, true, true]]
- end
- return []
- end
- end
- #==============================================================================
- # ■ module RPG
- #------------------------------------------------------------------------------
- # 设置武器动作
- #==============================================================================
- class Weapon
- #--------------------------------------------------------------------------
- # ● 动作指定 从装备着的武器ID来决定通常攻击的动作。
- #--------------------------------------------------------------------------
- # when 1 ←这个数字是武器ID
- # return "通常攻击" ←请填入对应的连贯动作名
- def base_action
- case @base_id
- when 2
- return "剑系统攻击动作"
- when 3
- return "枪系统攻击动作"
- end
- # 上述ID以外的其他全部使用的动作
- return "通常攻击"
- end
- #--------------------------------------------------------------------------
- # ● 图像指定 从装备着的武器ID来决定通常攻击的动作。
- #--------------------------------------------------------------------------
- # return "001-Weapon01" ←请填入对应的武器图像的文件名
- # 武器图像请放入人物行走图文件夹中
- # 使用ICON时、在ID上没有的全部使用ICON来表示
- # 特定的武器想要让他们不显示的话请用空白的图像。
- def graphic
- case @base_id
- when 1
- return ""
- end
- # 使用上述ID以外的全ICON画像
- return ""
- end
- #--------------------------------------------------------------------------
- # ● 飞出动画中贴附武器图像 自人物行走图文件夹中读取
- #--------------------------------------------------------------------------
- # 飞出动画用武器画像另行设定。显示弓和箭之类的。
- # 在这里没有被设置的武器会和上面的图像作相同处理。
- def flying_graphic
- case @base_id
- when 1
- return ""
- end
- # 上述ID以外一律使用的图像
- return ""
- end
- end
- #==============================================================================
- # ■ module RPG
- #------------------------------------------------------------------------------
- # 技能动作设定。
- #==============================================================================
- class Skill
- #--------------------------------------------------------------------------
- # ● 从技能ID决定动作。
- #--------------------------------------------------------------------------
- def base_action
- case @id
- when 84
- return "武器投掷"
- when 86
- return "高速多段攻击"
- when 87
- return "单独全体远距离攻击"
- when 88
- return "全体远距离攻击"
- when 89
- return "多段随机攻击"
- when 90
- return "回复连发"
- when 91
- return "适当连发"
- when 92
- return "通常攻击"
- when 93
- return "特写"
- when 94
- return "踩踏攻击"
- when 95
- return "全体攻击1"
- when 96
- return "通用技能单独处理"
- when 97
- return "变身成猫"
- when 98
- return "二人同時攻击"
- when 99
- return "二人同時攻击准备"
- when 100
- return "四人同時攻击"
- when 101
- return "四人同時攻击准备"
- when 102
- return "四人同時攻击准备"
- when 103
- return "四人同時攻击准备"
- when 104
- return "人体投掷"
- when 201,253
- return "敌方无武器的攻击"
- when 251
- return "幻鬼之阵(敌)"
- when 252
- return "终末之冬(敌)"
- when 251..500
- return "敌方使用技能"
- end
- # 上述ID以外的其他全部使用的动作
- return "使用通用技能"
- end
- #--------------------------------------------------------------------------
- # ● 扩张设定 从技能ID决定扩张设定。可以重复。
- #--------------------------------------------------------------------------
- # "必中"…攻击绝对不会被回避
- # "HP消費"…将MP消费改为HP消费
- # "%成本MAX"…技能成本变为以最大MP(HP)的比例取值。例)MAXMP500的成本10是消费MP50
- # "%成本NOW"…技能成本变为以现在MP(HP)的比例取值。例)现MP100的成本10是消费MP10
- # "无视反射"…无视魔法、物理技能反射和无效化状态
- # "%伤害MAX/30"…伤害计算变为以对象的最大HP(MP)的比例取值。/后的数值为%值伤害
- # "%伤害NOW/30"…伤害计算变为以对象的现在HP(MP)的比例取值。/后的数值为%值伤害
- # "成本威力"…根据使用者的最大MP(HP)判别消費MP(HP)的比例威力。MAX消費是原本威力、MAX10%是原有威力的1/10
- # "现HP威力"…根据使用者的最大HP改变现在HP的比例威力。MAX是原本威力、MAX10%是原有威力的1/10
- # "现MP威力"…根据使用者的最大MP改变现在MP的比例威力。MAX是原本威力、MAX10%是原有威力的1/10
- # "MP消耗减半无效"…防具上的定义「MP消耗减半」被无效化
- # "不显示HELP"…动作时、帮助窗口上不显示技能名
- # "全区域"…目标范围为敌我方全体
- # "随机目标"…目标内随机选择一个对象
- # "自身以外"…在目标内将自己排除
- # "伤害动作禁止"…不显示伤害命中时的动作
- # "行动前无闪光"…行动时角色不发光
- # "无"…无扩张
- def extension
- case @id
- when 86
- return ["伤害动作禁止"]
- when 89
- return ["随机目标"]
- when 94
- return ["伤害动作禁止"]
- when 96
- return ["全域"]
- when 98
- return ["伤害动作禁止"]
- when 99
- return ["不显示HELP","行动前无闪光"]
- when 100
- return ["伤害动作禁止"]
- when 101
- return ["不显示HELP","行动前无闪光"]
- when 102
- return ["不显示HELP","行动前无闪光"]
- when 103
- return ["不显示HELP","行动前无闪光"]
- end
- # 上述ID以外的其他全部使用的拡張設定
- return ["无"]
- end
- #--------------------------------------------------------------------------
- # ● 飞出动画上贴附的画像 自人物行走图文件夹中读取
- #--------------------------------------------------------------------------
- # 指定技能ID的画像
- def flying_graphic
- case @id
- when 1
- return ""
- end
- # 上述ID以外为画像未使用
- return ""
- end
- end
- #==============================================================================
- # ■ module RPG
- #------------------------------------------------------------------------------
- # 物品动作设定。
- #==============================================================================
- class Item
- #--------------------------------------------------------------------------
- # ● 根据物品ID决定动作。
- #--------------------------------------------------------------------------
- def base_action
- case @id
- when 1
- return "使用物品"
- end
- # 上述ID以外的其他全部使用的动作
- return "使用物品"
- end
- #--------------------------------------------------------------------------
- # ● 扩张设定 根据物品ID决定扩张设定。可以重复。
- #--------------------------------------------------------------------------
- # "必中"…攻击绝对不会被回避
- # "反射无视"…无视魔法、物理反射和无效化状态
- # "不显示HELP"…帮助窗口上不显示物品名
- # "全区域"…目标范围为敌我全体
- # "随机目标"…目标内中随机选择一个对象
- # "自身以外"…目标内中将自身排除
- # "伤害动作禁止"…不显示伤害命中时的动作
- # "行动前无闪光"…行动时角色不发光
- # "无"…无扩张
- def extension
- case @id
- when 1
- return ["无"]
- end
- # 上述ID以外的其他全部使用的拡張設定
- return ["无"]
- end
- end
- end
复制代码 脚本2:- #==============================================================================
- # ■ Sprite_Battler Ver3.3
- #------------------------------------------------------------------------------
- # 角色用于现实的战斗动作。
- #==============================================================================
- class Sprite_Battler < Sprite_Base
- #--------------------------------------------------------------------------
- # ● 初期化
- #--------------------------------------------------------------------------
- def initialize(viewport, battler = nil)
- super(viewport)
- @battler = battler
- @battler_visible = false
- @effect_type = 0 # 效果的种类
- @effect_duration = 0 # 效果的残留时间
- @move_x = 0 # 已变化的X坐标的累计
- @move_y = 0 # 已变化的Y坐标的累计
- @move_z = 0 # 已变化的Z坐标的累计
- @distanse_x = 0 # X坐标的移动距离
- @distanse_y = 0 # Y坐标的移动距离
- @moving_x = 0 #1单位所相当的X坐标移动距离
- @moving_y = 0 #1单位所相当的Y坐标移动距离
- @move_speed_x = 0 # X坐标的移动速度
- @move_speed_y = 0 # Y坐标的移动速度
- @move_speed_plus_x = 0 # X坐标在加减速时的补充移动速度
- @move_speed_plus_y = 0 # Y坐标在加减速时的补充移动速度
- @move_boost_x = 0 # X坐标加速度
- @move_boost_y = 0 # Y坐标加速度
- @jump_time = 0 # 跳跃时间
- @jump_time_plus = 0 # 跳跃时间补充
- @jump_up = 0 # 跳跃上升
- @jump_down = 0 # 跳跃下降
- @jump_size = 0 # 跳跃高度
- @float_time = 0 # 漂浮时间
- @float_up = 0 # 1单位所相当于的浮遊高度
- @jump_plus = 0 # 根据跳跃补充影位置
- @angle = 0 # 旋转角度
- @angling = 0 # 1单位所相当于的旋转角度
- @angle_time = 0 # 旋转时间
- @angle_reset = 0 # 是否初始化角度
- @zoom_x = 0 # 横向放大率
- @zoom_y = 0 # 纵向放大率
- @zooming_x = 0 # 1单位所相当于的横向放大率
- @zooming_y = 0 # 1单位所相当于的纵向放大率
- @zoom_time = 0 # 放大时间
- @zoom_reset = 0 # 是否初始化放大
- @target_battler = [] # 目标角色情报
- @now_targets = [] # 目标角色记忆
- @pattern = 0 # 横图片位置(更新位置)
- @pattern_back = false # 循环标志
- @wait = 0 # 到下个动作的等待时间
- @unloop_wait = 0 # 非循环系动画完毕时的等待时间
- @action = [] # 行动
- @anime_kind = 0 # 纵图片位置(动画种类位置)
- @anime_speed = 0 # 图片更新速度
- @frame = 0 # 被消费图片更新时间
- @anime_loop = 0 # 循环方式
- @anime_end = false # 角色的动画是否完毕
- @anime_freeze = false # 是否是固定动画
- @anime_freeze_kind = false # 固定图案位置
- @anime_moving = false # 是否在飞出动画中
- @base_width = N01::ANIME_PATTERN # 图片的横分割数
- @base_height = N01::ANIME_KIND # 图片的纵分割数
- @width = 0 # 横矩形
- @height = 0 # 纵矩形
- @picture_time = 0 # 图片显示时间
- @individual_targets = [] # 单独处理的保持目标
- @balloon_duration = 65 # 飞出动画时间
- @reverse = false # 动画的反向再生标志
- # 角色不存在的时候将中断处理
- return @battler_visible = false if @battler == nil
- # 角色是主人公时、或者敌方动画为NO时
- @anime_flug = true if @battler.actor?
- @anime_flug = true if [email protected]? && @battler.anime_on
- end
- #--------------------------------------------------------------------------
- # ● 角色作成
- #--------------------------------------------------------------------------
- def make_battler
- # 初期配置的取得
- @battler.base_position
- # 色相通过角色认别
- @battler_hue = @battler.battler_hue
- # 角色是主人公时、或者敌方动画为NO时
- if @anime_flug
- # 准备武器
- @weapon_R = Sprite_Weapon.new(viewport,@battler)
- # 取得我方人物名、敌人角色名
- @battler_name = @battler.character_name if @battler.actor?
- @battler_name = @battler.battler_name unless @battler.actor?
- # 敌方角色是主人公时、或者敌方动画为NO时为NO的时候 画像被角色是主人公时、或者敌方动画为NO时
- self.mirror = true if [email protected]? && @battler.action_mirror
- # 是不是利用行图片图来改变转送前的矩形尺寸的认识处
- self.bitmap = Cache.character(@battler_name) if N01::WALK_ANIME
- self.bitmap = Cache.character(@battler_name + "_1") unless N01::WALK_ANIME
- # 获取转送前的矩形
- @width = self.bitmap.width / @base_width
- @height = self.bitmap.height / @base_height
- # 矩形设定
- @sx = @pattern * @width
- @sy = @anime_kind * @height
- # 角色本体的描绘
- self.src_rect.set(@sx, @sy, @width, @height)
- # 不作动画的角色时
- else
- # bitmap的获取、设定
- @battler_name = @battler.battler_name
- self.bitmap = Cache.battler(@battler_name, @battler_hue)
- @width = bitmap.width
- @height = bitmap.height
- end
- # 偷袭时画像角色是主人公时、或者敌方动画为NO时
- if $back_attack && @battler.actor?
- self.mirror = true
- elsif $back_attack && [email protected]?
- self.mirror = true
- self.mirror = false if @battler.action_mirror
- else
- self.mirror = false
- self.mirror = true if [email protected]? && @battler.action_mirror
- end
- # ....
- @weapon_R.mirroring if self.mirror && @weapon_R != nil
- # 位置初期化
- @battler.reset_coordinate
- # 决定原点
- self.ox = @width / 2
- self.oy = @height * 2 / 3
- # 设定偷袭时的坐标
- update_move
- # 准备飞出动画的精灵
- @move_anime = Sprite_MoveAnime.new(viewport,battler)
- # 准备图片用精灵
- @picture = Sprite.new
- # 作成伤害精灵
- @damage = Sprite_Damage.new(viewport,battler)
- end
- #--------------------------------------------------------------------------
- # ● 影作成
- #--------------------------------------------------------------------------
- def make_shadow
- @shadow.dispose if @shadow != nil
- @battler_hue = @battler.battler_hue
- @shadow = Sprite.new(viewport)
- @shadow.z = self.z - 4
- @shadow.visible = false
- # 准备角色的影子精灵
- @shadow.bitmap = Cache.character(@battler.shadow)
- @shadow_height = @shadow.bitmap.height
- # 影位置的稍微调整
- @shadow_plus_x = @battler.shadow_plus[0] - @width / 2
- @shadow_plus_y = @battler.shadow_plus[1]
- # 配合角色画像的大小使用影画像
- @shadow.zoom_x = @width * 1.0 / @shadow.bitmap.width
- # 更新
- update_shadow
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- self.bitmap.dispose if self.bitmap != nil
- @weapon_R.dispose if @weapon_R != nil
- @move_anime.dispose if @move_anime != nil
- @picture.dispose if @picture != nil
- @shadow.dispose if @shadow != nil
- @damage.dispose if @damage != nil
- @balloon.dispose if @balloon != nil
- mirage_off
- # 画像変更リセット
- @battler.graphic_change(@before_graphic) if @before_graphic != nil
- super
- end
- #--------------------------------------------------------------------------
- # ● 伤害动作 action = [动画ID,角色是主人公时、或者敌方动画为NO时标志,反方向许可]
- #--------------------------------------------------------------------------
- def damage_action(action)
- damage = @battler.hp_damage
- damage = @battler.mp_damage if @battler.mp_damage != 0
- # 如果HP和MP两个同时做出伤害
- if @battler.hp_damage != 0 && @battler.mp_damage != 0
- @battler.double_damage = true
- damage = @battler.hp_damage
- end
- # 吸收攻击使HP为0的处理
- if action[0] == "absorb"
- absorb = true
- action[0] = nil
- end
- # 只有在命中时动画才被执行
- unless @battler.evaded or @battler.missed or action[0] == nil
- @battler.animation_id = action[0]
- @battler.animation_mirror = action[1]
- end
- # 执行伤害动画
- start_action(@battler.damage_hit) if damage > 0 && action[2]
- # 攻击没有命中时执行回避动画
- if @battler.evaded or @battler.missed
- start_action(@battler.evasion) if action[2]
- Sound.play_evasion
- end
- @damage.damage_pop unless absorb or action[3] != nil
- end
- #--------------------------------------------------------------------------
- # ● 伤害数值POP
- #--------------------------------------------------------------------------
- def damage_pop(damage)
- @damage.damage_pop(damage)
- end
- #--------------------------------------------------------------------------
- # ● 战斗开始行动
- #--------------------------------------------------------------------------
- def first_action
- # 检查能否行动、只有在不能的情况下那个状态的动作开始
- action = @battler.first_action unless @battler.restriction >= 4
- action = $data_states[@battler.state_id].base_action if @battler.states[0] != nil && @battler.restriction >= 4
- start_action(action)
- # 影スプライトを用意
- make_shadow if N01::SHADOW
- end
- #--------------------------------------------------------------------------
- # ● 动作开始
- #--------------------------------------------------------------------------
- def start_action(kind)
- # 初期化各种动作
- reset
- #记录现在取得的待机动作
- stand_by
- # 决定新的动作内容
- @action = N01::ACTION[kind].dup
- # 从行动配列的前头开始移动
- active = @action.shift
- # 自动完毕
- @action.push("完毕")
- # 确定现在的动作
- @active_action = N01::ANIME[active]
- # 等待设定
- @wait = active.to_i if @active_action == nil
- # 单独动作开始
- action
- end
- #--------------------------------------------------------------------------
- # ● 强制单独动作开始
- #--------------------------------------------------------------------------
- def start_one_action(kind,back)
- # 初期化各种动作
- reset
- # 记录现在取得的待机动作
- stand_by
- # 设置坐标初始化动作
- @action = [back]
- # 自动完毕
- @action.push("完毕")
- # 确定现在的动作
- @active_action = N01::ANIME[kind]
- # 单独动作开始
- action
- end
- #--------------------------------------------------------------------------
- # ● 到下一个动作
- #--------------------------------------------------------------------------
- def next_action
- # 等待中时取消
- return @wait -= 1 if @wait > 0
- # 或者全部图片动画没有被完成时取消
- return if @anime_end == false
- # 最后的图片显示等待
- return @unloop_wait -= 1 if @unloop_wait > 0
- # 从行动配列的前头开始移动
- active = @action.shift
- # 确定现在的动作
- @active_action = N01::ANIME[active]
- # 等待设定
- @wait = active.to_i if @active_action == nil
- # 单独动作开始
- action
- end
- #--------------------------------------------------------------------------
- # ● 待机动作
- #--------------------------------------------------------------------------
- def stand_by
- # 到通常待机
- @repeat_action = @battler.normal
- # HP为1/4时显示危急表情
- @repeat_action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
- # 防御中
- @repeat_action = @battler.defence if @battler.guarding?
- # 如果什么状态都没有时完毕
- return if @battler.state_id == nil
- for state in @battler.states.reverse
- # 动作禁止的状态时跳过处理
- next if state.extension.include?("禁止状态动作")
- # 敌方被动作禁止状态时跳过处理
- next if @battler.is_a?(Game_Enemy) && state.extension.include?("敌方除外")
- # 状态的表情
- @repeat_action = state.base_action
- end
- end
- #--------------------------------------------------------------------------
- # ● 待机动作的插入
- #--------------------------------------------------------------------------
- def push_stand_by
- action = @battler.normal
- action = @battler.pinch if @battler.hp <= @battler.maxhp / 4
- action = @battler.defence if @battler.guarding?
- for state in @battler.states.reverse
- # 动作禁止的状态时跳过处理
- next if state.extension.include?("禁止状态动作")
- # 敌方被动作禁止状态时跳过处理
- next if @battler.is_a?(Game_Enemy) && state.extension.include?("敌方除外")
- # 状态的表情
- action = state.base_action
- end
- @repeat_action = action
- # 插入
- @action.delete("完毕")
- act = N01::ACTION[action].dup
- for i in 0...act.size
- @action.push(act[i])
- end
- @action.push("完毕")
- @anime_end = true
- end
- #--------------------------------------------------------------------------
- # ● 各种变化的初期化
- #--------------------------------------------------------------------------
- def reset
- self.zoom_x = self.zoom_y = 1
- self.oy = @height * 2 / 3
- @angle = self.angle = 0
- @anime_end = true
- @non_repeat = false
- @anime_freeze = false
- @unloop_wait = 0
- end
- #--------------------------------------------------------------------------
- # ● 跳跃的初期化
- #--------------------------------------------------------------------------
- def jump_reset
- @battler.jump = @jump_time = @jump_time_plus = @jump_up = @jump_down = 0
- @jump_size = @jump_plus = @float_time = @float_up = 0
- end
- #--------------------------------------------------------------------------
- # ● 受取目标情报
- #--------------------------------------------------------------------------
- def get_target(target)
- # 单独处理中是中止(全区域中自身被卷
- return if @battler.individual
- @target_battler = target
- end
- #--------------------------------------------------------------------------
- # ● 动作情报在角色中收藏
- #--------------------------------------------------------------------------
- def send_action(action)
- @battler.play = 0
- @battler.play = action if @battler.active
- end
- #--------------------------------------------------------------------------
- # ● 角色追加
- #--------------------------------------------------------------------------
- def battler_join
- if @battler.exist? && !@battler_visible
- # 从战斗不能的復活时的处理被跳过
- if @battler.revival && @anime_flug
- return @battler.revival = false
- elsif @battler.revival && !@anime_flug
- @battler.revival = false
- self.visible = true
- return
- end
- @anime_flug = true if @battler.actor?
- @anime_flug = true if [email protected]? && @battler.anime_on
- make_battler
- first_action
- end
- end
- #--------------------------------------------------------------------------
- # ● 图片更新 ※再定义
- #--------------------------------------------------------------------------
- def update
- super
- # 角色不存在时跳过
- return self.bitmap = nil if @battler == nil
- # 追加角色
- battler_join
- # 到下一个动作
- next_action
- # 动画图像更新
- update_anime_pattern
- # 目标更新
- update_target
- # 強制アクション更新
- update_force_action
- # 坐标更新
- update_move
- # 影更新
- update_shadow if @shadow != nil
- # 武器更新
- @weapon_R.update if @weapon_action
- # 漂浮更新
- update_float if @float_time > 0
- # 旋转更新
- update_angle if @angle_time > 0
- # 放大缩小更新
- update_zoom if @zoom_time > 0
- # 残像更新
- update_mirage if @mirage_flug
- # 图片更新
- update_picture if @picture_time > 0
- # 飞出动画更新
- update_move_anime if @anime_moving
- # 飞出动画更新(图片动画)
- update_balloon if @balloon_duration <= 64
- # 伤害精灵更新
- @damage.update if @damage != nil
- setup_new_effect
- update_effect
- update_battler_bitmap
- end
- #--------------------------------------------------------------------------
- # ● 动画图像更新
- #--------------------------------------------------------------------------
- def update_anime_pattern
- # 更新时间在到之前跳过
- return @frame -= 1 if @frame != 0
- # 只有在必要的时候更新武器动画
- @weapon_R.action if @weapon_action && @weapon_R != nil
- # 动画到最后是检查是否是循环
- if @pattern_back
- # 往返循环
- if @anime_loop == 0
- # 反向再生
- if @reverse
- @pattern += 1
- if @pattern == @base_width - 1
- @pattern_back = false
- @anime_end = true
- end
- # 通常再生
- else
- @pattern -= 1
- if @pattern == 0
- @pattern_back = false
- @anime_end = true
- end
- end
- # 单程或者是不循环时
- else
- @anime_end = true
- if @anime_loop == 1
- @pattern = 0 if !@reverse
- @pattern = @base_width - 1 if @reverse
- @pattern_back = false
- end
- end
- # 推进动画
- else
- if @reverse
- @pattern -= 1
- @pattern_back = true if @pattern == 0
- else
- @pattern += 1
- @pattern_back = true if @pattern == @base_width - 1
- end
- end
- # 初期化更新时间
- @frame = @anime_speed
- # 动画固定时,固定横矩形
- return if @anime_freeze
- # 设定转送处的矩形
- return unless @anime_flug
- @sx = @pattern * @width
- @sy = @anime_kind * @height
- self.src_rect.set(@sx, @sy, @width, @height)
- end
- #--------------------------------------------------------------------------
- # ● 动画图像更新
- #--------------------------------------------------------------------------
- def update_target
- # 目标确认
- return if @battler.force_target == 0
- # 单独处理中中止(全区域中自身被卷入时目标情报是不是)
- return if @battler.individual
- @target_battler = @battler.force_target[1]
- @battler.force_target = 0
- end
- #--------------------------------------------------------------------------
- # ● 強制动作更新 action = [识别,复原,实行动作]
- #--------------------------------------------------------------------------
- def update_force_action
- # 确认強制动作
- action = @battler.force_action
- return if action == 0
- @battler.force_action = 0
- # 主动中不能插入
- return if @battler.active
- # 击倒时就那样直接连接行动
- return collapse_action if action[0] == "N01collapse"
- # 单独时就那样直接连接
- return start_one_action(action[2],action[1]) if action[0] == "单独"
- # 通用作为动作对待
- start_action(action[2])
- # 有无坐标复原
- return if action[1] == ""
- # 完毕位置替换成重复动作
- @action.delete("完毕")
- @action.push(action[1])
- @action.push("完毕")
- end
- #--------------------------------------------------------------------------
- # ● 坐标更新
- #--------------------------------------------------------------------------
- def update_move
- # 补完加减速中距离的增减
- if @move_speed_plus_x > 0
- # 计算移动
- @move_x += @moving_x
- # 实行移动
- @battler.move_x = @move_x
- @move_speed_plus_x -= 1
- elsif @move_speed_x > 0
- # 加速时
- if @move_boost_x != 0
- @moving_x += @move_boost_x
- end
- # 计算移动
- @move_x += @moving_x
- # 实行移动
- @battler.move_x = @move_x
- @move_speed_x -= 1
- end
- # 补完加减速中距离的增减
- if @move_speed_plus_y > 0
- # 计算移动
- @move_y += @moving_y
- # 实行移动
- @battler.move_y = @move_y
- @move_speed_plus_y -= 1
- elsif @move_speed_y > 0
- # 加速时
- if @move_boost_y != 0
- @moving_y += @move_boost_y
- end
- # 计算移动
- @move_y += @moving_y
- # 实行移动
- @battler.move_y = @move_y
- @move_speed_y -= 1
- end
- # 跳跃上升
- if @jump_up != 0
- # 计算移动
- @jump_plus += @jump_up
- # 实行移动
- @battler.jump = @jump_plus
- @jump_up = @jump_up / 2
- @jump_time -= 1
- # 如果跳跃到了顶点时
- if @jump_time == 0 or @jump_up == @jump_sign
- @jump_down = @jump_up * 2 * @jump_sign * @jump_sign2
- @jump_time_plus += @jump_time * 2
- @jump_up = 0
- return
- end
- end
- # 跳跃下降
- if @jump_down != 0
- if @jump_time_plus != 0
- @jump_time_plus -= 1
- elsif @jump_down != @jump_size
- # 计算移动
- @jump_plus += @jump_down
- # 实行移动
- @battler.jump = @jump_plus
- @jump_down = @jump_down * 2
- if @jump_down == @jump_size
- if @jump_flug
- @jump_flug = false
- else
- # 计算移动
- @jump_plus += @jump_down
- # 实行移动
- @battler.jump = @jump_plus
- @jump_down = @jump_size = 0
- end
- end
- end
- end
- # 设定精灵的坐标
- self.x = @battler.position_x
- self.y = @battler.position_y
- self.z = @battler.position_z
- end
- #--------------------------------------------------------------------------
- # ● 影更新
- #--------------------------------------------------------------------------
- def update_shadow
- @shadow.opacity = self.opacity
- @shadow.x = @battler.position_x + @shadow_plus_x
- @shadow.y = @battler.position_y + @shadow_plus_y - @jump_plus
- @shadow.z = @battler.position_z - 4
- end
- #--------------------------------------------------------------------------
- # ● 漂浮更新
- #--------------------------------------------------------------------------
- def update_float
- @float_time -= 1
- @jump_plus += @float_up
- @battler.jump = @jump_plus
- end
- #--------------------------------------------------------------------------
- # ● 旋转更新
- #--------------------------------------------------------------------------
- def update_angle
- # 实行旋转
- @angle += @angling
- self.angle = @angle
- @angle_time -= 1
- # 旋转时间结束时项目初始化
- return @angle = 0 if @angle_time == 0
- # 如果有复原标志时角度返回0
- self.angle = 0 if @angle_reset
- end
- #--------------------------------------------------------------------------
- # ● 扩大缩小更新
- #--------------------------------------------------------------------------
- def update_zoom
- # 实行扩大缩小
- @zoom_x += @zooming_x
- @zoom_y += @zooming_y
- self.zoom_x = @zoom_x
- self.zoom_y = @zoom_y
- @zoom_time -= 1
- # 扩大缩小时间结束时项目初始化
- return if @zoom_time != 0
- @zoom_x = @zoom_y = 0
- self.oy = @height * 2 / 3
- # 如果有复原标志时还原
- self.zoom_x = self.zoom_y = 1 if @zoom_reset
- end
- #--------------------------------------------------------------------------
- # ● 残像更新
- #--------------------------------------------------------------------------
- def update_mirage
- # 残像最大能显示3个、2格图片中更新
- mirage(@mirage0) if @mirage_count == 1
- mirage(@mirage1) if @mirage_count == 3
- mirage(@mirage2) if @mirage_count == 5
- @mirage_count += 1
- @mirage_count = 0 if @mirage_count == 6
- end
- #--------------------------------------------------------------------------
- # ● 图片更新
- #--------------------------------------------------------------------------
- def update_picture
- @picture_time -= 1
- @picture.x += @moving_pic_x
- @picture.y += @moving_pic_y
- end
- #--------------------------------------------------------------------------
- # ● 飞出动画 更新
- #--------------------------------------------------------------------------
- def update_move_anime
- @move_anime.update
- @anime_moving = false if @move_anime.finish?
- @move_anime.action_reset if @move_anime.finish?
- end
- #--------------------------------------------------------------------------
- # ● 崩坏效果的更新 ※再定义
- #--------------------------------------------------------------------------
- def update_collapse
- normal_collapse if @collapse_type == 2
- boss_collapse1 if @collapse_type == 3
- end
- #--------------------------------------------------------------------------
- # ● 飞出动画更新 (图片动画)
- #--------------------------------------------------------------------------
- def update_balloon
- @balloon_duration -= 1 if @balloon_duration > 0 && !@balloon_back
- @balloon_duration += 1 if @balloon_back
- if @balloon_duration == 64
- @balloon_back = false
- @balloon.visible = false
- elsif @balloon_duration == 0
- @balloon.visible = false if @balloon_loop == 0
- @balloon_back = true if @balloon_loop == 1
- end
- @balloon.x = self.x
- @balloon.y = self.y
- @balloon.z = 10
- @balloon.opacity = self.opacity
- sx = 7 * 32 if @balloon_duration < 12
- sx = (7 - (@balloon_duration - 12) / 8) * 32 unless @balloon_duration < 12
- @balloon.src_rect.set(sx, @balloon_id * 32, 32, 32)
- end
- #--------------------------------------------------------------------------
- # ● 转送处bitmap的更新 ※再定义
- #--------------------------------------------------------------------------
- def update_battler_bitmap
- if @battler.actor?
- if @battler.character_name != @battler_name or @battler.battler_hue != @battler_hue
- @battler_name = @battler.character_name
- @battler_hue = @battler.battler_hue
- end
- else
- if @battler.battler_name != @battler_name or @battler.battler_hue != @battler_hue
- @battler_name = @battler.battler_name
- @battler_hue = @battler.battler_hue
- end
- if [email protected]?
- self.opacity = 0 if @effect_duration == 0 && @battler.collapse_type != 1
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 实行动作
- #--------------------------------------------------------------------------
- def action
- return if @active_action == nil
- action = @active_action[0]
- # 反转时
- return mirroring if action == "反转"
- # 旋转时
- return angling if action == "angle"
- # 扩大缩小时
- return zooming if action == "zoom"
- # 残像ON时
- return mirage_on if action == "残像ON"
- # 残像OFF时
- return mirage_off if action == "残像OFF"
- # 图片表示时
- return picture if action == "pic"
- # 图片消去时
- return @picture.visible = false && @picture_time = 0 if action == "消去图片"
- # 图片文件变更时
- return graphics_change if action == "change"
- # 战斗动画表示时
- return battle_anime if action == "anime"
- # 飞出动画表示时 (图片动画)
- return balloon_anime if action == "balloon"
- # BGM/BGS/SE演奏时
- return sound if action == "sound"
- # 游戏开关操作时
- return $game_switches[@active_action[1]] = @active_action[2] if action == "switch"
- # 游戏变量操作时
- return variable if action == "variable"
- # 二刀限定时
- return two_swords if action == "二刀限定"
- # 非二刀限定时
- return non_two_swords if action == "非二刀限定"
- # 动作条件时
- return necessary if action == "nece"
- # 技能连发时
- return derivating if action == "der"
- # 单独处理开始时
- return individual_action if action == "个别处理开始"
- # 单独处理完毕时
- return individual_action_end if action == "个别处理完毕"
- # 待机不能移动場合
- return non_repeat if action == "待机不能移动"
- # 变更初期位置时
- return @battler.change_base_position(self.x, self.y) if action == "变更初期位置"
- # 解除变更初期位置
- return @battler.base_position if action == "变更初期位置解除"
- # 变更目标时
- return change_target if action == "target"
- # 目标的击倒许可
- return send_action(action) if action == "击倒许可"
- # 解除主动
- return send_action(action) if action == "解除主动"
- # 赋予状态时
- return state_on if action == "sta+"
- # 解除状态时
- return state_off if action == "sta-"
- # 变更游戏整体的行进速度时
- return Graphics.frame_rate = @active_action[1] if action == "fps"
- # 漂浮时
- return floating if action == "float"
- # 脚本操作时
- return eval(@active_action[1]) if action == "script"
- # 强制动作时
- return force_action if @active_action.size == 4
- # 坐标初始化时
- return reseting if @active_action.size == 5
- # 移动时
- return moving if @active_action.size == 7
- # 角色动画时
- return battler_anime if @active_action.size == 9
- # 动画飛ばし时
- return moving_anime if @active_action.size == 11
- # 完毕时
- return anime_finish if action == "完毕"
- end
- #--------------------------------------------------------------------------
- # ● 实行反转
- #--------------------------------------------------------------------------
- def mirroring
- # 如果已经反转就还原
- if self.mirror
- self.mirror = false
- # 武器动画也反映
- @weapon_R.mirroring if @anime_flug
- else
- self.mirror = true
- # 武器动画也反映
- @weapon_R.mirroring if @anime_flug
- end
- end
- #--------------------------------------------------------------------------
- # ● 实行旋转
- #--------------------------------------------------------------------------
- def angling
- # 初期化跳跃
- jump_reset
- # 情报确认
- @angle_time = @active_action[1]
- start_angle = @active_action[2]
- end_angle = @active_action[3]
- @angle_reset = @active_action[4]
- # 袭击時时逆转
- start_angle *= -1 if $back_attack
- end_angle *= -1 if $back_attack
- # 敌方被逆转
- start_angle *= -1 if @battler.is_a?(Game_Enemy)
- end_angle *= -1 if @battler.is_a?(Game_Enemy)
- # 时间要是0以下时立即到最后角度
- if @angle_time <= 0
- self.angle = end_angle
- return @angle_time = 0
- end
- # 从旋转时间计算一格相当于的角度
- @angling = (end_angle - start_angle) / @angle_time
- # 不能整除的剩余到初期角度
- @angle = (end_angle - start_angle) % @angle_time + start_angle
- end
- #--------------------------------------------------------------------------
- # ● 实行放大缩小
- #--------------------------------------------------------------------------
- def zooming
- # 初期化跳跃
- jump_reset
- # 情报确认
- @zoom_time = @active_action[1]
- zoom_x = @active_action[2] - 1
- zoom_y = @active_action[3] - 1
- @zoom_reset = @active_action[4]
- @zoom_x = @zoom_y = 1
- # 时间是0以下时跳过
- return @zoom_time = 0 if @zoom_time <= 0
- # 从放大时间中计算一格相当于的放大率
- @zooming_x = zoom_x / @zoom_time
- @zooming_y = zoom_y / @zoom_time
- end
- #--------------------------------------------------------------------------
- # ● 残像開始
- #--------------------------------------------------------------------------
- def mirage_on
- # 战斗不能時不表现残像
- return if @battler.dead?
- @mirage0 = Sprite.new(self.viewport)
- @mirage1 = Sprite.new(self.viewport)
- @mirage2 = Sprite.new(self.viewport)
- @mirage_flug = true
- @mirage_count = 0
- end
- #--------------------------------------------------------------------------
- # ● 残像表示
- #--------------------------------------------------------------------------
- def mirage(body)
- body.bitmap = self.bitmap.dup
- body.x = self.x
- body.y = self.y
- body.ox = self.ox
- body.oy = self.oy
- body.z = self.z
- body.mirror = self.mirror
- body.angle = @angle
- body.opacity = 160
- body.zoom_x = self.zoom_x
- body.zoom_y = self.zoom_y
- body.src_rect.set(@sx, @sy, @width, @height) if @anime_flug
- body.src_rect.set(0, 0, @width, @height) unless @anime_flug
- end
- #--------------------------------------------------------------------------
- # ● 残像完毕
- #--------------------------------------------------------------------------
- def mirage_off
- @mirage_flug = false
- @mirage0.dispose if @mirage0 != nil
- @mirage1.dispose if @mirage1 != nil
- @mirage2.dispose if @mirage2 != nil
- end
- #--------------------------------------------------------------------------
- # ● 图片表示
- #--------------------------------------------------------------------------
- def picture
- # 确认移动开始位置
- pic_x = @active_action[1]
- pic_y = @active_action[2]
- # 确认移动完毕位置
- pic_end_x = @active_action[3]
- pic_end_y = @active_action[4]
- @picture_time = @active_action[5]
- # 用时间除、计算一个相当于的移动速度
- @moving_pic_x = (pic_end_x - pic_x)/ @picture_time
- @moving_pic_y = (pic_end_y - pic_y)/ @picture_time
- # 不能整除时到最初上加算
- plus_x = (pic_end_x - pic_x)% @picture_time
- plus_y = (pic_end_y - pic_y)% @picture_time
- # 图片表示
- @picture.bitmap = Cache.picture(@active_action[7])
- @picture.x = pic_x + plus_x
- @picture.y = pic_y + plus_y
- # Z坐标调整
- @picture.z = 1
- @picture.z = 1000 if @active_action[6]
- @picture.visible = true
- end
- #--------------------------------------------------------------------------
- # ● (修改)图像文件变更
- #--------------------------------------------------------------------------
- def graphics_change
- if @battler.is_a?(Game_Enemy)
- @battler_name = @active_action[2]
- self.bitmap = Cache.battler(@battler.original_name + @battler_name ,@battler_hue)
- else
- # 主人公限定
- # 图像变更
- @battler_name = @active_action[2]
- # 是否使用歩行图像中改变转送处的矩形
- self.bitmap = Cache.character(@battler_name) if N01::WALK_ANIME
- self.bitmap = Cache.character(@battler_name + "_1") unless N01::WALK_ANIME
- # 获取转送处的矩形
- @width = self.bitmap.width / @base_width
- @height = self.bitmap.height / @base_height
- # 如果想让战斗后的人物图也显示为变更
- @before_graphic = @battler.character_name if @active_action[1]
- @battler.graphic_change(@active_action[2])
- end
- end
- #--------------------------------------------------------------------------
- # ● 显示战斗动画 [判別,ID,对象,反转,等待,二刀标志]
- #--------------------------------------------------------------------------
- def battle_anime
- # 取消敌人的二刀标志动画处理
- return if @active_action[5] && [email protected]?
- # 不是二刀的角色,取消二刀标志动画处
- return if @active_action[5] && @battler.weapons[1] == nil
- # 如果二刀为右手(上面设置过)无武器
- if @battler.actor?
- return if !@active_action[5] && @battler.weapons[0] == nil && @battler.weapons[1] != nil
- end
- anime_id = @active_action[1]
- mirror = @active_action[3]
- # 偷袭时动画画像被反转
- if $back_attack
- mirror = true if @active_action[3] == false
- mirror = false if @active_action[3]
- end
- # 武器和技能动画时
- if anime_id < 0
- # 用行动的种类分歧动画处
- if @battler.action.skill? && anime_id != -2
- anime_id = @battler.action.skill.animation_id
- elsif @battler.action.item? && anime_id != -2
- anime_id = @battler.action.item.animation_id
- else
- # 没有武器时使用空手动画
- anime_id = N01::NO_WEAPON
- if @battler.actor?
- weapon_id = @battler.weapon_id
- anime_id = $data_weapons[weapon_id].animation_id if weapon_id != 0
- # 二刀动画时
- anime_id = @battler.atk_animation_id2 if @active_action[5]
- else
- weapon_id = @battler.weapon
- anime_id = $data_weapons[weapon_id].animation_id if weapon_id != 0
- end
- end
- # 等待设定
- @wait = $data_animations[anime_id].frame_max * 4 if $data_animations[anime_id] != nil && @active_action[4]
- waitflug = true
- # 显示伤害动画时、为了先计算出伤害計
- damage_action = [anime_id, mirror, true]
- return @battler.play = ["对象动画",damage_action] if @battler.active
- end
- # 实行动画
- if @active_action[2] == 0 && $data_animations[anime_id] != nil
- @battler.animation_id = anime_id
- @battler.animation_mirror = mirror
- elsif $data_animations[anime_id] != nil
- for target in @target_battler
- target.animation_id = anime_id
- target.animation_mirror = mirror
- end
- end
- # 等待设定
- @wait = $data_animations[anime_id].frame_max * 4 if $data_animations[anime_id] != nil && @active_action[4] && !waitflug
- end
- #--------------------------------------------------------------------------
- # ● 显示飞出动画 (图片动画)
- #--------------------------------------------------------------------------
- def balloon_anime
- return if self.opacity == 0
- if @balloon == nil
- @balloon = Sprite.new
- @balloon.bitmap = Cache.system("Balloon")
- @balloon.ox = @width / 16
- @balloon.oy = @balloon.height / 10 + @height / 3
- end
- @balloon_id = @active_action[1]
- @balloon_loop = @active_action[2]
- @balloon_duration = 64
- @balloon_back = false
- update_balloon
- @balloon.visible = true
- end
- #--------------------------------------------------------------------------
- # ● BGM/BGS/SE演奏
- #--------------------------------------------------------------------------
- def sound
- # 获取情报
- pitch = @active_action[2]
- vol = @active_action[3]
- name = @active_action[4]
- # 实行
- case @active_action[1]
- when "se"
- Audio.se_play("Audio/SE/" + name, vol, pitch)
- when "bgm"
- # 没有指定名字时、不改变现在的BGM
- if @active_action[4] == ""
- now_bgm = RPG::BGM.last
- name = now_bgm.name
- end
- Audio.bgm_play("Audio/BGM/" + name, vol, pitch)
- when "bgs"
- # 没有指定名字时、不改变现在的BGS
- if @active_action[4] == ""
- now_bgs = RPG::BGS.last
- name = now_bgs.name
- end
- Audio.bgs_play("Audio/BGS/" + name, vol, pitch)
- end
- end
- #--------------------------------------------------------------------------
- # ● 游戏变量操作
- #--------------------------------------------------------------------------
- def variable
- # 检查操作
- operand = @active_action[3]
- # 变数操作的分歧
- case @active_action[2]
- when 0 # 代入
- $game_variables[@active_action[1]] = operand
- when 1 # 加算
- $game_variables[@active_action[1]] += operand
- when 2 # 減算
- $game_variables[@active_action[1]] -= operand
- when 3 # 乗算
- $game_variables[@active_action[1]] *= operand
- when 4 # 除算
- $game_variables[@active_action[1]] /= operand
- when 5 # 剰余
- $game_variables[@active_action[1]] %= operand
- end
- end
- #--------------------------------------------------------------------------
- # ● 二刀限定
- #--------------------------------------------------------------------------
- def two_swords
- # 敌方不被处理
- return @action.shift unless @battler.actor?
- # 左手(下部显示)没有武器就会消除下面
- return @action.shift if @battler.weapons[1] == nil
- # 从行动配类的前面移动
- active = @action.shift
- # 确定现在的动作
- @active_action = N01::ANIME[active]
- # 等待设定
- @wait = active.to_i if @active_action == nil
- # 单独动作开始
- action
- end
- #--------------------------------------------------------------------------
- # ● 非二刀限定
- #--------------------------------------------------------------------------
- def non_two_swords
- # 敌方不被处理
- return unless @battler.actor?
- # 左手(下部显示)没有武器就会消除下面
- return @action.shift if @battler.weapons[1] != nil
- # 从行动配类的前面移动
- active = @action.shift
- # 确定现在的动作
- @active_action = N01::ANIME[active]
- # 等待设定
- @wait = active.to_i if @active_action == nil
- # 单独动作开始
- action
- end
- #--------------------------------------------------------------------------
- # ● 动作条件
- #--------------------------------------------------------------------------
- def necessary
- nece1 = @active_action[3]
- nece2 = @active_action[4]
- # 目标确认
- case @active_action[1]
- #0自身 1目标 2敌全体 3我方全体
- when 0
- target = [$game_party.members[@battler.index]] if @battler.is_a?(Game_Actor)
- target = [$game_troop.members[@battler.index]] if @battler.is_a?(Game_Enemy)
- when 1
- target = @target_battler
- when 2
- target = $game_troop.members
- when 3
- target = $game_party.members
- end
- # 目标为空出时看作失败
- return start_action(@battler.recover_action) if target.size == 0
- # 内容确认
- case @active_action[2]
- # 指定了状态ID时
- when 0
- # 补充正号为「正在此状态」、负号为「不在此状态」的条件
- state_on = true if nece2 > 0
- # 获取条件人数
- state_member = nece2.abs
- # 0从队友数中获取
- if nece2 == 0
- state_member = $game_party.members.size if @battler.is_a?(Game_Actor)
- state_member = $game_troop.members.size if @battler.is_a?(Game_Enemy)
- end
- # 目标的状态确认后清点人数
- for member in target
- state_member -= 1 if member.state?(nece1)
- end
- # 条件全部满足后执行动作
- if state_member == 0 && state_on
- return
- elsif state_member == nece2.abs
- return if state_on == nil
- end
- # 指定了参数时
- when 1
- # 补充了正号为「数值以上」、负号为「数值以下」的条件
- num_over = true if nece2 > 0
- # 参照数値
- num = 0
- # 确认目标的参数
- for member in target
- # 参照参数来分歧
- case nece1
- when 0 # 现HP
- num += member.hp
- when 1 # 现MP
- num += member.mp
- when 2 # 攻击力
- num += member.atk
- when 3 # 防御力
- num += member.def
- when 4 # 精神力
- num += member.spi
- when 5 # 敏捷性
- num += member.agi
- end
- end
- # 平均
- num = num / target.size
- # 条件全部满足后执行动作
- if num > nece2.abs && num_over
- return
- elsif num < nece2.abs
- return if num_over == nil
- end
- # 指定了开关时
- when 2
- # 条件全部满足后执行动作
- if $game_switches[nece1]
- # 补充为true时「开关ON」、false时「开关OFF」的条件
- return if nece2
- # 开关为OFF时与ON时是相反的
- else
- return unless nece2
- end
- # 指定了变量时
- when 3
- #补充为正号时「数值以上」、负号时「数値以下」的条件
- if nece2 > 0
- return if $game_variables[nece1] > nece2
- else
- return unless $game_variables[nece1] > nece2.abs
- end
- # 指定了习得技能时
- when 4
- # 获取技能条件人数
- skill_member = nece2.abs
- for member in target
- skill_member -= 1 if member.skill_learn?(nece1)
- # 条件确认
- return if skill_member == 0
- end
- end
- # 条件没有被满足时动作中断
- return @action = ["完毕"] if @non_repeat
- # 不让防御中看起来不自然,坐标不被还原
- action = @battler.recover_action
- action = @battler.defence if @battler.guarding?
- return start_action(action)
- end
- #--------------------------------------------------------------------------
- # ● 技能连发
- #--------------------------------------------------------------------------
- def derivating
- # 如果让没学的的技能不能连发时
- return if !@active_action[2] && [email protected]_id_learn?(@active_action[3])
- # 确率分岐
- return if rand(100) > @active_action[1]
- # 连发成功
- @battler.derivation = @active_action[3]
- # 之后的动作被中断
- @action = ["完毕"]
- end
- #--------------------------------------------------------------------------
- # ● 个别处理开始
- #--------------------------------------------------------------------------
- def individual_action
- # 反复标志ON
- @battler.individual = true
- # 保持反复动作
- @individual_act = @action.dup
- # 保持目标、一个一个的发出行动目标
- send_action(["个别处理"])
- @individual_targets = @target_battler.dup
- @target_battler = [@individual_targets.shift]
- end
- #--------------------------------------------------------------------------
- # ● 个别处理完毕
- #--------------------------------------------------------------------------
- def individual_action_end
- # 目标没有残留时行动完毕
- return @battler.individual = false if @individual_targets.size == 0
- @action = @individual_act.dup
- @target_battler = [@individual_targets.shift]
- end
- #--------------------------------------------------------------------------
- # ● 待机不能移动
- #--------------------------------------------------------------------------
- def non_repeat
- @repeat_action = []
- @non_repeat = true
- anime_finish
- end
- #--------------------------------------------------------------------------
- # ● 目标变更 action = [判別, 变更对象, 变更处]
- #--------------------------------------------------------------------------
- def change_target
- # 还原自身变更了的目标
- return @target_battler = @now_targets.dup if @active_action[2] == 3
- # 发送目标情报
- target = [@battler] if @active_action[2] == 0
- target = @target_battler.dup if @active_action[2] != 0
- # 自身的目标发送到对方时、记录现在的
- if @active_action[2] == 2
- @now_targets = @target_battler.dup
- @target_battler = []
- end
- # 发送目标指定目录时
- if @active_action[1] >= 1000
- members = $game_party.members if @battler.actor?
- members = $game_troop.members unless @battler.actor?
- index = @active_action[1] - 1000
- if index < members.size
- if members[index].exist? && @battler.index != index
- # 目标变更
- members[index].force_target = ["N01target_change", target]
- # 自身的目标发送到相手时
- @target_battler = [members[index]] if @active_action[2] == 2
- change = true
- else
- for member in members
- next if @battler.index == member.index
- next unless member.exist?
- member.force_target = ["N01target_change", target]
- @target_battler = [member] if @active_action[2] == 2
- break change = true
- end
- end
- end
- # 指定了发送目标的状态ID时
- elsif @active_action[1] > 0
- for member in $game_party.members + $game_troop.members
- if member.state?(@active_action[1])
- member.force_target = ["N01target_change", target]
- @target_battler.push(member) if @active_action[2] == 2
- change = true
- end
- end
- # 指定了发送目标学的的技能时
- elsif @active_action[1] < 0
- skill_id = @active_action[1].abs
- for actor in $game_party.members
- if actor.skill_id_learn?(skill_id)
- actor.force_target = ["N01target_change", target]
- @target_battler.push(target) if @active_action[2] == 2
- change = true
- end
- end
- # 发送目标是目标时
- else
- for member in @target_battler
- member.force_target = ["N01target_change", target]
- @target_battler.push(member) if @active_action[2] == 2
- change = true
- end
- end
- # 条件没有被满足时动作中断
- return if change
- return @action = ["完毕"] if @non_repeat
- return start_action(@battler.recover_action)
- end
- #--------------------------------------------------------------------------
- # ● 状态付与
- #--------------------------------------------------------------------------
- def state_on
- state_id = @active_action[2]
- # 分歧对象
- case @active_action[1]
- when 0
- @battler.add_state(state_id) if rand(100) < @battler.state_probability(state_id)
- when 1
- if @target_battler != nil
- for target in @target_battler
- target.add_state(state_id) if rand(100) < target.state_probability(state_id)
- end
- end
- when 2
- for target in $game_troop.members
- target.add_state(state_id) if rand(100) < target.state_probability(state_id)
- end
- when 3
- for target in $game_party.members
- target.add_state(state_id) if rand(100) < target.state_probability(state_id)
- end
- when 4
- for target in $game_party.members
- if target.index != @battler.index
- target.add_state(state_id) if rand(100) < target.state_probability(state_id)
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 状态解除
- #--------------------------------------------------------------------------
- def state_off
- state_id = @active_action[2]
- # 分歧对象
- case @active_action[1]
- when 0
- @battler.remove_state(state_id)
- when 1
- if @target_battler != nil
- for target in @target_battler
- target.remove_state(state_id)
- end
- end
- when 2
- for target in $game_troop.members
- target.remove_state(state_id)
- end
- when 3
- for target in $game_party.members
- target.remove_state(state_id)
- end
- when 4
- for target in $game_party.members
- if target.index != @battler.index
- target.remove_state(state_id)
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 浮遊实行
- #--------------------------------------------------------------------------
- def floating
- # 初期化跳跃
- jump_reset
- # 情报确认
- @jump_plus = @active_action[1]
- float_end = @active_action[2]
- @float_time = @active_action[3]
- # 计算一格相当的移动高度
- @float_up = (float_end - @jump_plus)/ @float_time
- # 漂浮结束前不执行下个动作
- @wait = @float_time
- # 反映漂浮动画的设定
- if @anime_flug
- move_anime = N01::ANIME[@active_action[4]]
- # 没有指定图片时跳过处理
- if move_anime != nil
- # 写下现在的动作
- @active_action = move_anime
- # 角色动画开始
- battler_anime
- # 漂浮完毕时即动画完毕
- @anime_end = true
- end
- end
- # 漂浮到初期高度
- @battler.jump = @jump_plus
- end
- #--------------------------------------------------------------------------
- # ● 强制动作
- #--------------------------------------------------------------------------
- def force_action
- # 动作是单独还是通用的判别
- kind = @active_action[0]
- # 确认有无复原
- rebirth = @active_action[2]
- # 获取强制动作的内容
- play = @active_action[3]
- # 归纳上面3个情报
- action = [kind,rebirth,play]
- # 目标指定目录时
- if @active_action[1] >= 1000
- members = $game_party.members if @battler.actor?
- members = $game_troop.members unless @battler.actor?
- index = @active_action[1] - 1000
- if index < members.size
- if members[index].exist? && @battler.index != index
- # 交付角色情报
- return members[index].force_action = action
- else
- for target in members
- next if @battler.index == target.index
- next unless target.exist?
- force = true
- break target.force_action = action
- end
- end
- end
- # 条件没有被满足时动作中断
- return if force
- return @action = ["完毕"] if @non_repeat
- return start_action(@battler.recover_action)
- # 指定目标时
- elsif @active_action[1] == 0
- for target in @target_battler
- target.force_action = action if target != nil
- end
- # 指定了状态ID时
- elsif @active_action[1] > 0
- for target in $game_party.members + $game_troop.members
- target.force_action = action if target.state?(@active_action[1])
- end
- # 指定了习得技能时
- elsif @active_action[1] < 0
- # 敌方不被处理
- return if @battler.is_a?(Game_Enemy)
- for actor in $game_party.members
- # 自身除外
- unless actor.id == @battler.id
- # 交付角色情报
- actor.force_action = action if actor.skill_id_learn?(@active_action[1].abs)
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 实行坐标初始化
- #--------------------------------------------------------------------------
- def reseting
- # 初期化跳跃
- jump_reset
- # 回転を元に戻す
- self.angle = 0
- # 情报确认
- @distanse_x = @move_x * -1
- @distanse_y = @move_y * -1
- @move_speed_x = @active_action[1]
- @move_speed_y = @move_speed_x
- @move_boost_x = @active_action[2]
- @move_boost_y = @move_boost_x
- @jump = @active_action[3]
- # 计算移动
- move_distance
- # 反映移动画面的设定
- if @anime_flug
- move_anime = N01::ANIME[@active_action[4]]
- # 没有指定图片时跳过处理
- if move_anime != nil
- # 写下现在的动作
- @active_action = move_anime
- # 角色动画开始
- battler_anime
- end
- # 移动完毕时即动画也完毕
- @anime_end = true
- end
- end
- #--------------------------------------------------------------------------
- # ● 计算移动
- #--------------------------------------------------------------------------
- def moving
- # 初期化跳跃
- jump_reset
- # 方便调出X轴的移动
- xx = @active_action[1]
- # 袭击时X轴逆转
- xx *= -1 if $back_attack
- # 确认移动目标的目标
- case @active_action[0]
- when 0 # 自身
- @distanse_x = xx
- @distanse_y = @active_action[2]
- when 1 # 目标
- # 目标没有决定时、变换成自身
- if @target_battler == nil
- @distanse_x = xx
- @distanse_y = @active_action[2]
- else
- # 一个一个的确认目标对象
- target_x = 0
- target_y = 0
- time = 0
- for i in 0...@target_battler.size
- if @target_battler[i] != nil
- time += 1
- target_x += @target_battler[i].position_x
- target_y += @target_battler[i].position_y
- end
- end
- # 目标空出时、变换成自身
- if time == 0
- @distanse_x = xx
- @distanse_y = @active_action[2]
- else
- # 计算出复数目标的中心位置
- target_x = target_x / time
- target_y = target_y / time
- # 算出最终的移动距离
- @distanse_y = target_y - self.y + @active_action[2]
- # X坐标是角色和敌人的逆向计算
- if @battler.is_a?(Game_Actor)
- @distanse_x = target_x - self.x + xx
- else
- @distanse_x = self.x - target_x + xx
- end
- end
- end
- when 2 # 画面
- # X坐标是角色和敌人的逆向计算
- if @battler.is_a?(Game_Actor)
- @distanse_x = xx - self.x
- @distanse_x = Graphics.width + xx - self.x if $back_attack
- else
- @distanse_x = self.x - xx
- @distanse_x = self.x - (Graphics.width + xx) if $back_attack
- end
- @distanse_y = @active_action[2] - self.y
- when 3 # 初期位置
- # X坐标是角色和敌人的逆向计算
- if @battler.is_a?(Game_Actor)
- @distanse_x = xx + @battler.base_position_x - self.x
- else
- @distanse_x = xx + self.x - @battler.base_position_x
- end
- @distanse_y = @active_action[2] + @battler.base_position_y - @battler.position_y
- end
- @move_speed_x = @active_action[3]
- @move_speed_y = @active_action[3]
- @move_boost_x = @active_action[4]
- @move_boost_y = @active_action[4]
- @jump = @active_action[5]
- @jump_plus = 0
- # 计算移动
- move_distance
- # 反映移动画面的设定
- if @anime_flug
- move_anime = N01::ANIME[@active_action[6]]
- # 没有指定图片时跳过处理
- if move_anime != nil
- # 写下现在的动作
- @active_action = move_anime
- # 角色动画开始
- battler_anime
- end
- # 移动完毕时即动画也完毕
- @anime_end = true
- end
- end
- #--------------------------------------------------------------------------
- # ● 计算移动
- #--------------------------------------------------------------------------
- def move_distance
- # 速度为0时、停留在那个地方
- if @move_speed_x == 0
- @moving_x = 0
- @moving_y = 0
- else
- # 计算一格相当的移动距离
- @moving_x = @distanse_x / @move_speed_x
- @moving_y = @distanse_y / @move_speed_y
- # 剩余的距离在这时移动消化
- over_x = @distanse_x % @move_speed_x
- over_y = @distanse_y % @move_speed_y
- @move_x += over_x
- @move_y += over_y
- @battler.move_x = @move_x
- @battler.move_y = @move_y
- @distanse_x -= over_x
- @distanse_y -= over_y
- end
- # 判定是否移动
- if @distanse_x == 0
- @move_speed_x = 0
- end
- if @distanse_y == 0
- @move_speed_y = 0
- end
- # X座標计算移动
- # 根据加减速修正移动格数
- boost_x = @moving_x
- move_x = 0
- # 加速时
- if @move_boost_x > 0 && @distanse_x != 0
- # 加减速的正负调整成左右移动
- if @distanse_x == 0
- @move_boost_x = 0
- elsif @distanse_x < 0
- @move_boost_x *= -1
- end
- # 事先计算距离的变化
- for i in 0...@move_speed_x
- boost_x += @move_boost_x
- move_x += boost_x
- # 记录超过距离
- over_distance = @distanse_x - move_x
- # 记录右移动时距离超越的时第几格
- if @distanse_x > 0 && over_distance < 0
- @move_speed_x = i
- break
- # 记录左移动时距离超越的时第几格
- elsif @distanse_x < 0 && over_distance > 0
- @move_speed_x = i
- break
- end
- end
- # 将超越距离还原到前一次
- before = over_distance + boost_x
- # 剩余的距离加算到等速移动的格数中
- @move_speed_plus_x = (before / @moving_x).abs
- # 即使这样剩余的距离也在这时移动消化
- @move_x += before % @moving_x
- @battler.move_x = @move_x
- # 减速时
- elsif @move_boost_x < 0 && @distanse_x != 0
- # 加减速的正负调整成左右移动
- if @distanse_x == 0
- @move_boost_x = 0
- elsif @distanse_x < 0
- @move_boost_x *= -1
- end
- # 事先计算距离的变化
- for i in 0...@move_speed_x
- boost_x += @move_boost_x
- move_x += boost_x
- # 记录不足的距离
- lost_distance = @distanse_x - move_x
- before = lost_distance
- # 记录右移动速度到0时是第几格
- if @distanse_x > 0 && boost_x < 0
- @move_speed_x = i - 1
- # 不足的距离还原到前一次
- before = lost_distance + boost_x
- break
- # 记录左移动速度到0时是第几格
- elsif @distanse_x < 0 && boost_x > 0
- @move_speed_x= i - 1
- # 不足的距离还原到前一次
- before = lost_distance + boost_x
- break
- end
- end
- # 不足的距离加算到等速移动的格数中
- plus = before / @moving_x
- @move_speed_plus_x = plus.abs
- # 即使这样剩余的距离也在这时移动消化
- @move_x += before % @moving_x
- @battler.move_x = @move_x
- end
- # Y座標计算移动
- # 根据加减速修正移动格数
- boost_y = @moving_y
- move_y = 0
- # 加速时
- if @move_boost_y > 0 && @distanse_y != 0
- # 加减速的正负调整成左右移动
- if @distanse_y == 0
- @move_boost_y = 0
- elsif @distanse_y < 0
- @move_boost_y *= -1
- end
- # 事先计算距离的变化
- for i in 0...@move_speed_y
- boost_y += @move_boost_y
- move_y += boost_y
- # 记录超过距离
- over_distance = @distanse_y - move_y
- # 记录右移动时距离超越的时第几格
- if @distanse_y > 0 && over_distance < 0
- @move_speed_y = i
- break
- # 记录左移动时距离超越的时第几格
- elsif @distanse_y < 0 && over_distance > 0
- @move_speed_y = i
- break
- end
- end
- # 将超越距离还原到前一次
- before = over_distance + boost_y
- # 剩余的距离加算到等速移动的格数中
- @move_speed_plus_y = (before / @moving_y).abs
- # 即使这样剩余的距离也在这时移动消化
- @move_y += before % @moving_y
- @battler.move_y = @move_y
- # 减速时
- elsif @move_boost_y < 0 && @distanse_y != 0
- # 加减速的正负调整成左右移动
- if @distanse_y == 0
- @move_boost_y = 0
- elsif @distanse_y < 0
- @move_boost_y *= -1
- end
- # 事先计算距离的变化
- for i in 0...@move_speed_y
- boost_y += @move_boost_y
- move_y += boost_y
- # 记录不足的距离
- lost_distance = @distanse_y - move_y
- before = lost_distance
- # 记录右移动速度到0时是第几格
- if @distanse_y > 0 && boost_y < 0
- @move_speed_y = i
- # 不足的距离还原到前一次
- before = lost_distance + boost_y
- break
- # 记录左移动速度到0时是第几格
- elsif @distanse_y < 0 && boost_y > 0
- @move_speed_y = i
- # 不足的距离还原到前一次
- before = lost_distance + boost_y
- break
- end
- end
- # 不足的距离加算到等速移动的格数中
- plus = before / @moving_y
- @move_speed_plus_y = plus.abs
- # 即使这样剩余的距离也在这时移动消化
- @move_y += before % @moving_y
- @battler.move_y = @move_y
- end
- # 算出移动完毕的时间
- x = @move_speed_plus_x + @move_speed_x
- y = @move_speed_plus_y + @move_speed_y
- if x > y
- end_time = x
- else
- end_time = y
- end
- # 移动完毕前不进行下个动作
- @wait = end_time
- # 计算跳跃
- if @jump != 0
- # 没有移动只跳跃时
- if @wait == 0
- # 时间记入
- @wait = @active_action[3]
- end
- # 从移动完毕时间算出跳跃时间
- @jump_time = @wait / 2
- # 不能插入时的剩余时间
- @jump_time_plus = @wait % 2
- # 判别跳跃是正还是负
- @jump_sign = 0
- @jump_sign2 = 0
- if @jump < 0
- @jump_sign = -1
- @jump_sign2 = 1
- @jump = @jump * -1
- else
- @jump_sign = 1
- @jump_sign2 = -1
- end
- # 决定跳跃初始速度
- @jump_up = 2 ** @jump * @jump_sign
- # 略微调整条约时间的尾数
- if @jump_time == 0
- @jump_up = 0
- elsif @jump_time != 1
- @jump_size = @jump_up * @jump_sign * @jump_sign2
- else
- @jump_size = @jump_up * 2 * @jump_sign * @jump_sign2
- @jump_flug = true
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 角色动画开始
- #--------------------------------------------------------------------------
- def battler_anime
- # 反映动画设定
- @anime_kind = @active_action[1]
- @anime_speed = @active_action[2]
- @anime_loop = @active_action[3]
- # 如果有等待时间时加算
- @unloop_wait = @active_action[4]
- @anime_end = true
- @reverse = false
- # 只有有武器动作时进行更新
- if @weapon_R != nil && @active_action[8] != ""
- # 确认武器的设定
- weapon_kind = N01::ANIME[@active_action[8]]
- # 敌方和不使用二刀角色的取消二刀标志
- two_swords_flug = weapon_kind[11]
- return if two_swords_flug && [email protected]?
- return if two_swords_flug && @battler.weapons[1] == nil && @battler.actor?
- if @battler.actor? && @battler.weapons[0] == nil && !two_swords_flug
- @weapon_R.action_reset
- elsif @battler.actor? && @battler.weapons[1] == nil && two_swords_flug
- @weapon_R.action_reset
- elsif [email protected]? && @battler.weapon == 0
- @weapon_R.action_reset
- else
- # 初期化
- @weapon_R.action_reset
- # 动画图像是固定时的获取武器位置
- if @active_action[5] != -1
- @weapon_R.freeze(@active_action[5])
- end
- # 设定武器画像
- @weapon_R.weapon_graphics unless two_swords_flug
- @weapon_R.weapon_graphics(true) if two_swords_flug
- # 交付武器动作
- @weapon_R.weapon_action(@active_action[8],@anime_loop)
- @weapon_action = true
- # 更新最初的武器动作
- @weapon_R.action
- end
- elsif @weapon_R != nil
- @weapon_R.action_reset
- end
- @anime_end = false
- # 动画图片是固定时
- if @active_action[5] != -1 && @active_action[5] != -2
- # 标志ON
- @anime_freeze = true
- # 看作动画是通常的完毕了
- @anime_end = true
- # 单程逆转再生时
- elsif @active_action[5] == -2
- @anime_freeze = false
- # 标志ON
- @reverse = true
- # 更新最初的动画图像
- @pattern = @base_width - 1
- # 只有在有武器动画时更新
- if @weapon_action && @weapon_R != nil
- @weapon_R.action
- @weapon_R.update
- end
- # 更新通常动画时
- else
- @anime_freeze = false
- # 更新最初的动画图像
- @pattern = 0
- # 只有在有武器动画时更新
- if @weapon_action && @weapon_R != nil
- @weapon_R.action
- @weapon_R.update
- end
- end
- @pattern_back = false
- @frame = @anime_speed
- # Z座標設定
- @battler.move_z = @active_action[6]
- # 是否有影
- if @shadow != nil
- @shadow.visible = true if @active_action[7]
- @shadow.visible = false unless @active_action[7]
- end
- # 分期从编号读取文件名
- if @active_action[0] == 0
- file_name = @battler_name
- else
- file_name = @battler_name + "_" + @active_action[0].to_s
- end
- # 无动画角色时处理完毕
- return unless @anime_flug
- self.bitmap = Cache.character(file_name)
- # 设定转送处的矩形
- @sx = @pattern * @width
- @sy = @anime_kind * @height
- @sx = @active_action[5] * @width if @anime_freeze
- self.src_rect.set(@sx, @sy, @width, @height)
- end
- #--------------------------------------------------------------------------
- # ● 动画飞出
- #--------------------------------------------------------------------------
- def moving_anime
- # 如果前个飞出动画还有残留时初期化
- @move_anime.action_reset if @anime_moving
- @anime_moving = true
- # 袭击中动画、武器画像反转
- mirror = false
- mirror = true if $back_attack
- # 动画ID
- id = @active_action[1]
- # 対象
- target = @active_action[2]
- x = y = mem = 0
- # 对象为单体时
- if target == 0
- # 目标没有决定时、变换成自身
- if @target_battler == nil
- x = self.x
- y = self.y
- else
- # 没有决定目标时、变换为自身
- if @target_battler[0] == nil
- x = self.x
- y = self.y
- else
- # 目标空出时、变换为自身
- x = @target_battler[0].position_x
- y = @target_battler[0].position_y
- end
- end
- # 对象在敌方中心时
- elsif target == 1
- # 自身是主人公时计算敌方的中心
- if @battler.is_a?(Game_Actor)
- for target in $game_troop.members
- x += target.position_x
- y += target.position_y
- mem += 1
- end
- x = x / mem
- y = y / mem
- # 自身是敌方时计算主人公的中心
- else
- for target in $game_party.members
- x += target.position_x
- y += target.position_y
- mem += 1
- end
- x = x / mem
- y = y / mem
- end
- # 对象在我方中心时
- elsif target == 2
- # 自身是主人公时计算主人公的中心
- if @battler.is_a?(Game_Actor)
- for target in $game_party.members
- x += target.position_x
- y += target.position_y
- mem += 1
- end
- x = x / mem
- y = y / mem
- # 自身是敌方时计算敌方的中心
- else
- for target in $game_troop.members
- x += target.position_x
- y += target.position_y
- mem += 1
- end
- x = x / mem
- y = y / mem
- end
- # 对象是自身时
- else
- x = self.x
- y = self.y
- end
- # 开始位置的略微调整
- plus_x = @active_action[6]
- plus_y = @active_action[7]
- # 敌方是X轴逆转
- plus_x *= -1 if @battler.is_a?(Game_Enemy)
- # 算出最终的移动距离
- distanse_x = x - self.x - plus_x
- distanse_y = y - self.y - plus_y
- # 飞出类型
- type = @active_action[3]
- # 速度
- speed = @active_action[4]
- # 轨道
- orbit = @active_action[5]
- # 如果自身在开始位置时
- if @active_action[8] == 0
- @move_anime.base_x = self.x + plus_x
- @move_anime.base_y = self.y + plus_y
- # 对象在开始位置时
- elsif @active_action[8] == 1
- @move_anime.base_x = x + plus_x
- @move_anime.base_y = y + plus_y
- # 把距离作为反面
- distanse_y = distanse_y * -1
- distanse_x = distanse_x * -1
- # 如果不能动
- else
- @move_anime.base_x = x
- @move_anime.base_y = y
- distanse_x = distanse_y = 0
- end
- # 无武器动作时不显示武器
- if @active_action[10] == ""
- weapon = ""
- # 无动画的敌方不显示武器
- elsif @anime_flug != true
- weapon = ""
- # 武器动作时
- else
- # 确认是否指定了飞出武器图片
- if @battler.is_a?(Game_Actor)
- battler = $game_party.members[@battler.index]
- weapon_id = battler.weapon_id
- else
- battler = $game_troop.members[@battler.index]
- weapon_id = battler.weapon
- end
- # 判别是武器动作情报取得还是使用武器画像
- weapon_act = N01::ANIME[@active_action[10]].dup if @active_action[10] != ""
- # 如果利用武器画像时并不是空手
- if weapon_id != 0 && weapon_act.size == 3
- weapon_file = $data_weapons[weapon_id].flying_graphic
- # 如果没有指定别的画像时获取既存的武
- if weapon_file == ""
- weapon_name = $data_weapons[weapon_id].graphic
- icon_weapon = false
- # 然后没有指定时使用ICON图片
- if weapon_name == ""
- weapon_name = $data_weapons[weapon_id].icon_index
- icon_weapon = true
- end
- # 指定时获取那个图片名
- else
- icon_weapon = false
- weapon_name = weapon_file
- end
- # 武器动作情报取得
- weapon = @active_action[10]
- # 指定了武器画像时不显示空手
- elsif weapon_act.size == 3
- weapon = ""
- # 使用技能画像
- elsif weapon_act != nil && @battler.action.skill != nil
- icon_weapon = false
- weapon_name = $data_skills[@battler.action.skill.id].flying_graphic
- weapon = @active_action[10]
- end
- end
- # 决定Z坐标
- @move_anime.z = 1
- @move_anime.z = 1000 if @active_action[9]
- # 已上的全部情报都已飞出动画送到精灵
- @move_anime.anime_action(id,mirror,distanse_x,distanse_y,type,speed,orbit,weapon,weapon_name,icon_weapon)
- end
- #--------------------------------------------------------------------------
- # ● 动作完毕
- #--------------------------------------------------------------------------
- def anime_finish
- # 单独处理完毕省略时做反复
- return individual_action_end if @individual_targets.size != 0
- # 主动向角色归纳动作情报
- send_action(@active_action[0]) if @battler.active
- # 如果有残像时开放
- mirage_off if @mirage_flug
- # 重复待机动作
- start_action(@repeat_action) unless @non_repeat
- end
- #--------------------------------------------------------------------------
- # ● 击倒动作
- #--------------------------------------------------------------------------
- def collapse_action
- @non_repeat = true
- @effect_type = COLLAPSE
- @collapse_type = @battler.collapse_type unless @battler.actor?
- @battler_visible = false unless @battler.actor?
- @effect_duration = N01::COLLAPSE_WAIT + 48 if @collapse_type == 2
- @effect_duration = 401 if @collapse_type == 3
- end
- #--------------------------------------------------------------------------
- # ● 普通击倒
- #--------------------------------------------------------------------------
- def normal_collapse
- if @effect_duration == 47
- Sound.play_enemy_collapse
- self.blend_type = 1
- self.color.set(255, 128, 128, 128)
- end
- self.opacity = 256 - (48 - @effect_duration) * 6 if @effect_duration <= 47
- end
- #--------------------------------------------------------------------------
- # ● BOSS击倒
- #--------------------------------------------------------------------------
- def boss_collapse1
- if @effect_duration == 320
- Audio.se_play("Audio/SE/Absorb1", 100, 80)
- self.flash(Color.new(255, 255, 255), 60)
- viewport.flash(Color.new(255, 255, 255), 20)
- end
- if @effect_duration == 280
- Audio.se_play("Audio/SE/Absorb1", 100, 80)
- self.flash(Color.new(255, 255, 255), 60)
- viewport.flash(Color.new(255, 255, 255), 20)
- end
- if @effect_duration == 220
- Audio.se_play("Audio/SE/Earth4", 100, 80)
- reset
- self.blend_type = 1
- self.color.set(255, 128, 128, 128)
- self.wave_amp = 6
- end
- if @effect_duration < 220
- self.src_rect.set(0, @effect_duration / 2 - 110, @width, @height)
- self.x += 8 if @effect_duration % 4 == 0
- self.x -= 8 if @effect_duration % 4 == 2
- self.wave_amp += 1 if @effect_duration % 10 == 0
- self.opacity = @effect_duration
- return if @effect_duration < 50
- Audio.se_play("Audio/SE/Earth4", 100, 50) if @effect_duration % 50 == 0
- end
- end
- end
复制代码
脚本3:- #==============================================================================
- # ■ Scene_Battle Ver3.3
- #------------------------------------------------------------------------------
- # 战斗画面的处理的类。
- #==============================================================================
- class Scene_Battle < Scene_Base
- #--------------------------------------------------------------------------
- # ● 完毕处理
- #--------------------------------------------------------------------------
- alias terminate_n01 terminate
- def terminate
- terminate_n01
- # 返还二刀流的替换处理
- for member in $game_party.members
- if member.two_swords_change
- member.change_equip_by_id(1, member.weapon_id)
- member.change_equip_by_id(0, 0)
- member.two_swords_change = false
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 战斗开始的处理
- #--------------------------------------------------------------------------
- alias process_battle_start_n01 process_battle_start
- def process_battle_start
- process_battle_start_n01
- # 如果二刀流让左(下部显示)手武器像右(上部表示)手武器那样没有持有时
- # 在这里强制替换他
- for member in $game_party.members
- if member.weapons[0] == nil and member.weapons[1] != nil
- member.change_equip_by_id(0, member.armor1_id)
- member.change_equip_by_id(1, 0)
- member.two_swords_change = true
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 更新
- #--------------------------------------------------------------------------
- alias update_n01 update
- def update
- reset_stand_by_action
- super
- update_n01
- end
- #--------------------------------------------------------------------------
- # ● 根据事件操作的HP变动再设置角色动画
- #--------------------------------------------------------------------------
- def reset_stand_by_action
- if $game_temp.status_window_refresh
- $game_temp.status_window_refresh = false
- for member in $game_party.members + $game_troop.members
- @spriteset.set_stand_by_action(member.actor?, member.index)
- # 确认自动复活
- resurrection(member) if member.hp == 0
- end
- @status_window.refresh
- end
- end
- #--------------------------------------------------------------------------
- # ● 战败的处理
- #--------------------------------------------------------------------------
- alias process_defeat_n01 process_defeat
- def process_defeat
- for member in $game_party.members
- @spriteset.set_stand_by_action(member.actor?, member.index)
- end
- process_defeat_n01
- end
- #--------------------------------------------------------------------------
- # ● 帮助窗口的显示
- #--------------------------------------------------------------------------
- def pop_help(obj)
- return if obj.extension.include?("不显示HELP")
- @help_window2 = Window_Battle_Help.new
- @help_window2.set_text(obj.name, 1)
- @help_window2.visible = true
- end
- #--------------------------------------------------------------------------
- # ● 显示情报窗口的移动
- #--------------------------------------------------------------------------
- def move1_info_viewport
- @info_viewport.ox = 128
- loop do
- update_basic
- @info_viewport.ox -= 8
- @party_command_window.x -= 8
- @actor_command_window.x += 8
- break if @info_viewport.ox == 64
- end
- end
- #--------------------------------------------------------------------------
- # ● 显示情报窗口的移动
- #--------------------------------------------------------------------------
- def move2_info_viewport
- @info_viewport.ox = 64
- loop do
- update_basic
- @info_viewport.ox -= 8
- @party_command_window.x += 8
- @actor_command_window.x -= 8
- break if @info_viewport.ox == 0
- end
- end
- #--------------------------------------------------------------------------
- # ● 到下个主人公的指令选择
- #--------------------------------------------------------------------------
- alias next_actor_n01 next_actor
- def next_actor
- # 只有能动的角色显示指令动作
- if @active_battler != nil && @active_battler.inputable? && @active_battler.actor?
- @spriteset.set_action(true, @actor_index,@active_battler.command_a)
- end
- # 最后的角色时、动作结束前等待
- @wait_count = 32 if @actor_index == $game_party.members.size-1
- next_actor_n01
- # 只有能动的角色现实指令动作
- if @active_battler != nil && @active_battler.inputable? && @active_battler.actor?
- @spriteset.set_action(true, @actor_index,@active_battler.command_b)
- end
- end
- #--------------------------------------------------------------------------
- # ● 到前一个角色的指令选择
- #--------------------------------------------------------------------------
- alias prior_actor_n01 prior_actor
- def prior_actor
- # 只有能动的角色显示指令动作
- if @active_battler != nil && @active_battler.inputable? && @active_battler.actor?
- @active_battler.action.clear
- @spriteset.set_action(true, @actor_index,@active_battler.command_a)
- end
- prior_actor_n01
- # 只有能动的角色显示指令动作
- if @active_battler != nil && @active_battler.inputable? && @active_battler.actor?
- @active_battler.action.clear
- @spriteset.set_action(true, @actor_index,@active_battler.command_b)
- end
- end
- #--------------------------------------------------------------------------
- # ● 目标选择的开始 ※再定义
- #--------------------------------------------------------------------------
- def start_target_enemy_selection
- start_target_selection
- end
- #--------------------------------------------------------------------------
- # ● 目标选择的开始 ※再定义
- #--------------------------------------------------------------------------
- def start_target_actor_selection
- start_target_selection(true)
- end
- #--------------------------------------------------------------------------
- # ● 目标选择的开始
- #--------------------------------------------------------------------------
- def start_target_selection(actor = false)
- members = $game_party.members if actor
- members = $game_troop.members unless actor
- # 光标精灵的作成
- @cursor = Sprite.new
- @cursor.bitmap = Cache.character("Cursor")
- @cursor.src_rect.set(0, 0, 32, 32)
- @cursor_flame = 0
- @cursor.x = -200
- @cursor.y = -200
- @cursor.ox = @cursor.width
- @cursor.oy = @cursor.height
- # 作成显示目标名的帮助窗口
- @help_window.visible = false if @help_window != nil
- @help_window2 = Window_Battle_Help.new #改改改改改#
- @help_window2.set_text("", 1) #改改改改改#
- # 消除不要的窗口
- @actor_command_window.active = false
- @skill_window.visible = false if @skill_window != nil
- @item_window.visible = false if @item_window != nil
- # 存在的目标为最底号码的对象也想最初那样
- @index = 0
- @max_index = members.size - 1
- # 主人公为站都不能者也可以作为目标来与敌方区分
- unless actor
- members.size.times do
- break if members[@index].exist?
- @index += 1
- end
- end
- @help_window2.set_text(members[@index].name, 1)
- select_member(actor)
- end
- #--------------------------------------------------------------------------
- # ● 目标选择
- #--------------------------------------------------------------------------
- def select_member(actor = false)
- members = $game_party.members if actor
- members = $game_troop.members unless actor
- loop do
- update_basic
- @cursor_flame = 0 if @cursor_flame == 30
- @cursor.src_rect.set(0, 0, 32, 32) if @cursor_flame == 29
- @cursor.src_rect.set(0, 32, 32, 32) if @cursor_flame == 15
- point = @spriteset.set_cursor(actor, @index)
- @cursor.x = point[0]
- @cursor.y = point[1]
- @cursor_flame += 1
- if Input.trigger?(Input::B)
- @item_window.active = true if @item_window != nil
- Sound.play_cancel
- end_target_selection
- break
- elsif Input.trigger?(Input::C)
- Sound.play_decision
- @active_battler.action.target_index = @index
- end_target_selection
- end_skill_selection
- end_item_selection
- next_actor
- break
- end
- if Input.repeat?(Input::LEFT)
- if actor
- cursor_down(members, actor) if $back_attack
- cursor_up(members, actor) unless $back_attack
- else
- cursor_up(members, actor) if $back_attack
- cursor_down(members, actor) unless $back_attack
- end
- end
- if Input.repeat?(Input::RIGHT)
- if actor
- cursor_up(members, actor) if $back_attack
- cursor_down(members, actor) unless $back_attack
- else
- cursor_down(members, actor) if $back_attack
- cursor_up(members, actor) unless $back_attack
- end
- end
- cursor_up(members, actor) if Input.repeat?(Input::UP)
- cursor_down(members, actor) if Input.repeat?(Input::DOWN)
- end
- end
- #--------------------------------------------------------------------------
- # ● 向前移动光标
- #--------------------------------------------------------------------------
- def cursor_up(members, actor)
- Sound.play_cursor
- members.size.times do
- @index += members.size - 1
- @index %= members.size
- break if actor
- break if members[@index].exist?
- end
- @help_window2.set_text(members[@index].name, 1)
- end
- #--------------------------------------------------------------------------
- # ● 向后移动光标
- #--------------------------------------------------------------------------
- def cursor_down(members, actor)
- Sound.play_cursor
- members.size.times do
- @index += 1
- @index %= members.size
- break if actor
- break if members[@index].exist? && !actor
- end
- @help_window2.set_text(members[@index].name, 1)
- end
- #--------------------------------------------------------------------------
- # ● 目标选择的完毕
- #--------------------------------------------------------------------------
- def end_target_selection
- @actor_command_window.active = true if @actor_command_window.index == 0
- @skill_window.visible = true if @skill_window != nil
- @item_window.visible = true if @item_window != nil
- @cursor.dispose
- @cursor = nil
- if @help_window2 != nil
- @help_window2.dispose
- @help_window2 = nil
- end
- @help_window.visible = true if @help_window != nil
- end
- #--------------------------------------------------------------------------
- # ● 逃走的处理 ※再定义
- #--------------------------------------------------------------------------
- def process_escape
- @info_viewport.visible = false
- @message_window.visible = true
- text = sprintf(Vocab::EscapeStart, $game_party.name)
- $game_message.texts.push(text)
- if $game_troop.preemptive
- success = true
- else
- success = (rand(100) < @escape_ratio)
- end
- Sound.play_escape
- # 不能动的主人公除外逃走成功动作
- if success
- for actor in $game_party.members
- unless actor.restriction >= 4
- @spriteset.set_action(true, actor.index,actor.run_success)
- end
- end
- wait_for_message
- battle_end(1)
- # 不能动主人公除外逃走失败动作
- else
- for actor in $game_party.members
- unless actor.restriction >= 4
- @spriteset.set_action(true, actor.index,actor.run_ng)
- end
- end
- @escape_ratio += 10
- $game_message.texts.push('\.' + Vocab::EscapeFailure)
- wait_for_message
- $game_party.clear_actions
- start_main
- end
- end
- #--------------------------------------------------------------------------
- # ● 胜利的处理
- #--------------------------------------------------------------------------
- alias process_victory_n01 process_victory
- def process_victory
- @status_window.visible = true
- @message_window.visible = false
- # BOSS击倒为等待加长
- for enemy in $game_troop.members
- break boss_wait = true if enemy.collapse_type == 3
- end
- wait(440) if boss_wait
- wait(N01::WIN_WAIT) unless boss_wait
- # 不能动的主人公除外胜利动作
- for actor in $game_party.members
- unless actor.restriction >= 4
- @spriteset.set_action(true, actor.index,actor.win)
- end
- end
- process_victory_n01
- end
- #--------------------------------------------------------------------------
- # ● 战斗处理的实行开始 ※再定义
- #--------------------------------------------------------------------------
- def start_main
- $game_troop.increase_turn
- @info_viewport.visible = true
- @info_viewport.ox = 0
- @party_command_window.active = false
- @actor_command_window.active = false
- @status_window.index = @actor_index = -1
- @active_battler = nil
- @message_window.clear
- $game_troop.make_actions
- make_action_orders
- # 情报表示窗口的移动
- move1_info_viewport
- # 作成显示技能名的帮助窗口
- @help_window2 = Window_Battle_Help.new
- @help_window2.visible = false
- process_battle_event
- end
- #--------------------------------------------------------------------------
- # ● 战斗事件的处理 ※再定义
- #--------------------------------------------------------------------------
- def process_battle_event
- loop do
- return if judge_win_loss
- return if $game_temp.next_scene != nil
- $game_troop.interpreter.update
- $game_troop.setup_battle_event
- @message_window.update
- if $game_message.visible
- @message_window.visible = true
- @status_window.visible = false
- end
- wait_for_message
- @message_window.visible = false
- @status_window.visible = true
- if $game_troop.forcing_battler != nil
- process_action
- end
- return unless $game_troop.interpreter.running?
- update_basic
- end
- end
- #--------------------------------------------------------------------------
- # ● 作成行动顺序
- #--------------------------------------------------------------------------
- alias make_action_orders_n01 make_action_orders
- def make_action_orders
- make_action_orders_n01
- # 确认敌方的行动回数
- for enemy in $game_troop.members
- enemy.act_time = 0
- if enemy.action_time[0] != 1
- action_time = 0
- # 获得确认的回数
- for i in 1...enemy.action_time[0]
- action_time += 1 if rand(100) < enemy.action_time[1]
- end
- enemy.act_time = action_time
- action_time.times do
- enemy_order_time(enemy)
- action_time -= 1
- break if action_time == 0
- end
- enemy.adj_speed = nil
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 作成敌方的行动回数
- #--------------------------------------------------------------------------
- def enemy_order_time(enemy)
- enemy.make_action_speed2(enemy.action_time[2])
- select_time = 0
- for member in @action_battlers
- select_time += 1
- break @action_battlers.push(enemy) if member.action.speed < enemy.adj_speed
- break @action_battlers.push(enemy) if select_time == @action_battlers.size
- end
- end
- #--------------------------------------------------------------------------
- # ● 战斗行动的实行
- #--------------------------------------------------------------------------
- alias execute_action_n01 execute_action
- def execute_action
- # 技能、物品扩张时如果设定了行动前不清空
- if @active_battler.action.kind != 0
- obj = @active_battler.action.skill if @active_battler.action.kind == 1
- obj = @active_battler.action.item if @active_battler.action.kind == 2
- if obj.extension.include?("行動前フラッシュなし")
- @active_battler.white_flash = false
- end
- end
- # 角色主动化
- @active_battler.active = true
- # 強制行動中のスキル派生
- @active_battler.derivation = 0 if @active_battler.action.forcing
- execute_action_n01
- # 有技能连发时、行动继续
- if @active_battler.derivation != 0
- @active_battler.action.kind = 1
- @active_battler.action.skill_id = @active_battler.derivation
- @action_battlers.unshift(@active_battler)
- return process_action
- end
- # 有复数行动的敌方时、决定下个行动
- if !@active_battler.actor? && @active_battler.act_time != 0
- @active_battler.make_action
- @active_battler.act_time -= 1
- end
- end
- #--------------------------------------------------------------------------
- # ● 回合完毕 ※再定义
- #--------------------------------------------------------------------------
- def turn_end
- for member in $game_party.members + $game_troop.members
- member.clear_action_results
- next unless member.exist?
- member.slip_damage = false
- actor = member.actor?
- damage = 0
- # 确认是否有0回合解除的状态
- for state in member.states
- member.remove_state(state.id) if state.extension.include?("0回合解除")
- # 实行连续伤害 state = [ 对象, 定数, 比例, POP, 战斗不能许可]
- next unless state.extension.include?("连续伤害")
- for ext in state.slip_extension
- if ext[0] == "hp"
- base_damage = ext[1] + member.maxhp * ext[2] / 100
- damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
- slip_pop = ext[3]
- slip_dead = ext[4]
- slip_damage_flug = true
- member.slip_damage = true
- end
- end
- end
- # 默认的连续伤害
- if member.slip_damage? && member.exist? && !slip_damage_flug
- damage += member.apply_variance(member.maxhp / 10, 10)
- slip_dead = false
- slip_pop = true
- slip_damage_flug = true
- member.slip_damage = true
- end
- damage = member.hp - 1 if damage >= member.hp && slip_dead = false
- member.hp -= damage
- @spriteset.set_damage_pop(actor, member.index, damage) if slip_pop
- member.perform_collapse if member.dead? && member.slip_damage
- member.clear_action_results
- end
- @status_window.refresh
- # HP和MP的定时改变
- wait(55) if slip_damage_flug
- slip_damage_flug = false
- for member in $game_party.members + $game_troop.members
- member.clear_action_results
- next unless member.exist?
- actor = member.actor?
- mp_damage = 0
- for state in member.states
- next unless state.extension.include?("连续伤害")
- for ext in state.slip_extension
- if ext[0] == "mp"
- base_damage = ext[1] + member.maxmp * ext[2] / 100
- mp_damage += base_damage + base_damage * (rand(5) - rand(5)) / 100
- slip_pop = ext[2]
- slip_damage_flug = true
- end
- end
- member.mp_damage = mp_damage
- member.mp -= mp_damage
- @spriteset.set_damage_pop(actor, member.index, mp_damage) if slip_pop
- end
- member.clear_action_results
- end
- @status_window.refresh
- # 伤害和回復的定时改变
- wait(55) if slip_damage_flug
- # 是否有自动回复
- for member in $game_party.members
- if member.auto_hp_recover and member.exist?
- plus_hp = member.maxhp / 20
- member.hp += plus_hp
- @spriteset.set_damage_pop(true, member.index, plus_hp * -1)
- plus_hp_flug = true
- end
- member.clear_action_results
- end
- @status_window.refresh
- wait(55) if plus_hp_flug
- @help_window.dispose if @help_window != nil
- @help_window = nil
- move2_info_viewport
- $game_troop.turn_ending = true
- $game_troop.preemptive = false
- $game_troop.surprise = false
- process_battle_event
- $game_troop.turn_ending = false
- start_party_command_selection
- end
- #--------------------------------------------------------------------------
- # ● 战斗行动的实行 : 攻击 ※再定义
- #--------------------------------------------------------------------------
- def execute_action_attack
- if @active_battler.actor?
- if @active_battler.weapon_id == 0
- action = @active_battler.non_weapon
- # 行动中不会死的队员全员为不死身化
- immortaling
- else
- action = $data_weapons[@active_battler.weapon_id].base_action
- # 用赋予战斗不能的武器来分歧不死身设定
- if $data_weapons[@active_battler.weapon_id].state_set.include?(1)
- for member in $game_party.members + $game_troop.members
- next if member.immortal
- next if member.dead?
- member.dying = true
- end
- else
- immortaling
- end
- end
- else
- if @active_battler.weapon == 0
- action = @active_battler.base_action
- immortaling
- else
- action = $data_weapons[@active_battler.weapon].base_action
- if $data_weapons[@active_battler.weapon].state_set.include?(1)
- for member in $game_party.members + $game_troop.members
- next if member.immortal
- next if member.dead?
- member.dying = true
- end
- else
- immortaling
- end
- end
- end
- target_decision
- @spriteset.set_action(@active_battler.actor?, @active_battler.index, action)
- playing_action
- end
- #--------------------------------------------------------------------------
- # ● 战斗行动的实行 : 防御 ※再定义
- #--------------------------------------------------------------------------
- def execute_action_guard
- @help_window2.set_text("防御", 1)
- @help_window2.visible = true
- # 解除角色的主动化
- @active_battler.active = false
- wait(45)
- @help_window2.visible = false
- end
- #--------------------------------------------------------------------------
- # ● 战斗行动的实行 : 逃走
- #--------------------------------------------------------------------------
- def execute_action_escape
- @spriteset.set_action(false, @active_battler.index, @active_battler.run_success)
- @help_window2.set_text("逃走", 1)
- @help_window2.visible = true
- # 解除角色的主动化
- @active_battler.active = false
- @active_battler.escape
- Sound.play_escape
- wait(45)
- @help_window2.visible = false
- end
- #--------------------------------------------------------------------------
- # ● 战斗行动的实行 : 待机 ※再定义
- #--------------------------------------------------------------------------
- def execute_action_wait
- # 解除角色的主动化
- @active_battler.active = false
- @help_window2.set_text("不知所措", 1)
- @help_window2.visible = true
- wait(45)
- @help_window2.visible = false
- end
- #--------------------------------------------------------------------------
- # ● 战斗行动的实行 : 技能 ※再定义
- #--------------------------------------------------------------------------
- def execute_action_skill
- skill = @active_battler.action.skill
- # 用赋予战斗不能的技能来分歧不死身设定
- if skill.plus_state_set.include?(1)
- for member in $game_party.members + $game_troop.members
- next if member.immortal
- next if member.dead?
- member.dying = true
- end
- else
- # 行动中不会死的队员全员为不死身化
- immortaling
- end
- # 判别技能使用可能
- return unless @active_battler.skill_can_use?(skill)
- # 决定目标
- target_decision(skill)
- # 动作开始
- @spriteset.set_action(@active_battler.actor?, @active_battler.index, skill.base_action)
- # 帮助窗口中显示技能名
- pop_help(skill)
- # 动作中
- playing_action
- # 技能成本消费
- @active_battler.consum_skill_cost(skill)
- # 还原状态窗口
- @status_window.refresh
- # 取得公共事件
- $game_temp.common_event_id = skill.common_event_id
- end
- #--------------------------------------------------------------------------
- # ● 战斗行动的实行 : 物品 ※再定义
- #--------------------------------------------------------------------------
- def execute_action_item
- item = @active_battler.action.item
- # 用赋予战斗不能的物品来分歧不死身设定
- if item.plus_state_set.include?(1)
- for member in $game_party.members + $game_troop.members
- next if member.immortal
- next if member.dead?
- member.dying = true
- end
- else
- # 行动中不会死的队员全员为不死身化
- immortaling
- end
- $game_party.consume_item(item)
- target_decision(item)
- @spriteset.set_action(@active_battler.actor?, @active_battler.index, item.base_action)
- pop_help(item)
- playing_action
- $game_temp.common_event_id = item.common_event_id
- end
- #--------------------------------------------------------------------------
- # ● 决定目标
- #--------------------------------------------------------------------------
- def target_decision(obj = nil)
- @targets = @active_battler.action.make_targets
- # 目标不存在时、动作中断
- if @targets.size == 0
- action = @active_battler.recover_action
- @spriteset.set_action(@active_battler.actor?, @active_battler.index, action)
- end
- if obj != nil
- # 如果默认了设定复数回合攻击时变换成单体目标
- if obj.for_two? or obj.for_three? or obj.dual?
- @targets = [@targets[0]]
- end
- # 随机目标时、选择的一体保持在随机范围
- if obj.extension.include?("随机目标")
- randum_targets = @targets.dup
- @targets = [randum_targets[rand(randum_targets.size)]]
- end
- end
- # 目标情报发送到角色精灵
- @spriteset.set_target(@active_battler.actor?, @active_battler.index, @targets)
- end
- #--------------------------------------------------------------------------
- # ● 实行动作中
- #--------------------------------------------------------------------------
- def playing_action
- loop do
- update_basic
- # 查看被归纳在主动角色的动作情报
- action = @active_battler.play
- next if action == 0
- @active_battler.play = 0
- if action[0] == "个别处理"
- individual
- elsif action == "击倒许可"
- unimmortaling
- elsif action == "解除主动"
- break action_end
- elsif action == "完毕"
- break action_end
- elsif action[0] == "对象动画"
- damage_action(action[1])
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 个别处理
- #--------------------------------------------------------------------------
- def individual
- # 保持目标情报
- @individual_target = @targets
- @stand_by_target = @targets.dup
- end
- #--------------------------------------------------------------------------
- # ● 击倒禁止
- #--------------------------------------------------------------------------
- def immortaling
- # 赋予全员不死身
- for member in $game_party.members + $game_troop.members
- # 如果不能战斗时跳过处理
- next if member.dead?
- # 有事件等设定不死身创立解除无效的标志
- member.non_dead = true if member.immortal
- member.immortal = true
- end
- end
- #--------------------------------------------------------------------------
- # ● 击倒许可
- #--------------------------------------------------------------------------
- def unimmortaling
- # 个别处理中无击败许可
- return if @active_battler.individual
- # 解除全员的不死身化(用事件设定的不死身除外)
- for member in $game_party.members + $game_troop.members
- if member.dying
- member.dying = false
- if member.dead? or member.hp == 0
- member.add_state(1)
- member.perform_collapse
- end
- end
- next if member.non_dead
- next if member.dead?
- member.immortal = false
- member.add_state(1) if member.hp == 0
- member.perform_collapse
- end
- # 在这个时候反映待机动作
- @targets = @stand_by_target if @stand_by_target != nil
- return if @targets == nil or @targets.size == 0
- for target in @targets
- @spriteset.set_stand_by_action(target.actor?, target.index)
- # 确认自动复活
- next unless target.hp == 0
- resurrection(target)
- end
- end
- #--------------------------------------------------------------------------
- # ● 自动复活
- #--------------------------------------------------------------------------
- def resurrection(target)
- for state in target.states
- for ext in state.extension
- name = ext.split('')
- next unless name[0] == "自"
- wait(50)
- name = name.join
- name.slice!("自动复活/")
- target.hp = target.maxhp * name.to_i / 100
- target.remove_state(1)
- target.remove_state(state.id)
- target.animation_id = N01::RESURRECTION
- target.animation_mirror = true if $back_attack
- @status_window.refresh
- wait($data_animations[N01::RESURRECTION].frame_max * 4)
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 魔法反射・无效
- #--------------------------------------------------------------------------
- def magic_reflection(target, obj)
- return if obj.physical_attack
- for state in target.states
- for ext in state.extension
- name = ext.split('')
- next unless name[0] == "魔"
- if name[2] == "反"
- name = name.join
- name.slice!("魔法反射/")
- target.animation_id = name.to_i
- target.animation_mirror = true if $back_attack
- @reflection = true
- else
- name = name.join
- name.slice!("魔法无效/")
- target.animation_id = name.to_i
- target.animation_mirror = true if $back_attack
- @invalid = true
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 物理反射・无效
- #--------------------------------------------------------------------------
- def physics_reflection(target, obj)
- return if obj != nil && !obj.physical_attack
- for state in target.states
- for ext in state.extension
- name = ext.split('')
- next unless name[0] == "物"
- if name[2] == "反"
- name = name.join
- name.slice!("物理反射/")
- target.animation_id = name.to_i
- target.animation_mirror = true if $back_attack
- @reflection = true
- else
- name = name.join
- name.slice!("物理无效/")
- target.animation_id = name.to_i
- target.animation_mirror = true if $back_attack
- @invalid = true
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 技能成本吸收
- #--------------------------------------------------------------------------
- def absorb_cost(target, obj)
- for state in target.states
- if state.extension.include?("成本吸收")
- cost = @active_battler.calc_mp_cost(obj)
- # 区分为SP消费和HP消费
- return target.hp += cost if obj.extension.include?("HP消耗")
- return target.mp += cost
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 吸收处理
- #--------------------------------------------------------------------------
- def absorb_attack(obj, target, index, actor)
- absorb = target.hp_damage
- absorb = target.mp_damage if target.mp_damage != 0
- # 目标是复数同时吸收处理
- @wide_attack = true if obj.scope == 2 or obj.scope == 4 or obj.scope == 6 or obj.extension.include?("全区域")
- if @wide_attack && @absorb == nil && @targets.size != 1
- # 返还吸收的部分
- @active_battler.hp -= @active_battler.hp_damage
- @active_battler.mp -= @active_battler.mp_damage
- # 之后加算吸收返还的数值
- @absorb = absorb
- @absorb_target_size = @targets.size - 2
- elsif @absorb != nil && @absorb_target_size > 0
- @active_battler.hp -= @active_battler.hp_damage
- @active_battler.mp -= @active_battler.mp_damage
- @absorb += absorb
- @absorb_target_size -= 1
- # 处理复数目标的最重吸收
- elsif @absorb != nil
- # 返还吸收的部分
- @active_battler.hp -= @active_battler.hp_damage
- @active_battler.mp -= @active_battler.mp_damage
- @absorb += absorb
- # 在这里反映全部吸收部分
- @active_battler.hp_damage = -@absorb
- @active_battler.mp_damage = -@absorb if target.mp_damage != 0
- @active_battler.hp -= @active_battler.hp_damage
- @active_battler.mp -= @active_battler.mp_damage
- # 吸收量是0时吸收者方面的处理
- absorb_action = ["absorb", nil, false] if @absorb == 0
- absorb_action = [nil, nil, false] if @absorb != 0
- @spriteset.set_damage_action(actor, index, absorb_action)
- @active_battler.perform_collapse
- @absorb = nil
- @absorb_target_size = nil
- # 单体吸收的处理
- else
- # 吸收量是0时吸收者方面的处理
- absorb_action = ["absorb", nil, false] if absorb == 0
- absorb_action = [nil, nil, false] if absorb != 0
- @spriteset.set_damage_action(actor, index, absorb_action)
- # 逆向吸收时HP为0时
- @absorb_dead = true if @active_battler.hp == 0 && !@active_battler.non_dead
- end
- # 吸收量是0时对象者方面的处理
- return 0 if absorb == 0
- end
- #--------------------------------------------------------------------------
- # ● 动作完毕
- #--------------------------------------------------------------------------
- def action_end
- # 初期化
- @individual_target = nil
- @help_window2.visible = false if @help_window2 != nil && @help_window2.visible
- @active_battler.active = false
- @active_battler.clear_action_results
- # 慎重起见解除不死身化
- unimmortaling
- # 被反射时
- if @active_battler.reflex != nil
- if @active_battler.action.skill?
- obj = @active_battler.action.skill
- @active_battler.perfect_skill_effect(@active_battler, obj)
- elsif @active_battler.action.item?
- obj = @active_battler.action.item
- @active_battler.item_effect(@active_battler, obj)
- else
- @active_battler.perfect_attack_effect(@active_battler)
- end
- pop_damage(@active_battler, obj, @active_battler.reflex)
- @active_battler.perform_collapse
- @active_battler.reflex = nil
- wait(N01::COLLAPSE_WAIT)
- end
- #因逆向吸收战斗不能时
- if @absorb_dead
- @active_battler.perform_collapse
- @absorb_dead = false
- wait(N01::COLLAPSE_WAIT)
- end
- # 缩短到下次行动前的等待
- wait(N01::ACTION_WAIT)
- end
- #--------------------------------------------------------------------------
- # ● 伤害处理
- #--------------------------------------------------------------------------
- def damage_action(action)
- # 单独处理时目标一个一个发出
- @targets = [@individual_target.shift] if @active_battler.individual
- # 技能时
- if @active_battler.action.skill?
- obj = @active_battler.action.skill
- for target in @targets
- return if target == nil
- return if target.dead? && !obj.for_dead_friend?
- # HP为0时战斗不能復活以外不MISS
- target.revival = true if obj.for_dead_friend?
- if target.hp == 0 && !obj.for_dead_friend?
- target.perfect_skill_effect(@active_battler, obj)
- # 确认必中
- elsif obj.extension.include?("必中")
- target.perfect_skill_effect(@active_battler, obj)
- else
- # 确认反射
- magic_reflection(target, obj) unless obj.extension.include?("无视反射")
- physics_reflection(target, obj) unless obj.extension.include?("无视反射")
- # 计算伤害
- target.skill_effect(@active_battler, obj) unless @reflection or @invalid
- end
- pop_damage(target, obj, action) unless @reflection or @invalid
- # 确认成本吸收
- absorb_cost(target, obj)
- # 获取反射动作
- @active_battler.reflex = action if @reflection
- @reflection = false
- @invalid = false
- end
- # 物品时
- elsif @active_battler.action.item?
- obj = @active_battler.action.item
- for target in @targets
- return if target == nil
- return if target.dead? && !obj.for_dead_friend?
- target.revival = true if obj.for_dead_friend?
- if target.hp == 0 && !obj.for_dead_friend?
- target.perfect_item_effect(@active_battler, obj)
- elsif obj.extension.include?("必中")
- target.perfect_item_effect(@active_battler, obj)
- else
- magic_reflection(target, obj) unless obj.extension.include?("无视反射")
- physics_reflection(target, obj) unless obj.extension.include?("无视反射")
- target.item_effect(@active_battler, obj) unless @reflection or @invalid
- end
- pop_damage(target, obj, action) unless @reflection or @invalid
- @active_battler.reflex = action if @reflection
- @reflection = false
- @invalid = false
- end
- # 通常攻击时
- else
- for target in @targets
- return if target == nil or target.dead?
- physics_reflection(target, nil)
- target.perfect_attack_effect(@active_battler) if target.hp <= 0
- target.attack_effect(@active_battler) unless target.hp <= 0 or @reflection or @invalid
- pop_damage(target, nil, action) unless @reflection or @invalid
- # 获取反射动作
- @active_battler.reflex = action if @reflection
- @reflection = false
- @invalid = false
- end
- end
- # 还原状态窗口
- @status_window.refresh
- # 考虑连续性懂得随机目标、立刻选择下个目标
- return if obj == nil
- target_decision(obj) if obj.extension.include?("随机目标")
- end
- #--------------------------------------------------------------------------
- # ● 伤害表示 action = [动画ID,反转标志,动作许可]
- #--------------------------------------------------------------------------
- def pop_damage(target, obj, action)
- index = @active_battler.index
- actor = @active_battler.actor?
- if obj != nil
- # 技能或者物品是吸收属性时
- absorb = absorb_attack(obj, target, index, actor) if obj.absorb_damage
- action.push(true) if absorb == 0
- # 扩张设定为伤害动作禁止时
- action[2] = false if obj.extension.include?("禁止伤害动作")
- end
- # 还原对象
- @spriteset.set_damage_action(target.actor?, target.index, action)
- end
- end
- #==============================================================================
- # ■ Game_BattleAction
- #------------------------------------------------------------------------------
- # 战斗行动处理的类。
- #==============================================================================
- class Game_BattleAction
- #--------------------------------------------------------------------------
- # ● 判定行动是否有效 ※再定义
- #--------------------------------------------------------------------------
- def valid?
- return false if nothing? # 什么都不作
- return true if @forcing # 强制行动中
- return false unless battler.movable? # 行动不能
- if skill? # 技能
- if battler.derivation != 0
- battler.derivation = 0
- return true
- end
- return false unless battler.skill_can_use?(skill)
- elsif item? # 物品
- return false unless friends_unit.item_can_use?(item)
- end
- return true
- end
- #--------------------------------------------------------------------------
- # ● 作成目标的排列 ※再定义
- #--------------------------------------------------------------------------
- def make_targets
- if attack?
- return make_attack_targets
- elsif skill?
- targets = make_obj_targets(skill)
- targets = make_obj_targets2(skill, targets) if skill.extension != ["なし"]
- return targets
- elsif item?
- targets = make_obj_targets(item)
- targets = make_obj_targets2(item, targets) if item.extension != ["なし"]
- return targets
- end
- end
- #--------------------------------------------------------------------------
- # ● 作成技能或是物品的目标的扩张
- #--------------------------------------------------------------------------
- def make_obj_targets2(obj, targets)
- if obj.extension.include?("全区域")
- targets = []
- targets += opponents_unit.existing_members
- targets += friends_unit.existing_members
- end
- if obj.extension.include?("自分以外")
- targets.delete($game_party.members[battler.index]) if battler.actor?
- targets.delete($game_troop.members[battler.index]) unless battler.actor?
- end
- return targets.compact
- end
- end
- #==============================================================================
- # ■ Sprite_Base
- #------------------------------------------------------------------------------
- # 追加了动画的表示处理的精灵的类。
- #==============================================================================
- class Sprite_Base < Sprite
- #--------------------------------------------------------------------------
- # ● 动画的更新 动画追随精灵
- #--------------------------------------------------------------------------
- alias update_animation_n01 update_animation
- def update_animation
- @animation_ox = x - ox + width / 2
- @animation_oy = y - oy + height / 2
- update_animation_n01
- end
- end
- #==============================================================================
- # ■ Spriteset_Battle
- #------------------------------------------------------------------------------
- # 整理战斗画面的精灵的类。
- #==============================================================================
- class Spriteset_Battle
- #--------------------------------------------------------------------------
- # ● 敌方精灵的作成
- #--------------------------------------------------------------------------
- def create_enemies
- @enemy_sprites = []
- for i in 0...$game_troop.members.size
- @enemy_sprites.push(Sprite_Battler.new(@viewport1, $game_troop.members[i]))
- @enemy_sprites[i].opacity = 0 if $game_troop.members[i].hidden
- end
- end
- #--------------------------------------------------------------------------
- # ● 主人公精灵的作成
- #--------------------------------------------------------------------------
- def create_actors
- @actor_sprites = []
- # 准备成员最大数精灵
- for i in 0...N01::MAX_MEMBER
- @actor_sprites.push(Sprite_Battler.new(@viewport1, $game_party.members[i]))
- if $game_party.members[i] != nil
- @actor_sprites[i].make_battler
- @actor_sprites[i].first_action
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 战斗层精灵的作成
- #--------------------------------------------------------------------------
- def create_battlefloor
- @battlefloor_sprite = Sprite.new(@viewport1)
- @battlefloor_sprite.bitmap = Cache.system("BattleFloor")
- @battlefloor_sprite.x = N01::FLOOR[0]
- @battlefloor_sprite.y = N01::FLOOR[1]
- @battlefloor_sprite.opacity = N01::FLOOR[2]
- @battlefloor_sprite.z = 1
- # 偷袭时時、反转层面和背景
- back_attack
- if $back_attack
- @battlefloor_sprite.mirror = true
- @battleback_sprite.mirror = true
- $game_troop.surprise = true
- else
- $game_troop.surprise = false
- end
- end
- #--------------------------------------------------------------------------
- # ● 背部攻击
- #--------------------------------------------------------------------------
- def back_attack
- # 強制背部攻击时标志ON
- for i in 0...N01::BACK_ATTACK_SWITCH.size
- return $back_attack = true if $game_switches[N01::BACK_ATTACK_SWITCH[i]]
- end
- # 如果没发生偷袭时将中断处理
- return $back_attack = false unless $game_troop.surprise && N01::BACK_ATTACK
- # 确认根据装备等背部攻击的无效化
- for actor in $game_party.members
- return $back_attack = false if N01::NON_BACK_ATTACK_WEAPONS.include?(actor.weapon_id)
- return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR1.include?(actor.armor1_id)
- return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR2.include?(actor.armor2_id)
- return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR3.include?(actor.armor3_id)
- return $back_attack = false if N01::NON_BACK_ATTACK_ARMOR4.include?(actor.armor4_id)
- for i in 0...N01::NON_BACK_ATTACK_SKILLS.size
- return $back_attack = false if actor.skill_id_learn?(N01::NON_BACK_ATTACK_SKILLS[i])
- end
- end
- # 发生背部攻击
- $back_attack = true
- end
- #--------------------------------------------------------------------------
- # ● 主人公精灵的更新 ※再定义
- #--------------------------------------------------------------------------
- def update_actors
- for i in 0...@actor_sprites.size
- if $party_change
- $party_change = false
- dispose_actors
- return create_actors
- end
- if @actor_sprites[i].battler.id != $game_party.members[i].id
- dispose_actors
- return create_actors
- end
- @actor_sprites[i].update
- end
- end
- #--------------------------------------------------------------------------
- # ● 伤害动作组合
- #--------------------------------------------------------------------------
- def set_damage_action(actor, index, action)
- @actor_sprites[index].damage_action(action) if actor
- @enemy_sprites[index].damage_action(action) unless actor
- end
- #--------------------------------------------------------------------------
- # ● 伤害POP组合
- #--------------------------------------------------------------------------
- def set_damage_pop(actor, index, damage)
- @actor_sprites[index].damage_pop(damage) if actor
- @enemy_sprites[index].damage_pop(damage) unless actor
- end
- #--------------------------------------------------------------------------
- # ● 目标组合
- #--------------------------------------------------------------------------
- def set_target(actor, index, target)
- @actor_sprites[index].get_target(target) if actor
- @enemy_sprites[index].get_target(target) unless actor
- end
- #--------------------------------------------------------------------------
- # ● 动作组合
- #--------------------------------------------------------------------------
- def set_action(actor, index, kind)
- @actor_sprites[index].start_action(kind) if actor
- @enemy_sprites[index].start_action(kind) unless actor
- end
- #--------------------------------------------------------------------------
- # ● 待机动作组合
- #--------------------------------------------------------------------------
- def set_stand_by_action(actor, index)
- @actor_sprites[index].push_stand_by if actor
- @enemy_sprites[index].push_stand_by unless actor
- end
- #--------------------------------------------------------------------------
- # ● 光标移动的组合
- #--------------------------------------------------------------------------
- def set_cursor(actor, index)
- return [@actor_sprites[index].x, @actor_sprites[index].y] if actor
- return [@enemy_sprites[index].x, @enemy_sprites[index].y] unless actor
- end
- end
- #==============================================================================
- # ■ Sprite_MoveAnime
- #------------------------------------------------------------------------------
- # 动画飞出用的精灵。
- #==============================================================================
- class Sprite_MoveAnime < Sprite_Base
- #--------------------------------------------------------------------------
- # ● 公开变数
- #--------------------------------------------------------------------------
- attr_accessor :battler
- attr_accessor :base_x # 自身の基本X座標
- attr_accessor :base_y # 自身の基本Y座標
- #--------------------------------------------------------------------------
- # ● 客观初期化
- #--------------------------------------------------------------------------
- def initialize(viewport,battler = nil)
- super(viewport)
- @battler = battler
- self.visible = false
- @base_x = 0
- @base_y = 0
- @move_x = 0 # 移动后的X坐标
- @move_y = 0 # 移动后Y坐标
- @moving_x = 0 # 1单位相当移动的X坐标
- @moving_y = 0 # 1单位相当移动的Y坐标
- @orbit = 0 # 圆轨道
- @orbit_plus = 0 # 加算的圆轨道
- @orbit_time = 0 # 圆轨道计算时间
- @through = false # 是否贯通
- @finish = false # 移动完毕的标志
- @time = 0 # 移動時間
- @angle = 0 # 一动时间
- @angling = 0 # 1单位相当移动的武器的角度
- end
- #--------------------------------------------------------------------------
- # ● 获取动作
- #--------------------------------------------------------------------------
- def anime_action(id,mirror,distanse_x,distanse_y,type,speed,orbit,weapon,icon_index,icon_weapon)
- # 算出1单位相当的移动距离
- @time = speed
- @moving_x = distanse_x / speed
- @moving_y = distanse_y / speed
- # 是否贯通
- @through = true if type == 1
- # 获取圆轨道
- @orbit_plus = orbit
- @orbit_time = @time
- # 有无武器图片
- if weapon != ""
- action = N01::ANIME[weapon].dup
- @angle = action[0]
- end_angle = action[1]
- time = action[2]
- # 调出1单位相当的旋转角度
- @angling = (end_angle - @angle)/ time
- # 取得开始角度
- self.angle = @angle
- # 显示武器图片
- self.mirror = mirror
- if icon_weapon
- self.bitmap = Cache.system("Iconset")
- self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
- self.ox = 12
- self.oy = 12
- else
- self.bitmap = Cache.character(icon_index)
- self.ox = self.bitmap.width / 2
- self.oy = self.bitmap.height / 2
- end
- self.visible = true
- # 显示在角色面前
- self.z = 1000
- end
- # 最初不动只显示一次
- self.x = @base_x + @move_x
- self.y = @base_y + @move_y + @orbit
- if id != 0
- animation = $data_animations[id]
- start_animation(animation, mirror)
- end
- end
- #--------------------------------------------------------------------------
- # ● 变化了的移动组合
- #--------------------------------------------------------------------------
- def action_reset
- @moving_x = @moving_y = @move_x = @move_y = @base_x = @base_y = @orbit = 0
- @orbit_time = @angling = @angle = 0
- @through = self.visible = @finish = false
- dispose_animation
- end
- #--------------------------------------------------------------------------
- # ● 贯通完毕
- #--------------------------------------------------------------------------
- def finish?
- return @finish
- end
- #--------------------------------------------------------------------------
- # ● 单位更新
- #--------------------------------------------------------------------------
- def update
- super
- # 时间消耗
- @time -= 1
- # 时间内指定的移动
- if @time >= 0
- @move_x += @moving_x
- @move_y += @moving_y
- # 计算圆轨道
- if @time < @orbit_time / 2
- @orbit_plus = @orbit_plus * 5 / 4
- elsif @time == @orbit_time / 2
- @orbit_plus *= -1
- else
- @orbit_plus = @orbit_plus * 2 / 3
- end
- @orbit += @orbit_plus
- end
- # 就算时间完毕如果是贯穿的话也会继续直进
- @time = 100 if @time < 0 && @through
- @finish = true if @time < 0 && !@through
- # 更新精灵的坐标
- self.x = @base_x + @move_x
- self.y = @base_y + @move_y + @orbit
- # 贯穿时、从画面消失的完毕标志ON
- if self.x < -200 or self.x > 840 or self.y < -200 or self.y > 680
- @finish = true
- end
- # 更新武器图片
- if self.visible
- @angle += @angling
- self.angle = @angle
- end
- end
- end
- #==============================================================================
- # ■ Sprite_Weapon
- #------------------------------------------------------------------------------
- # 显示武器用的精灵。
- #==============================================================================
- class Sprite_Weapon < Sprite_Base
- #--------------------------------------------------------------------------
- # ● 公开变数
- #--------------------------------------------------------------------------
- attr_accessor :battler
- #--------------------------------------------------------------------------
- # ● 客观初始化
- #--------------------------------------------------------------------------
- def initialize(viewport,battler = nil)
- super(viewport)
- @battler = battler
- @action = [] # 武器的动作情报
- @move_x = 0 # 移动后的X坐标
- @move_y = 0 # 移动后的Y坐标
- @move_z = 0 # 移动后的Z坐标
- @plus_x = 0 # 略微调整X坐标
- @plus_y = 0 # 略微调整Y坐标
- @angle = 0 # 武器的旋转角度
- @zoom_x = 1 # 武器的横向放大率
- @zoom_y = 1 # 武器的纵向放大率
- @moving_x = 0 # 1单位相当移动的X坐标
- @moving_y = 0 # 1单位相当移动的Y坐标
- @angling = 0 # 1单位相当的旋转角度
- @zooming_x = 1 # 1单位相当的横向放大率
- @zooming_y = 1 # 1单位相当的纵向放大率
- @freeze = -1 # 固定动画用的武器位置
- @mirroring = false # 角色是否为反转
- @time = N01::ANIME_PATTERN + 1 # 更新回数
- # 获取武器
- weapon_graphics
- end
- #--------------------------------------------------------------------------
- # ● 解放
- #--------------------------------------------------------------------------
- def dispose
- self.bitmap.dispose if self.bitmap != nil
- super
- end
- #--------------------------------------------------------------------------
- # ● 获取武器
- #--------------------------------------------------------------------------
- def weapon_graphics(left = false)
- if @battler.actor?
- weapon = @battler.weapons[0] unless left
- weapon = @battler.weapons[1] if left
- else
- weapon = $data_weapons[@battler.weapon]
- end
- # 确认敌方的反转标志
- return if weapon == nil
- # 如果没有武器时处理被取消
- if weapon.graphic == ""
- icon_index = weapon.icon_index
- self.bitmap = Cache.system("Iconset")
- self.src_rect.set(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
- @weapon_width = @weapon_height = 24
- # 如果有指定ID时、获取不是ICON的图片
- else
- self.bitmap = Cache.character(weapon.graphic)
- @weapon_width = self.bitmap.width
- @weapon_height = self.bitmap.height
- end
- end
- #--------------------------------------------------------------------------
- # ● 获取动画固定时的武器位置
- #--------------------------------------------------------------------------
- def freeze(action)
- @freeze = action
- end
- #--------------------------------------------------------------------------
- # ● 获取武器动作 freeze
- #--------------------------------------------------------------------------
- def weapon_action(action,loop)
- # 没有名称时不显示
- if action == ""
- self.visible = false
- # 空手时不显示
- elsif @weapon_id == 0
- self.visible = false
- # 受取武器的动作情报
- else
- @action = N01::ANIME[action]
- act0 = @action[0]
- act1 = @action[1]
- act2 = @action[2]
- act3 = @action[3]
- act4 = @action[4]
- act5 = @action[5]
- act6 = @action[6]
- act7 = @action[7]
- act8 = @action[8]
- act9 = @action[9]
- act10 = @action[10]
- # 角色为反转时、X轴的动作也逆转
- if @mirroring
- act0 *= -1
- act3 *= -1
- act4 *= -1
- act9 *= -1
- end
- # 背部攻击时逆转
- time = N01::ANIME_PATTERN
- # 确认Z坐标
- if act2
- self.z = @battler.position_z + 1
- else
- self.z = @battler.position_z - 1
- end
- # 在这里实行反转、如果已经反转就还原
- if act6
- if self.mirror
- self.mirror = false
- else
- self.mirror = true
- end
- end
- # 反映角色的反转
- if @mirroring
- if self.mirror
- self.mirror = false
- else
- self.mirror = true
- end
- end
- # 计算以动画图片数相除的变化
- @moving_x = act0 / time
- @moving_y = act1 / time
- # 代入最初的角度
- @angle = act3
- self.angle = @angle
- # 计算更新角度
- @angling = (act4 - act3)/ time
- # 角度没有被插入时、在这里加算剩余旋转的部分
- @angle += (act4 - act3) % time
- # 拡大縮小
- @zooming_x = (1 - act7) / time
- @zooming_y = (1 - act8) / time
- # 如果是反转时、逆转反转前的原点
- if self.mirror
- case act5
- when 1 # 左上→到右上
- act5 = 2
- when 2 # 右上→到左上
- act5 = 1
- when 3 # 左下→到右下
- act5 = 4
- when 4 # 右下→到左下
- act5 = 3
- end
- end
- # 设定旋转前的原点
- case act5
- when 0 # 中心
- self.ox = @weapon_width / 2
- self.oy = @weapon_height / 2
- when 1 # 左上
- self.ox = 0
- self.oy = 0
- when 2 # 右上
- self.ox = @weapon_width
- self.oy = 0
- when 3 # 左下
- self.ox = 0
- self.oy = @weapon_height
- when 4 # 右下
- self.ox = @weapon_width
- self.oy = @weapon_height
- end
- # 略微调整坐标
- @plus_x = act9
- @plus_y = act10
- # 往返循环时标志ON
- @loop = true if loop == 0
- # 第一次时0开始、在这时作-1回的动作
- @angle -= @angling
- @zoom_x -= @zooming_x
- @zoom_y -= @zooming_y
- # 更新精灵的坐标
- @move_x -= @moving_x
- @move_y -= @moving_y
- @move_z = 1000 if act2
- # 固定动画时、在这时消化动作
- if @freeze != -1
- for i in 0..@freeze + 1
- @angle += @angling
- @zoom_x += @zooming_x
- @zoom_y += @zooming_y
- # 更新精灵的坐标
- @move_x += @moving_x
- @move_y += @moving_y
- end
- @angling = 0
- @zooming_x = 0
- @zooming_y = 0
- @moving_x = 0
- @moving_y = 0
- end
- # 可视
- self.visible = true
- end
- end
- #--------------------------------------------------------------------------
- # ● 变化后的动作全部组合
- #--------------------------------------------------------------------------
- def action_reset
- @moving_x = @moving_y = @move_x = @move_y = @plus_x = @plus_y = 0
- @angling = @zooming_x = @zooming_y = @angle = self.angle = @move_z = 0
- @zoom_x = @zoom_y = self.zoom_x = self.zoom_y = 1
- self.mirror = self.visible = @loop = false
- @freeze = -1
- @action = []
- @time = N01::ANIME_PATTERN + 1
- end
- #--------------------------------------------------------------------------
- # ● 作出往返循环
- #--------------------------------------------------------------------------
- def action_loop
- # 让动作相反
- @angling *= -1
- @zooming_x *= -1
- @zooming_y *= -1
- @moving_x *= -1
- @moving_y *= -1
- end
- #--------------------------------------------------------------------------
- # ● 主人公是反转时、自身也反转
- #--------------------------------------------------------------------------
- def mirroring
- return @mirroring = false if @mirroring
- @mirroring = true
- end
- #--------------------------------------------------------------------------
- # ● 只有在主人公动画被更新时武器动作的変化也更新
- #--------------------------------------------------------------------------
- def action
- return if @time <= 0
- @time -= 1
- # 旋转、更新放大缩小
- @angle += @angling
- @zoom_x += @zooming_x
- @zoom_y += @zooming_y
- # 更新精灵的坐标
- @move_x += @moving_x
- @move_y += @moving_y
- # 往返循环时动作反转
- if @loop && @time == 0
- @time = N01::ANIME_PATTERN + 1
- action_loop
- end
- end
- #--------------------------------------------------------------------------
- # ● 单位更新
- #--------------------------------------------------------------------------
- def update
- super
- # 旋转、更新放大缩小
- self.angle = @angle
- self.zoom_x = @zoom_x
- self.zoom_y = @zoom_y
- # 更新精灵的坐标
- self.x = @battler.position_x + @move_x + @plus_x
- self.y = @battler.position_y + @move_y + @plus_y
- self.z = @battler.position_z + @move_z - 1
- end
- end
- #==============================================================================
- # ■ Game_Battler (分割定义 1)
- #------------------------------------------------------------------------------
- # 处理角色的类。
- #==============================================================================
- class Game_Battler
- #--------------------------------------------------------------------------
- # ● 公开变数
- #--------------------------------------------------------------------------
- attr_accessor :hp_damage # 行动結果: HP 伤害
- attr_accessor :mp_damage # 行动結果: MP 伤害
- attr_accessor :move_x # X方向的移动修正
- attr_accessor :move_y # Y方向的移动修正
- attr_accessor :move_z # Z方向的移动修正
- attr_accessor :jump # 修正跳跃
- attr_accessor :active # 是否主动
- attr_accessor :non_dead # 不死身标志
- attr_accessor :dying # 即死标志
- attr_accessor :slip_damage # 连续伤害标志
- attr_accessor :derivation # 技能连发ID
- attr_accessor :individual # 技能连发ID
- attr_accessor :play # 动作情报
- attr_accessor :force_action # 强制动作情报
- attr_accessor :force_target # 目标变更情报
- attr_accessor :revival # 復活
- attr_accessor :double_damage # HPMP两方同时伤害
- attr_accessor :reflex # 技能反射情报
- attr_accessor :absorb # 技能成本吸收
- attr_reader :base_position_x # 初期配置X坐标
- attr_reader :base_position_y # 初期配置Y座標
- attr_accessor :force_damage # 事件的伤害
- #--------------------------------------------------------------------------
- # ● 客观初期化
- #--------------------------------------------------------------------------
- alias initialize_n01 initialize
- def initialize
- initialize_n01
- @move_x = @move_y = @move_z = @plus_y = @jump = @derivation = @play = 0
- @force_action = @force_target = @base_position_x = @base_position_y = 0
- @absorb = @act_time = @force_damage = 0
- @active = @non_dead = @individual = @slip_damage = @revival = false
- @double_damage = @dying = false
- end
- #--------------------------------------------------------------------------
- # ● 返还最新的状态ID
- #--------------------------------------------------------------------------
- def state_id
- return @states[@states.size - 1]
- end
- #--------------------------------------------------------------------------
- # ● 判定技能的使用可能 ※再定义
- #--------------------------------------------------------------------------
- def skill_can_use?(skill)
- return false unless skill.is_a?(RPG::Skill)
- return false unless movable?
- return false if silent? and skill.spi_f > 0
- if skill.extension.include?("HP消耗")
- return false if calc_mp_cost(skill) > hp
- else
- return false if calc_mp_cost(skill) > mp
- end
- if $game_temp.in_battle
- return skill.battle_ok?
- else
- return skill.menu_ok?
- end
- end
- #--------------------------------------------------------------------------
- # ● 技能的消费 MP 计算 ※再定义
- #--------------------------------------------------------------------------
- def calc_mp_cost(skill)
- if half_mp_cost && !skill.extension.include?("MP消耗减半无效")
- cost = skill.mp_cost / 2
- else
- cost = skill.mp_cost
- end
- if skill.extension.include?("%成本MAX")
- return self.maxhp * cost / 100 if skill.extension.include?("HP消耗")
- return self.maxmp * cost / 100
- elsif skill.extension.include?("%成本NOW")
- return self.hp * cost / 100 if skill.extension.include?("HP消耗")
- return self.mp * cost / 100
- end
- return cost
- end
- #--------------------------------------------------------------------------
- # ● 技能成本消费
- #--------------------------------------------------------------------------
- def consum_skill_cost(skill)
- return false unless skill_can_use?(skill)
- cost = calc_mp_cost(skill)
- return self.hp -= cost if skill.extension.include?("HP消耗")
- return self.mp -= cost
- end
- #--------------------------------------------------------------------------
- # ● 根据通常攻击计算伤害 修正二刀流
- #--------------------------------------------------------------------------
- alias make_attack_damage_value_n01 make_attack_damage_value
- def make_attack_damage_value(attacker)
- make_attack_damage_value_n01(attacker)
- # 只有在装备了两把武器时修正有效
- return unless attacker.actor?
- return if attacker.weapons[0] == nil
- return if attacker.weapons[1] == nil
- @hp_damage = @hp_damage * N01::TWO_SWORDS_STYLE[0] / 100
- end
- #--------------------------------------------------------------------------
- # ● 根据技能或者物品来计算伤害 修正二刀流
- #--------------------------------------------------------------------------
- alias make_obj_damage_value_n01 make_obj_damage_value
- def make_obj_damage_value(user, obj)
- make_obj_damage_value_n01(user, obj)
- # 只有在装备了两把武器时修正有效
- return unless user.actor?
- return if user.weapons[0] == nil
- return if user.weapons[1] == nil
- if obj.damage_to_mp
- @mp_damage = @mp_damage * N01::TWO_SWORDS_STYLE[1] / 100 # 伤害MP
- else
- @hp_damage = @hp_damage * N01::TWO_SWORDS_STYLE[1] / 100 # 伤害HP
- end
- end
- #--------------------------------------------------------------------------
- # ● 使用通常攻击的効果 全部战斗不能,不能绝对回避的处理
- #--------------------------------------------------------------------------
- def perfect_attack_effect(attacker)
- clear_action_results
- make_attack_damage_value(attacker) # 计算伤害
- execute_damage(attacker) # 反映伤害
- apply_state_changes(attacker) # 状态变化
- end
- #--------------------------------------------------------------------------
- # ● 使用技能的效果 全部战斗不能,不能绝对回避的处理
- #--------------------------------------------------------------------------
- def perfect_skill_effect(user, skill)
- clear_action_results
- make_obj_damage_value(user, skill) # 伤害計算
- make_obj_absorb_effect(user, skill) # 吸収効果計算
- execute_damage(user) # 伤害反映
- apply_state_changes(skill) # 状态变化
- end
- #--------------------------------------------------------------------------
- # ● 使用物品的効果 全部战斗不能,不能绝对回避的处理
- #--------------------------------------------------------------------------
- def perfect_item_effect(user, item)
- clear_action_results
- hp_recovery = calc_hp_recovery(user, item) # 计算HP的回复量
- mp_recovery = calc_mp_recovery(user, item) # 计算MP的回复量
- make_obj_damage_value(user, item) # 计算伤害
- @hp_damage -= hp_recovery # 扣除HP的回复量
- @mp_damage -= mp_recovery # 扣除MP的回复量
- make_obj_absorb_effect(user, item) # 计算吸收效果
- execute_damage(user) # 反映伤害
- item_growth_effect(user, item) # 使用成长效果
- if item.physical_attack and @hp_damage == 0 # 物理ノーダメージ判定
- return
- end
- apply_state_changes(item) # 状态变化
- end
- #--------------------------------------------------------------------------
- # ● 伤害的反映
- #--------------------------------------------------------------------------
- alias execute_damage_n01 execute_damage
- def execute_damage(user)
- execute_damage_n01(user)
- # 吸収时这里的处理相冲
- if @absorbed
- user.hp_damage = -@hp_damage
- user.mp_damage = -@mp_damage
- end
- end
- #--------------------------------------------------------------------------
- # ● 使用技能的効果
- #--------------------------------------------------------------------------
- alias skill_effect_n01 skill_effect
- def skill_effect(user, obj)
- # 保持变化前的HPMP
- nowhp = self.hp
- nowmp = self.mp
- # 为了计算现在HPMP的威力获取变化前的使用者的HPMP
- if obj.extension.include?("HP消耗")
- user_hp = user.hp + user.calc_mp_cost(obj)
- user_mp = user.mp
- else
- user_hp = user.hp
- user_mp = user.mp + user.calc_mp_cost(obj)
- end
- # 确认扩张设定
- check_extension(obj)
- # 计算伤害
- skill_effect_n01(user, obj)
- # 有伤害系的扩张时这里的处理会相冲
- if @extension
- self.hp = nowhp
- self.mp = nowmp
- end
- # 攻击未名中时中断处理
- return if self.evaded or self.missed
- # 变换伤害属性
- damage = @hp_damage unless obj.damage_to_mp
- damage = @mp_damage if obj.damage_to_mp
- # 比例伤害
- if @ratio_maxdamage != nil
- damage = self.maxhp * @ratio_maxdamage / 100 unless obj.damage_to_mp
- damage = self.maxmp * @ratio_maxdamage / 100 if obj.damage_to_mp
- end
- if @ratio_nowdamage != nil
- damage = self.hp * @ratio_nowdamage / 100 unless obj.damage_to_mp
- damage = self.mp * @ratio_nowdamage / 100 if obj.damage_to_mp
- end
- # 成本威力
- if @cost_damage
- cost = user.calc_mp_cost(obj)
- if obj.extension.include?("HP消耗")
- damage = damage * cost / user.maxhp
- else
- damage = damage * cost / user.maxmp
- end
- end
- # 現在HP威力
- damage = damage * user_hp / user.maxhp if @nowhp_damage
- # 現在MP威力
- damage = damage * user_mp / user.maxmp if @nowmp_damage
- # 放弃伤害属性的变换
- @hp_damage = damage unless obj.damage_to_mp
- @mp_damage = damage if obj.damage_to_mp
- # 反应扩张
- if @extension
- self.hp -= @hp_damage
- self.mp -= @mp_damage
- end
- # 初期化
- @extension = false
- @cost_damage = false
- @nowhp_damage = false
- @nowmp_damage = false
- @ratio_maxdamage = nil
- @ratio_nowdamage = nil
- end
- #--------------------------------------------------------------------------
- # ● 确认扩张设定
- #--------------------------------------------------------------------------
- def check_extension(skill)
- for ext in skill.extension
- # 成本威力
- if ext == "成本威力"
- @extension = true
- next @cost_damage = true
- # 現在HP威力
- elsif ext == "现HP威力"
- @extension = true
- next @nowhp_damage = true
- # 現在MP威力
- elsif ext == "现MP威力"
- @extension = true
- next @nowmp_damage = true
- else
- # 比例伤害
- name = ext.split('')
- if name[5] == "M"
- name = name.join
- name.slice!("%伤害MAX/")
- @extension = true
- next @ratio_maxdamage = name.to_i
- elsif name[5] == "N"
- name = name.join
- name.slice!("%伤害NOW/")
- @extension = true
- next @ratio_nowdamage = name.to_i
- end
- end
- end
- end
- #--------------------------------------------------------------------------
- # ● 初期配置的変更
- #--------------------------------------------------------------------------
- def change_base_position(x, y)
- @base_position_x = x
- @base_position_y = y
- end
- #--------------------------------------------------------------------------
- # ● 初期化
- #--------------------------------------------------------------------------
- def reset_coordinate
- @move_x = @move_y = @move_z = @jump = @derivation = 0
- @active = @non_dead = @individual = false
- end
- #--------------------------------------------------------------------------
- # ● 使用连续伤害的効果
- #--------------------------------------------------------------------------
- def slip_damage_effect
- if slip_damage? and @hp > 0
- @hp_damage = apply_variance(maxhp / 10, 10)
- @hp_damage = @hp - 1 if @hp_damage >= @hp
- self.hp -= @hp_damage
- end
- end
- #--------------------------------------------------------------------------
- # ● 事件的伤害POP
- #--------------------------------------------------------------------------
- def damage_num(num = nil)
- return if dead? or !$game_temp.in_battle or num == 0
- @force_damage = num
- end
- end
- #==============================================================================
- # ■ Game_Actor
- #------------------------------------------------------------------------------
- # 处理主人公的类。
- #==============================================================================
- class Game_Actor < Game_Battler
- #--------------------------------------------------------------------------
- # ● 公开变数
- #--------------------------------------------------------------------------
- attr_accessor :two_swords_change # 强制替换二刀流的标志
- #--------------------------------------------------------------------------
- # ● 根据ID判定技能是否习得
- #--------------------------------------------------------------------------
- def skill_id_learn?(skill_id)
- return @skills.include?(skill_id)
- end
- #--------------------------------------------------------------------------
- # ● 判定技能的使用可能 ※再定义
- #--------------------------------------------------------------------------
- def skill_can_use?(skill)
- return super
- end
- #--------------------------------------------------------------------------
- # ● 图片的变更
- #--------------------------------------------------------------------------
- def graphic_change(character_name)
- @character_name = character_name
- end
- #--------------------------------------------------------------------------
- # ● 击倒的实行 ※再定义
- #--------------------------------------------------------------------------
- def perform_collapse
- Sound.play_actor_collapse if $game_temp.in_battle and dead?
- end
- #--------------------------------------------------------------------------
- # ● 初期配置的取得
- #--------------------------------------------------------------------------
- def base_position
- base = N01::ACTOR_POSITION[self.index]
- @base_position_x = base[0]
- @base_position_y = base[1]
- # バックアタック時はX軸を逆に
- @base_position_x = Graphics.width - base[0] if $back_attack && N01::BACK_ATTACK
- end
- #--------------------------------------------------------------------------
- # ● 战斗画面 X 坐标的取得
- #--------------------------------------------------------------------------
- def position_x
- return 0 if self.index == nil
- return @base_position_x + @move_x
- end
- #--------------------------------------------------------------------------
- # ● 战斗画面 Y 坐标的取得
- #--------------------------------------------------------------------------
- def position_y
- return 0 if self.index == nil
- return @base_position_y + @move_y + @jump
- end
- #--------------------------------------------------------------------------
- # ● 战斗画面 Z 坐标的取得
- #--------------------------------------------------------------------------
- def position_z
- return 0 if self.index == nil
- return self.index + @base_position_y + @move_y + @move_z - @jump + 200
- end
- end
- #==============================================================================
- # ■ Game_Enemy
- #------------------------------------------------------------------------------
- # 处理敌方的类。
- #==============================================================================
- class Game_Enemy < Game_Battler
- #--------------------------------------------------------------------------
- # ● 公开变数
- #--------------------------------------------------------------------------
- attr_accessor :adj_speed # 复数会合行动的速度修正
- attr_accessor :act_time # 行动数回
- #--------------------------------------------------------------------------
- # ● 动作速度的決定 复数回合行动用
- #--------------------------------------------------------------------------
- def make_action_speed2(adj)
- @adj_speed = self.action.speed if @adj_speed == nil
- @adj_speed = @adj_speed * adj / 100
- end
- #--------------------------------------------------------------------------
- # ● 击倒的实行 ※再定义
- #--------------------------------------------------------------------------
- def perform_collapse
- @force_action = ["N01collapse"] if $game_temp.in_battle and dead?
- end
- #--------------------------------------------------------------------------
- # ● 获取初期配置
- #--------------------------------------------------------------------------
- def base_position
- return if self.index == nil
- # 确认角色画像的大小修正Y坐标
- bitmap = Bitmap.new("Graphics/Battlers/" + @battler_name) if !self.anime_on
- bitmap = Bitmap.new("Graphics/Characters/" + @battler_name) if self.anime_on && N01::WALK_ANIME
- bitmap = Bitmap.new("Graphics/Characters/" + @battler_name + "_1") if self.anime_on && !N01::WALK_ANIME
- height = bitmap.height
- @base_position_x = self.screen_x + self.position_plus[0]
- @base_position_y = self.screen_y + self.position_plus[1] - height / 3
- bitmap.dispose
- # 背后攻击时X轴逆转
- if $back_attack && N01::BACK_ATTACK
- @base_position_x = Graphics.width - self.screen_x - self.position_plus[0]
- end
- end
- #--------------------------------------------------------------------------
- # ● 战斗画面 X 坐标的取得
- #--------------------------------------------------------------------------
- def position_x
- return @base_position_x - @move_x
- end
- #--------------------------------------------------------------------------
- # ● 战斗画面 Y 坐标的取得
- #--------------------------------------------------------------------------
- def position_y
- return @base_position_y + @move_y + @jump
- end
- #--------------------------------------------------------------------------
- # ● 战斗画面 Z 坐标的取得
- #--------------------------------------------------------------------------
- def position_z
- return position_y + @move_z - @jump + 200
- end
- end
- #==============================================================================
- # ■ Sprite_Damage
- #------------------------------------------------------------------------------
- # 伤害表示的精灵。
- #==============================================================================
- class Sprite_Damage < Sprite_Base
- #--------------------------------------------------------------------------
- # ● 公开变数
- #--------------------------------------------------------------------------
- attr_accessor :battler
- #--------------------------------------------------------------------------
- # ● 客观初期化
- #--------------------------------------------------------------------------
- def initialize(viewport,battler = nil)
- super(viewport)
- @battler = battler
- @damage = 0
- @duration = 0
- @x = 0
- @y = 0
- @z_plus = 0
- @minus = false
- @num1 = Sprite.new(viewport)
- @num2 = Sprite.new(viewport)
- @num3 = Sprite.new(viewport)
- @num4 = Sprite.new(viewport)
- @num5 = Sprite.new(viewport)
- @num1.visible = false
- @num2.visible = false
- @num3.visible = false
- @num4.visible = false
- @num5.visible = false
- end
- #--------------------------------------------------------------------------
- # ● 更新
- #--------------------------------------------------------------------------
- def update
- force_damage
- move_damage(@num5, @pop_time) if @num5.visible
- move_damage(@num4, @pop_time - 2) if @num4.visible
- move_damage(@num3, @pop_time - 4) if @num3.visible
- move_damage(@num2, @pop_time - 6) if @num2.visible
- move_damage(@num1, @pop_time - 8) if @num1.visible
- move_window if @window != nil
- @duration -= 1 if @duration > 0
- end
- #--------------------------------------------------------------------------
- # ● 事件的伤害POP
- #--------------------------------------------------------------------------
- def force_damage
- if @battler.force_damage != 0
- damage_pop(@battler.force_damage)
- if @battler.state?(20) # 薄葬
- if @battler.force_damage >= @battler.hp
- @battler.hp = 1
- else
- @battler.hp -= @battler.force_damage
- end
- else
- @battler.hp -= @battler.force_damage
- end
- @force_damage = true
- @battler.force_damage = 0
- $game_temp.status_window_refresh = true
- end
- end
- #--------------------------------------------------------------------------
- # ● 数値的移动
- #--------------------------------------------------------------------------
- def move_damage(num, min)
- case @duration
- when min-1..min
- num.x -= 1
- num.y -= 4
- when min-3..min-2
- num.x -= 1
- num.y -= 3
- when min-6..min-4
- num.y -= 2
- when min-14..min-7
- num.y += 2
- when min-17..min-15
- num.y -= 2
- when min-23..min-18
- num.y += 1
- when min-27..min-24
- num.y -= 1
- when min-30..min-28
- num.y += 1
- when min-33..min-31
- num.y -= 1
- when min-36..min-34
- num.y += 1
- end
- next_damage if @battler.double_damage && @duration == min-34
- num.opacity = 256 - (12 - @duration) * 32
- num.visible = false if @duration == 0
- if @force_damage && @duration == 0
- @force_damage = false
- @battler.perform_collapse
- end
- end
- #--------------------------------------------------------------------------
- # ● 文字窗口的移动
- #--------------------------------------------------------------------------
- def move_window
- @window.x -= 6 if @window_time > 0 && @window.x > 0
- @window_time -= 1
- if @duration == 0
- @window.dispose
- @window = nil
- end
- end
- #--------------------------------------------------------------------------
- # ● HPMP两方同时伤害
- #--------------------------------------------------------------------------
- def next_damage
- @battler.hp_damage = 0
- @battler.double_damage = false
- damage_pop
- end
- #--------------------------------------------------------------------------
- # ● 准备伤害POP
- #--------------------------------------------------------------------------
- def damage_pop(num = nil)
- reset
- damage = battler.hp_damage
- # 抽出状态的变化
- states = battler.added_states
- text = ""
- # MP伤害用文本(HPMP两方同时伤害除外)
- if [email protected]_damage && @battler.mp_damage != 0
- text = N01::POP_MP_DAM if battler.mp_damage > 0
- text = N01::POP_MP_REC if battler.mp_damage < 0
- damage = battler.mp_damage
- end
- # 连续伤害不显示MP伤害以外的文字
- if num == nil
- text = N01::POP_DAMAGE0 if damage == 0 && states == [] && !battler.revival
- text = N01::POP_MISS if battler.missed && states == []
- text = N01::POP_EVA if battler.evaded
- text = N01::POP_CRI if battler.critical
- for state in states
- # 无POP设定的状态不显示
- unless state.extension.include?("无POP")
- text += " " if text != ""
- text += state.name
- end
- end
- else
- damage = num
- end
- text = $data_states[$show_state].name unless $show_state == nil
- $show_state = nil
- # 区分伤害和回复
- @minus = false
- @minus = true if damage < 0
- damage = damage.abs
- # 略微调整POP位置
- adjust = -16
- adjust = 16 if $back_attack
- adjust = 0 if damage == 0
- @x = battler.position_x + adjust
- @y = battler.position_y
- window(text) if text != ""
- @pop_time = N01::NUM_DURATION
- # 没有伤害时没有数字的POP
- return @duration = @pop_time if damage == 0
- @num_time = -1
- damage_file(@num1, damage % 10, @pop_time - 7) if damage >= 0
- damage_file(@num2, (damage % 100)/10, @pop_time - 5) if damage >= 10
- damage_file(@num3, (damage % 1000)/100, @pop_time - 3) if damage >= 100
- damage_file(@num4, (damage % 10000)/1000, @pop_time - 1) if damage >= 1000
- damage_file(@num5, (damage % 100000)/10000, @pop_time + 1) if damage >= 10000
- end
- #--------------------------------------------------------------------------
- # ● 准备情报窗口
- #--------------------------------------------------------------------------
- def window(text)
- @window = Window_Damage.new(@x - 64, @y - 22)
- @window.opacity = 0
- @window.pop_text(text)
- @window_time = 5
- end
- #--------------------------------------------------------------------------
- # ● 准备数字画像
- #--------------------------------------------------------------------------
- def damage_file(num, cw, dur)
- num.visible = true
- # 判別文件
- file = N01::DAMAGE_GRAPHICS
- file = N01::RECOVER_GRAPHICS if @minus
- # 数字
- num.bitmap = Cache.system(file)
- @num_time += 1
- sx = num.bitmap.width / 10
- num.src_rect.set(cw * sx, 0, sx, num.height)
- num.x = @x - (num.width + N01::NUM_INTERBAL) * @num_time
- num.y = @y
- num.z = 2000 - @num_time
- @duration = dur
- @window.x = num.x - @window.width + 64 if @window != nil && N01::NON_DAMAGE_WINDOW
- @window.x = num.x - @window.width + 26 if @window != nil && !N01::NON_DAMAGE_WINDOW
- @window.x = 0 if @window != nil && @window.x < 0
- end
- #--------------------------------------------------------------------------
- # ● 伤害组合
- #--------------------------------------------------------------------------
- def reset
- @num5.visible = @num4.visible = @num3.visible = @num2.visible = @num1.visible = false
- @window.dispose if @window != nil
- @window = nil
- end
- #--------------------------------------------------------------------------
- # ● 開放
- #--------------------------------------------------------------------------
- def dispose
- super
- @num1.dispose
- @num2.dispose
- @num3.dispose
- @num4.dispose
- @num5.dispose
- @window.dispose if @window != nil
- end
- end
- #==============================================================================
- # ■ Window_Damage
- #------------------------------------------------------------------------------
- # 危机等表示的窗口。
- #==============================================================================
- class Window_Damage < Window_Base
- #--------------------------------------------------------------------------
- # ● 客观初期化
- #--------------------------------------------------------------------------
- def initialize(x, y)
- super(x, y, 160, 48)
- self.opacity = 0 if N01::NON_DAMAGE_WINDOW
- end
- #--------------------------------------------------------------------------
- # ● 窗口内容的作成
- #--------------------------------------------------------------------------
- def create_contents
- self.contents.dispose
- self.contents = Bitmap.new(width - 32, height - 32)
- end
- #--------------------------------------------------------------------------
- # ● 状态设定
- #--------------------------------------------------------------------------
- def pop_text(text, align = 1)
- self.contents.clear
- self.width = self.contents.text_size(text).width + 36
- self.contents = Bitmap.new(width - 32, height - 32)
- self.contents.font.color = normal_color
- self.contents.font.size = 16
- self.contents.draw_text(0,-8, width - 32, 32, text, align)
- end
- end
- #==============================================================================
- # ■ Window_Base
- #------------------------------------------------------------------------------
- # 游戏中处理所有窗口的超级类。
- #==============================================================================
- class Window_Base < Window
- #--------------------------------------------------------------------------
- # ● 状态的描画 ※再定义(反映设定不显示状态ICON)
- #--------------------------------------------------------------------------
- def draw_actor_state(actor, x, y, width = 96)
- count = 0
- for state in actor.states
- break if state.extension.include?("不显示ICON")
- draw_icon(state.icon_index, x + 24 * count, y)
- count += 1
- break if (24 * count > width - 24)
- end
- end
- end
- #==============================================================================
- # ■ Game_Temp
- #------------------------------------------------------------------------------
- # 不包含存储数据、处理一时数据的类。
- #==============================================================================
- class Game_Temp
- #--------------------------------------------------------------------------
- # ● 公开变数
- #--------------------------------------------------------------------------
- attr_accessor :status_window_refresh # 状态窗口的还原标志
- #--------------------------------------------------------------------------
- # ● 客观初期化
- #--------------------------------------------------------------------------
- alias initialize_n01 initialize
- def initialize
- initialize_n01
- @status_window_refresh = false
- end
- end
- #==============================================================================
- # ■ Game_Interpreter
- #------------------------------------------------------------------------------
- # 实行时间指令的解释。
- #==============================================================================
- class Game_Interpreter
- #--------------------------------------------------------------------------
- # ● HP 的增减
- #--------------------------------------------------------------------------
- def command_311
- if $game_temp.in_battle
- value = operate_value(@params[1], @params[2], @params[3])
- iterate_actor_id(@params[0]) do |actor|
- next if actor.dead?
- if @params[4] == false and actor.hp + value <= 0
- actor.damage_num(actor.hp - 1) # 如果不允许战斗不能时变为1
- else
- actor.damage_num(-value)
- end
- end
- return true
- else
- value = operate_value(@params[1], @params[2], @params[3])
- iterate_actor_id(@params[0]) do |actor|
- next if actor.dead?
- if @params[4] == false and actor.hp + value <= 0
- actor.hp = 1 # 如果不允许战斗不能时变为1
- else
- actor.hp += value
- end
- actor.perform_collapse
- end
- if $game_party.all_dead?
- $game_temp.next_scene = "gameover"
- end
- return true
- end
- end
- #--------------------------------------------------------------------------
- # ● 敌角色的 HP 增减
- #--------------------------------------------------------------------------
- def command_331
- value = operate_value(@params[1], @params[2], @params[3])
- iterate_enemy_index(@params[0]) do |enemy|
- if enemy.hp > 0
- if @params[4] == false and enemy.hp + value <= 0
- enemy.damage_num(enemy.hp - 1) # 如果不允许战斗不能时变为1
- else
- enemy.damage_num(-value)
- end
- end
- end
- return true
- end
- end
- #==============================================================================
- # ■ Game_Party
- #------------------------------------------------------------------------------
- # パーティを扱うクラスです。
- #==============================================================================
- class Game_Party < Game_Unit
- #--------------------------------------------------------------------------
- # ● アクターを加える
- # actor_id : アクター ID
- #--------------------------------------------------------------------------
- alias add_actor_n01 add_actor
- def add_actor(actor_id)
- add_actor_n01(actor_id)
- $party_change = true if actor_id == 4
- end
- #--------------------------------------------------------------------------
- # ● アクターを外す
- # actor_id : アクター ID
- #--------------------------------------------------------------------------
- alias remove_actor_n01 remove_actor
- def remove_actor(actor_id)
- remove_actor_n01(actor_id)
- $party_change = true if actor_id == 4
- end
- end
-
-
-
-
复制代码 有大神吗? |
|