From b002ca6e9620b3cd0edea8990327a43991efeeb7 Mon Sep 17 00:00:00 2001 From: TheTaques <35156969+TheTaques@users.noreply.github.com> Date: Tue, 24 Aug 2021 13:18:20 +0200 Subject: [PATCH] WIP: char stat adjusted skeleton actions --- bonemarketsolver/data/adjustments.py | 39 +++++++++++++++++++++---- bonemarketsolver/data/appendages.py | 17 ++++++++++- bonemarketsolver/data/embellishments.py | 27 ++++++++++++++++- 3 files changed, 75 insertions(+), 8 deletions(-) diff --git a/bonemarketsolver/data/adjustments.py b/bonemarketsolver/data/adjustments.py index 6d59d01..7fcba4e 100644 --- a/bonemarketsolver/data/adjustments.py +++ b/bonemarketsolver/data/adjustments.py @@ -5,26 +5,53 @@ from enum import Enum from .costs import Cost from ..objects.action import Action +from ..read_char import * + + +def _narrow_challenge_6(stat: int): + if 0 < stat < 11: + chance = stat/10 + elif stat < 1: + chance = .1 + else: + chance = 1 + + return chance + + +def _implausibility(stat: int): + chance = _narrow_challenge_6(stat) + + if chance == 1: + return 0 + else: + failure_actions = (1 / chance) - 1 + implausibility = 2 * failure_actions + return implausibility + class Adjustment(Enum): """An action that is taken after all parts have been added to a skeleton.""" CARVE_AWAY_AGE = Action( "Carve away some evidence of age", - cost = Cost.ACTION.value, - antiquity = -2 + cost = Cost.ACTION.value / _narrow_challenge_6(Char.MITHRIDACY.value), + antiquity = -2, + implausibility = _implausibility(Char.MITHRIDACY.value) ) DISGUISE_AMALGAMY = Action( "Disguise the amalgamy of this piece", - cost = Cost.ACTION.value + 25*Cost.JADE_FRAGMENT.value, - amalgamy = -2 + cost = 25*Cost.JADE_FRAGMENT.value + Cost.ACTION.value / _narrow_challenge_6(Char.KATALEPTIC_TOXICOLOGY.value), + amalgamy = -2, + implausibility = _implausibility(Char.KATALEPTIC_TOXICOLOGY.value) ) MAKE_LESS_DREADFUL = Action( "Make your skeleton less dreadful", - cost = Cost.ACTION.value, - menace = -2 + cost = Cost.ACTION.value / _narrow_challenge_6(Char.KATALEPTIC_TOXICOLOGY.value), + menace = -2, + implausibility = _implausibility(Char.KATALEPTIC_TOXICOLOGY.value) ) def __str__(self): diff --git a/bonemarketsolver/data/appendages.py b/bonemarketsolver/data/appendages.py index f235413..b9bba21 100644 --- a/bonemarketsolver/data/appendages.py +++ b/bonemarketsolver/data/appendages.py @@ -5,6 +5,18 @@ from enum import Enum from .costs import Cost from ..objects.action import Action +from ..read_char import * + + +def _narrow_challenge_4(stat: int): + stat += 2 + if stat < 8: + chance = stat/10 + else: + chance = 1 + + return chance + class Appendage(Enum): """An action that is taken once all skulls are added to a skeleton.""" @@ -17,6 +29,7 @@ class Appendage(Enum): 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, @@ -26,6 +39,7 @@ class Appendage(Enum): 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, @@ -36,6 +50,7 @@ class Appendage(Enum): 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, @@ -51,7 +66,7 @@ class Appendage(Enum): value = 50, tails_needed = -1, tails = 1, - menace = 2 + menace = 2 * _narrow_challenge_4(Char.MONSTROUS_ANATOMY.value) + 1 * (1 - _narrow_challenge_4(Char.MONSTROUS_ANATOMY.value)) ) CRUSTACEAN_PINCER = Action( diff --git a/bonemarketsolver/data/embellishments.py b/bonemarketsolver/data/embellishments.py index 138e073..6b045b1 100644 --- a/bonemarketsolver/data/embellishments.py +++ b/bonemarketsolver/data/embellishments.py @@ -5,6 +5,31 @@ from enum import Enum from .costs import Cost from ..objects.action import Action +from ..read_char import * + + +def _narrow_challenge_6(stat: int): + if 0 < stat < 11: + chance = stat/10 + elif stat < 1: + chance = .1 + else: + chance = 1 + + return chance + + +def _convincing_history_cost(): + chance = _narrow_challenge_6(Char.KATALEPTIC_TOXICOLOGY.value) + + if chance == 1: + cost = 3*Cost.REVISIONIST_NARRATIVE.value + Cost.ACTION.value + else: + actions = 1 / chance + cost = actions * Cost.ACTION.value + cost += Cost.REVISIONIST_NARRATIVE.value * (3 + actions - 1) + return cost + class Embellishment(Enum): """An action is taken after a declaration has been made for a skeleton.""" @@ -17,7 +42,7 @@ class Embellishment(Enum): CONVINCING_HISTORY = Action( "Invest great time and skill in coming up with a convincing history", - cost = Cost.ACTION.value + 3*Cost.REVISIONIST_NARRATIVE.value, + cost = _convincing_history_cost(), implausibility = -5 )