本帖最后由 sirnova 于 2018-9-25 22:27 编辑
声明:本教程为作者原创,需转载请注明作者及出处,否则必追究侵权责任
写在前面的话:
本文提供的方法是通用的,但实例基于Steam《原罪:神界2》终极版,由于文件树结构与原版不同,还请阅读者能够举一反三做迁移思维。
看万篇教程,不如亲自动手一回,亲读者在阅读本教程的同时也和作者一起,来完成自己的Mod作品吧。
关于制作mod中遇到许多细节、知识点与参考表,我会在每一次实例中遇到的时候具体讲解,凡是遇到重点会以粗体字标出。
![](static/image/hrline/2.gif)
准备工具:
1、《神界:原罪2》终极版——正版玩家会自动更新到终极版,由于增加了许多游戏内容,作者也几乎没有理由不使用这一版本。
2、ExportTool——极为重要的解包工具,当然你也可以使用游戏自带的编辑器而完全放弃解包,但官方编辑器在文本操作上制作效率极低,而且生成文件难以操作,故被作者放弃。
3、The Divinity Engine 2——官方游戏编辑器,最为重要的游戏操作工具,虽然不适合用来编辑脚本与文本,但在操作游戏内资源上没有可以替代者。
4、Notepad++——文本编辑器,你可以选用你喜欢的、熟悉的文本编辑器,选用Notepad++只是出于作者的喜好。
![](static/image/hrline/2.gif)
在开始之前,你应该……
现在,让我们开始制作属于自己的Mod吧!
首先,让我们来获得{游戏目录}\DefEd\Data\Public\Shared\文件夹下的内容,凡是位于此文件夹下的文件都会在游戏启动时被加载,无需转移到用户专用的Mod文件夹中。
当你打开{游戏目录}\DefEd\Data\文件夹后所见的内容应该是这样的:
![](http://bbs.3dmgame.com/forum.php?mod=image&aid=4583142&size=300x300&key=2d6c9d49b07ce54f&nocache=yes&type=fixnone)
目录中Shared.pak压缩包就是我们本次实例的目标,使用ExportTool打开它,你将在目标文件夹得到如下文件:
将这些文件全部复制入{游戏目录}\DefEd\Data\文件夹,我们就可以开始创作自己的技能了。
![](static/image/hrline/2.gif)
![](http://bbs.3dmgame.com/static/image/hrline/2.gif)
![](http://bbs.3dmgame.com/static/image/hrline/2.gif)
![](http://bbs.3dmgame.com/static/image/hrline/2.gif)
目标:
本次,我们的目标是修改【化身成神】这个技能。
这个技能是死灵法师的招牌技能(也仅此而已),效果为秘源点数消耗-3,略微增加一些属性。
但既然是神怎么会这么废呢? ——我们得让它强大起来。现在就动手吧。
这次实例的目标是完成如下技能修改:
- 拥有更加梦幻的外形,更加帅酷的效果。
- 作为神,超越物质形态,迈入神的领域,突破人类的极限,不为万物所侵。你将化身秘源,所有秘源技能不消耗秘源点数,并免疫一切伤害与异常。
- 为这个强大的技能添加限制。
为新技能添加描述。
数据修改:
打开Shout.txt,我们就可以找到化身成神这个技能的源数据。
<我们一行一行来看:
<为技能的ID,也是技能在游戏中的唯一标识。常见以{技能类型}_{技能名}的方式来命名。
化身成神就是这样,它是Shout类型,名为Apotheosis(这是一个源于希腊语的单词,意为“神化”。)
你或许会问,都是英文,我用的是中文版切换成英文版太麻烦,该到哪里去找技能名称呢?
你可以在以下这些地方找到参考:
官方提供的一些有用文档以及玩家知识请到:https://docs.larian.game/Main_Page
官方Wiki请到:https://divinityoriginalsin2.wiki.fextralife.com/Divinity+Original+Sin+2+Wiki
言归正传。
如果你稍作修改,把它变成其他名字,如Shout_Apolo,或者Dome_Apotheosis,或者群殴他任何东西,当你打开技能书查看你已经学会的化身成神技能时会发现它不见了。
这是因为系统关联不到技能ID的原因。
![](http://bbs.3dmgame.com/static/image/hrline/line3.png)
<此行为指定数据类型。技能自然是SkillData。
现在先不管它,以后我们还会见到Weapon,Posion等类型。
![](http://bbs.3dmgame.com/static/image/hrline/line3.png)
<技能类型,Apotheosis的技能类型是Shout。
在原罪2中你还可以使用如下技能类型(在不使用脚本的前提下,你能使用的原始类型也只有这些): 表来自于larian.game提供的文档,由作者翻译,检索时请一定使用英文 - Target, 用于指向目标(或目标区域),且没有发射投射物的技能。标志性技能:变形学派——强制交换。
- Shout, 以自己为中心(可以)辐射周围一定范围的技能。标志性技能:烈火学派——超新星。
- Projectile, 发射一枚或多枚沿路径飞行投射物的技能,这个技能类型可以用来投射自己。标志性技能:烈火学派——火球术。
- ProjectileStrike, 从天空投射一系列投射物(可以只有一个)冲击目标(通常是区域)。标志性技能:烈火学派——流星火雨。
- Cone, 在锥形区域内生成效果的技能,被定义在以释放者为中心一定角度、一定径长的锥形区域内(实际上为三角形)。标志性技能:种族技能——烈焰吐息。
- Zone, 在矩形区域内产生效果的技能。标志性技能:烈火学派——激光射线。
- Jump, 用于自我传送的技能,虽然Teleportation类型技能也可以自我传送,但两者之间的最大区别是Jump可以在起跳时产生效果。标志性技能:刺杀学派——金蝉脱壳。
- MultiStrike, 用于自我传送,同时对传送目标进行攻击的技能。标志性技能:战场技艺——闪电突袭。
- Rush, 指向性位移技能,通过一条可移动径直的路径从A点移动到B点,并在路径上产生效果。标志性技能:战场技艺——横冲直撞。
- Teleportation, 将一个或者多个目标进行传送的技能,你可以传送物体、角色甚至是地表,用途很广泛。标志性技能:大气学派——传送术。
- Summon, 创造一个或多个物体或角色的技能。标志性技能:召唤学派——召唤魔妖。
- Wall, 注意——Wall是在划定的路径上创造一系列相邻角色或物体的技能,物体不是连续物,神界2中也没有连续物。标志性技能:大地学派——毒藤之墙。
- Dome, 创造一个持续产生效果的圆形区域的技能,这个技能类型也可以用来创造一片单纯只有效果动画却没有任何实际效果的视觉技能。标志性技能:种族技能——守护结界。
- Rain, 在范围区域内(这个范围可以超过视野极限)产生大气效果并由系统自动生成地表的技能。标志性技能:水占学派——降雨。
- Storm, 在Rain的基础上,不但有大范围的生成地表效果而且可以从大气中产生抛射物的技能。标志性技能:大气学派——雷霆风暴。
- Tornado, 在大范围内清除地表与效果的技能。标志性技能:大气学派——飓风术。
- Quake, 以释放者为中心大范围内产生效果,(可)生成地表,并震动屏幕的技能。除此之外Quake技能与Shout技能没有区别。标志性技能:地卜学派——地震术。
当你使用化身成神时可以见到,这是一个只能针对自己释放的技能,无论你的鼠标点击屏幕何处,它都只会对自己释放一个Buff而已。 凡是这种以自己为中心向外辐射(或不辐射)直接套用效果的技能,你都可以使用Shout类型来实现。
![](http://bbs.3dmgame.com/static/image/hrline/line5.png)
<是否适用于地下城(游戏大师)模式,由于地下城模式中没有敌对AI,所以凡是自己使用的技能都默认为Yes,而标注为EnemyXXX的技能都使用No。 如果你不准备在地下城模式中使用它,就将之设置为No(比如你在给Boss写技能的时候),否则请使用Yes。
<技能所属的学派决定了它在你法术书中的位置,你可以使用如下值:
- None,无学派,无学派技能会显示为其他技能,出现在技能书的最左边。
- Warrior,战场技艺,边框为红色。
- Ranger,神射技艺,边框为绿色。
- Rogue,刺杀学派,边框为黑色。
- Source,源力技能,边框为青色。
- Fire,烈火学派,边框为橙红色。
- Water,水占学派,边框为蓝色。
- Air,大气学派,边框为深蓝色。
- Earth,地卜学派,边框为土黄色。
- Death,死灵学派,边框为深紫色。
- Summoning,召唤学派,边框为紫色。
- Polymorph,变形学派,边框为金黄色。
- Custom,特殊,无色边框。
学派技能栏按以上顺序排列。强迫症可以把所有召唤技能(召唤白骨蜘蛛是死灵技能??开玩笑)全部移动到Summoning之下,反正我是这么做的o_0。 化身成神作为变形学派的大招,类型自然为Polymorph。
<技能的等级——值限定为: Starter,初级,一般你创建角色时就会使用的法术。
Novice,中级,5级以上才能学的法术,比如火球术(怨念啊)。
Master,大师,最高级的法术,不是消耗记忆多才是大师法术,像超导这种都是大师法术。
与具体学到等级无关,这个字段在实际应用中没有任何作用! 之后我们会学习如何创作技能书,你可以在脚本中任意修改技能可学习等级。
<技能消耗的AP。最低为0,不要填负数,会让你的技能消失! 无聊的话可以做一个技能不消耗AP的Mod,将data "ActionPoints" "*"替换为data "ActionPoints" "0"就可以了。一个表达式搞定。 同理: <指定了技能记忆消耗与SP消耗。如果你想做一个不消耗SP的Mod(我听说下载量超大,很流行的说),你可以将其改为:
<你们可以试验一下如果将data "Memory Cost"的值设定为0是什么效果——没错,技能消失了。
请将Memory Cost字段的值设定为1~3,小于1技能消失,大于3游戏UI显示错误。
![](http://bbs.3dmgame.com/static/image/hrline/line5.png)
<技能冷却时间:
设定为-1,技能每场战斗只能使用一次,战斗外冷却为10回合。其他情况,填任意非负整数。
![](http://bbs.3dmgame.com/static/image/hrline/line3.png)
<释放技能后所施加的效果。在本例中,释放Shout_Apotheosis技能后,有{100%}几率会对所有技能指定的目标附加一个ID为{APOTHEOSIS}的效果,持续{2}回合。
暂时先记住,对于附加属性这类Buff效果,通常填写格式为——{效果ID},{几率},{回合数}。
如果你将回合数设定为-1,如:
<这个效果将一直持续下去,在本例中这也是我们希望得到的效果——化身为神,你可以随意使用秘源力量,再无限制。
关于这一字段以后会详细讲解,请先记住,它很重要,是以后技能修改的重中之重。
![](http://bbs.3dmgame.com/static/image/hrline/line5.png)
由此可知,我们的目标技能【化身成神】属于Shout【战吼】类型,而通过检索我们得知化身成神的英文名为【Apothesis】,于是锁定目标! 打开{游戏目录}\DefEd\Data\Public\Shared\Stats\Generated\Data,你就遇到如下文件目录: 打开Skill_Shout.txt文件,搜索Apothesis,你就会发现我们心仪的技能数据就在这里啦!
知识点:继承
当刚刚进入文件看到这些数据时,可能会一头雾水,这都是什么呢?不要紧,在制作技能的过程中,你都会明白的。 让我们来修改技能,但在这之前我们得先对原本技能做一个“保护”。这是因为AI也享用着同一套技能系统,如果你修改了源数据,就会造成AI不知所措,最终变傻,失去游戏体验。 来看第一行: < Shout_Apotheosis是技能的ID,也是技能的唯一标识,更改了这个标识系统就不会再把它当成原本的技能了。 现在我们来更改它,因为新的技能需要通过原本的技能书学习。 在这里我将它更改为: <现在让我们在这一组数据之外,多按几行空格,建立新的技能数据,新的技能将继承原有的技能数据: <这样新技能的模板就做好了。进入游戏你会发现,这一组修改对游戏没有任何影响。这是因为Shout_Apotheosis与Shout_Apotheosis_Old完全等价的缘故。 <将会把父对象的数据传递到子对象,这个关键字不仅仅可以用于技能,也能用于创造状态。
知识点:数据重写 接下来在新的子对象中我们就要来重写旧版本的数据了。这很简单,只要在新技能下面添加你想做出的修改就好了。形如: <值得注意的是,数据在对象内部也能够被重写,数据是被顺序调用的: <这种写法是完全合法的,但最终执行结果,技能会消耗1记忆槽而不是消耗3记忆槽,这是因为data "Memory Cost" "1"在data "Memory Cost" "3"之后,又将key"Memory Cost"重写了。
知识点:Key,字段
那么我们究竟能在这里做什么呢? 太多了!读者们可以先来浏览一下The Divinity Engine 2中Shout类型技能所包含的key字。 是不是很多。 如果做较简单修改的话,比如流行的秘源法术不消耗秘源点Mod,The Divinity Engine 2能提供很好的支持。但如果需要创造全新的技能体系,没有检索,没有文本编辑界面的编辑器只能让你哭泣。另外编辑器中提供的Key字是不完全的,深入修改时编辑器会限制你不能添加新的字段。 不过没关系,当你明白所有字段的意义后,就可以游刃有余了。(你会爱上用文本编辑器,而不是IDE)
必须项!请在之前讲过的技能类型列表中选择一项添加到这里。
必须项!bool值,确定这组数据是否用于地下城城主模式(在很多人的游戏中也被翻译成游戏大师模式)。
bool值,默认为No,确定这项技能是不是敌对NPC所用的技能。注意!如果你在技能中写上:<那么你的技能效果会认为所有敌对目标都是你的盟友,而所有的盟友都是你的敌人!你的雷霆风暴会一直霹自己人,你的增益光环会直接施加给敌对目标。
如果你的技能出了上述奇怪的状况,请检查是不是这一项在作怪。
枚举值,默认是None。如果你想修改,请在以下列表中选择一项填入: < 如果你选择让技能变成None或者Custom,这个技能并不会消失,而是在你的技能书中以“已掌握技能”的形式出现。 除此之外,任何值都会让这个技能消失——但是——游戏不会崩溃,放心……
必须项!整数值,我称之为消费组。它们定义了你所设计技能的具体消费。 分别对应: 行动点数:非负整数 冷却:-1或非负整数 记忆槽:0或正整数 秘源点数:非负整数
如果值超限,技能会作废,但游戏不会崩溃。 冷却被设定为-1的技能,在战斗中技能只能使用一次,战斗外技能有10回合冷却时间。 记忆槽为0,意味着该技能毫无价值,从你的技能书中消失。 记忆槽大于3,技能依然在你的技能书中,但游戏UI会出大问题,导致你无法拖动技能。 秘源点数可以大于3,在以后的教程中我会以实例演示的方式教大家如何调整秘源点数上限,但当秘源点数大于10时,你的游戏UI会出问题,慎重! 让我们以Apothesis技能为例来练习一下,将你的代码修改为: < 进入游戏后你会发现,你可以随便使用Apothesis了,还要肾上腺素干什么,是不是很imba。
我称之为伤害组。它们定义了技能的伤害模型。 分别对应: 伤害源:枚举值 伤害系数(%):非负整数 伤害浮动范围(%):0~200 伤害类型:枚举值
在填写伤害源时,请遵从下表。 重要提示: 如果你想使用BaseLevelDamage与AverageLevelDamge以外的任何值, 都请先将UseCharacterStats、UseWeaponDamage、UseWeaponProperties字段的值设置为”No“。 否则Damage设定将被重写覆盖。 < 而在填写伤害类型时,请遵循下表: <
你会发现,哎,为什么Apothesis技能中没有这块字段呢?
是的,伤害字段并非必须字段,在父对象中已经被定义好。作为一个自我buff技能,你不会想在获得能力之前还要自砍一刀吧hh 在这里我以其他技能为例,读者可以快速快速修改试验,测试伤害字段带来的变化。
我们先来找到【 真空之触】这个初级技能,它的英文名称为Vacuum Touch ,通过技能描述我们知道它是一个指向目标并没有投射物的技能,类型应该为Target。 打开{游戏目录}\DefEd\Data\Public\Shared\Stats\Generated\Data\Skill_Target.txt文件,搜索VacuumTouch,我们找到了目标。 现在我们来看看定义真空之触的数据: < 红色字段即为我们要修改作为演示的部分,而蓝色字段已经被设置好,我们无需改动。 现在我要修改的目标是——对敌方魔法护甲造成等同于我的角色当前魔法护甲200%的伤害,那么我们该如何做呢? 请用以下代码替换红色字段即可:
< 这段修改的意思依次为是: 以角色当前魔法护甲值为源数据 伤害系数200% 没有伤害浮动(伤害固定) 只对目标魔法护甲造成伤害
经过我们的改动,真空之触这个废物技能(啊,反正我没用过,贴脸太可怕了)突然变成了一个能够快速破甲施加沉默的技能了。
非负数,以中心点为准技能的辐射范围,默认值是0,即只会辐射到中心点,由于Shout技能中中心点就是释放者。所以自我buff技能你可以直接省略这一项。
注意: 这里填入的非负数最多一位小数。3.33系统不会识别而变成3.3。 如果你填入的是个负数,这个技能将无法释放(游戏不会崩溃滴)。 不要大于30,那没有任何意义,因为游戏脚本中设定30是战斗的极限范围,仅仅在这里修改不会让它变成一个杀人于千里之外的技能。
bool值,是否为技能范围增加武器范围,默认为No。 <会明显让你的技能多出来一大块额外区域。
>_>近战的范围是1m,一个女性蜥蜴人的身高是2.4m,算上模型体积,1m其实还挺短的。如果给小范围技能加上武器范围能成为一个不错的AOE。 必须项!请在之前讲过的技能类型列表中选择一项添加到这里。
bool值,是否自动释放技能,默认No。独特字段。 很多的自我buff技能(如变色龙伪装)设定为Yes,你一旦点击技能就会立即释放,省时省力。但如果用于大范围技能,设定为Yes会让你无法看到究竟辐射到了哪些目标。 bool值,默认为No/No/No。这三项通常成组出现,我称之为属性关联组。 分别控制着技能伤害: 是否和人物属性有关(力量、智力、等级) 是否和武器伤害有关(面板伤害) 是否和武器属性有关(雷伤、火伤,附加属性,插孔)
bool值,默认为Yes/No/No。这三项亦成组出现,我称之为目标关联组。 分别控制着: 能否指向角色(敌人、npc、你的盟友等等等等) 能否指向物品(比如你想用尸爆术炸了对面的门) 能否指向地形(该范围的所有地面) 你会发现Shout类型中根本没有 CanTargetTerrain ,难道没有这个字段吗? 并不是,你可以试试: < 你会发现,技能依然可以被正常释放。因为你添加的字段是合法的。 Shout类技能默认指向该范围所有地面,这项在父类时就已经被定义了,所以你在所有Shout类技能中都见不到这一字段。
Conditions!条件!条件!条件! 条件是什么,条件就是控制你过滤目标的控制器,如果没有条件,就没有游戏技能的多样性 光凭上上面介绍的字段显然不能做出多种多样的技能,我们还要搭配条件,与条件过滤字段。 这里先讲条件: DOS2中不使用脚本的情况下,你不能将技能指向一个独特的ID目标,而只能使用条件 条件控制着目标的指向,它是表值,可以复合。 要使用条件,请熟悉下表中的过滤器:
<
条件组合中遵循以下规则: |表示“或”。如:Undead|Dead表示尸体或者不死生物。 &表示“与”。如:Self&MySummon表示你与你的召唤物。 !表示“非”。如:!MagicArmourUp表示没有魔法护甲的。 ;分割多个条件项。如:NonSelf;Ally表示除自己以外的盟友。 :用来引用参数。如:HasStatus:FROZEN表示已被冻结的。
应用这些知识,我们来解决一些问题: <
|