220 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			220 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, ItemClassification
 | 
						|
 | 
						|
 | 
						|
# 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,
 | 
						|
                                           ItemClassification.progression if advancement else ItemClassification.filler,
 | 
						|
                                           code, player)
 | 
						|
        if code is None:
 | 
						|
            self.type = "Event"
 | 
						|
        elif "Trap" in name:
 | 
						|
            self.type = "Trap"
 | 
						|
            self.classification = ItemClassification.trap
 | 
						|
        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"
 | 
						|
        elif self.advancement:
 | 
						|
            self.type = "Important Artifact"
 | 
						|
        else:
 | 
						|
            self.type = "Artifact"
 | 
						|
            self.classification = ItemClassification.useful
 | 
						|
 | 
						|
        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"],
 | 
						|
    "Important Artifacts": ["Shield Boost", "Circuit Booster", "Metabolism", "Dodge Enhancer"],
 | 
						|
    "Crystals": ["Crystals x500", "Crystals x1000", "Crystals x2000"]
 | 
						|
}
 |