找回密码
 点一下
查看: 1122|回复: 5

War3 Mod架构下的技能/武器目标过滤映射约定【开发者必读】

[复制链接]
发表于 2015-4-25 21:13:57 | 显示全部楼层 |阅读模式
什么是目标过滤映射约定?War3 Mod为什么需要目标过滤映射约定?

War3游戏中有着各种各样的目标类型:英雄、建筑、无敌、虚无、魔免、亡灵、牛头人、隐身、古树、树木、空中、地面等等。不同的目标类型会对技能的目标过滤和伤害造成影响。而SC2也有一套自己的目标类型:建筑、轻甲什么的,但是分的没War3那么细致,规则也不是很统一。问题SC2的目标类型数量是有限的,引擎目前并不支持随意添加新的目标类型,因此想要在SC2上实现War3,就需要很好地决定一个SC2目标类型与War3目标类型间的对应关系表,并在制作所有单位和技能的过程中都遵循这种对应关系,否则就可能会发生这样的现象:比如某个技能一方面可以打魔免的树妖,但是对同样魔免的破法却会提示无法对魔免使用。我把这个对应关系表称为War3 Mod目标过滤映射约定。你若想要基于War3 Mod来深入开发地图,那么记住这种对应关系是十分有必要的。

PS:实际上SC2的目标类型的数量原本是比War3要多一些的,但是SC2本身并不拥有War3的“攻击/护甲类型”系统。因此为了实现护甲类型系统,就需要把一些目标类型拿过来代替护甲,War3里面有8种护甲类型,因此我的War3 Mod中可用的目标类型也就相应地少了8种,由此就没有了能用剩下的SC2目标类型来一一对应War3目标类型的余裕,有一些冷僻的目标类型就必须用buff来代替了。此外,War3编辑器本身还存在许多目标过滤规则不统一的问题。因此我在正式开始制作War3 Mod之前就花了好久时间来确定这个对应关系,以及决定哪些类型用buff来代替。

注:本文的目标过滤映射约定仅适用于War3 Mod,无法适用于整个SC2引擎——甚至包括官方的War3模型包Mod。这是因为官方模型包Mod仅仅是为了展示模型资源,并未建立一个稳定的系统架构,因此我的War3 Mod仅仅使用了官方mod中的模型资源,而摒弃了其它一切数据从头开发。

你也可以不遵照文中的约定来制作地图,但是这就存在潜在的可能,会使你自建的技能和武器和War3 Mod中已经搭建的架构出现不兼容的问题。

那么现在就来说明War3 Mod的目标过滤映射,首先从护甲类型开始:


War3 Mod的护甲类型



护甲类型(War3)单位属性(War3 Mod)
轻甲Light
中甲Armored
重甲Massive
城防Structure
普通
英雄Heroic
神圣Robotic
无甲Biological


在War3 Mod中,你若想要设置一个单位的护甲类型,那么就只需要在这个单位的“属性”这一字段中勾上对应的单位属性即可。有些同学看到这里可能就要不满了,为啥上面这个表的右边都是英文啊?这要中文版编辑器的地图作者怎么看呢?

不用怕。SC2编辑器在这里很人性化地允许你改名单位属性的名字。所以中文版用户可以完全不用看上面这张表,在修改单位属性的时候,我已经把所有选项都改成和War3对应的名字了。


比如想要给步兵设置重甲就只需要勾上重甲即可。这样一来,你的步兵就会享受和War3里的重甲单位一样的攻击削减(受到魔法攻击双倍伤害)。整个攻防系统的内部实现已经完全由War3 Mod完成了,你不需要关心其后的实现方式(如果你有兴趣的话可以直接看源码)。注意除非你知道自己在做什么,否则不要给同一个单位设置一种以上的护甲类型(虽然SC2里面可以做到),否则攻击力的计算方式会变得很奇怪。



注1:设置好“属性”字段后不会自动改变你的单位的护甲图标(虽然护甲类型确实已经改变了)。护甲图标需要在单位的演算体中指定。护甲名字需要在单位属性里指定,但是这些都不会影响护甲的实际效果,实际效果仅由单位的“属性”字段决定。因此你实际上可以做到给任何单位自定义护甲图标和名字,而不管它实际的护甲类型是什么。

