<!-- SOLID CITY · part 1829 -->
s.y+Math.sin(q)*22,vx:Math.cos(q)*700,vy:Math.sin(q)*700,life:1.25,owner:idx,color:s.color})});s.a=a;s.actionTick++;muzzles.push({x:s.x+Math.cos(a)*24,y:s.y+Math.sin(a)*24,color:s.color,life:.1});var badge=document.querySelector('#auto'+idx);badge.classList.add('hot');setTimeout(function(){badge.classList.remove('hot')},90)}
  function autoFire(s,idx,dt){if(!s.alive)return;s.fire-=dt;if(s.fire>0)return;if(level===5){var corridorTarget=corridorThreats.some(function(t){return !t.cleared&&Math.abs(t.x-s.corridorX)<.34&&Math.abs(t.band-s.altitude)<.48});if(corridorTarget){fireCorridor(s,idx,false);s.fire=performance.now()<s.rapidUntil?.085:.18}return}var autoLock=level===4&&progression.expansionStage===3&&flight.mode==='formation',target=null;if(idx===1&&s.coveringTarget!==null)target=enemies.concat(meteors).find(function(o){return o.id===s.coveringTarget&&!o.resolved&&o.hull>0})||null;if(!target)target=nearest(s,enemies,autoLock?1450:(level>=3?980:560));if(!target&&(autoLock||(idx===1&&(armEl.checked||s.coveringTarget!==null))))target=nearest(s,meteors,autoLock?1200:500);if(!target)return;fireShot(s,idx,false);s.fire=performance.now()<s.rapidUntil ? .085 : .18}
  function manualFire(s,idx,dt){if(!s.alive||!fireControl.active)return;s.manualFire-=dt;if(s.manualFire>0)return;fireShot(s,idx,true);s.manualFire=performance.now()<s.rapidUntil ? .065 : .12}
  function clamp(v,a,b){return Math.max(a,Math.min(b,v))}
  function altitudeBand(v){return v>.36?1:v<-.36?-1:0}
  function bandName(v){var b=altitudeBand(v);return b>0?'ABOVE':b<0?'BELOW':'ALONGSIDE'}
  function spawnCorridorRun(){
    var bands=[0,1,-1,0,-1,1],band=bands[progression.corridorSequence%bands.length],isEnemy=progression.corridorSequence%3===2;progression.corridorSequence++;
    [-.56,0,.56].forEach(function(lane,i){corridorThreats.push({id:nextId++,x:lane+(Math.random()-.5)*.08,band:band,z:1.08+i*.025,r:isEnemy?.19:.23,hull:isEnemy?3:2,type:isEnemy?'enemy':'meteor',phase:Math.random()*6.28,cleared:false,hit:false})});
    notify(0,'INCOMING · '+bandName(band),650);notify(1,'INCOMING · '+bandName(band),650)
  }
  function fireCorridor(s,idx,manual){
    var target=null,best=9;if(flight.mode==='formation'){corridorThreats.forEach(function(t){if(t.cleared)return;var d=t.z+Math.abs(t.x-s.corridorX)*.65+Math.abs(t.band-s.altitude)*.45;if(d<best){best=d;target=t}})}else{corridorThreats.forEach(function(t){if(t.cleared)return;var d=t.z+Math.abs(t.x-s.corridorX)+Math.abs(t.band-s.altitude);if(d<best&&Math.abs(t.x-s.corridorX)<.3&&Math.abs(t.band-s.altitude)<.46){best=d;target=t}})}
    var spread=performance.now()<s.spreadUntil?[-.12,0,.12]:[0];spread.forEach(function(off){corridorShots.push({fid:nextId++,owner:idx,x:s.corridorX+off,alt:s.altitude,z:.06,life:1.2,color:s.color,target:target&&target.id})});muzzles.push({x:s.x,y:s.y,color:s.color,life:.1});s.actionTick++;var badge=document.querySelector('#auto'+idx);badge.classList.add('hot');setTimeout(function(){badge.classList.remove('hot')},90)
  }
  function dropCorridorPower(t){if(Math.random()>.38)return;var r=Math.random(),type=r<.38?'shield':r<.61?'spread':r<.84?'rapid':'repair';corridorPickups.push({id:nextId++,type:type,x:t.x,band:t.band,z:t.z,phase:Math.random()*6.28,collected:false})}
  function updateCorridor(dt){
    levelElapsed+=0;wave=1+Math.floor(levelElapsed/12);var input0=humanInput(0),input1=humanInput(1),human=ships[0],ai=ships[1];
    if(human.alive){human.corridorX=clamp(human.corridorX+input0.x*dt*.82,-.82,.82);human.altitude=clamp(human.altitude-input0.y*dt*1.55,-1,1);human.actionTick++}
    var aiTaken=controls[1].active||input1.active||controls[1].keyActive;
    if(ai.alive){if(aiTaken){ai.corridorX=clamp(ai.corridorX+input1.x*dt*.82,-.82,.82);ai.altitude=clamp(ai.altitude-input1.y*dt*1.55,-1,1);ai.actionTick++}else{var danger=null;corridorThreats.forEach(function(t){if(!t.cleared&&t.z<.48&&t.z>.05&&Math.abs(t.x-ai.corridorX)<.38&&(!danger||t.z<danger.z))danger=t});var targetAlt=human.altitude,targetX=human.corridorX+.22;if(danger&&Math.abs(danger.band-ai.altitude)<.44){var options=[-1,0,1].sort(function(a,b){return Math.abs(b-danger.band)-Math.abs(a-danger.band)});targetAlt=options[0];notify(1,'AI '+bandName(targetAlt),450)}ai.altitude+=clamp(targetAlt-ai.altitude,-dt*1.18,dt*1.18);ai.corridorX+=clamp(targetX-ai.corridorX,-dt*.45,dt*.45)}}
    var urgent=null;corridorThreats.forEach(function(t){if(!t.cleared&&t.z<.38&&t.z>.07&&Math.abs(t.x-human.corridorX)<.34&&Math.abs(t.band-human.altitude)<.42&&(!urgent||t.z<urgent.z))urgent=t});
    if(armEl.checked&&urgent&&!input0.active){var escape=urgent.band>=0?-1:1;human.altitude+=clamp(escape-human.altitude,-dt*2.2,dt*2.2);if(!urgent.assisted){urgent.assisted=true;metrics.avoided++;logA('corridor assist · moved '+ships[0].label+' '+bandName(escape));notify(0,'EVADE ASSIST · '+bandName(escape),650)}}
    ships.forEach(function(s){s.x=1200+s.corridorX*520;s.y=800-s.altitude*360;s.vx=0;s.vy=0});updateFlight