<!-- RUBY-BACKUP · part 250 -->
try(snap(2 - li*0.5), snap(1.5), 10),
              leafMat);
            layer.position.y = trunkH + 0.5 + li * 1.0;
            tree.add(layer);
          }
          tree.position.set(tx, ty, tz);
          tree.userData.nature = true;
          tree.userData.solidGrove = true;
          scene.add(tree);
          placed++;
        }
      });
      /* Rocks marking the entrance */
      for(var ri2 = 0; ri2 < 4; ri2++){
        var rx = snap(cx - 15 + ri2 * 3);
        var rz = snap(cz + 20);
        var ry = fortifiedGroundY(rx, rz);
        var rock = new THREE.Mesh(
          new THREE.DodecahedronGeometry(snap(1), 0),
          new THREE.MeshStandardMaterial({color: 0x808080, roughness: 0.95, flatShading: true}));
        rock.position.set(rx, ry + 0.5, rz);
        rock.userData.nature = true;
        rock.userData.solidGrove = true;
        scene.add(rock);
        placed++;
      }
      if(typeof window.trackNewThing === 'function')
        window.trackNewThing("Solid's grove (" + placed + ")", cx, 0, cz);
      if(typeof codeStatus === 'function') codeStatus("Solid's grove grows — " + placed + " at far dawn");
    }catch(e){ if(typeof codeStatus === 'function') codeStatus('grove failed: ' + e.message); }
    return;
  }
  if(tl==='spawncircle'){
    /* Brown block circle around the default spawn — grass on top of each */
    try{
      var sx = 8, sz = 9; /* Cloud 9 — LAT 9, LON 8 */
      var radius = 10;
      var count = 16;
      var blockMat = new THREE.MeshStandardMaterial({color: 0x8b5a2b, roughness: 0.9});
      var blockGeo = new THREE.BoxGeometry(6, 6, 6);
      /* Grass texture for the tops */
      var grassTex2 = null;
      try{
        if(!window._grassTex){
          var _gt2 = new THREE.TextureLoader().load('/ruby2/grass-top.png');
          _gt2.wrapS = THREE.RepeatWrapping;
          _gt2.wrapT = THREE.RepeatWrapping;
          window._grassTex = _gt2;
        }
        grassTex2 = window._grassTex;
      }catch(e){}
      var grassTopMat = grassTex2 ?
        new THREE.MeshStandardMaterial({map: grassTex2, roughness: 0.9}) :
        new THREE.MeshStandardMaterial({color: 0x4aaa4a, roughness: 0.9});
      var sideMat2 = new THREE.MeshStandardMaterial({color: 0x6b4a2a, roughness: 0.95});
      var dirtMat2 = new THREE.MeshStandardMaterial({color: 0x4a2e15, roughness: 1.0});
      for(var i = 0; i < count; i++){
        var ang = (i / count) * Math.PI * 2;
        var bx = sx + Math.cos(ang) * radius;
        var bz = sz + Math.sin(ang) * radius;
        var by = fortifiedGroundY(bx, bz) + 3;
        /* Brown block */
        var block = new THREE.Mesh(blockGeo, blockMat);
        block.position.set(bx, by, bz);
        block.userData.solid = true;
        scene.add(block);
        if(!window._solidBlocks) window._solidBlocks = [];
        window._solidBlocks.push(block);
        /* Grass block on top */
        var gmats = [sideMat2, sideMat2, grassTopMat, dirtMat2, sideMat2, sideMat2];
        var gblock = new THREE.Mesh(new THREE.BoxGeometry(6, 6, 6), gmats);
        gblock.position.set(bx, by + 6, bz);
        gblock.userData.solid = true;
        gblock.userData.grassBlock = true;
        scene.add(gblock);
        window._solidBlocks.push(gblock);
        if(typeof window.trackNewThing === 'function'){
          window.trackNewThing('spawn circle block', bx, by, bz);
          window.trackNewThing('grass on circle block', bx, by + 6, bz);
        }
      }
      /* Central grass platform — we spawn ON the grass */
      var cgx = sx, cgz = sz;
      var cgy = fortifiedGroundY(cgx, cgz);
      /* Brown base */
      var cbase = new THREE.Mesh(blockGeo, blockMat);
      cbase.position.set(cgx, cgy + 3, cgz);
      cbase.userData.solid = true;
      scene.add(cbase);
      window._solidBlocks.push(cbase);
      /* Grass top */
      var cgmats = [sideMat2, sideMat2, grassTopMat, dirtMat2, sideMat2, sideMat2];
      var cgrass = new THREE.Mesh(new THREE.BoxGeometry(6, 6, 6), cgmats);
      cgrass.position.set(cgx, cgy + 9, cgz);
      cgrass.userData.solid = true;
      cgrass.userData.grassBlock = true;
      cgrass.userData.spawnGrass = true;
      scene.add(cgrass);
      window._solidBlocks.push(cgrass);
      /* Set spawn height to grass top */
      window._cloud9GrassY = cgy + 12;
      if(typeof window.trackNewThing === 'function')
        window.trackNewThing('Cloud 9 grass platform', cgx, cgy + 9, cgz);
      if(typeof codeStatus === 'function') codeStatus(count + ' brown blocks with grass tops circle Cloud 9 — spawn on the grass');
    }catch(e){ if(typeof codeStatus === 'function') codeStatus('circle failed: ' + e.message); }
    return;
  }
  if(tl==='waters'){
    /* Show the waters — ponds, rivers, lakes */
    try{
      if(window._waterMesh){ scene.remove(window._waterMesh); window._waterMesh = null; }
      var wgeo = new THREE.PlaneGeometry(2000, 2000, 100, 100);
      wgeo.rotateX(-Math.PI/2);
      var wpos = wgeo.attribu