ランダムにアイテムを取得するプラグイン

らんだむダンジョンがすごい好きで周回要素ないのに50時間ぐらいかかるのを2週プレイした。
らんだむダンジョンはランダムにアイテムが手に入る宝箱がある。今回はそれを実装した。
ツクールのデフォルトの機能でも実現できるけど、結構面倒くさいので、簡単にできるプラグインを作る。

ランダムに手に入る宝箱

いろいろ仕様を考えたんだけど、こういう仕様にしたい。

  1. ランダムに手に入るアイテム群を設定できる(ダンジョンごとに異なるアイテム群を設定できる)
  2. アイテムごとに異なる確率を設定できる
  3. できるだけ設定しやすく、1と2を実現する

ランダムに手に入るアイテム群を設定できる

まず1だけど、参考になるのはデフォルトにあるガチャのプラグイン。
あれはどうやってアイテムを設定しているかというとプラグインコマンドで以下のようにしている。

1
2
Gacha add item 5
Gacha add armor 1

これでもいいんだけど、IDとか調べてやるのちょっと大変。
この際、アイテム選択があるコマンドを乗っ取ることにした。ショップコマンドだ。
ショップコマンドはアイテムをGUIで選択できるので設定しやすくて良い。

ショップコマンド

アイテムごとに異なる確率を設定できる

次に2番。つまりレアなアイテムは出にくくしたい。ショップコマンドはアイテムごとに価格を設定できる。
ちょうどいいので、この価格を確率にしてしまおう。
くじの本数だと考えてほしい。例えば、アイテムが3つあって、アイテム1=100、アイテム2=100、アイテム3=10だったとする。
こうすれば、くじの本数が10本しかないアイテム3は出にくくなる。

確率

確率一覧

導入方法

まず、プラグインがこれ
導入したら、まずプラグインコマンドで RandomTreasure reset を実行する。
このコマンド直後のショップ処理で登録したアイテムがランダムに手に入るアイテム群となる。ショップは開かれない。

設定プラグインコマンド

そして、次に宝箱側の設定だ。プラグインコマンドで RandomTreasure get を実行するとランダムに1個手に入る。
メッセージウィンドウに手に入れたアイテム名を表示したいときは以下のようなスクリプトを書く。

1
2
3
var item = $gameSystem.lastRandomTreasure;
$gameMessage.add("\\i[" + item.iconIndex + "]" + item.name + "を手に入れた");
this.setWaitMode('message');

宝箱側のプラグインコマンド

ランダムに取得

ASCIIアートフィルターを試す

すごい用途に困るフィルターを見つけた。これ。よく見て欲しいんだけど、全部ASCIIアートになる。

導入方法はまず、Githubのpixi.jsにあるpixi-filtersレポジトリからfilters.jsをダウンロードする。
下記URLのbin/filter.js がそうです。
https://github.com/pixijs/pixi-filters/tree/publish
これをMVのプラグインフォルダに放り込む。
そして、スクリプトコマンドから下記を実行すれば実現する。

1
2
var filter = new PIXI.filters.AsciiFilter();
SceneManager._scene.filters = [filter];

まあ、ここまではネタなんだけど、まじめな話、フィルターはいろいろあって使えそうなのもある。
ここここで試せるフィルターは実装すれば使えるはず。
特に今、必要としてないから試さないけど・・・。

マップの表示順を替える

これを見て欲しい。

開発途中までやって、「あ、オープニングのマップ作らなきゃ」と思い、追加した図である。
なんていうか、オープニングなんだから管理的に上の方にあったほうが自然だ。順番を変えようーと思い、ドラッグしても変更できない。
正確には最後尾に持ってくることはできるが、思い通りの位置に挿入とかはできない。
あきらめかけたけど、この順番、実はjsonファイルに記載されている。
data/MapInfos.json を開くと、それぞれのマップ名(name)とかが記載されているが、そこにorderがあるのが見える。
この値の小さい順に並んでいるのだ。なので、このorderの値をいじればマップの表示順を変えることができる。
変えたあとは、ツクールを再起動しなおす必要がある。
注意しないといけないのは、再起動するとき、「ゲームへの変更を保存しますか?」で「はい」を選択すると、変える前の値でMapInfos.jsonが上書きされてしまう。
なので、一度ツクールプロジェクトを保存してから、MapInfos.jsonのorderをいじって、ツクールを再起動しなければならない。

MapInfos.jsonだが、ちゃんとjson形式のファイルになっていないと、「MapInfos.jsonが読み込めません」と起動できなくなるのでそこだけは気をつけてほしい。
自信がなければいじらないほうが良い。

TweenプラグインのTorigoya_Tween.jsが便利

ウィンドウをアニメーションさせたく、updateメソッド内でちまちま動かしていた。
しかし、さすがに汎用性に欠けるし、コードが複雑になりすぎる。
jQueryのanimateメソッドみたいな、UnityでいうiTweenみたいなプラグインないかなと思っていたら、まさにそのとおりのがあった。
鳥小屋.txtさんのTorigoya_Tween.jsだ。

例えば、以下のようなスクリプトでこんな感じのアニメーションができる。

1
2
3
4
5
6
7
8
9
10
11
var height = 200;
var window = new Window_Base(0, Graphics.height, Graphics.width, height);
window.opacity = 0;
SceneManager._scene.addWindow(window);
var toY = Graphics.height - height;
Torigoya.Tween.create(window)
.to({y: toY - 20, opacity: 255}, 15, Torigoya.Tween.Easing.easeOutSine)
.to({y: toY}, 5, Torigoya.Tween.Easing.easeInSine)
.wait(60)
.to({opacity: 0}, 60, Torigoya.Tween.Easing.linear)
.start();

超便利。すばらしー。

easingがどんなのかわからないときは、ここが参考になる。

全てのアイテムを取得するプラグイン

デバッグ用で、ゲーム開始時に全てのアイテム、武器、防具を取得済みの状態で始めたかった。
探せばあるような気がするんだけど、探しても見つからなかったのでプラグインを制作した。

下記からダウンロードできます。
https://raw.githubusercontent.com/kido0617/rpgmakerMV-plugin/master/GetAlIItems/GetAllItems.js

プラグインコマンドで以下のようにして使う。
それぞれ全アイテムを99個獲得、全武器を1個獲得、全防具を10個獲得の意味。

1
2
3
GetAllItems item 99
GetAllItems weapon 1
GetAllItems armor 10

こんな感じにゲーム開始時にそれぞれ取得するように書いておけば、全所持状態から開始できる。