<!-- RUBY-BACKUP · part 344 -->
r('resize', resize); resize();

scene.add(new T.HemisphereLight(0xffe6b0, 0x1a0f08, 0.5));
var sun = new T.DirectionalLight(0xfff2cc, 0.75); sun.position.set(30, 48, 18); scene.add(sun);

/* ---- the flat surface + the gold grid ---- */
var ground = new T.Mesh(
  new T.PlaneGeometry(MAP_UNITS, MAP_UNITS),
  new T.MeshStandardMaterial({color:0x0d0a05, roughness:0.95, metalness:0.05})
);
ground.rotation.x = -Math.PI/2; scene.add(ground);
/* the land's grid — gold lines draped over the hills, fixed for building */
var landGrid = null;
function buildLandGrid(){
  if(landGrid){ scene.remove(landGrid); landGrid = null; }
  var half = 49, step = 4, pts = [], x, z, s;
  for(x=-half; x<=half+0.001; x+=step){
    for(z=-half; z<half; z+=2){ pts.push(x, groundY(x,z)+0.05, z, x, groundY(x,z+2)+0.05, z+2); }
  }
  for(z=-half; z<=half+0.001; z+=step){
    for(x=-half; x<half; x+=2){ pts.push(x, groundY(x,z)+0.05, z, x+2, groundY(x+2,z)+0.05, z); }
  }
  var g = new T.BufferGeometry();
  g.setAttribute('position', new T.Float32BufferAttribute(pts, 3));
  landGrid = new T.LineSegments(g, new T.LineBasicMaterial({color:0xffd700, transparent:true, opacity:0.35, fog:false}));
  scene.add(landGrid);
}

/* ---- the ruby: Minimum-sized, at the center, on a gold ring ---- */
var rubyGrp = new T.Group(); scene.add(rubyGrp);
var ruby = new T.Mesh(
  new T.SphereGeometry(window.MINIMUM/2, 24, 18),
  new T.MeshStandardMaterial({color:0xb3001b, emissive:0xff1a2e, emissiveIntensity:2.2, roughness:0.15, metalness:0.4})
);
ruby.position.y = 1.1; rubyGrp.add(ruby);
var ring = new T.Mesh(
  new T.TorusGeometry(0.9, 0.03, 10, 64),
  new T.MeshStandardMaterial({color:0xd8a920, emissive:0x8a6414, emissiveIntensity:0.7, roughness:0.3, metalness:0.9})
);
ring.rotation.x = Math.PI/2; ring.position.y = 0.29; rubyGrp.add(ring);
var rubyLight = new T.PointLight(0xff2a3a, 2.6, 18); rubyLight.position.y = 1.1; rubyGrp.add(rubyLight);

/* ---- boxes are measured in rubies: 1 ruby = Minimum, the smallest anything can be ---- */
var stoneMat = new T.MeshStandardMaterial({color:0xd8a920, roughness:0.35, metalness:0.85, emissive:0x3a2a08, emissiveIntensity:0.25});
var darkShoeMat = new T.MeshStandardMaterial({color:0x15151c, roughness:0.55, metalness:0.5});
var glowBlueMat = new T.MeshBasicMaterial({color:0x4499ff});
var toeCapMat = new T.MeshStandardMaterial({color:0x2a2a35, roughness:0.3, metalness:0.85});
/* NPC kings — versions of the king standing in the world, that aren't him */
var npcKings = [];
function persistKings(){
  try{ localStorage.setItem('ruby-kings-v1', JSON.stringify(npcKings.map(function(k){ return {x:k.position.x, z:k.position.z}; }))); }catch(e){}
}
function spawnKingNPC(x, z){
  var k = buildKingAvatar();
  k.position.set(x, groundY(x, z), z);
  k.rotation.y = Math.random()*Math.PI*2;
  scene.add(k);
  npcKings.push(k);
  persistKings();
  return k;
}
function loadKings(){
  var ks = [];
  try{ ks = JSON.parse(localStorage.getItem('ruby-kings-v1')||'[]'); }catch(e){}
  ks.forEach(function(k){ spawnKingNPC(k.x, k.z); });
}

/* ultra-dense intaglio linework, drawn once, worn by the nested shells */
function makeIntaglioTex(){
  var c = document.createElement('canvas'); c.width = c.height = 512;
  var x = c.getContext('2d');
  x.clearRect(0,0,512,512);
  var i, a, p;
  x.lineWidth = 1;
  x.strokeStyle = 'rgba(255,215,0,0.5)';
  for(i=-512;i<1024;i+=5){
    x.beginPath(); x.moveTo(i,0); x.lineTo(i+512,512); x.stroke();
    x.beginPath(); x.moveTo(i+512,0); x.lineTo(i,512); x.stroke();
  }
  x.strokeStyle = 'rgba(255,215,0,0.26)';
  for(i=0;i<512;i+=5){ x.beginPath(); x.moveTo(0,i); x.lineTo(512,i); x.stroke(); }
  x.strokeStyle = 'rgba(255,215,0,0.34)';
  for(var r=8;r<360;r+=9){
    x.beginPath();
    for(a=0;a<=Math.PI*2+0.01;a+=0.05){
      var rr = r + Math.sin(a*9)*3;
      p = [256+Math.cos(a)*rr, 256+Math.sin(a)*rr];
      if(a===0) x.moveTo(p[0],p[1]); else x.lineTo(p[0],p[1]);
    }
    x.stroke();
  }
  var t = new T.CanvasTexture(c);
  t.wrapS = t.wrapT = T.RepeatWrapping;
  return t;
}
var intaglioMat = new T.MeshBasicMaterial({map:makeIntaglioTex(), transparent:true, opacity:0.5, depthWrite:false, side:T.DoubleSide});
var LINEWORK_ON = false; /* ultra-dense intaglio linework within and outside blocks */
/* the pyramid family wears the ultra-dense intaglio linework even in solid mode:
   gold ground, engraved bright — everything that connects, lined up */
function makeFamilyTex(){
  var c = document.createElement('canvas'); c.width = c.height = 512;
  var x = c.getContext('2d');
  x.fillStyle = '#7d5c10'; x.fillRect(0,0,512,512);
  x.lineWidth = 1;
  x.strokeStyle = 'rgba(255,225,130,0.55)';
  for(var i=-512;i<1024;i+=5){
    x.beginPath(); x.moveTo(i,0); x.lineTo(i+512,512); x.stroke();
    x.beginPath(); x.moveTo(i+512,0); x.lineTo(i,512); x.stroke();
  }
  x.strokeStyle = 'rgba(255,225,130,0.3)';
  for(i=0;i<512;i+=5){ x.beginPath(); x.moveTo(0,i); x.lineTo(512,i); x.stroke(); }
  x.str