翔鹰帝国网|帝国时代论坛|帝国时代II高清版|神话时代|亚洲王朝|征服者|罗马复兴
 找回密码
 注册翔鹰会员(昵称)
搜索
查看: 1620|回复: 19

[教程] 随机地图进阶技巧

[复制链接]

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
发表于 2017-6-10 00:56:40 | 显示全部楼层 |阅读模式
本帖最后由 yesgqt 于 2017-6-11 19:35 编辑

本教程适用于对随机地图脚本有基本了解,能够做出诸如阿拉伯、群岛这样的基本地图,但希望做一些更复杂更有创意地图的制作者。当然如果完全零基础的话,也可以在这里大概了解一下随机地图能够实现的效果。基础教程推荐置顶帖(http://www.hawkaoc.net/bbs/thread-119653-1-1.html),比官方教程更全面准确一点,很多地方都是作者反复试验得出来的。如果愿意看英文版的话,这个帖子(http://aok.heavengames.com/blacksmith/showfile.php?fileid=12178)里面有作者的最新版,有一些补充的内容,主要是关于负值的使用。当然置顶帖中的汉化版也足够用了。本教程里涉及的内容,除了关于负值的那一点以外,其他基本都没有超越置顶帖汉化教程的范畴。

当然,随机地图本身的功能是很有限的,和地图编辑器没有任何可比性,所有也很难有什么复杂的技巧。这篇教程想要做的,也是在有限的条件下,尽可能地做点花样出来,帮助大家打开一点思路。

我这里先简单讲一点随机地图脚本中的一些基本事实,2楼开始会通过实例来介绍一些技巧,同时会给出相关的脚本和截图。

注意:因为是教程,所以这里涉及到的一些技巧和思路,大家都可以在自己的作品里随意使用而无需征求我的同意。但如果是明显的借鉴的话,希望在发布地图的时候提及一下这篇教程并给出链接。但同时,这篇教程会引用一些其他人的地图,这些地图的思路与版权归原作者所有,大家在借鉴的时候注意一下,不要有明显雷同的。

基本事实:

1、实际生成地图的时候,是按照以下顺序执行的,而与它们在脚本中的位置无关:

<PLAYER_SETUP>
<LAND_GENERATION>
<ELEVATION_GENERATION>
<CLIFF_GENERATION>
<TERRAIN_GENERATION>
<CONNECTION_GENERATION>
<OBJECTS_GENERATION>

这一点很重要,后面将会看到,很多地方都会利用到这一顺序。

此外,<LAND_GENERATION>中的所有land,都是一次性全部生成的,而terrain、object则是按照脚本中的顺序先后生成的。

2、悬崖只会生成于陆地上,并自动避开玩家周边区域

可以利用这一点来控制悬崖出现的位置,毕竟可以控制悬崖的参数实在是太少了。

3、单位可以放置在特定的地形上或区域内

实现方式有两种,一种是用terrain_to_place_on把单位放置在某种地形上,另一种是用place_on_specific_land_id来放置在某个特定id的land上。

但是这个有一些限制条件,比如place_on_specific_land_id只对盖亚单位有效,而且该land和其他区域必须用水域等不允许该单位出现的地形隔开。而terrain_to_place_on则要求该地形和其他区域不被隔开……

4、某些参数可以使用负值

比如<LAND_GENERATION>中,对玩家区域的border使用负值将使它们更靠近地图边缘。

再如clumping_factor,负值会产生极度不规则的形状(大家可以自己尝试)。



暂时先想到这么多,后面看具体实例吧。

评分

参与人数 1耕战 +200 鹰币 +400 收起 理由
cxt + 200 + 400 原创精华

查看全部评分

回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-10 00:57:00 | 显示全部楼层
本帖最后由 yesgqt 于 2017-6-10 01:11 编辑

实例1:护城河

护城河.jpg

每个玩家周围都有一圈水,只有少数几个通道与外界相连。脚本见ES@Moats_v2,我这里就不发了。

实现方法是将base_terrain设成水,player_lands设成陆地,然后在<TERRAIN_GENERATION>中用陆地把水填满,同时用spacing_to_other_terrain_types使它与玩家区域隔开1格的距离。最后用connection生成玩家与外界的通道。

如果只保留<LAND_GENERATION>的话,效果应该是这样的:

护城河1.jpg

这样大家应该就明白了。

其实利用地形替换和spacing_to_other_terrain_types还可以做很多文章,比如我做的一个例子:

等高线.jpg

姑且叫它等高线吧。其实就是反复地替换地形,并利用spacing_to_other_terrain_types设置好间隔即可。

大概就是这样的:

树A
土地a
树B
土地b
树A
土地c
树B
土地d
树A
土地e
树B
土地f
……

然后再把bcdef等等都替换成a,树B替换成树A,这一步就不用设spacing_to_other_terrain_types了。当然这里只是为了视觉上不那么杂乱而已,不替换也没太大问题。

脚本在这里,其实也可以拿来玩:

教学-等高线.rms (14.83 KB, 下载次数: 1)
回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-10 00:57:05 | 显示全部楼层
本帖最后由 yesgqt 于 2017-6-10 01:15 编辑

实例2:设定特殊区域

这个参考ES@Graveyards_v2,地图上的某些区域被设置成“墓地”,里面有很多的墓碑、骨骸、废墟等等。

特定区域.jpg

局部:

特定区域1.jpg

实现起来很简单,就是用terrain_to_place_on把墓碑、骨骸这些单位放在落叶地形上。至于怎么利用这点实现更多效果,大家可以发挥想象。

再举个栗子,AOKH 4.7分地图Ancient Ruins(http://www.hawkaoc.net/bbs/forum ... read&tid=119710):

特定区域2.jpg
回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-10 00:57:08 | 显示全部楼层
本帖最后由 yesgqt 于 2017-6-11 19:40 编辑

实例3:局地悬崖

随机地图中,和悬崖相关的参数非常少,只能指定悬崖的总数、长度、弯曲度、间距等,而无法规定它的位置、放置于何种地形上等等。所以只能利用它的一些特性来间接地做一些控制。

这方面最好的范例是Zetnus的Cliffscape,原发布地址:http://aok.heavengames.com/blacksmith/showfile.php?fileid=12390

顺带一提,Zetnus就是本版置顶教程的原作者,他在随机地图的技术方面作了很多探索,也发布了很多技巧性很强的地图,大家有兴趣的话可以在AOKH上搜搜看。相比之下,另一位知名制作者RF_Gandalf的地图就更加偏向于实战的竞技性。

简单介绍下Cliffscape,这个地图会随机生成4种类型中的一种:悬崖淘金潮、悬崖竞技场、悬崖阿尔卑斯山、岩石堡垒。4种地图虽然看起来很不一样,但利用的原理都是类似的,就是悬崖只会生成于陆地上,而且会自动避开玩家周边区域。

具体做法就是:在<LAND_GENERATION>中,把所有不希望出现悬崖的地方都设置为水域(注意,player_lands也是可以设置为水域的,只不过后面要用陆地terrain把水域替换掉,不然TC出现在水里就啥也干不了了)。然后在<CLIFF_GENERATION>中设置悬崖,再在<TERRAIN_GENERATION>中把水域替换成想要的地形就可以了。

稍微着重提一下“岩石堡垒”这个类型,下面给个截图。其余3种类型的截图在原发布地址里有。

岩石堡垒.jpg

可以看到,每个玩家都几乎被悬崖所包围,而在缺口处围了墙。这个的做法是:把地图的大部分填成冰(冰上也不能放置悬崖,和水是一样的效果),玩家区域则是陆地。同时玩家区域的land_percent设为0,base_size设为26(作者实际是把base_size和other_zone_avoidance_distance都设为13,但效果和这里是一样的),这样可以保证玩家区域是正方形,而且每一边到玩家区域中心的距离都是26格(26这个数字应该是试验出来的结果,即游戏允许悬崖距离玩家中心的最小距离)。同时作者把四个方向的border都设为-4,这样让玩家离地图中心更远一些,避免重叠。然后放置悬崖,这样悬崖就只会出现在距离玩家24-26格左右的距离上。最后设一个24格距离的石墙即可。

如果我这里解释得不清楚的话,大家可以去看下脚本。

顺带一提,Zetnus在发布时提及,“岩石堡垒”这个图的原作者是Lildbehr。不过Lildbehr这位作者好像没怎么做过其他的地图。

思考题:

玩家在被悬崖围绕的前提下,外面再加一层护城河要怎么做?就是类似下图的效果:

悬崖堡垒1.png

你可能会想,这个简单啊,base_terrain设成是水,然后像上面所讲的那样生成悬崖,最后在<TERRAIN_GENERATION>中用陆地把水填满,spacing_to_other_terrain_types设为1就行了。

嗯,非常好。但如果我想让护城河出现在悬崖里面呢?是不是就没这么简单了?

悬崖堡垒2.png


回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-10 00:57:17 | 显示全部楼层
本帖最后由 yesgqt 于 2017-7-23 02:11 编辑

实例4:城墙BUG


大家知道在随机地图中,可以让玩家初始时拥有城墙,就是类似堡垒地图那样的效果。但是有一点需要注意的是,在<OBJECTS_GENERATION>中,生成城墙的语句必须放在生成TC语句的后面,否则所有玩家的城墙都会出现在地图的正中心,并且重叠在一起。

我觉得这应该算是个BUG,但是这个BUG有没有可能被我们利用一下呢?比如像下面这样:

圣物争夺.png
教学-圣物争夺.rms (16.18 KB, 下载次数: 1)
回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-10 00:57:22 | 显示全部楼层
本帖最后由 yesgqt 于 2017-7-23 02:16 编辑

实例5:高连接cost的应用

<CONNECTION_GENERATION>中有一个参数terrain_cost,很多制作者可能都没怎么在意过。实际上,如果调大terrain_cost的数值的话,可以大幅度减少连接的数量。比如下面这张图:

C形黑森林.jpg
教学-C形黑森林.rms (12.65 KB, 下载次数: 1)
回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-10 00:57:27 | 显示全部楼层
本帖最后由 yesgqt 于 2017-6-16 07:27 编辑

实例6:非平衡地图
这个也不算是什么技巧,本身就有的功能,只是可能有人不知道而已。那就是在<LAND_GENERATION>中,既可以用create_player_lands为所有玩家统一设定初始区域,也可以用create_land和assign_to_player分别为每一个玩家设定区域。当然用后者的话,就可以设定非平衡的地图,比如可以给每个玩家设定不同的地形,不同的资源等等。当然,一般情况下用这个要非常小心,主要是注意平衡性,避免出现非常不公平的情况。当然运用得好的话可以实现更多的效果。

另外提醒一下,不可以在create_land中利用设定不同的border来使不同玩家位于不同的位置。我目前测试下来的情况是,游戏会让所有玩家都处于相同的border设定下。比如说,如果你给玩家1设定left_border 50,让他出现在右半区,给玩家2设定bottom_border 50,让他出现在上半区。但这样做的结果会是,玩家1和玩家2都会处于右上区,就像下面这样(边界设定中的left,实际指的是地图的左下方,bottom指右下方,top和right以此类推):

非平衡.png


我做了一个例子,用来展示非平衡地图:

关隘.jpg

教学-关隘.rms (10.37 KB, 下载次数: 7)
回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-10 00:57:42 | 显示全部楼层
本帖最后由 yesgqt 于 2017-6-16 07:29 编辑

实例7:高地水

其实也不算什么技巧,也是大家可能不知道的,就是可以在水上设置高地:

高地水.jpg

实现起来很简单,create_elevation中,把base_terrain设为水就行了。
回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-10 00:57:49 | 显示全部楼层
本帖最后由 yesgqt 于 2017-6-16 07:42 编辑

实例8:窄路/窄树林


这个是什么样的效果呢?我举几个例子吧:

1、AOKH 5分地图“甘道夫的森林”

介绍及脚本下载:http://www.hawkaoc.net/bbs/forum.php?mod=viewthread&tid=119690

甘道夫的森林.jpg

可以看到,森林中有很多空地,空地之间大概有3格左右厚度的树林。

2、日系地图中的“迷茫之森”

介绍及脚本下载:http://www.hawkaoc.net/bbs/forum.php?mod=viewthread&tid=119774

迷茫之森.jpg

迷宫状的地图,空地之间也是有狭窄的树林相隔

3、翔鹰坛友 路遇知己 制作的“黑森林狼王领地”

介绍及脚本下载:http://www.hawkaoc.net/bbs/forum.php?mod=viewthread&tid=106110

截图见原帖。森林之间有很多狭窄的小路。


3张地图虽然看起来很不一样,但实现的方法都是类似的,也是用地形替换和spacing_to_other_terrain_types,和实例1中类似。只不过稍微特别一点,这里就单独再提一下。

具体怎么做呢?我这里做了个例子,先放完成图:

窄树林.jpg


详细制作步骤如下:

新建一个地图脚本,base_terrain设为森林,玩家区域设为草。如下图:

窄树林1.png

然后添加地形:泥3,base为森林,spacing_to_other_terrain_types设为2:

窄树林2.png

可以看到森林中有了一些空地了。然后再添加地形:草3,base为森林,spacing_to_other_terrain_types设为2:

窄树林3.png

基本已经实现想要的效果了,但是看到仍有一些地方的森林很浓密,于是再加一种空地地形,把剩下的森林填满。这里用草2,base仍为森林,spacing_to_other_terrain_types仍为2:

窄树林4.png

最后,为了美观,可以把空地地形替换成相同的,比如都替换成草3:

窄树林5.png

完成。

脚本:

教学-窄树林.rms (1.59 KB, 下载次数: 1)
回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-10 00:57:53 | 显示全部楼层
回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-10 00:57:56 | 显示全部楼层
回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-10 01:16:08 | 显示全部楼层
占楼结束。今天先写这么多,留坑慢更
回复

使用道具 举报

61

主题

3

精华

1万

积分

枢机主教

耕战
2274
鹰币
160210
天龙币
0
帖子
786

小评论家翔鹰建站十周年纪念章

附庸关系9
发表于 2017-6-10 09:58:35 | 显示全部楼层
等暑假有空了,我先从随机地图的基础教程开始学起吧。

【战役】太宗传说(呆鹰三部曲之一)
已完成
【场景】尸如潮水 制作中……
【战役】……(呆鹰三部曲之二) 待制作
【战役】……(呆鹰三部曲之三) 待制作
cxt超级打局综合教程 编写中……
【聚焦录像系列】 长期更新中……
cxt海战系列教程 已完成
点此进入cxt的主页查看详情
回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-14 02:09:57 | 显示全部楼层
cxt 发表于 2017-6-10 09:58
等暑假有空了,我先从随机地图的基础教程开始学起吧。

很好哇,其实对战高手在设计随机地图的时候是有很大优势的,看好你
回复

使用道具 举报

16

主题

9

精华

7601

积分

国王

耕战
572
鹰币
253
天龙币
0
帖子
140

二级翔鹰勋章雏鹰勋章

附庸关系0
发表于 2017-6-14 19:17:19 | 显示全部楼层
很不错的教程!!
無論我們這一生經歷了多么美麗的情感,或者經歷了多么悲慘的故事,只有到了中年或者晚年才會發現,時間是多么地殘酷。它常常讓我們心碎,讓我們徹夜難眠,讓我們堅定不移地確信永不更改的生活變成無數個夢。
回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-16 07:44:15 | 显示全部楼层
又更新了几个。目前想到的基本都写完了,以后想到什么再补充吧。
回复

使用道具 举报

1

主题

0

精华

112

积分

男爵

耕战
0
鹰币
32
天龙币
0
帖子
29
附庸关系0
发表于 2017-6-23 09:24:35 | 显示全部楼层
好文,学习了
请问下楼主,之前的非HD随机地图,在HD的超大地图如何实现?
回复

使用道具 举报

1

主题

0

精华

112

积分

男爵

耕战
0
鹰币
32
天龙币
0
帖子
29
附庸关系0
发表于 2017-6-23 09:24:41 | 显示全部楼层
好文,学习了
请问下楼主,之前的非HD随机地图,在HD的超大地图如何实现?
回复

使用道具 举报

38

主题

4

精华

6483

积分

圣徒

耕战
865
鹰币
1644
天龙币
0
帖子
550

二级嘉禾勋章二级帝国勋章

附庸关系0
 楼主| 发表于 2017-6-23 22:41:28 | 显示全部楼层
qcdagger 发表于 2017-6-23 09:24
好文,学习了
请问下楼主,之前的非HD随机地图,在HD的超大地图如何实现?

不好意思,HD我不太了解,理论上原版非HD的随机地图在HD下都是能用的,你可以试一下
回复

使用道具 举报

21

主题

3

精华

1万

积分

宗主教

耕战
2861
鹰币
25702
天龙币
0
帖子
485

小评论家翔鹰建站十周年纪念章酒馆醉客勋章

附庸关系14
发表于 2017-10-1 16:05:28 | 显示全部楼层
萌新最近也研究了一下随机地图,想做一个对于双方而言不公平的地图,但是遇到了一些问题,所以来请教一下前辈。

1.我给两个玩家设置了不同的地形,玩家1为泥2,玩家2为草2,我想只给玩家1设置围墙,然而我把围墙只放置在泥2地形上的时候,草2地形上也会出现围墙。而房屋,修道院,兵营等其他建筑却可以只放在泥2地形上,这是什么原因呢?

2.关于悬崖的问题,我想做一个类似于悬崖堡垒的图,但是我希望悬崖上只开一个口,也就是玩家被悬崖包围,只有一个口子可以通往外界。但是无论我怎么修改关于悬崖的参数,都无法做到这一点,是的确不能做到,还是我的方法不对呢?
回复

使用道具 举报

本版积分规则

排行榜|小黑屋|翔鹰帝国 ( 蜀ICP备07503549号 )

GMT+8, 2017-10-22 03:34

Powered by Hawk Studio  QS Security Corp.® Licensed

© 2001-2017 Hawkaoc.net All rights reserved

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