docs: def start_new_particles(self):
          """
          Start some new particles from the emitters. We roll the dice
          starts_at_once times, seeing if we can start each particle based
          on starts_prob. If we start, the particle gets a color form
          the palette and a velocity from the vel list.
          """
          for e_pos, e_dir, e_vel, e_range, e_color, e_pal in self.emitters:
              for roll in range(self.starts_at_once):
                  if random.random() < self.starts_prob:  # Start one?
                      p_vel = self.vel[random.choice(len(self.vel))]
                      if e_dir < 0 or e_dir == 0 and random.random() > 0.5:
                          p_vel = -p_vel
                      self.particles.append((
                          p_vel,  # Velocity
                          e_pos,  # Position
                          int(e_range // abs(p_vel)),  # steps to live
                          e_pal[
                              random.choice(len(e_pal))],  # Color
                          255))