ラベル ツクールMV の投稿を表示しています。 すべての投稿を表示
ラベル ツクールMV の投稿を表示しています。 すべての投稿を表示

2020年3月21日土曜日

カスタムメニュー作成プラグイン

RPGツクールMVで使用可能な自作プラグイン「カスタムメニュー作成プラグイン」の紹介です。

プラグインの説明

 プラグインパラメータからウィンドウ情報を定義して独自のメニュー画面を作れます。初期状態で動作するサンプルや豊富なスクリプトのプリセットが用意されていてすぐに動作を確認できます。

 また、コモンイベントが使えるので細かい要件にも対応できます。

スクリーンショット

 以下のような独自のウィンドウ、独自のレイアウトのメニュー画面を手軽に作成できます。

 プラグインパラメータからウィンドウ情報を定義して使います。プリセットの設定をいくつか用意しているので参考にしてください。
スクリーンショット

チュートリアル

 カスタムメニュー画面の作り方を簡単に解説します。

シーンを作成する

 まずはカスタムメニュ用のシーンの識別子を決めます。識別子とはシーンを一意に区別するための文字列で、他のシーンと被らない文字列を設定してください。

 『ヘルプウィンドウ使用』を有効にすると、画面上部にヘルプウィンドウが表示されます。
ss01

ウィンドウを作成する

 次にウィンドウを作成します。シーンと同じく識別を設定して、座標や幅、高さなども設定します。追加でフォントサイズやウィンドウスキンの設定も可能です。

 相対座標ウィンドウを設定すると、座標がそのウィンドウからの相対位置になるので、別のウィンドウの右や下にくっつけて配置できます。
ss02

ウィンドウの中身を作成する

直接指定の場合

 ウィンドウの中身は、項目を直接入力する方法とデータベースやアクターデータ等から取得する方法とがあります。直接入力する場合は、コマンドリストにコマンド名を直接入力します。

 必要に応じて表示可否スイッチや選択可否スイッチも指定できます。
ss03

動的指定の場合(一覧取得)

 データベース等から動的に項目を取得する場合は、スクリプトを使ってウィンドウに表示する一覧データを取得します。
ss04

 スクリプトには豊富なプリセットが用意されていて、選択したプリセットを改変することもできるのでJavaScriptに慣れていなくても利用可能です。
ss05

動的指定の場合(項目の描画)

 一覧の各項目を描画する場合もスクリプトで指定します。こちらもプリセットが用意されています。また、記述を省略すると内容を自働で判断して描画してくれます。
ss06

 描画される座標をずらしたい場合は、以下のように指定値を加算、減算します。この場合、もとの座標より30pixel右に描画されます。
ss07

ウィンドウ同士の遷移関係を定義する

 ウィンドウで項目の決定やキャンセルが行われたとき、次にフォーカスするウィンドウを指定したり、スクリプトを実行したりできます。この機能によりウィンドウ同士の遷移関係を定義します。
ss08

コモンイベントを実行する

 スキルの習得や能力値の変化など、カスタムメニュー画面を使って実際にやりたいことは主にコモンイベントを使って実現します。

 コモンイベントはピクチャの表示などの演出にも使えます。ただし、画面の色調変更など一部のコマンドは機能しません。
ss09

カスタムメニュー画面の呼び出し

 作成したカスタムメニュー画面は、以下のスクリプトから呼び出せます。引数にはシーン識別子を指定します。メインメニューに項目を追加するプラグインと併用する場合もこのスクリプトを使ってください。

SceneManager.callCustomMenu('Scene_ActorList');

注意点

  • このプラグインはRPGツクールMV1.6.0以降でのみ動作します。バージョンが古い場合はバージョンアップをご検討ください。
  • このプラグインにはメインメニューに項目を追加する機能は実装していません。当該機能を持つ他プラグインと連携してご利用ください。

例:メニュー画面のサブコマンドプラグイン https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/MenuSubCommand.js

ダウンロード

以下のURLからダウンロードできます。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/SceneCustomMenu.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。

2020年2月22日土曜日

RPGツクールMV本体が提供する暗号化機能の基本的な仕様と注意点について

 RPGツクールMVには、画像と音声素材の暗号化機能が付いています。本稿ではこの機能の特徴や使う際の注意点などを簡潔にまとめています。

デプロイメント画面

 なお、本稿ではあくまで本体が提供する暗号化機能の解説にとどめ、他の代替案などについては解説しません。

暗号化機能の仕様

対象ファイルはpng、ogg、m4aのみ

 暗号化されるファイルの書式は画像ファイルではpng、音声ファイルではogg、m4aのみです。bmpやgifなど、png以外の画像形式は暗号化の対象になりません。

 また、webmなどの動画形式のファイルやフォントファイル、jsonなどのデータファイルやjsファイルも対象外です。

 ただし、画像ファイルについては拡張子をpngに偽装することで暗号化の対象になります。

暗号化されるのはデプロイメントのタイミング

 暗号化が実行されるのはデプロイメント実行時です。つまり、テストプレーでは正常に復号できるか確認できません。詳細は後述しますが、特にプラグインを使っている場合、復号ができないケースがあります。

暗号化の実装をプラグイン等では改変できない

 暗号化機能はRPGツクールMV本体が実行しているので、プラグインで仕様を改変するのは不可能です。別途暗号化を実装するプラグインなら作れますが、それはまた別の話……

RPGアツマールには対応していない

 これはRPGアツマール側の仕様になりますが、暗号化されたファイル形式はRPGアツマール側で弾かれてしまいます。RPGツクールMV本体の「ゲームをシェア」機能でも暗号化のチェックボックスは非活性になっています。

ゲームをシェア

やろうと思えばゲームを介さずに復号可能

 詳細な方法は省略しますが、復号の際に必要になるキー情報は容易に入手できるのでその気になれば誰でも復号できます。

 ただし、プロジェクトを開かれたり、ファイルをエクスプローラやFinderで簡単に閲覧、再生されることを防ぐための機能と考えれば十分に有用です。

暗号化機能を利用する際の注意点と対策

暗号化機能が本当に制作するゲームにとって必要かどうか事前に考える

 前述のとおり、暗号化機能は対象ファイルや有用なケースが限定されています。上記仕様を理解したうえで本当に暗号化するかどうか検討することをオススメします。

使用するプラグインが暗号化機能に対応しているかどうか確認する

 プラグインのなかには、暗号化機能に対応していないものもあります。具体的には、コアスクリプトが提供する関数以外の方法でpngファイルやoggファイルを使用し、かつ暗号化を考慮していないプラグインです。

 そういったプラグインを使用した場合、テストプレーでは正常に動作しても、デプロイメント後だと正常に動作しません。暗号化機能には対象外ファイルを選択する機能はないので、デプロイメント後に当該プラグインが使っているファイルのみ非暗号化ファイルに手動で差し替える等の対策が必要です。

早い段階でデプロイメントして動作確認する

 とはいえ、実際使っているプラグインが暗号化機能に対応しているかどうかは分からないと思います。よって、早い段階でデプロイメントしてみて正常に動くかどうか試してみることが重要です。

 もし動かないプラグインがあった場合、作者に連絡しても対策してもらえる見込みはあまり大きくないと考えた方がいいと思います。なぜなら暗号化機能の対応はわりと改修規模が大きく、技術的にも複雑な場合が多いからです。

プラグイン作者視点での暗号化機能に対する向き合い方

暗号化機能の存在を忘れないようにする

 この機能は影が薄いのでついつい存在を忘れがちです。忘れないようにしましょう。

対応できない場合はヘルプに明記する

 自身のプラグインが暗号化機能に対応しているかどうか、作者ならすぐに分かると思います。暗号化機能を考慮するのがベストですが、難しい場合は制約事項としてヘルプに明記しておくのがいいと思います。

 対応する場合、rpg_core.jsのDecrypterというクラスに復号処理が記述されているのでこれをうまく活用します。

 余談ですが、以前にapngピクチャ再生プラグインを作ったときは独自に復号処理を呼び出すことでpngファイルのみなんとか対応しましたが、gifアニメはもともと暗号化の対象外なのでその旨をヘルプに記載して対応しました。

2019年2月24日日曜日

RPGツクールMVのバージョンを「1.6系」にあげるべきか

 RPGツクールMVの本体バージョン1.6系が公開されてからしばらく経ちますが、このメジャーバージョンは過去にいくつか問題を起こした経緯があり、今でも情報が錯綜していて『バージョンを上げるべきか』迷っている方も少なくないようです。

 そこで本稿では状況を改めて整理し現時点(2019/02/24)でバージョンアップすべきかどうか指針を示そうと思います。ちなみに「本体」のバージョンの話であり「コアスクリプト」のバージョンではありません。

画像

 なお、本稿は私の独自調査に基づくものであり、ツクール公式のお墨付きを得たものでないことを断っておきます。

バージョンの差し戻し(ダウングレード)方法

 まず前提として、バージョンアップ後でも元の1.5系へに差し戻しは可能です。Steam版とパッケージ版とでやり方が異なりますが、Steam版の方が少し楽です。

パッケージ版の場合

 公式フォーラムに以下の記事があり、ここから1.5.1の再ダウンロードができます。リンク先の手順に従ってください。
【お知らせ】RPGツクールMV バージョン1.5.1再公開

Steam版の場合

 ソフトウェア一覧の「RPG Maker MV」を右クリック→「プロパティ」→「ベータ」タブから選択できます。なお、ツクールMVを起動している間はドロップダウンを選択できませんのでその場合、一旦落としてください。

Steam版ダウングレード方法

