神無月サスケの波瀾万丈な日常・はてなブログ編

神無月サスケのツイッター(@ktakaki00)を補完する長文を書きます。

僕が「いふび」という荒らしの濡れ衣を着せられ続けている件

概要

最近困っていることがある。エゴサーチして分かったのだが、僕は濡れ衣を着せられている。
「いふび(痛フb)」という以前ツイッター上でツクラー周辺に荒らしをしていた正体が僕だという根拠のない情報が流れ、悪評を流されているのを見た。真犯人(いふびで検索すると出る)が名乗り出たにも拘わらず。

事の経緯

濡れ衣を着せられるまで

2013年ごろ、ツイッター上で「痛いフリーソフト作者監視bot」(通称「痛フb」または「いふび」)というアカウント名で多くのフリーゲーム作者に嫌味なリプライを送り続ける迷惑アカウントがあった。2chの同人板とも連携して荒らしを繰り返しており、僕も被害者だった。
そのアカウントが2014年5月、入院していた僕が退院した時、いかにも自分も退院したようなツイートを書き、僕を装うようになった。
そこから「いふびは神無月サスケでは?」と、いわれのない疑惑を持つ人間が現れだした。
あまりに無理があるので誰も信じないと思ったが、「間違いない、あれ、神無月サスケだ」という声が、ツイートから上がり(発言者の名前は伏せます)、必死に「僕はいふびじゃない」と否定した。
しかしそのことで、その方は、「否定するくらいだから、やっぱり間違いない。本当に潔白なら黙っているはずだ」と言って、より強く確信したと言った。はっきり言って魔女裁判である。
この経緯は、悪意ある人たちによって、以下のように喧伝されている。

僕の沈黙の時期

上記の魔女裁判じみた件があったことと、ツイッター上では大半が僕の味方をしてくれたことで、悪意ある意見は無視していれば、そのうち真実は示される、そう思っていた。だが、実際はそうならなかった。
その後も僕を罵るために「神無月いふび」などと名乗ったツイッターアカウントを作成されたりして、そのたびに否定していたが、ツイッターで僕が書いた「僕はいふびではない」という意見はすぐ流れてしまう。
代わりに、前述の、僕に悪意を持って書かれたサイトが、「神無月サスケ」で検索した時、上位に来るようになったようで、ついに「神無月サスケ」と入れると、「いふび」という言葉がサジェストされるようになっていることを知った。
この結果、この濡れ衣のデマを信じる人が少なからず出てきたようで、ある人からDMで「サスケさんとは付き合わない方がいい、と忠告された」と言われたこともある。僕は濡れ衣によって、相当な風評被害を受けてきたらしい。
これは後述するが、現在、真犯人が名乗り出ているにも関わらず、未だに僕、神無月サスケの方をいふびの正体だと信じている人が多いらしい。

真犯人が名乗り出た

2016年になって、いふびの正体を名乗り出る者がいた。以下のツイッターだ。
https://twitter.com/gomikasumunhoi
このアカウントを作ったのは、眼鏡侍(メガザム)さんという方で、トキノタビビトの作者さんである。
もちろん自称なので、僕も状況証拠しか出せないが、状況証拠しかないゆえに、「神無月サスケがメガザムに罪をなすりつけている」という解釈をしている人が多かった。
現にこのアカウントに対して、「神無月サスケさん、人に罪を着せるのは見苦しいのでやめてください」などとリプライを送ってきている人もいたようである。
メガザム氏は、このアカウントで、僕に濡れ衣を着せた理由として、「自分は汗水たらして働いているのに、サスケは働きもせず食べ歩きながらゲームが評価されているから疎ましかった」と述べている。
働いていないなどという誤解もいいところだが、それならなぜ、僕に直接謝罪するなり、もっと誤解を解く行動をするなり、してくれなかったのか、不満は残っている。
住所氏名が分かれば、名誉棄損で訴えようとも考えたが、わざわざ名乗り出たこともあり、そこまでするつもりはない。

誤解は解けるのか

ただ、ひとつ言えることは、あれから3年経過した今、2019年1月、Google検索で「神無月サスケ」を検索すると、「いふび」という言葉がサジェストされ、前述の、僕に悪意を持った人達による、濡れ衣を着せるサイトが上位に来ていることである。
一体、どれだけの人が、このサイトを見て、僕の知らないうちに、僕を悪人と決めつけ、僕を避けたのだろうか。どれだけ、風評被害を被ったのだろうか。
これ以上の延焼を防ぐために、今回、こうやってブログに表明させていただいた。
ただ、これを見てもまだ、僕をいふびだと思い込む人が一定数いることも僕は承知している。そういう人は、もう好きにすればいい。何を言っても誤解を解かない人は、僕自身が気に入らないのであり、この点で誤解が解けても、別の点で僕を攻撃してくることは明白なのだから。
逆に、ここを読んで、僕の誤解を解いてくれる人には感謝したい。そういう人にこそ、付いてきてほしい。

多機能フックローププラグインを支える技術

この記事は、ツクールMVの多機能フックローププラグインの記事です。
https://forum.tkool.jp/index.php?threads/851/
https://youtu.be/PBEbrzYt3xI

本日の先の記事と合わせてお読みください。

この記事は、このプラグインを作るにあたって直面した
技術的困難を中心に扱います。
専門的な内容なので、あまり興味がない人、プラグインが読めない人などは、
適当に読み流してください。

プラグインをダウンロードして、中を見てみましょう

さて、ここからはプラグインを実際にお見せしながら
説明していきたいと思います。
プラグイン単体(動作に必要な画像素材付き)は、以下のアドレスから入手可能です。
http://www.moonwhistle.org/tkoolMV/SuperiorHookRope.zip
こちらのプラグインは、前述のサンプルプロジェクトに入っているものより、
若干バージョンアップしています。

