From e23dd30a59ee5cf0473acbc821515cd19b7eca7d Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Sun, 7 Jun 2026 21:46:18 -0500 Subject: [PATCH 1/8] Add orange potion --- Items.py | 7 ++++--- Rom.py | 2 +- data/base2current.bps | Bin 158170 -> 158476 bytes 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/Items.py b/Items.py index 52a399fc..87cfbc62 100644 --- a/Items.py +++ b/Items.py @@ -97,8 +97,8 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'Bow!\nJoin the archer class 'Progressive Shield': (True, False, None, 0x5F, 50, 'Shield!\nA better shield for your time!', 'and the new shield', 'shield-wielding kid', 'shield for sale', 'fungus for shield', 'shield boy defends again', 'a shield'), 'Bug Catching Net': (True, False, None, 0x21, 50, 'Bug Net!\nCatch all manner\nof things!', 'and the bee catcher', 'the bug-catching kid', 'stick web for sale', 'fungus for butterflies', 'wrong boy catches bees again', 'the Bug Net'), 'Cane of Byrna': (True, False, None, 0x18, 50, 'Cane of Byrna!\nSwirly protection!', 'and the bad cane', 'the spark-making kid', 'spark stick for sale', 'spark-stick for trade', 'cane boy encircles again', 'the Blue Cane'), - 'Boss Heart Container': (False, True, None, 0x3E, 40, 'Heart Container!\nHealth Increased!', 'and the full heart', 'the life-giving kid', 'love for sale', 'fungus for life', 'life boy feels love again', 'a heart'), - 'Sanctuary Heart Container': (False, True, None, 0x3F, 50, 'Heart Container!\nHealth Increased!', 'and the full heart', 'the life-giving kid', 'love for sale', 'fungus for life', 'life boy feels love again', 'a heart'), + 'Boss Heart Container': (False, True, None, 0x3E, 40, 'Heart Container!\nHealth Increased!', 'and the full heart', 'the life-giving kid', 'love for sale', 'fungus for life', 'life boy feels love again', 'a heart container'), + 'Sanctuary Heart Container': (False, True, None, 0x3F, 50, 'Heart Container!\nHealth Increased!', 'and the full heart', 'the life-giving kid', 'love for sale', 'fungus for life', 'life boy feels love again', 'a heart container'), 'Piece of Heart': (False, False, None, 0x17, 10, 'Heart Piece!\nOne step closer\nto more health!', 'and the broken heart', 'the life-giving kid', 'little love for sale', 'fungus for life', 'life boy feels some love again', 'a heart piece'), 'Rupee (1)': (False, False, None, 0x34, 0, 'Rupees!\nJust pocket\nchange.', 'the pocket change', 'poverty-struck kid', 'life lesson for sale', 'buying cheap drugs', 'destitute boy has snack again', 'a green rupee'), 'Rupees (5)': (False, False, None, 0x35, 2, 'Rupees!\nJust pocket\nchange.', 'the pocket change', 'poverty-struck kid', 'life lesson for sale', 'buying cheap drugs', 'destitute boy has snack again', 'a blue rupee'), @@ -172,9 +172,10 @@ item_table = {'Bow': (True, False, None, 0x0B, 200, 'Bow!\nJoin the archer class 'Red Potion': (False, False, None, 0x2E, 150, 'Hearty red goop!', 'and the red goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has red goo again', 'a red potion'), 'Green Potion': (False, False, None, 0x2F, 60, 'Refreshing green goop!', 'and the green goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has green goo again', 'a green potion'), 'Blue Potion': (False, False, None, 0x30, 160, 'Delicious blue goop!', 'and the blue goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has blue goo again', 'a blue potion'), + 'Orange Potion': (False, False, None, 0x66, 1000, 'Energizing orange goop!', 'and the orange goo', 'the liquid kid', 'potion for sale', 'free samples', 'bottle boy has orange goo again', 'an orange potion'), 'Bee': (False, False, None, 0x0E, 10, 'I will sting your foes a few times', 'and the sting buddy', 'the beekeeper kid', 'insect for sale', 'shroom pollenation', 'bottle boy has mad bee again', 'a bee'), 'Good Bee': (False, False, None, 0xD6, 10, 'I will sting your foes a lot', 'and the cold buddy', 'the beekeeper kid', 'cold insect for sale', 'shroom pollenation', 'bottle boy has cold bee again', 'a good bee'), - 'Small Heart': (False, False, None, 0x42, 10, 'Just a little\npiece of love!', 'and the heart', 'the life-giving kid', 'little love for sale', 'fungus for life', 'life boy feels some love again', 'a heart'), + 'Small Heart': (False, False, None, 0x42, 10, 'Just a little\npiece of love!', 'and the heart', 'the life-giving kid', 'little love for sale', 'fungus for life', 'life boy feels some love again', 'a refill heart'), 'Apples': (False, False, None, 0xD1, 30, 'Just a few pieces of fruit!', 'and the juicy fruit', 'the fruity kid', 'the fruit stand', 'expired fruit', 'bottle boy has fruit again', 'an apple hoard'), 'Fairy': (False, False, None, 0xD2, 50, 'Just a pixie!', 'and the pixie', 'the pixie kid', 'pixie for sale', 'pixie fungus', 'bottle boy has pixie again', 'a pixie'), 'Beat Boss': (True, False, 'Event', 999, None, None, None, None, None, None, None, None), diff --git a/Rom.py b/Rom.py index f45267ce..06b598db 100644 --- a/Rom.py +++ b/Rom.py @@ -85,7 +85,7 @@ from Utils import int16_as_bytes, int32_as_bytes, local_path, snes_to_pc from Versions import DRVersion, GKVersion, ORVersion JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'abaa7ce289fd18e0ab898f2ca1263db1' +RANDOMIZERBASEHASH = 'd340a2934396e403c99f12d0ed3c832d' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index 91fc261a680311b1afce4763769edf73d26ea277..a8757316ddded43c8369deaf565e389afa1d17fa 100644 GIT binary patch delta 21191 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 E29`6)NB{r; delta 20913 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 From 14cb3e472c5e6d0b4a0a17c870d225d10fd8c3e6 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Mon, 8 Jun 2026 00:12:10 -0500 Subject: [PATCH 2/8] Update baserom --- Rom.py | 4 ++-- data/base2current.bps | Bin 158476 -> 158510 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Rom.py b/Rom.py index 06b598db..3f9d0d6e 100644 --- a/Rom.py +++ b/Rom.py @@ -85,7 +85,7 @@ from Utils import int16_as_bytes, int32_as_bytes, local_path, snes_to_pc from Versions import DRVersion, GKVersion, ORVersion JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'd340a2934396e403c99f12d0ed3c832d' +RANDOMIZERBASEHASH = '0f3a202c548755e38a5aa499124d1d1b' class JsonRom(object): @@ -1450,7 +1450,7 @@ def patch_rom(world, rom, player, team, is_mystery=False, rom_header=None): "bee": 0x10, "somaria": 0x11, "byrna": 0x12, - "none": 0xFF, + "none": 0x7F, } rom.write_byte(0x18002E, ganon_item_byte[world.ganon_item[player]]) diff --git a/data/base2current.bps b/data/base2current.bps index a8757316ddded43c8369deaf565e389afa1d17fa..c0ff99413c76ceb599c783e000958b2b1d63a29c 100644 GIT binary patch delta 15724 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 WL(=1dbovg>ef}Zk;~D*xq5lUkX;ymx From 844db083a604634c9855c2a76469dca568437882 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Mon, 8 Jun 2026 16:14:03 -0500 Subject: [PATCH 3/8] Update baserom --- Rom.py | 2 +- data/base2current.bps | Bin 158510 -> 158510 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/Rom.py b/Rom.py index 3f9d0d6e..c1f4bb52 100644 --- a/Rom.py +++ b/Rom.py @@ -85,7 +85,7 @@ from Utils import int16_as_bytes, int32_as_bytes, local_path, snes_to_pc from Versions import DRVersion, GKVersion, ORVersion JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '0f3a202c548755e38a5aa499124d1d1b' +RANDOMIZERBASEHASH = 'c7ef3ff118c84ddd427ca4fa2461a47b' class JsonRom(object): diff --git a/data/base2current.bps b/data/base2current.bps index c0ff99413c76ceb599c783e000958b2b1d63a29c..257b393a4ae277d072f1b49a8eb285ee07c596f9 100644 GIT binary patch delta 45 zcmV+|0Mh@i)(NiG39yU<1kVUC_k)lFw~zw?kQf3=0f! Date: Mon, 8 Jun 2026 21:36:19 -0500 Subject: [PATCH 4/8] Text updates --- Rom.py | 10 ++- Text.py | 183 +++++++++++++++++++++--------------------- data/base2current.bps | Bin 158510 -> 158515 bytes 3 files changed, 98 insertions(+), 95 deletions(-) diff --git a/Rom.py b/Rom.py index c1f4bb52..8a437707 100644 --- a/Rom.py +++ b/Rom.py @@ -2912,7 +2912,7 @@ def write_strings(rom, world, player, team, is_mystery=False): tt['sign_ganon'] = 'Ganon only respects those who have done everything.' tt['ganon_fall_in'] = Ganon1_texts[random.randint(0, len(Ganon1_texts) - 1)] tt['ganon_fall_in_alt'] = 'You cannot defeat me until you finish your goal!' - tt['ganon_phase_3_alt'] = 'Got wax in\nyour ears?\nI can not die!' + tt['ganon_phase_3_alt'] = 'Got wax in\nyour ears?\nI cannot die!' def get_custom_goal_text(type): goal_text = world.custom_goals[player][type]['goaltext'] @@ -2931,7 +2931,13 @@ def write_strings(rom, world, player, team, is_mystery=False): if world.custom_goals[player]['murahgoal'] and 'goaltext' in world.custom_goals[player]['murahgoal']: tt['murahdahla'] = get_custom_goal_text('murahgoal') - tt['kakariko_tavern_fisherman'] = TavernMan_texts[random.randint(0, len(TavernMan_texts) - 1)] + tavern_texts = random.sample(TavernMan_texts, 5) + + tt['tavern_old_man_awake'] = tavern_texts.pop() + tt['tavern_old_man_unactivated_flute'] = tavern_texts.pop() + tt['tavern_old_man_know_tree_unactivated_flute'] = tavern_texts.pop() + tt['tavern_old_man_have_flute'] = tavern_texts.pop() + tt['kakariko_tavern_fisherman'] = tavern_texts.pop() pedestalitem = world.get_location('Master Sword Pedestal', player).item pedestal_text = 'Some Hot Air' if pedestalitem is None else hint_text(pedestalitem, True) if pedestalitem.pedestal_hint_text is not None else 'Unknown Item' diff --git a/Text.py b/Text.py index 761f2f17..b347d9b3 100644 --- a/Text.py +++ b/Text.py @@ -50,18 +50,18 @@ Uncle_texts = [ "Don't worry.\nI got this\ncovered.", "Race you to\nthe castle!", "\n Hi", - "I'M JUST GOING\nOUT FOR A\nPACK OF SMOKES", + "I'm just going\nout for a\npack of smokes.", "It's dangerous\nto go alone.\nSee ya!", - "ARE YOU A BAD\nENOUGH DUDE TO\nRESCUE ZELDA?", + "Are you a bad\nenough dude to\nrescue Zelda?", "\n\n I AM ERROR", "This seed is\nsub 2 hours,\nguaranteed.", "The chest is\na secret to\neverybody.", "I'm off to\nfind the\nwind fish.", "The shortcut\nto Ganon\nis this way!", - "THE MOON IS\nCRASHING! RUN\nFOR YOUR LIFE!", + "The moon is\ncrashing! Run\nfor your life!", "Time to fight\nhe who must\nnot be named.", - "RED MAIL\nIS FOR\nCOWARDS.", - "HEY!\n\nLISTEN!", + "Red mail\nis for\ncowards.", + "Hey!\n\nListen!", "Well\nexcuuuuuse me,\nprincess!", "5,000 Rupee\nreward for >\nYou're boned.", "Welcome to\nStoops Lonk's\nHoose", @@ -230,97 +230,92 @@ Ganon1_texts = [ ] Ganon_Phase_3_No_Silvers_texts = [ - "Did you find\nthe arrows on\nPlanet Zebes?", + "Did you find\nthe arrows\non Planet Zebes?", "Did you find\nthe arrows?\nI think not.", - "Silver arrows?\nI have never\nheard of them", + "Silver arrows?\nI have never\nheard of them.", "Did you find\nthe arrows on\nThe Moon?", - "Did you find\nthe arrows\nIn dev null?", - "I have sold\nthe arrows for\na green big 20", + "Did you find\nthe arrows\nin /dev/null?", + "I have sold\nthe arrows for\na green big 20.", "Did you find\nthe arrows in\nCount Dracula?", - "Error 404\nSilver arrows\nnot found.", - "No arrows for\nyou today.\nSorry.", + " Error 404\nSilver Arrows\n Not Found", + "No arrows\nfor you today.\nSorry.", "No arrows?\nCheck your\njunk mail." - "Did you find\nthe arrows in\nJabu's belly?", - "Silver is not\nan appropriate\narrow material", - "Did you find\nthe arrows in\nNarnia?", - "DID YOU FIND\nTHE ARROWS IN\nKEFKA'S TOWER", - "Did you find\nthe arrows in\nyour Recycle Bin?", + "Did you find\nthe arrows\nin Jabu's belly?", + "Silver is not\nan appropriate\narrow material.", + "Did you find\nthe arrows\nin nNarnia?", + "Did you find\nthe arrows\nin nKefka's Tower.", + "Did you find\nthe arrows\nin nyour Recycle Bin?", "Silver Arrows?\n\nLUL", - "Imagine\nfinding the\narrows", - "Did you find\nsilvers in\nscenic Ohio?", - "Did you find\nthe arrows in\n*mumblemumble*", - "Did you find\nthe arrows in\nthe hourglass?", - "Silver Arrows\nare so v30", - "OH, NO, THEY\nACTUALLY SAID\nSILVER MARROW", - "SURELY THE\nLEFTMOST TILES\nWILL STAY UP", - "Did you find\nthe arrows in\nWorld 4-2?", - "SILLY HERO,\nSILVER IS FOR\nWEREWOLVES!", - "Did you find\nthe silvers in\nGanti's ears", + "\nImagine finding\nthe arrows.", + "Did you find\nthe arrows\nin scenic Ohio?", + "Did you find\nthe arrows\nin •mumblemumble•", + "Did you find\nthe arrows\nin the hourglass?", + "\nSilver Arrows\nare so main branch.", + "Did you find\nthe arrows\nin World 4-2?", + "Did you find\nthe arrows\nin Ghanti's ears?", ] Ganon_Phase_3_No_Weakness_texts = [ - "Error 404\nWeakness\nnot found.", - "No weakness\nfor you today.\nSorry", - "Careful, all\nthat spinning\nmakes me dizzy", - "Are you ready\nTo spin\nTo win?", - "\nSpin To Win!\n", - "SURELY THE\nLEFTMOST TILES\nWILL STAY UP", - "You Spin Me\nRight Round\nLike A Record", - "SILLY HERO,\nSILVER IS FOR\nWEREWOLVES!", + "\n Error 404\nWeakness Not Found", + "No weakness\nfor you today.\nSorry.", + "Careful, all\nthat spinning\nmakes me dizzy.", + "Are you ready\nto spin\nto win?", + "\n Spin To Win!\n", + "Surely the\nleftmost tiles\nwill stay up!", + "You spin me\nright round\nlike a record.", + "Oh, no, they\nactually said\nsilver •marrow•.", + "Silly hero,\nsilver is for\nwerewolves!", ] TavernMan_texts = [ - "What do you\ncall a blind\ndinosaur?\na doyouthink-\nhesaurus.", - "A blind man\nwalks into\na bar.\nAnd a table.\nAnd a chair.", - "What do ducks\nlike to eat?\n\nQuackers!", - "How do you\nset up a party\nin space?\n\nYou planet!", - "I'm glad I\nknow sign\nlanguage.\nIt's pretty\nhandy.", - "What did Zelda\nsay to Link at\na secure door?\n\nTRIFORCE!", - "I am on a\nseafood diet.\n\nEvery time\nI see food,\nI eat it.", - "I've decided\nto sell my\nvacuum.\nIt was just\ngathering\ndust.", - "What's the best\ntime to go to\nthe dentist?\n\nTooth-hurtie!", - "Why can't a\nbike stand on\nits own?\n\nIt's two-tired!", - "If you haven't\nfound Quake\nyet…\nit's not your\nfault.", - "Why is Peter\nPan always\nflying?\nBecause he\nNeverlands!", - "I once told a\njoke to Armos.\n\nBut he\nremained\nstone-faced!", - "Lanmola was\nlate to our\ndinner party.\nHe just came\nfor the desert", - "Moldorm is\nsuch a\nprankster.\nAnd I fall for\nit every time!", - "Helmasaur is\nthrowing a\nparty.\nI hope it's\na masquerade!", - "I'd like to\nknow Arrghus\nbetter.\nBut he won't\ncome out of\nhis shell!", - "Mothula didn't\nhave much fun\nat the party.\nHe's immune to\nspiked punch!", - "Don't set me\nup with that\nchick from\nSteve's Town.\n\n\nI'm not\ninterested in\na Blind date!", - "Kholdstare is\nafraid to go\nto the circus.\nHungry kids\nthought he was\ncotton candy!", - "I asked who\nVitreous' best\nfriends are.\nHe said,\n'Me, Myself,\nand Eye!'", - "Trinexx can be\na hothead or\nhe can be an\nice guy. In\nthe end, he's\na solid\nindividual!", - "Bari thought I\nhad moved out\nof town.\nHe was shocked\nto see me!", - "I can only get\nWeetabix\naround here.\nI have to go\nto Steve's\nTown for Count\nChocula!", - "Don't argue\nwith a frozen\nDeadrock.\nHe'll never\nchange his\nposition!", - "I offered a\ndrink to a\nself-loathing\nGhini.\nHe said he\ndidn't like\nspirits!", - "I was supposed\nto meet Gibdo\nfor lunch.\nBut he got\nwrapped up in\nsomething!", - "Goriya sure\nhas changed\nin this game.\nI hope he\ncomes back\naround!", - "Hinox actually\nwants to be a\nlawyer.\nToo bad he\nbombed the\nBar exam!", - "I'm surprised\nMoblin's tusks\nare so gross.\nHe always has\nhis Trident\nwith him!", - "Don't tell\nStalfos I'm\nhere.\nHe has a bone\nto pick with\nme!", - "I got\nWallmaster to\nhelp me move\nfurniture.\nHe was really\nhandy!", - "Wizzrobe was\njust here.\nHe always\nvanishes right\nbefore we get\nthe check!", - "I shouldn't\nhave picked up\nZora's tab.\nThat guy\ndrinks like\na fish!", - "I was sharing\na drink with\nPoe.\nFor no reason,\nhe left in a\nheartbeat!", - "Don't trust\nhorsemen on\nDeath Mountain.\nThey're Lynel\nthe time!", - "Today's\nspecial is\nbattered bat.\nGot slapped\nfor offering a\nlady a Keese!", - "Don't walk\nunder\npropellered\npineapples.\nYou may end up\nwearing\na pee hat!", - "My girlfriend\nburrowed under\nthe sand.\nSo I decided\nto Leever!", - "Geldman wants\nto be a\nBroadway star.\nHe's always\npracticing\nJazz Hands!", - "Octoballoon\nmust be mad\nat me.\nHe blows up\nat the sight\nof me!", - "Toppo is a\ntotal pothead.\n\nHe hates it\nwhen you take\naway his grass", - "I lost my\nshield by\nthat house.\nWhy did they\nput up a\nPikit fence?!", - "Know that fox\nin Steve's\nTown?\nHe'll Pikku\npockets if you\naren't careful", - "Dash through\nDark World\nbushes.\nYou'll see\nGanon is tryin\nto Stal you!", - "Eyegore!\n\nYou gore!\nWe all gore\nthose jerks\nwith arrows!", - "I like my\nwhiskey neat.\n\nSome prefer it\nOctoroks!", - "I consoled\nFreezor over a\ncup of coffee.\nHis problems\njust seemed to\nmelt away!", - "Magic droplets\nof water don't\nshut up.\nThey just\nKyameron!", - "I bought hot\nwings for\nSluggula.\nThey gave him\nexplosive\ndiarrhea!", - "Hardhat Beetle\nwon't\nLet It Be?\nTell it to Get\nBack or give\nit a Ticket to\nRide down\na hole!", + "What do you call a blind dinosaur?\n\nA doyouthink-\nhesaurus.", + "What do ducks like to eat?\n\nQuackers!", + "How do you set up a party in space?\n\nYou planet!", + "I'm glad I know sign language.\nIt's pretty handy.", + "What did Zelda say to Link at a secure door?\n\nTriforce!", + "I am on a seafood diet.\n\nEvery time I see food, I eat it.", + "I've decided to sell my vacuum.\n\nIt was just gathering dust.", + "What's the best time to go to the dentist?\n\nTooth-hurtie!", + "Why can't a bike stand on its own?\n\nIt's two-tired!", + "If you haven't found Quake yet…\n\nit's not your fault.", + "Why is Peter Pan always flying?\n\nBecause he Neverlands!", + "I once told a joke to Armos.\n\nBut he remained stone-faced!", + "Lanmola was late to our dinner party.\n\nHe just came for the desert", + "Moldorm is such a prankster.\n\nAnd I fall for it every time!", + "Helmasaur is throwing a party.\n\nI hope it's a masquerade!", + "I'd like to know Arrghus better.\n\nBut he won't come out of his shell!", + "Mothula didn't have much fun at the party.\n\nHe's immune to spiked punch!", + "Kholdstare is afraid to go to the circus.\n\nHungry kids thought he was cotton candy!", + "I asked who Vitreous' best friends are.\n\nHe said, \"Me, Myself, and Eye!\"", + "Trinexx can be a hothead or he can be an ice guy. In the end, he's a solid individual!", + "Bari thought I had moved out of town.\n\nHe was shocked to see me!", + "Don't argue with a frozen Deadrock.\n\nHe'll never change his position!", + "I offered a drink to a self-loathing Ghini.\n\nHe said he didn't like spirits!", + "I was supposed to meet Gibdo for lunch.\n\nBut he got wrapped up in something!", + "Goriya sure has changed in this game.\n\nI hope he comes back around!", + "Hinox actually wants to be a lawyer.\n\nToo bad he bombed the bar exam!", + "I'm surprised Moblin's tusks are so gross.\n\nHe always has his Trident with him!", + "Don't tell Stalfos I'm here.\n\nHe has a bone to pick with me!", + "I got Wallmaster to help me move furniture.\n\nHe was really handy!", + "Wizzrobe was just here.\n\nHe always vanishes right before we get the check!", + "I shouldn't have picked up Zora's tab.\n\nThat guy drinks like a fish!", + "I was sharing a drink with Poe.\n\nFor no reason, he left in a heartbeat!", + "Don't trust horsemen on Death Mountain.\n\nThey're Lynel the time!", + "Today's special is battered bat.\n\nGot slapped for offering a lady a Keese!", + "Don't walk under propellered pineapples.\n\nYou may end up wearing a pee hat!", + "My girlfriend burrowed under the sand.\n\nSo I decided to Leever!", + "Geldman wants to be a Broadway star.\n\nHe's always practicing Jazz Hands!", + "Octoballoon must be mad at me.\n\nHe blows up at the sight of me!", + "Toppo is a total pothead.\n\nHe hates it when you take away his grass", + "I lost my shield by that house.\n\nWhy did they put up a Pikit fence?!", + "Know that fox in Steve's Town?\n\nHe'll Pikku pockets if you aren't careful", + "Dash through Dark World bushes.\n\nYou'll see Ganon is tryin to Stal you!", + "Eyegore!\n\nYou gore!\n\nWe all gore those jerks with arrows!", + "I like my whiskey neat.\n\nSome prefer it Octoroks!", + "I consoled Freezor over a cup of coffee.\n\nHis problems just seemed to melt away!", + "Magic droplets of water don't shut up.\n\nThey just Kyameron!", + "I bought hot wings for Sluggula.\n\nThey gave him explosive diarrhea!", + "Hardhat Beatle won't Let It Be?\n\nTell it to Get Back or give it a Ticket to Ride down a hole!", ] junk_texts = [ @@ -349,16 +344,15 @@ junk_texts = [ ] KingsReturn_texts = [ - 'Who is this even', + "Who is this even", 'When did he get here', - 'The Harem' ] * 2 + [ - "the return of the king", - "fellowship of the ring", - "the two towers", + "The Return of the King", + "Fellowship of the Ring", + "The Two Towers", ] Sanctuary_texts = [ - 'A Priest\'s love' + "a priest's love" ] * 2 + [ "the loyal priest", "read a book", @@ -488,7 +482,7 @@ class Credits(object): ], 'pedestal': [ SceneSmallCreditLine(19, 'and the master sword'), - SceneSmallAltCreditLine(21, 'sleeps again···'), + SceneSmallAltCreditLine(21, 'sleeps again…'), SceneLargeCreditLine(23, 'Forever!'), ], } @@ -832,6 +826,8 @@ class CharTextMapper(object): class RawMBTextMapper(CharTextMapper): char_map = {' ': 0xFF, + '/': 0x97, + '•': 0x98, '≥': 0x99, # Cursor '『': 0xC4, '』': 0xC5, @@ -1315,7 +1311,8 @@ class GoldCreditMapper(CharTextMapper): class GreenCreditMapper(CharTextMapper): char_map = {' ': 0x9F, - '.': 0x52, + '…': 0xFD, + '.': 0xFE, '·': 0x52} alpha_offset = -0x29 alpha_lower_offset = -0x29 diff --git a/data/base2current.bps b/data/base2current.bps index 257b393a4ae277d072f1b49a8eb285ee07c596f9..aec296c329d9d018af93598becee52b5fe29ee4b 100644 GIT binary patch delta 69 zcmV-L0J{IK)(NxL39yU<1V9JB_=AuGw~zw?ni~QcfR`&D0Ur`Q002KJ{wewffmbe} bUnhkifrnTh0k>Em0?tbavb!wi%W36jXjB=K delta 64 zcmV-G0KfmU)(NiG39yU<1kVUC_k)lFw~zw?ni~Q6mn Date: Mon, 8 Jun 2026 22:04:45 -0500 Subject: [PATCH 5/8] Orange potion flag --- Main.py | 21 ++++++++++++++++++++- Rom.py | 14 +++++++++++--- resources/app/cli/args.json | 4 ++++ 3 files changed, 35 insertions(+), 4 deletions(-) diff --git a/Main.py b/Main.py index f19c75d9..fd086076 100644 --- a/Main.py +++ b/Main.py @@ -336,10 +336,29 @@ def main(args, seed=None, fish=None): for player in range(1, world.players+1): if world.shopsanity[player]: customize_shops(world, player) + if not args.skip_money_balance and args.algorithm in ['balanced', 'equitable']: balance_money_progression(world) ensure_good_items(world, True) + for player in range(1, world.players+1): + if args.orange_potion and world.difficulty[player] == "normal": + cap_shop = world.get_region('Capacity Upgrade', player).shop + potion = { + 'item': "Orange Potion", + 'price': 1000, + 'max': 0, + 'replacement': None, + 'replacement_price': 0, + 'create_location': False, + 'player': 0, + } + if cap_shop.inventory[0] is None: + cap_shop.inventory[0] = potion + else: + cap_shop.inventory.insert(1, potion) + + if args.print_custom_yaml: world.settings.record_info(world) world.settings.record_overworld(world) @@ -482,7 +501,7 @@ def export_yaml(args, fish): for player in range(1, world.players + 1): world.difficulty_requirements[player] = difficulties[world.difficulty[player]] - + set_starting_inventory(world, args) world.settings = CustomSettings() diff --git a/Rom.py b/Rom.py index 8a437707..eb1170e5 100644 --- a/Rom.py +++ b/Rom.py @@ -85,7 +85,7 @@ from Utils import int16_as_bytes, int32_as_bytes, local_path, snes_to_pc from Versions import DRVersion, GKVersion, ORVersion JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = 'c7ef3ff118c84ddd427ca4fa2461a47b' +RANDOMIZERBASEHASH = '94ff6d50db131aabe6b086e783709004' class JsonRom(object): @@ -2021,7 +2021,15 @@ def write_custom_shops(rom, world, player): if world.shopsanity[player] or shop.type == ShopType.TakeAny: rom.write_byte(0x186E40 + shop.sram_address + index, 1) if world.shopsanity[player] and shop.region.name in shop_to_location_table: - loc_item = world.get_location(shop_to_location_table[shop.region.name][index], player).item + if shop.region.name == "Capacity Upgrade" and shop.item_count == 3: + if index == 1: + loc_item = ItemFactory(item['item'], player) + else: + if index == 2: + index = 1 + loc_item = world.get_location(shop_to_location_table[shop.region.name][index], player).item + else: + loc_item = world.get_location(shop_to_location_table[shop.region.name][index], player).item elif world.shopsanity[player] and shop.region.name in retro_shops: loc_item = world.get_location(retro_shops[shop.region.name][index], player).item else: @@ -2037,7 +2045,7 @@ def write_custom_shops(rom, world, player): replace_price = int16_as_bytes(item['replacement_price']) item_max = item['max'] item_player = 0 if item['player'] == player else item['player'] - item_data = [shop_id, item_id] + price + [item_max, replace] + replace_price + [item_player] + item_data = [shop_id, item_id] + price + [item_max, replace] + replace_price + [item_player] items_data.extend(item_data) rom.write_bytes(0x184800, shop_data) diff --git a/resources/app/cli/args.json b/resources/app/cli/args.json index 0918413b..4df2a18f 100644 --- a/resources/app/cli/args.json +++ b/resources/app/cli/args.json @@ -759,6 +759,10 @@ "type": "str", "help": "suppress" }, + "orange_potion": { + "action": "store_true", + "help": "suppress" + }, "settingsonload": { "choices": [ "default", From 8374960e4e360b2a54473c99b8c8aaee844febb6 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Mon, 8 Jun 2026 22:25:36 -0500 Subject: [PATCH 6/8] Fix missing world in some item objects --- ItemList.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ItemList.py b/ItemList.py index 406c8261..9aa9b5ac 100644 --- a/ItemList.py +++ b/ItemList.py @@ -944,6 +944,7 @@ def customize_shops(world, player): rep_price = final_price(loc.name, item.price, world, player) shop.add_inventory(idx, upgrade.name, up_price, 6, item.name, rep_price, player=item.player) + upgrade.world = loc.item.world loc.item = upgrade upgrade.location = loc if not found_arrow_upgrade and len(possible_replacements) > 0: @@ -959,6 +960,7 @@ def customize_shops(world, player): shop.add_inventory(idx, upgrade.name, up_price, 6, item.name, rep_price, player=item.player) loc.item = upgrade + upgrade.world = loc.item.world upgrade.location = loc change_shop_items_to_rupees(world, player, shops_to_customize) balance_prices(world, player) @@ -995,9 +997,11 @@ def change_shop_items_to_rupees(world, player, shops): for location in locations: if location.item.name in shop_transfer.keys() and (location.parent_region.name not in shops or location.name == 'Potion Shop'): new_item = ItemFactory(shop_transfer[location.item.name], location.item.player) + new_item.world = location.item.world location.item = new_item if location.parent_region.name == 'Capacity Upgrade' and location.item.name in cap_blacklist: new_item = ItemFactory('Rupees (300)', location.item.player) + new_item.world = location.item.world location.item = new_item shop = world.get_region('Capacity Upgrade', player).shop slot = shop_to_location_table['Capacity Upgrade'].index(location.name) From 2039159d36071a3d971fa07070ee27e5150ccb16 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Mon, 8 Jun 2026 22:58:29 -0500 Subject: [PATCH 7/8] Textbox for orange potion --- Rom.py | 2 +- Text.py | 3 ++- data/base2current.bps | Bin 158515 -> 158530 bytes 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/Rom.py b/Rom.py index eb1170e5..02335767 100644 --- a/Rom.py +++ b/Rom.py @@ -85,7 +85,7 @@ from Utils import int16_as_bytes, int32_as_bytes, local_path, snes_to_pc from Versions import DRVersion, GKVersion, ORVersion JAP10HASH = '03a63945398191337e896e5771f77173' -RANDOMIZERBASEHASH = '94ff6d50db131aabe6b086e783709004' +RANDOMIZERBASEHASH = '589a044786a63d98aff0e44b51a6a339' class JsonRom(object): diff --git a/Text.py b/Text.py index b347d9b3..ee72c4c0 100644 --- a/Text.py +++ b/Text.py @@ -2054,5 +2054,6 @@ class TextTable(object): text['ganon_phase_3_silvers'] = CompressedTextMapper.convert("Oh no! Silver! My one true weakness!") text['murahdahla'] = CompressedTextMapper.convert("Hello @. I\nam Murahdahla, brother of\nSahasrahla and Aginah. Behold the power of\ninvisibility.\n{PAUSE3}\n… … …\nWait! You can see me? I knew I should have\nhidden in a hollow tree.") text['mastersword_pedestal_goal'] = CompressedTextMapper.convert("To claim thy reward, you must present all 3 Pendants of Virtue.") - text['end_pad_data'] = bytearray([0xfb]) + text['orange_potion_refill'] = CompressedTextMapper.convert("This rare orange potion will give you infinite magic, but only until you die or quit the game.") + text['end_pad_data'] = bytearray([0xFB]) text['terminator'] = bytearray([0xFF, 0xFF]) diff --git a/data/base2current.bps b/data/base2current.bps index aec296c329d9d018af93598becee52b5fe29ee4b..77850823a2bca42aa12b2d1ace5c127d0dd4be83 100644 GIT binary patch delta 3867 zcmW-k30PA{*T-{i_ONelki~F8HUW8QtKw2ou||cW)fX+IMMaHXYTd2c;=Pfm0b>FK zTs1(h#)uIssi}>%B7$`ZE^CLTjPbcl_@2#kbC#p#?7dkRfQP>}v=@ z!5(J`aTog0;{i0GGoJ6lzvwT|T`&n1dTj~&_g9XV)yBmXDHul0HP92kR4;x>=f9*! zy`qiC-#b#Yx{D*lUH0+bp973V-}o%VKOf|qq3&HaM9@~RLMnd?d$DGUc4@0XMraGC?uIl0H{EWvKx{aZa zX`iFTp&{UnwuSx^sA=Q&SCF3?p3V@6^E_zS>MXZ83%cenP*aS+6jmV zAH;+I8@>l-CHCOK4HabeYn~~k$(|bR8K(LiQyog{$U+xauEk+7F4(TC7-@wA25}Uv zsd=fNNtX`x;vVkPmXH~M`3AWSwJ9iRbRVugp(Rh+(<2xn?C@hYdA}}?yxogpbo%J0 z#%b=i)%q24=qep)LJuNaW%4K7b!OM?3i1>5ZImMLz!R>@xLC>TXEasp_~pzA9r?Ze zS=0uh*ylD!3&=zERq?+8+((%S(_oGrCB%c|{aaiDQ$d!aONkxc*o^Gz;0y;2;X(mA znzR}IKw+ac!hL($s9AjY3U#GS0|SbBD--^ZAXi50_VoGN5ZAKSJYshw!C4VPFhZgC`%-u)Q7>4dCB}X6R^1gGd zv48pAkTA%vgIjB4^!@0KW49TjjWPCUNhNB^hzQQ<;9MMItYVD0^!?oKcFt8i^Y{Y= z*^P!WPCh-tm8#W~XKX&dOba-<#P{_GC5)1!*bBO@D z>|3{&1NPth^P@tzX+Nz_gP<@MXFGKGF=vpHb6i~I+IPB2$t6fu6dsH7gB_lVs+bys zh8$*JyQZdx(byQxIkY+8VrdlF?cxktQrw5;6b)0dF7BRb>6q#x42>n~o-n&|)eL<` zJGqa$$7rrHnq<08S#U9fM&W8a-&uX%25fz1sMuu)AanZ~c?J9W8Ttnu`8l!|CChQn zmcQAr+JVrr}BRHU<=auU3@$qHw?dqQW9Ye(20i(y<0VKl=!1Tuq!5oGeiAiFP#Ei#$3o`|CJmxseshCqRXJO8qJ5ae} z;iYO{H$S5vC4XmuWc1T_$zIz(7|`vfS6j+>v}ra9xU|qCZq0pN?uo(OM!_1i^-{*X zsj7j4A4w~UZKmTV&6;($>uOF`p|z?3^L*7ny&6{>Jga%2Fy<^D(Dce8 z`NG!CcQ}KrO;TTl%Ny@-HhxA@XMHLAmZ?H+C3yNmc9cV_pVyC)Zdvr%{e^i>;I&2T zdyD~}(I_4Lb2(GEx=wvVh2Fmso~pXTnfB?Pt-iydk7?#KI?t@BQ!@qVQ-&!wtC>nY z{;+DM+@vnKZoW}cRaecduk+Z+tVNb9OYwmux%vR zAb)S1guc8M0vYJWwHW*!xb^{LBIWfkSc_I%A0u12kh!EX$dqIzs=dBhymTGIOf*hM zQ8%W>9_VgRcso%obZ1Lg=6>IV^M>qHcJt@+Id{ z^*4b{u4pM%AyU`qbdm<17s{GQYplR-L{Hn^{NRfojmXO5X{7Z{Y8&lq$}9i5p$C7v zqPFFJh_~C^teZOE{ryV8J1CyfV45?gxmrLF0)j^nM&&!rj1Q|u%cf|n`+Iw+nl>-1 zIR(vc9|_~p&h`<3__$#gF^r-1ctck&)qkg#A~&OR?V;gUYt_0Rf2nUV?l}Y+5e2*# zuU;7^&Fax!h_erHa%Gv6SBKZxa{5mkwhYr@Fb@7sPg-%u>m+I1vvhc z)x6-bKD_8qQ#TG#?!`x3B{jlOxlQ<^mTFF}+kv1XDn8v?UHbeHXA>en#<;GcOsM(= zO*4F(V?8j`hlA$v#JG>SVGm{;qfl0d-2e65q|w1gCnlK8<2>%-8yDKzF+%ylG8Yqq zChbA~3_E>Gx7E`v=#Olm`lB1D%F0qokMqrxz<>BNUNlZmx4)Cu=2w4RZNp^|iQO$5 zpH4shBprF!A9Z+wbc>vxlF~BVGTT1%gYb(dWY_ zORNGU{nq~7kU}VsJgZAM-2>f(|5B2+iW<_yaj$q>6tB}L>|ne2uuho$5sg+k<_Tb> z5EiiKq!06K6xxuuSc8e>g6*JUfooOZ8Ivj36AX}?|(-6ll zih!>O-g-8GgoUue@d*jxe0h4FmX+k~HD$fM&*GfD!!1x*fl{$6Sjz~ABsK>+T1Eg( zz^Cl2Soj%6u_NMOBrI{vi32eNf4ZYvzx-qRP}MJ7J}&@N}yDim5r zm#b}Bv*0+lnqp@-{#*$ZA09fEQm_dBF=8(iKs+cNeFbnm1m1R>*@JbEAB_L!cgfx( zWae*Ny@0NbBix?#bDtNsiL9WL+AD27h?n#F^sMfD|kiU_MOW%bci81+mbo9B35 z4Ecm4KAzUdidkRBM>^;uJjWK&6&VWF>K9ud?Z`I3CVt?;HT$(viwv#Sm(2@ewVZRb zL&V-iFy3cG?*2o(wygR=cda{u9mmF%Lm0@}>E&44B6dwV{6~~7U|9YJhou}|h-9-9 z|N2@LdNPuZaMT*%DZolcWi{{t^4Wtmum(I>sR`Z!(lOBlU-RKTw*N2|KHf3h3`fB~ zXw$B0?pR4qT>~wy4BuYN&S7sIfdL6Dtk&d<@vY$p3;YJcH#eD$s~qQQ;ekN7L~sP9 zI?N|P&4)xb+6E*PIA+-3O~OC>lP+D}VM2L+$r}c(s`EJO%dS5Klqm3Bdi&)B$8V>= z93$KiUxYq%lypLhk5In+K0D6Q+zZMqh+;ibi3s4aiK)a>&&h8esnEHHec>L)hB;!! r5dtyzunCh15;7cFlZoBYIQMR?Bxne9EKm_0grrnjxZ#bt!DIdhxGuv6 delta 3815 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 From 0bc1a5c2ad80b7490306793aa86167f5ff910ebf Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Mon, 8 Jun 2026 23:27:18 -0500 Subject: [PATCH 8/8] Add --require_ganon_item option --- BaseClasses.py | 6 +++++- CLI.py | 4 +++- Main.py | 3 +++ Rom.py | 7 ++++++- Rules.py | 9 +++++---- resources/app/cli/args.json | 4 ++++ 6 files changed, 26 insertions(+), 7 deletions(-) diff --git a/BaseClasses.py b/BaseClasses.py index 9f1b3706..d8fb6307 100644 --- a/BaseClasses.py +++ b/BaseClasses.py @@ -85,6 +85,7 @@ class World(object): self.bosses_ganon = {} self.bosshunt_include_agas = {} self.ganon_item = {} + self.require_ganon_item = {} self.ganon_item_orig = {} self.custom = custom self.customitemarray = customitemarray @@ -186,6 +187,7 @@ class World(object): set_player_attr('bosses_ganon', 8) set_player_attr('bosshunt_include_agas', False) set_player_attr('ganon_item', 'silver') + set_player_attr('require_ganon_item', False) set_player_attr('crystals_ganon_orig', {}) set_player_attr('crystals_gt_orig', {}) set_player_attr('ganon_item_orig', 'silver') @@ -3154,6 +3156,7 @@ class Spoiler(object): 'ganon_bosses': self.world.bosses_ganon, 'bosshunt_include_agas': self.world.bosshunt_include_agas, 'ganon_item': self.world.ganon_item, + 'require_ganon_item': self.world.require_ganon_item, 'open_pyramid': self.world.open_pyramid, 'accessibility': self.world.accessibility, 'restricted_boss_items': self.world.restrict_boss_items, @@ -3391,7 +3394,8 @@ class Spoiler(object): if custom['murahgoal'] and 'requirements' in custom['murahgoal']: outfile.write('Murahdahla Requirement:'.ljust(line_width) + 'custom\n') outfile.write(' %s\n' % custom['murahgoal']['goaltext']) - outfile.write('Item Required for Ganon:'.ljust(line_width) + '%s\n' % str(self.world.ganon_item_orig[player])) + outfile.write('Item to Hurt Stunned Ganon:'.ljust(line_width) + '%s\n' % str(self.world.ganon_item_orig[player])) + outfile.write('Item Required for Ganon:'.ljust(line_width) + '%s\n' % yn(self.world.require_ganon_item[player])) outfile.write('Swords:'.ljust(line_width) + '%s\n' % self.metadata['weapons'][player]) outfile.write('\n') outfile.write('Accessibility:'.ljust(line_width) + '%s\n' % self.metadata['accessibility'][player]) diff --git a/CLI.py b/CLI.py index 889ca73d..477684a4 100644 --- a/CLI.py +++ b/CLI.py @@ -159,7 +159,8 @@ def parse_cli(argv, no_defaults=False): 'take_any', 'boots_hint', 'shuffle_followers', 'shuffle', 'door_shuffle', 'intensity', 'crystals_ganon', 'crystals_gt', 'bosses_ganon', - 'bosshunt_include_agas', 'ganon_item', 'openpyramid', + 'bosshunt_include_agas', 'ganon_item', + 'require_ganon_item', 'openpyramid', 'mapshuffle', 'compassshuffle', 'keyshuffle', 'bigkeyshuffle', 'prizeshuffle', 'showloot', 'loothud', 'showmap', 'startinventory', 'usestartinventory', @@ -220,6 +221,7 @@ def parse_settings(): "bosses_ganon": "8", "bosshunt_include_agas": False, "ganon_item": "silver", + "require_ganon_item": False, "swords": "random", "flute_mode": "normal", "bow_mode": "progressive", diff --git a/Main.py b/Main.py index fd086076..851c451c 100644 --- a/Main.py +++ b/Main.py @@ -546,6 +546,7 @@ def init_world(args, fish): world.crystals_ganon_orig = args.crystals_ganon.copy() world.crystals_gt_orig = args.crystals_gt.copy() world.ganon_item_orig = args.ganon_item.copy() + world.require_ganon_item = args.require_ganon_item.copy() world.bosses_ganon = {player: int(args.bosses_ganon[player]) for player in range(1, world.players + 1)} world.bosshunt_include_agas = args.bosshunt_include_agas.copy() world.owTerrain = args.ow_terrain.copy() @@ -871,6 +872,7 @@ def copy_world(world): ret.bosses_ganon = world.bosses_ganon.copy() ret.bosshunt_include_agas = world.bosshunt_include_agas.copy() ret.ganon_item = world.ganon_item.copy() + ret.require_ganon_item = world.require_ganon_item.copy() ret.crystals_ganon_orig = world.crystals_ganon_orig.copy() ret.crystals_gt_orig = world.crystals_gt_orig.copy() ret.ganon_item_orig = world.ganon_item_orig.copy() @@ -1105,6 +1107,7 @@ def copy_world_premature(world, player, create_flute_exits=True): ret.bosses_ganon = world.bosses_ganon.copy() ret.bosshunt_include_agas = world.bosshunt_include_agas.copy() ret.ganon_item = world.ganon_item.copy() + ret.require_ganon_item = world.require_ganon_item.copy() ret.crystals_ganon_orig = world.crystals_ganon_orig.copy() ret.crystals_gt_orig = world.crystals_gt_orig.copy() ret.ganon_item_orig = world.ganon_item_orig.copy() diff --git a/Rom.py b/Rom.py index 02335767..4b620e9a 100644 --- a/Rom.py +++ b/Rom.py @@ -1452,7 +1452,12 @@ def patch_rom(world, rom, player, team, is_mystery=False, rom_header=None): "byrna": 0x12, "none": 0x7F, } - rom.write_byte(0x18002E, ganon_item_byte[world.ganon_item[player]]) + ganon_item_value = ganon_item_byte[world.ganon_item[player]] + if world.require_ganon_item[player] and world.ganon_item[player] != "none": + if world.swords[player] != "swordless" or world.ganon_item[player] not in ["bombos", "ether", "quake"]: + ganon_item_value |= 0x80 + + rom.write_byte(0x18002E, ganon_item_value) # block HC upstairs doors in rain state in standard mode prevent_rain = world.mode[player] == 'standard' and world.shuffle[player] != 'vanilla' and world.logic[player] != 'nologic' diff --git a/Rules.py b/Rules.py index 32802638..9f8457b7 100644 --- a/Rules.py +++ b/Rules.py @@ -1026,10 +1026,11 @@ def global_rules(world, player): world.get_location('Ganon', player), lambda state: state.has_beam_sword(player) and state.has_fire_source(player) - and (state.has('Tempered Sword', player) or state.has('Golden Sword', player) - or state.can_hit_stunned_ganon(player) - or state.has('Lamp', player) - or state.can_extend_magic(player, 12))) # need to light torch a sufficient amount of times + and (state.can_hit_stunned_ganon(player) or ( + not world.require_ganon_item[player] and ( + state.has('Tempered Sword', player) or state.has('Golden Sword', player) + or state.has('Lamp', player) + or state.can_extend_magic(player, 12))))) # need to light torch a sufficient amount of times set_rule(world.get_entrance('Ganon Drop', player), lambda state: state.has_beam_sword(player)) # need to damage ganon to get tiles to drop diff --git a/resources/app/cli/args.json b/resources/app/cli/args.json index 4df2a18f..ab174c5b 100644 --- a/resources/app/cli/args.json +++ b/resources/app/cli/args.json @@ -378,6 +378,10 @@ "none" ] }, + "require_ganon_item": { + "action": "store_true", + "type": "bool" + }, "beemizer": { "choices": [ "4", "3", "2", "1", "0"