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