一份详细介绍我如何为《地狱之门:东线》制作模组的指南。这份指南的诞生,是因为我虽然有些懒,但还是很乐意帮助解答官方《地狱之门:东线》Discord频道里许多重复的问题,同时我自己也需要一份详细的指南(其他指南对我来说太难懂了)。 前言 在本指南中,你将跟随我一起为征服模式制作一个德国步兵班。此外,他们还将拥有自定义的制服纹理、征服模式的支援工事、自定义头像、单位名称和科技树。 使用目录可以快速找到你需要的内容。 必要工具 在开始之前,你需要一些工具。你要做的大部分事情都相当简单直接。以下是我在本指南中用于解释内容的工具: 7zip 或 WinRar Notepad++ 你偏好的图片编辑软件 专门用于制作纹理的 Paintnet 或 Gimp 我个人使用 PhotoPea,这是一款免费的在线图片编辑服务,功能与 Photoshop 完全相同。 如果你打算制作征服模式单位,并且要制作自定义步兵人物皮肤,我强烈推荐由 Klusandr 制作的这款工具: Klusandr's Tool 如果你选择不使用此工具,那你就只能花费数小时研究游戏代码,而不是享受“史诗换装”的乐趣了。 模组结构 那么,让我们开始为我们的模组设置文件夹。我们需要进入游戏目录,通常路径为:C: Program Files (x86) Steam steamapps common Call to Arms - Gates of Hell。这是包含整个游戏的文件夹。在此文件夹及其子文件夹中,包含了原版游戏提供的所有模型、纹理、代码、机制等内容。模组的运行方式与主游戏大致相同。我强烈建议在实现内容时,始终参考其他模组或原版游戏的做法。从逻辑角度分析,尝试弄清楚各部分之间的关联。 接下来,我们开始寻找模组文件夹。找到模组文件夹后,我们将创建新的模组文件夹,并为其取一个酷炫的代号。例如,我的【苏联大修】模组使用了【SovOver】这个代号。我们将这个教程模组命名为【TutGer】(教程德军)。

在新的模组文件夹中,创建更多文件夹:资源(Resource)和本地化(Localization)。此外,我们还需创建一个mod.info文件。

在Resource文件夹中,创建以下文件夹结构: TutGer resource entity humanskin TutGer resource interface scene portrait_squad TutGer resource interface scene portrait TutGer resource set breed mp ger early(ger代表你希望编辑/创建的派系,early代表时间范围) TutGer resource set breed presets perk TutGer resource set dynamic_campaign TutGer resource set multiplayer units conquest 研究树文件夹 接下来,我们开始设置包含征服派系研究树的文本文档。前往你的游戏目录并导航至以下路径: 战争召唤 - 地狱之门:东线 > resource > gamelogic(使用7zip或winrar打开)> set > dynamic_campaign 在此处,我们将复制unit_research_ger(ger、rus、us、eng代表原版派系,因此从现在开始我们以德军为重点)以及resources_high、low、standard和very high。复制完成后,将其粘贴到: 战争召唤 - 地狱之门:东线 mods TutGer resource set dynamic_campaign

单位文件夹 现在来处理详细说明你征服军队中兵种和小队的文件。 在我们用WinRar打开的同一个gamelogic.pak文件中,导航至以下路径: set > multiplayer > units > conquest 复制settings.set、settings_inf.set、inf_ger.set和units_ger.set这几个文件,并将它们粘贴到: 《战争召唤 - 地狱之门:东线》mods TutGer resource set multiplayer units conquest

兵种文件夹 最后,我们来处理兵种文件夹。 在之前用WinRar打开的gamelogic.pak文件中,导航至以下路径: set > breed > mp > ger > early 在该目录下,你会找到所有可生成单位的独立文件。如果你进入游戏编辑器,按照上述目录浏览兵种,就能找到这些.set文件的代号。本指南的兵种部分会对此进行更详细的说明。 现在,我们复制一个士官(nco.set)、一个步枪兵(rifleman_1.set)和一个机枪手(mgun_1.set)。

