開発ブログ|トルネコ風「冒険者と魔石の迷宮」をクロードAIで作った話

お得な情報
DEV BLOG

冒険者と魔石の迷宮
開発記

ブラウザ1枚・バニラJSで作る、トルネコ風ローグライクのつくりかた

#ローグライク
#Canvas
#個人開発
#localStorage

はじめに

冒険者と魔石の迷宮」は、いわゆるトルネコ風の不思議のダンジョン系ローグライクを、外部ライブラリなしのバニラJavaScriptとCanvasだけで作ったブラウザゲームです。

⇧上からプレイできます。⇧

 

1階に入るたびに地形が組み直される手続き生成ダンジョン、拠点となる町、装備・アイテム収集、そして仲間モンスターとの生活まで、HTML1ファイルの中に詰め込んでいます。

 

今回はその中身を、実装した機能を振り返りながら紹介します。

ダンジョンは毎回生成される

このゲームの心臓部は手続き生成マップです。部屋を配置してから通路でつなぎ、視界はプレイヤーの周囲だけを照らす視野計算(FOV)方式にしています。奥の部屋は暗闇に沈んだままで、足を踏み入れて初めて明かりが灯る、あの感覚を再現しました。

マップ生成の流れ
  • 部屋をランダムに複数配置
  • 部屋同士を通路(縦・横)でつないで迷路として成立させる
  • 階段・アイテム・モンスターを空いているマスに配置
  • プレイヤーの視野だけを都度計算して描画

階を進むごとに緊張感が増していく設計で、6階以降には一定確率でモンスターハウス――部屋いっぱいに敵が眠っている、踏み込んだ瞬間に一斉に目を覚ます地獄の部屋――も出現するようにしました。運悪く扉を開けてしまった時の絶望感は、実装していて自分でも笑ってしまいました。

拾って、鑑定して、強化する

アイテムは拾った時点では正体不明。使うか鑑定するまで名前が伏せられている、ローグライクではおなじみの仕組みです。杖や巻物、盾や剣を集めながら、店で売る・合成する・強化するを繰り返して冒険者を育てていきます。

合成(シンセ)

持っているアイテム同士を掛け合わせて、より強い装備を作り出す仕組み。

強化(エンハンス)

素材を消費して武器や防具の性能を底上げする、いわゆる+値強化。

さらに床には仕掛けとしてや、起動すると強力な効果を発揮する魔石(ジェム)も配置しました。魔石を使った一撃はロマン砲的な立ち位置で、ピンチを一発でひっくり返せる手応えを狙っています。

町という、もうひとつの主役

ダンジョンから生還すると戻ってくるのが拠点の町です。宿屋・鍛冶屋・牧場・ギルドといった施設が並び、掘り出したお金や素材を使って生活基盤を整えていきます。牧場では仲間モンスターを預けたり呼び出したりでき、育成の幅がダンジョン探索だけに閉じないようにしました。

町にいるキャラクターたち
  • 受付嬢シルヴィア(ダンジョン受付)
  • 宿の娘アリア(宿屋、そしてヒロイン枠)
  • 牧場主マリル(仲間モンスターの世話役)
  • ドワーフ職人バルク的な鍛冶屋ポジション

踏破するたびに進む物語

このゲーム最大のこだわりが、ダンジョンをクリアするたびに挿入されるストーリーイベントです。10階、20階、30階……と踏破階層が伸びるごとに、町の人間関係や冒険者自身の人生までもが進んでいきます。

宿の娘アリア(20階制覇後)
「…ば、バカじゃないの。20階まで制覇するなんて。ま、まあ…少しはやるじゃない!」

ここから物語は結婚、出産、そして国王からの叙爵、最終的には大魔王討伐からの「勇者」の称号獲得まで一直線に進みます。ただの周回ゲームで終わらせず、「もう一段深く潜りたくなる理由」を物語側から用意したのが今回のポイントです。

「またダンジョンに潜りたい」の動機を、強さの数値だけでなく物語の続きにも置いてみた回です。

解放されていくダンジョンたち

ダンジョンは1つではなく、踏破実績に応じて次々に解放される複数系統で構成しています。

階層帯の呼び名(一部抜粋)
  • もっとふしぎなダンジョン(10階クリアで解放)
  • かなりふしぎなダンジョン
  • すごいふしぎなダンジョン
  • やばいふしぎなダンジョン
  • エグいふしぎなダンジョン(持ち込み禁止・アイテム名不明の縛りつき)

名前がだんだん雑になっていくのはわざとです。振り切ったネーミングの方がプレイヤーの記憶に残ると思っています。

敵とレアモンスター

敵はスライム・コウモリ・カエル・ゴブリン・ゾンビ・スケルトン・オーク・サメ・ヴァンパイア・ドラゴンといった定番ラインナップに加えて、低確率で出現する経験値特化のレアモンスターを用意しました。見つけたら思わず追いかけたくなる、宝くじのような存在です。

技術的なこだわり

今回もライブラリは一切使わず、Canvas描画・Web Audio APIによる効果音とBGM・localStorageによるセーブデータ管理まで、すべて素のJavaScriptで組んでいます。

  • スマホのタップ操作を前提にしたD-pad・長押し・スワイプ対応
  • セーブデータは町データとキャラデータを分離して管理し、仕様変更に強い形に
  • 敵のターン処理・移動経路探索(BFS)を軽量に実装し、動作をもたつかせない工夫

特に力を入れたのは「1階ごとの生成が毎回破綻しない」ことの担保です。部屋と通路のつなぎ込みでハマった時期もありましたが、テスト生成を繰り返して安定させました。

おわりに

「冒険者と魔石の迷宮」は、ローグライクの手触りと、じわじわ積み上がっていく人間くさい物語を両立させたくて作ったゲームです。まだ機能追加のアイデアは尽きていないので、今後もアップデートを続けていく予定です。

プレイしてくれる人が「もう1階だけ」と言いながら気づけば大魔王を倒している、そんな体験になっていたら嬉しいです。

 

冒険者と魔石の迷宮 — 個人開発記録

 

コメント