【心得】随机地图到底要怎么写啊? 带你写出一张自己的地图。(二代DE)

也许有些人对随机地图有兴趣,却不知道怎么做,我不是大神,但我可以让你对随机地图的制作有一个基本的了解。

 
本教学文并不会介绍所有的指令,有些东西我也不知道该怎么称呼所以会自己乱取名,有任何错误之处,烦请见谅与指正。
 
请先准备好:
Notepad++ 这个超好用的文本编辑器
随机地图文件夹位置: (我Steam存在D槽,请根据自身情况修改)
D:\Steam\steamapps\common\AoE2DE\resources\_common\random-map-scripts
编辑记录:
 

目录:

一、基本概念
二、第一张地图
1.     前置作业
2.     <PLAYER_SETUP>与初期变量
3.     <LAND_GENERATION>
4.     <OBJECTS_GENERATION>
5.     <TERRAIN_GENERATION>
6.     <CONNECTION_GENERATION>
7.     <ELEVATION_GENERATION>
8.     <CLIFF_GENERATION>
三、结尾
四、附录
1.     范例档:My Team islands.rms
 

一、基本概念

 
1.随机地图的生成脚本总共有七大段落,撰写脚本时不用照着下方顺序写,但注意,游戏会依照以下顺序依序运行并生成:
 
<PLAYER_SETUP>
地图的基础设置
<LAND_GENERATION>
可以生成玩家区域以及大范围区域
<ELEVATION_GENERATION>
生成高地
<CLIFF_GENERATION>
生成峭壁
<TERRAIN_GENERATION>
生成各类地形的地形区块
<CONNECTION_GENERATION>
生成道路
<OBJECTS_GENERATION>
生成各种单位、资源、建筑的区块
 
2.
<LAND_GENERATION>内部的所有项目会同时生成,
<TERRAIN_GENERATION>
<OBJECTS_GENERATION>
则会照你编排的顺序生成。
 
3.
脚本注解写法是
/* 我是注解 */
 
4.
变量的写法是#const (名称) (id)
 
5.
七大段落内的指令会有带参数跟不带参数两种,
参数又分为”纯数字”以及”地形类型名称”两种,注意参数是百分比(%),或是距离(格),都只要纯数字就好,不需要加上单位,EX: 50%就打50就好。
我参数部分一率写’X’,并且在后方或下方注明这个X是要打什么东西。
 

二、第一张地图

我觉得比起单单介绍,不如实际做一张地图,
所以接下来我会先介绍各项指令以及参数如何使用,并辅以实例说明,在每个小章节最后,我会把该章节所讲的内容实际做成「团队岛屿」。
最后的成果我放在附录。
1.前置作业
 
1-1.
我们先创造一个文件,名为「My Team islands.rms」,用Notepad++打开
1-2.
打开地图编辑器,创建一个3 vs 3总共6名玩家的剧本
 
1-3.
生成巨型的 My Team islands(为什么要巨型? 因为我爱巨型地图)
这边提醒一下,地图编辑器生成很容易出BUG,常常会生出一些怪图,但实际开随机地图游戏,地图生成还是很正常的。
 
1-4.
回到Notepad++,把七大段落写上去
前置作业完成。
 
2. <PLAYER_SETUP>与初期变量
这是最初设置。
 
2-1
random_placement
默认值,让所有玩家呈现环形排列
grouped_by_team
让同盟玩家集中在同一边
 
2-2
nomad_resources
游牧用指令,会把城镇中心建设资源返还玩家
 
2-3
ai_info_map_type XXX(地图名称) 0 0 0
这是设置AI判断的指令,
XXX=AI地图,就是让电脑判断这张地图该怎么玩
后方三个0分别表示三项设置:
a.     是否为游牧,是为1、否为0
b.     是否为michi,是为1、否为0
c.      是否为特殊风格,是为1、否为0
 
