黑客体验2的更新

在你开始之前…

这个帖子比我预期的更长。 但是,请花点时间完整阅读它,因为它包含有关游戏,退款以及不久的将来的重要信息。

我从6月开始写这篇文章,到9月结束(显然我做的一切都很慢),但是现在只能在12月发布。 在这段时间(9月至12月),发生了很多事情,我在帖子末尾附加了更新。 因此,某些日期可能是错误的。 我决定保持日期不变,并保留原始文字。


亲爱的支持者,

自上次更新以来已经有很长的时间了,许多人都在想这个项目是否仍然存在,我们是否已放弃或正在进行中。 这是一篇相当长的博客文章,其中将介绍自两年前获得部分资金以来发生的许多事情。

首先,第一件事:尽管发生了很多事情,但我们仍在进行Hacker Experience 2,就像我们自2015年1月以来所做的那样。 这些团队可能已经发生了变化(除了我之外),但是在过去的40个月中,我们一直在朝着一个梦想前进:开源的黑客模拟游戏,具有逼真的战略性游戏玩法,实时信息流和位置信息,基础功能。

我记得我们发展的第一年(和第一支团队)。 我们使用Python(然后是革命性的asyncio模块)和React作为我们虚拟桌面的前端技术创建了一个非常有趣的原型。 经过大约12个月和大约5万行代码,您知道我们做了什么? 扔掉一切。 不是因为代码不好,还是因为游戏设计存在缺陷。 我们之所以这样做,是因为基于当年的经验,我们意识到我们可以改变一些基本的机制并创造出更好的游戏。

当时,我面临着一个重要的决定。 我应该丢掉一年的工作吗? 白手起家?

我们(我和你,支持者)有一个明确的目标。 我们想要一个超越基础的模拟游戏。

我们想要一款适合所有玩家个人资料的游戏。 玩家将能够深入研究游戏机制,从而在学习过程中学习计算机科学概念。 玩家将拥有一个具有类似于公司的等级制度的氏族,可以用来共享策略并一起征服领土。

我们想要一个高度战略性的游戏。 它使玩家思考每一个动作的利弊,因为每一个动作都有其后果。 一种游戏,给予玩家多个选择以获得相同结果的选择,每个都有各自的优缺点。

我们想要一款具有令人兴奋和身临其境的故事的游戏。 玩家与环境之间具有令人信服的互动。 一个互动的故事,充满了意想不到的曲折,有趣的时刻和令人叹为观止的叙述。

我们想要一个游戏,其代码可以被其他人免费使用,以构建完全不同的游戏,而不必重新实现现有功能。 开放的游戏,可以由自己的玩家扩展。

我们想要一种自由的游戏,就像自由一样 。 出于任何目的自由运行程序。 自由学习该程序的工作原理,并根据需要进行更改。 自由改进和重新分发软件¹。

我们想要一款购买后即可真正拥有并拥有完全使用权的游戏。 一款没有双赢或阴暗机制的游戏。 您可以自己托管并与朋友一起玩的游戏。

而且-对于那里的* NIX怪胎-您可以在终端上,通过SSH或使用类似Vim的按键绑定🙂(一个项目代号为“ HEmacs”的项目)玩游戏。

那时我只是知道那个游戏不能满足这些目标。 可能还可以,它可以卖出足够的钱来赚取我的投资回报,但是那简直太棒了

我不后悔丢掉它。 不,我们不是从零开始。 我们拥有1年的经验,这对改进我们的游戏设计至关重要。 没有那年的工作,我们将无法设计我们目前拥有的机制。 这可能是在2016年1月左右。

一年后的2017年1月,您猜怎么着? 我们再次抛弃了所有东西。🙂这是我们开发过程中的另一个关键迭代。 它为我们的游戏机制带来了一些改进,并且使我们能够完全改变游戏的技术方面。 我们转换了语言,技术和基础架构。 这项技术改进虽然对用户透明,但使我们能够设计出高度可维护,可测试且易于扩展的代码。

在过去的18个月中,我们一直在进行最后的迭代-请注意,这是最后一个! 我认为我们在技术和游戏设计方面都已经成熟,因此无需扔掉它。

回首,我纳闷。 如果我还没有开始过两次,也许这款游戏已经发行了。 您已经玩过了。 在承诺的发布日期迟到两年以上,我不会感到内。 我不会在开发过程上花那么多钱,甚至可能甚至可以从中赚到一些钱。

但是,不,我不后悔。 我坚持自己的决定,因为我相信我们可以打造出真正出色的游戏-我们想要的游戏!

为什么过去几个月没有关于游戏的公告或更新?

没关系, 为什么 。 众包项目要持续这么长时间而没有公告或进度更新是完全不可原谅的。 自从项目开始以来,这种缺乏更新的情况不断发生,情况变得更加糟糕。

在整个这篇文章中,我将尝试描绘事情进展的最真实的背景,也许这可以解释原因 ,但我认为这并不能证明我几个月的时间都没有道理。 正如我所说,无论此期间发生了什么,我都认为这是没有道理的。

我知道我一定会对这种令人不安的沉默感到沮丧,失望或沮丧。 因此,除了最真诚的歉意之外,我无能为力。

如果这些道歉不附带纠正情况的计划,则这些道歉将无效。 从现在开始,许多事情发生了变化。 尽管有些技术上的问题,但我还是开始发布该项目的许多存储库中发生的所有更改的Changeset。 作为CI流程的一部分,每个接受的PR必须将其更改包括在Changeset文件中。 所有更改将反映在每次修改变更集时都会更新的静态页面上。 结果是所有项目存储库中的类似RSS的变更源。

