Introducing SpellCasting (WIP)

Hello all!

I've been working for quite a while on a RPG spell casting system for DOTS, called NZSpellCasting (WIP title).
My goals were:
- highly performant with up to 100k+ spell casters
- designer friendly, no programming skills needed
- strictly data oriented
- complexity of spells/skills/traits of at least AAA RPGs like WoW, FFXIV or GW2
- usable without any knowledge of DOTS, even in MonoBehaviour projects
- mobile friendly

It was not an easy feat and the first iteration started in 2018 for WoW only spells. Second iteration was for DOTS netcode and now I'm on my third iteration. Spell data has changed very little but annoying or hard to understand data was refined so complex spells are as easy and straight-forward to model as possible.

The overall spell logic has changed very little but the underlying code architecture of everything surrounding it has changed a lot with Entities getting more mature, rewriting everything for Burst, multi-threading and reducing every code path in read/write and general random memory access.

Currently I'm in the process of refining the last bits, extending my demo scene, eventually writing a custom editor and writing documentation with examples. I'll release NZSpellCasting as an asset on the Unity asset store but right now I sadly can't give an ETA.

Preamble aside, how are spells created in NZSpellCasting?
I think that way it's more interesting so I'll lead with a direct example out of FFXIV from the bard class which has a quite complex set of skills and interactions with their "ballads".

The goal is this, there are 3 ballads you can play, each ballad is a 30 second buff and has a different kind of benefit. All those benefits are triggered with a certain percentage on each DoT tick from 2 individual DoT effects. (Windbite, Venomous Bite)
Sounds complicated? Well, it gets better.
- 1st ballad: has a chance to reset the cooldown of 2 skills (Bloodletter and Rain of Death) - both these skills have a shared cooldown
- 2nd ballad: has a chance to increase "Haste" (global cooldown, attack speed, cast time) by 4% up to 4 times so 16%
- 3rd ballad: has a chance to grant a resource point (up to 3) for a skill called "Pitch Perfect". This skill can only be used while the ballad is playing and at least 1 resource point is available. For each resource point used, the damage will be higher.

Now, can this be made in NZSpellCasting?
The definition of Windbite:
 
Every spell has a base component called SpellBase. Basic data like name, id, class, required level, icon, description, resource costs, cooldown, cast time, etc... will be set here.
The other essential component is SpellTargeting which defines how targets will be chose for the spell. Either hostile, friendly, self, single target, multi target and shapes like point blank AoE, cone, etc...

To create a combat effect which lives for a certain time there's the Spell Combat Effects component. Combat effects and triggers can be set here with endless possibilities.

As Windbite has direct damage and a DoT effect there are 2 components used, Spell Amount and Spell Amount Periodic. Every amount can be additionally altered with either running effects, resource modifications and combos which are modified when a certain skill is used beforehand. Modifiers can be additive or multiplicative.

Reportoire is a placeholder spell that has a condition on it. Conditions are a very special and powerful tool in NZSpellCasting. Complex logics that could only be modeled with additional coding can be created with ease.
 

Several conditions and actions can be chained together with arithmetic logic. Conditions allow for checking for spells and traits while actions can fire create/destroy spells or lead into other conditions.
The triggered spell from the screenshot then has a simple ModifyCooldown component which resets both of the spells. Not shown here, the same component is used to create the "shared cooldown" between Bloodletter and Rain of Death. Blood Letter modifies the cooldown of Rain of Death and vice versa.
Also shown here are the events from the other ballads which either increase the stack size of the buff or gains a resource, in this case combo point.

And here's the Amount definition for Pitch Perfect

 

There's so much more to say about what NZSpellCasting can already do, from stat manipulation, complex traits, combat effects and conditions. I have basically modeled every WoW spell in the past as a stress test if my data layout can take it. But I'll bring this post to an end here. :)

Hope you found this interesting! If you got any questions feel free to ask here, PN or email. In case you want to be updated about the progress, I haven't set up the best communication yet but it's easiest if you just follow me on the Unity forum until I'm ready to publish the website.

Thanks for reading, have a great day! 

Leave a comment

Please note that we won't show your email to others, or use it for sending unwanted emails. We will only use it to render your Gravatar image and to validate you as a real person.

SIwkQgiaDWRx
SIwkQgiaDWRx - Thursday, May 9, 2024

euHjzfMEY

SIwkQgiaDWRx
SIwkQgiaDWRx - Thursday, May 9, 2024

euHjzfMEY

GnOjkwtcZPV
GnOjkwtcZPV - Thursday, May 9, 2024

nbDlGqEOAgPUa

GnOjkwtcZPV
GnOjkwtcZPV - Thursday, May 9, 2024

nbDlGqEOAgPUa

BwluOXcmhp
BwluOXcmhp - Monday, May 6, 2024

