{
  robots: [
    {
      robotId: TRACKER,
      animId: ROBOT0,
      visibleSound: VIS_TRACKER_FX,
      filled: true,
      scale: 1.0,
      health: 1000,
      trackPlayer: true,
      trackLimitSecs: 20,
      trackSpeed: 7.0,
      walkFn: "MazeWalk",
      juncMemSize: 5,
      avoidDeadEndDist: 2,
      speed: 4.0,
      atDestShift: 2,
      slideMax: 100,
      turnLeftPer: 20,
      turnRightPer: 20,
      blockTurnLeftPer: 40,
      blockTurnRightPer: 40,

      scanFn: "NSEWScan",
      scanTime: 1000,
      rescanTime: 99999,  // > than scanTime => doesn't rescan
      cellSightDist: 7,
      offscreenShootTime:300,
      beamTurnTime: 100,  // doesn't matter because doesn't rescan
      fireType: FIRE_BEAM,
      beamId: WIDE_WHITE,
      walkAndFire: true,
      firePosXOff: 0,
      firePosYOff: 70 
    },
    {
      robotId: ZAPPER,
      animId: SCANNER,
      visibleSound: VIS_ZAPPER_FX,
      filled: true,
      scale: 1.0,
      health: 1000,
      trackPlayer: true,
      trackLimitSecs: 20,
      trackSpeed: 7.0,
      walkFn: "MazeWalk",
      juncMemSize: 5,
      avoidDeadEndDist: 2,
      speed: 4.0,
      atDestShift: 2,
      slideMax: 100,
      turnLeftPer: 20,
      turnRightPer: 20,
      blockTurnLeftPer: 40,
      blockTurnRightPer: 40,

      scanFn: "NSEWScan",
      scanTime: 50,
      rescanTime: 99999,  // > than scanTime => doesn't rescan
      cellSightDist: 7,
      offscreenShootTime:300,
      fireType: FIRE_LIGHT,
      strikeId: STRIKE_BASIC,
      walkAndFire: true,
      firePosXOff: 0,
      firePosYOff: 0 
    },
    {
      robotId: BOLTER,
      animId: SCANNER,
      visibleSound: VIS_BOLTER_FX,
      filled: true,
      scale: 1.0,
      health: 1000,
      trackPlayer: false,
      trackLimitSecs: 20,
      trackSpeed: 7.0,
      walkFn: "MazeWalk",
      juncMemSize: 5,
      avoidDeadEndDist: 2,
      speed: 4.0,
      atDestShift: 2,
      slideMax: 100,
      turnLeftPer: 20,
      turnRightPer: 20,
      blockTurnLeftPer: 40,
      blockTurnRightPer: 40,

      scanFn: "NSEWScan",
      scanTime: 50,
      rescanTime: 99999,  // > than scanTime => doesn't rescan
      cellSightDist: 3,
      offscreenShootTime:300,
      fireType: FIRE_PARTICLE,
      fireEmitterId: FIRE_EXPANDING,
      walkAndFire: true,
      firePosXOff: 0,
      firePosYOff: 0
    },
    {
      robotId: TRANSPORTER,
      animId: TRON,
      visibleSound: VIS_TRANSPORTER_FX,
      filled: true,
      scale: 1.0,
      health: 1000,
      mass: 3,
      trackPlayer: false,
      walkFn: "EdgeWalk",
      speed: 2.5,
      atDestShift: 0,
      slideMax: 100,

      scanFn: "NoScan",
      fireType: FIRE_NONE,
    },
    {
      robotId: SPINNER,
      animId: SPINNER_CW,
      visibleSound: VIS_SPINNER_FX,
      filled: true,
      scale: 1.0,
      health: 1000,
      mass: 0.75,
      trackPlayer: false,
      walkFn: "WallBounce",
      speed: 3.0,
      // Shit 16 so check every pass if need to bounce
      atDestShift: 16,
      // SlideMax is 1 so bounce if sliding
      slideMax: 1,

      scanFn: "NoScan",
      fireType: FIRE_NONE,
    },
    {
      robotId: TOWER,
      animId: TOWER_PAD,
      filled: true,
      scale: 0.5,
      health: 1000.000,
      mass: 30,
      trackPlayer: false,
      walkFn: "StationaryWalk",
      speed: 0.0,
      atDestShift: 0,
      slideMax: 100,

      scanFn: "NSEWTowerScan",
      scanTime: 1000,
      rescanTime: 99999,  // > than scanTime => doesn't rescan
      cellSightDist: 5,
      offscreenShootTime:300,
      fireType: FIRE_BEAM,
      beamId: LOCKON_PURPLE,
      walkAndFire: false,
      firePosXOff: 0,
      firePosYOff: 30 
    },
    {
      robotId: BOLT_TOWER,
      animId: TOWER_PAD,
      filled: true,
      scale: 0.5,
      health: 1000.000,
      mass: 30,
      trackPlayer: false,
      walkFn: "StationaryWalk",
      speed: 0.0,
      atDestShift: 0,
      slideMax: 100,

      scanFn: "FullDirTowerScan",
      cellSightDist: 5,
      offscreenShootTime:300,
      fireType: FIRE_PARTICLE,
      fireEmitterId: FIRE_RAINBOLT,
      walkAndFire: false,
      firePosXOff: 0,
      firePosYOff: 30 
    },
    {
      robotId: LIGHT_TOWER,
      animId: TOWER_PAD,
      filled: true,
      scale: 0.5,
      health: 1000.000,
      mass: 30,
      trackPlayer: false,
      walkFn: "StationaryWalk",
      speed: 0.0,
      atDestShift: 0,
      slideMax: 100,

      scanFn: "NSEWTowerScan",
      cellSightDist: 5,
      offscreenShootTime:300,
      fireType: FIRE_LIGHT,
      strikeId: STRIKE_LIGHT_TOWER,
      walkAndFire: false,
      firePosXOff: 0,
      firePosYOff: 30 
    },
    {
      robotId: VINCENT,
      animId: VINCENT_STAND,
      visibleSound: VIS_VINCENT_FX,
      filled: true,
      scale: 0.5,
      health: 1000,
      trackPlayer: true,
      trackLimitSecs: 20,
      trackSpeed: 4.0,
      walkFn: "StandFollowWalk",
      juncMemSize: 5,
      avoidDeadEndDist: 2,
      speed: 2.0,
      atDestShift: 2,
      slideMax: 100,
      turnLeftPer: 20,
      turnRightPer: 20,
      blockTurnLeftPer: 40,
      blockTurnRightPer: 40,

      scanFn: "NSEWScan",
      scanTime: 150,
      rescanTime: 99999,  // > than scanTime => doesn't rescan
      cellSightDist: 7,
      offscreenShootTime:300,
      fireType: FIRE_PARTICLE,
      fireEmitterId: FIRE_SMALL_PURPLE,
      walkAndFire: true,
      firePosXOff: 0,
      firePosYOff: 28 
    },
    {
      robotId: MAXIMILLIAN,
      animId: MAXIMILLIAN,
      visibleSound: VIS_MAXIMILLIAN_FX,
      filled: true,
      scale: 0.5,
      health: 1000,
      trackPlayer: true,
      trackLimitSecs: 20,
      trackSpeed: 4.0,
      walkFn: "StandFollowWalk",
      juncMemSize: 5,
      avoidDeadEndDist: 2,
      speed: 2.0,
      atDestShift: 2,
      slideMax: 100,
      turnLeftPer: 20,
      turnRightPer: 20,
      blockTurnLeftPer: 40,
      blockTurnRightPer: 40,

      scanFn: "NSEWScan",
      scanTime: 250,
      rescanTime: 99999,  // > than scanTime => doesn't rescan
      cellSightDist: 7,
      offscreenShootTime:300,
      fireType: FIRE_BEAM,
      beamId: PURPLE_DASH,
      walkAndFire: true,
      firePosXOff: 0,
      firePosYOff: 63
    },
    {
      robotId: BEZERK,
      animId: BEZERK_STAND,
      visibleSound: VIS_BEZERK_FX,
      filled: true,
      scale: 0.75,
      health: 1000,
      trackPlayer: true,
      trackLimitSecs: 10,
      trackSpeed: 4.0,
      walkFn: "StandFollowWalk",
      juncMemSize: 5,
      avoidDeadEndDist: 2,
      speed: 2.0,
      atDestShift: 2,
      slideMax: 100,
      turnLeftPer: 20,
      turnRightPer: 20,
      blockTurnLeftPer: 40,
      blockTurnRightPer: 40,

      scanFn: "FullDirScan",
      scanTime: 250,
      rescanTime: 100,
      cellSightDist: 7,
      offscreenShootTime:300,
      fireType: FIRE_BEAM,
      beamId: WIDE_WAVEY,
      walkAndFire: true,
      firePosXOff: 0,
      firePosYOff: 55
    },
    {
      robotId: BEZERK_BOLT,
      animId: BEZERK_STAND,
      visibleSound: VIS_BEZERK_FX,
      filled: true,
      scale: 0.75,
      health: 1000,
      trackPlayer: true,
      trackLimitSecs: 10,
      trackSpeed: 4.0,
      walkFn: "StandFollowWalk",
      juncMemSize: 5,
      avoidDeadEndDist: 2,
      speed: 2.0,
      atDestShift: 2,
      slideMax: 100,
      turnLeftPer: 20,
      turnRightPer: 20,
      blockTurnLeftPer: 40,
      blockTurnRightPer: 40,

      scanFn: "FullDirScan",
      scanTime: 200,
      rescanTime: 100,
      cellSightDist: 7,
      offscreenShootTime:300,
      fireType: FIRE_PARTICLE,
      fireEmitterId: FIRE_BOLT,
      walkAndFire: true,
      firePosXOff: 0,
      firePosYOff: 55
    },
    {
      robotId: SECURITY,
      animId: SECURITY,
      visibleSound: VIS_SECURITY_FX,
      filled: true,
      scale: 1.0,
      health: 1000,
      trackPlayer: true,
      trackLimitSecs: 20,
      trackSpeed: 8.0,
      walkFn: "FootAndStarWalk",
      astarLoop: 5,
      astarMaxLen: 10,
      juncMemSize: 5,
      avoidDeadEndDist: 2,
      speed: 6.0,
      atDestShift: 2,
      slideMax: 100,
      turnLeftPer: 20,
      turnRightPer: 20,
      blockTurnLeftPer: 40,
      blockTurnRightPer: 40,

      scanFn: "FullDirScan",
      scanTime: 300,
      rescanTime: 100,
      cellSightDist: 3,
      offscreenShootTime:300,
      fireType: FIRE_BEAM,
      beamId: NARROW_RED,
      walkAndFire: true,
      firePosXOff: 0,
      firePosYOff: 10 
    },
    {
      robotId: CLAWER,
      animId: CLAWER,
      visibleSound: VIS_CLAWER_FX,
      filled: true,
      scale: 0.5,
      health: 1000,
      trackPlayer: false,
      trackLimitSecs: 20,
      trackSpeed: 8.0,
      walkFn: "StarWalk",
      astarLoop: 5,
      juncMemSize: 5,
      avoidDeadEndDist: 2,
      speed: 6.0,
      atDestShift: 2,
      slideMax: 100,
      turnLeftPer: 20,
      turnRightPer: 20,
      blockTurnLeftPer: 40,
      blockTurnRightPer: 40,

      scanFn: "NoScan",
      fireType: FIRE_NONE,
    },
    {
      robotId: FISH,
      animId: FISH_W,
      filled: true,
      scale: 1.0,
      health: 1000,
      walkFn: "FishWalk",
      speed: 4.0,
      atDestShift: 2,
      slideMax: 100,

      scanFn: "FishScan",
      scanTime: 500,
      rescanTime: 99999,  // > than scanTime => doesn't rescan
      cellSightDist: 3,   // Not uses for FishScan (currently)
      offscreenShootTime:300,
      beamTurnTime: 100,  // doesn't matter because doesn't rescan
      fireType: FIRE_BEAM,
      beamId: WIDE_TO_NARROW,
      walkAndFire: false,
      firePosXOff: -30,
      firePosYOff: 30 
    },
    {
      robotId: BOSS_BULL,
      animId: OCTO_BULLET,
      filled: true,
      scale: 1.0,
      health: 1,
      mass: 0.1,
      walkFn: "BossBulletWalk",
      speed: 18.0,
      atDestShift: 2,
      slideMax: 100,

      scanFn: "NoScan",
      scanTime: 250,
      rescanTime: 99999,  // > than scanTime => doesn't rescan
      cellSightDist: 7,   // Not uses for FishScan (currently)
      walkAndFire: false,
    },
    {
      robotId: BOSS,
      animId: FACE,
      filled: true,
      scale: 0.5,
      health: 10000000,
      mass: 100,
      walkFn: "StationaryWalk",
      speed: 4.0,
      atDestShift: 2,
      slideMax: 100,

      scanFn: "BossScan",
      scanTime: 3000,
      rescanTime: 99999,  // > than scanTime => doesn't rescan
      cellSightDist: 7,
      offscreenShootTime:300,
      beamTurnTime: 100,  // doesn't matter because doesn't rescan
      walkAndFire: false,
      firePosXOff: -30,
      firePosYOff: 30 
    },
  ]
}
