「何か。」のゴースト製作記(11)(2002/03/03)
やったー文字列処理のバグ撲滅〜v(^o^) と、思う。きっとね(汗)
もー、スクリプト処理ルーチンは総取替えしました。って言うか、それを多分、8回ぐらいやったのではないかと。できるだけエスケープシーケンスを入れたくはなかったんですけどね〜、でも実際には親切にしようとするほど泥沼で(^-^;)
スクリプトソース中に '(' とか ')' とかがあっても制御記号として扱われる事になると思います。ただし、スクリプトコマンドの引数でなければ大丈夫かも。ネスティングしたときは '\(' とか記述しないとダメです。
って言うか、引数用の括弧記号を別のものにするとか回避策はなーんかうまく動作しないのよねぃ。どうしてだろ? まぁ折角、動いてるんだから文句言わずにこのまま行こうと思います(笑)
ブロック選択の「全部展開しないと気が済まない」動作もクリア。ダブルクリックでのメニューなんてスクリプトが長くなるだけに時間がかかってたんですが、今度からは必要最小限度で走ってくれます。
書式そのものを完全に変えたので、これまでのスクリプトは互換性が失われて動作しなくなり、フリートークやイベントリアクションなんか全部書き換える羽目に……まあ、良いけどね。
書式は以前の、'$変数.コマンド(引数)' というのを廃めて、'$コマンド(引数)' に変更。結局のところ前の書き方を利用する機会が殆ど無かったためです。
変数はコマンドでない文字列を使おうとすると自動的に格納・置換されるようにしました。変数を設定するには '$Vlue(雨雨降れ降れ)' また利用するには '$Value' で……といった具合。あー、すっきりした☆
文字列を返すコマンドや変数の類は '$' をプレフィックスに。あとまぁ今はまだ存在していませんが、値を返さない '@' をプレフィックスにしたステートメントも予約済み。
なので、本文中に '$' や '@' を埋めこむときには '\$' '\@' みたいにエスケープシーケンスするべし。
いつの間にやら '¥a' タグが対応されなくなってました。便利だったのに……。仕様がないので、自作アプリから呼ぶ必要があったりするんで自前で処理。スクリプトで置き返させる $FreeTalk コマンド、OnFreeTalk イベントの実装などなど。
ついでに本体に依存する さくらスクリプトのタグもスクリプトプリプロセッサで処理して依存度を下げる方向で。本体の作者どんはレイヤー化については懐疑的ですが(基本的に御意、と思ってるけど)、こちとらバルーンを乗っ取る計画がありますんで出来るだけ依存は避けなければ。
タグについては互換性をとる、という選択肢もありますがスクリプト処理の都合で互換性なんて考慮すると絶対エンバグしますからね(笑) とはいえレイヤー化は全く手付かずで、僅かに '%username' '%ms' などの基礎情報や辞書関連のみ対応。
'%ms' 系タグは今だにリクエストが2回くるバグが直ってない(^-^;) まぁ実害ないから誰も報告しないんだろうな……。手元で回避したらそれ以上は必要じゃないしねぇ。
スクリプトプリプロセッサの makoto.dll 移行は比較的すんなり行きました。
バルーン乗っ取りまで一気に構想が固まりつつあるんですが……いやしかし、ウィンドウを内蔵するとサイズがでかくなるので、そこいら辺が(^-^;)
で、統合デスクトップ環境ならばどうか?と。複数ゴーストを立ち並べて全部で同じバルーンを使うってのは? チャットの画面みたくしようと思います。
むろん基本的な到達目標は長めの会話での見やすさですが。
ついでに AVG ぐらい簡単に作れるように絵とか音とかイケたらなぁ、って考えて。
で、手抜きしようと思って NScripterを呼び出せないかとダウンロードしてきたんですが、これって完全にコントロール可能な仕様をしていないのです(^-^;)
最大の壁は、実行ファイルに引数でシナリオを指定できないこと。実行ファイルと同じフォルダにある 0.txt とかを読もうとする。これは辛い……
外部からコンソール的に利用できるような改造を要望しようか?と検討しまして、どう考えたって利用性低すぎて断念。自分で作ったほうがマシ。
で、サイズの問題を抱えてしまう……と。
あとまぁ、いちいちダブルクリックでメニューを呼ぶのもかったるいから、別のプログラムでタスクバーとしてメニューを登録してしまう方向でやってます。アプリランチャーとか OS のシャットダウン、そう言ったものはプラグインとして組み込み可能なように……ああっ。壮大過ぎて手がつけられないっ!(爆死)
プラグインについてはアレですね。ゴーストのカーネルに対して「このリクエストが来たら俺にも回してね」的なアプローチで考えてまして、イベントドリブンなアプリケーションも作れるのでは、とか。
Operation雛≠ノは DirectSSTP で自分自身にイベントを要求する(される)仕組みがあるので、その辺とあいまって結構色々とやれるんではないかと期待しているんですが。
15分に一回、コマーシャルを行う機能とか、起動直後に指定期間内だけ表示する機能とかも搭載。
しかしコマーシャル機能は15分間隔では相当うるさいコトが判明(笑) この辺、インテリジェントにする必要を感じました。
はて、ならばどの程度なら煩くないのか……? 一定時間内のフリートーク頻度に対する比か? 何回かに一回とかってフリートークとして喋らせるか?(それはコマーシャルというのか? 普通のトークじゃないのか?)
まぁ、音楽とか映像とかを統合すると俄然コマーシャルっぽくなるはずなんですが。いつになるんだよ。
そう言うわけで、スクリプトの再構築が完了していませんが、最新版という事で 0.2.8.71 をアップロード。スクリプト処理が大幅に変更されたのでマイナーバージョンが上がりました。
あとついでに正弓さんのシェルについても新仕様に合わせました。surfaces.txt に対応しています。
インストールの際には前の奴は消したほうが良いと思います……多分大丈夫のはずですが、どうなるか知れたものではありません(笑)
つづく。