開発日誌

テクニック

[ テクニック ] マップ講座(3) ダンジョンは先に動線を決める

2020-08-02 06:50:32

マップ制作講座の第3回。

今回はダンジョンの作り方です。

ダンジョン制作は苦手な方が多いようで、RPGツクールVXの頃からダンジョンの自動生成機能が備わっています。自動生成してから細かい部分を手動で調整するのが、よくあるダンジョン制作の方法かもしれませんが、今回はダンジョンをイチから作るコツを解説します。

ダンジョン作りの一番のポイントは、先に動線を決めることです。

大まかな手順としてはこんな感じ。

  1. マップのある程度の広さを決める
  2. スタート地点とゴール地点を決める
  3. スタートからゴールまでなるべく長い距離を通る正規ルートを決める
  4. 正規ルートに寄り道を追加する

以下、具体的に説明します。

まず始めに、マップのある程度の広さを決めましょう。

マップの広さは、最初はとりあえずで構いません。

計算尽くでやるならエンカウントの平均歩数と回数とで決めたりもしますが、そこまでしなくても、小さめのダンジョンか大きめのダンジョンかで、だいたい決めればOKです。正規ルートや寄り道ルートの動線を固めながら、後で徐々に調整していっても問題ありません。

ちなみに『天下御免!からくり屋敷』の各階層は、余白込みで91x75となっています。最初はもっと狭かったのですが、段階的に広くしていって今の大きさになりました。

次に、スタート&ゴール地点を決めます。

スタート地点はダンジョンの入口や、前の階からの階段の位置などです。ゴール地点は、ボスや目的の宝箱、もしくは出口や次の階への階段の位置などです。

『天下御免!からくり屋敷』の場合は、スタートは前の階の階段の位置で、ゴールが首領部屋となっています。首領部屋が次の階のスタート位置になるので、それを踏まえてゴール地点を決めている感じですね。だいたい、スタート地点の点対称の位置にゴールを置くことが多いですが、常に点対称だとダンジョンの構造がマンネリ化するので、適度に変えたりします。

また『天下御免!からくり屋敷』には階層を自由に行き来できる「エレベ板」があり、この位置は固定です。このような既に決まった構造物(吹き抜けとか)がある場合は、この時点でマップに組み入れておきましょう。

いよいよメイン作業。

スタート地点とゴール地点を結ぶ動線(正規ルート)を描きます。

スタートからゴールまで直線ではなく、マップ全体を迂回するように動線を引くと、効果的なダンジョンとなります。

全体を迂回すると言っても、あまり隙間なく動線を引いてしまうと、寄り道(宝箱や外れのルート)の余地がなくなってしまうので、ある程度は隙間を残しましょう。

『天下御免!からくり屋敷』の場合は、スタート地点から間もなく「エレベ板」に至り、しばらくして「からくり部屋」を通過し、しばらくすると「エレベ板」の近くを通過してショートカットの「かんぬき扉」があり、そこからさらに進んでゴールの「首領部屋」を配置しています。このように経由する施設が多い場合は、各施設の距離感を考慮する必要があるため少し頭を使いますが、通常のダンジョンであれば、スタートとゴールを結ぶだけで十分でしょう。

慣れていれば動線を引きながらマップを作ることも可能ですが、慣れないうちはまず紙などに書いてみるのがいいでしょう。

最後に、正規ルートの隙間に寄り道ルートを引いていきます。

寄り道ルートとは、外れのルートや宝箱などのルートです。

寄り道ルートは行き当たりばったりで作るよりも、あらかじめ宝箱をいくつ置くか決めた上で作っていくのがいいでしょう。ただ、実際のマップに組み込む際に、上手く寄り道ルートを作れないといったことも起こりうるので、宝箱の数はガチガチに決めるのではなく、5〜7個ぐらい、みたいに緩く決めておくのがコツです。

『天下御免!からくり屋敷』の場合は、1階層で小部屋が5つ、通常のつづら(宝箱)が8つと数を決めていたので、これに沿って寄り道ルートを作っています。実際にはマップを作る上でさらに隙間とかができてしまうことがあるので、そういう時は「小さな鈴」の置き場とかに活用しています。

