diff --git a/Bone Market Solver.py b/Bone Market Solver.py index a22e817..1d72cca 100644 --- a/Bone Market Solver.py +++ b/Bone Market Solver.py @@ -12,6 +12,7 @@ from os import cpu_count from ortools.sat.python import cp_model from data.costs import Cost +from data.skulls import Skull from data.torsos import Torso from objects.action import Action @@ -68,150 +69,6 @@ cp_model.CpModel.AddGeneralMultiplicationEquality = AddGeneralMultiplicationEqua del AddGeneralMultiplicationEquality -class Skull(Enum): - """An action that is taken immediately after starting a skeleton.""" - - BAPTIST_SKULL = Action( - "Duplicate the skull of John the Baptist, if you can call that a skull", - cost = Cost.ACTION.value + 500*Cost.BONE_FRAGMENT.value + 10*Cost.PEPPERCAPS.value, - value = 1250, - skulls_needed = -1, - skulls = 1, - counter_church = 1 - ) - - BRASS_SKULL = Action( - "Affix a Bright Brass Skull to your (Skeleton Type)", - cost = Cost.ACTION.value + Cost.BRASS_SKULL.value + 200*Cost.NEVERCOLD_BRASS.value, - value = 6500, - skulls_needed = -1, - skulls = 1, - implausibility = 2 - ) - - CORAL_SKULL = Action( - "Affix a Skull in Coral to your (Skeleton Type)", - cost = Cost.ACTION.value + Cost.CORAL_SKULL.value + Cost.SCINTILLACK.value, - value = 1750, - skulls_needed = -1, - skulls = 1, - amalgamy = 2 - ) - - DOUBLED_SKULL = Action( - "Affix a Doubled Skull to your (Skeleton Type)", - cost = Cost.ACTION.value + Cost.DOUBLED_SKULL.value, - value = 6250, - skulls_needed = -1, - skulls = 2, - amalgamy = 1, - antiquity = 2 - ) - - # Adds Exhaustion - # ENGRAVED_SKULL = Action( - # "Affix a Custom-Engraved Skull to your (Skeleton Type)", - # cost = Cost.ACTION.value + Cost.ENGRAVED_SKULL.value, - # value = 10000, - # skulls_needed = -1, - # skulls = 1, - # exhaustion = 2 - # ) - - EYELESS_SKULL = Action( - "Affix an Eyeless Skull to your (Skeleton Type)", - cost = Cost.ACTION.value + Cost.EYELESS_SKULL.value, - value = 3000, - skulls_needed = -1, - skulls = 1, - menace = 2 - ) - - HORNED_SKULL = Action( - "Affix a Horned Skull to your (Skeleton Type)", - cost = Cost.ACTION.value + Cost.HORNED_SKULL.value, - value = 1250, - skulls_needed = -1, - skulls = 1, - antiquity = 1, - menace = 2 - ) - - # Seeking the Name of Mr. Eaten - # OWN_SKULL = Action( - # "Duplicate your own skull and affix it here", - # cost = Cost.ACTION.value + 1000*Cost.BONE_FRAGMENT.value, - # value = -250, - # skulls_needed = -1, - # skulls = 1 - # ) - - PENTAGRAMMIC_SKULL = Action( - "Affix a Pentagrammic Skull to your (Skeleton Type)", - cost = Cost.ACTION.value + Cost.PENTAGRAMMIC_SKULL.value, - value = 1250, - skulls_needed = -1, - skulls = 1, - amalgamy = 2, - menace = 1 - ) - - PLATED_SKULL = Action( - "Affix a Plated Skull to your (Skeleton Type)", - cost = Cost.ACTION.value + Cost.PLATED_SKULL.value, - value = 2500, - skulls_needed = -1, - skulls = 1, - menace = 2 - ) - - RUBBERY_SKULL = Action( - "Affix a Rubbery Skull to your (Skeleton Type)", - cost = Cost.ACTION.value + Cost.RUBBERY_SKULL.value, - value = 600, - skulls_needed = -1, - skulls = 1, - amalgamy = 1 - ) - - SABRE_TOOTHED_SKULL = Action( - "Affix a Sabre-toothed Skull to your (Skeleton Type)", - cost = Cost.ACTION.value + Cost.SABRE_TOOTHED_SKULL.value, - value = 6250, - skulls_needed = -1, - skulls = 1, - antiquity = 1, - menace = 1 - ) - - STYGIAN_IVORY = Action( - "Use a Carved Ball of Stygian Ivory to cap off your (Skeleton Type)", - cost = Cost.ACTION.value + Cost.STYGIAN_IVORY.value, - value = 250, - skulls_needed = -1 - ) - - VAKE_SKULL = Action( - "Duplicate the Vake's skull and use it to decorate your (Skeleton Type)", - cost = Cost.ACTION.value + 6000*Cost.BONE_FRAGMENT.value, - value = 6500, - skulls_needed = -1, - skulls = 1, - menace = 3 - ) - - # Licentiate - # VICTIM_SKULL = Action( - # "Cap this with a victim’s skull", - # cost = Cost.ACTION.value, - # value = 250, - # skulls_needed = -1, - # skulls = 1 - # ) - - def __str__(self): - return str(self.value) - class Appendage(Enum): """An action that is taken once all skulls are added to a skeleton.""" diff --git a/data/skulls.py b/data/skulls.py new file mode 100644 index 0000000..d383a05 --- /dev/null +++ b/data/skulls.py @@ -0,0 +1,148 @@ +from enum import Enum + +from data.costs import Cost +from objects.action import Action + +class Skull(Enum): + """An action that is taken immediately after starting a skeleton.""" + + BAPTIST_SKULL = Action( + "Duplicate the skull of John the Baptist, if you can call that a skull", + cost = Cost.ACTION.value + 500*Cost.BONE_FRAGMENT.value + 10*Cost.PEPPERCAPS.value, + value = 1250, + skulls_needed = -1, + skulls = 1, + counter_church = 1 + ) + + BRASS_SKULL = Action( + "Affix a Bright Brass Skull to your (Skeleton Type)", + cost = Cost.ACTION.value + Cost.BRASS_SKULL.value + 200*Cost.NEVERCOLD_BRASS.value, + value = 6500, + skulls_needed = -1, + skulls = 1, + implausibility = 2 + ) + + CORAL_SKULL = Action( + "Affix a Skull in Coral to your (Skeleton Type)", + cost = Cost.ACTION.value + Cost.CORAL_SKULL.value + Cost.SCINTILLACK.value, + value = 1750, + skulls_needed = -1, + skulls = 1, + amalgamy = 2 + ) + + DOUBLED_SKULL = Action( + "Affix a Doubled Skull to your (Skeleton Type)", + cost = Cost.ACTION.value + Cost.DOUBLED_SKULL.value, + value = 6250, + skulls_needed = -1, + skulls = 2, + amalgamy = 1, + antiquity = 2 + ) + + # Adds Exhaustion + # ENGRAVED_SKULL = Action( + # "Affix a Custom-Engraved Skull to your (Skeleton Type)", + # cost = Cost.ACTION.value + Cost.ENGRAVED_SKULL.value, + # value = 10000, + # skulls_needed = -1, + # skulls = 1, + # exhaustion = 2 + # ) + + EYELESS_SKULL = Action( + "Affix an Eyeless Skull to your (Skeleton Type)", + cost = Cost.ACTION.value + Cost.EYELESS_SKULL.value, + value = 3000, + skulls_needed = -1, + skulls = 1, + menace = 2 + ) + + HORNED_SKULL = Action( + "Affix a Horned Skull to your (Skeleton Type)", + cost = Cost.ACTION.value + Cost.HORNED_SKULL.value, + value = 1250, + skulls_needed = -1, + skulls = 1, + antiquity = 1, + menace = 2 + ) + + # Seeking the Name of Mr. Eaten + # OWN_SKULL = Action( + # "Duplicate your own skull and affix it here", + # cost = Cost.ACTION.value + 1000*Cost.BONE_FRAGMENT.value, + # value = -250, + # skulls_needed = -1, + # skulls = 1 + # ) + + PENTAGRAMMIC_SKULL = Action( + "Affix a Pentagrammic Skull to your (Skeleton Type)", + cost = Cost.ACTION.value + Cost.PENTAGRAMMIC_SKULL.value, + value = 1250, + skulls_needed = -1, + skulls = 1, + amalgamy = 2, + menace = 1 + ) + + PLATED_SKULL = Action( + "Affix a Plated Skull to your (Skeleton Type)", + cost = Cost.ACTION.value + Cost.PLATED_SKULL.value, + value = 2500, + skulls_needed = -1, + skulls = 1, + menace = 2 + ) + + RUBBERY_SKULL = Action( + "Affix a Rubbery Skull to your (Skeleton Type)", + cost = Cost.ACTION.value + Cost.RUBBERY_SKULL.value, + value = 600, + skulls_needed = -1, + skulls = 1, + amalgamy = 1 + ) + + SABRE_TOOTHED_SKULL = Action( + "Affix a Sabre-toothed Skull to your (Skeleton Type)", + cost = Cost.ACTION.value + Cost.SABRE_TOOTHED_SKULL.value, + value = 6250, + skulls_needed = -1, + skulls = 1, + antiquity = 1, + menace = 1 + ) + + STYGIAN_IVORY = Action( + "Use a Carved Ball of Stygian Ivory to cap off your (Skeleton Type)", + cost = Cost.ACTION.value + Cost.STYGIAN_IVORY.value, + value = 250, + skulls_needed = -1 + ) + + VAKE_SKULL = Action( + "Duplicate the Vake's skull and use it to decorate your (Skeleton Type)", + cost = Cost.ACTION.value + 6000*Cost.BONE_FRAGMENT.value, + value = 6500, + skulls_needed = -1, + skulls = 1, + menace = 3 + ) + + # Licentiate + # VICTIM_SKULL = Action( + # "Cap this with a victim’s skull", + # cost = Cost.ACTION.value, + # value = 250, + # skulls_needed = -1, + # skulls = 1 + # ) + + def __str__(self): + return str(self.value)