1.6系の特徴

 ダウングレード方法について確認したところで、バージョン1.6系がそれ以前と何か違うのかを説明します。

NW.jsの公式差し替え

 「NW.js」と呼ばれるツクールMVの実行エンジンが(1.6系リリース時点での)最新版に差し替えられました。これが1.6系のほぼ唯一にして最大の特徴です。

 (一部ユーザにとってはもう聞き飽きたかもしれませんが)NW.jsは、Chromiumをもとに作られたマルチプラットフォームの実行環境で、今も改良が続けられています。

 1.5系はツクール発売当時(正確には開発当時)のNW.jsが使用されていましたが、1.6系で1.6.0リリース時点での最新版に差し替えられました。実はこのNW.jsは1.5系でもユーザの手作業で差し替えることが可能で、一部ユーザは自力で差し替えを行っていました。以下に当時の記事が残っているので参考にしてください。

 ただ、この手作業での差し替えは多少PCの扱いに慣れている必要があるというのと、広く知れ渡った方法ではなかったため、公式のバージョンアップに取り込まれたのが1.6というワケです。

NW.js差し替えによるメリット

 詳しいメリットについては上の記事に記載していますが、ひと言でいうとパフォーマンスが改善しています。ツクールMVユーザにとってパフォーマンスは大きな課題のひとつであり、特にピクチャを多用したり、プラグイン等を使って画像をたくさん表示していたプロジェクトにおいてその改善は体感で分かるほど明らかです。これは非常に大きな改善と言えます。

 多くのユーザがわざわざ手間を掛けて今までエンジンを手作業で最新化していたのはこのためです。

1.6系にアップグレードする場合のリスク

 前述の通り1.6系はエンジンの刷新が主な変更点です。エンジンを刷新するというのは実行環境が変わることを意味します。それはつまり今まで動いていたものが動かなくなる可能性があるというリスクを孕んでいます。

 ただし、この項目は一部こちらでの検証・確認が十分でないものも含まれていますのでご注意ください。

一部のプラグインが正常に動作しなくなる

 NW.jsの手動差し替えの頃から指摘されていましたが、ごくまれに正常に動作しなくなるプラグインがあります。ただ、1.6系がリリースされてしばらく経った今ではプラグイン作者側の対応も進んでいるため、動かないプラグインも減ってきています。(こちらでもいくつか対応しました)

 ただ、海外製の高機能なプラグインの中には、そもそも単純なコード修正では対応が難しいプラグインもあるようです。コミュニケーションの問題もあると思うので、海外製のプラグインが正常に動作しなくなった場合は、差し戻した方が賢明かもしれません。

一部のムービーが再生に失敗することがある

 一部のwebmファイルが正常に再生されず最初のコマで止まってしまうことがあります。ただ、すべてのwebmファイルで発生するわけではなく、またコーデックとも直接は関係なさそうで根本原因は不明です。ムービーを多用する場合、正常に再生できるか入念にチェックしたほうがいいと思います。

WebGLモードで動作するための要件が変わっている?

 正確な情報ではありませんが、WebGLモードで動作するための要件が内部で変わっている可能性があります。(本件は後述するデプロイ後にCanvasモードになってしまう問題とは別です)

 つまり今までWebGLモードで実行できていた環境なのにアップデート後はCanvasモードで実行されてしまう、というケースです。Canvasモードでの実行は多くの実行環境でパフォーマンスが低下するほか、一部プラグインやスクリプトの演出が動作しなくなります。

コアスクリプトのバージョンが古いままだとテストプレー特有の機能が使えない

 コアスクリプトのバージョンが1.6.0より前だとテストプレー特有の壁抜けなどの機能が使えなくなります。コアスクリプトも最新に差し替えれば問題は解決しますが、差し替えが難しい場合はこちらで対策プラグインを用意しています。

すでに解決した問題

 過去の1.6系で発生していた問題です。最新版では解決されていますが、情報が十分に周知されていない場合もあるので整理のためここに残しておきます。

エディタ上で特定の操作を実行するとアプリケーションが強制終了する

 この問題は、1.6.0公開当初にのみ発生していました。Qtというエディタで使っているライブラリのバージョンをあげたことにより発生したようです。1.6.1にてQtのバージョンを元に戻し本現象は解決しました。

コアスクリプトが古い状態でテストプレーを実行するとコアスクリプトが自動で差し替えられてしまう

 この問題も1.6.1により解決しました。コアスクリプトに直接変更を加えている場合やコアスクリプトのバージョンを上げたくない場合などでも強制的に差し替えられてしまいます。

デプロイしたゲームがWebGLで動作する環境でもCanvasモードになってしまう

 この問題は1.6.2により解決しました。Canvasモードの問題点は前述の通りでパフォーマンスに影響するので無視できない問題でしたが無事に解決しました。  

まとめ

 1.6系はいくつかの問題があり、解決されたものと未解決のものとがありますが、パフォーマンス上の重要な更新を含むので可能なら適用させたいところです。そのためには情報を整理し、リスクを改めて確認する必要があると思い記事にまとめました。参考にして頂ければ幸いです。

 ここまでお読みくださり、ありがとうございました。

2018年5月20日日曜日

データベース変換プラグイン

RPGツクールMVで使用可能な自作プラグイン「データベース変換プラグイン」の紹介です。

プラグインの説明

 ツクールMVのデータベースおよびイベント内容をExcelやCSVなどのシートデータ(以下シートファイル)に書き出し、読み込みします。以下のような目的に利用できます。本プラグインは上級者向けのプラグインです。注意してお使いください。

  • データベース全体を俯瞰したパラメータ調整
  • 計算式や書式、マクロを利用した効率的で自由度の高いデータベース、イベント編集
  • 他プロジェクトへのデータやイベント移植

スクリーンショット

 データベースの出力例です。グラフはExcelの機能で出力しています。 スクリーンショット

使い方

 イベントテスト(イベントエディタ上で右クリック→テスト)から所定のプラグインコマンド(後述)を実行すると書き出しおよび読み込みができます。

書き出し手順

  1. 本プラグインを管理画面からONにする。
  2. 「プロジェクトの保存」を実行する。(初回実行時のみ)
  3. イベントテストから所定のプラグインコマンドを実行する。
  4. 所定のフォルダにシートファイルが出力される。

読み込み手順

  1. 「プロジェクトの保存」を実行する。
  2. Dataフォルダをバックアップしておく。※重要
  3. イベントテストから所定のプラグインコマンドを実行する。
  4. 「プロジェクトを開く」を実行して、プロジェクトを開き直す。開き直すとき、プロジェクトの保存はしないでください。

※プラグインコマンドは1つずつ実行してください。一度に複数のコマンドを実行することはできません。

オリジナルデータベース作成手順(上級者向け)

  1. パラメータ「オリジナルデータ読み込み」をOFFにする。
  2. パラメータ「対象データベース」にオリジナルデータを追加
  3. データベースをエクスポート
  4. オリジナルデータのシートが追加されるので自由に編集
  5. データベースをインポート
  6. パラメータ「オリジナルデータ読み込み」をONにする。
  7. スクリプトからオリジナルデータの内容を参照できる。

出力対象データ

データベース

既存のデータベースを入出力します。ファイル名は「Database」です。出力フォーマットに合わせた拡張子が付与されます。(以降も同様) タイルセットおよびコモンイベントは対象外です。さらに独自に定義したデータ(スクリプトから参照)も入出力可能です。

コモンイベント

コモンイベントの実行内容を入出力します。ファイル名は「CommonEvents」です。パラメータの詳細は以下のスプレッドシートが参考になります。 https://docs.google.com/spreadsheets/d/1rOIzDuhLC6IqJPEFciYOmXWL_O7X9-hMValMs7DpWCk/edit#gid=1266374350

マップイベント

マップイベントの実行内容を入出力します。ファイル名は「MapXXX」です。シート名に「イベントID」および「イベントページ」が出力されます。

イベントテスト

イベントテストで選択した実行内容を出力します。ファイル名は「Test_Event」です。出力のみに対応しています。

出力対象フォーマット

Excelファイル以外にもCSVやOpenDocument Spreadsheetなど 以下のフォーマットに対応しています。プラグインパラメータから変更可能です。

  • xlsx Excel2007以降の一般的な形式です。
  • xlsm Excel2007以降のマクロ付き形式です。
  • xlsb Excel2007以降のバイナリ形式です。容量や速度面で優れています。
  • ods 特定のベンダに依存しないオープンなファイル形式です。
  • fods 特定のベンダに依存しないオープンなXMLテキストファイル形式です。
  • csv カンマ区切りのテキストファイル形式です。
  • txt タブ区切りのテキストファイル形式です。

出力ファイル詳細

  1. 出力時に同名のファイルが存在した場合は上書きされます。(※1)
  2. シート名にはデータ種別が出力されるので編集しないでください。
  3. 出力ファイルの1行目には入出力に必須な情報(プロパティ名)が出力されます。ここも編集しないでください。
  4. 2行目には項目の日本語名が出力されます。読み込み時は無視されます。
  5. 配列項目(特徴など)は一部除きjson文字列で出力されます。編集は非推奨です。
  6. 数値や文字列は編集できますが、整合性のない値の入力には注意してください。
  7. Excel計算式は計算結果がデータベースの値として読み込まれます。
  8. 書式設定や行列の設定、マクロの追加などは自由です。
  9. データベースは読み込み時にID列でソートされます。重複はエラーになります。

※1 同名ファイルを開いているとエラーになるのでファイルを閉じてください。

注意事項

バックアップについて

当プラグインの機能を使用する前にプロジェクト以下の「data」フォルダのバックアップを 「必ず」 取得してください。

