333 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			333 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Python
		
	
	
	
from dataclasses import dataclass
 | 
						|
 | 
						|
from Options import Choice, OptionGroup, PerGameCommonOptions, Range
 | 
						|
 | 
						|
 | 
						|
class GameDifficulty(Choice):
 | 
						|
    """
 | 
						|
    Difficulty. This option determines how difficult the scores are to achieve.
 | 
						|
    Easy: for beginners. No luck required, just roll the dice and have fun. Lower final goal.
 | 
						|
    Medium: intended difficulty. If you play smart, you will finish the game without any trouble.
 | 
						|
    Hard: you will need to play smart and be lucky.
 | 
						|
    Extreme: really hard mode, which requires many brain wrinkles and insane luck. NOT RECOMMENDED FOR MULTIWORLDS.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Game difficulty"
 | 
						|
    option_easy = 1
 | 
						|
    option_medium = 2
 | 
						|
    option_hard = 3
 | 
						|
    option_extreme = 4
 | 
						|
    default = 2
 | 
						|
 | 
						|
 | 
						|
class ScoreForLastCheck(Range):
 | 
						|
    """
 | 
						|
    The items in the item pool will always allow you to reach a score of 1000.
 | 
						|
    By default, the last check is also at a score of 1000.
 | 
						|
    However, you can set the score for the last check to be lower. This will make the game shorter and easier.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Score for last check"
 | 
						|
    range_start = 500
 | 
						|
    range_end = 1000
 | 
						|
    default = 1000
 | 
						|
 | 
						|
 | 
						|
class ScoreForGoal(Range):
 | 
						|
    """
 | 
						|
    This option determines what score you need to reach to finish the game.
 | 
						|
    It cannot be higher than the score for the last check (if it is, this option is changed automatically).
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Score for goal"
 | 
						|
    range_start = 500
 | 
						|
    range_end = 1000
 | 
						|
    default = 777
 | 
						|
 | 
						|
 | 
						|
class MinimalNumberOfDiceAndRolls(Choice):
 | 
						|
    """
 | 
						|
    The minimal number of dice and rolls in the pool.
 | 
						|
    These are guaranteed, unlike the later items.
 | 
						|
    You can never get more than 8 dice and 5 rolls.
 | 
						|
    You start with one dice and one roll.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Minimal number of dice and rolls in pool"
 | 
						|
    option_5_dice_and_3_rolls = 2
 | 
						|
    option_5_dice_and_5_rolls = 3
 | 
						|
    option_6_dice_and_4_rolls = 4
 | 
						|
    option_7_dice_and_3_rolls = 5
 | 
						|
    option_8_dice_and_2_rolls = 6
 | 
						|
    default = 2
 | 
						|
 | 
						|
 | 
						|
class NumberDiceFragmentsPerDice(Range):
 | 
						|
    """
 | 
						|
    Dice can be split into fragments, gathering enough will give you an extra dice.
 | 
						|
    You start with one dice, and there will always be one full dice in the pool.
 | 
						|
    The other dice are split into fragments, according to this option.
 | 
						|
    Setting this to 1 fragment per dice just puts "Dice" objects in the pool.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Number of dice fragments per dice"
 | 
						|
    range_start = 1
 | 
						|
    range_end = 5
 | 
						|
    default = 4
 | 
						|
 | 
						|
 | 
						|
class NumberRollFragmentsPerRoll(Range):
 | 
						|
    """
 | 
						|
    Rolls can be split into fragments, gathering enough will give you an extra roll.
 | 
						|
    You start with one roll, and there will always be one full roll in the pool.
 | 
						|
    The other rolls are split into fragments, according to this option.
 | 
						|
    Setting this to 1 fragment per roll just puts "Roll" objects in the pool.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Number of roll fragments per roll"
 | 
						|
    range_start = 1
 | 
						|
    range_end = 5
 | 
						|
    default = 4
 | 
						|
 | 
						|
 | 
						|
class AlternativeCategories(Range):
 | 
						|
    """
 | 
						|
    There are 16 default categories, but there are also 16 alternative categories.
 | 
						|
    These alternative categories can be randomly selected to replace the default categories.
 | 
						|
    They are a little strange, but can give a fun new experience.
 | 
						|
    In the game, you can hover over categories to check what they do.
 | 
						|
    This option determines the number of alternative categories in your game.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Number of alternative categories"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 16
 | 
						|
    default = 0
 | 
						|
 | 
						|
 | 
						|
class ChanceOfDice(Range):
 | 
						|
    """
 | 
						|
    The item pool is always filled in such a way that you can reach a score of 1000.
 | 
						|
    Extra progression items are added that will help you on your quest.
 | 
						|
    You can set the weight for each extra progressive item in the following options.
 | 
						|
 | 
						|
    Of course, more dice = more points!
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Weight of adding Dice"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 100
 | 
						|
    default = 5
 | 
						|
 | 
						|
 | 
						|
