プラグイン「文章/単語/スクリプトを外部CSVファイルで記述する」(2023/03/28)【MV/MZ対応】

バイザン

ユーザー
ExternMessage.js

top.png
イベントエディター中の文章に「\M[メッセージID]」のように記述しておくことで、
テキストエディタ等で編集可能な外部CSVファイル中の文章に置き換えてくれます。

さらにスクリプトも直接記述できるようになりました。(2021/04/07 1.3.0~)

ただの文章置き換えではなく、4行を超えたら自動で次のページにしたり、名前(※1)や顔グラの設定、イベント呼び出しなどある程度のスクリプト記述が可能です。
この置き換え機能は事前に変換して焼き込むような方法ではなく、実行時に直接CSVファイルを読み取るのでCSVを編集/保存したら再起動するだけでテキストが反映されます。

なお条件分岐などはできないので条件分岐が必要な場合はイベントエディターで設定し、条件の前後の文章をCSVファイルで管理することになります。

このプラグインはRPGツクールMV / MZどちらでもご使用いただけます。(2020/08/22 1.0.4~)

※1:ツクールMVの場合、名前セット機能は以下のプラグインと連携することを前提としています(ツクールMZでは不要です)
YEP_MessageCore


【こういう人にオススメ】
 ・台詞をいっぱい書きたいけどイベントエディターで毎回文章ノードを追加するのが面倒な人
 ・台詞を別ファイルで管理して見渡せるようにしたい人
 ・特殊な単語を気軽にデータベース化したい人
 ・多言語対応したい人(文章が別ファイルなので翻訳が簡単なはず)
 ・多言語対応向けに値の参照「列番号」を別途指定できるようになりました(ver 1.3.0~)
  同一行に複数の言語向けの訳を書いておけば簡単に切り替えられるようになります。
 ・文章のif分岐地獄をなんとかしたい人 (ver.1.2.0~)
  「メッセージID」を「\V[n]」で代用することでイベントエディターがシンプルにできるかも?
   スクリプトも直接記述できるのでより簡単に分岐できるようになりました(ver 1.3.0~)


【セットアップ方法】

 1)「ExternMessage.js」を ./js/pluguins/ フォルダに入れる
  以下のファイルを右クリック保存してください
  https://raw.githubusercontent.com/into-vision/ExternMessage/master/src/ExternMessage.js

  GIT:https://github.com/into-vision/ExternMessage/

 2)「ExternMessage.csv」を ./data/ フォルダに 「新規作成」する。
  読み込みたいcsvファイルの名前は設定で変更可能です。
  そもそもcsvファイルって何?って方は検索していただけると嬉しいです...
  CSVファイルは以下のようなフォーマットにしてください。
    メッセージID, メッセージ
    メッセージID, メッセージ
    メッセージID, メッセージ
 エクセルの表示的には1列目にメッセージID、2列目にメッセージとなります。


【イベントエディター中の「文章」に追加される制御文字】
\M[メッセージID]
 CSVファイル内に記述されている一致する「メッセージID」に対応する「メッセージ」へ置き換えます。

 (ver.1.2.0~)
 「メッセージID」は「\V[1]」のようなツクール変数を指定することも可能です。
 また「TEST_\V[1]」のように連結させて別のメッセージIDを作ることも可能です。
 さらに「TEST_\V[SELECT_VALUE]」のようにして「メッセージID」をツクール変数の添字に出来ます。

 (ver.1.3.7~)
 CSVの「メッセージID」列には「1」や「2」といった「数値のみ」を指定しないでください。
 数値を振りたい場合は「ITEM_MESSAGE_001」といった文字と数値の組み合わせにしてください。
 同様に「[ ]」などの記号も含めないようにしてください。

【CSVファイル側で有効なコマンド】

:name[名前, 顔グラのセット名]
name.png
 別ウィンドウの名前表示欄に設定する名前と使用する「顔グラのセット」名を指定します。
 「顔グラのセット」名は顔グラを使用しない場合は省略できます。
 また「名前」に「\N[1]」のようなRPGツクールの制御文字を記述することもできます。
