# 20031126

表情のみ差し替えて量産というのは苦肉の策です。ヒマができたらフルスクラッチを。


# 20031123

#9a ----

×起動時 scriptorname と emotionname が逆に復元される
default テクスチャセットに angry 追加
時限ノーマライズ処理と sv_textureautonormalizetime 変数追加



# 20031122

#8a ----

×clear タグを使用してすぐウエイトに入るとウエイトが終了するまで clear が(外見上)実行されない
SHook で流されるメッセージにカスタムメッセージ WM_APP 追加。とりあえず WM_APP 0 0 がテクスチャの変化を表す。
sc_currenttexturealias 定数追加。現在のテクスチャエイリアス ID。
×テクスチャセットを切り替えた際に前のセットのアニメーションデータがクリアされない
×changetextureset でテクスチャセットが切り替えられるたびにメモリリーク

# 20031029

#7a ----

rate の引数をサイン必須に変更(+1 はいいが 1 は不可)
rate の第2引数に -noconfirm 追加、つけると確認しない
×SIPC で送られてきたコマンドのクォートの中のエスケープされたクォートのエスケープ記号の方(分かりますか)を処理前に勝手に削除する
×win9x で終了時に SIPC サーバワーカースレッド待ちの waitforsingleobject が戻って来ずプロセスを終了できない。winNT では問題なし
×win9x でプロセスを終了させた際、SIPC サーバが待ち受けスロットのリリースに失敗し、ゾンビリソースがシステムに残留する。winNT では問題なし。
SHook を全ウインドウについて個別にかけられるよう変更。
上の変化に伴い registerhookhwnd の引数も変化。
sc_version 追加
×unregisterguimenu が初実装した日から今日に至るまで一度もまともに動いてなかった
引数なしで man を実行するとヘルプ・インデックスが出る

----

私はサーバに感謝しなくてはなりません。ごく単純に言ってフリーの web スペースや一般の ISP が提供してくれるサービス程度の権限では物理的にここまで来れません。VC++ で作られたクライアントやテクスチャだけではなく、apache、mysql、php 等で構成されたサーバリソース全てを含めて Stand+しなちく MOD であって、マスターサーバ側の環境がもっと悪かったら、今完成しているものはどれも糞の役にも立たない脳内の妄想で終わっていた。

潤沢な権限を与えてくれたことに感謝します。ありがとう。

# 20031029

#6a ----

×プロセスを終了しても SIPC サーバがメールスロットを解放しない。NT では問題ないが 9x では場合によっては奇妙なことに(注:この時点では直ってなかった)
×AI グラフが時々キー入力を受け付けなくなって強制終了するしかなくなる
×sc_lastmasterleaddata_author と sc_lastmasterleaddata_script の中身が逆
×SIPC サーバがクローズ時にコンソールが消滅してからコンソールに終了メッセージを送っており、ここでコケてもおかしくなかった(まあ最後の最後でのことなのでどうでもいいと言えばどうでもいいのだが…)
registerhookhwnd 関数追加。使い方はSHook参照
×手動 pause した状態で ctrl+alt+space で不可視にするとトグルスイッチが逆転して resume する
×SIPC で送られてきたコマンドのクォートを処理前に勝手に削除する
クォート内で \ でクォートをエスケープする機構追加(ex. say "hoge \"hoge")
wget 関数追加。Stand 本体とプロクシ設定を共有できる、コンソールにログが出る等、結局これが一番いい方法。のはず。ただ今のところ肝心の Stand の http クライアントがシングルスレッドで 1.0 というかなり最低のクライアントなのだが…

unregisterhookhwnd は必要ない。登録したウインドウが有効なハンドルでなくなると内部で自動的に unregister される。

----

# 20031017

#5a ----

