也許有些人對隨機地圖有興趣,卻不知道怎麼做,我不是大神,但我可以讓你對隨機地圖的製作有一個基本的了解。
本教學文並不會介紹所有的指令,有些東西我也不知道該怎麼稱呼所以會自己亂取名,有任何錯誤之處,煩請見諒與指正。
請先準備好:
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. 不知道還要放什麼,先留空吧。
未經許可請勿轉載到任何論壇與網路空間。