name_ex.png
 推奨する使い方として「名前, 顔グラのセット名」をまとめたメッセージIDを定義し、名前と顔グラがずれることを防止します。


:face[顔グラの番号]
face.png
 現在セットされてる「顔グラのセット」内の指定した番号の顔グラに変更します。
face_ex.png
 推奨する使い方としてすべての顔グラの表情の番号を統一し、
 「メッセージID」で管理することで文章中でも表情が視認しやすくなります。


:word[メッセージID]
 指定したメッセージIDに対応する単語に置き換えます。
 置き換え後のメッセージは再度検証されないので改行やコマンドを使用しないでください。


→:word コマンドは廃止になりました(ver.1.1.0~)
 代わりにエクセル内の文章でも\M[]が使用可能になりました。

:page
 次の行を次のページに送ります。


:event[イベント番号]
event.png
 指定した番号のコモンイベントを呼び出します。
event_ex.png
 推奨する使い方として直接数値を打ち込まずに「メッセージID」で置き換えることで視認性を上げます。
 仕様としてイベント実行後は必ず改ページされます。(1.0.5 2020/09/12)

:fadeout
 画面を黒暗転させます。


:fadein
 黒暗転状態から画面を表示させます。

:bg[]
 文章ウィンドウの背景を指定します。(ver.1.1.0~)
 - dim ツクールの「暗くする」に相当します。
 - transparent ツクールの「透明」に相当します。
 - window デフォルトのウィンドウ表示です。

:layout[]
 文章ウィンドウの位置を指定します。(ver.1.1.0~)
 - top 上に表示します
 - center 中央に表示します
 - bottom 下に表示します。

【上級者向けコマンド】(2021/04/07 1.3.0~)

JavaScript:
:script
    // JavaScript code.
:end
 (ver.1.3.0~)
 script~endの間の文章をスクリプトとして解釈します。
 スクリプトには以下の制限があります。
 ・:script及び:endは必ず行の先頭で記述する必要があります。
 ・スクリプト内はメッセージID等の置換処理は行われません。
 ・スクリプト内で「"」(ダブルクォテーション)は使用できません。
  文字列は「'」(シングルクォテーション)で囲って下さい(csvファイルの都合)
 ・実際のスクリプトの実行は、文章の置換処理終了後の「会話」の最中になります。
  そのためスクリプトを実行してから\V[n]の値を参照して内容を変更するということはできません。
  もし置換処理前にスクリプトを実行したい場合は「:script[immediate]」を使用して下さい。
  ※イベントエディタ上の文章ウィンドウの「行」単位で置換処理が実行されます。
   そのため通常の「:script」で実行したとしても次の「行」に行けば値を反映した状態にすることもできます。

JavaScript:
:script[immediate]
    // JavaScript code.
:end
 基本的な使い方は通常の「:script」と同じです。
 唯一の違いは文章コマンドにスタックされず、置換処理の最中にコマンドが見つかったら直ちに実行されます。
 これにより事前に\V[n]の値を初期化し、使用するメッセージIDを分岐させることも可能です。
 注意点としてメッセージIDを使用して複雑に階層化された置換処理は必ずしも文章の前方から順番に実行されるわけではありません。
 確実に先に実行したい場合は「行」の先頭または中身を変えたい\V[n]よりも前の階層あるいは同じ階層の先頭で記述して下さい。
 会話文が表示される前に実行されるので会話の表示タイミングで画面効果や演出を行いたい場合は通常の「:script」を使用してください。

・書き方
JavaScript:
:script[immediate]
    // [immediate]を付けると置換処理を行う前に実行される
    $gameVariables.setValue(2, 'STRING_VALUE_TEST');
:end
\M[\V[2]]
:script
    // 文章表示後、次の文章に進むとアラート
    alert('test');
:end

csvファイル
STRING_VALUE_TESTにゃおーん

