pf2e-spellbook 1.0.0 → 1.2.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.
- package/README.md +15 -0
- package/bin/cli.mjs +86 -0
- package/dist/icon.svg +3 -3
- package/dist/index.html +568 -269
- package/dist/manifest.webmanifest +2 -2
- package/dist/sw.js +1 -1
- package/package.json +22 -4
- package/src/classes.js +74 -35
- package/src/engine.js +229 -67
- package/src/icon.svg +3 -3
- package/src/manifest.webmanifest +2 -2
- package/src/styles.css +229 -151
- package/src/template.html +36 -16
- package/tools/test.mjs +102 -5
|
@@ -6,8 +6,8 @@
|
|
|
6
6
|
"scope": ".",
|
|
7
7
|
"display": "standalone",
|
|
8
8
|
"orientation": "portrait",
|
|
9
|
-
"background_color": "#
|
|
10
|
-
"theme_color": "#
|
|
9
|
+
"background_color": "#14161b",
|
|
10
|
+
"theme_color": "#14161b",
|
|
11
11
|
"icons": [
|
|
12
12
|
{ "src": "icon.svg", "sizes": "any", "type": "image/svg+xml", "purpose": "any maskable" }
|
|
13
13
|
]
|
package/dist/sw.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Network-first for the app page (fresh when online, cached when offline),
|
|
3
3
|
cache-first for static assets. Cache version is stamped at build time so a
|
|
4
4
|
redeploy refreshes clients automatically. */
|
|
5
|
-
const CACHE = "pf2e-spellbook-
|
|
5
|
+
const CACHE = "pf2e-spellbook-20260708225220";
|
|
6
6
|
const SHELL = ["./", "./index.html", "./manifest.webmanifest", "./icon.svg"];
|
|
7
7
|
|
|
8
8
|
self.addEventListener("install", (e) => {
|
package/package.json
CHANGED
|
@@ -1,15 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pf2e-spellbook",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.1",
|
|
4
4
|
"description": "Interactive Pathfinder 2e spellbook (single self-contained HTML).",
|
|
5
|
-
"keywords": [
|
|
5
|
+
"keywords": [
|
|
6
|
+
"pathfinder",
|
|
7
|
+
"pf2e",
|
|
8
|
+
"spellbook",
|
|
9
|
+
"spells",
|
|
10
|
+
"ttrpg"
|
|
11
|
+
],
|
|
6
12
|
"homepage": "https://thewhytewolf.github.io/pf2espellcards/",
|
|
7
|
-
"repository": {
|
|
8
|
-
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/TheWhyteWolf/pf2espellcards.git"
|
|
16
|
+
},
|
|
17
|
+
"bugs": {
|
|
18
|
+
"url": "https://github.com/TheWhyteWolf/pf2espellcards/issues"
|
|
19
|
+
},
|
|
9
20
|
"author": "Whyte",
|
|
10
21
|
"license": "SEE LICENSE IN LICENSE",
|
|
11
22
|
"type": "module",
|
|
23
|
+
"bin": {
|
|
24
|
+
"pf2e-spellbook": "bin/cli.mjs"
|
|
25
|
+
},
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=18"
|
|
28
|
+
},
|
|
12
29
|
"files": [
|
|
30
|
+
"bin/",
|
|
13
31
|
"src/",
|
|
14
32
|
"tools/",
|
|
15
33
|
"data/",
|
package/src/classes.js
CHANGED
|
@@ -52,6 +52,46 @@ function psychicSlots(level){
|
|
|
52
52
|
return slots;
|
|
53
53
|
}
|
|
54
54
|
|
|
55
|
+
/* ============================================================
|
|
56
|
+
INLINE SVG ICON REGISTRY
|
|
57
|
+
Thin line icons (24x24, stroke = currentColor) so they inherit the
|
|
58
|
+
active accent colour. Keyed by name; classes/features reference a key
|
|
59
|
+
instead of an emoji. iconSvg() wraps the path data in an <svg>.
|
|
60
|
+
============================================================ */
|
|
61
|
+
const ICONS={
|
|
62
|
+
/* classes */
|
|
63
|
+
cleric:'<circle cx="12" cy="12" r="3.4"/><path d="M12 3v2.6M12 18.4V21M3 12h2.6M18.4 12H21M5.6 5.6l1.9 1.9M16.5 16.5l1.9 1.9M18.4 5.6l-1.9 1.9M7.5 16.5l-1.9 1.9"/>',
|
|
64
|
+
wizard:'<path d="M12 3.5 4.5 19.5h15z"/><circle cx="12" cy="13.5" r="1.9"/>',
|
|
65
|
+
druid:'<path d="M5 19.5C5 11 10.5 5 19 4.5 19 13 13.5 19 5 19.5z"/><path d="M11.5 12 5 19.5"/>',
|
|
66
|
+
witch:'<path d="M17.5 15.2A6 6 0 1 1 11.3 5a5 5 0 0 0 6.2 10.2z"/><path d="M18.3 3.6l.8 1.9 1.9.8-1.9.8-.8 1.9-.8-1.9-1.9-.8 1.9-.8z"/>',
|
|
67
|
+
sorcerer:'<path d="M12 3c2.8 3.6 4.6 5.6 4.6 8.4a4.6 4.6 0 0 1-9.2 0c0-1.2.6-2.2 1.6-3.1.3 1.1 1 1.6 1.6 1.6C9.4 8.4 10.3 5.7 12 3z"/>',
|
|
68
|
+
bard:'<path d="M9.5 17.5V6.2l9-2v9.6"/><circle cx="6.8" cy="17.5" r="2.4"/><circle cx="15.8" cy="15.8" r="2.4"/>',
|
|
69
|
+
oracle:'<path d="M2.5 12S6 6 12 6s9.5 6 9.5 6-3.5 6-9.5 6-9.5-6-9.5-6z"/><circle cx="12" cy="12" r="2.4"/>',
|
|
70
|
+
magus:'<path d="M17.5 3.5 20.5 6.5 12 15l-3 1 1-3z"/><path d="M8 14l-4 4"/><path d="M5.5 15.5l3 3"/>',
|
|
71
|
+
summoner:'<circle cx="9.2" cy="12" r="4.8"/><circle cx="14.8" cy="12" r="4.8"/>',
|
|
72
|
+
psychic:'<path d="M12 12a1.5 1.5 0 1 0 1.6-1.5A3.6 3.6 0 1 0 8.4 12 5.7 5.7 0 1 0 17.7 7.7"/>',
|
|
73
|
+
animist:'<path d="M12 3c2 2.5 3.1 4 3.1 6a3.1 3.1 0 0 1-6.2 0c0-1 .5-2 1.5-2.9.3.8.8 1.2 1.3 1.2C11 6 11 5 12 3z"/><path d="M12 12v6"/><path d="M9 21h6"/>',
|
|
74
|
+
/* navigation */
|
|
75
|
+
today:'<rect x="7" y="3.5" width="12.5" height="17" rx="2"/><path d="M4.5 7v11.5a2 2 0 0 0 2 2h9.5"/>',
|
|
76
|
+
prepare:'<path d="M3 18.5h18"/><path d="M6.5 18.5a5.5 5.5 0 0 1 11 0"/><path d="M12 3v3M4.2 8.7l1.7 1.7M19.8 8.7l-1.7 1.7"/>',
|
|
77
|
+
browse:'<path d="M4 5.2A2 2 0 0 1 6 3.2h5.2v15.6H6a2 2 0 0 0-2 2z"/><path d="M20 5.2a2 2 0 0 0-2-2h-5.2v15.6H18a2 2 0 0 1 2 2z"/>',
|
|
78
|
+
help:'<circle cx="12" cy="12" r="9"/><path d="M9.4 9.4a2.6 2.6 0 1 1 3.6 2.4c-.9.5-1.1 1-1.1 1.9"/><path d="M12 16.7v.01"/>',
|
|
79
|
+
/* features / utility */
|
|
80
|
+
school:'<path d="M2.5 8.5 12 4.5l9.5 4-9.5 4z"/><path d="M6.5 10.5v4c0 1.5 11 1.5 11 0v-4"/><path d="M21.5 8.5v5"/>',
|
|
81
|
+
bonded:'<path d="M9.3 12.4a3 3 0 0 1 0-4.2l1.9-1.9a3 3 0 0 1 4.2 4.2l-1 1"/><path d="M14.7 11.6a3 3 0 0 1 0 4.2l-1.9 1.9a3 3 0 0 1-4.2-4.2l1-1"/>',
|
|
82
|
+
heal:'<path d="M12 5.5v13M5.5 12h13"/>',
|
|
83
|
+
harm:'<path d="M12 3a7 7 0 0 0-7 7c0 2 1 3.6 2.2 4.6V17a1 1 0 0 0 1 1h7.6a1 1 0 0 0 1-1v-2.4C19 13.6 20 12 20 10a7 7 0 0 0-7-7z" transform="translate(-1 0)"/><circle cx="8.5" cy="10.5" r="1.1"/><circle cx="13.5" cy="10.5" r="1.1"/><path d="M9 18v2M11 18v2M13 18v2"/>',
|
|
84
|
+
menu:'<circle cx="12" cy="8" r="3.4"/><path d="M5.5 20a6.5 6.5 0 0 1 13 0"/>',
|
|
85
|
+
filter:'<path d="M4 7h16M4 12h16M4 17h16"/><circle cx="9" cy="7" r="2"/><circle cx="15" cy="12" r="2"/><circle cx="8" cy="17" r="2"/>',
|
|
86
|
+
plus:'<path d="M12 5.5v13M5.5 12h13"/>',
|
|
87
|
+
book:'<path d="M12 6.5C9.5 4.7 6 4.7 3.5 6v13c2.5-1.3 6-1.3 8.5.5 2.5-1.8 6-1.8 8.5-.5V6c-2.5-1.3-6-1.3-8.5.5z"/><path d="M12 6.5v13"/>',
|
|
88
|
+
};
|
|
89
|
+
function iconSvg(name, cls){
|
|
90
|
+
return '<svg class="icn '+(cls||"")+'" viewBox="0 0 24 24" fill="none" stroke="currentColor" '+
|
|
91
|
+
'stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">'+
|
|
92
|
+
(ICONS[name]||"")+'</svg>';
|
|
93
|
+
}
|
|
94
|
+
|
|
55
95
|
/* [minLevel, proficiency bonus] for spell DC / spell attack, highest first.
|
|
56
96
|
Bonus = 2/4/6/8 for trained/expert/master/legendary.
|
|
57
97
|
Wizard, Druid, Sorcerer, Bard, Oracle, Psychic and the Cloistered Cleric
|
|
@@ -99,13 +139,13 @@ const CORE_HELP=[
|
|
|
99
139
|
["Remaster vs. legacy (original) rules",
|
|
100
140
|
"This app uses the current <b>Remaster</b> spell names and rules. If your group still plays the <b>original</b> (pre-Remaster) edition, most spells are identical — and renamed ones show a small <i>“formerly …”</i> note, so you can also <b>search by the old name</b> (e.g. searching <b>Magic Missile</b> finds <b>Force Barrage</b>). A few legacy spells that weren't changed are still listed under their original names too.<br><br>A few wording changes to keep in mind: spell <b>rank</b> = spell <b>level</b>; <b>vitality</b>/<b>void</b> damage = the old <b>positive</b>/<b>negative</b>; and <b>holy</b>/<b>unholy</b> replace the old <b>good</b>/<b>evil</b> alignment damage. The numbers and effects are the same."],
|
|
101
141
|
["Multiple characters, backup & sharing",
|
|
102
|
-
"Tap the <b
|
|
142
|
+
"Tap the <b>character</b> button (top right) to keep <b>several characters</b> and switch between them — each remembers its own prepared spells. From there you can also <b>Export</b> a character to a code to back it up or send to a friend, and <b>Import</b> a code someone shares with you. Everything is stored on your device."],
|
|
103
143
|
];
|
|
104
144
|
|
|
105
145
|
const CLASSES={
|
|
106
146
|
/* ---------------- CLERIC ---------------- */
|
|
107
147
|
cleric:{
|
|
108
|
-
id:"cleric", name:"Cleric", icon:"
|
|
148
|
+
id:"cleric", name:"Cleric", icon:"cleric", color:"#d8a23a",
|
|
109
149
|
tagline:"Divine prepared caster · the party's main healer",
|
|
110
150
|
tradition:"divine", keyAbility:"Wisdom", keyAbilityShort:"Wis",
|
|
111
151
|
casting:"prepared", slots:"full", prof:FULL_CASTER_PROF, cantrips:5,
|
|
@@ -128,63 +168,59 @@ const CLASSES={
|
|
|
128
168
|
|
|
129
169
|
/* ---------------- WIZARD ---------------- */
|
|
130
170
|
wizard:{
|
|
131
|
-
id:"wizard", name:"Wizard", icon:"
|
|
171
|
+
id:"wizard", name:"Wizard", icon:"wizard", color:"#7b6cf0",
|
|
132
172
|
tagline:"Arcane prepared caster · the widest spell list",
|
|
133
173
|
tradition:"arcane", keyAbility:"Intelligence", keyAbilityShort:"Int",
|
|
134
174
|
casting:"prepared", slots:"full", prof:FULL_CASTER_PROF, cantrips:5,
|
|
135
|
-
preview:true,
|
|
136
175
|
features:[
|
|
137
|
-
{type:"extraSlots", key:"school", icon:"
|
|
176
|
+
{type:"extraSlots", key:"school", icon:"school", label:"Arcane school slot",
|
|
138
177
|
note:"One extra slot of each rank you can cast, which must hold a spell from your chosen school / curriculum."},
|
|
139
|
-
{type:"dailyResource", key:"bonded", icon:"
|
|
178
|
+
{type:"dailyResource", key:"bonded", icon:"bonded", label:"Drain Bonded Item", uses:1,
|
|
140
179
|
note:"Once per day, recast a spell you already cast today without spending its slot."},
|
|
141
180
|
],
|
|
142
181
|
help:[
|
|
143
182
|
["What does a wizard do?",
|
|
144
183
|
"You're an <b>Arcane</b> prepared caster with the broadest spell list in the game. You Prepare spells each morning from your spellbook, leaning on control and damage like <b>Fireball</b> plus utility."],
|
|
145
184
|
["Arcane school slot",
|
|
146
|
-
"Your school (curriculum) gives you <b>one extra prepared slot of every rank</b> you can cast. Fill the
|
|
185
|
+
"Your school (curriculum) gives you <b>one extra prepared slot of every rank</b> you can cast. Fill the <b>school</b> slots with spells from your school. The app adds these slots automatically."],
|
|
147
186
|
["Drain Bonded Item",
|
|
148
|
-
"Once per day you can <b>Drain your Bonded Item</b> to recast a spell you've already cast that day, without spending another slot. Tick the
|
|
187
|
+
"Once per day you can <b>Drain your Bonded Item</b> to recast a spell you've already cast that day, without spending another slot. Tick the <b>Drain Bonded Item</b> tracker on Cast Today when you use it."],
|
|
149
188
|
],
|
|
150
189
|
},
|
|
151
190
|
|
|
152
191
|
/* ---------------- DRUID ---------------- */
|
|
153
192
|
druid:{
|
|
154
|
-
id:"druid", name:"Druid", icon:"
|
|
193
|
+
id:"druid", name:"Druid", icon:"druid", color:"#4faf6d",
|
|
155
194
|
tagline:"Primal prepared caster · nature's versatility",
|
|
156
195
|
tradition:"primal", keyAbility:"Wisdom", keyAbilityShort:"Wis",
|
|
157
196
|
casting:"prepared", slots:"full", prof:FULL_CASTER_PROF, cantrips:5,
|
|
158
|
-
preview:true,
|
|
159
197
|
features:[{type:"note", title:"Druidic order", text:"Pick your order's focus spells (Heal Animal, Tempest Surge, Wild/Untamed Form…) in the Focus section below. Companion/familiar bookkeeping stays on your sheet."}],
|
|
160
198
|
help:[
|
|
161
199
|
["What does a druid do?",
|
|
162
|
-
"You're a <b>Primal</b> prepared caster tied to nature, with strong healing, control, and battlefield spells. Many druids also use order focus spells to shapeshift
|
|
200
|
+
"You're a <b>Primal</b> prepared caster tied to nature, with strong healing, control, and battlefield spells. Many druids also use order focus spells to shapeshift — add the ones you know in the Focus section."],
|
|
163
201
|
],
|
|
164
202
|
},
|
|
165
203
|
|
|
166
204
|
/* ---------------- WITCH ---------------- */
|
|
167
205
|
witch:{
|
|
168
|
-
id:"witch", name:"Witch", icon:"
|
|
206
|
+
id:"witch", name:"Witch", icon:"witch", color:"#b061b8",
|
|
169
207
|
tagline:"Prepared caster · your patron sets the tradition",
|
|
170
208
|
traditionFrom:"patron", defaultTradition:"occult",
|
|
171
209
|
keyAbility:"Intelligence", keyAbilityShort:"Int",
|
|
172
210
|
casting:"prepared", slots:"full", prof:FULL_CASTER_PROF, cantrips:5,
|
|
173
|
-
preview:true,
|
|
174
211
|
features:[{type:"note", title:"Hexes & familiar", text:"Choose your patron's tradition above, then add your hex focus spells in the Focus section below. Familiar details stay on your sheet."}],
|
|
175
212
|
help:[
|
|
176
213
|
["What does a witch do?",
|
|
177
|
-
"You're a prepared caster whose <b>patron</b> grants your magic — set your patron's <b>tradition</b> (arcane, divine, occult, or primal) in the character section, and your spell list follows. Witches also cast <b>hexes</b>
|
|
214
|
+
"You're a prepared caster whose <b>patron</b> grants your magic — set your patron's <b>tradition</b> (arcane, divine, occult, or primal) in the character section, and your spell list follows. Witches also cast <b>hexes</b> — add your hex focus spells in the Focus section (your familiar stays on your sheet)."],
|
|
178
215
|
],
|
|
179
216
|
},
|
|
180
217
|
|
|
181
218
|
/* ---------------- SORCERER ---------------- */
|
|
182
219
|
sorcerer:{
|
|
183
|
-
id:"sorcerer", name:"Sorcerer", icon:"
|
|
220
|
+
id:"sorcerer", name:"Sorcerer", icon:"sorcerer", color:"#e05a52",
|
|
184
221
|
tagline:"Spontaneous caster · magic in the blood",
|
|
185
222
|
traditionFrom:"bloodline", keyAbility:"Charisma", keyAbilityShort:"Cha",
|
|
186
223
|
casting:"spontaneous", slots:"full", prof:FULL_CASTER_PROF, cantrips:5,
|
|
187
|
-
preview:true,
|
|
188
224
|
features:[
|
|
189
225
|
{type:"signature"},
|
|
190
226
|
{type:"note", title:"Bloodline magic", text:"Add your bloodline focus spells in the Focus section below. Blood-magic side effects are described on each spell but tracked by you."},
|
|
@@ -199,18 +235,17 @@ const CLASSES={
|
|
|
199
235
|
|
|
200
236
|
/* ---------------- BARD ---------------- */
|
|
201
237
|
bard:{
|
|
202
|
-
id:"bard", name:"Bard", icon:"
|
|
238
|
+
id:"bard", name:"Bard", icon:"bard", color:"#34a8c4",
|
|
203
239
|
tagline:"Occult spontaneous caster · master of support",
|
|
204
240
|
tradition:"occult", keyAbility:"Charisma", keyAbilityShort:"Cha",
|
|
205
241
|
casting:"spontaneous", slots:"full", prof:FULL_CASTER_PROF, cantrips:5,
|
|
206
|
-
preview:true,
|
|
207
242
|
features:[
|
|
208
243
|
{type:"signature"},
|
|
209
244
|
{type:"note", title:"Compositions & muse", text:"Add your composition focus spells (Courageous Anthem, Counter Performance…) in the Focus section below."},
|
|
210
245
|
],
|
|
211
246
|
help:[
|
|
212
247
|
["What does a bard do?",
|
|
213
|
-
"You're an <b>Occult</b> <b>spontaneous</b> caster and the game's best supporter. You build a repertoire and cast flexibly, and your composition cantrips/focus spells buff the party
|
|
248
|
+
"You're an <b>Occult</b> <b>spontaneous</b> caster and the game's best supporter. You build a repertoire and cast flexibly, and your composition cantrips/focus spells buff the party — add them in the Focus section."],
|
|
214
249
|
["Signature spells",
|
|
215
250
|
"Mark spells as <b>signature</b> (the ★) to heighten them with higher-rank slots. One per rank is the usual choice."],
|
|
216
251
|
],
|
|
@@ -218,30 +253,35 @@ const CLASSES={
|
|
|
218
253
|
|
|
219
254
|
/* ---------------- ORACLE ---------------- */
|
|
220
255
|
oracle:{
|
|
221
|
-
id:"oracle", name:"Oracle", icon:"
|
|
256
|
+
id:"oracle", name:"Oracle", icon:"oracle", color:"#c061d6",
|
|
222
257
|
tagline:"Divine spontaneous caster · power at a price",
|
|
223
258
|
tradition:"divine", keyAbility:"Charisma", keyAbilityShort:"Cha",
|
|
224
259
|
casting:"spontaneous", slots:"full", prof:FULL_CASTER_PROF, cantrips:5,
|
|
225
|
-
preview:true,
|
|
226
260
|
features:[
|
|
227
261
|
{type:"signature"},
|
|
228
|
-
{type:"
|
|
262
|
+
{type:"stageTracker", key:"curse", icon:"oracle", label:"Oracular curse", max:4,
|
|
263
|
+
note:"Your curse deepens by a stage each time you use a cursebound action — stronger effects, worse drawbacks. Resting clears it."},
|
|
264
|
+
{type:"note", title:"Mystery & revelations", text:"Add your revelation focus spells in the Focus section below, and track your escalating oracular curse on Cast Today."},
|
|
229
265
|
],
|
|
230
266
|
help:[
|
|
231
267
|
["What does an oracle do?",
|
|
232
|
-
"You're a <b>Divine</b> <b>spontaneous</b> caster channeling a <b>mystery</b>. You build a repertoire and cast flexibly
|
|
268
|
+
"You're a <b>Divine</b> <b>spontaneous</b> caster channeling a <b>mystery</b>. You build a repertoire and cast flexibly. Add your revelation focus spells in the Focus section; your escalating <b>curse</b> is tracked on your sheet."],
|
|
233
269
|
["Signature spells",
|
|
234
270
|
"Mark spells as <b>signature</b> (the ★) to heighten them with higher-rank slots — usually one per spell rank."],
|
|
235
271
|
],
|
|
236
272
|
},
|
|
237
273
|
/* ---------------- MAGUS ---------------- */
|
|
238
274
|
magus:{
|
|
239
|
-
id:"magus", name:"Magus", icon:"
|
|
275
|
+
id:"magus", name:"Magus", icon:"magus", color:"#5d82e0",
|
|
240
276
|
tagline:"Arcane half-caster · blade and spell as one",
|
|
241
277
|
tradition:"arcane", keyAbility:"Intelligence", keyAbilityShort:"Int",
|
|
242
278
|
casting:"prepared", slots:"partial", prof:PARTIAL_CASTER_PROF, cantrips:5,
|
|
243
|
-
|
|
244
|
-
|
|
279
|
+
features:[
|
|
280
|
+
{type:"studiousSlots", key:"studious", minLevel:7, rank:2, count:2, label:"Studious spells",
|
|
281
|
+
spells:["gecko-grip","sure-strike","water-breathing"],
|
|
282
|
+
note:"From level 7, two extra 2nd-rank slots for utility spells only: Gecko Grip, Sure Strike, or Water Breathing — plus one spell from your hybrid study, which you add on your sheet."},
|
|
283
|
+
{type:"note", title:"Spellstrike & conflux spells", text:"Add your conflux focus spells (Force Fang, etc.) in the Focus section. Spellstrike itself is a martial action recharged by Arcane Cascade — track it on your sheet. Your main spell slots are always your top two ranks."},
|
|
284
|
+
],
|
|
245
285
|
help:[
|
|
246
286
|
["What does a magus do?",
|
|
247
287
|
"You're a martial <b>Arcane</b> caster who fuses weapon strikes with spells via <b>Spellstrike</b>. You only get a <b>handful of spell slots</b> (always your two highest ranks), so each prepared spell is precious — often a damaging spell to channel through Spellstrike."],
|
|
@@ -252,14 +292,13 @@ const CLASSES={
|
|
|
252
292
|
|
|
253
293
|
/* ---------------- SUMMONER ---------------- */
|
|
254
294
|
summoner:{
|
|
255
|
-
id:"summoner", name:"Summoner", icon:"
|
|
295
|
+
id:"summoner", name:"Summoner", icon:"summoner", color:"#2bb59a",
|
|
256
296
|
tagline:"Half-caster · you and your eidolon, as one",
|
|
257
297
|
traditionFrom:"patron", defaultTradition:"arcane",
|
|
258
298
|
traditionChoiceLabel:"Eidolon's tradition",
|
|
259
299
|
traditionChoiceHint:"your eidolon's essence sets your spell tradition",
|
|
260
300
|
keyAbility:"Charisma", keyAbilityShort:"Cha",
|
|
261
301
|
casting:"spontaneous", slots:"partial", prof:PARTIAL_CASTER_PROF, cantrips:5,
|
|
262
|
-
preview:true,
|
|
263
302
|
features:[
|
|
264
303
|
{type:"signature"},
|
|
265
304
|
{type:"note", title:"Eidolon & shared life", text:"Choose your eidolon's tradition above and add evolution focus spells in the Focus section. You get only a few slots (top two ranks). Your shared HP pool and the eidolon's actions stay on your sheet."},
|
|
@@ -274,14 +313,15 @@ const CLASSES={
|
|
|
274
313
|
|
|
275
314
|
/* ---------------- PSYCHIC ---------------- */
|
|
276
315
|
psychic:{
|
|
277
|
-
id:"psychic", name:"Psychic", icon:"
|
|
316
|
+
id:"psychic", name:"Psychic", icon:"psychic", color:"#e05fa6",
|
|
278
317
|
tagline:"Occult spontaneous caster · few spells, mighty cantrips",
|
|
279
318
|
tradition:"occult", keyAbility:"Int or Cha", keyAbilityShort:"Key",
|
|
280
|
-
casting:"spontaneous", slots:"psychic", prof:FULL_CASTER_PROF, cantrips:
|
|
281
|
-
preview:true,
|
|
319
|
+
casting:"spontaneous", slots:"psychic", prof:FULL_CASTER_PROF, cantrips:3,
|
|
282
320
|
features:[
|
|
283
321
|
{type:"signature"},
|
|
284
|
-
{type:"
|
|
322
|
+
{type:"dailyResource", key:"unleash", icon:"psychic", label:"Unleash Psyche", uses:1, verb:"Unleash", recharge:"refocus",
|
|
323
|
+
note:"Surge your psyche for 2 rounds — bigger cantrips and better spell attacks. Afterward your mind is strained; Refocus to Unleash again."},
|
|
324
|
+
{type:"note", title:"Psi cantrips & Amps", text:"Your psi cantrips appear in the Focus section — cast them at will, or spend a Focus Point to Amp them (tap Amp). Refocus to recover points. Your spell DC uses Intelligence or Charisma, whichever your conscious mind chose."},
|
|
285
325
|
],
|
|
286
326
|
help:[
|
|
287
327
|
["What does a psychic do?",
|
|
@@ -293,15 +333,14 @@ const CLASSES={
|
|
|
293
333
|
|
|
294
334
|
/* ---------------- ANIMIST ---------------- */
|
|
295
335
|
animist:{
|
|
296
|
-
id:"animist", name:"Animist", icon:"
|
|
336
|
+
id:"animist", name:"Animist", icon:"animist", color:"#e08a3c",
|
|
297
337
|
tagline:"Divine prepared caster · channels apparitions (spirits)",
|
|
298
338
|
tradition:"divine", keyAbility:"Wisdom", keyAbilityShort:"Wis",
|
|
299
339
|
casting:"prepared", slots:"full", prof:FULL_CASTER_PROF, cantrips:4,
|
|
300
|
-
preview:true,
|
|
301
340
|
features:[{type:"note", title:"Apparitions & vessel spells", text:"You prepare divine spells; your attuned apparitions grant a vessel focus spell (add the ones you know in the Focus section below) and a separate spontaneous repertoire of apparition spells that stays on your character sheet."}],
|
|
302
341
|
help:[
|
|
303
342
|
["What does an animist do?",
|
|
304
|
-
"You're a <b>Divine</b> prepared caster who channels <b>apparitions</b> — spirits that lend you power. You prepare divine spells like a cleric, and your attuned apparitions grant extra spells plus a <b>vessel</b> focus spell. The app tracks your divine slots, cantrips and DC; apparition attunement and the apparition repertoire stay on your sheet
|
|
343
|
+
"You're a <b>Divine</b> prepared caster who channels <b>apparitions</b> — spirits that lend you power. You prepare divine spells like a cleric, and your attuned apparitions grant extra spells plus a <b>vessel</b> focus spell. The app tracks your divine slots, cantrips and DC; apparition attunement and the apparition repertoire stay on your character sheet."],
|
|
305
344
|
["Cantrips & apparitions",
|
|
306
345
|
"You know <b>4 cantrips</b> — two you choose plus two granted by your attuned apparitions. Your <b>vessel</b> focus spell (from your primary apparition) appears in the Focus section; cast it with Focus Points like other focus spells."],
|
|
307
346
|
],
|