michi是两个阵营玩家中间隔着一条厚厚的树林,必须轰开或挖开才会接触。
特殊风格我也不知道是什么意思。
 
2-4.
变量
其实我不知道称”变量”合不合理,总之在脚本当中,他有一些游戏认识的名字,对象名、地形类型、地图之类的,但基于有些东西我根本不知道他的名字是什么,或是有名字却不好记,我自己会把部分东西用#const 自己命名写在开头。
变量写法:
#const 名称 对象id
所以我就把三种树分别命名如下,
#const FOREST_A 19       /* 松树pine forest */
#const FOREST_B 20       /* 橡树丛oak forest */
#const FOREST_C 10      /* 橡树forest */
 
直接放在文档前方就可以了,你可以不用学我,但我这篇文章会用这个来做。
2-5.
所以在我们的「团队岛屿」中,我的设置如下:
 
#const FOREST_A 19  /* 松树pine forest */
#const FOREST_B 20       /* 橡树丛oak forest */
#const FOREST_C 10  /* 橡树forest */
/******************************************************* */
<PLAYER_SETUP>
grouped_by_team /*同盟紧密排列*/
ai_info_map_type ARCHIPELIGO 0 0 0 /*AI地图:群岛 非游牧、michi、特殊*/
 
 
3. <LAND_GENERATION>
区域,分成玩家区域跟一般区域,不管你建多少区域,都是一口气生成的,这个区域和地形不同,可以继续看下去。
3-1.
base_terrain XXX(地形类型)
可当作本张地图的蓝图,他会将整张图直接填成你设置的地形
缺省是GRASS(草原1),所以会直接生成一片大草原。
注意这个设置不能塞在3-2节里头写的区块内。
 
3-2.
create_player_lands
{
}
设立玩家区域,玩家区域只有一个。
 
create _lands
{
}
设立一般区域,看自己地图需要再设置。
从3-3节开始的指令都要写在上面的{}内
 
3-3.
terrain_type XXX (地形类型名称)
这是指这个区块是哪一种地形,缺省是GRASS(草地1)
 
3-4.
land_percent X(%数)
设置占据地图的百分比,但应该有自行调整的机制,因为你设置100%其实并不会塞满全图,实际要用几%,建议是地图完成后慢慢调整成自己要的样子。
 
3-5.
left_border X、right_border Xtop_border Xbottom_border X
X是数字
这四项表示这个区域距离”边缘”多远,实际情形像这样:
这是毫无设置:
        create_player_lands /*玩家区域*/
        {
                terrain_type            GRASS   /*玩家基础地形*/
                land_percent        100           /*尽量让玩家区域扩大*/
                base_size           25              /*区域半径25格*/
                set_zone_by_team              /*团队共用一座岛屿*/
                other_zone_avoidance_distance    30    /*与其他地形相隔距离*/
                border_fuzziness100              /*边界尽量规则化*/
        }
这是每项数值都设置7:
        create_player_lands         /*玩家区域*/
        {
                terrain_type            GRASS    /*玩家基础地形*/
                land_percent        100     /*尽量让玩家区域扩大*/
                base_size           25        /*区域半径25格*/
                left_border7
                right_border7
                top_border7
                bottom_border7           /*让岛屿不紧邻地图边缘,来做到四面环海的效果*/
                set_zone_by_team        /*团队共用一座岛屿*/
                other_zone_avoidance_distance    30 /*与其他地形相隔距离*/
                border_fuzziness100          /*边界尽量规则化*/
        }
因为3-1节的base_terrain设置为WATER,所以当陆地退缩后就自然补上水域。
 
