制作模组既有趣又有意义,还能帮助社区里的其他成员。本指南旨在通过分解各个组成部分,并以尽可能简单易懂的方式进行解释,来指导大家如何制作一个简单的模组。 小更新 在制作本指南和模组时,我不小心使用了基础游戏中正在使用的ID【buildplanet4】。我已经更新了我的模组来修复这个问题,但不会更新本指南中的示例图片。这只是个小问题,而且你本来就应该使用独特的ID,所以请记住这一点。 你需要准备什么 首先,你需要用于编辑代码的软件。别担心,这其实比听起来要容易。最简单的程序,也是我在本指南中一直使用并将继续使用的程序是记事本++,这是一款免费使用的程序,可有效编辑C++以及许多其他文件类型。只要能保持文件结构,使用什么程序其实并不重要。

开始制作 当你准备好所有工具后,就可以开始了。首先需要找到几个文件夹和文件: 游戏核心目录。通常位于Steam/SteamApps/common文件夹中,但具体位置可能因安装设置而异。你也可以在Steam库中右键点击游戏,依次选择属性、本地文件、浏览本地文件来找到它。 游戏的模组文件夹。该文件夹位于核心目录旁边,在测试模组时至关重要。 Steam的创意工坊文件夹。路径为Steam/SteamApps/workshop/content/450700。这里是Steam存储创意工坊模组的地方,450700是【The Spatials: Galactology】的标识编号,该编号可能会有所不同。 你想要用来制作模组的位置。你可以在任何地方创建模组,只需准备好为测试和上传而移动它。在游戏的模组文件夹中创建模组可以方便地测试各种大小的更改,但过去我在上传模组时遇到过问题。对于上传阶段,建议将模组移动到合适的位置,或者直接在可行的位置创建(任何通常不需要特殊权限即可修改的地方,例如桌面,但确保将其放在单独的文件夹中!)。 找到所有这些后,你就可以开始了。有两种方法可以做到这一点,要么从头开始创建每个文件,要么从已完成的模组中“借鉴”文件。如果你想选择两者中的后者,欢迎使用我的示例授权模组,这也是我将在整个过程中演示的模组类型。否则,你需要创建三个文本文件: 一个名为main的文件 一个名为manifest的文件 还有一个文件,文件名可以是你想要的模组名称,需合并为一个单词(例如“New Mod”应改为“NewMod”)。如果要修改我的模组,请将newgoal.lua的名称更改为你的模组名称。创建完成后,将它们的扩展名更改为.lua(在Windows系统中,你可以在文件资源管理器中重命名文件,将.txt替换为.lua)。尽管可能会出现警告,但这样做是安全的。在下一部分中,将提供所有使用到的代码行的示例图片和说明,这样你就可以根据需要对每一行进行操作,或者在从头开始构建时直接添加它们。 清单和主文件 现在,你应该有一个合适的.lua文件编辑程序和三个.lua文件:manifest、main以及你的模组名称。首先,让我们来分解manifest.lua文件的各个组成部分,因为它是最简单的。

正如顶部的评论文本正确指出的,所有模组都必须包含此文件,并且采用这种简单结构。忽略“Return”,它只是用于将结构分解为各个部分的元素。修改它会破坏整个结构。其余内容相当容易理解:“name”是模组名称所在的位置(即模组选择界面中显示的名称,仅此而已),“description”是模组描述的位置(同样仅在游戏内显示),而如前所述,API-Version不应随意修改,更改它可能会导致模组无法正常工作。 接下来需要修改的文件是main.lua文件。这里只有两处内容需要修改,同时还有一些供希望深入了解《星际空间:银河学》模组制作原理的玩家参考的信息,但对于本教程而言,大部分信息并非必需。需要注意的是,以两个连字符开头的文本(图片中显示为绿色)并非必需内容,它们只是模组创作者或游戏开发者留下的备注,在最终的模组中可以包含也可以不包含。

