o
  setName "爆発弾"

  e <- use self
  zoom _1 $ motionCommon 100 Stay
  ang' <- anglePlayer
  when (e^.counter == 150) $ do
    enemyEffect $ effEnemyAttack 0 (e^.pos)
    enemyEffect $ effEnemyAttack 1 (e^.pos)
    enemyEffect $ effEnemyAttack 2 (e^.pos)
  
  let n = 8 :: Int
  when (e^.counter `mod` 100 == 0 && e^.statePiece == Attack) $ do
    shots $ (flip map) [0..n] $ \i ->
      makeBullet Needle (toEnum $ i*2 `mod` 2) def
        & pos .~ e^.pos & speed .~ 3
        & ang .~ ang' + fromIntegral i*2*pi/fromIntegral n
        & runAuto %~ (go >>)
  
  where
    go = do
      zoom _1 $ do
        use counter >>= \c -> when (c <= 150) $ speed -= 0.01
        counter += 1

      b <- use self
      let n = 8 :: Int
      when (b^.counter == 150) $
        shots $ flip map [0..n] $ \i ->
          makeBullet BallLarge Blue def
            & auto .~ b & speed .~ 1.5
            & ang .~ fromIntegral i*2*pi/fromIntegral n

boss4 :: (Given Resource, HasPiece c, HasObject c, HasChara c) =>
         Danmaku c ()
boss
boss3 :: (Given Resource, HasChara c, HasPiece c, HasObject c) => Danmaku c ()
boss3 = do
  setName "爆発弾"

  e <- use self
  zoom _1 $ motionCommon 100 Stay
  ang' <- anglePlayer
  when (e^.counter == 150) $ do
    enemyEffect $ effEnemyAttack 0 (e^.pos)
    enemyEffect $ effEnemyAttack 1 (e^.pos)
    enemyEffect $ effEnemyAttack 2 (e^.pos)
  
  let n = 8 :: Int
  when (e^.counter `mod` 100 == 0 && e^.statePiece == Attack) $ do
    shots $ (flip map) [0..n] $ \i ->
      makeBullet Needle (toEnum $ i*2 `mod` 2) def
        & pos .~ e^.pos & speed .~ 3
        & ang .~ ang' + fromIntegral i*2*pi/fromIntegral n
        & runAuto %~ (go >>)
  
  where
    go = do
      zoom _1 $ do
        use counter >>= \c -> when (c <= 150) $ speed -= 0.01
        counter += 1

      b <- use self
      let n = 8 :: Int
      when (b^.counter == 150) $
        shots $ flip map [0..n] $ \i ->
          makeBullet BallLarge Blue def
            & auto .~ b & speed .~ 1.5
            & ang .~ fromIntegral i*2*pi/fromIntegral n
boss3 = do
  setName "爆発弾"

  e <- use self
  zoom _1 $ motionCommon 100 Stay
  ang' <- anglePlayer
  when (e^.counter == 150) $ do
    enemyEffect $ effEnemyAttack 0 (e^.pos)
    enemyEffect $ effEnemyAttack 1 (e^.pos)
    enemyEffect $ effEnemyAttack 2 (e^.pos)
  
  let n = 8 :: Int
  when (e^.counter `mod` 100 == 0 && e^.statePiece == Attack) $ do
    shots $ (flip map) [0..n] $ \i ->
      makeBullet Needle (toEnum $ i*2 `mod` 2) def
        & pos .~ e^.pos & speed .~ 3
        & ang .~ ang' + fromIntegral i*2*pi/fromIntegral n
        & runAuto %~ (go >>)
  
  where
    go = do
      zoom _1 $ do
        use counter >>= \c -> when (c <= 150) $ speed -= 0.01
        counter += 1

      b <- use self
      let n = 8 :: Int
      when (b^.counter == 150) $
        shots $ flip map [0..n] $ \i ->
          makeBullet BallLarge Blue def
            & auto .~ b & speed .~ 1.5
            & ang .~ fromIntegral i*2*pi/fromIntegral n