--------------------
◆ OD TOOL for TRPG ver 12/06/29

--------------------

「もっとちゃんと、くれはっぽく喋ってください」
「…はわー」
(挨拶


本日の台詞は、漫画「QuickStart!!(くいっくすたーと!!)」より、ナイトウィザードを遊ぶメイコとサチの会話である。

それはさておき、「OD TOOL for TRPG」を約4ヶ月ぶりに更新。
今回は新機能の追加よりも、内部ルーチンの整理が主眼である。自分の中ではバージョン2.0と言えるくらいの大規模更新ではあるのだが、ユーザ視点ではそれほど大幅には変わっていないのが寂しいところだ。





「OD TOOL for TRPG」 2012/06/29版の更新箇所は以下の通りである。
こうしてリスト化してみると数はだけは多い。

  1. 数式や一部コマンドにおいて、全角/半角を無視するように修正。
    数年前から要望のあった、全角文字で書かれたダイスコードについに対応。
    数式の区切りに使う空白も半角/全角を問わないが、空白自体は必須のままであることに注意。
    なお、数式以外のコマンドでも全角文字が使えるが、こちらはあくまで一部のみ。追って対応予定。

  2. 数式において、部分的に小数に対応。
    数式で小数を使えるようにした。
    ただしプログラムの内部的には整数型のままなので、計算結果に誤差が出る場合も。

  3. 計算式のオプション(条件式と反復処理)を追加。
    他の幾つかのダイスボットで実装されている、計算オプションの機能を実装。ダイスロール機能および電卓機能で使用できる。

    まず1つは、条件分岐を行うオプション。
    等号や不等号を数式の末尾に付けることで、その条件を満たした場合に「成功」と表示されるようになる。
    例えば「2d6>=7」であれば、2D6の結果が7以上のときに成功となる。

    2つ目のオプションは反復処理。同じダイスロールを複数回行いたいときに重宝する。
    ただし試行回数は5回まで、また反復オプションを指定していても、ダイスコードを含まない数式(1+2など)は1度しか実行しない。

  4. 先頭に#CALCを#を付けずに数式を記述した場合、四則演算だけでも反応するようにした。
    今までは誤反応防止のため、ダイスコードを含まない数式にはダイスボットが反応しないようにしていた。
    1+2などの普通の計算をする場合には電卓機能を使う必要があったが、この制限を削除。

    数字だけ(括弧や負数を表すマイナス記号を含む)の場合は、従来通り反応しない。

  5. ビット演算関数を追加。
    ビット演算関数6つ(AND/OR/NOT/XOR/NAND/NOR)を追加。~
    本来なら計算の優先順位は四則演算より低くするべきだと思うが、諸事情により順位は他のダイスコードと同じ。

  6. DX リザレクト機能の仕様を変更。英語表記のキーワードやエフェクトレベルに対応。
    これにより2レベル以上のリザレクトが使えるように。
    また、従来の「リザレクト」だけでなく「RESURRECT」のキーワードでも反応するようにした。

    ゲームモードがダブルクロスの時にしか使えないことに注意。

  7. シノビガミ ロケーション表のエイリアス(日本語コマンド)が動作しなかった不具合を修正
  8. クローズダイスの部屋名指定で、ASCII以外の文字を含むと通らなかった不具合を修正。
  9. ゲームモード設定時、現在と同じモードを設定しようとした場合は、変更ではなく確認扱いになるよう修正。
    こちらは不具合および微修正。

  10. 名称を正式に「OD TOOL for TRPG」とした。
    地味に今まで「OD TOOL for Playing TRPG by LimeChat(仮)」等という長い名前だったのを、いい加減変更。

  11. LimeChat2側から呼び出される関数をCommand関数に一本化し、関数形式をDllStringからDllHookに変更。
    ユーザ側からは分からない大規模修正その1。
    マクロの呼び出しを、LimeChat2から追加された「DllHook」コマンドに変更、及びその時の関数を Command() に一本化した。
    各ボットコマンド(#TABLEコマンドなど)の振り分けは、Command()関数内で行うように修正。

    普通にLimeChat2上で動かしているユーザは問題ないと思われるが、LimeChat1や別アプリケーション(SW2_DLLncvODTPlugなど)から利用している場合は動作しなくなる可能性がある。

  12. エイリアス(日本語コマンド)処理を実装。
    ユーザ側からは分からない大規模修正その2。
    Command()関数と同様、今までLimeChat側に任せていたコマンド振り分け部分をダイスボット側で行うようにした。
    それにより柔軟なマッチングが可能になった。

    その代わり、エイリアスの各種コマンドがユーザから見えなくなってしまった。
    ここは後日修正予定。

  13. 各種コマンドのルーチン部分を、同じ基底クラスから派生させるようにした。
    ユーザ側からは分からない大規模修正その3。
    各種コマンドの処理には共通部分も多いので、これを統合。
    いわゆるStateパターンとして再構築した。

  14. #tableと#makeの内部ルーチンを統一。
    今まで別コードだったのが恥ずかしいレベルだったので、Command()関数およびルーチンの整理ついでに統合。

  15. ダイスコードの右項が、そのまま次のダイスコードの左項となる場合の不具合を修正。それに伴い、最初のダイスの出目も表示されるよう修正。
    たぶん誰も使わないけれど、「2d6d6」のような数式が動作するようになった。
    ただ、これをやるくらいなら素直に括弧付きの数式をきちんと計算できるようにするべきだと自分でも思う。

  16. 数式のトークンの数を256から64に減らした。許容できる数式の長さが短くなったが、実用上は問題ないと思われる。
    ダイスボット内部では、数式を解析(パース)するときに、それぞれの演算項・演算子・関数をトークンに分割して処理している。
    このトークン数の上限を256個から64個に縮小。
    これにより、あまりに長い数式は計算できなくなるが、実用上は特に問題ないと思われる。要検証。

  17. 四則演算のアルゴリズムを修正。部分的に分数を用いることで、丸め誤差が少しだけ少なくなった。
    内部での数式処理において、部分的に分数を使用するようにした。
    幾つかの問題は抱えるものの、計算途中の割り算による誤差(例えば1/3*3が1にならない問題)が、ちょっとだけ解決。

  18. イースターエッグを追加。数式において、最終的な値が特定の値だったときにメッセージが表示されるようにした。くっ
  19. イースターエッグを追加。特定のゲームモードを条件とし、イースターエッグを実装。ナンデ!?
  20. イースターエッグを追加。特定のゲームモードを条件とし、2D6の出目が悪いときに応援メッセージが表示されるようにした。
    イースターエッグを3つほど追加。うち2つは特定のゲームモードでのみ機能する。
    発動条件が厳しいので、たぶん誰も気付かない気がする。アイエエエエ!




今回の修正作業は5月中旬から進めていたはずなのだが、気付いてみればリリースがこんな時期にまでズレこんでしまった。
修正作業の規模の割に普通に使うレベルでは余り変わらない、というか変わらないレベルに持っていくまで時間がかかりすぎである。
これは素直に反省。

また、5月にIRCのcre系ネットワークにおいて推奨される文字コードがJISからUTF-8に変更された。
詳細はTRPG.NET補完機構のサイトに譲るとして、文字コード変更に伴うOD TOOL周りについて少し。

結論から言えば、OD TOOLは特に影響なし。
これはOD TOOLで元々対応していたということではなく(笑)、単にLimeChatがその辺の差を吸収してくれるからである。
そもそもOD TOOLはJISではなくShift_JISで動作していたことからもそれが分かる。

ただし、UTF-8とShift_JISの相互変換を行う過程で、どうしても処理できない文字が幾つか存在する。
チャンネル名にこれらの文字を含む場合は動作しないし、#regコマンドで登録される名前に含む場合は文字化けしてしまう。
これらに関しては今のところ対処方法が見つからないので、OD TOOL導入の際には気を付けて欲しい。
[PR]
R.F.D. | by odprfd | 2012-06-29 17:09 | TRPG支援ツール

--------------------

<< OD TOOL for TRP... | OD TOOL for TRP... >>