LV. 31
GP 1k

【心得】模組製作——新建築

樓主 likwueron iqandadie
GP24 BP-

作者標示-非商業性

本授權條款允許使用者重製、散布、傳輸以及修改著作,但不得為商業目的之使用。使用時必須按照著作人指定的方式表彰其姓名。

我發現巴哈這邊似乎沒mod製作的教學文?
當然也可能是它們都沉了,不管啦,反正,文明六在檔案規格上和五代略為不同,所以我來寫吧。

大概前幾天我看到2k終於把官方的模組製作工具釋出,我挺高興的。
雖然我本身是做網頁開發的工作,但我真的不想一個一個去查哪些值可以用,所以有工具幫你快速處理事情是很好的。
去到收藏庫的「工具」你可以找到
Sid Meier's Civilization VI Development Assets
Sid Meier's Civilization VI Development Tools
前者算是素材包,我這次不介紹素材包怎麼用,所以你先下載第二個就好了。

下載完後你會發現有三個工具,第一個叫Mod Buddy
點下去後它會提示說要安裝什Visual Studio的東西,沒錯,2k是拿VS當環境,微軟那邊叫Isolated Shell,我的解釋是一套依特殊需求建立的VS。

不管怎樣你裝好了,咦?英文的?當然我個人使用沒問題,但各位多少有點問題。
好啦,我後來發現其實是我按太快了,微軟那邊是有中文版可以選,但...
如果你不小心下到英文,請點此下載中文包

中文包連結失效,目前找不到替代的

然後我用了一下後得到一個結論:2K你它X的雜O
這程式雖然解決了一些問題,但整體來看只是,容我講得有點髒:就像一個可以沖水,但總是沖不下去的馬桶。



好吧,但還是想做,那就來吧。
先從建築開始吧,我認為這算比較簡單的東西
左上角FILE->New->Project打開新專案精靈
如我剛剛說的,新建築,所以選第一個「Starter - New Building」

下面是專案名稱和位置的設定
Name 雖說是名稱,不過不管你填什麼,和上傳後顯示的名稱沒什麼關係,你辨認得出來就好。(當然,為了避免文字讀取問題,請用英文)
Location 會抓你的使用者資料夾。除非你的C要滿了,不然不用特別照顧它。
Solution 會用的多半是你目標遠大,想做一系列的模組,這時你會讓一個解決方案(solution)包含多個專案,不過我們現在用不到。
Solution name 當你輸入第一欄的Name,這邊就會自動改掉了,所以沒特別需要不用理會。



你可能很想馬上開始做,不過我這邊想先介紹一下專案的設定。
你應該會在左邊或又邊看到Solution Explorer,它會列出解決方案中所有的檔案。
請在專案上右鍵,選Properties

Mod ID 是串神祕的文字,通常稱為GUID,一般會這麼做是避免撞名,不過後面你會發現撞名的機會多的是。
不管怎樣,沒事別改,改了你自己也頭大。

Version 是你改版才要更動

Mod Name 是別人真正會看到的名稱
你改了?嗯,好,基於一個神祕的原因,在下面有個叫Mod.Art.xml的檔案中也寫下了Mod Name,所以你也要改那一行。

Authors 作者群
Special Thanks 這看你,比你想感謝某個人給你相當多的意見,一般都是這樣

Homepage 模組的介紹頁面

Teaser 簡短的說明,或稱為廣告詞,反正就是用一句話吸引別人用你的模組
Description 完整說明

Support Single Player 在單人遊戲中啟用
Supports Network Multplayer 在多人遊戲中啟用
Supports HotSeat 我記得這是指中途加入,但我沒用過這玩意

Affects Saved Game 改變遊戲存檔
建築的話你可能會想讓它能加進你已經玩的遊戲



剩下的一些設定,Custom Properties看起來比較進階,先跳過
Associations是設定你這模組是否依賴或和別的模組衝突等等

FrontEnd Actions/In-Game Actions是類似的東西,就是這模組要餵哪些檔案給遊戲的設定。
如果你沒有在這邊指定,那就算進入遊戲也什麼事情都不會發生。
差別是在於FrontEnd Actions是你在設定遊戲會載入的,而In-Game Actions是進入一場遊戲才要載入。

比如有人寫了張新地圖,那肯定是FrontEnd Actions
如果是遊戲介面的改善,那通常只要放進In-Game Actions
而我們這次寫的新建築,一般都放In-Game Actions。
如果你打算弄成特殊建築,你就必需要放一個FrontEnd Actions讓別人選文明時知道它多了個特殊建築。

Actions分成很多種Type,現在就先講會用到的
UpdateDatabase 設定資料庫
UpdateIcons 設定圖示
UpdateText 設定文字

你可以先在專案上右鍵->Build,這樣預設的東西會先輸出到模組的資料夾中,你開遊戲就可以看到了。
我在之後就不在提示建置專案這點,而是假設你了解這部份。



進入正題吧,我們要怎麼弄出新建築?
文明六繼承文明五的架構,它是讀取xml轉成sql然後寫入資料庫。
所以如果你玩過資料庫,讀起來就比較順,甚至你可以直接使用sql作更複雜的操作。

先前我們查過,UpdateDatabase的是NewBuilding_Gameplay.xml這檔案,我們就來看看它做了什麼。
<Types>
    <Row Type="BUILDING_GAME_STUDIO" Kind="KIND_BUILDING" />
</Types>
在表格Types中新增一個Type叫BUILDING_GAME_STUDIO 它的Kind是KIND_BUILDING
所以你發現到,所有遊戲的東西都可以在Types中找到,接著使用Kind判斷它是什麼。

