Skip to content

Commit

Permalink
Metamagic Builder
Browse files Browse the repository at this point in the history
  • Loading branch information
marloso2 committed Dec 9, 2019
1 parent 67867f2 commit 48759c8
Show file tree
Hide file tree
Showing 8 changed files with 146 additions and 11 deletions.
1 change: 1 addition & 0 deletions src/clj/orcpub/routes.clj
Original file line number Diff line number Diff line change
Expand Up @@ -933,6 +933,7 @@
[route-map/dnd-e5-subclass-builder-page-route]
[route-map/dnd-e5-class-builder-page-route]
[route-map/dnd-e5-language-builder-page-route]
[route-map/dnd-e5-metamagic-builder-page-route]
[route-map/dnd-e5-invocation-builder-page-route]
[route-map/dnd-e5-boon-builder-page-route]
[route-map/dnd-e5-feat-builder-page-route]
Expand Down
26 changes: 19 additions & 7 deletions src/cljc/orcpub/dnd/e5/classes.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@

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

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

(defn class-level [levels class-kw]
(get-in levels [class-kw :class-level]))

Expand Down Expand Up @@ -2121,14 +2123,24 @@
:page 98
:summary "creatures have disadvantage on saves against your spells (only on the turn you cast them) if you are hidden from them"}]}]}))

(defn metamagic-selection [num]
(defn metamagic-selection [num plugin-metamagic]
(t/selection-cfg
{:name "Metamagic"
:tags #{:class}
:min num
:max num
:ref [:class :sorcerer :metamagic]
:options [(t/option-cfg
:options (concat
(map
(fn [{:keys [name description edit-event]}]
(t/option-cfg
{:name name
:modifiers [(mod5e/trait-cfg
{:name name
:description description})]
:edit-event edit-event}))
plugin-metamagic)
[(t/option-cfg
{:name "Careful Spell"
:modifiers [(mod5e/dependent-trait
{:name "Careful Spell"
Expand Down Expand Up @@ -2176,9 +2188,9 @@
:modifiers [(mod5e/trait-cfg
{:name "Twinned Spell"
:page 102
:summary "spend X sorcery pts. (min 1) to target two creatures with a single target spell, where X is the spell level"})]})]}))
:summary "spend X sorcery pts. (min 1) to target two creatures with a single target spell, where X is the spell level"})]})])}))

(defn sorcerer-option [spells spells-map plugin-subclasses-map language-map weapon-map]
(defn sorcerer-option [spells spells-map plugin-subclasses-map language-map weapon-map metamagic]
(opt5e/class-option
spells
spells-map
Expand Down Expand Up @@ -2226,9 +2238,9 @@
:level 2
:page 101
:summary "you can convert sorcery points into spell slots (level - point cost: 1st - 2, 2nd - 3, 3rd - 5, 4th - 6, 5th - 7). You can also convert spell slots into sorcery points equal to the slot's level"})]}
3 {:selections [(metamagic-selection 2)]}
10 {:selections [(metamagic-selection 1)]}
17 {:selections [(metamagic-selection 1)]}}
3 {:selections [(metamagic-selection 2 metamagic)]}
10 {:selections [(metamagic-selection 1 metamagic)]}
17 {:selections [(metamagic-selection 1 metamagic)]}}
:equipment-choices [{:name "Equipment Pack"
:options {:dungeoneers-pack 1
:explorers-pack 1}}
Expand Down
3 changes: 3 additions & 0 deletions src/cljc/orcpub/route_map.cljc
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
(def dnd-e5-subclass-builder-page-route :subclass-builder-5e-page)
(def dnd-e5-class-builder-page-route :class-builder-5e-page)
(def dnd-e5-language-builder-page-route :language-builder-5e-page)
(def dnd-e5-metamagic-builder-page-route :metamagic-builder-5e-page)
(def dnd-e5-invocation-builder-page-route :invocation-builder-5e-page)
(def dnd-e5-boon-builder-page-route :boon-builder-5e-page)
(def dnd-e5-feat-builder-page-route :feat-builder-5e-page)
Expand Down Expand Up @@ -71,6 +72,7 @@
dnd-e5-subclass-builder-page-route
dnd-e5-class-builder-page-route
dnd-e5-language-builder-page-route
dnd-e5-metamagic-builder-page-route
dnd-e5-invocation-builder-page-route
dnd-e5-boon-builder-page-route
dnd-e5-selection-builder-page-route})
Expand Down Expand Up @@ -176,6 +178,7 @@
"subclass-builder" dnd-e5-subclass-builder-page-route
"class-builder" dnd-e5-class-builder-page-route
"language-builder" dnd-e5-language-builder-page-route
"metamagic-builder" dnd-e5-metamagic-builder-page-route
"invocation-builder" dnd-e5-invocation-builder-page-route
"boon-builder" dnd-e5-boon-builder-page-route
"feat-builder" dnd-e5-feat-builder-page-route
Expand Down
8 changes: 8 additions & 0 deletions src/cljs/orcpub/dnd/e5/db.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
(def local-storage-combat-key "combat")
(def local-storage-background-key "background")
(def local-storage-language-key "language")
(def local-storage-metamagic-key "metamagic")
(def local-storage-invocation-key "invocation")
(def local-storage-boon-key "boon")
(def local-storage-selection-key "selection")
Expand Down Expand Up @@ -88,6 +89,8 @@

