Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Metamagic Builder #281

Open
wants to merge 1 commit into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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