Archipelago/worlds/ror2/items.py

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,
}