Skip to content

Getting Started

jsexauer edited this page Mar 31, 2014 · 4 revisions

Installing the application

  1. On your Android phone, you must allow installation of apps from unknown sources. To enable this, from the home screen, click on the Menu button, then go System Settings, then Security, then check the Unknown Sources box.
  2. From your phone's browser, go to http://bit.ly/1rVev62 to download and install the apk
  3. Verify "It Builds Character" has been installed to your system.

Building Characters

Let's build a character to play around with.

  1. From your computer, go to http://genericlifeform.pythonanywhere.com/IBC/characters/new
  2. Enter the code below in the "Character Definition" text-area and press submit.
# Create an example Character
c = Character()
# Name of our character
c.name = 'My Example Character'
# Character Level 
c.lvl = 1
# d10 hit die class
c.rpg_class.hit_die = 10
# Base Attack Bonus
c.BAB = 1
# Base Strength
c.base.str_score = 15      

# Give him a short sword
#  - Has a +0 attack modifier
#  - Deals 1d6 damage
#  - Has a 19-20 crit range
sword = Weapon("Short Sword", Attack(0, "1d6", [19,20]))
c.equipment.main_hand = sword


# Add a possible buff (used by the UI)
possible_buffs_list = [Buff("Bless",atk_mod=1)]

You will see a message that says "Character created successfully under id <number>. Write down this id number. Now, on your phone open the It Builds Character app.

  1. Scroll to the last tab, "IBC Def"
  2. Enter the character id in the box at the top and press Load
  3. Scroll back to the "Statistics" tab and verify the new character was loaded.

Modifying Characters

To edit the definition of a character from the website, go to:

http://genericlifeform.pythonanywhere.com/IBC/characters/<id>

where <id> is the id of the character we created in the previous section. Let's say we leveled to level 2 and picked up a buckler along the way. Add the following to the bottom of the definition:

############################
# Level 2

c.lvl = 2
c.BAB = 2

buckler = Equipment("Buckler")
buckler.AC = 1			# Adds 1 to AC
buckler.atk = -1		# Attack penalty for using a buckler
c.equipment.append(buckler)

If we reload the character on our app, we will notice that the level, hitpoints, AC, and attack have all changed to reflect the change of definition.

Additional Examples

Here are some additional example characters for you to work off of.

Level 7 Ranger

############################################################################
# Clement
# Level 7 Ranger
############################################################################

# Detect if we're already inside IBC and thus, all of this has been
#   provided for us
if 'Character' not in locals().keys():
    from model import (Character, RPGClass, Equipment, Weapon, Attack,
                       Buff, Feat, auditable)

class Ranger(RPGClass):
    def __init__(self):
        super(Ranger, self).__init__()
        self.hit_die = 10
        self.fort = 5       # TODO: Scale will level
        self.ref = 5
        self.will = 2

c = Character()
c.name = 'Clement (Lvl 7)'
c.lvl = 7
c.BAB = 7
c.rpg_class = Ranger()

# Ability Scores
c.base.str_score = 19
c.base.dex_score = 16
c.base.con_score = 14
# All the others are the default value of 10

# Armor
breastplate = Equipment("Mithral Chain Shirt +2")
breastplate.AC = 6
breastplate.ACP = 0
c.equipment.append(breastplate)

cr = Equipment("Ammulute of Natural Armor +2")
cr.natural_armor = 2
c.equipment.append(cr)

# Weapons
wep1 = Weapon("+1 Tidewater Cutless",
                        Attack(1, "1d6+1", [18,19,20]))
c.equipment.main_hand = wep1

wep2 = Weapon("+1 Keen Mwk Haxe", Attack(1, "1d6+1", [19,20], 3))
c.equipment.off_hand = wep2

wep3 = Weapon("+1 Vindictive Harpoon", Attack(1, "1d8+1", ranged=True))
c.equipment.append(wep3)

wep4 = Weapon("Battleaxe", Attack(0, "1d8", [20], 3))
c.equipment.append(wep4)


# Feats
twf = Feat("Two Weapon Fighting")
twf.twf_mh = +2
twf.twf_oh = +6
c.feats.append(twf)

