Skip to content

Commit 6029fd0

Browse files
committed
Pact Boon Builder for Warlocks
1 parent 1cd50c0 commit 6029fd0

File tree

10 files changed

+144
-8
lines changed

10 files changed

+144
-8
lines changed
Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Loading

src/clj/orcpub/routes.clj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -934,6 +934,7 @@
934934
[route-map/dnd-e5-class-builder-page-route]
935935
[route-map/dnd-e5-language-builder-page-route]
936936
[route-map/dnd-e5-invocation-builder-page-route]
937+
[route-map/dnd-e5-boon-builder-page-route]
937938
[route-map/dnd-e5-feat-builder-page-route]
938939
[route-map/dnd-e5-item-list-page-route]
939940
[route-map/dnd-e5-item-page-route :key ":key"]

src/cljc/orcpub/dnd/e5/classes.cljc

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,8 @@
2626

2727
(spec/def ::homebrew-invocation (spec/keys :req-un [::name ::key ::option-pack]))
2828

29+
(spec/def ::homebrew-boon (spec/keys :req-un [::name ::key ::option-pack]))
30+
2931
(defn class-level [levels class-kw]
3032
(get-in levels [class-kw :class-level]))
3133

@@ -2604,7 +2606,17 @@
26042606
melee-weapons-xform
26052607
weapons)})]}))
26062608

2607-
(defn pact-boon-options [spell-lists spells-map]
2609+
(defn pact-boon-options [plugin-boons spell-lists spells-map]
2610+
(concat
2611+
(map
2612+
(fn [{:keys [name description edit-event]}]
2613+
(t/option-cfg
2614+
{:name name
2615+
:modifiers [(mod5e/trait-cfg
2616+
{:name (str "Pact Boon: " name)
2617+
:description description})]
2618+
:edit-event edit-event}))
2619+
plugin-boons)
26082620
[(t/option-cfg
26092621
{:name "Pact of the Chain"
26102622
:modifiers [(mod5e/spells-known 1 :find-familiar ::char5e/cha "Warlock")
@@ -2639,7 +2651,7 @@
26392651
:modifiers [(mod5e/trait-cfg
26402652
{:name opt5e/pact-of-the-tome-name
26412653
:page 108
2642-
:summary "you have a spellbook with 3 extra cantrips"})]})])
2654+
:summary "you have a spellbook with 3 extra cantrips"})]})]))
26432655

26442656

26452657
(defn eldritch-invocation-options [plugin-invocations spell-lists spells-map]
@@ -2952,7 +2964,7 @@ long rest."})
29522964
false
29532965
"uses Mystic Arcanum")}))
29542966

2955-
(defn warlock-option [spell-lists spells-map plugin-subclasses-map language-map weapon-map invocations]
2967+
(defn warlock-option [spell-lists spells-map plugin-subclasses-map language-map weapon-map invocations boons]
29562968
(opt5e/class-option
29572969
spell-lists
29582970
spells-map
@@ -3004,7 +3016,7 @@ long rest."})
30043016
3 {:selections [(t/selection-cfg
30053017
{:name "Pact Boon"
30063018
:tags #{:class}
3007-
:options (pact-boon-options spell-lists spells-map)})]}
3019+
:options (pact-boon-options boons spell-lists spells-map)})]}
30083020
5 {:selections [(eldritch-invocation-selection invocations spell-lists spells-map)]}
30093021
7 {:selections [(eldritch-invocation-selection invocations spell-lists spells-map)]}
30103022
9 {:selections [(eldritch-invocation-selection invocations spell-lists spells-map)]}

src/cljc/orcpub/route_map.cljc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
(def dnd-e5-class-builder-page-route :class-builder-5e-page)
4343
(def dnd-e5-language-builder-page-route :language-builder-5e-page)
4444
(def dnd-e5-invocation-builder-page-route :invocation-builder-5e-page)
45+
(def dnd-e5-boon-builder-page-route :boon-builder-5e-page)
4546
(def dnd-e5-feat-builder-page-route :feat-builder-5e-page)
4647
(def dnd-e5-selection-builder-page-route :selection-builder-5e-page)
4748

@@ -71,6 +72,7 @@
7172
dnd-e5-class-builder-page-route
7273
dnd-e5-language-builder-page-route
7374
dnd-e5-invocation-builder-page-route
75+
dnd-e5-boon-builder-page-route
7476
dnd-e5-selection-builder-page-route})
7577