「data」フォルダの内容を自動でバックアップするプラグインも配布しています。こちらのご利用もご検討ください。 https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/BackUpDatabase.js

いかなる場合も破損したプロジェクトの復元には応じられませんのでご注意ください。

Excelのエラーメッセージについて

エクスポートしたExcelファイルを開いたときに何らかのエラーメッセージが表示された場合は、そのまま編集およびインポートしないでください。

プラグインの有効範囲

本プラグインの機能は「イベントテスト」から実行した場合のみ有効です。通常のテストプレーおよび製品版には影響を与えません。 (独自データの読み込み機能は例外)

プラグインコマンド

イベントコマンド「プラグインコマンド」から実行。(パラメータの間は半角スペースで区切る)

EXPORT_DATABASE

データベースの内容を指定したフォーマットで出力します。

IMPORT_DATABASE

シートファイルを読み込んでデータベースファイルを書き換えます。 エディタに反映させるためには、プロジェクトを開き直す必要があります。

EXPORT_COMMON_EVENT 2

ID[2]のコモンイベントの実行内容を出力します。IDは複数指定可能です。 IDを指定しなかった場合は全てのコモンイベントを出力します。

IMPORT_COMMON_EVENT 3

シートファイルを読み込んでID[3]のコモンイベントを書き換えます。 IDを指定しなかった場合は全てのコモンイベントを書き換えます。

EXPORT_MAP_EVENT 6 20

ID[6]のマップにあるID[20]のイベントの実行内容を出力します。 イベントIDは複数指定可能で省略した場合、全イベントを出力します。 マップIDは省略できません。

IMPORT_MAP_EVENT 6 20

シートファイルを読み込んでID[6]のマップにあるID[20]のイベントの実行内容を書き換えます。 イベントIDは複数指定可能で省略した場合、全イベントを書き換えます。 マップIDは省略できません。

ダウンロード

以下のURLからダウンロードできます。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/DatabaseConverter.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

使用ライブラリ

Excelデータの解析にはSheetJSのCommunity Editionを使用しています。 http://sheetjs.com/

Copyright (C) 2012-present SheetJS LLC
Licensed under the Apache License, Version 2.0

SheetJSはCDNを通じて提供されるため、プラグイン利用者は別途ライブラリを導入する必要はありませんが、オフラインで作業する場合やダウンロードできない場合は、以下の手順に従ってダウンロードしプラグインとして適用してください。

  1. 以下のサイトのdist/xlsx.full.min.jsをダウンロードする。 https://github.com/sheetjs/js-xlsx
  2. ファイル名を任意の英字に変更する。 (ファイル名に「.」が含まれているとプラグインとして取り込めないため)
  3. プラグイン管理画面から有効にする。

ExcelはMicrosoftの登録商標です。

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。

2018年4月21日土曜日

RPGツクールMVでプロジェクトが突然読み込めなくなったときの対処法

 RPGツクールMV(以下ツクールMV)でゲーム制作をしていると、突然以下のようなメッセージが表示されてプロジェクトが開けなくなる……という事案がツイッターや各種フォーラムなどでしばしば報告されています。

Error1

 本稿では、本現象について原因と対処法を紹介しています。

復旧できるのか

 一番先に結論から言うと『ファイルの一部が破損している場合があるが、部分的には復旧可能』です。主にデータベースの一部もしくは全部が破損している可能性があります。

 巻末でも改めて言及しますが、ツクールMVでゲーム制作するのなら(ツクールMVでなくても)日常的なバックアップは必須です。

 ゲーム制作は数ヶ月単位あるいは年単位の長丁場となることが多いです。膨大な作業が一瞬で水泡に帰すことのないよう、何らかの対策を必ずしましょう。それでは復旧手順について解説します。

原因

 ツクールMVは、プロジェクト保存時に編集した情報を、メモリ上から各種ファイルに書き込みます。その処理中に何らかの原因で異常終了(メモリが足りないことによるアプリやOSのクラッシュ等)すると稀に書き込んでる最中だったファイルが破損する場合があるようです。

 対象は以下のファイルです。

  • Actors.json
  • Animations.json
  • Armors.json
  • Classes.json
  • CommonEvents.json
  • Enemies.json
  • Items.json
  • MapInfos.json
  • Skills.json
  • States.json
  • System.json
  • Tilesets.json
  • Troops.json
  • Weapons.json
  • MapXXX.json
  • Game.rpgproject

 上記ファイルの全てが破損するわけではありません。保存の最中ではなかったファイルは破損しません。特に「MapXXX.json」(マップごとのデータファイル)については前回保存時から編集してなければ保存対象外なので大半は復旧可能です。

復旧手順

現在のプロジェクトのバックアップを取る

 一部ファイルの上書きや差し替えを行うので事前にバックアップを取っておきましょう。

新規プロジェクトを作る

 破損したファイルを正しいファイルに上書きするので、まず新規でプロジェクトを作成しましょう。

破損したプロジェクトの『Game.rpgproject』を新規プロジェクトの『Game.rpgproject』で上書きする

 冒頭のメッセージダイアログから当該ファイルが破損していることは確実です。とはいえこのファイル、テキストエディタで開いてみれば分かりますが、中身は単にツクールMVのバージョンが書いているだけの単純なファイルです。よって下記のテキストで上書きすることでも復旧可能です。

RPGMV 1.6.0

破損したプロジェクトを開いてみる

 正しく開ければ無傷で復旧できています。おめでとうございます!

 ですが多くの場合、代わりに以下のようなメッセージが表示されると思います。

Error2

 破損したプロジェクトのdata/Actors.json(メッセージで示されたファイル)を開いてみてください。

  1. 文字化けしている or 真っ白になっている。
  2. ファイル自体が存在しない
  3. dataフォルダ自体が存在しない

1.の場合はおそらく復旧できないので、新規プロジェクトを作ったときに作成されたdata/Actors.jsonで上書きしてください。2.の場合は復旧のしようがないので同様です。3.の場合は単にdataフォルダを名前を変えてしまったか、場所を変えてしまっただけの可能性があります。エクスプローラーの検索機能などを使って別の場所にないか探してみましょう。

Search

プロジェクトが開けるようになるまで指定されたファイルを上書きする

 多くの場合、複数のファイルが破損しているので上記の手順を繰り返す必要があります。ここで上書きしたファイルは当然、新規プロジェクト作成時のものに差し替えられるのでイチから作り直しとなります。

 とはいえ全滅するよりマシなので同じものを再度作り直すことで以前よりも質のいいものができると強く信じて頑張ってください。(わりと本当です)

予防策

 ここまで復旧方法について説明してきましたが、最善なのはプロジェクトのバックアップを日常的に取っておくことです。

DropBox等のオンラインストレージ

 もっとも手軽で効果の高い方法です。複数の端末で開発したいときにも有効です。復旧方法は各種サービスを確認してください。ただし復旧できるファイルに日数制限がある場合があるので注意してください。

 また本件とは無関係ですが、プロジェクトをオンラインストレージに置いているとセーブ時にごくごく稀にエラーが起こる場合があります。セーブ時に一瞬だけ作成・削除されるバックアップファイルをオンラインストレージの監視プロセスが掴んでしまい、削除エラーになることが原因です。テストプレー時以外は起こらないのであまり気にする必要はないですが一応。

ファイルのコピーやバックアップを行うソフトウェア(フリーソフト)

 オンラインストレージが出回る前はこれが主流でした。設定がやや煩雑なことが多いですがネットワークに繋がっていない環境下でもバックアップできます。

 ローカルに保存していた場合、PC自体が死亡するとバックアップも一緒に消えてしまうので、外付けハードディスクやNASを保存先にしましょう。

GitHub

 技術者向けのバージョン管理サービスです。使える人にとっては最良の選択肢ですが、ひとによってはハードルが高いです。

バックアッププラグインを使う

 適用するだけなんの設定もしなくてもdataフォルダおよびGame.rpgprojectのバックアップをしてくれるプラグインを作成しました。例によってMITライセンスでご自由にお使い頂けます。

  • 設定画面

Plugin

  • ダウンロード

https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/BackUpDatabase.js

まとめ

 ツクールMVで制作する以上、本現象は誰にでも起こりうる(私も一度ありました)ので必ず何らかの対策を行いましょう(大事なことなので二度言いました)。

 ここまでお読みくださり、ありがとうございました。

2018年1月1日月曜日

RPGツクールMVのエンジン最新化による具体的なメリット・デメリット

 RPGツクールMV(以下ツクールMV)のゲームはエンジンであるNW.jsを最新バージョンに差し替えることで様々な恩恵を受けることができます。(2018/01/01時点で非公式なので自己責任で行う必要があります) 本稿では、その具体的な恩恵とリスクを簡潔に纏めていこうと思います。

はじめに

最新化とは何か

 ツクールMVのエンジンは前述の通り、NW.jsです。NW.jsはChromiumというオープンソースのウェブブラウザのプロジェクトをもとに作られており、ウェブブラウザのChromeとほぼ同じ動作をします。しかしChromeは定期的に更新されており、パフォーマンス改善やバグ修正が日々、進んでいます。

 つまりNW.jsを最新化するということは、簡単に言うとツクールMV発売以後のChromeの様々な改善を取り込むことなのです。実際にバージョンを比較してみると、ここまで違っています。

  • ツクールMV本体のMW.js(だいたい2015年初頭のもの)
    Chrome/41.0.2272.76

  • 現時点(2018/01/01)での最新版
    Chrome/61.0.3163.100

 注目すべき数字は、メジャーバージョンの41と60という違いです。それが具体的にどのような変更をもたらすのか、見ていきましょう。

