/gohst

Ukagaka SHIORI made by Golang

Primary LanguageGoOtherNOASSERTION

Gohst

Sample Ghost for Ukagaka written in Go with the power of cgo, for my blog post "Cross Compile DLL using Golang on Linux", a part of Go Advent Calender 2017 (Part 4).

Screenshot

Go Advent Calender 2017(その4)の一日目の記事である「Goを使ってDLLをクロスコンパイル on Linux」のサンプルゴーストです。

伺か」というデスクトップアプリケーションに使われるキャラクターの、脳に当たる部分である「」をGoで書きました。 記事で説明したものを基に、ランダムトークしてくれるように書き足しています。

機能

  • かわいい女の子 のソロゴースト とGopherくんです。
  • 奈良阪某さんのgithub.com/Narazaka/shiorigoを使っています。
  • だいたい15〜30秒に一回ぐらいの頻度でランダムトークします。ネタが少ないのは仕様です。
  • 起動時と終了時にも話します。
  • その他の機能はありません。つついても撫でても無反応です。お触りし放題!
  • ベースウェアとの通信ログがベースウェアのゴーストフォルダ内gohst/ghost/master/shiori.logに残ります。
  • 通信はリクエスト・レスポンスともにUTF-8決め打ちですが、ログはShift_JISです。
  • シェルはボトル猫さん作成の超かわいいフリーシェル『pink』を使っています。

Installation

Releasesからnarファイルをダウンロードできますので、お好みのベースウェアを起動してドラッグ&ドロップしてください。

Wine 上の SSP だとなぜか 2回インストールしようとして「上書きしないで別のフォルダ作る?」的なことを聞かれるので「いや、上書き」とお答えください。

動作確認は以下の環境で行っています。

  • SSP 2.4.13 with Wine 1.6.2 (64bit) on Linux Mint 18.2 Sonya Xfce (64bit)

Compilation

コンパイルには以下のものが必要です。

  • Go 1.9.2(たぶん他のバージョンでもWindowsでの-buildmode=c-archieveをサポートしていればコンパイルできます)
  • GCC 5.3.1(たぶん他のバージョンでもコンパイルできます)
  • github.com/Narazaka/shiorigo

Linux/MacでもMinGWを用意すればコンパイルできます。 詳しくは「Goを使ってDLLをクロスコンパイル on Linux」を見てください。

レポジトリをクローン

$ git clone 'https://github.com/kurousada/gohst'
$ cd gohst

必要なパッケージをインストール

$ go get github.com/Narazaki/shiorigo

shiori.dllのコンパイル

$ CGO_ENABLED=1 GOOS="windows" GOARCH="386" CC="gcc" go build -buildmode=c-archive -o libshiori.a
$ gcc -m32 -shared -o shiori.dll shiori.def libshiori.a -Wl,--allow-multiple-definition -static -lstdc++ -lwinmm -lntdll -lws2_32

MinGWのGCCを使う場合はGCCのコマンドや引数、環境変数CCを適切なものにしてください。

narファイル作成

コンパイルしてできたshiori.dllgohst/ghost/master/にコピーし、gohstフォルダをZIP圧縮します。 そして拡張子を.narにすれば完成です。

$ cp shiori.dll gohst/ghost/master/shiori.dll
$ zip -r -q -l gohst.zip gohst                  # -l オプションでLFをCR+LFに変換します。
$ mv gohst.zip gohst.nar                        # narファイルはzipファイルの拡張子を変えただけです。

非Windows環境向けシェルスクリプト

コンパイル〜nar作成までしてくれるシェルスクリプトを用意してあります。 MinGWとGo、zipコマンドがインストールされていればこちらが便利です。

$ chmod +x ./compile.sh  # 実行権限を付与
$ ./compile.sh

Makefile……?なにそれおいし(ry

TODO

  • テストを書く(go testとテスト用のベースウェアエミュレータで書ける?)
  • ゴーストのトークや反応、機能を増やす
  • 相方を見つける(ソロだと基本的に独り言かユーザーさんに話しかける必要があるので……) Gopherくんが相方です!

License

シェル部分(descript.txtsurfaces.txtを除く)はボトル猫さんの著作物です。 また、GopherRenee Frenchさんによってデザインされました。

そのほかのKuro Usadaが作った部分はMIT Licenseにしておきます。