trpgオンラインセッション環境とルール&シナリオ記述言語

31
TRPGオンラインセッション環境と ルール&シナリオ記述言語 神戸隆行(椎路ちひろ)Twitter: @ ChihiroShiiji / FB: takayuki.kando 2014/12/21(第10.5回福岡市西区プログラム勉強会資料)

Upload: takayuki-kando

Post on 17-Jul-2015

376 views

Category:

Software


0 download

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回福岡市西区プログラム勉強会

付録

2014/12/2113 第10.5回福岡市西区プログラム勉強会

コマンド主導型オンライン・セッション・システム

ルール主導型オンライン・セッション・システム

ダイス・ボット(コマンド・インタプリタ)

カードやダイス等の判定の執行と共有

マップ等一部データの管理と共有

コマンド

応答

イベント・スケジューラ(ルール&シナリオ・インタプリタ)

ルールに基づいて基本的にゲームの進行のスケジュール全体を管理している

チャットは基本的に説明と会話と打ち合わせに利用される

ゲーム中ほぼ全てのデータの管理と共有

GM

GM

player

コマンド

応答

player応答

問い合わせ

応答

問い合わせ

アドリブ手段

スケジュールやデータを書き換えるイベント追加トリガ追加ローカル・ルール追加

ゲーム進行の多くは通常のチャットでインフォーマルに行われる(アドリブ容易)

2014/12/2114 第10.5回福岡市西区プログラム勉強会

コマンド受付型 vs ルール主導型

コマンド受付式

直感的

ただしルールは部分的にしかモデル化されず受動的

ルール主導式

ルール解釈エンジンから必要に応じて能動的に選択をユーザに問いかける

GUIや記述言語でこのようなモデルを引用して表示や記述することはできるがユーザが直接的に操作はしない

2014/12/2115 第10.5回福岡市西区プログラム勉強会

Kyn[offline]: -

邪魔しないで

XMPPクライアントGUIイメージ

2014/12/2116 第10.5回福岡市西区プログラム勉強会

行動の予定

キャンセル

これからどうしますか?

送信

移動調べる休息

移動

行動選択ダイアログの例

2014/12/2117 第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回福岡市西区プログラム勉強会

ネットワーク

ルール

手続き

復帰

呼び出しイベントor トリガ

手続き呼び出し

フォームによる問い合わせ

キャラクタ

GM

プレイヤー

キャラクタ アイテム 環境情報 マップ

各種情報の取得

計算

返り値(値、作用)の組み立て

メッセージ送信

キャラクタ

テーブル

テーブル参照

イベント登録

2014/12/2131 第10.5回福岡市西区プログラム勉強会