From 1204909151197969706a8845a02a987de74be0d1 Mon Sep 17 00:00:00 2001 From: Jeremy Saklad Date: Sat, 12 Jun 2021 15:51:56 -0500 Subject: [PATCH] Move tail values to Value The cost of applying each tail has been broken down and moved to value. Skipping tails remains slightly flawed, and will be cleaned up in the future. Appendage has once again been cleaned up and sorted lexicographically. Removing and skipping tails remain at the bottom, as they must be done after adding tails. Due to integer overflow issues, both Value.EYELESS_SKULL and Value.OBSIDIAN_TAIL now have a value of cp_model.INT32_MAX/2. If this issue recurs, dividing by successively larger powers of 2 may be necessary. --- Bone Market Solver.py | 88 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 71 insertions(+), 17 deletions(-) diff --git a/Bone Market Solver.py b/Bone Market Solver.py index 2401a21..9d06847 100644 --- a/Bone Market Solver.py +++ b/Bone Market Solver.py @@ -75,7 +75,7 @@ class Value(enum.Enum): # Eyeless Skull # No consistent source - EYELESS_SKULL = cp_model.INT32_MAX + EYELESS_SKULL = cp_model.INT32_MAX/2 # Holy Relic of the Thigh of Saint Fiacre # Jericho Locks statue, 2 at a time @@ -145,6 +145,10 @@ class Value(enum.Enum): # Nevercold Brass Sliver NEVERCOLD_BRASS = 1 + # Obsidian Chitin Tail + # No consistent source + OBSIDIAN_TAIL = cp_model.INT32_MAX/2 + # Parabolan Orange-apple # Parabolan Base-camp, electricity and hedonism, 2 at a time ORANGE_APPLE = (2*ACTION + 100*BONE_FRAGMENT + 21*HEDONIST_CP)/2 @@ -188,6 +192,10 @@ class Value(enum.Enum): # Laboratory Research SURVEY = 6*ACTION/25 + # Plaster Tail Bones + # Carpenter's Granddaughter, 2 at a time + PLASTER_TAIL_BONES = (ACTION + 10*SURVEY)/2 + # Human Ribcage # Ealing Gardens HUMAN_RIBCAGE = ACTION + 15*SURVEY @@ -242,6 +250,10 @@ class Value(enum.Enum): # Rumour of the Upper River RUMOUR_OF_THE_UPPER_RIVER = 250 + # Jet Black Stinger + # Hunting with Sophia's, 5 at a time + BLACK_STINGER = (ACTION + 5*RUMOUR_OF_THE_UPPER_RIVER)/5 + # Prismatic Frame # Expedition at Station VIII PRISMATIC_FRAME = ACTION + OIL_OF_COMPANIONSHIP + 98*RUMOUR_OF_THE_UPPER_RIVER @@ -277,6 +289,10 @@ class Value(enum.Enum): # Ealing Gardens Butcher, 2 at a time TERROR_BIRD_WING = (ACTION + 100*BONE_FRAGMENT + 25*WARM_AMBER)/2 + # Tomb-Lion's Tail + # Ealing Gardens Butcher + TOMB_LION_TAIL = ACTION + 200*BONE_FRAGMENT + 2*WARM_AMBER + # Warbler Skeleton # Ealing Gardens Butcher WARBLER_SKELETON = ACTION + 130*BONE_FRAGMENT + 2*WARM_AMBER @@ -725,6 +741,14 @@ class Appendage(enum.Enum): menace = -1 ) + BLACK_STINGER = Action("Apply a Jet Black Stinger to your (Skeleton Type)", + cost = Value.ACTION.value + Value.BLACK_STINGER.value, + value = 50, + tails_needed = -1, + tails = 1, + menace = 2 + ) + CRUSTACEAN_PINCER = Action( "Apply a Crustacean Pincer to your (Skeleton Type)", cost = Value.ACTION.value + Value.CRUSTACEAN_PINCER.value, @@ -820,6 +844,24 @@ class Appendage(enum.Enum): amalgamy = 1 ) + OBSIDIAN_TAIL = Action( + "Apply an Obsidian Chitin Tail to your (Skeleton Type)", + cost = Value.ACTION.value + Value.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 = Value.ACTION.value + Value.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 = Value.ACTION.value + Value.TERROR_BIRD_WING.value, @@ -830,6 +872,15 @@ class Appendage(enum.Enum): menace = 1 ) + TOMB_LION_TAIL = Action( + "Apply a Tomb-Lion's Tail to your (Skeleton Type)", + cost = Value.ACTION.value + Value.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 = Value.ACTION.value + Value.UNIDENTIFIED_THIGH.value, @@ -838,6 +889,15 @@ class Appendage(enum.Enum): legs = 1 ) + WITHERED_TAIL = Action( + "Apply a Withered Tentacle as a tail on your (Skeleton Type)", + cost = Value.ACTION.value + Value.WITHERED_TENTACLE.value, + value = 250, + tails_needed = -1, + tails = 1, + antiquity = -1 + ) + WITHERED_TENTACLE = Action( "Put a Withered Tentacle on your (Skeleton Type)", cost = Value.ACTION.value + Value.WITHERED_TENTACLE.value, @@ -847,24 +907,18 @@ class Appendage(enum.Enum): antiquity = -1 ) - # Carpenter's Granddaughter, 2 at a time - PLASTER_TAIL = Action("Apply Plaster Tail Bones to your (Skeleton Type)", cost = Value.ACTION.value*1.5 + Value.SURVEY.value*5, value = 250, tails_needed = -1, tails = 1, implausibility = 1) - - TOMB_LION_TAIL = Action("Apply a Tomb-Lion's Tail to your (Skeleton Type)", cost = 220 + Value.ACTION.value*2, value = 250, tails_needed = -1, tails = 1, antiquity = 1) - - # Geology of Winewound - BLACK_STINGER = Action("Apply a Jet Black Stinger to your (Skeleton Type)", cost = Value.ACTION.value*2 + Value.SURVEY.value, value = 50, tails_needed = -1, tails = 1, menace = 2) - - # No consistent source - # OBSIDIAN_TAIL = Action("Apply an Obsidian Chitin Tail to your (Skeleton Type)", cost = cp_model.INT32_MAX, value = 500, tails_needed = -1, tails = 1, amalgamy = 1) - - # Helicon House, 3 at a time - WITHERED_TAIL = Action("Apply a Withered Tentacle as a tail on your (Skeleton Type)", cost = 50/3 + Value.ACTION.value*4/3, value = 250, tails_needed = -1, tails = 1, antiquity = -1) + REMOVE_TAIL = Action( + "Remove the tail from your (Skeleton Type)", + cost = Value.ACTION.value, + tails = -1 + ) # This actually sets Skeleton: Tails Needed to 0 - SKIP_TAILS = Action("Decide your Tailless Animal needs no tail", cost = Value.ACTION.value, tails_needed = -1) - - REMOVE_TAIL = Action("Remove the tail from your (Skeleton Type)", cost = Value.ACTION.value, tails = -1) + SKIP_TAILS = Action( + "Decide your Tailless Animal needs no tail", + cost = Value.ACTION.value, + tails_needed = -1 + ) def __str__(self): return str(self.value)