RPGでMoose、その2:性別と一人称、そしてテンプレート
RPGでMoose、その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 を渡してるのは一人称で名前やニックネームを出すためですね。
当時はテンプレートのパーサを自作してましたが、今なら手頃なテンプレートエンジンをそのまま使えそうですね――とか思いましたが、文章を出力するだけじゃなくてキャラのパラメータ操作なんかも埋め込んでましたので、既存のテンプレートエンジンをそのまま使うのは難しい気もしますね。ううむ。