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

 obake   message system   progress   python 

CSV 変換する Python Script は目処が立った

GML で書いた既存のメッセージシステムを大幅改修する必要も出てきて CSV 変換よりもソッチの方が厄介。

メッセージシステムの改修に取り組みながら並行作業で CSV 変換の完成度も同時に上げることに。現状だとスクリプト例文が少なすぎ、機能実装も少なすぎなので、結局必要に応じて両方に手を入れてる。

実装が必要な機能を羅列

操作待ち命令

  • ユーザからの操作を待つ ( Touch )

Wait.Touch ではタッチ系の命令で操作指定する。右クリックなどが指定できない。

<Wait.Touch SingleTap="TRUE"; DoubleTap="FALSE"; >

メッセージ系の命令

  • メッセージウィンドウの新規作成( New )
  • 指定メッセージウィンドウへテキスト送信( Send )
  • 指定メッセージウィンドウの破棄( Kill )
  • 全てのメッセージウィンドウを破棄( Vanish )
  • 指定メッセージウィンドウを画面外へ移動+破棄( Out )

  • 指定メッセージウィンドウを移動( Move )

( 今回は .Move の実装は無し、使う予定無い )

Message.Kill や Message.Vanish は消す時のエフェクトを指定可能。

現時点でnoonefadeoutの二種類のみエフェクト実装を完了、noone の場合は普通の PassThrough 処理となる。

<Message.Kill id="TEST@"; effect="noone"; >
<!-- エフェクトがない場合の指定として "noone" を使う -->

Message.Out は画面外へ移動させた後に時間差で破棄が実行される。移動させる方向を上下左右・四方向で指定する。

以下は実装済み

  • .New
  • .Send
  • .kill
  • .Vanish

実用性で言うとたぶんこれだけで足りる。

キャラクター表示系

  • キャラクタの新規作成
  • 指定キャラクタのアニメーション変更
  • 指定キャラクタのシェーダ変更
  • 指定キャラクタの位置変更
  • 指定キャラクタの破棄

背景

  • 指定した背景の表示A/背景の変更 ( Background.Push_A )
  • 指定した背景の表示B/背景の変更 ( Background.Push_B )
  • 指定した背景を非表示にする ( Background.Clear )
  • アニメーション背景の表示/変更 ( Background.Anim )

アニメーション背景表示機能実装は優先度低い。

背景について仕様を考えたが、GML は構造体を作れないので代用として GML のアクセサリを使ってもまだ管理効率が悪い。少々諦めの気分あり。

効率の面でいささか厳しい実装になるが同時に表示できる通常の背景指定はスロットを二つに限定した。この二つの背景に対してそれぞれ位置とエフェクトの指定ができる仕様。

<Background.Push_A x=-1.0; y=+1.0; pic="bk01_tokyo_statsion"; effect="dissolve"; ></>
<Background.Push_B x=+1.0; y=+1.0; pic="bk01_tokyo_under"; effect="noone"; ></>
<Background.Clear target="A"; ></>
<Background.Clear target="ALL"; ></>

Push は各スロットに対する専用命令で Update の役割も果たす。表示する画像/位置変更は Push を再送信。

Clear は個別にスロットを指定可能。全スロットを対象に Clear する場合はtarget=“ALL”; と指定。

エフェクト

  • 指定したエフェクトの発生

サウンド

  • 指定したサウンドの再生
  • 指定したサウンドの停止
( 配列の操作機能は今回不要なはずなので実装する予定は無い )

配列操作

将来的に搭載したい機能として

  • 指定した配列からデータを削除
  • 指定した配列と配列を合成する

スクリプト

  • スクリプトの実行を指定
  • スクリプトの終了を宣言

前回作ったメッセージシステムも上記機能大半は実装されているが、いきあたりばったりで作ったためソースが複雑で読みにくい。

GML でめんどうな文字列操作を駆使して作られ「無理してる感」強い。これも作り直せばかなり良くなる。

フロー処理

メッセージはフロー( 上から下へ行単位で順番に ) 処理される。

単純にメッセージを表示するだけなら忠実に一行ずつ処理していくだけだが、実際にはアニメーションの変更や背景の変更サウンド再生など、メッセージとは直接関係ない処理が間に入り、それらは実行後に即次行処理へ着手されなければならないから単純なフロー処理ではなくユーザ操作を待つ命令と組み合わせて使う必要がある。

シーケンシャル( 連続的 ) に処理が実行されるフロー型は実行手順が一本道なので動作を理解しやすいが、分岐したい場合は困る。

配列の操作機能はフロー処理の途中から別の処理をくっつけたり削除したりするためのもので、分岐するストーリー用の機能。

配列操作機能は今回実装する予定無しということになってる。

仕様決定後に改修作業開始

本当は JSON 形式を試すべきかなとも思う。

GML は文字列配列への操作が機能不足でしかも処理は重い。GML でパース作業をやろうとすると無駄が多く、CSV を扱うべきではないとすら感じる。JSON 形式は GMS でサポートされているので JSON だったら自動的に読み込める場合がある

言語としての Python はやはりパワフルでその Python と連携することで GML の弱点を補う。GML もバイナリオペレータやデータ構造など基本装備だからこれだけでも大したものなのだが、やはり文字列操作関連はすごく弱いのでその点は覚悟するべき。




次へ

前へ