try this 1st of all and let me know... smile

Code:
function select_magic()
{
	wait(1);
	
	set(bolt_text,VISIBLE); selected = bolt_selected;

	if (cure_prop[available] == yes) {set(cure_text,VISIBLE);}
	if (fire_prop[available] == yes) {set(fire_text,VISIBLE);}
	if (know_cure == yes) {set(cure_text_gray,VISIBLE);}
	if (know_fire == yes) {set(fire_text_gray,VISIBLE);}

	set(arrow,VISIBLE);
	
	while(key_shift == 1) {wait(1);}

	while(1)
	{
		if (key_ctrl == 1)
		{
			if (whos_turn == white_mage) {whitemage_turn();} //your original goback:
			if (whos_turn == heru) {heru_turn();}
			break; //your original out:
		}

		if (selected == bolt_selected)
		{
			if (bolt_prop[available] == no)
			{
				if (key_s == 1) {selected = cure_selected; break;} //goto skip;}
	
				if (key_w == 1) {selected = fire_selected; break;} // goto skip;}
				selected = cure_selected; break;} // goto skip;
			}
			arrow.pos_x = 320; arrow.pos_y = 350;
			if (already_pushed == no)
			{
				if (key_s == 1) {selected = cure_selected; already_pushed = yes; continue;} // goto loop;}
				if (key_w == 1) {selected = fire_selected; already_pushed = yes; continue;} // goto loop;}
			}
		}
		if (selected == cure_selected)
		{
			if (cure_prop[available] == no)
			{
				if (key_s == 1) {selected = fire_selected; break;} // goto skip;}
				if (key_w == 1) {selected = bolt_selected; break;} // goto skip;}
				selected = fire_selected; break;} // goto skip;
			}
			arrow.pos_x = 320; arrow.pos_y = 390;
			if (already_pushed == no)
			{
				if (key_s == 1) {selected = fire_selected; already_pushed = yes; continue;} // goto loop;}
				if (key_w == 1) {selected = bolt_selected; already_pushed = yes; continue;} // goto loop;}
			}
		}
		if (selected == fire_selected)
		{
			if (fire_prop[available] == no)
			{
				if (key_s == 1) {selected = bolt_selected; break;} // goto skip;}
				if (key_w == 1) {selected = cure_selected; break;} // goto skip;}
				selected = fire_selected; break;} // goto skip;
			}
			arrow.pos_x = 320; arrow.pos_y = 430;
			if (already_pushed == no)
			{
				if (key_s == 1) {selected = bolt_selected; already_pushed = yes; continue;} // goto loop;}
				if (key_w == 1) {selected = cure_selected; already_pushed = yes; continue;} // goto loop;}
			}
		}
		if ((key_s == 1)||(key_w == 1)) {wait(-0.1);}
		already_pushed = no;

		wait(1);
	}

	if (key_shift)
	{
		if ((whos_turn == heru) && (selected == bolt_selected)) {select_target(heru,bolt_prop);}
		if ((whos_turn == heru) && (selected == cure_selected)) {select_target(heru,cure_prop);}
		if ((whos_turn == heru) && (selected == fire_selected)) {select_target(heru,fire_prop);}

		if ((whos_turn == white_mage) && (selected == bolt_selected)) {select_target(white_mage,bolt_prop);}
		if ((whos_turn == white_mage) && (selected == cure_selected)) {select_target(white_mage,cure_prop);}
		if ((whos_turn == white_mage) && (selected == fire_selected)) {select_target(white_mage,fire_prop);}

		reset(selector, VISIBLE);
		break; //your original out:
	}

	reset(bolt_text,VISIBLE);
	reset(cure_text,VISIBLE);
	reset(fire_text,VISIBLE);
	reset(bolt_text_gray,VISIBLE);
	reset(cure_text_gray,VISIBLE);
	reset(fire_text_gray,VISIBLE);
	reset(arrow,VISIBLE);
}

it could still be improved further