🎮

PICO-8 ゲーム開発のススメ

2023/08/07に公開

はじめに

Celeste というゲームをご存知でしょうか? レトロ風ドット絵のシンプルな横スクロールアクションゲームの傑作です。現在 Celeste は Nintendo Switch をはじめとした様々なプラットフォームで遊べますが、そのオリジナルが作られたプラットフォームは PICO-8 でした。 オリジナルは今でも Web で遊べます。

PICO-8ファンタジーコンソールの一つです。ファンタジーコンソールとは、 PICO-8 の開発者である Joseph White さんによる概念で、現実世界には存在しない (物理的なハードウェアが存在しない) 端末を意味します。 PICO-8 を一言で言うなら、「かつて存在したかもしれないレトロゲーム機のソフトウェアエミュレーター」です。 PICO-8 で作られたゲームは「レトロ風」ではなく、「レトロ」なのです。

PICO-8 はゲームを実行するだけではありません。必要な開発ツールも組み込まれた統合開発環境です。ただし、高度な技術を持つ開発者しか使いこなせないツールではありません。有償 ($14.99 = 約 2080 円) ではありますが、どんな人にも (子供にも) おすすめできる最も簡単なゲーム制作ツールの一つです。「ゲームを作ってみたいけど Unity は難しいし…」といまいち踏み切れない方、まずは PICO-8 でゲームを作ってみませんか?


全部できる PICO-8 (公式サイトより引用)

PICO-8 の特徴

マルチプラットフォーム

PICO-8 は Windows, macOS, Linux, Raspberry Pi で動作します。 PICO-8 で作成したゲームはスタンドアロンで動作するバイナリや Web アプリに変換することもでき、 PICO-8 を購入していない人にも遊んでもらえます。

PICO-8 の開発会社が運営するフォーラムでは、ユーザーが投稿したゲームをブラウザで遊べます。力作の完成品もあれば Work in Progress というタグもあり、開発途上の作品でもみなさん気楽に投稿されています。ちょっとしたものでも遊べるようになったら、ぜひ投稿してみてください。簡単な説明を英語で書く必要がありますが ChatGPT でも使えば大丈夫です。誰かしらコメントがもらえると楽しいですよ。

ちなみに私はピンボール風味のブロック崩しを作ってみました (ゲームの説明は ChatGPT に頼りました) 。ボールがピンボールのように重力を持って動きます。 "breakout hardcore version" ってコメントついて笑いました。自分でもそう思いますが、難易度の調整が難しくて。ボールの速度を落とすとピンボールの感触がぼやけてしまうし、ブロックの数を減らすと手応えがなくなってしまう。他にもいろいろと、実際に作ってみると学べたことがたくさんありました。


ブロック崩しハードコアバージョン。組み込みの機能でプレイ動画の  GIF アニメーション画像も作れます

ハードウェアの制限

PICO-8 の最大の特徴、それがレトロゲーム機らしい制限です。主なハードウェア仕様を以下に示します。

カテゴリ 仕様
解像度 128x128 ピクセル
フレームレート 30 (60 に変更可)
表示可能な色 16 色
サウンド 4 チャンネル、 8 種類の波形
コントローラー 6 ボタン (上、下、左、右、x、o) 、 2 コントローラー
SDL を介して最大 8 コントローラーを接続可
プログラミング言語 P8 Lua (PICO-8 専用 Lua サブセット)
CPU 8MHz 、 Lua VM 命令を 1 秒間に 400 万回実行
メモリ 64 KB
カートリッジのサイズ 32 KB (8192 トークン)

まず気になるのは解像度でしょう。 128x128 ピクセルはファミコン (256x240) の約半分です。携帯型のゲームボーイとゲームギアの解像度でも 160x144 なので、現在の最新のハードと比べるとかなり狭めと考えられます。ところが、実際にゲームを作ってみるとむしろ広く感じることもあるのだから不思議です。

CPU のクロック周波数は 8MHz に決められていて、どのマシンでも同じ速度で動作するようになっています。そのため、最新のマシンパワーに頼る高度なゲームは作れません。 8MHz はレトロというわりにはそこそこ高く、ファミコン (1.79MHz) の 4 倍、スーパーファミコン (3.58MHz) の 2 倍になります。ただ、 PICO-8 の CPU は Lua VM 命令を実行するので単純な比較はできません。 Lua VM 命令 1 つにつき 2 サイクルを消費し、 1 秒間に 400 万回の命令を実行可能らしいですが、その能力が現実世界のどのゲーム機に相当するのか不明です。といっても、 PICO-8 で 3D シューティング (Hyperspace)CAD (picoCAD) といった 3D ゲーム (ツール) も作られているくらいのパフォーマンスは出るようです。

リストの終わりにある「カートリッジ」とは、ゲームのソースコードと各種データをまとめたファイルです (ゲーム機のカートリッジまたはカセットに見立てています) 。カートリッジの最大サイズは 32KB に制限されています (ただし、カートリッジは最大 16 個まで連結できます) 。


カートリッジの画像ファイル。実はこの画像にプログラムも埋め込まれている

これらの厳しいハードウェア制限は意図的なものです。できることは少なくなりますが、その分だけアイデアの取捨選択が重要になります。ゲームを盛り上げる派手な演出や、遊びの幅を広げるモードや、高度な物理演算や高機能なゲームエンジンを実装する余地はありません。何を採用して何を捨てるのか、一つ一つの慎重な選択があなたの創造性を高めてくれます。

開発のハードルが低い

ハードウェアの仕様が厳しく制限されていると聞くと、 C 言語のような低レベルで難しそうなプログラミングが必要に見えるかもしれません。しかし実際は逆です。 PICO-8 で使うプログラミング言語は Lua (のサブセット) で、ポインタや型を気にすることなくさくさく進められます。 Unity のような複雑な操作を覚える必要も、巨大な API を覚える必要もありません (関数の数は 80 程度です) 。

開発ツールが組み込まれている

ゲーム開発はソースコードだけでなく画像や音楽も必要です。 PICO-8 にはゲーム開発に必要なツールがすべて組み込まれています。他のツールを自前で用意しなくても、 PICO-8 だけで開発を完結できます。 (画像はすべてデモのゲームのスクリーンショットです)


ソースコードエディター。ソースコードはテキストファイルなので他のツールでも編集できます


スプライトエディター


マップエディター


サウンド (効果音) エディター


音楽エディター (の一つ)

日本語のサポート

なんと PICO-8 は日本語 (ひらがなとカタカナ) をサポートしています。日本語の RPG やアドベンチャーゲームも作れてしまいます。ちなみに "PICO" は日本語の「ピコピコ」から来ているそうです。


どせいさん味がある日本語フォント

ソースコードは以下の通りです。画面での見た目と少し異なるので注意してください:

s1 = 'はんにんはヤス'

s2 = 'ミンナニハナイショタ゛ヨ'

s3 = 'オレよりつよいやつに'
  .. 'あいにいく'

s4 = 'ハ゜ワ-をメテオに!'

s5 = 'いいて゛すとも!'

s6 = 'またせたな!'

s7 = 'わっひ゜-!'

日本語の入力はソースコードエディターで行います。ひらがなは Ctrl-J 、カタカナは Ctrl-K で入力モードになります。ローマ字変換で文字を入力します。

ただし、こちらも制限があります。次の点に注意してください:

  • 濁音と半濁音はそれぞれ単独の 1 文字として扱われます。たとえば「だ」なら、 P8 Lua では「た゛」の 2 文字になります。外部のエディターで「だ」を入力すると、ロード時に文字化けします。
  • ひらがなとカタカナ以外の全角文字は、句読点を除いて文字化けします。「!」や「?」も文字化けするので、半角文字を使ってください。
  • 文字化けしたまま save で保存すると、文字化けした状態で上書きされます。外部のエディターでの編集時は注意してください。
  • PICO-8 の文字コードは UTF-8 のみ対応しています。 UTF-8 以外の文字コードで編集したソースコードは、ひらがなとカタカナも文字化けします。

入門記事

PICO-8 の入門記事は素晴らしい記事がいくつもあるので検索していただくとして、ここでは PICO-8 ZINE という小雑誌を紹介します。