(def default-language {})

(def default-metamagic {})

(def default-invocation {})

(def default-boon {})
Expand Down Expand Up @@ -132,6 +135,7 @@
::combat5e/tracker-item default-combat
::bg5e/builder-item default-background
::langs5e/builder-item default-language
::class5e/metamagic-builder-item default-metamagic
::class5e/invocation-builder-item default-invocation
::class5e/boon-builder-item default-boon
::selections5e/builder-item default-selection
Expand Down Expand Up @@ -191,6 +195,10 @@
(if js/window.localStorage
(set-item local-storage-invocation-key (str invocation))))

(defn metamagic->local-store [metamagic]
(if js/window.localStorage
(set-item local-storage-metamagic-key (str metamagic))))

(defn boon->local-store [boon]
(if js/window.localStorage
(set-item local-storage-boon-key (str boon))))
Expand Down
48 changes: 48 additions & 0 deletions src/cljs/orcpub/dnd/e5/events.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
combat->local-store
background->local-store
language->local-store
metamagic->local-store
invocation->local-store
boon->local-store
selection->local-store
Expand All @@ -54,6 +55,7 @@
default-combat
default-background
default-language
default-metamagic
default-invocation
default-boon
default-selection
Expand Down Expand Up @@ -107,6 +109,8 @@

(def language->local-store-interceptor (after language->local-store))

(def metamagic->local-store-interceptor (after metamagic->local-store))

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

(def boon->local-store-interceptor (after boon->local-store))
Expand Down Expand Up @@ -157,6 +161,9 @@
(def language-interceptors [(path ::langs5e/builder-item)
language->local-store-interceptor])

(def metamagic-interceptors [(path ::class5e/metamagic-builder-item)
metamagic->local-store-interceptor])

(def invocation-interceptors [(path ::class5e/invocation-builder-item)
invocation->local-store-interceptor])

Expand Down Expand Up @@ -502,6 +509,14 @@
::e5/languages
"You must specify 'Name', 'Option Source Name'")

(reg-save-homebrew
"Metamagic"
::class5e/save-metamagic
::class5e/metamagic-builder-item
::class5e/homebrew-metamagic
::e5/metamagic
"You must specify 'Name', 'Option Source Name'")

(reg-save-homebrew
"Invocation"
::class5e/save-invocation
Expand Down Expand Up @@ -592,6 +607,10 @@
::langs5e/delete-language
::e5/languages)

(reg-delete-homebrew
::class5e/delete-metamagic
::e5/metamagic)

(reg-delete-homebrew
::class5e/delete-invocation
::e5/invocations)
Expand Down Expand Up @@ -1719,6 +1738,11 @@
::class5e/set-invocation
routes/dnd-e5-invocation-builder-page-route)

(reg-edit-homebrew
::class5e/edit-metamagic
::class5e/set-metamagic
routes/dnd-e5-metamagic-builder-page-route)

(reg-edit-homebrew
::class5e/edit-boon
::class5e/set-boon
Expand Down Expand Up @@ -2558,6 +2582,12 @@
(fn [language [_ prop-key prop-value]]
(assoc language prop-key prop-value)))

(reg-event-db
::class5e/set-metamagic-prop
metamagic-interceptors
(fn [metamagic [_ prop-key prop-value]]
(assoc metamagic prop-key prop-value)))

(reg-event-db
::class5e/set-invocation-prop
invocation-interceptors
Expand Down Expand Up @@ -3271,6 +3301,12 @@
(fn [_ [_ invocation]]
invocation))