ロープが可変長ゆえの、アニメーションの動的生成の必要性

まず最初にこのプラグインを作るにあたって一番重要だったのは、
アニメーションを、データベースに登録するのではなく、
プラグイン内で動的に生成している、ということです。
これは、プラグイン利用者にデータベースでアニメーションを作ってもらうのが
煩わしいから、という理由だけではありません。
このプラグインは、ロープの長さが可変長に延びますが、
フックロープの動作は、アニメーションによって実現しています。
もし、データベースでアニメーションを登録するとすれば、
異なる長さごとに上下左右のアニメーションを作る必要があります。
例えば長さ最大7なら、0〜7まで8通り×上下左右4種類で、
32個のアニメーションが必要になります。
この手間は、ただごとではありません。
当然、現実的ではありませんね。
このため、プラグイン内で、プログラムで直接生成する必要が
出てくるというわけです。

アニメーションの動的生成のために:データ構造の解析方法

アニメーションを動的生成するために必要なのは、
データ構造を解析することです。
アニメーションのデータはJSON形式で、テキストファイルで見ることが可能です。
しかし、データの細かい意味が、それだけでは分かりません。
ツクールMVのヘルプにもJSリファレンスがありますが、そこには簡単な説明しかなく、
データの細かい説明はほとんどないため、解析が非常に困難と言えます。
そこで僕は、奥の手を使いました。
それはRPGツクールVX Aceのヘルプを参考にすることです。
両方のツクールをお持ちの方ならお気づきでしょうが、
RPGツクールMVのデータベースのデータ構造は、RPGツクールVX AceのRGSS3の
データ構造をベースにしています。
特に、アニメーションのように、追加機能が少ないものに関しては、
ほぼ1対1対応がある、と言っても過言ではありませんでした。
この事実は、データ構造を理解する上で非常に助かりました。
実際に、ご覧ください。

ご覧のように、日本語で、なおかつデータの詳細について説明してくれており、
情報量が全く異なり豊富なのが分かるでしょう。
こうしてめでたく構造を理解できた僕は、
アニメーションの動的生成を組むことに成功しました。
よくOSやツールなどの解析で言われることですが、
「データ構造が解析できれば、半分は解析できたも同然」
ということなのです。

タッチパネル対応。移動中いつフックロープを使うか

さて。次は、RPGツクールMV特有の課題です。
ツクールMVで作る以上、マルチプラットフォームを意識する必要があるため、
タッチパネル(、マウス操作)にも対応しなければなりません。
PCの場合、マウス操作以外でも操作は出来ますが、
スマートフォン移植前提の作品で使ってもらうなら、タッチパネル対応は必須でしょう。
そこで、タッチパネル移動時は、杭やフェッチ可能なイベントをクリックすると、
「フックロープが使えるところまで歩き、使えるようになった場所で使う」という
動作が必要になってくる、と考えました。
これは、それほど難しくなく、実装出来ました。
具体的には、プラグインの一番最後、Game_Character.prototype.findDirectionTo を
再定義している部分で処理している。興味のおありの方はお確かめいただきたい。
簡単に説明すると、
「フックロープ使用可能状態で、
なおかつ目的地がフックロープ関係のイベントの場合、
目的地への移動中、
プレイヤーが目的地へフックロープ到達可能の位置にいたら、
目的地の方を向いてフックロープ使用、プレイヤー移動はキャンセル」
ということです。

フックロープが壁を通過できなくする処理

フックロープは、壁を通過できないので、その前で止める必要があります。
これは、その座標に壁があるかどうかが判別できれば簡単です。
それでは、具体的にどうやるのでしょう。
実を言うと、このプラグインでは、A3タイル(壁の上部)とA4タイル(壁)の判定のみを
行っており、タイルA5やB〜Eで準備されたカスタムの壁は、通過します。
(ここのところは、今後のバージョンアップで設定可能にするなど、
対策が必要かもしれませんね)
A3タイルやA4タイルは、4層あるツクールMVのタイルの、最下層に位置します。
(「ちょっと待った、4層ではなく3層では?」という方がいらっしゃるかも知れませんが、
2つの上層と1つの下層の間に、タイルA2の一部を置く中層というものがあるんです)
そこで、最下層(レイヤー1)のタイルIDを確認します。
タイルIDはイベントコマンド「指定位置の情報取得」でも取得が可能な値です。
ただ、タイルIDで、それがタイルA3やA4なのかどうやって判定するのでしょう。
それは、タイルID仕様を知る必要があります。
これについては、「ツクールMV タイルID仕様」で検索すると、
調べてくれている人がいます。
https://www.f-sp.com/entry/2016/09/25/131242
この数値は一部RPGツクールVX Aceとも共通です。
これが分かれば、「目の前に壁(A3、A4タイル)があるか」はすぐできます。
自分で調べると結構骨が折れるので、
調べてくれている人に感謝、ですね。

力業で乗り切った点も

プレイヤーの移動とフックロープのタイミング合わせ、実は場当たり的

重要な点として、ツクールMVでは、プレイヤーの移動と、
アニメーションの表示は独立しています。
そして、フックロープは、アニメーションで実装されています。
フックロープを使う際、イベントをフェッチしたり、プレイヤーが一歩下がったり、
という場合、その動作にアニメーションをシンクロさせなければならないのですが、
これは、かなり場当たり的にやっています。
具体的には、フックロープの伸び方に応じて、最大の長さに達した時のウェイト数を変えたり、
逆にフェッチされるイベントの移動速度を、フックロープのアニメーションに
合わせたりしています。
本当に力業のため、フックロープの長さによっては、
若干タイミングがずれることもあるのですが、
ここはイベント移動とアニメーションのシンクロという点で、仕方ないことです。
なお、プレイヤーの移動ルートも、フェッチされるイベントの移動ルートも、
JavaScriptのオブジェクト記述形式、すなわちJSON形式で、直接リテラルで記述しています。
アニメーションのデータもそうですが、
ツクールMVはデータ構造がJSONというテキストで記述しやすい形式だからこそ、
実現できた部分が、このプラグインには多いのかもしれません。

