Cheat Map Editor旋轉(zhuǎn)擺放自然奇觀的方法

? ? ? ?本人玩文明系列是徹頭徹尾的奇觀黨,不搶全奇觀渾身不舒服。文明6的奇觀可以直觀地顯示在大地圖上,俯瞰一大片奇觀密密麻麻的矗立在一起非常壯觀,全身上下每個毛孔都舒爽極了。但是這代建奇觀對地形要求較多,自然刷圖是不可能把全奇觀都湊一起的。所幸后來發(fā)現(xiàn)了cheat map editor這款mod,自改地圖解千愁,奇觀黨一本滿足。
? ? ? ?用了幾次以后,又開始往地圖上塞自然奇觀,人文自然奇觀相互映襯、相得益彰,美感又上了一個層次。但是,我發(fā)現(xiàn)CME放置自然奇觀的時候不能選擇朝向,張掖丹霞總是只能放置為西南-東北朝向,百內(nèi)國家公園總是只能東-西朝向,這不免多了一些限制,讓人頗不爽。
? ? ? ?為了解決這個問題,我找遍了各游戲論壇貼吧,尤其是NexusMod站原作者的貼,發(fā)現(xiàn)居然沒人問這個問題。沒轍,只好自己想辦法解決。經(jīng)過簡單的研究,居然幸運(yùn)地一下就發(fā)現(xiàn)了調(diào)整的手段。

? ? ? ?首先進(jìn)入CME的存放位置 \Documents\My Games\Sid Meier's Civilization VI\Mods\CheatMapEditor\目錄,在里面找到CME_WonderGen.lua這個文件。這個看名字就知道是關(guān)于如何生成自然奇觀的文件,看來作者也感覺放置奇觀太復(fù)雜,專門用了一個文檔來寫相關(guān)代碼。這里面的函數(shù)是未編譯的明文源碼,我們要做到就是修改這個文件,令它按照我們的思路來運(yùn)作。所以一定要先做好備份。.lua文件本質(zhì)上就是文本文檔,可以用記事本直接打開,但為了操作方便還是建議使用稍微專業(yè)一點(diǎn)的文檔編輯工具,比如UltraEdit。

? ? ? ?打開以后,在文檔的第8行和第306行各定義了一個函數(shù):CustomGetMultiTileFeaturePlotList2( ) 和 CustomGetMultiTileFeaturePlotList( ),真正起效的是后面那個不帶數(shù)字后綴的函數(shù),所以我們的修改從306行開始。

? ? ? ?為了了解函數(shù)的工作原理(不需要了解的太復(fù)雜),這里介紹一個里面用得最頻繁的子函數(shù)??吹?46行到第451行,可以看到這里連續(xù)6次調(diào)用了一個Map.GetAdjacentPlot( )子函數(shù),括號里面的參數(shù)只有最后一個不同。從函數(shù)名到參數(shù)名,看字面意思也能猜到,這個函數(shù)的作用就是找當(dāng)前格子的某個相鄰格子。游戲中一個格子有6個相鄰格子,根據(jù)方向依次是東北、東、東南、西南、西、西北,恰好就是這個子函數(shù)被連續(xù)6次調(diào)用時被最后一個參數(shù)所指明的方向。如果是有編程基礎(chǔ)的看官,應(yīng)該能猜到,NORTHEAST、EAST、SOUTHEAST、SOUTHWEST、WEST、NORTHWEST這6個表示方向的標(biāo)識符多半是一個枚舉型,其實(shí)和數(shù)字0、1、2、3、4、5是等價的。這里之所以專門提一嘴,是因為后面會用到這個猜測。

? ? ? ?具備了這點(diǎn)基礎(chǔ)知識,我們已經(jīng)可以來進(jìn)行實(shí)戰(zhàn)了??创a第319行到第328行,首先①處黃線的注釋就告訴我們,這一段是在處理占兩格的自然奇觀,必須東-西朝向面向攝像機(jī)。②處紅線的判斷條件代碼則更詳細(xì)指出,這一段是專門處理百內(nèi)國家公園和約塞米蒂的。至于③處藍(lán)線的注釋講解了具體方法,以當(dāng)前格子為西格子,找到當(dāng)前格子?xùn)|邊的相鄰格子,這兩個格子自然構(gòu)成了東-西朝向的兩格。④處的紫色線則是具體處理過程,參數(shù)指定的EAST就是代表“找到東邊的相鄰格子”這一步。在游戲內(nèi),我們放置約塞米蒂也確實(shí)只能橫著放,看來就是因為這里被限制了。我們嘗試把EAST改成NORTHEAST,保存文檔后進(jìn)游戲?qū)嶋H看看效果。注意,如果你正開著游戲,需要退出游戲后再進(jìn),才能再次加載MOD。


