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 three 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 | ||
|  |         ], | ||
|  |     ), | ||
|  | ] |