__all__ = ['Appendage'] __author__ = "Jeremy Saklad" from enum import Enum from .costs import Cost from ..objects.action import Action from ..read_char import * from ..challenge_functions import narrow_challenge, mean_outcome class Appendage(Enum): """An action that is taken once all skulls are added to a skeleton.""" # Cost from this scales with limbs and is partially implemented separately ADD_JOINTS = Action( "Add four more joints to your skeleton", cost = Cost.ACTION.value + Cost.TREMBLING_AMBER.value, limbs_needed = 4, amalgamy = 2 ) # TODO: Difficulty is increased by 2 for each Fin or Tentacle on the skeleton ALBATROSS_WING = Action( "Put an Albatross Wing on your (Skeleton Type)", cost = Cost.ACTION.value + Cost.ALBATROSS_WING.value, value = 1250, limbs_needed = -1, wings = 1, amalgamy = 1 ) # TODO: Difficulty is increased by 2 for each Arm, Leg, Wing, and Tentacle that is already attached AMBER_FIN = Action( "Attach the Amber-Crusted Fin to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.AMBER_FIN.value, value = 1500, limbs_needed = -1, fins = 1, amalgamy = 1, menace = 1 ) # TODO: Difficulty is increased with Fins on the skeleton BAT_WING = Action( "Add a Bat Wing to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.BAT_WING.value, value = 1, limbs_needed = -1, wings = 1, menace = -1 ) BLACK_STINGER = Action( "Apply a Jet Black Stinger to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.BLACK_STINGER.value, value = 50, tails_needed = -1, tails = 1, menace = mean_outcome(2, 1, narrow_challenge(4, Char.MONSTROUS_ANATOMY.value)) ) CRUSTACEAN_PINCER = Action( "Apply a Crustacean Pincer to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.CRUSTACEAN_PINCER.value, limbs_needed = -1, arms = 1, menace = 1 ) DEER_FEMUR = Action( "Apply the Femur of a Surface Deer to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.DEER_FEMUR.value, value = 10, limbs_needed = -1, legs = 1, menace = -1 ) # Counter-Church theology from this scales with torso style and is implemented separately FIACRE_THIGH = Action( "Affix Saint Fiacre's Thigh Relic to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.FIACRE_THIGH.value, value = 1250, limbs_needed = -1, legs = 1 ) # TODO: Base challenge: Narrow, Monstrous Anatomy 1 # The difficulty is increased by 2 for each Arm, Leg, Wing, and Tentacle already attached to your skeleton. FIN_BONES = Action( "Put Fins on your (Skeleton Type)", cost = Cost.ACTION.value + Cost.FIN_BONES.value, value = 50, limbs_needed = -1, fins = 1 ) FOSSILISED_FORELIMB = Action( "Apply a Fossilised Forelimb to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.FOSSILISED_FORELIMB.value, value = 2750, limbs_needed = -1, arms = 1, antiquity = mean_outcome(2, 1, narrow_challenge(11, Char.MONSTROUS_ANATOMY.value)) ) HELICAL_THIGH = Action( "Affix the Helical Thighbone to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.HELICAL_THIGH.value, value = 300, limbs_needed = -1, legs = 1, amalgamy = mean_outcome(2, 1, narrow_challenge(6, Char.SHAPELING_ARTS.value)) ) HUMAN_ARM = Action( "Join a Human Arm to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.HUMAN_ARM.value, value = 250, limbs_needed = -1, arms = 1, menace = -1 ) IVORY_FEMUR = Action( "Apply an Ivory Femur to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.IVORY_FEMUR.value, value = 6500, limbs_needed = -1, legs = 1 ) IVORY_HUMERUS = Action( "Apply an Ivory Humerus to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.IVORY_HUMERUS.value, value = 1500, limbs_needed = -1, arms = 1 ) JURASSIC_THIGH = Action( "Apply a Jurassic Thigh Bone to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.JURASSIC_FEMUR.value, value = 300, limbs_needed = -1, legs = 1, antiquity = 1 ) KNOTTED_HUMERUS = Action( "Apply a Knotted Humerus to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.KNOTTED_HUMERUS.value, value = 300, limbs_needed = -1, arms = 1, amalgamy = 1 ) OBSIDIAN_TAIL = Action( "Apply an Obsidian Chitin Tail to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.OBSIDIAN_TAIL.value, value = 500, tails_needed = -1, tails = 1, amalgamy = 1 ) PLASTER_TAIL_BONES = Action( "Apply Plaster Tail Bones to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.PLASTER_TAIL_BONES.value, value = 250, tails_needed = -1, tails = 1, implausibility = 1 ) TERROR_BIRD_WING = Action( "Add the Wing of a Young Terror Bird to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.TERROR_BIRD_WING.value, value = 250, limbs_needed = -1, wings = 1, antiquity = 1, menace = 1 ) TOMB_LION_TAIL = Action( "Apply a Tomb-Lion's Tail to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.TOMB_LION_TAIL.value, value = 250, tails_needed = -1, tails = 1, antiquity = 1 ) UNIDENTIFIED_THIGH = Action( "Apply an Unidentified Thigh Bone to your (Skeleton Type)", cost = Cost.ACTION.value + Cost.UNIDENTIFIED_THIGH.value, value = 100, limbs_needed = -1, legs = 1 ) WITHERED_TAIL = Action( "Apply a Withered Tentacle as a tail on your (Skeleton Type)", cost = Cost.ACTION.value + Cost.WITHERED_TENTACLE.value, value = 250, tails_needed = -1, tails = 1, antiquity = -1 ) WITHERED_TENTACLE = Action( "Put a Withered Tentacle on your (Skeleton Type)", cost = Cost.ACTION.value + Cost.WITHERED_TENTACLE.value, value = 250, limbs_needed = -1, tentacles = 1, antiquity = -1 ) REMOVE_TAIL = Action( "Remove the tail from your (Skeleton Type)", cost = Cost.ACTION.value, tails = -1 ) # This sets Skeleton: Tails Needed to 0 and is implemented separately SKIP_TAILS = Action( "Decide your Tailless Animal needs no tail", cost = Cost.ACTION.value ) def __str__(self): return str(self.value)