No Grot is Good Grot

On one of my earlier posts I mentioned a Grot character, in other words a set of ability rolls that can not result in a playable character.


After a few dead ends and a little frustration I think I can now use the visitor pattern to check and see if I have a Grot before I go forward.

So All I really need to do is add into each of my 'Ability' classes the rule that applies for it. Using good old strength again the rule is a roll under 6 means you can only be a MU (Magic User) as well if you are going to me a MU you must have intelligence over 8. So in each 'Ability' class I have an 'is_grot' which tests for its grot condition. So in each of my Abblitiy classes I add something like this

sub is_grot { 
	my $self = shift;
	my ($attr) = @_;
	return 1	
		if ($attr->{strength} < 9 and $attr->{intelligence} < 5);
	return 0;
Then in the begin of my 'Creator' class I simply 'Visit' each ability with the in coming ability like this

sub BUILD {
    my $self = shift;
    my ($attr) = @_;
    # $attr->{self} = $self;
    foreach my $ability ((qw(Strength Intelligence Wisdom Charisma Constitution Dexterity ))){
		throw_exception( "NeitherRoleNorRoleNameIsGiven", {message=>"There can be no 'Class' for this set of ability rolls?"})
			if ($self->$ability->is_grot($attr));

and if there is a 'Grot' combination it will simply fail. So I did that and it works;

my $str = RPG::ADD::Creator->new({strength=>5,

There can be no 'Class' for this set of ability rolls? at C:\Dwimperl\perl\site\lib\Moose\ line 37

There are a number of other rules that may preclude a 'Class' choice (you should have at least a 9 in one ability) but as 'race' can effect the above rolls they still may be choice for a 'Class' after a 'race' is chosen this rule just weeds out the really bad rolls (and rare as the chance of not getting at least one 9, 10 or 11 are very very slim )

Well onto race next and then only 600 more pages of rules.

Leave a comment

About byterock

user-pic Long time Perl guy, a few CPAN mods allot of work on DBD::Oracle and a few YAPC presentations