Skip to content

Files

Latest commit

Dec 1, 2017
6922283 · Dec 1, 2017

History

History
101 lines (67 loc) · 5.2 KB

README.md

File metadata and controls

101 lines (67 loc) · 5.2 KB

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にしておきます。