[翻譯][Dragon Age]從頭建立一個新職業
原文http://www.damods.com/forums/index.php?topic=571.0
翻譯者:台灣奇幻遊戲社群網的騎士Yu
代碼打手:台灣奇幻遊戲社群網的企鵝
網址http://www.pcfit.idv.tw/nwn2/
========================================================================
危險: 危險: 危險: 危險: 危險: 危險: 危險: 危險: 危險: 危險: 危險: 危險: 危險: 危險: 危險:
========================================================================
如果你不懂C++、腳本和2DA檔,本篇教學將會破壞你的DragonAge遊戲。(譯者注:就是會將你遊戲的內容修改的亂七八糟的意思拉)
如果破壞了,就只能重新安裝DragonAge和Toolset。
最好是能備份你的遊戲核心檔案。
你必須特別小心。
========================================================================
小心: 小心: 小心: 小心: 小心
========================================================================
===================
NEW CLASSSTARTER KIT
===================
你需要一個套件內含.xls的電子表格,這樣才能製作新職業。點擊下面網址可以下載已製作完成得套件。
(譯者注原作者給的檔案和教學不符 建議完全照教學作)
關於.xls的製作、轉換以及GDA等,此篇教學都有講到,只要你跟者我的腳步。
此篇教學是指導如何製作新職業。
請完全遵從此教學的順序,不要跳章節閱讀。
===================
新職業開始套件
===================
------------------------------------
步驟1:你將要編輯的2DA檔案(譯者:能夠在遊戲目錄裡的toolsSource2DA找到)
------------------------------------
(譯者:最好將以下檔案複製一份 統一放在一個目錄這樣比較好修改)
2da_base.xls
abi_base.xls
ALclassname_default.xls (例如 ALshaman_default.xls)複製自ALWizard_default.xls
background.xls
cla_base.xls
guitypes.xls
(譯者在此給wiki介紹不然各位不曉得各個xls的作用
進入後請自行點選你要看的xls)
------------------------------------
步驟2:編輯2DA
------------------------------------
------------------------------------
開啟2da_base.xls
------------------------------------
切換頁面為M2DA_base(可以使用TAB鍵切換)
在最下面空白處添加
ID為100000
Label為ALShaman_default
Worksheet為ALShaman_default
保存你的檔案
------------------------------------
開啟guitypes.xls
------------------------------------
在底部添加:
ID為500 Label為Class: Shaman StringId為8000000 Ability為5000 ProgressBar為0 CombatTraining為0 SpecialGraphic為1 TintColor為0x9B0F00 Orphanage為0 Flags為0 BlendTree為****
保存你的檔案
------------------------------------
開啟CLA_base.xls
------------------------------------
將以下資料一一填入ID為3的下一列(即ID為3的下一列統統往下移動一列,中間空出的一列放資訊)
4 Shaman 8000000 8000001 **** 8000002 8000003 classico_spirithealer CLASS_Shaman 2 95 1 100 5 2 2 2 2 2 0 0 0 55 50 1 5 1 3 0.3 4035 **** 1 Shaman ****
儲存你的檔案
------------------------------------
開啟background.xls
------------------------------------
在backgrounds 頁面:你必須要在Mage和Skill1間插入一個區塊,如圖
在background_defaults頁面裡有多個區域要追加,請看圖
ID是如何工作?1 = dwarf,4 = shaman,5= noble,設定是很簡單的。
在第12,15,17,19列你要照圖追加我推薦你直接複製然後修改。10==> 12
13 ==> 15
16 ==> 17
18 ==> 19
關於templatestring裡的deault_shaman.utc,是稍後要在toolset裡製作的基本模型。
至於Ability的int是遊戲裡的職業預設能力,以我為例是直接用沒有被使用過的數字。
在chargen_preload頁面,你必須加入一些區塊如圖:
注意ID的數值必須必須和background_defaults頁面的數值一樣,否則會使遊戲崩潰。
儲存你的檔案
------------------------------------
開啟abi_base.xls
------------------------------------
在ABI_Base頁面將以下內容添加到底部
有多行是重要的東西必須要瞭解
abilitytype- 定義能力類型。近戰,法術,技能等等--->是直接連結到abilitytype.xls
prereqability– 定義有此能力的必須條件。要建立新職業就必須修改已存在的職業。
guitypes - 職業的參考---> 連接到guitypes.xls
在第119列的下一列==> 4034 HIDDEN_DOG下方插入新列並個別輸入以下資訊
5000 HIDDEN_SHAMAN 0 0 380405 330716 hidden 2 0 0 0 0 0 0 0 1 0 0 12 0 0 0 0 3 1.5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 7 0 2 33 0 0 0 0
將以下內容一一複製到頁面底部(總共要製作四個新列)
300000 HEROIC_OFFENSE2 380003 379523 367458 379231 spl_ico_heroic_offense 2 1 0 0 0 20 0 5000 0 0 0 500 3 0 3 1 4 spell_singletarget.ncs 5 90215 244 247 0 0 2 0 0 0 0 0 0 90109 128 1 7 0 2 33 0 0 0 0
300001 HEROIC_AURA2 380000 379520 367458 379214 spl_ico_heroic_aura 2 1 0 0 0 30 0 300000 0 4 15 500 3 0 3 1 4 spell_singletarget.ncs 5 90213 244 247 0 0 0 0 0 0 0 0 0 90110 128 1 7 0 2 33 0 0 0 0
300002 HEROIC_DEFENSE2 380001 379521 367458 379256 spl_ico_heroic_defense 2 1 0 0 0 40 0 300001 0 4 20 500 3 0 3 1 4 spell_singletarget.ncs 10 90214 244 247 0 0 2 0 0 0 0 0 0 90111 128 1 7 0 2 33 0 0 0 0
300003 HASTE2 380005 379525 398957 379229 spl_ico_agility 2 0 0 0 0 0 60 300002 0 4 30 500 1 1 18 1 2 spell_modal.ncs 30 90216 244 247 0 0 2 0 0 0 0 0 0 90112 192 1 7 0 2 33 0 0 0 10
-------------------------------------------------
接下來是棘手的問題,請確保接下來都遵從教學,否則你就要和你的模組說再見。
選擇第三列到最後一列(即第三列到最後一列反白)
到DATA(資料)--> SORT BY COLUMN S (guitypes)(行排序依照guitypes以我為例是依欄位S作排序)。現在應該是依照guitype排序完畢。
現在我們要將mage的法術自我們新職業的法術裡分開。
在guitype裡數值介在1~4的,看相對映的prereqability數值,若為0就改成4023
從現在開始特殊能力只有在職業為mage時出現。(這也就意謂者我們要為新職業製作獨立的技能。)
現在已經確保不同職業,技能不會重複。
選擇第三列到最後一列(即第三列到最後一列反白)
到DATA(資料)--> SORT BY COLUMN S (ID)(行排序依照ID以我為例是依欄位A作排序)。
-------------------------------------------------
現在到passive_abilities頁面
在最下方的新列一一填入
9000 HIDDEN_SHAMAN 1 2 4 2 6 1 str+2,mag +2,con +1
儲存你的檔案
------------------------------------
開啟ALShaman_default.xls
------------------------------------
改成如圖
=================================================================================
將2DA檔轉成GDA
=================================================================================
在C:下建立一個叫做2DA的資料夾,在裡面建立一個叫做override的資料夾。
在你的C:2da把以下檔案放進入:
2da_base.xls
abi_base.xls
background.xls
cla_base.xls
guitypes.xls
ALShaman_default.xls
去你的toolset資料夾將ExcelProcessor.exe也放進去我們是靠 ExcelProcessor作轉換
(譯者:以我為例是在遊戲目錄裡的toolsResourceBuildProcessors)
然後我們製作簡單的批次檔來轉換。
開啟記事本,將以下代碼複製貼上去,存檔檔名取為convert.bat並執行convert.bat
C:2DAExcelProcessor.exe2DA_base.xls -outdir=C:2DAoverride
C:2DAExcelProcessor.exebackground.xls -outdir=C:2DAoverride
C:2DAExcelProcessor.exeCLA_base.xls -outdir=C:2DAoverride
C:2DAExcelProcessor.exeALShaman_Default.xls -outdir=C:2DAoverride
C:2DAExcelProcessor.exe guitypes.xls -outdir=C:2DAoverride
C:2DAExcelProcessor.exe ABI_base.xls -outdir=C:2DAoverride
注意:若系統為Vista或是Windows7,請以管理者執行convert.bat(即RUNAS ADMINISTRATOR)
現在你為你的模組製作GDA檔了。
=================================================================================
在Toolset編輯資料
=================================================================================
建立新模組(Createa new module)如圖
請確認你的STRING數值是介於8,000,000~8,300,000
如果不在此範圍,STRING就不會工作BIOWARE聲明這是SQL的問題模組建立後,開啟模組選擇heirarchy並檢查singleplayer是否有打勾。
模組建立完畢,現在要將GDA放在適當override區域。
開啟我的文件/bioware/dragonage/addins/modulename
將GDA檔放在我的文件/bioware/dragonage/addins/modulename/core/override資料夾裡面
------------------------------------
編輯2DA_CONSTANTS_H檔案 ==>under _Corescripts(將2DA_CONSTANTS_H作成腳本)
------------------------------------
對2DA_CONSTANTS_H按滑鼠右鍵,選擇CHECKOUT
打開,依照下方代碼尋找區域並修改成一樣:
const int ABILITY_TALENT_HIDDEN_DUELIST = 4030;const int ABILITY_TALENT_HIDDEN_RANGER
= 4029;
const int ABILITY_TALENT_HIDDEN_REAVER
= 4019;
const int ABILITY_TALENT_HIDDEN_ROGUE
= 4020;
const int ABILITY_TALENT_HIDDEN_SHALE
= 4033;
const int ABILITY_TALENT_HIDDEN_TEMPLAR
= 4021;
const int ABILITY_TALENT_HIDDEN_WARRIOR
= 4022;
const int ABILITY_TALENT_HIDDEN_WARRIOR
= 5000;
const int ABILITY_TALENT_HURLOCK_PROPERTIES
= 90080;
const int ABILITY_TALENT_INDOMITABLE
= 28;
和
//Class Constantsconst int CLASS_WARRIOR
= 1;
const int CLASS_WIZARD
= 2;
const int CLASS_ROGUE
= 3;
const int CLASS_SHAMAN
= 4;
const int CLASS_SHAPESHIFTER
= 5;
const int CLASS_SPIRITHEALER
= 6;
const int CLASS_CHAMPION
= 7;
const int CLASS_TEMPLAR
= 8;
const int CLASS_BERSERKER
= 9;
const int CLASS_REAVER
= 10;
const int CLASS_ARCANE_WARRIOR
= 11;
const int CLASS_ASSASSIN
= 12;
const int CLASS_BLOOD_MAGE
= 13;
const int CLASS_BARD
= 14;
const int CLASS_RANGER
= 15;
const int CLASS_DUELIST
= 16;
const int CLASS_SHALE
= 17;
const int CLASS_DOG
= 18;
const int CLASS_MONSTER_ANIMAL
= 19;
編輯完畢就在頂端按滑鼠右鍵選SAVE然後點選CHECKIN
然後在頂端點擊"EXPORTWITHOUT DEPENDENT RESOURCES"
---------------------------------------------------------------------------
編輯gen00pt_class_race_gend檔案 ==>under _Global ==> plotscripts
---------------------------------------------------------------------------
對gen00pt_class_race_gend按滑鼠右鍵,點擊CHECKOUT
打開,找到區塊並依照下列代碼修改:
case GEN_CLASS_MAGE: { nResult
= ( GetCreatureCoreClass
(oListener
) == CLASS_WIZARD
);
break;
} case GEN_CLASS_WARRIOR
: { // DEBUG START nResult
= ( GetCreatureCoreClass
(oListener
) == CLASS_WARRIOR
);
break;
} case GEN_CLASS_ROGUE
: { nResult
= ( GetCreatureCoreClass
(oListener
) == CLASS_ROGUE
);
break;
} case GEN_CLASS_SHAMAN
: { nResult
= ( GetCreatureCoreClass
(oListener
) == CLASS_SHAMAN
);
break;
}
編輯完畢就在頂端按滑鼠右鍵選SAVE然後點選CHECKIN
然後在頂端點擊"EXPORTWITHOUT DEPENDENTRESOURCES"
----------------------------------------------------------
編輯sys_chargen_h==> under _Systems ==>_Includes
----------------------------------------------------------
對sys_chargen_h按滑鼠右鍵,選CHECKOUT
打開,找到Startingskills區塊修改成下圖:
// ------------------------------------------------------------------------- // Starting Skills // ------------------------------------------------------------------------- if (nClass
== CLASS_WARRIOR
) { _AddAbility
(oChar, 100100
);
} else if (nClass
== CLASS_ROGUE
) { _AddAbility
(oChar, ABILITY_SKILL_POISON_1
);
} else if (nClass
== CLASS_WIZARD
) { _AddAbility
(oChar, ABILITY_SKILL_HERBALISM_1
);
} else if (nClass
== CLASS_SHAMAN
) { _AddAbility
(oChar, ABILITY_SKILL_HERBALISM_1
);
}}
然後到startingability區域並修改
// --------------------------------------------------------------------- // Load the starting ability for the background // --------------------------------------------------------------------- int nAbility
= GetM2DAInt(TABLE_STARTING_EQUIPMENT,
"Ability", nIdx
); _AddAbility
(oCreature, nAbility
);
} else { string sTemplate
= "default_player.utc";
switch (nClass
) { case CLASS_WARRIOR
: sTemplate
= "default_warrior.utc";
break;
case CLASS_ROGUE
: sTemplate
= "default_rogue.utc";
break;
case CLASS_WIZARD
: sTemplate
= "default_wizard.utc";
break;
case CLASS_SHAMAN
: sTemplate
= "default_shaman.utc";
break;
} LoadItemsFromTemplate(oCreature, sTemplate,
TRUE);
}}
到"//Undo Class and Race selection" 區域修改
// Note: This wipes the ability list clear CharGen_ClearAbilityList(oChar,1
);
CharGen_ClearAbilityList(oChar,2
);
CharGen_ClearAbilityList(oChar,3
);
CharGen_ClearAbilityList(oChar,4
);
到 "//enabling proper tactics presets" 修改
nForClass1 = GetM2DAInt(TABLE_TACTICS_USER_PRESETS, "ValidForClass1", nCurrentRow); nForClass2
= GetM2DAInt(TABLE_TACTICS_USER_PRESETS,
"ValidForClass2", nCurrentRow
); nForClass3
= GetM2DAInt(TABLE_TACTICS_USER_PRESETS,
"ValidForClass3", nCurrentRow
); nForClass4
= GetM2DAInt(TABLE_TACTICS_USER_PRESETS,
"ValidForClass4", nCurrentRow
);
if(nCoreClass
== nForClass1
|| nCoreClass
== nForClass2
|| nCoreClass
== nForClass3
|| nCoreClass
== nForClass4
) AddTacticPresetID(oCreature, nCurrentRow
);
編輯完畢就在頂端按滑鼠右鍵選SAVE然後點選CHECKIN
然後在頂端點擊"EXPORTWITHOUT DEPENDENT RESOURCES"
----------------------------------------------------------
編輯sys_rewards_h==> under _Systems ==>_Includes
----------------------------------------------------------
對sys_rewards_h按滑鼠右鍵選擇CHECKOUT
開啟並在代碼500附近依下方代碼修改:
const int SPEC_WIZARD_SHAPESHIFTER = 5;const int SPEC_WIZARD_SPIRITHEALER
= 6;
const int SPEC_WIZARD_ARCANE_WARRIOR
= 11;
const int SPEC_WIZARD_BLOOD_MAGE
= 13;
const int SPEC_WARRIOR_CHAMPION
= 7;
const int SPEC_WARRIOR_TEMPLAR
= 8;
const int SPEC_WARRIOR_BERSERKER
= 9;
const int SPEC_WARRIOR_REAVER
= 10;
const int SPEC_ROGUE_ASSASSIN
= 12;
const int SPEC_ROGUE_BARD
= 14;
const int SPEC_ROGUE_RANGER
= 15;
const int SPEC_ROGUE_DUELIST
= 16;
編輯完畢就在頂端按滑鼠右鍵選SAVE然後點選CHECKIN
然後在頂端點擊"EXPORTWITHOUT DEPENDENTRESOURCES"
----------------------------------------------------------
編輯sys_chargen==> under_Systems
----------------------------------------------------------
對sys_chargen按滑鼠右鍵選CHECKOUT
開啟,改變這一行:
constint MAX_CLASS_INDEX = 4; // Last index of available base classes incla_base.
到specialhandling區塊並修改如下:
// special handling for aluvian if (nQuickStart
== 0
) { Log_Trace
(LOG_CHANNEL_CHARACTER,
"sys_chargen",
"Setting default values for player character");
int nRandClass
= abs((GetLowResTimer()%3
)+1
);
if(nRandClass
== CLASS_ROGUE
|| nRandClass
== CLASS_WARRIOR
|| nRandClass
== CLASS_SHAMAN
) { _RunChargen
(RACE_HUMAN, nRandClass, oChar, BACKGROUND_NOBLE
); WR_SetPlotFlag
(PLT_GEN00PT_BACKGROUNDS, GEN_BACK_HUMAN_NOBLE,
TRUE);
} else // mage { _RunChargen
(RACE_HUMAN, nRandClass, oChar, BACKGROUND_MAGI
); WR_SetPlotFlag
(PLT_GEN00PT_BACKGROUNDS, GEN_BACK_CIRCLE,
TRUE);
} Chargen_SetNumTactics
(oChar
);
SetCanLevelUp(oChar,Chargen_HasPointsToSpend
(oChar
)); SendEventModuleChargenDone
("",
"");
}到tactics區域依下方代碼添加:
// associate some tactics preset table int nPresetTable;
if(GetCreatureCoreClass
(oChar
) == CLASS_WARRIOR
) nPresetTable
= 1;
// tank else if(GetCreatureCoreClass
(oChar
) == CLASS_ROGUE
) nPresetTable
= 2;
// damage dealer else if(GetCreatureCoreClass
(oChar
) == CLASS_SHAMAN
) nPresetTable
= 1;
// damage dealer else // mage nPresetTable
= 5;
// nuker
編輯完畢就在頂端按滑鼠右鍵選SAVE然後點選CHECKIN
然後在頂端點擊"EXPORTWITHOUT DEPENDENT RESOURCES"
------------------------------------
製作UTC模板(TEMPLATE)檔案
------------------------------------
返回Toolset請跟者下方教學:
點擊"creature"標籤(紅頭圖標)
(譯者:就在右方的PaletteWindow)
展開_Core_Creatures
在展開_DoNOT TOUCH
對default_mage按右鍵選擇duplicate如圖製作:
現在要編輯數值並給予基本武器和裝甲如圖:
Class:Shaman (from dropdown)
Name: Default Male Shaman
編輯完畢就在頂端按滑鼠右鍵選SAVE然後點選CHECKIN
然後在頂端點擊"EXPORTWITHOUT DEPENDENT RESOURCES"
=================================================================================
利用stringeditor
=================================================================================
點擊上方功能列的Tool->Stringeditor
依下方所述一一填入:
Table= module talk base
Owner = module name
TYPE = GUI
8000000 -Shaman
8000001 - Shamans
8000002 - Shamans commune with spiritsto get thier other worldly powers.
8000004 - Shaman
8000005 -Shaman Male Name
8000006 - Shaman Female Name
完成後就關閉Stringeditor
=================================================================================
全部放在一起
=================================================================================
點擊上方功能列的Tool->EXPORT
按"EXPORTWITHOUT DEPENDENT RESOURCES"
按"GENERATEMODULE XML"
按"GENERATEMANIFEST XML"
按"EXPORTTALKTABLE"
=================================================================================
清除垃圾資料(譯者:Toolset的bug)
=================================================================================
不要忽略此部份
到我的文件/bioware/dragonage/packages/core/override/toolset
將此資料夾內的東西複製到
我的文件/bioware/dragonage/addins/modulename/core/override/toolset
應該會有以下檔案:
2da_constant_h.nss
gen00pt_class_race_gend.nss
sys_chargen_h.nss
sys_rewards_h.nss
sys_chargen.nss
sys_chargen.ncs
將我的文件/bioware/dragonage/packages/core/override/toolset裡的東西全部殺掉
=================================================================================
嘗試結果
=================================================================================
開啟你的遊戲並選擇新遊戲
*小心*如果出現任何錯誤訊息都將會損害遊戲本體
點選MALE ==> HUMAN ==> SHAMAN ==>MAGI
你可以看到你的新人物
如果有任何意外發生請從頭依教學檢查是否有錯誤
請確保你沒有遺漏";" 或"{}",如果缺少會摧毀遊戲。
=================================================================================
危險焦點
=================================================================================
我的法術沒有出現在創造人物的視窗裡,求助!!
======>你沒有排序你修改過得ability檔案裡的ID行。如果ID有排序就會出現。
======>你可能沒有賦予新能力給你的新職業"5000" 在prereqability行裡面
當我要點選MALE==> HUMAN ==> SHAMAN ==> MAGI 時,我的新職業沒有出現
======>很顯然你沒有輸出你的default_shaman.utc模型
======>檢查background檔案,確保template是使用default_shaman.utc
======>重新啟動你的電腦