7678
(def dnd-e5-my-encounters-route :my-content-5e-page)
@@ -175,6 +177,7 @@
175177
"class-builder" dnd-e5-class-builder-page-route
176178
"language-builder" dnd-e5-language-builder-page-route
177179
"invocation-builder" dnd-e5-invocation-builder-page-route
180+
"boon-builder" dnd-e5-boon-builder-page-route
178181
"feat-builder" dnd-e5-feat-builder-page-route
179182
"spell-builder" dnd-e5-spell-builder-page-route
180183
"selection-builder" dnd-e5-selection-builder-page-route

src/cljs/orcpub/dnd/e5/db.cljs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
(def local-storage-background-key "background")
3636
(def local-storage-language-key "language")
3737
(def local-storage-invocation-key "invocation")
38+
(def local-storage-boon-key "boon")
3839
(def local-storage-selection-key "selection")
3940
(def local-storage-feat-key "feat")
4041
(def local-storage-race-key "race")
@@ -89,6 +90,8 @@
8990

9091
(def default-invocation {})
9192

93+
(def default-boon {})
94+
9295
(def default-selection {:options []})
9396

9497

@@ -130,6 +133,7 @@
130133
::bg5e/builder-item default-background
131134
::langs5e/builder-item default-language
132135
::class5e/invocation-builder-item default-invocation
136+
::class5e/boon-builder-item default-boon
133137
::selections5e/builder-item default-selection
134138
::feats5e/builder-item default-feat
135139
::race5e/builder-item default-race
@@ -187,6 +191,10 @@
187191
(if js/window.localStorage
188192
(set-item local-storage-invocation-key (str invocation))))
189193

194+
(defn boon->local-store [boon]
195+
(if js/window.localStorage
196+
(set-item local-storage-boon-key (str boon))))
197+
190198
(defn selection->local-store [selection]
191199
(if js/window.localStorage
192200
(set-item local-storage-selection-key (str selection))))

src/cljs/orcpub/dnd/e5/events.cljs

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
background->local-store
3939
language->local-store
4040
invocation->local-store
41+
boon->local-store
4142
selection->local-store
4243
feat->local-store
4344
race->local-store
@@ -54,6 +55,7 @@
5455
default-background
5556
default-language
5657
default-invocation
58+
default-boon
5759
default-selection
5860
default-feat
5961
default-race
@@ -107,6 +109,8 @@
107109

108110
(def invocation->local-store-interceptor (after invocation->local-store))
109111

112+
(def boon->local-store-interceptor (after boon->local-store))
113+
110114
(def selection->local-store-interceptor (after selection->local-store))
111115

112116
(def feat->local-store-interceptor (after feat->local-store))
@@ -156,6 +160,9 @@
156160
(def invocation-interceptors [(path ::class5e/invocation-builder-item)
157161
invocation->local-store-interceptor])
158162

163+
(def boon-interceptors [(path ::class5e/boon-builder-item)
164+
boon->local-store-interceptor])
165+
159166
(def selection-interceptors [(path ::selections5e/builder-item)
160167
selection->local-store-interceptor])
161168

@@ -503,6 +510,14 @@
503510
::e5/invocations
504511
"You must specify 'Name', 'Option Source Name'")
505512

513+
(reg-save-homebrew
514+
"Boon"
515+
::class5e/save-boon
516+
::class5e/boon-builder-item
517+
::class5e/homebrew-boon
518+
::e5/boons
519+
"You must specify 'Name', 'Option Source Name'")
520+
506521
(reg-save-homebrew
507522
"Selection"
508523
::selections5e/save-selection
@@ -581,6 +596,10 @@
581596
::class5e/delete-invocation
582597
::e5/invocations)
583598

599+
(reg-delete-homebrew
600+
::class5e/delete-boon
601+
::e5/boons)
602+
584603
(reg-delete-homebrew
585604
::selections5e/delete-selection
586605
::e5/selections)
@@ -1700,6 +1719,11 @@
17001719
::class5e/set-invocation
17011720
routes/dnd-e5-invocation-builder-page-route)
17021721

1722+
(reg-edit-homebrew
1723+
::class5e/edit-boon
1724+
::class5e/set-boon
1725+
routes/dnd-e5-boon-builder-page-route)
1726+
17031727
(reg-edit-homebrew
17041728
::selections5e/edit-selection
17051729
::selections5e/set-selection
@@ -2540,6 +2564,12 @@
25402564
(fn [invocation [_ prop-key prop-value]]
25412565
(assoc invocation prop-key prop-value)))
25422566

2567+
(reg-event-db
2568+
::class5e/set-boon-prop
2569+
boon-interceptors
2570+
(fn [boon [_ prop-key prop-value]]
2571+
(assoc boon prop-key prop-value)))
2572+
25432573
(reg-event-db
25442574
::selections5e/set-selection-prop
25452575
selection-interceptors
@@ -3241,6 +3271,12 @@
32413271
(fn [_ [_ invocation]]
32423272
invocation))
32433273

