215 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			215 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | # Copyright (c) 2022 FelicitusNeko | ||
|  | # | ||
|  | # This software is released under the MIT License. | ||
|  | # https://opensource.org/licenses/MIT | ||
|  | 
 | ||
|  | import typing | ||
|  | 
 | ||
|  | from BaseClasses import Item | ||
|  | 
 | ||
|  | 
 | ||
|  | # pedestal_credit_text: str = "and the Unknown Item" | ||
|  | # sickkid_credit_text: Optional[str] = None | ||
|  | # magicshop_credit_text: Optional[str] = None | ||
|  | # zora_credit_text: Optional[str] = None | ||
|  | # fluteboy_credit_text: Optional[str] = None | ||
|  | 
 | ||
|  | class MeritousLttPText(typing.NamedTuple): | ||
|  |     pedestal: typing.Optional[str] | ||
|  |     sickkid: typing.Optional[str] | ||
|  |     magicshop: typing.Optional[str] | ||
|  |     zora: typing.Optional[str] | ||
|  |     fluteboy: typing.Optional[str] | ||
|  | 
 | ||
|  | 
 | ||
|  | LttPCreditsText = { | ||
|  |     "Nothing": MeritousLttPText("lack of presence", | ||
|  |                                 "Forgot to get you anything", | ||
|  |                                 "Thanks for the shroom, sucker", | ||
|  |                                 "Bucket o' Nothing for 9999.99", | ||
|  |                                 "I can't hear anything"), | ||
|  |     "Reflect Shield upgrade": MeritousLttPText("Protective Aura", | ||
|  |                                                "Safe under the covers", | ||
|  |                                                "Cast a magic circle", | ||
|  |                                                "Psionic aura for sale", | ||
|  |                                                "This tune makes you feel safe"), | ||
|  |     "Circuit Charge upgrade": MeritousLttPText("Psionic Charge", | ||
|  |                                                "This kid's so ready now", | ||
|  |                                                "Expand your mind", | ||
|  |                                                "Psionic energy for sale", | ||
|  |                                                "Synthwave? From a flute?"), | ||
|  |     "Circuit Refill upgrade": MeritousLttPText("Psionic Cleanse", | ||
|  |                                                "All rested up", | ||
|  |                                                "Shrooms for mental floss", | ||
|  |                                                "Psionic refreshment for sale", | ||
|  |                                                "Peaceful little tune"), | ||
|  |     "Map": MeritousLttPText("Twisted Chart", | ||
|  |                             "Abstract artist kid", | ||
|  |                             "Shrooms for pictograms", | ||
|  |                             "Strange imagery for sale", | ||
|  |                             "Just follow the rhythm"), | ||
|  |     "Shield Boost": MeritousLttPText("Heavy Aura", | ||
|  |                                      "Blanket fort kid", | ||
|  |                                      "Shrooms for protection", | ||
|  |                                      "Bigger circles for sale", | ||
|  |                                      "Don't touch the music man"), | ||
|  |     "Crystal Efficiency": MeritousLttPText("Expensive Trinket", | ||
|  |                                            "Investment kid", | ||
|  |                                            "Make your own crystals", | ||
|  |                                            "Invest in someone's future", | ||
|  |                                            "A rich melody"), | ||
|  |     "Circuit Booster": MeritousLttPText("Mental Focus", | ||
|  |                                         "Far-reaching kid", | ||
|  |                                         "I can see through time", | ||
|  |                                         "Finglonger for sale", | ||
|  |                                         "Can you please keep it down"), | ||
|  |     "Metabolism": MeritousLttPText("Energy Drink", | ||
|  |                                    "Zoom-Zoom kid", | ||
|  |                                    "Shrooms for Zooms", | ||
|  |                                    "Speed for sale", | ||
|  |                                    "How does he play so fast"), | ||
|  |     "Dodge Enhancer": MeritousLttPText("Insignificant Dot", | ||
|  |                                        "Evasive kid", | ||
|  |                                        "Still at large", | ||
|  |                                        "Take the money and run", | ||
|  |                                        "Gonna rock and go"), | ||
|  |     "Ethereal Monocle": MeritousLttPText("Weird Glass", | ||
|  |                                          "He can see you coming", | ||
|  |                                          "Okay now I'm seeing things", | ||
|  |                                          "Precognition for sale", | ||
|  |                                          "Like deja vu all over again"), | ||
|  |     "Crystal Gatherer": MeritousLttPText("Attractive Aura", | ||
|  |                                          "Magnetic kid", | ||
|  |                                          "I swear it attracts money", | ||
|  |                                          "Big magnet for sale", | ||
|  |                                          "Works for tips"), | ||
|  |     "Portable Compass": MeritousLttPText("Way Forward", | ||
|  |                                          "Forward-thinking kid", | ||
|  |                                          "Shrooms for Life Advice", | ||
|  |                                          "Moving Needle for sale", | ||
|  |                                          "Sing a tale of adventure"), | ||
|  |     "PSI Key 1": MeritousLttPText("Familiar Artifact", | ||
|  |                                   "Messenger kid", | ||
|  |                                   "The Black Market", | ||
|  |                                   "I've got something good", | ||
|  |                                   "An otherworldly tune"), | ||
|  |     "PSI Key 2": MeritousLttPText("Familiar Artifact", | ||
|  |                                   "Messenger kid", | ||
|  |                                   "The Black Market", | ||
|  |                                   "I've got something good", | ||
|  |                                   "An otherworldly tune"), | ||
|  |     "PSI Key 3": MeritousLttPText("Familiar Artifact", | ||
|  |                                   "Messenger kid", | ||
|  |                                   "The Black Market", | ||
|  |                                   "I've got something good", | ||
|  |                                   "An otherworldly tune"), | ||
|  |     "Cursed Seal": MeritousLttPText("Psionic Anomaly", | ||
|  |                                     "What's this doing here", | ||
|  |                                     "What's this doing here", | ||
|  |                                     "What's this doing here", | ||
|  |                                     "What's this doing here"), | ||
|  |     "Agate Knife": MeritousLttPText("Psionic Anomaly", | ||
|  |                                     "What's this doing here", | ||
|  |                                     "What's this doing here", | ||
|  |                                     "What's this doing here", | ||
|  |                                     "What's this doing here"), | ||
|  |     "Evolution Trap": MeritousLttPText("Awful Curse", | ||
|  |                                        "Dennis the Menace", | ||
|  |                                        "I can make it harder for 'em", | ||
|  |                                        "Pranks for sale", | ||
|  |                                        "This tune sucks, I'm angry now"), | ||
|  |     "Crystals x500": MeritousLttPText("Pile of Rocks", | ||
|  |                                       "Shiny collector kid", | ||
|  |                                       "A backroom exchange", | ||
|  |                                       "Currency conversion here", | ||
|  |                                       "Quarter-full tip jar"), | ||
|  |     "Crystals x1000": MeritousLttPText("Pile of Rocks", | ||
|  |                                        "Shiny collector kid", | ||
|  |                                        "A backroom exchange", | ||
|  |                                        "Currency conversion here", | ||
|  |                                        "Half-full tip jar"), | ||
|  |     "Crystals x2000": MeritousLttPText("Pile of Rocks", | ||
|  |                                        "Shiny collector kid", | ||
|  |                                        "A backroom exchange", | ||
|  |                                        "Currency conversion here", | ||
|  |                                        "This was a real good gig"), | ||
|  |     "Extra Life": MeritousLttPText("Lifesaver", | ||
|  |                                    "Sick kid feels alive again", | ||
|  |                                    "A life-saving concoction", | ||
|  |                                    "Second chance for sale", | ||
|  |                                    "A life-saving melody") | ||
|  | } | ||
|  | 
 | ||
