Minecraft Randomizer
Squash merge, original Commits:
* Minecraft locations, items, and generation without logic
* added id lookup for minecraft
* typing import fix in minecraft/Items.py
* fix 2
* implementing Minecraft options and hard/postgame advancement exclusion
* first logic pass (75/80)
* logic pass 2 and proper completion conditions
* added insane difficulty pool, modified method of excluding item pools for easier extension
* bump network_data_package version
* minecraft testing framework
* switch Ancient Debris to Netherite Scrap to avoid advancement triggering on receiving that item
* Testing now functions, split tests up by advancement pane, added some story tests
* Newer testing framework: every advancement gets its own function, for ease of testing
* fixed logic for The End... Again...
* changed option names to "include_hard_advancements" etc.
* village/pillager-related advancements now require can_adventure: weapon + food
* a few minecraft tests
* rename "Flint & Steel" to "Flint and Steel" for parity with in-game name
* additional MC tests
* more tests, mostly nether-related tests
* more tests, removed anvil path for Two Birds One Arrow
* include Minecraft slot data, and a world seed for each Minecraft player slot
* Added new items: ender pearls, lapis, porkchops
* All remaining Minecraft tests
* formatting of Minecraft tests and logic for better readability
* require Wither kill for Monsters Hunted
* properly removed 8 Emeralds item from item pool
* enchanting required for wither; fishing rod required for water breathing; water breathing required for elder guardian kill
* Added 12 new advancements (ported from old achievement system)
* renamed "On a Rail" for consistency with modern advancements
* tests for the new advancements
* moved slot_data generation for minecraft into worlds/minecraft/__init__.py, added logic_version to slot_data
* output minecraft options in the spoiler log
* modified advancement goal values for new advancements
* make non-native Minecraft items appear as Shovel in ALttP, and unknown-game items as Power Stars
* fixed glowstone block logic for Not Quite Nine Lives
* setup for shuffling MC structures: building ER world and shuffling regions/entrances
* ensured Nether Fortresses can't be placed in the End
* finished logic for structure randomization
* fixed nonnative items always showing up as Hammers in ALttP shops
* output minecraft structure info in the spoiler
* generate .apmc file for communication with MC client
* fixed structure rando always using the same seed
* move stuff to worlds/minecraft/Regions.py
* make output apmc file have consistent name with other files
* added minecraft bottle macro; fixed tests imports
* generalizing MC region generation
* restructured structure shuffling in preparation for structure plando
* only output structure rando info in spoiler if they are shuffled
* Force structure rando to always be off, for the stable release
* added Minecraft options to player settings
* formally added combat_difficulty as an option
* Added Ender Dragon into playthrough, cleaned up goal map
* Added new difficulties: Easy, Normal, Hard combat
* moved .apmc generation time to prevent outputs on failed generation
* updated tests for new combat logic
* Fixed bug causing generation to fail; removed Nether Fortress event since it should no longer be needed with the fix
* moved all MC-specific functions into gen_minecraft
* renamed "logic_version" to "client_version"
* bug fixes
properly flagged event locations/items with id None
moved generation back to Main.py to fix mysterious generation failures
* moved link_minecraft_regions into minecraft init, left create_regions in Main for caching
* added seed_name, player_name, client_version to apmc file
* reenabled structure shuffle
* added entrance tests for minecraft
Co-authored-by: achuang <alexander.w.chuang@gmail.com>
											 
										 
										
											2021-05-08 07:38:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								from  . . generic . Rules  import  set_rule  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  . Locations  import  exclusion_table ,  events_table  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  BaseClasses  import  Region ,  Entrance ,  Location ,  MultiWorld ,  Item  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								from  Options  import  AdvancementGoal  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								def  set_rules ( world :  MultiWorld ,  player :  int ) :  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    def  reachable_locations ( state ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        postgame_advancements  =  set ( exclusion_table [ ' postgame ' ] . keys ( ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        postgame_advancements . add ( ' Free the End ' ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        for  event  in  events_table . keys ( ) : 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								            postgame_advancements . add ( event ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        return  [ location  for  location  in  world . get_locations ( )  if  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ( player  is  None  or  location . player  ==  player )  and  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                ( location . name  not  in  postgame_advancements )  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                location . can_reach ( state ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    # 92 total advancements, 16 are typically excluded, 1 is Free the End. Goal is to complete X advancements and then Free the End.  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    goal_map  =  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' few ' :  30 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' normal ' :  50 , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        ' many ' :  70  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    goal  =  goal_map [ getattr ( world ,  ' advancement_goal ' ) [ player ] . get_option_name ( ) ] 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    can_complete  =  lambda  state :  len ( reachable_locations ( state ) )  > =  goal  and  state . can_reach ( ' The End ' ,  ' Region ' ,  player )  and  state . can_kill_ender_dragon ( player ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  world . logic [ player ]  !=  ' nologic ' :  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        world . completion_condition [ player ]  =  lambda  state :  state . has ( ' Victory ' ,  player ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_entrance ( " Nether Portal " ,  player ) ,  lambda  state :  state . has ( ' Flint and Steel ' ,  player )  and  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                        ( state . has ( ' Bucket ' ,  player )  or  state . has ( ' Progressive Tools ' ,  player ,  3 ) )  and  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                        state . has_iron_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_entrance ( " End Portal " ,  player ) ,  lambda  state :  state . enter_stronghold ( player )  and  state . has ( ' 3 Ender Pearls ' ,  player ,  4 ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_entrance ( " Overworld Structure 1 " ,  player ) ,  lambda  state :  state . can_adventure ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_entrance ( " Overworld Structure 2 " ,  player ) ,  lambda  state :  state . can_adventure ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_entrance ( " Nether Structure 1 " ,  player ) ,  lambda  state :  state . can_adventure ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_entrance ( " Nether Structure 2 " ,  player ) ,  lambda  state :  state . can_adventure ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_entrance ( " The End Structure " ,  player ) ,  lambda  state :  state . can_adventure ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Ender Dragon " ,  player ) ,  lambda  state :  can_complete ( state ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Who is Cutting Onions? " ,  player ) ,  lambda  state :  state . can_piglin_trade ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Oh Shiny " ,  player ) ,  lambda  state :  state . can_piglin_trade ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Suit Up " ,  player ) ,  lambda  state :  state . has ( " Progressive Armor " ,  player )  and  state . has_iron_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Very Very Frightening " ,  player ) ,  lambda  state :  state . has ( " Channeling Book " ,  player )  and  state . can_use_anvil ( player )  and  state . can_enchant ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Hot Stuff " ,  player ) ,  lambda  state :  state . has ( " Bucket " ,  player )  and  state . has_iron_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Free the End " ,  player ) ,  lambda  state :  can_complete ( state ) ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Minecraft updates (#13)
* Minecraft locations, items, and generation without logic
* added id lookup for minecraft
* typing import fix in minecraft/Items.py
* fix 2
* implementing Minecraft options and hard/postgame advancement exclusion
* first logic pass (75/80)
* logic pass 2 and proper completion conditions
* added insane difficulty pool, modified method of excluding item pools for easier extension
* bump network_data_package version
* minecraft testing framework
* switch Ancient Debris to Netherite Scrap to avoid advancement triggering on receiving that item
* Testing now functions, split tests up by advancement pane, added some story tests
* Newer testing framework: every advancement gets its own function, for ease of testing
* fixed logic for The End... Again...
* changed option names to "include_hard_advancements" etc.
* village/pillager-related advancements now require can_adventure: weapon + food
* a few minecraft tests
* rename "Flint & Steel" to "Flint and Steel" for parity with in-game name
* additional MC tests
* more tests, mostly nether-related tests
* more tests, removed anvil path for Two Birds One Arrow
* include Minecraft slot data, and a world seed for each Minecraft player slot
* Added new items: ender pearls, lapis, porkchops
* All remaining Minecraft tests
* formatting of Minecraft tests and logic for better readability
* require Wither kill for Monsters Hunted
* properly removed 8 Emeralds item from item pool
* enchanting required for wither; fishing rod required for water breathing; water breathing required for elder guardian kill
* Added 12 new advancements (ported from old achievement system)
* renamed "On a Rail" for consistency with modern advancements
* tests for the new advancements
* moved slot_data generation for minecraft into worlds/minecraft/__init__.py, added logic_version to slot_data
* output minecraft options in the spoiler log
* modified advancement goal values for new advancements
* make non-native Minecraft items appear as Shovel in ALttP, and unknown-game items as Power Stars
* fixed glowstone block logic for Not Quite Nine Lives
* setup for shuffling MC structures: building ER world and shuffling regions/entrances
* ensured Nether Fortresses can't be placed in the End
* finished logic for structure randomization
* fixed nonnative items always showing up as Hammers in ALttP shops
* output minecraft structure info in the spoiler
* generate .apmc file for communication with MC client
* fixed structure rando always using the same seed
* move stuff to worlds/minecraft/Regions.py
* make output apmc file have consistent name with other files
* added minecraft bottle macro; fixed tests imports
* generalizing MC region generation
* restructured structure shuffling in preparation for structure plando
* only output structure rando info in spoiler if they are shuffled
* Force structure rando to always be off, for the stable release
* added Minecraft options to player settings
* formally added combat_difficulty as an option
* Added Ender Dragon into playthrough, cleaned up goal map
* Added new difficulties: Easy, Normal, Hard combat
* moved .apmc generation time to prevent outputs on failed generation
* updated tests for new combat logic
* Fixed bug causing generation to fail; removed Nether Fortress event since it should no longer be needed with the fix
* moved all MC-specific functions into gen_minecraft
* renamed "logic_version" to "client_version"
* bug fixes
properly flagged event locations/items with id None
moved generation back to Main.py to fix mysterious generation failures
* moved link_minecraft_regions into minecraft init, left create_regions in Main for caching
* added seed_name, player_name, client_version to apmc file
* reenabled structure shuffle
* added entrance tests for minecraft
* Minecraft logic updates
Wither kill now considers nether fortresses as a valid source of soul sand
A Furious Cocktail now requires beacons for resistance and village access for carrots
Uneasy Alliance now requires fishing rod to pull the ghast through the portal
On a Rail now requires iron pickaxe to make powered rails
Overkill now may require strength II without stone axe, which needs nether access
* embed all apmc info into slot_data
* updated MC tests for logic changes
* put apmc into zipfile
Co-authored-by: achuang <alexander.w.chuang@gmail.com>
											 
										 
										
											2021-05-15 18:49:58 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " A Furious Cocktail " ,  player ) ,  lambda  state :  state . can_brew_potions ( player )  and  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                             state . has ( " Fishing Rod " ,  player )  and  # Water Breathing 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                             state . can_reach ( ' The Nether ' ,  ' Region ' ,  player )  and  # Regeneration, Fire Resistance, gold nuggets 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                             state . can_reach ( ' Village ' ,  ' Region ' ,  player )  and  # Night Vision, Invisibility 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                             state . can_reach ( ' Bring Home the Beacon ' ,  ' Location ' ,  player ) )  # Resistance 
							 
						 
					
						
							
								
									
										
											 
										
											
												Minecraft Randomizer
Squash merge, original Commits:
* Minecraft locations, items, and generation without logic
* added id lookup for minecraft
* typing import fix in minecraft/Items.py
* fix 2
* implementing Minecraft options and hard/postgame advancement exclusion
* first logic pass (75/80)
* logic pass 2 and proper completion conditions
* added insane difficulty pool, modified method of excluding item pools for easier extension
* bump network_data_package version
* minecraft testing framework
* switch Ancient Debris to Netherite Scrap to avoid advancement triggering on receiving that item
* Testing now functions, split tests up by advancement pane, added some story tests
* Newer testing framework: every advancement gets its own function, for ease of testing
* fixed logic for The End... Again...
* changed option names to "include_hard_advancements" etc.
* village/pillager-related advancements now require can_adventure: weapon + food
* a few minecraft tests
* rename "Flint & Steel" to "Flint and Steel" for parity with in-game name
* additional MC tests
* more tests, mostly nether-related tests
* more tests, removed anvil path for Two Birds One Arrow
* include Minecraft slot data, and a world seed for each Minecraft player slot
* Added new items: ender pearls, lapis, porkchops
* All remaining Minecraft tests
* formatting of Minecraft tests and logic for better readability
* require Wither kill for Monsters Hunted
* properly removed 8 Emeralds item from item pool
* enchanting required for wither; fishing rod required for water breathing; water breathing required for elder guardian kill
* Added 12 new advancements (ported from old achievement system)
* renamed "On a Rail" for consistency with modern advancements
* tests for the new advancements
* moved slot_data generation for minecraft into worlds/minecraft/__init__.py, added logic_version to slot_data
* output minecraft options in the spoiler log
* modified advancement goal values for new advancements
* make non-native Minecraft items appear as Shovel in ALttP, and unknown-game items as Power Stars
* fixed glowstone block logic for Not Quite Nine Lives
* setup for shuffling MC structures: building ER world and shuffling regions/entrances
* ensured Nether Fortresses can't be placed in the End
* finished logic for structure randomization
* fixed nonnative items always showing up as Hammers in ALttP shops
* output minecraft structure info in the spoiler
* generate .apmc file for communication with MC client
* fixed structure rando always using the same seed
* move stuff to worlds/minecraft/Regions.py
* make output apmc file have consistent name with other files
* added minecraft bottle macro; fixed tests imports
* generalizing MC region generation
* restructured structure shuffling in preparation for structure plando
* only output structure rando info in spoiler if they are shuffled
* Force structure rando to always be off, for the stable release
* added Minecraft options to player settings
* formally added combat_difficulty as an option
* Added Ender Dragon into playthrough, cleaned up goal map
* Added new difficulties: Easy, Normal, Hard combat
* moved .apmc generation time to prevent outputs on failed generation
* updated tests for new combat logic
* Fixed bug causing generation to fail; removed Nether Fortress event since it should no longer be needed with the fix
* moved all MC-specific functions into gen_minecraft
* renamed "logic_version" to "client_version"
* bug fixes
properly flagged event locations/items with id None
moved generation back to Main.py to fix mysterious generation failures
* moved link_minecraft_regions into minecraft init, left create_regions in Main for caching
* added seed_name, player_name, client_version to apmc file
* reenabled structure shuffle
* added entrance tests for minecraft
Co-authored-by: achuang <alexander.w.chuang@gmail.com>
											 
										 
										
											2021-05-08 07:38:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Best Friends Forever " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Bring Home the Beacon " ,  player ) ,  lambda  state :  state . can_kill_wither ( player )  and  state . has_diamond_pickaxe ( player )  and  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                                state . has ( " Ingot Crafting " ,  player )  and  state . has ( " Resource Blocks " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Not Today, Thank You " ,  player ) ,  lambda  state :  state . has ( " Shield " ,  player )  and  state . has_iron_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Isn ' t It Iron Pick " ,  player ) ,  lambda  state :  state . has ( " Progressive Tools " ,  player ,  2 )  and  state . has_iron_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Local Brewery " ,  player ) ,  lambda  state :  state . can_brew_potions ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " The Next Generation " ,  player ) ,  lambda  state :  can_complete ( state ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Fishy Business " ,  player ) ,  lambda  state :  state . has ( " Fishing Rod " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Hot Tourist Destinations " ,  player ) ,  lambda  state :  state . fortress_loot ( player )  and  state . has ( " Fishing Rod " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " This Boat Has Legs " ,  player ) ,  lambda  state :  state . fortress_loot ( player )  and  state . has ( " Fishing Rod " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Sniper Duel " ,  player ) ,  lambda  state :  state . has ( " Archery " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Nether " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Great View From Up Here " ,  player ) ,  lambda  state :  state . basic_combat ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " How Did We Get Here? " ,  player ) ,  lambda  state :  state . can_brew_potions ( player )  and  state . has_gold_ingots ( player )  and  # most effects; Absorption 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                               state . can_reach ( ' End City ' ,  ' Region ' ,  player )  and  state . can_reach ( ' The Nether ' ,  ' Region ' ,  player )  and  # Levitation; potion ingredients 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                               state . has ( " Fishing Rod " ,  player )  and  state . has ( " Archery " ,  player )  and  # Pufferfish, Nautilus Shells; spectral arrows 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                               state . can_reach ( " Bring Home the Beacon " ,  " Location " ,  player )  and  # Haste 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                               state . can_reach ( " Hero of the Village " ,  " Location " ,  player ) )  # Bad Omen, Hero of the Village 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Bullseye " ,  player ) ,  lambda  state :  state . has ( " Archery " ,  player )  and  state . has ( " Progressive Tools " ,  player ,  2 )  and  state . has_iron_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Spooky Scary Skeleton " ,  player ) ,  lambda  state :  state . basic_combat ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Two by Two " ,  player ) ,  lambda  state :  state . has_iron_ingots ( player )  and  state . can_adventure ( player ) )  # shears > seagrass > turtles; nether > striders; gold carrots > horses skips ingots 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Stone Age " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Two Birds, One Arrow " ,  player ) ,  lambda  state :  state . craft_crossbow ( player )  and  state . can_enchant ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " We Need to Go Deeper " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Who ' s the Pillager Now? " ,  player ) ,  lambda  state :  state . craft_crossbow ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Getting an Upgrade " ,  player ) ,  lambda  state :  state . has ( " Progressive Tools " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Tactical Fishing " ,  player ) ,  lambda  state :  state . has ( " Bucket " ,  player )  and  state . has_iron_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Zombie Doctor " ,  player ) ,  lambda  state :  state . can_brew_potions ( player )  and  state . has_gold_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " The City at the End of the Game " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Ice Bucket Challenge " ,  player ) ,  lambda  state :  state . has_diamond_pickaxe ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Remote Getaway " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Into Fire " ,  player ) ,  lambda  state :  state . basic_combat ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " War Pigs " ,  player ) ,  lambda  state :  state . basic_combat ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Take Aim " ,  player ) ,  lambda  state :  state . has ( " Archery " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Total Beelocation " ,  player ) ,  lambda  state :  state . has ( " Silk Touch Book " ,  player )  and  state . can_use_anvil ( player )  and  state . can_enchant ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Arbalistic " ,  player ) ,  lambda  state :  state . craft_crossbow ( player )  and  state . has ( " Piercing IV Book " ,  player )  and  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                     state . can_use_anvil ( player )  and  state . can_enchant ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " The End... Again... " ,  player ) ,  lambda  state :  can_complete ( state )  and  state . has ( " Ingot Crafting " ,  player )  and  state . can_reach ( ' The Nether ' ,  ' Region ' ,  player ) )  # furnace for glass, nether for ghast tears 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Acquire Hardware " ,  player ) ,  lambda  state :  state . has_iron_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Not Quite  \" Nine \"  Lives " ,  player ) ,  lambda  state :  state . can_piglin_trade ( player )  and  state . has ( " Resource Blocks " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Cover Me With Diamonds " ,  player ) ,  lambda  state :  state . has ( " Progressive Armor " ,  player ,  2 )  and  state . can_reach ( " Diamonds! " ,  " Location " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Sky ' s the Limit " ,  player ) ,  lambda  state :  state . basic_combat ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Hired Help " ,  player ) ,  lambda  state :  state . has ( " Resource Blocks " ,  player )  and  state . has_iron_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Return to Sender " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Sweet Dreams " ,  player ) ,  lambda  state :  state . has ( " Bed " ,  player )  or  state . can_reach ( ' Village ' ,  ' Region ' ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " You Need a Mint " ,  player ) ,  lambda  state :  can_complete ( state )  and  state . has_bottle_mc ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Adventure " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Monsters Hunted " ,  player ) ,  lambda  state :  can_complete ( state )  and  state . can_kill_wither ( player )  and  state . has ( " Fishing Rod " ,  player ) )  # pufferfish for Water Breathing 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Enchanter " ,  player ) ,  lambda  state :  state . can_enchant ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Voluntary Exile " ,  player ) ,  lambda  state :  state . basic_combat ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Eye Spy " ,  player ) ,  lambda  state :  state . enter_stronghold ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " The End " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Serious Dedication " ,  player ) ,  lambda  state :  state . can_reach ( " Hidden in the Depths " ,  " Location " ,  player )  and  state . has_gold_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Postmortal " ,  player ) ,  lambda  state :  state . complete_raid ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Monster Hunter " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Adventuring Time " ,  player ) ,  lambda  state :  state . can_adventure ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " A Seedy Place " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Those Were the Days " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Hero of the Village " ,  player ) ,  lambda  state :  state . complete_raid ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Hidden in the Depths " ,  player ) ,  lambda  state :  state . can_brew_potions ( player )  and  state . has ( " Bed " ,  player )  and  state . has_diamond_pickaxe ( player ) )  # bed mining :) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Beaconator " ,  player ) ,  lambda  state :  state . can_kill_wither ( player )  and  state . has_diamond_pickaxe ( player )  and  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                     state . has ( " Ingot Crafting " ,  player )  and  state . has ( " Resource Blocks " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Withering Heights " ,  player ) ,  lambda  state :  state . can_kill_wither ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " A Balanced Diet " ,  player ) ,  lambda  state :  state . has_bottle_mc ( player )  and  state . has_gold_ingots ( player )  and  # honey bottle; gapple 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                          state . has ( " Resource Blocks " ,  player )  and  state . can_reach ( ' The End ' ,  ' Region ' ,  player ) )  # notch apple, chorus fruit 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Subspace Bubble " ,  player ) ,  lambda  state :  state . has_diamond_pickaxe ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Husbandry " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Country Lode, Take Me Home " ,  player ) ,  lambda  state :  state . can_reach ( " Hidden in the Depths " ,  " Location " ,  player )  and  state . has_gold_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Bee Our Guest " ,  player ) ,  lambda  state :  state . has ( " Campfire " ,  player )  and  state . has_bottle_mc ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " What a Deal! " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Minecraft updates (#13)
* Minecraft locations, items, and generation without logic
* added id lookup for minecraft
* typing import fix in minecraft/Items.py
* fix 2
* implementing Minecraft options and hard/postgame advancement exclusion
* first logic pass (75/80)
* logic pass 2 and proper completion conditions
* added insane difficulty pool, modified method of excluding item pools for easier extension
* bump network_data_package version
* minecraft testing framework
* switch Ancient Debris to Netherite Scrap to avoid advancement triggering on receiving that item
* Testing now functions, split tests up by advancement pane, added some story tests
* Newer testing framework: every advancement gets its own function, for ease of testing
* fixed logic for The End... Again...
* changed option names to "include_hard_advancements" etc.
* village/pillager-related advancements now require can_adventure: weapon + food
* a few minecraft tests
* rename "Flint & Steel" to "Flint and Steel" for parity with in-game name
* additional MC tests
* more tests, mostly nether-related tests
* more tests, removed anvil path for Two Birds One Arrow
* include Minecraft slot data, and a world seed for each Minecraft player slot
* Added new items: ender pearls, lapis, porkchops
* All remaining Minecraft tests
* formatting of Minecraft tests and logic for better readability
* require Wither kill for Monsters Hunted
* properly removed 8 Emeralds item from item pool
* enchanting required for wither; fishing rod required for water breathing; water breathing required for elder guardian kill
* Added 12 new advancements (ported from old achievement system)
* renamed "On a Rail" for consistency with modern advancements
* tests for the new advancements
* moved slot_data generation for minecraft into worlds/minecraft/__init__.py, added logic_version to slot_data
* output minecraft options in the spoiler log
* modified advancement goal values for new advancements
* make non-native Minecraft items appear as Shovel in ALttP, and unknown-game items as Power Stars
* fixed glowstone block logic for Not Quite Nine Lives
* setup for shuffling MC structures: building ER world and shuffling regions/entrances
* ensured Nether Fortresses can't be placed in the End
* finished logic for structure randomization
* fixed nonnative items always showing up as Hammers in ALttP shops
* output minecraft structure info in the spoiler
* generate .apmc file for communication with MC client
* fixed structure rando always using the same seed
* move stuff to worlds/minecraft/Regions.py
* make output apmc file have consistent name with other files
* added minecraft bottle macro; fixed tests imports
* generalizing MC region generation
* restructured structure shuffling in preparation for structure plando
* only output structure rando info in spoiler if they are shuffled
* Force structure rando to always be off, for the stable release
* added Minecraft options to player settings
* formally added combat_difficulty as an option
* Added Ender Dragon into playthrough, cleaned up goal map
* Added new difficulties: Easy, Normal, Hard combat
* moved .apmc generation time to prevent outputs on failed generation
* updated tests for new combat logic
* Fixed bug causing generation to fail; removed Nether Fortress event since it should no longer be needed with the fix
* moved all MC-specific functions into gen_minecraft
* renamed "logic_version" to "client_version"
* bug fixes
properly flagged event locations/items with id None
moved generation back to Main.py to fix mysterious generation failures
* moved link_minecraft_regions into minecraft init, left create_regions in Main for caching
* added seed_name, player_name, client_version to apmc file
* reenabled structure shuffle
* added entrance tests for minecraft
* Minecraft logic updates
Wither kill now considers nether fortresses as a valid source of soul sand
A Furious Cocktail now requires beacons for resistance and village access for carrots
Uneasy Alliance now requires fishing rod to pull the ghast through the portal
On a Rail now requires iron pickaxe to make powered rails
Overkill now may require strength II without stone axe, which needs nether access
* embed all apmc info into slot_data
* updated MC tests for logic changes
* put apmc into zipfile
Co-authored-by: achuang <alexander.w.chuang@gmail.com>
											 
										 
										
											2021-05-15 18:49:58 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Uneasy Alliance " ,  player ) ,  lambda  state :  state . has_diamond_pickaxe ( player )  and  state . has ( ' Fishing Rod ' ,  player ) ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Minecraft Randomizer
Squash merge, original Commits:
* Minecraft locations, items, and generation without logic
* added id lookup for minecraft
* typing import fix in minecraft/Items.py
* fix 2
* implementing Minecraft options and hard/postgame advancement exclusion
* first logic pass (75/80)
* logic pass 2 and proper completion conditions
* added insane difficulty pool, modified method of excluding item pools for easier extension
* bump network_data_package version
* minecraft testing framework
* switch Ancient Debris to Netherite Scrap to avoid advancement triggering on receiving that item
* Testing now functions, split tests up by advancement pane, added some story tests
* Newer testing framework: every advancement gets its own function, for ease of testing
* fixed logic for The End... Again...
* changed option names to "include_hard_advancements" etc.
* village/pillager-related advancements now require can_adventure: weapon + food
* a few minecraft tests
* rename "Flint & Steel" to "Flint and Steel" for parity with in-game name
* additional MC tests
* more tests, mostly nether-related tests
* more tests, removed anvil path for Two Birds One Arrow
* include Minecraft slot data, and a world seed for each Minecraft player slot
* Added new items: ender pearls, lapis, porkchops
* All remaining Minecraft tests
* formatting of Minecraft tests and logic for better readability
* require Wither kill for Monsters Hunted
* properly removed 8 Emeralds item from item pool
* enchanting required for wither; fishing rod required for water breathing; water breathing required for elder guardian kill
* Added 12 new advancements (ported from old achievement system)
* renamed "On a Rail" for consistency with modern advancements
* tests for the new advancements
* moved slot_data generation for minecraft into worlds/minecraft/__init__.py, added logic_version to slot_data
* output minecraft options in the spoiler log
* modified advancement goal values for new advancements
* make non-native Minecraft items appear as Shovel in ALttP, and unknown-game items as Power Stars
* fixed glowstone block logic for Not Quite Nine Lives
* setup for shuffling MC structures: building ER world and shuffling regions/entrances
* ensured Nether Fortresses can't be placed in the End
* finished logic for structure randomization
* fixed nonnative items always showing up as Hammers in ALttP shops
* output minecraft structure info in the spoiler
* generate .apmc file for communication with MC client
* fixed structure rando always using the same seed
* move stuff to worlds/minecraft/Regions.py
* make output apmc file have consistent name with other files
* added minecraft bottle macro; fixed tests imports
* generalizing MC region generation
* restructured structure shuffling in preparation for structure plando
* only output structure rando info in spoiler if they are shuffled
* Force structure rando to always be off, for the stable release
* added Minecraft options to player settings
* formally added combat_difficulty as an option
* Added Ender Dragon into playthrough, cleaned up goal map
* Added new difficulties: Easy, Normal, Hard combat
* moved .apmc generation time to prevent outputs on failed generation
* updated tests for new combat logic
* Fixed bug causing generation to fail; removed Nether Fortress event since it should no longer be needed with the fix
* moved all MC-specific functions into gen_minecraft
* renamed "logic_version" to "client_version"
* bug fixes
properly flagged event locations/items with id None
moved generation back to Main.py to fix mysterious generation failures
* moved link_minecraft_regions into minecraft init, left create_regions in Main for caching
* added seed_name, player_name, client_version to apmc file
* reenabled structure shuffle
* added entrance tests for minecraft
Co-authored-by: achuang <alexander.w.chuang@gmail.com>
											 
										 
										
											2021-05-08 07:38:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Diamonds! " ,  player ) ,  lambda  state :  state . has ( " Progressive Tools " ,  player ,  2 )  and  state . has_iron_ingots ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " A Terrible Fortress " ,  player ) ,  lambda  state :  True )  # since you don't have to fight anything 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " A Throwaway Joke " ,  player ) ,  lambda  state :  True )  # kill drowned 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Minecraft " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Sticky Situation " ,  player ) ,  lambda  state :  state . has_bottle_mc ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Ol '  Betsy " ,  player ) ,  lambda  state :  state . craft_crossbow ( player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Cover Me in Debris " ,  player ) ,  lambda  state :  state . has ( " Progressive Armor " ,  player ,  2 )  and  
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                             state . has ( " 8 Netherite Scrap " ,  player ,  2 )  and  state . has ( " Ingot Crafting " ,  player )  and 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								                                                                             state . can_reach ( " Diamonds! " ,  " Location " ,  player )  and  state . can_reach ( " Hidden in the Depths " ,  " Location " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " The End? " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " The Parrots and the Bats " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " A Complete Catalogue " ,  player ) ,  lambda  state :  True )  # kill fish for raw 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Getting Wood " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Time to Mine! " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Hot Topic " ,  player ) ,  lambda  state :  state . has ( " Ingot Crafting " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Bake Bread " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " The Lie " ,  player ) ,  lambda  state :  state . has_iron_ingots ( player )  and  state . has ( " Bucket " ,  player ) ) 
							 
						 
					
						
							
								
									
										
											 
										
											
												Minecraft updates (#13)
* Minecraft locations, items, and generation without logic
* added id lookup for minecraft
* typing import fix in minecraft/Items.py
* fix 2
* implementing Minecraft options and hard/postgame advancement exclusion
* first logic pass (75/80)
* logic pass 2 and proper completion conditions
* added insane difficulty pool, modified method of excluding item pools for easier extension
* bump network_data_package version
* minecraft testing framework
* switch Ancient Debris to Netherite Scrap to avoid advancement triggering on receiving that item
* Testing now functions, split tests up by advancement pane, added some story tests
* Newer testing framework: every advancement gets its own function, for ease of testing
* fixed logic for The End... Again...
* changed option names to "include_hard_advancements" etc.
* village/pillager-related advancements now require can_adventure: weapon + food
* a few minecraft tests
* rename "Flint & Steel" to "Flint and Steel" for parity with in-game name
* additional MC tests
* more tests, mostly nether-related tests
* more tests, removed anvil path for Two Birds One Arrow
* include Minecraft slot data, and a world seed for each Minecraft player slot
* Added new items: ender pearls, lapis, porkchops
* All remaining Minecraft tests
* formatting of Minecraft tests and logic for better readability
* require Wither kill for Monsters Hunted
* properly removed 8 Emeralds item from item pool
* enchanting required for wither; fishing rod required for water breathing; water breathing required for elder guardian kill
* Added 12 new advancements (ported from old achievement system)
* renamed "On a Rail" for consistency with modern advancements
* tests for the new advancements
* moved slot_data generation for minecraft into worlds/minecraft/__init__.py, added logic_version to slot_data
* output minecraft options in the spoiler log
* modified advancement goal values for new advancements
* make non-native Minecraft items appear as Shovel in ALttP, and unknown-game items as Power Stars
* fixed glowstone block logic for Not Quite Nine Lives
* setup for shuffling MC structures: building ER world and shuffling regions/entrances
* ensured Nether Fortresses can't be placed in the End
* finished logic for structure randomization
* fixed nonnative items always showing up as Hammers in ALttP shops
* output minecraft structure info in the spoiler
* generate .apmc file for communication with MC client
* fixed structure rando always using the same seed
* move stuff to worlds/minecraft/Regions.py
* make output apmc file have consistent name with other files
* added minecraft bottle macro; fixed tests imports
* generalizing MC region generation
* restructured structure shuffling in preparation for structure plando
* only output structure rando info in spoiler if they are shuffled
* Force structure rando to always be off, for the stable release
* added Minecraft options to player settings
* formally added combat_difficulty as an option
* Added Ender Dragon into playthrough, cleaned up goal map
* Added new difficulties: Easy, Normal, Hard combat
* moved .apmc generation time to prevent outputs on failed generation
* updated tests for new combat logic
* Fixed bug causing generation to fail; removed Nether Fortress event since it should no longer be needed with the fix
* moved all MC-specific functions into gen_minecraft
* renamed "logic_version" to "client_version"
* bug fixes
properly flagged event locations/items with id None
moved generation back to Main.py to fix mysterious generation failures
* moved link_minecraft_regions into minecraft init, left create_regions in Main for caching
* added seed_name, player_name, client_version to apmc file
* reenabled structure shuffle
* added entrance tests for minecraft
* Minecraft logic updates
Wither kill now considers nether fortresses as a valid source of soul sand
A Furious Cocktail now requires beacons for resistance and village access for carrots
Uneasy Alliance now requires fishing rod to pull the ghast through the portal
On a Rail now requires iron pickaxe to make powered rails
Overkill now may require strength II without stone axe, which needs nether access
* embed all apmc info into slot_data
* updated MC tests for logic changes
* put apmc into zipfile
Co-authored-by: achuang <alexander.w.chuang@gmail.com>
											 
										 
										
											2021-05-15 18:49:58 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " On a Rail " ,  player ) ,  lambda  state :  state . has_iron_ingots ( player )  and  state . has ( ' Progressive Tools ' ,  player ,  2 ) )  # powered rails 
							 
						 
					
						
							
								
									
										
											 
										
											
												Minecraft Randomizer
Squash merge, original Commits:
* Minecraft locations, items, and generation without logic
* added id lookup for minecraft
* typing import fix in minecraft/Items.py
* fix 2
* implementing Minecraft options and hard/postgame advancement exclusion
* first logic pass (75/80)
* logic pass 2 and proper completion conditions
* added insane difficulty pool, modified method of excluding item pools for easier extension
* bump network_data_package version
* minecraft testing framework
* switch Ancient Debris to Netherite Scrap to avoid advancement triggering on receiving that item
* Testing now functions, split tests up by advancement pane, added some story tests
* Newer testing framework: every advancement gets its own function, for ease of testing
* fixed logic for The End... Again...
* changed option names to "include_hard_advancements" etc.
* village/pillager-related advancements now require can_adventure: weapon + food
* a few minecraft tests
* rename "Flint & Steel" to "Flint and Steel" for parity with in-game name
* additional MC tests
* more tests, mostly nether-related tests
* more tests, removed anvil path for Two Birds One Arrow
* include Minecraft slot data, and a world seed for each Minecraft player slot
* Added new items: ender pearls, lapis, porkchops
* All remaining Minecraft tests
* formatting of Minecraft tests and logic for better readability
* require Wither kill for Monsters Hunted
* properly removed 8 Emeralds item from item pool
* enchanting required for wither; fishing rod required for water breathing; water breathing required for elder guardian kill
* Added 12 new advancements (ported from old achievement system)
* renamed "On a Rail" for consistency with modern advancements
* tests for the new advancements
* moved slot_data generation for minecraft into worlds/minecraft/__init__.py, added logic_version to slot_data
* output minecraft options in the spoiler log
* modified advancement goal values for new advancements
* make non-native Minecraft items appear as Shovel in ALttP, and unknown-game items as Power Stars
* fixed glowstone block logic for Not Quite Nine Lives
* setup for shuffling MC structures: building ER world and shuffling regions/entrances
* ensured Nether Fortresses can't be placed in the End
* finished logic for structure randomization
* fixed nonnative items always showing up as Hammers in ALttP shops
* output minecraft structure info in the spoiler
* generate .apmc file for communication with MC client
* fixed structure rando always using the same seed
* move stuff to worlds/minecraft/Regions.py
* make output apmc file have consistent name with other files
* added minecraft bottle macro; fixed tests imports
* generalizing MC region generation
* restructured structure shuffling in preparation for structure plando
* only output structure rando info in spoiler if they are shuffled
* Force structure rando to always be off, for the stable release
* added Minecraft options to player settings
* formally added combat_difficulty as an option
* Added Ender Dragon into playthrough, cleaned up goal map
* Added new difficulties: Easy, Normal, Hard combat
* moved .apmc generation time to prevent outputs on failed generation
* updated tests for new combat logic
* Fixed bug causing generation to fail; removed Nether Fortress event since it should no longer be needed with the fix
* moved all MC-specific functions into gen_minecraft
* renamed "logic_version" to "client_version"
* bug fixes
properly flagged event locations/items with id None
moved generation back to Main.py to fix mysterious generation failures
* moved link_minecraft_regions into minecraft init, left create_regions in Main for caching
* added seed_name, player_name, client_version to apmc file
* reenabled structure shuffle
* added entrance tests for minecraft
Co-authored-by: achuang <alexander.w.chuang@gmail.com>
											 
										 
										
											2021-05-08 07:38:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Time to Strike! " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Cow Tipper " ,  player ) ,  lambda  state :  True ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " When Pigs Fly " ,  player ) ,  lambda  state :  state . fortress_loot ( player )  and  state . has ( " Fishing Rod " ,  player )  and  state . can_adventure ( player ) )  # saddles in fortress chests 
							 
						 
					
						
							
								
									
										
											 
										
											
												Minecraft updates (#13)
* Minecraft locations, items, and generation without logic
* added id lookup for minecraft
* typing import fix in minecraft/Items.py
* fix 2
* implementing Minecraft options and hard/postgame advancement exclusion
* first logic pass (75/80)
* logic pass 2 and proper completion conditions
* added insane difficulty pool, modified method of excluding item pools for easier extension
* bump network_data_package version
* minecraft testing framework
* switch Ancient Debris to Netherite Scrap to avoid advancement triggering on receiving that item
* Testing now functions, split tests up by advancement pane, added some story tests
* Newer testing framework: every advancement gets its own function, for ease of testing
* fixed logic for The End... Again...
* changed option names to "include_hard_advancements" etc.
* village/pillager-related advancements now require can_adventure: weapon + food
* a few minecraft tests
* rename "Flint & Steel" to "Flint and Steel" for parity with in-game name
* additional MC tests
* more tests, mostly nether-related tests
* more tests, removed anvil path for Two Birds One Arrow
* include Minecraft slot data, and a world seed for each Minecraft player slot
* Added new items: ender pearls, lapis, porkchops
* All remaining Minecraft tests
* formatting of Minecraft tests and logic for better readability
* require Wither kill for Monsters Hunted
* properly removed 8 Emeralds item from item pool
* enchanting required for wither; fishing rod required for water breathing; water breathing required for elder guardian kill
* Added 12 new advancements (ported from old achievement system)
* renamed "On a Rail" for consistency with modern advancements
* tests for the new advancements
* moved slot_data generation for minecraft into worlds/minecraft/__init__.py, added logic_version to slot_data
* output minecraft options in the spoiler log
* modified advancement goal values for new advancements
* make non-native Minecraft items appear as Shovel in ALttP, and unknown-game items as Power Stars
* fixed glowstone block logic for Not Quite Nine Lives
* setup for shuffling MC structures: building ER world and shuffling regions/entrances
* ensured Nether Fortresses can't be placed in the End
* finished logic for structure randomization
* fixed nonnative items always showing up as Hammers in ALttP shops
* output minecraft structure info in the spoiler
* generate .apmc file for communication with MC client
* fixed structure rando always using the same seed
* move stuff to worlds/minecraft/Regions.py
* make output apmc file have consistent name with other files
* added minecraft bottle macro; fixed tests imports
* generalizing MC region generation
* restructured structure shuffling in preparation for structure plando
* only output structure rando info in spoiler if they are shuffled
* Force structure rando to always be off, for the stable release
* added Minecraft options to player settings
* formally added combat_difficulty as an option
* Added Ender Dragon into playthrough, cleaned up goal map
* Added new difficulties: Easy, Normal, Hard combat
* moved .apmc generation time to prevent outputs on failed generation
* updated tests for new combat logic
* Fixed bug causing generation to fail; removed Nether Fortress event since it should no longer be needed with the fix
* moved all MC-specific functions into gen_minecraft
* renamed "logic_version" to "client_version"
* bug fixes
properly flagged event locations/items with id None
moved generation back to Main.py to fix mysterious generation failures
* moved link_minecraft_regions into minecraft init, left create_regions in Main for caching
* added seed_name, player_name, client_version to apmc file
* reenabled structure shuffle
* added entrance tests for minecraft
* Minecraft logic updates
Wither kill now considers nether fortresses as a valid source of soul sand
A Furious Cocktail now requires beacons for resistance and village access for carrots
Uneasy Alliance now requires fishing rod to pull the ghast through the portal
On a Rail now requires iron pickaxe to make powered rails
Overkill now may require strength II without stone axe, which needs nether access
* embed all apmc info into slot_data
* updated MC tests for logic changes
* put apmc into zipfile
Co-authored-by: achuang <alexander.w.chuang@gmail.com>
											 
										 
										
											2021-05-15 18:49:58 -04:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Overkill " ,  player ) ,  lambda  state :  state . can_brew_potions ( player )  and  ( state . has ( " Progressive Weapons " ,  player )  or  state . can_reach ( ' The Nether ' ,  ' Region ' ,  player ) ) )  # strength 1 + stone axe crit OR strength 2 + wood axe crit 
							 
						 
					
						
							
								
									
										
											 
										
											
												Minecraft Randomizer
Squash merge, original Commits:
* Minecraft locations, items, and generation without logic
* added id lookup for minecraft
* typing import fix in minecraft/Items.py
* fix 2
* implementing Minecraft options and hard/postgame advancement exclusion
* first logic pass (75/80)
* logic pass 2 and proper completion conditions
* added insane difficulty pool, modified method of excluding item pools for easier extension
* bump network_data_package version
* minecraft testing framework
* switch Ancient Debris to Netherite Scrap to avoid advancement triggering on receiving that item
* Testing now functions, split tests up by advancement pane, added some story tests
* Newer testing framework: every advancement gets its own function, for ease of testing
* fixed logic for The End... Again...
* changed option names to "include_hard_advancements" etc.
* village/pillager-related advancements now require can_adventure: weapon + food
* a few minecraft tests
* rename "Flint & Steel" to "Flint and Steel" for parity with in-game name
* additional MC tests
* more tests, mostly nether-related tests
* more tests, removed anvil path for Two Birds One Arrow
* include Minecraft slot data, and a world seed for each Minecraft player slot
* Added new items: ender pearls, lapis, porkchops
* All remaining Minecraft tests
* formatting of Minecraft tests and logic for better readability
* require Wither kill for Monsters Hunted
* properly removed 8 Emeralds item from item pool
* enchanting required for wither; fishing rod required for water breathing; water breathing required for elder guardian kill
* Added 12 new advancements (ported from old achievement system)
* renamed "On a Rail" for consistency with modern advancements
* tests for the new advancements
* moved slot_data generation for minecraft into worlds/minecraft/__init__.py, added logic_version to slot_data
* output minecraft options in the spoiler log
* modified advancement goal values for new advancements
* make non-native Minecraft items appear as Shovel in ALttP, and unknown-game items as Power Stars
* fixed glowstone block logic for Not Quite Nine Lives
* setup for shuffling MC structures: building ER world and shuffling regions/entrances
* ensured Nether Fortresses can't be placed in the End
* finished logic for structure randomization
* fixed nonnative items always showing up as Hammers in ALttP shops
* output minecraft structure info in the spoiler
* generate .apmc file for communication with MC client
* fixed structure rando always using the same seed
* move stuff to worlds/minecraft/Regions.py
* make output apmc file have consistent name with other files
* added minecraft bottle macro; fixed tests imports
* generalizing MC region generation
* restructured structure shuffling in preparation for structure plando
* only output structure rando info in spoiler if they are shuffled
* Force structure rando to always be off, for the stable release
* added Minecraft options to player settings
* formally added combat_difficulty as an option
* Added Ender Dragon into playthrough, cleaned up goal map
* Added new difficulties: Easy, Normal, Hard combat
* moved .apmc generation time to prevent outputs on failed generation
* updated tests for new combat logic
* Fixed bug causing generation to fail; removed Nether Fortress event since it should no longer be needed with the fix
* moved all MC-specific functions into gen_minecraft
* renamed "logic_version" to "client_version"
* bug fixes
properly flagged event locations/items with id None
moved generation back to Main.py to fix mysterious generation failures
* moved link_minecraft_regions into minecraft init, left create_regions in Main for caching
* added seed_name, player_name, client_version to apmc file
* reenabled structure shuffle
* added entrance tests for minecraft
Co-authored-by: achuang <alexander.w.chuang@gmail.com>
											 
										 
										
											2021-05-08 07:38:57 -04:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Librarian " ,  player ) ,  lambda  state :  state . has ( " Enchanting " ,  player ) ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    set_rule ( world . get_location ( " Overpowered " ,  player ) ,  lambda  state :  state . has ( " Resource Blocks " ,  player )  and  state . has_gold_ingots ( player ) )