也许有些人对随机地图有兴趣,却不知道怎么做,我不是大神,但我可以让你对随机地图的制作有一个基本的了解。
本教学文并不会介绍所有的指令,有些东西我也不知道该怎么称呼所以会自己乱取名,有任何错误之处,烦请见谅与指正。
请先准备好:
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 X、top_border X、bottom_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. 不知道还要放什么,先留空吧。
未经许可请勿转载到任何论坛与网络空间。