anchor.diff:          return true;
         case 90: //z
           // CCW
  -        if (_activeShip == TRIANGLE_SHIP)
  -          gm.triShip.rotateCCWOn();
  -        else if (_activeShip == DUALCELL_SHIP)
  -          _dualCellShip.rotateCCWOn();
  +        switch (_activeShip) {
  +          case TRIANGLE_SHIP:
  +            gm.triShip.rotateCCWOn();
  +            break;
  +          case DUALCELL_SHIP:
  +            _dualCellShip.rotateCCWOn();
  +            break;
  +          case SPIKE_SHIP:
  +            gm.spikeShip.rotateCCWOn();
  +            break;
  +        }
           return true;
         case 65: //a
           // CW
  -        if (_activeShip == TRIANGLE_SHIP)
  -          gm.triShip.rotateCWOn();
  -        else if (_activeShip == DUALCELL_SHIP)
  -          _dualCellShip.rotateCWOn();
  +        switch (_activeShip) {
  +          case TRIANGLE_SHIP:
  +            gm.triShip.rotateCWOn();
  +            break;
  +          case DUALCELL_SHIP:
  +            _dualCellShip.rotateCWOn();
  +            break;
  +          case SPIKE_SHIP:
  +            gm.spikeShip.rotateCWOn();
  +            break;
  +        }
           return true;
         case 191: // "/" thrust
  -        if (_activeShip == TRIANGLE_SHIP)
  -          gm.triShip.thrust(true);
  -        else if (_activeShip == DUALCELL_SHIP)
  -          _dualCellShip.thrust(true);
  +        switch (_activeShip) {
  +          case TRIANGLE_SHIP:
  +            gm.triShip.thrust(true);
  +            break;
  +          case DUALCELL_SHIP:
  +            _dualCellShip.thrust(true);
  +            break;
  +          case SPIKE_SHIP:
  +            gm.spikeShip.thrust(true);
  +            break;
  +        }
           return true;
         case 222: // "'" fire
  -        if (_activeShip == TRIANGLE_SHIP)
  -          gm.triShip.fire(true);
  -        else if (_activeShip == DUALCELL_SHIP)
  -          _dualCellShip.fire(true);
  +        switch (_activeShip) {
  +          case TRIANGLE_SHIP:
  +            gm.triShip.fire(true);
  +            break;
  +          case DUALCELL_SHIP:
  +            _dualCellShip.fire(true);
  +            break;
  +          case SPIKE_SHIP:
  +            gm.spikeShip.fire(true);
  +            break;
  +        }
           return true;
       }
       
  
positive.code:   set activeShip(int shipId) {
      _activeShip = shipId;
      GameManager gm = GameManager.instance;
  
      // Animate a ring around ship.
      Ranger.Application app = Ranger.Application.instance;
      _selectIndicatorNode.visible = true;
      // The tween must have a value other than zero to begin interpolating.
      _selectIndicatorNode.uniformScale = 1.0;
      
      if (shipId == TRIANGLE_SHIP) {
        _selectIndicatorNode.position = gm.triShip.position;
      }
      else if (shipId == DUALCELL_SHIP) {
        _selectIndicatorNode.position = _dualCellShip.position;
      }
      
      UTE.Timeline seq = new UTE.Timeline.sequence();
  
      UTE.Tween scaleUp = app.animations.scaleTo(
          _selectIndicatorNode,
          1.0,
          100.0, 100.0,
          UTE.Bounce.OUT, Ranger.TweenAnimation.SCALE_XY,
          null, Ranger.TweenAnimation.MULTIPLY,
          false);
      seq.push(scaleUp);
  
      UTE.Tween hide = app.animations.hide(
          _selectIndicatorNode,
          null, false);
      seq.push(hide);
  
      seq.start();
    }
    
    // -----------------------------------------------------------------
  
negative.code:         // Apply force to Triangle ship in the direction of the particle.
          gm.triShip.pulseForceFrom(0.1, angle, 2.0);
          
          // Detonate a smaller particle system.
          _contactExplode.setPosition(p.node.position.x, p.node.position.y);
          _contactExplode.explodeByStyle(Ranger.ParticleActivation.OMNI_DIRECTIONAL);
        }
      }
      else if (_activeShip == SPIKE_SHIP) {
        // Continous scroll based on ship position.
        _shipPositionDelta.setFrom(_prevShipPosition);
        _shipPositionDelta.sub(gm.spikeShip.motionPosition);
        _shipPositionDelta.scale(_zoomControl.currentScale);
        _zoomControl.translateBy(_shipPositionDelta);
        _zoomControl.scaleCenter.setFrom(gm.spikeShip.motionPosition);
        _prevShipPosition.setFrom(gm.spikeShip.motionPosition);
      }
      
      // Zone Checking
      _zone1.updateState(gm.triShip.position);
      _zone2.updateState(gm.triShip.position);
      _zone3.updateState(gm.triShip.position);
      
    }
  
    Ranger.UniversalParticle _processBulletToTriangleShip(List<Ranger.Particle> bullets) {
  