2 个版本

使用旧的 Rust 2015

0.1.1 2023 年 2 月 20 日
0.1.0 2023 年 2 月 20 日

#444 in WebAssembly

MITLGPL-3.0+

495KB
14K SLoC

Github Link Travis Link

皮库瑟鲁控制台

LICENSE

皮库瑟鲁控制台(以前称为 PX8Unicorn Console)是一个幻想引擎,让您可以快速制作各种游戏、应用程序,默认分辨率为 128x128 像素,32 位颜色。控制台允许您加载所谓的“卡带”,它看起来像一个文本文件,包含代码、图形和声音。

主引擎不依赖于特定的图形库,因此您可以在任何地方使用它

功能

  • 显示:默认为 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格式完全相同,除了提供了新的部分,如pythonrhaiwasmcode等。

创建

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

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是坐标
  • wh指定要复制的精灵宽度,默认为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