PICO-8 ZINE は PICO-8 コミュニティの有志による小雑誌で、 PICO-8 のゲーム開発に役立つ情報が詰まっています。 PICO-8 の作者も参加しており、 4 冊目まで発行されています。 1 冊目は日本語に翻訳してくださった方もいますので、ぜひ読んでみてください。

PICO-8 ZINE #1 では開発ツールの使い方と、簡単なゲーム (スカッシュ) を作るチュートリアルが掲載されています。一通りなぞれば、すぐにでもゲーム開発を始められるでしょう。

その他のドキュメント

公式ドキュメントとコミュニティの Wiki を紹介しておきます。 PICO-8 の情報は他にも書いてくださっている方がたくさんいるので検索してみてください。

PICO-8 の基礎知識

P8 Lua

PICO-8 で使われる Lua は、本家の Lua とは異なる PICO-8 専用のサブセット P8 Lua です。文法は Lua 5.2 相当ですが、機能は大きく制限されています。主な違いを以下に示します (より詳しく知りたい方は Going from Lua 5.2 to PICO-8's Lua を参照してください) :

  • 組み込み変数・関数は一部のみ使えます。
  • メタテーブルはセットできますが (setmetatable) 、取得 (getmetatable) はできません。
  • 組み込みモジュールは提供されません。 stringtablemath も使えません。その代わりとなる最小限の API が用意されています。
  • PICO-8 用の API が追加されています。
  • PICO-8 が管理するディレクトリにあるファイルのみロードできます。
  • GC の操作はできません。
  • 整数は 16 ビットです。最大値は 32767 、最小値は -32768 です。加算で最大値を超えるとオーバーフローとなり、符号が反転します。
  • 浮動小数点数は 32 ビットです。 Lua は 64 ビットなので、精度は半分になります。

これらの厳しい制限は一見不便なようで、「覚えることが少ない」というメリットがあります。 Lua について全然知らなくても、文法だけ調べればすぐに開発を始められます。

トークン

PICO-8 はソースコードのサイズを「トークン (token) 」という単位で扱います。ソースコードの文字数が最大 (65535) に満たなくても、トークン数が 8192 個を超えたら容量オーバーになります。

以下の要素がトークンとして扱われます。

  • 変数
    • 変数名の長さはトークン数に影響しない
  • キーワード (local, end を除く)
  • 演算子
  • 括弧 (左右のペアで 1 トークン)
  • リテラル (nil, true, false, 数値, 文字列)
    • 文字列の長さはトークン数に影響しない

以下の要素はトークンとして扱われません。

  • カンマ (,)
  • ピリオド (.)
  • セミコロン (;)
  • コロン (:)
  • ダブルコロン (::)
  • 閉じ括弧 (), ], })
  • 単項演算子 (-, ~)
  • local キーワード
  • end キーワード
  • コメント

ソースコードのトークン数はコードエディター画面の右下に表示されます。

または、コマンドモードで info コマンドを実行しても確認できます。

開発中のソースコードのトークン数をときどき確認して、自分のやりたいことがどの程度の容量を必要とするのかの目安を把握しておくとよいでしょう。といっても、最初はあまり窮屈に捉えなくてよいと思います。

P8 ファイルのフォーマット

拡張子が .p8 のファイルは、 Lua のプログラムとその他のすべてのデータを含むテキストファイルです。エディターモードで編集したスプライトや音楽のデータは 16 進数のテキストで表されます。以下のテキストデータは demos/hello.p8 の内容です (データ部分は省略しています):

pico-8 cartridge // http://www.pico-8.com
version 19
__lua__
-- hello world
-- by zep

music(0)

function _draw()
	cls()

...

__gfx__
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
...

__sfx__
0110000000472004620c3400c34318470004311842500415003700c30500375183750c3000c3751f4730c375053720536211540114330c37524555247120c3730a470163521d07522375164120a211220252e315
...

__music__
00 00044208
00 00044108
...

.p8 ファイルのフォーマットは、ヘッダーと 7 つのセクションで構成されます。セクションは __xxx__ の形式で始まります。各セクションはデータがなければ省略しても問題ありません。

ヘッダー

.p8 ファイルは以下の 2 行で始まります:

pico-8 cartridge // http://www.pico-8.com
version 19

1 行目は固定のデータで、 2 行目は対応する PICO-8 のバージョンを示します。ただ、バージョンは特にゲームの動作やフォーマットに影響しないようです。

