pfrpg_tables 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. checksums.yaml +7 -0
  2. data/lib/pfrpg_tables/tables/attribute_modifier.rb +5 -0
  3. data/lib/pfrpg_tables/tables/attributes.rb +13 -0
  4. data/lib/pfrpg_tables/tables/bonus.rb +17 -0
  5. data/lib/pfrpg_tables/tables/equipment_totaler.rb +14 -0
  6. data/lib/pfrpg_tables/tables/feat_options.rb +28 -0
  7. data/lib/pfrpg_tables/tables/feat_totaler.rb +61 -0
  8. data/lib/pfrpg_tables/tables/feature_totaler.rb +86 -0
  9. data/lib/pfrpg_tables/tables/heroclasses/alchemist.rb +189 -0
  10. data/lib/pfrpg_tables/tables/heroclasses/arcane_archer.rb +98 -0
  11. data/lib/pfrpg_tables/tables/heroclasses/arcane_trickster.rb +89 -0
  12. data/lib/pfrpg_tables/tables/heroclasses/assassin.rb +79 -0
  13. data/lib/pfrpg_tables/tables/heroclasses/barbarian.rb +171 -0
  14. data/lib/pfrpg_tables/tables/heroclasses/bard.rb +190 -0
  15. data/lib/pfrpg_tables/tables/heroclasses/cavalier.rb +189 -0
  16. data/lib/pfrpg_tables/tables/heroclasses/cleric.rb +186 -0
  17. data/lib/pfrpg_tables/tables/heroclasses/dragon_disciple.rb +92 -0
  18. data/lib/pfrpg_tables/tables/heroclasses/druid.rb +190 -0
  19. data/lib/pfrpg_tables/tables/heroclasses/duelist.rb +79 -0
  20. data/lib/pfrpg_tables/tables/heroclasses/eldritch_knight.rb +86 -0
  21. data/lib/pfrpg_tables/tables/heroclasses/fighter.rb +170 -0
  22. data/lib/pfrpg_tables/tables/heroclasses/gunslinger.rb +189 -0
  23. data/lib/pfrpg_tables/tables/heroclasses/inquisitor.rb +189 -0
  24. data/lib/pfrpg_tables/tables/heroclasses/loremaster.rb +112 -0
  25. data/lib/pfrpg_tables/tables/heroclasses/magus.rb +189 -0
  26. data/lib/pfrpg_tables/tables/heroclasses/monk.rb +202 -0
  27. data/lib/pfrpg_tables/tables/heroclasses/mystic_theurge.rb +89 -0
  28. data/lib/pfrpg_tables/tables/heroclasses/oracle.rb +189 -0
  29. data/lib/pfrpg_tables/tables/heroclasses/paladin.rb +188 -0
  30. data/lib/pfrpg_tables/tables/heroclasses/pathfinder_chronicler.rb +79 -0
  31. data/lib/pfrpg_tables/tables/heroclasses/ranger.rb +313 -0
  32. data/lib/pfrpg_tables/tables/heroclasses/rogue.rb +168 -0
  33. data/lib/pfrpg_tables/tables/heroclasses/shadowdancer.rb +82 -0
  34. data/lib/pfrpg_tables/tables/heroclasses/sorcerer.rb +169 -0
  35. data/lib/pfrpg_tables/tables/heroclasses/summoner.rb +189 -0
  36. data/lib/pfrpg_tables/tables/heroclasses/witch.rb +189 -0
  37. data/lib/pfrpg_tables/tables/heroclasses/wizard.rb +189 -0
  38. data/lib/pfrpg_tables/tables/heroclasses.rb +4 -0
  39. data/lib/pfrpg_tables/tables/languages.rb +53 -0
  40. data/lib/pfrpg_tables/tables/level_table.rb +195 -0
  41. data/lib/pfrpg_tables/tables/size.rb +25 -0
  42. data/lib/pfrpg_tables/tables/spells/spells_per_day.rb +239 -0
  43. data/lib/pfrpg_tables/tables/spells.rb +28 -0
  44. data/lib/pfrpg_tables/tables/weapons.rb +57 -0
  45. data/lib/pfrpg_tables/tables.rb +10 -0
  46. data/lib/pfrpg_tables/version.rb +3 -0
  47. data/lib/pfrpg_tables.rb +8 -0
  48. metadata +117 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e719c0706c1aa057990b6af96f56e8061f568447
