更新履歴

ζ



●メールアドレス変更のお知らせ。
  • 新しいのは「takoあっとxqてんchuてんじぇーぴー」。
  • これまでのアドレスは使えなくなります。
st2ss 03/10/11
  • SSTP/2.0はまだ
  • ソース
  • 置き換え系はともかく話者変えと改行は便利だと思う
  • 落ちてわかる日記CGIの便利さ
  • 今日の教訓;窓で動いてunixで動かない時はまず大文字小文字の違いを疑え
mako 03/08/29
  • テキストファイル中の任意の部分を取り出すSAORI。
scribble5 03/07/19
  • 画像ファイル名に拡張子以外のピリオドが含まれていた場合、正しく読み込めない問題を修正。
  • 抜き色表示と部分表示を組み合わせた際、範囲外の座標を指定すると不正落ちする問題を修正。


scribble4 03/07/09

 bltの拡張。
・blt x y filename l t r b

 画像の一部分だけを表示。

・blt x y filename r g b

 指定した色を抜いて透過表示。

・blt x y filename l t r b r g b

 両方。
 抜き色は遅いです。



里々Wiki

Wikiばなー

 小野さんに置いてもらってしまいましたですよ! 大感謝。



parallel 03/05/22

 同時喋りスクリプトを作るSAORI。
 (parallel,トッピロキー!,ウニョラー!)とか。
 3人いるなら(parallel,トッピロキー!,ウニョラー!,キロキローッ!)も可。



里々 phase 119 03/05/07
  • call

     カッコによる呼び出し時、引数を渡すことができます。
    *
    :足し算してみよう。
    2+5=(call、たしざん、2、5)
    53+79=(call、たしざん、53、79)
    
    @たしざん
    (han2zen,(calc、(A0)+(A1)))
    
     callされた中で、呼び出すときに設定した値を(A?)で参照することができます。 もう少しまともなサンプルを考え中。
  • デフォルトサーフェス周りが怪しかった問題を修正。
  • (countParentheres)で不正落ちする問題を修正。……最初から壊れてたぽ?
●里々 phase 118
  • ムチムチ
里々 phase 117 03/04/23
  • 辞書リロードを行うと以後何をしてもエラーになる/不正落ちする問題を修正。
  • 乱数使用時、意図しないマイナスの値が出ることがあった問題を修正。
  • 乱数の発生させる値の範囲が異常に狭かった問題を修正。
●里々 phase 116 03/04/22

 いろいろいじったので問題あるかも。 → あった。ふるごむさんありがとう。
  • (単語の追加、くだもの、バナナ)
    • 単語群@くだものに単語バナナが追加されます。
    • @くだものが無ければ新規に作成します。
    • 追加された単語の情報はsatori_savedata.txtに保存されます。
  • 3人以上のキャラクターに対応(SSP,CROW)
    • これまで2人が前提だった各機能を、一通りマルチキャラクタに対応させました。
    • まず characters.ini というファイルを作り、satori.dllと同じフォルダに置いてください。
      いろいろ書いてありますが、popular-nameがあれば動きます。
    • で、辞書は以下のように書きます。
      *
      名雪:嘘つき……
      あゆ:うぐぅ
      栞:嫌いです。
      真琴:あう〜
      舞:……
      
      名前部分には、popular-nameまたはinitial-letterが使えます。つまり下記でも意味は同じ。
      *
      名:嘘つき……
      あ:うぐぅ
      栞:嫌いです。
      真:あう〜
      舞:……
      
    • これまでのようにとだけ記述すると、0の場合は1に、0以外の場合は0にスコープが切り替わります。
    • 文中でを表示したい場合はφ:と記述してください。
    • materiaの場合は雑にエミュレート。上の例で行くと0は\0に、0以外は全員\1に割り振ります。
    • \pを直接使ってもOKです。その場合 characters.ini は不要。
  • characters.ini
    • 上で使いましたが、キャラクターごとの設定ファイルです。
    • base-surface を設定しておくと、サーフェス加算値と同等になります。500にして(3)とすると、surface503.pngが参照されるわけです。
  • (remember,n)
    • 直前から数えてn個目に喋ったスクリプトを取得します。64コまで記憶。
  • 重複回避の細かい設定。
    • 作り直しました。でも過去互換性はあるはず。
    • 同名トーク及び単語群のそれぞれから「どのように選択するか」を指定できます。
      $文「〜〜」の重複回避【タブ】方式、期間
      
      $単語群「〜〜」の重複回避【タブ】方式、期間
      
      〜〜にはトーク名or単語群名が入ります。「*」とすると、全てのトークor単語群が対象になります。
    • 方式は以下5つのいずれか。
      • 無効 単純にランダムに選択します。同じものが連続して選ばれることもあります。
      • 直前 ランダムですが、同じものを2回連続で選ぶことだけは回避します。
      • 有効 ランダムですが、全トークor全単語を一巡するまでは同じものを2回選ぶことはありません。
      • 昇順 上から順番に選択していきます。一巡したら一番上に戻ります。
      • 降順 下から順番に選択していきます。一巡したら一番下に戻ります。
    • 期間は以下2のいずれか。省略した場合は起動中と見なされます。方式を無効にした場合は指定に関わらず無効です。
      • トーク中 1回のトーク中でだけ重複回避が有効です。次のトークでは再度選択をやり直します。
      • 起動中 起動している間中、重複回避が有効です。
    • これらを組み合わせて、例えば

      $単語群「くだもの」の重複回避【タブ】有効、起動中

      のようにして使います。
    • デフォルトでは
      $文「*」の重複回避【タブ】無効
      
      $単語群「*」の重複回避【タブ】有効、トーク中
      
      になっています。
    • 重複回避の指定は、原則としてOnSatoriLoadで行ってください。
  • OnTranslateにおいて以下の処理を無効化。
    • 選択肢(\q)の特殊処理
    • アンカー(\_a)の自動挿入
    • replace_afterの適用
    完成したスクリプトが渡ってくるわけで、システム側ではなるたけ手を加えないように。
  • syncを使うとInternal Server Errorを出す問題を修正。
  • 数値 -2147483648 を扱おうとすると不正落ちする問題を修正。
  • あるフォルダ内の辞書を読むとき、必ずアルファベット順に読むように。
    システム順は微妙すぎるので。
  • サンプル辞書、初回起動時に話者が入れ替わっていた問題を修正。きっと妖精さんのしわざ。
  • サンプル辞書を少しずつ現代的に。
  • 他。