Lua セクション

__lua__ で始まるセクションは Lua のソースコードです。このセクションで重要なポイントは、冒頭の 2 行のコメントです:

-- hello world
-- by zep

これらのコメントは、カートリッジ画像のラベルの下部のテキストに表示されます。

また、外部のテキストエディターで編集する場合は、コマンドモードで save コマンドを実行するときに注意してください。ひらがなとカタカナ以外の非 ASCII 文字は PICO-8 上で文字化けし、 save を実行すると文字化けした状態でファイルが上書きされてしまいます。

その他のセクション

Lua 以外のセクションを以下に示します。自分で編集することはほとんどないと思うので、詳細は省略します。

  • __gfx__: スプライトシート
  • __gff__: スプライトのフラグ
  • __label__: カートリッジのラベル画像
  • __map__: マップ
  • __sfx__: サウンド (効果音)
  • __music__: BGM

PICO-8 のディレクトリ構成

PICO-8 に関するファイルは以下のディレクトリにあります:

  • Windows: C:/Users/Yourname/AppData/Roaming/pico-8/
  • macOS: /Users/ユーザー名/Library/Application Support/pico-8/
  • Linux: ~/.lexaloffle/pico-8/

このディレクトリのうち、とりあえず覚えておきたいデータを以下に示します:

  • config.txt: PICO-8 の動作を制御する設定ファイル
  • carts: コマンドモードからロード可能なカートリッジを含むディレクトリ。 demos 以下にデモのカートリッジがあります。
  • cdata: カートリッジ実行時のセーブデータ

カートリッジとセーブデータのパスは変更できます。詳細は以降の「PICO-8 の設定」を参照してください。

PICO-8 の設定

設定ファイルのパスは上記の「PICO-8 のディレクトリ構成」を参照してください。

PICO-8 の設定項目はたくさんあるので、最初に設定しておきたい項目のみ紹介します。

  • root_path: カートリッジを含むディレクトリ (carts) のパス
  • cdata_path: セーブデータ (cdata) のパス

開発の際はカートリッジのファイルを直接編集することになるので、 root_path は管理しやすいパスに変更しておくとよいでしょう。開発データを Git で管理するなら、 carts を丸ごとリポジトリに含めるのが手っ取り早いです。

基本的な使い方: コマンドモード編

コマンドモードとエディターモード

PICO-8 を起動すると、短いアニメーションのあとに真っ黒な画面と少々のテキストが表示されます。


起動アニメーション

これが「コマンドモード」です。プロンプト (>) の右側に実行するコマンドを入力します。たとえば、 ls を実行すると指定したディレクトリの内容を表示します。ディレクトリのパスは PICO-8 が管理するディレクトリが基準になります。


ディレクトリの内容を表示する

PICO-8 で入力するアルファベットはすべて大文字として表示されます。大文字と小文字の区別はありません。

help でコマンドリストとその他のドキュメントが表示されます。コマンドは少ないし簡単です。 help の引数にトピック (lua など) を指定すると、そのトピックの詳細なドキュメントが表示されます。ドキュメントは幅広くカバーされているのですが、 PICO-8 上だと読みにくいのが難点です。


ヘルプ

コマンドモードでエスケープキーを押すと「エディターモード」に移行します。右上のアイコンをクリックすると他のエディターを表示します。もう一度エスケープキーを押すとコマンドモードに戻ります。
 

エディターモード

PICO-8 の終了と再起動

PICO-8 を終了するには、アプリを終了するか shutdown コマンドを実行します。

再起動は reboot コマンドを実行します。再起動すると、入力済みのすべてのプログラムが消去されます。

コマンドラインで起動する

PICO-8 はコマンドラインでも起動できます。

Windows: PICO-8 のディレクトリに移動し、ターミナルで pico.exe を実行します。 デフォルトの PICO-8 のインストール先は C:\Program Files (x86)\PICO-8 です。以下は Powershell での例です。

PS C:\Program Files (x86)\PICO-8> .\pico8.exe

macOS: ターミナルで /Applications/PICO-8.app/Contents/MacOS/pico8 を実行します。

/Applications/PICO-8.app/Contents/MacOS/pico8