最新版への更新の仕方

 とはいえ、変更点を確認する前にNW.jsを最新にする方法について知る必要があります。すでに当ブログで何回か取り上げていますが、それについてはセアロソンク氏の以下のブログが参考になると思います。

最新化したら元に戻せないのか

 そんなことはありません。NW.jsを最新化してもプロジェクト自体には影響を与えないため、エディタ上からテストプレーすればいつでも最新化前の状態で起動できます。完成したゲームをChromeで動かすか、Firefoxで動かすか、従来のNW.jsで動かすか、という選択肢に新たに「最新のNW.jsで動かすか」が加わったようなイメージです。

最新のNW.jsでテストプレーをする方法

 最新のNW.jsでテストプレーをしたい場合、NW.jsを解凍したフォルダ直下にある「package.json」をテキストエディタで開いてmainと書いている行の「index.html」の後に「?test」を追加してください。この状態で「NW.exe」を起動すればテストプレーとして認識されます。(エディタからの起動ではテストプレーにならないのでご注意ください)

  • 変更前

    {
      "name": "",
      "main": "(プロジェクト名)/index.html",
      "js-flags": "--expose-gc",
      "window": {
          "title": "",
          "toolbar": false,
          "width": 816,
          "height": 624,
          "icon": "PluginDevelopment/icon/icon.png"
      }
    }
  • 変更後

    {
      "name": "",
      "main": "(プロジェクト名)/index.html?test",
      "js-flags": "--expose-gc",
      "window": {
          "title": "",
          "toolbar": false,
          "width": 816,
          "height": 624,
          "icon": "PluginDevelopment/icon/icon.png"
      }
    }

NW.jsを最新化すると得られる恩恵

動作が高速化する

 NW.jsを最新化することによる、もっとも分かりやすいメリットは動作の高速化です。

 具体的な計測をするために新旧のNW.jsでゲームを起動→ニューゲーム→メニューを開閉、という操作を繰り返し行い、各々の処理時間を比較してみました。結果を専用に作成した処理時間計測プラグインで時間を比較したのが下の図です。自前のプラグインなので結果の保証はできませんが、全体的に高速化しているのが分かるかと思います。

image1

 特筆すべきは初回のマップ表示です。(一番上の「シーン遷移 to Scene_Map」となっている箇所)タイトル画面からマップ表示する際のパフォーマンスは体感で十分感じるほどに高速化されています。その後の処理も若干の誤差はあるものの全体的にパフォーマンスが改善しているのが分かるかと思います。画像(ウィンドウなど動的に作成されるものも含む)を作成して画面上に表示する際の硬直時間が改善されたためと思われます。

ES2015以降のモダンな記述が使えるようになる(プラグイン開発者向け)

 主にスクリプトやプラグイン制作者向けに、従来ではコンパイルエラーとなっていたES2015の以下の機能が使えるようになっています。もちろん、ローカルで動作したからと言ってWeb版でも動作するとは限らないのでプラグインとして一般公開するのは難しいですが、自分用やローカル環境専用プラグインなど用途を限定すれば活用できます。

  • アロー関数
  • 分割代入
  • デフォルト引数

 例えばアロー関数は、以下のように関数を簡略して記述できる記法です。JavaやC#などのラムダ式に似た記法ですが、もともとJSでは特殊な記述なしでも関数を変数に格納できたので、あくまでも記述の簡略化となります。(あとthisの仕様が少し変わります)

var array = [1, 2, 3];
array.forEach(item => console.log(item));
var array = [1, 2, 3];
array.forEach(function(item) {
    console.log(item);
});

MP3が演奏できる

 ツクールMVにおけるMP3音源の使用については以前にこちらで記事にしています。エディタ上のいくつかの制約がありますが、ローカル実行、Web実行をひとつの音声ファイルで統一できるメリットは大きいと思います。

エラーメッセージが少し分かりやすくなる

 従来のツクールMVでスクリプト実行時などに表示されていたエラーメッセージは正直とても分かりにくいものでした。NW.jsの最新化によってエラーの表示内容が改善されます。具体例を見ていましょう。

従来のエラー発生時の表示内容

old_error

 上記は存在しない関数を呼び出したときのメッセージです。「値 is not a function」の形式で表示されますが、リリース後にプレイヤーからこのエラー報告を頂いても直接の原因がサッパリ分かりません。

最新のエラー表示内容

new_error

 NW.jsを最新化することでエラーメッセージは以下のように変化します。「変数名 is not a function」の形式になるのでどこに問題があるのかが、ある程度予測できるようになります。

 エラー内容によって具体的なメッセージは変化しますが、いずれもより分かりやすく改善されています。

NW.jsを最新化するリスク

 逆にNW.jsを最新化すると発生するリスクやデメリットもあります。最新化したことによって発生した問題は公式にサポートに頼ることはできないので、あらかじめ把握しておくことが望ましいです。

既存プラグインと競合する可能性がある

 この点が一番気になるところだと思います。では具体的にどのようなプラグインが競合するのか、見ていきたいと思います。

 結論から言うと、一部のデバッグ用プラグイン以外は(現在、調査できている時点では)ほぼ正常に動作します。というのも、NW.jsを最新化するとエンジンが現在のChromeに近くなります。よってNW.jsを最新化することは、むしろローカル実行とWeb(Chrome)実行の環境差異を小さくすることになるのです。なので、あまり心配しなくても大丈夫です。

 動かなくなるデバッグ用の関数詳細については以下の通りです。(難しいと感じる方は読み飛ばしてしまってOKです)

メソッド「require('nw.gui').Window.get().isDevToolsOpen();」が消えている

デベロッパツールが開いているかどうかを返す関数「isDevToolsOpen」がなくなっているので、当該関数を呼ぼうとするとエラーになります。リファレンスには確かに記述があるのですが、実際には定義されていないようです。
http://docs.nwjs.io/en/latest/References/Window/#winisdevtoolsopen

require('nw.gui').Window.get().showDevTools();がデベロッパツールオブジェクトを返却しなくなっている。

アップデート前は「showDevTools()」を呼ぶとデベロッパツールオブジェクトを返却していましたが、現在はundefinedが返却されます。NW.jsのリファレンスによると第二引数にコールバック関数を指定することでデベロッパツールオブジェクトが渡される、となっていますが関数は呼ばれるものの、デベロッパツールオブジェクトが引数として渡されません。
http://docs.nwjs.io/en/latest/References/Window/#winshowdevtoolsiframe-callback

フォントサイズが一定以下の場合に表示が崩れる

 プラグインや制御文字等でテキストのフォントサイズを20以下にした場合に表示が崩れる現象が報告されています。

 報告元ではChromeでとなっていますが、NW.jsを現時点(2018/01/01)で最新化した場合も同様の問題が発生しています。

NW.jsを最新化した場合の表示

image3

もともとのツクールMVの表示

image2

 フォントサイズを21以上にすれば解決しますが、ルビなど大きくしづらい場合もあるので厄介な問題です。

まとめ

 NW.js最新化の大きなメリットはローカル実行における描画周りのパフォーマンスが安定することの一点に集約されています。コンティニューからマップをロードするときや、メニュー画面を開くとき。その際のレスポンスが悪いなと思ったらぜひ最新化をお試しください。

 ここまでお読みくださり、ありがとうございました! 本来なら本記事はアドベントカレンダーのひとつとして公開するはずでしたが、年明けまでずれ込んでしましました。それはともかく、2018年も良いお年をお過ごしください。本年もよろしくお願いします。

2017年11月5日日曜日

メニュー内コモンイベントプラグイン

RPGツクールMVで使用可能な自作プラグイン「メニュー内コモンイベントプラグイン」の紹介です。

プラグインの説明

 メニュー画面やプラグインで追加した画面(※1)でコモンイベントを並列実行できます。メッセージやピクチャ、変数の操作などが各イベントコマンド(※2)が実行可能です。コモンイベントは各画面につきひとつ実行できます。

  1. メニュー系の画面であれば利用できます。サウンドテストプラグインや用語辞典プラグインとの連携は確認済みです。
  2. 移動ルートの設定などキャラクターを対象にする一部コマンドは動作しません。また、プラグインによって追加されたスクリプトやコマンドは正しく動作しない可能性があります。

スクリーンショット

  • イベントで指定したメッセージやピクチャが表示できます。 スクリーンショット

詳しい使い方

 通常のイベントコマンドはもちろん、スクリプトによってウィンドウオブジェクトを取得すれば、様々な高度な処理がイベントで実現できます。

プラグインコマンド

ウィンドウ操作禁止      # メニュー画面のウィンドウ操作を禁止します。
DISABLE_WINDOW_CONTROL  # 同上
ウィンドウ操作許可      # 禁止したメニュー画面のウィンドウ操作を許可します。
ENABLE_WINDOW_CONTROL   # 同上

スクリプト

// ウィンドウオブジェクトを取得
this.getSceneWindow(windowName);
指定した名前のウィンドウオブジェクトを返します。
プロパティの取得や設定が可能です。上級者向け機能です。
 
// ウィンドウアクティブ判定
this.isWindowActive(windowName);
指定した名前のウィンドウがアクティブなときにtrueを返します。
 
// ウィンドウインデックス取得
this.getSceneWindowIndex();
現在アクティブなウィンドウのインデックスを取得します。先頭は0です。
 
// 選択中のアクターオブジェクト取得
$gameParty.menuActor();
装備画面やステータス画面で選択中のアクターの情報を取得します。
上級者向けスクリプトです。(※1)
 
// 選択中のアクターID取得
$gameParty.menuActor().actorId();
装備画面やステータス画面で選択中のアクターIDを取得します。
 
