見出し画像

デスクトップマスコット「しめじ」の非公式後継版「shimeji-ee」についての覚書

遥か古の時代(?)、デスクトップマスコットというものが流行った時期がありました。
Windows上にキャラクターを登場させ、歩き回らせたり、喋ったりするようなものです。
「伺か」が有名ですが、「しめじ」もその中の一つでした。

伺かが(基本的に)デスクトップに立ち絵を表示させて対話するのに対し、しめじはデスクトップ上を動き回るタイプのデスクトップマスコットでした。
しかし時の流れは酷というもの、作者のYuki Yamadaさんのサイトは消滅。ベクターにソフトのファイルは残ったものの、更新などはなくなり、どんどん知られない存在に。(WindowsPCの所有者が少なくなっているでしょうし仕方ないですね…)

しめじに後継版が!

しかし、現在のWindowsでもデスクトップマスコットは使えます。
もちろんしめじも、Windows10で動かすことができます。
私は最近「shimeji-ee」というものを知りました。
外国の作者さんがしめじの強化後継版を作ってくださっていたのです。

(しめじはソースコードが公開されており、改変や配布も自由なので問題はないはずです)

shimeji-eeを使ってみたところ、どうやら元の機能に加えて多重起動機能がデフォルトでついており、メニューGUIが追加されその他のコマンドや操作もとてもわかりやすくなっていました。
しかも、メニュー画面の日本語にも対応。英語が読めない人でも安心ですね。私も読めないので助かります。

特殊効果、スキン変更・変身、効果音などの独自機能も追加されています。ウィンドウを投げる設定やマルチモニター時の配慮も行き届いているようです。(まだ使ったことはないですが…)
しめじのキャラクターを右クリックするとこんなメニューも。好きな行動を取らせられるのはとても助かります。

さて、このshimeji-eeですが、使い方に少々コツがいるようです。
まず、起動しなかった場合にしなくてはいけないことがあります。
私の環境ではしめじのGUIは起動するものの、肝心のしめじが落ちてこなかったのです。
その場合、対応するJAVAのパスを指定してショートカットを作ることで解決できました。
一応、手順を書いておきます。

shimeji-ee起動までの手順

  1. まず、そもそもJavaが入ってない方は入れましょう。Java8以上を入れてください。
    インストールしていない方は、↓のURLからどうぞ。32bit版を入れてくださいね。
    https://www.java.com/ja/

  2. 次に、shimeji-eeのフォルダをCドライブ直下に移動します。しなくても良いらしいですが、環境によってはこの方法で改善しないことがあるそうです。多分パスの途中に日本語が入ってたりするとよくないと思います。

  3. shimeji-eeのフォルダの中にショートカットファイルを作ります。
    右クリック→新規作成→ショートカット。

  4. ここで、Javaが入っているパスを指定します。「参照」を押して、フォルダを探します。32bit版であれば、「Program Files(x86)」の方にあります。
    その中に「Java」というフォルダがあるはずなので、バージョン名になっているフォルダの中に進んで「bin」というフォルダを探します。そこに「javaw.exe」という実行ファイルが入っているはずなので、そちらを指定します。

  5. 「次へ」を押して、ショートカットの名前をつけます。shimeji-eeの実行に使うショートカットなので、自分のわかりやすい名前をつけてください。

  6. ショートカットを右クリック→プロパティを選び、「リンク先」の部分を確認してください。先程指定したjavaw.exeのパスになっていると思います。そのパスの後に、「 -jar Shimeji-ee.jar」を追加します。最初の半角スペースを忘れないでくださいね。

  7. 続いて、作業フォルダーの欄をshimeji-eeフォルダのパスにまるごと変えましょう。

  8. これで、ショートカットをダブルクリックすれば、しめじが落ちてくるようになるはずです。

具体的には、英語の動画ですが、下記の動画で説明されているので、わからない場合はこちらを見てみるとわかりやすいと思います。

shimeji-eeでオリジナル版しめじのデータを使うには

また、既存のしめじをこのshimeji-eeで使う場合、しめじデータの移行が必要です。
移行についてはこちらのwikiに詳しく書いてあります。

普通のデフォルトしめじの改造というだけであれば、imgフォルダに新しいフォルダを作り、名前をしめじの名前にしてしめじの画像フォルダの中身をコピーするだけでOKです。