从我们从Github迁移回Phabricator后不久,该集中化的供稿尚未部署,但可在https://changelog.hackerexperience.com上获得。 此迁移以及许多其他内部更改预计将在12月发生。

当您说“我们正在研究HE2”时,我们是谁?

如果没有钱,就不可能永远拥有有才能的人。

当我开始众筹活动时,我们的目标是筹集50,000美元,使包括我在内的10人团队能够在Web,移动,终端和游戏设计等特定领域从事该项目。

活动结束后,我们筹集了11,000美元(不含税和费用)。 尽管这笔钱相当可观,但与原始团队所需的钱相去甚远。 那时我们以5人的起步团队放弃了“ Terminal”和“ Mobile”版本,几个月后资金迅速消失,因此我们不得不裁减“ Game Design”团队。 我们现在只有4位成员。

这四个成员-我,艾伦(Allan),夏洛特(Charlotte)和罗德里戈(Rodrigo)在最初的两个版本中被一起使用了将近两年。 沿途某个地方,但不是一次全部,团队已经发生了变化。 现在是我,克里斯蒂安,佩德罗和马克斯。 这持续了18个月,付出还是付出。

现在,基本上没有钱,是我(全职),Max(兼职)和新雇用的兼职设计师Lucas。 那就是“我们”。

但是足够过去。 现在怎么样?

压力很大 被剥夺。 郁闷。 挣扎。 但是进步!

  • Helix是HE2的服务器端实现,具有约70.000行Elixir代码(如果包括文档和注释,则为90k),其中约60%是实际游戏代码,约40%是测试。
  • HEBorn是HE2的客户端实现,具有约45.000行Elm代码(如果包括文档和注释,则为55k),其中约95%是实际游戏代码,约5%是测试。
  • Infra是HE2的自动化基础结构,具有约5.00行的自动化指令(Ansible声明性YAML)和约1.500行的代码(Python,Shell Script)。

我们的前端(HEBorn)和后端(Helix)总共有115.000行代码,几乎所有代码都是在过去18个月中编写的。 考虑到其中约90%是由三位全职人员撰写的,这实际上很多。

在软件开发行业中,没有人认为总代码行数对任何目的都是一种有用的度量。 但是,我们仍然没有可玩的版本,并且您可能想知道在这段时间内我们在做什么。

您为什么没有可播放的版本? 您这段时间到底在做什么?

“可玩”是一个任意术语。 您是否知道在我们当前的代码中,大多数旧版功能已经实现? 当然,以更好的方式。 另外,它已经过全面测试!

您可以破解其他播放器,下载/上传文件,安装病毒,以金钱取钱,编辑/恢复日志,利用连接和溢出过程,创建和使用任意大的反弹(VPN)等。

这是一个有趣的事实:实现这些功能并不是最困难的部分。 离得很远。 我敢猜测,这些功能占到了到目前为止我们总工作量的30%。 您可能会想,“嗯,那几乎就是您要做的所有事情”。

是。 和不。 我们应该专注于功能-确实如此。 但是我们也应该这样做TheRightWay 。 那来自经验-如果您曾经玩过Legacy,就知道我在说什么。

我在2012-14年间用PHP编写的Legacy,没有一个测试。 它没有任何文档。 它的体系结构根本没有计划。 结果是造成了无法维持的意大利面条混乱。 这是一种幸福的经历,因为我再也不想处理这样的代码了。

还记得我说过要打造的“理想,出色”的游戏吗? 我不知道我们是否会实现这一目标,但是我确实知道只有一种方法会发生,那就是我们是否完全正确地掌握了游戏的技术基础 。 经过验证的代码可以信任。 写得很好的文档,您可以轻松理解。 但最重要的是,您可以快速可靠地扩展设计良好的体系结构。

这就是为什么我们约70%的工作都在致力于构建框架(HE2在其上运行的某种操作系统)。 让我给您提供三个示例-两个与游戏有关,一个与体系结构有关。 我会尽量不要太技术性。

示例1:进程操作系统

在整个游戏中要实现的最具挑战性的部分是流程。 在Hacker Experience 2中,过程是指需要一些时间并消耗一些资源的任何操作。 有时您确切地知道该过程何时完成(例如,下载文件时),有时却不知道(例如,利用连接或强行使用密码时)。 有时,该过程会永久运行,既可以递归运行(例如,使用Anymap或恢复日志时),也可以作为守护进程运行(例如,防火墙,密码哈希器,IDPS,跟踪器等)。

最重要的是,流程必须准确,快速地分配资源。 这比听起来要难得多。 想要一个疯狂的例子吗? 假设服务器A被服务器Z入侵,而服务器A开始下载文件f ,文件重100 MB。 A下行链路为10 Mbit, Z上行链路为5 Mbit。 由于Z的上行链路限制了下载速度,因此下载速度将为5 Mbit(625 KBps)。

现在假设下载已经进行了5秒钟,此时具有2 Mbit下行链路的随机用户U也开始在服务器Z上进行下载。 现在, Z的上行链路必须在AU之间共享。 这意味着U的下载速度为2 Mbps,而A的下载速度为3 Mbps。 但是,发生这种情况时,我们需要保存下载5.125 MB文件的前5秒钟。

现在假设A实际上是通过具有n中间跃点的跳动连接到Z 。 在那种情况下,可用的下行链路和上行链路将由跳动的最低下行链路和上行链路确定。 假设服务器L的下行链路和上行链路限制为1 Mbps。 然后, A的下载将以1 Mbps的速率通过。

