View on GitHub

It Builds Character

Pathfinder Character Management Suite

download Andorid package .APKdownload source .ZIP

It Builds Character

Yet another app for the Pathfinder Roleplaying Game to manage characters and combat. http://jsexauer.github.io/ItBuildsCharacter

Overview

Some features that make ItBuildsCharacter unique over others:

Andorid App

Android app built using kivy framework. It allows you to see all the basics statistics of your character, equip different weapons (which automatically updates the attacks), apply buffs to your character (see Buffs), and roll attacks. See pictures below.

Python Model

An extensive model has been created to allow the definition of characters as python objects. An example is presented below and is the character used in the following examples. I'll be honest, documentation is lacking, it's on the to-do list. While we're being honest, the model greatly favors melee characters right now. Spells lists aren't supported. Another thing for the to-do list...

Auditing

This is my favorite feature. Have you ever been looking at your charcter sheet and wondering "How exactly did I get a +7 reflex save? +5 from the class, +1 from my cloak, but I must be forgetting something... maybe some trait or something?" Wonder no longer! I support full auditing of all statistics to show how they were derived.

For example, here is how the sample character's hit point pool is calculated:

>>> with c.audit_context:
...     print c.HP
...
hit_die + (level-1)*hp_per_level + con*level + favored_class + feats:
  con: +1
  level: +5
  favored_class: +5
  hit_die: +10
  feats:
    Toughness (HP: +5)
  hp_per_level: +6
= +49

and here's how the attack and damage modifiers were calculated:

>>> with c.audit_context:
...     print c.attacks[0]
...
Attack of...:
  attack: <Attack Bonus at iterative + weapon:
            weapon: +2
            AB: <Sum of:
                  BAB: +5
                  str: +4
                = +9>
          = +11>
  damage: <Sum of:
            str: +4
            weapon: 2d6+2
            two_handed_str_bonus: +2
          = 2d6+8>
= +11 for 2d6+8 damage

Buffs

Toggle on buffs and conditions like flanking, rage, Bless, Inspire Courage, etc...
Statistics and attacks automatically update.

For example, let's say our example Cavalier is blessed and challenges his target. First let's build the buffs and apply them to the character

>>> challenge = Buff('Challenge', dmg_mod=5)
>>> challenge.AC = 1
>>> c.buffs.append(challenge)
>>> c.buffs.append(Buff('Bless', atk_mod=1))

Now let's sett how that's affected his attack:

>>> with c.audit_context:
...     print c.attacks[0]
Attack of...:
  attack: <Attack Bonus at iterative + weapon:
            weapon: +2
            AB: <Sum of:
                  BAB: +5
                  str: +4
                  buffs:
                    Bless (+1)
                = +10>
          = +12>
  damage: <Sum of:
            str: +4
            buffs:
              Challenge (+5)
            weapon: 2d6+2
            two_handed_str_bonus: +2
          = 2d6+13>
= +12 for 2d6+13 damage

Counters

Track things like HP, gold, XP, ki pool, etc. You can add/subtract one at a time (the + and - buttons), add arbitrary value (+n), or set to arbitrary value (n). Counter values are automatically saved to the sever, which brings us to...

Website Integration

The character definition and counter statuses are automatically synced between the phone app and the website. This means you can view your character online, on different phones/devices, etc and you'll always be looking at the same character. Ultimately, I hope to build off of the web-ui of MythWeavers, which is based on the open-source project 3EProfiler.

Android App Screenshots

Statistics Screen

Stats Screen

Attacks/Buffs Screen

Attacks/Buffs Screen

Counters

Counters Screen

Audits

A long-press on any darker-background numbers in the stats or attacks screen will show an "audit" of how that value was calculated. Attacks are among the most interesting:

Audit Screen

Example Character Definition

The code below will create a level 5 human Cavalier named Henri.

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 = 4       # TODO: Scale will level
        self.ref = 1
        self.will = 1

c = Character()
c.name = 'Henri'
c.lvl = 5
c.BAB = 5
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

Let's now give him a Masterwork Breastplate +2 and a Cloak of Resistance +1.

# 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)

To defend himself against the evils of Golarion, he needs a +2 Feybane Greatsword and a Composite long bow (in case he has to fight at range).

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

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

Finally, Henri took Toughness, which will scale as he levels. Notice that we can define a custom formula which show up during when we audit how his hit points were calculated.

# 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)

Installing and Using

ItBuildsCharacter is alpha-quality software. I develop it as I have time and think of new features I'd like to have. However, I am interested in releasing it to a larger user base (eventually the general Android App Store) if other find it useful.

You can get the latest test build as an Android APK here. Make sure you are allowing installation from unknown sources.

If you want the latest and greatest dev version:

Development

Right now I am the sole developer. But pull-requests are welcome! Any bugs should be submitted through the issue tracker.
Developed for Python 2.7 and Android 4.1.2.