挑戦!RPGツクールMV【5日目】
"RPG"ツクールなので、今度は自由にRPGを作ることにしました。
前回の記事から今までコツコツと作業を進めています。
イベントやスキル、敵キャラ作成をしてるとあっという間に時間が立ちますね。
RPGツクールというRPG作成に特化したソフトを使っても、
そう簡単には作れないなといった印象です。
前途のようにイベントやスキル、敵キャラの調整をしていた訳なんですが、
いい感じになるまで数値をいじるだけですし、アップするのもキリがないので、
作成したプラグインについて書いていきます。
作成したプラグイン
レベルアップ
ツクールMVはなんと、レベルアップ音と上昇ステータス表示がありませんでした。
RPGツクールっていうくせにレベルアップ周りの機能がないのか…(困惑)。
まずはレベルアップ時にSEと上昇したステータスを表示するためのプラグインです。
レベルアップした場合、戦闘勝利MEがなるのと同時にSEも鳴ります。
「レベルアップ!」のテキストに合わせたかったのですが、わかりませんでした。
上昇ステータス表示は複数人のレベルアップにも対応しておりますが、
一度に2以上レベルアップした場合は1レベル分しか表示できません。
もし表示したい場合は、変数に格納するのが一番早いと思います。
(function () { SoundManager.playLevelUp = function() { var Se = { "name": "Up4", "pan": 0, "pitch": 100, "volume": 90 }; AudioManager.playSe(Se); }; Game_Actor.prototype.changeExp = function(exp, show) { this._exp[this._classId] = Math.max(exp, 0); var lastLevel = this._level; var lastSkills = this.skills(); while (!this.isMaxLevel() && this.currentExp() >= this.nextLevelExp()) { var _last_actor = $gameActors.actor(this._actorId); var _last_myStatus = { 0 : _last_actor.mhp, 1 : _last_actor.mmp, 2 : _last_actor.atk, 3 : _last_actor.def, 4 : _last_actor.mat, 5 : _last_actor.mdf, 6 : _last_actor.agi, 7 : _last_actor.luk }; this.levelUp(); } while (this.currentExp() < this.currentLevelExp()) { this.levelDown(); } if (show && this._level > lastLevel) { this.displayLevelUp(this.findNewSkills(lastSkills)); var _actor = $gameActors.actor(this._actorId); var _myStatus = { 0 : _actor.mhp, 1 : _actor.mmp, 2 : _actor.atk, 3 : _actor.def, 4 : _actor.mat, 5 : _actor.mdf, 6 : _actor.agi, 7 : _actor.luk }; for(var i=0;i<8;i++){ _myStatus[i] = _myStatus[i] - _last_myStatus[i]; } var text = "最大HP+" + _myStatus[0] + " 最大MP+" + _myStatus[1] + "\n攻撃力+" + _myStatus[2] + " 防御力+" + _myStatus[3] + "\n魔法力+" + _myStatus[4] + " 魔法防御+" + _myStatus[5] + "\n敏捷性+" + _myStatus[6] + " 運+" + _myStatus[7]; $gameMessage.newPage(); $gameMessage.add(text); SoundManager.playLevelUp(); } this.refresh(); }; })();
スクリプトから音が鳴らす方法は、
SoundManager.playLevelUpの所を見ればわかるんですが、
上からに名前(拡張子無し)、位相、ピッチ、音量です。
AudioManager.playSe(Se);で鳴らせます。
他にも、AudioManager.playMeとかでMeが鳴らせます。
表示テキストを追加する場合は、
var text = "ほにゃらら";
$gameMessage.newPage();
$gameMessage.add(text);
と書いてやればできます。
アクターIDはthis._actorIdでなんか参照できました。
装備拡張
僕が作るRPGでは、枠を超えてどれでも好きに装備させたかったので、
武器・盾・頭・体・装飾品を装備・装備・装備・装備に変更し、
同じものを自由につけれるようにしました。
というか、武器カテゴリに全ての装備を作成し、
武器を複数装備できるようにしただけです。
つまるところ攻撃力0で守備力が上がる武器ですね。
ただし、
初期装備やイベントで防具だった箇所に装備を付けられない欠陥があります。
(function () { Game_Actor.prototype.equipSlots = function() { var slots = []; for (var i = 1; i < $dataSystem.equipTypes.length; i++) { slots.push(1); } if (slots.length >= 2 && this.isDualWield()) { slots[1] = 1; } return slots; }; Window_ItemCategory.prototype.makeCommandList = function() { this.addCommand(TextManager.item, 'item'); this.addCommand(TextManager.weapon, 'weapon'); //this.addCommand(TextManager.armor, 'armor'); this.addCommand(TextManager.keyItem, 'keyItem'); }; })();
slots.push(1);が武器のことで、slots.push(2)が盾ということです。
元のコードが見たかったら、
上記コードの一部をrpg_objects.jsでctrl+Fで探してくださいな。
Window_ItemCategory.prototype.makeCommandListでは、
使わない防具カテゴリをコメントアウトで除外しています。
TP設定
最後に、TPを戦闘終了時に0にしたり、
ダメージを喰らった際の上昇量を抑えたかったのでいじりました。
(function () { Game_Battler.prototype.initTp = function() { this.setTp(0); }; Game_Battler.prototype.chargeTpByDamage = function(damageRate) { var value = Math.floor(20 * damageRate * this.tcr); this.gainSilentTp(value); }; })();
作成したプラグインは以上です。
コードを理解するのはかなり時間がかかります。
ゲームで扱っているデータがなんて変数に格納されているかが、
いまいち把握できていませんね…。
プラグインを推奨するなら、
もっと注釈入れてくれてもいいんじゃないんですかね…?(小言)
それではまた。