| 
									
										
										
										
											2023-11-22 08:20:32 -07:00
										 |  |  | 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), | 
					
						
							| 
									
										
										
										
											2024-04-09 13:14:18 -06:00
										 |  |  |     "Progressive Stage":    RiskOfRainItemData("Stage", 5 + stage_offset, ItemClassification.progression), | 
					
						
							| 
									
										
										
										
											2023-11-22 08:20:32 -07:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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, | 
					
						
							|  |  |  | } |