? ? ? ?再次進(jìn)入游戲后使用CME放置約塞米蒂,當(dāng)場就可以看到確實(shí)是當(dāng)前格子和東北格子變成了約塞米蒂。save-load后再載入游戲,卻發(fā)現(xiàn)沒有顯示模型。鼠標(biāo)移到格子上,提示文字表明這個格子確實(shí)是約塞米蒂了,但視覺上還是沒變。這時,才明白為什么作者要單獨(dú)把百內(nèi)和約塞米蒂單獨(dú)列出來處理了,看來作者也發(fā)現(xiàn)了這倆奇觀只有東-西方向擺放、正面面對攝像機(jī)時才有模型。(這個似乎可以理解,像珠穆朗瑪峰等奇觀,確實(shí)當(dāng)兩個擺放方向不同時,甚至有無河流流過時,模型是不同的)。

? ? ? ?雖然初戰(zhàn)失利,但不必氣餒。繼續(xù)看428行到441行。看①處黃線的注釋可知,這一段是處理連續(xù)3個格子排成直線的情況。②處紅線的判斷條件代碼則更明確指出這一段就是針對張掖丹霞的。③處藍(lán)線是一個for循環(huán),這里就要用到我們前面提到的那個猜想,NORTHEAST、WEST等表示方向的標(biāo)識符,其實(shí)就是數(shù)字。④處的紫色線這個位置就是GetAdjacentPlot( )函數(shù)的最后一個參數(shù),本來應(yīng)該是填NORTHEAST這類標(biāo)識符的,但實(shí)際上在此處是填了一個整數(shù)變量?i,范圍從0到5。這一段for循環(huán)所執(zhí)行的動作其實(shí)就是:在選定當(dāng)前格子(稱為第1格)后,從“東北”方向開始,找到緊鄰的格子(稱為第2格),判斷第2格是否符合放置張掖丹霞的條件。如果不符合,則順時針找下一個相鄰格子。而如果符合,就沿著當(dāng)前方向進(jìn)一步判斷第2格的緊鄰格子(稱為第3格)是否符合放置張掖丹霞的條件,如果也符合,那么就報告主函數(shù),說這里可以放置。如果不符合,則退回尋找下一個第2格。如此循環(huán),直到把6個方向都找遍。
? ? ? ?由于“是否符合放置條件”的判斷很寬松,所以基本上第一個“東北”方向就總是能滿足條件,于是我們在游戲里用CME放置的張掖丹霞地形就總是西南-東北向的。要修改這個其實(shí)也很簡單,看③處藍(lán)線設(shè)定了整數(shù)變量?i?的起始值是0,也就是從“東北”方向開始找,我們只要把?i=0改成?i=1,它就變成從“東”開始找了;同理,改成?i=2,它就變成從“東南”開始找了。這其實(shí)就已經(jīng)夠了,足以讓我們在游戲里放置下東-西向或東南-西北向的張掖丹霞地形。
? ? ? ?改成?i=2后進(jìn)入游戲,放置張掖丹霞,成功得到了東南-西北向的丹霞奇觀。至此我們終于收獲了一個戰(zhàn)果。


