trpgオンラインセッション環境とルール&シナリオ記述言語
TRANSCRIPT
TRPGオンラインセッション環境とルール&シナリオ記述言語
神戸隆行(椎路ちひろ)Twitter: @ChihiroShiiji / FB: takayuki.kando
2014/12/21(第10.5回福岡市西区プログラム勉強会資料)
自己紹介 神戸隆行(かんどたかゆき)、PN. 椎路ちひろ(しいじ ちひろ)
Twitter: @ChihiroShiiji / FB: takayuki.kando
出身は名古屋、趣味イラストとコスプレ
本業は九大の社会人博士課程で博士を取ろうとしながら研究開発に従事する有期雇用の勤め人@百道浜
専門は流転中: 数値解析(のプログラミング・インターフェースの改良、修論@名大)
→数式処理(のプログラミング・インターフェースの改良@某F研)→プログラム最適化(博士課程一回目の失敗@東工大)(2005年に仕事を紹介され福岡へ来た)→コンパイラ開発(Redefis、動的再構成可能プロセッサ向けコンパイラ)→SW/HW開発環境(IDE上からクラウド上の開発ツールを利用できるミドルウェアPTaaSの開発) http://www.qualiarc.com/?post_type=seihin&p=202
使用プログラミング言語: 最初はFORTRAN、大学以降はC++とC、今は主にJava、他は必要に応じてボチボチ
本日は趣味で開発中のシステムとオレオレ言語の紹介 ソースとサンプルはGitHub[ https://github.com/TakayukiKando/Lore ]に置いてます コミケ87の2日目に参加予定: 東3ホール "ケ"-24a 「犬山屋算譜」
2014/12/212 第10.5回福岡市西区プログラム勉強会
同じ場所
GM
player
player
データキャラクター・シートマップ表ハンドアウト…etc.
判定•ダイス•カード
物理媒体による情報共有
物理媒体による情報共有
直接会話
TRPGセッション
プレイヤーがPC(Player Character)を演じる
GM(GameMaster)はシナリオに則った進行とルールに則った判定、NPC(Non-Player Character、敵や協力者)の操作を行う GMが情報ボトルネックになり易い
2014/12/213 第10.5回福岡市西区プログラム勉強会
ネットワーク
ダイスボット
GM
player
player
データキャラクター・シートマップ表ハンドアウト…etc.
判定•ダイス•カード
物理媒体による情報共有
物理媒体を模倣した電子媒体による情報共有
チャット
コマンド受付型オンラインセッション環境
ユーザがゲームのルールと操作の両方を覚える必要
現在はチャットにテキスト・コマンドを混入
チャットパレットによる入力量の緩和工夫
自然にGUI化するのが難しい
2014/12/214 第10.5回福岡市西区プログラム勉強会
ネットワーク
ルール解釈エンジン
GM
player
player
データキャラクター・シートマップ表ハンドアウト…etc.
判定•ダイス•カード
ルールで駆動されるルール解釈エンジンを介した共有
チャット
ルール主導型オンラインセッション環境
ユーザはゲームのルールも操作も両方覚える必要なし
システムがルールを「理解」してGMの進行・判定を助ける GMボトルネック解消
ルールをイベント駆動的に記述すればGUI化も自然
2014/12/215 第10.5回福岡市西区プログラム勉強会
XGMTK -サンプル・セッション.lore
マップ -
Dungeon
マップ - Town
送信送信
ファイル(F) 編集(E) プロパティ(P) ウィンドウ(W) ヘルプ(H)
Askr: 移動先指定よろしくね。
Askr: うーむ。了解。
Kmdr: あ、移動経路変えたいんだけど…。
Kyn: ネタはいいからw
Kyn: 飯休憩にしね?
Kyn: りょーかい(空腹をこらえつつ)Ngt: あい。
Kmdr: あい。
ジャンヌ: いや、あんたシスターでしょ。
メディア: フフフ、アンデッドなんて私のファイヤーボールで全部灰にしてあげるわ!
アガタ: 誰にも一つくらいあるでしょう?苦手な物は仕方ないのでしてよ…。
アガタ: うう、地下墓地は苦手なのですわ…。
GM: 薄暗い中、あちこちからカタカタとかすかな音が…。
アガタ:
ぎゃーーーー!!!
ジャンヌNgt: カレーで。
Kmdr: しかしカレーは飲み物…。
Askr: じゃぁ一通り移動が終わったら休憩で。
名前: ジャンヌ__種族: 人間_社会: 君主社会 職業: 兵士STR: 17 CON: 9 SIZ: 12 INT: 14
POW: 12 DEX: 8 APP: 13
HP: 11/11
MP: 12/12
FP: 15/26
プレイヤー向けGUIイメージ
2014/12/216 第10.5回福岡市西区プログラム勉強会
XGMTK -サンプル・セッション.lore
マップ -
Dungeon
マップ - Town
送信送信
ファイル(F) 編集(E) プロパティ(P) ウィンドウ(W) ヘルプ(H)
Askr: 移動先指定よろしくね。
Askr: うーむ。了解。
Kmdr: あ、移動経路変えたいんだけど…。
Kyn: ネタはいいからw
Kyn: 飯休憩にしね?
Kyn: りょーかい(空腹をこらえつつ)Ngt: あい。
Kmdr: あい。
ジャンヌ: いや、あんたシスターでしょ。
メディア: フフフ、アンデッドなんて私のファイヤーボールで全部灰にしてあげるわ!
アガタ: 誰にも一つくらいあるでしょう?苦手な物は仕方ないのでしてよ…。
アガタ: うう、地下墓地は苦手なのですわ…。
GM: 薄暗い中、あちこちからカタカタとかすかな音が…。
アガタ:
ぎゃーーーー!!!
ジャンヌNgt: カレーで。
Kmdr: しかしカレーは飲み物…。
Askr: じゃぁ一通り移動が終わったら休憩で。
名前: ジャンヌ__種族: 人間_社会: 君主社会 職業: 兵士STR: 17 CON: 9 SIZ: 12 INT: 14
POW: 12 DEX: 8 APP: 13
HP: 11/11
MP: 12/12
FP: 15/26
行動の予定
キャンセル
これからどうしますか?
送信
▼
移動調べる休息
移動
行動選択の例
2014/12/217 第10.5回福岡市西区プログラム勉強会
インターネット
サーバ・サイドXGMTKコンポーネント(XMPP外部サーバ
コンポーネント)Lore言語エンジン
ルール シナリオデータ(マップ、キャラクタ…etc.)
標準的なXMPPサーバ
XGMTKクライアント(XMPPクライアント)
XGMTKクライアント(XMPPクライアント)
XGMTKクライアント(XMPPクライアント)
GM player player
セッション記録
Lore言語データ・ビュワー
Lore言語データ・ビュワー
Lore言語データ・ビュワー
XGMTKアーキテクチャとLore言語 XGMTK:
Webではなくメッセージングベースのオンラインセッション環境 XMPP:オープンなメッセージングプロトコル
Lore: 汎用・ルールシナリオ記述言語 ゲーム内時間管理と連動するイベント駆動なルール記述
TRPG向けのデータ記述
2014/12/218 第10.5回福岡市西区プログラム勉強会
ルール・シナリオ記述言語の要件 ゲーム内時間管理と連動するイベント駆動なルール記述
TRPGではゲーム内時間とプレイヤー間のセッションの進行が密接に絡み合っているのでこれを管理する必要がある 但しTRPGは非リアルタイムなゲームである→ゲーム性が変ってしまうので安易にリアルタイム化してはいけない
メッセージングの仕組みと適合する必要がある GUIが自然に組み込める必要がある
TRPG向けのデータ記述 ゲーム内データを記述、管理する必要
確率、ランダム要素の表現
時間、距離、重さ等の各種スケールの表現
特に地形データの作成を容易にする必要 大事な部分の地形のデザインに集中できるよう情報が粗いマップと情報が密なマップが混在できるようにする必要がある
ユーザ階層を考えたルール記述とシナリオ記述の緩やかな分離 ルール記述は複雑で、厳密な記述が可能でなければならない シナリオ記述は簡素でなければならない しかしシナリオ・ローカルのルールも記述したい場合がある
2014/12/219 第10.5回福岡市西区プログラム勉強会
未処理のイベント群
処理済みのイベント群
処理中のイベント
ゲーム内現在
ゲーム内未来
ゲーム内過去
必要に応じ、時刻を指定して新規にイベントを登録追加
ログが必要なければ削除
ゲーム内時間管理と連動するイベント駆動なルール記述
ゲーム内の時間進行
Lore言語エ
ンジンのイベント処理機構(サーバ側)
GM player
クライアントのGUI
XMPPメッセージング
ユーザたちのセッション進行
問い合わせ 応答
2014/12/2110 第10.5回福岡市西区プログラム勉強会
状態情報:
TRPGの登場人物、舞台となる場所、アイテムを表現するデータ位置情報 環境情報 マップ アイテム情報
キャラ情報 アイテム情報
ルール情報:TRPGのゲームシステムを記述するルー
ル、単位系、状態名、カテゴリ名、フォーム、テーブル手続き単位列挙フォームテーブル
Loreファイル(拡張子".lore"のファイル)
時間情報(スケジュール):TRPGセッションの時間経過、起こるべき出来事を表現するデータ現在時刻カウンタイベント・キューイベント
管理情報:当該Loreファイルの書誌事項、管理情報
シナリオ情報:TRPGのキャラクタやマップ上の仕掛け(状態
がある条件を満たすとルールに従って何かが起こる)、隠された情報を表現するデータトリガシークレット
Lore言語で記述・管理される情報の例
2014/12/2111 第10.5回福岡市西区プログラム勉強会
basic.loreLore基本ライブラリ
RuleA.lore"A"のルールライブラリ
WorldA.lore"A"の世界設定ライブラリ
CampaignB.lo
reキャンペーン・シナリオ"B"
ScenarioC.lor
e
シナリオ"C"
プレイヤー
GM、パワー・プレイヤー
キャンペーンライター
設定ライター
ルール設計者
Loreシステム設計者
人口が多い
必要な知識が多い
ユーザ階層を考えたルール記述とシナリオ記述の緩やかな分離
2014/12/2112 第10.5回福岡市西区プログラム勉強会
コマンド主導型オンライン・セッション・システム
ルール主導型オンライン・セッション・システム
ダイス・ボット(コマンド・インタプリタ)
カードやダイス等の判定の執行と共有
マップ等一部データの管理と共有
コマンド
応答
イベント・スケジューラ(ルール&シナリオ・インタプリタ)
ルールに基づいて基本的にゲームの進行のスケジュール全体を管理している
チャットは基本的に説明と会話と打ち合わせに利用される
ゲーム中ほぼ全てのデータの管理と共有
GM
GM
player
コマンド
応答
player応答
問い合わせ
応答
問い合わせ
アドリブ手段
スケジュールやデータを書き換えるイベント追加トリガ追加ローカル・ルール追加
ゲーム進行の多くは通常のチャットでインフォーマルに行われる(アドリブ容易)
2014/12/2114 第10.5回福岡市西区プログラム勉強会
コマンド受付型 vs ルール主導型
コマンド受付式
直感的
ただしルールは部分的にしかモデル化されず受動的
ルール主導式
ルール解釈エンジンから必要に応じて能動的に選択をユーザに問いかける
GUIや記述言語でこのようなモデルを引用して表示や記述することはできるがユーザが直接的に操作はしない
2014/12/2115 第10.5回福岡市西区プログラム勉強会
ファイル名 作成者 説明
basic.lore Lore言語開発者
共通する基本的なデータ型の定義
ファイル名の例 主な作成者 内容の例
RuleAA.lore ルール設計者、移植者
ゲームシステムAAのルール定義(主に手続き、単位系、カテゴリや状態を表す名前、etc.)
WorldAA.lore 設定ライタ、移植者
ゲームシステムAAの世界設定(主にデータ、幾らかの手続き: マップ、クリーチャー、著名NPC、標準的なアイテム設定、ローカル・ルール、etc.)
CampaignBB.lore キャンペーン(シナリオ)ライタ
キャンペーンBBのシナリオ(主にデータ、少量の手続き:マップ、クリーチャー、NPC、特別なアイテム設定、トリガ、秘密の情報。必要に応じてローカル・ルール。)
ScenarioCC.lore シナリオ・ライタ、GM、パワー・プレイヤー
シナリオCC(殆どデータ:マップ、配置済のクリーチャーやNPC、特別なアイテム設定、トリガ、秘密の情報etc.)
Lore言語と共に配布されるファイル
Lore言語で記述されるファイルの例
2014/12/2118 第10.5回福岡市西区プログラム勉強会
セッション環境
basic.lore
Lore基本データ型ライブラリ
RuleAA.lore
AAのルールライブラリ
WorldAA.lore
AAの世界設定ライブラリ
CampaignBB.lore
キャンペーン・シナリオBB
ScenarioCC.lore
シナリオCC
Loreファイル群セッション・ファイル
セッション
Pack
Unpack
SuspendResume
Read
Write
画像、テキスト等各種素材ファイル群
各種オーサリング・ツール
作成、編集
2014/12/2119 第10.5回福岡市西区プログラム勉強会
Lore言語エンジンLore言語ファイルの解釈・実行Javaライブラリbasic.lore
Lore基本データ型ライブラリ
RuleAA.lore
ゲーム・システム"AA"のルールライブラリ
WorldAA.lore
"AA"の世界設定ライブラリ
CampaignBB.lore
キャンペーン・シナリオ"BB"
ScenarioCC.lore
シナリオ"CC"
import
import
import
解釈、実行、作成支援
import
2014/12/2120 第10.5回福岡市西区プログラム勉強会
遠隔セッション環境
データ共有・流通
ルール適用、データ管理
省力化、自動化
ルール、シナリオ、データの製作
GM player player
XGMTK
クライアントXGMTK
クライアントXGMTK
クライアント
XGMTK
オーサリングツール
作成
XGMTK
サーバ
テキスト・メッセージチャットダイアログ
データの配布
ゲーム進行に必要な対話
Lore言語スクリプト
(ルール、シナリオ、データ)
Lore言語スクリプト(データ)
Lore言語スクリプト
(ルール、シナリオ、データ)
2014/12/2121 第10.5回福岡市西区プログラム勉強会
Eclipse IDE
XGMTKプラグイン
ルール シナリオデータ(マップ、キャラクタ…etc.)
GM
セッション記録
スクリプト言語Lore
エディターセッション・シミュレータ
スクリプト言語Lore
エンジン
スクリプト言語Lore
データ・ビュワー
2014/12/2122 第10.5回福岡市西区プログラム勉強会
遠隔セッション支援
オーサリング支援
データ共有支援
GM player player
データ:ルール、シナリオ、キャラクタ、アイテム、マップ
データ: ルール、シナリオ、キャラクタ、アイテム、マップ
データ: ルール、シナリオ、キャラクタ、アイテム、マップ
ビュワー ビュワービュワーオーサリングツール
作成
配布 / 共有
閲覧/ 操作
対話
スクリプト言語エンジン
スクリプト言語エンジン
スクリプト言語エンジン
自動化支援
2014/12/2123 第10.5回福岡市西区プログラム勉強会
セッション環境
メッセージング・クライアント
メッセージング・クライアント
メッセージング・クライアント
GM player player
NPC PC PCNPC NPC
セッション(キャラクタ間チャットルーム
+ゲーム内イベント伝達インフラ)
チャット(ユーザ間チャットルーム)
制御 制御制御
主催&制御 参加 参加参加参加参加
参加参加主催
2014/12/2124 第10.5回福岡市西区プログラム勉強会
状態情報
ルール情報
Loreファイル
位置情報
時間情報(スケジュール)
イベント イベント イベント
手続き
手続き
手続き
管理情報
タイトル、作成者、作成日付と改訂記録、管理者(GM)...etc.
location"C地方 "
location"迷宮"
単位
単位
単位
列挙
列挙
location"α大陸"
環境情報
マップ
location
"ある場所"
キャラ情報
Actor"PC1"
Actor"PC2"
Actor"NPC1"
Actor"NPC2"
シナリオ情報
アイテム情報
アイテム情報
アイテム"Item1"
アイテム"Item2"
アイテム"Item3"
マップ
マップ
列挙
トリガ トリガ トリガ
シークレット シークレット
2014/12/2125 第10.5回福岡市西区プログラム勉強会
単位1.0(m)
単位1(秒)
real
実数値型
integer
整数値型
単位1(p)
単位12=(dozen)
単位1.0(kg)
単位×0.001=(g)単位×1000=(t)
単位×0.001=(mm)単位×1000=(km)
単位×60=(分)
単位×60=(時)
単位×24=(日)
単位×12=(gross)
単位×100=(£)
単位×12=(R)
単位×12=(FT)
個数
通貨
時間
重さ
長さ
ulong
非負長整数値型
2014/12/2126 第10.5回福岡市西区プログラム勉強会
歩く(目的地まで)
歩く
歩く
襲われる(歩行中断、戦闘開始)
戦う
戦う
歩く
歩く
目的地着
戦う
戦う
歩く(目的地まで)
襲われる(戦闘開始)
目的地着
歩くクロック型時間管理
イベント型時間管理
2014/12/2127 第10.5回福岡市西区プログラム勉強会
location"地方 A"
location"迷宮"
location"大陸"
area
location"祭壇"
area
area
location"街"
area
location"城"
area
location"/"(root)
environment
location"地方B"
location"石碑"environmen
t
environmen
t
area
2014/12/2128 第10.5回福岡市西区プログラム勉強会
location"地方 "
location"迷宮"
location"大陸"
area
location
area
area
location"街"
area
location"城"
area
location"/"(root)ロケーション・パス:"/"
ロケーション・パス:"/大陸"
ロケーション・パス:"/大陸/地方"
ロケーション・パス:"/大陸/地方/迷宮"
ロケーション・パス:"/大陸/地方/迷宮[110,350]"
rootは場所未定なキャラクタやアイテムを置くために利用できる
ロケーション・パス:"/大陸/地方[20,800]"
ロケーション・パス:"/大陸[1205,900]"
ロケーション・パス:"/[0]"
[ ]内はそのロケーションが含まれるarea内での座標…areaのタイプによって表記は異なる
ロケーションの「親」へのリンクを表すロケーション・パス
そのロケーション自身を指すロケーション・パス
地形情報を表す、いわゆるマップ情報
マップ情報のない末端のリーフ・ロケーションキャラやアイテム、トリガの配置に利用
2014/12/2129 第10.5回福岡市西区プログラム勉強会
スケジューラ
イベント・キュー
イベントイベント
イベント
Location 、Actor、Item等
トリガ
実行
イベント登録 /
取り消し 条件に合致するトリガを実行
イベント登録 /
取り消し
イベント
最も時間が早く、その中で最も優先度の数値が低いイベントから順に並べてイベントを管理
キューの先頭からイベントを順に取り出して実行
手続き
手続き
トリガ・チェッカ
監視
現在時刻カウンタ
セッション開始からの経過時間、イベント実行が終わるとイベント・キューの先頭のイベントの時刻に更新される
イベントの作用の結果がトリガ群の条件に合致するか調べる
復帰
呼び出し
復帰
呼び出し
2014/12/2130 第10.5回福岡市西区プログラム勉強会