アニメーションの関係から、一般的な(48x48サイズの)キャラにしか使えない

これもアニメーションの見た目を自然にするために、力業でのりきった点です。
フックロープを、プレイヤースプライトのどの座標から出すか……
下手をすると、上を向いているとき、頭や背中からフックロープが生えてくるように見えます。
そういったことをなくすため、プレイヤーが上下左右の向きで、
それぞれ座標を補正しています。
……ただ、これが原因で、ツクールMVの標準素材やジェネレーターで作成したような規格以外の、
特徴的なキャラクターが使うと、不自然な見え方になってしまいますが、
これはもう、現時点での仕様の限界、ということになります。

まとめ

いかがでしたでしょうか。これ以外にも、プラグインの中身を見ていただければ、
いろいろと分かりにくい部分で工夫しているのを理解してくれる人も
いらっしゃると思います。
今回、「多機能フックローププラグイン」として、ゼルダの伝説のギミックのように
「複数の機能を持たせる」「直観的にする」というものを作ったわけですが、
仕様的にも、技術的にも、いろいろ悩んだりしましたが、本当に考えていて、
苦になることはありませんでしたね。
むしろ、ゼルダの伝説がいかに偉大かが、よくわかりました。
何事も経験、ですよね。自分でやってみることで、改めて、凄さを知る。
僕にとって、このプラグイン制作の経験は、自らの身体の一部になっています。
この記事が、皆さまの何かのご参考になれば、幸いです。

多機能フックローププラグインの紹介とその哲学

多機能フックローププラグインとは?

2017年、僕は、RPGツクールMV用に、マップ上のアクション系プラグイン
「多機能フックローププラグイン」を公開しました。
https://forum.tkool.jp/index.php?threads/851/
簡単に言うと、フックロープなのですが、複数の機能を持ち、
汎用性が高く作られています。
百聞は一見にしかず。こちらに、このプラグインを使用した1分弱の動画がありますので、
まずはご覧になってください。
https://youtu.be/PBEbrzYt3xI

関連プラグイン:ツミオさんのアクションプラグイン

さて、このプラグインのみならず、巷には、
同様の、アクション系プラグインは、それなりに紹介します。
そこでまずはそれらのプラグインの中から、
有名なひとつをピックアップして紹介します。
それを紹介した後で、「それではなぜ、多機能フックロープなのか」という
話をしたいと思います。

ツミオさんのアクションプラグイン

プラグイン】特殊なアクションを実装
https://forum.tkool.jp/index.php?threads/669/
僕がこれを選んだのは、僕が知っている中で、
最も多機能なプラグインだからです。
ゼルダの伝説にあるアクションをそれこそすべて搭載する勢いで
数多くのアクションが設定可能です。
これらの挙動は動画でデモを観られます。
Youtubeの「ツミオチャンネル」
https://www.youtube.com/channel/UCTIxXkDwcTkAiku5WFt6oDQ
こちらでは、アクションプラグイン以外にも、
あなたの興味を惹く多くのプラグインのデモ動画もあるため、
単に「ゼルダの伝説のような、様々なアクションを導入したい」
という方は、ツミオさんのプラグインの方がいいかもしれませんね。
なお、彼はカンパ歓迎と話しているので、
気に入ったらカンパしてあげてほしいな、と思っています。

ツミオさんのプラグインと多機能フックロープ

さて、多機能フックローププラグインに話を戻します。
このプラグインは、フックロープのみであり、
ツミオさんのプラグインと比較して、
機能のバリエーションという意味では、明らかに見劣りします。
しかし、機能を絞りこむ代わりに、ある種の「哲学」を貫いているのです。
すなわち、僕の一貫するポリシー、哲学を理解してくれた人に
使ってもらいたいと思っているのです。

多機能フックロープに込めた「哲学」

ひとつのアイテムが複数の機能を持つのが望ましい

まず、僕がこのプラグインで目指したのは
「道具と言うのは、決まった一つの使い方のみならず、
いろんな使い方が出来るのが理想」というものです。
ゼルダの伝説シリーズを思い出してください。
複数の使い方があるアイテムや、
基本的な使い方は一つだが、特定の場所で思わぬ使い方が出来る……
そんな形で、多彩な使い方が出来るアイテムが多数あります。
僕がこのプラグインで目指したのは、まさにその方向性なのです。

直観的であること

前述の「基本的な使い方は一つだが、特定の場所で思わぬ使い方が出来る」というのは、
要するに、その道具の決められた機能にはなかったけれど、
現実世界の常識に照らし合わせて、「あ、あれでああできないかな」って考えて
試してみたら、それがビンゴだった、そういうことです。
すなわち「(現実世界に照らし合わせて)直観的である」ということです。
考えてみてください。最近の大規模なオープンワールドのゲーム(GTAシリーズを始めとする)は
全てこれに従っていますね。
そして、ゼルダの伝説も、この方向性が、シリーズを追うごとにどんどん進化しているのは、
僕より皆様の方が、詳しいと思います。
このようにゲーム内に説明はないけれど、直観的に試したら、うまくいった……
プレイヤーの期待に最大限応えてあげるのが、いいゲームデザインだといえます。
ただし、これを徹底するには、壮大な人海戦術が必要です。
個人制作では、到底追いつきません。
しかし、出来ることは出来る。多機能フックロープは、3つの機能を持たせました。

