war3开全图 YDWE怎么设置全图树木复活?

如上,是一个单位复活的基于war3的we编辑器的T触发器(war3还有jass和lua等语言的触发器,以后再说,本系列先只讲T触发)

war3的T触发器用的语言就像骑砍编辑器魔球的伪代码一样,war3的jass就像骑砍专用的ms语言一样,其实就是把一些功能函数(骑砍里常叫作操作-operation简称op)借助其他的语言环境“翻译”成其他语言的表达。(注:ms只是方便我们写骑砍代码,而实际支持骑砍游戏运行的却是txt码,就像有人用魔球写伪代码或PY码再转txt,但是实际上中间却先通过VB6转译了下)。

所以每一行你可以认为它是一个op。就相当于骑砍header_operation里的op一样(部分事件也可以理解为相当于header_trigger)。

而骑砍制作必读的header文件夹一系列文件就相当于骑砍ms语言单词语法词典。

就拿mission temple文件的格式来说,一个骑砍触发器的格式基本由三个部分组成,可以这样类比war3编辑器的格式(当然也不全是)。

有的时候条件项可以不写内容(但格式不能省),有的时候动作一项中还会出现一系列子条件事件(war3的if句式和骑砍的try句式类似如果发生什么,就怎样的条件状语从句),骑砍和war3都是这样。

比如第一行“任意单位死亡事件”,转成骑砍语言你可以有两种理解(第一种其实是一种错误理解,不过可以说下引出其他内容),第一个理解是所有单位中有人死了会发生怎样的事件,这就是一个循环单位判断的写法。

(try_for_agents, ":cur_agent"), #所有人循环,就相当于你把场上所有人准备瞅一遍,准备找茬,":cur_agent"相当于一个人称代词,就像中文里的“他/她/它”或者“谁”“某人”,只是程序里的“人称代词”种类更多可定义而已,这句中可以理解":cur_agent"为“某些人”

(agent_is_human, ":cur_agent"), #判断场上这些单位是不是人,满足条件的从队列里“站出来”,我再继续排查

(xxx), #要填的操作待定,可能不止一个。

(try_end),# 固定格式,好让程序知道你循环全体想找茬找到什么程度达到什么目的才罢休。

2 . 这时候(xxx)位置处就该填动作一项“翻译”出来的骑砍op组了,也就是看起来像是说明事件或条件的op也会写动作一项中。

选取以技能释放目标为中心,半径为500的园范围内满足 匹配单位 存活=True and 匹配单位是技能释放目标 =Flase and 匹配单位是触发单位的拥有者的敌军 =True 的单位做动作

注:一般用在事件项,例如上图群体风暴之锤T触发中动作项的全部op组合。

1.171版本的ms(就像新华字典修正新版本加点新词或词语补充了点新义)后,try_for_agents加入了可设定范围圈参数,这时就更接近war3这个op了。

再结合后面的op看,其实第一种对“任意单位死亡事件”的理解并不合适。

因为整体事件更强调了个体效果和时刻性。所以接下来换种理解。

war3触发器第一行“任意单位死亡事件”转骑砍语言的第二种理解就是:

用于触发器结构中的“事件”一项,意思就是当某人被杀的时候,发生这件事之后,接下来“动作”一项中会引发一系列什么事情。其实header_triggers比较像英语的时间或条件状语从句,即 when xxxx,xxxx.这样的从句,当发生什么事时,接下来你该怎么办。

这种情况就不需要循环,ms语法提供获取死者的id(相当于我说的人称代词),并对这个人进行“动作”项中的op判断与执行。

接下来开始转化“动作项”中的op。

触发单位的类型等于山丘之王,war3的单位类型怎么理解呢,就像骑砍所属兵种一样(也不全是,比如如果是代码写活的能运动有思想的场景物体,那可能就是场景物类别了,具体情况具体分析)

(eq, ":兵种名", "trp_山丘之王"), # 如果兵种名等于(是)山丘之王的时候 ,eq是equal英文“等于”的简写,当然骑砍代码里写兵种名要用英文格式。

war3触发器“等待两秒”:这时会发现用第二种对任意单位死亡的理解会更合适,也可以使用计时器或者“事件项”的延时触发(仅适合第二种理解)

使用骑砍常规计时op做法时如下

(store_mission_timer_a,“:时间”),#存储事件发生后的时间量(秒),相当于你按下了手机计时器功能的开始计时键

