2016年12月1日 | ブログ記事

PICO-8でゲームを作ってみたはなし

nonsako

どうも。 traP Advent Calendar 2016 初日担当、のんさこです。

今回は "PICO-8" のこととか、それを用いて実際にゲームを作った体験とかを書きます(おもにプログラミングあたり)。

"PICO-8" ってなんぞや

"PICO-8" ($14.99) とは、Lexaloffle Gamesが開発した「空想上のゲームコンソール」です。と言ってもピンとこないでしょうし実際の写真を見たほうが良さそうですね。デモのゲーム "The Adventures of Jelpi" の画面を見てみましょう。

The Adventures of Jelpi (by zep)

かわいい。超かわいい。

正方形の画面、荒いドット、少ない色数…。ゲームボーイカラーを思い出す人もいるのではないでしょうか。あるいはBASICコンソール。写真だけではわかりませんが、音源もPSGっぽい。ぐっと来ます。

そんなPICO-8ですが、ゲーム制作について非常に大きな利点があります。それは、 制作がとっっても楽 なところ。プログラムやグラフィック、マップ、サウンドのエディタもついています。プログラムは "Lua" という既存の言語を用います。保存されるファイルはテキストファイルとして読み込めるため、画面が狭くてコードが書きづらい、という場合には外部のテキストエディタも使えます。Windows、Mac、Linux、Raspberry Piにも対応しており、HTML5に出力可能。「作る」と「共有する」に特化したゲーム機です。

日本語のマニュアル、チュートリアル、リファレンスなんかもあります。入門あたりは以下が詳しいのでぜひ。

とりあえずなんか作ってみた

そんなPICO-8に試験期間が迫る中出会い、一目惚れしたのんさこは、数日迷った末に買ってしまいました。試しに何かしら作ろうと思い、自分が好きなゲーム "Flappy Bird" のクローンを作りました。名前はシンプルに "Flapchick" です。背景とかの絵ごころのなさはゆるしてください。

Flapchick

当たり前ですがPICO-8でゲームを作るのは今回が初めてでした。それどころかLuaも1年近く前に ComputerCraft (MinecraftのMOD) でタートルを動かして以来まともに書いてません。なので先述のPICO-8のマニュアルやLuaのリファレンスを見ながらの亀ペース制作を覚悟しての制作となりました。

最初はLuaのテーブルをただの変数置き場にしか使っていませんでした。関数は全てグローバルにおいていたため、非常にBASIC感あるプログラムになってました(それはそれで趣がある)。しばらくして関数がテーブル内に入ると知って、オブジェクト指向プログラミングにより近いプログラムが書けるようになって、制作スピードが上昇。関数が基本型だと知ってからはコールバック関数に似たものを導入したりもするようになりました。

PICO-8そのものについては、できることが限られている分、学習速度がとても速かったです。スプライトの描画が関数一つ呼び出すだけなのはとても楽でした。9-Patchの描画も関数をつくって楽に行うことができました。スプライトのロードとか考えなくても良かったってのも地味に嬉しかったです。

製作時間としては、ブランクはあきつつも現時点で70時間程で、予想よりも短かったです。また、プログラムがアニメーションなども含めて1000行を超えない程度で割と書きやすかったという印象を持ちました。サクサクと書ける上に出来上がる速度が速くて、とても楽しかったです。

今後どう使っていこう

これらを踏まえた上でPICO-8の今後の使い道を考えたところ、かなりいろいろなことに使えそうなことに気が付きました。

楽しく開発できるという面を考えると、小規模であれば、ゲームを作ってリリースしたり、ゲーム制作時のプロトタイピング、ハッカソンやゲームジャムなどがさらに幸せになるのではないかと思います。教育機関向けのライセンスもあり、実際にその場面で使われてることもあり、プログラミング入門者にもおすすめできそうです。ひょっとしたら、スプライトの回転や3DCGなどの実装の学習にもいいかもしれません。

今のところ、僕は今年12/9に行われる "Ludum Dare 37" でPICO-8を使って出せたらいいなー、と思っています。

グダグダでしたが、PICO-8の魅力が伝わったらうれしいです。以上、のんさこでした。ノシ

おまけ

PICO-8でPとAをランダムに出力して"PPAP"の順に出てきたら"PEN-PINEAPPLE-APPLE-PEN"と出力するプログラムを書きました。「ピコ八郎」です。スペルミスは気にしないでください。

PICO-8-TARO

res = ""

function do_ppap()
local state = 0
local r = 0
local c = "p"

while state < 4 do
r = rnd(1)
if r<0.5 then
c="p"
else
c="a"
end

if c=="p" then
if state~=2 then
state+=1
end
else
if state~=2 then
state=0
else
state+=1
end
end

res=c
yield()
end

res="pen-pineapple-apple-pen"
end

function _init()
cr = cocreate(do_ppap)
end

function _update()
if costatus(cr)~="dead" then
coresume(cr)
else
res=nil
end
end

function _draw()
if res then
print(res)
end
end

この記事を書いた人
nonsako

https://pawoo.net/@nondersin

この記事をシェア

このエントリーをはてなブックマークに追加

関連する記事

2016年12月21日
テックちゃんをつかってゲームをつくろう
naosan
2016年12月16日
RPGについての考察
Kato_Kaoru
2016年12月11日
ゲームの当たり判定~点と線分~
ninja
2016年12月5日
マリオメーカーで学ぶステージ作り考察
dermas
2016年12月4日
神ゲーの作り方
MENTOS
2016年12月4日
開発環境不要の初心者でもウサギでも作れるVRゲーム with A-Frame
hukuda222

活動の紹介

カテゴリ

タグ