更新履歴 | |
2022/03 | ページ作成 |
2022/06/12 | 「対局のメタデータ」に「room_id」と「contest_uid」を追記 |
「対局者」にプレイヤーの使用言語判定を追記 | |
2022/06/16 | 「牌譜 - .lq.RecordNewRound」の「doras」に追記 |
「牌譜 - .lq.RecordDealTile」を大幅に更新 | |
2022/06/20 | 「牌譜 - .lq.RecordDiscardTile」を記述 |
2022/06/25 | 「対局者」の表の「item_id」行に、アイテム一覧へのリンクを追記 |
2022/06/27 | 「牌譜 - .lq.RecordChiPengGang」を記述 |
「牌譜 - user_input - operation」の「type: 1 のサンプル」の表の「tile_state」行を更新 | |
2022/06/28 | 「牌譜 - .lq.RecordAnGangAddGang」を記述 |
「牌譜 - .lq.RecordBaBei」を記述 | |
「牌譜 - result」の「別表:resultのname」に「.lq.RecordNewCard」を追記 | |
2022/06/29 | 「牌譜 - .lq.RecordHule」を記述 |
概要
「牌譜をファイルに保存するにゃ」でダウンロードした牌譜ファイルの読み方を解説するにゃ!
主に、段位戦の牌譜を解説するにゃ!
段位戦以外の牌譜についても、少しだけ触れるにゃ!
なお、サンプルとして使用している牌譜データには、解説の都合上、編集を加えているにゃ!
牌譜の形式
牌譜データには複数の形式が確認されているにゃ!
将来のアップデートで、新しい形式が登場するかもしれないにゃ!
番号 | 時期 | かんたんな説明 |
1 | ~2019/12/31 | 対局の情報と、牌譜データが、分離されているにゃ! |
2 | 2020/01/01 ~ 2021/07/28 | 対局の情報と、牌譜データが、一体になったにゃ! |
3 | 2021/07/28~ | 牌譜データに、煽りスタンプ情報や、操作情報などが加わったにゃ! |
「牌譜をファイルに保存するにゃ」でダウンロードした牌譜は、1番と2番が同じ形式になるように整形しているにゃ!
牌譜ダウンロードを自前のプログラムで行おうとする猫以外は、1番と2番を区別しなくていいにゃ!
3番は、1~2番に、いろいろな情報を付け加えたものにゃ!
3番の牌譜が読めるようになれば、1~2番の牌譜も読めるにゃ!
なので、このページでは、3番の牌譜の解説をするにゃ!
牌譜解析を自前のプログラムで行おうとする猫は、1~3それぞれの形式に対応する必要があるにゃ!
1~3の違いについては、「牌譜 - バージョン差異」の項でも解説するにゃ!
対局のメタデータ
牌譜ファイルを先頭から読んでいくにゃ!
"head": { "uuid": "220317-********-****-****-****-************", "start_time": 164745****, "end_time": 164745****, "config": { "category": 2, "mode": { "mode": 2, "detail_rule": {} }, "meta": { "mode_id": 16 } }, "accounts": [ いったん省略にゃ! ], "result": { いったん省略にゃ! } },
キー | 説明 | 参照 |
head | 対局に関する情報が記されているにゃ! | ResGameRecord |
uuid | 対局に割り振られた、固有のIDにゃ!先頭6桁は対局を開始した日付にゃ!ただし日本時間ではなく中国時間にゃ! | RecordGame |
start_time | 対局の開始日時にゃ!地球の共通時刻の1970年1月1日0時からの経過秒数にゃ!UNIX時間というものにゃ! | RecordGame |
end_time | 対局の終了日時にゃ!地球の共通時刻の1970年1月1日0時からの経過秒数にゃ!UNIX時間というものにゃ! | RecordGame |
config | 対局の種類やルールにゃ! | GameConfig |
category | マッチング対戦かどうかが記されているにゃ!「2」は、段位戦などのようなマッチング対戦を意味するにゃ! | GameConfig |
mode | 東風戦か半荘戦か、詳細ルールが設定されているか、などが記されているにゃ! | GameMode |
mode | 「mode」の次にも「mode」が存在するにゃ!「2」は、半荘戦を意味するにゃ!東風戦だと「1」にゃ! | GameMode |
detail_rule | 友人戦などの場合、「喰い断アリ/ナシ」などの対局ルールの情報がここに並ぶにゃ!段位戦の場合は、何も書かれていないにゃ! | GameDetailRule |
meta | 友人戦の部屋番号、段位戦の部屋、などが記されているにゃ! | GameMetaData |
room_id | 友人戦の部屋番号にゃ! | GameMetaData |
mode_id | 段位戦の部屋、東風戦/半荘戦、などを意味する番号にゃ!「ゲームメタモード」のページを見るにゃ! | GameMetaData |
contest_uid | 大会戦の内部IDにゃ!大会ロビーに表示される大会IDとは異なるにゃ! | GameMetaData |
accounts | 対局者についての情報にゃ!「対局者」の項で説明するにゃ! | RecordGame.AccountInfo |
result | 対局結果スコア、段位戦ポイント増減、コイン収支、などの情報にゃ!「対局結果」の項で説明するにゃ! | GameEndResult |
対局者
「対局のメタデータ」で省略した「accounts」について説明するにゃ!
"accounts": [ { "account_id": ********, "seat": 0, "nickname": "★★★★", "avatar_id": 403602, "character": { "charid": 200036, "level": 5, "exp": 0, "skin": 403602, "is_upgraded": true, "extra_emoji": [ 990, 10, 11, 12 ] }, "title": 600032, "level": { "id": 10501, "score": 1982 }, "level3": { "id": 20202, "score": 453 }, "avatar_frame": 0, "verified": 0, "views": [ { "slot": 0, "item_id": ****** }, 省略にゃ! ] }, 省略にゃ! ],
キー | 説明 | 参照 |
accounts | 対局者についての情報にゃ!四麻ならば4人分、三麻ならば3人分の情報が並ぶにゃ!CPUが参加していても、CPUの情報は記されないにゃ! | RecordGame.AccountInfo |
account_id | 対局者の固有のIDにゃ!名前を変更しても、このIDは変わらないにゃ! | RecordGame.AccountInfo |
seat | どの席かを示しているにゃ!「0」は起家にゃ!「席」のページを見るにゃ! | RecordGame.AccountInfo |
nickname | 対局者の名前にゃ!将来名前を変更したとしても、ここには対局時の名前が記録されているにゃ! | RecordGame.AccountInfo |
avatar_id | 使用キャラクタと着せ替えのIDにゃ!「403602」は契約済みの天江衣にゃ!「着せ替え」のページを見るにゃ! | RecordGame.AccountInfo |
character | 使用キャラクタについての情報にゃ! | Character |
charid | 使用キャラクタのIDにゃ!「200036」は天江衣にゃ!「キャラクタ」のページを見るにゃ! | Character |
level | キャラクタとの絆レベルにゃ!「5」はレベルMAXにゃ! | Character |
exp | 現在の絆ポイントにゃ! | Character |
skin | 使用キャラクタと着せ替えのIDにゃ!「avatar_id」と同じ値にゃ!「着せ替え」のページを見るにゃ! | Character |
is_upgraded | キャラクタと契約済みかどうかにゃ!「true」は契約済み、「false」は未契約にゃ! | Character |
extra_emoji | 使用可能な追加スタンプの情報にゃ!「スタンプ」のページを見るにゃ! | Character |
title | 称号にゃ!「600032」は「連勝の道」にゃ!強そうな称号で相手を威圧するにゃ!「称号」のページを見るにゃ! | RecordGame.AccountInfo |
level | 四麻の段位情報にゃ! | AccountLevel |
id | 四麻の段位にゃ!「10501」は「雀聖1」様にゃ!「段位」のページを見るにゃ! | AccountLevel |
score | 四麻の段位ポイントにゃ!昇段戦かどうか、降段戦かどうか、がわかるにゃ! | AccountLevel |
level3 | 三麻の段位情報にゃ! | AccountLevel |
id | 三麻の段位にゃ!「20202」は「雀士2」にゃ!「段位」のページを見るにゃ! | AccountLevel |
score | 三麻の段位ポイントにゃ!昇段戦かどうか、降段戦かどうか、がわかるにゃ! | AccountLevel |
avatar_frame | 使用しているアイコンフレームにゃ!「アイコンフレーム」のページを見るにゃ! | RecordGame.AccountInfo |
verified | 公認プレイヤーかどうかにゃ!「0」は一般人にゃ!「1」は「にくきゅうま~く」付きにゃ!「2」はプロ雀士認定マーク付きにゃ! | RecordGame.AccountInfo |
views | 装備している装飾品の情報にゃ! | ViewSlot |
slot | 装飾品の種類にゃ!「0」は立直棒にゃ!「1」は和了演出、「2」は立直演出、…と続くにゃ! | ViewSlot |
item_id | 装備している装飾品のIDにゃ!「アイテム」のページを見るにゃ! | ViewSlot |
「account_id」から、プレイヤーがどの言語で雀魂をプレイしているかがわかるにゃ!
計算式は次のとおりにゃ!
account_id ÷ 8388608
上記計算結果が7未満ならば中国語にゃ!
7以上13未満ならば日本語にゃ!
13以上15未満ならば英語にゃ!
対局結果
「対局のメタデータ」で省略した「result」について説明するにゃ!
"result": { "players": [ { "seat": 3, "total_point": 63600, "part_point_1": 73600, "part_point_2": 0, "grading_score": 184, "gold": 17472 }, { "seat": 0, "total_point": -4200, "part_point_1": 15800, "part_point_2": 0, "grading_score": 56, "gold": -1176 }, { "seat": 2, "total_point": -18200, "part_point_1": 11800, "part_point_2": 0, "grading_score": -20, "gold": -5096 }, { "seat": 1, "total_point": -41200, "part_point_1": -1200, "part_point_2": 0, "grading_score": -50, "gold": -11200 } ] }
キー | 説明 | 参照 |
result | 対局結果スコア、段位戦ポイント増減、コイン収支、などの情報にゃ! | GameEndResult |
players | 対局者のスコアなどの情報にゃ!四麻ならば4人分、三麻ならば3人分の情報が並ぶにゃ!並び順は順位を表しているにゃ!段位戦で同点の場合は、席順で順位が決まるにゃ! | GameEndResult.PlayerItem |
seat | 席にゃ!「席」のページを見るにゃ! | GameEndResult.PlayerItem |
total_point | ウマとオカを加算した点数にゃ!段位戦四麻のウマは「5-15」にゃ!オカは無しにゃ!1位は+15,000点、2位は+5,000点、3位は-5,000点、4位は-15,000点にゃ!最初から持っていた25,000点は返してしまうのでマイナスするにゃ! | GameEndResult.PlayerItem |
part_point_1 | 対局で点棒をやり取りした結果の点数にゃ! | GameEndResult.PlayerItem |
part_point_2 | 不明にゃ! | GameEndResult.PlayerItem |
grading_score | 段位ポイントや魂珠の増減にゃ!魂珠の場合は100で割った数字が画面に表示されるにゃ!胃が痛くなる数字にゃ! | GameEndResult.PlayerItem |
gold | コイン収支にゃ! | GameEndResult.PlayerItem |
牌譜 - バージョン差異
「牌譜の形式」に書いたように、牌譜にはバージョン差異があるにゃ!
説明するにゃ!
{ 省略 "data": { "name": ".lq.GameDetailRecords", "data": { "records": [ 省略 ] "version": 210715, "actions": [ 省略 ] } }, "data_url": "" }
キー | 説明 | 参照 |
data | 2020年以降の対局については、ここに牌譜が記録されているにゃ!2019年以前の対局については、本来ここは空っぽにゃ!でも、「牌譜をファイルに保存するにゃ」のページで紹介した方法でダウンロードした2019年以前の牌譜ファイルの場合は、ここに牌譜データを埋め込んでいるにゃ! | ResGameRecord |
name | 牌譜のデータ形式の名前にゃ!「".lq.GameDetailRecords"」で固定にゃ! | Wrapper |
data | 「".lq.GameDetailRecords"」のデータがここに記されているにゃ! | Wrapper |
records | 2021年7月28日アップデート以前の対局については、ここに牌譜が記録されているにゃ!2021年7月28日アップデート以降の対局については、ここは空っぽにゃ! | GameDetailRecords |
version | 2021年7月28日アップデート以前の対局については、ここは空っぽにゃ!2021年7月28日アップデート以降の対局については、「210715」で固定にゃ! | GameDetailRecords |
actions | 2021年7月28日アップデート以前の対局については、ここは空っぽにゃ!2021年7月28日アップデート以降の対局については、ここに牌譜が記録されているにゃ! | GameDetailRecords |
data_url | 2019年以前の対局については、牌譜データの場所を示すURLが書かれているにゃ!2020年以降の対局については、ここは空っぽにゃ! | ResGameRecord |
牌譜 - 基本
2021年7月28日アップデート以降の牌譜にだけ出てくるデータ形式を説明するにゃ!
とても大切なデータ形式なので、よく読んで、丸暗記するにゃ!
{ "passed": ******, "type": *, "result": { 省略にゃ! } "user_input": { 省略にゃ! } "user_event": { 省略にゃ! } "game_event": * },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | どんなデータがこの次に記されているかを示す値にゃ!1~4のどれかにゃ! | - |
result | 牌山、配牌、自摸、打牌、鳴き、和了、流局、などなどのデータ記されているにゃ!ここが読めるようになれば、雀魂の牌譜読みはマスターにゃ!「牌譜 - result」の項で詳しく説明するにゃ! | - |
user_input | プレイヤーの操作に関する情報が記されているにゃ!「牌譜 - user_input」の項で詳しく説明するにゃ! | - |
user_event | プレイヤーの回線接続/回線切断について記されているにゃ!「牌譜 - user_event」の項で詳しく説明するにゃ! | - |
game_event | 対局の開始/終了について記されているにゃ!「牌譜 - game_event」の項で詳しく説明するにゃ! | - |
牌譜 - game_event
「牌譜 - 基本」の項で説明した「type」が「4」の場合、「game_event」というキーが値を持っているにゃ!
「game_event」は、対局開始か対局終了をあらわしているにゃ!
それぞれのサンプルを紹介するにゃ!
{ "passed": 11116, "type": 4, "game_event": 1 },
{ "passed": 2021632, "type": 4, "game_event": 2 }
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「4」の場合、「game_event」が値を持っているにゃ! | - |
game_event | 「1」は対局開始を意味しているにゃ!「2」は対局終了を意味しているにゃ! | - |
牌譜 - user_event
「牌譜 - 基本」の項で説明した「type」が「3」の場合、「user_event 」というキーが値を持っているにゃ!
「user_event」は、プレイヤーの回線接続か回線切断をあらわしているにゃ!
それぞれのサンプルを紹介するにゃ!
{ "passed": 4857, "type": 3, "user_event": { "seat": 0, "type": 1 } },
{ "passed": 659302, "type": 3, "user_event": { "seat": 2, "type": 2 } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「3」の場合、「user_event」が値を持っているにゃ! | - |
user_event | 回線接続/回線切断の際にあらわれるデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 「1」はプレイヤーの回線が接続したことを意味しているにゃ!「2」はプレイヤーの回線が切断したことを意味しているにゃ! | - |
牌譜 - user_input
「牌譜 - 基本」の項で説明した「type」が「2」の場合、「user_input」というキーが値を持っているにゃ!
「user_input」は、プレイヤーの操作をあらわしているにゃ!
{ "passed": ******, "type": 2, "user_input": { "seat": *, "type": *, 省略にゃ! } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「2」の場合、「user_input」が値を持っているにゃ! | - |
user_input | プレイヤーの操作をあらわすデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 別表で説明するにゃ! | - |
[別表:user_inputのtype]
type | 説明 |
1 | 対局中のスタンプ表示にゃ!「スタンプ」のページを見るにゃ! |
2 | 自分の順番での操作にゃ!打牌、暗槓、加槓、立直、自摸和了、九種九牌、などにゃ!「牌譜 - user_input - operation」の項で詳しく説明するにゃ! |
3 | 他家の順番での操作にゃ!チー、ポン、大明槓、ロン、などにゃ!「牌譜 - user_input - cpg」の項で詳しく説明するにゃ! |
4 | N/A |
5 | 1局が終了し、次局の準備ができたときにゃ! |
6 | 離席から戻り、操作再開したときにゃ! |
7 | 対局を開始するときにゃ! |
8 | 回線切断したプレイヤーが復帰したときにゃ!type「9」とセットであらわれるにゃ! |
9 | 回線切断したプレイヤーが復帰したときにゃ!type「8」とセットであらわれるにゃ! |
[type: 1 のサンプル]
{ "passed": 112740, "type": 2, "user_input": { "seat": 1, "type": 1, "emo": 0 } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「2」の場合、「user_input」が値を持っているにゃ! | - |
user_input | プレイヤーの操作をあらわすデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 「1」の場合、「emo」が値を持っているにゃ! | - |
emo | 表示されたスタンプにゃ!「スタンプ」のページを見るにゃ! | - |
[type: 7 のサンプル(type: 5 と 6 と 8 と 9 も同形式)]
{ "passed": 8414, "type": 2, "user_input": { "seat": 2, "type": 7 } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「2」の場合、「user_input」が値を持っているにゃ! | - |
user_input | プレイヤーの操作をあらわすデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 「7」は、ローディング画面と「勝負」画面(対局開始画面)が完了して操作可能になったことを意味するにゃ!「5」は、和了や流局の画面で「確認」ボタンを押して、次局の操作が可能になったことを意味するにゃ!「6」は離席から戻った場合、「8」と「9」は回線切断から復帰した場合にゃ! | - |
牌譜 - user_input - operation
「牌譜 - user_input」の項で説明した「type」が「2」の場合、「operation」というキーが値を持っているにゃ!
「operation」は、自分の順番での操作をあらわしているにゃ!
{ "passed": ******, "type": 2, "user_input": { "seat": *, "type": 2, "operation": { "type": *, 省略にゃ! } } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「2」の場合、「user_input」が値を持っているにゃ! | - |
user_input | プレイヤーの操作をあらわすデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 「2」の場合、「operation」が値を持っているにゃ! | - |
operation | 自分の順番での操作をあらわすデータにゃ! | - |
type | 別表で説明するにゃ! | - |
[別表:operationのtype]
type | 説明 |
1 | 打牌にゃ! |
4 | 暗槓にゃ! |
6 | 加槓にゃ! |
7 | 立直にゃ! |
8 | 自摸和了にゃ! |
10 | 九種九牌にゃ! |
11 | 三麻の北抜きにゃ! |
12 | 赤血の戦や修羅の戦における牌交換にゃ! |
13 | 赤血の戦における絶一門縛りにゃ!「gap_type」が0の場合は筒子、1の場合は萬子、2の場合は索子の絶一門にゃ! |
14 | 闇夜の戦における闇牌にゃ! |
16 | 闇夜の戦における闇維持にゃ! |
17 | 闇夜の戦における闇牌立直にゃ! |
無し | キャンセル操作にゃ!立直後の自摸和了キャンセル、立直後の暗槓キャンセル、立直後の闇牌キャンセル、闇維持キャンセル、などにゃ! |
[type: 1 のサンプル (type: 7 も同形式)]
{ "passed": 21161, "type": 2, "user_input": { "seat": 0, "type": 2, "operation": { "type": 1, "tile": "4z", "moqie": false, "timeuse": 3, "tile_state": 0 } } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「2」の場合、「user_input」が値を持っているにゃ! | - |
user_input | プレイヤーの操作をあらわすデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 「2」の場合、「operation」が値を持っているにゃ! | - |
operation | 自分の順番での操作をあらわすデータにゃ! | - |
type | 「1」は、プレイヤーが打牌操作をしたことを意味しているにゃ!「7」は,立直宣言直後の打牌操作を意味しているにゃ!なお、立直後は操作無しで自動打牌されるので、立直後の自動打牌については、「1」は牌譜に出現しないにゃ! | - |
tile | 河に捨てた牌にゃ!「4z」は北にゃ!萬子は1m~9m、筒子は1p~9p、索子は1s~9s、東南西北白発中は1z~7zと表記されるにゃ!赤牌は0m、0p、0sとなるにゃ!明鏡の戦の透け透け牌は、末尾にtを付けて、1mtというふうになるにゃ! | - |
moqie | 自摸切りかどうかをあらわしているにゃ!「true」は自摸切り、「false」は手出しにゃ! | - |
timeuse | 打牌するまでに使った思考時間にゃ!単位は秒にゃ! | - |
tile_state | 段位戦では数値は「0」で固定にゃ!友人戦などで「手牌表示」を「有効」にした場合、数値は「1」になるにゃ!ごく稀に、この値を持たない牌譜が存在するにゃ!詳しくは「イレギュラーな牌譜」の項で説明するにゃ! | - |
[type: 4 のサンプル(type: 6 も同形式)]
{ "passed": 833726, "type": 2, "user_input": { "seat": 3, "type": 2, "operation": { "type": 4, "index": 1, "timeuse": 4 } } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「2」の場合、「user_input」が値を持っているにゃ! | - |
user_input | プレイヤーの操作をあらわすデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 「2」の場合、「operation」が値を持っているにゃ! | - |
operation | 自分の順番での操作をあらわすデータにゃ! | - |
type | 「4」は、暗槓にゃ!「6」は、加槓にゃ! | - |
index | 槓できるパターンが複数ある場合に、何番目のパターンを槓したかをあらわすにゃ!たとえば、「一二三東東東南南南西 一一一(ポン)」の状態で「東」を自摸ってきた場合、「一」を加槓すると「index」は「0」になるにゃ!「東」を暗槓すると「index」は「1」になるにゃ! | - |
timeuse | 槓するまでに使った思考時間にゃ!単位は秒にゃ! | - |
[type: 8 のサンプル]
{ "passed": 1023759, "type": 2, "user_input": { "seat": 1, "type": 2, "operation": { "type": 8, "index": 0, "timeuse": 1 } } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「2」の場合、「user_input」が値を持っているにゃ! | - |
user_input | プレイヤーの操作をあらわすデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 「2」の場合、「operation」が値を持っているにゃ! | - |
operation | 自分の順番での操作をあらわすデータにゃ! | - |
type | 「8」は、自摸和了にゃ! | - |
index | 不明にゃ!ここが「0」以外の牌譜は見たことないにゃ! | - |
timeuse | 和了するまでに使った思考時間にゃ!単位は秒にゃ!「自動和了」をオンにしていた場合は、「timeuse」は記録されていないにゃ! | - |
[キャンセル操作のサンプル]
{ "passed": 2706174, "type": 2, "user_input": { "seat": 2, "type": 2, "operation": { "cancel_operation": true, "timeuse": 1 } } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「2」の場合、「user_input」が値を持っているにゃ! | - |
user_input | プレイヤーの操作をあらわすデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 「2」の場合、「operation」が値を持っているにゃ! | - |
operation | 自分の順番での操作をあらわすデータにゃ! | - |
cancel_operation | キャンセル操作をした場合は、「true」と記されているにゃ!立直後にド安めを自摸ったので和了拒否したなどという場合に記録されるにゃ! | - |
timeuse | キャンセルするまでに使った思考時間にゃ!単位は秒にゃ! | - |
牌譜 - user_input - cpg
「牌譜 - user_input」の項で説明した「type」が「3」の場合、「cpg」というキーが値を持っているにゃ!
「cpg」は、他家の順番での操作をあらわしているにゃ!
なお、「cpg」とは、「Chi Peng Gang」(チー、ポン、カン)の略にゃ!
{ "passed": ******, "type": 2, "user_input": { "seat": *, "type": 3, "cpg": { "type": *, 省略にゃ! } } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「2」の場合、「user_input」が値を持っているにゃ! | - |
user_input | プレイヤーの操作をあらわすデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 「3」の場合、「cpg」が値を持っているにゃ! | - |
cpg | 他家の順番での操作をあらわすデータにゃ! | - |
type | 別表で説明するにゃ! | - |
[別表:cpgのtype]
type | 説明 |
2 | チーにゃ! |
3 | ポンにゃ! |
5 | 大明槓にゃ! |
9 | ロンにゃ! |
15 | 闇夜の戦における照射にゃ!なお、複数プレイヤーが照射を実行した場合は、実行の早さではなく、闇牌実行者から反時計回りで近いプレイヤーの照射が優先されるにゃ! |
無し | キャンセル操作にゃ! |
[type: 2 のサンプル(type: 3 と 5 も同形式)]
{ "passed": 116602, "type": 2, "user_input": { "seat": 1, "type": 3, "cpg": { "type": 2, "index": 0, "timeuse": 2 } } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「2」の場合、「user_input」が値を持っているにゃ! | - |
user_input | プレイヤーの操作をあらわすデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 「3」の場合、「cpg」が値を持っているにゃ! | - |
cpg | 他家の順番での操作をあらわすデータにゃ! | - |
type | 「2」は、チーにゃ!「3」は、ポンにゃ!「5」は、大明槓にゃ! | - |
index | 鳴きのパターンが複数ある場合に、何番目のパターンで鳴いたかをあらわすにゃ! | - |
timeuse | 鳴くまでに使った思考時間にゃ!単位は秒にゃ! | - |
[type: 9 のサンプル]
{ "passed": 213274, "type": 2, "user_input": { "seat": 3, "type": 3, "cpg": { "type": 9, "index": 0, "timeuse": 2 } } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「2」の場合、「user_input」が値を持っているにゃ! | - |
user_input | プレイヤーの操作をあらわすデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 「3」の場合、「cpg」が値を持っているにゃ! | - |
cpg | 他家の順番での操作をあらわすデータにゃ! | - |
type | 「9」は、ロンにゃ! | - |
index | 不明にゃ!ここが「0」以外の牌譜は見たことないにゃ! | - |
timeuse | ロンするまでに使った思考時間にゃ!単位は秒にゃ!溜めロンはしっかり記録されているにゃ!「自動和了」をオンにしていた場合は、「timeuse」は記録されていないにゃ! | - |
[キャンセル操作のサンプル]
{ "passed": 242019, "type": 2, "user_input": { "seat": 3, "type": 3, "cpg": { "cancel_operation": true, "timeuse": 0 } } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「2」の場合、「user_input」が値を持っているにゃ! | - |
user_input | プレイヤーの操作をあらわすデータにゃ! | - |
seat | 席にゃ!「席」のページを見るにゃ! | - |
type | 「3」の場合、「cpg」が値を持っているにゃ! | - |
cpg | 他家の順番での操作をあらわすデータにゃ! | - |
cancel_operation | キャンセル操作をした場合は、「true」と記されているにゃ! | - |
timeuse | キャンセルするまでに使った思考時間にゃ!単位は秒にゃ! | - |
牌譜 - result
「牌譜 - 基本」の項で説明した「type」が「1」の場合、「result」というキーが値を持っているにゃ!
「result」は、牌山、配牌、自摸、打牌、鳴き、和了、流局、などなどをあらわしているにゃ!
いちばん牌譜らしいデータにゃ!
{ "passed": ******, "type": 1, "result": { "name": ".lq.RecordXXXXXXXX", "data": { 省略にゃ! } } },
キー | 説明 | 参照 |
passed | 牌譜記録開始からの経過時間にゃ!単位はミリ秒にゃ! | - |
type | 「1」の場合、「result」が値を持っているにゃ! | - |
result | 牌山、配牌、自摸、打牌、鳴き、和了、流局、などなどをあらわすデータにゃ! | - |
name | 下行のdataの種類をあらわす名称にゃ!別表で説明するにゃ! | - |
data | データ本体にゃ! | - |
[別表:resultのname]
name | 説明 | 参照 |
.lq.RecordNewRound | 対局開始にゃ!「牌譜 - .lq.RecordNewRound」の項で詳しく説明するにゃ! | RecordNewRound |
.lq.RecordDealTile | 自摸にゃ!「牌譜 - .lq.RecordDealTile」の項で詳しく説明するにゃ! | RecordDealTile |
.lq.RecordDiscardTile | 打牌にゃ!「牌譜 - .lq.RecordDiscardTile」の項で詳しく説明するにゃ! | RecordDiscardTile |
.lq.RecordChiPengGang | チー、ポン、大明槓にゃ!「牌譜 - .lq.RecordChiPengGang」の項で詳しく説明するにゃ! | RecordChiPengGang |
.lq.RecordAnGangAddGang | 暗槓、加槓にゃ!「牌譜 - .lq.RecordAnGangAddGang」の項で詳しく説明するにゃ! | RecordAnGangAddGang |
.lq.RecordBaBei | 三麻の北抜きにゃ!「牌譜 - .lq.RecordBaBei」の項で詳しく説明するにゃ! | RecordBaBei |
.lq.RecordHule | 和了にゃ!「牌譜 - .lq.RecordHule」の項で詳しく説明するにゃ! | RecordHule |
.lq.RecordHuleXueZhanMid | 「XueZhan」を漢字で書くと「血戦」にゃ!赤血の戦や修羅の戦における途中和了にゃ! | RecordHuleXueZhanMid |
.lq.RecordHuleXueZhanEnd | 「XueZhan」を漢字で書くと「血戦」にゃ!赤血の戦や修羅の戦における最終和了にゃ! | RecordHuleXueZhanEnd |
.lq.RecordNoTile | 荒牌平局にゃ!「牌譜 - .lq.RecordNoTile」の項で詳しく説明するにゃ! | RecordNoTile |
.lq.RecordLiuJu | 途中流局にゃ!「牌譜 - .lq.RecordLiuJu」の項で詳しく説明するにゃ! | RecordLiuJu |
.lq.RecordChangeTile | 赤血の戦や修羅の戦における手牌交換にゃ! | RecordChangeTile |
.lq.RecordRevealTile | 闇夜の戦における闇牌にゃ! | - |
.lq.RecordUnveilTile | 闇夜の戦における照射にゃ! | - |
.lq.RecordLockTile | 闇夜の戦における、闇牌/照射/闇維持の結果確定にゃ! | - |
.lq.RecordSelectGap | 赤血の戦における絶一門縛りにゃ! | - |
.lq.RecordGangResult | 赤血の戦における、カンによる点数移動にゃ! | - |
.lq.RecordGangResultEnd | 不明にゃ!データ型は定義されているけれど、実際に出現する牌譜は見たことないにゃ!名前から推測すると、赤血の戦において、カンをした結果の点数移動でトビが発生してゲーム終了した場合かにゃ?誰か検証してほしいにゃ! | - |
.lq.RecordNewCard | 幻界の戦におけるカードにゃ! | - |
牌譜 - .lq.RecordNewRound
「牌譜 - result」の項で説明した「name」が「.lq.RecordNewRound」の場合について説明するにゃ!
各局の開始時に一度だけ出現するデータ形式にゃ!
配牌や牌山の情報が記されているにゃ!
"name": ".lq.RecordNewRound", "data": { "chang": 0, "ju": 0, "ben": 0, "scores": [ 25000, 25000, 25000, 25000 ], "liqibang": 0, "tiles0": [ "1m", "2m", "5m", "7m", "8m", "9m", "2p", "4p", "6p", "7p", "5s", "6s", "9s", "3z" ], "tiles1": [ 省略にゃ! ], "tiles2": [ 省略にゃ! ], "tiles3": [ 省略にゃ! ], "tingpai": [ 省略にゃ! ], "operation": { "seat": 0, "operation_list": [ { "type": 1 } ], "time_add": 20000, "time_fixed": 8000 }, "md5": "945cee39977910189752dbf58117a4b0", "paishan": "1m2m8p3m6s6z7s7z4s2p1p8p3p7s1z7p3s0s4z9p7s7z3z3s6p9m8s7z2s6s9s4m6s5p1z3z2m9m2z5z1s2s6m7p2s3p7z8s1z7m7m1m1p5s1s6p2p6z3z9p0p8s1p1s4z4s4m9m8p6m1s0m3m8p4p6m4s4p5z9s6z9s2z", "left_tile_count": 69, "doras": [ "5z" ], "opens": [ { "seat": 0 }, { "seat": 1 }, { "seat": 2 }, { "seat": 3 } ] }
キー | 説明 | 参照 |
name | データ形式の名前にゃ!この表では「".lq.RecordNewRound"」のデータについて説明するにゃ! | Wrapper |
data | ここから下に、データが書かれているにゃ! | Wrapper |
chang | 「0」は東場にゃ!「1」は南場にゃ!「2」は西場にゃ! | RecordNewRound |
ju | 各場において何局目かをあらわしているにゃ!「0」から数え始めるにゃ!「0」は各場の1局、「1」は各場の2局、「2」は各場の3局、「3」は各場の4局、となるにゃ! | RecordNewRound |
ben | 何本場かをあらわしているにゃ!「0」は0本場にゃ! | RecordNewRound |
scores | 各局開始時の各家の持ち点にゃ!1番上が起家の持ち点にゃ!2番目以下は、起家から見て反時計回りに各家の持ち点をあらわしているにゃ! | RecordNewRound |
liqibang | 供託の本数にゃ!立直後に流局すると、供託が貯まっていくにゃ! | RecordNewRound |
tiles0 | 起家の配牌にゃ!親だと14枚、子だと13枚にゃ!萬子は1m~9m、筒子は1p~9p、索子は1s~9s、東南西北白発中は1z~7zと表記されるにゃ!赤牌は0m、0p、0sとなるにゃ!明鏡の戦の透け透け牌は、末尾にtを付けて、1mtというふうになるにゃ! | RecordNewRound |
tiles1 | 起家の下家の配牌にゃ!親だと14枚、子だと13枚にゃ! | RecordNewRound |
tiles2 | 起家の対面の配牌にゃ!親だと14枚、子だと13枚にゃ! | RecordNewRound |
tiles3 | 起家の上家の配牌にゃ!親だと14枚、子だと13枚にゃ! | RecordNewRound |
tingpai | 配牌時のテンパイ情報にゃ!誰もテンパイしていない場合はこのキーは出てこないにゃ!親が14枚の配牌ですでに和了形(すなわち天和)となっていても、理牌した手牌の一番右端の牌を待ち牌とするテンパイとみなされるにゃ!配牌時テンパイとは、親ならば、天和確定か、またはダブル立直確定ということにゃ!子ならば、地和チャンスか、またはダブル立直チャンスということにゃ! | RecordNewRound.TingPai |
operation | 配牌時に可能な操作一覧が、ここから下に書かれているにゃ!多くの場合は、可能な操作は打牌選択だけにゃ!天和、親のダブル立直、配牌直後の親の暗槓、配牌直後の親の北抜き、九種九牌、などが可能な場合は、ここに記述されるにゃ! | OptionalOperationList |
seat | 席にゃ!「席」のページを見るにゃ! | OptionalOperationList |
operation_list | 配牌時に可能な操作一覧がここに記されているにゃ! | OptionalOperation |
type | 配牌時に可能な操作一覧にゃ!別表で説明するにゃ! | OptionalOperation |
time_add | 操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!段位戦での長考時間は20秒にゃ!時間を消費すると減ってゆくにゃ! | OptionalOperationList |
time_fixed | 操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!段位戦では通常は1手あたり5秒が与えられるけれど、親の初手だけは8秒与えられるにゃ! | OptionalOperationList |
md5 | 牌山コードにゃ!対局中に、画面左上のドラ表示欄をクリックすると表示されるにゃ!牌山から生成されたハッシュ値にゃ! | RecordNewRound |
paishan | 牌山にゃ!左から順に自摸ってゆくにゃ!右から14枚は王牌にゃ!萬子は1m~9m、筒子は1p~9p、索子は1s~9s、東南西北白発中は1z~7zと表記されるにゃ!赤牌は0m、0p、0sとなるにゃ!明鏡の戦の透け透け牌は、末尾にtを付けて、1mtというふうになるにゃ! | RecordNewRound |
left_tile_count | 牌山の残り枚数にゃ!王牌は含まないにゃ! | RecordNewRound |
doras | ドラ表示牌にゃ!ドラそのものではないにゃ!なお、2019年9月以前の牌譜では、キー名は「doras」ではなく「dora」となっているにゃ!データ形式も異なっていて、配列ではないにゃ!牌譜解析プログラムを組む際には注意が必要にゃ! | RecordNewRound |
opens | 明鏡の戦における、手牌のうちで透けている牌の情報にゃ!通常ルールの対局では、気にする必要はない情報にゃ! | NewRoundOpenedTiles |
[別表:operation_listのtype]
type | 説明 |
1 | 打牌にゃ! |
2 | N/A(チー) |
3 | N/A(ポン) |
4 | 暗槓にゃ! |
5 | N/A(大明槓) |
6 | N/A(加槓) |
7 | ダブル立直にゃ! |
8 | 天和にゃ! |
9 | N/A(ロン) |
10 | 九種九牌にゃ! |
11 | 三麻の北抜きにゃ! |
12 | N/A(赤血の戦や修羅の戦における牌交換) |
13 | N/A(赤血の戦における絶一門縛り) |
14 | 闇夜の戦における闇牌にゃ! |
15 | N/A(闇夜の戦における照射) |
16 | N/A(闇夜の戦における闇維持) |
17 | 闇夜の戦における闇牌ダブル立直にゃ! |
「牌譜 - result - data - operation」の項で詳しく説明するにゃ!
なお、表の説明欄が「N/A」となっているものは、配牌直後の親には選択できない操作か、または特殊ルールのため特殊な記述がされる操作ということにゃ!
[type: 8(天和)のサンプル]
"tingpai": [ { "seat": 0, "tingpais1": [ { "tile": "7z", "haveyi": false, "yiman": false, "count": 0, "fu": 40, "biao_dora_count": 0, "yiman_zimo": false, "count_zimo": 1, "fu_zimo": 30 } ] } ], "operation": { "seat": 0, "operation_list": [ { "type": 1 }, { "type": 7, "combination": [ "1m", "2m", "3m", "5m", "6m", "7m", "1p", "2p", "3p", "6s", "7s", "8s", "7z", "7z" ] }, { "type": 8 } ], "time_add": 20000, "time_fixed": 8000 },
キー | 説明 | 参照 |
tingpai | テンパイ情報にゃ!親が14枚の配牌ですでに和了形(すなわち天和)となっていても、理牌した手牌の一番右端の牌を待ち牌とするテンパイとみなされるにゃ!複数人がテンパイしている場合は、テンパイしている人数分の情報が記されているにゃ! | RecordNewRound.TingPai |
seat | 席にゃ!「席」のページを見るにゃ! | RecordNewRound.TingPai |
tingpais1 | テンパイの詳細情報にゃ!和了牌が複数ある場合は、それぞれの牌について情報が記されているにゃ! | TingPaiInfo |
tile | 待ち牌にゃ! | TingPaiInfo |
haveyi | ロンが可能かどうかにゃ!すなわち、役が有るかどうかにゃ!役が有るならば「true」、無いならば「false」にゃ! | TingPaiInfo |
yiman | ロンの場合に、役満となるかどうかにゃ!役満ならば「true」、そうでないならば「false」にゃ! | TingPaiInfo |
count | ロンの場合の翻数にゃ!ドラは含めないにゃ!場ゾロも含めないにゃ! | TingPaiInfo |
fu | ロンの場合の符数にゃ!サンプルでは、20+10+2+2で40符にゃ! | TingPaiInfo |
biao_dora_count | 表ドラの枚数にゃ! | TingPaiInfo |
yiman_zimo | 自摸和了の場合に、役満となるかどうかにゃ!役満ならば「true」、そうでないならば「false」にゃ!このサンプルは配牌時点で和了形なので、役満(天和)が成立するけれど、天和は巡目で成立する特殊な役満であり、牌姿だけを見ると役満形ではないので、ここでは「false」となるにゃ! | TingPaiInfo |
count_zimo | 自摸和了の場合の翻数にゃ!ドラは含めないにゃ!場ゾロも含めないにゃ!サンプルでは、天和は考慮せずに、門前清自摸和の一翻にゃ! | TingPaiInfo |
fu_zimo | 自摸和了の場合の符数にゃ!サンプルでは、20+2+2+2で30符にゃ! | TingPaiInfo |
operation | 選択可能な操作の情報にゃ! | OptionalOperationList |
seat | 席にゃ!「席」のページを見るにゃ! | OptionalOperationList |
operation_list | 選択可能な操作の一覧にゃ!サンプルでは、打牌、ダブル立直、自摸和了(天和)、の3つの選択肢が記されているにゃ! | OptionalOperation |
type | 「1」は打牌にゃ!「7」はダブル立直にゃ!「8」は自摸和了(天和)にゃ!上掲の[別表:operation_listのtype]を見るにゃ! | OptionalOperation |
combination | 「type」「7」の場合は、立直するための打牌候補がここに記されているにゃ!サンプルではすでに和了形ができあがっており、14枚どれを切ってもフリテンダブル立直が可能なので、14枚全部が立直の打牌候補として記されているにゃ! | OptionalOperation |
time_add | 操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ! | OptionalOperationList |
time_fixed | 操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ! | OptionalOperationList |
牌譜 - .lq.RecordDealTile
「牌譜 - result」の項で説明した「name」が「.lq.RecordDealTile」の場合について説明するにゃ!
牌を自摸ってきたときに出現するデータ形式にゃ!
"name": ".lq.RecordDealTile", "data": { "seat": 0, "tile": "4s", "left_tile_count": 22, "liqi": { "seat": 1, "score": 32900, "liqibang": 1 }, "doras": [ "7m", "4p" ], "zhenting": [ false, false, false, true ], "operation": { "seat": 0, "operation_list": [ { "type": 1 } ], "time_add": 20000, "time_fixed": 5000 } }
キー | 説明 | 参照 |
name | データ形式の名前にゃ!この表では「".lq.RecordDealTile"」のデータについて説明するにゃ! | Wrapper |
data | ここから下に、データが書かれているにゃ! | Wrapper |
seat | 席にゃ!「席」のページを見るにゃ!誰が牌を自摸ってきたかをあらわしているにゃ! | RecordDealTile |
tile | 自摸ってきた牌にゃ!萬子は1m~9m、筒子は1p~9p、索子は1s~9s、東南西北白発中は1z~7zと表記されるにゃ!赤牌は0m、0p、0sとなるにゃ! | RecordDealTile |
left_tile_count | 牌山の残り枚数にゃ!王牌は含まないにゃ! | RecordDealTile |
liqi | 誰かの立直が成立したことを示すデータにゃ!立直宣言牌で放銃すると立直は不成立にゃ!なので、立直成立の判断は、立直者の立直宣言時ではなく、立直後の他家の操作時に行われるにゃ! | LiQiSuccess |
seat | 席にゃ!「席」のページを見るにゃ!誰が立直をしたかをあらわしているにゃ! | LiQiSuccess |
score | 立直者の立直後の持ち点にゃ!立直の1,000点棒を出したあとの点数ということにゃ! | LiQiSuccess |
liqibang | 供託の本数にゃ!立直後に流局すると、供託が貯まっていくにゃ! | LiQiSuccess |
doras | 嶺上牌を自摸った際の、ドラ表示牌の一覧にゃ!大明槓や加槓の場合は、槓ドラは後めくりなので、槓ドラ抜きのドラ表示牌一覧になるにゃ!暗槓の場合は、槓ドラは即めくりなので、槓ドラを含むドラ表示牌一覧になるにゃ! | RecordDealTile |
zhenting | フリテンに関する情報にゃ!フリテンで出和了り不可の場合は「true」になるにゃ!出和了り可能な場合は「false」になるにゃ!1行目は起家、2行目は起家の下家、3行目は起家の対面、4行目は起家の上家にゃ! | RecordDealTile |
operation | 自摸時に可能な操作一覧が、ここから下に書かれているにゃ!打牌、暗槓、加槓、立直、自摸和了、九種九牌、北抜き、闇牌、闇牌立直、のどれかにゃ! | OptionalOperationList |
seat | 席にゃ!「席」のページを見るにゃ! | OptionalOperationList |
operation_list | 自摸時に可能な操作一覧がここに記されているにゃ! | OptionalOperation |
type | 自摸時に可能な操作一覧にゃ!別表で説明するにゃ! | OptionalOperation |
time_add | 操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!段位戦での長考時間は20秒にゃ!時間を消費すると減ってゆくにゃ! | OptionalOperationList |
time_fixed | 操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!段位戦では1手あたり5秒が与えられるにゃ! | OptionalOperationList |
[別表:operation_listのtype]
type | 説明 |
1 | 打牌にゃ! |
2 | N/A(チー) |
3 | N/A(ポン) |
4 | 暗槓にゃ! |
5 | N/A(大明槓) |
6 | 加槓にゃ! |
7 | 立直にゃ! |
8 | 自摸和了にゃ! |
9 | N/A(ロン) |
10 | 九種九牌にゃ! |
11 | 三麻の北抜きにゃ! |
12 | N/A(赤血の戦や修羅の戦における牌交換) |
13 | N/A(赤血の戦における絶一門縛り) |
14 | 闇夜の戦における闇牌にゃ! |
15 | N/A(闇夜の戦における照射) |
16 | N/A(闇夜の戦における闇維持) |
17 | 闇夜の戦における闇牌立直にゃ! |
「牌譜 - result - data - operation」の項で詳しく説明するにゃ!
なお、表の説明欄が「N/A」となっているものは、自摸時には選択できない操作ということにゃ!
牌譜 - .lq.RecordDiscardTile
「牌譜 - result」の項で説明した「name」が「.lq.RecordDiscardTile」の場合について説明するにゃ!
打牌したときに出現するデータ形式にゃ!
"name": ".lq.RecordDiscardTile", "data": { "seat": 3, "tile": "7m", "is_liqi": false, "moqie": false, "zhenting": [ false, false, false, true ], "tingpais": [ { "tile": "6m", "haveyi": true, "yiman": false, "count": 1, "fu": 30, "biao_dora_count": 1, "yiman_zimo": false, "count_zimo": 1, "fu_zimo": 30 }, { "tile": "9m", "haveyi": false, "yiman": false, "count": 0, "fu": 30, "biao_dora_count": 1, "yiman_zimo": false, "count_zimo": 0, "fu_zimo": 30 } ], "doras": [ "8m", "9s" ], "is_wliqi": false "operations": [ { "seat": 0, "operation_list": [ { "type": 2, 省略にゃ! } ], "time_add": 20000, "time_fixed": 5000 } ] }
キー | 説明 | 参照 |
name | データ形式の名前にゃ!この表では「".lq.RecordDiscardTile"」のデータについて説明するにゃ! | Wrapper |
data | ここから下に、データが書かれているにゃ! | Wrapper |
seat | 席にゃ!「席」のページを見るにゃ!誰が打牌したかをあらわしているにゃ! | RecordDiscardTile |
tile | 河に捨てた牌にゃ!萬子は1m~9m、筒子は1p~9p、索子は1s~9s、東南西北白発中は1z~7zと表記されるにゃ!赤牌は0m、0p、0sとなるにゃ! | RecordDiscardTile |
is_liqi | この打牌時に立直が宣言されたかどうかを示しているにゃ!立直宣言牌で放銃すると立直は不成立なので、この段階では立直はまだ成立していないにゃ!立直は、他家が和了以外の操作をした段階で成立するにゃ!「true」は立直宣言あり、「false」は立直宣言無しにゃ!なお、立直成立後の自動自摸切りのときは、ここの値は「false」にゃ! | RecordDiscardTile |
moqie | 自摸切りかどうかにゃ!牌譜再生をしたときにグレーで表示されるのが自摸切りにゃ!「true」は自摸切り、「false」は手出しにゃ! | RecordDiscardTile |
zhenting | フリテンに関する情報にゃ!フリテンで出和了り不可の場合は「true」になるにゃ!出和了り可能な場合は「false」になるにゃ!(ただし、後述するように、出和了り可能なのに「true」となる例外があるにゃ!)1行目は起家、2行目は起家の下家、3行目は起家の対面、4行目は起家の上家にゃ!なお、「.lq.RecordDealTile」(自摸の記録)のときとは異なり、「.lq.RecordDiscardTile」(打牌の記録)では、「zhenting」の内容の読み取りに注意が必要にゃ!「.lq.RecordDealTile」では、単純にフリテン情報と考えていいにゃ!一方、「.lq.RecordDiscardTile」では、捨てられた牌が他家の和了り牌だった場合は、出和了りの可否に関係なく、「true」となるにゃ!つまり、この打牌時には出和了りできるけれど、仮に見逃した場合はフリテンとなる、という情報も示しているにゃ!分かりづらいので要注意にゃ! | RecordDiscardTile |
tingpais | 打牌者が聴牌している場合は、聴牌情報がここに記されているにゃ!両面待ちなどのように待ちが複数ある場合は、待ちの牌それぞれ個別に聴牌情報が記されているにゃ!2019年12月以前の牌譜と12月以降の牌譜では、「tingpais」の内容が異なっているので、注意が必要にゃ! | TingPaiInfo |
tile | 待ちの牌にゃ!萬子は1m~9m、筒子は1p~9p、索子は1s~9s、東南西北白発中は1z~7zと表記されるにゃ! | TingPaiInfo |
haveyi | 2019年12月以降の牌譜では、役有りかどうかを示しているにゃ!「true」は役有り、「false」は役無しにゃ!出和了りが可能かどうかということにゃ!例に示したデータでは、六萬では役有り、九萬では役無しにゃ!一方、2019年12月以前の牌譜では、次行に記す「yiman」と同じデータになっているにゃ!つまり、役満かどうかを示しているにゃ!たぶんバグにゃ! | TingPaiInfo |
yiman | 出和了りの場合に役満かどうかを示しているにゃ!「true」は役満、「false」は非役満にゃ!自摸四暗刻の場合、出和了りでは役満ではないので「false」にゃ! | TingPaiInfo |
count | 出和了りの場合の翻数にゃ!ドラは含まないにゃ! | TingPaiInfo |
fu | 出和了りの場合の符数にゃ! | TingPaiInfo |
biao_dora_count | 手牌に持っているドラの枚数にゃ!赤ドラや、三麻の抜きドラも含むにゃ!ただし、裏ドラは除くにゃ! | TingPaiInfo |
yiman_zimo | 2019年12月以降の牌譜にだけ存在するデータにゃ!自摸和了りの場合に役満かどうかを示しているにゃ!「true」は役満、「false」は非役満にゃ! | TingPaiInfo |
count_zimo | 2019年12月以降の牌譜にだけ存在するデータにゃ!自摸和了りの場合の翻数にゃ!ドラは含まないにゃ! | TingPaiInfo |
fu_zimo | 2019年12月以降の牌譜にだけ存在するデータにゃ!自摸和了りの場合の符数にゃ! | TingPaiInfo |
doras | 大明槓または加槓をした後の、ドラ表示牌の一覧にゃ!大明槓や加槓の場合は、槓ドラは後めくりなので、打牌のときに槓ドラのデータが記録されるにゃ!暗槓の場合は、槓ドラは即めくりなので、嶺上牌を自摸ったときに槓ドラのデータが記録されるにゃ! | RecordDiscardTile |
is_wliqi | この打牌時にダブル立直が宣言されたかどうかを示しているにゃ!ダブル立直宣言牌で放銃するとダブル立直は不成立なので、この段階ではダブル立直はまだ成立していないにゃ!ダブル立直は、他家が和了以外の操作をした段階で成立するにゃ!「true」はダブル立直宣言あり、「false」はダブル立直宣言無しにゃ!なお、ダブル立直成立後の自動自摸切りのときは、ここの値は「false」にゃ! | RecordDiscardTile |
operations | 打牌時に可能な操作一覧が、ここから下に書かれているにゃ!チー、ポン、大明槓、ロン、のどれかにゃ! | OptionalOperationList |
seat | 席にゃ!「席」のページを見るにゃ! | OptionalOperationList |
operation_list | 打牌時に可能な操作一覧がここに記されているにゃ! | OptionalOperation |
type | 打牌時に可能な操作一覧にゃ!別表で説明するにゃ! | OptionalOperation |
time_add | 操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!段位戦での長考時間は20秒にゃ!時間を消費すると減ってゆくにゃ! | OptionalOperationList |
time_fixed | 操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!段位戦では1手あたり5秒が与えられるにゃ! | OptionalOperationList |
[別表:operation_listのtype]
type | 説明 |
1 | N/A(打牌) |
2 | チーにゃ! |
3 | ポンにゃ! |
4 | N/A(暗槓) |
5 | 大明槓にゃ! |
6 | N/A(加槓) |
7 | N/A(立直) |
8 | N/A(自摸和了) |
9 | ロンにゃ! |
10 | N/A(九種九牌) |
11 | N/A(三麻の北抜き) |
12 | N/A(赤血の戦や修羅の戦における牌交換) |
13 | N/A(赤血の戦における絶一門縛り) |
14 | N/A(闇夜の戦における闇牌) |
15 | N/A(闇夜の戦における照射) |
16 | N/A(闇夜の戦における闇維持) |
17 | N/A(闇夜の戦における闇牌立直) |
「牌譜 - result - data - operation」の項で詳しく説明するにゃ!
なお、表の説明欄が「N/A」となっているものは、打牌時には選択できない操作ということにゃ!
牌譜 - .lq.RecordChiPengGang
「牌譜 - result」の項で説明した「name」が「.lq.RecordChiPengGang」の場合について説明するにゃ!
チー、ポン、大明槓のどれかをしたときに出現するデータ形式にゃ!
"name": ".lq.RecordChiPengGang", "data": { "seat": 3, "type": 0, "tiles": [ "4p", "6p", "0p" ], "froms": [ 3, 3, 0 ], "liqi": { "seat": 0, "score": 24000, "liqibang": 1 }, "zhenting": [ false, false, false, false ], "operation": { "seat": 3, "operation_list": [ { "type": 1, "combination": [ "5p" ] } ], "time_add": 20000, "time_fixed": 5000 }, "tile_states": [ 0, 0 ] }
キー | 説明 | 参照 |
name | データ形式の名前にゃ!この表では「".lq.RecordChiPengGang"」のデータについて説明するにゃ! | Wrapper |
data | ここから下に、データが書かれているにゃ! | Wrapper |
seat | 席にゃ!「席」のページを見るにゃ!誰が鳴いたかをあらわしているにゃ! | RecordChiPengGang |
type | 「0」はチーにゃ!「1」はポンにゃ!「2」は大明槓にゃ! | RecordChiPengGang |
tiles | 副露した牌の組にゃ!チー、ポンの場合は、1~2行目が自分の手牌の中にあった牌、3行目が他家から取ってきた牌にゃ!大明槓の場合は、1~3行目が自分の手牌の中にあった牌、4行目が他家から取ってきた牌にゃ!(赤牌があるため、ポンや大明槓の場合でも、全部同じ牌になるとは限らないにゃ!)サンプルにある「"4p", "6p", "0p"」とは、赤5筒でチーしたということにゃ! | RecordChiPengGang |
froms | 副露した牌の出どころにゃ!数値の意味については「席」のページを見るにゃ!サンプルにある「3, 3, 0」とは、まず自分は起家の上家(3)であり、副露した4筒と6筒が自分の手牌の中にあった牌であり、鳴いた赤5筒は起家(0)が捨てた牌であるということにゃ! | RecordChiPengGang |
liqi | 誰かの立直が成立したことを示すデータにゃ!立直宣言牌で放銃すると立直は不成立にゃ!なので、立直成立の判断は、立直者の立直宣言時ではなく、立直後の他家の操作時に行われるにゃ!サンプルでは、起家が赤5筒を捨てて立直宣言をし、その宣言牌に対して起家の上家がチーをし、この段階で起家の立直が成立したということにゃ! | LiQiSuccess |
seat | 席にゃ!「席」のページを見るにゃ!誰が立直をしたかをあらわしているにゃ! | LiQiSuccess |
score | 立直者の立直後の持ち点にゃ!立直の1,000点棒を出したあとの点数ということにゃ! | LiQiSuccess |
liqibang | 供託の本数にゃ!立直後に流局すると、供託が貯まっていくにゃ! | LiQiSuccess |
zhenting | フリテンに関する情報にゃ!フリテンで出和了り不可の場合は「true」になるにゃ!出和了り可能な場合は「false」になるにゃ!1行目は起家、2行目は起家の下家、3行目は起家の対面、4行目は起家の上家にゃ! | RecordChiPengGang |
operation | チー、またはポンの場合は、鳴いた後の打牌時の喰い替えについての情報が、ここから下に書かれているにゃ!大明槓の場合は、喰い替えは存在しないため、このキーは存在しないにゃ! | OptionalOperationList |
seat | 席にゃ!「席」のページを見るにゃ! | OptionalOperationList |
operation_list | 喰い替えについての情報がここに記されているにゃ! | OptionalOperation |
type | 「1」で固定にゃ!「1」は打牌を意味するにゃ! | OptionalOperation |
combination | 喰い替えできない牌の一覧にゃ!リャンメンターツからのチーの場合は、ターツ両側の数牌2種は捨てられないにゃ!カンチャンターツからのチーの場合は、鳴いた牌と同じ数の数牌は捨てられないにゃ!ポンの場合は、鳴いた牌と同じ牌は捨てられないにゃ!サンプルでは、他家が捨てた赤5筒をカンチャンからチーをしたが、その直後は、仮に不要だとしても黒5筒は捨てられないことを意味するにゃ! | OptionalOperation |
time_add | 操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!段位戦での長考時間は20秒にゃ!時間を消費すると減ってゆくにゃ! | OptionalOperationList |
time_fixed | 操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!段位戦では1手あたり5秒が与えられるにゃ! | OptionalOperationList |
tile_states | 2019年12月以降の牌譜にだけ存在するデータにゃ!チーやポンの場合は、数値2個の配列にゃ!大明槓の場合は、数値3個の配列にゃ!段位戦では数値は「0」で固定にゃ!友人戦などで「手牌表示」を「有効」にした場合、数値は「1」になるにゃ! | RecordChiPengGang |
牌譜 - .lq.RecordAnGangAddGang
「牌譜 - result」の項で説明した「name」が「.lq.RecordAnGangAddGang」の場合について説明するにゃ!
加槓、暗槓のどちらかをしたときに出現するデータ形式にゃ!
"name": ".lq.RecordAnGangAddGang", "data": { "seat": 2, "type": 2, "tiles": "2s", "doras": [ "8p", "5z" ], "operations": [ { "seat": 1, "operation_list": [ { "type": 9 } ], "time_add": 20000, "time_fixed": 5000 } ] }
キー | 説明 | 参照 |
name | データ形式の名前にゃ!この表では「".lq.RecordAnGangAddGang"」のデータについて説明するにゃ! | Wrapper |
data | ここから下に、データが書かれているにゃ! | Wrapper |
seat | 席にゃ!「席」のページを見るにゃ!誰が加槓/暗槓したかをあらわしているにゃ! | RecordAnGangAddGang |
type | 「2」は加槓にゃ!「3」は暗槓にゃ! | RecordAnGangAddGang |
tiles | 加槓/暗槓した牌にゃ! | RecordAnGangAddGang |
doras | 加槓/暗槓する直前に、大明槓/加槓がされていた場合、直前の槓の後めくりの槓ドラはこのタイミングでめくられるにゃ!この場合、ここに、ドラ表示牌一覧が記されるにゃ!暗槓の即めくりの槓ドラについては、嶺上牌を自摸った時にドラがデータに記されるにゃ! | RecordAnGangAddGang |
operations | 加槓の場合は、他家が槍槓でロン可能ならば、ここにその情報が書かれているにゃ!暗槓の場合は、他家が国士無双でロン可能ならば、ここにその情報が書かれているにゃ!(雀魂では、暗槓からの国士無双ロンが可能) | OptionalOperationList |
seat | 席にゃ!「席」のページを見るにゃ! | OptionalOperationList |
operation_list | 槍槓または暗槓からのロンについての情報がここに記されているにゃ! | OptionalOperation |
type | 「9」で固定にゃ!「9」はロンを意味するにゃ! | OptionalOperation |
time_add | 操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!段位戦での長考時間は20秒にゃ!時間を消費すると減ってゆくにゃ! | OptionalOperationList |
time_fixed | 操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!段位戦では1手あたり5秒が与えられるにゃ! | OptionalOperationList |
段位戦の牌譜において、サンプルに示したような、「doras」キーと「operations」キーが両方存在するのは、次のどちらかのケースにゃ!どちらもレアにゃ!
大明槓または加槓をする ↓ 自摸ってきた嶺上牌で加槓をする ↓ その加槓で他家が槍槓ロン可能
大明槓または加槓をする ↓ 自摸ってきた嶺上牌で暗槓をする ↓ その暗槓で他家が国士無双ロン可能
牌譜 - .lq.RecordBaBei
「牌譜 - result」の項で説明した「name」が「.lq.RecordBaBei」の場合について説明するにゃ!
三麻で北抜きをしたときに出現するデータ形式にゃ!
"name": ".lq.RecordBaBei", "data": { "seat": 2, "doras": [ "9m", "2s" ], "operations": [ { "seat": 0, "operation_list": [ { "type": 9 } ], "time_add": 20000, "time_fixed": 5000 } ], "moqie": true }
キー | 説明 | 参照 |
name | データ形式の名前にゃ!この表では「".lq.RecordBaBei"」のデータについて説明するにゃ! | Wrapper |
data | ここから下に、データが書かれているにゃ! | Wrapper |
seat | 席にゃ!「席」のページを見るにゃ!誰が北抜きしたかをあらわしているにゃ! | RecordBaBei |
doras | まず大明槓/加槓をして、自摸った嶺上牌が北だったので北抜きをした場合、直前の槓の後めくりの槓ドラはこのタイミングでめくられるにゃ!この場合、ここに、ドラ表示牌一覧が記されるにゃ!暗槓の即めくりの槓ドラについては、嶺上牌を自摸った時にドラがデータに記されるにゃ! | RecordBaBei |
operations | 抜いた北で他家がロン可能ならば、ここにその情報が書かれているにゃ! | OptionalOperationList |
seat | 席にゃ!「席」のページを見るにゃ! | OptionalOperationList |
operation_list | 抜いた北でのロンについての情報がここに記されているにゃ! | OptionalOperation |
type | 「9」で固定にゃ!「9」はロンを意味するにゃ! | OptionalOperation |
time_add | 操作をするために与えられた長考時間にゃ!単位はミリ秒にゃ!段位戦での長考時間は20秒にゃ!時間を消費すると減ってゆくにゃ! | OptionalOperationList |
time_fixed | 操作をするために与えられた思考時間にゃ!単位はミリ秒にゃ!段位戦では1手あたり5秒が与えられるにゃ! | OptionalOperationList |
moqie | 自摸った北の即抜きかどうかにゃ!即抜きだと、牌譜再生をしたときにグレーで表示されるにゃ!「true」は自摸からの即抜き、「false」は手牌からの北抜きにゃ! | RecordBaBei |
段位戦の牌譜において、サンプルに示したような、「doras」キーと「operations」キーが両方存在するのは、次のケースにゃ!
大明槓または加槓をする ↓ 自摸ってきた嶺上牌の北で北抜きをする ↓ その北で他家がロン可能
牌譜 - .lq.RecordHule
「牌譜 - result」の項で説明した「name」が「.lq.RecordHule」の場合について説明するにゃ!
和了したときに出現するデータ形式にゃ!
"name": ".lq.RecordHule", "data": { "hules": [ { "hand": [ "2p", "2p", "3s", "2s", "1s", "7p", "8p" ], "ming": [ "kezi(6z,6z,6z)", "angang(0m,5m,5m,5m)" ], "hu_tile": "6p", "seat": 3, "zimo": true, "qinjia": true, "liqi": false, "doras": [ "1z", "7s" ], "yiman": false, "count": 3, "fans": [ { "val": 1, "id": 8 }, { "val": 1, "id": 4 }, { "val": 1, "id": 32 } ], "fu": 50, "point_rong": 9600, "point_zimo_xian": 3200, "title_id": 0, "point_sum": 9600, "dadian": 9600, "baopai": 0 } ], "old_scores": [ 29200, 22000, 25800, 23000 ], "delta_scores": [ -3200, -3200, -3200, 9600 ], "wait_timeout": 0, "scores": [ 26000, 18800, 22600, 32600 ], "gameend": {}, "baopai": 0 }
キー | 説明 | 参照 |
name | データ形式の名前にゃ!この表では「".lq.RecordHule"」のデータについて説明するにゃ! | Wrapper |
data | ここから下に、データが書かれているにゃ! | Wrapper |
hules | 和了の情報にゃ!ダブルロンならば2件分、トリプルロンならば3件分のデータが並ぶにゃ! | HuleInfo |
hand | 手牌の情報にゃ! | HuleInfo |
ming | 副露の情報にゃ!「shunzi」は順子(チー)、「kezi」は刻子(ポン)、「minggang」は明槓(大明槓または加槓)、「angang」は暗槓にゃ!牌の並びの最後のものが、他家から取ってきた牌にゃ! | HuleInfo |
hu_tile | 和了牌にゃ! | HuleInfo |
seat | 席にゃ!「席」のページを見るにゃ!誰が和了ったかをあらわしているにゃ! | HuleInfo |
zimo | 「true」ならば自摸和了、「false」ならばロン和了にゃ! | HuleInfo |
qinjia | 「true」ならば和了者は親、「false」ならば和了者は子にゃ! | HuleInfo |
liqi | 「true」ならば立直またはダブル立直した上での和了、「false」ならば立直またはダブル立直無しでの和了にゃ! | HuleInfo |
doras | 表ドラ表示牌にゃ! | HuleInfo |
li_doras | 裏ドラ表示牌にゃ!立直かダブル立直をしていない場合は、このデータは存在しないにゃ! | HuleInfo |
yiman | 「true」ならば役満、「false」ならば非役満にゃ!ただし数え役満の場合は「false」にゃ! | HuleInfo |
count | 役満でなければ翻数にゃ!役満ならば役満の合計数にゃ! | HuleInfo |
fans | 和了役の詳細情報にゃ! | FanInfo |
val | 非役満ならば、役それぞれの翻数にゃ!役満ならば「1」にゃ!ダブル役満ならば「2」、トリプル役満ならば「3」、……と増えるにゃ!表ドラ、裏ドラ、赤ドラ、抜きドラならば、ドラの枚数にゃ!立直をしたけれど裏ドラが乗らなかった場合は、「0」になるにゃ! | FanInfo |
id | 役それぞれのIDにゃ!「役」のページを見るにゃ! | FanInfo |
fu | 符数にゃ! | HuleInfo |
point_rong | 確定した翻数と符数における、ロン和了の場合の、放銃者の支払い点数にゃ!積み棒と供託による加点は含まないにゃ! | HuleInfo |
point_zimo_qin | 確定した翻数と符数における、自摸和了の場合の、親の支払い点数にゃ!積み棒と供託による加点は含まないにゃ! | HuleInfo |
point_zimo_xian | 確定した翻数と符数における、自摸和了の場合の、子の支払い点数にゃ!積み棒と供託による加点は含まないにゃ! | HuleInfo |
title_id | 「0」は満貫未満、「1」は満貫、「2」は跳満、「3」は倍満、「4」は三倍満、「5」は役満、「6」はダブル役満、「7」はトリプル役満、「8」は四倍役満、「9」は五倍役満、「10」は六倍役満、「11」は数え役満にゃ! | HuleInfo |
point_sum | 今回の和了者が、この対局においてここまでで獲得した点数の合計値にゃ!ここまでで支払った点数は含まないにゃ!積み棒と供託による加点も含まないにゃ! | HuleInfo |
dadian | 2021年8月26日アップデート以降の対局にだけ存在するデータにゃ!今回の和了の確定獲得点数にゃ!積み棒と供託による加点は含まないにゃ! | HuleInfo |
baopai | 2022年4月27日アップデート以降の対局については、ここに包(パオ)の情報が書かれているにゃ!包の情報は下の方にも書かれているにゃ!「0」は包無し、「1」は起家が包、「2」は起家の下家が包、「3」は起家の対面が包、「4」は起家の上家が包、を意味するにゃ!雀魂の牌譜の大部分の箇所では0が起家を意味するのに、ここでは表現が異なるにゃ!注意するにゃ! | HuleInfo |
old_scores | 今回の和了前の対局者全員の点数にゃ!立直が成立していた場合は、リーチ棒分の点数を引いた値にゃ!1行目は起家、2行目は起家の下家、3行目は起家の対面、4行目は起家の上家にゃ! | RecordHule |
delta_scores | 今回の和了による対局者全員の収支にゃ!積み棒や供託による加点減点も含むにゃ!1行目は起家、2行目は起家の下家、3行目は起家の対面、4行目は起家の上家にゃ! | RecordHule |
scores | 今回の和了後の対局者全員の点数にゃ!1行目は起家、2行目は起家の下家、3行目は起家の対面、4行目は起家の上家にゃ! | RecordHule |
gameend | 不明にゃ!このキーが値を持っている牌譜は見たことないにゃ! | RecordHule |
baopai | 2021年5月26日アップデート以降の対局については、ここに包(パオ)の情報が書かれているにゃ!2022年4月27日アップデート以降の対局については、包の情報は上の方にも書かれているにゃ!「0」は包無し、「1」は起家が包、「2」は起家の下家が包、「3」は起家の対面が包、「4」は起家の上家が包、を意味するにゃ!雀魂の牌譜の大部分の箇所では「0」が起家を意味するのに、ここでは表現が異なるにゃ!注意するにゃ! | RecordHule |
包の情報が2箇所に存在する理由を推測してみるにゃ!1局で包が2件発生し、更にダブルロンで、両方の包が適用されたケースを想定するにゃ!この場合、「data」直下には包の情報は1件分しか記録できないため、2件の包に対応できないにゃ!一方、「hules」の中に包の情報を記録しておけば、「hules」はダブルロンならば2個、トリプルロンならば3個存在するので、2件の包に対応できるにゃ!おそらく、2022年4月27日アップデートにおいて、2件の包の同時成立に対応したのだと思うにゃ!
牌譜 - .lq.RecordNoTile
牌譜 - .lq.RecordLiuJu
牌譜 - result - data - operation
[operation_listのtype]
type | 説明 |
1 | 打牌にゃ! |
2 | チーにゃ! |
3 | ポンにゃ! |
4 | 暗槓にゃ! |
5 | 大明槓にゃ! |
6 | 加槓にゃ! |
7 | 立直にゃ! |
8 | 自摸和了にゃ! |
9 | ロンにゃ! |
10 | 九種九牌にゃ! |
11 | 三麻の北抜きにゃ! |
12 | 赤血の戦や修羅の戦における牌交換にゃ! |
13 | 赤血の戦における絶一門縛りにゃ! |
14 | 闇夜の戦における闇牌にゃ! |
15 | 闇夜の戦における照射にゃ! |
16 | 闇夜の戦における闇維持にゃ! |
17 | 闇夜の戦における闇牌立直にゃ! |
[type: 1 のサンプル]
[type: 2 のサンプル]
イレギュラーな牌譜
続きは少し休んでから書くにゃ!