现在,假设有人从L开始下载。 现在, L的限制上行链路为0.5 Mbps,因此A的过程应相应更新。 但是, U的过程也应该更新,因为现在有更多Z上行链路可供他使用。

哎哟。 要点了吗? 这很容易滚雪球。 进程分配的任何更改(进程已启动,暂停,完成或更改优先级)都可以轻易影响数百台服务器。

我可以忽略这个问题,但是对于游戏的战略机制而言,适当分配硬件资源是关键。 基于以前的经验,只有由于我们之前的重新启动才有可能,我花了至少两个月的时间来研究解决这些问题的通用流程调度程序。 它实际上是基于Linux调度程序的!

Hacker Experience 2当前的调度程序可以基于几个因素正确推断出理想的使用情况,这些因素包括进程是否暂停,是否应该使用尽可能多的资源以及是否应该使用远程资源。 它以非常快的方式执行此操作(它可以在不到1ms的时间内调度具有100(!)个进程的服务器),因此即使滚雪球情况发生在非常繁忙的服务器上,平衡所有内容最多也要花费几秒钟。

现在,到最有趣的功能。 游戏中事件可以向现有进程发送信号,就像UNIX的SIGTERMSIGKILLSIGHUP等。这使我们能够扩展任何游戏机制并将其添加到我们的进程中。 删除基础文件时是否应该删除下载过程? 只需为信号SIG_SRC_FILE_DELETED添加一个处理程序SIG_SRC_FILE_DELETED 。 如果目标连接被加密,漏洞利用过程应该花费更长的时间吗? 只需处理SIG_TGT_CONN_ENCRYPTED信号。

示例2:对未来机制的支持

我计划在未来几年内继续致力于HE2。 这是一种业余爱好,最重要的是我为自己制作的游戏。 如果成功并给我钱,那就太好了! 这意味着我可以全职工作。 如果没有,那也行! 在我的空闲时间,我仍然会努力。 感觉就像在园艺一样-这是我喜欢开发的代码库

这意味着我需要非常了解我想要游戏拥有的所有功能,即使我们谈论的是只能在5年或更长时间内添加的功能。 幸运的是(或没有),这是我自2006年以来一直梦想的游戏,因此我对自己想要的东西有一个很好的了解。 以及如何使其变得有趣(我认为我从未谈论过氏族机制以及氏族战争背后的动态。但是请相信我,它们令人叹为观止)。

在5年左右的时间内可能添加的功能之一是对硬件RAID的支持。 除了用于培训玩家之外,此功能还可以在僵尸网络控制的攻击(DDoS)期间提高服务器的弹性和可用性。 但是在此之前,BETA之后数月,但肯定在“ 1.0”发布之前,我们将添加对USB磁盘(笔驱动器)的支持。 我们如何为这些功能奠定基础 ? 这是我们所做的:

文件可能不像服务器那样属于服务器。 而且它们也不属于高清! 在内部,它们属于存储。 HD可以访问这些存储,服务器可以访问HD。 播放器打开FileExplorer时,我们将获取所有已挂载的存储并返回其文件。 从服务器1分离HD,并将其附加到服务器2? 那就是您的文件所在的位置。 两个高清共享同一个存储? 文件将在其中复制。 在某种程度上,这类似于LVM的VG或ZFS的ZPOOL。

实施存储抽象确实使我们放慢了速度,但是它带来的灵活性受到欢迎,并且对于我们计划的未来功能(包括不久的将来的某些功能,如USB磁盘)绝对必须。 如果我们没有计划进行此更改,则添加此更改将需要大量重构,以至于这样做不值得麻烦。

另一个例子。 您知道我在上面几段中谈到的流程调度程序吗? 它被设计为非常,非常容易地添加新的硬件资源。 当前资源是CPU(MHz),RAM(MB),DLK(Mbps),ULK(Mbps)和时间(s)。 是否要添加HDD / SSD(IOPS)或RAM(MHz)或GPU(MHz)? 您不必更改任何调度逻辑。 您无需更改任何现有流程。 所有需要实现的就是新硬件资源对sumsubmuldivoverflow等操作的行为方式; 以及它来自哪个硬件组件。 那是100行顶部。 而且,如果资源的行为方式与另一资源相同,则可以共享实现,这意味着增加对HDD / SSD(IOPS)的支持只需更改少于10行。 全部完成,全部准备就绪,全部美观。

示例3:基于事件的体系结构

自从我们开始进行最后的尝试以来,架构中就突出了一件事情:事件。 我们到处使用它。 有时甚至进行请求-回复通信! 这使我们能够发展出一个高度分离的模块化代码库。 在HE2的后端上工作非常容易,因为除了工作的域之外,您几乎不需要了解其他任何信息。

假设我要实现诸如键盘记录器之类的东西。 安装后,键盘记录器将向我发送服务器上创建的每个日志的游戏内邮件(我们将来可能会添加键盘记录器,但这绝对不是它们在现实生活中的工作方式)。 我要做的就是:

1.订阅LogCreatedEvent (这意味着,每次创建Log时,都会调用一个函数。它将接收事件作为参数)。
2.该事件包含日志。 从中获取server_id ,查看在任何附加存储上是否正在运行任何键盘记录程序。
2.1。 对于每个正在运行的Keylogger,发出事件KeyloggerSpottedLogEvent ,其中包含日志和Keylogger ID。
3.订阅KeyloggerSpottedLogEvent.
3.1。 在数据库中创建并插入包含日志数据的电子邮件
3.2。 Emit EmailSentEvent ,包含电子邮件和安装键盘记录器的播放器。 确保它实现了可发布协议。

