wayfinder 0.0.2 → 0.0.4

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 (4) hide show
  1. checksums.yaml +4 -4
  2. data/bin/wayfinder +25 -46
  3. data/lib/wayfinder.rb +34 -4
  4. metadata +30 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 49cdac443c350933b03ad215ee7e43da2e5539e5
4
- data.tar.gz: a697860716196fef98af22812ec0c6182b5f1106
3
+ metadata.gz: e79fa064d4cb9ac71b713c26f5861b4708c1de8b
4
+ data.tar.gz: 8ceb7131687cb6eb167435d3060842b4d72005f1
5
5
  SHA512:
6
- metadata.gz: 09b2aae730d8be81dea7d20912938ce41d66df5d04c36ec1f1cd28c065a8a3e24fb4ab2138e695e5a48bfbc24880cab53056ded1ce1abfb799df2cacca876883
7
- data.tar.gz: 2700bf2c6ce598a857b7efe7a8ec6012d15103e213f8a82604dc0432c050cbf832989106c1eebec76ac2e14226a5b7ce39e8f6ed371b9b1f4641085c18a9b3ad
6
+ metadata.gz: 56a97597af28f2efb5f0c904b4226552193fbb13f379e985604cb37d328dcb61c46739dd075acb60a2a8af13aa5ceaa11bbcbd73e43cc07b25dbc86ff57e7367
7
+ data.tar.gz: 5efb1eef1ad3fb85a1165ba287b27e77f7e06197168e12e671bc047d1beb8e8629488ecbd3267d41f194938ac898032efd467c5b2f338f35aa13e3f9ce2dab98
@@ -1,23 +1,40 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  require 'box'
4
+ require 'clap'
4
5
  require 'yaml'
5
6
  require 'mote'
6
7
  require 'wayfinder'
8
+ require 'debugger'
9
+
10
+ source_dir = 'source'
11
+ output_file = 'README.md'
12
+ template_file = 'source/template.md'
13
+
14
+ Clap.run ARGV,
15
+ '-s' => lambda { |param| source_dir = param },
16
+ '-o' => lambda { |param| output_file = param },
17
+ '-t' => lambda { |param| template_file = param }
7
18
 
8
19
  source_data = {}
9
20
  %i(meta stats gear feats buffs skills).each do |source_file|
10
- source_data[source_file] = YAML.load_file("#{ source_file.to_s }.yml")
21
+ source_data[source_file] = YAML.load_file(File.join(source_dir, "#{ source_file.to_s }.yml"))
11
22
  end
12
23
 
13
24
  character = Wayfinder::Character.new(source_data)
14
- template = Mote.parse(Box::FILES['character_sheet.htm'],
15
- self,
16
- [:character]
17
- )
18
25
 
19
- File.open('character_sheet.htm', 'w') do |f|
20
- f.write(template.call(character: character))
26
+ case ARGV[0]
27
+ when 'console'
28
+ debugger; 1
29
+ when 'generate'
30
+ template = if File.exists?(template_file)
31
+ Mote.parse(File.read(template_file), self, [:character])
32
+ else
33
+ output_file = 'character_sheet.htm'
34
+ Mote.parse(Box::FILES['character_sheet.htm'], self, [:character])
35
+ end
36
+
37
+ File.open(output_file, 'w') { |f| f.write(template.call(character: character)) }
21
38
  end
22
39
 
23
40
  __END__
@@ -164,7 +181,7 @@ __END__
164
181
  <td align="center" bgcolor="black"><font style="font-size:9pt" color="white"><b>HP</b></font></td>
165
182
  <td align="center" class="border9"><b>{{ character.hp }}</b></td>
166
183
  <td align="center" class="font7"><br /></td>
167
- <td align="center" class="border9">{{ character.received_damage }}<br /></td>
184
+ <td align="center" class="border9">{{ character.received_damage }}/{{ character.current_hp }}<br /></td>
168
185
  <td align="center" class="font7"><br /></td>
169
186
  <td align="center" class="border9"><b>&nbsp;&nbsp;</b></td>
170
187
  <td align="center" class="font7"><br /></td>
@@ -209,44 +226,6 @@ __END__
209
226
  <!-- STOP Base Attack Table -->
210
227
  </td>
211
228
  <td rowspan="2" valign="top" width="50%">
