{"id":6325,"date":"2026-08-19T15:19:20","date_gmt":"2026-08-19T15:19:20","guid":{"rendered":"https:\/\/baselunaire.fr\/?page_id=6325"},"modified":"2026-08-20T22:59:34","modified_gmt":"2026-08-20T22:59:34","slug":"s01b00-fanart-dune-fiction-fr","status":"publish","type":"page","link":"https:\/\/baselunaire.fr\/?page_id=6325","title":{"rendered":"<span style=\"color:#FFCC00;font-size:20px;\">S01B00 Fanart : DUNE-FICTION (FR)<\/span>"},"content":{"rendered":"<p>Pr\u00e9ambule :<\/p>\n<p><strong>Non-Espace<\/strong> : Technologie ixienne qui prot\u00e8ge un certain volume spatial de la prescience humaine. Cette capacit\u00e9 est d&rsquo;une importance strat\u00e9gique puisqu&rsquo;elle permet aux humains normaux de se prot\u00e9ger des individus de type Kwisatz. Le non-espace a \u00e9t\u00e9 suppos\u00e9ment invent\u00e9 des si\u00e8cles apr\u00e8s le r\u00e8gne de Muad&rsquo;dib. Emphase sur \u00ab\u00a0suppos\u00e9ment\u00a0\u00bb.<\/p>\n<p><strong>Non-vaisseau<\/strong> : vaisseau spatial PRL (i.e. \u00ab\u00a0Plus Rapide que la Lumi\u00e8re\u00a0\u00bb) \u00e9quip\u00e9 de technologie non-espace. Suppos\u00e9ment invent\u00e9 des si\u00e8cles apr\u00e8s le r\u00e8gne de Muad&rsquo;dib. Emphase sur \u00ab\u00a0suppos\u00e9ment\u00a0\u00bb.<\/p>\n<p><!-------------------------------------------------------------------------------------------------->\r\n<!------------------------------------------------------------------------BEGIN EPISODE SCRIPT CODE->\r\n<!-------------------------------------------------------------------------------------------------->\r\n <script type = \"glsl\" id = \"standard-vs\">\r\n\/\/ --------------------------------------\r\n\/\/ Vertex Shader, DO NOT MODIFY----------\r\n\/\/ --------------------------------------\r\nprecision mediump float;\r\nattribute vec4 a_Position;\r\n\/\/attribute vec4 a_Color;\r\nvoid main(){ gl_Position = a_Position;}\r\n<\/script>\r\n<script type = \"glsl\" id = \"standard-frag\">\r\n\/\/ ----------------------------------------\r\n\/\/ Fragment Shader, put your code here-----\r\n\/\/ ----------------------------------------\r\nprecision mediump float;\r\nuniform sampler2D tex00;\r\nuniform sampler2D tex01;\r\nuniform sampler2D tex02;\r\nuniform sampler2D tex03;\r\nuniform vec4 iMouse;\r\nuniform float iTime;\r\nuniform vec2 iResolution;\r\n\r\n#define s(a,b,c) smoothstep(a,b,c)\r\n#define doon(d,u,n) dune += clamp(dltime-d,0.,1.)*traceChar(vec2(1.0,-1.0)*p,u,vec2( c*n,0.));\r\n#define ix(a,b) Scene += vec4(1.0,0.05,0.0,1.0)*traceChar( 0.7*vec2(1.0,-1.0)*p,a, vec2(b,0.0));\r\n#define ar(a,b) Scene += vec4(1.0,0.50,0.0,1.0)*traceChar( 0.7*vec2(1.0,-1.0)*p,a, vec2(b,0.0));\r\n#define cr(a,b) col += CRcolor*traceChar( 0.7*vec2(1.0,-1.0)*p,a, vec2(b,0.0));\r\nfloat PI  = 3.14159;\r\nfloat WidthChar  = 0.031;\r\nfloat TxtTimeLength = 5.3265*1.0;\r\nfloat TotalDuration = 245.0*1.0 + 4.0*TxtTimeLength;\r\nfloat t;\r\n\r\nmat4 str0 = mat4( 5129554.0, 4801875.0, 4542023.0, 5129549.0, 2118484.0, 4806729.0, 5459525.0, 2108704.0, 4806729.0, 2957377.0, 4281120.0, 4541516.0, 13344.0, 0.0, 0.0, 0.0);\r\nmat4 str1 = mat4( 5132110.0, 5457197.0, 4407632.0, 4268101.0, 4805699.0, 2108486.0, 5260626.0, 5458258.0, 4595781.0, 5789004.0, 4539424.0, 4542496.0, 4543310.0, 4792389.0, 65.0, 0.0);\r\nmat4 str2 = mat4( 5395009.0, 4803393.0, 4530259.0, 2118739.0, 2114884.0, 5590862.0, 4277590.0, 4989013.0, 5447749.0, 4541013.0, 4464724.0, 5130535.0, 4805969.0, 5592133.0, 5457220.0, 46.0);\r\nmat4 str3 = mat4( 5525326.0, 2114898.0, 5457220.0, 5130580.0, 4805152.0, 5591379.0, 4464709.0, 5447749.0, 2119975.0, 4408644.0, 4539465.0, 4333650.0, 5129545.0, 5525332.0, 46.0, 0.0);\r\nmat4 str4 = mat4( 5590862.0, 4268115.0, 5132118.0, 5578835.0, 5120078.0, 5657935.0, 2116677.0, 5262661.0, 4543045.0, 3035733.0, 4280352.0, 2116693.0, 5395521.0, 4475205.0, 3035973.0, 0.0);\r\nmat4 str5 = mat4( 2116681.0, 5526341.0, 4541472.0, 5720864.0, 4281161.0, 2120276.0, 4473160.0, 4280901.0, 3033155.0, 2108974.0, 2118991.0, 5588304.0, 2577184.0, 2117189.0, 5587270.0, 11860.0);\r\nmat4 str6 = mat4( 5457229.0, 4279584.0, 5395529.0, 2118469.0, 4806729.0, 5459525.0, 5784864.0, 4540233.0, 2118734.0, 5132100.0, 5251139.0, 5461324.0, 4539424.0, 4805408.0, 3035981.0, 0.0);\r\nmat4 str7 = mat4( 5457220.0, 5394464.0, 4541007.0, 4805699.0, 5459535.0, 5591840.0, 5578834.0, 4595790.0, 5592149.0, 4857938.0, 4278345.0, 4661316.0, 4279361.0, 4805699.0, 4543825.0, 46.0);\r\nmat4 str8 = mat4( 2116681.0, 5588310.0, 5129548.0, 5447764.0, 5199425.0, 2118217.0, 2115923.0, 2119753.0, 5588304.0, 5447764.0, 5657173.0, 5396041.0, 11845.0, 0.0, 0.0, 0.0);\r\nmat4 str9 = mat4( 4532042.0, 4478292.0, 2114889.0, 5132100.0, 4988995.0, 4802599.0, 5198931.0, 4543049.0, 4661294.0, 5391701.0, 5457234.0, 4333614.0, 4281409.0, 5000265.0, 3035973.0, 0.0);\r\nmat4 str10 = mat4( 4671820.0, 5457230.0, 4277024.0, 4281173.0, 5457228.0, 5447726.0, 4280916.0, 4670804.0, 5457225.0, 5251118.0, 4803663.0, 5327188.0, 3032405.0, 4805408.0, 2118477.0, 33.0);\r\nmat4 str11 = mat4( 4542021.0, 4802386.0, 2108485.0, 4997443.0, 5002563.0, 2108499.0, 5001030.0, 2901321.0, 5589536.0, 4543571.0, 5197856.0, 2118229.0, 5395009.0, 4803393.0, 2170963.0, 0.0);\r\nmat4 str12 = mat4( 4540738.0, 5644366.0, 4543561.0, 4540960.0, 4281120.0, 4805449.0, 5316691.0, 2114901.0, 5457229.0, 4279584.0, 5395529.0, 2904901.0, 5591840.0, 4792402.0, 11352.0, 0.0);\r\nmat4 str13 = mat4( 5132115.0, 5251156.0, 5458258.0, 5587232.0, 4804640.0, 4540229.0, 5198880.0, 2118741.0, 5066563.0, 2114893.0, 2114890.0, 2114892.0, 4805971.0, 3026515.0, 46.0, 0.0);\r\nmat4 str14 = mat4( 2116681.0, 4804420.0, 5129558.0, 5185620.0, 4801858.0, 5447762.0, 5459521.0, 4277792.0, 4543573.0, 2113824.0, 5525326.0, 2114898.0, 5262661.0, 4543045.0, 21077.0, 0.0);\r\nmat4 str15 = mat4( 5590867.0, 5251155.0, 5130565.0, 4464709.0, 5133607.0, 4530245.0, 4543576.0, 4803922.0, 5521742.0, 5132105.0, 5198880.0, 4997460.0, 11845.0, 0.0, 0.0, 0.0);\r\nmat4 str16 = mat4( 5457228.0, 5391904.0, 4541765.0, 2904910.0, 4279584.0, 5392204.0, 4988997.0, 5395781.0, 4281888.0, 4543571.0, 5197088.0, 4539470.0, 4281120.0, 4281941.0, 17735.0, 0.0);\r\nmat4 str17 = mat4( 2118725.0, 2114892.0, 5132099.0, 5198420.0, 2114892.0, 2114884.0, 4532044.0, 4409680.0, 2108485.0, 2114894.0, 5132115.0, 4661332.0, 5391701.0, 5054533.0, 5588297.0, 11864.0);\r\nmat4 str18 = mat4( 5459017.0, 5194784.0, 4544073.0, 2118734.0, 4538959.0, 2118217.0, 5128531.0, 4595795.0, 5526849.0, 4268101.0, 5054549.0, 4474945.0, 2108489.0, 5587280.0, 11340.0, 0.0);\r\nmat4 str19 = mat4( 5390659.0, 4989472.0, 2115925.0, 5588307.0, 5251148.0, 5526853.0, 4541472.0, 4399187.0, 4476495.0, 5392725.0, 4268101.0, 4279328.0, 4803616.0, 5391682.0, 2245972.0, 46.0);\r\nmat4 str20 = mat4( 2118725.0, 2114890.0, 4804420.0, 5447763.0, 5657157.0, 2118217.0, 2118977.0, 4540749.0, 2119765.0, 5457229.0, 4279584.0, 5395529.0, 2118469.0, 4806729.0, 5459525.0, 44.0);\r\nmat4 str21 = mat4( 5128531.0, 5316691.0, 4804437.0, 4999456.0, 5054547.0, 4605223.0, 4407622.0, 5198405.0, 2118734.0, 5590864.0, 5513298.0, 4871503.0, 5395791.0, 2170963.0, 0.0, 0.0);\r\nmat4 str22 = mat4( 5590868.0, 2108499.0, 5590862.0, 4464723.0, 4276805.0, 4281428.0, 2118734.0, 5132099.0, 4543060.0, 4541472.0, 4539424.0, 4805715.0, 3026510.0, 46.0, 0.0, 0.0);\r\nmat4 str23 = mat4( 5590868.0, 2108499.0, 4805200.0, 5132115.0, 4540750.0, 2118482.0, 5580612.0, 4857934.0, 2118981.0, 4997447.0, 5522241.0, 5591369.0, 4399173.0, 4543826.0, 11852.0, 0.0);\r\nmat4 str24 = mat4( 4542037.0, 5591840.0, 4543561.0, 5130528.0, 5130566.0, 2901321.0, 4342048.0, 5395795.0, 2901316.0, 2573344.0, 4673093.0, 5129554.0, 4540225.0, 11859.0, 0.0, 0.0);\r\nmat4 str25 = mat4( 5590867.0, 5391942.0, 4410945.0, 2108485.0, 5653828.0, 5392719.0, 5251116.0, 5657935.0, 5392719.0, 4530220.0, 5395534.0, 4279365.0, 5457219.0, 2113824.0, 5394253.0, 11860.0);\r\nmat4 str26 = mat4( 5525065.0, 4279877.0, 4541506.0, 2105632.0, 4269898.0, 4464713.0, 4410959.0, 4998432.0, 5194305.0, 2114898.0, 2117205.0, 4279376.0, 4464718.0, 5653799.0, 4805441.0, 20047.0);\r\nmat4 str27 = mat4( 4805969.0, 4543008.0, 4805969.0, 5526085.0, 5133600.0, 4464709.0, 4544073.0, 4805458.0, 2117199.0, 5130566.0, 4541505.0, 5578796.0, 2114894.0, 4805187.0, 2901331.0, 0.0);\r\nmat4 str28 = mat4( 4802113.0, 4464718.0, 5644357.0, 4541519.0, 5578834.0, 5120078.0, 2969167.0, 4800854.0, 4543315.0, 2905409.0, 2575648.0, 5513305.0, 4541509.0, 4278339.0, 4540242.0, 82.0);\r\nmat4 str29 = mat4( 2118725.0, 4805958.0, 4268114.0, 4539424.0, 4399187.0, 5525061.0, 5130561.0, 2118469.0, 4269892.0, 4542030.0, 2970437.0, 5068108.0, 5391689.0, 3026501.0, 46.0, 0.0);\r\nmat4 str30 = mat4( 2114890.0, 5132102.0, 2114883.0, 5391702.0, 5578835.0, 4989006.0, 5130575.0, 4800852.0, 5513294.0, 5590866.0, 5197344.0, 2904649.0, 5001248.0, 4673103.0, 11333.0, 0.0);\r\nmat4 str31 = mat4( 5198406.0, 2114892.0, 4544065.0, 5251139.0, 4408658.0, 4805449.0, 2117199.0, 4728652.0, 4805199.0, 5132122.0, 4539424.0, 4530259.0, 5129558.0, 4541765.0, 5461070.0, 0.0);\r\nmat4 str32 = mat4( 4800844.0, 4281171.0, 2118734.0, 5132100.0, 4268099.0, 4280914.0, 5458251.0, 4277280.0, 2118478.0, 5457228.0, 4281120.0, 4541506.0, 4464723.0, 5513301.0, 5262661.0, 11859.0);\r\nmat4 str33 = mat4( 5054513.0, 5000265.0, 5132105.0, 2573344.0, 5131841.0, 5457221.0, 4988974.0, 5784871.0, 5130580.0, 4805699.0, 2117199.0, 2114884.0, 4728652.0, 4279637.0, 5523790.0, 11845.0);\r\nmat4 str34 = mat4( 5196865.0, 2118482.0, 4540483.0, 4530258.0, 4542541.0, 5588306.0, 2108498.0, 5395795.0, 5785888.0, 4543008.0, 5128528.0, 2118468.0, 2113876.0, 5395782.0, 5395781.0, 8480.0);\r\nmat4 str35 = mat4( 4800854.0, 4543315.0, 5788993.0, 4595756.0, 5064018.0, 5459525.0, 4988972.0, 4410945.0, 5513285.0, 2117199.0, 4737354.0, 2114625.0, 5652818.0, 4540225.0, 2118229.0, 33.0);\r\nmat4 str36 = mat4( 2118996.0, 4344140.0, 4543045.0, 5456210.0, 5001248.0, 2118485.0, 4543825.0, 5592096.0, 4541984.0, 2575392.0, 4279625.0, 5130567.0, 3035973.0, 0.0, 0.0, 0.0);\r\nmat4 str37 = mat4( 2118996.0, 2114893.0, 5132100.0, 5391694.0, 2118465.0, 4542037.0, 4735776.0, 4410945.0, 2108485.0, 4408129.0, 4411218.0, 2966856.0, 4804436.0, 4801056.0, 2903621.0, 0.0);\r\nmat4 str38 = mat4( 4269892.0, 5590606.0, 5391692.0, 2575392.0, 5194305.0, 5130573.0, 4805697.0, 2117199.0, 2118980.0, 4737354.0, 2114625.0, 5526850.0, 5391692.0, 5129545.0, 8480.0, 0.0);\r\nmat4 str39 = mat4( 4544065.0, 5513283.0, 2117199.0, 4475201.0, 2108485.0, 4794188.0, 4399169.0, 5131855.0, 5523777.0, 2113874.0, 4542037.0, 5197344.0, 4544085.0, 4541516.0, 5391648.0, 11845.0);\r\nmat4 str40 = mat4( 5459790.0, 4279584.0, 4802627.0, 5457230.0, 5129504.0, 5130566.0, 4803616.0, 4543042.0, 2108499.0, 5265477.0, 5394252.0, 5525057.0, 2575392.0, 4804181.0, 5391702.0, 11859.0);\r\nmat4 str41 = mat4( 2114892.0, 5129543.0, 2114898.0, 5068104.0, 5130561.0, 4539424.0, 4800838.0, 5447764.0, 5459521.0, 4541472.0, 5197088.0, 4476489.0, 2114898.0, 5066563.0, 5521730.0, 8480.0);\r\nmat4 str42 = mat4( 2118725.0, 2113868.0, 4543056.0, 4801363.0, 4410949.0, 4464709.0, 4923477.0, 5458263.0, 5919809.0, 4541984.0, 4543520.0, 4281120.0, 4544085.0, 2113874.0, 5456208.0, 46.0);\r\nmat4 str43 = mat4( 2118977.0, 4542275.0, 2118229.0, 2118980.0, 5132110.0, 5457197.0, 4407632.0, 2108485.0, 5525332.0, 4541505.0, 5129549.0, 4792404.0, 4806222.0, 4344147.0, 5457228.0, 44.0);\r\nmat4 str44 = mat4( 5590862.0, 5447763.0, 5066063.0, 2118469.0, 4670796.0, 5132105.0, 2109011.0, 5521744.0, 5129545.0, 3035988.0, 5588512.0, 4805714.0, 3035974.0, 5394464.0, 5461061.0, 46.0);\r\nmat4 str45 = mat4( 2114892.0, 5526854.0, 2118229.0, 5263425.0, 5526081.0, 5129545.0, 4268116.0, 2119765.0, 4407629.0, 5130568.0, 2118469.0, 5457220.0, 5067343.0, 5458241.0, 46.0, 0.0);\r\n\r\n\r\nmat2 r( float a ){ float c = cos(a), s = sin(a); return mat2( c, s, -s, c ); }\r\nfloat noise(vec2 st) { return fract( sin( dot( st.xy, vec2(12.9898,78.233)))*43758.5453123 ); }\r\nfloat TriangleWave(vec2 p){ return abs(mod(p.x,2.0) - 1.0 );}\r\nfloat metaDiamond(vec2 p, vec2 pixel, float r){vec2 d = abs(p-pixel);return r \/ (d.x + d.y);}\r\nvec2 dw0(vec2 p){vec2 dist;float ampli1=0.06;mat2 rm= mat2(0.7);for( float i = 0.0; i<3.0; i++ ){dist = 100.0*texture2D(tex00,0.00005*rm*(p + vec2(0.03*sin(0.0*iTime),0.01*sin(0.0*iTime)))).xy;p += ampli1*dist;rm *= rm*8.0;};return p;}\r\n\r\n\/\/ Smoothed 1D Value Noise Please\r\nfloat f(in vec2 v_p)\r\n{\r\n      float pvpx = 2.0*v_p.x;\r\n      float VarX1 = 0.5*floor(pvpx);\r\n      float VarX2 = 0.5*floor(pvpx + 1.0);\r\n      float VarD0 = fract(pvpx);\r\n      return mix(noise(vec2(VarX1)),noise(vec2(VarX2)),s(0.0,1.0,VarD0));\r\n}\r\n\r\nvec4 baseChar(in vec2 p)\r\n{\r\n     vec3 bc = vec3(0.0,0.0,0.0);\r\n     bc += s(0.01,0.0,-p.x)*vec3(s(0.005,0.0,abs(length(p)-0.10)-0.01));\r\n     bc = max(bc,s(0.01,0.0, abs(p.x+0.05)-0.05)*vec3(s(0.005,0.0,abs( abs(p.y)-0.10)-0.01)));\r\n     return vec4(bc,1.0);\r\n}\r\n\r\nfloat traceChar( in vec2 v,int charac, vec2 PosTxt)\r\n{\r\n      float colorChar = 0.0;\r\n      float XOffsetTuning = 0.002;\r\n\r\n      if(charac==87)XOffsetTuning += 0.0060;\r\n      if(charac==73)XOffsetTuning += 0.0025;\r\n      if(charac==78)XOffsetTuning += 0.0025;\r\n      if( v.x > PosTxt.x && v.x < PosTxt.x + 1.0\/16.0 )\r\n      {\r\n          if( v.y > PosTxt.y && v.y < PosTxt.y + 1.0\/16.0 )\r\n          {\r\n              vec2 Disp = vec2(mod(float(charac),16.0),floor(float(charac) \/ 16.0))\/16.0;\r\n              colorChar = texture2D(tex03,vec2(Disp  +vec2(XOffsetTuning,0.0)+ (v - PosTxt))).x;\r\n          };\r\n      };\r\n      return colorChar;\r\n}\r\n\r\nvec4 traceStr(vec2 p, int s,float begin)\r\n{\r\n     mat4 matxt;\r\n     vec4 ColorTxt = vec4(1.0,0.7,0.3,1.0);\r\n     if( s ==   0 )matxt =  str0,ColorTxt = vec4(1.0);\r\n     if( s ==   1 )matxt =  str1,ColorTxt = vec4(1.0);\r\n     if( s ==   2 )matxt =  str2;\r\n     if( s ==   3 )matxt =  str3;\r\n     if( s ==   4 )matxt =  str4;\r\n     if( s ==   5 )matxt =  str5;\r\n     if( s ==   6 )matxt =  str6;\r\n     if( s ==   7 )matxt =  str7;\r\n     if( s ==   8 )matxt =  str8;\r\n     if( s ==   9 )matxt =  str9;\r\n     if( s ==  10 )matxt = str10;\r\n     if( s ==  11 )matxt = str11;\r\n     if( s ==  12 )matxt = str12;\r\n     if( s ==  13 )matxt = str13;\r\n     if( s ==  14 )matxt = str14;\r\n     if( s ==  15 )matxt = str15;\r\n     if( s ==  16 )matxt = str16;\r\n     if( s ==  17 )matxt = str17;\r\n     if( s ==  18 )matxt = str18;\r\n     if( s ==  19 )matxt = str19;\r\n     if( s ==  20 )matxt = str20;\r\n     if( s ==  21 )matxt = str21;\r\n     if( s ==  22 )matxt = str22;\r\n     if( s ==  23 )matxt = str23;\r\n     if( s ==  24 )matxt = str24;\r\n     if( s ==  25 )matxt = str25;\r\n     if( s ==  26 )matxt = str26;\r\n     if( s ==  27 )matxt = str27;\r\n     if( s ==  28 )matxt = str28;\r\n     if( s ==  29 )matxt = str29;\r\n     if( s ==  30 )matxt = str30;\r\n     if( s ==  31 )matxt = str31;\r\n     if( s ==  32 )matxt = str32;\r\n     if( s ==  33 )matxt = str33;\r\n     if( s ==  34 )matxt = str34;\r\n     if( s ==  35 )matxt = str35;\r\n     if( s ==  36 )matxt = str36;\r\n     if( s ==  37 )matxt = str37;\r\n     if( s ==  38 )matxt = str38;\r\n     if( s ==  39 )matxt = str39;\r\n     if( s ==  40 )matxt = str40;\r\n     if( s ==  41 )matxt = str41;\r\n     if( s ==  42 )matxt = str42;\r\n     if( s ==  43 )matxt = str43;\r\n     if( s ==  44 )matxt = str44;\r\n     if( s ==  45 )matxt = str45;\r\n\r\n     vec4 ColorCh    = vec4(0.0);\r\n     int char_cursor = 0;\r\n     int nb_char     = 0;\r\n     for( int i = 0; i < 4; i++)\r\n     {\r\n          for( int j = 0; j < 4; j++)\r\n          {\r\n               if( matxt[i][j] >   0.0       )nb_char += 1;\r\n               if( matxt[i][j] > 256.0       )nb_char += 1;\r\n               if( matxt[i][j] > 256.0*256.0 )nb_char += 1;\r\n          };\r\n     };\r\n\r\n     p += vec2(WidthChar*(float(nb_char)+1.)\/2.0,0.0);\r\n     float Grid = s(0.9,0.0,length(fract(180.0*p)-vec2(0.5))-0.3);\r\n     if(s > 1)\r\n     {\r\n        ColorCh += 0.50*vec4(1.0,0.3,0.3,1.0)*s(0.04,0.0,abs(p.y-1.03));\r\n        ColorCh += 0.15*vec4(1.0,0.7,0.0,1.0)*s(0.01,0.0,abs(p.y-1.03)-0.003*sin(10.*(p.x+t)));\r\n        ColorCh += 0.25*texture2D(tex00,0.05*(p+vec2(0.2*t,-0.4*t*sign(p.y-1.03))));\r\n     };\r\n\r\n     if(t-begin<0.05)\r\n     {\r\n\r\n        if(s>1)return vec4(1.0,0.3,0.3,1.0)*metaDiamond(p,vec2(clamp(WidthChar*(float(nb_char)+1.)-25.0*(t-begin),0.0,200.0)+WidthChar,1.029),0.02);\r\n     }else{\r\n        if(s>1)ColorCh+=vec4(1.0,0.5,0.3,1.0)*metaDiamond(p,vec2(float(char_cursor)+clamp(floor((t-begin)\/0.02)+1.0,0.0,float(nb_char)+3.0)*WidthChar,1.029),0.02*(1.0+0.8*abs(sin(40.0*t))));\r\n        for( int i = 0; i < 4; i++)\r\n        {\r\n          for(int j = 0; j < 4; j++)\r\n          {\r\n              float car3 = floor(matxt[i][j]\/(256.0*256.0));\r\n              float car2 = floor(fract(matxt[i][j]\/(256.0*256.0))*256.0);\r\n              float car1 = matxt[i][j]-car2*256.0-car3*256.0*256.0;\r\n\r\n              if(float(char_cursor)<floor((t-begin)\/0.02))ColorCh = mix(ColorCh,vec4(0.95)+clamp(0.5*(f(vec2(5.0*t+0.05*float(char_cursor)))),0.0,1.0),traceChar(p,int(car1),vec2(0.0,1.0)));\r\n              char_cursor++;\r\n              if(float(char_cursor)==float(nb_char))break;\r\n              p += vec2(-WidthChar,0.0);\r\n\r\n              if(float(char_cursor)<floor((t-begin)\/0.02))ColorCh = mix(ColorCh,vec4(0.95)+clamp(0.5*(f(vec2(5.0*t+0.05*float(char_cursor)))),0.0,1.0),traceChar(p,int(car2),vec2(0.0,1.0)));\r\n              char_cursor++;\r\n              if(float(char_cursor)==float(nb_char))break;\r\n              p += vec2(-WidthChar,0.0);\r\n\r\n              if(float(char_cursor)<floor((t-begin)\/0.02))ColorCh = mix(ColorCh,vec4(0.95)+clamp(0.5*(f(vec2(5.0*t+0.05*float(char_cursor)))),0.0,1.0),traceChar(p,int(car3),vec2(0.0,1.0)));\r\n              char_cursor++;\r\n              if(float(char_cursor)==float(nb_char))break;\r\n              p += vec2(-WidthChar,0.0);\r\n          };\r\n          if(float(char_cursor)==float(nb_char))break;\r\n        };\r\n     };\r\n     return ColorTxt*ColorCh*Grid;\r\n}\r\n\r\nvec4 drawWormRider(in vec2 p)\r\n{\r\n     float T = iTime;\r\n     vec4 WR= vec4(0.0,0.0,0.0,1.0);\r\n\r\n     \/\/ Zoom Back\r\n     p*= 5.0;\r\n\r\n     \/\/ Left Cable In The Wind\r\n     p+=vec2(-0.1,-0.3);\r\n     if(p.x<0.0 && p.y>-0.8)WR = mix(WR,vec4(1.0),s(0.01,0.0,abs(p.y-p.x+0.07*p.x*sin(10.0*p.x+30.0*T) - 0.22)-0.011));\r\n     p-=vec2(-0.1,-0.3);\r\n\r\n     \/\/ Add x-Noise For Fabric Wrinkles.\r\n     p+= vec2(0.02*f(vec2(20.0*p.y + 0.25*cos(50.*T))),0.0);\r\n\r\n     \/\/ Left Leg\r\n     vec2 wr1 = r(-PI\/2.0-0.7)*p;\r\n     WR = mix( WR,\r\n               vec4(0.85),                                             \/\/ Clearer Because Further.\r\n               s(0.01,0.0,abs(wr1.y-0.1*tan(sin(5.0*wr1.x-1.5)))-0.14) \/\/ Tansin leg ! :)\r\n              *s(0.01,0.0,abs(wr1.x+0.1)-0.9)                          \/\/ Upper Limit\r\n              *s(0.0,0.01,wr1.x-4.0*wr1.y*wr1.y+0.9)                   \/\/ Foot Limit\r\n             );\r\n\r\n     \/\/   Right Leg\r\n     vec2 wr2 = r(-PI\/2.0)*p;\r\n     WR = mix( WR,\r\n               vec4(1.0),\r\n               s(0.01,0.0,abs(wr2.y-0.1*tan(sin(5.0*wr2.x-1.5))-0.6)-0.14)\r\n              *s(0.01,0.0,abs(wr2.x+0.2)-0.7)\r\n              *s(0.0,0.01,p.x-2.0*(wr2.y-0.7)*(wr2.y-0.7)+0.9)\r\n             );\r\n\r\n     \/\/ Head\r\n     vec2 wr4 = r(-0.14)*p;\r\n     WR = mix(WR,\r\n              vec4(1.0)-0.5*s(0.01,0.0,abs(wr4.y-1.35+0.05*f(vec2(T)))-0.03-0.15*wr4.x)*s(0.01,0.0,abs(wr4.x-0.05)-0.1),\r\n              s(0.01,0.0,length(vec2(0.95,0.9)*wr4-vec2(-0.05,1.2-0.05*f(vec2(T))))-0.2)\r\n             );\r\n     p-= vec2(0.02*f(vec2(20.0*p.y)),0.0);\r\n     if(p.x>0.0 && p.y>-0.25)WR = mix(WR,vec4(1.0),s(0.01,0.0,abs(p.y+0.10*p.x+0.005*p.x*cos(p.x-50.0*T+2.1) - 0.60+0.05*f(vec2(1.0*T)))-0.005));\r\n\r\n     \/\/ Left Arm\r\n     vec2 wr5 = r(0.6+0.1*f(vec2(1.0*T)))*(p + vec2(0.15,-0.75));\r\n     WR = mix( WR,\r\n               vec4(0.5),\r\n               s(0.01,0.0,abs(wr5.y-0.1*tan(sin(5.0*wr5.x-1.5)))-0.10)*s(0.01,0.0,abs(wr5.x)-0.35)\r\n             );\r\n\r\n     vec2 wr7 = r(0.0)*(wr5 + vec2(-0.4,-0.03));\r\n     WR= mix(WR,vec4(0.5),s(0.01,0.0,abs(wr7.x)-0.075-0.02*abs(sin(75.*wr7.y)))*s(0.01,0.0,abs(wr7.y)-0.075));\r\n\r\n     \/\/   Torso\r\n     vec2 wr3= r(0.25)*(p+vec2(0.0,-0.60));\r\n     WR = mix(WR,vec4(1.0),s(0.01,0.0,abs(wr3.x+0.5)-0.20)*s(0.01,0.0,abs(wr3.y)-0.45));\r\n\r\n     if(p.x>0.0 && p.y>-0.25)WR = mix(WR,vec4(1.0),s(0.01,0.0,abs(p.y+0.15*p.x+0.005*p.x*cos(p.x-50.0*T) - 0.42-0.05*f(vec2(0.5*T)))-0.005));\r\n\r\n     \/\/ Right Arm\r\n     vec2 wr6 = r(0.8-0.1*f(vec2(0.5*T)))*(p + vec2(0.005,-0.61));\r\n     wr6+= vec2(0.0,0.02*f(vec2(20.0*p.y)));\r\n     WR = mix( WR,\r\n               vec4(1.0),\r\n               s(0.01,0.0,abs(wr6.y-0.1*tan(sin(5.0*wr6.x-1.5)))-0.10)*s(0.01,0.0,abs(wr6.x)-0.4)\r\n             );\r\n\r\n     wr6-= vec2(0.0,0.02*f(vec2(20.0*p.y)));\r\n     vec2 wr8 = r(0.6-0.1*f(vec2(0.5*T)))*(p + vec2(0.1,-0.54)) + vec2(-0.48,-0.07);\r\n     WR= mix(WR,vec4(1.0),s(0.02,0.0,abs(wr8.x)-0.075-0.015*abs(sin(75.*wr8.y)))*s(0.01,0.0,abs(wr8.y)-0.075));\r\n     wr8*=r(-1.2+0.2*f(vec2(T)));\r\n     WR=mix(WR,vec4(1.0),s(0.01,0.0,abs(wr8.x+0.015*TriangleWave(vec2(15.0*wr8.y))+0.08)-0.008)*s(0.01,0.0,abs(wr8.y)-0.1));\r\n\r\n     p+=vec2(-0.4,-0.1);\r\n     if(p.x<0.0 && p.y >-0.8)WR = mix(WR,vec4(1.0),s(0.01,0.0,abs(p.y-p.x+0.1*p.x*sin(12.0*p.x+30.0*T) - 0.22)-0.011));\r\n     p-=vec2(-0.4,-0.1);\r\n\r\n     \/\/Cape\r\n     if(p.x<-0.4)WR = mix( WR,\r\n                           vec4(1.0),\r\n                           s(0.01,0.0,p.y-0.25*abs(clamp(p.x+0.45,-1.0,0.0))*f(vec2(p.x+11.0*T))-1.27-0.1*p.x)\r\n                           *s(0.0,0.01,p.y-0.25*abs(clamp(p.x+0.45,-1.0,0.0))*f(vec2(p.x+9.0*T))-0.17-0.01+0.1*p.x)\r\n                         );\r\n\r\n     return WR;\r\n}\r\n\r\nvec4 drawOrnis(in vec2 p)\r\n{\r\n     float T = iTime;\r\n     vec4 Ornis= vec4(0.0,0.0,0.0,1.0);\r\n     p.y+=0.05*f(vec2(1.0*T));\r\n     vec2 g = floor(20.0*p);\r\n     vec2 h = fract(20.0*p);\r\n\r\n     if(f(vec2(g.x))>0.985)if(g.y==4.0)\r\n     {\r\n        h*=r(-0.25);\r\n        Ornis = vec4(1.0)*clamp(s(0.01,0.0,length(vec2(.5,2.0)*(h-vec2(0.5,0.50)))-0.2)-s(0.01,0.0,length(vec2(.5,2.0)*(h-vec2(0.2,0.48)))-0.2),0.0,1.0)\r\n                +s(0.001,0.0,abs(h.x-0.4)-0.35)*s(0.001,0.0,abs(h.y-0.55)-0.04-0.02*sin(20.0*h.x));\r\n     };\r\n     return Ornis;\r\n}\r\n\r\nvec4 drawWings(in vec2 p)\r\n{\r\n     float T = iTime;\r\n     vec4 Wings= vec4(0.0,0.0,0.0,1.0);\r\n     p.y+=0.05*f(vec2(1.0*T));\r\n     vec2 g = floor(20.0*p);\r\n     vec2 h = fract(20.0*p);\r\n     if(f(vec2(g.x))>0.985)if(g.y==4.0)\r\n     {\r\n        h*=r(-0.25);\r\n        Wings=vec4(1.0)*(0.15*pow(0.15\/length(h-vec2(0.7,0.6)),2.0)*abs(sin(50.0*T))\r\n                        +0.15*pow(0.15\/length(h-vec2(0.6,0.6)),2.0)*abs(sin(50.0*T))\r\n                        +0.15*pow(0.15\/length(h-vec2(0.6,0.5)),2.0)*abs(sin(50.0*T))\r\n                        +0.15*pow(0.15\/length(h-vec2(0.5,0.5)),2.0)*abs(sin(50.0*T)));\r\n     };\r\n     return Wings;\r\n}\r\n\r\nvec4 Scene6(vec4 col, vec2 p, float t,float arraktime)\r\n{\r\n     vec2 DayTime;\r\n     if(arraktime<=1.0)DayTime = vec2(clamp(arraktime,0.0,1.0));\r\n     if(arraktime> 1.0)DayTime = vec2(1.0);\r\n     vec4 DayTimeSkyColorTop = mix(vec4(0.05,0.05,0.3,1.0),vec4(0.1,0.7,1.0,1.0),DayTime.x);\r\n     vec4 DayTimeSkyColorHor = mix(vec4(0.1 ,0.7 ,1.0,1.0),vec4(1.0,0.7,0.5,1.0),DayTime.x);\r\n\r\n     p*=1.2;\r\n     vec2 save = p;\r\n     float T = 5.0*t;\r\n     float Speed = 0.2;\r\n\r\n     \/\/ Begin Atmo + Desert\r\n     p.y -= 0.11;\r\n\r\n     \/\/ Gradient Atmo\r\n     col = mix(DayTimeSkyColorTop,DayTimeSkyColorHor,s(0.5,0.0,abs(p.y)));\r\n\r\n     \/\/ Canopus\r\n     if(p.y>-0.05)col += s(0.1,0.0,length(p-vec2(0.5*DayTime.x,0.5*(1.0-DayTime.x)))-0.02),\r\n                  col += 0.2*s(0.1,0.0,length(p-vec2(0.5*DayTime.x,0.5*(1.0-DayTime.x)))-0.025-0.05*f(vec2( 4.0*atan(p.y-0.5*(1.0-DayTime.x),p.x-0.5*DayTime.x)+0.25*T))),\r\n                  col += 0.2*s(0.1,0.0,length(p-vec2(0.5*DayTime.x,0.5*(1.0-DayTime.x)))-0.025-0.05*f(vec2(-8.0*atan(p.y-0.5*(1.0-DayTime.x),p.x-0.5*DayTime.x)+0.50*T)));\r\n\r\n     \/\/ Moon1\r\n     vec2 M1 = r(2.0*DayTime.x)*(p+vec2(0.0,-0.2));\r\n     vec4 C1 = vec4(1.0,0.9,0.7,1.0);\r\n     C1 -= 0.2*texture2D(tex02,r(-2.0*DayTime.x)*5.0*M1\/(1.0-10.0*dot(M1,M1))+vec2(0.001*T,0.0)).xxxx;\r\n     C1 -= 0.5*s(0.1,0.0,length(M1 -vec2(0.0,-0.1))-0.15);\r\n     C1 += s(0.02,0.0,abs(length(M1)-0.15)-0.001)*s(0.0,0.5,M1.y);\r\n     col=mix( col,C1,s(0.005,0.0,length(M1)-0.15));\r\n\r\n     \/\/ Moon2\r\n     vec2 M2 = r(2.0*DayTime.x)*(p+vec2(0.1,-0.15));\r\n     vec4 C2 = vec4(1.0,0.9,0.7,1.0);\r\n     C2 -= 0.2*texture2D(tex01,r(-2.0*DayTime.x)*5.0*M2\/(1.0-5.0*dot(M2,M2))+vec2(0.001*T,0.0)).xxxx;\r\n     C2 -= 0.5*s(0.05,0.0,length(M2 -vec2(-0.02,-0.1))-0.1);\r\n     C2 += 0.5*s(0.02,0.0,abs(length(M2)-0.05)-0.001)*s(0.0,0.1,M2.y);\r\n     col=mix( col, C2,s(0.005,0.0,length(M2)-0.05));\r\n\r\n     \/\/ Flat Desert\r\n     if(p.y<0.0)col  = vec4(0.99,0.88,0.77,1.0)*texture2D(tex01,0.01*vec2(p.x\/p.y - 15.0*Speed*T,1.0\/p.y)).xxxx,\r\n                col += vec4(0.25,0.25,0.15,1.0)*s(0.9,0.0,abs(p.y)-0.01);\r\n\r\n     p.y += 0.11;\r\n     \/\/ End Atmo + Desert\r\n\r\n     p*=2.0;\r\n\r\n     \/\/ First Cloud Bar\r\n     vec4  CB1Color = vec4(0.8,0.90,0.99,1.0)*(1.0-0.3*s(0.1,0.0,p.y-.06*p.x*p.x-0.23-0.005*abs(p.x)));\r\n     float CB1Shape = s(0.02,0.0,p.y-0.06*p.x*p.x-0.0500*abs(p.x)*f(vec2( 4.0*p.x+154.3+0.1*T))\r\n                                                 -0.0250*abs(p.x)*f(vec2(16.0*p.x+154.3+0.1*T))\r\n                                                 -0.0030*abs(p.x)*f(vec2(80.0*p.x+154.3+0.1*T))\r\n                                                 -0.45);\r\n     CB1Shape *= s(0.0,0.02,p.y-0.06*p.x*p.x-0.010*f(vec2(16.0*p.x+154.3))-0.46);\r\n     CB1Shape *= s(0.0,0.25,abs(0.50*p.x)-0.1);\r\n     col = mix(col,CB1Color,CB1Shape);\r\n\r\n     p*=0.5;\r\n\r\n     \/\/ Second Cloud Bar\r\n     float CB2Shape = 0.75*s(0.01,0.0,p.y-0.25*p.x*p.x-0.0500*abs(p.x)*f(vec2( 4.0*p.x+154.3+0.1*T))\r\n                                                      -0.0250*abs(p.x)*f(vec2(16.0*p.x+ 15.2+0.1*T))\r\n                                                      -0.0030*abs(p.x)*f(vec2(80.0*p.x+ 15.2+0.1*T))\r\n                                                      -0.28);\r\n     CB2Shape *= s(0.0,0.01,p.y-0.25*p.x*p.x-0.010*f(vec2(16.0*p.x+154.3))-0.29);\r\n     CB2Shape *= s(0.0,0.5,abs(0.50*p.x)-0.1);\r\n     col+=CB2Shape;\r\n\r\n     \/\/ Mesa Line\r\n     p.y-=0.01;\r\n\r\n     p.x-=0.002*f(vec2(150.0*p.y));\r\n     vec4 MesaColor = texture2D(tex01,2.0*vec2(1.0,0.4)*(p+vec2(0.001*T,0.0)));\r\n     MesaColor *= 0.7+0.3*vec4(1.0,0.8,0.5,1.0)*s(0.005,0.0,abs(p.y-0.17-0.005*f(vec2(19.0*p.x+0.019*T))+0.003*f(vec2(150.0*p.x + 0.15*T)))-0.04);\r\n     MesaColor *= 0.5+0.5*s(1.0,0.0,abs(f(vec2(10.0*p.x+0.01*T)))-0.25);\r\n     MesaColor += 0.3*texture2D(tex01,vec2(0.25,1.0)*(p+vec2(0.001*T,0.0)));\r\n     MesaColor -= 0.07*s(0.10,0.0,f(vec2(200.0*p.y+0.5*f(vec2(150.0*(p.x+0.001*T))))));\r\n     MesaColor -= 0.15*s(0.05,0.0,p.y+0.1*f(vec2(50.0*(p.x+0.001*T)))-0.20);\r\n     MesaColor += 0.15*s(0.01-0.01*f(vec2(50.0*p.x+0.05*T)),.0,abs(p.y-0.025*f(vec2(5.0*p.x+0.005*T+123.4))-0.21+0.015*f(vec2(30.0*p.x+0.03*T)))-0.001);\r\n     float MesaShape = s(0.001,0.00,clamp(p.y,0.0,0.15)-0.1*f(vec2(5.0*p.x + 0.005*T+123.4))-0.1);\r\n     MesaShape *= s(0.001,.0,p.y-0.025*f(vec2(5.0*p.x+0.005*T+123.4))-0.21+0.015*f(vec2(30.0*p.x+0.03*T)));\r\n     MesaShape *= s(0.0,0.001,p.y-0.1);\r\n     MesaShape *= s(0.005,0.0,p.y-0.200*f(vec2( 20.0*p.x+0.020*T))+0.1\r\n                                 -0.100*f(vec2(  3.0*p.x+0.003*T))+0.05\r\n                                 +0.015*f(vec2(200.0*p.x+0.200*T))-0.27);\r\n     col=mix(col,(1.0-0.5*DayTime.x)*MesaColor,MesaShape);\r\n\r\n     \/\/ Wrinkling everything (might need repositioning)\r\n     p.x+=0.002*f(vec2(150.0*p.y));\r\n     \r\n     \/\/ Height Adjustment\r\n     p.y+=0.005;\r\n\r\n     \/\/ Distant Dune Field\r\n     vec4 ColorDuneField = vec4(1.0,0.9,0.7,1.0);\r\n     ColorDuneField-=0.1*texture2D(tex00,0.5*p + 0.5*vec2(0.002*T,0.0));\r\n     ColorDuneField-=0.15*s(0.1,0.0,p.y - 0.4*f(vec2(15.0*p.x-15.0*sin(0.05\/p.y))+0.03*T));\r\n     col = mix(col,ColorDuneField,s(0.003,0.0,p.y-0.0125*f(vec2(10.0*p.x + 0.02*T))-0.12)*s(0.0,0.003,p.y-0.095));\r\n\r\n     \/\/ Far Sandworm Relative Motion\r\n     p+= vec2(0.5*f(vec2(0.05*T+456.3)),0.0);\r\n\r\n     \/\/ Profile Far Sandworm\r\n     float ProfileSandworm = p.y-0.1*f(vec2(0.75*p.x+0.1*T+123.4))+0.02;\r\n\r\n     \/\/ Wormrider on Far Sandworm\r\n     if(abs(p.y-0.1)<0.1)\r\n     {\r\n        \/\/col+=0.5;\r\n        p+= vec2(-0.15,-0.03-0.1*f(vec2(0.75*0.15+0.1*T+123.4))-0.01);\r\n        col = mix(col,vec4(0.5,0.5,0.4,1.0),drawWormRider(20.0*vec2(p.x,ProfileSandworm-0.06)));\r\n        p-= vec2(-0.15,-0.03-0.1*f(vec2(0.75*0.15+0.1*T+123.4))-0.01);\r\n     };\r\n\r\n     \/\/ Sandworm Mouth Petals\r\n     float MouthShape = 0.0;\r\n     if(p.x>0.0)MouthShape  = 0.05*TriangleWave(vec2( 50.0*(ProfileSandworm+0.055)-  1.0  )),\r\n                MouthShape -= 0.01*TriangleWave(vec2(200.0*(ProfileSandworm+0.055)-100.0*T));\r\n\r\n     \/\/ Polishing The Sandworm (Stop laughing, Irulan !)\r\n     float SandwormFinalPro = s(0.003,0.0,abs(ProfileSandworm)-0.01-0.001*abs(cos(200.0*p.x))-0.05*cos(0.7*PI*p.x));\r\n     SandwormFinalPro *= s(0.0,0.01,p.y-0.03);\r\n     SandwormFinalPro *= s(0.01,0.0,p.x-0.5+MouthShape);\r\n     vec4 SandwormFinalColor = vec4(0.7,0.7,0.6,1.0);\r\n     SandwormFinalColor-=0.25*texture2D(tex01,0.3*vec2(p.x,ProfileSandworm));\r\n     SandwormFinalColor-=0.05*s(0.01,0.0,abs(ProfileSandworm)-0.005*abs(cos(200.0*p.x))-0.05*cos(0.7*PI*p.x));\r\n     SandwormFinalColor-=0.25*s(0.2,0.0,abs(ProfileSandworm+0.1)-0.015);\r\n     SandwormFinalColor+=0.1*s(0.01,0.0,abs(p.x-0.51)-0.01);\r\n     SandwormFinalColor-=0.1*cos(50.0*p.x);\r\n     SandwormFinalColor-=0.05*abs(cos(300.0*p.x));\r\n     col = mix(col,SandwormFinalColor,SandwormFinalPro);\r\n\r\n     \/\/ I just decided sandworms have blowholes ! :D\r\n     vec2 p_reset = p;\r\n     \/\/ blowholes !\r\n     float bh = 0.;\r\n\r\n     float fry = -0.1*f(vec2(0.75*p.x+0.1*T+123.4))-0.001*abs(cos(200.0*p.x))-0.05*cos(0.7*PI*p.x);\r\n     for(float i = 0.0; i< 8.0 ; i++)\r\n     {\r\n         p  += vec2(-0.1*i+8.0*0.1\/2.0,fry);\r\n         p  *= r(0.5 + 0.3*f(vec2(0.51*i+0.1*T)));\r\n         bh  = s(0.75,0.0,abs(cos(-2.0*p.y + 0.5*T+0.4*i)));\r\n         bh *= s(0.001,0.0,abs(p.x)-0.25*p.y*f(vec2(50.0*p.y-5.0*T)));\r\n         bh *= s(0.1-0.04*f(vec2(i*654.3)),0.0,p.y);\r\n         bh *= s(0.0,0.001,p.y+0.01);\r\n         col += 0.2*bh;\r\n         p = p_reset;\r\n     };\r\n\r\n     \/\/ WormSign\r\n     if( p.y>-0.08 )\r\n     {\r\n         if( f(vec2(T))>0.95 )\r\n         {\r\n             p+= vec2(-0.55+0.05*f(vec2(0.5*T)),-0.03-0.1*f(vec2(1.5*0.5+0.3*T+123.4)));\r\n             col += metaDiamond(p,vec2(0.0,0.0),0.005);\r\n             col += 0.05*metaDiamond(p,vec2(0.0,0.0),0.3*f(vec2(50.0*T)));\r\n             p*=r(floor(0.5*PI*f(vec2(4.0*T))));\r\n             p*=r(3.0*PI\/4.0);\r\n             col+= vec4(0.125,0.125,1.0,1.0)*s(0.01,0.0,p.y)*s(0.0,0.1,p.y+0.4*f(vec2(3.0*T)))*s(0.005,0.0,abs(p.x + 0.8*p.y*f(vec2(10.0*(p.y+T)))+0.1*p.y*f(vec2(70.0*(p.y+T))))-0.005);\r\n             col+= vec4(0.750,0.500,1.0,1.0)*s(0.01,0.0,p.y)*s(0.0,0.1,p.y+0.4*f(vec2(3.0*T)))*s(0.001,0.0,abs(p.x + 0.8*p.y*f(vec2(10.0*(p.y+T)))+0.1*p.y*f(vec2(70.0*(p.y+T))))-0.001);\r\n             p = p_reset;\r\n         };\r\n     };\r\n     \r\n     \/\/ Sand Plume\r\n     col= mix(col,vec4(1.0,0.9,0.7,1.0),s(0.03,0.0,p.y+(p.x+0.1)*0.05*f(vec2(16.0*p.x+4.0*T))-0.045)*s(0.2,0.0,p.x-0.5)*s(0.0,0.005,p.y-0.03));\r\n\r\n     \/\/ Far Sandworm Relative Motion\r\n     p-= vec2(0.5*f(vec2(0.05*T+456.3)),0.0);\r\n\r\n     \/\/ Draw Dune Wall\r\n     if(abs(p.y)<0.1)\r\n     {\r\n       \/\/col += 0.2;\r\n       float py = (p.y-0.6);\r\n       col = mix(col,vec4(0.8,0.8,0.6,1.0)*(0.55+0.6*texture2D(tex01,0.2*vec2(p.x\/(1.5*p.y-0.5)-Speed*4.0*T,1.0\/(1.5*p.y-0.5))).xxxx),\r\n                     s(0.0,0.01,1.0\/py + 0.4*f(vec2(0.5*(1.0*p.x\/py-3.25*Speed*T)))+1.5)*s(0.0,0.02,p.y+0.1));\r\n     };\r\n\r\n     \/\/ Draw Ornis Passing-By\r\n     col = mix(col,vec4(0.5),clamp(drawOrnis(p-vec2(0.25*T,0.0)),0.0,1.0));\r\n     col = mix(col,vec4(0.5+0.9*clamp(1.0-abs(p.x),0.0,1.0)),clamp(drawWings(p-vec2(0.25*T,0.0)),0.0,1.0));\r\n\r\n     p*=1.5+0.7*f(vec2(0.1*T))-0.35;\r\n     p+=vec2(0.75*f(vec2(0.025*T+321.4))-0.35,-0.0 + .001*f(vec2(p.x+0.7*T)));\r\n     p+=vec2(0.25*f(vec2(0.1*T)),0.55+0.05*cos(0.5*p.x-T));\r\n\r\n     vec4 FremenColor = 0.5*texture2D(tex00,vec2(0.1,1.0)*p+vec2(0.3*T,0.0));\r\n     FremenColor *= s(0.0,0.5,p.x+.3);\r\n\r\n     \/\/ Draw Closest Fremen Wormrider\r\n     if(p.y<0.32)col = mix(col,vec4(0.25,0.25,0.2,1.0)+FremenColor,drawWormRider(p));\r\n\r\n     \/\/ Closest Sandworm\r\n     vec4 ColorSandworm = 0.7*vec4(0.7,0.7,0.6,1.0);\r\n     ColorSandworm -= texture2D(tex01,2.5*p).xxxx*(0.5+0.2*cos(20.0*p.x));\r\n     ColorSandworm += 0.200*s(0.10,0.0,abs(p.y+0.05)-0.05);\r\n     ColorSandworm += 0.350*s(0.05,0.0,abs(p.y-0.025*abs(sin(10.0*p.x))+0.075)-0.001);\r\n     ColorSandworm -= 0.750*s(0.20,0.0,length(vec2(0.5,2.0)*p-vec2(0.0,-0.1))-0.005);\r\n     ColorSandworm -= 0.075*s(0.03,0.0,abs(sin(10.0*p.x)+0.075+0.1*f(vec2(50.0*p.y)))-0.03);\r\n     ColorSandworm -= 0.500*s(1.00,0.0,abs(sin(10.0*p.x)+0.075)-0.15);\r\n     col = mix(col,ColorSandworm,s(0.005,0.0,p.y-0.025*(1.0-0.25*f(vec2(100.0*p.x)))*abs(sin(10.0*p.x))+0.07));\r\n\r\n     \/\/ Sand Dust\r\n     col = mix(col,vec4(0.7,0.7,0.6,1.0),0.5*s(0.10,0.0,p.y-0.05*f(vec2(0.5*p.x + 2.0*T))      ));\r\n     col = mix(col,vec4(0.7,0.7,0.6,1.0),0.5*s(0.15,0.0,p.y-0.50*f(vec2(1.5*p.x + 2.0*T)) + 0.2));\r\n\r\n     \/\/ Color Keying\r\n     col*=vec4(1.0,0.7,0.6,1.0)+0.5*col.xxxx;\r\n\r\n     if(arraktime>1.0)col*=vec4(1.0)-vec4(0.0,0.4,0.6,0.0);\r\n\r\n     return col;\r\n}\r\n\r\nvec4 dunelogo(in vec2 p,float dltime)\r\n{\r\n     vec4 dune = vec4(0.0,0.0,0.0,1.0);\r\n     if( dltime > 0.0 )\r\n     {\r\n         p*=1.5;\r\n         dune += clamp(dltime-0.0*TxtTimeLength\/4.0,0.,1.)*baseChar(            p+vec2( 0.75,-0.4) );\r\n         dune += clamp(dltime-1.0*TxtTimeLength\/4.0,0.,1.)*baseChar(r( PI\/2.0)*(p+vec2( 0.25,-0.4)));\r\n         dune += clamp(dltime-2.0*TxtTimeLength\/4.0,0.,1.)*baseChar(r(-PI\/2.0)*(p+vec2(-0.25,-0.4)));\r\n         dune += clamp(dltime-3.0*TxtTimeLength\/4.0,0.,1.)*baseChar(r( PI    )*(p+vec2(-0.75,-0.4)));\r\n         dune += clamp(dltime-4.0*TxtTimeLength\/4.0,0.,1.)*s(0.007,0.0,length(p+vec2(-0.75,-0.4))-0.01);\r\n         dune += clamp(dltime-4.0*TxtTimeLength\/4.0,0.,1.)*metaDiamond(p,vec2(0.75, 0.4),0.01);\r\n         dune += clamp(dltime-4.0*TxtTimeLength\/4.0,0.,1.)*0.2*s(0.1,0.0,abs(p.x-0.75)-0.2)*s(0.015,0.0,abs(p.y-0.4)-0.001);\r\n         dune = mix(dune,vec4(0.0),s(0.005,0.0,length(p+vec2(-0.75,-0.4))-0.01));\r\n\r\n       dune -= 0.25*clamp(dltime-6.0,0.,1.)*s(0.001,0.0,abs(p.y-0.36)-0.20);\r\n\r\n       p*=0.88;\r\n       float c = 0.062; \/\/ char width\r\n       p+= vec2(25.0*c\/2.0,-0.20);\r\n       \/\/ Doon doon doon doo-doon doon doo-doon !\r\n       doon(6.1,70, 0.0);doon(6.2,65, 1.0);doon(6.3,78, 2.0);doon(6.4,65, 3.0);\r\n       doon(6.5,82, 4.0);doon(6.6,84, 5.0);doon(6.7,32, 6.0);doon(6.8,68, 7.0);\r\n       doon(6.9,69, 8.0);doon(7.0,32, 9.0);doon(7.1,76,10.0);doon(7.2,39,11.0);\r\n       doon(7.3,85,12.0);doon(7.4,76,13.0);doon(7.5,84,14.0);doon(7.6,73,15.0);\r\n       doon(7.7,77,16.0);doon(7.8,69,17.0);doon(7.9,32,18.0);doon(8.0,84,19.0);\r\n       doon(8.1,69,20.0);doon(8.2,77,21.0);doon(8.3,80,22.0);doon(8.4,76,23.0);doon(8.5,69,24.0);\r\n     };\r\n     return vec4(dune.xyz,1.0);\r\n}\r\n\r\nvec4 Scene4(vec4 col, vec2 p, float t, int ViewMode) \/\/ Canopus above the Great Erg !\r\n{\r\n     t*=2.5;\r\n     if(ViewMode==2)t*=2.;\r\n     p*=5.+0.1*sin(0.1*t);\r\n\r\n     \/\/ Sky - V1 : Blue, V2- Eclipse Red\r\n     if(ViewMode==1)col = mix(vec4(0.1,0.3,1.,1.0),vec4(0.2,0.5,1.,1.0),s(1.,0.0,0.5*p.y));\r\n     if(ViewMode==2)\r\n     {\r\n        col = mix(vec4(0.1,0.1,0.1,1.0),vec4(1.0,0.3,0.1,1.0),s(1.,0.0,0.5*p.y));\r\n        col = mix(col,vec4(1.0,1.0,0.5,1.0),s(0.5,0.0,abs(0.75*p.y-0.0)-0.15));\r\n     };\r\n\r\n     \/\/ Small Moon\r\n     float Moon1,Moon2;\r\n     vec4 ColorMoon;\r\n\r\n     if(ViewMode==1)Moon1 = s(0.01,0.0,length(p-vec2(1.500,1.000))-0.10),\r\n                    Moon2 = s(0.05,0.0,length(p-vec2(1.500,0.956))-0.08);\r\n\r\n     if(ViewMode==2)Moon1 = s(0.01,0.0,length(p-vec2(1.500,1.000))-0.10),\r\n                    Moon2 = s(0.05,0.0,length(p-vec2(1.515,1.030))-0.08);\r\n\r\n     if(ViewMode==1)col = mix(col,vec4(1.0),0.3*clamp(Moon1-Moon2,0.0,1.0));\r\n     if(ViewMode==2)ColorMoon = 1.3*vec4(0.9,0.9,0.5,1.0)-0.5*texture2D(tex02,p),\r\n                    col = mix(col,ColorMoon,clamp(Moon1-Moon2,0.0,1.0));\r\n\r\n     \/\/ Big Moon\r\n     if(ViewMode==1)Moon1 = s(0.005,0.0,length(p-vec2(1.200,0.550))-0.30),\r\n                    Moon2 = s(0.050,0.0,length(p-vec2(1.200,0.451))-0.24);\r\n\r\n     if(ViewMode==2)Moon1 = s(0.005,0.0,length(p-vec2(1.200,0.550))-0.30),\r\n                    Moon2 = s(0.050,0.0,length(p-vec2(1.235,0.600))-0.25);\r\n\r\n     if(ViewMode==1)col = mix(col,vec4(1.0),0.3*clamp(Moon1-Moon2,0.0,1.0));\r\n     if(ViewMode==2)ColorMoon =1.4*vec4(0.9,0.9,0.5,1.0)-0.5*texture2D(tex02,p),\r\n                    col = mix(col,ColorMoon,clamp(Moon1-Moon2,0.0,1.0));\r\n     \r\n     \/\/ -Moon Moon, STOP ! -No, I must dance !\r\n\r\n     \/\/ Clouds\r\n     col += vec4(0.2,0.1,0.0,1.0)*texture2D(tex00,0.05*vec2(0.20*p.x\/p.y+0.02*t,1.0\/p.y))*s(0.0,0.7,p.y);\r\n\r\n     \/\/ The Great Wall\r\n     float GreatWall = 0.2*p.y+0.5*p.x+0.03*t-0.50;\r\n     vec4  ColorWall = vec4(1.0);\r\n\r\n     if(ViewMode==1)ColorWall = vec4(0.80,0.60,0.40,1.0);\r\n     if(ViewMode==2)ColorWall = vec4(0.60,0.25,0.20,1.0);\r\n\r\n     ColorWall-=0.25*s(1.5,0.0,p.x)*texture2D(tex02,0.1*(p+vec2(15.0*GreatWall,0.0)));\r\n     ColorWall-=0.35*s(0.4,0.0,f(vec2(45.-0.3*f(vec2(7.0*GreatWall)))));\r\n\r\n     \/\/ Drawing the Great Wall\r\n     if(ViewMode==1)col = mix(col,ColorWall, s(0.001,0.0,p.y+GreatWall+0.20*f(vec2(8.0*GreatWall)) -0.10*f(vec2(16.0*GreatWall))-0.4));\r\n     if(ViewMode==2)col = mix(col,0.75*ColorWall, s(0.025,0.0,p.y+0.20*f(vec2(4.0*GreatWall)) -0.05*f(vec2(16.0*GreatWall))-0.2+0.1*f(vec2(5.0*GreatWall))));\r\n\r\n     \/\/ Airborne Sand (only V1)\r\n     if(ViewMode==1)col = mix(col,vec4(0.8,0.7,0.5,1.0),abs(sin(0.25*t))*s(1.0,0.0,p.y-0.2*f(vec2(1.0*p.x-0.1*t))+0.1));\r\n\r\n     \/\/The Dune Field\r\n     vec2 p_save_1 = p;\r\n     vec4 ColorDunes = vec4(0.0);\r\n     \/\/ 12 Dune Lines\r\n     for( float i = 0.0; i < 12.0; i++ )\r\n     {\r\n          \/\/ Add Line-Specific Phase So There's Less Spatial Repetition...\r\n          p.x+=f(vec2(i*12.34));\r\n          \/\/ Dunes Base Color\r\n          if(ViewMode==1)ColorDunes = vec4(0.7,0.5,0.3,1.0);\r\n          if(ViewMode==2)ColorDunes = vec4(0.7,0.5,0.1,1.0);\r\n          \/\/ Boomerang-shaped Shadows\r\n          ColorDunes -= 0.25*s(0.2*3.14,0.0,1.0*cos(10.*p.x+10.0*cos(15.0*p.y)+1.25*t));\r\n          \/\/ Wavelets On The Dunes\r\n          ColorDunes += 0.5*(1.0\/12.0)*i\r\n                        *0.35*abs(sin(1.0*p.x+0.125*t))\r\n                        *s(0.15,0.0,fract(100.*abs(p.x+1.0*p.y-0.0015*sin(300.0*(p.y))+0.125*t)-0.5))\r\n                        *s(0.01,0.0,1.0*cos(10.*p.x+10.0*cos(15.0*p.y)+1.25*t));\r\n          \/\/ Trace Dunes\r\n          col  = mix(col,ColorDunes,s(0.007,0.0,p.y-0.07*f(vec2(2.*p.x + i*3212.4 + 0.25*t))));\r\n\r\n          \/\/ Ridge Sand\r\n          float DuneHighlight = abs(p.y-0.07*f(vec2(2.*p.x + i*3212.4 + 0.25*t)))-0.001;\r\n          col  += 0.25*vec4(0.9,0.8,0.7,1.0)*f(vec2(p.x+t+ 0.3*i))*s(0.040,0.0,DuneHighlight);\r\n          col  += 0.25*vec4(0.9,0.8,0.7,1.0)*f(vec2(p.x+t+15.1*i))*s(0.004,0.0,DuneHighlight);\r\n\r\n          \/\/ Remove Phase\r\n          p.x-=f(vec2(i*12.34));\r\n\r\n          \/\/ Sandworm\r\n\r\n          \/\/ Draw the Sandworm Behind The 5 Dune Line\r\n          if(ViewMode==2 && i==5.)\r\n          {\r\n             \/\/ Random Sandworm Relative Motion\r\n             p+= vec2(0.7*f(vec2(0.05*t))-0.35,0.0);\r\n\r\n             float SandwormProfile = p.y -0.15*f(vec2(0.75*p.x+.1*t+123.4)) + 0.15;\r\n             float MouthShape      = 0.0;\r\n             \/\/ Sandworm Jaws But Only At The Front !\r\n             if(p.x>0.0)MouthShape  = 0.0500*TriangleWave(vec2( 50.0*(SandwormProfile+0.055) -   1.0  )),\r\n                        MouthShape -= 0.0100*TriangleWave(vec2(200.0*(SandwormProfile+0.055) - 100.0*t));\r\n\r\n             float SandWormShape = s(0.003,0.0,abs(SandwormProfile)-0.01-0.001*abs(cos(200.0*p.x))-0.05*cos(0.7*PI*p.x))*s(0.01,0.0,p.x-0.5+MouthShape);\r\n             vec4 ColorWorm = vec4(0.25,0.1,0.0,1.0);\r\n             ColorWorm += 0.15*sin(40.0*SandwormProfile);\r\n             ColorWorm -= 0.05*s(0.001,0.0,abs(SandwormProfile + 0.005*sin(20.0*p.x))-0.005);\r\n             ColorWorm -= 0.2*s(0.001,0.0,SandwormProfile + 0.005*sin(20.0*p.x));\r\n             ColorWorm -= 0.1*cos(50.0*p.x);\r\n             ColorWorm -= 0.05*abs(cos(300.0*p.x));\r\n\r\n             \/\/ Trace Worm !\r\n             col = mix(col,ColorWorm,SandWormShape);\r\n\r\n             \/\/ Delayed Rifle Impacts ! (FiringSolution-0.5 Sec Lag)\r\n             if(f(vec2(0.1*(t-0.5)))>0.75)col += s(0.05,0.0,length(p+vec2(0.3*f(vec2(0.1*(t-0.5)+258.3))-0.7*f(vec2(0.05*t))+0.35+0.05*f(vec2(floor(10.0*t)))-0.025,+0.04*f(vec2(floor(10.0*t+112.5)))-0.02))-0.025*fract(10.0*t))\r\n                                                 +metaDiamond(p,vec2(-0.3*f(vec2(0.1*(t-0.5)+258.3))+0.7*f(vec2(0.05*t))-0.35-0.05*f(vec2(floor(10.0*t)))+0.025,+0.04*f(vec2(floor(10.0*t+112.5)))-0.02),0.005*fract(10.0*t));\r\n\r\n             \/\/ Trace Dust Clouds !\r\n             float SandwormClouds = 0.10*f(vec2(1.5*p.x+0.5*t));\r\n             SandwormClouds +=      0.05*f(vec2(2.5*(p.x+0.05*t)));\r\n             SandwormClouds +=      0.05*f(vec2(2.5*(p.x+0.25*t+123.4)));\r\n\r\n             col = mix(col,vec4(0.7,0.5,0.2,1.0),0.7*s(0.2,0.0,p.y -SandwormClouds*(-p.x+0.5))*s(0.1,0.0,p.x-0.5)*s(0.0,0.01,p.y+0.1));\r\n\r\n             \/\/ Remove Random Sandworm Relative Motion\r\n             p-= vec2(0.7*f(vec2(0.05*t))-0.35,0.0);\r\n          };\r\n          p*=0.8;\r\n          p+= vec2(0.0,0.05);\r\n     };\r\n\r\n     \/\/ \"Less Talk, More Shooting !\"\r\n     bool FiringSolution = false;\r\n     if(f(vec2(0.1*t))>0.75)FiringSolution = true;\r\n\r\n     if(ViewMode==2)\r\n     {\r\n        \/\/ Holtzman Shield Geometry\r\n        p*=20.0;\r\n        vec2 p_save_2 = p;\r\n        vec2 a = floor(15.0*p);\r\n        p+=vec2(0.165*mod(a.y+t,2.0),0.0);\r\n        vec2 b = fract(15.0*p)+vec2(-0.5);\r\n\r\n        p=p_save_2;\r\n        \/\/ Shield Texture\r\n        vec4 ShieldTex = 0.2*vec4(0.0,0.7,1.0,1.0);\r\n        ShieldTex *= s(0.01,0.0,length(b)-0.5);\r\n        ShieldTex *= abs(sin(3.0*(p.x+p.y+4.0*t)));\r\n        ShieldTex *= abs(sin(3.0*(p.y+4.0*t)));\r\n        ShieldTex *= (0.5+0.5*sin(0.1*t));\r\n        \/\/ Trace Shield\r\n        col += ShieldTex;\r\n\r\n        \/\/ Ornithopter Hatch Borders\r\n        p = p_save_1;\r\n        p.y=-abs(p.y);\r\n        vec4 ColorHatch = vec4(0.4);\r\n        ColorHatch += vec4(1.0,0.7,0.1,1.0)*clamp(1.0-pow(0.25*length(p),4.0),0.0,1.0);\r\n        col = mix(col,ColorHatch,s(0.010,0.0,p.y-clamp(0.5*cos(2.0*p.x),0.0,0.1)+1.78));\r\n        col = mix(col, vec4(0.2),s(0.010,0.0,p.y-clamp(0.5*cos(2.0*p.x),0.0,0.1)+1.80));\r\n        col = mix(col, vec4(0.4),s(0.005,0.0,abs(p.y+2.0)-0.005));\r\n\r\n        p = p_save_1;\r\n\r\n        \/\/ Green Scanner\r\n        for(float o = 0.0; o < 30.0;o++)\r\n        if(floor(mod(10.*t,30.0))==o)\r\n        col+= vec4(0.0,1.0,0.0,1.0)*metaDiamond(p,vec2(o*0.05+1.0,2.0),0.015);\r\n\r\n        \/\/ Random HarkoRifle Motions\r\n\r\n        vec2 g=p-vec2(0.0,-2.);\r\n        \/\/ Height of HarkoRifle\r\n        p+= vec2(0.0,3.0);\r\n        \/\/ Recoil When Firing !\r\n        if(FiringSolution)p.y+=0.02*abs(sin(60.0*t));\r\n        \/\/ Aim for the WORM, RABAN ! GODDAMMIT ! YOU IDIOT !\r\n        p*=r(0.75*f(vec2(0.1*t+258.3))-0.375);\r\n        p-= vec2(0.0,3.0);\r\n\r\n        \/\/ Firing Flames\r\n        p+= vec2(0.0,0.1*f(vec2(0.1*t)));\r\n\r\n        float Flare = 0.5;\r\n        if(FiringSolution)col += vec4(1.0,0.9,0.5,1.0)*clamp(2.0*s(0.25,0.0,0.4*length(p-vec2(0.0,-0.4)))*abs(sin(30.0*t)),0.0,1.0),Flare = 1.0;\r\n\r\n        \/\/ HarkoRifle Texture\r\n        vec4 RifleColor = vec4(1.0,0.9,0.5,1.0)*cos(2.0*p.x\/p.y);\r\n        RifleColor -= 0.5*s(0.4,0.0,clamp(pow(0.6*length(g),2.0),0.0,1.0));\r\n        RifleColor += Flare*s(0.25,0.0,abs(1.0-cos(10.0*(p.x)\/p.y)+0.1*f(vec2(0.1*t))));\r\n        RifleColor += 0.1*sin(5.0*p.x\/p.y-t);\r\n        RifleColor -= 0.2*s(0.005,0.0,abs((p.x\/p.y+0.10*clamp(sin(25.\/p.y),0.0,0.5)-.025)\/p.y)-0.005);\r\n        RifleColor -= 0.2*s(0.01,0.0,abs(abs(p.x)\/p.y+0.15)-0.001);\r\n        RifleColor -= 0.1*s(0.01,0.0,abs(sin(20.0\/(p.y+abs(p.x\/p.y)+0.1*clamp(sin(25.0*abs(p.x\/p.y)),0.0,0.5))))-0.2)*s(0.0,0.01,abs(p.x\/p.y)-0.155);\r\n        vec4 BeeStripes = vec4(1.0,0.5,0.5,1.0);\r\n        \/\/ Every Scifi Is Cooler With BeeStripes !\r\n        BeeStripes *= Flare;\r\n        BeeStripes *= sin(70.0\/(p.y+abs(p.x)));\r\n        BeeStripes *= s(0.0,0.01,abs(p.x\/p.y)-0.1);\r\n        BeeStripes *= s(0.01,0.0,abs(p.x)\/p.y+0.11);\r\n        BeeStripes *= s(0.01,0.0,abs(abs(p.x)\/p.y+0.08)-0.06);\r\n        RifleColor += BeeStripes;\r\n        \/\/ Firing Light ! Most Important Feature ! (...for Raban)\r\n        RifleColor += vec4(0.0,1.0,0.0,1.0)*metaDiamond(p,vec2(0.3,-1.53),0.005);\r\n\r\n        \/\/ HarkoRifle Handles\r\n        \/\/ Caps\r\n        col = mix(col,vec4(0.25,0.25,0.1,1.0),s(0.01,0.0,length(vec2(abs(p.x)-0.6,p.y+1.5))-0.05));\r\n        \/\/ Handle\r\n        vec4 HandleColor = vec4(0.4,0.4,0.2,1.0);\r\n        HandleColor *= abs(sin(10.0*p.y+3.14));\r\n        HandleColor *= abs(0.5+abs(sin(100.0*p.x)));\r\n        HandleColor += 0.25*s(0.1,0.0,abs(p.x)-0.6)*s(0.02,0.0,abs(p.y+1.5)-0.001);\r\n        col = mix(col,HandleColor,s(0.01,0.0,abs(p.x)-0.6)*s(0.01,0.0,abs(p.y+1.5)-0.05));\r\n\r\n        if(FiringSolution)RifleColor += vec4(1.0,1.0,0.0,1.0)*metaDiamond(p,vec2(0.3,-1.53),0.005);\r\n\r\n        \/\/ Cooling Winglets\r\n        col = mix(col,0.7*RifleColor,s(0.01,0.0,abs(p.y+1.4)-0.9)*s(0.0,0.01,(abs(p.x)\/p.y+0.05*clamp(cos(10.0\/p.y),0.0,0.8)+0.3)));\r\n        col = mix(col,RifleColor,s(0.01,0.0,abs((p.x)\/p.y)-0.25)*s(0.01,0.0,p.y+abs(p.x)+0.4)*s(0.01,0.0,p.y+0.43));\r\n        if(abs(p.y+0.4)-0.04<0.0)col = mix(col,0.5*RifleColor,s(0.01,0.0,abs(p.x\/p.y)-0.02));\r\n\r\n        p-= vec2(0.0,0.1*f(vec2(0.1*t)));\r\n\r\n        p = p_save_1;\r\n\r\n        col +=0.25*metaDiamond(p,vec2(0.0,2.0),0.05);\r\n        col +=0.25*vec4(1.0,0.7,0.0,1.0)*metaDiamond(p,vec2(0.1,2.0),0.05);\r\n        col +=0.25*vec4(1.0,0.5,0.0,1.0)*metaDiamond(p,vec2(-1.1,2.0),0.1+0.1*sin(t));\r\n     };\r\n     if(ViewMode==2)col *= vec4(0.99,0.75,0.9,1.0);\r\n     return col;\r\n}\r\n\r\nvec4 Scene5(vec4 col, vec2 p, float t)\r\n{\r\n       t*=0.25;\r\n       p+= vec2(0.0,0.3);\r\n       col = vec4(0.6,0.4,0.0,1.0);\r\n       float u = p.y - .35*p.x - 0.05*sin(9.0*(p.x+t));\r\n       col = mix(col,vec4(0.7,0.5,0.1,1.0)+0.15*cos(10.0*(p.x+t)),s(0.05,0.04,u));\r\n       col += 0.05*s(0.01,0.0,abs(u-0.04));\r\n       col *= s(0.025,0.0,0.01*(sin(7.0*u)));\r\n       col -= 0.1*s(0.4,0.0,abs(u-0.5));\r\n       col = mix(col,vec4(0.7,0.5,0.1,1.0)+0.15*cos(10.0*(p.x+t)),s(0.01,0.0,abs(u-0.5)-0.1));\r\n       col += 0.05*s(0.001,0.0,abs(u-0.6)-0.002);\r\n       col -= 0.2*s(0.04,0.0,abs(u-0.4));\r\n       col *= 1.0-0.03*texture2D(tex00,0.3*(p + vec2(t*1.0,0.5*t))).xxxx;\r\n       col =  mix(col,vec4(1.0),dunelogo(p,t*4.0));\r\n       return col;\r\n}\r\n\r\nvec4 AtreidesArmories(vec2 p,vec4 col, int ViewMode,float t)\r\n{\r\n     if(ViewMode==1)p*=0.35-0.005*t,p+=vec2(0.5,0.02);\r\n\r\n     \/\/ Wind Of Change blowing on the Duniverse !\r\n     if(ViewMode!=1)p += vec2(0.002*sin(10.0*p.y+3.0*t),0.);\r\n\r\n     \/\/ Atreides Colors !\r\n     vec4 Gold = vec4(1.0,0.8,0.0,1.0);\r\n     Gold *= clamp(1.+0.15*sin(10.0*p.y+3.0*t),0.0,1.0);\r\n     Gold *= 1.0-0.2*sin(10.0*p.y+3.0*t);\r\n\r\n     vec4 Green = vec4(0.2,0.4,0.2,1.0);\r\n     Green *=1.0-0.2*sin(10.0*p.y+3.0*t);\r\n\r\n     vec4 A = vec4(0.0);\r\n\r\n     float ChevronsMask = s(0.001,0.0,abs(abs(p.x) - 0.5)-0.1-0.0025*floor(sin(200.0*p.y)));\r\n     \/\/ Green BG\r\n     A = mix(A,Green,s(0.001,0.0,abs(abs(p.x) - 0.5)-0.1-0.0025*floor(sin(200.0*p.y))));\r\n     \/\/ Black Stripes\r\n     A = mix(A,vec4(0.0),s(0.001,0.0,abs(abs(abs(p.x)-0.5)-0.075)-0.01));\r\n     \/\/ Gold Stripes\r\n     A = mix(A,Gold,s(0.002,0.0,abs(abs(abs(abs(p.x)-0.5)-0.075)-0.01))-0.005);\r\n\r\n     p.x = abs(p.x);\r\n\r\n     \/\/ Lower Wings\r\n     A = mix(A,Gold,s(0.001,0.0,abs(abs(p.x)-0.5)-0.02)*s(0.001,0.0,abs(p.y+0.025)-0.025)*s(0.0,0.001,p.y-abs(p.x-0.5)+0.035));\r\n     A = mix(A,Gold,s(0.001,0.0,abs(p.y-abs(abs(p.x)-0.5))-0.025)*s(0.001,0.0,abs(p.x-0.5)-0.05)*s(0.001,0.0,p.y-abs(abs(p.x)-0.5))*s(0.001,0.0,abs(abs(p.x)-0.5)-.04));\r\n\r\n     \/\/ Green Slit\r\n     A = mix(A,Green,s(0.001,0.0,abs(abs(p.x)-0.5)-0.010)*s(0.001,0.0,abs(p.y+0.025)-0.025)*s(0.0,0.001,p.y-abs(p.x-0.5)+0.035));\r\n     A = mix(A,Green,s(0.001,0.0,abs(p.y-abs(abs(p.x)-0.5))-0.015)*s(0.001,0.0,abs(p.x-0.5)-0.05));\r\n\r\n     \/\/ Eagle Gold Torso\r\n     A = mix(A,Gold,s(0.001,0.0,abs(abs(p.x)-0.5)-0.007)*s(0.001,0.0,abs(p.y+0.025)-0.025)*s(0.0,0.001,p.y-abs(p.x-0.5)+0.035));\r\n     A = mix(A,Gold,s(0.001,0.0,abs(p.y-abs(abs(p.x)-0.5))-0.01)*s(0.001,0.0,abs(p.x-0.5)-0.05));\r\n\r\n     \/\/ Eagle Neck\r\n     float EH = s(0.00,0.001,p.y-abs(abs(p.x-0.5))-0.014)*s(0.001,0.0,p.y+abs(abs(p.x-0.5))-0.035);\r\n     A = mix(A,Gold,clamp(EH,0.0,1.0));\r\n\r\n     \/\/ Eagle Head\r\n     p+= vec2(-0.01,-0.01);\r\n     EH = s(0.00,0.001,p.y-abs(abs(p.x-0.495))-0.019)*s(0.001,0.0,p.y+abs(abs(p.x-0.5))-0.035)*s(0.001,0.0,p.y-0.025);\r\n     A = mix(A,Gold,EH);\r\n\r\n     \/\/ Eagle Beak\r\n     p+= vec2(-0.501,-0.5149);\r\n     A= mix(A,Gold,s(0.001,0.0,p.x+0.0005)*s(0.0,0.001,p.y+p.x+0.494)*s(0.001,0.0,p.y+0.49));\r\n     p-= vec2(-0.501,-0.5149);\r\n\r\n     \/\/ Eagle One, Fox Two ! =)\r\n\r\n     \/\/ The Atreides Eagle Has Canopus In Its Wings Now !\r\n     A+= vec4(1.0)*metaDiamond(p,vec2(0.492,0.049),0.005);\r\n\r\n     float ControlArmories = 1.0;\r\n     if(ViewMode==2)ControlArmories = s(2.0,0.0,t);\r\n     return mix(col,A,ControlArmories*ChevronsMask);\r\n}\r\n\r\nvec4 StarField(vec4 col, vec2 p)\r\n{\r\n     vec2 b;\r\n     p*=r(5.5);\r\n     p*=30.0;\r\n     b = fract(p);\r\n     p = floor(p);\r\n     if( f(vec2(p.x*p.y))>0.85)col = mix(col,vec4(1.0),clamp(f(vec2(p.x+p.y))*pow(20.0*length(b-vec2(0.5*f(vec2(p.x+ p.y))-0.25,0.5*f(vec2(p.x+ p.y+258.2))-0.25) - vec2(0.5,0.5)),-3.0),0.0,1.0));\r\n     return col;\r\n}\r\n\r\nvec4 Scene0(vec4 col, vec2 p, float t, int ViewMode)\r\n{\r\n     t\/=10.0;\r\n\r\n     float ZoomCam = 1.0-0.01*sin(t);\r\n     p *= ZoomCam;\r\n     p*=r(-0.25);\r\n\r\n     vec2 CanPos = vec2( 0.125*sin(1.5*t-1.57), 0.350);\r\n     vec2 ArrPos = vec2( 0.0  *sin(0.4*t     ),-0.050);\r\n     vec2 BMPos  = vec2( 0.065*sin(1.5*t-1.57), 0.100);\r\n     vec2 SMPos  = vec2( 0.125*sin(1.5*t+1.57),-0.200);\r\n\r\n\r\n     vec2 LA  = ArrPos - CanPos;\r\n     vec2 LBM = BMPos  - CanPos;\r\n     vec2 LSM = SMPos  - CanPos;\r\n     float angleLA = atan(LA.y , -LA.x)+1.57;\r\n     float angleLBM= atan(LBM.y,-LBM.x)+1.57;\r\n     float angleLSM= atan(LSM.y,-LSM.x)+1.57;\r\n\r\n     vec4 Canopus     = vec4(1.0)*s(0.19,0.0,length(p - CanPos)-0.100);\r\n     vec4 Arrakis     = vec4(1.0)*s(0.01,0.0,length(p - ArrPos)-0.200);\r\n     vec4 BiggerMoon  = vec4(1.0)*s(0.01,0.0,length(p -  BMPos)-0.100);\r\n     vec4 SmallerMoon = vec4(1.0)*s(0.01,0.0,length(p -  SMPos)-0.025);\r\n\r\n     vec4 Scene = mix(vec4(0.05),vec4(0.0,0.1,0.15,1.0),s(0.5,0.0,p.y));\r\n     vec2 dwp = dw0(10.*(p+vec2(0.1*sin(1.5*t+1.57),0.0)))+vec2(0.0,-5.0);\r\n     Scene += 0.1*vec4(0.5,0.9,0.9,1.0)*s(5.,0.0,dwp.y)*s(0.0,0.03,dwp.y+3.);\r\n\r\n     Scene = StarField(Scene,p+vec2(0.1*sin(1.5*t+1.57),0.0));\r\n     Scene = mix(Scene, vec4(1.0,1.0,0.95,1.0), Canopus);\r\n     Scene = mix(Scene, vec4(0.8,0.7,0.5,1.0)+0.50*texture2D(tex00,0.7*(p  -BMPos)\/cos(  80.0*dot( p-BMPos, p-BMPos))+vec2(-0.015*sin(1.5*t+1.57),0.0))      - s(0.05,0.0,length(r(angleLBM)*(p-BMPos )-vec2(0.0,-0.030))-0.090),  BiggerMoon);\r\n     Scene = mix(Scene, vec4(0.7,0.5,0.2,1.0)+0.75*texture2D(tex01,0.5*(p -ArrPos)\/cos(  20.0*dot(p-ArrPos,p-ArrPos))+vec2(-0.015*sin(1.5*t+1.57),0.0)).xxxx - s(0.10,0.0,length(r(angleLA )*(p-ArrPos)-vec2(0.0,-0.100))-0.190),     Arrakis);\r\n     Scene = mix(Scene, vec4(0.8,0.6,0.3,1.0)+0.75*texture2D(tex01,    (p  -SMPos)\/cos(1000.0*dot( p-SMPos, p-SMPos))+vec2(-0.015*sin(1.5*t+1.57),0.0))      - s(0.01,0.0,length(r(angleLSM)*(p-SMPos )-vec2(0.0,-0.025))-0.040), SmallerMoon);\r\n     p*=r( 0.25);\r\n     p \/= ZoomCam;\r\n     Scene = AtreidesArmories(p,Scene,ViewMode,10.*t);\r\n     if(ViewMode==0)\r\n     {\r\n        p+=vec2(0.30,0.34);\r\n        p*=1.25;\r\n        \/\/ ARRH ARRH ARRH ARRH ARRH ! =)\r\n        ar(80,0.03);ar(76,0.06);ar(65,0.09);ar(78,0.12);ar(69,0.15);ar(84,0.18);ar(69,0.21);\r\n        ar(65,0.27);ar(82,0.30);ar(82,0.33);ar(65,0.36);ar(75,0.39);ar(73,0.41);ar(83,0.43);\r\n     };\r\n     return Scene;\r\n}\r\n\r\nvec4 Scene2(vec4 col, vec2 p, float t)\r\n{\r\n     t *= 0.5;\r\n     p *= 5.0;\r\n     float Grid = s(0.5,0.0,length(fract(40.0*p)-vec2(0.5))-0.3);\r\n     Grid+=s(0.001,0.0,abs(length(p)-1.5)-0.005);\r\n     Grid+=s(0.001,0.0,abs(p.x)-1.9)*s(0.001,0.0,abs(p.y)-0.005);\r\n\r\n     if(t<.50)p*=1.5;\r\n     if(t<1.0)p*=1.5;\r\n     if(t<1.5)p*=1.5;\r\n     if(t>2.0)Grid = 0.0,p*=r(-clamp((t-2.0),0.0,1.0)*(1.5*f(vec2(0.125*t))));\r\n\r\n     p*=r(0.5);\r\n     p.y += 0.35*f(vec2(0.5*p.x));\r\n     vec2 q = p;\r\n     float DuneBase = floor(0.75*p.y+2.*t);\r\n     p.y = fract(0.75*p.y+2.*t);\r\n     vec4 ColorDunes = vec4(0.7,0.3,0.1,1.0);\r\n     ColorDunes *= 1.0-0.25*f(vec2(0.75*p.x+DuneBase));\r\n     col = mix(vec4(0.9,0.5,0.2,1.0),ColorDunes, s(0.2,0.0,abs(p.y-0.2*f(vec2(0.75*p.x+DuneBase))-0.35)-0.2-0.025*f(vec2(3.0*p.x+DuneBase))));\r\n     col += 0.50*f(vec2(0.75*p.x+DuneBase))*s(0.1,0.0,abs(p.y-0.3*f(vec2(0.75*p.x+DuneBase))-0.6)-0.05*f(vec2(p.x+DuneBase)));\r\n     col += 0.01*s(0.05,0.0,abs(p.y-0.4*f(vec2(0.75*p.x+DuneBase))-0.45)-0.001);\r\n     col += 0.05*s(0.01,0.0,abs(p.y-0.3*f(vec2(0.75*p.x+DuneBase))-0.55)-0.001);\r\n     col -= 0.15*s(0.30,0.0,abs(p.y-0.3*f(vec2(0.75*p.x+DuneBase))-0.20)-0.001);\r\n     col += 0.10*texture2D(tex02,0.015*dw0(q+vec2(.0,2.7*t)));\r\n     return col*(1.0+0.5*Grid);\r\n}\r\n\r\nvec4 Scene1(vec4 col, vec2 p, float t)\r\n{\r\n     float T = 0.1*t;\r\n     t *=0.20;\r\n     p += vec2(-0.001*sin(150.0*p.y-55.0*t),0.0);\r\n     p+= vec2(0.0, 0.05);\r\n\r\n     \/\/ Atmo Gradient\r\n     col = mix(vec4(1.0,0.5,0.1,1.0),vec4(0.1,0.3,0.35,1.0),abs(2.5*p.y));\r\n\r\n     \/\/ Starfield\r\n     if(s(0.0,0.01,length(p-vec2(0.0,0.1))-0.15)>0.0)col += 0.1*StarField(col,p)*s(0.0,0.1,p.y-.15);\r\n\r\n     \/\/ Eagle 1 Cloud 1 !\r\n     vec4 bg = vec4(0.0);\r\n     p*=4.0;\r\n     vec4 CB3Color = vec4(0.8,0.90,0.99,1.0)*(1.0-0.3*s(0.1,0.0,p.y-.06*p.x*p.x-0.23-0.005*abs(p.x)));\r\n     float CB3Shape = 0.5*s(0.05,0.0,p.y-0.06*p.x*p.x-0.0250*abs(p.x)*f(vec2(7.0*p.x+154.3+0.1*T))-0.1);\r\n     CB3Shape *= s(0.0,0.1,p.y-0.06*p.x*p.x-0.010*f(vec2(16.0*p.x+154.3))-0.08);\r\n     CB3Shape *= s(0.0,0.25,abs(0.50*p.x)-0.15);\r\n     col = mix(col,5.0*CB3Color,CB3Shape);\r\n     p*=0.25;\r\n\r\n     \/\/ Eagle 1 Cloud 2 !\r\n     p.y += -0.07;\r\n     p*=8.0;\r\n     vec4 CB4Color = vec4(0.8,0.90,0.99,1.0)*(1.0-0.3*s(0.1,0.0,p.y-.06*p.x*p.x-0.23-0.005*abs(p.x)));\r\n     float CB4Shape = 0.5*s(0.05,0.0,p.y-0.06*p.x*p.x-0.0250*abs(p.x)*f(vec2(7.0*p.x+154.3+0.1*T))-0.1);\r\n     CB4Shape *= s(0.0,0.1,p.y-0.06*p.x*p.x-0.010*f(vec2(16.0*p.x+154.3))-0.1);\r\n     CB4Shape *= s(0.0,0.25,abs(0.50*p.x)-0.15);\r\n     col = mix(col,3.0*CB4Color,CB4Shape);\r\n     p*=0.125;\r\n     p.y -= -0.07;\r\n\r\n     \/\/Star + Moons\r\n     \/\/ The Muad'dib Constellation points to the North Star !\r\n     col += vec4(1.0)*metaDiamond(p,vec2(0.40,0.30),0.0020);\r\n     col += vec4(1.0)*metaDiamond(p,vec2(0.42,0.27),0.0005);\r\n     col += vec4(1.0)*metaDiamond(p,vec2(0.37,0.23),0.0014);\r\n     col += vec4(1.0)*metaDiamond(p,vec2(0.37,0.28),0.0005);\r\n     col += vec4(1.0)*metaDiamond(p,vec2(0.35,0.21),0.0005);\r\n\r\n     \/\/ Mandatory Canopus setting with 2 moons.\r\n     col = mix(col,vec4(1.0,0.9,.0,1.0),clamp( s(0.01,0.0,length(p-vec2(0.0,0.1))-0.15)-s(0.005,0.0,length(p-vec2(0.05,0.1))-0.07)-s(0.005,0.0,length(p-vec2(0.0,0.2))-0.02),0.0,1.0));\r\n\r\n     \/\/ Central Dune Height Tuning\r\n     p+=vec2(0.0,0.2);\r\n\r\n     vec2 ex,ew;\r\n     ex = fract(16.0*p)-0.5;\r\n     ew = floor(16.0*p);\r\n     float ST = 20.*t;\r\n\r\n     \/\/ Explosions In The Distance\r\n     if(ew.y>=2. && ew.y<6.)\r\n     if(noise(ew + floor(ST)*119.58 )<0.01)\r\n     col += vec4(1.0)*(1.0-fract(ST))*noise(ew + floor(30.*t)*519.58 )*s(0.1,0.0,length(ex)-0.5*fract(ST)),\r\n     col += vec4(1.0,1.0,1.0,1.0)*metaDiamond(ex,vec2(0.0),0.05)*s(0.2,0.0,length(ex)-0.2);\r\n\r\n     \/\/ Disable Heatwaves\r\n     p -= vec2(-0.001*sin(150.0*p.y-55.0*t),0.0);\r\n\r\n     \/\/ Tourelle DCA 1\r\n     p-= vec2(0.5,0.1);\r\n     p*=r( 1.0*f(vec2(t))+3.14\/2.0);\r\n     if(f(vec2(10.0*t))>0.75)\r\n     {\r\n        if(p.x>0.0)col += vec4(1.0,1.0,0.0,1.0)*clamp(1.0-length(1.5*p),0.0,1.0)*s(0.001,.0,abs(p.y)-0.0005)*clamp(sin(100.0*(p.x-4.*t)),0.0,1.0);\r\n        col+=vec4(1.0)*metaDiamond(p,vec2(0.0),0.025);\r\n     };\r\n     p*=r(-1.0*f(vec2(t))-3.14\/2.0);\r\n     p+= vec2(0.5,0.1);\r\n\r\n     \/\/ Tourelle DCA 2\r\n     p-= vec2(-0.5,0.1);\r\n     p*=r(-1.0*f(vec2(t+456.7))+3.14\/2.0);\r\n     if(f(vec2(18.0*t+456.7))>0.75)\r\n     {\r\n        if(p.x>0.0)col += vec4(1.0,1.0,0.0,1.0)*clamp(1.0-length(1.5*p),0.0,1.0)*s(0.001,.0,abs(p.y)-0.0005)*clamp(sin(100.0*(p.x-4.*t)),0.0,1.0);\r\n        col+=vec4(1.0)*metaDiamond(p,vec2(0.0),0.025);\r\n     };\r\n     p*=r( 1.0*f(vec2(t+456.7))-3.14\/2.0);\r\n     p+= vec2(-0.5,0.1);\r\n\r\n     \/\/ Jihad Ships\r\n     if(abs(p.y-0.01*t-0.25)-0.07<0.0)\r\n     {\r\n\r\n        p+=0.01*t*vec2(1.0,-1.0);\r\n        col = mix(col,vec4(0.2),s(0.005,0.0,abs(p.x-0.4)-0.15)\r\n                               *s(0.005,0.0,abs(p.y-0.2)-0.015*sin(p.x)-0.0025*clamp(sin(100.*p.x),0.0,0.75))\r\n                               *s(0.01,0.0,p.y-1.4*p.x)*s(0.005,0.0,p.x-0.55-0.004*sin(400.*p.y))\r\n                 );\r\n\r\n        col = mix(col,vec4(0.3),s(0.005,0.0,abs(p.x-0.2)-0.15)\r\n                               *s(0.005,0.0,abs(p.y-0.3)-0.015*sin(p.x)-0.0025*clamp(sin(100.*p.x),0.0,0.75))\r\n                               *s(0.01,0.0,p.y-1.4*(p.x+0.2))*s(0.005,0.0,p.x-0.30-0.004*sin(800.*p.y))\r\n                 );\r\n\r\n        p-=0.01*t*vec2(1.0,-1.0);\r\n     };\r\n     \/\/ Enable Back Heatwaves\r\n     p += vec2(-0.001*sin(150.0*p.y-55.0*t),0.0);\r\n\r\n\r\n     \/\/Distant Dunes\r\n     float Perspect=p.y-0.3;\r\n     \/\/ Super Simple Mesas\r\n     float MesasShape = s(0.008,0.,p.y+0.15*f(vec2(8.0*p.x))-0.25)*s(0.01,0.0,p.y-0.15-abs(p.x)*0.03);\r\n     vec4 MesasColor = vec4(0.2,0.15,0.1,1.0)-0.2*f(vec2(50.0*p.x))-0.1*f(vec2(100.0*p.x));\r\n     col = mix(col,MesasColor,MesasShape);\r\n\r\n     \/\/ Horizon Dunes\r\n     vec4 HorDuneColor = vec4(0.2,0.1,0.05,1.0);\r\n     HorDuneColor += 0.3*texture2D(tex00,0.02*vec2(p.x\/Perspect,1.0\/Perspect))*s(0.0,0.01,p.y-0.12);\r\n     float HorDuneShape = s(0.008,0.,p.y-(0.15+0.025*abs(f(vec2(8.0*p.x))))+0.02);\r\n     col = mix(col,HorDuneColor,HorDuneShape);\r\n\r\n     \/\/ Ground Texture\r\n     Perspect=p.y-0.16;\r\n     col += vec4(0.5,0.5,0.35,1.0)*texture2D(tex00,0.0025*vec2(p.x\/Perspect,1.0\/Perspect))*s(0.01,0.0,p.y-0.12);\r\n     \/\/ Salt Lake\r\n     col += 0.5*s(0.02,0.0,abs(p.y-0.11));\r\n\r\n     \/\/ Ornithopters\r\n     for(float or=0.0;or<10.0;or++)\r\n     {\r\n         vec2 save00 = p;\r\n         p+=vec2(0.0,-0.25);\r\n         p *= 5.5-5.0*fract(-1.0*t+0.05*or);\r\n         if( p.y>0.0)\r\n         {\r\n             p = fract(2.*p);\r\n             p+=vec2(-0.5,0.0);\r\n             float Orni = s(0.001,0.0,abs(p.x)-0.02*cos(50.0*p.y)-0.015*f(vec2(80.0*p.y)))*s(0.01,0.0,abs(p.y-0.38)-0.05);\r\n             Orni += (1.0-abs(5.*p.x))*s(0.001+0.1*abs(p.x),0.0,abs(p.y+(0.1+0.05*cos(700.0*t))*abs(p.x)-0.37)-0.001);\r\n             Orni += (1.0-abs(5.*p.x))*s(0.001+0.1*abs(p.x),0.0,abs(p.y-(0.1+0.05*cos(700.0*t))*abs(p.x)-0.38)-0.001);\r\n             col = mix(col,0.5*vec4(0.45,0.40,0.35,1.0),(fract(-1.0*t+0.05*or))*clamp(Orni,0.0,1.0));\r\n             if( mod(t,20.0) < 10.0 )\r\n             {\r\n                 col += (fract(1.0*t+0.05*or))*vec4(1.0,0.0,0.0,1.0)*metaDiamond(p,vec2( 0.0,0.36),0.005*clamp(sin(-100.0*t-0.75*or),0.0,1.0));\r\n                 col += (fract(1.0*t+0.05*or))*vec4(1.0,0.9,0.0,1.0)*metaDiamond(p,vec2( 0.0,0.36),0.002*clamp(sin(-100.0*t-0.75*or),0.0,1.0));\r\n             };\r\n             col += (fract(1.0*t+0.05*or))*vec4(1.0,0.5,0.0,1.0)*metaDiamond(p,vec2(0.0,0.39),0.002);\r\n         };\r\n         p=save00;\r\n     };\r\n\r\n     \/\/ SandClouds\r\n     col += vec4(0.75)*s(0.3,0.0,p.y - .150*f(vec2( 5.0*p.x+  1.*t))\r\n                                     - .050*f(vec2( 3.0*p.x+  2.*t))\r\n                                     - .005*f(vec2( 1.5*p.x - 3.*t))\r\n                                     - .1);\r\n\r\n     \/\/ Leaping Sandworm Cloud\r\n     vec2 wp = p+vec2(0.0,-0.10 - 0.05*cos(t));\r\n     wp*=r(3.0*t);\r\n     float WormCloud = 0.0;\r\n     WormCloud+=0.25*s(0.02,0.0,abs(length(wp)-0.15)-clamp(0.025*cos(0.6*atan(wp.y,wp.x)),0.0,1.0)-clamp(0.005*cos(5.5*atan(wp.y,wp.x)+25.0*t),0.0,1.0))\r\n     *s(0.15,0.0,wp.y-0.001);\r\n     col += WormCloud;\r\n\r\n     \/\/ Leaping Sandworm\r\n     float LSShape = 0.0;\r\n     vec4 LSColor = vec4(0.0);\r\n     if(wp.y<0.0+0.005*cos(200.0*wp.x+10.0*t))\r\n     LSShape = s(0.01,0.0,abs(length(wp)-0.15)-0.025*cos(0.5*atan(wp.y,wp.x))),\r\n     LSColor = vec4(0.45,0.40,0.35,1.0)+vec4(1.0,.9,0.25,1.0)*0.25*pow(9.*length(r(-3.0*t)*(p-vec2(0.0,0.36))),-2.0)*s(0.02,0.0,abs(length(wp)-0.17)-0.004*p.y*cos(150.0*atan(wp.y,wp.x))),\r\n     col = mix(col,LSColor,LSShape);\r\n     p -= vec2(-0.001*sin(150.0*p.y-55.0*t),0.0);\r\n     float GodEmperor = 0.0;\r\n     if( p.y - 0.2*exp(-10.0*abs(0.20*p.x)) > 0.0)\r\n     {\r\n         p.y+= 0.001*cos(40.0*t);\r\n         float ImperialStillsuit = abs(p.x)-0.005-0.002*f(vec2(50.0*p.y+10.0*t));\r\n         GodEmperor+= s(0.01,0.0,ImperialStillsuit);\r\n         GodEmperor*= s(0.005,0.0,abs(p.y-0.205)-0.04);\r\n         GodEmperor+= s(0.0001,0.0,length(p-vec2(0.0,0.247))-0.004);\r\n         GodEmperor+= s(0.0001,0.0,length(p-vec2(0.0,0.251))-0.004);\r\n         GodEmperor+= s(0.01,0.0,p.y-0.005*f(vec2(80.*p.x+10.0*t))-0.850*p.x-0.24)\r\n                     *s(0.0,0.01,p.y-0.005*f(vec2(80.*p.x+10.0*t+123.1))-0.3*p.x-0.20)\r\n                     *s(0.001,0.0,p.x);\r\n         p.y-= 0.001*cos(40.0*t);\r\n         col = mix(col,vec4(0.45,0.40,0.35,1.0),clamp(1.0,0.0,GodEmperor));\r\n     }else{\r\n         float Dune  =  p.x\/(p.y-0.2) -2.0*f(vec2(0.125\/ (p.y-0.2) - t))+1.0;\r\n         vec4 CDLeftColor = vec4(0.6)-0.2*s(2.0,0.0,sin(2.0*Dune + f(vec2(8.0*(0.125\/(p.y-0.2)-t)))));\r\n         vec4 CDRightColor = vec4(0.45,0.40,0.35,1.0);\r\n         CDRightColor += 0.2*s(0.05,0.0,abs(Dune))*f(vec2(15.0*(0.125\/(p.y-0.2)-t)));\r\n         CDRightColor += 0.2*s(0.50,0.0,0.1*sin(8.0*Dune + f(vec2(8.0*(0.125\/(p.y-0.2)-t)))));\r\n         col=mix(CDLeftColor,CDRightColor,s(0.01,0.0,Dune));\r\n     };\r\n\r\n     return col*vec4(1.0,0.7,0.6,1.0);\r\n}\r\n\r\nvec4 Scene3(vec4 col, vec2 p, float t) \/\/ Arrakisu tiramisu !\r\n{\r\n     \/\/ Slow Random Rotation\r\n     t*=0.25;\r\n     p*=r((1.0*3.14\/2.0)+0.40*f(vec2(0.2*t)));\r\n\r\n     \/\/ Zoom\r\n     p*=r(1.5*f(vec2(0.125*t)));\r\n     p *= 8.0;\r\n     vec2 h=p,r1=p;\r\n\r\n     p.y += 0.7*f(vec2(0.25*p.x))-1.*cos(0.5*p.x)*exp(-abs(5.0*p.x))*smoothstep(3.,0.0,p.y);\r\n\r\n     vec2 q = p;\r\n     float DuneBase = floor(0.75*p.y+2.*t);\r\n     p.y = fract(0.75*p.y+2.*t);\r\n     vec4 ColorDunes = vec4(0.7,0.3,0.1,1.0);\r\n     ColorDunes *=1.0-0.25*f(vec2(0.75*p.x+DuneBase));\r\n     col = mix(vec4(0.9,0.5,0.2,1.0),ColorDunes,s(0.2,0.0,abs(p.y-0.2*f(vec2(0.75*p.x+DuneBase))-0.35)-0.2-0.025*f(vec2(3.0*p.x+DuneBase))));\r\n\r\n     col += 0.5*f(vec2(0.75*p.x+DuneBase))*s(0.1,0.0,abs(p.y-0.3*f(vec2(0.75*p.x+DuneBase))-0.6)-0.05*f(vec2(p.x+DuneBase)));\r\n     col += 0.01*s(0.05,0.0,abs(p.y-0.4*f(vec2(0.75*p.x+DuneBase))-0.45)-0.001);\r\n     col += 0.05*s(0.01,0.0,abs(p.y-0.3*f(vec2(0.75*p.x+DuneBase))-0.55)-0.001);\r\n     col -= 0.150*s(0.3,0.0,abs(p.y-0.3*f(vec2(0.75*p.x+DuneBase))-0.2)-0.001);\r\n     col += 0.1*texture2D(tex02,0.015*dw0(vec2(.0,2.7*t)));\r\n\r\n     p=h;\r\n\r\n     p += vec2(0.2*f(vec2(0.5*p.y+1.5*t)),0.0);\r\n\r\n     \/\/ Sandworm Wake\r\n     vec4  PathColor = vec4(0.5,0.2,0.0,1.0)*(1.0-0.5*cos(10.0*p.x));\r\n     float PathShape = s(0.1,0.0,abs(p.x)-0.1-0.05*f(vec2(5.0*(p.y+2.7*t))))*s(0.5,0.0,p.y);\r\n     col = mix(col,PathColor,PathShape);\r\n\r\n     \/\/ Sandworm (Top View)\r\n     vec4 WormColor = vec4(0.9,0.5,0.3,1.0);\r\n     WormColor *=0.85+0.1*abs(cos(50.0*p.y+3.0*p.x*cos(p.y+5.0*t)));\r\n     WormColor *= 0.7+0.2*cos(3.0*3.14*p.x);\r\n     float WormShape = s(0.05,0.0,abs(p.x)-(0.15 + 0.01*cos(10.0*(p.y+5.0*t)))*cos(3.14*p.y\/8.));\r\n     WormShape *= s(0.1,0.0,abs(p.y)-2.5);\r\n     col = mix(col,WormColor, WormShape);\r\n\r\n     col += 0.5*vec4(0.8,0.5,0.3,1.0)*s(0.25,0.0,abs(p.x)-0.05-0.02*p.y*f(vec2(p.y + 5.0*t)))*s(3.5,0.0,p.y);\r\n     if(p.y<3.0)col += 0.2*s(3.5-p.y,0.0,p.y+20.0*p.x*p.x-2.0);\r\n     return col;\r\n}\r\n\r\nvec4 Scene7(vec4 col, vec2 p, float t, int mode)\r\n{\r\n     p*=2.4;\r\n     vec2 save_p = p;\r\n     p *= 1.0-0.01*sin(t);\r\n\r\n     p*=r(0.15);\r\n     vec2 IxSPos = vec2(-1.0-0.05*sin(0.1*t),0.15);\r\n     vec2 IxPos  = vec2( 1.0+0.05*sin(0.1*t),0.0);\r\n\r\n     vec2 LA = vec2(IxPos-IxSPos);\r\n     float angleLA= atan(LA.y,-LA.x)+PI\/2.0;\r\n\r\n     vec4 IxStar = vec4(1.0)*s(0.05,0.0,length(p - IxSPos)-0.050);\r\n     vec4 Ix     = vec4(1.0)*s(0.01,0.0,length(p -  IxPos)-0.300);\r\n\r\n     vec4 Scene = mix(vec4(0.05),vec4(0.6,0.1,0.1,1.0),s(0.5,0.0,p.y));\r\n     vec2 dwp = .30*dw0(15.*(p+vec2(0.1*t,0.0)))+vec2(0.0,-2.0);\r\n     Scene += 0.5*vec4(1.0,0.0,0.2,1.0)*0.5*s(20.,0.0,(r(1.1)*dwp).y)*s(0.0,0.5,dwp.y+3.);\r\n     Scene += 0.1*vec4(1.0)*s(0.9,0.0,abs(sin(0.10*dwp.y+0.5*f(vec2(3.*dwp.x))))-0.1);\r\n     Scene += vec4(0.4,0.2,0.1,1.0)*s(.5,0.0,abs(dwp.y-0.1*f(vec2(5.0*dwp.x))+0.9)-0.05);\r\n\r\n     Scene = StarField(Scene,0.3*(p+vec2(0.1*t,0.0)));\r\n     Scene = mix(Scene, vec4(1.0,0.2,0.0,1.0), IxStar);\r\n     p-=IxSPos;\r\n     p*=r(-0.15);\r\n     Scene += vec4(0.4,0.2,0.8,1.0)*metaDiamond(p,vec2(0.0),0.1+0.015*abs(sin(20.0*t)));\r\n     Scene += 0.3*s(0.2,0.0,abs(0.1*p.x)-0.05)*s(0.025,0.0,abs(p.y)-0.0025);\r\n     p*=r( 0.15);\r\n     p+=IxSPos;\r\n\r\n     vec4 ColorIx = vec4(0.7,0.1,0.1,1.0);\r\n\r\n     IxPos = vec2(0.8,-0.0);\r\n     Ix     = vec4(1.0)*s(0.01,0.0,length(p -  IxPos)-0.7);\r\n     ColorIx = vec4(0.7,0.1,0.1,1.0)+0.65*texture2D(tex02,0.5*(p-IxPos)\/cos(0.5*dot((p-IxPos),(p-IxPos)))+vec2(0.01*t,0.0)).xxxx;\r\n     ColorIx += 0.1*texture2D(tex00,1.0*(p-IxPos)\/cos(0.5*dot((p-IxPos),(p-IxPos)))+vec2(0.02*t,0.0)).xxxx;\r\n     ColorIx -= 0.7*s(0.4,0.0,length(r(angleLA)*(p-IxPos)-vec2(0.0,-0.5))-0.7);\r\n     Scene += 0.5*vec4(1.0,0.5,0.0,1.0)*s(0.03,0.0,length(p-IxPos)-0.70);\r\n     Scene = mix(Scene,ColorIx,Ix);\r\n\r\n     Scene *= Scene.xxxx;\r\n     p*=r(-0.15 );\r\n\r\n     if( mode == 1 )\r\n     {\r\n         vec4 ColorComputer = vec4(0.9,0.0,0.0,1.0);\r\n         ColorComputer *= 0.5*abs(sin(0.5*p.y-10.0*t-150.0*length(p)));\r\n         ColorComputer += 0.5*vec4(1.0,0.5,0.0,1.0)*clamp( s(0.03,0.0,length(p-vec2(0.0,-0.1))-0.23)-s(0.03,0.0,length(p-vec2(0.0,-0.0))-0.23),0.0,1.0);\r\n         ColorComputer += 0.29*vec4(1.0,0.0,0.0,1.0)*abs(sin(150.0*p.y+50.0*t));\r\n         Scene = mix(Scene,vec4(0.1)*cos(3.0*p.x),s(0.01,0.0,abs(p.x)-0.5));\r\n         Scene += 0.1*vec4(1.0)*s(0.03,0.0,abs(abs(p.x)-0.48)-0.01);\r\n         Scene += 0.025*vec4(1.0)*s(0.01,0.0,abs(abs(p.x)-0.47)-0.001);\r\n         Scene += vec4(1.0,0.0,0.0,1.0)*s(0.15,0.0,abs(length(p)-0.25)-0.01);\r\n         Scene = mix(Scene,vec4(0.75)*sin(2.0*p.y),s(0.01,0.0,length(p)-0.3));\r\n         Scene = mix(Scene,ColorComputer,s(0.01,0.0,length(p)-0.25));\r\n         Scene = mix(Scene,ColorComputer,s(0.005,0.0,abs(p.x)-0.005));\r\n         Scene = mix(Scene,vec4(0.05),s(0.1,0.0,length(p)-0.1));\r\n\r\n         Scene += 0.25*vec4(1.0,0.0,0.,0.0)*s(0.05,0.0,length(p-vec2(0.0,.3))-0.1)*s(0.01,0.0,length(p)-0.25);\r\n         Scene += vec4(1.0,0.5,0.0,1.0)*f(vec2(10.0*t))*metaDiamond(p,vec2(0.0,-0.35),0.01);\r\n         Scene += vec4(1.0)*f(vec2(10.0*t+123.4))*metaDiamond(p,vec2(0.0,-0.40),0.007);\r\n         Scene += vec4(1.0,0.3,0.0,1.0)*(0.5+0.25*sin(t)+0.25*f(vec2(20.*t)))*metaDiamond(p,vec2(0.0,0.0),0.05);\r\n\r\n         p*=r(0.15*t);\r\n\r\n         Scene = mix(Scene,(1.0+0.15*clamp(sin(70.0*t),0.0,1.0))*vec4(1.0,0.75,0.0,1.0),s(0.05,0.0,abs(length(p)-0.2)-0.01)*s(0.0,0.05,p.y-abs(p.x))*s(0.0,0.08,abs(p.y-2.5*p.x)-0.01));\r\n         Scene = mix(Scene,(1.0+0.15*clamp(sin(70.0*t),0.0,1.0))*vec4(1.0,0.75,0.0,1.0),s(0.05,0.0,abs(length(p)-0.2)-0.01)*s(0.05,0.0,(r(0.77)*p).y+abs((r(0.77)*p).x))*s(0.0,0.08,abs(p.y-p.x)-0.01));\r\n         Scene = mix(Scene,vec4(1.0,0.75,0.5,1.0),(0.5+0.5*clamp(sin(20.0*t),0.0,1.0))*s(0.02,0.0,length(p-vec2(0.15,-0.15))-0.0002));\r\n         Scene = mix(Scene,vec4(1.0,0.75,0.0,1.0),(0.5+0.5*clamp(sin(15.0*t),0.0,1.0))*s(0.02,0.0,length(p-vec2(0.11,-0.19))-0.0005));\r\n         p=save_p;\r\n         p+= vec2(0.47,0.7);\r\n         \/\/ IXIA AI\r\n         ix(73,0.0);ix(88,0.02);ix(73,0.04);ix(65,0.06);ix(73,0.1);ix(65,0.12);\r\n         \/\/ HIVE 001\r\n         p=save_p;\r\n         p+= vec2(0.47,0.8);\r\n         ix(69,0.0);ix(83,0.03);ix(83,0.06);ix(65,0.09);ix(73,0.12);ix(77,0.15);\r\n         ix(48,0.21);ix(48,0.24);ix(49,0.27);\r\n\r\n         p-= vec2(0.365,0.7);\r\n     }else{\r\n         p=save_p;\r\n         p*=0.5;\r\n         p+= vec2(0.3,0.4);\r\n         \/\/ PLANET IX\r\n         ix(80,0.27);ix(76,0.30);ix(65,0.33);ix(78,0.36);ix(69,0.39);ix(84,0.42);ix(69,0.45);ix(73,0.51);ix(88,0.53);\r\n     };\r\n\r\n     return clamp(Scene*clamp(5.*t,0.0,1.0),0.,1.0);\r\n}\r\n\r\nvec4 Scene8(vec4 c, vec2 p,float datime)\r\n{\r\n     float t = mod(datime,20.0);\r\n\r\n     vec4 col=c;\r\n     p*=r(0.3*f(vec2(0.1*t))-.15);\r\n\r\n     p*=5.0+1.5*sin(0.1*t);\r\n     p=p\/(p.y-8.);\r\n     p*=vec2(1.0,-1.0);\r\n\r\n     col += mix(vec4(0.15,0.,0.00,1.0),vec4(0.2,0.,0.,1.0),abs(p.y));\r\n\r\n     float Grid = s(0.5,0.0,length(fract(300.0*p)-vec2(0.5))-0.3);\r\n     Grid+=s(0.001,0.0,abs(length(p)-1.5)-0.005);\r\n\r\n     if(p.y+0.5>1.0-clamp(t,0.0,1.0))\r\n     {\r\n        vec2 save=p;\r\n        p*=1.0-0.5\/length(7.0*p);\r\n        p*=5.0;\r\n        p*=r(0.5);\r\n        p+= vec2(0.09*t,0.0);\r\n        col+= 0.25*vec4(0.9,0.2,0.0,1.0)*s(0.5,0.0,length(vec2(0.5,1.0)*p)-1.0)-0.35*s(0.5,0.0,abs(p.y)-0.1);\r\n        vec2 dwp = dw0(7.*p)+vec2(0.,-5.0);\r\n        col += mix(vec4(0.05),vec4(0.0,0.1,0.15,1.0),s(20.,0.0,abs(dwp.y)-1.0));\r\n        col += 0.5*vec4(1.0,0.3,0.1,1.0)*s(5.,0.0,dwp.y)*s(0.0,2.8,dwp.y+3.);\r\n        p-= vec2(0.09*t,0.0);\r\n        p*=r(-0.5);\r\n        p*= 0.2;\r\n        p=save;\r\n     };\r\n\r\n     if(p.y+0.5>1.-clamp(t-1.0,0.0,1.0))\r\n     {\r\n        vec2 bh725=p;\r\n        bh725*=(1.0-0.5\/length(10.0*bh725));\r\n        bh725+= vec2(0.012*t,0.0);\r\n        col = StarField(col,2.0*r(2.)*bh725);\r\n     };\r\n\r\n     if(p.y+0.5>1.-clamp(t-2.0,0.0,1.0))\r\n     {\r\n        p*=10.0;\r\n        col += 0.2*(s(0.01,0.0,fract(abs(p.x))-0.01) + s(0.01,0.0,fract(abs(p.y))-0.01));\r\n        col += 0.5*s(0.005,0.0,abs(p.x)-0.005);\r\n        col += 0.5*s(0.005,0.0,abs(p.y)-0.005);\r\n        col += 0.5*s(0.005,0.0,abs(p.y+p.x)-0.005);\r\n        col += 0.5*s(0.005,0.0,abs(p.y-p.x)-0.005);\r\n        col += 0.5*clamp(sin(100.0*p.y)*s(0.01,0.0,abs(p.x)-0.02),0.0,1.0);\r\n        col += 0.5*clamp(sin(100.0*p.x)*s(0.01,0.0,abs(p.y)-0.02),0.0,1.0);\r\n        p*=0.1;\r\n     };\r\n\r\n     if(p.y+0.5>1.-clamp(t-3.0,0.0,1.0))\r\n     {\r\n        p*=5.0;\r\n        col += vec4(1.0,0.0,0.0,1.0)*s(0.01,0.0,length(p)-0.2)+s(0.003,0.0,abs(length(p)-0.2-0.2*fract(-t))-0.003);\r\n        col=mix(col,vec4(0.0),s(0.01,0.0,length(p)-0.19));\r\n        p*=0.2;\r\n\r\n        p*=2.0;\r\n        p*=vec2(-1.0,1.0);\r\n\r\n        vec4 Scene = vec4(0.,0.,0.,1.0);\r\n        if(t-3.0>1.0)\r\n        {\r\n           p+=vec2(-0.1,-0.07);\r\n           \/\/ Blackhole\r\n           ix(84,0.0);ix(82,0.03);ix(79,0.06);ix(85,0.09);ix(32,0.12);ix(78,0.15);ix(79,0.18);ix(73,0.21);ix(82,0.24);ix(32,0.27);ix(55,0.3);ix(50,0.33);ix(53,0.36);\r\n           p-=vec2(-0.1,-0.07);\r\n        };\r\n\r\n        if(t-3.0>1.1)\r\n        {\r\n           p+=vec2(0.25,0.15);\r\n           \/\/FLYBY\r\nix(84,0.0);ix(69,0.03);ix(77,0.06);ix(80,0.09);ix(83,0.12);ix(32,0.16);ix(68,0.19);ix(69,0.22);ix(32,0.25);ix(83,0.28);ix(85,0.31);ix(82,0.34);ix(86,0.37);ix(79,0.4);ix(76,0.43);\r\n\r\n           if(t-3.0>1.2)\r\n           {\r\n              p.y+=0.05;\r\n              \/\/NO-SHIP\r\nix(78,0.0);ix(79,0.03);ix(78,0.06);ix(45,0.09);ix(86,0.12);ix(65,0.15);ix(73,0.18);ix(83,0.2075);ix(83,0.2425);ix(69,0.28);ix(65,0.31);ix(85,0.34);ix(58,0.38);ix(56,0.41);ix(32,0.41);ix(77,0.45);ix(79,0.48);ix(73,0.51);ix(83,0.54);\r\n\r\n              p.y-=0.05;\r\n           };\r\n           if(t-3.0>1.3)\r\n           {\r\n              p.y+=0.1;\r\nix(71,0.0);ix(65,0.03);ix(76,0.06);ix(65,0.09);ix(67,0.12);ix(84,0.15);ix(73,0.18);ix(81,0.21);ix(85,0.24);ix(69,0.27);ix(58,0.30);ix(32,0.32);ix(49,0.35);ix(48,0.38);ix(48,0.41);ix(48,0.44);ix(48,0.47);ix(48,0.50);ix(48,0.53);ix(32,0.56);ix(65,0.59);ix(78,0.62);ix(78,0.65);ix(69,0.68);ix(69,0.71);ix(83,0.74);\r\n              p.y-=0.1;\r\n           };\r\n           p-=vec2(0.25,0.15);\r\n        };\r\n\r\n        p*=vec2(-1.0,1.0);\r\n        p*=1.0\/2.0;\r\n        col += vec4(1.0,1.0,0.3,1.0)*Scene.x*(clamp(0.5+0.5*sin(120.0*t),0.0,1.0));\r\n     };\r\n     if(p.y+0.5>1.-clamp(t-4.0,0.0,1.0))\r\n     {\r\n        p*=5.0;\r\n        col += 0.3*s(0.01,0.0,abs(length(p)-2.0)-0.001);\r\n        col += 0.3*s(0.01,0.0,abs(length(p)-1.5)-0.001);\r\n        col += 0.3*s(0.01,0.0,abs(length(p)-1.0)-0.001);\r\n        col += 0.3*s(0.01,0.0,abs(length(p)-0.5)-0.001);\r\n        p*=0.2;\r\n     };\r\n\r\n     if(p.y+0.5>1.-clamp(t-5.0,0.0,1.0))\r\n     {\r\n        p*=5.0;\r\n        p*=r(0.9);\r\n        col += s(0.01,0.0,abs(p.y+0.5*p.x*p.x-0.23)-0.001);\r\n        p*=r(-0.9);\r\n        p*=0.2;\r\n     };\r\n\r\n     if(p.y+0.5>1.-clamp(t-6.0,0.0,1.0))\r\n     {\r\n        p*=5.0;\r\n        p*=r(0.9);\r\n        col += s(0.01,0.0,length(p-vec2((t-9.0),-0.5*(t-9.0)*(t-9.0)+0.23))-0.02-0.02*fract(5.*t));\r\n        p*=r(-0.9);\r\n        p*=0.2;\r\n     };\r\n\r\n     if(t<6.0)col += vec4(0.9,0.5,0.0,1.0)*s(0.0,0.01,p.y-0.5 + fract(t))*s(0.5,0.0,p.y-0.5 + fract(t)-.05);\r\n\r\n     col*=(0.5+0.9*Grid);\r\n     return col;\r\n}\r\n\r\nvec4 Scene9(vec4 col, vec2 p,float datime)\r\n{\r\n     col = vec4(0.0,0.0,0.2,1.0)+StarField(col,r(1.3)*1.0*(p+vec2(0.01*t,0.0)));\r\n     p*=1.5;\r\n     vec2 txtp = p;\r\n     vec4 CRcolor = vec4(0.0,1.0,1.0,1.0)*clamp(mod(datime,TxtTimeLength),0.0,1.0);\r\n\r\n     \/\/col+= s(0.01,0.0,abs(p.y)-0.001)*s(0.01,0.0,abs(p.x)-0.15);\r\n\r\n     if( datime<1.0*TxtTimeLength )\r\n     {\r\n\r\n         p+=vec2(0.455,-0.1);\r\n         \/\/ CONCEPTS\r\n         cr(67,0.0 );cr(79,0.03);cr(78,0.06);cr(67,0.09);cr(69,0.12);cr(80,0.15);cr(84,0.18);\r\n         \/\/ CODE\r\n         cr(67,0.24);cr(79,0.27);cr(68,0.30);cr(69,0.33);\r\n         \/\/ DESIGNS\r\n         cr(68,0.39);cr(69,0.42);cr(83,0.45);cr(73,0.48);cr(71,0.51);cr(78,0.54);cr(83,0.57);\r\n         p = txtp;\r\n\r\n         p+=vec2(0.53,0.0);\r\n         \/\/ JOHANN\r\n         cr(74,0.0);cr(79,0.03);cr(72,0.06);cr(65,0.09);cr(78,0.12);cr(78,0.15);\r\n         \/\/ MSM01\r\n         cr(34,0.21);cr(77,0.23);cr(83,0.26);cr(77,0.29);cr(48,0.32);cr(49,0.35);cr(34,0.37);\r\n         \/\/ PAILLOTTET\r\n         cr(80,0.42);cr(65,0.45);cr(73,0.48);cr(76,0.51);cr(76,0.54);cr(79,0.57);cr(84,0.60);cr(84,0.63);cr(69,0.66);cr(84,0.69);\r\n         p = txtp;\r\n\r\n     }else{\r\n         if( datime<2.0*TxtTimeLength )\r\n         {\r\n             p+=vec2(0.17,-0.1);\r\n             \/\/ SOUNDTRACK\r\n             cr(77,0.0);cr(85,0.03);cr(83,0.06);cr(73,0.09);cr(81,0.12);cr(85,0.15);cr(69,0.18);\r\n             p = txtp;\r\n\r\n             p+=vec2(0.45,0.0);\r\n             \/\/ PETER\r\n             cr(80,0.0);cr(69,0.03);cr(84,0.06);cr(69,0.09);cr(82,0.12);\r\n             \/\/ SKAVEN\r\n             cr(34,0.19);cr(83,0.21);cr(75,0.24);cr(65,0.27);cr(86,0.30);cr(69,0.33);cr(78,0.36);cr(34,0.39);\r\n             \/\/ HAJBA\r\n             cr(72,0.45);cr(65,0.48);cr(74,0.51);cr(66,0.54);cr(65,0.57);\r\n             p = txtp;\r\n\r\n         }else{\r\n             if( datime<3.0*TxtTimeLength)\r\n             {\r\n                 p*=1.4;\r\n                 \/\/ SUPPORT MY WORK ON KO-FI\r\n                 p+=vec2(0.53,-0.1);\r\n                 cr(83,0.0);cr(79,0.03);cr(85,0.06);cr(84,0.09);cr(69,0.12);cr(78,0.15);cr(69,0.18);cr(90,0.21);cr(45,0.24);cr(77,0.27);cr(79,0.30);cr(73,0.33);cr(32,0.36);cr(83,0.39);cr(85,0.42);cr(82,0.45);cr(32,0.48);cr(75,0.51);cr(79,0.54);cr(45,0.57);cr(70,0.60);cr(73,0.63);cr(32,0.66);cr(33,0.69);\r\n                 p = txtp;\r\n                 p*=1.4;\r\n                 p+=vec2(1.025,0.0);\r\n                 cr(72,0.0);cr(84,0.03);cr(84,0.06);cr(80,0.09);cr(83,0.12);cr(58,0.15);cr(47,0.18);cr(47,0.21);cr(75,0.24);cr(79,0.27);cr(45,0.3);cr(70,0.33);cr(73,0.36);cr(46,0.39);cr(67,0.42);cr(79,0.45);cr(77,0.48);cr(47,0.51);cr(84,0.54);cr(72,0.57);cr(69,0.6);cr(76,0.63);cr(65,0.66);cr(83,0.69);cr(84,0.72);cr(84,0.75);cr(69,0.78);cr(77,0.81);cr(80,0.84);cr(76,0.87);cr(69,0.9);cr(79,0.93);cr(70,0.96);cr(83,0.99);cr(67,1.02);cr(73,1.05);cr(69,1.08);cr(78,1.11);cr(67,1.14);cr(69,1.17);cr(70,1.2);cr(73,1.23);cr(67,1.26);cr(84,1.29);cr(73,1.32);cr(79,1.35);cr(78,1.38);\r\n             }else{\r\n                 p*=1.4;\r\n                 p+=vec2(0.815,-0.1);\r\n                 cr(66,0.0);cr(69,0.03);cr(83,0.06);cr(79,0.09);cr(73,0.12);cr(78,0.15);cr(32,0.18);cr(68,0.21);cr(39,0.24);cr(85,0.27);cr(78,0.30);cr(32,0.33);cr(83,0.36);cr(72,0.39);cr(65,0.42);cr(68,0.45);cr(69,0.48);cr(82,0.51);cr(32,0.54);cr(83,0.57);cr(70,0.60);cr(32,0.63);cr(80,0.66);cr(79,0.69);cr(85,0.72);cr(82,0.75);cr(32,0.78);cr(86,0.81);cr(79,0.84);cr(84,0.87);cr(82,0.90);cr(69,0.93);cr(32,0.96);cr(83,0.99);cr(73,1.02);cr(84,1.05);cr(69,1.08);cr(32,1.11);cr(63,1.14);\r\n\r\n                 p+=vec2(0.0,0.1);\r\n                 cr(74,0.0);cr(69,0.03);cr(32,0.06);cr(80,0.09);cr(69,0.12);cr(85,0.15);cr(88,0.18);cr(32,0.21);cr(86,0.24);cr(79,0.27);cr(85,0.3);cr(83,0.33);cr(32,0.36);cr(65,0.39);cr(73,0.43);cr(68,0.46);cr(69,0.49);cr(82,0.52);cr(46,0.55);cr(46,0.58);cr(46,0.61);\r\n                 p+=vec2(0.0,0.1);\r\n                 cr(67,0.0);cr(79,0.03);cr(78,0.06);cr(84,0.09);cr(65,0.12);cr(67,0.15);cr(84,0.18);cr(58,0.21);cr(32,0.36);cr(67,0.39);cr(79,0.42);cr(78,0.45);cr(84,0.48);cr(65,0.51);cr(67,0.54);cr(84,0.57);cr(64,0.6);cr(66,0.63);cr(65,0.66);cr(83,0.69);cr(69,0.72);cr(76,0.75);cr(85,0.78);cr(78,0.81);cr(65,0.84);cr(73,0.87);cr(82,0.9);cr(69,0.93);cr(46,0.96);cr(70,0.99);cr(82,1.02);\r\n                 p = txtp;\r\n                 p*=1.4;\r\n         p+=vec2(0.81,0.40);\r\ncr(76,0.0);cr(39,0.03);cr(85,0.06);cr(76,0.09);cr(84,0.12);cr(73,0.15);cr(77,0.18);cr(69,0.21);cr(32,0.24);cr(84,0.27);cr(69,0.3);cr(77,0.33);cr(80,0.36);cr(76,0.39);cr(69,0.42);cr(32,0.45);cr(68,0.48);cr(69,0.51);cr(32,0.54);cr(76,0.57);cr(65,0.6);cr(32,0.63);cr(83,0.66);cr(67,0.69);cr(73,0.72);cr(69,0.75);cr(78,0.78);cr(67,0.81);cr(69,0.84);cr(32,0.87);cr(70,0.9);cr(73,0.93);cr(67,0.96);cr(84,0.99);cr(73,1.02);cr(79,1.05);cr(78,1.08);\r\n                 p = txtp;\r\n\r\n                 p*=1.4;\r\n                 p+=vec2(0.315,0.475);\r\n                 cr(67,0.0);cr(79,0.03);cr(80,0.06);cr(89,0.09);cr(82,0.12);cr(73,0.15);cr(71,0.18);cr(72,0.21);cr(84,0.24);cr(32,0.27);cr(50,0.3);cr(48,0.33);cr(50,0.36);cr(54,0.39);\r\n                 p = txtp;\r\n\r\n                 p*=1.4;\r\n                 p+=vec2(0.315,0.55);\r\n                 cr(77,0.0);cr(65,0.03);cr(68,0.06);cr(69,0.09);cr(32,0.12);cr(73,0.15);cr(78,0.18);cr(32,0.21);cr(70,0.24);cr(82,0.27);cr(65,0.3);cr(78,0.33);cr(67,0.36);cr(69,0.39);\r\n                 p = txtp;\r\n             };\r\n         };\r\n     };\r\n     return col;\r\n}\r\n\r\nvec4 txtScene(vec2 p, int i,float t)\r\n{\r\n     vec4 txtS =vec4(0.0);\r\n     \/\/Scene 1\r\n     float numtxt = floor(t\/TxtTimeLength);\r\n     float timetxt = numtxt*TxtTimeLength +1.0;\r\n     if(t<46.0*TxtTimeLength)if(t>timetxt && t<timetxt+(TxtTimeLength-1.0))txtS = traceStr(1.5*(p*vec2(1.0,-1.0)+vec2(0.0,0.25)),int(numtxt),timetxt);\r\n     return txtS;\r\n}\r\n\r\nvoid main()\r\n{\r\n     vec2 p = vec2( (gl_FragCoord.x - iResolution.x\/2.0)\/iResolution.y,gl_FragCoord.y\/iResolution.y - 0.5);\r\n     vec2 q = p;\r\n     vec4 col = vec4(0.0);\r\n\r\n     t = mod(1.0*(iTime-0.0*TxtTimeLength),TotalDuration)-0.400;\r\n     if(t >  0.0*TxtTimeLength && t <  2.0*TxtTimeLength)col = Scene7(col,p,t                   ,0);\r\n     if(t >  2.0*TxtTimeLength && t <  4.0*TxtTimeLength)col = Scene7(col,p,t                   ,1);\r\n     if(t >  4.0*TxtTimeLength && t <  5.0*TxtTimeLength)col = Scene0(col,p,t                   ,1);\r\n     if(t >  5.0*TxtTimeLength && t <  6.0*TxtTimeLength)col = Scene0(col,p,t                   ,0);\r\n     if(t >  6.0*TxtTimeLength && t < 10.0*TxtTimeLength)col = Scene5(col,p,t- 6.0*TxtTimeLength  );\r\n     if(t > 10.0*TxtTimeLength && t < 12.0*TxtTimeLength)col = Scene2(col,p,t-10.0*TxtTimeLength  );\r\n     if(t > 12.0*TxtTimeLength && t < 16.0*TxtTimeLength)col = Scene3(col,p,t-13.0*TxtTimeLength  );\r\n     if(t > 16.0*TxtTimeLength && t < 20.0*TxtTimeLength)col = Scene6(col,p,t-16.0*TxtTimeLength,1.0 - (t-16.0*TxtTimeLength)\/(4.0*TxtTimeLength));\r\n     if(t > 20.0*TxtTimeLength && t < 22.0*TxtTimeLength)col = Scene7(col,p,t-20.0*TxtTimeLength,1);\r\n     if(t > 22.0*TxtTimeLength && t < 24.0*TxtTimeLength)col = Scene4(col,p,t-22.0*TxtTimeLength,1);\r\n     if(t > 24.0*TxtTimeLength && t < 26.0*TxtTimeLength)col = Scene4(col,p,t-24.0*TxtTimeLength,2);\r\n     if(t > 26.0*TxtTimeLength && t < 30.0*TxtTimeLength)col = Scene7(col,p,t-26.0*TxtTimeLength,1);\r\n     if(t > 30.0*TxtTimeLength && t < 33.0*TxtTimeLength)col = Scene8(col,p,t-30.0*TxtTimeLength);\r\n     if(t > 33.0*TxtTimeLength && t < 34.0*TxtTimeLength)col = Scene0(col,p,t-33.0*TxtTimeLength,2);\r\n     if(t > 34.0*TxtTimeLength && t < 38.0*TxtTimeLength)col = Scene1(col,p,t-34.0*TxtTimeLength  );\r\n     if(t > 38.0*TxtTimeLength && t < 42.0*TxtTimeLength)col = Scene7(col,p,t-38.0*TxtTimeLength,1);\r\n     if(t > 42.0*TxtTimeLength && t < 44.0*TxtTimeLength)col = Scene6(col,p,t-42.0*TxtTimeLength,1.1);\r\n     if(t > 44.0*TxtTimeLength && t < 46.0*TxtTimeLength)col = Scene7(col,p*vec2(1.0-0.035*(t-44.0*TxtTimeLength)),t-44.0*TxtTimeLength,1);\r\n     if(t > 46.0*TxtTimeLength )col = Scene9(col,p,t-46.0*TxtTimeLength);\r\n\r\n\r\n     p=q;\r\n     col -=texture2D(tex00,r(0.5)*p)*length(0.05*p);\r\n     col = mix(col,vec4(0.0),0.9*s(0.0,0.3,length(0.5*p)-0.2));\r\n     if(gl_FragCoord.y<0.1*iResolution.y || gl_FragCoord.y>0.9*iResolution.y)col = vec4(0.0);\r\n     if(t<46.0*TxtTimeLength)if(gl_FragCoord.y<0.1*iResolution.y)col += txtScene(q+vec2(0.0,0.02),1,t);\r\n\r\n     gl_FragColor = col;\r\n}\r\n<\/script>\r\n<!--Interface Buttons-->\r\n\r\n<div id=\"cadre\" style=\"background:#FFFFFF;width:700px;height:525px;align:center;\">\r\n\r\n<!--Rendering surface for the shader...-->\r\n<canvas id = \"gl\" width=\"0\" height=\"0\" style=\"width:700px;height:525px;align:center;background-color: #000000;\"><\/canvas>\r\n\r\n\r\n<\/div>\r\n\r\n<!--Text Help for Controls-->\r\n<div style=\"display:block;margin:0px;padding:0px;width:700px;font-size:0;border:none;outline:none;background:#000000;\"><button id=\"but1\" onclick=\"launchShaders();PlaySound();\" style=\"width:500px;height:20px;border:none;outline:none;font-size:15;background:#FFDD11;color:#000000;font-weight:bold;\" onmouseover=\"myOverFunctionBut1()\" onmouseout=\"myOutFunctionBut1()\">RED\u00c9MARRAGE SYNCHRO<\/button><button id=\"but2\" onclick=\"SoundtrackOnOff();\" style=\"width:200px;height:20px;border:none;outline:none;font-size:15;background:#FFDD11;color:#000000;font-weight:bold;\" onmouseover=\"myOverFunctionBut2()\" onmouseout=\"myOutFunctionBut2()\">SON ON\/OFF<\/button><\/div>\r\n<div id=\"help01\" style=\"display:block;background:#000000;color:#FFDD11;width:698px;font-size:15px;border:1px solid;border-color:#FFDD11;\">\r\n&nbsp;&nbsp;CONTROLES :<br>\r\n&nbsp;&nbsp;1-L'animation du nuanceur (\"shader\") d\u00e9marre automatiquement en silence.<br>\r\n&nbsp;&nbsp;2-Cliquez une ou deux fois sur RED\u00c9MARRAGE SYNCHRO pour avoir le son.<br>\r\n&nbsp;&nbsp;3-Coupez le son \u00e0 n'importe quel moment en cliquant sur Son ON\/OFF.<br>\r\n&nbsp;&nbsp;4-Double-cliquez sur l'animation pour passer en plein-\u00e9cran ou revenir en fen\u00eatr\u00e9.<br>\r\n<\/div>\r\n<br>\r\n<div id=\"credits01\" style=\"display:block;background:#000000;color:#CCCCCC;width:692px;font-size:15px;border:4px solid;border-color:#CCCCCC;\">\r\n&nbsp;&nbsp;Concept\/Programmation\/Art\/\u00c9criture : J. Paillottet<br>\r\n&nbsp;&nbsp;Tous Droits R\u00e9serv\u00e9s - Baselunaire.fr - Ao\u00fbt 2026<br>\r\n&nbsp;&nbsp;Musique : <b>\"Exhumed Glory\"<\/b> par Peter \"Skaven\" Hajba<br>\r\n&nbsp;&nbsp;Musique sous license CC By 4.0 : https:\/\/creativecommons.org\/licenses\/by\/4.0\/<br>\r\n<\/div>\r\n<audio controls src=\"https:\/\/baselunaire.fr\/blog\/wp-content\/uploads\/2026\/08\/Skaven252-MMC-2023-06_ExhumedGlory.mp3\" id=\"odio\" style=\"width:700px;display:none;\"><\/audio><br \/>\n<script>\/\/ Description :\r\n\/\/ Morimea's base minimal webgl code, upgraded with textures, fullscreen, loader,\r\n\/\/ inline fragment, plus (kinda) synchro soundtrack ! It doesn't look like much,\r\n\/\/ but it's basically a copy\/paste demo framework for your next prod ! All in one\r\n\/\/ single html file, ready to hack ! Just add your own textures, your own soundtrack,\r\n\/\/ tweak the code if needed, copy your shadertoy between the tags, and enter the\r\n\/\/ next democompo ! :D\r\n\r\n\/\/ BIG Thanks to :\r\n\/\/ -Morimea, Iq, and everyone at Shadertoy's. You guys ROCKS !\r\n\r\n\/\/ Licence : since this is pretty much the smallest, minimal code to run things,\r\n\/\/ there's not much licencing that applies. This is just \"boilerplate\" code...\r\n\/\/ Do what you want. I do not care.\r\n\r\n\/\/ The fragment shader however, is my own artistic work, so is VERY MUCH protected\r\n\/\/ by copyright.\r\n\r\n\/\/ MSM01\r\n\r\n\/\/ -------------------------------------------------\r\n\/\/ PATHS AND VARS TO CHANGE--------------------BEGIN\r\n\/\/ -------------------------------------------------\r\n\"use strict\";\r\nvar PostSizeX = 700.0;\r\nvar PostSizeY = 525.0;\r\n\r\ndocument.getElementById(\"gl\").width           = PostSizeX;\r\ndocument.getElementById(\"gl\").height          = PostSizeY;\r\ndocument.getElementById(\"gl\").style.width     = PostSizeX;\r\ndocument.getElementById(\"gl\").style.height    = PostSizeY;\r\n\r\ndocument.getElementById(\"cadre\").style.height = PostSizeY;\r\n\r\nvar sh_width  = PostSizeX;\r\nvar sh_height = PostSizeY;\r\n\r\nvar tex00_path = \"https:\/\/baselunaire.fr\/blog\/wp-content\/uploads\/2026\/03\/tex00.jpg\";\r\nvar tex01_path = \"https:\/\/baselunaire.fr\/blog\/wp-content\/uploads\/2026\/03\/tex01.jpg\";\r\nvar tex02_path = \"https:\/\/baselunaire.fr\/blog\/wp-content\/uploads\/2026\/03\/tex02.jpg\";\r\nvar tex03_path = \"https:\/\/baselunaire.fr\/blog\/wp-content\/uploads\/2026\/03\/tex03.jpg\";\r\n\r\n\/\/ -------------------------------------------------\r\n\/\/ PATHS AND VARS TO CHANGE----------------------END\r\n\/\/ -------------------------------------------------\r\n\r\nvar gl            = null;\r\nvar Shader        = null;\r\nvar time_start    = null;\r\nvar shadersloaded = false;\r\nvar texturex1     = null;\r\nvar texturex2     = null;\r\nvar texturex3     = null;\r\nvar texturex4     = null;\r\n\r\nfunction InitializeShader(source_vs, source_frag, fv, ff)\r\n{\r\n         var ErrorMessage = \"Initializing Shader Program: <\" + fv + \">, <\" + ff + \">\";\r\n         var shader_vs = gl.createShader(gl.VERTEX_SHADER);\r\n         var shader_frag = gl.createShader(gl.FRAGMENT_SHADER);\r\n         gl.shaderSource(shader_vs, source_vs);\r\n         gl.shaderSource(shader_frag, source_frag);\r\n         gl.compileShader(shader_vs);\r\n         gl.compileShader(shader_frag);\r\n         var error = false;\r\n         if( !gl.getShaderParameter(shader_vs, gl.COMPILE_STATUS) )\r\n         {\r\n             ErrorMessage += gl.getShaderInfoLog(shader_vs);\r\n             error = true;\r\n         }\r\n         if( !gl.getShaderParameter(shader_frag, gl.COMPILE_STATUS) )\r\n         {\r\n             ErrorMessage += gl.getShaderInfoLog(shader_frag);\r\n             error = true;\r\n         }\r\n         var program = gl.createProgram();\r\n         var ret = gl.getProgramInfoLog(program);\r\n         if( ret != \"\" )ErrorMessage += ret;\r\n         gl.attachShader(program, shader_vs);\r\n         gl.attachShader(program, shader_frag);\r\n         if( gl.linkProgram(program) == 0 )\r\n         {\r\n             ErrorMessage += \"\\r\\ngl.linkProgram(program) failed with error code 0.\";\r\n             error = true;\r\n         }\r\n         if( error )\r\n         {\r\n             console.log(ErrorMessage + ' ...failed to initialize shader.');\r\n             return false;\r\n         }else{\r\n             console.log(ErrorMessage + ' ...shader successfully created.');\r\n             return program;\r\n         }\r\n}\r\n\r\nfunction isPowerOf2(value){ return (value & (value - 1)) == 0; }\r\n\r\nvar Texture = function( fn )\r\n{\r\n              var that      = this;\r\n              var root      = this;\r\n              this.filename = fn;\r\n              this.isload   = false;\r\n              this.width    = 0;\r\n              this.height   = 0;\r\n              this.image    = null;\r\n              this.texture  = gl.createTexture();\r\n              this.load     = function (filename)\r\n              {\r\n                   that.image = new Image();\r\n                   that.image.onload = function (event)\r\n                   {\r\n                        var file = fn.split(\"\/\");\r\n                        that.width = this.width;\r\n                        that.height = this.height;\r\n                        gl.bindTexture(gl.TEXTURE_2D, that.texture);\r\n                        gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, that.image);\r\n                        if( isPowerOf2(that.image.width) && isPowerOf2(that.image.height) )\r\n                        {\r\n                            gl.generateMipmap(gl.TEXTURE_2D);\r\n                        }else{\r\n                            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);\r\n                            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);\r\n                            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);\r\n                            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);\r\n                        }\r\n                        gl.bindTexture(gl.TEXTURE_2D, null);\r\n                        console.log(\"Loaded texture (\" + that.width + \"x\" + that.height + \") filename = \" + file[file.length - 1]);\r\n                        that.isload = true;\r\n                   };\r\n                   that.image.src = filename;\r\n                   return that;\r\n              };\r\n              if( fn != undefined && fn != \"\" && fn != null )\r\n              {\r\n                  this.load(fn);\r\n              }else{\r\n                  console.log(\"Unable to load texture. Filename '\" + fn + \"' is undefined or null.\");\r\n              };\r\n}\r\n            \r\nvar atmpt = 10;\r\nvar catmpt = 0;\r\nfunction waiting()\r\n{\r\n         catmpt++;\r\n         console.log('waiting for shaders loading');\r\n         setTimeout( function()\r\n                     {\r\n                       if( catmpt < atmpt )\r\n                       {\r\n                           if( !shadersloaded )\r\n                           {\r\n                               waiting();\r\n                           }else{\r\n                               catmpt=0;\r\n                               loadtextures();\r\n                           }\r\n                       }else{\r\n                           console.log('failed loading shaders');\r\n                       };\r\n                     }, 500);\r\n}\r\n\r\nfunction waitingtextures()\r\n{\r\n         catmpt++;\r\n         console.log('waiting for textures loading');\r\n         setTimeout( function()\r\n                     {\r\n                       if( catmpt < atmpt )\r\n                       {\r\n                           if( (!texturex1.isload) || (!texturex2.isload) || (!texturex3.isload) || (!texturex4.isload) )\r\n                           {\r\n                               waitingtextures();\r\n                           }else{\r\n                               launchwebgl();\r\n                           }\r\n                       }else{\r\n                           console.log('failed loading textures');\r\n                       }\r\n                     }, 500);\r\n}\r\n\r\ndocument.addEventListener(\"DOMContentLoaded\",\r\nfunction( event )\r\n{\r\n          var canvas = document.getElementById('gl');\r\n          gl = canvas.getContext(\"webgl2\");\r\n          if( !gl )\r\n          {\r\n              console.log('webgl2 not supported, trying webgl');\r\n              gl = canvas.getContext(\"webgl\") || canvas.getContext(\"experimental-webgl\") || canvas.getContext(\"moz-webgl\") || canvas.getContext(\"webkit-3d\");\r\n              if( !gl )\r\n              {\r\n                  console.log('webgl not suported');\r\n                  return;\r\n              }else{\r\n                  console.log('continue using webgl');\r\n              }\r\n          }else{\r\n                  console.log('continue with webgl2');\r\n          }\r\n          var vs = document.getElementById(\"standard-vs\").textContent;\r\n          var fs = document.getElementById(\"standard-frag\").textContent;\r\n          Shader = InitializeShader(vs, fs, \"01\", \"02\");\r\n          shadersloaded = true;\r\n          waiting();\r\n}\r\n);\r\n\r\nfunction loadtextures()\r\n{\r\n         texturex1 = new Texture(tex00_path);\r\n         texturex2 = new Texture(tex01_path);\r\n         texturex3 = new Texture(tex02_path);\r\n         texturex4 = new Texture(tex03_path);\r\n         waitingtextures();\r\n}\r\n\r\nfunction animation_frame(T)\r\n{\r\n         if( !time_start )time_start = T;\r\n         if( !gl )\r\n         {\r\n             console.log(\"ERROR: webgl lost\");\r\n             return;\r\n         }\r\n         var iTime = (T - time_start) \/ 1000;\r\n         gl.clearColor(0.0, 0.0, 0.0, 1.0);\r\n         gl.clear(gl.COLOR_BUFFER_BIT);\r\n         gl.useProgram(Shader);\r\n         gl.uniform1f(gl.getUniformLocation(Shader, \"iTime\"), iTime);\r\n\r\n         gl.uniform2f(gl.getUniformLocation(Shader, \"iResolution\"), sh_width, sh_height);\r\n\r\n         gl.activeTexture(gl.TEXTURE0);\r\n         gl.bindTexture(gl.TEXTURE_2D, texturex1.texture);\r\n         gl.uniform1i(gl.getUniformLocation(Shader, 'tex00'), 0);\r\n\r\n         gl.activeTexture(gl.TEXTURE1);\r\n         gl.bindTexture(gl.TEXTURE_2D, texturex2.texture);\r\n         gl.uniform1i(gl.getUniformLocation(Shader, 'tex01'), 1);\r\n\r\n         gl.activeTexture(gl.TEXTURE2);\r\n         gl.bindTexture(gl.TEXTURE_2D, texturex3.texture);\r\n         gl.uniform1i(gl.getUniformLocation(Shader, 'tex02'), 2);\r\n\r\n         gl.activeTexture(gl.TEXTURE3);\r\n         gl.bindTexture(gl.TEXTURE_2D, texturex4.texture);\r\n         gl.uniform1i(gl.getUniformLocation(Shader, 'tex03'), 3);\r\n\r\n\/\/       gl.viewport(0, 0, sh_width, sh_height);\r\n         gl.drawElements(gl.TRIANGLES, 3, gl.UNSIGNED_SHORT, 0);\r\n         window.requestAnimationFrame(animation_frame);\r\n}\r\n\r\nfunction launchwebgl()\r\n{\r\n         \/\/ We can draw 2 triangles to make a rectangle framebuffer...\r\n         \/\/ Or we can draw 1 giant triangle and draw the fragment on\r\n         \/\/ the visible (rectangular) sub-part !\r\n         var vertices = new Float32Array([ -1.001,  3.001, 0.0,\r\n                                           -1.001, -1.001, 0.0,\r\n                                            3.001, -1.001, 0.0, ]);\r\n         var indices = [0, 1, 2];\r\n         gl.viewport(0, 0, sh_width, sh_height);\r\n         var vertexbuffer = gl.createBuffer();\r\n         var indexbuffer = gl.createBuffer();\r\n         gl.bindBuffer(gl.ARRAY_BUFFER, vertexbuffer);\r\n         gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertices), gl.STATIC_DRAW);\r\n         gl.bindBuffer(gl.ARRAY_BUFFER, null);\r\n         gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexbuffer);\r\n         gl.bufferData(gl.ELEMENT_ARRAY_BUFFER, new Uint16Array(indices), gl.STATIC_DRAW);\r\n         gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, null);\r\n         gl.bindBuffer(gl.ARRAY_BUFFER, vertexbuffer);\r\n         gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, indexbuffer);\r\n         var coords = gl.getAttribLocation(Shader, \"a_Position\");\r\n         gl.vertexAttribPointer(coords, 3, gl.FLOAT, false, 0, 0);\r\n         gl.enableVertexAttribArray(coords);\r\n         window.requestAnimationFrame(animation_frame);\r\n}\r\n\r\n\/\/ Restart the shader with synch sound here !\r\nfunction launchShaders(){ time_start = null; }\r\n\r\n\/\/ Second part : all the sound functions.\r\n\/\/ All the fullcreen functions.\r\n\r\nfunction PlaySound()\r\n{\r\n         var audio = document.getElementById(\"odio\");\r\n         audio.currentTime = 0;\r\n         audio.play();\r\n};\r\n\r\nfunction SoundtrackOnOff()\r\n{\r\n         var audio = document.getElementById(\"odio\");\r\n         if( !audio.paused )\r\n         {\r\n             audio.pause();\r\n         }else{\r\n             audio.currentTime = 0;\r\n             audio.play();\r\n         };\r\n}\r\n\r\nfunction getFullscreenElement()\r\n{\r\n         return document.fullscreenElement\r\n         || document.webkitFullscreenElement\r\n         || document.mozFullscreenElement\r\n         || document.msFullscreenElement;\r\n}\r\n\r\nfunction ToggleFullScreen()\r\n{\r\n         if( getFullscreenElement() )\r\n         {\r\n             document.getElementById(\"gl\").width        = PostSizeX;\r\n             document.getElementById(\"gl\").height       = PostSizeY;\r\n             document.getElementById(\"gl\").style.width  = PostSizeX;\r\n             document.getElementById(\"gl\").style.height = PostSizeY;\r\n             sh_width  = PostSizeX;\r\n             sh_height = PostSizeY;\r\n             gl.viewport(0, 0, sh_width, sh_height);\r\n             document.exitFullscreen();\r\n         }else{\r\n             document.getElementById(\"gl\").width        = window.screen.width;\r\n             document.getElementById(\"gl\").height       = window.screen.height;\r\n             document.getElementById(\"gl\").style.width  = window.screen.width;\r\n             document.getElementById(\"gl\").style.height = window.screen.height;\r\n             sh_width = window.screen.width;\r\n             sh_height = window.screen.height;\r\n             gl.viewport(0, 0, sh_width, sh_height);\r\n             document.getElementById(\"gl\").requestFullscreen().catch(console.log);\r\n         };\r\n}\r\n\r\nfunction myOverFunctionBut1()\r\n{\r\n  document.getElementById(\"but1\").style.color      = \"#FFDD11\";\r\n  document.getElementById(\"but1\").style.background = \"#000000\";\r\n}\r\nfunction myOutFunctionBut1()\r\n{\r\n  document.getElementById(\"but1\").style.color      = \"#000000\";\r\n  document.getElementById(\"but1\").style.background = \"#FFDD11\";\r\n}\r\n\r\nfunction myOverFunctionBut2()\r\n{\r\n  document.getElementById(\"but2\").style.color      = \"#FFDD11\";\r\n  document.getElementById(\"but2\").style.background = \"#000000\";\r\n}\r\nfunction myOutFunctionBut2()\r\n{\r\n  document.getElementById(\"but2\").style.color      = \"#000000\";\r\n  document.getElementById(\"but2\").style.background = \"#FFDD11\";\r\n}\r\n\r\nfunction myOverFunctionBut3()\r\n{\r\n  document.getElementById(\"but3\").style.color      = \"#FFDD11\";\r\n  document.getElementById(\"but3\").style.background = \"#000000\";\r\n}\r\nfunction myOutFunctionBut3()\r\n{\r\n  document.getElementById(\"but3\").style.color      = \"#000000\";\r\n  document.getElementById(\"but3\").style.background = \"#FFDD11\";\r\n}\r\n\r\ndocument.addEventListener('dblclick',()=>{ToggleFullScreen();});\r\ndocument.addEventListener('keyup', event => { if( event.code === 'Space' ){ SoundtrackOnOff(); } })\r\n<\/script><\/p>\n<p>Conclusion :<\/p>\n<p><em>\u00ab\u00a0Haha, c&rsquo;est RI-DI-CULE ! Aucune organisation humaine ne pourrait disposer d&rsquo;une technologie si avanc\u00e9e et la cacher au grand public PENDANT DES SI\u00c8CLES ! Ce serait comme&#8230; comme&#8230; *claquement de doigt* comme dire que l&rsquo;US Air Force utilise le contr\u00f4le de la gravit\u00e9 depuis les ann\u00e9es 50, qu&rsquo;elle dispose d&rsquo;un programme spatial secret D\u00c9PLOY\u00c9 \u00c0 UNE \u00c9CHELLE GALACTIQUE, L\u00c0, MAINTENANT EN 2026, et qu&rsquo;elle a gard\u00e9 \u00e7a secret depuis plus de 70 ans !? HAHAHA ! Comme je le disais : RI-DI-CULE ! Cette histoire de non-espace en 10196 est la chose la plus absurde que j&rsquo;ai jamais vu !\u00a0\u00bb<\/em> &#8230;s&rsquo;exclama personne, jamais.<\/p>\n<p>Ce fanart devait \u00eatre simplement une sc\u00e8ne avec des fremens chevauchant des vers des sables. Mais \u00e0 mesure que j&rsquo;explorais l&rsquo;art des ann\u00e9es pass\u00e9es (couvertures de bouquins, posters de films, s\u00e9ries, jeux vid\u00e9os), j&rsquo;ai not\u00e9 de nombreuses autres possibilit\u00e9s. Donc j&rsquo;en ai tent\u00e9 quelques-unes. Et le shader original est devenu un genre de court-m\u00e9trage, une collection de vues d&rsquo;Arrakis dessin\u00e9es avec des maths.<\/p>\n<p>Mais l&rsquo;instant d\u00e9cisif fut la d\u00e9couverte d&rsquo;un certain d\u00e9tail, alors que je tra\u00eenais sur un wiki de Dune, il a quelques mois : le \u00ab\u00a0non-espace\u00a0\u00bb (\u00ab\u00a0no-field\u00a0\u00bb en anglais). J&rsquo;ignorais tout de ce point pr\u00e9cis, n&rsquo;ayant lu que Dune 1&#038;2 et le Messie De Dune (plusieurs fois, d&rsquo;ailleurs). Mais cette info prenait \u00e9norm\u00e9ment de sens \u00e0 mes yeux pour tout un tas de raisons. J&rsquo;ai imm\u00e9diatement imagin\u00e9 les ixiens manigan\u00e7ant diverses choses plus ou moins justifi\u00e9es, prot\u00e9g\u00e9s par leur \u00ab\u00a0bulle d&rsquo;invisibilit\u00e9\u00a0\u00bb imperm\u00e9able \u00e0 l&rsquo;esprit du Kwisatz Haderach.<\/p>\n<p>Au m\u00eame moment, je suis retomb\u00e9 sur cette fameuse citation du vieux film de Lynch (1984) : \u00ab\u00a0Many machines on Ix. New Machines. Better than those on Richese.\u00a0\u00bb<\/p>\n<p>Le d\u00e9clic eut lieu \u00e0 ce moment pr\u00e9cis. D\u00e9sormais je SAVAIS dans quelle direction partir pour l&rsquo;histoire. =)<\/p>\n<p>Je me suis donc attel\u00e9 \u00e0 la t\u00e2che.<\/p>\n<p>Je dois dire que c&rsquo;\u00e9tait int\u00e9ressant, pour une fois, de consid\u00e9rer des gens \u00ab\u00a0normaux\u00a0\u00bb ayant juste la science, z\u00e9ro capacit\u00e9s paranormales et aucun programme de cr\u00e9ation de surhomme \u00e0 la Bene Gesserit. Des gens simples, rationels, qui d\u00e9siraient juste survivre face \u00e0 un monstrueux Jihad mena\u00e7ant de d\u00e9ferler sur l&rsquo;Univers. (Arr\u00eate de chialer, Paul)<\/p>\n<p>J&rsquo;esp\u00e8re que je n&rsquo;ai pas trop r\u00e2t\u00e9 mon coup, hehehe.<\/p>\n<p>Quoiqu&rsquo;il en soit, VOUS me direz ! Laissez-moi un commentaire, et\/ou montrez votre soutien en me payant un caf\u00e9 chez Ko-Fi ! (\u00e7a m&rsquo;aiderait beaucoup)<\/p>\n<p style=\"text-align: center; height: 50px;\">\n<div style=\"text-align: center;\"><script type='text\/javascript' src='https:\/\/storage.ko-fi.com\/cdn\/widget\/Widget_2.js'><\/script><script type='text\/javascript'>kofiwidget2.init('Buy Me A Coffee !', '#72a4f2', 'V7V31LRRH8');kofiwidget2.draw();<\/script><\/div>\n<p style=\"text-align: center; height: 50px;\">\n<p>Ah, et si vous avez besoin d&rsquo;un shader 2D pour illustrer votre site ou l&rsquo;un de vos textes de SF, peut-\u00eatre que je peux rem\u00e9dier \u00e0 la situation. N&rsquo;h\u00e9sitez pas \u00e0 me contacter <a href=\"https:\/\/baselunaire.fr\/?page_id=2\" target=\"_blank\">\u00e0 cette adresse.<\/a><\/p>\n<p>D&rsquo;un point de vue technique, cet \u00e9pisode a \u00e9t\u00e9 int\u00e9ressant \u00e0 r\u00e9aliser. Je suis un peu d\u00e9\u00e7u par le cr\u00e9nage un poil approximatif, la fonte que j&rsquo;utilise n&rsquo;est pas forc\u00e9ment la meilleure pour cet usage (&#8230;et surtout mon code est pour le moment rudimentaire). MAIS. Pour vous expliquer, j&rsquo;\u00e9tais en mode \u00ab\u00a0exploratoire\u00a0\u00bb du m\u00e9dia. Et je ne m&rsquo;attendais absolument pas \u00e0 partir dans une direction si totalement int\u00e9gr\u00e9e (texte + code en un seul shader). Je vais certainement am\u00e9liorer tout \u00e7a dans les prochains \u00e9pisodes.<\/p>\n<p>Enfin et pour conclure, MERCI \u00c0 VOUS qui lisez et appr\u00e9ciez mon travail. Je vais \u00e0 pr\u00e9sent citer les gens qui, simplement par leur pr\u00e9sence, parfois par une aide active, ont rendu cet \u00e9pisode un peu plus possible :<\/p>\n<p>La place d&rsquo;honneur revient bien s\u00fbr \u00e0 <strong>Skaven<\/strong>, excellent compositeur finlandais qui, gentiment, m&rsquo;a permis d&rsquo;utiliser sa musique pour mon projet. Je me sens privil\u00e9gi\u00e9 d&rsquo;avoir b\u00e9n\u00e9fici\u00e9 d&rsquo;un tel soutien. Skaven, \u00e7a tabasse, non, vraiment, je suis s\u00e9rieux, de toute fa\u00e7on les gens qui connaissent mon blog SAVENT que je parle de lui TOUT LE TEMPS. Allez consulter sa musique sur Soundcloud <a href=\"https:\/\/soundcloud.com\/skaven252\" target=\"_blank\">SKAVEN252<\/a> !<\/p>\n<p>Profonds Respects \u00e0 : Iq, Morimea, Shane, mrange, Diatribes, Dathor, Frostbyte, Jorge, Fabrice, Jaenam, et beaucoup, beaucoup d&rsquo;autres gens sympas et inspirant \u00e0 Shadertoy ! Vous \u00eates une super communaut\u00e9. Tous, m\u00eame ceux que j&rsquo;ai oubli\u00e9 de citer !<\/p>\n<p>Enfin, merci \u00e0 : Willbe, Eagle4, et l&rsquo;Abomination !<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Pr\u00e9ambule : Non-Espace : Technologie ixienne qui prot\u00e8ge un certain volume spatial de la prescience humaine. Cette capacit\u00e9 est d&rsquo;une importance strat\u00e9gique puisqu&rsquo;elle permet aux humains normaux de se prot\u00e9ger des individus de type Kwisatz. Le non-espace a \u00e9t\u00e9 suppos\u00e9ment &hellip; <a href=\"https:\/\/baselunaire.fr\/?page_id=6325\">Continuer la lecture <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-6325","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/baselunaire.fr\/index.php?rest_route=\/wp\/v2\/pages\/6325","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/baselunaire.fr\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/baselunaire.fr\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/baselunaire.fr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/baselunaire.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=6325"}],"version-history":[{"count":21,"href":"https:\/\/baselunaire.fr\/index.php?rest_route=\/wp\/v2\/pages\/6325\/revisions"}],"predecessor-version":[{"id":6375,"href":"https:\/\/baselunaire.fr\/index.php?rest_route=\/wp\/v2\/pages\/6325\/revisions\/6375"}],"wp:attachment":[{"href":"https:\/\/baselunaire.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6325"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}