# version 0.1.9b

pico-8 [オプション] [ファイル名.p8] # コマンドラインからPICO-8を起動する

-width n # ウィンドウの幅を指定する
-height n # ウィンドウの高さを指定する
-windowed n # 0なら全画面モード, 1ならウィンドウモードで起動する
-sound n # 音量を指定する(0-256)
-music n # 音量を指定する(0-256)
-joystick n # ジョイスティックの割り当てをプレイヤー番号nから開始する(0-7)
-pixel_perfect n # 1ならフィルターなしの整数倍の拡大を行う(デフォルトは1)
-draw_rect x,y,w,h # PICO-8の画面を描画するウィンドウの座標とサイズを指定する
-run filename # 起動時にfilename.p8を読み込み実行する
-splore # 起動時にSPLOREを実行する
-home path # config.txtやユーザーデータの参照フォルダを指定する
-desktop path # スクリーンショットとアニメGIFの保存フォルダを指定する
-screenshot_scale n # スクリーンショットの拡大率を指定する(デフォルトは3の368x368ピクセル)
-gif_scale n # アニメGIFの拡大率を指定する(デフォルトは2の256x256ピクセル)
-gif_len n # アニメGIFの最大録画時間を秒単位で指定する(1-120)
-gui_theme n # 1で高コントラストのエディターカラー設定を使用する
-timeout n # ダウンロード開始を待つ最大時間を秒単位で指定する(デフォルトは30)
# 仕様

- 表示: 128x128, 16色固定パレット
- 入力: 6ボタン
- カートリッジサイズ: 32k
- サウンド: 4チャンネル, 64サウンド
- コード: Lua, 最大8192トークン
- スプライト: シングルバンク 128 8x8スプライト + マップと共有の128スプライト
- マップ: 128x32 8ビットセル + スプライトと共有の128x32セル

music([n, [fade_len, [channel_mask]]]) -- 音楽を再生する. -1: 再生停止
sfx(n, [channel, [offset]]) -- SFXを再生する. -1: 再生停止, -2: ループ再生解除
cartdata(id) -- 名前がidのカートリッジデータを開く(実行時に1回だけ!)
dget(idx) -- 指定番号のデータの値を取得する
dset(idx, val) -- 指定番号のデータに値を設定する
cocreate(f) -- 関数fを実行するコルーチンを作成する
coresume(c) -- コルーチンcの実行を再開する
costatus(c) -- コルーチンcが実行中ならtrueを, それ以外ならfalseを返す
yield() -- コルーチンの中で使用する. コルーチンの実行を再開命令が呼ばれるまで停止する

コルーチン解説ページを読む

camera([x, y]) -- カメラ位置を設定する
circ(x, y, r, [col]) -- 円を描画する
circfill(x, y, r, [col]) -- 塗りつぶされた円を描画する
clip([x, y, w, h]) -- 描画範囲を設定する
cls() -- 画面をクリアする
color(col) -- デフォルトの描画色を設定する
cursor(x, y) -- カーソル位置を設定する
fget(n, [f]) -- スプライトフラグの値を取得する
flip() -- バックバッファと画面を切り替える
fset(n, [f], v) -- スプライトフラグの値を設定する
line(x0, y0, x1, y1, [col]) -- 直線を描画する
pal(c0, c1, [p]) -- 色0を色1に置き換える. p=0: 描画パレット, p=1: 画面パレット
palt(col, t) -- 指定した色の透過処理をt(ブール値)に設定する
pget(x, y) -- ピクセルの色を取得する
print(str, [x, y, [col]]) -- 文字列を出力する
pset(x, y, [col]) -- ピクセルの色を設定する
rect(x0, y0, x1, y1, [col]) -- 矩形を描画する
rectfill(x0, y0, x1, y1, [col]) -- 塗りつぶされた矩形を描画する
sget(x, y) -- スプライトシートのピクセルの色を取得する
spr(n, x, y, [w, h], [flip_x], [flip_y]) -- スプライトを描画する
sset(x, y, [col]) -- スプライトシートのピクセルの色を設定する
sspr(sx, sy, sw, sh, dx, dy, [dw, dh], [flip_x], [flip_y]) -- スプライトシートから指定範囲を描画する