注2:“普通”护甲类型是War3的一种隐藏护甲类型,其实War3里面任何一个官方单位都没有这种护甲类型,但是该护甲类型却存在于编辑器里,其效果为受到所有攻击100%的伤害。在SC2里面由于每个单位默认就都是这样,所以你只需要不选择任何一种护甲类型属性就会变成普通护甲,这也是为什么上面的表中填写的对应关系是无,并非War3 Mod里没有这种护甲类型,而是什么都不选就会变成这种护甲类型。

注3:除开“普通”以外,“神圣”护甲在War3中只存在于战役单位里,并不存在于对战当中,所以War3 Mod若只是想实现对战部分的话,其实只需要把5种单位类型拿来作为护甲类型,这样的剩下的目标类型对应起来也有余裕些。但这个War3 Mod说到底是为了地图作者而存在的,我想要尽可能多地提供原版War3编辑器中所拥有的所有东西。所以才花了大量时间来设计这些个对应关系。



War3 Mod的目标类型标棋



现在来谈谈War3 Mod里的目标类型映射关系,下文中依然是左边为War3原版的目标类型,右边为War3 Mod中的标棋。很不幸的是,除了“属性”字段以外,我们不能给其它的编辑器旗标也随便起名字所以下面部分就要靠你的记忆了(主要是下文中的红字部分)。


空中->空中(“平面阵列”字段)
地面->地面(“平面阵列”字段)


这个粗看起来好像理所当然,但这里有必要特别提一下。在sc2默认标准下,所有非空中目标都是地面目标,意思是默认情况下SC2中所有建筑都是地面目标,所有物品都是地面目标,所有可破坏物也都是地面目标。而War3中呢,地面单位仅仅指地面单位,它和建筑、物品等等东西互相独立。简单来说War3里面的建筑都不算地面目标。

War3 Mod里的武器和技能为了最大限度地保持与War3的一致性,采用的标准是War3的标准。因此当你在War3 Mod里摆一个SC2狂战士去攻击War3建筑它会提示说“无法攻击该单位”。这是因为狂战士的武器是指定必须攻击地面目标的。最简单的解决方法就是直接修改狂战士的武器过滤,把“需要:地面”改成“不包括:空中”。这样狂战士就可以正确地攻击War3建筑了。


魔免->“不可阻止的(Unstoppable)”标棋
虚无->“静滞的(Stasis)”标棋


这两个可说是最为重要映射关系。首先War3所有的武器和技能都需要检查目标魔免和虚无状态,而SC2本身却没有这两个状态,因此若是使用特定Buff来代表这两个状态,势必需要修改每一个技能和效果给每一个判定目标的环节加上魔免和虚无鉴定,这是非常不好的设计。因此这两个目标状态最好是能直接在武器和技能的目标过滤里指定。另一方面,大部分的目标过滤其实是定死的,就像建筑属性一样,除非你对建筑进行变形,将其变为另一个单位类型,否则同一个单位不可能一会儿是建筑一会儿不是,但是魔免和虚无这两个状态却必须是动态的。有了这两个限制,魔免和虚无的映射对象就变得十分有限,这里利用SC2原本用来用在雷兽身上免疫定身效果的标棋:不可阻止来作为魔免的标棋,因为雷兽这家伙若说他免疫魔法,看起来会十分合理。而原本用来充当静态力场中的单位的旗标:“静滞的”则被我用来充当虚无旗标。

要注意的是,这两个标旗本身并没有任何作用,仅仅影响目标过滤。因此不必担心勾上不可阻止以后,单位会自动地变得无法被以任何形式定身,也不用担心勾上静滞以后,单位会变得无法以任何方式攻击。由于War3 Mod中所有的War3技能/武器都设置为了会判定这两个旗标。所以能War3中无视魔免的技能和效果依然会对不可阻止的单位有效,而War3的魔法攻击和技能伤害也同样可以打虚无单位。

然而同学们在创作新的技能和武器时仍然要特别注意这两个旗标,在所有的初始过滤和搜索效果中准确地设置好是否可以对魔免使用以及对虚无使用。许多新手地图作者经常会忘记这些细节,值得警惕。


英雄->“抵抗的(Resistant)”标旗

看到这你可能要问“为什么”?怎么回事?SC2本身不是有“英雄”这个标旗和目标过滤吗?

可是别忘了,“英雄”过滤上面已经被我们用掉了。英雄属性被用来充当英雄护甲,可是英雄护甲和英雄显然不等价。另一方面,技能目标过滤里的英雄和通常的“英雄”概念完全不同,实际上在War3编辑器里所有指定无法对英雄使用的技能全部无法对有抗性皮肤的单位或者6级以上的野怪使用。

