マビノギのインタラクションと歌詞出し

オンラインRPG『マビノギ』で、インタラクションの機能を用いてペット・パートナーにチャットを代弁させる手法について紹介します。マビノギMMLガイドの記事のひとつです。

ここで取り上げるのは「プレイヤーキャラクターは一見なんの動作もなんの変化も見せずに」「ペット・パートナーにだけ次々にしゃべらせる」方法です。とくに「プレイヤーキャラクターが演奏中に、インタラクションでペット・パートナーに歌詞や演劇のセリフのような文を出させる」ことを主眼に置いています。

マビノギのチャットと歌詞出しのページが、本稿の導入となっていますので、あわせてお読みください。さらに本稿は、マビノギのインタラクションメーカーについての基本的なことについてすでに知っているひとを想定読者にしています。

末尾の「実演動画」の節に、童謡「あめふり」の歌詞出しのようすを撮った動画がありますので、インタラクション歌詞出しを見たことがないかたは、それを先に御覧になるのもよいかと思います。これ以外の、本稿の画像で示している歌詞出しの実践例は、いずれも、わたしの作品の歌詞を使っています。

画像1:パートナーで歌詞出しチャット

このページで扱っている『マビノギ』のゲーム画像やゲーム内データの知的財産権は、株式会社ネクソンおよび韓国NEXON社に帰属します。© NEXON Korea Corporation and NEXON Co., Ltd.

本稿のなかで、「チャット」は、周囲のプレイヤーに届く、全体チャット(オープンチャット・一般チャット)を指します。

ほか、「歌詞出し」「自キャラ」「しぐさエモーション」「表情エモーション」といった用語については、マビノギMMLガイドのページの「用語集」にて説明しています。

概要:インタラクションによる歌詞出しの手順

通常のチャットによる歌詞出しの場合は、あらかじめ書いておいた歌詞を順番にチャットに入力していくことになります。

インタラクションの場合は、歌詞をインタラクションのなかに仕込んでおき、それを呼び出す為の「チャットキーワード」のほうを順番にチャットする、という形になります。また、ペットやパートナーを召喚して、適切な場所に座らせることになります。

両者の主な相違はそれだけです。ほか、インタラクションならではの注意点や応用技がありますので、次節から詳説します。

手順を箇条書きで示します。1・2番目の土台づくりが完成したら、曲単位での作業は3番目以降のみになります。

  1. インタラクションファイルの雛形をつくる。インタラクションの各条件のチャットキーワードに、「/人形」(または「/hello」「/ダンス1」のようなしぐさエモーション文字列)・半角空白・任意の文字(連番など)、を順につなげた文字列を入れる。インタラクションの条件と行動のセットは、必要になりそうな数だけつくっておく。(歌詞出し用途ならば、50通りくらいあればたいてい対応できる。)
  2. クリップボード管理ソフトやIMEの辞書登録などを用いて、それぞれのチャットキーワードを順番にスムーズに呼び出せるようにしておく。
  3. インタラクションの各行動のチャット内容に歌詞を書き込む。インタラクションファイルは、1曲単位でつくる。
  4. 本番時、インタラクションを適用したペット・パートナーを呼び出し、じっとさせたい位置に誘導し、休憩スキルをさせておく。
  5. 演奏の進行とともに、チャットキーワードを順番にチャットする。

インタラクションの基本

「インタラクション」は、自キャラがなにか行動したり一定条件を満たしたりすると、ペット・パートナーなどが特定の反応をするようにカスタマイズできるシステムです。

たとえば、スキルやアクションを使ったり、ポーション類を使ったり、特定の「チャットキーワード」を含むチャットをしたりしたときに、ペット・パートナーになんらかの反応をさせることができます。

ペット・パートナーだけでなく、椅子アイテムのような「アイテム設置物」からもチャットさせることができます。自キャラが演奏などをする際には使えないので、アイテム設置物について本稿では取り上げません。

インタラクションでは「条件」と「行動」を指定します。それぞれにさまざまな種類がありますけれど、インタラクションを用いた歌詞出しでは、「条件」として「チャットキーワード」を、「行動」として「チャット」「モーション」「表情」を主に使います。また、歌詞出しの目的においては、行動グループを複数つくって確率で分岐させる意味がないので、ひとつの条件に対して行動グループをひとつだけ設定する、ということを前提とします。

「行動」には「メインテロップ」「一般テロップ」というのもあります。太いフォントで任意の文字列を表示できます。両者の違いは、表示位置とフォントサイズです。このテロップは自分自身にしか見えないので、歌詞出しには用途がありませんけれど、「実演動画」の節で少し、補助的な使い道を取り上げています。

画像2:シンプルなインタラクション

画像2は、「こんにちは。」というチャットキーワードに対して、パートナーが「手を振りながらあいさつ」のモーションをしながら「こんにちはーーっ! いえーい! やっほー!」と応えるインタラクションを紐づけ、それを実行したときのようすです。ごく普通のインタラクションの使いかたです。

受け手側にとっての通常の歌詞出しとの違い

インタラクションによる歌詞出しが、通常の歌詞出しと大きく違うところは、「歌詞出しの内容がチャットログに残らない」点です。

ペットやパートナーにインタラクションでチャットさせた内容は、吹き出しのなかでのみ表現されます。歌詞を読む為に吹き出しを見続けることを強いる手法ともいえます。だから、それが負担にならないような配慮を、できるだけしたいところです。スクリーンショット撮影などの為にキャラ名表示を隠すと吹き出しも非表示になる、という点は仕方ありません。

強いる、と書きましたけれど、歌詞に興味のないひとは、吹き出しを見なければいいだけですし、チャットログが流れていかないぶん、じゃまにならない、という捉えかたもできます。

ダンバートンでの演奏会でよく遭遇した状況なのですけれど、近隣で活動しているプレイヤーたちの、演奏会とは関係ないチャットが会場にも届いているさなかの歌詞出しチャットというのは、こちらの歌詞も向こうに届いてしまうし、気後れするというか、興が醒めるというか、とにかくあまり好きではありませんでした。。一方、インタラクションの歌詞出しなら、近隣のチャットと混線することはないので、気兼ねなくできる、というのがわたしの思うところです。

