entries

麻雀ゴースト正式版公開

 - by Don

雀々BARIBARI Version 1.0.0 を公開しました。

麻雀で遊ぶことができます。同時起動中のゴーストと情報をやり取りすることで多彩な演出を楽しむことができます。

動作環境

SSP
SSP/2.5.05以降でのみ動作します。
ゴーストの使い方 – SSP
初めての方はこちらを参考に導入してください。

サーバーゴースト

雀々BARIBARI
ゴースト本体。
standard
追加シェル。
雀卓用透明バルーン
上記追加シェル専用バルーン。「Nishiki-teki」フォントを使用しますのでそちらを併せてインストールしてください。

クライアントゴースト

雀々BARIBARIと同時起動させてプレイしてください。

そこそこマトモな反応を返すプレイヤーゴースト

雀-リンリン
YAYA製。何を切るかを自身で思考する。守り重視。
雀-チュンチュン
華和梨製。何を切るかを自身で思考する。攻め重視。カン大好き。
雀-ホワンホワン
里々製。何を切るかはサーバーにお任せする。

シンプルなテンプレートゴースト

処理はサーバーに委任して要所要所でそれっぽい反応を返すだけのゴースト。自作ゴーストに取り入れるならこちらがシンプルでおすすめです。

雀白
里々製。
雀発
YAYA製。
雀中
華和梨製。

他所様のゴースト

雀々BARIBARIが採用している伺か特化麻雀通信プロトコル(UKAJONG/0.2)に対応したゴースト。(2021-09-22現在で筆者が捕捉しているもの)

盤上の隅っこで
Lua栞 Kagari/Kotori 製。何を切るかを自身で思考する。

プレイヤーゴーストにおすすめのバルーン

プレイヤーゴーストだけでも3体立たせる必要があるので上向きバルーンがおすすめです。

ゴースト間会話用バルーン「ふきだし7」
はっぷん氏作の神バルーン。ゴースト間コミュニケートを想定したものなので今回の用途にぴったりです。

通信プロトコル

UKADOC Project SHIORI Eventリスト(外部)
UKAJONG/0.2から双方向での通信となります。お任せモードでサーバーがよしなにやってくれますので無理に麻雀AIを自作しなくても大丈夫です。
UMP(Universal Mahjong Protocol)
これをベースに策定していますが厳密に準拠しているわけではないです。参考程度に。

おまけ

MahjongUtil.dll
麻雀に関する機能を提供するSAORIです。雀々BARIBARIや雀-リンリン、雀-チュンチュン等に使われています。

採用ルール

以下は雀々BARIBARIが採用しているルールであり、プロトコル(UKAJONG/0.2)と関連するものではありません。

喰いタン、後付け あり(※1)
形式テンパイ あり(※1)
一発、裏ドラ、槓ドラ あり
ダブロン なし(上家優先)
喰い替え 禁止
フリテンリーチ
ツモ番無しリーチ 不可(残り牌4枚以上で可)
パオ(責任払い) 大三元、大四喜を対象とする
国士無双の暗槓での槍槓 なし
嶺上開花のツモ符 2符とする(※1)
人和 なし(※1)
緑一色の發の要否 不要(※1)
大四喜、四暗刻単騎待ち、
純正九蓮宝燈、国士無双十三面待ち
ダブル役満(※1)

※1…MahjongUtil.dllの仕様です

今後やりたいことなど

気が向いたらやる

  • 牌譜の記録・牌譜再生機能の実装
  • クライアントゴーストからの要求コマンドのバリデーション強化(今は手牌に無い牌も切れる、普通に多牌になる)

諦めた

  • 槍槓(user)。ゴーストは実装済み。半日悩んだけど諦めた。設計からやり直しが必要。
  • 九種么九牌倒牌(ゴースト)。userは実装済み。そもそもコマンドが仕様に無い。UKAJONG/0.3で追加するか。
  • 採用ルールの設定変更。そもそもやりたくない。

やれたらやる(やらない)

  • GHOST以外での(外部アプリによる)サーバーの実装。
  • もっとイケてる仕様(UKAJONG/0.3)の策定。

