mirror of
https://github.com/MarioSpore/Grinch-AP.git
synced 2025-10-21 20:21:32 -06:00

* Minor cleanup and renaming of some files/functions. * Rename `LegacyWorld` and `LegacyWeb` to RLWorld and RLWeb. * Undo accidental change to comment. * Undo accidental change to comment. * Restructure Items.py format and combine all tables into one. * Restructure Locations.py format and combine all tables into one. * Split boss event items into separate boss entries. * Remove definitions folder. * Reformatted __init__.py for Rogue Legacy. * Allow fairy chests to be disabled. * Add working prefill logic for early vendors. * Re-introduce Early Architect setting. * Revamped rules and regions and can now generate games. * Fix normal vendors breaking everything. * Fix early vendor logic and add fairy chest logic to require Dragons or Enchantress + runes. * Fix issue with duplicate items being created. * Move event placement into __init__.py and fix duplicate Vendors. * Tweak weights and spacing. * Update documentation and include bug report link. * Fix relative link for template file. * Increase amount of chest locations in `location_table`. * Correct a refactor rename gone wrong. * Remove unused reference in imports. * Tweak mistake in boss name in place_events. * English is hard. * Tweak some lines in __init__.py to use `.settings()` method. * Add unique id tests for Rogue Legacy. IDs are mixed around, so let's try to avoid accidentally using the same identifier twice. * Fix typo in doc. * Simplify `fill_slot_data`. * Change prefix on `_place_events` to maintain convention. * Remove items that are **not** progression from rules.
116 lines
7.3 KiB
Python
116 lines
7.3 KiB
Python
from typing import Dict, NamedTuple, Optional
|
|
|
|
from BaseClasses import Item, ItemClassification
|
|
|
|
|
|
class RLItem(Item):
|
|
game: str = "Rogue Legacy"
|
|
|
|
|
|
class RLItemData(NamedTuple):
|
|
category: str
|
|
code: Optional[int] = None
|
|
classification: ItemClassification = ItemClassification.filler
|
|
max_quantity: int = 1
|
|
weight: int = 1
|
|
|
|
@property
|
|
def is_event_item(self):
|
|
return self.code is None
|
|
|
|
|
|
def get_items_by_category(category: str) -> Dict[str, RLItemData]:
|
|
item_dict: Dict[str, RLItemData] = {}
|
|
for name, data in item_table.items():
|
|
if data.category == category:
|
|
item_dict.setdefault(name, data)
|
|
|
|
return item_dict
|
|
|
|
|
|
item_table: Dict[str, RLItemData] = {
|
|
# Vendors
|
|
"Blacksmith": RLItemData("Vendors", 90_000, ItemClassification.useful),
|
|
"Enchantress": RLItemData("Vendors", 90_001, ItemClassification.progression),
|
|
"Architect": RLItemData("Vendors", 90_002, ItemClassification.useful),
|
|
|
|
# Classes
|
|
"Progressive Knights": RLItemData("Classes", 90_003, ItemClassification.useful, 2),
|
|
"Progressive Mages": RLItemData("Classes", 90_004, ItemClassification.useful, 2),
|
|
"Progressive Barbarians": RLItemData("Classes", 90_005, ItemClassification.useful, 2),
|
|
"Progressive Knaves": RLItemData("Classes", 90_006, ItemClassification.useful, 2),
|
|
"Progressive Shinobis": RLItemData("Classes", 90_007, ItemClassification.useful, 2),
|
|
"Progressive Miners": RLItemData("Classes", 90_008, ItemClassification.useful, 2),
|
|
"Progressive Liches": RLItemData("Classes", 90_009, ItemClassification.useful, 2),
|
|
"Progressive Spellthieves": RLItemData("Classes", 90_010, ItemClassification.useful, 2),
|
|
"Dragons": RLItemData("Classes", 90_096, ItemClassification.progression),
|
|
"Traitors": RLItemData("Classes", 90_097, ItemClassification.useful),
|
|
|
|
# Skills
|
|
"Health Up": RLItemData("Skills", 90_013, ItemClassification.progression_skip_balancing, 15),
|
|
"Mana Up": RLItemData("Skills", 90_014, ItemClassification.progression_skip_balancing, 15),
|
|
"Attack Up": RLItemData("Skills", 90_015, ItemClassification.progression_skip_balancing, 15),
|
|
"Magic Damage Up": RLItemData("Skills", 90_016, ItemClassification.progression_skip_balancing, 15),
|
|
"Armor Up": RLItemData("Skills", 90_017, ItemClassification.useful, 15),
|
|
"Equip Up": RLItemData("Skills", 90_018, ItemClassification.useful, 5),
|
|
"Crit Chance Up": RLItemData("Skills", 90_019, ItemClassification.useful, 5),
|
|
"Crit Damage Up": RLItemData("Skills", 90_020, ItemClassification.useful, 5),
|
|
"Down Strike Up": RLItemData("Skills", 90_021),
|
|
"Gold Gain Up": RLItemData("Skills", 90_022),
|
|
"Potion Efficiency Up": RLItemData("Skills", 90_023),
|
|
"Invulnerability Time Up": RLItemData("Skills", 90_024),
|
|
"Mana Cost Down": RLItemData("Skills", 90_025),
|
|
"Death Defiance": RLItemData("Skills", 90_026, ItemClassification.useful),
|
|
"Haggling": RLItemData("Skills", 90_027, ItemClassification.useful),
|
|
"Randomize Children": RLItemData("Skills", 90_028, ItemClassification.useful),
|
|
|
|
# Blueprints
|
|
"Progressive Blueprints": RLItemData("Blueprints", 90_055, ItemClassification.useful, 15),
|
|
"Squire Blueprints": RLItemData("Blueprints", 90_040, ItemClassification.useful),
|
|
"Silver Blueprints": RLItemData("Blueprints", 90_041, ItemClassification.useful),
|
|
"Guardian Blueprints": RLItemData("Blueprints", 90_042, ItemClassification.useful),
|
|
"Imperial Blueprints": RLItemData("Blueprints", 90_043, ItemClassification.useful),
|
|
"Royal Blueprints": RLItemData("Blueprints", 90_044, ItemClassification.useful),
|
|
"Knight Blueprints": RLItemData("Blueprints", 90_045, ItemClassification.useful),
|
|
"Ranger Blueprints": RLItemData("Blueprints", 90_046, ItemClassification.useful),
|
|
"Sky Blueprints": RLItemData("Blueprints", 90_047, ItemClassification.useful),
|
|
"Dragon Blueprints": RLItemData("Blueprints", 90_048, ItemClassification.useful),
|
|
"Slayer Blueprints": RLItemData("Blueprints", 90_049, ItemClassification.useful),
|
|
"Blood Blueprints": RLItemData("Blueprints", 90_050, ItemClassification.useful),
|
|
"Sage Blueprints": RLItemData("Blueprints", 90_051, ItemClassification.useful),
|
|
"Retribution Blueprints": RLItemData("Blueprints", 90_052, ItemClassification.useful),
|
|
"Holy Blueprints": RLItemData("Blueprints", 90_053, ItemClassification.useful),
|
|
"Dark Blueprints": RLItemData("Blueprints", 90_054, ItemClassification.useful),
|
|
|
|
# Runes
|
|
"Vault Runes": RLItemData("Runes", 90_060, ItemClassification.progression),
|
|
"Sprint Runes": RLItemData("Runes", 90_061, ItemClassification.progression),
|
|
"Vampire Runes": RLItemData("Runes", 90_062, ItemClassification.useful),
|
|
"Sky Runes": RLItemData("Runes", 90_063, ItemClassification.progression),
|
|
"Siphon Runes": RLItemData("Runes", 90_064, ItemClassification.useful),
|
|
"Retaliation Runes": RLItemData("Runes", 90_065),
|
|
"Bounty Runes": RLItemData("Runes", 90_066),
|
|
"Haste Runes": RLItemData("Runes", 90_067),
|
|
"Curse Runes": RLItemData("Runes", 90_068),
|
|
"Grace Runes": RLItemData("Runes", 90_069),
|
|
"Balance Runes": RLItemData("Runes", 90_070, ItemClassification.useful),
|
|
|
|
# Junk
|
|
"Triple Stat Increase": RLItemData("Filler", 90_030, weight=6),
|
|
"1000 Gold": RLItemData("Filler", 90_031, weight=3),
|
|
"3000 Gold": RLItemData("Filler", 90_032, weight=2),
|
|
"5000 Gold": RLItemData("Filler", 90_033, weight=1),
|
|
}
|
|
|
|
event_item_table: Dict[str, RLItemData] = {
|
|
"Defeat Khidr": RLItemData("Event", classification=ItemClassification.progression),
|
|
"Defeat Alexander": RLItemData("Event", classification=ItemClassification.progression),
|
|
"Defeat Ponce de Leon": RLItemData("Event", classification=ItemClassification.progression),
|
|
"Defeat Herodotus": RLItemData("Event", classification=ItemClassification.progression),
|
|
"Defeat Neo Khidr": RLItemData("Event", classification=ItemClassification.progression),
|
|
"Defeat Alexander IV": RLItemData("Event", classification=ItemClassification.progression),
|
|
"Defeat Ponce de Freon": RLItemData("Event", classification=ItemClassification.progression),
|
|
"Defeat Astrodotus": RLItemData("Event", classification=ItemClassification.progression),
|
|
"Defeat The Fountain": RLItemData("Event", classification=ItemClassification.progression),
|
|
}
|