それと、歌があってこその歌詞だから、チャットログで後追いしてもつまらないだろう、という考えもすこしあります。

合奏パーティのリーダーの頭上には、集中鑑賞モードのボタンが表示されます。自キャラの頭上にボタンがある場合、チャットの吹き出しがそのボタンと重なりがちです。インタラクションの歌詞出しなら、自キャラから離れたところで吹き出しが出せるから、ボタンがじゃまになりにくくなります。――とはいえ、ほかにもテロップなど、吹き出しと重なってしまうものがいろいろありますし、逆に、ボタンやテロップなどは「すべてのウィンドウを隠す」状態にすれば非表示にできます。

なにに重きを置くかによって、それぞれの手法の特徴が、メリットにもデメリットにもなると思います。わたしにとってはインタラクションを使うメリットが大きい、というわけです。

チャットキーワードの注意点

インタラクションを起動させる条件となる「チャットキーワード」の仕様について、いくつか説明しておきます。

部分一致の条件

自キャラのチャットの文字列のどこかにチャットキーワードが含まれていれば、そのインタラクションが起動します。

たとえば「カレー」と「ライス」と「カレーライス」のチャットキーワードを各条件に設定していたとすると、「カレーライス」というチャットは、3つの条件をすべて満たします。

この場合は、先に指定したインタラクションから順に、すべて同時に起動します。チャットは、一度にまとめて出ます。モーションは、あとに指定したインタラクションが優先されます。表情は、最後に指定したインタラクションのみ反映されます。

条件の複数一致をうまくあやつるようなインタラクションの組みかたもあり得るでしょう。ただ、ややこしくなるばかりなので、本稿では考えに入れません。それぞれのチャットキーワードが、ほかの条件をも満たすことのないように、インタラクションを組むものとします。

大文字小文字の区別

チャットキーワードは、全角半角・大文字小文字を区別します。

文字数

ふつうのチャットの最大文字数は、半角換算で(全角文字は2文字として数えて)100文字です。

ところが、インタラクションメーカーウィンドウ内で記入する場合、チャットキーワードには、なぜか半角換算で50文字までしか入力できません。このほかにも、インタラクションメーカーウィンドウでの入力には制限や面倒さを伴う面があるので、インタラクションファイルを(テキストエディタ類で)直接編集することをおすすめします。やりかたは「インタラクションファイルの直接編集」の節で説明します。直接編集の場合は文字列の制限がなくなりますけれど、ふつうのチャット自体の文字数制限の為、半角換算で100文字以上の長さのチャットキーワードを指定しても意味がありません。

命令語の扱い

「とまれ!」などの命令語をチャットキーワードに含めていると、インタラクションのほうが優先され、命令語として認識してくれません。

インタラクションの有効距離

インタラクションを起こした時点で、ふつうのチャットの届く範囲にいなかったプレイヤーには、チャットの吹き出しやモーションなどの反応が見えません。たとえば、ずっと続くモーションをペットやパートナーにさせているとき、あとから近くにやってきたプレイヤーには、そのモーションは表示されていません。

インタラクションの上限

ひとつのインタラクションのファイルのなかに、「条件」と「行動」のセットは、最大1000個まで設定できます。

ファイルサイズについては、上限があるかどうかわかりません。2.0メガバイトのファイルが読み込めることは確認しました。

チャットキーワードの用意

自キャラが演奏中の場合は、ほかのスキルやアクションは使えません(例外はあります。たとえばメディテーションスキルなら演奏中でもオンオフ可能です)。演奏中にインタラクションを起こす手段は、どうしても限られます。ひとつかふたつ程度の条件を用意するだけなら、いくらか手はありますけれど、たくさんのバリエーションをつくるには、チャットキーワードを利用するしかありません。

さて、チャットキーワードを用いて、「自キャラが喋らず、吹き出しを出さずに」ペットやパートナーにさまざまな反応を起こさせるにはどうしたらいいでしょうか。ここから説明する部分が、インタラクションを用いた歌詞出しの、いわば急所といえます。

特定の文字列を含み、特定の条件を満たしたチャットは、吹き出しが出ず、チャットログにも残りません。これを利用します。

たとえば、「/ログアウト」とだけ入れてチャットすると、確認ダイアログなしでのログアウトが実行されます。こういう特殊な扱いの文字列がいくつかあります。もちろんログアウトしてしまっては歌詞出しになりませんから、表面上なにも起きないような文字列を選びます。

半角スラッシュで始まる特定の文字列を冒頭に入れるパターンと、マビノギのチャットと歌詞出しのページの「表情エモーション」の節で取り上げた、表情エモーションを固定するチャットのしかたを利用したパターンとがあります。くわしく説明していきます。

しぐさエモーション文字列をチャットキーワードに入れる

「あいさつ」「ダンス1」などの「しぐさエモーション」は、スキルショートカットにアイコンをセットして起動する方法のほかに、半角スラッシュで始まる特定の文字列(しぐさエモーション文字列)を入れたチャットで起動する方法もあります。

「ダンス1」のしぐさエモーションならば、「/dance1」または「/ダンス1」という文字列を冒頭に入れてチャットします。英字の大文字小文字は不問です。同じく、「あいさつ」なら、冒頭に「/hello」か「/あいさつ」、または「/greet」で可能です。そのあとに空白文字(全角半角不問)を挟めば、以降の文字列は無視されます。たとえば「/hello あ」なら、自キャラが「あいさつ」のしぐさエモーションをします。吹き出しにもチャットログにも、何も出ません。空白文字を挟まず「/helloあ」とチャットした場合、そのまま普通の発言になってしまいます。

しぐさエモーション文字列も、インタラクションの「チャットキーワード」に指定できます。(チャットキーワードは、英字の大文字小文字を区別します。)

