Results 1 to 17 of 17

Thread: External Transparent Layer - draw with Simba on your desktop!

  1. #1
    Join Date
    Oct 2011
    Posts
    805
    Mentioned
    21 Post(s)
    Quoted
    152 Post(s)

    Default External Transparent Layer - draw with Simba on your desktop!

    Hello,
    as you surely know SMART has utility to draw debug on client.


    Have you ever thought about drawing on something else then RS?

    External Transparent Layer allows you to paint on top of any surface, any client ,any window. You can use it with APPA ,debug flash games or project someone's picture on desktop. ETL works in independent thread and doesn't share memory with Simba.

    Limits:
    * Windows only
    * Works only with windowed (not full screen) applications


    Features:
    * Fast
    * Handy
    * Leakproof ( I hope so )
    * Functionality based on PAINTSMART
    * HotKeys



    Credits to:
    * @Brandon for c++ plugin template
    * all PAINTSMART include creators for ideas of functions


    Example of use - debugging flash game:







    Instalation:
    ETL comes in two parts: etl.dll (plugin) and ETL_Lape.simba (include). Put include into "Includes" and plugin into "Plugins". (Was it necessary? :P )

    Instruction:



    All functions are self - explainable, but here is short close-up:

    * New vesion of include provides one-line initialisation:
    Simba Code:
    ETL_Start(); // Opens ETL and places it on top of a client window.

    etl_CloseWindow(); // optionally - you don't have to close ETL at the end of the script
                       // also you can close ETL window manually at any time by 'Esc' hotkey

    * Default transparent color is clWhite. Of course you can change it.

    * For bitmaps use functions from include:

    Simba Code:
    ETL_SetBmp();
    ETL_DrawBmp();
    ETL_DrawBmpTransp();

    NOT these functions from plugin:
    Simba Code:
    //don't use !
    etl_SetBitmap();
    etl_DrawBitmapTranspEx();
    etl_DrawBitmapTransp();
    //just ignore them


    *HotKeys:
    C - Clear layer
    R - Refresh
    M - Minimize
    Esc - Close


    * For more look into interactive tutorial... ( currently outdated)
    Attached Files Attached Files
    Last edited by bg5; 03-17-2015 at 06:12 PM.

  2. #2
    Join Date
    Oct 2011
    Posts
    805
    Mentioned
    21 Post(s)
    Quoted
    152 Post(s)

    Default

    I started this interactive tutorial when I was bored...but finishing it was a real pain. So here it comes,enjoy

    Simba Code:
    program ETL_TUT;
    {$loadlib ETL}
    {$i etl.simba}
      const
        mw = 1053;
        mh = 484;

    var bmp,bmp2,cw,ch,i :integer;

    procedure MakeFont(FLabel,Name:string;Size:integer;Style :TFontStyles);
    var f:Tfont;
    begin
      f := TFont.Create;
      f.Name := Name;
      f.Size := Size;
      f.Style := Style;
      LoadSystemFont(f,FLabel);
      f.Free;
    end;


    var ratioW,ratioH :extended;
    function A(x:integer;isX:Boolean) : integer; //Adjust
    begin
     if isX then
      Result := Round(x*ratioW)
     else
      Result := Round(x*ratioH);
    end;

    procedure PressSpace;
    var i,x1,y1,x2,y2 :integer;
    begin
      x1 := cw/2-150;
      y1 := ch - a(100,false);
      x2 := cw/2+300;
      y2 := ch - a(100,false) +50;

      etl_Rectangle(x1,y1,x2,y2,clred,true);
      for i:=0 to 50 do
      begin
        i:=i+1;
        wait(30);
        etl_LineTo(x1,y1+i,x2,y1+i,clred);
      end;
      etl_DrawTextEx(x1+50,y1+10,'Space','Press SPACE to continue...',0,false);
      while(true) do
      begin
        if IsKeyDown(VK_SPACE) then
        begin
           ETL_ClearArea(IntToBox(x1,y1,x2,y2+2 ));
           exit;
        end;
        sleep(50);
      end;

    end;
    // modified ETL_DrawTextMultiEx with delay between rows - just for this presentation
    procedure ETL_DrawTextMultiEx2(TSA: TStringArray; Placement: TPoint; Font: string; color: TColor; Shadow,Background:Boolean; BGcolor:TColor );
    var
      i,w,h ,TPH: Integer;
      TTP, SArr: TPointArray;

    begin
      TPH := High(TSA);
      for i := 0 to TPH do
      begin
        TPAFromTextWrap(TSA[i], Font, w,h,TTP);
        OffsetTPA(TTP, Point(Placement.x, Placement.y + (i * (h+1))));
        if Background then
          etl_Rectangle(Placement.x,Placement.y+(i*h),Placement.x+w,Placement.y+h+(i * h),BGcolor,false);
        etl_DrawTPA(TTP, color);
        if Shadow then
        begin
          SArr := CopyTPA(TTP);
          OffsetTPA(SArr, Point(1, 1));
          ClearTPAFromTPAWrap(SArr, TTP, SArr);
          etl_DrawTPA(SArr, 65536);
        end;
        wait(1500);
      end;
    end;

    procedure Spiral(w,h:integer;param_a ,param_b : extended);
    var
      i ,radius ,bmp ,bmp2,cw,ch,x,y :integer;
      tpa,temp :TPointarray;
      M : TPoint;
      b : extended;
    begin
      M := Point (w/2,h/2);
      radius := (min(w,h))/2-10;
      GetClientDimensions(cw,ch);
      x := cw/2-w/2;
      y := ch/2-h/2;
      for i:= 0 to radius do
      begin
       TPAFromCircleWrap(m.x,m.y,i,temp);
       combineTPAWrap(tpa,temp,tpa);
      end;

      bmp := CreateBitmap(w,h);
      DrawTPABitmap(bmp,tpa,clWhite);

      for i:=0 to 357 do
        begin
           b := fixd(i);
           temp := tpa;
           FilterPointsPie(temp,b, b+3, param_a*i, param_a*i+param_b*i,m.x,m.y);
           DrawTPABitmap(bmp,temp,clred+(i mod 3)*10000);
           bmp2 := rotatebitmap(bmp,pi/2);
           freebitmap(bmp);
           bmp := bmp2;
           ETL_DrawBmpTransp(bmp,x,y,0);
        end;

      freebitmap(bmp);
    end;

    var TSA : TstringArray;
    var TPA :TPointArray;
    var ATPA :t2dpointarray;
    var TBA: TBoxArray;
    var cx,cy: integer;


    procedure Page1;
    begin
       ETL_SetBmp(bmp,5,5);


       ETL_DrawTextBgEx(cw/2-315,ch/2,'TNR','Welcome to External Transparent Layer',clblack,clAqua,TRUE);
       wait(2000);

       for i:= 0 to 60 do
       begin
        etl_Ellipse(cw/2+i,ch/2+60,100,i/2,clAqua+200,false);
       end;

       ETL_DrawTextBgEx(cw/2+30,ch/2+50,'LoginChars','By beginner5',clblack,clAqua+200,TRUE);
       wait(3000);

       ETL_DrawTextBgEx(cw/2-313,A(150,false),'ArialI','In this little TUT I want to show you what it can do...',clblack,2588671,FALSE);
       wait(3000);
       PressSpace();
       etl_ClearLayer();

    end;

    procedure Page2;
    begin
       ETL_DrawBmp(bmp,5,5);
       ETL_DrawTextBgEx(cw/2-100,A(50,false),'TNR','Overview',clblack,clAqua,TRUE);
       wait(2000);
       ETL_DrawTextMultiEx2(['ETL is:',' fully click - through - able ',' tranparent layer ',' which you can put on top of any window ',' and draw stuff on it ! '],Point(120,130),'ArialB',0,false,true,clred);
       wait(2000);
       PressSpace();
       etl_ClearLayer();
    end;

    procedure Page3;
    begin
       ETL_DrawBmp(bmp,5,5);
       ETL_DrawTextBgEx(cw/2-100,A(50,false),'TNR','HotKeys',clblack,clAqua,TRUE);
       wait(2000);
       ETL_DrawTextMultiEx2([' Press "R" to Refresh ',' Press "C" to Clear ',' Press "M" to Mimimize ','',' To use HotKeys you need to click ETL icon on the bar. ',' It''s only way to active mouse/keyboard focus on ETL. '],Point(120,130),'ArialB',0,false,true,clred);
       ETL_DrawBmp(bmp2,120,310);
       wait(1000);
       TPA := [Point(494, 375),Point(512, 330),Point(525, 353),Point(477, 352),Point(512, 330),Point(500, 375),Point(494, 375)];
       etl_Polygon(TPA,High(TPA),clwhite-1,false);
       etl_Polygon(TPA,High(TPA),1,true);
       wait(2000);
       PressSpace();
       etl_ClearLayer();
    end;

    procedure Page4;
    begin
        ETL_DrawBmp(bmp,5,5);
        ETL_DrawTextBgEx(cw/2-100,A(50,false),'TNR','Functions',clblack,clAqua,TRUE);
        wait(1000);
        TPA := [Point(26, 10), Point(12, 11), Point(14, 13), Point(15, 13), Point(16, 13), Point(17, 13), Point(18, 13), Point(19, 13), Point(20, 13), Point(21, 13), Point(22, 13), Point(23, 13), Point(24, 13), Point(15, 14), Point(19, 14), Point(133, 14), Point(145, 14), Point(15, 15), Point(19, 15), Point(137, 15), Point(138, 15), Point(19, 16), Point(136, 16), Point(137, 16), Point(138, 16), Point(19, 17), Point(135, 17), Point(136, 17), Point(138, 17), Point(12, 18), Point(19, 18), Point(135, 18), Point(138, 18), Point(19, 19), Point(135, 19), Point(138, 19), Point(19, 20), Point(26, 20), Point(135, 20), Point(138, 20), Point(19, 21), Point(20, 21), Point(132, 21), Point(133, 21), Point(134, 21), Point(135, 21), Point(138, 21), Point(141, 21), Point(142, 21), Point(143, 21), Point(16, 22), Point(19, 22), Point(135, 22), Point(138, 22), Point(19, 23), Point(135, 23), Point(138, 23), Point(19, 24), Point(135, 24), Point(139, 24), Point(140, 24), Point(19, 25), Point(134, 25), Point(135, 25), Point(137, 25), Point(138, 25), Point(139, 25), Point(19, 26), Point(134, 26), Point(135, 26), Point(136, 26), Point(137, 26), Point(139, 26), Point(140, 26), Point(133, 27), Point(140, 27), Point(144, 27), Point(132, 28), Point(133, 28), Point(140, 28), Point(141, 28), Point(142, 28), Point(132, 29), Point(142, 29), Point(131, 30), Point(132, 30), Point(142, 30), Point(130, 31), Point(142, 31), Point(130, 32), Point(142, 32), Point(65, 33), Point(142, 33), Point(142, 34), Point(142, 35), Point(70, 36), Point(71, 36), Point(72, 36), Point(73, 36), Point(74, 36), Point(75, 36), Point(65, 37), Point(66, 37), Point(67, 37), Point(68, 37), Point(69, 37), Point(74, 37), Point(75, 37), Point(65, 38), Point(75, 38), Point(141, 38), Point(65, 39), Point(75, 39), Point(65, 40), Point(75, 40), Point(65, 41), Point(75, 41), Point(58, 42), Point(65, 42), Point(69, 42), Point(75, 42), Point(65, 43), Point(75, 43), Point(65, 44), Point(75, 44), Point(65, 45), Point(75, 45), Point(65, 46), Point(74, 46), Point(75, 46), Point(64, 47), Point(65, 47), Point(75, 47), Point(65, 48), Point(66, 48), Point(67, 48), Point(73, 48), Point(74, 48), Point(75, 48), Point(65, 49), Point(66, 49), Point(67, 49), Point(68, 49), Point(69, 49), Point(70, 49), Point(71, 49), Point(72, 49), Point(73, 49), Point(65, 50), Point(65, 51), Point(65, 52), Point(65, 53)];

        etl_Rectangle(A(150,true),A(50,false),A(380,true),A(400,false),6071738,false);
        ETL_DrawTextBgEx(A(130,true),A(40,false),'ArialB','Rectangle()',clblack,clblue,TRUE);

        wait(1000);

        OffsetTPA(TPA,Point(A(200,true),A(100,false)));
        ETL_DrawTextBgEx(A(230,true),A(150,false),'ArialB','DrawTPA()',clblack,clblue,TRUE);
        ETL_DrawTPA(TPA,clred);
        wait(1000);
        OffsetTPA(TPA,Point(0,A(100,false)));
        ETL_DrawTextBgEx(A(215,true),A(270,false),'ArialB','DebugTPA()',clblack,clblue,TRUE);
        ETL_DebugTPA(TPA,clgreen);
        wait(1000);
        OffsetTPA(TPA,Point(0,A(100,false)));
        SplitTPAExWrap(TPA,10,10,ATPA);
        ETL_DrawTextBgEx(A(200,true),A(370,false),'ArialB','DebugATPA()',clblack,clblue,TRUE);
        ETL_DebugATPA(ATPA);

        for i:= 0 to 60 do
        begin
          wait(20);
          etl_Ellipse(A(510,true),A(230,false),10+i,10+2*i,clgreen,false);
        end;
        ETL_DrawTextBgEx(A(440,true),A(115,false),'ArialB','Ellipse()',clblack,clblue,TRUE);

        wait(1000);
        TPA := [Point(84, 48), Point(223, 50), Point(290, 159), Point(49, 161), Point(111, 259), Point(217, 271), Point(154, 147)];
        OffsetTPA(TPA,Point(A(700,true),A(100,false)));
        etl_Polygon(TPA,High(TPA),clred,false);
        ETL_DrawTextBgEx(A(750,true),A(130,false),'ArialB','Polygon()',clblack,clblue,TRUE);

        TBA := [IntToBox(cx+0,cy+0,cx+10,cy+10),IntToBox(cx-10,cy-10,cx+20,cy+20),IntToBox(cx-25,cy-25,cx+35,cy+35),IntToBox(cx-75,cy-75,cx+85,cy+85)];
        ETL_DrawBoxes(TBA,true);
        ETL_DrawTextBgEx(cx-30,cy+75,'ArialB','DrawBoxes()',clblack,clblue,TRUE);
        PressSpace();
        etl_ClearLayer();
    end;

    procedure Page5;
    begin
       etl_SetTransparentCol(clwhite);
       etl_ClearLayer();
       ETL_DrawBmp(bmp, 5, 5);
       ETL_DrawTextBgEx(cw/2-100,A(50,false),'TNR','More functions',clblack,clAqua,TRUE);
       etl_Rectangle(1,1,cw-1,ch-1,clred,true);
       ETL_DrawTextMultiEx(['Let''s change transparency color with:','SetTransparentCol()'],A(130,true),A(100,false),'ArialB',14657091,FALSE,TRUE,clyellow );
       wait(500);
       PressSpace();
       etl_SetTransparentCol(14657091);
       wait(3000);
       ETL_DrawTextMultiEx(['Now clear part of screen with:','ClearArea()'],A(130,true),A(250,false),'ArialB',14657091,FALSE,TRUE,clyellow );
       wait(500);
       PressSpace();
       ETL_ClearArea(IntToBox(A(130,true),A(100,false),A(700,true),A(350,false)));
       wait(2000);
       ETL_DrawTextMultiEx(['Finally clear whole layer with:','ClearLayer()'],A(130,true),A(130,false),'ArialB',clred,FALSE,TRUE,clyellow );
       wait(500);
       PressSpace();
       etl_ClearLayer();
       wait(1000);
       etl_Rectangle(1,1,cw-1,ch-1,clred,true);
       ETL_DrawBmp(bmp, 5, 5);
       ETL_DrawTextMultiEx(['Now change size of layer with:','SetSize()'],A(410,true),A(250,false),'ArialB',clred,FALSE,TRUE,clyellow );
       wait(2000);
       etl_SetTransparentCol(0);
       PressSpace();
       etl_SetSize(400,300);
       wait(3000);
       ETL_DrawTextMultiEx(['...And fit it back to client with:','MoveToClient()','(Press SPACE to continue)'],20,100,'ArialB',clred,FALSE,TRUE,clyellow );
       wait(500);
       PressSpace();
       ETL_MoveToClient();
       wait(1000);
       wait(500);
       PressSpace();
       etl_ClearLayer();
    end;

    procedure Page6;
    begin
       ETL_DrawBmpTransp(bmp, 5, 5 ,clwhite);
       Spiral(600,600,0.3,0.4);
       ETL_DrawTextEx(A(100,true),A(100,false),'TNRbig','THE END',clblack,TRUE);
       wait(1000);
       PressSpace();
       etl_SetTransparentCol(clwhite);
       etl_ClearLayer();
       etl_CloseWindow();

    end;

    procedure SetUp();
    begin

      if (GetImageTarget()= 0) then SetDesktopAsClient();
      if not etl_IsWindowOpened() then etl_OpenWindow();
      ETL_MoveToClient();
      wait(300);
      etl_ClearLayer();
      GetClientDimensions(cw,ch);
      ratioW := (cw+0.0)/mw;
      ratioH := (ch+0.0)/mh;
      cx := cw/2;
      cy := ch/2;
      MakeFont('Space','Arial',18,[fsBold]);
      MakeFont('TNR','Times New Roman',26,[]);
      MakeFont('ArialI','Arial',20,[fsItalic]);
      MakeFont('ArialB','Arial',18,[fsBold]);
      MakeFont('TNRbig','Times New Roman',100,[fsBold]);
        bmp := BitmapFromString(113, 103, 'beNrtXfdXU9kW/kueiig' +
        '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' +
        'lSOpgSbvrS3H43fpWYN8PeOcpLCF5v4hCYkm3m2a5XNuQ5OPPCi+' +
        'kDS1esnaK3PgE9toYc+1/h7TFEfD6LP0i1l8w3Wn7WjOmU5Gec2I' +
        'bUyzl3h8cHgWfYfF6W+hzT2vl08h6LZs8wOLNIx7V+E4QUQiODr+' +
        'oVLCLYlY4PCqT87yE5/y24cMBpch1rGkhFXn1UygUPYlOAxGFwFz' +
        'xjvTZNGLZ0AzytFVzD+GgxbMjwTUI5+NUMTorQJrqGWNN6lp7qeo' +
        '7/BJYrhQv2h/HECDuyCDR6Fr3vdR98hEuIaBuTIi4a6mxs3/Hdct' +
        'tZv7Ho9uUEpWYF1OZc0j32jh7StfOb69bMkLbGtfGQt4H9vY9VuW' +
        'i2W7neGXVc+ViEcDCGvz1fJddFBJ1CiFShkxR/JLqWFBSjsoly4O' +
        '+hcqKnc+lEetoswgpnePxTLzDtlu8RBKunkoZetc/JUZsmzxeYVR' +
        'vOB55iVXiiSrkForHF1j5R20zC9CM6UAyk4IBpJQKBEKXkITNRm4' +
        'rGo98VzYKB6YRLgSiP9vAN1vv+B6PblU6pW5hSWp/eCqtmvN5ISU' +
        'EOVBq7R+19bY3kjIKhB7ZvXLQpc/isrb8+UiJlJ5JJWIpHIS6lMv' +
        'jmz0J33Lb61gkHslkMB1shJTC12Nzy7bcdNd41aAsSi9lkrrGuMg' +
        't/s2HQVvv+CDZ+ICQRibyruWKhradt9yPhNQqreaYL4eYlD09c9n' +
        'O5yfTpwjrfe5VdB7iHgTyCOO0zdND/qXKcqJgFchjQNoY8+Rdt5/' +
        'vByEs61iU0JB35IJHZ/siYZ972okkJTQZgkVI755EHuN3Ecj7jex' +
        '22LxCmKYwzKNQpviIpzOfWYHbaxsut7KdNPgth9I3IYdkWnFNk9r' +
        'l+3ucExDGgDrppEryDJvDZU3NLAa4RtLuGkPfeKWo0xf149LmTMA' +
        'SLVnvxOR0QHzWBt17Bx5nI8+a/p4zdDvm42Xn53p2vl9wxcEvoxw' +
        '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');


      bmp2 := BitmapFromString(625, 39, 'beNrVnQdcFFf395EiRekL' +
        'iF3YxZ5EY3xsMUajRqOxYy/Ye++KIihKUTqIvaHYYywxaowm9th7' +
        'xd6NSewmRt7DHuc8d++dmZ1d0Of//tjPfu7ODrMzt5zvPefeuVOq' +
        '1FxJLVu2HDx48NmzZx9Kevy/0O+MHgl6aKoHku5LumfUXUl3GN1m' +
        'dEvSTUk3jLou6Zqkq5KuXLmSxeiKpMtGXZJ0QdA5U52VdMao04JO' +
        'njx5itFJo07JCb86IWnv3r1hYWEDBgyYb1RwcPCwYcPOnz9P2fX7' +
        'e9Oj/2/18H+qB9qU/b/TW3P6V9IbU/0j6G9TvZb0SkEvJT031TNJ' +
        'TyU9MdVfkv406g9BZquxUulwdoZ0V9AdU4GhiI+P79ChQ7hR9evX' +
        '79mz55EjR2gH2XK//x50T5DSOd82lZLNFE1llqk4Uwm6aJSShQSd' +
        'YUSmEgRGDywkGUAyfcclHTPqqKQjkg4b9Zugg6baL+mAJNqyz6i9' +
        'krZs2QLWtV27dlNMhYWL8vLy2rBhA5z/YVUdYXTUVLQPnu0hQXTm' +
        'smfLnvMeo34x1W5JOyXtkLRt27Yfjdpq1GZJGyStN2qtpFWSMiUt' +
        'M2qJUYsXL14gibocc4xKlZQiKTExMSEhIV7STEkxkqKMmi5pmqSp' +
        'RoVLAhpOnjyZ3kGTJk2CNL6zCRTuAAqTlJycDGdiMBgaNGjQsGFD' +
        'X1/f7777ji1QLAWqTlx5UeFy+4s6YCooQbbUQL9KorLbZaqdpmLL' +
        'EfWDpC1GfS+JChTLcbWklZKWG7VixQoozaVLly6WNF8SlWaaUcmS' +
        'EiXFGUXlGCVphiQsxwhJ1JqomEChoaETJI2XNNaoMUaNHj16lKSR' +
        'Ro0YMWK4qYYZBXYY0Ma1tWOMjgs6wei4go5p1lE5HZGTkuFSqTys' +
        'HUBTQFWIa/g/CxLrD1eLUD+aCuwDV7tIZDc2mep7QRtM9Z2g9aaC' +
        '34Ur8vb21hvl4uKSkZEBecs2FnVxTczSzNkuaZsgtJliJqDoitZJ' +
        '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' +
        'SVmJlitBg+It165duwipzs7OJ0+eBIvEWif6yArtGLDycGUzSM0+' +
        'nIPUGDmxB+RaEHkT7LoK3PwQpVtaaGSEu5OFhrpQZKBoyBIh1cio' +
        'rxXEfttIUuPGjb9h1ESDmmrQt1YJsk5EKoiQ6u3tffbsWairXJ+N' +
        'jR4sjwnd92XQ9V76mwMMN4cZbo0x3IkIvJdU6uGyYlvCanumHACq' +
        'AkNtF52Fl93CMw7zTjqnHXNL+M0zZp9v2M5SE7ZPWXvi7b/P397q' +
        '9/avNfcv9t+xoTs7As6FKZQssBjex2UWqMclxv2wDmB0FCQb0FM3' +
        'vD0/uMjZYTeykMVLYJ1ZFqmlSpUCO8Z2pDFX0TpNLP/pzMK6uGIO' +
        'if4OSTrHWd5O070dogs5xfs7JxVySdS5Rrk7xlfwWBRcNKm53fw2' +
        'DjuHlYqt7zWzvuuyNr57h5Tc089zb2/fbR081zd3XlS75JI6VabW' +
        'bTxrehILUAy8ywaXuGlg4q1JnAXg4rfQ3rE50/C0Fi9SdgfuXjMt' +
        'cJRVZ0vUSU5K0yHAdPz7778YqJe9+RGQ+s+bNwDBbdv27fjphMpr' +
        '2/Z9b/75G17inaron9bstwhekECkQm1ZsWKF+rpASjekmJ0gQeMC' +
        '2OVT9xNZbrLUk/W/LNUsc5qZF/r5558BqRgbdHFxOXbsGK5jEM6I' +
        'uMatDIMeKFBVHqyH3/EUJC4pwylckNJ91uLCRNx8PHbkix38whZB' +
        '3hxRsqGgBqqiHWh/kbAogiz3UaOaWCUVpNLKABiLoCqKlZY6b1CZ' +
        'V0wdfqOH/mZvww1A6hDDrdGG21MM9xICHi4ucSqk1L6B/9kwq83i' +
        'xJCvR0YXTD1aMOWIW+Jht1kHdVF7/SJ2F52wo/jILUEjNtx7dOvt' +
        '0y1v74dm3+9/eX95PDLXpeSIyS5PpD6JCCsJ9ZeUgMhF5zSG6bS7' +
        'KiEa1M1y4T/S+RAmCLJAtHLlymGZQssFwwWZRnnIeoLhAWXTvH1S' +
        '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' +
        'HjxQQirCApCKEzVZpM6YMQPsIcCUZrXBFrC6LFInTZoE75CGVkzB' +
        'WwxiAFLJ2eSQSvQUkQpp2AIZCydw7949oOTo0aNPMIKPsBH2gVKg' +
        'MRSLkAo1n5Dq4eEBFyuu24P1zYbhaeXKldXA2stkMrAMTBl3lWOo' +
        'SExwqYCSYD0wGCv6m+SNouAjGiIiIDKXBR/HR4Ijboechwtkn7YA' +
        'H6H10VcoaALg286ePbuyqejgeIbIdPQyoApBleB6EeShV88Lsc9L' +
        'lUUqpDdv3kxr8pBo5tiGjjWPNtCfbKQ/30J/uU1O+PdCsP5yO/21' +
        '7u9uqDk7ovzyfp8fmPDxvfic2UoPlxa7vrJc4Ff93Sv19ajQ1aNU' +
        'y9r1mz/6qd6zneX/ver19xmnV8ddHs8tNn/k5xxGoXpjOBfDv1AV' +
        'kZ6IVEpTQpyyAjAFpKIHKiIVHTqMKEI7hTRkDphonHmOGIVC6d69' +
        'Oxhw2AHjkOANwXZEAHqpsl4V4Q+fMmmWkogM+EdiByW02H+OrYsX' +
        'L4YGyyKVW8mQVltK8XRK9nSKL5Rvlr9DrLdDgrtduqdNqs4mWmc7' +
        'pZhL+EfeowNtY6oUSKlVYO4XLvNqOy2o7TT7C+fEui5pTT1W9QzY' +
        'PqbyngmfnYqodWV6nRtRXzyI/PxeZN27UTUexNbeHD2ka7fu7J0p' +
        'YHMwPtCjRw/IUsgWyi72Ytk0QJ9yA4oJ/gU2Iknhq8zMTDgO8BRt' +
        'I5tXGtfn5L7i9pflqcYoLisrACouNQNealZWFndfCXv7CYtUmonU' +
        'Ij261dwZbRZEBi+e2m7plA4ZkzplTjR7X6p1SCVooosK1gwqHnx8' +
        '8eIFh1Rxqu1pozDwi04rfIskBarCoYCndMsVIhXnGkEa/uXUqVMi' +
        'UmW9VNYhFTeCMQeLAb8OdRV+C5EK7w+Mwo+Q7RjmpTtJLUIqeAdg' +
        'gRGpnp6eK1asELtbWG0Af4gMjWDlkCq/ILCRqiwi0W0Ek4guJJIU' +
        '8gHS6enpQEx4p7gr5C18hB3Ai0Q4QgI+wkbiGss4kXqYhuxCMrLb' +
        '4f3atWvQ04amV6lSpebNmyNSKzGC/4JTgnf8CP8C1gPhi7wGMwgH' +
        'h/NB+iNSq8qJw6vVApsmi1S61xUKesOGDdyCPKwmdAv+rZ7+SD39' +
        '6W/0F1vorwTrr3TQZ3XMCQJf62G8p2aI4ebwnDtrrvTVH2qkT65W' +
        'uU+zr/yr9PD+pKeuTEdd8abjh1Z8vs3zxS6Xl8dcnuzy+XNLoXvh' +
        'xQd0bc7NoQVW0sgp5DPODmLDtuClAmpDQ0PZW01xABQFAEWksgCF' +
        'I7DDcCAKxsI7kpELM1J0ESqP6FVhGl0k8qrA2uO/AAhgo9nVmDl3' +
        'DBop0gQS6rNiRGTAKS1ZsgTKlJAaFRWFBSouzZfsnj/JzTGmoM0s' +
        'z/yJHs7pnk5zPPKlegNS84UWdRlQzHFYoMuE8u5TKrpHfuQWWdE1' +
        'srzbxIruIz9xDa2tm9UmKK1bxVWDPt09pvqxsNrnZta9M73O3WmN' +
        'LkR9ezCudWrkyJDuPdnZuThCjdly6dIlNuvo8uEq6MLh6gYMGIBp' +
        'TFy5cgX/HQwRfNu5c2dAKnwEc3f79m3YrZmqVGbbitu54VGWoSoj' +
        'nrKg1H7buNId6NDXrV279sWLF7k1YFm8skilmUitMdi7JKL9srCO' +
        'y0M7r5zQdfVYQupr43TfvPJSWaTCueG8Iyg1aINKSGXvU8bFlGA7' +
        'TUbCqC+6q3QoIClwlpDKxX5v3boli1QcCcUmzCKVpi2BgJJAK/gJ' +
        'SP/xxx/EUBDeMEJuKRv7tTTwC/0WFqnQVJWWIECkAh20g5WdrcTD' +
        'FAPCRqR+KghJRCOhhELIJcoiuNIvv/wSOjzbtm1jMQcfYSNyDTLn' +
        'E6NgI3iU4FfiR/iWjg8HpN2Qm/gROo3wL3AoSH/88cf4FeTYx6aC' +
        'LXRKsD+0C9iTPTicM10Ue78q9hNw+FVWsuRV2k6CTh2UYymjZJFq' +
        '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' +
        'A9bDdfVH6+ewFfzWU41yCHuykf5wA31KlU/CylWc8lF5MC9gP4Pf' +
        'gyylqtnbZPKQqpyjavXSBOpUBaQWLlwYkQqFm56ezk5dZtcEBpim' +
        'ejvMyeGpXayPfaSv/VRv+6luthHONuHOdhOcHaa6u0x0tI32cI7z' +
        'KZDg45yoc47zLRBbxG1I6WJd2vGUtGLOtuioqviqIkDVqZobb1R9' +
        '2V5u6q8VVLUUqXXr1gWkpqSkJAtCbAFWwGKDidY4W4am37DP0mWF' +
        'Q424bgMcP01SqrVKMadkbdJIbcIx5xfnMjptRaSaFSIVOrqIVCiI' +
        '3CBVo/LWRc0lTD88Ut9r+BeQ6urqKiKVWjEgFdfZU3JROXiBAQST' +
        'UrNGjRBD6XklSm7WB4LHuqOiYXeVHLbuqxl04HP9wc/1B2rlvHZ/' +
        'VnJhJX23KpXhh8Bsqjx4638+qJpLpCqFf60YJ7VixQNCKqhkyZLz' +
        '589n11ZiqYouqnE+kl2Mt32kt32Ye76wgrbhzrbhTvYTnewjCjpO' +
        'yp8vTlcw3qcA8DRR5xTn4xhf2GVycZ/BzZq2F6b1akGqrKPKPflF' +
        '420y7w+p6lQV76Z530itV6/e/v37VVAFrAGOKAVUOZTQRmSN7KNt' +
        'UEArODj73HNRszUrTYNySWcRvpwLbDYirTFGbVE+05YrV66wSB0/' +
        'fvz7RuoH5qmWG17yPNIrItWi2b+Whn8tRSqt+q4U7xX5hWCtUaNG' +
        'y7LlxpYKiC1eIqFkibUBJZfrS0wLLD7FUGKgIaBj2TL1K+fAFEwf' +
        '2M/3x1PtvqpGpIoAtXrqr3U8tfRuzdWrV/v7++OzdEuUKAGFTqct' +
        'i9REL/tZXvZRnvZTPewmFLCZUMB2kov9JBeHiY52ES52kxxskgu5' +
        'AU+TdE7JuvxxPrZphR0TCrmNLBvUk3kCo9mHvWqZp0QZax1S3xNV' +
        'zc5TsgKpls5TAqTu27cvXZtUiEbvLCXnGDVX0jxLNDcXmqOgdKsk' +
        'C26u12GRn5ubeLWSsrKyWKSOGTPmvSL1g/HUontI38f4KUtV9mbV' +
        '93RPDYFVC1JjYmLMTkxSohiYRDBrYGRw9AcEpgDMCBgisJNm6fxh' +
        'kKpxHUJ1pFp3m+oHRiqoWLFiS5YsYXsCLFhTffIDJaPc7GbqHKe6' +
        '2k51s59U0G5CQYfxBfNPLOAwxSnfFMd801xsU/1cgacp3vlTdPYp' +
        '/nbphR3m+RSMKVZ46FdfdunShQVqx67dtYPVinlKZsO/Hx6pFlFV' +
        '+3JJ3PQkRGoeYotj6HxJC96n5mtTbsAt0llErcZAtBVBabO6evUq' +
        'i9RRo0a9J6Tm+c2nuYRphfcszlFVXwIiD+cpmUVqmTJlIiMj2Rm/' +
        '2pFqlm65OUhuqKoS8jV7T42Iztwvo9TMWmmhDFzgsmXLCKlFixZd' +
        'tGgRXB17/uxUJdkizmXOq9+XqjH8q52q79tR1XJDjRVIVaGqeBMN' +
        'ItVSNqmjimPoQqMWmWqxUYvyTgu1KZeM5nAs+r95EqO2YnD52rVr' +
        'hFRvb+8hQ4ZwM361TPe1Gqkf8obTD8lTjbepqs/+tWKeUs2aNaEC' +
        'mPVSR4wYMWzYMFqQkCORpVZXZYJQ8PuXkq9qKVJlV/TVePsqu1rg' +
        '+6MqLYsUHh4eERFRpEgR8lLh45QpU+ArLFCRqpQneVU66us8KK38' +
        'YJ2j+n+BqlYjVZaqIkxR+/fvX2iJtCCJdmYBClryHrTYElmNYyXm' +
        'st5uHkabLRpNXrlyJS31gF4q3idOqyepIFWkqnaefvgFHP63MFVa' +
        'Tymvwr+0CDP0iIYPHy57Xyo1Z9i/Vq1aAwYMoIl/Kndyya4kRvPJ' +
        'ubno4hOpuBF8dsoEO1lCHPXAUAz2+tjuotmxIWxcnBlRsSQZGRnL' +
        'jMqQtNxUmZmZK4zKNGqlpFWC1uSRViuIrmXixInQMEuXLo1ILVOm' +
        'DHwMDQ0lIyN7hqv/DwjPZCWjTFOtyFNxRWnd/2YwWqZBS81JBUn7' +
        'FbTPnMT9Dxh10FSHDh2ilQkPG3VE0lFJx0x1XNJJU52SdFrSGUln' +
        'jTon6fz585QAXRR0SdJlU12RlCXpqqmuSbp+/fo1Rtf/d4J8GDly' +
        'pI+PDyK1UKFCkIAOdl9JQ1Q1WBB9hU95HipouKQRRrGPmRtpFD2x' +
        'Dhf5p6cG0KLEuI6iOFGcW4eK1sfg7t4lHMja/9jYWJq4Jc6R48w+' +
        'Bc/R/pPZF7surP2XjcyoSEtHlM6wf//+UI5QoCpIhV4xWOBy5coF' +
        'MTLISa/Xy37UmypQs6B2UUJdpeRUUlAJQcUVVMxURYsWpQSnItpU' +
        '2Cr554XgcqD4ateujUiFRPny5eHa4fjsGXLXVez/hrhM1p5F1uVe' +
        'IUa5+V+Qn4J8LZSPsmRroJaKVEhVbB6SLK3PGnNJlNlM8zEnnSBv' +
        'Rl6SPI3yYORuodxyLfhRuDpcsA6tFmQRnLCXqTy1ycNU1p2wqzkV' +
        'NKcC1srlPUv2R81ejqslgmyHKipDo/8HgW6cfg==');

        etl_SetTransparentCol(clwhite);
        etl_ClearLayer;
    end;
    procedure MainLoop();
    begin
        Page1();
        Page2();
        Page3();
        Page4();
        Page5();
        Page6();
    end;

    begin
      ClearDebug();
      writeln('Welcome to bg5''s External Transparent Layer');
      writeln('http://villavu.com/forum/showthread.php?t=106263');
      SetUp();
      MainLoop();
    end.
    Attached Files Attached Files
    Last edited by bg5; 10-13-2013 at 04:59 PM.

  3. #3
    Join Date
    Sep 2010
    Posts
    5,762
    Mentioned
    136 Post(s)
    Quoted
    2739 Post(s)

    Default

    Nice!

    so it's like appa except we can draw on it?

  4. #4
    Join Date
    Oct 2011
    Posts
    805
    Mentioned
    21 Post(s)
    Quoted
    152 Post(s)

    Default

    Quote Originally Posted by Officer Barbrady View Post
    Nice!

    so it's like appa except we can draw on it?
    No it's only for drawing on it.
    Last edited by bg5; 10-18-2013 at 04:38 PM.

  5. #5
    Join Date
    Feb 2006
    Location
    Helsinki, Finland
    Posts
    1,395
    Mentioned
    30 Post(s)
    Quoted
    107 Post(s)

    Default

    Interesting project, @bg5!
    Happy to see you were ready to release it to public, so people can test it out and that way report if there's any bugs lurking around and/or even suggest some new features/improvements.

    By the way mate: I am really glad to see, that you included tags for the commands (etl), because this way things are easy to locate via code hints, as they wont get mixed up with Simba commands. Clever!
    Although, these days Simba has quite useful functionlist (thanks to @Dgby714 for hes hard work on it), that can be used to check which commands are internal, plugin or include commands - but of course, that doesn't make tags any less useful.

    Nice release. Good work man!

  6. #6
    Join Date
    Nov 2011
    Location
    England
    Posts
    3,072
    Mentioned
    296 Post(s)
    Quoted
    1094 Post(s)

    Default

    Impressive, will defo use in the future

  7. #7
    Join Date
    Oct 2011
    Posts
    805
    Mentioned
    21 Post(s)
    Quoted
    152 Post(s)

  8. #8
    Join Date
    Jul 2013
    Location
    An horse
    Posts
    300
    Mentioned
    9 Post(s)
    Quoted
    120 Post(s)

    Default

    Does this work for OpenGL games?
    Currently lurking while messing around with dll injection. Will continue contributing after I finish my quest.

  9. #9
    Join Date
    Oct 2011
    Posts
    805
    Mentioned
    21 Post(s)
    Quoted
    152 Post(s)

  10. #10
    Join Date
    Feb 2012
    Posts
    30
    Mentioned
    0 Post(s)
    Quoted
    17 Post(s)

    Default

    Wouldn't this have a tick delay?

  11. #11
    Join Date
    Oct 2011
    Posts
    805
    Mentioned
    21 Post(s)
    Quoted
    152 Post(s)

    Default

    New version of ETL is out.

    Features:

    • Include rewrited in Lape.
    • Fixed flickering in some functions. All functions are double-buffered now.
    • Added ETL_TDebugBox type, example:
    • Fixed some minor bugs.
    • Cleaned up the source, which was very messy
    • etl_DrawTPA, and etl_DrawATPA are moved from include to the plugin.
    • ETL_Start - one line initialisation
    • Changes caption when minimised
    Last edited by bg5; 03-17-2015 at 06:12 PM.

  12. #12
    Join Date
    Feb 2006
    Location
    Helsinki, Finland
    Posts
    1,395
    Mentioned
    30 Post(s)
    Quoted
    107 Post(s)

    Default

    Quote Originally Posted by bg5 View Post
    New version of ETL is out.

    Features:

    • Include rewrited in Lape.
    • Fixed flickering in some functions. All functions are double-buffered now.
    • Added ETL_TDebugBox type, example:
    • Fixed some minor bugs.
    • Cleaned up the source, which was very messy
    • etl_DrawTPA, and etl_DrawATPA are moved from include to the plugin.
    • Changes caption when minimised
    Good job, bg!

    Nice changes, especially that first one you listed - keep up the good work man.

  13. #13
    Join Date
    Mar 2015
    Posts
    9
    Mentioned
    1 Post(s)
    Quoted
    4 Post(s)

    Default

    This is pretty amazing...

    I was wondering though: is there any way to set a line thickness? For boxes / rectangles i can always just make it fill and then clear the inside, but what about:
    Code:
    etl_LineTo(100,100,300,300,clYellow);
    Makes a perfect single pixel line. Is there any way (outside of stacking multiple lines) to make the line thicker? Or maybe do a rectangle at an angle?

    -Bill

  14. #14
    Join Date
    Mar 2015
    Posts
    9
    Mentioned
    1 Post(s)
    Quoted
    4 Post(s)

    Default

    This is pretty amazing...

    I was wondering though: is there any way to set a line thickness? For boxes / rectangles i can always just make it fill and then clear the inside, but what about:
    Code:
    etl_LineTo(100,100,300,300,clYellow);
    Makes a perfect single pixel line. Is there any way (outside of stacking multiple lines) to make the line thicker? Or maybe do a rectangle at an angle?

    -Bill

    EDIT:

    Using the same test script I used for TmufasaLayer (modified for yours and compounded with extra colors):
    Code:
    program new;
    {$include ETL_Lape.simba}
    var
      i, j, x, y: integer;
      console : ETL_TDebugBox;
    begin
      Disguise('Scrap');
      ETL_Start();
      x := -1;
      y := -1;
      repeat
      GetMousePos(i,j);
      if not (i = x) or not (j = y) then
      if (i >= 0) and (i < 820) and (j >= 0) and (j < 515) then
      begin
        etl_ClearLayer();
        ETL_DrawBox(inttobox(i, j, 100 + i, 100 + j),clRed,false);
        ETL_DrawBox(inttobox(i + 5, j + 5, 100 + i - 5, 100 + j - 5),clBlue,false);
        ETL_DrawBox(inttobox(i + 10, j + 10, 100 + i - 10, 100 + j - 10),clGreen,false);
        ETL_DrawBox(inttobox(i + 15, j + 15, 100 + i - 15, 100 + j - 15),clYellow,false);
        ETL_DrawBox(inttobox(i + 20, j + 20, 100 + i - 20, 100 + j - 20),clBlack,false);
        ETL_DrawBox(inttobox(i + 25, j + 25, 100 + i - 25, 100 + j - 25),clWhite,false);
        x := i;
        y := j;
      end;
      until (i > 1000);
    end.
    It runs MUCH faster... didn't even really notice a difference in speed adding the extra boxes. The only issue with the test is the flashyness you get moving the mouse around fast... Which could be solved by the line thickness option...

  15. #15
    Join Date
    Oct 2011
    Posts
    805
    Mentioned
    21 Post(s)
    Quoted
    152 Post(s)

    Default

    @BillSn0w

    Try this, should work faster:

    Simba Code:
    program new;
    {$include ETL_Lape.simba}
    var
      i, j, x, y,bmp: integer;
      console : ETL_TDebugBox;
    begin
      Disguise('Scrap');
      ETL_Start();

      bmp := CreateBitmap(100,100);
      FastReplaceColor(bmp,0,clred);
      RectangleBitmap(bmp,inttobox(5, 5, 100- 5, 100 - 5),clBlue);
      RectangleBitmap(bmp,inttobox(10, 10, 100 - 10, 100 - 10),clGreen);
      RectangleBitmap(bmp,inttobox(15, 15, 100- 15, 100 - 15),clYellow);
      RectangleBitmap(bmp,inttobox(20, 20, 100- 20, 100 - 20),clBlack);
      RectangleBitmap(bmp,inttobox(25, 25, 100- 25, 100 - 25),clWhite);

      x := -1;
      y := -1;
      repeat
      GetMousePos(i,j);
      if not (i = x) or not (j = y) then
      if (i >= 0) and (i < 820) and (j >= 0) and (j < 515) then
      begin
        //etl_ClearLayer();
        ETL_SetBmp(bmp,i,j);
        x := i;
        y := j;
      end;
      until (i > 1000);
    end.

    Generally when you are looking for high FPS it's better to throw all graphics at once.

    Currently there is no option to make line thicker.
    Last edited by bg5; 04-02-2015 at 11:29 AM.

  16. #16
    Join Date
    Dec 2015
    Posts
    10
    Mentioned
    0 Post(s)
    Quoted
    2 Post(s)

    Default

    awesome D

  17. #17
    Join Date
    Feb 2012
    Posts
    224
    Mentioned
    1 Post(s)
    Quoted
    8 Post(s)

    Default

    really cool stuff. very versatile. rn im using it to draw paths for a lil project of mine.

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •