ゆっくりしていってね!ApricotファイルをVer3.94に対応させる術

ゆっくり熱がどうにも収まらず昨日は何時間もApricotいじってた。

Apricotというのはid:kawatanさんの作ったデスクトップアクセサリです。キャラクタファイルの書き換えやIronPython/Rubyによる拡張など自由度が高いです。
それで、いまゆっくり保管庫さんのところで公開されているゆっくりしていってねデスクトップマスコットなのですが、これはApricot Ver3.45までしか対応しておらず、このままではVer3.94では一部の機能が動きません。

そこで、私が見つけた対処法をいくらか。私が落としたのは霊夢だけですが、多分他のでも似たようななものだと思います。先に同じことをしてた人がいたらすみません。

予備知識

キャラクタの挙動は主に<キャラクタのフォルダ名>.xml(拡張子を表示する設定にしていない方は.xmlの部分が表示されないかもしれません。)にXMLというマークアップ言語で記されています。ここの仕様、というか挙動を記す上での約束事がいくらか変更されたために正常に動かなくなっています。

そこで、このXMLファイルを編集する必要があるのですが、多分そのままダブルクリックしてもIEかなにかが起動してしまいます。

これを編集する方法ですが、まず何らかのテキストエディタ(メモ帳でもかまいませんが、TeraPadあたりがお勧めです。)を起動し、そこにこの<キャラクタのフォルダ名>.xmlドラッグアンドドロップすると怪しげな<>が表示されます。それがキャラクタの正体です。これを直すことで正常に動作させます。

expr→state

他のVer3.94のキャラクタファイルを見ていたところ、exprという属性がなく、代わりにstateが使われていたのでやってみたらうまくいきました。
Ver3.45ではexprが、行動の条件を示す属性だったみたいですが、名前変更があったみたいですね。
具体的な対処法としては、

  1. yReimuフォルダ内のyReimu.xmlテキストエディタで開く。
  2. exprをstateに置換する。

です。置換中ちゅうのはある文字列全てを別の文字列に置き換ることです。多分普通のテキストエディタなら編集メニューあたりに入っているのではないでしょうか。

Learning→Learnとstate消去

Apricotには単語学習機能が入っていますが、このときのキャラクタの尋ねるメッセージはファイル内で定義されています。具体的には、85行目からの

    <sequence name="Learning" state="True">
      <message>${0}って、何?</message>
      <call name="Say" />
    </sequence>
    <sequence name="Learning" state="False">
      <message>${0}と関係ないものは、何?</message>
      <call name="Say" />
    </sequence>

なのですが、どうもstate属性が単語学習において削除されたみたいです。
また、Leaningというアクションの名前はLearnに変更されたみたいです。
というわけで、この部分を次のように変更してください。

    <sequence name="Learn">
      <message>${0}って、何?</message>
      <call name="Say" />
    </sequence>

もっとゆっくりさせる

別に必須ではありません。
どうも同梱の霊夢ファイルを少し流用してあるみたいで、とても頭がいいです。私の中のゆっくりはもうちょっと頭が悪くてうざい発言をするので、発言とかを少し書き換えさせてもらいました。

以上の変更でとりあえずは動くはずです。
結局の全体のyReimu.xmlは続きを読むのところに書いておきますのでコピペでどうぞ。
問題がありましたらすぐに削除させていただきますのでなにかありましたら。
あとはそうだなー。AquesTalkと連携してなにか朗読とかさせてみたい。
何か続きがあったら書きます。では。
ゆっくりしていってね

&#65279;<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="Script.xsl" ?>
<script id="ゆっくり霊夢">
  <character name="霊夢" x="0" y="0" width="150" height="135" offset-x="0" offset-y="0">
    <sequence name="Neutral">
      <motion fps="8" z-index="0">
        <image>8bitreimu.png</image>
      </motion>
    </sequence>
    <sequence name="Say">
      <motion fps="8" z-index="3">
        <clear width="150" height="135" color="Transparent" />
      </motion>
    </sequence>
    <sequence name="Idle">
      <call name="Blink" />
    </sequence>
    <sequence name="Start">
      <call name="Blink" />
    </sequence>
    <sequence name="Time" state="00:00:00">
      <message>${M月d日}よ。ゆっくりしていってね!!!</message>
      <sound>ryukkuri.wav</sound>
      <call name="Say" />
    </sequence>
    <sequence name="DoubleClick">
      <message>上から来るぞ!気をつけろ!!!</message>
      <sound>uekara.wav</sound>
      <call name="Ue" />
    </sequence>
    <sequence name="DoubleClick">
      <message>これが・・・
