{"id":5684,"date":"2026-03-03T08:21:19","date_gmt":"2026-03-03T08:21:19","guid":{"rendered":"https:\/\/baselunaire.fr\/?page_id=5684"},"modified":"2026-05-26T13:29:04","modified_gmt":"2026-05-26T13:29:04","slug":"s01e00-ce-temple-sur-draxacar-2","status":"publish","type":"page","link":"https:\/\/baselunaire.fr\/?page_id=5684","title":{"rendered":"S01E00 : CE TEMPLE SUR DRAXACAR&#8230;"},"content":{"rendered":"<p>Note de l&rsquo;auteur :<\/p>\n<p><em> Cet \u00e9pisode z\u00e9ro n&rsquo;\u00e9tait pas du tout pr\u00e9vu !<\/em><\/p>\n<p>Initialement, je voulais juste animer un g\u00e9n\u00e9rique genre <strong>Quatri\u00e8me Dimension<\/strong> (&#8230;avec un peu plus d&rsquo;impact et mon propre style, en plus je n&rsquo;avais pas le budget pour engager l&rsquo;IA de <strong>Rod Serling<\/strong>&#8230; vdm) Toutefois, le r\u00e9sultat final donne une id\u00e9e plut\u00f4t bonne de ce que sera un \u00e9pisode typique de <strong>L&rsquo;Ultime Temple De La Science-Fiction<\/strong>, c-a-d une animation, de la musique et une histoire que j&rsquo;esp\u00e8re (?!) int\u00e9ressante.<\/p>\n<p>Les choses \u00e9volueront peut-\u00eatre \u00e0 l&rsquo;avenir, mais on va commencer par cette recette simple dont j&rsquo;ai constat\u00e9 l&rsquo;efficacit\u00e9 plusieurs fois d\u00e9j\u00e0 (sur Shadertoy, principalement). Pour la suite, on verra bien les retours ! D&rsquo;ailleurs si par bonheur apr\u00e8s visionnage le voyage vous a plu, h\u00e9 bien laissez-moi un commentaire sympa en bas de page&#8230; ou mieux : <a href=\"https:\/\/ko-fi.com\/thelasttempleofsciencefiction\" target=\"_blank\">payez-moi un petit caf\u00e9<\/a>, ce qui me permettra d&rsquo;acheter un site d\u00e9di\u00e9 pour le Temple et peut-\u00eatre m\u00eame de payer mon loyer, haha, imaginez \u00e7a !<\/p>\n<p>Soyez donc les bienvenus, chers amis ! Installez-vous bien confortablement dans votre fauteuil, servez vous (peut-\u00eatre) un verre de votre boisson pr\u00e9f\u00e9r\u00e9e, attrapez quelques trucs \u00e0 grignoter, et laissez votre esprit d\u00e9coller ! Voyageons ensemble vers une galaxie lointaine, dans un futur si distant que l&rsquo;humanit\u00e9 elle-m\u00eame a \u00e9t\u00e9 oubli\u00e9e. Enfin&#8230; peut-\u00eatre pas <strong>compl\u00e8tement<\/strong> <em>oubli\u00e9e&#8230;<\/em><\/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 float iTime;\r\nuniform vec2 iResolution;\r\n#define PI 3.14159\r\n#define s(a,b,c) smoothstep(a,b,c)\r\n#define EclipseDelay 85.0\r\n\r\nbool LANG = true; \/\/ true = FR, false = ENG\r\nvec4 LIGHTNING_FLAGS = vec4(0.0,0.0,0.0,0.0);\r\nfloat PylonTilt = 0.05;\r\nfloat WidthChar = 0.031;\r\nfloat VScrollerLength=32.599;\r\nfloat TimeVar;\r\n\r\n\/\/ VF\r\nmat4 str0 = mat4( 5580620.0, 4805708.0, 17741.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str1 = mat4( 5064020.0, 4541520.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str2 = mat4( 2114884.0, 16716.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str3 = mat4( 4801363.0, 4410949.0, 4599109.0, 5522249.0, 5132105.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str4 = mat4( 5590851.0, 4543570.0, 4726867.0, 5526345.0, 5392719.0, 2118469.0, 18003.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str5 = mat4( 4408644.0, 5657935.0, 5526085.0, 2118469.0, 5395795.0, 5133600.0, 5391904.0, 5064513.0, 5525061.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str6 = mat4( 5129543.0, 4805189.0, 4543825.0, 2108192.0, 4804677.0, 4476755.0, 3153989.0, 48.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\n\r\n\/\/ ENG\r\nmat4 str7 = mat4( 4540500.0, 4279328.0, 21587.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str8 = mat4( 5064020.0, 4541520.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str9 = mat4( 17999.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str10 = mat4( 4801363.0, 4410949.0, 4599109.0, 5522249.0, 5132105.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str11 = mat4( 5195859.0, 2118738.0, 4801363.0, 2115910.0, 5198931.0, 4540754.0, 83.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str12 = mat4( 4673093.0, 5652818.0, 2114629.0, 2117199.0, 4595777.0, 4669778.0, 5129549.0, 84.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str13 = mat4( 4542543.0, 5130574.0, 2826311.0, 5260576.0, 5198665.0, 2114884.0, 12336.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\n\r\n\/\/ ADDITIONAL MESSAGE VF\r\nmat4 str14 = mat4( 4269900.0, 5129558.0, 2118217.0, 4804428.0, 4281422.0, 20041.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str15 = mat4( 5395795.0, 4541472.0, 5198880.0, 4538957.0, 2118977.0, 5457220.0, 5195808.0, 4541773.0, 83.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str16 = mat4( 5522755.0, 2114900.0, 4804677.0, 5259604.0, 2114888.0, 5853763.0, 4805712.0, 4543825.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str17 = mat4( 5587267.0, 2114899.0, 2114884.0, 2113868.0, 5394253.0, 84.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str18 = mat4( 4543277.0, 4543043.0, 4539476.0, 5129542.0, 2966867.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\n\r\n\/\/ ADDITIONAL MESSAGE ENG\r\nmat4 str19 = mat4( 4540500.0, 4801568.0, 4281427.0, 2118734.0, 5526854.0, 4543061.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str20 = mat4( 2117199.0, 5128525.0, 5130571.0, 5449540.0, 5198880.0, 5456461.0, 5132116.0, 69.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str21 = mat4( 4540500.0, 2114899.0, 5853763.0, 4805712.0, 5709891.0, 4477519.0, 83.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str22 = mat4( 4999499.0, 4474188.0, 5849632.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\nmat4 str23 = mat4( 4543021.0, 4407620.0, 4474196.0, 45.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0);\r\n\r\nmat2 r2d(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(float p){ return abs(mod(p,2.0) - 1.0 );}\r\nvec3 pal( in float t, in vec3 a, in vec3 b, in vec3 c, in vec3 d ){return a + b*cos( 0.3*(c*t+d) );}\r\nvec4 GetColorSpot(vec2 c){vec3 color  = pal(0.25*c.x, vec3(1.0,1.0,1.0),vec3(1.0,0.7,0.4),vec3(0.1,0.5,0.9),vec3(0.1,0.1,1.0));return vec4(0.65*color.xyz,1.0);}\r\nvec2 dw0(vec2 p){vec2 dist;float ampli1=0.05;mat2 rm= mat2(100.0);dist = 100.0*texture2D(tex00,0.0002*rm*p + vec2(0.0,0.25)).xy;return p+ampli1*dist;}\r\nvec2 dw1(vec2 p){for( float i = 0.0; i<2.0; i++ )p += 0.5*i*texture2D(tex01,-0.10*r2d(3.0*i)*p + vec2(0.0001*TimeVar,0.0)).xy;return p;}\r\nvec2 dw2(vec2 p){for( float i = 0.0; i<2.0; i++ )p += 0.7*i*texture2D(tex01,-0.25*r2d(2.0*i)*p + vec2(0.0,0.1*TimeVar)).xy;return p;}\r\nvec2 dw3(vec2 p){for( float i = 0.0; i<3.0; i++ )p += exp(vec2((1.0*i)*texture2D(tex01,-0.01*r2d(i)*p + vec2(0.0005*TimeVar)).xy));return p;}\r\n\r\nfloat Smooth1D(in vec2 v_p)\r\n{\r\n      float pvpx = 2.0*v_p.x;\r\n      vec2 V1 = vec2(0.5*floor(pvpx      ));\r\n      vec2 V2 = vec2(0.5*floor(pvpx + 1.0));\r\n      return mix(noise(V1),noise(V2),smoothstep(0.0,1.0,fract(pvpx)));\r\n}\r\n\r\nfloat metaDiamond(vec2 p, vec2 pixel, float r)\r\n{\r\n      vec2 d = abs(p-pixel);\r\n      return r \/ (d.x + d.y);\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.0;\r\n      \/\/ Compensating for some font texture alignment issues\r\n      if(charac==45)XOffsetTuning -= 0.0032; \/\/ \"-\"\r\n      if(charac==73)XOffsetTuning += 0.0025; \/\/ \"I\"\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)\r\n{\r\n     mat4 matxt;\r\n     vec4 ColorCh = vec4(0.0);\r\n     if(s==  0)matxt =  str0;\r\n     if(s==  1)matxt =  str1;\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     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\r\n\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              ColorCh = mix(ColorCh,vec4(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              ColorCh = mix(ColorCh,vec4(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              ColorCh = mix(ColorCh,vec4(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     return ColorCh;\r\n}\r\n\r\nvec4 drawLightnings(vec2 p,vec4 col,float pos)\r\n{\r\n\r\n     if( Smooth1D(vec2(floor(0.5*TimeVar + 10.15*pos)))>0.8) \/\/ Statistical Lightning\r\n     {\r\n         if(pos==1.)LIGHTNING_FLAGS.r = 1.0;\r\n         if(pos==2.)LIGHTNING_FLAGS.g = 1.0;\r\n         if(pos==3.)LIGHTNING_FLAGS.b = 1.0;\r\n         if(pos==4.)LIGHTNING_FLAGS.a = 1.0;\r\n         float StrongestAvenger = 0.0;\r\n         StrongestAvenger = abs(p.x-0.4*sin(20.0*p.y + TimeVar)*exp(0.9*p.y - 10.0))-0.05;\r\n\r\n         StrongestAvenger = abs(p.x- (0.5*clamp((p.y-10.0),0.0,1.0)*Smooth1D(vec2(1.00*p.y + 100.0*TimeVar + 115.1*pos)))\r\n                                    +(2.0*clamp((p.y-10.0),0.0,1.0)*Smooth1D(vec2(0.25*p.y +   5.0*TimeVar + 58.1*pos)))\r\n                                -0.05);\r\n\r\n         if(p.y>10.0)col += vec4(0.0,0.0,1.0,1.0)*smoothstep(0.25,0.0,StrongestAvenger);\r\n         if(p.y>10.0)col += vec4(0.7,0.5,1.0,1.0)*smoothstep(0.05,0.0,StrongestAvenger);\r\n         col += vec4(0.2,0.2,1.0,1.0)*metaDiamond(p,vec2(0.0,10.0),0.90)*abs(sin(40.0*TimeVar));\r\n     };\r\n     return col;\r\n}\r\n\r\nvec4 drawPylon(vec2 p,vec4 col,float id, float l_offset)\r\n{\r\n     p+=vec2(l_offset,35.0);\r\n     float Factor03 = 1.0;\r\n     if(TimeVar<VScrollerLength)Factor03 = 0.5;\r\n     float Factor01 = 1.0*Factor03;\r\n     float Factor02 = 2.0*Factor03;\r\n\r\n     if( id < 3.0 )     \/\/ Back Pylons farther, smaller...\r\n     {\r\n         p*=1.3;\r\n         if(id==1.)p*=r2d(-PylonTilt);\r\n         if(id==2.)p*=r2d( PylonTilt);\r\n     }else{\r\n         if(id==3.)p*=r2d(-PylonTilt);\r\n         if(id==4.)p*=r2d( PylonTilt);\r\n         Factor01 = 2.0;\r\n         Factor02 = 0.85;\r\n     };\r\n     if( abs(p.x) < 0.45 )\r\n     {\r\n       if(id==1. || id==3.)p.x-=0.075;\r\n       if(id==2. || id==4.)p.x+=0.075;\r\n       col = mix(col,vec4(Factor01*1.0,Factor01*0.5,Factor01*0.0,1.0)*texture2D(tex00,0.1*abs(p)),smoothstep(0.01,0.0,p.y-clamp(15.0*TriangleWave(1.8*p.x),0.0,10.0)));\r\n       if(id==1. || id==3.)p.x+=0.075;\r\n       if(id==2. || id==4.)p.x-=0.075;\r\n       col = mix(col,vec4(Factor02*1.0,Factor02*0.5,Factor02*0.0,1.0)*texture2D(tex00,0.1*abs(p)),smoothstep(0.01,0.0,p.y-clamp(15.0*TriangleWave(2.0*p.x),0.0,10.0)));\r\n     };\r\n     if( TimeVar > VScrollerLength )col += vec4(vec3(1.0,0.7,0.0)*metaDiamond(p,vec2(0.0,9.6),0.1-0.07*Smooth1D(vec2(3.0*TimeVar + 14.4*id))),1.0);\r\n     if( TimeVar > VScrollerLength )col = drawLightnings(p,col,id);\r\n\r\n     return col;\r\n}\r\n\r\nvec4 drawProbe(vec2 p,vec4 col)\r\n{\r\n     vec2 ProbePos = vec2(20.0*Smooth1D(vec2(0.3*TimeVar))-10.0,31.0+0.15*sin(TimeVar));\r\n\r\n     p+= vec2(0.0,35.0);\r\n     vec2 TopPylon1 = 1.3*p-r2d(-PylonTilt)*vec2(0.0,10.0) + 1.3*vec2( 5.0,0.0);\r\n     vec2 TopPylon2 = 1.3*p-r2d( PylonTilt)*vec2(0.0,10.0) + 1.3*vec2(-5.0,0.0);\r\n     vec2 TopPylon3 =     p-r2d(-PylonTilt)*vec2(0.0,10.0) +     vec2( 7.0,0.0);\r\n     vec2 TopPylon4 =     p-r2d( PylonTilt)*vec2(0.0,10.0) +     vec2(-7.0,0.0);\r\n     p-= vec2(0.0,35.0);\r\n\r\n     p += ProbePos;\r\n\r\n     float angle = atan(ProbePos.x,4.5); \/\/ Angle with Top Flare\r\n     vec4 ProbeColor = vec4(0.1,0.0,0.0,1.0)+vec4(0.7,0.1,0.1,1.0)*smoothstep(0.05,0.0,abs(p.y) - 0.05*Smooth1D(vec2(0.5*p.x + 4.0*TimeVar)));\r\n     ProbeColor += abs(cos(p.x))*vec4(0.9,0.7,0.1,1.0)*smoothstep(0.02,0.0,abs(p.y) - 0.02*Smooth1D(vec2(0.5*p.x + 4.0*TimeVar)));\r\n     ProbeColor += vec4(0.5,0.5,1.0,1.0)*metaDiamond(p,vec2(0.4,-0.15),0.015);\r\n     ProbeColor += vec4(0.5,0.5,1.0,1.0)*metaDiamond(p,vec2(0.7,-0.15),0.015);\r\n     ProbeColor += vec4(0.5,1.0,0.5,1.0)*metaDiamond(p,vec2(-0.7,-0.15),0.015*Smooth1D(vec2(10.0*TimeVar)));\r\n     ProbeColor += vec4(1.0,0.0,0.0,1.0)*metaDiamond(p,vec2(-0.1,-0.15),0.015*clamp(sin(10.0*TimeVar),0.0,1.0));\r\n     ProbeColor += vec4(0.4,0.4,0.4,1.0)*smoothstep(2.0,0.0,abs(length(p - vec2(0.0,0.0))));\r\n\r\n     \/\/ Probe Shine\r\n     p*=r2d(-angle);\r\n     ProbeColor += vec4(0.8,0.4,0.1,1.0)*smoothstep(2.0,0.0,abs(length(p - vec2(0.0,0.0)) - 1.5))*smoothstep(0.0,1.5,p.y);\r\n     ProbeColor += vec4(0.8,0.4,0.1,1.0)*smoothstep(0.2,0.0,abs(length(p - vec2(0.0,0.0)) - 1.5))*smoothstep(0.0,1.5,p.y);\r\n     p*=r2d( angle);\r\n\r\n     \/\/ Ground Reflection\r\n     ProbeColor += 1.0*vec4(0.8,0.4,0.1,1.0)*(0.45+0.65*texture2D(tex00,p\/(16.0*cos(length(0.8*p))) + vec2(-0.125*ProbePos.x,0.0)))\r\n     *smoothstep(0.8,0.0,abs(length(p - vec2(0.0,0.0)) - 1.5))\r\n     *smoothstep(0.0,1.5,-p.y);\r\n     vec4 Flare = vec4(0.0);\r\n\r\n     \/\/ Lightning Flares Reflections\r\n     if( TimeVar > VScrollerLength )\r\n     {\r\n         Flare += vec4(1.0)*metaDiamond(p,r2d(-angle)*vec2(0.0,1.5),0.15);\r\n\r\n         float angle1 = atan(p.x-TopPylon1.x,-TopPylon1.y);\r\n         float angle2 = atan(p.x-TopPylon2.x,-TopPylon2.y);\r\n         float angle3 = atan(p.x-TopPylon3.x,-TopPylon3.y);\r\n         float angle4 = atan(p.x-TopPylon4.x,-TopPylon4.y);\r\n\r\n         vec4 ColorFlare = vec4(1.0,0.5,1.0,1.0)*(0.8+0.2*abs(sin(40.0*TimeVar)));\r\n\r\n         if(LIGHTNING_FLAGS[0] == 1.0)Flare += ColorFlare*metaDiamond(p,r2d(-angle1)*vec2(0.0,1.5),0.17);\r\n         if(LIGHTNING_FLAGS[1] == 1.0)Flare += ColorFlare*metaDiamond(p,r2d(-angle2)*vec2(0.0,1.5),0.17);\r\n         if(LIGHTNING_FLAGS[2] == 1.0)Flare += ColorFlare*metaDiamond(p,r2d(-angle3)*vec2(0.0,1.5),0.17);\r\n         if(LIGHTNING_FLAGS[3] == 1.0)Flare += ColorFlare*metaDiamond(p,r2d(-angle4)*vec2(0.0,1.5),0.17);\r\n         LIGHTNING_FLAGS = vec4(0.0);\r\n     };\r\n     float ProbeMask = smoothstep(0.1,0.0,length(p - vec2(0.0,0.0)) - 1.5);\r\n     return mix(col,ProbeColor,ProbeMask)+Flare;\r\n}\r\n\r\nvec4 Scene01(in vec2 p,vec4 col)\r\n{\r\n     vec4 XColor = vec4((cos(TimeVar) + 1.0)\/2.0,\r\n         (cos(TimeVar +     3.14159\/3.0) + 1.0)\/2.0,\r\n         (cos(TimeVar + 2.0*3.14159\/3.0) + 1.0)\/2.0,1.0);\r\n\r\n     p *= 2.5+0.5*sin(TimeVar);\r\n     p*= r2d(2.0*3.1415*Smooth1D(vec2(0.1*TimeVar)));\r\n     vec2 u = p;\r\n\r\n     col += vec4(XColor.xyz*texture2D(tex02,0.90*vec2(p.x\/p.y,1.0\/p.y+sign(p.y)*TimeVar)).rgb,1.0);\r\n     col += vec4(XColor.xyz*texture2D(tex02,0.05*vec2(p.x\/p.y,0.05\/p.y+sign(p.y)*0.5*TimeVar)).rgb,1.0);\r\n\r\n     col = mix(col,vec4(1.0,0.8,0.5,1.0),smoothstep(1.5,0.0,abs(p.y)));\r\n     col = mix(col,vec4(1.0,1.0,1.0,1.0),smoothstep(0.1,0.0,abs(p.y)-0.05*Smooth1D(vec2(vec2(3.0*p.x)))-0.0125));\r\n     col += vec4(vec3(1.0,0.7,0.5*sin(TimeVar)+0.5)*texture2D(tex02,0.05*vec2(p.x\/p.y,0.05\/p.y+sign(p.y)*0.5*TimeVar)).rgb,1.0);\r\n     return col;\r\n}\r\n\r\nvec4 Scene04(in vec2 p,vec4 col)\r\n{\r\n     vec2 save1=p;\r\n\r\n     if( (TimeVar > 111.0 && TimeVar < 121.905) || (TimeVar > 132.750 && TimeVar < 135.7))p*=0.8;\r\n\r\n     \/\/ Moon\r\n     p*=1.8;\r\n     p+= vec2(-3.5,-2.5);\r\n     col= mix(col,\r\n     texture2D(tex02,p\/(10.0*cos(length(0.75*p))) + vec2(0.005*TimeVar))   \/\/ Rotating Texture\r\n     -vec4(vec3(0.7*smoothstep(0.7,0.0,length(p-vec2(0.7,0.0))-1.8)),1.0), \/\/ Darkside of the Moon !\r\n     0.55*smoothstep(0.005,0.0,length(p)-1.8));                            \/\/ Moon Mask\r\n     p-= vec2(-3.5,-2.5);\r\n     p*=0.5;\r\n\r\n     \/\/ Atmo Gradient\r\n     col += mix(vec4(0.9,0.4,0.5,1.0),vec4(0.9,0.9,0.8,1.0),smoothstep(1.5,0.0,p.y));\r\n\r\n     \/\/ Clouds\r\n     float Sky = texture2D(tex02,vec2(0.25*p.x\/(p.y-0.1),0.25\/(p.y-0.1) + 0.005*TimeVar)).x;\r\n     if(p.y>0.1)col += 0.75*Sky*smoothstep(0.0,0.5,p.y-0.1);\r\n\r\n     \/\/ Secondary Tower\r\n     p+= vec2(0.7,0.85);\r\n     col = mix(col,vec4(vec3(1.0 - 0.15*smoothstep(0.015,0.0,abs(p.x)))*(1.2-0.1*sign(p.x)),1.0) ,smoothstep(0.1,0.0,p.y-0.85\/abs(20.0*p.x)+0.5)*smoothstep(0.001,0.0,p.y-1.7));\r\n     p-= vec2(0.7,0.85);\r\n\r\n     if( abs(p.x) < 1.0 )\r\n     {\r\n         float CityHeight = 0.4;\r\n         float CityDensity = 30.0;\r\n         float CityGreebles = 1.5*CityDensity;\r\n         float CS1;\r\n         vec4  CCS1;\r\n\r\n         CS1 = smoothstep(0.01,0.0,p.y - CityHeight*Smooth1D(vec2(floor(CityDensity*p.x) + 12.7))\r\n                                       - 0.1*Smooth1D(vec2(floor(CityGreebles*p.x)       + 12.7))  - 0.5*cos(p.x) +0.45 );\r\n         CCS1 = vec4( vec3(0.9,0.7,0.7) + 0.7*smoothstep(0.9,0.0,Smooth1D(vec2(45.0*p.x))) - 0.4*texture2D(tex00,vec2(0.05,1.0)*p).xxx ,1.0);\r\n         col = mix(col,CCS1,CS1);\r\n     };\r\n\r\n     \/\/ Tower\r\n     vec3 MTColor = vec3(1.0 - 0.15*smoothstep(0.015,0.0,abs(p.x)))*(0.9-0.1*sign(p.x));          \/\/ Main Tower Basic Shading\r\n     MTColor     -= vec3(0.2,0.3,0.3)*smoothstep(0.01,0.0,abs(p.y-1.0)-0.1);                      \/\/ Main Tower Color Band\r\n     MTColor     -= vec3(0.3,0.3,0.3)*smoothstep(0.1,0.0,abs(p.y-0.45)-0.1);                      \/\/ Main Tower Lower-Levels Shadow\r\n     float MTMask = smoothstep(0.01,0.0,p.y-1.0\/abs(20.0*p.x)+0.5)*smoothstep(0.001,0.0,p.y-1.5); \/\/ Main Tower Mask\r\n     \/\/ Minitower 1\r\n     if(p.y<1.8)col = mix(col,vec4(vec3(1.0)*smoothstep(0.01,0.0,p.x),1.0),smoothstep(0.01,0.0,abs(p.x)));\r\n     \/\/ Minitower 2\r\n     if(p.y<1.7)col = mix(col,vec4(vec3(1.0)*smoothstep(0.01,0.0,p.x+0.025),1.0),smoothstep(0.01,0.0,abs(p.x+0.025)));\r\n     \/\/ Main Tower\r\n     col = mix(col, vec4(MTColor,1.0), MTMask);\r\n\r\n     \/\/ Upper Dish\r\n     vec3 ColorWindows = vec3(0.25,1.0,1.0);\r\n     vec3 UDColor  = vec3(1.0-0.40*smoothstep(0.3,0.0,p.y-p.x-0.45));\r\n     UDColor      -= smoothstep(0.01,0.0,Smooth1D(vec2(40.0*p.x + 11.1))-0.5)*smoothstep(0.005,0.0,abs(p.y - 0.65))*ColorWindows;\r\n     UDColor      -= smoothstep(0.01,0.0,Smooth1D(vec2(40.0*p.x + 22.2))-0.5)*smoothstep(0.005,0.0,abs(p.y - 0.63))*ColorWindows;\r\n     UDColor      -= smoothstep(0.01,0.0,Smooth1D(vec2(40.0*p.x + 33.3))-0.5)*smoothstep(0.005,0.0,abs(p.y - 0.56))*ColorWindows;\r\n     UDColor      -= smoothstep(0.01,0.0,Smooth1D(vec2(40.0*p.x + 44.4))-0.5)*smoothstep(0.005,0.0,abs(p.y - 0.51))*ColorWindows;\r\n     UDColor      -= smoothstep(0.005,0.0,abs(p.y - 0.1*clamp(sin(25.0*p.x - 1.5),0.4,0.6) - 0.55))*ColorWindows;\r\n     float UDMask  = smoothstep(0.01,0.0,length(p-vec2(0.0, -0.1))-0.8)*smoothstep(0.0,0.01,p.y-0.50);\r\n     col = mix(col, vec4(UDColor,1.0), UDMask);\r\n     \/\/ Lower Dish\r\n     vec3 LDColor  = vec3((0.7-0.3*sin(4.0*p.x)));\r\n     LDColor      -= smoothstep(0.005,0.0,abs(p.y + 0.1*clamp(sin((10.0*p.x\/(0.4*cos(3.14159*p.x))-2.5*TimeVar)),0.4,0.6) - 0.52))*ColorWindows;\r\n     float LDMask  = smoothstep(0.01,0.0,length(p-vec2(0.0,  1.2))-0.8)*smoothstep(0.01,0.0,p.y-0.48);\r\n     col = mix(col,vec4(LDColor,1.0),LDMask);\r\n\r\n     \/\/ Upper Dish Lower border\r\n     col += vec4(0.8,0.8,0.8,1.0)*smoothstep(0.005,0.0,abs(p.y-0.51))*smoothstep(0.001,0.0,abs(p.x)-0.52)*vec4(0.5+sin(-3.0*p.x));\r\n     \/\/ Upper Dish Sun Reflection\r\n     col+= vec4(1.0)*metaDiamond(p,vec2(-0.52,0.52),0.005);\r\n     \/\/ Main Tower Top Reflection\r\n     col+= vec4(1.0)*metaDiamond(p,vec2(-0.025,1.5),0.01);\r\n\r\n     \/\/ Shield Rings\r\n     float angle=0.005*sin(3.0*TimeVar); \/\/ Give the rings some weak precession, just because...\r\n     p+=vec2(0.0,-1.5);\r\n     p*=r2d( angle);                     \/\/ The Power is in the precession ! :D\r\n     float Ring1 = abs(length(vec2(0.25,2.0)*p)-0.2)-0.005;\r\n     col += vec4(0.25,0.25,0.25,1.0)*smoothstep(0.01,0.0,Ring1)\r\n     *smoothstep(0.0,0.05,(p.y+0.1));\r\n     col += vec4(0.5,0.5,0.5,1.0)*smoothstep(0.1,0.0,Ring1)\r\n     *smoothstep(0.0,0.2,(p.y+0.125));\r\n     p*=r2d(-angle);                     \/\/ Take The Power BACK ! WE THE PEOPLE !\r\n     p-=vec2(0.0,-1.5);\r\n\r\n     p+=vec2(0.0,-1.5);\r\n     p*=r2d(-angle);                     \/\/ Contra-rotating Precession !\r\n     float Ring2 = abs(length(vec2(0.25,2.0)*p)-0.5)-0.001;\r\n     col += vec4(0.25,0.25,0.25,1.0)*smoothstep(0.01,0.0,Ring2)\r\n     *smoothstep(0.0,0.05,(p.y+0.20));\r\n     col += vec4(0.5,0.5,0.5,1.0)*smoothstep(0.1,0.0,Ring2)\r\n     *smoothstep(0.0,0.2,(p.y+0.25));\r\n     p*=r2d( angle);\r\n     p-=vec2(0.0,-1.5);\r\n\r\n     \/\/ City Defence Drone\r\n     col+= vec4(1.0)*metaDiamond(p,vec2(0.5*Smooth1D(vec2(2.5*TimeVar\/10.0))-0.25,2.5*Smooth1D(vec2(2.0*TimeVar\/10.0))-1.25+1.5),0.005+0.005*Smooth1D(vec2(TimeVar)));\r\n     \/\/ Ring Surfer Drone\r\n     col+= vec4(1.0)*metaDiamond(p,vec2(2.0*cos( 1.0*TimeVar),0.25*sin(1.0*TimeVar) + 1.5),0.01+0.01*sin(TimeVar));\r\n\r\n     \/\/ Arch Tunnel\r\n     col = mix(col,vec4(0.5,0.5,0.5,1.0),smoothstep(0.01,0.0,abs(length(p-vec2(0.0,0.05))-0.145)-0.015));\r\n     col = mix(col,vec4(0.7,0.7,0.7,1.0)*Smooth1D(vec2(3.0*p.x))*smoothstep(0.5,0.0,abs(p.y-0.5*Smooth1D(vec2(7.5*p.x+254.1))))\r\n                  +vec4(vec3(0.7,0.5,0.5)*(0.9-0.2*texture2D(tex00,p).rgb),1.0)\r\n                  +vec4(0.8,0.8,0.8,1.0)*Smooth1D(vec2(5.0*p.x))*smoothstep(0.1,0.0,abs(p.y-0.15*Smooth1D(vec2(2.5*p.x+254.1)) - 0.1)),\r\n                  clamp(smoothstep(0.001,0.0,p.y-0.15*Smooth1D(vec2(2.5*p.x+254.1)) - 0.1)-smoothstep(0.01,0.0,length(p-vec2(0.0,0.05))-0.15),0.0,1.0));\r\n\r\n     \/\/ Main Tower Beacon\r\n     col += vec4(1.0,1.0,0.1,1.0)*metaDiamond(p,vec2(0.0,1.83),0.0080+0.01*clamp(sin(30.0*TimeVar),0.0,1.0));\r\n\r\n     p+=vec2( 1.5,-1.05);\r\n     \/\/ Star\r\n     col += metaDiamond(p,vec2(0.0),0.05);\r\n     col += vec4(1.0)*metaDiamond(r2d(3.14159\/4.0)*p,vec2(0.0),0.0125);\r\n     \/\/ Streak\r\n     col += vec4(0.25,0.25,0.25,1.0)*smoothstep(2.9,0.0,abs(p.x))*smoothstep(0.05,0.0,abs(p.y));\r\n     p-=vec2( 1.5,-1.05);\r\n\r\n     \/\/ Desert Ground\r\n     vec4 TexColor1=texture2D(tex02,0.2*vec2(p.x\/p.y,0.50\/p.y-TimeVar));\r\n     if(p.y<0.0)col = vec4(vec3(1.0,1.0,0.9)*(0.8-.3*TexColor1.rgb),1.0);\r\n\r\n     \/\/ Road\r\n     float Y = p.y;\r\n     float Road  = abs(p.x\/Y - 0.125*Smooth1D(vec2(0.5\/Y - TimeVar))        )-0.900;\r\n     float Line1 = abs(p.x\/Y - 0.125*Smooth1D(vec2(0.5\/Y - TimeVar)) + 0.03 )-0.012;\r\n     float Line2 = abs(p.x\/Y - 0.125*Smooth1D(vec2(0.5\/Y - TimeVar)) - 0.03 )-0.012;\r\n     float LineR = abs(p.x\/Y - 0.125*Smooth1D(vec2(0.5\/Y - TimeVar)) + 0.83 )-0.012;\r\n     float LineL = abs(p.x\/Y - 0.125*Smooth1D(vec2(0.5\/Y - TimeVar)) - 0.83 )-0.012;\r\n     if( p.y < 0.0 )\r\n     {\r\n         vec4 TexR = texture2D(tex00,0.2*vec2(p.x\/p.y,0.50\/p.y-TimeVar)).ggga;\r\n         vec4 RoadYellow = vec4(4.0,4.0,1.0,1.0);\r\n         \/\/ \"le ruban de goudron\" i.e. \"the road\", i.e. \"the black tar strip\".\r\n         col = mix(col,vec4(0.2,0.2,0.2,1.0)*(0.5+0.9*TexR),smoothstep(0.01,0.0,Road));\r\n         \/\/ Central strips\r\n         if( sin(15.0\/p.y - 30.0*TimeVar) > 0.7 )\r\n         col = mix(col,clamp(RoadYellow*TexR,0.0,1.0),smoothstep(0.01,0.0,Line1 ));\r\n         col = mix(col,clamp(RoadYellow*TexR,0.0,1.0),smoothstep(0.01,0.0,Line2 ));\r\n         \/\/ Side Strips\r\n         col = mix(col,clamp(vec4(2.0,2.0,2.0,1.0)*TexR,0.0,1.0),smoothstep(0.01,0.0,LineL ));\r\n         col = mix(col,clamp(vec4(2.0,2.0,2.0,1.0)*TexR,0.0,1.0),smoothstep(0.01,0.0,LineR ));\r\n         col += vec4(0.5)*smoothstep(1.4,0.0,abs(p.y));\r\n     };\r\n     \r\n     \/\/ Horizon dust\r\n     col += vec4(1.0,0.5,0.1,1.0)*smoothstep(0.025,0.0,abs(p.y));\r\n\r\n     p=save1;\r\n\r\n     if( (TimeVar > 111.0 && TimeVar < 121.905) || (TimeVar > 132.750 && TimeVar < 135.7) )\r\n     {\r\n         \/\/ The secure glass canopy...\r\n         col *= vec4(0.4,0.1,0.1,1.0);\r\n         \/\/ Chevron Tech-Glass Lines\r\n         float Chevrons = 0.1*clamp(cos(4.0*p.x + TimeVar),0.0,0.5);\r\n         col += vec4(0.5,0.5,0.5,1.0)*smoothstep(0.005,0.0,abs(p.y - 0.06*p.x*p.x -Chevrons - 2.00) - 0.008);\r\n         Chevrons = 0.1*clamp(cos(4.0*p.x - TimeVar),0.0,0.5);\r\n         col += vec4(0.5,0.5,0.5,1.0)*smoothstep(0.005,0.0,abs(p.y - 0.05*p.x*p.x -Chevrons - 0.05) - 0.008);\r\n         Chevrons = 0.1*clamp(cos(4.0*p.x + TimeVar),0.0,0.5);\r\n         col += vec4(0.5,0.5,0.5,1.0)*smoothstep(0.005,0.0,abs(p.y + 0.06*p.x*p.x -Chevrons + 2.00) - 0.008);\r\n\r\n         \/\/ Alien Head !\r\n         \/\/ Making The Eyes Of Evil !\r\n         p*=(1.0+0.2*Smooth1D(vec2(0.5*TimeVar))); \/\/ head goes back and forth on random, because total psycho\r\n         p += vec2(0.0, 1.0);\r\n         float EyeR = smoothstep(0.1,0.0,length(p-vec2( 0.5,1.5))-0.10) - smoothstep(0.01,0.0,length(p-vec2( 0.5,1.5))-0.11+0.02*Smooth1D(vec2(TimeVar)));\r\n         float EyeL = smoothstep(0.1,0.0,length(p-vec2(-0.5,1.5))-0.10) - smoothstep(0.01,0.0,length(p-vec2(-0.5,1.5))-0.11+0.02*Smooth1D(vec2(TimeVar)));\r\n         float Cranium = 0.15*smoothstep(0.7,0.0,length(p-vec2(0.0,2.5))-0.5); \/\/ Insignificant deformation near your CRANIUM ! If you get this, you're just KEWLER !\r\n         Cranium += 0.2*clamp(smoothstep(0.2,0.0,length(p-vec2(0.0,2.3))-0.9)-smoothstep(0.4,0.0,length(p-vec2(0.0,2.1))-0.85),0.0,1.0);\r\n         col += (1.0-0.5*Smooth1D(vec2(0.5*TimeVar)))*Cranium;\r\n         p -= vec2(0.0, 1.0);\r\n         p\/=(1.0+0.2*Smooth1D(vec2(0.5*TimeVar)));\r\n         \/\/ He Doesn't Blink !\r\n         col += vec4(1.0,0.9,0.0,1.0)*(EyeR + EyeL)*smoothstep(0.01,0.0,p.y - abs((0.5+0.25*Smooth1D(vec2(TimeVar)))*p.x) - 0.2);\r\n\r\n         p*=0.75; \/\/ Zoom a bit\r\n\r\n         \/\/ Improvising creepy alien hands using just maths and imagination... :)\r\n         float Finger;\r\n         float FinShade;\r\n         float FingerRef;\r\n\r\n         p.x = abs(p.x);\r\n         p += vec2(-1.5,2.5);\r\n\r\n         p*=r2d(2.7); \/\/ Arbirary Hands Angle...\r\n         \/\/ Fingers Reflection In The Canopy\r\n         for( float a = 0.0; a < 3.0; a++ ) \/\/ Apparently It's A Surviving Trydactil ! ;)\r\n         {\r\n              p*= r2d(a*0.3);\r\n              p += vec2( -0.075*a-0.02*Smooth1D(vec2(a*0.59+TimeVar)), 1.0 + 0.05*sin(TimeVar));\r\n              p+=vec2( 0.025, 0.025);\r\n              FingerRef= max(smoothstep(0.0,0.01,1.5-p.y)*smoothstep(0.0,0.01,p.y)*smoothstep(0.025,0.0,abs(p.x-0.05*tan(sin(3.0*p.y)))-0.05-0.01*sin(20.0*p.y)),smoothstep(0.025,0.0,length(p)-0.05));\r\n              p-=vec2( 0.025, 0.025);\r\n              col = mix(col,vec4(1.0),0.5*FingerRef);\r\n              p += vec2( 0.075*a+0.02*Smooth1D(vec2(a*0.59+TimeVar)),-1.0 - 0.05*sin(TimeVar));\r\n              p*=r2d(-a*0.3);\r\n         };\r\n\r\n         \/\/ Awful truth that Alan Hynek and Jacques Vall\u00e9e never told you :\r\n         \/\/ You can make perfectly cool alien fingers with just tan(sin(x)) and circles !\r\n         \/\/ Another awful truth : Aliens are probably abysmal piano players eventhough they have super long fingers !\r\n         \/\/ Last question : why are alien fingers so long, when they don't have nostrils to pick ?!\r\n         for( float a = 0.0; a < 3.0; a++ )\r\n         {\r\n              p*= r2d(a*0.3);\r\n              p += vec2(-0.075*a-0.02*Smooth1D(vec2(a*0.59+TimeVar)), 1.0 + 0.05*sin(TimeVar));\r\n              Finger   = max(smoothstep(0.0,0.01,1.5-p.y)*smoothstep(0.0,0.01,p.y)*smoothstep(0.01,0.0,abs(p.x-0.05*tan(sin(3.0*p.y)))-0.05-0.01*sin(20.0*p.y)),smoothstep(0.01,0.0,length(p)-0.05));\r\n              FinShade   = 0.75*max(smoothstep(0.0,0.01,1.5-p.y)\r\n                              *smoothstep(0.0,0.01,p.y)\r\n                              *smoothstep(0.025,0.0,abs(p.x-0.05*tan(sin(3.0*p.y)))-0.02-0.01*sin(20.0*p.y)),\r\n\r\n                               smoothstep(0.025,0.0,length(p)-0.02));\r\n              col = mix(col,vec4(1.0),Finger);\r\n              col = mix(col,vec4(0.5,0.5,0.5,1.0),FinShade);\r\n              p += vec2( 0.075*a+0.02*Smooth1D(vec2(a*0.59+TimeVar)),-1.0 - 0.05*sin(TimeVar));\r\n              p*=r2d(-a*0.3);\r\n         };\r\n     };\r\n     col *= vec4(1.0,0.7,0.5,1.0);\r\n     return col;\r\n}\r\nvec4 Nebula01(in vec2 p,vec4 col)\r\n{\r\n     p*=10.0;\r\n     vec4 BufferNeb = col;\r\n     \/\/ Scroll To The Right.\r\n     float Speed =-0.5*TimeVar;\r\n     \/\/ Rotate Randomly\r\n     float RotationNeb = -PI;\r\n     p*=r2d(RotationNeb);\r\n     \/\/ duplicating p for later use.\r\n     vec2 save01 = p;\r\n     \/\/ Where are we ?!\r\n     vec2 ScrollPos = p + vec2(Speed,0.0);\r\n     \/\/ Domain Warping Mr Sulu !\r\n     p = dw3(ScrollPos);\r\n     \/\/ Pilars of Creation Color Scheme !\r\n     vec4 BGC1 = vec4(0.2,0.2,0.3,1.0);\r\n     vec4 BGC2 = vec4(0.1,0.7,1.0,1.0);\r\n     vec4 MCC1 = vec4(1.0,0.5,0.2,1.0);\r\n     vec4 DDC1 = vec4(0.0,1.0,1.0,1.0);\r\n     vec4 CK01 = vec4(1.0);\r\n     \/\/ BG Nebula\r\n     BufferNeb = mix(BGC1,BGC2,0.5*s(7.0,0.0,abs(p.y + 1.5*Smooth1D(vec2(0.05*ScrollPos))-5.0)-10.0*Smooth1D(vec2(0.05*p.x))));\r\n     \/\/ Get 4 Cloud Types\r\n     float Neb1 = p.y - 2.0*Smooth1D(vec2(0.05*p.x+ 123.1));\r\n     float Neb2 = p.y - 3.0*Smooth1D(vec2(0.10*p.x+ 456.2));\r\n     float Neb3 = p.y - 1.0*Smooth1D(vec2(0.20*p.x+ 789.3) + 0.5);\r\n     float Neb4 = p.y - 1.0*Smooth1D(vec2(0.20*p.x+ 987.4) + 0.5);\r\n     \/\/ Lighter Nebula Ribbon\r\n     BufferNeb+=vec4(0.5*texture2D(tex01,0.005*(p)).rgb,1.0)*s(15.0,0.0,abs(Neb1))*s(0.0,5.0,Neb2);\r\n     \/\/ Main Clouds Thin Highlight...\r\n     BufferNeb+= Smooth1D(vec2(0.01*p.x))*MCC1*vec4(vec3(Smooth1D(vec2(0.1*p.x))),1.0)*s(0.5,0.0,Neb3                              )*s(0.0,0.5,Neb4 + 3.0*Smooth1D(vec2(0.5*p.x)));\r\n     BufferNeb+= Smooth1D(vec2(0.01*p.x))*MCC1*vec4(vec3(Smooth1D(vec2(0.1*p.x))),1.0)*s(0.5,0.0,Neb3 + 2.5*Smooth1D(vec2(0.5*p.x)))*s(0.0,0.5,Neb4 + 3.0*Smooth1D(vec2(0.5*p.x)));\r\n     \/\/ Dark Dust Cloud Ribbon...\r\n     BufferNeb += texture2D(tex00,0.0005*p).xxxx*s(5.0,0.0,abs(Neb1-5.0)-1.0+5.0*Smooth1D(vec2(0.1*p.x)));\r\n\r\n     p = save01;\r\n     p+=vec2(Speed,0.0);\r\n     vec2 fr = fract(0.05*p);\r\n     vec2 fl = floor(0.05*p);\r\n     if( fl.y==-1.0 && Smooth1D(vec2(fl.x*fl.y)) > 0.75 )BufferNeb+=metaDiamond(r2d(RotationNeb)*fr,r2d(RotationNeb)*vec2(0.5,0.5),0.01+0.01*abs(sin(0.5*TimeVar)))*smoothstep(0.2,0.0,length(fr-vec2(0.5))-0.1);\r\n\r\n     p = save01;\r\n     p+=vec2(Speed,0.0);\r\n     vec2 b = fract(3.0*p);\r\n     p = floor(3.0*p);\r\n     if( (Smooth1D(vec2(p.x*p.y)) > 0.95) && s(0.0,1.5,abs(Neb1) - 0.5) > 0.0)\r\n         BufferNeb += clamp(vec4(0.99)*pow((50.0 - 40.0*Smooth1D(vec2(p.x+p.y)))*length(b-vec2(0.8*Smooth1D(vec2(p.x*p.y)),0.80*Smooth1D(vec2(p.x*p.y+258.2)))),-2.5),0.0,1.0);\r\n     \/\/ Color Keying\r\n     BufferNeb *= CK01;\r\n     return vec4(BufferNeb.xyz,1.0);\r\n}\r\n\r\nvec4 Scene02(in vec2 p,vec4 col)\r\n{\r\n     p*=1.5;\r\n     vec4 BufferScene02 = col;\r\n     p.y+=0.75;\r\n     vec2 save01=p;\r\n     p.y = abs(p.y+0.5);\r\n     BufferScene02 = Nebula01(p+vec2(0.0,-0.5),col);\r\n     p.y-=0.08;\r\n     BufferScene02 = mix(BufferScene02,vec4(0.7)*Nebula01(vec2(-p.x,p.y),col) + 0.5*texture2D(tex02,0.4*(p + vec2(0.295*TimeVar,0.0))),s(0.0,0.01,p.y-3.5*clamp(abs(sin(1.03*p.x + 0.3*TimeVar)),0.0,2.5)+0.75));\r\n     p.y-=0.08;\r\n     BufferScene02 = mix(BufferScene02,vec4(0.0,0.025,0.1,1.0)+GetColorSpot(p+vec2(TimeVar + 300.0,0.0))*pow(0.15*length(p - vec2(0.0,5.0)),2.0)*(0.5+0.5*texture2D(tex02,0.4*(p + vec2(0.3*TimeVar,0.0)))),s(0.0,0.01,p.y-3.5*clamp(abs(sin(1.00*p.x + 0.3*TimeVar)),0.0,2.5)+0.75));\r\n     p = save01;\r\n     if(p.y<-0.5)BufferScene02 *= 0.5;\r\n     if(p.y<-0.5)BufferScene02 += 0.5*GetColorSpot(p+vec2(TimeVar + 300.0,0.0))*texture2D(tex02,0.5*vec2(p.x\/p.y - 0.53*TimeVar,1.0\/p.y));\r\n     return BufferScene02;\r\n}\r\n\r\nvec4 Bird(vec2 p, float randSeed)\r\n{\r\n     p*= 0.20;\r\n     p+=vec2(50.0*Smooth1D(vec2(randSeed + 1.234 + 0.125*TimeVar)) - 25.0,10.0*Smooth1D(vec2(randSeed + 456.7 + 0.125*TimeVar))- 5.0);\r\n     p*= 1.0+0.5*Smooth1D(vec2(randSeed + 0.25*TimeVar));\r\n     if( s(0.01,0.0,length(p)-0.5) > 0.0)\r\n     {\r\n         p.x = abs(p.x);\r\n         p*=r2d(0.25*3.14159*Smooth1D(vec2(randSeed))*sin(randSeed + 5.0*TimeVar));\r\n         return 0.25*vec4(1.0)*s(0.001,0.0,abs(p.y-p.x)-0.04)*s(0.01,0.0,abs(p.x)-0.25);\r\n     }else{\r\n         return vec4(0.0);\r\n     };\r\n}\r\n\r\nvec4 Scene03(in vec2 p,vec4 col)\r\n{\r\n     \/\/ Shoryuuuuuuken !\r\n     p.y += 2.0;\r\n\r\n     \/\/ Camera back again !\r\n     p*=7.0;\r\n\r\n     \/\/ Constant shifts in zoom\r\n     p *= 1.0+0.5*Smooth1D(vec2(0.1*TimeVar));\r\n\r\n     vec2 save01 = p;\r\n\r\n     \/\/ Atmo Gradient\r\n     col = mix(vec4(1.0,1.0,0.5,1.0),vec4(0.8,0.1,0.1,1.0),s(0.0,10.0,sqrt(p.y-15.0)));\r\n\r\n     p +=-vec2(0.0,35.0);\r\n     p*=r2d(0.05*TimeVar);\r\n     p += vec2(5.0*Smooth1D(vec2(0.15*p.y)) - 2.5,0.0);\r\n     \/\/ Liotrao's Chromosphere\r\n     col += 0.5*vec4(1.0,0.75,0.4,1.0)*smoothstep(10.0,0.0,length(p)-45.0);\r\n     col += vec4(1.0,0.75,0.4,1.0)*smoothstep(2.0,0.0,length(p)-45.0);\r\n\r\n     p= save01;\r\n\r\n     \/\/ Solar Eruptions\r\n     p.y -=35.0;\r\n     col += 0.05\r\n            *clamp(TimeVar,0.0,EclipseDelay)\r\n            *vec4(vec3(0.35),1.0)\r\n            *texture2D(tex01,5.0*p\/dot(p,p) + 0.001*TimeVar)\r\n            *s(30.0,0.0,abs(length(p)-50.0)-1.0)\r\n            ;\r\n     p.y +=35.0;\r\n\r\n     \/\/ Liotrao's Disk\r\n     col = mix(col,vec4(1.0,0.2,0.1,1.0),smoothstep(1.0,0.0,length(p-vec2(0.0,35.0))-45.0));\r\n\r\n     \/\/ Photosphere Gradient\r\n     col += vec4(0.5*smoothstep(30.0,0.0,length(p-vec2(0.0,35.0))-30.0)*vec3(1.0,1.0,1.0),1.0);\r\n\r\n     \/\/ \"Chromospheric Cloud-Hacking\"...\r\n     \/\/ Moebius-Transform-like Pattern. Warning : Skakespearian-CodeMonkey Mode activated !\r\n     if( TimeVar > EclipseDelay )\r\n     {\r\n         p.y -=35.0;\r\n         p*=r2d(TimeVar + Smooth1D(vec2(TimeVar))*0.07*length(p));\r\n         col += 1.0\r\n               *vec4(1.0,1.0,1.0,1.0)\r\n               *texture2D(tex00,r2d(PI\/2.0)*0.15*p\/dot(p,p) + 0.015*TimeVar)\r\n               *s(10.0,0.0,length(p)-30.0)\r\n               *smoothstep(0.5,0.0,length(p)-45.0)\r\n               ;\r\n         p*=r2d(-TimeVar - Smooth1D(vec2(TimeVar))*0.07*length(p));\r\n         p.y +=35.0;\r\n     };\r\n\r\n     \/\/ Eclipsing Moon. (\"DAMMIT, MOON MOON !\")\r\n     p -= vec2(0.0,35.0);\r\n     p*=r2d(-PI\/4.0);\r\n     p -= vec2(-50.0 + (50.0\/EclipseDelay)*clamp(TimeVar,0.0,EclipseDelay),0.0);\r\n     col = mix(col,vec4(0.2,0.1,0.1,1.0),smoothstep(0.5,0.0,length(p)-15.0));\r\n     p += vec2(-50.0 + (50.0\/EclipseDelay)*clamp(TimeVar,0.0,EclipseDelay),0.0);\r\n     p*=r2d(PI\/4.0);\r\n     p += vec2(0.0,35.0);\r\n\r\n     \/\/ Clouds On Draxacar\r\n     p+=vec2(0.0, 10.0);\r\n     if(p.y > 7.0)col += 0.5*texture2D(tex01,vec2(0.010*p.x\/(p.y - 7.0),1.0\/(p.y - 7.0) + 0.001*TimeVar)).xxxx*s(0.0,10.0,p.y - 7.0);\r\n     p+=vec2(0.0,-10.0);\r\n\r\n     p= save01;\r\n\r\n     \/\/ Mountains\r\n\r\n     \/\/ First Mountain Range \"Ridge 1\" (the farthest)\r\n     float Ridge1 = p.y - 10.0*Smooth1D(vec2(58.1+0.025*p.x + 0.0*TimeVar))\r\n                        -  2.0*Smooth1D(vec2(58.1+0.200*p.x + 0.0*TimeVar))\r\n                        -  0.5*Smooth1D(vec2(58.1+0.900*p.x + 0.0*TimeVar))\r\n                        +0.0005*p.x*p.x - 10.0;\r\n\r\n     \/\/ BaseColor (rc : Ridge Color)\r\n     vec4 rc1 = vec4(0.9,0.5,0.5,1.0)+vec4(vec3(0.5,0.1,0.1)*s(0.5,0.0,abs(Ridge1)-0.7*Smooth1D(vec2(1.0*p.x)))*Smooth1D(vec2(0.25*p.x)),1.0);\r\n     \/\/ Rock Texture\r\n     vec4 rc2 = vec4(2.0*texture2D(tex00,r2d(PI\/6.0)*0.015*p).xyz,1.0);\r\n     \/\/ Colorize Rock Texture\r\n     vec4 rc3 = vec4(0.7,0.25,0.05,1.0);\r\n     \/\/ Ridge Profile\r\n     vec4 rc4 = vec4(1.0)*abs(p.y-10.0*Smooth1D(vec2(58.1+0.025*p.x))- 2.0*Smooth1D(vec2(58.1+0.200*p.x))-11.0);\r\n     \/\/ Radial Mountains Shading (2D fake-perspective trick)\r\n     vec4 rc5 =vec4(1.0)*s(0.0,2.0,fract(-0.025*(abs(0.75*p.x)+3.0)+0.05*Smooth1D(vec2(p.y))-0.0015*abs(0.005*p.x*p.x + 15.0)*p.y));\r\n\r\n     \/\/ Result\r\n     vec4 rcr = rc1+rc2*rc3*s(4.5,0.0,rc4*rc5+2.0);\r\n\r\n     \/\/ Distant Mountains\r\n     col = mix(col,rcr,s(0.01,0.0,Ridge1));\r\n\r\n     float RadialRidges1 = fract(-0.025*(abs(0.75*p.x)+3.0)+0.05*Smooth1D(vec2(p.y))-0.0015*abs(0.005*p.x*p.x + 15.0)*p.y);\r\n\r\n     \/\/ Intensifying The Radial Ridges\r\n     col += vec4(0.25,0.20,0.025,1.0)*s(0.50,0.0,RadialRidges1)*s(0.1,0.0,Ridge1);\r\n     col += vec4(0.50,0.10,0.100,1.0)*s(0.45,0.0,RadialRidges1)*s(0.1,0.0,Ridge1);\r\n\r\n     \/\/ Second Mountain Range (the closest)\r\n     float Ridge2 = p.y - 10.0*Smooth1D(vec2(0.025*p.x))\r\n                        -  2.0*Smooth1D(vec2(0.200*p.x))\r\n                        -  0.5*Smooth1D(vec2(0.900*p.x))\r\n                        +0.0005*p.x*p.x -  2.0;\r\n\r\n     \/\/ BaseColor (rc : Ridge Color)\r\n     rc1 = vec4(0.5,0.25,0.3,1.0)+vec4(0.5,0.1,0.1,1.0)*s(1.5,0.0,abs(Ridge2)-1.7*Smooth1D(vec2(1.0*p.x)))*Smooth1D(vec2(0.25*p.x));\r\n     \/\/ Rock Texture\r\n     rc2 = vec4(2.2*texture2D(tex00,r2d(PI\/6.0)*0.009*p).xyz,1.0);\r\n     \/\/ Colorize Rock Texture\r\n     rc3 = vec4(0.7,0.25,0.05,1.0);\r\n     \/\/ Ridge Profile\r\n     rc4 = vec4(1.0)*abs(p.y-10.0*Smooth1D(vec2(0.025*p.x + 0.0*TimeVar))- 2.0*Smooth1D(vec2(0.200*p.x + 0.0*TimeVar))-2.0);\r\n     \/\/ Radial Mountains Shading (2D fake-perspective trick)\r\n     rc5 = vec4(1.0)*s(0.0,2.0 + Smooth1D(vec2(1.0*TimeVar)),fract(-0.02*(abs(0.75*p.x)+3.0)+0.05*Smooth1D(vec2(p.y))-0.0015*abs(0.005*p.x*p.x)*p.y));\r\n\r\n     \/\/ Result\r\n     rcr = rc1+rc2*rc3*s(5.5,0.0,rc4*rc5+3.0);\r\n\r\n     \/\/ Closest Mountains\r\n     col = mix(col, 0.6*rcr, s(0.01,0.0, Ridge2));\r\n\r\n     float RadialRidges2 = fract(-0.02*(abs(0.75*p.x)+3.0)+0.05*Smooth1D(vec2(p.y))-0.0015*abs(0.005*p.x*p.x)*p.y);\r\n     \/\/ Intensifying The Radial Ridges\r\n     col += 0.7*vec4(0.25,0.2,0.025,1.0)*s(0.50,0.0,RadialRidges2)*s(0.1,0.0,Ridge2);\r\n     col += 0.7*vec4(0.50,0.1,0.100,1.0)*s(0.45,0.0,RadialRidges2)*s(0.1,0.0,Ridge2);\r\n\r\n     p*= 0.75;\r\n\r\n     \/\/ Eclipse Lighting\r\n     col = vec4(mix(col.xyz,0.25*col.xyz*col.xxx,clamp(TimeVar,0.0,EclipseDelay)\/EclipseDelay),1.0);\r\n\r\n     \/\/ Third Tower\r\n     p.x += -50.0;\r\n     vec4 ColorTower3 = vec4(0.5,0.2,0.1,1.0)\r\n                      + abs(3.0*cos(10.0*p.x+ 5.0*p.y))\r\n                       *abs(0.4*cos( 2.0*p.y+ 0.5*p.x))\r\n                       *(1.0-1.5*abs(0.25*p.x));\r\n     col  = mix(col,ColorTower3,s(0.5,0.0,p.y-20.0*exp(-abs(0.5*p.x + 0.080*sin(4.0*p.y+1.5))) + 10.0));\r\n\r\n     \/\/ Top Beacon\r\n     if( TimeVar> EclipseDelay)\r\n     {\r\n         col += vec4(1.0,0.25,0.25,1.0)*metaDiamond(p,vec2(0.0,10.0),0.75+0.25*sin(30.0*TimeVar + 1.1));\r\n     }else{\r\n         col += clamp(0.5-Smooth1D(vec2(2.0*TimeVar)),0.0,1.0)*vec4(1.0,0.5,0.5,1.0)*metaDiamond(p,vec2(0.0,10.0),1.0);\r\n     }\r\n     p.x -= -50.0;\r\n\r\n     \/\/ Left Tower\r\n     p.x -= 5.0;\r\n     vec4 ColorTowerLeft = vec4(0.5,0.2,0.1,1.0)\r\n                         + abs(3.0*cos(10.0*p.x+5.0*p.y))\r\n                          *abs(0.4*cos(2.0*p.y+0.5*p.x))\r\n                          *(1.0-1.5*abs(0.25*p.x));\r\n     col  = mix(col,ColorTowerLeft,s(0.5,0.0,p.y-20.0*exp(-abs(0.5*p.x + 0.080*sin(4.0*p.y+1.5))) + 10.0));\r\n\r\n     if( TimeVar > EclipseDelay)\r\n     {\r\n         col += vec4(1.0,0.25,0.25,1.0)*metaDiamond(p,vec2(0.0,10.0),0.75+0.25*sin(30.0*TimeVar + 1.1));\r\n     }else{\r\n         col += clamp(0.5-Smooth1D(vec2(123.4+2.0*TimeVar)),0.0,1.0)*vec4(1.0,0.5,0.5,1.0)*metaDiamond(p,vec2(0.0,10.0),1.0);\r\n     }\r\n     p.x += 5.0;\r\n\r\n     \/\/ Right Tower\r\n     p.x -= 35.0;\r\n     vec4 ColorTowerRight = vec4(0.5,0.2,0.1,1.0)\r\n                          + abs(3.0*cos(10.0*p.x+5.0*p.y))\r\n                           *abs(0.4*cos(2.0*p.y-0.5*p.x))\r\n                           *(1.0-1.5*abs(0.25*p.x));\r\n     col  = mix(col,ColorTowerRight,s(0.5,0.0,p.y-20.0*exp(-abs(0.5*p.x + 0.080*sin(4.0*p.y+1.5))) + 10.0));\r\n\r\n     if( TimeVar > EclipseDelay)\r\n     {\r\n         col += vec4(1.0,0.25,0.25,1.0)*metaDiamond(p,vec2(0.0,10.0),0.75+0.25*sin(30.0*TimeVar));\r\n     }else{\r\n         col += clamp(0.5-Smooth1D(vec2(432.1+2.0*TimeVar)),0.0,1.0)*vec4(1.0,0.5,0.5,1.0)*metaDiamond(p,vec2(0.0,10.0),1.0);\r\n     }\r\n     p.x += 35.0;\r\n\r\n     \/\/ Dome of Xool (I blame Howard and Conan the Barbarian for this part)\r\n     p.y -= 3.0;\r\n     vec4 ColorDomeOfDoom = vec4(0.5,0.2,0.1,1.0);\r\n     ColorDomeOfDoom += 2.0*abs(1.0*cos(7.5*p.x+3.25*p.y))*abs(0.4*cos(2.0*p.y+1.1*p.x))*(1.0-s(0.,0.80,length(0.2*(p- vec2(20.0,-8.0)))-1.));\r\n     ColorDomeOfDoom += vec4(0.25,0.1,0.1,1.0)*s(0.2,0.0,abs(length(0.2*(p- vec2(20.0,-8.0)))-1.7)-0.5);\r\n     col = mix(col,ColorDomeOfDoom, s(0.01,0.0,length(p - vec2(20.0,-8.0))-8.5));\r\n     \/\/ Dome-Shield Still Holding Strong After Seven Million Years ! Now, THAT'S engineering !\r\n     col += 0.25*vec4(1.0,0.8,0.5,1.0)*s(1.25,0.0,abs(length(p - vec2(20.0,-8.0))-10.0)-0.15*sin(5.0*atan(p.y+8.0,p.x-20.0) + 10.0*TimeVar));\r\n     col += 0.25*vec4(1.0,0.8,0.5,1.0)*s(0.15,0.0,abs(length(p - vec2(20.0,-8.0))-10.0)-0.03*sin(5.0*atan(p.y+8.0,p.x-20.0) - 10.0*TimeVar));\r\n     col += 0.50*abs(sin(TimeVar))*vec4(1.0,0.8,0.5,1.0)*s(0.15,0.0,length(p - vec2(20.0,-8.0))-10.0);\r\n     p.y += 3.0;\r\n\r\n     p*= 1.0\/0.75;\r\n\r\n     \/\/ Birds, 40 of them !\r\n     if( abs(p.y-10.0)<20.0) for(float g=0.0;g<40.0;g++)col += Bird(p,100.5 + 54.321*g);\r\n\r\n     \/\/ Rows Of Trees\r\n     if( p.y < 2.0 )\r\n     {\r\n         for( float i = 0.0; i< 10.0; i ++)\r\n         {\r\n              p = 1.0*save01;\r\n              p = dw0(0.55*(p+vec2((i + 0.5)*1.0*TimeVar + i*54.21,i*5.0)));\r\n              col = mix(col,(1.0-0.25*clamp(TimeVar,0.0,EclipseDelay)\/EclipseDelay)*vec4(0.3,0.675,0.4,1.0)*texture2D(tex00,0.001*p),s(0.5,0.0,p.y - (1.0 - 0.01*i)*Smooth1D(vec2(10.0*p.x + i))));\r\n         };\r\n     };\r\n\r\n     p= save01;\r\n\r\n     \/\/ Haze In The Distance\r\n     col += vec4(0.25,0.25,0.25,1.0)*s(20.0,0.0,abs(p.y));\r\n     return col;\r\n}\r\n\r\nvoid main(void)\r\n{\r\n     vec2 p = vec2( (gl_FragCoord.x - iResolution.x\/2.0)\/iResolution.y,gl_FragCoord.y\/iResolution.y);\r\n\r\n     p *= 2.0;\r\n     vec2 a = p;\r\n     vec2 b = p;\r\n     TimeVar = mod(1.0*iTime + 0.0,165.343);\r\n     vec4 col = vec4(0.0,0.0,0.0,1.0);\r\n\r\n         vec4 ColorTxt = vec4(1.0,0.0,0.0,1.0);\r\n         ColorTxt     += vec4(1.0,0.5,0.1,1.0)*clamp(sin(15.0*(p.x+p.y) - 10.0*TimeVar),0.0,1.0);\r\n         \/\/ Default Strings : FRENCH !\r\n         int Title01=0,Title02=1,Title03=2,Title04=3,Tagline01=4,Tagline02=5,Invitation=6,Epita1=14,Epita2=15,Epita3=16,Epita4=17,Epita5=18;\r\n         \/\/ ...OR IN ENGLISH PLEASE !\r\n         if( !LANG )Title01=7,Title02=8,Title03=9,Title04=10,Tagline01=11,Tagline02=12,Invitation=13,Epita1=19,Epita2=20,Epita3=21,Epita4=22,Epita5=23;\r\n\r\n     if( TimeVar<57.0 || TimeVar>135.70 )\r\n     {\r\n\r\n         \/\/ Vertical Scroller\r\n         float AltitudeHorizon = -3.5;\r\n         p += vec2(0.0,clamp((AltitudeHorizon\/VScrollerLength)*TimeVar,AltitudeHorizon,0.0));\r\n\r\n         \/\/ Starfield\r\n         p*=r2d(5.5);\r\n         b = fract(25.0*p);\r\n         p = floor(25.0*p);\r\n         if( Smooth1D(vec2(p.x*p.y))>0.9)\r\n         {\r\n             float Star = clamp(Smooth1D(vec2(p.x+p.y))*pow(20.0*length(b-vec2(0.5*Smooth1D(vec2(p.x+ p.y))-0.25,0.5*Smooth1D(vec2(p.x+ p.y+258.2))-0.25) - vec2(0.5,0.5)),-2.0),0.0,1.0);\r\n             col = vec4(vec3(Star),1.0);\r\n         };\r\n\r\n         p = a;\r\n         p += vec2(0.0,clamp((AltitudeHorizon\/VScrollerLength)*TimeVar,AltitudeHorizon,0.0));\r\n\r\n         \/\/ BG nebula\r\n         vec2 q = dw1(p);\r\n         col += vec4(vec3(0.45,0.0,0.0)*smoothstep(0.500,0.0,abs(q.y + 0.3*q.x) - 0.1*Smooth1D(vec2(5.0*q.x))),1.0);\r\n         q*=r2d(-PI\/3.);\r\n         col += vec4(0.5,0.0,0.0,1.0)*smoothstep(1.0,0.0,abs(q.y + 0.3*q.x) - 0.25*Smooth1D(vec2(3.0*q.x)) - 0.05);\r\n         col -= vec4(0.5,0.0,0.0,0.0)*smoothstep(0.2,0.0,abs(q.y + 0.3*q.x) - 0.25*Smooth1D(vec2(1.0*q.x)) - 0.01);\r\n         col = mix(col,vec4(0.9,0.7,0.7,1.0),Smooth1D(vec2(5.0*q.y))*smoothstep(0.01,0.0,abs(q.y + 0.3*q.x - 0.25*Smooth1D(vec2(1.0*q.x)) - 0.1)));\r\n         col = mix(col,vec4(0.9,0.7,0.7,1.0),Smooth1D(vec2(5.0*q.y))*smoothstep(0.01,0.0,abs(q.y + 0.3*q.x + 0.25*Smooth1D(vec2(1.0*q.x)) + 0.1)));\r\n         q*=r2d( PI\/3.);\r\n\r\n         \/\/ Atmo\r\n         col = mix(col,vec4(0.90,0.00,0.00,1.0),smoothstep(2.0,0.0,    p.y + 2.8)       );\r\n         col = mix(col,vec4(0.99,0.50,0.00,1.0),smoothstep(3.0,0.0,abs(p.y + 3.9) - 0.5));\r\n         col = mix(col,vec4(1.00,0.70,0.40,1.0),smoothstep(0.5,0.0,abs(p.y + 2.9) - 0.1));\r\n\r\n         \/\/ Planets\r\n         p += vec2(-0.5,0.0);\r\n         p*=r2d(PI\/16.0);\r\n         float Planete01 = smoothstep(0.01,0.0,length(p - vec2(0.0,0.0)) - 0.5);\r\n         float T1 = smoothstep(0.3,0.0,length(p - vec2(-0.3,0.0)) - 0.4);\r\n         col = mix(col,vec4(T1*(vec3(0.99,0.5,0.2) + 0.25*texture2D(tex02,0.5*vec2(3.*(vec2(0.1,0.5)*p\/cos(length(1.75*p)))) + vec2(0.02*TimeVar,0.0)).xxx),1.0),Planete01);\r\n         if(p.y<0.0)col = mix(col,vec4(vec3(1.0,0.7,0.3),1.0),0.85*smoothstep(0.15,0.0,abs(length(vec2(1.0,64.0)*p)-1.25)-0.2));\r\n         if(p.y>0.0)col = mix(col,vec4(vec3(1.0,0.7,0.3),1.0),0.85*smoothstep(0.15,0.0,abs(length(vec2(1.0,64.0)*p)-1.25)-0.2)*smoothstep(0.0,0.01,length(p) - 0.5));\r\n         \/\/ Satellite\r\n         col = mix(col,vec4(0.1,0.1,0.1,1.0)+vec4(0.7,0.5,0.2,1.0)*smoothstep(0.05,0.0,length(p - vec2(-0.99,0.1)) - 0.025),smoothstep(0.01,0.0,length(p - vec2(-0.95,0.1)) - 0.025));\r\n         p*=r2d(-PI\/16.0);\r\n         p -= vec2(-0.5,0.0);\r\n\r\n         p += vec2(0.5,-1.0);\r\n         p*=r2d(PI\/16.0);\r\n         float Planete02 = smoothstep(0.01,0.0,length(p - vec2(0.0,0.0)) - 0.3);\r\n         float T2 = 0.25+0.75*smoothstep(0.1,0.,length(p - vec2(-0.1,0.0)) - 0.3);\r\n         col = mix(col,vec4(T2*(vec3(0.44,0.55,0.44)-0.1*texture2D(tex00,0.125*vec2(3.*(p\/cos(length(1.75*p))))  + vec2(0.01*TimeVar,0.0)).xxx),1.0),Planete02);\r\n         p*=r2d(-PI\/16.0);\r\n         p -= vec2(0.5,-1.0);\r\n\r\n         p *= 10.0;\r\n\r\n         \/\/ Moutains\r\n         vec4 ColorMountains = vec4(1.0,0.44,0.1,1.0);\r\n         float M1 = p.y - 3.5*Smooth1D(vec2(0.10*p.x + 123.5)) + 1.25\r\n                        - 0.5*Smooth1D(vec2(0.50*p.x + 456.5)) + 0.25\r\n                        - 0.1*Smooth1D(vec2(2.50*p.x + 789.5)) + 0.05\r\n                        + 29.0;\r\n         float M2 = p.y - 1.0*Smooth1D(vec2(0.30*p.x + 258.5)) + 0.50\r\n                        - 0.5*Smooth1D(vec2(0.50*p.x + 147.5)) + 0.25\r\n                        - 0.2*Smooth1D(vec2(2.50*p.x + 369.5)) + 0.05\r\n                        + 29.5;\r\n         float M3 = p.y - 0.5*Smooth1D(vec2(0.75*p.x + 159.3)) + 31.0;\r\n\r\n         col = mix(col,1.2*ColorMountains,smoothstep(0.01,0.0,M1));\r\n         col = mix(col,1.0*ColorMountains,smoothstep(0.01,0.0,M2));\r\n         col = mix(col,0.8*ColorMountains,smoothstep(0.01,0.0,M3));\r\n\r\n         \/\/ Back Pilons : Left\r\n         col = drawPylon(p,col,1., 5.0);\r\n         \/\/ Back Pilons : Right\r\n         col = drawPylon(p,col,2.,-5.0);\r\n\r\n         vec2 w = p;\r\n         p*=0.1;\r\n\r\n         \/\/ Beam\r\n         if( TimeVar > VScrollerLength )\r\n         {\r\n             col += vec4(1.0,0.55,0.11,1.0)*smoothstep(0.40,0.0,abs(10.0*p.x) - 0.2*Smooth1D(vec2(10.0*p.y - 50.0*TimeVar)));\r\n             col += vec4(1.0,0.77,0.77,1.0)*smoothstep(0.05,0.0,abs(10.0*p.x) - 0.2*Smooth1D(vec2(10.0*p.y - 50.0*TimeVar)));\r\n         };\r\n\r\n         \/\/ The Hypersphere aka \"The Teknikor Bubble\", aka \"La G\u00e9odyss\u00e9e\"\r\n         if( TimeVar> VScrollerLength )col += vec4(1.0)*smoothstep(0.05,0.0,length(p - vec2(0.0,-1.95)) - (0.5 + 0.01*sin(50.0*p.y - 5.0*TimeVar)));\r\n         vec2 r = p - vec2(0.0,-1.95);\r\n         float ht = 0.35;\r\n         if( TimeVar > VScrollerLength )ht=1.0;\r\n         vec3 ColorS = ht*vec3(1.0,0.1,0.1)*texture2D(tex02,2.0*dw2(r\/cos(length(2.0*r)) + vec2(0.0,-0.1*TimeVar))).xxx;\r\n         float Sphere = smoothstep(0.01,0.0,length(r) - 0.5);\r\n         if( TimeVar > VScrollerLength )ColorS = ColorS*(vec3(0.5,0.5,0.5) + 0.5*vec3(1.0,0.7,0.5)*pow(0.85*length(p-vec2(0.0,-2.55)),-2.0));\r\n         col = mix(col,vec4(ColorS,1.0),Sphere);\r\n\r\n         \/\/ Upper Shading Sphere\r\n         col = mix(col,vec4(0.0,0.0,0.0,1.0),smoothstep(0.0,0.4,p.y + 1.95)*Sphere);\r\n\r\n         p = w;\r\n\r\n         \/\/ The Temple !\r\n         float StepPyramid = abs(1.5*p.x) + floor(1.0*p.y) + 29.0;\r\n         vec4 TexColor = vec4(1.0,0.5,0.0,1.0)*texture2D(tex00,(mod(0.125*abs(p),0.5)));\r\n         TexColor += 0.3*vec4(1.0,0.5,0.2,1.0)*smoothstep(0.01,0.0,abs(p.y - 0.5*clamp(cos(20.0*p.x),0.0,0.1) - floor(p.y) - 0.90) - 0.05 );\r\n\r\n         col = mix(col,vec4(TexColor.xyz*abs(sin(PI*p.y + PI\/4.0)),1.0),smoothstep(0.01,0.0,p.y + StepPyramid + 25.0));\r\n\r\n         \/\/ Edges\r\n         col += vec4(0.33,0.15,0.0,1.0)*smoothstep(0.3,0.0,abs(sin(PI*p.y + 0.1)))*smoothstep(0.01,0.0,p.y + StepPyramid + 25.0)*abs(0.6*sin(150.0*TimeVar))\r\n             *smoothstep(0.01,0.0,p.y - 7.0*p.x + 27.0 )\r\n             *smoothstep(0.01,0.0,p.y + 7.0*p.x + 27.0);\r\n\r\n         \/\/ Highlight Pyramid Stages\r\n         if(TimeVar>35.0)col += vec4(0.5,0.25,0.0,1.0)*smoothstep(0.25,0.0,abs(sin(PI*p.y + 0.1)))*smoothstep(0.01,0.0,p.y + StepPyramid + 25.0);\r\n\r\n         col += vec4(0.8,0.5,0.1,1.0)*smoothstep(0.01,0.0,p.y + StepPyramid + 25.0)*smoothstep(0.01,0.0,abs(p.y - 0.5*clamp(cos(20.0*p.x),0.0,0.1) - floor(1.0*p.y) - 0.96) - 0.02 );\r\n\r\n         \/\/ FLARE !\r\n         if( TimeVar > VScrollerLength )col += vec4(1.0,0.5,0.2,1.0)*metaDiamond(p,vec2(0.0,-27.0),0.5+0.25*abs(sin(50.0*TimeVar)));\r\n\r\n         \/\/ Front Pilons : Left\r\n         col = drawPylon(p,col,3., 7.0);\r\n         \/\/ Front Pilons : Right\r\n         col = drawPylon(p,col,4.,-7.0);\r\n\r\n         \/\/ Dust\r\n         float DustWall01 = p.y - 2.50*Smooth1D(vec2(0.10*p.x + 0.175*TimeVar)) - 1.25*Smooth1D(vec2(0.40*p.x + 0.35*TimeVar)) + 34.0;\r\n         float DustWall02 = p.y - 2.00*Smooth1D(vec2(0.25*p.x + 0.300*TimeVar)) - 1.00*Smooth1D(vec2(0.25*p.x + 0.60*TimeVar)) + 34.5;\r\n         col = mix(col,vec4(0.77,0.4,0.2,1.0),smoothstep(2.0,0.0,DustWall01));\r\n         col += vec4(0.20,0.10,0.05,1.0)*smoothstep(0.2+0.8*Smooth1D(vec2(0.5*p.x - 0.05*TimeVar)),0.0,abs(DustWall01));\r\n         col = mix(col,vec4(0.60,0.23,0.15,1.0),smoothstep(2.0,0.0,DustWall02));\r\n\r\n         col = drawProbe(p,col);\r\n\r\n         float PosX = 25.0*Smooth1D(vec2(0.3*TimeVar))-12.5;\r\n\r\n         \/\/ Ground\r\n         if(p.y+31.0<0.0)col = mix(col,vec4(2.0*vec3(0.8,0.4,0.1)*texture2D(tex00,0.08*vec2(5.0*p.x\/(p.y+30.0),50.0\/(p.y+30.0))).xxx,1.0),\r\n                                       smoothstep(0.1,0.0,p.y + 0.1*Smooth1D(vec2(p.x)) + 33.5));\r\n         col+= vec4(0.8,0.6,0.1,1.0)*Smooth1D(vec2(2.0*p.x + 123.4))*smoothstep(0.08,0.0,abs(p.y + 0.1*Smooth1D(vec2(p.x)) + 33.5));\r\n\r\n         \/\/ Shadow\r\n         col = mix(col,vec4(0.20,0.0,0.0,1.0),0.65*smoothstep(0.9,0.0,length(vec2(1.0,3.0)*(p-vec2(-PosX,-34.5)))-1.1));\r\n\r\n         if( TimeVar > VScrollerLength )\r\n         {\r\n             vec2 spikes = (p-vec2(0.0,-27.0));\r\n             col += vec4(1.0,0.8,0.2,1.0)*abs(0.40*abs(\r\n                    Smooth1D(vec2(10.0*atan(spikes.y,spikes.x) - 0.75*TimeVar)))*\r\n                    Smooth1D(vec2(10.0*atan(spikes.y,spikes.x) + 0.75*TimeVar)))*\r\n                    abs(sin(1.0*atan(spikes.y,spikes.x)));\r\n         };\r\n\r\n         \/\/ TEXT DISPLAYING PART !\r\n         p = 0.75*a;\r\n         p.y+=0.20;\r\n\r\n         if( smoothstep(0.01,0.0,length(p - vec2(0.0,1.4)) - 0.6) > 0.0 )\r\n         {\r\n             if(TimeVar > 0.1*VScrollerLength*1.0)col = mix(col,vec4(0.2,0.2,0.25,1.0),smoothstep(0.005,0.0,abs(p.y - 1.59)-0.025));\r\n             if(TimeVar > 0.1*VScrollerLength*2.0)col = mix(col,vec4(0.2,0.2,0.25,1.0),smoothstep(0.005,0.0,abs(p.y - 1.49)-0.025));\r\n             if(TimeVar > 0.1*VScrollerLength*3.0)col = mix(col,vec4(0.2,0.2,0.25,1.0),smoothstep(0.005,0.0,abs(p.y - 1.39)-0.025));\r\n             if(TimeVar > 0.1*VScrollerLength*4.0)col = mix(col,vec4(0.2,0.2,0.25,1.0),smoothstep(0.005,0.0,abs(p.y - 1.29)-0.025));\r\n             if(TimeVar >     VScrollerLength    )col = mix(col,vec4(0.2,0.2,0.25,1.0),smoothstep(0.005,0.0,abs(p.y - 1.17)-0.050));\r\n\r\n\r\n             \/\/ MAIN TITLES\r\n             if(TimeVar > 0.1*VScrollerLength*1.0)col += 1.5*ColorTxt*traceStr(0.5*(vec2(1.0,-1.0)*p + vec2(0.0,3.65)),Title01);\r\n             if(TimeVar > 0.1*VScrollerLength*2.0)col += 1.5*ColorTxt*traceStr(0.5*(vec2(1.0,-1.0)*p + vec2(0.0,3.55)),Title02);\r\n             if(TimeVar > 0.1*VScrollerLength*3.0)col += 1.5*ColorTxt*traceStr(0.5*(vec2(1.0,-1.0)*p + vec2(0.0,3.45)),Title03);\r\n             if(TimeVar > 0.1*VScrollerLength*4.0)col += 1.5*ColorTxt*traceStr(0.5*(vec2(1.0,-1.0)*p + vec2(0.0,3.35)),Title04);\r\n\r\n             \/\/ Tagline\r\n             if(TimeVar > VScrollerLength)col = mix(col,vec4(1.0),traceStr(0.9*(vec2(1.0,-1.0)*p + vec2(0.0,2.335)),Tagline01));\r\n             if(TimeVar > VScrollerLength)col = mix(col,vec4(1.0),traceStr(0.9*(vec2(1.0,-1.0)*p + vec2(0.0,2.295)),Tagline02));\r\n         };\r\n\r\n          \/\/ Explanations...\r\n         if(TimeVar > VScrollerLength)col = mix(col,vec4(0.2,0.2,0.25,1.0),smoothstep(0.005,0.0,abs(p.y - 0.25)-0.025)*clamp(sin(2.0*TimeVar),0.0,1.0));\r\n         if(TimeVar > VScrollerLength)col += vec4(1.0)*traceStr(vec2(1.0,-1.0)*p + vec2(0.0,1.28),Invitation)*clamp(sin(2.0*TimeVar),0.0,1.0);\r\n     };\r\n     \r\n     \/\/ Scene 01\r\n     if( TimeVar>57.0 && TimeVar<69.326 )\r\n     {\r\n         p+=vec2(0.0,-1.0);\r\n         col = Scene01(p,col);\r\n     };\r\n\r\n     \/\/ Scene 02\r\n     if( TimeVar>69.326 && TimeVar<81.849 )\r\n     {\r\n         p+=vec2(0.0,-1.0);\r\n         col = Scene02(2.0*p,col);\r\n         p+=vec2(0.0, 1.0);\r\n         col = mix(col,vec4(0.05,0.05,0.15,1.0),0.75*smoothstep(0.01,0.0,abs(p.x+0.375) - 0.45));\r\n         if( abs(p.x+0.375) - 0.45<0.0 && abs(p.y-1.0)<0.35 )\r\n         {\r\n             p *= 2.0;\r\n             col = mix(col,vec4(1.0),traceStr(0.5*(vec2(1.0,-1.0)*p + vec2(0.75,4.50)),Epita1));\r\n             col = mix(col,vec4(1.0),traceStr(0.5*(vec2(1.0,-1.0)*p + vec2(0.75,4.25)),Epita2));\r\n             col = mix(col,vec4(1.0),traceStr(0.5*(vec2(1.0,-1.0)*p + vec2(0.75,4.00)),Epita3));\r\n             col = mix(col,vec4(1.0,0.1,0.1,1.0),traceStr(0.5*(vec2(1.0,-1.0)*p + vec2(0.75,3.75)),Epita4));\r\n             col = mix(col,vec4(1.0,0.1,0.1,1.0),abs(sin(10.*TimeVar))*traceStr(0.5*(vec2(1.0,-1.0)*p + vec2(0.75,3.5)),Epita5));\r\n             p *= 0.5;\r\n         };\r\n     };\r\n\r\n     \/\/ Scene 03\r\n     if( TimeVar>81.849 && TimeVar<100.609 )\r\n     {\r\n         p+=vec2(0.0,-1.0);\r\n         col = Scene03(10.0*p,col);\r\n     };\r\n\r\n     \/\/ Scene 04\r\n     if( TimeVar>100.609 && TimeVar<135.7 )\r\n     {\r\n         p+=vec2(0.0,-1.0);\r\n         col = Scene04(3.0*p,col);\r\n     };\r\n\r\n      \/\/ The END ! (...the beginning, really !)\r\n      gl_FragColor = clamp(col,0.0,1.0);\r\n}\r\n<\/script>\r\n<!--Interface Buttons-->\r\n\r\n<div id=\"cadre\" style=\"background:#FFFFFF;width:600px;height:720px;align:center;\">\r\n\r\n<!--Rendering surface for the shader...-->\r\n<canvas id = \"gl\" width=\"0\" height=\"0\" style=\"width:600px;height:720px;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:600px;font-size:0;border:none;outline:none;background:#000000;\"><button id=\"but1\" onclick=\"launchShaders();PlaySound();\" style=\"width:450px;height:20px;border:none;outline:none;font-size:15;background:#FFDD11;color:#000000;font-weight:bold;\" onmouseover=\"myOverFunctionBut1()\" onmouseout=\"myOutFunctionBut1()\">RED\u00c9MARRAGE SYNCHRO<\/button><button id=\"but2\" onclick=\"SoundtrackOnOff();\" style=\"width:150px;height:20px;border:none;outline:none;font-size:15;background:#FFDD11;color:#000000;font-weight:bold;\" onmouseover=\"myOverFunctionBut2()\" onmouseout=\"myOutFunctionBut2()\">SON ON\/OFF<\/button><\/div>\r\n<div id=\"help01\" style=\"display:block;background:#000000;color:#FFDD11;width:598px;font-size:15px;border:1px solid;border-color:#FFDD11;\">\r\n&nbsp;&nbsp;CONTROLES :<br>\r\n&nbsp;&nbsp;1-L'animation du nuanceur (\"shader\") d\u00e9marre automatiquement en silence.<br>\r\n&nbsp;&nbsp;2-Cliquez une ou deux fois sur RED\u00c9MARRAGE SYNCHRO pour avoir le son.<br>\r\n&nbsp;&nbsp;3-Coupez le son \u00e0 n'importe quel moment en cliquant sur Son ON\/OFF.<br>\r\n&nbsp;&nbsp;4-Double-cliquez sur l'animation pour passer en plein-\u00e9cran ou revenir en fen\u00eatr\u00e9.<br>\r\n<\/div>\r\n<br>\r\n<div id=\"credits01\" style=\"display:block;background:#000000;color:#CCCCCC;width:592px;font-size:15px;border:4px solid;border-color:#CCCCCC;\">\r\n&nbsp;&nbsp;Concept\/Programmation\/Art\/\u00c9criture : J. Paillottet<br>\r\n&nbsp;&nbsp;Tous Droits R\u00e9serv\u00e9s - Baselunaire.fr - Mars 2026<br>\r\n&nbsp;&nbsp;Musique : <b>\"Volatile Formula\"<\/b> par Kevin MacLeod<br>\r\n&nbsp;&nbsp;Musique sous license CC By 4.0 : https:\/\/creativecommons.org\/licenses\/by\/4.0\/<br>\r\n<\/div>\r\n<audio controls src=\"https:\/\/baselunaire.fr\/blog\/wp-content\/uploads\/2026\/03\/S01E00.mp3\" id=\"odio\" style=\"width:750px;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 = 600.0;\r\nvar PostSizeY = 720.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><strong>EPISODE 00 : CE TEMPLE SUR DRAXACAR&#8230;<\/strong> <em>(15-20 minutes de lecture)<\/em><\/p>\n<p>Date : 500 002 025 CE &#8211; Grande Galaxie du Serval (10 milliards d&rsquo;ann\u00e9es-lumi\u00e8res de la Voie Lact\u00e9e)<\/p>\n<p>Le capitaine \u00e9tait, une fois de plus, \u00e0 moiti\u00e9 saoul ! Mais personne n&rsquo;aurait song\u00e9 \u00e0 lui en vouloir, nous venions juste -gr\u00e2ce \u00e0 lui- d&rsquo;\u00e9chapper \u00e0 l&rsquo;attaque d&rsquo;un autre vaisseau-pirate.<\/p>\n<p>Quelques heures plus t\u00f4t, nous avions mis en panne \u00e0 proximit\u00e9 d&rsquo;un petit ast\u00e9ro\u00efde, esp\u00e9rant effectuer quelques r\u00e9parations d&rsquo;urgence. Et ces fumiers s&rsquo;\u00e9taient point\u00e9s en douce, tous feux \u00e9teints, fr\u00f4lant le r\u00e9golithe, collant \u00e0 la courbure du rocher. Approchant pr\u00e9cis\u00e9ment du c\u00f4t\u00e9 qui avait souffert (et ne pouvait donc pas r\u00e9pliquer). La situation se compliquait encore vu que combattre pr\u00e8s d&rsquo;un ast\u00e9ro\u00efde avec un bouclier endommag\u00e9 revient \u00e0 peu de choses pr\u00e8s \u00e0 balancer une grenade dans un ascenseur&#8230; L&rsquo;ennemi va y rester, pour s\u00fbr, mais vous ne serez pas beaucoup mieux \u00e0 la sortie.<\/p>\n<p>Pas de chance pour ces assassins : Lynx \u00e9tait \u00e0 la vigie, avec le tout nouveau matos achet\u00e9 sur Aronax. Il les vit arriver un instant \u00e0 peine avant l&rsquo;engagement. Le capitaine, lui, tenait la barre et se trouvait en plus d&rsquo;une humeur massacrante. La fa\u00e7on dont ils se cal\u00e8rent \u00e0 notre niveau nous emp\u00eachait de tirer \u00e0 bout portant, pensaient-ils. Ils s&rsquo;en prenaient \u00e0 nous dans un moment de faiblesse. Tactiquement, c&rsquo;\u00e9tait bien jou\u00e9, et -d&rsquo;ailleurs- une trajectoire tellement virtuose qu&rsquo;elle avait probablement \u00e9t\u00e9 ex\u00e9cut\u00e9e par ordinateur.<\/p>\n<p>Contre n&rsquo;importe quel autre b\u00e2timent, cette manoeuvre audacieuse aurait fonctionn\u00e9, mais voil\u00e0&#8230; Ils s&rsquo;en \u00e9taient pris \u00e0 La Griffe. Comble de malchance : juste apr\u00e8s mes am\u00e9liorations massives du contr\u00f4le d&rsquo;attitude !<\/p>\n<p>Lynx siffla un arp\u00e8ge tr\u00e8s particulier. Imm\u00e9diatement, le capitaine bascula le vaisseau sur le flanc b\u00e2bord, vlan, +PI\/2 en roulis, envoyant du m\u00eame coup la moiti\u00e9 de l&rsquo;\u00e9quipage se fracasser la t\u00eate contre les cloisons. Stoppant la barre au degr\u00e9 pr\u00e8s, le capitaine \u00e9crasa le poing sur la commande du canon ventral.<\/p>\n<p>\u00ab\u00a0Sans m\u00eame viser, sans pr\u00e9chauffage des diodes, ni calibrage, comme \u00e7a, sur un coup de t\u00eate ?!\u00a0\u00bb, ai-je pens\u00e9, car j&rsquo;\u00e9tais un jeune con ignorant de ce genre de choses.<\/p>\n<p>Il y eut un flash optique impressionnant et un pic instantan\u00e9 de radiations mortelles. Entre les larmes et les phosph\u00e8nes (j&rsquo;avais pas mes lunettes de combat : \u00ab\u00a0jeune con\u00a0\u00bb, je vous dis), je vis que la tour de commande adverse s&rsquo;\u00e9tait \u00e9vapor\u00e9e, laissant un trou de dix m\u00e8tres dans la ferraille, et que leurs grappins magn\u00e9tiques (chacun d&rsquo;une masse de plusieurs tonnes) avaient d\u00e9j\u00e0 rebondis sur nos champs d\u00e9flecteurs tout juste r\u00e9par\u00e9s, et leur revenaient maintenant dans la gueule \u00e0 une vitesse pr\u00e9occupante. Ils perfor\u00e8rent leur flanc gauche comme s&rsquo;il s&rsquo;agissait de mouchoir en papier.<\/p>\n<p>L&rsquo;\u00e9quipage de La Griffe avait, au sens propre, r\u00e9agi au quart de tour !<\/p>\n<p>\u00ab\u00a0Bande d&rsquo;amateurs !\u00a0\u00bb rugit le capitaine, crini\u00e8re h\u00e9riss\u00e9e. Il s&#8217;empara du micro des batteries de proue, la face barr\u00e9e d&rsquo;un rictus f\u00e9roce :<\/p>\n<p>\u00ab\u00a0Feu \u00e0 volont\u00e9, Chonques.\u00a0\u00bb<\/p>\n<p>Le bloc moteur des assaillants explosa en silence, puis leur r\u00e9servoir principal. Une immense t\u00e2che bleut\u00e9e aux contours flous se r\u00e9pandit autour du vaisseau-pirate, \u00e0 mesure que le cryox sous pression se d\u00e9versait dans le vide en belles draperies accrochant la lumi\u00e8re du soleil (et aussi parfois les faisceaux stroboscopiques de nos lasers de vis\u00e9e). Dans les hublots, le ciel \u00e9tait d\u00e9sormais si bleu qu&rsquo;on se serait cru dans une n\u00e9buleuse&#8230; voire carr\u00e9ment sur Redax par une belle journ\u00e9e d&rsquo;\u00e9t\u00e9 !<\/p>\n<p>Pendant que le Second aboyait les ordres aux \u00e9quipes d&rsquo;abordage, le capitaine contemplait le spectacle, bras crois\u00e9s. Le bleu-oxyg\u00e8ne se refl\u00e9tait dans ses yeux dor\u00e9s, immenses, dont les pupilles se r\u00e9duisaient d\u00e9sormais \u00e0 de simples fentes. Lui non plus n&rsquo;avait pas ses lunettes, elles pendaient autour de son cou. Il avait simplement d\u00fb cligner juste au bon moment, le bougre. Alors seulement, je r\u00e9alisai que cette embuscade avait \u00e9t\u00e9 d\u00e9jou\u00e9e si bri\u00e8vement, que je n&rsquo;avais pas eu le loisir de m&rsquo;inqui\u00e9ter de ma propre mort ! Cinq secondes avaient suffit. J&rsquo;\u00e9tais simultan\u00e9ment \u00e9poustoufl\u00e9, fier d&rsquo;appartenir \u00e0 un tel \u00e9quipage, et terrifi\u00e9 par cette d\u00e9monstration.<\/p>\n<p>D&rsquo;un revers de main, j&rsquo;essuyai de soudaines gouttes de sueur qui, z\u00e9ro-g oblige, partirent \u00e0 la d\u00e9rive.<\/p>\n<p>L&rsquo;un des techs alluma son micro sur la fr\u00e9quence principale : \u00ab\u00a0Ils ont du kzal, ces enfoir\u00e9s ! DES TONNES DE KZAL !\u00a0\u00bb<\/p>\n<p>Des cris enthousiastes mont\u00e8rent du pont d&rsquo;abordage. Le capitaine ricana -l&rsquo;humeur massacrante \u00e9tait pass\u00e9e- puis quitta pr\u00e9cipitamment la passerelle pour rejoindre ses hommes.<\/p>\n<p style=\"text-align: center; font-size: 50px;\">\u2234<\/p>\n<p>Cinq heures plus tard donc, la situation \u00e9tait sous contr\u00f4le, Lynx toujours en vigie, et le capitaine d\u00e9j\u00e0 un peu gris. Le kzal coulait \u00e0 flots. Le poison ambr\u00e9 avait eu raison de plusieurs matelots qui cuvaient d\u00e9sormais sous la table, laissant \u00e9chapper des ronflements de vieux moteurs thermiques. Je m&rsquo;en souviens particuli\u00e8rement bien parce que c&rsquo;est ce jour-l\u00e0 que j&rsquo;ai entendu parler pour la premi\u00e8re fois de <strong>L&rsquo;Ultime Temple De La Science-Fiction<\/strong>.<\/p>\n<p>Tout l&rsquo;\u00e9quipage s&rsquo;\u00e9tait rassembl\u00e9 dans la salle commune, \u00e0 part Lynx et quelques autres qui terminaient leur quart. Nous faisions d&rsquo;autant plus la f\u00eate qu&rsquo;on avait \u00e9chapp\u00e9 au pire sans un seul mort, pour une fois ! Le Grand Capitaine Kiral occupait son tr\u00f4ne en bout de table, plong\u00e9 dans une \u00e9bri\u00e9t\u00e9 r\u00eaveuse, quand Retz et Kardys se sont point\u00e9s avec, clairement, une id\u00e9e derri\u00e8re la t\u00eate. Ils se sont assis comme \u00e7a, sans c\u00e9r\u00e9monie, jouant le privil\u00e8ge de la jeunesse \u00e0 fond les manettes, directement \u00e0 la droite du Cap. Celui-ci, par r\u00e9flexe, posa alors sa lourde main sur la t\u00eate de Retz, griffes \u00e0 demi-sorties : \u00ab\u00a0Un aigle se pose !\u00a0\u00bb d\u00e9clama-t-il d&rsquo;une voix caverneuse. Mais ses yeux p\u00e9tillaient de fac\u00e9tie et d&rsquo;une fiert\u00e9 toute paternelle. Retz, qui avait litt\u00e9ralement grandi sur La Griffe, connaissait bien cette rengaine, et se d\u00e9gagea en riant de l&rsquo;\u00e9norme patte. Aussit\u00f4t Kardys s&rsquo;interposa, se blottissant dans les bras du jeune technicien, d\u00e9fiant ostensiblement Kiral, oreilles inclin\u00e9es, crocs sorties, sur la d\u00e9fensive&#8230; Ralenti par le kzal, le capitaine haussa un sourcil brousailleux comme il faisait habituellement avant de s&rsquo;\u00e9nerver, mais se contenta finalement d&rsquo;un \u00e9clat de rire surpris (et un rien outr\u00e9). Il leva son verre en toisant les deux tourtereaux, et but une ample rasade \u00e0 leur sant\u00e9.<\/p>\n<p>Et puis Kardys a ajout\u00e9 un truc de son air insolent, mais tr\u00e8s bas. Je n&rsquo;ai rien entendu car les canonniers, Chonques en t\u00eate, venaient d&rsquo;entamer une chanson d&rsquo;avant la Conqu\u00eate, et ces gars-l\u00e0 avaient du coffre, vous n&rsquo;imaginez m\u00eame pas.<\/p>\n<p>Je n&rsquo;entendis rien, disais-je. Je vis par contre tr\u00e8s nettement le sourire de Kiral s&rsquo;\u00e9vanouir, ses yeux se fermer, sa mine s&rsquo;assombrir. J&rsquo;en profitai pour m&rsquo;approcher, l&rsquo;assiette \u00e0 la main, pr\u00e9tendant m&rsquo;int\u00e9resser au contenu du plat devant eux, qui d\u00e9bordait de succulentes pi\u00e8ces de viande. Bon, j&rsquo;avais pas trop besoin de pr\u00e9tendre. Je n&rsquo;avais pas mang\u00e9 de prot\u00e9ines depuis deux jours (trop de boulot), alors je salivais un peu, haha. Retz me vit arriver et m&rsquo;accueillit d&rsquo;un air sombre vaguement hostile, Kardys m&rsquo;accorda quant \u00e0 elle un petit regard en coin (genre \u00ab\u00a0Fais pach&rsquo;, l&rsquo;ing\u00e9&#8230;\u00a0\u00bb). Le Capitaine, forc\u00e9ment, quand il rouvrit les yeux, ne put s&#8217;emp\u00eacher de m&rsquo;accueillir d&rsquo;un tonitruant : \u00ab\u00a0GYRO ! Je te cherchais justement, mon gars ! Ce coup de fouet que tu as fil\u00e9 aux moteurs de manoeuvre, s\u00e9rieusement ! Bon Dieu, \u00e7a tournait comme dans du beurre, ou plut\u00f4t comme sur des roulements magn\u00e9tiques ! Comment tu disais, d\u00e9j\u00e0, avant-hier ? &lsquo;fignoler le tenseur d&rsquo;inertie&rsquo;, c&rsquo;est \u00e7a ?! Bah je m&rsquo;\u00e9tais encore jamais accroch\u00e9 si dur aux prises de pieds du poste de pilotage ! Le lascar qui avait planifi\u00e9 l&rsquo;assaut connaissait nos angles-morts, il a d\u00fb nous suivre depuis Aronax -au minimum ! Et ils avaient des calculateurs, les salauds, t&rsquo;as vu \u00e7a ?! Leur barque bougeait avec une vitesse et une pr\u00e9cision d\u00e9moniaques ! Haaaaaaa, mais \u00e7a n&rsquo;a pas suffit. Avec mes r\u00e9flexes et ton astuce technique, on pourrait bien gruger le Destin encore un moment !<\/p>\n<p>Soudain en confiance, je piquai un \u00e9norme morceau de viande directement au couteau, en ajoutant, l&rsquo;air cool :<\/p>\n<p>-Encore une ou deux modifs de ce genre, et on pourra rivaliser avec la flotte des Trois-Lunes !<\/p>\n<p>Le capitaine se releva d&rsquo;un coup, serrant son verre \u00e0 le briser :<\/p>\n<p>-Et on aura le vaisseau le plus redout\u00e9 de toute la galaxie ! Oui ! Bien tourn\u00e9, Gyro !\u00a0\u00bb Il s&rsquo;envoya une nouvelle lamp\u00e9e avant d&rsquo;exploser : \u00ab\u00a0RAHAHA ! PAR LES DIEUX, TRILYON MON VIEUX, SI TU NOUS VOYAIS ! TRENTE ANS TROP TARD ! LA FINE EQUIPE ENFIN ASSEMBL\u00c9E! RAHAHA !\u00a0\u00bb<\/p>\n<p>Il retomba sur son tr\u00f4ne, vida son verre et le claqua sur la table d&rsquo;un air satisfait avec, au fond des yeux, une infinie r\u00e9bellion. Alors, sans transition, il retrouva son s\u00e9rieux, tourna la t\u00eate vers Retz, et lan\u00e7a d&rsquo;un ton conspirateur :<\/p>\n<p>\u00ab\u00a0Bon d&rsquo;accord, les jeunes. Le souvenir m&rsquo;en co\u00fbte mais apr\u00e8s tout&#8230; Pourquoi pas. Je vous en dois une. Vous vous \u00eates bien battus ces derniers mois. Et pourtant \u00e7a n&rsquo;a pas \u00e9t\u00e9 facile, surtout la semaine pass\u00e9e. Donc. Ce que je sais \u00e0 propos de&#8230; vous savez quoi&#8230; est extr\u00eamement lacunaire. Limit\u00e9. Impr\u00e9cis. Des on-dit. En fait (il jeta le menton dans ma direction) \u00e7a ferait probablement hurler notre monsieur Gyro-La-Science ici pr\u00e9sent. Oui mais voil\u00e0&#8230;<\/p>\n<p>J&rsquo;ai voyag\u00e9. Loin. Longtemps. Je connais la Galaxie comme personne. Mieux : j&rsquo;\u00e9tais l\u00e0 quand Trilyon a p\u00e9t\u00e9 les plombs, an\u00e9anti par le d\u00e9sespoir, puis fou de rage, et qu&rsquo;il a invent\u00e9 le propulseur hyperspatial en une seule nuit, mille milliards de mille quasars ! Et j&rsquo;\u00e9tais l\u00e0 aussi, l\u00e0 aux premi\u00e8res loges, quand chang\u00e9 \u00e0 jamais par la port\u00e9e de son invention, il a lanc\u00e9 l&rsquo;Exploration Galactique le mois suivant ! Je n&rsquo;avais pas encore La Griffe, \u00e0 ce moment-l\u00e0. Je faisais partie de la Premi\u00e8re Vague, \u00e0 bord du Rugissant, une fr\u00e9gate militaire vol\u00e9e, sous les ordres du terrible Amiral de Jade ! Ah \u00e7a, je peux vous dire qu&rsquo;avec lui, \u00e7a filait droit !\u00a0\u00bb<\/p>\n<p>Retz et Kardys fixaient le vieil homme, remplis d&rsquo;une admiration sacr\u00e9e \u00e0 l&rsquo;\u00e9vocation de cette \u00e8re mythique. Je l&rsquo;appris de Retz beaucoup plus tard (quand nos relations devinrent plus amicales), mais ce soir-l\u00e0, ils avaient tent\u00e9 leur chance sans trop y croire, pourtant \u00e0 leur grande surprise, le capitaine avait c\u00ead\u00e9.<\/p>\n<p>Plusieurs membres d&rsquo;\u00e9quipage, flairant un long r\u00e9cit, s&rsquo;approch\u00e8rent les oreilles hautes pour ne pas en manquer une miette.<\/p>\n<p>\u00ab\u00a0Il faut que vous compreniez que ce n&rsquo;est pas un cadeau que je vous fais. C&rsquo;est plus un transfert de responsabilit\u00e9s. De bouche de pirate \u00e0 oreilles de pirates. Je ne vous r\u00e9v\u00e8le qu&rsquo;un des innombrables secrets que nous, les Primes Explorateurs, les Hommes Libres, avons d\u00e9couverts sur des centaines de mondes, pendant 30 ans, alors que nous poussions toujours plus loin \u00e0 travers la Galaxie du Yot-Redash, avec toujours, toujours, l&rsquo;Arm\u00e9e des Trois-Lunes sur les talons ! 700 b\u00e2timents de guerre soutenus par tout l&rsquo;Empire, et traquant sans rel\u00e2che 3000 vaisseaux civils plus petits et moins bien arm\u00e9s, certes, mais consid\u00e9rablement plus d\u00e9termin\u00e9s. Et surtout : anim\u00e9s d&rsquo;une v\u00e9ritable vision !<\/p>\n<p>-La Deuxi\u00e8me Guerre Galactique ! murmura Kardys avec ferveur, sans m\u00eame s&rsquo;en apercevoir.<\/p>\n<p>Kiral accueillit la remarque d&rsquo;un reniflement sceptique :<\/p>\n<p>-Oui, enfin&#8230; Ce ne fut vraiment la &lsquo;Seconde Guerre Galactique&rsquo; que bien plus tard, lorsque nous appr\u00eemes, horrifi\u00e9s, comment l&rsquo;Empire avait discr\u00e8tement \u00e9radiqu\u00e9 cette pauvre petite civilisation alien pacifique non loin de Lyagatyr V ! Au d\u00e9but, nous n&rsquo;avions rien ! RIEN ! Pas de bases-arri\u00e8re, pas d&rsquo;argent, pas de colonies, pas de mondes, z\u00e9ro, bulle, n\u00e9ant ! Juste nos vaisseaux, vol\u00e9s pour la plupart ! Nous ignorions l&rsquo;\u00e9tendue des crimes de l&rsquo;Empire. Cette &lsquo;guerre galactique&rsquo; ne nous semblait \u00eatre qu&rsquo;un genre de guerre civile. Une affaire int\u00e9rieure. Nous n&rsquo;avions m\u00eame pas encore rencontr\u00e9 l&rsquo;Essaim de Feu ! Pour vous dire l&rsquo;\u00e9tendue de notre ignorance !<\/p>\n<p>Enfin bref&#8230; J&rsquo;ignore comment vous avez d\u00e9couvert l&rsquo;existence de <strong>L&rsquo;Ultime Temple De La Science-Fiction<\/strong>. L&rsquo;Information a &#8230; (il agita vaguement la main) des propri\u00e9t\u00e9s \u00e9tranges. Elle \u00e9chappe au confinement, elle se d\u00e9place, elle diffuse&#8230; Elle aurait m\u00eame un poids ! Hein, Gyro, j&rsquo;raconte des conneries, peut-\u00eatre ?!<\/p>\n<p>-Les FAITS, rien que les FAITS, Cap ! dis-je, trop fatigu\u00e9 (et affam\u00e9) pour me lancer dans le d\u00e9bat.<\/p>\n<p>-Mais si je venais \u00e0 mourir un jour ou l&rsquo;autre, le secret ne peut pas se perdre. Quel g\u00e2chis ce serait !\u00a0\u00bb<\/p>\n<p>Il parcourut la table du regard. Les rigolades et les chansons continuaient \u00e0 l&rsquo;autre bout de la salle, mais de ce c\u00f4t\u00e9, nous \u00e9tions une bonne quinzaine riv\u00e9s \u00e0 nos si\u00e8ges. Presque un tiers de l&rsquo;\u00e9quipage, un v\u00e9ritable auditoire !<\/p>\n<p>\u00ab\u00a0L&rsquo;Univers est vieux, vous savez.\u00a0\u00bb reprit Kiral. \u00ab\u00a0Tellement vieux. Plein \u00e0 craquer de mauvais souvenirs. Et de pi\u00e8ges mortels. Le leg maudit de nos pr\u00e9d\u00e9cesseurs. Le temple que vous cherchez n&rsquo;est pas une l\u00e9gende, il fait partie de cet h\u00e9ritage. Par contre, je dois vous avertir qu&rsquo;il ne se trouve pas du tout dans le coin&#8230; mais sur Draxacar !\u00a0\u00bb Il grogna : \u00ab\u00a0Ah, \u00e7a ne vous dit probablement rien du tout&#8230; C&rsquo;est une plan\u00e8te non r\u00e9pertori\u00e9e situ\u00e9e aux confins de la galaxie \u00e0&#8230; mmmmmmh&#8230; disons presque 70 000 ann\u00e9es-lumi\u00e8re !\u00a0\u00bb<\/p>\n<p>L&rsquo;assistance, abasourdie par le chiffre, se mit \u00e0 s&rsquo;agiter et \u00e0 bruire. Nous calculions tous combien de mois de trajet cela repr\u00e9sentait, avec des hypermoteurs surpuissants tels que ceux de La Griffe.<\/p>\n<p>\u00ab\u00a0&#8230;mouais, 70 000, c&rsquo;est \u00e0 peu pr\u00e8s cela.\u00a0\u00bb, dit le capitaine qui faisait des efforts visibles pour se souvenir, front pliss\u00e9, sourcils en bataille. Il pointa son verre en direction du public, ses l\u00e8vres prenant un pli dubitatif : \u00ab\u00a0Du moins, si l&rsquo;on se fie \u00e0 ma vieille caboche&#8230; et aux Chroniques N\u00e9bulaires !\u00a0\u00bb<\/p>\n<p>Je n&rsquo;avais jamais entendu parler de ces Chroniques. Et il \u00e9tait hors de question d&rsquo;interrompre le Capitaine Kiral, bien s\u00fbr.<\/p>\n<p>\u00ab\u00a0Sur Draxacar se trouve une jungle similaire, par bien des aspects, \u00e0 celle de l&rsquo;h\u00e9misph\u00e8re nord de Redax : immense, dangereuse, sem\u00e9e de d\u00e9combres remontant \u00e0 la nuit des temps, hant\u00e9e de folles cr\u00e9atures et d&rsquo;\u00e2mes perdues. Au sein de cette for\u00eat s&rsquo;ouvre &lsquo;La Balafre&rsquo; : une vall\u00e9e aride pleine d&rsquo;une poussi\u00e8re rouge\u00e2tre, presque d\u00e9pourvue de vie. Ce lieu myst\u00e9rieux abriterait, dit-on, un temple d&rsquo;une incroyable puissance. Bien \u00e9videmment, vous ne pourrez pas y acc\u00e9der directement depuis l&rsquo;orbite, en descendant dans une capsule ou en navette.\u00a0\u00bb Il baissa la voix. \u00ab\u00a0Noooooon, ce serait trop simple ! Pour s&rsquo;y rendre, vous devrez avancer \u00e0 l&rsquo;ancienne, au niveau du sol, sous des frondaisons pleines de lianes \u00e9trangleuses, d&rsquo;arbres neurotoxiques, de buissons-harpons et de foug\u00e8res carnivores. Tout cela au milieu de fourr\u00e9s obscurs emplis de fauves, de parasites, d&rsquo;insectes extraterrestres et de b\u00eates immondes plus inf\u00e2mes les unes que les autres !<\/p>\n<p>Il vous faudra progresser \u00e0 pied dans cet enfer v\u00e9g\u00e9tal ! Car nous autres Redaxiens, voyez-vous, sommes des cr\u00e9atures sous-\u00e9volu\u00e9es, et la technologie des cr\u00e9atures sous-\u00e9volu\u00e9es ne fonctionne pas dans cette r\u00e9gion de l&rsquo;Univers. Non, pas m\u00eame un bon vieux pistolaser ! Les machines volantes et les v\u00e9hicules terrestres ne vous seront d&rsquo;aucun secours, ils ne d\u00e9marreront pas. Dans cette r\u00e9gion de dimensionalit\u00e9 sup\u00e9rieure, les communicateurs s&rsquo;\u00e9teignent, les batterie se vident en quelques secondes. Y-compris celles \u00e0 pastilles nucl\u00e9aires, et d&rsquo;ailleurs essayez de m&rsquo;expliquer celle-l\u00e0 pour voir ! (Il me jeta un regard de d\u00e9fi) Non, il faudra vous y faire ! Une lame affut\u00e9e, vos dents, vos griffes&#8230; et la sombre blague collo\u00efdale qui vous tient lieu de cerveau : c&rsquo;est tout ce dont vous disposerez dans cette qu\u00eate !<\/p>\n<p>L&rsquo;itin\u00e9raire le plus simple part du Grand Lac \u00c9quatorial pour remonter plusieurs centaines de kilom\u00e8tres au Nord. Si vos forces ne vous abandonnent pas en chemin, apr\u00e8s bien des difficult\u00e9s, vous d\u00e9couvrirez les ruines de Sandara, cit\u00e9 de pierre baignant dans un cr\u00e9puscule \u00e9ternel. Son architecture \u00e9trange couvre une vaste superficie, et offre d&rsquo;innombrables tani\u00e8res \u00e0 une esp\u00e8ce de volatile blanc carnivore d&rsquo;une envergure massive, des monstres ail\u00e9s blafards aux yeux rouge\u00e2tres, dont les appels cruels ricochent parfois des heures au-dessus de la ville, entre les immeubles, donjons et tours fortifi\u00e9es. La jungle leur fournit des proies dont ils se d\u00e9lectent en d&rsquo;ignobles banquets !<\/p>\n<p>Liotrao, soleil rouge de ce syst\u00e8me, contemple ces odieuses bacchanales depuis des millions d&rsquo;ann\u00e9es, peut-\u00eatre des milliards. La vue de tout ce sang lui plait tellement qu&rsquo;il ne se couche jamais !<\/p>\n<p>Car Draxacar est une plan\u00e8te oculaire ! Elle pr\u00e9sente toujours le m\u00eame c\u00f4t\u00e9 \u00e0 son \u00e9toile (autrement dit, sa rotation est synchrone). \u00ab\u00a0Partout et nulle part, le Temps n&rsquo;existe pas sur Draxacar !\u00a0\u00bb dit le proverbe. La jungle s&rsquo;enroule autour d&rsquo;elle, le long du terminateur, telle un mal\u00e9fique serpent vert \u00e9meraude, vivante barri\u00e8re entre l&rsquo;h\u00e9misph\u00e8re diurne, suffoquant, et la zone nocturne (o\u00f9 il g\u00e8le \u00e0 pierre fendre !).<\/p>\n<p>C&rsquo;est au Nord-Ouest de Sandara que se trouve la prochaine \u00e9tape du trajet : le Grand Bassin de Xool. Suivez sa plage dor\u00e9e vers le Nord, d\u00e9passez le D\u00f4me sous son bouclier miroitant, et vous devriez arriver \u00e0 la Piscine des Cinq D\u00e9esses, une anse ombrag\u00e9e fort accueillante. En ce lieu enchanteur baign\u00e9 d&rsquo;une lumi\u00e8re matinale, le fleuve Jdar se jette en cinq cascades dans un bassin peu profond. Empruntez l&rsquo;escalier moussu situ\u00e9 sous la falaise, \u00e0 droite de la plus haute chute. Une fois au sommet, suivez la rive quelques dizaines d&rsquo;heures de plus, ce qui devrait vous amener aux colonnes du Grand M\u00e9calithe.\u00a0\u00bb<\/p>\n<p>Chonques s&rsquo;approcha, d\u00e9gustant un \u00e9norme gigot, l&rsquo;\u00e9ternel bonnet \u00e0 t\u00eate de mort couvrant \u00e0 grand peine ses longs cheveux sales. De sa voix un rien sarcastique, il l\u00e2cha : \u00ab\u00a0On n&rsquo;en est qu&rsquo;au Grand M\u00e9calithe ?! Houlaaaaaaaa&#8230; !\u00a0\u00bb et repartit aussit\u00f4t dans la direction oppos\u00e9e, s&rsquo;envoyant une lamp\u00e9e de kzal pour faire passer la viande. Il \u00e9tait, je crois, le seul \u00e0 pouvoir se permettre ce genre d&rsquo;interruptions sans se faire clouer \u00e0 la cloison, et ne s&rsquo;en privait jamais.<\/p>\n<div id=\"attachment_1028\" style=\"width: 243px\" class=\"wp-caption alignright\"><a href=\"https:\/\/baselunaire.fr\/blog\/wp-content\/uploads\/2021\/04\/tm_01.gif\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-1028\" class=\"size-medium wp-image-1028\" src=\"https:\/\/baselunaire.fr\/blog\/wp-content\/uploads\/2021\/04\/tm_01-233x300.gif\" alt=\"\" width=\"233\" height=\"300\" \/><\/a><p id=\"caption-attachment-1028\" class=\"wp-caption-text\">Le Torii Maglev sur Draxacar.<\/p><\/div>\n<p>-Le Grand M\u00e9calithe est un portail cyclop\u00e9en \u00e0 l&rsquo;entr\u00e9e du domaine : deux piliers dress\u00e9s, surplomb\u00e9s d&rsquo;une plaque horizontale en \u00e9tat de l\u00e9vitation. Comme le Torii Maglev, plus au Sud, si vous voulez, mais en beaucoup, BEAUCOUP plus grand.<\/p>\n<p>Les Saintes \u00c9critures pr\u00e9tendent que c&rsquo;est \u00e0 cet instant que tout se joue&#8230; En s&rsquo;avan\u00e7ant entre ces deux ob\u00e9lisques, sous l&rsquo;immense dalle de pierre suspendue \u00e0 cent m\u00e8tres de hauteur, vous p\u00e9n\u00e9trez dans un lieu consacr\u00e9.<\/p>\n<p>On ne sait pas vraiment si une porte appara\u00eet de fa\u00e7on tangible&#8230; Si des g\u00e9od\u00e9siques, jusqu&rsquo;alors enchev\u00eatr\u00e9es, s&rsquo;\u00e9cartent soudain, d\u00e9chirant une faille practicable \u00e0 travers l&rsquo;espace-temps&#8230; Ou s&rsquo;il s&rsquo;agit juste de folklore, d&rsquo;un simple rite, du pur symbolisme. Quoiqu&rsquo;il en soit, vous devrez de nouveau montrer votre d\u00e9termination en remontant le Jdar toujours plus loin. Dans ce nouveau secteur, la rivi\u00e8re est non seulement profonde, mais agit\u00e9e de courants tra\u00eetres et infest\u00e9e de poissons cuirass\u00e9s. Aussi n&rsquo;essayez pas d&rsquo;y naviguer sur un radeau de fortune, ne vous y baignez pas, et n&rsquo;y remplissez pas non plus vos gourdes. Mieux vaut s&rsquo;approvisionner dans les nombreux confluents, \u00e0 bonne distance de la jonction.<\/p>\n<p>Tout au long de ce parcours, des choses \u00e9tranges ne manqueront pas de se produire : visions de mondes inconnus, aper\u00e7us de cit\u00e9s fantomatiques, sons myst\u00e9rieux, mirages. Et parfois, cach\u00e9es dans les ombres de la jungle, des ombres plus noires et terrifiantes encore. Certaines vous parleront ! Ne les \u00e9coutez surtout pas. Dans les airs, vous distinguerez peut-\u00eatre des cr\u00e9atures ou des v\u00e9hicules aux profils d\u00e9concertants. Des senteurs nouvelles et surprenantes pourront assaillir vos narines. Restez sur le qui-vive. Gardez votre sang-froid en toutes circonstances. Les risques physiques sont r\u00e9els, mais votre \u00e2me, plus que tout, sera constamment mise \u00e0 l&rsquo;\u00e9preuve.<\/p>\n<p>L&rsquo;\u00e9tape finale, c&rsquo;est le Canyon Des Fous : une fente \u00e9troite plong\u00e9e dans la p\u00e9nombre, huit kilom\u00e8tres d&rsquo;un corridor coupant \u00e0 travers une barri\u00e8re de contreforts rocheux (&#8230;le rebord Sud de la fameuse Balafre mentionn\u00e9e plus haut). Il est certes possible d&#8217;emprunter ce chemin sans y laisser la vie mais&#8230; prenez garde. Des choses vivent dans ce passage, et elles n&rsquo;aiment pas \u00eatre d\u00e9rang\u00e9es. Oh, et ne contemplez pas trop longtemps les parois. S&rsquo;y trouvent grav\u00e9s des symboles g\u00e9om\u00e9triques d&rsquo;une telle complexit\u00e9 que vos esprits sombreraient dans la folie. Certains d&rsquo;entre vous connaissent peut-\u00eatre le concept de la &lsquo;Fugue Fractale&rsquo;, cette m\u00e9thode employ\u00e9e par l&rsquo;Arm\u00e9e des Trois-Lunes comme torture psychologique. Glatz, Styx, le vieux Trylion, et beaucoup, beaucoup d&rsquo;autres innocents y ont laiss\u00e9 leur sant\u00e9 mentale. H\u00e9 bien, les fresques du Canyon sont probablement une saloperie dans le genre&#8230; Multipli\u00e9e par dix mille.<\/p>\n<p>Et plus vous \u00eates matheux, plus vous risquez de voir l&rsquo;effet s&rsquo;intensifier !\u00a0\u00bb Dit-il en me lan\u00e7ant un regard d&rsquo;avertissement.<\/p>\n<p>\u00ab\u00a0Franchissez cet obstacle, cependant, et vous d\u00e9boucherez enfin dans la vall\u00e9e aride : La Balafre. L\u00e0, isol\u00e9, nimb\u00e9 de lumi\u00e8re, drap\u00e9 de poussi\u00e8re, se dresse le mythe, le r\u00eave. La l\u00e9gende. <strong>L&rsquo;Ultime Temple de la Science-Fiction !<\/strong><\/p>\n<p>Encadr\u00e9 de pyl\u00f4nes grima\u00e7ants, il ressemble \u00e0 un palais Redaxien de la Seconde Dynastie, et est surmont\u00e9 d&rsquo;une hypersph\u00e8re (&#8230;que certains nomment \u00e9galement <em><strong>&lsquo;G\u00e9odyss\u00e9e&rsquo;<\/strong><\/em>, ou <em><strong>&lsquo;Bulle Technikor&rsquo;<\/strong><\/em>, bien que le sens de ces mots soit perdu depuis la nuit des temps).<\/p>\n<p>La prudence sugg\u00e8re d&rsquo;\u00e9tablir un bivouac sur les hauteurs environnantes, et d&rsquo;attendre. Une boule m\u00e9tallique volante a \u00e9t\u00e9 signal\u00e9e par plusieurs visiteurs au cours des mill\u00e9naires. N&rsquo;en tenez pas compte. Elle ne fait probablement que passer&#8230; On ignore s&rsquo;il s&rsquo;agit d&rsquo;un gardien du lieu ou&#8230; d&rsquo;autre chose.\u00a0\u00bb<\/p>\n<p>Le capitaine nous observa un instant, leva les mains en signe d&rsquo;ignorance.<\/p>\n<p>\u00ab\u00a0H\u00e9, qu&rsquo;est-ce que vous croyez ? Nous ne sommes pas les seules cr\u00e9atures intelligentes \u00e0 nous passionner pour ce lieu&#8230;<\/p>\n<p>Bref. Posez-vous tranquillement sur le sable. Patientez.<\/p>\n<p>Selon l&rsquo;humeur divine, peut-\u00eatre verrez-vous alors appara\u00eetre un homme sans \u00e2ge, avec une crini\u00e8re poivre-et-sel, et un regard triste. Ou alors sa compagne, une blonde splendide qui sourit plus volontiers, rit m\u00eame parfois, mais dont l&rsquo;attitude demeure subtilement mena\u00e7ante.<\/p>\n<p>L&rsquo;homme pr\u00e9sente des caract\u00e9ristiques physiques \u00e9tonnantes : ses oreilles sont fixes, arrondies, et situ\u00e9es sur les c\u00f4t\u00e9s de son cr\u00e2ne ! La femme a des oreilles plus normales, quoique tr\u00e8s allong\u00e9es. Elles sont aussi sur les c\u00f4t\u00e9s de son cr\u00e2ne ! Et ses griffes, color\u00e9es, ne sont pas r\u00e9tractiles !\u00a0\u00bb<\/p>\n<p>Des murmures incr\u00e9dules parcoururent de nouveau l&rsquo;assistance. Le capitaine se moquait-il de nous en rajoutant de faux d\u00e9tails \u00e0 plaisir ? Cela ne m&rsquo;aurait pas surpris.<\/p>\n<p>\u00ab\u00a0Ces deux \u00eatres sont, avec l&rsquo;Ultime Temple, tout ce qui demeure de l&rsquo;Humanit\u00e9. Une esp\u00e8ce n\u00e9e il y a bien longtemps, autour d&rsquo;une \u00e9toile jaune situ\u00e9e dans une galaxie lointaine. Nul ne sait si ces deux-l\u00e0 sont vivants, ou bien morts. Des fant\u00f4mes ou des dieux. Des d\u00e9mons ou nos anges-gardiens. Dans le doute, je vous invite \u00e0 user d&rsquo;un registre formel lorsque vous leur adresserez la parole. Ils examineront vos motivations, votre personnalit\u00e9. Et s&rsquo;ils vous en jugent dignes, ils vous prodigueront alors des conseils&#8230; et aussi quelques avertissements qu&rsquo;il faudra \u00e9couter tr\u00e8s attentivement !<\/p>\n<p>Car votre voyage ne fait que commencer, vous le savez ! L&rsquo;Ultime Temple rec\u00e8le en effet de nombreux passages secrets, d&rsquo;innombrables salles remplies de portes, de colonnades, d&rsquo;arcades ouvrant sur les ab\u00eemes du Temps et de l&rsquo;Espace. Des ouvertures b\u00e9antes sur d&rsquo;autres r\u00e9alit\u00e9s aussi dangereuses qu&rsquo;\u00e9blouissantes, aussi fantastiques que funestes ! Certaines sont absolument horrifiques. D&rsquo;autres encore, paradisiaques.\u00a0\u00bb<\/p>\n<p>Le Capitaine changea d&rsquo;humeur, expira profond\u00e9ment. Un d\u00e9tail semblait le tracasser.<\/p>\n<p>\u00ab\u00a0En v\u00e9rit\u00e9, je ne saurais vous dire si cet endroit est un miracle, ou s&rsquo;il est frapp\u00e9 d&rsquo;une sombre mal\u00e9diction&#8230; Mais&#8230; Quand vous entrerez dans <strong>L&rsquo;Ultime Temple de la Science-Fiction<\/strong>, jeunes fous avides d&rsquo;aventures, quand vous vous enfoncerez dans cet amoncellement de pierres disjointes ou fracass\u00e9es, quand vous traverserez cet improbable d\u00e9dale de salles, de d\u00f4mes, d&rsquo;hypostyles, de couloirs, et de portails aux linteaux imposants, quand l&rsquo;antique magie des mots, du code, des images et du son vous fera perdre la t\u00eate, prenez le temps d&rsquo;appr\u00e9cier, d&rsquo;analyser, de r\u00e9fl\u00e9chir.<\/p>\n<p>Profitez de ces exp\u00e9riences offertes \u00e0 l&rsquo;Univers par une civilisation disparue. Contemplez la folie des humains ! Observez leurs errements, leurs instants de grandeur, leurs triomphes \u00e9poustouflants, leurs moments de bassesse les plus abjects, ainsi que leurs constantes r\u00e9demptions. Ils furent une grande, une terrible race ! Ne les jugez point trop h\u00e2tivement. Et retirez-en&#8230;\u00a0\u00bb Le capitaine ouvrit la bouche, la referma&#8230; Nouveau soupir : \u00ab\u00a0De mon point de vue, ce Temple n&rsquo;est pas l\u00e0 pour nous enseigner quoique ce soit de pr\u00e9cis, mais plut\u00f4t pour induire. Alors, retirez-en ce que VOUS pourrez. Pour nous revenir chang\u00e9s -probablement-, meilleurs -peut-\u00eatre-, grandis -si possible ! Forts d&rsquo;un enseignement qui n&rsquo;appartient qu&rsquo;\u00e0 vous&#8230; mais qu&rsquo;il ne tient qu&rsquo;\u00e0 vous de partager.\u00a0\u00bb<\/p>\n<p>Un silence, puis :<\/p>\n<p>\u00ab\u00a0Notre avenir, en tant qu&rsquo;esp\u00e8ce, pourrait bien en d\u00e9pendre.\u00a0\u00bb<\/p>\n<p>Kardys se cramponnait au bras de Retz de toute ses griffes. Lui ne sentait rien, tout absorb\u00e9 qu&rsquo;il \u00e9tait par le r\u00e9cit du Capitaine. Je voyais les id\u00e9es tournoyer dans la t\u00eate du jeune matelot. Constatant que la lueur poss\u00e9d\u00e9e s&rsquo;\u00e9teignait rapidement dans les yeux de Kiral, Retz tenta une derni\u00e8re relance, comme on souffle sur une braise mourante :<\/p>\n<p>\u00ab\u00a0Cap, ce temple&#8230; Vous&#8230; Vous y \u00eates entr\u00e9, n&rsquo;est-ce pas ?!\u00a0\u00bb<\/p>\n<p>Le Capitaine parut soudain reprendre conscience. Il regarda Retz, Kardys, puis l&rsquo;assembl\u00e9e. Son expression redevint lucide. Terriblement s\u00e9rieuse. Presque&#8230; inqui\u00e8te.<\/p>\n<p>\u00ab\u00a0Si j&rsquo;y suis&#8230; ?!\u00a0\u00bb<\/p>\n<p>Il marmonna dans sa barbe d&rsquo;une voix grave, avant de reprendre plus haut, plein d&rsquo;amertume :<\/p>\n<p>\u00ab\u00a0La v\u00e9ritable question, celle qui me hante depuis toutes ces ann\u00e9es, serait plut\u00f4t&#8230; En suis-je jamais <strong><i>sorti<\/i><\/strong> !?\u00a0\u00bb<\/p>\n<p>\u00c0 cet instant pr\u00e9cis, un tonnerre de cris enthousiastes et de hurlements joyeux nous fit tous sursauter ! Chonques et Lynx s&rsquo;\u00e9taient approch\u00e9s, bras dessus, bras dessous, pleins comme des outres, et levaient le poing en criant : KIRAL ! KIRAL ! Tout le monde \u00e9clata de rire et se mit \u00e0 parler en m\u00eame temps, ce qui explique que personne -personne hormis moi, Retz et Kardys- n&rsquo;entendit les derniers propos du Capitaine. Prononc\u00e9s tout bas, ces mots ressemblaient \u00e0 un genre d&rsquo;atroce r\u00e9alisation pleine de r\u00e9ticence : \u00ab\u00a0Je&#8230; Je ne&#8230; me souviens&#8230; plus&#8230;\u00a0\u00bb<br \/>\nDans un grand froissement de cape, Kiral se dressa de toute sa hauteur, s&#8217;empara d&rsquo;une bouteille de kzal, salua la tabl\u00e9e d&rsquo;un geste machinal, un rien th\u00e9\u00e2tral, et prit la direction de ses appartements.<\/p>\n<p>Ce soir-l\u00e0, comme tout le monde, je pris la chose \u00e0 la l\u00e9g\u00e8re, comme un num\u00e9ro de music-hall. Un r\u00e9cit d&rsquo;aventures avec une pirouette finale. Des contes \u00e0 dormir debout, des l\u00e9gendes de pirates, comme ces micro-arnaques qu&rsquo;ils improvisaient parfois, Lynx, Chonques et lui, dans les bars mal fr\u00e9quent\u00e9s des syst\u00e8mes recul\u00e9s.<\/p>\n<p style=\"text-align: center; font-size: 50px;\">\u2234<\/p>\n<p>Trente ans plus tard, en revanche, je n&rsquo;en \u00e9tais plus si s\u00fbr. Ces derniers mots murmur\u00e9s sonnaient diff\u00e9remment. Ils prenaient un poids nouveau, une cuisante v\u00e9racit\u00e9, s&rsquo;impr\u00e9gnaient m\u00eame d&rsquo;une ironie funeste alors que, submerg\u00e9 par les hallucinations, je progressais seul, bless\u00e9, assoiff\u00e9, perdu, \u00e0 demi-mort, \u00e0 travers les couloirs d\u00e9ments de<\/p>\n<p style=\"text-align: center;\"><button id=\"but3\" style=\"width: 500px; height: 30px; border: none; outline: none; font-size: 20px; background: #FFDD11; color: #000000; font-weight: bold;\" onclick=\"launchShaders();PlaySound();\"  onmouseover=\"myOverFunctionBut3()\" onmouseout=\"myOutFunctionBut3()\"><strong>L&rsquo;ULTIME TEMPLE DE LA SCIENCE-FICTION !<\/strong><\/button><\/p>\n<p style=\"text-align: center;height:50px;\">&nbsp;<\/p>\n<p style=\"text-align: center;font-size: 20px;\">F&nbsp;&nbsp;I&nbsp;&nbsp;N<\/p>\n<p style=\"text-align: center;height:50px;\">&nbsp;<\/p>\n<p style=\"text-align: center;\">\n<script type='text\/javascript' src='https:\/\/storage.ko-fi.com\/cdn\/widget\/Widget_2.js'><\/script><script type='text\/javascript'>kofiwidget2.init('Support me on Ko-fi', '#72a4f2', 'V7V31LRRH8');kofiwidget2.draw();<\/script>\n<\/p>\n<p style=\"text-align: center;height:50px;\">&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Note de l&rsquo;auteur : Cet \u00e9pisode z\u00e9ro n&rsquo;\u00e9tait pas du tout pr\u00e9vu ! Initialement, je voulais juste animer un g\u00e9n\u00e9rique genre Quatri\u00e8me Dimension (&#8230;avec un peu plus d&rsquo;impact et mon propre style, en plus je n&rsquo;avais pas le budget pour &hellip; <a href=\"https:\/\/baselunaire.fr\/?page_id=5684\">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":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-5684","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/baselunaire.fr\/index.php?rest_route=\/wp\/v2\/pages\/5684","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=5684"}],"version-history":[{"count":24,"href":"https:\/\/baselunaire.fr\/index.php?rest_route=\/wp\/v2\/pages\/5684\/revisions"}],"predecessor-version":[{"id":6015,"href":"https:\/\/baselunaire.fr\/index.php?rest_route=\/wp\/v2\/pages\/5684\/revisions\/6015"}],"wp:attachment":[{"href":"https:\/\/baselunaire.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5684"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}