文件夹设置到此结束,目前我们先不用管这些复制的文件,后续章节会对其进行介绍。 人物皮肤 在本教程中,我们将制作三款全新且独特的人物皮肤。人物皮肤主要指士兵的皮肤,包括头部、制服、腰带装备、靴子等,但不包含原版游戏库存中的物品。头盔、武器、手榴弹、铲子等均在兵种.set文件中处理。 开始制作前,最好先想好具体的制作思路。 你可以制作与原版完全独立的全新单位,这需要在任务等内容中使用你的兵种名称,并且与原版兵种相分离。或者,你可以用我们的新人类皮肤替换现有的人类皮肤,但仅限于游戏中已有的内容。你只需将新人类皮肤的名称精确命名为我们在上一章中提到的兵种组中的名称(nco.set / 当你进一步阅读后会更明白,流程大致相同)。 在本指南中,我将对德军阵营进行彻底改造。我们将用新制作的科技树和新单位覆盖征服模式中所有现有的单位。 设置步骤:前往人类皮肤文件夹:TutGer resource entity humanskin。此文件夹中存放着人类皮肤。我个人会将它们保存在子文件夹中,以防我想要设置不同的类别(例如陆军和空军,或苏联和波兰)。创建一个文件夹来建立分类,我会创建:【TutGermans】 你的人物皮肤需要3D模型才能在士兵身上显示物品。你使用的所有模型(.ply文件)都需要放在源文件夹中。为了方便起见,我们直接从原版游戏中复制整个源文件夹。之后为了优化你的模组,明智的做法是删除不使用的内容。这将减小模组的大小,因为3D模型会占用数GB的空间。 要找到德军的源文件,请导航至以下路径: 战争召唤 - 地狱之门:东线 > resource > entity > humanskin.pak > humanskin > 【germans】 > 【ger_source】 将此源文件夹复制到你的【TutGermans】文件夹中。 在这个【TutGermans】文件夹中,我会创建另一个子文件夹。在基础游戏中也会这样做,这些文件夹会将人物皮肤分开,以便它们可以使用不同的纹理。如果你仔细想想,这是相当直观的。 我想制作一个在斯大林格勒中出现的德国士兵。那么让我们快速设置一些【纹理文件夹】。

Klusandr工具 请阅读Klusandr工具中的Readme.txt文件。 成功安装Klusandr的GohMdlExpert工具并在工具中设置好游戏目录后,我们就可以开始制作我们的小人了。让我们先从步枪兵开始,这样我们就能为其他兵种打下基础。

第一个已经完成了,我们保存一下。我在【德军】文件夹里新建一个文件夹,命名为“new”或者“newskins”,用来存放你所有的新皮肤。这样你就不会把可能损坏的皮肤和完好的皮肤混在一起了。我是这么做的,你可以按自己的方式来。

我给它取了一个合理的名称,在这种情况下就是TutGer_rifleman_001.mdl。 现在,如果你查看保存该文件的文件夹,会看到其他以.mtl结尾的文件也出现了。这些.mtl文件包含模型所使用的纹理信息。例如ger_uniform.mtl包含以下内容: {material bump {diffuse "$/_hum/ger_uniform/heer/ger_unif_43_v_sumpf_2"} {bump "$/_hum/ger_uniform/ger_unif_bp"} {specular "$/_hum/ger_uniform/ger_unif_sp"} {color "230 230 230 25"} {blend none} } 简而言之: 漫反射(Diffuse)= 实际的纹理。比如制服的羊毛材质、靴子的皮革材质。它是投射在3D模型上的图像。 凹凸贴图(Bump)= 模型的视差/法线贴图。这会让平滑的3D模型看起来像是羊毛上有细小的毛发,或者能定义角色头发中的纹路。这赋予模型深度感。 高光(Specular)是使模型产生光泽的属性。较暗的高光会使物体呈现非常哑光的效果,而高光越亮,模型就越有光泽。皮革会有光泽,羊毛则不会。 那么该如何操作呢?你需要选择一个你喜欢并希望应用到模型上的纹理。查看纹理的一个简单方法是使用Klusandr's工具。