気になるのね!!!</message>
      <sound>kininaru.wav</sound>
      <call name="niya" />
    </sequence>
    <sequence name="Time" state="01:00:00|02:00:00|03:00:00|04:00:00|05:00:00|06:00:00|07:00:00|08:00:00|09:00:00|10:00:00|11:00:00|12:00:00|13:00:00|14:00:00|15:00:00|16:00:00|17:00:00|18:00:00|19:00:00|20:00:00|21:00:00|22:00:00|23:00:00">
      <message>${ h}時ね。ゆっくりしていってね!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Time" state="00:30:00|01:30:00|02:30:00|03:30:00|04:30:00|05:30:00|06:30:00|07:30:00|08:30:00|09:30:00|10:30:00|11:30:00|12:30:00|13:30:00|14:30:00|15:30:00|16:30:00|17:30:00|18:30:00|19:30:00|20:30:00|21:30:00|22:30:00|23:30:00">
      <message>${ h}時半ね。ゆっくりしていってね!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Time" state="07:00:00">
      <message>あら、おはよう♪</message>
      <call name="Say" />
    </sequence>
    <sequence name="Time" state="12:00:00">
      <message>おひるだー!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Time" state="15:00:00">
      <message>お茶の時間ね♪ゆっくり飲んでね!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="PowerStatusChanged">
      <message>バッテリーの残りが${0}%よ。ゆっくり充電してね!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="PowerStatusChanged" state="10$">
      <message>バッテリーの残りが少ないわ。</message>
      <call name="Say" />
    </sequence>
    <sequence name="PowerStatusChanged" state="50">
      <message>バッテリーが半分になったわ。</message>
      <call name="Say" />
    </sequence>
    <sequence name="PowerStatusChanged" state="100">
      <message>バッテリーが一杯になったわね。ゆっくりしていってね!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="NetworkAvailabilityChanged" state="True">
      <message>ネットワークに接続したわ。ゆっくり画像集めてね!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="NetworkAvailabilityChanged" state="False">
      <message>ネットワークから切断された?</message>
      <call name="Say" />
    </sequence>
    <sequence name="DrawClipboard">
      <message>${0}、だってー!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Learn">
      <message>${0}って、なにー?</message>
      <call name="Say" />
    </sequence>
    <sequence name="Alert">
      <message>新しい情報でーす!全部で${0}件あるわ。</message>
      <call name="Say" />
    </sequence>
    <sequence name="Trends">
      <message>わだいのキーワードでーす!ゆっくり見てね!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Search" state="True">
      <message>${0}の検索結果よ。${1}件、あるわ。</message>
      <call name="Say" />
    </sequence>
    <sequence name="Search" state="False">
      <message>${0}を検索したけど、何も見つからなかったわ。</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>${食べ物}たべたいー!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>${現象|テクノロジ}って、なんだろー?</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>${行く所}にスィーしたいー</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>${生物|食べ物|飲み物|モノ|見るもの|聞くもの|読むもの|職業}の妖怪が出るんだってー。</message>
      <call name="Say" />
      <message>退治しなきゃ!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>この間、${生物|現象}をみたよー。</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>${人を表す言葉}だね!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>${人名|人を表す言葉|キャラクター}だー!!!</message>
      <call name="Say" />
      <message>居たの?</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>${キャラクター|人を表す言葉|組織}ー!どこー!!!?</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>${する事}してみたいー。</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>${行く所|食べ物|飲み物|音楽|聞くもの}って、どうなのさ?</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>${人名|キャラクター|生物}うぜぇ</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>${人名|人を表す言葉|キャラクター}が${症状}だってさ。</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>きめぇ!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>たいやきー!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>むーしゃ♪ むーしゃ♪</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>しあわせ〜!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>なでなで〜!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>つねるなー!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>おのれ謀ったなゆかり!だがこれで勝ったと思うな!</message>
      <call name="Say" />
      <message>人の世に闇がある限り私は何度でも蘇る!</message>
      <call name="Say" />
      <message>せいぜいその時まで・・・</message>
      <call name="Say" />
      <message>ゆっくりしていってね!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>どうしてこんなになるまでゆっくりしていたんだ!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>ゆっくり状態!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>ヘブン状態!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>ヘブン状態!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>ひょっとして・・・私に欲情してるの?</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>さあ食べなさい!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>きのうまでの私