また寄り道ルートは、短距離のものや長距離のもの、1つの寄り道ルートからさらに分岐するルートなど、いくつかバリエーションを設けるのがポイントです。

今回のマップ講座はここまで。

最終的なマップは右のようになりました。動線の細かい部分は、実際にマップを作りながら微調整しています。動線を引いてからここに至るまでは、まだいくつもポイントがありますが、それはまた次回以降で解説します。

いきなりダンジョンを作り始めるのではなくて、最初にしっかり正規ルートと寄り道ルートを決めましょう、というのが今回のポイントになります。

ダンジョンに限らずマップの制作方法は、人の数だけ流儀が存在すると思います。ですが、キレイなマップはたいてい行き当たりばったりではなく、動線がちゃんと考えられているはずです。

小さいマップならともかく、ある程度の大きさを持ったマップであれば、最初にしっかりと動線を引いてから作ると、キレイなマップができると思いますので、ぜひ試してみてください!

[ テクニック ] マップ講座(2) 狭く作る

2020-07-26 23:25:13

マップ制作講座の第2回ということで、やっていきたいと思います。

自分がマップを作る上で意識しているのは、広くしすぎない、狭く作るという点です。

例えば、道具屋の内装を作るとします。RPGツクールの仕様上、マップのサイズは最小が17x13です。すると左のように、そのサイズいっぱいに作ってしまいがちです。

▲ 17x13をフル利用

▲ 9x11の範囲に収めた

しかし左だと、テーブルの上の小物やカウンター後ろの棚が雑然としており、その割にはどことなくスカスカ感があります。かと言って、空いているスペースに物を置くと、さらにゴチャゴチャしてしまうこと間違いなしです。

一方の右。前回の「マップ講座1 プレイヤーは常に中央に」に従ってマップを作っており、マップ全体のサイズは23x17ですが、そのうち9x11の範囲に実質的な部分は収めています。テーブルや棚もシンプルにして、無駄なスペースをなくしています。道具屋の内装であれば、このくらいで十分でしょう。

マップをキレイに見せるコツは、なるべく無駄なスペースを作らないことです。

もとのマップサイズが広いと、どうしても無駄なスペースが生まれがちですし、それを埋めようと小物類を配置しても、整理されていない押し入れの中みたいに、ゴチャゴチャとした印象を与えてしまいます。移動距離も増えてしまいます。

ならば最初からマップサイズを最小限にしておけば、無駄なスペースも生まれず、小物類の配置も少なくて済み、移動距離も減らすことができます。

▲ 民家はたくさんあるが入れる家は1つもない

町などのマップも同じことです。

よく大都市を表現しようとして、広大なマップを作る人がいます。民家をいっぱい並べますが、そんなにたくさん家の中を用意できないので、中に入れる家はほんの一部で、あとは入口のない家だったり扉が閉まっていて入れない家だったりが並んでいたりします。

しかしこれだと、入れない家は装飾以上の意味を持ちませんし、入れる家はどこかを探しながらだだっ広い町を歩き回ることになってしまいます。

そもそも大都市を表現するのに、必ずしも広い敷地に家々が軒を連ねる必要はありません。ゲーム内に登場する他の町よりも一回り大きければ十分です。あとは大都市っぽい特徴的な建物――例えば豪華な宿屋や荘厳な教会、貴族のお屋敷などを置いておけば、十分に大都市を表現可能です。

「大都市なのに……家が5軒だけwww」といったツッコミは来るかもしれませんが、単なるツッコミなのであまり気にしなくて大丈夫です。逆にツッコミを気にして巨大な町を作ったら、今度は「広すぎて探索が大変」という具体的な不満が出てきてしまいます。

マップを作る際に、どうしてもスカスカ感やゴチャゴチャ感が出てしまうという人は、マップのサイズを一回り、二回り小さくしてみてはいかがでしょうか。

広いマップは、作るのも大変だし歩き回るのも大変だしで、良いことがありません。必要最低限の広さに抑えることが、キレイなマップ作りの第一歩だと思います。

[ テクニック ] マップ講座(1) プレイヤーは常に中央に