3-6.
border_fuzziness X (X是%数)
边界不规律程度
越低越不规则
border_fuzziness 100
border_fuzziness 1(有稍微改一下陆地大小让他明显一点)
3-7
base_size X(半径大小)
区域半径(正方形),他跟3-4节的land_percent并不冲突,你可以在base_size当中设置一个更大的值,如果明显超出land_percent会呈现一个完美正方形。
另外前面是选择同盟紧密连接,这项数值会直接影响到玩家间的距离,以这张团队要塞为例:
base_size 30
base_size 15
3-8
other_zone_avoidance_distance X(相邻距离)
与其他区块相邻的最小距离,不知道怎么说明,直接看图吧
other_zone_avoidance_distance 10
other_zone_avoidance_distance 50
 
3-9.
set_zone_by_team
让同盟玩家共享区域,团队岛屿这种地图就很需要
有set_zone_by_team
 
没set_zone_by_team
3-10.
看到这边我们可以把这边的设置给补完了,我的设置如下:
        base_terrainWATER /*地图基础地形是水域*/
        create_player_lands/*玩家区域*/
        {
                terrain_type            GRASS/*玩家基础地形*/
                land_percent        100     /*尽量让玩家区域扩大*/
                base_size           25  /*区域半径25格*/
                left_border7
                right_border7
                top_border7
                bottom_border7         /*让岛屿不紧邻地图边缘,来做到四面环海的效果*/
                set_zone_by_team        /*团队共用一座岛屿*/
                other_zone_avoidance_distance    30 /*与其他地形相隔距离*/
                border_fuzziness100  /*边界尽量规则化*/
        }
 
按”产生地图”去看看自己做的半成品啰!
4. <OBJECTS_GENERATION>
接下来先来做单位对象的放置,这边可以放任何对象,只要他生成在正确的位置就行(像是陆地单位不能生成在水上)。
他会根据你设置的顺序摆放对象,所以有可能出现对象重叠不生成的情况,所以要多注意。
 
4-1.
对象的写法如下,
create_object XXX
{
}
XXX就是你要放置的对象名称,这个名称可以是游戏内制定的名称,也可以是我们前面自订的变量名称(2.4节部分写的),我建议在你不清楚名称是什么时,一律用变量自己取名,因为只要有id表就能创建所有对象。
 
4-2.
number_of_objects X(数量)
放置对象的数量,X就是数量。
单独使用表示只放一组
number_of_groups X(组)
表示你要生成X组,前面的东西。
举个例子,
        create_object  SHEEP /* 羊 */
        {
                number_of_objects  4
                min_distance_to_players  10
                max_distance_to_players  12
                set_place_for_every_player
        }
这是number_of_objects 4 的羊,一次四只
多加一行number_of_groups 2 就变成两组4只羊
       create_object  SHEEP /* 羊 */
        {
                number_of_objects  4
number_of_groups 2
                min_distance_to_players  10
                max_distance_to_players  12
                set_place_for_every_player
        }
 
4-3.
group_variance X(数量)
增加随机性,让你生成对象的数量会有正负X的变化,同样拿刚刚的羊做例子,
加上group_variance 2:
create_object  SHEEP /* 羊 */
        {
                number_of_objects  4
                number_of_groups2
                group_variance2
                min_distance_to_players  10
                max_distance_to_players  12
                set_place_for_every_player
                set_gaia_object_only
        }
现在每组羊都有正负2只的变化,从固定4只变成2~6只,
所以右边那组变成4+1,左边则是4-2
要注意的是,一定要有number_of_groups他才会运作
4-4.
set_place_for_every_player
设置给”每个玩家”的对象,这个对象包含单位、资源(矿)、装饰等等。
如果是可控制的单位(如:羊、村民),会自动给予玩家控制权
我修改一下上方的例子:
create_object  SHEEP /* 羊 */
        {
                number_of_objects  4
                number_of_groups2
                group_variance2
                min_distance_to_players  10
                max_distance_to_players  12
                set_place_for_every_player
        }