幸运的是,这个文件并不像乍一看那么复杂,因为其中一半内容是开发者留下的说明、提示之类的东西。对我们来说,唯一需要了解的有用部分是第二行: -- 所有其他文件都必须以某种方式在你的代码中被引用。 这就是main.lua文件存在的原因。它的作用是告诉游戏“这些都是你需要关注的文件,去查看它们并按指示执行”。需要注意的第一行是 include_lua(mod, "newgoal.lua") 这行代码的作用是让main.lua文件告诉游戏需要加载哪些文件。理论上(我自己从未使用过,但它应该是这样工作的),如果你需要多个文件来分离模组的所有代码,这里就会有多个这样的行。不过现在,我们只需要这一行。在这里,你需要将“newgoal.lua”(保留引号,只需更改引号内的内容)替换为你的模组的简称文件。在这个例子中,“newgoal.lua”指的是我制作的新目标模组以及随附的newgoal.lua文件。下一行需要编辑的是 mod.newgoal_setup(rules) 在我们编辑最后一个文件之前,这部分内容很难修改,所以请保持这个文件打开并记住这部分内容,下一部分将会涉及。到目前为止一切顺利,对吧? 你的模组主文件 我们添加的最后一个需要编辑的文件将是带有你的模组名称的文件。为了本教程的目的以及我的方便,从现在开始我将把这个文件称为newgoal。lua,因为这是我的模组所带文件的名称。让我们开始吧。

好的,首先,前12行要么是开发者笔记,要么是不能修改的内容,为了我们的目的,暂时最好忽略它们。我们需要注意的第一行是整个文件中最复杂的一行,因为它涉及到两个不同的文件之间的关联,如果出错的话,整个模组都会出问题。天啊。 mod.newgoal_setup = function (rules) 现在这行相当简单,mod.newgoal_setup需要是一个唯一的行,这意味着基础游戏或任何其他模组都不能有相同的行,否则你周围的星球可能会“爆炸”。我建议将该行中的“newgoal”替换为你的模组的简化名称,因为其他模组不太可能有完全相同的名称。“function = (rules)”部分用于告知游戏如何处理后续代码,但具体含义还需要我进一步研究才能向你说明,因此目前最好暂时忽略这部分内容。 接下来是一些简单的内容,以下是包含其含义的表格: 行 | 用途 ---|--- id = "buildplanet4" | 将“buildplanet4”(除非另有说明,否则始终保留引号)替换为你的目标的唯一标识符。这可以是任何其他内容不会使用的名称,因为玩家永远不会看到它。 icon = "ui_icon_15px_aterrizaje.png" | 将引号中的内容替换为某种图片。我找到的游戏中使用的最佳图标列表是,现在为游戏中的某个目标寻找图标,在《星际空间:银河学》/core/goals/main.lua文件中找到该目标并从中获取图标。我打算尝试找到添加自定义图标的方法,之后会把相关内容放在其他地方,但目前这超出了我的知识范围。title = _L("goal_buildplanet4_title", "在一些星球上建造2个招募中心"),"goal_buildplanet4_title"是另一个唯一标识符,可以随意设置(我只是将其改为目标id加上_title后缀)。第二组引号中的内容是玩家看到的标题,也可以根据需要自行设置。description = _L("goal_buildplanet4_desc", "在2颗行星的地表建造2个招募中心") 第一组引号内是唯一标识,与上次相同,第二组引号内是玩家看到的描述。接下来的几行内容稍复杂。在图片中,第20行是告知游戏该目标完成所需条件的必要代码行。可以修改此行来为目标添加多个完成条件,但本节不对此进行介绍。若想了解如何操作,建议参考游戏内置的目标设置。下一行是你可以根据自己偏好进行修改的内容。bridge_hash(“build-object-model-name”)+ bridge_hash(“recruitment-center-1”) 在这行代码中,“bridge_hash”指游戏中发生的某种情况,可能是玩家的直接操作,也可能是其他情况。代码中该术语的数量取决于需要完成的操作类型。例如,此目标要求玩家建造一个物体,这由第一个“bridge_hash”决定,而需要建造的物体(“recruitment-center-1”)由第二个“bridge_hash”决定。并非所有目标都是如此,比如游戏自带的“清洁100块脏瓷砖”目标,只需要一个“bridge_hash”来表明任务是清洁即可。要准确找到你想要的内容,你需要在core/goals/main.lua文件中或游戏的其他部分进行一些探索。 至于橙色数字(至少在图片中是橙色的),它们代表完成某件事所需的数量。第一个数字始终为0,一直如此,我还没发现它在任何情况下不是0。第二个数字是你可以自行修改的,它表示完成目标需要该事件发生的次数。在这个例子中,我把它设为2,因为已经有一个要求完成1次的目标了。最后一行或许是所有内容中最简单的: reward = 60 你或许能猜到这行的意思,其中的数字代表玩家完成目标后可获得的金钱数量。你可以随意修改这个数值,既可以是游戏中公平且平衡的合理数字,也可以设为999999999999(数字中不要包含逗号),如果你想制作一个作弊模组的话。 好了,你创建的所有文件都已完成,如果你用这个模组进行游戏,它很可能会正常运行。那么其他部分是做什么用的呢? 获取终极力量的最后步骤:完成模组 要完成你的模组,你还需要做几件事。首先,最简单的操作是:找到你希望在创建游戏时选择模组时显示的游戏缩略图,将其拖入游戏文件夹,并将其重命名为“preview.png”。目前尚不清楚是否支持其他图片格式,但很可能是支持的。这样一来,如果你正确按照本指南操作,且我没有出错的话,你现在应该已经拥有一个功能完整的《星际空间:银河学》目标添加模组了!接下来,你需要将其上传到一个能让其他人愉快使用的地方:Steam创意工坊。 在继续下一步之前,如果你还没有这样做,强烈建议你先验证模组是否能正常运行。要做到这一点,请将模组文件夹移动到《星际空间:银河学》的安装目录下的mods文件夹中,启动游戏,在启用模组的情况下创建新存档,然后尽你所能达成目标。如果你的目标无法正常运行,或者根本不在列表中,请回顾本指南以确认你已完成所有应做的步骤,然后联系我(最好在评论区)或开发者以获取进一步帮助。 《星际空间:银河学》在游戏内自带一个相当简单的上传界面,有些人之前可能注意到了,而另一些人可能没有。首先,让我们确认你的模组位于可使用的位置。我发现最简单的解决方法是将模组文件夹(如果尚未在桌面)放到你的桌面上。这样可以确保你的模组在需要时能被上传界面识别。完成后,我们来进入上传界面。进入方法很简单:启动游戏,进入设置,然后点击开发者标签。你就能看到那个简洁的上传界面了。