ENTER ホットキーで最小化する時スクリプト再生を強制停止しスクリプタも消す
sv_autosayinterval を自動保存対象に追加。
sv_autoreloadinterval を自動保存対象に追加。
定義はされているが値が空文字列の変数/定数を参照したとき、\0(バイト値0)を返すようにした。よく考えればこれが最も普通の実装なのになぜ遠回りになったのか…#3 で 0 を返すようにしていたが、これだと文字列 0 かそれとも空なのか分からず何の解決にもなっていなかった。
sv_autoreloadinterval の最低値を 600000(10分)に制限
sv_autosayinterval の最低値を 60000(1分)に制限
shellexecute 関数追加。
GUI メニューに「書く」追加
sc_lastmasterleaddata_script 定数追加。
sc_lastmasterleaddata_author 定数追加。
sc_lastmasterleaddata_id 定数追加。
クォートをシングルからダブルに変更。
alias 関数追加。
man 関数追加(外部コマンド)
AI グラフ追加(外部コマンド)

----

システム変数の自動保存は本当はおかしい。autoexec.txt で起動のたびに変数を定義し直すことでユーザ固有の設定の起動を行うのが本来の姿だと思う。しかし、実際のところ自動保存を切ってしまうとコード的にもの凄い不便になる(一回切ってみた)ので、実は今の方が全然いいのかもしれない。微妙。

最低値制限はタイミングの問題でセットした時点では異常値でもセットできたように見えるが、実際にはその間隔では動作しない。

shellexecute は registerguimenu で直接 URL を開きたい時以外には何の役にも立たないであろう。SIPC クライアントは別に人に頼らずとも自分で API 叩けますから。

クォートですが、申し訳ないのですがやはりダブルクォートにしようと思います。…なぜ最初のをシングルにしたのか自分でもよく分かりません。シングルはこのバージョンでは有効ですが、近く消えます。消えると 'hoge' はそのまんま 'hoge' という 6バイトの文字列になるので早めに対策を…

man はどうしようか迷いましたが、やはり唯一かつ常時最新でさらに公式のデータと矛盾がなく作ったファイルも無駄にならないのがベストだろうということで、とりあえずこういう設計にしました。まあこれがダメでも man.exe 書き換えればどうにでもなるので何とかなるでしょう。ただ懇切丁寧に html 作るのはだいぶ大変な作業ですので、システムは作ったもののあまり前向きな気持ちは沸いてきません。

AI グラフは RKX 絡みの作業のついでに作った遊びのプログラム。早い話がビルボードサンプルプログラム。まあ凄そうだしいいだろうと。遊びのわりにはライブラリのせいでやたら exe がデカいですが…

# 20031014

#4a ----

SIPC.M を増設。win9x でも動作し、性能的に N に劣らず、A のような制限もない。
config.exe の SIPC タイプを M に変更。
SIPC.N と SIPC.A サーバ機能を削除。

----

まさか 3日の間に 3つも別のシステムを組むことになるとは思わなかった。しかしおそらくこれで確定でしょう。listen サーバなので私としても文句はないです。

なおsipc.dll の Connect 関数の引数が変化しているので注意してください。詳しくは SDK を参照してください。


# 20031014

#3a ----

SIPC.A を増設。これに伴い #2a の SIPC は SIPC.N に改名。ドキュメントは追記、SDK は更新。詳しくは SIPC 開発者リファレンス/SDK
config.exe の SIPC タイプを N から A に変更。
×CVar に空文字列をセットできない(参照と見なされる)
×「定義はされているが中身が空」という条件を満たす変数/定数を SIPC で参照すると(少なくとも sipc.dll ないしそれをベースにしたコードでは)そのスレッドがデッドロック→0 を返すようにした

----

windows9x は実に糞ったれだ。せっかく便利なものを見つけたと思ったのに結局ただのパイプまで退行してしまった。


# 20031013

今回は前回冷遇されていたプログラマがかなり重要な位置に来ると思います。もちろんネタや絵といった他の分野も依然として重要ですが、それらと同等か、物によってはそれ以上重要な役割を果たすと思われます。趣旨に賛同できるという方おられましたら SIPC を使ったプログラム開発に参加して頂けると幸いです。


