Okey, So im working on this again, updating it to TFS 1.0.
so i made some slight changes with the concept:
The words are now grouped into 5 groups:
Targets, Elements, Areas, Modifiers and Casts.
*Targets is a group that selects the positions of where to cast the areas. You can stack multiple targets which is great.
*Elements are basically what the main spell effects can do, Each element has 3 effects "Field, Damage, Condition" which can be selected with Modifiers.
*Areas are actually better described as Shapes. A box, a beam a wave and large circles and all that. Reasons for having all these diffrent shapes are because you could example create a Wild Growth box infront of you or things simular to this.
*Modifiers are basically words that modifies the attributes of the entire spell. Attributes are explained in the bottom.
Casts are the way you cast spells. They decide how you should trigger you spell. An easy explaination would be that Trigger is determined before chosing target. You can make the spell trigger on next Weapon attack or Trigger it while rushing into the target and so on.
So this much complexity really needs a way to balance the system in diffrent ways?
So general balacing is done by using the standard formula finalValue = base * mutliplier.
Each word has a base and multipler thats get added to a total base and multipler.
the attributes implemented are basically Cooldown, Manacost, Power, Size, Distance, Duration.
A small peek on how a word file would look like:
Code:
local spellWord = SpellWord {
Name = "Self Cast";
Word = "ego";
Group = SPELLSYSTEM_GROUP_TARGET;
Description = [[A word that makes the spell target youself.]];
Attributes = SpellAttribute {
[ATTR_POWER_BASE] = 1.0;
[ATTR_POWER_MULTIPLIER] = 1.0;
[ATTR_DISTANCE_BASE] = 1.0;
[ATTR_DISTANCE_MULTIPLIER] = 0.0;
[ATTR_SIZE_BASE] = 0.0;
[ATTR_SIZE_MULTIPLIER] = 0.0;
[ATTR_COOLDOWN_BASE] = 2000;
[ATTR_COOLDOWN_MULTIPLIER] = 0.3;
[ATTR_DURATION_BASE] = 0.0;
[ATTR_DURATION_MULTIPLIER] = 0.0;
[ATTR_MANACOST_BASE] = 0.0;
[ATTR_MANACOST_MULTIPLIER] = 0.0;
};
}
function spellWord:onAddWord(spellInstance)
print("Hello!")
end
So basically there will still be a bit of balancing which would be needed especially with certain combination of words.
for example, incase you want to make paralyze give extra manacost you write this.
Code:
--Add 150 mana to costs paralyze
SpellWordCombination[{"frigo", "con"}] = function(spellInstance)
spellInstance.Attributes.add(ATTR_MANACOST_BASE, 150)
end
So how do you combine words? (Some of the ideas were discussed with
@Karain)
You can stack words for one chatmessage at the time. But it will only activate with a "Cast" word. This method has a cooldown for 0.5 or 1 second per word, its configurable ofc. However there would be a cost reduction. When combining words in the same scentance the spell will be more costly.
Chaining.. is basically a way to stack spelleffects. You could make the spell trigger when hitting the target, or execute on each tile.
However since the spell executes with a Cast Spell, You cannot stack Cast words for both balance and preformance
This concept however is still in dvelopment so not really anything more i can say for sure.
Another concept is called "Sources", Normally you would imagine the caster to be the source of the spell. But not really. The whole concept is that the source stands for all stats of the spell, while the caster is basically someone who throws it and owns it.
So this allows the source to be anything basically. A weapon, A rune, Armor.. anything ingame object or creature would work.
So since the spells arent really directly dependable on a player. They can be used on monsters to. And if we add a "Fake" monster called World. Suddenly you could make things like explosive crates and mines and all that kind of stuff.
You could even cast for a buddy if wanted. However that would also be quite.. over powered. I could see an issue with true mage bombing..
last but not least, How can you learn these words?,
@Karain also suggested a mastery system for each word to reduce costs and all that stuff to somehow specialize in a certain element of choosing. If a server would be vocation based, these vocations could have a base mastery level if level 100 is max. Words would be learnt by quests or guildhalls or simular methods using items.
so some questions for you guys.
Are there some words you want to suggest, which falls into the 5 categories?
What do you think about the balancing approach?
Anymore details you would think is over-complicating the system?
Will post more of how my interption of the "vocations" would work with this system.
Really sorry for the long text, but the system is quite immense, and i tried to explain the most important details.