白玉餅 2023/08/15 17:45

状態異常とメッセージログを作った

シナリオを書くのが嫌すぎたため、プログラム制作に逃げました。
今回は状態異常とメッセージログの機能を作りました。

▼状態異常


▼新規メッセージ表示処理

状態異常

かなり変化球な実装なのですが、受けた状態異常はアイテム枠1個を占有します。
ネガティブな感情が結晶化した「ココライト(仮)」というカテゴリのアイテムという扱いです。
持ってるだけでよくないことが起こりますが、使用できず、投げることもできないため、効力が切れるまで苦しめられることになります。

▼ココライト

動画では「空腹」を獲得し、元気度の減少が早まっています。
何かしら食べ物を食べると「空腹」は消滅するので、追い詰められる前に食べるとよいでしょう。

逆にポジティブなものも実装する予定です。
「元気」みたいなやつ。
今のうちに感情を表す語彙収集しておこうかな。

メッセージの表示、履歴の閲覧

メッセージ表示

表示させるメッセージ全てが、プレイヤーにメッセージ送りさせるタイプだとあまりにテンポが悪いです。
なので、画面左下に一定時間表示させるタイプのメッセージ表示機能を実装しました。

▼アイテム獲得如きでメッセージ送りさせたくない


▼短い会話でも使えそう

メッセージ閲覧

一定時間で消すということは見逃すリスクも大きくなるわけで……
もちろんいつでも見返せるようにしました。

▼履歴表示

雑談

制作中の苦悩を書き殴ります。
※熱がこもっており、多少口が悪くなります。それと、ちょっと長いです。

ログの処理作っていた時の話なのですが、過去の履歴を表示しようと思ったら今までのメッセージをどこかに保存する必要がありますよね。当たり前の話なんですが。

一番最初、メッセージをテキストファイルに保存してました。
履歴を表示するときにこのテキストを読めばいいわけですね。
……と思ったら、なんかうまくいかないんですよ。

\c[2]てすと

こんなメッセージを保存しようとします。
「\c[2]」はウディタ(僕が使っているゲーム制作ツール)では「以降の文字を赤くする」意味の特殊文字として扱われます。
じゃあウディタの外のテキストファイルに持ってきたらどうなるか?
ウディタ専用の文字なんだから読まれないのは当然として……

・・ ・・・・てすと

こうなります。たぶん環境によって見え方も変わります。困ったね。
メッセージ履歴表示時にも文字色を反映させる夢は潰えました。
他にもアイコンや画像も特殊文字で表現しており、これらも反映できないことになりました。なんと味気ないことか。
……いや、待てよ?
ウディタ側で特殊文字として認識されない、自作の特殊文字作ればよくない!? 僕天才!

が、これがなかなかうまくいかないんですよね。

  • 保存したいときに「\」→「@」に置換
  • 表示したいときに「@」→「\」に置換

みたいな単純なことやってもダメでめちゃめちゃめんどくさいことがわかりました。

▼わかる人用の補足
1回の文字列操作で特殊文字1個完成させるように書かないと「\」以降の文字は消えます。
「\c」の文字列に「[2]」を連結しても無駄です。
半人前の特殊文字は消滅します。

「\c[2]」の例で言うと、以下のような方法で作る必要がありそうです。

  • 「\」は「@」に置き換えて表記することにする。 例)@c[2] と書く
  • 「@c[2]」をログに保存。
  • 文字列操作の「1文字切りだし」を利用して「c[」を読んで、\c[]に変換する必要があることを認識する。
  • ]を読んで、[]に挟まれた文字色ID「2」を認識する。
  • 1回の文字列操作で「\c[2]」を生成する。 ←ここ重要

これを必要な特殊文字全てでやります。
\img[](画像)、\icon[](アイコン)、\E(フチ付き文字)……全部やりましょうね。
いやじゃ。

▼以下つづき
お茶を飲んで冷静になったところでようやく気付きました。
「ウディタ側の文字列変数に保存すればよくない?」
そうです、ウディタ側では特殊文字は特殊文字として保存できます。
そらそうよ。当たり前。バ○なんでしょうか。半日溶けました。
※「\v[0]」などの数値に変わるものは別です。念のため。

今回の苦悩はいずれ「文字をデコった文章を他人と送受信する」機能を作るときに役に立つでしょう。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

月別アーカイブ

限定特典から探す

記事を検索