マビノギのチャットと歌詞出し

オンラインRPG『マビノギ』において、歌詞や演劇のセリフのような文を、すばやくきれいにチャットする方法と、それに関する知識を紹介しています。マビノギMMLガイドの記事のひとつです。

インタラクションの機能を用いてペット・パートナーにしゃべらせる手法について紹介している、マビノギのインタラクションと歌詞出しのページの、前提知識となるような内容になっています。インタラクションのほうが本篇といえますので、興味のあるかたは、ぜひあわせてお読みください。

「用意したテキストの呼び出し」の項目など、いくつかの記述は、マビノギに限らず、似たようなチャットシステムのゲームにも広く当てはめられる内容かもしれません。

本稿の画像で示している歌詞出しの実践例は、いずれも、わたしの作品の歌詞を使っています。

自キャラのチャットで歌詞出しをしているようすのスクリーンショット。吹き出しのなかに3行の文字列:「┃ 真新しい時をめくり」「┃ まばゆい光 すべての源に会おう」「┃ これからの日々に 幸多かれ」
画像1:ふつうの歌詞出しチャット

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

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

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

用意したテキストの呼び出し

演奏をしながらチャットで歌詞出しをする場合、直接タイピングしていては、仮にゆっくりした曲であっても、おそらく追いつかないでしょう。ですので、事前に用意した歌詞テキストを、演奏の進行に合わせて順番に流し込むことになります。

ゲームによっては、定型文をあらかじめ登録しておき、かんたんな操作で素早く呼び出してチャットできるような仕組みを用意しているものもあります。マビノギにはそういう機能がありませんけれど、いろんな工夫をする余地はあります。「ふつうのコピーと貼り付け」「IME辞書登録」「クリップボード管理ソフト」の3つの方法を紹介します。

ふつうのコピーと貼り付け

テキストエディタ、メモソフト類に歌詞を書いておいて、そこからチャットへ1行ずつ順番に貼り付けていく、というのが、原始的でわかりやすい方法です。ワンクリックで1行全体を選択できる機能を持つソフトを使うとよいでしょう。

わたしの場合、演奏前の曲紹介や合奏の段取りの説明を、この方法で出しています。アドリブを利かせる必要がない部分については、(出番を待っている間に)あらかじめ用意しておくわけです。

文言の加筆修正が素早くできるという点で、後述の方法に対して優位性があります。しかし、時間の猶予のない場面では、操作ミスや遅れが起きやすい方法でもあります。なにより、アクティブウィンドウを頻繁に切り替えないといけない点が厄介です。

IME辞書登録

ポピュラーなやりかたは、日本語文字入力ソフト(IME)の辞書登録機能を使う、というものでしょう。演奏の進行とともにタイピングしても充分間に合う程度の短い文字列を、歌詞に変換してチャットする、という手法です。

「よみ」の欄に「101」、「単語」の欄に「┃ 真新しい時をめくり」という文字列。以下「102」「103」などの「よみ」にそれぞれ文字列を紐づけている。
画像2:「Google 日本語入力」の辞書ツールの編集画面

たとえば「101」「102」「103」というような、素早く入力できる文字列を、歌詞の1行目、2行目、3行目の文字列に変換できるように登録しておいて(画像2)、演奏中に「101」と打って変換することで歌詞の1行目を呼び出すわけです。

アクティブウィンドウを切り替える必要がないぶん、前述のコピーと貼り付けの方法よりも楽です。ただし、順番をうっかり飛ばしたり、タイピングミスをしたりする可能性もあります。入力文字列と変換後の文字列の対応表のようなものを、手許に用意しておくほうがいいかもしれません。

IMEは、システムの負荷が多少大きくても、ちょっとやそっとではフリーズすることなく動作するように設計されているはずなので、(実際にそうであれば、)次に述べるようなソフトを駆使するよりは、安心感があるかもしれません。また、コピーと貼り付けの場合、クリップボードへのアクセスに失敗するエラーが起こることがまれにあるので、IMEで変換して呼び出すなら、そういう事故を気にしなくて済みます。

クリップボード管理ソフト