スキルやアクションの使用中には、しぐさエモーションが使えませんけれど、しぐさエモーション文字列のチャットでインタラクションを起動することはできます。また、呼び出したしぐさエモーションを自キャラが持っていない場合、そのしぐさエモーションはもちろん使えませんけれど、チャット自体が無効になることはなく、インタラクションのチャットキーワードとしては有効です。

200種類以上のしぐさエモーションがあるので、それらを単純に並べるだけでも用が足りそうですけれど、空白文字以降の内容もチャットに現れない、という仕様を利用して、「/hello 00」「/hello 01」「/hello 02」などという連番の「チャットキーワード」をつくると、スマートでよさそうです。連番でなくても、とにかく自分にとってわかりやすく簡潔な文字列であれば、なんでもかまいません。

また、自キャラが持っていないしぐさエモーションを呼び出す形に統一しておくのがよいでしょう。どっちみち演奏中にしぐさエモーションが利かないとしても、本稿のテーマからいえば、あえてそうしない理由はありません。なお、持っていないしぐさエモーションならどれでもかまわないのですけれど、しぐさエモーションの名前が全角9文字以上のものは、半角スラッシュと空白文字を含めると「同じ内容の文字列」とみなされる長さになり、連続してチャットしづらくなるので、避けましょう。

この手法なら、共通の文字列(しぐさエモーション文字列と空白文字まで)を単純に貼り付けて、連番の部分をその場で入力していく、というやりかたも充分可能でしょう。これは、IME辞書登録でチャットキーワードを呼び出すのと、本番での操作量が大差ないように思えます。あるいはクリップボード管理ソフトの手法と組み合わせてもいいですし、いろいろ試してみてください。マビノギのチャットと歌詞出しのページの「用意したテキストの呼び出し」を参照。)

しぐさエモーション文字列一覧

全キャラが無条件で使えるしぐさエモーションと、有料のオプションサービスで使えるしぐさエモーションは、英語名の文字列と日本語名の文字列の両方で呼び出せます。

さらに、すべてのエモーションには、固有の英数字の文字列があります。これは、起動条件にしぐさエモーションを指定したインタラクションファイルを、テキストエディタ類でひらくと確認できます。半角スラッシュを頭に付せば、それらの文字列も同様に、しぐさエモーション文字列となります。

日本語名の文字列は、しぐさエモーション名そのままです。ただし、「格式ばった挨拶」は「/格式ばったあいさつ」で呼び出せます。また、「/告白」「/大好き」「/フェアリーダンス」「/カンカンダンス」は、なぜか、しぐさエモーション文字列と認識されません。

このように、調べてみたら案外ややこしかったので、しぐさエモーション文字列を一覧表にまとめました。CSVファイルとして公開します。CSVファイルは、CSVビューアーや表計算ソフトを使えば、表の形で閲覧できます。テキストエディタ類でもひらけます。

(最新版のみを、おなじURLで載せる方式に変えました。以前の版はサーバーにもう残していません。)

たとえば、先述したとおり、「あいさつ」のしぐさエモーション文字列は、「/あいさつ」「/hello」「/greet」の3種類があります。なぜ3種類あるかというと、インタラクションファイル内で使われる文字列「greet」が、英語名の「hello」と異なるからです。(これらを区別しても実用上の意味はありません。「/greet」のほうは、インタラクションが実装されてから、しぐさエモーション文字列になったのだろう、という程度の話です。)

余談ですけれど、インタラクションファイル内で使われる文字列を見ると、けっこういいかげんで一貫性のない命名がされているのがわかります。

実装済みのすべてのしぐさエモーションの種類については、インタラクションメーカー内で確認できます。この表も、インタラクションメーカーのリストの並びに従っています。「????」というのも混じっていました。未実装データかなにかでしょうか。それらもそのまま、一覧表に載せています。

「/人形」文字列をチャットキーワードに入れる

前述の「しぐさエモーション文字列をチャットキーワードに入れる」とおなじ手法が使える文字列が、ほかにもあります。

アイテムを収納するカバンの一種で、人形が呼び出せる「人形カバン」というのがあり、特定の人形を呼び出す機能がついています。そして一部の人形カバンは、冒頭に「/人形」をつけたチャットをすることで、人形が腹話術でしゃべります。

より正確にいい換えると、「/人形〈半角数字〉〈半角空白〉〈人形にしゃべらせたい文字列〉」という形式でチャットすると、呼び出し中の人形からチャットの吹き出しが出る、ということです。〈半角数字〉は、(腹話術ができる)人形カバンをインベントリ左上からの順で指定する番号となります。(その種の人形カバンを持っていないので、自分ではこのことを試していません。公式のおしらせを参照しました。)

さて、この「/人形」を含むチャットは、「しぐさエモーション文字列」とおなじく、自キャラの吹き出しにもチャットログにも出ません。これももうすこしきっちりと書くと、人形を呼び出していないとき、以下の2パターンのいずれかのチャットをすれば、表面上なにも起きない、ということです。

「しぐさエモーション文字列」の場合、先ほど書いたとおり「/hello あ」と全角空白で区切っても問題ない一方、「/helloあ」と書くと失敗します。「/人形」の場合は、半角空白で区切る必要があり、全角空白では普通にチャットが出てしまいます。また、「/人形1〈半角空白〉あ」や「/人形あああ〈半角空白〉あ」などのように、半角空白で区切る前に別の文字列を入れることもできます。

「/人形」だけでは普通のチャットになってしまい、「/人形〈半角空白〉」や「/人形1〈半角空白〉」だけでもだめです。「/人形〈半角空白〉〈半角空白〉」なら、ふたつ目の半角空白が〈任意の文字列〉という扱いになって、上記の条件が満たせます。

このように、区切りの扱いがしぐさエモーション文字列と微妙に違います。

また、しぐさエモーション文字列と比べると、「/人形」のほうは、自キャラがしぐさエモーションを持っているかどうかを気にしなくて済む、という小さな利点があります。

ちなみに、「人形術」というしぐさエモーションはすでに存在しますので、「/人形術」という文字列にかぎり、半角空白を続けなくても自キャラの吹き出しは出ません。

