スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書く事で広告が消せます。

Auto Scenario Writer Java版 (2)

前の記事の続きです。

Auto Scenario WriterのJava版を作るにあたって、文章生成を再帰でやればデータファイルの構成を完全に把握できていなくてもOKということに気付いたのでコマンドラインアプリケーションは簡単にできました。が、アプレットの方は結構ハマりました。

まず、アプレットにはGUIが必要なので(手でいちいちGUIをコーディングするのは面倒だったので)、最初NetBeansで作ったけど、NetBeansで作ったアプレットをHTMLに置くのがどうもうまくいかない。多分、Appletタグに書くべきライブラリが不足しているのだと思うけどよくわからない。Googleで調べてもよくわからない。というので結局、NetBeansで作成したアプレットは捨てて手書きしました。

アプレット自体は10年余り前に少し作った事があるのですが、当時のJavaはバージョン1.1で確かその後1.2くらいの時にイベント周りのインターフェースが変更されているという記憶があります。まぁ、この辺はGoogleで調べながらそれほど苦労も無く作れたのですが、今度はappletviewerでは動くのにブラウザから見たら動かない。Javaコンソールで見たらデータファイルの一覧を取得するために使っていたFile.listFiles()でセキュリティ例外になってる。
あー、そういえばJavaはどっかのタイミングでセキュリティモデルが変更になったとか聞いたな、と思ってファイルの一覧をファイルから読み込む様にインターフェースを追加したら、今度はファイルを読む時にセキュリティ例外になっている。

調べたら、アプレットの署名とかポリシーの話が見つかるけれど、ポリシーの配布場所はユーザのローカルとか書いてあってどうも的を得ない。参照したいのはユーザローカルのファイルじゃなくてサーバにあるファイルだ。
サーブレットの時は普通にBufferedReaderとかで読めていたのにな、とか思いながら調べていると、アプレットでサーバにあるファイルを参照する時はURLクラスを使って、

  URL url = new URL(getCodeBase(), fname);
  InputStream fin = url.openConnection().getInputStream();

見たいにしないとダメというのを見つけた。
気付いてみれば当たり前で、アプレットはクライアント側で実行されるんだから普通にファイルを読みにいったらサーバにあるファイルじゃなくてクライアントローカルのファイルを読みにいってしまう。そうしたら当然セキュリティ例外になる。

うーん。サーブレット+Java Scriptみたいなプログラムだったらどこのデータを扱ってるのかというのはいつも気にしていてすぐに気付いたんだろうけど・・・。今回はこれだけの話に2〜3時間もハマってしまいました。

Auto Scenario Writer Java版 (1)

TRPGのシナリオを自動生成してくれるツールを検索していると『Auto Scenario Writer』というのを発見しました。オリジナルはSO様という方ですが、オリジナルの配布元は無くなっているようで、現在は富士川町役場ゲーム部様のサイトから手に入れられます。
これはファイティング・ファンタジー用のシナリオアイデアやキャラクター等を生成してくれる便利なツールなのですがWindows用アプリケーションのため私の自宅(Mac)では使えません。一応Wineでも試してみましたが動かせませんでした。という訳で、Javaで同等機能を持つアプリケーションを作成しました。

テキストを作成するツールなのでコマンドラインアプリケーションで十分(というかその方が便利な事が多い)と思って作成したのですが、主要部分をライブラリ化したのでアプレットも作成しました。私のホームページAuto Scenario Writer Java版で試せます。
ただし、キャラクター作成モードなど一部のデータは『The Lunatic』用に改変してあります。

このツールのうまいところはデータ中に他のデータを参照し、文字列を置換できる様になっている部分にあります。更に、これが再帰的に設定できるのでかなり複雑な文章等を割と簡単に作成できます。今ならXML等を使ってもっと柔軟に同じ様な事をできるでしょうが、Auto Scenatio Writerの"クォーテーションマーク"で囲んだ文字列が1データという書式は誰でも簡単に理解できる=誰でも自分の目的にあった様に修正できる、と言う点は大きなメリットでしょう。

下方内上方判定という方法

『The Lunatic』の行為判定は一般的に「下方内上方判定」といわれるタイプの方法を採用しています。一般的に下方内上方判定はどちらかというと難しいタイプの判定方法と思われているんじゃないかと思けど、私が下方内上方判定を採用した理由はこの判定方法が簡単だから、なのです。ちょっと、この辺について書いておこうと思います。

下方内上方判定とはどういう判定方法かというと、成功している範囲でダイス目が大きいほうがよいというルールです。例えばD20下方内上方判定で判定基準値が13なら1〜13が成功、14〜20は失敗で、1で成功よりも13で成功のほうが優れている(達成値が高い)という判定方法です。成否自体は下方判定の様に判定基準値以下かどうかに基づき、成功している範囲での達成レベルの評価は上方判定の様にダイス目が大きいほうが良い、ということで下方内上方判定というわけです。