212
-
213
- <!-- STOP PSI Power Points Table -->
214
- <!-- START Skills Table -->
215
- <table cellpadding="0" cellspacing="0" border="0" width="100%" summary="Skills Table">
216
- <tr>
217
- <td colspan="3" bgcolor="black" align="center"><font style="font-size: 9pt" color="white"><b>SKILLS</b></font>
218
- </td>
219
- </tr>
220
- <tr>
221
- <td align="left" class="border" valign="top">
222
- <table cellpadding="0" cellspacing="0" border="0" width="100%" summary="Skills Table">
223
- <tr><td align="left" class="borderbottom"><font style="font-size: 5pt">&nbsp;Name</font></td><td align="left" class="borderbottom"><font style="font-size: 5pt">Abb</font></td><td align="right" class="borderbottom"><font style="font-size: 5pt">Rnk</font></td><td align="right" class="borderbottom"><font style="font-size: 5pt">Tot&nbsp;</font></td><td align="left" class="borderbottom"><font style="font-size: 5pt">&nbsp;Name</font></td><td align="left" class="borderbottom"><font style="font-size: 5pt">Abb</font></td><td align="right" class="borderbottom"><font style="font-size: 5pt">Rnk</font></td><td align="right" class="borderbottom"><font style="font-size: 5pt">Tot&nbsp;</font></td><td align="left" class="borderbottom"><font style="font-size: 5pt">&nbsp;Name</font></td><td align="left" class="borderbottom"><font style="font-size: 5pt">Abb</font></td><td align="right" class="borderbottom"><font style="font-size: 5pt">Rnk</font></td><td align="right" class="borderbottom"><font style="font-size: 5pt">Tot&nbsp;</font></td><tr>
224
- <tr><td align="left"><font style="font-size: 5pt">&nbsp;Acrobatics</font></td><td align="left"><font style="font-size: 5pt">DEX</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-11&nbsp;</font></td><td align="left"><font style="font-size: 5pt">&nbsp;Disguise</font></td><td align="left"><font style="font-size: 5pt">CHA</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-5&nbsp;</font></td><td align="left"><font style="font-size: 5pt">&nbsp;Ride</font></td><td align="left"><font style="font-size: 5pt">DEX</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-11&nbsp;</font></td><tr><tr><td align="left"><font style="font-size: 5pt">&nbsp;Acrobatics (Jump)</font></td><td align="left"><font style="font-size: 5pt">DEX</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-23&nbsp;</font></td><td align="left"><font style="font-size: 5pt">&nbsp;Escape Artist</font></td><td align="left"><font style="font-size: 5pt">DEX</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-11&nbsp;</font></td><td align="left"><font style="font-size: 5pt">&nbsp;Sense Motive</font></td><td align="left"><font style="font-size: 5pt">WIS</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-5&nbsp;</font></td><tr><tr><td align="left"><font style="font-size: 5pt">&nbsp;Appraise</font></td><td align="left"><font style="font-size: 5pt">INT</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-5&nbsp;</font></td><td align="left"><font style="font-size: 5pt">&nbsp;Fly</font></td><td align="left"><font style="font-size: 5pt">DEX</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-11&nbsp;</font></td><td align="left"><font style="font-size: 5pt">&nbsp;Stealth</font></td><td align="left"><font style="font-size: 5pt">DEX</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-11&nbsp;</font></td><tr><tr><td align="left"><font style="font-size: 5pt">&nbsp;Bluff</font></td><td align="left"><font style="font-size: 5pt">CHA</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-5&nbsp;</font></td><td align="left"><font style="font-size: 5pt">&nbsp;Heal</font></td><td align="left"><font style="font-size: 5pt">WIS</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-5&nbsp;</font></td><td align="left"><font style="font-size: 5pt">&nbsp;Survival</font></td><td align="left"><font style="font-size: 5pt">WIS</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-5&nbsp;</font></td><tr><tr><td align="left"><font style="font-size: 5pt">&nbsp;Climb</font></td><td align="left"><font style="font-size: 5pt">STR</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-3&nbsp;</font></td><td align="left"><font style="font-size: 5pt">&nbsp;Intimidate</font></td><td align="left"><font style="font-size: 5pt">CHA</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-5&nbsp;</font></td><td align="left"><font style="font-size: 5pt">&nbsp;Swim</font></td><td align="left"><font style="font-size: 5pt">STR</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-3&nbsp;</font></td><tr><tr><td align="left"><font style="font-size: 5pt">&nbsp;Craft (Untrained)</font></td><td align="left"><font style="font-size: 5pt">INT</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-5&nbsp;</font></td><td align="left"><font style="font-size: 5pt">&nbsp;Perception</font></td><td align="left"><font style="font-size: 5pt">WIS</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-5&nbsp;</font></td><tr><tr><td align="left"><font style="font-size: 5pt">&nbsp;Diplomacy</font></td><td align="left"><font style="font-size: 5pt">CHA</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-5&nbsp;</font></td><td align="left"><font style="font-size: 5pt">&nbsp;Perform (Untrained)</font></td><td align="left"><font style="font-size: 5pt">CHA</font></td><td align="right"><font style="font-size: 5pt">0.0</font></td><td align="right" class="borderright"><font style="font-size: 5pt">-5&nbsp;</font></td><tr>
225
- </table>
226
- </td>
227
- </tr>
228
- </table>
229
- <!-- STOP Skills Table -->
230
- <!-- START Special Attacks Table -->
231
- <!-- STOP Special Attacks Table -->
232
- <!-- START Animal Tricks Table -->
233
- <!-- STOP Animal Tricks Table -->
234
- <!-- START Special Quality Table -->
235
- <!-- STOP Special Quality Table -->
236
- <!-- START Special Abilities Table -->
237
-
238
- <!-- STOP Special Abilities Table -->
239
- <!-- START Feats Table -->
240
- <table cellpadding="0" cellspacing="0" border="0" width="100%" summary="Feats Table">
241
- <tr>
242
- <td colspan="1" bgcolor="black" align="center"><font style="font-size: 9pt" color="white"><b>FEATS</b></font></td>
243
- </tr>
244
- <tr>
245
- <td align="left" width="100%" class="border7"></td>
246
- </tr>
247
- </table>
248
- <!-- STOP Feats Table -->
249
-
250
229
  </td>