所以其实War3目标过滤系统中的英雄等价于以上三种单位的集合。在War3 Mod里以上三种单位都会带“抵抗的”标旗。而Mod中的buff也都会判定这个标旗然后更改buff的持续时间。

因此在制作无法对英雄使用的技能时,应该在过滤里使用“不包括:抵抗的”,这样才能正确地受到抗性皮肤和6+野怪的影响。当然,如果你想要制作只能对真正的英雄使用的技能,你依然可以用英雄这个过滤。

注1:在制作6级以上的单位时,你需要在它的行为字段中添加“强大的野怪(6+)”这个buff。(英文版为PowerfulMob)。之所以为什么不直接勾上抵抗的标旗而是用这个Buff,是因为6+野怪的抗性皮肤状态必须是动态的,这个buff只有在单位是属于野怪玩家的时候才会免疫无法对英雄使用的技能(以及减少负面buff持续时间)。但如果你把野怪控制了过来,这个buff就会失效,这个野怪就不再自带抗性皮肤了。因此基本上你每制作一个6级以上的单位都给它们加上这一buff比较好,反正当他们属于普通玩家控制下的时候这个buff不会生效。
注2:对于带抗性皮肤技能的单位,这个技能本身就会给予抵抗的标旗,因此同样无需你在单位数据里勾上这个标旗。
注3:只有英雄需要在单位数据里勾上这个标旗,但如果你使用War3 Mod提供的标准英雄父类War3_Hero来新建英雄,这个标旗会默认被勾上(此外还自带英雄护甲,英雄经验系统,物品栏系统,力量敏捷智力属性,可以被祭坛复活等等,这些全部都可以被添加/去除或自定义)

*今后可能会有一篇单独的短教程来介绍英雄的构造。


建筑->“防止战败(Prevent Defeat)”标旗

理由同上,"建筑"其实已经被用作城墙这一护甲类型了。另一方面,其实War3里面非城墙护甲的建筑多得很啊,比如箭塔,地洞什么的。我们显然不能拿城墙护甲来等价建筑。

这个标旗其实翻译的不好,这个标旗的自带效果是当开启标准对战胜败条件触发器时,失去了所有有防止战败标旗的玩家会被自动判定为失败。这一点和War3的“建筑”标旗其实是一致的。所以在War3 Mod里使用防止战败来代表建筑。请大家特别注意。

注:War3 Mod中所有War3体系下建筑都会在血少时出现“起火”的特效(火的颜色与其所属种族对应)。这一过程由War3 Mod自动实现。


主城->“防止暴露(Prevent Reveal)”标旗

理由同上,这一标旗的自带效果是当开启标准对战胜败条件触发器时,失去了所有有防止暴露标旗的玩家会被自动向其它玩家显示它们的建筑所在位置,与War3的主城分类的效果完全一致。

此外,在War3 Mod中,勾上这一标旗的单位会自动作为回城卷可能考虑的目标(地图上拥有多个合适目标时按照主城等级排序)。


机械->“机械”属性
生物->“不包括:机械"过滤

War3编辑器的目标过滤系统存在一个很大的规则不统一的问题,比如单位分类里只有机械这类,但是目标过滤里却有“生物”这个过滤。对War3编辑器有一定了解的同学一定知道其实“生物”就是一切非机械单位。因此对于生物这个分类来说,War3 Mod并不需要单独设置一个对应的目标类型。只要属性字段里没有勾上机械的一概都是生物。想要实现War3里面的生物目标过滤,只需要在过滤规则里加上“不包括:机械”即可。

切莫将生物过滤与护甲类型中的无甲(本质上是SC2的“生物”属性)混淆起来。好在我已经在War3 Mod的编辑器中把SC2的“生物”改名成为了无甲,所以编辑器用户应该不用担心这个问题。

注:War3 Mod中所有War3体系下机械单位都会在血少时出现“起火”的特效(火的颜色与其所属种族对应)。这一过程由War3 Mod自动实现。


古树->“古树”(由灵能单位改名而来)属性

这个不用记,因为我已经在War3 Mod的编辑器里将“灵能单位”改名为“古树”。


墙->“墙”(由悬浮单位改名而来)属性

这个也不用记,因为我已经在War3 Mod的编辑器里将“悬浮单位”改名为“墙”。

墙在War3里面是一种可破坏物体,普通单位无法攻击它,但是攻城武器却可以破坏它们。这种东西在标准对战中并不多见,同样也是为了让War3地图作者的制作体验延续性而做进了War3 Mod里。