羊会直接分配给游戏者
但如果是不能控制的对象EX:矿物、鹿等等,会明显出错,因为我们要补上另一条:
set_gaia_object_only
加上这一条后,可以放置”非玩家控制的对象”,而可以被玩家捕获的对象则会变成”大地之母”,我这边同时放”无主羊”跟”鹿”
        create_object  SHEEP /* 羊 */
        {
                number_of_objects  4
                number_of_groups 2
                group_variance2
                min_distance_to_players  10
                max_distance_to_players  12
                set_place_for_every_player
                set_gaia_object_only
        }
        create_object  DEER /* 鹿 */
        {
             number_of_objects  4
               min_distance_to_players  14
        max_distance_to_players  30
        group_placement_radius  3
        set_loose_grouping
        set_place_for_every_player
        set_gaia_object_only
        }
就会呈现以下结果
羊是无主的,而鹿也能正常生成。
   
set_place_for_every_player会让对象生成配合玩家数量,所以6个玩家就会有总计24只鹿,而如果你不写set_place_for_every_player,就跟玩家数量无关,总共只有会4只鹿。
 
所以今天如果你希望做一些让玩家争夺的对象,例如散落地图各处的金矿,你有两种做法,一种是加上set_place_for_every_player让散落金矿数量对应玩家(这样可以让散落金矿比较公平分配每个玩家),或是直接让他自然散落各处(但有可能会偏重在某一地区),这部分各位可以自己改改参数体会。
 
4-5.
terrain_to_place_on XXX
XXX是地形类型的名称,
这条指令可以让对象”只”能生成在特定地形,但他并不能违反一些游戏规定,例如你无法让一些陆地单位直接产在水上,这边可以实作一种功能,例如我在团队岛屿中创造众多小岛,这些小岛地形刻意跟大岛分开(例如大岛是GRASS 小岛是GRASS2),然后写一个金矿对象,加上terrain_to_place_on GRASS2,实际看上去就会变成海外岛屿上有黄金了。
例如像这样: (这个在后面5-10节会再教学)
4-6.
min_distance_to_players X
max_distance_to_players  X
X是数字,
指的是对玩家中心的最小与最大距离,
 
什么是玩家中心呢?
就是在这张地图当中他认定这个玩家生成的最中心点,
我用斥侯当标线,中间那只斥侯在位置0,外面那圈在位置6
城镇中心通常会放在0的位置
        create_object  TOWN_CENTER /* TC */
        {
                number_of_objects  1
                min_distance_to_players  0
                max_distance_to_players  0
                set_place_for_every_player
        }
而其他对象最少要从3开始放,才不会被城镇中心盖掉
                create_object  SCOUT /* 斥侯 */
        {
                number_of_objects  999
                min_distance_to_players  3
                max_distance_to_players  3
                set_place_for_every_player
        }
 
最小距离跟最大距离设置相同就是放在固定远的位置,
也可以只放其中一条,例如只写最小距离,最大距离就会是不限
 
4-7.
max_distance_to_other_zones X
X是数字,
对象跟区域边缘的最小距离,我直接写个范例
 
        create_object  SCOUT /* 斥侯 */
        {
                number_of_objects  999
                set_place_for_every_player
        }
密密麻麻的好恶心
加上后
        create_object  SCOUT /* 斥侯 */
        {
                number_of_objects  999
                max_distance_to_other_zones  20
                set_place_for_every_player
        }
自动远离海岸了
 
4-8.
min_distance_group_placement X
X是数字,
让对象彼此间有一定距离,防止各种对象生成后黏在旁边的问题。
 
temp_min_distance_group_placement X
X是数字,
也是分距离的,但这条指令我其实不太清楚有什么效果。
 
group_placement_radius X
X是数字,
这是跟分组中心相隔的距离,不太好解释,但他可以让一组对象自动散开,可以做出这样的感觉:
 
 
4-9.
set_loose_grouping松散排列(默认值)
set_tight_grouping 紧密排列
一般来讲不用刻意设置也没关系,
但如果你物体不分组,建议下set_loose_grouping,可以让对象不会散太开
而矿物通常会需要下set_tight_grouping
 