わたしの採っている方法は、クリップボード管理ソフトを使ってのコピーと貼り付けです。複数のデータを一度に保持できないクリップボードの不便さを解消するのが、クリップボード管理ソフトの主な役割です。いろんなフリーソフトがあるので、好みのものを使えばいいと思いますけれど、わたしが用いている「clibor(外部リンク)」というソフトを例に、以下説明していきます。

「clibor」の機能のひとつに「定型文」というのがあります。同じ文をしょっちゅう貼り付けることがあるなら、この機能で素早くクリップボードに転送すれば、コピーの手間が省けます。歌詞出しの用途には、「複数の文字列を順番に貼り付けられるようにする」必要があり、それには「FIFOモード」が適しています。(「先に入れたものから順に送る」ことをFIFO、「後に入れたものから順に送る」ことをLIFOと呼びます。)

テキスト入力エリアに「<$CLB_TFIFO/><$CLB_DT>┃ 真新しい時をめくり</CLB_DT><$CLB_DT>┃ まばゆい光 すべての源に会おう</CLB_DT>」(以下略)という記述。
画像3:「clibor」の定型文の編集画面

FIFOモード用定型文の編集画面のようすを、画像3に示しました。

冒頭に「<$CLB_TFIFO/>」タグを置き、以下、一度にチャットするひとまとまりを、「<$CLB_DT>」タグと「</CLB_DT>」タグとで挟むだけです。これで、挟まれた文字列が上から順番にクリップボードに送れるようになります。この例の場合、定型文を呼び出すと、まずクリップボードに「┃ 真新しい時をめくり」が送られます。これを貼り付けると、すぐさま自動で「┃ まばゆい光 すべての源に会おう」がクリップボードに送られる、という仕組みです。つまり、コピーする作業をソフトに肩代わりさせ、貼り付け操作のほうに専念できるわけです。

歌詞出しをするときになったら、その定型文を選んでおいて、あとはチャットにひたすら貼り付けていくだけです。

定型文の登録が、前述のIME辞書を用いた方法でいうと辞書登録の作業に相当します。いくつも定型文をつくっておけますから、たくさんの曲の歌詞を常時用意しておけます。

ひとによって使いこなしかたが大きく変わるタイプのソフトだと思います。ここに載せた以外の方法もあるでしょうし、設定をいろいろいじりながら試してみてください。

チャットの整形

短時間に続けてチャットすると、最大で3つぶんのチャット内容が、ひとつの吹き出しのなかに収まります。このときの縦のつながりかたに気を配った文字の配置を行なうこと、これがチャットの整形です。

従来のチャット整形例

画像4:中央揃えで歌詞出しチャット

自キャラのチャットに改行は入れられませんけれど、空白文字を駆使することで、たとえば画像4のような中央揃えに整形することもできました。こうした文字組みを突き詰めると、縦書きや、アスキーアート的な表現もできたのです。わたしも見よう見まねで〈アスキーアート歌詞職人〉のそういう技を身につけ、実践していたのでした。過去形で書いている理由は次項で述べます。

この(従来の)フォントは、半角空白4つぶんの幅が全角空白1つの幅に相当する、というちょっと変わった仕様です。等幅フォントではないので、「罫線できれいに囲む」ことさえ困難が多々あります(1ドットのずれに対応できない)。チャットを整形するコツはこれといってなく、ゲーム内で実際に表示させながら、地道に手直しをして仕上げていました。

冒頭と末尾の空白文字は、チャットログには現れず、吹き出しにのみ反映されます。字下げの為に空白文字をたくさん入れても、チャットログが極端に読みづらくなるということはありません。

画像5:縦書きを模した歌詞出しチャット

画像5のような縦書きは、「時  部さ間落染屋みもちみ中し」というような文字列を、空白文字をうまく混ぜて位置を揃え、複数つなげることによって、縦方向に「さみしさが」「部屋中に」……と読めるようにしています。

ただし、チャットログ上では、支離滅裂な文字が散乱してしまい、読み取りようがありません。後発の、インタラクションを用いる手法と同じく、吹き出しにすべてを賭けた歌詞出しといえます。付言すれば、縦書きはインタラクションによる歌詞出しと相性がよいものといえました。

画像6:右下への流れを意識した歌詞出しチャット

