アザリスの迷宮開発日記 #01 ユーザー拡張型・リアルタイムバトル・ダンジョンRPGについて
序文
Steamにて2023/06/09に公開、またそれまでPlayTest版も公開しております。
URL : https://store.steampowered.com/app/2345040/_/
販売は約300円で、早期アクセス版として公開予定で、その後も随時、いろいろと増やせて行けたらと思っています。
さて、わりと挑戦的なこのゲーム制作について、少し見通しがたってきたので、つらつらと書き記したいなと思います。
どんなゲームなの?
どんなゲームかと言われると、カードワースというゲームを出発点とし、そこのシナリオのありかたを3DダンジョンRPG風に、戦闘をリアルタイムに、その他いろいろな影響を受けて自分なりに再構築したものです。
・キャラクターを作成、それらの画像や音声は選択でき、拡張ができる
・1人称視点のダンジョンRPG、ハック&スラッシュ
・戦闘はリアルタイム
・作成したキャラクター達も会話イベントに参加する
・ユーザーが独自に、ダンジョンや街などのエリアを追加できる
というのを目指して作っています。まだ、いろいろと残っていますが、何を作りたいのかを示せるようなところまでには至ったように感じています。
キャラクター作成は、絵素材や音声は既存というのが定番です。
そうした例外としてはエルミナージュIIや剣の街の異邦人があげられるでしょう。キャラクターの画像は独自のものを用意し、利用できます。さらに、音声も可能です。
さらに、ウィズライクらしいランダムな要素があります。ウィズライクはキャラクター作成時になにがしか、ランダムで割り振られてしまう、不自由なものがあるのです。
その、不自由さもウィズライクということで、本作ではエレメントリングの内容がそれにあたります。
戦闘で、いざ、回復をしたい、と思っても回復スキルに必要なエレメントがないとか、キャラクターによってはガツガツ攻撃しやすいエレメントが溜まりやすかったりと、ランダム要素が入っています。
ダンジョンRPGは、1人称視点で、探索要素だけをとるとオーソドックスな形式だと思います。
戦闘は独特のリアルタイムバトルです。
古き良き……ファイナルファンタジーVなどの影響を受けつつ、なぜかそこにマジックザギャザリングやカードワースの戦闘を混ぜた結果、一味違う戦闘システムとなりました。
キャラクターごとに一定時間でエレメントがいくつかたまります。
このエレメントを消費して行動します。行動によっては必要なエレメントの指定があるので、エレメントはたくさんあるけど、必要なエレメントがなくて思った行動ができない、ということが起こります。ちょっとマジックザギャザリングの土地事故みたいですね。
これはカードワースも似たようなところがありまして、独自解釈で再現したのが本作です。
さらに、これがキャラクター1体ではなく5体ですから、最初はなかなかたいへんかと思ったので、最初のスキルは基本的にエレメントの数だけ足りていればよいものを中心にしました。
まだまだ実現はし切れていませんが、どうしてもキャラクターが作成できるゲームは、そのキャラクターがしゃべらない、セリフがない、というのがほとんどです。
それは当然なのですが、パーティーでもいろいろと会話してもらいたい、セリフがあってほしく、さらに口調も含めてどうにかならないかと挑戦しているのが本作です。
ユーザーは、キャラクターの画像や音声だけではなく、ダンジョン、街、会話イベント、アイテム、スタイル、スキルの拡張ができるように現在準備中です。
カードワースの何を引き継いだのか、引き継がなかったのか
カードワースというのは、ユーザーがシナリオやキャラクター、アイテムやスキルを追加できる古い独特なゲームです。
シナリオを作る人の中には、ダンジョン部分を、独自に、無理くり、頑張って作る、なんてこともされていました。
カードワースはどちらかというとノベルゲームよりで、3Dダンジョンという仕組みはなく、シーンとして抽象化されてたものを無理くり作っている人もいる、といった状態でした。
だからこそ、3Dダンジョンのハクスラ要素を手軽に作って共有できるダンジョンRPGがあってもいいんじゃないか、という思いがありました。
カードワースには、プレーヤーが作ったキャラクターにもセリフがある、というのが特徴です。
これはTRPGの会話の要素を強く受けているためです。とはいえこちらも、シナリオ制作側に大きな負担があります。
というのは、誰がリーダーで参謀なのかヒロインなのかシステム側は設定しません。
また、しゃべるキャラクターにあうよう、1つのセリフでも、若者用、老人用、子供用とたくさん作るという状態になっています。
この点を、克服できないかな、と挑戦をしたのが本作です。
少し言い変えるなら、エルミナージュのようなダンジョンRPGのハック&スラッシュを、シナリオの代わりにユーザーが増築できるようにしようとしたのがアザリスの迷宮です。
いろいろなところでカードワースの影響は残っています。
プレーヤーキャラクターになんとか会話イベントに参加させようとしたり、キャラクター作成でのフォルカナもその1つです。
カードワースでは、勇猛、智将などいくつかキャラクター作成時に選択できるタイプが職業と違ってあるのが特徴でした。
戦闘でも影響があり、行動スキルを所持していても、戦闘の状況によって使えたり使えなかったりする、そんな仕組みも疑似的に再現しています。
反面、カードワースのように、ユーザーがシナリオ等を作成する際のエディターまでは作れていません。ダンジョン部分は用意し、Githubでもコードを公開しようと思ってはいますが、全ての要素を網羅した統合開発環境までは厳しいかな、と思っています。
また、今のところ戦闘中に会話イベントを挟めません。
ウィズライクゲームっぽかったり、ちがったりする
ウィズライク、ダンジョンRPGという視点から見ると、ダンジョンの探索という点、ドロップ品の罠、アイテムの鑑定などを引き継いでいます。
ゆくゆくはダンジョンにも仕掛けや、ダメージ床、テレポーターなどの罠も追加していきたいと考えています。
とはいえ、戦闘やキャラクターの作成はというと、独自色やミックスした要素が強いところもあります。
戦闘はリアルタイムバトルなので、ターン制とは全く異なります。
また、全体的に操作方法はパソコンの、マウスとキーボードを意識したつくりになっている点も大きいかもしれません。
このリアルタイム戦闘は、ファイナルファンタジーVやクロノトリガー、またはエンドセクターなどの影響があります。
「ゲージが溜まることで、行動できるようになる」というのが1つ、ただし、ここにカードワースらしさや、マジックザギャザリングのような要素を入れ込んだ結果、
「5種類のエレメントのうち、いくつかが溜まる」というものとなりました。
こうすることで「樹のエレメントがないとできない行動がある」のように、カードワースでの「スキルは所持しているが手札にない」がリアルタイム戦闘で再現できました。
このへんはマジックザギャザリングの影響も強くて、それぞれ5人パーティであれば、みんながデュエリスト、という見立てを簡素化したものでもあります。
おまけに、会話イベントでプレーヤーキャラクターが話はじめたりしますから、ウィズライクといいながら、だいぶ違うというのが本作です。
どれくらい時間かけて作ったの?
さて、自分なりのカードワースの構想から考えるとたぶん10年以上はたっていますが、本作に限定すると3年くらいでしょうか。
もともと、C#で作っていて「魚滅の槍」というタイトルでBOOTHで無料配布をしました。そのときは、まだ、会話シーンと戦闘シーンしかありません。
そこから、キャラクター作成、ダンジョン、ステータス画面、アイテム売買、スタイル売買などを加えたC#版アザリスの迷宮はおおよそ1年ちょっと前になります。
そのころ、ボイゲ祭という音声合成ソフトのキャラクターでゲームを作ろうというお祭りがあって、キャラクターの画像と音声だけとっかえたゲームも作って、合わせて出したりしていました。
そして、半年ほどは違うことをやっていて、Go言語版へのリビルドを開始します。
いろいろあって、Steamのワークショップ機能で可能ならば、皆でダンジョンや街を拡張してもらえたらいいなと思って、公開場所をSteamに定めたのもこの時期です。
といっても、わりとワークショップ対応はGo言語では難儀だと後で知り、頭を抱えています。
そうしてなんとか、SteamではPlayTest版を、ダンジョン2つ、ある程度遊べるところまで持っていけつつあるな、というのが今ですね。
なぜUnityを使わなかったのか?
アザリスの迷宮は僕としては、末永く作っていく、また、ユーザーさんが拡張データを作ってもらえたなら、どしどし、エンジン部分も公開して、後世に残せたらいいなという野心もあります。
そうすると、Unityは比較的にそりが合いません。
長期開発をするという点と、オープンソース化するという点において、Unityとは相性がわるいのです。
長期開発をする場合、Unityであれ、どんなモジュールやライブラリーであれ、寿命があり、バージョンアップがあり、後方互換の切り捨てがあります。
例えば、Flashというシステムはどうでしょう?もう、再生できる環境は限られていますよね。
Unityは、随時、作り方がバージョンアップしていますから、古いコードが使えないコードになっていきがちです。
また、Unityのアセットを使ってしまった場合、そうではなくとも販売されている素材を同梱してオープンソース化はできません。
なぜGo言語なのか?
開発環境はWindows、Go言語で、利用モジュールOpenGLをラッパーしたgo-glと、ウィンドウの表示や入力はそのglfw、音声はoto/v2を利用しています。
これからの時代に使っていて面白い言語として、Go言語を選択しました。
UnityやC#が嫌だったということもないです。たぶん、短期開発でクローズドだったらUnityでそれこそ見栄えする3Dアセットを使って作っていたでしょう。
まず、実行ファイルというバイナリに変換できるのがいいですね。
Pythonでは、どうしてもこの辺が厳しいくてやめてしまった過去があります。exe化するツールにとうすのに難儀したとかもありましたので、だったら、さいしょから実行ファイルにできる言語を選んだ方がいいです。
Rustも、挑戦しようとしたんですけどOpenGL周辺の情報やサンプルが少なくて、Go言語の方が進めやすかったです。
といっても、日本語入力については、Go言語も万能ではありません……というより、C#のWindowFormの方がやりやすいものだってあります。
キャラクターの名前を入力するUIはなかなかの力業で作っています。昔ながらのゲームのボタンによる文字選択ですからね。
C#からGo言語に変換した1つの理由はぼかし表現をソフト側で処理したり、独自言語の実装などが大きな理由です。
ユーザー拡張のため、会話イベントなどどうしても外部読み込みのスクリプトが必要になってきます。
C#ではRoslynを使っていましたが、スクリプトがたくさんあると重くなりやすく、また、実行ファイル内が散らかりやすいという点がありました。
これは、アイテムなどのデータも同様にスクリプトとして読み込ませていたため、規模が大きくなるときに、不利になると感じました。
C#版では、C#の外部スクリプトを読み込ませていました。もう1つやっかいなことがあり、会話イベントなどで、途中で止めるのがすごくややこしかったです。
ということで、Go言語で独自スクリプト言語を作りはじめてしまっていたりします。
やっと慣れてきたかなと思う部分もあれば、まだまだ分からないこともたくさんありますね。
そう言っているうちにC#もいろいろとできることが増えているようで……
いろいろ挑戦したこと
ゲームを公開する、投稿すること自体はわりとやっていたのですが、Steamは初でしたし、なによりプレスリリースの告知なども初めてでした。
また、この規模のゲームの投稿も初でした。どちらかというと、小さいゲーム、小さなツールを投稿していたので、長期戦のものを公開したのは初でした。
そういう点ではいろいろ失敗もありました。
SteamのPlayTest版の公開では、どんどんボリュームを増やしていった方がいいのかな、と考えていたのですが、思いのほか独特すぎるゲームだったので、説明不足でした。
ということで、指摘をいただいて「遊びやすさ」や説明にいったん舵取りを変えて、増強していたりします。ですので、本当に、ちょっとした一言でももらえて助かりました。
UIも、作っていると慣れてしまって違和感を覚えられなくなってしまうので、このへんの調整は1人では難しいと感じています。
遊びやすさの増強は今年の4月頭くらいにひと段落し、2つ目のダンジョン、つまり要素の増強を行いました。こちらの答えは見えていませんが、次の段階に進みました。
次の段階としてユーザー側で、エリア、ダンジョン、街、スタイル、敵、アイテムを作るシステムの提供です。
という感じで、やりたいことがありすぎて、どこから手を付けるべきかを様子を見ながら進めている、といった塩梅だったりします。
あと、Steamと相性が悪かったと思うのは、英語対応に不向きなことですね。
口調の変換という、根本的にローカライズとは真逆のことを目指しているため、やるとしても当分先になる気がします。もしかすると時代が解決してくれるかもしれません。
RPGを独自制作することについて
まぁ、個人で土台もなく作るモノではないよなぁと思ったりします。RPGツクールなどですむならそれにこしたことはありません。
というのも、要素、シーンが多いので、短期戦では作れませんし。
ノリと勢いで作っていたことが多かったので、そういう点もあってこれまでなかなかここまでも作り切れませんでした。
ノリと勢いだと3か月、で作れるかどうかが勝負になるように思います。他のこともしたくなってしまうので。
そのへんは、ノリと勢いではなく、コツコツ作っていけるようになったのも大きいですね。
おまけにOpenGLや、独自スクリプトとか、酔狂なことをやっているように思います。
あと、戦闘演出はあきらめてたりします。リアルタイム戦闘で、戦闘演出入れつつ整合性とるのどうしたらいいか分りません。効果音だけで勘弁してください。
自作するのであれば、戦闘シーンだけ、とか、どこか注力するのが無難だろうなぁと思っていたりします。
スタイルという職業や種族をまとめたもの
現時点では、まだスタイルには戦士、魔術師、盗賊などの職業しか存在しません。ゆくゆくは、人間、エルフ、獣人など、種族も入れたいなーと思ったりしています。
そもそもクラスという表現ではなくスタイルという言い回しにしたのはそのためだからです。職業でもあり、種族でもあり、そのキャラクターの在り方ならなんでもいい、それがスタイルです。
街でスタイルをランクアップさせて、総合的にキャラクターを強くしていく、というのは一種のウィズライクさとTRPGさを兼ねているように考えています。
セッションがダンジョン踏破であるなら、その間の期間が街です。
ウィザードリィであれば、街に戻って寝なければ、レベルアップできませんでした。
本作ではレベルこそダンジョン中に上がりますが、スタイルのランクを上げなければステータスもスキルもアップしませんので、実質、街に戻らないと成長できません。
こうした、大項目による大雑把な成長は、ソードワールドの影響を受けています。
ソードワールドは、職業のレベルを上げると、ごそっといろいろとできることがランクアップします。もちろん、拡張ルールを使うと細かくなったりするのですが。
戦士Lv3、盗賊Lv1のような、構成がソードワールドにあり、そうした雰囲気を参考にしています。
そうした点は、スキルを選んでいくカードワースとは違うところですね。
ユーザー拡張でスタイルも作れるようにする予定ですので、お好みの「勇者」とか「大魔導士」とかを作っていただけたらと思っています。
フォルカナってなに?
もともと、職業は自在にビルドしたいなぁというのがあったので、キャラクター作成時になにか1つの後で変更できない個性を与えるもの、というのが必要でした。
カードワースでの勇猛や智将などの型であるとか。
そこで目を付けたのはタロットの大アルカナです。といっても、さすがに22枚も絵素材を用意しきれませんし、カードワースライクだからこそ絵は用意したかったりするわけです。
そして、大アルカナにしてしまうと、それぞれの解釈の不一致みたいなのがあっても嫌なのと、22枚はデータ的にも多いかなぁと減らして再構成したのがフォルカナです。
フォルカナは全部で13枚あり、ある2つのアニメが元になっています。
キャラクター作成時にもある程度確定してしまう要素が欲しかった、そしてその意味付けをアニメを基に再構成したタロットのようなもので行った、といった塩梅です。
絵素材としては非常に苦労していたものの1つで、現時点でも苦労しています。
というのも、AI画像生成でも、なかなかぴったりの表現はしてくれないからです。
音声素材のご依頼
キャラクターの音声は、既存の販売されている素材では過不足があるので、ご依頼をしました。
あとあと、こういう素材もあってもよかったなぁとか、こういう指定が必要だったとか、反省したり難儀していたりします。
戦闘時の掛け声や、アイテムを使ったときのお礼、宝箱を開けたときの声など、わいわいとにぎやかにしたかった、というのがありました。
これは、画像が選択できるウィズライクに1歩抜きに出たいという欲でもあります。
そうはいっても、1つ大きな欠陥が僕にはありまして、セリフをあまり思いつかないのですよ。とはいえ、今だとChatGPT君にお願いできますね。いい時代になりました。
絵の依頼は経験があったのですが、音声の依頼は少なかったので、悪戦苦闘していたりします。
たまに、何のリテイクも出しようのない、僕が全く想像すらできない完成度の答えを納品いただけたりして、驚愕することもありました。
また、面白い人もいらっしゃって、ござる口調1パターンをお願いしたはずなのですが、ひょうきんなござる口調と、かっこつけたござる口調の2パターンをいただいたり、楽しいこともありました。
一応……指定があっちこっちブレると困る、というのは仕事柄、依頼を受ける立場も知っているので、頑張って抑制したつもりではありますが、うまくいっていないこともあったかもしれません。
また僕の悪い癖かもしれませんが、全てを制御したいわけでもなく、面白いものが返ってくると楽しいというスタンスも持ち合わせてしまっています。
これはTRPGでのGMで妙な経験があるせいかもしれません。最終的にどうなるかはPLにゆだねる、のような。
ですので、指定が甘いところは申し訳ないと思いつつ、なるべく、1キャラクターの統一感だったり、戦闘用だと緊迫感だったりのリテイクをさせていただくことがあったように思います。リテイクは多くて2回ですね。
音声合成が発展していますが、まだまだ、こういった戦闘などの雰囲気、表現力は人間でないと難しいものだと感じています。
お財布に余裕ができたら、また、ご依頼したいなぁと思っていたりしますので、ぜひぜひ、Steamの早期アクセス版をご購入いただけますと幸いです。
Go言語の習熟度
実は、Go言語はちょっとだけかじったじょうたいから、RustとGoでそれぞれOpenGLでの描画がどこまで先に作れるかをやってみた、といった塩梅からやりはじめました。
というわけで、Go言語をほとんど知らない状態からはじめていたりします。
わりと途中まで誤解をしていたのはインターフェースにしたら、実際の個々の処理を呼び出せないんじゃないか?というものです。
このあたりの変換や対応は、かなり後で知ったので、けっこう変なつくり方をしているところがあります。
好きな部分もあれば、微妙な部分もありますね。とにかく書かされます。
スライスの要素の削減はappendで頑張ってね、みたいな状態で要素を削除する機能は標準では存在しませんし。
といって、悪いかというと、なんだかんだ楽しく使えているわけです。
文字列の処理がわりと心地よくて、ルーンという1文字という意味づけがある方式が特徴的でいいですね。
Goルーチンは、同期処理とか全く使えてません。ぽーいと放り投げるくらいしかできていません。
インターネットだとどうしても情報が分散するので、1つ網羅的に学習するには本が要るなぁと感じつつ、本がなくても、わりとサンプルが豊富でなんとかなってしまいました。
絵素材
絵素材は千差万別です。自分で描いているフォルカナもあれば、ご依頼したNPCの立ち絵や、購入した絵素材もありますし、AIの画像生成などと多岐にわたります。
背景に苦しんでいた僕としては、かなりAIの画像生成はこの点で強かったです。C#版のころは、描けないと嘆きながら描いてましたし。
反面、フォルカナやスキルカードみたいな抽象的なものの生成は狙うのが難しいですね。
NPCはご依頼して納品いただいてからかなりたってしまっています。少しのぞいてみると、まだ仕事募集中とあったので、元気にされてるのかなぁとホッとしてたりします。
AI画像生成もなかなか難しいです。というのも、開いてる宝箱と、閉じてる宝箱があったとしましょう、これ、描けません。というのも、全く別の宝箱になっちゃうんですよね。
絵を描くこともわりと好きなんですけど、ゲームの完成を優先すると、そうともいきません。
とはいえ、オープンソース化を考えると、権利的に公開再配布OKなものって、自分で描くしかないものも出てきちゃうんですよね。うーん。
NPCは物語も少し決めて描いていただいたので…ちゃんとシナリオものっけたいなぁ、と思っていますが…そこまでつくれるかな…
まとめ
開発用のDiscodeサーバーも用意しておりまして、興味のある方はお気軽にご入出・ご退出いただけます : https://discord.gg/Wgcura9MUN
というわけで、あともうひと踏ん張りで、ユーザーによるエリア拡張機能が実装できるところにまできました。
また「INDIE Live Expo 2023」にも応募しましたので、今年の5/20?に、ご紹介していただけるかもしれません。こういう、宣伝に力を入れたのも本当にはじめてです。
いろんな人達や、技術によって成立していますので、感謝しています。
少しずつではありますし、時には寄り道もするかと思いますが、手に取っていただけますと幸いです。
この記事が気に入ったらサポートをしてみませんか?