例如我这边写: (没分组、紧密排列)
        create_object  GOLD /* 主黄金 */
        {
                number_of_objects  7
                min_distance_to_players  10
                max_distance_to_players  13
                group_placement_radius  3
                set_place_for_every_player
                set_gaia_object_only
                min_distance_group_placement  7
                max_distance_to_other_zones  7
                set_tight_grouping
        }
 
如果你拿掉set_tight_grouping 会变成这样(未分组、松散排列)
这时有聪明的人会发现,那我把七块金矿做成一组呢?
加了一行number_of_groups 1 就变成了(有分组、松散排列)
一样不是我们正常看到的金矿样貌
 
4-10.
set_scaling_to_map_size
我的理解是让对象数量会跟着地图大小有所改变,但增加或减少的比例是什么我不知道。
 
4-11.
清楚了参数的写法,我们来撰写我们的对象
因为对象种类很多,我这边只举几个对象撰写参考,剩下的可以看范例档,范例档内所有参数刚刚都有介绍到。
(我并不是写什么比赛对战图,所以距离跟数量请各位自行斟酌,这边只作范例)
 
羊有4只较近,2只较远
        create_object  SHEEP /* 4羊 */
        {
                number_of_objects  4 /* 四只羊 */
                number_of_groups  1 /* 一组 */
                min_distance_to_players  10
                max_distance_to_players  12/* 距离中心10~12格 */
                set_place_for_every_player/* 每个玩家都要 */
                set_gaia_object_only   /* 中立状态 */
        }
        
        create_object  SHEEP /* 2羊 */
        {
                number_of_objects  2 /* 两只羊 */
                number_of_groups  2  /* 两组 */
                min_distance_to_players  14
                max_distance_to_players  20 /* 距离中心14~20格 */
                set_place_for_every_player  /* 每个玩家都要 */
                set_gaia_object_only   /* 中立状态 */
        }
斥侯:
        create_object  SCOUT /* 斥侯 */
        {
                number_of_objects  1    /*一只斥侯*/
                min_distance_to_players  7
                max_distance_to_players  9 /*距离中心7~9格*/
                set_place_for_every_player/*每个玩家都要*/
        }
黄金:
        create_object  GOLD /* 主黄金 */
        {
                number_of_objects  7    /*七块*/
                min_distance_to_players  12
                max_distance_to_players  16        /*距离12~16格*/
                set_tight_grouping                  /*紧密排列*/
                set_place_for_every_player          /*每个玩家都有*/
                set_gaia_object_only                /*大地之母*/
                min_distance_group_placement  10   /*对象不要太靠近*/
                max_distance_to_other_zones  7     /*不要太靠边缘*/
        }
        
        create_object  GOLD /* 副黄金 */
        {
                number_of_objects  7    /*七块*/
                number_of_groups  2    /* 两组 */
                min_distance_to_players  18
                max_distance_to_players  22        /*距离12~16格*/
                set_tight_grouping                  /*紧密排列*/
                set_place_for_every_player          /*每个玩家都有*/
                set_gaia_object_only                /*大地之母*/
                min_distance_group_placement  10   /*对象不要太靠近*/
                max_distance_to_other_zones  7     /*不要太靠边缘*/
        }
沿海鱼群:
        create_objectSHORE_FISH  /*沿海鱼*/
        {
            number_of_objects          30
            min_distance_group_placement  7 /*不成推生成相隔七格*/
            set_gaia_object_only
            set_scaling_to_map_size
        }
4-12.
接着我们按下”生成地图”,看起来真的有那么一回事了!
是不是很有成就感呢?
 
5. <TERRAIN_GENERATION>
这部分是地形区块,地形类型的名称因为不太好记,我建议各位在做地图前把所需要的地形类型,直接用变量做自己的命名(2.5章提到的方法),不然真的会做到头昏眼花。
这边请注意,先写的地形区块会先创建,这原则很重要,例如我写只能创建在GRASS2(草地2)上面的树,结果你把”树”这个地形区块放在”GRASS2”前面,因为树比GRASS2早生成,导致于树找不到GRASS2,就不生成了。
还有,因为这边有些指令跟前面很像,不要把这个段落和<LAND_GENERATION>搞混,两者不同唷。
 
