Source code for tuxemon.item.effects.evolve

# SPDX-License-Identifier: GPL-3.0
# Copyright (c) 2014-2023 William Edwards <shadowapex@gmail.com>, Benjamin Bean <superman2k5@gmail.com>
from __future__ import annotations

import random
from dataclasses import dataclass
from typing import TYPE_CHECKING, Union

from tuxemon.item.itemeffect import ItemEffect, ItemEffectResult

if TYPE_CHECKING:
    from tuxemon.item.item import Item
    from tuxemon.monster import Monster


[docs]class EvolveEffectResult(ItemEffectResult): pass
[docs]@dataclass class EvolveEffect(ItemEffect): """This effect evolves the target into the monster in the parameters.""" name = "evolve"
[docs] def apply( self, item: Item, target: Union[Monster, None] ) -> EvolveEffectResult: assert target evolve: bool = False if item.slug == "booster_tech": choices = [d for d in target.evolutions if d.path == "item"] evolution = random.choice(choices).monster_slug self.user.evolve_monster(target, evolution) evolve = True else: choices = [d for d in target.evolutions if d.item == item.slug] if len(choices) == 1: self.user.evolve_monster(target, choices[0].monster_slug) evolve = True elif len(choices) > 1: evolution = random.choice(choices).monster_slug self.user.evolve_monster(target, evolution) evolve = True return {"success": evolve, "num_shakes": 0, "extra": None}