|
| 1 | +from typing import Dict, Set, Tuple, NamedTuple, Optional |
| 2 | +from BaseClasses import ItemClassification |
| 3 | + |
| 4 | +class ItemData(NamedTuple): |
| 5 | + category: str |
| 6 | + code: Optional[int] |
| 7 | + classification: ItemClassification |
| 8 | + amount: Optional[int] = 1 |
| 9 | + |
| 10 | +item_table: Dict[str, ItemData] = { |
| 11 | + "! Switch": ItemData("Items", 0x302050, ItemClassification.progression), |
| 12 | + "Dashed Platform": ItemData("Items", 0x302051, ItemClassification.progression), |
| 13 | + "Dashed Stairs": ItemData("Items", 0x302052, ItemClassification.progression), |
| 14 | + "Beanstalk": ItemData("Items", 0x302053, ItemClassification.progression), |
| 15 | + "Helicopter Morph": ItemData("Morphs", 0x302054, ItemClassification.progression), |
| 16 | + "Spring Ball": ItemData("Items", 0x302055, ItemClassification.progression), |
| 17 | + "Large Spring Ball": ItemData("Items", 0x302056, ItemClassification.progression), |
| 18 | + "Arrow Wheel": ItemData("Items", 0x302057, ItemClassification.progression), |
| 19 | + "Vanishing Arrow Wheel": ItemData("Items", 0x302058, ItemClassification.progression), |
| 20 | + "Mole Tank Morph": ItemData("Morphs", 0x302059, ItemClassification.progression), |
| 21 | + "Watermelon": ItemData("Items", 0x30205A, ItemClassification.progression), |
| 22 | + "Ice Melon": ItemData("Items", 0x30205B, ItemClassification.progression), |
| 23 | + "Fire Melon": ItemData("Items", 0x30205C, ItemClassification.progression), |
| 24 | + "Super Star": ItemData("Items", 0x30205D, ItemClassification.progression), |
| 25 | + "Car Morph": ItemData("Morphs", 0x30205E, ItemClassification.progression), |
| 26 | + "Flashing Eggs": ItemData("Items", 0x30205F, ItemClassification.progression), |
| 27 | + "Giant Eggs": ItemData("Items", 0x302060, ItemClassification.progression), |
| 28 | + "Egg Launcher": ItemData("Items", 0x302061, ItemClassification.progression), |
| 29 | + "Egg Plant": ItemData("Items", 0x302062, ItemClassification.progression), |
| 30 | + "Submarine Morph": ItemData("Morphs", 0x302063, ItemClassification.progression), |
| 31 | + "Chomp Rock": ItemData("Items", 0x302064, ItemClassification.progression), |
| 32 | + "Poochy": ItemData("Items", 0x302065, ItemClassification.progression), |
| 33 | + "Platform Ghost": ItemData("Items", 0x302066, ItemClassification.progression), |
| 34 | + "Skis": ItemData("Items", 0x302067, ItemClassification.progression), |
| 35 | + "Train Morph": ItemData("Morphs", 0x302068, ItemClassification.progression), |
| 36 | + "Key": ItemData("Items", 0x302069, ItemClassification.progression), |
| 37 | + "Middle Ring": ItemData("Items", 0x30206A, ItemClassification.progression), |
| 38 | + "Bucket": ItemData("Items", 0x30206B, ItemClassification.progression), |
| 39 | + "Tulip": ItemData("Items", 0x30206C, ItemClassification.progression), |
| 40 | + "Egg Capacity Upgrade": ItemData("Items", 0x30206D, ItemClassification.progression, 5), |
| 41 | + "Secret Lens": ItemData("Items", 0x302081, ItemClassification.progression), |
| 42 | + |
| 43 | + "World 1 Gate": ItemData("Gates", 0x30206E, ItemClassification.progression), |
| 44 | + "World 2 Gate": ItemData("Gates", 0x30206F, ItemClassification.progression), |
| 45 | + "World 3 Gate": ItemData("Gates", 0x302070, ItemClassification.progression), |
| 46 | + "World 4 Gate": ItemData("Gates", 0x302071, ItemClassification.progression), |
| 47 | + "World 5 Gate": ItemData("Gates", 0x302072, ItemClassification.progression), |
| 48 | + "World 6 Gate": ItemData("Gates", 0x302073, ItemClassification.progression), |
| 49 | + |
| 50 | + "Extra 1": ItemData("Panels", 0x302074, ItemClassification.progression), |
| 51 | + "Extra 2": ItemData("Panels", 0x302075, ItemClassification.progression), |
| 52 | + "Extra 3": ItemData("Panels", 0x302076, ItemClassification.progression), |
| 53 | + "Extra 4": ItemData("Panels", 0x302077, ItemClassification.progression), |
| 54 | + "Extra 5": ItemData("Panels", 0x302078, ItemClassification.progression), |
| 55 | + "Extra 6": ItemData("Panels", 0x302079, ItemClassification.progression), |
| 56 | + "Extra Panels": ItemData("Panels", 0x30207A, ItemClassification.progression), |
| 57 | + |
| 58 | + "Bonus 1": ItemData("Panels", 0x30207B, ItemClassification.progression), |
| 59 | + "Bonus 2": ItemData("Panels", 0x30207C, ItemClassification.progression), |
| 60 | + "Bonus 3": ItemData("Panels", 0x30207D, ItemClassification.progression), |
| 61 | + "Bonus 4": ItemData("Panels", 0x30207E, ItemClassification.progression), |
| 62 | + "Bonus 5": ItemData("Panels", 0x30207F, ItemClassification.progression), |
| 63 | + "Bonus 6": ItemData("Panels", 0x302080, ItemClassification.progression), |
| 64 | + "Bonus Panels": ItemData("Panels", 0x302082, ItemClassification.progression), |
| 65 | + |
| 66 | + "Anytime Egg": ItemData("Consumable", 0x302083, ItemClassification.useful, 0), |
| 67 | + "Anywhere Pow": ItemData("Consumable", 0x302084, ItemClassification.filler, 0), |
| 68 | + "Winged Cloud Maker": ItemData("Consumable", 0x302085, ItemClassification.filler, 0), |
| 69 | + "Pocket Melon": ItemData("Consumable", 0x302086, ItemClassification.filler, 0), |
| 70 | + "Pocket Fire Melon": ItemData("Consumable", 0x302087, ItemClassification.filler, 0), |
| 71 | + "Pocket Ice Melon": ItemData("Consumable", 0x302088, ItemClassification.filler, 0), |
| 72 | + "Magnifying Glass": ItemData("Consumable", 0x302089, ItemClassification.filler, 0), |
| 73 | + "+10 Stars": ItemData("Consumable", 0x30208A, ItemClassification.useful, 0), |
| 74 | + "+20 Stars": ItemData("Consumable", 0x30208B, ItemClassification.useful, 0), |
| 75 | + "1-Up": ItemData("Lives", 0x30208C, ItemClassification.filler, 0), |
| 76 | + "2-Up": ItemData("Lives", 0x30208D, ItemClassification.filler, 0), |
| 77 | + "3-Up": ItemData("Lives", 0x30208E, ItemClassification.filler, 0), |
| 78 | + "10-Up": ItemData("Lives", 0x30208F, ItemClassification.filler, 5), |
| 79 | + "Bonus Consumables": ItemData("Events", None, ItemClassification.progression, 0), |
| 80 | + "Bandit Consumables": ItemData("Events", None, ItemClassification.progression, 0), |
| 81 | + "Bandit Watermelons": ItemData("Events", None, ItemClassification.progression, 0), |
| 82 | + |
| 83 | + "Fuzzy Trap": ItemData("Traps", 0x302090, ItemClassification.trap, 0), |
| 84 | + "Reversal Trap": ItemData("Traps", 0x302091, ItemClassification.trap, 0), |
| 85 | + "Darkness Trap": ItemData("Traps", 0x302092, ItemClassification.trap, 0), |
| 86 | + "Freeze Trap": ItemData("Traps", 0x302093, ItemClassification.trap, 0), |
| 87 | + |
| 88 | + "Boss Clear": ItemData("Events", None, ItemClassification.progression, 0), |
| 89 | + "Piece of Luigi": ItemData("Items", 0x302095, ItemClassification.progression, 0), |
| 90 | + "Saved Baby Luigi": ItemData("Events", None, ItemClassification.progression, 0) |
| 91 | +} |
| 92 | + |
| 93 | +filler_items: Tuple[str, ...] = ( |
| 94 | + "Anytime Egg", |
| 95 | + "Anywhere Pow", |
| 96 | + "Winged Cloud Maker", |
| 97 | + "Pocket Melon", |
| 98 | + "Pocket Fire Melon", |
| 99 | + "Pocket Ice Melon", |
| 100 | + "Magnifying Glass", |
| 101 | + "+10 Stars", |
| 102 | + "+20 Stars", |
| 103 | + "1-Up", |
| 104 | + "2-Up", |
| 105 | + "3-Up" |
| 106 | +) |
| 107 | + |
| 108 | +trap_items: Tuple[str, ...] = ( |
| 109 | + "Fuzzy Trap", |
| 110 | + "Reversal Trap", |
| 111 | + "Darkness Trap", |
| 112 | + "Freeze Trap" |
| 113 | +) |
| 114 | + |
| 115 | +def get_item_names_per_category() -> Dict[str, Set[str]]: |
| 116 | + categories: Dict[str, Set[str]] = {} |
| 117 | + |
| 118 | + for name, data in item_table.items(): |
| 119 | + if data.category != "Events": |
| 120 | + categories.setdefault(data.category, set()).add(name) |
| 121 | + |
| 122 | + return categories |
0 commit comments