2 个版本
使用旧的 Rust 2015
0.1.1 | 2023 年 2 月 20 日 |
---|---|
0.1.0 | 2023 年 2 月 20 日 |
#444 in WebAssembly
495KB
14K SLoC
皮库瑟鲁控制台
皮库瑟鲁控制台(以前称为 PX8 或 Unicorn Console)是一个幻想引擎,让您可以快速制作各种游戏、应用程序,默认分辨率为 128x128 像素,32 位颜色。控制台允许您加载所谓的“卡带”,它看起来像一个文本文件,包含代码、图形和声音。
主引擎不依赖于特定的图形库,因此您可以在任何地方使用它
- pikuseru: 主核心引擎
- pikuseru-console: 所有卡带的启动器,基于 EGUI + Pixels
- pikuseru-editor: 卡带的编辑器(图形、声音、代码),基于 EGUI
- pikuseru-rs: Wasm 绑定库
- pikuseru-examples: 一系列 Pikuseru 卡带,用于测试
功能
- 显示:默认为 128x128 像素,8 位颜色,提供预定义的调色板列表(16 种颜色)(pico-8、commodore、atari2600 等)
- 32 位颜色可以通过 API 直接添加,具有 Alpha 通道(用于透明度)
- 字体:预定义的字体列表(pico8、bbc、trollmini 等)
- 精灵:包含 128 个 8x8 精灵的单个存储库,直接在卡带中
- 动态精灵:使用 API 动态创建精灵
- 地图:128x32 8 位单元格
- 代码:卡带中代码的大小没有限制,并支持以下语言:Lua(可选)、Python(可选)、Rhai(默认)、WASM(默认)
- 声音:8 个通道,tracker、FM 合成器、16 位波形表(来自游戏机控制台)
- 截图 / Gif 录制(图像功能)
示例
查看 控制台 获取更多示例。
限制
控制台与 pico-8(购买它!)有一定的兼容性,大多数 pico-8 的当前功能已实现,卡带格式相同。但是,支持一些 pico-8/lua 语言语法,如
- 复合赋值运算符(+=、-= 等)
- "!=" 如 "~="
- 二进制字面量
但是,请参阅 pikuseru-examples,我已对一些优秀游戏进行了修改,使其也可以用于皮库瑟鲁。
构建
Cargo 功能
- cpython:启用 Python 支持
- rlua:启用 Lua 支持
您可以直接构建控制台主UI来玩游戏
cd pikuseru
cargo build --release --features=cpython,rlua,image
文件格式
文件格式 | 读取 | 写入 |
---|---|---|
Pico8 .PNG | X | / |
Pico8 .P8 | X | X |
Pikuseru (.PIK) | X | X |
Pikuseru文件格式与PICO8 P8格式完全相同,除了提供了新的部分,如python、rhai、wasm、code等。
创建
API
API对Lua/Python可用。
图形
camera
camera([x,y])
设置相机位置。
- x/y是设置相机的坐标,它们是可选的(在这种情况下,将使用0/0)
circ
circ(x,y,r, [col])
绘制一个圆
- x/y是坐标
- r是圆的半径
- col是圆的颜色
circfill
circfill(x,y,r, [col])
绘制一个填充圆
- x/y是坐标
- r是圆的半径
- col是圆的颜色
clip
clip([x,y,w,h])
设置屏幕剪辑区域,其中
- x/y是坐标
- w是宽度
- h是高度
cls
清除屏幕。
color
color(col)
设置默认颜色
ellipse
ellipse(x,y,rx,ry, [col])
绘制一个椭圆
ellipsefill
ellipsefill(x,y,rx,ry, [col])
绘制填充椭圆
fget
fget(n, [f])
获取精灵标志的值
font
font(name)
更改字体策略("pico8","bbc","cbmII","appleII")
fset
fset(n, [f],v)
设置精灵标志的值
line
line(x0,y0,x1,y1, [col])
绘制线条
pal
pal(c0,c1)
切换颜色c0到颜色c1。
palt
palt(col,t)
设置颜色'col'的透明度,其中't'是布尔值
pget
pget(x,y)
获取x/y坐标处的像素颜色
print(str, [x,y, [col]])
在屏幕上显示一个字符串
pset
pset(x,y,col)
使用值'col'在x/y坐标处设置像素颜色
rect
rect(x0,y0,x1,y1, [col])
绘制一个矩形
rectfill
rectfill(x0,y0,x1,y1, [col])
绘制填充矩形
sget
sget(x,y)
获取精灵图像素颜色
spr
spr(n,x,y, [w,h], [flip_x], [flip_y])
绘制精灵
- n是精灵编号
- x/y是坐标
- w和h指定要复制的精灵宽度,默认为1/1值
- flip_x用于水平翻转精灵
- flip_y用于垂直翻转精灵
颜色0默认为透明(请参阅"palt" API)。
sset
sset(x,y, [col])
设置精灵图像素颜色
sspr
sspr(sx,sy,sw,sh,dx,dy, [dw,dh], [flip_x], [flip_y])
从精灵图中绘制纹理
trigon
trigon(x1,y1,x2,y2,x3,y3, [col])
绘制三角形
键盘输入
btn([i, [p]])
获取玩家p的按钮i状态
btnp([i, [p]])
只有在上一个帧未按按钮时才为真;在按钮保持15帧后,每4帧重复一次
地图
map
map(cel_x,cel_y,sx,sy,cel_w,cel_h, [layer])
[Python: spr_map]
绘制地图;层从标志中获取;精灵0为空
mget
mget(x,y)
获取地图值
mset
mset(x,y,v)
设置地图值
Math
内存 [WIP]
鼠标输入 [WIP]
调色板 [WIP]
卡数据 [WIP]
依赖
~24–42MB
~683K SLoC