Jamis Buck's
Dice class inspired me (a lot). A few weeks ago, I decided to start thinking about a role-playing session manager. I'm still thinking about it, but in the interim, I started work on a few classes, just to "feel better". Included below is a BAB class. It is released as OGC as described by the
OGL. This class also has associated tests, if you are truly curious.
$ 5.bab.good
=> 5
$ 4.bab.poor # Suck it wizard
=> 2
$ 3.bab.medium + 5.bab.poor + 3.bab.poor # 3 Rogue / 5 Wizard / 3 Arcane Trickster
=> 5
class Bab
class InvalidCount < Exception # :nodoc:
end
TYPES = [:good, :medium, :poor]
attr_reader :count, :epic_count
def initialize( count )
raise InvalidCount unless count.is_a?(Integer) && count > 0
@count = count > 20 ? 20 : count
@epic_count = count > 20 ? count - 20 : 0
end
def good
self.count + epic_value
end
def medium
((self.count * 3) / 4) + epic_value
end
def poor
(self.count / 2) + epic_value
end
private
def epic_value
(self.epic_count + 1) / 2
end
end
class Integer
def bab
Bab.new(self)
end
end
No comments:
Post a Comment