From 7c9c3db74ddd31925f5f7cf298806282ba1bfdfb Mon Sep 17 00:00:00 2001 From: AmazingAmpharos Date: Sun, 25 Mar 2018 17:21:36 -0500 Subject: [PATCH] Hopefully final 0.6.1 changes -Add no logic mode. -Fix swordless requirement for Mothula to be less strict. -New version number and logic hash. -Significantly updated readme. --- EntranceRandomizer.py | 4 +++- Gui.py | 2 +- Main.py | 34 +++++++++++++++++----------------- README.md | 32 +++++++++++++++++++++++++++++--- Rules.py | 11 ++++++++++- 5 files changed, 60 insertions(+), 23 deletions(-) diff --git a/EntranceRandomizer.py b/EntranceRandomizer.py index 0d91223e..32b753fa 100755 --- a/EntranceRandomizer.py +++ b/EntranceRandomizer.py @@ -20,12 +20,14 @@ class ArgumentDefaultsHelpFormatter(argparse.RawTextHelpFormatter): def start(): parser = argparse.ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter) parser.add_argument('--create_spoiler', help='Output a Spoiler File', action='store_true') - parser.add_argument('--logic', default='noglitches', const='noglitches', nargs='?', choices=['noglitches', 'minorglitches'], + parser.add_argument('--logic', default='noglitches', const='noglitches', nargs='?', choices=['noglitches', 'minorglitches', 'nologic'], help='''\ Select Enforcement of Item Requirements. (default: %(default)s) No Glitches: Minor Glitches: May require Fake Flippers, Bunny Revival and Dark Room Navigation. + No Logic: Distribute items without regard for + item requirements. ''') parser.add_argument('--mode', default='open', const='open', nargs='?', choices=['standard', 'open', 'swordless'], help='''\ diff --git a/Gui.py b/Gui.py index 5ea97546..2b806179 100755 --- a/Gui.py +++ b/Gui.py @@ -149,7 +149,7 @@ def guiMain(args=None): logicFrame = Frame(drowDownFrame) logicVar = StringVar() logicVar.set('noglitches') - logicOptionMenu = OptionMenu(logicFrame, logicVar, 'noglitches', 'minorglitches') + logicOptionMenu = OptionMenu(logicFrame, logicVar, 'noglitches', 'minorglitches', 'nologic') logicOptionMenu.pack(side=RIGHT) logicLabel = Label(logicFrame, text='Game logic') logicLabel.pack(side=LEFT) diff --git a/Main.py b/Main.py index bdfd96dc..9d230e33 100644 --- a/Main.py +++ b/Main.py @@ -16,24 +16,24 @@ from Fill import distribute_items_cutoff, distribute_items_staleness, distribute from ItemList import generate_itempool, difficulties from Utils import output_path -__version__ = '0.6.0' +__version__ = '0.6.1' -logic_hash = [26, 76, 4, 144, 72, 105, 234, 233, 12, 184, 95, 94, 100, 13, 15, 174, - 186, 135, 130, 189, 246, 254, 123, 245, 85, 241, 101, 129, 70, 255, 55, 248, - 43, 146, 23, 179, 243, 208, 230, 176, 9, 88, 239, 226, 222, 203, 244, 183, - 205, 74, 44, 5, 122, 220, 206, 47, 221, 125, 138, 155, 98, 79, 238, 119, - 30, 24, 159, 39, 253, 27, 33, 218, 62, 82, 200, 28, 141, 191, 93, 22, - 192, 54, 227, 108, 48, 78, 242, 166, 60, 250, 75, 145, 49, 212, 41, 25, - 127, 89, 178, 157, 19, 158, 177, 231, 207, 66, 172, 17, 133, 61, 109, 86, - 57, 143, 142, 219, 148, 209, 181, 87, 163, 40, 81, 114, 240, 103, 31, 175, - 237, 185, 18, 173, 168, 45, 216, 106, 161, 16, 151, 139, 104, 134, 110, 21, - 32, 131, 118, 182, 215, 67, 3, 73, 171, 71, 150, 147, 223, 247, 42, 132, - 107, 149, 232, 153, 10, 201, 156, 225, 116, 194, 187, 204, 46, 165, 124, 92, - 7, 0, 251, 126, 162, 80, 90, 154, 252, 197, 188, 52, 137, 117, 198, 63, - 167, 38, 136, 96, 58, 11, 1, 115, 229, 224, 37, 112, 170, 59, 68, 196, - 36, 64, 91, 213, 14, 180, 190, 164, 8, 56, 214, 77, 202, 193, 97, 84, - 152, 83, 236, 211, 20, 217, 2, 228, 140, 69, 121, 111, 113, 128, 210, 51, - 53, 6, 235, 34, 102, 29, 120, 35, 50, 65, 160, 249, 99, 169, 199, 195] +logic_hash = [215, 244, 99, 97, 253, 98, 31, 150, 207, 70, 50, 78, 59, 73, 221, 191, + 21, 34, 200, 116, 77, 234, 89, 27, 228, 96, 16, 249, 56, 148, 3, 176, + 17, 227, 24, 20, 238, 67, 37, 219, 62, 223, 60, 123, 246, 92, 164, 177, + 211, 15, 245, 23, 75, 33, 190, 124, 144, 100, 87, 57, 86, 108, 80, 181, + 6, 28, 2, 71, 182, 155, 222, 229, 90, 91, 32, 126, 25, 226, 133, 41, + 132, 122, 10, 30, 53, 239, 112, 49, 104, 76, 209, 247, 139, 13, 173, 113, + 159, 69, 145, 161, 11, 102, 149, 143, 129, 178, 45, 217, 196, 232, 208, 119, + 94, 19, 35, 65, 170, 103, 55, 109, 5, 43, 118, 194, 180, 12, 206, 241, + 8, 105, 210, 231, 179, 83, 137, 18, 212, 236, 225, 66, 63, 142, 138, 131, + 192, 160, 1, 198, 153, 128, 106, 165, 39, 248, 167, 22, 74, 163, 140, 157, + 214, 84, 154, 127, 195, 172, 136, 168, 68, 134, 152, 95, 111, 235, 26, 42, + 135, 186, 250, 7, 72, 58, 4, 9, 193, 101, 52, 44, 187, 183, 171, 184, + 197, 130, 47, 189, 81, 203, 51, 110, 146, 175, 213, 88, 79, 93, 64, 107, + 121, 237, 0, 46, 120, 141, 199, 158, 174, 114, 205, 201, 151, 185, 242, 29, + 162, 117, 85, 54, 14, 202, 216, 169, 230, 252, 188, 251, 36, 233, 147, 82, + 115, 61, 255, 38, 220, 218, 40, 224, 48, 125, 204, 156, 240, 254, 166, 243] def main(args, seed=None): diff --git a/README.md b/README.md index e22f03d4..a9b5fb3d 100644 --- a/README.md +++ b/README.md @@ -54,6 +54,10 @@ The game can be completed without knowing how to perform glitches of any kind. May require Fake Flippers, Bunny Revival. +### No Logic + +Items are placed without regard for progression or the seed being possible. Major glitches are likely required. + ## Game Goal ### Ganon @@ -259,7 +263,7 @@ generate spoilers for statistical analysis. ## Enable L/R button quickswapping -Use to enable quick item swap with L/R buttons +Use to enable quick item swap with L/R buttons. Press L and R together to switch the state of items like the Mushroom/Powder pair. ## Keysanity @@ -269,6 +273,16 @@ is traditionally a guaranteed Small Key still is. These items will be distribute the rest of the itempool will respect the algorithm setting. Music for dungeons is randomized so it cannot be used as a tell for which dungeons contain pendants and crystals; finding a Map for a dungeon will allow the overworld map to display its prize. +## Retro + +This setting turns all Small Keys into universal Small Keys that can be used in any dungeon and are distributed across the world. +The Bow now consumed rupees to shoot; the cost is 10 rupees per Wood Arrow and 50 per Silver Arrow. Shooting Wood Arrows requires +the purchase of an arrow item from shops, and to account for this and the dynamic use of keys, both Wood Arrows and Small Keys will +be added to several shops around the world. Four "take any" caves are added that allow the player to choose between an extra Heart +Container and a Bottle being filled with Blue Potion, and one of the four swords from the item pool is placed into a special cave as +well. The five caves that are removed for these will be randomly selected single entrance caves that did not contain any items or any shops. +In further concert with the Bow changes, all arrows under pots, in chests, and elsewhere in the seed will be replaced with rupees. + ## Place Dungeon Items If not set, Compasses and Maps are removed from the dungeon item pools and replaced by empty chests that may end up anywhere in the world. @@ -311,7 +325,7 @@ Show the help message and exit. Output a Spoiler File (default: False) ``` ---logic [{noglitches,minorglitches}] +--logic [{noglitches,minorglitches,nologic}] ``` Select the game logic (default: noglitches) @@ -353,7 +367,7 @@ Select the setting for progressive equipment. (default: on) Select item distribution algorithm. (default: balanced) ``` ---shuffle [{default,simple,restricted,full,madness,insanity,dungeonsfull,dungeonssimple}] +--shuffle [{default,simple,restricted,full,crossed,insanity,restricted_legacy,full_legacy,madness_legacy,insanity_legacy,dungeonsfull,dungeonssimple}] ``` Select entrance shuffle algorithm. (default: full) @@ -407,6 +421,12 @@ Disables game music, resulting in the game sound being just the SFX. (default: F Enable Keysanity (default: False) +``` +--retro +``` + +Enable Retro mode (default: False) + ``` --nodungeonitems ``` @@ -420,6 +440,12 @@ This may lead to different amount of itempool items being placed in a dungeon th Select frequency of beeps when on low health. (default: normal) +``` +--heartcolor [{red,blue,green,yellow}] +``` + +Select the color of Link\'s heart meter. (default: red) + ``` --sprite SPRITE ``` diff --git a/Rules.py b/Rules.py index f8ff476f..6660842c 100644 --- a/Rules.py +++ b/Rules.py @@ -3,6 +3,15 @@ import logging def set_rules(world): + + if world.logic == 'nologic': + logging.getLogger('').info('WARNING! Seeds generated under this logic often require major glitches and may be impossible!') + world.get_region('Links House').can_reach = lambda state: True + world.get_region('Sanctuary').can_reach = lambda state: True + old_rule = world.get_region('Old Man House').can_reach + world.get_region('Old Man House').can_reach = lambda state: state.can_reach('Old Man', 'Location') or old_rule(state) + return + global_rules(world) if world.mode == 'open': @@ -469,7 +478,7 @@ def swordless_rules(world): set_rule(world.get_location('Bombos Tablet'), lambda state: state.has('Book of Mudora') and state.has('Hammer') and state.has_Mirror()) set_rule(world.get_entrance('Misery Mire'), lambda state: state.has_Pearl() and state.has_misery_mire_medallion()) # sword not required to use medallion for opening in swordless (!) set_rule(world.get_entrance('Turtle Rock'), lambda state: state.has_Pearl() and state.has_turtle_rock_medallion() and state.can_reach('Turtle Rock (Top)', 'Region')) # sword not required to use medallion for opening in swordless (!) - set_rule(world.get_entrance('Skull Woods Torch Room'), lambda state: state.has_key('Small Key (Skull Woods)', 3) and state.has('Fire Rod')) # no curtain + set_rule(world.get_entrance('Skull Woods Torch Room'), lambda state: state.has_key('Small Key (Skull Woods)', 3) and state.has('Fire Rod') and (state.has('Hammer') or state.can_extend_magic(10))) # no curtain set_rule(world.get_entrance('Ice Palace Entrance Room'), lambda state: state.has('Fire Rod') or state.has('Bombos')) #in swordless mode bombos pads are present in the relevant parts of ice palace set_rule(world.get_location('Agahnim 2'), lambda state: state.has('Hammer') or state.has('Bug Catching Net')) set_rule(world.get_location('Ganon'), lambda state: state.has('Hammer') and state.has_fire_source() and state.has('Silver Arrows') and state.can_shoot_arrows() and state.has('Crystal 1') and state.has('Crystal 2')