実際製作したゲームのプレイはこちら→ https://pianoworks.github.io/shift_or_shoot/index.html
↑精霊たちの最後の街で行われているボードゲーム。
このルールを考案していました(前回記事はこちら→ https://vcos999.com/piano/2039/ )
これをWeb上で遊べるゲームとして形にしよう!という空想が沸き起こり、多くの苦難を経て公開に至ったのでその記録を残します。何しろ、ぴあのはプログラム言語というものをこれっぽっちも勉強したことがなかったので…。Geminiさんその他にお助け頂きながら、何とか完成させました。いやー、プログラム言語関係の生成AIの力はスゴイですね。
1.画像からルールを推測する
さて、ゲームを開発するとしても、ルールが分からなければ作りようがありません。
冒頭の画像から読み取れることを列挙します。
(1)恐らく、よーいドン!で一斉に駒を動かすスピード勝負のゲームではない
2人の長考する姿勢が見られ、先手後手、交互に駒を動かすタイプのゲームのようです。
(2)マス目の概念がない
盤上には結構ランダムに板が置かれています。少しずれていたり、これってボードゲームのルールにとってはかなり重要です。マスがないということは、「横に並んでいる」「左右から挟んでいる」「ナナメで接している」といった概念が存在しないので、「あと1歩前に出れば駒を取れる」というようなルールは作れません。
この2つを満たしつつ、勝ち負けが発生するような……左の板は右へ、右の板は左を目指す……
そうだ、
↑これだ! と閃きました。
・自陣から敵陣へ板を弾き出すことで得点になる
・サイドに落ちたらペナルティ
・板は攻撃にも防御にも使われるので、駆け引きが生じる
…などの基本ルールやコンセプトが考案されました。
この時点で、「あっ、これゲームとして成立しそう」とぼんやりと思っていました。
2.生成AIとの共同作業
さて、以前から、生成AIはプログラミング言語の作成に長けているという事は存じていましたが、何と指示すれば良いのか、また色々な言語がある中でどの言語で記載してもらえば良いのか。「ゲーム プログラミング言語」などをキーワードに検索を進め、何となく行き着いたのがPythonという言語でした(それが正解なのかどうかは後になって分かりました)。
↑Geminiとのやり取り。時々ProよりもFlash(無料版)の方が分かりやすい回答をする
pygameをPCにインストールし、Geminiにプログラムを書いてもらい、
Visual Studio Codeというアプリケーションでプログラムの編集やテストプレイを進めていきました。
意図しない動作を一つ一つ潰していくのに苦労しました。
↑試作段階。ドラッグして弾き出す(モンスターストライク式?やったことないけど)。
相手の板をゴールラインから押し出しても2点get、自陣にゴールしても2点get…など、
不具合だらけだったので何度か心が折れそうになりました。
「その不具合を、どのようにAIに言語化して伝え、修正してもらうか」ということの練習になりました。
3.よりリアリティを求めて
しっかりと遊べるゲームを完成させるために、幾度もテストプレイと修正、改良を行いました。
・弾かれた板が吹っ飛びすぎてすぐペナルティになる → 摩擦係数の検討
・板の端を弾くと回転する力も発生するのでは → 中心からどれくらい離れた箇所をドラッグするかによる回転係数と回転摩擦係数の導入
・盤面が広すぎてすぐシュートが決まってしまう → 板の大きさ、盤面の大きさの検討
・グラフィックの向上、板と板の衝突音などサウンドエフェクトの導入、UIの改良 → Skyに寄せた表現の検討と導入
・Pythonで書かれた言語はブラウザ上で動作させるのにひと手間必要 → もっと手軽に遊んで頂けるよう、全面的にJavascriptに書き換え
・公開する場所の選定 → GitHubというところにhtmlファイルを置けばアクセスしてもらえると判明
↑開発中の画面。まだキャンドル表示の演出やBGMのon/off機能は未実装
衝突音は「星の子が壁にぶつかった時の音」にしました。耳障りが良い、高い音。
TGC公式が公開している『Sky contents library』から無料ダウンロードできます。
ちなみに、ゲーム中のBGMは花鳥郷で流れる曲『Aviary Village』。
…でした、途中までは。
4.困難を乗り越えながら
開発の中盤に、2つの困難が発生しました。
(1)TGCの規約に、「TGCの知的財産を使用したゲームの製作、販売を禁ずる」という文言が発見された
本来はコピーゲームやMod(追加ストーリーなどオリジナル要素の付加)を禁止するための規約と思われますが、厳密に読めば私のしているゲーム開発はTGCの知的財産を使用せずに進めなければならない、と言えます。このため、泣く泣く衝突音やBGMを別の音源に差し替えることとなったのでした。
→サウンドエフェクトは『効果音ラボ』で探し、少し残響を入れるなど編集を加えました。BGMは自作曲『Nestin’ and Restin'(巣作りの季節)』を流すことにしました。賑やかで可愛い感じの曲でお気に入りです。
(2)公開された映画『Sky ふたつの灯火』の1シーンで、ボードゲームが全然違うルールで遊ばれていた
↑映画の中ではチェスみたいなゲームでした。ぉぃ。
マス目があるゲームに変わってるとか。ぉぃ。
前提から崩れてしまうこの演出に、密かに頭を抱えていましたが、ある解釈を見出しました。
「そうだ、Yuiさんが言っていた。『映像チームに作ってもらったものを観ると、マナティの鳴き声など、リアルのマナティっぽい低い声だったんですね。Skyの想定している表現に寄せていくために苦心しました』…きっとこれは、映像製作チーム独自の演出だ!」
つまりSky本編のボードゲームと映画の中のボードゲームは別物ですから、作り続けても間違いではない、という大変都合のよい解釈をして、開発を継続することにしました。
5.そして完成へ…
↑タイトル画面の実装、BGM, SEのon/off、説明画面、クレジット、
1ゲーム終了後にタイトルへ戻るか次のゲームを開始するかの選択…など、
一連のゲームとしての「流れ」を整えました。
・初めは対人戦のみの想定でしたが、テストプレイをして頂いた方から「対戦相手がいないようです。」とのお言葉を頂き(コレは結構胸に刺さった笑)、一念発起!対CPU戦の実装、つまり「戦況に応じて打ち方を変えるプログラムの作成」へ進みました。
・Easyモードではミスショットを20%の確率で起こす… Normalはチャンスとみるとシュートを打つように… Hardは攻撃も防御も正確に…など、Geminiさんに段階を分けたCPUプログラムを作成してもらい、何度も何度も対戦し改良を重ねました。
・Hardモードを「きちんと強くする」のに一番時間がかかりました。「実現可能なシュートコースがあれば、それがどんなに遠くても正確にシュートを決めてくる」の他、いくつかの指示を追記しました。苦労の甲斐あって、今でも完封負けすることがある位に強いCPUが出来上がりました。
6.iOSへの対応(技術的なおはなし)
開発終盤、iOSユーザーの方を中心にゲームが開始されないという不具合に対応しました。私はiPhoneユーザーでないので、何の不具合で開始されないか中々分からずにいました。幸い家族はiPhoneを使っていたので、iTunes経由でWindows PCに接続し、PCからiPhoneのwebコンソールの挙動を観察してみました(なんか色々調べたらそれで原因が分かることがあるという情報を見つけたのでその通りにした)。
どうやら、音声ファイルのダウンロードが行われる前でストップしているようです。
↑この答えに行き着くまでに数日間かかった
平たく言うと、「そのURLを開いた直後に音声のロードが開始されるような仕組みはブロックされる。プレイしている人が画面をタップするなど、何らかの操作をきっかけに音声がロードされる仕組みであればブロックされない」というiOS独特の挙動が原因でした(全てのiPhoneユーザーの方に遊んで頂けてはいないので申し訳ありませんが、これがぴあのの限界です)。音声ロードのタイミングに関する記述を修正し、終了となりました。
7.あとがき
多くの方にShift or Shootをプレイして頂き、好評価のお声、大変ありがたく思っております。「Sky王国の傍らを彩る物語を紡ぐ」をコンセプトに色々と創作をしていますが、今回は音楽ではなくミニゲームということで、手探りの多い新たな挑戦でした。こういう活動って、あれこれと悩んだり、改善の方法を考えたりしている最中が楽しいですね。いや、楽しいのか…?うーん、目の前の問題をどう解決すればいいのか訳が分からなくて苦しい時もありますが、とにかく「充実している」時間でしたね。これからも色々なデジタル作品をお届けしていければと思います。
ここまでお読み頂きありがとうございました。おつぴあの!🎹🐈🐾