btn([i, [p]]) -- プレイヤーpのボタンiの状態を取得する
btnp([i, [p]]) -- 前回のフレームで押されていなかった時のみtrueになる. 15フレーム押され続けると4フレーム毎に繰り返す
map(cel_x, cel_y, sx, sy, cel_w, cel_h, [layer]) -- マップを描画する. layer指定時はスプライトフラグと一致した時のみ描画される. スプライト0番は描画されない
mapdraw(cel_x, cel_y, sx, sy, cel_w, cel_h, [layer]) -- マップを描画する. 'map()'と同じ
mget(x, y) -- マップのセルの値を取得する
mset(x, y, v) -- マップのセルの値を設定する
-32768.0 .. 32767.99 -- 値の範囲
abs(x) -- xの絶対値
atan2(dx, dy) -- (dx, dy)を0から1の角度に変換する
band(x, y) -- ビット単位の論理積
bnot(x) -- ビット単位の否定
bor(x, y) -- ビット単位の論理和
bxor(x, y) -- ビット単位の排他的論理和
cos(x) -- xの余弦, 1周期は0から1の範囲
flr(x) -- 切り捨て
-flr(-x) -- 関数ではないが, 切り上げとして使える
max(x, y) -- x,yの最大値
mid(x, y, z) -- x,y,zの中間の値
min(x, y) -- x,yの最小値
rnd(x) -- 0以上x未満の乱数
sgn(x) -- 引数の符号を-1か1で返す. sgn(0)の時は1になる
shl(x, y) -- 左シフト
shr(x, y) -- 右シフト
sin(x) -- xの正弦, 1周期は0から1の範囲, 正負は反転している
sqrt(x) -- xの平方根
srand(x) -- 乱数のシードを設定する
cstore(dest_addr, src_addr, len, [filename]) -- RAMまたは指定されたファイルからROMにバイト列をコピーする
memcpy(dest_addr, src_addr, len) -- バイト列をコピーする
memset(dest_addr, val, len) -- lenバイトにvalを設定する
peek(addr) -- RAMの指定アドレスのバイトを取得する
poke(addr, val) -- RAMの指定アドレスにvalを書き込む
reload(dest_addr, src_addr, len, [filename]) -- ROMまたは指定されたファイルからRAMにバイト列をコピーする
# 種類:

1. ベースRAM(32kB)
2. カートリッジROM
3. Lua RAM(1MB)
# RAM配置:

0x0    - グラフィックス
0x1000 - グラフィックス2/マップ2(共有)
0x2000 - マップ
0x3000 - グラフィックス属性
0x3100 - 音楽
0x3200 - SFX
0x4300 - ユーザーデータ
0x5e00 - 永続カートリッジデータ(256byte)
0x5f00 - 描画状態
0x5f40 - ハードウェア状態
0x5f80 - GPIOピン(128byte)
0x6000 - 画面(8kB)
-- マウス
poke(0x5f2d, 1) -- マウスリスナーを初期化する
stat(32) -- x座標を取得する
stat(33) -- y座標を取得する
stat(34) -- ボタン状態をビット列で取得する(1=左ボタン, 2=右ボタン, 4=中央ボタン)
-- サウンド
stat(16-19) -- チャンネル0-3で再生中のSFX番号を取得する
stat(20-23) -- チャンネル0-3で再生中のノート番号(0-31)を取得する
-- 拡張グラフィックスモード
poke(0x5f2c, 0) -- 標準, 128x128
poke(0x5f2c, 1) -- 水平方向に引き伸ばし, 64x128
poke(0x5f2c, 2) -- 垂直方向に引き伸ばし, 128x64
poke(0x5f2c, 3) -- 拡大, 64x64
poke(0x5f2c, 4) -- 標準, 128x128
poke(0x5f2c, 5) -- 左半分の鏡像
poke(0x5f2c, 6) -- 右半分の鏡像
poke(0x5f2c, 7) -- 左上4分の1の鏡像
-- 実行制御
_update() -- 30fpsの更新タイミング毎に呼ばれる
_update60() -- 60fpsの更新タイミング毎に呼ばれる
_draw() -- 画面の描画タイミング毎に呼ばれる
_init() -- プログラム開始時に一度だけ呼ばれる
holdframe() -- _draw(), _update()が自動で使用する
-- コマンドライン
assert(condition) -- conditionがtrueか確認する
cd .. -- 親ディレクトリに移動する
cd [dirname] -- 現在のディレクトリを変更する
dir() -- 現在のディレクトリの要素一覧を表示する
exit() -- PICO-8アプリを終了する
export(filename.html) -- html/jsでゲームを書き出す
export(filename.png) -- スプライトシートを書き出す
export(filename.wav) -- 現在のSFX/音楽を書き出す
export(filename%d.wav) -- すべてのSFXを通し番号つきのファイルとして書き出す
folder() -- ホストOSでカートリッジフォルダーを開く
help() -- システムコマンドの要約を表示する
import(filename.png) -- スプライトシートを読み込む. 128x128のpngで色がPICO-8のパレットに一致することが前提
info() -- カートリッジ情報を表示する
install_demos() -- デモカートリッジをインストールする
install_games() -- 代表的なBBSカートリッジをインストールする
keyconfig() -- プレイヤーボタンのキーボード割り当てを設定する
load(filename) -- カートリッジを読み込む. "@clip"を指定するとクリップボードから読み込む
ls() -- 現在のディレクトリの要素一覧を表示する
menuitem(index, [label, callback]) -- ポーズメニューに要素(1-5)を追加する. ラベルとコールバックが指定されないと要素を削除する
mkdir(dirname) -- ディレクトリを作成する
printh(str, [filename, overwrite]) -- 文字列をホストOSのターミナル(または指定したファイル)に出力する. "@clip"を指定するとクリップボードに書き込む
reboot() -- PICO-8を再起動する
resume() -- カートリッジの実行を再開する
run() -- カートリッジを実行する
save(filename) -- カートリッジを保存する. "@clip"を指定するとクリップボードに保存する
shutdown() -- PICO-8アプリを終了する
splore() -- カートリッジを閲覧する
stat(x) -- 0でメモリ状態, 1でCPU状態, 4でクリップボードの内容(ユーザーがctrl-vを押した後に有効!)を出力する
time() -- 最後に起動してからの経過秒を返す
type(v) -- vの型(数値, 文字列, テーブル)を返す
// javascript
pico8_gpio[] // GPIOピンの読み書きをする
#s -- 文字列の長さ
"three "..4 -- 文字列の結合
sub(str, from, [to]) -- 部分文字列
-- テーブル
add(t, v) -- 値vを追加する
all(t) -- ループ処理'for v in all(t)'で使用する
count(t) -- テーブルの要素数を返す
del(t, v) -- 値がvの最初の要素を削除する
foreach(t, f) -- 各要素について関数fを呼ぶ
pairs(t) -- ループ処理'for k,v in pairs(t)'で使用する
-- メタテーブル
setmetatable(t, mt) -- テーブルtにメタテーブルmtをセットする