|  | 
 | ||
|  | class MeritousItem(Item): | ||
|  |     game: str = "Meritous" | ||
|  | 
 | ||
|  |     def __init__(self, name, advancement, code, player): | ||
|  |         super(MeritousItem, self).__init__(name, advancement, code, player) | ||
|  |         if code is None: | ||
|  |             self.type = "Event" | ||
|  |         elif "Trap" in name: | ||
|  |             self.type = "Trap" | ||
|  |             self.trap = True | ||
|  |         elif "PSI Key" in name: | ||
|  |             self.type = "PSI Key" | ||
|  |         elif "upgrade" in name: | ||
|  |             self.type = "Enhancement" | ||
|  |         elif "Crystals x" in name: | ||
|  |             self.type = "Crystals" | ||
|  |         elif name == "Nothing": | ||
|  |             self.type = "Nothing" | ||
|  |         elif name == "Cursed Seal" or name == "Agate Knife": | ||
|  |             self.type = name | ||
|  |         elif name == "Extra Life": | ||
|  |             self.type = "Other" | ||
|  |         else: | ||
|  |             self.type = "Artifact" | ||
|  |             self.never_exclude = True | ||
|  | 
 | ||
|  |         if name in LttPCreditsText: | ||
|  |             lttp = LttPCreditsText[name] | ||
|  |             self.pedestal_credit_text = f"and the {lttp.pedestal}" | ||
|  |             self.sickkid_credit_text = lttp.sickkid | ||
|  |             self.magicshop_credit_text = lttp.magicshop | ||
|  |             self.zora_credit_text = lttp.zora | ||
|  |             self.fluteboy_credit_text = lttp.fluteboy | ||
|  | 
 | ||
