【伺か】C#で書けるSHIORIを作った話

github.com

まあこれなわけですが。

ちょこちょこっと解説でもしておこうかと思います。

もくじ

Rosalindとは

これは何? デスクトップマスコット伺かにおける、SHIOLINKプロトコル経由で動作するSHIORIサブシステムです。

C#でゴーストが作れる(Roslyn使用のため 要: .NET Framework 4.6以上) Visual Studio Codeなどを使えば補完が効いて書きやすい SHIORIイベント処理の補助機能の充実(をこれから頑張ります) などが特長です。

README.mdから引っ張ってきましたが、この通りです。 C#(正しくはC#Script)で書けるC#製のSHIORIです。

  • 凝ったことはしたい
  • でもさくらスクリプト直書きはしんどい
  • 変数の管理も面倒
  • C#はちょっと知ってる

そんな人が使ったら幸せになれるSHIORIを目指してます。 なお、現在のところ未実装部分も多いα版だったりします。

なぜ作ったのか

C#で書けるSHIORIといえばD.N.Proxyが存在しますが、 配布元のホームページはサービス終了しており、(利用しているゴーストのファイルからごにょごにょすれば手に入らなくはないですが)かつ.NET Framework 2.0の時代のものということで車輪の再発明してみてもいいのかなと思ったわけです。 (あと何となく作ってみたかった)

使い方(トーク記述)

RosalindはVisual Studio Code拡張機能C#をインストールした環境での開発を推奨しています。

基本的にゴーストとしての動作は実装されているGhostクラスを継承し、定義したいSHIORIイベントに対するメソッドをオーバーライドしていくことでゴーストの振舞いを実装します。

具体的にはGhost.csxの中でpublic override string..みたいに入力すると候補がざっと出てくるかと思われます。 大体のSHIORIイベントはReferenceの値を各メソッドの引数として渡してありますが、 もしSHIORIイベントのReferenceの値を直に取りたければreference[N]のように記述すればアクセスできます。

public override string OnFirstBoot(IDictionary<int, string> reference, int vanishCount = 0)
{
        return new TalkBuilder().Append(vanishCount).Append("回目のはじめましてですね。こんにちは。").BuildWithAutoWait();
}

もしoverride先がないイベント(Rosalindが未知のイベント)の場合は以下のようにメソッドを定義することで対応できます。 (以下の例はOnUnknownEventに対応する例)

public override string OnUnknownEvent(IDictionary<int, string> reference)
{
        return new TalkBuilder().Append("何だかよくわかんねぇことになってるな").BuildWithAutoWait();
}

しれっと使っていますが、さくらスクリプトを簡易に記述するためのサポートクラス、TalkBuilderが付属しています。 まだまだフォローしきれていないさくらスクリプトも多々ありますが、その際は汎用文字列追加のAppendメソッドで今のところは対処していただけると幸いです。

使い方(セーブデータ拡張)

SaveData.csxに記載の通りメンバを増やしていけば拡張できます。

今後

  • ちゃんとしたドキュメント的なの作成
  • まだ未実装のSHIORIイベントの実装
  • チェイントーク記述補助機能の実装

ぼちぼち更新していきます。