中央揃えはきれいですけれど、必ずしも読みやすいわけではないので、画像6のような、文字が追いやすい組みかたも重視していました。

フォントサイズ可変によるチャット整形への影響

ところが、2020年9月16日のアップデートで、フォントサイズの設定が追加され、吹き出しのなかで文字列がどのように折り返しされるかが、その設定によって変わるようになりました。サイズのみならず、フォント自体も切り替わる仕様になっています。

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

アップデート直後に、ツイッターにて公開した比較画像を、再掲しました(画像7)。画像の吹き出しは、インタラクションで出したものですけれど、ふつうのチャットでも事情はおなじです。このように、文字サイズを大きくしても吹き出しの横幅はもとのままであり、折り返しの位置が変わります。フォントが切り替わると、各文字の横幅の長短も別物になってしまうので、上下のつながりかたが崩れてしまいます。

「どのプレイヤーでも吹き出しの文字組みが同じに見える」という前提がなくなっては、チャットの整形は形無しです。そういうわけで、チャットを見ているひとに特定のフォントサイズ設定を強制でもしないかぎり、前述のようなチャットの整形は、もう披露できなくなりました。

「全角八文字を超え(折り返し)ると折り返される」「12345678(折り返し)90」
画像8:フォントサイズ20のときの吹き出しの折り返し

フォントサイズ20(最大値)の吹き出しでは、画像8のように、全角8文字までなら1行に収まります。各行をつねに全角8文字以内にとどめることで、すべてのフォントサイズで折り返しを排除することができます。実際には、全角8文字ぴったりが限度ではなく、半角文字を1、2文字ほど加える余裕があります。

フォントサイズ12以上の大きいフォントの幅を見てみると、ひらがな・全角カタカナ・漢字は、共通の幅を持っています。全角英数字・全角空白文字は、カナ漢字類より少し幅が狭くなっています。半角文字や記号類は、幅がばらばらです。半角相当の幅になる全角記号類もあります。

フォントサイズ11と12以上とで上下のつながり具合が変わるのは、どうにもなりません。記号類で飾りつけをしたり、余白をつけたりすると、それぞれのフォントサイズでの見た目に統一感を持たせることが難しくなります。

各行を8文字以内に収めるには、8文字以内でチャットし続けるか、改行文字を挟まないといけません。ふつうのチャットで改行文字は使えませんけれど、インタラクションを用いた歌詞出しなら改行が簡単に入れられるので、その強みを活かした整形手法を、いまは用いています。これについてはマビノギのインタラクションと歌詞出しのページの「全フォントサイズ対応の為に」の節で説明しています。

次に紹介する「半角空白文字による改行」の技を使えば、自キャラのチャットでも、全フォントサイズでおなじような文字組みにできます。ただし、若干めんどうですし、文字数の制限がきびしめです。


フォントサイズ12以上のときのフォントについてのこまかい話は、マビノギに関する雑多な調査資料のページの、「大きいフォントの奇妙な仕様」の節にまとめています。「大きいフォントで表示されないチャットの文字」以外は些末な内容ですけれど、チャットの整形に関わる話もあります。

半角空白文字による改行

やや特殊ですけれど、整形に役立つかもしれない小技を紹介します。

吹き出しのなかでチャットの文字列が折り返され、(見た目の)行末が半角空白文字(の連なり)になる場合、その半角空白文字(の連なり)は、吹き出しの横幅と次の行に影響しません。

いい換えると、折り返されない限りは、半角空白文字を増やしたぶんだけ吹き出しの幅がふくらみますけれど、折り返される長さになると、画像9の左の吹き出しのように、行末の半角空白文字のひとかたまりが省かれた恰好で表示されます。

画像9:長い半角空白による疑似改行(左)と長い全角空白による行の折り返し(右)

一方、画像9の右の吹き出しは、全角空白を複数並べて、折り返した次の行頭にふつうの文字がちょうど置かれるようにしたものです。もちろんこの場合、全角空白文字が1つ多くても少なくても、表示結果が異なります。

半角空白文字による疑似的な改行をうまく使えば、(インタラクションでのチャットを用いずとも)フォントサイズに依存する折り返しを防ぐこともできますけれど、半角空白文字をかなり入れないといけない点が難です。文字数に制約がかなりかかるので、一度にたくさんの字数を出したいケースでは使いづらいといえます。

