def __init__(self, attack=None, defense=None, speed=None, spook_rate=None, spook_power=None):
        if spook_power is not None and spook_power < 0:
            raise ValueError("spook_power must be greater than zero. Specified value was " + spook_power)
        self.ATTACK_BOOST = attack if attack is not None else generate_attribute(self._AVERAGE_ATK_BOOST,
                                                                                 self._ATK_SPREAD)
        self.DEFENSE_BOOST = defense if defense is not None else generate_attribute(self._AVERAGE_DEF_BOOST,
                                                                                    self._DEF_SPREAD)
        self.SPEED_BOOST = speed if speed is not None else generate_attribute(self._AVERAGE_SPEED_BOOST,
                                                                              self._SPEED_SPREAD)
        self.SPOOK_RATE = spook_rate if spook_rate is not None else generate_attribute(self._AVERAGE_SPOOK_RATE,
                                                                                       self._SPOOK_RATE_SPREAD)
        self.SPOOK_POWER = spook_power if spook_power is not None else generate_attribute(self._AVERAGE_SPOOK_POWER,
                                                                                          self._SPOOK_POWER_SPREAD)

        # Primary value is used by implementations of base item to indicate to item manager how the items are to
        # be prioritized. For example, a sword's primary value is attack and a shield's primary value is defense.
        # Swords will be ranked by their attack points and shields will be ranked by their defiense points.
        self.PRIMARY_VALUE = lambda: raise_(NotImplementedError("PRIMARY_VALUE is not implemented."))
 def _build_conflict_manager(self, player_manager):
     raise_(NotImplementedError("This function has not been implemented"))