混乱与此

Reset Hard正在积极开发中。 更多详细信息将在整个9月发布。 有兴趣了解更多有关Reset Hard的信息吗? 是否想跟进本文中的某些内容? 想要在演示可用时得到通知吗? 访问该 网站 ,或直接在 Discord 上与我聊天

自从《重置重装》开始以来,我就很开放,我对开发一款可修改的游戏感兴趣,部分是为了引起人们对游戏的兴趣,但这还仅仅是因为游戏的设计非常适合社区扩展。

Reset Hard的改装方法来自四个设计原则:

  • 使工具易于使用 :尽可能选择开放源代码或内部开发的工具。 工具应免费提供,并且可以跨平台工作。
  • 优先处理低级API :始终可以在灵活的低级API之上构建高级抽象。 相反的说法是不正确的。 我宁愿在可能的情况下提供低级工具,即使API更加繁琐或复杂。
  • 透明 :修改者应该能够检查游戏代码的现有级别和部分,以确定“重设硬体”的工作方式。 Reset Hard不是一款开放源代码游戏,但我不会对它的编程方式或内部外观过于co惜。
  • 吃自己的狗食 :我提供的用于改装的工具与我在内部用于制作游戏的工具相同。 用于用户级别,实体和子画面的API将与我在构建级别,实体和子画面时使用的API相同。

在这篇文章的过程中,我将探讨这些口头禅影响游戏架构的一些方式。

Reset Hard是使用Web技术编写的,然后打包为桌面使用。 Javascript和Electron都不常用于商业游戏。 选择这些技术对我不利,包括性能,内存管理和帧定时。

但是,对于像《重制重制》这样的游戏,收益大于负面影响。 就改装而言,利用Electron使我更容易公开内部API,并允许玩家覆盖接口和导入。

Javascript是一种极为易用,灵活的语言,它将减少新改装者的进入门槛。 它带有良好的调试工具,可以更轻松地原型设计和使用新思想。 它还具有一些很有前途的沙箱功能,我仍在研究中,但可能使玩家无需进行大量额外的安全性验证即可安装mod。

Reset Hard的客户端使用HTML,Javascript和CSS编写。 在可能的情况下,接口在语义上进行布局。 这应该使修改者可以通过CSS轻松自定义基本布局。 也可以通过直接编辑HTML来附加其他脚本。

Reset Hard的实际游戏引擎通过记录的协议与前端进行通信。 我将支持通过websocket进行通信,即使将主要客户端集成在一起以减少延迟。

这意味着,除了直接修改客户端之外,修改器还能够创建完全独立的客户端和可视化文件。 Websocket协议还将使修改者能够远程编写玩家输入的脚本,以构建AI或助手。

该游戏已经可以在无头模式下运行,因此我正在考虑将其作为最终版本中的一个选项公开,以使其更易于托管远程服务器和构建有趣的远程/脚本实验。

Reset Hard使用NodeJS作为其运行时,并且本着这种精神,代码是高度模块化的。 Modders将能够导入公共接口以使用和扩展自己的代码。

我将提供一个加载所有内部接口的入口点。

  var ENTITIES = { 
玩家:require('实体/玩家')
开关:require('entities / switch'),
}; module.exports = ENTITIES;

当我将实体和实用程序列表加载到主游戏中时,我会将活动的mod合并到该导入列表的顶部。

我仍在整理有关mod捆绑包如何工作的细节,但是基本上,它将归结为提供一个配置文件,该文件使用与内部开发相同的接口。

  var myMod = { 
实体:{
开关:require('./ my-switch-override.js'),
customEntityType:require('./ my-custom-entity-type.js')
},级别:{
简介:require('../ overrided-intro-level / main.js'),
}
}; module.exports = myMod;

摆脱技术细节,所有这些意味着修改器将能够覆盖内部模块和实体,并且这些更改将在整个游戏中普遍应用。

为了保持我的第一个改装口头禅,我使用了一个开放源代码级别的编辑器Tiled在“重置难关”中构建难题和级别。 Tiled可在Mac,Linux和Windows上免费使用。

如果您要以编程方式构建或修改关卡,则Tiled的导出格式已备有JSON文档。 这意味着,除了可以使用我使用的原始工具之外,修改器还可以构建自己的工具。