? ? ? ? 下一段443行一直到584行都是在寫如何放置米爾福德峽灣,主要是試圖讓?shí){灣的那個豁口朝向大海一側(cè)。由于這個機(jī)制在正常游戲中也能被反映出來(也就是:你想讓?shí){灣朝向哪個方向,就在那個方向放置海,背后方向放置陸地),所以沒必要改動。另外,巨人堤和多佛白崖也是會隨著地形自動旋轉(zhuǎn)的,不用管。

? ? ? ?從585行開始,就是除掉前面說的約塞米蒂、張掖丹霞等特殊情況之外,更加普遍的情況了。包括棉花堡等典型2格地形,珠穆朗瑪峰等典型三角形地形,白沙漠等典型4格菱形地形,這里被統(tǒng)一歸類到了“其他”里面。為了代碼書寫方便,589行到594行已經(jīng)提前幫我們把6格緊鄰格子找好了,分別用pWPlot、pSEPlot等變量名稱指代,記住他們的名字,下面要用。

? ? ? ?第596行到第600行是在處理奇觀第2格的情況(1格奇觀當(dāng)然無需任何處理)。①處黃線的判斷條件是當(dāng)奇觀格子數(shù)大于1,也就是2格、3格、4格奇觀的第2個格子都被囊括其中。②處紅線的注釋明白說了,第2格無條件找東邊相鄰格,也就是③處紫色線調(diào)用的pEPlot。如果你是想放置一個2格奇觀,那么看到這里就夠了。比如我們想放置一個東北-西南向的棉花堡,把③處的pEPlot改成pNEPlot就行了。想放置東南-西北向就把pEPlot改成pSEPlot。
? ? ? ?特別注意!??!由于下面對3、4格奇觀的第3格也是默認(rèn)找東北格,所以如果你已經(jīng)把第2格改成了東北格,那么在游戲里就不要放置3格奇觀,否則也會出錯,不能正確顯示模型。


? ? ? ?如果要放置3、4格奇觀,那么繼續(xù)往下看。3格奇觀有兩種方向,“當(dāng)前-東-東北”構(gòu)成的朝上三角形,以及“當(dāng)前-東-東南”構(gòu)成的朝下三角形,無論哪個都需要第2格是“東”格,所以我們先把前面599行恢復(fù)成pEPlot。然后看604行到617行,這里是在講3、4格奇觀的第3格怎么找。

? ? ? ?①處黃線的判斷條件是當(dāng)奇觀格子數(shù)大于2,也就是只關(guān)系到3、4格奇觀了。②處紅線出現(xiàn)了分支,對于張掖丹霞和羅賴馬山有特殊處理。由于張掖丹霞已經(jīng)被前面我們講過的428到441行處理掉了,所以這一小段其實(shí)只影響羅賴馬山。專門說一下羅賴馬山,這是游戲里形狀最奇怪的一個奇觀,它需要“當(dāng)前-東-西-東南”4個格子構(gòu)成一個鉤子型(這個Mod的作者稱之為L型或三角形帶一個尾巴),所以③處藍(lán)線表明羅賴馬山的第3格是找了“西”格。除了羅賴馬山這一個特殊情況,④處紫色線注釋說明了其他所有3、4格奇觀的第3格都是找了“東北”格,也就是⑤處紅線的pNEPlot。如果我們想讓3格奇觀呈現(xiàn)向下三角擺放,那么就把這里pNEPlot改成pSEPlot即可。


? ? ? ?如果要放置4格奇觀,那么還要繼續(xù)往下看。4格奇觀有三種方向,東北-西南向菱形、北-南向菱形、東南-西北向菱形(神奇的羅賴馬山除外)。

? ? ? ?都到這一步了,已經(jīng)是文檔的末尾了,應(yīng)該也很熟練了。①處黃線的判斷條件是當(dāng)前奇觀的格子數(shù)大于3,也就是只剩4格奇觀會被影響了。②處紅線又出現(xiàn)了分支,還是針對羅賴馬山,③處藍(lán)線注釋說明了找“東南”格,也就是④處紫色線使用的pSEPlot。而對于其他4格奇觀,則都是菱形,鑒于前面第3格默認(rèn)選擇了“東北”格,所以這里⑤處紅線注釋說明第4格會找“西北”格,也就是⑥處黃線使用的pNWPlot。這樣,就構(gòu)成了一個“當(dāng)前-東-東北-西北”構(gòu)成的東南-西北向菱形。所以想一想,如果我們想要一個南-北向的菱形,其實(shí)就需要“當(dāng)前-東-東北-東南”格,那么就去在599行、615行、632行這3處代碼分別指定的格子替換成我們想要的格子的對應(yīng)變量名,就可以實(shí)現(xiàn)。


? ? ? ?同理,如果想要東北-西南向的菱形,那就需要“當(dāng)前-東北-西北-西”或者“當(dāng)前-東-東南-西南”格子,在相應(yīng)位置替換即可。羅賴馬山也是一樣道理,如果我們想要一個長邊是東北-西南向的放置,那就使用“當(dāng)前-東北-東-西南”格子,在599行、609行、626行位置替換就行了。Simple Geometry?。?!


?
? ? ? ?總結(jié)起來,如果想要旋轉(zhuǎn)某個自然奇觀的擺放,那么流程就是:退出游戲→修改Mod文件夾里CME_WonderGen.lua文檔的相關(guān)代碼,令其擺放邏輯符合我們的要求→重新進(jìn)游戲,使用CME放置奇觀→成功后退出游戲→將Mod文檔復(fù)原,重新進(jìn)入游戲→繼續(xù)下一回合。真的是非常的Simple呢!