フォルダ名はキャラクターの名前とかにするとわかりやすいと思います。

画像だけ変えているしめじなら上記だけで大丈夫ですが、行動・動作のxmlファイルを変更しているしめじに関しては移行が必要です。要約すると、Notepad++というメモ帳ソフトのPythonScriptプラグインをインストール、ConvertShimejiというスクリプトを作り、それを使ってしめじの行動データを変換し、変換後のデータをconfフォルダにしめじの名前のフォルダを作り、放り込むというもの。
ちょっと難しいかもしれませんが、翻訳したら大体わかると思うのでやってみてくださいね。

ただし、最後の貼り付け用コードに関して私が躓いたことがありましたので、書いておきます。
このコードは改行が入っていないので、そのままスクリプトに貼り付けて使用しても動いてくれませんでした。動かすには、全ての命令のあとに改行を入れる必要があります。
その上、よく見ると変換に足りない部分がありました。変換と言っても、日本語部分を置換で英語に変換するだけなのですが、このままだと全部の日本語が英語に変換されず、shimeji-eeで読み込むときにエラーが出てしまいます。
めんどくさいと思うのでこちらに私が修正したコードを貼っておこうと思います。

# coding: utf_8
editor.replace("<マスコット ", "<Mascot ")
editor.replace("<動作リスト>", "<ActionList>")
editor.replace("<動作 ", "<Action ")
editor.replace("名前=", "Name=")
editor.replace("\"振り向く\"", "\"Look\"")
editor.replace("種類=", "Type=")
editor.replace("\"組み込み\"", "\"Embedded\"")
editor.replace("クラス=", "Class=")
editor.replace("\"変位\"", "\"Offset\"")
editor.replace("<!-- 立つ系 -->", "<!-- Standing -->")
editor.replace("\"立つ\"", "\"Stand\"")
editor.replace("\"静止\"", "\"Stay\"")
editor.replace("枠=", "BorderType=")
editor.replace("\"地面\"", "\"Floor\"")
editor.replace("<アニメーション>", "<Animation>")
editor.replace("<ポーズ ", "<Pose ")
editor.replace("画像=", "Image=")
editor.replace("基準座標=", "ImageAnchor=")
editor.replace("移動速度=", "Velocity=")
editor.replace("長さ=", "Duration=")
editor.replace("</アニメーション>", "</Animation>")
editor.replace("</動作>", "</Action>")
editor.replace("\"歩く\"", "\"Walk\"")
editor.replace("\"移動\"", "\"Move\"")
editor.replace("\"走る\"", "\"Run\"")
editor.replace("\"猛ダッシュ\"", "\"Dash\"")
editor.replace("<!-- 座る系 -->", "<!-- Sitting -->")
editor.replace("\"座る\"", "\"Sit\"")
editor.replace("\"座って見上げる\"", "\"SitAndLookUp\"")
editor.replace("\"座ってマウスを見上げる\"", "\"SitAndLookAtMouse\"")
editor.replace("<アニメーション ", "<Animation ")
editor.replace("条件=", "Condition=")
editor.replace("<条件", "<Condition")
editor.replace("</アニメーション>", "</Animation>")
editor.replace("\"座って首が回る\"", "\"SitAndSpinHeadAction\"")
editor.replace("\"固定\"", "\"Animate\"")
editor.replace("\"楽に座る\"", "\"SitWithLegsUp\"")
editor.replace("\"足を下ろして座る\"", "\"SitWithLegsDown\"")
editor.replace("\"足をぶらぶらさせる\"", "\"SitAndDangleLegs\"")
editor.replace("<!-- 寝そべる系 -->", "<!-- Laying -->")
editor.replace("\"寝そべる\"", "\"Sprawl\"")
editor.replace("\"ずりずり\"", "\"Creep\"")
editor.replace("<!-- 天井系 -->", "<!-- Ceiling -->")
editor.replace("\"天井に掴まる\"", "\"GrabCeiling\"")
editor.replace("\"天井\"", "\"Ceiling\"")
editor.replace("\"天井を伝う\"", "\"ClimbCeiling\"")
editor.replace("<!-- 壁系 -->", "<!-- Wall -->")
editor.replace("\"壁に掴まる\"", "\"GrabWall\"")
editor.replace("\"壁\"", "\"Wall\"")
editor.replace("\"壁を登る\"", "\"ClimbWall\"")
editor.replace("目的地Y", "TargetY")
editor.replace("目的地X", "TargetX")
editor.replace("<!-- IE系 -->", "<!-- IE -->")
editor.replace("\"IEを持って落ちる\"", "\"FallWithIe\"")
editor.replace("IEの端X=", "IeOffsetX=")
editor.replace("IEの端Y=", "IeOffsetY=")
editor.replace("\"IEを持って歩く\"", "\"WalkWithIe\"")
editor.replace("\"IEを持って走る\"", "\"RunWithIe\"")
editor.replace("\"IEを投げる\"", "\"ThrowIe\"")
editor.replace("初速X=", "InitialVX=")
editor.replace("初速Y=", "InitialVY=")
editor.replace("重力=", "Gravity=")
editor.replace("<!-- 落下系 -->", "<!-- Falling -->")
editor.replace("\"ジャンプ\"", "\"Jumping\"")
editor.replace("速度=", "VelocityParam=")
editor.replace("\"落ちる\"", "\"Falling\"")
editor.replace("空気抵抗X=", "RegistanceX=")
editor.replace("空気抵抗Y=", "RegistanceY=")
editor.replace("\"跳ねる\"", "\"Bouncing\"")
editor.replace("\"転ぶ\"", "\"Tripping\"")
editor.replace("<!-- ドラッグ系 -->", "<!-- Dragging -->")
editor.replace("\"つままれる\"", "\"Pinched\"")
editor.replace("\"抵抗する\"", "\"Resisting\"")
editor.replace("</動作リスト>", "</ActionList>")
editor.replace("<!-- 実際の行動 -->", "<!-- Actual Behavior -->")
editor.replace("<!-- システムが使用する -->", "<!-- ALWAYS REQUIRED -->")
editor.replace("\"落下する\"", "\"Fall\"")
editor.replace("\"複合\"", "\"Sequence\"")
editor.replace("繰り返し=", "Loop=")
editor.replace("<動作参照 ", "<ActionReference ")
editor.replace("\"選択\"", "\"Select\"")
editor.replace("\"ドラッグされる\"", "\"Dragged\"")
editor.replace("\"投げられる\"", "\"Thrown\"")
editor.replace("\"立ってボーっとする\"", "\"StandUp\"")
editor.replace("\"座ってボーっとする\"", "\"SitDown\"")
editor.replace("\"寝そべってボーっとする\"", "\"LieDown\"")
editor.replace("\"座って足をぶらぶらさせる\"", "\"SitWhileDanglingLegs\"")
editor.replace("\"壁に掴まってボーっとする\"", "\"HoldOntoWall\"")
editor.replace("\"壁から落ちる\"", "\"FallFromWall\"")
editor.replace("\"天井に掴まってボーっとする\"", "\"HoldOntoCeiling\"")
editor.replace("\"天井から落ちる\"", "\"FallFromCeiling\"")
editor.replace("\"ワークエリアの下辺を歩く\"", "\"WalkAlongWorkAreaFloor\"")
editor.replace("\"ワークエリアの下辺を走る\"", "\"RunAlongWorkAreaFloor\"")
editor.replace("\"ワークエリアの下辺でずりずり\"", "\"CrawlAlongWorkAreaFloor\"")
editor.replace("\"ワークエリアの下辺の左の端っこで座る\"", "\"WalkLeftAlongFloorAndSit\"")
editor.replace("\"ワークエリアの下辺の右の端っこで座る\"", "\"WalkRightAlongFloorAndSit\"")
editor.replace("右向き=", "LookRight=")
editor.replace("\"ワークエリアの下辺から左の壁によじのぼる\"", "\"GrabWorkAreaBottomLeftWall\"")
editor.replace("\"ワークエリアの下辺から右の壁によじのぼる\"", "\"GrabWorkAreaBottomRightWall\"")
editor.replace("\"走ってワークエリアの下辺の左の端っこで座る\"", "\"WalkLeftAndSit\"")
editor.replace("\"走ってワークエリアの下辺の右の端っこで座る\"", "\"WalkRightAndSit\"")
editor.replace("\"走ってワークエリアの下辺から左の壁によじのぼる\"", "\"WalkAndGrabBottomLeftWall\"")
editor.replace("\"走ってワークエリアの下辺から右の壁によじのぼる\"", "\"WalkAndGrabBottomRightWall\"")
editor.replace("\"IEの下に飛びつく\"", "\"JumpFromBottomOfIE\"")
editor.replace("\"ワークエリアの壁を途中まで登る\"", "\"ClimbHalfwayAlongWall\"")
editor.replace("<行動リスト>", "<BehaviorList>")
editor.replace("<行動 ", "<Behavior ")
editor.replace("頻度=", "Frequency=")
editor.replace("<次の行動リスト ", "<NextBehavior ")
editor.replace("追加=", "Add=")
editor.replace("</次の行動リスト>", "</NextBehavior>")
editor.replace("</行動>", "</Behavior>")
editor.replace("\"マウスの周りに集まる\"", "\"ChaseMouse\"")
editor.replace("<行動参照 ", "<BehaviorReference ")
editor.replace("\"座ってマウスのほうを見る\"", "\"SitAndFaceMouse\"")
editor.replace("\"座ってマウスのほうを見てたら首が回った\"", "\"SitAndSpinHead\"")
editor.replace("\"引っこ抜かれる\"", "\"PullUp\"")
editor.replace("\"分裂した\"", "\"Divided\"")
editor.replace("<!-- 地面に接しているとき -->", "<!-- On the Floor -->")
editor.replace("<条件 ", "<Condition ")
editor.replace("\"分裂する\"", "\"SplitIntoTwo\"")
editor.replace("</条件>", "</Condition>")
editor.replace("<!-- 壁に接しているとき -->", "<!-- On the Wall -->")
editor.replace("<!-- 天井に接しているとき -->", "<!-- On the Ceiling -->")
editor.replace("<!-- ワークエリアの下辺に接しているとき -->", "<!-- On Work Area Floor -->")
editor.replace("<!-- ずりずりした後はそのままボーっとする -->", "<!-- Finished Crawling -->")
editor.replace("\"引っこ抜く\"", "\"PullUpShimeji\"")
editor.replace("<!-- ワークエリアの壁に接しているとき -->", "<!-- On Work Area Facing the Wall -->")
editor.replace("\"ワークエリアの壁を登る\"", "\"ClimbAlongWall\"")
editor.replace("<!-- ワークエリアの上辺に接しているとき -->", "<!-- On Work Area Top Facing -->")
editor.replace("\"ワークエリアの上辺を伝う\"", "\"ClimbAlongCeiling\"")
editor.replace("<!-- IEの上辺に接しているとき -->", "<!-- On Top of IE -->")
editor.replace("\"IEの天井を歩く\"", "\"WalkAlongIECeiling\"")
editor.replace("\"IEの天井を走る\"", "\"RunAlongIECeiling\"")
editor.replace("\"IEの天井でずりずり\"", "\"CrawlAlongIECeiling\"")
editor.replace("<!-- ずりずりした後はそのままボーっとする -->", "<!-- Finished Crawling -->")
editor.replace("\"IEの天井の左の端っこで座る\"", "\"SitOnTheLeftEdgeOfIE\"")
editor.replace("\"IEの天井の右の端っこで座る\"", "\"SitOnTheRightEdgeOfIE\"")
editor.replace("\"IEの天井の左の端っこから飛び降りる\"", "\"JumpFromLeftEdgeOfIE\"")
editor.replace("\"IEの天井の右の端っこから飛び降りる\"", "\"JumpFromRightEdgeOfIE\"")
editor.replace("\"走ってIEの天井の左の端っこで座る\"", "\"WalkLeftAlongIEAndSit\"")
editor.replace("\"走ってIEの天井の右の端っこで座る\"", "\"WalkRightAlongIEAndSit\"")
editor.replace("\"走ってIEの天井の左の端っこから飛び降りる\"", "\"WalkLeftAlongIEAndJump\"")
editor.replace("\"走ってIEの天井の右の端っこから飛び降りる\"", "\"WalkRightAlongIEAndJump\"")
editor.replace("<!-- IEの壁に接しているとき -->", "<!-- On IE's Side -->")
editor.replace("\"IEの壁を途中まで登る\"", "\"HoldOntoIEWall\"")
editor.replace("\"IEの壁を登る\"", "\"ClimbIEWall\"")
editor.replace("<!-- IEの下辺に接しているとき -->", "<!-- On the Bottom of IE -->")
editor.replace("\"IEの下辺を伝う\"", "\"ClimbIEBottom\"")
editor.replace("\"IEの下辺から左の壁によじのぼる\"", "\"GrabIEBottomLeftWall\"")
editor.replace("\"IEの下辺から右の壁によじのぼる\"", "\"GrabIEBottomRightWall\"")
editor.replace("\"左の壁に飛びつく\"", "\"JumpFromLeftWall\"")
editor.replace("\"右の壁に飛びつく\"", "\"JumpFromRightWall\"")
editor.replace("<!-- IEが見えるとき -->", "<!-- IE Is Visible -->")
editor.replace("\"IEの左に飛びつく\"", "\"JumpOnIELeftWall\"")
editor.replace("\"IEの右に飛びつく\"", "\"JumpOnIERightWall\"")
editor.replace("\"IEを右に投げる\"", "\"ThrowIEFromLeft\"")
editor.replace("\"IEを左に投げる\"", "\"ThrowIEFromRight\"")
editor.replace("\"走ってIEを右に投げる\"", "\"WalkAndThrowIEFromRight\"")
editor.replace("\"走ってIEを左に投げる\"", "\"WalkAndThrowIEFromLeft\"")
editor.replace("</行動リスト>", "</BehaviorList>")
editor.replace("</マスコット>", "</Mascot>")
editor.replace("#{footX", "#{FootX")
editor.replace("\"猛ダッシュでIEの天井の左の端っこから飛び降りる\"", "\"DashIeCeilingLeftEdgeFromJump\"")
editor.replace("\"猛ダッシュでIEの天井の右の端っこから飛び降りる\"", "\"DashIeCeilingRightEdgeFromJump\"")
editor.replace("\"猛ダッシュでIEの天井の左の端っこから飛び降りる\"", "\"DashIeCeilingLeftEdgeFromJump\"")
editor.replace("\"猛ダッシュでIEの天井の右の端っこから飛び降りる\"", "\"DashIeCeilingRightEdgeFromJump\"")
editor.replace("ずれ=", "Gap=")
editor.replace("+ずれ", "+Gap")
editor.replace("\"引っこ抜く1\"", "\"PullUpShimeji1\"")
editor.replace("生まれる場所X=", "BornX=")
editor.replace("生まれる場所Y=", "BornY=")
editor.replace("生まれた時の行動=", "BornBehavior=")
editor.replace("\"引っこ抜く2\"", "\"PullUpShimeji2\"")
editor.replace("\"分裂1\"", "\"Divide1\"")

