Нечто аналог 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;
}
}