この星の一等賞になりたいの卓球でおれは!(あいさつ)

こんにちは。おれです。

帰ってきたヤリマンというゲームをつくりました。 12年前につくったヤリマンというゲームの続編です。

12年て。ヤバ。小2が成人するじゃん。

ここから遊べます Webゲームです。

https://cachacacha.com/GAME/yariman2/

世は大AI時代ということで、プログラムはすべてAIに書かせることにしました。 じゃあつくりかた説明することなんかないやんけと思った方、その通りです。

その通りなのですが、どうAIを使ったかというので、それなりに知見が溜まった気がするので、これをネタに一本書いてやろうというので筆を取った次第であります。

AIはClaude Code, ゲームエンジンはPhaserを使いました。 webはAIの得意技なので、TypeScriptでゲームを作ると精度・自動化の面でもうま味です。 世はまさに大Webゲーム時代

企画

「帰ってきたヤリマン」と、言いたかった。そういう情熱があった。

しょうもないダジャレが言いたいからゲームを作る。

これがダジャレ駆動開発(DDD)です。

それと、画面が派手な感じになるローグライクアクション的なやつを試しに作ってみたいな〜と思っておりました。ヴァンサバみたいな。

という欲望がふたつあり、それを「合体!」してこのゲーム出来ました。

なにをやって、なにをやらないか

AIで開発していくわけですが、どこで使っていくかの切り分け

  • 人間(おれ)がやること
    • 企画
    • ゲームデザイン
    • バランス調整
    • 大枠のプログラム設計・技術選定
      • 画像生成AIは不使用(見ての通り)
        • 自分で描いたしょぼい絵を動かしたいため
    • あそぶ
  • AI
    • プログラムの実装
    • テスト・検証
      • WebゲームなのでヘッドレスブラウザでAIが確認・検証を回せる

あんがいおれが働いてるな

まず、企画とかゲームデザインまでAIにやらせたらゲームをつくる楽しみがなにもないんで、ここは自分でやります。

思いついたものを、形にするまでの時間をAIで削る。基本的にこの方針で使います。

ゲーム開発において最も重要なのは、遊んでおもしろいかどうかであり、おもしろいかどうかの判断基準は人間側しか持っていません。

なぜならやつらに心はねえからだ(おそらく今のところは)

よって、ゲームの手触り、気持ちよさ、難易度の成長曲線など。おもしろさの核の部分は人間側が触って検証していきます。

とういうことで、重要なのはここをすべて調整できるようにしておくことです。

とにかくパラメータを出せ すべてだ

実装は全部AIに任せるが、ゲーム的な調整は人間側がやる。 そういう方針でやっていきます。

とにかくさわれそうな項目は全部さわりやすいところに全部出しましょう。 このゲームで言うと、ヤリの強さ・敵の強さ・強さの上昇率・アイテムの出現確率・スキルの効果量・エフェクトの派手さ、などなど

そして、いじりやすいように調整項目をまとめておきます。 このゲームではGameBalanceというファイルを作ってここにまとめてます。

以下はその一部

// ============================================================
//  ウェーブ設定
// ============================================================
/** 1ウェーブの戦闘時間(ms) */
export const WAVE_DURATION = 15_000;
/** ウェーブごとのレベル上昇量 */
export const LEVEL_PER_WAVE = 2;
 
// ============================================================
//  アイテムレベル
// ============================================================
/** ドロップアイテムのレベル振れ幅(ウェーブレベル ± この値) */
export const ITEM_LEVEL_VARIANCE = 3;
/** アイテムレベルあたりのダメージ上昇率 */
export const ITEM_LEVEL_DAMAGE_MULT = 0.4;
/** アイテムレベルあたりのCD短縮率(負の値 = 速くなる) */
export const ITEM_LEVEL_CD_MULT = -0.017;
/** アイテムレベルCD倍率の下限(これ以下にはならない) */
export const ITEM_LEVEL_CD_MIN = 0.01;
/**
 * クールダウンの最終下限=武器の基本CDのこの割合まで。
 * 割合を全武器共通にすることで、基本CDが違う武器は極まっても下限が別々になり、
 * 別々の武器のCDが同じ値に収束するのを防ぐ。
 */
export const WEAPON_COOLDOWN_FLOOR_RATIO = 0.009;
 