下方内上方判定のどこが簡単なのでしょうか?
ダイス目に対する修正などを考えないなら、一般的な行為判定は「目標値 ≦ ダイス ≦ 判定基準値」の場合成功です。例えばD20下方内上方で判定基準値が13、目標値が5ならダイス目が5〜13なら成功ということです。はっきり言って簡単です。値の比較だけなので上方判定よりも計算が無い分楽です。そして判定の難易度は判定基準値を直接修正せざるを得ない下方判定に比べるとはるかに目標値の設定が容易です。

次に対抗判定はどうでしょう?
AとBがそれぞれ判定して両方が成功したらダイス目の大きいほうが勝ちです。一方が成功、他方が失敗の場合は成功したほうの勝ち、両方失敗したときは何の効果もなしでしょう。計算が必要ない分、上方判定よりも簡単です。具体的には、「攻撃命中。ダイス目6」、「防御は6〜10で成功か」、という具合です。
そして対抗判定に関して下方内上方判定は下方判定に比べると非常に優れた点があります。下方判定で両方の技能が90%以上とかいう風になると全然終わらなくなりますが、そういうことは起こりません。ちなみに、下方判定で判定基準値とダイス目の差分を求めるくらいなら最初から上方判定にしたほうがずっと優れています。

と、下方内上方判定は(本質的に)見かけよりも簡単な判定方法なのです。

シティアドベンチャー用シナリオ作成ツール?

自分自身でもシナリオ作成ツール(ルール)を書いてはいるけれど、あれはシティアドベンチャーの様なシナリオを作るにはイマイチ役に立たないと思う。何でかというと、シティアドベンチャーには大体の場合、何らかの背景と事件が必要だけど、それを生成してくれないからだ。はっきり言うと、NPCのランダム生成なんかを適当にやっている間に何か思いつけばラッキーというレベルにすぎない。
ま、もともとがダンジョン作成とかウィルダネス作成用のルールはそれなりにできていたのと、NPCなんかのランダム作成もそれなりに役立つと思ったから公開したというのが本当のところ。

で、僕がシティアドベンチャー向けのシナリオ作成でほしいと思うツールは、
1. 事件の背景となる物語を生成してくれる
2. PCが事件にかかわるポイントと目的を提示してくれる

の2点を提示してくれるものだ。
こういうのをランダムにうまく生成してくれるツールがあればシナリオ作成は本当に楽になると思う。
もう少し、詳しく要求事項を書いてみよう。

1. 事件の背景となる物語を生成してくれる
これは「何を目的に誰が何をしようとしている(した)」という簡単な話がほしいというのではない。これだけなら自作のルールでもできる。もう少し細かく、シーン単位くらいのPCが関わらなかった場合の事件を生成してくれるようなツールが欲しい。加えて、それぞれのシーンにかかわるNPCがどのような立場でどう動こうとしているのかという設定もほしい。
具体例を挙げると次のような感じ。

 全体:盗賊団がある商人の蔵を襲おうとしている。
 部分1:盗賊団から1人が商人の奉公人として送り込まれている。
  奉公人(盗賊)は襲撃時に鍵などを開けておく。
 部分2:商人の家の者、他の奉公人のうち1人(NPC1)が奉公人(盗賊)のことを怪しんでいる。
  奉公人(盗賊)もNPC1に怪しまれていることに気づいている。
 部分3:NPC1は奉公人(盗賊)と盗賊団の者の連絡現場を目撃する。
 部分4:奉公人(盗賊)はNPC1を店の外で、他の盗賊の手で殺す。
 部分5:襲撃は新月の夜。

2. PCが事件にかかわるポイントと目的を提示してくれる
これは1に基づいて導入のパターンをいくつか生成してくれるものというイメージ。1の結果だけでもある程度は考えられるだろうけど、面白そうな導入パターンが提示されればありがたい。
具体例を挙げると次のような感じ。

 a. PCは商人の所に荷物を届け、一晩宿泊することになった。
 b. PCはNPC1が盗賊に襲われる現場に居合わせた。
 c. PCは襲撃された商家の生き残りから依頼を受けた。

a〜cのパターンによってPCがかかわるタイミングが変化するから、a〜cによってシナリオの展開は全然違ったものになるはず。例えば、aならタイミングによって巻き込まれるかNPC1と一緒に動くことになるだろうし、bなら直接依頼を受け、証拠をつかんで盗賊を倒すという展開になるだろうし、cなら犯人探しと盗賊退治という展開になるだろう。


この2点があればシナリオの骨格はできるから、あとはNPCとか地図を用意して、PCが接触して来た時のNPCの対応を考えてゆけばそこそこシナリオは作れると思うけどどうだろう?
ここまで書いてみて気付いたけれど、ランダム生成できなくても1とそれに関連した2のパターン集の様なものがあればかなり便利かもしれない。

掲示板を設置しました

これまでブログのコメントで質問などに回答していましたが、どうも過去の話題等に対する参照など不便な気がして来たので『The Lunatic』の掲示板を設置しました。
ルールの不明点の確認、質問、要望等あればこちらに書いていただければと思います。

『The Lunatic』掲示板
検索フォーム
RSSリンクの表示
リンク
Powered By FC2ブログ

今すぐブログを作ろう!

Powered By FC2ブログ

ブロとも申請フォーム

この人とブロともになる

QRコード
QR