Jul 15, 2010

ダイスがない!

TRPGりゅうたまを遊ぼうと、ルールブックも買ってウキウキしていたぽち。実際にシナリオを作ってプレイする前に、ぽち一人でプレイヤーキャラたちとモンスターとの模擬戦闘をやってみて、シナリオに登場させるのに丁度良い強さの敵を探してみようかな?なんて気分になって来ていました。ここでハタと気づいてみれば、りゅうたまでは 4面、6面、8面、10面、12面といった様々な多面ダイスを使いますけども、TRPGシステムでもメジャーな 6面ダイスや 10面ダイスはともかく、その他のマイナーなダイスをぽちは持っていません。しかも、ぽちが持っているダイスのうち割りと特殊な 10面ダイスは東京在住時代に専門店で購入したもので、かなりの田舎在住の現在、6面ダイス以外の多面ダイスは出掛けるのに現実的な距離にあるおもちゃ屋さんなどでは入手出来ません。将来的には Web通販に頼るにしろ、当面のこの状態には困ってしまいました。こんな事をチャットで愚痴っていると、お友達から「紙で自作すれば?」というお言葉。

自作?

そう、自作です!

ぽちには、Perl を始めたての頃に書いた IRCダイスボットがあるじゃないですか!!

そこからダイスロール部分のコードを抜き出してローカル実行用のツールにすればソロ模擬戦には充分です。けど、ここでまたハタと気づいてみれば、ぽちの IRCダイスボットは、ローカルに保存していたものは昨年末の HDD故障で失われていますし、さらにそれより前、Facelessさんが Perl で書かれた汎用性があって高機能の素敵な IRCダイスボットを公開された時に、より劣るぽちの IRCダイスボットは Web での公開もやめています。つまりローカルなぽちPC の中にも Web上にも再利用出来るコードはどこにも無くなっていたのでした。

こうしてズボラな手抜きの道を断たれたぽちが仕方なくちゃちゃっとテキトーに書いたのが下のダイスツールです。

dice.pl

#!/usr/bin/perl

use strict;
use warnings;
use Math::Random::MT;        # 擬似乱数生成にメルセンヌ・ツイスタを使ってみる

my @dices;
my @advs;
my $dice_sum = 0;
my $adv_sum = 0;

@ARGV or die "need argument!\n";
if (@ARGV <= 3) {         # 引き数は三つまで
    while (@ARGV) {
        my $arg = shift;
        if ($arg =~ /^[1-9]\d?d(?:4|6|8|10|12|20|100)$/) { # 個数二桁まで、一般的な多面ダイスのみ
            push @dices, $arg;
        } elsif ($arg =~ /^(?:\+|-)?\d{1,2}$/) {           # 修正値は二桁まで
            push @advs, $arg;
	} else {
            warn "irregular argument: $arg!\n";
	}
    }
} else {
    die "too mach arguments!\n";
}

my $seed = time ^ $$ ^ unpack "%L*", `ps axww | gzip -f`;
my $gen  = Math::Random::MT->new($seed);

foreach my $dice (@dices) {
    $dice =~ /^([1-9]\d?)d(4|6|8|10|12|20|100)$/;
    my ($dice_count, $dice_size) = ($1, $2);
    while ($dice_count) {
	my $a_dice = int $gen->rand($dice_size) + 1;
	$dice_sum += $a_dice;
	$dice_count--;
	print "d$dice_size: $a_dice\n";
    }
}

foreach my $adv (@advs) {
    $adv_sum += $adv;
}
print "add: $adv_sum\n";
print "sum: ", $dice_sum + $adv_sum, "\n";

擬似乱数生成にメルセンヌ・ツイスタを使おうと CPANモジュールの Math::Random::MT を使っている上に、乱数種を作るのに UNIX/Linuxコマンドの psgzip に依存しているので Linux を始めとした Unixっぽい環境でしか動きませんが、どのみち自分用ですのでこれでよし。

この dice.pl に実行権限を付けて実行パスの通ったディレクトリに放り込んだ後、

$ dice.pl 1d4 1d8 +1
d4: 3
d8: 2
add: 1
sum: 6
$ dice.pl 2d10 1d12 -2
d10: 6
d10: 5
d12: 11
add: -2
sum: 20

といった感じで使ってみたり。

これでやっとりゅうたまの模擬戦が出来ます。

Posted at 13:10 in perl | Permalink | Comments/Trackbacks ()

Jul 08, 2010

最近読んだ本:りゅうたま・新版暗号技術入門・乙嫁語り 2巻

りゅうたま表紙画像

りゅうたま

以前ソードワールド2.0のルールブックを購入してから一年半振りに TRPG のルールブックを買いました。最初は表紙絵のほのぼの感に惹かれたのですけども、色々と調べるうちに SNE系や FEAR系といった最近主流のものとは随分違うアプローチでデザインされているようで、ずっと遊んでみたかったのをやっとこさ購入。GM が『竜人』というキャラクターとして世界に(ゲームの進行に)干渉するという竜人ルールがちょっと変わっています。GM の『神の手』がルールとして明文化されてる TRPG は始めて見ました。GM未経験だったり GM に不慣れだったりするひとには、GM としてどう動くのかの指針になるのかもしれませんね。プレイヤーとネタを出し合いながら街や世界を作っていく、街づくりルールや世界づくりルールが愉しそう。ネコゴブリンもかわゆいです。残念な部分は、ルールブックの章立ての構成がいけないのか一回通して読むだけではルールの全貌を把握するのが困難なところ。シンプルなルールなので繰り返し読むのもそれほど手間ではありませんが、初心者さんがパッと読んで理解するにはキビシイ感じがします。

新版暗号技術入門 秘密の国のアリス表紙画像

新版暗号技術入門 秘密の国のアリス

デジモンテイマーズクリプトノミコンに影響されて、パソコンのパの字も知らないぽちが Windows をすっとばしてイキナリ Linux を勉強し始めたのは以前にもどこかで書いたかもしれませんけども、その二つの契機のうちの一つクリプトノミコンは、二つの時代に跨がる新旧の暗号技術やコンピュータが主題になった冒険(?)小説でした。この本はその暗号技術に関しての分かり易い入門書です。現代の暗号技術に関しては大雑把には理解していたのですけども、実際の計算の過程も含めて、その仕組みをこれほど分かり易く書いてある本は稀なのではないでしょうか? GnuPG を使って暗号化したり署名したりする - ぽち*ぷ〜ちのように、メールの暗号化やメールへの電子署名に GnuPG を使っているぽちとしては PGP の動作について解説している部分が一番興味深かったです。

乙嫁語り2巻表紙画像

乙嫁語り 2巻 

絵もお話も、安心の森薫クオリティ。

荒事もあったりする第二巻ですが、その荒事を通してアミルさんとカルルクくんが次第に想いを深め合って来る様子がしみじみとしててイイ感じ。今回新登場のパリヤちゃんも、ひとに対して不器用な感じが好印象です。

Posted at 20:55 in | Permalink | Comments/Trackbacks ()