The idea of scripting your own spells seems cool. I might try it myself (programming the system into my game, I mean), but not the way some of you have illustrated.
I don't think many people will like having to type long lines of text to cast spells. I think they should be able to script their spells, either using a text or graphical scripting system, within constraints dictated by what disciplines they chose to learn, and of course their own experience level. Each spell would then have its own button in a spell-selection window, which you can hotkey.
So if you write a text script like this:
FistOfFlame # The name of the spell is "Fist of Flame"{ if( stillactive ) cancel; # Spell is already cast; don't cast it again. cast fire Flames; Flames.SetSource( RightHand, Attached ); Flames.SetDamage( 10.0 ); Flames.SetDuration( 30.0 );}
The game might scan the script, and based on the damage and duration specified, it will determine the spell requires a Fire Mastery of 4 and uses 20 Energy (mana) to cast. And each time the mage punches something, the creature he punches will recieve 10 damage points.
But if this slightly different script is written:
Fury{ cast fire Flames; Flames.SetSource( RightHand, Attached ); Flames.SetDamage( 10.0 ); Flames.ApplyForce( Caster.Orientation.Forward, 1.0 );}
No duration is specified, meaning it's an instant spell, which is also why the stillactive line is unnecessary. It will be continuously cast as long as the user holds the Cast button down. Anyway, since it applies force to the flame, an Air Mastery of 2 might be needed along with the fire requirements. This spell should create a flamethrower-like spout of flame from the caster's right hand.
Then I might have a spell like this:
FireBall{ if( time - lastcast < 1.0 ) cancel; # Fire delay is one second. cast fire Flames; Flames.SetSource( RightHand, Loose ); Flames.SetDamage( 20.0 ); Flames.SetPhysics( Floating ); # Instead of falling, bouncing, etc. Flames.SetDuration( 5.0 ); # Flies for 5 seconds. Flames.ApplyForce( Caster.Orientation.Forward, 2.0 ); Flames.DestroyOnHit( );}
...and that would create a typical fireball that fires no faster than one fireball per second. Due to the damage and force, it will have higher Fire and Air requirements than FistOfFlame or Fury. The actual rules governing fire, such as how applied force affects it when it's attached or loose, will be built in to the engine.
With a system like this, the user can experiment beyond the usual spells seen in games, to see what is possible. Of course, plenty of playtesting will have to go into this before such a thing will be released.
Edited by - CGameProgrammer on August 22, 2000 9:35:23 PM