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

首先進入CME的存放位置 \Documents\My Games\Sid Meier's Civilization VI\Mods\CheatMapEditor\目錄,在裡面找到CME_WonderGen.lua這個檔案。這個看名字就知道是關於如何生成自然奇觀的檔案,看來作者也感覺放置奇觀太複雜,專門用了一個文件來寫相關程式碼。這裡面的函式是未編譯的明文原始碼,我們要做到就是修改這個檔案,令它按照我們的思路來運作。所以一定要先做好備份。.lua檔案本質上就是文字文件,可以用記事本直接開啟,但為了操作方便還是建議使用稍微專業一點的文件編輯工具,比如UltraEdit。

開啟以後,在文件的第8行和第306行各定義了一個函式:CustomGetMultiTileFeaturePlotList2( ) 和 CustomGetMultiTileFeaturePlotList( ),真正起效的是後面那個不帶數字字尾的函式,所以我們的修改從306行開始。

為了瞭解函式的工作原理(不需要了解的太複雜),這裡介紹一個裡面用得最頻繁的子函式。看第446行到第451行,可以看到這裡連續6次呼叫了一個Map.GetAdjacentPlot( )子函式,括號裡面的引數只有最後一個不同。從函式名到引數名,看字面意思也能猜到,這個函式的作用就是找當前格子的某個相鄰格子。遊戲中一個格子有6個相鄰格子,根據方向依次是東北、東、東南、西南、西、西北,恰好就是這個子函式被連續6次呼叫時被最後一個引數所指明的方向。如果是有程式設計基礎的看官,應該能猜到,NORTHEAST、EAST、SOUTHEAST、SOUTHWEST、WEST、NORTHWEST這6個表示方向的識別符號多半是一個列舉型,其實和數字0、1、2、3、4、5是等價的。這裡之所以專門提一嘴,是因為後面會用到這個猜測。

具備了這點基礎知識,我們已經可以來進行實戰了。看程式碼第319行到第328行,首先①處黃線的註釋就告訴我們,這一段是在處理佔兩格的自然奇觀,必須東-西朝向面向攝像機。②處紅線的判斷條件程式碼則更詳細指出,這一段是專門處理百內國家公園和約塞米蒂的。至於③處藍線的註釋講解了具體方法,以當前格子為西格子,找到當前格子東邊的相鄰格子,這兩個格子自然構成了東-西朝向的兩格。④處的紫色線則是具體處理過程,引數指定的EAST就是代表“找到東邊的相鄰格子”這一步。在遊戲內,我們放置約塞米蒂也確實只能橫著放,看來就是因為這裡被限制了。我們嘗試把EAST改成NORTHEAST,儲存文件後進遊戲實際看看效果。注意,如果你正開著遊戲,需要退出遊戲後再進,才能再次載入MOD。
平時使用CME擺放的約塞米蒂,必然是東-西方向的
修改程式碼後使用CME擺放的約塞米蒂,已經是西南-東北朝向的了,但沒有顯示模型再次進入遊戲後使用CME放置約塞米蒂,當場就可以看到確實是當前格子和東北格子變成了約塞米蒂。save-load後再載入遊戲,卻發現沒有顯示模型。滑鼠移到格子上,提示文字表明這個格子確實是約塞米蒂了,但視覺上還是沒變。這時,才明白為什麼作者要單獨把百內和約塞米蒂單獨列出來處理了,看來作者也發現了這倆奇觀只有東-西方向擺放、正面面對攝像機時才有模型。(這個似乎可以理解,像珠穆朗瑪峰等奇觀,確實當兩個擺放方向不同時,甚至有無河流流過時,模型是不同的)。

雖然初戰失利,但不必氣餒。繼續看428行到441行。看①處黃線的註釋可知,這一段是處理連續3個格子排成直線的情況。②處紅線的判斷條件程式碼則更明確指出這一段就是針對張掖丹霞的。③處藍線是一個for迴圈,這裡就要用到我們前面提到的那個猜想,NORTHEAST、WEST等表示方向的識別符號,其實就是數字。④處的紫色線這個位置就是GetAdjacentPlot( )函式的最後一個引數,本來應該是填NORTHEAST這類識別符號的,但實際上在此處是填了一個整數變數 i,範圍從0到5。這一段for迴圈所執行的動作其實就是:在選定當前格子(稱為第1格)後,從“東北”方向開始,找到緊鄰的格子(稱為第2格),判斷第2格是否符合放置張掖丹霞的條件。如果不符合,則順時針找下一個相鄰格子。而如果符合,就沿著當前方向進一步判斷第2格的緊鄰格子(稱為第3格)是否符合放置張掖丹霞的條件,如果也符合,那麼就報告主函式,說這裡可以放置。如果不符合,則退回尋找下一個第2格。如此迴圈,直到把6個方向都找遍。
由於“是否符合放置條件”的判斷很寬鬆,所以基本上第一個“東北”方向就總是能滿足條件,於是我們在遊戲裡用CME放置的張掖丹霞地形就總是西南-東北向的。要修改這個其實也很簡單,看③處藍線設定了整數變數 i 的起始值是0,也就是從“東北”方向開始找,我們只要把 i=0改成 i=1,它就變成從“東”開始找了;同理,改成 i=2,它就變成從“東南”開始找了。這其實就已經夠了,足以讓我們在遊戲裡放置下東-西向或東南-西北向的張掖丹霞地形。
改成 i=2後進入遊戲,放置張掖丹霞,成功得到了東南-西北向的丹霞奇觀。至此我們終於收穫了一個戰果。
修改前,只能得到東北-西南向的張掖丹霞
修改後,成功得到了東南-西北向的張掖丹霞下一段443行一直到584行都是在寫如何放置米爾福德峽灣,主要是試圖讓峽灣的那個豁口朝向大海一側。由於這個機制在正常遊戲中也能被反映出來(也就是:你想讓峽灣朝向哪個方向,就在那個方向放置海,背後方向放置陸地),所以沒必要改動。另外,巨人堤和多佛白崖也是會隨著地形自動旋轉的,不用管。

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