x-ukagaka-linkを使ってみる

 - by Don

SSP/2.5.12より追加されたx-ukagaka-linkを使ってみようのコーナー。

お約束

  • これを書いている人はセキュリティに関して素人です。
  • SSPの更新履歴にある通り、試験実装の段階です。
  • SSPに新しい機能が実装されたときは、何かしらバグがあると考えるべきです。

準備

今回は「Rポストと狛犬」を使って試していこうと思います。辞書のどこかに以下の記述を追加します。

*OnXUkagakaLinkOpen
>XUkagakaLinkOpen(R0)

*XUkagakaLinkOpenA1
:正解!
:常識だな。

*XUkagakaLinkOpenA2
:正解!
:(11)\__q[https://www.wdic.org/w/TECH/SSP]公式見解\__qである。

*XUkagakaLinkOpenA3
:正解!
:\__q[https://wikiwiki.jp/ukatec/The%20Making%20of%20-nomine.mp4-]世界で唯一の除霊機能付き再生ソフト\__qだ。

実践

問題です。SSPとは何の略でしょう?

  1. Sakura Script Player
  2. しましまぱんちゅ
  3. Salt Sprinkled Player

SSPを起動していない状態で上記のリンクを踏むだけでも訪問者をビビらせることができそうですが、色々と応用が可能と思います。わざわざサイトを訪問してくれたユーザさんにサプライズを仕込むこともできそうです。

セキュリティ

Reference0の内容をそのまま読み上げるような使い方はやめましょう。インターネットには無数のハイパーリンクが張り巡らされています。それら一つ一つが安全であることを確かめながら日々ブラウジングをしている人は少ないでしょう。上記の例もReference0の内容を直接読み上げることは避けています。

もっと具体的な話をすると、Reference0に\![vanish●ymyself]みたいな悪戯を仕込む人がいないとも限りません。

また、栞がYAYAの場合、標準的なテンプレートを使用しているゴーストではシステム辞書レベルで外部からのリクエストに対しては無応答になるよう設定されています(安全のために正しい処置であると思います)。

麻雀ゴーストのballoonを作った

 - by Don

麻雀ゴースト用のballoonを作りました。前回作った追加シェルに合わせたものとなっています。

ghost,shell,balloon3点セットのリンクを並べておきます。

雀々BARIBARI
ゴースト本体。(Assetsを展開するとnarがあります)
standard
追加シェル。
雀卓用透明バルーン
上記追加シェル専用バルーン。「Nishiki-teki」フォントを使用しますのでそちらを先にインストールしてください。

それぞれ独立してネットワーク更新に対応しています。

あとは本体の細部を整えて完成になると思います。別途各種栞による対戦相手AIの作成も検討していく予定です。

麻雀ゴーストのshellを作った

 - by Don

麻雀ゴースト用のshellを作りました。追加シェルという形にして本体とは分離しています。

もう少し弄るかもしれないのでネットワーク更新に対応させました。

サイズがだいぶ大きくて邪魔なのと、balloonでも問題なくゲームをプレイできているのでmasterはそのままにしておこうという考えです。

まだ不具合だらけですが興味のある方はお試しください。

TODO

  • 名前や点数を雀卓内に表示したい
    • 専用バルーンか…

麻雀であれこれするSAORIを作った

 - by Don

MahjongUtil.dll

麻雀ゴーストがまだ製作途中ですが、使用しているSAORIを単体で公開することにしました。

以下のような機能を提供します。麻雀の思考エンジンを作る際には必須の機能と思います。

  • シャンテン数の計算
  • 和了点計算
  • 待ち牌の判定

あまり需要は無さそうですが、興味のある方はお試しください。

何気にSAORIを公開するのは初めてなので、おかしなところがありましたらご指摘いただけると助かります。

麻雀ゴーストが副露に対応した

 - by Don

進捗報告

副露(ポン、チー、カン)を実装しました。以下に挙げる通り修正すべき箇所はたくさんあるのですが、レアケースは無視して完成を急ぐ方針なので、放置しています。

  • 副露の優先順位(ロン>ポン>チー)が未実装
  • userの副露の選択肢が他家(ゴースト)の副露宣言より優先されている
  • 槍槓未実装
  • 流し満貫未実装

優先して実装したいのはshellですね。いい加減balloonでの操作には限界があります。早いところ見た目だけでも麻雀ゲームらしくしたいところです。

麻雀ゴーストが七対子以外にも対応した

 - by Don

進捗報告

前回(初期公開時)、七対子しか対応していなかった麻雀ゴーストが国士無双および一般手に対応しました。前回からおよそ1ヶ月なので、悪くないペースで開発できているのではないかと思います(当初は数年かかると思っていた)。

対戦相手ゴースト達もネットワーク更新し、ひたすら七対子を狙い続けていたのをお任せモードに変更して一般手も狙うようにしました。

今後の予定

  • 副露(ポン、チー、カン)の実装
  • UIをballoonからshellに移管

これらが実装できたら正式公開と呼んでいいのかなと思います。まだまだ先になりそうですが。

ある程度できあがったら思考エンジンの改良もしていきたいですね。ゴースト毎に打ち筋に特徴(個性)を持たせたりして。
シャンテン数の計算等は何度も処理を呼び出す必要があり、高速化が必須だったのでSAORI化することにしました。こちらも完成したら単体で公開できるようにしたいです。
基本機能さえ高速化して提供できていれば特徴(個性)を持たせるのもゴースト(SHIORI)毎にカスタマイズ可能ではないかと考えています。
里々ではさすがにやりたくないのでお任せモードにしますが。

YAYA Tc555-1で追加されたyaya_emerg.txtとは何なのか

 - by Don

まずは最新のYAYAを入手しよう

2021-06-26現在、最新のYAYAはTc555-3です。releasesの一番上から取得してください。

yaya_emerg.txtって何ですか?

YAYA Tc555-1のリリースノートに書いてある通りです。

辞書読み込みエラーが起きた時の緊急フォールバック機能追加
エラーが起きた際に、yaya_emerg.txtを設定ファイルとしてリトライし、最低限の動作を保つのを目的とします。

YAYAは辞書を正確に書かないとゴーストがまったく無反応になってしまうという、里々とは正反対な厳格なSHIORIです。ゴーストマスタはエラーログを確認しながらエラーが起こった箇所を修正してSHIORIをリロードし、無事にまた起動する、といった具合に開発していくことになっています。

あまり無いとは思いますが、うっかりエラーが起こった状態(ゴーストが無反応の状態)でネットワーク更新用のファイルをアップロードしてしまい、それがユーザさんの環境に届いてしまったら大変です。あるいは特定のフォルダの辞書を更新用ファイルに含めるのを忘れた、という場合も考えられます。無反応ですから再度ネットワーク更新で修正する道も断たれてしまいます(SSPならdescript.txtにhomeurlが書けるので、書いてあればなんとかなりますが)。

で、まったく無反応になってしまうのも困るので、最低限の動作(ネットワーク更新ができる、とか)を保ちましょう、という目的で作られたものなわけです。

対応する方法は?

GCさくらでYAYA製各種テンプレートゴーストやSSPBT所属のYAYAゴースト達が怒涛の更新を捕捉されていますが、まさにこの対応のためのようです。今からYAYAでゴーストを作ろうという人は、最新のテンプレートゴーストを使うことで対応可能です。

では既に各種テンプレートゴーストを利用してゴーストを作っていた人たちはどうするか。自分が利用していたテンプレートゴーストに新たに追加された以下のファイルをコピーして使いましょう。

yaya_emerg.txt
緊急時設定ファイル。これが無いと始まらない。テキストエディタで開いてみるとyaya.txtと同じノリで記述されていることがわかります。システム辞書の他に緊急時用の辞書ファイルを読み込む設定になっていると思います。
yaya_emerg_dic.txt等(ファイル名は任意)の緊急時用の辞書ファイル
緊急時用なので凝ったことをしても仕方ありません。とにかくミスの無い、シンプルで余計な記述のない最低限の辞書を用意しましょう。homeurl等は取得できることが望ましいので、別ファイルで用意して通常時と共有するのも良いですね。
yaya_shiori3.dic
もっとも基本となるシステム辞書が更新されています。主にエラーメッセージをSSPのエラーログに送信する機能が追加されています。現在のものに上書きして保存しましょう。

yaya_shiori3.dicにどういった変更がされているのか興味がある人はyaya-dicあたりを覗いてみると楽しいと思います。

よくわからないけど、対応しないとダメ?

んなこたーないっす。ちゃんとした人ならロクに動作確認もしないままネットワーク更新かけたりしません。ちゃんとした人なら。

私はちゃんとした人ですが対応しました。私は元々里々使いだったので、YAYAでもSHIORIリロードをショートカットキー(rキー)に割り当てているのですが、エラーが起きた状態でもrキーでSHIORIリロードが効くように設定しました。エラーを修正する際に便利なのではないかと思います。

麻雀サーバーゴーストを作った

 - by Don

外部アプリとしての麻雀ゲームからのイベント通知を想定した麻雀クライアントゴーストは以前作ったのですが、双方向での通信(何を切るかの問い合わせ等)がやりたかったのでゴーストで麻雀ゲームを作ることにしました。まだ七対子の形式しか対応していませんが、クライアントゴーストとの双方向のやり取りは上手く動いているようなのでキリの良いところで一度晒そうと思い立った次第です。

雀々BARIBARI
麻雀サーバーゴースト。製。まだ七対子しか対応していない。
雀-リンリン
麻雀クライアントゴースト。YAYA製。何を切るかを自身で思考する。
雀-チュンチュン
麻雀クライアントゴースト。華和梨製。何を切るかを自身で思考する。
雀-ホワンホワン
麻雀クライアントゴースト。里々製。何を切るかはサーバーにお任せする。

まだおよそ麻雀と呼べるような代物ではありませんが、七対子しか対応していないが故にかえって麻雀を知らない人の方が楽しめるかもしれません。

ゴースト同士ということで通信に\![raiseother]を使用していますが、昨日の記事にある通り、今後はDirectSSTPを使用した外部アプリケーションとの情報のやり取りにも対応できるよう柔軟な仕様の策定を見据えていきたいです。

夢はどこまでも広がりますが、まずは普通の形式(七対子以外)で和了れるようにしないとですね。

DirectSSTPでWindowsアプリとゴーストが会話できるようになった

 - by Don

SSP 2.5.03 – ばぐとらぶごる

+ "X-SSTP-Return-" ではじまるSHIORIからのレスポンスヘッダをSSTPのレスポンスにそのまま横流しする実験的仕様
例: X-SSTP-Return-Hoge: hogehogehoge

SSP 2.5.05 – ばぐとらぶごる

※ "X-SSTP-Return-" を "X-SSTP-PassThru-" に改名し、レスポンスだけではなくリクエストヘッダにも追加できるようにした。

SSTPを送信した側が、ゴーストからのメッセージを受け取ることができるようになりました。

応用例はいくつか考えられます。

  • 今までは音楽再生アプリが「再生している曲」を通知することしかできなかったが、「再生したい曲」を問い合わせることができるようになった
  • 今までは麻雀ゲームアプリが「何を切ったか」を通知することしかできなかったが、「何を切るか」を問い合わせることができるようになった
  • 今まではスケジュール管理アプリが予定を通知することしかできなかったが、ユーザとのデートの予定を勝手に入れられるようになった

ゴーストがますます主体的に「意思」を持つようになってくるかもしれません。

具体的にどうやるの

DirectSSTP送信テストツールとレスポンスを返すサンプルゴーストを作ってみました。

動いている様子

まだ実験的段階ですし

ゴーストからのレスポンスを利用したアプリがまだこの世には存在していないので焦って対応を考える必要はありません。ただ、ゴーストからのレスポンスを利用したいと考えるアプリケーション作者さんの目に止まればという願いを込めて、サンプルを公開いたしました。どうぞご活用ください。