インタラクションでペットやパートナーにしゃべらせつつ、同時に人形カバンの人形でも腹話術をする、ということもできるのでしょうか。わたしはその種の人形カバンを持っていませんから、「腹話術で歌詞出し」の可能性については記事にできません。(呼び出した人形をじっとさせておく手段がおそらくないでしょうから、あまり実用的でない気もします。)

表情エモーション文字列をチャットキーワードに入れる

もともとわたしは、インタラクション実装後1年半くらい、この方法を用いていました。新たに見つけた、前述の「しぐさエモーション文字列(または「/人形」文字列)をチャットキーワードに入れる」方法のほうがすぐれているので、こちらは古い方法になりましたけれど、なにかのアイデアのヒントになるかもしれませんから、ひととおり触れておきます。

「(笑)」「(泣)」のような、表情エモーション文字列も、「チャットキーワード」に指定することができます。表情固定チャットになる「(笑) (笑)」も、もちろん使用できます。表情固定チャットなら吹き出しも出ず、チャットログにも流れませんので、自キャラが(表面上は)しゃべることなく、インタラクションを起動することができます。(半角空白文字1つだけでも、表情固定チャットと同様のことができますけれど、これだとチャットキーワードのバリエーションが増やせません。)

同じ表情エモーション文字列であれば、いくつ並べてもいいので、「(笑) (笑)(笑)」や「(笑) (笑)(笑)(笑)」なども表情固定チャットになります。つまり、次の例のように、半角空白文字の位置だけを変えれば、すべて別々のチャットキーワードにできます。

これはもちろん一例です。べつに笑顔にする必要はなくて、ほかの表情エモーションでもいいので、以降の説明では、ふだんの顔とおなじ「普」の表情エモーションを例に使うことにします。

チャットキーワードは部分一致条件ですから、なるべく長い文字列をつくって、お互いの条件が重なり合わないようにする必要があります。

インタラクションメーカーウィンドウで入力できる長さに従うと、12個の「(普)」と半角空白文字1つが並べられます。半角空白文字が入れられる隙間が13箇所ありますから、「(普)」による表情固定エモーション文字列は、最大で13通りつくれることになります。ただし、メッセージログウィンドウではなくチャットウィンドウを用いてチャットする場合は、冒頭・末尾に空白を入れる2パターンを除外しないといけないのでマビノギのチャットと歌詞出しのページの「表情エモーションの固定」の項を参照)、11通りになります。

インタラクションファイルを直接編集すれば、「(普)」24個と半角空白文字1個とによる、25通りの組み合わせが可能です。

「(普)」とおなじ効果をもつ表情エモーション文字列に「(普通)」もありますから、これも利用しましょう。直接編集の場合、「(普通)」は16個まで並べられます。半角空白文字1個を混ぜた組み合わせは17通り。

したがって、「(普)」と「(普通)」それぞれを合わせると、42通りの表情固定エモーション文字列がつくれます。それらのパターンを並べたものをtxtファイルにしました。

txtファイルで例示した文字列は、「(普)」を並べたパターンと「(普通)」を並べたパターンとを、互い違いに混ぜています。これは、「同じ内容の発言」扱いでチャットが不発になるのを防ぐ為です。

しぐさエモーション文字列の方法と効果が異なる点がひとつあります。表情エモーション文字列のみのチャットをした場合は、通常のチャット同様、周囲のキャラの顔が自キャラのほうを向きます。しぐさエモーション文字列の場合は、反応がありません。よって、しぐさエモーション文字列を使うほうが、より「自キャラが何もしていないように見える」わけですし、逆にいうと、自キャラを見つめさせる為に表情エモーション文字列を取り入れる、ということもできます。もちろん、インタラクションのチャットを出しているペット・パートナーのほうにも視線が向けられる点は、どちらもおなじです。

インタラクションのチャットならではの仕様

インタラクションを使って出すチャットには、通常のチャットより自由度の高いところがいくつかあります。

改行文字が使える

インタラクションファイルを直接編集することで、改行文字が使えます。自キャラのチャットでは改行文字が使えないので、吹き出し内の文字組みを重視するなら、空白文字を巧みに混ぜないといけません。その点、インタラクションのチャットなら、文字位置の制御がとても楽になります。とはいえ、フォントサイズ設定が実装されて以後、凝った文字組みにあまり意味がなくなったわけですけれど、改行のしやすさは依然としてメリットです。

複数の改行も可能です。たとえば次のような記述なら、画像3のように、「あいうえお(改行)(改行)かきくけこ」と表示されます(インタラクションファイルの直接編集については別節にて後述します)

<Action name="A_Chat" message="あいうえお


かきくけこ"/>
画像3:改行を2つ含む吹き出し

メッセージの末尾を改行にすると、フォントサイズが11ポイントか否かで、吹き出しの挙動が異なります。

<Action name="A_Chat" message="あいうえお
"/>

11ポイントのときは、その時点での吹き出しには反映されず、次の吹き出しが連なるときに1行空きになります。12ポイント以上のときは、その時点で吹き出しに空行が現れます。改行のあとに半角空白文字しかない場合も同様です。

一方、改行のあとに全角空白を入れていると、いずれの場合も、その時点で吹き出しに一行空きが反映されます。

これについては、12ポイント以上の大きいフォントのほうが素直な挙動に見えますけれど、大きいフォントには、改行まわりのことも含め、いろいろとややこしいところがあります。これについては、マビノギに関する雑多な調査資料のページの「大きいフォントの奇妙な仕様」の節で詳述しています。


一行が吹き出しの横幅を超える場合は、もちろん、一般の吹き出しとおなじく折り返されます。

一度に1000文字まで出せる

画像4:インタラクションで1000文字を一気に出したようす

インタラクションファイルを直接編集すれば、全角半角問わず最大で1000文字、ペット・パートナーに一度にしゃべらせることができます。画像4がそのようすです。吹き出しが縦に非常に長くなっています。こんなにたくさん文字を出しても、上のほうが画面外に切れて見えなくなりがちですから、分量はほどほどにしておくべきでしょう。改行の入れすぎについても同様に注意です。