半角空白文字のこういう活用は、後述の「半角空白文字で吹き出しの寿命を延ばす」方法でも登場します。

チャットの不発

半角換算で11字以上のおなじ文字列を短時間に4回以上チャットすると、『ネットワーク負荷を軽減するために同じ内容の発言は省略します。』というシステムメッセージが出て、そのチャットが不発となります。また、完全一致していなくても、半角換算で20字以上の冒頭一致または末尾一致があると「同じ内容の発言」とみなされるようです。

とくに歌詞の場合、フレーズの繰り返しが現れやすいので、チャットの不発を防止したいときは、その文字列の冒頭と末尾に、空白文字などの目立たない文字を加えることで変化をつけるのが効果的です。

なお、ごく短い間隔で4回以上チャットすると、どんな文字列であれ『短時間に複数のメッセージを入力する事はできません。』というシステムメッセージが出て、不発となります。チャットの間隔には、なるべくゆとりを持たせましょう。2秒に1回以下のペースでのチャットなら、ほぼ安全だと思います。

このほか、「許可されていない単語」が含まれている場合も、チャットが不発となります。単純な部分一致判定なので、思いもよらぬところで引っかかることもあります。

表情エモーション

チャットに特定の文字列(表情エモーション文字列)が含まれていると、発言したキャラの表情が一時的に変化します。たとえば、「(笑)」「(笑う)」「^^」の文字列の場合、笑顔になります。

画像10:チャットで表情エモーション

「(笑)」「(笑う)」のような、半角かっこで囲むタイプの表情エモーション文字列は、チャットの文字内容として表示されません。また、「(笑)」や「(笑う)」のみをチャットした場合は、画像10のように、キャラの吹き出しに「…」が出るだけで、チャットログに発言として残りません。吹き出しが消えると、表情がもとに戻ります。

ショートカットキーに割り当てられている「エモーションプレイ」もほとんど同じですけれど、「エモーションプレイ」は、吹き出しのツノのところが画像10と異なり、泡状の形になっています。このタイプの吹き出しは、自身がいま出している吹き出しを消す効果があります。一方、表情エモーション文字列をチャットした場合、すでに出ている吹き出しに付け足される形で「…」が出ます。

表情エモーションの固定

半角かっこで囲むタイプの表情エモーション文字列には、さらに特徴があります。任意個の同一の表情エモーション文字列と、半角空白文字1つのみからなるチャットをすると、表情を固定できます。このとき、吹き出しも現れません。たとえば、「(笑) (笑)」というふうに、半角空白文字をおなじ表情エモーション文字列で挟みます。

ここで注意点があって、チャットウィンドウ(画像11)とメッセージログウィンドウ(画像12)とでは、すこし仕様に違いがあり、チャットウィンドウを用いてチャットした場合は、冒頭と末尾の空白文字が無視されます。メッセージログウィンドウでは「 (笑)」や「(笑) 」でも表情固定ができますけれど、チャットウィンドウでは単なる「(笑)」としてチャットされてしまいます。「(笑) (笑)」ならば問題ありません。

画像11:チャットウィンドウ
画像12:メッセージログウィンドウ

空白文字を2つ以上入れると、からっぽの吹き出しが出てしまいます。この場合も、チャットログのほうに痕跡は残りません。

なお、固定された表情は、なにかスキルやアクションを起動したり、べつのチャットを出したりすると解除されます。

表情エモーション文字列の一覧

確認できたかぎりの表情エモーション文字列を、リストとして次にまとめました。同じ表情エモーションに紐づけられている表情エモーション文字列は、全角空白で区切って列挙しています。

「(*^_^*)」のかっこは全角です。