多機能フックロープの3つの機能

前述の動画を観ていただいて、もうご存知かもしれませんが、
改めて、このプラグインの3つの機能を紹介します。


1.フックロープの先に杭があった場合、プレイヤーが杭の手前まで移動
 基本。
2.フックロープが接触したイベントを起動
 川を挟んだ先にあるスイッチを操作するなど。
 - サンプルプロジェクトでは、普通に話しかけた場合と、フックロープをぶつけた場合でセリフが変わる人物を配置。
3.フックロープの先に接触したイベントを、目の前に持ってくる(フェッチ)。
 落とし穴を挟んだ先にある宝箱などのアイテムを取ってくる。
 - なお、目の前が通行不可の地形の場合、プレイヤーが一歩後退する仕様。
 - 目の前が通行不可でプレイヤーが後退不可の場合、取ってこられない。
気づかなかった人は、上記を意識して、もう一度動画をご覧ください。

このプラグインを使う際の設定について

では、このプラグインを実際に使ってみることを考えてみます。
実はこのプラグイン、多機能ゆえに、設定が少しだけ、手間がかかります。
詳しいことは、プラグインのヘルプに全て載せていますので、
ここでは、要点をピックアップしてみましょう。

何の設定に手間がかかるのか

なぜ設定に手間がかかるのか。それは「3つの動作が可能」であることの裏返しです。
どのイベント(またはタイル)に、フックロープは反応するのか。
それを設定しないといけませんが、それはすなわち、
「どのイベントがプレイヤーを移動させる杭で、
どのイベントが、イベント起動で、どのイベントが、持ってくることが出来るか」
を設定するということです。
これは主に、イベントのメモで設定しますが、
ひとつひとつ「これはこの動作」とメモに書いていたら、
作業量はとんでもないことになりますね。
そこで、プラグインのオプションで、
「ひとつのイベントに<picket>と書けば、その画像のイベントは全部杭になる」
「この条件を満たすイベントは、全部、デフォルトでフックロープが触れたら起動」
「この条件を満たすイベントは、全部、デフォルトでフックロープでフェッチ可能」
といったことが可能になっています。
具体的には、「なし」「!で始まるイベントのみ」「全て」が選べます。
なお、対象は「イベントに画像が設定されている」「プライオリティが通常キャラと同じ」を
満たすイベントだけです。
こうやってデフォルトを設定すれば、
「例外的にこの機能を持たせる(あるいは持たせない)イベント」にだけ
メモを書くことで済みます。

競合を解決するための優先順位の定義

さて、複数の機能を入れたことにより、一つ課題が出てきました。
それは「機能が競合してしまう」ことです。
ひとつのイベントに複数の機能が設定されても、その中のどれかひとつしか選べません。
また、フックロープを投げた先の範囲内に、複数のイベントがあった場合、
どれに反応すればいいのでしょう。

複数の動作が適用可能なイベントの優先順位

設定により、ひとつのイベントに、複数の機能が割り振られる設定になる状況が考えられます。
しかも、設定の方法をなるべく簡略化したため、
このプラグインでは、結構起こりやすい事象になります。
そんな時のために、複数が設定されていたら、以下の優先順位をとっています。
1(杭)>2(起動)>3(フェッチ)
こうした根拠は、より直感的なものを優先したからです。

「範囲内に複数の候補が存在した場合」

例えば、最大7延びるロープで、杭が4つ先と6つ先にあった場合、どちらに移動するか?
これは、大抵の人は、近い方、と答えるでしょう。
実際、一番近いイベントを重視しています。
しかし、開発の初期では、一番遠い方のイベントを優先していました。
その方が、なんとなく直観的に感じたからです。
ところが、テストプレイした方の全員が「不自然」と言ったため、一番近い方になりました。
いやはや、僕の「直観的」は、少しずれているのかもしれません。

サンプルプロジェクトの中身

なお、上記の動画ですが、サンプルプロジェクトをアップしています。
http://www.moonwhistle.org/tkoolMV/HookRopeTest.zip
RPGツクールMVをお持ちの方で、興味がおありのお方は、お試しください。
そして、プロジェクトをいじって、いろんなギミックを作ってみてください。
ギミックについては、僕の頭ではサンプルプロジェクトの範囲が限界でしたが、
公開することで、皆に面白い使い道を見つけてもらえそうなのでアップした、
ということです。
ぜひ、興味がおありの方は、ダウンロードして、いじって遊んでくだされば幸いです。

RPGツクールMVでDarkest Dungeon風の自動生成ダンジョンを作る

本家ダーケストダンジョンでは、クエストのクリア条件は「9割の部屋を回ること」だったり
「敵がいる部屋全てに入って敵を倒すこと」だったりしますが、
MVコラボでは、「すべての部屋を満遍なく通ること」であり、
最後に行った部屋に、ボスの前にキャンプが出来る場所へのワープホールが開けます。
さて、そんなダンジョンですが、本家に倣って、
ツクールMVのプラグインを作成して、自動生成ダンジョンにしました。
そこでツクールMVでのダンジョン自動生成の方法について説明したいと思います。

ツクールMVコラボで使われたダンジョン自動生成アルゴリズム

ツクールMVコラボでは、ダンジョンは5×5マスの中に、8〜12個の部屋を作る形式。


・オープンリストとクローズドリストを準備。
いずれも配列で、部屋IDを保存する。
部屋IDは、座標(x, y)の部屋で、y × 部屋数の幅(=5) + x になる。

1.まず始点を決める。
 - この時、上下左右、どれかの壁に隣接していることを条件としている。
 - 始点をオープンリストに入れる。
2.オープンリストに対して、それぞれ以下の処理を行う
 - この部屋から上下左右、それぞれ半分の確率で道を作る。
