PlaydateゲームをPulpScriptでつくった話
追記(2022.7.13)
itchにPlaydate pulpでつくったピクロスゲームをアップしました。
https://sadakitchen.itch.io/play-gram
知る人ぞ知るマイナーなゲーム端末、Playdate。
知らない人のために簡単に解説すると、ゲームボーイのようなフォルムにくるくる回せるクランクがついた携帯ゲーム端末です。
レトロなのに新しい感じのデザインがグッときます。
端末のデザインはOP-1やOP-Zというかっこいいシンセを作ってるteenage engineering、開発はTransmitやFireWatchなどをリリースしてるPanicです。
Playdateのプレオーダーは始まっているのですが、半導体不足のため実機出荷が遅れている状態です。
で、なんとこの端末、自分でゲームをつくってインストールすることができます。
開発言語はSDKを使ってLua、Cで開発できるのですが、もう少し簡単に開発できる「Playdate pulp」というものがSDKよりも先にリリースされました。
https://play.date/jp/dev/
Playdate pulpでは、独自の言語「PulpScript」を使って自分でスクリプトを書くことができます。
Playdate pulpがリリースされたと同時に、実機が全然届かない悲しさを紛らわすためゲームを作ってみることにしました。
Playdate pulpの特徴
Playdate pulpでできることをざっくりまとめると
ゲーム画面のデザイン作成
BGMやSEの作成
スクリプト作成
となってます。
デザイン作成で特徴的なのが前述のキャプチャのように、ゲーム画面が「グリッド」で区切られ、「タイル」を敷き詰めていくようになっています。
PulpScriptも「グリッド」と「タイル」という概念を中心に作っていくスタイルとなっています。
PulpScriptですが、これが結構クセがすごく、考えることが結構多かったです。
具体的には・・・
配列がない
任意の変数名を指定できない
変数のデフォルト値はすべて0
除算の余りを自分でやる必要がある
全部グローバル変数
複雑な四則演算ができない
playerの挙動を他のspriteタイルへ伝搬するにはemitを使う
文字列操作ができない
etc
といった感じです。ドキュメントはこちら(https://play.date/pulp/docs/pulpscript/)
制限を強くしている代わりに保証された挙動を行うようになっているのかなという印象です。
このあたりはバージョンアップと共にどんどん便利になっていくのではないかなと思います。
BGMやSEについては、正弦波、のこぎり波、矩形波、三角波、ノイズの5種を組み合わせて制作します。
和音ができないところが逆にノスタルジーな雰囲気を醸し出しています。
Playdate pulpでつくったもの
ライツアウト
ピクロス
ライツアウトは最初に作りました。5x5のマスのライトをすべて消灯させるパズルゲームです。
グリッドとタイルと相性がよさそうです。
配列が使えないので、プレイヤーと各タイルに状態を持たせて管理してました。
次につくったのがピクロスで、いわゆるイラストロジックです。
全部で60問作りましたが、問題データの保存をメソッドで持たせることにしたため、かなりカオスなコードになってしまいました。
(上記2点、Playdateが提供しているsimulatorでプレイできるよう、後日ファイルをアップします。)
Playdate pulpでつくった所感
凝ったものを作ろうとすると、かなり無茶な記述をしないといけないですが、ちょっとしたミニゲームを作るには良いツールだと思います。
ゲームらしいものを作るのであれば、SDKを利用するほうがよさそうです。
Playdateはデベロッパーフレンドリーで個人的に応援したいデバイスなので、微力ながら作って応援していきたいところです。
宣伝ですが、Playdate pulpで使えるひらがなフォントを出してるので制作の役に立てていただければ幸いです。
https://github.com/sadakitchen/PlaydatePulp-Hiragana