desc: Sky 1.1  [mrelwood]

// (Copyright) 2018 - mrelwood plugins
//
//  This program is a free software plugin: you can redistribute it and/or modify
//  it under the terms of the GNU General Public License as published by
//  the Free Software Foundation, either version 3 of the License, or
//  (at your option) any later version.
//
//  This plugin is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//  GNU General Public License for more details.
//  <https://www.gnu.org/licenses/>.



// Includes code from Tilt EQ by Liteon:

// (C) 2009, Lubomir I. Ivanov

// NO WARRANTY IS GRANTED. THIS PLUG-IN IS PROVIDED ON AN "AS IS" BASIS, WITHOUT
// WARRANTY OF ANY KIND. NO LIABILITY IS GRANTED, INCLUDING, BUT NOT LIMITED TO,
// ANY DIRECT OR INDIRECT,  SPECIAL,  INCIDENTAL OR CONSEQUENTIAL DAMAGE ARISING
// OUT OF  THE  USE  OR INABILITY  TO  USE  THIS PLUG-IN,  COMPUTER FAILTURE  OF
// MALFUNCTION INCLUDED.  THE USE OF THE SOURCE CODE,  EITHER  PARTIALLY  OR  IN
// TOTAL, IS ONLY GRANTED,  IF USED IN THE SENSE OF THE AUTHOR'S INTENTION,  AND
// USED WITH ACKNOWLEDGEMENT OF THE AUTHOR. FURTHERMORE IS THIS PLUG-IN A  THIRD
// PARTY CONTRIBUTION,  EVEN IF INCLUDED IN REAPER(TM),  COCKOS INCORPORATED  OR
// ITS AFFILIATES HAVE NOTHING TO DO WITH IT.  LAST BUT NOT LEAST, BY USING THIS
// PLUG-IN YOU RELINQUISH YOUR CLAIM TO SUE IT'S AUTHOR, AS WELL AS THE CLAIM TO
// ENTRUST SOMEBODY ELSE WITH DOING SO.
// 
// Released under GPL:
// <http://www.gnu.org/licenses/>.




slider1:0<-30,0,0.01>-Sky is The Limit
slider2:0<0,100,0.1>-Allow Dist
slider3:9<7,11,1>-Buffer 7=128, 8=256, 9=512 ...
slider4:1<1,3,0.1>-In Comp THR
slider5:1<1,3,0.1>-BufTHR
slider7:0<0,1,0.01>-Meter
slider12:0<-6,6,0.1>-Tilt slider
slider20:-0.1<-9,0,.1>-Ceiling (dB)
slider30:25<250,1000,1>-Buffer Size (ms)

in_pin:left input
in_pin:right input
out_pin:left output
out_pin:right output
out_pin:3. output
out_pin:4. output

options:no_meter


@init
ver = "1.1";

ing = ingS = 1;
gainL = gainR = 1;
inflt = 0;

gfx_ext_retina = 2;
r = gfx_ext_retina;



upall = drawall = 1;

log2db = 8.656170246;
db2log = 0.11512925464970228420089957273422; 
mix=1;
gr_meter=1;
gr_meter2=1;

gr_meter_decay = exp(1/(1*srate));

rmstime = floor(    1000    * srate/1000);
rmsfreq = 12;
rmslen = floor((rmstime)/rmsfreq + 0.5);

bufSize = 512;
rmsibnk = bufSize * 3;
rmsobnk = bufSize * 3 + rmstime;
rmspos = rmspos_ = 0;
rmsgo = 0;
rmsisum = 0;
rmsosum = 0;

state = 0;


amp = 6/log(2);
sr3 = 3*srate;
bias = 80;

pbot = 1;
st = 1;






@serialize

store_01 = file_var(0, noob);
store_02 = file_var(0, sawtype);



@slider
inboost = 2^((-slider1)/6);

pdc_delay = bufSize = 2^slider3;
bufOffs = bufSize + 1;
pdc_bot_ch=0; pdc_top_ch=2;





cutoff = 20;

cx = 2*cutoff/srate;
cpi = $pi*cx;
fk = 0.67*sin(cpi);
c1 = 0.5*(1 - fk)/(1 + fk);
c2 = (0.5 + c1)*cos(cpi);
c3 = (0.5 + c1 + c2)*0.25;
hpa0 = 2*c3;
hpa1 = -4*c3;
hpa2 = 2*c3;
hpb1 = -2*c2;
hpb2 = 2*c1;


st = slider1;




@block

distx = slider2/100;
distxtlt = distx *1;
distxin = distx *1;
distxms = distx *1;
distxg2 = distx *1; // Post comp
distxg3 = distx *1 *0; // Post buffer
distxout = distx^1.5 *0.1 *1 *0;


  
inboost = 2^((-slider1)/6);

m_clip = 0.999;

startup <= 1 ? uptilt = 1;
uptilt == 1 ? (
  tlt_pls = min(1, abs(slider1)/20)^1.5 * 0.0 + distxtlt * 0.1 * min(1, -slider1/2) ;
  tlt_gain = slider12 + tlt_pls;
  tltmulti = max(0, tlt_gain-1);
  tlt_gain >= 0 ? (
    gfactor = 1.4 - tlt_gain/10;
    g1 = -gfactor*tlt_gain ;
    g2 = tlt_gain;
    ) : (
    gfactor = 10;
    g1 = -tlt_gain*1.2 ;
    g2 = gfactor*tlt_gain;
    );
    lgain = exp(g1/amp)-1;
  hgain = exp(g2/amp)-1;
        tlt_gain > 0 ? (tiltf = 0.5 + tlt_gain/3):(tiltf = 0.09);
  
  tf = floor(tiltf*1000);
    tomega = 2*$pi*tf;
  tn = 1/(sr3 + tomega);
  tgt_ta0 = 2*tomega*tn;
  tgt_tb1 = (sr3 - tomega)*tn;
  
  
  tiltboost = max(1,tlt_gain/10 +1) * 1/(min(0,tlt_gain)/(-40)+1);

  );
  



  d_ta0 = (tgt_ta0-src_ta0)/samplesblock;
  ta0 = src_ta0;
  src_ta0 = tgt_ta0;
  d_tb1 = (tgt_tb1-src_tb1)/samplesblock;
  tb1 = src_tb1;
  src_tb1 = tgt_tb1;






outvol = 2^(slider20/6);





@sample


/*
noob == 0 ? (
  gfx_dest = 6;
  gfx_setimgdim(6, -1, -1);   gfx_setimgdim(6, fx_w*2, fx_h*2); 
  gfx_dest = 7;
  gfx_setimgdim(7, -1, -1);   gfx_setimgdim(7, fx_w*2, fx_h*2);
  );
*/

sinegenerator = 0;
sinegenerator == 1 ? (
  play_state == 0 ? (
    tmpf = srate / 100;
    tmpcnt += 1;  (tmpcnt >= tmpf) ? tmpcnt = 0;
    spl0 = spl1 = tmposc = 0.01 * sin(6.2 * (tmpcnt/tmpf) );
    );
  );

/*rmstime =    100    * srate/1000;
rmslin = abs(spl0);  rmsrin = abs(spl1);
rmsin = (rmslin+rmsrin)/2;
rmsin >= rmsbnk ? (
  rmsbnk *= (rmsin/max(0.001,rmsbnk)-1) / (rmstime/1) +1;
  rmsrel = 1;
  ):(
  rmsrel < 2 ? rmsrel *= 1.000000001;
  rmsbnk /= rmsrel ;
  );
rmsin <= 0.0001 ? rmsin = 0.0001;   rmsbnk <= 0.0001 ? rmsbnk = 0.0001;

 = log2db * log( rmsbnk ) ;*/

/* rmstime = floor(    1000    * srate/1000);
rmsfreq = 12;
rmslen = floor((rmstime)/rmsfreq + 0.5);
*/

rmsiinavg = (abs(spl0)+abs(spl1))/2;
rmsiinmax = max(abs(spl0), abs(spl1));
rmsiin = (rmsiinavg *3 + rmsiinmax)/4;


ta0 += d_ta0;
tb1 += d_tb1;


tlt_gain != 0 ? (

  
  tinput = spl0;
  lp_out = ta0*tinput + tb1*lp_out;
  toutl = tinput + lgain*lp_out + hgain*(tinput - lp_out)*0;
  
  tinput_r = spl1;
  lp_out_r = ta0*tinput_r + tb1*lp_out_r;
  toutr = tinput_r + lgain*lp_out_r + hgain*(tinput_r - lp_out_r)*0;
  
  spl0 = toutl * tiltboost;
  spl1 = toutr * tiltboost;
  ) : (
  toutl = spl0;
  toutr = spl1;
  );





meter_l_run = abs(toutl);
meter_r_run = abs(toutr);
meter_mid_run = (abs(toutl+toutr))/2;

meter_l_pk = max(meter_l_pk , meter_l_run);
meter_r_pk = max(meter_r_pk , meter_r_run);
meter_mid_pk = max(meter_mid_pk , meter_mid_run);





det_inl = toutl;
det_inr = toutr;


cutoff > 0 ? (
  hpl = hpa0*det_inl + hpa1*meml1 + hpa2*meml2 - hpb1*meml3 - hpb2*meml4;
  meml2 = meml1;
  meml1 = det_inl;
  meml4 = meml3;
  meml3 = hpl;
  hpr = hpa0*det_inr + hpa1*memr1 + hpa2*memr2 - hpb1*memr3 - hpb2*memr4;
  memr2 = memr1;
  memr1 = det_inr;
  memr4 = memr3;
  memr3 = hpr;
  ):(
  hpl = toutl;
  hpr = toutr;
  );

hpmax = max(abs(toutl),abs(toutr));








ms = 2
;
inmax = max(abs(spl0),abs(spl1)) ;
inmaxS = ( abs(spl0 - spl1) /2)^0.55 * 1.05;



ms == 0 ? inmax = max(abs(spl0),abs(spl1)) ;


indir = (inmax-inmaxold)  ;inmaxold = inmax;
inthr = 1.2 + distxin*0.05 *1; 

inflt < inmax ? inflt = inmax;
inflt < 0.0000000001 ? inflt = 0.0000000001;


(inmax/inflt) < 0.9 ? (
  fltrelcnt < 100 ? fltrelcnt *= 1.01;
//  fltrelcnt < 100 ? fltrelcnt *= 1.05;
  ):(
  fltrelcnt = 1;
  );

//inflt /= max(0, 1- inmax/inflt) * 0.07 * fltrelcnt * inflt +1;
inflt /= max(0, 1- inmax/inflt) * 0.1 * fltrelcnt * inflt +1;

spl0 *= inboost;
spl1 *= inboost;



infltbst = inflt * inboost;
inbstmax = inmax * inboost;
fltdir = inflt-infltold;
infltold = inflt;
ingold = ing;

// Mid and side:
inatt = 0.1 / (distxin+1);
inrel = 0.00005 + distxin * 0.0001;
inattS = inatt / (distxms+1);
inrelS = inrel + distxms * 0.0001;;


(infltbst*ing) > inthr ? (
//  ing /= ( 0.5 * max(0, (infltbst * ing)-inthr ) + 0.05 * max(0, (infltbst * ing)/inthr -1) ) * (inatt) +1;
//  ing /= ( 0.5 * max(0, (infltbst * ing)-inthr ) + 0.5 * max(0, (infltbst * ing)/inthr -1) ) * (inatt) +1;
  ing /= ( 0.6 * max(0, (infltbst * ing)-inthr )  +  0.3 * max(0, (infltbst * ing)/inthr -1) ) * (inatt) +1;
  ):(
//  ing *= (0.0001 + distxin * 0.0003) * max(0, 1-ing^2) * max(0, 1-(inout/(1/inthr))^3) * max(0, 1-inflt) +1; // Orig
//  ing *= (0.0005 + distxin * 0.0003) * max(0, 1-ing^0.5) * max(0, 1-(inout)^3)  +1;
//  ing *= (0.0003 + distxin * 0.0003) * max(0, 1-ing^2) * max(0, 1-(inout)^2)  +1;
  ing *= ( inrel  ) / ing * max(0, 1-inout^3) * max(0, 1-(inout)^2)  +1; // Openest
  );



ing > 1 ? ing = 1;  ing < 0.01 ? ing = 0.01;
inboost2 = 1 ; 




ms == 0 ? (
  spl0 *= ing * inboost2;
  spl1 *= ing * inboost2;
  );


ms == 1 ? (
  inthrS = inthr * 0.9 + distxms * 0.3;

  infltS < inmaxS ? infltS = inmaxS;
  
  (inmaxS/infltS) < 0.9 ? (
    fltSrelcnt < 100 ? fltSrelcnt *= 1.01;

    ):(
    fltSrelcnt = 1;
    );
  infltS /= max(0, 1- inmaxS/infltS) * 0.07 * fltSrelcnt * infltS +1;
  
  
/*  
  infltS < inmaxS ? infltS = inmaxS;
  
  
  (inmaxS/infltS) < 0.9 ? (
    fltSrelcnt < 100 ? fltSrelcnt *= 1.007 ; 
    ):(
    fltSrelcnt = 1;
    );
  
  infltS /= max(0, 1- inmaxS/infltS) * 0.007 * fltSrelcnt * infltS +1;
*/  
  
  infltSbst = infltS * inboost;
  inbstmaxS = inmaxS * inboost;
  fltSdir = infltS-infltSold;
  infltSold = infltS;
  ingSold = ingS;
  
  
  
  (infltSbst*ingS) > inthrS ? (
    ingS /= ( 0.1 * max(0, (infltSbst * ingS)-inthrS ) + 0.05 * max(0, (infltSbst * ingS)/inthrS -1) ) * (0.2/(distxin+1)) +1;
    ):(
    //ingS *= (0.003  + distxin * 0.001) * max(0, 1-ingS^2) * max(0, 1-(inout)^3) * max(0, 1-infltS) +1;
    ingS *= (0.00005 + distxin * 0.0001) / ingS * max(0, 1-inout^3) * max(0, 1-(inout)^2)  +1;
    
    );
  
  ingS > 1 ? ingS = 1;  ingS < 0.01 ? ingS = 0.01;
  ingS < ing ? ing = ingS;
  inboost2 = 1 ;   
  inlink = 0.6 * 0 ;
//  inlink = 1;
  ingMIN = min(ing, ingS);
  ing_MS = 1-( inlink * (1-ingMIN) + (1-inlink) * (1-ing) );
  ingS_MS = 1-( inlink * (1-ingMIN) + (1-inlink) * (1-ingS) );

  inM = (spl0 + spl1) /2;
  inS = (spl0 - spl1) /2;

  inM *= ing_MS;
  inS *= ingS_MS;
  
  spl0 = inM + inS;
  spl1 = inM - inS;

  );