5-1.
create_terrain XXX(地形类型名称)
{
}
架构就是这样,我以下称这样的一块部分为”地形区块”
 
5-2.
base_terrain XXX(地形类型名称)
这边指的是,你这块地形区块要基于怎样的地形,有点绕口令,但初学时可能在看会看得有点乱,
我用以下例子:
        create_terrain FOREST_A   /*生成散落树木群*/  
        {
          base_terrain                GRASS       
     (下略)
        }
 
如果你看到这样一个段落,他的意思是,我创建一块”FOREST_A”在”GRASS”上,create_terrain后面的才是你要创建的地形类型。
 
5-3.
land_percent X(%数)
表示你这块地形区块占据地图的百分比
 
number_of_tiles X(数字)
这个是”固定”有多少数量的大小写法,
 
例如我这么写
        create_terrain FOREST_A   /*生成散落树木群*/  
        {
          base_terrain                GRASS       
          number_of_tiles 20 /*总数*/
          number_of_clumps     1   /*每群被成数组分散*/          
          set_avoid_player_start_areas  
          spacing_to_other_terrain_types        5
        }
所以我就得到了一坨20棵树的小树林
 
5-4.
number_of_clumps  X(数字)
这指得是,你这块地形区块要分成”几份”,
上面的number_of_tiles/ land_percent是总数,所以你分越多份,每份就会越小。
例如:
        create_terrain FOREST_A   /*生成散落树木群*/  
        {
          base_terrain                GRASS       
          land_percent  1 /*总数*/
          number_of_clumps     1   /*每群被成数组分散*/          
          set_avoid_player_start_areas  
          spacing_to_other_terrain_types        5
        }
可以看到地图左上有一块树林
当我们把number_of_clumps 改成10,
就变成小块的树林了
5-5.
set_scale_by_size
这可以让地形区块大小随着地图大小变化,至于以多少比例变化我不知道。
set_scale_by_groups
这是让地形区块被分成几份的”份数” 随着地图大小变化,同样多少比例变化我不知道。
 
5-6.
spacing_to_other_terrain_types X(数字)
让你的地形区块可以远离其他地形。
 
5-7.
set_avoid_player_start_areas  
让你的地形区块远离玩家区域,这通常是建议要加的,防止地形侵入玩家区域。
 
5-8.
height_limits X Y (X最小高度、Y最大高度)
这项设置可以强制你的地形区块只能生成在特定的高度范围内。
 
5-9.
clumping_factor X(X是%数)
%数越高,越接近圆形,%数越低看起来越乱七八糟
 
5-10.
前面我们创建单位后,地图空空如也,所以我们这边先创建树木的地形区块:
        create_terrain FOREST_B   /*生成散落树木群*/  
        {
          base_terrain                GRASS       
          land_percent 15  /*总数*/
          number_of_clumps     10   /*每群被成数组分散*/    
          clumping_factor     100
          set_scale_by_size         
          set_scale_by_groups
          set_avoid_player_start_areas  
          spacing_to_other_terrain_types        5
        }
这边我们生成FOREST_B,FOREST_B是我自己设置的变量名称,他代表着是地形ID:20的橡树,我让树木只生成在GRASS(草地1),完成后如下:
但总感觉单调了一些,这是因为我们这张图目前只出现三种地形:作为蓝图的水、作为陆地的草地,以及作为树林的橡树,看上去不太满意,我们可以让地图增贴一些色彩。
        create_terrainLEAVES   /*点缀用树叶*/
        {
          base_terrain                   GRASS
          spacing_to_other_terrain_types 1
          land_percent                   2
          number_of_clumps               50
        }
           create_terrain GRASS3   /*点缀用草地3*/
        {
          base_terrain                   GRASS
          number_of_clumps               45
          spacing_to_other_terrain_types 1
          land_percent                   2
          set_scale_by_size
        }