scribble3 03/04/15

 ・文字列を表示できるように。


scribble2 03/04/11

 ・デスクトップの幅と高さを取得可能に。

 ・画像(png/jpeg/bmp)を読み込んで表示できるように。

 ・肥った。


○ぢみち/うさぎ問題について。


httpc6 03/04/10

 ・charset=??? を、読んではいたけど読み捨てていたダメ問題を修正。
  文字コードの自動判別がまともになった。

 ・ついでに encoding=??? も読むようにしてみた。

 ・UTF-8に対応。ヘナタコも読める。


○む

 hwndだけなら里々を使〜にもありましたね。


●hwndの取得、とか

 ここ等で定義されているIDは、Onで始まるもの以外もイベントと同様に扱うことができます。
 例えばhwndが欲しい場合なら、辞書のどこかに↓を記述すればOK。
*hwnd
$temp	(split,(R0),(sprintf,%c,1))
$さくら側シェルhwnd	(S0)
$うにゅう側シェルhwnd	(S1)
$temp	(split,(R1),(sprintf,%c,1))
$さくら側バルーンhwnd	(S0)
$うにゅう側バルーンhwnd	(S1)
 通常、起動時に本体からhwndが渡されます。で、それを「とっておく」わけです。


scribble 03/04/04

 デスクトップにらくがき。

 使いようが無いと思ってたfill_desktopでも、なんだか遊んでくれる人がいたので、も少し色々できるようにしたみたSAORI。


里々 phase 115 03/03/30

 ・SSP/CROWでCOMMUNICATEが正常に動作しなかった問題を修正。

 ・単語の出現頻度の偏りを多分修正。できてない。soon wait.


里々 phase 114 03/03/22

 ・変数を消せなくなっていた問題を修正。

 ・単語の出現頻度の方は調査中であります。


里々 phase 113 03/02/16

・OnMouseMove等でメモリ使用量が増大していく問題を修正。
・単語参照時、稀に変な場所をアクセスし、空文字列を返していた問題を修正。
・(乱数n〜m)で、nとmが同じ値だったとき必ず1を返していた問題を修正。

 どれも基本的かつ割と重大なバグなので、dllの差し替えをお願いします。
 私は要反省。

 顛末。里々はほぼ完全に(STLによる)実体ベースで、ポインタはほとんど扱ってないんです。多態なこともしておらず。なんで、最初のうちは何か静的なコンテナがどんどん膨らんでるのかと探してました。が、辞書リロードしてみたら、全オブジェクトの再生成でもメモリ使用量が減らない。こりゃ怪現象かと。でもそんなわけない。で、思い立ってnewで単語検索したら3箇所ほどで使用しており。うち1箇所が見事に該当してました。教訓:メモリ管理はvector<byte>で。
 ぽなさん、ありがとうございました。

httpc5 03/01/19

 ・eucを明示的に指定した場合、変換が正しく行われない問題を修正。
 ・それに付随して範囲指定文字列のコードが常に Shift_JIS で正常動作するように。

 ところで範囲指定に正規表現使えたら使います? 100KBは増えちゃいますが。


おぶ8 02/12/07

 ・不安定さの原因だったかもしれない問題を修正。

  ……スレッドセーフじゃなかった。例えるなら「女子が着替え中は男子は教室の外に出ててくださいって肝心の扉が閉まってないじゃん覗きどころか出入り自由ですよあらこりゃうっかり」みたいな。違うか。

  おぶに関わる致命的ミスの多さは我ながら、こう、


里々 phase 112 02/11/18

 ・単語中のさくらスクリプト分の文字数も数えて自動ウェイトの対象としていた問題を修正。

  長めのスクリプト内の余計なウェイトが消えます。

  この辺ごちゃついてます……最後にまとめてウェイト指定するよう直すべきか。
  そもそも自動ウェイト挿入は必要なのか。……まぁ無効化できるからいいか。

 ・全トークを重複回避指定すると、それまでの重複回避記録が無効化される問題を修正。

  これが原因だったかは微妙なのですが。


cheese 02/11/09

 マウスカーソルをいちびるSAORI。


里々 phase 111 02/11/09

 予約トーク関連の情報取得。

 ・(予約トーク数)

  そのまま。予約されているトーク数を返します。

 ・(次からn回目のトーク)

  nに数値。その回に予約されたトークがあればトーク名を返します。
  無ければ何も返しません。

 ・(トーク「〜〜」の予約有無)

  〜〜という名前のトークが予約されていれば1を、さもなくば0を返します。


○日数計算

 早坂さんが専用SAORIを公開されたようで。


httpc4 02/11/06

 bg時のOnHttpcNotifyのref0に、第2引数(識別子)ではなく第3引数を渡していた致命的問題を修正。ごめんさないぃぃ。

 接続確認は正しく動いてるようなのですが……接続状態では呼んだ直後に通知するため、何らかの「DirectSSTPが割り込めない」状況なのやもしれず。


○おぶ

 実用上の問題は無いのですが、
 OnWebsiteVisitやOnWebsiteStayの中では、Reference0/1を参照する方が正道です。
 getTitle等はそれら以外のイベント中で取得する用途なので……いや実用上の問題は無いんですけどもー……


httpc3 02/10/31

 これまでは取得終了まで処理を戻しませんでしたが、それを非同期でやれるようになりました。
 裏でダウンロードして、終わったらDirectSSTPで通知します。
 ドキュメントの「非同期取得」の項目を参照のこと。ちっと無愛想ですが。


おぶ7 02/10/31

 ブラウザが起動してない時、やたら重くなる問題を修正。

 ブラウザ起動中と同等のごく軽い負荷になってるはずです。
 ただし「ゴースト起動後にブラウザを起動した場合」、通知の開始がブラウザ起動から最大で10秒程度遅れるようになってしまってます。どーしても早くないと困る、って場合は要相談。