- 作った道の先に……
  - 既にクローズドリストに入っている部屋があったら無視。
- オープンリストに入っている部屋があったら、この部屋と廊下で繋ぐ
- いずれもないなら、新たに部屋を作り、廊下で繋ぎ、
   新しい部屋をオープンリストに加える。
- この部屋をオープンリストからはずし、クローズドリストに加える
3.クローズドリストに入った部屋の数が所定の数値(今回は8〜12)になったら中断。
 そうなるまで、2.のプロセスを繰り返す。
4.マップの完成。
- オープンリストや、それにしか繋がっていない通路など不要になったデータは即消去

上記を、ダンジョンに入る際に必ず行う。
ダンジョンを出たら、ダンジョンマップを保存するデータは破棄する。

ゲームプレイ時の部屋の作り方

動的生成されるマップをツクールMVで実現するために、
まずはそれらのマップの雛形となるものが必要である。
そこで、以下の3つの雛形マップを準備した。
(注:実際のゲームでは、マップには4種類の地形があるため、
以下のものをそれぞれの地形に合わせて3枚ずつ準備している)

  • 上下左右どこにも移動できる1画面の部屋
  • 上下方向の廊下
  • 左右方向廊下

ダンジョンはこの3つの雛形から生成されたマップだけで
構成されている(キャンプの部屋やボスの部屋は除く)。
以下に、ツクール編集画面での雛形マップを示す。



ここで大切なのは、雛形となる部屋は、四方に出入り口があることだ。
しかし実際のマップでは、通行できない方角は当然ある。
例えば、上と右だけに隣接する部屋があるマップでは、
左と下の出口を消さなければならない。
それではどうするのかを説明する。

通れない方角に処理を施す方法

簡単に言うと、部屋マップの通れない方角の出口は、
読み込まれたマップデータ($dataMap)を
フェードイン前にプラグインで直接書き換え、
壁にするという処理を行っている。
具体的には、通れない方角があれば、
その方角の壁のマップデータをコピーし、
扉部分に上書きする、というやり方を取っている。

例えば、上に通行不可能の場合、上記のように、上側の扉の部分を、
上側の他の座標の壁マップのデータを扉部分にコピーし、
通れなくしてから、マップをフェードインさせている。

廊下から、部屋からの移動の際、マップの指定方法

さて、マップは整ったが、次は移動するマップの選び方を説明する。
まず、以下の前提条件がある。

  • 廊下では両端に部屋への入り口がある
  • 部屋には通行可能な方角に廊下への出口がある

ここで部屋IDが重要になってくる(マップIDではないことに注意)。
冒頭でも書いたが、部屋は以下の式で計算される部屋IDを持っている。


座標(x, y)の部屋で、y × 部屋数の幅(=5) + x
それでは廊下はどうか。

  • 左右方向の廊下では、左の部屋の部屋IDになる
  • 上下方向の場合、上の部屋の部屋IDになる

上記から、部屋を移動するたびに、部屋IDを更新している。
そして移動の際には、部屋IDを書き換えながら、雛形マップを移動している。

オブジェ(Curio)配置について


次は、ダンジョン内にあるオブジェ(Curio)や敵の配置について解説する。
前述のダンジョン自動生成の説明では端折っていたが、
部屋がクローズドリストに追加される際に、
部屋と廊下にそれらを配置する処理を行っている。
オブジェ(Curio)や敵の数は以下のように配置している:

  • 廊下なら3つか4つ、適切な間隔を取って配置
  • 部屋には中央にひとつかふたつ置く。ふたつの場合、いずれかは敵になる。

なお、オブジェは7種類、敵シンボルの見た目は2種類だが、
廊下に配置する場合は、これら9個からランダムに配置されるため、
敵だったり、オブジェだったりする。
では置くオブジェや敵はどのように配置しているのか。
あらかじめ雛形用のダミーマップに置くことで実装している。

実行時、イベントは動的生成している

実際のゲームのプレイの際には、マップに入った際、フェードイン以前に、
部屋にあるオブジェや敵を、ダミーマップのイベントから複製し、
動的にイベントを生成している。

動的生成されたイベントのセルフスイッチについて

ゲーム中に、あるオブジェ調べたか、またはその敵を倒したかの判別には、
セルフスイッチで判断しているが、イベントは複製されていることと、
動的生成イベント専用のセルフスイッチを準備しているため、
他の同型のオブジェや敵には、影響を及ぼさない。

ダンジョン脱出時の処理

ダンジョン脱出時には、動的生成イベント用に準備されたセルフスイッチは
初期化する。ダンジョン自体がリセットされるのだから、当然である。
さもなくば、次は突然最初から空の宝箱が出てきたりしてしまう。

まとめ

以上、入るたびに形が変わるダンジョンを作る方法をかいつまんで説明しました。
もし可能なら、プラグイン素材として公開することを望む方も
少なくないでしょう。しかし、それは行わない予定です。
なぜなら、このゲームの仕様に合わせて、雛形マップIDを直接プラグイン
埋め込んでいるし、雛形マップやオブジェ(Curio)のダミーマップなど、
プラグインとして配布するには、あまりにも準備すべきものが多すぎて、
全く実用的でないからです。
よって今回のダンジョン自動生成は、あくまで概要を留めるに述べました。
将来的に何らかの形でダーケストダンジョンから独立して、
自動生成ダンジョンのプロジェクトごと公開することも検討していますが、
あまり実用性はなさそうなので見送りますが、要望が多ければ準備します。

ダーケストダンジョンMVコラボにおける戦闘シーン

ダーケストダンジョンの再現にあたって、
僕が一番力を入れたのが、戦闘です。
本家には、「こうげき」や「ぼうぎょ」といったコマンドはなく、
各キャラが持っている7つのスキルのうち、4つを選択して、
戦闘時にそれを使うというものです。
さすがにこれは再現できませんでしたが、各職業ごとに、
皆がよく選んでいるだろうな、と思うものをピックアップして出しました。