resilient = Feat("Resilient")
resilient.fort = 1
resilient.twf_mh = 0
resilient.twf_oh = 0
c.feats.append(resilient)


### Possible Buffs
pbl  =  [Buff('Favored Enemy (Human)',4,4),
             Buff('Favored Enemy (Monstrous Humanoid)',2,2),
             Buff('Prayer',atk_mod=1,dmg_mod=1),]

bulls_strength = Buff("Bull's Strength")
bulls_strength.str_score = 4
pbl.append(bulls_strength)

pbl.append(Buff('Bless',atk_mod=1,dmg_mod=0))
bless = Buff('Prayer',atk_mod=1,dmg_mod=1)
bless.ref = 1
bless.fort = 1
bless.will = 1
pbl.append(bless)

pbl += \
    [Buff('Flanking',atk_mod=2)]

possible_buffs_list = pbl

Level 6 Cavalier

############################################################################
# Henri
# Level 6 Cavalier
############################################################################

# Detect if we're already inside IBC and thus, all of this has been
#   provided for us
if 'Character' not in locals().keys():
    from model import (Character, RPGClass, Equipment, Weapon, Attack,
                       Buff, Feat, auditable)

class Cavalier(RPGClass):
    def __init__(self):
        super(Cavalier, self).__init__()
        self.hit_die = 10
        self.fort = 5       # TODO: Scale will level
        self.ref = 2
        self.will = 2

c = Character()
c.name = 'Henri Web (Level 6)'
c.lvl = 6
c.BAB = 6
c.rpg_class = Cavalier()

# Ability Scores
c.base.str_score = 19
c.base.dex_score = 12
c.base.con_score = 13
c.base.cha_score = 14
# All the others are the default value of 10

# Armor
breastplate = Equipment("Masterwork Breastplate +2")
breastplate.AC = 8
breastplate.ACP = -3
c.equipment.append(breastplate)

cr = Equipment("Cloak of Resistance +1")
cr.fort = 1
cr.ref = 1
cr.will = 1
c.equipment.append(cr)

# Weapons
feybane_greatsword = Weapon("+2 Feybane Greatsword",
                        Attack(2, "2d6+2", [19,20], two_handed=True))
c.equipment.main_hand = feybane_greatsword

greatsword = Weapon("Greatsword", Attack(0, "2d6", [19,20], two_handed=True))
c.equipment.append(greatsword)

cmpst_lng_bow = Weapon("+2 Cmpst Lng Bow", Attack(2, "1d8", ranged=True))
c.equipment.append(cmpst_lng_bow)


short_sword = Weapon("Short Sword", Attack(0, "1d6", [19,20]))
c.equipment.append(short_sword)

# Feats
class Toughness(Feat):
    def on_apply(self, character):
        self.character = character
    @auditable
    def HP(self):
        _formula = "3 + max(lvl-3, 0)"
        lvl = self.character.lvl
        return 3 + max(lvl-3,0)
toughness = Toughness("Toughness")
c.feats.append(toughness)


### Possible Buffs
pbl  = []

bulls_strength = Buff("Bull's Strength")
bulls_strength.str_score = 4
pbl.append(bulls_strength)

pbl.append(Buff('Bless',atk_mod=1,dmg_mod=0))
bless = Buff('Prayer',atk_mod=1,dmg_mod=1)
bless.ref = 1
bless.fort = 1
bless.will = 1
pbl.append(bless)

challenge = Buff('Challenge', dmg_mod=5)
challenge.AC = 1
pbl.append(challenge)
challenge2 = Buff('Challenge (Non-target)')
challenge2.AC = -2
pbl.append(challenge2)

charge = Buff("Cavalier's Charge", atk_mod=4)
pbl.append(charge)

pbl.append(Buff("Broken (weapon)", atk_mod=-2, dmg_mod=-2))

buckler = Buff("Buckler")
buckler.AC = 1
buckler.atk = -1
pbl.append(buckler)

pbl += \
    [Buff('Sickened',atk_mod=-2,dmg_mod=-2),
     Buff('Flanking',atk_mod=2)]

possible_buffs_list = pbl