RPGでMoose、その2:性別と一人称、そしてテンプレート

RPGMoose、その2:性別と一人称、そしてテンプレート

 性別を決めるゲームはそれなりにあると思うのですが(テーブルトークRPGだとだいたい決めるかな?)、一人称を決めるゲームはあんまりないですね。でも今回は決めることになってます。

package TG::PC;
use utf8;
use Any::Moose;

# 性別
use TG::Param::Gender;
has gender => (
    is  => 'ro',
    isa => 'TG::Param::Gender',
    handles => {
        gender_name => 'name',
        is_male   => 'is_male',
        is_female => 'is_female',
    },
);

# 一人称
use TG::Param::Firstperson;
has firstperson => (
    is  => 'ro',
    isa => 'TG::Param::Firstperson',
);
has me => (
    is => 'ro',
    lazy => 1,
    builder => '_build_me',
);
sub _build_me {
    my $self = shift;
    $self->firstperson->as_string($self);
}


 なんでこんな風になってるかと言いますと、

 $pc->fullnameが叫ぶ。

#IF $pc->is_male

「$pc->meはそんなことしない!」

#ELSE

「$pc->meはそんなことしてません!」

#ENDIF

「私も$pc->nicknameに限ってそんなことはしないと信じたいけど、でもここに証拠があるのよ……」

――みたいな文章を作るためです。

 まあ、ちょっと気の利いたゲームブックみたいな感じですね。完全にキャラのイメージ通りってわけにはいきませんが、一応それっぽい文章になります。

 上記の例だとキャラの性別で口調を変えてるだけですが*1、性別で全然違う内容にしたりもできます。

 ちなみに選べる「一人称」は

  • ボク
  • ぼく
  • わたし
  • わたくし
  • あたし
  • オレ
  • 自分
  • [自分の名前]
  • [自分の名前]ちゃん
  • [自分のニックネーム]

――でした*2

 $firstperson->as_string() に $pc を渡してるのは一人称で名前やニックネームを出すためですね。

 当時はテンプレートのパーサを自作してましたが、今なら手頃なテンプレートエンジンをそのまま使えそうですね――とか思いましたが、文章を出力するだけじゃなくてキャラのパラメータ操作なんかも埋め込んでましたので、既存のテンプレートエンジンをそのまま使うのは難しい気もしますね。ううむ。

*1:ちなみに「口調」という項目を作るべきという話もありましたが、毎回口調を変えた文章を書くのも難儀なのでそれはやめました。

*2:もっと増やせたとは思うけど、「普通じゃないのを増やしても」的な判断が働いて上記になったんだっけなぁ。