なお、マビノギのチャットと歌詞出しのページで解説している「吹き出しの寿命の法則」の通り、1000文字詰め込んだチャットの吹き出しは、203秒後に消えます。

その他の特徴

インタラクションで出すチャットは、短時間に連続させたときの「チャットの不発」の制限を受けません。同一文字列を続けざまに何度でも出すことができます。ただし、「許可されていない単語」に関しては、インタラクションで出すチャット内容にも同様に適用されます。(「チャットの不発」は、マビノギのチャットと歌詞出しのページを参照。)

通常のチャットにタブ文字を入力すると、半角空白4文字に変換されますけれど、インタラクションのチャットでは、そのままタブ文字として扱われるようです。行の折り返しなどに関して、タブ文字は、半角空白文字と同様に振る舞うようです。

ペット・パートナーの扱い

ペットやパートナーは、スキルを使っていないときは、主人のまわりをうろうろします。また、ランダムなタイミングで吹き出しを出します。ペットによっては、鳴き声や羽音を立てたりもします。

ペットから「…」の吹き出しが出ると、インタラクションで出した吹き出しが途切れてしまいます。インタラクションで歌詞出しする場合、ペットやパートナーをじっとさせて、なおかつ、吹き出しや音を自発的に出させないようにすることが重要になります。

吹き出しが揺れると文字が読みづらくなります。ペットやパートナーの身振りを小さくして、吹き出しの揺れを最小限にとどめることも大事です。

位置の固定

ペットやパートナーの位置を固定する方法は、休憩させる、ウィンドミルを準備させる、命令語「とまれ!」「stop!」でじっとさせる、行動不能状態にさせておく、などがあります。

「とまれ!」でじっとさせた状態でも、ペットによっては首を振ったり羽ばたきしたりといった動きをするものがあり、吹き出しの揺れを最小限にとどめる、という観点からするとよくありませんし、鳴き声や羽音を止められないペットもあります。音については、環境設定の「サウンドエフェクトボリューム」をミュートしておけば聞こえませんけれど、観ているひと全員がオフにしているわけではないでしょう(「アンコールスキルの拍手の音」が聞きたい場合はオンにする必要があります)。また、パートナーは、とまれ状態でも自発的にしゃべってしまいます。

行動不能にさせておけば、動きも音も抑えられますけれど、ちょっとかわいそうです。

したがって、ペットやパートナーの位置固定には、休憩させるのがいちばん良いようです。これは、後述のモーションの固定にも必要です。

これも、「やすめ!」命令をチャットするより、「同行キャラクターを座らせる」ショートカットキーを割り当てておくとよいでしょう。スキルアイコンのショートカットでも可。

なお、演奏パートナーに演奏をさせるのならば、とまれ状態にさせるか、ウィンドミルをさせましょう。休憩させてしまうと、休憩を解除しないと演奏に移れません。演奏中のパートナーは自発的にしゃべりませんし、もちろん移動しません。

ちなみに、とまれ状態のときにスキルを使わせると、とまれ状態が解除されます。スキル使用中に「とまれ!」と命令すると、スキルがキャンセルされます。幻想のコーラスの準備もスキル使用に含まれます。

位置取り

ペットやパートナーをじっとさせる前に、まずは望ましい位置に誘導しないといけません。

インタラクションによる歌詞出しでは、それなりの大きさの吹き出しが出るので、吹き出しがじゃまになりにくく、かつ、見えやすいような位置に、ペット・パートナーを立たせるほうがよいでしょう。「もどれ!」命令でペット・パートナーを自キャラのそばに引き寄せるという方法で、狙いの位置に誘導します。「もどれ!」命令をいちいちチャットするより、「同行キャラクターを呼ぶ」ショートカットキーを使うのが楽です。

画像5:ペット・パートナーを、狙いの位置と向きで座らせる

向きの制御については、正面に対してすこし後方へまず誘導してから(画像5左)、前に数歩移動させて(画像5中)、休憩させる(画像5右)、という手順を踏むとよいでしょう。それでも、立ち止まったあとのペット・パートナーが振り向いたりすることがあり、プレイヤーによって向きが異なって見えることがあります。これをできるだけ避けるには、ペット・パートナーが歩いている最中を狙って、休憩スキルをさせるのがよさそうです。

すこし後方から1歩踏み出す形で正面を向かせる、というのは、演奏パートナーと一緒に演奏する際のパートナーの位置取りにおいても同様ですし、さらには自キャラにおいても、ほかのプレイヤーの画面上で違う向きになるべくならないようにする為に、習慣づけておくのがよいと思います。

パートナーの演技

パートナーのインタラクションには、豊富な「モーション」と「表情」が用意されています(ペットにもモーションがありますけれど限定的です)。演劇ならともかくとして、歌詞出しにそこまで凝った演出は必要ないかもしれませんけれど、取り入れてみると、なかなかおもしろいものです。

モーション

インタラクションに、チャットだけでなく、モーション単体、あるいはモーションとチャットの組み合わせを入れることで、ポーズを取らせながらの歌詞出しができます。

わたしは、モーションの一覧表をつくり、PDFファイルにして、マビノギに関する雑多な調査資料のページにて公開しました。本稿でも紹介します。

パートナーのインタラクションモーション一覧.pdf[PDF]

インタラクションファイルを直接編集する際に使う数値や、モーションの長さ、効果音などの有無を調べ上げました。モーションを絞り込んだり試したりするときのガイドとしてつくりました。交易パートナー、ラグリンネ、ウィリアムで調査しました。

動き方やポーズ自体をすべて一覧化するのは困難なので、それはゲーム内で確認してください。インタラクションメーカーでプレビューができます。ごく一部のモーションだけ、後述の「静止持続系立ちポーズ集」の項で画像を載せています。

モーションのなかには、10秒以上、あるいはずっと続くものがあります。しかし、パートナーが動いたり自発的にしゃべったりすると、そこでモーションが途切れてしまうので、そうならないように休憩スキルを使用させておく必要があります。