这里你可以看到纹理菜单,其中包含纹理名称。如果你向此列表添加多个纹理,就能快速切换纹理以查看差异。在弹出菜单的左侧,你会看到“德国人”类别下的所有纹理。这些纹理与你纹理文件夹中的纹理相同(Call to Arms - Gates of Hell > resource > texture > common > _hum.pak > _hum > ger_uniform 等)。在名为UV Map的杂乱图案右侧,你会看到用于每个纹理的实际漫反射、凹凸和高光贴图。这就是所谓的纹理文件夹发挥作用的地方。该列表中的每个纹理都需要自己的.mtl文件。因此,最终你会有多个文件夹,每个文件夹都有自己的ger_uniform.mtl,且每个文件都引用了不同的漫反射贴图。在我们新创建的TutGer_rifleman_001.mdl中,我们将检查所有内容是否正确。有时,Klusandr的工具会弄乱路径,而且对我来说,它总是会弄乱模型的绑定(该工具尚处于抢先体验阶段)。这里有一个可用的TutGer_rifleman_001 mdl供你与自己的进行比较。 让我们重复这个过程,再制作两个皮肤。将它们保存在你的新文件夹中,准备好后,在你的纹理文件夹中对它们进行拆分。 一旦你制作了一些人物皮肤,我们就可以继续设置兵种了。 兵种 既然我们已经为兵种制作了一些人物皮肤,就可以开始本章的内容了。我们之前已经从原版中复制了这三个兵种。我们使用原版文件是为了能直接获得正确的结构,这样你可以参考原版游戏的内容,并在此基础上进行添加或删减。 打开breed.set文件时,它看起来可能有些复杂,但实际上操作很直接。我不会详细解释每一个内容,因为大部分都很直观,不过我会大致描述它的工作原理。 原版德军步枪兵配置:{breed {behaviour soldier} {skin "ger_heer_39_rfl_1"} {portrait "ger_regular"} {icon "rifle"} {icon_priority 0} {tags "soldier"} {nationality ger} {armors {head ger_stalhelm_m39_g_var2} } {perks (include "ability.inc") ("rifle_skill_rank_2")("tier2_standard") } {veterancy (include "ability.inc") ("veterancy_lvl_0") } {inventory {item "k98" filled} {item "rifle_ger clip ammo" 60 5} {item "m24 grenade" 2}{item "m24烟雾手榴弹" 0.25 0.5} {item "m24集束手榴弹" 0.5 0.5} {item "德军绷带" 3.5 0.5} {item "德军M39式侧帽变体1(步兵)"} {item "德军工兵铲"} {手持物品 0} 皮肤=我们要使用的人物皮肤名称,需去掉末尾的.mdl扩展名。 肖像=游戏中选择兵种时,玩家屏幕左下角显示的小图片。 图标=兵种上方的图标,例如医疗兵、狙击手、工兵等的图标。 护甲=兵种的头部装备,稍后会详细说明。 技能=反坦克步枪手、机枪手或乘员等都有各自的技能。这是他们之间的区别所在。机枪技能意味着该兵种在该技能组方面更熟练。 veterancy=兵种的初始 veteran等级。想想精英部队之类的。 物品栏 = 这是特定兵种物品栏的初始设置。这是游戏中按下物品栏按钮时显示的所有内容。 物品栏项目后面的数值有点令人困惑,我现在也还没完全弄明白。可以尝试调整它们。第一个数值是基础值,第二个数值是用于随机化数量的系数。 现在我们需要根据自己的喜好编辑这个原版breed.set文件,别忘了指定你的新人皮材质。 接下来让我们把这些兵种加入征服模式。 征服模式 既然我们的兵种已经设置好了,就可以开始为征服模式创建小队了。 第一步,确保我们的兵种已在TutGer资源集的multiplayer units conquest inf_ger.set中设置好。 打开inf_ger文件。首先你会看到一些说明,请阅读并尝试理解它们。 接下来是武器的“价格”。这些是与小队价格相对应的原版数值。一个K98步枪单位成本为8,MP40为10,MG-42为35-40。这只是一个参考,你不必拘泥于此,可以根据自己的喜好将兵种定价为昂贵或便宜。这正是其保持平衡的方式。 让我们移除原版中的所有内容,除了mgun_1、nco和rifleman_1。它们可以是任意顺序。 {\"mp/ger/mid/nco\"(\"inf_tier2\" side(ger) lvl(lvl1 lvl2 lvl3 lvl4) r(1) rm(8) cost(10.0))} ; MP40冲锋枪 这是我们将用于NCO(士官)的代码行。让我们解释一下这些内容的含义。 \"mp/ger/mid/nco\"是兵种的路径。因此我们需要将其修改为:"mp ger early tutger_nco_001" "inf_tier2"是在gamelogic.pak>set>multiplayer>units>settings_inf.set中找到的技能等级 阵营是单位所属的军队。因此,如果你在征服模式中选择德国,这里就是ger;苏联则是rus等 费用是上述单位的价格。10个单位每个10费用,那么一个小队的费用就是100 ;mp40是一个小注释,用于快速查看该个体装备的武器。这纯粹是为了方便,并非必需。建议保持更新 那么让我们编辑这些行,直到我们满意为止

inf_ger.set 文件目前已完成。 现在打开 units_ger.set 文件。 此文件用于设置小队。这里会引用我们的兵种,并且我们在最后一步必须使用小队名称。所以让我们创建一个小队。 由于我们只有三个兵种,我想制作一个仅包含三种不同兵种的演示小队。因此,让我们移除所有小队(保留指挥官召唤单位,如飞机等,或者不移除,取决于你)。 ("squad_with3types_conquest" side(ger) period(mid) min_stage(1) max_stage(5) name(squad_osttruppen_con) c1(nco:1) c2(osttrupp_1:4) c3(osttrupp_2:4)) 说明: "squad_with3types_conquest" 中的 "3types" 指的是该小队中兵种的数量。如果你有4种兵种,就将其改为4;如果你有9种,就改为9。检查原版文件和设置文件,了解这些小队配置的工作原理。 时期指的是这些小队生成的时期。我认为这仅与征服模式中对抗你的AI有关。 名称是小队的名称。这对最后一步很重要,所以要起一个合理的名称。 c1(x:1) c2(x:1) c3(x:3) 这些是你小队中的角色或兵种。如果你使用“squad_with3types_conquest”,要确保只有C1、C2、C3。如果不是3种类型,请使用相应数量的Cx。冒号后的数字是每个小队中该类型兵种的数量。例如,你可以有一个10人的小队,只包含三种类型的兵种。这是合理的。当然,你必须在该行的最后部分给出正确的兵种名称。经过一番调整后,这就是我们最终确定的小队配置。

让我们继续设置我们的科技树。 让我们进入unit_research_ger.set文件。 导航至TutGer资源集的dynamic_campaign。 打开unit_research_get.set文件。这是用于排列征服模式中所有可用小队的文件,尤其是你可以研发新单位的菜单。正如我所提到的,这里会显示小队名称、定义它们的研发点数成本、单位在科技树中的位置,还可以在这里设置该单位的研发需求。 所以,我们再次根据自己的喜好来编辑它。大致保留如下内容:

如上图所示,你看到的是第一行,我快速制作了一个士官作为第一个单位。你可以选择任何你想要的作为第一个单位。我已经制作了那个士官,这是我小队的必要成员。 小队末尾的数字代表他们的位置。第一个数字是该单位向右移动的格子数。第二个数字是向下移动的行数。例如: 0 1.5 表示向右移动0个格子(左上角),向下移动1.5行。 测试 我首先喜欢在编辑器中测试兵种。在编辑器的以下路径中找到它们: breed/mp/ger/early/tutger_nco_001

正常与损坏的索具示例

通过从正常的人物皮肤中复制骨骼绑定,并将其粘贴到损坏的人物皮肤的.mdl文件中,即可解决此问题。

中间存在漫反射异常的示例。请检查人类皮肤文件夹中的ger_uniform.mtl文件是否正确。

成功!这些兵种在编辑器中可以正常使用,它们有不同的纹理,并且戴着我分配的头盔。现在来测试征服科技树。

新的小队将出现在增援购买菜单中!

正确的品种正在显示!

这些单位可以在研发菜单中进行研发! 成功!如果按照上述步骤操作,你现在应该拥有“可正常使用”的征服小队了。不过,要完善目前的内容,还有一些工作要做。目前没有预览图片,文本也是一堆混乱的代码。让我们继续处理。 让我们进行最后的收尾工作 本地化(描述文本) 为了在征服菜单中显示正确的文本,我们需要做一些繁琐的工作。我们必须将这些小队与描述文本关联起来。我们使用unit_research_ger.set中的小队名称,并为它们添加描述。 创建以下文件夹结构: TutGer localizations default interface text desc 在desc文件夹中,我们需要添加包含所需信息的.pot文件。从你的原版目录中复制以下文件: desc_breed_mp_ger.pot desc_squad_ger_dcg_late.pot desc_squad_ger.pot desc_breed_mp_ger.pot 文件定义了兵种自身(即个体)的描述。如果你已经操作到这一步,理解起来会相当直观。因此,我们只需添加所需内容,并删除不需要的内容即可。

第一行是你的兵种路径,第二行是你想要显示的名称,第三行包含翻译,不过这仅在.po文件中使用。 在此文件中命名所有兵种,然后继续处理desc_squad_ger.pot和desc_squad_ger_dcg_late.pot文件。 现在我们来处理小队名称。通常情况下,多人游戏和征服模式应使用相同的小队名称。如果需要不同,可进行区分。本指南中我们保持名称一致。

msgctxt "desc/squad/squad_stalingrad_heer(ger)" msgid "<c(A5A095)>(4)</c> 斯大林格勒步兵群" msgstr "" 第一行是你在unit_research_ger.set中给小队起的名称。不要忘记加上(ger)。第二行是你希望显示的名称,第三行包含翻译,不过这只在.po文件中使用。 给两个文件赋予相同的内容。 现在剩下的就是肖像了 肖像 所以在最后一步,我们需要制作肖像。这是你可以发挥创意的地方,同时也要考虑人们会如何看待你的模组。好的肖像很有价值。那么就按照我制作肖像的方法来制作一些吧。 启动编辑器,选择任意地图并找到你喜欢的背景。我通常喜欢使用高质量建筑的侧面。如果可能的话,将你的纹理设置调至最高,这样就能获得清晰的肖像。然后为每个想要展示的小队拍照。在这种情况下,我会只制作一张肖像图片,并将其重复用于我们创建的两个小队。
要找到原版游戏使用的“存根”模板,请前往上述路径。

在游戏中为我们的兵种拍摄一张光线良好的截图,就能快速制作出精美的肖像。你可以在这上面投入任意多的精力。 制作好图片后,我们需要用希望使用该肖像的小队名称来保存。以本例来说,我会将其命名为:squad_stalingrad_heer(ger)_00.png。保存路径为:TutGer resource interface scene portrait_squad 确保为每张肖像图片制作4个副本。因此,在本例中我们会有: squad_stalingrad_heer(ger)_00.png squad_stalingrad_heer(ger)_01.png squad_stalingrad_heer(ger)_02.png squad_stalingrad_heer(ger)_03.png 如果你没有制作4个副本并严格按照上述方式命名(_00 _01 _02 _03),那么这将无法正常工作,甚至可能导致游戏崩溃。

它看起来应该是这样的。 现在检查征服菜单,看看它们是否正常工作。如果你点击带有图片的单位后游戏崩溃,可能是因为你没有正确命名四个肖像副本中的某一个。 游戏内结果:

一个相当不错的自定义肖像小队。 纹理 即将添加 总结 以上就是为征服模组制作自定义小队的完整书面指南。 我并非专业人士,在撰写本指南前,我才刚开始《地狱之门:东线》的模组制作一个月。我只是觉得,这份指南不仅能在我将来可能忘记操作方法时帮到自己,也相信会有人能理解这份指南,并在制作该游戏模组的过程中体验到乐趣与挑战。 如果你有任何问题或意见,可以通过Discord联系我。




换一换 

































