/ Mods / 1008浏览

【神界原罪2】超详细Mod实例教程 01:工具基本介绍和修改技能实例

前置准备

官方给了制作Mod的工具,方便我们的开发。首先在Steam库中搜索The Divinity Engine,并下载安装(其他平台应该也是有的,仔细找找应该可以找到)。

另外,我推荐你安装Script Extender脚本,在后续牵扯到脚本代码编写时可能会用到,在其中添加了很多很有用的函数以供调用。参考地址见:https://steamcommunity.com/sharedfiles/filedetails/?id=2340090092,或 https://steamcommunity.com/sharedfiles/filedetails/?id=2031669903

如果你安装了上述脚本,那么在打开The Divinity Engine时会出现一个Console:


打开The Divinity Engine后,新建第一个项目Project Type选择Add-on,在右下角选择Story选项,并给项目取一个名字:

创建完成后,稍等片刻,会弹出一个浏览框让你选择一个场景,这里我们暂时不需要(以后随时可以选择加载场景),先点击Cancel,关闭对话框。

工具栏常用功能介绍

在工具栏有一些官方给出的Mod工具,这里我们最常用到的是橙黄色的几个,

它们分别是

  • 材料编辑器:很少用到,MOD涉及到模型可能会用到。
  • 脚本编辑器:编写gameScript脚本,用来辅助完成一些功能,特别是对物品和角色而言。(使用官方给出的技能模板可以轻松复刻游戏已有的技能机制,包含在数据编辑器中,而你想做的技能可能需要复合已有机制,甚至需要脚本来实现)。
  • 特效编辑器:用来编辑特效,比如技能施法的特效或者命中特效等。在编辑技能时可以用这个工具查看已有特效名称。
  • 故事编辑器:为和gameScript脚本做区分,一般在把在这里编写的脚本称为Osiris脚本。官方对于故事编辑器的介绍 , 总的来说它可以控制游戏世界的事件,但是对于物品或者角色的行为控制不能全部照顾到,所以需要脚本编辑器来做功能补充。
  • 对话编辑器:用来编辑互动对话。
  • 翻译字符串管理:用来管理本地化的工具。
  • 贴图画册编辑器:在引入自定义图标时会用到。
  • 标签管理器:编辑标签属性,很少用到,我的项目暂时没用到过。
  • 日志编辑器:暂时没用过,官方文档
  • 数据编辑器:很常用,可以添加或编辑修改游戏的部分参数,比如技能的伤害系数、属性;状态的属性;部分天赋的加成数值;一些游戏设定,比如召唤物的同时存在数量等。
  • 没了解过,暂时不做说明。

如何修改游戏数据

本教程打算从简单的修改开始,循序渐进。因此加下来先来对最常用也是新手最容易做起、入手的数据编辑器讲起。在这里你可以看到部分游戏数据,比如在Shared-ExtraData下可以看到如投掷距离、卷入战斗范围、潜行伤害倍数、加速减速倍率等等数据。有兴趣可以通过翻译软件看看有哪些数据可以修改,这样你在知道了哪些数据可以修改后,说不定就能自定义出你喜欢的世界属性:


如果你要修改相关属性,只需要右键想要修改的项目,点击override in - 你的项目名称 即可在相应位置编辑并保存:

编辑数据完成后,快捷键Ctrl+S保存,或者点击软盘图标保存。

技能分类与介绍