3274+
(reg-event-db
3275+
::class5e/set-boon
3276+
boon-interceptors
3277+
(fn [_ [_ boon]]
3278+
boon))
3279+
32443280
(reg-event-db
32453281
::selections5e/set-selection
32463282
selection-interceptors
@@ -3326,6 +3362,12 @@
33263362
{:dispatch [::class5e/set-invocation
33273363
default-invocation]}))
33283364

3365+
(reg-event-fx
3366+
::class5e/reset-boon
3367+
(fn [_ _]
3368+
{:dispatch [::class5e/set-boon
3369+
default-boon]}))
3370+
33293371
(reg-event-fx
33303372
::selections5e/reset-selection
33313373
(fn [_ _]
@@ -3584,6 +3626,12 @@
35843626
default-selection
35853627
routes/dnd-e5-selection-builder-page-route)
35863628

3629+
(reg-new-homebrew
3630+
::class5e/new-boon
3631+
::class5e/set-boon
3632+
default-boon
3633+
routes/dnd-e5-boon-builder-page-route)
3634+
35873635
(reg-new-homebrew
35883636
::feats5e/new-feat
35893637
::feats5e/set-feat

src/cljs/orcpub/dnd/e5/spell_subs.cljs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -437,6 +437,12 @@
437437
(fn [plugins _]
438438
(apply concat (map (comp vals ::e5/invocations) plugins))))
439439

440+
(reg-sub
441+
::classes5e/plugin-boons
442+
:<- [::e5/plugin-vals]
443+
(fn [plugins _]
444+
(mapcat #(-> % ::e5/boons vals) plugins)))
445+
440446
(def acolyte-bg
441447
{:name "Acolyte"
442448
:help "Your life has been devoted to serving a god or gods."
@@ -854,7 +860,7 @@
854860
tiefling-option-cfg]))))))
855861

856862

857-
(defn base-class-options [spell-lists spells-map plugin-subclasses-map language-map weapons-map invocations]
863+
(defn base-class-options [spell-lists spells-map plugin-subclasses-map language-map weapons-map invocations boons]
858864
[(classes5e/barbarian-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
859865
(classes5e/bard-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
860866
(classes5e/cleric-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
@@ -865,7 +871,7 @@
865871
(classes5e/ranger-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
866872
(classes5e/rogue-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
867873
(classes5e/sorcerer-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
868-
(classes5e/warlock-option spell-lists spells-map plugin-subclasses-map language-map weapons-map invocations)
874+
(classes5e/warlock-option spell-lists spells-map plugin-subclasses-map language-map weapons-map invocations boons)
869875
(classes5e/wizard-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)])
870876

871877
(reg-sub
@@ -877,7 +883,7 @@
877883
:<- [::classes5e/plugin-classes]
878884
:<- [::classes5e/invocations]
879885
:<- [::mi5e/custom-and-standard-weapons-map]
880-
(fn [[spell-lists spells-map plugin-subclasses-map language-map plugin-classes invocations weapons-map] _]
886+
(fn [[spell-lists spells-map plugin-subclasses-map language-map plugin-classes invocations boons weapons-map] _]
881887
(vec
882888
(into
883889
(sorted-set-by #(compare (::t/key %1) (::t/key %2)))
@@ -893,7 +899,7 @@
893899
weapons-map
894900
plugin-class))
895901
plugin-classes))
896-
(base-class-options spell-lists spells-map plugin-subclasses-map language-map weapons-map invocations))))))
902+
(base-class-options spell-lists spells-map plugin-subclasses-map language-map weapons-map invocations boons))))))
897903

898904
(reg-sub
899905
::classes5e/class-map
@@ -937,6 +943,15 @@
937943
(assoc invocation :edit-event [::classes5e/edit-invocation invocation]))
938944
plugin-invocations)))
939945

946+
(reg-sub
947+
::classes5e/boons
948+
:<- [::classes5e/plugin-boons]
949+
(fn [plugin-boons]
950+
(map
951+
(fn [boon]
952+
(assoc boon :edit-event [::classes5e/edit-boon boon]))
953+
plugin-boons)))
954+
940955
(reg-sub
941956
::spells5e/plugin-spells
942957
:<- [::e5/plugin-vals]
@@ -1216,6 +1231,11 @@
12161231
(fn [db _]
12171232
(::classes5e/invocation-builder-item db)))
12181233

1234+
(reg-sub
1235+
::classes5e/boon-builder-item
1236+
(fn [db _]
1237+
(::classes5e/boon-builder-item db)))
1238+
12191239
(reg-sub
12201240
::classes5e/builder-item
12211241
(fn [db _]

0 commit comments

Comments
 (0)