目次
●はじめに
VXAceで作成したゲームもMZに移植し、アツマールで公開しようと思います。
今回は転職機能をメニューを使って動かし、マウス操作も可能にします。
●クラスチェンジ
▷SceneCustomMenu.js
「トリアコンタン」さんの「SceneCustomMenu.js」をお借りしてメニューを作ろう。
MZのプラグイン機能と「SceneCustomMenu.js」の高機能さもあって複雑。
デフォルトで用意されているアクター選択がそのまま使えた。
右上の詳細に現在の職業も表示したけど、左のアクター選択にすでに存在してた…まいっか。
とりあえずこれで。↓

上位職は通常職を卒業してから選べるようにする。
上位職は選択できないようにして表示。
条件を満たすと表示される最下行の職業は出さない。↓

職業選択後は移植して使おうと思ったが、
職業変更イベントが変数を使えないため恐ろしいことになってる。
当時は体験版だったので最大変数を変えられずアクターの名前を変数代わりにしたりしてカオス。
VXAceには無かった3つ目の引数がundefinedだし。↓

▷プラグイン作成
不具合発生時にイベントを修正するのも面倒なのでプラグイン化。
/*:ja
* @target MZ
* @plugindesc 転職機能
* @author dar9matter
*
* @help d9mWrapEarthClassChange.js
*
* 転職チェック機能
*
*/
let d9mWE = {};
(() => {
'use strict';
// スキルとして登録した各「卒業の証」のスキルID
let warriorId = 75;
let mageId = 77;
let monkId = 79;
let magicWarriorId = 81;
let knightId = 83;
let sageId = 85;
// 転職機能の初期化
d9mWE.initSelectClass = function () {
$gameVariables.setValue(118, -1); // 変数「118:転職アクター」を初期化
$gameVariables.setValue(109, -1); // 変数「109:選択職業」を初期化
}
// 職業選択の開始
d9mWE.startSelectClass = function () {
$gameSwitches.setValue(117, d9mWE.checkMagicWarrior()); // 「魔法戦士」転職有効のスイッチ
$gameSwitches.setValue(118, d9mWE.checkKnight()); // 「騎士」転職有効のスイッチ
$gameSwitches.setValue(119, d9mWE.checkSage()); // 「賢者」転職有効のスイッチ
$gameSwitches.setValue(120, d9mWE.checkSpiritWarrior()); // 「精霊の戦士」転職有効のスイッチ
// 職業選択ウィンドウを表示
SceneManager.changeWindowFocus('class_select');
}
// キャンセル
d9mWE.cancelSelectClass = function () {
$gameVariables.setValue(118, -1); // 変数「118:転職アクター」を初期化
$gameVariables.setValue(109, -1); // 変数「109:選択職業」を初期化
}
// 転職実行
d9mWE.changeClass = function () {
let actor = $gameVariables.value(118); // 選択中のアクターオブジェクト
let classId = $gameVariables.value(109) + 1; // 選択した職業のID
// テンポラリ用アクターの名前を変更して文章表示に活用
$gameActors.actor(9)._name = actor._name;
$gameActors.actor(8)._name = $dataClasses[classId].name;
// 職業変更
actor.changeClass(classId, false)
}
// 魔法戦士になれるか?
d9mWE.checkMagicWarrior = function () {
let actorId = $gameVariables.value(118).id;
return d9mWE.checkGraduation(actorId, warriorId) && d9mWE.checkGraduation(actorId, mageId);
}
// 騎士になれるか?
d9mWE.checkKnight = function () {
let actorId = $gameVariables.value(118).id;
return d9mWE.checkGraduation(actorId, warriorId) && d9mWE.checkGraduation(actorId, monkId);
}
// 賢者になれるか?
d9mWE.checkSage = function () {
let actorId = $gameVariables.value(118).id;
return d9mWE.checkGraduation(actorId, mageId) && d9mWE.checkGraduation(actorId, monkId);
}
// 精霊の戦士になれるか?
d9mWE.checkSpiritWarrior = function () {
let actorId = $gameVariables.value(118).id;
return d9mWE.checkGraduation(actorId, magicWarriorId)
&& d9mWE.checkGraduation(actorId, knightId)
&& d9mWE.checkGraduation(actorId, sageId);
}
// 卒業したかチェック
d9mWE.checkGraduation = function (actorId, skillId) {
let flag = false;
if (!$gameParty.members()[actorId]) {
return false;
}
$gameParty.members()[actorId].skills().forEach((skill) => {
if (skill.id == skillId) { flag = true; }
});
return flag;
}
})();
転職の呼び出しは用意されてるとは思っていたが、
転職以外も色々制御できるようになってたんだなぁ。

●マップ操作
▷Mキーでマップ表示
マップ表示アイテムの地図が「大事なもの」からになってるので面倒。
Mキーを押すだけで呼べるように修正。

▷マウス操作対応
と、ここまで来てマウス操作できないことに気付く。
標準プラグイン「ButtonPicture.js」を使えばクリック対応できるようなので追加。↓

左上のミニマップをクリックしたら表示、↓


マップ表示中は画面クリックでマップ表示終了するようになった。↓


●魔法仕様
▷マウス操作対応
ゲームのキモである操作はQWASによるキー入力。
こちらもマウス操作に対応しなければならなかった・・・。
操作しにくそうだけど左上のアイコンクリックしてもらう形にするか。

移動先をクリックする形なので、アイコンクリックもそれほど違和感なかった。
●次回へ
転職機能とマップのマウス対応、魔法のマウス対応を行った。
最低限メニューは改善しないと酷い状態なので、次はメニューかな。↓

メニュー>スプリム>魔法と辿ってやっと魔法が使える。
一ヶ月の突貫工事だったとはいえ、やはり酷い。
ここはちょっと手間かもだけど、クレームの嵐は目に見えてるので頑張ろう。
コメント