The Divinity Engine中,技能数据是按照技能种类分类的,点击SkillData即可看到如下分类(部分描述参考Element120大佬的文档,表示感谢):

  • Cone: 锥型技能,可定义Range Angel属性来定义技能的覆盖半径和角度。另外还有一个特殊属性PushDistance来定义击退距离,见技能RadialBlowback。典型技能:蜥蜴人种族技能——烈焰吐息
  • Dome: 半球形视觉效果的持续性技能,典型技能:人类种族技能——守护结界
  • Jump: 用于自我传送的技能,虽然 Teleportation传送类型技能也可以自我传送,但两者之间的最大区别是Jump 可以在起跳时产生效果。可以通过Damage On Jump Damage On Landing设置起跳和降落时是否造成伤害。典型技能:刺杀学派——金蝉脱壳
  • MultiStrike: 多目标打击并传送自身的技能,当MaxAttacks为1时只打击一个目标,如刺杀学派技能——瞬影突袭TargetRadius为指定第一个目标的施法距离,AreaRadius为后续目标的衔接距离(就是从一个目标跳到下一个目标的最大距离),并可以通过NextAttackChanceNextAttackChanceDivider定义每次跳到下一目标的概率和衰减倍率。典型技能:战争学派——闪电突袭
  • Projectile: 投掷型技能,投掷一个或多个飞行物的技能模板。这个技能的适用范围很广,通过设置MovingObjectCaster还可以把自己投出去,比如变形学派技能——展翅高飞获得的技能飞行。设置MovingObject为其他物品ID就可以扔其他模型,比如这一系列手雷技能的实现:

    典型技能:烈火学派——火球术
    通过设置AmountOfTargets属性定义投掷物数量,典型技能:水占学派——寒冰碎片
    通过设置ForkLevels设置最大分裂数量,典型技能:烈火学派——燎原之焰、水占学派——治疗仪式、大气学派——闪电枷锁。
  • ProjectileStrke: 从天而降的投掷物打击。ProjectileCount设置投掷数量,可以是1,如大气学派——天降霹雳,可以多个如神射技艺——箭矢风暴。(注:飘渺风暴和雷霆风暴为多回合多次打击技能,定义在Strom中,但是每次打击都调用了定义在ProjectileStrke中的子技能。详情见Strom相关描述。)可以通过属性Angle Height设定初始角度和高度,Angle是0时即为垂直下落。
  • Quake: 以释放者为中心,除伤害外还可伴随地表生成效果,附带屏幕震动效果。典型技能:地卜学派——地震术
  • Rain: 范围生成地表的技能模板。典型技能:水占学派——降雨术
  • Rush:直线冲锋技能模板,施法者沿直线冲撞并附带效果,需要可通过路径。典型技能:战争学派——野蛮冲撞
  • Shout: 以施法者为中心,自我增益或具有范围效果的技能。典型技能:水占学派——破冰,烈火学派——超新星,种族技能——装死
  • SkillSet:可修改创建角色界面的预设技能组。
  • Storm:风暴技能,特点是范围性多回合、多打击技能,LifeTime设置持续回合,MinHitsPerTurn MaxHitsPerTurn 定义每回合打击次数下限和上限,ProjectileSkills设定每回合释放的投掷物技能。典型技能:大气学派——雷霆风暴
  • Summon: 创造一个或多个物体或角色的技能。典型技能:召唤学派——召唤魔妖
  • Target:指向单一目标或者(范围)区域的技能,且没有投射物。典型技能:死灵学派——恶鬼缠身、苦痛枷锁
  • Teleportation:传送指定目标或者范围目标(如地表等)的技能。典型技能:大气学派——传送术
  • Tornado:原本的路径为施法者到释放地点的直线,但是会被一些随机点“拖离”原本路线,变成折线。并在路径上生成地表(地表类型设置为None时为清除地表)或附加其他效果。典型技能:大气学派——飓风术
  • Wall:指定路径生成地表和一个或一系列指定物品的技能。典型技能:大地学派——毒藤之墙
  • Zone:矩形或圆形区域性范围效果,通常Shape属性为Square,即矩形。典型技能:烈火学派——激光射线

上边列举了神界原罪2中的技能类型和部分特殊的属性,其中更加通用的属性会在后边创建/修改技能时介绍。

如何编辑或新建增益状态

接下来介绍Stats类:

其中武器、护甲、盾牌、角色等信息包含在对应选项中,这里我们重点介绍最常用的Potion类。其字面翻译为“药水”类,为喝药水会获得的效果,但其实不仅仅限于喝药水获得的BUFF,还包括但不限于释放技能、穿戴物品等获得的增益或减益效果。在该类中你可以看到各种各样的属性增益(减益),例如力量、敏捷、智慧、单手、双手、各个技能学派、盗窃、说服、各元素抗性、先攻、移动、生命值、命中率、闪避率、最大行动点、每回合回复行动点、行动点消耗减少、生命偷取等等。

