#wasm-4 #game #fantasy-console #subsystem

无需std wasm4fun-sound

WASM-4幻想控制台的声音原语和子系统

1个不稳定版本

0.1.0 2022年1月8日

#928游戏开发


2 Crate使用

MIT/Apache

30KB
345 代码行数

Wasm4fun

Rust库,用于WASM-4幻想控制台

主页: https://wasm4fun.neocities.org/

仓库: https://gitlab.com/claudiomattera/wasm4fun/

此仓库包含一组库/crate,用于在Rust中开发WASM-4幻想控制台的游戏。

WASM-4幻想控制台具有以下硬件

  • 显示:使用可自定义的4色调色板的160×160屏幕。

    这意味着在任何时候屏幕上只能有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,它导出一个 debug!() 宏,用于将格式化文本写入输出控制台。

顶级 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

您可以在署名下自由复制、修改和分发此应用程序,根据以下任一许可证的条款:

任选其一。

依赖关系