首先,在左侧我有两个选项,这是因为我已经上传了一个模组。如果我选择那个模组,会出现类似的选项,但它会用我提供的文件夹中的内容替换创意工坊上现有的内容。除非你需要更新模组,或者有模组需要更新,否则对你来说唯一重要的选项就是【创建新模组】。这里,你能做的一切都相当易懂,所以我只需要提醒你注意【可见性】设置。我建议在你的创意工坊页面完全按照你的想法设置好之前,先设为【私密】。【标签】仅在你的模组是翻译模组时使用(而我们的目标并非如此)。【当前文件夹】是模组当前所在的位置(使用你桌面上或电脑上其他易于写入的位置)。【图片】将作为你的模组在Steam上的首个缩略图(你现在不必添加,可以稍后再做)。填写完所有这些信息后,只需点击(如果你是使用触摸屏显示器的新潮高手,也可以点击)【创建】,然后等待几分钟(实际上取决于你的网速)。完成后,前往Steam创意工坊即可。如果你的模组未显示在那里(例如你将其设为私密状态),你需要将鼠标悬停在“浏览”上,然后从下拉菜单中选择“已订阅项目”。在该页面顶部,应该有一个显示内容的选项。选择“按(在此处插入你的Steam用户名)”,而非“(你的用户名)的收藏”。现在你应该能看到已上传的模组列表。如果列表中没有你的模组,要么是你操作有误,要么需要联系开发者或我。若列表中有你的模组,你可以进入模组页面,按自己的想法调整页面设置,若尚未公开则将其设为公开,然后为自己鼓掌,因为你刚刚为《星际空间:银河学》制作了一个模组!太棒了!(此处应有烟花和号角声) 一些你需要注意的额外重要事项 正如你们中一些人在为模组寻找部分内容时可能已经注意到的那样——就像我之前说过的那样——基础游戏代码,甚至是目标相关的代码,看起来不再像这样:

还有一些类似这样的:

别担心,两者的工作原理相似,唯一真正的区别在于我的代码结构更清晰一些,并且使用了一些略有不同的引用方法(例如,我的代码以一个醒目的蓝色“end”结束,而游戏代码则通过大量的“(( ))”来告诉游戏各部分的开始和结束位置)。两种方法都可行,你可以选择自己喜欢的方式,只是如果你打算研究游戏代码,要注意这些差异。如果你在游戏代码与你自己的内容之间进行转换时需要帮助,无论是为了你自己还是其他原因,都可以随时提问。我非常乐意提供任何形式的帮助,因为如果你不得不处理这类问题,大部分责任在我——我是在制作这份指南的中途才发现这个差异的,而且除非有足够多的人感到困惑,否则我懒得回去重写大部分内容。




换一换 




