可发布协议是全局处理程序(自动订阅所有事件)。 如果事件实现了Publishable协议,则将呈现其内容,然后将其推送到客户端。 现在,这是显示电子邮件的前端(HEBorn)工作。

请注意,添加此机制非常容易,并且您几乎不需要了解70kloc代码库。 您不需要知道流程如何工作,创建日志必须发生什么情况,或者事件如何发布到客户端。 您要做的只是扩展现有事件,确保每次创建日志时,都继续执行上述逻辑流程。 换句话说,要创建键盘记录器机制,您只需要了解键盘记录器本身即可!

为什么要创建KeyloggerSpottedLogEvent ? 有人会说这太过分了。 也许是。 但是,假设我们希望Keylogger不仅向用户通知已创建的日志,还向用户通知已修改的日志? 这很简单。 只需确保在发出LogRevisedEvent之后发出KeyloggerSpottedLogEvent 。 就这样。 如果您直接将Keylogger逻辑(第3步)实现为对LogCreatedEvent (第2步)的反应, LogCreatedEvent必须重复逻辑或重构代码(以及基础测试)。

测试此功能同样简单。 测试是离散的,它们有明确的开始和结束。 只要其他事件正常工作(这里为LogCreatedEventPublishableHandler ),您的实现就可以正常工作。

容易吧? 这就是为什么我们将约30%的时间用于功能。 因为我们花了大约70%的时间来设计和开发可让我们以这种方式实现和扩展代码库的体系结构。 这就是基于事件的架构的美。 扩展高度分离的代码库既轻松又愉快。 再加上一个高度并发的框架,例如Erlang / OTP或Akka,您将拥有ProgrammerZen

但是请不要因此而认为我认为HE2体系结构是完美的。 远非如此,其中存在一些缺陷,其中一些缺陷比其他缺陷更大,但是这里要指出的主要问题是,我们构建的这种体系结构为我们服务,并且根据我们的用例易于使用,理解和扩展。 没有银弹。

如果您准备好了所有这些,那么为什么游戏不能玩呢?

作为一个有抱负的企业家,我一直都在听MVP(最低可行产品)的重要性。 它如何实现更快的反馈循环等等。 这是真的! 但是创建游戏MVP并不像SaaS应用程序那么容易。

精心设计的游戏在“闭环”平衡系统中具有所有功能。 每个功能都会影响游戏的平衡,因此必须同时存在所有功能才能实现游戏的平衡版本。 此外,游戏的所有元素都直接影响了整体体验。 其中包括声音,图形,动画。

这就是为什么我不愿发布游戏的MVP(或抢先体验)版本的原因。 因为该游戏还没有完全集成所有系统,导致潜在的不平衡和不愉快的体验。 就是说,我保证会提供BETA版本,即使我认为游戏尚未完全准备就绪也可以发布。

但是,要发布BETA版本,有一个主要组件是必需的 ,但尚未准备就绪:视觉。

您是说不想发布测试版,因为它很丑?

大多。 这不仅与美学有关,而且与实际用户体验有关。

在计算机编程中,可以创建没有视图的基础功能。 这就是我们一直在做的事情:我们已经准备好了很多原始游戏玩法,但是它仅存在于测试环境(开发测试)中。

当我们在后端(服务器端)实现了一组基本功能时,我们便开始研究前端(客户端)的初始版本。 那是HEBorn出生的时候。

有趣的是,即使在前端,我们也可以专注于功能而不是视图。 超过一年的时间,我们一直在前端工作,直到达到与后端的功能均等。

最终,客户端应用程序(一个供玩家实际交互的应用程序)准备就绪。 有点。 从某种意义上说,它已经准备就绪,可以支持大多数基本功能,甚至某些非基本功能。

例如,当前的前端版本支持同时连接到多个不同的播放器。 将您的“桌面视图”更改为另一个播放器的桌面; 切换桌面应用程序上的网关/远程上下文以及Legacy中不存在的许多其他与桌面相关的功能。

但是从我们从未使它在视觉上令人愉悦的意义上说,它还没有准备好。 我们只是在关注功能。

还有一个问题,与美学无关,但与用户/游戏体验有关。 如前所述,大多数时候我们都在关注功能的实现,因为这是最基本,最基本的要求。 但是我们花了很少的时间使这些功能易于使用和直观。

换句话说,不仅我们的前端在外观上很丑陋,而且您还需要了解内部知识才能知道它是如何工作的。 这是我们针对第一个BETA版本需要修复的两件事。 我们正在努力。

您到底如何解决设计问题?

去年9月,我们开始对HEBorn(前端)进行大修,以彻底解决此设计问题并最终发布BETA。 我们正在两个方面开展工作。

首先,也是最重要的是,我们需要令人愉悦的美学。 不再像上面那样难看,黑白设计。 为此,我们需要一个设计师! 这就是卢卡斯现在加入我们团队的原因。

我们决定以基于迭代的方式开发HE2 visual。 现在,我们正在经历第一次设计迭代,该迭代是根据我们认为玩家将如何与界面交互而设计的。 发布测试版后,我们将根据玩家实际使用界面的方式收集反馈并创建第二次迭代。 最后,一旦开发了1.0(黄金)发行版所需的所有功能,我们将添加另一个迭代,现在带有播放器对所有功能的反馈。

我将向您展示第一次迭代。 还没有准备好,有一些细节需要做一些工作,但这可能有助于您有所了解。

正如我所提到的,仍有一些细节需要处理,但是我们(我和卢卡斯)越来越倾向于将以上屏幕截图用作第一次设计迭代的基础。

