//Tiny text engine string __CZChrLst=" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; //" list __CZTexLst=["b0f2fc68-94ce-30c5-2d44-e4d104cabff3","1acf3dec-ea5c-3024-bc3c-d97881ac3228","cf9a9675-cac2-7105-c528-7f903c74aa0d","2c5219c6-a781-6a4f-7a1d-7b0b622669a8"]; //Internal function cziSetChars(string _O, integer _L, integer _S){ integer _X=llSubStringIndex(__CZChrLst,llGetSubString(_O,0,0)); integer _Y=llSubStringIndex(__CZChrLst,llGetSubString(_O,1,1)); integer _M=0; if (_X<64&&_Y>64)_M=1; else if(_X>64&&_Y<64)_M=2; else if(_X>64&&_Y>64)_M=3; vector _I=llList2Vector([<64,64,0>,<32,64,0>,<64,32,0>,<32,32,0>],_M); float _W=1/_I.x; float _H=1/_I.y; integer _F=llList2Integer([(64*_X)+_Y,(32*_X)+_Y-64,(64*(_X-64))+_Y,(32*(_X-64))+_Y-64],_M); integer _R=llFloor((float)_F/_I.x); llSetLinkPrimitiveParamsFast(_L,[PRIM_TEXTURE,_S,llList2Key(__CZTexLst,_M),<_W, _H, 0>,<-llFloor(_I.x/2)*_W+_W/2+_W*(_F-_R*_I.x),llFloor(_I.y/2)*_H-_H/2-_H*_R-llList2Float([0.0025,0.0025,0.005,0.005],_M),0>,0]); } list cziSetCharsBuffer(string _O, integer _S){ integer _X=llSubStringIndex(__CZChrLst,llGetSubString(_O,0,0)); integer _Y=llSubStringIndex(__CZChrLst,llGetSubString(_O,1,1)); integer _M=0; if (_X<64&&_Y>64)_M=1; else if(_X>64&&_Y<64)_M=2; else if(_X>64&&_Y>64)_M=3; vector _I=llList2Vector([<64,64,0>,<32,64,0>,<64,32,0>,<32,32,0>],_M); float _W=1/_I.x; float _H=1/_I.y; integer _F=llList2Integer([(64*_X)+_Y,(32*_X)+_Y-64,(64*(_X-64))+_Y,(32*(_X-64))+_Y-64],_M); integer _R=llFloor((float)_F/_I.x); return [PRIM_TEXTURE,_S,llList2Key(__CZTexLst,_M),<_W, _H, 0>,<-llFloor(_I.x/2)*_W+_W/2+_W*(_F-_R*_I.x),llFloor(_I.y/2)*_H-_H/2-_H*_R-llList2Float([0.0025,0.0025,0.005,0.005],_M)-0.001,0>,0]; } //Set the actual text czSetText(integer _L, string _O){ integer _I; for(;_I<8;_I++) cziSetChars(llGetSubString(_O,_I*2,(_I*2)+1),_L,_I); } czSetTextBuffering(integer _L, string _O){ integer _I; list buffer; for(;_I<8;_I++) buffer=buffer+cziSetCharsBuffer(llGetSubString(_O,_I*2,(_I*2)+1),_I); llSetLinkPrimitiveParamsFast(_L,buffer); } list czSetTextBuffer(integer _L, string _O){ integer _I; list buffer=[PRIM_LINK_TARGET,_L]; for(;_I<8;_I++) buffer=buffer+cziSetCharsBuffer(llGetSubString(_O,_I*2,(_I*2)+1),_I); return buffer; } //Just the essentials: //Tiny text engine string __CZChrLst=" !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; //" list __CZTexLst=["b0f2fc68-94ce-30c5-2d44-e4d104cabff3","1acf3dec-ea5c-3024-bc3c-d97881ac3228","cf9a9675-cac2-7105-c528-7f903c74aa0d","2c5219c6-a781-6a4f-7a1d-7b0b622669a8"]; //Internal function list cziSetCharsBuffer(string _O, integer _S){ integer _X=llSubStringIndex(__CZChrLst,llGetSubString(_O,0,0)); integer _Y=llSubStringIndex(__CZChrLst,llGetSubString(_O,1,1)); integer _M=0; if (_X<64&&_Y>64)_M=1; else if(_X>64&&_Y<64)_M=2; else if(_X>64&&_Y>64)_M=3; vector _I=llList2Vector([<64,64,0>,<32,64,0>,<64,32,0>,<32,32,0>],_M); float _W=1/_I.x; float _H=1/_I.y; integer _F=llList2Integer([(64*_X)+_Y,(32*_X)+_Y-64,(64*(_X-64))+_Y,(32*(_X-64))+_Y-64],_M); integer _R=llFloor((float)_F/_I.x); return [PRIM_TEXTURE,_S,llList2Key(__CZTexLst,_M),<_W, _H, 0>,<-llFloor(_I.x/2)*_W+_W/2+_W*(_F-_R*_I.x),llFloor(_I.y/2)*_H-_H/2-_H*_R-llList2Float([0.0025,0.0025,0.005,0.005],_M)-0.001,0>,0]; } //Set the actual text czSetTextBuffering(integer _L, string _O){ integer _I; list buffer; for(;_I<8;_I++) buffer=buffer+cziSetCharsBuffer(llGetSubString(_O,_I*2,(_I*2)+1),_I); llSetLinkPrimitiveParamsFast(_L,buffer); }