ms == 2 ? (

  infltS < 0.0000000001 ? infltS = 0.0000000001;
//  noob < 2 ? infltS = 0.00000001;

  inthrS = inthr + distxms * 0.1 ;

  infltS < inmaxS ? infltS = inmaxS;
  
  (inmaxS/infltS) < 0.9 ? (
//    fltSrelcnt < 100 ? fltSrelcnt *= 1.01;
    fltSrelcnt < 100 ? fltSrelcnt *= 1.05;

    ):(
    fltSrelcnt = 1;
    );
  infltS /= max(0, 1- inmaxS/infltS) * 0.07 * fltSrelcnt * infltS +1;
  
  
/*  
  infltS < inmaxS ? infltS = inmaxS;
  
  
  (inmaxS/infltS) < 0.9 ? (
    fltSrelcnt < 100 ? fltSrelcnt *= 1.007 ; 
    ):(
    fltSrelcnt = 1;
    );
  
  infltS /= max(0, 1- inmaxS/infltS) * 0.007 * fltSrelcnt * infltS +1;
*/  
  
  infltSbst = infltS * inboost;
  inbstmaxS = inmaxS * inboost;
  fltSdir = infltS-infltSold;
  infltSold = infltS;
  ingSold = ingS;
  
  
  (infltSbst*ingS) > inthrS ? (
//    ingS /= ( 0.1 * max(0, (infltSbst * ingS)-inthrS ) + 0.05 * max(0, (infltSbst * ingS)/inthrS -1) ) * (0.2/(distxin+1)) +1;
    ingS /= ( 0.6 * max(0, (infltSbst * ingS)-inthrS ) + 0.3 * max(0, (infltSbst * ingS)/inthrS -1) ) * (inattS) +1;
    ):(
    ingS *= (inrelS ) * max(0, 1-ingS^2) * max(0, 1-(inout/(1/inthrS))^3) * max(0, 1-infltS) +1;
    );
  
  ingS > 1 ? ingS = 1;  ingS < 0.01 ? ingS = 0.01;
  ingS < ing ? ing = ingS;
  inboost2 = 1 ;   
  inlink = 0.7 - distxms^0.5 * 0.5 ;
//  inlink = 0.2;
//  inlink = 1;
  ingMIN = min(ing, ingS);
  ing_MS = 1-( inlink * (1-ingMIN) + (1-inlink) * (1-ing) );
  ingS_MS = 1-( inlink * (1-ingMIN) + (1-inlink) * (1-ingS) );

  inM = (spl0 + spl1) /2;
  inS = (spl0 - spl1) /2;

  inM *= ing_MS;
  inS *= ingS_MS;
  
  spl0 = inM + inS;
  spl1 = inM - inS;

  );



testdimmer = 1;
spl0 *=  testdimmer;
spl1 *=  testdimmer;





inout = max(abs(spl0),abs(spl1));

loopmode = 4; 

tmpvol = 1
; tmpvol == 1 ? (
  tmpg = 1 + min(0.0, (-slider1/6)^0.5) + distxg2^0.25 *0.1  ;
  spl0 *= tmpg;
  spl1 *= tmpg;
  );



bufthr = 2; // After this only linear gain reduction, no shaping.


maxspl0 = abs(spl0);
maxtopL = max(maxtopL, maxspl0);
bufferL[bufcnt] = spl0;
spl0 < 0 ? (polL = -1) : (polL = 1);

(polL != polLold) || (bufmaxcntL >= bufSize-1) ? (
  bufstopL = bufcnt ;
  
  maxtopL > 1 ? (
    processL = bufcnt;
    bufstopL-bufstopLold < 0 ? (
      looplenL = bufstopL + bufSize - bufstopLold;
      ):(
      looplenL = bufstopL - bufstopLold;
      );
    loop( looplenL,
      bufL = abs(bufferL[processL]);
      bufmultiL = bufL/maxtopL;
      gainL1 = min(1, bufthr/maxtopL);
      gainL2 = ( bufmultiL^0.5 * bufmultiL + (1-bufmultiL^0.5) * (bufL*gainL1) ) / (bufL*gainL1);
      
      bufferL[processL] *= gainL1 * gainL2;
      processL == 0 ? (
        processL = bufSize - 1;
        ):(
        processL -= 1;
        );      
      );
    polL != polLold ? maxtopL = 0;
    );
  bufmaxcntL = 0;
  
  bufstopLold = bufstopL;
  bufstopL = bufSize -1;
  
  ):(
  bufstopL = bufSize-1 ;
  );

bufmaxcntL += 1;
polLold = polL;







maxspl1 = abs(spl1);
maxtopR = max(maxtopR, maxspl1);
bufcntR = bufcnt + bufSize;
bufferR[bufcntR] = spl1;
spl1 < 0 ? (polR = -1) : (polR = 1);

(polR != polRold) || (bufmaxcntR >= bufSize-1) ? (
  bufstopR = bufcntR ;
  
  maxtopR > 1 ? (
    processR = bufcntR;
    bufstopR-bufstopRold < 0 ? (
      looplenR = bufstopR + bufSize - bufstopRold;
      ):(
      looplenR = bufstopR - bufstopRold;
      );
    loop( looplenR,
      bufR = abs(bufferR[processR]);
      bufmultiR = bufR/maxtopR;
      gainR1 = min(1, bufthr/maxtopL);
      gainR2 = ( bufmultiR^0.5 * bufmultiR + (1-bufmultiR^0.5) * (bufR*gainR1) ) / (bufR*gainR1);
      
      bufferR[processR] *= gainR1 * gainR2;
      processR == bufSize ? (
        processR = bufSize *2 - 1;
        ):(
        processR -= 1;
        );      
      );
    polR != polRold ? maxtopR = 0;
    );
  bufmaxcntR = 0;
  
  bufstopRold = bufstopR;
  bufstopR = bufSize -1;
  
  ):(
  bufstopR = bufSize-1 ;
  );

bufmaxcntR += 1;
polRold = polR;









bufcnt >= (bufSize-1) ? (bufcnt = 0) : (bufcnt += 1);
bufcntR = bufcnt + bufSize;

spl0 = bufferL[bufcnt] ;
spl1 = bufferR[bufcntR] ;










tmpvol = 0
; tmpvol == 1 ? (
  tmpg = 1;
  spl0 *= tmpg;
  spl1 *= tmpg;
  );













loopmode == 10 ? (
  spl0 *= gainL;
  spl1 *= gainR;
  );


softmode = 4;

softmode == 1 ? (
      
    gainexpL = max(0, bufL-thr )^1 * 1 +1;
  gainL = min(bufL, (bufL)^(1/(gainexpL)) ) / bufL;
  spl0 *= gainL;
/*  
  bufmaxR = abs(spl1);
  gainexpR = max(0, bufmaxR-thr )^1 * 1 +1;
  gainR = min(bufmaxR, (bufmaxR)^(1/(gainexpR)) ) / bufmaxR;
  spl1 *= gainR;
*/
  );


softmode == 2 ? (

  maxclipL = (bufL - MIN(1 , (bufL/2)) * MAX(bufL-1 , bufL/2));

  xmultiL = max(0, min(1, maxSpl0old-1));
  xL = xmultiL^max(0.1, 1-xmultiL)^0.4 ; 
  gainL = (bufL - xL * (bufL-maxclipL)) / bufL;
  gainL > 1 ? gainL = 1;  gainL < 0.1 ? gainL = 0.1;
  spl0 *= gainL;



  maxclipR = (bufR - MIN(1 , (bufR/2)) * MAX(bufR-1 , bufR/2));

  xmultiR = max(0, min(1, maxSpl1old-1));
  xR = xmultiR^max(0.1, 1-xmultiR)^0.4 ; 
  gainR = (bufR - xR * (bufR-maxclipR)) / bufR;
  gainR > 1 ? gainR = 1;  gainR < 0.1 ? gainR = 0.1;
  spl1 *= gainR;


  );



softmode == 3 ? (
  outmix = distxout;
  outmax = max(abs(spl0),abs(spl1));
  outsin = sin(outmax * 1.57) / outmax;
  outg = outmix * outsin + (1-outmix) ;
  spl0 *= outg;
  spl1 *= outg;
  );

softmode == 4 ? (
  outmix = distxout * min(1, slider1/(-2));
  outsinL = sin(abs(spl0) * 1.57) / abs(spl0);
  outsinR = sin(abs(spl1) * 1.57) / abs(spl1);
  outgL = outmix * outsinL + (1-outmix) ;
  outgR = outmix * outsinR + (1-outmix) ;
  spl0 *= outgL;
  spl1 *= outgR;
  );


spl0 *= outvol;
spl1 *= outvol;


/*
tmpbuf[tmpbufcnt] = inflt;
tmpbufcnt >= (bufSize-1) ? (
  tmpbufcnt = 0;
  ):(
  tmpbufcnt += 1;
  );
spl1 = tmpbuf[tmpbufcnt];
*/







/*
play_state == 1 && state == 0 ? (
  statecnt += 1;
  statecnt > srate ? (
    state = 1;
    statecnt = 0;
    );
  );
state == 1 ? (
  play_state == 0 ? state = 2;
  );
state == 2 && play_state == 1 ? state = 0;
*/
state == 0 ? (
  statecnt += 1;
  statecnt > srate ? (
    state = 1;
    statecnt = 0;
    );
  );
play_state != play_stateold ? state = 0;
play_stateold = play_state;


rmsoinavg = (abs(spl0)+abs(spl1))/2;
rmsoinmax = max(abs(spl0), abs(spl1));
rmsoin = (rmsoinavg *3 +rmsoinmax)/4;

rmsibnk[rmspos] = rmsiin^2 ;
rmsisum += rmsiin^2;

rmsobnk[rmspos] = rmsoin^2 ;
rmsosum += rmsoin^2;

rmspos += 1;    rmspos_ += 1;

(rmspos >= rmstime -1) && (state > 0) ? (
  rmsgo = 1;

  rmspos = 0;   rmspos_ = 0;
  
  rmsisum -= rmsibnk[rmspos];
  rmsimtr_ = 20 * log10( sqrt(rmsisum/rmstime) ) +3;
  rmsosum -= rmsobnk[rmspos];
  rmsomtr_ = 20 * log10( sqrt(rmsosum/rmstime) ) +3;

  rmsrst += 1;

  ):(
  rmsgo == 1 ? (
    rmsisum -= rmsibnk[rmspos];
    rmsosum -= rmsobnk[rmspos];
    rmspos_ >= (rmslen +1) ? (
      rmsimtr_ = 20 * log10( sqrt(rmsisum/rmstime) ) +3;
      rmsomtr_ = 20 * log10( sqrt(rmsosum/rmstime) ) +3;
      rmspos_ = 0;
      );
    );

  );
rmsrst >= 10 ? (
  rmspos = rmspos_ = rmsisum = rmsosum = rmsrst = rmsgo = 0;
  );





meter_outl_run = abs(spl0);
meter_outr_run = abs(spl1);
meter_outmid_run = (abs(spl0+spl1))/2;

meter_outl_pk = max(meter_outl_pk , meter_outl_run);
meter_outr_pk = max(meter_outr_pk , meter_outr_run);
meter_outmid_pk = max(meter_outmid_pk , meter_outmid_run);




gr_meter_lim_accel = 1.00002;
gr_meter_lim_decay = 1.000007;

mtr1_ =  ing;
mtr1_ < mtr1 ? mtr1 /= gr_meter_lim_accel : mtr1 *= gr_meter_lim_decay;
mtr1 > 1 ? mtr1 = 1;  mtr1 < 0.1 ? mtr1 = 0.1;

mtr2_ =  gainL1^2 * gainL2^2 ;
mtr2_ < mtr2 ? mtr2 = mtr2_ : mtr2 *= gr_meter_lim_decay;
mtr2 > 1 ? mtr2 = 1;  mtr2 < 0.1 ? mtr2 = 0.1;

mtr3_ =  gainR1^2 * gainR2^2;
mtr3_ < mtr3 ? mtr3 = mtr3_ : mtr3 *= gr_meter_lim_decay;
mtr3 > 1 ? mtr3 = 1;  mtr3 < 0.1 ? mtr3 = 0.1;

mtr4_ =  meter_outmid - meter_mid;
mtr4_ < mtr4 ? mtr4 = mtr4_ : mtr4 *= gr_meter_lim_decay;
mtr4 > 1 ? mtr4 = 1;  mtr4 < 0.1 ? mtr4 = 0.1;

fpss += 1;








@gfx 400*r 225*r

//noob < 200 ? (upall = drawall = 1);

gfxsize = 4;
gfxsize == 1 ? (
  fx_w = 400*r;
  fx_h = 225*r;
  );
gfxsize == 2 ? (
  fx_w = min(400*r,gfx_w);
  fx_h = min(225*r,gfx_h);
  );
gfxsize == 3 ? (
  fx_w = 330*r;
  fx_h = 190*r;
  );
gfxsize == 4 ? (
  fx_w = 300*r;
  fx_h = 170*r;
  );


gfx_dest = 30;
gfx_setimgdim(30, -1, -1);   gfx_setimgdim(30, fx_w, fx_h); 


function roundshape(x1 y1 x2 y2 x3 y3 x4 y4 r) (
  gfx_circle(x1+r , y1+r , r ,1,1);
  gfx_circle(x2-r , y2+r , r ,1,1);
  gfx_circle(x3-r , y3-r , r ,1,1);
  gfx_circle(x4+r , y4-r , r ,1,1);
  gfx_triangle(x1,y1+r , x2,y2+r , x3,y3-r , x4,y4-r);
  gfx_triangle(x1+r,y1 , x2-r,y2 , x3-r,y3 , x4+r,y4);
  );



spad = 5*r;
skyh = min(fx_h*0.8 , fx_h - 20*r );

tlt1 = -tlt_gain/6;
tlt1a = abs(tlt1);


// Double-click actions
dblclk == 4 ? (
  lastcap == 1 ? (
    slider1 = 0;
    dblclk = 0;
    );
  lastcap == 2 ? (
    slider2 = 6;
    upsaw = 1;
    dblclk = 0;
    );
  lastcap == 3 ? (
    slider12 = 0;
    
    slider_automate(slider12);
    dblclk = 0;
    );
  lastcap == 4 ? (
    slider20 = -0.1;
    slider_automate(slider20);
    dblclk = 0;
    drawceil = 1;
    );
  
  lastcap == 40 ? (
    slider20 = 0;
    txt = 4;
    slider_automate(slider20);
    dblclk = 0;
    );
  lastcap == 43 ? (
    slider20 = -3;
    txt = 4;
    slider_automate(slider20);
    dblclk = 0;
    );
  
  lastcap == 46 ? (
    slider20 = -6;
    txt = 4;
    slider_automate(slider20);
    dblclk = 0;
    );
  
  lastcap == 49 ? (
    slider20 = -9;
    txt = 4;
    slider_automate(slider20);
    dblclk = 0;
    );
  
  lastcap == 412 ? (
    slider20 = -12;
    txt = 4;
    slider_automate(slider20);
    dblclk = 0;
    );
  );
    


stmin = -20;