class ChanceOfRoll(Range):
 | 
						|
    """
 | 
						|
    With more rolls, you will be able to reach higher scores.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Weight of adding Roll"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 100
 | 
						|
    default = 20
 | 
						|
 | 
						|
 | 
						|
class ChanceOfFixedScoreMultiplier(Range):
 | 
						|
    """
 | 
						|
    Getting a Fixed Score Multiplier will boost all future scores by 10%.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Weight of adding Fixed Score Multiplier"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 100
 | 
						|
    default = 30
 | 
						|
 | 
						|
 | 
						|
class ChanceOfStepScoreMultiplier(Range):
 | 
						|
    """
 | 
						|
    The Step Score Multiplier boosts your multiplier after every roll by 1%, and resets on sheet reset.
 | 
						|
    So, keep high scoring categories for later to get the most out of them.
 | 
						|
    By default, this item is not included. It is fun however, you just need to know the above strategy.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Weight of adding Step Score Multiplier"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 100
 | 
						|
    default = 0
 | 
						|
 | 
						|
 | 
						|
class ChanceOfDoubleCategory(Range):
 | 
						|
    """
 | 
						|
    This option allows categories to appear multiple times.
 | 
						|
    Each time you get a category after the first, its score value gets doubled.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Weight of adding Category copy"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 100
 | 
						|
    default = 50
 | 
						|
 | 
						|
 | 
						|
class ChanceOfPoints(Range):
 | 
						|
    """
 | 
						|
    Are you tired of rolling dice countless times and tallying up points one by one, all by yourself? 
 | 
						|
    Worry not, as this option will simply add some points items to the item pool! 
 | 
						|
    And getting one of these points items gives you... points!
 | 
						|
    Imagine how nice it would be to find tons of them. Or even better, having others find them FOR you!
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Weight of adding Points"
 | 
						|
    range_start = 0
 | 
						|
    range_end = 100
 | 
						|
    default = 20
 | 
						|
 | 
						|
 | 
						|
class PointsSize(Choice):
 | 
						|
    """
 | 
						|
    If you choose to add points to the item pool, you can choose to have many small points,
 | 
						|
    medium-size points, a few larger points, or a mix of them.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Size of points"
 | 
						|
    option_small = 1
 | 
						|
    option_medium = 2
 | 
						|
    option_large = 3
 | 
						|
    option_mix = 4
 | 
						|
    default = 2
 | 
						|
 | 
						|
 | 
						|
class MinimizeExtraItems(Choice):
 | 
						|
    """
 | 
						|
    Besides necessary items, Yacht Dice has extra useful/filler items in the item pool.
 | 
						|
    It is possible however to decrease the number of locations and extra items.
 | 
						|
    This option will:
 | 
						|
    - decrease the number of locations at the start (you'll start with 2 dice and 2 rolls).
 | 
						|
    - will limit the number of dice/roll fragments per dice/roll to 2.
 | 
						|
    - in multiplayer games, it will reduce the number of filler items.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Minimize extra items"
 | 
						|
    option_no_dont = 1
 | 
						|
    option_yes_please = 2
 | 
						|
    default = 1
 | 
						|
 | 
						|
 | 
						|
class AddExtraPoints(Choice):
 | 
						|
    """
 | 
						|
    Yacht Dice typically has space for extra items.
 | 
						|
    This option determines if bonus points are put into the item pool.
 | 
						|
    They make the game a little bit easier, as they are not considered in the logic.
 | 
						|
 | 
						|
    All Of It: fill all locations with extra points
 | 
						|
    Sure: put some bonus points in
 | 
						|
    Never: do not put any bonus points
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Extra bonus in the pool"
 | 
						|
    option_all_of_it = 1
 | 
						|
    option_sure = 2
 | 
						|
    option_never = 3
 | 
						|
    default = 2
 | 
						|
 | 
						|
 | 
						|
