1个不稳定版本
0.1.0 | 2022年1月8日 |
---|
#2330 在 游戏开发
用于 wasm4fun
170KB
827 行
Wasm4fun
Rust库,用于WASM-4幻想控制台
主页: https://wasm4fun.neocities.org/
仓库: https://gitlab.com/claudiomattera/wasm4fun/
此仓库包含一组用于在Rust中为WASM-4幻想控制台开发游戏的库/crate。
WASM-4幻想控制台的硬件如下:
-
显示器:160×160屏幕,使用可定制的4色调色板。
这意味着在任何时候屏幕上只能有4种不同的颜色,但游戏可以在任何时候切换到另一组颜色。
-
内存:64 KiB。
-
卡带大小:64 KiB。
整个游戏不能超过卡带大小。这限制了游戏资源的数量和复杂性,例如图形精灵,以及游戏逻辑的复杂性(复杂的实现会导致更大的二进制文件大小)。
-
磁盘存储:1 KiB。
游戏可以写入和读取最多1 KiB的数据,例如用于保存进度或得分。
WASM-4引擎公开了一组小型的原语和内存映射,并期望游戏公开两个回调函数。这种方法可以轻松支持多种编程语言,但缺点是编程接口相对低级且简单。这些库的目的是封装WASM-4原语,并公开一个更丰富、更符合语言习惯和更安全的API。
架构
此库分为几个独立的crate,每个crate实现特定的功能。例如,wasm4fun-input
实现了读取控制台输入的函数和数据类型,无论是鼠标还是游戏手柄,而wasm4fun-storage
实现了从存储系统保存或加载数据的函数。
一些crate依赖于其他crate。例如,wasm4fun-core
(导出裸WASM-4接口)在大多数crate中使用,而wasm4fun-log
(导出将格式化文本写入输出控制台的宏)也是如此。
顶层的wasm4fun
crate重新导出所有子crate,但可以忽略它并显式地依赖一些子crate,以精简依赖树。
设计选择
这些库不使用任何动态分配,因此也不使用Rust标准库的任何部分。从技术角度来说,它们不使用 std::
模块中的任何内容,而只使用 core::
。
动态分配使开发变得更加容易,但在WASM-4上有一个主要的缺点:它会导致卡带大小显著增加,因为卡带必须包含分配器本身。由于64 KiB卡带大小的限制,这可能会迫使使用更小的游戏资源,例如精灵,或者避免使用一些复杂的库。
另一方面,尽管动态分配在其他环境中带来了许多优势,但在WASM-4上的Rust中并不那么必要。许多crate都存在以在栈上实现数据结构和算法。例如,tinyvec crate提供了由栈上的数组支持的“动态”向量。
最后,避免动态分配与WASM-4的一般极简主义哲学相契合。
其理念是通过去除多余的内容并专注于本质,使得开始和完成游戏开发变得更加容易。
文档和示例
文档可在https://docs.rs/wasm4fun/找到。
在examples
目录中提供了几个示例。它们可以使用以下命令运行:cargo make run-example EXAMPLE_NAME
(WASM-4的可执行文件w4
必须在路径中)。
许可证
版权所有 Claudio Mattera 2022
您可以在以下任一许可证的条款下自由复制、修改和分发此应用程序,并提供归属:
- Apache许可证,版本2.0(
LICENSE-Apache-2.0.txt
或 https://opensource.org/licenses/Apache-2.0) - MIT许可证(
LICENSE-MIT.txt
或 https://opensource.org/licenses/MIT)
任选其一。