/*
slider2 != slider2old ? (
  slider2 = sd;
  slider_automate(slider2);
  
  upsky = upgrass = upsawtooth = 1; 
  slider2old = slider2;
  );
*/
/*sf != slider12old ? (
  sf = slider12;
  up6 = 1;
  upflash = 1;
  drawflash = 1;
  slider_automate(slider12);
  );
*/




gfx_w != gfx_wold ? (drawall = 1; );   gfx_wold = gfx_w;
gfx_h != gfx_hold ? (drawall = 1; );   gfx_hold = gfx_h;


drawall == 1 ? (
  drawcloud = drawflash = 1;
  drawmount = 1;
  drawceil = 1;
  drawall = 0;
  upall = 1;
  );
upall == 1 ? (
  upcloud = upgrass = upmeter = upsaw = upsawtooth = upsky = upstars = drawceil = drawflash = uptilt = 1;
  upall = 0;
  );
  
  

upsky == 1 ? (
  gfx_dest = 1;   gfx_mode = 1;
  gfx_setimgdim(1, -1, -1);   gfx_setimgdim(1, fx_w, fx_h); 
  sbri = ((-st)/(-stmin))^0.6 *0.6 ;
  dred = (sd/100 )^0.8 *0.6 * (min(0.3,sbri*3) + 0.7);
  gfx_x = gfx_y = 0;     


  w = fx_w/2;
  h = fx_h;
  skypalette = 3;
  skypalette == 1 ? (
    rmin = sbri*0.2 + dred^0.5*0.3;
    rmax = sbri*0.3 + dred^0.8*1;
    gmin = sbri*0.5 - dred*0.4;
    gmax = sbri*0.7 - dred*0.0;
    bmin = 0.1 + sbri*0.5 - dred*0.4;
    bmax = 0.3 + sbri*0.7 - dred^0.8*1;
    amin = 0.8 + sbri*0.5 - dred*0.2;
    amax = 0.8 + sbri*1.1 - dred*0.3;
    ry = dred^0.9*0.7;
    gy = (0.1+dred*sbri*0.5);
    by = (0.5*sbri -dred*1 - sbri*dred*2);
    ay = (0.3+sbri*1 - dred*0.0);
    );
  skypalette == 2 ? (      rmin = 0.05 - sbri + dred*1 + dred*sbri*3;
    rmax = dred*0.2 + dred*sbri*0.0;
    gmin = sbri*0.4 - dred*0.5 + dred*sbri*0.1;
    gmax = 0.1 + sbri*0.5 - dred*0.5 - dred*sbri*1;
    bmin = 0.2 + sbri*0.8 - dred*0.4 - dred*sbri*2;
    bmax = 0.5 + sbri*0.8 - dred*3 - dred*sbri;
  
    amin = 0.7 + sbri*1.2 - dred*0.4 -dred*sbri;
    amax = 0.7 + sbri*1.0 + dred*0.0 ;
    ry = dred + dred*sbri*0.8;
    gy = sbri*0.7 + dred*0.3 - dred*sbri*0.5;
    by = sbri*0.8 - dred*1 - dred*sbri*0.8;
    ay = 0.2 + sbri*0.5;
    );
  skypalette == 3 ? (  
    rmin = 0.0 + sbri*0 + dred*0.6 - dred*sbri*0.0;
    rmax = 0.0 + sbri*0.1 + dred*0.6 + dred*sbri*0.5;
    gmin = 0.1 + sbri*0.3 - dred*0.0 - dred*sbri*1;
    gmax = 0.1 + sbri*0.6 - dred*0.0 - dred*sbri*1.2;
    bmin = 0.5 + sbri*0.0 - dred*1 + dred*sbri*0;
    bmax = 0.7 + sbri*0.1 - dred*1.5 + dred*sbri*0;
  
    amin = 0.8 + sbri*0.6 - dred*0.1 + dred*sbri*0;
    amax = 0.8 + sbri*0.7 + dred*0.1 + dred*sbri*0;
    ry = 0.0 + sbri*0.3 + dred*0.7 + dred*sbri*0.0;
    gy = 0.05 + sbri*0.1 - dred*0.5 + dred*sbri*0.4;
    by = 0.05 - sbri*0.0 - dred*0.5 - dred*sbri*0.5;
    ay = 0.1 + sbri*0.5 + dred*0.1 + dred*sbri*1;
    );

  gfx_gradrect(0,0,fx_w/2,fx_h,
  rmin,gmin,bmin,amin,  (rmax-rmin)/w,(gmax-gmin)/w,(bmax-bmin)/w,(amax-amin)/w,   ry/h,gy/h,by/h,ay/h);
/*  sbri*0.1+dred*0.2 , sbri*0.4-dred*0.35 , 0.3+sbri*0.3 , 0.6+sbri*1.1 ,
  (sbri*0.2+dred*0.6)/w , (sbri*0.5+dred*0.1)/w , (0.4+sbri*0.5 -dred)/w , (dred*0.1)/w ,
  (dred*2)/h , (0.1+dred*0.4)/h , (0.1*sbri -dred*1)/h , (0.3+sbri*1 - dred*0.5)/h );
*/

  gfx_gradrect(fx_w/2,0,fx_w/2,fx_h,
  rmax,gmax,bmax,amax,  (rmin-rmax)/w,(gmin-gmax)/w,(bmin-bmax)/w,(amin-amax)/w,   ry/h,gy/h,by/h,ay/h);
/*  sbri*0.3+dred*0.8 , sbri*0.9-dred*0.25 , 0.7+sbri*0.8-dred , 0.6+sbri*1.1+dred*0.1 ,
  -(sbri*0.2+dred*0.6)/w , -(sbri*0.5+dred*0.1)/w , -(0.4+sbri*0.5 -dred)/w , -(dred*0.1)/w ,
  (dred*2)/h , (0.1+dred*0.4)/h , (0.1*sbri -dred*1)/h , (0.3+sbri*1 - dred*0.5)/h );
*/






  gfx_mode = 1;
  upgrass = 1;

  );


gfx_dest = 30;  gfx_mode = 1;
gfx_x = gfx_y = 0;   gfx_blit(1,1,0);










starmode = 2;   starmode == 1 ? (
    upstars == 1 ? (
    gfx_dest = 3;
    gfx_setimgdim(3, -1, -1);   gfx_setimgdim(3, fx_w, fx_h/2); 
    loop( 20,
      gfx_x = rand(fx_w);
      gfx_y = ( rand(skyh) /skyh)^3 *(skyh-spad-25*r) + spad*2;
      randradi = rand(1*r);
      gfx_set(1,1,1, 1- rand(1)*0.3 -randradi*0.3 ,0);
      gfx_circle(gfx_x,gfx_y,randradi,1,1 );
      );
    upstars = 0;
    );
      gfx_dest = 30;  
  gfx_x = gfx_y = 0;
  gfx_a = (1-sbri)^3 ;
  starspeed = 0.09 / max(1,fxratx);
    starspeed -= (starx/fx_w/2)^20 * 0.9 * starspeed + (1-starx/fx_w/2)^20 * 0.9 * starspeed;
    stardir == 0 ? (
    starx >= fx_w/2-4 ? stardir = -1;
    starx += starspeed;
    ):(
    starx <= 4 ? stardir = 0;
    starx -= starspeed;
    );
      gfx_a = 1 - sbri*1.5; gfx_mode = 1;
  gfx_blit(3,1, (starx)/fx_w - 0.25 , starx,0,fx_w/2,fx_h/2 , 0,0,fx_w,fx_h );
  );

starmode == 2 ? (
    upstars == 1 ? (
    gfx_dest = 3;
    gfx_setimgdim(3, -1, -1);   gfx_setimgdim(3, gfx_w*2, gfx_h/2); 
    loop( 20,
      gfx_x = rand(gfx_w*2);
      gfx_y = ( rand(1)^2 * gfx_h/2 );
      randradi = rand(3*r);
      gfx_set(1,1,1, 1- rand(1)*0.3 -randradi*0.15 ,0);
      gfx_circle(gfx_x,gfx_y,randradi,1,1 );
      );
    upstars = 0;
    );
      gfx_dest = -1;  
  gfx_x = gfx_y = 0;
  gfx_a = (1-sbri)^3 ;
  starspeed = 0.09 ;
    starspeed -= (starx/gfx_w/2)^20 * 0.9 * starspeed + (1-starx/gfx_w/2)^20 * 0.9 * starspeed;
    stardir == 0 ? (
    starx >= gfx_w/2-4 ? stardir = -1;
    starx += starspeed;
    ):(
    starx <= 4 ? stardir = 0;
    starx -= starspeed;
    );
    );