4
+ data.tar.gz: f6468ed7d32eeb77efe442198f7168987f6e0171
5
+ SHA512:
6
+ metadata.gz: 6a7fbe01f62311a0fdd9e1dc1328e5972150330850ff4dd22333111397287b8a6c2c94f005178f30b401f0312f437ed13c1a3b761271ed82300c33da34922736
7
+ data.tar.gz: 0e52520f211256b2adcd70673347ca73260decab85379813e714d1bbc601c3c587c12c139ad87ffbd4dd84f2863b30db05f0c69d7dfe70e7f92939751357c4a2
@@ -0,0 +1,5 @@
1
+ class AttributeModifier
2
+ def self.get_modifier(val)
3
+ return ((val - 10) / 2.0).floor
4
+ end
5
+ end
@@ -0,0 +1,13 @@
1
+ class PfrpgTables::Tables::Attributes
2
+ def self.attributes
3
+ ["STR", "DEX", "WIS", "CON", "CHA", "INT"]
4
+ end
5
+
6
+ def self.attributes_lower
7
+ attributes.map { |x| x.downcase }
8
+ end
9
+
10
+ def self.valid_attribute?(attr)
11
+ attributes_lower.find { |x| x == attr }
12
+ end
13
+ end
@@ -0,0 +1,17 @@
1
+ class PfrpgTables::Tables::Bonus
2
+ def self.stackable?(bonus_name)
3
+ stackable.find { |x| x == bonus_name }
4
+ end
5
+
6
+ def self.special?(bonus_name)
7
+ special.find { |x| x == bonus_name }
8
+ end
9
+
10
+ def self.stackable
11
+ ["dodge", "initiative"]
12
+ end
13
+
14
+ def self.special
15
+ ["speed", 'damage_reduction', 'class_skill']
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ module PfrpgTables
2
+ class EquipmentTotaler
3
+ attr_reader :entity, :levels
4
+ def initialize(entity)
5
+ @entity = entity
6
+ @levels = PfrpgCore::LevelParser.new(entity.level)
7
+ end
8
+
9
+ def total
10
+ return 1000
11
+ end
12
+
13
+ end
14
+ end
@@ -0,0 +1,28 @@
1
+ class PfrpgTables::Tables::FeatOptions
2
+ def self.get(special_type)
3
+ case special_type
4
+ when "weapons"
5
+ Weapon.all_weapon_types
6
+ when "simple_weapons"
7
+ Weapon.weapon_types('simple')
8
+ when "martial_weapons"
9
+ Weapon.weapon_types('martial')
10
+ when 'exotic_weapons'
11
+ Weapon.weapon_types('exotic')
12
+ when "magic_schools"
13
+ [
14
+ "Abjuration",
15
+ 'Conjuration',
16
+ 'Divination',
17
+ 'Enchantment',
18
+ 'Evocation',
19
+ 'Illusion',
20
+ 'Necromancy',
21
+ 'Transmutation',
22
+ 'Universalist'
23
+ ]
24
+ when 'skills'
25
+ Skill.skill_list.map { |x| x.description }
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,61 @@
1
+ module PfrpgTables
2
+ class FeatTotaler
3
+ attr_reader :entity, :levels
4
+ def initialize(entity)
5
+ @entity = entity
6
+ @levels = PfrpgCore::LevelParser.new(entity.level)
7
+ end
8
+
9
+ def total
10
+ return level_granted + race_granted + feature_granted + choice_granted
11
+ end
12
+
13
+ def level_granted
14
+ i = (1..levels.total).inject(0) do |sum, x|
15
+ choices = Tables::LevelTable.for_level(x)[:choices]
16
+ sum = sum + (choices.select { |c| choice_is_feat(c) }).size
17
+ end
18
+ return i
19
+ end
20
+
21
+ def race_granted
22
+ i = entity.race.bonus_choices.inject(0) do |sum, x|
23
+ sum = sum + 1 if choice_is_feat(x)
24
+ end
25
+ return i
26
+ end
27
+
28
+ def feature_granted
29
+ i = entity.class_features.inject(0) do |sum, x|
30
+ if x.respond_to? 'granted_choice'
31
+ choices = [x.granted_choice].flatten
32
+ sum += (choices.select { |c| choice_is_feat(c) }).size
33
+ end
34
+ end
35
+ return i || 0
36
+ end
37
+
38
+ def choice_granted
39
+ choices = []
40
+ lvls = @levels.parse
41
+ lvls.keys.each do |hc|
42
+ clazz = Heroclass.by_name(hc)
43
+ level = lvls[hc]
44
+ (1..level).each do |l|
45
+ clazz.bonuses_for_level(l)[:choices].each do |choice|
46
+ if (choice_is_feat(choice))
47
+ choice.npc_id = entity.id
48
+ choices << choice
49
+ end
50
+ end
51
+ end
52
+ end
53
+ @choose_features = choices.flatten.size
54
+ end
55
+
56
+ def choice_is_feat(choice)
57
+ choice.class.to_s['Feat'] != nil
58
+ end
59
+
60
+ end
61
+ end
@@ -0,0 +1,86 @@
1
+ module PfrpgTables
2
+ class FeatureTotaler
3
+ attr_reader :entity, :levels
4
+ def initialize(entity)
5
+ @entity = entity
6
+ @levels = PfrpgCore::LevelParser.new(entity.level)
7
+ @base_features = []
8
+ @choose_features = []
9
+ parse_features
10
+ end
11
+
12
+ def get_base_features
13
+ @base_features
14
+ end
15
+
16
+ def get_choose_features
17
+ @choose_features
18
+ end
19
+
20
+ def parse_features
21
+ choices = []
22
+ lvls = levels.parse
23
+ lvls.keys.each do |hc|
24
+ clazz = Heroclass.by_name(hc)
25
+ level = lvls[hc]
26
+ (1..level).each do |l|
27
+ class_features = clazz.bonuses_for_level(l)[:granted_features]
28
+ class_features.each do |x|
29
+ ap "Creating granted feature:"
30
+ ap "\t#{x} (#{hc})"
31
+ @base_features << ClassFeature.granted_feature(x, hc)
32
+ end
33
+ clazz.bonuses_for_level(l)[:choices].each do |choice|
34
+ if !(choice_is_feat(choice))
35
+ choice.npc_id = entity.id
36
+ choices << flatten_options(choice)
37
+ end
38
+ end
39
+ end
40
+ end
41
+ @choose_features = choices.flatten
42
+ end
43
+
44
+ def flatten_options(feature_choice)
45
+ ap "feature chioce:"
46
+ ap feature_choice.choices[:options][0]
47
+ if feature_choice.choices[:options][0].respond_to? 'name'
48
+ new_options = feature_choice.choices[:options].map { |x| x.name }
49
+ ap "New options:"
50
+ ap new_options
51
+ feature_choice.choices[:options] = new_options
52
+ end
53
+ return feature_choice
54
+ end
55
+
56
+ def level_granted
57
+ i = (1..levels.total).inject(0) do |sum, x|
58
+ choices = Tables::LevelTable.for_level(x)[:choices]
59
+ sum = sum + (choices.select { |c| choice_is_feat(c) }).size
60
+ end
61
+ return i
62
+ end
63
+
64
+ def race_granted
65
+ race = PfrpgRaces::Race.fetch(entity.race)
66
+ i = race.bonus_choices.inject(0) do |sum, x|
67
+ sum = sum + 1 if choice_is_feat(x)
68
+ end
69
+ return i
70
+ end
71
+
72
+ def feature_granted
73
+ i = entity.class_features.inject(0) do |sum, x|
74
+ choices = x.bonus_choices
75
+ sum += (choices.select { |c| choice_is_feat(c) }).size
76
+ end
77
+ return i
78
+ end
79
+
80
+ def choice_is_feat(choice)
81
+ choice.class.to_s['Feat'] != nil
82
+ end
83
+
84
+ end
85
+ end
86
+
@@ -0,0 +1,189 @@
1
+ class PfrpgTables::Tables::Heroclasses::Wizard
2
+ def self.level_bonus(level)
3
+ bonus = nil
4
+ case level
5
+ when 1
6
+ bonus = { :base_attack_bonus => [0],
7
+ :fort_save => 0,
8
+ :ref_save => 0,
9
+ :will_save => 2,
10
+ :choices => [ ChooseArcaneBond.new, ChooseArcaneSchool.new ],
11
+ :granted_features => ["cantrips", "scribe_spell"]
12
+ }
13
+ when 2
14
+ bonus = { :base_attack_bonus => [1],
15
+ :fort_save => 0,
16
+ :ref_save => 0,
17
+ :will_save => 3,
18
+ :choices => [],
19
+ :granted_features => []
20
+ }
21
+ when 3
22
+ bonus = { :base_attack_bonus => [1],
23
+ :fort_save => 1,
24
+ :ref_save => 1,
25
+ :will_save => 3,
26
+ :choices => [],
27
+ :granted_features => []
28
+ }
29
+ when 4
30
+ bonus = { :base_attack_bonus => [2],
31
+ :fort_save => 1,
32
+ :ref_save => 1,
33
+ :will_save => 4,
34
+ :choices => [],
35
+ :granted_features => []
36
+ }
37
+ when 5
38
+ bonus = { :base_attack_bonus => [2],
39
+ :fort_save => 1,
40
+ :ref_save => 1,
41
+ :will_save => 4,
42
+ :choices => [ ChooseWizardBonusFeat.new],
43
+ :granted_features => []
44
+ }
45
+ when 6
46
+ bonus = { :base_attack_bonus => [3],
47
+ :fort_save => 2,
48
+ :ref_save => 2,
49
+ :will_save => 5,
50
+ :choices => [],
51
+ :granted_features => []
52
+ }
53
+ when 7
54
+ bonus = { :base_attack_bonus => [3],
55
+ :fort_save => 2,
56
+ :ref_save => 2,
57
+ :will_save => 5,
58
+ :granted_features => [],
59
+ :choices => []
60
+ }
61
+ when 8
62
+ bonus = { :base_attack_bonus => [4],
63
+ :fort_save => 2,
64
+ :ref_save => 2,
65
+ :will_save => 6,
66
+ :granted_features => [],
67
+ :choices => []
68
+ }
69
+ when 9
70
+ bonus = { :base_attack_bonus => [4],
71
+ :fort_save => 3,
72
+ :ref_save => 3,
73
+ :will_save => 6,
74
+ :granted_features => [],
75
+ :choices => []
76
+ }
77
+ when 10
78
+ bonus = { :base_attack_bonus => [5],
79
+ :fort_save => 3,
80
+ :ref_save => 3,
81
+ :will_save => 7,
82
+ :choices => [ ChooseWizardBonusFeat.new],
83
+ :granted_features => [],
84
+ }
85
+ when 11
86
+ bonus = { :base_attack_bonus => [5],
87
+ :fort_save => 3,
88
+ :ref_save => 3,
89
+ :will_save => 7,
90
+ :granted_features => [],
91
+ :choices => []
92
+ }
93
+ when 12
94
+ bonus = { :base_attack_bonus => [6,1],
95
+ :fort_save => 4,
96
+ :ref_save => 4,
97
+ :will_save => 8,
98
+ :granted_features => [],
99
+ :choices => []
100
+ }
101
+ when 13
102
+ bonus = { :base_attack_bonus => [6,1],
103
+ :fort_save => 4,
104
+ :ref_save => 4,
105
+ :will_save => 8,
106
+ :granted_features => [],
107
+ :choices => []
108
+ }
109
+ when 14
110
+ bonus = { :base_attack_bonus => [7,2],
111
+ :fort_save => 4,
112
+ :ref_save => 4,
113
+ :will_save => 9,
114
+ :choices => [],
115
+ :granted_features => []
116
+ }
117
+ when 15
118
+ bonus = { :base_attack_bonus => [7,2],
119
+ :fort_save => 5,
120
+ :ref_save => 5,
121
+ :will_save => 9,
122
+ :choices => [ ChooseWizardBonusFeat.new],
123
+ :granted_features => [],
124
+ }
125
+ when 16
126
+ bonus = { :base_attack_bonus => [8,3],
127
+ :fort_save => 5,
128
+ :ref_save => 5,
129
+ :will_save => 10,
130
+ :choices => [],
131
+ :granted_features => []
132
+ }
133
+ when 17
134
+ bonus = { :base_attack_bonus => [8,3],
135
+ :fort_save => 5,
136
+ :ref_save => 5,
137
+ :will_save => 10,
138
+ :granted_features => [],
139
+ :choices => []
140
+ }
141
+ when 18
142
+ bonus = { :base_attack_bonus => [9,4],
143
+ :fort_save => 6,
144
+ :ref_save => 6,
145
+ :will_save => 11,
146
+ :granted_features => [],
147
+ :choices => []
148
+ }
149
+ when 19
150
+ bonus = { :base_attack_bonus => [9,4],
151
+ :fort_save => 6,
152
+ :ref_save => 6,
153
+ :will_save => 11,
154
+ :granted_features => [],
155
+ :choices => []
156
+ }
157
+ when 20
158
+ bonus = { :base_attack_bonus => [10,5],
159
+ :fort_save => 6,
160
+ :ref_save => 6,
161
+ :will_save => 12,
162
+ :granted_features => [],
163
+ :choices => [ ChooseWizardBonusFeat.new]
164
+ }
165
+ end
166
+ bonus
167
+ end
168
+
169
+ def self.familiars
170
+ {
171
+ "Bat" => "Master gains a +3 bonus on Fly checks",
172
+ "Cat" => "Master gains a +3 bonus on Stealth checks",
173
+ "Hawk" => "Master gains a +3 bonus on sight-based and opposed Perception checks in bright light",
174
+ "Lizard" => "Master gains a +3 bonus on Climb checks",
175
+ "Monkey" => "Master gains a +3 bonus on Acrobatics checks",
176
+ "Owl" => "Master gains a +3 bonus on sight-based and opposed Perception checks in shadows or darkness",
177
+ "Rat" => "Master gains a +2 bonus on Fortitude saves",
178
+ "Raven" => "Master gains a +3 bonus on Appraise checks, Speaks one language of its Master",
179
+ "Toad" => "Master gains +3 hit points",
180
+ "Viper" => "Master gains a +3 bonus on Bluff checks",
181
+ "Weasel" => "Master gains a +2 bonus on Reflex saves"
182
+ }
183
+ end
184
+
185
+ def self.bond_objects
186
+ ["amulet", "ring", "staff", "wand","weapon"]
187
+ end
188
+ end
189
+
@@ -0,0 +1,98 @@
1
+ class PfrpgTables::Tables::Heroclasses::ArcaneArcher
2
+
3
+ def self.level_bonus(level)
4
+ bonus = nil
5
+ case level
6
+ when 1
7
+ bonus = { :base_attack_bonus => [1],
8
+ :fort_save => 1,
9
+ :ref_save => 1,
10
+ :will_save => 0,
11
+ :granted_features => ["enhancearrows_magic"],
12
+ :choices => [],
13
+ :prestige_spells => 0
14
+ }
15
+ when 2
16
+ bonus = { :base_attack_bonus => [2],
17
+ :fort_save => 1,
18
+ :ref_save => 1,
19
+ :will_save => 1,
20
+ :granted_features => ["imbuearrow"],
21
+ :prestige_spells => 1
22
+ }
23
+ when 3
24
+ bonus = { :base_attack_bonus => [3],
25
+ :fort_save => 2,
26
+ :ref_save => 2,
27
+ :will_save => 1,
28
+ :granted_features => ["enhancearrows_elemental"],
29
+ :choices => [],
30
+ :prestige_spells => 1
31
+ }
32
+ when 4
33
+ bonus = { :base_attack_bonus => [4],
34
+ :fort_save => 2,
35
+ :ref_save => 2,
36
+ :will_save => 1,
37
+ :granted_features => ["seekerarrow"],
38
+ :choices => [],
39
+ :prestige_spells => 1
40
+ }
41
+ when 5
42
+ bonus = { :base_attack_bonus => [5],
43
+ :fort_save => 3,
44
+ :ref_save => 3,
45
+ :will_save => 2,
46
+ :granted_features => ["enhancearrows_distance"],
47
+ :choices => [],
48
+ :prestige_spells => 0
49
+ }
50
+ when 6
51
+ bonus = { :base_attack_bonus => [6],
52
+ :fort_save => 3,
53
+ :ref_save => 3,
54
+ :will_save => 2,
55
+ :granted_features => ["phasearrow"],
56
+ :choices => [],
57
+ :prestige_spells => 1
58
+ }
59
+ when 7
60
+ bonus = { :base_attack_bonus => [7],
61
+ :fort_save => 4,
62
+ :ref_save => 4,
63
+ :will_save => 2,
64
+ :granted_features => ["enhancearrows_elementalburst"],
65
+ :choices => [],
66
+ :prestige_spells => 1
67
+ }
68
+ when 8
69
+ bonus = { :base_attack_bonus => [8],
70
+ :fort_save => 4,
71
+ :ref_save => 4,
72
+ :will_save => 3,
73
+ :choices => [],
74
+ :granted_features => ["hailofarrows"],
75
+ :prestige_spells => 1
76
+ }
77
+ when 9
78
+ bonus = { :base_attack_bonus => [9],
79
+ :fort_save => 5,
80
+ :ref_save => 5,
81
+ :will_save => 3,
82
+ :granted_features => ["enhancearrows_aligned"],
83
+ :choices => [],
84
+ :prestige_spells => 0
85
+ }
86
+ when 10
87
+ bonus = { :base_attack_bonus => [10],
88
+ :fort_save => 5,
89
+ :ref_save => 5,
90
+ :will_save => 3,
91
+ :choices => [],
92
+ :granted_features => ["arrowofdeath"],
93
+ :prestige_spells => 1
94
+ }
95
+ end
96
+ bonus
97
+ end
98
+ end