(reg-event-db
::class5e/set-metamagic
metamagic-interceptors
(fn [_ [_ metamagic]]
metamagic))

(reg-event-db
::class5e/set-boon
boon-interceptors
Expand Down Expand Up @@ -3362,6 +3398,12 @@
{:dispatch [::class5e/set-invocation
default-invocation]}))

(reg-event-fx
::class5e/reset-metamagic
(fn [_ _]
{:dispatch [::class5e/set-metamagic
default-metamagic]}))

(reg-event-fx
::class5e/reset-boon
(fn [_ _]
Expand Down Expand Up @@ -3620,6 +3662,12 @@
default-invocation
routes/dnd-e5-invocation-builder-page-route)

(reg-new-homebrew
::class5e/new-metamagic
::class5e/set-metamagic
default-metamagic
routes/dnd-e5-metamagic-builder-page-route)

(reg-new-homebrew
::selections5e/new-selection
::selections5e/set-selection
Expand Down
29 changes: 25 additions & 4 deletions src/cljs/orcpub/dnd/e5/spell_subs.cljs
Original file line number Diff line number Diff line change
Expand Up @@ -431,6 +431,12 @@
(fn [plugins _]
(apply concat (map (comp vals ::e5/feats) plugins))))

(reg-sub
::classes5e/plugin-metamagic
:<- [::e5/plugin-vals]
(fn [plugins _]
(apply concat (map (comp vals ::e5/metamagic) plugins))))

(reg-sub
::classes5e/plugin-invocations
:<- [::e5/plugin-vals]
Expand Down Expand Up @@ -860,7 +866,7 @@
tiefling-option-cfg]))))))


(defn base-class-options [spell-lists spells-map plugin-subclasses-map language-map weapons-map invocations boons]
(defn base-class-options [spell-lists spells-map plugin-subclasses-map language-map weapons-map invocations boons metamagic]
[(classes5e/barbarian-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
(classes5e/bard-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
(classes5e/cleric-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
Expand All @@ -870,7 +876,7 @@
(classes5e/paladin-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
(classes5e/ranger-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
(classes5e/rogue-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
(classes5e/sorcerer-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)
(classes5e/sorcerer-option spell-lists spells-map plugin-subclasses-map language-map weapons-map metamagic)
(classes5e/warlock-option spell-lists spells-map plugin-subclasses-map language-map weapons-map invocations boons)
(classes5e/wizard-option spell-lists spells-map plugin-subclasses-map language-map weapons-map)])

Expand All @@ -881,10 +887,11 @@
:<- [::classes5e/plugin-subclasses-map]
:<- [::langs5e/language-map]
:<- [::classes5e/plugin-classes]
:<- [::classes5e/metamagic]
:<- [::classes5e/invocations]
:<- [::classes5e/boons]
:<- [::mi5e/custom-and-standard-weapons-map]
(fn [[spell-lists spells-map plugin-subclasses-map language-map plugin-classes invocations boons weapons-map] _]
(fn [[spell-lists spells-map plugin-subclasses-map language-map plugin-classes metamagic invocations boons weapons-map] _]
(vec
(into
(sorted-set-by #(compare (::t/key %1) (::t/key %2)))
Expand All @@ -900,7 +907,7 @@
weapons-map
plugin-class))
plugin-classes))
(base-class-options spell-lists spells-map plugin-subclasses-map language-map weapons-map invocations boons))))))
(base-class-options spell-lists spells-map plugin-subclasses-map language-map weapons-map invocations boons metamagic))))))

(reg-sub
::classes5e/class-map
Expand Down Expand Up @@ -935,6 +942,15 @@
(assoc feat :edit-event [::feats5e/edit-feat feat]))
plugin-feats)))

(reg-sub
::classes5e/metamagic
:<- [::classes5e/plugin-metamagic]
(fn [plugin-metamagic]
(map
(fn [metamagic]
(assoc metamagic :edit-event [::classes5e/edit-metamagic metamagic]))
plugin-metamagic)))

(reg-sub
::classes5e/invocations
:<- [::classes5e/plugin-invocations]
Expand Down Expand Up @@ -1227,6 +1243,11 @@
(fn [db _]
(::classes5e/subclass-builder-item db)))

(reg-sub
::classes5e/metamagic-builder-item
(fn [db _]
(::classes5e/metamagic-builder-item db)))

(reg-sub
::classes5e/invocation-builder-item
(fn [db _]
Expand Down
Loading

0 comments on commit 48759c8

Please sign in to comment.