Skip to content

Skill Tree

Moti Barski edited this page Mar 13, 2026 · 2 revisions

You're right - that wasn't in proper GitHub Wiki format. Here's the corrected version:


Shinka Class

Overview

The Shinka class is a unique skill class that allows base skills to be upgraded modularly with upgrade skills. When an upgrade skill activates, it temporarily overrides the base skill's behavior. This enables modular skill augmentation as well as flexible skill evolution logic implementation in Shinka subclasses during runtime.

class Shinka(Skill):
    """
    this is a zipped skill, in which newly added skills have override priority
    to be active.
    this is a skill bundle acting as a single skill.
    """

    def __init__(self, *skills: Skill):
        super().__init__()
        self.upgrades: list[Skill] = []
        if not skills:
            self.upgrades.append(DiFunnel())
        else:
            for skill in skills:
                self.upgrades.append(skill)
        self.active_upgrade = 0

    def add_skill(self, skill: Skill):
        if skill.get_skill_type() == 2:
            return
        skill.setKokoro(self.getKokoro())
        self.upgrades.append(skill)

    def input(self, ear: str, skin: str, eye: str):
        for i, upgrade in enumerate(reversed(self.upgrades)):
            idx = len(self.upgrades) - 1 - i
            upgrade.input(ear, skin, eye)
            if upgrade.pendingAlgorithm():
                self.active_upgrade = idx
                return

    def setKokoro(self, kokoro: Kokoro):
        self._kokoro = kokoro  # potential usage in sub classes for runtime upgrades mode.
        for upgrade in self.upgrades:
            upgrade.setKokoro(kokoro)

    def pendingAlgorithm(self) -> bool:
        return self.upgrades[self.active_upgrade].pendingAlgorithm()

    def output(self, neuron: Neuron):
        self.upgrades[self.active_upgrade].output(neuron)
        self.active_upgrade = 0

    def skillNotes(self, param: str) -> str:
        return self.upgrades[self.active_upgrade].skillNotes(param)

Clone this wiki locally