树->“需要:可采集的”+“不包括:无敌”

这个没有特别需要记忆的必要,除非你想要制作一些能破坏树木的技能。树简单来说就是一种不无敌的资源节点,所以按照以上的条件来过滤即可。


图腾->“不可指挥”(会在虚空之遗发布后改动

这一映射关系并不理想。实际上不可指挥这一标旗有一个副作用,既它并不像“抵抗的”、“不可阻止”这些标旗一样本身没有任何实际效果只是用作目标判定。这个不可指挥标旗确实会让单位忽略玩家发出的指令。所以别的图腾还好,暗影猎手的毒蛇图腾的操作上会出现问题(无法右键目标)。但目前来讲,由于标旗早已不够用,而图腾又是每个AoE技能和武器都必须判定的目标类型,因此只好以这种不甚完美的形态实现。

好消息是,我解析了虚空之遗Beta客户端后发现,虚空之遗的心引擎会增加一种额外的无效果标旗,到时候可以把图腾都换成那种。



War3单位通用旗标:埋藏(Buried)

基本上所有War3体系内的单位都应该勾上这一旗标(如果你基于War3 Mod提供的标准单位父类War3_Unit来新建单位,这个旗标会自动被勾上)。这个旗标会去除单位身上的隐身虚影。SC2和War3的一大区别就是SC2的单位在隐身时,敌人依然能看到模糊的影子。但War3单位却不会,敌人除非使用反隐手段,否则无法看到任何东西。这个旗标能够帮助你做到这点。此外,勾上此旗标后,即使你是能看到隐身单位的玩家,该单位的隐身特效(身上蓝色折光效果)也会消失,War3 Mod是用修改透明度的方法来展现隐身单位的(更贴近War3)。

当然,如果你想要做一个War3风格单位,但同时却又想保留SC2的隐身效果,那只需要去除这个标棋就好啦。


召唤单位(Summoned)

SC2中使用“召唤”这一单位属性来代表召唤单位,一些驱散技能会对它们造成额外伤害。但在制作召唤单位时请记得不要在单位属性字段中直接勾上“召唤”。因为召唤单位应该是一种动态属性。War3编辑器用户应该清楚:你直接把一个水元素摆在地图上,它就不算召唤单位。只有当它被大法师使用技能召唤出来后才算。这个召唤属性是绑定在它的隐藏buff“水元素”这一计时用buff上的。因此War3 Mod中所有召唤单位的召唤属性也都是由召唤单位身上的隐藏计时buff来附加(ID和名字都与War3编辑器中的保持一致,以加强War3地图作者地图制作体验的延续性),而不是单位本身自带的属性。

*今后可能会有一篇单独的短教程来介绍召唤单位的构造,从如何召唤到召唤计时结束后如何移除。


直观的映射部分

以下这些单位标旗映射没有什么特别需要注意之处,因为它们在SC2引擎下的名字和在War3下的名字没啥区别。

War3目标类型War3 Mod中的目标类型
死亡死亡(Dead)
可破坏物体可破坏物体(Destructible)
无敌无敌(Invulnerable)
镜像幻象(Hallucination)



War3 Mod的特殊单位分类Buff



至此,SC2中可自由支配的单位标旗和属性已经被用完了,但是War3中仍然还有一些罕见的单位分类未能对应进去。好在这些分类在War3中要么需要判定的机会有限,要么只是出现在编辑器里,实际上根本就未使用。因此这些东西就使用Buff专门的buff来对应了。比如给所有亡灵单位都加上个“亡灵”的隐藏Buff,然后在圣光术和死亡缠绕技能的效果树里加上对这一Buff的判定即可。

War3目标类型War3 Mod中的特殊Buff
巨人巨人(Giant)
牛头人牛头人(Tauren)
亡灵亡灵(Undead)
自杀的(工兵)工兵(Sapper)
地形地形(Terrain)
桥(Bridge)
饰品饰品(Decoration)

实际上以上分类当中,在War3中真正有效的只有三种:牛头人、亡灵、工兵。

牛头人影响白牛的先祖之魂技能,亡灵影响圣光术和死亡缠绕,工兵影响地精飞艇的装载技能。这些都在War3 Mod中进行了特殊判定和处理。

而其他的巨人、地形、桥、饰品什么的实际上毫无作用,War3本身实际上也没有巨人分类的单位(虽然有一大堆名字里带“巨人”字样的单位)。但是War3 Mod中依然提供了相应的隐藏buff。
您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-12-24 20:33 , Processed in 0.047546 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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