※1 既存のコアスクリプトですが、有用に使えるため記載しています。
 
// 用語辞典の表示内容更新
this.refreshGlossary();
用語辞典プラグインにおいて用語の表示内容を最新にします。
同プラグインと連携した場合に使用します。

ウィンドウ名称一覧

・メインメニュー
commandWindow   コマンドウィンドウ
statusWindow    ステータスウィンドウ
goldWindow      お金ウィンドウ
 
・アイテム画面
categoryWindow  アイテムカテゴリウィンドウ
itemWindow      アイテムウィンドウ
actorWindow     アクター選択ウィンドウ
 
・スキル画面
skillTypeWindow スキルタイプウィンドウ
statusWindow    ステータスウィンドウ
itemWindow      スキルウィンドウ
actorWindow     アクター選択ウィンドウ
 
・装備画面
helpWindow      ヘルプウィンドウ
commandWindow   コマンドウィンドウ
slotWindow      スロットウィンドウ
statusWindow    ステータスウィンドウ
itemWindow      装備品ウィンドウ

他プラグインとの連携

  • ピクチャのボタン化プラグイン(PictureCallCommon.js)と併用する場合コマンドは「P_CALL_CE」ではなく「P_CALL_SWITCH」を使ってください。

ダウンロード

以下のURLからダウンロードできます。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/MenuCommonEvent.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。

2017年9月20日水曜日

多層レイヤー一枚絵マッププラグイン

RPGツクールMVで使用可能な自作プラグイン「多層レイヤー一枚絵マッププラグイン」の紹介です。

プラグインの説明

 複数のレイヤーを使った多層一枚絵マップを作成可能にします。イベントでレイヤーを作成するので、レイヤー数は実質無制限です。マップサイズと同じサイズの一枚絵を用意してください。

 イベントを作成してメモ欄を以下の通り記述すると、指定した画像がマップに表示され、かつイベント位置とは無関係に画像の左上がマップの左上に合わせられます。

完成例

  • 通常のパララックスマッピングに対して光や影の表現を重ねることができます。 スクリーンショット

詳しい使い方

メモ欄の記述

<PLM:file>        # 「img/parallaxes/file」を一枚絵として表示します。
<PLM_Blend:1>     # 合成方法の初期値を「加算」にします。
<PLM合成:1>       # 同上
<PLM_Opacity:128> # 不透明度の初期値を「128」にします。
<PLM不透明度:128> # 同上

スクリプト

this.shiftPosition(10, 20); # 表示位置をX[10] Y[20]ずらします。

 イベント内の「画像」「オプション」項目は無視されますが、その他の項目は通常のイベントと同じように機能します。

キャラクターグラフィック表示拡張プラグインとの組み合わせ

 合成方法や不透明度などを後から変更したい場合は、自律移動で指定するか「キャラクターグラフィック表示拡張プラグイン」と併用してください。

制約事項

 当プラグインはマップのループには対応していません。

サンプル素材

 当プラグインで使用できるサンプルマップをどらぴか(@dorapikanisan)様よりご提供いただきました。この場を借りて御礼申し上げます。上の「完成例」のマップを作成することができます。

 専用のダウンロードページから「Download」ボタンでダウンロードできます。 クレジット表記なしでご自由にお使い頂けるご許可を頂いています。

サンプル素材の使い方

  • サンプル素材には通行可否設定を簡単に行える専用タイルも付属しています。
    使い方1

  • 専用タイルの使用例です。
    使い方2

ダウンロード

以下のURLからダウンロードできます。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/ParallaxLayerMap.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。

2017年8月20日日曜日

MP3を使ったゲームをRPGアツマールに投稿してみました

数ヶ月前、以下のような記事が目に留まりました。

 mp3(MP3コーデック)の特許が切れたという話です。これによりアプリやゲーム開発者はライセンスの問題を気にすることなくmp3を使うことができるようになります。

 というわけで早速、検証も兼ねてmp3を音声素材として使ったゲームをひとつ作成してRPGアツマールに投稿してみることにしました! ちなみにmp3を再生すること自体が可能かどうかという点については、プラグインが必須ですが可能です。プラグインについてはブログの最後で説明します。

投稿した作品の紹介

 先日RPGアツマールに公開したツクールMV製の掌編アドベンチャー「その名は深く青ざめて」です。プレー時間2分ほどの気軽にプレーできるゲームとなります。

「その名は深く青ざめて」(音が出ます)

https://game.nicovideo.jp/atsumaru/games/gm4093

タイトル画面

スクリーンショット

ゲーム画面

スクリーンショット

 なお、本作はやれやれ氏主催の「2分ゲーコンテスト」に参加しています。

mp3を使用するメリット

ほぼ全ての環境で再生できる

 現在、ツクールMVでゲームを作ってWeb(RPGアツマール等)にアップロードする場合、ogg(主にVorbisコーデック)とm4a(AACコーデック)の二つを用意することになっています。PCブラウザやモバイルブラウザ等、様々な動作環境に対応するためですが、変換やループタグの設定、確認が面倒だったり、何より容量を圧迫するという問題があります。

 これをmp3に切り替えることで一本化できる可能性があります。

 mp3は普及率が高く、ゆえに様々な環境でも安定して再生可能です。下記に対応状況が記載されています。

 上の一覧表だと一部「?」がありますが、「その名は深く青ざめて」については、公開後に運営さまから頂いた動作確認結果でも問題はなく、プレイヤーからも今のところ「再生できない」という声は聞いていません。(もしうまく再生できなければご一報ください)

 mp3はoggやm4aと比べて圧縮効率が悪く、単体ではむしろ容量が大きくなってしまう傾向がありますが、それでも二つ用意するよりは(同一ビットレートであれば)マシだと思います。

デスクトップ実行(Game.exe)でどうするか

 ツクールのGame.exe(NW.js)では、ライセンスの問題がありもともとmp3は再生できませんでした。ですがNW.jsは2017/05/03のリリースでmp3のデコーダをffmpeg.dllに含めるようになりました。もちろん特許の問題が解決されたためですが、なかなか迅速な対応だと思います。当然ですがm4aは依然として再生できません。

 つまり、NW.jsを最新にすればデスクトップアプリとして実行したときもmp3を演奏させることができます。NW.jsを最新に差し替える方法についてはセアロソンク氏の以下のブログが参考になると思います。

 本件とは関係なく、NW.jsを最新にすることでパフォーマンスの大きな改善が見込めるので、ぜひ一度お試しください。もちろんデプロイ後だけでなく制作中のプロジェクトにも適用できます。

対応素材が多い

 mp3は普及率が高いだけあって、フリー素材も同形式で配布されているというケースが多いです。変換ツールを使えばもちろん変換できますが、ダウンロードした素材がそのまま使用できるのは嬉しいです。

mp3を使用するデメリット

音質が悪い

 古いフォーマットなので、oggなどの後発のそれと比べて音質が若干劣る(と言われています)。さすがにもともとogg等で配布されているものをmp3に変換するのは少し抵抗がありますね。

ツクールMVのエディタで選択できない

 これがかなり致命的でした。ツクールMVでBGMやBGSを選択するときは、oggファイルしか選択対象に表示されません。拡張子のみoggに変えると選択対象に表示されますが、今度はRPGアツマールにアップロードするときに不正なファイルとして弾かれてしまいます。

 よって現状ではファイルとして選択するときだけoggファイルを(中身はなんでもいいので)作成して、エディタ上で選択後、当該ファイルを削除するというなんともバカバカしい手順を踏む必要がありました。

結論

 ツクールMVの音声ファイルにmp3を使用することはわりと面倒ではありますが、特に容量的な意味で一定の効果が見込めました。そこで一部の素材(例えば素材サイトでmp3形式で配信されている素材)のみmp3を使用し、基本はogg/m4aを使うのがいいのかな、と考えプラグインを作成しました。よろしければお試しください。

 RPGツクールMVで使用可能な自作プラグイン「MP3オーディオ管理プラグイン」の紹介です。

プラグインの説明

 ツクールMVでmp3ファイルを使用可能にします。特定のファイル(末尾にmp3と付いたファイル)のみmp3で再生することも可能です。デスクトップ環境(Game.exe)でmp3ファイルを再生させるにはNW.jsを最新にする 必要があります。

 さらに、プラグイン側で独自にループタグを設定することが可能です。ループタグは曲ごとに設定できます。この設定はファイルにあらかじめ設定されていたループタグより優先されます。

スクリーンショット

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/Mp3AudioManager.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。
http://opensource.org/licenses/mit-license.php

2017年8月6日日曜日

動画のピクチャ表示プラグイン

RPGツクールMVで使用可能な自作プラグイン「動画のピクチャ表示プラグイン」の紹介です。

プラグインの説明

 ピクチャの表示枠を使って動画を再生します。ピクチャの移動や回転による処理の対象になるほか、複数の動画の並行再生が 可能になります。また、動画がウィンドウの下に表示されるようになります。ただし「ピクチャの色調変更」には対応していません。

プラグインコマンド「MP_SET_MOVIE」で動画ファイルを準備してからイベントコマンド「ピクチャの表示」をファイル指定を空で実行してください。

スクリーンショット1

ピクチャを扱うのと同じ感覚で動画をゲーム中に表示できます。 スクリーンショット

スクリーンショット2

回転や合成方法の変更も可能です。また、動画がメッセージなどのウィンドウの下に表示されます。 スクリーンショット

プラグインコマンド

