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.
This commit is contained in:
		
							parent
							
								
									91a1f6dd5a
								
							
						
					
					
						commit
						7c9c3db74d
					
				| 
						 | 
				
			
			@ -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='''\
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										2
									
								
								Gui.py
								
								
								
								
							
							
						
						
									
										2
									
								
								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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										34
									
								
								Main.py
								
								
								
								
							
							
						
						
									
										34
									
								
								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):
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										32
									
								
								README.md
								
								
								
								
							
							
						
						
									
										32
									
								
								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
 | 
			
		||||
```
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										11
									
								
								Rules.py
								
								
								
								
							
							
						
						
									
										11
									
								
								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')
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue