3DダンジョンRPGエディタを作るスレ (587レス)
上下前次1-新
532: 520 [sage] 2016/01/16(土) 08:16:51.31 ID:nb4XakV3(1/3) AAS
ここまでに考察したところで、女神転生風ゲームのゲームシステム面での
主要な要件は出そろったと思われる。
以後、実際に女神転生風のゲームを試しに作りながら、考察が足りない点は
その都度、検討する方向で進めてみたい。
当面の目標としては、このスレッドのタイトルに倣って、
「3Dダンジョン(迷路および謎解き)」を制作、編集、テストができる環境を整えることとする。
参考までに、現時点の画面のイメージはこのような状況である。
画像リンク
533(1): 520 [sage] 2016/01/16(土) 10:06:51.12 ID:nb4XakV3(2/3) AAS
3Dダンジョンに関する要求については、>>525-526で書いているが、
このプログラムを作成するに際して、より詳細な検討を加えている。
まず、迷路を保持するデータ構造について説明するため、
迷路を構成する最小単位を便宜的に「セル」と呼ぶとする。
1つのセルには、必須データとして、
・セルの座標 x、y (xは東西方向、yは南北方向)
・セルの東西南北の境界表現(壁の有無、または扉)
を持たせている。
このセルを複数集めて、1つのフロアマップを形成している。
複数のセルの管理にはリンクドリストを使用していて、
任意の形、任意の広さのフロアを表現することが可能である。
と言っても、1フロアあたりせいぜい100セル程度に留めておきたい。
また、必要がある場合に限り、セルには以下の付帯情報を記憶させることが
できる仕組みになっている。
・天井と床の穴表現有効化フラグ
・ダークゾーンフラグ
・セルの名前
・イベント処理用スクリプト(任意行数のプログラムテキスト)
上述の試作プログラムでは、以上の情報を用いてマップデータの編集および
歩行移動テストが可能になっている。
534: 520 [sage] 2016/01/16(土) 10:38:57.47 ID:nb4XakV3(3/3) AAS
試作プログラムにおけるマップの編集について、少し工夫したことを書いておく。
このプログラムでは、ゲームプレイ時のスタイルでカーソルキーを使い、
3D迷路を歩き回ることが出来ていて、そのシステムに上乗せする形で、
・スペースキーを押すと、眼前に1つセルを作り、現在地点との間を通路でつなぐ。
・DELキーを押すと埋め戻す。
・コマンドまたはショートカットキーで、眼前に壁や扉を設置または撤去する。
・コマンドで階段表示、ダークゾーン設定およびスクリプト編集する。
という仕様になっている。
つまり、3Dマップを歩いてみて、この辺に通路を開けたいと思ったら、
スペースキーを押しながら前進すれば、好きなだけ穴を掘っていける
という変則的な方法でマップを編集する方法にしている。
おそらく一般的に、3Dダンジョンのマップエディタといえば、
画像リンク
のような、迷路を俯瞰した形で編集するのが常識ではないかと思われる。
しかし、このようなエディタは、「あらかじめ方眼紙などにデザインされた
マップを、ゲームプログラムで扱えるデータに打ちなおす」目的であれば
効率的なツールになるかと思うが、そもそも方眼紙を前にして、
マップをデザインするという作業が全然楽しく思えないと、生産性が悪い。
当初は俯瞰型のエディタも作ってはみたが、
何のモチーフもなしに迷路を描くというのは非常に効率が悪いと感じたため、
このように、プレイヤー目線の体験の拡張でマップデータを編集する仕組み
を開発した次第である。
535: 520 [sage] 2016/01/19(火) 22:57:14.21 ID:u9fe2fGH(1) AAS
迷路の描画については、魔法のマッパーが有効な時の俯瞰表示と、
メインウィンドウとなる疑似3D迷路の2つがある。
俯瞰表示については、フロアマップのセル群のうち、所定の範囲
(この場合、進行方向前後5マス、左右3マス)にあるものについて、
進行方向が画面上側になるように回転させて描画する。
描画する際はセル単位に相互に重ならないように描くようにすれば、
描画順序(セルの保持順序)を気にしなくてもよい。
それに対して(Zバッファを使わない)疑似3D表示については、
奥から手前に向かい、左右は両端から中央に向かって描画
する必要があるため、現在の地点座標と向いている方角から、
視界内(試作プログラムでは奥に4ブロック、横7ブロック)の
進行方向側の壁(または門)と、左手および右手のそれらを
一旦配列に集計してから、所定の順番に描画する方法としている。
この集計処理は、移動または向きを変えるごとに必要なので、
処理時間が気になるならマップの保持方法を見直すなどの
高速化・最適化が有効であると考えられるが、
100セル程度のマップであれば、今どきのPCなら気にする
ほどの時間はかからない。。
536: 520 [sage] 2016/01/20(水) 23:38:56.10 ID:yqZ8gL0+(1) AAS
マップエディタでは、迷路形状データの編集と合わせて
マップ上に様々な仕掛けを配置することも重要な機能である。
仕掛けとは、ターンテーブルやワープなどの罠だけではなく、
階段によるマップ間移動や、会話イベント、宝物の配置、
店や宿などの施設の設定全般のことである。
これらの仕掛けをマップデータ中に定義する方法としては、
マップ上の該当セルにユニークな名称(ラベル)を設定するとともに、
その名称に対応する仕掛けの内容を説明した任意様式の設定資料を
併用する方法が考えられる。
仕掛けの内容は当然ゲーム内容によって変わるものであるため、
ストーリーの核心に触れるような謎解きイベントなどの実現には、
どこかの段階でプログラミング作業が必要で、マップエディタ上で
テストを完結するのは難しい。
簡単な仕掛け、例えばターンテーブルや、情報が得られるメッセージなどは、
簡単なイベントコードと、メッセージテキストなどのカスタマイズ可能な要素を
マップデータ中に記録できる形式を定義してやれば、テストできないこともない。
しかし、「あるアイテムを持ってその場所に行くと中ボスが表れて、
会話の流れで”いいえ”を選択すると戦闘になって、勝利したら
あるフラグが立ってアイテムを消失する」のような、ストーリー上に
一回でもあるかどうかわからないようなイベントのテンプレートを
エディタ設計時に想定して組み込んでおくという発想には限度がある。
この課題があるために、汎用性のある3D迷路のデータ構造の定義は困難で、
そのようなエディタを開発しようとした場合に悩むことになる。
537: 520 [sage] 2016/01/27(水) 23:34:21.05 ID:VDw6Dqmf(1) AAS
そこで、マップデータにイベントを埋め込むという発想を拡張し、
イベントやマップ情報をひっくるめて「3DダンジョンRPG」そのものを
コントロールする処理システムというものを考える。
コントロールする対象は、ターンテーブルやマップ間移動のような
迷路のトラップに関するもののほか、情報を表示するためのウィンドウシステム、
プレイヤーの入力UI、ゲームの進行を管理するフラグ等、
制御内容を容易に"記述可能"なものから順に考えている。
これにより、イベントの設置、つまり制御内容を記述しテストする作業を、
迷路の設計と並行してマップデザイナー(兼シナリオライター)一人で
完結させるのが目的である。
実のところ、この仕組みを発展(制御対象を拡大)していけば、
既存のRPGエディタ、ツクール等や、スクリプト処理言語と同じようなものに
なっていく。結局、イベントを細かくカスタマイズしようと思ったら、
どういう形であれ、プログラミング的な作業は避けられない。
汎用性を高くしすぎて、とっつきにくいエディタになるのは不本意なので、
”女神転生風”ということを再確認して、処理系を構築しようと思っている。
538: 520 [sage] 2016/01/28(木) 22:08:46.47 ID:dhlMU4Pp(1) AAS
参考のために一例を示す。
画像リンク
マップ上を移動し、このセルに踏み込んだら、
このセルのマップ情報に付帯しているスクリプトを
テストプログラムが解釈する仕掛けになっている。
上から順に、画像ファイルを指定して表示、
ウィンドウを開く、テキストを表示する(2行)、
プレイヤーのキー入力待ち、画像消去、ウィンドウ消去
を意図した記述になっている。
画像ファイルとメッセージ文字列以外は一般に定型でよいため、
設置指示時に、エディタがテンプレートを貼るようにしてある。
この例に示す程度の、上から下に進むだけの動作の記述であれば、
プログラミングの知識に関係なく、マップデザイナーの作業範疇で
容易にカスタマイズができるのではないだろうか。
539: 520 [sage] 2016/01/29(金) 22:08:40.81 ID:iWN0LHQ9(1/2) AAS
もう少し複雑になった例を示す。
画像リンク
宝箱があり、開けるかどうか聞かれ、「はい」と答えると中身を入手する
パターンである。
ウィンドウにテキストが表示されるあたりは前例と同様で、
「はい」「いいえ」の回答によって分岐する部分があることと、
魔ッ貨と宝玉の入手にかかわる内部変数操作、そして、
宝箱開封済みを示すフラグの操作で構成される。
このスクリプトはマップデータ中の該当セルに埋め込んであるが、
魔ッ貨、宝玉および取得済みフラグについては、
別の定義ファイル中で宣言し、ゲーム進行中保持するようになっている。
なお、「マップ中のアイテムを取得する」という行為を表現するには、
この例のように、アイテム取得済みのフラグを立て、次回は、そのフラグが
既に立っているなら処理しない、というロジックを使うのがセオリーである。
プログラミング経験者にとっては当たり前のことだが、マップデータ中から、
アイテムの記述情報を取り除くような真似はしない点、念を押しておく。
540: 520 [sage] 2016/01/29(金) 22:24:46.29 ID:iWN0LHQ9(2/2) AAS
このほか、階段の昇り降りやエレベータ判定、店などに入った時の切り替えも、
同じようにマップセル中にスクリプトとして記述できる。
店や回復施設など、複雑な選択操作やデータアクセスを伴うものについては、
別途プログラマが実体を開発する必要があるが、マップ上の特定地点に
その施設を置くという指示は、マップデザイナーに委ねることができる。
また、併せてストーリー進行に関しても、フラグを併用して迷宮内の謎を解きながら
探索するというパズル性も、若干プログラミング的な思考を伴うが記述可能で、
エディタ上でテストできる環境が整った。
現在、試しにFC版女神転生のダイダロス塔(静玉をとってエレベータに乗れるまで)を
このシステムで収容できるかどうかテストしているところである。
541: 520 [sage] 2016/02/11(木) 06:26:13.14 ID:TKq/gaXF(1) AAS
ダイダロス塔クリアまでの迷宮マップとイベントの設置テスト結果について。
このエリアの1階には一部に一方通行の場所とダークゾーンがあるが、
これらを含め、宝箱や壁の落書きなど全てそれっぽく収容することができた。
画像リンク
セル単位に東西南北の壁または通路を記憶する本方式では、
隣接部屋間のその設定値を敢えて不整合にすることで
一方通行を設定することができる。
定型的なトラップの一種なので、エディタ上で入力サポートするように
機能を追加した。
ダークゾーンについては、階段と同じように、該当セルにフラグを立てて置き、
描画ルーチンの対応で表現する方法で実装する。
原則的には、ダークゾーンは壁または扉で仕切られたエリアを充填するもので、
そのエリア内にいる間はメインウィンドウを霧で目隠しする表現方法をとるのだが、
もし、ダークゾーンが広間の途中に浮いているようなデータであったとしても、
白い柱が立っているような形で見えるように、描画処理を工夫してみた。
画像リンク
542: 名前は開発中のものです。 [sage] 2016/02/12(金) 16:23:07.19 ID:iP/PhpAe(1) AAS
がんばって〜
どこまで作るか知らないけど
543: 520 [sage] 2016/02/13(土) 04:45:31.70 ID:sZ75RTIP(1/3) AAS
当面の目標はファミコン版女神転生を収容できるシステム&エディタを自作することで、
現状、3D迷路のマップデータとトラップ類の設置については既報のとおり完了した。
幸いにして実機およびROMカセットを所有しているのと、攻略サイトやプレイ動画等
豊富に情報があるので入力と検証も自力で可能なのがありがたい。
問題があるとすれば今後のモチベーションをどのように保っていくかと思われる。
544: 520 [sage] 2016/02/13(土) 05:36:14.41 ID:sZ75RTIP(2/3) AAS
ここからは開発の焦点を変えて、このゲームのプレイ要素の一つである
キャラクターメイキング、パーティ編成のシステムの実装について検討する。
最終的に、戦闘システムの勝敗に関わる要素であるため、バランス調整が
肝になると予測されるが、まずはプレイヤーとのインタフェース部分から考えていく。
本作中には、戦士型のナカジマ、魔法使い型のユミコと、その他仲魔の3タイプの
キャラクタが登場し、その設定項目がタイプ別に微妙に異なることと、
それに応じてステータス画面のレイアウトも変える必要がある。
共通する要素としては、
・名前、種族、レベル
・強さ、知力、攻撃、機敏さ、運もしくは防御
・HPおよび最大HP
・MPおよび最大MP(ただし、ナカジマはともに0)
・状態異常フラグ
で、固定(半固定)な値もあれば、ゲームの進行で変動するものも含まれる。
項目さえ決めてしまえば、これらを管理するクラスを作るのは容易であるが、
項目をカスタマイズ可能にしようとすると少し面倒になる。
少しやりかけてみたが、UI処理の実装など足かせになるばかりなので、
FC版の仕様に準拠した構成で進めることにしたい。
545: 520 [sage] 2016/02/13(土) 05:50:40.09 ID:sZ75RTIP(3/3) AAS
キャラクターのステータス値の構成が決まったら、
次にできることは以下の通りである。
(1) ナカジマとユミコ用の、初期の15ポイントを振り分ける画面を作る
(2) ナカジマとユミコ用の、1ポイントレベルアップする画面を作る
(3) 仲魔ステータスのデータベースを作る
(4) ナカジマ専用ステータス画面
(5) ユミコ専用ステータス画面
(6) 仲魔専用ステータス画面
特に、(1),(2)はこのゲームを遊んだときに初めて体験した操作で、
個人的に非常に印象が強い要素である。
(3)については、いささか面倒であるが、攻略サイトの情報をもとに、
例えば以下のような様式のレコードファイルを作る作業を行う。
nakama 幻魔 アルラウネ
MG=17 LV=20 HP=232 MP=70
STR=14 INT=19 ATK=7 AGL=12 DEF=7
spell マリンカリン
spell メディカ
spell クリンク
(4),(5),(6)については、実機の画面レイアウトを参考に数値を並べるだけで、
(1),(2)で作った画面のUI部品を流用できる。
数値を扱うユーザインタフェースを作るのは地味であるが、
ゲームの根幹をなすシステムなので、しっかりと作っておきたい。
546: 520 [sage] 2016/02/16(火) 21:35:12.25 ID:OSyFbIMG(1) AAS
キャラクターメイキングの画面を試作した。
画像リンク
また、同種の方法でプレイヤーのステータス画面および
仲魔のステータス画面も実装してみた。
画像リンク
ステータス画面に、キャラクタの肖像画が表示されるというのは
FC版で、特に印象的だった記憶がある。
試作プログラムにおいてもその仕様に準拠し、
複数枚の画像を用意すればアニメーションも可能である。
なお、プレイヤーたちの画像および悪魔の画像については、
真面目に描こうという気が全く感じられないと思われるかも
知れないが、当然のことながら、差し替え可能な仕組みに作ってある。
547: 520 [sage] 2016/02/23(火) 04:44:06.01 ID:VJ1v/4yS(1) AAS
このゲームでは、パーティに悪魔を加えるためには、
事前に交渉(もしくは合体)の上で「仲魔」として登録が必要とされる。
仲魔はFC版では最大7体まで登録可能である。
この「仲魔登録」クラスの設計については、以下の仕様とする。
(1)初期状態では空っぽとする
(2)登録しようとする悪魔が既にエントリされていないかチェックする
(3)登録数が上限に達していないかチェックする
(4)登録可能な場合、悪魔の種類と現在のHP、MPをセットで配列末尾に登録する
(5)登録されている悪魔を抹消し、配列を詰める
(6)悪魔データベース記載の最大HP,MPを参照し、回復に必要な金額を算出する
とりあえず今思いつくのはこれくらいだが、単純な配列操作で実装できそうだ。
548: 名前は開発中のものです。 [sage] 2016/02/24(水) 21:20:20.48 ID:3aPoux15(1) AAS
なんの言語を使っているのだろう。
配列じゃなくList型とかでもいい気がする?
class Nakama {
int hp, mp;
}
List<Nakama> nakamaList;
みたいな。
ちなみに自分は、敵、味方、(未実装だけど味方が召喚したのも)
Characterクラスで統一して、
List<Character> characterList;
で一括管理w
549: 520 [sage] 2016/02/25(木) 22:31:03.08 ID:cdKIzSfc(1) AAS
システム設計上の話とプログラミングの話を曖昧にして申し訳ない。
ゲームの仕様上は、要素数に上限のある配列構造を準備できればよく、
プログラミング上、必要な操作ができるのであれば、
listでもarrayでも構わない。
ただ、この仕様で敢えてlistを採用するメリットが見いだせない。
と言ってデメリットもないような気もするが、、
高々7個程度の要素数では、効率云々を議論するまでもなく、
結局、どっちでも構わないと思う。
なお、的確な指摘であるだけに、最後の「w」は残念だ。
550(1): 名前は開発中のものです。 [sage] 2016/02/27(土) 00:05:51.89 ID:xKWjyR2t(1) AAS
おおう、申し訳ない。
「w」はクセのようなもので他意はないです。失礼しました。
なるほど、論理設計上、配列的な設計ということですね。
3Dダンジョン繋がりで、いろいろ参考にさせてもらってます。
(「セル」という名前付けは同じなんだなー、とか、
セル同士リンク構造でつなげてるんだなー、とか(うちはX×Yの方形構造))
551: 名前は開発中のものです。 [sage] 2016/02/27(土) 18:53:42.63 ID:k3nxuSN5(1) AAS
3Dダンジョン ウィザードリィをベースに作ってる
ワイヤーフレームと3D画像と
552: 520 [sage] 2016/02/28(日) 21:40:29.87 ID:fYTROrM4(1/2) AAS
引き続き、その「仲魔登録クラス」の利用方法について検討する。
戦闘状態で交渉に成功したときに、登録エントリーの末尾に新規登録するのは
特に問題はないと思われる。
COMP→よぶコマンドを実行したときには、
「登録している仲魔のうち、まだ召喚していない悪魔」の選択リストを作る操作と、
その選択画面でカーソルを動かしたとき、呼び出しコストの見積もり表示を更新する
処理が必要になる。
この処理の実装に、汎用的なメッセージウィンドウを流用するのが困難であれば、
専用の選択ダイアログを作る価値はあると思う。
画像リンク
COMP→もどすコマンドを実行したときには、
仲魔登録クラス側のHP,MPを更新し、回復の泉での代金計算に利用する。
最後に重要なのが、邪教の館での合体対象の選択UIで、
これは合体表(実質的にはドリアード確認表)を示して
合体対象の悪魔2体を選択するウィンドウである。
これも、この選択専用に作ったほうが容易である。
画像リンク
合体を実行したときには、
(1)選択した2体の悪魔が召喚中なら帰還させ、仲間登録エントリから抹消し、
(2)合体結果の悪魔を、エントリの末尾に登録する
という操作を行う。
553: 520 [sage] 2016/02/28(日) 21:57:23.90 ID:fYTROrM4(2/2) AAS
>>550
セル(部屋)をリストで管理する方法については>>533で述べたように、
広さや形、フロア間の相対的な位置関係を気にせずに
ストレスなく作成、編集できるようにするための実装であるが、
方形配列に比べてアクセス効率が悪いデメリットがある。
しかし、これも仲間登録クラスの実装の問題と同じで、
今のPCなら速度的に大して問題にならないという理由で、
3Dダンジョンに限らず、拙作のドラクエ風ゲームでも採用している。
ただし、マップデータの保持がそうなっているだけで、
マップを表示する処理クラス内では、速度的な効率改善のため、
視野範囲内の壁や仕掛け要素を一旦、方形配列に抽出してから
利用している。
554: 名前は開発中のものです。 [sage] 2016/03/04(金) 19:52:08.14 ID:4OMe0RSY(1) AAS
なるほど、セル=1マスじゃなくてセル=1部屋だったのか。通りで
>1フロアあたりせいぜい100セル程度
100って少ないと思ってたんだ(20x20でも400マスだし)
555: 520 [sage] 2016/03/05(土) 08:32:14.84 ID:/l9sJN3a(1) AAS
20x20というと、Wizardryのマッピングを思い出す。
なお、FC版の女神転生は、基本8x8部屋で1フロア(またはフロア中のエリア)
を構成する仕様になっている。
技術的な理由が何かあったのかどうかわからないが、
説明書にも8×8を単位にマッピングしながらプレイすることが推奨されている。
無論、今どきの制作、実行環境でそのようなサイズ制限は考えなくてもよいが、
序盤から暗記できないほど巨大なマップを歩かせるよりも、
(1)まずは3D迷路を歩くこと、
(2)繰り返し歩くことでマップを覚えること、
(3)覚えきれなってきたらマッピングをすること、
という難易度の段階的設計は、考慮してもいいと思う。
その延長に、マッピング作業を困難にするトラップや、
8×8という固定観念を破るようなマップを登場させると有効な気がする。
556: 520 [sage] 2016/03/10(木) 04:16:15.09 ID:zG9zBMGi(1/3) AAS
話を仲魔登録クラスに戻して続けようと思う。
仲魔を最もアクティブに使うのは、合体操作を行う「邪教の館」で、
"合体"という操作についての仕様を検討する。
とりあえず、FC版の2体合体を考える。
UIを使って合体させる2体を選んだあと、何になるかについては、
>>530530(1): 520 [sage] 2016/01/03(日) 13:42:03.19 ID:Ljo7IXRL(2/3) AAS
店での買い物および.武装についても、キャラクターメイキングの範疇で検討する。
まずは、パラメータ変動効果にバリエーションのある武器、防具、アイテム等のデータベースを
整備しつつ、ストーリー上のどこでどのような武器、防具を入手できるようにするかを
バランス調整の際に検討する。
ゲーム内での実装は、対話型コマンド入力システムが基本となる。
加えて女神転生風ゲームを考えた場合、
戦闘で捕獲した悪魔を仲魔としてパーティに加える戦法や、
仲魔を合体させることで変化させるサブシステムが必要である。
なお、合体に関しては、とりあえず総当たりの表に書き表せられていれば、実装しやすい。
ここに、乱数やステータス値等の影響を絡めたシステムを入れるとすれば、
その仕組みをプレイヤーが容易に理解できるようにサポートシステムが必要である。
悪魔の合体は女神転生風ゲームの醍醐味であるため、
凝った仕掛けを考えたくなる誘惑はあるが、プレイヤーの目線で考えると
手間のかかる行為であるため、常に予定通りの結果が得られるような
公正で明朗なシステムであれば十分面白いのではないかと考えている。
にも書いたように、対象となる2体の組み合わせごとに、
合体結果を定義した表があれば完璧であるが、
非常に大きな表になるため、実際には次のようにして縮小している。
(1) 合体元の悪魔を、3種類程度ずつグループ化してラベルを付ける
(2) グループラベル同士の組み合わせごとに合体結果の悪魔を定義する
(3) 組み合わせが定義されていないグループ同士はドリアードとする
定義データの一部抜粋は、こんな感じになっている。
mixgrp S ファンガス ヴィー ヨモツシコメ
mixgrp T ノーム
mixgrp U ボーグル プーカ フォーモリア
mixgrp V エルフ トロール ゴブリン
mixgrp W ドリアード
mix S V ケルピー
mix S W ソラス
mix T U クタム
mix T V トレント
mix T W ヘケット
mix U U ケルピー
mix U V クタム
上下前次1-新書関写板覧索設栞歴
あと 31 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.022s