MP_SET_MOVIE file  # 動画ファイル[file]を準備します。
MP_動画設定 file   # 同上
MP_SET_LOOP 1 on   # ピクチャ番号[1]の動画がループ再生されます。
MP_ループ設定 1 on # 同上(offでループ再生を解除します)
MP_SET_PAUSE 1 on  # ピクチャ番号[1]の動画が一時停止します。
MP_ポーズ設定 1 on # 同上(offで再生を再開します)
MP_SET_WAIT 1      # ピクチャ番号[1]の動画が再生するまでイベントを待機します。
MP_ウェイト設定 1  # 同上
MP_SET_VOLUME 1 50 # ピクチャ番号[1]の動画の音量を50%に設定します。
MP_音量設定 1 50   # 同上

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/MoviePicture.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。
http://opensource.org/licenses/mit-license.php

2017年5月21日日曜日

連携攻撃プラグイン

RPGツクールMVで使用可能な自作プラグイン「連携攻撃プラグイン」の紹介です。

プラグインの説明

 戦闘中、味方の攻撃が連続したときにダメージ倍率が上昇します。チェインの継続中に相手側のチェインがスタートしたら解除されます。さらにパラメータで以下の追加の解除条件を指定できます。

  1. 他のターゲットに攻撃
  2. 攻撃をミス
  3. 攻撃以外の行動(回復など)
  4. 相手側の何らかの行動

スクリーンショット

 戦闘中、現在の連携数が表示されます。表示位置や表示方法、サイズはカスタマイズ可能です。 スクリーンショット

スキルに指定可能なメモ欄

 スキルのメモ欄で以下の機能を追加できます。数値には制御文字\v[n]が使用できます。

<AC_倍率:200> # チェインダメージ倍率をさらに200%にします。
<AC_Rate:200> # 同上
<AC_終了>     # そのスキルで連携を強制終了します。
<AC_End>      # 同上
<AC_条件:5>   # 5連携に満たない状態で使用すると必ず失敗します。
<AC_Cond:5>   # 同上

実行可能なスクリプト

 イベントコマンド「スクリプト」から以下が実行可能です。

$gameParty.getChainCount();    # 現在のパーティ連携数取得
$gameParty.getMaxChainCount(); # パーティの最大連携数を取得

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/AttackChain.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。
http://opensource.org/licenses/mit-license.php

2017年5月1日月曜日

サポート先移行のお知らせ

 平素よりプラグインのご利用ありがとうございます! この度、当ブログのコメント欄を閉鎖し、サポートをツクール公式フォーラムおよび、ユーザフォーラムのツクマテに移行することにしました。理由は以下の通りです。

  • コメント欄が小さい
  • メモ欄のタグを入力できない
  • 画像やキャプチャをアップロード出来ない
  • サポートの窓口が多すぎて混乱する
  • フォーラムの記事にした方が後々、資産として活用しやすい

 なお、今までに投稿して頂いたコメントに問題やトラブルがあったとか、そういうことは一切ありません。利用者様には十分に配慮していただき感謝しています。

 利用者様には上記いずれかのフォーラムにユーザ登録をお願いすることになりますが、よろしくお願いします。上記フォーラムは定期的に巡回しているので、プラグインのQ&A等のトピックにスレッドを立ててください。

2017年4月9日日曜日

メニュー画面のサブコマンドプラグイン

RPGツクールMVで使用可能な自作プラグイン「メニュー画面のサブコマンドプラグイン」の紹介です。

プラグインの説明

 メインメニュー画面に任意の名前のコマンドおよびツリー表示されるサブコマンドを追加できます。サブコマンドを実行(決定)すると、任意のスクリプトが実行されるか、もしくは指定したマップに移動します。(両方も可能)

 指定したマップへの移動は主にイベントによる自作メニューを組み込むために使用します。通常メニューから専用マップに移動するとイベントやフォロワーの位置やマップ名表示、BGM再生やメインメニューコマンドの選択位置など考慮すべき点が多いのですが、当プラグインを使えば全てプラグイン側でカバーしてくれます。

 また、通常の縦レイアウトとメニュー画面はもちろん、プラグインによる横レイアウトのメニュー画面にも対応しています。

スクリーンショット1

縦画面(通常)用のレイアウトです。 スクリーンショット

スクリーンショット2

横画面(AltMenuScreen.js等)用のレイアウトです。 スクリーンショット

パラメータ指定方法

プラグインパラメータを以下の通りカンマ区切りで指定してください。

指定例

アイテム,親コマンド1,100,200,this.commandItem(),0,OFF

  1. 名称      :サブコマンドに表示される任意のコマンド名称
  2. 親名称     :メインコマンドに表示される親となる任意のコマンド名称
  3. 非表示スイッチID:ONのときコマンドが非表示になるスイッチID
  4. 禁止スイッチID :ONのときコマンドが使用禁止になるスイッチID
  5. 実行スクリプト :コマンドを決定したときに実行されるスクリプト
  6. 移動先マップID :コマンドを決定したときに移動するマップID
  7. メンバー選択有無:コマンド実行前に対象メンバーを選択します(ON/OFF)

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/MenuSubCommand.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。
http://opensource.org/licenses/mit-license.php

2017年3月5日日曜日

戦闘中フキダシ表示プラグイン

RPGツクールMVで使用可能な自作プラグイン「戦闘中フキダシ表示プラグイン」の紹介です。

プラグインの説明

 戦闘中に様々なタイミングでフキダシ(バルーン)を表示できます。さらにフキダシの速度や待機時間を調整できます。表示対象はアクターおよび敵キャラです。主に以下のタイミングで表示できます。

バトルイベント中にプラグインコマンドを実行

 アクター、敵キャラ、スキル使用者を対象にできます。スキル使用者を対象にする場合は、スキル実行後のコモンイベント等で表示させてください。フキダシ表示が完了するまでウェイトすることもできます。

反撃や回避を行った際に自動発動

 パラメータで指定しておけば反撃、回避、魔法反射、身代わりの瞬間に指定したIDのバルーンを自動表示します。

スキル実行時に自動発動

 スキルもしくはアイテム使用時に自動発動します。メモ欄に以下の通り記述してください。

<BB_決定時フキダシ:5> # スキル決定時にフキダシ[5]を表示(敵キャラのみ)(※1)
<BB_BalloonInput:5>   # 同上
<BB_使用時フキダシ:6> # スキル使用時にフキダシ[6]を表示
<BB_BalloonUsing:6>   # 同上

※1 正確には敵キャラAIがスキルを決定したタイミングになります。

スクリーンショット

スクリーンショット

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/BattleBalloon.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。
http://opensource.org/licenses/mit-license.php

2017年2月9日木曜日

戦闘システム拡張系のプラグインを5種類一挙紹介

 RPGツクールMVで使用可能な自作プラグインのうち、戦闘システム拡張系のプラグインを5種類一気に紹介します。
それぞれ目的別に特化しているので、必要と思ったものだけを導入することが可能です。

  1. 反撃拡張プラグイン
  2. 混乱拡張プラグイン
  3. 吸収拡張プラグイン
  4. 身代わり拡張プラグイン
  5. 効果範囲拡張プラグイン

特徴を有するデータベースのメモ欄について

 いくつかのプラグインでは「特徴を有するデータベースのメモ欄」に記述できるので、より自由度の高い格調が可能です。 なお「特徴を有するデータベースのメモ欄」とは以下のことです。

  • アクター
  • 敵キャラ
  • 職業
  • 武器
  • 防具
  • ステート

 よって特定の味方や敵に対してのみ拡張したり、特定の武器や防具を装備しているとき、あるいは特定のステートが有効なときのみ拡張を適用することが可能です。

反撃拡張プラグイン

 反撃の仕様を拡張します。魔法に対する反撃や、特定のスキルを使った反撃、特定の条件下でのみ発動する反撃などが作成できます。 拡張機能は以下の通りです。

機能リスト

  1. 魔法攻撃を受けた場合もカウンターが発動するようになります。
  2. 反撃時のスキルを個別に設定することができます。
  3. 反撃条件にJavaScript計算式の評価結果を利用できます。
  4. 複数の反撃スキルおよび反撃条件を設定できます
  5. 反撃実行時に専用のアニメーションを再生します。

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/CounterExtend.js

混乱拡張プラグイン

 混乱系(行動制約のプルダウンの選択値が「1」~「3」)ステートの指定内容を拡張し、通常攻撃ではなく特定のスキルを強制使用させることができます。

機能リスト

  1. 混乱時に使用するスキルIDを指定できます。複数指定可能で、複数の場合はランダムでどれかを使用します。
  2. コストが足りない等の理由でスキルを使用できない場合に使用する専用スキルを別途指定できます。
  3. スキルのターゲットを強制的に指定することができます。
  4. 混乱の上位概念として「裏切り」状態を提供します。全体攻撃の対象範囲が逆になるほか、全滅条件にも関わらなくなります。

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/ConfusionExtend.js

吸収拡張プラグイン

 ダメージタイプの「HP吸収」および「MP吸収」の仕様を拡張します。

機能リスト

  1. 吸収率を指定して、回復量を与えたダメージの割合で指定可能
  2. HPダメージに対してMPやTPを追加で回復することが可能
  3. MPダメージに対してHPやTPを追加で回復することが可能
  4. 通常ダメージ時のメッセージと効果音に変更可能
  5. HP吸収の上限が相手の残HPになる吸収の仕様を撤廃可能

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/DrainExtend.js

身代わり拡張プラグイン

 身代わりの仕様を拡張します。

機能リスト

  1. デフォルトの身代わり条件(瀕死かつ必中以外)を無効化できます。
  2. 身代わりの詳細な発動条件をHPやJS計算式等で細かく指定できます。
  3. 身代わりの対象者を限定できます。
  4. 身代わり発動時に、指定したIDのスキル効果を身代わり実行者に適用できます。

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/SubstituteExtend.js

