While we're talking about magic, I would like to discuss a couple changes that I'd like to see on how spells are cast.
In V2 I think there was just "CastTime" which determined how long you needed to wait after casting one spell in order to cast another.
I think this could/should be expanded into 3 main parts: CastTime, ChannelTime and RecoveryTime
CastTime would be changed so that it is the time needed to prepare the spell
before it is cast. So you press the button to cast a spell and you must now wait CastTime duration for the spell to go off. If the player moves or performs another action before the duration ends, the spell is canceled and nothing happens (maybe instead of any movement/action, you need to press ESC or another key to cancel it? Idk). Maybe a visual could be added as well to indicate how long is needed before casting.
Example: Magic Missile, CastTime=1. Activate it and 1 second later you launch a missile.
ChannelTime starts after CastTime ends. Again, it is a duration in which the player must remain still (probably) and it can be canceled. The difference between ChannelTime and CastTime is that while ChannelTime is active, spell effects can trigger every ChannelInterval seconds. If ChannelTime=0, this spell does not have a channel component and it is ignored.
Example: Magic Laser (idk), CastTime = 1, ChannelTime=5, ChannelInterval=1. You press the button, 1 second later the spell begins. Every second (ChannelInteval) for the next 5 seconds (ChannelTime), the "Channel" effect of the spell is applied to your target.
I don't know if this is needed, but there could be an additional check here. A flag on the spell, "ChannelCompletion = TRUE/FALSE". If TRUE, the full channel duration would be required in order for the spell to continue. If the channel was canceled, the spell ends. If FALSE, the normal effects of the spell would occur when the channel ends, regardless of if it was canceled or not.
After the channel is done (or skipped if ChannelTime=0), the normal spell effects are triggered. With channeling, I imagine there would need to be a difference between normal spell effects and channeled spell effects that way you could have the channel do something different than the normal spell.
RecoveryTime would replace what was "CastTime", the number of seconds you must wait after casting a spell.
So, an example spell using all that
Spell=1
Name=Magic Missile Barrage
Description=Caster fires an array of missiles at a target, ending in a massive burst.
Skill=IDon'tKnowWeDon'tHaveSkillsYet
CastTime=0.5
ChannelTime=2.0
ChannelInterval=0.5
ChannelCompletion=TRUE
ChannelLife=-5
Life=-30
So, this skill would take half a second to wind up. Once started, it deals 5 damage every half second for 2 seconds. At the end of the channel time (and only if the channel was allowed to complete), another 30 damage is applied to the target.
It may be that spells could be organized differently to help with readability and prevent there from being so many properties.
Spell=1
Name=Magic Missile Barrage
Description=Caster fires an array of missiles at a target, ending in a massive burst.
Skill=IDon'tKnowWeDon'tHaveSkillsYet
CastTime=0.5
ChannelTime=2.0
ChannelInterval=0.5
ChannelCompletion=TRUE
Channel
Life=-5
Normal
Life=-30
So everything under the "Channel" marker are effects that happen at the ChannelInterval. Everything under the "Normal" marker are what happens after the channel is done.
Stuff could even be changed so that additional spell costs could be applied as you channel. Initial cost = 0, but it takes away 10 mana every half second for the duration. If you run out of mana, the spell ends.
Maybe all this just over complicates stuff.