<!-- RUBY-BACKUP · part 248 -->
triarch();
  }else if(id==='patriarch'){
    startPatriarch();
  }else{
    /* generic avatar — colored orb with persona */
    startGeneric(id);
  }
  showAvatars(); /* refresh */
  codeStatus('you are now '+id);
}
setTimeout(function(){
  try{
    var saved = localStorage.getItem('ruby-avatar');
    if(saved) CURRENT_AVATAR = saved;
  }catch(e){}
}, 2000);
  if(tl==='walk'){ setWalk(!WALK); return; }
  /* Body joystick 8-direction codes — drive the body without touching the stick */
  if(tl==='bodyup'){ joyX=0; joyY=1; return; }
  if(tl==='bodydown'){ joyX=0; joyY=-1; return; }
  if(tl==='bodyleft'){ joyX=-1; joyY=0; return; }
  if(tl==='bodyright'){ joyX=1; joyY=0; return; }
  if(tl==='bodyupleft'){ joyX=-0.7; joyY=0.7; return; }
  if(tl==='bodyupright'){ joyX=0.7; joyY=0.7; return; }
  if(tl==='bodydownleft'){ joyX=-0.7; joyY=-0.7; return; }
  if(tl==='bodydownright'){ joyX=0.7; joyY=-0.7; return; }
  if(tl==='bodystop'){ joyX=0; joyY=0; return; }
  if(typeof window._noRaycast === 'undefined') window._noRaycast = true; /* OFF until we change it */
  if(tl==='noraycast'){
    window._noRaycast = true;
    if(typeof codeStatus === 'function') codeStatus('raycasts OFF — math holds the ground');
    return;
  }
  if(tl==='yesraycast'){
    window._noRaycast = false;
    if(typeof codeStatus === 'function') codeStatus('raycasts ON');
    return;
  }
  if(tl==='nature1000'){
    /* 1000 blocks of nature for the future world */
    try{
      var heartR = 60; /* keep the heart clear */
      var placed = 0;
      var types = ['tree', 'rock', 'bush', 'flower', 'grass'];
      /* Shared geometries and materials for performance */
      var trunkGeo = new THREE.CylinderGeometry(0.3, 0.5, 3, 6);
      var trunkMat = new THREE.MeshStandardMaterial({color: 0x5a3a1a, roughness: 0.9});
      var leafGeo = new THREE.ConeGeometry(2, 4, 8);
      var leafMat = new THREE.MeshStandardMaterial({color: 0x2a7a2a, roughness: 0.8});
      var rockGeo = new THREE.DodecahedronGeometry(1.2);
      var rockMat = new THREE.MeshStandardMaterial({color: 0x808080, roughness: 0.95});
      var bushGeo = new THREE.SphereGeometry(1.5, 8, 6);
      var bushMat = new THREE.MeshStandardMaterial({color: 0x3a9a3a, roughness: 0.85});
      var flowerGeo = new THREE.SphereGeometry(0.3, 6, 5);
      var flowerColors = [0xff4444, 0xffaa00, 0xff66ff, 0x4444ff, 0xffffff];
      var grassGeo = new THREE.ConeGeometry(0.2, 1, 4);
      var grassMat = new THREE.MeshStandardMaterial({color: 0x4aaa4a, roughness: 0.9});
      /* Playa 2.0 fine-tune: 0.13 precision, layered, refined */
      var MIN = 0.13;
      function snap(v){ return Math.round(v / MIN) * MIN; }
      for(var i = 0; i < 1000; i++){
        var nx = (Math.random() - 0.5) * 1800;
        var nz = (Math.random() - 0.5) * 1800;
        var dc = Math.sqrt(nx*nx + nz*nz);
        if(dc < heartR) continue;
        /* Grass never runs over roads — respect zones */
        if(typeof inRespectZone === 'function' && inRespectZone(nx, nz)) continue;
        /* Grass never grows in water */
        if(typeof window.isWater === 'function' && window.isWater(nx, nz)) continue;
        nx = snap(nx); nz = snap(nz);
        var ny = fortifiedGroundY(nx, nz);
        var type = types[Math.floor(Math.random() * types.length)];
        var obj;
        if(type === 'tree'){
          /* Layered foliage — 3 tiers like the layered pyramid, 0.13 slices */
          obj = new THREE.Group();
          var trunkH = snap(2.5 + Math.random());
          var trunk = new THREE.Mesh(
            new THREE.CylinderGeometry(snap(0.26), snap(0.39), trunkH, 8),
            trunkMat);
          trunk.position.y = trunkH / 2;
          obj.add(trunk);
          /* 3 foliage layers, each a refined cone */
          for(var li = 0; li < 3; li++){
            var lr = snap(1.8 - li * 0.4);
            var lh = snap(1.5);
            var layer = new THREE.Mesh(
              new THREE.ConeGeometry(lr, lh, 10),
              leafMat);
            layer.position.y = trunkH + snap(0.5) + li * snap(1.0);
            obj.add(layer);
          }
          obj.position.set(nx, ny, nz);
        } else if(type === 'rock'){
          /* Faceted rock — 0.13 snapped, flat-shaded for crystalline look */
          var rockMat2 = new THREE.MeshStandardMaterial({color: 0x808080, roughness: 0.95, flatShading: true});
          obj = new THREE.Mesh(
            new THREE.DodecahedronGeometry(snap(0.8 + Math.random()), 0),
            rockMat2);
          obj.position.set(nx, ny + snap(0.4), nz);
          obj.rotation.set(Math.random()*3, Math.random()*3, Math.random()*3);
        } else if(type === 'bush'){
          /* Layered bush — 2 spheres, 0.13 snapped */
          obj = new THREE.Group();
          var b1 = new THREE.Mesh(
            new THREE.SphereGeometry(snap(1.0), 10, 8), bushMat);
          b1.position.y = snap(0.8);
          var b2 = new THREE.Mesh(
            new THREE.SphereGeometry(snap(0.7),