2024-05-16 12:46:13 -04:00
|
|
|
from dataclasses import dataclass
|
2025-05-21 19:00:45 -04:00
|
|
|
from Options import Choice, Range, PerGameCommonOptions, StartInventoryPool, OptionDict, OptionGroup, \
|
|
|
|
DeathLinkMixin
|
2023-02-24 01:35:09 -05:00
|
|
|
|
|
|
|
|
|
|
|
class IncomeBoost(Range):
|
|
|
|
"""How much extra income the player gets per turn per boost received."""
|
|
|
|
display_name = "Income Boost"
|
|
|
|
range_start = 0
|
|
|
|
range_end = 100
|
|
|
|
default = 25
|
|
|
|
|
|
|
|
|
|
|
|
class CommanderDefenseBoost(Range):
|
|
|
|
"""How much extra defense the player's commander gets per boost received."""
|
|
|
|
display_name = "Commander Defense Boost"
|
|
|
|
range_start = 0
|
|
|
|
range_end = 8
|
|
|
|
default = 2
|
|
|
|
|
|
|
|
|
|
|
|
class CommanderChoice(Choice):
|
|
|
|
"""How the player's commander is selected for missions.
|
|
|
|
Locked Random: The player's commander is randomly predetermined for each level.
|
|
|
|
Unlockable Factions: The player starts with Mercival and can unlock playable factions.
|
|
|
|
Random Starting Faction: The player starts with a random starting faction and can unlock the rest.
|
|
|
|
When playing with unlockable factions, faction items are added to the pool.
|
|
|
|
Extra faction items after the first also reward starting Groove charge."""
|
|
|
|
display_name = "Commander Choice"
|
|
|
|
option_locked_random = 0
|
|
|
|
option_unlockable_factions = 1
|
|
|
|
option_random_starting_faction = 2
|
|
|
|
|
2025-05-21 19:00:45 -04:00
|
|
|
|
|
|
|
class PlayerSacrificeLimit(Range):
|
|
|
|
"""How many times the player can sacrifice a unit at the Stronghold per level attempt.
|
|
|
|
Sacrificed units are stored in the multiworld for other players to summon."""
|
|
|
|
display_name = "Player Sacrifice Limit"
|
|
|
|
range_start = 0
|
|
|
|
range_end = 5
|
|
|
|
default = 0
|
|
|
|
|
|
|
|
|
|
|
|
class PlayerSummonLimit(Range):
|
|
|
|
"""How many times the player can summon a unit at the Stronghold per level attempt.
|
|
|
|
Summoned units are from the multiworld which were sacrificed by other players."""
|
|
|
|
display_name = "Player Summon Limit"
|
|
|
|
range_start = 0
|
|
|
|
range_end = 5
|
|
|
|
default = 0
|
|
|
|
|
|
|
|
|
|
|
|
class AISacrificeLimit(Range):
|
|
|
|
"""How many times the AI can sacrifice a unit at the Stronghold per level attempt.
|
|
|
|
Sacrificed units are stored in the multiworld for other AIs to summon."""
|
|
|
|
display_name = "AI Sacrifice Limit"
|
|
|
|
range_start = 0
|
|
|
|
range_end = 5
|
|
|
|
default = 0
|
|
|
|
|
|
|
|
|
|
|
|
class AISummonLimit(Range):
|
|
|
|
"""How many times the AI can summon a unit at the Stronghold per level attempt.
|
|
|
|
Summoned units are from the multiworld which were sacrificed by other AIs.
|
|
|
|
AI summoning can be overwhelming, use /sacrifice_summon in the client if a level becomes impossible."""
|
|
|
|
display_name = "AI Summon Limit"
|
|
|
|
range_start = 0
|
|
|
|
range_end = 5
|
|
|
|
default = 0
|
|
|
|
|
|
|
|
|
|
|
|
wargroove_option_groups = [
|
|
|
|
OptionGroup("General Options", [
|
|
|
|
IncomeBoost,
|
|
|
|
CommanderDefenseBoost,
|
|
|
|
CommanderChoice
|
|
|
|
]),
|
|
|
|
OptionGroup("Sacrifice and Summon Options", [
|
|
|
|
PlayerSacrificeLimit,
|
|
|
|
PlayerSummonLimit,
|
|
|
|
AISacrificeLimit,
|
|
|
|
AISummonLimit,
|
|
|
|
]),
|
|
|
|
]
|
|
|
|
|
2024-05-16 12:46:13 -04:00
|
|
|
@dataclass
|
2025-05-21 19:00:45 -04:00
|
|
|
class WargrooveOptions(DeathLinkMixin, PerGameCommonOptions):
|
2024-05-16 12:46:13 -04:00
|
|
|
income_boost: IncomeBoost
|
|
|
|
commander_defense_boost: CommanderDefenseBoost
|
|
|
|
commander_choice: CommanderChoice
|
2025-05-21 19:00:45 -04:00
|
|
|
player_sacrifice_limit: PlayerSacrificeLimit
|
|
|
|
player_summon_limit: PlayerSummonLimit
|
|
|
|
ai_sacrifice_limit: AISacrificeLimit
|
|
|
|
ai_summon_limit: AISummonLimit
|
|
|
|
start_inventory_from_pool: StartInventoryPool
|