如果你要加別東西,比如說區域的話,你可以猜一下英文KIND_DISTRICT,領秀?KIND_LEADER。
不過說真的,我打字下去沒給提示還是會怕怕的,所以最後還是要去遊戲資料夾查一下有什麼可以用,你可以去:
安裝位置\Base\Assets\Gameplay\Data
每個檔案開頭通常會用<Kinds>定義一種Kinds,而你也以透過這些檔案參考你要建立的東西。
比如這次的建築就可以打開Buildings.xml看看一個建築有哪些可以用的東西。



中途插一話,我先前講過撞名的問題。
你這個模組加了個BUILDING_GAME_STUDIO,但別人的模組也加了,後果就是...資料庫一般會報錯,因為你想插入一個已經存在的值。
但遊戲碰到這情形會怎麼處理又是另一回事,也許它會忽略這問題,結果使其中一個模組失效。
為了處理這問題,會推薦在名稱前放自己的專屬標籤,你想的話也可以把先前的GUID拿來用,反正就是想辦法避免這情形。

選好GAME_STUDIO這文字,按下Ctrl+H打開取代功能
第一行是你要找的文字,後面那個按鈕就是找下一個
第二行是你要換成的文字,後面的按鈕分別是尋找並取代和取代全部(Alt+A)

第三行,第一個是分辨大小寫,請打開它
第二個是代取整個字(whole word),這邊的整個字是指西方文字的word,有興趣自行研究。
第三個是使用正規表達式,在一些地方很有幫助,值得研究,雖然目前還是用不上。
第四個是取代範圍,請選Current Project,這樣它就會把所有檔案都掃過一遍。



<Buildings>
    <Row BuildingType="BUILDING_GAME_STUDIO" Name="LOC_BUILDING_GAME_STUDIO_NAME" PrereqDistrict="DISTRICT_CITY_CENTER" PurchaseYield="YIELD_GOLD" Cost="100" AdvisorType="ADVISOR_GENERIC"/>
</Buildings>
這邊設定基本資料

Name是LOC_BUILDING_GAME_STUDIO_NAME
等一下你會在NewBuilding_Text.xml看到它的設定。
不過你可以先學一下命名的慣例:在文明中,文字都是以LOC為開頭。

PrereqDistrict 指定了需要什麼區域,DISTRICT_CITY_CENTER可以算是因沒別的要求而填的。
當然,這邊還有一大堆可以選的限制,不過我不想查太多東西,真的,沒有候選值提示讓人很煩燥。

PurchaseYield="YIELD_GOLD" 你可以用什麼買它,這邊是用錢。
你可以換成YIELD_FAITH改用信仰充值。

Cost 指定鎚子數量

AdvisorType 顧問提示類型
老實說我一直覺得顧問系統很廢,常常同一回合推薦一大堆東西。
所以保持預設值就好了,這沒差。



<Building_YieldChanges>
    <Row BuildingType="BUILDING_GAME_STUDIO" YieldType="YIELD_CULTURE" YieldChange="3"/>
</Building_YieldChanges>
<Building_GreatPersonPoints>
    <Row BuildingType="BUILDING_GAME_STUDIO" GreatPersonClassType="GREAT_PERSON_CLASS_ARTIST" PointsPerTurn="1"/>
    <Row BuildingType="BUILDING_GAME_STUDIO" GreatPersonClassType="GREAT_PERSON_CLASS_ENGINEER" PointsPerTurn="1"/>
    <Row BuildingType="BUILDING_GAME_STUDIO" GreatPersonClassType="GREAT_PERSON_CLASS_MUSICIAN" PointsPerTurn="1"/>
    <Row BuildingType="BUILDING_GAME_STUDIO" GreatPersonClassType="GREAT_PERSON_CLASS_WRITER" PointsPerTurn="1"/>
</Building_GreatPersonPoints>
這兩個地方設定建築給的產出,第一張表是資源,第二張是偉人點數

你大概猜到一些,不過我給你合法的值
資源類型:
YIELD_FOOD       食物
YIELD_PRODUCTION 鎚子
YIELD_GOLD       錢
YIELD_CULTURE    文化
YIELD_SCIENCE    燒瓶
YIELD_FAITH      信仰
偉人點數類型:
GREAT_PERSON_CLASS_GENERAL   將軍
GREAT_PERSON_CLASS_ADMIRAL   海軍上將
GREAT_PERSON_CLASS_ENGINEER  工程師
GREAT_PERSON_CLASS_MERCHANT  商人
GREAT_PERSON_CLASS_PROPHET   先知
GREAT_PERSON_CLASS_SCIENTIST 科學家
GREAT_PERSON_CLASS_WRITER    作家
GREAT_PERSON_CLASS_ARTIST    藝術家
GREAT_PERSON_CLASS_MUSICIAN  音樂家

很簡單吧?你把值都調超高,就超強的啦!
但電腦也是,因為這是大家都是可以蓋的建築,看來我們的確要把它改成特殊建築好讓我們可以折磨電腦。



要讓一個東西變限於某個文明或某個人,首先你要把它變成特質(Trait)
我講到新東西了,那你也可以想像,我們要建立一個新的Type
<Types>
    <Row Type="TRAIT_CIVILIZATION_BUILDING_GAME_STUDIO" Kind="KIND_TRAIT" />
</Types>

接著在Buildings那邊也要指定我們的建築要求這種特質
<Buildings>
    <Row BuildingType="BUILDING_GAME_STUDIO" Name="LOC_BUILDING_GAME_STUDIO_NAME" PrereqDistrict="DISTRICT_CITY_CENTER" PurchaseYield="YIELD_FAITH" Cost="100" AdvisorType="ADVISOR_GENERIC"
24
-
未登入的勇者,要加入討論嗎?
板務人員:歡迎申請板主

316 筆精華,03/03 更新
一個月內新增 0
歡迎加入共同維護。


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】