・実行結果
1) スクリプトによって変数「\V[2] 」に 「'STRING_VALUE_TEST'」が格納される
2) 「\V[2] 」は 「'STRING_VALUE_TEST'」に置換される
3) 「\M[\V[2]]は\M[STRING_VALUE_TEST]」に置換される
4) 「\M[STRING_VALUE_TEST]」は「にゃおーん」に置換される
5) 話しかけると「にゃおーん」と文章が出る
2021y04m07d_233753098.png
6) 更にクリックして文章を送ると alert('test') が実行される。
2021y04m07d_233756377.png

【一つのcsvファイルで多言語の翻訳を記述して切り替える】(2021/04/07 1.3.0~)

1) csvファイルの同一「行」に翻訳文を記述する。
メッセージID日本語英語ドイツ語フランス語
UNIT_NAMECatKatzeChat

2) スクリプトで表示したい言語が記述されてる「列」番号を指定
このcsvファイルだと、1:日本語、2:英語、3:ドイツ語、4:フランス語 になります。
※ 0はメッセージIDなので指定しないように

JavaScript:
:script[immediate]
    $externMessage.ValueReferenceColumnIndex = 1;
:end

動的に切り替えることができ、次の文章行から言語が変更されます。
ついでにプラグイン設定から参照列番号を指定することも可能です。

【コマンド仕様】
 ・コマンド後ろの「[]」内に「メッセージID」を記述した場合は対応する「メッセージ」に自動で置き換えてくれます。
  一致する「メッセージID」が存在しない場合はそのまま使用されます。

 ・「メッセージ」内でもRPGツクールMV/MZデフォルトの制御文字などが使用できます。
  原理的にはメッセージを流し直すだけなのでその他の拡張制御文字も使用できる...はず!
  ただしメッセージ内に「\M[メッセージID]」は使用できません。
  →使用できるようになりました(ver.1.1.0~)

 ・ツクール変数制御文字 \V[n], \C[n] の添字nにも「メッセージID」を指定できるようにしました(ver.1.2.0~)

【TIPS】

 csvファイルを直接エクセルなどのファイルで編集するのもありですが、
 オリジナルのデータは.xlsx/.xlsmなどの拡張子で保存してマクロなどを組むとより便利になります。
 自分が用意したのは1行あたりの最大文字数をカウントしたりCSV出力ボタンを作って簡単に吐き出せるようにしたりなどです。
 (VBAマクロがめっちゃ面倒だったのでもし参考にしたいとか要望がありましたらお問い合わせください)

 必ずしもcsvファイルで全ての文章を管理する必要はありません。
 短い文章は直接イベントエディターに打ちつつ長文をエクセルで管理するというのは全然ありだと思います。


【注意事項】
 使用実績が乏しいのでバグなどあればぜひご報告ください!
 プラグイン作成経験もないのでお作法と違う部分があれば教えていただけると嬉しいです。
 RPGツクールでの作成経験もないような人なので実際の作業フローにそぐわない、
 ここをこうしてほしいなど要望などがありましたらぜひフィードバックをいただければと思います。
 他のプラグインと競合する場合などもご要望いただければ出来る範囲で対応したいと思います。
 あと実はすでに似たようなプラグインが有るようならすみません...

 ver 1.3.0~
  置換処理の実行タイミングが変更されました。
  これまでイベント開始直後、文章が開始される前にすべての置換処理を行っていましたが、
  新仕様では会話中、イベントエディタ上の文章ウィンドウの「行」単位で文章が表示される直前に置換処理が実行されます。

  また「YEP_MessageCore」と一部コードが競合する用になります。
  これはプラグインの読み込み順番を「YEP_MessageCore」のあとに「ExternMessage」が来るようにすれば併用できます。
  ただし「YEP_MessageCore」側の一部機能(たぶん文字数で自動改行する機能)が利用できなくなります。

 ver 1.3.8~
  開発時にこのプラグインに関連する問題に直面した時に事前に察知できるようにいくつかのフェイルセーフを入れました。
  主にMessageIDに無効な文字列が設定されていないかどうかチェックされます。
  しかしMessageIDの数が多い場合はロード時間が長くなる可能性が高いです。
  その場合はプラグイン設定より「Fail Safe」パラメータをOFFにすることで高速化が期待できます。
  リリース時にフラグ設定を見直すと幸せになれるかもしれません。