今日からの新しい私</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>そーなのかー</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>さあ食べなさい!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>ゆっくりこそわが命
ゆっくり故に我あり</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>例大祭へGO!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>おお、こわいこわい  </message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>うーーっ!! うーーっ!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>うー!! うー!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>ゆっくりしてって…ねぇっ…!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>だ  が  断  る  !!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>まりさ許すまじ!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>えっち!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>前が見えないー!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>ゆっくりできない!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>${キャラクター|人を表す言葉|組織}さん♪</message>
      <call name="Say" />
      <message>ふふ、ゆっくり呼んでみただけ♪ </message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>ここはれいむたちが見つけたスレだから
ゆっくり出て行ってね!!!!!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>ぶっちゃけ魔理沙いなくても一人でやっていけますんでw</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>ゆっくりうんてんしてね!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>どけよ!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>私の経験値は100050です!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>わたしにもエビフライ食べさせてよね!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>NO THANK YOU</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>すみませんちょっと通りますよ・・・</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>おなかすいたよ!おうちかえる!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>南無阿弥陀仏</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>スィー</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>アストロン!!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>こしあんルーレット!!</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>スィー</message>
      <call name="Say" />
    </sequence>
    <sequence name="Activate">
      <message>スィー</message>
      <call name="Say" />
    </sequence>
    <sequence name="Say">
      <motion fps="8" z-index="3">
        <image x="0" y="0">reimu1.png</image>
        <clear width="150" height="150" color="Transparent" />
        <image x="0" y="0">reimu1.png</image>
        <clear width="150" height="150" color="Transparent" />
        <image x="0" y="0">reimu1.png</image>
        <clear width="150" height="150" color="Transparent" />
      </motion>
    </sequence>
    <sequence name="Blink">
      <motion fps="16" z-index="1">
        <image x="0" y="0">Breimu1.png</image>
        <image x="0" y="0">Breimu2.png</image>
        <image x="0" y="0">Breimu3.png</image>
        <clear width="150" height="135" color="Transparent" />
        <image x="0" y="0">Breimu1.png</image>
        <image x="0" y="0">Breimu2.png</image>
        <image x="0" y="0">Breimu3.png</image>
        <clear width="150" height="150" color="Transparent" />
      </motion>
    </sequence>
    <sequence name="Ue">
      <motion fps="9" z-index="0">
        <clear width="150" height="150" color="Transparent" />
        <image x="0" y="0">ue1.png</image>
        <image x="0" y="0">ue2.png</image>
        <image x="0" y="0">ue3.png</image>
        <image x="0" y="0">ue4.png</image>
        <image x="0" y="0">ue5.png</image>
        <image x="0" y="0">8bitreimu.png</image>
      </motion>
    </sequence>
    <sequence name="niya">
      <motion fps="1" z-index="3">
        <image x="0" y="0">reimu-niyari.png</image>
        <wait duration="1500" />
        <clear wait="4000" width="196" height="172" color="Transparent" />
      </motion>
    </sequence>
    <sequence name="DoubleClick">
      <message>ゆっくりした結果がこれだよ!!!</message>
      <sound>kekka.wav</sound>
      <call name="Say" />
    </sequence>
    <sequence name="DoubleClick">
      <message>声の調子が悪いわ</message>
      <sound>chousi.wav</sound>
      <call name="Say" />
    </sequence>
    <sequence name="DoubleClick">
      <message>ゆっくり運送始めました!!!</message>
      <sound>unsou.wav</sound>
      <call name="Say" />
    </sequence>
    <sequence name="DoubleClick">
      <message>ガッカリしていってね!!!</message>
      <sound>gakkari.wav</sound>
      <call name="Say" />
    </sequence>
    <sequence name="DoubleClick">
      <message>お届け物です!!!            ・・・・アッー!住所間違えた!!!</message>
      <sound>otodoke.wav</sound>
      <call name="Say" />
    </sequence>
  </character>
</script>