upsky == 1 ? (
  gfx_dest = 9;   gfx_mode = 1;
  gfx_setimgdim(9, -1, -1);   gfx_setimgdim(9, 150*r, 150*r); 
  gfx_set(1,1,1,1,1);
  
  gfx_x = 2*r;
  gfx_y = spad*4;
  gfx_setfont(3,"Trebuchet MS",36*r);
  gfx_drawstr("Sky");
  gfx_y += gfx_texth * 1;
  gfx_x = 0;
  gfx_setfont(4,"Trebuchet MS",16*r, 'b');
  gfx_drawstr("       is
  The Limit");
  gfx_x -= gfx_texth * 1.5;
  gfx_y = spad * 3.5;
    gfx_setfont(4,"Trebuchet MS",10*r, 'b');
  gfx_set(1,1,1,2,1);
  
  gfx_drawstr(ver);
  upsky = 0;
  
  gfx_dest = 19;   gfx_mode = 0;
  gfx_setimgdim(19, -1, -1);   gfx_setimgdim(19, gfx_w, gfx_h); 
  gfx_set(1,1,1,1,0);
  gfx_x = gfx_y = 0;
  gfx_w < (400*r) ? (titw = gfx_w*0.3) : (titw = 40*r+gfx_w*0.2);
  gfx_h < (100*r) ? (tith = gfx_h) : (tith = 100*r+(gfx_h-100*r)*0.2);
  titw > tith ? titw = tith;
  tith > titw ? tith = titw;
  titx = gfx_w*0.12 + max(0, gfx_w*0.1-80);
  gfx_blit(9,1,0, 0,0,100*r,100*r  ,  titx,gfx_h*0.05,titw,tith);
  );

/*
gfx_dest = 30;
gfx_set(1,1,1,0.3,1);
gfx_x = gfx_y = 0;
gfx_blit(9,0.2 + fx_w/2500 + fx_h/2000,0,
  spad+meter_inw,0,fx_w,fx_h  ,    spad+meter_inw,0  );
*/




upgrass == 1 ? (
  gfx_dest = 2;
  gfx_setimgdim(2, -1, -1);   gfx_setimgdim(2, fx_w, fx_h); 
  grash = fx_h - skyh;
  grasy = skyh;

  gfx_set(1,1,1,1,0);
  gfx_gradrect(0,fx_h/2 , fx_w,fx_h
  ,  dred*0.2+sbri*dred*0.6 , 0.13 +sbri*0.4 -dred*0.1 -sbri*dred*0.1,0,1 ,  0,0,0,0,  
  (-dred*0.3*6)/grasy,(-0.5-dred*sbri*0.6-sbri*0.6)/grasy,0,(sbri*dred*0.4)/grasy);

   
  upgrass = 0;
  upmount = 1;
  );



tltltl = tlt_gain - tlt_pls;

drawmount > 0 ? (
  
  gfx_dest = 20;
  gfx_setimgdim(20, -1, -1);   gfx_setimgdim(20, fx_w, fx_h); 
  gfx_set(0.2,0.5,0,1,0);
  x = 0;
  while( x < (fx_w))(
    mtsize = rand(1) * (10 + fx_h/10)*r;
    gfx_triangle(x,grasy , x+mtsize,grasy - mtsize , x+mtsize*2,grasy);
    x += mtsize*1.5;
    );
  gfx_x = 0;  gfx_y = fx_h/2;
  gfx_dest = 21;
  gfx_setimgdim(21, -1, -1);   gfx_setimgdim(21, fx_w, fx_h); 
  gfx_set(0.2,0.5,0,1,0);
  x = 0;
  while( x < (fx_w))(
    mtsize = rand(1) * (20 + fx_h/20)*r;
    gfx_triangle(x,grasy , x+mtsize,grasy - mtsize , x+mtsize*2,grasy);
    x += mtsize*1.5;
    );
  gfx_x = 0;  gfx_y = fx_h/2;

  
  drawmount -= 1;
  upmount = 1;
  );

upmount ? (
  sd1 = (sd/100)^0.8;
  gfx_dest = 23;   gfx_setimgdim(23, -1, -1);   gfx_setimgdim(23, fx_w, fx_h); 
  
  gfx_set(1,1,1,0.7,0);
  gfx_blit(20,1,0, 0,0,fx_w,skyh , -fx_w*0.1,(1-sd1) * (skyh),fx_w*1.2,(sd1)*skyh);
  gfx_set(1,1,1,1,0);
  gfx_blit(21,1,0, 0,0,fx_w,skyh , -fx_w*0.1,(1-sd1) * (skyh),fx_w*1.2,(sd1)*skyh);
  upmount = 0;
  );

/*
gfx_x = 0;  gfx_y = fx_h/2;
gfx_blurto(fx_w*2,fx_h);
gfx_x = 0;  gfx_y = fx_h/2;
gfx_blurto(fx_w*2,fx_h);
gfx_x = 0;  gfx_y = fx_h/2;
gfx_blurto(fx_w*2,fx_h);
*/

// Blit mounts
gfx_dest = 30;
gfx_set(1,1,0,-1000,1);
gfx_blit(23,1, (abs(tlt_angle/6)^0.8/abs(tlt_angle/6))*tlt_angle* (-0.026)
, 0,0,fx_w,fx_h , -fx_w*0.1,r,fx_w*1.2,fx_h
,0,tlt1a*fx_h*0.01);
gfx_x=gfx_y=0;
gfx_set(0,0,0,0.4 + sbri*0.7 - dred*0.2 - sbri*dred*0.4 ,0);
gfx_blit(23,1, (abs(tlt_angle/6)^0.8/abs(tlt_angle/6))*tlt_angle* (-0.026) 
, 0,0,fx_w,fx_h , -fx_w*0.1,r,fx_w*1.2,fx_h
,0,tlt1a*fx_h*0.01);

// Blit grass
gfx_dest = 30;
gfx_set(1,1,1,1,0);
gfx_blit(2,1,(abs(tlt_angle/6)^0.8/abs(tlt_angle/6))*tlt_angle* (-0.026) ,
0,0 , fx_w,fx_h  ,  -fx_w*0.1, skyh-fx_h/2 , fx_w*1.2,fx_h  ,0,tlt1a*fx_h*0.01);





sawtype == 0 ? sawtype = 2;        // 1=saw, 2=zippo
//upsaw = 1;
sawtype == 1 ? (
  upsaw > 0 ? (
    gfx_dest = 5;   gfx_mode = 0;
    gfx_setimgdim(5, -1, -1);   gfx_setimgdim(5, 200*r, 100*r); 
    gfx_set(1,1,1,1,0);
   
    sawhandleL = 10*r;
    sawhandleR = sawhandleL + 30*r;
    sawendR = sawhandleL + 80*r;
    sawtop = 10*r;
    sawbot = 40*r;
    sawmid = sawtop + (sawbot-sawtop)*0.25;
    sawhandleW = sawhandleR-sawhandleL;
    sawH = sawbot-sawtop;
    sawW = sawendR-sawhandleL;
  // Saw blade
      gfx_set(0.5,0.55,0.65,1,0);
    gfx_rect(sawhandleR-2*r,sawtop , sawW-sawhandleW*0.95 , sawmid-sawtop+r);
    gfx_triangle(sawendR-1*r,sawmid , sawhandleR-7*r,sawbot-4*r , sawhandleR-7*r,sawmid );
  
  // Saw handle
    gfx_set(0.85,0.9,0.9,1);
  
  
    roundshape(sawhandleL + 0.25*sawhandleW,sawtop-1.5*r , sawhandleR-r,sawtop-1.5*r
     , sawhandleR-sawhandleW*0.3,sawbot , sawhandleL-1*r,sawbot  ,  2*r);
  
    gfx_rect(sawhandleL+(sawhandleW)*0.18 , sawtop-1.5*r , sawhandleW/3 , sawH*0.8);
  
  
    gfx_triangle(sawhandleL+(sawhandleW)*0.18,sawtop-1.5*r , sawhandleR-r,sawtop-1.5*r
     , sawhandleR-r,sawtop+(sawbot-sawtop)*0.48 , sawhandleR-sawhandleW*0.35,sawbot);
  
      gfx_set(0.4,0.4,0.4,1);
    roundshape(sawhandleL+sawhandleW*0.4,sawtop+5*r , sawhandleR-sawhandleW*0.3,sawtop+5*r
    , sawhandleR-sawhandleW*0.5,sawbot-4*r , sawhandleL+7*r,sawbot-4*r ,2*r);
  /*
    gfx_circle(sawhandleL+sawhandleW*(0.5+0.1*sawH/70),sawtop + (sawH) * 0.26 , (sawhandleW)*0.17 ,1,1);  
    gfx_circle(sawhandleL+sawhandleW*(0.45+0.05*sawH/70),sawtop + (sawH) * 0.48 , (sawhandleW)*0.17 ,1,1);  
    gfx_circle(sawhandleL+(sawhandleW*0.4),sawtop + (sawH) * 0.7 , (sawhandleW)*0.17 ,1,1);
    gfx_triangle(sawhandleR-(sawhandleW)*0.74,sawtop+sawH*0.63 , sawhandleR-(sawhandleW)*0.53,sawtop+sawH*0.2 , 
    sawhandleR-(sawhandleW)*0.22,sawtop+sawH*0.26 , sawhandleR-(sawhandleW)*0.44,sawtop+sawH*0.71 );
  */
    upsaw = 0;
    upsawtooth = 1;
  
    gfx_dest = 15;   gfx_mode = 0;
    gfx_setimgdim(15, -1, -1);   gfx_setimgdim(15, 200*r, 100*r); 
    gfx_set(1,1,1,1,0);
    gfx_blit(5,1,0);
  
    );
  
  
  
  upsawtooth == 1 ? (
    upsawtooth = 0;
    gfx_dest = 15;   gfx_mode = 0;   gfx_x=gfx_y=0;
    gfx_setimgdim(15, -1, -1);   gfx_setimgdim(15, 200*r, 100*r); 
    gfx_set(1,1,1,1,0);
    gfx_blit(5,1,0);
    gfx_set(0.5,0.55,0.65,1);
    xper = (sawendR-(sawhandleR-7*r))/6;
    yper = ((sawbot-4*r) - sawmid)/6;
    x = sawendR-1*r;
    y = sawmid;
    sawtooth = (slider2/100)^0.8;
    z = 3*r * distx;
  
  
  
    loop(6,
      gfx_triangle(x,y , x-xper,y+yper ,  x-xper*0.4+sawtooth*2*r+z, y+yper*0.5 + sawtooth*16*r - abs(z-1*r) );
      x -= xper;
      y += yper;
      z -= 0.5*r *distx;
      );
    sawblur = 1;
    );
  
  sawblur == 1 ? (
    slider2old == slider2 ? (
      loop(4,
        gfx_x = sawhandleL - 5*r;
        gfx_y = sawtop - 5*r;
        gfx_blurto(sawendR + 5*r , sawbot + 10*r);
        );
      sawblur = 0;
      );
    );
  
  );



// Draw Zippo
sawtype == 2 ? (
  upsaw > 0 ? ( // Was: upsaw == 1 ?
    
    distx == 0 ? (
      cap_mode == 2 ? (
        helpcnt > 5 ? zippopen = 1 : zippopen = 0;
        ):(
        zippopen = 0;
        );
      ):(
      zippopen = 1;
      );
    
  
    gfx_dest = 5;   gfx_mode = 0;
    gfx_setimgdim(5, -1, -1);   gfx_setimgdim(5, 100*r, 100*r); 
    gfx_set(0.9,0.9,0.9,1,0);
    
    // Closed zippo
    zippopen == 0 ? (
      zbx1 = 30*r;
      zbx2 = 50*r;
      zby1 = 40*r;
      zbymid = 50*r;
      zby2 = 70*r;
      gfx_set(0.9,0.9,0.9,1,0);
  
      roundshape(zbx1,zby1 , zbx2,zby1 , zbx2,zby2 , zbx1,zby2 , 2*r);
      gfx_circle(zbx1+r,zbymid , 2*r , 1,1);
      gfx_set(0.5,0.5,0.5,0.8,0);
      gfx_line(zbx1-r,zbymid , zbx2,zbymid);
      ):(
    
  
      // Open zippo
      zcx1 = 10*r;
      zcx2 = 15*r;
      zcx3 = 25*r;
      zcy1 = 40*r;
      zcy2 = 60*r;
      zbx1 = 30*r;
      zbx2 = 50*r;
      zby1 = 50*r;
      zby2 = 70*r;
      
      //Cap
  //    roundshape(zcx1+5*r,zcy1 , zbx1,zby1 , zbx1-5*r,zcy2 , zcx1,zcy2-5*r  , 2*r);
      gfx_triangle(zcx2,zcy1 , zbx1,zby1 , zcx3,zcy2 , zcx1,zcy2-(zby1-zcy1));
      //Body
      roundshape(zbx1,zby1 , zbx2,zby1 , zbx2,zby2 , zbx1,zby2 , 3*r);
      gfx_rect(zbx1,zby1 , zbx2-zbx1,zby2-zby1 ,1,1);
      //Nib
      gfx_set(0.5,0.5,0.5);
      gfx_rect(zfx-4*r , zby1-3*r , 8*r,3*r , 1,1);
      //Flame
      distx > 0 ? (
        zfx = (zbx1+zbx2)/2;
        zfr = (3*r + distx*10*r) ;//* (0.9+rand(1)/10);
        zfy2 = zby1-4*r-zfr*0.5;
        zfy1 = min(zfy2-zfr , zfy2-zfr*(1.3 + rand(distx)) ); // Top edge y
        zfymin = zfy2-zfr*(1.5 + distx);            // Highest top edge y
        zftyrand = (zfy1-zfymin)/(zfy2-zfymin);   // Flame h inv 1...0
  //      zfrand = zfx-5*r-distx*5*r+rand(10+distx*10)*r;
        zftxmin = zfx-zfr*(distx+0.5);            // Flame top min x
        zftxrand = rand(zfr*(1+2*distx));         // Flame top x range
        zfrand = (zftxrand*2) / (zfr *(1+2*distx)) - 1; // Flame top x range -1...1
        zfrand1 = zfrand/2 + 0.5;                       // -"- 0...1
        gfx_set(1,0.85+rand(1)/10,0,1);
        gfx_circle(zfx,zfy2  ,  zfr  ,  1,1  );
  
  //      gfx_set(0,1,0.3,1); // tmp
        gfx_triangle(zfx-zfr*(1- max(0,zfrand)^1.8 *0.7 ) , zfy2-max(0,zfrand)*zfr*0.6 - max(0,1-zftyrand)^0.22 *(zfr*0.4) *zfrand1
          , zftxmin+zftxrand,zfy1
           , zfx+zfr*(1- max(0,-zfrand)^1.8 *0.7 ) , zfy2-max(0,-zfrand)*zfr*0.6 - max(0,1-zftyrand)^0.22 * (zfr*0.4) *(1-zfrand1) );
      
        gfx_set(1,0.6,0, 0.4 ,0);
        gfx_arc(zfx+r+zfr*(0.9-abs(zfrand)^2*0.1),zfy2 +zfrand*zfr*0.5 , zfr*(1.3 - zftyrand*0.2) , 4.5+zfrand*0.4 , 5.3+(zfrand)*0.6 );
        gfx_arc(zfx-zfr*(0.9-abs(zfrand)^2*0.1),zfy2 -zfrand*zfr*0.5 , zfr*(1.3 - zftyrand*0.2) , 1.7+zfrand*0.4 , 1.0+(zfrand)*0.6 );
        gfx_a = 0.2;
        gfx_circle(zfx,zfy2 , zfr*0.4 , 1,1);
        );
      );
    
    xl = zbx1 + 2*r;
    x = zbx2 - 2*r;
    y = zby2 - 2*r;
    gfx_set(0.6,0.6,0.6,0.5,0);
    while(y > 52*r)(
      gfx_line(xl,y,x,y);
      x -= (x-xl) * 0.2;
      y -= 1;
      gfx_a -= 0.03;
      );

  
    loop(4,
      gfx_x = gfx_y = 0;
      gfx_blurto(100*r,100*r);
      );
/*    
    gfx_dest = 30;
    gfx_set(1,1,1,0.9,0);
    gfx_blit(5,1,0  ,  0,0,100*r,100*r  ,  sawx,sawy);
*/    
    upsaw -= 1;
    upsawtooth = 0;
    );
  );




/*
up6 == 1 ? (
  gfx_dest = 7;  gfx_mode = 0;  
  gfx_setimgdim(7, -1, -1);   gfx_setimgdim(7, fx_w*2, fx_h*2); 
  gfx_x = gfx_y = 0;   gfx_blit(6,1,0);
  up6 = 0;
  drawflash = 1;
  );
*/
drawflash == 1 ? (
  gfx_dest = 4;   gfx_mode = 0;
  gfx_setimgdim(4, -1, -1);   gfx_setimgdim(4, 80*r, 50*r); 

  tlt1of = tlt1+0.4;
  tlt1aof = abs(tlt1of);
  
  fly1=10*r;
  fly2=fly1+10*r;
  flx1=5*r + max(0,tlt1of)*9*r + min(0,tlt1of)*(3)*r;
  flx2=flx1+15*r;
  flx3=flx2+15*r;
  flx4=flx3+5*r;
  gfx_set(0.8- tlt1*0.2 , 0.65- tlt1*0.4 , 0.2- tlt1*0.8 ,1);
  gfx_circle(flx4 - 3*r, (fly1+fly2)/2 , 6*r, antialias);
  gfx_circle(flx4 - 3*r, (fly1+fly2)/2 , 6*r, 1,1);
  gfx_line(flx4+10*r , fly1 , flx4+16*r , (fly1-2*r) );
  gfx_line(flx4+10*r , fly1-1 , flx4+16*r , (fly1-2*r) -1);
  gfx_line(flx4+11*r , (fly1+fly2)/2 , flx4+18*r , (fly1+fly2)/2 );
  gfx_line(flx4+11*r , (fly1+fly2)/2-1 , flx4+18*r , (fly1+fly2)/2 -1);
  gfx_line(flx4+10*r , fly2 , flx4+16*r , (fly2+2*r) );
  gfx_line(flx4+10*r , fly2-1 , flx4+16*r , (fly2+2*r)-1 );
  gfx_set(0.8,0.85,0.9,1);
  gfx_rect(flx1,fly1,flx3-flx1,fly2-fly1 , 2*r);
  gfx_triangle(flx2,(fly1+fly2)/2 , flx4,fly1-4*r , flx4,fly2+3*r);
  gfx_set(0.4,0.45,0.55,1);
    y = fly2 - 1*r;
  z = 0.5*r;
  gfx_a += 0.1;
  loop(6,
    gfx_line(flx1 + 2*r , y , flx3 - 5*r , y);
    gfx_line(flx3-3*r,y , flx3+5*r, y+3*r-(fly2-r-y)*0.7 );
    y -= z;
    z += 0.5*r;
    gfx_a -= 0.15;
    );
  gfx_a = 1;
  gfx_line(flx4,fly1-4*r , flx4,fly2+3*r);
  
  loop(4,
    gfx_x = gfx_y = 0;
    gfx_blurto(flx4 +5*r , fly2 + 10*r);
    );
/*  
  flmx1 = flx1/2 - 5*r;
  flmx2 = flx4/2 + 5*r;
  flmy1 = fly1/2 - 7*r;
  flmy2 = fly2/2 + 7*r;
*/
  drawflash = 0;
  upflash = 0;
  );
  

drawceil == 1 ? (
  gfx_dest = 13;  gfx_mode = 0;      gfx_setimgdim(13, -1, -1);   gfx_setimgdim(13, 60*r, 50*r); 
  gfx_x = gfx_y = 0;
  gfx_set(1,1,1,1);
  roundshape(r,r , 23*r,r , 23*r,10*r , r,10*r , 3*r);
  gfx_triangle(20*r,r , 28*r,r , 20*r,7*r);
  gfx_line(25*r,r , 55*r,r);
  gfx_line(25*r,r+1 , 55*r,r+1);
  gfx_set(0.3,0.3,0.3,0.5);
//  gfx_line(3*r,4*r-1 , 18*r,4*r-1);
//  gfx_line(3*r,4*r , 18*r,4*r);

  gfx_rect(4*r,5*r , 16*r,2*r);

/*
  gfx_a = 0;
  a = 0.1;
  ys = 10*r;
  z = 1;
  while(y > r)(
    gfx_line(5*r - gfx_a*2*r,ys , 19*r + gfx_a*2*r,ys);
    ys -= (z);
    gfx_a += a;
    (ys == 6*r) ? (a *= -1);
    );
*/

  gfx_x = gfx_y = 0;  gfx_a = 1;
  gfx_blurto(60*r,50*r);
  gfx_x = gfx_y = 0;  gfx_a = 1;
  gfx_blurto(60*r,50*r);
  drawceil = 0;
  );



  



uptilt == 1 ? (
  gfx_dest = 8;  gfx_mode = 1;      gfx_setimgdim(8, -1, -1);   gfx_setimgdim(8, fx_w*2, fx_h*2); 
  gfx_x = gfx_y = 0;
  gfx_set(1,1,1,1,0);
  gfx_blit(6,1,(tlt1a^0.8/tlt1a)*tlt1*0.15    ,0,0,fx_w*2,fx_h*2 , -fx_w/2,-fx_h/2,fx_w*2,fx_h*2  ,  0,tlt1a*fx_h*0.01
      );
  
  uptilt = 0;   );




gfx_dest = 30;
sf = slider12 ;
sbricast = sbri/2 +1;
gfx_gradrect(0,0,fx_w,fx_h , 0,0,0,max(0,sf)*0.2 * sbricast + min(0,sf)*0.2 * (1/sbricast)   , 0,0,0, (min(0,-sf)*0.4)/(fx_w) + (max(0,-sf)*0.4)/(fx_w)  ,  0,0,0,0);  








drawcloud == 1 ? (
  gfxh = max(100*r , fx_h); 
  gfx_dest = 11;   gfx_mode = 0;
  gfx_setimgdim(11, -1, -1);   gfx_setimgdim(11, fx_w, fx_h); 
    cw = max(50*r, min(fx_w/3, 100*r)  );
  cxl = fx_w/2 - cw/2;
  cxr = fx_w/2 + cw/2;
  cx3 = cxl + cw/6;
  cx4 = cxr - cw/5;
  ch = max(20*r, min(gfxh/3, 50*r)  );
  ctop = ch*0.1;  cbot = skyh - ch * 1.7;
  cyr = cbot - ctop ;   cy1 = ctop;
  cy2 = cy1 + ch;
  cy3 = cy1+ch*0.55;
      
  
    gfx_set(0.9,0.9,0.9,1);
      gfx_rect(cx3+1,cy3+5,cw/3*2-2,cy2-cy3-4);
  gfx_circle(cx3,(cy2+cy3)/2-1, (cy2-cy3)/2, 1 , 1 );   gfx_circle(cx4,cy3+(cy2-cy3)/3-1, (cy2-cy3)/3*2 , 1 , 1 );   gfx_circle( cx4-cw*0.25,cy3, (cy2-cy3)*0.8, 1 , 1 );   gfx_circle( cx3+cw*0.15,cy3+(cy2-cy3)*0.13, (cy2-cy3)*0.4, 1 , 1 );           gfx_set(0.8,0.85,0.95,1);
    
    xa = cx3 + (cx4-cx3)*0.1;
  xb = cx4;
  gfx_y = cy2-2*r;
  cnt = 0;
    gfx_set(0.7,0.75,0.85,1);
  loop(22,
    gfx_x = xa;
    gfx_lineto( xb , gfx_y );
    gfx_y -= 1;
    xa += 1 + (xa-cx3)/12;
            xb += 4 / (cnt/2+0.7);
    gfx_a *= 0.9;
    cnt +=1;
    );
  
    loop(5,
    gfx_x = cxl;  gfx_y = cy1;
    gfx_blurto(cxr,cy2+10);
    );
  drawcloud = 0;
  upcloud = 1;
  );
upcloud == 1 ? (
  gfx_dest = 12;  gfx_mode = 1;
  gfx_setimgdim(12, -1, -1);   gfx_setimgdim(12, fx_w, fx_h); 
  
  gfx_x = gfx_y = 0;
    gfx_a = 0.95;
  gfx_mode = 0;
  cloudscale = max(1,min(2,(fx_h*fx_w)/1000000));
  gfx_blit(11,1,0);
  upcloud = 0;
  );
gfx_dest = 30;  gfx_mode = 1;
gfx_x = 0;
cyr = fx_h*0.5;
cloudy = min(1, (-st)/(-stmin)) * cyr ;gfx_a = 0.95;
gfx_mode = 0;
cloudscale = max(1,min(2,(fx_h*fx_w)/1000000));
cloudratio = min(2, (gfx_w/gfx_h) / (fx_w/fx_h) ) * 0.07;
//gfx_blit(12,1,0, (cloudscale-1)*fx_w*0.25,0,fx_w-(cloudscale-1)*(fx_w/2),80*r  ,  fx_w*(0.1 + cloudratio),cloudy,fx_w*(0.8-cloudratio*2),60*r);
gfx_blit(12,1,0, (cloudscale-1)*fx_w*0.25,0,fx_w-(cloudscale-1)*(fx_w/2),80*r
  ,  fx_w*(0.1 + cloudratio) , cloudy+max(0,0.03-cloudratio)*100*8*r-max(0,fxratx/fxraty-3)*2*r
  ,fx_w*(0.8-cloudratio*2) , 60*r-max(0,0.03-cloudratio)*100*20*r+max(0,fxratx/fxraty-3)*5*r);


// Blit Ceiling
gfx_dest = 30;
cypos = ( - log10(   2^( slider20 /6)  )) * yscale  *1.18;
ceily = min( meter_lowy , cypos * max(1 , 2-cypos/meter_lowy)  );
gfx_set(1,1,1,0.8,0);
gfx_blit(13,1,0, 0,0,60*r,50*r , fx_w-61*r,4*r+ ceily ,60*r,50*r);

// Blit Flashlight
//upflash = 1;
//upflash == 1 ? (
gfx_dest = 30;  gfx_mode = 0;
gfx_x = gfx_y = 0;
gfx_a = 1;
gfx_blit(4,1,(tlt1a^0.8/tlt1a)*tlt1*0.15   ,0,0,80*r,50*r  ,  
//  ,20*r ,0,fx_w*2,fx_h*2  ,  -fx_w*0.2,-fx_h/2 + 20*r,fx_w*1.5,fx_h*2 -30*r ,  0,tlt1a*fx_h*0.01
fx_w*(0.68 + 0.02 * max(0,-tlt1)^0.5 + 0.03 * min(0,- (tlt1^0.8)) ) + (fxratx-1) * 5*r,  // X
fx_h*(0.72 - 0.1 * -tlt1)  +  (fxraty-1) * 2.5*r  -  20*r * max(0, -(fxraty-1)) - (fxratx-1) * 4*r + (3-abs(fxraty-3))/2 * r  // Y
, 40*r + (40*r) / (fxratx+0.5), 40*r/fxraty + (15*r)*fxratx,      0,0
);
//  upflash = 0;
//  );





meter_decay = 1.1;
hold = 1;
accel = 0.07;

meter_l_ = meter_l_pk;
meter_l_pk = 0.01;

meter_r_ = meter_r_pk;
meter_r_pk = 0.01;

meter_mid_ = meter_mid_pk;
meter_mid_pk = 0.01;

meter_l_ < meter_l*0.99 ? (
  hold_l += 1;
  hold_l > hold ? (meter_l /= meter_decay + accel_l) & accel_l += accel;
  ):(
  meter_l = meter_l_;
  hold_l = 0;
  accel_l = 0;
  );

meter_r_ < meter_r *0.99? (
  hold_r += 1;
  hold_r > hold ? (meter_r /= meter_decay + accel_r) & accel_r += accel;
  ):(
  meter_r = meter_r_;
  hold_r = 0;
  accel_r = 0;
  );

meter_mid_ < meter_mid *0.99? (
  hold_mid += 1;
  hold_mid > hold ? (meter_mid /= (meter_decay + accel_mid)) & (accel_mid += accel);
  ):(
  meter_mid = meter_mid_;
  hold_mid = 0;
  accel_mid = 0;
  );



meter_outl_ = meter_outl_pk;
meter_outl_pk = 0.01;

meter_outr_ = meter_outr_pk;
meter_outr_pk = 0.01;

meter_outmid_ = meter_outmid_pk;
meter_outmid_pk = 0.01;



meter_outl_ < meter_outl *0.99? (
  hold_outl += 1;
  hold_outl > hold ? (meter_outl /= meter_decay + accel_outl) & accel_outl += accel;
  ):(
  meter_outl = meter_outl_;
  hold_outl = 0;
  accel_outl = 0;
  );

meter_outr_ < meter_outr *0.99? (
  hold_outr += 1;
  hold_outr > hold ? (meter_outr /= meter_decay + accel_outr) & accel_outr += accel;
  ):(
  meter_outr = meter_outr_;
  hold_outr = 0;
  accel_outr = 0;
  );

meter_outmid_ < meter_outmid *0.99 ? (
  hold_outmid += 1;
  hold_outmid > hold ? (meter_outmid /= (meter_decay + accel_outmid)) & (accel_outmid += accel);
  ):(
  meter_outmid = meter_outmid_;
  hold_outmid = 0;
  accel_outmid = 0;
  );
  
  
  
  
  


  

upmeter = 1;    upmeter == 1 ? (
  gfx_dest = 10;  gfx_mode = 0;
  gfx_setimgdim(10, -1, -1);   gfx_setimgdim(10, fx_w, fx_h); 

  meter_bot=24;
  meter_inw = min(fx_w/10 , 32*r);
  meter_lowy = fx_h - (20*r + fx_w/300 * 1*r + fx_h/150 * 4*r);
  yscale = (meter_lowy) *18 /meter_bot;
  midside == 0 ? gr_meter2 = gr_meter;
  
  gfx_set(1,1,1,1);

  gfx_line(spad , spad+1, spad + meter_inw - 1*r, spad+1);
  mstart = 0;
  mspac = -3;
  gfx_setfont(4,"Trebuchet MS", (7 + fx_h/(150*r) *2 )*r );
  gfx_set(1,1,1,1);
  
  loop( floor(meter_bot/(-mspac))+1,
    gfx_x = spad;

    
    ypos = ( - log10(   2^( mstart /6)  )) * yscale  ;
    gfx_y = min( meter_lowy , ypos * max(1 , 2-ypos/meter_lowy) + spad );

    mstart == 0 || mstart == -6 ||  mstart == -12 || mstart == -18 || mstart == -30 ? (
      gfx_a = 1;
      gfx_x = spad + meter_inw/3;
      mstart <= -10 ? gfx_x -= gfx_texth*0.3;
      gfx_drawnumber(mstart,0);
      gfx_x = spad;
      ):(
      gfx_a = 0.6;
      );
    gfx_lineto(spad+meter_inw-1*r , gfx_y);
    mstart += mspac;
    );
/*  
  gfx_x = gfx_texth * 0.25 + spad;
  gfx_setfont(4,"Trebuchet MS",8*r);
  gfx_set(1,1,1,1);
  gfx_drawstr("L");
  gfx_x = meter_inw * 0.5 - gfx_texth * 0.3 + spad;
  gfx_drawstr("C");
  gfx_x = meter_inw * 0.7 + gfx_texth * 0.3 + spad;
  gfx_drawstr("R");
*/


    gfx_set(1,1,1,1);
  gfx_line(fx_w - spad - meter_inw , spad+1, fx_w - spad - 1*r, spad+1);
  mstart = 0;
  mspac = -3;
  gfx_setfont(4);
  gfx_set(1,1,1,1);
  
  loop( floor(meter_bot/(-mspac))+1,
    gfx_x = fx_w - spad - meter_inw;

    ypos = ( - log10(  2^( mstart /6)  )) * yscale  ;
    gfx_y = min( meter_lowy , ypos * max(1 , 2-ypos/meter_lowy) + spad );


    mstart == 0 || mstart == -6 ||  mstart == -12 || mstart == -18 || mstart == -30 ? (
      gfx_a = 1;
      gfx_x = fx_w - spad - meter_inw * 2/3;
      mstart <= -10 ? gfx_x -= gfx_texth*0.3;
      
      gfx_drawnumber(mstart,0);
      gfx_x = fx_w - spad - meter_inw;
      ):(
      gfx_a = 0.6;
      );
    gfx_lineto(fx_w - spad - 1*r , gfx_y);
    mstart += mspac;
    );
/*
  gfx_x = fx_w - meter_inw + gfx_texth * 0.25 - spad;
  gfx_setfont(4,"Trebuchet MS",8*r);
  gfx_set(1,1,1,1);
  gfx_drawstr("L");
  gfx_x = fx_w - meter_inw * 0.5 - gfx_texth * 0.3 - spad;
  gfx_drawstr("C");
  gfx_x = fx_w - meter_inw * 0.3 + gfx_texth * 0.3 - spad;
  gfx_drawstr("R");
*/  


  ypos = (gfx_y-spad)/(meter_lowy-spad*1.2);
  gfx_y *= 1/(  ypos / ypos^(1.2-ypos)^0.6  ) ;
  gfx_y += spad;
  
  upmeter = 0;
  );


metersize = 2;
metersize == 1 ? (
    gfx_dest = 31;  gfx_mode = 0;
  mtrscale = 0.5;
    gfx_setimgdim(31, -1, -1);   gfx_setimgdim(31, fx_w*mtrscale, fx_h*mtrscale); 
  
  
    gfx_set(0.4,0.7,0.9,0.15+sbri^2*0.4+dred*0.15);
  gfx_a = 0.5;
  gfx_x=spad*mtrscale;
    ypos = ( - log10(  meter_l  )) * yscale  ;
  gfx_y = min( meter_lowy , ypos * max(1 , 2-ypos/meter_lowy) + spad )*mtrscale;
  gfx_rectto((spad+meter_inw/7*2)*mtrscale,(meter_lowy+2*r)*mtrscale);
  
    gfx_x=(spad+meter_inw)*mtrscale;
    ypos = ( - log10(  meter_r  )) * yscale  ;
  gfx_y = min( meter_lowy , ypos * max(1 , 2-ypos/meter_lowy) + spad )*mtrscale;
  gfx_rectto((spad+meter_inw/7*5)*mtrscale,(meter_lowy+2*r)*mtrscale);
  
      gfx_set(0.2,0.5,0.7,0.15+sbri^2*0.4+dred*0.15);
  gfx_a = 0.5;
  
    ypos = ( - log10(  meter_mid  )) * yscale  ;
  gfx_y = min( meter_lowy , ypos * max(1 , 2-ypos/meter_lowy) + spad )*mtrscale;
  gfx_rectto((spad+meter_inw/7*2)*mtrscale,(meter_lowy+2*r)*mtrscale);
  
  
  
    gfx_set(0.4,0.7,0.9,0.15+sbri^2*0.4+dred*0.15);
  gfx_a = 0.5;
  gfx_x=(fx_w-spad)*mtrscale;
    ypos = ( - log10(  meter_outr  )) * yscale  ;
  gfx_y = min( meter_lowy , (ypos * max(1 , 2-ypos/meter_lowy) + spad ))*mtrscale;
  gfx_rectto((fx_w-spad-meter_inw/7*2)*mtrscale,(meter_lowy+2*r)*mtrscale);
  
    gfx_x=(fx_w-spad-meter_inw)*mtrscale;
  ypos = ( - log10(  meter_outl  )) * yscale  ;
  gfx_y = min( meter_lowy , ypos * max(1 , 2-ypos/meter_lowy) + spad )*mtrscale;
  gfx_rectto((fx_w-spad-meter_inw/7*5)*mtrscale,(meter_lowy+2*r)*mtrscale);
  
    gfx_set(0.2,0.5,0.7,0.15+sbri^2*0.4+dred*0.15);
  gfx_a = 0.5;
  ypos = ( - log10(  meter_outmid  )) * yscale  ;
  gfx_y = min( meter_lowy , ypos * max(1 , 2-ypos/meter_lowy) + spad )*mtrscale;
  gfx_rectto((fx_w-spad-meter_inw/7*2)*mtrscale,(meter_lowy+2*r)*mtrscale);
  
  
  
  gfx_dest = 30;  gfx_mode = 0;
  gfx_x = gfx_y = 0;
  gfx_a = 1;
  gfx_blit(31,1/mtrscale,0,  0,0,fx_w,meter_lowy*mtrscale);
  );


metersize == 2 ? (
    gfx_dest = 31;  gfx_mode = 0;
  mtrscale = 1;
  mfx_w = 200*r*mtrscale;
  mfx_h = 110*r*mtrscale;
  mtrtransx = (mfx_w)/(fx_w-spad);    mtrtransy = (mfx_h)/(fx_h-spad);
    gfx_setimgdim(31, -1, -1);   gfx_setimgdim(31, mfx_w, mfx_h); 
    
    gfx_set(0.4,0.7,0.9,0.15+sbri^2*0.4+dred*0.15);
  gfx_a = 0.5;
  gfx_x=0;
  yscale = ((mfx_h  *0.8));

  ypos = ( - log10(  meter_l  )) * yscale  * mtrscale ;
  gfx_y = ypos * max(1,2-ypos/mfx_h);
  gfx_rectto(( 7*r*mtrscale),mfx_h);
  

    gfx_x = 21*r*mtrscale;
  ypos = ( - log10(  meter_r  )) * yscale  * mtrscale ;
  gfx_y = ypos * max(1,2-ypos/mfx_h);
  gfx_rectto( 14*r*mtrscale,mfx_h);
  
      gfx_set(0.2,0.5,0.7,0.15+sbri^2*0.4+dred*0.15);
  gfx_a = 0.5;
  
  ypos = ( - log10(  meter_mid  )) * yscale  * mtrscale ;
  gfx_y = ypos * max(1,2-ypos/mfx_h);
  gfx_rectto( 7*r*mtrscale , mfx_h);
  
  
  
    gfx_set(0.4,0.7,0.9,0.15+sbri^2*0.4+dred*0.15);
  gfx_a = 0.5;
  gfx_x = mfx_w;
  ypos = ( - log10(  meter_outl  )) * yscale  * mtrscale ;
  gfx_y = ypos * max(1,2-ypos/mfx_h);
  gfx_rectto(mfx_w-(7*r)*mtrscale,mfx_h);
  
    gfx_x = mfx_w - (21*r)*mtrscale;
  ypos = ( - log10(  meter_outr  )) * yscale  * mtrscale ;
  gfx_y = ypos * max(1,2-ypos/mfx_h);
  gfx_rectto(mfx_w-(14*r)*mtrscale,mfx_h);
  
    gfx_set(0.2,0.5,0.7,0.15+sbri^2*0.4+dred*0.15);
  gfx_a = 0.5;
  ypos = ( - log10(  meter_outmid  )) * yscale  * mtrscale ;
  gfx_y = ypos * max(1,2-ypos/mfx_h);
  gfx_rectto(mfx_w-(7*r)*mtrscale , mfx_h);
  
  
  gfx_dest = 30;  gfx_mode = 0;
  gfx_x = gfx_y = 0;
  gfx_a = 1;
  gfx_blit(31,1,0,  0,0,mfx_w,mfx_h*mtrscale, spad,spad,(mfx_w)/mtrtransx-spad,meter_lowy-spad);
  );

// Blit Meterlines
gfx_dest = 30;  gfx_mode = 1;
gfx_x = gfx_y = 0;
gfx_a = 0.25;
gfx_blit(10,1,0);







gfx_dest = 30;
gfx_set(0.75,0.8,0.9,1);


// Character slider

gfx_x = fx_w * 0.7 + 2*r;
dy = grasy + grash*0.45;
dx_ = grash*0.05 + fx_w * 0.008 ;
dy_ = 2/3 * dx_;
dyx = 1;
gfx_y = dy+dyx*dy_;
dcnt = 0;
/*
while(
  gfx_lineto(gfx_x+dx_ , dy-dyx*dy_);
  dyx *= -1;
  dcnt += 1;  
  dcnt < 6;
  );
*/

dmin = fx_w*0.17;
dmax = dmin + fx_w*0.3;
dxr = dmax-dmin;
dx1 = dmin + sd/100 * dxr;
dx2 = dx1+12*r;
dy1 = dy-10*r;
dy2 = dy+10*r;
dpad = 2*r;
gfx_a *= 0.1;
gfx_rect(dmin, (dy1+dy2)/2-dpad , dmax-dmin+(dy2-dy1)/2 , dpad*2);
gfx_a /= 0.1;

// Blit saw
sawtype == 1 ? (
  sawrange = fx_w*0.3 - meter_inw;
  sawsX = zx = meter_inw+fx_w*0.02+(sd/100)*sawrange;
  sawsY = skyh-10*r+fx_h*0.05;
  sawsW = max(50*r,min(180*r,fx_w*0.2));
  sawsH = max(30*r,min(90*r,fx_h*0.15));
  gfx_dest = 30;   gfx_x = slider2/100 * sawrange;   gfx_y = 0;
  gfx_a = 0.85;
  gfx_blit(15,1,0 , 0,0,100*r,60*r , sawsX,sawsY,sawsW,sawsH );
  sawloc = sawhandleL + slider2/100 * sawrange;
  );
sawtype == 2 ? (  // Blit Zippo
  sawrange = fx_w*0.4 - meter_inw;
  sawsX = meter_inw+fx_w*0.02+(sd/100)*sawrange;
  sawsY = skyh-20*r;
  sawsW = max(50*r,min(180*r,fx_w*0.2));
  sawsH = max(30*r,min(90*r,fx_h*0.15));
  
  zipposize = 0.7;
  gfx_dest = 30;   gfx_x = gfx_y = 0;
  gfx_a = 0.85;
  zys = (0.2 + (0.8) * (fxratx/2) / fxraty );
  zxs = (0.5 + (0.5) * (fxraty*0.4) / (fxratx) );

  zx = fx_w* (0.07 + 0.04/(fxraty+1))  + distx * sawrange;
  zy = fx_h*0.82 - (fxratx * (28*r) / fxraty );
//  zw = 50*r + (20*r) /fxratx;
  zw = 100*r * zxs;
//  zh =  (55*r)*(fxratx+0.3);
//  zh =  (20*r + (80*r) * (fxratx/2) ); // By width OK
  zh = 100*r * zys;

  gfx_blit(5,1,0 , 0,0,100*r,100*r
  , zx , zy , zw , zh);

//   , fx_w*0.08 + distx * sawrange, fx_h - (fx_h*0.3) / fxraty , (100*r)/((fxratx+1)/2) , (100*r)/((fxraty+1)/2) );
   // (100*r*zipposize)/fxratx + gfx_w/20 , (100*r*zipposize)/fxraty + gfx_w/20);//, sawsX,sawsY,sawsW,sawsH );
  sawloc = sawhandleL + slider2/100 * sawrange;
  );


flmx1 = flx1 - fx_w * (0.5 - tlt_gain * 0.003) - 8*r;
flmx2 = flx4 - fx_w * (0.5 - tlt_gain * 0.003) + 12*r;

flmy1 = fly1 - fx_h * (0.55 + tlt_gain * 0.018);
flmy2 = fly2 - fx_h * (0.45 + tlt_gain * 0.018);

fltest = 0;
fltest == 1 ? (
  gfx_a = 0.2;
  gfx_rect(flmx1,flmy1,flmx2-flmx1,flmy2-flmy1);
  );

/*

pyr = fx_h/3;
pw1 = 15*r;
pw2 = 8*r;
px1 = fx_w*0.8;
px2 = px1+pw1/2-pw2/2;;
px3 = px2+pw2;
px4 = px1+pw1;

py5 = skyh + spad*0;
py4 = py5-40*r;
py3 = py4 - pump * pyr;
py2 = py3-20*r;
py1 = py2-pw1/2;
ph1 = py3-py2;
ph2 = py5-py4;

gfx_set(0.7,0.75,0.85,1);
gfx_rect(px2,py4,pw2,ph2);
gfx_rect(px2-4*r , py5 - ph2*0.2 , 4*r , 6*r);

gfx_rect(px1,py2,pw1+1,ph1);
gfx_circle( (px1+px4)/2-1 , py2, pw1/2, fill=1);
gfx_set(0.6,0.65,0.72,1);
gfx_rect(px1,py3-1*r,pw1+1,2*r);

gfx_set(0.5,0.5,0.65,1);
gfx_rect( (px2+px3)/2 - 2*r , py3 , 4*r , py4-py3 );
*/


fxratx = gfx_w/fx_w ;
fxraty = gfx_h/fx_h ;



(mouse_x > cxl * fxratx) && (mouse_x < cxr * fxratx) && (mouse_y > (cy1+cloudy)*fxraty) && (mouse_y < (cy2+cloudy)*fxraty) ? (
  mouse_cap != 0 && cap_mode == 0 ? (
    cap_mode = lastcap = 1 ;
    );
  );
/*
(mouse_x > (sawsX)*fxratx) && (mouse_x < (sawsX+sawsW-10*r)*fxratx) && (mouse_y > sawsY*fxraty) && (mouse_y < (sawsY+sawsH-5*r)*fxraty) ? (
  mouse_cap != 0 && cap_mode == 0 ? (
    cap_mode = lastcap = 2 ;
    );
  );
*/
//zmx1 = (txt2x)*fxratx*0.9 + gfx_w*0.0;
zmx1 = (zx + zcx1) * fxratx - max(0, fxratx-1) * 7*r + ( fxraty-1) * 3*r;
//zmx2 = (txt2x)*fxratx*0.9 + gfx_w*0.1;
zmx2 = (zx + zbx2) * fxratx - max(0, fxratx-1) * 20*r + ( fxraty-1) * 10*r;
//zmy1 = zy + 15*r + max(0, fxratx-1) * 20*r;
//zmy1 = (zy + 50*r + max(0, fxratx-1) * 13*r) * (fxraty*0.67 + 0.33);
zmy1 = gfx_h *0.8 + (fxraty-1) * 10*r - (fxratx-1) * 12*r;
//zmy2 = zmy1 + (35*r) + (fxratx-2) * 12*r ;
zmy2 = gfx_h - spad;
zmw = zmx2-zmx1;
zmh = zmy2-zmy1;
(mouse_x > zmx1) && (mouse_x < zmx2) && (mouse_y > zmy1) && (mouse_y < zmy2) ? (
  mouse_cap != 0 && cap_mode == 0 ? (
    cap_mode = lastcap = 2 ;
    );
  );

flmx = gfx_w * 0.67;
flmy = gfx_h * (0.72 - slider12 * 0.01);
flmw = gfx_w * 0.15;
flmh = gfx_h * 0.13;
(mouse_x > flmx) && (mouse_x < (flmx+flmw)) && (mouse_y > flmy) && (mouse_y < (flmy+flmh)) ? (
  mouse_cap != 0 && cap_mode == 0 ? (
    cap_mode = lastcap = 3 ;
    );
  );


cmx1 = (fx_w-65*r) * fxratx;
cmx2 = (cmx1 + 30*r * fxratx) ;
cmy1 = ceily * fxraty + spad;
cmy2 = (cmy1 + 12*r * fxraty) ;
(mouse_x > cmx1) && (mouse_x < cmx2) && (mouse_y > cmy1) && (mouse_y < cmy2) ? (
  mouse_cap != 0 && cap_mode == 0 ? (
    cap_mode = lastcap = 4;
    );
  );

(mouse_x > gfx_w*0.88) && (mouse_x < gfx_w) && (mouse_y > 0) && (mouse_y < gfx_h*0.13) ? (
  mouse_cap != 0 && cap_mode == 0 ? (
    cap_mode = lastcap = 40;
    mys = mouse_y;
    
    );
  );
(mouse_x > gfx_w*0.88) && (mouse_x < gfx_w) && (mouse_y > gfx_h*0.13) && (mouse_y < gfx_h*0.27) ? (
  mouse_cap != 0 && cap_mode == 0 ? (
    cap_mode = lastcap = 43;
    mys = mouse_y;
    
    );
  );
(mouse_x > gfx_w*0.88) && (mouse_x < gfx_w) && (mouse_y > gfx_h*0.27) && (mouse_y < gfx_h*0.43) ? (
  mouse_cap != 0 && cap_mode == 0 ? (
    cap_mode = lastcap = 46;
    mys = mouse_y;
    
    );
  );
(mouse_x > gfx_w*0.88) && (mouse_x < gfx_w) && (mouse_y > gfx_h*0.43) && (mouse_y < gfx_h*0.54) ? (
  mouse_cap != 0 && cap_mode == 0 ? (
    cap_mode = lastcap = 49;
    mys = mouse_y;
    
    );
  );
(mouse_x > gfx_w*0.88) && (mouse_x < gfx_w) && (mouse_y > gfx_h*0.54) && (mouse_y < gfx_h*0.66) ? (
  mouse_cap != 0 && cap_mode == 0 ? (
    cap_mode = lastcap = 412;
    mys = mouse_y;
    
    );
  );






(cap_mode > 0) ? (
  dblclk == 0 ? dblclk = 1;
  );
/*
(mouse_x > px1-dpad*2) && (mouse_x < px4+dpad*2) && (mouse_y > py1-dpad*2) && (mouse_y < py5+dpad*2) ? (
  mouse_cap != 0 && cap_mode == 0 ? (
    cap_mode = 3 ;
    );
  );
*/
dblclktime = 8;

dblclk == 1 ? (     mouse_cap != 0 ? (
    dblclkcnt += 1;
    (dblclkcnt > dblclktime) || (dragging == 1) ? (dblclk = -1; dblclkcnt = 0; dblr = 0;);
    mouse_cap > 10 ? dblr = 1;
    ):(
    dblclkcnt = 0;
    dblclk = 2;
    );
  );

dblclk == 2 ? (     dblclkcnt += 1;
  dblclkcnt > dblclktime ? (dblclk = 0; dblclkcnt = 0; dblr = 0; );
  mouse_cap > 0 ? (
    dblclkcnt = 0;
    dblclk = 3;
    );
  mouse_cap > 10 ? dblr = 2;
  );

dblclk == 3 ? (     dblclkcnt += 1;
  dblclkcnt > dblclktime ? (dblclk = 0; dblclkcnt = 0; dblr = 0;);
  (mouse_cap == 0) && (dblr < 2) ? (
    dblclkcnt = 0;
    dblclk = 4;
    );
  mouse_cap > 10 ? dblr = 3;
  );

dblclk == 0 ? dblr = 0;

dblr == 3 ? (
  sawtype == 1 ? sawtype = 2 : sawtype = 1;
  dblr = dblclk = 0;
  upsaw = 2;
  );

/*
cap_mode > 0 ? (
  helpcnt += 1;
  helpcnt > 30 && help == 0 ? (
    cap_mode == 1 ? help = 1;
    cap_mode == 2 ? help = 2;
    cap_mode == 3 ? help = 3;
    cap_mode == 4 ? help = 4;
    cap_mode == 0 ? help = 30;
    cap_mode >= 40 ? help = 40;
    );
  ):(
  helpcnt = 0;
  );
*/
mouse_cap > 0 ? (
  helpcnt += 1;
  helpcnt > 30 && help == 0 ? (
    cap_mode == 1 ? help = 1;
    cap_mode == 2 ? help = 2;
    cap_mode == 3 ? help = 3;
    cap_mode == 4 ? help = 4;
    cap_mode == 0 ? help = 30;
    cap_mode >= 40 ? help = 40;
    );
  ):(
  helpcnt = 0;
  );


// Dragging sliders

mouse_capold != mouse_cap ? (
  drag = 0;
  ):(
  mouse_cap > 1 ? (
    precise = 3;
    ):(
    precise = 1;
    );
  );
  
mouse_capold = mouse_cap;


cap_mode == 1 ? (
  drag == 0 ? ( 
    mys = mouse_y;
    sls = st;
    drag = 1;
    );
  txt = 1;
  cy1 < ctop ? cy1 = ctop;  cy1 > cbot ? cy1 = cbot;
  slider1 = sls+ (mys - mouse_y)/cyr * min(1,fx_h/gfx_h) * -stmin / precise^2;
  slider1 < -30 ? slider1 = -30;
  
  slider_automate(slider1);
  );


slider1 != st ? (
  dragging = 1;
  st = slider1;
  upsky = upgrass = uptilt = 1;
  
  slider_automate(slider1);
  );
slider1 > 0 ? slider1 = 0;  st > 0 ? st = 0;



cap_mode == 2 ? (
  drag == 0 ? ( 
    mxs = mouse_x;
    sls = sd;
    drag = 2;
    );
  txt=2;
  slider2 = sd = sls+ (mouse_x-mxs)/dxr * dxr *0.2 / precise;
  slider_automate(slider2);
//  upsaw=2;
  );

slider2 > 100 ? slider2 = 100;   slider2 < 0 ? slider2 = 0;

(slider2 != sd) || (slider2 != slider2old) ? (
  sd = slider2;
  distx = slider2/100;
  upsky = upgrass = uptilt = 1;
//  drawflash = 1;
  slider_automate(slider2);
//  upsawtooth = 1;
  upsaw=2;
  );
slider2old = slider2;




cap_mode == 3 ? (
  drag == 0 ? ( 
    mys = mouse_y;
    fyr = fx_h;
    sls = slider12;
    drag = 3;
    );
  txt=3;
  slider12 = sls + ((mys-mouse_y)/fyr) * 5 / precise;
  slider12 > 6 ? slider12 = 6;
  slider12 < -6 ? slider12 = -6;

  );

lastcap == 3 ? (
  mouse_cap == 0 ? (
    slider12 = floor(slider12*10+0.5)/10;
//    lastcap = 0;
    );
  );
  
slider12 != slider12old ? (
  
  drawflash = 1;

  uptilt = 1;
/*  tlt_pls = abs(slider1)/70 + slider2/100/3;
  tlt_gain = (abs(slider12/6)^2 / abs(slider12/6)) * slider12;
  tlt_angle = (abs(slider12/6)^2 / abs(slider12/6)) * slider12;
*/
  tlt_angle = slider12;

  );
slider12old = slider12;

tlt_sf = sf;
tlt_slider12 = slider12;




/*
sf != slider12old ? (
  sf = slider12;
  up6 = 1;
  upflash = 1;
  slider_automate(slider12);
  );
slider12old = slider12;
sfold = sf;
*/







cap_mode == 4 ? (
  drag == 0 ? ( 
    mys = mouse_y;
    sls = sc;
    drag = 4;
    );
  txt = 4;

  slider20 = sls+ (mys - mouse_y)/meter_lowy * min(1,fx_h/gfx_h) * 12 / precise^1.5;
  slider20 < -12 ? slider20 = -12;
  slider_automate(slider20);
  );
/*
  ceilr = fx_h * 0.7 * fxraty;
  cypos = ( - log10(   2^( slider20 /6)  )) * yscale  ;
  ceily = min( ceilr , ypos * max(1 , 2-ypos/ceilr) + spad );
  
  slider20 = sls+ (mys - mouse_y)/ceilr * min(1,fx_h/gfx_h) * 12 ;
  slider_automate(slider20);
  );
*/
slider20 != sc ? (
  dragging = 1;
  sc = slider20;
  drawceil = 1;
  );
slider20 > 0 ? slider20 = 0;  slider20 < -12 ? slider20 = -12;
sc > 0 ? sc = 0;

(lastcap == 4) && (dblclk == 0) && (mouse_cap == 0) ? (
  floor4cnt += 1;
  floor4cnt > 2 ? (
    slider20 = floor(sc*10+0.5)/10;

//    lastcap = 0;
    );
  );
mouse_cap != 0 ? floor4cnt = 0;

/*
cap_mode == 3 ? (
  drag == 0 ? ( 
    mys = mouse_y;
    sps = slider3;
    drag = 1;
    );
  txt = 3;
  py3 < py4-pyr ? py3 = py4-pyr;  py3 > py4 ? py3 = py4;
  slider3 = sp = sps + (mys - mouse_y)/pyr * pyr *0.25;
  slider_automate(slider3);
  ):(
  slider3 != sp ? (
    sp = slider3;
    slider_automate(slider3);
    );
  );
slider3 < 0 ? slider3 = 0;  slider3 > 100 ? slider3 = 100;
sp < 0 ? sp = 0;  sp > 100 ? sp = 100;
*/



mouse_cap == 0 ? (
  cap_mode = drag = dragging = 0;
  dblclk == -1 ? dblclk = 0;
  );





gfx_set(0,0,0,1,0);
gfx_rect(0,0,spad,fx_h);
gfx_rect(0,0,fx_w,spad);
gfx_rect(fx_w-spad,0,spad,fx_h);
gfx_rect(0,fx_h-spad,fx_w,spad);





cap_mode == 2 ? (
  p=0;
  abs(mouse_x - mxs) > r ? (helpout = 1);
  ):(
  cap_mode > 0 ? (
    abs(mouse_y - mys) > r ? (helpout = 1);
    );
  );

cap_mode == 0 ? (
  helpout = 0;
  );

/*
(helpout == -1) ? (
  cap_mode == 0 ? (
    help = 0;
    );
  );
*/

gfx_set(0.1,0.1,0.1,(dred*0.5+sbri*0.8)*helpboxa ,0);
gfx_setfont(4,"Trebuchet MS",11*r, '');
gfx_rect(fx_w/2-helpboxw/2,gfx_texth * 0.2, helpboxw,gfx_texth*1.2);
help > 0 ? (
  gfx_set(0.85,0.85,0.75,helpboxa);
  gfx_x = fx_w/2;
  gfx_y = gfx_texth * 0.3;
  help == 1 ? (
    thrtxt = "Limiter threshold (dB)";
    gfx_measurestr(thrtxt, thrtxtw, 0);
    helpboxw = thrtxtw + gfx_texth;
    gfx_x -= thrtxtw/2;
    gfx_drawstr(thrtxt);
    );
  help == 2 ? (
    chartxt = "Character (%)";
    gfx_measurestr(chartxt, chartxtw, 0);
    helpboxw = chartxtw + gfx_texth;
    gfx_x -= chartxtw/2;
    gfx_drawstr(chartxt);
    );
  help == 3 ? (
    tlttxt = "EQ tilt (dB)";
    gfx_measurestr(tlttxt, tlttxtw, 0);
    helpboxw = tlttxtw + gfx_texth;
    gfx_x -= tlttxtw/2;
    gfx_drawstr(tlttxt);
    );
  help == 4 ? (
    outtxt = "Output (dB)";
    gfx_measurestr(outtxt, outtxtw, 0);
    helpboxw = outtxtw + gfx_texth;
    gfx_x -= outtxtw/2;
    gfx_drawstr(outtxt);
    );
  help == 30 ? (
    haptxt = "Happy 30v Birthday Marko!!!";
    gfx_measurestr(haptxt, haptxtw, 0);
    helpboxw = haptxtw + gfx_texth;
    gfx_x -= haptxtw/2;
    gfx_drawstr(haptxt);
    );
  help == 40 ? (
    outmtxt = "Dbl-click to set Output";
    gfx_measurestr(outmtxt, outmtxtw, 0);
    helpboxw = outmtxtw + gfx_texth;
    gfx_x -= outmtxtw/2;
    gfx_drawstr(outmtxt);
    );
  helpboxa <= 0 ? (
    help = 0;
    helpboxw = 0;
    );
  mouse_cap == 0 ? (
    helpboxa -= 0.1;
    ):(
    helpout == 0 ? (
      helpboxa += 0.1;
      ):(
      helpboxa -= 0.1;
      );
    );
  );

helpboxa < 0 ? helpboxa = 0;  helpboxa > 1 ? helpboxa = 1;


noob < 300 ? (
  noob += 1;
  gfx_set(0.1,0.1,0.1,1);
  intro = "Click-hold for help, double-click to reset.";
  gfx_measurestr(intro, introw, 0);
  gfx_x = fx_w/2 - gfx_texth*10;
  gfx_x = fx_w/2 - introw*0.57;
  gfx_set(0.85,0.85,0.75,nooba+1);
  gfx_drawstr(intro);
  noob > 240 ? (
    nooba -= 1/60;
    ):(
    mouse_cap != 0 ? noob = 240;
    );
  );

gfx_a = 0.8;
gfx_setfont(1,"Trebuchet MS", 10*r);

txt > 0 && cap_mode == 0 ? (
  txta -= 0.02;    gfx_a = txta;
  txta <= 0.01 ? (
    txt = 0;
    gfx_a = 0.8;
    );
  ):(
  txta = 1;
  );


txt == 1 ? (
  gfx_x = fx_w/2 - gfx_texth*0.3;
  st < 0 ? (gfx_x -= gfx_texth*0.25);
  st < -10? (gfx_x -= gfx_texth*0.2);
  gfx_y = cloudy + gfx_texth*1.6;
  gfx_set(0.3,0.3,0.3,-0.5*txta,1);
  gfx_drawnumber(st,1);
  );



/*
txt == 2 ? (
  gfx_y = dy1 - gfx_texth*1.2;
  sd >= 10 ? (
    gfx_x = dx1 - gfx_texth*0.1;
    sd == 100 ? (gfx_x = dx1 - gfx_texth*0.3);
    ):(
    gfx_x = dx1 + gfx_texth*0.1;
    );
  gfx_drawnumber(sd,0);
  );
*/
txt == 2 ? (
/*
  sawsY+sawsH > fx_h ? (
    gfx_x = sawsX + fx_w*0.01 - gfx_texth * (sd<10?0.2:0.7);
    gfx_y = sawsY+gfx_texth*0.2;
    ):(
    gfx_y = min(fx_h-gfx_texth *1.0 , sawsY+sawsH*0.7);
    gfx_x = sawsX + sawsW/3*2;
    );
*/
//  gfx_x = sawsX + sawsW/3*2;
  txt2x = gfx_x = zx*0.96 + (20+16/fxratx)*r  -12*r + fxraty*5*r;
  sawtype == 1 ? gfx_x += 15*r;
  gfx_y = (fx_h-gfx_texth *1.5);
  gfx_set(0.8,0.8,0.8,0.7*txta,1);
  gfx_drawnumber(sd,0);
  );



txt == 3 ?(
/*
  gfx_y = fly2/2 + gfx_texth * 1.5 - tlt_gain*fx_h*0.011;
  (slider12) >= 0 ? (
    gfx_x = flx1-fx_w/2 - gfx_texth*2.6 + tlt_gain * gfx_texth * 0.05;
    ):(
    gfx_x = flx1-fx_w/2 - gfx_texth*2.9 + tlt_gain * gfx_texth * 0.1;
    );
*/
//  gfx_x = fx_w * 0.8 + max(0, slider12/6) * 4*r;
  gfx_x = fx_w * 0.8;
  slider12 < 0 ? gfx_x = fx_w * (0.8 -slider12 * 0.005) - gfx_texth*0.3;
  gfx_y = fx_h - gfx_texth * 1.8 - tlt_gain*fx_h*0.007;
  slider12 > 0 ? gfx_y -= tlt_gain * r;
  gfx_set(0.5,0.5,0.5,1*txta,1);
  
  gfx_drawnumber(slider12+0.01*sign(slider12),1);
  );





txt == 4 ? (
  gfx_x = fx_w - 58*r ;  slider20 < 0 ? (gfx_x -= gfx_texth*0.1);
  slider20 < -10? (gfx_x -= gfx_texth*0.1);
  gfx_y = ceily + gfx_texth*1.4;
  sbri > 0.6 ? (
    gfx_set(1,1,1,-0.3*txta,1);
    ):(
    gfx_set(0.4,0.4,0.4,1*txta,1);
    );
  ceilval = slider20;
  gfx_drawnumber(ceilval-0.01,1);
  );



gfx_set(0.65,0.7,0.78,0.8);

gfx_a = 0.8;

/*
abs(rmsimtr_ - rmsimtr) > 0.2 ? (
  rmsimtr *= (rmsimtr_/rmsimtr -1) * 0.5 +1;
  ):(
  rmsimtr /= (rmsimtr/rmsimtr_ -1) * 0.5 +1;
  );  
*/
(rmsimtr_ - rmsimtr) > 0.1 ? (
  rmsimtr += (rmsimtr_-rmsimtr ) * 0.5 ;
  );
(rmsimtr - rmsimtr_) > 0.1 ? (
  rmsimtr -= (rmsimtr-rmsimtr_ ) * 0.5 ;
  );  

rmsimtr < -128 ? rmsimtr = -128;

state > 0 ? RMSmeter = rmsimtr;
RMSmeter > -80 ? (
  gfx_setfont(1,"Trebuchet MS", (9+ (fx_w/(300*r)) + (fx_h/(50*r))) *r);
  RMSmeter > -10 ? (
    gfx_x = spad + meter_inw/3 - gfx_texth*0.4;
    ):(
    gfx_x = spad + meter_inw/3 - gfx_texth*0.7;
    );
  gfx_y = rmsy = fx_h - gfx_texth*1.9;
  gfx_drawnumber(RMSmeter,0);
  gfx_setfont(1,"Trebuchet MS", (6+ (fx_w/(390*r)) + (fx_h/(65*r))) *r);
  gfx_y += gfx_texth * 0.2;
  gfx_x += r;
  gfx_drawstr(".");
  gfx_drawnumber((abs(RMSmeter)-floor(abs(RMSmeter)) )*10,0);
  );
gfx_setfont(1,"Trebuchet MS", (5+fx_w/250+fx_h/200)*r);
gfx_x = spad+meter_inw/3 - gfx_texth*0.4;
gfx_y = fx_h - gfx_texth*1.45;
gfx_a = 0.4;
gfx_drawstr("RMS");
gfx_x = fx_w - meter_inw/3*2 - gfx_texth*0.7;
gfx_drawstr("RMS");
gfx_x = fx_w*0.54;
gfx_drawstr("RMS + ");
rmsgx = gfx_x;





(rmsomtr_ - rmsomtr) > 0.1 ? (
  rmsomtr += (rmsomtr_-rmsomtr ) * 0.5 ;
  );
(rmsomtr - rmsomtr_) > 0.1 ? (
  rmsomtr -= (rmsomtr-rmsomtr_ ) * 0.5 ;
  );  


rmsomtr < -128 ? rmsomtr = -128;

rmsomtrold = rmsomtr;


state > 0 ? RMSout = rmsomtr;
RMSout > -80 ? (
  gfx_setfont(1,"Trebuchet MS", (9+ (fx_w/(300*r)) + (fx_h/(50*r))) *r);
  gfx_a = 0.8;
  RMSout > -10 ? (
    gfx_x = fx_w - spad - meter_inw/3 - gfx_texth*1.0;
    ):(
    gfx_x = fx_w - spad - meter_inw/3 - gfx_texth*1.4;
    );
  gfx_y = rmsy;

  gfx_drawnumber(RMSout,0);
  gfx_setfont(1,"Trebuchet MS", (6+ (fx_w/(390*r)) + (fx_h/(65*r))) *r);
  gfx_y += gfx_texth * 0.2;
  gfx_x += r;
  gfx_drawstr(".");
  gfx_drawnumber((abs(RMSout)-floor(abs(RMSout)) )*10,0);
  );



gfx_setfont(1,"Trebuchet MS", (5+fx_w/250+fx_h/200)*r);

RMSmeter > -80 && RMSout > -80 ? (
  gfx_setfont(1,"Trebuchet MS", (8+ (fx_w/(300*r)) + (fx_h/(50*r))) *r);
  gfx_x = rmsgx;
  gfx_y = fx_h - gfx_texth * 1.25;
  RMSg = ceil( (RMSout-RMSmeter) *10)/10;
  RMSg >= 0 ? gfx_x += (gfx_texth * 0.35);
  gfx_a = 0.8;
  gfx_drawnumber(RMSg,0);
  gfx_setfont(1,"Trebuchet MS", (6+ (fx_w/(390*r)) + (fx_h/(65*r))) *r);
  gfx_y += gfx_texth * 0.2;
  gfx_drawstr(".");
  gfx_drawnumber((abs(RMSg)-floor(abs(RMSg)) )*10,0);
/*
  RMSg = ceil( (RMSout-RMSmeter) *10)/10;
  gfx_y -= gfx_texth*0.2;
  gfx_a = 0.8;
  gfx_setfont(1,"Trebuchet MS", 14*r);
  RMSg < 10 ? gfx_drawstr("  ");
  RMSg < 0 ? gfx_drawstr("-"):(gfx_drawstr(" "); gfx_x += 1*r; );
  gfx_drawnumber(abs(RMSg),1);
*/
  );

mtracc = 1.07;
mtrdec = 1.03;

mtr1 < mtr1old ? (
  mtr1d = 1;
  mtr1stop = mtr1;
  ):(
  mtr1d = 0;
  );



shootspd = 0.02;
mtr1d < mtr1dold ? (
  mtr1gowish = 1;
  );
mtr1gowish == 1 ? (      mtr1tmr += 1;
  mtr1tmr > 15 ? (
    mtr1gowish = 2;
    mtr1tmr = 0;
    );
  );

mtr1go == 0 ? (
  mtr1top = 1; mtr1bot = 1;
  mtr1gowish == 2 ? mtr1go = 1;
  );
mtr1go == 1 ? (
  mtr1shoot_a < 0.22 ? (mtr1shoot_a += 0.05) : (mtr1shoot_a = 0.22);
  mtr1bot = max (0, 1 - (1-mtr1top) * 0.3);
  mtr1top > mtr1stop ? (
    mtr1top -= shootspd * 4 * (1-mtr1stop);
    ):(
    mtr1go = 2;
    );
  mtr1gowish = 0;
  );
mtr1top < 0 ? mtr1top = 0;
mtr1go >= 2 ? (
  mtr1bot -= shootspd * (1-mtr1top*0.5);
  mtr1bot < mtr1top ? mtr1go = 3;
  );
mtr1bot < 0 ? mtr1bot = 0;
mtr1go == 3 ? (
  mtr1shoot_a -= 0.07 * max(0, mtr1top) + 0.01;
  mtr1bot <= 0 ? mtr1go = 0;
  );
mtr1dold = mtr1d;
mtr1shoot_a < 0 ? mtr1shoot_a = 0;

/*
mtr2 < mtr2old ? (
  mtr2d = 1;
  mtr2stop = mtr2;
  ):(
  mtr2d = 0;
  );
mtr2d < mtr2dold ? (
  mtr2gowish = 1;
  );
mtr2go == 0 ? (
  mtr2top = 1; mtr2bot = 1;
  mtr2gowish == 1 ? mtr2go = 1;
  );
mtr2go == 1 ? (
  mtr2shoot_a < 0.22 ? mtr2shoot_a += 0.05;
  mtr2bot = 1 - (1-mtr2top) * 0.2;
  mtr2top > mtr2stop ? (
    mtr2top -= shootspd * 4 * (1-mtr2stop);
    ):(
    mtr2go = 2;
    );
  mtr2gowish = 0;
  );
mtr2go >= 2 ? (
  mtr2bot -= shootspd * (1-mtr2top*0.5);
  mtr2bot < mtr2top ? mtr2go = 3;
  );
mtr2go == 3 ? (
  mtr2shoot_a -= 0.07 * (mtr2top);
  mtr2shoot_a <= 0 ? mtr2go = 0;
  );
mtr2dold = mtr2d;
*/


mtr2 < mtr2old ? (
  mtr2d = 1;
  mtr2stop = mtr2;
  ):(
  mtr2d = 0;
  );



shootspd = 0.05;
mtr2d < mtr2dold ? (
  mtr2gowish = 1;
  );
mtr2gowish == 1 ? (      mtr2tmr += 1;
  mtr2tmr > 100 ? (
    mtr2gowish = 2;
    mtr2tmr = 0;
    );
  );
mtr2go == 0 ? (
  mtr2top = 1; mtr2bot = 1;
  mtr2gowish == 2 ? mtr2go = 1;
  );

mtr2go == 1 ? (
  mtr2shoot_a < 0.22 ? (mtr2shoot_a += 0.05) : (mtr2shoot_a = 0.22);
  mtr2bot = max (0, 1 - (1-mtr2top) * 0.3);
  mtr2top > mtr2stop ? (
    mtr2top -= shootspd * 4 * (1-mtr2stop);
    ):(
    mtr2go = 2;
    );
  mtr2gowish = 0;
  );
mtr2top < 0 ? mtr2top = 0;
mtr2go >= 2 ? (
  mtr2bot -= shootspd * (1-mtr2top*0.5);
  mtr2bot < mtr2top ? mtr2go = 3;
  );
mtr2bot < 0 ? mtr2bot = 0;
mtr2go == 3 ? (
  mtr2shoot_a -= 0.07 * max(0, mtr2top) + 0.01;
  mtr2bot <= 0 ? mtr2go = 0;
  );
mtr2dold = mtr2d;
mtr2shoot_a < 0 ? mtr2shoot_a = 0;




mtr3 < mtr3old ? (
  mtr3d = 1;
  mtr3stop = mtr3;
  ):(
  mtr3d = 0;
  );

shootspd = 0.2;
mtr3d < mtr3dold ? (
  mtr3gowish = 1;
  mtr3tmr = 0;
  );
mtr3gowish == 1 ? (      mtr3tmr += 1;
  mtr3tmr > 15 ? (
    mtr3gowish = 2;
    mtr3tmr = 0;
    mtr3rand = rand(1);
    );
  );
mtr3go == 0 ? (
  mtr3top = 1; mtr3bot = 1;
  mtr3gowish == 2 ? mtr3go = 1;
  );
mtr3go == 1 ? (
  mtr3shoot_a < 0.22 ? (mtr3shoot_a += 0.05) : (mtr3shoot_a = 0.22);
  mtr3bot = max (0, 1 - (1-mtr3top) * 0.3);
  mtr3top > mtr3stop ? (
    mtr3top -= shootspd * 4 * (1-mtr3stop);
    ):(
    mtr3go = 2;
    );
  mtr3gowish = 0;
  );
mtr3top < 0 ? mtr3top = 0;
mtr3go >= 2 ? (
  mtr3bot -= shootspd * (1-mtr3top*0.5);
  mtr3bot < mtr3top ? mtr3go = 3;
  );
mtr3bot < 0 ? mtr3bot = 0;
mtr3go == 3 ? (
  mtr3shoot_a -= 0.07 * max(0, mtr3top) + 0.01;
  mtr3bot <= 0 ? mtr3go = 0;
  );
mtr3dold = mtr3d;
mtr3shoot_a < 0 ? mtr3shoot_a = 0;


mtr4 < mtr4old ? (
  mtr4stop = mtr4;
  ):(
  mtr4d = 0;
  );
mtr4d < mtr4dold ? (
  mtr4gowish = 1;
  );
mtr4go == 0 ? (
  mtr4top = 1; mtr4bot = 1;
  mtr4gowish == 1 ? mtr4go = 1;
  );
mtr4go == 1 ? (
  mtr4shoot_a = 0.22;
  mtr4bot = 1;
  mtr4top > mtr4stop ? (
    mtr4top -= shootspd * 4 * (1-mtr4stop);
    ):(
    mtr4go = 2;
    );
  mtr4gowish = 0;
  );
mtr4go >= 2 ? (
  mtr4bot -= shootspd * (1-mtr4top*0.5);
  mtr4bot < mtr4top ? mtr4go = 3;
  );
mtr4go == 3 ? (
  mtr4shoot_a -= 0.07 * (mtr4top);
  mtr4shoot_a <= 0 ? mtr4go = 0;
  );
mtr4dold = mtr4d;



mtr1old = mtr1;
mtr2old = mtr2;
mtr3old = mtr3;
mtr4old = mtr4;


gfx_set(1,1,1,shoot_a + sbri*0.3);


gfx_a = mtr1shoot_a;

gfx_arc(fx_w*0.6 - mtr1* fx_w*0.03 , skyh*1.3  , skyh*1.0 ,
5.9 - 0.8 * (1-mtr1bot)  , 5.9 - 0.8 * (1- mtr1top )  ,antialias = 1); 

gfx_a = mtr2shoot_a;
gfx_arc(fx_w*0.4 , fx_h*1.05 , fx_h*0.95 , 0.5 + (1-mtr2bot)^1.5 *1.2, 0.5 + (1- mtr2top )^1.5 *1.2 ,antialias = 1); 
gfx_a = mtr3shoot_a;
gfx_arc(fx_w*1.5 - mtr3rand*fx_w , fx_h*0.3 , fx_w*0.55 , 4.98-(1-mtr3bot)*0.42 , 4.98- 0.42 * (1- mtr3top ) ,antialias = 1); 

gfx_a = mtr4shoot_a;
gfx_arc(fx_w*0.52 , fx_h*0.7 , fx_w*0.3 , 0.9, 0.9+ (1- l5pmtr ) ,antialias = 1); 
gfx_arc(fx_w,fx_h , fx_h*0.92 + l5mtrbot * 30 , 6.05-abs(l9mtrd-1)*(l9mtr-l9mtrmin), 6.05 - (1- l9mtrmin ) ,antialias = 1); 


mtr1d == 1 ? (
  mtr1go < 3 ? (
    gfx_set(1,1,1,1);
    gfx_arc(fx_w*0.6 - mtr1* fx_w*0.03 , skyh*1.3  , skyh*1.0 , 5.9- (1-mtr1top)*0.802, 5.9 - (1- mtr1top )*0.8 ,antialias = 1); 
    );
  );
mtr2d == 1 ? (
  (mtr2go > 0) && (mtr2go < 3) ? (
    gfx_set(1,0.8,0,0.7);
    gfx_set(1,1,1,1);
    gfx_arc(fx_w*0.4 , fx_h*1.05 , fx_h*0.95 , 0.5 + (1-mtr2top)^1.5 *1.2, 0.5 + (1- mtr2top )^1.5 *1.21 ,antialias = 1); 
    );
  );
mtr3d == 1 ? (
  (mtr3go > 0) && (mtr3go < 3) ? (
    gfx_set(0.6,1,1,1);
    gfx_arc(fx_w*1.5 - mtr3rand*fx_w , fx_h*0.3 , fx_w*0.55 , 4.98-(1-mtr2top)*0.42 , 4.98- (1-mtr2top)*0.421 ,antialias = 1); 
    );
  );
























































// 
gfx_dest = 6;
gfx_x = fx_w/3;  gfx_y = skyh+spad*3 ;  gfx_getpixel(grr,grg,grb);

startup += 1 ;

/*
gfx_dest = 20;  
gfx_setimgdim(20, -1, -1);   gfx_setimgdim(20, fx_w, fx_h); 
gfx_mode = 1;
gfx_set(1,0.5,0.5,0.95);
gfx_rect(0,fx_h/8,fx_w/2,fx_h/1.2);
gfx_x = gfx_y = 0;
gfx_dest = 30;  gfx_mode = 0;
gfx_blit(20,1,0);
*/

// Blit mountain
gfx_dest = -1; 
gfx_set(0,0,0,1,0);
gfx_x = gfx_y = 0;
gfx_blit(7,0.5,0);

// Blit Master
gfx_dest = -1;
gfx_set(1,1,1,1,0);
gfx_blit(30,1,0,  0,0,fx_w,fx_h , 0,0,gfx_w,gfx_h);

// Blit stars
starmode == 2 ? (
  gfx_a = 1 - sbri*1.25 - dred*0; gfx_mode = 0;
  gfx_blit(3,1, (starx)/gfx_w - 0.25 , starx,0,gfx_w,gfx_h , spad*fxratx,spad*fxraty,gfx_w-spad*2*fxratx,gfx_h );
  );

// Blit Title (scaled)
gfx_dest = -1;
gfx_set(1,1,1,0.3 * (sbri+1),0);
gfx_x = gfx_y = 0;
gfx_blit(19,1,0);


/*
gfx_dest = -1;
fpsg += 1;
fpss >= srate ? (
  fps = fpsg;
  fpss = fpsg = 0;
  );
gfx_x = gfx_w*0.9 - gfx_texth * 4;
gfx_y = 2*r;
gfx_setfont(4,"Trebuchet MS",14*r);
gfx_set(1,1,1,1,0);
gfx_drawstr("fps: ");
gfx_drawnumber(fps,0);
*/

/*
// Mouse area check
gfx_dest = -1;
gfx_set(1,0.7,0,0.7,0);
gfx_rect(zmx1, zmy1, zmw, zmh);
*/

/*
BLIT destinations:
-1 screen
1 Sky
2 Grass
3 Stars
4 Flashlight
5 Saw                    
6 Grass Mountain
7 Mountain
8 Six tilted
9 Title
10 Meterlines
11 Draw Cloud
12 UpCloud (a = 0.95)
13 Ceiling
15 Saw + teeth + blur

19 Title scaling
20 Draw mount 1
21 Draw mount 2
23 Mounts combined

30 Master
31 Meters

*/