如果您对以上视觉效果有任何反馈,可以向我们发送电子邮件。 但是请切记,一旦开始进行BETA测试,我们将100%专注于您,用户,设计的想法以及应更改/改进的内容。

卢卡斯(Lucas)还致力于制作一系列动画,旨在“赋予游戏界面生命”。 不幸的是,您必须等待BETA版本才能看到它们。

我说过我们在两个方面开展工作。 另一个是我们前端的主要重构。

请不要告诉我您要丢弃现有的前端…

我是。 但是,不要担心,我的朋友。 它并不像听起来那样可怕。 让我解释。

正如我上面提到的,我们放弃了后端的前两个实现,直到达到了对我们的目的而言最佳的实现。

我们从未开始过前端的第二次实现,因为它从未达到过“远”的意义,因为我们从来没有创建过包含游戏所有基本功能的前端。

我们现在做。 经过大约18个月的工作,我们达到了最新版本的HEBorn。 我们一开始对玩家如何使用游戏一无所知。 我们面临一些挑战,我们没有想到的事情,以及我们认为在游戏界面上不会遇到的事情。 对于这些挑战中的每一个,我们都找到了解决方案。 其中一些经过了重新设计,始终在思考“用户将如何在游戏中使用它们”。

最难忘的挑战肯定是桌面上下文问题。 默认情况下,播放器已连接到其桌面。 她可以在桌面上打开应用程序和窗口。 但是播放器也可以从被黑的人那里切换到其他台式机。 我们如何处理窗户? 我们如何知道哪个窗口属于哪个桌面? 如何以一种直观,可用,简单的方式做到这一点?

现在,我们有了新的思维方式。 我们可以在2个月内创建18个月的时间,因为我们知道我们现在需要什么。 此外,是时候将Lucas正在与客户合作的设计进行集成了,所以这是最佳的时机。

这就是为什么我坚信从头开始将是对项目长期健康的最佳决定。 它将删除当我们不知道接口的行为方式时所创建的遗留和令人困惑的逻辑。

为什么过去几个月在Github上几乎没有活动?

好的,这是天黑了。 让我为背景画一幅画:

  • 我从事Hacker Experience 2已有近4年的时间。
  • 在2016年7月,我保证该游戏将于2016年12月发布。
  • 有数百人为观看这个游戏付费。
  • 快到2019年了,我们还没有发布它。
  • 有人认为我没有众筹资金。
  • 我现在实际上没有钱。
  • 实际上,我因比赛而欠债。
  • 我的亲戚对这场比赛的期望与您一样。

问题是,我无话可说来描述我现在承受的压力 ,希望以上几点能给我一个想法。 那就是冰山一角; 我不想太过个性,所以我省略了一些事实。

这不是“ Renato不能很好地处理压力”的问题。 我做。 我以前曾经历过几种压力大的情况,但是这是不同的。 这是不同的,因为它与我无关,而是约有成千上万支持我的人。 这与我亏钱无关,而是与其他人将钱投入该项目有关。

即使我发布了游戏,即使游戏与广告宣传的一样好,即使其他一切都完全按照计划进行,我仍然会认为我最终失败了,因为我让其他人等待了四年。

这让我恶心。 从字面上看。 我从6月开始撰写此博客文章。 从那以后,我每个月至少经历过一次普通感冒。

三月左右,我开始出现倦怠症状。 这是我的第三次倦怠,所有这三件事都发生在该项目中。 前两个每个持续一个月。 距现在开始的7个月后的9月,此功能正在逐渐淡出。

通常,我每周可以每天在Hacker Experience 2上工作10到12个小时,然后减少到6个小时,然后是4个小时,直到我完全无法玩游戏。

(在这个倦怠期间,我无法进行开发工作,但是我仍然能够增强游戏设计并梳理一些未完成或不成熟的机制。至少我取得了一些进步,所以我没有。感觉那是100%的浪费时间。)

这与缺少项目更新有关吗?

这整个情况直接影响我公开处理项目的方式。 延迟,压力,倦怠造成了无法忍受的局面,使我无法与其他人谈论该项目。 我知道这很令人困惑(主要是因为这在我的脑海中发生),但是让我尝试用其他词来解释:

如果我没有什么可显示的,即如果我不能与游戏的可玩版本共享链接,那么我不觉得我应该得到该项目的最新信息(因为我知道人们在期待发布,别无其他)。 这实际上禁止我检查我的电子邮件! 我看不到我的电子邮件,因为我没有什么可向您显示!

因此,我刚过去7个月没有打开电子邮件客户端。 这给我带来了很多麻烦,因为我错过了与项目无关的几个截止日期。 实际上,我正式从大学退学,因为在比赛未完成时我无法观看课程。 我遇到了法律麻烦,因为我错过了几个与税收相关的截止日期/发票。

然后滚雪球,因为每个月我都没有更新,这比“自上次更新以来已经过去X个月”的压力多了一个月。

最重要的是,我不断想到“每个人都因为拖延而讨厌我”。 实际上,我不知道这在多大程度上是正确的,但是当我认为每个人都在对我大喊大叫时,这使得处理公共关系几乎变得不可能。

哎哟。 不用说,这绝对是不健康的,必须在一切为时已晚之前停止。 我不能让这种情况永久影响我的健康。

游戏结束后,我已经决定切换到另一个区域。 至少有一段时间,我打算停止编程(我一直喜欢的东西)。 也许我会以系统管理员或安全工程师的身份进行尝试,但是我需要一些时间进行开发。

