How can I utilize polymorphism with multiple blueprint implementations of a base blueprint for game logic?

What you describe works to me with subclassing the MainSpell, you can either create the child via “create blueprint based on this” or set the “Parent Class” in Blueprint properties. Right click the function to override and click “implement”. To call super, right click the starting node of the now implemented/overridden function and select “add call to parent function”.