おぶ6 02/10/26

 ・全体的な不安定さに関っていた可能性のあるバグを1つ修正。
 ・終了時に致命的な問題を起こしていた可能性の高いバグを1つ修正。

 ワタナベさんにテスト用ゴーストデータを提供していただいたんですが、
 私の環境では再現せず。ということは(栞やその用法ではなく)環境に原因があることを意味するわけで、
 そちらのセンで調べた結果、明らかにマズい部分が見つかったので修正しました。
 ご協力に感謝します〜



おぶ5 02/10/18

 ・IEでも正しくタイトルを取得できるように。
  キャプションから拾います。

 ・起動した時点で開いていたURLは、OnWebsiteVisitでは通知しないように。
  次に移動した時から通知します。


おぶ4 02/10/12

 ……。
 「私のテスト環境にしかない特定のファイル」が無いと正しく動作しなかった問題を修正。

 ∧||∧
(  ⌒ ヽ 
 ∪  @
  ∪∪  


 日本語タイトル取得がヘンである問題は未だ調査中です。とりあえずURLのみ対応と考えてください。
 あと、IEとNetscape以外にMozilla、Opera、いくつかのタブブラウザに対応したつもり。


おぶ3 02/10/09

 おぶ2は無かったことに。ちうか何一つ直ってませんでした。ギャー。


おぶ2 02/10/08

 ほとんどの栞からまっとうに呼び出せなかった致命的問題を修正。というかSAORI準拠してませんでした。ギャー。

 IEで日本語のタイトルが文字数にして半分しか取得できないという問題が残ってます。何故だ。

 一回の起動中には一度訪れたサイトについてメッセージを出さない方が良いでしょうか。あとホストやフォルダ以下に滞在してる時間を報告するとか、30秒以上滞在した場合にだけイベント出すとか……栞側でも可能ではありますが。



里々 phase 110 02/10/06

 ・COMMUNICATE(話し掛け)がmateria上でまったく機能してなかった状況に対処。

  あうぁ。materia側の問題とはいえ放置しすぎでした。申し訳ない。

  しかしやっぱCOMMUNICATEはいいですねー。感動があるですよ。何か原始的なモノに触れるのか。
  ちっと準備が面倒だけど(ってもフォルダごとコピーで済むし)、一度は/久しぶりに遊んでみることをおすすめします。


 ・切り替え時のスクリプト挿入を無効化できるように。

  $スコープ切り換え時【タブ】

  変数消去と同じ書き方で。
  これで

  :あっ:ん?:という間に。

  みたいなスクリプトが期待した通りに表示されようになります。
  これも随分長いことできなかったんですね……phaseが1桁の頃から潜在してた模様。


 ・ssu.dllが受け取れる引数に100個までの制約があったのを65536個までに拡張。

  想定不十分による問題でありました。



里々 phase 109 02/09/29

 ・内部イベント OnSatoriLoad を追加。

  ロード直後に呼ばれます。
  OnSatoriBootとの違いは、ここで何か返しても一切使用されないってことです。
  easyballoonのorusuban含め、こっちの方が向いてる処理は結構あるかも。

 ・内部イベントで行末改行捨てが効いてなかった問題を修正。


里々 phase 108 02/09/29

 ・いくつかの内部イベントにおけるSAORI呼び出しで、
  SecurityLevelが必要もないのにExternalだった問題を修正。

  OnSatoriBootでeasyballoonを正しく動かせるようになりました。


おぶ 02/09/19

 ブラウザで見ているページを通知するSAORI。

 機能も調整も足りてませんが、とりあえず。



里々 phase 107 02/09/18

 ・$文「トーク名」の重複回避 有効/無効 で、
  有効と無効の効果が逆転していた問題を修正。

 ・$自動セーブ間隔 秒数

  指定した時間おきにセーブします。
  180なら3分間隔。
  0を指定すると自動セーブを行いません。

 ・$手動セーブ 実行

  今すぐセーブします。

 セーブデータは起動時に読み込んで終了時に保存するものなので、
 これらはあくまで保険的なものです。



もあ 02/09/18

 ゴーストの使う言葉に「ゆらぎ」を与えます。
 あるいはでんぱを強めます。

 moa0.txtは\0用、moa1.txtは\1用。
 サンプル辞書を見ての通り、空行を区切りとしてグループ分けされてます。
 トーク中、このファイルで定義された語を見つけると、
 同じグループのいずれかの語に置き換わります。

 サンプルは適切な用法ではありません。
 「ゴースト本人にとって、ほぼ完全に等価である単語や言い回し」を並列するとゆらぎっぽく。
 ……で面白くなるかは知らぬ。ま好きに使ったってください。

 SAORI/1.0またはMAKOTO/2.0として扱えます。
 MAKOTOの方が自然かな。
 ファイル3つをghost/masterに置いて、descript.txtにmakoto,moa.dllと書き加えてください。


○loopは、
 「loopが無いことに不便を感じる」シチュに出会わない限りは使わない方が無難です。
 まぢでまぢで。


里々 phase 106 02/08/31

 ・loop

  簡易的ではありますが、ようやっと動的ループを。

  (loop、犬、3)

  とすると(犬)(犬)(犬)と同じ意味に。
  回数を実行時に指定できるのがキモ。

  加えて、実行中は(犬カウンタ)という変数が1,2,3と順番に設定されます。
  終了後に消えます。

  (loop、犬、0、3)

  と指定することもできます。この場合(犬カウンタ)0,1,2,3と変化します。
  さらに

  (loop、犬、1、4、2)

  と指定することも。この場合(犬カウンタ)1,3と変化します。

  (loop、犬、4、1、−1)

  なんてのも。4,3,2,1と変化。

  最初の引数にカッコをつけないようご注意。


 ・辞書情報のいろいろ

  (countTalk) トーク数
  (countNoNameTalk) * のみの無名トーク数
  (countEventTalk) *On〜 で始まるイベントトーク数
  (countOtherTalk) それ以外のトーク数
  (countWords) 単語群数
  (countWord) 単語数
  (countVariable) 変数数
  (countAnchor) アンカー数
  (countParentheres) 辞書中のカッコの数
  (countLine) トークの総行数

  今読み込んでいる辞書の数値的情報です。


 ・計算時、数値か文字列かの判定をちっとだけ賢く。

  「4ひえた」を渡されてもエラーにせず、文字列として扱います。あんま変わらないかも。


 ・SAORI呼び出し/内部呼び出しの区切り記号としてバイト値1を使用可能に。

  これまで使えた 、 , , に加えて。
  何がくるかわからないテキストを引数にする場合、誤解釈の対処にある程度まで有効です。

  $byte1【タブ】(sprintf,%c,1)
  (replace(byte1)(入力文字列)(byte1)\(byte1)\\)

  この例はさくらスクリプトの無効化をしてます。




掲示板をちゃんと繋がるように修正。

 なんかレンタル元でDNSが云々だそうで。

これってSAORIでなくてもsetや他の関数でも同期呼び出しできるんでせぅか?

 カッコで呼び出せるものであれば何でもいけるハズです。


里々 phase 105 02/08/27

 ・sync

  例えば(sync,fill_desktop,255,255,0)とすると「しゃべり途中に同期して」黄色く塗りつぶされます。
  返値は捨てられます。挿入されたりはしません。

  よく使うものであれば、replace.txtに
  filldt【タブ】sync,fill_desktop
  と書いた上で(filldt,255,255,0)とかすると楽。

  使いどころは、りゅうさんちtipsの、この項辺りを読むとわかりやすいかと。
  栞は、実際にしゃべりだす直前に、辞書からトーク内容を作っているわけです。

里々 phase 104 02/08/05

 ・SAORIの返り値の先頭に余計な半角空白が付与される問題を修正。ごめん。


里々 phase 103 02/08/04

 ・引数の無いSAORI呼び出しが無効化していた問題を修正。

 ・SAORIの返り値の「先頭の半角空白」が消去される問題を修正。

 ・ssu.dll - is_alphaが英小文字のみしか認識していなかった問題を修正。

 ・dic6、各キャプションのID名をmateria583仕様に。



里々 phase 102 02/08/01

 ・内部関数 set

  SAORIと同じ書式で使います。
  主に里々の動きを制御するために使います。

  (set,変数名,値)

   変数に値を代入します。
   SAORI同様、デフォルトでは引数を計算した上で代入を行います。
   そして(set、変数名、値)も可。


 ・見切れ反応のマルチモニタ対応化(本)

 ・ポスト1才。



set_wall_paper 4 02/07/29

 ・現在の壁紙を取得できるように。

 ・「壁紙なし」を設定できるように。



里々 phase 101 02/07/16

 ・見切れ反応のマルチモニタ対応化(真)

  これでダメなら泣く。



set_wall_paper 3 02/07/15

 ・ActiveDesktop時でも変更できるように。

 ・インターレースpng読み込み時、画像が乱れる不具合を修正。



set_wall_paper 2 02/07/14

 壁紙を切り替えるSAORI-basic。
 bmp, png, jpgが使用可。



里々 phase 100 02/07/14

 ・複数のpost*.zipをファイル名で並べた時、一番上に来るように。

  phase100を記念した新機能です。


 ・数値だけの変数名を使用できないように。

  誤って設定してしまった時、サーフェス変更ができなくなってしまうので。
  万が一「使ってるよー、困るよー」って人がいたら戻します。


 ・マルチモニタが相変わらずダメなようだ

  とりあえず判定時にログを表示するようにしてみた。
  「■見切れ判定処理」辺りの内容報告をお願いします。

  いずれにせよゴースト側では何も変更しなくていいようにはしますんで。



里々 phase 99 02/07/11

 ・Windows95での起動不具合を修正したつもり。

  95の環境が無いんで、ご報告をお待ちしてます。


minishell3 02/07/11

 画質はいじってないでつ。

 ・起動中のゴーストを対象とする場合、「現在のシェル」の縮小シェルを作るように。

 ・コマンドラインからフォルダを指定可能に。. も可。materiaが起動中でもこっちを優先します。

 ・ソースコード


里々 phase 98 02/07/10

 ・ヘッドラインセンスを読み上げた後の選択で、どれを選んでも正しく動作しない問題を修正。

 ・phase97のssu.dllが古いままだったのを差し替え。


里々 phase 97 02/07/09


 ・ssu.dll - calc_floatが、小数部先頭の 0 を認識できない問題を修正。

  0.01を0.1と認識してた。あぅ。


 ・見切れ反応のマルチモニタ対応化(再)

  phase95はやっぱダメだった模様。

  仮想デスクトップ領域は取得できてるようなので、hwndの方をFMOに頼るよう変更してみたんですが、今度はどうでしょ。


 ・ヘッドラインセンス時の異常を修正。

  でかいダイアログで「SHIORI内部でエラーが発生」て言われるやつ。

  めも:結局Out of rangeだったんですが、一見したところ本当にどうでもいいような場所で……思い込みって怖いですね。あー、例外ハンドラちゃんと書かんとなー。


里々 phase 96 02/07/07

 ・SAORIが204を返したときエラーダイアログを出す問題を修正


 post94.zipが壊れていた模様。お騒がせしました。


里々 phase 95 02/07/06

 ・見切れ反応のマルチモニタ対応化
 
  複数のディスプレイモニタが存在する場合、見切れフラグを……つまりOnMinuteChange/OnSecondChangeのref1を……本体側の判定を無視して里々側で設定します。
  動作確認できてません。そしてWindows95でいきなり落ちたりしそうな心配が少し。


里々 phase 94 02/07/06

 ・候補が1つしかない単語群を1トーク中で2回呼び出した場合、無限ループに陥る問題を修正。

  きけんきけん。
  他にも危ないケースがあったかもで。


 ・(変数「〜〜」の存在)

  その変数が存在すれば1に、存在しなければ0に。
  里々は、変数に空文字列を代入すると変数の存在自体が消去されます。つまり「空文字列」を保持することができません。なので「存在の有無」で判定してください。

  ちなみにis_emptyの存在意義ですが、まぁ変数以外にも対象はあるんで(他のSAORIの返値とか)このまま。


 ・(前回終了時サーフェス0)(前回終了時サーフェス1)

  前回のトークが終了した時点でのサーフェスを取得できます。


里々 phase 93 02/06/26

 ・ネットワーク更新時、dll形式のSAORIが上書きできない問題に暫定対処。

  ロード時、同名のdl2があったら、dllを消してそっちで上書きします。
  ToDoでのコメントにあった方法なりが、微妙に……いや、まDL失敗時はdl2も消してると思うけど。


 ・OnChoiceEnterでの引数異常と、\qで拡張パラメータを使った場合の不具合に対処。

  伴ってOnChoiceEnterでも(選択ID)、(選択ラベル)、(選択番号)が取得可能になり、かつそれらの変数が上書きされるように。


里々 phase 92 02/06/24

 ・(最終トークからの経過秒)を取得可能に。

  経過秒数は OnSecondChange に依存します。つまり厳密ではないです。


 ・「さとりて」の×ボタンの機能を「送信」ではなく「終了」に。

  方法、あったんですね(そらそうだ)。


 ・replace.txt, replace_after.txtが無効化していた問題を修正。

  こう、バグを潰したつもりが勢い余って土台を破壊してたみたいな。
  ……ごめ。


里々 phase 91 02/06/24

 ・選択肢を選択した後「ジャンプ先ID」、「表示した選択肢文字列」、「何番目が選択されたか」を取得できるように。

  (選択ID)、(選択ラベル)、(選択番号)の3つ。
  これらの値は変数に設定され、その次の選択肢決定がなされるまで保持されます。

  今気づいたけど、先にToDoに上げとくべき類だったかもしれづ。
  まぁ作っちゃったしな。

  OnChoiceSelectの時点では(R0)と(選択ID)は同じ内容です。


 ・replace.txt, replace_after.txtにおいて「右辺が存在しない場合に左辺文字列を削除」が無効になっていた問題を修正。

  単なるバグ。



guidgen 02/06/22

 GUIDを生成して返すSAORI-basic。
 出力フォーマットの簡易指定機能つき。

 本当にユーザのidentifyに使うなら、もう少しカスタムしたの作りますけど、とりあえず。

 しかし-basicは楽でえぇのぅ。


里々 phase 90 02/06/15


 ・satori.dllをMAKOTO/2.0サーバとしても扱えるように。

  この項は暫定仕様。追加や変更の可能性があります。

  ・毎回OnMakotoだけが呼ばれます。
  ・カッコが展開されます。
  ・自動ウェイトは(送られてきたスクリプトに対しては)付加されることはありません。

  descript.txtにmakoto,satori.dllと書けばOK。
  里々はSHIORIであり、同時にSAORIであり、同時にMAKOTOでもあるのでち。目指すは最強の妹



 ・*OnWindowsStateRestoreを省略した時のエラーに対処。

  前までは省略した状態でアイコン化から戻すとFatal Script Errorになっちゃってましたが、省略してあってもデフォルトサーフェスの表示を行うだけのスクリプトを返すようにしました。通常は\0\s[0]\1\s[10]\e


 ・ついでに全ての必須イベントを省略可能に。

  辞書ファイルの無いゴーストでも動作させられます。
  ……意味なんて訊くな。



 ・任意文の重複回避指定

$文「〜〜」の重複回避【タブ】有効

  とすると、〜〜で指定されたトークは一巡するまでは重複して使われることがなくなります。
  リロードした時点で無効化。
  
  ランダムトーク(無名のトーク)については、初期状態で有効になってます。
  $文「*」の重複回避と書くと、全ての文が対象になります。


 ・重複回避の方法を改善

  今までちょっと腐ってて、偏る可能性があったんですが、それをまっとうな方法に改善。



 ・次回喋るランダムトークを任意に予約可能に。

  $次のトーク【タブ】トーク名

  ランダムトークの分割が容易に。
  タイマよりこっちの方が一般的に使えますね。

 ・次回から数えてn回目のランダムトークを任意に予約可能に。

  $次から?回目のトーク【タブ】トーク名

  しばらく経ってから思い出したように喋ります。
  $次から1回目のトーク$次のトークと全く同じ意味。

  以下はサンプル。


:昨日、犬を拾ったんだ。
:ほう。
:名前はまだ決めてないんだけどねー。
$次のトーク【タブ】犬を拾ったあと

*犬を拾ったあと
:名前どうしようかなー
:そんなん適当に決めちゃえよ。
:えー、よく考えた方がいいよ。
:ナントカの考え休むに似たりってな。
:?
$次から5回目のトーク【タブ】犬の名前を決定

*犬の名前を決定
:花子!
:なんだ突然。
:犬の名前だよー。
:悩んだ結果がそれか。
:……だめー?

  とまー、数珠繋ぎできます。
  次のトークに該当する*文が複数あればランダムに分岐することも。
  ……これ、かなり使えるかも。

  同じ回に重ねて指定したときは、後から指定した方が次に持ち越されます。

  タイマ同様、途中であった場合はセーブデータに保存され、次回起動時に連なります。
  持ち越したくない場合は↓を使ってくらはい。


・予約したトークの取り消し

 一つずつ消す場合。

$トーク予約のキャンセル 犬を拾った話の続き

 全部消す場合。

$トーク予約のキャンセル *


 ・*OnTalkに引数を追加

  上記の予約トークですが、OnTalkを自分で定義している場合、そのままでは動作しません。(R0)に予約トークの有無、(R1)に予約トーク名を入れるようにしましたので、以下のように書き加えてください。

  *OnTalk
  >(R1)【タブ】(R0)


  元からOnTalkを使ってない人は何もしなくてOK。



 ・独自イベント*OnSatoriBootを新規追加

  栞としての起動処理(セーブデータ読み込みetc)が終わった直後、里々自身が呼びます。
  OnBoot/OnGhostChangedより先、起動時には必ず呼ばれます。
  初期化処理等に使ったってください。

  ここでトークを返した場合、里々はいったんそれを保存しておいて、
  materiaからOnBoot/OnGhostChangedが呼ばれたとき、
  *OnBoot/*OnGhostChangedを呼ばずに、保存しておいたトークを返します。
  普段の挨拶より優先したいもの等はこちらに置くと良さげ。


 ・独自イベント*OnSatoriCloseを新規追加

  materiaからOnClose/OnGhostChangingがリクエストされたとき、里々はいったんこれを呼びます。
  ここでトークを返した場合、*OnClose/*OnGhostChangingを呼ばずに、そっちのトークを返します。
 
 
 ・独自イベント*OnSatoriUnloadを新規追加

  栞としての最終処理の直前、里々自身がコールします。
  ここでトークを返しても使われることはありません。



 ・以上っ

  つか長すぎ。
  チェックよわよわでつ。書いたとおりに動いてなかったらご指摘をお願いします。

  て今回に限った話ではないですが……機能が書いてある通りに動かなかったらそれは「バグ」なので報告してくだしゃんせ。その状態に合わせてゴースト側で修正してしまうのはまずいです(栞側がバグを修正したとき再度変更しなきゃならんようになる or バグがバグのまま使うことが定着してしまい、後々の拡張が歪んだ形になってしまう)。

  あと、仕様変更を明言してないのに、前は動いていたものが動かなくなったらそれも「バグ」なんで……
  もちろん変更はなるべくしないようにしますし、止むをえず変更する時は、容易に移行できるよう&目立つように表記するよう心がけまふが。報告よろよろ。





里々 phase 89 02/05/24


 ・暗号化したセーブデータ(satori_savedata.sat)を読めてなかった問題を修正。

  ダメすぎ。ごめ。

 ・SAORI呼び出し時、引数の自動計算を明示的に制御できるように。

$SAORI引数の計算【タブ】有効
  計算する。
  
$SAORI引数の計算【タブ】無効
  計算しない。
  
$SAORI引数の計算【タブ】自動
  各引数の先頭文字が数値または+、−記号のいずれかであれば計算する。
  何も指定しなければこれ。今までと同じ動作。


 ・ssu.dll - 関数calc_floatを追加。

  里々でいう「計算」や、関数calcでは整数(と文字列)しか扱えませんが、これは少数をちゃんと考慮します。
  ただし、SAORI呼び出し時の自動計算は無効にしておく必要があります。じゃないと整数で計算した結果を渡しちゃうんで。


$SAORI引数の計算【タブ】無効
:計算するよー。5÷2は(calc_float,5÷2)っ!
$SAORI引数の計算【タブ】自動

  calcだと切捨てなので2になる。calc_floatなら2.5になる。
  ちなみに浮動小数点演算なので精度の問題はあります。


里々 phase 88 02/05/20

 ・セーブデータの暗号保存

  $セーブデータ暗号化【タブ】有効

  としておくと satori_savedata.txt ではなく satori_savedata.sat として保存されるようになります。
  satori_conf.txtで指定するのが良いかと。
 
  ちなみに。
  以前にも言いましたが、とくに複雑な暗号ではありません。
  「絶対読めないようにする」のではなく「読まれたくないという意思を表明する」ための、ごく簡易的な暗号化です。
  もちろん、メモ帳でひょいと覗いても読めなくはなりますけど。

 ・satori_pack.exe - satori_conf.txt も暗号化対象に。


 ・SAORI呼び出し時の空文字列の扱いを正常化。

  例えば(test,a,,c)とあったとき、今までは第2引数がcになってしまってたんですが、正しくは第2引数が空文字列、第3引数がcになるわけです。

 ・ssu.dll - compareの返値が逆転していた問題を修正。

  ごめ。

 ・ssu.dll - lengthで引数が空文字列の場合、0を返すように。

  今までは空文字列を返しちゃってましたが、ちゃんと長さを返せるように。

 ・ssu.dll - 関数追加。

  例によって使わなくても全く問題ないです。手段を用意しときますよってだけの話。

 is_empty 引数が空文字列であれば 1 、さもなくば 0 を返す。
 is_digit 引数が数値であれば 1 、さもなくば 0 を返す。
 is_alpha 引数が英字列であれば 1 、さもなくば 0 を返す。

  れしば的に例を挙げるとこんな感じ。

  (is_empty,)→1
  (is_empty,たこ)→0
  (is_digit,566)→1
  (is_digit,22)→1
  (is_digit,4g)→0
  (is_alpha,TAKO)→1
  (is_alpha,TAKO)→1
  (is_alpha,たこ)→0



 ・post - シェル番号を4桁にしてみた(少し前からだけど)。動作には影響ありませんが、名前順で並べたとき綺麗になるので。
 ・post - windbellさんちにシェルからリンク。


等幅フォント版れしば 02/05/19

 こっちの方が見やすいかも。



・則巻千兵衛的な。

・ポストの追加シェルを作っていただきました。かわいいし、XGAでも邪魔にならないので当分これで開発しようかと。


●順番に、1回だけ読むスクリプト。

 変数とかの名前は、被らないように適宜変更してくださいな。


$カウンタ=(カウンタ)+1
>その(カウンタ)
$カウンタ=(カウンタ)−1
:ネタ切れです。

*その1
:うちの犬が階段でこけました。
怪我はありませんでした。

*その2
:今日のお夕飯はおそばでした。
きざみ海苔が大量にかかってて豪華な気分でした。

 一つにはニュース的な用途。
 それから、ランダムトークなしでこのスクリプトだけってゴーストもありかと思う。ゴーストって「同じネタの繰り返し」が当たり前みたいになってるけど、それが向いてるゴーストばかりじゃないよね。
 順番じゃなくランダムトークそれぞれを「1回だけ」にしたいって人がいたら、別に方法を考えます。


●同期呼び出し。

 例えば1回のトーク中でfill_desktopを複数回呼んでも、期待するような動作はしないでしょう。
 これは何故かというと、「栞がmateriaからのリクエストを受け、辞書からさくらスクリプトを組み上げて返す」というプロセスが、ゴーストの喋り始める前の段階で行われているからです(「れしば」へはリアルタイムに報告するので、眺めてると順序がわかるでしょう)。

 で、喋り途中でダイナミックに演出を行う方法なんですが、一応用意されてます。さくらスクリプトの \![raise,……] というコマンドがそれ。
 以下サンプル。


:いくよー。\w9\w9\w9
まず赤。\![raise,塗りつぶし,255,0,0]\w8\w8
次は青。\![raise,塗りつぶし,0,0,255]\w8\w8
でもって黄色。\![raise,塗りつぶし,255,255,0]\w8\w8
おしまいっと。\![raise,塗りつぶし解除]

*塗りつぶし
(fill_desktop,(R0),(R1),(R2))

*塗りつぶし解除
(fill_desktop)


 ちなみに「さとりて」経由だと\![raise]は効かない模様。多分セキュリティ上の理由なんでしょうけど、でもlocalだしな。想定された動作なのか微妙。


里々 phase 87 02/05/15

・replace系が全く無効化していた問題を修正。

・SAORI/1.0対応ってのはsatori.dllをSAORIとして使うこともできるって意味ね。
 里々の二段重ねとかもできます。


そだて phase 6 02/05/15

・zip/nar作成時、書庫ファイルが既存するとそこに「追加」してしまう問題を、予め削除して必要なファイルだけで構成しなおすように修正。

・設定は全部あってるはずなのにどうしてもネットワーク更新がうまくいかないって御仁は、サーバの問題の可能性があるんでとりあえずiswebを借りて試してみると良いとかなんとか。iswebでもアカンときはアカンのですが。


里々 phase 86 02/05/14

・SHIORI/3.0対応。
・SAORI/1.0対応。二番煎じだけど。
・SHIORI/2.x非対応。よってこのバージョン以降materia571以前では動作しません

・というか人柱版。特にCOMMUNICATEは相当にアヤシイというか未テスト。他にも多分いろいろとアレである可能性が。

・「ゴースト作者側でしておかなければいけないこと」はありません。いつものように入れ替えるだけでOK。

・イベントを単語群でも定義できるように。@OnBootとか。里々の支援機能を意図的に切りたい場合などに。カッコ展開はもちろん有効。

・NOTIFYもGETも区別なく受け取ります。NOTIFY内容を覚えておきたい場合は変数に記録。

・ID: 現在曜日 とかが可。SAORI扱いするとき便利かも。

・文と単語群の存在確認

(文「○○」の存在)
(単語群「○○」の存在)

あれば1、なければ0に置き換え。

・起動時に「れしば」が立ち上がってた場合にのみ報告するように変更。これだけの為に随分重くなってたので。途中で「れしば」を立ち上げた場合はゴーストをリロードしてください。

・satorite.exe - 最小化ボタンがついた。終了ボタンで終わらないのは仕様。
・satorite.exe - (現在時)系が取得できなかったバグを修正。


・φの用例。
 (15) を \s[15] に置き換えたくない場合は φ(15)とする。
・「ふぁい」でφが出ないIMEを使ってる場合は単語登録を薦めます。




 phase 85での変更点に書き忘れがありました。
 かなり前のバージョンから里々を使ってる方の場合、サンプルのreplace.txtのままだと問題が発生します。というかすいません>RAILさん
 
 ◆「行頭に$か>がある場合はreplace.txtの内容の反映しない」を廃止。

  対処としては replace_after.txt に replace.txt の内容を移動すればOKです。

 replace.txtは計算等を行う以前の段階で、何もかも一緒くたに置き換え対象とします。対してreplace_after.txtは色々を行った「結果」に対して置き換えを行います。よって、一般的な置き換え用途にはreplace_afterの方が向いています。……というかreplace.txtは、現在ではあまり使う用途はないと思います。





>梶山さん
 
 OnChoiceSelectが未定義のとき、里々は>(R0)を実行します。
 目立たない場所にしか書いてなかったかもしれず。


02/04/28 phase 85
 
 ◆\_aの自動挿入はさくらスクリプトの引数を対象としない
 
  でないと\q[]内に\_aがきたりとまずいので。
 
 
 ◆φによるエスケープを全ての文字に適用。
 
  \\φuとすれば\uがちゃんと出せます。
  φ…とすると、replaceも無効化できます。
 
  繰り返しますがφは「ふぁい」です。
 
 
 ◆「無内容のスクリプトは無効化」を強化。
 
  里々による自動挿入のみのスクリプト(\1\eとか)で本来の喋りをつぶしてしまうことのないように。
 
 replace周辺はもう少しどうにか。「家を増築したら2階からしか出入りできなくなった」系の問題もあるんで、次のSHIORI/3.0移行に併せて色々直します。ほいで、SHIORI/2.xサーバとしての里々はこれで開発終了(予定)。次からはSHIORI/3.0クライアントのみの対応となります。materiaなら571以前では動かなくなるってことね。
 もっとも、ゴースト側で対応すべきことはたいして無いはず(辞書を2,3箇所いじってもらうかも程度)なんでご心配なさらず。

 あとこの履歴スペースの横幅は狭いと思いました。




02/04/21 phase 84

◆行末のφ

 行末にφを置くと、その改行は無いものとして扱われます。次の行とつながるってことね。カッコ内では同じ処理が自動的に行われます。

◆カッコ内における行頭のタブ記号無視が効いていなかった問題を修正。

*OnBoot
:φ
(iflist、(現在時)、
<6、こんばんは。、
<11、おはようございます。、
<18、こんにちは。、
<24、こんばんは。


 この位だとありがたみが無いけど、多段ifとかを見やすく書くための機能です。




02/04/21 phase 83

 文法を少し追加・変更。なるべく既存のものに影響が出ないようにしたつもりですが、ひょっとすると多少の変更が必要になるかも。
 他、ssu.dll に関数追加&修正。


◆エスケープ記号としてφを採用。

 現時点では主に「次の特殊記号を無効化する」目的で使用します。この後で説明。
 「ふぁい」で変換すると出ます。
 φ記号そのものを使う場合はφφと記述してください。φが一つ出力されます。


◆一行コメントを、行頭だけでなく途中でも有効に。

 辞書ファイル中にがあると、その場所から行末までが無視されます。
 記号そのものを使う場合はφ#と記述してください。だけが出力されます。


◆カッコの無効化。

 φ(と記述してカッコを始めることで、置き換え等の特殊機能を抑制し、単なるカッコとして出力することができます。また、カッコ内で閉じカッコを表示したい場合はφ)で可能。
 もちろん、置き換え対象が無い場合はそのままカッコつきで出力されます。


◆カッコ内部での改行を全て無視

 これが今回のメイン。

 逆にいうと、カッコ内部ではいくらでも改行ができるということです。
 主に、SAORI呼び出し時の大量の引数を見やすく記述するために使います。
 用例は、一つ下の iflist サンプルを見てください。
 また、カッコ内部で改行においては行頭のタブ記号が無視されます。
 
 副作用として(wのような閉じてないカッコが使えなくなってしまうのですが、これは一つ上の方法でカッコ自体を無効化することで回避可能です。


◆ssu.dll - iflist

 一つの左辺に対し、複数の右辺を順番に比較していきます。
 用例。

*OnBoot
:(iflist、(現在時)、
<6、こんばんは。、
<11、おはようございます。、
<18、こんにちは。、
<24、こんばんは。)



◆ssu.dll - zen2han, han2zen

 一部記号がずれていた問題を修正、半角カナと全角カナの相互変換に対応。


◆ssu.dll - kata2hira, hira2kata

 カタカナとひらがなの相互変換。文字列比較用かな。


◆ssu.dll - sprintf

 書式指定出力。printfとしてはかなりサブセットですが。
 具体的には(sprintf,%02d:%02d,(現在時),(現在分))で時刻の二桁出力ができます。>すぬさん

 詳しく知りたい場合は「printf 書式」とかで検索すると……出てはくるでしょうけど。



02/04/12 phase 82

 ◆SAORI呼び出し時の区切りに「,」だけでなく「、」と「,」が使用可能に。

  satori_confでの呼び出し名も設定し直せば、フル全角でSAORIが使えます。
  (IF、(さかな)>5、大漁じゃあ!)ってな。



02/04/12

 HTTPクライアントなSAORI phase 2。

  暫定版。
  まず、改行コードを無視するようになりました(SAORIの規格上、そのままでは返せないので)。
  で、設定可能なオプションを追加。文字コードの指定、タグの消去、タグのさくらスクリプト変換です。
  さくらスクリプト変換は期待しないでください。雑だし。ある程度狙って作らない限りは見れたもんじゃないかと。
  タグいじり系は別のSAORIとして分離するかもしれず。とかく暫定仕様ってことで。



02/04/10 phase 81 excuse:春なので2

 \![open,inputbox,*]のサンプル、派手に間違ってました。すいません。ぁー。\![raise,]と混同してたヨ……

*OnUserInput
$(R0) (R1)
>(R0)を教えてもらった

*名前を変える
:名前は?\![open,inputbox,ユーザ名]

*ユーザ名を教えてもらった
:(ユーザ名)さんですね。

 ついでにポストのサンプルにも反映。

 ◆dic2、*OnUserInput追加。
 ◆dic8、「名前覚えて」部分のサンプル変更。



02/04/09 phase 80 excuse:春なので

 ◆による検索を今度こそAND条件に。

  昨日言ってたことと逆になってました(対ユーザの方をANDにしてた)……_

 ◆TEACHが無効化されてた問題を今度こそ修正。

  phase79で直したつもりが全然直ってませんでした……_

 ◆里々へのリクエストで SecurityLevel: local がない場合は SAORI-basic の直接呼び出しを禁止。

  せきゅ。-universalはLocal/Externalを渡します。

 ◇というか

  COMMUNICATE周りを整理しないと……



02/04/08 phase 79


 ◆タイマが一瞬で終了する問題を修正。

  OnSecondChange以外でも数えてたヨ...


 ◆による検索をAND条件に。

  2単語以上であり、かつ、全ての単語が文中に含まれてる場合のみヒットとします。
  対ユーザCOMMUNICATEは今まで通り。


 ◆TEACHが無効化されてた問題を修正。

  でも、この際だから\![open,inputbox,*]に移行しちゃった方がいいかも。より適切に動作しますので(入力中は割り込まれない、入力後は消える)。


 ◆「SAORI-universal」呼び出し時にSecurityLevel: を付加。
 
  せきゅ。
 
 
 ◆「SAORI-basic」の直接呼び出しが可能に。

  里々使用のゴーストにおいては、プロクシdllを経由しなくてもSAORI-basicなプラグインが使えます。
  exe形式のSAORIをdll形式のSAORIと同様に扱える、ってことです。
 
 
 「SAORI-basic」は作るのも割と簡単なんで、ちょいと試しに遊んでみるのも一興かと。単なるコンソールアプリケーションです。例えばこれ
 
 #include <stdio.h>
 
 void main(int argc, char* argv[]) {
  printf("Hello, world.");
 }
 

 多くのCの教科書の1ページ目に載ってる有名なプログラムですが、これ、コンパイルすれば、そのままSAORIとして扱えるわけです。
 まぁこのままじゃ実用性無いんで加算器とか。
 
 void main(int argc, char* argv[]) {
  int i, acum=0;
  for ( i=1 ; i<argc ; i++ ) {
   acum += atoi(argv[i]);
  }
  printf("%d", acum);
 }
 

 実用がお嫌いなら人語→犬語翻訳機とか。
 
 void main(int argc, char* argv[]) {
  int i;
  for ( i=1 ; i<argc ; i++ ) {
   printf("わん");
  }
 }
 

 興味を持ったらフリーのコンパイラをインストールなどして、あとは適当に検索すれば、いくらでも講座があると思います。
 これであなたもSAORI作者。

 ※プログラムに関する質問にはお答えしかねます。にゃむー。



02/04/07 phase 78

 ■SATORI - ハイパーリンク的な。

  dicAnchor.txtというファイルを用意し、
  
  *悲しい目をした犬
  :路地裏でたまに見かけることがあります。
  

  等と記述します。すると、ゴーストのトーク中で悲しい目をした犬という台詞が出てきたとき、それが自動的にアンカー化されます。
  まーやってみてください。これ多分、ごく普通の機能になると思います。

  なお、dicAnchor1.txtとかdicAnchor_about_Fruits.txtみたいなファイルも対象になります。

  要は \_a[語]語\_a に置き換えてるわけです。
  本体からのOnSelectAnchor時、該当辞書ファイル内に(R0)と一致する文が無ければ、通常通り*OnSelectAnchorを呼びます。
  今んとこうにゅう側は効いてないっぽ。というかmateriaのtest中な機能を使ってるため将来に渡って使えるかは不明。アンカー機能自体が廃止されない限りは大丈夫ですけども。


 ■SATORI - 予約中タイマの解除

  $○○タイマ=0で。
  できるような気がしてたけど全然できてなかった……すいません。

 ■SATORI - タイマカウントを少しだけ精密に

  喋れないとき(トーク中、最小化時など)にもカウントするようにしました。
  喋れない状態で発動タイミングがくると、1秒ずつ遅れていきます。相変わらず厳密とは言えません。

 

 過去ログ
 〜02/04/02
 〜01/12/31
 〜01/12/13
 〜01/11/10

 トップに戻る