forked from mirror/Archipelago
Some checks failed
Analyze modified files / flake8 (push) Failing after 2m28s
Build / build-win (push) Has been cancelled
Build / build-ubuntu2204 (push) Has been cancelled
ctest / Test C++ ubuntu-latest (push) Has been cancelled
ctest / Test C++ windows-latest (push) Has been cancelled
Analyze modified files / mypy (push) Has been cancelled
Build and Publish Docker Images / Push Docker image to Docker Hub (push) Successful in 5m4s
Native Code Static Analysis / scan-build (push) Failing after 5m2s
type check / pyright (push) Successful in 1m7s
unittests / Test Python 3.11.2 ubuntu-latest (push) Failing after 16m23s
unittests / Test Python 3.12 ubuntu-latest (push) Failing after 28m19s
unittests / Test Python 3.13 ubuntu-latest (push) Failing after 14m49s
unittests / Test hosting with 3.13 on ubuntu-latest (push) Successful in 5m0s
unittests / Test Python 3.13 macos-latest (push) Has been cancelled
unittests / Test Python 3.11 windows-latest (push) Has been cancelled
unittests / Test Python 3.13 windows-latest (push) Has been cancelled
169 lines
5.5 KiB
Python
169 lines
5.5 KiB
Python
from dataclasses import dataclass
|
|
|
|
from Options import Choice, PerGameCommonOptions, StartInventory, OptionGroup, Toggle, Range, DeathLinkMixin
|
|
|
|
|
|
class Goal(Choice):
|
|
"""
|
|
The victory condition for your run
|
|
"""
|
|
|
|
display_name = "Goal"
|
|
option_paintress = 0
|
|
option_curator = 1
|
|
option_clea = 4
|
|
option_painted_love = 2
|
|
option_simon = 3
|
|
default = 1
|
|
|
|
class ExcludeEndgameLocations(Choice):
|
|
"""
|
|
Determines how to handle locations higher level than the set goal, if the goal is Paintress or Curator.
|
|
Excluded: Locations won't be added to the pool.
|
|
Filler: Locations will only contain filler items.
|
|
Included: All locations are included.
|
|
"""
|
|
internal_name = "exclude_endgame_locations"
|
|
display_name = "Exclude Endgame Locations"
|
|
option_excluded = 0
|
|
option_filler = 1
|
|
option_included = 2
|
|
default = 0
|
|
|
|
class ExcludeEndlessTower(Choice):
|
|
"""
|
|
Determines how to handle Endless Tower locations.
|
|
Excluded: Locations won't be added to the pool.
|
|
Filler: Locations will only contain filler items.
|
|
Included: All locations are included.
|
|
"""
|
|
internal_name = "exclude_endless_tower"
|
|
display_name = "Exclude Endless Tower"
|
|
option_excluded = 0
|
|
option_filler = 1
|
|
option_included = 2
|
|
default = 0
|
|
|
|
class ShuffleLostGestrals(Toggle):
|
|
"""
|
|
Shuffles the lost gestrals into the item pool.
|
|
"""
|
|
internal_name = "shuffle_lost_gestrals"
|
|
display_name = "Shuffle Lost Gestrals"
|
|
|
|
class ShuffleFreeAim(Toggle):
|
|
"""
|
|
Shuffles the ability to shoot outside of battle into the pool.
|
|
"""
|
|
internal_name = "shuffle_free_aim"
|
|
display_name = "Shuffle Free Aim"
|
|
default = 0
|
|
|
|
class AreaLogic(Choice):
|
|
"""
|
|
Determines how many major area unlock items will be placed how early.
|
|
Normal: Act 1 major areas won't be placed past Act 1; Forgotten Battlefield and Old Lumiere won't be placed behind
|
|
Visages/Sirene; Visages and Sirene won't be placed behind The Monolith.
|
|
Hard: Only half of the major areas will be placed in those segments.
|
|
No Logic: Areas could be anywhere. You may need to grind world map enemies for a long time.
|
|
"""
|
|
internal_name = "area_logic"
|
|
display_name = "Area logic"
|
|
option_normal = 1
|
|
option_hard = 2
|
|
option_no_logic = 0
|
|
default = 1
|
|
|
|
class ShuffleCharacters(Toggle):
|
|
"""Shuffles characters into the item pool."""
|
|
display_name = "Shuffle characters"
|
|
|
|
class StartingCharacter(Choice):
|
|
"""Determines which character you start with. Does nothing if Shuffle Characters is set to false."""
|
|
internal_name = "starting_character"
|
|
display_name = "Starting character"
|
|
option_gustave = 0
|
|
option_lune = 1
|
|
option_maelle = 2
|
|
option_sciel = 3
|
|
option_monoco = 4
|
|
option_verso = 5
|
|
default = 0
|
|
|
|
class GearScaling(Choice):
|
|
"""How the levels of pictos and weapons you receive are determined.
|
|
Sphere placement: Roughly scales pictos/weapons by the logical sphere they're placed in.
|
|
Order received: As you receive more pictos/weapons, the levels of the next ones you receive will go up.
|
|
Balanced random: Pictos/weapons have random levels assigned in an even spread.
|
|
Full random: Exaclty what it says. There's no guarantee that you'll get high-level pictos... but you probably will."""
|
|
internal_name = "gear_scaling"
|
|
display_name = "Gear Scaling"
|
|
option_sphere_placement = 0
|
|
option_order_received = 1
|
|
option_balanced_random = 2
|
|
option_full_random = 3
|
|
default = 1
|
|
|
|
class MaxEquipLevel(Choice):
|
|
"""
|
|
What level pictos and weapons received though Archipelago will go up to. Weapons can still be upgraded past this.
|
|
Highest Included Location: The highest level equipment will match the gear you would normally get from the most
|
|
difficult location included in the pool. With endgame locations excluded, this will be 15 with Paintress as your
|
|
goal, 16 for Curator, 28 for Clea, or 33 for Simon or Painted Love.
|
|
Custom: Set a specific level.
|
|
"""
|
|
internal_name = "max_level_choice"
|
|
display_name = "Max Equipment Level"
|
|
option_highest_included_location = 0
|
|
option_custom = 1
|
|
|
|
class CustomMaxEquipLevel(Range):
|
|
"""
|
|
What level pictos and weapons received through Archipelago will go up to if Max Equip Level is set to Custom.
|
|
"""
|
|
internal_name = "custom_max_equip_level"
|
|
display_name = "Custom Max Equipment Level"
|
|
range_start = 1
|
|
range_end = 33
|
|
default = 33
|
|
|
|
class TrapChance(Range):
|
|
"""
|
|
The chance for any filler item to be replaced with a trap.
|
|
Currently, the only implemented trap is the Feet Trap.
|
|
Feet Trap: plays the "My, what lovely feet" voice line and shows you some feet pics. Are you sure about this....?
|
|
"""
|
|
display_name = "Trap Chance"
|
|
range_start = 0
|
|
range_end = 100
|
|
default = 0
|
|
|
|
class ClairObscurStartInventory(StartInventory):
|
|
"""
|
|
Start with these items
|
|
"""
|
|
|
|
@dataclass
|
|
class ClairObscurOptions(DeathLinkMixin, PerGameCommonOptions):
|
|
goal: Goal
|
|
char_shuffle: ShuffleCharacters
|
|
shuffle_free_aim: ShuffleFreeAim
|
|
exclude_endgame_locations: ExcludeEndgameLocations
|
|
exclude_endless_tower: ExcludeEndlessTower
|
|
gestral_shuffle: ShuffleLostGestrals
|
|
starting_char: StartingCharacter
|
|
gear_scaling: GearScaling
|
|
max_equip_level: MaxEquipLevel
|
|
custom_max_equip_level: CustomMaxEquipLevel
|
|
area_logic: AreaLogic
|
|
trap_chance: TrapChance
|
|
|
|
start_inventory: ClairObscurStartInventory
|
|
|
|
OPTIONS_GROUP = [
|
|
OptionGroup(
|
|
"Item & Location Options", [
|
|
ClairObscurStartInventory,
|
|
], False,
|
|
),
|
|
] |