Home

Awesome

<!-- PROJECT BADGES --> <!-- *** I'm using markdown "reference style" links for readability. *** Reference links are enclosed in brackets [ ] instead of parentheses ( ). *** See the bottom of this document for the declaration of the reference variables *** for contributors-url, forks-url, etc. This is an optional, concise syntax you may use. *** https://www.markdownguide.org/basic-syntax/#reference-style-links -->

Github Link CI Status Version

<!-- PROJECT LOGO --> <p align="center"> <img src="pikuseru.png"> </p> <!-- ABOUT THE PROJECT -->

Pikuseru Console

LICENSE

Pikuseru Console (previously known as PX8 or Unicorn Console) is a fantasy engine that let you do quickly any sort of game, application with a default resolution of 128x128 pixels, 32bits color. The console allow you to load what is called a 'cartridge' that looks like a text file, that contains the code, the graphics and the sounds.

The main engine is not dependant of a specific graphic library so you can use it where you want:

Features

Examples

See the console for more examples.

Limitations

The console is somewhat compatible with pico-8 (buy it !), most of current functions from pico8 is implemented and the cartridge is the same format. However some pico8/lua language syntax is supported like:

But see the pikuseru-examples, I did some modifications of good games to use it with Pikuseru too.

Build

Cargo features:

You can build the console directly to play games:

git clone github.com/PikuseruConsole/pikuseru
cd pikuseru
cargo build --release --features=cpython,rlua,image

File format

File formatReadWrite
Pico8 .PNGX/
Pico8 .P8XX
Pikuseru (.PIK)XX

Pikuseru file format is exactly the same as PICO8 P8 format, except that new sections are available, like python, rhai, wasm, code etc.

Create

API

The API is available for Lua/Python.

Graphics

camera

camera([x, y])

Set the camera position.

circ

circ(x, y, r, [col])

Draw a circle:

circfill

circfill(x, y, r, [col])

Draw a filled circle:

clip

clip([x, y, w, h])

Set a screen clipping region where:

cls

Clear the screen.

color

color(col)

set default color

ellipse

ellipse(x, y, rx, ry, [col])

Draw an ellipse

ellipsefill

ellipsefill(x, y, rx, ry, [col])

draw filled ellipse

fget

fget(n, [f])

get values of sprite flags

font

font(name)

Change the font policy ("pico8", "bbc", "cbmII", "appleII")

fset

fset(n, [f], v)

set values of sprite flags

line

line(x0, y0, x1, y1, [col])

draw line

pal

pal(c0, c1)

Switch the color c0 to color c1.

palt

palt(col, t)

Set the transparency for color 'col', where 't' is a boolean

pget

pget(x, y)

Get the pixel color in x/y coordinate

print

print (str, [x, y, [col]])

Display a string on the screen

pset

pset(x, y, col)

Set the pixel color with the value 'col' in x/y coordinate

rect

rect(x0, y0, x1, y1, [col])

draw a rectangle

rectfill

rectfill(x0, y0, x1, y1, [col])

draw filled rectangle

sget

sget(x, y)

get spritesheet pixel colour

spr

spr(n, x, y, [w, h], [flip_x], [flip_y])

Draw a sprite:

Color 0 will be transparent by default (see "palt" API).

sset

sset(x, y, [col])

set spritesheet pixel colour

sspr

sspr(sx, sy, sw, sh, dx, dy, [dw, dh], [flip_x], [flip_y])

draw texture from spritesheet

trigon

trigon(x1, y1, x2, y2, x3, y3, [col])

draw trigon

Keyboard Input

btn([i, [p]])

get button i state for player p

btnp([i, [p]])

only true when the button was not pressed the last frame; repeats every 4 frames after button held for 15 frames

Map

map

map(cel_x, cel_y, sx, sy, cel_w, cel_h, [layer])

[Python: spr_map]

Draw map; layers from flags; sprite 0 is empty

mget

mget(x, y)

Get a map value

mset

mset(x, y, v)

Set a map value

Math

Memory [WIP]

Mouse input [WIP]

Palettes [WIP]

Cart Data [WIP]