something like that yes.
Just the basic funcions.
Something Like this:

BMAP spell_pan = <spell.pcx>;
var spell_speed;
var distance[3];
var angle[3];
var position[3];
var mana = 30;
var max_mana = 30;
var dist;
PANEL spell_panel
{
pos_x = 100; pos_y = 100;
BMAP = spell_pan;
flags = d3d,refresh;
}
function spell()
{
WHILE(1)
{
if(mana >= max_mana)
{ mana = max_mana; }
if((key_e) && (key_t)){ aim(); }
if(key_t){ fire(); }
WAIT(1);
}
}
function aim()
{
spell_panel.VISIBLE = ON;
if(key_t){ fire(); }
}
function init_spell()
{
angle.pan = CAMERA.pan;
angle.tilt = CAMERA.tilt;
angle.roll = CAMERA.roll;
my.pan = angle.pan;
my.tilt = angle.tilt;
my.roll = angle.roll;
WHILE(1)
{
if(MY.SKILL5 == 0) { my.SKILL5 = 50; }
dist.x = TIME * spell_speed;
dist.y = 0;
dist.z = 0;
position.x = my.x;
position.y = my.y;
position.z = my.z;
spell_speed = MY.SKILL5;
//if(MY.SKILL5 == 0){MY.SKILL5 = 50;}
c_move(me,nullvector,dist,ignore_passable | glide | use_box);
c_trace(position,null,ignore_me + activate_shoot + ignore_passable);
if(EVENT_TYPE == EVENT_SONAR) { ent_remove (me); spell_panel.VISIBLE = OFF;return; }
WAIT(1); // change if it is too fast
}
}
function fire()
{
if(mana != 0){
ent_create ("arrow.mdl",player.x,init_spell);
}
else
{return;}
}

The only problem is that for some reason it doesnt work.
When i was able to cast a arrow, the player just dissapeared and the camera turned very slow only moving arround the arrow...