#gameboy-advance #agb #boy #fixed #numbers #fixed-point #precision

agb_fixnum

用于抽象固定精度数字的库。专为与 Game Boy Advance 的 agb 库一起使用而设计

22 个版本 (11 个破坏性版本)

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.2.1 2022 年 3 月 28 日

#455Rust 模式

Download history 35/week @ 2024-04-14 57/week @ 2024-04-21 32/week @ 2024-04-28 3/week @ 2024-05-05 407/week @ 2024-05-12 270/week @ 2024-05-19 84/week @ 2024-05-26 65/week @ 2024-06-02 367/week @ 2024-06-09 251/week @ 2024-06-16 43/week @ 2024-06-23 121/week @ 2024-06-30 34/week @ 2024-07-07 29/week @ 2024-07-14 21/week @ 2024-07-21 317/week @ 2024-07-28

每月 496 次下载
用于 8 个 crate (4 个直接使用)

MPL-2.0 许可证

47KB
1K 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 - 一个no_std hashmap实现,针对在Game Boy Advance上使用进行了优化

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 库的 crate,允许播放 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 的出色工作,使这一切成为可能
  • 用于加载 aseprite 文件的 asefile crate
  • 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:

定点数实现,用于高效表示非整数。

依赖关系

~0.4–0.9MB
~20K SLoC