Stats下边是StatusData类,在其中定义了各种各样的状态效果,如致盲类Status_BLIND、击倒类Status_KNOCKED_DOWN。在对应的类里会有一些共同效果如每回合获得治疗等。在这里定义的状态就是在角色头像右侧或详细信息页中可以看到的状态,而上文提到的Stats中的Potion类是具体获得的属性增益(减益)。比如击倒类中的KNOCKED_DOWN状态定义了状态描述、状态名称等宏观层面的描述,而StatsId设置为Stats_KnockedDown。这里定义在potion中的Stats_KnockedDown才是真正对属性有增益减益的效果。

TreasureTable中定义了战利品相关的类,后续我们把技能书或者物品添加到游戏中时会用到。

好,在简单介绍了一些框架结构以后,我们可以着手于制作第一个技能了。或许你注意到了,我用来示例的Mod名称是EnhancedShieldWarrior,即强化盾战Mod,在这个Mod中我打算制作一系列技能来增强盾战这一职业,让他也能Carry起来。我们先从简单的技能开始。首先,在我的设想中,首先应该对嘲讽这个技能进行增强。正常情况下,敌人被嘲讽应该很生气,因此我们要对敌人给一个“激怒”状态,让他100%暴击,再对自己设置高额反伤,来对敌人物理输出职业进行针对。那么要实现这一目的,我们要给释放嘲讽的角色给一个BUFF来获得额外的“报复”技能点数,并且为了防止被敌人一下打死,还要获得额外的护甲和魔甲。

首先我们在项目中新建一个Potion项(也可以复制现有的):

下面对部分我了解的属性进行简单的说明(似乎没找到坚毅???):

  • Parent : 指定要继承的对象,和编程中的概念类似,指定后会继承父辈的所有未更改的属性。
  • Level、MinLevel、MaxLevel:BUFF等级。保留为空或-1即可跟随角色等级。
  • StackId:堆叠ID,有同样StackId的增益只能同时存在一个,会根据Priority优先级确定谁被保留,谁被替代。
  • AuraRadius: 光环半径,设置后为范围增益。
  • AuraSelf/AuraAllies/AuraNeutrals/AuraEnemies/AuraItems: 光环对应目标类型的BUFF
  • AuraFX:光环特效。
  • Weight、Value :重量、价值
  • Strength、Finesse、Intelligence、Constitution、Memory、Wits :力、敏、智力、体质、记忆、智慧
  • SingleHanded、TwoHanded、Ranged、DualWielding:单手、双手、远程、双持
  • PhysicalArmorMastery、MagicArmorMastery:不明白,字面意思是护甲掌握程度
  • VitalityMastery: 同上,生命值掌握程度,应该是废弃的属性。
  • PainReflection: 报复等级
  • WarriorLore、RangerLore、RogueLore:战争学派、神射、刺杀学派等级
  • Sourcery:秘源法术,不知道什么效果,可能也是废案。
  • Telekinesis:念力
  • FireSpecialist、WaterSpecialist、AirSpecialist、EarthSpecialist:火、水、大气、地卜学派等级
  • Necromancy、Polymorph、Summoning:死灵、变形、召唤学派等级
  • Sneaking、Thievery、Loremaster、Barter、Persuasion、Luck:潜行、偷窃、博学、交易、说服、幸运
  • Repair、Leadership::锻造(疑似废案)、领袖
  • FireResistance、EarthResistance、WaterResistance、AirResistance:火、地、水、电抗性
  • PoisonResistance、PiercingResistance、PhysicalResistance:毒、穿刺、物理抗性
  • Sight、Hearing:视野、听觉范围
  • Initiative:先攻
  • Movement、MovementSpeedBoost:移动、移动倍率
  • Vitality、VitalityBoost、VitalityPercentage:恢复生命值、增加生命值数值(加上限)、恢复生命值百分比(不加上限)
  • ChanceToHitBoost、AccuracyBoost、DodgeBoost:命中率、准确度、闪避
  • DamageBoost、RangeBoost:伤害增加、攻击范围
  • APCostBoost、SPCostBoost:行动点消耗、秘源点消耗(可为负)
  • APMaximum、APStart、APRecovery:最大行动点、开始行动点、行动点恢复
  • CriticalChance: 暴击率
  • Gain: 不知道,没测试出来。
  • Armor、ArmorBoost:护甲提升
  • MagicArmor、MagicArmorBoost: 魔甲提升
  • Duration: 持续回合
  • UseAPCost:行动点花费
  • Reflection:固定反弹伤害的百分比,示例:20::Air:melee,意为反弹受到近战伤害的20%为大气类型给攻击者。
  • LifeSteal: 生命偷取
  • BloodSurfaceType: 流血产生表面类型
  • MaxSummons:最大召唤数
  • StatusEffect:特效
  • StatusIcon: 图标
  • SavingThrow:豁免,被什么抵抗,一般在StatusData中定义而不是在此处
  • Priority: 优先级
  • Comment: 备注