コマンドラインで起動するメリットをいくつか紹介します:

  • デバッグメッセージ (printh()) をターミナルに出力できます。 PICO-8 は画面が狭いので、ゲーム画面上でデバッグメッセージを表示するスペースを確保するのが難しいです。
  • カートリッジを指定して起動できます。 PICO-8 はカートリッジがロードされた状態で起動します。
  • 複数の PICO-8 を起動できます。たとえば、同じゲームでも内容が異なる複数のカートリッジを用意し、複数の PICO-8 を同時に起動してゲーム内容を比較できます。

カートリッジをロードする

コマンドモードで操作できるカートリッジは、 PICO-8 の carts ディレクトリに含まれるファイル (拡張子は .p8) のみです。外部からカートリッジのファイルを取得した場合は、 carts 以下にコピーしてください。

カートリッジをロードするには load にカートリッジを指定して実行します。たとえば、デモ JELPI (carts/demos/jelpi.p8) をロードするには load demos/jelpi を実行します (拡張子 .p8 は省略可能です) 。

ロードしたカートリッジのプログラムは PICO-8 のメモリで保持されます。カートリッジをロードしたら、エスケープキーを押してエディターモードを開いてみてください。

BBS カートリッジをロードする

公式フォーラムの BBS では、ユーザーが投稿したゲームを Web 上で遊ぶことができます。 それに加えて、 PICO-8 は BBS に投稿されたゲームのカートリッジのダウンロードをサポートしています。

BBS カートリッジをダウンロードするには、 load の引数に BBS カートリッジの ID を指定します。たとえば 私が投稿したブロック崩し の ID は #dearblocksan-1 です。次のコマンドでダウンロードできます:

load #dearblocksan-1


BBS カートリッジのダウンロード

BBS カートリッジの ID はゲーム画面の下にあります。 # で始まるテキストがカートリッジの ID です。

プログラムを保存する

編集中のプログラムを保存するには save コマンドを使います。引数は保存先のカートリッジ名です (拡張子 .p8 は省略可能です) 。引数を省略すると、ロードしたカートリッジを上書きします。

拡張子を .p8.png にすると、プログラムを埋め込んだ特殊な PNG 画像で保存されます。カートリッジを配布するときは画像にするとゲーム内容がわかりやすいです。

プログラムを実行する

PICO-8 で編集中のプログラムを実行するには run を実行します (ショートカットは Ctrl-R) 。実行中にエスケープキーを押すと、プログラムの実行を中断してコマンドモードに戻ります。

スクリーンショットと録画

PICO-8 はスクリーンショットと録画をサポートしています。それぞれ Ctrl キーでショートカットが用意されています:

  • Ctrl-6: スクリーンショットを撮ります。撮った画像はデスクトップに保存されます。
  • Ctrl-7: カートリッジ画像用のスクリーンショットを撮ります。画像は PICO-8 内で一時的に保存されます。
  • Ctrl-8: ゲームの録画を開始します。デフォルトでは 8 秒間の録画が可能です。 8 秒を超えると、 8 秒前からの録画内容が上書きされます。 PICO-8 は常に録画を行っており、 Ctrl-8 は録画の開始時間を (Ctrl-8 を押した時間に) リセットします。
  • Ctrl-9: 録画を終了します。録画した動画は GIF 画像としてデスクトップに保存されます。録画した動画のフレームレートは 30 fps です (正確には 33.3 fps) 。音声は含まれません。

録画時間を 8 秒以上に設定するには、コマンドモードで CONFIG GIF_LEN 秒数 を実行します (最大 120 秒) 。以下は 60 秒に設定する例です:

CONFIG GIF_LEN 60

基本的な使い方: プログラミング編

新しいゲームの開発を始める

新しいゲームの開発を始めるときは、 PICO-8 を起動してからカートリッジをロードしていない状態でコマンドモードで save でカートリッジを保存します。編集中のデータがあるけどいちいちアプリを再起動したくないのであれば、コマンドモードで reboot を実行すれば PICO-8 が再起動して編集中のデータをすべてクリアできます。

既存のカートリッジをベースにするなら、そのカートリッジのファイルを PICO-8 外で複製しても問題ありません。

ゲームループ