HE2是我喜欢的项目。 对我来说是一种激情。 我所期望的最后一件事是,即使是暂时的,这也会使我感到恐惧。 而且我仍然不确定这是否是暂时的。


您说过要谈论退款吗?

现在,让我们讨论一下钱和退款。 这是一个微妙的话题,请耐心等待。 大致是这样开始的:

  • 我在众筹活动中介绍了该项目的概要。 所有成员(尤其是我)都相信的项目。
  • 支持者您发现了该项目,对此产生了兴趣,并根据建议的功能和预期的结果捐款以支持该项目的开发。
  • Ever since the crowdfunding campaign has ended (and before it, actually), me and my team have been working full-time on the project.
  • (The teams may have changed in the meantime. But I’m the sole responsible for the crowdfunding campaign and I have never stopped working on the project).
  • Then, some time has passed. The project wasn’t delivered in time (and, as of now, hasn’t been delivered yet). Updates about the project went silent. Based on the context, many of you believed we have gave up on the project (which is a reasonable conclusion, given the lack of updates).
  • Naturally, many of you asked for a refund, since the outcome you expected (the game you paid for) hasn’t arrived into your computer and (apparently) no one was working on it anymore.

This is a very clear and truthful state of how things evolved. And I, backer, understand your feeling. It’s OK and even reasonable to be frustrated and disappointed.

Before we proceed, I have to apologize. I deeply apologize about the delay of the project. The original release date, and the many release dates I announced later on, were wrong. Very wrong.

I vastly underestimated the project complexity (which unfortunately is something very common in software development).

When I realized the sheer complexity of the project, I could have given up. I could have released a half backed, poorly designed game. But NO! This is my passion, my life’s project. This is a game YOU believe in, exactly (or better than) the one presented at the campaign/trailer. So I embraced the third option, which is to “ suck it up and go all in ”. And I went. And I am.

Back to the refund topic. During these 4 years I’ve been working on HE2 (2 and a half since the crowdfunding campaign), I always worked more-than-full-time on it. I never had the time to work as a regular employee for a big (or small) company. Meaning, I have not had any source of income for the past several years, other than the crowdfunding campaign.

I live a very simple life, possessing the bare minimum I need for work and nothing else. I have no social life, so I never get out of home. I live in a relatively inexpensive country (as far as living costs goes). And for the few hundred dollars I need to “survive”, my parents have always been there for me. They sponsor me because they, too, believe in the project. And trust me, they know I work hard on it, otherwise they wouldn’t lend me money at all.

Need money? Get a job!” — Every parent in the world.

The money we raised during the crowdfunding campaign was used, 100% of it, to fund the game development. It is long gone now. It has been for over a year. Currently, like before the campaign started, my parents are the ones keeping the project alive.

This means I have no money. I have no money at all. And I can’t print money. But I can get a paying job. And I won’t get a job until I finish the game.

What does this means for refunds?

As I said above, I understand that many of you want a refund. 没关系。 And I WILL refund you. Except it can’t be done now.

What I need you all to understand is, I still am working on the game, and plan to keep doing so for the next several months.

If, after some time, I still haven’t finished the game, here’s what I’ll do:

  • Get a regular paying job.
  • Refund ALL of you, including the ones who never asked for a refund. Will take a few months.
  • Keep working on the game on my spare time.

On the other hand, if the game is released within that time, I will:

  • Use the game revenue to refund those who still want a refund. It’s OK to ask for a refund. The released game may not be what you had in mind. May take a few months.
  • If revenue is small, I’ll get a regular paying job and work on the game on my spare time.
  • If the game generates a meaningful revenue, I’ll keep working full-time on it, bringing improvements, updates, story expansions and new features.

In all of the possible scenarios, those who ask for a refund will get their money back. And if the game is never released, you have my word that all of you will get your money back.

That said, what I need right now is time.

什么? More time?

Yes, I need more time. The game is not ready yet, but we have gone a long way from the beginning. The BETA version is not that far away.

I will not give up now. It means I will keep working on the game for the foreseeable future. It also means I cannot refund any of you right now, since I can’t get a regular paying job while working more-than-full-time on HE2.

So, I ask you, dear backer. You may not trust me after so many delays and quiet periods. But right now, I need you to trust me and give me some extra time. We are almost there.

多久?

Hard to say exactly. But I need to make up with you. The next few months I’ll work non-stop on finishing the Alpha version. Once released, you’ll have a glimpse of what we’ve been doing for all these years. And hopefully you will get hyped again for the game. I truly hope so.

My internal project planning says we are very close. As soon as I finish the internal structural changes I’ve been making on the front-end (might last one extra month), the “road to Alpha” will be a lot more clear and accurate.

As such, based on this planning and some other stuff, and also adding a little extra time because things never go as expected, the Alpha version is scheduled for early March, 2019. The BETA version, containing most of the game features presented on the campaign/trailer, early June, 2019.

I know you have already waited for so long. 我明白。 But can you hold it for a few more months? This time we are very very close, and now isn’t the time to give up.

If by June, 2019 the game isn’t released yet, I’ll get a regular paying job and start the refund process. I will, then, keep working on the game, but on my spare time. If this scenario happens, I assure you the game will be released, but it will take much longer.


就是这样了。 Before finishing, let me make one thing clear: I am a person, not a robot. I have feelings, and for the most part these feelings affect how I work.

I need you all to know that I’m giving my life for this project. Heck, I’ve worked on it for more than 10 years, and I owe everything I know to the Hacker Experience franchise. The new version, HE2, has being a part of my life “only” for the past 4 years, but it’s something I have a deep passion for, and something I’ll keep working on until it’s over . And then I will work even more on it, for software is never over.

