2017年06月18日
ゲーム制作者向け自分専用プラグインの作り方
◆ゲーム制作者向け自分専用プラグインの作り方
ゲーム制作者の方が作品単位で管理するためのプラグイン自作方法をまとめました。
学習コストを最小限にした内容なので、関数の説明やカスタマイズ性は除外している点をご理解ください。
[この記事で想定している読者]
・ツクールMVのゲーム制作者
・コアスクリプトの編集ができる
テキストエディタで「コピー」「ペースト」「半角/全角」の正確な操作が行える
[メリット]
・プラグイン1ファイルでコアスクリプトの変更箇所を管理できる
・コアスクリプトがバージョンアップをしても影響を受け辛い
[この記事で扱う内容]
・ランダムエンカウントでエンカウントしない歩数をカスタマイズしてプラグイン化する
[この記事で扱わない内容]
・パラメーター設定などのカスタマイズ(プラグイン側の直接編集を想定)
[準備]
例として扱うので、以下の記事を一読ください。
ツクールMV エンカウント率を調整
https://fanblogs.jp/tabirpglab/archive/343/0
■手順
【プラグインファイルの作成】
1.テキストエディタを開き、以下の内容をコピーして貼り付ける
2.次の条件で保存する
・ファイル名:半角英数字.js
・文字コード:UTF-8
保存したら、いったんプラグインファイルはそのままにしておいてください。
【コアスクリプトから編集対象のコピー】
ここからコアスクリプトを対象にした作業です。
3.ツクールMVのプロジェクトから変更したいコアスクリプトを開く
例)エンカウントしない歩数を設定するためrpg_object.jsを開く
4.コアスクリプト内の編集対象をCtrl+Fで検索して探し出す
例)「this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;」をキーに検索
5.『Game〜』から始まり『};』で終わる部分までを漏れなくコピーする
例)
ここまででコアスクリプトの作業は終わりです。
【プラグインファイルの作業】
6.2で保存したプラグインファイルの『//コピペ用スペース』と書いた位置に5のコピー内容を貼りつける
例)
ここまでできたら、プラグインファイルをバックアップしておくと良いと思います。
7.6で貼りつけた内容を編集する
例)
変更前:運が悪いと1歩でエンカウントが発生する
Game_Player.prototype.makeEncounterCount = function() {
var n = $gameMap.encounterStep();
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;
};
変更後:最低15歩はエンカウントが発生しない(上の1の箇所を15に編集)
Game_Player.prototype.makeEncounterCount = function() {
var n = $gameMap.encounterStep();
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 15;
};
機能としては、ここまでで完成です。
8.プラグインとしての体裁を整えるため、必要情報を加筆する
自分専用であれば、エラー発生時にわかるようプラグイン名だけ他と区別するだけでも良いです。
プラグイン管理ではこのように表示されます。
9.プロジェクトの\js\plugins配下にプラグインファイルを保存し、プラグイン管理で有効にする
ここまでで導入は終わりです。
【応用】
上記の例の場合、効果が分かり辛いため、すぐに判別できる変化を追加します。
まずルールとして、次の2つを覚えておいてください。
1.プラグインファイル内では、5のように『Game〜』から始まり『};』で終わる部分までであれば、複数の変更を追加することが可能
2.先頭行に『//』を記述した場合、ソースコードとして実行されない(人がソースを読むためのテキストとして使われる)
上記を踏まえて、ソースを次のように編集しました。
『this.addGameEndCommand();』箇所を『//』を先頭行につけることで無効化しています。
(単純にこの行を削除でも同じことになります)
変更前:
変更後:「ゲーム終了」コマンドをメニューから消す
メニュー画面を開くだけで、プラグインが機能していることが分かります。
■補足
ここまで読み進められた方は、トラブル予防/解決のために次の内容も参考になさってください。
[プラグインの基本知識]
・変更箇所はコアスクリプトより先に読み込まれる(=置き換え箇所が反映される仕組み)
・プラグイン内の記述は上から下へ順番に実行されている
・プラグイン管理に表示されているプラグインは上から下へ順番に実行されている
・記載するコード、文字列は多いほど読み込みが生じる(機能面を追求するならば説明文、ヘルプの文言は少ない方が良い)
プラグインには2種類「改変タイプ」と「機能追加タイプ」があり、今回の2つの機能は「改変タイプ」です。
改変内容がどのソースコードを編集すればよいかさえ分かれば、自分でプラグイン化して管理できるというのが真のメリットでもあります。
[失敗する場合の見直す箇所]
・編集後のプラグインファイルが上書き保存されているか
・『Game〜』から始まり『};』で終わる部分までが正しくコピーできているか
・ソースコード部に半角英数字以外を使用していないか(特にスペースなど)
・変更点より優先して実行されるプラグインが上位にないか(前述の内容)
[より理解を深めたい場合]
以下のサイト様にて関数の概念を交えた解説をしてくださっています。
プラグインを配布する想定の方は、ご覧になると良いでしょう。
RPGツクールMVで感動ものを作る。様-プラグインの作り方
http://ktnhmv.jugem.jp/?eid=12
スマイル工房様 ブログ室-簡単なプラグインを作ってみよう
http://blog.livedoor.jp/trb_surasura/archives/8763286.html
■最後に
制作者さんの中には、プログラミング部分は他の方にお願いして、ゲーム部分の制作やシナリオ、素材選定に注力されるスタンスの方もいらっしゃると思います。
私自身、典型的なそのタイプです。
この記事は自分のためのメンテナンス性向上を目的としたものですが、これをきっかけとしてプラグイン作者さんの作業内容に理解が深まり、エラーの切り分けが進んだり、自己解決できる場面が増え、結果として制作現場全体のコスト削減に貢献できたなら幸いです。
ゲーム制作者の方が作品単位で管理するためのプラグイン自作方法をまとめました。
学習コストを最小限にした内容なので、関数の説明やカスタマイズ性は除外している点をご理解ください。
[この記事で想定している読者]
・ツクールMVのゲーム制作者
・コアスクリプトの編集ができる
テキストエディタで「コピー」「ペースト」「半角/全角」の正確な操作が行える
[メリット]
・プラグイン1ファイルでコアスクリプトの変更箇所を管理できる
・コアスクリプトがバージョンアップをしても影響を受け辛い
[この記事で扱う内容]
・ランダムエンカウントでエンカウントしない歩数をカスタマイズしてプラグイン化する
[この記事で扱わない内容]
・パラメーター設定などのカスタマイズ(プラグイン側の直接編集を想定)
[準備]
例として扱うので、以下の記事を一読ください。
ツクールMV エンカウント率を調整
https://fanblogs.jp/tabirpglab/archive/343/0
■手順
【プラグインファイルの作成】
1.テキストエディタを開き、以下の内容をコピーして貼り付ける
//=============================================================================
// プラグインの名前(半角英数字が基本)
//=============================================================================
/*:
* @plugindesc 『プラグイン管理』で表示される説明文(日本語可)
* @author 作者名(日本語可)
*
* @help
* 『プラグイン管理』の『ヘルプ』で表示されるテキスト(日本語可、改行可)
* 2行目
* 3行目
*/
(function() {
//コピペ用スペース
})();
2.次の条件で保存する
・ファイル名:半角英数字.js
・文字コード:UTF-8
保存したら、いったんプラグインファイルはそのままにしておいてください。
【コアスクリプトから編集対象のコピー】
ここからコアスクリプトを対象にした作業です。
3.ツクールMVのプロジェクトから変更したいコアスクリプトを開く
例)エンカウントしない歩数を設定するためrpg_object.jsを開く
4.コアスクリプト内の編集対象をCtrl+Fで検索して探し出す
例)「this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;」をキーに検索
5.『Game〜』から始まり『};』で終わる部分までを漏れなくコピーする
例)
Game_Player.prototype.makeEncounterCount = function() {
var n = $gameMap.encounterStep();
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;
};
ここまででコアスクリプトの作業は終わりです。
【プラグインファイルの作業】
6.2で保存したプラグインファイルの『//コピペ用スペース』と書いた位置に5のコピー内容を貼りつける
例)
=============================================================================
// プラグインの名前(半角英数字が基本)
//=============================================================================
/*:
* @plugindesc 『プラグイン管理』で表示される説明文(日本語可)
* @author 作者名(日本語可)
*
* @help
* 『プラグイン管理』の『ヘルプ』で表示されるテキスト(日本語可、改行可)
* 2行目
* 3行目
*/
(function() {
Game_Player.prototype.makeEncounterCount = function() {
var n = $gameMap.encounterStep();
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;
};
})();
ここまでできたら、プラグインファイルをバックアップしておくと良いと思います。
7.6で貼りつけた内容を編集する
例)
変更前:運が悪いと1歩でエンカウントが発生する
Game_Player.prototype.makeEncounterCount = function() {
var n = $gameMap.encounterStep();
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;
};
変更後:最低15歩はエンカウントが発生しない(上の1の箇所を15に編集)
Game_Player.prototype.makeEncounterCount = function() {
var n = $gameMap.encounterStep();
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 15;
};
機能としては、ここまでで完成です。
8.プラグインとしての体裁を整えるため、必要情報を加筆する
自分専用であれば、エラー発生時にわかるようプラグイン名だけ他と区別するだけでも良いです。
//=============================================================================
// test.js
// Version: 1.00
// Copyright (c) kuro
// This software is released under the MIT License.
//=============================================================================
/*:
* @plugindesc 重力ルーペ用プラグイン
* @author kuro(https://fanblogs.jp/tabirpglab/)
*
* @help
* 非エンカウント歩数調整
*/
(function() {
Game_Player.prototype.makeEncounterCount = function() {
var n = $gameMap.encounterStep();
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 15;
};
})();
プラグイン管理ではこのように表示されます。
9.プロジェクトの\js\plugins配下にプラグインファイルを保存し、プラグイン管理で有効にする
ここまでで導入は終わりです。
【応用】
上記の例の場合、効果が分かり辛いため、すぐに判別できる変化を追加します。
まずルールとして、次の2つを覚えておいてください。
1.プラグインファイル内では、5のように『Game〜』から始まり『};』で終わる部分までであれば、複数の変更を追加することが可能
2.先頭行に『//』を記述した場合、ソースコードとして実行されない(人がソースを読むためのテキストとして使われる)
上記を踏まえて、ソースを次のように編集しました。
//=============================================================================
// test.js
// Version: 1.01
// Copyright (c) kuro
// This software is released under the MIT License.
//=============================================================================
/*:
* @plugindesc 重力ルーペ用プラグイン
* @author kuro(https://fanblogs.jp/tabirpglab/)
*
* @help
* 非エンカウント歩数調整、メニューから「ゲーム終了」を削除
*/
(function() {
//エンカウント最低保証歩数を15歩
Game_Player.prototype.makeEncounterCount = function() {
var n = $gameMap.encounterStep();
this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 15;
};
//「ゲーム終了」コマンドをメニューから消す
Window_MenuCommand.prototype.makeCommandList = function() {
this.addMainCommands();
this.addFormationCommand();
this.addOriginalCommands();
this.addOptionsCommand();
this.addSaveCommand();
// this.addGameEndCommand();
};
})();
『this.addGameEndCommand();』箇所を『//』を先頭行につけることで無効化しています。
(単純にこの行を削除でも同じことになります)
変更前:
変更後:「ゲーム終了」コマンドをメニューから消す
メニュー画面を開くだけで、プラグインが機能していることが分かります。
■補足
ここまで読み進められた方は、トラブル予防/解決のために次の内容も参考になさってください。
[プラグインの基本知識]
・変更箇所はコアスクリプトより先に読み込まれる(=置き換え箇所が反映される仕組み)
・プラグイン内の記述は上から下へ順番に実行されている
・プラグイン管理に表示されているプラグインは上から下へ順番に実行されている
・記載するコード、文字列は多いほど読み込みが生じる(機能面を追求するならば説明文、ヘルプの文言は少ない方が良い)
プラグインには2種類「改変タイプ」と「機能追加タイプ」があり、今回の2つの機能は「改変タイプ」です。
改変内容がどのソースコードを編集すればよいかさえ分かれば、自分でプラグイン化して管理できるというのが真のメリットでもあります。
[失敗する場合の見直す箇所]
・編集後のプラグインファイルが上書き保存されているか
・『Game〜』から始まり『};』で終わる部分までが正しくコピーできているか
・ソースコード部に半角英数字以外を使用していないか(特にスペースなど)
・変更点より優先して実行されるプラグインが上位にないか(前述の内容)
[より理解を深めたい場合]
以下のサイト様にて関数の概念を交えた解説をしてくださっています。
プラグインを配布する想定の方は、ご覧になると良いでしょう。
RPGツクールMVで感動ものを作る。様-プラグインの作り方
http://ktnhmv.jugem.jp/?eid=12
スマイル工房様 ブログ室-簡単なプラグインを作ってみよう
http://blog.livedoor.jp/trb_surasura/archives/8763286.html
■最後に
制作者さんの中には、プログラミング部分は他の方にお願いして、ゲーム部分の制作やシナリオ、素材選定に注力されるスタンスの方もいらっしゃると思います。
私自身、典型的なそのタイプです。
この記事は自分のためのメンテナンス性向上を目的としたものですが、これをきっかけとしてプラグイン作者さんの作業内容に理解が深まり、エラーの切り分けが進んだり、自己解決できる場面が増え、結果として制作現場全体のコスト削減に貢献できたなら幸いです。
【このカテゴリーの最新記事】
-
no image
-
no image
この記事へのコメント
コメントを書く
この記事へのトラックバックURL
https://fanblogs.jp/tb/6383818
※ブログオーナーが承認したトラックバックのみ表示されます。
この記事へのトラックバック