suresuke製作日記

「Elfenis.」の製作日記、Gamemaker:Studioの小ネタなど。

【Elfenis.】システム - メッセージ【Gamemaker:Studio】

どうも、Twitterでは次の更新はないんじゃないかとか囁かれていましたが、なんと次の更新は今日でした。勝ち。

 

というわけで最近作成している部分である「メッセージシステム」について紹介していきたいと思います。メッセージウィンドウはそのゲームの特色というか、雰囲気がでますね。手が抜けないところだと思っています。

実際作っていて楽しい部分です。

f:id:sureiru-jwgs:20170109212815p:plain

昔作成していた「I wanna be the Stargazer」はこんな感じ。ただ、これだと距離が近いキャラクターが喋ったときに、どっちが喋ってるかが分からないことがありました。こういう形式をとる場合、メッセージの上に名前を表示させるとか、ある程度の工夫は必要なのかなという感じがします。

少し、製作的な話をしますと、このメッセージはstring_copy関数で文字列を順々に表示するように抽出しています。

最初は「(」次に「(こ」、次の「(ここ」、次に「(ここは」、次に…というように変数を利用して増加させていくことでメッセージ送りを再現していました。

ただ、この方法だと文章は全部くっついているので個々の色を変えたり、個々の文字をぶれさしたり、っていうのができないんですよね。

 

ということで、「Elfenis.」のメッセージシステムは文字列を1つ1つ分解して表示させるようにしました。こうすることで文章中にタグを設けることで個々の色の変更、メッセージのウェイト、文字のぶれなどを簡単に実装することができます。

今回実装した書式ルール

  • $  : 改行
  • ;x : 色変更。xで色を指定。gはc_green、rはc_red、など。
  • /n : 指定時間(n×20フレーム)メッセージをウェイトする。

例えば "わあ!/2 いい;rリンゴ;wですね!/2 $ぼくも食べたいです。$"

と入力すれば、画像のようになります。(ウェイトは画像ではわからないので後に載せた動画をご覧ください)

f:id:sureiru-jwgs:20170109215356p:plain

こういうメッセージの表示のさせ方は、難しそうで、言うほど難しくありません。

大雑把にやり方を載せると、

文字列を頭から1つずつ別の配列に代入していく。そのとき、個々の文字にパラメータを設定する。

この際、その文字がタグ(";" "/" "$")である場合、配列には代入せず、それぞれの設定を行う。例えば";"である場合、その後の一文字(色コード)を読み取り、その文字に応じてその後の文字に適応する色を変更する。"あ;rいう;wえお"という文字列の場合、「いう」は赤(r)、「えお」は白(w)になります。デフォルトは白なので「あ」も白です。"$"の場合は、その行をそこで終了とし、その後の文字は次の行となる、という風になります。

このアルゴリズムによって、個々の文字はそれぞれのパラメータを持ちます。color(その文字の色),wid(その文字までの幅),line(その文字が存在する行数),time(その文字でウェイトする時間)となります。

②個々の文字のパラメータに応じて一文字ずつ描画。

もっとスマートなやり方がありそうですが、とりあえず自分が実装したのはこんな感じです。これに加え、文字をぶれさしたり、文字をおっきくできたり、文字をホラーっぽく表示させたりというのを実装してみました。使う機会があるのかは分かりません…

ウェイトと色変更は絶対欲しい要素だったので、いい感じに実装できて結構うれしいです。これで、キャラクターの会話に臨場感が出せそうです。

 

今回、このシステムを実装するにあたって重宝した関数は、

です。string_copy関数は上で紹介したように、文字列を部分的に切り取ることができます。string_width関数は文字列を実際に描画したときの幅を知ることが出来ます。この関数は、関数実行時に適用されているfontで幅を測るので気をつけてください。

進捗動画

youtu.be

文章は適当です。それっぽい雰囲気だしてみたかっただけなので「あの男」が誰かは知りません。

 

以上になります!お読み頂きありがとうございます。

また、次の記事で!

はじめに。

明けましておめでとうございます。suresukeです。

ゲーム製作のモチベ維持のためブログをやってみることにしました。

飽き性なので、そもそもこのブログのモチベ維持ができるかどうかは分かりません…

 

はじめに

とりあえず、このブログでやっていきたいことは主に、

  • 製作中ゲーム「Elfenis.」の進捗報告
  • Gamemaker:Studio(GM:S)についての小ネタ

です。

ひとつめの製作中ゲームの進捗報告は、Twitterのほうでたまに呟いているのですが、「文章として見やすい形で残したい」っていうのと「Twitterだと伝えられる情報量が少ない」っていう理由で、主にこっちのブログで自由に書けたらいいかなと思っています。

一応Twitter

twitter.com

ふたつめのGM:Sの小ネタについては、日本語でのGM:Sに関する情報があまりに少なく、そのせいで日本人がゲームエンジンを選ぶ上で手を出し辛いのでは、と思っているのでなにか少しでも助けになれる情報を載せられたらいいなと考えています。適当な記事、またはTwitterにて質問して頂けると、ここでそれについての記事を書きます。多分。

 

開発環境

パソコン

ソフト

公式サイト:

www.yoyogames.com

人生の3分の1ぐらいを共にしているゲームエンジンです。昔はこれの旧バージョンであるGamemaker 8.x系を5年ほど使っていました。Gamemaker 8.x系とGamemaker:Studioの違いなんかもそのうち記事にしたいですね。

最近、Gamemaker Studio2(GMS2)なるものがBetaリリースされたみたいですが、UIと操作感が未来すぎてとりあえずはGM:Sでいいや、ってなってます。慣れればすごい便利なんだろうな感はあります。

 

公式サイト:

www.aseprite.org

Steam:

Aseprite on Steam

ドット絵に特化したイメージエディタです。GM:Sは標準イメージエディタにレイヤー機能がなく(GMS2では実装されたらしいです)、ショートカットキーも変更できないので、重宝しています。この記事を書いた時点で1,480円しますが、その価値は十分にあると思います。Steamのレビュー99%好評ですよ、すごい。

 

公式に体験版があるので、購入を検討される際は一度試してみることをお勧めします。

 

とまあ開発環境についてはこんくらいです。音楽は作れないので、素材サイトさんに力をお借ります。

 

おわりに

ここまで読んでいただき、ありがとうございました。これが最初で最後の記事にならないように、出来る限り進捗報告はしていきたいなと思っています。よろしくお願いします。