複数の表情エモーションを同時に呼び出すことはできず、その場合、リストのなかで上に載せているものが優先されます。たとえば、「(普)(笑)」も「(笑)(普)」も、「普」の表情エモーションが採用され、チャットには「(笑)」がそのまま出ます。同様に、「(^^♪」と書いたときに「笑」の表情エモーションが出るのは、「♪」より「^^」のほうが優先されるからです。

吹き出しの維持

チャットの文字列が短いほど、吹き出しはすぐ消えます。続けてチャットして、ひとつの吹き出しに複数のチャットを含めると、吹き出しの寿命はそのぶん延びます。これは、インタラクションでペット・パートナーに出させる吹き出しでも同様です。

自キャラで歌詞をチャットするなら、チャットログに残って読み返せるので、吹き出しがすぐに消えても問題ないように思うひともいるでしょう。でも、歌のメロディがまだ続いているのに、歌詞の吹き出しが先に消えてしまうのは、なんとなく落ち着かないものです。チャットログに歌詞を残せたらそれでいい、とするのならば、べつに演奏と同時進行で発言しなくても、極論、先にまとめて全部並べてしまえばよいわけです。

わたしは、自キャラのチャットで歌詞出しをしていたころから、なるべく吹き出しが途切れないようにしていました。吹き出しがずっと出っぱなしになっているほうが読みやすいし、吹き出しがつながらず途切れると「チャットの整形」の効果が損なわれるからです。インタラクションを使うようになると、なおさら、吹き出しの維持が大事なことになりました。そもそもインタラクションのチャットはチャットログに残らないので、できる限り長く文字を出しておかないと、読むのが追いつかなくなるおそれがあるからです。

早口な歌なら、歌詞をどばどば出すことになり、吹き出しが途切れるひまがなかなかありません。一方、静かな歌で、一句一句を、ぽつりぽつりと唄うようなものだと、吹き出しを維持する為に、空白文字をたくさん入れて、吹き出しの寿命を延ばす必要が出てきます。

間奏の部分で吹き出しが消えるのは、べつにかまわないのですけれど、間奏が終わった直後の歌詞出しで、吹き出しの寿命が足りずにつなげられないことがままあります。その対策として、たとえば「 ********」というような、飾りの文字だけのチャットを直前にひとつ挟む、ということをよく行なっていました。吹き出し内の文字数が多いほど吹き出しの寿命が延びるので、間奏直後の最初の歌詞の段階で、あらかじめ文字を多めにチャットしておくのです。これは唄い出しのときにもいえることです。ただ、唄い出しの前には曲名表記などを出せばいいから、飾りの文字で水増しをする必要はあまりありませんでした。

こういったアプローチとは逆に、直前の吹き出しを消して、現在の歌詞だけをつねに吹き出しに出したい、という場合には、その都度、エモーションプレイ(「…」の吹き出し)をチャット直前に挟む、という技があります。間奏のときや演奏開始直前などに吹き出しを消したいときにも、これが有効です。

吹き出しの寿命の法則

1文字だけチャットすると、3秒ほどで吹き出しが消えます。5文字だと約4秒、10文字だと約5秒です。一度にチャットできる最大文字数(半角文字で100文字)の場合は約23秒。こうした実測をもとにすると、おそらく次の式が成り立つように見えます。

文字数のカウントは、全角・半角を問いません。

50文字ぶんのチャットを出す場合、1回でチャットすると13秒で吹き出しが消えますけれど、25文字ずつ2回に分けて、1つ目のチャットの吹き出しが消える寸前に2つ目を出してつなげると、16秒弱の寿命になります。25文字の場合の寿命が8秒ですから、ほぼ2つぶんの長さになっています。間を空けずに2つ目を出した場合、14秒ほどの寿命になります。25文字ずつでなくても、どのように分割しても同様です。ちなみに、3分割すれば、さらにもうすこし寿命が延ばせます。

吹き出しのなかに出ている内容より前のチャットの分量は、吹き出しの寿命に影響しないようです。100文字のチャットに続けて、1文字のチャットをすぐに3回並べた場合、吹き出しの内容が1文字のチャットのみになった時点で、100文字のチャットの本来の寿命(23秒)は関係がなくなり、吹き出しはすぐに消えることになります。


表情エモーションを出したときの「…」の吹き出しの寿命は、実際の入力にかかわりなく、3.6秒くらいで、「(笑)」などの3文字と同等のようです。

ちなみに、お絵描きチャットの吹き出しは、約13秒間表示されます。

半角空白文字で吹き出しの寿命を延ばす

「半角空白文字による改行」の項に書いたとおり、吹き出しのなかでの行の折り返し部分に半角空白文字がある場合、その半角空白文字は吹き出しに表示されません。

省かれるのは表示の上だけで、吹き出しの寿命には、半角空白文字のぶんもちゃんと計算に含まれています。

だから、短い文字列のチャットでも、末尾に半角空白文字を大量につけておけば、吹き出しに不自然な余白をつけることなく、吹き出しの寿命をその半角空白文字の数だけ延ばせます。

行が折り返されるくらいの長さでなければ、半角空白文字による余白ができてしまうので、実際に表示させてみて、(フォントサイズが11でもそれ以上でも)余白ができないような長さに調整することになります。

自キャラのチャットでも効果があるとはいえ、文字数の都合で使いづらい場面も多いと思います。インタラクション向けの手法といえますから、実例に即した説明は、マビノギのインタラクションと歌詞出しのページのほうに載せています。

その他の補足

ほかの節に書ききれなかった、チャットの仕様などです。

なぜ歌詞出しをするのか

技術と知識の紹介だけでは片手落ちの気がするので、歌詞出しをすること自体に対する考えやスタンスを書いてみます。

なぜ歌詞出しをするのか……ほかの楽師にも尋ねてみたい問いです。歌詞出しのモチベーションをどこに置いているかというのは、きっと、各人さまざまなのだろうと思います。

わたしの場合でいうと、自作曲の歌詞を出すのは、もちろん歌詞を含めて聴き手に届けたいからですし、そのほうが曲のカラーや特徴がより明確に示せます。「こういう思いで・こういうきっかけで生まれた曲です」というような前説を述べる代わりにもなります。自作曲の場合はちょっとだけでもそういう解説、いわば本人コメントが添えられていないと、とっつきが悪いという面は否めません。そういう意味でも、歌詞があれば感情移入のきっかけが増やせるのではないかと思います。

ただ、よく知らない(または初めてふれる)曲のメロディを聴きながら、歌詞の文字表示を追いかけて、頭のなかでぴたりと両者を結びつけるというのは、無理とはいわないまでも、けっこう難しくめんどくさいことで、音符の数が合わないな、とか、いまどこ唄ってるのかわからないな、とかいうことになりがちです。

実のところ、音楽を届けるという観点からいうなら、文字による歌詞出しなんていうのはむしろ贅肉、じゃまなものではないか、という懐疑的な気持ちもあるのです。さりとて、歌詞出しをまったくしない、というのもちょっと物足りなく思えます。

演奏システムを持たない別のオンラインゲームのプレイヤーイベントを覗きに行ったことが昔あって、そのとき、観客に動画のURLを伝え、合図とともに同時に再生してもらい、その動画の音に合わせる形で歌詞出しと振り付けをする、という出し物を見ました。そのようすを見ていてつくづく思ったのは、歌詞出しというのは別に、マビのような演奏システムのあるゲームのなかでのごくローカルな文化というわけではなく、チャットを用いた遊びかた・表現方法として、わりと普遍性があるんだなあ、ということでした。

そういう認識も持つようになったし、わたしのMML作品に歌もの系が増えてきたので、思うところはいろいろあれど、2016年あたりから、だんだん歌詞出しに積極的になってきました。2017年ごろになると、〈歌詞職人〉の技を盗んで「チャットの整形」に力を入れるようにもなりました。

2019年9月のインタラクション実装後は、マビノギのインタラクションと歌詞出しのページで紹介している方法を編み出して、ペットやパートナーから歌詞を出すようになりました。チャットログに歌詞が残らず、リアルタイムで吹き出しの文字を追いかけるしかないこの手法を、敢えて追求することにしました。

いろんな工夫で歌詞出しを「魅せる」ことも、おもしろさのひとつです。

タイミングを計ってチャットを連ねていく行為というのは、「演奏が始まったらあとは見てるだけ」なMML演奏のなかで、緊張感を取り入れるスパイスともいえます。本物の楽器演奏に比べたらごく単純な操作に過ぎないにしても、けっこう忙しく、どきどきするものですし、まさにいま演奏している、という手応えにもつながります。この実感が得たくて、歌詞出しに精を出しているという面も少なからずあります。