增加了草地3和落叶地,看起来地板多了点色彩,也比较好看了
 
但看一下地图,这么大片的海洋,想不想加几座小小的岛屿?
        create_terrainGRASS2  /*岛屿用 草地2*/
        {
          base_terrain                   WATER
          spacing_to_other_terrain_types 10
          clumping_factor 100
          number_of_tiles      400
          number_of_clumps              3
        }
因为是岛屿,所以这边我们base_terrain 选择WATER,
效果就是这样: (多了三座小岛)
有了岛屿,但这岛屿一点吸引力都没有,还是我们在岛上放几块金矿呢?(4-5节提到的玩法)
这边请回到<OBJECTS_GENERATION>,我们在这边加上这一段:
       create_objectGOLD /* 岛屿黄金 */
        {
                terrain_to_place_onGRASS2 /*因为小岛屿用GRASS2创建*/
                number_of_objects                 5
                number_of_groups                 4
                group_variance2
                set_avoid_player_start_areas
                set_tight_grouping  /*物品紧密*/
        }
就会变成这样:
是不是丰富多了呢?
 
6. <CONNECTION_GENERATION>
这段落是连接,分成同盟连接跟全部玩家连接,其实就是道路的意思,例如你做一张黑森林,玩家被树林包围,就要开路出来,或是我们两座岛屿,中间不想用运输船渡海,就可以创建两座岛屿间的浅滩。
 
6-1.
全部玩家连接长这样:
create_connect_all_players_land
{
}
团队玩家连接长这样:
create_connect_teams_lands
{
}
 
6-2.
要设置的东西并不多我一口气介绍,
连接分成三个部分
a.     取代类型
replace_terrain (A地形) (B地形)
让B地形取代A地形
例如:
replace_terrain FOREST_B GRASS
这就是指,用GRASS去取代FOREST_B
b.     选径成本
terrain_cost (地形名称) (成本)
就是说今天穿过某地形,需要多少成本,电脑会尽量开辟成本低的路径
例如:
terrain_cost    FOREST_C     2
terrain_cost    FOREST_B     1
这表示FOREST_B穿越的成本较低,只有1,而FOREST_C较高,有2
c.      道路宽度
terrain_size (宽度) (浮动值)
宽度以格计算,表示你想要的道路宽度,浮动值就是让道路大小有随机性
例如:
terrain_size  GRASS  5  2
这表示以GRASS创建的道路,有3~7格宽
 
6-3.
这边以实际例子来表现,如果我们希望同盟之间有一条道路连接,我们可以这么写:
create_connect_teams_lands
{
  /*道路取代类型*/
replace_terrain FOREST_B  ROAD
replace_terrain GRASS        ROAD
replace_terrain GRASS3      ROAD
replace_terrain LEAVES      ROAD
  /*穿过不同地形的路由成本  cost*/
terrain_cost    FOREST_B         1
terrain_cost    GRASS       1
terrain_cost    GRASS3      1
terrain_cost    LEAVES      1
terrain_cost   ROAD             0
  /*道路大小 以及浮动值*/
terrain_size    ROAD         1      0
}
说明一下这一整段指令:
同盟间连接使用ROAD(道路),所以将所有地形都替换成ROAD
因为没有特别选径的必要,所以将成本都设置相同
最后道路宽度设成1,浮动设成0
(注:建议加上terrain_cost ROAD 0,你可以自己玩玩看有加入跟没加入的差别)
 
那如果想让两边有陆地接壤,我们这边用浅滩当道路的话:
create_connect_all_players_land
{
  /*道路取代类型*/
replace_terrain   WATER         SHALLOW
  /*穿过不同地形的路由成本  cost*/
terrain_cost    WATER        1
  /*道路大小 以及浮动值*/
terrain_size    SHALLOW  5     0/*浅滩*/
}
浅滩就出来啰!
不过我这是团队岛屿,所以我把整段注解掉,你仍能从范例档中找到这一段。
 
