Example #1
0
 def __init__(self, name, race, attrs=None):
     super(D20Character, self).__init__(name, attrs)
     self.levels = LevelBox()
     self.race = race
     self.FEATS = {}
     self.unarmed = D20Weapon('1d3', ['MELEE', 'UNARMED', 'CORPORIAL'],
                              'Unarmed', 0, {
                                  'SIZE': 0,
                                  'WEIGHT': 0
                              }, 'A barroom tradition', {})
     self.grapple = D20Weapon('1d8', ['MELEE', 'GRAPPLE', 'CORPORIAL'],
                              'Grappling', 0, {
                                  'SIZE': 0,
                                  'WEIGHT': 0
                              }, 'A barroom tradition', {})
     self.weapon = None
 def __init__( self, name, race, attrs=None ):
     super( D20Character, self ).__init__( name, attrs )
     self.levels = LevelBox( )
     self.race = race
     self.FEATS = { }
     self.unarmed = D20Weapon( '1d3', [ 'MELEE', 'UNARMED', 'CORPORIAL' ], 'Unarmed', 0, { 'SIZE':0 , 'WEIGHT': 0 }, 'A barroom tradition', { } )
     self.grapple = D20Weapon( '1d8', [ 'MELEE', 'GRAPPLE', 'CORPORIAL' ], 'Grappling', 0, { 'SIZE':0, 'WEIGHT': 0 }, 'A barroom tradition', { } )
     self.weapon = None
class D20Character( Character ):
    def __init__( self, name, race, attrs=None ):
        super( D20Character, self ).__init__( name, attrs )
        self.levels = LevelBox( )
        self.race = race
        self.FEATS = { }
        self.unarmed = D20Weapon( '1d3', [ 'MELEE', 'UNARMED', 'CORPORIAL' ], 'Unarmed', 0, { 'SIZE':0 , 'WEIGHT': 0 }, 'A barroom tradition', { } )
        self.grapple = D20Weapon( '1d8', [ 'MELEE', 'GRAPPLE', 'CORPORIAL' ], 'Grappling', 0, { 'SIZE':0, 'WEIGHT': 0 }, 'A barroom tradition', { } )
        self.weapon = None

    def addLevel( self, characterclass ):
        try:
            numlevels = int( self.levels[ characterclass.name ] )
        except KeyError:
            numlevels = 0
        classlevel = characterclass.getLevel( self, numlevels )
        racelevel = self.race.getLevel( self, numlevels, characterclass )
        self.levels.addLevel( classlevel )
        self.levels.addLevel( racelevel )
        classlevel.enable( )
        racelevel.enable( )

    def beginCombat( self ):
        self.DEX.mod.addTarget( self.AC, 'ATTRIBUTE', ( ) )

    def endCombat( self ):
        self.DEX.mod.removeTarget( self.AC )

    def attack( self, foe, weapon=None ):
        #This will need fixing.  It's just for testing purposes.  FIXME
        if weapon:
            self.unreadyWeapon( )
            self.readyWeapon( weapon )
        weapon = self.weapon
        return D20Attack( None, self, foe )

    def readyWeapon( self, weapon ):
        weapon.ready( self )
        self.weapon = weapon

    def unreadyWeapon( self ):
        #This will need fixing.  It's just for testing purposes.  FIXME
        try:
            try:
                self.weapon.unready( self )
            except TypeError:
                pass
            if self.weapon != self.unarmed:
                self.readyWeapon( self.unarmed )
            else:
                self.weapon = None
        except AttributeError:
            pass

    #Properties
    def setAbilityScore( self, tag, name, number, modsprovided=None ):
        try:
            self.attrs[ tag ].number = number
        except:
            self.attrs[ tag ] = D20AbilityScore( name, number )

    def setAttribute( self, tag, name, number ):
        try:
            self.attrs[ tag ].number = number
        except:
            self.attrs[ tag ] = D20Attribute( name, number )

    def setStat( self, tag, name, number ):
        try:
            self.attrs[ tag ].number = number
        except:
            self.attrs[ tag ] = D20Stat( name, number )

    def setSize( self, tag, name, letter, modsprovided=None ):
        try:
            self.attrs[ tag ].letter = letter
        except:
            self.attrs[ tag ] = D20Size( letter )

    def getATT( self ):
        try:
            return self.weapon.ATT
        except AttributeError:
            return self.BAB
    ATT = property( fget=getATT, doc="This character's Attack bonus" )

    def getLevel( self ):
        charlevelnum = 1
        try:
            for level in self.levels[ 'RACE' ].values( ):
                if level.enabled:
                    charlevelnum += 1
        except KeyError:
            pass
        return charlevelnum
    level = property( fget=getLevel, doc="This character's level" )

    attTypes = { 
                #Basic Attributes
                'STR' : ( setAbilityScore, 'Strength', ( ), 0 ),
                'DEX' : ( setAbilityScore, 'Dexterity', ( ), 0 ),
                'CON' : ( setAbilityScore, 'Constitution', ( ), 0 ),
                'INT' : ( setAbilityScore, 'Intelligence', ( ), 0 ),
                'WIS' : ( setAbilityScore, 'Wisdom', ( ), 0 ),
                'CHA' : ( setAbilityScore, 'Charisma', ( ), 0 ),
                #END Basic Attributes

                #Calculated Attributes
                'AC' : ( setAttribute, 'Armor Class', 
                    (
                        ( 'SIZE', '-1 SIZE', ( ) ),
                    ), 10 ),
                'BAB' : ( setStat, 'Base Attack Bonus', ( ), 0 ),
                'WILL' : ( setAttribute, 'Will Save', 
                    (
                        ( 'ABILITY', 'WIS', ( ) ),
                    ), 0 ),
                'FORT' : ( setAttribute, 'Fortitude Save', 
                    (
                        ( 'ABILITY', 'CON', ( ) ),
                    ), 0 ),
                'REF' : ( setAttribute, 'Reflex Save', 
                    (
                        ( 'ABILITY', 'DEX', ( ) ),
                    ), 0 ),
                'INIT' : ( setAttribute, 'Initiative', ( ), 0 ),
                'EL' : ( setAttribute, 'Effective Level', ( ), 0 ),
                'HP' : ( setAttribute, 'Hit Points', ( ), 0 ),
                'WOUNDS' : ( setAttribute, 'Wounds', ( ), 0 ),
                'SPEED' : ( setAttribute, 'Movement Speed', ( ), 30 ),
                'SIZE' : ( setSize, 'Size Category', ( ), 'M' )
                }