PICO-8 のプログラムの基盤は「ゲームループ」と呼ばれる無限ループです。延々と呼ばれ続ける特別なコールバック関数 _update()_draw() がゲームの中核になります。これらは ユーザーが定義すべき関数 です。 _update()_draw() が呼ばれ続けることを利用してゲームを作ります。

プログラムの実行が開始すると、まずもう一つのコールバック関数 _init() が呼ばれます。 _init() は 1 度だけ呼ばれます。その後、 _update()_draw() がプログラムの実行中ずっと呼ばれ続けます。

イメージ図:

_update() はゲームの状態を更新するときに呼ばれる関数です。ゲームの状態とは、変動する進行状況です。たとえば、アクションゲームであればプレイヤーや敵の位置が変化します。 RPG であれば、ストーリーの進行やキャラクターのステータスが変化します。 PICO-8 にこれらの変化を自動的に更新してくれる機能はないので、コントローラーの入力や時間の経過を考慮して更新しなければなりません。そのための処理を _update() で実装します。

_draw() は画面の描画を行うときに呼ばれる関数です。直線や四角形、円などの基本的な図形を描画する関数や、作成した画像 (スプライト) を描画して画面を構築します。描画と言っても、 _draw() が終了するまでは画面に反映されないので、 _draw() は描画の「予約」を行う処理と考えるとよいでしょう。

_draw() では先頭で cls() で画面をクリア (黒で塗りつぶす) してから描画するのが基本です。

例:

function _draw()
  cls()
  -- その他の描画処理
end

基本的に _update()_draw() は 1 秒間に 30 回 (30 fps) 呼ばれます。ただし、 _update() で重い処理を行うと、 PICO-8 は _update() の呼び出し回数を保つために _draw() の呼び出し回数を 15 回まで下げるので注意してください。

60 fps で実行する

_update() の代わりに _update60() を実装すると、 _update60()_draw() が 1 秒間に 60 回 (60 fps) 呼ばれるようになります。より滑らかなアニメーションを作りたい場合や、緻密な操作が必要なゲームを作りたい場合に _update60() を検討してください。

ただし、必ずしも 60 fps は保証されませんので注意してください。まず、 60 fps を選ぶと PICO-8 の処理速度が半分になります。これはハードウェアの制限を守るためでもありますが、あまり古いマシンや非力なマシンだと 60 fps で実行するパワーがないことがあります (その場合は 30 fps または 15 fps で動作します) 。

Lua と同様に PICO-8 にも print() があります。 Lua の print() は標準出力に文字列を出力しますが、 PICO-8 の print() は画面の任意の位置にテキストを描画します。デバッグ用途だけではない汎用的な関数です。

デバッグには、もう一つの文字列を出力する関数 printh() も使えます。 printh() はコマンドラインで PICO-8 を起動していれば、 OS のコンソールに文字列を出力します。 printh()hhost の頭文字です。

ライブラリやツールについて

Awesome PICO-8 にライブラリやツールの情報がまとめられています。この他にも、 GitHub で検索すれば様々なライブラリが見つかります。

PICO-8 向けのツールやライブラリは長期間メンテナンスされていないものが多いので注意してください。基本的に作者の方が趣味で作ったものが善意で公開されているので、機能やドキュメントが不足していても文句を言うのはやめましょう。また、ハードウェアの性能やカートリッジのサイズに制限があるため、高機能なライブラリを使うことが必ずしもプラスの結果にならない可能性もあります。

個人的には、ライブラリを作るのも PICO-8 ゲーム開発の楽しみだと思います。プログラムとしての最善がゲームの最善に直結するとは限りません。キャラクターの動きにおかしな点があっても、それはゲームの立派な個性です。

ゲームを配布する

ゲームが形になり、遊べるようになったら他の人にも遊んでもらいましょう。配布する方法はいくつかあります。

ソースコードを配布する

ソースコード (.p8 ファイル) を直接配布します。最も簡単な方法ですが、ゲームを遊ぶには PICO-8 の購入が必要になります。

カートリッジを配布する

ソースコードをカートリッジに変換して配布します。カートリッジは画像ファイルでもあるので、ゲームの内容がわかりやすいのがメリットです。ただし、こちらもゲームを遊ぶには PICO-8 の購入が必要になります。

