進捗 メッセージシステム編 Rev2 #01

 obake   message system   progress   python 

0071 へ内部バージョンをアップ

0071 は HTML5 でビルドしても動くので Android でも動くっぽいが、解像度の選択などちょっとした未解決部分もあるので Android 実機での動作は最近試してない。Android と HTML5 での動作は今の所後回しになっている。

0071 をベースに今週から 0072 を目指す。メッセージシステムの未実装部分を実装しながら、メッセージシステムの機能的な完成度をより高めたバージョンになる。

デジタル紙芝居としての機能は 0071 にも実装されているが、背景を変えたり Spine Animation を操作する機能などが未実装となっている。

画像を追加

オバケを一枚絵として改めて大きく描いて欲しかったので描いてもらっている。色数はだいたい5色程度でシンプルに塗ってもらって、細かい模様は潰れるからこれもなるべく大きくはっきりくっきり。

オバケイチゴ

オバケブルーたこ焼き

オバケじゃない、お面を被ったヒロイン

お面はいまいち顔が決まらないためリテイク中。角度はこれでいいけど、表情はまだいまいち弱い。主線をもっと太く、細かい描き込み減らしてシンプルに怒りの表情、はできない?表情二種類あってもいいけど、もう一回描き直しをお願いします。これ中途半端にリアルで気持ち悪いんよ。もうちょっとお面らしいお面であって欲しいわけ。

メッセージシステムの改修

メッセージシステムは最初 GMS のイベントとして GML で直接ハードコードしようと思っていたため単純な仕様だった。

しかし実際作ってみるときちんとした設計図が無いため他への流用が難しい。ステージごとに短い話を挿入したくても、その都度ハードコードしなくてはいけないから数をこなすためには不都合である。その都度デバッグもしないといけない。

テストを経てメッセージを処理するメッセージシステムが必要だねということになったが、問題は GMS/GML の文字列処理機能が貧弱なこと。

GML は正規表現なんか使えない改行など制御文字関連も変なローカルルールがある。

python と連携させよう

GMS/GML で文字列を処理する場合複雑な処理はしたくないからさせない。細かい部分は Python でやることになった。

手順としては HTML に似たタグ付きの文字列データをエディタで編集する。タグにはフォント指定とか位置とか色指定を含む。HTML に似せた独自形式はデータとしては無駄が多く冗長だけどデータの可読性は良くなる。あとから見ても誰が見ても数値や文字列が何のために利用されているのか一目瞭然である。

例えば

<Message.New ID=“TEST”,colour=“yellow”>文字列<Message>

このように書けば情報としては比較的分かりやすい、しかし情報としては無駄が多くデータを受け取ってから GML で処理する際に大変だ。

次に無駄を無くした記述例として

Message.New,TEST,font0,yellow,文字列

このように書けば無駄もなく、GML で配列データにするのも簡単。

しかしこのデータ形式を大量に編集する段階で可読性が悪いため単純ミスが多くなりかつ羅列されたデータの意味があとで確実に分からなくなる。

データを配列などデータ構造に格納する場合は単純な CSV 形式が良いけれど、元データを編集する際に表計算ソフトを使うのは作業効率が良くなかった。やはりコードを書く感覚でテキストエディタ上で作業をしたいならば HTML などでもある程度慣れてるタグ形式が良いという結論に。

GML の文字列処理機能は劣悪

GML にも文字列操作処理は最低限のものが実装されているが効率は悪い。独自仕様に頭をひねりながら動作テストのために毎回コンパイルするとか時間の無駄。だから Python と連携、高度な文字列処理は Python に任せて GML で処理する文字列操作は最低限で済むようにする。

具体的には HTML に似せたタグ付きのデータを書いてそれを Python に渡してパースし単純な CSV 形式に変換して GML に渡す。GML は受け取ったデータをデリミタで区切って配列データにするだけをやればいい。ついでに文字列としてのデータと数値としてのデータは区別がつきやすくなるようソートも行って、ここまでやれば GML の変態文字列処理でも簡単に扱える。作業従事者は好きなエディタを使って作業できる。デバッグも容易だ。

Python でタグ付きデータをパース処理する程度なら簡単に作れるから時間もかからない。正規表現が使えるのは強いし、Windows でも Mac/Linux でも作業環境は自由に選べる。

というわけで 0072 にパース機能を付けるため Python で処理を書くことになった。




次へ

前へ