251
230
  </tr>
252
231
  <tr>
@@ -44,10 +44,16 @@ module Wayfinder
44
44
  end
45
45
  end
46
46
 
47
+
48
+ ## Returns an array of items in the modifier stack marked with 'active: true'
49
+ def active_stack
50
+ self.modifier_stack.map(&:values).flatten.keep_if { |item| item['active'] }
51
+ end
52
+
47
53
  ## Returns an array of object who affect the specified attribute
48
54
  def stack_for(attribute)
49
- self.modifier_stack.map(&:values).flatten.keep_if do |item|
50
- item['active'] && item['modifiers'].keys.include?(attribute)
55
+ self.active_stack.each do |item|
56
+ item.fetch('modifiers', {}).keys.include?(attribute)
51
57
  end
52
58
  end
53
59
 
@@ -55,12 +61,20 @@ module Wayfinder
55
61
  def modifier_for(attribute)
56
62
  modifier = 0
57
63
  stack_for(attribute).each do |mod|
58
- modifier += mod['modifiers'][attribute]
64
+ modifier += mod.fetch('modifiers', {}).fetch(attribute, 0)
59
65
  end
60
66
 
61
67
  modifier
62
68
  end
63
69
 
70
+ def name
71
+ self.source[:meta]['name']
72
+ end
73
+
74
+ def xp
75
+ self.source[:meta]['xp']
76
+ end
77
+
64
78
  ## Combat
65
79
 
66
80
  def hp
@@ -75,6 +89,10 @@ module Wayfinder
75
89
  self.hp - self.received_damage
76
90
  end
77
91
 
92
+ def speed
93
+ 30 + modifier_for('speed')
94
+ end
95
+
78
96
  def initiative
79
97
  dexterity_modifier + modifier_for('initiative')
80
98
  end
@@ -95,7 +113,7 @@ module Wayfinder
95
113
  attack_babs = [self.bab]
96
114
 
97
115
  ## Fuck yeah I used a while in ruby, fuck you, fuck everything, EVERYTHING.
98
- while attack_babs.last - 5 > 1
116
+ while attack_babs.last - 5 >= 1
99
117
  attack_babs << attack_babs.last - 5
100
118
  end
101
119
 
@@ -106,6 +124,18 @@ module Wayfinder
106
124
  10 + dexterity_modifier + modifier_for('ac')
107
125
  end
108
126
 
127
+ def cmd
128
+ 10 + self.bab + strength_modifier + dexterity_modifier + modifier_for('cmd')
129
+ end
130
+
131
+ def cmb
132
+ 10 + self.bab + strength_modifier + modifier_for('cmd')
133
+ end
134
+
135
+ def damage_reduction
136
+ 0 + modifier_for('damage_reduction')
137
+ end
138
+
109
139
  ## Saving Throws
110
140
  def saving_throws
111
141
  {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wayfinder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - PoTe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-10-18 00:00:00.000000000 Z
11
+ date: 2013-10-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: box
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - '>='
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: clap
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: debugger
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  description: |-
42
70
  Wayfinder assumes you'll keep your character described in yaml following a set of conventions, all the data points are
43
71
  aggregated together to generate a nicely formatted output from the input data, with all the numbers crunched in for you.