# 20031013

#2a ----

SSTP サーバログ出力をデフォルトで OFF に変更
setguiattribute 関数に識別子かなり追加
call 関数追加
registerguimenu 関数追加
unregisterguimenu 関数追加
×Norton のファイアウォールで SSTP サーバが動作をブロックされるとクラッシュ
×マウスキャプチャデータが全インスタンスに対して 1つしか存在しない(ので稀に奇怪な動作をする)
×changetextureset 系関数で存在しないテクスチャの名前を入れるとそのまま素直にクラッシュ
×changetextureset で縦尺の短いテクスチャに切り替えると即座にアジャストされずに浮く
×4 で割り切れない幅のビットマップのリージョン生成に失敗
SIPC サーバ機能追加。詳しくは SIPC 開発者リファレンス/SDK
system 関数追加
SIPC を用いた GUI の設定ダイアログ追加

----

目玉は SIPC。

Norton と SSTP サーバの関係については、結局のところこちらのコードに大きな誤りがあった。

Stand システム本体は VC++ で書かれています。が、今回添付された GUI ダイアログは Delphi で書かれています。設定画面として機能しているのは config.exe で、stand.exe とは全く別の独立したプログラムです。しかしそれがあたかもシステムの一部であるかのように振舞っています。SIPC は大体そういうものです。


# 20031011

- SSTP を機能させる

SSTP は元々悪い設計ではないが、前回はプラットフォーム化したことにより、サーバで誰が動いているのか分からなくなってしまい、その影響で SSTP が有名無実なものとなった(これは調べることができれば解決するという問題でもない)。SSTP サーバは現実問題として 1サーバ 1キャラクタでなければ機能しない。そうでなければスクリプトが非常に送りにくい。

- ランダムパターンは使わない

全パターンが 9 のとき、新しく追加される 10番目のパターンの発動確立は 10% だが、全パターンが 99 のとき、新しく追加される 100番目のパターンの発動確立は 1% である。実は半端なランダムパターンは増やせば増やすほど逆にループ傾向が強く感じられるというジレンマがある。

- ツール・ファンクションは実装しない

ツールは既に優れた物がいくらでもあり、それを再発明したところで気休めにもならない。外部ツールが SSTP を使用すれば自身がツール・ファンクションを持つ必要もない。

- 収束構造

そのキャラクタを知る複数の人間が各自少しずつそのキャラクタを演じることで一つの現象に収束するような構造にする。そのためには今の即物的なマスターサーバ構造はベストではないと自覚している。


# 20031011

しなちくの angry、うさの surprised 辺りが次回の有力追加候補。今から使っておいても先を見すぎということはないはず。


下らないバグ修正はないと言ってるそばから致命的問題発覚。すげえ馬鹿

#0i

×時間の長い w タグを含んだスクリプトが実行されるとブレイク不能になる
break コマンド追加


# 20031010

初版ながらかなり作り込んだので、下らないバグ修正でバージョンがホイホイ上がることはないと思います。

作者がやる気をなくして更新しなくなったプログラムというのはまあ悪いプログラムでしょうが、では頻繁に更新するプログラムがいいプログラムなのかというと、実際には元がクソだから頻繁な更新を迫られるプログラムというのが掃いて捨てるほどあり、そしてそれらは多くの場合 1から作り直さなければまともな状態にも戻らないわけで、それを考えると到底「更新するならいいプログラム」だとも言えない。

ごく当たり前の話ですが、修正と変更と追加は全く違うことです。末端には同じ「更新」にしか見えなくても、それが修正による更新なのか、変更による修正なのか、あるいは追加による更新なのかで、その意味合いは全然変わってくる。従ってそもそも「更新された」という漠然とした捉え方自体が非常によくない、とも言える。

一般の人間はどうしても「プログラムは魔法で動いている」と思ってしまう傾向がありますが、身近なものなんだから、まあもう少し興味を持って見たっていいんじゃないか、と思います。

戻る