結果、戦闘では、本来「攻撃」「防御」ところで
直接スキルを呼び出す形になっています。

そしてもうひとつ特徴的なのは、ほとんどの技は、
アクターが先頭から何番目にいるかで、使えるかどうかが異なること、
効果範囲も、前列にしか届かないとか、2・3列目に効果があるとか、
効果範囲が非常にシビアなのです。
しかも、複数マスを占有する敵もいるため、さらに混乱を大きくしそうです。
ここをどうするか、ヘルプの行数を1行増やして腐心して対処しました。
通常のツクールMVの戦闘では、先頭から何番目にいるかとか、
どういった範囲なのかは、完全にドラクエ風で間違えようがないと思います。
これに慣れている人にとっては、かなり面食らう事実だと思います。
ただし、ツクールMVコラボでは、一度決めた並び順は変わりません。
しかし実際の戦闘では、不意打ちで隊列を乱されたり、敵や味方が使うスキルで
自動的に頻繁にポジションが移動します。
ツクールMVコラボでも、恐らく使われることのない、
「並び替え」コマンドや、後列職専用の前列攻撃があるのは、その名残です。

敵のパラメータが見え、スキルも使い放題なのに苦戦

本家にもツクールMVコラボにも、MPの概念はありません。
スキルは、使い放題です。
ツクールMVコラボでも本家に倣い、
敵のパラメータを表示していますし、MPの概念もありません。

「MPもなくて、敵の手の内が分かるなら楽勝じゃないか」と
思われる方がいらっしゃるかもしれません。
しかし、このゲームは非常に難易度が高いため、
これだけやっているのに、まだ全滅と隣り合わせのバランスになっています。
ツクールMVコラボでは、前述の通り主人公たちが不死身なので
そこまでの難易度はないにせよ、ここは譲れなかったところです。

見知らぬパラメータや、状態異常の重ね掛けなど、ツクールMVになかった機能

その他、戦闘関係のあれこれを再現するために、
このゲーム用に相当な量のプラグインを書きました。
例えば本家ダーケストダンジョンでは、ダメージの表記が独特です。
「10-19」のように、10〜19ダメージを敵に与える、といった感じです。
ツクールMVコラボでもこの形式にして、整合性を取っています。

また、本作を代表するストレス。これは、TPを利用しています。
本作品ではTPを利用しなかったことから、扱いやすいと思ったからです。
実際、いくつかのプラグインでTPを扱うものがあり、
それをストレスの値として扱うことが出来て、かなり便利でした。
そしてひとつ苦労したのが、出血や毒(Blight)といった状態変化は、
重ね掛けが可能だということです。敵に決まった場合、効果は大きいですが、
敵から受けると、どんどんスリップダメージが増えて不利です。
今でこそ、パラメータの重ね掛けプラグインがありますが、
開発中は見つからなかったので、自分で作りました。

皆様のプラグインも使わせていただきました

例えば「大技だが使った後、使用者のパラメータが若干減る」
というような場合、トリアコンタンさんの SideEffectSkill.js を
使用させていただきました。
他にもVestalの「攻撃命中時に自分のHPが回復」といったスキルも、
トリアコンタンさんのプラグインを利用しています。
また、本家では自分のターンが回ってきたとき、包帯や毒消しを使うことが
可能ですが、何とアイテムの使用にはターンを消費しないのです。
こちらは、Torigoya_QuichSkill.js を使わせていただきました。
また、CTB(自分に攻撃の順番が回ってきた時点で、コマンドを入力)は、
Yanfly氏のプラグインで実現しています。
エンディングにもクレジットを載せましたが、改めて皆さまありがとうございました。

まとめ

このように、戦闘は、ゲームの中での見せ場のため、妥協しませんでした。
攻撃範囲制限や副作用、パラメータの重ね掛けなど、
相当数のプラグインを書いたおかげで、かなり本家のプレイヤーさんも
納得してくれる出来になったと自負しています。
次回(12月4日)は、ダンジョンの動的生成の部分についてお話ししたいと思います。

ダーケストダンジョンMVコラボ開発秘話

今年8月、日本語版ダーケストダンジョンが発売されました。

それに先立ってKADOKAWA様から、本ダーケストダンジョンをベースにした
RPGツクールMVでのコラボゲームの依頼が来ました。
僕がダーケストダンジョンをクリアしているから
それでこの話が来たのだと思います。

詳細はこちらの記事をご覧ください → http://d.hatena.ne.jp/ktakaki/20180802/p1
タイトルは「俺がDarkest Dungeonの世界に転生した件」にしました。

最初に渡されたのは、コラボキャンペーンで配布されたのと同じ、
8人のヒーロー(注:このゲームでは冒険者をヒーローと呼ぶ)の画像、
それもサイドビューバトル用の背景、これだけでした。

担当の方からは「サイドビューバトル素材があるからって、
必ずしも無理に戦闘を入れる必要はない」などご説明してくださいましたが、
せっかくコラボゲームを作る以上、本家を可能な限り再現したいと思うに至りました。
よって戦闘は入れたい、そしてダンジョン探索の要素を入れたい、と強く思っていました。

しかし、RPGツクールMVとダーケストダンジョンのシステムには
大きな隔たりがありました。
全てを再現するのは無理でも、可能な限りやってやろう……
そう思いながら制作しました。
詳細はこれから説明させていただきますが、
なるべく本家の魅力の片鱗、いやそれ以上のものを味わえるように
努力したつもりです。
このエントリは、全くシステムの異なるゲームを、ツクールMVで再現する際の経験談ということになるため、
珍しいシステムのゲームを作りたい人には参考になると思います。

