<!-- RUBY-BACKUP · part 509 -->
Side, fog:false}));
    am.position.set(-20+ai*20, 48+ai*7, -60+ai*30);
    am.rotation.y = 0.3*ai - 0.3;
    am.rotation.z = 0.08*ai;
    am.visible = false;
    am.userData.base = ag.attributes.position.array.slice();
    am.userData.ph = ai*2.1;
    skyGrp.add(am); auroras.push(am);
  }
  /* lightning — the storm's teeth */
  var bgeo = new T.BufferGeometry();
  bgeo.setAttribute('position', new T.BufferAttribute(new Float32Array(16*3), 3));
  boltLine = new T.Line(bgeo, new T.LineBasicMaterial({color:0xffffff, transparent:true, opacity:0.95, blending:T.AdditiveBlending, fog:false}));
  boltLine.visible = false; boltLine.frustumCulled = false; skyGrp.add(boltLine);
  var brgeo = new T.BufferGeometry();
  brgeo.setAttribute('position', new T.BufferAttribute(new Float32Array(10*3), 3));
  boltBranch = new T.Line(brgeo, new T.LineBasicMaterial({color:0xffffff, transparent:true, opacity:0.8, blending:T.AdditiveBlending, fog:false}));
  boltBranch.visible = false; boltBranch.frustumCulled = false; skyGrp.add(boltBranch);
  boltLight = new T.PointLight(0xaaccff, 0, 130);
  boltLight.position.set(0, 20, 0); skyGrp.add(boltLight);
  boltGlow = new T.Mesh(new T.BufferGeometry(), new T.MeshBasicMaterial({color:0x3a7dff, transparent:true, opacity:0.45, blending:T.AdditiveBlending, depthWrite:false, fog:false}));
  boltGlow.visible = false; boltGlow.frustumCulled = false; skyGrp.add(boltGlow);
  /* dawn — his island dawn: purple crown, golden horizon, sun rays, dark cloud band */
  dawnGrp = new T.Group();
  var dg = new T.SphereGeometry(280, 24, 16);
  var dpos = dg.attributes.position, dcol = [], di;
  var dTop = new T.Color(0x1e1840), dMid = new T.Color(0x5a4a6e), dHor = new T.Color(0xe8a83e);
  for(di=0; di<dpos.count; di++){
    var dy = dpos.getY(di)/280, dc;
    if(dy > 0.25){ dc = dMid.clone().lerp(dTop, Math.min(1,(dy-0.25)/0.75)); }
    else { dc = dHor.clone().lerp(dMid, Math.max(0,(dy+1)/1.25)); }
    dcol.push(dc.r, dc.g, dc.b);
  }
  dg.setAttribute('color', new T.BufferAttribute(new Float32Array(dcol), 3));
  dawnGrp.add(new T.Mesh(dg, new T.MeshBasicMaterial({vertexColors:true, side:T.BackSide, fog:false, depthWrite:false})));
  var sun = new T.Mesh(new T.CircleGeometry(16, 24), new T.MeshBasicMaterial({color:0xffe9b8, transparent:true, opacity:0.95, fog:false, blending:T.AdditiveBlending, depthWrite:false}));
  sun.position.set(70, 14, -262); sun.lookAt(0, 14, 0); dawnGrp.add(sun);
  var ri;
  for(ri=0; ri<6; ri++){
    var ray = new T.Mesh(new T.PlaneGeometry(16, 210), new T.MeshBasicMaterial({color:0xffe2a8, transparent:true, opacity:0.07, fog:false, blending:T.AdditiveBlending, depthWrite:false, side:T.DoubleSide}));
    var ra = (ri-2.5)*0.22;
    ray.position.set(70 + Math.sin(ra)*110, 105, -258);
    ray.rotation.z = -ra;
    dawnGrp.add(ray);
  }
  var bi;
  for(bi=0; bi<8; bi++){
    var ba = (bi/8)*Math.PI*2;
    var bx = Math.cos(ba)*150, bz = Math.sin(ba)*150, by = 7+Math.random()*8;
    var pi;
    for(pi=0; pi<5; pi++){
      var puff = new T.Mesh(puffGeo, new T.MeshBasicMaterial({color:0x3d3650, transparent:true, opacity:0.8, fog:false}));
      var pa = Math.random()*Math.PI*2, pr = Math.random()*18;
      puff.position.set(bx+Math.cos(pa)*pr, by+Math.random()*6-2, bz+Math.sin(pa)*pr);
      var ps = 10+Math.random()*12;
      puff.scale.set(ps, ps*0.55, ps);
      dawnGrp.add(puff);
    }
  }
  dawnGrp.visible = false; skyGrp.add(dawnGrp);
  skyGrp.visible = false;
}
function skyState(name){
  /* day · night · storm — his three skies */
  skyBuild();
  var bg = 0x0b0906;
  RAIN_ON = false; CLOUDS_ON = false; /* clouds removed — King's order */ DAWN_ON = false; EMBER_ON = (name==='ember'); AURORA_ON = (name==='aurora');
  var stars = false, cop = 0.42;
  if(name==='day'){ bg = 0x87ceeb; CLOUDS_ON = false; cop = 0.32; } /* bright sky blue — King's order */
  else if(name==='night'){ bg = 0x050308; stars = true; }
  else if(name==='storm'){ bg = 0x12101c; CLOUDS_ON = true; RAIN_ON = true; cop = 0.66; }
  else if(name==='cosmic'){ bg = 0x0d0618; stars = true; cop = 0.22; CLOUDS_ON = true; }
  else if(name==='cave'){ bg = 0x020202; }
  else if(name==='dawn'){ bg = 0x8a6a4a; CLOUDS_ON = false; }
  else if(name==='ember'){ bg = 0x0a0603; }
  else if(name==='aurora'){ bg = 0x060814; stars = true; }
  scene.background.set(bg); skyBgHex = bg;
  if(scene.fog){ scene.fog.color.set(name==='dawn' ? 0x6b5560 : bg); if(name==='cave'){ scene.fog.near = 14; scene.fog.far = 55; } else if(name==='dawn'){ scene.fog.near = 60; scene.fog.far = 290; } else { scene.fog.near = 45; scene.fog.far = (typeof MAP_UNITS!=='undefined'?MAP_UNITS:100) + 6; } }
  starPts.visible = stars;
  emberPts.visible = EMBER_ON;
  for(var aui=0; aui<auroras.length; aui++){ auroras[aui].visible = AURORA_ON; }
  if(dawnGrp) dawnGrp.visible = (name==='dawn');
  skySet(cop);
  codeStatus(name==='day' ? 'day — light clouds, no rain' : name==='night' ? 'night — stars out' : name==='storm' ? 'storm — to