ハーイ、ジョン!ハーイ、サム!、シナリオテキストの定義。

ヘーベルな家は関係ないよ、怒られるからね!

ハーイしないよ、ぽぽぽぽぽーんっ、もしないから。
緑の毛玉もチンさんのトラも、霧の街の名探偵も出てこないから!

さて、こねた挟まないと進まないのかよ!みたいな突っ込みは置いておいて。(どっこいせ)
TRPGさん1号のお話です。
そろそろゲームっぽくなってくるといいよね。
わたしも切に願うよ。

シート向けのパーサーは動くものが用意できましたので、次はゲームデータ向けの実装を考えてみます。
作業的には以下の3項目あたりですね。

  • ✔シナリオテキストの生成
  • ✔ステータステキストの生成
  • ✔選択肢テキストの生成

上記3つはどれも1つのシーンに沿って各テキストを作成する機能です。

今回は「シナリオテキスト」の組み立てに関してまとめてみます。
ここでシナリオと呼んでるものは、テキストで表現された「いま砂漠にいるんだよ」のような内容です。

そしてこれをTPRGさん1号ではどのように扱うのかを考えてみます。
 

いくつかの要素から複合的に1つのシーンを組み立る

まず場所を定義します。
例えば”location”と名前を付けて、ここではHTMLのタグっぽくしてみましょうか。

 <location>
 </location>

これに管理用の番号(id)と名前(name)をつけてみます。

 <location>
  id=1 ★new!
  name=”南の砂漠” ★new!
 </location>

さらにひとを用意してみます。
月並みですが”person”なんて名前にしてみます。
これにも番号(id)と、名前(name)を付けましょう。

 <person> ★new!
  id=1
  name=”john”
 </person>

 <location>
  id=1
  name=”南の砂漠”
 </location>

せっかくなのでセリフも定義してみます。
”talk”という名前にしてみましょう。
これにも番号(id)と、会話(message)を付けてみます。
このセリフは”person”の”john”に使わせましょうか。

 <talk> ★new!
  id=1
  message=”今日はよい天気だね”
 </talk>

 <person>
  id=1
  name=”john”
  talk=1 ★new!
 </person>

 <location>
  id=1
  name=”南の砂漠”
 </location>

なんとなくデータのつながりができてきました。
では、場所(location)に、ひと(person)を置いてみましょう。

やっぱりこうなりますよね。

 <talk>
  id=1
  message=”今日はよい天気だね”
 </talk>

 <person>
  id=1
  name=”john”
  talk=1
 </person>

 <location>
  id=1
  name=”南の砂漠”
  person=1 ★new!
 </location>

 

データとして考えてみる。

あたまは場所(location)からひっぱっていくのがいいかな?

場所(location)に含まれるのは、ひと(person)のid=1。
ひと(person)のid=1はnameが”john”でセリフ(talk)のid=1を持っているので、お話するときは”今日はよい天気だね”と応えてくれる。
みたいな感じ。

もう少しきれいにつなげると、南の砂漠にはjohnがいて、”今日はよい天気だね”と話しかけてきた。
かな?

ここのところはコマンド型にしてjohnに話しかけると返事をしてくれる方が良いかもしれません。
場所(location)には、ひと(person)が一人いるのがわかっていますので、話しかけるコマンドを組み立てる際にそれが”john”であることまで判定できます。

勿論、場所(location)は複数作れますし、ひと(person)も複数作れます。
1つの場所(location)に複数のひと(person)を配置することもできます。(複数行書けばよさそうだよね)

ちょっとゲームっぽいかも!
情報の見せ方は調整することにして。

これで場所(location)、ひと(person)、セリフ(talk)は定義できそうですよね。
 

例えばお店も定義できます。

ちょっと沢山の定義が出てきますが、いままでと考え方は同じです。

セリフ(talk)、ひと(person)、アイテム(item)、売りリスト(selllist)、買いリスト(buylist)、お店(shop)で構成されます。
※itemの指定の後ろにある数字はお値段だと思ってください。

 <talk> ★new!
  id=2
  message=”いらっしゃい、良い品が入っているよ”
 </talk>

 <person> ★new!
  id=2
  name=”sundy”
  talk=2
 </person>

 <item> ★new!
  id=1
  name=”短剣”
 </item>

 <item> ★new!
  id=2
  name=”皮の盾”
 </item>

 <item> ★new!
  id=3
  name=”皮の鎧”
 </item>

 <selllist> ★new!
  id=1
  item=1,50
  item=2,100
  item=3,170
 </selllist>

 <buylist> ★new!
  id=1
  item=1,100
  item=2,200
  item=3,340
 </selllist>

 <shop> ★new!
  id=1
  name=”町はずれの武器屋”
  person=2
  selllist=1
  buylist=1
 </shop>

 

せっかくだから場所(location)にお店(shop)をおいてみよう。

こんな感じ。

 <location>
  id=1
  name=”南の砂漠”
  person=1
  shop=1 ★new!
 </location>

うーん。
ゲームっぽく場所(location)に説明(description)も入れてみるとこんな感じかな?

 <location>
  id=1
  name=”南の砂漠”
  description=”足を失ってしまった君たちは砂漠で立ち往生となる。日が完全に上る前に、日差しから逃れる術を探さなければ命はないだろう。その時、落胆する君たちの背後から何者かが近づいてくる。” ★new!
  person=1
  shop=1
 </location>

 
落胆してないで目の前のお店に気付けよ!という気もしますが。
きっと背後から近づく何者かがいい感じに誘導してくれるのでしょう。
ひと(person)がid=1ですから、johnなんですけれどね。うひ。

あとは状態によってセリフが変わったり、お店の品物も変わると楽しそうです。
johnもいるし。(samいないけど)
そうそう、移動もしたいですよね。

それには条件判断や「選択肢テキスト」の仕組み。
前回あたりからアクションと呼んでいる要素を用いようと思います。
この話題はまた次回にでも。

がんばる。