#edition #original #player #bms #format

nightly app lifthrasiir/angolmois

安哥鲁莫斯:简单的BMS播放器

1 个版本 (0 个不稳定版本)

使用旧Rust 2015

2.0.0-alpha22014年8月7日

#5 in #edition

101 星 & 4 关注者

GPL-2.0+

270KB
4K SLoC

安哥鲁莫斯 Rust 版本

Angolmois Rust Edition on Travis CI

这是将安哥鲁莫斯直接翻译为Rust编程语言的过程。 安哥鲁莫斯是一个类似BM98的简约音乐视频游戏,支持BMS格式进行播放。

安哥鲁莫斯将字符串解析、路径操作、二维图形和复杂游戏玩法精心封装在几千行代码中。这个翻译旨在提供一个将中等规模C代码转换为Rust的示例,并研究此类中等规模程序所需的额外库支持。结果翻译是迄今为止用Rust编写的最大应用程序之一(目前大多数Rust项目都是库),包含超过6,000行Rust代码。这部分原因是因为,与原始安哥鲁莫斯代码(由于代码大小问题而牺牲了大部分注释)不同,Rust版本有更多的注释,这也有助于理解安哥鲁莫斯本身。

有关更多信息(尤其是使用方法),请参阅原始安哥鲁莫斯的README文件。如果您想了解BMS格式是什么以及安哥鲁莫斯的结构,我已写了大量相关内容。

截图


游戏数据来源:"sunken azure world",音乐由maki创作,由Daida Three Brothers提供。版权所有。

许可证

安哥鲁莫斯根据GNU GPL版本2+分发,本翻译也是如此。其中一部分打算作为补丁发送到Rust,因此这些部分根据Apache License 2.0和MIT许可证授权。请参阅代码获取详细信息。

常见问题解答

如何编译?

克隆此仓库并运行以下命令(是的,您需要MinGW shell才能在Windows上运行)

cargo build --release
target/release/angolmois --help

您需要最新的Rust master版本和Cargo。您可以为两者都安装夜间版本。

为什么把所有内容都放在一个文件里?

主要是因为这是对Angolmois的直接翻译,它由一个包含不到2,000行代码的单个C文件组成。我在进行一些重构的同时尽量保持整个代码结构,因为这使翻译变得更加明显。这也解释了为什么我们的绑定相对较大;原始的Angolmois除了SDL库外也是自包含的。

现在有一个名为Sonorous的Angolmois分支,它已经从一个完整的游戏发展而来。如果您不喜欢一个大的文件,请考虑看一下它。

Rust版本与原始Angolmois之间的区别是什么?

在理论上,Angolmois Rust Edition应该与Angolmois 2.0.0 alpha 2完全相同。在实践中,有一些区别

  • 它们在包含无效UTF-8序列的文件上表现不同。
  • Rust版本缓存目录条目,以避免因不同的目录列出语义而导致的性能损失。
  • C版本无法处理显示中的2,000个或更多措施。(在2.0 alpha 3中修复)
  • C版本允许在#PATH_WAV中使用非本地路径分隔符;Rust版本不允许。
  • C版本允许通过重复设置相同的字母数字键到BGA层来“倒带”电影;Rust版本不允许。我不确定这个特性是否真的可移植。

请注意,基于2.0.0 alpha 2的Rust Edition在开发中也与2.0 alpha 3有相当大的不同。针对2.0 alpha 3的目标并不困难,但目前由于Rust对SDL 2.0绑定的不成熟而受阻。

依赖项