310 lines
11 KiB
Python
310 lines
11 KiB
Python
from BaseClasses import Item, ItemClassification
|
|
from .options import ItemWeights
|
|
from .ror2environments import environment_all_table
|
|
from typing import NamedTuple, Optional, Dict
|
|
|
|
|
|
class RiskOfRainItem(Item):
|
|
game: str = "Risk of Rain 2"
|
|
|
|
|
|
class RiskOfRainItemData(NamedTuple):
|
|
category: str
|
|
code: int
|
|
item_type: ItemClassification = ItemClassification.filler
|
|
weight: Optional[int] = None
|
|
|
|
|
|
offset: int = 37000
|
|
filler_offset: int = offset + 300
|
|
trap_offset: int = offset + 400
|
|
stage_offset: int = offset + 500
|
|
environment_offset: int = offset + 700
|
|
# Upgrade item ids 37002 - 37012
|
|
upgrade_table: Dict[str, RiskOfRainItemData] = {
|
|
"Common Item": RiskOfRainItemData("Upgrade", 2 + offset, ItemClassification.filler, 64),
|
|
"Uncommon Item": RiskOfRainItemData("Upgrade", 3 + offset, ItemClassification.filler, 32),
|
|
"Legendary Item": RiskOfRainItemData("Upgrade", 4 + offset, ItemClassification.useful, 8),
|
|
"Boss Item": RiskOfRainItemData("Upgrade", 5 + offset, ItemClassification.useful, 4),
|
|
"Equipment": RiskOfRainItemData("Upgrade", 7 + offset, ItemClassification.filler, 32),
|
|
"Item Scrap, White": RiskOfRainItemData("Upgrade", 8 + offset, ItemClassification.filler, 32),
|
|
"Item Scrap, Green": RiskOfRainItemData("Upgrade", 9 + offset, ItemClassification.filler, 16),
|
|
"Item Scrap, Red": RiskOfRainItemData("Upgrade", 10 + offset, ItemClassification.filler, 4),
|
|
"Item Scrap, Yellow": RiskOfRainItemData("Upgrade", 11 + offset, ItemClassification.filler, 1),
|
|
"Void Item": RiskOfRainItemData("Upgrade", 12 + offset, ItemClassification.filler, 16),
|
|
}
|
|
# Other item ids 37001, 37013-37014
|
|
other_table: Dict[str, RiskOfRainItemData] = {
|
|
"Dio's Best Friend": RiskOfRainItemData("ExtraLife", 1 + offset, ItemClassification.progression_skip_balancing),
|
|
"Beads of Fealty": RiskOfRainItemData("Beads", 13 + offset, ItemClassification.progression),
|
|
"Radar Scanner": RiskOfRainItemData("Radar", 14 + offset, ItemClassification.useful),
|
|
}
|
|
# Filler item ids 37301 - 37303
|
|
filler_table: Dict[str, RiskOfRainItemData] = {
|
|
"Money": RiskOfRainItemData("Filler", 1 + filler_offset, ItemClassification.filler, 64),
|
|
"Lunar Coin": RiskOfRainItemData("Filler", 2 + filler_offset, ItemClassification.filler, 20),
|
|
"1000 Exp": RiskOfRainItemData("Filler", 3 + filler_offset, ItemClassification.filler, 40),
|
|
}
|
|
# Trap item ids 37401 - 37404 (Lunar items used to be part of the upgrade item list, so keeping the id the same)
|
|
trap_table: Dict[str, RiskOfRainItemData] = {
|
|
"Lunar Item": RiskOfRainItemData("Trap", 6 + offset, ItemClassification.trap, 16),
|
|
"Mountain Trap": RiskOfRainItemData("Trap", 1 + trap_offset, ItemClassification.trap, 5),
|
|
"Time Warp Trap": RiskOfRainItemData("Trap", 2 + trap_offset, ItemClassification.trap, 20),
|
|
"Combat Trap": RiskOfRainItemData("Trap", 3 + trap_offset, ItemClassification.trap, 20),
|
|
"Teleport Trap": RiskOfRainItemData("Trap", 4 + trap_offset, ItemClassification.trap, 10),
|
|
}
|
|
# Stage item ids 37501 - 37504
|
|
stage_table: Dict[str, RiskOfRainItemData] = {
|
|
"Stage 1": RiskOfRainItemData("Stage", 1 + stage_offset, ItemClassification.progression),
|
|
"Stage 2": RiskOfRainItemData("Stage", 2 + stage_offset, ItemClassification.progression),
|
|
"Stage 3": RiskOfRainItemData("Stage", 3 + stage_offset, ItemClassification.progression),
|
|
"Stage 4": RiskOfRainItemData("Stage", 4 + stage_offset, ItemClassification.progression),
|
|
"Progressive Stage": RiskOfRainItemData("Stage", 5 + stage_offset, ItemClassification.progression),
|
|
}
|
|
|
|
item_table = {**upgrade_table, **other_table, **filler_table, **trap_table, **stage_table}
|
|
# Environment item ids 37700 - 37746
|
|
##################################################
|
|
# environments
|
|
|
|
|
|
# add ALL environments into the item table
|
|
def create_environment_table(name: str, environment_id: int, environment_classification: ItemClassification) \
|
|
-> Dict[str, RiskOfRainItemData]:
|
|
return {name: RiskOfRainItemData("Environment", environment_offset + environment_id, environment_classification)}
|
|
|
|
|
|
environment_table: Dict[str, RiskOfRainItemData] = {}
|
|
# use the sotv dlc in the item table so that all names can be looked up regardless of use
|
|
for data, key in environment_all_table.items():
|
|
classification = ItemClassification.progression
|
|
if data in {"Hidden Realm: Bulwark's Ambry", "Hidden Realm: Gilded Coast"}:
|
|
classification = ItemClassification.useful
|
|
environment_table.update(create_environment_table(data, key, classification))
|
|
|
|
item_table.update(environment_table)
|
|
|
|
# end of environments
|
|
##################################################
|
|
|
|
default_weights: Dict[str, int] = {
|
|
"Item Scrap, Green": 16,
|
|
"Item Scrap, Red": 4,
|
|
"Item Scrap, Yellow": 1,
|
|
"Item Scrap, White": 32,
|
|
"Common Item": 64,
|
|
"Uncommon Item": 32,
|
|
"Legendary Item": 8,
|
|
"Boss Item": 4,
|
|
"Void Item": 16,
|
|
"Equipment": 32,
|
|
"Money": 64,
|
|
"Lunar Coin": 20,
|
|
"1000 Exp": 40,
|
|
"Lunar Item": 10,
|
|
"Mountain Trap": 4,
|
|
"Time Warp Trap": 20,
|
|
"Combat Trap": 20,
|
|
"Teleport Trap": 20
|
|
}
|
|
|
|
new_weights: Dict[str, int] = {
|
|
"Item Scrap, Green": 15,
|
|
"Item Scrap, Red": 5,
|
|
"Item Scrap, Yellow": 1,
|
|
"Item Scrap, White": 30,
|
|
"Common Item": 75,
|
|
"Uncommon Item": 40,
|
|
"Legendary Item": 10,
|
|
"Boss Item": 5,
|
|
"Void Item": 16,
|
|
"Equipment": 20,
|
|
"Money": 64,
|
|
"Lunar Coin": 20,
|
|
"1000 Exp": 40,
|
|
"Lunar Item": 10,
|
|
"Mountain Trap": 4,
|
|
"Time Warp Trap": 20,
|
|
"Combat Trap": 20,
|
|
"Teleport Trap": 20
|
|
}
|
|
|
|
uncommon_weights: Dict[str, int] = {
|
|
"Item Scrap, Green": 45,
|
|
"Item Scrap, Red": 5,
|
|
"Item Scrap, Yellow": 1,
|
|
"Item Scrap, White": 30,
|
|
"Common Item": 45,
|
|
"Uncommon Item": 100,
|
|
"Legendary Item": 10,
|
|
"Boss Item": 5,
|
|
"Void Item": 16,
|
|
"Equipment": 20,
|
|
"Money": 64,
|
|
"Lunar Coin": 20,
|
|
"1000 Exp": 40,
|
|
"Lunar Item": 10,
|
|
"Mountain Trap": 4,
|
|
"Time Warp Trap": 20,
|
|
"Combat Trap": 20,
|
|
"Teleport Trap": 20
|
|
}
|
|
|
|
legendary_weights: Dict[str, int] = {
|
|
"Item Scrap, Green": 15,
|
|
"Item Scrap, Red": 5,
|
|
"Item Scrap, Yellow": 1,
|
|
"Item Scrap, White": 30,
|
|
"Common Item": 50,
|
|
"Uncommon Item": 25,
|
|
"Legendary Item": 100,
|
|
"Boss Item": 5,
|
|
"Void Item": 16,
|
|
"Equipment": 20,
|
|
"Money": 64,
|
|
"Lunar Coin": 20,
|
|
"1000 Exp": 40,
|
|
"Lunar Item": 10,
|
|
"Mountain Trap": 4,
|
|
"Time Warp Trap": 20,
|
|
"Combat Trap": 20,
|
|
"Teleport Trap": 20
|
|
}
|
|
|
|
chaos_weights: Dict[str, int] = {
|
|
"Item Scrap, Green": 80,
|
|
"Item Scrap, Red": 45,
|
|
"Item Scrap, Yellow": 30,
|
|
"Item Scrap, White": 100,
|
|
"Common Item": 100,
|
|
"Uncommon Item": 70,
|
|
"Legendary Item": 30,
|
|
"Boss Item": 20,
|
|
"Void Item": 60,
|
|
"Equipment": 40,
|
|
"Money": 64,
|
|
"Lunar Coin": 20,
|
|
"1000 Exp": 40,
|
|
"Lunar Item": 10,
|
|
"Mountain Trap": 4,
|
|
"Time Warp Trap": 20,
|
|
"Combat Trap": 20,
|
|
"Teleport Trap": 20
|
|
}
|
|
|
|
no_scraps_weights: Dict[str, int] = {
|
|
"Item Scrap, Green": 0,
|
|
"Item Scrap, Red": 0,
|
|
"Item Scrap, Yellow": 0,
|
|
"Item Scrap, White": 0,
|
|
"Common Item": 100,
|
|
"Uncommon Item": 40,
|
|
"Legendary Item": 15,
|
|
"Boss Item": 5,
|
|
"Void Item": 16,
|
|
"Equipment": 25,
|
|
"Money": 64,
|
|
"Lunar Coin": 20,
|
|
"1000 Exp": 40,
|
|
"Lunar Item": 10,
|
|
"Mountain Trap": 4,
|
|
"Time Warp Trap": 20,
|
|
"Combat Trap": 20,
|
|
"Teleport Trap": 20
|
|
}
|
|
|
|
even_weights: Dict[str, int] = {
|
|
"Item Scrap, Green": 1,
|
|
"Item Scrap, Red": 1,
|
|
"Item Scrap, Yellow": 1,
|
|
"Item Scrap, White": 1,
|
|
"Common Item": 1,
|
|
"Uncommon Item": 1,
|
|
"Legendary Item": 1,
|
|
"Boss Item": 1,
|
|
"Void Item": 1,
|
|
"Equipment": 1,
|
|
"Money": 1,
|
|
"Lunar Coin": 1,
|
|
"1000 Exp": 1,
|
|
"Lunar Item": 1,
|
|
"Mountain Trap": 1,
|
|
"Time Warp Trap": 1,
|
|
"Combat Trap": 1,
|
|
"Teleport Trap": 1
|
|
}
|
|
|
|
scraps_only: Dict[str, int] = {
|
|
"Item Scrap, Green": 70,
|
|
"Item Scrap, White": 100,
|
|
"Item Scrap, Red": 30,
|
|
"Item Scrap, Yellow": 5,
|
|
"Common Item": 0,
|
|
"Uncommon Item": 0,
|
|
"Legendary Item": 0,
|
|
"Boss Item": 0,
|
|
"Void Item": 0,
|
|
"Equipment": 0,
|
|
"Money": 20,
|
|
"Lunar Coin": 10,
|
|
"1000 Exp": 10,
|
|
"Lunar Item": 0,
|
|
"Mountain Trap": 5,
|
|
"Time Warp Trap": 10,
|
|
"Combat Trap": 10,
|
|
"Teleport Trap": 10
|
|
}
|
|
lunartic_weights: Dict[str, int] = {
|
|
"Item Scrap, Green": 0,
|
|
"Item Scrap, Red": 0,
|
|
"Item Scrap, Yellow": 0,
|
|
"Item Scrap, White": 0,
|
|
"Common Item": 0,
|
|
"Uncommon Item": 0,
|
|
"Legendary Item": 0,
|
|
"Boss Item": 0,
|
|
"Void Item": 0,
|
|
"Equipment": 0,
|
|
"Money": 20,
|
|
"Lunar Coin": 10,
|
|
"1000 Exp": 10,
|
|
"Lunar Item": 100,
|
|
"Mountain Trap": 5,
|
|
"Time Warp Trap": 10,
|
|
"Combat Trap": 10,
|
|
"Teleport Trap": 10
|
|
}
|
|
void_weights: Dict[str, int] = {
|
|
"Item Scrap, Green": 0,
|
|
"Item Scrap, Red": 0,
|
|
"Item Scrap, Yellow": 0,
|
|
"Item Scrap, White": 0,
|
|
"Common Item": 0,
|
|
"Uncommon Item": 0,
|
|
"Legendary Item": 0,
|
|
"Boss Item": 0,
|
|
"Void Item": 100,
|
|
"Equipment": 0,
|
|
"Money": 20,
|
|
"Lunar Coin": 10,
|
|
"1000 Exp": 10,
|
|
"Lunar Item": 0,
|
|
"Mountain Trap": 5,
|
|
"Time Warp Trap": 10,
|
|
"Combat Trap": 10,
|
|
"Teleport Trap": 10
|
|
}
|
|
|
|
item_pool_weights: Dict[int, Dict[str, int]] = {
|
|
ItemWeights.option_default: default_weights,
|
|
ItemWeights.option_new: new_weights,
|
|
ItemWeights.option_uncommon: uncommon_weights,
|
|
ItemWeights.option_legendary: legendary_weights,
|
|
ItemWeights.option_chaos: chaos_weights,
|
|
ItemWeights.option_no_scraps: no_scraps_weights,
|
|
ItemWeights.option_even: even_weights,
|
|
ItemWeights.option_scraps_only: scraps_only,
|
|
ItemWeights.option_lunartic: lunartic_weights,
|
|
ItemWeights.option_void: void_weights,
|
|
}
|