ダンジョン内のマップ表示

本家ではダンジョンを進むとき、「どの方向でも左から右へ動く」
「敵は右半分に現れ、移動とシームレスに切り替わる」
という点が、ツクールMVとの大きな違いですね。
ダンジョン画面の背景がしっかり描かれています。

一方、ツクールMVでは、壁の模様を再現できませんし、
サイドビューのスタイルが、ダーケストダンジョンと逆です。
しかも、アクターのサイドビューアニメーションは、
フィールドのキャラクターとは異なります。
結果、ツクールMVの形式で、右側に仲間、敵は左側に設置することにしました。
つまり僕は、RPGツクールMV同様のシステムを取ることにしたわけです。
本家のダンジョンには、部屋があり、部屋と部屋をつなぐ廊下を作りました。
自動生成ダンジョンを導入し、
ダンジョンに入るたびに形が変わるのは、本家と一緒です。


自動生成ダンジョンの作り方は、
アドベントカレンダーの次の書き込み(12月4日公開)で紹介する予定です。
なお、α版をご覧になったスタッフ様は最初、
「あれ、左から右に移動するんじゃないの?」と言われましたが、
上記の理由があるため、納得してもらいました。

敵が現れた時

前述の通り、本家では通常移動と戦闘が画面変更なくシームレスに始まります。

しかしツクールMVでは、マップ上のキャラとサイドビューバトルのキャラ画像が
異なっているため、シームレスに戦闘に突入、ということも出来ません。

結果、ツクールMVのデフォルト戦闘に、いくつか機能を施した形で落ち着きました。
これでもDDの戦闘の魅力が、かなり再現できたと思っています。

町(Hamlet)における大きな違い

ダーケストダンジョンでは、ダンジョン以外の部分、つまり町並みを
一枚絵のクリッカブルマップで示しています。

一方、ツクールMVのコラボでは、町を、ツクールMVの町と同様に、動き回れるようにしました。

これは、せっかくツクールMVを使うのだから、
一枚絵にするより、MV風の町の中を散策して、情報を集めてもらいたい、
という理由によります。
なお、コラボのツクールMVでは、ダンジョンにいない間は、
酒場や修道院などのストレス発散施設などがありますが、
これらの重要な施設を町の入り口近くに置き、
あまり重要性のない施設は奥に置くことにしました。
例えば、本家には、サナトリウムの他に、
装備やスキルを上げるお店もあり、その他もありますが、
ツクールMVコラボでは、そもそも病気(disease)にならないこと、
そして、主人公(ヒーロー)たちが皆、自分のレベルで最高の装備をしているため、
必要のない施設なのですが、有益な情報を得るために残しています。
このあたりは、ツクールMVのユーザー層も納得していただけたと思います。

本家ではヒーローはキャラ使い捨て扱い。ツクールMV版ではルール変更

ツクールMVコラボでは、町の中心に「ロスター(roster)」という建物があり、
主人公ひとりは固定ですが、ここで7人の仲間から3人を選んで連れていきます。
もちろん、途中交代も可能です。

ロスターとは名簿とか登録者の意味で、建物の名前にするには
ちょっと不思議な気がしますね。
これは、本家では、画面右側に、現在仲間にしているヒーロー一覧が
表示されることにちなんで付けました。
本家では、駅馬車で新しいヒーローを仲間にすることがメインですが、
毎週毎週(注:ダンジョンに1回入ると一週間が経過する)
新しいヒーロー志願が増えていきます。
これは、本家ダーケストダンジョンが、ヒーローたちが敵にやられて亡くなり易いので、
2交代制、3交代制でパーティーを回していくことがよいとされてます。
つまり、キャラクターは使い捨てに近い状態で、
ランダムに作成された仲間志望が、次々補充されて行っている状態です。
探索で全滅したら、仲間を4人失う他、そこで手に入れた金品も戻りません。

一方で、ツクールMVのデータベースでは、
アクターは決められた分だけしか作れず、ランダム生成は難しそうです。
そこで、主人公達8人は、不死身という設定にしました。
これで「ヒーロー使い捨て」のゲームと大きく隔たりが出来ましたが、
その代わり、HPが減れば減るほど、ストレスを受けやすくなる、
という条件を付けました。
本家に倣って、ヒーローのストレスが100になると、そのヒーローは
おかしくなります(Affliction)。命令を無視したり、何もしなかったり、
他のヒーローにストレスをふりまいたりもします。
ストレスは最大200まで上がり、こうなると心臓発作を起こすなどして、
HPが途端に少なくなったり、突然死したりしてしまいます。
ここに目を付けて「仲間のうち3人のストレスが100を超えるか、
誰か一人でもストレスが200に達したら、強制的に街に帰還」
というルールにしました。
一見簡単そうに見えますが、
本家もそれに倣ったコラボ版も、ダンジョン内でHPを回復するのは
それほど容易ではなく、ヒーラーに相当する修道女(Vestal)などを
連れていっても、回復が追い付かないこともあるくらいです。
このため「HP減で被ストレス増」というルールが活きてくるのです。
戦闘中にストレスを減らす職業(クルセイダーやジェスター)もありますが、
早めのHP回復が重要になる、ということです。

本家にない「キャラクター性」を導入

ダーケストダンジョンは、キャラ使い捨てということもあって、
ダンジョンに潜るたびに、ロストすることもあるでしょう。
しかし、本作では8人がずっと不死身のままなので、
何らかのキャラクター性が欲しいと考えていました。
最初担当の方は「ローグライクだし、
そこまで各キャラのキャラクター性は必ずしも必要ではありません」
と伺いましたが、キャラが固定なのだし、何か個性を立てないと
淡白なゲームになると思いました。
そこでまず、最初の説明の段階で、8人のキャラクターが
分かるように、ちょっと工夫をしました。