Again, I know and understand you are frustrated with the delay. I understand that the $10, or $15, or $60 or whatever amount you backed the project with, could be better spent on another game. Probably that other game would have already arrived at your computer.

But please, do not give up on Hacker Experience 2. If you backed the project, it’s because — at least for some time — you believed in its premise as much as I do. And whatever gets in our way, whatever happens during development, we want the same outcome: that game we originally cherished for. Or something better!

And I assure you, my friend. That game will be released.


UPDATE: December/2019

As I mentioned at the start of the post, even though I finished writing it in September, I only published it in December. The reason being the same I explained above about not being able to open my email client or publish game updates.

The fact that you are reading this post right now, however, is an immensely good news. It means my burnout is over (for the most part). It means I managed to publish an update about the project, so I just dropped half of the pressure I described above. I still haven’t pressed the Publish button but I already feel a lot better.

As it turns out, I have got great news about the project as well! I managed to work full-time on the project this last month (November). The last time this happened was in February IIRC!

Remember the front-end “major refactor” I told you about? It’s going smoothly. In ~1 month of part-time work, I’ve lifted most of the hard parts that HEBorn had, except in a much cleaner and direct logic (that’s not a critique to the quality of HEBorn or its developers. Instead, it’s a statement that the rewrite contains only the needed logic and nothing else. During the development of HEBorn, we didn’t know we wouldn’t need some parts, and that added unnecessary cruft and complexity to its code.)

During my “other part-time”, I worked on a major refactor of Helix, our back-end! I mentioned in the post above that I rewrite is not needed on Helix (and that’s true), but it still had a couple of rough edges in its architecture that could be improved. I did that, but I also went a bit further.

— Technical warning!

I’ve decided to no longer use Websockets! This is a major decision, and one that may make little sense since we are developing a real-time game.

When we started working on HE2 in 2015, Websockets were the clear choice. HTTP/2 was still a draft.

We were aware of the downsides of Websockets (it’s stateful! (re)connections are expensive!), but we missed the fact that, by using Websockets, we wouldn’t be able to leverage most of the REST-based ecosystem. Most notably, we wouldn’t be able to have (cheap) DDoS protection from Cloudflare while using Websockets.

By now, HTTP/2 is solid and well supported. When coupled with SSE, an old HTML5 technology, we have almost the same benefits of Websockets (with the added weight of headers) while being able to leverage the whole HTTP/REST ecosystem!

Not only that, dropping Websockets greatly simplified our architecture, as the stateful Websocket nodes were merged with the stateless Helix nodes. (We still have stateful connections — SSE — but I’ve developed the code to handle this state in a stateless fashion). It’s confusing, but it works, keeping our infrastructure much more simplified.

Speaking of infrastructure. Also during the last month, I’ve added some cluster awareness on our back-end, meaning it now supports multiple Helix nodes running concurrently. Our intention is to have several small servers running Helix (instead of one big server), in order to increase resiliency and handle more traffic while keeping costs down.

Under sustained load, Helix * can handle 50 sync requests per second on a single ARM-based server (a credit card sized computer). sync request is one of the heaviest requests the server has to handle, for it has to gather the entire game state of a given player, yielding dozens of read queries against the databases.

* (Do note that we are talking about Helix, the application server. The database server was on an SSD-backed PC).

Having an idea of the capacity of our back-end is important because, since Hacker Experience is within the hacker genre, we do suffer constant DDoS attacks. On Legacy, simple DoS attacks are enough to bring the entire system down. Helix has achieved a level of resiliency infinitely superior to Legacy’s.

Still related to resiliency and infrastructure, I’ve added support to requests rate-limit. It means we will no longer need those annoying CAPTCHAs while making sure the application is secure against some BOTs trying to take the system down.

The rate-limit logic also applies to logged-in players, so BOTs making several requests per second, or sustained requests across several minutes, will be flagged and blocked.

Not related to front-end or back-end, I’ve decided to move away from Github, back to Phabricator. First, because we favor a 100% open-source stack whenever possible, and Github isn’t open-source. Second and most importantly, I feel I’m more organized and productive in Phabricator. I still plan to keep a mirror of the repositories on Github.

Our infrastructure has changed so much since the first continuous deployment we had about ~1 year ago, that I feel I also need to rewrite most of our Infrastructure playbooks.

(I know what you are thinking. I am a big fan of rewrites. They allow me to create a code that is more direct and simpler than the previous one, for now I know exactly what will be needed and how things are supposed to behave).

For the infrastructure codebase, however, I also feel it’s time to part ways with Ansible. I will attempt to recreate our infrastructure automation logic using the SaltStack. Its event-driven management seems to be a better fit with the mindset of our project.

— End of technical warning —

I guess that’s it. A lot has happened in the last month, uh? Consider this to be a draft of the “Changelog” that I plan to centralize automatically. Albeit the Changelog will probably be more detailed (technically) and less prose-y.

It seems the post is ready. I’m actually very anxious to press that green Publish button. Maybe I’ll just procrastinate a bit more and write a Q&A section.


What happened to Leaks? Why are you posting on Medium?

As part of our, ehr, “budget constraint”, I’m no longer able to afford the servers that kept Leaks and some other stuff online. That’s why Leaks is offline, and it’s also why I’m posting on Medium. Recreating Leaks is not a priority for now. But sometime in the future we’ll definitely want a dedicated blog for Hacker Experience, and honestly I’m not a big fan of Medium.

