{"id":6327,"date":"2026-08-19T15:19:56","date_gmt":"2026-08-19T15:19:56","guid":{"rendered":"https:\/\/baselunaire.fr\/?page_id=6327"},"modified":"2026-08-20T22:52:45","modified_gmt":"2026-08-20T22:52:45","slug":"s01b00-fanart-dune-fiction-eng","status":"publish","type":"page","link":"https:\/\/baselunaire.fr\/?page_id=6327","title":{"rendered":"<span style=\"color:#FFCC00;font-size:20px;\">S01B00 Fanart : DUNE FICTION (ENG)<\/span>"},"content":{"rendered":"<p>Foreword :<\/p>\n<p><strong>No-Field<\/strong> : Ixian technology that shields a volume of space from human foresight. It is of strategic importance, since it allows normal humans to protect from Kwisatz-like beings. No-Field is supposed to have been invented centuries after Muad&rsquo;dib&rsquo;s reign. Emphasis on \u00ab\u00a0supposed\u00a0\u00bb.<\/p>\n<p><strong>No-Ship<\/strong> : A FTL spaceship shielded with no-field. Supposed to have been invented centuries after Muad&rsquo;dib&rsquo;s Reign. Emphasis on \u00ab\u00a0supposed\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( 4806729.0, 2117185.0, 5525065.0, 5000261.0, 4540233.0, 4539214.0, 4669728.0, 4410949.0, 2957401.0, 5785888.0, 2113865.0, 5447725.0, 5587781.0, 2114898.0, 5197650.0, 3416141.0);\r\nmat4 str1 = mat4( 2969422.0, 4540742.0, 2114636.0, 5185594.0, 2957390.0, 4543008.0, 5068115.0, 4673097.0, 4800800.0, 4740128.0, 4674895.0, 2118728.0, 5395539.0, 5062981.0, 3026478.0, 0.0);\r\nmat4 str2 = mat4( 5395009.0, 4803393.0, 5447763.0, 5128532.0, 2118468.0, 2117193.0, 4540500.0, 5850400.0, 5185605.0, 5513286.0, 2114888.0, 5198931.0, 2116946.0, 4278081.0, 20041.0, 0.0);\r\nmat4 str3 = mat4( 5461065.0, 4277792.0, 2114900.0, 5849421.0, 4539424.0, 4475203.0, 5513285.0, 2114888.0, 5521734.0, 5185605.0, 5054534.0, 5852737.0, 8480.0, 0.0, 0.0, 0.0);\r\nmat4 str4 = mat4( 2114903.0, 5652808.0, 4268101.0, 4541984.0, 4530263.0, 4542541.0, 5394258.0, 4740128.0, 4543045.0, 2112032.0, 5587280.0, 4268108.0, 4543060.0, 4539465.0, 11859.0, 0.0);\r\nmat4 str5 = mat4( 2573640.0, 5513299.0, 2114888.0, 4806475.0, 5521747.0, 4726874.0, 4539457.0, 4407634.0, 3026504.0, 5185582.0, 4399186.0, 5459788.0, 4530245.0, 5590862.0, 3033159.0, 0.0);\r\nmat4 str6 = mat4( 2117459.0, 2120013.0, 4806729.0, 2117185.0, 5456205.0, 5391700.0, 4268115.0, 2116435.0, 2114893.0, 2117460.0, 5133650.0, 4805408.0, 3035981.0, 0.0, 0.0, 0.0);\r\nmat4 str7 = mat4( 5390679.0, 5062983.0, 3035973.0, 4342048.0, 5526863.0, 5128480.0, 5264672.0, 5066563.0, 4673097.0, 4278048.0, 4407628.0, 4409684.0, 4803104.0, 4473160.0, 46.0, 0.0);\r\nmat4 str8 = mat4( 4540500.0, 5709913.0, 5525057.0, 5198880.0, 5131040.0, 2119503.0, 2115145.0, 2119753.0, 5128515.0, 5591840.0, 4806226.0, 3032406.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str9 = mat4( 2117459.0, 5447753.0, 4478292.0, 4726873.0, 5526345.0, 5853775.0, 5251118.0, 5526337.0, 4276768.0, 5002324.0, 3035973.0, 5128480.0, 4540739.0, 2118734.0, 5390679.0, 11859.0);\r\nmat4 str10 = mat4( 5065044.0, 4803653.0, 5457230.0, 5251118.0, 4803663.0, 4409684.0, 2109011.0, 5065043.0, 2109011.0, 5260626.0, 5526095.0, 2109011.0, 5394253.0, 5447749.0, 5459273.0, 46.0);\r\nmat4 str11 = mat4( 5000257.0, 4740128.0, 2118473.0, 4473165.0, 5457230.0, 2108499.0, 5000257.0, 5589536.0, 2118739.0, 4408642.0, 5461313.0, 5185605.0, 4268102.0, 4280914.0, 5458251.0, 8480.0);\r\nmat4 str12 = mat4( 4805969.0, 5000003.0, 2108505.0, 5382217.0, 4997445.0, 4543305.0, 4740128.0, 2118721.0, 2120013.0, 4806729.0, 2117185.0, 5456205.0, 5391700.0, 83.0, 0.0, 0.0);\r\nmat4 str13 = mat4( 4543041.0, 5196832.0, 4541251.0, 4792388.0, 4268110.0, 5197856.0, 5391703.0, 5526304.0, 4674898.0, 4541511.0, 4857902.0, 5526357.0, 5456160.0, 2115872.0, 3034433.0, 0.0);\r\nmat4 str14 = mat4( 4540500.0, 5054553.0, 5526357.0, 4345632.0, 2120005.0, 4540500.0, 5063968.0, 5391696.0, 2118223.0, 5456449.0, 5590095.0, 4998484.0, 89.0, 0.0, 0.0, 0.0);\r\nmat4 str15 = mat4( 2117459.0, 4278356.0, 4726868.0, 5709893.0, 2575951.0, 5185620.0, 4803650.0, 5391700.0, 4543553.0, 4740128.0, 3034437.0, 11822.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str16 = mat4( 4543046.0, 5129549.0, 2108499.0, 5457220.0, 5523792.0, 5513285.0, 4801864.0, 5644370.0, 5526337.0, 4539424.0, 5391699.0, 5709908.0, 5001807.0, 68.0, 0.0, 0.0);\r\nmat4 str17 = mat4( 4476481.0, 4740128.0, 5392709.0, 5590816.0, 4280916.0, 5195079.0, 2118485.0, 4543046.0, 5194821.0, 2108493.0, 4543041.0, 5526304.0, 4932437.0, 5198880.0, 11855.0, 0.0);\r\nmat4 str18 = mat4( 4540500.0, 5709913.0, 5525057.0, 5198880.0, 5001248.0, 5456197.0, 5513285.0, 2114888.0, 4735309.0, 2902340.0, 4280352.0, 2116693.0, 4281677.0, 4466500.0, 2900553.0, 0.0);\r\nmat4 str19 = mat4( 4408642.0, 5461313.0, 4726853.0, 5709893.0, 5000265.0, 4541472.0, 2114625.0, 4540500.0, 5513293.0, 5513295.0, 4543826.0, 5391904.0, 4474181.0, 3034447.0, 0.0, 0.0);\r\nmat4 str20 = mat4( 4476481.0, 2115872.0, 5652808.0, 5513285.0, 5447759.0, 5657157.0, 5513285.0, 2114888.0, 4806729.0, 2117185.0, 5525065.0, 2116677.0, 4540225.0, 5849934.0, 44.0, 0.0);\r\nmat4 str21 = mat4( 2117459.0, 4540500.0, 5709913.0, 2575951.0, 5447764.0, 5526856.0, 4541728.0, 5194784.0, 2117207.0, 5394246.0, 4544069.0, 11858.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str22 = mat4( 5000257.0, 4607776.0, 5461280.0, 5513260.0, 4806994.0, 2115406.0, 2117460.0, 5394263.0, 5185613.0, 2118229.0, 5849431.0, 5590816.0, 5185620.0, 4595782.0, 4543553.0, 46.0);\r\nmat4 str23 = mat4( 4805200.0, 5132115.0, 5460549.0, 4607776.0, 2113824.0, 5391693.0, 4999491.0, 5460805.0, 5194528.0, 5395534.0, 2116687.0, 4805191.0, 11844.0, 0.0, 0.0, 0.0);\r\nmat4 str24 = mat4( 4800848.0, 2108494.0, 5526852.0, 4268121.0, 2114638.0, 5721936.0, 2904645.0, 4997408.0, 5709900.0, 4544079.0, 4792398.0, 5198926.0, 2113824.0, 5462355.0, 5064020.0, 46.0);\r\nmat4 str25 = mat4( 4540503.0, 5459013.0, 4806432.0, 4802644.0, 5709902.0, 4539720.0, 2118476.0, 5523799.0, 5130568.0, 4740896.0, 4998469.0, 11859.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str26 = mat4( 4802647.0, 2115651.0, 2118473.0, 5851223.0, 2115872.0, 4473160.0, 5198880.0, 4539424.0, 4671827.0, 4268110.0, 4530254.0, 4277075.0, 2114896.0, 4279376.0, 11854.0, 0.0);\r\nmat4 str27 = mat4( 5526850.0, 2115872.0, 4539726.0, 4268100.0, 4801568.0, 5391702.0, 5196115.0, 2109006.0, 4399169.0, 5458258.0, 3035977.0, 5194528.0, 5588558.0, 5196115.0, 11854.0, 0.0);\r\nmat4 str28 = mat4( 2117459.0, 4278356.0, 4792404.0, 4277024.0, 5447758.0, 4277588.0, 4268108.0, 5197344.0, 4739885.0, 2904137.0, 4538912.0, 2116929.0, 5194305.0, 4477505.0, 44.0, 0.0);\r\nmat4 str29 = mat4( 4476481.0, 4540192.0, 4268116.0, 5849431.0, 5391904.0, 2116943.0, 5000257.0, 4792366.0, 4278616.0, 5513260.0, 2114888.0, 5262661.0, 4543049.0, 5251116.0, 5002561.0, 46.0);\r\nmat4 str30 = mat4( 4540500.0, 4792398.0, 5000231.0, 5195296.0, 2114636.0, 2117460.0, 4464705.0, 5526345.0, 5525057.0, 4997664.0, 4932417.0, 5001032.0, 2108485.0, 5654852.0, 4792389.0, 11342.0);\r\nmat4 str31 = mat4( 4803411.0, 2118738.0, 4540500.0, 5653792.0, 5525061.0, 5195808.0, 5917010.0, 2117199.0, 2117199.0, 5644353.0, 5853765.0, 4805664.0, 5523527.0, 5394208.0, 5523778.0, 0.0);\r\nmat4 str32 = mat4( 4476481.0, 4541472.0, 4544065.0, 4543520.0, 5196100.0, 2118485.0, 5068104.0, 2117185.0, 4605505.0, 5392705.0, 4792403.0, 5198926.0, 4539424.0, 2117701.0, 5065044.0, 11845.0);\r\nmat4 str33 = mat4( 5054529.0, 5000265.0, 5132105.0, 4544800.0, 5460545.0, 5130528.0, 2117460.0, 4540500.0, 5588512.0, 5395796.0, 2108997.0, 5128525.0, 5130571.0, 4661316.0, 4542031.0, 46.0);\r\nmat4 str34 = mat4( 2117459.0, 4539723.0, 5709904.0, 4936271.0, 4673097.0, 4464684.0, 5390661.0, 5063968.0, 5391696.0, 3035727.0, 5194528.0, 2114893.0, 5394246.0, 5785888.0, 8480.0, 0.0);\r\nmat4 str35 = mat4( 5521746.0, 4541524.0, 4740128.0, 4543311.0, 5391392.0, 5459285.0, 5447726.0, 4476485.0, 4740128.0, 4661317.0, 5128521.0, 4857940.0, 4278345.0, 5447748.0, 5261640.0, 11859.0);\r\nmat4 str36 = mat4( 5590873.0, 4268114.0, 4803922.0, 2118469.0, 4999511.0, 4595788.0, 4539730.0, 5197088.0, 2114898.0, 4278356.0, 5840974.0, 2118991.0, 5197387.0, 3026519.0, 46.0, 0.0);\r\nmat4 str37 = mat4( 5590873.0, 5390624.0, 4661317.0, 4806217.0, 2115406.0, 2114893.0, 4661313.0, 5523017.0, 4268078.0, 5133600.0, 5591369.0, 5185605.0, 5197904.0, 5592146.0, 5523790.0, 89.0);\r\nmat4 str38 = mat4( 2117460.0, 4476501.0, 5513295.0, 2114888.0, 5526850.0, 5391692.0, 5128521.0, 4803104.0, 4473160.0, 4342048.0, 4803919.0, 5521742.0, 5132105.0, 46.0, 0.0, 0.0);\r\nmat4 str39 = mat4( 4990793.0, 4333644.0, 5130578.0, 4333639.0, 4932417.0, 4740128.0, 4268101.0, 2114887.0, 2115151.0, 2115905.0, 4278356.0, 5458766.0, 5198880.0, 5200160.0, 11861.0, 0.0);\r\nmat4 str40 = mat4( 4407629.0, 5130568.0, 2118469.0, 4543046.0, 5513285.0, 5382223.0, 5062991.0, 4740128.0, 4661317.0, 4279361.0, 2120024.0, 2118721.0, 5456204.0, 11860.0, 0.0, 0.0);\r\nmat4 str41 = mat4( 4476481.0, 4279584.0, 4803406.0, 2114638.0, 4605252.0, 5521733.0, 3032133.0, 2108974.0, 5523799.0, 5590856.0, 4268116.0, 4802080.0, 5523527.0, 8480.0, 0.0, 0.0);\r\nmat4 str42 = mat4( 4540500.0, 5720864.0, 4281161.0, 2120276.0, 5394246.0, 4805445.0, 5523527.0, 5199648.0, 5515086.0, 4540448.0, 2117708.0, 5590873.0, 5197344.0, 11863.0, 0.0, 0.0);\r\nmat4 str43 = mat4( 4604243.0, 5709893.0, 4740169.0, 2117193.0, 4540500.0, 5197344.0, 4802093.0, 4475973.0, 4792364.0, 4806222.0, 4344147.0, 2114892.0, 2117460.0, 5590873.0, 44.0, 0.0);\r\nmat4 str44 = mat4( 2114903.0, 4543041.0, 4541472.0, 5196103.0, 3035982.0, 4280352.0, 4540756.0, 3036238.0, 5526304.0, 4997445.0, 5851220.0, 5382190.0, 4473157.0, 11865.0, 0.0, 0.0);\r\nmat4 str45 = mat4( 4540500.0, 5588512.0, 5395796.0, 4333637.0, 5196869.0, 5457742.0, 5198880.0, 4279584.0, 4802627.0, 2114894.0, 5264723.0, 5064018.0, 5849921.0, 8480.0, 0.0, 0.0);\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       p*=0.78;\r\n       float c = 0.062; \/\/ char width\r\n       p+= vec2(22.0*c\/2.0,-0.20);\r\n       dune -= 0.25*clamp(dltime-6.0,0.,1.)*s(0.001,0.0,abs(p.y-0.08)-0.15);\r\n\r\n       \/\/ Doon doon doon doo-doon doon doo-doon !\r\n       doon(6.1,84, 0.0);doon(6.2,72, 1.0);doon(6.3,69, 2.0);doon(6.4,32, 3.0);\r\n       doon(6.5,76, 4.0);doon(6.6,65, 5.0);doon(6.7,83, 6.0);doon(6.8,84, 7.0);\r\n       doon(6.9,32, 8.0);doon(7.0,84, 9.0);doon(7.1,69,10.0);doon(7.2,77,11.0);\r\n       doon(7.3,80,12.0);doon(7.4,76,13.0);doon(7.5,69,14.0);doon(7.6,32,15.0);\r\n       doon(7.7,70,16.0);doon(7.8,65,17.0);doon(7.9,78,18.0);doon(8.0,65,19.0);\r\n       doon(8.1,82,20.0);doon(8.2,84,21.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.28,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);\r\n        ar(65,0.24);ar(82,0.27);ar(82,0.30);ar(65,0.33);ar(75,0.36);ar(73,0.38);ar(83,0.40);\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.42,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(65,0.1);ix(73,0.12);\r\n         \/\/ HIVE 001\r\n         p=save_p;\r\n         p+= vec2(0.42,0.8);\r\n         ix(72,0.0);ix(73,0.02);ix(86,0.035);ix(69,0.065);ix(48,0.12);ix(48,0.15);ix(49,0.18);\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.2,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(73,0.48);ix(88,0.50);\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(66,0.0);ix(76,0.025);ix(65,0.05);ix(67,0.075);ix(75,.1);ix(72,.125);ix(79,0.15);ix(76,0.175);ix(69,0.2);\r\n           \/\/ 725\r\n           ix(55,0.25);ix(50,0.275);ix(53,0.30);\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.0,0.15);\r\n           \/\/FLYBY\r\n           ix(70,0.0);ix(76,0.025);ix(89,0.042);ix(66,0.067);ix(89,0.090);\r\n           ix(84,0.13);ix(73,0.15);ix(77,0.17);ix(69,0.20);\r\n           if(t-3.0>1.2)\r\n           {\r\n              p.y+=0.05;\r\n              \/\/NO-SHIP\r\n              ix(78,0.0);ix(79,0.03);ix(45,0.065);ix(83,0.09);ix(72,0.12);ix(73,0.14);ix(80,0.16);ix(58,0.20);\r\n              p.x-=0.35;\r\n              ix(56,0.0);ix(77,0.06);ix(79,0.09);ix(78,0.12);ix(84,0.15);ix(72,0.18);ix(83,0.21);\r\n              p.x+=0.35;\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\n              ix(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.17);ix(67,0.19);ix(58,0.23);\r\n              p.x-=0.23;\r\n              \/\/ 1 000 000\r\n              ix(49,0.10);ix(48,0.13);ix(48,0.155);ix(48,0.18);ix(48,0.21);ix(48,0.235);ix(48,0.26);\r\n              \/\/ YEARS\r\n              ix(89,0.30);ix(69,0.325);ix(65,0.35);ix(82,0.375);ix(83,0.4);\r\n              p.x+=0.23;\r\n              p.y-=0.1;\r\n           };\r\n           p-=vec2(0.0,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     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.24,-0.1);\r\n             \/\/ SOUNDTRACK\r\n             cr(83,0.0);cr(79,0.03);cr(85,0.06);cr(78,0.09);cr(68,0.12);cr(84,0.15);cr(82,0.18);cr(65,0.21);cr(67,0.24);cr(75,0.27);\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(85,0.03);cr(80,0.06);cr(80,0.09);cr(79,0.12);cr(82,0.15);cr(84,0.18);\r\n                 cr(77,0.24);cr(89,0.27);cr(87,0.33);cr(79,0.36);cr(82,0.39);cr(75,0.42);\r\n                 cr(79,0.48);cr(78,0.51);cr(75,0.57);cr(79,0.60);cr(45,0.633);cr(70,0.66);cr(73,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(78,0.0);cr(69,0.03);cr(69,0.06);cr(68,0.09);cr(32,0.12);cr(83,0.15);cr(79,0.18);cr(77,0.21);cr(69,0.24);cr(32,0.27);cr(50,0.3);cr(68,0.33);cr(32,0.36);cr(65,0.39);cr(78,0.42);cr(73,0.45);cr(77,0.48);cr(65,0.51);cr(84,0.54);cr(69,0.57);cr(68,0.6);cr(32,0.63);cr(83,0.66);cr(80,0.69);cr(65,0.72);cr(67,0.75);cr(69,0.78);cr(32,0.81);cr(65,0.84);cr(82,0.87);cr(84,0.9);cr(32,0.93);cr(63,0.96);\r\n                 p+=vec2(0.0,0.1);\r\n                 cr(77,0.0);cr(65,0.03);cr(89,0.06);cr(66,0.09);cr(69,0.12);cr(32,0.15);cr(73,0.18);cr(32,0.21);cr(67,0.24);cr(65,0.27);cr(78,0.3);cr(32,0.33);cr(72,0.36);cr(69,0.39);cr(76,0.42);cr(80,0.45);cr(32,0.48);cr(33,0.51);\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(32,0.21);cr(77,0.24);cr(69,0.27);cr(32,0.3);cr(58,0.33);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.765,0.40);\r\n                 cr(84,0.0);cr(72,0.03);cr(69,0.06);cr(32,0.09);cr(76,0.12);cr(65,0.15);cr(83,0.18);cr(84,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(79,0.48);cr(70,0.51);cr(32,0.54);cr(83,0.57);cr(67,0.6);cr(73,0.63);cr(69,0.66);cr(78,0.69);cr(67,0.72);cr(69,0.75);cr(45,0.78);cr(70,0.81);cr(73,0.84);cr(67,0.87);cr(84,0.9);cr(73,0.93);cr(79,0.96);cr(78,0.99);\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()\">RESTART WITH SOUND<\/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()\">TOGGLE SOUND<\/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;CONTROLS :<br>\r\n&nbsp;&nbsp;1-The shader starts automatically in no-sound mode.<br>\r\n&nbsp;&nbsp;2-Click once or twice on RESTART WITH SOUND to hear the music.<br>\r\n&nbsp;&nbsp;3-Stop\/start the sound at any time using TOGGLE SOUND.<br>\r\n&nbsp;&nbsp;4-Double-click for fullscreen or leaving fullscreen.<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\/Code\/Art\/Story : Johann \"Msm01\" Paillottet<br>\r\n&nbsp;&nbsp;Copyright Baselunaire.fr - August 2026<br>\r\n&nbsp;&nbsp;Music : <b>\"Exhumed Glory\"<\/b> by Peter \"Skaven\" Hajba<br>\r\n&nbsp;&nbsp;Music licence 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>Afterword :<\/p>\n<p><em>\u00ab\u00a0Haha ! This is preposterous ! No human organisation could have ANY SORT of advanced technology and keep it from the public FOR CENTURIES ! That&rsquo;s like&#8230; Like&#8230;. *snaps* Like saying the US Air Force has been using gravitation control tech since the 1950ies, has an entire secret space program on a galactic scale, RIGHT NOW, and has kept the secret about it for 70+ years !? HAHAHA ! &#8230; See ?! Like I said : PREPOSTEROUS ! This No-field-tech-in-10196 thing is the most ridiculous shit ever !\u00a0\u00bb<\/em>&#8230;said noone, ever.<\/p>\n<p>This fanart was supposed to be just a single \u00ab\u00a0Wormriders\u00a0\u00bb shader, but as I dived into the art from years ago (bookcovers, movie posters, series, video games), I realised there were MANY other scenes that I could create. So I made a few ones. And the original shader became some sort of short film\u2026<\/p>\n<p>But the real idea for the story originated from a detail I discovered while browsing a Duniverse Wiki a few months ago : the \u00ab\u00a0No-Field\u00a0\u00bb. I didn\u2019t know about this specific bit of info (I\u2019ve only read Dune 1&#038;2 and Dune Messiah, though several times each) but it made a lot of sense to me for some reason. And I immediately started imagining Ixians doing other nasty\/dangerous stuff, protected by this \u00ab\u00a0no-field bubble of stealth\u00a0\u00bb which the Kwisatz Haderach Himself cannot spy on !<\/p>\n<p>During that time, I was reminded of the (famous) quote from the 1984 Lynch movie : \u00ab\u00a0Many machines on Ix. New machines. Better than those on Richese.\u00a0\u00bb<\/p>\n<p>Somehow it just clicked, I KNEW then what to write about.<\/p>\n<p>So I went on.<\/p>\n<p>It was also fun, for once, to view the Duniverse from another point of view : regular humans (or AIs !) that just have science, zero precog or Bene Gesserit Ubermensch breeding program. Normal, rational people that just want to survive in the face of a galactic Jihad.<\/p>\n<p>I hope the result doesn\u2019t suck too much, hehehe.<\/p>\n<p>Anyways, YOU tell ME ! Please leave a comment, and\/or show your support by buying me a coffee ! (it really helps)<\/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>Also if you need me to make a 2D shader for your website, or to illustrate your own texts, I may be able to help. Explain your idea at <a href=\"https:\/\/baselunaire.fr\/?page_id=2\" target=\"_blank\">the adress here !<\/a><\/p>\n<p>On the technical side : this episode was super interesting to make. I&rsquo;m still a bit annoyed at the poor kerning in the text though, that monospaced font I use is NOT the best for this. BUT. I was exploring the medium (to tell stories in an original manner) and totally didn&rsquo;t expect to go in this text-heavy direction. I will upgrade the font code in next prods, for sure.<\/p>\n<p>But most of all, THANK YOU for reading and enjoying this. I will now credit all the people that, simply by their presence or sometimes their active help, have made this episode of The Last Temple a bit more possible :<\/p>\n<p>The place of honor goes to <strong>Skaven<\/strong>, great Finnish musician that, kindly, shared his music for my project. I feel blessed to have such a cool soundtrack to rely on. Skaven is a great composer, go check his Soundcloud at <a href=\"https:\/\/soundcloud.com\/skaven252\" target=\"_blank\">SKAVEN252<\/a> !<\/p>\n<p>Also : Iq, Morimea, Shane, mrange, Diatribes, Dathor, Frostbyte, Jorge, Fabrice, Jaenam, and MANY, MANY other cool\/inspiring people from Shadertoy ! You guys are honestly the best ! Even those I forgot !<\/p>\n<p>Also, special place for : Willbe, Eagle4, and the Abomination<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Foreword : No-Field : Ixian technology that shields a volume of space from human foresight. It is of strategic importance, since it allows normal humans to protect from Kwisatz-like beings. No-Field is supposed to have been invented centuries after Muad&rsquo;dib&rsquo;s &hellip; <a href=\"https:\/\/baselunaire.fr\/?page_id=6327\">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-6327","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/baselunaire.fr\/index.php?rest_route=\/wp\/v2\/pages\/6327","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=6327"}],"version-history":[{"count":13,"href":"https:\/\/baselunaire.fr\/index.php?rest_route=\/wp\/v2\/pages\/6327\/revisions"}],"predecessor-version":[{"id":6371,"href":"https:\/\/baselunaire.fr\/index.php?rest_route=\/wp\/v2\/pages\/6327\/revisions\/6371"}],"wp:attachment":[{"href":"https:\/\/baselunaire.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=6327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}