Example #4
0
class D20Character(Character):
    def __init__(self, name, race, attrs=None):
        super(D20Character, self).__init__(name, attrs)
        self.levels = LevelBox()
        self.race = race
        self.FEATS = {}
        self.unarmed = D20Weapon('1d3', ['MELEE', 'UNARMED', 'CORPORIAL'],
                                 'Unarmed', 0, {
                                     'SIZE': 0,
                                     'WEIGHT': 0
                                 }, 'A barroom tradition', {})
        self.grapple = D20Weapon('1d8', ['MELEE', 'GRAPPLE', 'CORPORIAL'],
                                 'Grappling', 0, {
                                     'SIZE': 0,
                                     'WEIGHT': 0
                                 }, 'A barroom tradition', {})
        self.weapon = None

    def addLevel(self, characterclass):
        try:
            numlevels = int(self.levels[characterclass.name])
        except KeyError:
            numlevels = 0
        classlevel = characterclass.getLevel(self, numlevels)
        racelevel = self.race.getLevel(self, numlevels, characterclass)
        self.levels.addLevel(classlevel)
        self.levels.addLevel(racelevel)
        classlevel.enable()
        racelevel.enable()

    def beginCombat(self):
        self.DEX.mod.addTarget(self.AC, 'ATTRIBUTE', ())

    def endCombat(self):
        self.DEX.mod.removeTarget(self.AC)

    def attack(self, foe, weapon=None):
        #This will need fixing.  It's just for testing purposes.  FIXME
        if weapon:
            self.unreadyWeapon()
            self.readyWeapon(weapon)
        weapon = self.weapon
        return D20Attack(None, self, foe)

    def readyWeapon(self, weapon):
        weapon.ready(self)
        self.weapon = weapon

    def unreadyWeapon(self):
        #This will need fixing.  It's just for testing purposes.  FIXME
        try:
            try:
                self.weapon.unready(self)
            except TypeError:
                pass
            if self.weapon != self.unarmed:
                self.readyWeapon(self.unarmed)
            else:
                self.weapon = None
        except AttributeError:
            pass

    #Properties
    def setAbilityScore(self, tag, name, number, modsprovided=None):
        try:
            self.attrs[tag].number = number
        except:
            self.attrs[tag] = D20AbilityScore(name, number)

    def setAttribute(self, tag, name, number):
        try:
            self.attrs[tag].number = number
        except:
            self.attrs[tag] = D20Attribute(name, number)

    def setStat(self, tag, name, number):
        try:
            self.attrs[tag].number = number
        except:
            self.attrs[tag] = D20Stat(name, number)

    def setSize(self, tag, name, letter, modsprovided=None):
        try:
            self.attrs[tag].letter = letter
        except:
            self.attrs[tag] = D20Size(letter)

    def getATT(self):
        try:
            return self.weapon.ATT
        except AttributeError:
            return self.BAB

    ATT = property(fget=getATT, doc="This character's Attack bonus")

    def getLevel(self):
        charlevelnum = 1
        try:
            for level in self.levels['RACE'].values():
                if level.enabled:
                    charlevelnum += 1
        except KeyError:
            pass
        return charlevelnum

    level = property(fget=getLevel, doc="This character's level")

    attTypes = {
        #Basic Attributes
        'STR': (setAbilityScore, 'Strength', (), 0),
        'DEX': (setAbilityScore, 'Dexterity', (), 0),
        'CON': (setAbilityScore, 'Constitution', (), 0),
        'INT': (setAbilityScore, 'Intelligence', (), 0),
        'WIS': (setAbilityScore, 'Wisdom', (), 0),
        'CHA': (setAbilityScore, 'Charisma', (), 0),
        #END Basic Attributes

        #Calculated Attributes
        'AC': (setAttribute, 'Armor Class', (('SIZE', '-1 SIZE', ()), ), 10),
        'BAB': (setStat, 'Base Attack Bonus', (), 0),
        'WILL': (setAttribute, 'Will Save', (('ABILITY', 'WIS', ()), ), 0),
        'FORT':
        (setAttribute, 'Fortitude Save', (('ABILITY', 'CON', ()), ), 0),
        'REF': (setAttribute, 'Reflex Save', (('ABILITY', 'DEX', ()), ), 0),
        'INIT': (setAttribute, 'Initiative', (), 0),
        'EL': (setAttribute, 'Effective Level', (), 0),
        'HP': (setAttribute, 'Hit Points', (), 0),
        'WOUNDS': (setAttribute, 'Wounds', (), 0),
        'SPEED': (setAttribute, 'Movement Speed', (), 30),
        'SIZE': (setSize, 'Size Category', (), 'M')
    }