また、ダンジョン内でキャンプを開いたときに、
皆が元の世界から持ち寄った身の上話をする、といった感じや
そこからEDでも、キャラクター性をかなり重視しています。

これは、昨今、キャラクター性を重視する作品が増えていることも意識してのことです。

キャンプ

本家ダーケストダンジョンでは、長いダンジョンに入る時は、
たきぎがいくつか支給され、任意の場所でキャンプを行うことが出来ますが、
ここは、ダーケストダンジョンで普段あまりセリフのないヒーロー達が
珍しく会話をする場面です。
食糧を使って食事をしてから、ヒーローたちが特有のキャンピングスキルを使い、
少し会話をしてから、一休み。その後、冒険再開の流れです。

僕がキャンプを作ることを提案すると、担当の方からも
「キャンプは是非入れてほしい」と期待されていたので、
MVリメイク版では、ボスの前にキャンプ用のマップに飛ばされる、
という形にしました。

ツクールMVリメイクでは食事のあと、いろんな回復が出来るようにしていますが、
キャンピングスキルは省略したため、誰を選んでも共通です。
また、ここでの会話を重視したのは前述の通りです。
誰を連れて行っても、異なる会話が準備されているので、
これを見るのも楽しみになると思います。
実際の本家では、運が悪いと夜襲(Night Ambush)され、
真っ暗な中戦いを強いられますが、ツクールMVリメイクでは
そういうことはありません。

ここまでのまとめ

以上のようにすることによって、
ダーケストダンジョンとRPGツクールMVの仕様は隔たりが大きいですが、
ツクールMVのゲーム寄りにしつつ、
ダーケストダンジョンの雰囲気を味わってもらえるようになりました。

Darkest Dungeon × RPGツクールMV コラボゲーム作りました!

Darkest Dungeon × RPGツクールMV コラボキャンペーン
http://tkool.jp/mv/dd-campaign/

皆さん、ダークファンタジーローグライクRPG「ダーケストダンジョン」が、8月9日にコンシューマーで発売されます!
Xbox One, Play Station 4, Nintendo Switch

それに伴って、KADOKAWAでは、RPGツクールMVにて、Darkest Dungeon コラボゲーム
「俺がDarkest Dungeonの世界に転生した件」をRPGアツマールにて、公開いたしました!
https://game.nicovideo.jp/atsumaru/games/gm7723

どんなゲームなの?

シナリオ

主人公タケシは、普通の高校生。ある日、不思議な封筒が届いていた。
開けてみると、それはダーケストダンジョンの世界への招待状。
気にせず寝ていると、彼は目が覚めた時、Darkest Dungeonの村(Hamlet)で、クルセイダー(Crusader)になっていた。

「ダンジョンをひとつクリアすれば、元の世界に戻れる」という言葉を胸に彼は仲間を連れてダンジョンに潜り込むが、
だんだん居心地が良くなって帰りたくなくなる……。
元の世界に戻るのか? 続けるのか? それはあなた次第。

システム

RPGツクールMVのプラグイン機能を使い、Darkest Dungeonの様々なシステムを採用しています。

自動生成のダンジョン、ストレス、行動範囲によるスキルの使用制限、食糧、キャンプなどなど……
Darkest Dungeonをプレイしたことがある方も、そうでない方も、きっと新鮮な印象を受けてくれると思います。



本家ダーケストダンジョンとの違い

ツクールMVということで、「キャラクターの設定が命」ってことで、8人のヒーローには、いろんなキャラ設定いれてあります。
これらの中には、本家をプレイした人なら、ニヤリとするネタもあることでしょう。

なお、システム面は、本編にはもっと、こんな要素があります。

  • 松明による明るさ(松明が切れると暗くなっていく)
  • 奇癖(Quirk)。良いものと悪いものがあり、洞窟探索に有利になったり不利になったりする
  • 病気(Disease)。罹ると病院で治すのに結構なお金がかかる
  • 家宝(Heirloom)を集めて、町の施設をグレードアップしていく

などなど……。本コラボゲームではエッセンス重視のため削った部分にも、面白い要素がたくさんあります。


作者からの言葉

制作は僕、神無月サスケが担当させていただきました。
Darkest Dungeonが大好きで、英語版で、Darkest(ノーマル)モードをクリアさせていただいております。
そんな僕が、このゲームの魅力を作るために、RPGツクールMVで腕を振るわせていただきました。

最初は「どんなものでもいい、戦闘やダンジョン探索も必須ではない」と言われたのですが、
せっかく素材にサイドビュー用キャラ素材と、戦闘背景素材があるのだから、利用しない手はないと思い、
プラグインで、自動生成ダンジョンや、オリジナルの戦闘システムをくみ上げました。


戦闘システムは、オリジナルをプレイした方でも、またちょっと違ったスリルを味わえると思います。
キャラクターが使い捨ての原作と異なり、このコラボでは、キャラクターが不死身の代わり、
ストレスが一定数以上になると、強制的にダンジョンから村(Hamlet)へ戻される、というシステムです。
このため、ストレス管理はしっかり行ってくださいね!

あと、どうしても入れたかったのが、キャンプですね。キャンプは原作でも、ヒーローの個性が活きる数少ない場所でした。
本作でも、どこかの世界から転生してきたヒーロー達の独白が見られますので、ぜひ、ここまで、
プレイしてほしいな、って気分です。

このゲームをプレイして、皆さんも、Darkest Dungeonの魅力を垣間見てくれたら、そして、購入してくれたら、と思っております。
また、そしてRPGツクールMV( http://tkool.jp/mv/ )をお使いの皆様、コラボキャンペーンにも何か作って応募してくださいね!