Prism Rushをリリースしました

こんにちは、ゆうです!
前回の投稿でも触れましたが、提出時のトラブルはあったものの、無事js13kGamesのオンライン部門に掲載されました。
今回は、このゲームについて振り返っていこうと思います。
基本的なルールは、画面上に表示されるジェムを相手よりも多く獲ったほうが勝ちという、シンプルなゲームです。
本当にただのリアルタイムもぐらたたきだと面白みがないので、ボタン連打にペナルティを入れたり、周囲のジェムをコンボで獲得できるようにしたりと、いくつかのアイディアを追加しました。
最初の作品は「成長」がテーマでしたが、本作ではより競技性にフォーカスしてみました。
ゲームバランスなどはあまり調整できていないのですが、ローカル対戦でもそこそこ勝てたり、逆に負けたりすることがあるので、カジュアルな対戦ゲームとしてはうまく表現できたのではないでしょうか。
さて、実装についてですが、提出完了から4日、完成から数えるとちょうど1週間ほど経過しているので、少し忘れかけています。
今回のコンセプトであるオンライン実装は、いわゆるサーバーが両者の状態を保有する権威型のオンラインゲームではなく、P2P型のオンラインゲームです。そのため、プレイヤーAとプレイヤーBの画面で同じ結果になることを完全には保証できません。
そのため、ランダムな値をできるだけ排除すること、環境による差をなるべく埋めること、そして同じ入力から同じ動作を数学的に再現できることが重要でした。
今回のオンライン部門ではCloudflareのリレーサーバーを使用できるのですが、そこに送信する値はかなり単純なものなので、その値だけを使ってゲームの動作を再現する必要があります。
いわゆるビットマスクなども登場しましたし、ロック状態やボタンのプレス・リリース状態をエッジ検出できるようにもしました。
今回はひとりでオンラインゲームを作るという試みだったので、両プレイヤーに大きなラグが発生した場合まで十分に実験することはできませんでした。そういう意味では、実際にどこまでうまく動くのかは少し賭けのようなところがあります。
今回は前作より早めに提出できました。また、前作が完全に「作りたいアイディア先行型」だったのに対して、今回は他のゲームをいくつか参考にした点についても触れておきます。
Rainbow Rumbleという作品があったのですが、オンライン実装についてはこの作品のコードを参考にしました。
他にも、ユニコーンそのものを動かすのではなく、ユニコーンの角を使うというアイディアは、他の掲載作品から参考にしたものです。
ゲームジャムなので、他の作品を実際に参考にできるというのは新鮮だったかもしれません。
逆に制約面でいうと、13KBという制約があるので、UI面をあまり凝れなかったのは少し残念です。
前作よりもコード量が増えたのでファイルを分けていますが、今回は前作ほど容量を切り詰めていません。そのため、実装に不備があった場合にも対応できるくらいには余裕があると思います。
とはいえ、これ以上水増しできるほどの余裕はないので、今回はwavedashの実装を見送っています。
ただ、このゲームでスプライトを使いたい放題だったら、果たして満足のいく作品が作れたのかと思うと、そこはやや怪しいところです。
この1ヶ月で、良くも悪くも13KBという制約の中で2作品を作ることができましたが、若干アイディアが出尽くしてしまった感は否めません。