使用Tiled的好处是它的导出格式是无损的。 这意味着Reset Hard的任何打包级别也可以直接在Tiled中打开。 希望这将使修改变得更容易实现,因为如果您看到我在一个级别上做一些很酷的事情,则可以打开它并查看我的实现。

在Tiled之外,可以使用自定义脚本来包装级别中的命名实体,从而允许修改者指定每个级别的行为。 Reset Hard中的一个级别实际上只是一个包含映射文件,入口点和脚本的目录。

《 Reset Hard》中的关卡格式仍在不断发展,因此,我不会过多地介绍所有功能的工作原理。 但足以说,我为当前系统的灵活性感到非常自豪。

当然,还有一些我尚未解决的问题。

  • 分辨率/帧率独立的动画和精灵 :我仍在尝试找出最好的方法是允许修改者添加其他动画,或完全覆盖美术样式和分辨率。
  • 翻译支持 :实际上,我在构建可以轻松翻译的软件方面拥有丰富的经验,因此我对此并不担心。 但是,在这里我还有一些事情要考虑。
  • 沙箱 :我非常相信沙箱软件可以保护人们的计算机。 这里有一些针对Javascript的有前途的选项,但是在我信任其中的任何一个之前,我需要做更多的研究和测试。 任意数量的沙箱都是赢家,但显然更多更好。

Mod支持将是开发中正在进行的任务。 我使用Reset Hard的首要任务是完成游戏-这就是为什么我还没有花时间担心翻译支持或沙箱之类的原因。 这些主题都没有让我担心,但是可能要过一会儿我才有时间或资源来解决它们。

我一直在谈论工具,但是工具只是构建可修改游戏的一半。 另一半正在培育一个社区。

这可以有两个非常有希望的方向。 我一直在与一些业内人士讨论选项,我对Mod.io作为将Mod加载集成到客户端本身的一种方式的潜力非常乐观。 显然,这将不支持某些更具侵入性的mod,例如完全客户端替换,但这将是促进和分发自定义关卡包的有趣方式。

但是,与诸如Mod.io之类的服务集成还有其他问题。 主要是,“这种整合应该走多远?”

这个问题有很多潜在的答案。

  • 游戏允许您浏览策划的关卡包。
  • 该游戏可让您浏览完整的精选Mod。
  • 游戏允许您浏览未指定的mod。
  • 该游戏允许您加载和管理mod,但不能让您浏览它们。

这些选择实际上只是在摸索。

弄清楚mod集成是如何工作的,弄清更广泛的社区是否甚至想要它,弄清楚主游戏的安全性和质量风险将是一项相当大的工作。 随着我逐渐对此做出决策,我将开始与更多开发人员和社区成员接触,以获取他们的反馈。

通过集成的mod安装和浏览可以使伟大的事情变成现实。 我主要关心的是确保我不会搞砸它,也不会错过构建真正令人惊叹的东西。

修改是延长游戏寿命的好方法,对于新玩家来说,这是一个巨大的价值主张。 这是增强社区对游戏的兴趣的好方法,也是利用社区作为其他内容来源的好方法。 但是,尽管这些都是我想利用的良好副作用,但它们并不是我要做的全部要点。

修改的目的是让社区获得对游戏的主人翁感。 它使用户能够解决个人问题和疑虑。 通过向消费者提供工具来表达自己的想法,从而使消费者成为设计师,而这些意图却超出了设计师的初衷。

我敢肯定,将来会有一些我不想看的游戏。 我分享的经验是如此个人化或如此直接,以至于我不希望看到它的翻译或更改。 在这种情况下,我可能会要求社区将他们的东西带到其他我不需要看到的地方。

但是,即使我从不最终记录所有内容,创建预定渠道,构建专用工具,甚至根本不与该社区进行交互,至少也要避免不必要地加重或限制想要与我打交道的人IP。 坦白说,那是因为改装不是我的事。

我不认为我应该对人们如何消费或与我建造的事物进行互动拥有最终决定权。 因此,在使用Reset Hard时,我将这种态度发挥到了极致–尽可能开放我的内部实现,并构建一个引擎,使玩家可以扩展和替换几乎所有东西。

我相信,健康的社区几乎总会对其建立的IP拥有某种文化所有权。 使用Reset Hard,我只是使邀请更加明确。