メタテーブル解説ページを読む

共通
  • 全画面表示: alt + enter / cmd + f
  • 終了: alt + f4 / cmd + q
  • 再読み込み&実行: ctrl + r
  • 保存: ctrl + s
  • 消音: ctrl + m
  • スクリーンショット: f6 / f1 / ctrl + 6
  • ラベル画像保存: f7 / f2 / ctrl + 7
  • 録画開始: f8 / f3 / ctrl + 8
  • 動画保存: f9 / f4 / ctrl + 9
  • キーボードカーソル: f10 / f5 / ctrl + 0
  • 編集モード切り替え: alt + right, left
  • コマンドライン補完: tab
実行中
  • ポーズメニュー: p / enter
  • 1P操作: cursors + zx / nm / cv
  • 2P操作: sdfe + tab, q / shift + a
コードエディター
  • 領域選択: shift
  • カット: ctrl + x
  • コピー: ctrl + c
  • ペースト: ctrl + v
  • 取り消し: ctrl + z
  • やり直し: ctrl + y
  • 行コピー: ctrl + d
  • 検索: ctrl + f
  • 検索繰り返し: ctrl + g
  • 先頭 / 終端: ctrl + up, down
  • 関数ジャンプ: alt + up, down
  • グリフ入力: shift + a..z
  • グリフモード: ctrl + k
SPLORE
  • リスト選択: left / right
  • カートリッジ選択: up / down
  • カートリッジ起動: x / o / menu
  • お気に入り登録: f
スプライト / マップ エディター
  • 取り消し: ctrl + z
  • コピー: ctrl + c
  • ペースト: ctrl + v
  • 表示範囲移動: space / mmb
  • スプライト切り替え: q / w
  • 色切り替え: 1 / 2
  • タブ切り替え: + / -
  • フルスクリーン編集: tab
  • ズーム: mousewheel
  • 縦方向反転: f
  • 横方向反転: v
  • 回転: r
  • 移動: cursors
  • ドローツール:
    • 色置き換え: lctrl
    • 色取得: rmb
  • スタンプツール:
    • 透過ありスタンプ: lctrl
  • 選択ツール:
    • 複数スプライト選択: shift + drag
SFX / 音楽 エディター
  • 再生 / 停止: space
  • コピー: ctrl + c
  • ペースト: ctrl + v
  • 複数ノート選択: shift + lmb
  • 速度変更: < / >
  • 移動: home, end, pageup/down, mousewheel
  • パターン切り替え: + / -
  • Cmペンタトニック自動調整: ctrl
  • 速度4倍: shift
  • ループ再生解除: a
  • 削除: backspace
  • エフェクト:
    • 0: なし
    • 1: スライド
    • 2: ビブラート
    • 3: ドロップ(ドラムキック!)
    • 4: フェードイン
    • 5: フェードアウト
    • 6: 高速アルペジオ(4ノート)
    • 7: 低速アルペジオ(4ノート)