カートリッジを作成するには、次の手順を実行します:

  1. カートリッジのラベルテキストを記述します。 Lua のソースコードの先頭に 2 行のコメントを記述します。 1 行目にゲーム名を、 2 行目に作者の名前を記述します。次に例を示します:
    -- my game
    -- by me
    
  2. カートリッジのラベル画像をキャプチャーします。ゲームを実行し、ラベル画像に使いたいシーンで F7 (または Ctrl-7) を押します。キャプチャーした画像は PICO-8 内で保持されます。
  3. カートリッジの画像ファイルを作成します。コマンドモードで save を実行します。このとき、引数に「カートリッジ名 + .p8.png 」を指定します。作成したカートリッジ画像ファイルは carts ディレクトリに保存されます。

フォーラムに投稿する

PICO-8 の開発会社が運営する PICO-8 Forum (英語) にゲームを投稿すると、誰でもブラウザで遊べるようになります。私もピンボール風味のブロック崩しを投稿しています。投稿にはユーザー登録が必要です (無料) 。

投稿方法はこちらを参照してください (英語) 。 別途記事にしたいと思います。

投稿したカートリッジのソースコードは公開されます。ライセンスは CC BY-NC-SA 4.0 を指定できます。 "CC" タグがないカートリッジはソースコードを閲覧できてもライセンスなしの扱いになるので、ソースコードのコピーや流用には気をつけてください。

Web アプリを配布する

PICO-8 はブラウザで実行可能な Web アプリ (HTML + JavaScript) を作成できます。ゲームのロード後、コマンドモードで export コマンドを実行します。作成したファイルは carts ディレクトリに保存されます。

引数で出力形式を指定できるので、配布方法に合わせて選択してください。

単独の HTML ファイル:

export mygame.html

JavaScript のみ:

export mygame.js

ディレクトリ:

export -f mygame

生成されるディレクトリの内容は以下のようになります:

mygame_html/
  index.html
  mygame.js

バイナリを配布する

カートリッジをバイナリ形式 (アプリケーション) に変換して配布します。バイナリ形式だと PICO-8 を購入しなくてもゲームを遊べます。 macOS, Windows, Linux それぞれのバイナリを生成できるので、オフラインでの配布にも向いています。

また、バイナリ形式はコマンドモードとエディターモードが使えません。ソースコードを公開したくない場合はバイナリ形式で配布するのがよいでしょう。

バイナリ形式には次の手順で変換します:

  1. カートリッジのラベル画像をキャプチャーします。ゲームを実行し、ラベル画像に使いたいシーンで F7 (または Ctrl-7) を押します。キャプチャーした画像は PICO-8 内で保持されます。

  2. コマンドモードで export を実行します。引数に「カートリッジ名 + .bin 」を指定します。次に例を示します:

    export mygame.bin
    


    export コマンドを実行したときの出力

    作成したバイナリファイルを含むディレクトリは carts ディレクトリに保存されます。

おわりに

「解像度の低さはともかく、たかだか 16 色のカラーパレットで何ができるんだろう」と考えていた時期が私にもありました。 PICO-8 で使えるカラーパレットはこれだけです。

実際に自分で簡単なゲームを作ってみても、やはりカラーパレットの制約に不満が残りました。ファミコンだって使える色は 50 色以上あります。さすがにもう少しバリエーションが欲しいと。

ところが、最初にピンボールを作ろうとして見つけたゲームが Terra Nova Pinball でした。


Terra Nova Pinball

ボールの動きやギミックの設計もさることながら、たった 16 色のカラーパレットでレトロに留まらないプレイフィールドの表現に驚きました。さらに、フォーラムを覗けばこんなにも多彩なゲームが見られます。

とても 16 色で描けるとは思えない表現力です。少々著作権的に怪しいタイトルも見受けられますが…

しかし、よくよく見れば、やはりたかだか 16 色です。「これなら自分にもできそう」と思いませんか? スプライトの基本サイズは 8x8 、このサイズでは簡単なものしか描けません。逆に言えば簡単でいいんです。「自分にもできそう」だと人生舐めてかかることも、物事を始める大事なきっかけだと思います。まずは PICO-8 の購入からはじめてみませんか?

Discussion