これをConvertShimejiのスクリプトに貼って保存し、実行します。
上手く日本語が英語に置換されたら、そのxmlファイルをconfフォルダにしめじの名前のフォルダを作って入れます。(imgフォルダの中に入れた画像のフォルダ名がHinakoだったら、Hinakoにします)

これで私のしめじは動きましたが、しめじの作者によってはこの限りでは無い場合があります。(既存の行動名をいじってるしめじに起こる現象です)
その場合はしめじの作者には問い合わせず、できるだけ自分で解決しましょう。多分作者にもわかりません…
私は私で古いNotepad++を使っていたので、もしかしたら最新版だと動くのかも…

終わりに

そんな感じでshimeji-eeが使えるようになりました。
私が使ってみた感じ、微妙に普通のしめじと挙動が違うところがありましたが…自分が多重起動して使うタイプでしたし、しめじがデュアルディスプレイ環境で支障を起こさないようになるのはとても良いと思います。

ちなみに、よく見ると多重起動したしめじの並び順もランダムにされているようで、私はそこが個人的にとても気に入りました。当時のしめじは2つ以上起動すると手前に来る順番が固定されてしまっていたので見栄えが悪くなっていたものですから…

みなさんも是非shimeji-eeでお気に入りのしめじを使いやすくしてみてください。
最後に…自分が作ったアイドルマスターシンデレラガールズのshimeji-ee用のしめじを置いておこうと思います。
※公開所はこちらに移動しました
もし「自分でしめじをshimeji-ee環境で作ってみたい」という方は、参考にしてみてくださいね。


この記事が気に入ったらサポートをしてみませんか?