[RL] Specify list of available classes (#262)

This commit is contained in:
Alchav 2022-03-15 21:31:14 -04:00 committed by GitHub
parent 43113c7844
commit 689183edc0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 61 additions and 45 deletions

View File

@ -1,6 +1,6 @@
import typing
from Options import Choice, Range, Option, Toggle, DeathLink, DefaultOnToggle, OptionList
from Options import Choice, Range, Option, Toggle, DeathLink, DefaultOnToggle, OptionList, OptionSet
class StartingGender(Choice):
@ -195,7 +195,7 @@ class CastleScaling(Range):
Adjusts the scaling factor for how big a castle can be. Larger castles scale enemies quicker and also take longer
to generate. 100 means normal castle size.
"""
displayname = "Castle Size Scaling Percentage"
display_name = "Castle Size Scaling Percentage"
range_start = 50
range_end = 300
default = 100
@ -205,7 +205,7 @@ class ChallengeBossKhidr(Choice):
"""
Determines if Neo Khidr replaces Khidr in their boss room.
"""
displayname = "Khidr"
display_name = "Khidr"
option_vanilla = 0
option_challenge = 1
default = 0
@ -215,7 +215,7 @@ class ChallengeBossAlexander(Choice):
"""
Determines if Alexander the IV replaces Alexander in their boss room.
"""
displayname = "Alexander"
display_name = "Alexander"
option_vanilla = 0
option_challenge = 1
default = 0
@ -225,7 +225,7 @@ class ChallengeBossLeon(Choice):
"""
Determines if Ponce de Freon replaces Ponce de Leon in their boss room.
"""
displayname = "Ponce de Leon"
display_name = "Ponce de Leon"
option_vanilla = 0
option_challenge = 1
default = 0
@ -235,7 +235,7 @@ class ChallengeBossHerodotus(Choice):
"""
Determines if Astrodotus replaces Herodotus in their boss room.
"""
displayname = "Herodotus"
display_name = "Herodotus"
option_vanilla = 0
option_challenge = 1
default = 0
@ -245,7 +245,7 @@ class HealthUpPool(Range):
"""
Determines the number of Health Ups in the item pool.
"""
displayname = "Health Up Pool"
display_name = "Health Up Pool"
range_start = 0
range_end = 15
default = 15
@ -255,7 +255,7 @@ class ManaUpPool(Range):
"""
Determines the number of Mana Ups in the item pool.
"""
displayname = "Mana Up Pool"
display_name = "Mana Up Pool"
range_start = 0
range_end = 15
default = 15
@ -265,7 +265,7 @@ class AttackUpPool(Range):
"""
Determines the number of Attack Ups in the item pool.
"""
displayname = "Attack Up Pool"
display_name = "Attack Up Pool"
range_start = 0
range_end = 15
default = 15
@ -275,7 +275,7 @@ class MagicDamageUpPool(Range):
"""
Determines the number of Magic Damage Ups in the item pool.
"""
displayname = "Magic Damage Up Pool"
display_name = "Magic Damage Up Pool"
range_start = 0
range_end = 15
default = 15
@ -285,7 +285,7 @@ class ArmorUpPool(Range):
"""
Determines the number of Armor Ups in the item pool.
"""
displayname = "Armor Up Pool"
display_name = "Armor Up Pool"
range_start = 0
range_end = 10
default = 10
@ -295,7 +295,7 @@ class EquipUpPool(Range):
"""
Determines the number of Equip Ups in the item pool.
"""
displayname = "Equip Up Pool"
display_name = "Equip Up Pool"
range_start = 0
range_end = 10
default = 10
@ -305,7 +305,7 @@ class CritChanceUpPool(Range):
"""
Determines the number of Crit Chance Ups in the item pool.
"""
displayname = "Crit Chance Up Pool"
display_name = "Crit Chance Up Pool"
range_start = 0
range_end = 5
default = 5
@ -315,7 +315,7 @@ class CritDamageUpPool(Range):
"""
Determines the number of Crit Damage Ups in the item pool.
"""
displayname = "Crit Damage Up Pool"
display_name = "Crit Damage Up Pool"
range_start = 0
range_end = 5
default = 5
@ -325,12 +325,22 @@ class FreeDiaryOnGeneration(DefaultOnToggle):
"""
Allows the player to get a free diary check every time they regenerate the castle in the starting room.
"""
displayname = "Free Diary On Generation"
display_name = "Free Diary On Generation"
class AvailableClasses(OptionSet):
"""
List of classes that will be in the item pool to find. The upgraded form of the class will be added with it.
The upgraded form of your starting class will be available regardless.
"""
display_name = "Available Classes"
default = {"Knight", "Mage", "Barbarian", "Knave", "Shinobi", "Miner", "Spellthief", "Lich", "Dragon", "Traitor"}
valid_keys = {"Knight", "Mage", "Barbarian", "Knave", "Shinobi", "Miner", "Spellthief", "Lich", "Dragon", "Traitor"}
legacy_options: typing.Dict[str, type(Option)] = {
"starting_gender": StartingGender,
"starting_class": StartingClass,
"available_classes": AvailableClasses,
"new_game_plus": NewGamePlus,
"fairy_chests_per_zone": FairyChestsPerZone,
"chests_per_zone": ChestsPerZone,

View File

@ -93,37 +93,43 @@ class LegacyWorld(World):
itempool += [self.create_item(ItemName.crit_chance)] * int(self.world.crit_chance_pool[self.player])
itempool += [self.create_item(ItemName.crit_damage)] * int(self.world.crit_damage_pool[self.player])
# Add specific classes into the pool. Eventually, will be able to shuffle the starting ones, but until then...
itempool += [
self.create_item(ItemName.dragon),
self.create_item(ItemName.traitor),
*self._create_items(ItemName.progressive_knight),
*self._create_items(ItemName.progressive_mage),
*self._create_items(ItemName.progressive_barbarian),
*self._create_items(ItemName.progressive_knave),
*self._create_items(ItemName.progressive_shinobi),
*self._create_items(ItemName.progressive_miner),
*self._create_items(ItemName.progressive_lich),
*self._create_items(ItemName.progressive_spellthief),
]
# Remove one of our starting classes from the item pool.
classes = self.world.available_classes[self.player]
if "Dragon" in classes:
itempool.append(self.create_item(ItemName.dragon))
if "Traitor" in classes:
itempool.append(self.create_item(ItemName.traitor))
if self.world.starting_class[self.player] == "knight":
itempool.remove(self.create_item(ItemName.progressive_knight))
elif self.world.starting_class[self.player] == "mage":
itempool.remove(self.create_item(ItemName.progressive_mage))
elif self.world.starting_class[self.player] == "barbarian":
itempool.remove(self.create_item(ItemName.progressive_barbarian))
elif self.world.starting_class[self.player] == "knave":
itempool.remove(self.create_item(ItemName.progressive_knave))
elif self.world.starting_class[self.player] == "miner":
itempool.remove(self.create_item(ItemName.progressive_miner))
elif self.world.starting_class[self.player] == "shinobi":
itempool.remove(self.create_item(ItemName.progressive_shinobi))
elif self.world.starting_class[self.player] == "lich":
itempool.remove(self.create_item(ItemName.progressive_lich))
elif self.world.starting_class[self.player] == "spellthief":
itempool.remove(self.create_item(ItemName.progressive_spellthief))
itempool.append(self.create_item(ItemName.progressive_knight))
elif "Knight" in classes:
itempool.extend(self._create_items(ItemName.progressive_knight))
if self.world.starting_class[self.player] == "mage":
itempool.append(self.create_item(ItemName.progressive_mage))
elif "Mage" in classes:
itempool.extend(self._create_items(ItemName.progressive_mage))
if self.world.starting_class[self.player] == "barbarian":
itempool.append(self.create_item(ItemName.progressive_barbarian))
elif "Barbarian" in classes:
itempool.extend(self._create_items(ItemName.progressive_barbarian))
if self.world.starting_class[self.player] == "knave":
itempool.append(self.create_item(ItemName.progressive_knave))
elif "Knave" in classes:
itempool.extend(self._create_items(ItemName.progressive_knave))
if self.world.starting_class[self.player] == "shinobi":
itempool.append(self.create_item(ItemName.progressive_shinobi))
elif "Shinobi" in classes:
itempool.extend(self._create_items(ItemName.progressive_shinobi))
if self.world.starting_class[self.player] == "miner":
itempool.append(self.create_item(ItemName.progressive_miner))
elif "Miner" in classes:
itempool.extend(self._create_items(ItemName.progressive_miner))
if self.world.starting_class[self.player] == "lich":
itempool.append(self.create_item(ItemName.progressive_lich))
elif "Lich" in classes:
itempool.extend(self._create_items(ItemName.progressive_lich))
if self.world.starting_class[self.player] == "spellthief":
itempool.append(self.create_item(ItemName.progressive_spellthief))
elif "Spellthief" in classes:
itempool.extend(self._create_items(ItemName.progressive_spellthief))
# Check if we need to start with these vendors or put them in the pool.
if self.world.vendors[self.player] == "start_unlocked":