(eq,“:时间”,2),#当时间量=2时即距这个死亡事件发生过了2秒时。

这时候介绍一下war3 T触发里一个和骑砍很像的计时器功能制作方法。

war3 ydwe编辑器里有个很方便的op叫作逆天计时器,所以这个方法就是逆天计时法。

war3逆天计时器简单讲解和应用到骑砍:

上图war3的T触发“新建计时器”到“清除计时器”几行就用到了逆天计时器。

其实就是额外运行一个触发器,每几秒响应一次,导致一个计数用的全局变量(也可以局部变量,看你用在几个触发器)的数值变化,根据该全局变量的数值来间接算出时间过了多久,常用于每隔多久做某同一件事情的循环动作事件。

这怎么用到骑砍呢?so eazy。

骑砍的“事件项” 比如刚开始骑砍触发器格式的例子里举的1, 4, ti_once,,中这个“1”就代表每隔1秒运行一次该触发器事件(当然也可以动作项里直接用store_mission_timer_a)。所以我们也可以设定一个全局变量,放入“事件项”为1,0,0,的骑砍触发器里,利用骑砍里加减计算的op来使全局变量改变,比如运行一次触发器就加1(如果初始值为0)

则在本触发或其他触发器里控制计时触发器的启动条件和应用时机,那计时触发器开始启动时,本例计时使用的全局变量数字是几就表示过了几秒。通过特定条件将全局变量再次设定为初始值,就相当于重置计时器。

个人觉的在循环动作事件以及模糊时间间隔(即不需要准确知道时间,只需要一个时间久短的效果时),逆天计时法有时会更方便。

以上war3逆天计时器方法的介绍以后在将“war3触发器思想引入骑砍触发器制作”的相关教程中再着重讲解,包括以前我常说的war3编辑器的“马甲思维”

(当然本例的逆天计时法在骑砍触发器本身有类似应用,可以不说成引进这思想)

war3触发器里“镜头平移到触发单位位置”op转骑砍的理解:

主要要用到以下几种op去合成该效果

当然还要注意war3 T触发这里的镜头移动是一个即时效果而不是永久,也就是说在骑砍触发中你也要考虑镜头移动死亡单位位置后,其他情况下镜头该依据坐标什么变化。

war3触发器里“英雄复活”op转骑砍的理解:

这时候你看header文件夹(语法词典)里常用词组一章operation里的“词组”中没有任何op的注释提到复活字样。

这时候就需要发挥想象找到替代效果,不要纠结什么叫a死了不久又复活了的概念,而是分析a死了不久又复活的效果是什么,就是a死了从战场里虚化消失后,一个活的a的克隆人出现在死亡地点,不仅继承了身份(兵种名)和遗产(a原来的武器装备服装),而且犯了罪还是a承担(杀了人战场结算算a的)等等。

所以问题就变成了上述触发条件满足后,在触发单位死亡的坐标刷出一个与触发单位同兵种的人,然后对这个人设定原触发单位相关的体态特征和关联功能。刷人用set_spawn_position , spawn_agent 这两个op的固定搭配,具体代码就不示范了。

至于war3触发器里“选择触发单位对玩家1”op,其实是指你作为玩家1,满足之前的条件就鼠标控制那个复活的触发单位,就相当于骑砍里常见的战场延续功能继续wasd操作手下其他士兵一样。

实际上游戏里无分你我,其实只要把镜头跟随某人的一个相对位置,并且让这个人的行为响应你的按键等玩家操作,其实这个人就变成了游戏里的“我”。

似不似这样,此处你们可以温习一下武林外传吕秀才反杀姬无命的经典台词:

不!你不知道。你知道吗?你是谁?姬无命吗?不!这只是个名字,一个代号,你可以叫姬无命,我也可以叫姬无命,他们都可以。把这个代号拿掉之后呢?你又是谁

所以最后用吕秀才说死姬无命的经典台词来告诉大家。

游戏里的世界特别是用程序创造游戏里的世界时,一切代号和代名词都是数据合成的表象,如果你只是片面的看到事物之间的表象区别而不探究并注重其内在联系的话,那么就永远只能停留于表面的换皮制作,就像马换皮坐骑一样,因为很多人只是一昧认为骑砍里被骑的就是马,马就是用来骑的这种表面关系,而对骑砍坐骑的正确认识应该是,坐骑就是一个可以被程序控制移动和碰撞并与其它系统建立关联的实体,比如坐骑和人两个系统的联系就是身体部位相对坐标的获取和绑定设置,而常用的马模型换皮的制作坐骑的方法就是因为很多玩家没有学习过骑砍代码时只能利用人和马的现有绑定关系。