効果範囲拡張プラグイン

 スキルの効果範囲を拡張できます。

機能リスト

  1. 効果範囲が敵味方に指定できます。
  2. 元々の選択範囲に対して(敵味方かかわらず)使用者を追加 or 除外できます。
  3. 指定した敵単体と同じIDの敵キャラ(DQでいう敵グループの概念)を指定できます。
  4. 元々の選択範囲に対してランダムで一人のみを指定できます。
  5. 敵N体ランダムの範囲に対して、もともとの設定上限(4回)を超える回数を指定できます。

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/ScopeExtend.js

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。
http://opensource.org/licenses/mit-license.php

2017年1月22日日曜日

イベントデバッグプラグイン

 RPGツクールMVで使用可能な自作プラグイン「イベントデバッグプラグイン」の紹介です。

プラグインの説明

 任意の箇所でイベントの実行を一時停止して、1行ずつ実行(ステップ実行)ができるようになります。開始方法は以下の3通りです。マップ画面、戦闘画面のどちらでも利用可能です。

  1. 指定されたキー(デフォルトF7)を押下する。(※1)
  2. プラグインコマンド[BREAK_POINT]を実行する。(条件が指定可能です)
  3. イベントテストを実行する。

※1 並列イベントが複数実行されている場合、どこで止まるかは不確定です。

 止めている間は以下の操作が可能です。

  1. ステップ実行(イベントを1コマンドずつ実行)
  2. 実行中のイベントリスト確認
  3. 実行したイベントのパラメータ確認
  4. デバッグ画面(F9)を開いてスイッチや変数の操作(※2)
  5. デベロッパツールから任意のJavaScriptを実行

※2 マップ画面でのみ有効です。

ステップ実行中の画面

 ステップ実行中は、画面左上にイベント情報が出力されます。変数やスクリプトの評価結果を監視することもできます。(後述) スクリーンショット

 ステップ実行には以下の種類があり、対応するファンクションキーを指定できます。

  • ステップイン:1行実行する。コモンイベントの呼び出し先もステップ実行する。
  • ステップオーバー:1行実行する。コモンイベントの呼び出しは一括実行する。
  • 再開:ステップ実行を終了し、通常のイベント実行に戻る。

デベロッパツールの画面

 ステップ実行が開始されると、操作方法および実行したイベントの履歴がパラメータつきで出力されます。 スクリーンショット

 各イベントコマンドの実行にどのくらい時間が掛かったかも出力します。

デバッグ画面

 ステップ実行中にF9キーを押下すると、デフォルトのデバッグ画面が表示され変数の値を編集できます。(マップ画面のみ) スクリーンショット

変数監視機能

 さらに、変数やスクリプトの評価結果を常時監視することができます。この機能はステップ実行中以外でも常に有効です。監視対象が登録されている場合、右上にウィンドウが表示されます。数値を指定した場合は変数値が、文字列を指定した場合はスクリプトの評価結果が表示されます。

 所定のファンクションキーを押下するか、以下のスクリプトをデベロッパツールから実行すると監視対象を登録できます。

DebugManager.watchVariable(5); # 変数[5]の値を常に監視します。

 このプラグインはテストモードでのみ動作し製品版にはなんら影響を与えません。

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/EventDebugger.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。
http://opensource.org/licenses/mit-license.php

2016年11月20日日曜日

反撃拡張プラグイン

RPGツクールMVで使用可能な自作プラグイン「反撃拡張プラグイン」の紹介です。

プラグインの説明

反撃の仕様を拡張します。
魔法に対する反撃や、特定のスキルを使った反撃、特定の条件下でのみ発動する反撃などが作成できます。

特定のアイテムを装備時のみ特殊な反撃技を指定したり、特定の攻撃に対してボスが強力な反撃を繰り出したりする設定が可能です。

具体的な機能詳細は以下の通りです。

機能詳細

  1. 魔法攻撃を受けた場合もカウンターが発動するようになります。
    専用の発動率を指定可能で、指定しない場合は、物理攻撃と同様の反撃率が適用されます。

  2. 反撃時のスキルを個別に設定することができます。
    MPなどのコストが不足している場合の挙動はカスタマイズできます。

  3. 反撃条件をJavaScript計算式の評価結果を使って詳細指定できます。反撃条件を満たさない場合は反撃は実行されません。
    特定のスキルや属性に対してのみ反撃したり、特定の条件下でのみ反撃したりできます。
    ヘルプにいくつかのサンプルが用意されています。

  4. 反撃実行時に専用のアニメーションIDを再生できます。

スクリーンショット

スクリーンショット

メモ欄指定方法

特徴を有するデータベースのスキルのメモ欄に以下の通り指定してください。

<CE_魔法反撃:50>      # 魔法攻撃を受けた場合に50%の確率で反撃します。
<CE_MagicCounter:50>  # 同上
<CE_魔法反撃>     # 魔法攻撃を受けた場合にもともとの反撃率で反撃します。
<CE_MagicCounter> # 同上
<CE_反撃スキルID:\v[1]>    # 反撃時に変数[1]のIDのスキルを使用します。
<CE_CounterSkillId:\v[1]>  # 同上
<CE_魔法反撃スキルID:3>    # 魔法反撃時にID[3]のスキルを使用します。
<CE_MagicCounterSkillId:3> # 同上
<CE_反撃条件:v(1) &lt; 100>    # 変数[1]が100より小さければ反撃します。
<CE_CounterCond:v(1) &lt; 100> # 同上(※2)
<CE_魔法反撃条件:s(1)>         # スイッチ[1]がONなら魔法反撃します。
<CE_MagicCounterCond:s(1)>     # 同上
<CE_反撃条件:skill.id === 10>              # スキルIDが[10]なら反撃します。
<CE_反撃条件:skill.damage.elementId === 3> # スキル属性が[3]なら反撃します。
<CE_反撃条件:this.hpRate() &lt; 0.5> # 自分のHPが50%を下回ると反撃します。
<CE_反撃アニメID:20>       # 反撃実行前にアニメーション[20]を再生します。
<CE_CounterAnimationId:20> # 同上
 
※ 文章、スクリプト中で不等号を使いたい場合、以下のように記述してください。
< → &lt;
> → &gt;

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/CounterExtend.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。
http://opensource.org/licenses/mit-license.php

2016年11月15日火曜日

BGS並行演奏プラグイン

RPGツクールMVで使用可能な自作プラグイン「BGS並行演奏プラグイン」の紹介です。

プラグインの説明

複数のBGSを並行して演奏できます。プラグインコマンドからBGSの演奏ラインを変更すると元のBGSを演奏したまま、新しくBGSを演奏することができます。
並行演奏しているBGSはそれぞれ個別に、音量やピッチ、左右バランスを調節できます。
演奏ラインのデフォルトは[1]です。

追加機能

追加機能として、BGS演奏中にSEを演奏すると自動でBGSを一時フェードアウトするプラグインコマンドを提供します。SEがより明瞭に聴き取れるようになります。
フェードアウト時間やSEの演奏タイミングを設定することもできます。

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/ParallelBgs.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。
http://opensource.org/licenses/mit-license.php

2016年11月7日月曜日

「第三回自作ゲームフェス勉強会」に参加してきました!

 家に帰ってブログを書くまでが勉強会、ということで「第三回自作ゲームフェス勉強会」に参加してきました!

 自作ゲームフェスMVについてはこちらをご参照ください。

バナー

 結論から言うと、同人ゲーム作者としても、プラグイン作者としても、またラノベ作家志望者としても、非常に得るものの多い濃い勉強会でした。今回、貴重な機会を作ってくださった主催者様に改めてお礼を申し上げます。

なんで参加したの?

 もともと私は、自作ゲームフェスMVの企画のひとつとして「ノベルゲーム総合プラグイン」の作成や「ツクールMVでプラグインを作るための現実と作法」の記事執筆などでフェスと関わらせて頂いた関係上、興味はありましたが一方で、現在はゲームそのものは作っておらず、参加するかどうか迷っていました。
 しかし、市販の有名ホラーゲーム『零』シリーズを手掛けた柴田誠氏が講師として招かれるということで、参加する決意を固めた次第です。ホラーというジャンルは、ラノベ業界では滅多に見られない異端である一方、フリーゲーム業界では(実況という前提もありますが)一大勢力を築いているのでその勢いをなんとかラノベに応用できないかと常々考えていたのです。(この話は長くなるので適当に切り上げます)

柴田誠氏の講演を聴いた感想

 あくまでも私の解釈なので氏の実際の発言意図とは異なる可能性があります。

ホラーゲームの難しさ

 まず『零』シリーズのコンセプトと企画書が紹介されました。端的に言えば「カメラ」を使って霊から身を守りつつ進めていくゲームです。私はホラーゲームについてはあまり明るくなく当該シリーズも未プレイなのですが、やはり小説に限らずゲームでもホラーならではの「難しさ」というのが感じられました。
 ホラーというジャンルは基本的に矛盾を孕んでいます。人が忌避するモノをあえて見せていく。見たくないのに見たい。怖いのに遊びたい。他のジャンルであれば、そのジャンルの特性を突き詰めることがそのまま面白いゲーム作りに直結するところですが、ホラーは必ずしもそれが正解とは限らない。その点については、プロである柴田氏すらも悩まれて試行錯誤されたようです。私は、その相反する感情を抱かずにいられないことこそが(媒体を問わず)ホラーの何よりの魅力だと思います。