2020-07-25 09:29:38

昨日の宣言通り、自分が制作の上で意識していることや、応用できそうな技術について、少しずつ紹介していければと思います。

前作『小さな大冒険』の時は「マップがきれいだった」という反響を多くいただきました。自分でもマップ作りは楽しいし、それなりに自信もあります。

そこでまずはマップ作りのノウハウについて、何回かに分けて書いていこうと思います。RPGツクールでのマップ制作講座は他にもたくさんありますが、それらとはちょっと視点を変えたものにできるといいなと思っています。

さて、他のツクール製ゲームのマップと比べた時に、自分のゲームのマップの一番の特徴は、プレイヤーキャラクターが常に画面中央に表示されているという点ではないかと思います。

多くのゲームでは左のように、マップの端に来ると画面のスクロールが固定され、代わりにプレイヤーキャラクターが動くようになります。一方で私のゲームでは基本的に、端に来てもプレイヤーキャラクターが画面中央から動かないようにしています。

▲ マップの端に至るとその分プレイヤーキャラクターの位置がずれる

▲ マップの端に至ってもプレイヤーキャラクターの位置は常に画面中央

右はどのようにしているかというと、別に特別なことは何もなくて、単に通行可能な範囲に対して、上下に6マス、左右に8マス分、余白を設けているだけです。

初期の頃のドラクエをはじめ、当時のRPGはだいたいそんな感じだったので、これが普通だと思っていましたが、最近ではドラクエですら左のようになっているんですよね。

左の形式だと何が嫌かって、マップの端に至ると急にスクロールが固定されて戸惑う点です。プレイヤーキャラクターが画面中央から急に移動するので、視点を移動させないといけません。

また、場所移動の際にプレイヤーキャラクターを見失う恐れがあります。

左上の扉に入ったら、部屋の右下から開始、というようなケースはマップの位置関係上あり得ますが、次のマップがどこから始まるのか、初見のプレイヤーは分かりません。前マップの終了位置と次マップの開始位置が画面内で離れていると、プレイヤーキャラクターがどこに行ったのか、見失ってしまうかもしれません。

▲ マップの左上の入口に入ると、次のマップは右下から始まる。しかもプレイヤーキャラクターが壁の色と似ているため、分かりづらい。

その点、プレイヤーキャラクターが常に画面中央に固定であれば、どのようなマップの位置関係であっても、必ず画面中央にいるので見失うことはありません。

最後に、マップの端が見えると、興が削がれる点です。

町や室内であればまだしも、ダンジョンなどでマップの端が見えると、もうこの先には何もない、というのが明らかになってしまいます。以前プレイしたゲームで、フィールドマップなのにマップ端に到達した時は、冒険している感覚が一気に失われてしまいました。

謎解きの一種に、一見行き止まり or もう何もないように見えて、実は先に道が続いている、というものがあります。有名な例で言うと、ドラクエ3のランシールの神殿とかかな。自分のゲームでもよく採用しています。こういうのも、端が分かるタイプだと採用が難しいですよね。

逆に、プレイヤーキャラクターを常に画面中央に表示する場合のデメリットもあります。

一つは、マップ内で移動できる範囲を制限する必要がある点。

柵や壁などで囲めるのであれば難しくありませんが、草原や砂漠のようなマップでは、障害物を置いて移動可能な範囲を制限するのが難しいです。

よくあるのは、入口とか出口を設けるのではなくて、一定の範囲から外へ出るとフィールドマップに場所移動する方式ですが、スクリプトやプラグインなしで実装しようとすると、周囲全体に場所移動のイベントを敷き詰めるか、並列処理でプレイヤーの現在地を監視して一定の座標の時に場所移動させるか、いずれにしてもちょっと面倒くさいです。

もう一つのデメリットは、余白の部分もマップを作らないといけない点。

ダンジョンや屋内であれば余白部分は暗闇でもいいのですが、町マップなどの場合は余白部分もそれなりに作り込まないといけません。

昔のドラクエとかだと周囲は一面草原で済ませられていたりしましたが、それは解像度も粗くマップチップも限られていたから許されていた話で、今それをやったら手抜き感が半端ないです。なので、ゲーム上では全く意味のない部分にもかかわらず、ちゃんと作り込まないといけないという、やや不毛な作業が。

