| 
									
										
										
										
											2022-03-18 00:30:47 -03:00
										 |  |  | # Copyright (c) 2022 FelicitusNeko | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # This software is released under the MIT License. | 
					
						
							|  |  |  | # https://opensource.org/licenses/MIT | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import typing | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-06-17 03:23:27 +02:00
										 |  |  | from BaseClasses import Item, ItemClassification | 
					
						
							| 
									
										
										
										
											2022-08-06 00:49:54 +02:00
										 |  |  | from worlds.alttp import ALTTPWorld | 
					
						
							| 
									
										
										
										
											2022-03-18 00:30:47 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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" | 
					
						
							| 
									
										
										
										
											2022-08-06 00:49:54 +02:00
										 |  |  |     type: str | 
					
						
							| 
									
										
										
										
											2022-03-18 00:30:47 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def __init__(self, name, advancement, code, player): | 
					
						
							| 
									
										
										
										
											2022-06-17 03:23:27 +02:00
										 |  |  |         super(MeritousItem, self).__init__(name, | 
					
						
							|  |  |  |                                            ItemClassification.progression if advancement else ItemClassification.filler, | 
					
						
							|  |  |  |                                            code, player) | 
					
						
							| 
									
										
										
										
											2022-03-18 00:30:47 -03:00
										 |  |  |         if code is None: | 
					
						
							|  |  |  |             self.type = "Event" | 
					
						
							|  |  |  |         elif "Trap" in name: | 
					
						
							|  |  |  |             self.type = "Trap" | 
					
						
							| 
									
										
										
										
											2022-06-17 03:23:27 +02:00
										 |  |  |             self.classification = ItemClassification.trap | 
					
						
							| 
									
										
										
										
											2022-03-18 00:30:47 -03:00
										 |  |  |         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" | 
					
						
							| 
									
										
										
										
											2022-05-27 19:52:14 -03:00
										 |  |  |         elif self.advancement: | 
					
						
							|  |  |  |             self.type = "Important Artifact" | 
					
						
							| 
									
										
										
										
											2022-03-18 00:30:47 -03:00
										 |  |  |         else: | 
					
						
							|  |  |  |             self.type = "Artifact" | 
					
						
							| 
									
										
										
										
											2022-06-17 03:23:27 +02:00
										 |  |  |             self.classification = ItemClassification.useful | 
					
						
							| 
									
										
										
										
											2022-03-18 00:30:47 -03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 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"], | 
					
						
							| 
									
										
										
										
											2022-05-27 19:52:14 -03:00
										 |  |  |     "Important Artifacts": ["Shield Boost", "Circuit Booster", "Metabolism", "Dodge Enhancer"], | 
					
						
							| 
									
										
										
										
											2022-03-18 00:30:47 -03:00
										 |  |  |     "Crystals": ["Crystals x500", "Crystals x1000", "Crystals x2000"] | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2022-08-06 00:49:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | ALTTPWorld.pedestal_credit_texts.update({item_table[name]: f"and the {texts.pedestal}" | 
					
						
							|  |  |  |                                          for name, texts in LttPCreditsText.items()}) | 
					
						
							|  |  |  | ALTTPWorld.sickkid_credit_texts.update({item_table[name]: texts.sickkid for name, texts in LttPCreditsText.items()}) | 
					
						
							|  |  |  | ALTTPWorld.magicshop_credit_texts.update({item_table[name]: texts.magicshop for name, texts in LttPCreditsText.items()}) | 
					
						
							|  |  |  | ALTTPWorld.zora_credit_texts.update({item_table[name]: texts.zora for name, texts in LttPCreditsText.items()}) | 
					
						
							|  |  |  | ALTTPWorld.fluteboy_credit_texts.update({item_table[name]: texts.fluteboy for name, texts in LttPCreditsText.items()}) |