7. <ELEVATION_GENERATION>
这个段落是海拔高度设置,没什么特别的,直接介绍了。
 
7-1.
create_elevation X(1~7)
{
}
这是创建一个高地的基本架构,看这个架构就知道,不同海拔高度要分开设置,一次只能处理一种高度。
 
7-2.
base_terrain  XX(地形类型)
让高地基于何种地形类型
 
7-3.
number_of_tiles X(大小)
你的高地大小
 
number_of_clumps X(数量)
你的高地要分成几份
 
这边我认为应该跟<TERRAIN_GENERATION>的设计是一样的,
就是number_of_tiles是总量,而number_of_clumps是把总量切成几份,
但实际因为很不好算我也不知道是不是这样。
 
7-4.
set_scale_by_size
这可以让地形区块大小随着地图大小变化。
set_scale_by_groups
这是让地形区块被分成几份的”份数” 随着地图大小变化。
 
7-5.
其实这段实际运作原理是怎样我也不太清楚,只是在本次制作的团队岛屿当中,高地设置怎么样都无法套用上去,所以这边我就不写上去了,但我还是给各位一个范例写法:
        create_elevation  5
        {
        base_terrain  GRASS
        number_of_clumps  3
        number_of_tiles  150
        set_scale_by_groups
        set_scale_by_size
        }
我在其他图创建高地是可以成功的,但这张图就不知道为什么了。
 
8. <CLIFF_GENERATION>
悬崖,其实往前看团队岛屿每一张图里都有出现悬崖,只要你把<CLIFF_GENERATION>写在脚本中,无论有没有写东西都会缺省生成悬崖,如果不喜欢悬崖直接把<CLIFF_GENERATION>砍掉即可。
 
8-1.悬崖很简单我这边一口气介绍
a.     悬崖数量
min_number_of_cliffs  X
max_number_of_cliffs  X
最小悬崖数量,跟最大悬崖数量
 
b.     悬崖长度
min_length_of_cliff  X
max_length_of_cliff  X
最小悬崖长度,跟最大悬崖长度
 
c.      悬崖转弯机率
cliff_curliness  X(%数)
数字越低转弯机率小,越高转弯机率高
d.     悬崖彼此相隔距离
min_distance_cliffs X(距离格数)
悬崖彼此之间最小的相邻距离
 
8-2.
最后我悬崖这么写:
        min_number_of_cliffs  5
        max_number_of_cliffs  8
        min_length_of_cliff  4
        max_length_of_cliff  8
        cliff_curliness  50
        min_distance_cliffs  10
这样我们这篇文章最后的目标完成了,这张「团队岛屿」已经成功做出来了!
 

三、结尾

以上介绍了随机地图脚本的七大段落,并且在最后完成了本文的目标,一张地图「团队岛屿」,当然我不是地图制作大师,这张图其实还是很阳春,每次生成都是一样的地一样的树,没有新鲜感,也没有依照地图、人数不同有所变化,但有了一点基础知识,相信也比较能懂大神们的地图作品了。
(订阅MOD的文件夹地址:
C:\Users\(你的user名) \Games\Age of Empires 2DE\76561198107835013\mods\subscribed
)
 
最后,其实这个脚本功能很局限,很多想法是无法做出来,而且很多指令讲是一回事,生成出来又是一回事,免不了要花很多时间debug的。
 

四、附录

 
1.     范例档载点: GoogleDrive载点
 
2.     预计想放对象ID表和地形ID表或名称
 
3.     不知道还要放什么,先留空吧。
未经许可请勿转载到任何论坛与网络空间。
本文来自网络,不代表3楼猫立场,转载请注明出处:https://www.3loumao.org/21970.html
返回顶部