ただ、こういうところをちゃんと作り込んでいるか否かで、マップの見栄えは確実に変わってきます。範囲外だからといって、手を抜かずに作り込みましょう。たまに、気合いを入れて作った部分が、障害物の関係でプレイ中には見えない部分だったりすることもありますが……。

さて、マップ制作講座の第1回として、「プレイヤーキャラクターを常に画面中央に表示」することについて説明しました。

果たしてこれはマップ制作なのかというとやや疑問ですが、マップ作りにあたっての基本方針である上に、あまり意識されてないんじゃないか、ということで紹介してみました。

いかがだったでしょうか?(キュレーションサイト風)

次回からは、実際のマップ制作の上でのコツ等を紹介していきたいと思います。

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 重要語句の色を変える

2020-07-21 01:19:33

メッセージの中でキーワードとなる言葉――人名やアイテム名などは、色を変えて目立たせてやると、プレイヤーが見落としにくくなるので親切です。

特殊文字の\C[n]で文字色の変更ができるので、キーワードの手前で特定の色に変更し、その後で元の色に戻してやれば、標準でも特に難なく実現可能です。

しかし、何番が何色なのか分からなくなったり、後で色を戻し忘れたりで、実際にやるとなるとけっこう面倒くさいし、間違えやすいです。

というわけで、特殊文字を拡張して、重要語句の文字色変更を簡略化するスクリプトを作りました。

相変わらずRPGツクールVX用ですが、VX Aceでも多少の修正で動くようになるはずです。やっていることは単純なので、MVでも同様にプログラムを組めば動作すると思います。

「文章の表示」の中で、 <●テキスト> のようにテキストを <● > で囲むと、その部分の文字色を手軽に変更することが可能です。

●には語句の種類に合わせてアルファベット1文字が入り、以下に対応させています。

<N > 人名
<P > 地名
<E > モンスター名
<I > アイテム名
<S > スキル名
<K > その他の重要語句(なんでKにしたのかは忘れた)

これによって、人名は赤色、アイテム名は黄色のように、タイプに応じて色を変えることができるので、よりいっそう分かりやすくできます。

色はスクリプトの中の\x01[3]などの数字を変えればOKです。また同様にすれば、新たな語句タイプを設定することも可能です。

質問やアドバイスなどはコメント欄まで、お気軽にどうぞ。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ 天下御免!からくり屋敷 ] [ テクニック ] ツクールでルビを振る

2020-07-19 23:16:37

RPGツクールMZ』が発表されてから、その新情報関連と制作関連の記事とで、週2本ペースで記事を公開しております。年2本だった時もあったのに、奇跡じゃなかろうか。

もっと記事を出していきたいのですが、制作過程の記事はあまりネタバレしすぎるのもどうかという説があります。そこで、これからは技術的な話題も積極的に取り扱っていこうと思います。

さて、『天下御免!からくり屋敷』では、スクリプトを組んで漢字にルビを振っています。詳しくは「RubyでRubyを…」の記事をご覧ください。

ルビ振りを可能にするスクリプト素材はいくつかありましたが、画面構成全体や文字表示など根幹の部分に関わってくるため、自力で実装したという経緯があります。そういう経緯があるため、私もスクリプト素材という形で提供はしていませんでした。

ただ、どのようにルビ振りを実装しているのか、注意する点や苦労した点はどんなところかを公開して、制作者の方の参考にしていただければと思います。RPGツクールVXでの実装ですが、基本的な考え方は変わらないはずです。

最初に大変なのは、上でも書いた通り、画面構成全体をいじる必要がある点。

ルビの分の高さを確保する必要があるため、テキストの1行の高さをデフォルトの24から32に拡大しています。

通常の文章表示では、4行あったメッセージウィンドウを3行にすれば、ちょうどいい感じに収まります。ただし戦闘メッセージの場合は、2行ある物理スキルの発動メッセージ→会心の一撃→敵のダメージ→敵のステータス変化のように、最大で5行を要するケースがあるので、既に3行表示されていたら最後の1行を消して上書きする、といった処理を加える必要があります。VX Aceからはメッセージログ形式になったので、意識する必要はないかもしれませんが。