休憩中に、持続しないモーションをさせると、終了後に休憩の姿勢に戻ります。

また、パートナーの装備を持ち替えさせると、モーションが止まります。

持続するモーションは活用しやすいのですけれど、そうでないモーションの多くは一瞬ちょこっと動くだけで終わってしまい、あまり役に立たないように思えます。

歌詞を出している最中は、吹き出しが揺れないように、後述の「静止持続系立ちポーズ集」のような、あまり動きの大きくない、持続するモーションをさせておくとよいでしょう。歌詞出しの最初にひとつ、そのモーションの指定を加えておくだけでOKです。そこからさらに、たとえば、歌詞のない間奏のところで踊らせる、などといったアレンジもできます。ずっと休憩の姿勢をとらせているより、映えるはずです。

効果音が鳴るモーション、画面が揺れるモーションもあって、これらのエフェクトはほかのプレイヤーにも伝わります。意図して用いるのでないかぎりは避けましょう。

(PDFファイルにて、モーション名が空欄になっているモーションIDについても触れています。それらには、モーションが設定されていないのではなく、ペット用インタラクションで設定できるモーションが割り当てられていたことがわかりました。PDFを修正する予定が当面ないので、さしあたり、ここで補足します。

静止持続系立ちポーズ集

画像6:パートナーのインタラクションモーション・静止持続系立ちポーズ集

画像6は、インタラクションメーカーのプレビュー表示をつなげて、それぞれのモーション名を書き添えたものです。持続し、動きが小さく、効果音も鳴らない、立ち姿のモーションを集めました。

パートナーで歌詞出しをする為のインタラクションを組む際、パートナーにどういうポーズをさせるかを決める手がかりにしています。動きが大きいと吹き出しが揺れて、歌詞が読みづらくなるので、おとなしいモーションを使うようにしているのです。

これら以外のモーションがすべて用途に合わない、ということではありません。たとえば「基本姿勢」のポーズはわかりきっているのでわざわざ画像一覧に含めていませんし、吹き出しが揺れにくい、という観点でいえば、ほかにもいろいろと候補があります。座る系、横になる系のモーションでも別に構わないわけです。

5ケタの数値は、「パートナーのインタラクションモーション一覧」のなかでモーションIDと呼んでいるものです。インタラクションファイルを直接編集する際に使います。

表情

「表情」の指定を入れると、表情が数秒間だけ変わります。インタラクションメーカーでは「普」の表情が選べませんけれど、直接編集でなら「普」も使えます。モーションのなかには、表情の変化を伴うものもあるので、それを「普」の表情で上書きする、という使い道があります。

インタラクションのチャットの内容に表情エモーション文字列が含まれていると、自キャラの表情エモーションと同様に、パートナーの表情も変わります。こちらは、吹き出しが消えるまで変化したままになります。

ここで気をつけたいのが、疑問符「?」も表情エモーション文字列だということです。吹き出しを維持してチャットを出し続ける場合、疑問符を含むチャットがあると、意図せず表情が変わりっぱなしになってしまいます。表情を変えないようにするには、そのチャットに「(普)」の表情エモーション文字列をつけ足しましょう。

空腹時の反応

歌詞を出しているパートナーの吹き出しに「ふぅ…お腹空いた…!」というメッセージがまぎれ込んでいる。
画像7:パートナーが空腹を訴える

パートナーは、満腹度(FOOD値)が55パーセント以下になると、空腹を訴えるセリフをいうようになります。休憩をさせていても、このセリフは防げず、画像7のように、歌詞出しチャットに紛れ込んで支障があります。好感度にも悪影響があるので、パートナーの満腹度には気を配りましょう。ペットの場合は、おそらく気にしなくても大丈夫のようです。

ペット・パートナー自身の発言でも反応する

チャットキーワードは、ペット・パートナー自身の一部の発言も対象になります。「もどれ!」命令をしたときに、ペットやパートナーが発する『!!』『はい!』も該当します。この『!!』や『はい!』をチャットキーワードに入れておき、同行キャラクターを呼ぶショートカットキーを使えば、チャットをせずにそのインタラクションを起動できます。瞬間移動魔法使いインプのような、セリフの多いペットでいろいろ試して遊んでみるのも一興です。ただ、本稿の視点からいうと、役立つ小技にはなりそうもなく、むしろ意図しないインタラクションの起動を招く仕様かもしれません。とくに気にする必要はないと思います。

ペットに関する諸注意

フィニーフィンは、もともと吹き出しが出せないので、歌詞出し目的のインタラクションには使えません。

頭に乗せているときのシロフクロウも、吹き出しが非表示になります。ほかのペットにも、こういうケースがあるかもしれません。

自キャラが演奏をすると「踊る」ペットが何種類かあります。休憩スキルを中断し、自キャラの近くに来て踊り出します。踊っている間、「…」の吹き出しはおそらく出ないので、演出として用途はあるにしても、歌詞出しには向かないと思います。楽器の種類によって踊る場合と踊らない場合があるので、踊るペットで歌詞出しをするときは、自キャラの弾く楽器の種類も考慮しましょう。(カウンターアタックやウィンドミルをさせておいてから踊る楽器を弾くと、そのスキルをずっと維持したままになり、踊りを抑止できます。)

全フォントサイズ対応の為に

画像8:フォントサイズ設定による整形済みテキストの表示差

2020年9月26日のアップデートで、フォントサイズの設定が増えたことにより、「どのプレイヤーでも吹き出しの文字組みが同じに見える」という前提が崩れてしまいました。このことは、マビノギのチャットと歌詞出しのページの「フォントサイズ可変によるチャット整形への影響」の項でも取り上げました。

サイズを大きくしたときのフォントは、一般的にいって「見出し向け」の太字ですし、むしろ字形がつぶれて見づらいので、だれも使わないだろうという印象を最初は持ちました。けれど、高解像度のディスプレイが一般的になりつつあるいま、マビノギの画面の文字は、もはや「小さすぎて見づらい」「老眼にはつらい」と評されるようになってきていて、サイズ可変を歓迎する声もわりと多いことを知りました。それで、フォントサイズ設定を最大値にしているひとたちを切り棄てないような、歌詞の表示のしかたを考えることにしました。

歌詞出しなどをする際、「相手がどんなフォントサイズの設定にしていても、同じ情報が届けられる」ことは大前提です。一方、「同じように表示される」ことは必須ではありません。ウェブサイトの記事を読む際、ブラウザの幅を狭くして読もうが、フォントを替えて読もうが、読み上げソフトに代読させようが、得られる情報の値打ちが変わるわけではありません。受け手にとっての読みやすさが変わるだけです。吹き出しに表示される歌詞も、どこで折り返しされようが、たいした問題ではない、という意見もあるでしょう。

ただ、画像8を見ていただいてもわかるように、ことに歌詞の場合、へんなところで折り返しされると、文字組みによって生まれるリズムが乱されます。また、吹き出しの文字は短時間で流れ去っていきますから、パッと見てすぐ把握できるくらいに読みやすい表示でないと、文字を追いかけるだけで疲れてしまいます。

全フォントサイズ対応の文字組みの実例

フォントサイズ設定の実装直後は、歌詞の表示の工夫を抛棄するしかないと思ったものでした。これからどうしようかなといろいろ試していたら、フォントサイズを最大の20ポイントにした場合、全角8文字までなら1行に収まる、という明快な基準をとっかかりにできそうでした。当然、19ポイント以下でも、全角8文字以下で折り返しされることはありません。だから、全角9文字以上になる文言を2行に分割する、という形を貫けば、フォントサイズによって折り返しされたりされなかったりすることはなくなります。

ふつうのチャットでは改行が入れられないので、「9文字以上にならないように改行する」この手法は、インタラクションならではのものです。(8文字までに限ったチャットを小出しにすれば、ふつうのチャットでも折り返しを防げます。ただし、短時間にチャットできる回数は限られているので、難しいでしょう。あるいは、半角空白文字を使って擬似的に改行することもできます。)

区切りを表す飾り程度なら、文字と置きかたを吟味すれば、どのサイズでもそれなりにしっくりくる表示は可能です。罫線で囲むような表現は難しいかもしれません。大掛かりなアスキーアートはほとんど無理でしょう。

画像9:同じチャット内容を最小・最大フォントサイズで表示したようす

アップデート以降の、わたしの歌詞出しの例として、画像9を載せました。左が11ポイント、右が20ポイントでの表示です。見比べると、折り返しに変化がないことが確認できるはずです。

1行が全角9文字以上にならないようにどんどん改行していくと、同時に表示される行数が以前よりも多くなりがちになります。たったいま出したぶんはどこからなのか、見失いやすそうに思えました。だから、チャットひとつごとに、「▽」の記号を末尾につけることにしました。こうすると、2つめの「▽」から3つめの「▽」の間が、いま唄っているところだとわかりやすくなる、と期待できます。

画像10:マークをつけないパターン、つけるパターンの比較

ひとつのチャットのなかで1行空きを織り混ぜる場合には効果がとくに高くて、画像10で示しているように、マークをつけるほうが見やすくなります。マークの文字はなんでもいいのですけれど、ゲームなどでよく見かける「メッセージ送りを促すカーソル」をイメージして、「▽」にしました。また、「▽」の行は、全角空白文字7つ・半角空白文字2つ・「▽」という、最大フォントサイズでも折り返されないぎりぎりの長さの文字列になっています。つねにこの1行を入れることで、吹き出しの横幅をなるべく維持する、という狙いもあります。

また、マビノギのチャットと歌詞出しのページに載せた「半角空白文字で吹き出しの寿命を延ばす」手法も、いまは取り入れています。全角空白文字7つ・半角空白文字2つ・「▽」を並べた行の末尾に、さらに半角空白文字を23文字以上くっつけると、どのフォントサイズでも折り返される長さになり、その半角空白の部分が吹き出しから省かれ、それでいて半角空白文字の数だけ「吹き出しの寿命」が延びます。これによって、吹き出しの寿命が足りずに途中でちぎれる、という心配から解放され、寿命を延ばす為に歌詞の文字列のなかに空白文字や飾りの文字をどれだけ入れればいいかを摸索する手間も省けます。

ただ、間奏や曲の終わりで、吹き出しを適当なタイミングで消したい場合もあります。その場合は、どうしても調整の摸索をすることになります。まず、早めに消したいチャットとその直前のあわせて3つぶん、あるいは3つのいずれかの、末尾の半角空白文字を取り払います。そうすると逆に早く消えすぎるという場合は、歌詞の途中に空白文字を足すなどして、吹き出しの幅に影響しない範囲で字数を水増しします。

インタラクションファイルの直接編集

インタラクションを効率的に編集する為に、また、チャットの性能を充分に出す為に、インタラクションファイルをテキストエディタ類で直接編集することをおすすめします。もちろん、一からすべて書く必要はなく、インタラクションメーカーで雛形を簡単に組み立てておいてから、設定値の文字列をテキストエディタで書き換える、という形になります。

インタラクションファイルの中身

インタラクションファイルの中身は、XML形式のデータになっています。どういう条件・どういう行動を設定しているかが、このファイルに記述されています。

「パートナーのインタラクションモーション一覧」のPDFファイルに掲載した内容と重複しますけれど、インタラクションファイルの中身について、簡単な例で説明していきます。

<Interaction name="">
	<Event trigger="T_ChatKeyword" keyword="こんにちは">
		<ActionGroup frequency="1">
			<Action name="A_Chat" message="ハロー"/>
			<Action name="A_Motion" motion="40226"/>
		</ActionGroup>
	</Event>
	<Desc type="Partner" text=""/>
</Interaction>

まず全体が、<Interaction>と</Interaction>とで挟まれています。このなかに、<Event>と</Event>とで挟まれたまとまりと、<Desc />1行とがはいっています。<Event>と</Event>とで挟まれたまとまりのなかに、<ActionGroup>と</ActionGroup>とで挟まれたまとまりがあり、そのなかに<Action />の行が並ぶという形です。単純な入れ子構造だ、ということが確認できます。行の左の空白(インデント)は、プログラミング分野での慣習で、入れ子構造が見やすいように整形しているだけのものです。インタラクションメーカーでファイルを生成すると、自動的にインデントが付されます。

この入れ子構造におかしなところがあったり、必要な記述が欠けていたり、インタラクションの仕様から外れた指定をしたりしていると、インタラクションが使えません。読み込み時に「インタラクションデータが破損した」という扱いになったり、インタラクションのリストに表示されなかったりします。慣れないうちは、「<」と「>」とで挟まれた部分をむやみに動かしたり消したりしないようにしましょう。たとえば、</Event>がひとつ抜けるだけで、読み込めなくなります。

<Action />のなかには、「name」や「message」や「motion」といった句がはいっていて、それぞれに、半角引用符(")で囲まれた文字列が紐づけられています。基本的には、引用符で囲まれたなかの部分のみを編集することになります。また、たとえば<Action name="A_Motion" motion="40226"/>の1行を、ほかの<ActionGroup></ActionGroup>のなかに移動させるとか、そういうこともできます。

直接編集の場合、メモを書き残しておきたいということがあります。その場合は、「<」と「>」とで挟まれた部分の外側のどこかに、「コメント」の形で書くとよいでしょう。文字列を「<!--」と「-->」とで挟むとコメントになります。この部分は、インタラクションの処理にまったく影響しません。ただし、インタラクションメーカーでファイルを上書き保存すると、コメントが消えるので気をつけましょう。次の例は、「motion="40226"」がなにを指すのかを、あとから見て理解しやすいように、コメントで書いています。

<Action name="A_Motion" motion="40226"/><!--手を振りながらあいさつ-->

「motion="40226"」の「40226」が、「パートナーのインタラクションモーション一覧」のPDFファイルのなかで「モーションID」と呼んでいる値です。モーションIDについては、PDFファイルのほうを参照してください。


詳細は省きますけれど、半角の「&」「<」「>」「'」「"」の5文字については、実体参照で記述しないと、表示されない場合があります。インタラクションメーカー内でこれらの文字を記入すれば、自動で実体参照に変換されます。

<Interaction>のなかの「name=""」や、<Desc>のなかの「text=""」の部分は、省略しても機能します。引用符で囲まれた文字列は、それぞれ、インタラクションメーカーの「インタラクション名」「説明」の内容に相当します。


インタラクションファイルは、「UTF-16LE」の文字エンコーディングで保存されます。「UTF-8」のファイルも読み込めます。「シフトJIS」などの場合は文字化けを起こします。「UTF-16BE」は読み込めないようです。

もし、編集したファイルがインタラクションリストに出ない場合は、文字エンコーディングも確認してみましょう。

改行コードは「LF」で保存されます。「CR+LF」でも「CR」でも、読み込みは可能です。「CR」の場合、チャットキーワードなどに指定した文字列のなかの改行が、反映されません。

また、ファイル名が全角10文字(半角20文字)を超える場合も、リストに表示されません。

実演動画

演奏会に足繁く通っているひとであれば、どこかで一度はインタラクション歌詞出しの「現場」を見たことがあるかと思いますけれど、そうでないひとには、本稿のいろんな画像を見てもなおピンとこないかもしれません。やはり、動画があったほうがイメージしやすいと思えますので、載せてみました。童謡の「あめふり」での実演です。

プレイ環境の都合で、多少カクカクした動画になっていまして、その点は御容赦ください。

「あめふり」インタラクション歌詞出しの実演.mp4[MP4]

普段のわたしは、メッセージログウィンドウのほうでチャットを入力しています。今回は動画用なので、画面がごちゃごちゃしないように、ということでチャットウィンドウを使いました。

この動画では、メロディの頭と合わせぎみに歌詞を出している感じですけれど、演奏会などで自分の曲を弾くときは、もうちょっと前倒しで歌詞を出します。メロディの頭より2拍ほど早めに、という意識です。たとえばカラオケの字幕も、メロディに先んじて歌詞を表示するわけで、もし同時のタイミングで表示されたら不親切になります。また、ひとが多いと遅延が起きやすいから、というのもあります。

あまりタイミングが前のめりすぎても混乱しますから、不自然さを感じさせないタイミングで出したいところです。ただ、通信が絡む以上、自分の環境では音とチャットのタイミングとがぴったりであっても、ほかのプレイヤーにはそうではないことがあります。つまり、音とチャットの完璧な同期は夢物語です。とにかく、若干早めに、というのを心がければ充分でしょう。


動画で用いたのとおなじインタラクションファイルを配布します。雛形づくりの参考にするなど、自由に御活用ください。(歌詞もパブリックドメインです)

パートナー用とペット用、2つのxmlファイルを入れています。ペット用のほうは、不要な指定を省いただけで、パートナー用との違いはほとんどありません。

わたしは、チャットキーワードに「/パクパク」を採用しています。これも適宜、差し替えてください。(まだ執筆当時は、「パクパクエモーション」が登場していませんでした。いまも、自分の持ちキャラには、そのエモーションを習得させていません。)

ほかの工夫としては、インタラクションの最初と最後にテロップ表示を含めています。動画のはじめの「「あめふり」インタラクション歌詞出し例」という文字がそれです。テロップは、インタラクションを出している本人にしか見えません。曲名や注意点を、最初のインタラクションのテロップ表示に書いておいて、演奏直前かイントロの間にこれを出し、インタラクションが正常に適用されていることを確認するようにしています。ホッチキスに針を装填したときに空打ちしておくみたいな感じです。末尾のテロップの「*おわり*」も、確認用のつもりで入れてあるのですけれど、実際に運用してみると、さして必要なかったりします。動画では、ウィンドウ表示を消している影響で、このテロップは画面には出ていません。

いろんな工夫をさらに加える余地があります。演奏終了後の「ありがとうございました」などのあいさつに対応するインタラクションを仕込む、というのもよいと思います。