     %{ship | :laser_charged_at => now_ms() + @laser_recharge_penalty_ms}
   end
 
+  defp recharge_shields(ship), do: %{ship | shields: @max_shields}
+
   # defimpl Elixoids.Game.Heartbeat.Tick do
   def handle_tick(_pid, delta_t_ms, ship = %{game_id: game_id}) do
     new_ship = ship |> rotate_ship(delta_t_ms)

    new_ship =
      %{ship | pos: random_ship_point(), theta: random_angle()}
      |> discharge_laser

    {:noreply, new_ship}
  end


  def handle_cast(
        {:bullet_hit_ship, shooter_tag},
        ship = %{pos: pos, radius: radius, game_id: game_id, tag: tag}
      ) do
    hyperspace(self())
    Elixoids.Game.Server.explosion(game_id, pos, radius)
    publish_news(game_id, [shooter_tag, "kills", tag])

    {:noreply, ship}
  end

  def handle_cast({:new_heading, theta}, ship) do