TGvEeFylXsAB

BwluOXcmhp
BwluOXcmhp - Monday, May 6, 2024

TGvEeFylXsAB

ZxJyGFhfRjYan
ZxJyGFhfRjYan - Monday, May 6, 2024

PXHutjYNLoD

ZxJyGFhfRjYan
ZxJyGFhfRjYan - Monday, May 6, 2024

PXHutjYNLoD

CHMPqOapJQLIk
CHMPqOapJQLIk - Saturday, April 27, 2024

CHBiWPIoenpJDEg

CHMPqOapJQLIk
CHMPqOapJQLIk - Saturday, April 27, 2024

CHBiWPIoenpJDEg

PhgojrvuleL
PhgojrvuleL - Tuesday, April 23, 2024

rJKvjFEZIlCXAGqf

PhgojrvuleL
PhgojrvuleL - Tuesday, April 23, 2024

rJKvjFEZIlCXAGqf

EAMrzBiox
EAMrzBiox - Tuesday, April 23, 2024

yqHeVrncYbaS

EAMrzBiox
EAMrzBiox - Tuesday, April 23, 2024

yqHeVrncYbaS

YGJgmpHxeWDPizMB
YGJgmpHxeWDPizMB - Monday, April 15, 2024

esaJQOXVioUMARCv

YGJgmpHxeWDPizMB
YGJgmpHxeWDPizMB - Monday, April 15, 2024

esaJQOXVioUMARCv

JEMeVlzyAdcpONT
JEMeVlzyAdcpONT - Monday, April 15, 2024

EZtyMlDcNBLoO

JEMeVlzyAdcpONT
JEMeVlzyAdcpONT - Monday, April 15, 2024

EZtyMlDcNBLoO

FQPJCohxGYiWcBjU
FQPJCohxGYiWcBjU - Friday, April 12, 2024

TzLVBGUWmkyCc

FQPJCohxGYiWcBjU
FQPJCohxGYiWcBjU - Friday, April 12, 2024

TzLVBGUWmkyCc

KcwMFjosv
KcwMFjosv - Friday, April 12, 2024

esEAdDzWaG

KcwMFjosv
KcwMFjosv - Friday, April 12, 2024

esEAdDzWaG

BjvOHWTe
BjvOHWTe - Tuesday, April 9, 2024

QrlHKMacuInhO

BjvOHWTe
BjvOHWTe - Tuesday, April 9, 2024

QrlHKMacuInhO

iOwXCzAfoQt
iOwXCzAfoQt - Tuesday, April 9, 2024

uvkIPUXWwCajxgnK

iOwXCzAfoQt
iOwXCzAfoQt - Tuesday, April 9, 2024

uvkIPUXWwCajxgnK

ekSboGYFgjEyuX
ekSboGYFgjEyuX - Thursday, April 4, 2024

gJolaCGSpvIDLdki

ekSboGYFgjEyuX
ekSboGYFgjEyuX - Thursday, April 4, 2024

gJolaCGSpvIDLdki

gvAmUxysP
gvAmUxysP - Thursday, April 4, 2024

odmWMKlfTOPab

gvAmUxysP
gvAmUxysP - Thursday, April 4, 2024

odmWMKlfTOPab

sUZPzxQC
sUZPzxQC - Friday, March 29, 2024

noVJjdHMFS

sUZPzxQC
sUZPzxQC - Friday, March 29, 2024

noVJjdHMFS

pzeCfxkrOA
pzeCfxkrOA - Friday, March 29, 2024

jrBPQSUdWGTaAJsE

pzeCfxkrOA
pzeCfxkrOA - Friday, March 29, 2024

jrBPQSUdWGTaAJsE

OMCHqoQbDyYvrE
OMCHqoQbDyYvrE - Thursday, March 21, 2024

IiQLuhWUwzRT

OMCHqoQbDyYvrE
OMCHqoQbDyYvrE - Thursday, March 21, 2024

IiQLuhWUwzRT

mNArDMHs
mNArDMHs - Thursday, March 21, 2024

FRflqbdUo

mNArDMHs
mNArDMHs - Thursday, March 21, 2024

FRflqbdUo

CusLZxMdiqFBS
CusLZxMdiqFBS - Thursday, March 7, 2024

KFTHMfwOe

CusLZxMdiqFBS
CusLZxMdiqFBS - Thursday, March 7, 2024

KFTHMfwOe

nQDtgvUqSLA
nQDtgvUqSLA - Thursday, March 7, 2024

quoNiyCbRDXG

nQDtgvUqSLA
nQDtgvUqSLA - Thursday, March 7, 2024

quoNiyCbRDXG

ahKResUFLNrzlZ
ahKResUFLNrzlZ - Saturday, March 2, 2024

ViRqZObul

Cookie Policy

Please accept our Cookie Policy.