所以要完成一样东西的前提就是先学习必要的基础知识。

最后思想上强调一句:看问题先多关注内在联系,少纠结表面区别。

}

这是一篇中等长度的文章。

你也可以在文末找到展示效果和移植说明。


我还决定进一步的改善画面质量,但是在此之前还有一件更重要的工作。

尽管我们对嘉年华斯坦索姆战役进行了重现,但是这个效果是否只是孤例?正如我之前所说,重要的并不在于某个宣传效果到底多好,而在于这个好的效果,最后能不能惠及广大玩家

上一期最终效果对比,暴雪嘉年华(上)自制(下)

我考虑过使用插件调整,魔兽历史上的画面改良插件也非常多,例如ENB或者RenderEdge,成功引入了一些DX的特性。但是这些插件很容易面临无人维护,以及版本更替之后失效的问题。我认为在地图中直接呈现能够对社区的帮助更大,也能更容易的进行二次开发。同时魔兽重制版引擎本身也符合了次时代引擎的基本特征,如果耐心调整还是能够见效的。

这次我将以经典的对战地图Echo Island为例,展示目前画面移植的效果,以及如何进行移植,我尽量简化了这个过程的复杂性,去除了一部分对画面影响不大的代码。为了社区能够真正受益,我将会完全公开源代码,素材和地图文件。有兴趣的话,您可以试着自己复现一下斯坦索姆战役来验证。

如果有朋友打算使用,注明作者和来源即可。


因为本次的目标主要在于如何移植,所以我不过多涉及技术细节。首先,找到一张对战地图。

首先打开来看一下原本的效果。

全图秘籍:iseedeadpeople,可以方便快速查看地形

果然惨不忍睹。下面废话不多说开始移植。

首先导入所有的素材。在已经获得了开源地图的情况下,务必首先全部导出,全部导入

在导入时务必注意模式,是高清还是标清,严格按照我设置的路径放置。对于了解CASC的朋友可以自行寻找素材位置。导入之后注意设置好路径。

总体大小大概20M,不过我没有严格压缩过,如果觉得太大了可以尝试在ps里选择更高压缩度

导入之后立刻修改地形设置

注意最后一个是洛丹伦的深色草地
可以看到素材已经变化了

不过和实际的效果肯定还是有差别。如果你打算在开源图的基础上更改,那么只需要点开测试就行了。如果打算移植到其他地图,请将所有的触发器和变量复制过去

所有的脚本都有注释,有兴趣的朋友可以自己修改参数。

将这些参数复制到自己的地图中就可以了

最后运行,看看移植之后的效果如何:

更多的可以在游戏中自行体验

  • 没有除了人族之外的UI

由于时间和计划的关系,我们并没有考虑做其他种族的UI界面。如果有朋友打算制作的话,你可以依照我们的dds图片作为蓝本,然后覆盖原有的UI路径。你可能需要一个CASC查看工具来确定绝对路径。

  • 光照模型不能适应所有情况

虽然滤镜可以解决大部分的光线感受问题,但是如果你需要编辑光模型的话,可以用War3 Model Editor v1.07打开编辑。

可能UI原件的位置还不是完美的状态,如果你发现了,可以按照脚本中的指示进行修改。

重制版的植被模型覆盖之后会非常卡顿,并且这个选项可以关闭,会影响最后的观感。因此我们将植被做成了地形装饰物手工放置。这个模型是 洛丹伦的夏天 - 环境 - 灌木, 注意调节它的比例调成 X 200,Y 200,Z 60 左右来达到最好的效果。


我分享这些,是希望还在爱着这个游戏的人能做出更加出色的作品

我很难说如今的暴雪对魔兽争霸还有什么感情(包括魔兽世界),作为玩家,我希望我做这些能警示他们;如果不能,也至少可以提升一下广大玩家的体验,稍微弥补一下失望的心情。

但是我最终的目标,并不只是暴雪嘉年华的效果。我希望能做到的,是我们玩家心中真正的期待。在第三章发布的时候,希望能让大家惊讶。

(如果不行那就很尴尬了,逃)

}

我要回帖

更多关于 war3开全图 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信