Are you aware of the broken links on the project homepage?

是。 They are a direct result of the “budget constraint” mentioned above. Currently I don’t have the time to fix them. Gotta release the game first.

I have called the phone listed on the homepage and no one answers. 这是为什么?

Sorry, also as a result of the “budget constraint” I no longer pay for that phone service.

I have sent an email ages ago asking something related to the project and never got a response.

Ouch, I’m deeply sorry about this. The reasoning is explained on the post, although, just like the lack of updates, it’s an inexcusable situation. I have created an empty inbox and am trying to keep that one tidy, answering all incoming e-mails. Please, “BUMP” your email so I can get notified on the new inbox and get back to you 🙂

When will we see you again on the Discord server?

I plan on coming back there soon. First I have to get rid of the whole anxiety I described above. Then, I have to flush out of my system the “everyone hates me because of the delays” thinking. I can’t come back while I still have that thought in my mind, it’s not healthy. I hope you can understand it.

I recently found out about the game. How do I buy a copy?

I’ve halted orders for now, and will only accept new ones when the BETA is released. It helps with the whole “pressure” thing. Hope you can understand.

What’s the difference between Alpha and BETA?

BETA is the first “truly” playable version of the game, with most of the features we presented during the crowdfunding campaign (and a lot more, actually, because most of the original mechanics evolved during these years).

Alpha is a step before BETA. It is highly experimental, meaning server data may be reset a few times. It’s intended to be the first real interaction between the game and the players, with the main goal of allowing BETA to be a more stable version. It also allows you to have an early interaction with the game mechanics. You will be able to start hacking, installing viruses, managing your botnet, launching DDoS attacks and much more as soon as Alpha is out!

Both Alpha and BETA are intended to be an experiment on how things will look like in the “final” version (1.0, aka Gold). And that’s the perfect time for you to give some feedback. Tell us what you liked, didn’t like, what you would do differently and so on.

How do I start contributing to the project?

Code, documentation, translation, gameplay testing, feature suggestions, graphic design feedback. There are many different ways people can contribute to the project, but currently there’s no documentation on how to start contributing. I’ve tried to fix this with the Contributor Task Force (CTF), but unfortunately it’s something I can’t keep up while also being responsible for the back-end, front-end, infrastructure and game design.

For now, please hold on to that thought. Currently there is no easy way to contribute to the project (other than figuring out on your own by reading the code). I will make this a priority as soon as Alpha is released.

How do we know if you are working on the project?

Other than the usual activity at Github and the Changelog mentioned above, there’s one other interesting way. I used to stream while coding. It’s not a fancy streaming where you can see me. It doesn’t have video nor sound; it’s a simple mirror of the contents on my IDE buffer, hosted at floobits.com. When I’m developing, I’ll be streaming at renatomassaro/helix when working with Helix, and renatomassaro/heview when working with Heview (the new front-end). I’ll make sure to start streaming again from now on.

Is there anything you regret about the project?

是。 I’ve made only one virtual friend ever since the project started, and we won’t talk anymore, mostly because of my anxiety issues described above. The journey is supposed to be fun. It’s not fun if you don’t make friends along the way.

You said that new features were “evolved” during the development. Care to elaborate?

是。 There are many features that, I believe, most of you are not aware of, as they were designed after the campaign has ended. 他们之中有一些是:

  • Botnet-based mechanics. DDoS is not the only action performed by your botnets.
  • IDPS (Intrusion Detection and Prevention System). Automatically starts a trace connection when an attack is detected, among other things.
  • Stateful firewalls. Block connections, blacklist IPs and filter DDoS attacks.
  • PvP missions on Deep Web.
  • New class of software — SaaS software. Has pros and cons over regular software.
  • Software licenses: Open Source permissive (MIT, BSD), Open Source Copyleft (GPL), Copyright commercial, Copyright non-commercial. Further usage and development of these software depend on the license chosen by the software author.
  • Source code from software you developed is hosted at BitHub :).
  • WiFi (enables location-based mechanics on Desktop).
  • Logless remote access (through Exploits).
  • Exploits everywhere. Each exploited connection has a custom behavior related to its connection type.
  • Three classes of hackers: Salarymen, Anarchists and Freelancers (names not final). Yes, it’s a cyberpunk plot.
  • Corporations (clans) with custom mechanics and bonuses that apply to all members.
  • Corporations may hire Freelancers during a Corporation War.
  • LANs, Routers and Switches. Network topology planning.
  • Single-player storyline (requires Internet connection).
  • Side-channel cache-based attacks.
  • Remote Desktop Protocol. Live view of remote player’s desktop. You see what they see (protected/sensitive windows, like database, player settings or chat windows, are censored and not viewable by anyone else).
  • Streaming mode (sensitive information and IPs are automatically censored).
  • Fully integrated HEmacs (VIM-like keybindings on the Desktop version).
  • Integrated in-game Discord channel (pending Discord approval).
  • Integrated in-game forum.

Of course there’s much more. These are just some features that popped up on my mind. Some of them are already implemented, some will be worked on only after the Gold release.

There were rumors that you would release the game for free. 是真的吗

I really would like to do so, but I need to have a source of income so I can further develop the game (and possibly even hire people to do so).

That said, I am planning on releasing the single-player storyline (campaign mode) for free. It has relatively low server costs (when compared to the multi-player mode) so it’s probably OK to release it for free.

It’s either that or a pay-to-win game. I think we all want the former 🙂

One can always set up a local server and play for free with their friends. After the Gold release, making the local server installation as painless as possible will be one of my priorities.

How’s Phoebe?