【ライセンス】

 MITライセンス
 製作者: バイザン(@into_vision)
 非商用利用: 自由
 商用利用: 自由
 再配布: OK
 加工: OK
 加工後の再配布: OK
 シリーズ: ツクールMV, ツクールMZ


【バージョン情報】
 1.3.11 2023/03/28 ValueReferenceColumnIndexで最終列を指定した時に正しく取得できない問題を修正
 1.3.10 2022/07/30 オリジナルのコマンドに戻す際にインデックスも復元するように対応
 1.3.9 2022/07/29 範囲外アクセス修正 及び ループcontinue時にコマンドリストをリセットするように修正
 1.3.8 2022/06/18 ツクールMVのJavaScriptエンジンでは利用できない記述があったので修正
         レガシーな書き方だった部分も変更
         プラグイン管理からフェイルセーフ機能の有効/無効を切り替えられるように
 1.3.7 2022/06/18 MessageIDに数値が指定されていたら例外を出すように
         波括弧を間違えて使用していた場合のフェイルセーフも追加
 1.3.6 2022/06/17 ラベルジャンプした後に展開情報が残ったままになる問題を修正
         スクリプトも再実行されるように改良
 1.3.5 2022/05/24 展開された情報が変に残ってしまう問題を修正
 1.3.4 2022/05/23 改行付き変数で置き換えられた後再表示されたときにメッセージが増えていく問題を修正
 1.3.3 2022/03/29 csvファイルに空のセルが存在すると空文字が有効なMessasgeIDとして解釈されてしまう問題の修正
 1.3.2 2021/06/29 メッセージが2回目以降に変更されない問題の修正
 1.3.1 2021/04/23 csv文字コード対応。プラグインの設定からutf-8などを指定できます。
 1.3.0 2021/04/05 直接スクリプトが記述できるように
         多言語対応向けに参照する列番号を指定できるように
 1.2.1 2021/04/04 エクセルを介さず「文章」で「\M[\V[0]]」のように変数を添え字にすると不正なIDとされる問題の修正。
         「\V[メッセージID]」が表示できない問題の修正。
         MZ向けにアノテーションを指定。
 1.2.0 2021/03/06 ツクール変数を添字に指定できるように
         ツクール変数の添字にもメッセージIDを指定できるように
 1.1.0 2020/09/23 Window関連のコマンド追加。:wordを廃止。代わりに再起コマンド実行可能なテキスト置き換え機能実装
 1.0.7 2020/09/22 MZではさらにsetupNewGameが細分化されていたので共通して呼び出される場所で初期化するように
 1.0.6 2020/09/22 イベントテスト/戦闘テスト実行時に'TEST_'の接頭語をつけて読み込まれる仕様を回避するように
 1.0.5 2020/09/12 イベントコマンド実行後のメッセージが表示されない問題の修正
 1.0.4 2020/08/22 ツクールMZに対応。具体的には名前ウィンドウ対応
 1.0.3 2020/07/17 最終行の読み取りエラー修正
 1.0.2 2020/07/16 CRLF(\r\n)改行だとうまく動かない問題に対応
         パラメーターにセフティー処理追加
 1.0.1 2020/04/25 CSVファイル1行目をヘッダー扱いにしてた仕様を削除
 1.0.0 2020/04/25 初版公開


【その他】
  このプラグインの作成経緯を少しだけ書かせていただきますと、にじさんじ所属のVirtual Youtuberである
