-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathCharacter.py
More file actions
151 lines (148 loc) · 4.79 KB
/
Character.py
File metadata and controls
151 lines (148 loc) · 4.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#import json
from random import randint
from math import floor
from ETypes import Classes
from ETypes import Race
from ETypes import Size
from CharacterLevels import Barbarian
from CharacterLevels import Bard
from CharacterLevels import Cleric
from CharacterLevels import Fighter
from CharacterLevels import Monk
from CharacterLevels import Paladin
from CharacterLevels import Ranger
from CharacterLevels import Rogue
from CharacterLevels import Sorcerer
from CharacterLevels import Wizard
class Character:
# Ability Scores
con = 0
dex = 0
str = 0
cha = 0
int = 0
wis = 0
# Ability Score Modifiers
conRacialMod = 0
dexRacialMod = 0
strRacialMod = 0
chaRacialMod = 0
intRacialMod = 0
wisRacialMod = 0
# Character Variables
level = 0
barbarianLevel = 0
bardLevel = 0
clericLevel = 0
fighterLevel = 0
paladinLevel = 0
rangerLevel = 0
rogueLevel = 0
sorcererLevel = 0
wizardLevel = 0
languages = ["Common"]
AC = 0
BAB = 0
baseHitpoints = 0
fortitude = 0
reflex = 0
will = 0
speed = 0 # base land speed in feet
race = Race.UNSPECIFIED
size = Size.UNSPECIFIED
darkvision = 0 # Darkvision range in feet
lowLightVision = False # False/True = has/doesn't have LLV
###
# Why is low light vision even a thing? Its actual effects are so poorly explained that basically everyone just ignores them, and yet because
# it's a racial trait it's one of the first things new players are going to see. Why muddy the waters like this? Just give elves
# 30 feet of darkvision or something and be done with it.
# inb4 "But illumination!" Nobody tracks that, it's annoying, if you do track it congratulations on being a massive nerd
###
def assignAbilityScores(self,character,con,dex,str,cha,int,wis):
self.con = con
self.dex = dex
self.str = str
self.cha = cha
self.int = int
self.wis = wis
def increaseHitpoints(self,hitDie,rerollOne=False,increaseByAverage=False):
# hitDie = number of sides, 4 for d4, 6 for d6, etc
if self.level == 1:
self.baseHitpoints += hitDie
elif increaseByAverage:
if level%2==0:
self.baseHitpoints += int(floor(hitDie/2))
else:
self.baseHitpoints += int(floor(hitDie/2))+1
elif rerollOne:
self.baseHitpoints += randint(2,hitDie)
else:
self.baseHitpoints += randint(1,hitDie)
def levelUp(self,classLevel,rerollOne=False,increaseByAverage=False):
# classLevel is an enumerated type specified in ETypes.Class
self.level += 1
if classLevel == Classes.BARBARIAN:
self.barbarianLevel += 1
self.increaseHitpoints(12,rerollOne=rerollOne,increaseByAverage=increaseByAverage)
Bard.applyBardLevel(self)
elif classLevel == Classes.BARD:
self.bardLevel += 1
self.increaseHitpoints(6,rerollOne=rerollOne,increaseByAverage=increaseByAverage)
Barbarian.applyBarbarianLevel(self)
elif classLevel == Classes.CLERIC:
self.clericLevel += 1
self.increaseHitpoints(8,rerollOne=rerollOne,increaseByAverage=increaseByAverage)
Cleric.applyClericLevel(self)
elif classLevel == Classes.FIGHTER:
self.fighterLevel += 1
self.increaseHitpoints(10,rerollOne=rerollOne,increaseByAverage=increaseByAverage)
Fighter.applyFighterLevel(self)
elif classLevel == Classes.MONK:
self.monkLevel += 1
self.increaseHitpoints(8,rerollOne=rerollOne,increaseByAverage=increaseByAverage)
Monk.applyMonkLevel(self)
elif classLevel == Classes.PALADIN:
self.paladinLevel += 1
self.increaseHitpoints(10,rerollOne=rerollOne,increaseByAverage=increaseByAverage)
Paladin.applyPaladinLevel(self)
elif classLevel == Classes.RANGER:
self.rangerLevel += 1
self.increaseHitpoints(8,rerollOne=rerollOne,increaseByAverage=increaseByAverage)
Ranger.applyRangerLevel(self)
elif classLevel == Classes.ROGUE:
self.rogueLevel += 1
self.increaseHitpoints(6,rerollOne=rerollOne,increaseByAverage=increaseByAverage)
Rogue.applyRogueLevel(self)
elif classLevel == Classes.SORCERER:
self.sorcererLevel += 1
self.increaseHitpoints(4,rerollOne=rerollOne,increaseByAverage=increaseByAverage)
Sorcerer.applySorcererLevel(self)
elif classLevel == Classes.WIZARD:
self.wizardLevel += 1
self.increaseHitpoints(4,rerollOne=rerollOne,increaseByAverage=increaseByAverage)
Wizard.applyWizardLevel(self)
def conMod(self):
return floor((self.con-10)/2)
def dexMod(self):
return floor((self.dex-10)/2)
def strMod(self):
return floor((self.str-10)/2)
def chaMod(self):
return floor((self.cha-10)/2)
def intMod(self):
return floor((self.int-10)/2)
def wisMod(self):
return floor((self.wis-10)/2)
# Features of Multiple Classes
trapSense = 0
uncannyDodge = False
improvedUncannyDodge = False
# Barbarian Class Features
barbarianDamageReduction = 0
barbarianGreaterRage = False
barbarianIndomitableWill = False
barbarianRagesPerDay = 0
barbarianFastMovement = 0
barbarianIlliterate = False
barbarianTirelessRage = False
barbarianMightyRage = False