媒体による恐怖演出の違い

 個人的に興味があり、事前に「小説や映画とは違ったゲーム独自の怖さ」というテーマで質問させて頂きました。そこで挙げていただいた内容として「主人公になりきって恐怖を直に体験できる没入感」「主人公の行動に応じて最適なタイミングで恐怖演出を見せられるインタラクティブ性」というものでした。とても腑に落ちる内容でしたが、一方でこれは欠点にもなるようで、一度対処法を確立してしまえば、あとは流れ作業となってしまい恐怖感が長続きしない側面もあるそうです。
 そういう意味で『零』シリーズでは、対抗手段が一般的な武器ではなく「カメラ」というなんとも心許ない道具が使われているのだと思います。カメラ自体が武器でないのはもちろん、構えている間は無防備で、かつ視界が遮られつつも、対象を凝視しなければならないというリスクを背負うことになりますから……(想像で言っています)

3Dと2Dによる演出の違い

 また、興味深かったのが、同じゲームというジャンル内でも3Dと2Dとでは演出手法はもちろん、最適なストーリーすら異なるのだそうです。たしかに音響を使った演出や、恐怖の対象が迫ってくる感覚というのは、3Dだからこそ十分に表現できるものですよね。そういう意味ではフリーのホラーゲームの盛況と市販のホラーゲームとではアプローチの仕方からして異なり、2Dは小説に近い部分もあるのかもしれません。

その他

 懇親会の際に柴田氏に個人的に伺ったのですが、サイコホラー(主に人間そのものの怖さを炙り出していくホラー)はやはりゲームにはあまり向かないのだそうです。当然と言えば当然かもしれませんが……
 なので私がホラーゲームを作る際は、そこから考え直さないといけないかもしれません。

自作ゲームプレー企画

 自作ゲームを互いにプレーする企画でした。今回はただ遊ぶのではなくて、作者からは一切説明を受けずゲームの意図を付箋に書き出すという面白い試みが行われていました。
 「作者視点で」他人の作品に触れるというのは、映画でも小説でも意識的なインプットをする際にとても重要な考え方だと思います。ただ受け身で遊ばせてもらうのではなく、ゲームを面白くするための作者の意図を理解しながらプレーすることではじめて自分の中で経験値として蓄積される……ということですね。

グループワーク

 「新しいゲームをデザインする参加型のコーナーです。グループをくんでゲームを完成させます」という説明を事前に拝見したときは、正直行くの止めようかと思いました(笑)。グループ活動にはそれなりのトラウマがあって、他のメンバーが黙々と作業をするかたわら、自分は何をやっていいのか分からなくてオロオロしてしまうのです。(思い当たるフシがある方が一人でもいることを祈ります……)
 しかし、実際に参加してみるとそういった心配は無用でした。ゲームデザインのアプローチについて用意された仮説に従ってグループで議論を重ねて、限られた材料の中からアナログゲームを作っていくという内容で、特に役割分担して作業するような内容ではなかったです。

カメラの設定がおかしくて周囲が黒いですが気にしないでください

スクリーンショット

ゲームの要素を3つに分割する

 仮説ではまずゲームの構成要素を3つに分割して説明していました。以下の3つです。

  • ゴール(ゲームの最終目的)
  • 障害(最終目的であるゴールを阻む要素)
  • 行動(障害を乗り越えてゴールに辿り着くために、プレイヤーの行うこと)

 例えば「スーパーマリオブラザーズ」だと以下のようになります。

  • ゴール:一番右に辿り着くこと
  • 障害:敵と穴
  • 行動:ジャンプ 

作業手順

 ここで重要なのは「行動」で、多くのゲームでは「行動」が必然的に反復されるのでここが面白くなければゲームとして成り立ちません。
 そこでまずは「行動」から決めていきます。チームごとに固有のアイテムが割り当てられ、私の所属したチームでは「おはじき」でした。そして議論を重ねた結果、「行動」は「はじく」となり、他の要素は以下の通りになりました。

  • ゴール:フィールド内の敵を殲滅する
  • 障害:敵のHP(おはじき)
  • 行動:はじく

 簡単に説明すると、プレイヤーのおはじきを「はじく」ことで敵おはじきを外に押し出すアクションゲームです。大きなおはじき(主人公)をはじいて、色つきのおはじきを対応する陣地から追い出します。こうしてあえて説明しなくても三要素から推測できるあたり、なかなかよく考えられていますね。

ゲームの外観

スクリーンショット

反省と総括

 RPGというジャンルは上記三要素がすでにおおよそ確立されていることもあり、今までゲームデザインを理屈として意識することは正直なかったのでとても勉強になりました。上記三要素については、ストーリーを作る上でも流用できる考え方だと思っています。(その場合は行動よりも障害の方が重要になるかもしれません)
 また、ゴールがひとつでなくても、複数の小ゴールと最終的な大ゴールみたいな入れ子構造があってもいいかもしれません。(あまり複雑になり過ぎるのも考えものですが……)

勉強会を終えて

 人それぞれ得意分野は違っても、モノを創るというのはとてつもなく面白い、ということを再認識できた勉強会だったと思います。ある程度成熟した社会では、すべての人が何らかの創作をする……くらいでちょうどいいのではないでしょうか。
 そういう意味で、技術や才能にとらわれず個人ゲーム制作の間口を広げてくれるツクールというソフトやそれを取り巻くコミュニティが私は好きですし、発表の場を設けてくださる自作ゲームフェスには深く感謝しています。
 最後に、「ノベルゲーム総合プラグイン」ぜひ使ってくださいね。

 以上です。お付き合いくださりありがとうございました。

2016年11月1日火曜日

動的変数プラグイン

RPGツクールMVで使用可能な自作プラグイン「動的変数プラグイン」の紹介です。

プラグインの説明

指定範囲内の変数、スイッチを参照しようとした際に、「変数名称」及び「スイッチ名称」をJavaScriptとして実行した結果を返すよう変更します。

プラグインの使い道

イベントページの出現条件に設定

イベントエディタにおける「出現条件」に対象変数もしくはスイッチを指定することで、イベントページにより複雑な条件を設定することができます。
下記の例では、スイッチ欄が「変数[1]が[0]より大きい、またはスイッチ[1]がON」という条件になります。

スクリーンショット

戦闘行動に設定

条件にスイッチを指定することで敵キャラの行動をより奥深く管理できます。
スクリーンショット

定数値として使用

スイッチに「true」、変数に「'AAA'」などと記述すると常に同一の値を返す定数値として使用できます。
スクリーンショット

その他の変数・スイッチを参照する例

  1. 条件分岐
  2. イベントコマンドの各種オペランド
  3. 文章の表示の制御文字
  4. スキルやアイテムの計算式(ただしv[1]で参照した場合は除く)
  5. その他プラグインによる参照

スイッチ、変数名称の設定方法

JavaScriptを利用して記述するため難しいイメージがありますが、スキルやアイテムの計算式と同様の感覚で設定すればOKです。また、式の簡略化のために以下のローカル変数が利用できます。

v(n)      # [n]番の変数の値
s(n)      # [n]番のスイッチの値
max       # Math.maxに変換されます。(例 : max(1, 2) -> 2)
min       # Math.minに変換されます。(例 : min(1, 2) -> 1)
gPlayer   # $gamePlayerに変換されます。(例 : gPlayer.x -> プレイヤーX座標)
dSystem   # $dataSystemsに変換されます。(例:dSystem.startX -> 開始位置X座標)

Math.max以外にも一般的なMathモジュールのメソッドが使用可能です。また、他のゲームオブジェクト、データオブジェクトも同じ記法で参照できます。
いずれも利用には、多少のJavaScriptの知識が必要になります。

また、スクリプト中でさらに動的変数およびスイッチを参照することもできますが 同じ番号の変数 or スイッチを参照しようとすると循環参照となりエラーが発生します。

  • 設定例1 イベントページの「スイッチ」に「名称」が以下のものを設定する。

    v(1) > 0 || s(1) # 変数[1]が[0]より大きい、もしくはスイッチ[1]がON

    以上の条件を満たした場合に対象ページが表示される。

  • 設定例2 イベントページの「スイッチ」に「名称」が以下のものを設定する。

    v(1) < v(2) && !s(2) # 変数[1]が変数[2]より小さい、かつスイッチ[2]がOFF

    以上の条件を満たした場合に対象ページが表示される。

  • 設定例3 イベントページの「スイッチ」に「名称」が以下のものを設定する。

    gPlayer.x % 2 === 0 # プレイヤーのX座標が偶数

    以上の条件を満たした場合に対象ページが表示される。

使用上の注意

通常、イベントのページを決定する処理は、いずれかのスイッチもしくは変数が変更されたときにのみ実行されます。本プラグインでは、パフォーマンス上の理由からその仕様を維持します。もし、指定している条件がスイッチおよび変数と完全に無関係な場合(設定例3のケース等)イベントのメモ欄に以下の通り入力すると、そのイベントのみ常にページの条件チェックを行うように変更できます。

ダウンロード

プラグインファイルはGithubで公開しています。
https://raw.githubusercontent.com/triacontane/RPGMakerMV/master/DynamicVariables.js

ダウンロード方法(Windowsの場合)

  1. リンク先に飛ぶ
  2. 右クリック
  3. 名前を付けて保存
  4. ファイル名を変えずに、プロジェクトの「js/plugins」配下に配置

利用規約

当プラグインはMITライセンスのもとで公開されています。作者に無断で改変、再配布が可能で、利用形態(商用、18禁利用等)についても制限はありません。このプラグインはもうあなたのものです。
http://opensource.org/licenses/mit-license.php