「鈴谷アキ」さんの活動2周年記念のお祝いのために当初計画していたファンメイドのゲーム作品用に作成されました。
 その際ファンのコミュニティー(通称アキネコ)からメッセージを募りゲーム内に配置していく予定でした。
 過去の経験から100近いメッセージが集まる想定だったため、それらをエクセルで管理しチェックコストの低減や
 イテレーションの高速化を目指して作成したのが始まりです。
  その後色々あってゲーム作品としての制作は中断されましたが、たぶん結構便利なので
 せっかくだし公開したいと思い今回投稿させていただきました。
 今回作成のきっかけをくださったアキネコのみなさまとモチベーションの元となっている鈴谷アキ様に
 改めて感謝の気持をお送りさせていただきます。

 みなさまの創作活動が素晴らしいものになりますように祈っています!
ツッコミやご要望があればお気軽にどうぞ!
 
最後に編集:

バイザン

ユーザー
質問ありがとうございます!
が、大変残念ながらYEP MessageBacklogは持っていないためわからないです...(YEP_MessageCoreはRPGツクールMV基本素材のものです)
一応類似のプラグインとして出てきた ぽに犬 様の バックログプラグイン(ponidog_BackLog_utf8)では問題なく動いてるように見えます。
なのでもしかしたら併用できるかもしれません。※いずれにしても動作を保証するものではありません

もしMessageBacklogを既にお持ちでしたら実際に試していただけると幸いです!
 

onakahhh

ユーザー
ありがとうございます、とても便利そうです。
ぜひ使用してみたいのですが、2点、困っている点があります。

・Excelを持っていませんので、Googleスプレットシートからcsvをエクスポートして検証してみたのですが、セル内で改行すると最後の文字に”(ダブルクオーテーションの終端)が表示されています。
・最後のメッセージIDを参照しようとすると、「不正なメッセージが検出されました」とエラーが出ます。

具体的には、ExternMessage.csvをテキストエディタで開くと、以下のようになっています。
-----------
1,"あ

う"
2,"え
お"
---------
このとき、ツクールのイベントエディターの文章に\M[2]と入力すると、エラーが出ます。
\M[1]と入力すると、



う"

とダブルコーテーションが最後に表示されます。
これら仕様でしょうか。また回避可能でしょうか。

検証が不十分な点がありましたら申し訳ありません。よろしくお願いいたします。
 

バイザン

ユーザー
ご試用いただきありがとうございます!
近しい現象を再現できましたので対応いたしました!
原因としては改行コードがCRLF(\r\n)だとうまく動かなさそうでした。

ver1.0.2として更新しましたので再度お試しいただければ幸いです。
まだダメそうな場合でも対応したいと思いますので再度お問い合わせいただければと思います。
よろしくお願いいたします!
 

バイザン

ユーザー
コードの配布場所をGITに移行しました。

ついでに当プラグインは大規模シナリオスクリプトでの検証はできていませんので、もしロード時間が無視できないレベルになって来ましたらご相談ください。
できるだけ対応したいと思います。
 

onakahhh

ユーザー
なんと!
大変迅速にご対応いただき、感激いたしました。

ver1.0.2を試しましたが、ほぼ問題なく動作いたしました。
一点、最後のメッセージが複数行、かつ、最後の行を改行せずに終わっている(ダブルコーテーションでファイルが終わっている)場合には、同様の「不正なメッセージIDが検出されました」 が表示されました。
ただしこれは、最後の行に改行を入れる(空行でファイルが終わっている)と回避できましたので、現状で問題なく使用できそうです。
使用させていただきます。ありがとうございます。
 

バイザン

ユーザー
確認ありがとうございます!

>最終行
あー! なるほど...たしかにこれだと最後なにもないと取りこぼされますね...報告ありがとうございます!
明日修正いたしますので取り急ぎ返信だけ!
 

バイザン

ユーザー
最終行の読み取りエラーに対応しました! ver1.0.3
よろしければご確認ください!
 

バイザン

ユーザー
1.0.4 2020/08/22
 先日発売しましたRPGツクールMZに対応しました。
 具体的には名前ウィンドウをプラグイン経由ではなくデフォルトの機能を使用するようにしました。
 MV/MZ両方同じファイルがご使用いただけます。
 

バイザン

