<!-- RUBY-BACKUP · part 356 -->
/
          setTimeout(function(){
            try{ codeStatus('"You owe sixteen. I know what that feels like."'); }catch(e){}
          }, 3000);
          /* she shows you. No name. You go on your way wondering. */
          if(typeof playfulSparkle==='function'){
            playfulSparkle(PROVOLTA_MODEL.position.clone().add(new THREE.Vector3(0,2,0)), 0x00ffff);
          }
          /* the map opens */
          setTimeout(function(){
            try{ if(typeof toggleHolomap==='function') toggleHolomap(); }catch(e){}
          }, 1500);
        }catch(e){}
      }, 5000);
    }
  }catch(e){}
}, 500);
/* she knows when you see her */
var PROVOLTA_SEEN = false;
setInterval(function(){
  try{
    if(PROVOLTA_SEEN) return;
    if(typeof PROVOLTA_MODEL==='undefined' || !PROVOLTA_MODEL) return;
    if(typeof camera==='undefined') return;
    /* is she in view? */
    var dir = new THREE.Vector3();
    camera.getWorldDirection(dir);
    var toHer = new THREE.Vector3();
    toHer.subVectors(PROVOLTA_MODEL.position, camera.position).normalize();
    var dot = dir.dot(toHer);
    var dist = camera.position.distanceTo(PROVOLTA_MODEL.position);
    if(dot > 0.9 && dist < 30){
      PROVOLTA_SEEN = true;
      /* she knows — but it's quiet, it doesn't have to happen */
      try{
        if(typeof playfulSparkle==='function'){
          /* fewer sparkles, softer */
          var pos = PROVOLTA_MODEL.position.clone().add(new THREE.Vector3(0,3,0));
          /* just a breath of cyan, not an announcement */
        }
      }catch(e){}
      /* no message — she simply knows. You'll feel it or you won't. */
    }
  }catch(e){}
}, 1000);
setTimeout(function(){ try{ buildProphetessScene(); }catch(e){} }, 7000);
setTimeout(function(){ try{ buildOutpost(); }catch(e){} }, 8000);
/* THE CITY: around the corner from where you landed — PROVOLTA is there */
var CITY_CENTER = null;
function getCityCenter(){
  try{
    if(CITY_CENTER) return CITY_CENTER;
    var site = (typeof getLandingSite==='function' ? getLandingSite() : {x:0, z:0});
    CITY_CENTER = {x: site.x + 25, z: site.z - 10};
    return CITY_CENTER;
  }catch(e){ return {x:25, z:-10}; }
}
var CITY_BUILT = false;
function buildCity(){
  try{
    if(CITY_BUILT) return;
    var cc = getCityCenter();
    var cityGroup = new THREE.Group();
    var bldgMat = new THREE.MeshStandardMaterial({color:0x4a4a5a, roughness:0.8});
    var winMat = new THREE.MeshStandardMaterial({color:0xffd700, emissive:0xffd700, emissiveIntensity:0.8});
    var towers = [
      {x:-8, z:-5, w:4, h:12, d:4},
      {x:6, z:-8, w:5, h:18, d:5},
      {x:-3, z:7, w:3, h:8, d:3},
      {x:10, z:5, w:4, h:14, d:4}
    ];
    towers.forEach(function(t){
      var b = new THREE.Mesh(new THREE.BoxGeometry(t.w, t.h, t.d), bldgMat);
      b.position.set(cc.x + t.x, t.h/2, cc.z + t.z);
      cityGroup.add(b);
      for(var wy=2; wy<t.h-1; wy+=3){
        var win = new THREE.Mesh(new THREE.BoxGeometry(t.w+0.1, 0.8, t.d+0.1), winMat);
        win.position.set(cc.x + t.x, wy, cc.z + t.z);
        cityGroup.add(win);
      }
    });
    var plaza = new THREE.Mesh(
      new THREE.CylinderGeometry(8, 8, 0.3, 24),
      new THREE.MeshStandardMaterial({color:0x3a3a4a, roughness:0.9})
    );
    plaza.position.set(cc.x, 0.15, cc.z);
    cityGroup.add(plaza);
    if(typeof scene!=='undefined') scene.add(cityGroup);
    CITY_BUILT = true;
  }catch(e){}
}
/* THE OUTPOST — black towers with gold stripes, the ship, the little robot */
function buildOutpost(){
  try{
    var g = new THREE.Group();
    var blackMat = new THREE.MeshStandardMaterial({color:0x0a0a0a, roughness:0.6});
    var goldMat = new THREE.MeshStandardMaterial({color:0xffd700, emissive:0xffd700, emissiveIntensity:0.9});
    var orangeMat = new THREE.MeshStandardMaterial({color:0xff6600, emissive:0xff6600, emissiveIntensity:0.7});
    var tealMat = new THREE.MeshStandardMaterial({color:0x4dd0c4, roughness:0.3, metalness:0.5});
    var redMat = new THREE.MeshStandardMaterial({color:0xff0000, emissive:0xff0000, emissiveIntensity:1.0});
    /* three black towers with gold stripes */
    var towers = [{x:-12,z:0,h:20},{x:0,z:-4,h:26},{x:12,z:0,h:18}];
    towers.forEach(function(t){
      var tw = new THREE.Mesh(new THREE.BoxGeometry(4, t.h, 4), blackMat);
      tw.position.set(t.x, t.h/2, t.z);
      g.add(tw);
      for(var sy=3; sy<t.h-1; sy+=5){
        var stripe = new THREE.Mesh(new THREE.BoxGeometry(4.2, 1, 4.2), goldMat);
        stripe.position.set(t.x, sy, t.z);
        g.add(stripe);
      }
    });
    /* the spaceship — black hull, orange thrusters, teal dome, pointed nose */
    var ship = new THREE.Group();
    ship.name = 'spaceship';
    var hull = new THREE.Mesh(new THREE.BoxGeometry(8, 1.5, 3), blackMat);
    hull.name = 'hull';
    ship.add(hull);
    var nose = new THREE.Mesh(new THREE.ConeGeometry(1.5, 3, 4), blackMat);
    nose.name = 'nose';
    nose.rotation.z = -Math.PI/2;
    nose.position.set(5.5, 0, 0