アフィリエイト広告を利用しています
検索
言葉を集めて世界を旅するRPG「地図の時間〜言葉集めの冒険譚〜」
timeofmapworks_logo_2020.png
ハートフルRPG「地図の時間」

地図の時間スピンオフRPG「影泥棒と魔法の手記」

リソース管理ダンジョンRPG「琥珀の道具士」

現代SFRPG「重力ルーペ/探求リバーブ」

ドラマティックRPG「バンドワゴン」

ビジュアルノベル「日向と香水」

ノベル×ADV「ストーリーテラー」 title1_2.png
カテゴリ
プロフィール/制作環境(3)
制作記(679)
ニュース(ツクールMV)(222)
技術情報(ツクールMV)(203)
JavaScript/スクリプト(ツクールMV)(9)
プラグイン情報(ツクールMV)(11)
素材情報(ツクールMV)(15)
アップデート情報(ツクールMV)(45)
トラブル&解決情報(ツクールMV)(18)
ツクール製作品(ツクールMV)(42)
関連情報(ツクールフェス)(2)
投稿イベント情報(ツクールMV)(4)
関連情報(ラノゲツクールMV)(9)
Benchmark MV(個人作品:試作)(1)
manurpg(個人作品:試作)(2)
ブックモービル(個人作品)(10)
重力ルーペ(個人作品)(11)
そして魔女に会う(個人作品)(7)
バンドワゴン(個人作品)(1)
地図の時間(個人作品)(14)
日向と香水(個人作品)(3)
ストーリーテラー(個人作品)(1)
嘘つきのノブレスオブリージュ(2)
お役立ちツール/素材サイト(創作全般)(12)
創作アイディア(創作全般)(7)
保存用コラム(創作全般)(10)
コラム(144)
オススメ作品(8)
当ブログへのお問い合わせ(contact me)(2)
琥珀の道具士(3)
最果てのギルド(1)
読書メモ(1)
Steam展開ノウハウ(21)
RPGツクールMZ(3)
地図の時間〜名前探しの物語(1)
プラグイン情報(ツクールMZ)(1)
技術情報(ツクールMZ)(13)
国内展開ノウハウ(1)
素材情報(ツクールMZ)(4)
AI(8)
RPG Maker Unite(2)
DAW(1)
翻訳(1)
リンク集

2017年06月18日

ゲーム制作者向け自分専用プラグインの作り方

◆ゲーム制作者向け自分専用プラグインの作り方
ゲーム制作者の方が作品単位で管理するためのプラグイン自作方法をまとめました。
学習コストを最小限にした内容なので、関数の説明やカスタマイズ性は除外している点をご理解ください。

[この記事で想定している読者]
・ツクールMVのゲーム制作者
・コアスクリプトの編集ができる
 テキストエディタで「コピー」「ペースト」「半角/全角」の正確な操作が行える

[メリット]
・プラグイン1ファイルでコアスクリプトの変更箇所を管理できる
・コアスクリプトがバージョンアップをしても影響を受け辛い

[この記事で扱う内容]
・ランダムエンカウントでエンカウントしない歩数をカスタマイズしてプラグイン化する

[この記事で扱わない内容]
・パラメーター設定などのカスタマイズ(プラグイン側の直接編集を想定)

[準備]
例として扱うので、以下の記事を一読ください。

ツクールMV エンカウント率を調整
https://fanblogs.jp/tabirpglab/archive/343/0

■手順
【プラグインファイルの作成】
1.テキストエディタを開き、以下の内容をコピーして貼り付ける

//=============================================================================
// プラグインの名前(半角英数字が基本)
//=============================================================================
/*:
* @plugindesc 『プラグイン管理』で表示される説明文(日本語可)
* @author 作者名(日本語可)
*
* @help
* 『プラグイン管理』の『ヘルプ』で表示されるテキスト(日本語可、改行可)
* 2行目
* 3行目
*/

(function() {

//コピペ用スペース

})();



2.次の条件で保存する
・ファイル名:半角英数字.js
・文字コード:UTF-8
20170618-8.jpg

保存したら、いったんプラグインファイルはそのままにしておいてください。

【コアスクリプトから編集対象のコピー】
ここからコアスクリプトを対象にした作業です。

3.ツクールMVのプロジェクトから変更したいコアスクリプトを開く
例)エンカウントしない歩数を設定するためrpg_object.jsを開く

20170618-6.jpg

4.コアスクリプト内の編集対象をCtrl+Fで検索して探し出す
例)「this._encounterCount = Math.randomInt(n) + Math.randomInt(n) + 1;」をキーに検索
20170618-5.jpg

5.『Game〜』から始まり『};』で終わる部分までを漏れなくコピーする
例)
20170618-7.jpg


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;
};

})();



プラグイン管理ではこのように表示されます。
20170618-9.jpg

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();』箇所を『//』を先頭行につけることで無効化しています。
(単純にこの行を削除でも同じことになります)

変更前:
20170618-10.jpg
変更後:「ゲーム終了」コマンドをメニューから消す
20170618-11.jpg

メニュー画面を開くだけで、プラグインが機能していることが分かります。

■補足
ここまで読み進められた方は、トラブル予防/解決のために次の内容も参考になさってください。

[プラグインの基本知識]
・変更箇所はコアスクリプトより先に読み込まれる(=置き換え箇所が反映される仕組み)
・プラグイン内の記述は上から下へ順番に実行されている
・プラグイン管理に表示されているプラグインは上から下へ順番に実行されている
・記載するコード、文字列は多いほど読み込みが生じる(機能面を追求するならば説明文、ヘルプの文言は少ない方が良い)

プラグインには2種類「改変タイプ」と「機能追加タイプ」があり、今回の2つの機能は「改変タイプ」です。
改変内容がどのソースコードを編集すればよいかさえ分かれば、自分でプラグイン化して管理できるというのが真のメリットでもあります。

[失敗する場合の見直す箇所]
・編集後のプラグインファイルが上書き保存されているか
・『Game〜』から始まり『};』で終わる部分までが正しくコピーできているか
・ソースコード部に半角英数字以外を使用していないか(特にスペースなど)
・変更点より優先して実行されるプラグインが上位にないか(前述の内容)

[より理解を深めたい場合]
以下のサイト様にて関数の概念を交えた解説をしてくださっています。
プラグインを配布する想定の方は、ご覧になると良いでしょう。

 RPGツクールMVで感動ものを作る。様-プラグインの作り方
 http://ktnhmv.jugem.jp/?eid=12

 スマイル工房様 ブログ室-簡単なプラグインを作ってみよう
 http://blog.livedoor.jp/trb_surasura/archives/8763286.html

■最後に
制作者さんの中には、プログラミング部分は他の方にお願いして、ゲーム部分の制作やシナリオ、素材選定に注力されるスタンスの方もいらっしゃると思います。

私自身、典型的なそのタイプです。

この記事は自分のためのメンテナンス性向上を目的としたものですが、これをきっかけとしてプラグイン作者さんの作業内容に理解が深まり、エラーの切り分けが進んだり、自己解決できる場面が増え、結果として制作現場全体のコスト削減に貢献できたなら幸いです。
この記事へのコメント
コメントを書く

お名前:

メールアドレス:


ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバックURL
https://fanblogs.jp/tb/6383818
※ブログオーナーが承認したトラックバックのみ表示されます。

この記事へのトラックバック