Tag: SSTP’

ゴーストともっと麻雀する

 - by Don

1月も半ば過ぎですが、あけましておめでとうございます。

今年もゴーストと麻雀する

素敵なフリーシェルを見つけて麻雀の相手をしてほしくなったので、ゴーストにしてみました。

ゴーストと麻雀をするの図

※ゴーストと麻雀する方法→ゴーストと麻雀を打てるようになった

麻雀をするだけのゴーストにするにはもったいない素敵なシェルですが、ご容赦くださいませ。

今年もまた素敵なゴーストでデスクトップが賑わうといいなーと思います。

ゴーストと麻雀を打てるようになった

 - by Don

1年前、「ゴーストと麻雀を打ちたかった」で書いたことができるようになりました。

ゴーストと麻雀する

麻雀ソフトの準備

「テナリ君」という麻雀ゲーム・ソフトがありますのでそれを入手します。

以下のアーカイブに入っているtenari.exeをオリジナルのEXEファイルに上書きします。

対戦相手の準備

とりあえず3体のゴーストを作ってみました。

先にゴーストを3体起動しておき、その後tenari.exeを実行すればイベント通知されます。

仕様

送信プロトコルは一部UMP(Universal Mahjong Protocol)を参考にしています。が、そもそも双方向じゃないし実装が難しい部分や通知情報が不十分な部分もあるので大分オレオレ仕様になっています。

概要

ID: OnMahjong
Reference0: バージョン(UKAJONG/0.1)
Reference1: サーバコマンド(gamestart|gameend|...)
Reference2以降: サーバコマンド追加情報

基本的にはこんなイベントが延々と通知されるだけです。Reference1には以下の様なコマンドがあります。

gamestart ゲーム(半荘)開始
Reference2: 席(東|南|西|北)
Reference3: プレイヤー名1
Reference4: プレイヤー名2
Reference5: プレイヤー名3
Reference6: プレイヤー名4
gameend ゲーム終了
Reference2: プレイヤー名1(バイト値,1)点数
Reference3: プレイヤー名2(バイト値,1)点数
Reference4: プレイヤー名3(バイト値,1)点数
Reference5: プレイヤー名4(バイト値,1)点数
kyokustart 一局が始まるときに送る
Reference2: 場風(東|南|西|北)
Reference3: 親(ex.プレイヤー名1)
Reference4: 本場(ex.1)
Reference5: 供託(ex.1000)
kyokuend 一局終了
point プレイヤーの点数を通知する
Reference2: プレイヤー名
Reference3: (=|+|-) =は点数の直指定、+-は増減を意味する
Reference4: 点数
haipai 配牌を配る
Reference2: プレイヤー名
Reference3: 配牌(ex.1m2m3m4p5p6p7s8s9s1z5z6z7z)
dora ドラ表示牌を送る
Reference2: 牌(ex.7z)
tsumo 自摸
Reference2: プレイヤー名(自分)
Reference3: 残り枚数
Reference4: 牌(ex.7z)
sutehai 捨牌
Reference2: プレイヤー名
Reference3: 牌(ex.7z)
say 発声
Reference2: プレイヤー名
Reference3: (chi|pon|kan|ron|tsumo|richi|tenpai|noten)
agari あがり
Reference2: プレイヤー名
Reference3: Reserved(符)(未実装)
Reference4: Reserved(役,ハン数)(未実装)
ryukyoku 流局

課題

現状のSSTPの仕様ではイベント通知に難があります。元々スクリプトの再生が目的だったものに取って付けたようなイベント通知機能が付加されたものがNOTIFY/1.1であり、しかもmateriaは複数ゴースト起動について想定していないため特定のゴーストを指定してイベントを通知することについてSSTPのプロトコルレイヤではカバーされていません(DirectSSTPを使えば送信相手を指定できますがWindows限定になってしまいます)。

2013-12-15 更新。不要なScript通知により台詞が潰れる問題を修正しました。SSP/2.3.13以降が必要となります。

あとはソフト側の問題ですが、実効速度が遅いですね。すぐに固まります。Ruby製であることと元々の麻雀AIのロジックにもよるので仕方ないですが。しかし今回定めた通知プロトコルは「仕様」であって、送信側は何であっても構いません。もっと実行速度が早いソフトでSSTP送信機能を追加したり、たくさんの種類の実装が生まれればより楽しいと思います。私はもう疲れたのでこれ以上はやらないかもしれません。

半ばあきらめていたことがある程度実現できたので大分満足しています。

ゴーストと麻雀を打ちたかった

 - by Don

没ゴの供養塔が建立されたみたいなので、私も1つ祀っておきたいと思います。

麻雀するゴースト

ukajong

世の中にはトランプやリバーシ、スロットから百人一首まで遊べるゴーストが存在しているのに麻雀ができるゴーストがいないなんてデベロパの怠慢だと思うんですよ。でも一から自分で作るとなるとまず不可能なので、オープンソースで公開されている普通の麻雀ゲームアプリをちょっと改造して、要所要所でSSTP NOTIFYでイベント(和了役とか何切ったとか)を通知する形式にしようと考えたのです。

上記画像のアプリはMiHaJongという、HSP製の麻雀ゲームです。以前このブログでHSP製のSSTP送信ツールを晒したことがありましたが、これの準備のためだったのでした。

メリットとか

麻雀本体アプリにとっては、対戦プレイヤーのキャラクタを考えなくてよく、機能に特化できます。それ単品でも普通のゲームとして遊べるわけで、難しいことを考えずにSSTPを垂れ流すだけでよいです。

ゴースト側にとってみれば、アプリから送信される情報を使って色んなことができます。それを使って何をするかはゴーストの裁量に任されるわけで、ゴースト独自に戦績表を記録したり、それを使ってゴースト自身のイベント進行やら好感度やらと連携したり、負けたら服を脱いだりできるという、夢のようなアイディアだと思って頑張ったのですが、HSPめんどいなーということで挫折しました。

JavaとかC#あたりでできたオープンソースの麻雀アプリがあればどなたか教えてください。

HSPでDirectSSTPの送信結果を表示する

 - by Don

前回作ったDirectSSTP送信プログラムがあまりにもひどい出来だったので、修正しました。

ついでにレスポンスの表示を追加。プロパティシステムのデバッグなんかもできると思います。

dsstp_1_1_0.zip

2012-01-15 追記

本体フリーズさせるとか。バグってますね。直しました。

dsstphsp_1_2_0.zip

ヘボいプログラムを作るな

HSPでDirectSSTPを送信する

 - by Don

とある事情により3日前からHSPを勉強しています。

なんとか使い方にも慣れてきて、習作としてDirectSSTPを送信するモジュールを作ってみたので晒してみます。

dsstphsp.zip

起動のタイミングによっては送信できないこともあるので何かバグってるんだと思います。よくわかりません。

今年も残り少なくなって参りました。来年もまた良い年になるといいですね。