14 个版本 (5 个重大更新)

0.20.5 2024 年 6 月 18 日
0.20.2 2024 年 5 月 25 日
0.19.1 2024 年 3 月 6 日
0.18.0 2023 年 10 月 31 日
0.16.0 2023 年 7 月 18 日

#15 in 模拟器

Download history 13/week @ 2024-04-15 33/week @ 2024-04-22 15/week @ 2024-04-29 405/week @ 2024-05-13 241/week @ 2024-05-20 39/week @ 2024-05-27 39/week @ 2024-06-03 378/week @ 2024-06-10 179/week @ 2024-06-17 19/week @ 2024-06-24 62/week @ 2024-07-01 14/week @ 2024-07-08 7/week @ 2024-07-15 117/week @ 2024-07-29

每月 140 次下载
3 个 crate 中使用 (通过 agb)

MPL-2.0 许可证

57KB
1.5K SLoC

AGB

Game Boy Advance 的 Rust

Docs Build Licence Crates.io

AGB logo

这是一个使用 Rust 编程语言在 Game Boy Advance 上制作游戏的库。该库的主要重点是提供一种抽象,允许您开发能够利用 GBA 功能的游戏,而无需深入了解其底层实现。

agb 提供以下功能

  • 简单的构建过程,依赖最少
  • 内置导入精灵、背景、音乐和音效
  • 高性能音频混音器和可选的 tracker,可以播放 .xm 文件
  • 易于使用的精灵和瓦片背景使用
  • 全局分配器,允许使用 corealloc

最新版本的文档可以在 docs.rs 上找到。

入门指南

开始使用 agb 的最佳方式是使用模板,无论是位于本存储库中的 template 目录中,还是克隆 模板存储库

完成此操作后,您将在模板中的 README 中找到进一步的说明。

有一个(正在进行中的)教程,您可以在 项目网站 上找到。

帮助/支持

如果您需要任何帮助,创作者和贡献者的 讨论页面 是一个获得帮助的好地方。

请随意 在问答类别中创建新的讨论,我们将尽力帮助!

为 agb 本身做出贡献

为了为 agb 本身做出贡献,您需要一些额外的工具,而不仅仅是使用这个库为 Game Boy Advance 编写游戏所需的一些工具。

  • 最近的 rustup,请参阅Rust 网站获取您操作系统的说明。
    • 您可以使用以下命令更新 rustup:rustup self update,或者如果您以这种方式获得 rustup,则可以使用您的包管理器。
  • libelf 和 cmake
    • Debian 和其衍生品:sudo apt install libelf-dev cmake
    • Arch Linux 和其衍生品:pacman -S libelf cmake
  • mgba-test-runner
    • 在当前目录中运行以下命令:cargo install --path emulator/test-runner
  • 'just' 构建工具
    • 使用以下命令安装:cargo install just
  • mdbook
    • 使用以下命令安装:cargo install mdbook
  • miri
    • 一些不安全代码使用 miri 进行测试,安装方法为:rustup component add miri

安装所有这些后,您应该能够通过运行以下命令来运行 agb 的完整构建:

just ci

请注意,在您创建 PR 之前,请先提交一个问题,这样我们可以讨论您想做出的更改。

仓库结构

agb-debug - 一个您可以使用它来解码 agb 调试信息的工具

agb-fixnum - 由于 GBA 没有浮点单元,因此需要一个简单的定点数存储,以便进行高效的小数运算

agb-gbafix - gbafix 工具的纯净重实现,它接受 elf 文件而不是二进制文件

agb-hashmap - 一个针对 Game Boy Advance 定制的 no_std hashmap 实现

agb-image-converter - 一个 crate,可以将图像从常规格式转换为 Game Boy Advance 支持的格式

agb-macros - 一些必须放在不同 crate 中的杂项 proc-macros

agb-sound-converter - 一个 crate,可以将 wav 文件转换为 Game Boy Advance 支持的格式

agb - 主库代码

agb/examples - 基本示例,通常针对 1 个功能,您可以使用 just run-example <example-name> 运行这些示例

book - 指南和网站源代码

book/games - 作为指南的一部分制作的游戏

emulator - Rust 绑定 mgba 模拟器以及您可以使用它来运行单元测试的测试运行器

examples - 在游戏节拍期间制作的大型游戏示例

template - 模板仓库 的源代码

tools - 在 agb 本身开发中使用的杂项工具

tracker - 组成 agb-tracker 库的 crates,该库允许播放 tracker 文件

website - 网站 的源代码

稳定性

当agb处于预1.0阶段时,我们遵循半语义版本控制方案以确保小版本之间的兼容性。具体来说,任何0.x.y版本都保证与另一个0.x.z版本兼容,前提是y > z,但小版本之间可能会有破坏性变化(即第二位数字的变化,例如,从0.1到0.2)。

一旦agb达到1.0版本,我们将过渡到更强的语义版本控制,这意味着任何破坏性变化将通过主版本号的增加来指示(即第一位数字,例如,从1.0到2.0)。

致谢

没有以下(非详尽)项目的帮助,agb将无法实现:

  • rust-console项目令人惊叹的工作,使这一切成为可能
  • asefile crate用于加载aseprite文件
  • agbabi项目提供了对常用方法的高性能替代方案
  • mgba项目提供了所有集成在模拟器中的有用的调试/开发者工具

许可证

agb及其所有子crate均以MPL 2.0版本发布。请参阅《LICENSE》文件中的完整许可证文本。

agb包含来自agbabi项目的一部分代码,该代码以zlib风格许可证发布,具体细节可在agb/src/agbabi下找到。

模板以CC0许可证发布,以允许您进行任何您希望的改变。

agb标志以Creative Commons Attribution-ShareAlike 4.0许可证发布

示例中使用的音乐由Josh Woodward创作,并遵循Creative Commons Attribution 4.0许可证发布


lib.rs:

该模块的大部分文档直接复制自Rust标准库。然而,实现方式不同。

依赖项

~23KB