Draw text effect - печать текста с расширенным функционалом.

Нечто аналог Scribble но попроще

/// @description
//Site:   MidaDev.ru
//Author: Dimusikus
function draw_text_effect(_x,_y, _text, _max_width)
{
	draw_set_hv(fa_left, fa_top);
	var pos=1; //позиция в строке 
	var lenc=1; //счётчик выводимых символов
	var str_len = _text.length();// string_length(_text)
	var xh=_x;	
	//--------------------------------------------	
	_text.typewrite_counter(); //отсчёт(каждый кадр) таймера телетайпа если он включен в строке 
	//--------------------------------------------
	draw_set_color(_text.color);
	var old_color = _text.color;
	//--------------------------------------------
	//draw_text(x,y-20, _text.get());
	//--------------------------------------------
	while(pos<=str_len)
	{	//получаем первый символ
		var _ch = _text.get_at(pos);					
		//детект телетайпа, продолжать нет
		if _text.typewriter_break(lenc) then  break;
		//--------------------------------------------
		//обработка спец команд в тексте		
		//[function=parameter]
		if _ch=="[" then 
		{	//pos++; 
			_ch = _text.get_at(++pos);
			//**************************************************
			//[c=#RRGGBB] - set color
			//[c=$BBGGRR] - set color
			if _ch=="c" then //color function
			{	pos+=2;	_ch = _text.get_at(pos);				
				var col= _text.mid(++pos,6);				
				//--------------------------------------------
				old_color = draw_get_color(); //запоминаем предыдущий цвет на случай если будет команда вернуть
				//RGB system
				if _ch=="#" then draw_set_color( rgb_to_bgr(hex_to_dec(col) ));				
				//BGR system
				if _ch=="$" then draw_set_color(            hex_to_dec(col)  );				
				pos+=7;
				continue;
				//--------------------------------------------
			};
			//**************************************************
			//[o] - return set olf color
			//[c=$BBGGRR] - set color
			if _ch=="o" then //color function
			{ draw_set_color( old_color );
				pos+=2;
				continue;
			}			
			//--------------------------------------------
		}			
		
		//--------------------------------------------
		var sw = string_width(_ch);
		if abs(xh-x+sw)< _max_width then draw_text(xh , _y, _ch);
		//else draw_text(xh , _y, "~");
		
		//--------------------------------------------
		xh += sw;
		lenc++; //подсчёт выведенных символов		
		pos++; //увеличиваем позицию в тексте на следующий символ
		//--------------------------------------------
		//если все символы выведены, то отключаем телетайп
		if pos>str_len then _text.typewriter_off();// = -1;
	}

}