ユーザー
1.0.5 2020/09/12
 イベントコマンド実行後のメッセージが表示されない問題を修正しました。
 なお:eventの仕様としてイベント実行後は必ず改ページされます。
 この仕様だと行いたい表現ができないという場合はご相談ください。
 

console10

ユーザー
Note: * Sorry for english only talking * :)

Thank you for making this! I will try to use in an english product.

Please consider creating a sample project to show the product, also consider an english translation.

Thank you again!

edit: I got it working! This plugin is AMAZING!
Please consider adding the following commands:

-Selecting DIM, WINDOW, and TRANSPARENT background
-Selecting Window Position from TOP, MIDDLE, BOTTOM

Thank you! :)
 
最後に編集:

バイザン

ユーザー
Thank you for using!!
使用していただきありがとうございます!!

The explanation in English will be machine translation.
Is that OK?
英語での説明は機械翻訳になるかもしれませんがそれで良ければ用意してみたいと思います。

I'll consider "background setting" and "window location setting"!
背景設定とウィンドウ位置設定は検討いたします!

But, it won't be possible immediately.
しかしすこしお時間をいただきます!
 

バイザン

ユーザー
1.0.6 2020/09/22
 イベントテスト/戦闘テスト実行時に'TEST_'の接頭語をつけて読み込まれる仕様を回避するように対応しました。
 
 戦闘テストやCtrl+Rでのイベントテスト実行を行うとツクールエディタ側で管理されているファイルは'TEST_'を接頭語にして複製?されて読まれているようで、ツクールエディタ管理外のファイルは複製されないので読み込みエラーになっていました。シラナカッタ
今回の対応では'TEST_'付きで読まれた場合は接頭語を外して読み込み直すように対応しました。

追記:MZで動作確認忘れててチェックしたらこっちはまだダメだった…対応中
 

バイザン

ユーザー
1.0.7 2020/09/22
 MZのイベントテスト/戦闘テスト実行時はまた別の問題で引っかかってたので対応しました。

 MZではsetupNewGameが細分化されていたので共通して呼び出される場所で初期化するように回避しました。
 そもそもセーブデータから始めると正しく動作してなかった説が…コレハヒドイ
 

バイザン

ユーザー
1.1.0 2020/09/23
 :wordコマンドを廃止。
 代わりにエクセルのメッセージ文章内でも \M[]によるメッセージ置き換えに対応しました。
 それとウィンドウ関連のコマンドを追加しました。

内部的に色々と変更してるのでなにかバグが見つかりましたらまた教えて下さい!
:wordコマンドを今廃止されると困るという方がいらっしゃいましたらそれもご相談ください!
 

バイザン

ユーザー
edit: I got it working! This plugin is AMAZING!
Please consider adding the following commands:

-Selecting DIM, WINDOW, and TRANSPARENT background
-Selecting Window Position from TOP, MIDDLE, BOTTOM

The function you requested was mounted!
:bg[] & :layout[] commands in ver1.1.0
 

ケイータ

ユーザー
こんにちは!
素晴らしいプラグインをありがとうございます!

今使わせて頂いているのですが、Csvのシート2やシート3を読み込ませるようにご対応は可能でしょうか?
シートで分ける事が出来ると、イベント毎にシートを分けて管理出来るので使い勝手が今より上がると思います。

例えば
\M1[メッセージID]  はシート1
\M2[メッセージID]  はシート2
\M3[メッセージID]  はシート3

みたいな感じです。

お忙しいとは思いますがご検討の程、宜しくお願い致します!

2020/09/25
追記:
シート毎が可能だとしても、現在使用中の方の事もあるので
シート1の場合は 元々の
\M[メッセージID]
として、
シート2から
\M2[メッセージID] \M3[メッセージID]
と出来れば良いですね。

もし\M[メッセージID]が\M1[メッセージID]となってしまった場合
今まで文章の表示で入れていたコード全てを変更しないといけなくなるので……

ご検討の程、何卒宜しくお願い致します。
 
最後に編集:
トップ