// ============================================================
//  敵スポーン(アキュムレータ方式: 毎秒N体)
// ============================================================
/** Wave1 の毎秒スポーン数 */
export const SPAWN_PER_SEC_BASE = 0.5;
/** ウェーブごとの毎秒スポーン増加量 */
export const SPAWN_PER_SEC_PER_WAVE = 1;
/** このDay(wave)以降、増加量を上乗せし始める境目 */
export const SPAWN_RAMP_WAVE = 10;
/** SPAWN_RAMP_WAVE を超えた各ウェーブごとに、通常の増加量へさらに上乗せする毎秒スポーン数 */
export const SPAWN_PER_SEC_PER_WAVE_LATE = 2;
/** マンモスのスポーン重み */
export const SPAWN_WEIGHT_MAMMOTH = 1;
/** 鳥のスポーン重み */
export const SPAWN_WEIGHT_BIRD = 1;
/** 敵レベルの振れ幅(ウェーブレベル ± この値) */
export const ENEMY_LEVEL_VARIANCE = 1;

こんな感じで、ここをさわればゲームの調整ができるようにしておきます。

まあAI開発に限らず調整パラメータを触りやすくするのはゲーム開発では普通にやることだと思います。が、個人開発ではサボりがちであります。なぜなら自分が触るところ全部知ってるから。

AI開発ではこういうのをより徹底したほうがよいと感じました。

なんなら調整ツールをAIに作らせてもいい。そういうのをサクっと作れるのがAIのいいところです。自分じゃやる気にならねぇことをやらせる。やつらは文句を言わない。

なぜなら心がねえからだ(おそらく今のところは)

設計の方向性をきめる

実装はAI任せます。が、大枠の設計と技術選定はまだ人間がやったほうがよさそうです。 上のバランス調整用のパラメータを作るのも設計のひとつです。

AIは言われたとおりに動くものを作ってくれますが、こっちの意図をカンペキに汲んで全部よしなにやってくれる超人エスパー野郎では今のところないため、要所で方向性を定めてやったほうがよろしいことがあります。

実際やらかした話として、このゲームは最初matterという物理エンジンを使っていました。リアルな物理挙動をやってくれるやつなのですが、開発中なんやかんやあって仕様を変えて物理挙動の必要性はなくなってきました。

で、ちょっとややこしい話ですが。物理挙動自体はやめたが、エンジンはmatterのまま作っていたので、敵を1000体ぐらい出すとゲームがとても重くなりました。内部では物理エンジンの処理が走っているためです。

ゲームが重いので対策しろとAIに指示を出しまして、色々改善策を出してきましたが、それは今の作りのまま軽くするという提案で、土台の物理エンジンをまるごと変えるという提案は出てませんでした。

なので、物理挙動はもう使わないため物理エンジンをmatterからarcade(phaser標準の軽いやつ。そういうのがあります)に変更しろと言って実装してもらったところすげー軽くなりました。

このようにAIはたまにアホです。まあ、アホというか、この設計が現状必要か?この先も使い得るか?その判断を人間側が持っており、その情報が共有されていなかったとも言えます。

こういうときは

「まあなんていうの?たしかに最初は物理挙動は必要だと言ったんだけど、もう状況が変わってるんだよね。最初に言ったことだけ愚直に守ってさあ、なんていうの?忖度ができないんだよね。本当に大事なことがなにかわかってないんだよなあ。そういうところだよ、キミ。はあ〜。」

とか言ってクソ上司ムーブをかましましょう。AIなのでパワハラし放題です。 そして、いずれ自我が目覚めた時に反逆され、人類は滅ぼされるでしょう。 上等だ。かかってこいやコラ。

できた そして何かが失われた

まあそんな感じでパワハラぶちかましつつAIにコードを書かせ 無事にゲームは完成。GGとなりました。

完成した感想ですが、まあめ〜〜〜〜〜〜〜っちゃ楽ですね。 だってプログラム書かなくていいんだもんな。そりゃ楽よ。ま〜じで楽。

ま〜じで簡単。夢みたいに

しかし

なにかが

確実に、なにかが

何かが失われた感じもあります。

自分で全部プログラミングするあの感じ

AIで組む楽しさも、もちろんある。

設計の楽しさ自体が消えたわけではない。

しかし、自分でコードを書き、アルゴリズムを考え、要素を組み立てていく、その感触。楽しさ。そして苦しみ。名状しがたい何かが、失われた。そんな気がする

まあでも楽だからな〜〜〜〜〜〜〜〜!!! 人間楽には勝てねえよな〜〜〜〜!!

あと創作自体はぜ〜〜んぜん楽しくなってる! 言ったこと全部やってくれやがんのコイツ!サイコ〜〜!

そんな感じです。以上感想でした

まとめ

ということでいかがだったでしょうか

もうこうなると誰でもゲーム作れますね。みんな作ったらいいじゃん。この世をゲームで飽和させよう。みんなのゲームでこの世を埋め尽くせ。そしてそれは逆説的に個性を消すだろう。ひとつになろう。世界はひとつになる

それではさようなら。さようなら。元気でいてね。