また、メッセージ表示以外にも、アイテムやスキル、敵の選択ウィンドウやステータスウィンドウ、店での購入ウィンドウなど、ほとんど全てのウィンドウのレイアウトを調整する必要があります。ウィンドウレイアウトはスクリプトやプラグインでデフォルトから変えている場合も多いと思いますが、まずルビには対応していないので、自力で調整しなければなりません。

さて、ルビの入力は、{漢|かん}{字|じ}のように、ルビを振りたい文字を{ }で囲んで、|の手前に漢字、後ろにルビを入力すれば、ルビ付きのテキストとして表示されるようにしました。

文章の表示だけでなく、アクター名、職業名、スキル名、アイテム名、敵キャラ名、およびスキルやアイテムの説明文や、使用時メッセージなどでも、有効にしています。

表示部分のスクリプトはこんな感じ。

1文字ずつ取り出して、漢字部分とルビ部分に分けて出力しています。

ここで問題は、ルビが多いとテキストボックスの横幅に収まりきらない点。

文章の表示のテキストボックスは、横幅を超えると勝手に改行されてしまいます。そこで、ダミーのアクターをいくつか作って、長いルビ付きの言葉をアクター名に設定し、文章の表示の中で\N[n]として用いています。こうすれば、ルビが多くても横幅に収めることができます。

ただし、アクター名の入力欄にも文字数制限があるので、ルビの量が多いとダミーのアクターがいくつも必要になります。1文字微妙にオーバーする!といった苦労は日常茶飯事で、このあたりの調整は都度やる形になるので、テキストの入力は通常時よりもかなり時間がかかります。これが、制作がなかなか進まない原因でもあります(ということにしておこう)。

また、ルビは漢字1字につき3文字までが限度で、4文字以上だと文字が潰れてしまってさすがに読めません。

だいたいは3文字に収まるのですが、隼(はやぶさ)とか亥(いのしし)とか、作っているとけっこう4文字のルビが登場します。こういう場合は、{亥の|いのしし  }{足|た}{袋|び}のように、次の文字と組み合わせています。

ただ、鉞(まさかり)はこれ1文字だけしかないので、前後に半角スペースを入れて{ 鉞 |まさかり}としました。また、狼男(おおかみおとこ)も漢字2文字に対してルビ7文字なので、{狼 |おおかみ}{男|おとこ}と間に半角スペースを補っています。一番悩んだのが、石川五右衛門の方術の金鯱(きんのしゃちほこ)で、仕方ないので間に全角スペースを挟んで{金 鯱|きんのしゃちほこ}としました。今後、源順(みなもとのしたごう)とかを登場させることにならないか不安。

最後に悩ましい点としては、どこまでルビを振ればいいのかという点。

さすがにフリーゲームを小学生とかがプレイするとも思えないので、小学校レベルの漢字にまでルビを振る必要はないと思います。

とは言え、漢字自体は小学校で習うけど、熟語としてはあまり馴染みがなかったりすると、読みが自信ない場合もあり得ます。

実際、実況プレイ動画を見ていても、普段使わないような語句の読みで間違っていたり、詰まっているのをよく見かけます。

初めは固有名詞や常用漢字以外のものに限ってルビを振っていましたが、だんだんとルビ振りの基準レベルを下げていき、最近では「見る」「思う」とかのレベルでも、たまにルビを振ったりしています。そこまでするならいっそ全部に振ってしまえば、悩む必要もなくなるとは思うのですが、それはそれで作業が大変すぎるので、難しいところです。

ルビは日本語だけの特殊事情なため、海外展開にシフトしつつある現状のツクール事情では、今後もデフォルト機能として組み込まれることはないと思いますが、格調高い言葉を使いつつも、難しくしすぎないというバランスを取るのに、ルビ振りのシステムは欠かせないものだろうと思います。

最初に述べたように、ルビ振りシステムは画面全体の構成などに関わるため、なかなかプラグインとして素材化することが難しいですが、今後も必須レベルで組み込んでいきたいと思います。