|  | 
 | ||
|  | offset = 593_000 | ||
|  | 
 | ||
|  | item_table = { | ||
|  |     "Nothing": offset + 0, | ||
|  |     "Reflect Shield upgrade": offset + 1, | ||
|  |     "Circuit Charge upgrade": offset + 2, | ||
|  |     "Circuit Refill upgrade": offset + 3, | ||
|  |     "Map": offset + 4, | ||
|  |     "Shield Boost": offset + 5, | ||
|  |     "Crystal Efficiency": offset + 6, | ||
|  |     "Circuit Booster": offset + 7, | ||
|  |     "Metabolism": offset + 8, | ||
|  |     "Dodge Enhancer": offset + 9, | ||
|  |     "Ethereal Monocle": offset + 10, | ||
|  |     "Crystal Gatherer": offset + 11, | ||
|  |     "Portable Compass": offset + 12, | ||
|  |     "PSI Key 1": offset + 13, | ||
|  |     "PSI Key 2": offset + 14, | ||
|  |     "PSI Key 3": offset + 15, | ||
|  |     "Cursed Seal": offset + 16, | ||
|  |     "Agate Knife": offset + 17, | ||
|  |     "Evolution Trap": offset + 18, | ||
|  |     "Crystals x500": offset + 19, | ||
|  |     "Crystals x1000": offset + 20, | ||
|  |     "Crystals x2000": offset + 21, | ||
|  |     "Extra Life": offset + 22 | ||
|  | } | ||
|  | 
 | ||
|  | item_groups = { | ||
|  |     "PSI Keys": [f"PSI Key {x}" for x in range(1, 4)], | ||
|  |     "Upgrades": ["Reflect Shield upgrade", "Circuit Charge upgrade", "Circuit Refill upgrade"], | ||
|  |     "Artifacts": ["Map", "Shield Boost", "Crystal Efficiency", "Circuit Booster", | ||
|  |                   "Metabolism", "Dodge Enhancer", "Ethereal Monocle", "Crystal Gatherer", | ||
|  |                   "Portable Compass"], | ||
|  |     "Crystals": ["Crystals x500", "Crystals x1000", "Crystals x2000"] | ||
|  | } |