#retro #star #rogue-like #game #rewritten #character #trek

bin+lib startrust

1978 年《星际迷航》游戏的复刻,使用 Rust 重新编写

1 个不稳定版本

0.1.0 2021 年 1 月 14 日

#761 in 游戏

Unlicense 许可

1MB
2K SLoC

StarTrust

1978 年(或许 1976 年,或者可能是 1967 年)一款游戏的荒诞复刻

An old school character mode game screen

是什么

StarTrust 是 1978 年一款名为 "Star Trek" 的 "经典" 计算机游戏的重新编写,最初是用难以理解的 BASIC 编写的,现在用更易理解的(目前相当混乱的)Rust 重新编写。

它是一个文字游戏,因此与电视系列/特许经营权略有相似,实际上与它基本上没有任何关系,只是命名方式丰富多彩。如今,人们可能会将其视为 "roguelike",但当时 Rogue 还未编写出来,所以它只是一个你一次性玩的游戏,具有永久的死亡和挑战性的胜利(而且是回合制和角色模式)。

游戏经历了一系列变异,演变成 "Super Star Trek",增加了许多功能(当时几乎所有东西都是非官方的开源,人们不断地修改和改进它,但没有 GitHub,所以所有东西实际上都是分支)。

我第一次知道这款游戏是在它写出来几年后(因为我真的很老),我买了现在著名的 "BASIC COMPUTER GAMES" 书籍,作者是 David Ahl,其中包含了微型的源代码列表。

我停止玩这款游戏是因为出现了 Rogue(最像 roguelike 的 roguelike!),然后我玩它的各种后代,但我记得 "Star Trek" 很好玩。

在这段时间里,Bob Sorem 进行了一些重写,并产生了一个 C 版本。实际上我是以此版本为模板的。

这款游戏在 "BSD Games" 软件包 中存活下来,与许多同期游戏一起。它的老化程度比大多数游戏都要好,实际上甚至很有趣。

如何实现

正如我上面描述的,我决定用 Rust 重新编写 C 版本。这个版本比 BASIC 版本更易读,更不混乱,但功能集更简单。

一个合理的人会采取的方法是阅读整个源代码(实际上是在一个 .c 文件中),理解它,然后从头开始。

我没有做那件事。这很明显。我没有耐心。

我所谓“为了节省时间”(嗯,是的)就是将其细分到各个部分,并尝试对这部分进行简单的重写,使其更易于理解,然后在此基础上进行工作。

这确实有效,但花费了很长时间。

现有的Rust代码相当糟糕,而且仍然充满了陈旧的垃圾,但它制作了一个可玩的游戏。所以我试玩了它,惊讶地发现它有点有趣。

要玩游戏,你只需执行cargo run,或者你可以构建应用程序并运行它(不,我没有为你的平台构建二进制文件,感谢你的询问)。我不知道它是否能在你的平台上运行(应该可以),但如果你是那种为1978年的游戏或任何游戏创建PR的人,我会很高兴接受。

原因

我就是觉得这样做。我实在无法解释。我在生活中遇到了极大的困难,这感觉像是我可以用来清理我的思绪并帮助我度过难关的事情。

我一直喜欢这款游戏,我觉得让它复活会让每个人都很开心,甚至可能还会激发灵感。确实如此(见下文)!

令人惊讶的是,当我坐下来写这份README时,我发现几个月前Emanuele Bolognesi用Lua重写了它并撰写了一篇关于它的medium文章。他的作品很棒。你应该玩他的。

或者只是玩BSD Games中的一个,或者自己写一个。

未来

我写了这个,让它工作,并且玩了很多次。它出奇地平衡且具有挑战性,不会让人感到沮丧,充满了1978年的BASIC魔力。

但之前我提到,我认为这可能会激发我。这确实发生了。

我开始构想一款现代游戏,这是一款对旧游戏的全新诠释,一款基于太空的roguelike游戏,具有对这古老代码的怀旧回调。

因此,我开始阅读有关Rust游戏框架/引擎的内容,特别是BevyAmethyst。我在寒假期间开始了编码狂潮。

当我有一些可以展示的内容时,我会在这里放一个链接。

但是,我对StarTrust有什么计划呢?

可能什么都没有。可能我会放弃。然而

  • 由于这个Rust代码真的很糟糕,我可能需要修复它,并把它变成一个不错的、易于展示的资源,供那些想看看相对简单的Rust游戏的人使用。
  • 我可能用Bevy或Amethyst重写StarTrust,作为学习这些框架的一种方式,并为人们提供一个可以参考的例子。
  • 我可能在Bevy和Amethyst中重写它,并做一个 bakeoff!

但,可能我什么都不会做。

我们拭目以待。

依赖关系

~7–16MB
~194K SLoC