第596行到第600行是在處理奇觀第2格的情況(1格奇觀當然無需任何處理)。①處黃線的判斷條件是當奇觀格子數大於1,也就是2格、3格、4格奇觀的第2個格子都被囊括其中。②處紅線的註釋明白說了,第2格無條件找東邊相鄰格,也就是③處紫色線呼叫的pEPlot。如果你是想放置一個2格奇觀,那麼看到這裡就夠了。比如我們想放置一個東北-西南向的棉花堡,把③處的pEPlot改成pNEPlot就行了。想放置東南-西北向就把pEPlot改成pSEPlot。
特別注意!!!由於下面對3、4格奇觀的第3格也是預設找東北格,所以如果你已經把第2格改成了東北格,那麼在遊戲裡就不要放置3格奇觀,否則也會出錯,不能正確顯示模型。
預設東-西向的棉花堡
變成東北-西南向的棉花堡如果要放置3、4格奇觀,那麼繼續往下看。3格奇觀有兩種方向,“當前-東-東北”構成的朝上三角形,以及“當前-東-東南”構成的朝下三角形,無論哪個都需要第2格是“東”格,所以我們先把前面599行恢復成pEPlot。然後看604行到617行,這裡是在講3、4格奇觀的第3格怎麼找。

①處黃線的判斷條件是當奇觀格子數大於2,也就是隻關係到3、4格奇觀了。②處紅線出現了分支,對於張掖丹霞和羅賴馬山有特殊處理。由於張掖丹霞已經被前面我們講過的428到441行處理掉了,所以這一小段其實隻影響羅賴馬山。專門說一下羅賴馬山,這是遊戲裡形狀最奇怪的一個奇觀,它需要“當前-東-西-東南”4個格子構成一個鉤子型(這個Mod的作者稱之為L型或三角形帶一個尾巴),所以③處藍線表明羅賴馬山的第3格是找了“西”格。除了羅賴馬山這一個特殊情況,④處紫色線註釋說明了其他所有3、4格奇觀的第3格都是找了“東北”格,也就是⑤處紅線的pNEPlot。如果我們想讓3格奇觀呈現向下三角擺放,那麼就把這裡pNEPlot改成pSEPlot即可。
正常擺放的珠穆朗瑪峰
向下三角型擺放的珠穆朗瑪峰如果要放置4格奇觀,那麼還要繼續往下看。4格奇觀有三種方向,東北-西南向菱形、北-南向菱形、東南-西北向菱形(神奇的羅賴馬山除外)。

都到這一步了,已經是文件的末尾了,應該也很熟練了。①處黃線的判斷條件是當前奇觀的格子數大於3,也就是隻剩4格奇觀會被影響了。②處紅線又出現了分支,還是針對羅賴馬山,③處藍線註釋說明了找“東南”格,也就是④處紫色線使用的pSEPlot。而對於其他4格奇觀,則都是菱形,鑑於前面第3格預設選擇了“東北”格,所以這裡⑤處紅線註釋說明第4格會找“西北”格,也就是⑥處黃線使用的pNWPlot。這樣,就構成了一個“當前-東-東北-西北”構成的東南-西北向菱形。所以想一想,如果我們想要一個南-北向的菱形,其實就需要“當前-東-東北-東南”格,那麼就去在599行、615行、632行這3處程式碼分別指定的格子替換成我們想要的格子的對應變數名,就可以實現。
預設東南-西北向的白沙漠
修改後南-北向的白沙漠同理,如果想要東北-西南向的菱形,那就需要“當前-東北-西北-西”或者“當前-東-東南-西南”格子,在相應位置替換即可。羅賴馬山也是一樣道理,如果我們想要一個長邊是東北-西南向的放置,那就使用“當前-東北-東-西南”格子,在599行、609行、626行位置替換就行了。Simple Geometry!!!
預設東-西向的羅賴馬山
修改後東北-西南向的羅賴馬山
總結起來,如果想要旋轉某個自然奇觀的擺放,那麼流程就是:退出遊戲→修改Mod資料夾裡CME_WonderGen.lua文件的相關程式碼,令其擺放邏輯符合我們的要求→重新進遊戲,使用CME放置奇觀→成功後退出遊戲→將Mod文件復原,重新進入遊戲→繼續下一回合。真的是非常的Simple呢!









