traP Member's Blog

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
このエントリーをはてなブックマークに追加

コメントを残す

メールアドレスが公開されることはありません。