创建增益效果并应用到技能

前文提到,本Mod对于嘲讽技能的修改需要给释放嘲讽的角色给一个BUFF来获得额外的“报复”技能点数,并且为了防止被敌人一下打死,还要获得额外的护甲和魔甲。这个buff要对自身的防御属性进行增益,因此取名“坚守状态”。对于高额反伤的实现,这里有两种方法:

  1. 临时增加报复属性,即对PainReflection赋值。
  2. 反弹百分比伤害,相关属性为Reflection

这两种方法都可以实现目的,但是实现的细节有所不同,第一种方法反弹的伤害百分比为 报复等级*每级反弹伤害百分比,并且反弹伤害与受到伤害类型一致。每级反弹伤害百分比可在数据编辑器中Shared - ExtraData - CombatAbilityReflectionBonus 找到,右击并override in即可修改。

我修改的数值是7.5%,游戏中四舍五入了。

第二种方法更加灵活些,既可以指定反弹造成的伤害类型,亦可以针对某种类型的伤害进行反弹。具体写法为百分比::造成伤害类型:有效伤害类型,如20::Air:melee,意为反弹受到近战伤害的20%为大气类型给攻击者。另外附上伤害类型(原帖):

"BaseLevelDamage"(等级化后的基础伤害)
"AverageLevelDamge"(等级化后的平均伤害)
"MonsterWeaponDamage"(怪物的武器伤害)
"SourceMaximumVitality"(伤害来源的最大生命值)
"SourceMaximumPhysicalArmor"(伤害来源的最大物理护甲)
"SourceMaximumMagicArmor"(伤害来源的最大魔法护甲)
"SourceCurrentVitality"(伤害来源的当前生命值)
"SourceCurrentPhysicalArmor"(伤害来源的当前物理护甲)
"SourceCurrentMagicArmor"(伤害来源的当前魔法护甲)
"SourceShieldPhysicalArmor"(伤害来源的盾牌物理护甲)
"TargetMaximumVitality"(目标最大生命值)
"TargetMaximumPhysicalArmor"(目标最大物理护甲)
"TargetMaximumMagicArmor"(目标最大魔法护甲)
"TargetCurrentVitality"(目标当前生命值)
"TargetCurrentPhysicalArmor"(目标当前物理护甲)
"TargetCurrentMagicArmor"(目标当前魔法护甲)

因此,在Potion下新建一个名为Stats_StandingFast的项,并设置相应的数据:

"Stats_StandingFast"
"Reflection" "75::Physical"
"ArmorBoost" "50"
"MagicArmorBoost" "50"
"Duration" "3"

有了产生实际效果的状态,我们还需要创建一个“把手”来调用它,即StatusData类,点击加号,新建一个StatusCONSUME类型


修改一下对应属性:

"STANDINGFAST"
"DisplayName" "|STANDING FAST|"
"Description" "|Character is standing fast.|"
"Icon" "Skill_Warrior_ThickOfTheFight"
"StatusEffect" "RS3_FX_GP_Status_ThickOfTheFight_Hand_01:Dummy_L_HandFX,Dummy_R_HandFX"
"StatsId" "Stats_StandingFast"