class AddStoryChapters(Choice):
 | 
						|
    """
 | 
						|
    Yacht Dice typically has space for more items.
 | 
						|
    This option determines if extra story chapters are put into the item pool.
 | 
						|
    Note: if you have extra points on "all_of_it", there will not be story chapters.
 | 
						|
 | 
						|
    All Of It: fill all locations with story chapters
 | 
						|
    Sure: if there is space left, put in 10 story chapters.
 | 
						|
    Never: do not put any story chapters in, I do not like reading (but I am glad you are reading THIS!)
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Extra story chapters in the pool"
 | 
						|
    option_all_of_it = 1
 | 
						|
    option_sure = 2
 | 
						|
    option_never = 3
 | 
						|
    default = 3
 | 
						|
 | 
						|
 | 
						|
class WhichStory(Choice):
 | 
						|
    """
 | 
						|
    The most important part of Yacht Dice is the narrative.
 | 
						|
    Of course you will need to add story chapters to the item pool.
 | 
						|
    You can read story chapters in the feed on the website and there are several stories to choose from.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Story"
 | 
						|
    option_the_quest_of_the_dice_warrior = 1
 | 
						|
    option_the_tragedy_of_fortunas_gambit = 2
 | 
						|
    option_the_dicey_animal_dice_game = 3
 | 
						|
    option_whispers_of_fate = 4
 | 
						|
    option_a_yacht_dice_odyssey = 5
 | 
						|
    option_a_rollin_rhyme_adventure = 6
 | 
						|
    option_random_story = -1
 | 
						|
    default = -1
 | 
						|
 | 
						|
 | 
						|
class AllowManual(Choice):
 | 
						|
    """
 | 
						|
    If allowed, players can roll IRL dice and input them manually into the game.
 | 
						|
    By sending "manual" in the chat, an input field appears where you can type your dice rolls.
 | 
						|
    Of course, we cannot check anymore if the player is playing fair.
 | 
						|
    """
 | 
						|
 | 
						|
    display_name = "Allow manual inputs"
 | 
						|
    option_yes_allow = 1
 | 
						|
    option_no_dont_allow = 2
 | 
						|
    default = 1
 | 
						|
 | 
						|
 | 
						|
@dataclass
 | 
						|
class YachtDiceOptions(PerGameCommonOptions):
 | 
						|
    game_difficulty: GameDifficulty
 | 
						|
    score_for_last_check: ScoreForLastCheck
 | 
						|
    score_for_goal: ScoreForGoal
 | 
						|
 | 
						|
    minimal_number_of_dice_and_rolls: MinimalNumberOfDiceAndRolls
 | 
						|
    number_of_dice_fragments_per_dice: NumberDiceFragmentsPerDice
 | 
						|
    number_of_roll_fragments_per_roll: NumberRollFragmentsPerRoll
 | 
						|
 | 
						|
    alternative_categories: AlternativeCategories
 | 
						|
 | 
						|
    allow_manual_input: AllowManual
 | 
						|
 | 
						|
    # the following options determine what extra items are shuffled into the pool:
 | 
						|
    weight_of_dice: ChanceOfDice
 | 
						|
    weight_of_roll: ChanceOfRoll
 | 
						|
    weight_of_fixed_score_multiplier: ChanceOfFixedScoreMultiplier
 | 
						|
    weight_of_step_score_multiplier: ChanceOfStepScoreMultiplier
 | 
						|
    weight_of_double_category: ChanceOfDoubleCategory
 | 
						|
    weight_of_points: ChanceOfPoints
 | 
						|
    points_size: PointsSize
 | 
						|
 | 
						|
    minimize_extra_items: MinimizeExtraItems
 | 
						|
    add_bonus_points: AddExtraPoints
 | 
						|
    add_story_chapters: AddStoryChapters
 | 
						|
    which_story: WhichStory
 | 
						|
 | 
						|
 | 
						|
yd_option_groups = [
 | 
						|
    OptionGroup(
 | 
						|
        "Extra progression items",
 | 
						|
        [
 | 
						|
            ChanceOfDice,
 | 
						|
            ChanceOfRoll,
 | 
						|
            ChanceOfFixedScoreMultiplier,
 | 
						|
            ChanceOfStepScoreMultiplier,
 | 
						|
            ChanceOfDoubleCategory,
 | 
						|
            ChanceOfPoints,
 | 
						|
            PointsSize,
 | 
						|
        ],
 | 
						|
    ),
 | 
						|
    OptionGroup(
 | 
						|
        "Other items", 
 | 
						|
        [
 | 
						|
            MinimizeExtraItems, 
 | 
						|
            AddExtraPoints, 
 | 
						|
            AddStoryChapters, 
 | 
						|
            WhichStory
 | 
						|
        ],
 | 
						|
    ),
 | 
						|
]
 |