其中需要特意说明的是StatusEffect这一项,它代表了附加状态时的特效,这段语句的意思是在左手和右手上绑定展示名为RS3_FX_GP_Status_ThickOfTheFight_Hand_01的特效。特效名可以在特效编辑器中查看,关于特效编辑器会在后边的教程中再说明。

接下来修改自带的嘲讽技能,并为它附上上述效果。在Shout技能下找到Taunt技能,并覆盖到我们的项目中:

其他不需要更改,只需要修改SkillProterties属性:TAUNTED,100,1;ENRAGED,100,1;SELF:STANDINGFAST,100,3

这段语句由三条组成,每一条代表一个效果,每条结束后用英文分号结束。每条也有三部分,分别是附加的状态,施加成功率,持续的回合。这里的附加的状态需要在StatusData中定义,所以我们写的语句中是STANDINGFAST而不是Stats_StandingFast。第三条中SELF:指定为施法者获得状态。

好现在我们完成技能修改/添加的基本流程,可以尝试在游戏中看看效果了。点击左上角File - Load Level来加载一个场景,我们这选欢乐堡海滩好了。搜索欢乐堡的英文ID,并选择打开。


紧接着等待加载完成后,点击工具栏的最左边按钮切换游戏模式

然后按F11召唤出控制台,

右侧是可用的命令列表,在下方输入指令并按回车生效。这里输入levelup 2升两级点2点战争学派(嘲讽需要2点战争),并获取嘲讽技能addSkill Shout_Taunt 。在控制台可以使用TAB来进行命令补全。另外角色死亡时,鼠标悬停在角色上使用快捷键CTRL+SHITFT+R快速复活。

鼠标悬停在技能图标上,可以看到技能描述已经变了:


释放技能后,状态栏也有对应加成,现在要做的就是对显示的字符串进行处理。

本地化管理工具

接下来打开字符串管理工具:

在里边可以看到我们Mod下的字符串:

依次填写对应字符串后保存即可:


另外由于Potion下的Displayname没有自动创建,我们这里手动创建一个项,点击File-New:Potion_Stats_StandingFast


或者在Stats编辑器中点击FILE-Export Translated String Keys来重新生成Translated String Keys。
再来查看效果:


在本教程中我们展示了官方给出的工具的简单使用方法,介绍的常用的工具编辑器。对技能类型做了简单的说明,这有助于你理解神界原罪2的技能系统。并对Stats类中的Potion的属性做了说明,这可以让你定义出很多很多的增益或减益效果。之后又介绍了如何编辑/新建技能,并附加增益/减益状态效果。还简单介绍了控制台的使用,便于调试工作。再最后简单介绍了本地化工具,这有助于我们正确显示字符串。

Eysent
【神界原罪2】超详细Mod实例教程 03 : 故事编辑器以及Osiris脚本
【神界原罪2】超详细Mod实例教程 03 : 故事编辑器以及Osiris脚本
【神界原罪2】修复官方Mod工具The Divinity Engine 2 数据编辑器部分技能伤害来源失效BUG
【神界原罪2】修复官方Mod工具The Divinity Engine 2 数据编辑器部分技能伤害来源失效BUG
【神界原罪2】超详细MOD实例教程 02:技能常用属性详细讲解及示例
【神界原罪2】超详细MOD实例教程 02:技能常用属性详细讲解及示例
【Payday2】收获日2 Mod制作教程: CF连杀图标和连杀语音Mod
【Payday2】收获日2 Mod制作教程: CF连杀图标和连杀语音Mod
【骑马与砍杀2:霸主】 dnSpy修改游戏数据,改变俘虏的招募速度
【骑马与砍杀2:霸主】 dnSpy修改游戏数据,改变俘虏的招募速度
【维多利亚3】游戏数据修改,模组教程——修改单一建筑最大建筑力
【维多利亚3】游戏数据修改,模组教程——修改单一建筑最大建筑力

1

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注